pax_global_header00006660000000000000000000000064146700562620014522gustar00rootroot0000000000000052 comment=e8a65a3bb0dd94606fc55e327dfd20a3b5e5279c flent-2.2.0/000077500000000000000000000000001467005626200126335ustar00rootroot00000000000000flent-2.2.0/.github/000077500000000000000000000000001467005626200141735ustar00rootroot00000000000000flent-2.2.0/.github/workflows/000077500000000000000000000000001467005626200162305ustar00rootroot00000000000000flent-2.2.0/.github/workflows/selftests.yml000066400000000000000000000042401467005626200207670ustar00rootroot00000000000000name: Run test suite on: push: branches: [ master ] pull_request: branches: [ master ] jobs: tests: runs-on: ubuntu-latest timeout-minutes: 20 strategy: matrix: python: ["3.8", "3.9", "3.10", "3.11", "3.12"] matplotlib: ["3.1", "3.2", "3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9"] pyqt: ["PyQt5", "PySide2"] exclude: - python: "3.8" matplotlib: "3.8" - python: "3.8" matplotlib: "3.9" - python: "3.11" matplotlib: "3.1" - python: "3.11" matplotlib: "3.2" - python: "3.11" matplotlib: "3.3" - python: "3.11" matplotlib: "3.4" - python: "3.12" matplotlib: "3.1" - python: "3.12" matplotlib: "3.2" - python: "3.12" matplotlib: "3.3" - python: "3.12" matplotlib: "3.4" - python: "3.11" matplotlib: "3.5" pyqt: "PySide2" - python: "3.11" matplotlib: "3.6" pyqt: "PySide2" - python: "3.11" matplotlib: "3.7" pyqt: "PySide2" - python: "3.12" pyqt: "PySide2" fail-fast: false env: MATPLOTLIB_VERSION: ${{ matrix.matplotlib }} PYQT: ${{ matrix.pyqt }} XDG_RUNTIME_DIR: "/tmp/runtime-runner" steps: - name: Check out repository code uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} - name: Install dependencies run: | sudo apt-get install -y xvfb libxkbcommon-x11-0 libxcb-icccm4 libxcb-shape0 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xinput0 libxcb-xfixes0 [[ "$MATPLOTLIB_VERSION" == "3.8" ]] || [[ "$MATPLOTLIB_VERSION" == "3.9" ]] || pip install "numpy<2" pip install setuptools QtPy ${PYQT} "matplotlib==${MATPLOTLIB_VERSION}.*" - name: Run tests uses: GabrielBB/xvfb-action@v1 with: run: make test_long flent-2.2.0/.gitignore000066400000000000000000000006041467005626200146230ustar00rootroot00000000000000*.py[co] # Packages *.egg *.egg-info dist build eggs parts var sdist develop-eggs .installed.cfg # Installer logs pip-log.txt # Unit test / coverage reports .coverage .tox #Translations *.mo #Mr Developer .mr.developer.cfg # rope .ropeproject # data files *.json.gz *.flent /*.flent.gz *.flent.bz2 *.csv *.pdf /*.png *.svg data/ # distutils gerated MANIFEST .dir-locals.el *.log flent-2.2.0/BUGS000066400000000000000000000012311467005626200133130ustar00rootroot00000000000000KNOWN ISSUES: - UDP pings stop completely when packet loss occurs, leaving out results for the rest of the test duration. This is how netperf works by design; however a better solution is being investigated for future netperf versions. In the meantime, please bear this in mind when looking at the results; especially for ping time CDF plots. REPORTING BUGS: Please report bugs at https://github.com/tohojo/flent/issues and include as much as possible of the following information with all reports: - Output on the console for the error. - The data file for the test (-.flent.gz). - Log file output (rerun the test with -l logfile.txt). flent-2.2.0/CHANGES.md000066400000000000000000000551031467005626200142310ustar00rootroot00000000000000# Flent v2.2.0 # Released on 2024-09-10. Changes since v2.1.1 include: - Support capturing and plotting CPU usage for individual CPUs instead of just a total. - Don't pass control_host values to IPv6 UDP_RR tests, as netperf doesn't support them. - Improve the GUI error message if matplotlib is not installed and when no tabs are open. - Fix compatibility with newer versions of Iperf2. - Fix a bunch of deprecation warnings and backwards compatibility issues with various Python and Matplotlib versions. - Fix some crashes in the GUI. # Flent v2.1.1 # Released on 2022-11-02. Changes since v2.1.0 include: - Fix crash on summary output when numpy is not installed. # Flent v2.1.0 # Released on 2022-11-02. The main changes in this release are some reworking of process forking and output parsing to make it scale better, improving performance with tests with many runners. Another notable performance improvement is the addition of a cache for the lookup of runner binaries. Changes since v2.0.1 include: - Add --irtt-sampling-interval parameter to run irtt at a different sampling interval than the rest of the test. - Add 99th percentile data to text-based output formats (like the default summary after running a test). - Add --test-payload option to support sending custom data files as the TCP payload in netperf tests. - Add caching of the results of looking up and probing the binaries used by the various runners to speed up test startup especially when using the remote launch feature to run binaries over ssh. By default the cache is only kept in memory (for a single run of 'flent'), but it can be made persistent with the --cache-file argument. - Rework the process forking used to fork off processes to run the test utilities. This significantly speeds up running tests with many flows, to the point where it's now possible to spawn 1000 runner subprocesses on a moderately powerful laptop. - Offload runner output parsing to parallel subprocesses, meaning that runner output parsing can take advantage of all available cores. This is only enabled on Linux as the multiprocessing module is a bit flaky, leading to hangs, on OSX. - Fix several issues with ping and fping when using --local-bind - Fix some issues with parsing the output of 'ss', and share the parsing output so the output data is only parsed once when getting the output of multiple flows. - Make sure to pass the right options to force irtt to use the same IP version as the rest of the test utilities. - Fix parsing of D-ITG output. - Fix an annoying crash when starting a test from the GUI. # Flent v2.0.1 # Released on 2021-06-24. Changes since v2.0.0 include: - Fix globbing in plot and test definitions so it works on newer Python versions - Don't hang forever while trying to process invalid time series data, and check fping timestamp output before using it (fixes a hang bug when using certain versions of fping on BSD and OSX) - Don't crash on metadata collection if hexdump is not available on the system. - Clarify that the Flent license doesn't apply to its output # Flent v2.0.0 # Released on 2021-01-14. This release drops support for Python 2 and Qt4, and associated older versions of matplotlib. The major version bump is to signify this change; otherwise consider this a (long overdue) regular incremental release over v1.3.0. Changes since v1.3.0 include: - Drop support for Python 2; the minimum required Python version is now 3.5. - Drop support for old versions of libraries. The minimum supported version of matplotlib is 1.5, and for the GUI, Qt 5 is required, using either PyQt or PySide2. A new dependency on the 'QtPy' package is added to support both Qt bindings. - Add parsing of WiFi device information as extended metadata (from Emilly Albuquerque). - Add the ping_markings test parameter for setting DSCP values on ping flows. - Add new plot types to rrul_be, tcp_nup and related tests (from Pete Heist). - Add multiple-inheritance support for batch files (from Pete Heist). - Support running multiple instances of http-getter for HTTP tests, by supplying the --http-getter-urllist option multiple times. - Add new rrul_var test where the number of bidirectional streams can be configured via the bidir_streams test parameter. - Support output of aggregate statistics per series also in csv format (via the 'stats_csv' formatter). - Make sure all underlying tools use the same values for symbolic diffserv markings by parsing the symbolic names into numeric values before passing them down to the tools. - Support specifying custom symbolic diffserv markings using the --marking-name options. This can be used to specify site-specific names for diffserv markings (e.g., 'gaming') that can then be used when running a test. - Support specifying the same hostname multiple times (for tests that take multiple targets). Previously, this could only be achieved by using different hostnames that all resolve to the same IP address; now, Flent will accept the same hostname multiple times, but will turn append a number after two slashes ('//N') to the display of the hostname when doing so. - Support ranges and wildcards in the --remote-hosts parameter for running test runners remotely via SSH. For instance '--remote-host=1-3=host1' will run the first three runners on 'host1', or '--remote-host=*=host2' will run all runners on host2. If both concrete numbers (or ranges) and the wildcard are specified, the concrete numbers will take precedence. - Fix several bugs related to plotting, the loading of old data files and RC files, running of commands etc. # Flent v1.3.2 # Released on 2019-11-26. This is a bugfix-only release of the 1.3 series of Flent. Changes since v1.3.1 include: - Fix 'make test' which broke from partial bugfix backport # Flent v1.3.1 # Released on 2019-11-26. This is a bugfix-only release of the 1.3 series of Flent. Changes since v1.3.0 include: - Fix calculation of pacing and delivery rate - Make sure series metadata is saved properly - Try to kill subprocesses with SIGINT before sending SIGTERM - Also try to parse stderr of runners; fixes issues with missing fping aggregate statistics. - Fix summary output with median values. # Flent v1.3.0 # Released on 2019-07-09. Note that this will be the last release with Python 2 support! Changes since v1.2.2 include: - New --data-cutoff parameter filter data outside a specified time interval when plotting or formatting. This is useful for, e.g., showing flow behaviour after steady state has been reached for long-running tests. - New cc_algos test parameter to set per-flow congestion control algorithm being used by Netperf for TCP flows. - Storing lots more metadata from Netperf data series, including total elapsed time, total bytes sent and received and reported TOS. - Fixes to plot label override settings. - Option to copy metadata to clipboard from GUI right-click menu. - Support for passing DSCP mark values to Iperf. - Lots of bug fixes, mostly in the plotting and display code. And better test coverage to hopefully prevent things regressing again. - Addition of .appdata.xml file for the GUI, and an RPM spec file for packaging on RPM-based distros. # Flent v1.2.2 # Released on 2018-04-17. Changes since v1.2.1 include: - Add workaround for the new timeout behaviour in fping v4.0, which would result in no ping data being recorded. - Fix plotting bugs where the idle period at the start and end of tests were not removed from aggregate plots in single-flow TCP tests. - Add missing {bar,box}_combine_{up,down} plots to RRUL test. - Fix filtering of combination plot filenames and make sure legends are filtered in box plot ticklabels. - Add voip_marking test parameter to set diffserv marking for VoIP flows. - Add udp_flood_var_up_staggered test that runs multiple UDP flood flows with staggered start times. # Flent v1.2.1 # Released on 2018-03-28. Changes since v1.2.0 include: - Fix DSCP handling for irtt flows. - Fix several crashes in the GUI. - Fix handling of empty data series and several potential crashes in the plotting code. - Fix potential crash in metadata gathering and add timeout to commands. - Add several missing plots to various tests. # Flent v1.2.0 # Released on 2018-02-06. Changes since v1.1.1 include: - Add support for the irtt binary (https://github.com/peteheist/irtt/) for isochronous UDP latency tests. If irtt is available in $PATH, it will be preferred over netperf for UDP RTT tests and over D-ITG for VoIP tests. This means that UDP latency tests will no longer use more bandwidth as the RTT decreases, and VoIP tests are easier to setup. Many thanks to Pete Heist for writing the irtt tool. As part of this change, a generic facility for runner preferences has been added, which makes it possible to define a test in terms of higher level functionality and let Flent pick the best available underlying tool to run the test. For now this is only used in the cases mentioned above for irtt. - Add a configurable option for overriding the colour mode for plots. This makes it possible to change how colours are assigned to different data series. - Improve handling of multi-value options between batch files, rc file and command line. This means that multi-value options can now use both comma and semicolon as separators in the batch file, and values can be quoted to prevent splitting. - Drop compatibility with matplotlib versions earlier than 1.4.2. Using older versions resulted in spurious errors anyway, and it is too much backporting work to support them properly. - Fix batch mode logging to make sure a log file for a batch run only includes log lines from that run and not previous runs. - Fix several bugs in the plotting and runner code. # Flent v1.1.1 # Released on 2017-11-15. Changes since v1.1.0 include: - Fix several plotting bugs resulting from the overhaul of the plotting code. This includes a couple of crash bugs, bugs in the airtime plots, and a bug where all bar plots were completely broken, showing wrong values. # Flent v1.1.0 # Released on 2017-10-26. Changes since v1.0.1 include: - A complete overhaul of the plotting code so that it now uses the exact data points captured from the test tools wherever possible, instead of interpolating values to align data points on the time axis. This should improve the accuracy of plots, especially for integer-value data series such as packet drops. - The GUI has gained a new widget that makes it possible to control all plot-related settings. Previously, only a few of the settings for generating plots that are available on the command line could be set from within the GUI; now, the full set of command line settings can be manipulated in the GUI settings pane as well. - Another rewrite of the plot layout algorithm which should result in fewer issues with plot elements such as titles being drawn on top of the plot. - More keyboard shortcuts in the GUI: Ctrl+Up/Down will move between different plots, and x/X and y/Y will zoom the axes in/out. - By default, batch run order is now randomised to prevent periodic errors biasing results in long tests. This can be turned off with the --batch-no-shuffle option. - Netperf is now instructed to prefill its buffers with random data, instead of the data packets consisting repeated 7-byte strings ('netperf'). This ensures that data flows are not trivially compressible, which should improve test accuracy on encapsulated connections that enable compression. - Added support for setting TCP congestion control and diffserv markings as test parameters for some tests. - Added support for capturing socket statistics for TCP flows and store them as an auxiliary data set. This makes it possible to capture window size and RTT estimates from the kernel TCP state machine (Linux only). Thanks to Matthias Tafelmeier for the initial implementation of this feature. - Added support for watchdog timers to make sure runners don't go over time. This is applied to the fping runner thus far. - More metadata is captured from test runs; in particular, Netperf TCP_INFO variables, the congestion control used for each flow and socket buffer sizes are captured for every flow and stored in the metadata object. - Numerous bug fixes throughout. # Flent v1.0.1 # Released on 2017-01-16. Changes since v1.0.0 include: - Change the default hosts used for rtt_fair tests. One of the old ones did not exist anymore. - Fix a bunch of crashes and behavioural issues in the new test dialog in the GUI. - Make sure log entries emitted during startup make it to the GUI console. # Flent v1.0.0 # Released on 2017-01-14. Changes since v0.15.0 include: - With most of the longtime outstanding issues closed, Flent has now reached the big 1.0. Woohoo! - Use the UltraJSON library (if available) to load data files; this speeds up loading of data files moderately. - Improve logging of Flent's operations. The log file will now contain a proper superset of the console output, and Flent has been made slightly more verbose about what it is doing. Also, the log is now shown in a pane in the GUI. - Fix an error breaking plots on Python 2 and some versions of matplotlib. - Support PyQt5 in the GUI (and prefer it over PyQt4). If PyQt5 is not found, fall back to PyQt4. - Add new SummaryFormatter that outputs mean and median values for each data series. This is the new default formatter, meaning that its output will be shown after a test run if no other formatter (or plot) is specified. - Support multiprocessing in the GUI. When loading several plots at once, plotting will now be passed off to separate worker processes. This allows plotting to use all the available processors on the machine, and speeds up loading of many plots tremendously (initial load is sped up by an order of magnitude). This change also means that re-plotting on config changes will be done dynamically in the background, which makes the GUI more responsive. - Make text completely black in the default colour scheme. This increases contrast, and helps legibility, especially on printed figures. - Some internal code changes: Port command line parser from the old optparse class to the newer argparse, and fix a bunch of linter errors. # Flent v0.15.0 # Released on 2016-10-01. This release represents eight months of development since v0.14.0. There are several new features and a bunch of bugfixes. Also, starting from this release, Flent will be packaged for Debian and included in upcoming releases of both Debian and Ubuntu. Thanks to Iain Learmonth for sponsoring this. Changes since v0.14.0 include: - Several new tests, including the rtt_fair_var* tests and tcp_n{up,down} tests which take a variable number of hostnames as targets. - Fixes to the UDP tests and a new test parameter to support setting UDP flow bandwidth. - Support for setting TOS values for some tests. - Added parser for WiFi statistics such as aggregation size and airtime (the latter requires a patched ath9k). - Support globbing in test plot specifications. - Added test mixins for adding several types of extra flows by specifying test parameters. These include ping flows, VoIP flows, HTTP traffic and WiFi and Qdisc stats. The parameters are documented in the 'tests' section of the man page and documentation. - Generate a UUID when running a batch sequence, and support grouping combination plots on these. This makes it possible to turn individual batch sequences into data series when plotting combination plots. - Support saving the intermedia result sets generated when creating combination plots. This speeds up subsequent plottings of the same data (which is helpful when experimenting with customising the plots). - Added a bunch of command line options to customise lots of aspects of the plot appearance (labels, legend placement, etc.). See man page or --help output for details. - Add a runner to parse /proc/net/netstat TCPext mib entries. - Customise plot appearance by directly setting matplotlib RC parameters instead of loading an RC file. This means that plots will always use the included style unless --no-matplotlibrc is used. - Allow plotting results from different test names on the same plot. This is especially useful with the mixins, which generate the same series names independent on which underlying test is used. No checking is done for whether two different tests make sense to plot together, though, so use common sense. - Support computing Jain's fairness index as a plot combiner. This means that it is now possible to plot the fairness index across averages of datasets, for instance to compare average throughput values over whole test runs. - Support computing (and plotting) MOS scores from latency and delay values using the ITU G.107 06/2015 E-model. - Added rudimentary support for running a test runner on a remote host. I.e. Flent can now SSH to another host and run (e.g.) a netperf instance and add that data into a test. - Support normalising data series by each other when plotting. This can be used to, for instance, normalise individual host throughput values by the total throughput to get a fractional value. - Support using the raw values when reducing data series in combination plots. - A bunch of bug fixes too numerous to list here. # Flent v0.14.0 # Released on 2016-02-03. This release adds mixins for capturing qdisc stats and CPU usage, adds some convenience functions to the GUI and fixes a bunch of bugs, most notably making the GUI work on Windows. - Batch mode: Try to estimate the total runtime of a batch and print it before executing the batch itself. - GUI: Add support for pinning a metadata item open when flipping between tabs, and support adding columns to the open files view from the metadata view. Both functions are available from the context menu when right-clicking in the metadata view. - Add test mixins to a bunch of tests making it possible to simultaneously capture qdisc stats and/or CPU stats of one or more hosts while the test is run. This works by setting the test parameters qdisc_stats_hosts, qdisc_stats_interfaces and cpu_stats_hosts to comma-separated lists of hosts and interface names. The functionality relies on the tc_iterator and stats_iterator helper scripts. - Add a C implementation of the tc_iterator helper script that works on OpenWrt and also gives higher polling accuracy than the shell script. - Add a kill_timeout setting for runners in test definitions which will forcibly kill a subprocess after an interval (if it hasn't exited already). - Add the tcp_upload_1000 test for seriously overloading things. On most systems, increasing the ulimit is necessary to run this test. - Support globbing selectors in plot configuration when specifying datasets for a plot. - Record number of failed runners (non-0 exit status) as a metadata key. - GUI: Fix bugs in plot blitting on older matplotlibs, fix test running without a pre-set HOST, fix bugs in draw cache handling, and restore the GUI to a working state on Windows. - Various bugfixes. # Flent v0.13.0 # Released on 2015-11-06. This release of Flent adds a couple of new features to the GUI, updates Iperf support and adds a bunch of bugfixes. - GUI: For line graphs (timeseries and CDF plots), highlight data series when the mouse is hovering over the lines themselves or their corresponding legend items. This makes it easier to pick out specific data series when browsing graphs. There's a toggle to turn off this feature, since it can perform badly on slow systems and/or causes flicker in some instances on OSX. - GUI: Experimental feature to run tests from the GUI. Fairly basic thus far, but it is possible to run a simple test from the GUI which will subsequently be loaded in the graph view. - File format: Bump file format to v3. The file format now uses UTC timestamps everywhere internally, which is an incompatible change; hence the version bump. Old data files will be loaded assuming local times and converted appropriately on load. File name date stamps are still done in local time for the box running the test. - Bring Iperf support up-to-date. The newest git version of Iperf (2) adds support for sub-second timestamps. Flent now detects this and can use and parse Iperf results when this support is detected. So far, no tests actually use Iperf, though. - Flent will now capture the module version of a running Cake shaper module as part of extended metadata. TCP buffer size limit sysctls are now also captured. - Some bug fixes related to matplotlib and Qt version compatibility and weirdness of the OSX file selector dialog. # Flent v0.12.4 # Released on 2015-09-22. This is a small bugfix release. Changes since v0.12.3: - Packaging fixes for Debian. - Support for Python 2.6 has officially been dropped (it had already bitrotted, so now a nicer error message is shown straight away). - Bug in local_bind for ping commands fixed. - More graphs for tcp_* tests and fixed labels on HTTP test graphs. - Catch unhandled exception that caused crashed when using a null output formatter. # Flent v0.12.3 # Released on 2015-08-03. This is a minor bugfix release, fixing an important regression in the GUI preventing files from being loaded when running under Python 2. # Flent v0.12.2 # Released on 2015-07-29. This release includes a major refactoring of the plotting code, which should make it easier to extend in the future. Other changes since v0.11.1: - GUI restructuring: The plot settings now reside in a menu, the metadata view defaults to the bottom part of the window, and a new open files view has been added to make it easier to manage many open files at once in the GUI. - Revert to writing data files to the current directory by default. A new parameter, -D, can optionally select a different output dir. - The man page is now generated from the Sphinx documentation. - Try to detect if the system `ping` utility produces parsable output before using it. Should give nicer error messages on OSX if fping is not installed. - Add a new qdisc-stats test which will periodically gather qdisc statistics and a wlan-retries test which will gather WiFi retry statistics. - New tests comparing different TCP congestion control algorithms have been added. - Add a --replace-legend parameter to do search/replace on legends when plotting. - A test suite has been added containing basic unittests for parts of the code. Test coverage is still fairly poor, but will be extended going forward. Run `make test` to run the test suite (requires the 'mock' Python library). - VoIP tests can now show loss rates. - A bunch of bug fixes. flent-2.2.0/LICENSE000066400000000000000000001050771467005626200136520ustar00rootroot00000000000000Flent is covered by the GNU General Public License v3 (GPLv3), reproduced below. For the avoidance of doubt, this only covers the source code itself, and has no impact on any of the output produced by Flent, be that data files or graphs. --- GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . flent-2.2.0/MANIFEST.in000066400000000000000000000005661467005626200144000ustar00rootroot00000000000000include flent/tests/*.conf flent/tests/*.inc flent/ui/*.ui flent/scripts/* include misc/* include unittests/*.py unittests/test_data/*.gz include doc/*.rst doc/_static/* doc/_templates/*.html doc/conf.py doc/Makefile include Makefile BUGS README.rst *.example man/flent.1 include flent-mime.xml flent.desktop flent-paper.batch include debian/* recursive-include packaging * flent-2.2.0/Makefile000066400000000000000000000014461467005626200143000ustar00rootroot00000000000000PYTHON:=python PREFIX:=/usr all: build build: flent/*.py $(PYTHON) setup.py build .PHONY: test test: $(PYTHON) -m unittest .PHONY: test_long test_long: TEST_SUITE=all_tests $(PYTHON) -m unittest .PHONY: install install: $(PYTHON) setup.py install install -m 0755 -D -d $(PREFIX)/share/doc/flent/misc install -m 0644 -D -t $(PREFIX)/share/doc/flent BUGS README.rst *.example install -m 0644 -D -t $(PREFIX)/share/doc/flent/misc misc/* install -m 0644 -t $(PREFIX)/share/man/man1 man/flent.1 install -m 0644 -t $(PREFIX)/share/mime/packages flent-mime.xml install -m 0644 -t $(PREFIX)/share/applications flent.desktop install -m 0644 -t $(PREFIX)/share/metainfo flent.appdata.xml .PHONY: doc doc: $(MAKE) -C doc/ html .PHONY: man man: $(MAKE) -C doc/ man cp doc/_build/man/flent.1 man/ flent-2.2.0/README.rst000066400000000000000000000034651467005626200143320ustar00rootroot00000000000000Flent: The FLExible Network Tester ================================== Flent is a Python wrapper to run multiple simultaneous netperf/iperf/ping instances and aggregate the results. It was previously known as 'netperf-wrapper'. See the web site for the main documentation: https://flent.org. Installing Flent ---------------- Installing Flent can be done in several ways, depending on your operating system: - **Debian and Ubuntu:** .. code-block:: bash apt install flent - **Fedora:** .. code-block:: bash dnf install flent - **Ubuntu pre-18.04:** Add the `tohojo/flent PPA `_. - **Arch Linux:** Install Flent from `the AUR `_. - **Other Linux:** Install from the `Python Package Index `_: .. code-block:: bash pip install flent - **FreeBSD:** Install the package .. code-block:: bash pkg install flent Or install the port .. code-block:: bash cd /usr/ports/net/flent && make install - **macOS:** `Homebrew `_ and Python 3 must be installed (Python 3 can be installed using Homebrew) Install the `patched netperf package `_ .. code-block:: bash brew tap kris-anderson/netperf brew install netperf-enable-demo Install other dependencies .. code-block:: bash brew install fping pip3 install matplotlib --user Install Flent using pip .. code-block:: bash pip3 install flent --user Optional (install this if you want to use `flent-gui`) .. code-block:: bash pip3 install pyqt5 qtpy --user Quick Start ----------- See https://flent.org/intro.html#quick-start or doc/quickstart.rst. flent-2.2.0/batchfile.example000066400000000000000000000123001467005626200161250ustar00rootroot00000000000000# -*- mode:conf -*- # The batch file is parsed as an ini file, and can have three types of sections: # commands, batches and args. Each section also has a name. Type and name are # separated with two colons. # # Sections of the same type can inherit from each other. Args are used for the # loop facility (explained below). All variables are recursively substituted by # using the${varname} syntax. These three operations are resolved in this order # (inheritance, arg interpolation and variable substitution). # These are commands to be executed before or after each test run. Any number of # commands can be specified; which ones are run (and the order) is specified # below in the batch sections. # # The part after the :: is the name of the command, which is used to refer to # the command in the batch sections below, and so should be unique for each # command. [Command::setup_qdisc] # Any command. Subject to variable substitution - in this case ${filename} is # the filename Flent will generate for the test being run (sans the extension). exec = ./setup_qdisc.sh ${qdisc} # type can be pre, post or monitor type = pre # An essential pre command will cause the test to be aborted if it fails # (returncode non-zero) essential = yes # A 'batch' is a named test to be run. It can specify normal Flent parameters as # well as any other variables that can be used for substitution. When executing # Flent in batch mode, -B specifies the batch file (this file), while -b # specified which batch to run. The special argument ALL to -b will run all # defined batches that are not set as inactive. # # Batches can inherit from each other, so it can be a good idea to have a # 'global' batch that sets most parameters, and then override things in # sub-batches. [Batch::global] # These are all Flent parameters that correspond to command line options. extended_metadata = yes debug_error = yes debug_log = yes title = ${batch_title} qdisc:${qdisc} ecn:${ecn} rep:${repetition} output_path = batch-${batch_time}-${batch_title}/${batch_name} ip_version = 4 length = 30 hosts = test-target-host # This is a special variable that specifies things to *append* to the filename # Flent generates (based on time etc). The first part of the filename will be # the same for every test in a batch, so the idea is to use this variable to # disambiguate subsequent test runs (so putting 'repetition' in there is # generally a good idea). # # The 'repetition' variable is another special variable that will get assigned # the current repetition for each run. filename_extra = ${qdisc}-${repetition} # These are the commands to run; must be specified as command type sections # (i.e. this one corresponds to [Command::setup_qdisc] above). commands = setup_qdisc # This is a special variable that causes the test in the batch to be repeated # this many times (setting the ${repetition} variable for each). repetitions = 1 # Special variable - how long to pause after each test run before proceeding to # the next one. pause = 5 # Special variable. A batch can be disabled in two ways: Setting 'disabled=yes' # which does what one would expect, and by setting 'abstract=yes'. The # difference is that when another batch inherits from this one, the value of # 'disabled' is inherited, while the value of 'abstract' isn't. abstract = yes # These are variables that are used for variable expansion in settings above. # The idea is that other batches can override these to change part of the # configuration. batch_title = untitled # not used ecn = noecn # This is the loop mechanism of the batch facility. Each variable that starts # with for_ defines a loop (Flent doesn't care about the part after for_, but # they matter when inheriting). The batch will then be repeated for each of the # values of this variable. Each value must be defined in the batch file as a # heading of type [Arg::name]. The variables in each [Arg] section will then be # applied on top of the batch containing the loop before the test run # corresponding to that arg. # # When multiple for_ statements are present, the cross product of all of them # will be run. Likewise with repetitions (each arg will be repeated as many # times as specified). # # The example here is used to repeat each test run with different qdiscs. for_qdisc = pfifo_fast, codel, fq_codel # Other examples: #for_ecn = ecn, noecn #for_delay = 10ms, 100ms # These are the actual batches that will be run. Each of them just inherits from # 'global' and overrides some variables. [Batch::tcp-upload] inherits = global test_name = tcp_1up_noping disabled = no [Batch::rrul] inherits = global test_name = rrul disabled = no # These are the args used for loops in the batches specified above. The arg name # (the part after ::) is what is put into the for_ variables. Args can inherit # from each other just like batches (but none of these do). In that case, arg # inheritance is performed before the values are interpolated onto the batch. # # These args all just set a single variable (which is then used in the commands # defined at the top of the file). [Arg::pfifo_fast] qdisc = pfifo_fast [Arg::codel] qdisc = codel [Arg::fq_codel] qdisc = fq_codel [Arg::ecn] ecn = ecn [Arg::noecn] ecn = noecn [Arg::10ms] base_delay = 5ms [Arg::100ms] base_delay = 50ms flent-2.2.0/doc/000077500000000000000000000000001467005626200134005ustar00rootroot00000000000000flent-2.2.0/doc/.gitignore000066400000000000000000000000071467005626200153650ustar00rootroot00000000000000_build flent-2.2.0/doc/Makefile000066400000000000000000000165151467005626200150500ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " applehelp to make an Apple Help Book" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" @echo " coverage to run coverage check of the documentation (if enabled)" clean: rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/FlentTheFLExibleNetworkTester.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/FlentTheFLExibleNetworkTester.qhc" applehelp: $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp @echo @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." @echo "N.B. You won't be able to view it unless you put it in" \ "~/Library/Documentation/Help or install it in your application" \ "bundle." devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/FlentTheFLExibleNetworkTester" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/FlentTheFLExibleNetworkTester" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." coverage: $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage @echo "Testing of coverage in the sources finished, look at the " \ "results in $(BUILDDIR)/coverage/python.txt." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." flent-2.2.0/doc/_static/000077500000000000000000000000001467005626200150265ustar00rootroot00000000000000flent-2.2.0/doc/_static/.gitignore000066400000000000000000000000001467005626200170040ustar00rootroot00000000000000flent-2.2.0/doc/_static/custom.css000066400000000000000000000002361467005626200170530ustar00rootroot00000000000000.screenshot { float: right; max-width: 50%; margin-left: 15px; } h2 { clear: both; } div.content ul.front > li { margin-bottom: 15px; } flent-2.2.0/doc/_static/flent-screenshot.png000066400000000000000000011767061467005626200210410ustar00rootroot00000000000000PNG  IHDRW (8 pHYs+ IDATxwxU{sz H   WaZɮba-+.ADz'RH3 |gnQ>9sA0]򲫢QGU4*"""""""""rS*"""""""""R WEDDDDDDDDD*@᪈HTSej7&&F _i)UUU,.DU*"""""""""%:::_hZBzVS Qi!lX4%%E᪈"Ҝ5::.Ujn;E9!jffЦMJVDDDDDDDDD6o _4'tX4CJ Wcbb :TZ0LMMM52224bUDDDDDDDDD* /,ݼy3~~~vސ?Rj .tQQQFjjQ0D2<OFDD(t"8q0vAAAݻ`_~Ve`p`2<70 UHᏐ5lj'lmڑVNZY#X+r9bVZ$Gppن5 כLT*"""""""""Er:E..sFFWm{<3oZ#XO+\-jĪv&'';^0M0W*""""""""'Qd ]Nn;N;'h 5SRR 5eF||8x 7L4L4,2|}} ˲oY(1ٟeidee9222xGTTb111yM (M6deew:<p8nt+4EDDDDDDDDD*eYn˲|t:].x,#554rp5<)))Fjjxlt:s]mۧrNSDDDDDDDDDҹqz^vx^#;;x׀a@{::92`@c>]^IK+|h; 5y 3Lc +=ci^Jfנh..]S +3my`Q^}jԢl6 f7pjt:sG;v9ֻ|`t~W0퍩t=p^ՒJՠn1E/gx}`gVhw/t]ו;q2A:<{;OmE;xcg2xps+(̦ Ӝ 94_\<ɻkRz'7ۇ>K v['봝Lod|-u!!nld&}=ne5a,wWr_ޟԅ;8eW9W<8܋ӯ . "7?1BC^mid;#? ^b|O?u mƙ=Ȼ|kXg|5uG2 lڋQ(*]DDDDDDDJ1t( :jg'|_<˔ޕQ'i{`,]~hY0.U>tؘ}7q26tKMֲt XZNDWr lԝ^60OX7L5\ԏgOe|:,"42x -{,{]O9l}dw1?oBߦg.3BҿƵ;01mԍ:~?#\b+ӼU<]`0i|ݼܧlє""""""""%:p5U\3mfG[Ӿh5]qEwmPze1 0Z|]ۉЁ;6Y_bŲv"6UTLwKnn6F<3W[bͧs-t::H󞝨wq&{؅\?=5 oψk::JXyk8"IKaBCLM 6hKF! k҉vI',fe .>Gz} _:_q5ѡ.pEkt|9KVU""""""""#Qe+W:5-ap8gJL !s5oq#on5p_wO)Sm!;I?jP8..G\~u2p/]Oͮ0}g&ty(\vw qygD[kU4 gmc$kg;,8\ߓHH"煱ӏs,=f!8aH0l>9Ω9W{3:fg92,=$Ȗ#U59/\ fm_z\/m;٬ FmE×p]ؑFU*xdު9E'g.h^wI5ؾ ƶIwz/bsV{3VfVI&hV3[#N;_56nBO0!n ;=?~SfIWr}V,I^&X_"z69ȹRp6ygn|$mh]jiӏ>>nGh1Wb].wq4tӱ{K^\w6ӻ|84ˇк-9 \F` 5w\]=xGw9jqGncqYlR3nd,4<@v >g;F:q޺B"E^u֤Eki'"C.%'k8Q:d1na1M{q## /&""""""""L s1bccx#>>ѨQ#رcN???a.˲|n۲,`veY|3 ȩ-\Aû|ۅJSEDDDDDDv_$qҲ4 7+===pdgffV||iEFFvLLLQ7XԴr.b K>`7y _|wt;*XvZJDDDDDDD4TM53;8faФp.MDDDDDDDDO[[Ն{M*DDDDDDDDI@DDDDDDDDDTU P*"""""""""R WEDDDDDDDDD*@᪈H(\`Tw""""""""ò,vEzFFu""gE5qJoQDDDDDDD ۵kj""͹*"""""""""gDoCIK?`]`? ףE  J WSRR*medei徳EJj*jG֬f~~~D֬˥ՈH0MWeBIN>I歴nقݻt:+6mڰ{n 22.3ڽu" *O`ԮYݥ9ƶm222?~uTw9"""""""r0M'.Hnٶ'2h`eQmڴ!##Gfee(X= Ռ.Ca]c+sՒw+VV9"""ʕ>p9m]xs77oŤu?g"~a,ej#!11w*hذA6lr-[X+H᪈]&.r9OaѪ bq*L%R/K4_T(`;pb/`mذaxmeq|?8pB}y/ <NFDDiiiiUm$%IHLd݇ϸkZTb3{l9&Oc4Bi|n2?cT2w|w9}\ûoYI`Tonw/G:L{C?B#f=}Ci̒7+/*vp/d~BFѿ̛K ~ej/'+'`Я/``a`V5\=+s+99nJ-޽k&g/˲ؽ{/qG AFFQNph979w9q=/dk??2+Lu"O&\ze\ST9j9X:jNݕ]P ‚ ZsKbv-wr{N\6ɆE]3e5^&7Ó]IW˛=O}˗$.T0rMڛWξ#,_{tPUSgÎTuP;8F>V qCh\_TV;ݻ ,6xٗ={i,L)"""""Ri!-zS sM?L=̉puxLsfbI$EYN1$ZI$FsN5 9lShj3@@9X˪Az$'9'X;j9XNР~?r:Uc?~ȌH^sG\.FE 1Ѱa'~emj,&qtcKCIn,fIJv,#eLwV&>g:Qs?`c9,ۓ v ^W^iii#VN'ݺua۶$$$;.<<-[b*L$.u"""""rnrʑpWAsیЧ`7olCG3wl#8m?dz(ƩeK YHsΰ"> Պ? F9α Z[SW 9sͿZOq|&G#e[>~a^/ -.4 :'_hqQ۷<#54':$(fWڱٹ0eT&"~sv~7u{n_^;9o*cMd۶jт?B0Zhmj=r4B}T'r'GNfIƹݤ/cƴeJYqΦ=[{L[,cl}"$]d6]TŪdC %kkW#M0&>Jyl̝6l@935j%CqɐA Vhݲp*ϋ\֭ZVWP\m(8GAY>E&ϋ'|kیX~inÚ,Aɷ^o,킻UObx,ړV;.+ju|?9à"Dz!iVPnf+[sdl;\q ai|,Dk*naf5Zd?Vg+s>ÒtAMy٩E3c7kؗA-2G``Պ$ghHGp|5=d.GW`mmgw'o>W5p[Ln D1N!|*lVⱭ[{8so{uQ=KY߁F'>qMG_bVJYܳ_;p_YW|65rӦ_?;J*i#7ᵬ8vC&eWlL/߭iU7ZqAI-5j~r+nhzMXyxq6iu' ˪rMs:\ܣ;\}mZ!Di5W_=W[ "X'H IsN7L;kހAwL&wì$2i䠼:BB 8DRpjHLHPكZykN*W8zrcx35j҃Չ[}]btc"Ρv]j%E ]:WSV#_ S7` +ԞTPEuvM WV$cSM#| $[bΚRo.nE?UN~K fV;g 9qk>v\ۻP3kqH[yny|]cTJk+. #|1؆?G$˶+⢣VG?$ŴH߿ָܥ)>,k:k>v:lY8D͙e9<P7sEDDDDDDD䔳k䪙X.1jͭfҫ2,chD+/Wq+/y>Wkn}v&,#>įv[.RZ{xZ*yW,ӹ_/<,-[ev^/|y+8p0߾֭ZVFaf w&yVoa+3!~%4ȻQVfṇaR@Sto?|Gǃ wHևIHSeJ?/!Mq~ kPg&5j$~4J O+Fs>@yZ+#00uwib*L,TnBBb}u! 0g-"""""""r3(b̘#66ֈ7RRR(#>>viii˲||݀m;ضs]\g6nSUy>d{_iw슏Oi0o>qqGt|u8i-ODDDDDo@N 9K^ ۷皫H,+4t02|}}ӳ-򆆆njvmۑvtt fa< Xkk+zyl0uѝN'C dUutֵVL;ݙJ k5[ uw _3_p8mӚ{׭[Mq8΁wߝݽtN{tUl߾~jԯO ?!mˍ="͢[6GƓvFڑҒȟytg~ܹ.<,wVw)pF1駪 )@EMsRu/."""""""""r;/GȟeX,۪RD9EGrU]pUDDDDDDD7fԪYK ̬MtpaYeY VEƍaYU;\MIM=I9dggRe9l ]gi CcDtFՠ3ٝ_DDDDDDDI8]hq]H9+GQeK᪈H(\"""""""򧒽fW {3ةw# k+j9Uף ,W%ndQKm2 _0MU/tZ4&"""""""");ytn; ]/Kמ2.A&N]Tp6aȘ2yY֠?Alx bsr+c**ֳqf223dͬ]:"""""""b`Tw bbe;\t|h˗od &hK1sv=OK3W}fӢwZ(ڴO~nΊ˅j1v;j~ˤǪnv]hۮ]{*)K ."""""""r5_Ƃ]\1r{{7kGu`~# OtD:r F߭׬8ONnR(f+ 8]^g6K#YN7#(|r?pɤiQߋ% ^\|n*f՗;'b=֧<2 |JlfT7e7'zM39>OΌ?[ ^wF&<׍lVee|o8[o%vݴ2#0o4h䪈1ula.߼1_93ÌǞgY{2"sצY6ś"i_Ł5I+݀w3W?aڠgW*8l>m5`d{|o~OœCV7`_G5ux`ݪmxǯk.tۺRԔ"Zo' vLؘ떰%bݘvk&ۅ #@ZF8d>S-5MB1? "8z*|` иlpR#4̔TÏn\K.p_v%C)Srr^RsKG9_9\O~tzpOMv]c5*#Fab*iDDDDDDDe%%r28Zyr '"'rDDa%p<ٴ}_bt|]CE7ҫA&}#jGSO Dzp, FOIH*[EG-٥O^Sz9q"8֞#>FD` sşOiu\[9VuϽ!\/)$%iZk\\-{IOtnU9o9Bk ۼ)d49#" KXc;¨jO+_ՋX:޽߶]V/kՙ.uraTZY+|4LXe: =}yY+\tz`(Χ:u橊Mv8Gvz->HII1xv9, v~#ж`۶ffvq߰Ν:VР =OD\a&ͣVZtԩˑTjj*+V 11뮻˩RY;vp뭷Vw9x3g:u"**)}-..nBBBHJJ⫯"--nZjUs""'5-R[f-o_q95kuqJܕIw99bI"x72iSd?1weD{f~4-όb}8}Fobz ۷皫H,+4t02|}}ӳ-򆆆njvmۑvtt 7ö5rUD,sN̥^ܹs9OeeeOs饗2y.M4C2q.V\I=6l[uS.>+ɓ;v,K,{?[oeҥL0z+nk??%]jʪi}XكsQ""R^͛7gΜ9g&'N(4ңGzoqJs/?<˖-RΈGym۶p.ܺvG}Dttt_%} =fbڴiZ 0x饗[.ƍcΝRnݺ֞̋ 1:OVwU|ED*dժU<t҅5jr _~|GUo`1ӟ\~n:|}8PHNNcȐ!ԫWۍ?[f$$$T[mW_}FaÇg˖-:ѣq\nݚӧWZ~~~VQRRRx  00|J=\R@@ݸW}Çy'4h 4ח5krEoz++))Áa 80/_~9qj6_fC:up8*gΜɀ*-9O1ϘЩR WED  b^W_}G2oc&LPU^ѿq:Ѽys7oogƍtX E$t,X@۶miҤI;vtRn2UeQvmj׮ y饗ذa ,#>}}3Q z>\)ƍϘ1cY& >G;f׮]3 ߎeYqFx'ro7>|8  4_|MʸqmW_}SfM~m֬YC>} ⪫"Jiii?ze]+t àaÆO26m@.]rYţ>Jz bРA,Y%Kp}ѤI9ƍKO>ܹ3_?<34o:w/ٸq#ƍy^K/DӦM ]p&ǪUݻ7DEE#Us;]{/;_~~^|ϱ,I&Ѻukܹ3v*jgϞ8pAȈ#NϟO߾} ~L8ЈgkF SNl޼P[ӧOcǎЪU+/_~?ӷo_i֬ ? ੧`ѢE4k֌H}QsZh 88PB9mƵ^W\}ԩׯ?VZOǎ:u*@+W$::0_J\\k!(((;Wqoڴ/`y睲s\/bݻw3bBCC]6cƌ7-Eq㒾s[W~={vn>j( **+VeY}pI-[pҤI-[_|A&M/_~L>]vG`` Ǐ/׹H'aŊ|>}Э[76o̼yؼy3^{m1=]t]wׯgL6>۶mK||<'N$))_{???4hO?кnLll, 3$֬Y;v, ,`„ L2ӧ3gf͚gZZ}%<<իW|r222K G塇f͚u],\;vлwoܠgҥ,]d:wL&Mطo1<g֭B˲+ؿ?-bӦM2h fϞ @v0`v"..Cʕ+yGؿ?pjC2j(8C=ɓer}۷D&MoԩS?>of|e >pn7?0Ǐ'..Ç3qD{9<[u>_o駟Z&''ssN~',X]r>(SLСC7me1cǏcL8 &K/̙3hٲ%pl/g͝K_fݼ+/vѫlْɓ'>zh׿۶aOΝ;رc={>~ٵkW_lڴK.믿]vg1wS縤܊s?>[l᧟~K.#Z|IvҥK )wW֭ٷo_}~!/&::͏?7LTTiiiرe˖>ӧpUDwuԬY+WdwxÇswRV-:u#}k%::ZtrrĄ &0i$vܩ{nj׮?9ק^zߟǏxbvg} /kbl۶FaaaA߾}YjΝ;3l0 FDDÇgҤITVM}́ٱcu‚s :_b.u ƆիWsy=?֭Kݺu5Y .3/7y~zy/ݻRJann΄ !::Z~1ydv특9͛7gĈl۶O='Obnnd紴YGGjժQbE(L2@Vvڵ-[ Lɒ%B&OJppp(  E' Xd 7n;;sűg5q=d#6lȑ#ԯ^NO4FG7^$kײ}v`ddT-Zp-ƍGfffNҥ[YYslmmҥKԯ_CahhbH3f̠Dܹ3FFF\~իWH"0j(߿cD_~I۶m5~}J.M޽i߾='N$66V=m{]/Wu5hz\t)۷ϑx{u5n``N) j׮ڲe rzil7n2L=-A~Xj(JnݺEbb9˖-aÆXYY7m6WwرcTTI_~kkk6mJFF*/X d/}'o%vaeeEZXb9Mn<==#,, @r9u +P(Jk׎@BCCYnnݢy\|˗/رc5b9s&+WFǯ~qE.\ĉߨ>ݱF9\AA/\AGɒ%)[,3gdj ETdԟ[nq\{,Z-[2`N\.)Ν;5b ʕ+{:ttt(S +VÃ5jQyE}v5nAALAzł >|8ΝS|9B(...<<$...O.]ؽ{7۷͞.l[_5nܸzOSfMuli[n^*+V\Zb޽ǫ׉urMr,Jt9$IW^̟?5k$G[j QoSTbhhH2e4>/xUVr]չF sٙ޽{k|pAAA祧k,}xb?gFPЮ];N8GXd ~~~,^&**cDzsN___y&ݻwW.]Ľ{ ÃsʕzaÆԬY_UcJ(30۳rBO T*IHH 11OO޽uzQ5 OÇ6lQQQO%%G}ٷo 4o< RZh";wJUVJ(!UPA_$RJR她sJiiiR*U֭[K.\>}Hdgg'-X@}ʕ+%z꒷&=x@}| ~MJMMF%) IPHG222-[H HRhhԽ{wK.Uw)N:dmm-M2EJKKZI;wJ(!rsR\\$IT*%gggH0`cI$)<<\ruuRJIz>|.sϞ=RӦM%B!YXXHÆ $@ZzԣGPR{񅆆Jڵ dnn. 0@RpԶm[ j֬)mݺU$I:x$RCIqqqȑ#eJ%K}iWPT*%KHuԑtuu%B!lR:qq/X___?~, 0@Ғ̤iӦ9yTJI___j׮t-iRٲeKƞ*9RӓÇKnʳ=Rnݤ%JH@\.>}*I$=\2edmm-I7>QѣGKR=0W߻$Iҵk$GGGIWWWjҤtyi֭4e)!!(Hjj4zhDё5k&?^$I,iiiIZ}`gg'R;wH$IR.]$===Pݻ{rqcǎ թSGZf:}Ieʔ%777֭[ٳg%SSSiرRlltU/$}>ŋKnnnky=^ZpTFkפ*Uh?ZZZR^zI7nqΊ+KRե׫{3U*RvbRpptmgϞ Y[[KÆ .^.gVZITzu~cXXTJTS Քrog){u)Hϸ}:CS|NL6ˣLmf\9gCO?[.@JJT*)2,UGG'=%%%CRe)?PIAKxyyeN Z  MLL ۷o9IAmgojOޱsy23Mt@JJPgFVtBJM YϠGws|;S߾=$3Jf+Sz02۽Fp8\AAީx 6Eo% Qڝ,cw(Y?W-3Q||Y$ˍܴ'ߎDuE{U r96-_SG2,}Z }]8?p%sn.F$].=Hڥr@x|j%Vq#: -svi(%+=ʌ`beYTq3\GgYjO[ ᕢC~50,JqH)CKτru;0'Co~myØqq:Lk ȴHd2ڥٽzZF,h% k;v~3fv HI5jԠO>̜9-ZwX $#K]{"`/~]6NrY/ϡS/?AF8:r72O% 5S,{ӷ$rӒ@ N/yz]QS~uJr7ݿ}? f Tܞ.wwh'g^V,Spʪ?cbNus9_+6ρ_ًE瓋kƍ֡Vקm=A* Z~61>KflzFP@{CV4ӥ8Ǘi^1g3EH$WA?cǎ!IG d8qtN>Mz;$A#{ю[mV:xwR[<{OeX;:RVW!- 6.ܙ0RWhKugf WPy=<'RjLՙ5NZ8U( *~Fm8?Q؞->%văd-L+VǶ _CR@c*}@O ٩0z pB[NV|Xř7I+t*TϭZ,|R8&%1g8̷ hOqȋx^^׻/A=p翍@AAA,UBAϪ!m[:2T2 .PAu_\'2t:Eȼn ՞|5v g /ύ)tlƠQ)M4ZiS(tJD VUI_,gcvwR ρ 8b 3nOq̬r$ {?dbZA)J>sVg^Xj;wrJ?~|$Ib:tCy#$q޸LX|[=ϟw( Ҫ؈&lJ 7ض/m[ }.*.mhTJP^ loEC4h;:b[JAuf>{FJI#̍J"S%sݜzwAɋUI%MS+6ei6>GT !=4mKڗgͪ@A\{YX嘖A/9v*'p6.C|ߥqav.'d2 ߝX4iE|)HqX̀RT%EPrYDrUA(VmۖvqRgll,ӦMՕ͛7:yf$&&yQСCy{}>|8III8;;w(-&&www4i¦M޸5kйsgFsqqAGGWWW233;AMh`'ezֶ#7֪/啗Shh;S;?S ڎT Q#qu&QשJ_ .NE v#Y7 hOīlҟm:к֦w`Ro{J€Yٽ_׮ F0H$ŐVz͚JkB㖝5՗xUbնwNJfϮf;y|*LjGtѷS:GӲmO^,^z R`q *SfJ>O;84QN2r|%~,&&F3YŊe111%Kj%''U*vFFFI@W.+$I2$dϟ{U+Wp[5P(^{0\B|||= 4b~6\AHYOޚ3"po#]cj6bA+A###:t5kk׮DDDw^͛ի믿[nq*|ڷoOll,fffޓ'Or}:w^޾#Fн{~G̚5u1nܸbEA ׈4*(^̸S7{>Nb D5ptt@[[CCCWpJ777yB(XxxxyZ9q'O,>Lő?(S 5j.ߩl577  UA@J5kj;z(͛7f̘^ŋ888 3f QQQaeeӧOHHH`ȑd2&L4iڵ իWcooOR $IԬY===jԨ֭[s#[000SN$2Wjj*ӧO}}}7oN\\\/ 4o߾m3-Z@\\3gΤAx{{„ 077lٲ[P=zOOOJ.ܽ{7qǏcǎaeeŲersu 033/R-[FNpwwr7ߠRekv-{8~8@ Rŋqpp@PPV--[Ɯ9shݺ5'N5ÇSE7///6l7w wﮱr|LL ݻwKKKzMDDFݣW^XXXK 8wzaݼl߾> ===ٰaCcGF000B ݻ72;r9vvvߵ5k`ffFV4bXlmڴs$$$eFIMMeȐ!XXX`bb7nҥKL8+r= ^߿PB k#F`nnNŊs$I7oLjӣN:%LFz  '\AH#So۰a_} , <,RuFtt4QQQӇXΞ=w}7K.Ԕϟs5E'<==}W_}Ÿqx"ӧOy9{9wBc{aԔ!Cpuo8rwfl۶M#8|p wah={hժz֭[ݻX/̽9s믿zjݻG۷/Vow1gYd 7o̷ꊶBdzBKKM6akk[F d%7wN޽ٴiziڵk8pׯG[YY ^8;;cii~:nnntԉ7obii u>|8֭#44:urҒxAA%\AHcI'''LLL0a&MbΝ;v bii1m۶m( 6mڤv!:t~6m0}t<7cn݊-666l޼&M0uTشiÆ  6=R5g={NJ(]4?3+W.uu{r9+W‚7h"t邵5[l\˨QpvvfĈФI:Drr2SL,]{{{ٳ'JX233իǏO>XXXPvm~"‚jժqZhI`ԩtQcǎ9/=֬Y'*TL2xzz2p@h֬YǣRr$Wp'`jj KbccF׮]lٲ•+WpqqӇ~ WWWhӦ gΜQU{77AAA̛7ݻwSV-\2Vی3-[мysLLLرc $88X#ٽw^4h@ҥ  .\777:w]VVV4lؐ3h ʖ-K6mrVE%^: ,,,hٲF޸qmmm찱aٳ'G<{'  |\DrU#"155`˖-rիq̸qd_s\]]?HIIرc̞=cǎ 8t۷Qgz  ^&Mh$d2ƍӧ9sY{jj*H/rZnO?ҭ[7_9qqqڵ֭[kl^:꾱dj JݹsGCov[[[>۷/w)ԜƔ.]~[nY3gY,Je kkkrof͚Enݸq:GhLdeeP𽛗u֑-ϝ;wl(S j80޾}{lll46l`E%I4F믿ח֭[syLCM:e˪vaeeEZXbXYY(G&y'AAH |$UCxM sgllknnnN׏%KeRRRr M4Q^ڵ_+޼Y&F|ׯM6уk$O5a>̪R yR̳w}GӦM4io8kꖖۄj$IW=ҢzӨQ#<<<_|Ȝ9sF--- ILLɓ'\t WW"R QOАFѥK(ߋ ׌x"C aҤIT\9|?~&&&'  ||Jw Rҥ Rbb"ժUSܦMٷoG_~ʦMZ*͛7DB1eu|'Nd9sF=?>^OOZPm)L,?iii$qn  {}S5jD DlٲEc}}} uWGMiiiXZZJ[. 6T-*CCCLMMS_M-75ϏңG,--144ѣGWtEGGpL)A1{l6oތR[n6 K/G}ޞ]vqEK+7~/JP0c Fň#puuhUAA!1rU#ԩSiٲzgggΝqs$^zҶm[|}}pz^޽{ϢErM8;;s8ԫWZj… ѣ:935 ___222۟̐!Cعs'!!!7N~uDL&cCBBrԫT* ,0 :m*7o`ɓ':ɉ/戱V3fP }UOJq^\\\ݼjՊ8ŵ _^NЪU+"""4 -T*T@֭YjU) CA_z1v|((|}} Ąe˖IiӦE._AAUA`>}Jll,6lAk$BڴiCNX`f"66SN1p@VXc'OC[۷Ąka„ )S={k.bbbؼy3k֬fzL&#$$D9s wܿcǎBɓ'ܻwJE޽#ϸԩdЎ;7nfffDDDp%9?7lɓ #::ٳgcbbB۶mCKK ooo߿ ܹs!C`ggСC7n8|||$7Ãsj*?~̼yǏ°nݺlٲ%߾ عs';v`ҤIWժUGҲeKͱ#]yI$]Q0fϞ󉊊"88#GhѦM:vYhQQQѿ.^X{77CCc>}J`` ݺu#22SR%ǹ>SO|85bÆ rōѣ_>%J`X[[yfbccX";w(pz;;;Ɔ5kְsNNb@ւB~~~E'$Ibĉ\zcǎqq|||ԩvy<}4<<^ +WVAAd/>dׯ_Ȟ={&X,&&F^dIdJ( r$I$s*| uV/Aw͍իXud !!SSS_1r/sB^:̙˹~z6mڄ׮]>Ν˼yxAjakkˆ A V+oQe? &AxR_56}@>T?j})]:wT*URLd:::)))**Hs*,,L244,,,${{{ +d* /$$$Ƅ ;bgFgb}9RRyf[ cU?&yeD2<1HĽ 8CG3վ("õ!H  ;vwDda2zh>|ȁ1c111o!wkر&-̙áCgԨQ8KQT)<<<([,-Z ,,  ,D̞=[̓)6v rB:/:񨦓1@G'Ri3~FS.+G,2J@}xx@3 oKaR  9-bѢE[5iҤ}V #  +Ռ@et@voUbsO[%e>>↓boCTnړoGw PJFt2Z-z;PJiw`ZIdZt\$gqH`[YcĔO=ʫx{D_}oň$Kץw_2Cg7㴊U=?AN2Ǧ`khCeOKa MLo'gɥ$Rn4Ƈi6?LF#=@q>R$KsSZvDz}"Ή    |2o밌Kwp=S? e\{m{]6NrY/ϡS/?A Ǹ|Czzs b֮Hd3c)kOd]r+msSYN)5Rpx<;a-Cn`X=٧Y 딫SRh@g6ʻ9Hu1-f9_W 2(-T8&%1g8"ɢC=L 6GD*) 9֎tH : 8w& G@C\S8jCenǾ>ʕ^9l-q/⃘?O AEtt4'Olٲԯ_š]ϷF@@!!!ׯHFFFrA  ر;+)):0h +H:;b%IgΜ!33-Zw8 6 4RS2}KiHH# l,0S(A$n]_JSTŨh#*!Xf{[\LII}}d {% ^ek:&bB33U YOֹ L -k!W(8-ۺ8?$X4E,Y~=r)Ėu)jmT`f{^GyŢ^&))@<1rUaaa3wwwbA$&Ȍ?ȱcӧk׮-Xۛ:0cƌ"pBjԨСCQd_ݺu+.\x/Zf 5kdȐ!JJNNw4mڔ7w8 rUUF|dbcJ 11LhY`,l+b`n$# M&/aom,-rr#c xO5d&=#5웮.Of1D?\y4 1˾֖A8b 15[ϋƓUơ]RS&4m z5Y%N ລ#̬rIgoEJ%9M{w@$WA^QbE6l؀\ɉQF~'nݺw&22_t4i;w.ycƌ״Ǔ뾨7*;3xeMӇfɒ%899ؐ>nݪ=U>>>tx PgG^qRItt=d3 IDATQ(l޼++Bi,--9s;LU.Sd&\ $iτ'\X 4eSmK]a?P%US J|FDJ_9vhbV߫$(Apm;/#`9emЋǃoˌiQ[3HžE8e_LOLvlrB&( IEcVʷ8tUG!ASԊ`@LJJ$Rz~>mQs/4l^k^ DrU!ZZZhkk/%%wjRfmmN|tusrYEZ XEEE1m4oߞH:w+W?x>|w}ǎz.O?\j| ###ʔ)ҥK(Ù6m[/MK.!ɐdg=vR[R%~BBBBPw_*88g2`RRRt6}tTن ɐÇW_W}FGU} f;$DZ jhHKw?HS_ HPE@AN]:R3s1C5K}\=瞓toڴ) ,H1^uٳg 1iBqIziQ[R)ڼa66s ׅR/v#ySp~jǤ[_nFq}ZVoloe&4h&IfF2Uћ U- 3WNP86F})WZJ1,ߖ:;0;B4Γ4`_woQw--kgTt̴qƯK[rJi&>b:s3A{EɘBN..FѦM~Ν˧~k=AݺuxY*UĹsSAAA,^A%{ӧPnL=ݸqcpqq1.K]hҥ*T$gϞd͚5ؾ;uDBr 7ow|@}k׮ݻ~:u${(\]]`=AJ?5kfXӮ]; o. N:3uugPzz1wߤ{/o\뛪JT6%h?qM62Gs,nN$Зơ:m-bt?ƞR-2^kܓ/V yLкwbӊCJVc BΓ158ybv&3J.¾ߎNQ\B pvvFI@: ZL^6*Q/)n3i$ʗ/Oȓ'gÃQFecɻy&yJ\XXl:ĄQ[nކoh ZebgggN6.\+++ ,G_B^gŊtdȔj]H'Q#-*El"yBѢ7n.6664k֌M6駟lg}FBYfz3gΤ^zƞV#FP@W^""">|8Eʊ{ŋ<==i׮?~7kFјI .|X[[?~>mvލ,X1c$;6˩XqdϹ~z*W eʔaʕ޽{ <%Kn:Oҥqpp0ƍo'''LDD H"<|sѰaClmm6)ܼywwwj\VxqrʕP ˖-3gffFn8z(Iof͚|'ܽ{zaggGYt'_Bh4̛7nݺ1n8zqϟs)RQ\{wj_gϞ?ԩSa1bɃ7n`׮]TT GGGzR~:5777#۷o]v5jθs =/]իcooO%8p~}6/6Zjst:+=&8;Bu[̝;ZjQH=;) 'N4.|2ƍӓ}ڮ^Cwn@˗++ u˖-sLٓHvmG}FIv_O9}Z*vvvt}ܹs88OW_spONpppɉ͛#Çt ???lb~ԭ[=zp$1t:&NH޼y)X?)Vn2/..%KbeeE…MڒBUQCf{]O!U!+<<ؽ{7/_ёVZai|||prr⯿… 8::qssc׮]&Ν˟Ç9|0aaa&TX|q=ʻӧ]ϟʕ+@۷o`ǎ'IGtt4 4lڴ+WЩS'ofʕ|'L2wg1a„$#F0|.\?ùtRs~̛7ŋs-wN׮]ٱ#gerss?78rHnJƍ=Ο?OÆ iӦ ׯ_gݺul۶E۬Y/ӧs6l;wzjcsO2CժUQJ%%C%((Ю];ƌ÷~Kll,]v5ݻw޽{۷/-bȑ۷9re˖%((իWs|2Odɒ(P|x1FFFҪU+VPBݛSN7o^y~AAATZO{nΞ=GI1BF1aހgߤkySgƑ1Wo!CĬYVZ=x %?Lɝ;7nnn{nGf;uD ρ?h7mDdd$*Ujժ 6 ssscƆ+fzcܽ{w:dR4=}4=w5:d.\ȢE_?Gsss`PhQƏoC[n16mC=z4xM[neuϧu_ԬY5kRjUc.=zؘ~U\@/233#l޼KbŊx{{cffflɓأ 6\\\_>UV5GлwoZnӧO>}:ڵ ___M5~VK ȓ'saҤIuZ4ik֬aӨQ#h|H)ŋ0`tؑ:u4s?x GѰyfrɕ+'N$ϟusN^T\ٸnܹDFF5~g~-mҒ>ÇsYʕ+;ТE du>Zn /̙3-[;ЬY3>S-8Irp~ † XlWK8p/fҤIɞGsU~W (-ZĤIk4P899:mۘ:u*׮]3^zѸqcd}^`1AJWm޼;wRF WN"E;w. .PBԫW%K׿Lyq9B!xIU!)88ŋөS' |& e|ᇩn޽{s Uqpp0μch۶>8;;PX1=,\֭[y租~B{+&2V!~"vڥذaC8Zp,B!tt:]3I_rLOٳgiӦx{{s]㱁tҊ3=ד?&444ո.]lo\rQ`AϟOW\B2e8}|\ 9߸qy]ٳgqrr2bŊ#,,,S1GzXyW^VqB=fZ~„ l޼Ǐ{1r$T<<]t>`̙Vg=O|ȉ'L߽{*U91gǽL.~7դIXp!SLaѢEi\~N:EժUU{e /L̶?Nǂ ;w.q OOLŞرc?>nj<<< 22͚5dɒ̜9UVQTL=_988z}?# ,!BWoҥK?$ܺudnq'F)Qcƌ1>vYfM?~111m6q*^:+W4{1 wߙ?|0J):vGڵkm q~~~'J?55j&/_0{Kݺux 406-Zf͚aC6mL#/1ɶӰaCVJg7nl\ֲeKve2={]veWdd$}׮]iРAa1cǸ,zZ6m۶$_ljζPpaڵk̙3ٲeq$6mڔ澩+ᑡ^ԲeK.^hL `޽>AsN&NȠAuB|t钤zrK)5hЀG'JCdddxGם\{ؼy3 HJ.MBXpa%EB!'U!̌ &g}_MkLm?ROnݸz*?槟~2&s͸q_۷/W^%((X?Y~=[lɒIiӦCׯϱcx)k׮O?%..zѼysL„  ٓ СCqppUV:uK.ѪU+>}Jxx8?&$$>}I>}ذaO>ԩS|G??%=;vзo_S\BHHcƌa턆3Wβeˌ3׏;wW_899ѹsgܹɓ':u*ӧOt=yqƱd9y$GfEGGSlݻi߾=gϞ%$$Cg߾}ٳ1KKK4h'g֭tX0x`>|HVʊ}Ѽys֯_8/J]EGGO?jddd/l:wL%ѣ/_ի >ٳg'z.]7o^ ^OJX`f,\ɓ'{ٺu+L0! Fiڴ)7o&44CѾ}{3uO>+Vd?ܾ}=zs XYYb vξ}ҥ Ԯ];hZMƉ'hݺ5Ν#44s2z4s(B6Ӽ;vm۶f^^^m۶_]͚5Wۻ{|||j{{{7 S)PϞe%1k,\\\'|>}Ԙ1cL={ʓ'rvvV}UI&K_^ݹsGuEH"TJ)yfUvmegg\]]U߾}UXXɱ,Y-U%ڵkN>ӕRJرCըQC\rjȐ!Ç8|RPSGVjȑ*FլYSر#qΟ?U:r矕9r UJ)t항jҤ|8&MRŊSڵ:sLs]rEnZPBj*"""vWB*UJXd޽{/^ڷoڴiv[nUje7oVmڴQyQjG?dݻwe*.\g lllׯInC(oooqFUre>#RJө… 6muڵruuU;s>}ZZU\Y8pѣG277WjرJ#www۫7nǏ (@-[VO*66V 6L/^\YZZ2eʨe˖+W%K*@խ[gH)Ξ=J*lllTƍӧU޼y_"##RJmٲE9;;"EcۦRvRYm͛o߾\y{{]vիWY޽{WGYZZRJ={L͘1CU\Yبe˪Yf)^o<]T͚5՞={RjWVRfffI5 IDATx޽*^ʔ)cr/u떪WQKVq]\\9rzwTb&N~RA}*_|\GݼyS)^WׯW5Rvvv] 8P}\),XURԴiTttt?VZ):u=zdMFG)=<<(!ċ>|8cǎPěv=a߾}ԩSPVGWlݺ5CByɀS/W.j'NQF,A}RiU.ѭs 8e7/WV-[B C^h4QVVV1qA䤏ջnܸ*S;vl o;w'O_?cN(x ܺu{B!xtB!OV˓'O6F#x]XRJѼyE!BW\B5J)._LϞ=s:MgR޽ݻtHBrlmms:!BFTԏcpE2l f΍r"47MatwV#_,^h}ۖ Ϧ3 *B!B4Iek gVx^t.i1eVy׀6>L}kLN_gXU_=`Am֔:Ѹ 42h\.5뷦cDCbG; 7Ư|E3k16la dٗW6^[%S*ѝcZO*wk~ iiKO?%!P!lؘkcO*{F7ֳ8oG_9j1ÑvLCuMD?*`3ίaH9e  66\)y$;׬/ /Ǥf^Q2x) DY@Pl6Zsx{՘m~I;{I<{ItB]՘>{SB92KYAeS6qNU#HůX62ybn/4ىUc}qh^c;Rݵe?|g95X?aYpZ|(߬&>QrPmz|܍̅ ZR!_nvw)3UVv~:nKU^cx|X4}_żp0s>SKF2xJ[֛2'ϛ3凵|;K+گ^ڍ+)ǡq«JQi>́9z*p7 w%1&?cF\_.w\uC)~b1΍\ڝaf0& ع2-@* _{(?8;'En2KZ67m)IUJh4h4N̪*[Iuvm'^%~%^o!Dڇm(,PGT <ā_oe݊t^w,4hҴW39Cv*\*EЀMTp Ep6 tnS׺ lv;f8+EQG q]?V RTbHpsc*ZhrÚDtc5r.܊_ż[SՇx2T7skE6bZ;JT]ѓFZ{yi@8Y!ݪ8 *S)SI̶)Jxy&iXL;v Mj2Lb4?`ܘ˗C&ڬ##;ÂvBKQAw>S"pk O1Ox}[2cU+}b[[l4ϏzqW1[r9= ܸ؅fzn5v8[& "8̊Vj2'Ebu0;R=f=8q(Ն9dM%wq&t\sޟQߝhrthFwh08ӈ#U!u,^I!B!KVǐ^So?APH,_TSd )i"1Ş+g5V A{ >-Jp؇6u#㋫:eHcK!B!|AAA<|0ǏxJ).^e1||'c.(L6؆uс Gdޚ0h{UK(Vao~#Z=j8jЅiD'K4>2nVOsAzuOF8|=X]\b$+Agw 1`uh\$Kn > ĪŹPAlN#\jP?`;xg,s=NU{4G7La^ך.fyҒvVZsܮ:ޅ`]Zϧ6hT !YR">4)o2ѳYcoV45`W}K^hz3O* =K󿱽q;4tJP&gU9VNzMۼ?be2{c*ߚGFiٟowuj1$fVFh}[6ftCb(S׆Ùޫ'g|Fz e>`I4+wtmmS.H<שVAAAYr<~""x'NQ\4K9 8E9uOܗkZIFO̸hNNY=d¥TIE S\td9}N2ʗ+G-Z!LGj4(++8srr]]] 7nPU)SF;6qZIS{ 2,B!xu4jԈǏhr ɉ{`7oNDDcƌĉ\v ͛ǃ1c7ňpׯɓKYδ>_v/^*}T!&_X1eL#[S,fUOzyXK"9w!W1WB!īLJÇiڴ);wNG-4hSL!..%KP`AJ,)^8SL!44N:_2s2!M ,Qd&W F~}x"$.JqU!BJ u|rJ(AFO>888$'W\Ջ .${iӦQzu/΁LmڴZjQ`A @LL ׯ_lٲk׎@Aӯ_?5j۷ܹ3ڵktԉ… rԩSwwwڵkGXXqݢEhѢyeٲe7nܠy+Wmۦxl!L{/VŁ>K%yo) U@!BB4$dk4֯_O&MR=ROjxb6mdpaΞ=K\=ʕ+ŋ>| &ҿquu8p;v`ffF%pwwח .?xb&Ô ֭[=m۶q5>}juƌ\t͛73}t.\@dd$;vd֬Y={\!?^z !Bԍ7Ҝ<+((營_|zq1bxzzO5魚؅ pvv6T<hѢX[[sǜ9s\2t:T}thɒ%ɓ'8991zhBCCH4+ӧ)^xB!\z9B!إBLLLEwy`ʖ-k|ߨQ#~g(Z(%KdԩT\9Sx(_|c̙tŸM޼yyf'BdWe@!BNKl¼yG-Z޽{} 5jĸq^CL8{0gjܿQFL4-ZЦM[իkСsܹs 4F?%J $$˗^y^ׯ3g1~!e8JeK!B!rƚ5kx"K,yeΝ,_www4iuԩSܹ=ϙ3*TƍǶm۸|21]vLJjժI6mPT)6l@֭)[,^^^ܾ}krqCXXƍ_pq6m˗iذ!&L?rDEE'ڵ+mڴsՋ'OvZ3f >>>jՊ6m`iiܹsB!dU!0*!BWQǎرcT‘#G,X"GM *ġCR\?a&L:+++?n|_paxپ}>? .OOkС&fz|&u=|0B!\[UFB!B!"U!x>,9zI!B!BW QqUk.=WB!B!DHqU\5B!BMtե SNĽq1G|/kJB:C2,B!B=̊4)s~#|ө .ǀ RUk֡FV-+B08;}xzt*ѩ(KB`:\B!BޔʥpfWEV.3?s]?/*=b S/1,r tKߙ״x_mtJ9lk B!B!sL<Un3'DcẆ^ŭwO엫V2:/[5nca {G4@?v iپbjWY"a U6IPZrFƔ[ `wđGX"O6kN)Pe։gD^DYT|Ӣ*sfnBxJIe6 CI2,B!Bituױ*7Ǭ|rÌ.h=;70SVL@wecfso3ڡl.a.#"U%]D9ۓnlEqd7Y5;Dzw4Yˠ &77ZSsjm^W>6ؖgIݕGBڨ0l :tJ!B!ZT rEu*8p#ڦ],@kG =?z8ȾGعf`R.m`B[M:NMoQ.˰YGƮ_s/;Vs*cAk_ΡzRNMa>ֽB'3fŋՋ*GF'*JU!B!xhlh yl K?.Ζk (L}$zdEFF-6&CSU(_ڽݲ(c ڻ2+.`8||{qe  f"ݺu~yfyqƤ Z'Z !BVX'kӓsu*VHɒ%ӓ5ktM" }62GΕ\YD))uʅCD0O gD%g5DFJeM@ŕ<~@mn8i"%("X[F7\ٙciir<妘ںb_\2У圯k~='H;{I<{I׵kWFÇ133t 0-ZPHwÇyaN*h۰ӕP!q2oMz'7j*̊ՠ0|Jcq_6 _Rsܻ=8g-,q$Hk֡ѻY(V5-j}qt4pDZVz3O!v8::ȨQ9s&)n;w!&јʎ|$K$Or$Kf ZjI>|/_Jym8(b> ׅR@F (Mq3yZڵ|p̦eP1r%Go^3#LȻ51>Y_0F=x!_s"q8VWG"9rӧOiӦ']HH:[4(bc |{;wlɷ|g7w|g?y|g9߯ß4&: 3wtm[F _N͉t,^)JW/&t'_7?ֽw<o^3,lf|s~G5iSo6`/l5i5OZKkUz}S^ɫMV#l*dT1͚5Yflْ˗3`dt/iXb/Y);-|g/w|g?y|g/wGGP{ *>LT8[ۥٳgk׮|wh4N i1 @%)4uʽ A IDAT,1gG,76c^'|… S`Aٲe ?Sd_\ǢSE!BXѣ+W.~͛@Dg̳rX3(qd !^$U<<<ϸvqqq1J*hL\@z !BU̙ÃQZ… 3l0۷Yt)111)SFB!^;R\ŅիWt&,c`AǤB!m3`dW8rHD#Bd-kX*4XbdX!B!B.R\$s] :%!B!BIqUAV)"-l0ȘB!B!"]*>( B!B!H) ama>^\B!B!i6Xb1( !B!B׀W[O-Z`C/C!B!B4HqUdHTTD>ر`DY1Wc,⋫V8J!B!BI"CڵkDŽ 4h#GdΜ9 :4#=W q2B!B-tե SNt$;Ǵ}@ Fs81V9{] 0) tG… [}vZߟӡeybz:%Z !BVX'kӓsu*VHɒ%ӓ5kpAZjv[ >M9IRaGS?\¯ץJ ֬Ch;[V`W(g-^CO;s:7WEoѻwoƎAAA̼9s|睙/]gg+epОPKNZJ9H\3;l`r~ƣ}#+s\7Ջ>{,﹟G'"Uߓec(.ޟLFIeY3)c0QnKso=6 piȿ>޸}~xc-yϽéU ;zklOp(K6m3dI#P$3}ǥ H-e5yŴb9\)Ծ]ƌ"G3{>^AIL}k~ IsŸ,bsYM{R-2f@Ka1QW1HO@C|v_y`_x@>ql?xTRB g03JLUy=Ɏ1`cI5{v:ob-w<ϒƷGm5yOob=3f)'ҵ1nz}v %th Y*GdŊ<\q̘1ɓ'h #Yc6U\UQQQQQQQQE#zhoYY-oG~KKJJB\{<_9ڊ B'N<^ä˯ddHgglyW`|3̉6s,7^3T-6?n^;z\lX2~5CI iusNo<@/&w[7 gtj:m I XY2xfz\>-`Z1,ڱ[r<7p4}.}M}nŘgs]D:𙆜q^PDi"&mׅ6h9ss 3|(bi-_LӒO?z'r{8O=iWʌC×/lkZp|.|vj䒤or׌OGHuѶR~[%jLЛ73c\zʐg)!z/k}XU\U9"_Yhw}7L63f0jԨmޏGVhuzpOA*?ib8ƟhSTTTTTTTTN(ڄt=Uu#W5F|| &?0=/ !D}ϟ1izp3 đj[E#IȀO'=1-chx5/<-̡[Χݎ3!̘o {X.,Ҡ#@Ub|e [p7_ƜxZcRSo?:c>g{Þg3ΦƏqK!\iCZy4MÞ|&ݗ@U_F2\|31<M55ଃg#Vbk! bĀ?@@G$& 0`#bA >S֩ȖMVel YN9Ϥxa33=G[e: )rZ?hnixj`d`դMa8|TEKhΖ_|PQ||AJKKYh~? &vM~tGjzbtzxlA׬k"1VQQQQQQQQ)x1L}:: .D\Be:61Ss+,ԕ3퐛W8і @ 1&hNDUܑdYעL****5H&1r6E[ s#O 1 X\w8} H2,ځa?[`O;t#^06 Oc9TaUU\UNL6.;3믿ù[xOyߋ]$Vݘ)mJ<(4,㰇HMƶ~ FۑϰpAK\X$3JEɧb0jٴV`I˚/Í~ֿN(n_VO)***n d9@ix4IOxӫ'@}σv2@>ON$z y&=s'h7Bdt:&L8Ѧ}oN~q5бU9 }SnB(A7Ez\>EZ\nMQ~I$~LX?Pb:xHD$Q iEfpJɌiO103)=FH5jio"aUs3>T= oqϷ$hnr3`ve=::,Gb*C}m@e* >)OB Y'V\Q)y~(ˎm8!nAט93?u<6oLcDrAdI"ٽ$<@tEE8dYݷqYOH;rx8=/{;TqUEG?RbY>GJg*ݨ!Y*߉~ /p73{lt:mFr)SC"1Np:yoz#/d޷Xp#vv+B ڰhZVHk#Ȼo#W"ki솢XS$JlXBU^A{w:H:pU쥾NYG pD ӕ!S8J;@{Zt27U8AdYFeVшݦv)׺\J@/rxWE W~j>#:v+̖mTW99crwx3Z@|5 G~)y~(uʮ{U7RW{ȒǍ?~u*COdoB9pW9_u~ww㾗,3^9uF zp_;LynAWkbyC2+W4`nՏ.<{MyO*6(0ST g{l :?7uWήf:>Z[z*>_u(XO7xr鼺Anl|N⳯EfUİ($2q |\\DrY|?7"9ߕΠ (ϵq/V=ϓfBo= 6AV9|a/z@/B[o$_޴lF'.J+lPQH`JedI:74{G)hDⵗ"fV;hlv뻅1[##oi H>t=qgKkg'  zb?YT]~$Y>6~h,IAmzh@GM@D e1J5]|!kp9>_?ShDTk_bsh=`Q4Z;ǖ _ֈ-WJľ2[_!ey#yI尤-H^Oz.&/~'6qXj'{z&eF)Ӌe-)/A2Un枽+hA.vo3};J:UJ*)Y,tu)7{X~E)>A^Rw [eYFq>ҋﯧ!3%mbaZ=5Pj |Tp %Em8]UH_OWD![,n);45 ^~$В%עB $;A"uj_%?O{Qy#T۩,"{J/+}{?靫\7XҮf^1YHeYFl.jyiBj?7!I2KشndwJ?B; wZ6%eOmC֍^XH4¶ eYF> 2潘߂3/lwfe#?S7#Z'lv3?ђ/puT¾yUH,ٝHFv2]e+P(XCñ[]ډΛ >cP"uFSD='Ll(@ ^3ܫ D=x>j*FQ9z/D%h"Zz䀛=EvKYq-u5ΞԢDE%ETF}_Ojz{>(EuIB>|'_4z<\]V=_{y9|E_Ony0'6,l.定Į agl\ּ=#b{W/58y6<Dc (]0?uN›^!Z9Ӗ7sfvUY-@?af[eԔ:8L{wg,>2Wvo7SS]I䩉ķhG^Y9::>PyH.x~"~MXP{7^Z]Hz][9۳Hy.Vo+Q_׮  ٰn;ŏXffƺ tp)cwmةHi;EgՉ }v/۫w}@xr,SZl !YڔZ=Åf15e@j#I2v/X)̲5goI2%l>mH'b3ʲ|P MfjlE Z.^LNKM #j*Qw JtnX+,hE(F~U쳱r`Dv v\ւe${3 VwGf4-)ߠO7_Ήϡ********ߕŶT~tN暃Ջ{w7|Y"mwBK#,h7^R%}3k 7>>hۭgҞ4OQ#A_ʔ9$Jp|[ůbo gߊqomL,З.8K3ZT>t ,H@&>I0, )!1DHOncɸa-[q~F2a¸d>fz`,S ,Ih5*NU:'>0{ݤvwK{+!ހpj7" ;`@f77lC+;Z|Ѩz JzuwƜq  `-~8b"Qq|@p:nW {E 3, T5y 9Մ` ~In6u@"V+=\^ėUdabb[E'ɰhvd2TC_C+ʒ fZr!$Z3{*4Q/-[A|ˊ9w\%̣8uqqE=.?ax/{==*rb899R`id8$trfD~> .dKi}'`˅;c"H&ix6s@K5Zv>!*X4d*ժ2[= m~'J(=tt}j\JoS;4xG٫Ŝ뻓THEY;qմ IlѓxfoǛR78~ 'V;) y6U:F':&!sL³E`vbmb_zʹ:H%%<|_'&DkYHsuN65Lk NcVD1B2&NHMgg?Uh O.é骥8FD7.srՖjTOb0& 2>q񈭚ʜ3}>s2rf 9WG"rIy8I/#:4;8 Udo1WEef"tp%C\ذD|(JjO'bȇk8Чcn2 䵓NcCV\C'EejJ \*Nb ¾vDgysvX$}H1 hȚO~̝ի9gLg$l%~ m$Qm03 #- Z]ɀ;6_bȪ&ܐ ,$?-}hDHK,ֽǨgiȶoAŦj֬ld^Mƶ-@:N亖|7{-wc:*AgD+3 -yQ=2eo -} q膜&3J@&ct*r&Z. (EC2i"qOfC^ؼ zjsb8gd IǓn.N:,DQj I2V_([Tg՛_3z3[OD0bD,ZBNN#ϮL7Ilf;NF Sх(fWqDDnI%$Eė.ę}}t{;s=gհUI#8=#ƽ|Xj6A|Q ^29䦼#8ck h hd[&*GVH{exa,S/@WUlV"43338(ŋbUmge2}Ki/E̋ F'@:$6jHIg;Nѱwg)| rpVCinEc3OD̒1yBӧ)Ip&gD&{ba  BPJĸy$$ Edc);@=c48Mɽ<nr /RnƬ2$4  6#YCJJ4a1ڧB ^nR^'ōK:arw)]GWMw tGrλbdY[N?q9Lkuic 0&̎$ ({ۂ"DIs"vCہkt6)hYB_Q9D_ 7sc=! ES5$3л΍(m*0\:#:,W#&#)gU/[3ᐈz#mh3h 1Jj\rqD)Z˭|C{rr0 ԕ-Ɉ"Iɥ֌Q):B~b8 ᴭ ԏ>p*BKDc D ҰΨ/k+1HQ$P726hëj^¹l:Ϣe|~z&1B!Ud`[@[&2q@%ާujc^u-9r:e#"H`ί ?q)a46mJ^24}Α xc- E{{`RoNlt%щj745(P"eR@gW"VZcYQFݾf. c׻I m&#l=4RG4r*)bJ/tG6.(s/v?Ȍ*r(I3s[l_HMmf& &7cvo$eDv+vj ;$=X2  ɥ %"4&Pdluq:"M {,d ]>/ "WUqF'#ם%A} {sv- zkA2ɺ­hN>VDHN },SjЈ٤H q=w/j97O싼VGl OcdG= I}tEĂ/gn1Rgׯ/u2w=F<]WHfFGX?Ȉb+DWcgM;A^[J|ςIAl#nbt <~Ƀpb_nܮ,g`/'Zٕn>OI/]:h?ٞTNjP1R\(ui]=xL oA%;z$be@T,XƝd3COsy^z88i{Cqgwdz%˽^NBb G^dj~-q:=CBfMrI${3& !Fc$. NJ9 6D`gc riZ1$GAJ%cBW)=F4#{:%}o4ᩴBv<=2E[ݬl)ۿl@RDGOҲH5ȱ:IF|YQQD](ӥys#I&Wv]Mb}-`Ԑ qh.Q4hW"b ڡ1>(7M%~MJt"Gg9(x? %qs-&MY$x `M@A 9,Kds=)L'+m=8! L@nmц!uyqjHmE0Y rJ{*Նs itH[ʠ(1xz-ڨ t]ʻT,Y)u~4@\$WyFW> dχ1N)BEC#D->f )Kl7WcCBȢ+HXAju%]u$뾪eR zR^ ^)I!Ϡ%>ƾD fa)]Yv3(nJCHt*".M.13 Hh8SHmWG/GVCzsGv;hp?Ll(?!F^&ٳKN8¥{ۘ`CFHi ʽ2h'V{>n'aoEC 05vb4h%9G|:Y&/ :li;q݃: T4z$3AH']U;QoB7jD-uw]!BD)ᘐ!JNR\YYxROC~ ~XJҫ6|[ۄ^${tXmMqH1J7HGT؂B1ED285bvc"ĨV'ShS- psei&ȐmVc`]# {V'rYN"Px cHFD*gV\ Tb|jz ^IW+~ 7adV$tTj25t`6D c!@4E̍b'4pJ#Ub]A<|1}T%f˦"v=74gEnP.*i'&ҳoot=LhSJ 7U|br̐]9CoٰV7A"5AbxzQT qZX["9.I_CrPY'>W;H~"iKH[%BZH{%SX;D$02Cbo=B ûgg;ŹcD\)2b;Vޞlw6| g4S_SRԓn܊͙疄bu)$&gFi| D:c0E"$9 J'.EN@dXEqϽrLFEUؽO?}-qч(?'I2o59ƒrH(0SifS,wQ5<]ܹrz[-uqgg@:1"}B'AyOLaZ md;4sqFI H "i7xE\/Eta;{"r=v)$q-HcDgz"1=$ I5h!ĸXuZ6Njk aǡqI{YS1},>֮(" \ߎQk&9a 7t$GpFf$ i8f1\Ն,b44i]XqUG( 3/b/کȖt0VOowFOOfZ%rںE#3o$ɑo%eJU^x#!k VvdBhtĢ<$rv" \T:2d%Xҁ'0,'KHP25r;^Cj;Mc^ UL$Ur#GC8ϣ]MB-$+"O"Ɲ^Px /Np6N칩up0XD6;vk돳w,@Nя} N"!IrjqInX}I+°.bK>T)Dc^2Mv~{tE%ņqX:BY-=4O>Swq┇i*?A|$в/=Jz2Տ4h Cels@?~(p2lI_"es/#RauLYBf!PJH'5FQ GQ+ik4+R+!g]I^BjsHylH;{iD^[D t+^dDk4~|3!˸+xk_KZ%0>>M7W\??s]wQ(;I$/iLcӘ4BN>1aB6Ţ)dYQUU\.*`P,K(<ϋxg?^s.-] B/w`ͬ]eyv6Ŷ_9C=zgDyy{F$ N8TJ eIA0UP-"5p71g1l8GET` > 2 U QzY &*ҨĉkS HEXEb.Ql<Wֿ$D<;ڡm,D<(Χǒ *.-&1BRك[%,jظ', AN"H8rظThs\vgภ q 26kϟGuT#0 ~9:.Y1Q $izE{Udd |Ѳp%,I'Z/J8#b@Nhu$yBΩ2"1*6cT2 Ql?:Nxe[Cje"`z6Se2FB 8.5ڄDEUl_(BNOׯ_/%2z I;w.O<_kexxa<|ʆ>miܒ%99~~fީ4` ;`.K<< ,(U)<;u癉͐c)w=eǤfxX;N r<{*(ىs[_8_Y{cb՚/]xNq;q?&X/=(Yw;wu lTw.n=lbzǬCm>F <M%sK4~bƊSgcw?f O&V-[ɑy zNO {gՋy*۶|㥼d&'+'}_r{rTf/❐p- q,sv7k♞Y;k-Uפ γRX5՚A }S]4lYϟ8hY'RܓSI93 kYe>?ȥ\72~:^ruE6SNy5j&!]fvmɂ 2NcӘ4`\ƋOEQdT*+<&x'KX#wO.z19DF h .:Ƙ=(Or:L3P1 ߱nAZhcrWdI)D$XAr 49.)IF[J<DZpm*6c5X1Hv݊ٛxysP$˵DC $lx8DӵqQ*y:..REIs:JM/ >&T0*`3nWih4Fsaf TG;4ăeQvxH]PH(:M@PG:dY]s9Q$aTR'I ,5Q6Ց?6B9$t! õT0-(U&*LMmp\[2RbPp dWDLc1l"C+C1<:ZAq.=QLLLc& x^r7B,U&h^Z)аkUyI u(:^D-lj֧P& |Fpl#=L(DjԗVH f=$c\!i "2+#e43XK$d\c2V\ '0$LC0/KZpuf#V!Q%WoRh;U 9i~D y?b}.%=Aꧽ8FVa,j0w4TK2SwvW<ڇM(߲X|lR@/8xVG*"̚3zU8eWkK1*і-Axp-˿x@5(l׆N$?zlUw״̠f"!XHvVcuw5E-?J~fG1&򛷽Mv5e+Q]C0=ˉзm,N,xC$(Ele⛧ϢPxwf=ɖ:o8rhKpރlom f$Q^e;]dV8(A%&ttV*;G{U|Ë19cTpVYD]>h{,vӝ$_̻ٻJe+hqFc`UD!IrF_[?f.a5f(%{Ʋx=Uc-N4ɫn Psx|aȭ{$TP7ҜQmFz†HNW(WZ[G vM&j:'K5b\/%v#Zҙ OŇ],Q`;<c"Q oaomV1zߥ N|+=xtfymڷ |;f2AH ݂2$u6.zeΡz6sQ-BHG_;e&:^ m`G4?o(1d:/Bd= ƞ9@kt?zt8_ <M ~h߳y4qlo(O\Qn>87UW, ȮG~;|G׵Q/)]O:xMr=DjE揑pнg%bdG-p K,73' n!tE‘Gx*1Q(=#E8w⼇D +8of.'q; H ܏Zl~Hջ߈|W1H4_ Hru'*y:I۞(Q\7uvv(i2%=mDrwހf<ԕbvx/w/`&tdK|g ꅻ8 xW/v&-s6wmmFWhhκEI࡮C7kM_l/œU䫧ws^hjYSa o5N)$Z*[lsB@F[5?DEǥ{uuu\2';( |g /v׮]j5nAokX<4ЭG>>Oя~a?ij7޿\KKs\O*d ^)n9Kx+,/ '?yҿ7SqZ #M*!Pp/Gr O詎EM0lфހޥ!־+pL9WJa(|PVFP1v62YA׷1h!VdL*+h * Pԫ 2!l;4΢M@2ɑtk|f*G{e=(l6ÈR+88>~F~G5 A{ĵYϗ^VX( h^30y"`sASDmAvBcܥ~oM@07xH3{(X( .̭pHXQB5ƣC *+h?XBe_cSAlx.PxXc_Ax:] ΔoF('S22I1qp;L57eB÷燑Uv-Jh薋Lbqꆻlnd倿 u9CޮCPQC8 ` $YF  &dP8bWDTF kGJȎD6P r2pMt)%`1 eGg1oRhN;!\H!8f[Q8<ǒcu!XǰD#NYr& lrS<;h$0@IlO0]GdAyGtt_]t: d.sH&W.#zGtfKjJx+\pɼ~ 96SiY1 #Tqȅ];5Pmtfs$}22zxJ6OEVH:*  AIp)\E#"AhPQm3d:) @`o#~u "Th`4dBm=o^>B7Jj( ͫ#($J!A?@A>rzהŤ*UUBTLUz[,ߧ3s9"w21C`P RXDC'XO*>Aw㑦4('Yм U榿1hJYEGh"PUJE`iz( 6HgMNzKPOv'5pHǘAEuZ g6!2%)NJ!D_ 0Jfs}Pe=-#0"T4*]$/jU餎{:n;"wUqxO w$I | /C> MӸ曹YbʼnH9i7n??ӉVx IDAT sr=N+"q|+w_lg^~ H}󼥧O:> z枕\q˚O_o};zv\^>;B uMݬ8銵o@aooB|$マ[3 G|-t/KWG?Ww]o&ry KDӔE?OGPjM41*>1jdW-3 PɨONLVC\ѩݳN,I!/$ZlnQ)g>1 Mv ?n"q8 TgFۂ0rBYIޞFdF 0_?k'~g͜/QҞ3)܏x_3d&dH&МLvFZ5j /=+(`'-zoY#3S͌ORʅJb6>@N1QF ( bHDQГdDv_ d#)n1<MOhџ b(-J ̝ExoYd?h?_C]i~X<#S]cvId_̗o{:J͘aTGAz 5)! 2nC[ myZ*dwv֩5TP\9(o%- v03) ]q Ul' NEGh[ŘxaNGnAI鷃 xb_yPfwpͧ9p|]q,[ZEcVnRoͫ.:QZxJr`jhT&)0 9NG8$p<ᓫ 8OHH>j"4}GNT'/o#$lQv_9C&DPH(,h ovhSkF FU7i(53I;0foggp: Hŗ1<J!4!@"8뾾 ͪq/=md_Fc.@<ϡ55GI}G1엣E8ZPqgPTC.Jy%du*Q(+*īZZZ^7ex5y _RRMGr@#Ċ okf2إ֞iD-AB?fCK'Y3Ev=\G %dH $!\' sDfA'd \u> E$T k1/w"Ć~_f>m%WQٶhqkaIñ2`'3-Q$|kM'pgϘ/@nHP|ԋ>?3@2z徥hh >p"_>B+4UCw}+>Bj9 Y__vmMdƝHlJc~PGpAq&~Dp<b2vQuEs&)D%f"0V%tʪYn`9=Ov\'nԡXO.a1)e:E򸿀ڛHL\&[ʘd0Eg &WB$ח=SX}n2R.ӴO?_57!+KZнn8?z_ȵ+įAp\](_w~YuL񃷾2}m)Nuf?7~}% /j4%rqnOe_vKܼڈ"Ep0o.BU9zQ,]+w'eKepxZHO)֐/|z;\j*Y5Lb>q:bOkcͻWT|fBg ^^޹:Ȅ_ϋ3.ou'WC@47^u _sSl=(֥ 8H+;9_%*'Ѽ" 37׼ 1$\ ɡp"!cWO!H o&y;(dʪxsϟEhg_7!%{iDHyVtt1-TqhoΔiZvOI(G%o렶$Cu_N6Z;tFOv r|]> OI?6܇g ;#4-OȚ+,9_fdʰab _!6;T߇;/:n[^ Dm3@ko T(ȅTB!/Œv~~8%cK"?>?'/ENHh~!/}aN_m1z'msP¬|\*LXo-^ /}K zj֬YæMظq#wu7tׯSO;  rWanş_'wş gϫux]ƧYSiW.7ᵼs9ʛ֎‰޻[/UgyWĭ:o%v=0_Л839K Qÿ?+o%rlc f1MDYh;|t{ .{>}m\z&,s2+ ږ^?~N=z;ޗ;NQRPUuOA]y+>nx{Kx<ŭ%앜 $ W~WW4^)N( ?_H?NBJŝcNܟ5Rm -ICLCu`xɦ3Ht) #V )[`׼,Ʊ}V]OBze ; C5ar;%n_4C;3xuY+?z1F'µ\T{=:0 XH%+@s _Ƞx}H elK"f6S3j F荧 \˪! p6Co=68V!] bNthSDPBw.Kpy phL,z gNts0ǁ3AQ!p!܎<'k]@Iu&ClkM0@\ É 3A0QRp 6sJ  ?E=Kaك3T|F%3sP:wU:y$z/$ '``eO,ZR)m kbdv !mIE|LzIwף\tR8JW.֯/fei. |IT?g%P!3֜:m! lÔKՁ%M-Aw7f+!m,J;tODJVF-20u9@Z,,Ds~Mۮg'ILj685cJP[p[; P;ǿhw< ]ğ5OXq(o5&q(8؊%=lsbM3cHpY)Funpk"錊~ǠpH> ^IjT 3\~Il3t&g6uE rJBf3O[ NZ9;_G6,)N|AL;AAF c +-do- ١Fk'A\|8FZ_ ϊنPqL-F~=m0v]~>S]dԲ^ Rs3|q8>/͞=ٳg׸ʕ.[o5wDkgȂ%˖ʧo喻_&vl"g oߝ=B囹j{ Xt1Ix~ͼ#V6xF߾wq?_w?(!9᩻5>~'Xx-I+ Ww'o_R-޲u4RUR5o}Ɛ&GײqN߁5ǹs;є3}] !ɍbcw+zVAyLq?_SskjoR`)(&UQ'ͯZiӦq]wqu{IIIi.ibE2fo}e Ȑ0=6zGAXots` 2w(^\A?! sF9ɘx`TBIN BEHHj~m쨪&;԰x x߿GS0dEQozEX(,Zj} 5$-T#R:Q$6C1UL .`D:tZuaV:wsŵD'm|g %sWٷ{Acѣ@Ӗd. ]U,4iqYR ޱn$2.OkY4`p{/ۮC`,?(mP+F[=t \/]`Rg5VF;,߭Ő vBn7ts])FjD8l=,39QT}[U6 vX;QjjJ)ӿ=G߷" `HHCu"B3̀aĬ73<ȆP X1}JOI>vzfݚQVȃ6RC(- [ SGuԙ P$ȊcB?t1=yy !'_c߾_^Ѧ(L FxX4wp&Y8d9 T.P(B=X2;VkÐ2CBP#:;3̴3l}Jhm<2S6E^m\&.߅Xt: J!k6cq@hzueQg6fNEq)-b) dR\Щ$&9Y Qmmx HCx%WW d?3,.C g?.æ/!"-pal+/n( ^-))n,| |u`E[BցyDS&h{2d{(HHb?UaW \qاX:#()@{wpP;;Ecw8zzFBHp+0 t9bg$SqSQ}t 7e98 n %Pz2?kst ΌChB nC R9~G$Vv#} (; z$bM;4 }OikqL2c1( #,,|:~`g-!],n?h(mUp bN@]ҙ[Y#bv_xk_W+3V;8Vn?7MF1 +GqYP%/6[qC0z\ @~p::` M_<9qjd֬RGgE$nBCc0t8Ev_JH?cI IDATao{g`fnz%Erz XS:9Z% w@[af J-pA^|Vl;!L:@ϧtK]_|W.?8;@; _Ji= 7ub/x{(>jqS0Ec07{},@L㳝Z^.JM-7ld_Akg;z 5E%UQӣGڶmhU.3:}j.X{u;_l63w5(X*l'>6.H ml܃wZ}Ҁ?b:ti^z.OoG"\!\avNѤ#M{$1DK.CC;9= O}1 ooEu觥C? Y {A3gU3Hr3`9 @ 8)U6#Sq@FcUsՈ`&%CoeOsc)9ѽ#QRTY`71 ?~{TjաAqeKMoDD.l7Z)xt_R1aJdPM ٕT AOx6DF%YsQi1݄a desp;ƄsvX|?\I;M9ЊYtх6(S8mlhS ]-@TFl00osDByjpt_ S3XN EvQTW{ }Q#+P]T#>V=~Z~|(ɏU[g25 , emv,ƨVVz1O '>u`6 @Agj}ZA2_}㯬R=0MM_j bWK MUٖv#Du<˃@ UN`<>Xvvܔ^}ws Ryv 4TUU{RObXv8 C[?@̤8ڢȁv4*G.{Hm~( 6 5BIhB\pTG8"@Ky]bIhBR '?%PJ4i%.&@^-פTtzlW􏑮YX.~ 5Hw;̸ָ3Bb~<6ALt F e1NFB3#Ы:\.  ]F{9+CcP>сϚj۬(;GkK0L:ω>(Ǖ?3G:{$v *vF?4xjŠНi *% *ONQjn/&l9J.*JՄ :{H|l;4u?θ Ͽ#fAŧq,\7`:jϿj* w  G`<q j[/} _~ˠ{Y=ı#u#ۻmqѼn:>Ŋ3򵮘]YɭbZ%P}>4s\{aUR4M.}G'N_N6yo ވ8eQQ1XX-'Wy@T r9APS <9)wE'rhqw(9va? P]|G9A]UŊ⡨ HpU4LNKL2^{ /e׮][c'OV,ݼTogXћP*JhƳ1y]!}tIց{],L T;tFZR1A$@!34 f@ TtzɃ\(Rdbj*B}݊1T}X}@L d}^>ϋ@*(pC_Bf}XEQHWew`D"#̅g _հx0|\]?Nb@Cv\afzF;N9g4^zP8s@:LwBH"e#2ʟ%8SoƌD JvS`]]L3b&%61t6 -fn k) g`d"#k<7dgAM`A Km#tvGס'>7&A!cZ *.b+X ~Z݌2;ΊL6:xs<|AeLLUNF!+\{fm3`~}w@'2t[>EOFǣ0T*‹;7jjxB<"=.EQ(^Yqa i/ LWW]̕j?,z$ d3Yƚ i1ozJHh&6Z _/x>PCSsF-'Fv4mrCt={gUN!1 D9%\Zޫul᪫}űTΪ7ig xҖ#*c\L76G1AYQŘ !NcZ!( mL v(ˑ2*"*ނ}5OU{IP.J*j[ bTj1PTL1:>۩F:UʌjNc噫 fL7| se*@ =O˷ ۶#z3&UuI߶ДE h69:#W=J@/4>пU8KmgOEQ*:A*SU}p840uUw}|?/n r! 0jle0f:tz_pEatt;l(Ϙm :]kd`iBrS):=>fgO*O:ϩXb{뗢^t:؉I1ZPl /C`փ\QVdꚏP&i.1]oP(f4wqw !鬄,^Ñ˪6VL̒7. wVR7Q# n>|a/x؜z5݄5n_.҅Kʸ c/QtvW̚v{y(vM;6D%U(mڴa޼yۗCxhjLS'$+Vȭm u>|A}AOCJ1&(+n!N5,= ˰% o\Dg" s9qK0wft5<}2w#%?@$i,Ճs/cރsz TƝ?  ]{V vx8*gʳyǘe:I j*z]u//NIZ'թReods\:z.J&еg/Mb}71|3ox dlJcrWEHpU4Yl .+/fgA7{t~iߓ B=P1gOėqQY[ Wuuz N[ = EߥpQ\Bw٬S֒qK'}e9-c ?k?y w??wEE=[Oqe␅\tC:V%@nsofO{u W} >gf(3y*j|t%Mj:( FQ#G2rH8 /@4h\s ݻwox%'˷~ SЩm4,bZ/ yjvBO)e%.LKJQ(B`4Q̒*D+5)=.%Z\WF|9x͕S";],k)O̿N^ULKf>y^ߚ9< :Ͼ5/vW|"@ɢ۸xܹ3cƌ᭷j:-ºup:,]sشidڒPT z#2%gzJJ*!B&\B4߿CwB/I;JbQqQݥ̚ךzZ;9(8zaq8HpU4Yii)o&O=w殻b֬Z1vX-ZDΝ9sy3gN3m۶UϞe0Rx*MxJuTʊ8Y/%BSdĭ"hnS8+f>̒癟FNdO<K: +vaO,222jϨ(*n?\z'{B!DIpU4=S-X_u׹w^~i-[Vrx<&1Ũ*x/#U )*n]U3z=!!!:8Z\l,z3%(?j.V8T"}bxx2'\]\/sj3}G8=9hͶ~aBlԲl۶1cPR93ХKy>#͛B!"U(V Фn.2y, >U=x퇋VƧfRfСi><_yknn6RKpM` Vfu*HĒ>dO,x=m/Okx?JU! _`ƍ2m4xE[nazYlO>WB$*ZĜ9s9s&,Z3fT :nJSODeEBQl.£h%yrA+!BTc\$pOb%쓙͞ژj9mmF޽+w8>SVZŠAعs'+V`t]!I[j .dʕrgLgʼxU )[Z/OsL^K6Zp[wB!8 `m4N?VZEjjj.]ʘ1c9r$seРAXBqR8222*j,4ŧPLză7Rfr%8 [(mU!BTdݭԉO~233QUXnf vŢE(--k׮3o/"\BqRhʃj ĭ3WblN[(ZnKPKuK!'2 6ٳg3{\׏+V4gBu]]c(Cg<9SUPj{[Uq[1KpU! *B@US=E5W4ds1VgjPB!NR\]Ŀָ['M^7ѓ`[+K7^9CG3W.}y~dypݩuVM >*U\=UYuΤ㱆ơ]u=M!(iA+!kϹ_7T8s,s^DARX]WD؝<9 yM#w2aY%:qM{҆OLkcBPƱna>I޼:-L⟫(]>1 {Ԓ׈WAQP V\m;̸`fJ{ \2 mA_3Qs̀FުxR\hENw!4իS=( A&,y(6cKwKAT#P @4z#BɤZB8HpfKA:oRS5) /?iZ'3N7D}ܛM;U#oS\qDL$Vơ~W}[Lh؈-ⳏ7quݩUeۉlrL]*O;g/kyo724jvź"ъsxyXD^k`Bd 7[cxߡ.zw&9.ࢂWET:P,J)+] fb:B!NFK ijxA!ĩ#K٭qsO߱Yvj0n٫,<3S{m?!H 8Kϐna1V1;ϲaPB@zC{m0o~~ km vdR0.By=!@KYȻ3`h,ukTLX2' 8*iBlϑ𐃼ix!<8$В΀h;}9=Puav m9|M<-2q#}w e><26OEDDEjzM T9x4},y\{%BQvV9.DwבyO|c̝ ']ndSG1Q[-#C|GqU$= +K{-X/u^gɨaP~n=7Qw^ -YgNO&}ְjwDa_J9hß_Ə>G7dx5_R|t_CRHއƵ]`h k>`e야'|)]Vpμ$wk,`1w`MMJZVzݢDDT7zQўÉ--'& j_*B!wǗ,Ճi nlGR[[`>cϣKb_ht2%݅A1կ/{Ny`L:`#c]˹};C\8'z0z0ub/έ{퉫gKBxR)Q I(Zo5,FhG&sƀ! z/>?vM:vJ eE IDATU{9ƹqĻ IcDT{;z*kwù8 +v"7 k~*Z/΍`j3p4B]r?!B!8N'A*Q 9]Vy(BuZj_ v(<ʑ)ȧ3PT\jd*i;wR_qfٲtVG#I|zzet TTNOtpB8Te? 5K!hXRRFTh@R^/2B!9i?.acwA~-'ק,lx%:j> ]˛$ ޜ-,yw A%4;]F9f?r'w-^ŔshǏ)!׏ ȟlGYA[[99r.goRDč*i wtR2b'(Ǯ_~H=-CQĶRtă h^B!hNW榛nbڴitwDkOn᧸x$M3@Ld@z)fOd2l =ѹƺڟՃs/cރsz TƝ?&VңHIޯ0sGwjn0j4͡iZK?6lHzϴ?QO-,<_,lW.K?nX;_l->dO,OĒ>NnӦMKwr]wc:,.䒖hFu}k׭{jj˕֮[O̾ǵ5x~d{q:7l鼵Ο}޿ X[7-'i2ZE/Z\<]⽡{j*{r^o(&<޲2oxxoõ]jsέX_EӕaB!ٽ{7\s >/0}t F~~>###͛7saf̘AFFSLaĉlݺ@*c%ә|a }5d6e /~uyIXյ!Z7PsիsSQ!B^z-. ĉ]n޽һwolBaa!6￟Çp8PӵkWf͚ŽK۶m+?~<ͶBWLn\yBTډmuQp-q2h|UZ !Bq7o? iG}ć~W_}EAA}ǏM6\.6mĦM=z4GaʹmۖNgoMOa[KZ*'HpUZZ sէ;jw !B7twyggx ._zj Ǐ /d裏p=0vX9[ńB$*Z-_Q,^j!Bĉ(= 1L 6ۍ``„ ddd0vXEr;p8ZB!DФhf$*B!DsJII/ ,L2`222L0g!$sUZ6GU@k!B!<ȺupIeee8NbbbZgB!DM*Z-K )ZKwE!BǬY$**(^{B!Dղ<:T !Bq23gsin! 2yqZhhd>h  NTQZ+B!B!=^~$ Th1rWrU/v#\ݲ_/~AV{Di)]0p?Ĝ?g[1S9f+:説OG0 $o^ {s&nEEoqҮc̘Ņ=CJ&?LFLZ:FQHB!Bl^x ԑL,cRʆx [W9=qUqnhm.o6U"Gqo}4ԆDF|l}K뎱|u,_!Ǵ'Wy9{Y}#D1MH&k@| /,B!S׸X,]\5Q7U Ʃضe$_{^x%kRhgUs ?iaגX[@f|-Ǭx;{x!GÀ)\:64'l8XZU$gO}z}V-Փx {ރyO,

30l~,Y&*T=!X\mzE>V1;ϲaP z֢1ѲA9';e?cYvYZWbrƒ9y/f!W|mm?SK^-Wgӽj gcy=j;;MnZ]-!B!'wq?_GN?%1wbW,xwO=Dm)~gU|+, 3-W` _|2w#w̦JGվw+cŏ?ዷgLbZy{Mo?߬2ɷ׸.6?|/#Cxy{l],V]̲ͫ>GWV[{j֙a8ީ6ᅻ-2>|l2ogw1/{#ڬoE?ݐa$Ei;BZ2M9fV^{˗h[wƶ8&N5\U)c-"B!z0 Hjk L6gyt RQ,qP0(c~)?T adL?Yvo{Ҙ:7Ϩ3+5}OS.@zַ|UkL8^.6:C=ߎ/d{ \қp)lW?Q{ \rCk=Ed7|u( $TWNը2 IrJCG$_ְpF CZɜ1`C q󿯢57嘭{|ۿ˃=`jBu1hRojm ) Z-oqwK#RB!B|G'AņY&Qu*=b껢xgfa|rr}@-Y;z*:wù`+)-ZR,*%TχxH8W>SjabZ'( -#9 &&}h ވ I%q NKlHF kH5-pe=>2& G]hdĩFQB!UPN vU؏}Tk!J+pv}jEY,t7f]\ơ*VqQQzÅk_VCC dPݩf(*Xjd*i YTf/[pHQ5OA>Zù I9`t'ylw~J[iXԦIl=1ނ}?n1qh2\?}Ϙ]B!Bq08j-w^XBx4<ܒB!B!Dq4wB]i=U-m3B!B!BWB!B!2HqU!Dw^:0B!B3R\eѣG{xgNti|A5kFHNNwߥy4mڔ]v9'33Sf3g4lؐUV1ȑ#Ӈp@q_ٻw/=z 22.]5 &333kȅ ׯ 6dȐ!vO^xѣuwtoCxי9o.]p W!"WEc1}tO?Ē%KRӧO^|E 櫯b͚5=zݻw~a;&M' .$..O>Çp8aqI[oرc s܇q+KPP_|仄;X5k֠*Pu駟fĉ}d2MFFSN`$$$p?G[~:k>s @݉`͚5 7n=M6͚&y$*f NffxʷoAǎ^ʼyׯcǎeB!D^R\e_m۶߿ߏ?իWgҤIYׯ_}ݗ+jJr_&MoZu`ɒ%8pző#Gz֭[o( >xSN|ŕݻ7wqq\{o:tǏsYӎ;b! hB!JWEs9^תU1mmۖoYrC .C>|K}L&Ƕmhܸ1GШQh֬WfÆ ;vL] Tz?>R;&M75-oEf͚r}B!_;! cϞ=ծ]Oєo'N>cٲe3IIIY}IZ̜93׃8 ;9IKVZi1cвeK9}$--Af?3<#.ޮ#W^R[~)mڴ!&&|$WnҥDEEQ^\="BUQr-l߾=ÇcD`|TT ]>!!(?FY>,Xڷoϭ #\ r V+ &縏Z:u9~x4mڔ{f=^/%gΝ\I&aaH}dԩ,Z[o^{K`4hK8y$RZ5?G,BHСtRϟO<ʟg}QFѤIfΜɈ#߿뮻뮻ϑ^z!ϖ-[زe fbĈ̘1K.qYmAN2e ˖-cСrHzضm[VcÆ W] ]G4h@TTӦM`˗_~(/e˖￳e^~ezɠAT?`޼y<~VQ{x?o︌!adKSWx{u>^6oq1(sL&-gutޝVZ;re֭L>?nݚf͚gz!8q"ӧOwѣGy;w.:uG!22Ç3k,?GX̜9իW?̫*縏0vX:t@9w'N|ٳgӿYT]hQבٳg_ТE j֬I޽US_~eSK5-44 6FhBD#}̕PRJ(!4pGyŹ?k*G=Yͼ6`5ߞM͠/%y+1R!~fڰ[3ɅB!B!'# a3għGnt6Qo,4etύDҹH^Ky'Ӭ<{K.1y]3xfh?:uC!vS||]uDf;xs ;Ӱ(,~?@:kՋ[N$ IDAT.o/hb&c<^$gm,Za[TFlH` &K%/H S6q3\A U!B!BOJux%eܱh ̙[.g6],1d4~\?'_}ƒzM:~[2~֭9 S?yXb.WfAUL|0=?Of_j9+An(D4$aG_F8x;;IkC;X:ϱ~o\quʝ>#86 ͅ_G9FQ14KcBrUHqU!B!ǣ>2ZSՆ;6`S-A׷ A5, TjԚ5.p|B)Zj˶wFMiXۼi>@@u':76ъ B0Uᦎmw8'56\4F"<,5Z2|@krMt4ub 2wF\nu(}f"oǿk1|tVHI#rOO$_z2aXdaDo_>9N]Ҷ<DZJ3F4ifFfןz=82q;vf]Z4oN}u]O4ͪ(JFPPj:t]WCCC5ݮEDDG1BBB#22}:jԩSB!UGcXyUH27&PR\B!7n8nnVkn&wb#$$$2aaa5}~Qڷoh۶-|gϦI&>|~FSOy}ڵ+7{ɓY?8p \s z$LTTv[12$BWEjpR9չ)B! PoV=LW ҳg._ry ֭[o~e~HMM^_dǎ,]+VVJJ Gf޼y}:֭+zjժŦMHKKoa;wӧOgͳrJ @UU~' o=?=k׮`…Ջ06lM7݄j?GUU4Mk׮_-[b2ur"D:yI3}L)[xs|oSu"]u|EIWt}t4=F EC2L&fZw o`"H0+&@!utW͛1cΚ^vmVZ_Mٳ'գSNܹ˗j*t}JÆ tǏgϞ=;w.k'NбcG:uĘ1cVYkײm6"##3gcƌUV0dƎKn߿?!!!r2}tH׮]i֬M6>M+e1.w9YS=j#[0fJ~e7ݪ]Ov^jr*X0Q:ErФ4 򠿜1,w*_b!0"p 5M2,B!D9g4%MmR$CeСSTT[n-k׮́rM4hP?0|Ai-Z_5m 806 ưaò^?~<^ݻHq Q # ӰFܱML`:?Ͽ xYaoci'~zN%'s_}oomKX{67T=mMC3aٸ2|V嵘c|l9(|~ɀv">bapɌW_-dzp2~2֍%蘆$d׽4ƿ4@xZ|lt]vk9n;gZc-s.eC7ΛC̊kF^OWQYrK>oˆ~˺gRC|,z K6R\n2P9P 6[sU!S Y>7|Cbb"3fԩSG+%c(ET!EM+tA׷ A5, TjԚ5.p|)Zj˶wFMiX-g{NI׀E.i>@@u':76ъ B0Uᦎmw8'56\4F"<,5Z2|@khdxߎرmZu$ NioQtBkY{R4Y6] ˏ4cC1DXuu~ ax뺄l?ڑrC$1(t[yΡ yXXjv$n#%W@TX&GZɰB!a((\ECU[.pj jvjDPC@R!2Rǯ<6dp&QJeB-ٯSJ*):ւשTFxRcd.DP+8Tua+%;u(o:ǟl~!mDžp";/>VFuqRX`%zDOc feT:w!nNڷDc(y>sAMBoZ|(n.jө!0[]H^69?pؙumhѼ9\u=E4(AAA6u] v9r 1"""H`9tRwQx /^y8w\a7,8;WMdjy'B!k\ `Z=4_2/^&Gwpю2oeoG'.<<Hz # XϮ{XLjc&@W`n|ȽiI]$ߥK]$K]|ogbc) %/m0t~;/t ,ppx<ž_%*ZjTVD^z%LBxxW@L(DDDpsUd!g-<|.w|>y|w|Rj|Wf͚ŻKXX/^gС 0 ԩ0aCwB!LQ+\M@3j"U7[l0 >C^Vqdg+& 11IIiSFiLK|eU@@իWYEn%.]'9/]|'&^|h;byff3r cƌO>4hЀ#GrΜ9PB'U7zW^ۗ1cxOUUW`];K6pv0B~`Ug%.]'9/]UٝcCc JLLm۶:ԩC:uB;R\~w 7R6pia 4d\ӄB!DzRsWZP0CjyvqazMIo9r _~OB!Im޼믿ur~GR0+\37ו LQ1 !BtWqqBf:nfRwލfcĈ[(9r$>Q!7)RפIrA'NUV t ]˞6M0 E)؄B!O `zUXvĉ8q"111YCBBJ:%*.9:WA%@q9_K6ycii?ﻛ.}R*W:55RVr7JTի5I^*(b;|m8;b5p*ei47oSܨ{xo ]ϩ2y.aR\W29:`4%y*VpvFWo5lu<:c[NuoU1qduR\-\1 M%}mMem}lsU)LTC'ɖVp7_a*jv,CEl{gwqUݽrϫ(eJt$oA8"cK7YevXu=%@> Q=i&.Ν!LelaOž]Lԉv9%܀g<wR\i;mIpT)N9%TD\-cEo`_7;\]YԳ>Ywq\L$Hǟ_Y+djNYM#߹{ͧ9% mmme#*6[/nmȲR\u~?]S܆5g]b\u-MAэ}.4 \{.#OTf\0.j»er ؈5ߣF1<c_Vӭu gЯud^0ydyMA Ф4 lu⪨,΋nw`IsKuT tH)[$ATsvd~Y.pղU\u3liEOX@Ξ$֭|>jxqO[Aw|/m[}Uy{>.y~ W24mIqU <~p5a-fdqb(3vW15kr׵Ts}7]C?/'܃& 5{7Lߙ;$W,&XSX}  Ʈ9, (׌d6|oOѣ^[|ߨħGnt6Qo,4etύDҹH^Ky⫧Y;yN]zcLY̯gws{ kQdt҃}/2^~܃n&4ҷhn}ZRB`` AL(,זLk>RwԹ~?Nus܍&2s%ܛ#pKgzqk. J>ٚE1w/s_3ю1>Or <ڃ'E/\T;YXۏ Ov) dqvhvsCd4a3⽯=.@^ۗr򏩷{WbVX@?wH󫆎⪽LTUXw -#'\u)W7)=<(_.d9 ϝ+6o3үֹ2u+0 -'RNg2!nru 8Y}^\VMdco( ? V|ϜFJ^C:ïGY&R@?WbK0gR>yhK:8d+寖Yb?NiFNyxoؿQiX~;*'߱n\^9ǯfשg `>kW-{.1+)87J(1 I,\f׽4ƿ4@xZ<0g Z9oR+CRvNץk_3cXw zvs@;Ĭ_fGβ2GX222st\/V\sjWgweD`Թf/Æ!Xjx̰۬Y7G]?eV&wq5U@+_hǻ-2{p4#q2TqlkovJBlXбic>Kp,aow_UGht.B9:y~7̐2oalKz|^g|YצjqXpd:|;@ײ\U2EբeQ"2|_: oQ*Ja sO-'ᄏdvk볙E#ǣ>2ZSՆ;6`S-A׷ A5, TjԚ5.p|k}~;?,f5a5]~a屖xZ Kk1=iЇb(}26\4F"<,5Z2|@kEq5~jk~w :QChEXgm u pS6;{h59=6qu`[ͿA3.c)"۴r52C̀D<u;pM.4?'u@umӕ;+ ax뺄( eРAnݚ_wܗG*]LRuSCVkTL"˼T&,Ԓ::5a-xJjh-51:sVDKA+AwqPt?±ױ`Cڎ E!|aUQs+ߢnG Ә8CYY6OJ5AT~ЫTX,Y¾}o9pUTm۶L7ҺCb.(F0fap!ez<(]7HLΫT=@7 Ls]\uufw{'m"^?0Jo14,f22T>[Q56,@Z3^X5T7՜c\-B7؝|fauP%+du\TՎaP\uߒ*Lx;gC׍eѝj7Xs9lS[M﷌zpaJPNdu #㭃d*Kjhv).1WSUKkeYU={8[Ƕ9= 3?Kk@Q Ts.2;,{_3ݹZd׶6'+<̬Z]š@FSq.p ϑhNP2mcz_ak&nSovsq|d&jo'!Ϲ+jiHcq0^=~2wyURR0+5 B kvU`] )=BMEX,аsc-2-:Jooظ!}y bC^ 3'oQTC|4j:^jt.)~UNBKzXd GfTR$Ο?_e)Gj@Ffh́(N\s6-{U/9YUOI.8˖$pp zj\*hz)lk?*zdF,f:_GO9U")c#/ -⪫S\۳>瘫ko)jf]t5Ċ~V\}Uu_nX_,>.wغ6S{wX5a+en":.sVvJd릒衑jC<fc'b?ȹ*q%4(vg=~ɨvtNokJC1T/_ζmۘ1cիWO>?_~UVq-Yp!SNeQ p:?0_{Az{L^=#es'==|eɄa^o:@zZCǾO' .b0x+ۍ;fKّgNϮkvk3<ÜW]~r;pvChW[]b{`[yP&k &IFbXHdU> VgygUz%z>l C97{θ?î~,0:f6gmp},+s q^]xi2r&cp6OOp%yGJ*s~cGlu\ykEZ \Vh: v\nyGQ$mN'R6K#x uɪEB.ouTf!VMBaٯesYn^ٯ\b@(9r\nX20',ks$ *,쬅CY~Y]'tY5N >y822꯺%SPC-/$)/i^WhѢyǗ/_˩j\s5x;g= \1嘆"E\Y;:9߶??5?|.wϟp)ʥ|ϯ.^u!<½g\^{9uCo:?z2<_ῗ|AtO}U7˿>k W`ܷ?9~#s3>8?>ңţ՞V^>9ַwK.9|U67f*򑢖HC7@zݨhTmƙ {yggkSbq. L> ZrvL"Cǒp_U'k, h4Nr(>}ϜaBᡃ IDATͫ;!GcV;UǝC/[w|BR%&KyY3CߟK:[L욫/ljs%(0%Y3NLr 亘m`KQB()AK={aNw/GpJmNǞKx}QIRתhIne\jw:p }}0g @e=ZfwH/vVrGap_پHSş0dg/L7 nzlNĶ#nYV QGMk }O̥08@uE֌8D?ɪ"Zp|޳Y_ȿ;ǿmVRy| >z-7:+xăW{vT?[nF/ ww? [W|jH#\O']ʹKjY@ᬠ/x@ژNg[`*orn=I~%( ]ڀ'{BnYW<9m/W866+g2s j (,5`M۴l:Yg/Ƴ 㝷U;SEv8#b&X^_xKJWi98uԣv|ܸ}AkM,\STJ>ʍqx;rh3W(ӸKOΎ+98f6fS'43ٹO[KVGu&JB|~|ewq/E?.<DMxvhXΗѵq§o7/;}΀3̆,Lq>t9@ r|h=J3Rt-S'92lg0r/.W8o6փxQi\=,@x?:Ns,[Uh$r?2W/ i&8}{_qO||јm}v8梋.?]JW%,9 /o~[iԾcOOxǹ=ysؽ{/e>aq^!\v/5,w@k7a_ŀ˴13琄Vm- 0YP&ͭfhI!Q&ķ„6Of4a@IPafE(FO/ǞGHc)~N m"Tz8P9Ğ{#wB,XEg)̽&|x^o 54?57wQLr]ɼ D1;Cݻkm8Z&L?b/eg{ry?M,mDeJ7D]am=fg #hҫ8oOΎ0 =|ڼGY`OD5&1QL91hٗc-OmomP,mG@x(&RdWY6n6}T )!f,#m[et 8OωOY((ȏغF=!4?k@ T5L=3G}>Q"e~~dfzzdͻϰsm$R7-P9IXwiO?$"4@P;אn;:ZZUO60sJf "\A5I$=9^4uvB+af ֎75MջkZreߌh'YhGWO6fm=28n BSGmcm<^7Pd\%k$9hFS=_$+;Mi_mXGc2ِ9D`"c6aJwNZ4I~9$5Ndc'}y u)I#5u1Ww60O'?Ŋ yj?:l­;xSe !2-T'FJ֒Jn8݆|b6N |[.yɼu2~ykO%'̱t9='ZG(/0 Q#ގݏȋ [S(/TP(pW~y'IUW]>g=Yzڳm'|2W^y%7ooj7|_fll]d^"jFx! #wd' wsO 9~p 72N5k8Hd}y嘳J%Fw'f&-2AO]oo|['tz'>aݦ&LwH)a͆m9D뒜(ZY17)R'iQf_= )nwjjjW&uc O &S'(Jk[x&eL\ D+}8iCD,D8C,ICMgYQŹ'k-ԳNWEZȘ0 @H'4F%"ݒp6O295?IVCP LepIΤzƄ$MK)&v1:=ɪg EHF}Y#@ĸh'1>ͽ+;58k0RǩH:eq fBsLs"Mwa2{G78qwͧ8M2Vb9KiSKlhL#rҴ_h jmT'n6^$a8|f~tf,z O-VTrjs {wۺzc!S:TR6K;!D@=I Lp>r[~ ̈́oٛ{&1T]0ܙQzǝ$J" Nj˴a{}޵8DZ`1g*0WSH墋o%*TQk,/%PX DN'qʮ6`Y8v=AcsufL+Y H*QNANk}9S˺H7x7O"B *#'?I 0 }/@kƀndm䛺B c9قvB*s׺;YPʪGm>ҨIYO; %IF<8aadPewkF3Pn7}ȤoWKnec:._ MW$K&˞՜{S@gLLVZ U0WEbt(Qh&˩֟%ځI|i;sL$>Hvۜ=|eܴm%_j2sPvZĒYɯ.P 懒kLX=EJ#rÛ8W;1 RZhI=wc|LfǗY{c-6h[*#dd)F-p4 3mp,`协͟D{v R>j){|-h$N-Ff,uKD4E̊ˉ@`Ajz~< ,dl>xZkҠL%yfBv MPC(5?bИ8t#&߼􉤠g^zkV;Dkq> Lp~y pףּuTކ>}y,K?\e}ks%W|w}|䵯}-_|1v֭c^z).~zֳg-끫=o%\5\('EyM50\p{ۯу 5C#؁ |s-;L*[nfZyвؤ6`GB)6_mpu0(ڡ $~,|i,ЎҴ5wiӺʪ1' cs%iO)NgdJ7(8P2 Յ!EKaq$bcKcWqthDTYFD=KZSw^xzvsmpQKZ]9-IV6~0ـ?g;Ms\ՁAMl!SǮNSfG(|Ne=t|P Ə3(`eIHNMq5t'MSHI֝X%mF=>to4}P>&yD^V=0Mv]S}/VNB XPOcN񤢜tg1Mb !M;*ᮎtéY^=LY4'M6`ԧA@@laIG@Œ6rY"LEXdBv@X VLR\t*v&_e l5DTܚ"/$`bg(r89h~Bi e3& :M,RE2E@)M,^+s} Z|̆LlX3H\@rx^;~mIA_BԖhΤjQ5l9A@t\tv+K3XX9e8F@Xk\V7Y)SϿIK-7%VޗcUmi&eў i0) ^}|'k{]Q\QN̈Q ;_pѭ;mvpf,M/ajпXPz4\>ɲOCHCD S<[)ǚK) &2e⼹Wp֦[[iET0shکFݜO|NӧıdLM_:F3O1H# q&SК$Q=/wK95t\5(س' =SJ 6º0j[t2Wے՘b}8;\w"qW汴aZL)G|G?Q8c͚5p ]qz!֮]˵^E]4> >`fYzֳWzj^MLLP[ۿ_=B<.Iv;&䋛ne8c3 (FNƘE)Cf[i}CjOZ753MWe x4I 8,D/&c rA$#A^j|=uJLTq: 3ąC_e.Y XY Q3okQJJj4׭ $F-J IDATpl ڏ5QXlhh7mm,pTHZ(&Z5Wbmۥ%ct{@Ҍꆵy E\^×M6Nj$eI2UJwRnpSb0CDI<۷A%-/8;7c}?mm" Nӧ]}>.Rq9F`4.THXYH C7jD8\nĶe5W2ċ!4'wAՐmꆁ=8eصgQmow,JŴ 3s#i HI*"cI3*"T]9mé&:h .mCsGX9P)v,dorw1vp_,jRRߪ""ˠL% wqV^w :˜dʾܫp6܋~ƣNfk IiLk352۱ @12h9oY`6ӭMS52Qz' %Ʃ(AH+R!7n耫sՇe˅$iV=Uxp}i6E]azW}f-)Y8{ g`M't#1lVj-lLYEyG)7PBKB+6s_9"Sd茻Ȏ-'6D5:u(R8] l@u"тZj*)7/sh|K _)'\ Mn5\1W&[0:&(,ԒXMDbRjx_7Nu:Պo8>֩[iQ}<ԟ' 0c WLD+eqlg=Yzֳgڳdx;>իٺu+Ї~{fm xE67 fk5ǎj7쿚/x 73W#*w27\/qw%i3W!e# &lx^ކbi2Z *N$v(ٲelRĽɵEB* SٍظFjJp2RENeLXw!FkܸsK ^yPR9!(!:X0oC=5nB5"͂kS)f|'sӲm 0P wiܳɾ۝AIUNJ\ FB<3X-A๸쀸Q{igymK5bD@D)G9>hM)l(tFh< A_,X6s~ltf -B `섭#M3hX]WޏsPaE=1Y S#68/q[SɀƔrPH|p5lj)pIOFQd2eQ(#p):h)jK"?FQ>y:QcV' [B؄v"J)Y,+/ż2:cS؆\%`KTⵎϮw1W}P4zv2A%!nԟ՗ -[BUJoğH\, M,]Sи mp5VLl*&W7#]5r(\gK&7v&aAb< h!q~: lI4!ڔmc><$lH#TO$n߉H S^EQ 2@PFxH4SҤ*e1q,#ʱ`3 l(8HvՂs'񺘨ݽ52?T>˼ \͒N,P^Xy.x⥜:$LF=!lBOͽ 'QP0`dk~o&WLgkd'{;+L>vB6 VF:9b I5+Q\V.mNjՆYٰ4}\8NΫ㜭ߍ7'2;7\Ws\]V UDAtreןܲ/9Z]ȁTrYR3z+qlxEz:Y |iDAgpǛ XFm!<91lpYt6Wa`6Omp}Ec̘^QoaQ88AVb;fVEX2}eu 6~6^r#&ʭ0e =!KI@ڳg=YzBgƣ>M~E{A666̌@߷A^t5e_ Q,n!GkCzQ4S.dz)tk,6OhM. MD"pT'@fSUmHHl6xth;h: *PLu|*~v#D U)ЃY$ ']vnڃNr^6 8S1?VHC,@> !'isbE%"9%)Y-?WjtKc>*6kyʸq l4W %0P[qW*⼇;3aL-@*? HcE5mpm븈v|(@9>YcֻZ"drmp(Plhz*hG,h97Z3C "TW9hN֖׸RCc>O($ՙj@7 nvkKj t''54Ke|m-) S^2jz-!8*gXz2^Ax:ԂDmҜ$i[.C,Q-d9)[â8<.ǨFuTIH<-d8h% f<^c5p RRjO@'!Ϟ Հ)uC "M%bXU88,j ?ٟ]w7Uōmnqgi)3 $I%!\Yr.M滴)qwZE Z&!o{r?Siĵ;|ANgw6sU Po75D5,0]k88Pn֌XP}PR)!IX3N H,@>q̾W+)μ6]}J6\Ƀ, gCT=%)I;GZ܊2ƃMxcYЫN9 s,Ha%[x.|:W3`u[(hbw{ڥ%TbĶYjjLr*Ҍ?S塯0ǼL jM2(ioI>sq0I)vMBdeUdCd ʱ)t4%B?Wlt3Ng|': H(ZD\x-PK8ҀiS3mefyYT$<׾?ڶ?'I[kX0LQp2#ݲCЌI*K=.6 d( 6ct15Yn]Xմ,fl֍W_g7~{,H@dB pyf1NV%WL$ FF:OC"q_ ҼǞxɞSy& r[N6P,s_|]LT$"awuVhfک,In4rSpQSZppqd$C6sbk(0k.f E x|pU)1sfI. }Ju6Uc$ݿI dJ,KB{Deֹ I}m@a;a97kX&\ G*X_qJ^:􉒈7wwU,"U$D+i_: \5v,RM٬LĢԼsA(H0`L\m`bi4x|6e `dṞ$5u Ap5g_Jr  aҖ* KN9V{s`9NQ3]dLVXdRvUj=Yzֳg끫={Avl6ꪫ˩V|k_3/h/r\זO'.,];f6:-1&QP0 \ &fq`Ht'Q q.ReܺY,,s/%݀e*=h 0_Jl+Z(Z|(L9WFٔ7lYg9˗T( ;-t$-5Wi11X$]GM #N0+H[v?VN+B\$[Xf+E*=ѣKDaJ2n϶0#v˂2^ J:_VJ) _ɊKKfe&2pBtt}DZ,j+%rdG($>$f.YԊ-sUPxJmTEjƇ FK+y#gǂ\ ]l3-ڰO_j,8]Z`nG>(~WC;Չvcٝpb]cTؾ]B))PM i,j+g` q_v1Ey9X5IJė"g!5IqlfL1وGGlIXR49枩t sIIg9jpR@"(P'+4q p}lΓiRhEV¡I^Iriץ괭snfr^(|sٱpm_doKTg=Yzֳ՞ 뮻+y[ … *gg{ QZ+vQD^CH$9u2'(aiڸ=>c/ ZpqP)1=uQmUmvH:*Iyߐc:%〣H$ ;.y!F1 Zڹ<-A42{fcp0q8+ lAEdC8B6k"!O!7x"|cL Xy )9/1yrsEW$Ң5;N񉡮ձV4(FH.) *B⼗>5K 3$9lcf !;.Z̫rȊGhT<6U) t,m =dBN]xd>{7"G+2M& Bu 7L`Q$ry8F4z*Ɩ%[ ÄbKEWxOƦ8`ڃ!&E I@rD̠"X\@şb\@~'S8/l` e,,ƨ?o,qIiJ_,wxJSd)o>Je –% X8IjUpPmPZ$WeiTLd!hG[#`"^³AUOS}r7XM`c%:ș JT 6Pl1@!vPVvȎ1։E_}fDM_l oSn_$W`FnW.(Xb-US험TA%7F^0m[V,`N33],ӏ]:ǒ$;ȝeD iM!xIV@>QMWm'k8aADen(S18&#s=\Zyc%l.خ㩒]pUpF|P,LQB 9vS'v{}`[6cŸa}p!pEe*xk-9xb#pVb Wr!|+_yױ( Q 8|M2V V]kI4MBTT|sr(*S?}j/QiRF.5 *Mew7 s0jȏ(*r541\c>GAU50|E= Mi@PlA#6ߊ`Y.[BNa"}a)߀.D)'kx5!rDA-ŒЖ`Fsl *(> ,A-@QF'h-7Zx?C7 IDATDD2b?1L6b́ T hCoDÔT)a[m_iWEb̹B{ :A.ZFFq\+L>In )pռ9kBH.&jO]w?KsrȲ~8/. S|fIMTۦ 8Jbʳ"/ɱq SKm-IJ)$`9쪊bDuGGW@]q zM[PXnHD_揍*!90娖MžE9?Ac RnPZb&yZcNB쑪f~0kW)f}qA:U byK((.\0I@U.GilK>s; HWhM*+JWfpEM naCDrݻ2H\zl\>"9l'9mﳾCw+0`LJxc$hXDAb^3 >Bo#ȬX H9aa+2y'- 7a7<> )NZN]TkGBAxk#`ɀ@<2 ?(^+cIia+# ]'0%MI$\@,RvɅlO##%Ł@Ȥ=rUYh: G$PJ:ʀw6C*x&rvɷyHt?3[3QoтnJX4&F)' L\\ #lI2k}*QE 7)5 L!ag5DlILKYcp=_+f ԔwLt]\?ǀ1Wru^5K)5QL@W֗d@.Kqp=Jv`ba7XQȓ(ևΌ BCdT*Õugz[ipTDW@mLIdfG+h$!Ţqm܂>UKU\)+Rl]ض1bA^賲<߲UVqpppaq\="yf6oLuu5[l)~޼y3o&>'} q! " &':vDOx֐ldKb94T䓮_% f8'4d4D7x.ȅ<Ƞid2 }5(fC*F!O1Z'tE[Bcۙjz. 6E0|`6%D^lQ V:Jsw*UC.e4ulF*%qoj"6tSUJbIm0d{vOBAr5,v{rc>ɮw8BDHEW_SbG X&Y9[h]9˞yrk~(˶?.RqC j8V:5DG$ɪl3"$ezYAKMA1$cVpcX$T-^O"* =f#Rlb[ ͛hBD@?+ dlh% NeW=l*Y>HDLO2UjjBCx #֙." "$9wP*%( %#}Bn'U n;bUPa@]?I*%? R6-bo58{ئG&GVX-a }P4<ӬOːTixG~`>j(fnSR(`Iz@g; d Ur2@c& nf XBEAٔXl|5%ecK5!ߵ==X@%qѼɶ:M\XOfh7ɲ[W+#DіY,>dcI'bEDG(>'H)UwYϓj9h Ϣ8.=! hdC^֍3?."1Z*l àO BriӦm6oӟ=QcchprrՑ(_7ܶM㩞8o Zϭb6i e ӟeZp n/fe_76j-;n2{Qzctw?OjQjQS9:"*/pebt`R^er=Rprdݦ;"G: ܳ~[=Ɋ&릢?#+H:y \fa v㧻ťs=ccq&+xkC3l>_^M[_+@Hwxчٳw-C&]Mlu󕎇P=:mkܰglM0juΞט\wK瑾Σll糧_d]^D>W)pè$R:s(ly3y9õ \:^,,:[-L7s>u{,QXᲠU=Ym+{ʖ0n,p۞?Þ;WyMj/6=uVz^$ BG6tJ'A[,۰xR 01}(ijS 0|6unMm8I^dA1l *oŀ`I2@b=:zr5LR/t㘲Ѵ+oOҒNOyb`{vTay&hy|$~OW[`&FJpIw%Es>E]{]66oZ3'TEDvi8ۺRҹD;[lwUXkM8]3F.7M*ps-ObӺ f& <k +!rIROq;YnKφ//ky2ec8Hno!BNXBHnbRM.1cMhmeR8PE2:WfQm 4pk3ޅnm}H%xJɋbm6ͳߠ;n|v֥,`%&k~U>/םNK+F+*3UJD炥5I!n?{Xϔ|v z/AA!#\o? \aQ\?6;Q^lvg%|=CsB<׼g6hlU},ee#bݚ]X'|'@qpxo.}YwbƗx pI Ϲ2a[߇}k~# -6\¦M!N #GzzzDUUl6+:B!4Mv]7nO<]l̚9Ch$İd,XӃe}D.TN2;q5dR,8~&sFגq];)U2 Pbo~qfj//f~6zu`XN7X]˸wĪ=$#N}q.cD\/|qtZ&Wt0;ヘl%1W|kbmo ~^|u]:ᑇkĩ^}6l G3ϏVkv&~\<~{B̿|̉DeK9;|. x-Vs7osa3|=3Z;EGy2+6 m$LeO|p?O5;zD?M?_ Yg8}=_ U׆iSrک: H8m;'B^4=˙XX6 îrvFQʝ4i pv(W`8#3g7x#^zbRիٹs'tQP.. ur}8c52R~(;Wgw/TJz5T\(gTj}'i_Y% ~#*@K#?.Ȓo#UYޛ6ucE8R+ӴgUqGG&lW|n;'mKBaF4fsV0y9פ`t)؇;%,~jqL7}Z"8r&v&ΊbH{ q; V孾wW/\n|/7x1h,*WK|vIf0۹]G5)d%"z 8:wt{ݧؿafzp?9(kf1{)SKQLئwa*wMsf{~u6);~jFv_{i<0 Pp zno zNJgKU6zWb>3{{ol IDATnsRF{rN.+[᠃zZ/̽ aL2_~2ul=8RmoΦRo機^Woq t<λ|+q_<6.>n|s?~&fmw7 wsu?aɄo%WJͽpY<~W&({ׯWnTB?n~2tCLYsw{.c;wf|l7n(3r5\qˣ,g ,td6%]ssݼAq-Vfp3\ɛ{q?߶ͳ[bgMkI"~p?!Ƭ9#uέ%\mfLhY̴r ,׿uLO#~D"> 8`I ӂi|AbRf0 W J ]3G*{͠G\[wl^.FfM׉ɤzIUe %TY=Be=BAʿ߃pܹSN9B[Conv&N]wU,{γ_ΡZE<_ϳ,u8'G=r΅gϿ8i?uHݬYi-v)1Obb״3ih p\='0{ *sG+o# #y׳%J ;x:/+^ۍ x.žY*Z6U+LYlS;˺^$T%m]#ZB#jf2lfCS%GNI[MݲU`xVRpCq˹p<-e!:-k$`9Xg/B;L$en2¡5ӹ*k!QdKlj#._vSZĒɜX2U=QMiDCFffm2I`ah4'K"lh*)kPplj5l&4ʦ܊I|nC.\;s"[7A[)7Fưz,wKvrp Hxm3+ڻ4(THaVߠ([ӨY@aIdBs|xP 2t0KEHsXx H]2,fلBI}A<Ĥ R)Cu潈A|{լ}ENd 'ilr=Ev*e+9:k#]CPeh.+?K`*2F?fY#F88 % _oir)š6GBSk,eZk#Q։9Uư,"pHF6e >El=ƴI?o4Ik@mZtt!Q6;~up6F7GPMiVCQEoࢎld1/[#ģU+(:*Cl1eu WMeu|k64Rߓb 4!нe'1z cm uJ\U]Wr#fey<6FȖ8x ?(P*vD~5{rY(hYy۫榉fKAC9feZu|/ r(ZdB.G6Be2;,]ݮ'X.cu2O3J+gL+eR|b3^Ɣ"y$$Ȕ,LIFFF l0dCt:*r%\sKHri< oaA1%@TK.3㊊#Th7Eu1{t?V4lqLdRdWFUrRK&#DD gu-)Q9f*$.erFAnk l*aSvx+Eʂa-NO!͍7о `zc`O)ji n||,dL&`(V 9Ra;92%SG!Pl'gUp[KR&Ѹ@ w4#RhؓUԋ926oΖh=J՛gWhd\?j&1ȂS`y[Mhn=QREx%W+՞+ MR)U1Ғ$0] + Sǯ~LE|uף:o~\|ŤoW?;ܲ:U{np;HVYXBX"cfcxl 3``1 3:Nܩ揪s`}y}ٻvUUwwٟ~y^k^FmъGYN25&)',rdÁYfv_a@qpUnjAY|=/\ ѣ,զ GcڑJ"Qhֽfc,L<`D* /_?7'Ju=ca} f%oGkEVaE{a㷷tG~K|L_tN|?r|[۹7@G}٦MW>񏳲9 7}B[*p2phl 3C ~&ӜewLt Dikf쫹UNrajk$]{)u!EaZu$JI'S$J]$GU{LƠ  A~y 'Ukd5_ G4 uZ2 =1rl_=}{+qҥx6+q UsNzW8}eMyԧD$)UguLII58?T&G=OPACa"mS#gSh B=lT͟L\Yt!S.csfyоxBAjH FdZHBerWoqyd6 '\uB9[s`3PK)[I.߱6O=ă^~ }O#wbr;<$'r#$o>\{s_=lGuB R)htmy6cZ\]W8\qC?DKnZluHS tΔ ]_Ⱦ' orɊ:XHl $BUyZ4UL|ɵirW~~]V[:p#vhoJVO>LZdՌ2Lީ=0 }B>JMT[;v85> l B۞'kU6>\o<Օ"{L%YdH'*ӺƮmgS rL {&)I^$$QD vP#`DN8< )`<zka. 4xl}ѺK.y:\J-sLˁPG5RyDÅzJrA tdPjj~~.wn D[詽|-3:13Y+ zܲţzGRl-.xh"fjt!նBJ3DnKxApƿ>h7^ eDxZ4->yVMfw;ۏ&hS A9H?Vܢm&~&oL߻8Qd 2'N2Z hO=݇KaDRtp}g^)3=_Q[I tЩjr)8+hVfȳgHZn1{X:G&Մk|U7^ϫv<ٮ~n/ʙy>Gc^:0p4AF7*[ 揊G=ZWP+: x+_+_J?ڷ#_=/{\u^̮TJSLá>C^ CL5Þ3/s|Ho{s5Ik]/o;^t"n6X]:xL:`R[(G:5o|{#-[-Z]_x!t{ D=V>=9oPs./ ȥ`a=Cb_x;q\P逺Y4H=[T"4^Y^PNFH 2#0n1q]%K`me*f~TI<[OAkpFc}ڙNЙD(-"/~:)rZQ[ТٹP9}-8PۍX>Z@g>k#*:wh}(4^D>w~>&E ?IdLS-Ŷ'Y3-w}_$2!IL&%d҂5bJ;y|&2 L1^9ohQJDx:dt$މmBŧW^J+ !`/|E.4H〶 cZۛ-msP)@1SmZ C&m2%(JbbƁgY6}2)@眚cT^WH|{\hH͎\JҲ)5mDR%ٰOL]&軱 4KO6j'Ѕ-d=S5fD+bgJ ؍G/W#$ t^)I" KH565Xtu˦lW1QoYPX$產O\un 2&)t ^0TTb%yP߮)뚁v@&t}ʰ6Vl)6R)md%HJ|ۀh#Un-K*BA/kv`KI7>$/Js dJXqBY ׮cQ]q}ƶ#0p@u`zMnrs}뺡_rb7BJ|W+Fz&L2ӪȐBT!p }_|*GؐKHXpDL :n WJ@̗g##?^y)Q>Ө?|3bA.Ɠ;Lˤg#H@> IDAT &k|L)v'½z@!hE߳u*:L d!ri. A "ly S+itfSTʨt=\wFD׸oޯRUMɽˣĶ~rp`r}s0ɇnd'?uYuјR=t( r\sWC-q /KaVW >pO,|;T컓ܻDbom儹,McVuܥ\9%a m{c[ Ax/_~ pw6JK/>̓k7{$MD+o| Gռ㾣=*vɝ6.aWK;d)|_aL>8Sx\6/!<]g>?xG)J(|''x_ε^3 7˿?@`1YZT[)psl;)['ڂ~Fq׆~JQ-ǝN2d~#{act"W C2bkQ}x/^^oi}7{&+rfvmc*+ZfCkY=Os`J>gfٯH#i {I#G@=E1_J R?4GXRVX KXՂlC>i\25r)F>1=%ڤM T@JH0F:@QH[4ø22}*,wS%ƪ7Lh 4juJQPA*WL} @dsw URր{Fo|9 Rx1]a]u&w,01*ݘjaBe|dJ AQ<{"(!Kp> $aLST l۳aA!H.T x'J6qذ0 st|Pmljpu`r)88 {ޙo,Vr@0J6(2+=)Y}n=uzQ ߶'ߥ+Z2Х)*dh+C@} Cq+pc1J8힟ӘjQxzFMNXm[ Ȕ -T"6~I0C`^y=;*mNA2kE1#õ`h\+Ā0!ٌO-̓x#glylIG{%F3x4O +2vtΪs)Jp^ֹHlV(-ʼn>KQyy_H!֡jLJ2ߖӬҞ97FeTIں|.9Y6 fԑ8;\￐Td]u dKARp̥ͻQ_ttxID,).E3`AQin`9Вg(_A%1g7 4nH tQAD6i;d<CR]0jSDeH`7(F ԕM%HUKq&_32]5#pUR P<od\r%ڵn믿x_~9]t{<9\y|C/}鏻D=iL2gpGV0r o_-3=xs<uOÇ.;3,k^_ :;라w~]s?{ɿ[ . x닟ƕW?W}~+[c)6nWqEOIsuwc6O=_spǽ/z_ӇGkS?Z|<񦿦k9neYK.a91'shws {~LxNiJ2Hv{/o d@D#ж)VD9RA?M!@62}}HS7pnQ=T)-S%qlG@Q6ׂ}OBWiطx̭X - YJ4sb`dq_#d<qfˎKJp@mᵑd g? œ:\bLRN (U/+Ȕ!XKY~oS)<[1H/Ay #Fy sb];~xZmN (IXq^ɴu2:ȴ@1Js P FRtT5&Z%JXR4!<2%5ƅWh($BNelj(9 :ˑ]7Z*Cc3M%@{>(1jXSdj1Fq XRaV==W0HaUj *d/ & z+@tܦ/эOƒOOўe/F?+OrUVB J|72F%{'b\.kXy?b*<mujx"Y%P= PYRSF,w"#vLTd O uM,`,(*J P4d/O2M(QǑhQ(nXv}Mu s sGn)TI㵡CܱtW"N P\W +_O%FlԞ(-H+ -KuW,;;cj:΢A$Љ{r87d.Vwc46K,վ'H}/+aLw|8Z2po 4FdGbo\O@] b\y#i>?lU12] nIj`ek#gX [oVRX7|3yt+ްU&TGWJu}GKӔo|k׼}c^s}2`QЛ8'MyЗM3{ʼncKX뛛PNO.F.>|R=s \IҰSWte!GJ(0pL'Li*e1Bv&m|ms,^XxU$'1h9Z\eʀw qQ =o,@Wr|ِy{^I hna5[fJ>2b(ɸ6hNsYP~Fϳm]$zA CB"VЍ3W~T4ʤ T!46q!fvV\h-[? ^øy/BX,HeeJc *\_)0:KP-a?*}z1D! ɕ@X>V1I;Вe(eœA Y3f9ֆ,iS/(`LAp Uň ;fW Wa-ڴD-T<3# _C9u{b|m-̮y6Ct2ȑOLDn}2!X1rs%Fj F㭐˩ eԀo[_KBfeJPʖXj*_ؑ;Le/" ^ 97#3bFfX*%ypwY0[W} Lж㆙ s/_L_+D+zS%3үrS*!DQc5*A̵Ȅ`t" F3)1nS-un=!ʭ-Cgs-9|e!PnȄr.߬O2 r9x*%-ʟ'v?r YJ6"|SKwɔa$ۦ(d̺ۺz/x>xڿg? 5&w 97qoル|mEnYgƍRbҐ>_sɟki'/B \) CF3-T5ICю,J\\ e&r"! f02%sN؇H z"K`mG)xh2teb ͞Bn$"5fj 2˞u*UC.刡idB"5ybmXL(l%Ւ~z7=O#_[ܝ]ӯ{TA ie% 2/ehG֧Fel\q l!4acCu@ݾ|}CM7'L }gmG! dj5Zj'zjft3i9(m[Dtf͹:[v 1:lӤhT)%‘֢9S+6#nXd7U8$վ l,g26 k%LVJr@oÈo9pb% ,Yd% ]`rφoAȌ]cC@-(+7b2G(Ν  <׌m"5 k1-T,Tgz,klYY\+~"zY|Y9΢^ 8 熩>: t/Cv78e@H fv.(*cse2T*(4Np5PF k@S+5P[;߸c`y?TɬLy9A7'tY"* \{o-p\+j@5(8J6qHMr A)81ƵOQ +/nd?@jy.'Dۇl$]t,jv:~q"˔t8h7}\~4X4ry D0|vq~ntQoH,Th-hC> HAۀ|e:)Z# ϥUypm{SL{)H=brٶr:P)PI>w>S/l1>'={W ]h%wSDܤN\o:#Ppޠ{nNWLj ?׷-d~P k,ɔ+cjԠH6k@Oj h'0yL&0 V:=uXP=azLe$PA;ީ́©.Q9[?&j%iѓ9뱧JH8lX>_mcoY&tACAe)ʅ.Q@Q_-s~!h& ɤ`ocEI/,Ղ})+/lq /q6fJëv_Iw0V:%60T k~ 0@W.T2DP1[59'v<2Id%pM=uQ ?iH\(:|:3wm֞zai&Z#T} 惭|!l^Ub,w6\6}ö%XQ']83}~hKX6<0O2Ru,±$Ldѐ8ɌQ"en̤:?VMdJ'tZƃŊOxTQ1*s&*Gܘ+<lmߌ0\-(-YT=ڡ+O"EX7$RKEr̆5;N?Eu@&r.s^}2ͬ\Is5PYnn%"Dڣ3lӜx;{38A9s׎4"q#>aX¡Z@w+c[ ̈E0=NWp/W9sS_u.9>:v/*M“Ӳ#)թ,T2O hVL7ᴄVnfVRdgK^Cρ=m'Y oqž.f6d4_3#\EfD):N ۘО`#gXKJҋ[_WbYJpUSnUQȔ` \ۑC8*EHZ=\a "3Z)`aV'-ydcZG@#o m;=Or4&,;D_v(䀁lkz(1 QD @ y8%QX'9xmJ'UolhQ | o;8ذ~`dhC.G}͐Mq2nnnn?d[W|&??oo𲗽a^klAK)CM"losBױCz t[(cw)ظ!`>">FB8 Ԋ42ŸX4v]uIX"W|Jik6L΃0hlϞX.³YmT+{œ6RisY03U@86J[:_o11wˡJޫv]f"w xlrK.Դ%+A8Ŏ P&ZK\\C1拝IL IDATrrD8ձg/Ptkhu{ʝd{xGX@L xi?0KɅӧP&B?Y쥘u:u\L~Jm@UJX0tB0#,[q`T2r^F<"N;c=\'vF_3%#V>$5Bc\M$MYez~3̱s}v>==ۜ=^q}=cEd:Kql?51oy޹ 8po@`opa|R]yZ㍗vMv&lBGaټnhRon6T5 ![<[OǁmwMMZQn%WT'_핺ݕaq ?&MCnI;{,(3`Msl)߼ n"MʔSq?0a_ ٜ~ق~)x#O-?)ځmV[Yg0ggxY3%S1Q[L^\ x R8]gۺۺۺۿulÆ SJ|4-~# ZI1Y`æ&=&byq+۲V?.34QHEwʄ cṭ<7y$~mfpK:\GېA>?=vOc.\JǴ (l38<{Di0cXh"p ~6vOF@%=Yocg8+S,yɢU]04{-?f/On$Pܱ%&r;)98veH"ܰ?;-8VD{8c઼Tt* ##ld03aA\ᒷZo"VN73/\gű6~h\+>(oN( `tH2P)=? tޓ⧶ 6R(JPY/8DIHm9./<TV?J ȣY>oCwo,MLY4>o;K4&])A2 *:p+xdj&iNTc9X{J'wLv^q,QQ G1}+2O ,h˺w3њa{Qh1Ö) aأ\efN'"N+y6g!WB#9! `y{y|T(I>+["xओ' .o&{tN"r)Xq͕ACTݧP0y0읲͉T rǰ_V՚];&INԿqpF=%pIQb_<`nZK5#>w?2lZ{9&rS1z fw^>pϕc3SW~ЬBÄ }ҕ#&s]kd)xވeEQi(hq4vp1Z8wtqZ"*eyK69C <˙(oU"&ѱ ~G\7)<3Hy\|+x)LϤzO)w7)`q\͑ԼϔB j)=I:P{##tr &?{r;Wm_iYuZnL3_i"0Jnz~s 3U{8:nnnn[W{i^җr7s7?j5W΢oZY 3=Jp'| .و tApZ,n\e^Yg"jcbѵEp=U9eNoy>rR]d ys'dzOsɿsmwnƓVWgIxnj `H51Ta pr)T&%qH=^-|9К)3Wc 'eG]Ƃr;G5C&IeҎ(Uc@N~`N.T &{EsOn{c 8UKm0وxI_ŧ˲WK|"^djci{9DhC v^:;zKN?ur*U8:P&_7>2T+~?ɿXpFTvKUFˀBG2s^p ϓdN7y_ 'Bz~~kQHGWK^-zsN>"T%?L kwm# }Ƅ-̓v/.逸F@#$JXH-NhrA`fSG\q]YD+_;v܂J0)T"Y8?1܆t:Ƭ\:mr_!*݉, 9m) 6;}?whcT>~,_8n oj$QI8&:B{32զVvSGYYϼ!͉ЬTz̮{lnnnuL^??%vK^><^@eEVj suK_xbFZ~LW_;<MZU,Yr7 wbL1@k!& !@BHC P7bL 6CF.UW;cfvW]f<~ݝsΝ;s?sThRL !Dʹd@7Ol @>E,2Q4B8a~3l62KJA0形d0(_܂R/$xl"ž2iIj$! ldX9! F14&hw8Alo[=>!BN(MTR0Up*VA(K1t#6"^_ū#Y97`ۯoe 2,FU g. h==x4.YKU~ф!+T?Y;E1@'xw@i8"  P(RBX8hGO{> K0%7VEi!Ȉ^F!{s`ƙhNb.t?*DKA3*aBO*n 6"TLA%!r!~N0)ڻByv=^n410>[Ev(F.8%,>idXEPE2_.UDf!BePG|Y=YV@|-zn 꼾CL;5a J9rG}C"c;ny@,=xN j$d><5yN4;4$upNF̝s+(=dP".)L`fW#d{iH'c ~50u??Y!VǫPz*߮+#]8rLyz* UwǤA{MFD./sɣ1w}NAn$YC)GD$t+CʷNQi!+h.wڻ?~# d#HnP J P>+UusORX"(PdABi:9SWdh}Q$WLw; '$waܵ_lg/̙oƐ}Lu9X_d ASH4eI`O6fj6z1\e%bhȎW9l{:f FʴqR *`r缻EIjdPըv>[Nji o.uXc g&TXSnOٗ& ̯ ͳjap&H j{2g3)P4 s=WH[D{6PEPFjF( +' c%?dxT및Ec=JE)nߪaø{8ZZ&A*߄S:`0Z[ǎ≫ݦ.7xFGfG1g( 4T\ gIIz%>d ]V[gjϑ)ډ@C21/a|ȸyY#KTCAO͈U30pdg:?! k9~&0!%i"c)k`͒]2!%}2~U!;@%#2 59Kse ;UG uj$Q I!GcAd?vvI뙽osڌ_Vyh"',GH2[:#Wn} O çF' ى3kK ,ճH3LNą\5IADkj#,}SÆ3yY‰{k) q&!d:ԅ*ݧ!Wd#˒5jX4a_3kzGU!C &g1\rh &e#{R G`JR\|B)qu% bÐU,;̓-)UМrB@V d+NFmͮdAٿ A#_Kp="$9%i=]z#6hM5tG4L+Ś]Y-TiI_$htz*'WLKNͱ#޻ns,5a)j $^&32,#h,繡=}˦`|t86fԅvObf"Lz*j~Ѝ9{rl2ɮ~ǃSo ;Σx2np˷*45D!Tj^]؞(I$,@[Ǫs?IMyJ11BQdӟ<:h $^HIec9%WdEZh,}LYiuMZ>o4:u(cɇI5ܰO36'Gڔiq,?r$sf!>U=Ao|KSji}"B2` F\L!&~^KoXSd$s'Rtg~OPEegF3ɨ5׉qtDٚxxxxxxxx(GFyGo~_|W^gѭ2.^u0O>$YYY︋EJ\Eڄ&&MM&Odf)H2!?D.Z`T- )^l0ݟRU Ii`^IJWarRv1';йLӆPX8eڿ墽أ>_/xm3P9`8'>&h躌a(7*L+ f^I@AXl;֟QSr餔)qUfQ Տ_ O&oH|iB<,t3aa AB6Ш'6k! ]QʁWI1\G6ƿ̨ٔ^$sΈY28am}as }ѥ:$'Y9ńWzu鶝0W|qEd716>~d|TcwQA"F6 )=#o7*")d#uel ?HeZJ_N4CBI2aTE&#qΤB02nBm]?m/wn]V64!zJ  0 P4+ oԳ.葡|iǴ7Q Yzl ?%XveW5%+b|b<pY%-Z_03 djqsmOKT !p!qdOV$y,l'L4MBwFk}|)%G&Q5%xte %9rWWs&744FSj΂rtY!S _]b,PTYb䧖sկP'Ts W jן7a$, B۫s+C䤊˙Ršّ! g{1TOHWRLNU 8},+.AߝJ4}sUI `' 8k Vy+&1at2ު6Xb[E LMvYOLӪMMs.r233;/ %KpE[oa{oiMIB%R: +P Ny #a%{;>yyW]q5u KkT@oAw$FUeQ\/U'!s=͏$ {rI"P ԤhzU IDATbv{q).J䏘p8-va ]V@˷[)sWuYaAP셢J`Ȼr3dYBQ%'>9lgrW P@$ 'O~ħ#ɥR$s]Q& tUC^ד)g?&lg)?u+w|8%7"T"/W8Ye9D2eR~9e)`{FPHmv  Q<Ɣxޔnsې"$d!lO4UNIU|nL7, zVx?ۏ>GU_3/;wXcC]qO Z~HG(vqîXveRIf '}8򐽩;b.z*MQVaǪ2=-OKޭ|~FU̮dU3Wn+N{L.}w@}.+'h'|@Ak~) nP.EA[m}i i+LΰEzsUUem3>F8]Ҭ{MK ۛkƧVF3},5! ?Å@2` %fqb2цpH9awT-7;+9}!hu<>JG iAd}mS<ώ'j{:HNC!zTHmq}9}w%$aY-OOPT;dhCG;hWU}T(Xe_E'+h_bWԹ'#h:!5FjݦVj߅ɋ3n0TFng[M5L5?DK"y}L Gpɶ(B^$NX2t8r4apKQ(ݚ eɈftꦮú￟c2gƎ5\ĉ9r$gرɓ/ɬYBro]*k۶m,Y1c%w'O0^d8@@cɬ( @3p4?;-UN`8$(S1 mX8hĻ=`%y~YWuOFӂ:2C|8f{\gd͏(@N.1mCEQ$j=USڱ;犞N]U݇1=W(k49'QUe4UF9K@/+/l3ZfA#S'"PqtFEQ2M3 wdn7̴ )BQN1}Mʦbu0DHm م< oJC"OmS$e݊yT oozZfTon&k.(i #n!/GdΒd }n/RPGܰ>|fuۻ3W|AE!/(HP)/acBj;1eT2)H34Ȑ`v+kX,dEkDib>2 CQ[߯  KFu2z t] CX+Y{ӽ(rV+nN1e A~U#9C:ӟ4o剗dNĜwZd /}:PuدX#}.y![Q`*FZ[@Q햯9 l׺+-϶wX\Pn룠EUۻl5D&ī+j2sW=FÍkP|V|UH~g _ձ+Ps5C ! Nۘ{*)AXX4̰w(mIڇ㇨oH>՞v(a4SEQ9s[9Ƿi~$%=WQ| '8nYA'"[`\+bU59hU,BhR9l c/ɯrV863|D6oU^c_ø UV M&,̮XRaȚ γ@U%0à\?fǐ^7zSr`ٟ٥4@gN~~S"&9kQrY|U[Ea^>r 1:3D"kiT2rk%e,F)Ҁ~~n>q9ŭĦMߤBwDrs96+)rdU <2iM.9hQa&:S-JF$"s2#E#L@Y.$ g ekn}P$$ڽ#E1ۮxf b$HA_*wvYMu[_vS`vӒ7?I6 4Ɖ *YPtaWlp&r3[%'+̇|J o~U'feq'ݸFf~v6ϧ?I$7scnGn${ɵyA5H$grvv&HUfj #'|[ B嶹O{,\dP[%i_mN>% ;! d뤮+Ca/FDiB"Cr.L%!"_Dˢ0 ?051Wùy4fĈkî˘31ݥ&C !++DEqlD!ّYE6}MP70-+YV^~E1D"誀deϲG ʥP\XMb2 D#d [pK"aeAUfsE /ੋ(D-r] l\uϊb lŞ,jyY0[dPޠvWS ,9FNlwoD-~}*++>}zw R[nᤓNm<<<<<,wXKM0`XWOee%qI\YNo4*nכƑ`m8@PbKu-S~OcT+ }]y-aSk&51byL*++],Ejgirm‘lݲvf¶9wjۡK+Ȍ׾V Sٲesm*BgԦjnJ,Z ,'lTڦ 67lEi4mTs*JOvgB4@ee%M 5ޘj;l4p}~`rv۰5f#uWhGϪ1D9%L]Uo2jvu | &nIF,Ѭ}'e`aiҦEU~*: I~*d7]KyKvUƦ&^TYB %m=!5!IDh< =- DcZV 3ܺb n_gMV]Dm'u7VEDtQYzu`g-[[nv?u)FUM=HSA8\Coj[كٶmlۆlc&Xӛ{|˖j*++}1Mv`IƩ8& P&3j}uCC=|;EYeh_B4b[Bxan V\̨EjI 5m:( /.sم `Y_o/j=R(%mOش̙3Yx1u=z4wuO?4x 6l=<<<<7IrN~$ D}mY!,#.?4r zfm]TˉWKd~,<'vc’T>W6M'?|=H"H~yY$hfICuIZDK&IB( L,L,E` '6/dK=[9uO҉m[:H *'+2_.94^ZR&$[aYĨt2rMM 8Tm-߳FȐ*bڿ>;e3[$ do~&Sh>b5Qpܾd}_o~Y%$km׉]a)zӝcpkZ: p).jl+ޟI0q`u$Ln퐐ZC hާ)dm hMk9BTݾ,N&E9x<,زnA0qy'8'2tX&k?}DQ^ ws!o|s`bElҝgSeȗ;>}$0mŇXuU x3i"a_vaOK%d)]xg`{v-z6x'V ųo %rs 7 K.OƞL$׿'zosӊkhA.^IDcwxob>|6RܲDw7? wWЃuڛ [c7#qꩧr0M= e&0rf㈛][xd7:&߁Zu7)ѹX<\ B-)wSۏ Ap^JN%#pukpp[:!̊u{?YeOy"BodWWe?0½Fڎ%ɤ`]Hh NYH蒜,+>mykDZKW5y fۍVNK@ vX֙]AC dAN.dZŒP-:a)5kGOBQRJ$c)f%6om#'`|&MC\)CP{6Mv9?][}XL.iWȩ$|]}Gaw/HY~rvJzvUXuu..S&3<Ú5k?>}/sAwM WsY{͜6?@$ON096=*rv*=Yٵ= O\?|N9s=|ɝH @ $MVgѺ a'F9qUu\IId]=BNĿ) 3vWs'gydw(kOAdY+&) ,_"ן<%I$Y=HT;LF2%;aYkou cZڄZ!MQ2Ųz֥:~)}1kЙH爌z@Eoy-Xڎ Hs ]ƧBCs>cdf1a]49unAA:ߪh}r ,[_ lq5ueBn{=CA_xQ ,Y$F5b)m>[r V܂4{C~}(Zγ#9$CR\ugHh2;h>]?w%oβb͚5Oxb>`VZ=ac-'ݓDy[yuy<8RPxvd>VC{FN~c#*`c`K!ϙ崢Eh'z:k֬;d\DQw߾1FV,J IJ׎+BI Q3wxtG`nzAEbC55vv Mm"{:3xl;\j %jy3)0BͶi !(':2?p/ 3a3tYƪj:h-nRlRC0; 9 -9V6W[C&1Yu֣u"{_q˯W%_+rӞdjsIFmfv>:ŢmO8#%r5TU.g0R%7='P'-To.TFW=lAR{ vI p^ 鹚 8M\)7H;J&TQ$>k.gQz`g=bczt^~[kh]{@R\< A)ʇI$UwCsYH(" _H_ y?!6.m5ȟ`irurU\~&s*`-egi]!T[H8֎6a@}  Z)@YOVG|fY-RԑL=^ .9G˟/V!o2'H`IΉtx̎M w>#D3Mmv+M ؼ 7U_ɦ͟]}csϷkі ZI["p4{xBi|=Q8I݁B_\=@aB=;ri?j`sK$01{W<'3]1;fGM~v"˶^ry}]ZÏe㣼--Qb^}b7 |&s#}um޸HKT#:eC2U+ZJ7Age"D -5I]H(ЪK$ZX?{xQN(-b X\e4Y zŴFOҩ'zxx:YrƿG #?S?zʲ1-@1(`p?V3tyB-q̵?;8c*dzkثh4':5+#fíTuT&5&0}y棘 EW6\ýO"O̊]NMCWQ+2u?>d Apd^w _JgʬQ|N5S;s|掛RGwx9>×IlK&9srD|߿;R}aw u4']}7*>܈Ł&M[޸``@$j*aQYY)jjjDyy4M$4U߯b1 0$I X,+'z2yR%]!3=Jee%nf*ky+q=#sR%g#m?=bH( HG{OfHԱ`VnE%>} + [4r]UN;k۷;-5,_g,^\bw!Zn_~*٧tC7 ʶaHb;hsF%X?eBlvMjvm(uq ú`ԆC#n:kLvLY>^;{/ֽM+!vC\4&h۵:ߖ/;w{M54h'?Zɾaqta@iՉD^Ѡz>ff<333ԔD"'|bB!+XcƌVZTl |]K3UC 7Bѻ$tHF/Xas(xނ}hE*,{U:}c ӗE;ޖjφ_i^Ƴ൦_+CgWHaLZy6Ͼ>)wk$*oXߛtfzt a j==mܕzL{m3.$=檬Lish`Oi#nD~K? VE<9WT§ ty+UD]7 V0"<>8p L6;~zlKIŌ񵱵צ:fqzxJ\U/e `WԴ }$\qL,I6ã<ՁJHt+)9b(hk+gg)?]=id7xcq$%5Զgz7`w̒}'&1Ϭk <"K[]p=W*Ny`ow.ò,n&)xѤ{*z{Rڇa\K-Yz≫dՁKFy#s!KT;vZ."6oצxxxxxx*HcFNŦ꽗G1{gԾ\u,+y b܄H_͏ UĚUᾶdԡbO4zt/XzMU{4l€hɰ^!~@Yyf_E'xkڔçuG?/s?1+WIJ,V\ƍyǨ&??/S^^N,c}}|k<<_xᅭB w}ɿ9y Bl߾iӦqS^^+6{xxxxxJ~;:u܃lh5/>|7s/]Fn1_0w"H;_N+Z݆fv O\أq՘ ;,@_[1pz. |Kcwex%ɗ &0ycqA~p[/+ggbn^3wÚwQʤxv! Ug9"pq/ΤBqMq{]hMۿ<P"w7*h~q=hc>#,Ml5qorۻ3\52 'Π%p4L׫uNpƛZsި8K3]esy{ff}3IÒB *?K $p_ 'jR ]`߮DZLY?fL ҧGEܮ3QD<ˡ}YKP2ړSz*K9;n՝ML7Lh6woߺӫ% |*٦tlκo7/ԩ=&y_c&f|T|sHÖչ~p?KmOxdGQ#UQi,ROd2rUȴB!Y=I睰P/\]wTbn$\eYAɁXRn#m{b+]p cC Rwj$ݡ磑ԗ\@qyF߿Ƀ'ڧk7q6‡=h.޴䃕!>+@U'KtV>q72og|r~/rmzxM΍CA5*{`cZ-iׯ9er|:'ߓ7Ӻ/Ζ VWHwܚ:GKwR(Ѭ4+*(HqU!B<=5WD$[`$'/&)!)=IKtd vhgg58QDǨh*Pz.&`y Q->ƽ+pZjqFs 44ʓnՇIDo_ W[;a=(U$vd^t/T9jLdjrq.j'ϹoM_[`ʷL)0't 51'X?җ*X5JF_+.iTw&'|8zCW@Mo9Ę)BѠU,dfnjB!(?út6mP!߯jkH'I\aj15p9OPV\ptT&$}ϺPKyKB/;~k>t(<)OR:>s˃]-b!:! 7r\5 KaQ~ϰ{qRTԄ][JlU׾ kƓzoqSXkHVl4y[4S9#N #4N,eQҥ׃.<R?;6P ٸRFM3P9}&^y,fO'ЇhUtvR(Zq~9JD]|7'%DŽ‹4*?~dbo=m9W{<ca,OO8>(M(h52-B!BWV Thчf^W-^Z.QJwG-a ֎<_:m>N pH >%AqooFk㣑vuܢܛv[3ɣ`Y}dƯX{ԧiT-nLjD(i9IMeZ >f6-6ҸkwʰNYOim?J@)>MAˋem:Ɇ%2$j簬f٧ĞeFjǵNg^Q ޚ@Ҳ%|5r: <}+DŽEeZXLbS4ؗ\&ga퉟;epw6}޹9m&TL7/ 99L_éZ.Tn|J<<Ǖ.1lp >~n"g J?t$$ǧz.99Y UU^z*i2ʴěUeW7uB!B!̒-{ƹ+EeCk>-f`40%waɨU|HqU!B!BE=dY0h|vL~@͉"CrB!B!DUQ|0eJ: !B!BQHqU=Bm_Ya[d&6.ɷqIOrn\o| !IqU!B!J O{_{!%$&:9WB!B!)HqU!B!B!WB!B!)HqU!B!B!WB{gϞҥKC!B!D1#Ua^K/DŊy뭷LNt '-[$229sE:u8uꔉ,~Ypa+WKժU?MYJ=رcnnnٳt҅zѡC9UUٱc۷'1Ts:DDD@ժU0`ɦ)۷oK.<̘1#}4.]b˖->|8/:t **ʘ !B0Kcƌ~ܹsolݺ!;=zw%$$[[[/__իW9}4yWMf2% IDAT3uT|M֯_OPP~-&%%n" Yf1qDd/Dcǎe={{ɷ͞=;w_j#Ǐgʔ)\x7nh"S_d fϞͯʁO$*|m۶lڴ)}̙3y嗹x"nnn B s}:TZ777%]̜9VZ?j^&NȚ5kBQA$P#4=~Z׼5[w|l?׳^ L _5,󱲞+3uyi*ǩTRƍsyFT2u{W^roiiIÆ %4uTfΜX“֭[p~~~t֍P ш#hԨ}0l0ɷt \rYgӽ{w^|EΟ?O5x$߅ҥKܸqvڥ/vVVVXZ~飈"[ hPLi7' 93m-gZáX4a_\L0q{Lqfk3Fr2glǣ!IqU{ammL2,Ӳ'( K"VĜZƄiׅ`#aWҡ:g-*>{ v=PS׽׻eɅ\{LO_{id*C=)>H݅WF@?F 8OBzpm_ж]':Bhlby;_ѩKWuΤgV=⎱az4>˓ vTj2gOɵ,Zҏ61-åo$WcMxZpv5~TǢF츸pLʖ-kh7oh">s@r_X ?O“B2eGQƍѣG%$66~ݻiӦ &L|AN9n+VVV }|?*Tiyv9!Á`{F~ {vk,'Υ+:#^gٳs'9{PZ0onSntexlò~6~|n}⌯_UN5lOp_Fp~xYݜHaR4+nrN .2`~7~5>ɸlU\ť1Nm1[?=š0owW^Ul۲[={=ܟnRv9x,j*Nݺu9qD˗/kˆFŋCg+W1aڵkr -ZI& :TBTjUn޼I||^H*Tc gϞo#\!+--/ݶmt5}C=?¨4 6lW^?ߦaÆX9z(?G?'))v1o'C/U|W,U'=ɱzz+s^o}RX(5ir{s'/yQ٦R ''=D|zتOsY|#nФdZ!B!Bo6 7Ҧ>8VLB=+@S3ڭ mzV~~-ndݗ2Ҽ4 ^%=NU]FNMCev/S/ؘk R4͚QY`Ouw%~5 >Z.>blsݍ1fzc{2nz=?|9z%dZNGhU&COXig*X|rX(d3hwڴiʹsp%&&FVz+{{{kV8ꨪ떭nɩӧmt7(TB!B!x{y^Z!($-55h  ;Ouojo%  9\i l68L?7x{yгGtxEQlllSzYЇZ^=`ڴiɪL B!BQP xfΔ/ p8|-eiK(¤*B!BQPv͘Q%ť܈"B!B!BB!B!B*B!B!OAB!B!BV¬Jxx8:ԡ{xxxHDm\o|ܸ$U}Z4^dܮE!LF ( :!-גo|۸$'97.ɷq|[A!F"U!B!0 UUMB!DB!Ba@R[B!J) !B!:-b?1uFƍ ֲedB"CB!Ba@TJ9a0jԩS m9::-!IqU!B! \G]n۶6mݭ[lj߾}?8yAB! WB!€Ta:t耏^^^ԬYSHIIQF?gmsذa|mS`3 _:+ĘSҭBBo:{#OS —'16 r K&U!B!0 U5Mqwvѣs1haaa\t ooo/}v,Dq>ǏӢE 6lڵ+UV̙3鯟3gm۶f͚曼+]6SGv(J6;vm۲a-ZDFh޼9L2ڵkgd|}}TRzˋ{V%396MM1IXqQ mcԘVۂQ\El"u\m6hBNL(4R\B!B2uq5mgXXWk׮TPbccJ*lܸoѩS'֭[M8s w̙3?뗩۷oSt)SKȉ'qC wݻKVeƌ=z`cciiw-tÊS˘006ulx6߽*]:tUcU@%bgtǖz^6%r.wηt8^p$ˣc8W1es|z/ԥ+ g3D?z:6>}ڶBAY|2NSqذӊN=`Ě=+yXڶDAS<MZ9ơF.6Ԥn4齀jO/$gD>6͛Ăj]z )$]ͤ9> t t_(:*B!diӦ ={dPTLYZZ;@ٲeIHHNhh(XYY&22{e[[[ʗ/ϠA(S Zחeˢ*XZZ|+cǎԎɆI;g䷿g*>Ƃ\ ʩ8Ru=?{ޙULn&<fA]?N60uٱ.1}j\R)-㷯Z|[o!} 6x;=m}pR#E~[ОgDo Y1w⌯_UjN5lOp_Fp~xYgL~nmPݖbۖ5|6c!-(·8w#ˉ EWB! L[\W{ <8u۶m#Fиqc*UDǎi׮zʲ QQQYdzm?{!""Zjk׮LEFFRl\"l腧%X37Cweap?X)hJUn9C*(N472yLVY djX ƽb Vi<?Ti<l*yW +5{a`=_ m%X7`pFd-鉼~ UUږ1O* hʟ a7#84܅SIS z9|0A4:ۖ>Mn[X EM~fBd'I 6r !BL=rw_5CqsCUU9x }Mo+::NG埪m!PqqP q!ȇzDUʝ*Ywŀ3:gwyJ˵{\ǤغS>#)eCyI}T$ю}Z[77JesO{{ҟS@!KU'g5mI)5>~R_뀻[ 4z=*yaQ!6ś`< E,WŪ4~RmKF] 01`}B<oHB!Qբ_\i^uZnĉ9~xuZh牏/pwaɨJzpqqIСCikk\Zx"2L38Gܜ5X{ν Bqs񬿿W?UZX:T(:I)s19꒹TW|IΒ-fh(n q<ȰB|g]p2Œq77b2myDyn</B34Nt^ҲsoJ̹24*)XeS49,u `_(j*ӈKFIƒ< !BT#WӦ_ؿn޼ɺu b޽߿~z._̹s_ٵkAAA9s7nrJ̃h޼9Ԯ[BLd;y_\DLnݱ(e9o:˚_DL6T8:6s6&xkgJ;[㸼}3]nQ-܂X Q:Egd&ݼZtlĝ %PoOB+@bϙѻKC69_LDy󕗩&뤜VWt4x}%ςeheո @l[|s'/yơP/5>[áQ:/WOߥR8q 3'|ÐǀH*ƙB6M;wN Wbbbjժ)kkk8^JIIl5n떜: 9}߆>9=RO:Q􅇇j^јnF ۊaKh]%bHm\o#2fn?ayKɷ>n\o*} H9|/jԨŋ <ݻwwO>2e0f̘g{ر3&MDgOM2J9EyoR3 )WnCsHܑ|{U}3p)Wf-$ /$$&\+]>bX7p >~n"g J?t$$ǧz.99Y UU^z*} IDATi2M!{OCr*uJ!pCM61qDUF S[lɶ r=c ʔ)c(T HμزF?31LĖ#;n)dT͂yl^"L R\ꫯKKK,X`>|H6nb:@!^\*UOOOvYה/_ }KaUv͘QҌVmIqU?W׬w{}6[.zU*{t~T2rUQrYz/LamϦ R\Ν;VNJ.]lvSUU4fH˳98|xTU@JHq|WQ̷WB|BEҹshٲ% 0I&( lٲFNYSJvL$pt(1(swq&6.wKr!@|ܸ$U-U!(T}:u",,6mPZ55kk׮/̳H3z?ą8ð,]IKmɹqI([B!J) ΎKbccüyy&жm[^|ESrC+!ȞQ'G!D%U!(4!!!$''G\\˗/oaL6 hVq@ByQ7mBa""!%YܻwӧOs nܸԗ_ծ]UVѴiS4hȑ#i޼y6mb9rPCoZ%ْBKvɉkMׯ׮]GԮ]///8<}YfӢE N:+VI˖-O>PvmZn'WR[laF̂B\@(}vݻDFFiӦ }eذah4ɧ] %Q߀PԡaFr~BPj1=o777:urpUMFpp0/27niӦԯ_]2|pvɰa Io{С|G>| ֭˸q^:=zJ* >wr]z=seΝ4k֌={$'B!U1ooomFrr2ܼy8ݻ9s ZAJ%]WCI*!J&VW aÆL2%ہ;v$"""׆Ӹqc\]]>>ܹsCJPBv.\ȝ;wh֬J*xbBCCٱc׮]#00$իGYb=111T\ӝȊS˘vB’p֊QgڰC,z6q^h9wwN)9j]A{}=s3vWKi0w",sm$f3^;{l5ϛ9v3r ?}7pBYu)_ɼr+;qذӊNs`%( 6.h֯ ^pNy^y~mɩO({'b??. i2>lF,zSh"[,ƌC*UpuueϞ=DGG3ydUḟ̹jS^QM0<6G/[BQ$ʆ ,?5˗?ȵq1nܸ,9rH:t(CGB<Á`{ b8l*? +χ,ɼ3ǙZM&yvQ ]9 ϩF{M4f7!#&+5?9S{k+㍹h8Y7\l)mc)NLk.S#և^U-ƣHΉ_~㴫'*d0jg]}8˅¬?sϪ2vUd%{b\rprr>_~1uhC.{5OZH)b_hIF I$vɏOBM~\\ OKtg`o|/T~RДJQ(sh'UPh2nmCe򤙬H4/K*M~}V[ƁZv[:Ѕ2pp,ʽCa =o[ 3M׏&-_),Vz (c<yγϜU],byHqUdKUUsvvfܹ| SRLXTz2En@^$s @MBp@{\3l\qw!}DQ)aPw}~Qгq.O/sq;czgUw7 XQ}TKtmq̦ekτ9kݙ G#s~̩RvZSr^GhR\YkHR?m4Sf>x`tEVGY BN3@@B\l jS)_ !J&*R㉌J~8)q9kp5&{և#\Ji*^V=jqb Bg#Ƈ爫Kvqv1.ƒHxꏂ0^YR&6ʢdbܹsN^OW_}ėL `W^PWQ tFqhme\G%O(7tBf*CNHGsZV@S f岣%㮰7~fN o m3LJ1sQ1y~I؆uԂG\GPn>\XTkFK ֭=O1ˆ#fYS[类y(q1VNbar?!D Z Q3{K˙Gw!ԳĀSIWM#Vqz~7EǍM_K|1xi%1sN=ASICHX2Z!Ա 2}U]^sfL5zԡs+_<`U8zEG aqy~ɭO7 K筥xqfLbqB|藯 DI$U|СCiժ^^^ 4adfD's= j@S/VrX&+4~өEe(D)EXBI@sEaljV;*̟QYb/Ž537λ_U(>=6~YATď<~lB7>^-qҁm 6OjǦy>r!}W\ b,8|9>}GhSgHot /@@":pu^i+WL9J+K'ɢ6-@)&,K3K;6ϾtQEїzWj̝B9We6!Cy{N$g^lY_Nj/\ r=*X:G( !!PPBv͘,g ؑb+g7̱eҌV(bN"QFf iy L^Oڈ"2WmLJ`9WF`*J! lQisˏOB*m*c(,^bi4Zv#2820hx:_dU=z4~mFĴsUUUnވI ȏ\-)#giUC̹5ܥOs'!D ^\-:?Ǯ]prrbڵDGGӿǵkѣk ///~7Ο?O>}h֬hтSNej{ŊxzzҲeK<==O|2>>>Ԯ]֭[ի8pԬY]v1B!Df2rUdpBʔ)Vo޼i¨̌6]veܹaÆСC裏8|0ԭ[qQzuzA*U>|8wݻw^v͂ h߾I"BHqUd1k,N*r!Dct/&$XM4J.utpQ[gb1/>MB,y -B {ЦիX5|%xڔm.?o‚reBa,R\-6mDݺuUV ͚NdwNٲeYJ+`deldƘ}5qL0Voh ޙQs}e9 $\Lr%FAQ_\*"GH@3"$r';]?{ݙl3Wꪮz>"i-G$Vҏ[0hH]Vp?]>| <[J(atlЫoČ^:\\t'L>u^c 60yddYZ6mGy$?8uuux?я~TPB %PB(89Q__=:ꨜɲ[oŃ>'o/[mǮ5٪+EC@%aN@b{ nvƍGMM v~O΢E5k0vXZZZ3g7n3`ĈY>0a\.#Gdڴilܸ3ge|IEa 6z P[[["WK(Jm3K(ao>- [k߇䌳&qe><2P"WK¤Iikۇ>C N8[=TqUTA];3]3։xĨ(c@\M*WmB5f._+\ulAz(WXY#uE aޠ\&dL@ r&bI nC@*W}9V"()Ws@^ts 2ٱOuj>m9Zp^N@5@?m{ .QN j:]RPB L>{]H؟k }ʝ6 IDAT[`܄SS93rsK3?:2i{Q ;v <^. Vi 6­ʘ1c[˙>}:||1@\?Z9Ǖ"/z; ̠| F+2pT{30,@h"jX om"5ij."kFf}Ja%DMmBllrx`~ؙG2/]`H'vB,tD^p (8ĻFY9j|"l-Imf67M @=vdwo`Rrľ[GZ$U'ͼڼŝymu]?x.kB3QIedܞP]uԕ1{#k&jX.rs5}P$\H@h\O@+9JN`oPr34u%7My}~_tN;ԒJb"@}Zj?$Zw\”PjxJ… Rw$I! j"Q*yƶum[ iȣMDzoK[n8THs+ϋVD;~4x,}uu=>56msx}5S&^5w nmE~8r~eDxIGS.aIS儻wez g\<\N;k_gi䎙y߼p g& 7XK%r,\EQx 8SַŚ5kO0,.(INxk (М1):o97啞_FYҕ?!/h@=Ut{;fѷ._[=)st"%dGjHU*jr BeͪNA>i0 8D; W̏C%ǐo.\ՍBQdPiV6g sxiEI+tڼ̺ "jQK+N"WU3~UpGPKt69ې=+~P6aJQT'ak\p[8,8}n*ض1 xpw󔔫%|140[r>h`lzrŔq Jk&1d,H0F!~yLw[.;B̧Ns+Xko*%w!#Qڟ5UZ0ܞBrՉh/:5{rȡ\E9^0MOtګCV \U  D-!ӟEr&=WMAq"/f6JyQ,媖I* | Qj:]v=lâ3su@I#\M@*Wj ,8%dc%/a;vHߊ8ӧ{]3;6ef(d׾o/sO@0j -EfTip?s&ͨ% f)3yrX W5mt掅R`H}:T)r4*= R%uicsYUB&fg'F .]M4twZ:~O>YV7{\k?0oB݇^_| C>ʵ]fym__~&b֋TI}mFWF2Ǟ~Q/JzxfR%z=,qe׬ɜ?#HBl I`*@>}dN{КlK#} s+v5G[SdڮT&x]0{Wwڶ 7ݎr(WUVpijנV~mfߗC W_ܴ,\MS; %Y68nZ |IRWy?g3r$#>\uMb`zm(e鹪ŭ6^(Zܗ-W&OlF"@D2UO,8 +m5d;"_/7ɱL#o[%3jǾ(0w[3T& BlTv;DPy 2w/sA7ͤRO ;N*)WK(aLc:0΅w50z͎sN9pN{e|;ɧ5G٣ti<5Nտ?~r磼Һq3HE! p\pR=/\ItPEJտiPIK 71L$.*r%ZB?|^y啌cHiӦ%gb ,w&垼mD ul<>=1 G&Guxpu#1C%9Yv6]H#i=ir)Fܽ/t./|= b->.LExkf{/:mMsOx- ]+<\U^  *Q]L;j3[Y4{eL1[J1# (@\I+NLjߴ Z3Y_5Kp!VM-bm9yAn֫wS:*j`UcBb=R? %l]r&ƒ#=WC 9^DIDr(.6*IRDD)^c}'*]0$xi_5_U6sy7Ni6 IU}Z aS"^psnU& m?Q޾jB!d/q&>DPy/ȲFϿ⦯pn\9|ƳỌMMxldBf+ClbI4?1osX5Xph &hjv{B856,hQegl]0?`RZx@+Gi/t}G+B͢y[%İ(yCw*W~mjkk? @8K/K.a˖-wyquQuQ~Z. &0~xN:$.]3<Ø1c83f ذacǎ#SOe̘1C sU!\UTUoc}Ohuݤqc=v^ڶ-g?ͮ4ӤLV"SG:ۃ0MwC$GEDB .#ӨK}T$mv- {k1"܂4q3hVvЙpefujj2s<~tǚhʬD,w|j+IaSlR{oo˨szh>@.r$\&z:{=W.RE]f }.Ƒ" ҷKT{{ I%\2}ɃItl!!S9ҚE5n-\13UԵ-ŭU ]0i R֋DI)&n͈we!QqH0AgQv9JeK|5v۲$BV=W!`n3pV~ELx}t[km 1]ex՟Ļ3QsxXnCh#Nϭ\nqXmn):qi*ZrUhrJio% ERFe:PyIR&ıoSq 4K.Z&NQ ؼy3z+//2'x"_җ8s2e f6˖F*~0w\n7Gy$SNCdʔ)ʒ%KXlg?1 wwK3m<4k5ٿp7oHr+Dq+)OOqOqiy`[D5'rљזrϏRj^)ZAoO[f Z@ڻ.ޟ)C&Q%W%j Y뮻8q"?/s'|2?O N{eܸqp tI,YV:,bB.9`pw1@H[`BcLX p(=y:A`t%MF@XBj"SJj B̿ӑ&\ 8AVe#Tx韟9-I칺ƎidM64d+%];xk-趭Ȧ$or5]R䒣s&=>d+H$Ъ5FESCc}#6!\$ ۏSH+ "fFտ%mc `ėN\ Fw_Ljiٝzδ5*u2úMRf{xy]MaZVFJSgMq; *mVv<7V[=V(RUcF>4׌={ [ -^*W͖ׯiH򧬗3_/>#ZשG5֣-JW\_7,zrS[@*ZMҫ3߻r&t`Y$,$;Y]!{ Tcwm)3VFt> ׾j;2PTl|ot[^9+?!lζZpO *Ϟlr}$jlu:}n""G:j?xyeVzap[m+Ds("d Ƒl˘b1xu70Ѕ_fƢ[TE{|Y}tv`9ih^6ls cǎ駟@UUƌS—PB!Hߙ%go20*wq[W.}IOL9J^r,r!`̙~<ɕBzjfϞq4c |MfϞG}ĤI꫋y &P mCb$4*H${ǔT/[|=W+p }/cq:.\ ]OElY-ky`>3 bwc \3n2p;>m0u窢i>4Cq6{kkSYkU2aBlKv\JP!hruqΖHMN|ђ W#^@Tȃ4|jJ ΤST_tNn:?73f== ]A* X^IeeIf82<24\h%rr %fmOZj0/#aUyEuUۏ6v@}XqZ$&$C :Tt52A_Ux0Ll;A D"jnr/\N^raPG8]˃\Am(Hx9e9pti$”3jUjccv<Ԅm IL^="Gbi}jؿ:xEلMD "Қ `'hjALDXau!Ut7XQ;[ =T@v#]&j 4{pퟭՏYC])^"F.:0VJO3 j#q]DTTxh\| &裏f8c{fÆ L<YG}L6#<2Cqرc^J  A]e޷ Q3**Iș_7p\-!'ʽޛqlɒ%d:wvvr-,˘˕{ |35Gk=5uv_`5.$-& F8n`jyLSd:OfrTeZdDy`7 <aU&ɨ-\J*[) J 꼷rv&WLu*ERsLO@r!Ve'%x, 50aDvF . )oUp.ǃܮCjEH.$8 Cj[;ܟ%S-Ðe^ۮa(a}X'}bmֲ"iz`+G ŰrSn zpu/Jy }\wՅd_&=nOFzR%+Ǯ/I5p k!5ALدJ:pc i݉!F#\q{C)nOHbSbQ?^VymgRU؝8nsga<9Pロn n)Sd*MƯkN~UJ(a7۶Jz,_*! T(%daʕ $ɷ~ŋ'L4.odʔ)}].U 疠b#T*`*hjj8WUnkLfM)J?Ty/#1_MzfsǪ(.?jCrtKMH՟yeʤoNO/g-UY $+y%$ k+UT45.z܍qMAZ?Cpv&4e|S_]LmWjީͼfuMqCMbɜjP__Q߅bUhI{eD5uT'ELs,eJU>~qi\͗Xmhha,yKK 'xbs.\G'x"ӦM32nfnjj/R~_UJ(~=[6lXĪslwDI&1qDq7'`."4M㮻b齦ՅǤ#hQ9b5o`whTE9@ FyGNȎ1Dž- |m'2hU[J@,L˃b|cCʫQͭADOV@&v]Vu~V`,*+D{oe^ Zl .k61Y!{+va*hؑH = ( /`+mg?Sjq%MAKK(YEcoiU{Ro[A $ c&n"jy]8k*}Y#iedU&f(* kn{D- ☟m6a7|5lYj4[;ZڐJD=EԐF6=yr[tIp0L4nF7j`v"4īXc`kLwٴx6.w" J4 1 1ZHfC `v79ض~3Ј.BVwt9դcK nm TTz4N5290 =e;:4߄.]M[u@ĭo"a?,8C)o 't<wqh3gruei&^|~3o<:ꨜ͘1?QFQ^^\(J؇vqr[0zhz衬_Msα" 63g&_W\{94t]prD*2o(tʱe\SqJx&ԞŐ <.Eim1/j5 =EDSدMN:yʙf֮$Օc>Cl[k-$35@8jjMDH&jo $`[=Էj 9^fs"ViS,O*/UF4ź@+c [[x` OhE5\} *B2&e"tjA9;>'[P'Rۂ %y2*\OE,|nfM(M%FsP2-AԎP 葀}m"B1FM":^än|ҡ $Hl TDhLPHxU⪒q ]aX(#ہE$mk`(1JPHmARf4@gnUM4%%4B#n몄gRMֵTicTxPl"_cA܇V-|u[Fh2/.V='25^ud˴ wEBXB7H,yWJu z"Mo%xVh]7uC+ѲH !?k hHvպpHƴY>n]z|)Nj:Hj{2 ?Nà2C[ [BHb2M Du]׉R #w8N0MdCtYNXu.bWX2øs=R&!& G'2Ԥ(ۋmώ`t$ϧVt6(v+YEF" ۓմ!HKK &Lr1rHMƍ9s&[l'DQFͭʕW^IGG 3PB %ϢDSr}q 7dI`KuC8+ou 0^jͷF,l1QX (f7B4/0k2.d,#uB +dtANELV_"̠xh[Rմ=y/A#xxw9v[p <T^f HPE*D7~<R%^)[((r]4A :e:ݎ­tu 0 *#HE]oTVx.$%$ZtJ-CWtNny.AA3Q>X*Kp=0ǥRY \㐫aj,*1;N'e⊰9I&vtE8~&1˟8a n)Kuժ0!en$ҕł(s= KYǛx뭷r^3|pfϞkSNeԩYkjjOs^+PB %Pc73Z%H$,Z.z(ꫯ.(e˖`bO=_|19??/2`m jv$z_9A-jM(L# …SKqIB#א: ]'ړ7WrQBG볽n 0IMfc,EĪb(w]Wy]:U]$YئL:1KB($o oCn¥9p0`+^qE.ե4M=}csΌe.!#i^{=׏.J?7sP/<={ۦ>bFe/W[}T3&Mf%/R R) Pi B NxWMTh GiPRƬLfLUd=TT@+ 2p5mRjLઔj, JS,fsH-j6X ?A ^RECI-$Y20<|{٠D%-cg" IqM.51TGiL#9D! i HBkzΦM3"=T9a3v{K,QBƬҝM +420b!R WI>a(x@ʌygL:0]ظsu!-Dx )gia+4Au{u=D-Zw}H^\Zc%,[ ;8ʑ@,I;cwY&~i2r,iK$Wg)a2v=n3$w@ej՛~9͉{k~=}K'ҚJ(q@Q*Y|$Î뷎=6 $P: AYX8s lm/Y? AWC}ȀmpA=4qMyF@ IDATHz^w3s{6;\%jB%SctN8aמnZ`į޽''h5Θ8"ReW[Dy,hFhǂU}(*u~ :մ.ܴMGh|h=ՉMvxڬ L٤qm> (a, )fB G[ĩ]iD&|5suZ604N(IZu7>N=p)iSNֈb#'*> \)Jٻ;ɩ}nq|䀶m)s9Ev7+<| I>Q,4Grcץ:o6o6o6om\k_Bzzzx:;p쨣K//})'x"sv{.;wNcڵ|C =ɯ`F֚^5R}nZhV&V6@ ~|ˏWEʌO)Zho=i̒|q 9k"D:,o{SLݼb,F+I6vRsTm`)nܴuNxT\!s~N3A!5dr$fԓjW5L( Ff`ӣMm,Q4/"hV" 13fUŴiNM{ul(^ǣd{]0 3ӹ3(VSMl[y4<}f.gF,fhH\ܥn9 nE`mE\'_d@X.pI,16H ~YOONd9XmT'QO?ΒF𺍣 E-~BLf<9tJ3{rўǓNҷBݷyuN$s6Fuh,3쬣i/y ֤C|䱫L)K\WIk R%Il\*p5a:SkZ~9;%d`oG-f< A9TMʴ~˩C@Ihk,չ6]U]oixn=Vm*a*\'M5V>SʂjJSF*Zk?ۇ%:\V44mlŰr6zü¸o" @llmLocE_A=4DwՀG79ⴓHh$vOrɥU698`E$JiH!hgRV|G fcшv139xy#PplH1K{m'H"c%) yz r8i_LMKXndjOv\s$ h!8ٷ .yWs\-~ KXYS_rn}?;I|4ؖ֫*️(fv2Y9ݢ,%ՙA"IT|o~);9*A@-'hK(Vkq{g,9 ,Ȃ"cl&8V·LS.P5;x9nxʋFV:׽ O5 O\E~UA-lf[ɕZOfݽ2ܗK6sm8A@'!ArE`H>?| \$a\ 8/łkpidm_Q'܎Y#INauJ㈾eP&Mi2ZAO\Zpq t)[1I*̜_G8mr.A=0H9|c`<\}hh&ZQx4߰m(5joE4i; | y nѺf+WP8#̹:άۭPbh3]S03J@@aʱTs-ZsS?g _u$ k)˃;V/4=ᬭ*0Wbjm9ٲ@_/b=DH/b)ք%;Dj5x2!AZ? J"lvpXCꂫo`wڶ-K+ƉGF\ Yggû'[[輆aDm晫6o6o6o_6\lڵ\}}ݝc6lO~mZRĺDjjaL/L[f=]P֚^AIcېJ[ن1F7,he%JGo{ Mnw.]kP0z$'؟,,$uYb>L?իx !TCk;F$t~&mX$8sZix`Ql*Q@5: F  1i lba4HP͌em=Bp$ Jc?8ſ|;xG 6rIlޕZ䎐C+KyS#a,dbdd;u;]E> m2Wg:Z8#Y-Hm WzO廾Ue:2&p-~pUAw\*P{i֨?;9 vf ҇h6N`<׋7H6Gر^"TsͼMxxb[[fs͜ax"?6LF&|4#o `)# ԧ:Es]s| 86F+@A!IzFO5U\+eF.F Ql(q( =խ.jP!t-^;sUK\XuDG2V[‰=;E ˀ{SM;ձ&O@9hNѴS yx$Ҍzҕ\{$~ɭe h*c|l \ S8c zOgxb#בt_$¦I8R#bIuPy&2c1h)eՆZGX׻R+>GB)r BȾ ɒ pz QJܯ?`< + ]L,CuG4ڟ"Y<_t݃+9kj<-GfKs'%vNVոJ" $,l{R V%: j0K3&Vi.dז$R? )'6X簶LS3TiT7% ND>>0H`^*QikHd5CipIwmC|^M2:+zܣw]0e=tb2C Yk:-WփkiRfO=a4Zeg9%?/u1]z<PQ>@6>W`C0HW8 ,N5q%,5Ͼ'ػa4D(h4?hj'#E-_@;_kJϲαjHbd2O &!h{.(hC8Q?xaYiAypummy;>/}]c_r︅)ҵp$G|{0s^S'xayv`B%-tc܄br((e ΝæF ^Зi|b:cel6tƀ:ҌA+`}FkXE"4jTȃp?6r1G+iɘU%0$ YR@Ie#BSv:)9tޛ4QdX+d2OɃQQo""&5 bp| h!Y:\9ILL4.m<3!ڳbZ :4s\ͭfCW[;u.0l%5#Ƭy4/5ũCMkﯳ2پ- Cͷ9h ,CBSe[F&9 _aV*o OYlɶ$@$b`V=}ly;cROL;Wjb[:Y;g*e'dAQH.CebYFuPP!Y(Nw9⒴s^]bEkjN$Ґm=xRB/\@:%TUAz欬]:.fy;%I c{&fZ`bq*#\Re|jOosE<0Ζ~ 0]7y|Og># *s8JkIr\f*Q_̘n7>HQaQ8ds3K߳^QrIA`/'X27ieofn&dQ+,C՝ I[r;!9bێ$6u\9b,8'4cCikvʟ=Z)dsim~9ec\"]&ZCW>KhM}S';r?3MEob T%gm?{-Q$q<'mv'ey.3[Juήpi;C4O<:^@uT!oݼNm[=GQbZyh]gL+4o6o6o6om\쮻裏\菸  TXRw4Ri?lĺg "(~1˟)P },e:clímVnw^ɉcFӬ鏹Ҧ'c&7hY谎## JZH/ 2>GNBBjvRlaQh*'nv]e1I, _L]mhٔ(Ҙ%2|Ҫ7lQJYXp>c0td킫"4lXY"#SV+])BV'peͽ Q7U *G|d%Zaۂ(C h+c]m 0gd,[%(tKq휷m=seqnmG_;yw򅋷s3s&xbd0-s_g: q6~C_ b<_`Fnqdo0 />vK\7O<|~ѩp0{.."EҶ뀫v,0tqݻsk2li6谓Z`Gs5-JI:y~ xě}0o=oF% Sg qBa]0b]y9\&Rw]Mmm̑K%kIEٽNϒ"pSbhŚD9MR;0T=aNyR씑 hg'qSO3G)HjQVir^KZ *J8J#-T:sacy+]@H0g3+Hzڔg0Ws Jf%L%d-Il0ٽqʹa3,2N?aѼe2,jo.jښDYdH6`usSIM4+U~%葌yԊ}ABXJ#2VAQcd" 3Y;2%U6 &l;v̉H6鑟[?1kQqolnǰH(iDsQJ3lThM3L=:n.™5n]ϋ/?= &ac-9 ~ R[Itž>3JPOBKHR;ZyMe#ı. \D´٤Oӏ#ĂN=9f\:ԩeIPnt3OOyKxGi4clmُeP"E/Ih11yyy W;蠃m!l߾X߀5cd6!'ϙ mo6:^9tŊѺ {@YHdeϟaT„6hPģWuCzls*y˥%rX',q /{spa|1JA`aY ЗCD9f6?;m4Q\mK)] ڸYGJWOy/t3^JfSg+ʆbme=Tu4WSlU"Y L`:8R@99 :< [AB}I (z?- >ԀZw3"p _zW[A?kB Hw`k-? צઽ ݭmі16YY-B>gX[Œ2(ԙ5-EFBRa@< W^c bs:{KJIJ_[k'chvq$Z6ڪ`uX3g->6<̄- u:ykƄ !P%4e5Ab8N (\A)kN&0quU+9cb\bake7*ZYt681x7cxZKO(I=uTkV/& IDAT7tVFlX"!aY,[^Mmpi߅\7ޛ'삫:۬J<\;}o`02Ի2$&AsՕHdJ \j!;ɵo ^}m\$Mzl[АAm7,6%U !ZL .fZenZrby֢L& V&fi>?s5>>|,V"rǶp2ш)ٱ' JYrQZnMC$Iq9kT>}-LxxZlI"Zv⡭6٪q$Ylw]ʘj$ǁT9,K3\yr') Xv^7*n .}~[Ŷ3j(:Tuܖ eB.K2':Z3c K'B{~HT(E܏*|Wݹ`aKibJ D)sx%0ٻflnm W,r-emϢDD?۹Y1ǥ8,EV+ GDj*m!C%!\l^TI$ !H( `+kB׌KWZ(3o AS׺Q:~+n9V}`k j}q2YFomX .If]sF~«_&?f>7`{.wVx[ZM*89[k}F2IL!9'ɔ\ *,5kAPV'U%BaqG-{|\mPgAh>U$ElߋDh+fhl(,b`,$Ҝ`*46~:}]r*=><8 ޴۪3-6[uR%!m-tkUË5,4'[89C3+PtThd%(fvxj"#AE)rHK!"@(3jp$3Yy@g V6}(! Ib[u#+iVO[X2p`FJjeac>qp=m Kpi\YզO󅉛;Ъכa3#s deD 3ܘ{\w'g\6}6]M{7~q=NBcʒèc@V`MG-.@ 'X+|e()GP0Wu0\u* 2 M%襘3^O*je$TӚDԄ9qok;L2{:KYUsDXL M3tLX3S3r62t©;褭*X243 jˉJ?% SKi(1ŕTBvmIŨ^~Y%pth䎇 .xٕE8z4d4D ˝=1Yyor.N ]eՎ#陱q[3D ܶpU(pkb[USMın-C#H[]ǔ]0ϔ˘I.vsft?xSU=Q@/+Blc2@<,#˓EPN,^k5c#|K9^6F qb;ZU֚'&/1x.AF [ *fQES 멳rWYdIY9-:4s6(%^bxEfb.,n"ⶾej_yLϚ÷zI- +D%{l"\Hp=[T6(#re@8 cYl!:hє!e;o[5VP]s$Pieol+4t;ntb['n3V_rZzcxzv^πSa_ty~iȗa9}p~Yk8b&AN, rT8p=cuHy.[>u9Wrs\ܹOEl{ͭ='Sle6KsO8extHkhDۑP}E FE?,QLآ RW$ =$#OŹnUۡܒO8xKʜ ӆ k580THƂc ]Ըkl_⣦vqo+V7[n6>c|=UP Ԋݹ2NP8"ɀQYVE1sh@H7F}!9ur 'ule꓍)/:JB'k!Xعtߕ0\塇.#7~&KYK0,n nHM "J%\&\Z0tq7/NRBC{B2%e/ޯyԟWtm|bi!(FqGrIVmz&]@92IlԶѳU5(?"-19&|[J|Qݝ1v!մ%omvd$IrQwƉ).tmV"p2G/lLE,C=/9pl@QLդHqErT)U(%Yh [=e"G|{põ0%>0as2TX@^Ztu-aΣ6oLߨ:O?uk~%xⱓ>ɥG@I1~R ?~c#}:H"d0(2 NB䰲"[nF[F-y%ZRshGuV8yг6T1n2;v>̷Ez?8maBGu;4B: m&>KY}sDi&6noxr^'_˶YD$nup>OBZ@ƈHakh8+Sb*l}T-g1WKX> 5qA?y@VKQ/%;-:Q='i4CWsΗ#h}8cR~Rco$o'.suITtiX!ިC%#ʘaB15Y{)H5gmp4ӃIM+4蕰UA',Hv2W1T\V}tN;H$[K@腝c㫈Ϗ2v$ؓJ?dN>d=+>iz9]}'sdns㳛n`$g1 Di$!(sUm H=B]B4b|˞8xTGrXZ4>L94^JcGiχ_&9od>شN?g;GYގsѕJ#Wȿ"',=Gnzs 9jhȻvWq8ZkDmؼRlٕ{Υo҆OxEH~”; o<= iByR>\-t4&a3BIk _wLnV.+8y MERݿ(,(fI%w> kn*+:eQM_cr 16wp"NYfA"'7afV qS9s}d7+(l1;9^b}la9"WڿU\}GyG?Q>Os饗rWc^ }F.67XG/w/}+Ǜx_~ϼ@: QZV?^oRɽp}f3 ¿޾HPXtoNoo=nsy'|yeKęk塱<[{_r>ëҽ?u>x,D m?^Ǟ㉱9m>~6*C_| &>^Wb}6+߲o<sDtЭ` Hov3M?xz }lw#MuE@M5~a\|_uGyDj,ah 6 .BHZQboȏjdC 4Q@6!t@CmV!֔وT'T8mTA?NݹZNtw;©")|iM,sZTwBXB0옶hC*pS3?9>k!V=qÇ{VwKlV@Mnj1gY.l%I0tjCQY^Z6T(\Kqp!̧ ;[ʸlQC\'m[}Fa8M9ߟu.wY꥖kfCk:r¤TIڈ6Ji 3ٗV;N)7Ԧ5UV$3PֲG t8C͢:[ԟmI8h!mJFPVamfqtu%B1]^K k44Jc`MTB>od !j"q@18kW1cϽP4ȱ4Qo(**B4}h'{{%& 7tMM__pW"ߌO0R"gV5'ݱZ#K@)Ǝ`T-f,D&1؂7,o @hžYm^I;U*7ٕW,ܬ/o8CA/f Cz?jt-!nTu4`^߻4$cH$uC>Mɺ#0 q&B:BcgHBݴ_]DC- jC rwX sӦeT9]EQDs_0ǔ(fXa#[ b}aiHaX)nc3%B<!c#Ck=V91tP:w̌3Xb999,]0oq8,ZQy}222xxgywdΜ9]߿^HLxh&3юϭɒrU ʻ^fqh\ѧ \\#~<cI3s^>|h?nOxzKO|,tj!=N.:9Q#(uUg0iP,ϴ7nܿV[ g-zAX5^nO/-?bɣ,O+_v\}Чl-6uZ 0 Au @cc#~Mr-6ƍ1gI8эz--b5UNɣ瓠>{K>Zkn . 1J+0u`uri%%5a),,ٛ#"8s,lwB ~7U IDATF%͗5-jEc8DLƍ+@W?|62h(~=QGD"~fQB6:BTE)@#j} ٴ&Yv$-.~IFeZHEVf橔xc󪓈S W ry ž-VQVztIe}FtS/afr*ȎBAtgzWʚL~M\]x,vOQ8PgZ_ ^~8 ݼ,pP[_ڶ'; 榒v83c)V-mnF&op>*wk *@<Ԁޢ̈́sBeq@SZ̫8d`Pg'v3 *nY帟7gaG9_WgDLBͼp:ub2&}X<+bJ+*V˼r߈_kUrYFY7MZhFmo-T4f!wR ETy*~MLnCr^ߴ=q4} dbl(6c'X'_ٰg1pҟ+kՙfn&#Ȳc&ψ2 'tLӌa~ /;>'`j}ߠ38=Ŝ_#7?!Vjv6-,j4'|vpmeeNRҺ ZCPPk_@6V$^RIJ.bm.DBh! Xjt5hd_߿^s{Pѩ-ԩq:܇qet`~jRTz2?u?im=z0M ``'7~HnM~K9B̭_*l{rvSc|]%0Uf~N\MoG]r BeOvRnltίHܜ'0 0"g] G/M([!R 12Kpb,Oa 1I f]%#өwB[ć^L@,[_]JI !7Jbc?<ʗN&'t%&*]3 y)ma~_~GqM9qe{(7L(_Uc=ƚ5kE'l7n ,'@QNN 3fOHOp0# 9A>zzugcHdO%{0WRQc@ `|\58Wkֲx׽<$P8ljùS@LL%f o'q`2{׮b;N xkEȕ[t=gfg͏r)fm/o $0tow>u͜d%SPA֩ir4ظq#&MBL'q:\vePϩʶ-[ 㹪"dqj՚ԺE;#:g[n 0{b ֕S󔚅`3˂'ާ$=FDqnwr[Ѫrv92iҔ쥠҆LLkB%xq-<ϲ1[(ΦWo&|UM]GoMRh4cBiaĊJ6rXč:EJ|1f"hcM uT.%vEɨF4 6iG$_)n`0Mk?v<9-8mޭ݄STh2 '60YE<ᶼơP9ͥMw"OzKgO1|7x_U!%ک}8 : 6#5tݺM-eLhى j%', HaHMh] l4'D3e SD];ߗ}9ܿx# V4gڕSPi*ʯ`uxz$:vNwldR .5 ɘ,rC"2+IġO,i791 ؖS9 K02"_dJϐ #6g^thhh`&stJ`C0CęTϡf\Rdcݨ([``K/NڅTon{`^#\{4a&_&y<|t Y۴2VnxJiM߾3R.A°5a '#a'U= %zr|Gtz]2>.:g3brK1L~NJAtj8ׂ%ml%\N/'P ͫgp.4JeuMͤY4+[@&?h2h磬ȆIXEDؽw%"'c@qk;%I5,_ Yu_**`N\8oxG7:hs'SsG0hb$Zl1)hj0\;jr/{/oG|'uOd㑅l[ B פN/!ʛ+-u8ĬOt,9օ+aN¿N"9#홮^~}9Ĩ.? f?q'O?'oݗnq~G]q竼USxBlܷ2 rQ\ZoB&rlG:8[D\L٤ѧoon;bU$fǍF),ؼ9P¾yI`kVsgs}CQ qȼOJD .U8cX d^k5[IJ9zC [kazs!.`Pc fLjsWZE\-߭@o;sc &ͨwH$:WLJ$?/ ]$'PWtǑF\Lw \n$Sp 7~%Vm\o|Y}Sb0|՟J%c6~~ǎ;F@88/czz:%K0}tϟ7̝wyҾa0o<&LpN4\xPX⣚k0s`<]KYHD&@y9!L?iR'SO$ިS Af?nOR+y8Hk{dZ?.vCLX.o(lǽU2[=e,+ sAP8{%Ԧx|G1хa1x ~Q }8'& lf_Ȓ{شښ~1CYXEu^C7ON: M` !)yJ\xG҃L{6!HpYDrXm*a(Ԉìᐑ_,pIh@hϣBkhmGn28:D* v&{(b좌]ƥ(a;vvFyJGNĦJId6SmazGHA{w6Uk!5 n=kǠDѪK*瓓qS +OcWmf/X'1NabYu jeM{UF6Ld3 Dy+;wwA1Pcn RGO;^Ln9LiP_.մ':)5 *+lD[1>*on56*YN<ȢP#:ǦbV/: Eyǭh`u "(֭E$%{?P"cW/t?NZi*~&b@ՙ]?1:.rM&:]{5swBG])h8΂sxoyXKFZ#rRKy6K54!àB)|v9OHC&MN?e?ԝ&Bfɡ0ӏzzƝLJ ;­Qx~'x˨(ex<㳙]G|w} &/D'd9:'ϧҕXRVg%G̵RQXBLpQc׋]{O1k7Dt}.uIp^lgruX>q9o2`}- ?.'{H&Ee rl_(Mg]Ho{*[lpU;i'/8Q\2lneݸ8+k˞ϜUH d0g㓳t Q۪9ny*Jz4 =辌J+"0>m$!X7Kd%vyrU2 |;llg{Y{y #}Ogθ{^oE LՌr o!ړ9q!*u=`U= -kr}D[[s]w?0Շx#TKCgHh;ouO_t/^/[!'t JX)|{N@$挩TfWb-L~DFl\t޾a?^z-|TØ o;`6Q]禿 n1i~mkfESO8 "VM?f̙QP"V`xb?RU9jU$Z[Ǵx{E'3cpTt>ەwj(؏xPƾ2QB>S𔴟̥UiNS?|.;ڞ$>v$&,pthC31u=A'K_.&&eeU_F~:D8'^H('\Wcyډ ʙܣihx$$D6ŚBSDp(`WDзؔ HȰ$qN$$ ߴ;w/I>P\RbfLZ&ʒCK[G3/&Zr ]"q(h#Ha˳2Mt aĀNQ j&F\+EE) .Kvު$Q@<$%jˎrVG Q}DOWATww*;sj!^Y$iXk:Ajzə|9*pQ3hl z \@yFr?Zi2S 仺]~9`{fT@y }rB6UILSTROa33oAs&1 I7A |b:S%*oXg:@LKnjٕ^#\&`h5Gya ME&IIY Yw΂3؛ґv{e0/ FQWwyQ/&&9q7}7~Y7pn,GhYNJ6ȴSlTVk%o|{ _佪 T`"-ޑ ?/{=qȶ1~Xq>kV,fC_{MtAᡣ'a5?w$,y{ Ufsf\Fke1aK A12dDpPCܩ S> eTg}q{r=;:yAxN1lrϢ->aGHn?Gb?_5 SPBVOIO8 |smQB]SS\]k%x6zۏKT 鉝T(,FGu7郘mIN D'vҤ2]q$ɘI2YG+;+ {s'dfNڐNl_o_N.yYg/G28$n$]\ubuv]ٮnKgCST50])u"ՉMukP{2e L~ش6m8'B?*ss;QiQM)2 RG\D^A$!NA1S֕#GQ4)D\OfRÚ5ܣvN1\ptdȺ'Qg0M_GXڌL, ; +]JG{stи }:Oנ˅_pA\gp(T w :o:`dػo5a5ȇu[eoT?0 6:y#ZEUhlκK w?]e[9^Y7ӕ'݃u6&&"Ip!t5Ѧҿ']=E劉= V 5KQܗt6]Fo̰ + IDAT ! 悌0]?)tN$%8)e dvHdF䒄M7 ]"IAnz$v4Y (rJpnZWzv9vc9j[pc)9\~ ԖI}sk72 !G^MIkRf(ft/бy4ɩ.w'vgesҹ~qÏr,%[Z5G{~Y}urc!MjE4Q`),Υtōɼ:7RXXZNE9Ǹu.lF9QPfxP`Z+k7It)*lⳌټzN 9;JqRٽrh;A<|>G<3D޽"kLyp;m=cxmhq@ؠ* iL"D0L6g'0ށ"TYdl>-9?m 7Nr6ls{]:ЮWoW,9$]o)X3IB֔iX6;D+:A"rOb! ߊi?Kx^>3f͚ży馛Mw˝Ic(VDrs3S6SˬK؞!r p"r+O;"å2BFnMT=` hRNAus{f.A=c2W^mm[c@*B:oY&'S] p4 نӴxM-Pi3i$'u&ndTE NƍU4ɒ-> l`Ďo0I8%x32uF2:={;w<آXq}hcwCYݏCQ#fb)dME It}4o^E {B sm완S),l]”B؄ ];;L'](!{{1m&po8ls%nAjSe֍ס:eTYD lGTY4 vx 5!"E Vf3( -|G,'lɴh@B(DdHKґbnlD p.=M(4p~C!06g:lRgº!7x&+b"23| n^(oW~ _"3D^mRS)J"`,šeu`f"&dѹuM?gsʨ&O]s,|+/vq bIC&DXTE7 KR'źM]Gd6a6c;H8B28ECFc/$57U y\^բpcYq+V.3rhq@P~J <oէKL^l~tIe%Dn9gm$etcXJ9jrE$?)6 pcqlE]CPx iBV2UmϡԌJžzvk<nw&Hgֺ$f\Dl[]H% `dx$J0e}P-BUdBD [@&M^~\']i$8m6Co(D*NRQ'xt]<ٸ@vUnlaX*EȽHr8ѿ~p4Fjړ3yֱ*bƆ aX~%FtÔ"yt ,!fqvq>aBTX2MwnYTDG!xn}I# mK(n¥DwfG9[ F'|rkp7SLbĈ"LKʀ`ЧnI1inL4a%1%J5, q!5 "uf& .2;wgrU0Pv<^r!8mk8Z3H!)?)tCAG~d[׭{&O`lL7m:( 9֢lHz=#imfRFud)ˠzֵ)[MVgQ C)ԎX1v(+}H0 '*l}×_oh aOtFIJP!w0bϠH@;) hC=$s6<2"MUt)6gX)06fS-ȺӬFsVQg}+*5Ȋ!$X ?)15w~)Cٖ{a9$wtD@{  Rtd3HXa U !òu;TZ1-GDnOjN D03ɖrU[@ǺA =_F0D>ҍMrkQo,oڟ;ݯgёRmȦ)vU(^=z AePLhS?# "(%pE{dLPڪ }&qɩ̛ͻ3ak%/f^-Lq6re La 7'!ԌNF5["bHV L7I4W]2bT[u3I"N[4NPK@3ΰomTGXGO".AMdoMwߓK=W3BDMn}o9Dx_b[=\<6hj&3! [#j]@n%>'- *&BHnhi飰$` ' 3n[=ʛw CN|t@ʃ%f&cs :;DIQ @+ umHpC$McN4BFMt3rojO"O{Y~ d#ҕ" 'DC>=~ ]IgIpV2o9wT `*"lE((O I8@;$uuKH[V%H{e;;v,E46kwl~{8ˮ֞>󩹪9ݝNw:yɄhdpE_Gp""(pA!4I'ݝtwzθȍr|>:g״>YEpĖ鴘mbRz/M֛\L8 '>M}ɇP[4 ~ ˡlvG(憘[<]_7_FN{bvf:ύ87mN{V7Y8ׂG7ɭk|zxmiܾ~%f  vCYHwɰH6s(;E˒4Κd xsWo!2H aےTH۴)jy:u.qHy,xg+SIƴm[⩌R% Eh3R) X\vGs _1fy6u3E*<8;>v/b['GN%7ǛG O|dEs8ϱ\CH,bR\WvRAn!uY*iL&\v=b_R\} TM̸@BH>W%HNˣIoyiaמK6 uG7kHcr B\A5\kʼ{_ 9tO4h+W<l4[VCvM.h.3Ԛo1<Y y>_un:y~˃AZXZtۤdd0v=hiR r̽+(6j'g9xSG?D&ylog n϶!0eRmn\+aZ %Y*7nt1q!}g<(6íC+p9JiIR;B:PwN[aQp- ĖDk۹&Fr^{-n<YOD9)nhHHclݲ<&h!u!s&Y`.K,1ׯKv=IV-)='BDUJcD^RD~?b/C0bPRtB8w(lͿ>va X<2 "^ߥA.>߫?\|w9^1 XŬZӧO󖷼{w׼5Mo~CFBM*Kpb=Fce2pzOPri<29׃+Ҵlyd""ы'"L`96wHٲ8լqrA(2 9 յ Ȭ&ͦG.: BbC9jțI3Z Eg=s,aâNW]ظup& RW AhcmB7I9q7}$vFahR) r $RR|*/+*.XS"zJ\}mMnM )e{KU%#R_s\W!USFf)2fMѶ$ʐV [h8Sb)p*ՖSEhl˘ؒdB!\D֋h:WY&Oh9Ɠ9QDg%'2onTm7%ҡ /ўiȾ ۈ0(W-GJީ %fCb(H,?^o׼[[oz$N!Gۚ;l_χWBT6/._ksK%/C.ٳ[iKEfs E곩~C;^{-^VkHY'yk ~ V_]5[.EƥK`q"lW&_-Mh )c PJi2-:j=3r!=Lىca8gˏLJӁ~%Ң`1X}BHxiԳ#"$DM[ɽva!|nC(s4R4qCy'-= ;~+żn%IБJs4c7OB#ߡ\3û([\VĶ&šGFG؆I&4Ye5R+" 6-|Dʗ2ztb}p8ImUZ[$\?\]mݼQ^>3"7Dp[E3ӉpU nuNbW?meu/`ss-Ɔ%ǣRpW2%r|JA[6պ.obk'sf$jrC6:YϚe]u*)GYSN'ﻳ:S;F[1cב>?gyplmX+FE"l12txhĎq# KIͰXla" ʐĢEd\BTrKI,A@qQMȊx{KԳ(W$ "n|EӒ9TBO~gY#fM-kww.lBt7<+ʄ?U)Gi85WmYJHfi 1ɥJYDnhoxG*>2 B(ru?=~1 W8#^WS.q]w-o/~C J%j'M<2][ }!ُ3D:-O7+ڗLp2|"C"P"s@ r^j/bhhI1I]"GҔȄ&F%mڏ N-iQHHv)eGx2JIPK^-eC1ARu}, IDAT:d^(4QyJ7ʹ@ \*kH&"9䜇RrO-I*Ar5Y +o$g]V+{{ds6!~#~v8~Y| "k Iɓ(E${Dž~S86 Nx14\a@&2' r3ELJ llCaFY!EzK  = ;[$L2ISh&z:q3"7DvZ+q|l[96;rj#ĵ0SY̅.NȽ.6n \a#tpd ?=t}jNR2}6K)s9'X_'ܷmm&l;ϔSuA d&gaC̵#<c27LI¶@-lJ݅(d̚?Z(QG4M;JM`خMbU'ԄT4ЂonMn(Zy-M5ɱd|Lp2Ehjied{Hm P]KdavED2 zl_;,xs"{dK\isMLrGC}\"tsmegVUrMru{Z]4g!% D) H@8Ef\b.*Ls?5GIV出e5dvS傋AYXC43J骐j7ԧ.m[c,,t~-.V3}ǐlUGKn5C!s9| K0 cdkh{L$=4w$OȆ;r;\\\Ȅ*&߂E\Q6gmRʳv4Df(ge1M%̬ZF5HEVJ9\$t"7=rʹ]>J[V1!:t$9ʲEvA+E{'tpHev%ES;Wqm`ߋ~b(elgN^5a\fELgLZK0AuҌjaԩBR(MPt(6Jr\!y[,m's.AKE;l4mk9iG :KܣRFΝvl0qq &ʜ=Eծ#=,=؎M@d5QheJ+"F"F/==J=>3I}.>f19eddmgM<#ý:}da*Z^J!v9f iS3{b(kef9FRDvUiZRB[!xre$h'.(FG[՚d&H-!(C`;D3HBB14si}=|^Mf̆C.Y2YB>S`C@;R'kXƛE:Bx >Ƚ TV16ѓKYz١oB)WmCV|Vbw焷_t 6Rm0gRʅt t6&2If YX@ ̥1Mh;x=q mYX|eJx 䪓)^6h"қ "csW>y."(bF7۪cczUdq#z+fk5Ok'=(9: 00`@]aÆ lذ]z &6oށ7jjjE2-g,2r&YE;K?jHb][xm|#2Y9VT'jlWo5dD*SM7r.;w 3㱲VpX,rFP,KG脞oAtYťD%%T%c7c?=D/cgB~D@֫i>p@Ni9V75B/:nm@S 'E)}jVȲn\e`gHeq2M'c6pH;̡m8 OB* %o9 ͸kpHKh9+yV79KUկd >[CvK>J D&re_c6zZH˲v ׂsƸhj#^ju=r?{ >}lKZ1ǥNR,sܱE^0[.BOI^=4{͐>LVi+T+jG@="7vSФ)R!s1\_">yF}9De5J&ȶ/lڶH mΪr{߯Cgj#ruK)v$fqU YVU=uqGӳӬcKlS\׵p;7B酵`Ll-PV%w\[ӛesĐ^wٳܹ2fCB-ۂ)CK6Q7sxQaѺkY yR6u-ng@o<9EǑ5VlIf<.X+Wg8̈́F=Z pz"%h2悌RC`~rզR SR'C爥rc`ʖgּpO! ͼկ m})-sQ tZfM3 Tc5k8³UB88 v'%dZLTin|FZ {N&TFXIiH,)H@X#|u/f\cK,n64&\,K:*T-&?jT%`䤢a6ZvBj+ &Z3BY-DhQC 7d2 mpU;8J(Rd312(D Ix iOw[CKϲZJן`ƀ\gSC(~9vMv0Λ@(|iJ 5 # jg8K8M}/?m9Ĥ^l  Qr)WPSuʲ(= Qw$+:;r,s̙iRQo pd,G6. ,t ` c^:&a'n,H [ f*t՚!Z&ٌjH2R7CMfB`{/U7wi"!W vFj^؞η6"#xdgd*vw_wBi]φMgD!X"B?^.4<|L9&DA{N{ e31Cj\5dh\p:T1C9 j0 ^ "uPr mee) mAD(==vήw?|'CG\CrFi!L"å9潆le_Ǡ_:sv{>]F."ps9Q̎"2mG!!Ԟ쑔5WvLm:"q%O]rմ+g|E~7am!T\-dV is L6W^˜lRC(. Y/Έ-#W{h9c !W k7imus w*8;S!;2%h:iS\zRfæv݋H ~1K Z#wQI\f6ʓ0ҧʹy^9NٱF'W]NIl6 r5ݶ"B/n@wMVݴ~N7Z#:v5 lh6Q|I~9FZ!pEJ!Wx#ogc!aHzؒX(ݥH1! #LTL`<'NIpgX

!qmc;*EɖYJNE=߲AG{-y6y)G%UASYp{O~^a l` gL|+Y߿Y- ̚EݪjKNAD Z-ȝNvYO/%>k?1>ƿ7Aj\BwOkPt0mTڞPɁjF D\dR)w^\j !Dah!OϔU9Kx"j'CG h[E?OcإKE XlT~,eFXp7S?G7}p `˂ЗT$/Y; üP'iz?ה RbẺ6ʹO".KWsݦa , -@xyoBNw$;3,2[B5Dw?Uυ%;o½jOKEd.D8D1^'Rᤊ|vP_O! /Tflxdq- eH@xՒ픶ocm91~1@X[ãX6rkvnZ =[D6`{wln`.T,NN`WVѲHmG]raےT ۄGҵ==Ba7R^_=ՙ{ Gq"7W״CX`|4G~X$\ld`DLM>O/; jQq66qm7a'zsd,ZlESdWش$kv~d=VB!xs{rX͔YI0@Xs9ͦ֒pMɒ3Kt}6 RL5)JIE7zrФNsS3+L3h % "2Z`hly8/LpO`߿% XŮp.y:Tnjˋj '{8ul a =R z!vɭ|Ǟy㲷 ?_=rbܔc>2Iڵ_)6X][ *x1M'dL^;OE|첟b:" V^u2znyqb}GozAe)n _9< .憸~_u fnzҷQ;UON/MuEy-paSz#NjĈ$6!sgr5rz$}"kQ s@9 y`T*1;;ˣ?L3~  0p`@šC;󱱕jH2R|c(t:caM.^%%LQ3TPo ۇ :IݵpYwR14mFp=} :f]V/3&é˫fPf..sLWq}ݜz ߷<5~Tt*LH^#^6^CcM$ӉY47a(@|AG6T@&A9 )DCl 4lb]Jk4q92N1X)KGFCFFuJ5K2JzyCG"c={D7Fǘ >sIB&f XmU͹),ֵZ)]۞5:1c]Ԏ&{֓+WB؉z}什S=c/|)%YBc#=bqΥBhYFouٳ1BuiW|M`Vm~ljZE,!8IFub^sHq%k>?<њ "HCV!BGs{p} yD(ohO ÷Lrض5F U 1Ff4D9n C/?XtS%a ==+Dc@$2U Aa6rRD&6;K/8T|E PAوPw:VZ(vx l3yj\N'?x'5X d@MwOqU{8!/cR1I8Ǚ wCu&-":`Z46Dd+bupq4Gqgw}ɇdt&GM.T+1lʀ]Ϣ33)Kqd5QG筚 |^زuJ/2wGyfcV)xT£7aϏža9TD;p :0ܧ\  Z)*{*!+lv  ׌E;{@ /m"AaS'Edž%"mb5 ,ޥ߳$pѓDr'd2,X  \ 1$*<+? RrU PY/:cGV7%VM]voW xƷΥE8E[ . A KVn |pHɒ2Q2WI "jw<#c/}u7mPÝT `ĩDP&\pԧh4>~ J 0`@{.'ӟaisZ-g1!; kpGz>B#a-}Ta]n N~g a毯D9ժqꝰ%jUu0Ea[ys)?j(s Q>W/!AJFtV+%l\zl@O#Ƕ_|b&El"bGo\U[K(xpŚ37ekPï^ q/nuT R,@1|t?Vm1%58Z]ru06x̖%IԴ9L* IDAT?c4vE/Ư[_h{6`=l9V_D<xcd~7rZ=uՌu:900:,W˗_Q:0" ]s$g΅gk7?=XwR`qdn#p R4Ũ|:_~c;Pyx4ppX\v%P <+7CT,0suO3O|hOᕪ$A=8k x7y9p# .x!7NwC>rV<<G@,A]rU NmK ލxw,KmG=-Q3wy}?'|s'n*>7^y {ZW)P\tЁZ&)]Ѯo wP5 P9E ) xIJ"$5ϦL]E%8>*߂׾ϝ&4YQEM'H >xjO{ۅu]=۠(G>"m ntr$ nMY.xy=7/9ݤ_o$e#V$$lZXIxgV#6ѳQ؛\?HG?b72QMwɯX߸]odS Gm%Oy0|+M۳(5t(@],M:pcKWk|OX:_u8|ֿlg_ʵ\3\|[K+W n m/|QfWJ%Λszd`Ig3GkqO\=%-i9'ؑk8X}V7Ȅ *+`K}⬯-G[pyY%g@=:jk{sv[~~݃pf쳖Nu;\4_sHj=_aY}_+a('cUZ3[[Jǧ>)9zx0 0?toW_}QI lrG`K֭<Ʒb0-bŘ#ЦYKo( x}K]k7Ȅ.jB36C'RP?=Ov @rD qDߢ?ri ZVT0VƵ \J;x3k!(NU N5`u,˛qACzVw6(y4 kܾ.GuW ]߾*,ڞ*Jԛ/c*7]1F˨WV5aT|ʗc6rt=ֱו9G~rsvHj aMd}P$fr-H$ /p1.$ [g+-hv%W\ js$ F6=M+ws T#o6@>8PC{:'0^`c(]6n{eXzk?mMzo\lیgcF o2)y9] Y$Xnˤ4)zHDs~3$-@G'ͻcg[/ -‡W} {SQXëq |km]|/o}J>+uZ/MV#êV^1xLx3PEVM,eqNN6YxlFl84 !ή' j}O~^ҩ6ã/`!|*744bM.a;k3rlϒS)w z(!o~%淊ӯm}[K|;U?NI,I1WDv w,.N=eHβ֪Hw n)W8Ũ}i5"mvx&Iaspe~(U'j-dm]c;#:J`RJ)w׾]`VPB5xwxަE]!ucAӁ~r5ith,#.<$Z9 4~Lg؆c=w G|oICzg-/ M }p,h]:,vɜdj1ԣ -{~կQ(C$ݐ'E GEm|8=ק[Z" O ]O}*<|w"ΰ@ƂfR5l=΄~"Tdd',#R,nX$\i[#.b}b`[B^!ѩLcIMt6oQ~Djrv46MZAGh~fkaYB_&|"i oexSG r 82T\v| GZ~T^NVC..zCA 6/_|F3py@L"zk=zYYZ\l9rמwɳNsVڑE8Hv܉4xҶ?*_xS`ruNZ|(We1mc̢Ze+F6,O<AgDjuʐ*t?J\GbG&|<'&Ո۞s w /NʁG;Yu[,݄Vr 2.ί‹|!JN_xr,Q]xEy^aaIxfx!W$Ӛ#,V% AW_箴{B a?_ILwrIk)\}2*JUCb w-䰹O;ݻN⽟\$ct_}j=}7e)BTDA PbAE!vA, "(T`ʕٙ3g9svzcS]裏2e |ASWECCCCCY%rY%ڧg 1 @LU`u $ROmlG C IP{;kaaS$a`6piwh 1%ɉ,ڍz!#)[ /UL.Iz }RaANTo`IPYZzlhqkBYG$!&ȂTqW'4<1=Waj͈w\XWBݬWUuUukxu8qV--E/ʞN']}9g"zb(v: eWOy"zl}*#)-!Q۬g9STQN밠;}~ǫ՞`BRc}XXjU, HxKZ+6E|.FJHcPU9HxMUc~ƨz|-0 : QU 0DNSO s}\_X"xqA#JF]h7LA@C/FhmvQqx}jQO0Ub=ssqsd;sL4qU `iq?IrK/ո8Fս{rWr .ѣGS\\?C_/L2'o5h8IzQd4 (nBVI¿!<,Z@P=LGl2nTk^[ uA['"Y.#r-: xB4X1RTvb6k嘫+m\*}&$.9\)/,8LzHǘ/{:}3T<8_fT#'2ްzePˬR"o(l7m0$zՀ2AS}ÆHpxl_z'-NkGjK?-1Mze J-zU$goQgZ9s~͗0]ǔnVy}yՏhՑP-t:9%—aoc~+yEAx),J#P*x7T +2TRy+m~[L7@\6$&G:,jQxU(OhM=Wk9"lz]p( $ZЋa}l[IʝHdY/ye^ ʫ /A!en`1(5 gĖ[)oƌCll, p'ҭ[7fϞ]wEVK0a;vl.C?ҡwK$(t*cܳjDV8aE\uN/ҭesy&9%ŠZ‹E#Xt2'_U}]\iasM:LVgu;Ҭ\5aҩU'HwAV s5DWQU/ iV'[ZY5b,Nϯ zO|M^[Y! ujQL;d+ l'ZѤ0,NyЗcm, 6f bGLH$An)VHf7"q&PħxUj, [lEr!(cD1:D}db^H,FdEḁU_M8OhE` /xC )zU) ,qI>OhڦSt 8uaX#Bq,YdO\f}r iB>:a:[ݒ`ݟ'o^HoJ}1w$Ugg#':8UJc"%! ./sGKw!*uBxspDv3/L7S BOx9AKc=>lб|?:&τ"V8\٣XM-UN>1:; D>t$/?Eq־.*$c6ĺ`v eE:GM?>>S&L@˖-ILLd֭lݺcPPP/BVHHHn}h(Q&q>a%_~{&=,cT:_^wtkzB]FF:NxߗK\dD;8죉%?@5vhUY\T  zxWy0Z=A.XnD޷5Y3; 9sG{8$Ɠq<ưӞ8/,$i\{ a F\v Fy$)wQuӫ뱃Ӟ|~.?+ڇs z!xfb9 ϝ jK`ŧF/EQh#./EŒ!iOǞ7chգ7Ćʶ˩Op 6Rݳ'8ྃ 3t|Yx~RKkmJ+f^ʆ_ rN>;oFSg@ gN{Nc3hgk.a\yN?_`L-{r9lZVe.>½vbg_)`IȄbFok|NL9,542=Zer -g IDAT-!Yz.[5ƤG8\ KxyIϝx2{+^-lc5GN(xVfԕ$+;3":,o|j1gQBT=dQ͍黯)1> !̀]Ԃ+J Q{%{*[6jЮe3bF-DZ:krYTB\ % %帱.ܬ-e^-vXJGҐ.މ*^"ѡbw"ZӃTn-Uد Q9dUP6Cxڿ."H>/H K5\ {ypm!. G߯u*=R%txD9y{x&U\Yv}||'v\cygV3Qz/_Byy|+WBG@x &>?[#•{X>~֧_>''|v[_WDdMпc$g)7}—y]Аu`j|ṷ=vxIC) U>~oyx;fMH=NYT%0%|ч|0.5|ɿ(A=X' OAfN^^-g>ƻ+f\>yv7{۫?&#}ye>ϺOa]38}'l:mhqǦMp垬gvoV9Һn18C)r_ǘJrxFy%RUR1Ɔ~Ճb8Sļryh7CMpEt&lm |^~6Zo>.8 !eNs AFY+-J7a }/qU<+>zpes}Һ3seZ.E 9S8f:"8DC*CݖG\7Xpzw`B+Hxnk" i ,4$4?ҼL왛ڀafP@Y^xDž~lߤNn3zޫÔ shPPk⹪YA EWC|eUs5dp!EٓH*,lo %skUkL~8묳<"uCbWUmVԉ1qޥ "FRlQv#| *~d9gwPwiee`b*9யyz5\Y8о{Zs"Ib5/E=>ҼT^U_)܌@p %_L=O?/f''@uD@#==%0SiۯG0pCW5+$I?@QQWp28IC8 yZ4jl!Z@j !փѭ@'.\ jdX hč s>uB^j( Iؽжv R4qU큛(w'Zk3 yq&(룮YZ0"rU1xrϠA #y۴QNdYri?") Sn/> hf9j$quzwyd+R !8_Wka$cWurNLNn)ZP{Z2yOt#-x\ \ @2rQ⪐a2c#B܂'ZMV"RZ> zU.UTE-U~z$I#>Yf!y$cL[5lڴ6 NZZZ#54 EUCV_Kx><_M $};Vql="v;q%{S K~.j/µls"u"\lr%V # 1ĥ %оR)}*[KGݧTkbOpF<0C!c _[R9pk_aD;x"G[*ʟr=c1\yfo疗۱|v'_&C_ f1"hhDfӦM۷1HIL|E/'Q^7$ɡU@UzՆ3ҥޤ(A$Z{ՅpKn.A-62(>/HY/Ǥ$\>w1b:er;w֪Gy? y0ثS^\MOOg 8aÆqWꫯzcjhy*~l.r?-MɃCΘ?ɭp' |]ïk㊶kgF#< O+ 7%lߙ\ |mA1Sn278'vqƲO: US:V|KjV{3ҾM~:g߿&[ bh@רT!.͞_wR&IR펏2ci5P{Z4jq$ZA7y$ovݐ\xnb!*=I u_sk1WR{Ly=W J)נ=҂3|m=1@{HЪ,,=2Î4?0)B8-+vE,Vڦ #1ajPs%&m];+aSy@)cI 1s2!JoW|M3oR$mOxQ5tˡw+|E,sq6<: z؂ٕxD6Va5wLKൊ)o`1 n wP+ :γBL2FL̜]ޯ:o٘}YOdZЕ0fh6D?Wq q7W7Hu7_@}Ca :Aȅ434qUQyytzx z͂ xWf+nY_~>St~Y/ǑS^7$Ó5:dfRҎ\,ZјZ4щH}RC߲K iF/Ѣak.(P5NhmrʃV ]s5fUX.`H(fݠCE5BW#I`zv״DC!ͺЁˍKPLIOJb3":S.6I/U$ ủfذ_~O&D?X(CtPb sfV8-Ȣ~j jIh.*涤cz=W~!P< '*uW~XxVsyj\,ex{;?%dew1mڴe$O3iY _CC3c. .3Gpei -B0Y9,iiøz0 ^O5on,8瞥Q@+^evkX/}_{+&!ڹSC]uK:W]a4qUQپ};W&!!mڵ,Z.M6r!?SdqQ)5O tԠ AY=W@a** RxF{37"+O"/!j> 6kCo] 2^r_-rUɨ ^j`{UW2Xr^Z:kg"ElrN:MXi4Z3oB&vErgx=~+sU淈d#\Uom\  sբzn"aV[}ر1?`'$SN|r/l6Y2~OoePG%߲gPYa2CclQ3}.˟ߺ3cR*svnۍ14j&j4*Vz)nFfΜ7̎;ܹs'~!qv##~YsnpFG9K̐_4bTˍ5"c=z.7& ZDŽ>PSb y{]DD\=Єv$r"wLc!(5E55 SQ㓆oL:/P\U'iS&,I\=V=Wb= :"vXpa zbj=+Ty~s5,3Iخ~Ue6  n7$ r%M'*MpImSNf{S\\|y߼}m۶5>Kg(7a00ʹmElLvܸ.nkF՟(|2tAՈzp[H%4.ƄeZ1LPl&W<}Q$#ioT9T n@#_LZm6 }e֛NɰZPxKضpDC&CоJ`!xڹGuFn/$~Jn ^Y1.\9O[*Z*6S28(6e%Aϐ Pᬢ\C(|<|I_Xv!O!yUZևNp{]XQm2?{~y!{?9{$ը4Vv\H+8ϿO`Q9څf]>GI۷vHmcp>c(Hr]B6\g_0_uG vqX7(wVh$hSݲ2츲e܎NN<ϐ@3dϞN@;$ \-,AeXs6.NL/t`GCG|No&!Y z}mUPP155իWtRo%ISoKJJ_9ꪡlUFcTUUCii)K.'gϞihhhhhhhF2%}d7#/AwD BA9R @)RM^e3 + ՆmH{!eaFy?e$Lh^ԵhjNLz4uMdmHl}1';5 jF4B\&83FL>¢} #L$ L3鑌:#ǃ )%d$жJ_J/|~Fj'*t}NC+,WqUf.9avqH?ye0+ҷtMk2["ǔԋA8 W r!By{^Ἔ>U6jhhԉ)=1M]89ZFOCCM]ŽvɡKb I]ͨ'hnr( cHCCCCCCAW5=-.$8ocN>Y߱?9vhٲv$'٦hh>7n6u%#{7#4Y4{YWy5e~|8njhhhhhhhhhhhhhhhhhhhM\8vqnaٓx`S8G Ѯǹ'O rT)#r:"=j죅8vеc%3quhXG:.{Ne{6P Ъ'酣ٸٻl.Ϥ>=t|%X4%L'Cp"%yc }@\8@DhZ4G!t7V u6y= u+{_h0 g p_.q]za f߿N⻞ƵW/<Qj`e0oth)wQuӫ뱃Ӟ|~.?+ڇs z!xfb9 ϝ fK`ŧF/5u8OIR$M[X8m1{l_pmҶ"zPBٶs9 #yۆZjx!{w0x[µ #ô)qy)N'&$b{f_7^䩳Z yH<̰ߟ mK*w%Zs2ٴ˖]NO}O?Ģ~%Rܑ Ōֆ3|!4=tjlq< [neΝM] ½nroW+gO_Dr>C>|xyKnXN^^-g>ƻ+f\J)ŵe-.`ѻǹ}b7,,~ַbqFr]%XvYmdƢ|L˗P Јso[Gg+xta^^?܀{+XG|cK̽zͷ,eO2+CkSV87Yc'ɶ$0[̠k_ 3`}4*KU*m7[3jt=޳{{rh6>-tf^1?6wجF8W/ܸ}}>aWv;UfɟɈ#HKKcܹM]csӽ{wX`=zK.OM\c z)e˖MFF}Yd׮]7O>hmغu+z*ݺucȑZH'|)BEo]~Ǔ)SjjU8Siݺ5wywf ;w󾯨 . ++#GRTTt$qTb tA@g _풳$],}XHnGh?~aV[{zq%I1`C+XWo]CA@cIS=&O8Π6:dJv"@t5L8mtڏ6 ܻ`ծL0dL曯1%mڑ:) 8q8' =3orZ65Dz`HU#ۆLJFhyHz9\vF1$An gK׮EnNC^L?;E"t.Wr+Zlݏ7T# q$c1L봃$ݎ6͒Yfsϑ@vv6Ç3hjS7_|.]0j(.]J=?Yh]t6mjSr-<#\~민lܸUV1m4ۇ`^FToƏ믿N.]Xvٳg;g>K߾}5{7 > /k׮"#W_}57|3{fذa,^!7nȃ>Ț5kػw/:u+ph'PVVI'I'ĸq{8Xt)swy'Hj(ˣ`8lC85{ ~S-ϋ| P`D8C1I$ڜ)1X\$W-a usf$.L" ݎ64qU?HOOd^7nݺMyy9O=7x#3gofǎtܹ){̰}v?ϚgyS0fYv-Gn*S̛7k+ZoD~wF# кuk5{70Gn ׏ۗ-[9sx衇4w܁N###AEEI({+s= :tk1|:Ǝ8XTT_KxsCz H3#T&=:X&D=U1dwr@ݝw<1x&LEG̉\m l6CY9RRfmϦR)}'[KGĶDzf&4ۍ1y/g)CFsKm"G[* r=c1\yfo疗۱|v'D!_vJ: ?J-,Fm۶g۶mMXcn/ &^ӧO -=}ƣ;vرcٵk /}r"f#@~dͤmרgqC `۶mtЁVZinDv_'ݶg z<&??¦QA߯xENp)y3u8)3ƓoDpǪw htWnKrپ3)c8c̲'J]{#WEfS:g Զyo *W8Zc'{CE)c+%5=ڴVO,dcA *FC\=LphoCs}t5yΣ`F|c.Vr(J#T j?!> WFE,9yj4;8[BAAA7ޠtY}#o3x`fcǎ{k9sfFdƌ믬Y\٣ơS]]i nF.ing.܅1CI'[x۸)FjӸnBa=# SNL="ʄIv|(t)Y$W\Ѿ^/Yߟ0zh4 FYp![nJ*޽7R`A^zǏ KKlXuݺҶciWS[VGiQJhϽԀ* 6С,2Bx2sU|rj֬Jb_AewX_AѣG+ʕ+qqqaiӆ[nW_W_esnݺѭ[7 |}}ٳ'?3QQQ<իgc_;;;ԩüy1b{C,YR/_>Μ9Ǐɛ7/Gyϟ_sqqI>R\9.]Jd 4m۶P(8{,-[VHx`ժU>|mЪU+̙Ì3Xnˮ05&ZvG-y.5do7 +TĤ>~2$*>9J[ҦMƍǯJ;/ӧYlNbʔ)~z1gΞ=_M2eXzuvEٲe k׮cǎtޝRJQD <<<9/ʕ+С)S˗cbb"cX"C f͚ɓ*U0e '^^]бcGZj}ӓMd\\\h֬YvY߇4hXǏٻwxKi|:t///=zĥKppp`޼y4mڔ%KҤIf̘ !JɖI)3BlJy(KMqUEPP",,LQpaEPPP/""BV LMM bcc cRih,4M;w$o&Kp,2UN!B!OxDDw?e<.!p?5UOTttwPlиHBedd:222VVbbbwXXXh4J%^B#k !B!B!D&HrU!B!B!2AB!B!B \B!B!BLB!B!Bd$WB!B!"$*B!B! U!B֭[ֹo͚5|䈄B!"{IrU!iڱcW^XEҵk׏B!Bd3I !+ƍ7>X?CxL*U !BIQ]f~<ݑ|zTqwnôo4WX=3N Ҥ}fϖ$WBOXFpttB XXX_SBr΍7qqq˗\r}<==U&&&׽{w?XB!|߫'?϶4ܱ/Kn~%~יV)~}wФVSfe5ָ2S>`RVgNo涥ޛҡi*nF1;zmi'ֽњlʼn5w3Nuiq WMuS<uFOハ' NϢ]\lW $*B|j׮͹s8{,sY<==rbN:iWfMN8AhhE!ⓡXZVdS豐S #@MС)wp{]pg +g\Ѽ]T@GXt}C7.% WKv}BS (5:Wzveɨ68ʃŒB#ٿJV?N2Mrlԉ2A=CJR7:}냌'E$*B|†sUTa֬Y+VU#_ IDATpBCC_h߾=׮]iӦϟÇsAj׮My葶ooo(^8}ANkɓ'o?ܹJ*W_%{{{_= BeR6ԭטFG箥nGU'Y<;ޠ!Ruv?p*~؂:|bݹQi{j7}M]{fHԩט&=uGTÈ3lo@b wN`uc[;R S {J|׍)kdu%2S.#qEqn؎vp=\3g91#lG2P>?G2i_ {ӲUWfIz=6-V;%斶.(4q὜LMw'& Ir%Fֶ11iY񤺌{,ڻ]ZS^C8^p%^11zϼ87mBMiq0#A:?V=\|6[CB!'LkBBwܾ}+++6lȵkט;w.[nK.;SNq .̾}رcx-{v&(oMS-L`U deR?;Q t@"w'1\^#sR5qD]\Qr>P]cW4gVvQ[f؃ܶhv{0t!Fw6ރzEԡ"_CU$*B|͓lll̓'O2e ѣ'::73go>VJ5xU055n+^8 "66aÆ%9̌B!D=Α@G:t*KN}0)K֎񏀧cڸwҫ& 0KYEB!@I~-Jek׮p)N:ŵkר[ncr@HHvۆ oeڵI>+OG!⽨C^DSs\j#8 ;r0KzJX_PD&!0K a&i$ca%+B"LTpoUOVMj>ڗt1 3q 16QZic:X}' KM(/B*F89sEd+f>۳{T yf4|RZPjnmfllx^ю̛ݖ\һuGvFTO"U!?ޞgϦz r?F  t=읶hlą*PMNBg*U^L˃FM$ < &&fuw P(Q顧RHL BuhTkV& F:˼ \j Pci;Dj4՚bQ`4w#e.?z'kcڼ1OӴY)}}iF͜شԠ歧_2~Ü: {s?o)!B|j֭[ǵkXb%KH"̚5 ٳg3`/_ݻwL2l߾Ǐs) ~~~~B!'B__UV1h bcuN3n8I !uݺҶc婎weM+&fLnq_κ[1:0)сn5x8ocv>@Q/8EbYg{џ{!1Um'ss0yS64AK,3S*ͦYTx/2 X!B!B!2AB!B!B \B!B!BLB!B!Bd$WB!B!"$*B!B! U!B!B!I !B!B!D&HrU!B!B!2AB!B!B \Bjum\z5ZSh2].euuYVӒֽ0""۷oh>/{K!>'i꼐ب2mv>6˫Ζy_?tф_a85hJkQsDB?-Z$۾rJ? e{Rrtb Ə#J*00Zjq̙ {+WpѥK>!ħ#::~1k֬T4iwHQ}_BO&;eɍoϓq:4O΁lWFtKYRE;ۖzS#$Wݻwckkٳgׯ_'۾n:ڷoeٳg,^8_ƍS=QFNggg =O+W.)ٵoIqIhٲ%}nh4۷d۷'''ؼysg~Zd0G:uÇԭ[͛3`tճw^ ԩSɕ+SN?NN>HӧOg̘1tM=#+!:&8y$7o|UuF*Ut2t֍իc֮]̙3iذ!/_Nt]Ğ>}>={tƤ֭[iҤ ͛7~j:sa׮]ܹsAѥK{.nnnՋiӦ%)CvƆCW=J|166RJťB!R@!d5=wt*a :4cxy/cK,Ġu̖"W\K'sy(˒2Roh6і;}icS!B  .Ppa,--?h;7n… .wi={XXXdxJ(2=ڹs' bѴk׎ÇSlY֭[Yr%I,_\;m|WjC\L0QFakk#Z 0@ 888ШQ#VZň#P<{ [[[,}ܹ4k jԨ;w.W\!***Y111xxxl2~/ɓ͛__$bccYjWf߾}=+W#?6oL޽S3]̌۷oNfhРAv=ʦMs7nO̍7$Gm)`ݺuxzzRv$N???6oLϞ=ׯ۶mܜʕ+өS'޽;yD >\[~ԩ\~OC{444dӦM)UV''4͈gvEFP*uCذaC%XZgغ߀e1e'ﺔ?yӌuca~p7Xmfʩ.i1*q=Ƭpmz wyQdv D^HTu6IgPLb־@iyŠ×2h^Xw1J<4?9iT#3W_;v믿ҤI̙@TT'NdذaTPn޼ԩSٳg3.]J݁d[ӦM6mŊ;v-[uV^|IvشiÆ |;vaÆQbE8q [fذah4oٳg8p Nɓ'у#Fl2:v쨍/::={p!ϝ;wqtܙ]vЫW/*W>{l׸2sLŋ=z͛7ӿ^x_ϟτ WAAAgӇoV;kt۶mҴiScgϞՕ~v۷oRJ4oޜCammM~t.3)Tw… 矸kqL0Ddddk?Nll,Fb8;;l\9r{{{J{)ˇ15kϏ'IФG޼ymS*ɓiӦ?ߨR vbرԨQC;ڵk׏:0|~7F1cࠝA3g ]7oKҥu!=zaÆm<@PT*)Y$$M7h??? Ç׎sTLu G̘1 T*z* VZfUٳgX[['):t@۶ml{5C-44T;#Ɔ;7o^VZŠAzxxкukLL3R 777j׮׻`fܸqTVk &зo_:wڵkugT*ӧO^zL:5I{+Vয়~ʕ+ <Ν;zj|||x9F'O̠Ah֬QjUvڅ u%**Pf$mɓ'I?Ç)Yk\BOYt}Kgӧ 83iҤ]D!NFeEړiOIMV[#ز;Ey8OnqX3z*enB<XX_+v5>[q/^"i={=>2+<ܷϻ|֦@uw[ݻ5;V-:I|p޸ ŧC.TjC/ɑ k%Lޡ-(pY }qÜq\ywiTAj}c^˞%VS/oMS-L`UUE ug*TYJ>={6^^^xzzrm~7~Oξ}ƍۗ?3Pz4n___V֭[eر̟?F9(Q7ofɴhт3g2i$ڴiÙ3g`ڴi̙3-[pu/ZhA 7oUTO>=e˖qy߿O5Tʕ+ҥ lٲݛs,sjٲ%ޘ&EMrζS|y͛GٲeٲeKqUF v}Ғ͛'7$ݻwYl]v&G͚5ؘ˳a F8q"C Օcǎh׳\n˖-#::f͚iUZ` @Tzi4͛ǯsI\?@ܹ NRdÇyQ $u]fݎ3}B| h]*L.]j;-fbС(o,Z3zhQ oˁԵ" ( ѤGSrW H/\ކt]4BJegbD`cJ3׮D<{7ڌ_B(*@&+P&4-5/<$<_A Ɉj_9ޝ gY$/ɓr`L喭q[*wmCŠGj޷|V՗5K{l~ndY!ϏOzqNhѢڦ^͛iժgB-jOH>TXQ{lV-Z```+W$yQF\~=,<mb4_|(4 $::=v7n_'Zl ÇӦM+͚Rׯ_,Mx0į騫_>gp IDAT/_ȑ#dݺu:OzpIÙ:u*jrq%r̩-~o@-ȑ#ϟ(ɓbi4Iwg 6ܹsti򿴾{ξp={F +^zѯ_?J*?7qT*4 B{~?#&&&T*VJڵɗ/^RJ{M7n4lKKK̝;rs؅ w^ŋ :3gAΝ<T*LLLӧRJcVZQfM4i;v gggqwwݝ?Xϝ;wR-aLLLx)=.]vj^xӧ ڵkҶm[ʗ/wÇʕ %K2c 7n̵kػw//ܹs]vѤI >kbbdYH> *b|)Kڷo9{QV͛7gܸq)۲eKrͳgϒWX$ܫW/fϞMʕ;wnY JL:/^hTV ]|y۷Srʥs\{Oxܧ4&Ylܸ1Oꐗ.9sbH#WJbnmu0C5* ݎytFG}ۅ< @aMNDTy0ie8wfދ<}D(I|SSLSXXbI(/C5`0RU=*\9 bmiGclM MpL?X-Vp}фxRl3S|)HbŘ={6cǎEOOǏSre ,޽{iڴ)aaaj\\\8~8QQQ)9zlذ!6cR DOO!Cϋ/kB8y$?еkW^|yBO']qjT*{w\t)I]\hQ*W̏?F!$$H:)'m,X,aXJ9w}ǿK*Ucgg*T(S/LK/[[[177'$$333n޼Idd6! ̙3YbS~t]:uhgJv ,/^! *I0Nll,Ϟ=rʨT*l0pR\r'Oİk׮JJLc9s(Ŷu3ذc&&&DGG)km;_&wIf_pAX>}:LfzaaaΝ;{YHH \rHLZf݌9RߟÇӹsgKڵQvѢE&%h4DGGcllrIZ)С:tEu)_|鉳sUB6$$$]E~'ڷoOӦM%*l(ȋYP"5ҵ?z#%) #J]gcG;FA)s`kT.sG;m`b_ 8~4) >|}f14E?LK$fll QDiDJ2_DIk?ws8ZBDg @PJG9+M_ VMdNv g%3R>5֝xRf)FB|8Ǐ0aSNW^+W&MФI횣rb̙L2-[`nnN…ܹ3֭ĄSNÃu7n;;;m>>>xBޝ=;wVZtޝGK9y$/_ٳͩS077gĈ4mڔ_~Sti/ѣG9r$/_f֬Ynݚvڱxb ظq#k֬I /qssѣG,\v1p@J%7LJ`\½{>ݛҩS'MabbB\t+2k,&MA~pwwgС}zL8חǏsm8@ڵ10x;ʕ+twww J*Ѿ}{֭[G>}I&민zJ'Æ ]vh4*T_] ‚`jjfYJń 0a{qe/[BO˧\}WywZN1dzӴhιwgbܯ∮oڨkq >,?靏f7 ؑV^.Η(*:y󡓫(꛳BǨѣJ ̗͛+J+Kϊ+lSk4\>0F1Mӗ`Mo9M+ q}6U!B!BʤCWV(>I jYZ(ʆC9\B!B!AAܜ"fMi'G.B!B!CB!B!B \B!B!BLB!B!Bd$WB!B!"$*ΝbI!B!$WB!B!"$*B!B! U!B!B!I !B!B!D&HrU!B!cS]ݹ fyձi꼐,& vƩAS]lu1>uIrU!B!?Bz7[byɸ~ɉjuwMj5e\VP`+Eg|ޥ ϢxmKq}3I !B!B|A(R \:0BϱA_Xq1ݥw bкYOfe+.%s<}eI )74x Lϧ/1(@/~v B!B!Eˬi+N8Fм}aίߚO{N'l W"~ڣBڌdضTQ\ƽb;T{YJɪSdeBҚkgk3J+5ǖ0m/#ճ|ֱ4 g3p si]3 9q h^S[l\vK:?gaF10v{p Ie*,s1l8:x!U]oMY>%/@xZ d)֝xRf) rL`@؅2s/^S*]ƽT/< wyM>I2sU!B!_.MV]rزڢvȴW7~@˂M`ʻSc詜ߗUe ^g#kXJ{ܽ]#hb!&+-Vlٿڢ<}'^;yrT*S?Pa$G*0w#8{3yGd\9:E>x-{vOXM5U{Oan2m[W'V)ԝxRfSr)،^>yr56vTM99__dI !B!w8GЩ,9,Z;bǘ-[`TچA'9v7ۓra9:uH.JB4є\'sUFP% 0)\6Pw8GR>Qtį僇+H7QM+°"ǻ3S,6$U7=e\VGj޷|V՗5{?ҘzS-)m9(סA'8&JSf]=eF1GQ(>5JG!B!tR䕅-v6ΙsEgX[[0BB&`({FP Xs}jVJYȕ##7XP X+B"LTpoUO:, 0ơ)tNkE3T*OW<Y|cJUQlxMd0&a uO$W?SАyfw(cbcb(XPv4 ?3W+?+WXl}}{.CCC~g|'GV<*U261t(B!A %R+]S@C(2WD)M_'MdN9 oŚg3xi(OQ3ʹG'ƍ>Icǎ)jTN2e̙_!Bdըas.2T!W;>:kvF'@ ^D@9QT@YXNA b;Êx6^wHM ɦd~>ykO8糺Vwz6;Ҹ77Yχ3s4ĝ3j8SRpC cSm֘n\O>@ \ɛ*l!A=a_frWwzg-OH_/FG+Âjjb_/Aٻm6K~a (4v(N<ɀYzu:RSyGؼy3Z{ޟ=ٟm6cロiҞz)?ga-[RTfM /ͷբEy|%K_2r(.X/re]DDDD֒&I0tc@˨M1{biGeVz#fȵL-zt`_h&1=yharߐeg$}o"tK!瞥/ (Wλ8+ɓ&rtk[BGckْ-9x`k׬ə_=-(ᄏ\^ڴiâf1p@C"w&1! kfȠG;J51o{fK_2&^a}T׫\j>\oO< 妁yidƌ4<*SO=oz Xx1uBT%Sn]/^_sg'Xj=7ח/Fikx:1w\lo eѐ  IDATW_8u曼r>I?IZVe[y[l|è4nXwYݼE2jtc¶ɠƥR'R]լ,~af͜a{!\N':Ƕ[+xJ6BɁxb{Q%XMd̙\{uԫWD۷%?;Kٹsg&MX͸qry׽7P0m֭y*2 l2n8ӧOp5U9M6|ݛiÿ&NlƱC5X|Z3XH5q+qq9:q73iӈCǎvMVzBJfkԸ1/~yW!Lo<̜9￟qU9GGGsi.Z/P)))e[i3f1{?gvXrxHII7AפIc?O::^|3˝;u"22~8)jsu۶m2x0vf͚|8w._5N =Ƃ mW^~~yngIHHL!..|S&OfeY&KN1v2bX3tkzyNN,gwfffNn/%~9QzN\`6nXhb`wx%ФI~Wo!""""""j\}yt/a9-[[Eس{wNo$#3kɽzPA 4Mx*\$V{3fp7ҫW2/|{_<$>>>Or՛ o9k|œTʪ>}I9ҳgO7OOЯ.2-ӓ.]`XpݤѼy8wro֬u-0/ֲwuWiǏg\{^KzJf[~}JTj\MNNf…op0*rDn0_~~| 0ᩧϙ2e ,\es[㲖F৥K/agʔ)eUų|ᇌ1"'z}y{gW_0`?>7|3ly+l pUWw0au^}y.o^z'ӓVVV-~'Bk(ЊjPPS_}gy̽X۷og)$,,U1gEDDDDDrVH>sn7io}7~ŋXl~}FY`K.|{,n{e~s<j:`С\}l^u[OFEEѢE< =XX Xt)YYY$''sݵsC~y7yXYZ{^25k֬Ѻuc, WIN+"yJ~tڕ˺to߾9 ֋% hBlB׮] (tYej"7"AJ9oeqUWUH`9r$K._O/4-%vwUٲ'OfРA%^Ȑ!ȣzeoߞ &SOJѣۻ%Kgݤ$k\qFV}2ovXhԸ1/o߾tI™0m"ݱc۵YGDDDDDDTjQƌ=zgfҥK:d̟",Aͫlv'|Tlْ-[qD%3^INm۶m۶d1*pBV,_Yf5{y`XW~5n˖|$VEDDDDDD*.ڱS'n&NpᏍ*_%XGǟ|Riiiebӭ{w}6mT2apxIKK dzk׮R&W{9ޝ>j^VDDDDDDbgvR\,Y>2={g9NڷkGdDq?Ȉ:uX)o_ѣ,_η}窫bС<įYOrNzz}yۈn oa9cf3M'O>! z;b1 WNWƐ!Co"v>< pݻ7?{/ >!'e 5^0/Rz4hYYv;f#..ut& 8m<6%Vpn`ϑ\f+SGϰK;ӓ0?= Xnz9FޙĂip|릶#T,Vv=oRHrވ۹z 9DzE`2?o:cpaC33.i=xS RIUdQIҰ0*(J*)0r&&}7>>>*W^lʕbbbFڷo*%0hժƽč;r[&7b|bʗu73%0?yǟCcij7慏&1;8gXf sSckmx]T=\˹v|'"3KOP>؋+ϭa밹L\b6MgZݴnR)Evf1webUDDDDDܻ]vGgln~y ſ'ʏ.7 M Ee-tN_vDեV*xRǴqgqsb~NoDQrUDDDDDDD-k^ͬw&'e㡒bΊI,>kugc+CX3L iVgVVaXoP{w^"33_NOJEדqoog.h;u7 g,$t 1"$m;p&nٚ2Xmx"eZ?JDDDDDDD.rF {~j K-zt`_h&1=yha }fO$fcv8|ؘqslqi]kDtx#g)Z7+OEC%[}rg6Bh}/=Їp +ow? wyP׭d]H{4TrU*_'N46md$$$)))FLL`Tز쀟b 4M34Ͱ -TٺAOcu'Eʈ>O""""RVǯm6E.sX˻u-zsd=1:gtVO]1\hqwyc'-^fu E -=J Z5\2d}r9 Hp8YntEEEweQQQf\\ 0qܝM'EDDDDDDD`WG;J51o{fыS]͜`%VrҰ""""""""QvvApq|qx䪈'>|oGQrwU?"eD=EDDDDDDDDDJA=W墦}DDDD(Hv%""""""""""䪈H)(*"""""""""R J""""""""""䪈H)x;rXv;v"-=Ty~~4mCvmZG)*"""""""5kױafoQmN;x9aDDDDDDD䢱c.oP-ܹ!x""""""""""䪈\46vR&WhUho8s#-T}4i8g\l\jSz """""""""R \ '))"**1)o!"Q $ ;vb}YTAgl0DDaxnX#O| pq1o8/%ҲNtt4;K=X<X 4'l= ޖ?|2jX3Cq9i.\o;g35 3E[W 8exh%6]3ޙ}-bTl1&y3_Hp?B{2Yb\sGx$eG6O1X8x0/앧+|'jխSRie'X SĪu[\u^7J{s>˵K _/[ SX}3/^k?yk̺έ|(/fWsyO \nw*Cr3<|eϼyӹ=י?WV6ٟ(zMHY1uy%WNLnɔU<` jOL?} _~O+nё(zm=;>F .H8_mqV+շ!qsW,""""""""RխW7@1Xk 0 Cr(κ†0B&&|tdjgIjpS&.HJ_ū#F"|e`{nŊ4q\'|+OF;7F5-5 x w%_y{"""""""""S1V|cWll36m zȗDW|8N6 ) k3ny>|ɋsTm.OOÆ#Gk득<Ϊ`M\؊QOgALgag^HÛX$Y&¢iRgܢ|ګګKX EXN'}iڿ@jKVR\^̘#6lԆc&1F `I|8nfӃK||syL ! Z3 *Эln/|$'yZyuԦ˥.0(['N46md$$$)))FLL`Tز쀟b 4M34Ͱ -X~=;/]DM9_d=2q픢ظ\.XŖ ]%rigo_m0d}r9 Hp8YntEEEweQQQf\\ 0q7^HbZֵ \;8p 4_M  jJHe]:J*_r'})TH\)%WEDDDDDDDDDJAURPrUDDDDDDDDD\)%WEDDDDDDDDDJ< ?doʳV9=_\[SGo IDATdfMvYDDWHղ䰓Q8ʀr\.X we]f̧֡H)(*"""""""""R J""""""""""䪈H)(*"""""""""R J""""""""""jU'87DDD.NeV\纷:]6:)"oP2Y<MEn`vgӷ",W+rMiqs4}FcZx""" VyOϳcOj+8v9+cV]HUPhɯ6߃U;h֬i ÇVcfrdža@n,DDDʗOsF%wMZgkÂy]6O] :Q)#5H%S͒&I~˚xҟrNuIVylsޞkb cI:[׷xj_x +ڷ-0> s3oDָx .~}&7&˥4'ȵN+VJŧf[nAx_ؖJ5[ZcgaҎݟ-f1'!ͯotb|߆>QZt8X}lX ,Xlve_%oij#EDx d~OjEߛL>Vl5owe̻/߲5~3 Ȧo<Fuqa=b^LAۭymuC&xvNNũ?k8=o,2ls!y8eg?-gq_k 5N^zs|r7t _\{e6 ٍA6|CS'TJd'Vڷ㞻δw_B +Kk1L{/7A:c[,}:;Lp4ށrl[>:uux2 dzChlk@u^1|yYgepY8DDD.Nj#EDwy]{מev-|0t`r_Y4^K l<[X 7clߕ$8d]&Yx5{/Kֆ=ZY47$#Eh:LDtXv]qTiE|P)""t9< F]/Jܧw`*R -r'2V#&pe9qykK,| d8Onዯ0s[m \'WkH/ VOqXy/=-"_=}7>kȜ""8ĉM6 FJJc$$$Xv555vm,;gXM 6M3lE ֭_O]* hlAlCDDDP,""UCYW̭3i匣sیjc1BݾAc: duڶi nI0 #7pdnghh+33޵klFEEqqq&ĉs7ɰ"""""""rN6g3Qtg_ך)"RfC"""""""R,8n֮[OjDӾM+l6[9E&"""""""""UH[Z6#00ݿԡV#Z pt*+QbagdRNHuU-z9{yySSSQFU(V}\vM[jUDuV8D*JQyw=4kD3aesfwբ+]`D&{5 ~4ޛVEDRrec%AJzr)Um(JuO ""GI^7${^N`5e/;ض2p^)b=lذ'30}CӤmbj=zn֩lZ.jWםB+6W^FS9E՟ z(Xw _]v%,s`ّjZ/f_ޣ'8b N q-a+zߕv޹90DX)lg4VWu^vfĺDX"μ|oΉxo6#с-.!6j{uUߗԅ+.< 83^ʢ]/u㕸m,^Ze'dš@zwiQ*M """W ޙ8Ou~@UIJB"4Q_W6VC-(S $Y k }bظrթoZ =XͱX(78EVVm%1<0;s9Y<_~^]mga& |ݘ'9r4.ԉ Ċ0?"3 "f60J8"i%-( {6'+/#SWh,vJ_Riu p&r8I:g`fQw,K uE |;1 um𳿁QO0˷Kxyr9J6|/ͭ˙Gw4 KD}epl{܆o76T&^e8v|ŋ`o޾P X]ߺ {H3լ 후aͩٴɩda#(-Z7Nɩ=q [-՝ W!lIdH]Zv^/Ƿ`Dn_jkN .]va7IߑKC~2^UqY4eo#_يH 'Ь;WQF^Bau 6{qġ4[8u%a?CҪf()6lMl<`3ְ;A'HrxX+4 w'BiƵ&g{$&->m7/{ǹ<LJ+L h۱ yvv#.S_;yh5߬:ilsay+$6בBU-YMB8Zbd2,Ge lKZZ ؼmOe`""5$hiu3CfDujIڑÜ N>ox55<q}%tխ IN=$D5!6uѤ۴<7 \e$& ;Ah2AV$vlCbA@T45yO&ӇؼLY/!5kՔ(=f?̊oܖVؾȣnZر8{Nӊ#lݟm'ns:iP9>K7jH##g/h|bK6 w_z#z5'5gKr=rnx%\ޥ>Vϸ#0 +>֜vaٶ;'@؈kg. ê|N\Sy`*[qK 9fY+&isCu#Uny(ֹAF%nHUşSσ\U30{mD։ߕ¡kؚ 솓,Ҵԣ;X LUD p&qvKQ5><ĎQ6tXxR Xi>3O/5#~ T YApX(T\XCB 6i#&{5?jI*rL՟N5(/$pΏ/ _nu6g٦aiݤB,Bslٯ&7>FzRIرW: ٰN VJ"=͛7naPjִu.L5jR7=/Ka Idްqu;8怠Zغ7BNa g"O?6q4 qX8{ǜ&5MSkax;9Cltc_YBhֹAn@A1E 8Ò_w _aLK%V&c 1928ֹbr׊v0É.j kY#"O< \绠J#j+!u4ʂp<2M5[htv/uI+yuRMZҭs|"jՏW8LbТ>v6FR6$!!! \^MSlәkc\ BTF =.7,6L{pʚ#NKlkjWR$ɲdd#Z& l){>nHv0soKUQ;Sj7.Ьk}RNތt9 TV)t[+UeKfZ"}15@#JЖkUOQ!?@}c5A5hW6mRǸC,ӱÐJPH!C(+;C.*PWz[ K˖CìFSëݒx2U_\ZiKІWjaE޻P?ƻ;Xiv7 (GTW#_yMӰiJ/lJIqm4WSz˭jkx!D:_4 gc nX}NuE7qaJ -R<7VE|`ʩq{htXB =S{cgzڱQiC9I1Z٘l6kkjeːzl̹Wh([+5_}/ge(eI2P'#sjD*IhsEv?tm"֝qmj2h9ښRنT%VlYq*-Y(k.?͡^kpn_qobvrzzP=?G@ L[5{A Vꧽ'hQ|cGͯG?'U6J?9`zzo-baWϛ~KISV4o]Qo-> Lko8r"'w>68Ъ}x814{Y*߰U}dcQjG"dl=jm4z[ZIqUiPJ[D+"?fkwO+ Hۯwfj@$17Rːz/_QڭoK}GRtiMIM)&쵛eTWV?+?-[]J74|(p|6T5t6;""嫬T%b_aj*k2uFmd10*G|GhǸ7y7ӳk͆{r5lޚ24U^4jTq~X[3SGNҾ]he3:R1pxSeVmKk2ٽjĂ@y}V>ya|3@(P7-֩$ah~Q Go$땿tl;w&M-T_$O,UlTh 3Wc}STa/תH2Шey@'jrÎN[Ģuޞ?Y iت(-ϖl_V.]KjM^_o%b;z}#rc<4R5(ۯ esfi=4[=6k֟Hu[qזV].qm\  =Zge:jǞvdIP;$-2JKK*(--5nƴ,˕ nI)iٶavoI{j(O]?g/\C n'}۷C# рzG|9gN@K~-Mшiill AߝAz}5ZZX1?_c2wSNO)gY;hc:Y|#wyz\o9sՄuǝ ²P(TkF, fee~(//Zraم$5jb'*8zqRHzzZ i~lTTv wH~f&`JZ\%f*O4, NЦrTvgD A,dl [fzrNleZcmS̤Ǐyz_ZZ*33JIWݥ6!Ֆo͖\4rPp[2<|ڸv,e n1h:N\u\2iUUU&)33SɧG;3L=JChHiGhx!K#_# IR2jQGkJw.6@7)p8ԫW/; ز q q q q qpvv˖HXZ9 K;3a]W:=:j䈄U^^щK-ZG 2'`J.&n8\8\8\8\88KC'*餒Y^zUÆ Ϗ?V1ozti3p8:|v>;mJJJDŽ JҤTy;dvV;EpUR&$,}gw|%_+σzWo7z t 34tŹ-okY(@:;nhX-ӌAui3I(YׄXK=uN\XZt'.H|Jy:4t׭o.Wt`'su13ҝCeuQS$k޾gҊ\H鴗bymc ,у?7(eӛN!-sީe׬ެߝ5CG}=2Rڱ[mlDpztOǾo}vhtG)sG`|Y:Č[[?+=D۔~oFuדDgL\hCe<УF8h)\ݶWɹVfОsNPw~[=Ij[wuMW : ͮ~Jnv ZS/b>z\5zd/驫hCj沠$[+THPwA~nZ%qpW[WC2h/7_tt"ͮRVs/7gaHRt_ҫonc[ϵieH&!{[~7ZMQƱN,#A6MJ1P=Ք~ݮDӡ㍳}.bl%`~+_.w:M6LݶWIVw=Za {%z=vuS}UuóTWnՓЅ߳#j~ 3.P?+HdtOFG&pE-xj-9Otiޫ+y,'{RvL 9R<$?V :Kuʸ̶ `X].9B{T8CגKPԹ KN̼XS9Y^9yiѴohF/ :喉qK6mR9@>޿QgE*io )H%6Z-M^r*$N2dr[ڼ5K}p^:zFNդ~jaOR0JEϵlQC<&ꥷ]IP.~H~A!:+t nG~\>C)#tEVG쐆m{XMmL:#u_43E^QqXwޡ=>m!X.xD_LWּMJ_Cz|RY/3.q \._KѯՓ>|Iuf =Q(NpkWInThi]`{YsDzAus1e y\8Y-olyeLdv,}3ԃg(~x_s>YU+OX줡xco{箧U5rՑ?IKܑzo1k;tˑu?@}u5w?)V7Z(suA䛫;Čס?u40=e.yu~}x}C÷?m-|z~5T+{捰޹ۛPҬIl=_mQh5JUG͚-BU뻙7ڛ{?q2i]Go ԉ.OCZzƿї莧T~Tkj._uM/~-{HMM4ۿls}_\x)Ȕ7uiw$ZX2TF(v6Ѡg<*?_*PϻNʧ^o.cwo֔y#7b: 6{mc.rdתG뭺:)cs.1Qe+TW;U藓$Q-J~Qk%J2)To~vSZb~~_5*6מ= ѵߨiAmYR[sim<@-cA:Η[A2עw?yU}:mR=\?phX*i3@ws+ovR^2J>ԭWݤ߯+&)jn֞ mʷE}V}wYYZ[S):pk7EjDA7%e˔gg}["sz/$K枫Mv2F&}vrJ^c4+}Cݏ<jrRI׻B)3wx8k_ Jwɓ_w5鸓4K24b$/٠nd4=WVM*JH/S}~6Iy.Cfq֑C}Uձi>JDD=(Usmr1C]D#Ol}íǝjXf0KLI'W/=^3NWXOιXGOSmB?epӏC?e'(;E9LrJ`恖@ךOBt$: ycK._F3j|15/Ka#(m6skI:|vׇd+rE濈%.\$"-tz"ëL=ZdWk;G)Q2KFX-HUn^-[V?s|_ׯΑ .cm 0MKe/$nk3wWR %E.O>[j̖'x]f sMመ[^a151wfZҭܱUsT^޸k;_YM]blstc^HUڑ,mkG*Zʴ\4{;Z|fk5ACCR[r8RtES?\z1y ̘iucm٬stn%C~$:4c9A_VU[S}Ql@ZǪBU"}&YD=$&8صk[S6]C3 ә[l?Ra51&R(hɝiyLfrG}Q_qM#C}.0SV`=|Nik3{?ޛ-xe/2۔Ÿ0m>2ԦkxpQv*KJox*+UKٱ(KG6T}kZXB[75?wo;ԡPuj]t˰k꽷4kst[kTm˶m9O&`M,SLCCfg͒iTeIzoTCvR=[W7|uS?$c42;BU-UxK~|cQ7wzm[Oޭ3 1-V(Ƀ]X]ڠl^?}^W_>K,ܠ*-)+?֫mVrrZiIJOF`m,׫*%W'E@Pvq6nq~}fn#'GFe6}kZP5W5?N/uЅz~7*۲kW?OGeS+|MoWߵg,\1DJvˍz-Hchh9to=ODUdUo|Ƃؕu?kӾIM͎{ijo UjhWޚ۰+yzbUPRַӵ#ջn?恖@;y:O~udUvoj6&ZE9vǰkJǚu7Z% :v,@>:O7iS _9+j=N@5K $H;gfԯ?KghSԓO[Ϙ.jA?&VI2uۯII״i\{oNQfw:~=]Kf77y?ݷVA/n9Wyq:ʋT;u e eO~99AIӥ0d8t;H2ŞVf͙w}Ejl2!^LISpZ}cuKC4' D)ul?l]nQחtϸ#u~vmCrO9Lc#uhagkDL-,+m~3gVi ҉B?fܬ#SC/I/?$5|M v:&}gڟbmHyNW8#iX59Z_}fOQ:ln$K{NT(4[d*uckӐsٺ[uSy4,}:zyИ~$XN#|?8-ԲZy5`t͕.?fU8V'^g햫mb_c*@j^1uEKWh ] pz4͙&?IeUIDATBZ0<6`YV0+++Cyyyʕ+파 ;//.,,%6{fÊaI+7'GΛ=&N.Z|pxB]rATl4? peddtR y+-붯l ɅmAWE6-mrX2\ɺӿy<yڵSWS<~ UWW74JMMUFFLsW&-Iɹ~] TF:3j73Kwͧ" .}^W]V$$jqq^objWw][?,WްҏީGW{wbEԦ_;N3C]thjm^awYT,yx }LfN8L3李ކ"7~YW'Wh-7;Q#Zm,OOWlQ0%_?Y4TJ=r6}?-.#g=t5KKj[u|ѩRiźsxR ɿ~欯Mh*XW^Xyyyv^^^ԝWA>:[`tis')Z~Y]^1Rުzo{\7UGWϩV/}ەz=Qn&=~]1IRh^XGt]_˞-{K{ tY=O9,} oER95g}FML jښtXwɽG/Ѹ=d(_̑9T:G_m+wHJ;V{FMShۺWk_q+F+f޼~YiD~oG' (ar.** ۍ&[.#~Lo{~+-emyG#F*ÔY#uc.Lim/7aG5Ο[nj%v;PrJW&%*vCM;Lc򔑑*w8U^u>D?;%.eVZ #SYiuZxcWaSrh'hRWCHOBt$: ycK̭ǝ]&zm܁kңj]SCGkHF' -[Uؒ4m2%Ֆ&!y̭\i8_*F#G+!93Gꈃ{#]QQQXiR\ڛ,̬^ʲTYm˪REܙYJ "Vjoz~ۣ\ܒUfFLˊ4n3K/;ᆴ9 (M?~/ LILLPr->&U{ZTe5;n#rժjfm=NSC~HFMLޡ/&D,8Yܔ_xBͼWC9M>`x;3j(sGd_,-8U'6y0Zz{ L9 [S$YժRfUԶÌގIઙIJmxڲEF2 t֗hk@j=TWz+mZLcn<[Zom dȈ30A_,ћ?駢'Ō?Sڨ_4Yj}F~5m2Ԧkx!Vv>:_ۚJp\%OIYsʾS7ݪ9\Ա6U4k?h֦6_}Z^qw.lH+-LjR۾B;ܮU)m?d7Y_wH ϴp/K5d KᇫTcIV}"ՅI?IS7ޒ쀪6-ʲa7JKi:l[hYe+h}A9قcN8coI$P}zGt~{ =F+,Lf?v n# J3B~ )GOܫ?KANj=Qjл>*r=b_~İ4s{n]S3d<qА mkDL-,+m~34)Iu5WԛUw(sXx韵[n ے#rEzu}y@Nw;RN%9lo?͝F¼ Z >Gt!{A s3WoG7{h@?m-2JKKRsFII#%%aӲ,v[u8mgXwzW'WuhH7lI\bwޭ ^.TwHO?vw1zaú u1G ia[-˪Tx|4 ˳(M5ܮ'i2m ȖZ?\$׈껓V;Shh 틖*g^:K3]_?ZaC :M h1/tw9z(Otw)@@\5 #Ibc%<$wYPYyyw)++`S`/_hҲ2˶D'K铗WheHUUr8LHa(%%Ey@{\u:׷oe> 8$4jK`*!!@ P(ĮUN\8pp4m^ Yaa7iv@pٱ Q&4vVv@:\uݶ岝N綈ivӽ *d buuuv;)))vzzzMӴ[^b1 Bv{pNv\P|3;W HVP(KgG^xlm~I5 ömbSS զ5Z^oA޹tK`0h[ehzVNwTjQQ]XXhKRFF]\\9i7s4M; 6ݧ*dYtkS4mgK Φפ)))$5G#mTUU٦ii% BW$%jaZN{\˳KKK%%%vJJmYl۶mr8) t˲,aa$pUUUvVV$Xyyyv^^]TT5=W]WWg;NpX[ ƛteY`0hAv[;eVRoǒw5//Ȱmm\.tn B!IAUI09N[r\cߪc;WxlmneYV(,@g0 #`fP( nqx:|HmצݫbY~?f$ 8NmW$`07M3 ) B`0TUUey^X&F;m{ͪ*#??߬0=C _ B.0RGj08m.0PaiYii۶#INgj5a7 ecYemeelٶ]v}W%}>_W^֚5k켼<+//~VYkӐZX Rv;~K34M$a`0p8f(2m6NaYCd! ![U=϶`+Wv"v6 g.InOSvmMOO%X)WPI‚R$UUUT__uMAWQMA&)))$eddl &rjD mU5]`G56gKRaa-Iڱ$U!*IMA"] 6IjD @uVPIW#i/ A} ~"&p 9S]2*F~U*Y.%j\8\80lm {IENDB`flent-2.2.0/doc/_templates/000077500000000000000000000000001467005626200155355ustar00rootroot00000000000000flent-2.2.0/doc/_templates/index.html000066400000000000000000000071241467005626200175360ustar00rootroot00000000000000{% extends "layout.html" %} {% set title = _('Overview') %} {% block body %}

Welcome to the home of Flent

Screenshot of the interactive
  Flent GUI.

Flent is a network benchmarking tool which allows you to:

  • Easily run network tests composing multiple well-known benchmarking tools into aggregate, repeatable test runs.
  • Explore your test data through the interactive GUI and extensive plotting capabilities.
  • Combine and aggregate data series and produce publication quality graphs.
  • Capture metadata from local and remote hosts and store it along with the plot data.
  • Collect secondary data series such as CPU usage, WiFi, qdisc and TCP socket statistics and plot it with the main dataset.
  • Specify batch experiment runs to completely automate your testing regime.

Flent is written in Python and wraps well-known network benchmarking tools (such as netperf and iperf) into aggregate, repeatable tests, such as a number of tests for Bufferbloat.

There's a short paper (pdf) and a blog post describing some of the design goals of Flent.

Getting started

Install Flent as per the instructions below, then see the Quick-start section to get going.

For more information, see the full documentation or search for specific content.

Installing Flent

Installing Flent can be done in several ways, depending on your operating system:

  • Debian and Ubuntu: apt install flent. To install netperf, enable the non-free repository.
  • Fedora: dnf install flent.
  • Gentoo: emerge net-analyzer/flent.
  • Ubuntu pre-18.04: Add the tohojo/flent PPA.
  • Arch Linux: Install Flent from the AUR.
  • FreeBSD: pkg install flent to install the package or cd /usr/ports/net/flent to install the port.
  • Other Linux and OSX with Macbrew: Install from the Python Package Index: pip install flent

Get involved

Getting involved is easy:

{% endblock %} flent-2.2.0/doc/_templates/layout.html000066400000000000000000000002121467005626200177330ustar00rootroot00000000000000{# layout.html #} {# Import the theme's layout. #} {% extends "!layout.html" %} {% set css_files = css_files + ['_static/custom.css'] %} flent-2.2.0/doc/conf.py000066400000000000000000000230421467005626200147000ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Flent: The FLExible Network Tester documentation build configuration file, created by # sphinx-quickstart on Fri May 29 22:12:32 2015. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. from __future__ import absolute_import, division, print_function, unicode_literals import sys import os import shlex # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.todo', 'sphinx.ext.ifconfig', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'contents' # General information about the project. project = 'Flent: The FLExible Network Tester' copyright = '2012-2022, Toke Høiland-Jørgensen and contributors. Source code is GPLv3. Documentation is CC-BY-SA. Neither license affects any output produced by Flent' author = 'Toke Høiland-Jørgensen' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. version = '2.2.0' # # The short X.Y version. # The full version, including alpha/beta/rc tags. release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = 'en' # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all # documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = True # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'haiku' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {'rightsidebar': True} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". html_title = "Flent: The FLExible Network Tester" # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = "Flent" # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. #html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. html_additional_pages = {'index': 'index.html'} # If false, no module index is generated. html_domain_indices = False # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. html_use_opensearch = 'https://flent.org' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr' #html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # Now only 'ja' uses this config value #html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. #html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = 'FlentTheFLExibleNetworkTesterdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). 'papersize': 'a4paper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', # Latex figure (float) alignment #'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'FlentTheFLExibleNetworkTester.tex', 'Flent: The FLExible Network Tester Documentation', 'Toke Høiland-Jørgensen', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('manpage', 'flent', 'Flent: The FLExible Network Tester', [author], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'FlentTheFLExibleNetworkTester', 'Flent: The FLExible Network Tester Documentation', author, 'FlentTheFLExibleNetworkTester', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False flent-2.2.0/doc/contents.rst000066400000000000000000000007601467005626200157720ustar00rootroot00000000000000.. Flent: The FLExible Network Tester documentation master file, created by sphinx-quickstart on Fri May 29 22:12:32 2015. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Flent Documentation Contents ============================ .. toctree:: :maxdepth: 2 intro options tests output-formats gui data-format files misc Indices and tables ================== * :ref:`genindex` * :ref:`search` flent-2.2.0/doc/data-format.rst000066400000000000000000000126041467005626200163340ustar00rootroot00000000000000The Data File Format ==================== The aggregated test data is saved in a file called :file:`-..flent.gz` (the title part is omitted if no title is specified by the :option:`-t` parameter). This file contains the data points generated during the test, as well as some metadata. The top-level object keys ------------------------- .. envvar:: version The file format version as an integer. .. envvar:: x_values An array of the x values for the test data (typically the time values for timeseries data). .. envvar:: results A JSON object containing the result data series. The keys are the data series names; the value for each key is an array of y values for that data series. The data array has the same length as the :envvar:`x_values` array, but there may be missing data points (signified by null values). .. envvar:: metadata An object containing various data points about the test run. The metadata values are read in as configuration parameters when the data set is loaded in for further processing. Not all tests use all the parameters, but they are saved anyway. .. envvar:: raw_values An array of objects for each data series. Each element of the array contains the raw values as parsed from the test tool corresponding to that data series. Metadata keys ------------- .. envvar:: NAME The test name. .. envvar:: TITLE Any extra title specified by the :option:`--title-extra` parameter when the test was run. .. envvar:: HOSTS List of the server hostnames connected to during the test. .. envvar:: LOCAL_HOST The hostname of the machine that ran the test. .. envvar:: LENGTH Test length in seconds, as specified by the :option:`--length` parameter. .. envvar:: TOTAL_LENGTH Actual data series length, after the test has added time to the :envvar:`LENGTH`. .. envvar:: STEP_SIZE Time step size granularity. .. envvar:: TIME ISO timestamp of the time the test was initiated. .. envvar:: NOTE Arbitrary text as entered with the :option:`--note` switch when the test was run. .. envvar:: FLENT_VERSION Version of Flent that generated the data file. .. envvar:: IP_VERSION IP version used to run test (as specified by command line parameters, or auto-detected from :c:func:`getaddrinfo()` if unspecified). .. envvar:: KERNEL_NAME The kernel name as reported by :command:`uname -s`. .. envvar:: KERNEL_RELEASE The kernel release as reported by :command:`uname -r`. .. envvar:: MODULE_VERSIONS The sha1sum of certain interesting Linux kernel modules, if available. Can be used to match test data to specific code versions, if the kernel build is instrumented to, e.g., set the build ID to a git revision. .. envvar:: SYSCTLS The values of several networking-related sysctls on the host (if available; Linux only). .. envvar:: EGRESS_INFO Interface name, qdisc, offload, driver and BQL configuration of the interface used to reach the test target. This requires that the :command:`ip` binary is present on Linux, but can be extracted from :command:`route` on BSD. Qdisc information requires the :command:`tc` binary to be present, and offload information requires :command:`ethtool`. If the :option:`--remote-metadata` is used, the extended metadata info is gathered for each of the hostnames specified. This is gathered under the :envvar:`REMOTE_METADATA` key in the metadata object, keyed by the hostname values passed to :option:`--remote-metadata`. Additionally, the :envvar:`REMOTE_METADATA` object will contain an object called :envvar:`INGRESS_INFO` which is a duplicate of :envvar:`EGRESS_INFO`, but with the destination IP exchanged for the source address of the host running flent. The assumption here is that :option:`--remote-metadata` is used to capture metadata of a router known to be in the test path, in which case :envvar:`INGRESS_INFO` will contain information about the reverse path from the router (which is ingress from the point of view of the host running flent). If the host being queried for remote metadata is off the path, the contents of :envvar:`INGRESS_INFO` will probably be the same as that of :envvar:`EGRESS_INFO` . Extended metadata ----------------- If the :option:`--extended-metadata` switch is turned on, the following additional values are collected and stored (to the extent they are available from the platform): .. envvar:: IP_ADDRS IP addresses assigned to the machine running flent. .. envvar:: GATEWAYS IP addresses of all detected default gateways on the system, and the interfaces they are reachable through. Only available if the :command:`netstat` binary is present on the system. .. envvar:: EGRESS_INFO In the :envvar:`EGRESS_INFO` key, the IP address of the next-hop router and the interface MAC address are added if extended metadata is enabled. ����������������������������������������������������������������������������������������������������������������������������flent-2.2.0/doc/files.rst���������������������������������������������������������������������������0000664�0000000�0000000�00000003356�14670056262�0015243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Configuration files =================== The RC file ----------- Some of the command line options can be specified in an rc file. By default, flent looks for this in :file:`~/.flentrc`, but an alternative location can be specified with the :option:`--rcfile` command line option. The rc file allows options to be specified globally, an optionally overridden for specific tests. For an explanation of the options, refer to the annotated example rc file, by default installed to :file:`/usr/share/doc/flent/flentrc.example`. Batch Files ----------- Flent supports reading batch files to automate running several tests and do setup/teardown of test environment etc. This greatly aids reproducibility of tests. The batch file is parsed as an ini file, and can have three types of sections: batches, commands and args. Each section also has a name; type and name are separated with two colons. 'Batches' are named tests that can be selected from the command line, 'commands' are system commands to be run before or after each test run, and 'args' are used in the looping mechanism (which allows repeating tests multiple times with different parameters). Variables in sections control the operation of Flent and can be modified in several ways: Sections of the same type can inherit from each other and the variables in an 'arg' section will be interpolated into the batch definition on each iteration of a loop. In addition, variable contents can be substituted into other variables by using the ${varname} syntax. These three operations are resolved in this order (inheritance, arg interpolation and variable substitution). An annotated example batchfile is distributed with the source code, and is by default installed to :file:`/usr/share/doc/flent/batchfile.example`. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/doc/gui.rst�����������������������������������������������������������������������������0000664�0000000�0000000�00000002456�14670056262�0014725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������The Flent GUI ============= Flent comes equipped with a GUI to browse and plot previously captured datasets. The GUI requires PyQt4; if this is installed, it can be launched with the :option:`--gui` parameter, or by launching the ``flent-gui`` binary. Additionally, if Flent is launched without parameters and without a controlling terminal, the GUI will be launched automatically. The GUI can be used for interactively plotting previously captured datasets, and makes it easy to compare results from several test runs. It presents a tabbed interface to graphs of data files, allows dynamic configuration of plots, and includes a metadata browser. For each loaded data file, additional data files can be loaded and added to the plot, similar to what happens when specifying multiple input files for plotting on the command line. A checkbox controls whether the added data files are added as separate entries to the plot, or whether they are used for scaling the output (mirroring the :option:`--scale-mode`) command line switch. The GUI also incorporates matplotlib’s interactive browsing toolbar, enabling panning and zooming of the plot area, dynamic configuration of plot and axis parameters and labels and saving the plots to file. The exact dynamic features supported depends on the installed version of matplotlib. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/doc/intro.rst���������������������������������������������������������������������������0000664�0000000�0000000�00000000072�14670056262�0015264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. include:: short-intro.rst .. include:: quickstart.rst ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/doc/manpage.rst�������������������������������������������������������������������������0000664�0000000�0000000�00000000313�14670056262�0015537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������:orphan: Flent: The FLExible Network Tester ================================== .. toctree:: :maxdepth: 1 short-intro options tests gui files data-format output-formats misc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/doc/misc.rst����������������������������������������������������������������������������0000664�0000000�0000000�00000005302�14670056262�0015065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Misc info ========= Running Tests With The D-ITG Tool --------------------------------- This version of flent has experimental support for running and parsing the output of the D-ITG test tool (see http://traffic.comics.unina.it/software/ITG/). Flent supports parsing the one-way delay as measured by D-ITG. However, in order to do so, the data needs to be collected at the receiver end, statistics extracted, and the result passed back to flent on the sending side. To perform this function, flent supports a control server which will listen to XML-RPC requests, spawn an appropriate ITGRecv instance and, after the test is done, parse its output and make it available for flent to retrieve. This control server is available as a Python file that by default is installed in :file:`/usr/share/doc/flent/misc`. It currently requires a patched version of D-ITG v2.8.1. The patch is also included in the same directory. Note that the D-ITG server is finicky and not designed with security in mind. For this reason, the control server includes HMAC authentication to only allow authenticated clients to run a test against the server; however there is currently no support for enforcement of this in e.g. firewall rules. Please bear this in mind when running a publicly reachable ITGRecv instance (with or without the control server). Another security issue with the control server is that the Python XML-RPC library by default is vulnerable to XML entity expansion attacks. For this reason, it is highly recommended to install the :py:mod:`defusedxml` library (available at https://pypi.python.org/pypi/defusedxml/) on the host running the control server. The server will try to find the library on startup and refuse to run if it is not available, unless explicitly told otherwise. Due to the hassle of using D-ITG, it is recommended to install :command:`irtt` instead and use that for VoIP tests. Bugs ---- Under some conditions (such as severe bufferbloat), the UDP RTT measurements done by netperf can experience packet loss to the extent that the test aborts completely, which can cause missing data points for some measurement series. The --socket-timeout feature can alleviate this, but requires a recent SVN version of netperf to work. Flent tries to detect if netperf supports this option and enables it for the UDP measurements if it does. Using :command:`irtt` for UDP measurements is a way to alleviate this; Flent will automatically detect the availability of irtt and use it if available. Probably many other bugs. Please report any found to https://github.com/tohojo/flent/issues and include the output of :option:`flent --version<-V>` in the report. A debug log (as obtained with :option:`flent --log-file<-L>`) is also often useful. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/doc/options.rst�������������������������������������������������������������������������0000664�0000000�0000000�00000061446�14670056262�0015640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Running Flent ============= When run, flent must be supplied either (a) a test name and one or more host names to connect to, or (b) one or more input files containing data from previous runs to post-process. Test names, hostnames and input file names can all be specified as unqualified arguments, and flent will do its best to guess which is which. For each argument, if it is an existing file, it is assumed to be an input file, if it is the name of an existing test configuration it’s assumed to be a test name, and if neither of those are true, it is assumed to be a host name. The :option:`-i` and :option:`-H` switches can be used to explicitly specify the interpretation of an argument. Invocation ---------- **flent** [*options*\ ] *<host\|test\|input file* ...\ *>* General options --------------- .. option:: -o OUTPUT, --output=OUTPUT File to write processed output to (default standard out). .. option:: -D DATA_DIR, --data-dir=DATA_DIR Directory to store data files in. Defaults to the current directory. .. option:: -i INPUT, --input=INPUT File to read input from (instead of running tests). Input files can also be specified as unqualified arguments without using the :option:`-i` switch. .. option:: -f FORMAT, --format=FORMAT Select output format (plot, csv, org\_table, stats). Default is no processed output (just writes the JSON data file). .. option:: -p PLOT, --plot=PLOT Select which plot to output for the given test (implies :option:`-f` plot). Use the :option:`--list-plots` option to see available plots. .. option:: -t TITLE, --title-extra=TITLE Text to add to plot title and data file name. .. option:: -n NOTE, --note=NOTE Add arbitrary text as a note to be stored in the JSON data file (under the *NOTE* key in the metadata object). .. option:: -r RCFILE, --rcfile=RCFILE Load configuration data from *RCFILE* (default *~/.flentrc*). See section below for information on the rc file format. .. option:: -x, --extended-metadata Collect extended metadata and store it with the data file. May include details of your machine you don’t want to distribute; see the section on the data format below. .. option:: --remote-metadata=HOSTNAME Collect extended metadata from a remote host. *HOSTNAME* is passed verbatim to ssh, so can include hosts specified in ~/.ssh/config. Note that gathering the data can take some time, since it involves executing several remote commands. This option can be specified multiple times and implies :option:`--extended-metadata`. .. option:: --gui Run the flent GUI. All other options are used as defaults in the GUI, but can be changed once it is running. The GUI can also be started by running the :command:`flent-gui` binary. For more information on the GUI, see the :doc:`gui` section. .. option:: --new-gui-instance Start a new GUI instance. Otherwise, flent will try to connect to an already running GUI instance and have that load any new data files specified as arguments. Implies :option:`--gui` when passed on the command line, but not when set in the rc file. Note that when multiple GUI instances are running, there is no guarantee as to which instance will get a subsequent open request (if run again without :option:`--new-gui-instance`). .. option:: --gui-no-defer Normally, the GUI defers redrawing plots until they are needed to avoid redrawing all open plots every time an option changes. This switch turns off that optimisation in favour of always redrawing everything straight away. This is useful when loading a bunch of plots from the command line and then wanting to flip through them without drawing delay. .. option:: -b BATCH_NAME, --batch-name=BATCH_NAME Run test batch BATCH\_NAME (must be specified in a batch file loaded by the :option:`--batch-file` option). Can be supplied multiple times. .. option:: -B BATCH_FILE, --batch-file=BATCH_FILE Load batch file BATCH_FILE. Can be specified multiple times, in which case the files will be combined (with identically-named sections being overridden by later files). See appropriate section below for an explanation of the batch file format. .. option:: --batch-override=key=value Override parameter ’key’ in the batch config and set it to ’value’. The key name will be case folded to lower case. Can be specified multiple times. .. option:: --batch-dry-run Dry batch run. Prints what would be done, but doesn’t actually run any tests. .. option:: --batch-verbose Be verbose during batch run: Print all commands executed. .. option:: --batch-no-shuffle Do not randomise the order of test runs within each batch. .. option:: --batch-repetitions=REPETITIONS Shorthand for :option:`--batch-override` ``'repetitions=REPETITIONS’``. .. option:: --batch-title=TITLE Shorthand for :option:`--batch-override` ``'batch_title=TITLE’``. .. option:: --batch-resume=DIR Try to resume a previously interrupted batch run. The argument is the top-level output directory from the previous run. This will attempt to find a data file in the resume directory and load the BATCH_TIME from the previous run from that and continue. The assumption is that the output directory and filenames are generated from the batch time, so that they will match with the previous run when the same time is used. Then, tests for which data files already exist will be skipped on this run. If the rest of the batch invocation is different from the one being resumed, results may not be what you want. There's a check to ensure that the generated output path is a subdirectory of the resume directory, and the whole run will be aborted if it isn't. Test configuration options -------------------------- These options affect the behaviour of the test being run and have no effect when parsing input files. .. option :: -H HOST, --host=HOST Host to connect to for tests. For tests that support it, multiple hosts can be specified by supplying this option multiple times. Hosts can also be specified as unqualified arguments; this parameter guarantees that the argument be interpreted as a host name (rather than being subject to auto-detection between input files, hostnames and test names). .. option:: --local-bind=IP Local hostname or IP address to bind to (for test tools that support this). Can be specified multiple times for tests that connect to more than one host; if it is, it must be specified as many times as there are hosts. .. option:: --remote-host=idx=HOSTNAME A remote hostname to connect to when starting a test. The idx is the runner index, which is assigned sequentially to each *runner* (and so it is *not* the same as the sequence of hostnames). Look for the 'IDX' key in SERIES_META for a test get the idx used here, but note that the idx assignment depends on the exact arguments to the test. This works by simply prepending 'ssh HOSTNAME' to the runner command, so it relies on the same binaries being in the same places on both machines, and won't work for all runners. This option can be specified multiple times to have multiple runners run on remote hosts. .. option:: -l LENGTH, --length=LENGTH Base test length (some tests may add some time to this). .. option:: -s STEP_SIZE, --step-size=STEP_SIZE Measurement data point step size. .. option:: -d DELAY, --delay=DELAY Number of seconds to delay parts of test (such as bandwidth loaders). .. option:: -4, --ipv4 Use IPv4 for tests (some tests may ignore this). .. option:: -6, --ipv6 Use IPv6 for tests (some tests may ignore this). .. option:: --socket-timeout=SOCKET_TIMEOUT Socket timeout (in seconds) used for UDP delay measurement, to prevent stalls on packet loss. Only enabled if the installed netperf version is detected to support this (requires SVN version of netperf). For the default value, see the output of flent :option:`-h`. The value of this parameter is an implicit upper bound on how long a round-trip time that can be measured. As such you may need to adjust it if you are experiencing latency above the default value. Set to 0 to disable. .. option:: --send-size=SEND_SIZE Send size (in bytes) used for TCP tests. Netperf uses the socket buffer size by default, which if too large can cause spikes in the throughput results. Lowering this value will increase CPU usage but also improves the fidelity of the throughput results without having to decrease the socket buffer size. Can be specified multiple times, with each value corresponding to a stream of a test. If only specified once, the same value will be applied to all flows. .. option:: --test-parameter=key=value Arbitrary test parameter in key=value format. Key will be case folded to lower case. The values are stored with the results metadata, and so can be used for storing arbitrary information relevant for a particular test run. In addition to serving as simple metadata, the test parameters can also affect the behaviour of some test configurations. See the :doc:`tests` section for information on these. This option can be specified multiple times to set multiple test parameters. .. option:: --swap-up-down Switch upstream and downstream directions for data transfer. This means that ’upload’ will become ’download’ and vice versa. Works by exchanging netperf ``TCP_MAERTS`` and ``TCP_STREAM`` parameters, so only works for tests that employ these as their data transfer, and only for the TCP streams. .. option:: --socket-stats Parse socket stats during test. This will capture and parse socket statistics for all TCP upload flows during a test, adding TCP cwnd and RTT values to the test data. Requires the 'ss' utility to be present on the system, and can fail if there are too many simultaneous upload flows; which is why this option is not enabled by default. .. option:: --marking-name Define a new symbolic name that can be used when specifying flow markings using the 'markings' test parameter. This can be used to make it easier to specify custom diffserv markings on flows by using symbolic names for each marking value instead of the hex codes. Values specified here will be used in addition to the common values (listed below), and cannot override the built-in names. Names will be case-folded when matching. The list of symbolic markings natively supported, along with their hex expansions, are:: AF11: 0x28 CS0: 0x00 AF12: 0x30 CS1: 0x20 AF13: 0x38 CS2: 0x40 AF21: 0x48 CS3: 0x60 AF22: 0x50 CS4: 0x80 AF23: 0x58 CS5: 0xa0 AF31: 0x68 CS6: 0xc0 AF32: 0x70 CS7: 0xe0 AF33: 0x78 EF: 0xb8 AF41: 0x88 AF42: 0x90 AF43: 0x98 Note that the hexadecimal values denote the value of the full ToS byte (including the two ECN bits), so they need to be right-shifted by two bits to get the corresponding diffserv code points. Plot configuration options -------------------------- These options are used to configure the appearance of plot output and only make sense combined with :option:`-f` *plot*. .. option:: --label-x=LABEL .. option:: --label-y=LABEL Override the figure axis labels. Can be specified twice, corresponding to figures with multiple axes. .. option:: -I, --invert-latency-y Invert latency data series axis (typically the Y-axis), making plots show ’better' values upwards. .. option:: -z, --zero-y Always start Y axis of plot at zero, instead of autoscaling the axis. Autoscaling is still enabled for the upper bound. This also disables log scale if enabled. .. option:: --log-scale={log2,log10} Use the specified logarithmic scale on plots. .. option:: --norm-factor=FACTOR Data normalisation factor. Divide all data points by this value. Can be specified multiple times, in which case each value corresponds to a data series. .. option:: --bounds-x=BOUNDS .. option:: --bounds-y=BOUNDS Specify bounds of the plot axes. If specifying one number, that will become the upper bound. Specify two numbers separated by a comma to specify both upper and lower bounds. To specify just the lower bound, add a comma afterwards. Can be specified twice, corresponding to figures with multiple axes. .. option:: -S, --scale-mode Treat file names (except for the first one) passed as unqualified arguments as if passed as :option:`--scale-data` (default as if passed as :option:`--input`). .. option:: --concatenate Concatenate multiple result sets into one data series. This means that each data file will have its time axis shifted by the preceding series duration and appended to the first data set specified. Only works for data sets from the same test, obviously. .. option:: --absolute-time Plot data points with absolute UNIX time on the x-axis. This requires the absolute starting time for the test run to be stored in the data file, and so it won’t work with data files that predates this feature. .. option:: --subplot-combine When plotting multiple data series, plot each one on a separate subplot instead of combining them into one plot. This mode is not supported for all plot types, and only works when :option:`--scale-mode` is disabled. .. option:: --skip-missing-series Skip missing series entirely from bar plots, instead of leaving an empty space for it. .. option:: --no-print-n Do not print the number of data points on combined plots. When using plot types that combines results from several test runs, the number of data series in each combined data point is normally added after the series name, (n=X) for X data series. This option turns that off. .. option:: --no-annotation Exclude annotation with hostnames, time and test length from plots. .. option:: --figure-note=NOTE, --fig-note=NOTE Add a note (arbitrary text) to the bottom-left of the figure. .. option:: --no-title Exclude title from plots. .. option:: --override-title=TITLE Override plot title with this string. Completely discards the configured title (from the test configuration), as well as the title stored in the data set, and replaces it with the value supplied here. This is useful to override the plot title *at the time of plotting*, for instance to add a title to an aggregate plot from several data series. When this parameter is specified, :option:`--no-title` has no effect. .. option:: --no-labels Hides tick labels from box and bar plots. .. option:: --no-markers Don’t use line markers to differentiate data series on plots. .. option:: --no-legend Exclude legend from plots. .. option:: --horizontal-legend Place a horizontal legend below the plot instead of a vertical one next to it. Doesn't always work well if there are too many items in the legend. .. option:: --legend-title=LEGEND_TITLE Override legend title on plot. .. option:: --legend-placement=LEGEND_PLACEMENT Control legend placement. Enabling this option will place the legend inside the plot at the specified location. Can be one of 'best', 'upper right', 'upper left', 'lower left', 'lower right', 'right', 'center left', 'center right', 'lower center', 'upper center' or 'center'. .. option:: --legend-columns=LEGEND_COLUMNS Set the number of columns in the legend. .. option:: --reverse-legend Reverse the order of items in the legend. This can be useful to make the legend order match the data series in some cases. .. option:: --filter-legend Filter legend labels by removing the longest common substring from all entries. This is not particularly smart, so use with care. .. option:: --replace-legend=src=dest Replace 'src' with 'dst' in legends. Can be specified multiple times. .. option:: --filter-regexp=REGEXP Filter the plot legend by the supplied regular expression (removing any text from the legend that matches the expression). Can be specified multiple times, in which case the filters will be applied in the order specified. Note that for combining several plot results, the regular expression is also applied before the grouping logic, meaning that a too wide filter can mess up the grouping. .. option:: --override-label=LABEL Override dataset label. Can be specified multiple times when multiple datasets are being plotted, in which case the order of labels corresponds to the order of datasets. Like :option:`--override-title`, this is applied *at the time of plotting*. .. option:: --filter-series=SERIES Filter out specified series from plot. Can be specified multiple times. .. option:: --split-group=LABEL Split data sets into groups when creating box plots. Specify this option multiple times to define the new groups; the value of each option is the group name. Say you're plotting nine datasets which are really testing two variables with three values each. In this case, it can be useful to have the box plot of the results be split into three parts (corresponding to the values of one variable) with each three boxes in each of them (corresponding to the values of the second variable). This option makes this possible; simply specify it three times with the labels to be used for the three groups. A constraint on this option is that the number of datasets being plotted must be divisible by the number of groups. .. option:: --colours=COLOURS Comma-separated list of colours to be used for the plot colour cycle. Can be specified in any format understood by matplotlib (including HTML hex values prefixed with a #). Yes, this option uses British spelling. No, American spelling is not supported. .. option:: --override-colour-mode=MODE Override colour_mode attribute. This changes the way colours are assigned to bar plots. The default is 'groups' which assigns a separate colour to each group of data series. The alternative is 'series' which assigns a separate colour to each series, repeating them for each data group. .. option:: --override-group-by=GROUP Override the ``group_by`` setting for combination plots. This is useful to, for instance, switch to splitting up combined data sets by batch run instead of by file name. .. option:: --combine-save-dir=DIRNAME When doing a combination plot save the intermediate data to ``DIRNAME``. This can then be used for subsequent plotting to avoid having to load all the source data files again on each plot. .. option:: --figure-width=FIG_WIDTH Figure width in inches. Used when saving plots to file and for default size of the interactive plot window. .. option:: --figure-height=FIG_HEIGHT Figure height in inches. Used when saving plots to file and for default size of the interactive plot window. .. option:: --figure-dpi=FIG_DPI Figure DPI. Used when saving plots to raster format files. .. option:: --fallback-layout Use the fallback layout engine (tight_layout built in to matplotlib). Use this if text is cut off on saved figures. The downside to the fallback engine is that the size of the figure (as specified by :option:`--figure-width` and :option:`--figure-height`) is no longer kept constant.) .. option:: --no-matplotlibrc Don’t load included matplotlibrc values. Use this if autodetection of custom matplotlibrc fails and flent is inadvertently overriding rc values. .. option:: --no-hover-highlight Don't highlight data series on hover in interactive plot views. Use this if redrawing is too slow, or the highlighting is undesired for other reasons. .. option:: --scale-data=SCALE_DATA Additional data files to consider when scaling the plot axes (for plotting several plots with identical axes). Note, this displays only the first data set, but with axis scaling taking into account the additional data sets. Can be supplied multiple times; see also :option:`--scale-mode`. Test tool-related options ------------------------- .. option:: --control-host=HOST Hostname for the test control connection (for test tools that support this). Default: First hostname of test target. When running tests that uses D-ITG as a test tool (such as the voip-\* tests), this switch controls where flent will look for the D-ITG control server (see section below on running tests with D-ITG). For Netperf-based tests, this option is passed to Netperf to control where to point the control connection. This is useful to, for instance, to run the control server communication over a separate control network so as to not interfere with test traffic. There is also a per-flow setting for this for tests that connect to multiple hosts; see the `control_hosts` test parameter in :doc:`tests`. If both are set, the per-flow setting takes precedence for those tests that use it. .. option:: --control-local-bind=IP Local hostname or IP to bind control connection to (for test tools that support it; currently netperf). If not supplied, the value for :option:`--local-bind` will be used. Note that if this value is passed but :option:`--local-bind` is *not*, netperf will use the value specified here to bind the data connections to as well. .. option:: --netperf-control-port=PORT Port for Netperf control server. Default: 12865. .. option:: --ditg-control-port=PORT Port for D-ITG control server. Default: 8000. .. option:: --ditg-control-secret=SECRET Secret for D-ITG control server authentication. Default: ’’. .. option:: --http-getter-urllist=FILENAME When running HTTP tests, the http-getter tool is used to fetch URLs (see https://github.com/tohojo/http-getter). This option specifies the filename containing the list of HTTP URLs to get. Can also be a URL, which will then be downloaded as part of each test iteration. If not specified, this is set to http://<hostname>/filelist.txt where <hostname> is the first test hostname. .. option:: --http-getter-dns-servers=DNS_SERVERS DNS servers to use for http-getter lookups. Format is host[:port][,host[:port]]... This option will only work if libcurl supports it (needs to be built with the ares resolver). Default is none (use the system resolver). .. option:: --http-getter-timeout=MILLISECONDS Timeout for HTTP connections. Default is to use the test length. .. option:: --http-getter-workers=NUMBER Number of workers to use for getting HTTP urls. Default is 4. .. option:: --irtt-sampling-interval=MILLISECONDS Override the sampling interval passed to irtt, in milliseconds. Can be used to run irtt with a higher sampling frequency than the rest of the test. If set, this will override the sampling interval for all instances of irtt used in the test. Misc and debugging options: --------------------------- .. option:: -L LOG_FILE, --log-file=LOG_FILE Write debug log (test program output) to log file. .. option:: --list-tests List available tests and exit. .. option:: --list-plots List available plots for selected test and exit. .. option:: -V, --version Show Flent version information and exit. .. option:: -v, --verbose Enable verbose logging to console. .. option:: -q, --quiet Disable normal logging to console (and only log warnings and errors). .. option:: --debug-error Print full exception backtraces to console. .. option:: -h, --help Show usage help message and exit. Signals ------- Flent will abort what it is currently doing on receiving a **SIGINT** -- this includes killing all runners, cleaning up temporary files and shutting down as gracefully as possible. Runners are killed with **SIGTERM** in this mode, and their output is discarded. If a batch run is in progress, the current test will be interrupted in this way, and the rest of the batch run is aborted. Previously completed tests and their results are not aborted. Post-commands marked as ’essential’ will be run after the test is interrupted. Additionally, flent converts **SIGTERM** into **SIGINT** internally and reacts accordingly. Upon receiving a **SIGUSR1**, flent will try to gracefully abort the test it is currently running, and parse the output of the runners to the extent that any such output exists. That is, each runner will be killed by a **SIGINT**, which will cause a graceful shutdown for at least ping and netperf (although netperf running in *TCP_MAERTS* mode will bug out when interrupted like this, so end-of-tests statistics will be missing). Flent will only react once to a **SIGUSR1**, sending exactly one **SIGINT** to the active runners, then wait for them to exit. This may take several seconds in the case of netperf. If the runners for some reason fail to exit, flent will be stuck and will need to be killed with **SIGINT**. If running in batch mode, **SIGUSR1** will only affect the currently running test; subsequent tests will still be run. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/doc/output-formats.rst������������������������������������������������������������������0000664�0000000�0000000�00000004213�14670056262�0017143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Output Formats ============== The following output formats are currently supported by Flent: Plot output (:option:`-f plot<-f>`) ----------------------------------- Output test data as one of a series of graphical plots of timeseries data or summarised as a CDF plot. Each test supplies a number of different plots; the list of plots for a given test is output by the :option:`--list-plots` switch (which must be supplied along with a test name). The plots are drawn by matplotlib, and can be displayed on the screen interactively (requires a graphical display), or output to a file in svg, pdf, ps and png formats. Using the :option:`-o` switch turns out file output (the file format is inferred from the file name), while not supplying the switch turns on the interactive plot viewer. Tabulated output (:option:`-f csv<-f>` and :option:`-f org_table<-f>`) ---------------------------------------------------------------------- These formats output the numeric data in a tabulated format to be consumed by other applications. The *csv* output format is a comma-separated output that can be imported into e.g. spreadsheets, while *org_table* outputs a tabulated output in the table format supported by Emacs org mode. The data is output in text format to standard output, or written to a file if invoked with the :option:`-o` parameter. Statistics output (:option:`-f stats<-f>`) ------------------------------------------ This output format outputs various statistics about the test data, such as total bandwidth consumed, and various statistical measures (min/max/mean/median/std dev/variance) for each data source specified in the relevant test (this can include some data sources not includes on plots). The data is output in text format to standard output, or written to a file if invoked with the :option:`-o` parameter. Metadata output (:option:`-f metadata<-f>`) ------------------------------------------- This output format outputs the test metadata as pretty-printed JSON (also suitable for human consumption). It is output as a list of objects, where each object corresponds to the metadata of one test. Mostly useful for inspecting metadata of stored data files. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/doc/quickstart.rst����������������������������������������������������������������������0000664�0000000�0000000�00000007110�14670056262�0016323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Installing Flent ---------------- Installing Flent can be done in several ways, depending on your operating system: - **Debian and Ubuntu:** .. code-block:: bash apt install flent - **Fedora:** .. code-block:: bash dnf install flent - **Gentoo:** .. code-block:: bash emerge net-analyzer/flent - **Ubuntu pre-18.04:** Add the `tohojo/flent PPA <https://launchpad.net/~tohojo/+archive/ubuntu/flent>`_. - **Arch Linux:** Install Flent from `the AUR <https://aur.archlinux.org/packages/flent>`_. - **Other Linux:** Install from the `Python Package Index <https://pypi.python.org/pypi/flent>`_: .. code-block:: bash pip install flent - **FreeBSD:** Install the package .. code-block:: bash pkg install flent Or install the port .. code-block:: bash cd /usr/ports/net/flent && make install - **macOS:** `Homebrew <https://brew.sh/>`_ and Python 3 must be installed (Python 3 can be installed using Homebrew) Install the `patched netperf package <https://github.com/kris-anderson/homebrew-netperf>`_ .. code-block:: bash brew tap kris-anderson/netperf brew install netperf-enable-demo Install other dependencies .. code-block:: bash brew install fping pip3 install matplotlib --user Install Flent using pip .. code-block:: bash pip3 install flent --user Optional (install this if you want to use `flent-gui`) .. code-block:: bash pip3 install pyqt5 qtpy --user Quick start ----------- You must run netperf on two computers - a **server** and a **client**. #. **Server (Computer 1):** Netperf needs to be started in "server mode" to listen for commands from the Client. To do this, install netperf on the Server computer, then enter: ``netserver &`` *Note:* Instead of installing netperf on a local server, you may substitute the netserver that is running on netperf.bufferbloat.net by using :option:`-H netperf.bufferbloat.net<-H>` in the commands below. List of public hosts you can test against: - netperf.bufferbloat.net (also called netperf-east.bufferbloat.net) - netperf-west.bufferbloat.net - netperf-eu.bufferbloat.net #. **Client (Computer 2):** Install netperf, then install flent on your Client computer. When you invoke flent on the Client, it will connect to the specified netserver (:option:`-H`) and carry out the measurements. Here are some useful commands: - RRUL: Create the standard graphic image used by the Bufferbloat project to show the down/upload speeds plus latency in three separate charts:: flent rrul -p all_scaled -l 60 -H address-of-netserver -t text-to-be-included-in-plot -o filename.png - CDF: A Cumulative Distribution Function plot showing the probability that ping times will be below a bound:: flent rrul -p ping_cdf -l 60 -H address-of-netserver -t text-to-be-included-in-plot -o filename.png - TCP Upload: Displays TCP upload speed and latency in two charts:: flent tcp_upload -p totals -l 60 -H address-of-netserver -t text-to-be-included-in-plot -o filename.png - TCP Download: Displays TCP download speeds and latency in two charts:: flent tcp_download -p totals -l 60 -H address-of-netserver -t text-to-be-included-in-plot -o filename.png The output of each of these commands is a graphic (PNG) image along with a data file in the current working directory that can be used to re-create the plot, either from the command line (see :doc:`options`), or by loading them into the GUI. Run :command:`flent-gui` to start the GUI. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/doc/short-intro.rst���������������������������������������������������������������������0000664�0000000�0000000�00000004726�14670056262�0016433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Introduction ============ Flent is a wrapper around *netperf* and similar tools to run predefined tests and aggregate and plot the results. It defines several tests that can be run against one or more hosts, primarily targeted at testing for the presence of bufferbloat under various conditions. The aggregated data is saved in (gzipped) JSON format for later processing and/or import into other tools. The JSON format is documented below. Apart from the JSON format, the data can be output as csv values, emacs org mode tables or plots. Each test can specify several different plots, including time-series plots of the values against each other, as well as CDF plots of (e.g.) ping times. Plots can be output to the formats supported by matplotlib by specifying the output filename with :option:`-o` *output.{png,ps,pdf,svg}*. If no output file is specified, the plot is displayed using matplotlib’s interactive plot browser, which also allows saving of the output (in .png format). Requirements ------------ Flent runs on Python, versions 2.7+ and 3.3+. Plotting requires a functional :py:mod:`matplotlib` installation (but everything else can run without :py:mod:`matplotlib`). For the interactive plot viewer, a graphical display (and suitably configured :py:mod:`matplotlib`) is required. Most tests employ the :command:`netperf` benchmarking tool to run the tests. Version 2.6 or higher is required, and netperf must be compiled with the :command:`--enable-demo` option passed to :command:`./configure`. Some tests use iperf in addition to, or instead of netperf. Both tools must be available in the :envvar:`PATH`. For ICMP ping measurements, the version of ping employed must support output timestamping (the -D parameter to GNU ping). This is not supported by the BSD and OSX versions of ping. As an alternative to the regular ping command, the :command:`fping` utility (see http://fping.org) can be employed. In that case fping must be version 3.5 or greater. Flent will attempt to detect the presence of fping in the :envvar:`PATH` and check for support for the -D parameter. If this check is successful, :command:`fping` will be employed for ping data, otherwise the system ping will be used. The :command:`irtt` tool is highly recommended for UDP measurements. See https://github.com/peteheist/irtt. Flent will automatically detect if irtt is available in the :envvar:`PATH` and use it if it is detected. Note that the server component of irtt needs to be running on the target host(s) as well. ������������������������������������������flent-2.2.0/doc/tests.rst���������������������������������������������������������������������������0000664�0000000�0000000�00000017276�14670056262�0015311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Supplied Tests ============== Test are supplied as Python files and can specify commands to run etc. For a full list of the tests supported by flent, see the :option:`--list-tests` option. The Realtime Response Under Load (RRUL) test -------------------------------------------- This test exists in a couple of variants and is a partial implementation of the RRUL specification as written by Dave Taht (see https://www.bufferbloat.net/projects/bloat/wiki/RRUL_Spec/). It works by running RTT measurement using ICMP ping and UDP roundtrip time measurement, while loading up the link with eight TCP streams (four downloads, four uploads). This quite reliably saturates the measured link (wherever the bottleneck might be), and thus exposes bufferbloat when it is present. Simple TCP flow tests --------------------- These tests combine a TCP flow (either in one direction, or both) with an ICMP ping measurement. It’s a simpler test than RRUL, but in some cases the single TCP flow can be sufficient to saturate the link. UDP flood test -------------- This test runs *iperf* configured to emit 100Mbps of UDP packets targeted at the test host, while measuring RTT using ICMP ping. It is useful for observing latency in the face of a completely unresponsive packet stream. Test parameters --------------- Some test parameters (set with :option:`--test-parameter`) affect the way tests behave. These are: .. envvar:: upload_streams .. envvar:: download_streams .. envvar:: bidir_streams These set the number of streams for the tests that are configurable. The ``tcp_nup``, ``tcp_ndown`` and ``rrul_be_nflows`` tests understand ``upload_streams`` and ``download_streams``, while the ``rrul_var`` test understands ``bidir_streams``. If any of these parameter is set to the special value ``num_cpus`` the number of streams will be set to the number of CPUs on the system (if this information is available). .. envvar:: tcp_cong_control Set the congestion control used for TCP flows, for platforms that supports setting it. This can be specified as a simple string to set the same value for upstream and downstream, or two comma-separated values to set it separately for the upstream and downstream directions. On Linux, any value in the sysctl ``net.ipv4.tcp_allowed_congestion_control`` can be used. If a congestion control is specified that is not available on the system running the test, setting it will simply fail. In addition, some tests override the congestion control for one or more flows. The actual congestion control used is stored in the ``CONG_CONTROL`` per-test metadata field. .. envvar:: udp_bandwidth .. envvar:: udp_bandwidths .. envvar:: udp_pktsize .. envvar:: udp_pktsizes This sets the bandwidth and packet size of each UDP stream in the ``udp_*`` tests. The option is passed to ``iperf`` so can be in any syntax the iperf understands (e.g. ``20M`` for 20 Mbps). When running multiple UDP streams use the plural versions of the options (``udp_bandwidths`` and ``udp_pktsizes``) to specify individual per-stream values (comma-separated per stream), or the singular versions to specify the same value for all streams. .. envvar:: burst_length .. envvar:: burst_ports .. envvar:: burst_psize .. envvar:: burst_tos These set the length, number of ports to use, packet size and TOS value for the packet bursts generated in the ``burst*`` tests. .. envvar:: cpu_stats_hosts .. envvar:: netstat_hosts .. envvar:: qdisc_stats_hosts .. envvar:: wifi_stats_hosts These set hostnames to gather statistics from from during the test. The hostnames are passed to SSH, so can be anything understood by SSH (including using ``username@host`` syntax, or using hosts defined in ``~/.ssh/config``). This will attempt to run remote commands on these hosts to gather the required statistics, so passwordless login has to be enabled for. Multiple hostnames can be specified, separated by commas. CPU stats and netstat output is global to the machine being connected to. The qdisc and WiFi stats need extra parameters to work. These are ``qdisc_stats_interfaces``, ``wifi_stats_interfaces`` and ``wifi_stats_stations``. The two former specify which interfaces to gather statistics from. These are paired with the hostnames, and so must contain the same number of elements (also comma-separated) as the ``_hosts`` variables. To specify multiple interfaces on the same host, duplicate the hostname. The ``wifi_stats_stations`` parameter specifies MAC addresses of stations to gather statistics for. This list is the same for all hosts, but only stations present in debugfs on each host are actually captured. The qdisc stats gather statistics output from ``tc -s``, while the WiFi stats gather statistics from debugfs. These are gathered by looping in a shell script; however, for better performance, the ``tc_iterate`` and ``wifistats_iterate`` programmes available in the ``misc/`` directory of the source code tarball can be installed. On low-powered systems this can be critical to get correct statistics. The helper programmes are packaged for LEDE/OpenWrt in the ``flent-tools`` package. .. envvar:: ping_hosts .. envvar:: ping_local_binds .. envvar:: ping_labels These are used to define one or more extra host names that will receive a ping flow while a test is run. The ``ping_hosts`` variable simply specifies hostnames to ping (several can be specified by separating them with commas). The ``ping_local_binds`` variable sets local IP address(es) to bind to for the extra ping flows. If specified, it must contain the same number of local addresses as the number of ping hosts. The same local address can be specified multiple times, however. The ``ping_labels`` variable is used to label each of the ping flows; if not specified, Flent will create a default label based on the target hostname for each flow. .. envvar:: voip_host .. envvar:: voip_local_bind .. envvar:: voip_control_host .. envvar:: voip_marking Similar to the ping variants above, these parameters specify a hostname that will receive a VoIP test. However, unlike the ping parameters, only one hostname can be specified for VoIP tests, and that end-host needs to have either D-ITG (and the control server) or the IRTT server running. The marking setting controls which DiffServ marking is applied to the VoIP flow and defaults to no marking being set. .. envvar:: control_hosts Hostnames to use for the control connections for the ``rtt_fair*`` tests. Comma-separated. If specified, it must contain as many hostnames as the number of target hostnames specified for the test. .. envvar:: markings .. envvar:: labels Flow markings to use for each of the flows in the ``rtt_fair*`` tests. Comma-separated values of markings understood by Netperf (such as "CS0"). Only supports setting the same marking on both the upstream and downstream packets of each flow (so no "CS0,CS0" setting as can be used for Netperf). If not set, defaults to CS0 (best effort). If set, each value corresponds to a flow, and any extra flows will be set to CS0. By default each flow will be labelled according to its marking; to override these labels, use the ``labels`` parameter. .. envvar:: stream_delays Specify a per-stream delay (in seconds) for the different streams started up by a test. Use commas to separate values for the different streams. This can be used to create tests with staggered start times, for example to test TCP flow startup convergence times. What exactly constitutes a stream depends on the test. For example, the rtt_fair* tests considers each hostname a stream, whether or not there is one or two flows going to that host. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent-mime.xml��������������������������������������������������������������������������0000664�0000000�0000000�00000001535�14670056262�0015416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> <mime-type type="application/x-compressed-json"> <comment>Compressed JSON data</comment> <sub-class-of type="application/gzip"/> <glob pattern="*.json.gz"/> </mime-type> <mime-type type="application/vnd.flent.data+json"> <comment>Flent data file</comment> <glob pattern="*.flent"/> </mime-type> <mime-type type="application/vnd.flent.data.gzip"> <comment>Flent data file (gzipped)</comment> <sub-class-of type="application/gzip"/> <glob pattern="*.flent.gz"/> </mime-type> <mime-type type="application/vnd.flent.data.bzip2"> <comment>Flent data file (bzipped)</comment> <sub-class-of type="application/x-bzip2"/> <glob pattern="*.flent.bz2"/> </mime-type> </mime-info> �������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent-paper.batch�����������������������������������������������������������������������0000664�0000000�0000000�00000012735�14670056262�0016063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- mode:conf -*- # This is a fully functional example of a batch fild. It was used to perform the # experiments in the paper describing Flent. The paper is called simply "Flent: # The FLExible Network Tester". See https://www.cs.kau.se/tohojo/flent/ and # http://urn.kb.se/resolve?urn=urn%3Anbn%3Ase%3Akau%3Adiva-64766 # # The batch file is parsed as an ini file, and can have three types of sections: # commands, batches and args. Each section also has a name. Type and name are # separated with two colons. # # Sections of the same type can inherit from each other. Args are used for the # loop facility (explained below). All variables are recursively substituted by # using the ${varname} syntax. These three operations are resolved in this order # (inheritance, arg interpolation and variable substitution). # Setup command to be run before each test run. The script is simply: ### Start script setup_qdisc.sh # #!/bin/sh # # set -o errexit # set -o nounset # # IFACE=enp5s0 # QDISC=$1 # sudo ethtool -K $IFACE gso off tso off gro off # sudo sysctl -w net.ipv4.tcp_no_metrics_save=1 # sudo tc qdisc replace dev $IFACE root $QDISC ### End script setup_qdisc.sh # # The user running Flent must have sufficient permissions to run the sudo # commands specified, and the IFACE needs to be adjusted to match the system. [Command::setup_qdisc] exec = ./setup_qdisc.sh ${qdisc} type = pre # An essential pre command will cause the test to be aborted if it fails # (returncode non-zero) essential = yes # A 'batch' is a named test to be run. It can specify normal Flent parameters as # well as any other variables that can be used for substitution. When executing # Flent in batch mode, -B specifies the batch file (this file), while -b # specified which batch to run. The special argument ALL to -b will run all # defined batches that are not set as inactive. # # Batches can inherit from each other, so it can be a good idea to have a # 'global' batch that sets most parameters, and then override things in # sub-batches. [Batch::global] # These are all Flent parameters that correspond to command line options. extended_metadata = yes socket_stats = yes debug_error = yes debug_log = yes title = ${batch_title} qdisc:${qdisc} cc:${cc} rep:${repetition} output_path = batch-${batch_time}-${batch_title}/${batch_name} ip_version = 4 length = 140 hosts = netperf-eu.bufferbloat.net test_parameters= tcp_cong_control=${cc}; # This is a special variable that specifies things to *append* to the filename # Flent generates (based on time etc). The first part of the filename will be # the same for every test in a batch, so the idea is to use this variable to # disambiguate subsequent test runs (so putting 'repetition' in there is # generally a good idea). # # The 'repetition' variable is another special variable that will get assigned # the current repetition for each run. filename_extra = ${qdisc}-${cc}-${repetition} # These are the commands to run; must be specified as command type sections # (i.e. this one corresponds to [Command::setup_qdisc] above). commands = setup_qdisc # This is a special variable that causes the test in the batch to be repeated # this many times (setting the ${repetition} variable for each). repetitions = 1 # Special variable - how long to pause after each test run before proceeding to # the next one. pause = 5 # Special variable. A batch can be disabled in two ways: Setting 'disabled=yes' # which does what one would expect, and by setting 'abstract=yes'. The # difference is that when another batch inherits from this one, the value of # 'disabled' is inherited, while the value of 'abstract' isn't. abstract = yes # These are variables that are used for variable expansion in settings above. # The idea is that other batches can override these to change part of the # configuration. batch_title = untitled qdisc = fq # This is the loop mechanism of the batch facility. Each variable that starts # with for_ defines a loop (Flent doesn't care about the part after for_, but # they matter when inheriting). The batch will then be repeated for each of the # values of this variable. Each value must be defined in the batch file as a # heading of type [Arg::name]. The variables in each [Arg] section will then be # applied on top of the batch containing the loop before the test run # corresponding to that arg. # # When multiple for_ statements are present, the cross product of all of them # will be run. Likewise with repetitions (each arg will be repeated as many # times as specified). # # The example here is used to repeat each test run with different congestion # control algorithms. for_cc = cubic, cubic_nopacing, bbr # These are the actual batches that will be run. Each of them just inherits from # 'global' and overrides some variables. [Batch::tcp-upload] inherits = global test_name = tcp_1up_noping disabled = no [Batch::rrul] inherits = global test_name = rrul disabled = no # These are the args used for loops in the batches specified above. The arg name # (the part after ::) is what is put into the for_ variables. Args can inherit # from each other just like batches (but none of these do). In that case, arg # inheritance is performed before the values are interpolated onto the batch. # # These args all just set a single variable (which is then used in the commands # defined at the top of the file). [Arg::cubic_nopacing] cc = cubic # The fq_codel qdisc doesn't do pacing for CUBIC qdisc = fq_codel # This host does not run sch_fq either hosts = vlan820-28.cs.kau.se [Arg::cubic] cc = cubic [Arg::bbr] cc = bbr �����������������������������������flent-2.2.0/flent.appdata.xml�����������������������������������������������������������������������0000664�0000000�0000000�00000002754�14670056262�0016106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <component type="desktop"> <id>flent.desktop</id> <metadata_license>CC-BY-SA-3.0</metadata_license> <project_license>GPL-3.0+</project_license> <name>Flent</name> <summary>The FLExible Network Tester</summary> <description> <p> The FLExible Network Tester is a Python wrapper to run multiple simultaneous netperf/iperf/ping instances and aggregate the results. </p> <p> Tests are specified as config files (which are really Python), and various parsers for tool output are supplied. At the moment, parsers for netperf in -D mode, iperf in csv mode and ping/ping6 in -D mode are supplied, as well as a generic parser for commands that just outputs a single number. </p> <p> Several commands can be run in parallel and, provided they output timestamped values, (which netperf ping and iperf do, the latter with a small patch, available in the misc/ directory), the test data points can be aligned with each other in time, interpolating differences between the actual measurement points. This makes it possible to graph (e.g.) ping times before, during and after a link is loaded. </p> </description> <screenshots> <screenshot type="default"> <image>https://flent.org/_static/flent-screenshot.png</image> </screenshot> </screenshots> <url type="homepage">https://flent.org/</url> <update_contact>toke_at_toke.dk</update_contact> </component> ��������������������flent-2.2.0/flent.desktop���������������������������������������������������������������������������0000664�0000000�0000000�00000000545�14670056262�0015342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Desktop Entry] Type=Application Name=Flent Comment=The FLExible Network Tester Exec=flent --gui %F Icon=applications-internet Categories=Qt;Network; Terminal=false Keywords=network;bufferbloat;performance;testing;rrul; MimeType=application/vnd.flent.data+json;application/vnd.flent.data.gzip;application/vnd.flent.data.bzip2;application/x-compressed-json; �����������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/����������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0013743�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/__init__.py�����������������������������������������������������������������������0000664�0000000�0000000�00000005242�14670056262�0016057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # __init__.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 6 December 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import locale import os import signal import sys # Convert SIGTERM into SIGINT to apply the same shutdown logic. def handle_sigterm(sig, frame): os.kill(os.getpid(), signal.SIGINT) def run_flent(gui=False): if sys.version_info[:2] < (3, 6): sys.stderr.write("Sorry, Flent requires v3.6 or later of Python.\n") sys.exit(1) try: try: locale.setlocale(locale.LC_ALL, '') except locale.Error: pass from flent import batch from flent.settings import load from flent.loggers import setup_console, get_logger setup_console() logger = get_logger(__name__) logger.debug("Flent executed as %s in PID %d", sys.argv, os.getpid()) try: signal.signal(signal.SIGTERM, handle_sigterm) settings = load(sys.argv[1:]) if gui or settings.GUI: from flent.gui import run_gui return run_gui(settings) else: b = batch.new(settings) b.run() except RuntimeError as e: logger.exception(str(e)) except KeyboardInterrupt: try: b.kill() except NameError: pass # Proper behaviour on SIGINT is re-killing self with SIGINT to properly # signal to surrounding shell what happened. # Ref: http://mywiki.wooledge.org/SignalTrap try: signal.signal(signal.SIGINT, signal.SIG_DFL) os.kill(os.getpid(), signal.SIGINT) except: return 1 # Just in case... finally: try: signal.signal(signal.SIGTERM, signal.SIG_DFL) except: pass return 0 def run_flent_gui(): return run_flent(gui=True) __all__ = ['run_flent', 'run_flent_gui'] ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/__main__.py�����������������������������������������������������������������������0000664�0000000�0000000�00000001705�14670056262�0016040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # __main__.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 21 May 2015 # Copyright (c) 2015-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. import sys from multiprocessing import freeze_support from flent import run_flent if __name__ == "__main__": freeze_support() sys.exit(run_flent()) �����������������������������������������������������������flent-2.2.0/flent/aggregators.py��������������������������������������������������������������������0000664�0000000�0000000�00000040451�14670056262�0016626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # aggregators.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 16 October 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import logging import math import pprint import signal import sys import time import resource from collections import OrderedDict from threading import Event, Thread from multiprocessing import Pool, Manager, cpu_count from flent import runners, loggers from flent.util import classname, utcfromtimestamp logger = loggers.get_logger(__name__) def new(settings): cname = classname(getattr(settings, 'AGGREGATOR', 'timeseries'), "Aggregator") if cname not in globals(): raise RuntimeError("Aggregator not found: '%s'" % settings.AGGREGATOR) try: agg = globals()[cname](settings) for s in list(settings.DATA_SETS.items()): agg.add_instance(*s) return agg except Exception as e: raise RuntimeError("Error loading %s: %s." % (cname, e)) def handle_usr1(signal, frame): raise KeyboardInterrupt() class Aggregator(object): """Basic aggregator. Runs all jobs and returns their result.""" def __init__(self, settings): self.instances = OrderedDict() self.threads = OrderedDict() self.settings = settings self.failed_runners = 0 self.runner_counter = 0 self.killed = False self.postprocessors = [] def read_log_queue(self, queue): while True: try: msg = queue.get() logging.getLogger().handle(msg) queue.task_done() except (EOFError, OSError): return def add_instance(self, name, config): instance = dict(config) if name in self.instances: raise RuntimeError("Duplicate runner name: '%s' " "(probably unsupported duplicate " "parameters or hosts)" % name) if 'delay' not in instance: instance['delay'] = 0 idx = self.runner_counter self.runner_counter += 1 instance['idx'] = idx if idx in self.settings.REMOTE_HOSTS: instance['remote_host'] = self.settings.REMOTE_HOSTS[idx] elif '*' in self.settings.REMOTE_HOSTS: instance['remote_host'] = self.settings.REMOTE_HOSTS['*'] else: instance['remote_host'] = None instance['runner'] = runners.get(instance['runner']) instance['start_event'] = None instance['kill_event'] = None instance['finish_event'] = Event() self.instances[name] = instance def check_rlimit(self): ni = len(self.instances) min_f = ni * 4 + 4 min_p = ni + cpu_count() try: nf, nf_h = resource.getrlimit(resource.RLIMIT_NOFILE) np, np_h = resource.getrlimit(resource.RLIMIT_NPROC) except OSError as e: logger.debug("Couldn't get rlimit (%s) - may be harmless, so ignoring", e) if nf != resource.RLIM_INFINITY and nf < min_f: logger.debug("Raising RLIMIT_NOFILE from %d to required minimum %d", nf, min_f) try: resource.setrlimit(resource.RLIMIT_NOFILE, (min_f, nf_h)) except OSError as e: raise RuntimeError(f"Couldn't raise RLIMIT_NOFILE to required " f"{min_f}: {e} - try manually adjusting `ulimit -n`") if np != resource.RLIM_INFINITY and np < min_p: logger.debug("Raising RLIMIT_NPROC from %d to required minimum %d", np, min_p) try: resource.setrlimit(resource.RLIMIT_NPROC, (min_p, np_h)) except OSError: raise RuntimeError(f"Couldn't raise RLIMIT_NPROC to required " f"{min_p}: {e} - try manually adjusting `ulimit -u`") def aggregate(self, results): raise NotImplementedError() def parse_results_parallel(self): with Manager() as mngr: queue = mngr.Queue(10) with Pool(initializer=loggers.set_queue_handler, initargs=(queue, )) as parser_pool: q_thread = Thread(target=self.read_log_queue, args=(queue, ), daemon=True) q_thread.start() res = [] for t in self.threads.values(): res.extend(t.do_parse(parser_pool)) for r in res: r.wait() queue.join() parser_pool.close() parser_pool.join() def parse_results_direct(self): for t in self.threads.values(): t.do_parse(None) def collect(self): """Create a ProcessRunner thread for each instance and start them. Wait for the threads to exit, then collect the results.""" self.check_rlimit() signal.signal(signal.SIGUSR1, handle_usr1) result = {} metadata = {'series': {}, 'test_parameters': {}} raw_values = {} try: for n, i in list(self.instances.items()): if 'run_after' in i: i['start_event'] = self.instances[i['run_after']]['finish_event'] # noqa: E501 if 'kill_after' in i: i['kill_event'] = self.instances[i['kill_after']]['finish_event'] # noqa: E501 t = i['runner'](name=n, settings=self.settings, **i) try: t.check() except runners.RunnerCheckError as e: raise RuntimeError("Runner %s failed check: %s" % (n, e)) self.threads[n] = t # Start in a separate loop once we're sure we successfully created # all runners. To prevent fork() from inheriting all the management # threads, run a separate loop to fork off all threads before # starting the actual supervisor threads afterwards num_forks = 0 test_start = time.monotonic() for t in self.threads.values(): if hasattr(t, "fork"): num_forks += t.fork() fork_end = time.monotonic() logger.debug("Forked %d processes in %f seconds", num_forks, fork_end - test_start) num_threads = 0 for t in self.threads.values(): num_threads += t.start() threads_end = time.monotonic() logger.debug("Started %d threads in %f seconds", num_threads, threads_end - fork_end) for n, t in list(self.threads.items()): t.join() run_end = time.monotonic() logger.debug("Ran test in %f seconds", run_end - threads_end) if sys.platform in ('darwin', 'win32'): logger.debug("Parsing results in main thread on %s platform", sys.platform) self.parse_results_direct() else: logger.debug("Parsing results in parallel on %s platform", sys.platform) self.parse_results_parallel() for t in self.threads.values(): # used by SsRunner to copy over results from duplicate runners # after parsing has completed t.post_parse() parse_end = time.monotonic() logger.debug("Parsing completed in %f seconds", parse_end - run_end) for n, t in self.threads.items(): metadata['series'][n] = t.metadata if t.test_parameters: metadata['test_parameters'].update(t.test_parameters) raw_values[n] = t.raw_values if hasattr(t, 'compute_result'): # The runner is a post-processor(Avg etc), and should be run # as such (by the postprocess() method) self.postprocessors.append(t.compute_result) elif t.result is None: continue elif hasattr(t.result, 'keys'): if not t.result: self.failed_runners += 1 for k in t.result.keys(): key = "%s::%s" % (n, k) result[key] = t.result[k] else: if not t.result: self.failed_runners += 1 result[n] = t.result for c in t.child_results: for k, v in c.items(): key = "%s::%s" % (n, k) if key in result: raise RuntimeError( "Duplicate key '%s' from child runner" % key) result[key] = v compute_end = time.monotonic() logger.debug("Finished post-test computation in %f seconds", compute_end - parse_end) for t in self.threads.values(): t.close() test_end = time.monotonic() logger.debug("Ran full test in %f seconds", test_end - test_start) # logger cache may retain references to runners, so flush it to make # sure they all get freed up loggers.flush_cache() except BaseException: self.kill_runners() raise logger.debug("Runner aggregation finished", extra={'output': pprint.pformat(result)}) signal.signal(signal.SIGUSR1, signal.SIG_DFL) return result, metadata, raw_values def kill_runners(self): if self.killed: return self.killed = True for t in self.threads.values(): t.kill() for t in self.threads.values(): t.join() t.close() def postprocess(self, result): logger.debug("Postprocessing data using %d postprocessors", len(self.postprocessors)) for p in self.postprocessors: result = p(result) return result class IterationAggregator(Aggregator): """Iteration aggregator. Runs the jobs multiple times and aggregates the results. Assumes each job outputs one value.""" def __init__(self, *args, **kwargs): Aggregator.__init__(self, *args, **kwargs) self.iterations = self.settings.ITERATIONS def aggregate(self, results): for i in range(self.iterations): data, metadata, raw_values = self.collect() results.meta('SERIES_META', metadata['series']) results.meta('FAILED_RUNNERS', self.failed_runners) results.raw_values = raw_values if i == 0: results.create_series(data.keys()) results.append_datapoint(i, data) return results class TimeseriesAggregator(Aggregator): """Time series aggregator. Runs the jobs (which are all assumed to output a series of timed entries) and combines the times onto a single timeline, aligning values to the same time steps (interpolating values as necessary). Assumes each job outputs a list of pairs (time, value) where the times and values are floating point values.""" def __init__(self, *args, **kwargs): Aggregator.__init__(self, *args, **kwargs) self.step = self.settings.STEP_SIZE self.max_distance = self.step * 5.0 def aggregate(self, results): measurements, metadata, raw_values = self.collect() if self.killed: logger.debug("Aggregator was killed, skipping aggregation") return results if not measurements: raise RuntimeError("No data to aggregate. Run with -L and check log " "file to investigate.") results.create_series(list(measurements.keys())) results.raw_values = raw_values results.meta('SERIES_META', metadata['series']) results.meta('TEST_PARAMETERS').update(metadata['test_parameters']) results.meta('FAILED_RUNNERS', self.failed_runners) # We start steps at the minimum time value, and do as many steps as are # necessary to get past the maximum time value with the selected step # size first_times = [i[0][0] for i in list(measurements.values()) if i and i[0]] last_times = [i[-1][0] for i in list(measurements.values()) if i and i[-1]] if not (first_times and last_times): raise RuntimeError("No data to aggregate. Run with -L and check log " "file to investigate.") t_0 = min(first_times) t_max = max(last_times) t_total = t_max - t_0 steps = int(math.ceil(t_total / self.step)) if t_total > self.settings.TOTAL_LENGTH * 10: logger.warning("Data shows test duration %fs more than 10 times the expected %ds " "- clock issue or buggy timestamps from test tool?", t_total, self.settings.TOTAL_LENGTH) if steps > 10**6: raise RuntimeError("Refusing to iterate more than 1 million steps during aggregation (got %d)" % steps) results.meta('T0', utcfromtimestamp(t_0)) for s in range(steps): time_label = self.step * s t = t_0 + self.step * s # for each step we need to find the interpolated measurement value # at time t by interpolating between the nearest measurements before # and after t result = {} # n is the name of this measurement (from the config), r is the list # of measurement pairs (time,value) for n, r in list(measurements.items()): max_dist = self.max_distance last = False if not r: continue t_prev = v_prev = None t_next = v_next = None for i in range(len(r)): if r[i][0] > t: if i > 0: t_prev, v_prev = r[i - 1] else: # minimum interpolation distance on first entry to # avoid multiple interpolations to the same value max_dist = self.step * 0.5 t_next, v_next = r[i] break if t_next is None: t_next, v_next = r[-1] last = True if abs(t - t_next) <= max_dist: if t_prev is None: # The first/last data point for this measurement is # after the current t. Don't interpolate, just use the # value. if last and results.last_datapoint(n) in (v_next, None): # Avoid repeating last interpolation result[n] = None else: result[n] = v_next else: # We found the previous and next values; interpolate # between them. We assume that the rate of change dv/dt # is constant in the interval, and so can be calculated # as (v_next-v_prev)/(t_next-t_prev). Then the value v_t # at t can be calculated as v_t=v_prev + # dv/dt*(t-t_prev) dv_dt = (v_next - v_prev) / (t_next - t_prev) result[n] = v_prev + dv_dt * (t - t_prev) else: # Interpolation distance is too long; don't use the value. result[n] = None results.append_datapoint(time_label, result) return results �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/batch.py��������������������������������������������������������������������������0000664�0000000�0000000�00000060670�14670056262�0015407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # batch.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 11 April 2014 # Copyright (c) 2014-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import itertools import os import pprint import random import re import signal import subprocess import sys import time import uuid from datetime import timedelta from fnmatch import fnmatch from collections import OrderedDict try: from configparser import RawConfigParser except ImportError: from ConfigParser import RawConfigParser from flent import aggregators, formatters, resultset, loggers from flent.metadata import record_metadata, record_postrun_metadata from flent.util import clean_path, format_date, token_split, utcnow from flent.settings import parser as SETTINGS_PARSER from flent.settings import _LOG_DEFER # Python2/3 compatibility try: basestring except NameError: basestring = str logger = loggers.get_logger(__name__) def new(settings): return BatchRunner(settings) class BatchRunner(object): _INTERP_REGEX = re.compile(r"(^|[^$])(\$\{([^}]+)\})") _MAX_INTERP = 1000 def __init__(self, settings): self.args = OrderedDict() self.batches = OrderedDict() self.commands = OrderedDict() self.settings = settings self.killed = False self.children = [] self.logfile = self.logfile_debug = None self.tests_run = 0 for f in settings.BATCH_FILES: self.read(f) def read(self, filename): parser = RawConfigParser(dict_type=OrderedDict) read = parser.read(filename) if read != [filename]: raise RuntimeError("Unable to read batch file: %s." % filename) for s in parser.sections(): typ, nam = s.split("::") if typ.lower() == 'arg': self.args[nam.lower()] = OrderedDict(parser.items(s)) elif typ.lower() == 'batch': self.batches[nam.lower()] = OrderedDict(parser.items(s)) elif typ.lower() == 'command': self.commands[nam.lower()] = OrderedDict(parser.items(s)) else: raise RuntimeError("Unknown section type: '%s'." % typ) self.expand_groups() def expand_groups(self): for obj in self.args, self.batches, self.commands: for name, vals in obj.items(): # Expand inheritance if 'inherits' in vals: for inh in [x.strip() for x in reversed(vals['inherits'].split(','))]: if not inh in obj: raise RuntimeError( "%s inherits from non-existent parent %s." % (name, inh)) obj[name] = self.inherit(obj[inh], obj[name]) # Parse boolean options for k, v in obj[name].items(): if isinstance(v, basestring) and v.lower() in ('yes', 'true', 'on'): # noqa: E501 obj[name][k] = True elif isinstance(v, basestring) and v.lower() in ('no', 'false', 'off'): # noqa: E501 obj[name][k] = False def inherit(self, parent, child): new = parent.copy() # Make sure children are not declared abstract. if 'abstract' in new: del new['abstract'] new.update(child) if 'inherits' in parent: new['inherits'] = "%s, %s" % (parent['inherits'], child['inherits']) return new def get_ivar(self, name, ivars, settings): if name in ivars: return str(ivars[name]) elif hasattr(settings, name.upper()): return str(getattr(settings, name.upper())) else: return "$${%s}" % name def interpolate(self, string, ivars, settings=None): """Perform recursive expansion of ${vars}. Works by looking for a string matching the expansion syntax and replacing that with the value of the ivars dict corresponding to the key inside {}. If no key matching key is found, the expansion is escaped (by duplicating the $), to make sure the expansion ends. Cyclic expansions are protected against by capping the number of iterations.""" if not isinstance(string, basestring): return string if settings is None: settings = self.settings ret = string m = self._INTERP_REGEX.search(ret) i = 0 while m is not None: k = m.group(3) ret = ret.replace(m.group(2), self.get_ivar(k, ivars, settings)) m = self._INTERP_REGEX.search(ret) i += 1 if i > self._MAX_INTERP: raise RuntimeError( "Cyclic interpolation (more than %d expansions performed)." % self._MAX_INTERP) return ret.replace("$$", "$") def apply_args(self, values, args={}, settings=None): new = OrderedDict(values) new.update(args) for k, v in new.items(): new[k] = self.interpolate(v, new, settings) return new def commands_for(self, batch, settings=None): if 'commands' not in batch: return [] cmdnames = [i.strip() for i in token_split(batch['commands'])] commands = OrderedDict() while cmdnames: c = cmdnames.pop(0) if not c or c in commands: continue if c not in self.commands: raise RuntimeError("Can't find command '%s' when expanding " "batch command." % c) cmd = self.apply_args(self.commands[c], batch, settings) # Don't include disabled commands if cmd.get('disabled', False) or not cmd.get('enabled', True): continue # Commands can specify extra commands to run; expand those, use the # dictionary to prevent duplicates extra = [i.strip() for i in token_split(cmd.get('extra_commands', '')) if i.strip()] for e in reversed(extra): cmdnames.insert(0, e) commands[c] = cmd return commands.values() def run_command(self, command): cmd = command['exec'].strip() if self.settings.BATCH_VERBOSE: ess = command.get('essential', False) if self.settings.BATCH_DRY: logger.info(" Would run '%s' (%s)", cmd, 'essential' if ess else 'non-essential') else: logger.info(" Running '%s', (%s)", cmd, 'essential' if ess else 'non-essential') if self.settings.BATCH_DRY: return if command['type'] in ('pre', 'post'): try: res = subprocess.check_output(cmd, universal_newlines=True, shell=True, stderr=subprocess.STDOUT) logger.debug("Command '%s' executed successfully.", cmd, extra={'output': res}) except subprocess.CalledProcessError as e: if command.get('essential', False): raise RuntimeError("Essential command '%s' failed. " "Return code: %s.\nOutput:\n %s." % (cmd, e.returncode, "\n ".join(e.output.splitlines()))) else: logger.warning("Command '%s' failed (%d).", cmd, e.returncode, extra={'output': e.output}) elif command['type'] in ('monitor',): proc = subprocess.Popen(cmd, universal_newlines=True, shell=True, stderr=subprocess.STDOUT) self.children.append((proc, command.get('kill', False))) def kill_children(self, force=False): if not self.children: return logger.debug("Killing child processes") for proc, kill in self.children: if kill or force: proc.terminate() else: proc.wait() self.children = [] def run_commands(self, commands, ctype, essential_only=False): for c in commands: if c['type'] == ctype and (not essential_only or c.get('essential', False)): try: self.run_command(c) except: # When running in essential only mode, suppress errors to # make sure subsequent commands don't fail if not essential_only: raise def gen_filename(self, settings, batch, argset, rep): p = ["batch", settings.BATCH_NAME] if self.settings.BATCH_TIMESTAMP: p.append(batch['batch_time']) p.append(batch.get('filename_extra', "%s-%s" % (argset, rep))) return clean_path("-".join(p)) def expand_argsets(self, batch, argsets, batch_time, batch_name, print_status=True, no_shuffle=False): sets = itertools.product(*argsets) if self.settings.BATCH_SHUFFLE and not no_shuffle: sets = list(sets) random.shuffle(sets) for argset in sets: rep = argset[-1] argset = argset[:-1] settings = self.settings.copy() if print_status: logger.info(" args:%s rep:%02d%s", ",".join(argset), rep, " (dry run)" if settings.BATCH_DRY else "") settings.FORMAT = 'null' settings.BATCH_NAME = batch_name settings.BATCH_TIME = batch_time settings.TIME = utcnow() expand_vars = {'repetition': "%02d" % rep, 'batch_time': format_date(settings.BATCH_TIME, fmt="%Y-%m-%dT%H%M%S")} for arg in argset: if arg not in self.args: raise RuntimeError("Invalid arg: '%s'." % arg) expand_vars.update(self.args[arg]) b = self.apply_args(batch, expand_vars, settings) if 'test_name' not in b: raise RuntimeError("Missing test name.") settings.load_rcvalues(b.items(), override=True) settings.NAME = b['test_name'] settings.load_test(informational=True) settings.DATA_FILENAME = self.gen_filename(settings, b, argset, rep) yield b, settings def get_argsets(self, batch): argsets = [] for k in batch.keys(): if k.startswith("for_"): argset = [] for a in token_split(batch[k]): a = a.strip().lower() matches = [arg for arg in self.args if fnmatch(arg, a)] if not matches: raise RuntimeError("No matches for arg: '%s'." % a) argset.extend(matches) argsets.append(argset) reps = range(1, int(batch.get('repetitions', 1)) + 1) argsets.append(reps) return argsets def get_batch_runtime(self, batch_name): if batch_name not in self.batches: raise RuntimeError("Can't find batch '%s' to run." % batch_name) batch = self.batches[batch_name].copy() batch.update(self.settings.BATCH_OVERRIDE) if batch.get('abstract', False) or batch.get('disabled', False): return (0, 0) total_time = 0 n = 0 argsets = self.get_argsets(batch) for _, s in self.expand_argsets(batch, argsets, self.settings.TIME, batch_name, print_status=False, no_shuffle=True): total_time += s.TOTAL_LENGTH + int(batch.get('pause', 0)) n += 1 return total_time, n def run_batch(self, batch_name): if batch_name not in self.batches: raise RuntimeError("Can't find batch '%s' to run." % batch_name) batch = self.batches[batch_name].copy() batch.update(self.settings.BATCH_OVERRIDE) # A batch declared 'abstract' is not runnable if batch.get('abstract', False): logger.info(" Batch marked as abstract. Not running.") return False elif batch.get('disabled', False) or not batch.get('enabled', True): logger.info(" Batch disabled.") return False argsets = self.get_argsets(batch) pause = int(batch.get('pause', 0)) batch_time = None if self.settings.BATCH_RESUME is not None and \ os.path.isdir(self.settings.BATCH_RESUME): # We're resuming a batch run. Try to find a data file we can get the # original batch run time from. for dirpath, dirnames, filenames in os.walk( self.settings.BATCH_RESUME): datafiles = [f for f in filenames if f.endswith(resultset.SUFFIX)] if datafiles: f = datafiles[0] r = resultset.load(os.path.join(dirpath, f)) batch_time = r.meta("BATCH_TIME") try: self.settings.BATCH_UUID = r.meta("BATCH_UUID") logger.info(" Using previous UUID %s.\n", self.settings.BATCH_UUID) except KeyError: pass break if batch_time is None: raise RuntimeError("No data files found in resume directory %s." % self.settings.BATCH_RESUME) elif self.settings.BATCH_RESUME: raise RuntimeError("Batch resume directory %s doesn't exist!\n" % self.settings.BATCH_RESUME) else: batch_time = self.settings.TIME filenames_seen = set() for b, settings in self.expand_argsets(batch, argsets, batch_time, batch_name): if 'output_path' in b: output_path = clean_path(b['output_path'], allow_dirs=True) else: output_path = settings.DATA_DIR if settings.BATCH_RESUME is not None: if os.path.commonprefix( [os.path.abspath(output_path), os.path.abspath(settings.BATCH_RESUME)]) \ != os.path.abspath(settings.BATCH_RESUME): raise RuntimeError("Batch-specified output path is not a " "subdirectory of resume path. Bailing.") if os.path.exists(os.path.join(output_path, "%s%s" % (settings.DATA_FILENAME, resultset.SUFFIX))): logger.info(" Previous result exists, skipping.") continue if settings.BATCH_DRY and settings.BATCH_VERBOSE: logger.info(" Would output to: %s.\n", output_path) elif not settings.BATCH_DRY and not os.path.exists(output_path): try: os.makedirs(output_path) except OSError as e: raise RuntimeError("Unable to create output path '%s': %s." % (output_path, e)) commands = self.commands_for(b, settings) if not settings.BATCH_DRY: self.logfile = loggers.setup_logfile( os.path.join(output_path, "%s.log" % settings.DATA_FILENAME), level=loggers.INFO, replay=False) if b.get('debug_log', False): self.logfile_debug = loggers.setup_logfile( os.path.join(output_path, "%s.debug.log" % settings.DATA_FILENAME), level=loggers.DEBUG, maxlevel=loggers.DEBUG, replay=False) if settings.DATA_FILENAME in filenames_seen: logger.warning("Filename already seen in this run: %s", settings.DATA_FILENAME) filenames_seen.add(settings.DATA_FILENAME) self.run_commands(commands, 'pre') self.run_commands(commands, 'monitor') try: if settings.BATCH_VERBOSE: if settings.BATCH_DRY: logger.info(" Would run test '%s'.", settings.NAME) else: logger.info(" Running test '%s'.", settings.NAME) logger.info(" data_filename=%s", settings.DATA_FILENAME) for k in sorted(b.keys()): if k.upper() in SETTINGS_PARSER: logger.info(" %s=%s", k, b[k]) if settings.BATCH_DRY: self.tests_run += 1 else: # Load test again with informational=False to enable host # lookups and other actions that may fail settings.load_test(informational=False) self.run_test(settings, output_path) except KeyboardInterrupt: self.run_commands(commands, 'post', essential_only=True) raise except Exception as e: self.run_commands(commands, 'post', essential_only=True) logger.exception(" Error running test: %s", str(e)) else: try: self.run_commands(commands, 'post') except Exception as e: self.run_commands(commands, 'post', essential_only=True) logger.exception(" Error running post-commands: %s", str(e)) finally: self.kill_children() if self.logfile: loggers.remove_log_handler(self.logfile) self.logfile.close() self.logfile = None if self.logfile_debug: loggers.remove_log_handler(self.logfile_debug) self.logfile_debug.close() self.logfile_debug = None if settings.BATCH_DRY and settings.BATCH_VERBOSE: logger.info(" Would sleep for %d seconds.", pause) elif not settings.BATCH_DRY: time.sleep(pause) def run_test(self, settings, output_path, print_datafile_loc=False): settings = settings.copy() settings.load_test() res = resultset.new(settings) if settings.LOG_FILE is _LOG_DEFER: settings.LOG_FILE = res.dump_filename.replace(res.SUFFIX, ".log") loggers.setup_logfile(settings.LOG_FILE) record_metadata(res, settings.EXTENDED_METADATA, settings.REMOTE_METADATA) if not settings.HOSTS: raise RuntimeError("Must specify host (-H option).") logger.info("Starting %s test. Expected run time: %d seconds.", settings.NAME, settings.TOTAL_LENGTH) agg = aggregators.new(settings) res = agg.postprocess(agg.aggregate(res)) record_postrun_metadata(res, settings.EXTENDED_METADATA, settings.REMOTE_METADATA) res.dump_dir(output_path) logger.log(loggers.INFO if print_datafile_loc else loggers.DEBUG, "Data file written to %s", res.dump_filename) formatter = formatters.new(settings) formatter.format([res]) self.tests_run += 1 def load_input(self, settings): settings = settings.copy() results = [] test_name = None for i, filename in enumerate(settings.INPUT): r = resultset.load(filename, settings.ABSOLUTE_TIME) if test_name is not None and test_name != r.meta("NAME") and \ not settings.GUI: logger.warning("Result sets are not from the same " "test (found %s/%s).", test_name, r.meta("NAME")) test_name = r.meta("NAME") if results and settings.CONCATENATE: results[0].concatenate(r) else: if len(settings.OVERRIDE_LABELS) > i: r.set_label(settings.OVERRIDE_LABELS[i]) results.append(r) settings.update(results[0].meta()) settings.load_test(informational=True) # Look for missing data series, and if they are computed from other # values, try to compute them. for res in results: settings.compute_missing_results(res) formatter = formatters.new(settings) formatter.format(results) def fork_and_run(self, queue): pid = os.fork() if pid: return pid else: loggers.set_queue_handler(queue) signal.signal(signal.SIGTERM, self.kill) try: self.run() except Exception as e: logger.exception(str(e)) queue.close() queue.join_thread() os._exit(0) def run(self): if self.settings.INPUT: return self.load_input(self.settings) elif self.settings.BATCH_NAMES: start_time = self.settings.TIME self.settings.BATCH_UUID = str(uuid.uuid4()) self.settings.LOG_FILE = None # batch run will generate logs logger.info("Started batch run %s at %s.", self.settings.BATCH_UUID, format_date(start_time, fmt="%Y-%m-%d %H:%M:%S")) if len(self.settings.BATCH_NAMES) == 1 and \ self.settings.BATCH_NAMES[0] == 'ALL': logger.info("Running all batches.") batches = self.batches.keys() else: batches = self.settings.BATCH_NAMES runtimes = [self.get_batch_runtime(b) for b in batches] total_time, total_n = map(sum, zip(*runtimes)) if total_time > 0: logger.info("Estimated total runtime: %s (%d tests)", timedelta(seconds=total_time), total_n) for b in batches: try: logger.info("Running batch '%s'.", b) self.run_batch(b) except RuntimeError: raise except Exception as e: if self.settings.DEBUG_ERROR: raise raise RuntimeError("Error while running batch '%s': %r." % (b, e)) end_time = utcnow() logger.info("Ended batch sequence at %s. %s %d tests in %s.", format_date(end_time, fmt="%Y-%m-%d %H:%M:%S"), "Ran" if not self.settings.BATCH_DRY else 'Would have run', # noqa: E501 self.tests_run, (end_time - start_time)) return True else: return self.run_test(self.settings, self.settings.DATA_DIR, True) def kill(self, *args): if self.killed: return self.killed = True self.kill_children(force=True) def p(self): for t in 'args', 'batches', 'commands': print("%s:\n%s\n" % (t, pprint.pformat(getattr(self, t)))) if __name__ == "__main__": br = BatchRunner({'data_filename': 'testing'}) br.read(sys.argv[1]) br.p() br.run_batch('tcpfair') pprint.pprint(br.commands_for("tcpfair", 'codel')) ������������������������������������������������������������������������flent-2.2.0/flent/build_info.py���������������������������������������������������������������������0000664�0000000�0000000�00000002651�14670056262�0016433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # build_info.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 6 December 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # setup.py rewrites this file with the install prefix info import os # this value works for the source distribution VERSION = "2.2.0" DATA_DIR = os.path.dirname(__file__) ENCODING = "UTF-8" try: import locale ENCODING = locale.getpreferredencoding(False) except: pass if VERSION.endswith("+git") and os.path.exists( os.path.realpath(os.path.join(DATA_DIR, '..', '.git'))): try: import subprocess commit = subprocess.check_output( ["git", "log", "--format=%h", "--abbrev=8", "-1"], cwd=DATA_DIR).decode(ENCODING) VERSION += ".%s" % commit.strip() except: pass ���������������������������������������������������������������������������������������flent-2.2.0/flent/combiners.py����������������������������������������������������������������������0000664�0000000�0000000�00000065642�14670056262�0016313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # combiners.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 13 March 2015 # Copyright (c) 2015-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import math import re from bisect import bisect_left, bisect_right from collections import OrderedDict try: from itertools import izip_longest as zip_longest except ImportError: from itertools import zip_longest from flent.util import classname, long_substr, Glob, format_date, mos_score, \ utcnow from flent.resultset import ResultSet from flent.loggers import get_logger try: import numpy as np HAS_NUMPY = True except ImportError: HAS_NUMPY = False logger = get_logger(__name__) def get_combiner(combiner_type): cname = classname(combiner_type, "Combiner") if cname not in globals(): raise RuntimeError("Combiner not found: '%s'" % combiner_type) return globals()[cname] def new(combiner_type, *args, **kwargs): try: return get_combiner(combiner_type)(*args, **kwargs) except Exception as e: raise RuntimeError("Error loading combiner: %s." % e) class Combiner(object): # Match a word of all digits, optionally with a non-alphanumeric character # preceding or succeeding it. For instance a series of files numbered as # -01, -02, etc. serial_regex = re.compile(r'\W?\b\d+\b\W?') def __init__(self, print_n=False, filter_regexps=None, filter_series=None, save_dir=None, data_cutoff=None): self.filter_serial = True self.filter_prefix = True self.print_n = print_n self.save_dir = save_dir self.filter_regexps = filter_regexps if filter_regexps else [] self.filter_series = filter_series if filter_series else [] self.data_cutoff = data_cutoff self.mode_override = None def __call__(self, results, config, combine_mode=None): self.mode_override = combine_mode if self.check_intermediate(results, config): return results res = self.combine(results, config) self.save_intermediate(res, config, results[0].meta()) return res def check_intermediate(self, results, config): valid = True for r in results: if "FROM_COMBINER" in r.meta(): if r.meta("FROM_COMBINER") != self.__class__.__name__: raise RuntimeError("Intermediate results from different " "combiner: %s/%s" % (r.meta("FROM_COMBINER"), self.__class__.__name__)) if r.meta("COMBINER_PLOT") != config['plot_name']: raise RuntimeError("Intermediate results from different " "plot: %s/%s" % (r.meta("COMBINER_PLOT"), config['plot_name'])) else: valid = False if valid: config['series'] = results[0].meta("COMBINER_SERIES") config['cutoff'] = None return valid def save_intermediate(self, new_results, config, orig_meta): orig_meta = orig_meta.copy() del orig_meta['TITLE'] if self.save_dir: t = utcnow() series = config['series'] # Can't serialise 'source' Glob objects for s in series: if 'source' in s: del s['source'] for i, r in enumerate(new_results): r.meta().update(orig_meta) r.meta("FROM_COMBINER", self.__class__.__name__) r.meta("COMBINER_SERIES", series) r.meta("COMBINER_PLOT", config['plot_name']) r._filename = "%s-%s-%s-%02d%s" % ( config['plot_name'], self.__class__.__name__, format_date(t).replace(":", ""), i, r.SUFFIX) r.dump_dir(self.save_dir) def combine(self, results, config): """Combines several result sets into one box plot by grouping them on unique data file name parts and then combining each group into a single data set.""" self.config = config # Group the result sets into the groups that will appear as new data # sets. This is done on the file name, by first removing the file # extension and the longest common prefix from all the loaded file # names, then removing the first word boundary-delimited sequence of # digits. # # The idea is that the data files will be named by a common prefix, with # the distinguishing attribute (for instance configured qdisc) at the # end, followed by a number signifying test iteration. So for instance # given the filenames: # # rrul-fq_codel-01.flent.gz # rrul-fq_codel-02.flent.gz # rrul-fq_codel-03.flent.gz # rrul-pfifo_fast-01.flent.gz # rrul-pfifo_fast-02.flent.gz # rrul-pfifo_fast-03.flent.gz # # two new data sets will be created ('fq_codel' and 'pfifo_fast'), each # with three data points created from each of the data files. The # function used to map the data points of each result set into a single # data point is specified in the test config, and can be one of: # # mean, median, min, max : resp value computed from all valid data points # span: max()-min() from all data points # mean_span: mean of all data points' difference from the min value # mean_zero: mean value with missing data points interpreted as 0 rather # than being filtered out groups = OrderedDict() new_results, regexps, names = [], [], [] filenames = [r.meta('DATA_FILENAME').replace(r.SUFFIX, '') for r in results] for r in self.filter_regexps: regexps.append(re.compile(r)) if self.filter_serial: regexps.append(self.serial_regex) if self.filter_prefix: prefix = long_substr(filenames, prefix_only=True) if "-" in prefix and not prefix.endswith("-"): prefix = prefix[:prefix.rfind("-")+1] names = [n.replace(prefix, "", 1) for n in filenames] else: names = filenames for i, n in enumerate(names): for r in regexps: n = r.sub("", n, count=1) if n in groups: groups[n].append(results[i]) else: groups[n] = [results[i]] self.orig_series = [s for s in config['series'] if not s['data'] in self.filter_series] self.orig_name = results[0].meta('NAME') # Do the main combine - group() is defined by subclasses. new_results = self.group(groups, config) # We've already been applying the cutoff value on combine, make sure the # plotting functions don't do that also. config['cutoff'] = None return new_results def get_reducer(self, s_config): reducer_name = self.mode_override or s_config.get('combine_mode', 'mean') cutoff = self.data_cutoff or self.config.get('cutoff', None) return get_reducer(reducer_name, cutoff, self.filter_series) class GroupsCombiner(Combiner): # group_by == 'groups' means preserve the data series and group the data # by the data groups identified above -- i.e. they become the items in # the legend. def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) res.create_series([s['data'] for s in self.orig_series]) x = 0 orig_n = {s['data']: [] for s in self.orig_series} for r in groups[k]: data = {} for s in self.orig_series: reducer = self.get_reducer(s) data[s['data']] = reducer(r, s) orig_n[s['data']].append(reducer.N) res.append_datapoint(x, data) x += 1 for k, v in orig_n.items(): res.series_meta(k, 'orig_n', v) new_results.append(res) return new_results class GroupsPointsCombiner(Combiner): # groups_points means group by groups, but do per-point combinations, to # e.g. create a data series that is the mean of several others def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) x_values = [] for r in groups[k]: if len(r.x_values) > len(x_values): x_values = r.x_values length = max([r.meta("TOTAL_LENGTH") for r in groups[k]]) cutoff = self.data_cutoff or config.get('cutoff', None) if cutoff is not None: start, end = cutoff if end <= 0: end += length res.x_values = [x for x in x_values if x >= start and x <= end] else: res.x_values = x_values for s in config['series']: data = zip_longest(x_values, *[r[s['data']] for r in groups[k]]) new_data = [] reducer = self.get_reducer(s) reducer.cutoff = None for d in data: if cutoff is None or (d[0] >= start and d[0] <= end): new_data.append(reducer(res, s, data=d[1:])) res.add_result(s['data'], new_data) new_results.append(res) return new_results class GroupsConcatCombiner(Combiner): # groups_concat means group by groups, but concatenate the points of all # the groups, e.g. to create a combined CDF of all data points def group(self, groups, config): new_results = [] for k in groups.keys(): title = "%s (n=%d)" % (k, len(groups[k])) if self.print_n else k res = ResultSet(TITLE=title, NAME=self.orig_name) res.create_series([s['data'] for s in self.orig_series]) cutoff = self.data_cutoff or config.get('cutoff', None) x = 0 for r in groups[k]: if cutoff: start, end = cutoff offset = min(r.x_values) if end <= 0: end += r.meta("TOTAL_LENGTH") start += offset end += offset keys, minvals = [], {} for s in self.orig_series: k = s['data'] keys.append(k) if s.get('combine_mode', None) == 'span' and k in r: minvals[k] = min( [d for d in r.series(k) if d is not None]) else: minvals[k] = None for p in r.zipped(keys): if cutoff is None or (p[0] > start and p[0] < end): dp = {} for k, v in zip(keys, p[1:]): if minvals[k] is None: dp[k] = v elif v is not None: dp[k] = v - minvals[k] else: pass # skip None-values when a minval exists res.append_datapoint(x, dp) x += 1 new_results.append(res) return new_results class SeriesCombiner(Combiner): # group_by == 'series' means flip the group and series, so the groups # become the entries on the x axis, while the series become the new # groups (in the legend) def group(self, groups, config): new_results = [] for s in self.orig_series: res = ResultSet(TITLE=s.get('label'), NAME=self.orig_name) res.meta('label_override', s.get('label_override', False)) res.create_series(groups.keys()) x = 0 for d in zip_longest(*groups.values()): data = {} for k, v in zip(groups.keys(), d): reducer = self.get_reducer(s) data[k] = reducer(v, s) if v is not None else None if data[k] is not None and 'norm_factor' in s: data[k] /= s['norm_factor'] res.append_datapoint(x, data) x += 1 new_results.append(res) new_series = [] for k in groups.keys(): new_series.append({'data': k, 'label': k}) config['series'] = new_series return new_results class BothCombiner(Combiner): # group_by == 'both' means that the group names should be split by a # delimiter (currently '-') and the first part specifies the group, the # second the series. Currently only works if there's just one series # name configured in the plot config. def group(self, groups, config): if len(config['series']) > 1: raise RuntimeError("Cannot use group_by=both for plots with more " "than one data series") series_names = [] group_names = [] old_s = config['series'][0] for k in groups.keys(): s, g = k.rsplit("-", 1) if s not in series_names: series_names.append(s) if g not in group_names: group_names.append(g) new_series = [{'data': s, 'label': s} for s in series_names] new_results = [] for s in group_names: res = ResultSet(TITLE=s, NAME=self.orig_name) res.create_series(series_names) x = 0 for d in zip_longest(*[g[1] for g in groups.items() if g[0].endswith("-%s" % s)]): data = {} for k, v in zip([k.rsplit("-", 1)[0] for k in groups.keys() if k.endswith("-%s" % s)], d): reducer = self.get_reducer(old_s) data[k] = reducer(v, old_s) if v is not None else None res.append_datapoint(x, data) x += 1 new_results.append(res) config['series'] = new_series return new_results class BatchCombiner(GroupsCombiner): # group_by == 'batch' means group data sets by their batch UUID, getting # titles from the BATCH_TITLE if set def combine(self, results, config): self.config = config self.orig_series = config['series'] self.orig_name = results[0].meta('NAME') groupmap = {} groups = OrderedDict() for r in results: u = "%s - %s " % (r.meta().get("BATCH_UUID", "None"), r.meta('NAME')) if u not in groupmap: t = "%s - %s" % (r.meta("BATCH_TITLE"), r.meta('NAME')) if not t or t in groupmap.values(): t = u groupmap[u] = t k = groupmap[u] if k not in groups: groups[k] = [] groups[k].append(r) new_results = self.group(groups, config) config['cutoff'] = None return new_results class BatchConcatCombiner(GroupsConcatCombiner, BatchCombiner): pass class BatchSeriesCombiner(SeriesCombiner, BatchCombiner): pass def get_reducer(reducer_type, *args): if ":" in reducer_type: reducer_type, reducer_arg = reducer_type.split(":", 1) else: reducer_arg = None cname = classname(reducer_type, "Reducer") if cname not in globals(): raise RuntimeError("Reducer not found: '%s'" % reducer_type) return globals()[cname](reducer_arg, *args) class Reducer(object): filter_none = True numpy_req = False def __init__(self, arg, cutoff, filter_series): self.arg = arg self.cutoff = cutoff self.filter_series = filter_series self.N = 0 def __call__(self, resultset, series, data=None): return self.reduce(resultset, series, data) def reduce(self, resultset, series, data=None): if self.numpy_req and not HAS_NUMPY: raise RuntimeError("%s requires numpy." % self.__class__.__name__) if data is None: data = resultset[series['data']] if series and 'norm_by' in series: norm_series = series['norm_by'].format(**series) norm_data = resultset[norm_series] else: norm_data = [] if self.cutoff: start, end = self.cutoff offset = min(resultset.x_values) if end <= 0: end += resultset.meta("TOTAL_LENGTH") start += offset end += offset start_idx = bisect_left(resultset.x_values, start) end_idx = bisect_right(resultset.x_values, end) data = data[start_idx:end_idx] if norm_data: norm_data = norm_data[start_idx:end_idx] if self.filter_none: data = [p for p in data if p is not None] norm_data = [p for p in norm_data if p is not None] if not data: return None self.N = len(data) val = self._reduce(data) if norm_data: normval = self._reduce(norm_data) return val / normval return val class FairnessReducer(Reducer): def reduce(self, resultset, series, data=None): key = series['data'] source = Glob.expand_list(series['source'], resultset.series_names, exclude=self.filter_series, args=series) values = [] for key in source: v = super(FairnessReducer, self).reduce( resultset, None, resultset[key]) if v is not None: values.append(v) valsum = math.fsum([x**2 for x in values]) if not valsum: return None return math.fsum(values)**2 / (len(values) * valsum) class TryReducer(Reducer): meta_key = None raw_key = None def reduce(self, resultset, series, data=None): if not self.cutoff and self.meta_key: r = get_reducer("meta:" + self.meta_key, None, self.filter_series) res = r.reduce(resultset, series, data) if res: self.N = r.N return res if self.raw_key: r = get_reducer("raw_" + self.raw_key, self.cutoff, self.filter_series) res = r.reduce(resultset, series, data) if res: self.N = r.N return res return super(TryReducer, self).reduce(resultset, series, data) class MeanReducer(TryReducer): meta_key = "MEAN_VALUE" raw_key = "mean" def _reduce(self, data): if not HAS_NUMPY: return sum(data) / len(data) return np.mean(data) class MedianReducer(TryReducer): meta_key = None raw_key = "median" def _reduce(self, data): if not HAS_NUMPY: return sorted(data)[len(data) // 2] return np.median(data) class StdReducer(TryReducer): numpy_req = True meta_key = None raw_key = "std" def _reduce(self, data): return np.std(data) class VarReducer(TryReducer): numpy_req = True meta_key = None raw_key = "var" def _reduce(self, data): return np.var(data) class MinReducer(TryReducer): meta_key = None raw_key = "min" def _reduce(self, data): return min(data) class MaxReducer(TryReducer): meta_key = None raw_key = "max" def _reduce(self, data): return max(data) class Pct99Reducer(TryReducer): meta_key = None raw_key = "pct99" def _reduce(self, data): if not HAS_NUMPY: return sorted(data)[-(len(data) // 100 + 1)] return np.percentile(data, 99) class CumsumReducer(TryReducer): meta_key = None raw_key = "cumsum" def reduce(self, resultset, series, data=None): self.stepsize = resultset.meta("STEP_SIZE") return super(CumsumReducer, self).reduce(resultset, series, data) def _reduce(self, data): return np.cumsum(data)[-1] * self.stepsize class SpanReducer(Reducer): def _reduce(self, data): return max(data) - min(data) class MeanSpanReducer(Reducer): numpy_req = True def _reduce(self, data): min_val = min(data) d = [i - min_val for i in data] return np.mean(d) class MeanZeroReducer(Reducer): numpy_req = True filter_none = False def _reduce(self, data): d = [p if p is not None else 0 for p in data] return np.mean(d) if d else None class RawReducer(Reducer): def _get_series(self, resultset, name, ensure='val'): data = resultset.raw_values[name] if ensure: data = [d for d in data if ensure in d] if data and self.cutoff is not None: start, end = self.cutoff min_t = resultset.t0 start_t = min_t + start if start else min_t - 1 end_t = min_t + end if end <= 0: end_t += resultset.meta("TOTAL_LENGTH") return [d for d in data if 't' in d and d['t'] > start_t and d['t'] < end_t] return data def get_rawdata(self, resultset, series): key = series['data'] raw_key = series.get("raw_key", "val") try: rawdata = self._get_series(resultset, key, ensure=raw_key) except KeyError: if '::' in key and 'raw_key' not in series: key, raw_key = key.rsplit("::", 1) try: rawdata = self._get_series(resultset, key, ensure=raw_key) except KeyError: return None, raw_key else: return None, raw_key return rawdata, raw_key def reduce(self, resultset, series, data=None): rawdata, raw_key = self.get_rawdata(resultset, series) if rawdata is None: return None if self.filter_none: data = [d[raw_key] for d in rawdata if d[raw_key] is not None] else: data = [d[raw_key] for d in rawdata] if not data: return None self.N = len(data) return self._reduce(data) class RawMeanReducer(RawReducer): def _reduce(self, data): if not HAS_NUMPY: return sum(data) / len(data) return np.mean(data) class RawMedianReducer(RawReducer): def _reduce(self, data): if not HAS_NUMPY: return sorted(data)[len(data) // 2] return np.median(data) class RawStdReducer(RawReducer): def _reduce(self, data): return np.std(data) class RawVarReducer(RawReducer): def _reduce(self, data): return np.var(data) class RawMinReducer(RawReducer): def _reduce(self, data): return min(data) class RawMaxReducer(RawReducer): def _reduce(self, data): return max(data) class RawPct99Reducer(RawReducer): def _reduce(self, data): if not HAS_NUMPY: return sorted(data)[-(len(data) // 100 + 1)] return np.percentile(data, 99) class RawCumsumReducer(RawReducer): def reduce(self, resultset, series, data=None): rawdata, raw_key = self.get_rawdata(resultset, series) if rawdata is None: return None return sum([d[raw_key] * d['dur'] for d in rawdata if 'dur' in d]) class RawSeqLossReducer(RawReducer): filter_none = False def reduce(self, resultset, series, data=None): key = series['data'] if '::' in key: key = key.split("::")[0] smeta = resultset.meta('SERIES_META').get(key) if smeta and 'PACKET_LOSS_RATE' in smeta and not self.cutoff: return smeta['PACKET_LOSS_RATE'] try: data = self._get_series(resultset, key, ensure='seq') seqs = [d['seq'] for d in data if not d.get('lost')] return 1 - len(seqs) / (max(seqs) - min(seqs) + 1) except (KeyError, ValueError): return None class MosReducer(RawReducer): filter_none = False numpy_req = True def _calc_delay_loss(self, resultset, key): data = self._get_series(resultset, key) if not data: return None, None jitter_samples = [] delay_samples = [] loss = 0 last_delay = -1 last_seq = -1 for d in data: if d.get('lost'): loss += 1 continue if 'seq' not in d: continue if last_seq > -1 and d['seq'] - last_seq > 1: loss += d['seq'] - last_seq - 1 last_seq = d['seq'] dval = d.get('owd_up', d['val']) delay_samples.append(dval) if 'ipdv_up' in d: jitter_samples.append(abs(d['ipdv_up'])) elif last_delay > -1: jitter_samples.append(abs(last_delay - dval)) last_delay = dval delay = np.mean(delay_samples) + 2 * np.mean(jitter_samples) lossrate = loss / len(data) return delay, lossrate def reduce(self, resultset, series, data=None): key = series['data'] smeta = resultset.meta('SERIES_META').get(key) if smeta and 'OWD_UP_MEAN' in smeta and not self.cutoff: delay = smeta['OWD_UP_MEAN'] + 2 * smeta['IPDV_UP_MEAN'] lossrate = smeta['PACKET_LOSS_RATE'] else: delay, lossrate = self._calc_delay_loss(resultset, key) if delay is None: return None mos = mos_score(delay, lossrate) return mos class MetaReducer(Reducer): filter_none = False def reduce(self, resultset, series, data=None): key = series['data'] metakey = self.arg try: val = resultset.series_meta(key, metakey) self.N = len(resultset[key]) return val except KeyError: return None class FairnessMeanReducer(FairnessReducer, MeanReducer): pass ����������������������������������������������������������������������������������������������flent-2.2.0/flent/error_ellipse.py������������������������������������������������������������������0000664�0000000�0000000�00000005306�14670056262�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Origin: # https://github.com/joferkington/oost_paper_code/blob/master/error_ellipse.py from __future__ import absolute_import, division, print_function, unicode_literals import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Ellipse def plot_point_cov(points, nstd=2, ax=None, **kwargs): """ Plots an `nstd` sigma ellipse based on the mean and covariance of a point "cloud" (points, an Nx2 array). Parameters ---------- points : An Nx2 array of the data points. nstd : The radius of the ellipse in numbers of standard deviations. Defaults to 2 standard deviations. ax : The axis that the ellipse will be plotted on. Defaults to the current axis. Additional keyword arguments are pass on to the ellipse patch. Returns ------- A matplotlib ellipse artist """ pos = points.mean(axis=0) cov = np.cov(points, rowvar=False) return plot_cov_ellipse(cov, pos, nstd, ax, **kwargs) def plot_cov_ellipse(cov, pos, nstd=2, ax=None, **kwargs): """ Plots an `nstd` sigma error ellipse based on the specified covariance matrix (`cov`). Additional keyword arguments are passed on to the ellipse patch artist. Parameters ---------- cov : The 2x2 covariance matrix to base the ellipse on pos : The location of the center of the ellipse. Expects a 2-element sequence of [x0, y0]. nstd : The radius of the ellipse in numbers of standard deviations. Defaults to 2 standard deviations. ax : The axis that the ellipse will be plotted on. Defaults to the current axis. Additional keyword arguments are pass on to the ellipse patch. Returns ------- A matplotlib ellipse artist """ def eigsorted(cov): vals, vecs = np.linalg.eigh(cov) order = vals.argsort()[::-1] return vals[order], vecs[:, order] if ax is None: ax = plt.gca() vals, vecs = eigsorted(cov) theta = np.degrees(np.arctan2(*vecs[:, 0][::-1])) # Width and height are "full" widths, not radius width, height = 2 * nstd * np.sqrt(vals) ellip = Ellipse(xy=pos, width=width, height=height, angle=theta, **kwargs) ax.add_artist(ellip) return ellip if __name__ == '__main__': # -- Example usage ----------------------- # Generate some random, correlated data points = np.random.multivariate_normal( mean=(1, 1), cov=[[0.4, 9], [9, 10]], size=1000) # Plot the raw points... x, y = points.T plt.plot(x, y, 'ro') # Plot a transparent 3 standard deviation covariance ellipse plot_point_cov(points, nstd=3, alpha=0.5, color='green') plt.show() ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/formatters.py���������������������������������������������������������������������0000664�0000000�0000000�00000042260�14670056262�0016507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # formatters.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 16 October 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import csv import io import os import sys from functools import reduce from flent import plotters, combiners from flent.util import classname, format_bytes, format_date from flent.loggers import get_logger try: import ujson as json except ImportError: import json logger = get_logger(__name__) def new(settings): formatter_name = classname(settings.FORMAT, 'Formatter') if formatter_name not in globals(): raise RuntimeError("Formatter not found: '%s'." % settings.FORMAT) logger.debug("Creating new %s", formatter_name) try: return globals()[formatter_name](settings) except RuntimeError: raise except Exception as e: raise RuntimeError("Error loading %s: %r." % (formatter_name, e)) class Formatter(object): open_mode = "wt" def __init__(self, settings): self.settings = settings self.check_output(self.settings.OUTPUT) def check_output(self, output): if hasattr(output, 'read') or output == "-": self.output = output else: # This logic is there to ensure that: # 1. If there is no write access, fail before running the tests. # 2. If the file exists, do not open (and hence overwrite it) until # after the tests have run. if os.path.exists(output): # os.access doesn't work on non-existant files on FreeBSD; so # only do the access check on existing files (to avoid # overwriting them before the tests have completed). if not os.access(output, os.W_OK): raise RuntimeError( "No write permission for output file '%s'" % output) else: self.output = output else: # If the file doesn't exist, just try to open it immediately; # that'll error out if access is denied. try: self.output = io.open(output, self.open_mode) except IOError as e: raise RuntimeError("Unable to open output file: '%s'" % e) def __del__(self): if hasattr(self.output, 'close'): self.output.close() def open_output(self): output = self.output if hasattr(output, 'read'): return if output == "-": self.output = sys.stdout else: try: self.output = io.open(output, self.open_mode) except IOError as e: raise RuntimeError("Unable to output data: %s" % e) def format(self, results): if results[0].dump_filename is not None: logger.info( "No output formatter selected.\nTest data is in %s " "(use with -i to format).", results[0].dump_filename) def write(self, string): try: self.output.write(string) except BrokenPipeError: pass def verify(self): return True, None class NullFormatter(Formatter): def check_output(self, output): pass def format(self, results): pass def __del__(self): pass class TableFormatter(Formatter): def get_header(self, results): name = results[0].meta("NAME") keys = list( set(reduce(lambda x, y: x + y, [r.series_names for r in results]))) header_row = [name] if len(results) > 1: for r in results: header_row += [k + ' - ' + r.label() for k in keys] else: header_row += keys return header_row def combine_results(self, results): """Generator to combine several result sets into one list of rows, by concatenating them.""" keys = list( set(reduce(lambda x, y: x + y, [r.series_names for r in results]))) for row in list(zip(*[list(r.zipped(keys)) for r in results])): out_row = [row[0][0]] for r in row: if r[0] != out_row[0]: raise RuntimeError( "x-value mismatch: %s/%s. Incompatible data sets?" % (out_row[0], r[0])) out_row += r[1:] yield out_row class OrgTableFormatter(TableFormatter): """Format the output for an Org mode table. The formatter is pretty crude and does not align the table properly, but it should be sufficient to create something that Org mode can correctly realign.""" def format(self, results): self.open_output() name = results[0].meta("NAME") if not results[0]: self.write(str(name) + " -- empty\n") return header_row = self.get_header(results) self.write("| " + " | ".join(header_row) + " |\n") self.write("|-" + "-+-".join(["-" * len(i) for i in header_row]) + "-|\n") def format_item(item): if isinstance(item, float): return "%.2f" % item return str(item) for row in self.combine_results(results): self.write("| ") self.write(" | ".join(map(format_item, row))) self.write(" |\n") class CsvFormatter(TableFormatter): """Format the output as csv.""" def format(self, results): self.open_output() if not results[0]: return writer = csv.writer(self.output) header_row = self.get_header(results) try: writer.writerow(header_row) def format_item(item): if item is None: return "" return str(item) for row in self.combine_results(results): writer.writerow(list(map(format_item, row))) except BrokenPipeError: return class CombiningFormatter(Formatter): def make_combines(self, results, modes): # The calls here are a bit awkward because the combiners were # originally tailored to plotting; but the benefit is that we can # re-use the same code that is used to make combination plots for # this summary output, ensuring consistency and feature parity. comb = combiners.new('groups', data_cutoff=self.settings.DATA_CUTOFF) series = [] for s in results.series_names: series.append({'data': s}) self.combined_res = {} for m in modes: self.combined_res[m] = comb([results], {'series': series}, combine_mode=m)[0] def get_res(self, series, mode): if mode == 'N': # The combiners store the pre-reduction N values in a special # series_meta specifically this usage return self.combined_res['mean'].series_meta(series, 'orig_n')[0] if mode not in self.combined_res: return 0 return self.combined_res[mode][series][0] class StatsFormatter(CombiningFormatter): def __init__(self, settings): Formatter.__init__(self, settings) try: import numpy self.np = numpy except ImportError: raise RuntimeError( "Stats formatter requires numpy, which seems to be missing. " "Please install it and try again.") def format(self, results): self.open_output() self.write("Warning: Totals are computed as cumulative sum * step size,\n" "so spurious values wreck havoc with the results.\n") for r in results: self.write("Results %s" % r.meta('TIME')) if r.meta('TITLE'): self.write(" - %s" % r.meta('TITLE')) self.write(":\n") self.make_combines(r, ['mean', 'median', 'min', 'max', 'std', 'var', 'cumsum', 'pct99']) for s in sorted(r.series_names): self.write(" %s:\n" % s) if not self.get_res(s, 'mean'): self.write(" No data.\n") continue if s in self.settings.DATA_SETS: units = self.settings.DATA_SETS[s]['units'] else: units = '' self.write(" Data points: %d\n" % self.get_res(s, 'N')) if units != "ms": self.write(" Total: %f %s\n" % ( self.get_res(s, 'cumsum'), units.replace("/s", ""))) self.write(" Min: %f %s\n" % (self.get_res(s, 'min'), units)) self.write(" Median: %f %s\n" % (self.get_res(s, 'median'), units)) self.write(" 99th %%: %f %s\n" % (self.get_res(s, 'pct99'), units)) self.write(" Max: %f %s\n" % (self.get_res(s, 'max'), units)) self.write(" Mean: %f %s\n" % (self.get_res(s, 'mean'), units)) self.write(" Std dev: %f\n" % (self.get_res(s, 'std'))) self.write(" Variance: %f\n" % (self.get_res(s, 'var'))) class StatsCsvFormatter(CombiningFormatter): combines = {'mean': 'mean', 'median': 'median', 'min': 'min', 'max': 'max', 'std': 'std_dev', 'var': 'variance', 'cumsum': 'cumul_total', 'pct99': 'pct99'} def __init__(self, settings): Formatter.__init__(self, settings) try: import numpy self.np = numpy except ImportError: raise RuntimeError( "Stats formatter requires numpy, which seems to be missing. " "Please install it and try again.") def format(self, results): self.open_output() writer = csv.writer(self.output) try: writer.writerow(["filename", "title", "series", "units", "datapoints"] + list(self.combines.values())) for r in results: if r.meta('TITLE'): rtitle = "{} - {}".format(r.meta('TIME'), r.meta('TITLE')) else: rtitle = "{}".format(r.meta('TIME')) self.make_combines(r, self.combines.keys()) for s in sorted(r.series_names): if s in self.settings.DATA_SETS: units = self.settings.DATA_SETS[s]['units'] else: units = '' row = [r.meta('DATA_FILENAME'), rtitle, s, units, self.get_res(s, 'N')] if not self.get_res(s, 'mean'): writer.writerow(row) else: writer.writerow(row + [self.get_res(s, k) for k in self.combines.keys()]) except BrokenPipeError: return class SummaryFormatter(CombiningFormatter): COL_WIDTH = 12 def __init__(self, settings): Formatter.__init__(self, settings) def format(self, results): self.open_output() for r in results: self.write(f"\nSummary of {r.meta('NAME')} test run " f"from {format_date(r.meta('TIME'),'%Y-%m-%d %H:%M:%S')}") if r.meta('TITLE'): self.write("\n Title: '%s'" % r.meta('TITLE')) if self.settings.DATA_CUTOFF: self.write("\n Cut data to interval: [%.2f, %.2f]" % self.settings.DATA_CUTOFF) self.write("\n\n") if 'FROM_COMBINER' in r.meta(): m = {} else: m = r.meta().get("SERIES_META", {}) txtlen = max([len(n) for n in r.series_names]) unit_len = max((len(s['units']) for s in self.settings.DATA_SETS.values())) self.write("{spc:{txtlen}s} {avg:>{width}s}" " {med:>{width}s} {pct99:>{width}s} {datapoints:>{lwidth}s}\n".format( spc="", avg="avg", med="median", pct99='99th %', datapoints="# data pts", txtlen=txtlen + 3, width=self.COL_WIDTH, lwidth=self.COL_WIDTH + unit_len)) self.make_combines(r, ['mean', 'median', 'pct99']) for s in sorted(r.series_names): self.write((" %-" + str(txtlen) + "s : ") % s) try: d = [i[1] for i in r.raw_series(s) if i[1] is not None] except KeyError: d = None if not d: d = [i for i in r.series(s) if i is not None] md = m.get(s, {}) units = (md.get('UNITS') or self.settings.DATA_SETS.get(s, {}).get('units', '')) mean = self.get_res(s, 'mean') median = self.get_res(s, 'median') pct99 = self.get_res(s, 'pct99') n = self.get_res(s, 'N') is_computed = 'COMPUTED_LATE' in m.get(s, {}) if mean is None: self.write("No data.\n") continue if mean and units == 'bytes': factor, units = format_bytes(max(mean, median)) mean /= factor median /= factor if mean is not None: self.write("{0:{width}.2f} ".format(mean, width=self.COL_WIDTH)) else: self.write("{0:>{width}}".format("N/A", width=self.COL_WIDTH)) if median is not None and not is_computed: self.write("{0:{width}.2f} ".format(median, width=self.COL_WIDTH)) else: self.write("{0:>{width}} ".format("N/A", width=self.COL_WIDTH)) if pct99 is not None and not is_computed: self.write("{0:{width}.2f} {1}".format(pct99, units, width=self.COL_WIDTH)) else: self.write("{0:>{width}} {1}".format("N/A", units, width=self.COL_WIDTH)) self.write("{0:{width}d}\n".format(n, width=(self.COL_WIDTH + unit_len - len(units)))) DefaultFormatter = SummaryFormatter class PlotFormatter(Formatter): def __init__(self, settings): Formatter.__init__(self, settings) plotters.init_matplotlib(settings.OUTPUT, settings.USE_MARKERS, settings.LOAD_MATPLOTLIBRC) self.plotters = plotters self.figure = None self.plotter = None def init_plots(self, results=None): if self.figure is not None: self.figure.clear() self.plotter.disable_cleanup = True self.plotter.disconnect_callbacks() if self.settings.SUBPLOT_COMBINE: self.plotter = self.plotters.new(self.settings, plotter=self.plotters.get_plotter( "subplot_combine"), figure=self.figure, results=results) else: self.plotter = self.plotters.new(self.settings, figure=self.figure, results=results) self.figure = self.plotter.figure self.plotter.init() @property def disable_cleanup(self): return self.plotter.disable_cleanup @disable_cleanup.setter def disable_cleanup(self, val): self.plotter.disable_cleanup = val def format(self, results): if not results[0]: logger.debug("Zero-length result, not plotting") return self.init_plots(results) self.plotter.plot(results) self.plotter.save(results) def verify(self): return self.plotter.verify() class MetadataFormatter(Formatter): def format(self, results): self.open_output() self.write(json.dumps([r.serialise_metadata() for r in results], indent=4) + "\n") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/gui.py����������������������������������������������������������������������������0000664�0000000�0000000�00000234234�14670056262�0015111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # gui.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 22 March 2014 # Copyright (c) 2014-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import base64 import logging import os import signal import sys import tempfile import time try: import cPickle as pickle except ImportError: import pickle from argparse import SUPPRESS from itertools import chain from multiprocessing import Pool, Queue from flent import util, batch, loggers, resultset, plotters from flent.build_info import DATA_DIR, VERSION from flent.loggers import get_logger, add_log_handler, remove_log_handler, \ set_queue_handler from flent.resultset import ResultSet from flent.settings import ListTests, new as new_settings, plot_group try: import matplotlib matplotlib.use("Agg") except ImportError as e: raise RuntimeError(f"The GUI requires matplotlib, please ensure it's installed ({e}).") logger = get_logger(__name__) mswindows = (sys.platform == "win32") try: from os import cpu_count except ImportError: from multiprocessing import cpu_count try: CPU_COUNT = cpu_count() except NotImplementedError: CPU_COUNT = 1 try: import qtpy from qtpy import QtCore, QtGui, uic from qtpy.QtWidgets import QMessageBox, QFileDialog, QTreeView, \ QAbstractItemView, QMenu, QAction, QTableView, QHeaderView, \ QFormLayout, QHBoxLayout, QVBoxLayout, QApplication, QPlainTextEdit, \ QWidget, QLineEdit, QComboBox, QSpinBox, QDoubleSpinBox, QScrollArea, \ QPushButton, QShortcut, QMainWindow, QDialog from qtpy.QtGui import QFont, QCursor, QMouseEvent, QKeySequence, \ QResizeEvent, QDesktopServices, QValidator, QGuiApplication from qtpy.QtCore import Qt, QIODevice, QByteArray, \ QDataStream, QSettings, QTimer, QEvent, Signal, \ QAbstractItemModel, QAbstractTableModel, QModelIndex, \ QItemSelectionModel, QStringListModel, QUrl from qtpy.QtNetwork import QLocalSocket, QLocalServer from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg \ as FigureCanvas from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT \ as NavigationToolbar except ImportError as e: raise RuntimeError(f"Unable to find a usable Qt version, please ensure qtpy is installed ({e}).") # The file selector dialog on OSX is buggy, so switching allowed file extensions # doesn't work with double extensions. So just include the deprecated extensions # in the default ones on Mac. if hasattr(QtGui, "qt_mac_set_native_menubar"): FILE_SELECTOR_STRING = "Flent data files " \ "(*.flent *.flnt *.flent.gz *.flent.bz2 *.json.gz)" osx = True else: FILE_SELECTOR_STRING = "Flent data files (*.flent *.flent.gz *.flent.bz2);;" \ "Flent data files - " \ "deprecated extensions (*.flnt *.json.gz)" osx = False FILE_SELECTOR_STRING += ";;All files (*.*)" # IPC socket parameters SOCKET_NAME_PREFIX = "flent-socket-" SOCKET_DIR = tempfile.gettempdir() WINDOW_STATE_VERSION = 1 # Hack to propagate the --absolute-time option to multi-process helpers USE_ABSOLUTE_TIME = False ABOUT_TEXT = """<p>Flent version {version}.<br> Copyright © 2017 Toke Høiland-Jørgensen and contributors.<br> Released under the GNU GPLv3.</p> <p><a href="https://flent.org">https://flent.org</a></p> <p>To report a bug, please <a href="https://github.com/tohojo/flent/issues"> file an issue on Github<a>.</p>""" __all__ = ['run_gui'] def run_gui(settings, test_mode=False): if check_running(settings): return 0 plotters.init_matplotlib("-", settings.USE_MARKERS, settings.LOAD_MATPLOTLIBRC) # Python does not get a chance to process SIGINT while in the Qt event loop, # so reset to the default signal handler which just kills the application. signal.signal(signal.SIGINT, signal.SIG_DFL) # Start up the Qt application and exit when it does app = QApplication(sys.argv[:1]) mainwindow = MainWindow(settings) if test_mode: mainwindow.defer_close(app) mainwindow.show() return app.exec_() def pool_init_func(settings, queue): global USE_ABSOLUTE_TIME USE_ABSOLUTE_TIME = settings.ABSOLUTE_TIME plotters.init_matplotlib("-", settings.USE_MARKERS, settings.LOAD_MATPLOTLIBRC) set_queue_handler(queue) def check_running(settings): """Check for a valid socket of an already running instance, and if so, connect to it and send the input file names.""" if settings.NEW_GUI_INSTANCE or mswindows: return False files = os.listdir(SOCKET_DIR) for f in files: if f.startswith(SOCKET_NAME_PREFIX): try: pid = int(f.split("-")[-1]) os.kill(pid, 0) logger.info( "Found a running instance with pid %d. " "Trying to connect... ", pid) # Signal handler did not raise an error, so the pid is running. # Try to connect sock = QLocalSocket() sock.connectToServer(os.path.join( SOCKET_DIR, f), QIODevice.WriteOnly) if not sock.waitForConnected(1000): continue # Encode the filenames as a QStringList and pass them over the # socket block = QByteArray() stream = QDataStream(block, QIODevice.WriteOnly) stream.setVersion(QDataStream.Qt_4_0) stream.writeQStringList([os.path.abspath(f) for f in settings.INPUT]) sock.write(block) ret = sock.waitForBytesWritten(1000) sock.disconnectFromServer() # If we succeeded in sending stuff, we're done. Otherwise, if # there's another possibly valid socket in the list we'll try # again the next time round in the loop. if ret: logger.info("Success!\n") return True else: logger.info("Error!\n") except (OSError, ValueError): # os.kill raises OSError if the pid does not exist # int() returns a ValueError if the pid is not an integer pass return False def get_ui_file(filename): return os.path.join(DATA_DIR, 'ui', filename) class LoadedResultset(dict): pass def results_load_helper(filename): try: r = ResultSet.load_file(filename, USE_ABSOLUTE_TIME) s = new_settings() s.update(r.meta()) s.load_test(informational=True) s.compute_missing_results(r) return LoadedResultset(results=r, plots=s.PLOTS, data_sets=s.DATA_SETS, defaults=s.DEFAULTS, description=s.DESCRIPTION, title=r.title) except Exception as e: logger.exception("Unable to load file '%s': '%s'", filename, e) return None class MainWindow(QMainWindow): def __init__(self, settings): super(MainWindow, self).__init__() uic.loadUi(get_ui_file("mainwindow.ui"), self) self.settings = settings self.last_dir = os.getcwd() self.defer_load = self.settings.INPUT self.load_queue = [] self.load_timer = QTimer(self) self.load_timer.timeout.connect(self.load_one) self.focus_new = False self.new_test_dialog = None if self.settings.HOVER_HIGHLIGHT is None: self.settings.HOVER_HIGHLIGHT = True self.setWindowTitle("Flent GUI v%s" % VERSION) self.actionNewTab.triggered.connect(self.add_tab) self.actionOpen.triggered.connect(self.on_open) self.actionCloseTab.triggered.connect(self.close_tab) self.actionCloseAll.triggered.connect(self.close_all) self.actionSavePlot.triggered.connect(self.save_plot) self.actionLoadExtra.triggered.connect(self.load_extra) self.actionOtherExtra.triggered.connect(self.other_extra) self.actionClearExtra.triggered.connect(self.clear_extra) self.actionScaleOpen.triggered.connect(self.scale_open) self.actionNextTab.triggered.connect(self.next_tab) self.actionPrevTab.triggered.connect(self.prev_tab) self.actionRefresh.triggered.connect(self.refresh_plot) self.actionNewTest.triggered.connect(self.run_test) self.actionHelpGUI.triggered.connect(self.help_gui) self.actionHelpRunning.triggered.connect(self.help_running) self.actionHelpTests.triggered.connect(self.help_tests) self.actionHelpBug.triggered.connect(self.help_bug) self.actionHelpAbout.triggered.connect(self.help_about) self.viewArea.tabCloseRequested.connect(self.close_tab) self.viewArea.currentChanged.connect(self.activate_tab) self.openFileButton.clicked.connect(self.on_open) self.runTestButton.clicked.connect(self.run_test) self.update_empty_view() self.plotDock.visibilityChanged.connect(self.plot_visibility) self.metadataDock.visibilityChanged.connect(self.metadata_visibility) self.plotSettingsDock.visibilityChanged.connect(self.plot_settings_visibility) self.openFilesDock.visibilityChanged.connect(self.open_files_visibility) self.logEntriesDock.visibilityChanged.connect(self.log_entries_visibility) self.expandButton.clicked.connect(self.metadata_column_resize) self.checkHighlight.setChecked(self.settings.HOVER_HIGHLIGHT) self.checkExceptionLog.setChecked(self.settings.DEBUG_ERROR) if loggers.out_handler: self.checkDebugLog.setChecked(loggers.out_handler.level == loggers.DEBUG) self.checkHighlight.toggled.connect(self.update_checkboxes) self.checkDebugLog.toggled.connect(self.update_checkboxes) self.checkExceptionLog.toggled.connect(self.update_checkboxes) self.tabifyDockWidget(self.openFilesDock, self.metadataDock) self.tabifyDockWidget(self.openFilesDock, self.logEntriesDock) self.openFilesDock.raise_() self.tabifyDockWidget(self.plotDock, self.plotSettingsDock) self.plotDock.raise_() self.open_files = OpenFilesModel(self) self.openFilesView = OpenFilesView(self.openFilesDock) self.openFilesDock.setWidget(self.openFilesView) self.openFilesView.setModel(self.open_files) self.openFilesView.clicked.connect(self.open_files.on_click) self.metadataView = MetadataView(self, self.openFilesView) self.metadataView.entered.connect(self.update_statusbar) self.metadataLayout.insertWidget(0, self.metadataView) self.expandButton.clicked.connect(self.metadataView.expandAll) self.plotSettingsWidget = SettingsWidget(self, plot_group, settings, compact=True) self.plotSettingsDock.setWidget(self.plotSettingsWidget) self.plotSettingsWidget.values_changed.connect(self.update_settings) self.logEntries = QPlainTextLogger(self, logging.DEBUG, statusbar=self.statusBar()) add_log_handler(self.logEntries) self.logEntriesDock.setWidget(self.logEntries.widget) self.log_queue = Queue() self.log_timer = QTimer(self) self.log_timer.timeout.connect(self.read_log_queue) self.log_timer.setInterval(100) self.log_timer.start() # Start IPC socket server on name corresponding to pid self.server = QLocalServer() self.sockets = [] self.server.newConnection.connect(self.new_connection) self.server.listen(os.path.join(SOCKET_DIR, "%s%d" % (SOCKET_NAME_PREFIX, os.getpid()))) self.read_settings() self.update_checkboxes() self.worker_pool = Pool(initializer=pool_init_func, initargs=(self.settings, self.log_queue)) QShortcut(QKeySequence("Ctrl+Right"), self).activated.connect(self.next_tab) QShortcut(QKeySequence("Ctrl+Left"), self).activated.connect(self.prev_tab) QShortcut(QKeySequence("Ctrl+Down"), self).activated.connect(self.next_plot) QShortcut(QKeySequence("Ctrl+Up"), self).activated.connect(self.prev_plot) logger.info("GUI loaded. Using Qt through %s v%s.", qtpy.API, QtCore.__version__) def read_log_queue(self): while not self.log_queue.empty(): msg = self.log_queue.get_nowait() logging.getLogger().handle(msg) def get_last_dir(self): if 'savefig.directory' in matplotlib.rcParams: return matplotlib.rcParams['savefig.directory'] return self._last_dir def set_last_dir(self, value): if 'savefig.directory' in matplotlib.rcParams: matplotlib.rcParams['savefig.directory'] = value else: self._last_dir = value last_dir = property(get_last_dir, set_last_dir) def read_settings(self): settings = QSettings("Flent", "GUI") if settings.contains("mainwindow/geometry"): geom = settings.value("mainwindow/geometry") if hasattr(geom, 'toByteArray'): geom = geom.toByteArray() self.restoreGeometry(geom) if settings.contains("mainwindow/windowState"): winstate = settings.value("mainwindow/windowState") if hasattr(winstate, 'toByteArray'): winstate = winstate.toByteArray() version = settings.value("mainwindow/windowStateVersion", 0) if hasattr(version, "toInt"): version = version.toInt()[0] version = int(version) if version == WINDOW_STATE_VERSION: self.restoreState(winstate) self.metadata_visibility() self.plot_visibility() self.plot_settings_visibility() self.open_files_visibility() else: logger.debug("Discarding old window state (version %d!=%d)", version, WINDOW_STATE_VERSION) if settings.contains("open_files/columns"): value = settings.value("open_files/columns") if hasattr(value, 'toString'): value = value.toString() self.open_files.restore_columns(value) if settings.contains("open_files/column_order"): value = settings.value("open_files/column_order") if hasattr(value, 'toByteArray'): value = value.toByteArray() self.openFilesView.horizontalHeader().restoreState(value) self.openFilesView.setSortingEnabled(True) def update_empty_view(self): if self.viewArea.count(): self.viewArea.show() self.emptyWidget.hide() else: self.viewArea.hide() self.emptyWidget.show() def closeEvent(self, event): # Cleaning up matplotlib figures can take a long time; disable it when # the application is exiting. for i in range(self.viewArea.count()): widget = self.viewArea.widget(i) widget.setUpdatesEnabled(False) widget.disable_cleanup() settings = QSettings("Flent", "GUI") settings.setValue("mainwindow/geometry", self.saveGeometry()) settings.setValue("mainwindow/windowState", self.saveState()) settings.setValue("mainwindow/windowStateVersion", WINDOW_STATE_VERSION) settings.setValue("open_files/columns", self.open_files.save_columns()) settings.setValue("open_files/column_order", self.openFilesView.horizontalHeader().saveState()) self.worker_pool.terminate() event.accept() def keyPressEvent(self, event): widget = self.viewArea.currentWidget() text = str(event.text()) if widget and text in ('x', 'X', 'y', 'Y'): a = text.lower() d = 'in' if a == text else 'out' widget.zoom(a, d) event.accept() else: super(MainWindow, self).keyPressEvent(event) # Helper functions to update menubar actions when dock widgets are closed def plot_visibility(self): self.actionPlotSelector.setChecked(not self.plotDock.isHidden()) def plot_settings_visibility(self): self.actionPlotSettings.setChecked(not self.plotSettingsDock.isHidden()) def metadata_visibility(self): self.actionMetadata.setChecked(not self.metadataDock.isHidden()) def open_files_visibility(self): self.actionOpenFiles.setChecked(not self.openFilesDock.isHidden()) def log_entries_visibility(self): self.actionLogEntries.setChecked(not self.logEntriesDock.isHidden()) def metadata_column_resize(self): self.metadataView.resizeColumnToContents(0) def update_checkboxes(self): for i in range(self.viewArea.count()): widget = self.viewArea.widget(i) if widget is not None: widget.highlight(self.checkHighlight.isChecked()) self.log_settings(self.checkDebugLog.isChecked(), self.checkExceptionLog.isChecked()) idx = self.viewArea.currentIndex() if idx >= 0: self.redraw_near(idx) def log_settings(self, debug=False, exceptions=False): self.logEntries.setLevel(loggers.DEBUG if debug else loggers.INFO) self.logEntries.format_exceptions = exceptions if self.new_test_dialog is not None: self.new_test_dialog.log_settings(debug, exceptions) def new_connection(self): sock = self.server.nextPendingConnection() self.sockets.append(sock) sock.readyRead.connect(self.data_ready) def data_ready(self): for s in self.sockets: if s.isReadable(): stream = QDataStream(s) filenames = stream.readQStringList() self.load_files(filenames) self.sockets.remove(s) self.raise_() self.activateWindow() def update_statusbar(self, idx): self.statusBar().showMessage( self.metadataView.model().data(idx, Qt.StatusTipRole), 1000) def get_opennames(self): filenames = QFileDialog.getOpenFileNames(self, "Select data file(s)", self.last_dir, FILE_SELECTOR_STRING) if isinstance(filenames, tuple): filenames = filenames[0] if filenames: self.last_dir = os.path.dirname(str(filenames[0])) return filenames def on_open(self): filenames = self.get_opennames() self.load_files(filenames) def load_extra(self): widget = self.viewArea.currentWidget() if widget is None: return filenames = self.get_opennames() if not filenames: return with widget.updates_disabled(): added = widget.load_files(filenames) if added == 0: self.warn_nomatch() else: for r in widget.extra_results[-added:]: self.open_files.add_file(r) def other_extra(self): idx = self.viewArea.currentIndex() widget = self.viewArea.currentWidget() if widget is None: return added = 0 with widget.updates_disabled(): for i in range(self.viewArea.count()): if i != idx and widget.add_extra(self.viewArea.widget(i).results): added += 1 if not added: self.warn_nomatch() self.open_files.update() def clear_extra(self): widget = self.viewArea.currentWidget() if widget is not None: widget.clear_extra() self.open_files.update() def scale_open(self): self.checkScaleMode.setChecked(True) self.update_checkboxes() if self.viewArea.count() < 2: return all_results = [] for i in range(self.viewArea.count()): all_results.append(self.viewArea.widget(i).results) for i in range(self.viewArea.count()): widget = self.viewArea.widget(i) with widget.updates_disabled(): for r in [j[1] for j in enumerate(all_results) if j != i]: widget.add_extra(r) self.viewArea.currentWidget().update() self.open_files.update() def save_plot(self): widget = self.viewArea.currentWidget() if widget is not None: widget.save_plot() def refresh_plot(self): widget = self.viewArea.currentWidget() if widget is not None: widget.update() def warn_nomatch(self): logger.warning("Could not find any datasets with a " "matching test name to add.") def show(self): super(MainWindow, self).show() # Deferring loading until here means the window has been created and a # busy cursor can be shown. if self.defer_load: self.load_files(self.defer_load) self.defer_load = None def defer_close(self, qapp): self.close_timer = QTimer(self) self.close_timer.timeout.connect(qapp.quit, Qt.QueuedConnection) self.close_timer.start() def shorten_titles(self, titles): new_titles = [] substr = util.long_substr(titles) prefix = util.long_substr(titles, prefix_only=True) for t in titles: if len(substr) > 0: text = t.replace(substr, "...") if len(prefix) > 0 and prefix != substr: text = text.replace(prefix, "...").replace("......", "...") if len(substr) == 0 or text == "...": text = t new_titles.append(text) return new_titles def shorten_tabs(self): """Try to shorten tab labels by filtering out common substrings. Approach: Find longest common substring and replace that with ellipses in the name. Also, find longest common *prefix* and filter that out as well. Since tab titles start with the test name, and several tests are commonly loaded as well, this double substring search helps cut off the (common) test name in the case where the longest substring is in the middle of the tab name.""" titles = [] long_titles = [] indexes = [] for i in range(self.viewArea.count()): if self.viewArea.widget(i).title == ResultWidget.default_title: continue titles.append(self.viewArea.widget(i).title) long_titles.append(self.viewArea.widget(i).long_title) indexes.append(i) titles = self.shorten_titles(titles) for i, t, lt in zip(indexes, titles, long_titles): self.viewArea.setTabText(i, t) self.viewArea.setTabToolTip(i, lt) def close_tab(self, idx=None): self.busy_start() if idx in (None, False): idx = self.viewArea.currentIndex() widget = self.viewArea.widget(idx) if widget is not None: widget.setUpdatesEnabled(False) widget.disconnect_all() self.viewArea.removeTab(idx) widget.setParent(None) widget.deleteLater() self.shorten_tabs() self.update_empty_view() self.busy_end() def close_all(self): self.busy_start() widgets = [] for i in range(self.viewArea.count()): widgets.append(self.viewArea.widget(i)) self.viewArea.clear() self.update_empty_view() for w in widgets: w.setUpdatesEnabled(False) w.disconnect_all() w.setParent(None) w.deleteLater() self.busy_end() def move_tab(self, move_by): count = self.viewArea.count() if count: idx = self.viewArea.currentIndex() self.viewArea.setCurrentIndex((idx + move_by) % count) def next_tab(self): self.move_tab(1) def prev_tab(self): self.move_tab(-1) def move_plot(self, move_by): model = self.plotView.model() if not model: return count = model.rowCount() if count: idx = self.plotView.currentIndex() row = idx.row() self.plotView.setCurrentIndex(model.index((row + move_by) % count)) def next_plot(self): self.move_plot(1) def prev_plot(self): self.move_plot(-1) def busy_start(self): QApplication.setOverrideCursor(Qt.WaitCursor) def busy_end(self): QApplication.restoreOverrideCursor() def activate_tab(self, idx=None): if idx is None: return widget = self.viewArea.widget(idx) if widget is None: self.open_files.set_active_widget(None) return self.redraw_near(idx) self.plotView.setModel(widget.plotModel) if widget.plotSelectionModel is not None: self.plotView.setSelectionModel(widget.plotSelectionModel) self.metadataView.setModel(widget.metadataModel) if widget.metadataSelectionModel is not None: self.metadataView.setSelectionModel(widget.metadataSelectionModel) self.update_checkboxes() self.update_settings(widget) self.update_save(widget) widget.activate() self.open_files.set_active_widget(widget) def update_save(self, widget=None): if widget is None: widget = self.viewArea.currentWidget() if widget: self.actionSavePlot.setEnabled(widget.can_save) def update_settings(self, widget=None): if widget is None: widget = self.viewArea.currentWidget() if widget: widget.update_settings(self.plotSettingsWidget.values()) def update_plots(self, testname, plotname): for i in range(self.viewArea.count()): widget = self.viewArea.widget(i) if widget and widget.settings.NAME == testname: widget.change_plot(plotname) idx = self.viewArea.currentIndex() if idx >= 0: self.redraw_near(idx) def redraw_near(self, idx=None): if idx is None: idx = self.viewArea.currentIndex() rng = (CPU_COUNT + 1) // 2 # Start a middle, go rng steps in either direction (will duplicate the # middle idx, but that doesn't matter, since multiple redraw() # operations are no-op. for i in chain(*[(idx+i, idx-i) for i in range(rng + 1)]): while i < 0: i += self.viewArea.count() w = self.viewArea.widget(i) if w: w.redraw() def add_tab(self, results=None, title=None, plot=None, focus=True): widget = ResultWidget(self.viewArea, self.settings, self.worker_pool) widget.update_start.connect(self.busy_start) widget.update_end.connect(self.busy_end) widget.update_end.connect(self.update_save) widget.plot_changed.connect(self.update_plots) widget.name_changed.connect(self.shorten_tabs) if results: widget.load_results(results, plot) if title is None: title = widget.title idx = self.viewArea.addTab(widget, title) self.update_empty_view() if hasattr(widget, "long_title"): self.viewArea.setTabToolTip(idx, widget.long_title) if focus or self.focus_new: self.viewArea.setCurrentWidget(widget) self.focus_new = False return widget def load_files(self, filenames, set_last_dir=True): if not filenames: return self.update_tabs = self.viewArea.currentWidget() is not None self.busy_start() if isinstance(filenames[0], ResultSet): results = filenames titles = self.shorten_titles([r.title for r in results]) else: results = list(filter(None, self.worker_pool.map(results_load_helper, map(str, filenames)))) titles = self.shorten_titles([r['title'] for r in results]) self.focus_new = True self.load_queue.extend(zip(results, titles)) self.load_timer.start() if set_last_dir: self.last_dir = os.path.dirname(str(filenames[-1])) def load_one(self): if not self.load_queue: self.load_timer.stop() return r, t = self.load_queue.pop(0) widget = self.viewArea.currentWidget() if widget is not None: current_plot = widget.current_plot else: current_plot = None try: if widget is None or widget.is_active: widget = self.add_tab(r, t, current_plot, focus=False) else: widget.load_results(r, plot=current_plot) self.open_files.add_file(widget.results) except Exception as e: logger.exception("Error while loading data file: '%s'. Skipping.", str(e)) if not self.load_queue: self.openFilesView.resizeColumnsToContents() self.metadata_column_resize() if self.update_tabs: self.shorten_tabs() self.load_timer.stop() self.redraw_near() self.busy_end() def run_test(self): if mswindows: QMessageBox.critical(self, "Can't run new test", "Running new tests is currently not " "supported on Windows.") return if self.new_test_dialog is None: self.busy_start() self.new_test_dialog = NewTestDialog(self, self.settings, self.log_queue) self.busy_end() self.new_test_dialog.show() self.new_test_dialog.log_settings(self.checkDebugLog.isChecked(), self.checkExceptionLog.isChecked()) def help_gui(self): QDesktopServices.openUrl(QUrl("https://flent.org/gui.html")) def help_running(self): QDesktopServices.openUrl(QUrl("https://flent.org/options.html")) def help_tests(self): QDesktopServices.openUrl(QUrl("https://flent.org/tests.html")) def help_bug(self): QDesktopServices.openUrl(QUrl("https://github.com/tohojo/flent/issues")) def help_about(self): dlg = AboutDialog(self) dlg.setModal(True) dlg.exec_() class AboutDialog(QDialog): def __init__(self, parent): super(AboutDialog, self).__init__(parent) uic.loadUi(get_ui_file("aboutdialog.ui"), self) self.aboutText.setText(ABOUT_TEXT.format(version=VERSION)) class NewTestDialog(QDialog): def __init__(self, parent, settings, log_queue): super(NewTestDialog, self).__init__(parent) uic.loadUi(get_ui_file("newtestdialog.ui"), self) self.orig_settings = settings.copy() self.orig_settings.INPUT = [] self.orig_settings.GUI = False self.settings = self.orig_settings.copy() self.log_queue = log_queue self.pid = None self.aborted = False if self.settings.NAME is None: self.settings.NAME = "rrul" tests = ListTests.get_tests(settings) max_len = max([len(t[0]) for t in tests]) for t, desc in tests: desc = desc.replace("\n", " ") self.testName.addItem( ("%-" + str(max_len) + "s : %s") % (t, desc), t) self.testName.setCurrentIndex(self.testName.findData(self.settings.NAME)) self.hostName.setText(self.settings.HOST or "") self.testTitle.setText(self.settings.TITLE or "") self.outputDir.setText(os.path.realpath( self.settings.DATA_DIR or os.getcwd())) self.testLength.setValue(self.settings.LENGTH) self.extendedMetadata.setChecked(self.settings.EXTENDED_METADATA) self.selectOutputDir.clicked.connect(self.select_output_dir) self.runButton.clicked.connect(self.run_or_abort) self.monitor_timer = QTimer() self.monitor_timer.setInterval(500) self.monitor_timer.setSingleShot(False) self.monitor_timer.timeout.connect(self.update_progress) self.logEntries = QPlainTextLogger(self, level=logging.DEBUG, widget=self.logTextEdit) def show(self): super(NewTestDialog, self).show() add_log_handler(self.logEntries, replay=False) def log_settings(self, debug=False, exceptions=False): self.logEntries.setLevel(loggers.DEBUG if debug else loggers.INFO) self.logEntries.format_exceptions = exceptions def select_output_dir(self): directory = QFileDialog.getExistingDirectory(self, "Select output directory", self.outputDir.text()) if directory: self.outputDir.setText(directory) def closeEvent(self, event): remove_log_handler(self.logEntries) event.accept() def run_or_abort(self): if self.pid is None: self.run_test() else: self.abort_test() def run_test(self): test = self.testName.itemData(self.testName.currentIndex()) if hasattr(test, 'toString'): test = test.toString() host = self.hostName.text() path = self.outputDir.text() if not test or not host: logger.error("You must select a test to run and a " "hostname to connect to.") return if not os.path.isdir(path): logger.error("Output directory does not exist.") return test = str(test) host = str(host) path = str(path) self.settings.HOSTS = util.token_split(host) self.settings.NAME = test self.settings.TITLE = str(self.testTitle.text()) self.settings.LENGTH = self.testLength.value() self.settings.DATA_DIR = path self.settings.EXTENDED_METADATA = self.extendedMetadata.isChecked() self.settings.load_test(informational=True) self.settings.FORMATTER = "null" self.settings.TIME = util.utcnow() self.settings.DATA_FILENAME = None res = resultset.new(self.settings) self.settings.DATA_FILENAME = res.dump_filename self.total_time = self.settings.TOTAL_LENGTH self.start_time = time.time() self.testConfig.setEnabled(False) self.runButton.setText("&Abort test") self.runButton.setDefault(False) b = batch.new(self.settings) self.pid = b.fork_and_run(self.log_queue) self.monitor_timer.start() def abort_test(self): if QMessageBox.question(self, "Abort test?", "Are you sure you want to abort " "the current test?", QMessageBox.Yes | QMessageBox.No) \ != QMessageBox.Yes: return logger.info("Aborting test.") os.kill(self.pid, signal.SIGTERM) self.runButton.setEnabled(False) self.aborted = True logger.debug("Waiting for child process with PID %d to exit.", self.pid) def reset(self): self.testConfig.setEnabled(True) self.runButton.setText("&Run test") self.runButton.setDefault(True) self.runButton.setEnabled(True) self.progressBar.setValue(0) self.monitor_timer.stop() self.pid = None self.aborted = False self.settings = self.orig_settings.copy() def keyPressEvent(self, evt): if evt.key() == Qt.Key_Escape: evt.accept() if self.pid is not None: self.abort_test() else: self.close() else: super(NewTestDialog, self).keyPressEvent(evt) def update_progress(self): p, s = os.waitpid(self.pid, os.WNOHANG) if (p, s) == (0, 0): if not self.aborted: elapsed = time.time() - self.start_time self.progressBar.setValue(int(100 * elapsed / self.total_time)) else: fn = os.path.join(self.settings.DATA_DIR, self.settings.DATA_FILENAME) if os.path.exists(fn): self.parent().load_files([fn]) self.reset() class QPlainTextLogger(loggers.Handler): def __init__(self, parent, level=logging.NOTSET, widget=None, statusbar=None, timeout=5000): super(QPlainTextLogger, self).__init__(level=level) font = QFont("Monospace") font.setStyleHint(QFont.TypeWriter) self.widget = widget or QPlainTextEdit(parent) self.widget.setFont(font) self.widget.setReadOnly(True) self.widget.destroyed.connect(self.destroy_widget) self.statusbar = statusbar self.timeout = timeout def emit(self, record): if self.widget is None: return msg = self.format(record) self.widget.appendPlainText(msg) if self.statusbar: self.statusbar.showMessage(record.message, self.timeout) def destroy_widget(self): self.widget = None def write(self, p): pass class PlotModel(QStringListModel): def __init__(self, parent, plots): QStringListModel.__init__(self, parent) self.keys = list(plots.keys()) strings = [] for k, v in plots.items(): strings.append("%s (%s)" % (k, v['description'])) self.setStringList(strings) def index_of(self, plot): return self.index(self.keys.index(plot)) def name_of(self, idx): return self.keys[idx.row()] class TreeItem(object): def __init__(self, parent, name, value): self.parent = parent self.name = name self.children = [] if isinstance(value, list): self.value = "" for v in value: self.children.append(TreeItem(self, "", v)) elif isinstance(value, dict): self.value = "" for k, v in sorted(value.items()): self.children.append(TreeItem(self, k, v)) else: self.value = value self.children = [] def __len__(self): return len(self.children) class MetadataModel(QAbstractItemModel): header_names = [u"Name", u"Value"] def __init__(self, parent, datadict): QAbstractItemModel.__init__(self, parent) self.root = TreeItem(None, "root", datadict) def columnCount(self, parent): return 2 def rowCount(self, parent): if parent.isValid(): return len(parent.internalPointer()) return len(self.root) def headerData(self, section, orientation, role=Qt.DisplayRole): if orientation == Qt.Vertical or role != Qt.DisplayRole: return None return self.header_names[section] def data(self, idx, role=Qt.DisplayRole): if role not in (Qt.DisplayRole, Qt.StatusTipRole, Qt.ToolTipRole): return None item = idx.internalPointer() if role in (Qt.StatusTipRole, Qt.ToolTipRole): if item.name: return "%s: %s" % (item.name, item.value) else: return item.value if idx.column() == 0: return item.name elif idx.column() == 1: return str(item.value) def parent(self, idx): item = idx.internalPointer() if item is None or item.parent in (None, self.root): return QModelIndex() parent = item.parent row = parent.parent.children.index(parent) return self.createIndex(row, 0, parent) def index(self, row, column, parent): item = parent.internalPointer() if item is None: item = self.root return self.createIndex(row, column, item.children[row]) class MetadataView(QTreeView): def __init__(self, parent, openFilesView): super(MetadataView, self).__init__(parent) self.setAlternatingRowColors(True) self.setMouseTracking(True) self.setEditTriggers(QAbstractItemView.NoEditTriggers) self.setContextMenuPolicy(Qt.DefaultContextMenu) self.pinned_entries = set() self.openFilesView = openFilesView def contextMenuEvent(self, event): idx = self.indexAt(event.pos()) menu = QMenu() def pin(): self.add_pin(idx) def col(): self.add_open_files_col(idx) def copy(): self.copy_value(idx) menu.addActions([ QAction("&Pin expanded", menu, triggered=pin), QAction("&Add open files column", menu, triggered=col), QAction("&Copy value to clipboard", menu, triggered=copy) ]) menu.exec_(event.globalPos()) event.accept() def get_metadata_path(self, idx): path = [] while idx.isValid(): name = self.model().data(self.model().index(idx.row(), 0, idx.parent()), Qt.DisplayRole) path.insert(0, name or idx.row()) idx = idx.parent() return tuple(path) def add_pin(self, idx): pin = self.get_metadata_path(idx) if pin in self.pinned_entries: self.pinned_entries.remove(pin) else: self.pinned_entries.add(pin) def add_open_files_col(self, idx): path = self.get_metadata_path(idx) self.openFilesView.horizontalHeader().add_column(None, ":".join(map(str, path))) def copy_value(self, idx): val = self.model().data(self.model().index(idx.row(), 1, idx.parent()), Qt.DisplayRole) QGuiApplication.clipboard().setText(val) def setModel(self, model): super(MetadataView, self).setModel(model) self.restore_pinned() def restore_pinned(self): if not self.model(): return for pin in self.pinned_entries: parent = QModelIndex() for n in pin: try: if isinstance(n, int): idx = self.model().index(n, 0, parent) else: idx = self.model().match(self.model().index( 0, 0, parent), Qt.DisplayRole, n)[0] self.setExpanded(idx, True) parent = idx except IndexError: logger.warning("Could not find pinned entry '%s'.", ":".join(map(str, pin))) break except Exception as e: logger.exception("Restoring pin '%s' failed: %s.", ":".join(map(str, pin)), e) break class ActionWidget(object): def __init__(self, parent, action, default=None): super(ActionWidget, self).__init__(parent) self.action = action self.default = default self.timer = QTimer(self) self.timer.setInterval(1000) self.timer.timeout.connect(self.value_changed) self.value_changed.connect(self.timer.stop) self.connect_timer(self) help = getattr(action, "gui_help", getattr(action, "help", "")) if "." in help: self.setToolTip(help.split(".", 1)[1].strip()) def key(self): return self.action.dest def connect_timer(self, widget): for p in "valueChanged", "textChanged": if hasattr(widget, p): getattr(widget, p).connect(self.timer.start) class BooleanActionWidget(ActionWidget, QComboBox): value_changed = Signal() def __init__(self, *args, **kwargs): super(BooleanActionWidget, self).__init__(*args, **kwargs) self.addItems(["Disabled", "Enabled"]) self.currentIndexChanged.connect(self.value_changed) self.clear() def value(self): # This always shows boolean options (store_true and store_false) as # their actual boolean values, not the possible reversed ones. Only # works right if store_false options has a gui_help that fits to this # usage (or the help text will not make sense). return bool(self.currentIndex()) def clear(self): if self.default is not None: self.setCurrentIndex(int(self.default)) else: self.setCurrentIndex(int(not self.action.const)) class ChoicesActionWidget(ActionWidget, QComboBox): value_changed = Signal() def __init__(self, *args, **kwargs): super(ChoicesActionWidget, self).__init__(*args, **kwargs) self.addItem("Unset") self.addItems(self.action.choices) self.currentIndexChanged.connect(self.value_changed) self.clear() def value(self): idx = self.currentIndex() if idx == 0: return None return self.action.choices[idx-1] def clear(self): if self.default: self.setCurrentIndex(self.action.choices.index(self.default)+1) else: self.setCurrentIndex(0) class NoneSpinBoxMixin(object): def __init__(self, *args, **kwargs): super(NoneSpinBoxMixin, self).__init__(*args, **kwargs) self.setSpecialValueText("Unset") def value(self): v = super(NoneSpinBoxMixin, self).value() if v == self.minimum(): return None return v def valueFromText(self, text): if not text: return self.minimum() return super(NoneSpinBoxMixin, self).valueFromText(text) def validate(self, text, pos): if not text: return QValidator.Acceptable, text, pos return super(NoneSpinBoxMixin, self).validate(text, pos) class NoneDoubleSpinBox(NoneSpinBoxMixin, QDoubleSpinBox): value_changed = Signal() class IntActionWidget(ActionWidget, NoneSpinBoxMixin, QSpinBox): value_changed = Signal() def __init__(self, *args, **kwargs): super(IntActionWidget, self).__init__(*args, **kwargs) self.setRange(0, 1000) self.clear() self.setSpecialValueText("Unset") self.editingFinished.connect(self.value_changed) def clear(self): if self.default: self.setValue(self.default) else: self.setValue(self.minimum()) class FloatActionWidget(ActionWidget, NoneSpinBoxMixin, QDoubleSpinBox): value_changed = Signal() def __init__(self, *args, **kwargs): super(FloatActionWidget, self).__init__(*args, **kwargs) self.setRange(0, 1000) self.clear() self.editingFinished.connect(self.value_changed) def clear(self): if self.default: self.setValue(self.default) else: self.setValue(self.minimum()) class PairActionWidget(ActionWidget, QWidget): value_changed = Signal() def __init__(self, parent, action, widget=QLineEdit, **kwargs): super(PairActionWidget, self).__init__(parent, action, **kwargs) layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) self._left = widget() self._right = widget() layout.addWidget(self._left) layout.addWidget(self._right) self.setLayout(layout) self.clear() self._left.editingFinished.connect(self.value_changed) self._right.editingFinished.connect(self.value_changed) self.connect_timer(self._left) self.connect_timer(self._right) def value(self): if self._left.text() or self._right.text(): return (self._left.text(), self._right.text()) return None def clear(self): self._left.setText("") self._right.setText("") class FloatPairActionWidget(PairActionWidget): value_changed = Signal() def __init__(self, *args, **kwargs): kwargs["widget"] = NoneDoubleSpinBox super(FloatPairActionWidget, self).__init__(*args, **kwargs) self._left.setSpecialValueText("Unset") self._left.setRange(-1000, 100000) self._right.setSpecialValueText("Unset") self._right.setRange(-1000, 100000) self.clear() def value(self): v = (self._left.value(), self._right.value()) if v == (None, None): return None return v def clear(self): if self.default: self._left.setValue(self.default[0] or self._left.minimum()) self._right.setValue(self.default[1] or self._left.minimum()) else: self._left.setValue(self._left.minimum()) self._right.setValue(self._left.minimum()) class TextActionWidget(ActionWidget, QLineEdit): value_changed = Signal() def __init__(self, *args, **kwargs): super(TextActionWidget, self).__init__(*args, **kwargs) self.clear() self.editingFinished.connect(self.value_changed) self.setMinimumSize(self.sizeHint()) def value(self): if not self.text(): return None return self.text() def clear(self): self.setText(self.default or "") class AddRemoveWidget(QWidget): add_pressed = Signal() remove_pressed = Signal('QWidget') value_changed = Signal() def __init__(self, parent, subwidget): super(AddRemoveWidget, self).__init__(parent) layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(subwidget) self._subwidget = subwidget self._add_button = QPushButton("+", self) self._add_button.setFixedSize(20, 20) self._remove_button = QPushButton("-", self) self._remove_button.setFixedSize(20, 20) self._remove_button.clicked.connect(self.remove) self._add_button.clicked.connect(self.add_pressed) layout.addWidget(self._add_button) layout.addWidget(self._remove_button) self.setLayout(layout) def set_add_button(self, visible): self._add_button.setVisible(visible) def remove(self): self.remove_pressed.emit(self) def clear(self): self._subwidget.clear() def value(self): return self._subwidget.value() class MultiValWidget(ActionWidget, QWidget): value_changed = Signal() def __init__(self, *args, **kwargs): widget = kwargs.get("widget", TextActionWidget) combiner_func = kwargs.get("combiner_func", list) for k in 'widget', 'combiner_func': if k in kwargs: del kwargs[k] super(MultiValWidget, self).__init__(*args, **kwargs) self._widget_class = widget self._combiner_func = combiner_func layout = QVBoxLayout() layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) for i in range(max(len(self.default or []), 1)): self.create_widget() def create_widget(self): count = self.layout().count() if count > 0: self.layout().itemAt(count - 1).widget().set_add_button(False) if count < len(self.default): default = self.default[count] else: default = None sw = self._widget_class(self, self.action, default=default) sw.value_changed.connect(self.value_changed) wdgt = AddRemoveWidget(self, sw) wdgt.remove_pressed.connect(self.destroy_widget) wdgt.add_pressed.connect(self.create_widget) self.layout().addWidget(wdgt) self.value_changed.emit() def find_widget(self, widget): for i in range(self.layout().count()): itm = self.layout().itemAt(i) if itm and itm.widget() == widget: return i return None def destroy_widget(self, widget): count = self.layout().count() if count > 1: if self.find_widget(widget) == count - 1: self.layout().itemAt(count - 2).widget().set_add_button(True) self.layout().removeWidget(widget) widget.deleteLater() else: self.layout().itemAt(0).widget().clear() self.value_changed.emit() def value_iter(self): for i in range(self.layout().count()): itm = self.layout().itemAt(i) if itm and itm.widget(): yield itm.widget().value() def value(self): if not any(self.value_iter()): return self._combiner_func() return self._combiner_func(self.value_iter()) class SettingsWidget(QScrollArea): values_changed = Signal() _widget_type_map = {int: IntActionWidget, float: FloatActionWidget, util.float_pair: FloatPairActionWidget, util.float_pair_noomit: FloatPairActionWidget, util.comma_list: MultiValWidget, util.keyval: PairActionWidget, str: TextActionWidget} def __init__(self, parent, options, settings, compact=False): super(SettingsWidget, self).__init__(parent) widget = QWidget(self) layout = QFormLayout() for a in options._group_actions: if getattr(a, "hide_gui", False) or a.help is SUPPRESS: continue wdgt = self._action_widget(a, getattr(settings, a.dest)) wdgt.value_changed.connect(self.values_changed) layout.addRow(self._action_name(a), wdgt) layout.setRowWrapPolicy(QFormLayout.WrapLongRows) layout.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint) widget.setLayout(layout) self.setWidget(widget) self.setWidgetResizable(True) def _action_name(self, action): if hasattr(action, "gui_help"): return action.gui_help.split(".")[0] elif hasattr(action, "help"): return action.help.split(".")[0] return action.option_strings[-1] def _action_widget(self, action, default): if action.type is None and type(action.const) == bool: return BooleanActionWidget(self, action, default=default) cn = action.__class__.__name__ if action.choices: widget = ChoicesActionWidget else: try: widget = self._widget_type_map[action.type] except KeyError: raise RuntimeError("Unknown type %s for option %s" % ( action.type, action.dest)) if cn == "_StoreAction": return widget(self, action, default=default) elif cn == "_AppendAction": return MultiValWidget(self, action, widget=widget, default=default) elif cn == "Update": return MultiValWidget(self, action, widget=widget, default=default, combiner_func=dict) else: raise RuntimeError("Unknown class: %s" % cn) def widget_iter(self): layout = self.widget().layout() for i in range(layout.rowCount()): itm = layout.itemAt(i, QFormLayout.FieldRole) if itm and itm.widget(): yield i, itm.widget() def value_iter(self): for i, w in self.widget_iter(): yield (w.key(), w.value()) def values(self): return dict(self.value_iter()) class ResultsetStore(object): def __init__(self): self._store = {} self._order = [] self._sort_key = 'DATA_FILENAME' self._sort_rev = False def __len__(self): return sum([len(i) for i in self._store.values()]) def __contains__(self, itm): for v in self._store.values(): if itm in v: return True return False def __getitem__(self, idx): offset = 0 for k in self._order: v = self._store[k] if idx < len(v) + offset: return v[idx - offset] offset += len(v) raise IndexError() def sort(self, key=None, reverse=False, only=None): if key is None: key = self._sort_key reverse = self._sort_rev def get_key(itm): try: return str(itm.meta(key)) except KeyError: return '' if only: only.sort(key=get_key, reverse=reverse) else: self._sort_key, self._sort_rev = key, reverse for v in self._store.values(): v.sort(key=get_key, reverse=reverse) def update_order(self, active): self._order = [active] + sorted([i for i in self._order if i != active]) def append(self, itm): k = itm.meta('NAME') if k in self._store: self._store[k].append(itm) self.sort(only=self._store[k]) else: self._store[k] = [itm] self._order.append(k) class OpenFilesModel(QAbstractTableModel): test_name_role = Qt.UserRole def __init__(self, parent): QAbstractTableModel.__init__(self, parent) self._parent = parent self.open_files = ResultsetStore() self.columns = [(None, 'Act'), ('DATA_FILENAME', 'Filename'), ('TITLE', 'Title')] self.active_widget = None @property def ctrl_pressed(self): return bool(QApplication.keyboardModifiers() & Qt.ControlModifier) def save_columns(self): return base64.b64encode(pickle.dumps(self.columns, protocol=0)).decode() def restore_columns(self, data): try: cols = pickle.loads(base64.b64decode(data)) except: return if len(cols) > len(self.columns): self.beginInsertColumns( QModelIndex(), len(self.columns), len(cols) - 1) self.columns = cols self.endInsertColumns() elif len(cols) < len(self.columns): self.beginRemoveColumns( QModelIndex(), len(cols), len(self.columns) - 1) self.columns = cols self.endRemoveColumns() else: self.columns = cols self.update() @property def has_widget(self): return self.active_widget is not None and self.active_widget.is_active def is_active(self, idx): if not self.has_widget: return False return self.active_widget.has(self.open_files[idx]) def update_order(self): if self.has_widget: self.open_files.update_order(self.active_widget.results.meta("NAME")) def set_active_widget(self, widget): self.active_widget = widget self.update() def on_click(self, idx): if not self.is_active(idx.row()) or self.ctrl_pressed: self.activate(idx.row()) else: self.deactivate(idx.row()) def update(self): self.update_order() self.dataChanged.emit(self.index(0, 0), self.index(len(self.open_files), len(self.columns))) def activate(self, idx, new_tab=False): if new_tab or not self.has_widget or self.ctrl_pressed: self._parent.load_files([self.open_files[idx]]) return True ret = self.active_widget.add_extra(self.open_files[idx]) self.update() return ret def deactivate(self, idx): if not self.has_widget: return False ret = self.active_widget.remove_extra(self.open_files[idx]) self.update() return ret def is_primary(self, idx): if not self.has_widget: return False return self.active_widget.results == self.open_files[idx] def add_file(self, r): if r in self.open_files: return self.beginInsertRows(QModelIndex(), len( self.open_files), len(self.open_files)) self.open_files.append(r) self.endInsertRows() self.update() def rowCount(self, parent): if parent.isValid(): return 0 return len(self.open_files) def columnCount(self, parent): if parent.isValid(): return 0 return len(self.columns) def headerData(self, section, orientation, role): if role == Qt.DisplayRole and orientation == Qt.Horizontal: return self.columns[section][1] if role == Qt.DisplayRole and orientation == Qt.Vertical: return section + 1 if role == Qt.ToolTipRole and \ orientation == Qt.Horizontal and \ section > 0: return "Metadata path: %s.\nRight click to add or remove columns." \ % self.columns[section][0] if role == Qt.TextAlignmentRole: return Qt.AlignLeft | Qt.AlignVCenter def flags(self, idx): flags = super(OpenFilesModel, self).flags(idx) if idx.column() == 0: flags |= Qt.ItemIsUserCheckable if (self.has_widget and self.active_widget.results.meta("NAME") != self.open_files[idx.row()].meta("NAME"))\ or (self.is_primary(idx.row()) and len(self.active_widget.extra_results) == 0): flags &= ~Qt.ItemIsEnabled return flags def get_metadata(self, idx, name): try: return str(self.open_files[idx].meta(name)) except KeyError: return None def removeColumn(self, col, parent): if col == 0: return False self.beginRemoveColumns(parent, col, col) self.columns[col:col + 1] = [] self.endRemoveColumns() def add_column(self, pos, path, name): self.beginInsertColumns(QModelIndex(), pos, pos) self.columns.insert(pos, (path, name)) self.endInsertColumns() def data(self, idx, role=Qt.DisplayRole): if role == self.test_name_role: return self.open_files[idx.row()].meta('NAME') if idx.column() == 0: value = self.is_active(idx.row()) if role == Qt.CheckStateRole: return Qt.Checked if value else Qt.Unchecked else: return None if role == Qt.ToolTipRole: if not self.has_widget: return "Click to open in new tab." elif self.is_primary(idx.row()) and len( self.active_widget.extra_results) == 0: return "Can't deselect last item. Ctrl+click to open in new tab." elif self.flags(idx) & Qt.ItemIsEnabled: return "Click to select/deselect. Ctrl+click to open in new tab." else: return "Ctrl+click to open in new tab." if role == Qt.TextAlignmentRole: return Qt.AlignLeft | Qt.AlignVCenter if role == Qt.DisplayRole: return self.get_metadata(idx.row(), self.columns[idx.column()][0]) if role == Qt.FontRole: font = QFont() if self.is_primary(idx.row()) and font is not None: font.setBold(True) return font def sort(self, column, order): if column == 0: return key = self.columns[column][0] self.open_files.sort(key, (order == Qt.DescendingOrder)) self.update() class OpenFilesView(QTableView): def __init__(self, parent): super(OpenFilesView, self).__init__(parent) self.setCursor(QCursor(Qt.PointingHandCursor)) self.setSelectionMode(QAbstractItemView.NoSelection) self.setAlternatingRowColors(True) self.setSortingEnabled(True) self.sortByColumn(1, Qt.AscendingOrder) self.setHorizontalHeader(OpenFilesHeader(self)) self.setContextMenuPolicy(Qt.DefaultContextMenu) def remove_column(self, col): self.model().removeColumn(col, QModelIndex()) def close_file(self, row): self.model().removeRow(row, QModelIndex()) def mouseReleaseEvent(self, event): # Prevent clicked() from being emitted on right click if event.button() == Qt.LeftButton: super(OpenFilesView, self).mouseReleaseEvent(event) else: event.ignore() def contextMenuEvent(self, event): idx = self.indexAt(event.pos()) menu = QMenu() def opn(): self.model().activate(idx.row(), True) act_opn = QAction("&Open in new tab", menu, triggered=opn) sep = QAction(menu) sep.setSeparator(True) menu.addActions([act_opn, sep]) menu.addActions(self.horizontalHeader( ).column_actions(idx.column(), menu)) menu.exec_(event.globalPos()) event.accept() class OpenFilesHeader(QHeaderView): def __init__(self, parent): super(OpenFilesHeader, self).__init__(Qt.Horizontal, parent) self._parent = parent try: self.setSectionsMovable(True) except AttributeError: self.setMovable(True) self.setContextMenuPolicy(Qt.DefaultContextMenu) def column_actions(self, col, parent): actions = [] if col > 0: def rem(): self._parent.remove_column(col) name = self.model().headerData(col, Qt.Horizontal, Qt.DisplayRole) actions.append(QAction("&Remove column '%s'" % name, parent, triggered=rem)) def add(): self.add_column(col) actions.append(QAction("&Add new column", parent, triggered=add)) return actions def add_column(self, col=None, path=None): if col is None: col = self.model().columnCount(QModelIndex()) dialog = AddColumnDialog(self, path) if not dialog.exec_() or not dialog.get_path(): return vis_old = self.visualIndex(col) self.model().add_column(col + 1, dialog.get_path(), dialog.get_name()) vis_new = self.visualIndex(col + 1) self.moveSection(vis_new, vis_old + 1) self._parent.resizeColumnToContents(col + 1) def contextMenuEvent(self, event): idx = self.logicalIndexAt(event.pos()) menu = QMenu() menu.addActions(self.column_actions(idx, menu)) menu.exec_(event.globalPos()) event.accept() class AddColumnDialog(QDialog): def __init__(self, parent, path=None): super(AddColumnDialog, self).__init__(parent) uic.loadUi(get_ui_file("addcolumn.ui"), self) self.metadataPathEdit.textChanged.connect(self.update_name) self.columnNameEdit.textEdited.connect(self.name_entered) self.name_entered = False if path is not None: self.metadataPathEdit.setText(path) def name_entered(self): self.name_entered = True def update_name(self, text): if self.name_entered: return parts = text.split(":") self.columnNameEdit.setText(parts[-1]) def get_path(self): return str(self.metadataPathEdit.text()) def get_name(self): return str(self.columnNameEdit.text()) class UpdateDisabler(object): def __init__(self, widget): self.widget = widget def __enter__(self): self.widget.setUpdatesEnabled(False) def __exit__(self, *ignored): self.widget.setUpdatesEnabled(True) self.widget.update() class FigureManager(matplotlib.backend_bases.FigureManagerBase): def __init__(self, widget, canvas): super(FigureManager, self).__init__(canvas, 0) self.widget = widget def get_window_title(self): return self.widget.title class ResultWidget(QWidget): update_start = Signal() update_end = Signal() plot_changed = Signal('QString', 'QString') new_plot = Signal() name_changed = Signal() default_title = "New tab" def __init__(self, parent, settings, worker_pool): super(ResultWidget, self).__init__(parent) uic.loadUi(get_ui_file("resultwidget.ui"), self) self.results = None self.settings = settings.copy() self.dirty = True self.settings.OUTPUT = "-" self.extra_results = [] self.title = self.default_title self.plotModel = None self.plotSelectionModel = None self.metadataModel = None self.metadataSelectionModel = None self.toolbar = None self.plotter = None self.canvas = None self.needs_resize = False self.was_destroyed = False self.new_plot.connect(self.get_plotter) self.async_fig = None self.async_timer = QTimer(self) self.async_timer.setInterval(100) self.async_timer.timeout.connect(self.get_plotter) self.worker_pool = worker_pool @property def is_active(self): return self.results is not None def init_plotter(self): if not self.results: return try: self.plotter = plotters.new(self.settings) except Exception as e: logger.exception("Plot '%s' failed: %s. " "Falling back to default plot '%s'.", self.settings.PLOT, e, self.settings.DEFAULTS['PLOT']) self.settings.PLOT = self.settings.DEFAULTS['PLOT'] self.plotter = plotters.new(self.settings) if self.settings.GUI_NO_DEFER: self.redraw() def init_canvas(self): self.canvas = FigureCanvas(self.plotter.figure) self.canvas.setParent(self.graphDisplay) self.toolbar = NavigationToolbar(self.canvas, self.graphDisplay) self.manager = FigureManager(self, self.canvas) vbl = QVBoxLayout() vbl.addWidget(self.canvas) vbl.addWidget(self.toolbar) self.graphDisplay.setLayout(vbl) def has(self, resultset): return resultset in chain([self.results], self.extra_results) def load_results(self, results, plot=None): if isinstance(results, LoadedResultset): self.results = results['results'] self.settings.DEFAULTS = results['defaults'] self.settings.DATA_SETS = results['data_sets'] self.settings.PLOTS = results['plots'] self.settings.DESCRIPTION = results['description'] self.settings.update_defaults() elif isinstance(results, ResultSet): self.results = results else: self.results = ResultSet.load_file(str(results)) self.settings.compute_missing_results(self.results) if plot and plot in self.settings.PLOTS: self.settings.PLOT = plot self.settings.update(self.results.meta()) if not self.settings.PLOTS: self.settings.load_test(informational=True) self.title = self.results.title self.long_title = self.results.long_title self.init_plotter() self.plotModel = PlotModel(self, self.settings.PLOTS) self.plotSelectionModel = QItemSelectionModel(self.plotModel) self.plotSelectionModel.setCurrentIndex( self.plotModel.index_of(self.settings.PLOT), QItemSelectionModel.SelectCurrent) self.plotSelectionModel.currentChanged.connect(self.change_plot) self.metadataModel = MetadataModel(self, self.results.meta()) self.metadataSelectionModel = QItemSelectionModel(self.metadataModel) return True def disconnect_all(self): for s in (self.update_start, self.update_end, self.plot_changed): s.disconnect() self.was_destroyed = True def disable_cleanup(self): if self.plotter is not None: self.plotter.disable_cleanup = True def load_files(self, filenames): added = 0 for f in filenames: if self.add_extra(ResultSet.load_file(str(f))): self.update(False) added += 1 self.redraw() return added def add_extra(self, resultset): if self.results is None: return self.load_results(resultset) if resultset in self.extra_results: return False if resultset.meta('NAME') == self.settings.NAME: self.extra_results.append(resultset) self.update() return True return False def remove_extra(self, resultset): if resultset not in self.extra_results: if resultset == self.results and self.extra_results: self.results = self.extra_results.pop(0) self.update() return True return False self.extra_results.remove(resultset) self.update() return True def clear_extra(self): self.extra_results = [] self.update() @property def can_save(self): # Check for attribute to not crash on a matplotlib version that does not # have the save action. return hasattr(self.toolbar, 'save_figure') def save_plot(self): if self.can_save: self.toolbar.save_figure() def highlight(self, val=None): if val is not None and val != self.settings.HOVER_HIGHLIGHT: self.settings.HOVER_HIGHLIGHT = val self.update() return self.settings.HOVER_HIGHLIGHT def zoom(self, axis, direction='in'): if self.plotter: self.plotter.zoom(axis, direction) def update_settings(self, values): if not self.results: t = self.default_title elif values['OVERRIDE_TITLE']: t = "%s - %s" % (self.results.meta('NAME'), values['OVERRIDE_TITLE']) else: t = self.results.title if t != self.title: self.title = t self.name_changed.emit() if self.settings.update(values): self.update() def change_plot(self, plot_name): if not self.plotter: return if isinstance(plot_name, QModelIndex): plot_name = self.plotModel.name_of(plot_name) plot_name = str(plot_name) if plot_name != self.settings.PLOT and plot_name in self.settings.PLOTS: self.settings.PLOT = plot_name self.plotSelectionModel.setCurrentIndex( self.plotModel.index_of(self.settings.PLOT), QItemSelectionModel.SelectCurrent) self.plot_changed.emit(self.settings.NAME, self.settings.PLOT) self.update() return True return False @property def current_plot(self): if not self.is_active: return None return self.settings.PLOT def updates_disabled(self): return UpdateDisabler(self) def update(self, redraw=True): self.dirty = True if redraw and ((self.isVisible() and self.updatesEnabled()) or self.settings.GUI_NO_DEFER): self.redraw() def activate(self): self.get_plotter() if self.async_fig: self.async_timer.start() if not self.canvas: return if self.needs_resize: self.canvas.resizeEvent(QResizeEvent(self.canvas.size(), self.canvas.size())) self.needs_resize = False try: self.canvas.blit(self.canvas.figure.bbox) except AttributeError: pass # Simulate a mouse move event when the widget is activated. This ensures # that the interactive plot highlight will get updated correctly. pt = self.canvas.mapFromGlobal(QCursor.pos()) evt = QMouseEvent(QEvent.MouseMove, pt, Qt.NoButton, Qt.NoButton, Qt.NoModifier) self.canvas.mouseMoveEvent(evt) def redraw(self): if not self.dirty or not self.is_active: return if self.settings.SCALE_MODE: self.settings.SCALE_DATA = self.extra_results res = [self.results] else: self.settings.SCALE_DATA = [] res = [self.results] + self.extra_results self.async_fig = self.worker_pool.apply_async( plotters.draw_worker, (self.settings, res), callback=self.recv_plot) if self.isVisible(): self.async_timer.start() self.plotter.disconnect_callbacks() self.dirty = False self.setCursor(Qt.WaitCursor) def recv_plot(self, fig): if self.was_destroyed: return self.new_plot.emit() def get_plotter(self): if not self.async_fig or not self.async_fig.ready(): return try: fig = self.async_fig.get() self.plotter = fig if not self.canvas: self.init_canvas() else: self.canvas.figure = self.plotter.figure self.plotter.figure.set_canvas(self.canvas) self.plotter.connect_interactive() if self.isVisible(): self.canvas.resizeEvent(QResizeEvent(self.canvas.size(), self.canvas.size())) else: self.needs_resize = True except Exception as e: logger.exception("Aborting plotting due to error: %s", str(e)) finally: self.async_fig = None self.async_timer.stop() self.setCursor(Qt.ArrowCursor) self.update_end.emit() def setCursor(self, cursor): super(ResultWidget, self).setCursor(cursor) if self.canvas: self.canvas.setCursor(cursor) if self.toolbar: self.toolbar.setCursor(cursor) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/loggers.py������������������������������������������������������������������������0000664�0000000�0000000�00000021130�14670056262�0015754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # loggers.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 6 January 2017 # Copyright (c) 2017, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import logging import sys from logging import StreamHandler, FileHandler, Formatter err_handler = out_handler = cache_handler = None logfiles = set() START_MARKER = "-- OUTPUT START -->" END_MARKER = "<-- OUTPUT END --" DEBUG = logging.DEBUG INFO = logging.INFO WARNING = logging.WARNING ENCODING = "UTF-8" try: import locale ENCODING = locale.getpreferredencoding(False) except: pass class FilterAll(object): def filter(self, record): return 0 class MaxFilter(object): def __init__(self, maxlvl): self.maxlvl = maxlvl def filter(self, record): if record.levelno > self.maxlvl: return 0 return 1 class NamePrefixFilter(object): def __init__(self, prefix): self.prefix = prefix def filter(self, record): if record.name.startswith(self.prefix): return 0 return 1 class LevelDemoteFilter(object): def __init__(self, maxlevel): self.maxlevel = maxlevel def filter(self, record): if record.levelno > self.maxlevel: record.levelno = self.maxlevel return 1 class LogFormatter(Formatter): def __init__(self, fmt=None, datefmt=None, output_markers=None, max_lines=None): self.format_exceptions = True self.max_lines = max_lines if output_markers is not None: self.start_marker, self.end_marker = output_markers else: self.start_marker = self.end_marker = None super(LogFormatter, self).__init__(fmt, datefmt) def formatException(self, ei): if not self.format_exceptions: return "" # A string already formatted - passed through a pipe if hasattr(ei, "upper"): return ei return super(LogFormatter, self).formatException(ei) def limit_lines(self, output): if self.max_lines is not None: lines = output.splitlines() if len(lines) > self.max_lines: output = "\n".join(lines[:self.max_lines]) + "\n[...truncated...]\n" return output def format(self, record): s = super(LogFormatter, self).format(record) if self.start_marker is None: return s if hasattr(record, 'output'): if s[-1:] != "\n": s = s + "\n" s = s + self.start_marker + self.limit_lines(record.output) + self.end_marker elif hasattr(record, 'runner'): if s[-1:] != "\n": s = s + "\n" s = s + "Runner class: %s\n" % record.runner.__class__.__name__ s = s + "Command: %s\n" % record.runner.command s = s + "Return code: %s\n" % record.runner.returncode s = s + "Stdout: " + self.start_marker + self.limit_lines(record.runner.out) + \ self.end_marker + "\n" s = s + "Stderr: " + self.start_marker + self.limit_lines(record.runner.err) + \ self.end_marker return s class Handler(logging.Handler): def get_format_exceptions(self): return self.formatter.format_exceptions def set_format_exceptions(self, val): self.formatter.format_exceptions = val format_exceptions = property(get_format_exceptions, set_format_exceptions) class QueueHandler(Handler): def __init__(self, queue, level=logging.NOTSET): super(QueueHandler, self).__init__(level=level) self.queue = queue def emit(self, record): if record.exc_info: # The log formatter will use the cached exc_text in place of the # exc_info Traceback object; since Traceback objects can't be # pickled, use this to pass over the formatted exception text # instead. fmt = Formatter() record.exc_info = fmt.formatException(record.exc_info) self.queue.put(record) def write(self, m): pass class CachingHandler(Handler): def __init__(self, level=logging.NOTSET, max_entries=200): super(CachingHandler, self).__init__(level=level) self.max_entries = 200 self.cache = [] def emit(self, record): self.cache.append(record) while len(self.cache) > self.max_entries: self.cache.pop(0) def replay(self, handler): for r in self.cache: if r.levelno >= handler.level: handler.handle(r) def write(self, m): pass def flush(self): self.cache = [] def get_logger(name): return logging.getLogger(name) def setup_console(): global err_handler, out_handler, cache_handler if err_handler is not None: return logger = logging.getLogger() err_handler = StreamHandler(sys.stderr) err_handler.setLevel(logging.WARNING) fmt = LogFormatter(fmt="%(levelname)s: %(message)s", output_markers=("", ""), max_lines=100) fmt.format_exceptions = False err_handler.setFormatter(fmt) logger.addHandler(err_handler) out_handler = StreamHandler(sys.stdout) out_handler.setLevel(logging.INFO) out_handler.setFormatter(LogFormatter(fmt="%(message)s")) out_handler.addFilter(MaxFilter(logging.INFO)) add_common_filters(out_handler) logger.addHandler(out_handler) cache_handler = CachingHandler() logger.addHandler(cache_handler) logger.setLevel(logging.DEBUG) logging.captureWarnings(True) logging.getLogger("py.warnings").addFilter(LevelDemoteFilter(DEBUG)) logging.getLogger("matplotlib.font_manager").addFilter(FilterAll()) logging.raiseExceptions = False def set_console_level(level): logger = logging.getLogger() out_handler.setLevel(level) logger.setLevel(min(logger.level, level)) def reset_to_null(): logger = logging.getLogger() handlers = logger.handlers[:] for h in handlers: logger.removeHandler(h) handler = logging.NullHandler() logger.addHandler(handler) def add_common_filters(handler): handler.addFilter(NamePrefixFilter("PyQt")) def setup_logfile(filename, level=DEBUG, maxlevel=None, replay=True): if filename in logfiles: return logfiles.add(filename) logger = logging.getLogger() handler = FileHandler(filename, encoding='utf-8') add_common_filters(handler) handler.setLevel(level) fmt = LogFormatter( fmt="%(asctime)s [%(name)s] %(levelname)s: %(message)s", output_markers=(START_MARKER, END_MARKER)) handler.setFormatter(fmt) if maxlevel: filt = MaxFilter(maxlevel) handler.addFilter(filt) logger.addHandler(handler) logger.setLevel(min(logger.level, level)) if replay and cache_handler is not None: cache_handler.replay(handler) return handler def remove_log_handler(handler): if not handler: return handler.flush() logger = logging.getLogger() logger.removeHandler(handler) def add_log_handler(handler, replay=True): logger = logging.getLogger() fmt = LogFormatter( fmt="%(asctime)s %(levelname)s: %(message)s", datefmt="%H:%M:%S") handler.setFormatter(fmt) add_common_filters(handler) logger.addHandler(handler) logger.setLevel(min(logger.level, handler.level)) if replay and cache_handler is not None: cache_handler.replay(handler) def set_queue_handler(queue): logger = logging.getLogger() for h in logger.handlers[:]: logger.removeHandler(h) handler = QueueHandler(queue) logger.addHandler(handler) logging.captureWarnings(True) logging.getLogger("py.warnings").addFilter(LevelDemoteFilter(DEBUG)) def enable_exceptions(): if err_handler is not None: err_handler.formatter.format_exceptions = True def flush_cache(): if cache_handler is not None: cache_handler.flush() ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/metadata.py�����������������������������������������������������������������������0000664�0000000�0000000�00000047465�14670056262�0016115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # metadata.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 27 January 2014 # Copyright (c) 2014-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import os import re import subprocess from flent import util from flent.loggers import get_logger logger = get_logger(__name__) TIMEOUT = 5 INTERESTING_OFFLOADS = ['tcp-segmentation-offload', 'udp-fragmentation-offload', 'large-receive-offload', 'generic-segmentation-offload', 'generic-receive-offload'] INTERESTING_SYSCTLS = ['net.core.rmem_max', 'net.core.wmem_max', 'net.ipv4.tcp_autocorking', 'net.ipv4.tcp_early_retrans', 'net.ipv4.tcp_ecn', 'net.ipv4.tcp_pacing_ca_ratio', 'net.ipv4.tcp_pacing_ss_ratio', 'net.ipv4.tcp_dsack', 'net.ipv4.tcp_fack', 'net.ipv4.tcp_sack', 'net.ipv4.tcp_fastopen', 'net.ipv4.tcp_syncookies', 'net.ipv4.tcp_window_scaling', 'net.ipv4.tcp_notsent_lowat', 'net.ipv4.tcp_limit_output_bytes', 'net.ipv4.tcp_timestamps', 'net.ipv4.tcp_congestion_control', 'net.ipv4.tcp_allowed_congestion_control', 'net.ipv4.tcp_available_congestion_control', 'net.ipv4.tcp_mem', 'net.ipv4.tcp_rmem', 'net.ipv4.tcp_wmem', 'net.ipv4.tcp_moderate_rcvbuf', 'net.ipv4.tcp_no_metrics_save'] # Modules we try to get versions for INTERESTING_MODULES = ['cake', 'ath', 'ath9k', 'ath9k_common', 'ath9k_hw', 'mac80211', 'cfg80211'] try: processerror = subprocess.SubprocessError except AttributeError: processerror = subprocess.CalledProcessError class CommandRunner(object): def __init__(self): self.hostname = None self.env = os.environ.copy() self.fixup_path() def fixup_path(self): """Fix up the PATH to include /sbin and /usr/sbin since some of the utilities called (such as ip and tc) live here, and those directories are not normally in the path (on e.g. Debian).""" path = self.env['PATH'].split(':') if '/sbin' not in path: path.append('/sbin') if '/usr/sbin' not in path: path.append('/usr/sbin') self.env['PATH'] = ":".join(path) def set_hostname(self, hostname): self.hostname = hostname def __call__(self, command): """Try executing a command, and if successful, return the strip()'ed output, else None.""" try: if self.hostname: logger.debug("Executing '%s' on host '%s'", command, self.hostname) command = "ssh %s '%s'" % (self.hostname, command) else: logger.debug("Executing '%s' on localhost", command) try: res = subprocess.check_output(command, universal_newlines=True, shell=True, stderr=subprocess.STDOUT, env=self.env, timeout=TIMEOUT) except TypeError: # Python 2 doesn't have timeout arg res = subprocess.check_output(command, universal_newlines=True, shell=True, stderr=subprocess.STDOUT, env=self.env) return res.strip() except processerror: return None get_command_output = CommandRunner() __all__ = ['record_metadata'] def record_metadata(results, extended, hostnames): logger.debug("Gathering local metadata") m = results.meta() get_command_output.set_hostname(None) m['KERNEL_NAME'] = get_command_output("uname -s") m['KERNEL_RELEASE'] = get_command_output("uname -r") m['MODULE_VERSIONS'] = get_module_versions() m['SYSCTLS'] = get_sysctls() m['EGRESS_INFO'] = get_egress_info(target=m['HOST'], ip_version=m['IP_VERSION'], extended=extended) if extended: m['IP_ADDRS'] = get_ip_addrs() m['GATEWAYS'] = get_gateways() m['WIFI_DATA'] = get_wifi_data() m['REMOTE_METADATA'] = {} for h in hostnames: logger.debug("Gathering remote metadata from %s", h) get_command_output.set_hostname(h) m['REMOTE_METADATA'][h] = {} m['REMOTE_METADATA'][h]['LOCAL_HOST'] = get_command_output("hostname") m['REMOTE_METADATA'][h]['KERNEL_NAME'] = get_command_output("uname -s") m['REMOTE_METADATA'][h]['KERNEL_RELEASE'] = get_command_output("uname -r") m['REMOTE_METADATA'][h]['MODULE_VERSIONS'] = get_module_versions() m['REMOTE_METADATA'][h]['SYSCTLS'] = get_sysctls() m['REMOTE_METADATA'][h]['EGRESS_INFO'] = get_egress_info( target=m['HOST'], ip_version=m['IP_VERSION'], extended=extended) if m['EGRESS_INFO'] is not None and 'src' in m['EGRESS_INFO']: m['REMOTE_METADATA'][h]['INGRESS_INFO'] = get_egress_info( target=m['EGRESS_INFO']['src'], ip_version=m['IP_VERSION'], extended=extended) else: m['REMOTE_METADATA'][h]['INGRESS_INFO'] = None m['REMOTE_METADATA'][h]['EGRESS_INFO'] = get_egress_info( target=m['HOST'], ip_version=m['IP_VERSION'], extended=extended) if extended: m['REMOTE_METADATA'][h]['IP_ADDRS'] = get_ip_addrs() m['REMOTE_METADATA'][h]['GATEWAYS'] = get_gateways() m['REMOTE_METADATA'][h]['WIFI_DATA'] = get_wifi_data() def record_postrun_metadata(results, extended, hostnames): logger.debug("Recording postrun metadata") m = results.meta() get_command_output.set_hostname(None) if m['EGRESS_INFO'] is not None: m['EGRESS_INFO']['tc_stats_post'] = get_tc_stats( m['EGRESS_INFO']['iface']) for h in hostnames: get_command_output.set_hostname(h) for i in 'EGRESS_INFO', 'INGRESS_INFO': if m['REMOTE_METADATA'][h][i] is not None: m['REMOTE_METADATA'][h][i]['tc_stats_post'] = get_tc_stats( m['REMOTE_METADATA'][h][i]['iface']) def get_ip_addrs(iface=None): """Try to get IP addresses associated to this machine. Uses iproute2 if available, otherwise falls back to ifconfig.""" addresses = {} cmd = "ip addr show" if iface is not None: cmd += " dev %s" % iface output = get_command_output(cmd) if output is None: cmd = "ifconfig" if iface is not None: cmd += " %s" % iface output = get_command_output(cmd) iface_re = re.compile(r'^([0-9]+: )?([a-z0-9-]+):') if output is not None: lines = output.splitlines() iface = None addrs = [] for l in lines: # Both ifconfig and iproute2 emit addresses on lines starting with # the address identifier, and fields are whitespace-separated. Look # for that and parse accordingly. m = iface_re.match(l) if m is not None: if iface and addrs: addresses[iface] = addrs iface = m.group(2) addrs = [] parts = l.strip().split() if parts and parts[0] in ('inet', 'inet6'): a = parts[1] if '/' in a: # iproute2 adds subnet qualification; strip that a = a[:a.index('/')] if '%' in a: # BSD may add interface qualification; strip that a = a[:a.index('%')] addrs.append(a) if addrs and iface: addresses[iface] = addrs return addresses or None def get_link_params(iface): link_params = {} output = get_command_output("ip link show dev %s" % iface) if output is None: output = get_command_output("ifconfig %s" % iface) if output is not None: m = re.search(r"(qlen|txqueuelen) (\d+)", output) if m: link_params['qlen'] = m.group(2) m = re.search(r"ether ([0-9a-f:]{17})", output) if m: link_params['ether'] = m.group(1) output = get_command_output("ethtool %s" % iface) if output is not None: m = re.search(r"Speed: ([0-9]+Mb/s)", output) if m: link_params['speed'] = m.group(1) m = re.search(r"Duplex: (\w+)", output) if m: link_params['duplex'] = m.group(1) return link_params or None def get_offloads(iface): offloads = {} output = get_command_output("ethtool -k %s" % iface) val_map = {'on': True, 'off': False} if output is not None: for l in output.splitlines(): parts = l.split() key = parts[0].strip(":") if key in INTERESTING_OFFLOADS: try: offloads[key] = val_map[parts[1]] except KeyError: continue return offloads or None def get_gateways(): gws = [] # Linux netstat only outputs IPv4 data by default, but can be made to output # both if passed both -4 and -6 output = get_command_output("netstat -46nr") if output is None: # If that didn't work, maybe netstat doesn't support -4/-6 (e.g. BSD), # so try without output = get_command_output("netstat -nr") if output is not None: output = output.replace("Next Hop", "Next_Hop") # breaks part splitting lines = output.splitlines() iface_idx = None for line in lines: parts = line.split() if not parts: continue # Try to find the column header; should have "Destination" as first # word. if parts[0] == "Destination": # Linux uses Iface or If as header (for IPv4/6), FreeBSD uses If for n in ("Iface", "Netif", "If"): if n in parts: iface_idx = parts.index(n) if parts[0] in ("0.0.0.0", "default", "::/0"): if iface_idx is not None: # The fields may run into each other in some instances; try # to detect this, and if so just assume that the interface # name is the last field (it often is, on Linux). if iface_idx > len(parts) - 1: iface_idx = -1 gw = {'ip': parts[1], 'iface': parts[iface_idx]} if not gw['iface'].startswith('lo'): gws.append(gw) else: gws.append({'ip': parts[1]}) return gws def get_egress_info(target, ip_version, extended): route = {} if target: ip = util.lookup_host(target, ip_version)[4][0] output = get_command_output("ip route get %s" % ip) if output is not None: # Linux iproute2 syntax. Example: # $ ip r get 8.8.8.8 # 8.8.8.8 via 10.109.3.254 dev wlan0 src 10.109.0.146 # cache parts = iter(output.split()) for p in parts: if p == 'via': route['nexthop'] = next(parts) elif p == 'dev': route['iface'] = next(parts) elif p == 'src': route['src'] = next(parts) else: output = get_command_output("route -n get %s" % ip) if output is not None: # BSD syntax. Example: # $ route -n get 8.8.8.8 # route to: 8.8.8.8 # destination: default # mask: default # gateway: 10.42.7.225 # interface: em0 # flags: <UP,GATEWAY,DONE,STATIC> # recvpipe sendpipe ssthresh rtt,msec mtu weight expire # 0 0 0 0 1500 1 0 for line in output.splitlines(): if ":" not in line: continue k, v = [i.strip() for i in line.split(":")] if k == "gateway": route['nexthop'] = v if k == "interface": route['iface'] = v if route: route['qdiscs'] = get_qdiscs(route['iface']) route['tc_stats_pre'] = get_tc_stats(route['iface']) route['classes'] = get_classes(route['iface']) route['offloads'] = get_offloads(route['iface']) route['bql'] = get_bql(route['iface']) route['driver'] = get_driver(route['iface']) route['link_params'] = get_link_params(route['iface']) route['target'] = ip if 'nexthop' not in route: route['nexthop'] = None if not extended: for k in 'gateway', 'src', 'nexthop', 'target': if k in route: del route[k] if route['link_params'] and 'ether' in route['link_params']: del route['link_params']['ether'] return route or None def parse_tc(cmd, kind): items = [] output = get_command_output(cmd) if output is not None: lines = output.splitlines() for line in lines: if line.startswith(" "): itm = items[-1] if 'stats' in itm: itm['stats'].append(line.strip()) else: itm['stats'] = [line.strip()] continue parts = line.split() if not parts or parts[0] != kind: continue item = {'name': parts[1], 'id': parts[2]} if parts[3] == 'root': item['parent'] = 'root' params = parts[4:] else: item['parent'] = parts[4] params = parts[5:] # Assume that the remainder of the output line is a set of space # delimited key/value pairs. Some qdiscs (e.g. fq_codel) has a # single non-valued parameter at the end, in which case the length # of params will be uneven. In this case an empty string is added as # the parameter "value", to make sure it is included. if len(params) % 2 > 0: params.append("") item['params'] = dict(zip(params[::2], params[1::2])) items.append(item) return items or None def get_qdiscs(iface): return parse_tc("tc qdisc show dev %s" % iface, "qdisc") def get_tc_stats(iface): output = get_command_output("tc -s qdisc show dev %s" % iface) items = [] if output is not None: item = [] # Split out output so we get one list entry for each qdisc -- first line # of a qdisc's stats output is non-indented, subsequent lines are # indented by spaces. for line in filter(None, output.splitlines()): if line.startswith(" "): item.append(line) else: if item: items.append("\n".join(item)) item = [line] if item: items.append("\n".join(item)) return items or None def get_classes(iface): return parse_tc("tc class show dev %s" % iface, "class") def get_bql(iface): bql = [] output = get_command_output( 'for i in /sys/class/net/%s/queues/tx-*; do [ -d $i/byte_queue_limits ] ' '&& echo -n "$(basename $i) " && cat $i/byte_queue_limits/limit_max; done' % iface) if output is not None: bql = dict([i.split() for i in output.splitlines()]) return bql or None def get_driver(iface): return get_command_output( "basename $(readlink /sys/class/net/%s/device/driver)" % iface) def get_sysctls(): sysctls = {} output = get_command_output("sysctl -e %s" % " ".join(INTERESTING_SYSCTLS)) if output is not None: for line in output.splitlines(): parts = line.split("=") if len(parts) != 2: continue k, v = [i.strip() for i in parts] try: sysctls[k] = int(v) except ValueError: sysctls[k] = v return sysctls def get_module_versions(): module_versions = {} modules = [] output = get_command_output("find /sys/module -name .note.gnu.build-id") if output is not None: module_files = output.split() for f in module_files: if "/sections/" in f: continue m = f.replace("/sys/module/", "").split("/", 1)[0] if m in INTERESTING_MODULES: modules.append((m, f)) if modules: # The hexdump output will be a string of hexadecimal values of the # concatenation of all the .note.gnu.build-id files. # # Each file starts with "040000001400000003000000474e5500" (0x474e550 is # "GNU\0"), so simply split on that to get the data we are interested in. version_strings = get_command_output( "hexdump -ve \"/1 \\\"%02x\\\"\" {}".format( " ".join([m[1] for m in modules]))) if version_strings: for (m, f), v in zip(modules, version_strings.split( "040000001400000003000000474e5500")[1:]): module_versions[m] = v return module_versions def get_wifi_data(): wifi_data = {} unwanted_keys = ["Interface", "ifindex", "wdev", "wiphy"] output = get_command_output("iw dev") iface = None if output is not None: for line in output.splitlines(): parts = line.split() if len(parts) < 2: continue k, v = parts[0], parts[1] if k == 'Interface': iface = v wifi_data[iface] = {} continue elif iface is None: continue if k in unwanted_keys: continue if k == 'txpower': v = float(v) if k == 'channel': # This condition will return a dict with all the values of the channel # With the input "channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz" # the output will be {'addr':..., channel': {'band': 2462, 'center1': 2462, 'number': 11, 'width': 20}, 'ssid':...} v = {} v['number'] = int(parts[1]) v['band'] = int(parts[2].strip("(")) v['width'] = int(parts[5]) v['center1'] = int(parts[8]) if line.strip() == "multicast TXQ:": # No interesting output after this iface = None continue wifi_data[iface][k] = v return wifi_data �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/plotters.py�����������������������������������������������������������������������0000664�0000000�0000000�00000235350�14670056262�0016201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # plotters.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 4 March 2015 # Copyright (c) 2015-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import io import math import os import re import sys import warnings from flent import combiners from flent.util import classname, long_substr, format_date, diff_parts, \ Glob, Update, float_pair, float_pair_noomit, keyval, comma_list, ArgParam, \ ArgParser from flent.build_info import VERSION from flent.loggers import get_logger from argparse import SUPPRESS from functools import reduce from itertools import cycle, islice, chain from collections import OrderedDict logger = get_logger(__name__) try: import matplotlib import numpy as np HAS_MATPLOTLIB = True mpl_maj, _ = matplotlib.__version__.split(".", 1) if mpl_maj in ('1', '2'): logger.warning("Cannot use old matplotlib version %s, please upgrade!", matplotlib.__version__) raise ImportError("Matplotlib %s too old" % matplotlib.__version__) except ImportError as e: logger.debug("Unable to import matplotlib: %s", e) HAS_MATPLOTLIB = False PLOT_KWARGS = ( 'alpha', 'antialiased', 'color', 'dash_capstyle', 'dash_joinstyle', 'drawstyle', 'fillstyle', 'label', 'linestyle', 'linewidth', 'lod', 'marker', 'markeredgecolor', 'markeredgewidth', 'markerfacecolor', 'markerfacecoloralt', 'markersize', 'markevery', 'pickradius', 'solid_capstyle', 'solid_joinstyle', 'visible', 'zorder' ) LINESTYLES = ['-', '--'] MARKERS = ['o', '^', 's', 'v', 'D', '*', '<', '>', 'x', '+'] COLOURS = ["#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#66a61e", "#e6ab02", "#a6761d", "#666666"] DASHES = [[2, 4], [8, 4, 2, 4], ] STYLES = [] MATPLOTLIB_STYLES = {'axes.axisbelow': True, 'axes.edgecolor': 'white', 'axes.facecolor': '#E6E6E6', 'axes.formatter.useoffset': False, 'axes.grid': True, 'axes.labelcolor': 'black', 'axes.linewidth': 0.0, 'figure.edgecolor': 'white', 'figure.facecolor': 'white', 'figure.frameon': False, 'grid.color': 'white', 'grid.linestyle': '-', 'grid.linewidth': 1, 'image.cmap': 'Greys', 'legend.frameon': False, 'legend.numpoints': 1, 'legend.scatterpoints': 1, 'lines.color': 'black', 'lines.linewidth': 1, 'lines.solid_capstyle': 'round', 'pdf.fonttype': 42, 'text.color': 'black', 'xtick.color': 'black', 'xtick.direction': 'out', 'xtick.major.size': 0.0, 'xtick.minor.size': 0.0, 'ytick.color': 'black', 'ytick.direction': 'out', 'ytick.major.size': 0.0, 'ytick.minor.size': 0.0} MATPLOTLIB_INIT = False def init_matplotlib(output, use_markers, load_rc): if not HAS_MATPLOTLIB: raise RuntimeError( "Unable to plot -- matplotlib is missing! " "Please install it if you want plots.") global pyplot, COLOURS, MATPLOTLIB_INIT if MATPLOTLIB_INIT: return # Old versions of matplotlib will trigger this warnings.filterwarnings('ignore', message="elementwise == comparison failed") if output != "-": if output.endswith('.svg') or output.endswith('.svgz'): matplotlib.use('svg') elif output.endswith('.ps') or output.endswith('.eps'): matplotlib.use('ps') elif output.endswith('.pdf'): matplotlib.use('pdf') elif output.endswith('.png'): matplotlib.use('agg') else: raise RuntimeError( "Unrecognised file format for output '%s'" % output) elif (sys.platform == 'linux' and not os.getenv("DISPLAY")): matplotlib.use("agg") from matplotlib import pyplot for ls in LINESTYLES: STYLES.append(dict(linestyle=ls)) for d in DASHES: STYLES.append(dict(dashes=d)) if use_markers: for m in MARKERS: STYLES.append(dict(marker=m, markevery=10)) # Try to detect if a custom matplotlibrc is installed, and if so don't # load our own values. try: matplotlib.rcParams['figure.max_open_warning'] = 0 except KeyError: pass if load_rc: matplotlib.rcParams.update(MATPLOTLIB_STYLES) elif 'axes.prop_cycle' in matplotlib.rcParams: c = matplotlib.rcParams['axes.prop_cycle'] if 'color' in c.keys and hasattr(c, 'by_key'): COLOURS = c.by_key()['color'] else: COLOURS = matplotlib.rcParams['axes.color_cycle'] MATPLOTLIB_INIT = True logger.info("Initialised matplotlib v%s on numpy v%s.", matplotlib.__version__, np.__version__) def get_plotconfig(settings, plot=None): if plot is None: plot = settings.PLOT if plot not in settings.PLOTS: raise RuntimeError("Unable to find plot configuration '%s'" % plot) config = settings.PLOTS[plot].copy() config['plot_name'] = plot if 'parent' in config: parent_config = settings.PLOTS[config['parent']].copy() parent_config.update(config) config = parent_config if 'subplots' in config: subplots = OrderedDict() for s in config['subplots']: cfg = settings.PLOTS[s].copy() if 'parent' in cfg: parent = settings.PLOTS[cfg['parent']].copy() parent.update(cfg) cfg = parent subplots[s] = cfg config['subplots'] = subplots return config def get_plotter(plot_type): cname = classname(plot_type, "Plotter") if cname not in globals(): raise RuntimeError("Plotter not found: '%s'" % plot_type) return globals()[cname] def add_plotting_args(parser): # Convenience helper functions to modify actions after they are defined. # Prevents us from having to assign the return value of the add_argument # calls below and modify it afterwards. def hide_gui(a): "Prevents action from being shown in the GUI option editor." a.hide_gui = True return a def gui_help(a, gui_help): "Adds a second help text that takes precedence in the GUI editor." a.gui_help = gui_help return a parser.add_argument( "--label-x", action="append", dest="LABEL_X", type=str, default=[], help="Override X axis labels. " "Can be specified twice, corresponding to figures with multiple axes.") parser.add_argument( "--label-y", action="append", dest="LABEL_Y", type=str, default=[], help="Override Y axis labels. " "Can be specified twice, corresponding to figures with multiple axes.") parser.add_argument( "-I", "--invert-latency-y", action="store_true", dest="INVERT_Y", help="Invert latency data axis. This inverts the latency data axis " "(typically the Y axis), which makes plots show 'better' values upwards.") parser.add_argument( "-z", "--zero-y", action="store_true", dest="ZERO_Y", help="Zero Y axis. Always start y axis of plot at zero, instead of " "auto-scaling the axis. Auto-scaling is still enabled for the " "upper bound. This also disables log scale.") # --log-scale is old boolean option, kept for compatibility parser.add_argument("--log-scale", action="store_const", dest="LOG_SCALE", const="log10", help=SUPPRESS) parser.add_argument( "--log-scale-y", action="store", type=str, dest="LOG_SCALE", choices=("log2", "log10"), help="Use logarithmic scale.") parser.add_argument( "--norm-factor", action="append", type=float, dest="NORM_FACTORS", metavar="FACTOR", default=[], help="Data normalisation factor. Divide all data " "points by this value. Can be specified multiple times, in which case " "each value corresponds to a data series.") parser.add_argument( "--data-cutoff", action="store", type=float_pair_noomit, dest="DATA_CUTOFF", help="Data cutoff interval. Cut off all data points outside this " "interval before plotting. For aggregate plots, this will happen " "*before* aggregation, so for instance mean values will be affected.") parser.add_argument( "--bounds-x", action="append", dest="BOUNDS_X", type=float_pair, default=[], help="X axis bounds. If specifying one number, " "that will become the upper bound. Specify two numbers separated by " "a comma to specify both upper and lower bounds. To specify just the " "lower bound, add a comma afterwards. Can be specified twice, " "corresponding to figures with multiple axes.") parser.add_argument( "--bounds-y", action="append", dest="BOUNDS_Y", type=float_pair, default=[], help="Y axis bounds. If specifying one number, " "that will become the upper bound. Specify two numbers separated by " "comma to specify both upper and lower bounds. To specify just the " "lower bound, add a comma afterwards. Can be specified twice, " "corresponding to figures with multiple axes.") parser.add_argument( "-S", "--scale-mode", action="store_true", dest="SCALE_MODE", help="Scale mode. If enabled, secondary data sets are not plotted, but " "are still taken into account when calculating axis bounds. Use this to " "plot several datasets with the same axis scales.") parser.add_argument( "--concatenate", action="store_true", dest="CONCATENATE", help="Concatenate datasets. Concatenates multiple result sets into a " "single data series.") parser.add_argument( "--absolute-time", action="store_true", dest="ABSOLUTE_TIME", help="Plot absolute times. Shows absolute Unix time on the x-axis instead" " of relative time from the test start.") parser.add_argument( "--subplot-combine", action="store_true", dest="SUBPLOT_COMBINE", help="Combine as subplots. When plotting multiple data series, plot " "each one on a separate " "subplot instead of combining them into one plot (not supported for all " "plot types).") parser.add_argument( "--skip-missing-series", action="store_true", dest="SKIP_MISSING", help="Skip missing on bar plots. If a series is missing, this option " "skips it entirely from bar plots instead of having an empty slot for " "it.") gui_help(parser.add_argument( "--no-print-n", action="store_false", dest="COMBINE_PRINT_N", help="No N values. Do not print the number of data points on " "combined plots."), gui_help="Print N values. Whether to print the number of data " "points used for combination plots.") gui_help(parser.add_argument( "--no-annotation", action="store_false", dest="ANNOTATE", help="Hide annotation. Exclude annotation with hostnames, time and test " "length from plots."), gui_help="Show annotation. Show annotation with hostnames, time " "and test length on plots.") parser.add_argument( "--figure-note", "--fig-note", action="store", type=str, dest="FIG_NOTE", help="Figure note. Will be added to the bottom-left corner of the " "figure.") gui_help(parser.add_argument( "--no-title", action="store_false", dest="PRINT_TITLE", help="Hide plot title."), gui_help="Show plot title.") parser.add_argument( "--override-title", action="store", type=str, dest="OVERRIDE_TITLE", metavar="TITLE", help="Override plot title. This parameter takes " "precedence over --no-title.") gui_help(parser.add_argument( "--no-labels", action="store_false", dest="PRINT_LABELS", help="Hide tick labels. Hides tick labels from box and bar plots."), gui_help="Show tick labels. Whether to show tick labels on " "box and bar plots.") gui_help(parser.add_argument( "--no-markers", action="store_false", dest="USE_MARKERS", help="No line markers. Don't use line markers to differentiate data " "series on plots."), gui_help="Use line markers. Whether to use line " "markers (in addition to line style) to differentiate data series " "on plots") gui_help(parser.add_argument( "--no-legend", action="store_false", dest="PRINT_LEGEND", help="Hide plot legend."), "Show plot legend.") parser.add_argument( "--horizontal-legend", action="store_true", dest="HORIZONTAL_LEGEND", help="Horizontal legend mode. Places a horizontal legend below the plot " "instead of a vertical one " "next to it. Doesn't work well if there are too many items in the " "legend.") parser.add_argument( "--legend-title", action="store", type=str, dest="LEGEND_TITLE", help="Override legend title.") parser.add_argument( "--legend-placement", action="store", type=str, dest="LEGEND_PLACEMENT", choices=('best', 'upper right', 'upper left', 'lower left', 'lower right', 'right', 'center left', 'center right', 'lower center', 'upper center', 'center'), help="Legend placement. Enabling this option will place the " "legend inside the plot at the specified location. Use 'best' to let " "matplotlib decide.") parser.add_argument( "--legend-columns", action="store", type=int, dest="LEGEND_COLUMNS", default=None, help="Legend columns. Set the number of columns in the legend.") parser.add_argument( "--reverse-legend", action="store_true", dest="LEGEND_REVERSE", help="Reverse legend order. Reverses the order of data series in " "the legend.") parser.add_argument( "--filter-legend", action="store_true", dest="FILTER_LEGEND", help="Auto-filter legend text. Filters labels by removing the longest " "common substring from all entries.") parser.add_argument( "--replace-legend", action=Update, type=keyval, dest="REPLACE_LEGEND", metavar="src=dest", default=OrderedDict(), help="Replace legend text. Replaces 'src' with 'dst' in legends. Can be " "specified multiple times.") parser.add_argument( "--filter-regexp", action="append", type=str, dest="FILTER_REGEXP", metavar="REGEXP", default=[], help="Filter labels (regex). Filter out (remove) text matching " "the supplied regular expression from label names. Can be specified multiple " "times, in which case the filters will be applied in the order specified.") parser.add_argument( "--override-label", action="append", type=str, dest="OVERRIDE_LABELS", metavar="LABEL", default=[], help="Override dataset labels. Must be specified multiple times " "corresponding to the datasets being overridden.") parser.add_argument( "--filter-series", action="append", type=str, dest="FILTER_SERIES", metavar="SERIES", default=[], help="Filter (hide) data series. Filters out specified " "series names from the plot. Can be specified multiple times.") parser.add_argument( "--split-group", action="append", type=str, dest="SPLIT_GROUPS", default=[], metavar="LABEL", help="New groups for box and bar plots. Specify this option multiple " "times to define the new groups that data sets should be split into on " "box and bar plots. The value of each option is the group name " "(displayed at the top of the plot).") parser.add_argument( "--colours", action="store", dest="COLOURS", type=comma_list, default=COLOURS, help="Override plot colours. Specify a comma-separated list of colours " "to be used for the plot colour cycle.") parser.add_argument( "--override-colour-mode", action="store", type=str, dest="OVERRIDE_COLOUR_MODE", metavar="MODE", help="Override colour_mode attribute. This changes the way colours " "are assigned to bar plots. The default is 'groups' which assigns a " "separate colour to each group of data series. The alternative is " "'series' which assigns a separate colour to each series, repeating them" "for each data group.") parser.add_argument( "--override-group-by", action="store", type=str, dest="OVERRIDE_GROUP_BY", metavar="GROUP", help="Override group_by attribute. This changes the way combination " "plots are created by overriding the function that is used to combine " "several data series into one.") hide_gui(parser.add_argument( "--combine-save-dir", action="store", type=str, dest="COMBINE_SAVE_DIR", metavar="DIRNAME", help="Save intermediate combination data. When doing a combination plot " "save the intermediate data to DIRNAME. This can then be used for " "subsequent plotting to avoid having to load all the source data files " "again on each plot.")) hide_gui(parser.add_argument( "--figure-width", "--fig-width", action="store", type=float, dest="FIG_WIDTH", default=6.4, help="Figure width in inches. Used when saving plots to file and for " "default size of the interactive plot window.")) hide_gui(parser.add_argument( "--figure-height", "--fig-height", action="store", type=float, dest="FIG_HEIGHT", default=4.8, help="Figure height in inches. Used when saving plots to file and for " "default size of the interactive plot window.")) hide_gui(parser.add_argument( "--figure-dpi", "--fig-dpi", action="store", type=float, dest="FIG_DPI", default=100, help="Figure DPI. Used when saving plots to raster format files.")) hide_gui(parser.add_argument( "--fallback-layout", action="store_true", dest="FALLBACK_LAYOUT", help="Use the fallback layout engine. Use the tight_layout engine built " "in to matplotlib for laying out figures. Enable this option if text is " "cut off on saved figures. The downside to the fallback engine is that " "the size of the figure (as specified by --figure-width and " "--figure-height) is no longer kept constant.")) hide_gui(parser.add_argument( "--no-matplotlibrc", action="store_false", dest="LOAD_MATPLOTLIBRC", help="Don't use included matplotlib styles. Use this if you have " "configured custom matplotlib styles that you want Flent to use.")) hide_gui(parser.add_argument( "--no-hover-highlight", action="store_false", dest="HOVER_HIGHLIGHT", default=None, help="Don't highlight on hover. This disables highlighting of hovered " "data series in interactive plot views. " "Use this if redrawing is too slow, or the highlighting is undesired " "for other reasons.")) hide_gui(parser.add_argument( "--scale-data", action="append", type=str, dest="SCALE_DATA", default=[], help="Extra scale data. Additional data files to consider when scaling " "the plot axes " "(for plotting several plots with identical axes). Note, this displays " "only the first data set, but with axis scaling taking into account the " "additional data sets. Can be supplied multiple times; see also " "--scale-mode.")) return parser def new(settings, plotter=None, in_worker=False, **kwargs): try: if plotter is None: plotter = get_plotter(get_plotconfig(settings)['type']) kwargs.update(vars(settings)) return plotter( plot_config=get_plotconfig(settings), data_config=settings.DATA_SETS, output=settings.OUTPUT, gui=settings.GUI, absolute_time=settings.ABSOLUTE_TIME, description=settings.DESCRIPTION, in_worker=in_worker, **kwargs) except Exception as e: raise RuntimeError("Error loading plotter: %s" % e) def draw_worker(settings, results): plotter = new(settings, in_worker=True, results=results) plotter.init() plotter.plot(results) plotter.save(results) plotter.disconnect_callbacks() return plotter def lines_equal(a, b): """Compare two matplotlib line segments by line style, marker, colour and label. Used to match legend items to data items on the axes.""" # A null marker can be the string 'None' for some reason, to check for # this condition when comparing markers. return a.get_label() == b.get_label() and \ a.get_linestyle() == b.get_linestyle() and \ a.get_color() == b.get_color() class Plotter(ArgParam): open_mode = "wb" inverted_units = ('ms') can_subplot_combine = False can_highlight = False params = add_plotting_args(ArgParser()) def __init__(self, plot_config, data_config, output="-", gui=False, description='', figure=None, results=None, in_worker=False, absolute_time=False, **kwargs): super(Plotter, self).__init__(**kwargs) self.disable_cleanup = False self.title = None self.output = output self.styles = STYLES self.legends = [] self.artists = [] self.data_artists = [] self.top_art = [] self.btm_art = [] self.right_art = [] self.metadata = None self.callbacks = [] self.in_worker = in_worker self.combined = False self.absolute_time = absolute_time self.gui = gui self.description = description self.interactive_callback = self.resize_callback = None if self.hover_highlight is not None: self.can_highlight = self.hover_highlight if self.log_scale and self.log_scale.startswith("log"): self.log_base = int(self.log_scale.replace("log", "")) else: self.log_base = None self.config = self.expand_plot_config(plot_config, data_config, results) self.configs = [self.config] self.data_config = data_config if figure is None: self.figure = pyplot.figure(dpi=self.fig_dpi) if self.fig_width is not None: self.figure.set_figwidth(self.fig_width) if self.fig_height is not None: self.figure.set_figheight(self.fig_height) else: self.figure = figure # Some versions of matplotlib will crash if this is not set if not hasattr(self.figure, '_original_dpi'): self.figure._original_dpi = self.figure.dpi def __del__(self): if not getattr(self, "disable_cleanup", False): try: pyplot.close(self.figure) except Exception: pass def __getstate__(self): state = self.__dict__.copy() if 'figure' in state: fig = state['figure'] if getattr(fig, "canvas", None) and getattr(fig.canvas, "manager", None): fig.canvas.manager = None return state def init(self, config=None, axis=None): if config is not None: self.config = config self.configs = [self.config] def verify(self): lengths = [len(a.get_lines()) for a in self.figure.axes] return any(lengths), lengths def axes_iter(self): return iter(reduce(lambda x, y: x + y, [i['axes'] for i in self.configs])) def expand_plot_config(self, config, data, results=None): if 'series' not in config: return config new_series = [] for s in config['series']: ns = [] if isinstance(s['data'], Glob): for d in Glob.expand_list(s['data'], data.keys()): if 'label' in s: d_id = data[d]['id'] if 'id' in data[d] else d if s['label']: lbl = '%s -- %s' % (s['label'], d_id) else: lbl = d_id ns.append(dict(s, data=d, id=d_id, label=lbl)) if 'parent_id' in data[d]: ns[-1]['parent_id'] = data[d]['parent_id'] else: ns.append(dict(s, data=d)) else: ns.append(s) if results and 'raw_key' in s and isinstance(s['raw_key'], Glob): nns = [] def all_keys(k): return lambda x, y: x.union(y.get(k, set())) for s in ns: all_rks = sorted(reduce(all_keys(s['data']), (r.raw_keys for r in results), set())) rks = Glob.expand_list(s['raw_key'], all_rks) for k, n in zip(rks, diff_parts(rks, "::")): if k in self.filter_series: continue if 'label' in s: nns.append(dict(s, raw_key=k, label="%s -- %s" % (s['label'], n))) else: nns.append(dict(s, raw_key=k)) ns = nns new_series.extend(ns) if self.filter_series: new_series = [s for s in new_series if not s[ 'data'] in self.filter_series] if self.norm_factors: for n, s in zip(cycle(self.norm_factors), new_series): s['norm_factor'] = n if self.override_labels: for l, s in zip(self.override_labels, new_series): if l is not None: s['label'] = l s['label_override'] = True return dict(config, series=new_series) def plot(self, results, config=None, axis=None, connect_interactive=True): if self.metadata is None: self.metadata = results[0].meta() if len(results) > 1: self.combine(results, config, axis) else: self._plot(results[0], config=config, axis=axis) if connect_interactive: self.connect_interactive() def combine(self, results, config=None, axis=None, always_colour=False): styles = cycle(self.styles) colours = cycle(self.colours) labels = self._filter_labels([r.label() for r in results]) for l, r in zip(labels, results): style = next(styles).copy() if (config and 'series' in config and len(config['series']) == 1) or \ ('series' in self.config and len(self.config['series']) == 1) or \ always_colour: style['color'] = next(colours) self._plot(r, config=config, axis=axis, postfix=" - " + l, extra_kwargs=style, extra_scale_data=results) def save(self, results): skip_title = len(results) > 1 artists = self.artists all_legends = self.legends if not all_legends: for c in self.configs: legends = self._do_legend(c) if legends: all_legends += legends artists += all_legends + self._annotate_plot(skip_title) # Since outputting image data to stdout does not make sense, we launch # the interactive matplotlib viewer if stdout is set for output. # Otherwise, the filename is passed to matplotlib, which selects an # appropriate output format based on the file name. if self.output == "-": self.size_legends() if not self.gui and not self.in_worker: logger.debug("Showing matplotlib pyplot viewer") pyplot.show() else: logger.debug("Saving plot to %s", self.output) try: # PDFs have fixed DPI if pyplot.get_backend() == 'pdf': self.figure.set_dpi(72) save_args = self.build_tight_layout(artists) if pyplot.get_backend() == 'pdf': self.save_pdf(self.output, results[0].meta( 'DATA_FILENAME'), save_args) else: self.figure.savefig( self.output, dpi=self.fig_dpi, **save_args) except IOError as e: raise RuntimeError("Unable to save output plot: %s" % e) def init_interactive(self): self.clear_bg_cache() self.highlight_widths = {} self.hovered = set() for a in self.data_artists: self.highlight_widths[a] = (a.get_linewidth(), a.get_linewidth() * 2) def connect_interactive(self): if not self.resize_callback: self.resize_callback = self.figure.canvas.mpl_connect( 'resize_event', self.size_legends) self.callbacks.append(self.resize_callback) try: if self.interactive_callback \ or not self.can_highlight \ or not self.figure.canvas.supports_blit \ or not hasattr(self.figure.canvas, "copy_from_bbox"): return except AttributeError: # Old versions of matplotlib doesn't have the supports_blit attribute return self.init_interactive() self.interactive_callback = self.figure.canvas.mpl_connect( "motion_notify_event", self.on_move) self.callbacks.append(self.interactive_callback) self.callbacks.append(self.figure.canvas.mpl_connect( "draw_event", self.clear_bg_cache)) self.callbacks.append(self.figure.canvas.mpl_connect( "button_press_event", self.on_click)) self.callbacks.append(self.figure.canvas.mpl_connect( "key_press_event", self.on_keypress)) def disconnect_callbacks(self): for c in self.callbacks: self.figure.canvas.mpl_disconnect(c) self.callbacks = [] self.interactive_callback = self.resize_callback = None def on_move(self, event): hovered = set() for leg in self.legends: for l, t in zip(leg.get_lines(), leg.get_texts()): if l.contains(event)[0] or t.contains(event)[0]: for a in self.data_artists: if lines_equal(a, l): hovered.add(a) if not hovered: for a in self.data_artists: if a.contains(event)[0]: hovered.add(a) if hovered and self.figure.canvas.toolbar: s = [] for a in hovered: ax = a.axes try: trans = ax.transData.inverted() xdata, ydata = trans.transform_point((event.x, event.y)) except ValueError: continue s.append("%s [%.2f, %.2f]" % (a.get_label(), xdata, ydata)) self.figure.canvas.toolbar.set_message(", ".join(s)) self.update_axes(hovered) def on_click(self, event): if event.dblclick: for t in chain(*[(t for t in leg.get_texts()) for leg in self.legends]): if t.contains(event)[0]: return def on_keypress(self, event): if event.key in ('x', 'X', 'y', 'Y'): a = event.key.lower() d = 'in' if a == event.key else 'out' self.zoom(a, d) def zoom(self, axis, direction='in'): factor = 0.9 if direction == 'in' else 1.1 for ax in self.axes_iter(): setter = getattr(ax, "set_"+axis+"lim") getter = getattr(ax, "get_"+axis+"lim") l, u = getter() mid = l + (u-l) / 2 nl = mid - (mid-l)*factor nu = mid + (u-mid)*factor setter(nl, nu) self.figure.canvas.draw() self.figure.canvas.toolbar.push_current() def update_axes(self, hovered): bboxes = set() for ax in self.axes_iter(): # If the bbox has negative width or height abort rather than crash # when trying to copy its content below if ax.bbox.width < 0 or ax.bbox.height < 0: return # If we don't have a background cache this is the first time we are # called after a redraw, so no modifications to artists have been # made. Hence, we just cache the background now. bboxes.add(ax.bbox) if ax not in self.bg_cache: self.bg_cache[ax] = self.figure.canvas.copy_from_bbox(ax.bbox) else: self.figure.canvas.restore_region(self.bg_cache[ax]) for a in hovered: a.set_linewidth(self.highlight_widths[a][1]) a.set_markeredgewidth(self.highlight_widths[a][1]) try: a.axes.draw_artist(a) except AttributeError: pass a.set_linewidth(self.highlight_widths[a][0]) a.set_markeredgewidth(self.highlight_widths[a][0]) for bbox in bboxes: self.figure.canvas.blit(bbox) def clear_bg_cache(self, evt=None): self.bg_cache = {} def save_pdf(self, filename, data_filename, save_args): pdf = matplotlib.backends.backend_pdf.PdfPages(filename) try: pdf.infodict()['Producer'] = 'Flent v%s' % VERSION pdf.infodict()['Subject'] = data_filename if self.title: pdf.infodict()['Title'] = self.title.replace("\n", "; ") self.figure.savefig(pdf, **save_args) finally: pdf.close() def _get_renderer(self): # Matplotlib 3.6 reorganised the renderer caching logic and introduced # the _get_renderer() method of the figure class, so try that first try: return self.figure._get_renderer() except AttributeError: pass # Older versions of matplotlib cached the renderer in the figure itself, # but it may not exist until after figure is drawn renderer = getattr(self.figure, '_cachedRenderer', None) if not renderer: self.figure.canvas.draw() renderer = getattr(self.figure, '_cachedRenderer', None) return renderer def build_tight_layout(self, artists): args = None if self.fallback_layout: return {'bbox_extra_artists': artists, 'bbox_inches': 'tight'} try: self.figure.savefig(io.BytesIO()) renderer = self._get_renderer() right = x_max = self.figure.get_figwidth() * self.figure.dpi top = y_max = self.figure.get_figheight() * self.figure.dpi vsp = 0.02 * self.figure.dpi hsp = 0.08 * self.figure.dpi left = btm = offset_x = right_ax = 0 # these move with the subplots, so use .width/.height for ax in self.axes_iter(): w = ax.yaxis.get_tightbbox(renderer).width if ax.yaxis.get_label_position() == 'right': right_ax = max(w, right_ax) else: left = max(left, w) bbx = ax.xaxis.get_tightbbox(renderer) if bbx: btm = max(btm, bbx.height) if self.right_art: right -= max((a.get_window_extent(renderer).width for a in self.right_art)) offset_x = max((a.offset_x for a in self.right_art if hasattr(a, "offset_x"))) else: # This only seems to be necessary if there's no legend to the right right -= right_ax # these are fixed in place, so use .y0/.y1 bsp = 0 if self.btm_art: for a in self.btm_art: bb = a.get_window_extent(renderer) bsp = max(bsp, bb.y1) if bb.y1 < 0: btm += bb.height - bb.y1 btm += bsp if self.top_art: top = y_max - sum((a.get_window_extent(renderer).height for a in self.top_art)) # The offset is a percentage of the final subplot bounding box, so # adjust by that if offset_x: right -= (right - left) * (offset_x - 1) left = (hsp + left)/x_max top = (top - vsp)/y_max right = (right - hsp)/x_max bottom = (vsp + btm)/y_max self.figure.subplots_adjust(left=left, right=right, top=top, bottom=bottom) args = {} except (AttributeError, ImportError, ValueError) as e: logger.warning("Unable to build our own tight layout: %s", e) # Fall back to the regular bbox_extra_artists output feature if args is None: logger.debug("Falling back to bbox_inches=tight layout") args = {'bbox_extra_artists': artists, 'bbox_inches': 'tight'} return args def size_legends(self, event=None): # For the interactive viewer there's no bbox_extra_artists, so we # need to reduce the axis sizes to make room for the legend. if not self.resize_callback: self.resize_callback = self.figure.canvas.mpl_connect( 'resize_event', self.size_legends) self.callbacks.append(self.resize_callback) if self.print_legend \ and not self.horizontal_legend \ and not self.legend_placement \ and self.legends: try: legend_width = max( [l.get_window_extent(self._get_renderer()).width for l in self.legends]) except Exception as e: logger.debug("Error getting legend sizes: %s", e) return canvas_width = self.figure.canvas.get_width_height()[0] for a in self.axes_iter(): # Save the original width of the axis (in the interval [0..1]) # and use that as a base to scale the axis on subsequent calls. # Otherwise, each call will shrink the axis. if not hasattr(a, 'orig_width'): a.orig_width = a.get_position().width box = a.get_position() a.set_position( [box.x0, box.y0, (a.orig_width - legend_width / canvas_width), box.height]) self.figure.canvas.draw_idle() def _annotate_plot(self, skip_title=False): titles = [] title_y = 1 - 0.04 / self.figure.get_figheight() if self.override_title: art = self.figure.suptitle(self.override_title, fontsize=14, y=title_y) titles.append(art) self.top_art.append(art) self.title = self.override_title elif self.print_title: plot_title = self.description if 'description' in self.config: plot_title += "\n" + self.config['description'] if self.metadata['TITLE'] and not skip_title: plot_title += "\n" + self.metadata['TITLE'] art = self.figure.suptitle( plot_title, fontsize=14, y=title_y) titles.append(art) self.top_art.append(art) self.title = plot_title if self.annotate: annotation_string = "Local/remote: %s/%s - " \ "Time: %s - Length/step: %ds/%.2fs" % ( self.metadata['LOCAL_HOST'], self.metadata['HOST'], format_date(self.metadata['TIME']), self.metadata['LENGTH'], self.metadata['STEP_SIZE']) self.btm_art.append( self.figure.text(0.5, 0.04 / self.figure.get_figheight(), annotation_string, horizontalalignment='center', verticalalignment='bottom', fontsize=8)) if self.fig_note: self.btm_art.append( self.figure.text(0.0, 0.04 / self.figure.get_figheight(), self.fig_note, horizontalalignment='left', verticalalignment='bottom', fontsize=8)) return titles def _filter_labels(self, labels): for s, d in self.replace_legend.items(): labels = [l.replace(s, d) for l in labels] for r in self.filter_regexp: labels = [re.sub(r, "", l) for l in labels] if self.filter_legend and labels: if 'Avg' in labels: filt = labels[:] filt.remove('Avg') substr = long_substr(filt) else: substr = long_substr(labels) if len(substr) > 3 and substr != " - ": labels = [l.replace(substr, '') for l in labels] prefix = long_substr(labels, prefix_only=True) if prefix and len(prefix) < len(labels[0]): labels = [l.replace(prefix, '') for l in labels] labels = [l.strip() for l in labels] return labels def do_legend(self): legends = [] for c in self.configs: legends.extend(self._do_legend(c)) return legends def _do_legend(self, config, postfix=""): if not self.print_legend: return [] axes = config['axes'] # Each axis has a set of handles/labels for the legend; combine them # into one list of handles/labels for displaying one legend that holds # all plot lines handles, labels = reduce(lambda x, y: (x[0] + y[0], x[1] + y[1]), [a.get_legend_handles_labels() for a in axes]) if not labels: return [] if self.legend_reverse: handles, labels = reversed(handles), reversed(labels) labels = self._filter_labels(labels) kwargs = {} if self.legend_title is not None: kwargs['title'] = self.legend_title elif 'legend_title' in config: kwargs['title'] = config['legend_title'] legends = [] offset_x = None if self.horizontal_legend: bbox = (0.5, -0.15) ncol = len(labels) loc = 'upper center' elif self.legend_placement: bbox = None ncol = 1 loc = self.legend_placement else: if len(axes) > 1: offset_x = 1.11 else: offset_x = 1.02 bbox = (offset_x, 1.0) ncol = 1 loc = 'upper left' l = axes[0].legend(handles, labels, bbox_to_anchor=bbox, loc=loc, borderaxespad=0., prop={'size': 'small'}, ncol=self.legend_columns or ncol, **kwargs) if offset_x is not None: self.right_art.append(l) l.offset_x = offset_x # We use this in build_tight_layout if self.horizontal_legend: self.btm_art.append(l) legends.append(l) return legends def _do_scaling(self, axis, data, btm, top, unit=None, allow_log=True): """Scale the axis to the selected bottom/top percentile""" if data is None or not data.any(): return top_percentile = self._percentile(data, top) btm_percentile = self._percentile(data, btm) if top_percentile == btm_percentile or \ math.isnan(top_percentile) or math.isnan(btm_percentile): return # Leave 1 percent of the axis range as extra space, so the outermost # points are not smudged by the axis lines. space = (top_percentile - btm_percentile) * 0.01 top_scale = top_percentile + space btm_scale = btm_percentile - space if self.zero_y: # When y is set at zero, set space at the top to be one percent room # of the *axis* range, not the data range (this may be a big # difference if the data range is small). top_scale = top_percentile * 1.01 axis.set_ylim(0, top_scale) else: if self.log_base: try: axis.set_yscale('log', base=self.log_base) except TypeError: axis.set_yscale('log', basey=self.log_base) axis.set_ylim(max(0, btm_scale), top_scale) else: axis.set_ylim(btm_scale, top_scale) if self.invert_y and unit in self.inverted_units: axis.invert_yaxis() def _percentile(self, arr, q): try: # nanpercentile was only introduced in numpy 1.9.0 return np.nanpercentile(arr, q) except AttributeError: ma = np.ma.masked_invalid(arr) return np.percentile(ma.compressed(), q) def get_series(self, series, results, config, no_invalid=False, aligned=False): if aligned or self.combined: data = np.array((results.x_values, results.series(series['data'])), dtype=float) else: raw_key = series.get('raw_key') try: data = np.array( list(results.raw_series(series['data'], raw_key=raw_key, absolute=self.absolute_time)), dtype=float).transpose() if not len(data): raise KeyError() except KeyError: if raw_key: # No point in using synthesised results since those won't be # correct when raw_key is set return np.array([], dtype=float) logger.debug("No raw data found for series %s, " "falling back to computed values", series['data']) data = np.array((results.x_values, results.series(series['data'])), dtype=float) if data.any() and (self.data_cutoff or config.get('cutoff')): start, end = self.data_cutoff or config['cutoff'] if self.absolute_time: start += results.t0 if end <= 0: end += results.meta("TOTAL_LENGTH") min_idx = data[0].searchsorted(start, side='left') max_idx = data[0].searchsorted(end, side='right') data = data[:, min_idx:max_idx] if len(data) == 0: return data if no_invalid: data = np.ma.compress_cols(np.ma.masked_invalid(data)) if 'norm_factor' in series: data[1] /= series['norm_factor'] if 'smoothing' in series and series['smoothing'] and data.any(): l = series['smoothing'] if l % 2 != 1: l += 1 if l <= len(data[1]): kern = np.ones(l, dtype=float) kern /= l data[1] = np.convolve(data[1], kern, mode=str('same')) else: logger.warn("Smoothing length longer than data series %s; " "not smoothing", series['data']) return data class CombineManyPlotter(object): def __init__(self, *args, **kwargs): super(CombineManyPlotter, self).__init__(*args, **kwargs) self.combined = True def plot(self, results, config=None, axis=None, connect_interactive=True): if self.metadata is None: self.metadata = results[0].meta() if config is None: config = self.config combine_mode = self.override_group_by or config.get('group_by', 'groups') combiner = combiners.new(combine_mode, print_n=self.combine_print_n, filter_regexps=self.filter_regexp, filter_series=self.filter_series, save_dir=self.combine_save_dir, data_cutoff=self.data_cutoff) super(CombineManyPlotter, self).plot( combiner(results, config), config, axis, connect_interactive=connect_interactive) class TimeseriesPlotter(Plotter): can_subplot_combine = True can_highlight = True def init(self, config=None, axis=None): Plotter.init(self, config, axis) if axis is None: axis = self.figure.gca() if config is None: config = self.config if 'dual_axes' in config and config['dual_axes']: second_axis = self.figure.add_axes( axis.get_position(), sharex=axis, frameon=False) second_axis.yaxis.tick_right() axis.yaxis.tick_left() second_axis.yaxis.set_label_position('right') second_axis.yaxis.set_offset_position('right') second_axis.xaxis.set_visible(False) axis.grid(False) second_axis.grid(False) config['axes'] = [axis, second_axis] else: config['axes'] = [axis] for a in config['axes']: a.minorticks_on() unit = [None] * len(config['axes']) for s in config['series']: if 'axis' in s and s['axis'] == 2: a = 1 else: a = 0 s_unit = self.data_config[s['data']]['units'] if unit[a] is not None and s_unit != unit[a] and 'raw_key' not in s: raise RuntimeError( "Plot axis unit mismatch: %s/%s" % (unit[a], s_unit)) unit[a] = s_unit axis.set_xlabel(self.label_x[0] if self.label_x else 'Time (s)') for i, u in enumerate(unit): if 'axis_labels' in config and config['axis_labels'][i]: l = config['axis_labels'][i] else: l = unit[i] if self.norm_factors: l = l[0].lower() + l[1:] l = "Normalised %s" % l if self.label_y: l = self.label_y[min(i, len(self.label_y) - 1)] config['axes'][i].set_ylabel(l) config['units'] = unit def _plot(self, results, config=None, axis=None, postfix="", extra_kwargs={}, extra_scale_data=[]): if axis is None: axis = self.figure.gca() if config is None: config = self.config stack = 'stacked' in config and config['stacked'] x_min = 2**63 x_max = 0 colours = cycle(self.colours) if stack: sums = np.zeros(len(results.x_values)) all_data = [None] * len(config['axes']) for i, s in enumerate(config['series']): data = self.get_series(s, results, config, aligned=stack) if not data.any(): continue x_min = min(data[0].min(), x_min) x_max = max(data[0].max(), x_max) kwargs = {} for k in PLOT_KWARGS: if k in s: kwargs[k] = s[k] if 'label' in kwargs: kwargs['label'] += postfix if 'color' not in kwargs: kwargs['color'] = next(colours) kwargs.update(extra_kwargs) if 'axis' in s and s['axis'] == 2: a = 1 else: a = 0 if stack: kwargs['facecolor'] = kwargs['color'] kwargs['edgecolor'] = 'none' del kwargs['color'] config['axes'][a].fill_between( data[0], sums, data[1] + sums, **kwargs) sums += data[1] else: if all_data[a] is None: all_data[a] = data[1].copy() else: all_data[a] = np.append(all_data[a], data[1]) for r in self.scale_data + extra_scale_data: d = self.get_series(s, r, config) if d.any(): all_data[a] = np.append(all_data[a], d[1]) self.data_artists.extend(config['axes'][a].plot(data[0], data[1], **kwargs)) xlim = axis.get_xlim() axis.set_xlim( min(x_min, xlim[0]) if xlim[0] > 0 else x_min, max(x_max, self.metadata['TOTAL_LENGTH'], xlim[1])) if 'scaling' in config: btm, top = config['scaling'] else: btm, top = 0, 100 for a in range(len(config['axes'])): if all_data[a] is not None: self._do_scaling(config['axes'][a], all_data[a], btm, top, config['units'][a]) # Handle cut-off data sets. If the x-axis difference between the # largest data point and the TOTAL_LENGTH from settings, scale to # the data values, but round to nearest 10 above that value. try: max_xdata = max([l.get_xdata()[-1] for l in config['axes'][a].get_lines() if l.get_xdata()]) if abs(self.metadata['TOTAL_LENGTH'] - max_xdata) > 10: config['axes'][a].set_xlim( right=(max_xdata + (10 - max_xdata % 10))) except ValueError: pass for a, b in zip(config['axes'], self.bounds_x): a.set_xbound(b) for a, b in zip(config['axes'], self.bounds_y): a.set_ybound(b) class TimeseriesCombinePlotter(CombineManyPlotter, TimeseriesPlotter): pass class BoxPlotter(TimeseriesPlotter): # Since labels are printed vertically at the bottom, they tend to break # matplotlib's layout logic if they're too long. _max_label_length = 30 def init(self, config=None, axis=None): if axis is None: axis = self.figure.gca() TimeseriesPlotter.init(self, config, axis) if config is None: config = self.config axis.set_xlabel('') for a in config['axes']: a.grid(False, axis='x') self.start_position = 1 def plot(self, results, config=None, axis=None, connect_interactive=True): if self.metadata is None: self.metadata = results[0].meta() return self._plot(results, config, axis) def _get_split_groups(self, results, config): if self.split_groups: if len(results) % len(self.split_groups) > 0: raise RuntimeError( "Split groups only works when the number of results " "is divisible by the number of groups") split_results = [] series = [] group_size = len(results) // len(self.split_groups) for i, g in enumerate(self.split_groups): split_results.append(results[i * group_size:(i + 1) * group_size]) for s in config['series']: ns = s.copy() ns['label'] = g series.append(ns) else: group_size = len(results) split_results = [] series = config['series'] return group_size, split_results, series def _plot(self, results, config=None, axis=None): if config is None: config = self.config axis = config['axes'][0] ticklabels = [] ticks = [] texts = [] pos = 1 all_data = [None] * len(config['axes']) group_size, split_results, series = self._get_split_groups(results, config) # The median lines are red, so filter out red from the list of colours colours = list( islice(cycle([c for c in self.colours if c != 'r']), group_size)) series_labels = [s.get('label', '') for s in series] if not any([s.get('label_override', False) for s in series]): series_labels = self._filter_labels(series_labels) ticklabel_override = False for i, s in enumerate(series): if split_results: results = split_results[i] if 'axis' in s and s['axis'] == 2: a = 1 else: a = 0 data = [] group_size = len(results) for r in results: d = self.get_series(s, r, config, no_invalid=True) if not d.any(): continue if all_data[a] is None: all_data[a] = d[1].copy() else: all_data[a] = np.append(all_data[a], d[1]) data.append(d[1]) if not data: continue group_size = len(data) if len(series) > 1 or self.print_title: texts.append(config['axes'][0].text( pos + group_size / 2.0 - 0.5, 14, series_labels[i], ha='center')) positions = range(pos, pos + group_size) ticks.extend(list(range(pos, pos + group_size))) bp = config['axes'][a].boxplot(data, positions=positions, sym="b+") for j, r in zip(range(group_size), results): pyplot.setp(bp['boxes'][j], color=colours[j]) if i == 0 and group_size > 1: bp['caps'][j * 2].set_label(r.label()) if len(results) > 1: ticklabels.append(r.label()) ticklabel_override = (ticklabel_override or r.metadata.get('label_override', False)) if len(bp['fliers']) == group_size: pyplot.setp([bp['fliers'][j]], markeredgecolor=colours[j]) keys = 'caps', 'whiskers' else: keys = 'caps', 'whiskers', 'fliers' for k in keys: if bp[k]: pyplot.setp(bp[k][j * 2], color=colours[j]) pyplot.setp(bp[k][j * 2 + 1], color=colours[j]) if bp['whiskers']: for art in bp['whiskers']: art.set_linestyle("-") config['axes'][a].axvline( x=pos + group_size, color='black', linewidth=0.5, linestyle=':') pos += group_size + 1 if not ticks: return # no data for i, a in enumerate(config['axes']): if all_data[i] is not None: self._do_scaling(a, all_data[i], 0, 100, config['units'][i], allow_log=False) for a, b in zip(config['axes'], self.bounds_y): a.set_ybound(b) if not ticklabel_override: ticklabels = self._filter_labels(ticklabels) for i, l in enumerate(ticklabels): if len(l) > self._max_label_length: ticklabels[i] = l[:self._max_label_length] + "..." for t in texts: min_y, max_y = t.axes.get_ylim() x, y = t.get_position() mult = 0.1 if self.log_base else 0.01 t.set_position((x, max_y + abs(max_y - min_y) * mult)) self.artists.extend(texts) if texts: self.top_art.append(texts[0]) axis.set_xlim(0, pos - 1) axis.set_xticks(ticks) axis.set_xticks([], minor=True) if self.print_labels: axis.set_xticklabels(ticklabels, rotation=90, ha='center') else: axis.set_xticklabels([]) class BoxCombinePlotter(CombineManyPlotter, BoxPlotter): pass class BarPlotter(BoxPlotter): def init(self, config=None, axis=None): BoxPlotter.init(self, config, axis) def _plot(self, results, config=None, axis=None): if config is None: config = self.config axis = config['axes'][0] ticklabels = [] ticks = [] pos = 1 all_data = [] for a in config['axes']: all_data.append([]) errcol = 'k' width = 1.0 group_size, split_results, series = self._get_split_groups(results, config) # The error bars lines are black, so filter out black from the list of # colours colours = list( islice(cycle([c for c in self.colours if c != errcol]), max(group_size, len(series)))) colour_mode = (self.override_colour_mode or config.get('colour_mode', 'groups')) series_labels = self._filter_labels( [s['label'] for s in series]) texts = [] for i, s in enumerate(series): if split_results: results = split_results[i] if 'axis' in s and s['axis'] == 2: a = 1 else: a = 0 data = [] errors = [] for r in results: dp = self.get_series(s, r, config, no_invalid=True) if not dp.any() and not self.skip_missing: data.append(0.0) errors.append(0.0) all_data[a].append(0.0) elif dp.any(): dp = np.array(dp[1]) data.append(dp.mean()) errors.append(dp.std()) all_data[a].append(data[-1] + errors[-1]) all_data[a].append(data[-1] - errors[-1]) # may have skipped series, recalculate group_size = len(data) positions = [p - width / 2.0 for p in range(pos, pos + group_size)] ticks.extend(list(range(pos, pos + group_size))) ticklabels.extend(self._filter_labels([r.label() for r in results])) if colour_mode == 'groups': colour = colours[i] else: colour = self.colours[:len(data)] config['axes'][a].bar(positions, data, yerr=errors, ecolor=errcol, color=colour, alpha=0.75, width=width, align='edge', capsize=2) if len(config['series']) > 1 or self.print_title: texts.append(config['axes'][0].text( pos + group_size / 2.0 - 0.5, 14, series_labels[i], ha='center')) config['axes'][a].axvline( x=pos + group_size, color='black', linewidth=0.5, linestyle=':') pos += group_size + 1 if not ticks: return # no data for a, b in zip(config['axes'], self.bounds_y): a.set_ybound(b) min_y, max_y = config['axes'][0].get_ylim() for t in texts: x, y = t.get_position() t.set_position((x, max_y + abs(max_y - min_y) * 0.01)) for i, l in enumerate(ticklabels): if len(l) > self._max_label_length: ticklabels[i] = l[:self._max_label_length] + "..." axis.set_xlim(0, pos - 1) axis.set_xticks(ticks) axis.set_xticks([], minor=True) if self.print_labels: axis.set_xticklabels(ticklabels, rotation=90, ha='center') else: axis.set_xticklabels([]) self.artists.extend(texts) if texts: self.top_art.append(texts[0]) class BarCombinePlotter(CombineManyPlotter, BarPlotter): pass class CdfPlotter(Plotter): can_subplot_combine = True can_highlight = True def init(self, config=None, axis=None): Plotter.init(self, config, axis) if axis is None: axis = self.figure.gca() if config is None: config = self.config unit = None for s in config['series']: s_unit = self.data_config[s['data']]['units'] if unit is not None and s_unit != unit: raise RuntimeError( "Plot axis unit mismatch: %s/%s" % (unit, s_unit)) unit = s_unit if 'axis_labels' in config and config['axis_labels'][0]: axis.set_xlabel(config['axis_labels'][0]) else: axis.set_xlabel(unit) axis.set_ylabel('Cumulative probability') axis.set_ylim(0, 1) axis.minorticks_on() config['axes'] = [axis] def _plot(self, results, config=None, axis=None, postfix="", extra_kwargs={}, extra_scale_data=[]): if config is None: config = self.config if axis is None: axis = config['axes'][0] colours = cycle(self.colours) max_value = 0.0 min_value = float('inf') for i, s in enumerate(config['series']): data = self.get_series(s, results, config, no_invalid=True) if not data.any(): continue # ECDF that avoids bias due to binning. See discussion at # http://stackoverflow.com/a/11692365 x_values = np.sort(data[1]) y_values = np.arange(1, len(x_values)+1)/float(len(x_values)) max_value = max(max_value, x_values[-1]) min_value = min(min_value, x_values[0]) kwargs = {} for k in PLOT_KWARGS: if k in s: kwargs[k] = s[k] if 'label' in kwargs: kwargs['label'] += postfix if 'color' not in kwargs: kwargs['color'] = next(colours) kwargs.update(extra_kwargs) self.data_artists.extend(axis.plot(x_values, y_values, **kwargs)) if max_value > 10: # round up to nearest value divisible by 10 max_value += 10 - (max_value % 10) if max_value > 0: axis.set_xlim(right=max(max_value, axis.get_xlim()[1])) if self.zero_y: axis.set_xlim(left=0) elif min_value < max_value: if min_value > 10: min_value -= min_value % 10 # nearest value divisible by 10 if min_value > 100: min_value -= min_value % 100 axis.set_xlim(left=min(min_value, axis.get_xlim()[0])) if self.log_base: try: axis.set_xscale('log', base=self.log_base) except TypeError: axis.set_xscale('log', basex=self.log_base) for a, b in zip(config['axes'], self.bounds_x): a.set_xbound(b) class CdfCombinePlotter(CombineManyPlotter, CdfPlotter): pass class QqPlotter(Plotter): def init(self, config=None, axis=None): Plotter.init(self, config, axis) if axis is None: axis = self.figure.gca() if config is None: config = self.config axis.minorticks_on() config['axes'] = [axis] if len(config['series']) > 1: raise RuntimeError("Can't do Q-Q plot with more than one series") def plot(self, results, connect_interactive=True): if self.metadata is None: self.metadata = results[0].meta() if len(results) < 2: results *= 2 self._plot(results[:2]) def _plot(self, results): series = self.config['series'][0] axis = self.config['axes'][0] x_values, y_values = self._equal_length(results[0].series( series['data']), results[1].series(series['data'])) axis.plot(x_values, y_values, 'r.', label=series['label']) max_val = max(x_values.max(), y_values.max()) axis.plot([0, max_val], [0, max_val], 'b-', label="Ref (x=y)") axis.set_xlabel(results[0].label()) axis.set_ylabel(results[1].label()) axis.set_xlim(min(x_values) * 0.99, max(x_values) * 1.01) axis.set_ylim(min(y_values) * 0.99, max(y_values) * 1.01) def _equal_length(self, x, y): x_values = np.sort([r for r in x if r is not None]) y_values = np.sort([r for r in y if r is not None]) # If data sets are not of equal sample size, the larger one is shrunk by # interpolating values into the length of the smallest data set. # # Translated from the R implementation: # http://svn.r-project.org/R/trunk/src/library/stats/R/qqplot.R and # http://svn.r-project.org/R/trunk/src/library/stats/R/approx.R # # np.linspace returns a number of equally spaced points between a # maximum and a minimum (like range() but specifying number of steps # rather than interval). These are the x values of used for # interpolation. # # np.interp does linear interpolation of a dataset. I.e. for each x # value in the first argument it returns the linear interpolation # between the two neighbouring y values of the source data set. The # source x values are simply numbered up to the length of the longer # data set, and the source y values are the actual values of the # longer data set. The destination x values are equally spaced in the # length of the longer data set, with n being equal to the number of # data points in the shorter data set. if len(x_values) < len(y_values): y_values = np.interp(np.linspace(0, len(y_values), num=len(x_values), endpoint=False), range(len(y_values)), y_values) elif len(y_values) < len(x_values): x_values = np.interp(np.linspace(0, len(x_values), num=len(y_values), endpoint=False), range(len(x_values)), x_values) return x_values, y_values class EllipsisPlotter(Plotter): can_subplot_combine = True def init(self, config=None, axis=None): Plotter.init(self, config, axis) try: from flent.error_ellipse import plot_point_cov self.plot_point_cov = plot_point_cov except ImportError: raise RuntimeError("Unable to load error_ellipse plotting functions") if axis is None: axis = self.figure.gca() if config is None: config = self.config if len(config['series']) < 2: raise RuntimeError( "Can't do ellipsis plots with fewer than two series") axis.minorticks_on() config['axes'] = [axis] for i, a in enumerate(['x', 'y']): unit = self.data_config[config['series'][i]['data']]['units'] if self.invert_y and unit in self.inverted_units: config['invert_' + a] = True else: config['invert_' + a] = False if 'axis_labels' in config and config['axis_labels'][i]: getattr(axis, 'set_' + a + 'label')(config['axis_labels'][i]) else: getattr( axis, 'set_' + a + 'label')( self.data_config[config['series'][i]['data']]['units']) def _plot(self, results, config=None, axis=None, extra_kwargs={}, postfix="", **kwargs): self.xvals, self.yvals = [], [] if config is None: config = self.config if axis is None: axis = config['axes'][0] series = config['series'] label = postfix.replace(" - ", "") if postfix else results.label() carg = {} if 'color' in extra_kwargs: carg['color'] = extra_kwargs['color'] x_values = self.get_series(series[0], results, config, aligned=True)[1] for s in series[1:]: y_values = self.get_series(s, results, config, aligned=True)[1] points = np.vstack((x_values, y_values)) points = np.transpose( np.ma.compress_cols(np.ma.masked_invalid(points))) if len(points) == 1: points = np.vstack((points, points)) el = self.plot_point_cov(points, ax=axis, alpha=0.5, **carg) med = np.median(points, axis=0) self.xvals.append(el.center[0] - el.width / 2) self.xvals.append(el.center[0] + el.width / 2) self.yvals.append(el.center[1] - el.height / 2) self.yvals.append(el.center[1] + el.height / 2) self.xvals.append(med[0]) self.yvals.append(med[1]) axis.plot(*med, marker='o', linestyle=" ", **carg) axis.annotate(label, med, ha='center', annotation_clip=True, xytext=(0, 8), textcoords='offset points') if len(self.yvals) == 0: return if self.zero_y: self.xvals.append(0.0) self.yvals.append(0.0) axis.set_xlim(max(min(self.xvals) * 0.99, 0), max(self.xvals) * 1.1) axis.set_ylim(max(min(self.yvals) * 0.99, 0), max(self.yvals) * 1.1) if config['invert_x']: axis.invert_xaxis() if config['invert_y']: axis.invert_yaxis() for a, b in zip(config['axes'], self.bounds_x): a.set_xbound(b) for a, b in zip(config['axes'], self.bounds_y): a.set_ybound(b) class EllipsisCombinePlotter(CombineManyPlotter, EllipsisPlotter): pass class MetaPlotter(Plotter): def __init__(self, plot_config, data_config, figure=None, **kwargs): self._kwargs = kwargs self._can_highlight = True self.subplots = [] Plotter.__init__(self, plot_config, data_config, figure=figure, **kwargs) def init(self, config=None): Plotter.init(self, config) self.subplots = [] if config is None: config = self.config self.configs = [] ax = self.figure.gca() ax.set_axis_off() if 'subplot_params' in config: subplot_params = config['subplot_params'] else: subplot_params = [{}] * len(config['subplots']) if config.get('share_axis', True): sharex = ax else: sharex = None for i, (subplot, cfg) in enumerate(config['subplots'].items()): if config.get('orientation', 'vertical') == 'vertical': rows = len(config['subplots']) cols = 1 else: cols = len(config['subplots']) rows = 1 axis = self.figure.add_subplot( rows, cols, i + 1, sharex=sharex, **subplot_params[i]) cfg['axes'] = [axis] cfg = self.expand_plot_config(cfg, self.data_config, results=self._kwargs.get("results")) self.configs.append(cfg) plotter = get_plotter(cfg['type'])(cfg, self.data_config, figure=self.figure, **self._kwargs) plotter.init(cfg, axis) self.subplots.append((plotter, axis)) if i < len(config['subplots']) - 1: axis.set_xlabel("") def plot(self, results): if self.metadata is None: self.metadata = results[0].meta() for s, ax in self.subplots: s.plot(results, connect_interactive=False) s.legends.extend(s.do_legend()) self.legends.extend(s.legends) self.right_art.extend(s.right_art) s.init_interactive() self.connect_interactive() def get_can_highlight(self): return self._can_highlight and all([s.can_highlight for s, ax in self.subplots]) def set_can_highlight(self, v): self._can_highlight = v can_highlight = property(get_can_highlight, set_can_highlight) def on_move(self, event): for s, ax in self.subplots: if ax.in_axes(event) or any([l.contains(event)[0] for l in s.legends]): s.on_move(event) else: # If the event did not fit this axes, we may have just left it, # so update with no hovered elements to make sure we clear any # highlights. s.update_axes(set()) def clear_bg_cache(self, evt=None): for s, ax in self.subplots: s.clear_bg_cache() def disconnect_callbacks(self): Plotter.disconnect_callbacks(self) for s, ax in self.subplots: s.disconnect_callbacks() class SubplotCombinePlotter(MetaPlotter): def init(self, config=None): pass def _init(self, number): config = self.config config['subplots'] = OrderedDict() for i in range(number): config['subplots'][str(i)] = config.copy() if not get_plotter(config['type']).can_subplot_combine: raise RuntimeError( "This plot type does not work with --subplot-combine") MetaPlotter.init(self, config) def plot(self, results, connect_interactive=True): if self.metadata is None: self.metadata = results[0].meta() self._init(len(results)) for (p, a), r in zip(self.subplots, results): p.plot([r]) self.legends.extend(p.do_legend()) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/resultset.py����������������������������������������������������������������������0000664�0000000�0000000�00000055572�14670056262�0016365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # resultset.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 24 November 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import math import os import re import gzip import bz2 from datetime import datetime from calendar import timegm from itertools import repeat from copy import deepcopy from collections import OrderedDict from flent import transformers from flent.loggers import get_logger from flent.util import parse_date, format_date, utcnow try: import ujson as json except ImportError: import json logger = get_logger(__name__) # Controls pretty-printing of json dumps JSON_INDENT = 2 __all__ = ['new', 'load'] RECORDED_SETTINGS = ( "NAME", "HOST", "HOSTS", "TIME", "LOCAL_HOST", "TITLE", "NOTE", "LENGTH", "TOTAL_LENGTH", "STEP_SIZE", "TEST_PARAMETERS", "FLENT_VERSION", "IP_VERSION", "BATCH_NAME", "BATCH_TIME", "BATCH_TITLE", "BATCH_UUID", "DATA_FILENAME", "HTTP_GETTER_URLLIST", "HTTP_GETTER_DNS", "HTTP_GETTER_WORKERS", ) FILEFORMAT_VERSION = 4 SUFFIX = '.flent.gz' MAX_FILENAME_LEN = 250 # most filesystems have 255 as their limit # Time settings will be serialised as ISO timestamps and stored in memory as # datetime instances TIME_SETTINGS = ("TIME", "T0", "BATCH_TIME") _EMPTY = object() def new(settings): d = {} for a in RECORDED_SETTINGS: d[a] = deepcopy(getattr(settings, a, None)) return ResultSet(**d) def load(filename, absolute=False): return ResultSet.load_file(filename, absolute) class SeparatorDict(dict): "Dictionary that supports getting nested keys with a separator" def __init__(self, *args, **kwargs): self._sep = None if 'sep' in kwargs: self._sep = kwargs['sep'] del kwargs['sep'] super(SeparatorDict, self).__init__(*args, **kwargs) def __getitem__(self, key): if key in self or self._sep is None or \ not hasattr(key, "split") or self._sep not in key: return super(SeparatorDict, self).__getitem__(key) # Try to walk the metadata structure by the :-separated keys in 'key'. # This makes it possible to extract arbitrary metadata strings from # the structure. try: parts = key.split(self._sep) data = self[parts[0]] parts = parts[1:] while parts: k = parts.pop(0) try: i = int(k) data = data[i] except ValueError: data = data[k] return data except (KeyError, IndexError, TypeError): raise KeyError class ResultSet(object): def __init__(self, SUFFIX=SUFFIX, **kwargs): self._x_values = [] self._results = OrderedDict() self._filename = None self._loaded_from = None self._absolute = False self._raw_values = {} self._raw_keys = None self.metadata = SeparatorDict(kwargs, sep=":") self.SUFFIX = SUFFIX self._t0 = None if 'TIME' not in self.metadata or self.metadata['TIME'] is None: self.metadata['TIME'] = utcnow() if 'NAME' not in self.metadata or self.metadata['NAME'] is None: raise RuntimeError("Missing name for resultset") if 'DATA_FILENAME' not in self.metadata \ or self.metadata['DATA_FILENAME'] is None: self.metadata['DATA_FILENAME'] = self.dump_filename if not self.metadata['DATA_FILENAME'].endswith(self.SUFFIX): self.metadata['DATA_FILENAME'] += self.SUFFIX self._filename = self.metadata['DATA_FILENAME'] self._label = None if 'TITLE' in self.metadata and self.metadata['TITLE']: self.title = "%s - %s" % (self.metadata['NAME'], self.metadata['TITLE']) self.long_title = "%s - %s" % (self.title, format_date( self.metadata['TIME'], fmt="%Y-%m-%d %H:%M:%S")) else: self.title = "%s - %s" % (self.metadata['NAME'], format_date(self.metadata['TIME'], fmt="%Y-%m-%d %H:%M:%S")) self.long_title = self.title if 'SERIES_META' not in self.metadata: self.metadata['SERIES_META'] = {} def meta(self, key=None, value=_EMPTY): if key: if value is not _EMPTY: self.metadata[key] = value return self.metadata[key] return self.metadata def series_meta(self, series, key=None, value=_EMPTY): if key: if value is not _EMPTY: self.metadata['SERIES_META'][series][key] = value return self.metadata['SERIES_META'][series][key] return self.metadata['SERIES_META'][series] def label(self): return self._label or self.metadata["TITLE"] \ or format_date(self.metadata["TIME"]) def set_label(self, label): self._label = label def get_x_values(self): return self._x_values def set_x_values(self, x_values): assert not self._x_values self._x_values = list(x_values) x_values = property(get_x_values, set_x_values) def add_result(self, name, data): assert len(data) == len(self._x_values) self._results[name] = data def add_raw_values(self, name, data): self._raw_values[name] = data def set_raw_values(self, raw_values): self._raw_values = {k: [SeparatorDict(x, sep="::") for x in v] for k, v in raw_values.items()} def get_raw_values(self): return self._raw_values raw_values = property(get_raw_values, set_raw_values) def create_series(self, series_names): for n in series_names: self._results[n] = [] self.metadata['SERIES_META'][n] = {} def append_datapoint(self, x, data): """Append a datapoint to each series. Missing data results in append None (keeping all result series synchronised in x values). Requires preceding call to create_series() with the data series name(s). """ data = dict(data) self._x_values.append(x) for k in list(self._results.keys()): if k in data: self._results[k].append(data[k]) del data[k] else: self._results[k].append(None) if data: raise RuntimeError("Unexpected data point(s): %s" % list(data.keys())) def concatenate(self, res): if self._absolute: x0 = 0.0 # When concatenating using absolute values, insert an empty data # point midway between the data series, to prevent the lines for # each distinct data series from being joined together. xnext = (self.x_values[-1] + res.x_values[0]) / 2.0 self.append_datapoint(xnext, zip(res.series_names, repeat(None))) else: x0 = self.x_values[-1] + self.meta("STEP_SIZE") for point in res: x = point[0] + x0 data = dict(zip(res.series_names, point[1:])) self.append_datapoint(x, data) def last_datapoint(self, series): data = self.series(series) if not data: return None return data[-1] def series(self, name, smooth=None): if name not in self._results: logger.debug("Missing data points for series '%s'", name) return [None] * len(self.x_values) if smooth: return self.smoothed(self._results[name], smooth) return self._results[name] def _calculate_t0(self): self._t0 = timegm(self.metadata['T0'].timetuple( )) + self.metadata['T0'].microsecond / 1000000.0 def get_t0(self): if self._t0 is None: self._calculate_t0() return self._t0 def set_t0(self, value): self._t0 = value t0 = property(get_t0, set_t0) def raw_series(self, name, absolute=False, raw_key=None): if name not in self.raw_values: raise KeyError(name) if raw_key is None: raw_key = 'val' for i in self.raw_values[name]: try: x = i['t'] if absolute else i['t'] - self.t0 yield x, i[raw_key] except KeyError: continue def __getitem__(self, name): return self.series(name) def __contains__(self, name): return name in self._results def smoothed(self, res, amount): smooth_res = [] for i in range(len(res)): s = int(max(0, i - amount / 2)) e = int(min(len(res), i + amount / 2)) window = [j for j in res[s:e] if j is not None] if window and res[i] is not None: smooth_res.append(math.fsum(window) / len(window)) else: smooth_res.append(None) return smooth_res @property def series_names(self): return list(self._results.keys()) @property def raw_keys(self): if self._raw_keys is not None: return self._raw_keys raw_keys = {} def extract_keys(d, prefix=''): keys = [] for k, v in d.items(): kn = prefix + k keys.append(kn) if hasattr(v, 'keys'): keys.extend(extract_keys(v, kn + '::')) return keys for k, v in self.raw_values.items(): rk = set() for i in v: rk = rk.union(extract_keys(i)) raw_keys[k] = rk return raw_keys def zipped(self, keys=None): if keys is None: keys = self.series_names for i in range(len(self._x_values)): y = [self._x_values[i]] for k in keys: if k in self._results: y.append(self._results[k][i]) else: y.append(None) yield y def __iter__(self): return self.zipped() def __len__(self): return len(self.raw_values) def __hash__(self): if self._loaded_from is None: return id(self) return self._loaded_from.__hash__() def __eq__(self, other): return isinstance(other, self.__class__) \ and self.__hash__() == other.__hash__() def serialise_metadata(self): metadata = self.metadata.copy() for t in TIME_SETTINGS: if t in metadata and metadata[t] is not None: metadata[t] = format_date(metadata[t], utc=True) return metadata def serialise(self): metadata = self.serialise_metadata() return { 'metadata': metadata, 'version': FILEFORMAT_VERSION, 'x_values': self._x_values, 'results': self._results, 'raw_values': self._raw_values, } @property def empty(self): return not self._x_values def dump(self, fp): data = self.dumps() return fp.write(data) def dump_file(self, filename): try: if filename.endswith(".gz"): o = gzip.open elif filename.endswith(".bz2"): o = bz2.open else: o = open with o(filename, "wt") as fp: self.dump(fp) except IOError as e: logger.error("Unable to write results data file: %s", e) def dumps(self): return json.dumps(self.serialise(), indent=JSON_INDENT, sort_keys=True) @property def dump_filename(self): if hasattr(self, '_dump_file'): return self._dump_file return self._gen_filename() def _gen_filename(self): if self._filename is not None: return self._filename if 'TITLE' in self.metadata and self.metadata['TITLE']: name = "%s-%s.%%s%s" % (self.metadata['NAME'], format_date(self.metadata['TIME']).replace( ":", ""), self.SUFFIX) title_len = MAX_FILENAME_LEN - len(name) + 2 return name % re.sub("[^A-Za-z0-9-]", "_", self.metadata['TITLE'])[:title_len] else: return "%s-%s%s" % (self.metadata['NAME'], format_date(self.metadata['TIME']).replace(":", ""), self.SUFFIX) def dump_dir(self, dirname): self._dump_file = os.path.join(dirname, self._gen_filename()) logger.debug("Writing data file to '%s'", self._dump_file) try: if self._dump_file.endswith(".gz"): o = gzip.open elif self._dump_file.endswith(".bz2"): o = bz2.open else: o = open with o(self._dump_file, "wt") as fp: self.dump(fp) except IOError as e: logger.error("Unable to write results data file: %s", e) self._dump_file = None @classmethod def unserialise(cls, obj, absolute=False, SUFFIX=SUFFIX): try: version = int(obj['version']) except (KeyError, ValueError): version = 1 if version > FILEFORMAT_VERSION: raise RuntimeError( "File format version %d is too new. " "Please upgrade your version of Flent" % version) if version < FILEFORMAT_VERSION: logger.debug("Found old file format version %d. " "Converting to current version %d.", version, FILEFORMAT_VERSION) obj = cls.unserialise_compat(version, obj, absolute) metadata = dict(obj['metadata']) if 'TOTAL_LENGTH' not in metadata or metadata['TOTAL_LENGTH'] is None: metadata['TOTAL_LENGTH'] = max(obj['x_values']) # We need the minimum timestamp to guess a timezone offset, which we # store for subsequent values because it shouldn't be used for # BATCH_TIME min_t = 10**10 offset = None for v in obj['raw_values'].values(): min_t = min([min_t] + [i['t'] for i in v if 't' in i]) for t in TIME_SETTINGS: if t in metadata and metadata[t] is not None: metadata[t], offset = parse_date(metadata[t], min_t=min_t, offset=offset) rset = cls(SUFFIX=SUFFIX, **metadata) if absolute: t0 = metadata.get('T0', metadata.get('TIME')) x0 = timegm(t0.timetuple()) + t0.microsecond / 1000000.0 rset.x_values = [x + x0 for x in obj['x_values']] rset._absolute = True else: rset.x_values = obj['x_values'] for k, v in list(obj['results'].items()): rset.add_result(k, v) rset.raw_values = obj['raw_values'] return rset @classmethod def unserialise_compat(cls, version, obj, absolute=False): fake_raw = False if version == 1: obj['raw_values'] = {} if 'SERIES_META' in obj['metadata']: logger.debug("Moving raw values from SERIES_META") obj['raw_values'] = dict([(k, v['RAW_VALUES']) for k, v in obj['metadata']['SERIES_META'].items() if 'RAW_VALUES' in v]) if not obj['raw_values']: # No raw values were stored in the old data set. Fake them by # using the interpolated values as 'raw'. This ensures there's # always some data available as raw values, to facilitate # relying on their presence in future code. logger.debug("No raw values found; synthesising from parsed data") t0, offset = parse_date(obj['metadata'].get( 'T0', obj['metadata'].get('TIME'))) x0 = timegm(t0.timetuple()) + t0.microsecond / 1000000.0 for name in obj['results'].keys(): obj['raw_values'][name] = [{'t': x0 + x, 'val': r} for x, r in zip(obj['x_values'], obj['results'][name])] obj['metadata']['FAKE_RAW_VALUES'] = fake_raw = True if 'NETPERF_WRAPPER_VERSION' in obj['metadata']: logger.debug("Converting old NETPERF_WRAPPER_VERSION (%s) " "to FLENT_VERSION", obj['metadata']['NETPERF_WRAPPER_VERSION']) obj['metadata']['FLENT_VERSION'] = obj[ 'metadata']['NETPERF_WRAPPER_VERSION'] del obj['metadata']['NETPERF_WRAPPER_VERSION'] if version < 4 and not fake_raw: # Version 4 moved the data transform logic to also be applied to # raw_values data. So fixup the values in the raw_values structure # to apply data transforms where they are missing. logger.debug("Applying unit conversion to raw values") converted = 0 for n, values in obj['raw_values'].items(): # Netperf UDP_RR values if 'UDP' in n: logger.debug("Converting data series '%s' from RR to ms", n) for v in values: # Unfortunately this is the best heuristic we have that # this was a netperf UDP_RR runner, since old versions # may not have recorded this fact in the metadata if 'dur' in v: v['val'] = transformers.rr_to_ms(v['val']) converted += 1 # Convert HTTP latency values from seconds to milliseconds elif n == 'HTTP latency': logger.debug("Converting data series '%s' from s to ms", n) for v in values: if 'val' in v: v['val'] = transformers.s_to_ms(v['val']) converted += 1 # Turn airtime values from cumulative values into counts per # interval elif values and 'stations' in values[0]: logger.debug("Converting airtime values for series '%s' from " "cumulative to per-interval", n) last_vals = {} for v in values: if 'stations' not in v: continue for s, d in v['stations'].items(): if s not in last_vals: last_vals[s] = {} last = last_vals[s] for k in ('airtime_tx', 'airtime_rx'): if k in d: converted += 1 if k not in last: last[k], d[k] = d[k], 0.0 else: last[k], d[k] = d[k], d[k] - last[k] # Ditto for qdisc drops and marks elif values and ('dropped' in values[0] or 'ecn_mark' in values[0]): logger.debug("Converting qdisc drops and marks for series " "'%s' ""from cumulative to per-interval values", n) last = {} for v in values: for k in ('dropped', 'ecn_mark'): if k in v: converted += 1 if k not in last: last[k], v[k] = v[k], 0.0 else: last[k], v[k] = v[k], v[k] - last[k] # Iperf UDP bandwidth is was reported in bits/s, now uses Mbits/s to # be consistent with other bandwidth measurements if 'SERIES_META' in obj['metadata']: for k, v in obj['metadata']['SERIES_META'].items(): if 'MEAN_VALUE' in v and v.get('UNITS') == "bits/s": logger.debug("Converting MEAN_VALUE units for series " "'%s' from bit/s to Mbits/s", k) converted += 1 v['MEAN_VALUE'] = transformers.bits_to_mbits( v['MEAN_VALUE']) v['UNITS'] = "Mbits/s" logger.debug("Converted a total of %d data points.", converted) return obj @classmethod def load(cls, fp, absolute=False): if hasattr(fp, 'name'): filename = fp.name name, ext = os.path.splitext(filename) if ext in ('.gz', '.bz2'): ext = os.path.splitext(name)[1] + ext else: filename, ext = None, SUFFIX try: obj = cls.unserialise(json.load(fp), absolute, SUFFIX=ext) except ValueError as e: raise RuntimeError( "Unable to load JSON from '%s': %s." % (filename, e)) return obj @classmethod def load_file(cls, filename, absolute=False): logger.debug("Loading data file %s", filename) try: if filename.endswith(".gz"): o = gzip.open elif filename.endswith(".bz2") or filename.endswith(".flnt"): o = bz2.open else: o = open fp = o(filename, 'rt') r = cls.load(fp, absolute) r._loaded_from = os.path.realpath(filename) fp.close() return r except IOError as e: raise RuntimeError("Unable to read input file '%s': %s" % (filename, e)) @classmethod def loads(cls, s): try: return cls.unserialise(json.loads(s)) except ValueError as e: raise RuntimeError("Unable to load JSON data: %s." % e) ��������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/runners.py������������������������������������������������������������������������0000664�0000000�0000000�00000312325�14670056262�0016017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # runners.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 16 October 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import hashlib import hmac import math import io import itertools import os import re import shlex import signal import socket import subprocess import sys import tempfile import threading import time from datetime import datetime from calendar import timegm from threading import Event from flent import util, transformers from flent.build_info import DATA_DIR from flent.util import classname, ENCODING, Glob, normalise_host, utcnow from flent.loggers import get_logger try: import ujson as json except ImportError: import json try: from multiprocessing.reduction import DupFd except ImportError: DupFd = None mswindows = (sys.platform == "win32") try: from defusedxml.xmlrpc import monkey_patch monkey_patch() del monkey_patch XML_DEFUSED = True except ImportError: XML_DEFUSED = False try: # python 2 import xmlrpclib as xmlrpc except ImportError: import xmlrpc.client as xmlrpc logger = get_logger(__name__) if mswindows: def _handle_exitstatus(sts): raise NotImplementedError( "Subprocess management currently doesn't work on Windows") else: # helper function from subprocess module def _handle_exitstatus(sts, _WIFSIGNALED=os.WIFSIGNALED, _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, _WEXITSTATUS=os.WEXITSTATUS): # This method is called (indirectly) by __del__, so it cannot # refer to anything outside of its local scope.""" if _WIFSIGNALED(sts): return -_WTERMSIG(sts) elif _WIFEXITED(sts): return _WEXITSTATUS(sts) else: # Should never happen raise RuntimeError("Unknown child exit status!") class ParseError(Exception): pass class RunnerCheckError(Exception): pass def get(name): cname = classname(name, "Runner") if cname not in globals(): raise RuntimeError("Runner not found: '%s'" % name) return globals()[cname] MARKING_MAP = {'AF11': 0x28, 'AF12': 0x30, 'AF13': 0x38, 'AF21': 0x48, 'AF22': 0x50, 'AF23': 0x58, 'AF31': 0x68, 'AF32': 0x70, 'AF33': 0x78, 'AF41': 0x88, 'AF42': 0x90, 'AF43': 0x98, 'CS0': 0x00, 'CS1': 0x20, 'CS2': 0x40, 'CS3': 0x60, 'CS4': 0x80, 'CS5': 0xa0, 'CS6': 0xc0, 'CS7': 0xe0, 'EF': 0xb8} class RunnerBase(object): transformed_metadata = [] def __init__(self, name, settings, idx=None, start_event=None, finish_event=None, kill_event=None, parent=None, watchdog_timer=None, **kwargs): super(RunnerBase, self).__init__() self.runner_name = name self.settings = settings self.idx = idx self.test_parameters = {} self._raw_values = [] self._result = [] self.command = None self.returncode = 0 self.out_buf = self.err_buf = '' self.stdout = None self.stderr = None self._parent = parent self.result = None self.start_event = start_event self.kill_event = kill_event or Event() self.finish_event = finish_event or Event() self.watchdog_timer = watchdog_timer self._watchdog = None self._child_runners = [] self._pickled = False self.metadata = {'RUNNER': self.__class__.__name__, 'IDX': idx} self.runner_args = kwargs self._cache = None self._thread = None def __getstate__(self): state = {} for k, v in self.__dict__.items(): if k not in ('start_event', 'kill_event', 'finish_event', 'stdout', 'stderr') \ and not k.startswith("_"): state[k] = v state['_pickled'] = True if DupFd is not None: if self.stdout is not None: state['_stdout_fd'] = DupFd(self.stdout.fileno()) if self.stderr is not None: state['_stderr_fd'] = DupFd(self.stderr.fileno()) return state def __setstate__(self, state): stdout_fd = state.pop("_stdout_fd") if stdout_fd is not None: self.stdout = io.open(stdout_fd.detach(), "w+", encoding=ENCODING) stderr_fd = state.pop("_stderr_fd") if stderr_fd is not None: self.stderr = io.open(stderr_fd.detach(), "w+", encoding=ENCODING) self.__dict__.update(state) def __del__(self): self.close() @property def name(self): return f"{self.__class__.__name__}({self.runner_name})" def debug(self, msg, *args, **kwargs): logger.debug("%s: " + msg, self.name, *args, **kwargs) @property def out(self): if self.stdout is None: return self.out_buf self.stdout.seek(0) return self.out_buf + self.stdout.read() @property def err(self): if self.stderr is None: return self.err_buf self.stderr.seek(0) return self.err_buf + self.stderr.read() @property def cache(self): if self._cache is None: self._cache = util.get_cache(self.__class__.__name__) return self._cache def check(self): pass def do_parse(self, pool): res = [] for c in self._child_runners: res.extend(c.do_parse(pool)) return res def post_parse(self): for c in self._child_runners: c.post_parse() # Emulate threading interface to fit into aggregator usage. def start(self): if self._pickled: raise RuntimeError("Attempt to run a pickled runner") count = 0 for c in self._child_runners: count += c.start() return count def join(self, timeout=None): if self._thread is not None: self._thread.join(timeout) for c in self._child_runners: c.join(timeout) def is_alive(self): alive = [] if self._thread is not None: alive.append(self._thread.is_alive()) alive.extend([c.is_alive() for c in self._child_runners]) return any(alive) def kill(self): for c in self._child_runners: c.kill() self.kill_event.set() def close(self): if getattr(self, "_closed", False): return for c in getattr(self, "_child_runners", []): c.close() if self.stdout is not None: self.stdout.close() self.stdout = None if self.stderr is not None: self.stderr.close() self.stderr = None self._closed = True self._parent = None # break reference cycle def run(self): if self.start_event is not None: self.start_event.wait() self._run() self.finish_event.set() self.debug("Finished", extra={'runner': self}) def add_child(self, cls, **kwargs): self.debug("Adding child %s", cls.__name__) c = cls(name="%s :: child %d" % (self.runner_name, len(self._child_runners)), settings=self.settings, idx=self.idx, start_event=self.start_event, kill_event=self.kill_event, parent=self, **kwargs) c.check() self._child_runners.append(c) return c @property def child_results(self): for c in self._child_runners: res = c.result if res and hasattr(res, 'items'): yield res def get_raw_values(self): if not self._child_runners: return self._raw_values vals = list(self._raw_values) for c in self._child_runners: vals.extend(c.raw_values) return sorted(vals, key=lambda v: v['t']) def set_raw_values(self, val): self._raw_values = val raw_values = property(get_raw_values, set_raw_values) class DelegatingRunner(RunnerBase): @property def child_results(self): return iter([]) def get_metadata(self): md = {} for c in self._child_runners: md.update(c.metadata) return md def set_metadata(self, val): pass metadata = property(get_metadata, set_metadata) def _combine(self, vals): if not vals: return vals if hasattr(vals[0], 'keys'): r = {} for v in vals: if v: r.update(v) else: r = [] for v in vals: if v: r.extend(v) return r def get_result(self): return self._combine([c.result for c in self._child_runners]) def set_result(self, val): pass result = property(get_result, set_result) def fork(self): count = 0 for c in self._child_runners: count += c.fork() return count def _run(self): for c in self._child_runners: c.join() class ProcessRunner(RunnerBase): """Default process runner for any process.""" silent = False silent_exit = False supports_remote = True _env = {} def __init__(self, delay=0, remote_host=None, units=None, command=None, **kwargs): super(ProcessRunner, self).__init__(**kwargs) self.delay = delay self.remote_host = normalise_host(remote_host) self.units = units self.pid = None self.pid_fd = None self.returncode = None self.test_parameters = {} self.command = command self.start_time = None def check(self): if self.command is None: raise RunnerCheckError("No command set for %s" % self.__class__.__name__) if self.units: self.metadata['UNITS'] = self.units # Rudimentary remote host capability. Note that this is modifying the # final command, so all the find_* stuff must match on the local and # remote hosts. I.e. the same binaries must exist in the same places. if self.remote_host: if not self.supports_remote: raise RunnerCheckError( "%s (idx %d) does not support running on remote hosts." % ( self.__class__.__name__, self.idx)) self.command = "ssh %s '%s'" % (self.remote_host, self.command) self.metadata['REMOTE_HOST'] = self.remote_host self.args = shlex.split(self.command) self.metadata['COMMAND'] = self.command def handle_usr2(self, signal, frame): if self.start_event is not None: self.start_event.set() def fork(self): if mswindows: raise RuntimeError( "Process management currently doesn't work on Windows, " "so running tests is not possible.") count = 0 for c in self._child_runners: count += c.fork() # Use named temporary files to avoid errors on double-delete when # running on Windows/cygwin. try: self.stdout = tempfile.TemporaryFile(mode="w+", prefix="flent-", encoding=ENCODING) self.stderr = tempfile.TemporaryFile(mode="w+", prefix="flent-", encoding=ENCODING) except OSError as e: if e.errno == 24: raise RuntimeError( "Unable to create temporary files because too many " "files are open. Try increasing ulimit.") else: raise RuntimeError("Unable to create temporary files: %s" % e) self.debug("Forking to run command %s", self.command) try: pid = os.fork() except OSError as e: raise RuntimeError(f"{self.name}: Error during fork(): {e}") if pid == 0: signal.signal(signal.SIGTERM, signal.SIG_DFL) devnull = os.open(os.devnull, os.O_RDWR) os.dup2(devnull, 0) os.dup2(self.stdout.fileno(), 1) os.dup2(self.stderr.fileno(), 2) self.stdout.close() self.stderr.close() os.closerange(3, 65535) pid = os.getpid() try: if self.start_event is not None: os.write(2, f"{time.time()}: PID {pid} waiting for SIGUSR2\n".encode("utf-8")) signal.signal(signal.SIGUSR2, self.handle_usr2) self.start_event.wait() signal.signal(signal.SIGUSR2, signal.SIG_DFL) os.write(2, f"{time.time()}: PID {pid} sleeping for {self.delay} seconds\n".encode("utf-8")) time.sleep(self.delay) except: os._exit(0) env = dict(os.environ) env.update(self._env) prog = self.args[0] os.write(2, f"{time.time()}: PID {pid} running execvpe({' '.join(self.args)})\n".encode("utf-8")) os.execvpe(prog, self.args, env) else: self.debug("Forked %s as pid %d", self.args[0], pid) self.pid = pid self.start_time = time.monotonic() return count + 1 def start(self): count = super().start() self._thread = threading.Thread(target=self.run) self._thread.start() return count + 1 def kill(self): super().kill() if self._thread is None and self.pid is not None: self._kill_child(immediate=True) def _try_kill_child(self, sig): self.debug("Sending signal %d to pid %d", sig, self.pid) try: os.kill(self.pid, sig) for _ in range(10): if os.waitpid(self.pid, os.WNOHANG) != (0, 0): return True time.sleep(0.1) except (OSError, ChildProcessError): pass return False def _kill_child(self, immediate=False): self.silent_exit = True if not immediate: if self._try_kill_child(signal.SIGINT): return if self._try_kill_child(signal.SIGTERM): return try: if os.waitpid(self.pid, os.WNOHANG) == (0, 0): self.debug("Sending SIGKILL to pid %d", self.pid) os.kill(self.pid, signal.SIGKILL) # Do a final waitpid() to reap the zombie process os.waitpid(self.pid, 0) except (OSError, ChildProcessError): pass def run(self): """Runs the configured job. If a delay is set, wait for that many seconds, then open the subprocess, wait for it to finish, and collect the last word of the output (whitespace-separated).""" if self.start_event is not None: self.start_event.wait() try: os.kill(self.pid, signal.SIGUSR2) except OSError: pass timeout = False pid, sts = os.waitpid(self.pid, os.WNOHANG) while (pid, sts) == (0, 0): self.kill_event.wait(1) if self.watchdog_timer: runtime = time.monotonic() - self.start_time timeout = runtime > self.watchdog_timer if self.kill_event.is_set() or timeout: self.debug("Killed by %s", "timeout" if timeout else "event", extra={'runner': self}) self._kill_child() return pid, sts = os.waitpid(self.pid, os.WNOHANG) self.finish_event.set() self.returncode = _handle_exitstatus(sts) if self.returncode and not (self.silent or self.silent_exit): logger.warning("Program exited non-zero.", extra={'runner': self}) self.debug("Finished", extra={'runner': self}) def parse(self, output, error): raise NotImplementedError() def parse_error(self, error): logger.exception("Parse error in %s: %s", self.__class__.__name__, error, exc_info=error.__cause__) # Wrap parse() so that we only read from self.stdout and self.stderr in # the subprocess (since we pass around the stdout and stderr fds and # only read them when we need to access the output) def parse_output(self): # Make sure we start from the beginning (we could already have read the # data through self.{out,err}) self.stdout.seek(0) self.stderr.seek(0) return self.parse(self.stdout, self.stderr) def parse_string(self, string): out = io.StringIO(string) err = io.StringIO() return self.parse(out, err) def do_parse_direct(self): try: res = self.parse_output() self.recv_result(res) except Exception as e: self.parse_error(e) for c in self._child_runners: c.do_parse(None) return [] def do_parse(self, pool): if pool is None: return self.do_parse_direct() res = [pool.apply_async(self.parse_output, callback=self.recv_result, error_callback=self.parse_error)] for c in self._child_runners: res.extend(c.do_parse(pool)) return res def recv_result(self, res): result, raw_values, metadata = res self.result = result self.raw_values = raw_values self.metadata.update(metadata) if not result and not self.silent: logger.warning("Command produced no valid data.", extra={'runner': self}) def run_simple(self, args, kill=None, errmsg=None): if self.remote_host: args = ['ssh', self.remote_host, ' '.join(args)] if kill: kill = max(kill, 1) try: proc = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=kill) out = proc.stdout.decode(ENCODING) err = proc.stderr.decode(ENCODING) ret = proc.returncode except subprocess.TimeoutExpired as e: out = e.stdout.decode(ENCODING) if e.stdout else "" err = e.stderr.decode(ENCODING) if e.stderr else "" ret = 1 if ret != 0 and errmsg: raise RunnerCheckError(errmsg.format(err=err)) return out, err def _get_marking(self, marking): mk = marking.upper() if mk in MARKING_MAP: mkval = MARKING_MAP[mk] elif mk in self.settings.MARKING_NAMES: mkval = self.settings.MARKING_NAMES[mk] else: try: mkval = util.parse_int(marking) except ValueError: raise RuntimeError("Invalid marking: %s" % marking) return "0x%x" % mkval def parse_marking(self, marking, fmtstr, paired=False): """Convert netperf-style textual marking specs into integers""" if marking is not None: try: mk = marking.split(",") if paired and len(mk) > 1: return fmtstr.format("{},{}".format(self._get_marking(mk[0]), self._get_marking(mk[1]))) return fmtstr.format(self._get_marking(mk[0])) except (AttributeError, KeyError): return fmtstr.format(self.marking) return "" def split_stream(self, stream, delim="---"): part = "" for line in stream: if line.strip() == delim: yield part.strip() part = "" continue part += line if part: yield part.strip() DefaultRunner = ProcessRunner class SilentProcessRunner(ProcessRunner): silent = True def parse(self, output, error=""): return {}, [], {} class DitgRunner(ProcessRunner): """Runner for D-ITG with a control server.""" supports_remote = False transformers = {'delay': transformers.s_to_ms, 'jitter': transformers.s_to_ms, 'bitrate': transformers.identity, 'loss': transformers.identity} def __init__(self, test_args, host, length, interval, local_bind=None, control_host=None, **kwargs): super(DitgRunner, self).__init__(**kwargs) if not control_host: control_host = self.settings.CONTROL_HOST or self.settings.HOST control_host = normalise_host(control_host) if not local_bind and self.settings.LOCAL_BIND: local_bind = self.settings.LOCAL_BIND[0] self.proxy = xmlrpc.ServerProxy("http://%s:%s" % (control_host, self.settings.DITG_CONTROL_PORT), allow_none=True) self.ditg_secret = self.settings.DITG_CONTROL_SECRET self.test_args = test_args self.length = length self.host = normalise_host(host) self.interval = interval self.local_bind = local_bind def check(self): try: # We want to request a test that is long enough to keep the server # alive for the duration of the whole test, even though we may not # start ITGSend until after a delay length = max(self.length, self.settings.TOTAL_LENGTH) interval = int(self.interval * 1000) hm = hmac.new(self.ditg_secret.encode( 'UTF-8'), digestmod=hashlib.sha256) hm.update(str(length).encode('UTF-8')) hm.update(str(interval).encode('UTF-8')) params = self.proxy.request_new_test(length, interval, hm.hexdigest(), True) if params['status'] != 'OK': if 'message' in params: raise RunnerCheckError( "Unable to request D-ITG test. " "Control server reported error: %s" % params['message']) else: raise RunnerCheckError( "Unable to request D-ITG test. " "Control server reported an unspecified error.") self.test_id = params['test_id'] self.out_buf += "Test ID: %s\n" % self.test_id except (xmlrpc.Fault, socket.error) as e: raise RunnerCheckError( "Error while requesting D-ITG test: '%s'. " "Is the control server listening (see man page)?" % e) itgsend = util.which("ITGSend", fail=RunnerCheckError) # We put placeholders in the command string to be filled out by string # format expansion by the runner once it has communicated with the control # server and obtained the port values. self.command = "{binary} -Sdp {signal_port} -t {length} {local_bind} " \ "-a {dest_host} -rp {dest_port} {args}".format( binary=itgsend, length=int(self.length * 1000), dest_host=self.host, local_bind="-sa {0} -Ssa {0}".format( self.local_bind) if self.local_bind else "", args=self.test_args, signal_port=params['port'], dest_port=params['port'] + 1) super(DitgRunner, self).check() def parse_output(self): data = "" utc_offset = 0 results = {} raw_values = [] metadata = {} try: # The control server has a grace period after the test ends, so we # don't know exactly when the test results are going to be ready. We # assume that it will be within ten seconds. for i in range(10): res = self.proxy.get_test_results(self.test_id) if res['status'] == 'OK': data = res['data'] self.out_buf += data utc_offset = res['utc_offset'] break time.sleep(1) if res['status'] != 'OK': if 'message' in res: self.err_buf += "Error while getting results. " \ "Control server reported error: %s.\n" \ % res['message'] else: self.err_buf += "Error while getting results. " \ "Control server reported unknown error.\n" except xmlrpc.Fault as e: self.err_buf += "Error while getting results: %s.\n" % e # D-ITG *should* output about 50 bytes of data per data point. However, # sometimes it runs amok and outputs megabytes of erroneous data. So, if # the length of the data is more than ten times the expected value, # abort rather than try to process the data. if len(data) > (self.length / self.interval) * 500: self.err_buf += "D-ITG output too much data (%d bytes).\n" % len(data) return results if 'raw' in res: raw_values = self.parse_raw(res['raw']) for line in data.splitlines(): if not line.strip(): continue parts = [float(i) for i in line.split()] timestamp = parts.pop(0) + utc_offset for i, n in enumerate(('bitrate', 'delay', 'jitter', 'loss')): if n not in results: results[n] = [] results[n].append([timestamp, self.transformers[n](parts[i])]) return results, raw_values, metadata def parse_raw(self, data): raw_values = [] for line in data.splitlines(): parts = list(filter(None, re.split(r"(\S+)>\s*", line))) vals = dict(zip(parts[::2], parts[1::2])) times = {} for v in ('txTime', 'rxTime'): t, microsec = vals[v].split(".") h, m, s = t.split(":") # FIXME: This is definitely going to break if a test is run # around midnight dt = utcnow().replace(hour=int(h), minute=int(m), second=int(s), microsecond=int(microsec)) times[v] = float(timegm(dt.timetuple())) + dt.microsecond / 10**6 raw_values.append({ 't': times['rxTime'], 'val': 1000.0 * (times['rxTime'] - times['txTime']), 'seq': int(vals['Seq']), 'size': int(vals['Size']) }) return raw_values class NetperfDemoRunner(ProcessRunner): """Runner for netperf demo mode.""" transformed_metadata = ('MEAN_VALUE',) output_vars = 'THROUGHPUT,LOCAL_CONG_CONTROL,REMOTE_CONG_CONTROL,' \ 'TRANSPORT_MSS,LOCAL_TRANSPORT_RETRANS,' \ 'REMOTE_TRANSPORT_RETRANS,LOCAL_SOCKET_TOS,' \ 'REMOTE_SOCKET_TOS,DIRECTION,ELAPSED_TIME,PROTOCOL,' \ 'LOCAL_SEND_SIZE,LOCAL_RECV_SIZE,' \ 'REMOTE_SEND_SIZE,REMOTE_RECV_SIZE,' \ 'LOCAL_BYTES_SENT,LOCAL_BYTES_RECVD,' \ 'REMOTE_BYTES_SENT,REMOTE_BYTES_RECVD' _env = {"DUMP_TCP_INFO": "1"} def __init__(self, test, length, host, bytes=None, **kwargs): self.test = test self.length = length self.host = normalise_host(host) self.bytes = bytes super(NetperfDemoRunner, self).__init__(**kwargs) def parse(self, output, error): """Parses the interim result lines and returns a list of (time,value) pairs.""" result = [] raw_values = [] metadata = {} avg_dur = None alpha = 0.5 data_dict = {} # We use the -k output option for netperf, so we will get data in # KEY=VALUE lines. The interim points will be NETPERF_*[id] lines, # end-of-test data points will be straight KEY=VAL lines for line in output: line = line.strip() try: k, v = line.split("=", 1) if k.endswith(']'): k, i = k.split('[', 1) i = i[:-1] if k not in data_dict: data_dict[k] = [] data_dict[k].append(v) else: if k in data_dict: logger.warning("Duplicate key in netperf results: %s", k) data_dict[k] = v except ValueError: pass # TCP_INFO values are output to stderr for line in error: line = line.strip() if line.startswith("tcpi"): parts = line.split() data_dict.update(dict(zip(parts[::2], parts[1::2]))) try: for dur, t, value in zip(data_dict['NETPERF_INTERVAL'], data_dict['NETPERF_ENDING'], data_dict['NETPERF_INTERIM_RESULT']): dur = float(dur) t = float(t) value = float(value) if self.test == 'UDP_RR': value = transformers.rr_to_ms(value) # Calculate an EWMA of the netperf sampling duration and exclude # data points from a sampling period that is more than an order # of magnitude higher or lower than this average; these are # probably the result of netperf spitting out a measurement at # the end of a run after having lost the measurement flow during # the run, or a very short interval giving a very high bandwidth # measurement if avg_dur is None: avg_dur = dur if dur < avg_dur * 10.0 and dur > avg_dur / 10.0: raw_values.append({'dur': dur, 't': t, 'val': value}) result.append([t, value]) avg_dur = alpha * avg_dur + (1.0 - alpha) * dur try: # The THROUGHPUT key contains the mean value even for UDP_RR tests metadata['MEAN_VALUE'] = float(data_dict['THROUGHPUT']) if self.test == 'UDP_RR': metadata['MEAN_VALUE'] = transformers.rr_to_ms(metadata['MEAN_VALUE']) metadata['ELAPSED_TIME'] = float(data_dict.get('ELAPSED_TIME', 0)) metadata['UPSTREAM_TOS'] = int(data_dict.get('LOCAL_SOCKET_TOS', 0), base=0) metadata['DOWNSTREAM_TOS'] = int(data_dict.get( 'REMOTE_SOCKET_TOS', 0), base=0) if data_dict['PROTOCOL'] == 'TCP': metadata['TCP_MSS'] = int(data_dict.get('TRANSPORT_MSS', 0)) if data_dict['DIRECTION'] == 'Send': metadata['CONG_CONTROL'] = data_dict.get( 'LOCAL_CONG_CONTROL') metadata['TCP_RETRANSMIT'] = data_dict.get( 'LOCAL_TRANSPORT_RETRANS') metadata['SEND_SIZE'] = int(data_dict.get( 'LOCAL_SEND_SIZE', -1)) metadata['RECV_SIZE'] = int(data_dict.get( 'REMOTE_RECV_SIZE', -1)) metadata['BYTES_SENT'] = int(data_dict.get( 'LOCAL_BYTES_SENT', -1)) metadata['BYTES_RECVD'] = int(data_dict.get( 'REMOTE_BYTES_RECVD', -1)) metadata['DATA_TOS'] = metadata['UPSTREAM_TOS'] else: metadata['CONG_CONTROL'] = data_dict.get( 'REMOTE_CONG_CONTROL') metadata['TCP_RETRANSMIT'] = int(data_dict.get( 'REMOTE_TRANSPORT_RETRANS', 0)) metadata['SEND_SIZE'] = int(data_dict.get( 'REMOTE_SEND_SIZE', -1)) metadata['RECV_SIZE'] = int(data_dict.get( 'LOCAL_RECV_SIZE', -1)) metadata['BYTES_SENT'] = int(data_dict.get( 'REMOTE_BYTES_SENT', -1)) metadata['BYTES_RECVD'] = int(data_dict.get( 'LOCAL_BYTES_RECVD', -1)) metadata['DATA_TOS'] = metadata['DOWNSTREAM_TOS'] for k in data_dict.keys(): if k.startswith("tcpi"): metadata[k.upper()] = int(data_dict[k]) except KeyError as e: logger.warning("Missing required netperf metadata: %s", e.args[0]) except KeyError: pass # No valid data return result, raw_values, metadata def check(self): args = self.runner_args.copy() if self.test.lower() == 'omni': raise RunnerCheckError("Use of netperf 'omni' test is not supported") args.setdefault('ip_version', self.settings.IP_VERSION) args.setdefault('interval', self.settings.STEP_SIZE) args.setdefault('control_host', self.settings.CONTROL_HOST or self.host) args.setdefault('control_port', self.settings.NETPERF_CONTROL_PORT) args.setdefault('local_bind', self.settings.LOCAL_BIND[0] if self.settings.LOCAL_BIND else "") args.setdefault('control_local_bind', self.settings.CONTROL_LOCAL_BIND or args['local_bind']) args.setdefault('extra_args', "") args.setdefault('extra_test_args', "") args.setdefault('format', "") args.setdefault('marking', "") args.setdefault('cong_control', self.settings.TEST_PARAMETERS.get('tcp_cong_control', '')) args.setdefault('socket_timeout', self.settings.SOCKET_TIMEOUT) args.setdefault('send_size', self.settings.SEND_SIZE[0] if self.settings.SEND_SIZE else "") args.setdefault('test_payload', self.settings.TEST_PAYLOAD) if self.settings.SWAP_UPDOWN: if self.test == 'TCP_STREAM': self.test = 'TCP_MAERTS' elif self.test == 'TCP_MAERTS': self.test = 'TCP_STREAM' cache_key = self.remote_host or "" if cache_key in self.cache: netperf = self.cache[cache_key] else: nperf = util.which('netperf', fail=RunnerCheckError, remote_host=self.remote_host) # Try to figure out whether this version of netperf supports the -e # option for socket timeout on UDP_RR tests, and whether it has been # compiled with --enable-demo. Unfortunately, the --help message is # not very helpful for this, so the only way to find out is try to # invoke it and check for an error message. This has the side-effect # of having netperf attempt a connection to localhost, which can # stall, so we kill the process almost immediately. # should be enough time for netperf to output any error messages out, err = self.run_simple([nperf, '-l', '1', '-D', '-0.2', '--', '-e', '1'], kill=0.1) if "Demo Mode not configured" in out: raise RunnerCheckError("%s does not support demo mode." % nperf) if "invalid option -- '0'" in err: raise RunnerCheckError( "%s does not support accurate intermediate time reporting. " "You need netperf v2.6.0 or newer." % nperf) netperf = {'executable': nperf, '-e': False} if "netperf: invalid option -- 'e'" not in err: netperf['-e'] = True try: # If --test-payload option is specified, use data from that file # else use the default value /dev/urandom. fill_file = args['test_payload'] # Sanity check; is /dev/urandom or the custom file readable? If so, use it to # pre-fill netperf's buffers self.run_simple(['dd', 'if='+fill_file, 'of=/dev/null', 'bs=1', 'count=1'], errmsg="Err") netperf['buffer'] = '-F '+fill_file except RunnerCheckError: if(fill_file == '/dev/urandom'): netperf['buffer'] = '' else: # If the custom file is not readable, fail noisily raise RunnerCheckError("The specified test payload file does not exist or is not readable.") # cache the value keyed on the remote_host, since the outcome might # differ depending on which host we're running on self.cache[cache_key] = netperf args['binary'] = netperf['executable'] args['buffer'] = netperf['buffer'] args['output_vars'] = self.output_vars args['test'] = self.test args['host'] = self.host args['control_host'] = normalise_host(args['control_host']) # make sure all unset args are empty strings (and not e.g. None) for k, v in args.items(): if v is None: args[k] = "" if self.bytes: args['length'] = -self.bytes else: args['length'] = self.length self.watchdog_timer = self.length + self.delay + 10 if args['marking']: args['marking'] = self.parse_marking(args['marking'], "-Y {}", True) if args['cong_control']: args['cong_control'] = "-K {0}".format(args['cong_control']) for c in 'local_bind', 'control_local_bind': if args[c]: args[c] = "-L {0},{1}".format(args[c], args['ip_version']) if self.test == "UDP_RR" and netperf["-e"]: args['socket_timeout'] = "-e {0:d}".format(args['socket_timeout']) else: args['socket_timeout'] = "" if self.test in ("TCP_STREAM", "TCP_MAERTS"): args['format'] = "-f m" if args['send_size']: args['send_size'] = "-m {0} -M {0}".format(args['send_size']) self.units = 'Mbits/s' if args['test'] == 'TCP_STREAM' and self.settings.SOCKET_STATS: self.add_child(SsRunner, exclude_ports=(args['control_port'],), delay=self.delay, remote_host=None, host=self.remote_host or 'localhost', interval=args['interval'], length=self.length, target=self.host, ip_version=args['ip_version']) args['host'] = f"-H {args['host']}" elif self.test == 'UDP_RR': self.units = 'ms' if args['ip_version'] == 6: if args['control_host'] != args['host'] or \ args['control_local_bind'] != args['local_bind']: logger.warning("UDP_RR test doesn't support setting separate control host parameters for IPv6, ignoring") args['control_host'] = args['host'] args['control_local_bind'] = args['local_bind'] args['host'] = "" args['local_bind'] = "" else: args['host'] = f"-H {args['host']}" else: raise RunnerCheckError(f"Unknown netperf test type: {self.test}") self.command = "{binary} -P 0 -v 0 -D -{interval:.2f} -{ip_version} " \ "{marking} -H {control_host} -p {control_port} " \ "-t {test} -l {length:d} {buffer} {format} " \ "{control_local_bind} {extra_args} -- " \ "{socket_timeout} {send_size} {local_bind} {host} -k {output_vars} " \ "{cong_control} {extra_test_args}".format(**args) super(NetperfDemoRunner, self).check() class RegexpRunner(ProcessRunner): """Runner that matches each line to one or more regular expressions, returning the values from the first matched. The regular expressions must define symbolic groups 'time' and 'value'.""" regexes = [] metadata_regexes = [] transformers = {} def parse(self, output, error): result = [] raw_values = [] metadata = {} for line in itertools.chain(output, error): for regexp in self.regexes: match = regexp.match(line) if match: rw = match.groupdict() for k, v in rw.items(): try: rw[k] = float(v) if k in self.transformers: rw[k] = self.transformers[k](rw[k]) except ValueError: if k in self.transformers: rw[k] = self.transformers[k](rw[k]) raw_values.append(rw) if 'val' in rw: result.append([rw['t'], rw['val']]) break # only match one regexp per line for regexp in self.metadata_regexes: match = regexp.match(line) if match: for k, v in match.groupdict().items(): if k == 't': continue try: metadata[k] = float(v) if k in self.transformed_metadata and \ 'val' in self.transformers: metadata[k] = self.transformers['val']( metadata[k]) except ValueError: metadata[k] = v return result, raw_values, metadata class PingRunner(RegexpRunner): """Runner for ping/ping6 in timestamped (-D) mode.""" # Ping will change the comma separator for command line arguments based on # locale, which will break sub-second intervals. Override locale settings to # avoid this breaking stuff. _env = {"LC_ALL": "C", "LANG": "C"} # For some reason some versions of ping output icmp_req and others icmp_seq # for sequence numbers. regexes = [re.compile(r'^\[(?P<t>[0-9]+\.[0-9]+)\]' r'(?:.*icmp_.eq=(?P<seq>[0-9]+))?' r'.*time=(?P<val>[0-9]+(?:\.[0-9]+)?) ms$'), re.compile(r'^\[(?P<t>[0-9]+\.[0-9]+)\].*:' r'(?: \[(?P<seq>[0-9]+)\])?.*, ' r'(?P<val>[0-9]+(?:\.[0-9]+)?) ms \(.*\)$')] metadata_regexes = [re.compile(r'^.*min/avg/max(?:/mdev)? = ' r'(?P<MIN_VALUE>[0-9]+(?:\.[0-9]+)?)/' r'(?P<MEAN_VALUE>[0-9]+(?:\.[0-9]+)?)/' r'(?P<MAX_VALUE>[0-9]+(?:\.[0-9]+)?).*$')] transformed_metadata = ('MEAN_VALUE', 'MIN_VALUE', 'MAX_VALUE') def __init__(self, host, **kwargs): self.host = normalise_host(host) super(PingRunner, self).__init__(**kwargs) def check(self): args = self.runner_args.copy() args.setdefault('local_bind', (self.settings.LOCAL_BIND[0] if self.settings.LOCAL_BIND else None)) args.setdefault('ip_version', self.settings.IP_VERSION) args.setdefault('interval', self.settings.STEP_SIZE) args.setdefault('length', self.settings.TOTAL_LENGTH) self.command = self.find_binary(host=self.host, **args) super(PingRunner, self).check() def use_fping(self, fping, ip_version, interval, length, host, marking, local_bind): # Since there is not timeout parameter to fping, set a watchdog # timer to kill it in case it runs over time self.watchdog_timer = self.delay + length + max(1, int((self.delay + length) * 0.05)) return "{binary} {ipver} -D -p {interval:.0f} -c {count:.0f} " \ "-t {timeout} {marking} {local_bind} {host}".format( binary=fping, ipver='-6' if (ip_version == 6 and not fping.endswith("6")) else "", interval=interval * 1000, # fping expects interval in ms # since there's no timeout parameter for fping, # calculate a total number of pings to send count=length // interval + 1, # the timeout parameter is not the kind of timeout we # want, rather it is the time after which fping will # ignore late replies. We don't ever want to ignore late # replies, so set this to a really high value (twice the # full test length). This only affects fping v4.0+; # earlier versions will ignore -t when running in -c mode. timeout=length * 2000, marking=self.parse_marking(marking, "-O {0}"), local_bind=("-S {0}".format(local_bind) if local_bind else ""), host=host) def use_ping(self, ping, pingargs, interval, length, host, marking, local_bind): return "{binary} -n -D -i {interval:.2f} -w {length:d} {marking} " \ "{local_bind} {pingargs} {host}".format( binary=ping, interval=max(0.2, interval), length=length, marking=self.parse_marking(marking, "-Q {0}"), local_bind="-I {0}".format(local_bind) if local_bind else "", host=host, pingargs=" ".join(pingargs)) def find_binary(self, ip_version, interval, length, host, marking=None, local_bind=None, **kwargs): """Find a suitable ping executable, looking first for a compatible `fping`, then falling back to the `ping` binary. Binaries are checked for the required capabilities.""" key_fping = f"fping,{ip_version},{self.remote_host or ''}" key_ping = f"ping,{ip_version},{self.remote_host or ''}" if key_fping in self.cache: return self.use_fping(self.cache[key_fping], ip_version, interval, length, host, marking, local_bind) if key_ping in self.cache: ping, pingargs = self.cache[key_ping] return self.use_ping(ping, pingargs, interval, length, host, marking, local_bind) if ip_version == 6: suffix = "6" else: suffix = "" # Ping and fping can't handle hostnames for the -I parameter, so do a # lookup first. if local_bind: local_bind = util.lookup_host(local_bind, ip_version)[4][0] fping = util.which('fping' + suffix, remote_host=self.remote_host) or util.which('fping', remote_host=self.remote_host) ping = util.which('ping' + suffix, remote_host=self.remote_host) pingargs = [] if fping is not None: out, err = self.run_simple([fping, '-h']) # check for presence of timestamp option if ip_version == 6 and not fping.endswith("6") and \ "--ipv6" not in str(out): logger.warning("Found fping, but it does not appear to " "support IPv6. Not using.") elif "print timestamp before each output line" not in str(out): logger.warning("Found fping, but it does not appear to support " "timestamps. Not using.") elif "must run as root?" in str(err): logger.warning("Found fping, but it appears to be missing " "permissions (no SUID?). Not using.") else: out, err = self.run_simple([fping, '-D', '-c', '1', '-r', '0', '-t', '200', 'localhost', host, 'one.one.one.one']) res = self.parse_string(out) try: tdiff = abs(res[1][0]['t'] - time.time()) except (TypeError, IndexError): tdiff = None if tdiff is None: logger.warning("Found fping, but couldn't parse its output. " "Not using.") elif tdiff > 100: logger.warning("Found fping, but it outputs broken timestamps (off by %fs). " "Not using.", tdiff) else: self.cache[key_fping] = fping return self.use_fping(fping, ip_version, interval, length, host, marking, local_bind) if ping is None and ip_version == 6: # See if we have a combined ping binary (new versions of iputils) ping6 = util.which("ping", remote_host=self.remote_host) out, err = self.run_simple([ping6, '-h']) if '-6' in err: ping = ping6 pingargs = ['-6'] if ping is not None: # Try parsing the output of 'ping' and complain if no data is # returned from the parser. This should pick up e.g. the ping on OSX # not having a -D option and allow us to supply a better error # message. out, err = self.run_simple([ping, '-D', '-n', '-c', '1', 'localhost'] + pingargs) if not self.parse_string(out)[0]: raise RunnerCheckError( "Cannot parse output of the system ping binary ({ping}). " "Please install fping v3.5+.".format(ping=ping)) self.cache[key_ping] = (ping, pingargs) return self.use_ping(ping, pingargs, interval, length, host, marking, local_bind) raise RunnerCheckError("No suitable ping tool found.") class HttpGetterRunner(RegexpRunner): regexes = [re.compile( r'^\[(?P<t>[0-9]+\.[0-9]+)\].*in (?P<val>[0-9]+(?:\.[0-9]+)?) seconds.$')] metadata_regexes = [re.compile(r'^.*min/avg/max(?:/mdev)? = ' r'(?P<MIN_VALUE>[0-9]+(?:\.[0-9]+)?)/' r'(?P<MEAN_VALUE>[0-9]+(?:\.[0-9]+)?)/' r'(?P<MAX_VALUE>[0-9]+(?:\.[0-9]+)?).*$')] transformed_metadata = ('MEAN_VALUE', 'MIN_VALUE', 'MAX_VALUE') transformers = {'val': transformers.s_to_ms} def __init__(self, interval, length, workers=None, ip_version=None, dns_servers=None, url_file=None, timeout=None, **kwargs): super(HttpGetterRunner, self).__init__(**kwargs) self.interval = interval self.length = length self.workers = workers self.ip_version = ip_version self.dns_servers = dns_servers self.url_file = url_file self.timeout = timeout def check(self): http_getter = util.which('http-getter', fail=RunnerCheckError, remote_host=self.remote_host) if self.url_file: url_file = self.url_file elif self.settings.HTTP_GETTER_URLLIST: url_file = self.settings.HTTP_GETTER_URLLIST[0] else: url_file = "http://{}/filelist.txt".format(normalise_host(self.settings.HOST)) dns_servers = self.dns_servers or self.settings.HTTP_GETTER_DNS timeout = (self.timeout or self.settings.HTTP_GETTER_TIMEOUT or int(self.length * 1000)) workers = self.workers or self.settings.HTTP_GETTER_WORKERS ip_version = self.ip_version or self.settings.IP_VERSION self.command = "{binary} -i {interval} -l {length} -t {timeout} " \ "{dns} {workers} {ipv} {url_file}".format( binary=http_getter, interval=int(self.interval * 1000), length=int(self.length), timeout=timeout, dns="-d {}".format(dns_servers) if dns_servers else "", workers="-n {}".format(workers) if workers else "", ipv="-{}".format(ip_version) if ip_version else "", url_file=url_file) # Individual http requests can take a long time to time out, causing # http-getter to get stuck, so set a generous watchdog timer at 1.5 # times the duration to catch any stuck binaries self.watchdog_timer = self.delay + (self.length * 3) // 2 super(HttpGetterRunner, self).check() class DashJsRunner(RegexpRunner): silent_exit = True _regex_prefix = r"^\[[0-9]+:[0-9]+:(?P<t>[0-9]+/[0-9]+\.[0-9]+):" \ r"INFO:CONSOLE\([0-9]+\)\] " regexes = [ re.compile(_regex_prefix + r'"D,[0-9]+,(?:BC|IR),(?P<bitrate>[0-9]+),'), re.compile(_regex_prefix + r'"D,[0-9]+,AT,(?P<val>[0-9\.]+),'), re.compile(_regex_prefix + r'"D,[0-9]+,ST,(?P<stall_dur>[0-9\.]+),'), re.compile(_regex_prefix + r'"D,[0-9]+,BL,(?P<buflen>[0-9]+),')] metadata_regexes = [ re.compile(_regex_prefix + r'"D,[0-9]+,ID,(?P<INITIAL_DELAY>[0-9\.]+),')] def parse_chromium_timestamps(tstamp): sec, mil = tstamp.split(".") dt = datetime.strptime(sec, "%m%d/%H%M%S") dt = dt.replace(year=datetime.now().year) timestamp = time.mktime(dt.timetuple()) + float("0." + mil) return timestamp transformers = {'val': transformers.kbits_to_mbits, 'bitrate': transformers.bits_to_mbits, 't': parse_chromium_timestamps} def __init__(self, length, url, host='localhost', **kwargs): super(DashJsRunner, self).__init__(**kwargs) self.length = length self.url = url self.host = normalise_host(host) def parse(self, output, error=""): result, raw_values, metadata = super().parse(output, error) last_bitrate = None new_rv = [] # Since the bitrate output happens when the bitrate changes, we insert a # value just before the change so the output becomes abrupt staircase # changes instead of gradual transitions when plotting for rw in raw_values: if 'bitrate' in rw: if last_bitrate is not None: new_rv.append({'t': rw['t'], 'bitrate': last_bitrate}) last_bitrate = rw['bitrate'] new_rv.append(rw) # Also insert a value at the end with the last known bitrate if new_rv: new_rv.append({'t': new_rv[-1]['t'], 'bitrate': last_bitrate}) return result, new_rv, metadata def check(self): self.command = self.find_binary(self.length, self.url, self.host) super(DashJsRunner, self).check() def find_binary(self, length, url, host='localhost'): script = os.path.join(DATA_DIR, 'scripts', 'dash_client.sh') if not os.path.exists(script): raise RunnerCheckError("Cannot find dash_client.sh.") bash = util.which('bash') if not bash: raise RunnerCheckError("Dash client requires a Bash shell.") return "{bash} {script} -l {length} -u '{url}' -H {host}".format( bash=bash, script=script, length=length, url=url, host=host) class IperfCsvRunner(ProcessRunner): """Runner for iperf csv output (-y C), possibly with unix timestamp patch.""" transformed_metadata = ('MEAN_VALUE',) def __init__(self, host, interval, length, ip_version, local_bind=None, no_delay=False, udp=False, bw=None, pktsize=None, marking=None, **kwargs): self.host = normalise_host(host) self.interval = interval self.length = length self.ip_version = ip_version self.local_bind = local_bind self.no_delay = no_delay self.udp = udp self.bw = bw self.pktsize = pktsize self.marking = marking super(IperfCsvRunner, self).__init__(**kwargs) def parse(self, output, error): result = [] raw_values = [] metadata = {} dest = None last_res = last_rw = None for line in output: parts = line.split(",") if len(parts) < 9: continue # Skip the header line in recent versions of iperf2 if parts[0] == "time": continue # Newer versions of iperf2 have a timezone in front of the timestamp subpart = parts[0].split(":") if len(subpart) > 1: parts[0] = subpart[1] # Add the result of the last line to the array; this skips the last # entry, which is an average for the whole test, and is handled # below if last_res is not None: result.append(last_res) raw_values.append(last_rw) timestamp = parts[0] bandwidth = parts[8] if dest is None: dest = parts[3] # Newer versions of iperf2 emits sub-second timestamps if given the # --enhancedreports argument. Since we detect this in find_iperf, we # only support this format. try: sec, mil = timestamp.split(".") dt = datetime.strptime(sec, "%Y%m%d%H%M%S") timestamp = time.mktime(dt.timetuple()) + float(mil) / 1000 val = transformers.bits_to_mbits(float(bandwidth)) last_res = [timestamp, val] last_rw = {'t': timestamp, 'val': val} except ValueError: pass # Handle last entry # src and dest should be reversed if this was a reply from the # server. Track this for UDP where it may be missing. if parts[1] == dest or not self.udp: metadata['MEAN_VALUE'] = last_res[1] else: metadata['MEAN_VALUE'] = None return result, raw_values, metadata def check(self): local_bind = self.local_bind if not self.local_bind and self.settings.LOCAL_BIND: local_bind = self.settings.LOCAL_BIND[0] self.command = self.find_binary(self.host, self.interval, self.length, self.ip_version, local_bind=local_bind, no_delay=self.no_delay, udp=self.udp, bw=self.bw, pktsize=self.pktsize, marking=self.marking) super(IperfCsvRunner, self).check() def find_binary(self, host, interval, length, ip_version, local_bind=None, no_delay=False, udp=False, bw=None, pktsize=None, marking=None): iperf = util.which('iperf', remote_host=self.remote_host) if iperf is not None: out, err = self.run_simple([iperf, '-h']) # The iperf flag --enhancedreports was deprecated in 2.0.14a and replaced # by --enhanced enhanced = None if "--enhanced" in out or err: enhanced = "--enhanced" elif "--enhancedreports" in err: enhanced = "--enhancedreports" if enhanced: if udp: udp_args = "--udp --bandwidth {}".format(bw if bw else "100M") if pktsize: udp_args = "{} --len {}".format(udp_args, pktsize) else: udp_args = "" return "{binary} {enhanced} --reportstyle C --format m " \ "--client {host} --time {length} --interval {interval} " \ "{local_bind} {no_delay} {udp} {marking} {ip6}".format( host=host, binary=iperf, enhanced=enhanced, length=length, interval=interval, # --help output is wrong ip6="--ipv6_domain" if ip_version == 6 else "", local_bind="--bind {0}".format( local_bind) if local_bind else "", no_delay="--nodelay" if no_delay else "", marking=self.parse_marking(marking, "--tos {}"), udp=udp_args) out, err = self.run_simple([iperf, '-v']) logger.warning( "Found iperf binary (%s), but it does not have " "either an --enhanced nor --enhancedreports option. Not using.", err.strip()) raise RunnerCheckError("No suitable Iperf binary found.") class IrttRunner(ProcessRunner): _irtt = {} def __init__(self, host, length, interval=None, ip_version=None, local_bind=None, marking=None, multi_results=False, sample_freq=0, data_size=None, **kwargs): self.host = normalise_host(host, bracket_v6=True) self.interval = interval self.length = length self.ip_version = ip_version self.local_bind = local_bind self.marking = marking self.multi_results = multi_results self.sample_freq = sample_freq self.data_size = data_size super(IrttRunner, self).__init__(**kwargs) # irtt outputs all durations in nanoseconds def _to_ms(self, value): return value / 10**6 def _to_s(self, value): return value / 10**9 def parse(self, output, error): result = {'rtt': [], 'delay': [], 'jitter': [], 'loss': []} raw_values = [] metadata = {} try: data = json.load(output) except ValueError as e: logger.warning("Unable to parse irtt JSON output: %s", e) return metadata['RTT_MEAN'] = self._to_ms(data['stats']['rtt']['mean']) metadata['RTT_MEDIAN'] = self._to_ms(data['stats']['rtt']['median']) metadata['RTT_MAX'] = self._to_ms(data['stats']['rtt']['max']) metadata['RTT_MIN'] = self._to_ms(data['stats']['rtt']['min']) metadata['OWD_UP_MEAN'] = self._to_ms( data['stats']['send_delay']['mean']) metadata['OWD_DOWN_MEAN'] = self._to_ms( data['stats']['receive_delay']['mean']) metadata['IPDV_MEAN'] = self._to_ms( data['stats']['ipdv_round_trip']['mean']) metadata['IPDV_UP_MEAN'] = self._to_ms( data['stats']['ipdv_send']['mean']) metadata['IPDV_DOWN_MEAN'] = self._to_ms( data['stats']['ipdv_receive']['mean']) metadata['MEAN_VALUE'] = metadata['RTT_MEAN'] metadata['PACKETS_SENT'] = data['stats']['packets_sent'] metadata['PACKETS_RECEIVED'] = data['stats']['packets_received'] metadata['PACKET_LOSS_RATE'] = (data['stats']['packet_loss_percent'] / 100.0) metadata['SEND_RATE'] = data['stats']['send_rate']['bps'] / 10**6 metadata['RECEIVE_RATE'] = (data['stats']['receive_rate']['bps'] / 10**6) next_sample = 0 lost = 0 for pkt in data['round_trips']: try: dp = {'seq': pkt['seqno']} if pkt['lost'] == 'false': dp['t'] = self._to_s( pkt['timestamps']['client']['receive']['wall']) dp['val'] = self._to_ms(pkt['delay']['rtt']) dp['owd_up'] = self._to_ms(pkt['delay']['send']) dp['owd_down'] = self._to_ms(pkt['delay']['receive']) try: dp['ipdv_up'] = self._to_ms(pkt['ipdv']['send']) dp['ipdv_down'] = self._to_ms(pkt['ipdv']['receive']) dp['ipdv'] = self._to_ms(pkt['ipdv']['rtt']) except KeyError: pass if dp['t'] >= next_sample: result['rtt'].append([dp['t'], dp['val']]) # delay and jitter are for compatibility with the D-ITG # VoIP mode result['delay'].append([dp['t'], dp['owd_up']]) result['jitter'].append([dp['t'], abs(dp.get('ipdv_up', 0))]) result['loss'].append([dp['t'], lost]) lost = 0 next_sample = dp['t'] + self.sample_freq else: lost_dir = pkt['lost'].replace('true_', '') dp['lost'] = True dp['lost_dir'] = lost_dir or None dp['t'] = self._to_s( pkt['timestamps']['client']['send']['wall']) lost += 1 raw_values.append(dp) except KeyError as e: logger.warning("Missing expected key in irtt output: %s", e, extra={'output': str(pkt)}) continue if not self.multi_results: result = result['rtt'] return result, raw_values, metadata def check(self): if self.local_bind: local_bind = "--local={}".format(self.local_bind) elif self.settings.LOCAL_BIND: local_bind = "--local={}".format(self.settings.LOCAL_BIND[0]) else: local_bind = "" ip_version = self.ip_version or self.settings.IP_VERSION if ip_version is not None: ip_version = "-{}".format(ip_version) else: ip_version = "" if not self._irtt: irtt = util.which('irtt', fail=RunnerCheckError, remote_host=self.remote_host) out, err = self.run_simple([irtt, 'help', 'client']) if re.search(r'--[a-z]', out) is None: raise RunnerCheckError("%s is too old to support gnu style args. " "Please upgrade to irtt v0.9+." % irtt) args = [irtt, 'client', '-n', '-Q', '--timeouts=200ms,300ms,400ms'] if local_bind: args.append(local_bind) if ip_version: args.append(ip_version) args.append(self.host) out, err = self.run_simple(args, errmsg="Irtt connection check failed: {err}") self._irtt['binary'] = irtt else: irtt = self._irtt['binary'] if self.data_size is not None: data_size = "-l {}".format(self.data_size) else: data_size = "" if self.settings.IRTT_INTERVAL: interval = "{}ms".format(self.settings.IRTT_INTERVAL) else: interval = "{}s".format(self.interval or self.settings.STEP_SIZE) self.command = "{binary} client -o - --fill=rand -Q " \ "-d {length}s -i {interval} {ip_version} {marking} " \ "{local_bind} {data_size} {host}".format( binary=irtt, length=self.length, interval=interval, host=self.host, ip_version=ip_version, local_bind=local_bind, data_size=data_size, marking=self.parse_marking(self.marking, "--dscp={}")) self.units = 'ms' super(IrttRunner, self).check() class UdpRttRunner(DelegatingRunner): def check(self): try: self.add_child(IrttRunner, **self.runner_args) self.debug("Using irtt") except RunnerCheckError as e: self.debug("Cannot use irtt runner (%s). Using netperf UDP_RR", e) self.add_child(NetperfDemoRunner, **dict(self.runner_args, test='UDP_RR')) super(UdpRttRunner, self).check() class VoipRunner(DelegatingRunner): def check(self): try: self.add_child(IrttRunner, **dict(self.runner_args, multi_results=True, sample_freq=self.runner_args['interval'], # interval and data size to emulate G711 VoIP # ref.: https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=SIP_CALL_RTP_G711 interval=0.02, data_size=172)) self.debug("Using irtt") except RunnerCheckError as e: self.debug("Cannot use irtt runner (%s). Using D-ITG", e) self.add_child(DitgRunner, **dict(self.runner_args, test_args='VoIP')) super(VoipRunner, self).check() class SsRunner(ProcessRunner): """Runner for iterated `ss -t -i -p`. Depends on same partitial output separationa and time stamping as TcRunner.""" # Keep track of runners to avoid duplicates (relies on this being a class # variable, and so the same dictionary instance across all instances of the # class). _duplicate_map = {} ip_v4_addr_sub_re = r"([0-9]{1,3}\.){3}[0-9]{1,3}(:\d+)" # ref.: to commented, untinkered version: ISBN 978-0-596-52068-7 ip_v6_addr_sub_re = r"\[?(?:(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}|" \ r"(?=(?:[A-F0-9]{0,4}:){0,7}[A-F0-9]{0,4})" \ r"(([0-9A-F]{1,4}:){1,7}|:)((:[0-9A-F]{1,4})" \ r"{1,7}|:))\]?(:\d+)" time_re = re.compile(r"^Time: (?P<timestamp>\d+\.\d+)", re.MULTILINE) pid_re = re.compile(r"pid=(?P<pid>\d+)", re.MULTILINE) ports_ipv4_re = re.compile(r"" + "(?P<src_p>" + ip_v4_addr_sub_re + ")" + r"\s+" + "(?P<dst_p>" + ip_v4_addr_sub_re + ")") ports_ipv6_re = re.compile(r"" + "(?P<src_p>" + ip_v6_addr_sub_re + ")" + r"\s+" + "(?P<dst_p>" + ip_v6_addr_sub_re + ")", re.IGNORECASE) ss_header_re = re.compile(r"" + r"State\s+Recv-Q\s+Send-Q\s+Local") data_res = [re.compile(r"cwnd:(?P<cwnd>\d+)", re.MULTILINE), re.compile(r"rtt:(?P<rtt>\d+\.\d+)/(?P<rtt_var>\d+\.\d+)", re.MULTILINE), re.compile(r"pacing_rate (?P<pacing_rate>\d+(\.\d+)?[MK]?bps)", re.MULTILINE), re.compile(r"delivery_rate (?P<delivery_rate>\d+(\.\d+)?[MK]?bps)", re.MULTILINE), re.compile(r"bbr:\(bw:(?P<bbr_bw>\d+(\.\d+)?[MK]?bps)," r"mrtt:(?P<bbr_mrtt>\d+\.\d+)," r"pacing_gain:(?P<bbr_pacing_gain>\d+(\.\d+)?)," r"cwnd_gain:(?P<bbr_cwnd_gain>\d+(\.\d+)?)\)", re.MULTILINE)] src_p = [] dst_p = [] # ref.: upstream ss ss_states = ["UNKNOWN", "ESTAB", "SYN-SENT", "SYN-RECV", "FIN-WAIT-1", "FIN-WAIT-2", "TIME-WAIT", "UNCONN", "CLOSE-WAIT", "LAST-ACK", "LISTEN", "CLOSING"] ss_states_re = re.compile(r"|".join(ss_states)) silent = True def __init__(self, exclude_ports, ip_version, host, interval, length, target, **kwargs): self.exclude_ports = exclude_ports self.ip_version = ip_version self.host = normalise_host(host) self.interval = interval self.length = length self.target = target self.is_dup = False self._dup_key = None self._parsed_parts = None self._dup_runner = None super(SsRunner, self).__init__(**kwargs) def fork(self): if self._dup_runner is None: self.debug("Active runner for dup key %s: forking", self._dup_key) return super().fork() else: self.debug("Duplicate for dup key %s. Not forking", self._dup_key) return 0 def run(self): if self._dup_runner is None: super(SsRunner, self).run() del self._duplicate_map[self._dup_key] return self._dup_runner.join() def filter_np_parent(self, part): parsed_parts = [] sub_parts = self.ss_states_re.split(part) sub_parts = [sp for sp in sub_parts if sp.strip() and not self.ss_header_re.search(sp)] for sp in sub_parts: # Filter out stats from netserver when it's run along with ss if "netserver" in sp: continue pid = self.pid_re.search(sp) if None is pid: continue pid_str = pid.group('pid') f_ports = self.ports_ipv4_re.search(sp) if None is f_ports: f_ports = self.ports_ipv6_re.search(sp) if None is f_ports: raise ParseError() dst_p = int(f_ports.group('dst_p').split(":")[-1]) parsed_parts.append({'dst_p': dst_p, 'sp': sp, 'pid': pid_str}) return parsed_parts def parse_val(self, val): if val.endswith("Mbps"): return float(val[:-4]) if val.endswith("Kbps"): return float(val[:-4]) / 1000 if val.endswith("bps"): return float(val[:-3]) / 10**6 return float(val) def parse_subpart(self, sub_part): vals = {} for r in self.data_res: m = r.search(sub_part) if m is not None: d = m.groupdict() for k, v in d.items(): try: vals['tcp_%s' % k] = self.parse_val(v) except ValueError: pass return vals def parse_part(self, part): sub_parts = self.filter_np_parent(part) timestamp = self.time_re.search(part) if timestamp is None: raise ParseError() timestamp = float(timestamp.group('timestamp')) vals = [] for sp in sub_parts: v = self.parse_subpart(sp['sp']) if not v: continue v.update({'t': timestamp, 'dst_p': sp['dst_p'], 'pid': sp['pid']}) vals.append(v) return vals def do_parse(self, pool): if not self.is_dup: return super().do_parse(pool) return [] def parse(self, output, error): parsed_parts = [] for part in self.split_stream(output): try: parsed_parts.extend(self.parse_part(part)) except ParseError: pass # we return an empty result and store the parsed data in metadata, so we # can retrieve it later return [], [], {'parsed_parts': parsed_parts} @property def parsed_parts(self): if self.is_dup: return self._dup_runner.parsed_parts if self._parsed_parts is None: self._parsed_parts = self.metadata.pop('parsed_parts', []) return self._parsed_parts def post_parse(self): par_pid = str(self._parent.pid) results = {} raw_values = [] for res_dict in self.parsed_parts: if res_dict['pid'] != par_pid or res_dict['dst_p'] in self.exclude_ports: continue t = res_dict['t'] for k, v in res_dict.items(): if k in ('t', 'pid', 'dst_p'): continue if k not in results: results[k] = [[t, v]] else: results[k].append([t, v]) rw = res_dict.copy() del rw['pid'] del rw['dst_p'] raw_values.append(rw) if not results: extra = {'runner': self} if not self.is_dup else None logger.warning("%s%s: Found no results for pid %s", self.__class__.__name__, "(dup)" if self.is_dup else "", par_pid, extra=extra) self.result = results self.raw_values = raw_values def check(self): dup_key = (self.host, self.interval, self.length, self.target, self.ip_version, tuple(self.exclude_ports)) if dup_key in self._duplicate_map: self.debug("Found duplicate runner (%s), reusing output", dup_key) self._dup_runner = self._duplicate_map[dup_key] self.is_dup = True self.command = "%s (duplicate)" % self._dup_runner.command else: self.debug("Starting new runner (dup key %s)", dup_key) self._dup_runner = None self._duplicate_map[dup_key] = self self.command = self.find_binary(self.ip_version, self.host, self.interval, self.length, self.target) self.watchdog_timer = self.delay + self.length + 5 self._dup_key = dup_key super(SsRunner, self).check() def find_binary(self, ip_version, host, interval, length, target): script = os.path.join(DATA_DIR, 'scripts', 'ss_iterate.sh') if not os.path.exists(script): raise RunnerCheckError("Cannot find ss_iterate.sh.") bash = util.which('bash') if not bash: raise RunnerCheckError("Socket stats requires a Bash shell.") resol_target = util.lookup_host(target, ip_version)[4][0] if ip_version == 6: resol_target = "[" + str(resol_target) + "]" filt = "" for p in self.exclude_ports: filt = "{} and dport != {}".format(filt, p) return "{bash} {script} -I {interval:.2f} " \ "-l {length} -H {host} -t '{target}' -f '{filt}'".format( bash=bash, script=script, interval=interval, length=length, host=host, target=resol_target, filt=filt) class TcRunner(ProcessRunner): """Runner for iterated `tc -s qdisc`. Expects iterations to be separated by '\n---\n and a timestamp to be present in the form 'Time: xxxxxx.xxx' (e.g. the output of `date '+Time: %s.%N'`).""" time_re = re.compile(r"^Time: (?P<timestamp>\d+\.\d+)", re.MULTILINE) split_re = re.compile(r"^qdisc ", re.MULTILINE) qdisc_res = [ re.compile(r"Sent (?P<sent_bytes>\d+) bytes (?P<sent_pkts>\d+) pkt " r"\(dropped (?P<dropped>\d+), " r"overlimits (?P<overlimits>\d+) " r"requeues (?P<requeues>\d+)\)"), re.compile(r"backlog (?P<backlog_bytes>\d+)b " r"(?P<backlog_pkts>\d+)p " r"requeues (?P<backlog_requeues>\d+)"), # codel re.compile(r"count (?P<count>\d+) " r"lastcount (?P<lastcount>\d+) " r"ldelay (?P<delay>[0-9\.]+[mu]?s) " r"(?P<dropping>dropping)? ?" r"drop_next (?P<drop_next>-?[0-9\.]+[mu]?s)"), re.compile(r"maxpacket (?P<maxpacket>\d+) " r"ecn_mark (?P<ecn_mark>\d+) " r"drop_overlimit (?P<drop_overlimit>\d+)"), # fq_codel re.compile(r"maxpacket (?P<maxpacket>\d+) " r"drop_overlimit (?P<drop_overlimit>\d+) " r"new_flow_count (?P<new_flow_count>\d+) " r"ecn_mark (?P<ecn_mark>\d+)"), re.compile(r"new_flows_len (?P<new_flows_len>\d+) " r"old_flows_len (?P<old_flows_len>\d+)"), # pie re.compile(r"prob (?P<prob>[0-9\.]+) " r"delay (?P<delay>[0-9\.]+[mu]?s) " r"avg_dq_rate (?P<avg_dq_rate>\d+)"), re.compile(r"pkts_in (?P<pkts_in>\d+) " r"overlimit (?P<overlimit_pie>\d+) " r"dropped (?P<dropped_pie>\d+) " r"maxq (?P<maxq>\d+) " r"ecn_mark (?P<ecn_mark>\d+)"), # fq_pie re.compile(r"pkts_in (?P<pkts_in>\d+) " r"overlimit (?P<overlimit_pie>\d+) " r"overmemory (?P<overmemory>\d+) " r"dropped (?P<dropped_pie>\d+) " r"ecn_mark (?P<ecn_mark>\d+)"), re.compile(r"new_flow_count (?P<new_flow_count>\d+) " r"new_flows_len (?P<new_flows_len>\d+) " r"old_flows_len (?P<old_flows_len>\d+) " r"memory_used (?P<memory_used>\d+)"), ] cake_tin_re = r"(Tin \d|Bulk|Best Effort|Video|Voice)" cake_alltins_re = re.compile(r"(\s*" + cake_tin_re + r")+") cake_1tin_re = re.compile(cake_tin_re) cake_keys = ["av_delay", "sp_delay", "pkts", "bytes", "drops", "marks", "sp_flows", "bk_flows", "max_len"] cumulative_keys = ["dropped", "ecn_mark"] def __init__(self, interface, interval, length, host='localhost', **kwargs): self.interface = interface self.interval = interval self.length = length self.host = normalise_host(host) super(TcRunner, self).__init__(**kwargs) # Normalise time values (seconds, ms, us) to milliseconds and bit values # (bit, Kbit, Mbit) to bits def parse_val(self, v): if v is None: return None elif v.endswith("us"): return float(v[:-2]) / 1000 elif v.endswith("ms"): return float(v[:-2]) elif v.endswith("s"): return float(v[:-1]) * 1000 elif v.endswith("Kbit"): return float(v[:-4]) * 1000 elif v.endswith("Mbit"): return float(v[:-4]) * 10**6 elif v.endswith("bit"): return float(v[:-3]) else: try: return float(v) except ValueError: return v def parse(self, output, error): results = {} raw_values = [] metadata = {} last_vals = {} for part in self.split_stream(output): timestamp = self.time_re.search(part) if timestamp is None: continue timestamp = float(timestamp.group('timestamp')) # Split out individual qdisc entries (in case there are more than # one). If so, discard the root qdisc and sum the rest. qdiscs = [i for i in self.split_re.split(part) if not i.startswith("ingress")] if len(qdiscs) > 2: part = "qdisc ".join([i for i in qdiscs if 'root' not in i]) matches = {} for r in self.qdisc_res: m = r.search(part) # Keep searching from the end of the last match until no more # matches are found; this should find all qdisc outputs in case # there are several qdiscs installed on the interface. The # values for the qdiscs are summed for the result (discarding # what should be the root qdisc as per above). while m is not None: for k, v in list(m.groupdict().items()): v = self.parse_val(v) if k not in matches or not isinstance(v, float): matches[k] = v else: matches[k] += v m = r.search(part, m.end(0)) m = self.cake_alltins_re.search(part) if m: tins = self.cake_1tin_re.findall(m.group(0)) start = m.end() for key in self.cake_keys: m = re.search( r"^ %s(:?\s*([0-9\.kmbitus]+)){%d}\s*$" % (key, len(tins)), part[start:], re.IGNORECASE | re.MULTILINE) if m: k = "cake_%s" % key matches[k] = dict( zip(tins, map(self.parse_val, m.group(0).split()[1:]))) # The cake stats, being multi-dimensional, is not actually plottable # yet. For now, add in an 'ecn_marks' key that is the sum of all # cake tins, for comparability with other qdiscs if "cake_marks" in matches and "ecn_mark" not in matches: matches['ecn_mark'] = sum(matches['cake_marks'].values()) # Transform cumulative keys into events per interval for k in self.cumulative_keys: if k not in matches: continue v = matches[k] matches[k] = v - last_vals[k] if k in last_vals else 0.0 last_vals[k] = v for k, v in matches.items(): if not isinstance(v, float): continue if k not in results: results[k] = [[timestamp, v]] else: results[k].append([timestamp, v]) matches['t'] = timestamp raw_values.append(matches) return results, raw_values, metadata def check(self): self.command = self.find_binary(self.interface, self.interval, self.length, self.host) super(TcRunner, self).check() def find_binary(self, interface, interval, length, host='localhost'): script = os.path.join(DATA_DIR, 'scripts', 'tc_iterate.sh') if not os.path.exists(script): raise RunnerCheckError("Cannot find tc_iterate.sh.") bash = util.which('bash') if not bash: raise RunnerCheckError("TC stats requires a Bash shell.") if interface is None: logger.warning( "Warning: No interface given for tc runner. " "Defaulting to 'eth0'.") interface = 'eth0' return "{bash} {script} -i {interface} -I {interval:.2f} " \ "-c {count:.0f} -l {length} -H {host}".format( bash=bash, script=script, interface=interface, interval=interval, count=length // interval + 1, length=length, host=host) class CpuStatsRunner(ProcessRunner): """Runner for getting CPU usage stats from /proc/stat. Expects iterations to be separated by '\n---\n and a timestamp to be present in the form 'Time: xxxxxx.xxx' (e.g. the output of `date '+Time: %s.%N'`). The first line is the total CPU load, and the following lines are the load of each core. """ time_re = re.compile(r"^Time: (?P<timestamp>\d+\.\d+)", re.MULTILINE) value_re = re.compile(r"^cpu(?P<core_nr>\d+)?: (?P<load>\d+\.\d+)", re.MULTILINE) def __init__(self, interval, length, host='localhost', **kwargs): self.interval = interval self.length = length self.host = normalise_host(host) super(CpuStatsRunner, self).__init__(**kwargs) def parse(self, output, error): results = {} raw_values = [] metadata = {} for part in self.split_stream(output): timestamp = self.time_re.search(part) if timestamp is None: continue timestamp = float(timestamp.group('timestamp')) value = self.value_re.search(part) if value is None: continue matches = {} for m in self.value_re.finditer(part): core_nr = m.group("core_nr") load = m.group("load") k = f'cpu{core_nr}' if core_nr is not None else 'load' v = float(load) if k not in matches: matches[k] = v else: matches[k] += v for k, v in matches.items(): if not isinstance(v, float): continue if k not in results: results[k] = [[timestamp, v]] else: results[k].append([timestamp, v]) matches['t'] = timestamp raw_values.append(matches) return results, raw_values, metadata def check(self): self.command = self.find_binary(self.interval, self.length, self.host) super(CpuStatsRunner, self).check() def find_binary(self, interval, length, host='localhost'): script = os.path.join(DATA_DIR, 'scripts', 'stat_iterate.sh') if not os.path.exists(script): raise RunnerCheckError("Cannot find stat_iterate.sh.") bash = util.which('bash') if not bash: raise RunnerCheckError("CPU stats requires a Bash shell.") return "{bash} {script} -I {interval:.2f} " \ "-c {count:.0f} -H {host}".format( bash=bash, script=script, interval=interval, count=length // interval + 1, host=host) class WifiStatsRunner(ProcessRunner): """Runner for getting WiFi debug stats from /sys/kernel/debug. Expects iterations to be separated by '\n---\n and a timestamp to be present in the form 'Time: xxxxxx.xxx' (e.g. the output of `date '+Time: %s.%N'`). """ time_re = re.compile(r"^Time: (?P<timestamp>\d+\.\d+)", re.MULTILINE) station_re = re.compile( r"^Station: (?P<mac>(?:[0-9a-f]{2}:){5}[0-9a-f]{2})\n", re.MULTILINE) airtime_re = re.compile( r"^Airtime:\nRX: (?P<rx>\d+) us\nTX: (?P<tx>\d+) us", re.MULTILINE) def __init__(self, interface, interval, length, host='localhost', stations=None, **kwargs): self.interface = interface self.interval = interval self.length = length self.host = normalise_host(host) self.stations = stations or [] if self.stations in (["all"], ["ALL"]): self.stations = [] # disabled as it doesn't work properly yet self.all_stations = False super(WifiStatsRunner, self).__init__(**kwargs) def parse(self, output, error): results = {} raw_values = [] metadata = {} last_airtime = {} for part in self.split_stream(output): matches = {} timestamp = self.time_re.search(part) if timestamp is None: continue timestamp = float(timestamp.group('timestamp')) # Split by station regex: First entry is everything before the # per-station stats, the rest is a pair of (<station mac>, contents). station_parts = self.station_re.split(part)[1:] stations = {} for s, v in zip(station_parts[::2], station_parts[1::2]): if s not in self.stations: if self.all_stations: self.stations.append(s) else: continue sv = {} airtime = self.airtime_re.search(v) if airtime is not None: rx = float(airtime.group('rx')) tx = float(airtime.group('tx')) if s not in last_airtime: last_airtime[s] = {'rx': rx, 'tx': tx} sv['airtime_rx'] = sv['airtime_tx'] = 0.0 else: sv['airtime_rx'] = rx - last_airtime[s]['rx'] sv['airtime_tx'] = tx - last_airtime[s]['tx'] last_airtime[s]['rx'] = rx last_airtime[s]['tx'] = tx rcs = v.find("RC stats:\n") # For now, just parse the average aggregation size, which is the # last field of each csv line output. if rcs > -1: nl = v.find("\n", rcs + 10) if nl > -1: line = v[rcs + 10:nl] sv['avg_aggr_size'] = float(line.split(",")[-1]) stations[s] = sv # Flatten for results array for k, v in sv.items(): if not isinstance(v, float): continue rk = "::".join([k, s]) if rk not in results: results[rk] = [[timestamp, v]] else: results[rk].append([timestamp, v]) for k, v in matches.items(): if not isinstance(v, float): continue if k not in results: results[k] = [[timestamp, v]] else: results[k].append([timestamp, v]) matches['t'] = timestamp matches['stations'] = stations raw_values.append(matches) if self.all_stations: metadata['test_parameters'] = {'wifi_stats_stations': ",".join(self.stations)} return results, raw_values, metadata def post_parse(self): self.test_parameters = self.metadata.pop('test_parameters', {}) super().post_parse() def check(self): self.command = self.find_binary(self.interface, self.interval, self.length, self.host) super(WifiStatsRunner, self).check() def find_binary(self, interface, interval, length, host='localhost'): script = os.path.join(DATA_DIR, 'scripts', 'wifistats_iterate.sh') if not os.path.exists(script): raise RunnerCheckError("Cannot find wifistats_iterate.sh.") bash = util.which('bash') if not bash: raise RunnerCheckError("WiFi stats requires a Bash shell.") return "{bash} {script} -i {interface} -I {interval:.2f} " \ "-c {count:.0f} -H {host}".format( bash=bash, script=script, interface=interface, interval=interval, count=length // interval + 1, host=host) class NetstatRunner(ProcessRunner): """Runner for getting TCP stats from /proc/net/netstat. Expects iterations to be separated by '\n---\n and a timestamp to be present in the form 'Time: xxxxxx.xxx' (e.g. the output of `date '+Time: %s.%N'`). """ time_re = re.compile(r"^Time: (?P<timestamp>\d+\.\d+)", re.MULTILINE) tcpext_header_re = re.compile( r"^TcpExt: (?P<header>[A-Z][0-9a-zA-Z ]+)\n", re.MULTILINE) tcpext_data_re = re.compile(r"^TcpExt: (?P<data>[0-9 ]+)\n", re.MULTILINE) def __init__(self, interval, length, host='localhost', **kwargs): self.interval = interval self.length = length self.host = normalise_host(host) super(NetstatRunner, self).__init__(**kwargs) def parse(self, output, error): results = {} raw_values = [] metadata = {} for part in self.split_stream(output): matches = {} timestamp = self.time_re.search(part) if timestamp is None: continue timestamp = float(timestamp.group('timestamp')) hdr = self.tcpext_header_re.search(part) data = self.tcpext_data_re.search(part) if hdr is None or data is None: continue h = hdr.group("header").split() d = data.group("data").split() if len(h) != len(d): continue matches = dict(zip(h, [float(i) for i in d])) for k, v in matches.items(): if not isinstance(v, float): continue if k not in results: results[k] = [[timestamp, v]] else: results[k].append([timestamp, v]) matches['t'] = timestamp raw_values.append(matches) return results, raw_values, metadata def check(self): self.command = self.find_binary(self.interval, self.length, self.host) super(NetstatRunner, self).check() def find_binary(self, interval, length, host='localhost'): script = os.path.join(DATA_DIR, 'scripts', 'netstat_iterate.sh') if not os.path.exists(script): raise RunnerCheckError("Cannot find netstat_iterate.sh.") bash = util.which('bash') if not bash: raise RunnerCheckError("Capturing netstat requires a Bash shell.") return "{bash} {script} -I {interval:.2f} -c {count:.0f} " \ "-H {host}".format( bash=bash, script=script, interval=interval, count=length // interval + 1, host=host) class NullRunner(RunnerBase): pass class ComputingRunner(RunnerBase): command = "Computed" supported_meta = ['MEAN_VALUE'] copied_meta = ['UNITS'] def __init__(self, apply_to=None, post=False, **kwargs): super(ComputingRunner, self).__init__(**kwargs) if apply_to is None: self.keys = [] else: self.keys = apply_to self.metadata['COMPUTED_LATE'] = post def compute_result(self, res): if not self.keys: return res new_res = [] keys = Glob.expand_list(self.keys, res.series_names, [self.runner_name]) for r in res.zipped(keys): values = [v for v in r[1:] if v is not None] if not values: new_res.append(None) else: new_res.append(self.compute(values)) meta = res.meta('SERIES_META') if 'SERIES_META' in res.meta() else {} meta[self.runner_name] = self.metadata for mk in self.supported_meta: vals = [] for k in keys: if k in meta and mk in meta[k] and meta[k][mk] is not None: vals.append(meta[k][mk]) if vals: try: meta[self.runner_name][mk] = self.compute(vals) except TypeError: meta[self.runner_name][mk] = None for mk in self.copied_meta: vals = [] for k in keys: if k in meta and mk in meta[k]: vals.append(meta[k][mk]) if vals: # If all the source values of the copied metadata are the same, # just use that value, otherwise include all of them. meta[self.runner_name][mk] = vals if len(set(vals)) > 1 else vals[0] res.add_result(self.runner_name, new_res) return res def compute(self, values): """Compute the function on the values this runner should be applied to. Default implementation returns None.""" return None class AverageRunner(ComputingRunner): command = "Average (computed)" def compute(self, values): return math.fsum(values) / len(values) class SmoothAverageRunner(ComputingRunner): command = "Smooth average (computed)" def __init__(self, smooth_steps=5, **kwargs): super(SmoothAverageRunner, self).__init__(**kwargs) self._smooth_steps = smooth_steps self._avg_values = [] def compute(self, values): self._avg_values.append(math.fsum(values) / len(values)) while len(self._avg_values) > self._smooth_steps: self._avg_values.pop(0) return math.fsum(self._avg_values) / len(self._avg_values) class SumRunner(ComputingRunner): command = "Sum (computed)" def compute(self, values): return math.fsum(values) class DiffMinRunner(ComputingRunner): command = "Diff from min (computed)" def compute_result(self, res): if not self.keys: return res key = self.keys[0] data = [i for i in res[key] if i is not None] if not data: res.add_result(self.runner_name, [None] * len(res[key])) else: min_val = min(data) res.add_result( self.runner_name, [i - min_val if i is not None else None for i in res[key]]) return res class FairnessRunner(ComputingRunner): command = "Fairness (computed)" def compute(self, values): if not len(values): return None valsum = math.fsum([x**2 for x in values]) if not valsum: return None return math.fsum(values)**2 / (len(values) * valsum) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/scripts/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0015432�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/scripts/dash_client.sh������������������������������������������������������������0000775�0000000�0000000�00000001654�14670056262�0020254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash set -o nounset set -o errexit length=60 host=localhost url= while getopts "l:u:H:" opt; do case $opt in l) length="$OPTARG" ;; H) host="$OPTARG" ;; u) url="$OPTARG" ;; *) exit 1;; esac done if [ -z "$url" ] ; then echo "missing URL" >&2 ; exit 1 fi command_string=$(cat <<EOF BROWSER=\$(which chromium 2>/dev/null); [ -n "\$BROWSER" ] || BROWSER=\$(which chromium-browser 2>/dev/null); XVFB=\$(which xvfb-run 2>/dev/null); [ -n "\$XVFB" -a -n "\$BROWSER" ] || exit 1; set -o nounset; DATA_DIR=\$(mktemp -d); trap "rm -rf \"\$DATA_DIR\";" EXIT; date '+Start time: %s.%N'; timeout $length env TMPDIR="\$DATA_DIR" \$XVFB \$BROWSER --no-sandbox --enable-logging=stderr --url "$url" --user-data-dir="\$DATA_DIR" --autoplay-policy=no-user-gesture-required; EOF ) if [[ "$host" == "localhost" ]]; then eval $command_string else echo $command_string | ssh $host sh fi ������������������������������������������������������������������������������������flent-2.2.0/flent/scripts/netstat_iterate.sh��������������������������������������������������������0000775�0000000�0000000�00000000777�14670056262�0021203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash count=10 interval=0.1 host=localhost while getopts "c:I:H:" opt; do case $opt in c) count=$OPTARG ;; I) interval=$OPTARG ;; H) host=$OPTARG ;; esac done command_string=$(cat <<EOF [ -e /proc/net/netstat ] || exit 1; for i in \$(seq $count); do date '+Time: %s.%N'; cat /proc/net/netstat; echo "---"; sleep $interval || exit 1; done EOF ) if [ "$host" == "localhost" ]; then eval $command_string else echo $command_string | ssh $host sh fi �flent-2.2.0/flent/scripts/ss_iterate.sh�������������������������������������������������������������0000775�0000000�0000000�00000002646�14670056262�0020143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash #Copyright (C) 2016 Matthias Tafelmeier #ss_iterate.sh is free software: you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation, either version 3 of the License, or #(at your option) any later version. #ss_iterate.sh is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. #You should have received a copy of the GNU General Public License #along with this program. If not, see <http://www.gnu.org/licenses/>. length=20 interval=0.1 host=localhost filter="" usage() { echo "$0 -l length -I interval -H host -t target" } while getopts "l:I:H:t:p:f:" opt; do case $opt in l) length="$OPTARG" ;; I) interval="$OPTARG" ;; H) host="$OPTARG" ;; t) target="$OPTARG" ;; f) filter="$OPTARG" ;; esac done if [ -z "$target" ] then usage exit 1 fi command_string=$(cat <<EOF endtime=\$(date -d "$length sec" +%s%N); while (( \$(date +%s%N) <= \$endtime )); do ss -t -i -p -n state connected "dst $target $filter" echo '' date '+Time: %s.%N'; echo "---"; sleep $interval || exit 1; done EOF ) if [[ "$host" == "localhost" ]]; then eval "$command_string" else echo $command_string | ssh $host sh fi ������������������������������������������������������������������������������������������flent-2.2.0/flent/scripts/stat_iterate.sh�����������������������������������������������������������0000775�0000000�0000000�00000002737�14670056262�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash count=10 interval=0.1 host=localhost while getopts "c:I:H:" opt; do case $opt in c) count=$OPTARG ;; I) interval=$OPTARG ;; H) host=$OPTARG ;; esac done # $5 is IDLE, $6 is IOWAIT; we count both as idle time command_string=$(cat <<EOF set -o noglob awk -v COUNT=$count -v INTERVAL=$interval ' function get_cpu_usage(count) { FS = " "; IDLE_FIELD = 5; IOWAIT_FIELD = 6; PROC_CPU = "/proc/stat"; while ((getline < PROC_CPU) > 0) { if (\$0 !~ /^cpu/) break; cpu_idle_prev[\$1] = cpu_idle[\$1]; cpu_total_prev[\$1] = cpu_total[\$1]; cpu_idle[\$1] = 0; cpu_total[\$1] = 0; for (i = 2; i <= NF; i++) { if (i == IDLE_FIELD || i == IOWAIT_FIELD) cpu_idle[\$1] += \$i; cpu_total[\$1] += \$i; } idle = cpu_idle[\$1] - cpu_idle_prev[\$1]; total = cpu_total[\$1] - cpu_total_prev[\$1]; cpu_usage = (total != 0) ? (1 - (idle / total)) : 0 if (count) printf("%s: %f\n", \$1, cpu_usage); } close(PROC_CPU); } BEGIN { date_cmd = "date \"+Time: %s.%N\"" for (loop = 0; loop < COUNT; loop++) { print("---"); (date_cmd) | getline date; print(date); close(date_cmd); get_cpu_usage(loop); system("sleep " INTERVAL); } }' EOF ) if [ "$host" == "localhost" ]; then eval "$command_string" else echo "$command_string" | ssh "$host" sh fi ���������������������������������flent-2.2.0/flent/scripts/tc_iterate.sh�������������������������������������������������������������0000775�0000000�0000000�00000001514�14670056262�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash interface=eth0 count=10 length=20 interval=0.1 command=qdisc host=localhost while getopts "i:c:l:I:C:H:" opt; do case $opt in i) interface=$OPTARG ;; c) count=$OPTARG ;; l) length=$OPTARG ;; I) interval=$OPTARG ;; C) command=$OPTARG ;; H) host=$OPTARG ;; esac done buffer="" [[ "$host" == "localhost" ]] || buffer="-b" command_string=$(cat <<EOF which tc_iterate >/dev/null && exec tc_iterate $buffer -i $interface -c $count -I $interval -C $command; endtime=\$(date -d "$length sec" +%s%N); while (( \$(date +%s%N) <= \$endtime )); do tc -s $command show dev $interface; date '+Time: %s.%N'; echo "---"; sleep $interval || exit 1; done EOF ) if [[ "$host" == "localhost" ]]; then eval $command_string else echo $command_string | ssh $host sh fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/scripts/wifistats_iterate.sh������������������������������������������������������0000775�0000000�0000000�00000001562�14670056262�0021527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash count=10 interval=0.1 host=localhost while getopts "i:c:I:H:" opt; do case $opt in i) interface=$OPTARG ;; c) count=$OPTARG ;; I) interval=$OPTARG ;; H) host=$OPTARG ;; esac done command_string=$(cat <<EOF which wifistats_iterate >/dev/null && exec wifistats_iterate $buffer -i $interface -c $count -I $interval; for i in \$(seq $count); do date '+Time: %s.%N'; dir=\$(find /sys/kernel/debug/ieee80211 -name netdev:$interface); for s in \$dir/stations/*; do echo Station: \$(basename \$s); [ -f \$s/airtime ] && echo Airtime: && cat \$s/airtime; [ -f \$s/rc_stats_csv ] && echo RC stats: && cat \$s/rc_stats_csv; done; echo "---"; sleep $interval || exit 1; done EOF ) if [ "$host" == "localhost" ]; then eval $command_string else echo $command_string | ssh $host sh fi ����������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/settings.py�����������������������������������������������������������������������0000664�0000000�0000000�00000077215�14670056262�0016171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # settings.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 25 November 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import argparse import os import socket import sys from datetime import datetime from copy import deepcopy from collections import OrderedDict try: from configparser import RawConfigParser except ImportError: from ConfigParser import RawConfigParser from flent.build_info import VERSION from flent.testenv import TestEnvironment, TEST_PATH from flent.loggers import get_logger from flent.util import FuncAction, Update, AddHost, append_host, keyval, \ keyval_int, keyval_transformer, ArgParser, token_split, global_cache, \ utcnow from flent.plotters import add_plotting_args from flent import loggers, util, resultset, runners # Python 2/3 compatibility try: unicode except NameError: unicode = str logger = get_logger(__name__) OLD_RCFILE = os.path.expanduser("~/.netperf-wrapperrc") DEFAULT_SETTINGS = { 'NAME': None, 'HOST': None, 'LOCAL_HOST': socket.gethostname(), 'DESCRIPTION': 'No description', 'PLOTS': {}, 'TIME': utcnow(), 'BATCH_NAME': None, 'BATCH_UUID': None, } DICT_SETTINGS = ('DATA_SETS', 'PLOTS') class _LOG_DEFER: pass class Version(FuncAction): def __call__(*args): logger.info("Flent v%s.\nRunning on Python %s.", VERSION, sys.version.replace("\n", " ")) try: import matplotlib import numpy logger.info("Using matplotlib version %s on numpy %s.", matplotlib.__version__, numpy.__version__) except ImportError: logger.info("No matplotlib found. Plots won't be available.") try: import qtpy from qtpy import QtCore logger.info("Using Qt: %s v%s.", qtpy.API, QtCore.__version__) except ImportError: logger.info("No usable Qt version found. GUI won't work.") sys.exit(0) class LogLevel(FuncAction): def __init__(self, option_strings, dest, level=None, **kwargs): super(LogLevel, self).__init__(option_strings, dest, **kwargs) self.level = level def __call__(self, parser, namespace, values, option_string=None): loggers.set_console_level(self.level) setattr(namespace, self.dest, self.level) class LogFile(argparse.Action): def __init__(self, option_strings, dest, level=None, **kwargs): super(LogFile, self).__init__(option_strings, dest, **kwargs) def __call__(self, parser, namespace, values, option_string=None): if values is None: setattr(namespace, self.dest, _LOG_DEFER) else: loggers.setup_logfile(values) setattr(namespace, self.dest, values) class Debug(argparse.Action): def __init__(self, option_strings, dest, help=None): super(Debug, self).__init__(option_strings, dest, default=False, nargs=0, help=help) def __call__(self, parser, namespace, values, option_string=None): loggers.enable_exceptions() setattr(namespace, self.dest, True) class ListTests(FuncAction): @classmethod def get_tests(cls, settings): settings = settings.copy() tests = [] for t in sorted([os.path.splitext(i)[0] for i in os.listdir(TEST_PATH) if i.endswith('.conf')]): try: settings.load_test(t, informational=True) tests.append((t, settings.DESCRIPTION)) except Exception as e: logger.exception(str(e)) return tests def __call__(self, parser, namespace, values, option_string=None): tests = self.get_tests(namespace) logger.info('Available tests:') max_len = max([len(t[0]) for t in tests]) for t, desc in tests: desc = desc.replace("\n", "\n" + " " * (max_len + 6)) logger.info(" %-" + str(max_len) + "s : %s", t, desc) sys.exit(0) parser = ArgParser(description='The FLExible Network Tester.') parser.add_argument( "args", nargs="*", type=unicode, metavar="host|test|input_file", help="Hostname, test name or input filenames.") parser.add_argument( "-o", "--output", action="store", type=unicode, dest="OUTPUT", default="-", help="File to write processed output to (default standard out).") parser.add_argument( "-D", "--data-dir", action="store", type=unicode, dest="DATA_DIR", help="Directory to store data files in. Defaults to the current directory.") parser.add_argument( "-i", "--input", action="append", type=unicode, dest="INPUT", default=[], help="File to read input from (instead of running tests). " "Input files can also be specified as unqualified arguments " "without using the -i switch.") parser.add_argument( "-f", "--format", action="store", type=unicode, dest="FORMAT", default='default', help="Select output format (one of plot, csv, org_table, stats, " "metadata, summary). Default: 'summary'.") parser.add_argument( "-p", "--plot", action="store", type=unicode, dest="PLOT", help="Select which plot to output for the given test (implies -f plot if no" "formatter is selected). Use the --list-plots option to see available plots.") parser.add_argument( "-t", "--title-extra", action="store", type=unicode, dest="TITLE", default="", help="Text to add to plot title and data file name.") parser.add_argument( "-n", "--note", action="store", type=unicode, dest="NOTE", help="Add arbitrary text as a note to be stored in the JSON data file " "(under the NOTE key in the metadata object).") parser.add_argument( "-r", "--rcfile", action="store", type=unicode, dest="RCFILE", default=os.path.expanduser("~/.flentrc"), help="Load configuration data from RCFILE (default ~/.flentrc).") parser.add_argument( "-x", "--extended-metadata", action="store_true", dest="EXTENDED_METADATA", help="Collect extended metadata and store it with the data file. " "May include details of your machine you don't want to distribute; " "see man page.") parser.add_argument( "--remote-metadata", action="append", type=unicode, dest="REMOTE_METADATA", metavar="HOSTNAME", default=[], help="Collect extended metadata from a remote host. HOSTNAME is passed " "verbatim to ssh, so can include hosts specified in ~/.ssh/config. This " "option can be specified multiple times. Note that gathering the data can " "take some time, since it involves executing several remote commands. " "This option implies --extended-metadata.") parser.add_argument( "--gui", action="store_true", dest="GUI", help="Run the Flent GUI. All other options are used as defaults " "in the GUI, but can be changed once it is running.") parser.add_argument( "--new-gui-instance", action="store_true", dest="NEW_GUI_INSTANCE", help="Start a new GUI instance. Otherwise, flent will try to " "connect to an already running GUI instance and have that load any new " "data files specified as arguments. Implies --gui.") parser.add_argument( "--gui-no-defer", action="store_true", dest="GUI_NO_DEFER", help="Normally, the GUI defers redrawing plots until they are needed to " "avoid redrawing all open plots every time an option changes. This switch " "turns off that optimisation in favour of always redrawing everything " "straight away. This is useful when loading a bunch of plots from the " "command line and then wanting to flip through them without drawing delay.") parser.add_argument( "-b", "--batch", action="append", type=unicode, dest="BATCH_NAMES", metavar="BATCH_NAME", default=[], help="Run test batch BATCH_NAME (must be specified in a batch " "file loaded by the --batch-file option). Can be supplied multiple times.") parser.add_argument( "-B", "--batch-file", action="append", type=unicode, dest="BATCH_FILES", metavar="BATCH_FILE", default=[], help="Load batch file BATCH_FILE. Can be specified multiple times, in which " "case the files will be combined (with identically-named sections being " "overridden by later files). See the man page for an explanation of the " "batch file format.") parser.add_argument( "--batch-override", action=Update, type=keyval, dest="BATCH_OVERRIDE", metavar="key=value", help="Override parameter 'key' in the batch config and set it to 'value'. " "The key name will be case folded to lower case. Can be specified multiple " "times.") parser.add_argument( "--batch-dry-run", action="store_true", dest="BATCH_DRY", help="Dry batch run. Prints what would be done, but doesn't actually run any " "tests.") parser.add_argument( "--batch-verbose", action="store_true", dest="BATCH_VERBOSE", help="Be verbose during batch run: Print all commands executed.") parser.add_argument( "--batch-no-shuffle", action="store_false", dest="BATCH_SHUFFLE", help="Do not randomise the order of test runs within each batch.") parser.add_argument( "--batch-no-timestamp", action="store_false", dest="BATCH_TIMESTAMP", help="Do not add a timestamp to batch output filenames. This keeps filenames " "stable, but requires that the filename_extra variable be unique for each " "test run. Results will be overwritten and a warning emitted if not.") parser.add_argument( "--batch-repetitions", action="store", type=int, dest="BATCH_REPS", metavar="REPETITIONS", help="Shorthand for --batch-override 'repetitions=REPETITIONS'.") parser.add_argument( "--batch-title", action="store", type=unicode, dest="BATCH_TITLE", metavar="TITLE", help="Shorthand for --batch-override 'batch_title=TITLE'.") parser.add_argument( "--batch-resume", action="store", type=unicode, dest="BATCH_RESUME", metavar="DIR", help="Try to resume a previously interrupted batch run. The argument is " "the top-level output directory from the previous run. Tests for which " "data files already exist will be skipped.") test_group = parser.add_argument_group( "Test configuration", "These options affect the behaviour of the test being run " "and have no effect when parsing input files.") test_group.add_argument( "-H", "--host", action=AddHost, type=unicode, dest="HOSTS", metavar='HOST', default=[], help="Host to connect to for tests. For tests that support it, multiple " "hosts can be specified by supplying this option multiple times. Hosts can " "also be specified as unqualified arguments; this parameter guarantees that " "the argument be interpreted as a host name (rather than being subject to " "auto-detection between input files, hostnames and test names).") test_group.add_argument( "--local-bind", action="append", type=unicode, dest="LOCAL_BIND", metavar='IP', default=[], help="Local hostname or IP address to bind to (for test tools that support " "this). Can be specified multiple times to get different local bind address " "per host.") test_group.add_argument( "--remote-host", action=Update, type=keyval_int, dest="REMOTE_HOSTS", metavar='idx=HOSTNAME', help="A remote hostname to connect to when starting a test. The idx is " "the runner index, which is assigned sequentially by the number of *runners* " "(which is *not* the same as the number of hosts). Look for the 'IDX' key in " "SERIES_META for a test get the idx used here. This works by simply " "prepending 'ssh HOSTNAME' to the runner command, so it relies on the same " "binaries being in the same places on both machines, and won't work for all " "runners. Can be specified multiple times.") test_group.add_argument( "-l", "--length", action="store", type=int, dest="LENGTH", default=60, help="Base test length (some tests may add some time to this).") test_group.add_argument( "-s", "--step-size", action="store", type=float, dest="STEP_SIZE", default=0.2, help="Measurement data point step size.") test_group.add_argument( "-d", "--delay", action="store", type=int, dest="DELAY", default=5, help="Number of seconds to delay parts of test (such as bandwidth loaders).") test_group.add_argument( "-4", "--ipv4", action="store_const", const=4, dest="IP_VERSION", help="Use IPv4 for tests (some tests may ignore this).") test_group.add_argument( "-6", "--ipv6", action="store_const", const=6, dest="IP_VERSION", help="Use IPv6 for tests (some tests may ignore this).") test_group.add_argument( "--socket-timeout", action="store", type=int, dest="SOCKET_TIMEOUT", default=2, help="Socket timeout (in seconds) used for UDP delay measurement, to prevent " "stalls on packet loss. Only enabled if the installed netperf version is " "detected to support this (requires netperf version 2.7 or newer). Set to 0 " "to disable.") test_group.add_argument( "--send-size", action="append", type=unicode, dest="SEND_SIZE", default=[], help="Send size (in bytes) used for TCP tests. netperf uses the socket " "buffer size by default, which if too large can cause spikes in the " "throughput results. Lowering this value will increase CPU usage but " "also improves the fidelity of the throughput results without having " "to decrease the socket buffer size. Can be specified multiple times, " "with each value corresponding to a stream of a test.") test_group.add_argument( "--test-payload", action="store", type=unicode, dest="TEST_PAYLOAD", default='/dev/urandom', help="Path to file containing payload to pre-fill the netperf buffers with " "defaults to randomised payload") test_group.add_argument( "--test-parameter", action=Update, type=keyval, dest="TEST_PARAMETERS", metavar='key=value', help="Arbitrary test parameter in key=value format. " "Key will be case folded to lower case. Some test configurations may " "alter behaviour based on values passed as test parameters. Additionally, " "the values are stored with the results metadata, and so can be used for " "arbitrary resultset categorisation. Can be specified multiple times.") test_group.add_argument( "--swap-up-down", action="store_true", dest="SWAP_UPDOWN", help="Swap upstream and downstream directions for data transfer. This means " "that 'upload' will become 'download' and vice versa. Works by exchanging " "netperf TCP_MAERTS and TCP_STREAM parameters, so only works for tests " "that employ these as their data transfer, and only for the TCP streams.") test_group.add_argument( "--socket-stats", action="store_true", dest="SOCKET_STATS", help="Parse socket stats during test. This will capture and parse socket " "statistics for all TCP upload flows during a test, adding TCP cwnd and RTT " "values to the test data. Requires the 'ss' utility to be present on the " "system, and can fail if there are too many simultaneous upload flows; which " "is why this option is not enabled by default.") test_group.add_argument( "--marking-name", action=Update, dest="MARKING_NAMES", metavar='name=hexcode', type=keyval_transformer(keyfunc=lambda x: x.upper(), valfunc=util.parse_int, errmsg="Values must be integers"), help="Define a new symbolic name that can be used when specifying flow " "markings using the 'markings' test parameter. This can be used to make " "it easier to specify custom diffserv markings on flows by using symbolic " "names for each marking value instead of the hex codes. Values specified " "here will be used in addition to the common values (AFxx, CSx and EF - " "see man page for full list), and cannot override the built-in names. " "Names will be case-folded when matching.") plot_group = parser.add_argument_group( "Plot configuration", "These options are used to configure the appearance of " "plot output and only make sense combined with -f plot.") add_plotting_args(plot_group) tool_group = parser.add_argument_group("Test tool-related options") tool_group.add_argument( "--control-host", action="store", type=unicode, dest="CONTROL_HOST", metavar="HOST", help="Hostname for control connection for test tools that support it " "(netperf and D_ITG). If not supplied, this will be the same as the test " "target host. The per-flow test parameter setting takes precedence of this " "for multi-target tests.") tool_group.add_argument( "--control-local-bind", action="store", type=unicode, dest="CONTROL_LOCAL_BIND", metavar="IP", help="Local IP to bind control connection to (for test tools that support it;" " currently netperf). If not supplied, the value for --local-bind will be " "used.") tool_group.add_argument( "--netperf-control-port", action="store", type=int, dest="NETPERF_CONTROL_PORT", metavar="PORT", default=12865, help="Port for Netperf control server.") tool_group.add_argument( "--ditg-control-port", action="store", type=int, dest="DITG_CONTROL_PORT", metavar="PORT", default=8000, help="Port for D-ITG control server.") tool_group.add_argument( "--ditg-control-secret", action="store", type=unicode, dest="DITG_CONTROL_SECRET", metavar="SECRET", default='', help="Secret for D-ITG control server authentication.") tool_group.add_argument( "--http-getter-urllist", action="append", type=unicode, dest="HTTP_GETTER_URLLIST", metavar="FILENAME", help="Filename containing the list of HTTP URLs to get. Can also be a URL, " "which will then be downloaded as part of each test iteration. If not " "specified, this is set to http://<hostname>/filelist.txt where <hostname> " "is the first test hostname. Can be specified multiple times, in which case " "one http-getter instance will be run for each URL list.") tool_group.add_argument( "--http-getter-dns-servers", action="store", type=unicode, dest="HTTP_GETTER_DNS", metavar="DNS_SERVERS", help="DNS servers to use for http-getter lookups. Format is " "host[:port][,host[:port]]... This option will only work if libcurl supports " "it (needs to be built with the ares resolver). " "Default is none (use the system resolver).") tool_group.add_argument( "--http-getter-timeout", action="store", type=int, dest="HTTP_GETTER_TIMEOUT", metavar="MILLISECONDS", help="Timeout for HTTP connections. Default is to use the test length.") tool_group.add_argument( "--http-getter-workers", action="store", type=int, dest="HTTP_GETTER_WORKERS", metavar="NUMBER", default=4, help="Number of workers to use for getting HTTP urls. " "Default is 4.") tool_group.add_argument( "--irtt-sampling-interval", action="store", type=int, dest="IRTT_INTERVAL", metavar="MILLISECONDS", help="Override the sampling interval passed to irtt, in milliseconds. Can be " "used to run irtt with a higher sampling frequency than the rest of the test. " "If set, this will override the sampling interval for all instances of irtt " "used in the test.") misc_group = parser.add_argument_group("Misc and debugging options") misc_group.add_argument( "-L", "--log-file", action=LogFile, type=unicode, dest="LOG_FILE", nargs='?', help="Write debug log (test program output) to log file. If the option is " "enabled but no file name is given, the log file name is derived from the " "test data filename.") misc_group.add_argument( "--cache-file", action="store", type=unicode, dest="CACHE_FILE", metavar="FILENAME", help="Use this file for caching lookup of runner file names and " "versions between runs.") misc_group.add_argument( '--list-tests', action=ListTests, help="List available tests and exit.") misc_group.add_argument( '--list-plots', action='store_true', dest="LIST_PLOTS", help="List available plots for selected test and exit.") misc_group.add_argument( "-V", "--version", action=Version, help="Show flent version information and exit.") misc_group.add_argument( "-v", "--verbose", action=LogLevel, level=loggers.DEBUG, dest="LOG_LEVEL", help="Enable verbose logging to console.") misc_group.add_argument( "-q", "--quiet", action=LogLevel, level=loggers.WARNING, dest="LOG_LEVEL", help="Disable normal logging to console (and only log warnings and errors).") misc_group.add_argument( "--debug-error", action=Debug, dest="DEBUG_ERROR", help="Print full exception backtraces to console.") def new(): return parser.parse_args([], namespace=Settings(DEFAULT_SETTINGS)) class Settings(argparse.Namespace): FLENT_VERSION = VERSION def __init__(self, defs): # Copy everything from defaults to make sure the defaults are not # modified. defaults = {} for k, v in defs.items(): defaults[k] = deepcopy(v) argparse.Namespace.__init__(self, **defaults) def load_test_or_host(self, test_name): filename = os.path.join(TEST_PATH, test_name + ".conf") if not os.path.exists(filename): # Test not found, assume it's a hostname append_host(self.HOSTS, test_name) elif self.NAME is not None and self.NAME != test_name: raise RuntimeError("Multiple test names specified.") else: self.NAME = test_name def load_rcfile(self): self.process_args() if self.RCFILE == parser.get_default('RCFILE') and \ not os.path.exists(self.RCFILE) and os.path.exists(OLD_RCFILE): logger.warning("Using old rcfile found at %s, " "please rename to %s.", OLD_RCFILE, self.RCFILE) self.RCFILE = OLD_RCFILE if os.path.exists(self.RCFILE): logger.debug("Loading rc file %s", self.RCFILE) config = RawConfigParser() config.optionxform = lambda x: x.upper() config.read(self.RCFILE) items = [] if config.has_section('global'): items.extend(config.items('global')) if self.NAME is not None and config.has_section(self.NAME): items.extend(config.items(self.NAME)) try: return self.parse_rcvalues(items) except (ValueError, argparse.ArgumentTypeError) as e: raise RuntimeError("Unable to parse RC values: %s" % e) return {} def parse_rcvalues(self, items): vals = {} for k, v in items: k = k.upper() t = parser.get_type(k) if t == bool: if type(v) == bool: vals[k] = v elif v.lower() in ('1', 'yes', 'true', 'on'): vals[k] = True elif v.lower() in ('0', 'no', 'false', 'off'): vals[k] = False else: raise ValueError("Not a boolean: %s" % v) logger.debug("Set value %s=%s from rc file", k, vals[k]) continue elif t: val = t(v) c = parser.get_choices(k) if c and val not in c: logger.warning("Invalid RC value '%s' for key %s. Ignoring", val, k) continue if isinstance(val, dict) and k in vals: vals[k].update(val) elif parser.is_list(k): vals[k] = [t(i.strip()) for i in token_split(v)] else: vals[k] = val logger.debug("Set value %s=%s from rc file", k, vals[k]) return vals def load_rcvalues(self, vals, override=False): try: vals = self.parse_rcvalues(vals) except (ValueError, argparse.ArgumentTypeError) as e: raise RuntimeError("Unable to parse RC values: %s" % e) for k, v in vals.items(): if override or getattr(self, k) == parser.get_default(k): setattr(self, k, v) self.update_implications() def load_test(self, test_name=None, informational=False): if test_name is not None: self.NAME = test_name if self.HOSTS: self.HOST = self.HOSTS[0] if hasattr(self, 'TOTAL_LENGTH'): self.TOTAL_LENGTH = self.LENGTH if not informational: self.lookup_hosts() if self.NAME is None: if informational: # Informational lookups should not fail return raise RuntimeError("Missing test name.") test_env = TestEnvironment(self.__dict__, informational) filename = os.path.join(TEST_PATH, self.NAME + ".conf") logger.debug("Executing test environment file %s", filename) s = test_env.execute(filename) for k, v in list(s.items()): if k == k.upper(): setattr(self, k, v) self.update_defaults() def update_defaults(self): if hasattr(self, 'DEFAULTS'): for k, v in list(self.DEFAULTS.items()): if not hasattr(self, k) or getattr(self, k) is None: setattr(self, k, v) def compute_missing_results(self, results): if "FROM_COMBINER" in results.meta(): return for dname, dvals in self.DATA_SETS.items(): if dname not in results: runner = runners.get(dvals['runner']) if issubclass(runner, runners.ComputingRunner): logger.debug("Computing missing data series %s", dname) try: runner = runner(name=dname, settings=self, post=True, **dvals) runner.compute_result(results) except Exception as e: logger.exception("Unable to compute missing data " "series '%s': '%s'.", dname, e) raise def lookup_hosts(self): """If no explicit IP version is set, do a hostname lookup and try to""" version = 4 for h in self.HOSTS: try: hostname = util.lookup_host(h) if hostname[0] == socket.AF_INET6: version = 6 except socket.gaierror as e: raise RuntimeError("Hostname lookup failed for host %s: %s" % (h, e)) if self.IP_VERSION is None: self.IP_VERSION = version def __setattr__(self, k, v): if k in DICT_SETTINGS and isinstance(v, list): v = OrderedDict(v) object.__setattr__(self, k, v) def update(self, values): updated = False for k, v in list(values.items()): if not hasattr(self, k) or getattr(self, k) != v: updated = True setattr(self, k, v) return updated def items(self): return self.__dict__.items() def copy(self): return Settings(self) def process_args(self): for v in 'INPUT', 'SCALE_DATA', 'HOSTS': if not getattr(self, v): setattr(self, v, []) while self.args: a = self.args.pop(0) if os.path.exists(a): if self.SCALE_MODE and self.INPUT: self.SCALE_DATA.append(a) else: self.INPUT.append(a) else: self.load_test_or_host(a) def update_implications(self): # If run with no args and no controlling TTY, launch the GUI by default if not sys.stdin.isatty() and not sys.stdout.isatty() and \ not sys.stderr.isatty() and len(sys.argv) < 2: self.GUI = True # Passing --new-gui-instance on the command line implies --gui, but # setting it in the rc file does not. When set here, before the rc file # is loaded, this has the desired effect. elif self.NEW_GUI_INSTANCE: self.GUI = True if self.CACHE_FILE: global_cache.read_file(self.CACHE_FILE) if self.REMOTE_METADATA: self.EXTENDED_METADATA = True if self.PLOT is not None and self.FORMAT == 'default': self.FORMAT = 'plot' if self.BATCH_REPS is not None: self.BATCH_OVERRIDE['repetitions'] = self.BATCH_REPS if self.BATCH_TITLE is not None: self.BATCH_OVERRIDE['batch_title'] = self.BATCH_TITLE if self.HOST is None and self.HOSTS: self.HOST = self.HOSTS[0] if self.DATA_DIR is None: self.DATA_DIR = os.path.dirname(self.OUTPUT) or '.' # For per-stream options, if only specified once duplicate them for each # host so they apply to all flows if len(self.LOCAL_BIND) == 1 and len(self.HOSTS) > 1: self.LOCAL_BIND *= len(self.HOSTS) if len(self.SEND_SIZE) == 1 and len(self.HOSTS) > 1: self.SEND_SIZE *= len(self.HOSTS) for k, v in self.BATCH_OVERRIDE.items(): if not hasattr(v, 'lower'): continue if v.lower() in ('no', 'false', '0'): self.BATCH_OVERRIDE[k] = False elif v.lower() in ('yes', 'true', '0'): self.BATCH_OVERRIDE[k] = True def load_gui(settings): from flent import gui gui.run_gui(settings) # does not return def load(argv): logger.info("Starting Flent %s using Python %s.", VERSION, sys.version.split()[0]) # We parse the args twice - the first pass is just to get the test name and # the name of the rcfile to parse in order to get the defaults settings = parser.parse_args(argv, namespace=Settings(DEFAULT_SETTINGS)) parser.set_defaults(**{k: v for k, v in settings.load_rcfile().items() if getattr(settings, k) == parser.get_default(k)}) settings = parser.parse_args(argv, namespace=Settings(DEFAULT_SETTINGS)) settings.process_args() settings.update_implications() if settings.SCALE_DATA: scale_data = [] for filename in settings.SCALE_DATA: if filename in settings.INPUT: # Do not load input file twice - makes it easier to select a set # of files for plot scaling and supply each one to -i without # having to change the other command line options each time. continue r = resultset.load(filename) scale_data.append(r) settings.SCALE_DATA = scale_data settings.load_test(informational=True) if settings.LIST_PLOTS: list_plots(settings) return settings def list_plots(settings): plots = list(settings.PLOTS.keys()) if not plots: logger.error("No plots available for test '%s'.", settings.NAME) sys.exit(0) logger.info("Available plots for test '%s':", settings.NAME) max_len = str(max([len(p) for p in plots])) for p in plots: logger.info(" %-" + max_len + "s : %s", p, settings.PLOTS[p]['description']) sys.exit(0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/testenv.py������������������������������������������������������������������������0000664�0000000�0000000�00000021261�14670056262�0016007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # testenv.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 17 September 2014 # Copyright (c) 2014-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import os from collections import OrderedDict from copy import deepcopy from itertools import cycle, islice from flent.util import Glob, token_split, parse_int from flent.build_info import DATA_DIR from flent.loggers import get_logger TEST_PATH = os.path.join(DATA_DIR, 'tests') logger = get_logger(__name__) try: from os import cpu_count except ImportError: from multiprocessing import cpu_count try: CPU_COUNT = cpu_count() except NotImplementedError: CPU_COUNT = 1 try: from itertools import zip_longest except ImportError: from itertools import izip_longest as zip_longest SPECIAL_PARAM_NAMES = ['upload_streams', 'download_streams', 'bidir_streams'] SPECIAL_PARAM_MAP = {'num_cpus': CPU_COUNT} # Test parameters that will be parsed and from test parameters and passed to the # add_stream callback. In addition to these, 'stream_delay' is handled specially # in the code below STREAM_CONFIG_PARAM_NAMES = ['label', 'ping_label', 'marking', 'control_host', 'local_bind', 'cc_algo', 'udp_bandwidth', 'udp_pktsize', 'send_size', 'test_payload'] # Mapping of test parameters that will be picked up from the global settings if # they are not set GLOBAL_TEST_PARAMS_MAP = {'local_binds': 'LOCAL_BIND', 'send_sizes': 'SEND_SIZE'} class _no_default(): pass def finder(fn): """Decorator to put on find_* methods that makes sure common operations (i.e. skip if self.informational is set) are carried out correctly.""" def decorated(self, *args, **kwargs): if self.informational: return "" ret = fn(self, *args, **kwargs) return ret return decorated class TestEnvironment(object): def __init__(self, env={}, informational=False): self.env = self.replace_testparms(deepcopy(env)) self.env.update({ 'glob': Glob, 'o': OrderedDict, 'include': self.include_test, 'min_host_count': self.require_host_count, 'set_test_parameter': self.set_test_parameter, 'get_test_parameter': self.get_test_parameter, 'try_test_parameters': self.try_test_parameters, 'parse_int': self.parse_int, 'zip_longest': zip_longest, 'for_stream_config': self.for_stream_config, 'test_error': self.test_error, }) self.informational = informational self.orig_hosts = self.env['HOSTS'] def execute(self, filename): try: with open(filename) as fp: exec(compile(fp.read(), filename, 'exec'), self.env) # Informational loading can override HOSTS to satisfy # require_host_count(); this should not be propagated. if self.informational: self.env['HOSTS'] = self.orig_hosts return self.expand_duplicates(self.env) except Exception as e: testn = os.path.basename(filename).replace(".conf", "") raise RuntimeError( "Error loading test '%s': %s." % (testn, e)) def replace_testparms(self, env): if 'TEST_PARAMETERS' not in env: return env tp = env['TEST_PARAMETERS'] for k in SPECIAL_PARAM_NAMES: if k in tp and tp[k] in SPECIAL_PARAM_MAP: tp[k] = SPECIAL_PARAM_MAP[tp[k]] return env def expand_duplicates(self, env): new_data_sets = [] if 'DATA_SETS' not in env: return env for k, v in env['DATA_SETS'].items(): try: for i in range(int(v['duplicates'])): new_data_sets.append( ("%s::%d" % (k, i + 1), dict(v, id=str(i + 1), duplicates=None))) except (KeyError, TypeError): new_data_sets.append((k, v)) except ValueError: raise RuntimeError( "Invalid number of duplicates: %s" % v['duplicates']) env['DATA_SETS'] = OrderedDict(new_data_sets) return env def include_test(self, name, env=None): self.execute(os.path.join(TEST_PATH, name)) def set_test_parameter(self, name, value): self.env['TEST_PARAMETERS'][name] = value def get_test_parameter(self, name, default=_no_default, split=False, cast=None): try: ret = self.env['TEST_PARAMETERS'][name] if split: ret = token_split(ret) if cast: ret = list(map(cast, ret)) elif cast: ret = cast(ret) return ret except KeyError: if name in GLOBAL_TEST_PARAMS_MAP: ret = self.env[GLOBAL_TEST_PARAMS_MAP[name]] if ret: return ret if default is not _no_default: return default if self.informational: return None raise RuntimeError("Missing required test parameter: %s" % name) def try_test_parameters(self, names, default=_no_default, split=False, cast=None): name = names[0] for n in names: if n in self.env['TEST_PARAMETERS']: name = n break return self.get_test_parameter(name, default, split, cast) def parse_int(self, val): try: return parse_int(val) except ValueError: raise RuntimeError("Invalid integer value: %s" % val) def require_host_count(self, count): if len(self.env['HOSTS']) < count: if self.informational: self.env['HOSTS'] = ['dummy'] * count elif 'DEFAULTS' in self.env and 'HOSTS' in self.env['DEFAULTS'] \ and self.env['DEFAULTS']['HOSTS']: # If a default HOSTS list is set, populate the HOSTS list with # values from this list, repeating as necessary up to count def_hosts = cycle(self.env['DEFAULTS']['HOSTS']) missing_c = count - len(self.env['HOSTS']) self.env['HOSTS'].extend(islice(def_hosts, missing_c)) if not self.env['HOST']: self.env['HOST'] = self.env['HOSTS'][0] else: raise RuntimeError("Need %d hosts, only %d specified" % (count, len(self.env['HOSTS']))) def test_error(self, msg): if not self.informational: raise RuntimeError(msg) def for_stream_config(self, func, n=None): if n is None: n = len(self.env['HOSTS']) config_params = {} for k in STREAM_CONFIG_PARAM_NAMES: config_params[k] = self.get_test_parameter(k+"s", default=[], split=True) stream_delays = self.get_test_parameter("stream_delays", default=[], split=True) global_delay = self.env['DELAY'] total_length = self.env['TOTAL_LENGTH'] stream_length = total_length-2*global_delay for i in range(n): kwargs = {} try: kwargs['host'] = self.env['HOSTS'][i] except IndexError: pass for k, v in config_params.items(): try: kwargs[k] = v[i] except IndexError: pass try: delay = int(stream_delays[i]) kwargs['length'] = stream_length - delay kwargs['delay'] = global_delay + delay except IndexError: pass func(i, **kwargs) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0015105�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/bursts.conf�����������������������������������������������������������������0000664�0000000�0000000�00000006261�14670056262�0017303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification AGGREGATOR='timeseries' TOTAL_LENGTH=LENGTH DESCRIPTION="Latency measurements under intermittent UDP bursts" DEFAULTS={'PLOT': "ping"} DATA_SETS = o([ ('Ping (ms) UDP EF', {'runner': 'udp_rtt', 'length': LENGTH, 'host': HOST, 'marking': 'EF,EF', 'units': 'ms'}), ('Ping (ms) UDP BK', {'runner': 'udp_rtt', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': LENGTH, 'host': HOST, 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) TEST_PARAMETERS['burst_ports'] = parse_int(try_test_parameters(('burst_ports', 'burst-ports'), 1000)) TEST_PARAMETERS['burst_length'] = parse_int(try_test_parameters(('burst_length', 'burst-length'), 5)) TEST_PARAMETERS['burst_psize'] = parse_int(try_test_parameters(('burst_psize', 'burst-psize'), 500)) TEST_PARAMETERS['burst_tos'] = parse_int(try_test_parameters(('burst_tos', 'burst-tos'), 0)) TOS = ("-t %s" % TEST_PARAMETERS['burst_tos']) if TEST_PARAMETERS['burst_tos'] else "" BURST_LENGTH=TEST_PARAMETERS['burst_length'] for i in range(LENGTH//(DELAY+BURST_LENGTH)): DATA_SETS['Burst %d' % i] = { 'command': "traffic-gen -f %s -p 0 -l %d -s %s -dD %s %s" % ( TEST_PARAMETERS['burst_ports'], TEST_PARAMETERS['burst_length'], TEST_PARAMETERS['burst_psize'], TOS, HOST), 'delay': DELAY*(i+1)+BURST_LENGTH*i, 'units': 'N/A', 'runner': 'silent_process',} PLOTS = o([ ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) UDP BK', 'label': 'UDP BK'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) UDP EF', 'label': 'UDP EF'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ]) include("common.inc") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/bursts_11e.conf�������������������������������������������������������������0000664�0000000�0000000�00000005403�14670056262�0017746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification AGGREGATOR='timeseries' TOTAL_LENGTH=LENGTH DESCRIPTION="802.11e Latency measurements under intermittent UDP bursts" DEFAULTS={'PLOT': "ping"} DATA_SETS = o([ ('Ping (ms) UDP VO', {'runner': 'udp_rtt', 'length': LENGTH, 'host': HOST, 'marking': 'CS7,CS7', 'units': 'ms'}), ('Ping (ms) UDP BK', {'runner': 'udp_rtt', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP VI', {'runner': 'udp_rtt', 'length': LENGTH, 'host': HOST, 'marking': 'CS5,CS5', 'units': 'ms'}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) TEST_PARAMETERS['burst_ports'] = parse_int(try_test_parameters(('burst_ports', 'burst-ports'), 1000)) TEST_PARAMETERS['burst_length'] = parse_int(try_test_parameters(('burst_length', 'burst-length'), 5)) TEST_PARAMETERS['burst_psize'] = parse_int(try_test_parameters(('burst_psize', 'burst-psize'), 500)) TEST_PARAMETERS['burst_tos'] = parse_int(try_test_parameters(('burst_tos', 'burst-tos'), 0)) TOS = ("-t %s" % TEST_PARAMETERS['burst_tos']) if TEST_PARAMETERS['burst_tos'] else "" BURST_LENGTH=TEST_PARAMETERS['burst_length'] for i in range(LENGTH//(DELAY+BURST_LENGTH)): DATA_SETS['Burst %d' % i] = { 'command': "traffic-gen -f %s -p 0 -l %d -s %s -dD %s %s" % ( TEST_PARAMETERS['burst_ports'], TEST_PARAMETERS['burst_length'], TEST_PARAMETERS['burst_psize'], TOS, HOST), 'delay': DELAY*(i+1)+BURST_LENGTH*i, 'units': 'N/A', 'runner': 'silent_process',} PLOTS = o([ ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': 'Ping (ms) UDP BK', 'label': 'UDP BK'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) UDP VI', 'label': 'UDP VI'}, {'data': 'Ping (ms) UDP VO', 'label': 'UDP VO'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ]) include("common.inc") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/cisco_5tcpup.conf�����������������������������������������������������������0000664�0000000�0000000�00000014175�14670056262�0020364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="RTT Fair Realtime Response Under Load" DEFAULTS={'PLOT': "all_scaled", 'HOSTS': []} # This makes sure that five hosts are specified on the command line, and if not # fills up the HOSTS list with input from the DEFAULTS above # (repeating them if necessary). min_host_count(5) DATA_SETS = o([ ('TCP upload BE0 %s' % HOSTS[0], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[0], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE1 %s' % HOSTS[1], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[1], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE2 %s' % HOSTS[2], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[2], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE3 %s' % HOSTS[3], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[3], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE4 %s' % HOSTS[4], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[4], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) ICMP0 %s' % HOSTS[0], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[0], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP1 %s' % HOSTS[1], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[1], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP2 %s' % HOSTS[2], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[2], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP3 %s' % HOSTS[3], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[3], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP4 %s' % HOSTS[4], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[4], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload BE0 %s' % HOSTS[0], 'label': 'BE %s' % HOSTS[0], 'linewidth': 2.0}, {'data': 'TCP upload BE1 %s' % HOSTS[1], 'label': 'BE %s' % HOSTS[1]}, {'data': 'TCP upload BE2 %s' % HOSTS[2], 'label': 'BE %s' % HOSTS[2]}, {'data': 'TCP upload BE3 %s' % HOSTS[3], 'label': 'BE %s' % HOSTS[3]}, {'data': 'TCP upload BE4 %s' % HOSTS[4], 'label': 'BE %s' % HOSTS[4]}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'series': [ {'data': 'Ping (ms) ICMP0 %s' % HOSTS[0], 'label': 'ICMP %s' % HOSTS[0] }, {'data': 'Ping (ms) ICMP1 %s' % HOSTS[1], 'label': 'ICMP %s' % HOSTS[1] }, {'data': 'Ping (ms) ICMP2 %s' % HOSTS[2], 'label': 'ICMP %s' % HOSTS[2] }, {'data': 'Ping (ms) ICMP3 %s' % HOSTS[3], 'label': 'ICMP %s' % HOSTS[3] }, {'data': 'Ping (ms) ICMP4 %s' % HOSTS[4], 'label': 'ICMP %s' % HOSTS[4] }, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('upload_scaled', 'ping_scaled')}), ('all', {'description': 'upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('upload', 'ping')}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ]) include("common.inc") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/cisco_5tcpup_2udpflood.conf�������������������������������������������������0000664�0000000�0000000�00000014067�14670056262�0022342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Cisco 5TCP up + 2 6Mbit UDP" DEFAULTS={'PLOT': "all_scaled", 'HOSTS': []} IPERF_V6="" if IP_VERSION == 6: IPERF_V6="-V" # This makes sure that five hosts are specified on the command line, and if not # fills up the HOSTS list with input from the DEFAULTS above # (repeating them if necessary). min_host_count(5) DATA_SETS = o([ ('UDP upload', {'command': "iperf -c %s -i %.2f -y C -t %d -u -b 6M %s" % (HOST, max(0.5,STEP_SIZE), LENGTH, IPERF_V6), 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'iperf_csv',}), ('TCP upload BE0 %s' % HOSTS[0], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[0], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE1 %s' % HOSTS[1], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[1], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE2 %s' % HOSTS[2], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[2], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE3 %s' % HOSTS[3], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[3], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE4 %s' % HOSTS[4], {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOSTS[4], 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) ICMP0 %s' % HOSTS[0], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[0], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP1 %s' % HOSTS[1], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[1], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP2 %s' % HOSTS[2], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[2], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP3 %s' % HOSTS[3], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[3], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP4 %s' % HOSTS[4], {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOSTS[4], 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload BE0 %s' % HOSTS[0], 'label': 'BE %s' % HOSTS[0], 'linewidth': 2.0}, {'data': 'TCP upload BE1 %s' % HOSTS[1], 'label': 'BE %s' % HOSTS[1]}, {'data': 'TCP upload BE2 %s' % HOSTS[2], 'label': 'BE %s' % HOSTS[2]}, {'data': 'TCP upload BE3 %s' % HOSTS[3], 'label': 'BE %s' % HOSTS[3]}, {'data': 'TCP upload BE4 %s' % HOSTS[4], 'label': 'BE %s' % HOSTS[4]}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'series': [ {'data': 'Ping (ms) ICMP0 %s' % HOSTS[0], 'label': 'ICMP %s' % HOSTS[0] }, {'data': 'Ping (ms) ICMP1 %s' % HOSTS[1], 'label': 'ICMP %s' % HOSTS[1] }, {'data': 'Ping (ms) ICMP2 %s' % HOSTS[2], 'label': 'ICMP %s' % HOSTS[2] }, {'data': 'Ping (ms) ICMP3 %s' % HOSTS[3], 'label': 'ICMP %s' % HOSTS[3] }, {'data': 'Ping (ms) ICMP4 %s' % HOSTS[4], 'label': 'ICMP %s' % HOSTS[4] }, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('upload_scaled', 'ping_scaled')}), ('all', {'description': 'upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('upload', 'ping')}), ]) include("common.inc") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/common.inc������������������������������������������������������������������0000664�0000000�0000000�00000000340�14670056262�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������include("qdisc_stats.inc") include("cpu_stats.inc") include("wifi_stats.inc") include("ping.inc") include("voip_mixin.inc") include("http_mixin.inc") include("netstat.inc") include("tcp_stats.inc") include("dash_mixin.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/cpu_stats.inc���������������������������������������������������������������0000664�0000000�0000000�00000005122�14670056262�0017605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- # Mixin include file to add cpu stats to a test CPU_STATS_HOSTS=get_test_parameter('cpu_stats_hosts', default=[], split=True) for host in CPU_STATS_HOSTS: DATA_SETS['cpu_stats_%s' % host] = {'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': host, 'units': 'misc', 'id': host, 'runner': 'cpu_stats'} if CPU_STATS_HOSTS: # Average CPU load PLOTS['cpu'] = {'description': 'CPU stats', 'type': 'timeseries', 'axis_labels': ['Load'], 'series': [ {'data': glob('cpu_stats_*'), 'raw_key': 'load', 'label': 'CPU load'}, ]} PLOTS['cpu_box'] = {'description': 'CPU stats (box plot)', 'type': 'box', 'parent': 'cpu'} PLOTS['cpu_bar'] = {'description': 'CPU stats (bar plot)', 'type': 'bar', 'parent': 'cpu'} PLOTS['cpu_box_combine'] = {'description': 'CPU stats (box combine plot)', 'type': 'box_combine', 'axis_labels': ['Load'], 'series': [ {'data': glob('cpu_stats_*'), 'raw_key': 'load', 'label': 'CPU load', 'combine_mode': 'raw_mean'}, ]} PLOTS['cpu_bar_combine'] = {'description': 'CPU stats (bar combine plot)', 'type': 'bar_combine', 'parent': 'cpu_box_combine'} # Per core CPU load PLOTS['cpu_core'] = {'description': 'Per core CPU stats', 'type': 'timeseries', 'axis_labels': ['Load'], 'series': [ {'data': glob('cpu_stats_*'), 'raw_key': glob('cpu*'), 'label': 'CPU core load'}, ]} PLOTS['cpu_core_box'] = {'description': 'Per core CPU stats (box plot)', 'type': 'box', 'parent': 'cpu_core'} PLOTS['cpu_core_bar'] = {'description': 'Per core CPU stats (bar plot)', 'type': 'bar', 'parent': 'cpu_core'} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/cubic_bbr.conf��������������������������������������������������������������0000664�0000000�0000000�00000020267�14670056262�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Cubic VS BBR smackdown" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload Cubic BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BBR BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'bbr', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Cubic CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BBR CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'bbr', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download Cubic BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BBR BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'bbr', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Cubic CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BBR CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'bbr', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP CS1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP CS6', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS6,CS6', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download BBR BE', 'label': 'BBR BE', 'linewidth': 2.0}, {'data': 'TCP download Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP download BBR CS1', 'label': 'BBR CS1'}, {'data': 'TCP download Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload BBR BE', 'label': 'BBR BE', 'linewidth': 2.0}, {'data': 'TCP upload Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP upload BBR CS1', 'label': 'BBR CS1'}, {'data': 'TCP upload Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP CS6', 'label': 'UDP CS6'}, {'data': 'Ping (ms) UDP CS1', 'label': 'UDP CS1'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ]) include("common.inc") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/cubic_cdg.conf��������������������������������������������������������������0000664�0000000�0000000�00000020742�14670056262�0017663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Cubic VS CDG smackdown" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload Cubic BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CDG BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cdg', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Cubic CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CDG CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cdg', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download Cubic BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CDG BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cdg', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Cubic CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CDG CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cdg', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP CS1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP CS6', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS6,CS6', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download CDG BE', 'label': 'CDG BE', 'linewidth': 2.0}, {'data': 'TCP download Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP download CDG CS1', 'label': 'CDG CS1'}, {'data': 'TCP download Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload CDG BE', 'label': 'CDG BE', 'linewidth': 2.0}, {'data': 'TCP upload Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP upload CDG CS1', 'label': 'CDG CS1'}, {'data': 'TCP upload Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP CS6', 'label': 'UDP CS6'}, {'data': 'Ping (ms) UDP CS1', 'label': 'UDP CS1'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ]) include("common.inc") ������������������������������flent-2.2.0/flent/tests/cubic_dctcp.conf������������������������������������������������������������0000664�0000000�0000000�00000020425�14670056262�0020221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Cubic VS DCTCP smackdown" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload Cubic BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload dctcp BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'dctcp', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Cubic CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload dctcp CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'dctcp', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download Cubic BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download dctcp BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'dctcp', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Cubic CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download dctcp CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'dctcp', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP CS1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP CS6', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS6,CS6', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download dctcp BE', 'label': 'dctcp BE', 'linewidth': 2.0}, {'data': 'TCP download Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP download dctcp CS1', 'label': 'dctcp CS1'}, {'data': 'TCP download Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload dctcp BE', 'label': 'dctcp BE', 'linewidth': 2.0}, {'data': 'TCP upload Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP upload dctcp CS1', 'label': 'dctcp CS1'}, {'data': 'TCP upload Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP CS6', 'label': 'UDP CS6'}, {'data': 'Ping (ms) UDP CS1', 'label': 'UDP CS1'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ]) include("common.inc") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/cubic_ledbat.conf�����������������������������������������������������������0000664�0000000�0000000�00000017751�14670056262�0020367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Cubic VS Ledbat smackdown" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload Cubic BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Ledbat BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Cubic CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Ledbat CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download Cubic BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Ledbat BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Cubic CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Ledbat CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP CS1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP CS6', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS6,CS6', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download Ledbat BE', 'label': 'Ledbat BE', 'linewidth': 2.0}, {'data': 'TCP download Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP download Ledbat CS1', 'label': 'Ledbat CS1'}, {'data': 'TCP download Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload Ledbat BE', 'label': 'Ledbat BE', 'linewidth': 2.0}, {'data': 'TCP upload Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP upload Ledbat CS1', 'label': 'Ledbat CS1'}, {'data': 'TCP upload Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP CS6', 'label': 'UDP CS6'}, {'data': 'Ping (ms) UDP CS1', 'label': 'UDP CS1'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ]) include("common.inc") �����������������������flent-2.2.0/flent/tests/cubic_ledbat_1.conf���������������������������������������������������������0000664�0000000�0000000�00000002507�14670056262�0020600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Cubic vs LEDBAT upload streams w/ping" DEFAULTS={'PLOT': 'totals'} DATA_SETS = o([ ('TCP cubic', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP ledbat', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ]) PLOTS = o([ ('totals', {'description': 'Bandwidth and ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP cubic', 'label': 'Cubic'}, {'data': 'TCP ledbat', 'label': 'LEDBAT'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},], 'cutoff': (DELAY,-DELAY)}), ]) include("common.inc") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/cubic_reno.conf�������������������������������������������������������������0000664�0000000�0000000�00000020023�14670056262�0020061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Cubic VS Reno smackdown" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload Cubic BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Reno BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Cubic CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Reno CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download Cubic BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Reno BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Cubic CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Reno CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP CS1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP CS6', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS6,CS6', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download Reno BE', 'label': 'Reno BE', 'linewidth': 2.0}, {'data': 'TCP download Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP download Reno CS1', 'label': 'Reno CS1'}, {'data': 'TCP download Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload Reno BE', 'label': 'Reno BE', 'linewidth': 2.0}, {'data': 'TCP upload Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP upload Reno CS1', 'label': 'Reno CS1'}, {'data': 'TCP upload Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP CS6', 'label': 'UDP CS6'}, {'data': 'Ping (ms) UDP CS1', 'label': 'UDP CS1'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ]) include("common.inc") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/cubic_westwood.conf���������������������������������������������������������0000664�0000000�0000000�00000020001�14670056262�0020765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Cubic VS Westwood" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload Cubic BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Westwood BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Cubic CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Westwood CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download Cubic BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Westwood BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Cubic CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Westwood CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP CS1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP CS6', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS6,CS6', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download Westwood BE', 'label': 'Westwood BE', 'linewidth': 2.0}, {'data': 'TCP download Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP download Westwood CS1', 'label': 'Westwood CS1'}, {'data': 'TCP download Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload Westwood BE', 'label': 'Westwood BE', 'linewidth': 2.0}, {'data': 'TCP upload Cubic BE', 'label': 'Cubic BE'}, {'data': 'TCP upload Westwood CS1', 'label': 'Westwood CS1'}, {'data': 'TCP upload Cubic CS1', 'label': 'Cubic CS1'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP CS6', 'label': 'UDP CS6'}, {'data': 'Ping (ms) UDP CS1', 'label': 'UDP CS1'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ]) include("common.inc") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/dash_mixin.inc��������������������������������������������������������������0000664�0000000�0000000�00000002162�14670056262�0017724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- # Mixin include file to add a host to run a DASH client DASH_CONTROL_HOST=get_test_parameter('dash_control_host', 'localhost') DASH_URL=get_test_parameter('dash_url', default=None) if DASH_URL: DATA_SETS['Dash'] = {'length': TOTAL_LENGTH, 'url': DASH_URL, 'host': DASH_CONTROL_HOST, 'units': 'Mbits/s', 'runner': 'dash_js'} PLOTS['dash'] = { 'description': 'Dash media stream', 'type': 'meta', 'subplots': ['dash_throughput', 'dash_buffer']} PLOTS['dash_throughput'] = { 'description': 'Dash throughput', 'type': 'timeseries', 'series': [{'data': 'Dash', 'raw_key': 'val', 'label': 'Throughput'}, {'data': 'Dash', 'raw_key': 'bitrate', 'label': 'Stream bitrate'}]} PLOTS['dash_buffer'] = { 'description': 'Dash buffer length', 'type': 'timeseries', 'axis_labels': ['ms'], 'series': [{'data': 'Dash', 'raw_key': 'buflen', 'label': 'Buffer length'}]} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/dslreports_8dn.conf���������������������������������������������������������0000664�0000000�0000000�00000011226�14670056262�0020730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## DSLreports has a test for bufferbloat. This more or less duplicates ## their current 8 flow test with the (current) exception of not using ## different servers ## it would be nice to have the duplicates be settable on the command line include("netperf_definitions.inc") DESCRIPTION="8 down - dslreports dsl test equivalent" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'duplicates': 8}), ('TCP download avg', {'apply_to': [glob("TCP download BE::*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download BE::*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) TCP BE1', {'test': 'TCP_RR', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms', 'runner': 'netperf_demo'}), ('Ping (ms) TCP BE2', {'test': 'TCP_RR', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms', 'runner': 'netperf_demo'}), ('Ping (ms) TCP BE3', {'test': 'TCP_RR', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms', 'runner': 'netperf_demo'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': glob('TCP download BE::*'), 'label': 'BE'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) TCP BE1', 'label': 'TCP BE1'}, {'data': 'Ping (ms) TCP BE2', 'label': 'TCP BE2'}, {'data': 'Ping (ms) TCP BE3', 'label': 'TCP BE3'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'ping_scaled')}), ('all', {'description': 'Download, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ]) include("common.inc") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/http-1down.conf�������������������������������������������������������������0000664�0000000�0000000�00000004516�14670056262�0017767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("http.conf") DESCRIPTION="HTTP get latency with competing TCP download stream" DEFAULTS={'PLOT': 'totals'} TOTAL_LENGTH=LENGTH+2*DELAY DATA_SETS['TCP download'] = {'test': 'TCP_MEARTS', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'} PLOTS['bandwidth'] = {'description': 'TCP bandwidth plot', 'type': 'timeseries', 'series': [{'data': 'TCP download', 'label': 'TCP download'},]} PLOTS['totals'] = {'description': 'TCP bandwidth with delay and jitter', 'type': 'meta', 'subplots': ('bandwidth', 'http_delay')} PLOTS['http_delay_cdf']['cutoff'] = (DELAY,-DELAY) PLOTS['box_combine'] = {'description': 'Box combination of HTTP latency and TCP bandwidth', 'type': 'box_combine', 'axis_labels': ['Mean bandwidth (MBits/s)', 'Mean download time (ms)'], 'dual_axes': True, 'series': [ {'data': 'TCP download', 'label': 'TCP Download', 'combine_mode': 'mean'}, {'data': 'HTTP latency', 'label': 'HTTP get (ms)', 'combine_mode': 'mean', 'axis': 2}]} PLOTS['cdf_combine'] = {'description': 'CDF combination of HTTP latency', 'type': 'cdf_combine', 'axis_labels': ['Mean download time (ms)'], 'series': [ {'data': 'HTTP latency', 'label': 'HTTP get (ms)', 'combine_mode': 'mean'}]} PLOTS['bar_combine'] = {'description': 'Bar combination of HTTP latency', 'type': 'bar_combine', 'group_by': 'both', 'colour_mode': 'series', 'axis_labels': ['Mean fetch time (ms)'], 'series': [ {'data': 'HTTP latency', 'label': 'HTTP get (ms)', 'combine_mode': 'mean'}]} include("common.inc") ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/http-1up.conf���������������������������������������������������������������0000664�0000000�0000000�00000004502�14670056262�0017437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("http.conf") DESCRIPTION="HTTP get latency with competing TCP upload stream" DEFAULTS={'PLOT': 'totals'} TOTAL_LENGTH=LENGTH+2*DELAY DATA_SETS['TCP upload'] = {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'} PLOTS['bandwidth'] = {'description': 'TCP bandwidth plot', 'type': 'timeseries', 'series': [{'data': 'TCP upload', 'label': 'TCP upload'},]} PLOTS['totals'] = {'description': 'TCP bandwidth with delay and jitter', 'type': 'meta', 'subplots': ('bandwidth', 'http_delay')} PLOTS['http_delay_cdf']['cutoff'] = (DELAY,-DELAY) PLOTS['box_combine'] = {'description': 'Box combination of HTTP latency and TCP bandwidth', 'type': 'box_combine', 'axis_labels': ['Mean bandwidth (MBits/s)', 'Mean download time (ms)'], 'dual_axes': True, 'series': [ {'data': 'TCP upload', 'label': 'TCP Upload', 'combine_mode': 'mean'}, {'data': 'HTTP latency', 'label': 'HTTP get (ms)', 'combine_mode': 'mean', 'axis': 2}]} PLOTS['cdf_combine'] = {'description': 'CDF combination of HTTP latency', 'type': 'cdf_combine', 'axis_labels': ['Mean download time (ms)'], 'series': [ {'data': 'HTTP latency', 'label': 'HTTP get (ms)', 'combine_mode': 'mean'}]} PLOTS['bar_combine'] = {'description': 'Bar combination of HTTP latency', 'type': 'bar_combine', 'group_by': 'both', 'colour_mode': 'series', 'axis_labels': ['Mean fetch time (ms)'], 'series': [ {'data': 'HTTP latency', 'label': 'HTTP get (ms)', 'combine_mode': 'mean'}]} include("common.inc") ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/http-rrul.conf��������������������������������������������������������������0000664�0000000�0000000�00000003633�14670056262�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("rrul_be.conf") DATA_SETS_RRUL = DATA_SETS PLOTS_RRUL = PLOTS include("http.conf") DESCRIPTION="HTTP get latency with competing RRUL test" DEFAULTS={'PLOT': 'totals_delay'} TOTAL_LENGTH=LENGTH+2*DELAY DATA_SETS.update(DATA_SETS_RRUL) PLOTS.update(PLOTS_RRUL) PLOTS['http_delay_cdf']['cutoff'] = (DELAY,-DELAY) PLOTS['ping_delay'] = {'description': 'RRUL Ping and HTTP delay', 'type': 'timeseries', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) avg', 'label': 'Average ping RTT', 'color': 'blue'}, {'data': 'HTTP latency', 'label': 'HTTP get (ms)'},]} PLOTS['totals_delay'] = {'description': 'Total TCP bandwidth with ping and HTTP delay', 'type': 'meta', 'subplots': ('totals_bandwidth', 'ping_delay')} PLOTS['cdf_combine'] = {'description': 'CDF combination of HTTP latency', 'type': 'cdf_combine', 'axis_labels': ['Mean download time (ms)'], 'series': [ {'data': 'HTTP latency', 'label': 'HTTP get (ms)', 'combine_mode': 'mean'}]} PLOTS['bar_combine'] = {'description': 'Bar combination of HTTP latency', 'type': 'bar_combine', 'group_by': 'both', 'colour_mode': 'series', 'axis_labels': ['Mean fetch time (ms)'], 'series': [ {'data': 'HTTP latency', 'label': 'HTTP get (ms)', 'combine_mode': 'mean'}]} include("common.inc") �����������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/http.conf�������������������������������������������������������������������0000664�0000000�0000000�00000000355�14670056262�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- AGGREGATOR='timeseries' DESCRIPTION="HTTP latency test" DEFAULTS={'PLOT': 'http_delay'} TOTAL_LENGTH=LENGTH DATA_SETS = o() PLOTS = o() HTTP_CUTOFF=(0,0) include("http.inc") include("common.inc") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/http.inc��������������������������������������������������������������������0000664�0000000�0000000�00000002625�14670056262�0016564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- urllist = HTTP_GETTER_URLLIST if not urllist: urllist = [None] elif not isinstance(urllist, list): urllist = [urllist] if len(urllist) == 1: keys = ['HTTP latency'] else: keys = ['HTTP latency::{}'.format(i+1) for i in range(len(urllist))] for k, url_file in zip(keys, urllist): DATA_SETS[k] = {'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'units': 'ms', 'runner': 'http_getter', 'url_file': url_file} PLOTS['http_delay'] = {'description': 'HTTP latency over time', 'type': 'timeseries', 'series': [{'data': glob('HTTP latency**'), 'label': 'HTTP get (ms)'}]} PLOTS['http_delay_cdf'] = {'description': 'Latency CDF plot', 'type': 'cdf', 'cutoff': HTTP_CUTOFF, 'parent': 'http_delay'} PLOTS['http_box_combine'] = {'description': 'Box combination of HTTP latency', 'type': 'box_combine', 'axis_labels': ['Mean download time (s)'], 'cutoff': HTTP_CUTOFF, 'series': [{'data': glob('HTTP latency**'), 'label': 'HTTP get (ms)', 'combine_mode': 'raw_mean'}]} �����������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/http_mixin.inc��������������������������������������������������������������0000664�0000000�0000000�00000000272�14670056262�0017764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- # Mixin include file to add a HTTP test HTTP_CUTOFF=(DELAY,-DELAY) if get_test_parameter('include_http', default=False): include("http.inc") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/iterated_bidirectional.conf�������������������������������������������������0000664�0000000�0000000�00000001553�14670056262�0022451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- DESCRIPTION="Iterated TCP bidirectional transfers example" DEFAULTS={'PLOT': 'box'} AGGREGATOR='iteration' ITERATIONS=3 DATA_SETS = o([ ('TCP download', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'process'}), ('TCP upload', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'process'}), ]) PLOTS = o([ ('box', {'description': 'Box type plot', 'type': 'box', 'series': [{'data': 'TCP download', 'label': 'Download'}, {'data': 'TCP upload', 'label': 'Upload'},]}), ('timeseries', {'description': 'Timeseries type plot', 'parent': 'box', 'type': 'timeseries'}), ]) �����������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/ledbat_cubic_1.conf���������������������������������������������������������0000664�0000000�0000000�00000002507�14670056262�0020600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Cubic vs LEDBAT upload streams w/ping" DEFAULTS={'PLOT': 'totals'} DATA_SETS = o([ ('TCP ledbat', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP cubic', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ]) PLOTS = o([ ('totals', {'description': 'Bandwidth and ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP cubic', 'label': 'Cubic'}, {'data': 'TCP ledbat', 'label': 'LEDBAT'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},], 'cutoff': (DELAY,-DELAY)}), ]) include("common.inc") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/netperf_definitions.inc�����������������������������������������������������0000664�0000000�0000000�00000000134�14670056262�0021634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- AGGREGATOR='timeseries' TOTAL_LENGTH=LENGTH+2*DELAY ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/netstat.inc�����������������������������������������������������������������0000664�0000000�0000000�00000000744�14670056262�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- # Mixin include file to add netstat output to a test NETSTAT_HOSTS=get_test_parameter('netstat_hosts', default=[], split=True) for host in NETSTAT_HOSTS: DATA_SETS['netstat_%s' % host] = {'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': host, 'units': 'misc', 'runner': 'netstat'} ����������������������������flent-2.2.0/flent/tests/ping.conf�������������������������������������������������������������������0000664�0000000�0000000�00000001525�14670056262�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- AGGREGATOR='timeseries' DESCRIPTION="Ping test (ICMP and UDP)" DEFAULTS={'PLOT': 'ping'} TOTAL_LENGTH=LENGTH DATA_SETS = o([ ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping', 'id': 'ICMP'}), ('Ping (ms) UDP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'udp_rtt', 'id': 'UDP'}), ]) PLOTS = o([ ('ping', {'description': 'Ping plot over time', 'type': 'timeseries', 'series': [{'data': glob('Ping (ms) *'), 'label': 'Ping (ms)'}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'parent': 'ping'}) ]) include("common.inc") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/ping.inc��������������������������������������������������������������������0000664�0000000�0000000�00000004004�14670056262�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- # Mixin include file to add extra hosts to ping PING_HOSTS=get_test_parameter('ping_hosts', default=[], split=True) PING_LOCAL_BINDS=get_test_parameter('ping_local_binds', default=[], split=True) PING_MARKINGS=get_test_parameter('ping_markings', default=[], split=True) for host, local_bind, marking in zip_longest(PING_HOSTS, PING_LOCAL_BINDS, PING_MARKINGS): if not host: break DATA_SETS['Ping (ms) ICMP %s (extra)' % host] = {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': host, 'local_bind': local_bind, 'marking': marking, 'units': 'ms', 'id': '%s ICMP' % host, 'runner': 'ping'} if PING_HOSTS: PLOTS['ping_extra'] = {'description': 'Extra ping hosts', 'type': 'timeseries', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': glob('Ping (ms) ICMP * (extra)'), 'label': 'Ping (ms)'}, ]} PLOTS['ping_extra_combine'] = {'description': 'Extra ping hosts (combine)', 'type': 'cdf_combine', 'group_by': 'groups_concat', 'cutoff': (DELAY,-DELAY), 'axis_labels': ['Latency (ms)'], 'series': [ {'data': glob('Ping (ms) ICMP * (extra)'), 'label': 'Ping (ms)'}, ]} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/qdisc-stats.conf������������������������������������������������������������0000664�0000000�0000000�00000003271�14670056262�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## qdisc-stats AGGREGATOR='timeseries' TOTAL_LENGTH=LENGTH DESCRIPTION="Capture qdisc stats" DEFAULTS={'PLOT': 'backlog'} DATA_SETS = o([ ('qdisc-stats', {'interface': TEST_PARAMETERS.get('interface'), 'interval': STEP_SIZE, 'length': LENGTH, 'units': 'ms', 'runner': 'tc'}), ('qdisc-stats::backlog_pkts', {'units': 'packets', 'runner': 'null'}), ('qdisc-stats::backlog_bytes', {'units': 'bytes', 'runner': 'null'}), ('qdisc-stats::dropped', {'units': 'packets', 'runner': 'null'}), ('qdisc-stats::ecn_mark', {'units': 'packets', 'runner': 'null'}), ('qdisc-stats::delay', {'units': 'ms', 'runner': 'null'}), ]) PLOTS = o([ ('backlog', {'description': 'Queue backlog', 'type': 'timeseries', 'axis_labels': ['Packets', 'Bytes'], 'dual_axes': True, 'series': [ {'data': 'qdisc-stats::backlog_pkts', 'label': 'Backlog (packets)'}, {'data': 'qdisc-stats::backlog_bytes', 'label': 'Backlog (bytes)', 'axis': 2}, ]}), ('drops', {'description': 'Packet drops', 'type': 'timeseries', 'axis_labels': ['Packets'], 'series': [ {'data': 'qdisc-stats::dropped', 'label': 'Drops', 'linestyle': '', 'marker': 'x'}, {'data': 'qdisc-stats::ecn_mark', 'label': 'ECN marks', 'linestyle': '', 'marker': 'o'}, ]}), ('delay', {'description': 'Queue delay', 'type': 'timeseries', 'axis_labels': ['Queueing delay (ms)'], 'series': [ {'data': 'qdisc-stats::delay', 'label': 'Queue delay'} ]}), ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/qdisc_stats.inc�������������������������������������������������������������0000664�0000000�0000000�00000004625�14670056262�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- # Mixin include file to add qdisc stats to a test QDISC_STATS_HOSTS=get_test_parameter('qdisc_stats_hosts', default=[], split=True) QDISC_STATS_IFACES=get_test_parameter('qdisc_stats_interfaces', default=[], split=True) for host,iface in zip(QDISC_STATS_HOSTS, QDISC_STATS_IFACES): id = "%s (%s)" % (host, iface) DATA_SETS['qdisc_stats_%s' % host] = {'interface': iface, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': host, 'id': id, 'units': 'misc', 'runner': 'tc'} DATA_SETS['qdisc_stats_%s::dropped' % host] = {'units': 'packets', 'runner': 'null', 'id': id} DATA_SETS['qdisc_stats_%s::ecn_mark' % host] = {'units': 'packets', 'runner': 'null', 'id': id} if QDISC_STATS_HOSTS: PLOTS['backlog'] = {'description': 'Queue backlog', 'type': 'timeseries', 'axis_labels': ['Bytes'], 'series': [ {'data': glob('qdisc_stats_*'), 'raw_key': 'backlog_bytes', 'label': 'Backlog (bytes)'}, ]} PLOTS['drops'] = {'description': 'Packet drops', 'type': 'timeseries', 'axis_labels': ['Packets'], 'series': [ {'data': glob('qdisc_stats_*'), 'label': 'Drops', 'raw_key': 'dropped', 'linestyle': '', 'marker': 'x'}, {'data': glob('qdisc_stats_*'), 'label': 'ECN marks', 'raw_key': 'ecn_mark', 'linestyle': '', 'marker': 'o'} ]} PLOTS['delay'] = {'description': 'Queue delay', 'type': 'timeseries', 'axis_labels': ['Queueing delay (ms)'], 'series': [ {'data': glob('qdisc_stats_*'), 'raw_key': 'delay', 'label': 'Queue delay'} ]} �����������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/reno_cubic_westwood_cdg.conf������������������������������������������������0000664�0000000�0000000�00000015073�14670056262�0022642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load\n(with different congestion control algs)" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload RENO', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload WESTWOOD', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CUBIC', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CDG', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'cdg', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download RENO', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download WESTWOOD', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CUBIC', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CDG', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'cdg', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP EF', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'EF,EF', 'units': 'ms'}), ('Ping (ms) UDP BK', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download RENO', 'label': 'RENO', 'linewidth': 2.0}, {'data': 'TCP download WESTWOOD', 'label': 'WESTWOOD'}, {'data': 'TCP download CUBIC', 'label': 'CUBIC'}, {'data': 'TCP download CDG', 'label': 'CDG'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload RENO', 'label': 'RENO', 'linewidth': 2.0}, {'data': 'TCP upload WESTWOOD', 'label': 'WESTWOOD'}, {'data': 'TCP upload CUBIC', 'label': 'CUBIC'}, {'data': 'TCP upload CDG', 'label': 'CDG'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'series': [{'data': 'Ping (ms) UDP EF', 'label': 'UDP EF'}, {'data': 'Ping (ms) UDP BK', 'label': 'UDP BK'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ]) include("common.inc") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/reno_cubic_westwood_ledbat.conf���������������������������������������������0000664�0000000�0000000�00000015123�14670056262�0023334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load\n(with different congestion control algs)" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload RENO', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload WESTWOOD', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CUBIC', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload LEDBAT', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download RENO', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download WESTWOOD', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CUBIC', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download LEDBAT', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP EF', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'EF,EF', 'units': 'ms'}), ('Ping (ms) UDP BK', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download RENO', 'label': 'RENO', 'linewidth': 2.0}, {'data': 'TCP download WESTWOOD', 'label': 'WESTWOOD'}, {'data': 'TCP download CUBIC', 'label': 'CUBIC'}, {'data': 'TCP download LEDBAT', 'label': 'LEDBAT'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload RENO', 'label': 'RENO', 'linewidth': 2.0}, {'data': 'TCP upload WESTWOOD', 'label': 'WESTWOOD'}, {'data': 'TCP upload CUBIC', 'label': 'CUBIC'}, {'data': 'TCP upload LEDBAT', 'label': 'LEDBAT'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'series': [{'data': 'Ping (ms) UDP EF', 'label': 'UDP EF'}, {'data': 'Ping (ms) UDP BK', 'label': 'UDP BK'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ]) include("common.inc") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/reno_cubic_westwood_lp.conf�������������������������������������������������0000664�0000000�0000000�00000015063�14670056262�0022517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load\n(with different congestion control algs)" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload RENO', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload WESTWOOD', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CUBIC', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload LP', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'cong_control': 'lp', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download RENO', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'reno', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download WESTWOOD', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'westwood', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CUBIC', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download LP', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'lp', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP EF', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'EF,EF', 'units': 'ms'}), ('Ping (ms) UDP BK', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download RENO', 'label': 'RENO', 'linewidth': 2.0}, {'data': 'TCP download WESTWOOD', 'label': 'WESTWOOD'}, {'data': 'TCP download CUBIC', 'label': 'CUBIC'}, {'data': 'TCP download LP', 'label': 'LP'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload RENO', 'label': 'RENO', 'linewidth': 2.0}, {'data': 'TCP upload WESTWOOD', 'label': 'WESTWOOD'}, {'data': 'TCP upload CUBIC', 'label': 'CUBIC'}, {'data': 'TCP upload LP', 'label': 'LP'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'series': [{'data': 'Ping (ms) UDP EF', 'label': 'UDP EF'}, {'data': 'Ping (ms) UDP BK', 'label': 'UDP BK'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ]) include("common.inc") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul.conf�������������������������������������������������������������������0000664�0000000�0000000�00000025352�14670056262�0016747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'id': 'BE'}), ('TCP upload BK', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'id': 'BK'}), ('TCP upload CS5', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS5,CS5', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'id': 'CS5'}), ('TCP upload EF', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'EF,EF', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'id': 'EF'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'id': 'Avg', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BK', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CS5', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS5,CS5', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download EF', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'EF,EF', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP totals', {'apply_to': [glob("TCP*", exclude=["TCP download avg", "TCP download sum", "TCP upload avg", "TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP EF', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'EF,EF', 'units': 'ms', 'id': '%s UDP EF' % HOST}), ('Ping (ms) UDP BK', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms', 'id': '%s UDP BK' % HOST}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'id': '%s UDP BE' % HOST}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping', 'id': '%s ICMP' % HOST}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download BE', 'label': 'BE'}, {'data': 'TCP download BK', 'label': 'BK'}, {'data': 'TCP download CS5', 'label': 'CS5'}, {'data': 'TCP download EF', 'label': 'EF'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload BE', 'label': 'BE'}, {'data': 'TCP upload BK', 'label': 'BK'}, {'data': 'TCP upload CS5', 'label': 'CS5'}, {'data': 'TCP upload EF', 'label': 'EF'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': glob('Ping (ms)*', exclude=['Ping (ms) avg']), 'label': ''}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': glob('Ping (ms) ICMP*'), 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals_bandwidth', {'description': 'Total bandwidth', 'type': 'timeseries', 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}]}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('icmp_combine', {'description': 'Combined ICMP ping plot', 'parent': 'icmp_cdf', 'type': 'timeseries_combine', 'group_by': 'groups_points', 'cutoff': None}), ('box_combine', {'description': 'Box plot of averages of several data files.', 'type': 'box_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('box_combine_up', {'description': 'Box plot of averages of several data files - Upload.', 'type': 'box_combine', 'group_by': 'series', 'series': [{'data': glob('TCP upload *', exclude=["TCP upload sum"]), 'combine_mode': 'mean', 'label': None}]}), ('box_combine_down', {'description': 'Box plot of averages of several data files - Download.', 'type': 'box_combine', 'group_by': 'series', 'series': [{'data': glob('TCP download *', exclude=["TCP download sum"]), 'combine_mode': 'mean', 'label': None}]}), ('bar_combine_up', {'description': 'Bar plot of averages of several data files - Upload.', 'type': 'bar_combine', 'parent': 'box_combine_up'}), ('bar_combine_down', {'description': 'Bar plot of averages of several data files - Download.', 'type': 'bar_combine', 'parent': 'box_combine_down'}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ('ellipsis', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP upload sum', 'label': 'Upload (Mbps)'} ]}), ('ellipsis_down', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('ellipsis_sum', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP totals', 'label': 'Throughput (Mbps)'} ]}), ]) include("common.inc") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul46.conf�����������������������������������������������������������������0000664�0000000�0000000�00000002666�14670056262�0017124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul46 test specification IP_VERSION=6 include("rrul.conf") DESCRIPTION="Realtime Response Under Load - Mixed IPv4/6" # make some of the netperf use IPv4 DATA_SETS['TCP upload BE']['ip_version'] = 4 DATA_SETS['TCP upload BK']['ip_version'] = 4 DATA_SETS['TCP download BE']['ip_version'] = 4 DATA_SETS['TCP download BK']['ip_version'] = 4 DATA_SETS['Ping (ms) UDP BE']['ip_version'] = 4 DATA_SETS['Ping (ms) UDP BK']['ip_version'] = 4 DATA_SETS['Ping (ms) ICMP']['ip_version'] = 6 # the 46 test uses different UDP pings, so remove some and add some in del DATA_SETS['Ping (ms) UDP EF'] DATA_SETS['Ping (ms) UDP6 BE'] = {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'ip_version': 6} DATA_SETS['Ping (ms) UDP6 BK'] = {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms', 'ip_version': 6} # the ping plot should use the new data set names PLOTS['ping']['series'] = [ {'data': 'Ping (ms) UDP BK', 'label': 'UDP BK'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) UDP6 BK', 'label': 'UDP6 BK'}, {'data': 'Ping (ms) UDP6 BE', 'label': 'UDP6 BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}] ��������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul46compete.conf����������������������������������������������������������0000664�0000000�0000000�00000017117�14670056262�0020476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load - Mixed v4/v6 compete" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'ip_version': 4, 'delay': DELAY + 2, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BK', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'ip_version': 4, 'delay': DELAY + 1, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload 6BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'ip_version': 6, 'delay': DELAY + 4, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload 6BK', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'ip_version': 6, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download BK', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'ip_version': 4, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download 6BK', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'ip_version': 6, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'ip_version': 4, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download 6BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'ip_version': 6, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP 6EF', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'EF,EF', 'ip_version': 6, 'units': 'ms'}), ('Ping (ms) UDP 6BK', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'ip_version': 6, 'units': 'ms'}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'ip_version': 4, 'units': 'ms'}), ('Ping (ms) UDP 6BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'ip_version': 6, 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': 4, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP6', {'ip_version': 6, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download BE', 'label': 'BE', 'linewidth': 2.0}, {'data': 'TCP download 6BE', 'label': '6BE'}, {'data': 'TCP download BK', 'label': 'BK'}, {'data': 'TCP download 6BK', 'label': '6BK'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload BE', 'label': 'BE', 'linewidth': 2.0}, {'data': 'TCP upload 6BE', 'label': '6BE'}, {'data': 'TCP upload BK', 'label': 'BK'}, {'data': 'TCP upload 6BK', 'label': '6BK'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP 6EF', 'label': 'UDP6 EF'}, {'data': 'Ping (ms) UDP 6BK', 'label': 'UDP6 BK'}, {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) UDP 6BE', 'label': 'UDP6 BE'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) ICMP6', 'label': 'ICMP6'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of total bandwidth', 'parent': 'totals', 'type': 'box',}), ]) include("common.inc") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_100_up.conf������������������������������������������������������������0000664�0000000�0000000�00000013216�14670056262�0020027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="100 up vs 1 down - exclusively Best Effort" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'duplicates': 100}), ('TCP upload avg', {'apply_to': [glob("TCP upload BE::*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload BE::*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP BE2', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP BE3', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download BE', 'label': 'BE'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': glob('TCP upload BE::*'), 'label': 'BE'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP BE1', 'label': 'UDP BE1'}, {'data': 'Ping (ms) UDP BE2', 'label': 'UDP BE2'}, {'data': 'Ping (ms) UDP BE3', 'label': 'UDP BE3'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ]) include("common.inc") ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_50_down.conf�����������������������������������������������������������0000664�0000000�0000000�00000013222�14670056262�0020273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="50 down vs 1 up - exclusively Best Effort" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'duplicates': 50}), ('TCP download avg', {'apply_to': [glob("TCP download BE::*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download BE::*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP BE2', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP BE3', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': glob('TCP download BE::*'), 'label': 'BE'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload BE', 'label': 'BE', }, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP BE1', 'label': 'UDP BE1'}, {'data': 'Ping (ms) UDP BE2', 'label': 'UDP BE2'}, {'data': 'Ping (ms) UDP BE3', 'label': 'UDP BE3'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ]) include("common.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_50_up.conf�������������������������������������������������������������0000664�0000000�0000000�00000013214�14670056262�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="50 up vs 1 down - exclusively Best Effort" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'duplicates': 50}), ('TCP upload avg', {'apply_to': [glob("TCP upload BE::*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload BE::*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP BE2', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP BE3', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download BE', 'label': 'BE'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': glob('TCP upload BE::*'), 'label': 'BE'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP BE1', 'label': 'UDP BE1'}, {'data': 'Ping (ms) UDP BE2', 'label': 'UDP BE2'}, {'data': 'Ping (ms) UDP BE3', 'label': 'UDP BE3'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ]) include("common.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_be.conf����������������������������������������������������������������0000664�0000000�0000000�00000034104�14670056262�0017410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load - exclusively Best Effort" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE2', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE3', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE4', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BE2', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BE3', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BE4', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP totals', {'apply_to': [glob("TCP*", exclude=["TCP download avg", "TCP download sum", "TCP upload avg", "TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms', 'id': '%s UDP BE1' % HOST}), ('Ping (ms) UDP BE2', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms', 'id': '%s UDP BE1' % HOST}), ('Ping (ms) UDP BE3', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms', 'id': '%s UDP BE1' % HOST}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping', 'id': '%s ICMP' % HOST}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download BE', 'label': 'BE'}, {'data': 'TCP download BE2', 'label': 'BE2'}, {'data': 'TCP download BE3', 'label': 'BE3'}, {'data': 'TCP download BE4', 'label': 'BE4'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload BE', 'label': 'BE'}, {'data': 'TCP upload BE2', 'label': 'BE2'}, {'data': 'TCP upload BE3', 'label': 'BE3'}, {'data': 'TCP upload BE4', 'label': 'BE4'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('tcp_delivery_rate', {'description': 'TCP upload (delivery rate)', 'type': 'timeseries', 'legend_title': 'TCP upload (delivery rate)', 'series': [{'data': 'TCP upload BE', 'raw_key': 'tcp_delivery_rate', 'label': 'BE'}, {'data': 'TCP upload BE2', 'raw_key': 'tcp_delivery_rate', 'label': 'BE2'}, {'data': 'TCP upload BE3', 'raw_key': 'tcp_delivery_rate', 'label': 'BE3'}, {'data': 'TCP upload BE4', 'raw_key': 'tcp_delivery_rate', 'label': 'BE4'}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': glob('Ping (ms)*', exclude=['Ping (ms) avg']), 'label': ''}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': glob('Ping (ms) ICMP*'), 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('icmp_combine', {'description': 'Combined ICMP ping plot', 'parent': 'icmp_cdf', 'type': 'timeseries_combine', 'group_by': 'groups_points', 'cutoff': None}), ('totals_bandwidth', {'description': 'Total bandwidth', 'type': 'timeseries', 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}]}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('totals_combine', {'description': 'Combined total bandwidth and average ping plot', 'parent': 'totals', 'type': 'timeseries_combine', 'group_by': 'groups_points'}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all_scaled_delivery', {'description': 'Download, TCP delivery rate, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'tcp_delivery_rate', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('bar_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'bar',}), ('box_combine', {'description': 'Box plot of averages of several data files.', 'type': 'box_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('bar_combine', {'description': 'Bar plot of averages of several data files.', 'type': 'bar_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('box_ping_combine', {'description': 'Combination box plot of ping times', 'type': 'box_combine', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'Ping (ms) avg', 'label': 'Ping (ms) avg'}]}), ('tcp_delivery_with_rtt', {'description': 'TCP delivery rate with ping and TCP RTT', 'type': 'timeseries', 'dual_axes': True, 'series': [ {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_delivery_rate', 'label': 'Delivery rate'}, {'data': glob('Ping (ms) *'), 'label': 'Ping (ms)', 'axis': 2}, {'data': glob('TCP**', exclude=['*fairness*']), 'axis': 2, 'raw_key': 'tcp_rtt', 'label': 'TCP RTT'}]}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ('ellipsis', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ('ellipsis_down', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [ {'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('ellipsis_sum', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP totals', 'label': 'Throughput (Mbps)'} ]}), ('ellipsis_combine', {'description': 'Ellipsis plot of averages of several data files.', 'type': 'ellipsis_combine', 'axis_labels': ['Mean induced latency (ms)', 'Mean TCP goodput (Mbit/s)'], 'series': [{'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, ]}), ('ellipsis_combine_both', {'description': 'Ellipsis plot of averages of several data files -- upload *and* download plotted.', 'type': 'ellipsis_combine', 'axis_labels': ['Mean induced latency (ms)', 'Mean TCP goodput (Mbit/s)'], 'series': [{'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, ]}), ('cdf_combine', {'description': 'CDF plot of averages of several data files.', 'type': 'cdf_combine', 'group_by': 'groups_concat', 'axis_labels': ['Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'span',} ]}), ]) include("common.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_be_iperf.conf����������������������������������������������������������0000664�0000000�0000000�00000000601�14670056262�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("rrul_be.conf") DESCRIPTION="Realtime Response Under Load - exclusively Best Effort (Iperf TCP)" for k,d in DATA_SETS.items(): if d['runner'] == 'netperf_demo': if d['units'] == 'Mbits/s' and 'upload' in k: d['runner'] = 'iperf_csv' d['interval'] = STEP_SIZE d['ip_version'] = IP_VERSION �������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_be_nflows.conf���������������������������������������������������������0000664�0000000�0000000�00000025425�14670056262�0021006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load - Best Effort, configurable no of flows" DEFAULTS={'PLOT': "all_scaled"} STREAMS_UP=get_test_parameter('upload_streams') STREAMS_DOWN=get_test_parameter('download_streams') DATA_SETS = o([ ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'duplicates': STREAMS_UP}), ('TCP upload avg', {'apply_to': [glob("TCP upload BE::*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload BE::*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'duplicates': STREAMS_DOWN}), ('TCP download avg', {'apply_to': [glob("TCP download BE::*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download BE::*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP totals', {'apply_to': [glob("TCP * BE::*", exclude=["TCP download avg", "TCP download sum", "TCP upload avg", "TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': glob('TCP download BE::*'), 'label': 'BE'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': glob('TCP upload BE::*'), 'label': 'BE'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP BE', 'label': 'UDP BE1'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('icmp_combine', {'description': 'Combined ICMP ping plot', 'parent': 'icmp_cdf', 'type': 'timeseries_combine', 'group_by': 'groups_points', 'cutoff': None}), ('totals_bandwidth', {'description': 'Total bandwidth', 'type': 'timeseries', 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}]}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('totals_combine', {'description': 'Combined total bandwidth and average ping plot', 'parent': 'totals', 'type': 'timeseries_combine', 'group_by': 'groups_points'}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('bar_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'bar',}), ('box_combine', {'description': 'Box plot of averages of several data files.', 'type': 'box_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('bar_combine', {'description': 'Bar plot of averages of several data files.', 'type': 'bar_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ('ellipsis', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ('ellipsis_down', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [ {'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('ellipsis_sum', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP totals', 'label': 'Throughput (Mbps)'} ]}), ('ellipsis_combine', {'description': 'Ellipsis plot of averages of several data files.', 'type': 'ellipsis_combine', 'axis_labels': ['Mean induced latency (ms)', 'Mean TCP goodput (Mbit/s)'], 'series': [{'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, ]}), ('ellipsis_combine_both', {'description': 'Ellipsis plot of averages of several data files -- upload *and* download plotted.', 'type': 'ellipsis_combine', 'axis_labels': ['Mean induced latency (ms)', 'Mean TCP goodput (Mbit/s)'], 'series': [{'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, ]}), ('cdf_combine', {'description': 'CDF plot of averages of several data files.', 'type': 'cdf_combine', 'group_by': 'groups_concat', 'axis_labels': ['Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'span',} ]}), ]) include("common.inc") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_cs8.conf���������������������������������������������������������������0000664�0000000�0000000�00000032106�14670056262�0017517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load CS8, one flow per CS/precedence level" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload CS0_BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CS1_BK', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CS2', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS2,CS2', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CS3', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS3,CS3', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CS4', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS4,CS4', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CS5', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS5,CS5', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CS6', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS6,CS6', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CS7', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS7,CS7', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download CS0_BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CS1_BK', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CS2', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS2,CS2', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CS3', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS3,CS3', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CS4', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS4,CS4', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CS5', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS5,CS5', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CS6', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS6,CS6', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CS7', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS7,CS7', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP totals', {'apply_to': [glob("TCP*", exclude=["TCP download avg", "TCP download sum", "TCP upload avg", "TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP CS7', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS7,CS7', 'units': 'ms'}), ('Ping (ms) UDP CS6', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS6,CS6', 'units': 'ms'}), ('Ping (ms) UDP CS5', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS5,CS5', 'units': 'ms'}), ('Ping (ms) UDP CS4', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS4,CS4', 'units': 'ms'}), ('Ping (ms) UDP CS3', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS3,CS3', 'units': 'ms'}), ('Ping (ms) UDP CS2', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS2,CS2', 'units': 'ms'}), ('Ping (ms) UDP CS1_BK', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP CS0_BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download CS0_BE', 'label': 'CS0_BE'}, {'data': 'TCP download CS1_BK', 'label': 'CS1_BK'}, {'data': 'TCP download CS2', 'label': 'CS2'}, {'data': 'TCP download CS3', 'label': 'CS3'}, {'data': 'TCP download CS4', 'label': 'CS4'}, {'data': 'TCP download CS5', 'label': 'CS5'}, {'data': 'TCP download CS6', 'label': 'CS6'}, {'data': 'TCP download CS7', 'label': 'CS7'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload CS0_BE', 'label': 'CS0_BE'}, {'data': 'TCP upload CS1_BK', 'label': 'CS1_BK'}, {'data': 'TCP upload CS2', 'label': 'CS2'}, {'data': 'TCP upload CS3', 'label': 'CS3'}, {'data': 'TCP upload CS4', 'label': 'CS4'}, {'data': 'TCP upload CS5', 'label': 'CS5'}, {'data': 'TCP upload CS6', 'label': 'CS6'}, {'data': 'TCP upload CS7', 'label': 'CS7'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': 'Ping (ms) UDP CS0_BE', 'label': 'UDP CS0_BE'}, {'data': 'Ping (ms) UDP CS1_BK', 'label': 'UDP CS1_BK'}, {'data': 'Ping (ms) UDP CS2', 'label': 'UDP CS2'}, {'data': 'Ping (ms) UDP CS3', 'label': 'UDP CS3'}, {'data': 'Ping (ms) UDP CS4', 'label': 'UDP CS4'}, {'data': 'Ping (ms) UDP CS5', 'label': 'UDP CS5'}, {'data': 'Ping (ms) UDP CS6', 'label': 'UDP CS6'}, {'data': 'Ping (ms) UDP CS7', 'label': 'UDP CS7'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals_bandwidth', {'description': 'Total bandwidth', 'type': 'timeseries', 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}]}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('icmp_combine', {'description': 'Combined ICMP ping plot', 'parent': 'icmp_cdf', 'type': 'timeseries_combine', 'group_by': 'groups_points', 'cutoff': None}), ('box_combine', {'description': 'Box plot of averages of several data files.', 'type': 'box_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ('ellipsis', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP upload sum', 'label': 'Upload (Mbps)'} ]}), ('ellipsis_down', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('ellipsis_sum', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP totals', 'label': 'Throughput (Mbps)'} ]}), ]) include("common.inc") ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_icmp.conf��������������������������������������������������������������0000664�0000000�0000000�00000000614�14670056262�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("rrul_be.conf") DESCRIPTION="Realtime Response Under Load - Best Effort, only ICMP ping" DEFAULTS={'PLOT': "all"} del DATA_SETS['Ping (ms) UDP BE1'] del DATA_SETS['Ping (ms) UDP BE2'] del DATA_SETS['Ping (ms) UDP BE3'] PLOTS['ping']['series'] = [{'data': 'Ping (ms) ICMP', 'label': 'ICMP'}] ��������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_noclassification.conf��������������������������������������������������0000664�0000000�0000000�00000017427�14670056262�0022363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load - no classification on data flows" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE2', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE3', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload BE4', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BE2', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BE3', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download BE4', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP EF', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'EF,EF', 'units': 'ms'}), ('Ping (ms) UDP BK', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download BE', 'label': 'BE', 'linewidth': 2.0}, {'data': 'TCP download BE2', 'label': 'BE2'}, {'data': 'TCP download BE3', 'label': 'BE3'}, {'data': 'TCP download BE4', 'label': 'BE4'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload BE', 'label': 'BE', 'linewidth': 2.0}, {'data': 'TCP upload BE2', 'label': 'BE2'}, {'data': 'TCP upload BE3', 'label': 'BE3'}, {'data': 'TCP upload BE4', 'label': 'BE4'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) UDP BK', 'label': 'UDP BK'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) UDP EF', 'label': 'UDP EF'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ]) include("common.inc") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_prio.conf��������������������������������������������������������������0000664�0000000�0000000�00000002352�14670056262�0017773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("rrul_be.conf") DESCRIPTION="Realtime Response Under Load - Test Prio Queue" del DATA_SETS['Ping (ms) UDP BE2'] del DATA_SETS['Ping (ms) UDP BE3'] DATA_SETS['Ping (ms) UDP PRIO'] = {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': '0x10,0x10', 'units': 'ms'} DATA_SETS['Ping (ms) ICMP PRIO'] = {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'marking': '0x10', 'units': 'ms', 'runner': 'ping'} PLOTS['ping']['series'] = [{'data': 'Ping (ms) UDP BE1', 'label': 'UDP BE1'}, {'data': 'Ping (ms) UDP PRIO', 'label': 'UDP PRIO'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) ICMP PRIO', 'label': 'ICMP PRIO'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}] ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_torrent.conf�����������������������������������������������������������0000664�0000000�0000000�00000020441�14670056262�0020516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification # note this test requires a working ledbat congestion control module include("netperf_definitions.inc") DESCRIPTION="Torrent-like competition" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload Torrent', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'duplicates': 6}), ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload Torrent avg', {'apply_to': [glob("TCP upload Torrent::*", exclude=["TCP upload Torrent sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload Torrent sum', {'apply_to': [glob("TCP upload Torrent::*", exclude=["TCP upload Torrent avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download Torrent', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'cong_control': 'ledbat', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'duplicates': 6}), ('TCP download BE', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download Torrent avg', {'apply_to': [glob("TCP download Torrent::*", exclude=["TCP download Torrent sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download Torrent sum', {'apply_to': [glob("TCP download Torrent::*", exclude=["TCP download Torrent avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP EF', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'EF,EF', 'units': 'ms'}), ('Ping (ms) UDP BK', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'units': 'ms'}), ('Ping (ms) UDP BE', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': glob('TCP download Torrent::*'), 'label': 'BT'}, {'data': 'TCP download BE', 'label': 'BE'}, {'data': 'TCP download Torrent avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': glob('TCP upload Torrent::*'), 'label': 'BT'}, {'data': 'TCP upload BE', 'label': 'BE'}, {'data': 'TCP upload Torrent avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': 'Ping (ms) UDP BE', 'label': 'UDP BE'}, {'data': 'Ping (ms) UDP BK', 'label': 'UDP BK'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) UDP EF', 'label': 'UDP EF'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals_bandwidth', {'description': 'Total bandwidth', 'type': 'timeseries', 'series': [{'data': 'TCP download Torrent sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload Torrent sum', 'label': 'Upload', 'smoothing': 10}]}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download Torrent sum', 'label': 'BT Download', 'smoothing': 10}, {'data': 'TCP download BE', 'label': 'BE Download', 'smoothing': 10}, {'data': 'TCP upload Torrent sum', 'label': 'BT Upload', 'smoothing': 10}, {'data': 'TCP upload BE', 'label': 'BE Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('box_combine', {'description': 'Box plot of averages of several data files.', 'type': 'box_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download Torrent sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload Torrent sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ]) include("common.inc") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_up.conf����������������������������������������������������������������0000664�0000000�0000000�00000001056�14670056262�0017446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("rrul.conf") DESCRIPTION="Realtime Response Under Load - upload only" for k in list(DATA_SETS.keys()): if 'download' in k: del DATA_SETS[k] for k in list(PLOTS.keys()): if 'download' in k or k.endswith("_down"): del PLOTS[k] for p in 'totals', 'totals_bandwidth', 'box_combine': PLOTS[p]['series'] = [s for s in PLOTS[p]['series'] if not 'download' in s['data']] for p in 'all', 'all_scaled': PLOTS[p]['subplots'] = [s for s in PLOTS[p]['subplots'] if not 'download' in s] ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rrul_var.conf���������������������������������������������������������������0000664�0000000�0000000�00000026260�14670056262�0017616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="Realtime Response Under Load - variable configurable streams" DEFAULTS={'PLOT': "all_scaled"} STREAMS=get_test_parameter('bidir_streams', cast=int) DATA_SETS = o([ ('TCP upload avg', {'apply_to': [glob("TCP upload::*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload::*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download avg', {'apply_to': [glob("TCP download::*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download::*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP totals', {'apply_to': [glob("TCP *::*", exclude=["TCP download avg", "TCP download sum", "TCP upload avg", "TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms)::ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping', 'id': 'ICMP'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)::*")], 'units': 'ms', 'runner': 'average',}), ]) labels_seen = set() def add_stream(i, label=None, marking='CS0', cc_algo=None, send_size=None, length=LENGTH, delay=DELAY, **kwargs): if not label: label = "%d (%s)" % (i, marking) if label in labels_seen: test_error("Duplicate label: %s" % label) labels_seen.add(label) DATA_SETS['Ping (ms)::UDP %s' % label] = \ {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': marking, 'units': 'ms', 'id': "UDP %s" % label} DATA_SETS['TCP upload::%s' % label] = \ {'test': 'TCP_STREAM', 'length': length, 'host': HOST, 'marking': marking, 'delay': delay, 'id': label, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'cong_control': cc_algo, 'send_size': send_size} DATA_SETS['TCP download::%s' % label] = \ {'test': 'TCP_MAERTS', 'length': length, 'host': HOST, 'marking': marking, 'delay': delay, 'id': label, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'cong_control': cc_algo, 'send_size': send_size} for_stream_config(add_stream, n=STREAMS) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': glob('TCP download::*'), 'label': None}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': glob('TCP upload::*'), 'label': None}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': glob('Ping (ms)::*'), 'label': None}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms)::ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('icmp_combine', {'description': 'Combined ICMP ping plot', 'parent': 'icmp_cdf', 'type': 'timeseries_combine', 'group_by': 'groups_points', 'cutoff': None}), ('totals_bandwidth', {'description': 'Total bandwidth', 'type': 'timeseries', 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}]}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('totals_combine', {'description': 'Combined total bandwidth and average ping plot', 'parent': 'totals', 'type': 'timeseries_combine', 'group_by': 'groups_points'}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('bar_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'bar',}), ('box_combine', {'description': 'Box plot of averages of several data files.', 'type': 'box_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('bar_combine', {'description': 'Bar plot of averages of several data files.', 'type': 'bar_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms)::ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ('ellipsis', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP upload sum', 'label': 'Upload (Mbps)'}, ]}), ('ellipsis_down', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [ {'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP download sum', 'label': 'Download (Mbps)'}, ]}), ('ellipsis_sum', {'description': 'Ellipsis plot', 'type': 'ellipsis', 'series': [{'data': 'Ping (ms) avg', 'label': 'Latency (avg)'}, {'data': 'TCP totals', 'label': 'Throughput (Mbps)'} ]}), ('ellipsis_combine', {'description': 'Ellipsis plot of averages of several data files.', 'type': 'ellipsis_combine', 'axis_labels': ['Mean induced latency (ms)', 'Mean TCP goodput (Mbit/s)'], 'series': [{'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, ]}), ('ellipsis_combine_both', {'description': 'Ellipsis plot of averages of several data files -- upload *and* download plotted.', 'type': 'ellipsis_combine', 'axis_labels': ['Mean induced latency (ms)', 'Mean TCP goodput (Mbit/s)'], 'series': [{'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, ]}), ('cdf_combine', {'description': 'CDF plot of averages of several data files.', 'type': 'cdf_combine', 'group_by': 'groups_concat', 'axis_labels': ['Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'span',} ]}), ]) include("common.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rtt_fair.conf���������������������������������������������������������������0000664�0000000�0000000�00000001420�14670056262�0017563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="RTT Fair Realtime Response Under Load" DEFAULTS={'PLOT': "all_scaled", 'HOSTS': [ 'flent-fremont.bufferbloat.net', 'flent-eu.bufferbloat.net', 'flent-newark.bufferbloat.net', 'flent-tokyo.bufferbloat.net']} # This makes sure that four hosts are specified on the command line, and if not # filles up the HOSTS list with input from the DEFAULTS above (repeating them if # necessary). min_host_count(4) set_test_parameter("markings", "CS0,CS0,CS1,CS1") set_test_parameter("labels", "BE1,BE2,BK1,BK2") set_test_parameter("ping_labels", "ICMP1,ICMP2,ICMP3,ICMP4") HOSTS=HOSTS[:4] include("rtt_fair.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rtt_fair.inc����������������������������������������������������������������0000664�0000000�0000000�00000022654�14670056262�0017423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- DATA_SETS = o([ ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum", "TCP upload fairness"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg", "TCP upload fairness"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP upload fairness', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg", "TCP upload sum"])], 'units': 'Idx', 'runner': 'fairness',}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum", "TCP download fairness"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg", "TCP download fairness"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download fairness', {'apply_to': [glob("TCP download*", exclude=["TCP download avg", "TCP download sum"])], 'units': 'Idx', 'runner': 'fairness',}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) def add_stream(i, host=None, label='BE', ping_label='ICMP', marking='CS0', control_host=None, local_bind=None, cc_algo=None, send_size=None, length=LENGTH, delay=DELAY, **kwargs): if host is None: return if control_host is None: control_host = host DATA_SETS['TCP upload %s %s' % (label or "BE", host)] = \ {'test': 'TCP_STREAM', 'length': length, 'host': host, 'marking': marking or 'CS0', 'control_host': control_host or host, 'local_bind': local_bind, 'delay': delay, 'id': host, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'cong_control': cc_algo, 'send_size': send_size} DATA_SETS['TCP download %s %s' % (label or "BE", host)] = \ {'test': 'TCP_MAERTS', 'length': length, 'host': host, 'marking': marking or 'CS0', 'control_host': control_host or host, 'local_bind': local_bind, 'delay': delay, 'id': host, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'cong_control': cc_algo, 'send_size': send_size} DATA_SETS['Ping (ms) %s %s' % (ping_label or "ICMP", host)] = \ {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': host, 'local_bind': local_bind, 'id': host, 'units': 'ms', 'runner': 'ping'} for_stream_config(add_stream) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': glob('TCP download *', exclude=["TCP download avg", "TCP download fairness", "TCP download sum"]), 'label': 'Download'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': glob('TCP upload *', exclude=["TCP upload avg", "TCP upload fairness", "TCP upload sum"]), 'label': 'Upload'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('bar_fairness', {'description': 'Jain\'s fairness combined bar plot', 'type': 'bar_combine', 'cutoff': (DELAY,-DELAY), 'group_by': 'groups', 'axis_labels': ['Fairness index'], 'series': [{'data': 'TCP upload fairness', 'label': 'Upload fairness', 'combine_mode': 'mean'}, {'data': 'TCP download fairness', 'label': 'Download fairness', 'combine_mode': 'mean'}]}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': glob('Ping (ms) *', exclude=['Ping (ms) avg']), 'label': 'Ping (ms) ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('ping_cdf_combine', {'description': 'Ping CDF plot', 'type': 'cdf_combine', 'group_by': 'groups_concat', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_combine_up', {'description': 'Upload bandwidth combination box plot', 'series': [{'data': glob('TCP upload *', exclude=["TCP upload avg", "TCP upload fairness", "TCP upload sum"]), 'label': 'BE', 'combine_mode': 'mean'}, {'data': 'TCP upload avg', 'label': 'Avg', 'combine_mode': 'mean'}], 'type': 'box_combine'}), ('bar_combine_up', {'description': 'Upload bandwidth combination bar plot', 'parent': 'box_combine_up', 'type': 'bar_combine'}), ('box_combine_down', {'description': 'Download bandwidth combination box plot', 'series': [{'data': glob('TCP download *', exclude=["TCP download avg", "TCP download fairness", "TCP download sum"]), 'label': 'BE', 'combine_mode': 'mean'}, {'data': 'TCP download avg', 'label': 'Avg', 'combine_mode': 'mean'}], 'type': 'box_combine'}), ('bar_combine_down', {'description': 'Download bandwidth combination bar plot', 'parent': 'box_combine_down', 'type': 'bar_combine'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('box_combine', {'description': 'Box plot of averages of several data files.', 'type': 'box_combine', 'dual_axes': True, 'axis_labels': ['Mean TCP goodput (Mbit/s)', 'Mean induced latency (ms)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Induced latency (ms)', 'combine_mode': 'mean_span', 'axis': 2}]}), ('bar_combine', {'description': 'Bar plot of averages of several data files.', 'type': 'bar_combine', 'parent': 'box_combine'}), ('box_combine_throughput', {'description': 'Box plot of averages of several data files - throughput.', 'type': 'box_combine', 'axis_labels': ['Mean TCP goodput (Mbit/s)'], 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}]}), ('bar_combine_throughput', {'description': 'Bar plot of averages of several data files - throughput.', 'type': 'bar_combine', 'parent': 'box_combine_throughput'}), ]) include("common.inc") ������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rtt_fair4be.conf������������������������������������������������������������0000664�0000000�0000000�00000001420�14670056262�0020156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="RTT Fair Realtime Response Under Load" DEFAULTS={'PLOT': "all_scaled", 'HOSTS': [ 'flent-fremont.bufferbloat.net', 'flent-eu.bufferbloat.net', 'flent-newark.bufferbloat.net', 'flent-tokyo.bufferbloat.net']} # This makes sure that four hosts are specified on the command line, and if not # filles up the HOSTS list with input from the DEFAULTS above (repeating them if # necessary). min_host_count(4) set_test_parameter("markings", "CS0,CS0,CS0,CS0") set_test_parameter("labels", "BE1,BE2,BE3,BE4") set_test_parameter("ping_labels", "ICMP1,ICMP2,ICMP3,ICMP4") HOSTS=HOSTS[:4] include("rtt_fair.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rtt_fair6be.conf������������������������������������������������������������0000664�0000000�0000000�00000001536�14670056262�0020170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="RTT Fair Realtime Response Under Load" DEFAULTS={'PLOT': "all_scaled", 'HOSTS': [ 'flent-fremont.bufferbloat.net', 'flent-eu.bufferbloat.net', 'flent-newark.bufferbloat.net', 'flent-tokyo.bufferbloat.net']} # This makes sure that four hosts are specified on the command line, and if not # filles up the HOSTS list with input from the DEFAULTS above (repeating them if # necessary). min_host_count(6) # Compability settings for moving to rtt_fair.inc set_test_parameter("markings", "CS0,CS0,CS0,CS0,CS0,CS0") set_test_parameter("labels", "BE1,BE2,BE3,BE4,BE5,BE6") set_test_parameter("ping_labels", "ICMP1,ICMP2,ICMP3,ICMP4,ICMP5,ICMP6") HOSTS=HOSTS[:6] include("rtt_fair.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rtt_fair_up.conf������������������������������������������������������������0000664�0000000�0000000�00000002315�14670056262�0020273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="RTT Fair upstream only" DEFAULTS={'PLOT': "all_scaled", 'HOSTS': [ 'flent-fremont.bufferbloat.net', 'flent-eu.bufferbloat.net', 'flent-newark.bufferbloat.net', 'flent-tokyo.bufferbloat.net']} # This makes sure that four hosts are specified on the command line, and if not # filles up the HOSTS list with input from the DEFAULTS above (repeating them if # necessary). min_host_count(4) set_test_parameter("markings", "CS0,CS0,CS0,CS0") set_test_parameter("labels", "BE1,BE2,BE3,BE4") set_test_parameter("ping_labels", "ICMP1,ICMP2,ICMP3,ICMP4") HOSTS=HOSTS[:4] include("rtt_fair.inc") for k in list(DATA_SETS.keys()): if 'download' in k: del DATA_SETS[k] for k in list(PLOTS.keys()): if 'download' in k or k.endswith("_down"): del PLOTS[k] for p in 'totals', 'bar_fairness', 'box_combine', 'box_combine_throughput': PLOTS[p]['series'] = [s for s in PLOTS[p]['series'] if not 'download' in s['data']] for p in 'all', 'all_scaled': PLOTS[p]['subplots'] = [s for s in PLOTS[p]['subplots'] if not 'download' in s] �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rtt_fair_var.conf�����������������������������������������������������������0000664�0000000�0000000�00000000322�14670056262�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="RTT Fair - variable number of hosts" DEFAULTS={'PLOT': "all_scaled"} include("rtt_fair.inc") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rtt_fair_var_down.conf������������������������������������������������������0000664�0000000�0000000�00000001113�14670056262�0021461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("rtt_fair_var.conf") DESCRIPTION="RTT Fair - variable number of hosts (download only)" for k in list(DATA_SETS.keys()): if 'upload' in k: del DATA_SETS[k] for k in list(PLOTS.keys()): if 'upload' in k or k.endswith("_up"): del PLOTS[k] for p in 'totals', 'bar_fairness', 'box_combine', 'box_combine_throughput': PLOTS[p]['series'] = [s for s in PLOTS[p]['series'] if not 'upload' in s['data']] for p in 'all', 'all_scaled': PLOTS[p]['subplots'] = [s for s in PLOTS[p]['subplots'] if not 'upload' in s] �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rtt_fair_var_mixed.conf�����������������������������������������������������0000664�0000000�0000000�00000001210�14670056262�0021616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("rtt_fair_var.conf") DESCRIPTION="RTT Fair - variable number of hosts (mixed up and down)" DIRECTIONS=get_test_parameter('data_directions', default=None, split=True) if DIRECTIONS is not None: for host, d in zip_longest(HOSTS, DIRECTIONS, fillvalue=''): if not host: break if 'u' not in d: try: del DATA_SETS["TCP upload BE %s" % host] except KeyError: pass if 'd' not in d: try: del DATA_SETS["TCP download BE %s" % host] except KeyError: pass ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/rtt_fair_var_up.conf��������������������������������������������������������0000664�0000000�0000000�00000001123�14670056262�0021137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("rtt_fair_var.conf") DESCRIPTION="RTT Fair - variable number of hosts (upload only)" for k in list(DATA_SETS.keys()): if 'download' in k: del DATA_SETS[k] for k in list(PLOTS.keys()): if 'download' in k or k.endswith("_down"): del PLOTS[k] for p in 'totals', 'bar_fairness', 'box_combine', 'box_combine_throughput': PLOTS[p]['series'] = [s for s in PLOTS[p]['series'] if not 'download' in s['data']] for p in 'all', 'all_scaled': PLOTS[p]['subplots'] = [s for s in PLOTS[p]['subplots'] if not 'download' in s] ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/sctp_vs_tcp.conf������������������������������������������������������������0000664�0000000�0000000�00000023046�14670056262�0020310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## Regrettably netperf cannot generate the data rrul needs for SCTP ## or my sctp implementation is broken or both. ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="SCTP vs TCP" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload CS0', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('SCTP upload CS0', {'test': 'SCTP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload CS1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('SCTP upload CS1', {'test': 'SCTP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload avg', {'apply_to': [glob("TCP upload*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('SCTP upload avg', {'apply_to': [glob("SCTP upload*", exclude=["SCTP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('SCTP upload sum', {'apply_to': [glob("SCTP upload*", exclude=["SCTP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), # FIXME- grok globbing We want just *upload* ('Upload avg', {'apply_to': [glob("*upload avg*", exclude=["Upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('Upload sum', {'apply_to': [glob("*upload sum*", exclude=["Upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('TCP download CS0', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('SCTP download CS0', {'test': 'SCTP_STREAM_MANY', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download CS1', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('SCTP download CS1', {'test': 'SCTP_STREAM_MANY', 'length': LENGTH, 'host': HOST, 'marking': 'CS1,CS1', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP download avg', {'apply_to': [glob("TCP download*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('SCTP download avg', {'apply_to': [glob("SCTP download*", exclude=["SCTP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('SCTP download sum', {'apply_to': [glob("SCTP download*", exclude=["SCTP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), # Fixme, grok globbing ('Download avg', {'apply_to': [glob("*download*", exclude=["SCTP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('Download sum', {'apply_to': [glob("*download*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP CS0', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) SCTP CS0', {'test': 'SCTP_RR', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms', 'runner': 'netperf_demo'}), ('Ping (ms) TCP CS0', {'test': 'TCP_RR', 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'netperf_demo'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download CS0', 'label': 'TCP CS0', 'linewidth': 2.0}, {'data': 'TCP download CS1', 'label': 'TCP CS1'}, {'data': 'SCTP download CS0', 'label': 'SCTP CS0'}, {'data': 'SCTP download CS1', 'label': 'SCTP CS1'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}, {'data': 'SCTP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}, ]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': 'TCP upload CS0', 'label': 'TCP CS0', 'linewidth': 2.0}, {'data': 'TCP upload CS1', 'label': 'TCP CS1'}, {'data': 'SCTP upload CS0', 'label': 'SCTP CS0'}, {'data': 'SCTP upload CS1', 'label': 'SCTP CS1'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}, {'data': 'SCTP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}, ]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP CS0', 'label': 'UDP CS0'}, {'data': 'Ping (ms) SCTP CS0', 'label': 'SCTP CS0'}, {'data': 'Ping (ms) TCP CS0', 'label': 'TCP CS0'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'Download sum', 'label': 'Download', 'smoothing': 10}, {'data': 'Upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Download, upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('download_scaled', 'upload_scaled', 'ping_scaled')}), ('all', {'description': 'Download, upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('download', 'upload', 'ping')}), ('box_download', {'description': 'Download bandwidth box plot', 'parent': 'download', 'type': 'box'}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ('qq_icmp', {'description': 'Q-Q plot of ICMP pings', 'type': 'qq', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Latency (ms)'}, ]}), ('qq_download', {'description': 'Q-Q plot of total download bandwidth', 'type': 'qq', 'series': [{'data': 'Download sum', 'label': 'Download (Mbps)'}, ]}), ('qq_upload', {'description': 'Q-Q plot of total upload bandwidth', 'type': 'qq', 'series': [{'data': 'Upload sum', 'label': 'Upload (Mbps)'}, ]}), ]) include("common.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_12down.conf�������������������������������������������������������������0000664�0000000�0000000�00000000232�14670056262�0017731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['download_streams'] = 12 include("tcp_ndown.conf") DESCRIPTION="TCP download - 12 streams w/ping" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_12up.conf���������������������������������������������������������������0000664�0000000�0000000�00000000224�14670056262�0017407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['upload_streams'] = 12 include("tcp_nup.conf") DESCRIPTION="TCP upload - 12 streams w/ping" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_1down.conf��������������������������������������������������������������0000664�0000000�0000000�00000003430�14670056262�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Single TCP download stream w/ping" DEFAULTS={'PLOT': 'totals'} DATA_SETS = o([ ('TCP download', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ]) PLOTS = o([ ('totals', {'description': 'Bandwidth and ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP download', 'label': 'Download'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},], 'cutoff': (DELAY,-DELAY)}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box', 'cutoff': (DELAY,-DELAY)}), ('bar_totals', {'description': 'Bar plot of totals', 'parent': 'totals', 'type': 'bar', 'cutoff': (DELAY,-DELAY)}), ('box_totals_combine', {'description': 'Combination box plot of totals', 'parent': 'totals', 'type': 'box_combine', 'cutoff': (DELAY,-DELAY)}), ('bar_totals_combine', {'description': 'Combination bar plot of totals', 'parent': 'totals', 'type': 'bar_combine', 'cutoff': (DELAY,-DELAY)}), ('box_ping_combine', {'description': 'Combination box plot of ping times', 'parent': 'ping_cdf', 'type': 'box_combine',}), ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_1up.conf����������������������������������������������������������������0000664�0000000�0000000�00000006647�14670056262�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Single TCP upload stream w/ping" DEFAULTS={'PLOT': 'totals'} MARKING=try_test_parameters(('marking', 'markings'), default=[""], split=True)[0] CC_ALGO=try_test_parameters(('tcp_cong_control', 'cc_algo', 'cc_algos'), default=[""], split=True)[0] DATA_SETS = o([ ('TCP upload', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'marking': MARKING, 'cong_control': CC_ALGO, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ]) PLOTS = o([ ('totals', {'description': 'Bandwidth and ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP upload', 'label': 'Upload'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}]}), ('totals_with_tcp_rtt', {'description': 'Upload throughput with ping and TCP RTT', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP upload', 'label': 'Upload'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}, {'data': glob('TCP**', exclude=['*fairness*']), 'axis': 2, 'raw_key': 'tcp_rtt', 'label': 'TCP RTT'}]}), ('bandwidth', {'description': 'Bandwidth plot', 'type': 'timeseries', 'series': [{'data': 'TCP upload', 'label': 'Upload'}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},], 'cutoff': (DELAY,-DELAY)}), ('ping_cdf_combine', {'description': 'Ping CDF combination plot', 'parent': 'ping_cdf', 'type': 'cdf_combine', 'group_by': 'groups_concat'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box', 'cutoff': (DELAY,-DELAY)}), ('bar_totals', {'description': 'Bar plot of totals', 'parent': 'totals', 'type': 'bar', 'cutoff': (DELAY,-DELAY)}), ('box_totals_combine', {'description': 'Combination box plot of totals', 'parent': 'totals', 'type': 'box_combine', 'cutoff': (DELAY,-DELAY)}), ('bar_totals_combine', {'description': 'Combination bar plot of totals', 'parent': 'totals', 'type': 'bar_combine', 'cutoff': (DELAY,-DELAY)}), ('box_ping_combine', {'description': 'Combination box plot of ping times', 'parent': 'ping_cdf', 'type': 'box_combine',}), ('tcp_delivery_with_rtt', {'description': 'TCP delivery rate with ping and TCP RTT', 'type': 'timeseries', 'dual_axes': True, 'series': [ {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_delivery_rate', 'label': 'Delivery rate'}, {'data': glob('Ping (ms) *'), 'label': 'Ping (ms)', 'axis': 2}, {'data': glob('TCP**', exclude=['*fairness*']), 'axis': 2, 'raw_key': 'tcp_rtt', 'label': 'TCP RTT'}]}), ]) include("common.inc") �����������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_1up_noping.conf���������������������������������������������������������0000664�0000000�0000000�00000001051�14670056262�0020676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Single TCP upload stream" DEFAULTS={'PLOT': 'totals'} TOTAL_LENGTH=LENGTH DELAY=0 DATA_SETS = o([ ('TCP upload', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ]) PLOTS = o([ ('totals', {'description': 'Bandwidth plot', 'type': 'timeseries', 'series': [{'data': 'TCP upload', 'label': 'TCP stream'}]}) ]) include("common.inc") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_2down.conf��������������������������������������������������������������0000664�0000000�0000000�00000000230�14670056262�0017646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['download_streams'] = 2 include("tcp_ndown.conf") DESCRIPTION="TCP download - 2 streams w/ping" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_2up.conf����������������������������������������������������������������0000664�0000000�0000000�00000000222�14670056262�0017324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['upload_streams'] = 2 include("tcp_nup.conf") DESCRIPTION="TCP upload - 2 streams w/ping" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_2up_delay.conf����������������������������������������������������������0000664�0000000�0000000�00000003206�14670056262�0020507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Two TCP upload streams; 2nd stream started delayed" DEFAULTS={'PLOT': 'totals'} TOTAL_LENGTH=LENGTH+DELAY DATA_SETS = o([ ('TCP stream 1', {'test': 'TCP_STREAM', 'length': LENGTH + DELAY, 'host': HOST, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP stream 2', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ]) PLOTS = o([ ('totals', {'description': 'Bandwidth plot', 'type': 'timeseries', 'series': [{'data': 'TCP stream 1', 'label': 'Stream 1'}, {'data': 'TCP stream 2', 'label': 'Stream 2'}]},), ('totals_5s', {'description': 'Bandwidth plot, 5 second smoothed sample size', 'type': 'timeseries', 'series': [{'data': 'TCP stream 1', 'label': 'Stream 1', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP stream 2', 'label': 'Stream 2', 'smoothing': 5.0/STEP_SIZE}]},), ('box_combine', {'description': 'Summarising combined tests', 'type': 'box_combine', 'cutoff': (DELAY,0), 'group_by': 'series', 'axis_labels': ['Mean bandwidth (MBits/s)'], 'series': [{'data': 'TCP stream 1', 'label': 'Stream 1', 'combine_mode': 'mean'}, {'data': 'TCP stream 2', 'label': 'Stream 2', 'combine_mode': 'mean'}]},), ]) include("common.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_2up_square.conf���������������������������������������������������������0000664�0000000�0000000�00000005374�14670056262�0020721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Two TCP upload streams; 2nd stream started delayed" DEFAULTS={'PLOT': 'totals'} TOTAL_LENGTH=max(LENGTH,DELAY*6) DATA_SETS = o([ ('TCP cubic', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'cubic', 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP cubic 2', {'test': 'TCP_STREAM', 'length': DELAY, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP reno', {'test': 'TCP_STREAM', 'length': DELAY, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'reno', 'delay': DELAY * 3, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP westwood', {'test': 'TCP_STREAM', 'length': DELAY, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'westwood', 'delay': DELAY * 5, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ] ) PLOTS = o([ ('totals', {'description': 'Bandwidth plot', 'type': 'timeseries', 'series': [{'data': 'TCP cubic', 'label': 'Cubic'}, {'data': 'TCP cubic 2', 'label': 'Cubic 2'}, {'data': 'TCP reno', 'label': 'Reno'}, {'data': 'TCP westwood', 'label': 'Westwood'},]} ), ('totals_5s', {'description': 'Bandwidth plot, 5 second smoothed sample size', 'type': 'timeseries', 'series': [{'data': 'TCP cubic', 'label': 'Cubic 1', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP cubic 2', 'label': 'Cubic 2', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP reno', 'label': 'Reno', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP westwood', 'label': 'Westwood', 'smoothing': 5.0/STEP_SIZE}]}, ), ('box_combine', {'description': 'Summarising combined tests', 'type': 'box_combine', 'cutoff': (DELAY,0), 'group_by': 'series', 'axis_labels': ['Mean bandwidth (MBits/s)'], 'series': [{'data': 'TCP cubic', 'label': 'Stream 1', 'combine_mode': 'mean'}, {'data': 'TCP cubic 2', 'label': 'Cubic 2', 'combine_mode': 'mean'}, {'data': 'TCP reno', 'label': 'Reno', 'combine_mode': 'mean'}, {'data': 'TCP westwood', 'label': 'Westwood', 'combine_mode': 'mean'}]}, ), ]) include("common.inc") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_2up_square_westwood.conf������������������������������������������������0000664�0000000�0000000�00000005502�14670056262�0022645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Two TCP upload streams; 2nd stream started delayed" DEFAULTS={'PLOT': 'totals'} TOTAL_LENGTH=max(LENGTH,DELAY*6) DATA_SETS = o([ ('TCP westwood baseline', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'westwood', 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP cubic 2', {'test': 'TCP_STREAM', 'length': DELAY, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP reno', {'test': 'TCP_STREAM', 'length': DELAY, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'reno', 'delay': DELAY * 3, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP westwood', {'test': 'TCP_STREAM', 'length': DELAY, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'westwood', 'delay': DELAY * 5, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ] ) PLOTS = o([ ('totals', {'description': 'Bandwidth plot', 'type': 'timeseries', 'series': [{'data': 'TCP westwood baseline', 'label': 'Westwood base'}, {'data': 'TCP cubic 2', 'label': 'Cubic 2'}, {'data': 'TCP reno', 'label': 'Reno'}, {'data': 'TCP westwood', 'label': 'Westwood'},]} ), ('totals_5s', {'description': 'Bandwidth plot, 5 second smoothed sample size', 'type': 'timeseries', 'series': [{'data': 'TCP westwood baseline', 'label': 'Westwood base', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP cubic 2', 'label': 'Cubic 2', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP reno', 'label': 'Reno', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP westwood', 'label': 'Westwood', 'smoothing': 5.0/STEP_SIZE}]}, ), ('box_combine', {'description': 'Summarising combined tests', 'type': 'box_combine', 'cutoff': (DELAY,0), 'group_by': 'series', 'axis_labels': ['Mean bandwidth (MBits/s)'], 'series': [{'data': 'TCP westwood baseline', 'label': 'Westwood base', 'combine_mode': 'mean'}, {'data': 'TCP cubic 2', 'label': 'Cubic 2', 'combine_mode': 'mean'}, {'data': 'TCP reno', 'label': 'Reno', 'combine_mode': 'mean'}, {'data': 'TCP westwood', 'label': 'Westwood', 'combine_mode': 'mean'}]}, ), ]) include("common.inc") ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_4down.conf��������������������������������������������������������������0000664�0000000�0000000�00000000230�14670056262�0017650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['download_streams'] = 4 include("tcp_ndown.conf") DESCRIPTION="TCP download - 4 streams w/ping" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_4up.conf����������������������������������������������������������������0000664�0000000�0000000�00000000222�14670056262�0017326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['upload_streams'] = 4 include("tcp_nup.conf") DESCRIPTION="TCP upload - 4 streams w/ping" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_4up_squarewave.conf�����������������������������������������������������0000664�0000000�0000000�00000005404�14670056262�0021600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Four TCP upload streams; 2nd streams started delayed, cubic vs BBR" DEFAULTS={'PLOT': 'totals'} TOTAL_LENGTH=(LENGTH + DELAY*6) DATA_SETS = o([ ('TCP bbr 1', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'bbr', 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP cubic 2', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'cubic', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP cubic 3', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'cubic', 'delay': DELAY * 5, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP bbr 4', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'extra_test_args': '-M ,64k', 'cong_control': 'bbr', 'delay': DELAY * 3, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ] ) PLOTS = o([ ('totals', {'description': 'Bandwidth plot', 'type': 'timeseries', 'series': [{'data': 'TCP bbr 1', 'label': 'BBR 1'}, {'data': 'TCP cubic 2', 'label': 'Cubic 2'}, {'data': 'TCP cubic 3', 'label': 'Cubic 3'}, {'data': 'TCP bbr 4', 'label': 'BBR 4'},]} ), ('totals_5s', {'description': 'Bandwidth plot, 5 second smoothed sample size', 'type': 'timeseries', 'series': [{'data': 'TCP bbr 1', 'label': 'BBR 1', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP cubic 2', 'label': 'Cubic 2', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP cubic 3', 'label': 'Cubic 3', 'smoothing': 5.0/STEP_SIZE}, {'data': 'TCP bbr 4', 'label': 'BBR 4', 'smoothing': 5.0/STEP_SIZE}]}, ), ('box_combine', {'description': 'Summarising combined tests', 'type': 'box_combine', 'cutoff': (DELAY,0), 'group_by': 'series', 'axis_labels': ['Mean bandwidth (MBits/s)'], 'series': [{'data': 'TCP bbr 1', 'label': 'BBR 1', 'combine_mode': 'mean'}, {'data': 'TCP cubic 2', 'label': 'Cubic 2', 'combine_mode': 'mean'}, {'data': 'TCP cubic 3', 'label': 'Cubic 3', 'combine_mode': 'mean'}, {'data': 'TCP bbr 4', 'label': 'BBR 4', 'combine_mode': 'mean'}]}, ), ]) include("common.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_6down.conf��������������������������������������������������������������0000664�0000000�0000000�00000000230�14670056262�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['download_streams'] = 6 include("tcp_ndown.conf") DESCRIPTION="TCP download - 6 streams w/ping" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_6up.conf����������������������������������������������������������������0000664�0000000�0000000�00000000222�14670056262�0017330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['upload_streams'] = 6 include("tcp_nup.conf") DESCRIPTION="TCP upload - 6 streams w/ping" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_8down.conf��������������������������������������������������������������0000664�0000000�0000000�00000000230�14670056262�0017654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['download_streams'] = 8 include("tcp_ndown.conf") DESCRIPTION="TCP download - 8 streams w/ping" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_8up.conf����������������������������������������������������������������0000664�0000000�0000000�00000000222�14670056262�0017332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- TEST_PARAMETERS['upload_streams'] = 8 include("tcp_nup.conf") DESCRIPTION="TCP upload - 8 streams w/ping" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_bidirectional.conf������������������������������������������������������0000664�0000000�0000000�00000004274�14670056262�0021441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="Bidirectional TCP streams w/ping" DEFAULTS={'PLOT': 'totals'} DATA_SETS = o([ ('TCP download', {'test': 'TCP_MAERTS', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ]) PLOTS = o([ ('totals', {'description': 'Bandwidth and ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP download', 'label': 'Download'}, {'data': 'TCP upload', 'label': 'Upload'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}]}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}]}), ('ping_smooth', {'description': 'Ping plot (inc smoothed average)', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, {'data': 'Ping (ms) ICMP', 'label': 'Avg (smoothing)', 'smoothing': 5, 'color': 'black', 'linewidth': 2}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},], 'cutoff': (DELAY,-DELAY)}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ]) include("common.inc") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_download.conf�����������������������������������������������������������0000664�0000000�0000000�00000001604�14670056262�0020432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("tcp_bidirectional.conf") DESCRIPTION="TCP download stream w/ping" del DATA_SETS['TCP upload'] PLOTS['totals']['series'] = [v for v in PLOTS['totals']['series'] if v['data'] != 'TCP upload'] PLOTS['download'] = \ {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download', 'label': 'Download'}]} PLOTS['download_average'] = \ {'description': 'Download bandwidth plot (inc smoothed avg)', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': 'TCP download', 'label': 'Download'}, {'data': 'TCP download', 'label': 'Avg (smoothing)', 'smoothing': 5, 'color': 'black', 'linewidth': 2}]} ����������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_ndown.conf��������������������������������������������������������������0000664�0000000�0000000�00000010647�14670056262�0017757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="TCP download - N streams w/ping" DEFAULTS={'PLOT': 'totals'} STREAMS=get_test_parameter('download_streams', cast=int) DATA_SETS = o([ ('TCP download avg', {'apply_to': [glob("TCP download::*", exclude=["TCP download sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP download sum', {'apply_to': [glob("TCP download::*", exclude=["TCP download avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ]) def add_stream(i, marking='CS0', cc_algo=None, length=LENGTH, delay=DELAY, **kwargs): DATA_SETS['TCP download::%d' % (i+1)] = {'test': 'TCP_MAERTS', 'length': length, 'host': HOST, 'marking': marking, 'cong_control': cc_algo, 'delay': delay, 'id': str(i+1), 'units': 'Mbits/s', 'runner': 'netperf_demo'} for_stream_config(add_stream, n=STREAMS) PLOTS = o([ ('totals', {'description': 'Bandwidth and ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP download sum', 'label': 'Download'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}]}), ('download', {'description': 'Download bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP download', 'series': [{'data': glob('TCP download::*'), 'label': 'BE'}, {'data': 'TCP download avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('download_scaled', {'description': 'Download bandwidth w/axes scaled to remove outliers', 'parent': 'download', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},]}), ('ping_smooth', {'description': 'Ping plot (inc smoothed average)', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, {'data': 'Ping (ms) ICMP', 'label': 'Avg (smoothing)', 'smoothing': 5, 'color': 'black', 'linewidth': 2}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},], 'cutoff': (DELAY,-DELAY)}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box', 'cutoff': (DELAY,-DELAY)}), ('box_totals_combine', {'description': 'Combination box plot of totals', 'parent': 'totals', 'type': 'box_combine', 'series': [{'data': 'TCP download sum', 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}], 'cutoff': (DELAY,-DELAY)}), ('box_ping_combine', {'description': 'Combination box plot of ping times', 'parent': 'ping_cdf', 'type': 'box_combine',}), ('box_combine', {'description': 'Download bandwidth combination box plot', 'series': [{'data': glob('TCP download::*', exclude=["TCP download avg", "TCP download fairness", "TCP download sum"]), 'label': 'Download', 'combine_mode': 'mean'}, {'data': 'TCP download avg', 'label': 'Avg', 'combine_mode': 'mean'}], 'type': 'box_combine'}), ('bar_combine', {'description': 'Download bandwidth combination bar plot', 'parent': 'box_combine', 'type': 'bar_combine'}), ]) include("common.inc") �����������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_nup.conf����������������������������������������������������������������0000664�0000000�0000000�00000014777�14670056262�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="TCP upload - N streams w/ping" DEFAULTS={'PLOT': 'totals'} STREAMS=get_test_parameter('upload_streams', cast=int) DATA_SETS = o([ ('TCP upload avg', {'apply_to': [glob("TCP upload::*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload::*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ]) def add_stream(i, marking='CS0', cc_algo=None, length=LENGTH, delay=DELAY, **kwargs): DATA_SETS['TCP upload::%d' % (i+1)] = {'test': 'TCP_STREAM', 'length': length, 'host': HOST, 'marking': marking, 'cong_control': cc_algo, 'delay': delay, 'id': str(i+1), 'units': 'Mbits/s', 'runner': 'netperf_demo'} for_stream_config(add_stream, n=STREAMS) PLOTS = o([ ('totals', {'description': 'Bandwidth and ping plot', 'type': 'timeseries', 'dual_axes': True, 'series': [{'data': 'TCP upload sum', 'label': 'Upload'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}]}), ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': glob('TCP upload::*'), 'label': 'BE'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_box', {'description': 'Upload box plot', 'type': 'box', 'series': [{'data': glob('TCP upload::*'), 'label': 'BE', 'cutoff': (DELAY,-DELAY)}, {'data': 'TCP upload avg', 'label': 'Avg', 'cutoff': (DELAY,-DELAY)}]}), ('upload_with_ping', {'description': 'Upload throughput and ping plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'dual_axes': True, 'series': [{'data': glob('TCP upload::*'), 'label': 'BE'}, {'data': glob('Ping (ms) *'), 'label': 'Ping (ms)', 'axis': 2}]}), ('upload_with_ping_and_tcp_rtt', {'description': 'Upload throughput with ping and TCP RTT', 'type': 'timeseries', 'legend_title': 'TCP upload', 'dual_axes': True, 'series': [{'data': glob('TCP upload::*'), 'label': 'BE'}, {'data': glob('Ping (ms) *'), 'label': 'Ping (ms)', 'axis': 2}, {'data': glob('TCP**', exclude=['*fairness*']), 'axis': 2, 'raw_key': 'tcp_rtt', 'label': 'TCP RTT'}]}), ('tcp_delivery_with_ping', {'description': 'TCP delivery rate with ping', 'type': 'timeseries', 'dual_axes': True, 'series': [ {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_delivery_rate', 'label': 'Delivery rate'}, {'data': glob('Ping (ms) *'), 'label': 'Ping (ms)', 'axis': 2}]}), ('tcp_delivery_with_rtt', {'description': 'TCP delivery rate with ping and TCP RTT', 'type': 'timeseries', 'dual_axes': True, 'series': [ {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_delivery_rate', 'label': 'Delivery rate'}, {'data': glob('Ping (ms) *'), 'label': 'Ping (ms)', 'axis': 2}, {'data': glob('TCP**', exclude=['*fairness*']), 'axis': 2, 'raw_key': 'tcp_rtt', 'label': 'TCP RTT'}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},]}), ('ping_smooth', {'description': 'Ping plot (inc smoothed average)', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, {'data': 'Ping (ms) ICMP', 'label': 'Avg (smoothing)', 'smoothing': 5, 'color': 'black', 'linewidth': 2}]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},], 'cutoff': (DELAY,-DELAY)}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box', 'cutoff': (DELAY,-DELAY)}), ('box_totals_combine', {'description': 'Combination box plot of totals', 'parent': 'totals', 'type': 'box_combine', 'series': [{'data': 'TCP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}], 'cutoff': (DELAY,-DELAY)}), ('box_ping_combine', {'description': 'Combination box plot of ping times', 'parent': 'ping_cdf', 'type': 'box_combine',}), ('box_combine', {'description': 'Upload bandwidth combination box plot', 'series': [{'data': glob('TCP upload::*', exclude=["TCP upload avg", "TCP upload fairness", "TCP upload sum"]), 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'TCP upload avg', 'label': 'Avg', 'combine_mode': 'mean'}], 'type': 'box_combine'}), ('bar_combine', {'description': 'Upload bandwidth combination bar plot', 'parent': 'box_combine', 'type': 'bar_combine'}), ]) include("common.inc") �flent-2.2.0/flent/tests/tcp_stats.inc���������������������������������������������������������������0000664�0000000�0000000�00000004735�14670056262�0017615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- mode: python; coding: utf-8 -*- # Mixin to provide plots for TCP socket stats data series PLOTS['tcp_cwnd'] = {'description': 'TCP window statistics', 'type': 'timeseries', 'axis_labels': ['Packets'], 'series': [ {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_cwnd', 'label': 'TCP window size'}, ]} PLOTS['tcp_rtt'] = {'description': 'TCP RTT statistics', 'type': 'timeseries', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_rtt', 'label': 'RTT'}, ]} PLOTS['tcp_rtt_cdf'] = {'description': 'TCP RTT statistics', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'tcp_rtt'} PLOTS['tcp_rtt_box_combine'] = {'description': 'TCP RTT statistics - box combination plot', 'type': 'box_combine', 'axis_labels': ['Latency (ms)'], 'series': [ {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_rtt', 'combine_mode': 'raw_mean', 'label': 'RTT'}]} PLOTS['tcp_rtt_bar_combine'] = {'description': 'TCP RTT statistics - bar combination plot', 'type': 'bar_combine', 'parent': 'tcp_rtt_box_combine'} PLOTS['tcp_pacing'] = {'description': 'TCP pacing rate statistics', 'type': 'timeseries', 'axis_labels': ['Mbps'], 'series': [ {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_pacing_rate', 'label': 'Pacing rate'}, {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_delivery_rate', 'label': 'Delivery rate'}, {'data': glob('TCP**', exclude=['*fairness*']), 'raw_key': 'tcp_bbr_bw', 'label': 'BBR BW'}, ]} �����������������������������������flent-2.2.0/flent/tests/tcp_upload.conf�������������������������������������������������������������0000664�0000000�0000000�00000000362�14670056262�0020107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("tcp_bidirectional.conf") DESCRIPTION="TCP upload stream w/ping" del DATA_SETS['TCP download'] PLOTS['totals']['series'] = [v for v in PLOTS['totals']['series'] if v['data'] != 'TCP download'] ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_upload_1000.conf��������������������������������������������������������0000664�0000000�0000000�00000010561�14670056262�0020551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- ## rrul test specification include("netperf_definitions.inc") DESCRIPTION="1000 up - exclusively Best Effort" DEFAULTS={'PLOT': "all_scaled"} DATA_SETS = o([ ('TCP upload BE', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo', 'watchdog_timer': LENGTH + DELAY, 'duplicates': 1000}), ('TCP upload avg', {'apply_to': [glob("TCP upload BE::*", exclude=["TCP upload sum"])], 'units': 'Mbits/s', 'runner': 'average',}), ('TCP upload sum', {'apply_to': [glob("TCP upload BE::*", exclude=["TCP upload avg"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) UDP BE1', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP BE2', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) UDP BE3', {'runner': 'udp_rtt', 'length': TOTAL_LENGTH, 'host': HOST, 'marking': 'CS0,CS0', 'units': 'ms'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('upload', {'description': 'Upload bandwidth plot', 'type': 'timeseries', 'legend_title': 'TCP upload', 'series': [{'data': glob('TCP upload BE::*'), 'label': 'BE'}, {'data': 'TCP upload avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('upload_scaled', {'description': 'Upload bandwidth w/axes scaled to remove outliers', 'parent': 'upload', 'scaling': (5,95)}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) UDP BE1', 'label': 'UDP BE1'}, {'data': 'Ping (ms) UDP BE2', 'label': 'UDP BE2'}, {'data': 'Ping (ms) UDP BE3', 'label': 'UDP BE3'}, {'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('ping_scaled', {'description': 'Ping w/axes scaled to remove outliers', 'parent': 'ping', 'scaling': (5,95)}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('icmp_cdf', {'description': 'ICMP CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'}, ], 'cutoff': (DELAY,-DELAY)}), ('totals', {'description': 'Total bandwidth and average ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': [None, 'Latency (ms)'], 'series': [{'data': 'TCP upload sum', 'label': 'Upload', 'smoothing': 10}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms)', 'smoothing': 10, 'axis': 2}]}), ('totals_scaled', {'description': 'Total bandwidth and average ping plot (scaled)', 'parent': 'totals', 'scaling': (5,95)}), ('all_scaled', {'description': 'Upload, ping (scaled versions)', 'type': 'meta', 'subplots': ('upload_scaled', 'ping_scaled')}), ('all', {'description': 'Upload, ping (unscaled versions)', 'type': 'meta', 'subplots': ('upload', 'ping')}), ('box_upload', {'description': 'Upload bandwidth box plot', 'parent': 'upload', 'type': 'box'}), ('box_ping', {'description': 'Ping box plot', 'parent': 'ping', 'type': 'box'}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ]) include("common.inc") �����������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/tcp_upload_prio.conf��������������������������������������������������������0000664�0000000�0000000�00000007761�14670056262�0021152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("netperf_definitions.inc") DESCRIPTION="TCP upload stream w/ToS prio bits" # # Special care need to be take for using this on the default # qdisc MQ which have pfifo_fast assigned to every HW queue. # # Setup requirements # 1. IRQ align CPUs to NIC HW queues # E.g. via: set_irq_affinity ethX # From: https://github.com/netoptimizer/network-testing/ # # 2. Force flent subcommands to run the same CPU # E.g: taskset -c 2 ./flent -H IP tcp_upload_prio # # This will force all measurements to go through the same qdisc. This # is needed so the ping/latency tests measures the real property of # the qdisc and Head-of-Line blocking effect. DEFAULTS={'PLOT': 'totals'} DATA_SETS = o([ ('TCP upload', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload2', {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'}), ('TCP upload total', {'apply_to': [glob("TCP upload*")], 'units': 'Mbits/s', 'runner': 'sum',}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) ICMP PRIO', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'marking': '0x10', 'units': 'ms', 'runner': 'ping'}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ]) PLOTS = o([ ('totals', {'description': 'Bandwidth and ping plot', 'type': 'timeseries', 'dual_axes': True, 'axis_labels': ['Bandwidth (Mbit/s)','Latency (ms)'], 'series': [{'data': 'TCP upload', 'label': 'Upload (MBit/s)'}, {'data': 'TCP upload2', 'label': 'Upload2 (MBit/s)'}, {'data': 'TCP upload total', 'label': 'Total Upload (Mbit/s)', 'smoothing': 10, 'color': 'green', 'linewidth': 3}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}, {'data': 'Ping (ms) ICMP PRIO', 'label': 'Ping hi-prio (ms)', 'axis': 2}, {'data': 'Ping (ms) avg', 'label': 'Avg Ping (ms)', 'smoothing': 10, 'color': 'black', 'linewidth': 2, 'axis': 2}, ] } ), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP', 'label': 'ICMP'}, {'data': 'Ping (ms) ICMP PRIO', 'label': 'Ping hi-prio'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}, ]}), ('ping_hiprio', {'description': 'Ping plot hi-prio', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) ICMP PRIO', 'label': 'Ping hi-prio'}, {'data': 'Ping (ms) ICMP PRIO', 'label': 'Ping hi-prio (smoothed)', 'smoothing': 10, 'linewidth': 2}, ]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ('box_totals', {'description': 'Box plot of totals', 'parent': 'totals', 'type': 'box',}), ]) include("common.inc") ���������������flent-2.2.0/flent/tests/udp_flood.conf��������������������������������������������������������������0000664�0000000�0000000�00000002625�14670056262�0017734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- mode: python; coding: utf-8; -*- AGGREGATOR='timeseries' TOTAL_LENGTH=LENGTH+2*DELAY DESCRIPTION="UDP flood w/ping" DEFAULTS={'PLOT': 'totals'} BW=get_test_parameter("udp_bandwidth", default=None, split=True) PKTSIZE=get_test_parameter("udp_pktsize", default=None, split=True) DATA_SETS = o([ ('UDP upload', {'host': HOST, 'interval': STEP_SIZE, 'length': LENGTH, 'ip_version': IP_VERSION, 'udp': True, 'bw': BW, 'pktsize': PKTSIZE, 'delay': DELAY, 'units': 'Mbits/s', 'udp': True, 'runner': 'iperf_csv'}), ('Ping (ms) ICMP', {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': HOST, 'units': 'ms', 'runner': 'ping'}), ]) PLOTS = o([ ('totals', {'description': 'Bandwidth and ping plot', 'type': 'box_combine', 'dual_axes': True, 'series': [{'data': 'UDP upload', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)', 'axis': 2}]}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'series': [{'data': 'Ping (ms) ICMP', 'label': 'Ping (ms)'},]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ]) include("common.inc") �����������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/udp_flood_var_up.conf�������������������������������������������������������0000664�0000000�0000000�00000010217�14670056262�0021304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- mode: python; coding: utf-8; -*- AGGREGATOR='timeseries' TOTAL_LENGTH=LENGTH+2*DELAY DESCRIPTION="UDP flood w/ping - variable number of hosts" DEFAULTS={'PLOT': 'upload'} BW=get_test_parameter("udp_bandwidth", default=None) PKTSIZE=get_test_parameter("udp_pktsize", default=None) DATA_SETS = o([ ('UDP upload avg', {'apply_to': [glob("UDP upload*", exclude=["UDP upload sum", "UDP upload fairness"])], 'units': 'Mbits/s', 'runner': 'average', 'id': 'Avg'}), ('UDP upload sum', {'apply_to': [glob("UDP upload*", exclude=["UDP upload avg", "UDP upload fairness"])], 'units': 'Mbits/s', 'runner': 'sum',}), ('UDP upload fairness', {'apply_to': [glob("UDP upload*", exclude=["UDP upload avg", "UDP upload sum"])], 'units': 'Idx', 'runner': 'fairness',}), ('Ping (ms) avg', {'apply_to': [glob("Ping (ms)*")], 'units': 'ms', 'runner': 'average',}), ('TCP upload sum', {'units': 'Mbits/s', 'runner': 'null',}), ]) def add_stream(i, host=None, udp_bandwidth=BW, udp_pktsize=PKTSIZE, local_bind=None, length=LENGTH, delay=DELAY, **kwargs): DATA_SETS['UDP upload %s' % host] = \ {'host': host, 'interval': STEP_SIZE, 'length': length, 'ip_version': IP_VERSION, 'udp': True, 'bw': udp_bandwidth, 'pktsize': udp_pktsize, 'local_bind': local_bind, 'delay': DELAY, 'units': 'Mbits/s', 'id': host, 'udp': True, 'runner': 'iperf_csv'} DATA_SETS['Ping (ms) ICMP %s' % host] = \ {'ip_version': IP_VERSION, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': host, 'local_bind': local_bind, 'units': 'ms', 'id': host, 'runner': 'ping'} for_stream_config(add_stream) PLOTS = o([ ('upload', {'description': 'Bandwidth plot', 'type': 'box_combine', 'series': [{'data': glob("UDP upload*", exclude=["UDP upload fairness", "UDP upload sum", "UDP upload avg"]), 'label': 'Upload', 'combine_mode': 'mean'}, {'data': "UDP upload avg", 'label': 'Upload -- avg', 'combine_mode': 'mean'}]}), ('upload_bar', {'description': 'Bandwidth bar plot', 'type': 'bar_combine', 'parent': 'upload'}), ('ping', {'description': 'Ping plot', 'type': 'timeseries', 'legend_title': 'Ping (ms)', 'axis_labels': ['Latency (ms)'], 'series': [{'data': glob('Ping (ms) ICMP *'), 'label': 'Ping (ms) ICMP'}, {'data': 'Ping (ms) avg', 'label': 'Avg', 'smoothing': 10, 'color': 'black', 'linewidth': 2}]}), ('totals', {'description': 'Bandwidth and ping box plot', 'type': 'box_combine', 'dual_axes': True, 'series': [{'data': 'UDP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}, {'data': 'Ping (ms) avg', 'label': 'Ping (ms) avg', 'axis': 2}]}), ('totals_throughput', {'description': 'Bandwidth bar plot', 'type': 'bar_combine', 'series': [{'data': 'UDP upload sum', 'label': 'Upload', 'combine_mode': 'mean'}]}), ('udp_tcp_combine', {'description': 'Bandwidth bar plot for UDP and TCP tests', 'type': 'bar_combine', 'dual_axes': True, 'series': [{'data': 'UDP upload sum', 'label': 'UDP Upload', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'TCP Upload', 'axis': 2, 'combine_mode': 'mean'}, ]}), ('ping_cdf', {'description': 'Ping CDF plot', 'type': 'cdf', 'series': [{'data': glob('Ping (ms) ICMP*'), 'label': 'Ping (ms)'},], 'cutoff': (DELAY,-DELAY)}), ('ping_cdf_combine', {'description': 'Ping CDF plot', 'type': 'cdf_combine', 'group_by': 'groups_concat', 'axis_labels': ['Latency (ms)'], 'parent': 'ping', 'cutoff': (DELAY,-DELAY)}), ]) include("common.inc") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/udp_flood_var_up_stagger.conf�����������������������������������������������0000664�0000000�0000000�00000000756�14670056262�0023027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- mode: python; coding: utf-8; -*- include("udp_flood_var_up.conf") DESCRIPTION="UDP flood w/ping - variable number of hosts, staggered start" DEFAULTS={'PLOT': 'upload'} START_INTERVAL=LENGTH//max(1,len(HOSTS)) # Adjust length and start time to stagger the hosts startup over the test interval for i,host in enumerate(HOSTS): DATA_SETS['UDP upload %s' % host]['length'] = LENGTH - i*START_INTERVAL DATA_SETS['UDP upload %s' % host]['delay'] = DELAY + i*START_INTERVAL ������������������flent-2.2.0/flent/tests/voip-1up.conf���������������������������������������������������������������0000664�0000000�0000000�00000006030�14670056262�0017433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- DESCRIPTION="VoIP one-way stream test with competing TCP stream" DEFAULTS={'PLOT': 'totals_loss'} TOTAL_LENGTH=LENGTH+2*DELAY VOIP_HOST=HOST VOIP_LOCAL_BIND=LOCAL_BIND[0] if LOCAL_BIND else None VOIP_CONTROL_HOST=CONTROL_HOST or HOST VOIP_LENGTH=TOTAL_LENGTH VOIP_CUTOFF=(DELAY,-DELAY) VOIP_MARKING=get_test_parameter("voip_marking", default=None) DATA_SETS=o() PLOTS=o() include("voip.inc") DATA_SETS['TCP upload'] = {'test': 'TCP_STREAM', 'length': LENGTH, 'host': HOST, 'delay': DELAY, 'units': 'Mbits/s', 'runner': 'netperf_demo'} PLOTS['bandwidth'] = {'description': 'TCP bandwidth plot', 'type': 'timeseries', 'series': [{'data': 'TCP upload', 'label': 'TCP upload'},]} PLOTS['totals'] = {'description': 'TCP bandwidth with delay and jitter', 'type': 'meta', 'subplots': ('bandwidth', 'voip_delay')} PLOTS['totals_loss'] = {'description': 'TCP bandwidth with delay, jitter and loss', 'type': 'meta', 'subplots': ('bandwidth', 'voip_delay', 'voip_loss')} PLOTS['box_combine'] = {'description': "Box combination plot", 'type': 'box_combine', 'cutoff': (DELAY,-DELAY), 'dual_axes': True, 'axis_labels': ['Mean bandwidth (Mbps)', 'Mean induced delay (ms)'], 'series': [{'data': 'TCP upload', 'label': 'TCP upload', 'combine_mode': 'mean'}, {'data': 'VoIP::delay', 'label': 'Induced VoIP delay', 'combine_mode': 'mean_span', 'axis': 2}]} PLOTS['bar_upload'] = {'description': "Bar combination plot", 'type': 'bar_combine', 'cutoff': (DELAY,-DELAY), 'axis_labels': ['Mean goodput (Mbps)'], 'series': [{'data': 'TCP upload', 'label': 'TCP upload', 'combine_mode': 'mean'}, ]} PLOTS['cdf_combine'] = {'description': "CDF combination plot", 'type': 'cdf_combine', 'axis_labels': ['Induced one-way delay (ms)'], 'group_by': 'groups_concat', 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'VoIP::delay', 'label': 'Induced VoIP delay', 'markevery': 10, 'combine_mode': 'span'}]} PLOTS['bar_cdf'] = {'description': 'Bar and CDF combinations', 'type': 'meta', 'subplots': ('bar_upload', 'cdf_combine'), 'share_axis': False, 'orientation': 'horizontal'} include("common.inc") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/voip-rrul.conf��������������������������������������������������������������0000664�0000000�0000000�00000005305�14670056262�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- include("rrul_be.conf") DESCRIPTION="VoIP one-way stream test with competing RRUL test" DEFAULTS={'PLOT': 'totals_loss'} TOTAL_LENGTH=LENGTH+2*DELAY VOIP_HOST=HOST VOIP_LOCAL_BIND=LOCAL_BIND[0] if LOCAL_BIND else None VOIP_CONTROL_HOST=CONTROL_HOST or HOST VOIP_LENGTH=TOTAL_LENGTH VOIP_CUTOFF=(DELAY,-DELAY) VOIP_MARKING=get_test_parameter("voip_marking", default=None) include("voip.inc") PLOTS['ping_delay'] = {'description': 'RRUL Ping and VoIP one-way delay', 'type': 'timeseries', 'axis_labels': ['Latency (ms)'], 'series': [{'data': 'Ping (ms) avg', 'label': 'Average ping RTT', 'color': 'blue'}, {'data': 'VoIP::delay', 'label': 'VoIP one-way delay'}, {'data': 'VoIP::jitter', 'label': 'VoIP jitter', 'color': 'green'},]} PLOTS['totals_loss'] = {'description': 'Total TCP bandwidth with ping, delay, jitter and loss', 'type': 'meta', 'subplots': ('totals', 'ping_delay', 'voip_loss')} PLOTS['box_combine'] = {'description': "Box combination plot", 'type': 'box_combine', 'cutoff': (DELAY,-DELAY), 'dual_axes': True, 'axis_labels': ['Mean goodput (Mbps)', 'Mean induced delay (ms)'], 'series': [{'data': 'TCP download sum', 'label': 'Total TCP download', 'combine_mode': 'mean'}, {'data': 'TCP upload sum', 'label': 'Total TCP upload', 'combine_mode': 'mean'}, {'data': 'VoIP::delay', 'label': 'Induced VoIP delay', 'combine_mode': 'mean_span', 'axis': 2}]} PLOTS['cdf_combine'] = {'description': "CDF combination plot", 'type': 'cdf_combine', 'axis_labels': ['Induced one-way delay (ms)'], 'group_by': 'groups_concat', 'cutoff': (DELAY,-DELAY), 'series': [{'data': 'VoIP::delay', 'label': 'VoIP delay', 'markevery': 10, 'combine_mode': 'span'}]} include("common.inc") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/voip.conf�������������������������������������������������������������������0000664�0000000�0000000�00000000626�14670056262�0016735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- DESCRIPTION="VoIP one-way stream test" AGGREGATOR='timeseries' TOTAL_LENGTH=LENGTH DEFAULTS={'PLOT': 'voip_delay'} VOIP_HOST=HOST VOIP_LOCAL_BIND=LOCAL_BIND[0] if LOCAL_BIND else None VOIP_CONTROL_HOST=CONTROL_HOST or HOST VOIP_LENGTH=LENGTH VOIP_CUTOFF=(0,0) VOIP_MARKING=get_test_parameter("voip_marking", default=None) DATA_SETS=o() PLOTS=o() include("voip.inc") ����������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/voip.inc��������������������������������������������������������������������0000664�0000000�0000000�00000015270�14670056262�0016562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- DATA_SETS['VoIP'] = {'length': VOIP_LENGTH, 'host': VOIP_HOST, 'local_bind': VOIP_LOCAL_BIND, 'interval': STEP_SIZE, 'units': 'Kbps', 'control_host': VOIP_CONTROL_HOST, 'marking': VOIP_MARKING, 'runner': 'voip'} DATA_SETS['VoIP::bitrate'] = {'units': 'Kbits/s', 'runner': 'null'} DATA_SETS['VoIP::delay'] = {'units': 'ms', 'runner': 'null'} DATA_SETS['VoIP::jitter'] = {'units': 'ms', 'runner': 'null'} DATA_SETS['VoIP::loss'] = {'units': 'count', 'runner': 'null'} DATA_SETS['VoIP::induced_delay'] = {'units': 'ms', 'runner': 'diff_min', 'apply_to': ['VoIP::delay']} PLOTS['voip_delay'] = {'description': 'VoIP delay and jitter', 'type': 'timeseries', 'axis_labels': ['One-way delay (ms)'], 'series': [{'data': 'VoIP::delay', 'label': 'VoIP delay'}, {'data': 'VoIP::jitter', 'label': 'VoIP jitter', 'color': 'green'} ]} PLOTS['voip_delay_cdf'] = {'description': 'VoIP delay and jitter CDF', 'type': 'cdf', 'cutoff': VOIP_CUTOFF, 'parent': 'voip_delay'} PLOTS['voip_delay_box'] = {'description': 'VoIP delay and jitter box plot', 'type': 'box', 'cutoff': VOIP_CUTOFF, 'parent': 'voip_delay'} PLOTS['voip_induced_delay'] = {'description': 'VoIP induced delay CDF', 'type': 'timeseries', 'axis_labels': ['Induced one-way delay (ms)'], 'series': [{'data': 'VoIP::induced_delay', 'label': 'VoIP induced delay'}]} PLOTS['voip_induced_delay_cdf'] = {'description': 'VoIP induced delay box plot', 'type': 'cdf', 'cutoff': VOIP_CUTOFF, 'parent': 'voip_induced_delay'} PLOTS['voip_induced_delay_box'] = {'description': 'VoIP induced delay box plot', 'type': 'box', 'cutoff': VOIP_CUTOFF, 'parent': 'voip_induced_delay'} PLOTS['voip_box_delay_loss'] = {'description': "Box delay/loss combination plot", 'type': 'box_combine', 'cutoff': VOIP_CUTOFF, 'dual_axes': True, 'axis_labels': ['Mean induced delay (ms)', 'Mean loss rate'], 'series': [{'data': 'VoIP::delay', 'label': 'Induced VoIP delay', 'combine_mode': 'mean_span', 'axis': 1}, {'data': 'VoIP::loss', 'label': 'VoIP loss rate', 'combine_mode': 'raw_seq_loss', 'axis': 2}]} PLOTS['voip_mos_combine'] = {'description': "VoIP MOS combination plot", 'type': 'box_combine', 'cutoff': VOIP_CUTOFF, 'axis_labels': ['MOS value'], 'series': [{'data': 'VoIP', 'label': 'MOS', 'combine_mode': 'mos'}, ]} PLOTS['voip_bitrate'] = {'description': 'VoIP bitrate', 'type': 'timeseries', 'series': [{'data': 'VoIP::bitrate', 'label': 'Bitrate'} ]} PLOTS['voip_mos_upload'] = {'description': "VoIP MOS and upload throughput plot", 'type': 'box_combine', 'cutoff': VOIP_CUTOFF, 'axis_labels': ['MOS value', 'Mbit/s'], 'dual_axes': True, 'series': [{'data': 'VoIP', 'label': 'MOS', 'combine_mode': 'mos'}, # upload sum doesn't exist for # single-flow tests, so use two # globbing expressions to # support both types of tests {'data': glob('TCP upload sum'), 'label': 'Upload', 'combine_mode': 'mean', 'axis': 2}, {'data': glob('TCP upload'), 'label': 'Upload', 'combine_mode': 'mean', 'axis': 2}, ]} PLOTS['voip_loss'] = {'description': 'VoIP loss', 'type': 'timeseries', 'axis_labels': ['Loss count'], 'series': [{'data': 'VoIP::loss', 'label': 'VoIP loss', 'linestyle': '', 'marker': '.',} ]} PLOTS['voip_delay_loss'] = {'description': 'VoIP delay and loss plots', 'type': 'meta', 'subplots': ('voip_delay', 'voip_loss')} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/tests/voip_mixin.inc��������������������������������������������������������������0000664�0000000�0000000�00000000675�14670056262�0017771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- # Mixin include file to add a host to receive a VoIP flow VOIP_HOST=get_test_parameter('voip_host', default=None) VOIP_LOCAL_BIND=get_test_parameter('voip_local_bind', default=None) VOIP_CONTROL_HOST=get_test_parameter('voip_control_host', VOIP_HOST) VOIP_MARKING=get_test_parameter("voip_marking", default=None) VOIP_LENGTH=TOTAL_LENGTH VOIP_CUTOFF=(DELAY,-DELAY) if VOIP_HOST: include("voip.inc") �������������������������������������������������������������������flent-2.2.0/flent/tests/wifi_stats.inc��������������������������������������������������������������0000664�0000000�0000000�00000026517�14670056262�0017767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## -*- mode: python; coding: utf-8 -*- # Mixin include file to add wifi stats to a test WIFI_STATS_HOSTS=get_test_parameter('wifi_stats_hosts', default=[], split=True) WIFI_STATS_IFACES=get_test_parameter('wifi_stats_interfaces', default=[], split=True) WIFI_STATS_STATIONS=get_test_parameter('wifi_stats_stations', default=[], split=True) if WIFI_STATS_HOSTS and WIFI_STATS_IFACES and WIFI_STATS_STATIONS: for host, iface in zip(WIFI_STATS_HOSTS, WIFI_STATS_IFACES): DATA_SETS['wifi_stats_%s' % host] = {'interface': iface, 'interval': STEP_SIZE, 'length': TOTAL_LENGTH, 'host': host, 'stations': WIFI_STATS_STATIONS, 'units': 'misc', 'id': host, 'runner': 'wifi_stats'} for station in WIFI_STATS_STATIONS: DATA_SETS['wifi_stats_%s::airtime_rx::%s' % (host,station)] = {'units': 'us', 'runner': 'null', 'id': "%s::%s" % (host, station), 'parent_id' : host} DATA_SETS['wifi_stats_%s::airtime_tx::%s' % (host,station)] = {'units': 'us', 'runner': 'null', 'id': "%s::%s" % (host, station), 'parent_id' : host} DATA_SETS['wifi_stats_%s::airtime_total::%s' % (host,station)] = {'units': 'us', 'apply_to': ['wifi_stats_%s::airtime_rx::%s' % (host,station), 'wifi_stats_%s::airtime_tx::%s' % (host,station),], 'runner': 'sum', 'id': "%s::%s" % (host, station), 'parent_id' : host} DATA_SETS['wifi_stats_%s::avg_aggr_size::%s' % (host,station)] = {'units': 'packets', 'runner': 'null', 'id': "%s::%s" % (host, station), 'parent_id' : host} DATA_SETS['wifi_stats_%s::airtime_sum' % host] = {'units': 'us', 'apply_to': [glob('wifi_stats_%s::airtime_rx::**' % host), glob('wifi_stats_%s::airtime_tx::**' % host),], 'runner': 'sum', 'id': host} DATA_SETS['wifi_stats_%s::airtime_fairness' % host] = {'units': 'us', 'apply_to': [glob('wifi_stats_%s::airtime_total::*' % host)], 'runner': 'fairness', 'id': host} PLOTS['airtime_rx'] = {'description': 'WiFi RX airtime', 'type': 'timeseries', 'axis_labels': ['Microseconds'], 'legend_title': 'RX airtime', 'series': [ {'data': glob('wifi_stats_*'), 'raw_key': glob('stations::**::airtime_rx'), 'label': 'RX airtime'}, ]} PLOTS['airtime_rx_combine'] = {'description': 'Combined airtime RX plot (short timescale)', 'parent': 'airtime_rx', 'series': [{'data': glob('wifi_stats_*::airtime_rx::**'), 'label': 'RX airtime'}], 'type': 'box_combine', 'cutoff': (DELAY,-DELAY), 'group_by': 'groups_concat'} PLOTS['airtime_rx_combine_long'] = {'description': 'Combined airtime RX plot (long timescale)', 'parent': 'airtime_rx', 'series': [{'data': glob('wifi_stats_*::airtime_rx::**'), 'label': 'RX airtime'}], 'type': 'box_combine', 'cutoff': (DELAY,-DELAY), 'group_by': 'groups'} PLOTS['airtime_tx'] = {'description': 'WiFi TX airtime', 'type': 'timeseries', 'axis_labels': ['Microseconds'], 'legend_title': 'TX airtime', 'series': [ {'data': glob('wifi_stats_*'), 'raw_key': glob('stations::**::airtime_tx'), 'label': 'TX airtime'}, ]} PLOTS['airtime_tx_combine'] = {'description': 'Combined airtime TX plot (short timescale)', 'parent': 'airtime_tx', 'series': [{'data': glob('wifi_stats_*::airtime_tx::**'), 'label': 'TX airtime'}], 'type': 'box_combine', 'cutoff': (DELAY,-DELAY), 'group_by': 'groups_concat'} PLOTS['airtime_tx_combine_long'] = {'description': 'Combined airtime TX plot (long timescale)', 'parent': 'airtime_tx', 'series': [{'data': glob('wifi_stats_*::airtime_tx::**'), 'label': 'TX airtime'}], 'type': 'box_combine', 'cutoff': (DELAY,-DELAY), 'group_by': 'groups'} PLOTS['airtime'] = {'description': 'WiFi airtime', 'type': 'meta', 'subplots': ('airtime_rx', 'airtime_tx')} PLOTS['airtime_rx_stacked'] = {'description': 'WiFi RX airtime (stacked)', 'parent': 'airtime_rx', 'series': [{'data': glob('wifi_stats_*::airtime_rx::**'), 'label': 'RX airtime'}], 'stacked': True} PLOTS['airtime_tx_stacked'] = {'description': 'WiFi TX airtime (stacked)', 'parent': 'airtime_tx', 'series': [{'data': glob('wifi_stats_*::airtime_tx::**'), 'label': 'TX airtime'}], 'stacked': True} PLOTS['airtime_stacked'] = {'description': 'WiFi airtime (stacked)', 'type': 'meta', 'subplots': ('airtime_rx_stacked', 'airtime_tx_stacked')} PLOTS['airtime_total'] = {'description': 'WiFi total airtime (TX+RX sum)', 'type': 'timeseries', 'axis_labels': ['Microseconds'], 'legend_title': 'Total airtime', 'series': [ {'data': glob('wifi_stats_*::airtime_total::**'), 'label': 'Total airtime'}, ]} PLOTS['airtime_total_stacked'] = {'description': 'WiFi total airtime (stacked)', 'parent': 'airtime_total', 'stacked': True} PLOTS['airtime_total_combine'] = {'description': 'Combined airtime total plot', 'type': 'box_combine', 'axis_labels': ['Airtime share'], 'cutoff': (DELAY,-DELAY), 'group_by': 'groups_concat', 'series': [ {'data': glob('wifi_stats_*::airtime_total::**'), 'label': 'Total airtime'}, ]} PLOTS['airtime_total_combine_long'] = {'description': 'Combined airtime total plot (long timescale)', 'parent': 'airtime_total_combine', 'group_by': 'groups'} PLOTS['airtime_fairness_combine'] = {'description': 'Combined airtime fairness plot', 'type': 'box_combine', 'axis_labels': ['Fairness index'], 'cutoff': (DELAY,-DELAY), 'series': [ {'data': glob('wifi_stats_*::airtime_fairness'), 'source': glob('wifi_stats_{id}::airtime_total::**'), 'label': 'Airtime fairness', 'combine_mode': 'fairness_mean'}, ], 'group_by': 'groups'} PLOTS['airtime_fairness_combine_bar'] = {'description': 'Combined airtime fairness bar plot', 'type': 'bar_combine', 'axis_labels': ['Fairness index'], 'cutoff': (DELAY,-DELAY), 'series': [ {'data': glob('wifi_stats_*::airtime_fairness'), 'source': glob('wifi_stats_{id}::airtime_total::**'), 'label': 'Airtime fairness', 'combine_mode': 'fairness_mean'}, ], 'group_by': 'groups'} PLOTS['airtime_fairness_combine_tx'] = {'description': 'Combined TX airtime fairness plot', 'parent': 'airtime_fairness_combine', 'series': [ {'data': glob('wifi_stats_*::airtime_fairness'), 'source': glob('wifi_stats_{id}::airtime_tx::**'), 'label': 'Airtime TX fairness', 'combine_mode': 'fairness_mean'}]} PLOTS['airtime_sum'] = {'description': 'WiFi airtime (all stations)', 'type': 'timeseries', 'axis_labels': ['Microseconds'], 'legend_title': 'Airtime sum', 'series': [ {'data': glob('wifi_stats_*::airtime_sum'), 'label': 'Airtime sum'}, ]} PLOTS['airtime_sum_combine'] = {'description': 'Combined airtime sum plot', 'parent': 'airtime_sum', 'type': 'box_combine', 'cutoff': (DELAY,-DELAY), 'group_by': 'groups_concat'} PLOTS['aggregation'] = {'description': 'WiFi aggregation size', 'type': 'timeseries', 'axis_labels': ['Packets'], 'legend_title': 'Avg aggregation size', 'series': [ {'data': glob('wifi_stats_*::avg_aggr_size::**'), 'label': 'Aggr size'}, ]} PLOTS['aggregation_combine'] = {'description': 'Combined aggregation size plot', 'parent': 'aggregation', 'type': 'box_combine', 'cutoff': (DELAY,-DELAY), 'group_by': 'groups_concat'} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/transformers.py�������������������������������������������������������������������0000664�0000000�0000000�00000005464�14670056262�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # tranformers.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 24 October 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals try: import numpy as np except ImportError: np = None def transform_results(results, func): """Transform a list of (timestamp,value) pairs by applying a function to the value.""" try: for i in range(len(results)): results[i][1] = func(results[i][1]) except TypeError: # Transformers can also be applied to metadata items, in which case # calling len() on results will result in a TypeError. So just try to # call the function on the value itself. return func(results) return results def rr_to_ms(results): """Transforms a transactions/second netperf RR measurement into ping times in milliseconds.""" if hasattr(results, "shape"): return 1000 / results def safe_divide(x): if x == 0: return None return 1000.0 / x return transform_results(results, safe_divide) def s_to_ms(results): if hasattr(results, "shape"): return results * 1000.0 return transform_results(results, lambda x: x * 1000.0) def bits_to_mbits(results): if hasattr(results, "shape"): return results / 1000000.0 return transform_results(results, lambda x: x / 1000000.0) def kbits_to_mbits(results): if hasattr(results, "shape"): return results / 1000.0 return transform_results(results, lambda x: x / 1000.0) def cumulative_to_events(results): """Transform cumulative counter values into the increasing events.""" if hasattr(results, "shape") and np is not None: # Need output array same length as input array arr = np.zeros(len(results), dtype=float) arr[1:] = np.diff(results) return arr try: current = results[0][1] res = [] for t, v in results: res.append((t, v - current)) current = v return res except (TypeError, IndexError): return results def identity(results): return results ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/ui/�������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0014360�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/ui/aboutdialog.ui�����������������������������������������������������������������0000664�0000000�0000000�00000002444�14670056262�0017215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>AboutDialog</class> <widget class="QDialog" name="AboutDialog"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>489</width> <height>300</height> </rect> </property> <property name="windowTitle"> <string>About Flent</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QLabel" name="label"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="font"> <font> <pointsize>20</pointsize> <weight>75</weight> <bold>true</bold> </font> </property> <property name="text"> <string>The FLExible Network Tester</string> </property> <property name="alignment"> <set>Qt::AlignCenter</set> </property> </widget> </item> <item> <widget class="QLabel" name="aboutText"> <property name="textFormat"> <enum>Qt::RichText</enum> </property> <property name="openExternalLinks"> <bool>true</bool> </property> </widget> </item> </layout> </widget> <resources/> <connections/> </ui> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/ui/addcolumn.ui�������������������������������������������������������������������0000664�0000000�0000000�00000004500�14670056262�0016664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>AddColumnDialog</class> <widget class="QDialog" name="AddColumnDialog"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>390</width> <height>103</height> </rect> </property> <property name="windowTitle"> <string>Add new column</string> </property> <property name="modal"> <bool>true</bool> </property> <layout class="QFormLayout" name="formLayout"> <item row="1" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> <string>Metadata path:</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QLineEdit" name="metadataPathEdit"> <property name="toolTip"> <string>Enter colon-separated metadata path. Example: EGRESS_INFO:qdiscs:0:name.</string> </property> </widget> </item> <item row="4" column="0" colspan="2"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="standardButtons"> <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="label"> <property name="text"> <string>Column label:</string> </property> </widget> </item> <item row="2" column="1"> <widget class="QLineEdit" name="columnNameEdit"/> </item> </layout> </widget> <tabstops> <tabstop>metadataPathEdit</tabstop> <tabstop>columnNameEdit</tabstop> <tabstop>buttonBox</tabstop> </tabstops> <resources/> <connections> <connection> <sender>buttonBox</sender> <signal>accepted()</signal> <receiver>AddColumnDialog</receiver> <slot>accept()</slot> <hints> <hint type="sourcelabel"> <x>248</x> <y>254</y> </hint> <hint type="destinationlabel"> <x>157</x> <y>274</y> </hint> </hints> </connection> <connection> <sender>buttonBox</sender> <signal>rejected()</signal> <receiver>AddColumnDialog</receiver> <slot>reject()</slot> <hints> <hint type="sourcelabel"> <x>316</x> <y>260</y> </hint> <hint type="destinationlabel"> <x>286</x> <y>274</y> </hint> </hints> </connection> </connections> </ui> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/ui/mainwindow.ui������������������������������������������������������������������0000664�0000000�0000000�00000042150�14670056262�0017075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>1142</width> <height>775</height> </rect> </property> <property name="windowTitle"> <string>Flent GUI</string> </property> <property name="dockOptions"> <set>QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks</set> </property> <widget class="QWidget" name="centralwidget"> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QWidget" name="emptyWidget" native="true"> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> <item> <widget class="QLabel" name="emptyLabel"> <property name="text"> <string>No data files loaded. To show data, open a data file or run a new test.</string> </property> <property name="alignment"> <set>Qt::AlignCenter</set> </property> <property name="wordWrap"> <bool>true</bool> </property> <property name="margin"> <number>10</number> </property> </widget> </item> <item> <widget class="QWidget" name="widget" native="true"> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="openFileButton"> <property name="text"> <string>Open data file</string> </property> </widget> </item> <item> <widget class="QPushButton" name="runTestButton"> <property name="text"> <string>Run new test</string> </property> </widget> </item> <item> <spacer name="horizontalSpacer_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </widget> </item> <item> <spacer name="verticalSpacer_2"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> </layout> </widget> </item> <item> <widget class="QTabWidget" name="viewArea"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="currentIndex"> <number>-1</number> </property> <property name="documentMode"> <bool>false</bool> </property> <property name="tabsClosable"> <bool>true</bool> </property> <property name="movable"> <bool>true</bool> </property> </widget> </item> </layout> </widget> <widget class="QMenuBar" name="menubar"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>1142</width> <height>30</height> </rect> </property> <widget class="QMenu" name="menu_File"> <property name="title"> <string>&File</string> </property> <addaction name="actionNewTab"/> <addaction name="actionOpen"/> <addaction name="actionCloseTab"/> <addaction name="actionCloseAll"/> <addaction name="actionSavePlot"/> <addaction name="separator"/> <addaction name="actionNewTest"/> <addaction name="separator"/> <addaction name="actionQuit"/> </widget> <widget class="QMenu" name="menu_View"> <property name="title"> <string>&View</string> </property> <addaction name="actionPlotSelector"/> <addaction name="actionMetadata"/> <addaction name="actionOpenFiles"/> <addaction name="actionLogEntries"/> <addaction name="actionPlotSettings"/> <addaction name="separator"/> <addaction name="actionNextTab"/> <addaction name="actionPrevTab"/> <addaction name="separator"/> <addaction name="actionRefresh"/> </widget> <widget class="QMenu" name="menu_Data"> <property name="title"> <string>&Data</string> </property> <addaction name="actionLoadExtra"/> <addaction name="actionOtherExtra"/> <addaction name="actionClearExtra"/> <addaction name="separator"/> <addaction name="actionScaleOpen"/> </widget> <widget class="QMenu" name="menu_Settings"> <property name="title"> <string>&Settings</string> </property> <addaction name="checkHighlight"/> <addaction name="checkDebugLog"/> <addaction name="checkExceptionLog"/> </widget> <widget class="QMenu" name="menu_Help"> <property name="title"> <string>&Help</string> </property> <addaction name="actionHelpGUI"/> <addaction name="actionHelpRunning"/> <addaction name="actionHelpTests"/> <addaction name="separator"/> <addaction name="actionHelpBug"/> <addaction name="actionHelpAbout"/> </widget> <addaction name="menu_File"/> <addaction name="menu_View"/> <addaction name="menu_Settings"/> <addaction name="menu_Data"/> <addaction name="menu_Help"/> </widget> <widget class="QStatusBar" name="statusbar"/> <widget class="QDockWidget" name="plotDock"> <property name="features"> <set>QDockWidget::AllDockWidgetFeatures</set> </property> <property name="windowTitle"> <string>Sele&ct plot</string> </property> <attribute name="dockWidgetArea"> <number>2</number> </attribute> <widget class="QWidget" name="dockWidgetContents"> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QListView" name="plotView"> <property name="editTriggers"> <set>QAbstractItemView::NoEditTriggers</set> </property> </widget> </item> </layout> </widget> </widget> <widget class="QDockWidget" name="metadataDock"> <property name="floating"> <bool>false</bool> </property> <property name="windowTitle"> <string>&Metadata</string> </property> <attribute name="dockWidgetArea"> <number>8</number> </attribute> <widget class="QWidget" name="dockWidgetContents_3"> <layout class="QVBoxLayout" name="metadataLayout"> <item> <widget class="QPushButton" name="expandButton"> <property name="text"> <string>Expand all items</string> </property> </widget> </item> </layout> </widget> </widget> <widget class="QDockWidget" name="openFilesDock"> <property name="windowTitle"> <string>Ope&n files</string> </property> <attribute name="dockWidgetArea"> <number>8</number> </attribute> <widget class="QWidget" name="dockWidgetContents_2"> <layout class="QGridLayout" name="gridLayout"/> </widget> </widget> <widget class="QDockWidget" name="logEntriesDock"> <property name="windowTitle"> <string>&Log entries</string> </property> <attribute name="dockWidgetArea"> <number>8</number> </attribute> <widget class="QWidget" name="dockWidgetContents_4"/> </widget> <widget class="QDockWidget" name="plotSettingsDock"> <property name="windowTitle"> <string>Plot settin&gs</string> </property> <attribute name="dockWidgetArea"> <number>2</number> </attribute> <widget class="QWidget" name="dockWidgetContents_5"/> </widget> <action name="actionQuit"> <property name="text"> <string>&Quit</string> </property> <property name="shortcut"> <string>Ctrl+Q</string> </property> </action> <action name="actionOpen"> <property name="text"> <string>&Open data file</string> </property> <property name="shortcut"> <string>Ctrl+O</string> </property> </action> <action name="actionCloseTab"> <property name="text"> <string>&Close tab</string> </property> <property name="shortcut"> <string>Ctrl+W</string> </property> </action> <action name="actionPlotSelector"> <property name="checkable"> <bool>true</bool> </property> <property name="checked"> <bool>true</bool> </property> <property name="text"> <string>&Plot selector</string> </property> </action> <action name="actionSettings"> <property name="checkable"> <bool>true</bool> </property> <property name="checked"> <bool>true</bool> </property> <property name="text"> <string>&Settings</string> </property> </action> <action name="actionMetadata"> <property name="checkable"> <bool>true</bool> </property> <property name="checked"> <bool>true</bool> </property> <property name="text"> <string>&Metadata</string> </property> </action> <action name="actionLoadExtra"> <property name="text"> <string>&Load additional data file</string> </property> </action> <action name="actionOtherExtra"> <property name="text"> <string>&Add other open data files</string> </property> </action> <action name="actionClearExtra"> <property name="text"> <string>&Clear extra data files</string> </property> </action> <action name="actionNextTab"> <property name="text"> <string>&Next tab</string> </property> <property name="shortcut"> <string>Ctrl+Tab</string> </property> </action> <action name="actionPrevTab"> <property name="text"> <string>Pr&evious tab</string> </property> <property name="shortcut"> <string>Ctrl+Shift+Backtab</string> </property> </action> <action name="actionSavePlot"> <property name="text"> <string>&Save plot to file</string> </property> <property name="shortcut"> <string>Ctrl+S</string> </property> </action> <action name="actionRefresh"> <property name="text"> <string>&Refresh plot</string> </property> <property name="shortcut"> <string>F5</string> </property> </action> <action name="actionScaleOpen"> <property name="text"> <string>&Scale open data files</string> </property> </action> <action name="actionCloseAll"> <property name="text"> <string>Close &all tabs</string> </property> <property name="shortcut"> <string>Ctrl+Shift+W</string> </property> </action> <action name="checkZeroY"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Zero Y-axis</string> </property> </action> <action name="checkInvertY"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Invert latency Y-axis</string> </property> </action> <action name="checkLogScale"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>L&og scale</string> </property> </action> <action name="checkScaleMode"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Scale mode</string> </property> </action> <action name="checkSubplotCombine"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>Subplot &combine</string> </property> </action> <action name="checkAnnotation"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Annotation</string> </property> </action> <action name="checkTitle"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Title</string> </property> </action> <action name="checkLegend"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Legend</string> </property> </action> <action name="checkFilterLegend"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Filter legend</string> </property> </action> <action name="actionOpenFiles"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Open files</string> </property> </action> <action name="actionNewTab"> <property name="text"> <string>&New tab</string> </property> <property name="shortcut"> <string>Ctrl+N</string> </property> </action> <action name="actionNewTest"> <property name="text"> <string>&Run new test</string> </property> <property name="shortcut"> <string>Ctrl+R</string> </property> </action> <action name="checkHighlight"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Highlight on hover</string> </property> </action> <action name="actionLogEntries"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>&Log entries</string> </property> </action> <action name="checkDebugLog"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>Show &debug log entries</string> </property> </action> <action name="checkExceptionLog"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>Show &exception backtraces</string> </property> </action> <action name="actionHelpRunning"> <property name="text"> <string>&Running Flent</string> </property> </action> <action name="actionHelpTests"> <property name="text"> <string>The supplied &tests</string> </property> </action> <action name="actionHelpAbout"> <property name="text"> <string>&About Flent</string> </property> </action> <action name="actionHelpGUI"> <property name="text"> <string>The Flent &GUI</string> </property> </action> <action name="actionHelpBug"> <property name="text"> <string>Report a &bug</string> </property> </action> <action name="actionPlotSettings"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>Plot &settings</string> </property> </action> </widget> <resources/> <connections> <connection> <sender>actionQuit</sender> <signal>triggered()</signal> <receiver>MainWindow</receiver> <slot>close()</slot> <hints> <hint type="sourcelabel"> <x>-1</x> <y>-1</y> </hint> <hint type="destinationlabel"> <x>570</x> <y>387</y> </hint> </hints> </connection> <connection> <sender>actionMetadata</sender> <signal>toggled(bool)</signal> <receiver>metadataDock</receiver> <slot>setVisible(bool)</slot> <hints> <hint type="sourcelabel"> <x>-1</x> <y>-1</y> </hint> <hint type="destinationlabel"> <x>1007</x> <y>671</y> </hint> </hints> </connection> <connection> <sender>actionPlotSelector</sender> <signal>toggled(bool)</signal> <receiver>plotDock</receiver> <slot>setVisible(bool)</slot> <hints> <hint type="sourcelabel"> <x>-1</x> <y>-1</y> </hint> <hint type="destinationlabel"> <x>1007</x> <y>278</y> </hint> </hints> </connection> <connection> <sender>actionOpenFiles</sender> <signal>toggled(bool)</signal> <receiver>openFilesDock</receiver> <slot>setVisible(bool)</slot> <hints> <hint type="sourcelabel"> <x>-1</x> <y>-1</y> </hint> <hint type="destinationlabel"> <x>1033</x> <y>627</y> </hint> </hints> </connection> <connection> <sender>actionLogEntries</sender> <signal>toggled(bool)</signal> <receiver>logEntriesDock</receiver> <slot>setVisible(bool)</slot> <hints> <hint type="sourcelabel"> <x>-1</x> <y>-1</y> </hint> <hint type="destinationlabel"> <x>1093</x> <y>711</y> </hint> </hints> </connection> <connection> <sender>actionPlotSettings</sender> <signal>toggled(bool)</signal> <receiver>plotSettingsDock</receiver> <slot>setVisible(bool)</slot> <hints> <hint type="sourcelabel"> <x>-1</x> <y>-1</y> </hint> <hint type="destinationlabel"> <x>1005</x> <y>645</y> </hint> </hints> </connection> </connections> </ui> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/ui/newtestdialog.ui���������������������������������������������������������������0000664�0000000�0000000�00000015573�14670056262�0017603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>newTestDialog</class> <widget class="QDialog" name="newTestDialog"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>950</width> <height>677</height> </rect> </property> <property name="windowTitle"> <string>Run New Test - Flent</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QLabel" name="label"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="font"> <font> <pointsize>18</pointsize> <weight>75</weight> <bold>true</bold> </font> </property> <property name="text"> <string>Run New Test</string> </property> <property name="alignment"> <set>Qt::AlignCenter</set> </property> </widget> </item> <item> <widget class="QGroupBox" name="testConfig"> <property name="enabled"> <bool>true</bool> </property> <property name="title"> <string>Test configuration</string> </property> <layout class="QFormLayout" name="formLayout"> <property name="fieldGrowthPolicy"> <enum>QFormLayout::ExpandingFieldsGrow</enum> </property> <item row="0" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> <string>Test &name</string> </property> <property name="buddy"> <cstring>testName</cstring> </property> </widget> </item> <item row="0" column="1"> <widget class="QComboBox" name="testName"> <property name="font"> <font> <family>Monospace</family> </font> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_6"> <property name="text"> <string>&Output directory</string> </property> <property name="buddy"> <cstring>outputDir</cstring> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> <string>&Destination hosts</string> </property> <property name="buddy"> <cstring>hostName</cstring> </property> </widget> </item> <item row="2" column="1"> <widget class="QLineEdit" name="hostName"> <property name="toolTip"> <string>Enter host name(s) or IP address(es) of test destination(s), separate with , or ;</string> </property> </widget> </item> <item row="3" column="0"> <widget class="QLabel" name="label_4"> <property name="text"> <string>Test &title</string> </property> <property name="buddy"> <cstring>testTitle</cstring> </property> </widget> </item> <item row="3" column="1"> <widget class="QLineEdit" name="testTitle"> <property name="toolTip"> <string>Enter optional test title (will be visible in plots and data file name)</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="label_5"> <property name="text"> <string>Test &length</string> </property> <property name="buddy"> <cstring>testLength</cstring> </property> </widget> </item> <item row="4" column="1"> <widget class="QSpinBox" name="testLength"> <property name="toolTip"> <string>Duration of the test. Actual duration may be slightly longer, as some tests add a warmup / cooldown period.</string> </property> <property name="suffix"> <string> s</string> </property> <property name="minimum"> <number>1</number> </property> <property name="maximum"> <number>10000</number> </property> </widget> </item> <item row="5" column="1"> <widget class="QCheckBox" name="extendedMetadata"> <property name="toolTip"> <string>Capture extended metadata from the machine running the test? This can include IP addresses and other possibly sensitive information.</string> </property> <property name="text"> <string>Capture e&xtended metadata</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QWidget" name="widget" native="true"> <layout class="QHBoxLayout" name="horizontalLayout"> <property name="spacing"> <number>5</number> </property> <property name="margin"> <number>0</number> </property> <item> <widget class="QLineEdit" name="outputDir"> <property name="toolTip"> <string>Directory to write the data file to</string> </property> </widget> </item> <item> <widget class="QPushButton" name="selectOutputDir"> <property name="sizePolicy"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="maximumSize"> <size> <width>33</width> <height>33</height> </size> </property> <property name="text"> <string>...</string> </property> <property name="autoDefault"> <bool>false</bool> </property> </widget> </item> </layout> </widget> </item> </layout> </widget> </item> <item> <widget class="QGroupBox" name="logBox"> <property name="enabled"> <bool>true</bool> </property> <property name="title"> <string>Progress</string> </property> <layout class="QGridLayout" name="gridLayout"> <item row="3" column="1"> <widget class="QProgressBar" name="progressBar"> <property name="value"> <number>0</number> </property> </widget> </item> <item row="3" column="0"> <widget class="QPushButton" name="runButton"> <property name="text"> <string>&Run test</string> </property> <property name="default"> <bool>true</bool> </property> </widget> </item> <item row="0" column="0" colspan="2"> <widget class="QPlainTextEdit" name="logTextEdit"> <property name="readOnly"> <bool>true</bool> </property> </widget> </item> </layout> </widget> </item> </layout> </widget> <resources/> <connections/> </ui> �������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/ui/resultwidget.ui����������������������������������������������������������������0000664�0000000�0000000�00000001613�14670056262�0017442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>resultWidget</class> <widget class="QWidget" name="resultWidget"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>728</width> <height>470</height> </rect> </property> <property name="windowTitle"> <string>Form</string> </property> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QWidget" name="graphDisplay" native="true"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>1</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> </widget> </item> <item> <widget class="QWidget" name="widget" native="true"> <layout class="QVBoxLayout" name="verticalLayout_3"/> </widget> </item> </layout> </widget> <resources/> <connections/> </ui> ���������������������������������������������������������������������������������������������������������������������flent-2.2.0/flent/util.py���������������������������������������������������������������������������0000664�0000000�0000000�00000057041�14670056262�0015301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # util.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 16 October 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import argparse import fcntl import fnmatch import ipaddress import json import os import re import shlex import shutil import socket import threading import time import subprocess from copy import copy from calendar import timegm from datetime import datetime, timedelta from math import log10, exp, sqrt try: from datetime import UTC except ImportError: UTC = None from flent.loggers import get_logger MULTIHOST_SEP = '//' ENCODING = "UTF-8" try: import locale ENCODING = locale.getpreferredencoding(False) except: pass try: import configparser except ImportError: import ConfigParser as configparser logger = get_logger(__name__) def uscore_to_camel(s): """Turn a underscore style string (org_table) into a CamelCase style string (OrgTable) for class names.""" return ''.join(x.capitalize() for x in s.split("_")) def classname(s, suffix=''): return uscore_to_camel(s) + suffix def utcnow(): if UTC is None: return datetime.utcnow() return datetime.now(UTC).replace(tzinfo=None) def utcfromtimestamp(ts): if UTC is None: return datetime.utcfromtimestamp(ts) return datetime.fromtimestamp(ts, UTC).replace(tzinfo=None) def format_date(dt, fmt="%Y-%m-%dT%H:%M:%S.%f", utc=False): if utc: return dt.strftime(fmt + "Z") # The datetime object is already UTC, so use gmtime rather than mktime to # get the timestamp from which to compute the UTC offset. ts = timegm(dt.timetuple()) + dt.microsecond / 1000000.0 offset = datetime.fromtimestamp(ts) - utcfromtimestamp(ts) return (dt + offset).strftime(fmt) def format_bytes(nbytes): if nbytes > 2**30: return (2**30, 'Gbytes') elif nbytes > 2**20: return (2**20, 'Mbytes') elif nbytes > 2**10: return (1**10, 'Kbytes') else: return (nbytes, 'bytes') def parse_date(timestring, min_t=None, offset=None): try: # Try to parse the straight UTC time string (has a Z at the end) return datetime.strptime(timestring, "%Y-%m-%dT%H:%M:%S.%fZ"), None except ValueError: try: dt = datetime.strptime(timestring, "%Y-%m-%dT%H:%M:%S.%f") except ValueError: dt = datetime.strptime(timestring, "%Y-%m-%dT%H:%M:%S") if offset is None: # The timestamp is in local time, so we need to find the timezone # offset. Guess this by computing the nearest whole-hour offset for # from the minimum timestamp in the data series (passed as min_t) # # If not min_t is available, compute the offset from the system time # zone. # # Return the offset so it can be re-used the next time this function # is called. logger.debug("Non-UTC timestamp %s, computing timezone offset", timestring) if min_t is not None: ts = orig_ts = timegm(dt.timetuple()) hours = 0 mult = 1 if ts < min_t else -1 while abs(ts - min_t) > 1800: hours -= 1 * mult ts += 3600 * mult offset = timedelta(hours=hours) logger.debug("Guessed timezone offset of %d hours for " "ts %f min_t %f diff %f", hours, orig_ts, min_t, orig_ts-min_t) else: ts = time.mktime(dt.timetuple()) offset = (datetime.fromtimestamp(ts) - utcfromtimestamp(ts)) logger.debug("Computed offset of %s from system timezone", offset) return dt - offset, offset def parse_int(val): try: try: return int(val) except ValueError: if val.strip().startswith("0x"): return int(val, 16) raise except (ValueError, AttributeError): raise ValueError("Invalid integer value: %s" % val) def clean_path(path, allow_dirs=False): if allow_dirs: return re.sub("[^A-Za-z0-9_/-]", "_", path) else: return re.sub("[^A-Za-z0-9_-]", "_", path) def long_substr(data, prefix_only=False): """Find the longest common substring between a list of strings. Optionally limit search to prefixes only. Brute force approach (i.e. not very efficient...). Based on https://stackoverflow.com/questions/2892931/longest-common-substring-from-more-than-two-strings-python""" # noqa: E501 substr = '' if len(data) > 1 and len(data[0]) > 0: if prefix_only: start_pos = [0] else: start_pos = range(len(data[0])) for i in start_pos: for j in range(len(data[0]) - i + 1): if j > len(substr) and all(data[0][i:i + j] in x for x in data): substr = data[0][i:i + j] return substr def diff_parts(strings, sep): """Return the unique parts of a set of strings by splitting on a separator and pruning parts that are identical for all strings""" parts = [s.split(sep) for s in strings] np = [p for p in zip(*parts) if len(set(p)) >= 1] return [sep.join(p) for p in zip(*np)] class CachingDictionary(dict): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.filename = None self.lock = threading.Lock() def read_file(self, filename): try: with open(filename) as fp: fcntl.flock(fp, fcntl.LOCK_EX) if fp.read(1) == '': # JSON parser chokes on an empty file, so turn this into a # FileNotFoundError (which is handled below) raise FileNotFoundError fp.seek(0) obj = json.load(fp) self.update(obj) logger.debug("Read cache '%s' from file '%s'", self, filename) except FileNotFoundError: if not self.write_file(filename): # File doesn't exist (or is empty), make sure we can write to it logger.warning("Couldn't write to cache file '%s'; not using.", filename) return else: logger.debug("Created cache file at '%s'", filename) except (IOError, json.decoder.JSONDecodeError) as e: logger.warning("Error reading cache file '%s' (%s); not using.", self.filename, e) return self.filename = filename def write_file(self, filename=None): if filename is None: filename = self.filename if filename is None: return try: with open(filename, 'w') as fp: fcntl.flock(fp, fcntl.LOCK_EX) json.dump(self, fp) return True except IOError as e: logger.debug("Writing cache file failed: '%s'", e) return False def __setitem__(self, key, value): with self.lock: super().__setitem__(key, value) self.write_file() def get_view(self, key): return CachingDictView(self, key) class CachingDictView: def __init__(self, parent, key): if key not in parent: parent[key] = {} self.parent = parent self.key = key def __getitem__(self, key): return self.parent[self.key][key] def __setitem__(self, key, value): with self.parent.lock: self.parent[self.key][key] = value self.parent.write_file() def __delitem__(self, key): with self.parent.lock: del self.parent[self.key][key] self.parent.write_file() def __contains__(self, key): return key in self.parent[self.key] def __iter__(self): return iter(self.parent[self.key]) def update(self, *args, **kwargs): with self.parent.lock: self.parent[self.key].update(*args, **kwargs) self.parent.write_file() def keys(self): return self.parent[self.key].keys() def values(self): return self.parent[self.key].values() def items(self): return self.parent[self.key].items() global_cache = CachingDictionary() get_cache = global_cache.get_view class WhichCache: def __init__(self): self.cache = get_cache("which") @staticmethod def is_executable(filename): return os.path.isfile(filename) and os.access(filename, os.X_OK) @staticmethod def lookup_remote(executable, remote_host): logger.debug("running 'command -v' for binary '%s' on host '%s'", executable, remote_host) try: output = subprocess.check_output(['ssh', remote_host, 'command -v {}'.format(executable)], timeout=1) output = output.decode(ENCODING).strip() logger.debug("Got path '%s' for '%s' on '%s'", output, executable, remote_host) return output except subprocess.CalledProcessError: pass return None def lookup_local(self, executable): pathname, filename = os.path.split(executable) if pathname: if not self.is_executable(executable): logger.debug("which: %s not executable", executable) return None logger.debug("which: %s is a full path and executable", executable) return executable filename = shutil.which(executable) if filename is not None: logger.debug("which: Found %s executable at %s", executable, filename) return filename return None def __call__(self, executable, fail=None, remote_host=None): key = f"{executable},{remote_host or ''}" if key in self.cache: logger.debug("which: found '%s' in cache: %s", key, self.cache[key]) return self.cache[key] if remote_host: binary = self.lookup_remote(executable, remote_host) else: binary = self.lookup_local(executable) if not binary and fail: raise fail("No %s binary found in PATH." % executable) if binary: self.cache[key] = binary return binary # callers call 'util.which', so make that an instance of the cache which = WhichCache() def path_components(path): folders = [] while path and path != "/": path, folder = os.path.split(path) if folder: folders.insert(0, folder) if path == "/": folders.insert(0, path) return folders def normalise_host(hostname, bracket_v6=False): if hostname and MULTIHOST_SEP in hostname: hostname = hostname.split(MULTIHOST_SEP, 1)[0] if bracket_v6: try: ipaddress.IPv6Address(hostname) hostname = "[{}]".format(hostname) except ValueError: pass return hostname def lookup_host(hostname, version=None): hostname = normalise_host(hostname) logger.debug("Looking up hostname '%s'.", hostname) if version == 4: version = socket.AF_INET elif version == 6: version = socket.AF_INET6 else: version = socket.AF_UNSPEC try: hostnames = socket.getaddrinfo(hostname, None, version, socket.SOCK_STREAM) except Exception: hostnames = None if not hostnames: raise RuntimeError("Found no hostnames on lookup of %s" % hostname) return hostnames[0] class DefaultConfigParser(configparser.ConfigParser): class _NoDefault(object): pass def get(self, section, option, default=_NoDefault): try: return configparser.ConfigParser.get(self, section, option) except configparser.NoOptionError: if default == self._NoDefault: raise else: return default def getint(self, section, option, default=_NoDefault): try: return configparser.ConfigParser.getint(self, section, option) except configparser.NoOptionError: if default == self._NoDefault: raise else: return default def getfloat(self, section, option, default=_NoDefault): try: return configparser.ConfigParser.getfloat(self, section, option) except configparser.NoOptionError: if default == self._NoDefault: raise else: return default def getboolean(self, section, option, default=_NoDefault): try: return configparser.ConfigParser.getboolean(self, section, option) except configparser.NoOptionError: if default == self._NoDefault: raise else: return default class Glob(object): """Object for storing glob patterns in matches""" def __init__(self, pattern, exclude=None): if exclude is None: self.exclude = [] else: self.exclude = exclude self.pattern = pattern def __repr__(self): return "<Glob: %s (excl: %s)>" % (self.pattern, ",".join(self.exclude)) def filter(self, values, exclude, args=None): if args is not None: pattern = self.pattern.format(**args) else: pattern = self.pattern # Exclude * from matching :, make ** match everything re_pat = fnmatch.translate(pattern.replace("**", "___PLACEHOLDER___")) re_pat = re_pat.replace(".*", "[^:]*") re_pat = re_pat.replace("___PLACEHOLDER___", ".*") regex = re.compile(re_pat) exclude += self.exclude return (x for x in values if regex.match(x) and not any((fnmatch.fnmatch(x, e) for e in exclude))) def __iter__(self): return iter((self,)) # allow list(g) to return [g] @classmethod def filter_dict(cls, d, args=None): # Expand glob patterns in parameters. Go through all items in the # dictionary looking for subkeys that is a Glob instance or a list # that has a Glob instance in it. for k, v in list(d.items()): for g_k in list(v.keys()): try: v[g_k] = cls.expand_list( v[g_k], list(d.keys()), [k], args=args) except TypeError: continue return d @classmethod def expand_list(cls, l, values, exclude=None, args=None): l = list(l) # copy list, turns lone Glob objects into [obj] new_l = [] if exclude is None: exclude = [] # Expand glob patterns in list. Go through all items in the # list looking for Glob instances and expanding them. for pattern in l: if isinstance(pattern, cls): new_l.extend(pattern.filter(values, exclude, args)) else: new_l.append(pattern) return new_l def mos_score(T, loss): """Calculate a MOS score based on a one-way delay and a packet loss rate. Based on ITU G.107 06/2015. Verified against the online reference implementation at https://www.itu.int/ITU-T/studygroups/com12/emodel/calculnb.php This version assumes the default values are used for all parameters other than delay and loss. @T: Mean one-way delay @loss: Packet loss rate between 0 and 1. """ # All variable names are from G.107. # Parameters Ta = T Tr = 2 * T Ppl = loss * 100 # in percent # Defaults mT = 100 # Table 1 # From Table 3: WEPL = 110 TELR = 65 RLR = 2 SLR = 8 # Constants calculated from the Table 3 defaults: No = -61.17921438624169 # (7-3) Ro = 15 - (1.5 * (SLR + No)) # (7-2) Is = 1.4135680813438616 # (7-8) Rle = 10.5 * (WEPL + 7) * pow(Tr + 1, -0.25) # (7-26) if Ta == 0: X = 0 else: X = log10(Ta / mT) / log10(2) # (7-28) if Ta <= 100: Idd = 0 else: Idd = 25 * ((1 + X**6)**(1 / 6) - 3 * (1 + (X / 3)**6)**(1 / 6) + 2) # (7-27) Idle = (Ro - Rle) / 2 + sqrt((Ro - Rle)**2 / 4 + 169) # (7-25) TERV = TELR - 40 * log10((1 + T / 10) / (1 + T / 150)) + \ 6 * exp(-0.3 * T**2) # (7-22) Roe = -1.5 * (No - RLR) # (7-20) Re = 80 + 2.5 * (TERV - 14) # (7-21) if T < 1: Idte = 0 else: Idte = ((Roe - Re) / 2 + sqrt((Roe - Re)**2 / 4 + 100) - 1) * \ (1 - exp(-T)) # (7-19) Id = Idte + Idle + Idd # (7-18) Ieeff = 95 * (Ppl / (Ppl + 4.3)) # (7-29) with BurstR = 1, Bpl = 4.3 R = Ro - Is - Id - Ieeff if R < 0: MOS = 1 elif R > 100: MOS = 4.5 else: MOS = 1 + 0.035 * R + R * (R - 60) * (100 - R) * 7 * 10**-6 # (B-4) return MOS # Argparse stuff class FuncAction(argparse.Action): def __init__(self, option_strings, dest, help=None): super(FuncAction, self).__init__(option_strings, dest, nargs=0, required=False, help=help) class Update(argparse.Action): def __init__(self, *args, **kwargs): if 'default' not in kwargs: kwargs['default'] = {} super(Update, self).__init__(*args, **kwargs) def __call__(self, parser, namespace, values, option_string=None): if not hasattr(namespace, self.dest): setattr(namespace, self.dest, self.default) getattr(namespace, self.dest).update(values) def _copy_items(items): if items is None: return [] # The copy module is used only in the 'append' and 'append_const' # actions, and it is needed only when the default value isn't a list. # Delay its import for speeding up the common case. if type(items) is list: return items[:] return copy(items) def append_host(items, new_host): host, suffix, idx = (None, None, None) for k, v in enumerate(items): if MULTIHOST_SEP in v: h, s = v.split(MULTIHOST_SEP, 1) s = int(s) else: h, s = (v, 1) if h == new_host: host, suffix, idx = h, s, k if host: new_host = MULTIHOST_SEP.join((new_host, str(suffix+1))) items[idx] = MULTIHOST_SEP.join((host, str(suffix))) items.append(new_host) class AddHost(argparse._AppendAction): def __init__(self, *args, **kwargs): if 'default' not in kwargs: kwargs['default'] = [] super(AddHost, self).__init__(*args, **kwargs) def __call__(self, parser, namespace, new_host, option_string=None): items = getattr(namespace, self.dest, None) items = _copy_items(items) append_host(items, new_host) setattr(namespace, self.dest, items) def float_pair(value): try: if "," not in value: return (None, float(value)) a, b = [s.strip() for s in value.split(",", 1)] return (float(a) if a else None, float(b) if b else None) except ValueError: raise argparse.ArgumentTypeError("Invalid pair value: %s" % value) def float_pair_noomit(value): val = float_pair(value) if None in val: raise argparse.ArgumentTypeError("Invalid pair value: %s" % value) return val def keyval(value): ret = {} for p in token_split(value, ";"): p = p.strip() if not p: continue try: k, v = token_split(p, '=') ret.update({k.strip(): v.strip()}) except ValueError: raise argparse.ArgumentTypeError( "Invalid value '%s' (missing =)" % p) return ret def noop(x): return x def todict(k, v): return dict(k=v) def rangedict(key, value): ret = {} for k in key.split(","): if '-' in k: s, e = (int(i) for i in k.split("-", 1)) if not s < e: raise ValueError for i in range(s, e+1): ret[i] = value elif k == '*': ret['*'] = value else: ret[int(k)] = value return ret def keyval_pair_transformer(pairfunc=todict, errmsg="Parse error"): def typefunc(value): ret = {} try: for k, v in keyval(value).items(): ret.update(pairfunc(k, v)) return ret except ValueError: raise argparse.ArgumentTypeError(errmsg) return typefunc def keyval_transformer(keyfunc=noop, valfunc=noop, errmsg="Parse error"): return keyval_pair_transformer(pairfunc=lambda k, v: {keyfunc(k): valfunc(v)}, errmsg=errmsg) keyval_int = keyval_pair_transformer(pairfunc=rangedict, errmsg="Keys must be integers.") def comma_list(value): try: return [v.strip() for v in token_split(value)] except ValueError: raise argparse.ArgumentTypeError("Unable to split into list.") def token_split(value, split_tokens=',;'): """Split VALUE on the tokens given in SPLIT_TOKENS, while avoiding splitting of quoted strings""" lex = shlex.shlex(value, posix=True) lex.whitespace_split = True lex.whitespace = split_tokens return list(lex) class ArgParam(object): """A class that takes an argparser and sets object properties from the argparser-defined parameters.""" params = None def __init__(self, **kwargs): if self.params: for a in self.params._actions: dest = a.dest.lower() if dest in kwargs: setattr(self, dest, copy(kwargs[dest])) elif a.dest in kwargs: setattr(self, dest, copy(kwargs[a.dest])) else: setattr(self, dest, copy(a.default)) class ArgParser(argparse.ArgumentParser): def get_type(self, dest): for action in self._actions: if action.dest == dest: # Workaround because StoreConst actions don't store the action # type if isinstance(action, argparse._StoreConstAction): return type(action.const) return action.type return None def get_choices(self, dest): for action in self._actions: if action.dest == dest and action.choices: return action.choices return None def is_list(self, dest): for action in self._actions: if action.dest == dest: return isinstance(action, argparse._AppendAction) return False def __contains__(self, dest): for action in self._actions: if action.dest == dest: return True return False �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/flentrc.example�������������������������������������������������������������������������0000664�0000000�0000000�00000016353�14670056262�0015655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Sample rcfile for flent. Allows options to be specified ## on a global or per-test basis. The file is divided into sections with ## section headers between square brackets. ## ## Options specified in the [global] section apply to everything, while ## further sections specify options that are specific for the test name ## corresponding to the section name. ## ## Comments start with # or ;, and option names are case insensitive. ## The supported options are listed with commentary below. Options specified ## on the command line override options set in the rcfile. ## ## To use: Copy to ~/.flentrc and edit, or specify location of ## the file with --rcfile. [global] # Default test target host(s). # Corresponding command line option: --host (or unqualified argument). # Multiple values are separated by commas. ;hosts = demo.tohojo.dk # Data point step size and sampling interval (seconds). # Corresponding command line option: --step-size ;step_size = 0.2 # Test length (not including delay before starting test). # Corresponding command line option: --length ;length = 60 # Delay from start of test to the rest of the test starts (only some tests). # Typically used to delay bandwidth loaders after starting latency measurements; # the total runtime, for tests that use delay, typically becomes length+2*delay. # Corresponding command line option: --delay ;delay = 5 # Output file; defaults to standard output (or an interactive viewer for plots) # if a graphical display is available. Note that for some output modes (e.g. plots), # the output file name determines file format. # Corresponding command line option: --output ;output = # Data file directory. Data files from test runs are stored in this directory. # Defaults to the system tmpdir (e.g. /tmp) # Corresponding command line option: --data-dir ;data_dir = /tmp # Output format. # Corresponding command line option: --format ;format = # Title added to data file name, printed on plots etc. # Probably not terribly useful to set in a config file... # Corresponding command line option: --title-extra ;title = # Note added to the data file as metadata (key NOTE). # Probably not terribly useful to set in a config file... # Corresponding command line option: --note ;note = # Filename to output debug logging to. # Debug logging is disabled if this is not set. # Corresponding command line option: --log-file ;log_file = # IP version to use for connecting to the target host. # Valid values: 4 or 6. # Corresponding command line option: --ipv4 or --ipv6 ;ip_version = 4 # Socket timeout to pass to netperf for UDP tests (if the netperf) version # supports it. Units of seconds. # Corresponding command line option: --socket-timeout ;socket_timeout = 2 # Whether to interpret multiple input files as being used to scale plots. # If not set, multiple input files are interpreted to be plotted side-by-side. # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --scale-mode ;scale_mode = no # Whether to plot each data series in a separate subplot when combining multiple # data series into a single plot. Only supported for some plot types, and only # works if scale_mode is not set. # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --subplot-combine ;subplot_combine = no # Whether to print annotations (hostname etc) on plots. # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --no-annotation ;annotate = yes # Whether to print the test title on plots. # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --no-title ;print_title = yes # Whether to print plot legend. # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --no-legend ;print_legend = yes # Whether to always start y-axis from 0 (rather than scaling to the smallest # data point). # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --zero-y ;zero_y = no # Whether to Invert the y-axis for latency data series (making plots show # 'better values upwards'). # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --invert-latency-y ;invert_y = no # Whether to enable automatic log-scaling of plot axes. # If not disabled here (or on the command line), log scales are enabled if # the maximum data point is more than 20 times the value of the minimum. # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --disable-log ;log_scale = yes # Whether to gather extended meta data and store it in the data file. # This may include sensitive data from the machine running the test, that # it may not be desireable to publish. See the man page for the list of # data gathered. # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --extended-metadata ;extended_metadata = no # Remote hosts to gather metadata from. # # Multiple hosts are separated with commas; setting this also turns on # extended_metadata. # Corresponding command line option: --remote-metadata ;remote_metadata = hostname1, hostname2 # Host to connect to the D-ITG control server on (only used for D-ITG tests; see # man page). # # If this is not set (here or on the command line), the test hostname is used. ;ditg_control_host = control-server.example.com # Port the D-ITG control server is listening on (only used for D-ITG tests; see # man page). Default: 8000. ;ditg_control_port = 8000 # Secret used for HMAC authentication to the D-ITG control server (only used for # D-ITG tests; see man page). Default: '' (the empty string). ;digt_control_secret = # Whether to always start a new GUI instance rather than attempt to connect # to an already running instance. Note that unlike on the when it is passed # on the command line, setting this flag here does not imply --gui. # # Note that boolean options, if changed from the default, current cannot be # overridden from the command line. # Corresponding command line option: --new-gui-instance ;new_gui_instance = no # List of batch file names to load -- to actually do a batch run, the batch name # has to be passed in on the command line. This allows for having a persistent # batch file specified in the rc file, which is always available for loading. # # Like with hosts, batch files specified here are overridden by batch files # specified on the command line, meaning that if one or more batch files are # passed on the command line, the files specified here are NOT loaded. # # Multiple values are specified comma-separated. ;batch_files = ~/example.batch ## Sections can specify settings overriding the global settings for ## specific tests. For instance, this sets plot output to be default ## for the RRUL test: ;[rrul] ;format=plot �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/man/������������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0013406�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/man/flent.1�����������������������������������������������������������������������������0000664�0000000�0000000�00000144451�14670056262�0014611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" Man page generated from reStructuredText. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "FLENT" "1" "September 10, 2024" "2.2.0" "Flent: The FLExible Network Tester" .SH NAME flent \- Flent: The FLExible Network Tester .SH INTRODUCTION .sp Flent is a wrapper around \fInetperf\fP and similar tools to run predefined tests and aggregate and plot the results. It defines several tests that can be run against one or more hosts, primarily targeted at testing for the presence of bufferbloat under various conditions. .sp The aggregated data is saved in (gzipped) JSON format for later processing and/or import into other tools. The JSON format is documented below. .sp Apart from the JSON format, the data can be output as csv values, emacs org mode tables or plots. Each test can specify several different plots, including time\-series plots of the values against each other, as well as CDF plots of (e.g.) ping times. .sp Plots can be output to the formats supported by matplotlib by specifying the output filename with \fI\%\-o\fP \fIoutput.{png,ps,pdf,svg}\fP\&. If no output file is specified, the plot is displayed using matplotlib’s interactive plot browser, which also allows saving of the output (in .png format). .SS Requirements .sp Flent runs on Python, versions 2.7+ and 3.3+. Plotting requires a functional \fBmatplotlib\fP installation (but everything else can run without \fBmatplotlib\fP). For the interactive plot viewer, a graphical display (and suitably configured \fBmatplotlib\fP) is required. .sp Most tests employ the \fBnetperf\fP benchmarking tool to run the tests. Version 2.6 or higher is required, and netperf must be compiled with the \fB\-\-enable\-demo\fP option passed to \fB\&./configure\fP\&. Some tests use iperf in addition to, or instead of netperf. Both tools must be available in the \fBPATH\fP\&. .sp For ICMP ping measurements, the version of ping employed must support output timestamping (the \-D parameter to GNU ping). This is not supported by the BSD and OSX versions of ping. As an alternative to the regular ping command, the \fBfping\fP utility (see \X'tty: link http://fping.org'\fI\%http://fping.org\fP\X'tty: link') can be employed. In that case fping must be version 3.5 or greater. Flent will attempt to detect the presence of fping in the \fBPATH\fP and check for support for the \-D parameter. If this check is successful, \fBfping\fP will be employed for ping data, otherwise the system ping will be used. .sp The \fBirtt\fP tool is highly recommended for UDP measurements. See \X'tty: link https://github.com/peteheist/irtt'\fI\%https://github.com/peteheist/irtt\fP\X'tty: link'\&. Flent will automatically detect if irtt is available in the \fBPATH\fP and use it if it is detected. Note that the server component of irtt needs to be running on the target host(s) as well. .SH RUNNING FLENT .sp When run, flent must be supplied either (a) a test name and one or more host names to connect to, or (b) one or more input files containing data from previous runs to post\-process. .sp Test names, hostnames and input file names can all be specified as unqualified arguments, and flent will do its best to guess which is which. For each argument, if it is an existing file, it is assumed to be an input file, if it is the name of an existing test configuration it’s assumed to be a test name, and if neither of those are true, it is assumed to be a host name. The \fI\%\-i\fP and \fI\%\-H\fP switches can be used to explicitly specify the interpretation of an argument. .SS Invocation .sp \fBflent\fP [\fIoptions\fP] \fI<host|test|input file\fP ...\fI>\fP .SS General options .INDENT 0.0 .TP .B \-o OUTPUT, \-\-output=OUTPUT File to write processed output to (default standard out). .UNINDENT .INDENT 0.0 .TP .B \-D DATA_DIR, \-\-data\-dir=DATA_DIR Directory to store data files in. Defaults to the current directory. .UNINDENT .INDENT 0.0 .TP .B \-i INPUT, \-\-input=INPUT File to read input from (instead of running tests). Input files can also be specified as unqualified arguments without using the \fI\%\-i\fP switch. .UNINDENT .INDENT 0.0 .TP .B \-f FORMAT, \-\-format=FORMAT Select output format (plot, csv, org_table, stats). Default is no processed output (just writes the JSON data file). .UNINDENT .INDENT 0.0 .TP .B \-p PLOT, \-\-plot=PLOT Select which plot to output for the given test (implies \fI\%\-f\fP plot). Use the \fI\%\-\-list\-plots\fP option to see available plots. .UNINDENT .INDENT 0.0 .TP .B \-t TITLE, \-\-title\-extra=TITLE Text to add to plot title and data file name. .UNINDENT .INDENT 0.0 .TP .B \-n NOTE, \-\-note=NOTE Add arbitrary text as a note to be stored in the JSON data file (under the \fINOTE\fP key in the metadata object). .UNINDENT .INDENT 0.0 .TP .B \-r RCFILE, \-\-rcfile=RCFILE Load configuration data from \fIRCFILE\fP (default \fI~/.flentrc\fP). See section below for information on the rc file format. .UNINDENT .INDENT 0.0 .TP .B \-x, \-\-extended\-metadata Collect extended metadata and store it with the data file. May include details of your machine you don’t want to distribute; see the section on the data format below. .UNINDENT .INDENT 0.0 .TP .B \-\-remote\-metadata=HOSTNAME Collect extended metadata from a remote host. \fIHOSTNAME\fP is passed verbatim to ssh, so can include hosts specified in ~/.ssh/config. Note that gathering the data can take some time, since it involves executing several remote commands. This option can be specified multiple times and implies \fI\%\-\-extended\-metadata\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-\-gui Run the flent GUI. All other options are used as defaults in the GUI, but can be changed once it is running. The GUI can also be started by running the \fBflent\-gui\fP binary. For more information on the GUI, see the \fI\%The Flent GUI\fP section. .UNINDENT .INDENT 0.0 .TP .B \-\-new\-gui\-instance Start a new GUI instance. Otherwise, flent will try to connect to an already running GUI instance and have that load any new data files specified as arguments. Implies \fI\%\-\-gui\fP when passed on the command line, but not when set in the rc file. Note that when multiple GUI instances are running, there is no guarantee as to which instance will get a subsequent open request (if run again without \fI\%\-\-new\-gui\-instance\fP). .UNINDENT .INDENT 0.0 .TP .B \-\-gui\-no\-defer Normally, the GUI defers redrawing plots until they are needed to avoid redrawing all open plots every time an option changes. This switch turns off that optimisation in favour of always redrawing everything straight away. This is useful when loading a bunch of plots from the command line and then wanting to flip through them without drawing delay. .UNINDENT .INDENT 0.0 .TP .B \-b BATCH_NAME, \-\-batch\-name=BATCH_NAME Run test batch BATCH_NAME (must be specified in a batch file loaded by the \fI\%\-\-batch\-file\fP option). Can be supplied multiple times. .UNINDENT .INDENT 0.0 .TP .B \-B BATCH_FILE, \-\-batch\-file=BATCH_FILE Load batch file BATCH_FILE. Can be specified multiple times, in which case the files will be combined (with identically\-named sections being overridden by later files). See appropriate section below for an explanation of the batch file format. .UNINDENT .INDENT 0.0 .TP .B \-\-batch\-override=key=value Override parameter ’key’ in the batch config and set it to ’value’. The key name will be case folded to lower case. Can be specified multiple times. .UNINDENT .INDENT 0.0 .TP .B \-\-batch\-dry\-run Dry batch run. Prints what would be done, but doesn’t actually run any tests. .UNINDENT .INDENT 0.0 .TP .B \-\-batch\-verbose Be verbose during batch run: Print all commands executed. .UNINDENT .INDENT 0.0 .TP .B \-\-batch\-no\-shuffle Do not randomise the order of test runs within each batch. .UNINDENT .INDENT 0.0 .TP .B \-\-batch\-repetitions=REPETITIONS Shorthand for \fI\%\-\-batch\-override\fP \fB\(aqrepetitions=REPETITIONS’\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-\-batch\-title=TITLE Shorthand for \fI\%\-\-batch\-override\fP \fB\(aqbatch_title=TITLE’\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-\-batch\-resume=DIR Try to resume a previously interrupted batch run. The argument is the top\-level output directory from the previous run. .sp This will attempt to find a data file in the resume directory and load the BATCH_TIME from the previous run from that and continue. The assumption is that the output directory and filenames are generated from the batch time, so that they will match with the previous run when the same time is used. Then, tests for which data files already exist will be skipped on this run. If the rest of the batch invocation is different from the one being resumed, results may not be what you want. .sp There\(aqs a check to ensure that the generated output path is a subdirectory of the resume directory, and the whole run will be aborted if it isn\(aqt. .UNINDENT .SS Test configuration options .sp These options affect the behaviour of the test being run and have no effect when parsing input files. .INDENT 0.0 .TP .B \-H HOST, \-\-host=HOST Host to connect to for tests. For tests that support it, multiple hosts can be specified by supplying this option multiple times. Hosts can also be specified as unqualified arguments; this parameter guarantees that the argument be interpreted as a host name (rather than being subject to auto\-detection between input files, hostnames and test names). .UNINDENT .INDENT 0.0 .TP .B \-\-local\-bind=IP Local hostname or IP address to bind to (for test tools that support this). Can be specified multiple times for tests that connect to more than one host; if it is, it must be specified as many times as there are hosts. .UNINDENT .INDENT 0.0 .TP .B \-\-remote\-host=idx=HOSTNAME A remote hostname to connect to when starting a test. The idx is the runner index, which is assigned sequentially to each \fIrunner\fP (and so it is \fInot\fP the same as the sequence of hostnames). Look for the \(aqIDX\(aq key in SERIES_META for a test get the idx used here, but note that the idx assignment depends on the exact arguments to the test. .sp This works by simply prepending \(aqssh HOSTNAME\(aq to the runner command, so it relies on the same binaries being in the same places on both machines, and won\(aqt work for all runners. .sp This option can be specified multiple times to have multiple runners run on remote hosts. .UNINDENT .INDENT 0.0 .TP .B \-l LENGTH, \-\-length=LENGTH Base test length (some tests may add some time to this). .UNINDENT .INDENT 0.0 .TP .B \-s STEP_SIZE, \-\-step\-size=STEP_SIZE Measurement data point step size. .UNINDENT .INDENT 0.0 .TP .B \-d DELAY, \-\-delay=DELAY Number of seconds to delay parts of test (such as bandwidth loaders). .UNINDENT .INDENT 0.0 .TP .B \-4, \-\-ipv4 Use IPv4 for tests (some tests may ignore this). .UNINDENT .INDENT 0.0 .TP .B \-6, \-\-ipv6 Use IPv6 for tests (some tests may ignore this). .UNINDENT .INDENT 0.0 .TP .B \-\-socket\-timeout=SOCKET_TIMEOUT Socket timeout (in seconds) used for UDP delay measurement, to prevent stalls on packet loss. Only enabled if the installed netperf version is detected to support this (requires SVN version of netperf). .sp For the default value, see the output of flent \fI\%\-h\fP\&. The value of this parameter is an implicit upper bound on how long a round\-trip time that can be measured. As such you may need to adjust it if you are experiencing latency above the default value. Set to 0 to disable. .UNINDENT .INDENT 0.0 .TP .B \-\-send\-size=SEND_SIZE Send size (in bytes) used for TCP tests. Netperf uses the socket buffer size by default, which if too large can cause spikes in the throughput results. Lowering this value will increase CPU usage but also improves the fidelity of the throughput results without having to decrease the socket buffer size. .sp Can be specified multiple times, with each value corresponding to a stream of a test. If only specified once, the same value will be applied to all flows. .UNINDENT .INDENT 0.0 .TP .B \-\-test\-parameter=key=value Arbitrary test parameter in key=value format. Key will be case folded to lower case. The values are stored with the results metadata, and so can be used for storing arbitrary information relevant for a particular test run. .sp In addition to serving as simple metadata, the test parameters can also affect the behaviour of some test configurations. See the \fI\%Supplied Tests\fP section for information on these. .sp This option can be specified multiple times to set multiple test parameters. .UNINDENT .INDENT 0.0 .TP .B \-\-swap\-up\-down Switch upstream and downstream directions for data transfer. This means that ’upload’ will become ’download’ and vice versa. Works by exchanging netperf \fBTCP_MAERTS\fP and \fBTCP_STREAM\fP parameters, so only works for tests that employ these as their data transfer, and only for the TCP streams. .UNINDENT .INDENT 0.0 .TP .B \-\-socket\-stats Parse socket stats during test. This will capture and parse socket statistics for all TCP upload flows during a test, adding TCP cwnd and RTT values to the test data. Requires the \(aqss\(aq utility to be present on the system, and can fail if there are too many simultaneous upload flows; which is why this option is not enabled by default. .UNINDENT .INDENT 0.0 .TP .B \-\-marking\-name Define a new symbolic name that can be used when specifying flow markings using the \(aqmarkings\(aq test parameter. This can be used to make it easier to specify custom diffserv markings on flows by using symbolic names for each marking value instead of the hex codes. Values specified here will be used in addition to the common values (listed below), and cannot override the built\-in names. Names will be case\-folded when matching. .sp The list of symbolic markings natively supported, along with their hex expansions, are: .INDENT 7.0 .INDENT 3.5 .sp .EX AF11: 0x28 CS0: 0x00 AF12: 0x30 CS1: 0x20 AF13: 0x38 CS2: 0x40 AF21: 0x48 CS3: 0x60 AF22: 0x50 CS4: 0x80 AF23: 0x58 CS5: 0xa0 AF31: 0x68 CS6: 0xc0 AF32: 0x70 CS7: 0xe0 AF33: 0x78 EF: 0xb8 AF41: 0x88 AF42: 0x90 AF43: 0x98 .EE .UNINDENT .UNINDENT .sp Note that the hexadecimal values denote the value of the full ToS byte (including the two ECN bits), so they need to be right\-shifted by two bits to get the corresponding diffserv code points. .UNINDENT .SS Plot configuration options .sp These options are used to configure the appearance of plot output and only make sense combined with \fI\%\-f\fP \fIplot\fP\&. .INDENT 0.0 .TP .B \-\-label\-x=LABEL .UNINDENT .INDENT 0.0 .TP .B \-\-label\-y=LABEL Override the figure axis labels. Can be specified twice, corresponding to figures with multiple axes. .UNINDENT .INDENT 0.0 .TP .B \-I, \-\-invert\-latency\-y Invert latency data series axis (typically the Y\-axis), making plots show ’better\(aq values upwards. .UNINDENT .INDENT 0.0 .TP .B \-z, \-\-zero\-y Always start Y axis of plot at zero, instead of autoscaling the axis. Autoscaling is still enabled for the upper bound. This also disables log scale if enabled. .UNINDENT .INDENT 0.0 .TP .B \-\-log\-scale={log2,log10} Use the specified logarithmic scale on plots. .UNINDENT .INDENT 0.0 .TP .B \-\-norm\-factor=FACTOR Data normalisation factor. Divide all data points by this value. Can be specified multiple times, in which case each value corresponds to a data series. .UNINDENT .INDENT 0.0 .TP .B \-\-bounds\-x=BOUNDS .UNINDENT .INDENT 0.0 .TP .B \-\-bounds\-y=BOUNDS Specify bounds of the plot axes. If specifying one number, that will become the upper bound. Specify two numbers separated by a comma to specify both upper and lower bounds. To specify just the lower bound, add a comma afterwards. Can be specified twice, corresponding to figures with multiple axes. .UNINDENT .INDENT 0.0 .TP .B \-S, \-\-scale\-mode Treat file names (except for the first one) passed as unqualified arguments as if passed as \fI\%\-\-scale\-data\fP (default as if passed as \fI\%\-\-input\fP). .UNINDENT .INDENT 0.0 .TP .B \-\-concatenate Concatenate multiple result sets into one data series. This means that each data file will have its time axis shifted by the preceding series duration and appended to the first data set specified. Only works for data sets from the same test, obviously. .UNINDENT .INDENT 0.0 .TP .B \-\-absolute\-time Plot data points with absolute UNIX time on the x\-axis. This requires the absolute starting time for the test run to be stored in the data file, and so it won’t work with data files that predates this feature. .UNINDENT .INDENT 0.0 .TP .B \-\-subplot\-combine When plotting multiple data series, plot each one on a separate subplot instead of combining them into one plot. This mode is not supported for all plot types, and only works when \fI\%\-\-scale\-mode\fP is disabled. .UNINDENT .INDENT 0.0 .TP .B \-\-skip\-missing\-series Skip missing series entirely from bar plots, instead of leaving an empty space for it. .UNINDENT .INDENT 0.0 .TP .B \-\-no\-print\-n Do not print the number of data points on combined plots. When using plot types that combines results from several test runs, the number of data series in each combined data point is normally added after the series name, (n=X) for X data series. This option turns that off. .UNINDENT .INDENT 0.0 .TP .B \-\-no\-annotation Exclude annotation with hostnames, time and test length from plots. .UNINDENT .INDENT 0.0 .TP .B \-\-figure\-note=NOTE, \-\-fig\-note=NOTE Add a note (arbitrary text) to the bottom\-left of the figure. .UNINDENT .INDENT 0.0 .TP .B \-\-no\-title Exclude title from plots. .UNINDENT .INDENT 0.0 .TP .B \-\-override\-title=TITLE Override plot title with this string. Completely discards the configured title (from the test configuration), as well as the title stored in the data set, and replaces it with the value supplied here. This is useful to override the plot title \fIat the time of plotting\fP, for instance to add a title to an aggregate plot from several data series. When this parameter is specified, \fI\%\-\-no\-title\fP has no effect. .UNINDENT .INDENT 0.0 .TP .B \-\-no\-labels Hides tick labels from box and bar plots. .UNINDENT .INDENT 0.0 .TP .B \-\-no\-markers Don’t use line markers to differentiate data series on plots. .UNINDENT .INDENT 0.0 .TP .B \-\-no\-legend Exclude legend from plots. .UNINDENT .INDENT 0.0 .TP .B \-\-horizontal\-legend Place a horizontal legend below the plot instead of a vertical one next to it. Doesn\(aqt always work well if there are too many items in the legend. .UNINDENT .INDENT 0.0 .TP .B \-\-legend\-title=LEGEND_TITLE Override legend title on plot. .UNINDENT .INDENT 0.0 .TP .B \-\-legend\-placement=LEGEND_PLACEMENT Control legend placement. Enabling this option will place the legend inside the plot at the specified location. Can be one of \(aqbest\(aq, \(aqupper right\(aq, \(aqupper left\(aq, \(aqlower left\(aq, \(aqlower right\(aq, \(aqright\(aq, \(aqcenter left\(aq, \(aqcenter right\(aq, \(aqlower center\(aq, \(aqupper center\(aq or \(aqcenter\(aq. .UNINDENT .INDENT 0.0 .TP .B \-\-legend\-columns=LEGEND_COLUMNS .TP .B Set the number of columns in the legend. .UNINDENT .INDENT 0.0 .TP .B \-\-reverse\-legend Reverse the order of items in the legend. This can be useful to make the legend order match the data series in some cases. .UNINDENT .INDENT 0.0 .TP .B \-\-filter\-legend Filter legend labels by removing the longest common substring from all entries. This is not particularly smart, so use with care. .UNINDENT .INDENT 0.0 .TP .B \-\-replace\-legend=src=dest Replace \(aqsrc\(aq with \(aqdst\(aq in legends. Can be specified multiple times. .UNINDENT .INDENT 0.0 .TP .B \-\-filter\-regexp=REGEXP Filter the plot legend by the supplied regular expression (removing any text from the legend that matches the expression). Can be specified multiple times, in which case the filters will be applied in the order specified. Note that for combining several plot results, the regular expression is also applied before the grouping logic, meaning that a too wide filter can mess up the grouping. .UNINDENT .INDENT 0.0 .TP .B \-\-override\-label=LABEL Override dataset label. Can be specified multiple times when multiple datasets are being plotted, in which case the order of labels corresponds to the order of datasets. .sp Like \fI\%\-\-override\-title\fP, this is applied \fIat the time of plotting\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-\-filter\-series=SERIES Filter out specified series from plot. Can be specified multiple times. .UNINDENT .INDENT 0.0 .TP .B \-\-split\-group=LABEL Split data sets into groups when creating box plots. Specify this option multiple times to define the new groups; the value of each option is the group name. .sp Say you\(aqre plotting nine datasets which are really testing two variables with three values each. In this case, it can be useful to have the box plot of the results be split into three parts (corresponding to the values of one variable) with each three boxes in each of them (corresponding to the values of the second variable). This option makes this possible; simply specify it three times with the labels to be used for the three groups. .sp A constraint on this option is that the number of datasets being plotted must be divisible by the number of groups. .UNINDENT .INDENT 0.0 .TP .B \-\-colours=COLOURS Comma\-separated list of colours to be used for the plot colour cycle. Can be specified in any format understood by matplotlib (including HTML hex values prefixed with a #). .sp Yes, this option uses British spelling. No, American spelling is not supported. .UNINDENT .INDENT 0.0 .TP .B \-\-override\-colour\-mode=MODE Override colour_mode attribute. This changes the way colours are assigned to bar plots. The default is \(aqgroups\(aq which assigns a separate colour to each group of data series. The alternative is \(aqseries\(aq which assigns a separate colour to each series, repeating them for each data group. .UNINDENT .INDENT 0.0 .TP .B \-\-override\-group\-by=GROUP Override the \fBgroup_by\fP setting for combination plots. This is useful to, for instance, switch to splitting up combined data sets by batch run instead of by file name. .UNINDENT .INDENT 0.0 .TP .B \-\-combine\-save\-dir=DIRNAME When doing a combination plot save the intermediate data to \fBDIRNAME\fP\&. This can then be used for subsequent plotting to avoid having to load all the source data files again on each plot. .UNINDENT .INDENT 0.0 .TP .B \-\-figure\-width=FIG_WIDTH Figure width in inches. Used when saving plots to file and for default size of the interactive plot window. .UNINDENT .INDENT 0.0 .TP .B \-\-figure\-height=FIG_HEIGHT Figure height in inches. Used when saving plots to file and for default size of the interactive plot window. .UNINDENT .INDENT 0.0 .TP .B \-\-figure\-dpi=FIG_DPI Figure DPI. Used when saving plots to raster format files. .UNINDENT .INDENT 0.0 .TP .B \-\-fallback\-layout Use the fallback layout engine (tight_layout built in to matplotlib). Use this if text is cut off on saved figures. The downside to the fallback engine is that the size of the figure (as specified by \fI\%\-\-figure\-width\fP and \fI\%\-\-figure\-height\fP) is no longer kept constant.) .UNINDENT .INDENT 0.0 .TP .B \-\-no\-matplotlibrc Don’t load included matplotlibrc values. Use this if autodetection of custom matplotlibrc fails and flent is inadvertently overriding rc values. .UNINDENT .INDENT 0.0 .TP .B \-\-no\-hover\-highlight Don\(aqt highlight data series on hover in interactive plot views. Use this if redrawing is too slow, or the highlighting is undesired for other reasons. .UNINDENT .INDENT 0.0 .TP .B \-\-scale\-data=SCALE_DATA Additional data files to consider when scaling the plot axes (for plotting several plots with identical axes). Note, this displays only the first data set, but with axis scaling taking into account the additional data sets. Can be supplied multiple times; see also \fI\%\-\-scale\-mode\fP\&. .UNINDENT .SS Test tool\-related options .INDENT 0.0 .TP .B \-\-control\-host=HOST Hostname for the test control connection (for test tools that support this). Default: First hostname of test target. .sp When running tests that uses D\-ITG as a test tool (such as the voip\-* tests), this switch controls where flent will look for the D\-ITG control server (see section below on running tests with D\-ITG). For Netperf\-based tests, this option is passed to Netperf to control where to point the control connection. This is useful to, for instance, to run the control server communication over a separate control network so as to not interfere with test traffic. .sp There is also a per\-flow setting for this for tests that connect to multiple hosts; see the \fIcontrol_hosts\fP test parameter in \fI\%Supplied Tests\fP\&. If both are set, the per\-flow setting takes precedence for those tests that use it. .UNINDENT .INDENT 0.0 .TP .B \-\-control\-local\-bind=IP Local hostname or IP to bind control connection to (for test tools that support it; currently netperf). If not supplied, the value for \fI\%\-\-local\-bind\fP will be used. Note that if this value is passed but \fI\%\-\-local\-bind\fP is \fInot\fP, netperf will use the value specified here to bind the data connections to as well. .UNINDENT .INDENT 0.0 .TP .B \-\-netperf\-control\-port=PORT Port for Netperf control server. Default: 12865. .UNINDENT .INDENT 0.0 .TP .B \-\-ditg\-control\-port=PORT Port for D\-ITG control server. Default: 8000. .UNINDENT .INDENT 0.0 .TP .B \-\-ditg\-control\-secret=SECRET Secret for D\-ITG control server authentication. Default: ’’. .UNINDENT .INDENT 0.0 .TP .B \-\-http\-getter\-urllist=FILENAME When running HTTP tests, the http\-getter tool is used to fetch URLs (see \X'tty: link https://github.com/tohojo/http-getter'\fI\%https://github.com/tohojo/http\-getter\fP\X'tty: link'). This option specifies the filename containing the list of HTTP URLs to get. Can also be a URL, which will then be downloaded as part of each test iteration. If not specified, this is set to \X'tty: link http:/'\fI\%http:/\fP\X'tty: link'/<hostname>/filelist.txt where <hostname> is the first test hostname. .UNINDENT .INDENT 0.0 .TP .B \-\-http\-getter\-dns\-servers=DNS_SERVERS DNS servers to use for http\-getter lookups. Format is host[:port][,host[:port]]... This option will only work if libcurl supports it (needs to be built with the ares resolver). Default is none (use the system resolver). .UNINDENT .INDENT 0.0 .TP .B \-\-http\-getter\-timeout=MILLISECONDS Timeout for HTTP connections. Default is to use the test length. .UNINDENT .INDENT 0.0 .TP .B \-\-http\-getter\-workers=NUMBER Number of workers to use for getting HTTP urls. Default is 4. .UNINDENT .INDENT 0.0 .TP .B \-\-irtt\-sampling\-interval=MILLISECONDS Override the sampling interval passed to irtt, in milliseconds. Can be used to run irtt with a higher sampling frequency than the rest of the test. If set, this will override the sampling interval for all instances of irtt used in the test. .UNINDENT .SS Misc and debugging options: .INDENT 0.0 .TP .B \-L LOG_FILE, \-\-log\-file=LOG_FILE Write debug log (test program output) to log file. .UNINDENT .INDENT 0.0 .TP .B \-\-list\-tests List available tests and exit. .UNINDENT .INDENT 0.0 .TP .B \-\-list\-plots List available plots for selected test and exit. .UNINDENT .INDENT 0.0 .TP .B \-V, \-\-version Show Flent version information and exit. .UNINDENT .INDENT 0.0 .TP .B \-v, \-\-verbose Enable verbose logging to console. .UNINDENT .INDENT 0.0 .TP .B \-q, \-\-quiet Disable normal logging to console (and only log warnings and errors). .UNINDENT .INDENT 0.0 .TP .B \-\-debug\-error Print full exception backtraces to console. .UNINDENT .INDENT 0.0 .TP .B \-h, \-\-help Show usage help message and exit. .UNINDENT .SS Signals .sp Flent will abort what it is currently doing on receiving a \fBSIGINT\fP \-\- this includes killing all runners, cleaning up temporary files and shutting down as gracefully as possible. Runners are killed with \fBSIGTERM\fP in this mode, and their output is discarded. If a batch run is in progress, the current test will be interrupted in this way, and the rest of the batch run is aborted. Previously completed tests and their results are not aborted. Post\-commands marked as ’essential’ will be run after the test is interrupted. Additionally, flent converts \fBSIGTERM\fP into \fBSIGINT\fP internally and reacts accordingly. .sp Upon receiving a \fBSIGUSR1\fP, flent will try to gracefully abort the test it is currently running, and parse the output of the runners to the extent that any such output exists. That is, each runner will be killed by a \fBSIGINT\fP, which will cause a graceful shutdown for at least ping and netperf (although netperf running in \fITCP_MAERTS\fP mode will bug out when interrupted like this, so end\-of\-tests statistics will be missing). Flent will only react once to a \fBSIGUSR1\fP, sending exactly one \fBSIGINT\fP to the active runners, then wait for them to exit. This may take several seconds in the case of netperf. If the runners for some reason fail to exit, flent will be stuck and will need to be killed with \fBSIGINT\fP\&. If running in batch mode, \fBSIGUSR1\fP will only affect the currently running test; subsequent tests will still be run. .SH SUPPLIED TESTS .sp Test are supplied as Python files and can specify commands to run etc. For a full list of the tests supported by flent, see the \fI\%\-\-list\-tests\fP option. .SS The Realtime Response Under Load (RRUL) test .sp This test exists in a couple of variants and is a partial implementation of the RRUL specification as written by Dave Taht (see \X'tty: link https://www.bufferbloat.net/projects/bloat/wiki/RRUL_Spec/'\fI\%https://www.bufferbloat.net/projects/bloat/wiki/RRUL_Spec/\fP\X'tty: link'). It works by running RTT measurement using ICMP ping and UDP roundtrip time measurement, while loading up the link with eight TCP streams (four downloads, four uploads). This quite reliably saturates the measured link (wherever the bottleneck might be), and thus exposes bufferbloat when it is present. .SS Simple TCP flow tests .sp These tests combine a TCP flow (either in one direction, or both) with an ICMP ping measurement. It’s a simpler test than RRUL, but in some cases the single TCP flow can be sufficient to saturate the link. .SS UDP flood test .sp This test runs \fIiperf\fP configured to emit 100Mbps of UDP packets targeted at the test host, while measuring RTT using ICMP ping. It is useful for observing latency in the face of a completely unresponsive packet stream. .SS Test parameters .sp Some test parameters (set with \fI\%\-\-test\-parameter\fP) affect the way tests behave. These are: .INDENT 0.0 .TP .B upload_streams .UNINDENT .INDENT 0.0 .TP .B download_streams .UNINDENT .INDENT 0.0 .TP .B bidir_streams These set the number of streams for the tests that are configurable. The \fBtcp_nup\fP, \fBtcp_ndown\fP and \fBrrul_be_nflows\fP tests understand \fBupload_streams\fP and \fBdownload_streams\fP, while the \fBrrul_var\fP test understands \fBbidir_streams\fP\&. If any of these parameter is set to the special value \fBnum_cpus\fP the number of streams will be set to the number of CPUs on the system (if this information is available). .UNINDENT .INDENT 0.0 .TP .B tcp_cong_control Set the congestion control used for TCP flows, for platforms that supports setting it. This can be specified as a simple string to set the same value for upstream and downstream, or two comma\-separated values to set it separately for the upstream and downstream directions. On Linux, any value in the sysctl \fBnet.ipv4.tcp_allowed_congestion_control\fP can be used. .sp If a congestion control is specified that is not available on the system running the test, setting it will simply fail. In addition, some tests override the congestion control for one or more flows. The actual congestion control used is stored in the \fBCONG_CONTROL\fP per\-test metadata field. .UNINDENT .INDENT 0.0 .TP .B udp_bandwidth .UNINDENT .INDENT 0.0 .TP .B udp_bandwidths .UNINDENT .INDENT 0.0 .TP .B udp_pktsize .UNINDENT .INDENT 0.0 .TP .B udp_pktsizes This sets the bandwidth and packet size of each UDP stream in the \fBudp_*\fP tests. The option is passed to \fBiperf\fP so can be in any syntax the iperf understands (e.g. \fB20M\fP for 20 Mbps). .sp When running multiple UDP streams use the plural versions of the options (\fBudp_bandwidths\fP and \fBudp_pktsizes\fP) to specify individual per\-stream values (comma\-separated per stream), or the singular versions to specify the same value for all streams. .UNINDENT .INDENT 0.0 .TP .B burst_length .UNINDENT .INDENT 0.0 .TP .B burst_ports .UNINDENT .INDENT 0.0 .TP .B burst_psize .UNINDENT .INDENT 0.0 .TP .B burst_tos These set the length, number of ports to use, packet size and TOS value for the packet bursts generated in the \fBburst*\fP tests. .UNINDENT .INDENT 0.0 .TP .B cpu_stats_hosts .UNINDENT .INDENT 0.0 .TP .B netstat_hosts .UNINDENT .INDENT 0.0 .TP .B qdisc_stats_hosts .UNINDENT .INDENT 0.0 .TP .B wifi_stats_hosts These set hostnames to gather statistics from from during the test. The hostnames are passed to SSH, so can be anything understood by SSH (including using \fBusername@host\fP syntax, or using hosts defined in \fB~/.ssh/config\fP). This will attempt to run remote commands on these hosts to gather the required statistics, so passwordless login has to be enabled for. Multiple hostnames can be specified, separated by commas. .sp CPU stats and netstat output is global to the machine being connected to. The qdisc and WiFi stats need extra parameters to work. These are \fBqdisc_stats_interfaces\fP, \fBwifi_stats_interfaces\fP and \fBwifi_stats_stations\fP\&. The two former specify which interfaces to gather statistics from. These are paired with the hostnames, and so must contain the same number of elements (also comma\-separated) as the \fB_hosts\fP variables. To specify multiple interfaces on the same host, duplicate the hostname. The \fBwifi_stats_stations\fP parameter specifies MAC addresses of stations to gather statistics for. This list is the same for all hosts, but only stations present in debugfs on each host are actually captured. .sp The qdisc stats gather statistics output from \fBtc \-s\fP, while the WiFi stats gather statistics from debugfs. These are gathered by looping in a shell script; however, for better performance, the \fBtc_iterate\fP and \fBwifistats_iterate\fP programmes available in the \fBmisc/\fP directory of the source code tarball can be installed. On low\-powered systems this can be critical to get correct statistics. The helper programmes are packaged for LEDE/OpenWrt in the \fBflent\-tools\fP package. .UNINDENT .INDENT 0.0 .TP .B ping_hosts .UNINDENT .INDENT 0.0 .TP .B ping_local_binds .UNINDENT .INDENT 0.0 .TP .B ping_labels These are used to define one or more extra host names that will receive a ping flow while a test is run. The \fBping_hosts\fP variable simply specifies hostnames to ping (several can be specified by separating them with commas). The \fBping_local_binds\fP variable sets local IP address(es) to bind to for the extra ping flows. If specified, it must contain the same number of local addresses as the number of ping hosts. The same local address can be specified multiple times, however. The \fBping_labels\fP variable is used to label each of the ping flows; if not specified, Flent will create a default label based on the target hostname for each flow. .UNINDENT .INDENT 0.0 .TP .B voip_host .UNINDENT .INDENT 0.0 .TP .B voip_local_bind .UNINDENT .INDENT 0.0 .TP .B voip_control_host .UNINDENT .INDENT 0.0 .TP .B voip_marking Similar to the ping variants above, these parameters specify a hostname that will receive a VoIP test. However, unlike the ping parameters, only one hostname can be specified for VoIP tests, and that end\-host needs to have either D\-ITG (and the control server) or the IRTT server running. The marking setting controls which DiffServ marking is applied to the VoIP flow and defaults to no marking being set. .UNINDENT .INDENT 0.0 .TP .B control_hosts Hostnames to use for the control connections for the \fBrtt_fair*\fP tests. Comma\-separated. If specified, it must contain as many hostnames as the number of target hostnames specified for the test. .UNINDENT .INDENT 0.0 .TP .B markings .UNINDENT .INDENT 0.0 .TP .B labels Flow markings to use for each of the flows in the \fBrtt_fair*\fP tests. Comma\-separated values of markings understood by Netperf (such as \(dqCS0\(dq). Only supports setting the same marking on both the upstream and downstream packets of each flow (so no \(dqCS0,CS0\(dq setting as can be used for Netperf). If not set, defaults to CS0 (best effort). If set, each value corresponds to a flow, and any extra flows will be set to CS0. By default each flow will be labelled according to its marking; to override these labels, use the \fBlabels\fP parameter. .UNINDENT .INDENT 0.0 .TP .B stream_delays Specify a per\-stream delay (in seconds) for the different streams started up by a test. Use commas to separate values for the different streams. This can be used to create tests with staggered start times, for example to test TCP flow startup convergence times. What exactly constitutes a stream depends on the test. For example, the rtt_fair* tests considers each hostname a stream, whether or not there is one or two flows going to that host. .UNINDENT .SH THE FLENT GUI .sp Flent comes equipped with a GUI to browse and plot previously captured datasets. The GUI requires PyQt4; if this is installed, it can be launched with the \fI\%\-\-gui\fP parameter, or by launching the \fBflent\-gui\fP binary. Additionally, if Flent is launched without parameters and without a controlling terminal, the GUI will be launched automatically. .sp The GUI can be used for interactively plotting previously captured datasets, and makes it easy to compare results from several test runs. It presents a tabbed interface to graphs of data files, allows dynamic configuration of plots, and includes a metadata browser. For each loaded data file, additional data files can be loaded and added to the plot, similar to what happens when specifying multiple input files for plotting on the command line. A checkbox controls whether the added data files are added as separate entries to the plot, or whether they are used for scaling the output (mirroring the \fI\%\-\-scale\-mode\fP) command line switch. .sp The GUI also incorporates matplotlib’s interactive browsing toolbar, enabling panning and zooming of the plot area, dynamic configuration of plot and axis parameters and labels and saving the plots to file. The exact dynamic features supported depends on the installed version of matplotlib. .SH CONFIGURATION FILES .SS The RC file .sp Some of the command line options can be specified in an rc file. By default, flent looks for this in \fB~/.flentrc\fP, but an alternative location can be specified with the \fI\%\-\-rcfile\fP command line option. .sp The rc file allows options to be specified globally, an optionally overridden for specific tests. For an explanation of the options, refer to the annotated example rc file, by default installed to \fB/usr/share/doc/flent/flentrc.example\fP\&. .SS Batch Files .sp Flent supports reading batch files to automate running several tests and do setup/teardown of test environment etc. This greatly aids reproducibility of tests. .sp The batch file is parsed as an ini file, and can have three types of sections: batches, commands and args. Each section also has a name; type and name are separated with two colons. \(aqBatches\(aq are named tests that can be selected from the command line, \(aqcommands\(aq are system commands to be run before or after each test run, and \(aqargs\(aq are used in the looping mechanism (which allows repeating tests multiple times with different parameters). .sp Variables in sections control the operation of Flent and can be modified in several ways: Sections of the same type can inherit from each other and the variables in an \(aqarg\(aq section will be interpolated into the batch definition on each iteration of a loop. In addition, variable contents can be substituted into other variables by using the ${varname} syntax. These three operations are resolved in this order (inheritance, arg interpolation and variable substitution). .sp An annotated example batchfile is distributed with the source code, and is by default installed to \fB/usr/share/doc/flent/batchfile.example\fP\&. .SH THE DATA FILE FORMAT .sp The aggregated test data is saved in a file called \fB<test_name>\-<date>.<title>.flent.gz\fP (the title part is omitted if no title is specified by the \fI\%\-t\fP parameter). This file contains the data points generated during the test, as well as some metadata. .SS The top\-level object keys .INDENT 0.0 .TP .B version The file format version as an integer. .UNINDENT .INDENT 0.0 .TP .B x_values An array of the x values for the test data (typically the time values for timeseries data). .UNINDENT .INDENT 0.0 .TP .B results A JSON object containing the result data series. The keys are the data series names; the value for each key is an array of y values for that data series. The data array has the same length as the \fI\%x_values\fP array, but there may be missing data points (signified by null values). .UNINDENT .INDENT 0.0 .TP .B metadata An object containing various data points about the test run. The metadata values are read in as configuration parameters when the data set is loaded in for further processing. Not all tests use all the parameters, but they are saved anyway. .UNINDENT .INDENT 0.0 .TP .B raw_values An array of objects for each data series. Each element of the array contains the raw values as parsed from the test tool corresponding to that data series. .UNINDENT .SS Metadata keys .INDENT 0.0 .TP .B NAME The test name. .UNINDENT .INDENT 0.0 .TP .B TITLE Any extra title specified by the \fI\%\-\-title\-extra\fP parameter when the test was run. .UNINDENT .INDENT 0.0 .TP .B HOSTS List of the server hostnames connected to during the test. .UNINDENT .INDENT 0.0 .TP .B LOCAL_HOST The hostname of the machine that ran the test. .UNINDENT .INDENT 0.0 .TP .B LENGTH Test length in seconds, as specified by the \fI\%\-\-length\fP parameter. .UNINDENT .INDENT 0.0 .TP .B TOTAL_LENGTH Actual data series length, after the test has added time to the \fI\%LENGTH\fP\&. .UNINDENT .INDENT 0.0 .TP .B STEP_SIZE Time step size granularity. .UNINDENT .INDENT 0.0 .TP .B TIME ISO timestamp of the time the test was initiated. .UNINDENT .INDENT 0.0 .TP .B NOTE Arbitrary text as entered with the \fI\%\-\-note\fP switch when the test was run. .UNINDENT .INDENT 0.0 .TP .B FLENT_VERSION Version of Flent that generated the data file. .UNINDENT .INDENT 0.0 .TP .B IP_VERSION IP version used to run test (as specified by command line parameters, or auto\-detected from \fBgetaddrinfo()\fP if unspecified). .UNINDENT .INDENT 0.0 .TP .B KERNEL_NAME The kernel name as reported by \fBuname \-s\fP\&. .UNINDENT .INDENT 0.0 .TP .B KERNEL_RELEASE The kernel release as reported by \fBuname \-r\fP\&. .UNINDENT .INDENT 0.0 .TP .B MODULE_VERSIONS The sha1sum of certain interesting Linux kernel modules, if available. Can be used to match test data to specific code versions, if the kernel build is instrumented to, e.g., set the build ID to a git revision. .UNINDENT .INDENT 0.0 .TP .B SYSCTLS The values of several networking\-related sysctls on the host (if available; Linux only). .UNINDENT .INDENT 0.0 .TP .B EGRESS_INFO Interface name, qdisc, offload, driver and BQL configuration of the interface used to reach the test target. This requires that the \fBip\fP binary is present on Linux, but can be extracted from \fBroute\fP on BSD. Qdisc information requires the \fBtc\fP binary to be present, and offload information requires \fBethtool\fP\&. .sp If the \fI\%\-\-remote\-metadata\fP is used, the extended metadata info is gathered for each of the hostnames specified. This is gathered under the \fBREMOTE_METADATA\fP key in the metadata object, keyed by the hostname values passed to \fI\%\-\-remote\-metadata\fP\&. Additionally, the \fBREMOTE_METADATA\fP object will contain an object called \fBINGRESS_INFO\fP which is a duplicate of \fI\%EGRESS_INFO\fP, but with the destination IP exchanged for the source address of the host running flent. The assumption here is that \fI\%\-\-remote\-metadata\fP is used to capture metadata of a router known to be in the test path, in which case \fBINGRESS_INFO\fP will contain information about the reverse path from the router (which is ingress from the point of view of the host running flent). If the host being queried for remote metadata is off the path, the contents of \fBINGRESS_INFO\fP will probably be the same as that of \fI\%EGRESS_INFO\fP . .UNINDENT .SS Extended metadata .sp If the \fI\%\-\-extended\-metadata\fP switch is turned on, the following additional values are collected and stored (to the extent they are available from the platform): .INDENT 0.0 .TP .B IP_ADDRS IP addresses assigned to the machine running flent. .UNINDENT .INDENT 0.0 .TP .B GATEWAYS IP addresses of all detected default gateways on the system, and the interfaces they are reachable through. Only available if the \fBnetstat\fP binary is present on the system. .UNINDENT .INDENT 0.0 .TP .B EGRESS_INFO In the \fI\%EGRESS_INFO\fP key, the IP address of the next\-hop router and the interface MAC address are added if extended metadata is enabled. .UNINDENT .SH OUTPUT FORMATS .sp The following output formats are currently supported by Flent: .SS Plot output (\fI\%\-f plot\fP) .sp Output test data as one of a series of graphical plots of timeseries data or summarised as a CDF plot. Each test supplies a number of different plots; the list of plots for a given test is output by the \fI\%\-\-list\-plots\fP switch (which must be supplied along with a test name). .sp The plots are drawn by matplotlib, and can be displayed on the screen interactively (requires a graphical display), or output to a file in svg, pdf, ps and png formats. Using the \fI\%\-o\fP switch turns out file output (the file format is inferred from the file name), while not supplying the switch turns on the interactive plot viewer. .SS Tabulated output (\fI\%\-f csv\fP and \fI\%\-f org_table\fP) .sp These formats output the numeric data in a tabulated format to be consumed by other applications. The \fIcsv\fP output format is a comma\-separated output that can be imported into e.g. spreadsheets, while \fIorg_table\fP outputs a tabulated output in the table format supported by Emacs org mode. The data is output in text format to standard output, or written to a file if invoked with the \fI\%\-o\fP parameter. .SS Statistics output (\fI\%\-f stats\fP) .sp This output format outputs various statistics about the test data, such as total bandwidth consumed, and various statistical measures (min/max/mean/median/std dev/variance) for each data source specified in the relevant test (this can include some data sources not includes on plots). The data is output in text format to standard output, or written to a file if invoked with the \fI\%\-o\fP parameter. .SS Metadata output (\fI\%\-f metadata\fP) .sp This output format outputs the test metadata as pretty\-printed JSON (also suitable for human consumption). It is output as a list of objects, where each object corresponds to the metadata of one test. Mostly useful for inspecting metadata of stored data files. .SH MISC INFO .SS Running Tests With The D\-ITG Tool .sp This version of flent has experimental support for running and parsing the output of the D\-ITG test tool (see \X'tty: link http://traffic.comics.unina.it/software/ITG/'\fI\%http://traffic.comics.unina.it/software/ITG/\fP\X'tty: link'). Flent supports parsing the one\-way delay as measured by D\-ITG. However, in order to do so, the data needs to be collected at the receiver end, statistics extracted, and the result passed back to flent on the sending side. .sp To perform this function, flent supports a control server which will listen to XML\-RPC requests, spawn an appropriate ITGRecv instance and, after the test is done, parse its output and make it available for flent to retrieve. This control server is available as a Python file that by default is installed in \fB/usr/share/doc/flent/misc\fP\&. It currently requires a patched version of D\-ITG v2.8.1. The patch is also included in the same directory. .sp Note that the D\-ITG server is finicky and not designed with security in mind. For this reason, the control server includes HMAC authentication to only allow authenticated clients to run a test against the server; however there is currently no support for enforcement of this in e.g. firewall rules. Please bear this in mind when running a publicly reachable ITGRecv instance (with or without the control server). Another security issue with the control server is that the Python XML\-RPC library by default is vulnerable to XML entity expansion attacks. For this reason, it is highly recommended to install the \fBdefusedxml\fP library (available at \X'tty: link https://pypi.python.org/pypi/defusedxml/'\fI\%https://pypi.python.org/pypi/defusedxml/\fP\X'tty: link') on the host running the control server. The server will try to find the library on startup and refuse to run if it is not available, unless explicitly told otherwise. .sp Due to the hassle of using D\-ITG, it is recommended to install \fBirtt\fP instead and use that for VoIP tests. .SS Bugs .sp Under some conditions (such as severe bufferbloat), the UDP RTT measurements done by netperf can experience packet loss to the extent that the test aborts completely, which can cause missing data points for some measurement series. The \-\-socket\-timeout feature can alleviate this, but requires a recent SVN version of netperf to work. Flent tries to detect if netperf supports this option and enables it for the UDP measurements if it does. Using \fBirtt\fP for UDP measurements is a way to alleviate this; Flent will automatically detect the availability of irtt and use it if available. .sp Probably many other bugs. Please report any found to \X'tty: link https://github.com/tohojo/flent/issues'\fI\%https://github.com/tohojo/flent/issues\fP\X'tty: link' and include the output of \fI\%flent \-\-version\fP in the report. A debug log (as obtained with \fI\%flent \-\-log\-file\fP) is also often useful. .SH AUTHOR Toke Høiland-Jørgensen .SH COPYRIGHT 2012-2022, Toke Høiland-Jørgensen and contributors. Source code is GPLv3. Documentation is CC-BY-SA. Neither license affects any output produced by Flent .\" Generated by docutils manpage writer. . �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/�����������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0013566�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/Makefile���������������������������������������������������������������������������0000664�0000000�0000000�00000001002�14670056262�0015217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������STRIP:=strip PREFIX:=/usr/local DESTDIR:=$(PREFIX)/bin PROGS:= tc_iterate wifistats_iterate all: $(PROGS) tc_iterate: tc_iterate.c $(CC) $(CFLAGS) tc_iterate.c -o tc_iterate -lm -lrt wifistats_iterate: wifistats_iterate.c $(CC) $(CFLAGS) wifistats_iterate.c -o wifistats_iterate -lm -lrt file_iterate: file_iterate.c $(CC) $(CFLAGS) file_iterate.c -o file_iterate -lm -lrt install: tc_iterate $(STRIP) $(PROGS) install -d -m0755 $(DESTDIR) install -m0755 $(PROGS) $(DESTDIR) clean: rm -f *.o $(PROGS) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/dash-logger.js���������������������������������������������������������������������0000664�0000000�0000000�00000005213�14670056262�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Include this file along with the dash.js player to enable logging // The log output will be parsed by Flent var player; var tmp_date; var starttime; var off = 1; var stoptime; var stalling=0; var first_log = 1; var log_base; function time_log(Type,D1,D2,D3) { var tmp_d = new Date(); if (first_log) { log_base = tmp_d.getTime(); first_log = 0; } var t_stamp = tmp_d.getTime() - log_base; // D,time,type,d1,d2,d3 console.log("D," + t_stamp + "," + Type + "," + D1 + "," + D2 + "," + D3); } function showEvent(e) { // we can now play, either after initial loading or stalling if (e.type == "canPlay") { if (off) { off = 0; tmp_date = new Date(); var start_elapsed = tmp_date.getTime() - starttime; var q_idx = player.getQualityFor('video'); var q_obj = player.getBitrateInfoListFor('video')[q_idx]; var bitrate = q_obj.bitrate; time_log("ID",start_elapsed,null,null); time_log("IR",bitrate,null,null); } else { if (stalling) { tmp_date = new Date(); var stop_elapsed = tmp_date.getTime() - stoptime; time_log("SD",stop_elapsed,null,null); stalling=0; } } } // we have now run out of buffer space, begin stall period if (e.type == "bufferStalled" && e.mediaType == "video") { stalling=1; stoptime = new Date(); } // we have a quality change! if (e.type == "qualityChangeRequested" && e.mediaType == "video") { var q_idx = player.getQualityFor('video'); var q_obj = player.getBitrateInfoListFor('video')[q_idx]; if (e.reason != undefined) time_log("QC",e.oldQuality,e.newQuality,e.reason.name); else time_log("QC",e.oldQuality,e.newQuality,null); time_log("BC",q_obj.bitrate); } if (e.type == "playbackProgress") { time_log("AT", player.getAverageThroughput('video'),null,null); time_log("BL", player.getBufferLength('video')*1000,null,null); } if (e.type == "fragmentLoadingCompleted" && e.request.mediaType == 'video') { let now = new Date().getTime(); time_log("FC",(now-e.request.delayLoadingTime),null,null); } } function init() { player = dashjs.MediaPlayerFactory.create(document.querySelector(".dashjs-player")); player.getDebug().setLogTimestampVisible(true); player.getDebug().setLogToBrowserConsole(false); // save start time tmp_date = new Date(); starttime = tmp_date.getTime(); // events to listen for player.on(dashjs.MediaPlayer.events["CAN_PLAY"], showEvent); player.on(dashjs.MediaPlayer.events["BUFFER_EMPTY"], showEvent); player.on(dashjs.MediaPlayer.events["QUALITY_CHANGE_REQUESTED"], showEvent); player.on(dashjs.MediaPlayer.events["FRAGMENT_LOADING_COMPLETED"], showEvent); player.on(dashjs.MediaPlayer.events["PLAYBACK_PROGRESS"], showEvent); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/ditg-control-server.py�������������������������������������������������������������0000664�0000000�0000000�00000041660�14670056262�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # ditg-control-server.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 28 marts 2014 # Copyright (c) 2014-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import calendar import hashlib import hmac import json import optparse import os import random import shutil import signal import string import subprocess import sys import tempfile import time import traceback from datetime import datetime try: from defusedxml.xmlrpc import monkey_patch monkey_patch() del monkey_patch XML_DEFUSED = True except ImportError: XML_DEFUSED = False try: # python 2 from SimpleXMLRPCServer import SimpleXMLRPCServer except ImportError: from xmlrpc.server import SimpleXMLRPCServer # Nicked from the subprocess module -- for closing open file descriptors try: MAXFD = os.sysconf("SC_OPEN_MAX") except: MAXFD = 256 ALPHABET = list(string.ascii_lowercase) + list(string.digits) class AlarmException(Exception): pass parser = optparse.OptionParser( description="Control server for D-ITG receive component session negotiation.") parser.add_option('--insecure-xml', action='store_true', dest='INSECURE_XML', default=False, help="Run even though the defusedxml module is unavailable. " "WARNING: Will leave the server open to entity expansion " "attacks!") parser.add_option('-a', '--address', action='store', type='string', dest='BIND_ADDRESS', default='localhost', help="Address to bind to. Default: localhost.") parser.add_option('-p', '--port', action='store', type='int', dest='BIND_PORT', default='8000', help="Bind port. Default: 8000.") parser.add_option('-A', '--itg-address', action='store', type='string', dest='ITG_ADDRESS', default=None, help="Address to bind ITGRecv to. Default: Same as --address.") parser.add_option('-s', '--start-port', action='store', type='int', dest='START_PORT', default=9000, help="Start port for ITGRecv " "control socket binds (default 9000).") parser.add_option('-t', '--max-test-time', action='store', type='int', dest='MAX_TEST_TIME', default=7200, help="Maximum test time " "allowed. Default 7200 seconds (two hours).") parser.add_option('-m', '--max-instances', action='store', type='int', dest='MAX_INSTANCES', default=100, help="Maximum number of running instances before new requests " "are denied (default 100).") parser.add_option('-S', '--secret', action='store', type='string', dest='SECRET', default="", help="Secret for request authentication. " "Default: ''.") parser.add_option('--debug', action='store_true', dest='DEBUG', default=False, help="Debug mode: Don't delete temporary files.") class DITGManager(object): datafile_pattern = "%s.json" def __init__(self, bind_address, start_port, max_test_time, max_instances, secret, debug=False): self.working_dir = tempfile.mkdtemp(prefix='ditgman-') self.seen = {} self.children = [] self.toplevel = True self.bind_address = bind_address self.max_test_time = max_test_time self.max_instances = max_instances self.hmac = hmac.new(secret.encode(), digestmod=hashlib.sha256) self.start_port = self.current_port = start_port self.id_length = 20 self.debug = debug signal.signal(signal.SIGINT, self._exit) signal.signal(signal.SIGTERM, self._exit) signal.signal(signal.SIGALRM, self._alarm) signal.signal(signal.SIGCHLD, self._collect_garbage) def get_test_results(self, test_id): """Get the results of a previously initiated test. The sole parameter is the test_id returned from request_new_test(). The return parameter is a dictionary with the following entries: status: 'OK' if everything went well, 'Error' otherwise. message: Set if status is 'Error'; contains an error message. data: The output of ITGDec -c with the interval requested at initiation. utc_offset: UTC timestamp which the time values in the return data is offset by. """ self._collect_garbage() test_id = str(test_id) if len(test_id) != self.id_length: return {'status': 'Error', 'message': "Invalid test id: '%s'." % test_id} for c in test_id: if c not in ALPHABET: return {'status': 'Error', 'message': "Invalid test id: '%s'." % test_id} filename = os.path.join( self.working_dir, self.datafile_pattern % test_id) if not os.path.exists(filename): return {'status': 'Error', 'message': "Data for test ID '%s' not found." % test_id} with open(filename, 'rt') as fp: data = json.load(fp) return data def request_new_test(self, duration, interval, hmac_hex, raw_data=False): """Request a new test instance. This will allocate a new ITGRecv instance and parse the log file it produces. The results of this can then be retrieved with get_test_results() after the test has run. The parameters are: duration: Requested test duration in seconds. The ITGRecv instance will be killed after this time has passed (+ a grace period of five seconds). interval: The requested interval for data points, in milliseconds (passed to ITGDec). hmac_hex: A hexadecimal HMAC-SHA256 of the two other parameters computed by concatenating their ASCII representations. The HMAC secret is configured by the operator of the control server instance. raw_data: Whether to store and return the raw text log from ITGDec (i.e. the output of ITGDec -l) The return value is a dictionary with the following keys: status: 'OK' if everything went well, 'Error' otherwise. message: Set if status is 'Error'; contains an error message. test_id: The assigned test ID, to be passed to get_test_results() after the duration has expired. port: The control server port of the ITGRecv instance. The sender is expected to use port+1 for the data connection. """ self._collect_garbage() duration = int(duration) interval = int(interval) hmac = self.hmac.copy() hmac.update(str(duration).encode()) hmac.update(str(interval).encode()) if hmac.hexdigest() != hmac_hex: return {'status': 'Error', 'message': "HMAC authentication failure."} if duration <= 0 or interval <= 0: return {'status': 'Error', 'message': "Duration and interval must be positive integers."} if duration > self.max_test_time: return {'status': 'Error', 'message': "Maximum test time of %d seconds exceeded." % self.max_test_time} if interval > duration * 1000: return {'status': 'Error', 'message': "Interval must be <= duration."} if len(self.children) >= self.max_instances: return {'status': 'Error', 'message': "Too many concurrent instances running. " "Try again later."} test_id = "".join(random.sample(ALPHABET, self.id_length)) # Need one port for control, one for data (if the data stream is TCP). port = self.current_port self.current_port += 2 return self._spawn_receiver(test_id, duration, interval, port, raw_data) def _clean_fork(self, output=None): pipe_r, pipe_w = os.pipe() pid = os.fork() if pid: self.children.append(pid) os.close(pipe_w) return pipe_r, False else: try: self.children = [] self.toplevel = False os.chdir(self.working_dir) sys.stdin.close() # Move the pipe fd to position 3, close everything above it os.dup2(pipe_w, 3) os.closerange(4, MAXFD) pipe_w = 3 if output is not None: with open(os.path.join(self.working_dir, output), "w") as fp: os.dup2(fp.fileno(), 1) os.dup2(fp.fileno(), 2) else: sys.stdout.close() sys.stderr.close() except: try: traceback.print_exc() finally: os._exit(1) return pipe_w, True def _unlink(self, filename): if self.debug: return try: os.unlink(filename) except: pass def _spawn_receiver(self, test_id, duration, interval, port, raw_data): stdout = "%s.recv.out" % test_id datafile = self.datafile_pattern % test_id error = False pipe, child = self._clean_fork(stdout) if child: try: ret = self._run_receiver( test_id, duration, interval, port, pipe, raw_data) except Exception as e: traceback.print_exc() ret = {'status': 'Error', 'message': str(e)} error = True try: # Write data to temp file, atomically rename to final file name with open('%s.tmp' % datafile, 'wt') as fp: json.dump(ret, fp) os.rename('%s.tmp' % datafile, datafile) finally: if not error: self._unlink(stdout) os._exit(0) os._exit(1) else: try: val = os.read(pipe, 1024).decode() if val == 'OK': return {'status': 'OK', 'test_id': test_id, 'port': port} else: return {'status': 'Error', 'message': val} finally: os.close(pipe) def _run_receiver(self, test_id, duration, interval, port, pipe, raw_data): logfile = '%s.log' % test_id txtlog = '%s.log.txt' % test_id outfile = '%s.dat' % test_id ret = {'status': 'OK'} # Run ITGRecv; does not terminate after the end of the test, so wait for # the test duration + a grace time of 5 seconds, then kill the process try: proc = subprocess.Popen(['ITGRecv', '-l', logfile, '-I', '-a', self.bind_address, '-Sp', str(port)]) # Signal back to the parent whether or not we successfully spawned the # receiver. except OSError as e: os.write(pipe, str(e).encode()) else: time.sleep(0.1) try: w = os.waitpid(proc.pid, os.WNOHANG) except OSError as e: w = (0, str(e)) if w != (0, 0): ret = {'status': 'Error', 'message': 'ITGRecv exited immediately with code %s.' % w[1]} os.write(pipe, ret['message'].encode()) else: self.children.append(proc.pid) os.write(pipe, b'OK') os.close(pipe) # Use an alarm signal for the timeout; means we don't have to wait for the # entire test duration if the ITGRecv process terminates before then signal.alarm(duration + 5) try: retval = proc.wait() if retval > 0: raise Exception("ITGRecv non-zero exit") except AlarmException: proc.terminate() signal.alarm(0) # Call ITGDec on the log file output, read in the resulting data if not os.path.exists(logfile): raise Exception('No data file produced') try: subprocess.check_call(['ITGDec', logfile, '-c', str(interval), outfile, '-l', txtlog]) with open(outfile, 'rt') as fp: ret['data'] = fp.read() if not ret['data']: # By not raising an exception, the stdout output file is still # cleared, but an error is reported to the caller. This is to # prevent output files from sticking around for, e.g., users # that request a test, but then cannot get packets through; the # output is not useful to diagnose that anyway. ret = {'status': 'Error', 'message': 'Empty data set.'} # Read start of text log file to get timestamp of first received # packet with open(txtlog, 'rt') as fp: if raw_data: ret['raw'] = fp.read() data = ret['raw'][:1024] else: data = fp.read(1024) try: idx_s = data.index('rxTime>') + len('rxTime>') idx_e = data.index('Size>') t, microsec = data[idx_s:idx_e].split(".") h, m, s = t.split(":") now = time.gmtime() ret['utc_offset'] = calendar.timegm( (now[0], now[1], now[2], int(h), int(m), int(s), now[6], now[7], now[8])) + int(microsec) / 10**6 except Exception as e: ret['utc_offset'] = None return ret finally: # Clean up temporary files and exit for f in logfile, txtlog, outfile: self._unlink(f) def _collect_garbage(self, *args): for p in self.children: try: if os.waitpid(p, os.WNOHANG) != (0, 0): self.children.remove(p) except OSError: self.children.remove(p) # When no more children are alive, reset the current port if not self.children: self.current_port = self.start_port if not self.toplevel: return try: files = os.listdir(self.working_dir) for f in files: if not f.endswith('.json'): continue p = os.path.join(self.working_dir, f) s = os.stat(p) td = datetime.now() - datetime.fromtimestamp(s.st_mtime) if td.seconds > 300: self._unlink(p) except: traceback.print_exc() def _alarm(self, signum, frame): raise AlarmException() def _exit(self, signum, frame): for p in self.children: try: os.kill(p, signum) except OSError: pass # Do not call normal exit handlers when in a subprocess if not self.toplevel: os._exit(0) # SIGTERM is successful exit, others are not if signum == signal.SIGTERM: sys.exit(0) sys.exit(1) def __del__(self): if self.toplevel and not self.debug: shutil.rmtree(self.working_dir, ignore_errors=True) def run(): options, args = parser.parse_args() if not XML_DEFUSED and not options.INSECURE_XML: sys.stderr.write( "XML EXPANSION ATTACK VULNERABILITY DETECTED. ABORTING!\n" "Run with --insecure-xml to run anyway (will leave the server " "vulnerable!)\n") sys.exit(1) server = SimpleXMLRPCServer( (options.BIND_ADDRESS, options.BIND_PORT), allow_none=True) manager = DITGManager( bind_address=options.ITG_ADDRESS or options.BIND_ADDRESS, start_port=options.START_PORT, max_test_time=options.MAX_TEST_TIME, max_instances=options.MAX_INSTANCES, secret=options.SECRET, debug=options.DEBUG,) server.register_instance(manager) server.register_introspection_functions() server.serve_forever() if __name__ == "__main__": run() ��������������������������������������������������������������������������������flent-2.2.0/misc/ditg-control-server@.service�������������������������������������������������������0000664�0000000�0000000�00000000273�14670056262�0021163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Unit] Description=Control server for d-itg [Service] Type=simple ExecStart=/usr/bin/python3 /usr/local/lib/ditg-control-server.py --address=%I [Install] WantedBy=network-online.target �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/ditg-ignore-client-log.patch�������������������������������������������������������0000664�0000000�0000000�00000004530�14670056262�0021054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������diff -Z -u -r D-ITG-2.8.1-r1023.orig/src/ITGRecv/ITGRecv.cpp D-ITG-2.8.1-r1023/src/ITGRecv/ITGRecv.cpp --- D-ITG-2.8.1-r1023.orig/src/ITGRecv/ITGRecv.cpp 2013-07-02 16:35:10.000000000 +0200 +++ D-ITG-2.8.1-r1023/src/ITGRecv/ITGRecv.cpp 2014-03-31 13:48:35.043462511 +0200 @@ -83,6 +83,8 @@ int logRemote = 0; +int ignoreClientLog = 0; + uint16_t logbuffer_size = 50; @@ -587,7 +589,7 @@ if (type == TSP_SEND_NAME_LOG) { recvNameLog(nameFileLog, newSockSignaling); - if (logCheck != 1) { + if (logCheck != 1 && !ignoreClientLog) { fileDescriptor = allowedLogFile(nameFileLog); if (fileDescriptor == NULL) { if (sendAck(newSockSignaling, TSP_ERR_MSG_4) < 0) @@ -609,13 +611,15 @@ } } else if (type == TSP_SEND_FLOW_LOG) { recvFlowLog(newSockSignaling, logHost, protocolLog, nameFileLog); - if (logRemote != 1) { - createRemoteLogFile(logHost, nameFileLog,protocolLog, logSockSignaling, logSock); - logRemote = 2; - } else { - logSockSignaling = globaleLogSockSignaling; - logSock = globaleLogSock; - copia(globaleLogHost, logHost); + if (!ignoreClientLog) { + if (logRemote != 1) { + createRemoteLogFile(logHost, nameFileLog,protocolLog, logSockSignaling, logSock); + logRemote = 2; + } else { + logSockSignaling = globaleLogSockSignaling; + logSock = globaleLogSock; + copia(globaleLogHost, logHost); + } } if (sendAck(newSockSignaling, TSP_ACK_SEND_FLOW_LOG) < 0) reportErrorAndExit("sendFlowLog","sendAck - type = TSP_ACK_SEND_FLOW_LOG(12)","Cannot send Ack on newSockSignaling"); @@ -827,7 +831,9 @@ " -H <ITGSend_address> Enable \"Passive Mode\" toward the specified ITGSend instance.\n\n" - " -n <num_pkt> Number of outgoing packets used for UDP NAT traversal.\n"; + " -n <num_pkt> Number of outgoing packets used for UDP NAT traversal.\n" + + " -I Ignore client logging options and use command line settings exclusively.\n"; cout << "\nFor more information please refer to the manual.\n"; exit(1); @@ -2136,6 +2142,11 @@ NEXT_OPT; break; + case 'I': + PRINTD(1,"parserRecv: Ignoring logging data from clients.\n"); + ignoreClientLog = 1; + break; + default: printf("parserRecv: Unknow option : %s\n\n", argv[0]); printHelpAndExit(); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/file_iterate.c���������������������������������������������������������������������0000664�0000000�0000000�00000012576�14670056262�0016401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* file_iterate: Reliable, fast monitoring of files * Author: Dave Taht * Date: 22 Nov 2015 * Copyright (C) 2015-6 Michael David Taht * Copyright (C) 2015-6 Toke Høiland-Jørgensen * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> #include <errno.h> #include <locale.h> #include <assert.h> #include <getopt.h> #include <iconv.h> #include <fcntl.h> #include <math.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/timerfd.h> /* openwrt's ash shell does not have usleep, nor nanosecond time in the date command. for i in $(seq $count); do cat $filename date '+Time: %s.%N' echo "---" sleep $interval done So this C program (which is more accurate and lighter weight than the shell script) needs to be used on things like openwrt, when high resolution data is needed. */ #define BUFFERSIZE (1024*1024) #define NSEC_PER_SEC (1000000000.0) struct arg { int count; struct timespec interval; double finterval; char *filename; char *command; char buffer; }; typedef struct arg args; static const struct option long_options[] = { { "count" , required_argument , NULL , 'c' } , { "interval" , required_argument , NULL , 'I' } , { "help" , no_argument , NULL , 'h' } , { "buffer" , no_argument , NULL , 'b' } , }; void usage (char *err) { if(err) fprintf(stderr,"%s\n",err); printf("file_iterate [options]\n"); printf( "\t-h --help \n" "\t-b --buffer \n" "\t-c --count [number of iterations]\n" "\t-I --interval [fractional number of seconds]\n" "\t-f --filename [filename]\n"); exit(-1); } static void defaults(args *a) { a->filename = NULL; a->finterval=.2; a->count=10; a->interval.tv_nsec = 0; a->interval.tv_sec = 0; a->buffer = 0; } #define QSTRING "c:I:f:hb" int process_options(int argc, char **argv, args *o) { int option_index = 0; int opt = 0; optind = 1; while(1) { opt = getopt_long(argc, argv, QSTRING, long_options, &option_index); if(opt == -1) break; switch (opt) { case 'c': o->count = strtoul(optarg,NULL,10); break; case 'I': o->finterval = strtod(optarg,NULL); break; case 'f': o->filename = optarg; break; case 'b': o->buffer = 1; break; case '?': case 'h': usage(NULL); break; default: usage(NULL); } } o->interval.tv_sec = floor(o->finterval); o->interval.tv_nsec = (long long) ((o->finterval - o->interval.tv_sec) * NSEC_PER_SEC); return 0; } static int read_once(char *filename, char *buffer, int bufsize) { int fp = open(filename, O_RDONLY); ssize_t len = 0, r = 0; if(!fp) { perror("Unable to open file"); return -1; } while((r = read(fp, buffer, bufsize-len)) > 0) len += r; return len; } static void result(int out, int size, int bufsize, char *buffer) { struct timespec cur_time; if(bufsize - size > 40) { clock_gettime(CLOCK_REALTIME, &cur_time); int added = sprintf(&buffer[size],"Time: %ld.%09ld\n---\n", cur_time.tv_sec,cur_time.tv_nsec); write(out,buffer,size+added); } else { write(2,"Buffer Overrun\n",sizeof("Buffer Overrun\n")); } } // Since this is linux only we can use timerfd for an isochronous clock int run(args *a) { char tmpfile[] = "/tmp/file_iterateXXXXXX"; int out = a->buffer ? mkstemp(tmpfile) : STDOUT_FILENO; if(a->buffer && !out) { perror("Unable to create tmpfile"); exit(-1); } if (!a->filename) usage("Must specify filename"); struct itimerspec new_value = {0}; int timer = timerfd_create(CLOCK_REALTIME, 0); //new_value.it_interval.tv_nsec = 100000000; // 10ms interval //new_value.it_interval.tv_sec = 0; new_value.it_interval = a->interval; new_value.it_value = a->interval; /* better method would be to poll for input (since writes from the tool could block or return no output for some reason), timestamp the input, and if the difference is less than half, skip this round. this would absorb non-completing stuff */ char buffer[BUFFERSIZE]; if (read_once(a->filename, buffer, sizeof(buffer)) <= 0) { perror("Unable to read file"); exit(-1); } int size = 0; int ctr = 0; timerfd_settime(timer,0,&new_value,NULL); // relative timer do { long long fired; if(read(timer,&fired,sizeof(fired))!=8) perror("reading timer"); ctr+=fired; if((size = read_once(a->filename,buffer,sizeof(buffer))) > 0) { result(out,size,BUFFERSIZE,buffer); } else { result(out,0,BUFFERSIZE,buffer); perror("reading file"); } } while (ctr < a->count); if(a->buffer) { lseek(out, 0, SEEK_SET); while((size = read(out, buffer, sizeof(buffer))) > 0) write(STDOUT_FILENO,buffer,size); unlink(tmpfile); } close(out); wait(NULL); return 0; } int main(int argc,char **argv) { args a; int status = 0; defaults(&a); process_options(argc, argv, &a); run(&a); return status; } ����������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/iperf-server.py��������������������������������������������������������������������0000664�0000000�0000000�00000007210�14670056262�0016551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # iperf-server.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 26 november 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import copy import csv import json import subprocess import threading import time iperf_cols = [ 'timestamp', 'server_host', 'server_port', 'client_host', 'transfer_id', 'start_time', 'time_interval', 'total_length', 'speed', 'jitter', 'errors', 'datagrams', 'error_percent', 'out_of_order', ] TIMEOUT = 10.0 class IperfReader(csv.DictReader): def __init__(self, csvfile): csv.DictReader.__init__(self, csvfile, fieldnames=iperf_cols) def line_iterator(fp): line = fp.readline() while line: yield line line = fp.readline() class TestData(object): def __init__(self, r_id): self._id = r_id self._last_update = time.time() self._records = [] def add_record(self, record): self._records.append(record) self._last_update = time.time() def expired(self): return time.time() - self._last_update > TIMEOUT def records(self): return copy.deepcopy(self._records) class Monitor(threading.Thread): def __init__(self, *args, **kwargs): threading.Thread.__init__(self, *args, **kwargs) self._test_data = {} self._lock = threading.RLock() def run(self): prog = subprocess.Popen(['iperf', '-s', '-u', '-i', '0.5', '-y', 'c'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None, universal_newlines=True) prog.stdin.close() reader = IperfReader(line_iterator(prog.stdout)) for record in reader: self.handle_record(record) def handle_record(self, record): parts = record['time_interval'].split("-") length = float(parts[1]) - float(parts[0]) # too long interval, this is a summary record if length > 2: return r_id = record['transfer_id'] self._lock.acquire() if r_id not in self._test_data: self._test_data[r_id] = TestData(r_id) self._test_data[r_id].add_record(record) self._lock.release() self.collect_garbage() def collect_garbage(self): self._lock.acquire() for k, v in list(self._test_data.items()): if v.expired(): del self._test_data[k] self._lock.release() def get_records(self, r_id): self._lock.acquire() try: return self._test_data[r_id].records() finally: self._lock.release() monitor = Monitor() monitor.start() while True: try: request_id = input().strip() print(json.dumps(monitor.get_records(request_id))) except KeyError: print("No records for id %s." % request_id) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/tc_iterate.c�����������������������������������������������������������������������0000664�0000000�0000000�00000013433�14670056262�0016061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* tc_iterate: Reliable, fast monitoring of tc * Author: Dave Taht * Date: 22 Nov 2015 * Copyright (C) 2015 Michael David Taht * Copyright (C) 2015 Toke Høiland-Jørgensen * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> #include <errno.h> #include <locale.h> #include <assert.h> #include <getopt.h> #include <iconv.h> #include <fcntl.h> #include <math.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/timerfd.h> /* openwrt's ash shell does not have usleep, nor nanosecond time in the date command. for i in $(seq $count); do tc -s $command show dev $interface date '+Time: %s.%N' echo "---" sleep $interval done So this C program (which is more accurate and lighter weight than the shell script) needs to be used on things like openwrt, or when high resolution tc statistics are desired. */ #define BUFFERSIZE (1024*1024) #define NSEC_PER_SEC (1000000000.0) struct arg { int count; struct timespec interval; double finterval; char *interface; char *command; char buffer; }; typedef struct arg args; static const struct option long_options[] = { { "interface", required_argument , NULL , 'i' } , { "count" , required_argument , NULL , 'c' } , { "interval" , required_argument , NULL , 'I' } , { "command" , required_argument , NULL , 'C' } , { "help" , no_argument , NULL , 'h' } , { "buffer" , no_argument , NULL , 'b' } , }; void usage (char *err) { if(err) fprintf(stderr,"%s\n",err); printf("tc_iterate [options]\n"); printf( "\t-h --help \n" "\t-b --buffer \n" "\t-i --interface [eth0*,wlan0,etc]\n" "\t-c --count [number of iterations]\n" "\t-I --interval [fractional number of seconds]\n" "\t-C --command [qdisc]\n"); exit(-1); } static void defaults(args *a) { a->interface = "eth0"; a->command = "qdisc"; a->finterval=.2; a->count=10; a->interval.tv_nsec = 0; a->interval.tv_sec = 0; a->buffer = 0; } #define QSTRING "i:c:I:C:hb" int process_options(int argc, char **argv, args *o) { int option_index = 0; int opt = 0; optind = 1; while(1) { opt = getopt_long(argc, argv, QSTRING, long_options, &option_index); if(opt == -1) break; switch (opt) { case 'c': o->count = strtoul(optarg,NULL,10); break; case 'I': o->finterval = strtod(optarg,NULL); break; case 'C': o->command = optarg; break; case 'i': o->interface = optarg; break; case 'b': o->buffer = 1; break; case '?': case 'h': usage(NULL); break; default: usage(NULL); } } o->interval.tv_sec = floor(o->finterval); o->interval.tv_nsec = (long long) ((o->finterval - o->interval.tv_sec) * NSEC_PER_SEC); return 0; } static void result(int out, int size, int bufsize, char *buffer) { struct timespec cur_time; if(bufsize - size > 40) { clock_gettime(CLOCK_REALTIME, &cur_time); int added = sprintf(&buffer[size],"Time: %ld.%09ld\n---\n", cur_time.tv_sec,cur_time.tv_nsec); write(out,buffer,size+added); } else { write(2,"Buffer Overrun\n",sizeof("Buffer Overrun\n")); } } // Since this is linux only we can use timerfd for an isochronous clock int forkit(args *a) { int filedes[2]; // 0 = read int filedes2[2]; // 0 = read pipe(filedes); pipe(filedes2); int tool = filedes[1]; // write this int in = filedes2[0]; // connect out to in char tmpfile[] = "/tmp/tc_iterateXXXXXX"; int out = a->buffer ? mkstemp(tmpfile) : STDOUT_FILENO; pid_t child; if(a->buffer && !out) { perror("Unable to create tmpfile"); exit(-1); } // probably want the pipe line buffered via fcntl if((child = fork())==0) { close(filedes[1]); close(filedes2[0]); dup2(filedes2[1],STDOUT_FILENO); dup2(filedes[0],STDIN_FILENO); if(execlp("tc", "tc", "-s", "-b", "-",NULL)==-1) { perror("Failed to execute cmd"); exit(-1); } } close(filedes2[1]); close(filedes[0]); struct itimerspec new_value = {0}; int timer = timerfd_create(CLOCK_REALTIME, 0); new_value.it_interval = a->interval; new_value.it_value = a->interval; /* better method would be to poll for input (since writes from the tool could block or return no output for some reason), timestamp the input, and if the difference is less than half, skip this round. this would absorb non-completing stuff */ char buffer[BUFFERSIZE]; char cmd[1024]; int size = 0; sprintf(cmd,"%s show dev %s\n",a->command,a->interface); int csize = strlen(cmd); int ctr = 0; timerfd_settime(timer,0,&new_value,NULL); // relative timer do { long long fired; if(write(tool,cmd,csize)==-1) perror("writing cmd"); if(read(timer,&fired,sizeof(fired))!=8) perror("reading timer"); ctr+=fired; if((size = read(in,buffer,sizeof(buffer))) > 0) { result(out,size,BUFFERSIZE,buffer); } else { result(out,0,BUFFERSIZE,buffer); perror("reading cmd output"); } } while (ctr < a->count); close(tool); close(in); if(a->buffer) { lseek(out, 0, SEEK_SET); while((size = read(out, buffer, sizeof(buffer))) > 0) write(STDOUT_FILENO,buffer,size); unlink(tmpfile); } close(out); wait(NULL); return 0; } int main(int argc,char **argv) { args a; int status = 0; defaults(&a); process_options(argc, argv, &a); forkit(&a); return status; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/tcpdump-wrapper.py�����������������������������������������������������������������0000664�0000000�0000000�00000011252�14670056262�0017273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # tcpdump-wrapper.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 30 April 2014 # Copyright (c) 2014-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import optparse import os import shutil import socket import subprocess import sys import time try: MAXFD = os.sysconf("SC_OPEN_MAX") except: MAXFD = 256 DEFAULT_IFACE = 'eth1' DEFAULT_SIZE = 128 DEFAULT_DEST_DIR = "/home/data" CAPTURE_DIR = "/tmp" parser = optparse.OptionParser( description="Wrapper to start/stop tcpdump.", usage="Usage: %prog [options] <start|stop> <filename>") parser.add_option('-i', '--interface', action='store', type="string", dest='INTERFACE', default=DEFAULT_IFACE) parser.add_option('-s', '--size', action='store', type="int", dest='SIZE', default=DEFAULT_SIZE) parser.add_option('-d', '--dest-dir', action='store', type="string", dest='DEST_DIR', default=DEFAULT_DEST_DIR) def start_tcpdump(filename, iface=DEFAULT_IFACE, size=DEFAULT_SIZE): pidfile = os.path.join(CAPTURE_DIR, "%s.pid" % filename) if os.path.exists(pidfile): sys.stderr.write("Pidfile already exists: %s.\n" % pidfile) sys.exit(1) args = ['sudo', 'tcpdump', '-n', '-i', iface, '-s', str(size), '-w', os.path.join(CAPTURE_DIR, "%s.cap" % filename)] pid = os.fork() if pid: with open(pidfile, "w") as fp: fp.write("%d\n" % pid) sys.exit(0) else: logfile = os.path.join(CAPTURE_DIR, "%s.log" % filename) fp_in = open("/dev/null", "r") fp_out = open(logfile, "a") os.dup2(fp_in.fileno(), 0) os.dup2(fp_out.fileno(), 1) os.dup2(fp_out.fileno(), 2) os.closerange(3, MAXFD) prog = args[0] os.execvp(prog, args) def stop_tcpdump(filename, dest_dir=DEFAULT_DEST_DIR): pidfile = os.path.join(CAPTURE_DIR, "%s.pid" % filename) logfile = os.path.join(CAPTURE_DIR, "%s.log" % filename) datafile = os.path.join(CAPTURE_DIR, "%s.cap" % filename) dest_data = os.path.join(dest_dir, "%s.cap.gz" % filename) dest_log = os.path.join(dest_dir, "%s.log" % filename) try: with open(pidfile, "r") as fp: pid = int(fp.read()) except (OSError, IOError, ValueError) as e: sys.stderr.write("Unable to read pidfile: %s.\n" % e) sys.exit(1) try: subprocess.check_call("sudo kill %d" % pid, shell=True) os.unlink(pidfile) except subprocess.CalledProcessError as e: sys.stderr.write("Unable to kill: %s.\n" % e) if os.path.exists(dest_data) or os.path.exists(dest_log): sys.stderr.write( "Destination data or log file already exists. Not copying.\n") sys.exit(1) if not os.path.exists(dest_dir): try: os.mkdir(dest_dir) except OSError as e: sys.stderr.write("Unable to create destination directory: %s.\n" % e) sys.exit(1) time.sleep(0.5) shutil.copyfile(logfile, dest_log) try: if os.path.exists(datafile): subprocess.check_call("gzip -c %s > %s" % (datafile, dest_data), shell=True) except subprocess.CalledProcessError as e: sys.stderr.write("Unable to compress data file: %s.\n" % e) try: subprocess.check_call("sudo rm -f %s %s" % (datafile, logfile), shell=True) except subprocess.CalledProcessError as e: sys.stderr.write("Unable to remove data and log files: %s.\n" % e) if __name__ == "__main__": options, args = parser.parse_args() if len(args) != 2: parser.error("Need action and filename.") action, filename = args filename = "%s.%s" % (filename, socket.gethostname()) if action == 'start': start_tcpdump(filename, iface=options.INTERFACE, size=options.SIZE) elif action == 'stop': stop_tcpdump(filename, dest_dir=options.DEST_DIR) else: parser.error("Unknown action: %s." % action) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/test-exec.sh�����������������������������������������������������������������������0000775�0000000�0000000�00000000045�14670056262�0016025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh echo "{\"args\": \"$@\"}" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/testcontrol-web-service.py���������������������������������������������������������0000664�0000000�0000000�00000011233�14670056262�0020731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # testcontrol-web-service.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 25 October 2014 # Copyright (c) 2014-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import json import os import re import select import shlex import subprocess import sys try: from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler from SocketServer import ForkingMixIn except ImportError: from http.server import HTTPServer, BaseHTTPRequestHandler from socketserver import ForkingMixIn tests = [{'name': 'test', 'args': {'ipver': 'IP version (4 or 6)'}, 'exec': './test-exec.sh ${ipver}'}] class TestWebServer(ForkingMixIn, HTTPServer): pass class TestWebService(BaseHTTPRequestHandler): _INTERP_REGEX = re.compile(r"(^|[^$])(\$\{([^}]+)\})") _MAX_INTERP = 1000 def respond(self, obj): self.send_response(200) self.send_header("Content-type", "application/json; charset=utf8") self.end_headers() self.wfile.write(json.dumps(obj).encode("utf-8")) self.wfile.write("\n".encode("utf-8")) def find_test(self, name): for t in tests: if t['name'] == name: return t self.send_error(404, "Test not found: %s" % name) return None def do_GET(self): print(self.headers) parts = os.path.split(self.path) if len(parts) < 3 and not parts[1]: self.respond(list([i['name'] for i in tests])) else: test = self.find_test(parts[1]) if test: self.respond(test['args']) def parse_input(self): length = self.headers.get('content-length') input_type = self.headers.get('Content-Type') parts = input_type.split(";", 1) if parts[0].strip().lower() != 'application/json': self.send_error(415, 'Invalid format. Needs application/json') return None if len(parts) > 1 and parts[1].startswith('charset='): charset = parts[1].split("=", 1)[1].strip() else: charset = 'utf-8' try: nbytes = int(length) except (TypeError, ValueError): self.send_error(411) return None if nbytes > 0: data = self.rfile.read(nbytes) while select.select([self.rfile], [], [], 0)[0]: if not self.rfile.read(1): break try: return json.loads(data.decode(charset)) except Exception as e: self.send_error(400, "Unable to decode: %s" % e) def interpolate(self, string, req): m = self._INTERP_REGEX.search(string) i = 0 while m is not None: k = m.group(3) if k in req: string = string.replace(m.group(2), str(req[k])) else: string = string.replace(m.group(2), "$${%s}" % k) m = self._INTERP_REGEX.search(string) i += 1 if i > self._MAX_INTERP: self.send_error( 500, "Too many interpolations performed for exec string.") return None return string.replace("$$", "$") def handle_test(self, test, req): cmdline = self.interpolate(test['exec'], req) if cmdline: args = shlex.split(cmdline) proc = subprocess.Popen(args, stdout=subprocess.PIPE) resp = json.loads(proc.stdout.readline().decode('utf-8')) self.respond(resp) def do_POST(self): parts = os.path.split(self.path) if not parts[1]: self.send_error(405) return test = self.find_test(parts[1]) if test: req = self.parse_input() if req: self.handle_test(test, req) if __name__ == "__main__": server_addr = ('localhost', 8000) server = TestWebServer(server_addr, TestWebService) try: server.serve_forever() except KeyboardInterrupt: sys.exit(0) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/misc/wifistats_iterate.c����������������������������������������������������������������0000664�0000000�0000000�00000023711�14670056262�0017470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wifistats_iterate: Reliable, fast monitoring of some wifi stats * Author: Dave Taht * Date: 13 Sept 2016 * Copyright (C) 2016 Michael David Taht * Copyright (C) 2016 Toke Høiland-Jørgensen * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> #include <errno.h> #include <locale.h> #include <assert.h> #include <getopt.h> #include <iconv.h> #include <fcntl.h> #include <math.h> #include <sys/types.h> #include <dirent.h> #include <sys/wait.h> #include <sys/timerfd.h> #include <sys/uio.h> /* openwrt's ash shell does not have usleep, nor nanosecond time in the date command. find is expensive for i in \$(seq $count); do date '+Time: %s.%N'; dir=\$(find /sys/kernel/debug/ieee80211 -name netdev:$interface); for s in \$dir/stations/*; do echo Station: \$(basename \$s); [ -f \$s/airtime ] && echo Airtime: && cat \$s/airtime; [ -f \$s/rc_stats_csv ] && echo RC stats: && cat \$s/rc_stats_csv; done; echo "---"; sleep $interval || exit 1; done So this C program (which is more accurate and lighter weight than the shell script) needs to be used on things like lede, when high resolution data is needed. In fact, everywhere. */ #define BUFFERSIZE (1024*1024) #define NSEC_PER_SEC (1000000000.0) typedef struct { int rc_stats; int airtime; char macaddr[6*3]; char airtime_file[256]; char rc_stats_file[256]; } station_stats; struct arg { int count; struct timespec interval; double finterval; char *filename; char *dev; station_stats *stations; char buffer; }; typedef struct arg args; static const struct option long_options[] = { { "count" , required_argument , NULL , 'c' } , { "interval" , required_argument , NULL , 'I' } , { "interface", required_argument , NULL , 'i' } , { "help" , no_argument , NULL , 'h' } , { "buffer" , no_argument , NULL , 'b' } , }; void usage (char *err) { if(err) fprintf(stderr,"%s\n",err); printf("wifistats_iterate [options]\n"); printf( "\t-h --help \n" "\t-b --buffer [buffer up the output locally]\n" "\t-c --count [number of iterations]\n" "\t-I --interval [fractional number of seconds]\n" "\t-i --interface [wifi interface]\n" ); exit(-1); } // The way I originally did this was to open the fd and lseek to the beginning // That doesn't work with rc_stats, so we need to open the file every time. Sigh. // Or I had a bug elsewhere. ? // If a station goes away, it's handled in stations_read int stations_reset(station_stats *stations, int cnt) { for(int i = 0; i < cnt; i++) { if (stations[i].rc_stats) close(stations[i].rc_stats); if (stations[i].airtime) close(stations[i].airtime); stations[i].rc_stats = open(stations[i].rc_stats_file,O_RDONLY); stations[i].airtime = open(stations[i].airtime_file,O_RDONLY); } return 0; } int stations_bsize(station_stats *stations, int pad) { int size = 0; int j = 0; for(int i = 0; stations[i].rc_stats > 0; i++) { if((j = lseek(stations[i].rc_stats,0,SEEK_END)) > 0) size+=j+pad; if((j = lseek(stations[i].airtime, 0,SEEK_END)) > 0) size+=j+pad; } return size; } // NOTE: You must closedir the resulting pointer DIR *dir_exists(char * dir) { DIR* fd; struct dirent* in; if (NULL == (fd = opendir (dir))) { perror("Error : Failed to open stations directory"); return NULL; } return fd; } #define MAXPATHLEN 1024 int wifi_where(char * dev) { char buf[1024]; DIR *fd; for(int i = 0; i < 10; i++) { sprintf(buf,"/sys/kernel/debug/ieee80211/phy%i/netdev:%s/stations",i,dev); if((fd = dir_exists(buf)) != NULL) { closedir(fd); return i; } } return -1; } int count_stations(char * dev) { int cnt = 0; DIR* fd; struct dirent* in; char dir[1024]; sprintf(dir,"/sys/kernel/debug/ieee80211/phy%i/netdev:%s/stations", wifi_where(dev),dev); if ((fd = dir_exists(dir)) == NULL) return -1; while ((in = readdir(fd))) { if (!strcmp (in->d_name, ".")) continue; if (!strcmp (in->d_name, "..")) continue; cnt++; } closedir(fd); return cnt; } int stations_open(char * dev, station_stats *stations, int limit) { int cnt = 0; DIR* fd; int f; struct dirent* in; char dir[MAXPATHLEN]; char airtime[MAXPATHLEN]; char rc_stats[MAXPATHLEN]; stations[cnt].rc_stats = stations[cnt].airtime = -1; limit /= 2; sprintf(dir,"/sys/kernel/debug/ieee80211/phy%i/netdev:%s/stations", wifi_where(dev),dev); if ((fd = dir_exists(dir)) == NULL) return -1; while ((in = readdir(fd))) { if (!strcmp (in->d_name, ".")) continue; if (!strcmp (in->d_name, "..")) continue; sprintf(stations[cnt].macaddr,"%s",in->d_name); sprintf(stations[cnt].rc_stats_file,"%s/%s/%s",dir,in->d_name,"rc_stats_csv"); sprintf(stations[cnt].airtime_file,"%s/%s/%s",dir,in->d_name,"airtime"); if(++cnt > limit) { perror("Error : Too many stations to process\n"); break; } } stations[cnt].rc_stats = stations[cnt].airtime = -1; closedir(fd); return cnt; } int stations_close(station_stats *stations, int cnt) { for (int i = 0; i < cnt ; i++) { close(stations[i].rc_stats); close(stations[i].airtime); } return(0); } int stations_read(station_stats *s, char * buf, int cnt) { int i = 0; int size = 0; while(i < cnt) { int t = 0; size += sprintf(&buf[size],"Station: %s\n",s[i].macaddr); if(s[i].airtime > 0) { size += sprintf(&buf[size],"Airtime:\n"); if((t = read(s[i].airtime, &buf[size],8192)) > 0) size += t; } if(s[i].rc_stats > 0) { size += sprintf(&buf[size],"RC stats:\n"); if((t = read(s[i].rc_stats,&buf[size],8192)) > 0) size += t; } i++; } return size; } static void defaults(args *a) { a->filename = NULL; a->dev = NULL; a->stations = NULL; a->finterval=.2; a->count=10; a->interval.tv_nsec = 0; a->interval.tv_sec = 0; a->buffer = 0; } #define QSTRING "c:I:f:i:hb" int process_options(int argc, char **argv, args *o) { int option_index = 0; int opt = 0; optind = 1; while(1) { opt = getopt_long(argc, argv, QSTRING, long_options, &option_index); if(opt == -1) break; switch (opt) { case 'c': o->count = strtoul(optarg,NULL,10); break; case 'I': o->finterval = strtod(optarg,NULL); break; case 'f': o->filename = optarg; break; case 'i': o->dev = optarg; break; case 'b': o->buffer = 1; break; case '?': case 'h': usage(NULL); break; default: usage(NULL); } } o->interval.tv_sec = floor(o->finterval); o->interval.tv_nsec = (long long) ((o->finterval - o->interval.tv_sec) * NSEC_PER_SEC); return 0; } static int result(int out, int size, int bufsize, char *buffer) { struct timespec cur_time; struct iovec iov[3]; int err = 0; char mtime[40]; int added = 0; clock_gettime(CLOCK_REALTIME, &cur_time); added = sprintf(mtime,"Time: %ld.%09ld\n", cur_time.tv_sec,cur_time.tv_nsec); iov[0].iov_base = mtime; iov[0].iov_len = added; iov[1].iov_base = buffer; iov[1].iov_len = size; iov[2].iov_base = "---\n"; iov[2].iov_len = sizeof("---\n")-1; if(bufsize - size > 40) { if(( err = writev(out,iov,3) == -1)) { perror("Write failed - out of disk?"); } } else { write(2,"Buffer Overrun\n",sizeof("Buffer Overrun\n")); } return err; } // Since this is linux only we can use timerfd for an isochronous clock #define STABUF 8192 // hopefully big enough? (802.11ac?) int run(args *a) { char tmpfile[] = "/tmp/wifistats_iterateXXXXXX"; int out = a->buffer ? mkstemp(tmpfile) : STDOUT_FILENO; station_stats *stations = NULL; char *buf; int c; if(a->buffer && !out) { perror("Unable to create tmpfile"); exit(-1); } else { unlink(tmpfile); // make it disappear on close } // if (!a->filename) // usage("Must specify filename"); if (!a->dev) usage("Must specify wifi device"); if((c = count_stations(a->dev)) > 0) { if((a->stations = malloc(2*c*sizeof(station_stats))) == NULL) { perror("Unable to allocate memory"); exit(-1); } if((buf = malloc(2*c*STABUF)) == NULL) { perror("Unable to allocate memory"); exit(-1); } } else { usage("No stations found"); } if((c = stations_open(a->dev,a->stations,512)) < 1) usage("No stations found"); struct itimerspec new_value = {0}; int timer = timerfd_create(CLOCK_REALTIME, 0); new_value.it_interval = a->interval; new_value.it_value = a->interval; /* better method would be to poll for input (since writes from the tool could block or return no output for some reason), timestamp the input, and if the difference is less than half, skip this round. this would absorb non-completing stuff */ char buffer[BUFFERSIZE]; int size = 0; int ctr = 0; stations = a->stations; timerfd_settime(timer,0,&new_value,NULL); // relative timer do { int err; long long fired; if(read(timer,&fired,sizeof(fired))!=8) perror("reading timer"); ctr+=fired; stations_reset(stations,c); if((size = stations_read(stations,buffer,c)) > 0) { err = result(out,size,BUFFERSIZE,buffer); } else { err = result(out,0,BUFFERSIZE,buffer); perror("reading file"); } if(err<0) break; } while (ctr < a->count); if(a->buffer) { lseek(out, 0, SEEK_SET); while((size = read(out, buffer, sizeof(buffer))) > 0) write(STDOUT_FILENO,buffer,size); } close(out); close(timer); stations_close(stations,c); free(buf); free(stations); a->stations = NULL; return 0; } int main(int argc,char **argv) { args a; int status = 0; defaults(&a); process_options(argc, argv, &a); run(&a); return status; } �������������������������������������������������������flent-2.2.0/mkrelease.sh����������������������������������������������������������������������������0000775�0000000�0000000�00000004167�14670056262�0015152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash VERSION="$1" die() { echo "$@" >&2 exit 1 } [ -n "$VERSION" ] || die "Usage: $0 <version>." make test || die "Test failed" echo ==== Updating source code version numbers to ${VERSION}... ==== sed -i s/VERSION\ =\ \"[0-9\\.]\\+\\\(+git\\\)\\?\"/VERSION\ =\ \"${VERSION}\"/ flent/build_info.py || die error sed -i -e "s/version = '[0-9\\.]\\+\\(+git\\)\\?'/version = '${VERSION}'/" doc/conf.py || die error make man || die error if [[ ! "$VERSION" =~ git$ ]]; then echo ==== Updating CHANGES.md... ==== sed -i -e "1 s/Changes since latest release/Flent v${VERSION}/" \ -e "2 iReleased on $(date +%Y-%m-%d)." CHANGES.md echo ==== Updating Arch PKGBUILD version... ==== sed -i -e "s/pkgver=.*/pkgver=${VERSION}/" packaging/archlinux/PKGBUILD || die error echo ==== Updating RPM spec file... ==== sed -i -e "s/\(Version:\s*\)[0-9\.]*/\1${VERSION}/" packaging/rpm/flent.spec || die error sed -i -e "s/%changelog/%changelog\n* $(date '+%a %b %e %Y') $(git config --get user.name) <$(git config --get user.email)> ${VERSION}-1\n- Upstream release ${VERSION}\n/" packaging/rpm/flent.spec || die error echo ==== Creating and signing release tarball... ==== python setup.py sdist bdist_wheel || die error gpg --detach-sign --armor dist/flent-${VERSION}.tar.gz || die error gpg --detach-sign --armor dist/flent-${VERSION}-py2.py3-none-any.whl || die error echo ==== Updating Arch PKGBUILD sha256sum... ==== SHA=$(sha256sum dist/flent-${VERSION}.tar.gz | awk '{print $1}') sed -i -e "s/sha256sums=('[a-z0-9]\+'/sha256sums=('${SHA}'/" packaging/archlinux/PKGBUILD || die error else echo ==== Updating CHANGES.md... ==== sed -i -e "1 i# Changes since latest release #\n\nChanges since v${VERSION%+git} include:\n" CHANGES.md fi echo ==== Staging changed files ==== git add flent/build_info.py man/flent.1 doc/conf.py \ packaging/archlinux/PKGBUILD packaging/rpm/flent.spec \ CHANGES.md || die error echo ==== Done. Review changes and commit \(and tag\). ==== [[ ! "$VERSION" =~ git$ ]] && echo ==== Upload with \`twine upload dist/flent-${VERSION}*\`. ==== ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/packaging/������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0014557�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/packaging/archlinux/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0016554�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/packaging/archlinux/PKGBUILD������������������������������������������������������������0000664�0000000�0000000�00000001424�14670056262�0017701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Maintainer: Toke Høiland-Jørgensen <toke at toke dot dk> pkgname=flent pkgver=2.2.0 pkgrel=1 pkgdesc='The FLExible Network Tester.' arch=('any') url='https://flent.org' license=('GPL') depends=('python' 'netperf' 'python-setuptools') conflicts=('netperf-wrapper') replaces=('netperf-wrapper') optdepends=( 'python-matplotlib: for outputting graphs' 'python-qtpy: for the GUI' ) source=(https://files.pythonhosted.org/packages/source/f/flent/flent-${pkgver}.tar.gz{,.asc}) sha256sums=('04fc21de858863560423e79c822f405225f829afd8e5d62293099fbef341f9e8' 'SKIP') validpgpkeys=('DE6162B5616BA9C9CAAC03074A55C497F744F705') package() { cd "${srcdir}/${pkgname}-${pkgver}" python setup.py install --single-version-externally-managed --root="$pkgdir" --optimize=1 } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/packaging/docker/�����������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0016026�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/packaging/docker/Dockerfile�������������������������������������������������������������0000664�0000000�0000000�00000000531�14670056262�0020017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������FROM python:slim ENV DEBIAN_FRONTEND=noninteractive RUN sed -i -e's/ main/ main contrib non-free/g' /etc/apt/sources.list.d/debian.sources \ && apt update \ && apt-get install -y netperf iputils-ping irtt \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN pip install --no-cache-dir matplotlib flent ENTRYPOINT ["flent"]�����������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/packaging/rpm/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0015355�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/packaging/rpm/flent.spec����������������������������������������������������������������0000664�0000000�0000000�00000007354�14670056262�0017352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%global srcname flent Name: flent Version: 2.2.0 Release: 1%{?dist} Summary: FLExible Network Tester for bufferbloat testing and more License: GPLv3+ URL: https://flent.org/ Source0: %{pypi_source} BuildArch: noarch BuildRequires: python3-devel python3-sphinx desktop-file-utils libappstream-glib python3-setuptools make Recommends: python3-matplotlib python3-matplotlib-qt5 python3-pyside2 python3-QtPy %description The FLExible Network Tester is a Python wrapper to run multiple simultaneous netperf/iperf/ping instances and aggregate the results. Tests are specified as config files (which are really Python), and various parsers for tool output are supplied. At the moment, parsers for netperf in -D mode, iperf in csv mode and ping/ping6 in -D mode are supplied, as well as a generic parser for commands that just outputs a single number. Several commands can be run in parallel and, provided they output timestamped values, (which netperf ping and iperf do, the latter with a small patch, available in the misc/ directory), the test data points can be aligned with each other in time, interpolating differences between the actual measurement points. This makes it possible to graph (e.g.) ping times before, during and after a link is loaded. %package doc Summary: Documentation for Flent: The FLExible Network Tester BuildArch: noarch %description doc Documentation for users of The FLExible Network Tester The FLExible Network Tester is a Python wrapper to run multiple simultaneous netperf/iperf/ping instances and aggregate the results. Tests are specified as config files (which are really Python), and various parsers for tool output are supplied. At the moment, parsers for netperf in -D mode, iperf in csv mode and ping/ping6 in -D mode are supplied, as well as a generic parser for commands that just outputs a single number. Several commands can be run in parallel and, provided they output timestamped values, (which netperf ping and iperf do, the latter with a small patch, available in the misc/ directory), the test data points can be aligned with each other in time, interpolating differences between the actual measurement points. This makes it possible to graph (e.g.) ping times before, during and after a link is loaded. %prep %autosetup -n %{srcname}-%{version} %build %py3_build %make_build -C doc/ html PYTHON=%{__python3} SPHINXBUILD=sphinx-build-3 rm -f doc/_build/html/index.html doc/_build/html/.buildinfo %install %py3_install %check %make_build test PYTHON=%{__python3} desktop-file-validate %{buildroot}/%{_datadir}/applications/flent.desktop appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/*.appdata.xml %files %{python3_sitelib}/flent %{python3_sitelib}/%{srcname}-*.egg-info/ %{_bindir}/flent %{_bindir}/flent-gui %{_datadir}/applications/flent.desktop %{_datadir}/mime/packages/flent-mime.xml %{_metainfodir}/flent.appdata.xml %{_mandir}/man1/flent.1.gz %doc README.rst CHANGES.md BUGS batchfile.example flentrc.example flent-paper.batch misc/ %license LICENSE %files doc %doc doc/_build/html %changelog * Tue Sep 10 2024 Toke Høiland-Jørgensen <toke@toke.dk> 2.2.0-1 - Upstream release 2.2.0 * Wed Nov 2 2022 Toke Høiland-Jørgensen <toke@toke.dk> 2.1.1-1 - Upstream release 2.1.1 * Wed Nov 2 2022 Toke Høiland-Jørgensen <toke@toke.dk> 2.1.0-1 - Upstream release 2.1.0 * Thu Jun 24 2021 Toke Høiland-Jørgensen <toke@toke.dk> 2.0.1-1 - Upstream release 2.0.1 * Thu Jan 14 2021 Toke Høiland-Jørgensen <toke@toke.dk> 2.0.0-1 - Upstream release 2.0.0 * Tue Jul 9 2019 Toke Høiland-Jørgensen <toke@toke.dk> 1.3.0-1 - Upstream release 1.3.0 * Mon Jul 8 2019 Toke Høiland-Jørgensen <toke@redhat.com> 1.2.2-1 - Initial release ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/run-flent�������������������������������������������������������������������������������0000775�0000000�0000000�00000002047�14670056262�0014476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python3 # -*- mode: python; coding: utf-8 -*- # # run-flent # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: October 8th, 2012 # Copyright (c) 2012-2015, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. import os import sys from multiprocessing import freeze_support sys.path.insert(1, os.path.dirname(__file__)) from flent import run_flent if __name__ == "__main__": freeze_support() sys.exit(run_flent()) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/sample_plots/���������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0015335�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/sample_plots/1000_fq_codel+offload.png��������������������������������������������������0000664�0000000�0000000�00000267637�14670056262�0021712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����)���kÅ���sBIT|d��� pHYs��a��a?i�� �IDATxwTT H(*hb@R(bQM4&XrběkM ` 5 bņf\(:<\+٧s8̼߽$ """"""#uH7)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDDDz!S LVsd2DEE=c@&!55 ɰrJo L .<ӱuej=O=Btt4abbLM6ZMu}޹QFP#V]MD՜oT#d*+BCll,|}}�ccc888 �sU* >>>3gyJIQgŵyOUmzTejRz*U_ppr[\xfffD-0j(ٳGX[)7n(8qگAM&/ gggL4 111h޼\U׻*ٵk&NPC&cǎnwq 0�NNN033CSw-[ ((֨UڷoUVi]GV`nn{{{{=<+&XIϏ+@h ,@aa!ƍ�<y2EEEpwwGxx8PXXLL6 gٳgQvm}DFFB\x :u*CWZW~_cƌo ]W噄CSNB3N< kk^ ^sMиqcd"((AAA*\]]�W^E~gXYYshҤ 8s ֯_o/Ƈ~OOO�PXXd\6lݻѮ]?i jJ�_mٲj®] =W_aӦM033+ۇ_~pqqARRfΜ$$%%Xe%K`رppp@DD?#22GżyTB`РAظq#7o>yyyX~=qF[~=Ŝ9s0eԫWOY|o�@=g 62L?^ahh(ʕ+5sqѹsg} IDjjʺN:B$7Ν$(]WE'^6LH^YXBH$t]g,<::ZH$f̘qݻwo!$IjܹsG̘1C̞=[YH!Ir}(d2Y4kԨhԨT׽հa*]{Ǐ \.rrr$IcǎZ2Ll޼YY.E~$Ibܹ*ۜ;wNwH~~pss${lvZ!I<Pgff $n߾]*Y(>###fT1tJ.cԨQ())… q=رC-mԩ}�233+\t+W ]6Fk׮m)=+%%2 3fCгgOAAAZSIrss''' VR_eݾ}&L3C.k\43mi~ cXYOLKKSN#Gnݺ055k8uxbbbиqce:y$;;;XZZcǎصkW�~7tGXXN<xr)ΝŋG֭[2e <<<`nntIc}֯_P 5~�OÇ�DEE5*h@RRu;;;Yf2e U_%%%={6ajj `x6+ Mŋ+Xϟ#Gk֬kaa_8qb�ܻ �6mڄPR~}aҥ�wA5xlDFF&&&Sy>}Z^OɓGGGF˗/>Bn`cc[[[ŋ�y8r]O>͚5%lmmѼysDEEܹsUxfsrr]&[d Zl 3338;;㣏>Baaa۹s'|M899)>} ))Ie=\omڴAZ`iimoOV~EDDʕ+gǎѣ`jj 777L4 t�о}{xxx@J=8y$ЫW/e$I/��|6?>|1cƠAr|Q<{fRimq ǫlx_ÇN:�wĉѠAe˖j)M[CqYu!T|ʕ+v!\ҩT>}1bDJTE�TTcΝ4hztX)))طoIVV bȑ8<6n܈P:tM6U{ut.\@`` |}}>�;w9<x�ʂ'|"%%EvrIC�ݺuZ:&󃉉  `Æ >|8d2Bc۶mhڴ)>#<|qqq믿*UVZaѸr ֯_ݻcڵ0`@Dݺuܯ6#==zB^```��8<pyGslقnݺaٲexwUWTTVZGGGx"RRRмysx{{#** HLLD>}GEi˖-ѣQV-NNNHNN͛7׸~ѣuV|~:~uLtGaa!#33~=m�ӧWn44mnZ|9}ԭ[{_Ç#..G-#&&F"Uq۷o߾())o 777e ֭[L,[ !!!1/|wؼy34?AAA9r$9_~G/�lABB:wlXXX��ݻ???dggK.ݻ7Mп2xIXX5j ��Ə�*]!>c,^èQ`hhD۷=S?::U\|{5k\wСXn4h{$!!!|222zj}ϟ?'N- l߾~~~Z 3f3`oo R>ضm݋Zj=Vݻ�ݺuS[֨Q#ٳVmӽ{w�ORgXXXhؽ{wHNNFdd2矕<Oڵ+~w5 EEEݻ7>|uaسgE߾}bƍHNNƞ={Tk�`b…*�Ts#k$}Q^̙3$IbСUޯ"e4%%Eʕ+IH$V^]~ic&&&СC*Ə/$I#FP;vd!ITe˖ I|R>|p!I<yJÇIle}gB$ѯ_?s ;;;)liKKiذ$ItYܻwOm;,ʫ6Ǐ CCCѢE WZ%$IѣGѼy*)Rc$I&MRY%(***o߾-성ؿ~J{]["Y900P׫OOOaff&],WcڵS9!())[i999XX[[SNIȑ#A$#wnnn@\zUelrڷoʲ2z!I066VI m)r\DDDIDN*O֭qڲ<(֭[F8::'N,믿hݺJ˗ÇՎsNa`` FR^vZe#F$ kkk[!$ *6m$$I&LP;GkSw!IpwwWߋE$IOjc!IhҤrK.)[-޽,{Q;wN {{{H.p{ݻw I(,,TY'$IǏW)jhihy)Є{)$I۷oW988L&nݺq !OIDV4)$I۷W)WeQy[*t!I SF~$IlݺUe… $I"44T\{R]IHSFIrss<xi!&&1bZh7n]v4hP3tP*e111ºuJ_-u000PIShcciӦߪU+ڬXWWW;J$I/affV,,,GJɓw\2k,akkJhbcc_*exwPPP_~u*JUM4 6T);|0jimm1oƍŋC$,[LWyLVqZz5=z1cƨgW|*(xw ˕ Zv$IR;w|,Ż޾ҭe<x111Ѻuk077g}V}ȟr}=VBaa!f̘6Zf˖-*֫WFFFjܹ3Zh;vhCǎo 6 k=ydeÇejjVfhhKKK~VX�:unbb9s<Ӿ/^ uU[^~}+ZΝ ssse9>s�w},_f ?~>H%mR$̛7OckE��~{oذax7f͚*PjkTTyzOs  j ܾ} .TyaÆ}� E=TƌƍcN1!^p >ܘ2J5^|wKKK(&LPUF``Z<=='NvW:u h۶24???ܾ}74h s{x׫/k...B ??_000~~~U4֭[kցXr%:Tn ~eWm۶je*) 7n��wرcSNѧ8e666Bzz:N<:+IgB#Pgx2̼ym6dggH�@cÇ_挌P^=DDD`ɕ`Ȑ!8q"ZhA! �~~~ptt|h{nۡC4o>'N|ՈÇQPP2mE|(N/], B1w\8p�ݻw?<==+=F\\rrrTʂ]yHq~~~4-L1QS= F�d2:tHe}@{QFpqqQTػw/aÇq ֶ:냦M}d2Ԯ]WIV_ƚ^2 ơCT|0 $a_U)))x溔BAѲi MN`hhIKj+פ}=kPYNNNO]yQ=UVUMeS\BxY6yyy�åm�Ip]�5t+AuS։嚮SMi999h׮"##aggCCCc…x3Ke(MyyyxST#YǏk,Z ,P̓wUo~mKo-\CQ~}e+NhjYQ -+=�QZ ::6mRF:88>i*orJL&{Z?(((mCŻS5P͛7U6 CIIII;wlk^YҟCָu 5ֳll244,wǏ5.{3Nx2\.ʚFCT<FU)$k;rMuR\oM^Sʋ‹ nX\lWٿ^h,Zcƌp/ϳLQ\V"E<'}rrrڻw^,\]UhР.\4 O/СC1tPbϞ=_?k׮8yd mϭovkXh^u�T+3(?ݻw㫯̙3!1sr/=PHuQ\ǫWej<~7o|磸Xclzܺu %%%jY2z{Mӳ齦ئt`kVSNi\~HެY3ٳNBUŽ{⢼M4L&Cvv{�PK^wz!T`` 5k/*_h#KYu4gaa!:¡:yxxG;wԖgddTz_jՂ.]lFBYYY>кukW[VkSځ4^kht5ELyJu:t�JZXX^իWURQ|):WEIM^PPP-ωbpe[s^#Gxҏ6cѽ{w,_u>MoBK.jwԢE 3FٚB !{5##C?ѡCrl߾uNMHKK\.W]{-;;[uPQ[nU8Kήegg̙3hذJU6U <IݻwETURR HT|Ы!b CCC;V/ǎCNk ȏ?e:&&EEEx5,0h `֬Y*>\ SKs�ʺlXRR֭[WW7E_iӦ"66YPPr5kaaan߻wobڵj(퍎;"!!A%GU%tE1tyir\W~{{{�O!C/l}rV<(?~<x #""Bc ֝;w~|mX=U*DEE3f_I.|TU;w{_0?uDqHERL3g-..Ɣ)Si}�`ĉ,]gtʔ)޽{A{JO;(\.??2(xݽ{9>@xxx -- 7oV+>Wٷj�� �IDAT&** &&&Xdʹcِ$ImѣGxT:=33ׯݻuV%K ;;pqq)w{EӼ3ÔQz!: � ԨXŸ KKAߣGaS222 ̄QF;wnΩΝݻw/}СCFϞ=믿V:vĉ_qFn]tAAA~g`ӦMjDEEa޼y3g> >}Z9'YQ,_Oؾ};^{5xЦM>})o>圏ׯdF'1p@tT+ǎC@@@fڵ #h"m666t9cǎ?P0"==?#[oW\Arr2FL9,X<e_cj)aÆX`>Cn RSSC9aiUyN"""0o<7pssÙ3guV㧟~e|&fffؾ};5k`ܹ37n !Ξ=$ܹsK,㇅VZh߾=6l!ӑtInN}{033+ Rq0ohѢ$Iŋw^+]6 ~ ܹ3 k.ӳR-OkΝ?___ .]Bbb" <裏xbkaoometӦMìY>}׮]CFF:tFbb"6l؀-[wސ$ +rrr0h ^6lsbĉaee;vZ‘#GTsbʔ)pwwG=;wHKKCǎm۶>猌 eZ"[$d2VX ~+YWWW̛7cǎUN,oddx\|| BBB^z!//ׯ~mto",, aaahҤ :۷_uD푞!CݻS G5 yKW+E}\\AAAB&wWU\S$6OZcgKۼ`|6lpttfffKZJǫͿU"1aQ~}ajj*<<<ucǎ=zZj KKK,D\\djsi; x_QFD4jHL6M\|YLڔ ɓwVXXXsNmBڵK sssagg'#N:<CK}={L4nXK|*s)YF kkkajj*7n, "<EB<gK.VwwwSm.2!4?' ڮ[o%9*sQgEs}r?} gggajj*ͅx޽{έ:oDXXhܸ^kݺ7osʺ%%%O?7FFFj[EϭO%3fpwwZxxx{ԩS055 4cƌyyyU~?j{Fʞˉ'Ą pttTx*K,Dԯ__3F><| ۶mݺuvvvD4h@W$'''_-|||Y믵{ݺuʹ/СCEnnnqFF0`W066NNNKL8Qm܃)#LO܈ ǏD4kLĈbڼy T~mVZJ?033vvvgϞZ>ʻ.}w-[DgΜQۏٳgśo)VjD$bbb0sjL:s;t6j׮]ڵ+LR܈tU9 ˄}K{.ѭ[7A&qWډ'Э[7ԪU :iӦZS 0rH8::!!!8x`49z(-Z{{jC&7%//'O$I#""W˱cп4ioF8L&//'!,ƍEÆ 鉔#^t Ŝ9spmѣG l2='|4;äIrGI9AAAؿ?^5hٲ%,,,}'븆3~x9r:t#.]￯qk"""zu]pwAdd$ի{!>>CENNNZ>bccզ:R^=\zNNNؿ?ڴiqٳg8x �m۶EΝ{�p}L:z† �<K.#66#GT{*�iӦ~!:+I^ȼzڼ_O?۰E'T)ׯc˖-(((Zl#F(G#" J:tk~"qwݻ}+v]e}>Zdeem۶SPvmx׼ys(Bڶmzm۶[n;I𗑑>cϯi[r%*\O$GTIo&N8V8 >hڴ)͕s23!˗/ƍSڴiOemݺ5d2ʰKE6mp=>}Nthذac0Hݽ{pMߘ?>vء<z]n2ZEA.4'Tn]ܺu =rssa``�aoo  <ҲeKe7oĎ; 33g=5""""">rrrеkW &L�XhFY~-,,`XYY!++ (Ut}�2SSS:FFFALLL Y֎;*50@���pDFDDz`Ue? +Wf3fff6lW[o]" �}.]ZP0 "EK܃ԖcffjOqqJYYbtիWã*ASƍ t] *y^mX9V�̏""ڵ߬Y߹TӜ8qC Q f͚# ]bܸq0`@2Ю];o\a)R85͏ {{{/uEII n޼Cܺu Sٯ)Ã#%Qbcc{jvWor9�ys˫Gz\u+#<<v©SY8;;xTׯGGGdff-?Un@ /nVVrʺ8p�o>XXXiӦyDD8VLOA*MѽJ&zx GGR)c˖-t钲,)) gΜQK Z>ҥKaaa={*k׮!!!AYvMx79ѫJ._0 $"*Ǎ7=zUV^9cnn.N<Ǐmp) SFXd 雛6m… ��cǎ>S۷oc޼yhժʼBŇ~K.HOOǚ5k0{l}aooB̘1^""zq`@HDTI#G۷zիXf N>+V(2e VZ4h��֭[8p�~4h�~.OK_�L/ !!$!""VVVpvvFjj*&Lɓ'z—_~֒7zh/ĦMРA,X�cǎUYO&a۶m?Eh۶-VZwwvD/o*Usosw.J K.E^^Ю];,Y$ITnݺ;wĽ{P^=5 z2*֨8p�~v'""" -> xzmۖ)ѫq_,!$""%!$""b(.iKVQQ޽ju5H DDDT6 ,]N/cǎ!-- ׮]uUjڵk# @9 (<!;x!00O5(,,� _2 t}k4aj#Qׯ]iii _2iH8K׮]A$I<==q5:T B"""]b@S cmml666�{&TB"""]b}4/وt}HSFH''d2u] dpႮB/9DDDTarL&ҿ+W*Cll,|}}�ccc888 �sU?+++`Μ9(..~ѧ_qڗN<DDD>TCDGGB,X�7nrI///�-[0dprrBaa!2331m4̞=gϞEڵU WWW!pE$$$`ԩHLLDFF U<*O.qQ!VX"7 4P[0#..j8q1<x,225kbڵGDUÔQ"""]25jJJJpBv؁zU:uo߾� /]JJ d2f̘RHW}!MFnnn9s&=zTq 1e4k fffCnݐGd 6)ѹsgl߾]1~7tGXXN<Y:HBHT>}1bDJTO\ܦ2*ZO#++ ~W ++ 6mÉ'жm[ƍذat邥Kbȑ0n8k׮pttĕ+Wyf~uajjnݺHOO/ZjUCĀH؇^Q�=&e"!!�Ю]Ge:u Ǐ5'زe V^!C?O8qFҥKU}||0vXt 6�… j-EEEäI;�p5 HOOG֭L0 ,2T) t){�]d5o㖕 �pvv~}!99B\t (,,Dv0hРꪪFӧOW�`bb9s 88?CÇzjԪU sQY憱cb֬YXjO�066֘6kee(|'Dǎ�ǰaTA�?۷o?`@HDDK _Y'O/eQJ'L�z@2???d2:tmO:_mU� Ys1̛7iiizW\Q HKK+D�B"""ևj͟g8@uҥGJJ(/$IjS`�!pr/,,�ԭ[W:u�xP?@HHr9BCCѧOXYYA&HLLTUq M,} 0 $""ҥ}BX㙛:-uOer9d?☏?V[V:+Kk׮>~7oބUU^zUrE:mYfXc<g$&&j<Ƶk4C۱DDDĔQzEYfx"VXQBA۳�NdeemJJZYFFr9ݶy033Ç-y%''J߿g^chjjZ#kgaa!:AeRBzEIe˖cǎŚ5k4w1t /_:(F"oUʏ= mllJ+bqq1L�*w[### 2EEEAco,Z:tQFѣGUsNcXv-MAQQQu$R`(.qBʛ! � :t(XŸ KKK?Q{ www[.]B۶mqlڴ {Ɔ nۢE l!^zU8�̝;Xd 2337obÆ {.,Yr�ƍ;v  ̄_~Wٿ/_cǎ8p ԩ ;v T*-DDDy$´^z̙3aoo7/u```Xptt~+III0`�/|Wu0zrkÆ >|86oތ �0c lܸRǶ޽{1i$aظq#ڷo۷WYk׮ؼy3ZhcŊ033CJJ zzcƆ |r888?@F2J"t!"cGQ#`ժ'*P.i曺x2�Ȳe0j(Fҫ#((())uU^9}b !.!B"""]bBH0 $""%m}H'"QMQFt)D/D-DDDT6 ,]NDD1 $""%!$""b@HDDKt!.!B"""]b@HDD:ĀH؇t!.!B"""]Җ2JDD0 $""%!$""b@HDDKe.'&%%2 3fuU,..2 +WuUTd2TE t}dUW:XCll,|}}�ccc888 �sU?+++`Μ9(..jpXNT>C]WH1ejh/B,X�7nlllT�lٲC AQQ'''"33ӦMٳqYԮ][epuu/^DBBNDdddА_e""""]b@H5DttZي+PTTqơAjSSSccc!""Bm'N?ƃԖEFF" @f͂O]Vj2JDDK^QrFBII .\5x;P^ YN�Yz\v #F@ڵann///ZmΜ9ԯ_&&&_> gϪl2d2|w*+VL&>|]v033S999dBNN M6غukSaVXSSS?իW=}4&O 8::*5j._q>Dll,4iSSS4nӧOSB"""]bBzEpvvƈ#]WJr6y&|}}q9tr }tY6ԩܹ޽{E8qV^Do�t �w}W$�@qq1݋@�@aa!ߏ@h׮4iaÆ!//ׯG޽o!((ݲe !I뇆 "++ K.Uٺ*OHHe㯿w}͛7#++K%PB`شiGpȑ G/'DDDĔQzEedd�x2@4"<HHH�𤥭"~)Ν;/T3:txܹsWo\a 4C!I4i޽[e?wFHHRRR SRR v씔̘1ӧOW <ݺuüy* ܹaÆA.#%%~~~e_|&OQFaǎL%�� �IDAT8FFF*ڵkwYf믿V[6mB ccc�3ЦMrG//DDDĀu=yCs㖕 �pvv~}!99B\t (,,Dv0hРr}֬Y+++Ĩ,;C6mÞ={p)�0`�,Y@ǎ�ѣGz*QTT$̜9ZCCCiӦu...JMLLD~~> ĉtRڵ /^ �hMܹ3Zh<ORa``�lmm1}tDEEUXOz0 $""%m};y${~}JlQJ'L�r=y$߿6mڠVZj�<�FFF: CBB$Pdggc{.,,,{nԪU m۶U۷ƖT۷s?C)B�Xz5paDlZ```�cT&^N tlBxc:9@tҥGJJ(UQXX�jSY(ԩSG6uո@Yh۽{7ƍ$ 7oRSSѺuk?~={L>ci; &4u?~<.\z{_>�<i p15ڮ3SF_YFLKP"B.k 'kkk�OFDӨm4-Xxh5miiix!RRR�ʁZvڥ Ĵ>>Xh^uٳ*YF1nݺPqi't!ѬY3\xQL!?~\:")))je[? 5SQXOSN(**_Be9ڷo$T硼?~$I^vv6ҥZ0x%dgg%%%HOOW[zRH8!$I²e`hhcjlqcǎSNZ{Z2dX???4k ظqʲxdddYfj}~s΅$I*A_HH/l޼hժU5>}֭Ss`SNA~5j�HOOWIIs{= AcN2[0k֬j?'z12JDDKjSC{t?~{O:hiFD2STrx<OT<==u2OEE2\PYeHhYB{#M#$4NWZzɧ$}}ǢE9r$єo>RSS " '+O[۷믿\K&Nƍ-Yr%7tӦMcʔ)уcǎ~zBBB.=z4 <ze֟8vX^x;9l2NFɝwIbb"$..%Ka|׏nR~Gׯf1c 6nW_ɓh4]AY* 'B!55,NP818i$N8K/Ddd$k׮_gըT*-Zĉ'vΈdǎ̙3GooSOY=gРAݻロ]vo{nku^xx8GPX<@9گ_ɓ'c&LϛoɱcxGٿRzKRUU{Ǐ?hFhhXf /":w}s_ Ϡ;HkeB!ڈ8xQxˏ)íw_$77%Kۜ(p?KeIP!hM {1kB� Bdm,BB$ B!ZB !h! !I!hE !IzB" BdPB!-@B!5IBV$Bњ$ Bъ$ B!Z !hE !IzhG<}9־!JB!5*{R.r8c/V\DմН ! !hjjx7]ڷҴl?ХC%(l5٥fGvgkwhuZcss`,ٿV[!D{%BYwdWw8cVPm[kzb{[ڦ2c s?Ux3gzaj:sl>8^'~ ?o7]gwɗB&!BWǘUcTzD ^u _6'gbᶅl9ou6{u�H_d/mַ|#[]WǂPsx|w;fI x}1gΆ9 X2f =eideX;RpD|P( N̍odwnΔ1UũSfp?Wr5ɤk=E^ˑ7xZVD#I@(c5rzι;)*ߒ~ Y:YgN;]5R\Uڷ<%S]W$/ˏq߳>㊫y`fXc-O[ΛHY8r!|XALP ĿϽeҡ h [NmQ+FqX+J;q=z_dV[ˉiv!$&z4Z :OHrX2"b\qvT&{JK[rB-ZİaÈLJ(FJ^yFwԨQ aTW7͟ӧOT*3gP((n7nd<ZΘ7o<3}+ZB/OсX9WܺNYM=n͞u=[I I{dwX?g=-N[{?R5TF'7b6ĝlK:JkJ9gv9Z%>8uG׈V]-嚘kxbNŊ˼~{=z�NOLרDQMLP 3dfߙJ>X?m=O@]Ucr[fnWt/ז*M_m"^J/EvlY/gwnw,BBzO~": |n6O>[IKnd…fy뭷(--e߿�k^֭SNCw^{9^y?NLL5fϞMrr2zgϲn:a~WQ4o˖LxHIIᮻjsߟ0`־%& BXPqؠX=wßLTa遥TU1yV frf=0w܍sc<Sb`4 bHfPM7<VݶI# C#9,oV\$qXɆc3 3ѭķO0k,~3*M�Xܥ=oN; }}3=[˞=�3a|�:v0{<.8+Wcb2k 7+Gm6^jm5Ky#Vbh":ۏ !&0kED26e,?_/_xc GO9Y|.]ܾwg-\˗SVVԩ۷onLJ+V0sLc9“O>IMMsgfĈ/ӿRSSϬ^L|c1[\tǎddds5k{>?lnQ!hBu!ohz>Oܛqmu,޳Kp4K'/sW8[v֭ձ8u1ӯNǐ.1#gj\hX^/2l0~4i˩TuF?̗4]K-cIdfslz %qB 0m8yqV.ql>ɣINt_]WG }+0{nS& qAq*qVh^ Y[ 㑯qkr,+WXLL500G&DT:-v I MNWǘ1Vѕft:?0Z~f֫W/{>__ll,~;�{: /T*پ};}&88^|E:w ʕ+n۶ Rɋ/Hjj*'N$""Rə3>Ok=+V0]oaذaw{}K.`n`;w.�8p'Npp0SL!;;z'O䡇k׮5\ã>JQQٱ 4?xE˓P!o/ooh4^ӛfϋ <S|Њm107vc'yd#x�s!'ĐDrrzN!O8 (-g0w\}<{`zכO}57b~67&?yux+{lu(JҋOԥ{Fϙ3v79wx"#i8 -["Onw'KL` ӗ;u5P.e˩-.9mznñ HA~,>i: at!@T@o{vXq%9Wv#GHOYNѤ妱;g7uvBBɌgpp9KScl߾LP(.tsorG&LQx'ׯ/rW]v1bjkky={6>>>foͺuԩgС]!CP͛7UW]e72i$bbbxG޽;+V`ܹÇyٴi&M2.77뮻+VЧO|IfΜIJJ | .XzSQQΝ;ygQ!h,aYu<]߲yq{wݽ0$a/lWyq)T*5ý?pS̮ZjY=oF&d@{=)rWGڲK ߎdeJfo=-O &՝_1!j>=)jmfthPkB 2Ùs +OCԨV^ġ; 67s22婆/~UW7y7engTOzE⾾<m9_|]ݽrSxv,޳+Y8j!5l>n|,~uk&L M6axv˳& ߗeexqSŧlfdxGe{;sxg:vbt"_Àw3[;}[{n5=oM~kXd > w6m믿f„ /^yؼy aܸq_맟~n� v7|37of„ ,]3fXl6mbdCW_}Eqq1o6ͮ_UUeA�_3$ BFGZV[okʫc멭,>ɒ)=ZRIെ<˧,B&>]IMc?JBq,QQZ^BH`(\z6evfW.6LaИJ M0 .v) w~#Fi&c#pBii e!4~صCәY}g1񳉤]Hs;HCpl9t㏃˿K^":0^ǦM; 9 M616>Æ wJ>|w;jL1uGֱ2}%zf`_Oo(^.ۼ:UF׬v_ff٥^.V+ooBZ;psY4_g~͹Xß=! n\2 n_cŊlj(aݺu2x`哶<C 8;ؿAcǚ�?8/f˖-9sje}'O~g̘a c,9s&˖-ֿ0ޗ>E#⊡jx}dg5Yyp%'^ώ;(.h)rr~)=C_8;DlP,~^~|eO2M?FIQU;`po %IaI6_31ĐA9[vn&ꛬouah$*oFt5W)JbcP8 0eavi6;LF^!- y/g/YdCpC'ǬFZBŔS{wk*j+8Ur,CGxWxwﻼ0RϥWgsUU 8}$&v쾳Yfñ \s ))P@]`G0_R`C#FpK[ֿs[̆i k#r+r))'70w N= ^kP"wi]G5/ ؿ+LSJ?RY6Řr91R9y$|C9tD/hX\|SfNNɓ'2o<{ƍ햪FFFXmB+BZns75 xgۯQ|k[yշR\Uaq^'sCBI}0 U.nlP,^J/Ζ,˙_ ["0,flϕwd3csLS[!L.ux)m<^J/6c=fy,ȀH˻{fS&"#0t̜~sygquQ/&4]p|{[ӤҔ0S%.6ʘW�V=oZ(*$rpUEn_2iZk 5|yiMZm۶MuWlkSk4^8+GPnj}h.ҩS'RSSyL幉,XEB!D_s[w7r3nhT@XR]>`ޠyRqu,CXqGyG51׸tnEm>@_R0hnJ">89ջiwk:U2j4B;z qZ"h,Ch7 ԣ1[Bt00F&dñ vŒ (*2;Ԑxo{L_c}*WObU<3rqesˁB`v<0ZJ)�“'z&2QBq]EkW) ,TRTU]n`@@e>d nع}vt:ʆ-_h}ұq8@(CҳgO>sZ-d/O>$̝;x}EG7ϟh=2eTѮ,>ɳ?=`{0 &i�}Zm-O~4)nLkzfMs5Z q;G=#Gߟ#Iw~;:?YqqNaf%&]|@h\лCoVZ !\2R-W[kMAzj+e5e6ϠKD-:wfjKdepk[͞ >wڎ,2*.׹=A̾3Q 1$M 02I2OlY,׏h|>tɢhuZP)US\<_Jkȑуgϲ|zvT6mfV_EZb �� �IDATPXL3Ƹ1VwT* O?իذ9]}GB!Dс 1/2]SzL!BgJϸu3g3bb hcmy_yk[NN;l>smeHKH M!@Q3$aHvlP,JFK-d2yt hs5@Cުz%z B0$ݤW:d4: Oڞrx!tcp>*uڍo1[�Q)Uvk$&2lYV&%<.¦(L}5i|T>tN3g*"9,JSR]buGbkQ(,Y///x >Çs7n>eyN<ѣILLqeIII$$$o߾f8`՘ 2(55/))B[Z-cfߙf]f㱍<>qy"7``\@w *3돮MoЧ8[v>nwX[m yGoN ! =g{y=F J%60͂JK()5+CpݑuNNõ X:!ChcKF:ay?lh}y<tC67 Ƥ!'HgSY͊|5oYl2RMr4: *obc paK~ GR^SN2ĦdmĈ[E1rH)--e߾}d5hnAAA 2_~{wnݺR2e }2Yz+vv]t!==H{=3n8-[Ç۹jwZ?Çӹsg9q6mϏ[c:t+@2Bvk U3BB<b}2JM%gn63kll:M6/~? `!Oo~_/_^r-}n7}cZ-IlؠX4:̭qpEhXUTV::.*'`޷d{&^g*?2f02f6ꩫm>{ۙ{Kdv٦J OY2֨T6Ihϥ aeVgX-P(ٍhJfeEP8쯛4i'Nॗ^"22k믳zjT*-ĉf=h\?'N㥗^b…NqY/^ݻ:u*v{Nzm T]nfϞM^^k֬&==ロ}Y~<uL>__W B!DdOjoהS|JK*3g9Wvl k\@x<ÖCX>e>'&}OdzEICt@4Af>[?6}Hl-!hkW[ړ)嵍-/T\ 2 ycB0L 6LJkq y!l-2%X]?at9{l8AuF)a)dfVg( W7v g2t0.l.a~a(PP\Ul{9:e;k[_DD==Soݺ1epB.\h.]qFύ54EG'NdĉoԁCҷo_>S^|E�p֬Y̚5y?99AbO>Gqy$C(h O<2mַN]}w~g5H kTѣ'4..I8nz xrnO^ c1|<q0sq~Jb?`i2)kti,UnEgVO;8h†%f繩P)Q৓?Y{(>*E6>GT|rJ;wNWgRR@B=Q)Tt^xP_~SNf͚־�j5vSq璀P.}xC"#;>ȀN% -\1Ce1}؁l[2i ~g,^F22xg;L"L=gDer@hkRʉQ)TNM5ers=M8T =~b)ˀ0#/^Q.hwԫRL1c;uʫ4,n Qr@}fDRw5=$<ĉ=z4-j[ޣ}+dTհ"}qSzL]oRu8!nYX_B9B8iP(DDE/z1"ishQ>>16ז=9{ o��B|Cl&!J MtjhF~;}9CXo!4O(cOfOLjgϣ#SJedԧkux+/Q%K_)u5e__}?dMkY` ,hM>B&)sP6ZVSƶ^H>4=I=zƸ7LCh<RcpGs0Y쭞()4ɹŁ2BNoY2 V5*pcʍVr1^o٢]ٚ,9i\:|?K酟Ehz {"#$C!f͚Ve̙}+B8$snai1} Y.:Ĩ1=Ζ5-noC-JFz={r0cf[0J sn9[=MvZpxx+F/SQ[ѦAhl!4֨i[B! !g?+ :d4ޝ\x C,ӟ(>AaU!gQ\PՀFe8_~i26N4цCe�}8Դ~f+gl"̫kA B㯽GzBѶI@(hw\| SR]No<5rD׈.$&ZLܓ0,6oNA[Z9aDnyLÀkFBYZ6tcʍl;:]We{7]ך+2Ch m {~_N9[*I@(hWJK)qayVn@Q]H_l? C9Wv,X}n7#76[%qPICIaI[}4KEHK=V6C(˔֔/y۷QRRȭȥJSexSZjt:GgQe+k+Y]!DK3=U-Cqr5kL=z%^VS d ! ht.V\ ي6ۺbb).OGcZMѐi9>Œ zDp9@pPb*p]umO ~Q\'̯oҒц=RSYBpujV3! JJ |'> JF^*Q=:ޙ q2˃ej*je.Kٶ9i5kOvv `paEB=SFccR)=]yyM! +ċfk'<Q]yx7B\IOO'&&־Q!B+-f .zw!L ~PA,K[F|p<㺌k׮~yhvirQ0|Qg7 `lK֝CCؒQ^k3^2i 5u5MڋVzViT6yf%IU_5ߟ0 K}=\FRQSAƉ ɻGx]xkߞt:JJJHOOq}K 튫k�|UTU=bzpd4B*_zEr鼶$??/?ΖJSg>cޠyx)-~@Xg\{' ՅV+nN^z΢ 42jd|֓*’v7ډ=aat.5k4k5GI=)L.9DIwA޽[VD !ڕ ]7[d@ɅP(H 1L]{d-57E^;* Be5 C?=L�EtsChV[gd-4 @h8e}QP9s-|_pݷ7-9<q0iAP eLB!DWG: 3%vP^[9ʾ=ġNo[jEx �#F؊ REV\^=QY[In(2R>g 9!*SY[gkL[22i$O}j��*f6\$;0zہ!Tao^ޟ>MXTqqq}{BԶ&Bz\ :ZJoFIy__e1V@v[- WO~B8[vNk\VQ ! |?f]dgG%BӰ.^h d|5KRX u|UL1�=Bx deKDq6ChoQ~`,̴:Chv=P(1Đ! aUS[BGarX2u:"`l {sh[rUUDD-{`( vz3}֘ 񩨭p GǐdepK[LX* m]A!ˠWt/y9ClPlz-Yv! BE}߶ʸzb3nSAf%rvhZIai>LAB+%M1e* F%bm�4;2Tj*DKKi̒!B"pu(\*u!,*;P(/b1pooo2ڵt(Vi`?M#caIzZ 4egG'gjڰ CVVz=]{sk[MKtz]+ߕSw!!pav1 tb턳%a~af%jd ;^t=\߶jL~{7x]vl! :" ,4{|y=z| 2:@-0M:w'2Tֶ gٔe]Jɨ m sYZPVS^JF3gJϘZ00Ŧm6BA) V[KaU!ony;;uFr V5|@wP)=F> &. !l+းLz:K)BW2V0 hȝ P"K ,2ZK*+?>>1,s$ aOJfa&*[i9ilա2R2jT(4mW%zP$C(p+!{rGOQU32 Sh'뫲!R^[TaÒl %; TyT)tz!lMƀ__eX0$ q! C(.&(XfQ&))|ܺoեPv,{eȤ9 Zd3  mγ;C52 k; 1NS1$ffOE ²2 u>;0 �v6=֘ CB)57*yZZ O!i BvoWa x*%$%LNYZӱYEY}ayD.L1٥sՓ=*jT =-& ݡeSyREPJFE{saNtB`` 6O?ԩKJJx衇&((1cƐwǻ]uٍʇ*SŧzWVy1f$Z;`,]MRh)a)sEޥ|8tn|ͭ C2u:Nh = ¦(ub(\#L % SaN&3FR2*ڋ3gPQQٳYx1/w}{Ncĉ^'x_<F['<ooBVr$5=:]ne ||Dc�l(`,]͈$%I]" )eZ>pAQs<uN6Cj\ɨ^G]} 1*i뎬k !&3�m2CQb?yq_}v⫯o஻{,\,c{~γ;Q*JK,>xQQ._Wu) GJaQVùs$&R4#<^t\ۈ! C=`Z9b=,=|l02�^s/_$$6}MJ! lSFM hϔJ% x{{="66 DEEq]wa4UaU !<Μk Z@�pl~КBu!x)T/=W~^GRh>*:w4"r䴬h#p5MV3!$9CvZhI \s Xaua{`I9#'Ȕ!4f!Z'N??|<vIKKc_wuj233v=ZyWB[bhPS_IƀY2ENeVzS\]lA@Jx)Cx䴬hC^ Ȟs{,ʤkDFU!4-pn{ SoihQȔQOCt֍gyŋC='778Ǎ?YI£ 9Vx)0k8i4_y3 ÷T]jYd +'$Cv Ig>gTFB FQ0aХ/ Z in3¶:TFPHɨXWff:<逸⮻|<3k,TWWk񸟟@UUw>H@(h!2C`1i@]J2T2j#CXXU 00DD�@JX ?Tv(+'ڎ!).kԵ{/-wfyVBUॗd]2d!Qf̘3;p�^{zA=�{曙?>wuVHmgNbcH K!'* ʭ>"cɨq|CEUΗahqUaĥrQ0ds+rTqXVN5P^[BX-aްr2Kv4T9eP+ԩS)--رc6Z @|||ݟ'O#BN%CPKweaUc*l(`V2j\7 !3dfI`odBJF3g`v+BX!l%JR23{*~VO~8pş={Hw!ǪՑz. CMEDZ-uqdtiB3`E(+'ڦ! C&CJF# 6J@ ˋ+k+k2TF'i4VZEdd${ YGRWwK;/n:cY[oڊJz뷋֨8X͒Qw8S2{)=cv 鈗ҋ,Y9F&z\CRɨ̚ fP_L_Q[A�� �IDATfAJFECQ^^Έ#… |dff|rT*q?VZӧ0;`Ȑ!̙3H{=z=/bkXJ&Bx.;"gn/C֨v9CUE֬KEbH"[OoEJ z`d>w:,3 ֮x]CTrQ2}>}:J{zΝ;?0sLq kR_MŋyС[l[+Z !<V/O!T!vثR_8Uu>B0"rj �"7XN!vG'fI@`CUQKP2m4M˗~ְ0>#>渽6IZo`d@P^߸B/SF+%W__/ ! ܮh!ԛ*W_`Xط/)15 a0 2TFaBU.(l!4u[2BPZ-5R2@o^D.rJB{B>}rr k} Šڊ!2B;]A -3 zՆicfGؔ%`Y. B Ck'TN! 8t0*SʶJɨ Z)hjkM�n!C٨ aQUJe 6,˫'dMPrCP%II BChP!D{% BeRl43UDGX2Z)QJdq!z yN*p6dC(B!D{% BeXi ~^~6{]zB+%qAqWލv[Q06,2.1 BS !<Nj(\+PdZ{%LC@8dƦxNP0F}ZCBɨBz^>p`X"Z^[.HPa!BxtzF 4UZ];Q.ti >loQ#?SNa ݒA0 dfBހ qJ"; *kbzLB&_ !<RPcqhcvz!y+|Qk!Ju>״ !lw!G2 3t^J/B}CM%|wlC(3UN iChda@6RO%5%hk|PJFȻ#>kٿ/i 2B8"ChPJFb q]o0+. B$ Bx$SJ@i6T1;v45Td!`ZHd]ą odʨyWBxuH}f{!jkյs9!+(!4:Ci(/$ tGO) lk'dyWBx>##(*DZ]M*_/)@ La B@PV2 ȔQw[kJJFH@(HB^d!CXTU}Vj a[ 娇P�2rn @^݄F%C``S5B*#%B]A P]hs5 �@Zf9]2ݺB*YA !+ ^@h!W4 cɨdEsRz9!4d!z`6XF2 6{[@!w!G*P\AU]gK͓!4JP4oB?U2 B^B7 dyWBx*;=̢L %z-?/?rC%` 7Wʸ!QXxV()B$ BxGCG#?_dEV^ l*cd^@ػGJ a[*#O^gw т.C@hkdEspvBjTqSf>{a߿2T ae fd0iB/k'^|}}!rVBեO %mR@2B{]Aq EPRUWpd6!Px. E!{.I@R2T(%C(IQ@T( {+||ѣ7]rQlLB=zz%22TuƒѶw B#Bc5 SFJdEqCRa=nJ-%C(%B{]Aq Յn4TCe�ImC\z[2*=ni7=2TFaWk߀B4TPU03fd04*%99!T!tdTC{<U:O2B+BSv'6Eɨ)C5\z2j![owrH!쑀Pq d˲d[hdb%3JFek|~P!쐯 P]dԯ KFeehFO[aSJa=x־FQ!=!Bxu=3C(EP0H*SQ[a~{ pr_k[h4*#GB!)Po?лm& dhiL=6BW2 Z-ZBiQ*? !쑀PQ:-EUE3qq<>&yM[k'$C(B(@lB0^JI!쑀PQJKУoRPg\;!BLBNg,2XJ!Cʉ+ !l @]�\l vB4o!鵆Cr(2HʤPȔQ!m}1e W^,Z*9-Bpp0̜9\t)zߟݻ;ď"G1!4j4:f2pں:`+=Nz)Q*/J@x2B{d b3|"""عs' .d_FAxx8*:tT}d}Q,X?O<Z駟nU*a a@23Z?MudRPW**#GB7|7ЫW/�xt:VP^yHKK#!!AqM7b |A�ƤI/t,ZzahaU�DGk*^ ae! l˨2e2NPW縇PCgz B!=�:t`xll,* �֮]ˤIL رc޽)غu+EEE<cfכ7o|7q l|UB),ChC!ӛ]w!v(J !lw7̝;~<ٳg/x'ܹs3p@:L 0`�J -5Jɨh. Nc=C7d.(\w'2ZV^d)uC||<;v`„ s=K/@nn.�qqqQTTFۛ\T*QQ}||Y [' TNHP47=2JoQgBSP!+ !쑀 /^d�|GDFF_͛g6kq`Tfڐ҆ϟoc8c f̘&Dkk ᥒъ @2zuZCel:[2P+ B#-ZĹs$>>?t:yf̘a38ڐ0Ommת6g[oŀy$Etk5! h^=Z=63 {-j!+d;~Wo nVj5RQch}DFFNšj-RTTd:BgEUE-:aȬPNfQ=+ B# nh4hZѱcGٻwq} ݷo:X!ڻgśYPPᣲ^ٻ8'௙$ˡ%",|j끈ڪ jZj}k[Z[VE[gm끂ʵ)ʱ&|I23n&y=fn;ߟB}*E-*ɡ2Qš2D䅁 #Gܹslٲ}Qb1 6 �pꩧbXre:/-[O?={Gnݺᮻʻ :u¸q*Ֆ̞,>_!Tש:C^Tvje02JD^ W_}5fΜ?^z)uٳg矏޽{�:L>Gu.rl޼7t ɓ'gﯡSL%\ &coiӦn)I#Y\}6e4vQ\pއCez,`BKPP"@XaÆW__n ۷o~n\sMz}k+^{-q'[nɮT."$ r-xꩧЯ_?vm*e 6@$_kQa\?)3?f+*U25 >l566uw;Vj-tі+TY%Z.L̶2j  !y_")Uk-vs]ЏC;mBrݘ@nL9T&tMg\BHD5ò,tUaCh Q`g!yV[O&Lh)D䎁j:U'aW2JZC!,B@]l%"/@D5#i$z-RH򦌺C2e(c i° N(!"/ DT3TգZCete a9- !!*V 2Qͨz02%B(]徆P]ϮQU!PP"5DT3-R%LmʨCXV(FB"*CQ%!D;rcHc(ya $Q !yV<TƵe4<1aCe"Ce !ՌH)$$+TqXc !<7kub0X!$"/ DT3=e�5�BHJ!,c˨W(PP"@HD5B�h �RBQ5KZFKBV#O+D䎁jFUa<?v1PH0-!,B@])DfTuha-TaXVppYCsXCBhXDB"՞2 e“KPr! 2Fe NrkeBD,3T-ٍB"¿ DT3T*SF3-m� !UTChui5 N(]Y!$"W DT3jaL6BHUZFiV$!"/@D5CU{ ]ӳUJBO2M@hɶ4hrLe0QHIhЪrj_C)ѩD%b mH`+`icuBi*CD^jFHV:W.JaH ^CX8e xʨi2F+DfT}  ƍ7fĖ8%b h^CeQ@d9SF9T&8T0QHɪlJ؆l afXG.2꼆Pq= !¡2DfTeT}ލY! ْ%{aWsDYk9T&2JD^fTU J}ur Qt\ 'Bi*CD^jF5+@m-R𣏪{AiS K DѠNphBHD^jFaf([Fcv 1_Z}$4 @w2j*aB")3U2@n(+Yغ8`2 |56tt Z[N�ѠCeX!4]Y!$"W@D58+aSe*9xM`ŊGW_^BDk) 2JDjFaköt)a>(|Rxkn.8JV] :q=e4S!b(ya $27e`,}p˨@pay߀orB}f`0, X\a23e Q3B,]  <8 aGNk@hnlLϡ23Okز1Qͨz [8@cc>۝y&еk[FuӔV8+ڵO ae\/Ռ2 a(I+aLUp2``}Q /o+U! ǽ?QB@=^ �h8T\/ՌW9T&T+Vɪ=1i]>EogY.ziobn-H0LCeeLw-�,nLODfT=rLԖ*66J�FL=LykW 7w =hǖQ{;c }$57\r 0a BB"rƿ DT3>e4S!\׹j%K;}=z3iEO@r.w*omM鰆^–�kY! ׿18|YWnض ,Qe<0Qͨ ![FCdT5[),I--@NСy zݺ۲@LhjmSF0?'5s<n֬y[X{@HDjFH՗v"\-'p*#r aFs⏙<+2eɚX ׎ρ .*CDj),(:gn lX),WrҨ=^/Э_ZZ!4*G0ǃ }ZJ�}70k•}&d@ȖQ"@HD5$`ϫwm'&NӖ°iR{*4j*yt!, j5MTSjA&`<,teBI&幥;!ݿ D)7&g9X=4h`C`ld~mNUj\ 0@@..$2*B)ٖQ߇ׁvC^ r|9п.Zl]JBXkJD562QLXz I`dѩ4mIk#{S/WF+5Xfvylu$9j +E@6\CQ͉q3m~ZF Yq;W]/(ݻ#/̜qyQ/5BV!Uew$o:ʚ>tzܭoXx!'? /.;˵tҥctJhi2]~QH `8jӧt e)OM^~Gc΁�N>9xp@(BN%"w"筷dX]=ʶh߭?y^}\w]ms$Pbڧ3ΐXYxһwzs |]޲E4:®]8e u 2)kZfm_I ƕ+[K^,%}&}2jr(` $n`}SKgw9mZnֳu$ brrXa'ھ]6<97^ǎ&a/9Z]Tӧr9͛O?uRaBcclh !�^CI,im>4SډMm9ᴆP3FY} [F !U)4 #�� �IDATUs3\`!i$ѭK8omm\mJxiˇک�r,MMށ0 !6:od⏵eTUJ^N$-jeyK.ݞ^}U \ նxvF[3FRоD;B"_Z[��k.\(vl?Κ%ա^joMeI{'?*adRڸѽһJ¾}eu<`cmjTDm'N39TlO+Çt ];%X9ܕ=XPc $" DTUly]{ն :cjG[o lȐګ.Y"_#PSSu }/h]5MڕZF�0e WBe4S!-V{aCxR&tjk>x^ܶ(4fLm–Q�Рs "r@HDU,mw)3+?&h-W).<-hT gͪΠT tѻ:@"LۭT; #d+k+q=|(ס2￟zLUCIsuZx55yQƌΕm3mF`&HDT6l=R&~򉜘 ޶@+fWeCIb-M\D6LguW;;./MMRBXuN>U!֫zUes" 2B8o 1@ '�={.;Pma1cdK9s*\ߛl% T0i䷌Yw;.:y2j+/Kݐ!R ُ%Kd _ ?mT1[z­[eMX<yX:]rFskZF5PzeJ&3_C:H*QJ[0  Xv#~!S*+r(a $r I*gJ5ߕyOeQG_L`.X6TJ@^ :ɳj+4o qfm> S 4afӭ2wB6TF80<,K{裁^+Rj],|󛵱ڮsX!$"w DTU5̔Q?~}Ja9m"řo}+.]T U!,e}㏗A9V*rB[5Npn(*LMhq.؇0�h$3:Un8b0hP8pF)uy*ncHp>L& r?B"*e(o U~ < 9BNY&5 �0rd7nna"t n7˒mGw6fU3XCpU! kNCgTͶe][eИ1v;e1QU9TBÐOFIhW-yRza~y[M'^Y!cLuR5hTc RI9V%9ɶSF͓ *в*W L$<Fѣ1TQ-'�5TSF!UiZFmSFAn>X&MecrvQ~P<X>ϖ->R'N;Q!lŊ?g[rB BK0)|B}9},'G5G*'8~" nyd}lCB.DB#Fo6{*"]B!$" DT57K(,(kszʩP>H+G8|ygcKeʧRIuו7< ^{7Wjhj)]x_OUۻ9.|bZGV Zq ̞;|r- \Iv*k�tQNn~!/f9B!"/ DT565pn>PN2Uad}]@ˤR'}OoOK._8TYW_/+߁2J^T4Z[ϋ[ tH/]*x[”É +>[F*8[O^.Fp&v"h =Zk:2s !y` $QNkQ ,$L_2 vW]\z)ӟovmxB?W [A@/_@Oou^BQ?r[F*z ;<0B3B a Wm/T*pTՄѠp0ypa_n{ Bi̙3^z)Ν;cĉ/u_|&B"{ tjݰ!F*ڍ%'N'-W*~<T޿fq{޽ɓecV3ÐpBH¶U=ZFd[FU 0fQ[;'(/68 c2M?GyZ�R0U@d ! ߷DB*9Tv&7x#x s1q_ȑ#1SL?K ;E*Gv$?/ndMrÐƹ_>jLI!xǫ ݘ1<x!z|C;d}*}}rn^6nV ,2L%w˗{u/QЩBeU AEǶI~4h gSyl*--gKe۲䅍FO,f8e_N%|LRW'߻+s\| q:3ꪫp! n{1lĉ:t(?R;#GaPX!$in�ֹQ +$O[oIԐ!C$~,�^zIsjg.u>ɥ@nˉr᧟J -'�yLtn=>De4h k-. o;Wիŋ|R{K MM_e\\Hi.ddذUՖN)39C �Xs"eYؼy3c $Q[NhZqh߾re '*Rs6gNrE}Δ?IJ�s-Y"_� /K']{l=U!r7?[N(h^1eJ&B eIKfa k/YΫI_N:IzQjni9~x'FWĂAt {-'�VigY֭[=zQG.]SN8T͵5FB U^Z͂nݜӆ )=fF9-V H%sm0mp9wmԯKeFxOjPF555ϨkWׯn{w ABd瞥[7R&NNXOT˨ X!, Ԥ_Z(gʭ50 ڔnP9 yi[�LS|r &j-V%aD5bڴiXz5&NyN:aɸ;OkK/; +W hkQlؐ )3ȼ-Lu0  ̞-'nm`'Uiłrz[9\ٗVAPV 2+s (xTܯv=e+-K^\h }̟$iAR!|M�L<s]i.eW{{_*v(<{iy!xuicmO}$_S[*:>w?i*CGţ>w�,^\r ;0s9=qg?餓pq#~;ܥVjsF2.ً\ "Uo?g dF-|\6S$�MBۻB"oֈ7;axޘ~m Y#.a(9H5yoǛA^T4nZP^(l=W/yQ 2j`kkM4 O=T޿[om׮]qơk׮1cFދ~3GƋ/; B"–@hؔ'pwDo R(l;W>_ 54�;MW&+]!,*~p@YhtZZ)V:B*3u .p\RBX2%Ϸ!Cg^2ڭ<K1B•iJy W^)-VZ@~,`my=[޺i1eƍ;v,6mڄ{o߾;B"{ L쉮NK8m&e-{o9ZGw2rԩuVܹr{gS'TEN3fRef{HB4p aIj ch 2k[Z;OtZ&o>(6ZǛ YxQM$%ۻ _?tw \T^x}3o~372Fհ۷chjjٳ1PG.ӊ+гgv:!U͆ QBxAr2zϺu-꺴U׮X?^K&儲@z_^xzn9?98tKU8Nrӫo[ k^8ms˨5HꚎv78P^Rbt f˚5! m>!K/_/?2aT6LlT{ߓNJpزx9Sݯ8Xva`ĉx1}t=zk׮ŋ[~}y̝;|Ŏ1QUfqhvmTƷ-_sMّj+t0 ̑A.H?P۲I'_Bqmǵ?d{mL/gdm uS2jY࿽C ysSF}BBX1z}{yM]P#㭥%T{7?,{x^t_{̀XNRZ!Te/,l3^^q! *̚5 <K<ykX.80qD=܃ /'|2뮻_NMQ"͛%([F +tpa~2hN4K¿y*92m #Gϝ+ݖ G::o|h55v|^q r ~[g.|B_/'8O mf)&-eԱB l  XFtX!υ:@itjZ.X75I_8Hgp੧{<n\eSEv 6϶V jK:U_y3wsY<YLzhG4|hYfa֬Yy4 gepjV4d3O?^x[n{ /_=[F¦N�+ZA'9~CcNT U%o\ HmHI)�Mq[W_I;xy?[NX]+k ߯&A%}T< կ v=zHqKU A/?B@6_:T-٦Mea$\ՁʚK…-Oު B 6:iRD .�x`ǞNYPxU_/Fosĉ¾vm֬ڶniN;~2J;W^ya4͢ag{wʔ);w.+?ԩS#B" }ۉ¡2/'Fw|_IkׄPժt2b 5-e ]~OH(u%v gYR<XN^'TцwY ?8L`X AT}׮2/m}�<JŽپ=̶V5o /ɤǴ4SF3O ҩ >AhQC6H Uxu^젃侞y&ر_|qnk e ~' {O3Y7xRr[*t…yy\{2JD* +)eT9�?n!$֮nq݊r,A*#F۹s$x G!?9]>)U8qzM|;R4Q˒@xIJj׮𭷤.&L݉ڋpL9K/i$"'N)JBئQO,S@ny$b 23Ћ( 8mjMƏ sTӀNgΔmCNQc¨&n,ϙ׀c)wy91CUMe0QUmU~K9!*ZR!,5yL9eݥr\9)޶'=&'LS|%i9k9s$ܾο]\2#:*p7O7@n/»5h|_J֕٥5= ?wߝz΢nZ%/8,Z$a׶*@mQӈK ŁPUP�f;yA#_W2SoNKjAe0y +SŠT \8(yNVًO!"w DT6HaӔQ=$i@H+d^s0^F@Ns$dN.?Ra~z8pi[@z|N>YZ #7][*nz+]#]$x٫|"adȕW:w a9-I7NWwcTR؇B'UuK*I| G{�:� Vm?w#߆gaH{sR!яd ھiΕA-nz9_�~?!/}نb $hnꂪ8M-6/n!CŋO@r2'!K^{ >=&v߽ݿ\}6pR,ld'ǾW]%p<?jW8٫ Q=W|L=HrҬP[;ݥ[oKNf~j C˨=ӹꗽeT2jvHo <@, /l/"mԥF{yaa4 }A2ڧ^&iuU4HZ[vGĉѹ^2JD^*{[F@g ! 0̵J.\(p̘�^`Hi|k;\Y?rTF[o- =ZծVZF E~s9a=0|SAM <e'2cqZ?Pz9}?L J_/3}ڴe8B?F BS!Lm ! pɒBj ;[? 'cV'ήB*ʅʋ8_/χr; in*46J[@.,캫M??򈼐g:Ρ2D䁁0̔Q_?7l߶M*~[F9amiWRe>2%hu{s{)빮?�Hz(7;K{}Id{8PT~*CpWM9U{׈�� �IDAT̯D^ַ49Ii<*vU_C JwykۿBql�H kj*:~8p 2Iڋmk_x-Ǵڻe-~'M +D䎁bÆ*Tn#zߦJϞn>TJ铫bU"64 }&k6awdKc嬳^ _*~vW_-^}U]]W]'VʙgJXzIۅB2dLkQ=Q�F-KI⵴;Ȳ>!8׽mTmFKdn%^ F-׷*CD*BO T?><w ~T "U} OʡN$U{mAi+jwt ?<ThVqsJgsҥ2pQ5/ys~rs:�y[ ~駋Ĵ,ٷLE־\^:vE@X.B"Q#9eUT WK÷%ȑojm}k'RA}[;(hiio¼5! m#k{Lֵ7K#D $~I wp@*mZ^SF !UE9Cevz{ \VwcewUW>f(ke' jBȚXLf]!D,?j,Mk} -n*Y!dPCCO=%L6@$l%"' D:*/jZu$ ==x9q-.Xm2ܳvx?[ۨj'fje5k+ =@5V˖Fy_ŽeM7e婧䅠:_/U(U͖F "/ DM\ؾϔQ9&״sO`zp~ d;HpryX!4�PB@o~-<RN mO7(V_J^(/.Z${l !ya $57۠B9]?HѢXFB <Dy( Nkc P>At&Ď+9z O=[*^[TvѢ@jkՔQV!NsB=x )=EڊBB AlmE@(pr zPUe\p̙f캫pQ='*CD(tB2jo]^6X!$w*Z%kB@&s@hiZn 5TfŊܾs-1c!lkQ,svE2)-Q"r@HDkk(ۋkM.Ҟjl T]ѯl3 ^C8`@i P7#�.\?~|uF1S0Ƨ ^e0Q蚛m>"i$KCEm ahZn/B5ű*@htC Lx\!40lLVMkg \F!"o D :h2S*{)S'j-0MXKUnu&8AZFu qKaDg?zY?XFze`ǎ^{5!"w DiL_^ZD9}- Sh&$jp" [Z׿@BAގghj !B" Ӧ�| s{ BrS-uU!ۯv�Pt=,] L־�[F!0�'֭W{Q@Ulk%fr^P=-ЌiZC:ou!"@D۰uQ@B$Ο/{sO ɍ@mB{(* VP>_jוWʋ&r "@HDۼY6dV-> !7R^KZSF%#42'19֙�SFb:+D-D:2|o_ydСzǢ䵌P2*C$B,Zm'0+D䄁BgY'崌{BHz�toɍʛ22ْŭBX_NFHDQc{2aK !yŤ|ym-=sk<!>ÖQ"@HD+2ڣ g R`Z eT–QövfWB0FB" [o Դ\kVShaR‚@m뭠B fq aTiv<0Q2 !+T4Z+2ҙ-6h˨keB$Fq c $VNɿZ 'L \yLwFr 9a $n;e` $j-浌C2ZerB2JD(t->@Ϟ2`K!tj-ZrDBh ]CȖQ"r@HD+j 8e�N: X롨ZM]jj aL 4f_3u |DOv(+D䀁B֍ >(j-[F2eTm;2*YhP"@HDsݘ>Q":vv@e{ a"sϿF6Q6L (;FQ?N \i520z8T0Q*q=mk"jogQ#ȩ!t2jYѸK %|"W!9T<싈BWT!4SlȨiJ;OZFA[FuBa+D䁁BT! 2PhGvЂ)ߚ0YCOa0Q蜦r EE6 h5ef[F݇XH@LFBHD(tE)V)2孙ri,_T,7StkJQ"@HD3͂ ɖQd &9K@TS@h@*잢Ac(y` $9r EDn a 5SD*&R1-h܇0ya $бeLU :!ui̫l54N2!"/ D: !!EeT 3eT6c[FSF0z8T0Q蜶Ql L^<T&oʨ@SFeB!*!"/ D:Y!ȶLhBŵB6M54@ŖQ"@HDeZFN.B0MH8T<0Q8eLBsBזQ Bz&r a:+D䎁B)e~ZFK f5s !c $q(EYBhr^|[ F) !aj(+D䀁BeYSF)ЩeԲW`"aQN%"' D*ձ)UeD=2*B/!Ce!Jp(EU,yB)Z*pczD䅁Bef{9eJ2mYQR0bѴ2F "/ D*ǖQNGB(/CUJ!Oe08T0QT-euufb1ho;!BwhZ08T0Q*2JQ!b1^^h\QB" S0ePBHQWهPcSF3j5+) 9T1Q*l(UcZxB1G 4c1Nht˂C2D+ (Tnk2JQRWV&Z1m'bŷ B&!"/Q8ea ^x,B e]48TB" kR䵌2nCeѴf!f2FΖQ" !BhZ& `"%eTo,WЊl;!Ce)-DB" UaP1RchD"x˨fB0X!$"/QT T¤�HUQshQ@Y!$"|BU2!+%uufٖCeD<ؔQȊ:`BHD(TE-&[F)ztX aB[ǵB`hMSk9eeBV!Qu`m'\Z42B5ĖQ"@HDP"! 1kۉ-HvRe0Qg+N-qdB`)Š#E+D䅁BUX!Q"{hP^C@&&!Iĸ,bWX!$"' D !Pe+j aa˨GP@- Xg "!"/ D* !!E=4m'2/ܘDQU!ԍפ[F !SF!T!,e�[FCe !SF[F-XZFe4hb0QT Q[F 4V !ʵeSF)Bc�-eBU!W 2+Qk Ce !e4sB5% y"Zh¼m'6º:Ce2QƖQ"@HDD@]B43k [F}!uȬ!e4b1;B" PR@6]ZF3ZF-B:>BE-+D䄁B1}LU鈈§Ѽ Pg˨i03i�,B"r@sI'ݻSN:t(㎼,Z<vetg}6K1h t ԩS2BT!L hP”C˨exVCBV#IX:+D(^Q ?~<>`DΝԄUVerJqڵ+~c͸曱pB;H$r-rs."vio˰uV\s5*©BvQ´2xM+q(RBϟ1aӦM81~x̘1z7pmۆyo߾�QFc_�m۶N<D<c�G0MSL\vۭ_Q*DQb:Cc^ePk9e483G_|w�͜9'xb6 m 0 �W^Ass3._r%hiiO?](| U!4dL a"W˨irh$ @HD/b]w< t邋/�UVa7QtC9˾_xݑ#GBuj !Py-eV5  bka%>efƹ0-!9c ,òeːNq)`رxqɓ�k֬�ӧ}Ass3RTX =zȻ^]]wիWW+" R+N-nL� L o�Pd $b\CX-[`֭袋pm�N9$Is=o~m۶�n ķmۆD"m۶yS}+N4 &M Uc(+1j-_tiuB@u1!@fh a4q ya ,C�(pM4 sz- 8�-v۷oϻ: L:~۷gnȑ#}DU2 !EL\tq˨B9BU!R!HP"–2�^z]�uTݚ5kн{}aE&I477ghg !P fN-@C,C!`Q408T0A Yrej_Ϟ={gϞ3gNy ><#�.L̻.юB\5s܇m(�4)DR[Op !q ya ,Ä ��w<H�ٳgǗ^z ˖-駟裏Fnp]w]w݅N:aܸqJ !lPXC @\U~ZF0dơ2Dk0|p{t:#8*f̘뮻{�\wu>}::(\~ؼy3n& 6,;!3SL%\ &coiӦnSa(Z‚)S.%ϛ-a2F\CHDtw_~xO`}m݆.,{}^ÕW^k8q-d*]tn<Sׯ_ X!$t+c}sz i=Xhn ![FHDTLx/_zx|y睇;=fBH�=;jZ ͡e^O!o5Ln;ul%"/\CHD*&$+=w˨yiczMߖQP+*l%"' D !E=eTk3rZF\CI !!9` $P@]ChPUjM9CA-WR Z!a08T0Q8TE¢5NK!xYNĸ08T0Q8TyB]ӋZF5&R(oczVCe !B"M-*Q!D&m5BV#Ce !B"� :)eԲd a杢 aQVMU-!EDD D*V�L-dR!t22QC+Qʰe0QX!$B^ tڇs ܇|P"@HDb@ZFВ@hh&ƹ0-\CHD(T!ep !,h{m5sFrcz"r@HDba[F*q+ihcv&s^s{1qD,[k\pٳ':w>ͫQ׶xűB@HQc4ݵek aJJ@425 !LnF81l0YSNȑ#[oa5Mƍ p5נ{;qGCCJj!J¼ ![F)jZF3NB3VS3q=p ![FHMevW]u93qD :Cvƌx71c |{�L0 _iӦUk[F(TE-RZF6 5'1+zW(X!42j|Av|zh^/3лwl=z`„ ?TΊBU2 !EQ&f:L3B2�F :HBH;+˲n:zȑ#.?CuV,]RX(T i0-B{PCh!)@*e� X!(iByM6 Wĉ=fӧruի+r|k(T lBHceȬT} dQ�&tnLQҢ !զG}>he7n}ŋK.as9۷oG}}} �m۶;B" Bت!+5+kdh\K˨BݰX@bY!$5TBE&M¤I.;w.>]v-ƍ]bƌ\oU:t֢˷oߞx1QX!$<l-m'aQ:b\CIj}-юnƍ;v,6mڄ7x{.y>}8Y�{qB^4 i$BH[FU%OAX!"1~x455a8p >s-z.ԩ Píy D !Ea�QU!T 粆0h(0 L8o6OѣG;^oڵXx1\iu^_b?~Z�� �IDAT<heBeY{@]GDT@N#ńw>ekCehgrUWa֬Y?~<K<y?묳��^{-|A|'ׯ� 71yd|G޽;NX_ס-Be{lB�LQo;@k FZ` if͚Yf}LӴl 4hȌxgpWoǶm0j(<8Bj [F(TY\!d(Ea@L緌f΁0]^(F 9Tv ÀiE #;a꠲n{eˎG !ʲX!$WM#eԲ,Qӄferht2 !c $PBHU t22LQN<B" UPV) s5L L#e4Ÿ0PN%"' D2RTPP!!NT}ChРBa !!9` $PBHtf a&e!i5-K0PB"r@HDba@/\Cg ϖQ1Ach$ep(9` $PBH FeԲ\!,e4il225D䄁B !e4!A0]2jZ&`zW+T(+DQʰe0QX!$&zC Hv2-F "/ D*VP+\"ݘ^U0$r 9c $PmL !EBhއ02B(R-[!ʲ+4Xu(l@NeN*e4X!8CHD^(TBR$x&Z`} eVeB"r@HD*c.Jє2i@aۉCeB!4Cc`$BHD^(TyCeX!2 hrk-V5z&5-b8e4 D䄁Be&$+Mda*|B^!2 a:�KD䈁B !av a>Ceh5,r a$! DTBU.VW"L w^C*2ZB2j2DQv +D䀁BUT!d(EiZF[[F-KTum'-ZL(Ee0Qe2N9 )0[!̴zU~PK#*;TNB" +DoM淌ZJn;e[F\uщbQCe2JDN(T`hyBH^˶l5,bFXe/Q1B" +Dpv>m9XƴLh.kY!PB" iBHdo-Z徆0١2:DUv B" U^(+Uzfh;T=[FM#&Qg08T촁pŊXhQ 䵌BHQekM:zxښ[CXe aPVovqy?D1x`|/ttDTB"8N-܇T0 2jeʰBI2s 9}݇w=?|^x!N+VWUBH a\**#AS adeī}�m駟1c=}wy'4MڵkCUȎB"8B-5~51!0BX^رceJ{7֬YSC#"`ʨ<! ! 2j4p aBHD^v@xeYxj*;6UVav+DWFT0 ĴXAPt` a$BHD^vѫgy&u-[`РA81|*!ٱBHV rk-+MD;Z1X+QʰBHDNv@xg{xѵkW\|H$]v~*%)(ꚞm5LW ;e԰ אʶr(9!ヒo|9s1E֭x0J`@H�tq˨@rhtQ-D`\C8j({.fΜ͛7W'd"NU20Ѽ !Ce2j`@IB2Ο?_~9-G}4n,^ڇGD-I# !E e@9!afe,C}JmLe4,N%"g;d :t(ZX~=z!7x#'? {9VpȦeN!eT_˨eƀ+Ѧs(9!n톉'ڵko⬳›oqơ[n?~<n[ڇKyECeX!QLם[F-dH@h>ʰBy4ϟNu=b՘:u*p{!E^P!)2j2 �f&!$"g;QzޝGU_ߙI�E@QZPĂP)[*ԭֶjݪ_ﭠV\@~VEAdGp@NfLf$)Ir29sرc5vX/,%e !^J F+3 j2ډ3�  裏&6k,tA:4ydIR$o_K !^J 2!L2ZEh,*7BXޘ2 _o=%Kcg}&uu* 4#^u]*(O~Iډz0Z#'Q*Ρe@->4hP<Bϟ9s'͈W!R!DIC;J<CXW!fauThe4R!lBફqR_F@_K.??s:th=?-ZT«z`Tl&PE{]7d?xT˖8'�Go~ۮ o^;vGDW4->$IVogw Z ^{�Ke aJh#SF*YR!,k oN |׿tWjذao~^W]uU 0-~GnM[lѿoUVVc?v}^!DB g[F9YV#H-uCe;�M'NG;'xBbz'tuו*Kg&MҨQhݺu;JviӦ%U Ve !U aʔQGj4d2 ITCeٲeڶm /Ç[y.IZ|Cz3nj߾}W XR!DJ Ӳn(2*3 Ka*CemSƍӼyx5kh뭷.WǎzuPH<̀ @&TQ!mm  q9r@~_kڴiӧݻkĈ_>S+_>䓌Ou}wA�*C eP”є3T55R$<T&ډ-@Ӝ{:uv}w}?J~zZJ'tR2?-e1VRvJ}�P!D˴v"ehCCeɢens]{Ve)@S~:nܹ~\Qa@SO驧?׿U/bK߿З *({~Эo!Lmux ,n.- 5yyQVX;4믿{W~Kߪ\YӴ@z뭴T8ڷoC9D7|s).*({Ե>Bިe]-u!@XN�Mr- .Pv@m]}}"ᥗ^K/T 뮻Zl.Pn%Hoa'a1iaM] upl*h}|ؔQ�4h =3vmK}9"a# !ʞ{+B(72H WCYHBeq*4ƍu'0()�ZBXDe(ԡ2 55vh,XnLG !{W(Cᰪ 2lbuº_ ;C*LFX] L*PiL^7x6lP)2zeqxȻ}zhlB7eCFr"TCeѣ<L]|źKԶm[BDג8_iZ\ +3-BH(NƖQH:C(PH(͵387* ! !uWkw{Z\ в1Te' +niD-VY(rg-<�kԩ:#SO+El֮] .@{キڵkJz\5k֔�$`^B {Ce55BX3@STWWkĈ. J ݻnuQ;8m6[Իwo-eCe/!Ju OUv{ a$bDHNrPi?p륾h-ǏW4[o'nΜ9>|9ꫥ@�I+a'b큼yY +3^= ռ C6SFk%�MsWh:묳4n8wANJpuM9s.- JҀ4qD]s5%2�~+,T#՝!Wp3BoL-nTX3eQ !{$wԩS}8-~{k.۶m]xE�X!]eɧeԍY˨0Y! W42x>XAB@Z'NnM'tu+WoĉKtu�RQ!D;CX2r8j 7ZF2Zh5kqnJJ߮Cs=uGk=$}zꩧ{whFVZFb1u0P a9 1e@-.^tE_#{ /_bz*(W^.%&: 3'2!l`L<�R!,SO᧟~ZK�[W!Q!D2BI-!.fvɼvm(7$ aYc(LZ\ mJ} � ^!R!DFA.FÊ%TC!'@ 28&²fSFBI9rdS|f̘Q2TQ|au,yDHW+B[Fa ac1=LZd |gզM㎒hO|K FICep-ZFg˚="H"aݵb uE'tFr@Deϯe4ea(!:NPZFca9,/gTd*cٲez嗵~iҤIe]ӟTsR_P!DK HݔѤ xuPJ8C@hP2J,Q!I h_UVWNt9k׮:c5}tm޼ԗ Bh4^! 9uOBBsc K% Q!,k6T@ ] *++uQGӚ5k4uT^ZG֍7X«VG<Ƣ-L->0~ʄ5Gw ]-[^SO= m۶u]K}Y�R+U+K}9@|ar˨㵌&T!#L*C9gkс0j֬Y:ԵkW3F7o֝wީkSO-%H?CH(U=mLSF7T&Bs{3ȤEN}7#hڴiZ~<@]{:ԥKR_$.ߪbR_< amXQ7Z0˖QI )sټ-2G@&-2tAj׮1chv8Zl-[6 *q]*(sXz %fS!2TjU+Yo7SFd"$UUU'O<}Q_@X!d Jbf/F){}NdentxԶ2Zl(�ҵ@x=�䉵(noRU2 I<C $QјkK_; !O%ȤE_򗥾�yb1=Jgmˊϴv"MCk0ek}z!p%rB�)�Z*(ox3EP=RngSZFg/pǒT aYB !@Q!DIT[ZLa$b0e43nnKm}W5�UȦB� !Jj,gOKKs ~CejӇsX;ĖQutȮo3eQHr� !Ju3aä]vi6B !rN$8T&e/>ԺM4xVn'RB#B… z(m *R}˥BhPW?{UPD|`<;i=Vq@&B�JYm-6wq?CM_;1{l >@+WQ*~9s2őC(�_B�/2͜)rԮ]lC].Xmr˨뺚l!lCZ^^ƻR[@\ !J`FilkB7_-Hm9ֶ$ݳ-ްXHk6x0R>˗Sm!D (*(ٳm}b J6!rzmtzS֠$%pP!l} җ_ũz�C (R!DpfΔvMϻb/K6S!T,5U:xZ:qqjcPm]uIu2B-_.me& "@ P: !^ʡ[7KH%8)m }tGyg#BZX! dFBZF JnR!D QibOai睛E D$gCy†>P!lipB_Uw*T@ P=m+\Zee2ܠT'jm|1}8lw6BuoZFΕ,!bԽԻw 7e !TB�UA*Õ ܻڲESR_ <K]wMT'hM:CW!DUeev0/[bpJ{s檺ZZ69>o(Ce�"%uMG))ьa]hg% 55 ڄtc@8sf A>;lP$2 !2v|5i͚^ ̲eRǎ6$ޣ2h}amo ̦BpAWO9E:즽+֯Q$VNxBɷmԡe@B� 1 c1(,]^e&P0R0 yM{+WJ.uDۨ}ޡ B��zUWiڴ^ L@ 6g;W a(”@XQPp"飏r{ϤO?%Z~sgZ+8ҾR!!xhkntҫڙBҥF2M}%;N#u/!͞42!43˖َ_:u_}z\N;IGaU__[+}A~>'|U{9 !TB� a׮1؃YFKu3WVz[o݅&Hg%r?YVrK@h =h͵Bi}/[{pdInob�� �IDATٰ>v $8\i} ~Im?rӻixBHE 2®]CO//6nyE3H'M,wKzI_,st56orX,s;C ?Z Jb .ܷfBjoۨ7As.]mr҅6_mCpL)$+B۾)-J[ !-�R&mLkJ[ri'rn�rjFZ];k-Zz]p*FŽIl]c!ao}T>^~i= [@(p^3ϔ܆<h~뮭~+R9B�2 LYU%kC)<U,ʩBX [NҽڙmowAK~իuSl[FǏ_zEkYIoX L:C eWI|/{z/}wnUʟvoU: YR*Sh*sϵ@paq>N,f_@ة@b �6T& }@);Zxh.Fyf0.K6mNRsel[kꫭBxM_,NzO;{N6Ce}ԹtN)m ZX-{pJk ?﷟ԭ n>n%}Bdcq>κu 2*Y0-2T?!+ANF-�X%#p˖Xu,|)MβT{_hEO8M!FY-Y"MjAqRo~'BON>7l IzWy iBXS#=MW$+ѨG*+V$=8}_{-=-_sM'xb nkptvUUCmRD={?CeZlܸQ_~ N:) m>B!zk@`Jrps^o-%C6o-nu\qֆ8th˖enSוnBĉٽv*6zn<9mh}vۥۢ!|9Y;6=̾Bb]og!?,ʉDԷ&2Lf϶!BV'r6rn*׵kկv nKi>e2h%֭[I&飏>R߾}%?ᑭI&顇Jom-B�)BoFMX^L }Z{[ϝkաo<¿9#TmޜgZ9vU.&GNkVYmQĉ6$@h a8_E9CxR~|{.Bkf/fҥtU_*_T[6Wr;{xᰝu| mm.H<>yɧCeJNZz,Yo11|pxIZ@`g�+QlL}C\7ka8,' lIyleBA:Vt#?@UVN<Z{ܿאQ裥vN?n?H*ډH5klCjuP܆ M~v9\dmHg1O<!X< OwlWZWK_}eYܾ>p8PZ{6gu*OB+D Uw(.\p�:,;w},@(Y{X>=W1"so4ȪW_*PZ0si'k(ic<}W:?;X/w.{ru,3œ4>D={lF?ĪFF.0 …$_55{r0kE J@(Y(|U7頃:bgK{e^v#g8U3B* mV۷QGŹ< &B Ew|򉵭 b՚LGlpǚ5֮ӝ:%~!Vy??7ߴ37op@oCv&+%[!-kP  1qU njIv/EIpXigCY)bz׵vѣJH.zF%[ѽ{p:\d/M[U/w^w|G†~dOTWKkasӦ{,/ɫFv>?m@2Z2(g۷رcE?t륗^;[�*(|</P3 $ғO;Hd-ڵv)#o_ywߵjA깸AiSJwaw}/@z3D2O!ȑ6I2~mnI)BI)\hLylBN6dOSmEYgw=Q95k&Y?_oGLX.r=jHiL]<}2 2GՑGo~|?^w}N>dy䑺+k꫋1[!xCnM0[?^~Koټنtn&NA&^KV.RWNx**W@wO<1w]C>ǂVs<GY8-mU\e03AOڟ}�s=CP+o?Cf~gLu@ꉦ _5"wҤۆ ᇍ}Ukm'hk*jk#,[˨hE4f͘1#[n%?h pz @`ǡf֎=0]:pUv6o( =fc@zkoZ[md1ϛg{=Wze[ާOoO$"p@au} Q fկٿK-LT֐k'| ~Kr&s+?wR~W{%?U/HZ Y\k9Ml54Ⱦi%U- 7T?ۿ3<b?~OxR!2y_2J@ 0+Õ ߹G{.ҌHwY_=s>|vՀD*~}o˼yf<?i hg 񮻬kM{?_|!Mf5ݏl*2M gXX(Ѭ*cզ#~g={sU% k6wJ E&5z_d7,w6.ɓlXc'|D̙I~B!.Cg aCSFi>Sml+C ġ2Mju]l[KҁZV\ %:;2u2lF1Fͳsn~aÁp:km ׭o͛9i%qX'].)e?FJ|-tPl={o ?w̥J ?mX[ھ C-X!u떾 "[ٜg9 aC>*(W… UȺusi6lX׬&~P513=zXUe׋}۶TVZKd>+mXXp #g>ӢM]?6W/?>[{) h6@ضtvƧB|0e(XmBe#lVO|򉅔voa. %?LZg@߾vϐ!{5 u :c50T)h LJs$iƌꪫtUW雺q\rz꥕^jѺ4uTy:ꨣԣG]z%\!4B8a_:4;VYIoD><$MϤ9soEyL0m7P ~#GZo{`ޫuhSz,_v=`ϲewx}鍫' 0OkX!!dw02•+퉃E% v9ԁ2U۶ B94?7k#g(<Оim4ӠBv_v~6X a, CeКtMtwq=䓺t뫯dmҩ_hѢEk5a :35w\ZF Mnb.V:xkivwq=H{[ŪMk;�ݳa]GCC~^,ylwK5| ?\{|FgδVL.ҪYiix+EV\*72: uIPԟgۇomk_ӆ*~?wPUU'92:e:/{G[ʤm[klLP^:=P&K,Q,S,S4U4uO{II&i/e-YDSL)0(IB54̸qVq{捾Ol}s+WٵsαIfY@L]k/ ?=|)lh8lmCݳIjjYΜiov3bqǞ8�uW l+#a(@B 3׼s>hCFK < z]v}){]MLr {t ZE bm }уhkJhB !4B KmɻJ__!LTYiՃ/K?Md*h>Ba"0@ϠA7o;{ޚy ƍV7>?V{b"T_^^z)JUn?ZZ[uك2*Yeo_ U aumM΁0kxIª*FMǛ4ꧡ;oaM4~qVVZ cmnzQJ[󲯼b_%9ƪЙشɞX B@P!@ 0=T/BDZ @475π6DkQ&J7ؘOrjUz >~xo=y/Y:P{<a}=>} >9ӪK?Bh6P{eOkorlzWPv⥄ʊ a-\ V !|e =*_> Ç[}Tw^p}VӖgҩ gU컯}6K']{* @`ZFnKt)VIvryvRqa.k~#-xq5vw:(vnjR`}a5o?9{?&}D.J{*ʚ5~{pƌ̜iGKѠ]vBTTHf 9+O?m{ie_#zNK7_oaO|sqd]ޮkCbm~Kuݹ2 ![F~-]w%X^X@^{Y8F٦6;r8|_Bռy>ٺ>}z=pφ컯`Kr}'|X᧟Z[ܹb_zk'ҟ\v3gl2(dk'rlf<CZ927(IM-0<g{f8l{"s4(!ٿ1c=!T}2 !$Z!\<`qlr[o֔"q1V?[%?wiU㎳ā2h*jcZUWyƾ~-.}h7ߴ󢋬}7{E[ InXEi͛B۫@ߘvZ~O>%.Ouiv)S=A#+XxOݺ\+l}[}ħR!@ 0ICef ? /� ߪRn裭g3ߧ֪$']z}ڷyjDj`XYN=;zG7ް)FJ76nKjUnk'˞DbDΙs׾_[h-Foeї_\; N9μU jhc|ZFCTd@ x0g0SKd8,ӟ춦 րvj.X?2gD{p=v-}wkqoz8#l/*ƍv#ߡU<Ҫ0~;B!$HwVZFs];P{Yr,ɓϫW:SN%:ĊǾxAzz>kv6ocHE +7LB^qtviݺBoܹBFgδ-զMֲy.~NɎ?y~C{O,tʇN>پn mT2Z˯e2Ig=ڍݷ)k~פmL${vg kgWhB=uBHE +~Kw8f؁p]mʜ9ᄈ*[3o9o_C-Y+?3Nۧmsϵ_qÊ9e4 a!u r# W01 dOLl_|Zf%.ZT6.Yhs2 B�{ʨRz?U>C8rgr {mb>;;Gv1Sh?CbD UQ!)yaIa$bGV^g_Gv{?jVˮ|x e@ a\} Bw?԰aԡCuYz swkVvԳgOM2ؗ*)~K3i'yN k5kM\v,YB^*kggp݄ZFCy$Jdl=İaE ֶFs[7{7?OG˨B*�2 6u5ר}l_wO?յ^ /P>SN駟޽{kʔ):5ap A~:@QyCjv]d.|0ѿ\*Uƶ z7k=pX(]9;{V;CX*tж֔\w]}:m  L}?^kOy*>Ce!�W_e /U[[VkTUU hƀ4tPw}:%IUUU#F$WR,ӤItgcǎ~b@} rlc+N9Ŗ{A P>΋T~ј+PV%3΋_SV]pu * T^?ɓ'uݴ ?#Fà$vaٳg<I+ 6Nzkƍz]e@ BW16rԺvR-tIsmyͳ]3x,T($WM 9Cؒ ` Q lM֕MMP�9 )s駟}'+Vкu#eׂ }P(wyWFPh|'VVsP*6٤\94eG۬cC�� �IDATG[\)|sYO-HDrcu?-e(udw|2T?ZFtwhٲez}_j*IRn^׭[7mذA555ЪUեKUVVsZre?*VR!OlڸP:l g!iSk+mm BRMDK:Cz?42J@*~Eatess>UUU6>UTQQ*Ufh[iӦM}e2qĴ3cƌoLxCbTlz_ssW^)-\(_kB!k Q!@?ҥ)hWh˖-iۼys}ڵk On޼9~L&O~eu@)y˜lҷtm'󟥾 HEEbhg"Bb T-ZHwy&On4YpҥK6[EDVRΝUQӭ[7EQ}Imڰavj;ȫBRz@{qJH D�Cerb b1M0A{9s?=M4Iݻwos禽9so߾?~vy)%hɼ aԍf_!e)=B2*5kk e2�r@0G{֓O>bu]w}[oU{챇$iԨQ|ꉗ^zI- =PuI~'Lվ}{q}v@qyOL4Tm'_#@KVQ!@Qm2T0T@Ν;먣J[n$K/մi4dwyou7O>;vl~m۶դI4~xp ~_]?ңHf2|9h氇P a2k?wTLC-T 8iwyg͞=[.iF#FM7??9묳TQQnI3fP=4ydM0!O(39 sE%-/`˨$ וHE ,W^y^zi֬YYqiܸq,Y2PwQ@3P3^@Xf|*ޓL2�4T&3})=P�$[;Q@8CXf|C^ B @`CemݴIZ3h[Fs;CP/R!,3$Ih$#LCeBr-Lmh E"L!$ ɦe[JO(Zb !H$eh@ @`r.YbmOBr +q )k'+c dB� ډڶ-%2BWJh(D(�B�$9`$ѷߖ߿4Mmtp{vM<DpR˨Q��㺒{hhmBb.X`]}40T@�cB;hJ7Q:e4S ۷o%I  @`\WR( o[io_PbMCX ׯɗ(e͍1T@ !$U;CRϞRſ0"]!4T&y@X2TYL @`,P!]e" B;LCe>H"=-�R&e3V L$:! *s2 !�B�ɺetB+mQ&89jn(Աc.-O=T"Lk'(m̤!ECp~mhRʄR!@ 0Yxmi=m €K<Ck" a,f;9?X2!L@ 0Y` LRh.e_!\DaYK*e@B�$'\7T&hJB2Moi-c)Ce�Ȁ@ 0+B~ie%V-;K]dC Lb0coKJ(##_o12ډ(-�Ru%' fLFuCd?gB2T@2!d]!]e>2*O]\ a2P��5rpF魷2uO48ׇQo ̥2T@&B�qF*jj €f@صN:8 %!4vb,{ߓz ʀ~&rCXQa/@3A٠=!*�2 Lk'fδ dQѦ!CtR-N2B��I eh]XEQ&> =B_Z -SF$#JpfYې!%2Pp /iSCa!g"LYS_ xmԹ!g.:0g#-*xpfiEY [; ^i]y 5z3@*!bi}u@iyOBf䳇P2 6�&Yݥ}-ѕ?CbzvQ$HBCe�!L,&9ډYX7経{wo0^!B��>^YLEQ"zEO>W-e=0T@H/�@p]ŧΙc/944<[Fv2Fb: @ 0ICeѪ*{6%*y*NP~_ Z>2b tLډx^z2,- PP��v0+e.~0 !oB� 0+s2oW3 !C(@*~�L,&) !$E^(Q� %~� B x(gQ�ʰ@ !X0eDuu"5qa SFX0et** XB!d*1e@2~�L,&ɡeB{d:�X!$*"!DE"n]E0>T@ @`39ރ^! )q Q�kB ~�-@T6bz�[@`\W(#:gQ@)Bohe dB@HJ8C2 @`2i-!CeTQBZFbTCH*iE!1T@ 0 !g42 qE @ 0 *2B4T&F :�cSF*ʄCjFdhe(TXL�2 ! (e*C(T;CHSYBP !@2!+!Tvi @ ~�7T&m{QP!:� !MCeP@~-n2�[@`BH('~ ! P*�R@fm*2 !Ho�aw@4T�R[@`\WCeQ@ħiL@ u�&mDM$ -!Dd*#�HF )@ -($u�&ġ2[K Aaeh%Ho�q]IlBĵa_(�ߖQ�Ho�I8Q !B�I[;A :o'9G: ,50TQ�"��#m1=kKܦ,U0T&2e@2!x-!zh�Ce�dQ� !-�Pt^2�A ;C �(:DZ`b(B�>�2 �U2 @`X;�Jlʨ* @`\n gx˨e@:!2 �ŗZ!Ce�#Jh@T*�|&^!Lm(5@S!d TB�*SQC�Ce�d@ 0t-[A�2J@*!x¤Q@q2�R[;2J !Ce�!L,&%x"=۸q.r 6L:uR(ߟW:3k뭷֡ ?!P!�!e[n&M>H}$9Yb:#裏j„ vZ <X/.e7kR_�Ib! !d(ZvIWV׮]oYoj:c%I'pz/\?p.YB 0+ !�g gUVVk׮ӵ;à$uE'pz)Z[ !bRLQ@R!CeP,X~޿mڴIq �c„Q@񤴌JgQVZnݺݶrʠ/Y !BZF T<zGn믋6oެ6>ODmVTUUUӳv�Ц2T˘1c4f̘ϟ߿]vڲeK7o2 0K�Сee[nmVdL@`X;�b(o߾?~[o۫gϞ%"W!e�໇@zj-\P OwqZfxm_|M#GZr!;CUH@E"ҦM 7P!D0e}W3fhٲe &hm%\x@}z!c;V|:w/r]WӟJ@`B0Tf!�Kڔѐ\6@pM7iҥ$qO'8:S6q9vPH=."4`�=s=K4 B�];B�(ј˔Q|K,i>{޴;v;Swyg1.E !+ *#HA XL1T�2�uʰ�/e!Ce�! { @iCeHG ߡ2B�(2!b dB�I[;A *C@*!xCeBN-�bI*p@:!$F*�P)Ce8C@`1;]T"@@�:Lu s* @`"a !�O(B�� !�=�@ x3�P|){Y;@`3a'l+'$!�OQ��s}ZFC�3T=�RQ�PPǑ+HF N�@|r@*!v� ke(�?B�2 �˘=P�~�ẊBZF �^ k3B��aQ�L8l/8 1T@!@bB B@qTE(�B�H&!d!�W! !a!4B�Ŕ~q�� ˫wr@:!@!P�(ԡ2A 3Q@0T@�v@�S!e@*!@BQ�@q qZF# !�OP*�w�'e !�B�H\;oe!�Oj(B�>�JnB�ŕ2ʔQ��4TQ�(>ZFd@ �!e@:!@v�F@�B�Ce�d@ igC�ŕ:T �@ v�2J!@be�2B�>� �XB*��0@ X;�KCRHB��vQ�Oe(B� aB(k'�|R!@ vQ�LB�HG ߵ! =c "BȔQ�X(-�@  aH!{@�OuB @ ޔQ �P|T4@ °S@�EP! !�?B�ZF՝�PlHB!B�ʄ �Plh@  �-e* @ a[J/�Q� w0@q:B��v@�Hj !tB�HZ;A `$V �|2T�P!@ IBN�@00eaΝs9G쳏zk=z-Zv?PÆ SԹsgz/|w߭[ڵSϞ=5eʔb*@`3!ZF 8hD]z7uǫO>ZjL~gIukӵ^oV{iΜ9ϩSꬳq /P&LM6/.է 7eQ�Pb˨ÔQ�y ԿE"_ѣGw޺JUUUiy%I СCu}O$UUUF{L_JXL&Mg;Yo ��|2<0) J}K .kĈ0(Ivz~+hÆ :쳓qF=EL[FE�2jk'$%G ,ufuEb [N?яۿ-X g޷_~ Bzwx@0|+B�(=I� ʕ+5zhIҪU$IݺuKonݴaaSYYΝ;kʕEz!� B g `…?~N;M 6>gڶmOEETq6m+'13fƌW! �x*u !&Zz8mv>}zٷvIxl޼9>ڵSW1wL&O~9�ACu{@%B-M_ko4k,y^hUVsݺuS4MOX]] 6hv*g#m�/eTT#i9r/^gyF{Ww^sM{9so߾?~vy)%h a !+'�[FC/JyE�aѨFzKӦM{QFg㷽KZh?mz:uo=ovo^GqDq> @lB�_Q� 8C .@O?F/B=PO>dIҥ^iӦiȐ!:oT>}4v۶mI&i:L~a]s5,Gzk'�P| Bq$Q�yxw8~i=Is'wyg͞=[.iF#FM7??9묳TQQnI3fP=4ydM0! (& !�0T&B*�+d}^zi֬YYwܸq7n\4k^hQ�B*�p@ hCH@!@$`!�#e)� !��-�A  a$B� -�A BB�B� k'�h@ \W�1T@#�aB�@h!@¨!N�@`h!@P!HhB@ Nl �BB(B�~�ᵌTU%mU/ �Z?Q*�"eJj׮ԗ�_PHG oDBH c F"^!t@`2 @ \WrBQUdV;?ɞAcD D,, VE YJUZ~qiuWH[[mD@ 4AD@:s~fIa{g#Ν3pys'rƄV �8"hJž+B�Dk@!�GUFJ!@%$UUv$Ee�T#pB�pABXUC`Q�58BH �2B� p]e !�8ƐQP!�G/; 鮶��h�#Oa(�8'l!�@!~@� ӳ �\T&@�gQ@N$U1-*C@+Lƒ�� �IDAT B�V+v�WsUFE  ?A�p !�!�G _IUB�pJآ2V52 #CH �sB*�j"p1B� !@]B�Vʫt�Q/�P#Bs2 �ΩgQ.L&!�GX^I � 8$!�8h�#/ITI\Ǡr3FJOOWϞ=5o޼oeZn�AaCFB"|͚5kFviҤIKGw ܸqjݺuضH578"@�ǐQc,Yӧk„ %ICUǎ5zh-\ǸKԵkH75f0d#!�8'5~/+ -*Cl̙JLLԈ#BRRR4|p-ZH}]aQII~$3�Q]! S}ݳuYe@jԨQݻK/_cG|+vڈ5V0d#$Q!�xgsqLشi7o^g{pƍ{_ϧaÆO>:g驧R^^բE;8"`CF| !G46mMmΝݿT)))u]ZZ4H |W/y睧{L/ҡ6@  X!,�` =Z]{aխ[zOKKSyyyeeeE޽uge+U!JH*?B�pҾ@P!Dk޼yB7m$I>lѢm@_i~ sD bY.]zjm_x$s·jڴQi_,"pDV!�8VEe(߯W_}5\&MRϞ=u'K6oެUV*֭[<￯|/R!B�5 #C ߯-[m۶<y֯_I&կ~)Shݺuɑ$k׮֭222_]999zzI#p|>iv%$P!ıaʔ)z衇oXgyfϞs9' UŃ~ӟjΜ9{*;;[zƎCF �0*�OZEepHII5~3iҤ$7Nƍtbs8 !�Ee��# B�p�8�!�GP!�ZT!�j"pD@5VMOw-�WkUF@ @+BB#B�58" +%JIIn7�'rI!@NRSZ�D'IJ,/*�8"IKu)�_¤RI @c1B�pT@`Q�58"`T !!B�58ˆ !�"4p$G  CFloXT@5!�G*\�/&R!P#sJ �Ga ,*&!�GUvS� $&JJ B*θ~iB[4(�}!d!�SBitCFQU%M yRn8 *�aPz4*�8/4dEea nh#0d�󱨌 ;mp�ZTUFyˢ2 B*B�.*a(�8FEe@1@Ee2 �.ݻGdD 8*!B�0 (RR!�|2d1TC�T !�f d+,N<V(G @$+|>yCF (k}ԭTQ!"�'DrK� ՘CȢ2VTdwj3Q@)~[!�OR*~g!# !j Ba'ڟ"8"%@ �|Ҟ=â2VX(i#efڟ"8"!�O_~CF#-O8LQ@!�[WahaZBQ@B�pO@H0~i:%[%B(G d�G7kaf&Q@TE@Xe'"*xɉB"8"_dS��V!dш Vw*B�HW4#y<n7�CFQX(egKg*B�HW,0�BFTp *B�HW !�y5@1EEၐ !b�#lC�"9Y&1Q ) F B zg�TB�p瓯ңXT&"쑾n ܵ^RB�HB�FRQ^{Ȩ$|{D #RUB�p'_aaԾd+p2v3� ~hMtR`ybB�C�糫##LR!D w*'R!�20,*W"&8"_E�ܴBBŒ [1B(F #RU*KJt�XT&r$W:x*jB�HWEe�=@HۼY*+%.NG S%'N8!jB�HUΐQ�pCF#'[{BD9!�G@H�\/2z׽ !@6&&�_T#F"D^Y$!�F<U~[r9P B(G yB�p'IJ(w!ǠJT�"o_ Hb(�f_ Lp!ǘRiƆ+(E y@L�\ Tu! hC yT}T#@ lPb!@59.7SX(%'Kߞi3Q@ d!� ad[MQ@ 0)�@ U GՁ.9!Q!D#I$=�@B B*rB�e4emd*�=R1@&P!D">Zo%C�ў$/M[H{8JJH Dw L7דvk� I2h** E"`[px**wޑ@�nړUZ%£&x ֭BD1!MN<Qze[r>@ڶMJ$7�{2ztJMJw -߶rt!wD|g?5GZ7ߔ:wxS!�I* Ђ2A+}{+Νϖv m^_?oj*׿N{+salJQ+餓o#lc<bU `Q�p$ܪ~ԧ=r8@J*R^j`nmx_!?_:<qcD;6Vڼn::}uΰUU#H&H H|"wtҹJ/(mj*=o~smY^~jڻW>]!RAk6~m*҂ܹ|{TE4p?KMH'd]V& *u rtO.''oFnAz1w/6l}]wϢ2�=I T7[% KQ(-YbW>={~˳w9gB3;S?;P?m[~Xz9ir4~4z4u}̧rea? bֲeL?,[ܘ2ˍYz?s$$د6my]cco7歷:c=ט=9Lc53F2ϘK.f1 ƌo}oc~ c01Sy9cʘ{﵏m1iObLA1{t1>jۛdx9$+4f/cqmgAee<mܹշ3c1_lLn1̜î|}m1/hZ0ysc7\0q}$'cM3f>of1oL^Ƥ3r}}߻@߷_g+Ƭ^mvde7կ1Ƙ{撧97%� Ri4߸s=gt=weĉ|GoƼ11<~(&NԫgNY|71+ywA?`L~1ׇoScn͘[neˌٶ͘yl+9qc?~M^1;v4;xI{^l׮51f"_|cԴy1~hՕw`nJsի fW<koE1:~obؾYr1`S-[f$e˖k!ưe˖#[< TVd1n'SZZlæ3v=Pkg;b 1jdL׮9| D>hNUUsljK/s]u<`gXտ165ibQrmSRbC 7TL{Y^zɘ!Cɩ{jgݻwIIGvmPS$~srl[w 6`7ib3;OiڴДhCwC68gOµڃmh¾@{;vô4}oo<1?1]i̜9|=Y?xI ' m0ӟ쉻cT�8*&vlbJٞ?(O=ϧz?HZ[Y Uˍ9t{UWg=a n͛W[{fds<1c?pn\{>?Oɞ;u22W_m?8яyS6i8w` Pk*,6Ao!L ?~egۺ[Yi+W_Z3bGIK4wAz|cfͲ{׿c_w>cFm_ҩH!:c bU~~~٭>8e,X`<͵%C'l+;?n7|-;WJ;o�${;˓N>^1vsIYYYgI]q+3Λ 9hZ;_?)=߹ν[uKJNR;/".^(շ"f~tu_۟N5K7OS>ˬiVi6;X= 0ҦM;$wN/>+H/$egۡ99Տz{Ycli?tS7!Kݻ~FWrZ�GU;%gαS.**9K'k%%IՎvٶ/p=W\d=~_w_D=uԹj}v/_{vI')|պj~oNi7~IW\!a Һutiu{ySJ~h@H_RRbORjQv~+.ZJKm\[ԩҫھ޽va}Xc\sykmھsϵ?asvQ}ߠ}J۶K!??_ݺuӲeԵko  0gz';/sfͲ{ab;믥3ƒc RDxr5>lIzmk2f*"7/)M+]{y�@Gg'xb 7u]G}{[7f^{MEzu9Qf͒w!@$約^Yi(.uWb=ֶw]/5gؒPwKEu}mKC}_wGٳmv!:@?ˆ S:Vv('I))4󗏸�[=2VjӲek:h̽gvSeet}p]c]]_OZ^xҰacM^=h��ydtk99vGqqx^[Y!MAAdQ˖CC]K�7y0�5q=Я/� !F qh_C�c2 �Q o!B�pÐQ��"VTu  .*B�p�@ ₗH$˨G q՗�nbQ�;q9 �Q!@ *Tm2 6zg�"ÓC�P!P @UD�\*�jw ~[!d!�â2�D\UV<B�pG^!�j PC�9�jw T J#АQ*�*.;6zg�".x �wysD qU`@�n*�D߰ �DP3� �@ @U!�nxC 3�\e49�*Xe@8! ML XT@mB�ط!�Ģ2�jw BB˘C @/;eQ�pC@8zg�" !�D@ & �p ,*3�!�Wy<^1@MB�p � P@ą*,*�(ZB�W(�" !�D *�;"3f={j޼yn7 8bN6�-bUeQļ#3رC#FPӦMըQ#Wnqt#FoYO?g}V KpB` Lx"V|ﲨ g4m4y?~l٢?_k׮u'ZdO &$ :T;vѣ i! �W bݑgΜEi̙0`$iرc5uTG^Cw%fΜD1"-%%EÇעEw߹:I`Q�p Iy̙:餓BaP4iSeeeDQ@jԨQݻK/_F"T!L�nBXw$}悂uڵݻk޽Zzml`hشi7o^g{pƍVVV&Ited}Y UJW|ڱcnpHx"V|}]mzFm+W~miii\ۡCn@%JKKRg{jjjڊ$I/=Pd%C^(nݺE}h .8x֭S޽öN9{,#F4չ/[oVZ{;���kTTT/mg>=D-qoڴI]&M믏x����'ջpG2Vx]tիURR}ŒΝ;,��� jIsϗ1 +-^X>OG1@%(߯W_}5\&MRϞ=u':���}g޼yVZ~zwC۶mۦ3f/WRRs/$0d4JC ߯-[m۶<y֯_I&<���ugկ~)ShݺuɑdaϞ=5l0XBYYYze#<Kr(2eu]z75rH~͞=[sN~3f={j޼y.h,[ג%Kn IڳgƎ~qz<yr\Rq,xڶm-}{7{ >]h5ҥKuf$��IDATCjԨZl!Ch͚5uxSO5gx<x<azkȐ!zg5zh5kL?ծ]h1"]{5kFviҤIZt>:K?V߾}5rЅc.beee2ںuԦMlR[7xC7xc~6lP.];S%%%0arrrdɒrwokme]d 8P-ҠAԩS'mڴI?vޭO?4t-@`hYdO &$ :T;vѣpB[߹瞫 ^ڼy5ke˖"Wii ԢE IvӅ^7xCrF;$%%%su@u]QdȐ!:3Vo$Nah9s5bĈж >\-w}b3ƨ$l7-լY3I]MfRCI ?Oo'PoڵˉիW0(Iz~iժUmoA 1UF¶?\|ʰaÔ4W˖-sI!uVuYun޽ \hppݫ?^'ptkϞ=n7 d?դIIoĐi&5o޼. -%%Eԥ^&M諯҄ tO>:8?y-:3fv@ s_?X n7qnԩڸq}QIoD 1JII=555t;mz^z~߿N:ܹs]lp؆tPm\=9s R�iժU/<tM8:!1&--MunbA۶muW꣏>jp -X85J^Ww)c7oe]L͜93t!Ƙ͛;,4XVvIakѢ***Â<ִi&eeei5bFjj7n~ NܹS\rvڥ>@'tR6!Ƙ.]h*)) ۾xbIb.bJaa,DO>YM6ҥKܶd)%%%ڶm6mvStkڵ={ڷov;[cꫯkҤIٳN>d[o֭u}_.ȅkٳaÆжk͚54h-W^^^dI7n$_~N7 qkȐ!Zxf̘>8:cs ?5jڶmɓ'>u9<}*==]zRfʹb JIIѢEtiD@kǎڸq^~e 0 )wީ?^6lP.]t 'hȑ*))ѓO>-]!Lp\C~A]tu]:~ᇚ;w.͙3#u]zgunIxa *//C=zK:35n8]xn7 s=Sjڵڵk5k .@cǎU6mnҺuk}7Z#ǣ"HVX[ ,PJJ.2g\6##Cwq>SmܸQ~_ڵ_{wKNq}ѿzx<9F����s��� N��� N��� N��� N��� N��� N�njVZiذan7_袋>/Zl ��!� |'zGs:y<ЅEQQ^{5=taÆBJZ���cW^'Ъ6m?!/%%E7tz ��!� FclKJJRBB _eeNoF}Qn���3~a=ZԺuky^y^_^R9o^,Xo]M4QffnVUVVX7x7n,3s=3СtI'nӎ;l }v'?ss=:q޽MO׮]ոqc{{�`%���5\5khڴizgԤII };CzGh"M8QSO=UO<̙'|R;vСCC[5ydg?]wݥB=*((… S'|"ǣ.]m8qFAiԨQ*++%Kk ۷k׮Zpa��8!� fqҥMJ999u͛kΜ9nMk׮Մ \/$[nQV믇 kiڴi2dH~iƌu\MVRVV5j}Μ9رO`[nM �D CF�ǼÇܣG:۽^uж3f(##C\pmڵ|>_so߮:333>k홙*--UYYY�p�c^JbFF$SN85ksN5k֬מ={uoƌFG߮O>i�� �h}k@ f͚߮M6=feeiɒ%uo^_fϞ>@fҋ/7z-..SJJ �A �'+em۶󕗗CoDw\m<xJ 0@=x%''+**駟~į�0d�S|>$ <j!CkܸquΝ;Xyyy2ԙ+}B2|k��`Q!�Ĕ:KjȐ!JJJW\zqy[oO<˗ /TRR֬Y3ggՀX{VVV͛>}_tEj޼t'jʕzte$-[Lź+u�P!� uY7n^~e}2ƨH999'߶K/[nzW*11Q[СCջw599Y_f̘{,nԩSOk:S4rH׿3Բe˰0 �1GT��P"o^sU߾}~jժxql!� 1�jݺwtI&)%%Ev[Z��B����[T��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N��� N g0@����IENDB`�������������������������������������������������������������������������������������������������flent-2.2.0/sample_plots/1000_pfifo_fast+offload.png������������������������������������������������0000664�0000000�0000000�00000306744�14670056262�0022247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����)���kÅ���sBIT|d��� pHYs��a��a?i�� �IDATxyXTEvPL\p7DM}K$-*DLs˾i*Z[.",n0 4w=νwg# !(J�DDDDDDT:(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!QZhxn( DGGbccP(wbߗ sqqqP(XtDEEAPի/V?C]9QYs- 8^^^033B@fffϙ۷#((NNNP(ڵk3++ Ç͡P(pԩb/<}||["cc<oT( r a ,--憐L:wؗ*( `ԩ.$ $KIYun1L=]˗QP[?C9S_˖-*JYݻwGʕacc{{{ԬYo</gmmU"::IIIE~G*S˗e˖ kkk�')))@jj*|MƢo߾^1c`޼ySƍX/_Xj߾}h"[hܸ1lmmP(駟͛ѢE 8::\rhҤ -[s|7]6lmm_ҹν{0rH*UBLL o0 ݕw0J]�2^&Lx!0k,dffbȑprrX^z�^<,{@ff&0~x|t֗STT||| kװvZ76lan^e"aзo_T\Rv튦MB 'Ν;GGǢ,^`las.k׮Zƴݻwc޽hѢZh1=zppp@XX^y!pEZ .ܹsjlnݺҥ � 33wҥK/`׮]hܸqZӧرc?j֭3<y3fO>%V͛76l(}YYYpqqAJpyapssCdd$,--zjDEEӘ>}B+{!-- VBHH~WtYc4ŋhݺ5뇤$,Y[lC6Nbnv9%P("55Uv={K.]ٳ",,LcB$w^eo޼)*T $Iҹ=Ss!I.: It^eŒ%K$I"..^O0AH$&N(;ÇN:B$ѯ_?̃ĉ_|:r[TT$Il'44T("&T?'N$={cɴǵY}XcݶmzB8!IOu.aee%4ZjB$q!uV\)$I͚5O<QOOHHVVVCܿ_c!CI|1}Μ9B$Ѯ];E]_ 1 "_@#$Ib…nGTgϞ+ BwyGH$ V`rʼnu ! $nݺj߹޽[H$bccEqㆈFԭ[W,]Tc{F*U" @̜9S\|YD8Tt}x{{ s$IhB?bB JԪUK,YD b„ WXYY ___1~xޞ>rIII"""B8;; ;;;ѬY3}v_!v!5k&lmmҥHJJV;**JceŜ9sk&lll4)--M;V(Zn-[^YjJ8;; kkk#+~rr ?YXYYիcNJLeUz2eV+W}x:֭ovvvNԯ__̙3G(J3 υ$Iyn+b~)$IzqÆ UVS !r_KݷB5%,--EE~uyG 777aee%Ő!C׵<KHHQ899nݺ_/]$z%ɓ'w-ի ;;;$ETTHNNF8xhݺpttʕL[Q=>gTۗ}?^pA 0@xzz KKK)"##ŋ u\ kӧbܹ}J*J6mڈ]v'O}J@1rHw{)?s_@駟^]x$I 8PczuB$ Q\9Js_E}~1cK5JdeeizF]AmLw^\p^^^wYINT*u7`ӧ:tx,Y{#GU9ꫯ!C 55+Zn'NzeܹMի EPPn޼wyaaaÓ'Oкuk$&&nݺ0`�1ydٳGzm?|ISlh׮ddd 88VVVի<y_~ B@ddzY!w~ իW{gO"..^e+99AAA]67n`ժUh߾=V\^zxk֬A޽amm޽{bŊWoW]e1bѱcGtfff�Th Al޼ڵ7|S|EGGcٲepwwG=k׮aϞ=@ ggglذ]tAݺu((СCQ\9ؽ{7MM6۷/ߏ:[lW_};w`~033CӦMQR%dffbΝ1bmS,X��zIk<,X~+VDDDp<yqqq:t(1a!55UiwnݺݺuCNN:ujժSlقݻwS`ڵѪU+4k 믿?`ӦMHLL1%$$`ڴihѢ SNaݺu8}4֭[ԪU QQQHIIڵkd�=z`$''m۶)))ظq#zYxGԩSaÆŋXv-ۇ۷Yf�QF!%%gH!}^0aك{D�~ hӦ <xԬYIIIX|96l؀? 40xѲeKL8>>>gZZF`7nMСC,\P;ԩShܸ1йsg"++ /^w})SF뵎"۵k5}�^dggCek.9;|0fU$IBv`޽[:-##G">>{n݊Yf!>>VT^滂#J9 j'M$$I 0x_jw !$I˗//p;Z+++q yF$}MnT^H$y $cjL?y򤰲ʷ")SID=4_rE!ԕf5ﱨ~ =Z/BI5jzΞ=+E͚55_l$Ij gdd�Rrע3Fc^bbG؎Z{JWU%RRR*ĪU4gddko߾7noNNyfǖg",--VF~Ȑ!Z IhРHOOWOV033ӪQ*uyUCxU!IԨӇBRQhӦM ݻZ4]Ph~{pwwIII/aoo/5߲5۷offfbСs?W\1/&&FH$5RobB$1{l7 Iѣ38[y6l$ ???g\JJc]RBPhUV ID@@lm>t=W<y"o陙W_...G$7jQ2 O P(޽{BP_%$Ikז]>!!AH$4i6o<!I>|:ӧO/CE!^\?ݻw$ɓ'k-|}}5]Am즌J͛7x & &&5kݻwѸqc0�uј Ox^i֬FM� 4fffHHHPO{)~'899a׮][kYd W_iL VA$IŒ3`ccczvvv9sƯ5j@PPΝ;Gz55j>LcZo ##֭w 6 ==C``<յb1c[cɓ'o>t]Ư>w\HʕXGP9N^˗/dzg0l0Zn�2e |rdڴiJ7ހRѣG5ّ$I} o߾C_g޵y?~ŨQ2e^033͌pqq1<e˖!33'ND@@ƼZj75zG􄅅>PfMl۶M ͛7-s�^cjS=O<-U/^vEƴΝ;#44.]B||z0s<xϟGӦMc^ЬY3?/}/jj|t7ѱ:)TAjj9}0xQ)xs0I0}t( 2JF%ww^JGNGhh4ԭ[CRRV(G.U˗Gzzz瑝Fɦz~Ы˗QJjc{x ^OerB ==�^L!((Hk` 00P\bҥ8qDcZ1DF2HT{.�_>|3gΠB z]:VZisrrBzsiJ${O~}O�/RӦO~ ?�(.ۋɓ'/jDdd$Ǝx߿?}ԬY}AHH^oUۉ'd .�xqըQC=}刋ɓ'h*rBŊH(ׯh*U—_~cǎ}h֭֬qqqHIIјֲeKrg޽{q -Cw/a8q2֙3g0}t۷nƍӧ̙.]Ghݺ5+ikMzRSSU240 SL{)/^]c-jVNޡ5T5^T"گ!c?ãPwn�hWWWŽUQG]<˭�رcv!$Ix!iTחU/'y˝C<## 6DJJ 7n(={6<yǢճ)-- O<'**~5j0|̙3f͂$I Q~}U]o .ԹnMUٳg۷GJ5K,9 \Zo޳gʕ+Çc„ ظq6 Ə_`{Kb޽ǧP(_YRXއrO/hժJ%Zn.] Ǐdž 4͆ ">>SL5kmc„ %:Fnw2335?o^C]n+:y#k׮!33!ĀJ޽{T*Ku`۷oNuoDzگrTe+Ros EI888޽{e3賞qas~Υj?sa ܆Ţ8kTeyF-*e~)))J=tfϞ]m UTիWo>u'O%m0`�233qA[/Fxx8Ν;U~tݷԩSxW Ν;w0gk7r[be*J*3(Ξ=]voŤIT*1iҤ|qHaj5Eqϑ-ԩSe-lҤ 6mڄgϞ!11[nܹsѯ_?uEZF}n4i1͛x*WNu}WP(/F_U:Ӛ^)7 !PڵkXdI !b+\O8qllld__F5`mmSNZ iR\9TV ׯ_Grr|]:;;C!k~bb/}̱cdϵEQF&k(MvvvxWq-8qU/5k j3)wEr\t �н{wyksJʐ!C�x.m ۷ǂ {i\ϴ0 ޒ!@۶mA]ϠTfM 6L]^˞k}%uy8K.U6{M6ĉ1g�QaG Bnݪ5kmm`<|P]h~4i8pR!IZlT�urr2]kK򳡲!U'>|_Ϝ96mk ȏ?2,Waaa>} ##Ƽ'Oܽ~tt4J%>#+Wjܸ1�T;w⧟~2hEMՖo0<yrUs+V ]vw8;;cʕZP~}4ok׮Cӧm ;]y뭷ʡT*5j\]]B_Ν˗/kOq}2je:uj[XFB:uH 66_u_Kv*w0 !AJtt40qDَAJƋsW8.dzgЩqU;tE̟?_cچ o>y=`cJ/ٿ?7Eiii8}EvtA6Qk0yTXѰ¼y4/$XgС�^|NMHHU#"##φT /!6�`?*J$0�� �IDAT|a R =L"߯!!!Xv:5j ;233?EߡCW^Pߏ_~AǤ/vW_}#GiӦy&V^_ׯ;믿"00m۶EFFV^lܸQkhL>SNɓ'QF \pA=&Y[nūN:ٳgXv-6l .b~GQj*�/+wB;;;,X�{Fѻworܩ.+WDV9sQFprrq)9sVw0o">>?#йsgXawFLL: 3((5kLcooo̚5 .ѫW/a޽8|0jԨiӦig}ӧcȑؽ{7U/b˖-޽;~gCOK֭[ѣGX6mBXXV !.];w7o^k׮(W4iooo!D4h�mڴQ/ۦMYݺuCacc߿`͚5ڵ+4i֭[f͚$ ׮]áC|ӧ~gԭ[aaaĎ;`kkuUS]X۷oLJ~ ׯ_dž `ff?Ү];Qvm\t k׮M޸tRwވ?Ο?X9r$mۆf͚W^ppp@bb"8=z`͚5Wؽ{77o̙3غu+\\\Ե5B?O3$I¸q ,?QelܸQըQ}zyL>ÇG лwoXXX`͚5(Uӧ֮]5k֠^zر#Ұj*!pB/{̙3q 4lIIIظq#ʗ/oր_xΖz l۶ NB 0f̘/w@sɓEPPpuuU)ShբE P(^zc ũx '-sS#k@1~x1˖-k֬_(?YYYbѢRJZԨQC̜9S$''̙3C\r^lR۷O B5P\70**J}VVVW?^B$ѵkWK�ϝ;'"""͚5۷oZG !Ď;Df̈́pqq]tϟ=]:߿/ Q~}aoo/lllDժUEǎ… ÇYb ZTZU_?~\c[M {{{u}Bgm۶YXYY ???GLe]ٳsCى EM8 STիWnݺ ///amm-lmmE5šCMfk׮jժk-00PL>]<x@cٜ'U V 6L kkk(jԨ!"##ņ 4}7nVUTÆ iii?u#*y%))I=Z4h@ ={,Z8thӦppp"<<\$&&jbbŊBxzz .޼yhҤ(Wpvv">>^o.E͚5bĈ,_\ݫz#**J|?4]Dzi&kԨXl<\|7^666E^o#FRxzzPB!\"f̘!FS3" o(AsʸXL4z+-*ƍԩSm۶RТڱc=ڳgZj% CL0ڵ  Ƹw%%%]v(W\]]GvEFAuedd`Ȑ!pww=ZjǏQ=vӧ1gDc^niii;v,$I*9s={+;;;"((H^P(dܹS/؆0wbFݺug^_8;;cԩ>k>}FG ==z>}0|p<zH#[T_ǩS0fbhѢ=jժ9ՠAVZS^tbiiY%,=F©SдiSߑ~[v_"""2-W^ŃOOO<zk֬Wɓ';R19[nGEÆ e/c?~^^^�F!,, qqq<x0�7n:v_~�Rɓ'cȐ!1֬YC; �^zz0aBd $I*qty~zϸ>Ѿ}{|e*4tw͛ԪU 1114hPiڳg!rsvvƈ#@DŨ}h߾ƴw}ǂ ۷o_C3!!115B\\K|ˣe˖Zr~7tڵk^ ?7xoZ)o6/_" ĉ1q)#JJNVN\\ T^1Mݻwe6lOy B㲿T4l=… ?d„ P*1G˗7`۶mz �-[#oi 2j U+VԚWbEܻwϞ=n޼ 333i,gii WWW7oE^tFRV-ymؼǏ#%%Z*GƂ ��3gƸr-[؜9s&p1uS0SÀ@?�XYYiͳV/caaǏ$J-�.pym۶Mp",`9�`TVp@}�rM`5KP&(C�_�]%"2N˗/W7kԨQիnܸ+V`ذaungϞٳߝ;wFxx8BBB0e|wE~ ƀT5qO<њ >}*lZ=w˗FQ9r$f͚U(uSHB I:r$P̙]4*p$%cx^KDjÇbLG@߾WM H_ڳ'h|P1k($_'�߿?1rHˠ̹`4nKX1 4*Sn̴7oUKŊGӧw<==5+7Fj?UQ֨Q=%Qqrr2kA3TG٩u�QPοӭQz+`[<< :66qw/xd. ջ>w;v[A2:ة*Uwww$$$h?5.zֲP*֭[ǎCN_9;;;T^();[�CTP�T(/$~.DEDռJduB޽;6oތׯܹ/^Knժ\\\;_WOѣn߾kת?Xz5:u!'Jӧ@v|NW@3JڟD{ִgϞaٲepuuUwxM;wϟ?w~ ǎ"0e4y!##CqF\z�0|p888O>իѲeK1QvmDGGemmɓ'wE^жm[cŊ/ԃ/&M ::gϞ+ϟ!^c Q1xD; K5e!,JDdȐ!>BBB[naŊp,YW?Ʋeː*U��ǎŋQJ|'yXa3f@jj*�@$[k׮$Iw^=cǎ:v3fh :1c6n܈*U`֬YaBo?sǏѨQ#,[ ~~~%vD%o߾]Me@hҌU]yYCXX@h.ECZZиqc̛7[V/'I<>}`˖-ؾ};=zOOO[0aIJ"o52ǎCqQ6'*~l;߽{ii DFeܾ}@h(p<y@9V4tLrMLqK"2Ш,c²mȈ0 $"҅)dl؆l(c)DDa@HDK^FYBekDdD”Q26!,8!DD0e k!$"#€HCHFװ!,Y2DD !UŔQ"2" tKelCX6[Cs!RǀHa²mȈ0 $"%o !_c aa'Ȉ0 $"%oBTSY²mȈ0 $"҅)dlXCX60eB""]8!]Nd1eB""]8]Nd1 $"#€HQQY6ea@HD SFذ a6DdD)`aYBeka@HD瀹f- u!,a@HDR oRY²mȈ0 $"% 5kK!mJB""9r5-eNqŔQ"2" ^2]ݒ+(/hy"R€H\ !SFj)5DT0 $"L%cҧ: H0 $"ÔQ2F!,}!$"#ÀH\ !SFc aӫDT0 $"6dt’ÔQ"22 ȥ:]߱0e B""9RFFe>Dddթ _,c6Dddɑ,Tֱ !DDr2Jƈ5)Ddda(#>Ddddt ;’chB"RƀH\(kY5ݒ6Dddѕ2ʗ7*؆2 s!RǀHNeXBe>;ADF!;Aƈ5a@HD$)dXCX؆ B""9C8*XCXXCHDF!]N�|Kװ!,9lCHDF!Q _5kKSF0 $"+e ]lCX2JDF!]GTְ ac@HDF!]NGTְ !DDr2Jƈ5m0 $"ÔQ2Fe1e B""9Ś*>CB"RƀH15kKa@HD$'QQY6Ddda(#2Z IQc@HD$)dXCX2JDF!1b ac/Ddda(#]N !DDr8!#2ZXCHDF!!$c6m0 $"_(_ਬbǔQ"22 0ekKSF0 $"ÔQ2FnKB"22 0eQ~)nKa@HD$)dvm`B"22 pB2F ;d2JDTɑKbB*؆ !DDrJtQmc6Ddd~f(u!,}!̽<Q)a@HD$G)T֙x afv&<R`(DDr^YCHe]!B I.ݻG>dj?>*}<yb(DDrK Ux<z׳HQ̫)p~s.=J38k<f^Te^CH\ή1;讉,c7ӜZHż @DT&ש k5N; LИtٽHv\Ϻþ;\;ONc+WpX[=Ʈ]vi:h<5z6#<mreTsV$�;.@`cn?Ĭó߱rԩPGs0F"Z/k'Yux涟W B""yrwlCHe]~mJ\w no BS6" ڷ5k GlHޡN?uB؏ah9.oE{MESQeV59}>y#b VX ]fP?NiMB`jT/G`@{ PH 4\;wjT5nBۢ{MtˣKyxǠm 1evn,=iB\w+N{J-!9"+_4jaawn$Mz]?NG|j<:V羽ꇚ5eo$ݳ/2 M¹wr ;sAʈ]LYg_ݳXi!\%.<6 +ӄxd'2 nn�k7Ɗ a$YξѴrS+@x4].=""!NU %.],OY3t]A6iƼ>:*:J3+j迮?n*j+L^;m{]o9"G# l: ϕӖ\ rV||�7($Ͳ//|QMGaܮq89oƤ}0hԫX�J8v6mݣgfut~L;0 3Ĥ`|X[KVj331tą}ylNN ^#oM5�O?k7qCD&!PCacE⒜*TG]nӅM6Ui{J|c ƇGژ4;"DbsH oGoYg-#{ah{_RQ _ !bcR<|v&ԫP^^##8 "H鯟пv K[~o'oDRu?&.2p<x@?}<|~\v1(yyۚ a֓,1ǣg W[We}|p0 ji+DoLO\/¡k .$DDrJ S8?"#h刓Oɶq-\n᱅h\1؎w?4C31Ln9.6.ƶe/zv}^ֺDRlgu8_?f ϕϱV켲Z~5�B�x[zл} _;ikX!*Ws�[.n0@oca%KbơH;7v ܥaM un헷]prn+gWc^yxx떷/_5L?❆ʈ+Xy<<t.bvkueb��F=DDrK-΋.g\u:CMvH]\R3Saif+W0vXe2R6  v1{+{+p?#8[;#4.O-/tVP}e/LމOv}R+W5_JeV:uNY>x 23Щv@oKO.E^Ӡ}UAݟ͏m;b㢵ջg/jFm-laen}78P�� �IDAT['nw \Cw@o|u}[6_³gËyEH¾RJ::=DDrJ e{`_Ai چ.m{t?}fW0492;.ZfŰCW{x sl&G}yy`gN4 @bù Ebe'ʎ0 :.G>B몭1=l::UjT](PװœZ5�0Py 7 M6}V dIك.fP`nZLBumQvWq1zT;v/jּͭ&0e;G-ʢsxٳta@HD$GSF=QQݥ:.]0(9tڭhVZû.{=:.߻\/(o'o=m H~X\aзU>q(meU|u૗:};>}0p@\Ϻ=WcpeF6cІA_m_V a>mj]vv ׹̦ бzGNaTZ=b6@-~l,lptQ܅rVt.OT)o_ϳ'Q'q5*jd@-. ȽXqhހ(.5g))^dB+ڣq=z|5*8VBR`I<x�~K[q=:.`Ki;#wK@l۹>v屶Z.N =50$IXqr 0nܿ'ϟRPB5f 3^u$H4x.BtQ+s+W2cBRꔯWڨ*e4w;D}iDQ@PBQ)QgkgV� !6i-zC1/zllk;A)xcn oGo�@eo3g]Gj?łc PB]ԯXPϏ$I  )۸]ϣJtU= ԫPg1hP@ 53X!kW2\&X[M6.�N5Txplɛ2jU@xaF iC = j0\ €HN1C(Ъ!R $GvnCjf*莪Uq0BVvШP %&흄aXg=_ݏ}np<}{B�hVN=:0l<XSXA<'n0x݃bޟyQչ^jSFRH-P2O q޻OoWk_`eZ=Rq Kp`~x^*eԮ<<5B SCx:\xO%DDry؉iSN޸pO_~ B}B�nng#XƄ g!aҾI؛נ2fv֘^Ϊ>;#w"N$ov Qb=XY4�d?F4԰r{Udh+F@XTC !�dOc跶^{#%"D=˪X�]eRF]l\)wμt(Q"*B""9Aj]UC(I"?B8b16_، ~މhS �Ƈ?<:JOUwKeE6Wl0`@�q&�! 3H& g&0L 1`my_dY,KR/UoURIs|ڪ.usn?;|cDYa4K�7nJƥ8ڷq t�}1SdY2�z.#pAXᯘAN%*@s%z�Vb%~x' Ww0l�He%2=.N(_>Pd =HA(pdTMT!ٳ{{qr]r)nYu ћ?J5F#>}9Yob_c#|{qbLFXZt#jc' 8J-][?OnuŃeF`^n0{GuG1A!A B %B#Z~ĤJ JUy<avl|o>sf afog s@;ʚ-ƚ5t~ڰ?^fwo|s ?ciA<XX=Q5 Y72&t 0|Empz5Q|0a4)!$BAJ8<vBUV/DT&xnsRz ?WV.Pn n:\J|dFT8w8Y5iZ�WC'მ?^Ֆlc.0+T@Q5WZoʚ EFiR[\SBD,^dOA!A: $Pb"gl'c[6Ÿh:+g⌦3 G>[tI]IWuA +g.35z fA }!`Hv t)/fҏFu%uMe!licPQ AHsC*9nMSYހfcw=7'}\mq- _4=w8Dq֬4pA3,YΤGRViyt <Xh,kTǃ&C5Vpjjm2zՖ({  B %;=# "T-=v8{ٶE\|%.11xp&?<aƈtzGzQUTesZ\ty:s+b46cCTLaSYt숌ADQ{FN�%BAJhEFm!T艽sJ)Nс!JƤ|_q?^u\`ԗ[#ֽ =WswR+!Lh*pV,ĤfQ]�`!D:; B %!2&FOĥ8ca¼!s1С49%ѥ5KQZP/2Z)ªcN `IK6q)n!Niӟ6WsL8z5{{R9�4cyGFk PCzU"r P!AJ͑@⾅U qt("C9Gls &9ةw=þ'Mg `8=Q XddH4i}t ֿow_^o-\|!zFzpd@Kfyv-+,Ì UWk 2IUCh B;"�=p!MFF0歟z-g\@!A $PbNh9�//g>~PwFmq-ϛBNH0];4]8GNxߗ7�bѭ!4Bض6}\XMBm0ȨChBJRm}m8w7Z{ZqҌTGXAr P!AGFOJ'" ؾ QPn9)u g'cXl C![¥5K S.J cY2 ~c;/\ݲ 9 Y2A&ǵ#=:p|8˚CX+BIAeA(2*8>g㢢 T!AH8!WJ( bvQ+BMQC袑3 aH0�B�d ¡P5LJKqQOͦ\հ t}`DtՈ;:P+ΙfFO[C$fjb6zwPCQ AHChS a$PdH!X$T!ӻA܊Qv9%�3"w{SΫןl‡}SV/t5moG\@cY|K7+ ºNxjk^,&} B %!<>�pQ"ٙ}Ops#,RvjЮ9�kbf Z{Z'^|t죜cB@}pD~mU*!pcR GL39g9Ch52 YN:EUґ r Ђ!AIpWC)t.2 �h 3mLn s-3Zz~5VULJc,>h@YaY Xl~_7fa02s\ T\!sNy�e)^Ch!]ͣG' l*mzu%uɱ ]/ B -9<yl:)wQ#B )pN,k6`cùG^綺a5R?'@%rvzbf.ЦB@l@K' NSYR==9(R5SCH$ b/��ܝJ:.\X-U--_ܶ71r¨E`Wv>~vlG7Ks:[V݂wͧ �(-(qeYHt$i$a>4XF˨_�uu91WIptp:G#�S"&eY6]C(�IPQ N ALCxa �R5g(EFГ$ '7t&9C`zEΝ}n{'uu]($J<~0J JQpy󡾤>72X&uYaYC8 9C5W4}/+>&Vo,\B !bapbRl Y��Gആ2 GX| c(wCHQ 4 i>Ņ* B(�"x8~ܿ~ÑP8x 4;oyx`Q@javT}s*渲 {(5@qJŵɺl<8miǁOJ!Ltԣ9s0نsQ)Pt#LMRd  H1d nyW/-U-BAh3>1R|~e.C!TAysC$ߎ �sz'()(AU*pe �+;vWC)2$K J0R|~Cjj,&FD LV͉rA5jEADcilAh!9AL($ vl<NO2C|a5Z7E(c[(Ҭ\{2 ˰&ȲB9ٝFRlg8V/G0D$In/P)2&cƣJب;U]Ts B Pի5W4c#uOef' jm&FtwCk!$B AL;~XRg:+)sKQ)!?r�9ošC 3PdqA8bN zl+qA>UpdG8hIA >ֈ;a>2XFMt+!CƑGX踛j/+T*<B!$bb| qvoqʛ!1M. hDFa~JN̮]mF!�7<l>=�9[17#2Fqk.c PCh"2 '6׌SfN"E -ܨEՋ��t6sTB55j1s!$BAL+wB\:�9Q2RC0`_CbIא :�8>aX;\ Etd<)Iᱱm#ΞunE a028nRUA5.FV5`d1mpʚi TrdAi*e0[ _`QKqpiAZ $bZqfәIA*MʳXΞfU yy|gs1CP7(6os0f<%2ZP rFԌCh&xJ)�Ƿ%MNxɟ83|"H9@ϑNo22j= EF Ђ!AYf8g9mPe!!L_ͫSCݜe2B3S3ptA 5zpa|"C�LJ Lw�2V*!@HΰTĠC f5eO> Y'}d@NpdE"[:K,x !EF)Dkk+j̟?ŨYg 6__nfԠǰuVݐ $bڰ?LJ& xndI+`Ika\oϰ  A�m}mxh#J Jpt5ԗԳRxEFd4 Rr숌r9GP~-`ZMq .>blؾ}}LzA]G8%. rPBBr)D{{;pcw χ뮻}%I'?I<SǏ矏w>]&$lj4In+! ʹy8͕o_hUɵ'6! l Bo׆mqsKpz>B�eF#{ p_>ʤ'~vg~7|39ŵA8ɻL9qCHL!.\r%nVvi/~o}[}gogŕW^ �k҂{װ8 iÛobE 3WU7l<2'aiR�]ȟAx֬p+q9s/oytA <9EF'u>5�P^XQ AhЄuQ+ƒI҆ht8b wDQDSS|> >,b�q5wѨƽ.$ 6ljߔQ?QNo 2~UN2a;{vZ_�]V5||[1/~#Wrªq BQQ++2 0PdFW,o Qc>&#u%uk'X).Tddd8p�q]wig֭XreO?###ػwSjH1-86t Cq,PLba.: <h*kJ:1)C}`=IAX鯴;s P^XSO%!(U%%BOa1P!y?Up{|Xd B;#>,.&BQ2S;X`n_7|}0s̜|[gg#v i[oC5ԕQ0[C:B>zpaĤT-��,Y=;ˌC829qK1Pd#P�^?W72 Bqr9C�ͻEՓ6.ʩ.`;D&%ILd4vj SOᩧ߯H} \s :;;avmzQl�p8l$ lj߄f46Ũ.Νfr0=fI3N3;A(BEhds�Cx J JsjǪQ@X")/}?XU4�}7dl6IF1ӂPE!$̺unݺm[liiw^p!.dݷ?/WU2l�� �IDAT\s5glMPd io9*3U!y}}(`V,�ҚhkC{;ff@0Zc4,[7K\ umdž!87`e,GFæjMe::c-lg+�n]}+8sJሹ@ 1sc'�x!$ꪫߏ={3sLXhWK 5448v~n!ASAl=U~H ŒCPC0q E/+'ݘ%5K��lvu\`ׁo $ḝtA8Q5vZ ȨZS^'\C8U.FhTAG"j;Bj "oxS;Se˖ $.x'7B );@%M0&2Z5k6}h2. �k�|H&JDqj*2V+0̉nA�:0Op*PST z o JyAqx9F]FDOOOζh4'|UUUXzݻ~g~ӟFww7^<3tVLU&_| lj߄@V-T`8_YOľ>|j᧒J J0|p2! "JߎGF 4)-,MvB;VB r-Nj Iv�"妛ʌBSo8ЀcǎaÆ ػw/qxo'D[[fϞ 3<7pv܉*g?,7քB )ϛoq;қt"cR_R׏8tHgIQ_R֞V�hz Q� G! N"?.!(1g>{ < pgƅ^<N(W^׿u_pWƓO> d?մ!AS۱}W=Fi9vB%2*+m#r<G.]? B/ǎ;�`#ɯFFkk ?ٍeC(Q &<2X9.j;.Sk^{q?8xG裏:qz!$bb￈ܴ&㸀*eI _o{�2j`I5k,3OnK`|B sA8ƨP2Dz I1D#f' !ASS|c(z QZP)"c'�it$:BO!f;Ch?|!qC(w55;@,dd4* d MeCHDB )~|gwpǙw̦3uϙE�,B�?c~KQVX3N#&! &x`pt8ӣ9FdT֨!Ll!Ht�!L:TCHj rȲ^ u%u?0tEAhrB 7. 0Qygm5"U*gSZ",#.U#%%�7;W30) 45�9p8B"| kiAZ $b=m>`9P32]C ǮxIRc\`ѸG8F<q@KE2ġY1Rq !$�k,3ɛʘ!/"Ah@Q m}m(Ȩb aE3DAĢEϛP`Me�`plPq"7KqLru5NB M45v7A\2u"Ah@!AS+KuQ5|?As`z M7lʙ+M=?& 02<9@*h~_dɘ $�PHk*c=P#TB &$ rca|SpIo0r֬L=7?%%( BEF``l��ّсdmfdj0w,M5q_ !9AhAQ V`8 թ!$&EՋ8Izd #PX-@ZS!)ATh9AhA!ASp4׼C(F0jV !1qq& =2#{{_ ¸D5zHqH]Fy 7_C%2Jty )U` ŤCha1q';=Q-׏펌TCh�@pF#xTQQÿK(2J$ rX!Jd(Q+(Q!,/,h*Zc]F1/d%H#öMEF-Rd  h5CĔ# ƙSd`]`|kCp>чr99 s.("Aq9AhA )!}M,!$�0+zF))(P4h\'P8*D!P<>T+Q;B QGh1j )ȨW_B"҂Ҥ Ն&�!̀WBqKوp!i!Y:.!$B@Ĕ,B !$ȨaAФ_�2pU*xE/؉q⚤Chgd A9e bae&j:b) ˒Me B-!0!;tdƑ2@Ө kiAZ_ :iQr zdԊ;Ȩla'j2ΝB:|q"AhA Mš"D"HNdt$D ~S!̌:TFRd 21!m*#A05)DF#€7�l*O44B� P !2#zL \�e bJ!2!4e`'BBID+Q-AH"d 'FOEF5B�H`~"CCGFySQj*CDBRDȐ-- <JQs%I ˌEF}GFp>C%TU#zN�A5�scÑ2 bA+ #�TCI1h:҂qlah?sC(i�9b&rܙ9lXr&2J )E8�KQaP(EFJQ=aHʲC8ڗ|n !!XdB B B !qU!EFee�cCt$K `8 !܂9e4"T` $$:;]CHQ 4 AL)фCh12*Rj`z)J Jz�"CEFS4U 2d>2x !9Ah@R@<a4CHpJ !kP Q)DH0=�I(2 &KCh"2O4r HhECĔ"D]`<MlPsH#q- 233 B"2-As2vzE9D1_ ;B"  B;jCLtU$pxcG"lRQ Ԡ AS|k@ib 2J5D 'ݩ ±0PUT�B2ȨB.ҜvnEA(A $bJaC׏CHp n�ݩr�Cd˨H8j!(A_ Xx Lߗ~vdD5DQbψ <>|u1R��<qUsB�@uȨǥs A $bJ I'!B PKx fa>5�Me�+x.!$AB#|qCH!Ax' $fB>M)2*(ikK'J Jrd_FS#52 B�2DFddBr Ѐ!ASp,l `( e.FjȊjJ0ҙm\Q AH!Aeᅬ/ (..ŋq}!gk.]??W1{1,^@�---x[!I 9qs]FEDMeLxdԐ 32ZVX!! B茝i;pPD;A*q9`WXf ^[.y\GG;<<x?//xqE!f<stM8c͚5x=<|x$c{84H;eTXSiBQQ( B1=v;T "o~H$_~/�x㍐$ O>$Q^^x�p[nESS�`ո袋Oছn�a|[¥^~�/} $7ߌ !i!CjcMehhK3_9 H!OWN1>flAAkwsK/MA� Ғ~�qFB!?cz/ԷBw��2j6ETCHd#~_󸒂Scs ff:d !"9&ӏ $  HZ_"/} }9oG ѣGӃUVO֭[_grJ?o &, ¼jBNٔ! ~.Ze^3H]F'&|oiw%  (2j['>SO=56���3g̹̙3 Fǃ PUUN|c(2@!dB A(Dc'Ljk } w z~?yÈ q+2J!A @ww7.�>*KQWW[o5m0~?a|>d4œΥ|_ͩ1\n]FJpwPM4ЈCHӾZ.=.),tj!iXQq.AL$-p}ѣػw/��W\q$Iwߍu% r?:: UDrO~+WZ~b~F?ڟώ22TCHS\PU t!l*kɯP#( usC,%B m7|zjR r.2?LFEyt4.TUU`x<30  <ALwv#x#VNC(4L/UC9;xq݋ɯW :B9="AhA+ DQy,k;�b1466^qp)$uǾ$)X XV ee61ej -e[,8$QA( &Xr%lق}elꩧx|r�UW]^z c`߾}꫓>aƌxG2GAqq1>O:".űggJF;!4BCH]l 5 iGyB=Txr9ALTChxpnÌ3K/W_M7݄z�7M<3 pw`pp> /_n!x~wnV\s5{lڴ 6l<@C "'`,>6>؉UC82nK9!#zCWCHhԠ @˗/믿{> FGG1o<<뮻5557wމ{KC%9_WC=fϞ'#W;* BYY E@5#0"_PX<D䧴 Ϸ02jMvo*8CH$-zj=nɒ%xW =7ވo1S#)͎;PSTAG R]FB*2z D8խ!$M� >ƾ wHܠi! B鳢!bJ,]bK;VBo*3" SQ#c'd&fǙŗHLRS &AL*v߁K !b7ˑQ1-2*ʋi8v}8 :5qC1A9B/0Qd -ϊ IXl {{9ق0e-QZ,>~,V % Bj"2> ̒5NGy!$B @Ĥaop/r<-+yFFEAdWq2� ؉'ح$1aH5]Fer8&.*cWOR5T czhz|uӦ0Jbppm}\CMe�LO>N ‚DS.4v 1iѳMeMٜrcaDQ<ddj ! iVC LܹLAIHSI�r8T&n'w=>.Ah1=V4AL ;!t mu5"iSC- w4v"Me:Nt B &OĦÛnyr[ ̷H4rc'CMH:Bh)A59v"YC(;\CHQ 4(AQ\䅨.ƝgޙC(I:i40B7�h 4XQ5&: 9AhA W3܃~uRo\Jrhz -?GvnѪ*#AfQ.xNnȨz=9qӉr Ђ6ZvZA3+9_�ƢX2:"3f�$݌.v98MeLwuz!9Ah0=V4ALJ^"tm{-U- daH4ъ"i4v;$ݍ9qA`C ΝCM9vCH$ p-C!pJ)|EclUj(5QNñ$O*2~ 4vkf|l"↎)4v -NJ II8֌ 1~$:WC9^QLBNDFlqboCM �uuFFM!AL$$ p-Q~ca8jcdT():Gw�41EP60\[ݼ_%av w2ʏs(AZ $µ !dQI{d؉9ݢ%]8Ҵnիy|Xضmj|V-2*2$d{²2ػ7wx`C04dg;Q5NC!AZ $µcasM5F"v8o\_al-ydT(t+_2 SOl~⫯NY9C$ fnBދqȰe[pGd2F!`K_ߘlB &Aب+/,P�"vnߝѻPVU{c?0{SWvvm69q)<W \8!m#LpiAH!A $µ t:(Px]z8G-w mk2bwDs8_}rIc !ej\ଳ& 9*.j!aAH]F Ђ!AhS>v¶BIH5JWknOܖ0stp2 ‹/b1&朜?gP}8!TO\C�!O47g τl*CQ \� B \@Gj%I32 �b9x\t'zHaUPYɴ[�%%@MMjۼy@KԊF"~,Zk�� �IDATľ>z4 A; B�x)>i5f#LQ &Ap\SHޑQ聠�oMeg*& rAXQxLYΟ4p]T1Gy8v xu Ȣ/XZ5mmhE0gUndn0j0Ic'p$ p-Q]T& DFaS33g< Y\fsz]"ON/mKM:6vC?7 laUl;RCh!Th*c>$ -HZ & -+z! DFUs�pI׭cc ];pjFyx=;X< HFjbqQgsDzXGL ;2*e6xz  B \ee�i*}iعSy0EEggvP:#u{͕b \}f> uccVdTL!lr9gUnْ:waq1S0&Ō.d:ɇu%BAc'�gS#s(VK8r XMdqfg%A:798xxY֕_hjʮ!q_ !Ar 36d Bg_ AȻ<hE Q)2J*$ p-FN�@H/rP0RCsn`f>A^%AhJ#'Ye|rjkoLmSvBɺ(fc Og4݆Vd ²2wrAxwZ%B A#5\vu=%Y72TC,bf #'RdԭfR޿x1{m_}\O ZrK-[=-BY2*Ugܜyn t*21<>h[0s&CwEPS AHk12v_�86t �v=-t"a,ZlAUszĝ0J-mܱc\O0sW~=lgޯ]@s˜˻0}a:1&Rdc5,a~3b#sZ B \2 ІF"_}͇BN!g"m+@mD:˖SBl~f >4/�_ Oildb1Med�*zmm]VafB)6֥8`Ts| -HJ$YX|L7Z+�!5e4+V�ʄCP`b4N##-;2 /6jT>lsxA`6׀b?ٳ[x,|mjb<T&_0 &(!4*[عZ!$BA�FFA@YaY!J/k{z1PI44[7rQ%eud4"q ͇Yk֤3`V_5iLgnS0-E\sk BNm-N¾قБ.R]Fc1ȑk \z)Z T!AH+ ،�#в²Ch !TFV2lϲ"4b Q'Ah.6NBO.ZRF[[Sb5e˘3瞫|ߚLf7RmQ]Fli'#£GY8]t] |EF P!A$eP!2-e(_!ܽ .x2ۙz{a}=;ъ !9 k&AK_qpE3p!TÓl& ,/g?6oL˩.kk`BQ AH+$#5r[Nl*2zXJWQ4ko"BQd_!yǺ *9FI=!Bq"_Ք*955֍u! vUg};-r Ђ!Aldlq5pARRpWMISAQEw/ݵK#d8f8^�K[hme ?FS*WB&$q䦱qbѦ2s؅YB!AZ $U\r ~}!T8�|,GOho`!B.JnfFA,[+g[o>qpOo c;S#ؘ! WC(Y|96zw0] ChQf nQdr pAw> UClGS0 @˚qX BneA5Ef LvA<T5SP Q4"Т(hkcٙ B>46Q.|$F$jmFc'L!e>,[Zw(AZ $5ìJWW*29n?(M&O> |{=ρP2]C8< f B(*Rw̙ʂ5cH̆2,,`]9#ܹz9F|czC46230�2sfr,~һ|QAHQ AHkTKk*RC. e~&ns^xC-2Ifl2jzR{.bkPa?{ BuCn\h/b|BttK*KJh{ 2|^a<&g Lg=rZ"AhA aW~dM;̖-lA!Tsee_c.2B@y8޴LCsP O}}=^QȨ9]FmcMyy =xlH9ٱl& ENT !wO`z5P͹ِCH$ p <* i79r]߶-32Dڵ[og42f/B.bgÇsqUC3^F"kNpAx6`ׂa!ݹ.x:!t|&(Ei͈m`L:;=~j!_cr Ђ!A!}^w( 9.eǮ^~!w.ֿs^Q>[Ls\Y\ڡ %K!ԊN&Tc2&4Ͳ}{ ulme& ;}фChEI{z09KpBfAh!�2uu@ii~u B \C <~"vuu'?_Tѭ[Y5kf66LDScb8p%ABZ(QWܦtA $uAX[n߫ ^gЂG44|r GFh(FE! YYO)|̙VO&d0fhCXW<OSXlB !Ahnf6Y Ce  W= *h;JUJ#Gæ5we tAd #3Xk"q͉ yj47Ew>u۷lp&cg5ʣR5GŢ-uCC笰]LNI"|ao:`|B;A$ p ]]Lª e lia {]F}!\2V+zkjV\>z"[փZS\؅A(̙WӨks8!�DI֭!Z't(yßHD,`H ʚc==AQ AHkbl(SZr+V�[C蕊pso,sQVCȢrQr#j�w)/fNF�'d@Fmc]fjn# tjqae%{=$諨Of#5FB1v %B AN͜ U#Nۊ gsPK/eq.%4"=2Pq'Rێ1.12UỦq(-P"C!X˖ȦU$( =AʢfehȄfd!=;U( njaqqfݩpQPP[iB AH+c 368 `1 (%�VGfG#Cȃw"DȲzd-FFC#bxt=x-KKEZugBwv4C,^2@j^c;EX462q+ǀʢ?eԢCr4~xX[Dd4P$I Br Ѐ!Awlh`phT;m+V�ERbEf ̱?y9MeQB U72o!<v9O 0>FԞ7>> B>aݿJ!`l egJˈi89zC9nza:˨-ZBpKcR} divuCH:$ p\h8j,2WuZ~SXhnn a&�m B>r¨C(Io21^d [ƌA(IXc{nnB@,;rH5tZM\\4qa`z%A27Wh\?6#;vw B \A ±Q=H-p~td`:sبxQ#5\*-PQ.:�qQ H60"bձ"g`A};VW+_}.FOtv2NA/FS9Zl6n\;## MspVR$HXwd"AC W |Y9=ax\Q沤 +?v<Me=50;|TPz]]ʂp.6::^c-Aޫ"VB(Rsy-Q^(2b`)9B(` LAw-/VGO fYA@ Wń $wR$!T^X|ܹ 2N52B?0d>Jl55, º:FߩNut"!j(| ܱZbfI B ТC(ILqf(5qBQ`ܧ72ž=�cr %H :;S̙�arwڲBǞ;9_+zYQ(R3cӇA0]lA(vQT-N\Zq Z .TTGZ['ח BQdE\ѴC -F�@opl025ˬ#s.aCHQ AH+!X|ˆayyH%KRR]:FCW2!tkQF8[v=x]1rA et-yGtr v pAh 6<qCh 2*dA0rl! B \A ,.(Ɔ#w3X#zXSߎ\(ێߪC0A+.\yNdj%gNAQ>.iV[ BRwEVl"eٜ } FF$X8 h 9Ah@ W� !ePiS~r&d xb;%k XV)Z|n'E&Tw&b"//}'JtfΆ2%Y]qj'C(~VMz<l]Q9Ck!pv[[SG B &H5!�F127NzF‘& DF}W-\nY{9'NW~S+z 8lN:IyL e9SFwq1;v!ݍ:޹6/$)4&⽢B LRd uH1p+!=a w0:#xZdG$A?G٢"1WJ z-dٸ L XW/g1г?VmDk+}CWJB# e8n=cfy6]`$ȉvaA(2JL){=vmXt)JJJ0g\{g'(O/ ;'@>`WIbDC8: X/\*2pGC[EgSxA0o KE ]\on8\rJj;o(cCj BC9n!o@ !JpJWmxrYN uMʲў=J!1W۸꫱|rtuuʕ+;`}݇fq.A9z4 !AHĄ-Gc�L;mVas3JvddTmap D/2 u}>Z #'8vu} Yѹ B-FF7ofތFqFS[[SOvzxl섾ChnHѡ7 BB{FIz*ٌ&#VTdZ{Yļu9qMɘk'|2~Wc\r%X֚|BQ &Nf_ca�@�fe\V+zYQZ,c ,=`) 7 4j'\f]4Uw͗?5xCΙc!4Z?0=O?\dLC j-!̂0]39^>w /|+NF"q9fj?+{S5kdA�8餓d޽cȲAcz#$ pwgt`V#~G$ʨDF L8z5�[d]7XTi(m7J3]SC!nF±1rMׇN4uBks' Lw%,ukǁ'075B؅!XeȲnT+:\p(//Gqq1.rW4 AHĄ=r"e! pEE柃 BN ~ݻ퍋Lb:hC;l #`Cёr.u`jxuk+u!21JDfʘy {eKa!N2jD+1EF͆ ىkVbp ~^xwuଳB< B &@*2?#iuW.*S5B x~A>zŞ<x05N'򩍳UCmlT?nf&/7<6a~=k(SYiN\!0.~zC(%33bYQ;0)ʫ@vAP#L\pcI4jԈQM\㚘?DMJD~q7n(WEdA}U]U]U]<4]t4sQuΝmQ_$+eIB�Z@ARmD}4hQOL)SlT` /ĨQpgOɎN8cƌnwuWi;@Ru*MX JF[RzdDR/5=ɤy_޽ea[>rBeej\67�� �IDAT T (^6"*}5qJd4w -+b Wa8- '?A+^yEN,_ӄ'�L! GO,\('uA!$dĉx's~?zlCCƏ]bڴiR_"vF*PBWhr[& Oduy BU2@v[BMgR'v] ~Ö†iK �J8ڲ!,P1b>*aX@94ĦM7r:~>0cZeٽ %tbW f8d1%:{!,(!TjLJlڴ ƍCcc#f̘^-(ӧ6nXk]PBJs̿sswfN.? f=ePV0a=|eK&.aY(wpȐrZ*ө8G~ %KY*PF{L{X2EB=)2bI ½}6c�9)p99S^oz{x1/Ax`trć0@ɨ! 2 w,K];v`„ Xx1~i+qetRѣB{ $TkE8ºR2jpI'Vk,EaeSBCTvD3<uG .Iܖ:@j };7ThSSnrof8P\ R.Y\1cJ/ J{GI%XN:t)%_yEaIInB'Z`�Z߾RU0lY!SFɮa8S1k,L:#Fp_CCϟ?ugヒcdžqRUC{X 8 Y-_pF2S2J̈́ll!HrBKʥ^޿|"R?}x_W/AKF+)-.e5b}2 lO:4XeܹϩFN77vRRܕ[y5RUtn>+8B_CJ9!%%Qn[lKFɮ^z cǎ(.r 2,F©[os?||D߾}qWT׉sRF3={l9s^@mdR/* 2R[+?(Z쵤dSt?Di;`q{olbBRһjYL Ѵ-~Rg*:JpJcG9Ys&nŒO:x=)K~=�0p`@A!L@2eҴ)@WU9PCȒQ C4<S83r~)̜viXhn&\|Ř9s&?|;,%jh,T:! %)==D--*'gʨ*2o~R28jW` K/m9,_ \ϒ%6H:ƍfVBd9˗KHK뮳KO"/TFP BM [Y QDtpq``+! "nԲlA8`@a9>9p\!$�/ Ài?'a΢�bƍعs'-[;K- BBH7w܈hlcL`d4ī0@c.m?ҹ>Ai ps, 5 8ߕ,!T0H ( pWJF^=Ц 0~|^]pB$-uB@!Cwr! }/pTD#+cYY2ꇚy׬F(Ahk!LJFKC_Λ''ڶ !AAH*sn޼Rп?pm@MM^hhfgh%:̒~b oOe۩8j=z�v.gngO(lt6?T%@0AX -N~+ZaJW^)@[ F1fΨ{ Lɡn] l^7VarqIѯo@UC}}Rg  !ˊeə!Cr0! 0q&ԒѰ=q饲j{% C;|S.MltlI}T|1rH>KTRzcX!'\ :Nvr|4$AaΘaoklL*,A_ʶbQr,m lPSXl4CԓEB%,Cq56dZ 3F!!j44HCȆo!EgJF^Be=~y`4waxQ3Rے~ݻ8',=ac.R)qgvOL.Wu¦&%ǫC(7$+&q+u8878tͽMҷarqGy'NAc _¢ɩ%|XZeB{q6MNBܠ $T y_ R2ș;<JFB+~-N\S_,(s7/UH/wxY$ KJJ+zPץOuNNsyI ZChFq#poJRcHRE"{<(:_LN"p\Win)7 <tj; i>BGhQ[ |YN1PB1o3KBe`d62aʹLZ|zUe(; ^uqSpfQZ/\�쳏-\(kWuҥ⼨WaK|Ez\_JMrQ X:۩p#ȬQСrF9_G I.^L8A/ y ^Т@'c'f!,- 43sE@ B1XB̛'/mfɨP^7eM;CQ2j8"~ y/Zqx<GK֭rwdRGT ۵} qKT =V!ˤn)L *a0:ĩ=|?�8e!H̙r9;:ફܟ_ .] B^ v;L-Ei)GR:/A!!j%:;K�cdBe|BSO! a1ɢ7E׺whY\ yO>JgO=Ux[ Fɨ׿G?}8ʿFdEyz87*7&G$dp%{O\#ᖂfڲE k5zBi*8c) xo"*~&~x!=?B $T Q B@!7 1rݺ촹sW^čAuQeo)a,N.9MM2b];_U. 8a"Qr裁sΩ0`-�oA,urr^yetZܱR~g�)ܰA?4�* nNU%(CIl 1CG;A񁂐R6l7͙ d>B7A8{6`4f$N*%1 M̭28\)tr%6@A c$`%N8&J^Й25gyO&Θ;os iUOAX}DZ_ߋ<|8`s[&9&z50e !!*̛'QZ9�XiY05{,]JF*SGK ެY"*()HYۜ#'j_٨ qr"kkyPPqFUp?ATJF(/%^8g۹eMTXK{5er揞x%qN]!KF !> !3ov~ɥ{سѴ"k0!Cѣfq GvMS t|QUV_P{BӀ{FeS:"5k/qP !IRR,nA BhBe[gX+ QY96*c'!~PBܹ"ڹ辰e1 =[.uQ呪0%Ak/y|RqNEIKҥB\(fJF9ݺIrXͱ o=d> `PaB@?)W^;"! >vB/Kx-u"'yM B0owe=˙tga l ,Z d _.4HTkke[. !;J9ْQz@reVK?F@=rB 0@NfoޖJI) q/dd7;JiWc ! BBHUJ2%! B@t{3_QU ;P{˸/0-�z H !ٸQ\!7gLMvUoòNT+We1AH#j0O٬,LcU`2s2D\ '%= :oZrZٲX! d=v(;~p8I7.׭~; no oϟExԩ4 +P5!$wo$2NA B!L(&!ԃZV`RCH񃂐9*>޷d4P@U/EGBQk킰kWqTK|@~g_"�G$T墅dNx BCXB@ʕr^@?=VN$['Lj IU <|¢)#e4lAȱ( !7r"maXF$! %fgKoBPȖfAWz…2 b (:CCHpQ'#2< ׽aXŨ"XLK9u%o\qBH̝+ nۛ@=IG W$NLSFL^2\�z h7E:HtNRFC/.MZz0șCCȒQB7t !0KF۴* b%2vB~9T&8'W}{#غz30Q]Qг| BMaB[; t&dIa=;ABH,[><@�R6:s|%C6zSI$=N$ռBbU2L8B@! qABerzCj !QBH!Q,3m+_abah(w`io߶2ːa!Ʉ6s8P1pT <h/ C 4ec'!>!$DizG"BzV2*s[h\Q ޿$d!I! P /Ex`mja{-K *e b(! :ȱ¡Ίzqq5M:dJFCXyCj0iRu5%f`1q3zA,Tvw@KF!KF !Մ9qqڵb@^`z]EӹğTPˀL_B x=J{_I̙Q_2Z!tF6%( !c>a=UhPpu)\R5v˜@nnUyGE6TʤtM'*NB $DN\JF 0>6E&!cCػ̘,\4dChEC( !|ʀ22}z BDe{CAuP+ B]r\ԔQH z!$AAH_0S2Z A(T4`fp !q!\?PB=!�gn$Tư X'CC)7( !S!IdcңY2CdċlɨDܞs*M7B�8jAI& +TBbPf$j\! ;eT}doB"Xa2n@AH*P2(=F)*I]zگ0%*BAH?p{e L%qķdT9z|zwU=oҨC>v2?( !0vTeb)SCHbE T+ 3:C]f0ud!t!CH&\B"CXQ�H%dCHZ=tjY/i4ZCH񃂐9az!�2B#qA BM!f°P/=!$AAH_0]B~%~L<!`<oPSaLRFwEP/^2B2ʱ7( !Sla5KFkLMCC SBbRY!Ԙ2602sdTc(! BBHCXՒQ]zz%$F~!°P *c١2a;j0=KF !nPB"4!bhM€.BʰĉDVyj:{FLI-)T&t !PB"Dz&9K鲐XuN°IhACec'CH񃂐9a{ e0B,$N8{zuFC,T&t !>PB"7T)CHAH ,Q #FB3aZc'!d(! BBHLDDhwȁdKd w({G3eC(RPPX2Jq9~aфDM; 0af8`t?JnM <ˌYH;KF&DDsY2J񆂐9~a\UA 7AhZ&,KBbEv 3^aK5=*ñAAHb:^ �e8 5v!̜H! f0@2e@CHu:I݄)s QafJFTABn!SFF 0AH!!$r:9)݀ `! NrOf26:,4 1L. !B $DCXP^$T&3v%$V(*]{ :2c'ʘ hRF3= AAH/дLQB̀Pؑ-)90CJFy솅iCGBO@0%?( !#nZ<U{j""Cͦ|?NT!�B !!$R tsUyUUf Bϱ!$qC"\B%u5 i##T9R,C:o( !Y:MF�T5T&Yda0ċBߵds#CL rK%R%BJCH񁂐)J:1(M& !45}X$^dBQZ! U2jY@RO;B'T BBHfª8z]f{8a02\JF3E0t4X002%AZBg(! BBHơ00PVF.I0tL/<vC|?45eJF8ZT!X2J񆂐)*&4Oɨ!d( KaB rdJhh0aAAH!d(! BBH vhBʐa1}B+C! 0”Q AAH߱~j:KFZ!=4�� �IDATŒQO2jtF67C CH񁂐)qw> d(IܰDQ 02`p:ARFB�!!$R j!L-P%Mz=RF5h0L ,Ga9Z!B!!$Rbt’Q;BeL =Ӓ?:CX$T&B AAH =U/5IɟC-(IȌJMh|ͰG|!,*SBV6B\ $DJ20<KF@4sQMrB8tB#dHL=;A񃂐)Az 3kCCHi!T! 3 C 9 !AAH@aCet؂0D鲐xQB!GAʨCB:( !CPI墚˂0JFUa6T 42?%ENdRF]NU:?( !$T&%"ܣ\tdkwB32Ch�&4htCCPQ)!d(! BBH+IdA"#Z·j+ s͓͌a掝(Z2jE24B\ $DJPj&Hɂ9=,%q4?A c74%Be2aBM %( !!&¤Ch顟'$L!Lʨc7<Be,!D!Bܡ $DJª B0R2C 32c'isy솇f!,*C:w( !MU9HɨC-B/TaZ+Ua <LZQ2ZtDB *CHq)~aJFQ=$nXHT!4L!OfCMOء2RFaBU2ʔQBHsX*C(eU9J&ʨB PtB\ $DJB-;{arY! ٮDR 4vBz)e ! BBH:fs{LɨfJHAb dh4dܴLʨChÊ=! BBH!̖dQC('3BA 7-FRe( !B_Pd ӄiYgʫ0_ZKF!$ BBH(A_̌!(I  ̗[6T&Ph"#"Cȓ( !#^=Zdԯ49v B+D/-Jfz!ݿ +t BAHbaBeTB-L+E5y2|0GH*K;!!4,ӕˆJFQB;H{f0C6'"@ʨ!Ɍ!LI�#PBBܡ l.N8֢}897oƎ;gq֯_|{/vڡwqG!P!̖ZLj$1##MP4zdTCd4eY6jZ&`!$Tdw2sLL0r*t/ƪUYr%?pt7t6oތwo#s.|;s꫸⋱m6O5~EBB58" lɨBiBQ%4P:JF2�<e @R!$T 2hllg &`ڴi}v̙3}� >{,s�l߾W^y%?x<�s9iy睇.]qLɟC;a1 t*&{#PdT9QB:?X2Z?0>3p �[t�pG>+�ॗ^† 0iҤ_xغu+/߄艽Ch$!B@$KKfTsuQC d(! 2xѩS'X BǎѹsgL4 ;w�Z ֭Wz衘3gNw}>`躎{/߆h{!LHCh!$1òªBe2=BeT(tB a,Zt'x"ƍӧwߍ: �f�@]]]a477gH$н{ԠW7"$:0�=9FKHȄ�=`ax䏝(*cQ;,%2زe mۆ .�'O�xhjj=܃뮻۷o�iӦm۶ T ۷oGM"M6'?IAĉ1qĒ7B&=P30ܿ=0A ӄqu8L C*B9W@ak� ĉq=୷¾ �R';vyvڡvؑ'O\/AH(Uv3 kB CX -C�Q=)-'T3e2`!$�A޽�={پ�6nܘ*uffN0MMMذaCsT2jZ .Ip8=!,*¬CHAHq Tʕ+s^=zwѣy睂ǿ6lXA�={6L̹/!usZc'sQ3LZf섛CJFH}MzFCh1Tar)�{7g_WR)y�oxs /EOn=z4u놻+.oǏ7!$zz$i,dT,%qòc'\{3c'H!rSF9:8vRUCXÆ gt~8^~eL6 W\qz�+0uTuQKyfŁM#$dDž^SN9wࡇ7ȡd!4c0v0ӯP3$Nq)(rax8JFʨBXɎ`(! 2ѷo_xDZ^{aɸ⋳ӧ^yg?_6mmݖT\pHROo߾GȮWeYHX8Z9VӲܭNBCC9 6v"ʔQb(! 2I&ꪫpUWoȐ!1cF=BbW:^BÀH2Md ِ)/%&I~^$eTF9!!B"!l2dJlBB u_BJ'/s:$`[MNbax8N XF!Ce!PB"!̔UU0v \BBJaZ[N:a6tCh1e4<= VQCȱ*BAH;-i)Nšoƍ}^؉zliڂ5[d3ea(F,#23v2fSFB\ $DCAhВ2?0 n B.H̚%6Uy- z!�X~�F�,Ch8dgOq)^alBeLGɨiеeKHI(AbaD$~@^!SF#.CUhd!!$RbK$`NY2J40a23v¬] Ah9CeF#qt4ϔQFW2J!!$R<8dtzRdł@c#йsKFa: %=v=!rKshnQ˲20i !! BBHPOs,%ruT(KF!{CD9mshjzҵd4i KF !PB"%=@Iuw5T;|{-f jh: wҍKd4eB! B�n:dF*C!!$RZCCȱOQeb,`ĈJF U2jXm\u t!L%Rie#;ad�! BBHH,{ae0=NT9s<dvÁ.]*ZVC8{f FE ʨ6gKF !Ճ)LBc'*i|Pw6b-[z0MhDBC:t0*) )jVp{ +;?1o?téEz_|;=z@0zh̙3'低7Hi%)FsR6Y3,N/Ⱥ(ں5j \uo m p8Z)Lu$"5MQCȔѐQ=mrb=6x>N][n?8=X~8ꫯX41~xL2_|1nV|g8#x~AAH*'0�{Cȅuy_o |5S>g9H!*[6Q_[O0J8-Lnft!ٕK|rL<g}6J?A:7iӦ7w׿ƤI/#Hꫯ7Hi a:rY2B֭w{˖ /O-eZ|qU  Tja0-3=+VT{/*GFlʸ99=˗(\f:dWbȑH&9!C`6mzꅓN:){8S ͅ_( !jgZL_1Cx1B帽bbT/酷}JJ&&i9kPCmpgV{O*[ChU*eT m\ou�SOȮeYXv-w{9s.~衇b۶mXpaXk( !R!LIT U2J !J}4d/'�;J(ƍ^Y44[5K.BEz{`j=]V הQaA(߷LYd䡇իqꩧo͚5+خ^:;H!L)YU Ch404֭v=T}-&NWٿrhh�]9۞|VRZV ܧvͱr׮n8xOp2! "- (I2e N8ᄜ?|\x5j,RuciӦ`{۶m�۷o/mw( !V!4ӭp=4=z� i]6(ɉG w|MSDG[6:ope}2 oCةM' �Cx5z+0~<CݟJ6c섳0Qē'' ?~<viӦ=ܮ];ܹ`; $DeA@aUFd&tS!t:q\\sp ֯wQ{%q#s9vzN:I{%Iҥ=yF]Ϸ|?׿uN?]ʁA 2B[5RQ2"vEHlڴ ƍCcc#f̘^z}L]]kY5k��{~( !ɾ(hC2j\2io�d:�pAS ̝AggO4#7(N.]BqS\AX_[e8>p-_B#\x\? 2kn=*zKN7aW]GM"etɗ;v`„ Xx1~iチ7l0'Gf͚ۣ>ݍ=Hɴ:dƠd1{a%> D5ǁ;Ś=;,U2 �Æ,'0^mqt H cI>]D9p 99Q !,.2gG)۶mE7vXaO.0f%K ow4HPY в;fNbRaSOŬY0uTP y444`H;`ڵ(_~=N & rR $DCXՑCXr̴i=T|W]2E:D뚔JC,_>˖I~={I'85 oπQ27vuN}a\|KgHN@>t`b6ۺ5wU҇�~Z~e|$y qMZfRF7n!iN!$K/O=ƎQ\~2dHNw|_Yg믿wy'<HXk+QJb;!H( N2ɔZs̫ı+W#Wk;uy^89:)U}4SQepq%lӥ]�mm3Da? #rcM 3BG%CɳN)\x3@ġc+'^3։#1+!ChڶP*w_c'CHv}hz Oie2:y\ve۱}v ><�g|YCHPf9V2naYc'VdySw%|x ll;:,lп}}hٶlYxd ? }ӟSQ؉fm Ƚ,Oz"v2`8^>pi"<ӅnMw˶9s& ' ki' %3gJ 8 ;!4ul밻$)W A8v|)x饗`L,1 $0зoߜw_n:lٲ//Hi5UChX`Cr\[W]-`Z`(Y`.ZkJ! Π[LCxrY6񛍘ڵv s=RF`Hz~0@>>ŸD?cG}{>ΘO[)ŽR[r@ _>d$ ρ>Ƚo^ass&eCYar+dG !!!$RBeCؼ^)/GpDկ¿e<R8@ BU2 H{ /)t cIi4)S JCRF0 |A;ĝ;t]@�R(9ӧ7nw$v=Os0dF}#*us={/bX!Aǎ;A) BBHx!̔$=JF z-;+OY*sg,sn!xv΢SeΒQ@c)])| R\\P Yoa3HKdΥ9;wɊ}9&C, 6M\:vrөS|s`XOXAN~V۶׿^x#TChM=["S>dw !$xAAHϱL?a]V$eԴLhV"xɨl!SH$oԨ:鴄+a&}9ЉS\nKxe"LG rBl)}_(KJ}a4p:DtTޕ+7ߔXE>On}I_xG;.ŭ02!uq] A0, BAHϱfo&ĕIu!Ju5M(r?TSN~ay_ /ѶlY~?xm7_ \L;KK)ݹXJ`9+yqFw*G+;0|ݦMqa *w 8L{3>]ل Nt)]~1kͥ3T&S2j:l3'P 틌CHq)a=S.*mc:N(PX!S{'?P.>j\f8[ %v-3T3 s#:�� �IDAT$Z*OoP,Mqcq~S[h{~c?L.F7TRf)рbqvwJF.Rޛ .=mw\1{!%Ǜ7b̜)`h Aw 1Tiʉ'65�;A񃂐)~#w0k% 7 hH�>}KΝ+>}r/UF.,u tr챲 ~m0YWIm'�{qpZ,!TҨcDEzzHTpBq4HƋtk]1*.wˌ#oO$d?+TF}&/!�l^p7*ÔQBHs#!\Tv,&R ױe]/p=C.5M0%,DPqRsr}2 -r0׉:KnsY`gih8H5RmDsY#! **- ^. O0P%p"KӅa2}P)Z}9Kh6Ts !.PB"ů0Pn*N!lZ4+a+b !Co5Jwޑ83�&Og?YP\=-S%(}„Q귪۱s|Px(ǽ!s329&GGyDzN:)w{]]$sY0x¨o~S^kh,F%k~|>87W:5-g0kL~!Pމc'!~PB"%vaKmA(u!4LLZoפop2x]ɂR7`@Q@zK-С~:$ %T١=ݻ*mŅXn^/A('hrC2/?LkxؼY>rTJUh1ڵ}ફr:yb"x'C]2Z ¶m,Zzu ! !!$Rz#S{%ْє#T`Ђ66ʏrׯ/zQWʕ"Cd_s%Ɩ-wn! }\sʔ*q&44(A.!tBpŒB۵8b;wʝ.ɥS75IչcV/r! {^'pK2EKME+e"i2g;�(Z2!wW*ъiB!!$Rk,%KBt�=j({sϡѮ<9G9;^PdaRS#K/IcXq{m Bw x}rK'M%eZ*׮-Pѹsc'L�DH<GW]%~XF_J:ŋ'RvS2Znw+VJDxb|[QGIBΝ0'}BIl< ,VU@�%w( !bYa-K¾}mK#h!J;~+Ν+B_;v$h^z̲FN(e(CHUR?iR6Z pMo1P_/^[9C]D^2Zp2栃믗9"ߖ*E:BuRG' \*7ArY,uF,g_5MN,ZuW v7,@eXp�yK9 B AAH/06sO[Ѷ Dla+dֻw|^̝ o^[n)qAYP~]DTO{\Xիzz9.-s0n{ϥ[aFO艹s3&W.Z; B˲bJR9@G?G� F^RŔQB;H m0%HEPT¨ChH YCh%XRJQkjZ&_y>~ ~  "[|,X`\.YbN^%$KjZCEtR墀{xDVd4 s0 9fG~޽ !Z:g=C =BVٽa:뮓fFaUΒQnAKFB< $DJhx wHt1 TgeSm1`GzG!0*㷸rWX)p:qc^ݽ\Q%#+裥KE…?�@N!k b0yZZL- m7AF0*TdT:;uu%C�#G jB.];-~_ PGh&rai}XF~g=SS#CPBH ee¼+dIFLZ6! 2fң֩SpA}8_'$[xYȖ+۷fg$C=u5MwВQ�xY+3d,GKFS2! .1!L29xCzF7ndF?@C j鴄ϖ(tKFB0>*z4ʱ $D`rKFn'ǧ`u-: 6gb`Ct{D>\.njE[h $2WD]pAϥXV"C%"ԙ}nm+ -#,&aJFRPeI_eS|ɤ̻|M!lA׻wqpFj4TLRp*Os_#ȉ|Ax l { !.PB"%P,+}{{\BiAAc'C+!T±N\`sņPfK׀s~LU~3ˡ2۷(WNu D/d4({ۥ'%FJ{wQaNA8thaϣ_|Q4b2= bvlom7׾Z AAH7в,tc',OsK a"iK!C(C;A#e|*\q`YaäRrY0uߟ~* s@R:TJ }PΑE}-[r74V[[w"6ҎG@"9p\ 9R3ık߾/V.o* Ct4Pa)( C",%j1!!$RBulP rB@D:B#6sMxsAL<)wZ(СrҞ dڦm�y:-%ljAB cAeUYiK0T"%Z> W'-U,ǛrQ76n !L2CH nAG,~c'!PB"!l2�RKFiY8 BE!LYrB3;S lVw*ed}KYK{ ΛWYP9S庚 T(eJrZ*BPZu;۷֊ܱ{j"s-!\BNyv?w{;A) BBH:F %q@n/^+iX,S,R2r=^Q ]FJp:O%] 0_ cV!TbL"=Xnt&/׮-EHKF,m^sWQre¨)GNA>B�*ctM>D{ʕrܔ2e!!$R|–66 )CʬR) i:NX!B٣߹[+8xUW nT67KZiCLڃ-q{v-X%CʕB?B@޳ )v<P! SaBk!w_+U7 l KF !.PB"mQB47\Ρ %3T*,;?إAFO_[Zy;^vvJ8*_n,[&jM %mۊjCX\T dԹIaYB@0_zI/njm_J^DCf϶{b۶P2j;2e@Cؾ@)&;vPBH첂pҥ7o^wey;-.߭X!BS'{[߾Zv8 ؉)0r$pYՔ~y1t\zK.�$! aE,5".st [JF3@a٨C3޽e;t(<XrkY۶قEhY88JŃeT`)BBHzAxN�~C9}YC9{P Xs"ŬS{sp}-ZowR9Cx It ZQaaϞ-s zq>\rJBDKB"LfHPg6* Q=֭r$QH5 h^=~'?\(t !.zA׿{>x�>,]\sMv[L`{9s 76+3`@Nɨ&)2v"`a,E*4MD<8S*&c9p6)g=DUHKR9݈!ltj?YK +1Oo_OPVdTgam)jtNq RC2!2DqʷE,*9A˗/J>(k/y睘4i."Bʨr2nolrB@3j5�-5Lʨ_hc;K?S1AhYa,sx=Z z,On*UPA5.nIޗ\RS Ah\Mɨr&۵DءCsdB%Crt&e,ֲL9ED c'X2Jq ]3gĸqe3ׯB"lpN)s0i-o_r=4B�`2a n3Y=(J: O<!}O T 8餖_>zW2t(];9f^|K/A-Ν[ChGCO"m!t;Mn}*aԭW c'!.zA>`, >,VZqeo_jTR>eW. t:kM=W\mDX ³.R)@ks-L]U9+WeC*Za._14S`%4v/wR_/uz^T!8r=QRfD䄒RhP=;˱%۔  !e]ݺuc̘1_|E 6{HqR`zݻKIfCu.]OQz~*)69B&wpYp(Gc'`f(PZ믋( T=+ѱciEaG3}{qI8QSSzӇC*cZ&t8wW в p!ďV/O;4<83_ /2RSs6l@׮]qyUy/ !ӫ?d&{D T.q&NE t!4sO<ʕC![R1{N,pj6~UO 廖,^\  ӊ ֆytk Qᢞh.cboOet !~fϞscɓqW[nxqR}+pu /vޏaRؾ(RgD $`!Tc' h-aTѽ{I{eI'VGm(>RF>lV%8dɒ[]<-znEŠ6 r+?8a"-m71X CHU Çg}6{1l޼!BuvÆ\0dT!Q__H�씅df!] Tu;wvwߗ~j;TCX */z8CM7n_2 0ehk];qbmjz<p`~S1�|\[lΎCHqUK.ŋqiGm݆W{!>0lwT\RxE36H±:!t ^s{A7fFС2-'{552j 0 ڵĿ> R|u6€�(=Eqc|SS»AB lCT)rRBh5pꫯbݺu?>}[n!C0`�\tE1cv5VBC+׬}J&%R.ئc؉lڵ2BrTTsbHYA^vZc#𗿈;X2ᇁ>YA�?o [ouERʙ ka%R6vCؽ|g8e>P\vSd!!ąV_C.]pꩧ@CC|M|{Ûoǣ[n0an-gV!&WϘ;�+-TEPCMli˲`iv(n$~!4~}f*GJgWKuEon!c?pCH_w[o ) L&eᣏJX>@=x9Q22}]. a!!ąV/躎#Fkٳzjqh۶-.rs=EBx9)=OYcbv BC&7lpUd2ֈCJrB o!` =>88d<Y� vE[CgOEd56Jq\!�L$.'ʢo;,)9FN�,! dThj8.2EB@'}60{ l^.BJt|gϞ8묳pYg!Nc7DY�j2GN45PR !7Aعwh0EwqRws3\2\M<A[$џBcLĬF%vYFDyDs11j#*hР`@9~TOuu0Pߪb^ǃt0Gէߟۻ>~nJ/!6}jߟzPK(mv4n6o$7Az::ζ+p1}q.ZT~ob{^ML>}o}K:騣Kݖқnjbq܂JEey?#Q˨ ٺmL]I/cM!! ?5,^X+gQG#8Bf͒$UVVmI 1*ApHɿ+�;*3`6g¬/!!t `BhY ?.znQߖ:"+ގqNCt.^~ߥ/n_Prv[p$W^Vu?imkָI'-:]|(QIn!ѣ/S}nj)xom! !m_~~wuYgޓ8ꪫhlBіڟa.Z7Wߎ0v{BXn=`GEҌҋ/'Zn',ݦ[:L7e+N--t?O')!܄N<餓Gi-DBXV٬[8E2* kmH$LP*?O?~|x@LF-… 5e B A t¨^ vLƽ/ !P*ݜ 3ob�� �IDATp﮻J$%yFzi_8xA}&FoK? M87%֪[m9!Q22\|Bm;ÿ'z'N@6ޟiSÆ 4wON(zۿ+X*Uܫ_pۉ}׽-ZF kp;ڃSQ!M.gSa3I,%7i$+<}6iB]؅(5>xae4,!&HKyqIQ`̛7O_ U__3'}S$MMMzuO>Q>% $Ow k}=X}ݜ2*>e42ުؕPrԸCN(Z&W#6t4m'FF%²zrJCz-&B�;,*?;&N~/~1a~gںu?Zgyf?{c<B�~]x6 7`߷aC{!ozkKZF%w;ZBK?nR $oi0p%o&@dѴ;wʕnAMA؁w/K#.+3%-y'_*CB?} _(Civӂ TUU%۶`}{ߋ('F}zvZl #%�viPk#8^A)-}o$;Qrݺ⩑~^z-- Bo`G{\i?>Z)yAc[F%wbk=aPwʨP@mݺUg}V&MRU 8@J}у>wՔ)S[bEj[`gm'r-3!ܜ\X+| }N?.]]kqoszvE:xKڼ ܖvGhn۰u浝 q!!!e=Sկ$IyM8p5k;mڤpEW^ /hҥ r& Bo wao^z-; ]q߸-2 {6-ɏ]M%k7ߔ};i{ n{`iR@Aɸ;ӟܷ=#J;*c;,\B(Ir2Ŷ@wyr!:4l0M<ptA1apD˖-}g�t(4!hL6JmϔJb(vccJ欯#IvkE3{e-{yI3gY?]a ܙBM++_*K(%}3nYP\Be_uwkg_Wի$飏>RSS;8{R?T3MMM6�6!RBM )N% տֻpk[A_C(enB8xpǛ҇zw_m%!?ŋsLQ0@:8魷=~ ɝH JW^ Oţ#2'E(.R]z%744_vT={GzJӘ1cL"2y o?!bo=HnZoF^Znh!!=~O :wŭ-l! ,!| ӟ"= M9cH2)mBˊcLBh1en/Νe˖?}^wJ \d~aYmE_y啒ܲ,s8@O v ֹW[O &[fJ¢sO-۶rSsqӬIu=ҦMC[ /;,ABPv`Xw݄0:䐡2ޔHRw]wꫯV]]>Oi'NNeAx믗=l¦& +W[Fpݺ.k:K^}Un}.yn -ߜ~ܵK=0v`݂p>UGN䝼TG(Z!mݦ'Tl{?Wh6 "²7a{}ݫZAܯIjHÆHXwBھuutn/5o^lFH쿿xBe4¡2m'M5Z:SFڼy?RHm*T<Ӳ",zEGIح*%Pwwqsyns=?!\\*C=2ځ W)ɖQB`s1_aD"uL& e٢3L=GHm*jUAZet!lmԻwe VW_wBl۶h^};HfR'I= -;֝HaClCe"MO*lٳg뗿nv[.١Rx㍲,Px㍝OZx;mޘI76 k R{AmNe$)*#m+Wn_BHI<#]r\ UU$3FvuSBǝ2YB(Í 1b.r]{T[[L/eۺX5H ;|@ma aCC[CeҲ a.'S~ n=ˤ{qr;.#-;uS-! \C(}iϷ-r->|;еi RWHmZC˹ -**/ݷsL.'ShͷfJ/<PgwB<<3#H BZF%oZLA:B6w߭SN9E=X!Y_|ZpԫW/xꫵ&Q1XmBo8L5ަط[uv!t[FPvȳW_-b>up'jO MfLЇ5f<yNW J;AAd|뮻ԿM2EsK|׿}�lSBmJL-vQ}{?JZFgkkۧ\1e ƌq_Fv0#Gl;t'^z)ÈDJy+opBM4I_җ6Pd65/;2 wu_(!jPv?/X>)ySF%趛oYSNW\K.D#F`@7)… o|cjƌ9sf G 6M}f pV*M-sLusdQBXݧ}Cg'd ! l;t=~5˲&CeK?}eY{pS$ᮻjРA@Gl>.Yl ^5yϾ4lX}^9+$H6dpcz'*3oupƌ;OCVZ9shƌ1 .(uGvkJo@{O:-Ѷ mm67'!Dy~¼/Q&m;a8!d `[ݥ ;oqԧO~:3~I.]{Lcqk**c&MRABoҖ>mۊґGv8-_@H4ZFJRZhw(!rћ7̶�I]A}}=Pm_t5誫�tQ0!ZJ ПVTH{K|2-H/o) >nLQBhYnJȔQ�]pٲeq*g%t̒%O~|iBݿ ℐQ$[eukm] Bs¼2^j9DO.!.u{!�2^hIB׿ퟻ^A,M ׮ "ڷ;t; Bo a.''l;+7T[*+*3 '5RxAB�e SO=u< mQ6! !&] °+ d_@qPn !?fy] Mt DB` |ꩧTSSKR:$.Y"Uy˵JUJRuͲR.! 4+-}vl9B!PN* aÆiʕ8p;<M:d �ԥ5-ty?Wk qbiBh2 Be45@T>_|r7ѡF:ujƍqB ,J}Wjn0񊽎ZFcBWo;5,lBZF &Qw a[ׇ&L&˲t1G?裏jҗA鬳&Ce ¢QB$݁-y)vp aKBŒh&j~zᇵf}ZzNo=P.!,*d[ VXCZF>ۇ[ Љo Ce�luV=zǴxbj=�$aCe,qBuetJVֺ7"ʵskuM5m6!d �r'W͛_jnn{Ggy>D�eŠ@BxNZZ>Z oxںU,.h&C!!̇O۠]CBTCGG}#<Rz=\ 80ЁN[oI_Bhp骫;pXkjܚSrF5HZlQhގ8!p$@TGu4i$M6M{,˵|=z5˖UXGe )Jk(ceHQɗ[r"L3??3",%Y ,Ђ :}eYʗ<S {ּ2ڕ ս{Eͅ50-:q0_i4!F8rd@T{o܇�}WiȐXmmBwl;!f2שnUun'a/!ʂ /�tSIBvThʄQCjj͛!!D*K5e8!\i{P a[A`�<_rNZFDJ-V[BH҂$+[Ce)^AXuh| !�pz�`TP Ў˥N" ZO˨y>Q ll6!H�m'  P5H>/򧄴}ֶ)]{*嫍N- `T0!sWt_fB 1C}ą5- e<Ϲ0 '4h Im'l{�=X*�Hgpɢ DyI2UE >C%I'N��F5!گFk,h a !Ce�Q0kg \݃> ZZHdZF5 TMghE:N�� M+JB.d$ɐɸZ[|NciSS<k3$�qz�`TB(!](>Tf*sZyNLBhǐQ&+W&f Iu\X#v"9[Fsva / d �pYE a[Fi6em'Q(ZFa Tf, N�'|PVij B`;2nժM2T?(5R:”QZFpz�`W%^5U+!]hMetT{Rfv@� -Qo! !Dv[󼂰2S鶌~n9!E= K*ʸ�@TCeVpoHxBE5䨪jvmOV B# o !(�c:M9a!mwH:ZFv?THB}` B�Ƅ%2;cFA4bhrm;a4!!SF�$lSz liq_R" hMPdM|kiP�Ƅ!ZF>Tj$arWȑ[BH(r8=�0& !-HrSF5?eKRl !N�(1eB-$ֺ/)&$o]y$ŗ28=�0&,!"iB` LNR62eԷD&CB �ƔۇpmS[^2iɸc)ßJҐCڦ}H B�xap†umaZF6^!g7}B]Tc(N�1^R0!e]Ɛ!妄"m!-&> Nbͺ馛4qD 0@LFS& D|U�9%|Y4H:@A4 +5?eT9!e;kתQ{챇FmUQ{Wmۑ*�)7TG~CA4e4J1' NbСZz _]cƌ1i$=:K'N�)7T߇~SS#-qi]ZFMO%!΢Z '8ѦM=iғqz�`LvN}>DB@vZFAB$ӄ ԯ_?O;!ŊQ�ƔK{@A@&CaB aB袋4aWN7N-v+E1qYٜz}Kt(!҆)VZCeF!hE2͛7O+mÆ |)Shʔ)O;4tI:u-hΜ9|ޤ `L0!l[5tS۝)HiCZP&}QMEvER{f2!d $մi4mڴ-Z;?~8=sF>_Q0&윆% eczN$}iګ^ΫHd>|.]aĆ10i'mw&lSz-HQ̈Wowoa{P*ߔQBe˖i]w0b1a avmm, BQؔQ BI'f[zz-]qO?-Z'<D!!`LXBX=]?G55!-hMr0d !SF3={֯_UVIq-_\4}tW]wx{1b$iܸq=z;0O-ҽޫ#F믏[2�씂A|VUJBV !) Ҁm'!zXC�ZF3;KrZ`,\}ʲB2?zJ>l٢C/M7ԣ[F)]BMLFVBViE1e4k9=q$bgvsjܹE5661J-N� ^y-NUrZZ)&Clkv6 `Lل0W$H#&CUwWI"!,�VْS*+1=H&CU22ʶ��cNdYwʨwՔ@$H#ZF\AQB�A�)veT^CHAah2Ėm?�l; �cJ6m'$R"}2 ^Az"5e@8N�)& ! DP&CBZF�ҖT5{AM"8e'3=e| ev@pi`B JR6K(#8e'3[B(pߔQ�P�Ɣ$*Jn(!҂dmʨ"!�SeJ!҅m'!ք0Pz !S[d�� �IDATFQ�r2>|MM8Q}QCC.}ᇡ?8�iȑ={vԇau| li!eAzD2$)!hdVX3g>Z˖-ӭުkFO=N8g[^z>`͞=[GyOnD*,!ʧc ! !҄d(D, !N�(#Wa)q5hܸqjmm-IfΜf-^XÇ$;V'p>]z饒f}ɓK.bٶF]ve߿/ @Yl>N&NHH&CB�_ԣ>YfqGɓ Š$wq9rd^֭Ţ+yf=S~!!}LUSQ"SFGBh^m'%aSFIpz|>/˺KuAܿrJ]V~x}cƌŋ o{;zhe2;xsr$,H ˨4 :K#v"d !^%ho~zSS$iȐ!% 2D֭S.SUUTQQ=Z ZjՎ ]ֺ/jAU8lh,-$�{`}nFxjhh}Lss$Ƌ|jۮ0UUUfUWOY)|rf̘Qpڴi6mZ_ `RP;*5/DOX’2�N�JUXp 8p/}L]]$i֭%=Nl6㴴WάY4z.;i6u[FYCPk0%.!iPpۺ{4k,Xp{KK٬}۷*굎555AUmg!C(?,jfZnWD-B`"ޯy嶝%!d 28=l+WʶmM>]{w… tR^jll԰aô뮻W_- .ԨQ oz衒T^{Mm=H铽08Tja a|fv@ɽ K>X?ϋpG7p>?>#I:ukŊ'~_W_]xc=V М9s4iҤsQ}}N9C_Ѝ2-mi!!Dz g'3+턱)m'2$�ʠ F :Kn뮻$IvZ믿^<&L|+ڴinvr!袋 UccJ{:K/̙3ٔ;PN-- iE BI B,m'�ܫ,dcÇ^UW]뮻N555<yAW\*qz5b͚5KӧO7e� &|VUy% ܶQ B e4^=!=q!0e@d_?zgyKK.%\# H0Pj/٘ioU4F0P1aVJB8!i$1 \>ʼQSF#1 !Ce�AA:$! v(BHhbڇ00e@9�L*l'-HZF@qz�`LP1=҂)QY5�P6� *i2JB$l;N� Mt--l;` art4eQ�I1a a&o'~ aMNA42JAr e-N�"N� &|65-[S" XC ȿ)$�ʡ `LIBoKSPz !) Ҁ(DB�]15L !DڰDrĖYCh�`Bh]% ! DMg7嶝0f)6SF `L0!,\%Q;TE -KJB赌�0u_IAABvxvxB6!b�,*)kkkI>^!BhbM}B�eP0qnh a-i,I[B1 'Ek=H a a¶c ! !r8=�0Ɵ*n\T#-閴+1k2 K�/*뒄!$!D2 aNĒm;�i(9U0! DZx+) D5�8=�0ƶ[Fs\{BHAp$ɐ}5$�8=�0&2 Dm'!)EN}n B�� &Uޓ)JIY5ZF㕔в$9!�Oʤ $eAZ2 aN2e4#ɱhP�cB5@hMd%�P1EkYCX[:H /"!WRO2 �4n;E5+DXCC2j�N�?+ζ@hMLB `'ECe2JA4)ZFXB B��SviAh2xw'@pz�`?!eVp ?+]CȔQ�(LX -؇0пжv@�ƤuۉIYQ/Yaa>O( `ۉl>۾D«L. Bˢ �a<! Le �P0(!lku**Rq굍R"-SFOB�DA齖фzuXH (?IB/!tDA�ª?PCBO O m6@,!e@��UJIAX[뾤 DZsXBK3;l;!�c a6U!!"/ISnB# m;B�8E�0(!sv*Rid=!l; �!ӗra`h2m;aH>AQ(k1% Wrae42 S�c9;!LY(H o(-uʨĶ�iOS2ɴ?tLMD%NFy)�Q0(!TX+rkx%*!e@N�)٘>e !) +Dn Sض%LPS�cW9VR"MZZZ([B2P�p�`L0!2JA4'Ƨ\Ah:!,l;AA 10Ϻ aJ Z..^!͒)lB#[.)KF0,9 !SFUXCDjig7Nվ'2 !�c aU=6�"!_ -!e@t\)J[)O=-QUUD,SF* �l>)i҆HBBP�P0d%@0e49m'�)1Seޡ "BhrTVH.N�qℰ -ɑ0ö�JP0&4!d ! &Gb2 �PB &G a۔¶ PS�c|N6k[F)vHB} !kq�`LvNOe a*C( B�$@DhM$! !)1 !! !Ld%LPS�c a6UWx%aBo B�A\0(!TjW0^Iv@N�)ZCh由ITTQ+57m'�tS�cvlَM(1/%e4^m'ww{DI$ `S<-@_/x'jk㎋!!R"�㭛泒$5OBD0qIzEIYC8E�0qB-!eEhp:N=' -3rĶ�Q0Ks,G!DB ޶<g'"N�'UYCD0'ѣa |QZF)1Z"!"CA UURsg]TjB��cm',!`�N$CU BƳN!�c NؾQ 2$}u[F!P�x a.S !9׋0^^A8yr[RgJIB0e@1N� M)2 h2B��'@hM}޽ d SFiP�x a6e � dOzu'Iv@�BZF#hMzi>qP2 15F0T#!"�CBEh+] PS�c ae l; !�clM*, !`� aiyftM8q L&￿~z]veu]ջwo{ZxqG|"�8CDA$K!D]VQFI,ڶSN9Eum>1wy'N4�%|m'�({5HCj4h^u3;|˚?:,Iҹ瞫#Gꦛn҃>a'�8m~Hx^!E(v4h$m Š$ 8P{{1rziAAPZ- "CBÅ$'[xF]r1ce-]4�x a6UYP #jjjҐ!CJnn[jCJ�SH\{AB 2l;ñ)0o<͛7 6DZZZTSSSr{mm$9ϛt�)!TCBD 2HiӦiڴiE-ZHv\uuuںuk---{"N�'բ FAÑE $ɝ`q�`(-@2ÅL%!DO6j(-Z䉑W^yE9rdLG/ B�x a6mv aRXzz-n;sf-Xpۇ~GyDzzj0ƿZn|aYqӢ B)Hٳgk\˗/$M>]}u]x@F!-?ꢋ.75448oč1Ek 1e+)3$)qz%Ie?,X ˲to߾,KVIL&~Z_jnnرchKI�c)#!SF*ŻcΝs޿s={8T% !5 5�S�c0Rxb=SFt�|NնE(1pCe( `La Sce %U6!5 .N�()1m'XCD.$!e@!�c0Ϫkpm'* �|Nchkq�`La S- B bpL�'Ueccz�])1^Bja1=SF/!l[UAAD ̐(AAocVUyQcL6e5�8E�0qʼB bp!2e@� !!"FA1T@p�`?! 7p{}$EP B�Ÿ`LQBjS[z )iDB6k RSFv@1 B�Fx,K;yUiHZLP5H!!2 �b !. `$uaLަe�ĔQ�]@ABevlehh1T@P0K˽82 � ٘@!�#VIREk�ĔQ�]@A/! k Z!SFiDAQ hh1e@P0kuK) : �&<-�2lL 5HB�@؇@P05�`XEǷ9ZF `Da WZ) J˶g,eXl;!�# NKYC�ʴ]ΰ�(J2$�/!,#d !R�'z�(I `DaҹWQ�N ,B�(O+�2JB 5�`@eT9b(b�'Uޓ�QZF `�Q�A�` !�,YC !�#(0 B�F[Fv� !�B!!c1e@1 B�Fx aޡ �#SF3VF$�(�`kt!�#B7g !�D5�^BH(�>�)ՎAA�ѡe@P0¿iH 脵Z�Q0=!̫+YC� Q�PiU�vQ�a(_CXC(�DQ�]@A”QBZF :%-LPjZF zl; (ᵌժj2 �c �]@A26@B2e@1 B�FBeԲ/V��;^pʨ2 P2Nt�*b<�IEA¶Nm B�\X˨$!%Ў^}U}K_A޽{k=ԩSo<7ĉէO544 .Ї~qP]]FٳgG�BUՎŖ�m'`�Ex?C/LC9DMMM={F?:蠃$I+VG]vEz6mڤ_ wA|w+9眣kF/O-[kKv*"!n;і= WdpWk̘1]N:U|'?$i̙jnnŋ5|pIرcu 'ӥ^*Ijnn7MM<Y?$/mjlle]*˟V�W $!Ch7yEŠ$:[on{G5yB1(IwFY($׺u/~c^yڼyzꩈ5$�Lev;8Zf(IZr֮]?cƌŋ o{;zhe29`:B�Z) GA<ZjN*Ijjj$ 2C Ѻu (j544hժU=0B�0ܔQZFpE[+5n8} _ SUUfUWW~욚*gƌ%k MiӦmDhʨ- B�26T�pEV^SN9E첋ϟ_c[WW'Iںuk=Nl6㷴WάY4zn f �0m'�taM4I7n3<ZEQ&5442d|lV֭СC#*�3 N8rDB�& BB�a(Ezy=6lvuW%pB5*I%}dvc*I) zLQ)�JQvC>ԩS+GG>[O>VXQ׿~mM2p۱hΜ9E?gSN  *J �BZFpE W_}x zӟ?_tGф |E6m߮C9D]tQ񵵵jllԕW^s=W'x^z%=9s&cPvf �0&l !-�|(O,O<'x>˲  /誫u]M<YwqGa+PUU=1bf͚ӧ(Jm'�.?3<ӥ^r%K{X@!t(�k]ڭ̋Q�02!!P$�QB�>�'!�3|NTdv@) B�F%yB�02�:AAa !�Q�><E>$?�� �IDATlL�f !�#-y�L` � `Dacz; l;�(9)1e@) B�FmLK�  B�FTf)5 `DQBQ 2�B.ei[U5CA�& !�#G2lVeU�`GB�mɪr\+ !�2V2e-�p)S٪ֶ( zE 2 nBت: B�0m'�t#e*ZUKA�0T@'(%2�=�!�#G*IЦ CAۖLrm7P@BZFm@; B�F6 !�v"^l;!�#܍!�†2 CHB�!e!�#GR� )�|(�2 C(�ǔQ� `m2jTKm&�2e@; B�F82Z*955q� v5�(QXCZ B�0m'�tE !m'(P0¿2�`!�# !!�!� B�Fx a!�:e@; B�FxCeHQvv@; B�F8 k^q� !-$H[_^z鳟{NS& 8d�� 2V]]܇�=CP@]xzGկ~UΝO>Y?Ə766j*_~QnQ0q$+w BZF `'pBg?}]uUӧ?i]{ǘ4iF-�mImӓ!CUYY.p[MM.bZreqmڴIߍnBB�0*!!Ne9rz]t1c$IoFc„ ׯuwމXӂQ�F�Ġ·턛m"4dȐ۽VZU}uEi„ ۷^{5y7n-ZÇGvIFAǑTѪڼEA�!e 2o<͛7 6}|ssjjjJnmhnn.SLє)S ovi:餓tG[nќ9sw �mI� "MiӦݶh"va֭[Knoii)ܿ-Ə#8KVXCBB*2�` *!CBB$IC9|p}}liEA/!iuHBd=P-]T6m*W^$5j?e˴뮻K# B�F8LM) Bd9yG?*ܶuV͝;Wg5l0Iի[okז|~Z-ĉ?b !�#l[~ B�0$)L-$SF^cǎՔ)So|C|gZ|Ν[xu]x@F!I7nF;LӢEtjĈbGAۖjE!�3**ܗv[~?g>=c,*zꩧj˖-:t.rtM=e#8$�`Wʴ];"jjjtmn+s%بƨ/uXC� #USYa! !� B�FضTg !�+v@ B�F8Tcg7HLۥmP�m B�0ΗVl;nBsߠ �3|a!!e!�#5$�`Ce�tEk*�f CAۖjm-55 �lL�*3S��Mecz�a*>��=0lUFUqLmܸQ7o0ԨW߾}>d ]CȔQ�(8RuUꊸ%,Y_|Qk֬PmtG렃P%t B�(!lU?;a,Yk}>9OZkNٶ 6hŚ?$Qm;AA+3�F-$w}6�]3l0pz衇/R2TO?0q|^$%6nܨ5kCɲ,5Jk֬ƍ>v2�|(aRM+-a2Ht߿$i˖-1Il;A(�? B�F8TKB! %ǷDE!R\}�0MW�SzSFv@; B�FkmkH �(EAۖj[j!!E&ф >"^x2/_3ak*#մڴ"T&٦}?#566jܸq8p5p@}Ѻ[}c9W~nV;I<&` NлwB[[k>$M7TT`8YfiÆ 1cFazC$=:qF~:5h mذAn͜9Svmqj=8? {1wSe%Ȏvg;�F f B馛Jn;w6nܨ3fhĈ% :3U]]O\pAc|M}+_֭[K uGwC=T .C=M%!Q�FضTe2m]~~Px;_RCc<Xgu$W_oL&oE{lV7pk/j}wrN?gÆ 7O}SӀ4qD׿.yl.ٳu'k=Pmmt 'g)9{9uQWCC<L[]>F$@HBȔQ�~$�p:kk>^x-]TÇ_c-rmۅW)S^Ӕ)STUU_k_^ǏכocڵkOԜ9steGiƌ?~N:$Zjx |ɺ{JϟSVSNՐ!CK/iܸq:CD%ɱH `;eԑ]CANuwIpUSS,X I:#1_~v &'OS׿u曺5gΜ?pM>]'tcIҀ|tƍ?~Zwy$}'UYY^zIG.UW]Yf1T&-Ce25�P0-%5;ʖ-R{/e555Iq}矗8Zb,X 6#?ۻﰦ}wL nE[qYqԅgu?;:j}VmU _ZET*CD )$`uR|9>8K͟?_˖-C׮]iӦWeTT ˖-SW^=L>K,�56_ :::u�ٳg;vJ bӦMHKK+'-RԎgeBT1Ver!,5W�-[jOy2BQJgϞ EJPֱcGHRիWwwwWK,Qŋb ?x5߿3g-7orR9am-y5D!iaQnf㒼;5L5EmWBBB2ʨH$G`�!푔T)))��'''V @3T8y$<==!Э[7|ᇰT*ٳg2bʙ{T�vvG!$"H+ _` ai277jJ\F&A*ي}~Zm^0\.Ç՚~III*p<8_ќ6w%K ##Cc^l4Ç߾rt !$< " # S@Æ q]\.ޖ �h|DLLLFDDML&[6jfff8w&/ÇJ߿7nNc#GԦ|YS9SRRAe*7P4"[NQB" B*M~~~044q/{w^A1o2ի \W1##_5�`kddѣG#55U9h͛7fG9O<ƍc֭[q:O "552R9<~l2*k(Vɟ TԴs ||| 888 %%111%`X~ BBBڴi;w`Ν0`�oߞM4+ CCC!..}-�|r=zk׮Ett4t邤$l߾/^ڵk�3gbpww7cǎaȐ!Vپ6l؀aÆSN6lVH\x;w2#p"!"XCHDZB*.DRhľ}͛Xx1~AAA000/n޼ bm(LLLooo\p֭í[O>}vL0vºu��-BHHHmcc'N`Μ9x ~']vطoL|^k.4i۶m?///o>l۷odž `oo'OŅMF+*CDb !iL *#1e !M|||ży0o޼"-cWjԨK<Y __Bv|r,_He򂗗twww;V:ݻwGզwGG ) RXCHDjXCHDZa,|v9:2$Ϟ5D!iɨĬrU$!st�Hr)dr2JD9H+LJ8 HT,o$=bQ"R>DFt�5J"Q)j?@HDXCHDZTFAe02$1 gB"R@HDZa"O+DE!"/ B"҈DtCPʖDDZYK !` $"0#H7E <#!i,HWǏ5DD@HD3B>v` $"0#݈H'r5e $H+Ld!$"3fMFH!i1ΛۿC&c $ D&rT*ŢEt]b T*͛u]R]vu1*7J5DTRRi^ʓ'O:ưGΝl2<zHe_]tQ۞Zje˖!##ޗD")mi[y,{y,S&:C&c'(̈H+Le`}\UV!%%3gDʕUwss�޽GFjj*ׯ)))ƼytRܸqUTQƸq \w"44sEXX"##ah*C��/exAe(H+MF $. C ,PT̜9jR 81cԖ|2f̘LyƍCΝ?/Ynnn֭[5n²�.}B"ʅMFH+Ld؇JL&ɓիW7nZjnjժ4h� ::Hx!&N*Unnn? \3f WT^cǎō7TT*2RxʼmLoݺT֭[>|8aff֭[cϞ=Ez OVš}<xkW_UVpppP.?ydܻwO_z___ԭ[Sϟ1S 8:e6 ^V_9Tj9k׮F8qbJ$"7du : >>:u;߿)SG׉Fs 0�M4˗ehժ�{�p|Gm�222p xxx��RRRpixxxDeoF۶mQn];O<m0`�<x]t)޽D"!CPvm_~Q6uvvV. ???xzzƸp~wڵ 111*A].;wDz0m4dffbӦM8|"pt'|!iB)ۋ )@#y/ @ԴoA||<f͚Q9}ԩh߾3ϟ?ǖ-[0b۷cK HPn]ԬYRΡC鉈+aDDd2<==Eai#GD޽bŊB1vXd2DDDcǎy?+L<WN3f >sld_^9=((;wDqa�-Z֭[X>*"GG8\@HD*H+LeY4@*aK2%$]~7[bb"�F%F@@�> \"%%m۶ \7++ … UlFR{lqUtA% 7֮]HDFFSN�nݺ! �/5kK.X`RSSŋȩ9֭Zy1o<i={D͚5<6,, Ϟ=ȑ#U �|_pܽ{5k|M4Q h �K.UA�1~BIppKd(DTLCt% Znht-Zh}-w`TR:{l\}u֨T|@x�X�]vEdd$bccGf͔ݺuC\\~'x8t*U6mڨmykRk֬SN^ +:w?@�[lA@@�Ν;ddgg+mz]mEiJEl B" QC@X7Iu_]S>%$$x*GJJ �=Bjժqd4EmߡC0sLf͚Wu+Vȑ#hѢ.]///Hgyۡ`hh7Y}֬YXz5U>�իW�Qx}i }TLp|T0Qٓa.BKN172'jJBQtd2!,Y[[jiM:9`"h5h�^z 8�8p@}|[-Gf4k Ǐ򁁁SdggKJYree$DTv=7C22T:<<<аaCܽ{W,?r_.7nfffEjji-Z~aTLW,н{wbHIIQ]vWiJZ *ׯqQH$rqqqٳZLHH@\\vZll=zTmϓJ+xQy@HDe/#�!D???bk�ŋ޽{Ͻ+)CCC=jh,OǎѰaCDFF"$$De^pp0"##ѰaC>tZ˗C">OOO\pv킽={Rz>C"((HUp-t]9ȏ �ѣ*MR??X/bИs<wӧXdI'�~R!MF)!9T<uܹ3BCCHIIALL `ii suҥǪU;"11۷ovܩ͛ѣG 6  @Æ qU4>Ծk׮H$x7n?[nXp!?~C}?6mڄCCE͚5qi8p�NNNS._J >7o=z %%97oX}1۶mΝ;ѴiSYYY A6m4*R1 6/(k쥧EŎaoa1!D")}͛7xbٕѫ�� �IDAT!$$?```�___ܼyouEaggcǎar V^_ŬY4ӦMDGGcȑ8qV\'ObԨQ=A"l۶-,,,4+ ME~Oq1Ǐ?WO>ӧUJ�7n7|t_PnZ>v؁EA&aݺuؽ{7&Lm۶oldr9TulOVsR eԜ7+4iUJ޻ 11~~~<yr8QTdl3uQHA.7NߌKB*[[0hf[h_z:葮Ks0ˈ5DDܐMF˓Lpv=uiHO1x`D…O\駢E8ԧ]F 4h�DG4:%` $"*1/_�v_lRw+8Чl ,_.KQc + (6.]~M$+<8{pqzP(Aeʃ憨 ] ̟ܹbU\YY_\))@^@d$ӧV~*.hZVAZ@X%�f8ϫW! sYܹ;p Vdg'N�cƈ�XYUCpkrOLKOz}`$Vw4y+Wl9ǏÇE`ԅdJ@*[YFFZiv->�>�s`jm[q(D+SĹt~q r2zQ\r9hPpL 89h0767NS'E <\&3H/yݢ - pszGл+�߶M!/\(mٵK^wMDͣGEkL�/ŠD4i"% ϟ`6kPBNj�)~JEO?,7u*u8pE{б8('p.0o7߈j4qPܸ1"--r9p6p4p8[XG�_~)<r޽=w*ݯp``2~}3g͛EhuDVb]zvM׮"*:lgeɓnepA\<EVwwx%%ݺ�,agjT ӷQ}׺4m߭j�<:w?T]!5wO^w{{q~Լ˗MZTEXzRpAܘ>^1);+&?Ksd~llĶtAMIO&L�KwD�q>\g]\u@DhWslmŵS&Z@fĶٳE =VheDHݺU܈_6 � k yr%Я؆8vL\ۋ2~ykį_{l7lTbeSt~^4۱C ݯr`7[v6pX)TTI'ADHhT3āO]'r D-bv/0P4Sؽ[)kaÜuD0pi33Q#�E9n6l by'4YY kf&ʭ8iwOuɰ( ?47n17O1BdWԨ::ֆ,s|8YI$w'"W"_?mKKїaÜD"] O@,Nxx?cƈ}Z榼Ϩ^=qŋȚ0 NRa}yhȈDK3*-gbz8s}J ιHx}|!7 .Fy=q. 7q իe{OL_Tid-RE9uٳ ZLaBs<ayA!`v|(SPP΍T8wnqݐSSih(O…F{V3))@:։sEbٗ/E@ݵK,qqtpMRF ;woBq3;u⳾uKsX^. ⚪JqmQrE];JHד:r&yja6$+ڪttXMNŕ.?7niݻq* /N ի2<( 20Y/^-GK V/j@{QQgn.g˖$׋/0Tak�׋'={ȝ;`8`W,j m[E~E%�5k" rGUQώ50;tBLnÆhl,NX>j7hJcƠQ[<矒~a%*[*c :C&/5Ĺz@]K,yĵʕfLs^WW--EYsR|h,jĴōˬ,V.Ua\ qcOԩTIiP$D hrZ#)΋>v}Ռ<SRĵYlxefm:_gnw!m1U\kܾ-df'n7l(>-dd <پhAT۱7X#/d2{Qڤ$ӧbxeg!>̩]60߉Fuŋ+F77�|섶1V`ZcΝ;6ŁNj,21ux}7o+i,/rvbqQ3ťol:ED 50m;T2xKT:T8b銋KKY^R8~~gflQ9ǫW"|TZmܺ%GE5ErroFh}dg <e HmmEHA]qs82RnX4Euu-<kʕW eFѴ8OSBbB*:Q#նmɷaf&BMjK" *o^J4557wˆ-}D"%UvxMˮ]Jчr�0CDKHPjuuˌ"85iR: Z,^sFNN? DsJm5yլ)SffkLꌴv߇7s&"<~W$q2+K&d20 QʍÊڄ<15--D0^ѻNt&b !QP5DN"` !Qy!o>"z0QSJt5D!93\\\]iQ]V\ ccc\~]EyAB"̱!F*yfO</:t�{{{;wƲe#}uEm{VVVhժ-[RyOn݂T*K D߹s'9oU}lmm%: !3"*s!,X@%rZ )))9s&*Wۛ޽GFjj*ׯ)))ƼytRܸqU<sܸqpvv\.ݻws",, 04|M;tH;7o\\\ SNŷ~3g9dMFHΈd�$CHZ`4b̙U#G`066F@@�hx>˗1c dff7n:wyɒ%pssCTTnݪq{š~om4=v.\yco믿bÆ .;5DQcQ*m2 'OFvv6V^oxkܸ1ߏjExXժU1h �@ttt/\RG֭[Ѷm[TT ...Xhԩ�ؼyJXh[[[HRܹs>ٳ:t%lmm1tPܸqвqF�ׁЩS'TT 0aRRR��gΜlllPR% 0�oV^\\&Mzvvvx'ӧ*:;;M6믿J/H!sQ"3"*s&R]GkPF L8e%Id2:E?߿?u놔tXz57o?P‰'l2t }`llR~MBCCw^ 48{,BBBpa?~ 4(R<4i$ev܉ݻw_~Op1͛Xlw.]?k.'&&uHKK a˖-6mlmmU۱cGDEE,°T1QS>v5TJ"##bJG/oSD�ڶm[>|'O￯2Y >bصkvލ>}(Y3għ~۷o#!!={,t_ԩ� D>}qF1BG}M6a׮]߿?� 88Ϟ=ի1m4k=i�pQR&DΈS^\~5͵\�5j(6par$$$ 44)))h۶4iZwͭa�u`ԩXf :;wh{[\\?#F( j-}||pA4o\% 1ci&;wNTmfff(B"ʋWgDTXCXF\Z~OށQs?R9Jٳa`P͊Z*jӤR)BǏ@f^ZR�h;賙ֿ|7ϰ~6U�Gې�!$\xuFDeNQCQFKYF"b:)pWDD(%UjU1y Zjզ)e4/++K9VZ… o>eܚ5k/PkF O'L"aQ"Rū3"*sBenNԕ;�1L&TA6tj�Z^�6gYiԨ/dggܹs8x ~g̘10ar988h|@!(D 2>T<<<аaCܽ{.+k-,ivvvl?""BmZvv6"##!HF3Dhi- hsAPP� ,,Lm{)'= QB"*s!&HCCCL>x"w dcc�W:={L[v-еkWԬYmԮ]5j@LLL13ghlƪ40PQTT�%dTꌈRITѹsg>>>DEERc(kh׮=ѣG~000ЬY~~0p@ 8uEll,;;;_ٳ'6mڄ/˕?6l;ԩܼyv킩)fΜαcPR%o߾ʥo "ʋ5DTXCH%!H _׷o_ܼy/BBB? ((͛7UeU?^^^طo/^ ٳG~{.֬Y'Ob8qDJ�'N�l۶MKk@#Gbܸqxv؁իW#66#GDLLڳÇĤT@"rQ"ʍWgDT5|C|||ży0o޼"-)҂ `[.vܩq^.]h槰 ^^^۷ᅬ@,ZH%�;cǎո^AwvvVצMb=bc˖-�)Sy* >Tʜ20GK,A||<vء��^|kbE edTBr ]v�X~=|r]# " DT^v5Do4Է[_|233Q~}]Ae(/^Q{-{9 [+_Qa8 B"*sYF DD:>D!2 :. (Dʜ}tMF(/B"*sB!,XaϤ#)bНwh2c ` $2!d �Ul��sss` !` $2!dQͬPJ={}{JH.#66UTSnDΈ̱h:w`lݺ͛7Gʕ!Qad27n`Ȑ!.R>DΈ̱p�;vqi**U`Ȑ!ʿ%L"�l@Dꌈ+\]]/_(QH$h(ū3"*s|DXYY█!b"*srB"@*Dė_~jժڵu],0((H!*~o2.xkdL4 'Ξ=[%.ˑq᧟~֬YǎuшފPчT{KJ (U|%fdBPPO~=B.]p -ar"** ۶mʕ+1{l�6m9s0R>DDk{k`8q4h� 4 Pް!&Mfbb'ĉwKGv�t5Tѽ5spp0V �`ooooo!++L^^1gϞE `ii2u�X]T9DDk{kgϢEj[n/_ڵk[ WgDbb"Ԧ+ݿ_m^FF�Z- [ d/]R!99gΜu[rw3>$,ϦqTk䌇 ��jKr͜{.]k J]1011QnjjW||<�˶pDd_/[lÒ TQݭ[бcGi%fV(2r jfffjz-[Y|""""&##իڼ\3ƺ2rIcwbb"�Zjj1jԨ2/6uA\3ƺ2*SNڵkHKKS~)�@uQ,""""rm7o3g@.WXԩS@ J�a91ddggcÆ iGvPzuHz\r_VYÇ UNKJJŽ;Я_?i#l2ZNiC_Gnݺؼy3ܹ]HzW_?[PV-�"kǏǥK`ggC.cѢEzK:r?̙3bƌݻ\ff&KTV h׮<R.""RT+**J#�x ,@޽akk T͛7k\ݻ7*U;;;3IIIZ.1Qѿƍx nܸJM.::SN+,--Qvm 6 ׯ_W[V?ODe[R0l0Yś#:.$h1bBBB0k,ԯ_ÇՆ%*"""3f(ЫW/dD9nݺ:uvpqqADD0fL>iiiXr%jժ(mrDQqm6lܸQe5Yd" 2'NСC{!11k׮qI�y6`m6\g�iӦ3g;SN4hAQj8::j7/.]t={5j� 0㏵YlsEFi矣u04̉"Æ CfͰ|r�x6`ahhI&)`ĉ8qݻL.#--M7Qyall GGG�P.Wyq�ݺuC }2/'QnE*d2!Y�� IDATjhDj߾JzI&rr@X={ 4tX]HƏkkkOu޽{x1Zj6u8{JET4/_*W ;;;L:/^u�>=�oMF+D899MWLM"]311!CЧOŋXr%:uǏ9Ta(^qӧb*wU/-ZL&޽{~z;w000uIXd �oIOOtSSS|}h߾}bȐ!x_c޽:,Q)yBҥKU~F 0w\cذa:*p|gСƎ [mb j322*ub8|p^ 1az̚5 R.  666V>*[a `46 UTWVME"*5jիWB☛[bb"x* SSSӧ. 驔|HMMž}PjU<oqssõkא2ԩS�XTLm$zppp@ttڼ(BIKKCRRt]CׯnܸݻwQF*y fȐ!Ɔ 233vڡz:,f?Vv9ܹ={AJnؽ{7qu :T%#,33SF2��z"ưap)رm۶ո!N3l0ŬYPn]l޼111Gh߾=q%lذ&&&8q6l"�֮]dܿ+  =}tXYY!!!nnn\2f̘4XjBtt40})0rHvػw/>ٳG'=4sLYF �<j ac˖-x}G.F?3q ݺu PN]Ho�rU�ҥK={6"##abb///lzG:QӦMɓ'q}dgg~5j >rk׮4*'H۲@HDDDDD؇HO1)B""""""=@HDDDDD!b $"w3ƏbOѳgb믿vxU*ǏcѢEHIIQ'H./qF̝;X?^_*koT[z5ԩbgbbc?O*(\6:(fYYY w۷qR.@HDD… 1g� R)R)ܹ@a@@�R)"##1uT'OFVV={1cvvv/)ɰj* UVŔ)S\hy###t]m? WWWXXX[FPP2-Z-Š9 @DDTTUV�ׇpڴiV,Y'N~5=zaٲeسgVXMGɓyfL03gD\\֮]gرc04TzqH$L0c :fBFFΝ;(1Be-Zرc%̈ @HDDFf憠 |ᇨUVsrrž={��SL7rJ|'Xn�?36mڤ ظq#0l0v޽{cǎj.+W*كMb۶mŅ ;oĉ*?iFmT*E˖-cX[[[nHJJRZh B=y666jmllp]Zv###eyyk�5kT3ׯ_GJJ ^/^Ǐ ݷoKXZZM6hРNǏ~y{dy<iz�'舭[j\!**JmzFpU޽CHH֯_o .TYٳgI"""* B""PYSVn]C055-5֭[J*3777A7|cccrhܸ["""Md* �PiYraÆ!;;j˽~)))nCj}<y򳑑2eee;s :tP@DDTT!$" UV�sbذa022Bann^qFΝ1yd,[ ѣpuc͚54hPر#pAtU9gϞprrBPJ\|֭2ӧ3 0& DDTj _o>rǣVZ7l~~~;w. tرcԨQرc;)S 00??5kbƌ7o;v@ڵU$QiKv*iFa޽,zpvv7|iӦa H!Qrqqĉk=`ʔ)eT2"""-)B""""""=@HDDDDD!b $"""""S DDDDDDzHO1)B""""""=@HDDDDD!b $"""""S DDDDDDzHO1)B""""""=@HDDDDD!b $"""""S DDDDDDzHO1)B""""""=@HDDDDD!b $"""""S DDDDDDzHO1)B""""""=@HDDDDD!b $"""""S DDDDDDzHO1)B""""""=@HDDDDD!b $"""""S DDDDDDzHO1)B""""""=@HDDDDD!b $"""""S DDDDDDzHO1)B""""""=@HDDDDD!b $"""""S DDDDDDzHO.C[Zu����IENDB`����������������������������flent-2.2.0/sample_plots/1000m_fq_codel.png���������������������������������������������������������0000664�0000000�0000000�00000240775�14670056262�0020453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����)���kÅ���sBIT|d��� pHYs��a��a?i�� �IDATxy|L?ם-!H$[YDlU"և Q>UZJI4d+^;klL27cfB|<<{ͽw=}ϑDDDDDDwdU"""""" B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀA&{}.,d2DEEm@&!99oe ɰ|r LK.=׶ګ7E1'z=zh2 6mn0yzUB[e}6|ׂL&п70660c ܼySm[3f$I$酵>+ͫx|*ҧg]_QWoMyBTu ֯_p hҤ {mKy|K355E'OV1x~z}3ƍ4nܸBUֽ"ڵ cǎEhh(!ЦM2;qz '''qƈ);-[kkkTV ZŠ+t/..ٳ[oܹ3W{^yVc%8UwV!0gr5 666j�<pwwGxx8 ˑI&a8wWFdd$\]]!˗'"!!iii04|ŊxAo0b{pqq<0n5jԨzBwvvƩS`mm]ݫPnç6aaa_Zٞ={ -suu�\~={޽{aeevڡABٳXv-,Y?Vkݻw�rٳ˗/Ǻu{nlwZ%mٲժUî]^ =cӦM033rss<ߏgϞpqqAbb"ND$&&Xm `ȑppp@DDo!22ǎìY !зo_lذ7'|]ذa}J?cƌ0ajժ*SK7� ^u L&.^uyRR044bZ8qBkN@!IHNNV-jԨ!$Iٞp႐$IDEEUuW It믊e˖ ID\\\Uw=1$)Sh]~=o ID~D^^F1e1}tUj;"##$I"88-M``d&iW^=Q^KSYVݺu+t'N8! $6mc!d2ؼy\P={ I̙3ֹp011j\&$IS[gB$/>|*OOO&&&Iܽ{YQ~Q~.FFFVRuR CEqq1Ν<<<c_tQz�HOO/~/_///z<x0nܸ$d2L2FΝacc L%FTT`nn///XB{.ƌggggφBZ43]i@ruu㙒2 /''C A͚5ajj7xqqqZCĠ~ɓ'Çi}u)tvvvD6mk׮r?�hӦ ,,,`oo0:uJt(S/\RJӝ;w0axxx666h۶*]ի~� �RKkT_o�С`jjFa„ ר<1}tu#u6n܈aÆ%|||0r= LgѣGUVi}kaa/cǎ-W}ݛ�`ӦM U]/kFPP.\ί!tuOH5jᅬ3gh̙3?~<|||SSSbСzF t666Exx8._ �8<GGGpQnܸ> 5%lmmѸqcDEE… :fT]&i`4mfffpvv'|\^)ܹ]vZ޽;) h޼9UKKKh?_/""׮]+?;v@N�SSSaܸqϵ�ЪU+xxx@r]8uХKU$Io��?:K.EQQF:umll_h]GyM6Mi[naj(Ǜ7obРAQ,--T�{0vXԩShڴF;% !uVvvvիΝ;Qw�|r`Ud9s<xpu%I*wz2�H*ٳsN:uBjj*-[$߿&##| |}}1d\x6l@hh(> ޼y[ƥK___dgg㣏>Bv*>Dhh(222 77HJJҹ^Y?\$!88yyyС4˃LLLлwo<|֭àA ~B <<۶mCÆ 'qqqeffok׮aڵر#V^޽{ׯG>}`jj>}f͚HMMU~HMME.]ХK��.^ \xԩ et-|vb 8::gϞptt˗ƍQQQEBBwOOOUe.ZÇGjЫW/899aϞ=믱yfZxN: [n7|7obҥju'L�nk׆\.Gbb">S^Oe[x1�`e}: Mܛ/^aÆf͚֭pM9rqqq>|8lmm8\x111ivn߾=z@qq1v 777U ֭[gU?�cѢE ??য়~͛t| !CpQ8v~wiӦDVVѮ];dff�p}!33u!i& ^zaΜ9�ѣGګ~)ϟZjaС044DBBߏG䙷XTV ݻw ^{bժU U0`�֬Y:u?$IG}4\Rٳgcرacc۷O}aʔ)2e UA#G۶mþ}PZgߊڽ{7�Cիwww;wu:vIjRaa! 3v كHe?+++999_Ѿ}{:t(ѭ[7a͚5ӧݫ5<>>УGСCذaك{}�9;wZj;�H=$}QZԩS$IbnW2V~5$$I+W,eژ8|ڲѣG I5t ͞={$IZS9-Z$$I}ZA$IbjG&&&=$={_pAiMa+-HWZJݺu$I]v)өc B*?q044M4Qb !I =RƍW(N#I7nڲ add$lmmE~~~]agg'ŁQ+OU"++Kρ@]V<//Oxzz 333q Ukٲ~!Dqq.uJ7Z>}ZG}$$IC IU߻wO quu2335P(Tkj^TK$IX--<t* !$Im۶-f͚ SSSq-e999j_VZ_i;wptt'OT[?KKKѬY3W"ܹSÇ?^Zm$IZ-V!bcc$IbܹM6 IĘ1c4ѣ'?SH$BѺuk!I3رCH$4h ]ʕ+V4z{{{ݻ'|||4.\FFF^:R("<<\u_+iB$'rڲ8!I=zZyESFKRGKKUk]޹sg!Iؾ}Ad2qXXXL&<x xr=H$z-Ӆ$IUVjs_~Qڽ&55UH$Q_$I[nU[6w\!I U+vT$)T<xY!&&<x04i[ne˖۷o0`�~mXYYa͚5(***W; Z@L4I[o3}Ve˖@ꊑ#GVHofffZ}/ũSp}U2meڴijOF|jex~Yfj˔JE7uU+;rRRRZ5bކ Tχ$IXhƯ2ƒ<mʕxFW_}KKK\Ru_=E177BJeUdG$9sڏRޛiBLL bbb0zh4k W_ vvvvŊ2ehM6|CZV-il]vhҤ vءmڴ{ァV6p@�OՖ)GhTZ-[ �0qD3fxϟ5kX^vm+Ϝ9rsss|�~IUj*<~|Zڤ$I5k֧�,YD7p@XjUy(Tu=TUxegن�5޽skQn]>�SNje#F@{2/9^mL^|wKKK(cƌQߕG``F<=='OjhzU>}hѢ*$???ܽ{ϟG:u~ֶoofswweB檾:tըWNh֬c˗åTZs"ZhQ|4//O-P֭[�~=?~5j(9,^^^HMMũSRg%IzM(*yM�O5kmۆL �h}?Uu՗9###ԪU ?~|)߿?Ǝ&Mo߾?[va“'OCUrJȑ#CqqjHm2>iW\Qvژ9s&<;z#..YYYjeu<x $IچsM _A&iMms �2 VhիW...w<###[Nk`QTT[n!77eY4lPG&zxZRڵuo%L>|X-'* BR>+*)) ݗPR>Y6h6OOdhhIK*צӜiҎ �㣜{i96YOy|Egm�x2d$I½{�߯%T6k{:Q\1T<//͛7GVVZlH;w.>|R{SNN>|L~EFFj#YG~̛7sQf͂wu*Ϸ%K\ܹsQV-tkV=y\lΧڞ(υҖZj믿M6F:88࣏>¤I||HNNV?L\aiCCC+"//:Nm@ُ۷o{aNNKL$yOSƝ;w ˵'ϲ4CCR=~X<#*!U)�OQ(U:D'eQQ/ɺ\eڇ)c-Ee[dee;wh[EMy+YsiKv͛#FنNj|zSvvS"%e\'?ڻo>̝;ۮ(gggԩS.]BJJjm0`�r9݋K.Eqԩ [ѣx7l͛7o|M�%Tڵk2(N8ݻwԩSP(0uR/9PHeQׯkdj<~o~'6666EaaT٧qkd(QG5m׶reUS>u?}gϞ$Ij)5޽{qijJ~vv6߿1oРd2233߳gFZ𲿳п!*F˪/tB2hS.ê)*LMMqQh,OKK+w[ժU\LFBЬY3?XVcSk)kt5Ε[n �N?oׯS\YLjJNåk,+4e2d'ﱖMy1~Vر#/^HܹsGPM彠oBwu݃^&M`Ĉ /uJBh=WtNS[BˬwjGJJ  ;Х2335*s8q{b)ٵL={uU ֕#j[Zk???ܻwO5]DY(^HKK$Ie~=�{1 *#GѶm_~2|{ZPxFFF۷/0m4eGQQQP(… �TDYBۯlw&M.&Lmi<9U`ccR֭lmmzjPJeF6mcǎ%tE9tyI BW~{{{�O(ՖM<wUyV/jO?9ts,F~КUPPz|2P2BS(`ʔ)ZWR(j_>T �~ y OGxɁT^&4_}ڻ0as'��ƎuneyF'L߿4O.y( |ZdPNJw_}|^@JJ 6oެ*W~.a�� �IDAT ,Xﹹ>}:$IXg�|6LaOOOڵkGʶ{nlݺUlDpp0\\\J]_", a(jxUjTll,\ ߰|:uz5j -- 'ի3gVhk̙ؽ{7߿[Fvv6~7t7n,wرcqFlذ͚5;#<oM4։¬Y0c 9r8sjNXl_}vڵ+=zx4ogΜpq@@�~'߿_5ڵk<c -,,xbmڴA>}TPAetYz5BBB0x`̛7-Z \G믿T|HMM/wwwpttĵkװg <X sss̙3999wQFsԺubΜ9ѬY3HNN_%U:Y0j(ٳnnn8{,n݊p= ۷oGϞ=j*l޼ڵC!s琘,XҷjժUV[.HMMEFF|||жm[Uݶmbѣ:v333enׯGXXZjP4i$طorssUT^}ů OOOkrv킹9<==Yܹ9|}}'''\r 000¶]___|'?>x  myk&M´iݻ7n@ZZZnCBB֭[M[n$ 7nDVV6kݺu1sL;^^^ӧc㭷ѣG3gb„ pwwGNꊂ\x)))hӦ mJ Vfv9sFxKL&òe={gϞpqqAbb"8�U Yfaȑ卌~z\z}}E||<֯_///t999Xv-XdItڵkW!,, 4Ç}v~(]KKKj ߿?a``nݺ=Ӡq{\ruu9aI999"66V {{{ռH~~~⫯Ҙ+((Hd2*kqqq9ޜĠA4I+풔l7ULW^Lxyy+Vk̿U|1fQvmajj*<<<w}'233u7tqѩS'QZ5aii)EJJ2Lc:]RڼZϑB_z Q^=1i$qU3Rr.SNnݺ [[[aaa!Ν;5ѵBk./ͅ޽8}5}.ݻb[XZZ 333Q~}ѥKd9ƔVZ%055R}vѺukaii1O{w011?\dBhNt'Nw}W899 #~gsf8ϲT(~=zT }i[e?0Q~}չ֬Y31k,QPPVX|~Hz+ɼd#FTX[[ !޿_L8Q SSSQN1bSkD}9y3f{C^4/BYrCڵk#F\\)m۶MtA QNѣGgz BG~Agk֬Q}$  KD޽EZprr^^^bرs,Iyd2FT:qիppp&&&QF"&&F͛E``sEbŊ:?~X̞=[LىΝ;<J+h;%[l[VS={V]sΉ] {{{ձ5?-IBp"o111:ujVZY&N3f`ǎU6ūj׮]h߾=&LP܈j@"W !,޽{F`ggL6]I'ODPZ5#""Bh[?3<<<`ff L-Ð!CKKKСCj>ȱc0o<Wm`$wի4h� ׷\#A&iw͗W!,֭[Eݺu鉤$#^rŌ3p]űc h" >={g}9ǸqT :wGbܸq 8p�nnn/www4mw'WqѣqQnr !77Æ :5{]t DZp}_ @VV&NXfT KU_'''8p�͛7Zox:ggg�@-Ю];?�<x�'ND.]n:�OFR(Ő!CT_S ��{FÆ RuW$yt6l6n܈_wޅ-:v>Ja y&lق<iӦ<xj$="AϙÇcƍZ'::EvӱcGtQ?7/^\cǎjӯ;CCFFZh8JիWGppƈw7j.m۶K.ضm:t蠪_ }�O4aÆaʕͭi[|9ʬ'I#*]ɓ9màA \5'>;tUܺuKkZSu5kL6,CRѼysܿgΜ] ""*4p@(21$}6Ο?ٳgcǎjc&88ְ@nJ "SF+H9ȅj֬;wѣG022Bvv6 VjOM#M6U[vmر033{]#""""r<@VVڷo=Zi̘1Xx1�Ð!CJmQQQ222wT oVЃ��&&&LMMUu2|ڎ;50fʕ׫6zh׮]êU0ba:իzw}۷G@@�+,\uO>|PSXXT̬\miʕnUQFaΜ9U yK+9y$1hI5BF��G1j(ݻBs~~~hٲ%a)S8͏ {{{/5kDqq1n߾wAZ6r;%*)zxxp$z[z]ܥוnyc׮]8}4<==+gggTPڵte �u322P(zzzxz 6 """"P^%U<̄cewc˖-r努,11gϞUK F>… aaaΝ;z7n >>^Uvmoڵ+ """"w-GaŊW ˜SNǥm6<xPm8}Ôѧ,X�yyyM6ҥK�#G _|~7O?ݻw1k,[j "661zwyXjOxj QQQ8q?@)S܃@DDDD 2d޽�ԪU ׯ_ǪUp,[L5 b deeN:��___4k ްtRԩS_|EUVb@o/^dB$ 31f?&&&ҥ ['yÇ[lڴ u9s0rHz2 ۶myhѢVXwwD/{W] 0K&}? "''VVVhٲ%,XPU=I Iƺ[nΝ;q}ԪU CEtt^JqAx{{|Y;DDDDDDz)DDDD{Uu7^n HII7+Dի# @5 (:X~=kkgH( r:tׯ�DDDDeHII1r!vի€ßJ7nˋ 3$ q;TB"""R(lll��߯PI ʁ =5i_-)DDDDDDz!sdnL&åK+c@HDDDDed|rպ999/`ll `ƌyڶ4ڳf̘—ezG}DCHDDDDeV 03gr9FAR �epwwGxx8 ˑI&a8wWFdd$\]]!˗'"!!iii04Wp*^EDDDDThe˖!??FB:u4'''#,, ƈCDDF'OO?Ç5EFF" @ӦMo^Zk{DT1L%"""JP(0tPcܹ:7رj*5jG�2]RRd2LVLW-**¤IP^= SNţGܮ\.DŽ ШQ#:t@bbFGaԩ֭ SSSۣ]vؾ}mhӦ ,,,`oo0:u}$B""""t8s 1xRJTOBZ<ʪky^^z7nDLL 222iӦ2???<y-Z@xx8nݺuw… 1dU5 ~~~h߾=q5l޼:u’%K4ѧOO>Y&RSS닷zG!�iii�<q{M~.;;�-[>Sui8q�c˖-Xr%_pI : .T+ȑ#Ѿ}{ԭ[�`ggK.i<)χƍ� :HMMEfT3s2T. ^k07}Zvv6�ۈÞ={ +W\-[o߾U&O 3f@pp0.]Zj@XTT+WZj1c27779ӦMÊ+0yd�ִY+++DEE>Czz:ڴi�HHH@nn. @LL .]w>`@HDDD:x{8�<JN]aiit̘1000x (L&ÇK]x5F_L6MǏc֬YHII5׸v<VVVDJJJ$? ΪbӮ+W<sIIIj,$iL�ppp۷K]_.�j֬uy5�<yP鯿BHH BCCѽ{wXYYA&СCHHHPU m, 0 $"""z=Oꞅ?'( d/p{6?~d04!nܸcܾ}VVVnWjzu˕%SRMBA3u7nк ]&z """JFXlYuZekk �Z(uݤ$4( xyynƍaff#G䕴g�P{ܹsD499Y#k\.Ç9 B""""t$aѢE044ȑ#j*?mիHK,Q+?vΝ[꺱jO 1a�@TTTW ty̛70`^zcعs6u[[[^MA~~~}$Rb(=Ҧu@||<  66ptt\.GFFoXZZ ڭ[7c͚5r ZhK.aӦM֭֭[s&MiӦٳ' Ltҥ)'�`̙HMMł ܾ}֭ý{`Ք�0j(رݻ7?={ڷŋѧOi}A5Ǐ# P !=ILKҥ Ο?S6l7|5k�8<+ny 11{?YYYXf ^~[ ͛�L 6k۶طoƍ̞=6l@V}v 6L~yf4ik׮Ųe`ff$tYuappp_z1eE:['UИ*Gvv6-ZC5=ʿNy%~}HO1 $""""* tO"낣9)DDDDDDz!b@HDDDDD)DDDDDDz!b@HDDDDD)DDDDw 0eʔJA&aU52 U DDDDT&LV%0660c ܼySm[AAAYYY3f@aaa$I*Uΰ;@DDDDh/B̙3rFZ}///�-[пprr\.Gzz:&Mӧܹs^Zpuu/_F||<&NА_e"""""*SttFٲeːQFN:˓ccc!""Bɓ'駟Ç"##iӦ 7V^="QS(:t(1w\v؁Zjf5УG�@zzzq <իW9bŊR9{,"""Pvmv8p Ν;VoѢEd駟ʗ-[L -kٲ%TpVVd2}fffh޼9nZT:p))\]]uϜ9CիW_TTX4h�_>&O5QKNNƙ3gZWr* :e}6|}}qiv vi]'==m۶EAAu&MɓXr%�жm[�@bb">U�B۷��\ 00&&&j۽x"Zl `ڵkѭ[7 *slقpH={nݺ… UiXhBBBccc?駟yfdddB6m><|K.ѣGQKKKdghDوI[Y \pGƷ~*1bZnu{(((ʕ+{節[}ŀp H wVkg ARRUaRR BBB4)S`ɪ~C5kVaAAB$}7?~<;v#""0vXk.tӦM?*_f 6mڄ֭[cϞ=066�L2͛7/b@HDDD 'oXkV?SO6vh s#ݧegg�8ٳB\rhٲ%[꺏=ªU`eeex5mػw/N> ___`�z  -- iiihӦ � 44qqq8v|M8qׯ_Gtt4󑘘S'uuuŤIy+=6!!ׯZ0�cǎ… k.\|...�3M]vhҤZ<IӧA�V\�� �IDATɓUf?À_}!)+ zoQ+KdF[q!>j&s*өۧohVKP2`TR:fS4oժUX<x�>`ê0$$qqqHLLěozZL̞=݃vލjժEm{zzj}e�_paU@�+WD\\9<=zA_cIiWB"" !퟇2Kˤ/QPTgWa/_;cZw}m&b߸>/cc$J3 &&F䮱CP>}r36hEr�ИBF:שYuyyy2ӾݻwcԨQHLL Yf!99͚5É'йsgd:>=m<KGsVZر#j׮ 333�O^tIcZq]Ǚ^} *XutèVJXE1A/_ŒK0L M^5 1I_?Ұ N!!hנb6�ЫI/VY?+[bf"˺-Cg$>n1&Oh]u}#u[!n ,-Vܺ aJ]lY bC5M)99 Bk"Y[[x2ʨ6FTmiz@aÆHIIAQQe׮]@LUѾ߼yÛo{BUnΝ;(.. um^}v rjt\nݰRYM1+\^By pWKQqzS`eֿ>_ُGW=_b!4+@}xW纏!b*%>+Wh}6f9 alE%oC?쿢;K!vv:Ϋ;k 6Sޝ7Ugߤimt,-EU@T;Qudџ∨(."*((VSvmohIy=#ͽܓs>`턵5Sb]1w#{Jw<]ShF}nhwq� 1*nʼ n}u,;}adHmps8Tt.x|K{*|v3u8l6l0ҥKg0`sΐGuuwXR۷='8oFuu5/^ FFEEaضmS)iSvł]v8qgϞc Fr /_gϺO>Zصk}?I@!!Q^[M+nBdܻ^T+l2\elw30Al<9>6�y :R�_ }EPԞYQtz Dj͵Q t |=q߆0l0$_>GAE6ڈ9; \$ˇLJ?ĒK:N{Ƌ?G7=_E0 y=RzP!ܰ,m6Vco^r8\v_c:4BV Z:sAk7]wtb]1|2�EM<r?pr7Ge'ɁO!x4 6܀ ƹfhNofuyђRC ?7eڃO|C`8K,ADDf̘6�G7q]"""0ydTWW4ٿ <999ؽ{7֭[kbqCg^upx?w!11ݻw+t6n8T*^e… qy|͎&?�]v9t:<#N{ y|Ә_|i`EE͛DBy"BH٘ [l7``1Fs;=vuA(-DŽ5Ӕ0#GԖ0t<;Y d Ƭ"RQ~yjSya'$rtH"]:5_C&]w~{.rr0j(켰3=~ϳp<~3]ёю՚kq,قuaꆫC'<Fvi/x MJ 5+=y×~ Y Ɋd**2<$)c'n<?y,_e`pg;b Mk{ >?9zxH6�[W݊?ox�p۵ahxa [!yoQ/~Aޕ<.>h=X:_ukxf3|l\Bm! 1l1_ ]WZ/L1wƽEԵHؘ 뎯D$؜.!7;yWp}۫#.T]'Fn)&pT l3kHFBTB1}3tP_SL)S0w\ 6 IIIh4ؿ?ﯜ?>mۆ b<x0j5!77~s>39w}7Ǝ<y6l@llۡ#F�q())AΝ'tM3gJKK1a„^/}BKb„ 6l&Lm?O?4,YrCL8_~%z쉑#GBয়~BTTz|kL4 _}[\wua6n:mV44[BH0붸b]qћlL=Qv 5ղwewcZc lcjx%&zY2 ݎ sO x@'Xhvfc6uy 8zW؛/k.'7fsz̏aO|Da晌ñm-fzޯ=̏aF,vYs'-Hc%u2؂_0<uNז^9`+W}0^+c}s sdd {mkl53[Dze;o&`CaC e×giZ׹XuجgB6{lVXX|u>}Pu6^U>^.ٲn0 lod1JFFDﯻ͝; 4%$$0D٫JKK>|8DlΝ^cQQ{YRRW^>c;v`DZ_~9'OdSLaiiiL"t6ev)ӧDwzl6h&؇~s1<˗3H>gǏgIII,22oߞ=cLV[[[^|Ev2LڵkqV^^1f2+:tR)dfbFqF{ctj6cBHpMnA7ZYL6O}ԏђNm>_Xʸ9+1l?YAEuϳ̅ f-gZ1l0n6T;[ pZS-y7 x@,vfeDǿ-ƀp,p|`˿1ীc?n_}Ǐrkv{VVSun]y+D'?:י}q 5jl`o}^ d?0oa_Q [_`yr`Wn?-سszoWv^Un{0Æ"msM3KHS0<BBKAE)ܐpsx~(,{.I][߯4<d؝O|#%ޛ8tMT )* Hܲ] h )( ;1{l2'#^s:~98WuK.ћf #.Oזbƌ)l dgblE~_z?dF{.ie]oR7NO?Ƽg>묱{ U5MBtd4RvAkBo?b޷Q3<#1q\o=E0tg?{t|8eB5!ޙ3VumWʔ=|6ʟ-Cr{̿o}_S7:ΤÏ?b\8$E%Ag`1x=S\V[|JD`lNGI04|zST^<I,س�sq K![?b~=xO0?5oq :쌳xWqFv{yy\ZFIM DaX?L#F6Xi,6Oތb]1|/yқK# \ !P@H!T} B"`Ÿ8_u/l{n9F:y jnRZ=KW>?9r!MGnAKa5xf3xf3A_ �ܞs;+c煝~=ŸLv:ߜ&o8CHJt 4=v >+3k8>�pM㻌j(ʆ i~tJܝsd뛘cv;y!lDyb}Ci(!lRe5:'u7n'nϹ7f6x  kKVqMoz6w<\\Į1ݐqTr4F_SCS)M,';`pXyx%v_ϭW`۹mxs_8 j;… XBe'wDŽW",:xY<-g|=AkԆ4 dE2Nي~| /x "NXi, wfK`KJZnkBZBؗӘQ03c3|:l5c㩍p8mcbX0<?y|e k`)QmtLMJI�}2~,yDukoyݒaigjOE5*C36 Ywo{ ǂ*M7jgH2Q(ӗBB�T@*"=&=$q"?GKw߁*CsG@hl8 \oKO#:&w >(Jh etE!).X[ |ϼ,.qA]ϘcTD^HQP 4Bh 5񺉰,X{lmӛCf? o_kBЙ3Re4͐$tzSn839JjJOpXyxeSQe”S|:>Tb~Du&o(SJB"W_A_ϘcPV[߮�W\9N廡.$5:#;}^c̞!llrܾG\_ޤ!.B¬?XW425ژ NlN|hx#K@X\S<�>?9E>*J=E\Oژ ,N㐝 f�l4(�+h( Q2.rjc3x915!ƏTnv.vIe'P-Ęc|:g"9{KjJPhpUYm6ބݧP $C(H@l UOmxzMH٣Gȑ0JFi$Q~?!B'B<嵔!$Vj\9BՄmgy<&J8pMpZs-ՈD5,G u{pm,N])E{C/C7Aʘ18Rr.`AtOHĨF" Q�a~7m[ 8C\m,C!B!!ջT} f9%�lUײѼ+ylJ"kb`@Xw/bCe{/E!Ϫz7Qe$CxQs6fzܾn<3if7FeB(Omt4dEr28DGFs6d/;(U2}e !D!! ȉr;{ V_z?PI ~@x}}^g()JXZX GO8q=&]Rİð(;^_KNmXiO{bCidH$E%a˄4C(OƠjnkBZ  !^AEĜ~nv.hP!}- dN 1hfC|%6 䳫6GB4`h~Q>c: ;ae֠&"DmVYW٨ެ!RلKJ�N /lO|< HĒCEtd46r-=TtfٿPQE"91TY0̎;|pPA^3`q} 2|=ʿB/el̆#%G-[H73sbtKzFa!m@SPsx&F%� dffZ#Fu]k5dӾu&BBHزڬXbd-¿~JkJq@} )(@*yH0>¼+yG{JwԚ))PU�w-)JB.8]~cd諒GC>|m,֪!HJhePʔPJ^3.@ghkU"'!]@!s<ؒp@zL:�{WJϋD!J% H};w. DDFF"11Ck٩Çw9_ll,^{ !(Dx>q!0oΝ;K/5|1}tT*<sB/4R O^^~/^& :Sq7!Gnv.Ֆ92��W^*EKR’m]88Y�{@8.YlhՖ9_{~eY—!+hEIf} u=\|�B|6=k {@fXcЄȉbYaN]}zN(ו HٳcXp!4 fΜ8{oܸ'OFuu5qw 99;f͚̙3HIIq:ߏ 0p%_/"޽_OcQkլY+$k\.?^z @޽^ T+_S?�gHxCAe0:{4�_>8ϻ[n\|>Bw'%5%Pe|~ۀp}}_ %>PExTr )4T-zhMZ;Q#!FED5Ւ\$Bi.-[ ՘9s&ڵs݇sN?X|9NuSzq<0._1tPǟ͛^z!//_|zwH](_b֬YM~-L</>C|GB/JF !aiِFH /:KJ=3E"Ԛk-Y٣xbǍI Oa{o@Hqt`uh``~3b"c�!TkՂ%C=:3^cϦ2}tRZG@(DQAL(l6V+y[Νe7!Gjj*�~3gD"v܉/ @LL 233/C�>m; /#//PTDx"�{/_8ϦM0h DGGCRa„ 8sLk£Y�� �IDATO?�L8kuO?n@LL Bv">>111;v,.\p]sYL6 ^{-ݻGEEEӱ߿?ˠУv'>KC_B<xbTbKF9Q~ӑ_���"Ry<(BdT@zLۀ_ovs#}C..T]xpXlL@ȏWi1i!CFL]3;wĩSЦM<C^8Oxz-<CO<ѣGcx'�={Ĝ9s宼{bС0Lxq#2j)_ǏGv0sL\XnSN[">>]tx̷~1c %%>(:v˗oǞ={0d0#`0f5jѭ[7<䓘:u*233rJ<:{B%O 3.{$Ֆgɓ�@f\h:ys˵ +> >+yPJN\I c`G yħQ�Ve=^de"%:k$VW訬QM"ǵ֤Ex8=-jT0QJFC!ۛ# u{n�1ήZ� <۷oǾ}УG322;gϞ^Xd yǸwaƍ=zEa̙xǰuq\|Fywa۶mxnlݺGƧ~I&9ᇱtR|wvLӵkעx z?ܵkn_ ?BO?3?`턵.TaY1j٭:Sqmbۄf'£} ^G>~564G 'ژ 5HQl]^]&RJ>A{,c1[:z+,Bw@s@՗}:19CX[ 8*駋Pk $UЩ=M6cؾ};c|2֯_F-dڴi. ^z M7 ?Eŋٳ�>N4 )SuV)Sbҥ8t# >LrNI  !a_^w̤,haAe?XɁOە`:Opzy +2S?r-FP=:CI)S!Wl3 kGJIulJ4zh5l3wht~?Mg z]-'4̰2N� ��??hGҧz bY@aÆ<&0d={ *q}uy,-V7C~W?ӧOǖ-[0j( 2kjB=c]ti>( $sPܖJkJLHqX(* t_T+?=$:8;B~(}݀PkPPjjXiOߣPKV$C*m,s0TYPD*X@B~g6aeGG䮎 Zs-�vdΚ�st(vnppkǎN]Fڸ@_F _=l(TL2}l:R]vÜ9syfGyn۶mO$BBHXњt9`69[y;azXzp)�5u%)w%qb={OWv<^"daT{* 8)y á /,m֘k5jlAެ�¨&ԉe8Vz 88d�26 "p bA,T:u/V֭['B:WJJrID2J 1F cW: zc`HIx\RT#WWc 2Bnc緣oz߰H_Wsp3Hɑ? $ =C(V+-!2 �)T`oaÆ!''.]²e˼b ʮNVkǎ.YV޽ǹt3uјLk b1zg}W�|7.]ruBBHب1׀y[$K' ,†'|ec@yJC%V8JFb#xKh1zb㩍xj#@ %_ujDZ^:XW /-p*gB5S5C؄5pq,Y̘1Vr{ѣGq7;P7nr7/~glڴ{gϞň#жmѾ}{io5ue|F3M<{5yQBH3|�N0g n)-%@>W/wt՟d))NR 8]qxGp۵5062֧9B WǷ'uzpa�ђXmVE5h%n2|B@9CqbiHט O@(jшH( :ׯǔ)S0e̝;Æ CRR4 ߏ<DGG 6Ztt4]vaΆX,رcѭ[a?~<͛7#!!/<FҥKqQttMVX>C A|wd9ss~W/9q25jx<SD8wdi% z%/[3gO`1?i62NkRG^.%B)JNYQ/9!C+E$)CXc)t9HdEr@s _1cPPPW^y Xnx ^bsEAA4_}͛+`8x_;_K.aѢEطoݻ;v=�૯r{`())5k; ??s2ܹsĉ!C<!$ Gˠ֒!lZ׀pPA?º$x%5%lU6>#cqRD"uEEtJw<\|%_s&.'j#a8p:BIhD##.ùdaaFJιv3vGRa֬Y5kOo߾1r={6fϞ,|n6|pGMO"77BpףGXj^~ew> ߯+W�9$P6&2$ĵעB_38&)k]3 ``i<L'aQ2Zg!Hɑ*B_in(KquF8pȈ@Q&CҚRXmMyܹsXfK�}jCAfckq@}񁁷5W11G:e6+JkK]B�nFݕi7S{LŇc>l6<>iL akb9T+phX5$; 4Q91*V/jVf Z= o1bΝ+R��/FUU^uBBBH%c(w-R}Vff,V\q߲6f+ _2ٸ|. '>Bň }{%b 4p .i t#E'+ 6V7| ֤RJ�>B!3ɊdpGH\s__]۶mÑ#G~@<0z)( $ QHq$7')1j):)G"ő7%)y k͵Йt2Jy4Z\co/t(`/ua/jc5v=+E14BJq8pJ#PU.>XVL:U  !aX`&?Dnz!Syeu~C[[h8 WǮ 냿:˄TT2Zitՙt!BiLXd 5YR5i мZx@p.o}_<F;6g|V[h8ٹŮvBIrɓf!lHWQ da!T= 6 B6 s7N<JF[r@Hv)A!s<%B(UdrD" D&ult|Tr#8Ess תqQse4Tl5b!LIb8OBB!!$l!<WiE%7)qqdq.e%5%}0+!WB)Uլp/wאfS2WPJ/Tr*[� l0{ܺTtB†/{c$A)-r/)* ڬNpku{s*!leMA%S9Bcha<jj6f!5:~nFGF#:2B,TUf^ BBHr4bregI``xj#}z F-p9N)U-mI墼2-=2T4j\,9 !!??1�B�f"󑒒К~ !Z 2=Cx2̊Q8 i7Z6s!lR@'?Oc8>oMe�{hE"dę3g_ kKqTtr-4e$&)xq)($f 8s NDꡀ6|C8E32Lߒo32 I0T,]qޢC[Xiצ2fx=[Vh0 P2 �1P8Wyu w 6n؈om۠1h}8Z=Qa0f:Ǖ!;D׮]^ BBHe!W=|@ʢz%ϔ@)UzY9ny%5%VJ.jcǔ6%>(74쾸ΡC\t]vEuu5|K#V�+@0"sk!>EeaBBHe!`O`d<-: ё^3?:gcܕ Rң^mƵkCOKfW2eaY!Xd&*txG-"!`c6KFS8_uQOd5h5B͊ڲ)2iŤ9~ 2Pq"?}카 BH3C!!$,L:�d1v5 KC5j}^KW? ,חl-2 TJ ! 29eyqN_ˊ!� )ݧٟEym!4#BZ2j3p<232g(dV# �J�@Jt+31_4qPU>!6VC̉+~8}zLˬp&,6 ^K!4#BH \}JKF) gg lA$ S &*ao]fzţCШRQ83qpT!z'wy!4B‚_�ac6de3~R@xUpͱ5E$Je5 ,BރęBQl@""N�)Aĉ* zs[z)fBBHXpd}ӗg/�!р VL2AU5 ~2\<.+n\)?f*<Ęm2j BH3@c'!a= �vvT2|@1h˅_ cthW4씻2JEE8"D5\=ёn`Ԃ7]`1&!EBBHXg4BP@zL:ҀJFEEEnpͱ5=Hj|-Cp/s!|u׫xtӣ&>ͭdH.I]��J BHs@!!$,hMZHRoIЙtVBIȘfܢ))$ 91p?rKj2|n!eiaȻJ6B/ P@H j<# nL8REȐ+ G !c j�*�1e`q(CHZGb„ ʂB@BB UV*L6 IIIƍ7ވ65iR2J7WP+­W`HDI<!A!iMI%WAo;2T`1 3._ Y6W]P(i.^N-œ9s H0e^kِիWcƌx7PRRÇ̙3!zᇚB‚?HS uJc=Jc8�x�@1̝>uSx'V{S CKR?1zOnmѧO|Gx=>wڵػw/֮]� ;vٳ}24!$Q Kh�c'( *NX1&*ݖj-P,J}B�+ZWW^ !MN$M6H$^[v-RSS �$&&⮻7|BBHX4CH%-V=i(CH/g#´4^;Vf=!93�4JZZ�o6lقg}s<޽{<ޯ_?ԩSMܰF!!$,T&3>11hl j(ޗU o]c Pg=8GNQV8Y9vc!FF\d2 ISO!99xh"L6sj5\+,,l;CH Zl˝11"BdufeVDp jӚ-yJ Z>#T鱩 :euHI`�gPAsi}CD,Sb' I[z5V^F;뮻PXXUV\.}9RqL�~e~!q"$+V#8lztc:JcuU.Hq$BV`rsiP.8^FIx4i&M؁ЧOANN�`ɸ[0sLu]n#a4]7 FT2J Zc'꓈FՈ5Rʔ ]E_-͚c*\I]X^% ;Fɓ'=,TwENOOwZk@!!$,! Xl@I+=M@%Wu3H5_B,UJԔB_)yoz|HoAPcǎMpE!!DpV5ežgkL5``tJyCHY%1uj ! .I]�PQҲ<f6b $$$kW{ZƉ'`\/;Q\\;+++Ú5k-!$Ng@%"CNq8hMZf �enP!$Hc0"s!$(MVC"==EEEXjN:e˖A,W! XbΟ?v<cǎ!!!/c //KPB �� �IDAT5i4.@d-5:�P\S6m�س:/Ga}oZ~ %K1#5!-ĉ駟>@yy9bcc1`�{馛q=[$3<EAףXb}tP@H\04JF�NN|ZvP!t QuIB%Eqw7xܲe˰l2?n5K"8�MedR,@`BuNL!!+  ! 8_%E%AĉR@L* J{Cq8%sW85N` !.  ! F ?%c2HQP0e2+&- u0LPQBHC( $.#Ccɨ<Ba.i1inBL)Ԓ=\�W@k��źbWB WBWm,B֨�Ck2A[ZtY<�PtJOe5p$!"8Qq>u!n2ёB-٫!0|mUϟQIK#'Z9w˜8g1P2{B_JFe ! ! JJFҢP\S D0(eJpp e!e !P@H\;*%HIfAYm�@c{Dq8-= ҇ dBꣀ"8BƗ3e\?K� *%4BBq3N%|o,Cxq�=aBB!!DpZMed#5:�eM%WAo#ND.r(CHifHo"őH'8ei(}F\4|Meh!!  !Ӛ!sb�j4v8" ap\4|P(!!Bq!hdh1h5?qEHap)Cnd  !ڬ5%c'IjMZ�!2FSB e ! "`h=]4o|l?\Rh=P@H5v!�JF) $h{Pgҁ{"=! T2JiAiAP2J!Ť`1�zOeHG%P@H#C=b ee'�{"ſz)B<z-{#Db,? T`B/#D!$xDBB`!˨Q '<B! '-B<"(��E}._JFu&c_ i DT)�!$-qT2JBB�.RsE",%$vi1i8Yf#KMH8Q(!#  !2YMq"EFK"jxjrQJC%EPރ#' !!#  !2YM$A9/sf}PSI7rQҒq!$xF!!DP&)(墀}/%XBҒQ(!  ! j@Cɨޢ=āBPSB7BeR2JBRրB"(JFp(CHZCHBBLV$4dԬ.ā25QB7B=T2Jg2+!PSB7B=RSRW,R2E9o( $*]F)CH83-YB !$x!![KF 7.iRT2J2ڿ?Ǝt( ts΅^w:[L:eeen駟sΐر#{PBe XBj*Cim !ȑ#2d1sLT*ٳg 6��._C">>Z-,X#G //՛%KGŝwމ~ f̘Z<BTB\ЛP(!8 !! _d2aӦMܹ3�fÊ+hT*1|z<xmڴ�#G#��z=^|E3��=l6ΝiӦ!..NKH3ۂTFBBZ'=d4�rf299TbDFon׭[1c8A�馛бcGG�۷oGEE{1M>555شiSSBԦ2Z!$*T2J�<HIIC=CҥKꫯbƌr JKKѷo_t"MP07T2jc6&  ! B�_ѣѫW/f+�P�4秥fjbNEFF"!!MjVNx+5X �@s ! e !P@bvm�? ظq#^}U`nR2=;!HeIRΥ͜9eI0i$_!9^JF2քB0�sŕ+Wp)�ƍ͆{&Mr34.7Ru\.dr{-8Γ wBdLCs) $F(CH`ի#oCmm-|h]j iiiZ. M&***\CHK2^l;u%&G{ !Q@� q�X,k帼<g~bct,!-MPS(! !! лwo8p�Ovz|޽;�;ƍqe1۶mӧ1ac7x#T*>}P(mWC=[ɨWBZ' !!#Cgy֭ 7܀* 7n͛# 55�k֬#OB7D8'0w\L>wuF]vaժU?> '-Z(KF)CHi82( @ݱc̞=o& :tguצMܹO=yHR3oc GD"[ooڵ… 1cƌP<BBl nS Hu  !B0@?q]t͛}:?~K#Y �,nBj*Ci !CHTPʈX2Hĉ(CHBBT}|@HMe! CHBB`6+l$%-zp$JF !P@H _.u[b,Br=Bi !  !1YM�%3f=BZCHBB`5_ m!5!64 ;C`ɨBBHC%o( $FQAHie !  !K;eJF !*B"z*[ !q"CHBB`Me4Cd2ֈJF !P@HLЛP(!QB7BCMe!Q {B6v2VB"LO!MJF !P@HLKF(!QB7B2T2J!.(CHBB`BeBZ#' !!#  !PRqGMe!Q@H !s⠜dBQB7Bc)qA9qsb%1{S*%2T a0I%6f !!q"B<<<*T TDAAŷmEA0W4ݍC(*W- 8 A[0 2&$mU:II%:uN.H^g6%Ķ�jG!g 1}3yyD@C(hx&ߟ*"VRR"!$ PST@4�<cdגQ�a؇@4�<Q�(}DC@32)CH@d@4�<2)k2 hx&ߟ6d�JbB�͒Q�؇@4�<CS�?JFDC@3qv} 2�! ʸ*ŗ$_RL�:2�! |R|ʐPk" %l9&d@4�<cha.B�5%�! ]F DdDC@384q)-eB�5kDC@3|$Ŷ[(B�5%�! JF ( !�Ugd0.�j$2�! 2�>G+B�)X[CHS�5#2�\( !�P2 �GS�??}Эd2�j(#C!�O6JF 5�D(hKŶLԒ$B�5%�! |8eݺR2  hx"naR Me�! !�O+ L%YCt}HC B�Y2z$!P#Q2 B�m)Io*J +̓D@f hx"k%XG[+I4P#! !�OijdTRudd>B�x"MeR‚_34PQ2 B�wh2dd'B%Xd�J"C B�Z2JS�5kQ|;Ծ}{խ[WZv#^oEc �Q�QT'O=/^cǎرcչsg-YD۷?kdeeN(q~rG@2Z<CH@&dյkW%'1TOjҤIG|޽{sfBd']2Z| !]FddQ{%AIjӦڵkիWkA߿_~?CL8�<* pV2ȉy �5o߮ƍ=zP/\֭6JFx"ߟ_lj5\'�QTw'O֭[裏F=/--MV=T^=-_\>wleddXqB@dܶ` QTeSLє)SJۻwQ_zj :Tݻw׍7Ǘ]v.z/o!�O- t)% PS!DUDzեK#^m6G 6Դi*T ty… }muB�(Xr+eB�5!Dw^[ӼyԬY VFF%2�<d�lp2Vԯ_?[N .ԩZ[~4i%2�<‚\�PcQ2kZtN>;y۶mիUXX4عsgΝl+ncD>!�I4A2|p͞=[Ӯ][ox믗$1B'NƍղeKIRչsguEWvvx lR#GY B�(�s|dQm\Rhٚ={v i2sjΜ9Z`:-Z[oՃ>XKF x_b)b(Me�`XCcѢEGu5~Dza%4%�`#JF# _R2 !�O+ 9>]FWC B�W@(2B�DA �&RRJT@MF(hx"d_rQ2�j2�'l?B�5B�D\¤p@ۣzqy/�|5�\DKFCQԺA븼�Tu' Jũ_6J" PsQ2 B�U2Jyqy/�'lnܻQR/).�UkDC@q2ZdrQ�5%�!  [nس@F(hx Ǧ2IEneZoD@@4�<@ޯs&CF9>2�\Dܛ ^ �GMe�" `] Pa0N {�$JFDC@PxnسAjYfqy�H4 !�B _RT&T2qFJ>_u�j.#C$�%1CXd�j:a !�w�{@k(!�Q�pC@xQB�㘀u�"! `]( swkwnЀ�j:ju2K{~�*e!HXgc a=tu6JR:qqy�H !%�"! `2Ԫ{�B�0S`]L65\�ʰ@$�+ķL( (�P2 :B�*%C�u�B�ƶ!�H!!�Me|i*C(�d@4�+22zb6KcB�d@4^�@͓W/9n{iG}k@!C 2�m �$u�`%�! `]??n e��%Q2 B� %dDC@:JFB2�"! `!�* HXG@�P2 B�)=�$�u4�{ku=Qu�`%�! `=4 !�=C B�i*�!hXG�d@4�# �{h* B�ֱ1=�C@4�(�j*B�. (ٗ0�Fd@4�  � ( !� K��E@4�X�@ �_u %�` %�aF:�=dDC@:�=߷dDŒ u4�{B4 32�T�d@4� �CS�0#`%�`Ox !B�0#`%�`O-kDB@:=�؇�졩 hXGS�}DÌ u4�{؇@4�XGS�Q�2�`Me�DÌ u=dDÌ ut�{B7XC B�e�d@4�XGS�Q�2�`B�0#`Me��h*�P2 B�T�d@4�X YC�! 32�V&$t�;XC Je]tCzKwߩW^:cAi׮]__iTmVcǎ1�B%KdJFD�Ղ ԯ_?uEFRݺun:mٲ%|͛uaÆz'~k-[L)))sǍnM\s>}6l:xE5!�A(h+`߾}4hiӦ+77W+VPFF$[nٳ|M 2D/۷yIGeee[nQ � B!]F2�}ڱc{1Iwշop0(Iնmp'I-ݻu~С:x̙OCM�%C fdpBիWO?N9{챪_nv>|XeܹSguVv+V;wW_}OT� H+`ڵ*,,W\޽{k馛+hIR\߼ys޽[sԸqժUKںuk?`Me�.JFD 8p:nMcƌ$]q׸q#(77WTv2שSGY;\ժU+{ծ];Zn2k 333YMe�.�RSS%Lqiɒ%:S%)\BZ\^^^IMMU~~~ f̘1ܹs>�]5dD- hѢ$+qiӦ={Ϝ{�� �IDAT ͛7/?a~~v~-: �B�0#P͛78ZפIhBM4_|Qe˖SNgy$9w %%�`%�aFV $%kJII\ I{?C]V ըQ#%^_VZZOGQ�2�a atI7tx iӦiȑj֬$iȑ:uz衻K3<;JLVV/g}ɓ'gSzT+t�؇@4+e˖?~f̘֭[k̘16lX }'{5bծ][}ѣCn6hњ5kZlYꀦ2�`5j(5*yڵӼy5of|ͱPeT�d@4�XES�2�aF*�]dDC@*�]߷! 32�VQ2 �vQ2 fd�(�E(hXEQ� !h2�`W(CB�2�`#Q�1#`Me�>q(32�VT�#C !�h*�kDČ U}/tw}[ZjjڵGu/[nEM4QݺuujŊquՖ��,t�(EuSOi߿:v쨜;V;w֒%KԾ}{kUVPzz^z%]p/զM `]F>2.]*9(8p:t'|R&MrvڴiZxMJ4`�mV>&OWE�XE(�s|dQ-{%AIjӦڵkիWGvڴij֬Y8ƍk9s 2檎�Bw2 �8rh*j+ jjܸqVXΝ;9޵kW:tHk֬4B�V!�(Eu6ydmݺUz^NN7o^x֭[25� �GSTUSLє)SJۻwQ_zj :Tݻw׍7ܼ<ծ]:uHrss}B�VT�9>2233YXvvtrkmۦ>}aÆ6me兟XE(�8!Dw^[g}f͚͛G, ɑ$h"L�X. �XC(<O֭{ァSO=ԩ,,]Tiiij۶m<[*TD�졩 ߯jҥ:u>m۶MWVaaa5\۷kcvԩSկ_?}U%�d�#Cb={]v魷*_/I1b&N7e˖L@x9ho^zI`P?RU.�`ʕ+8fϞٳgxqp@8N)>Os߯^xA֭&NO>gjE*}Xh~@?~?| W_Ν;u}G7I2�`%�2�`B�n2�`kaF*�}U4�5�"cF*JF>2�0#`]F>pC@*}pÌ U4�(U4�pÌ U4�| !2�`#2�"" `Me�>JFaF*JF>�pÌ Ut�| !XEQ�qXC 2fd�d�dfd� MH2 �TB�V!�؇fd� �>�2�`%�0#`U8CB�2�* P. �!UA)�|5�"bV@0@@�Q2 M_^}�PJ0d �XF(�7  kK6mڨ}ҥv�F�#CM^{55m4x8qnV;VׯC=�@S�5�${=ծ]wyG[K/$qm6M4(2�`%�$/ w5JZRNNC%�`%�$O 5|mٲE{?e5h(. T�,#CM—/5jHiK.$G}N:y8B�m!&kV3g6lo])))ݻwaÆ<%JF>JFIȀp:묳{쩞={9QF1c͡8}pu͛릛nһᆱ{=$�G.�`B�nrVrJu]Zn]d /ѣzj �}>G@D vA#FЧ~;wjҤISO=v餓Nҝwީy^@14�ǡ ~V֠A 8P'NԶm۴xb]ZxF_~zW}v x4�(Z|>>l=Z|nݪcǪN:1bƍ/ �m4&!;NUXX={x=$ƣd�9>2�"JYي+4eʔ͛:5fIRrr4iC(�5�"KYٟ'?ްa*mܸQ`P{/@BQ�Q�n> \r;');;[˖-S *}>�񑟟z=JIY޽{ոqsgϞЋ.Hk׮jx�Jd�#CTΔ)St=8C)--M 4W\x4IYYfJrrr_/?| 1j# e�,9>ϖGQ^t=hzG=a%|+B/>%KVZ+ϯZJ'x#PB�Qr~xo;8M>]))) >}|IGY1 ?+W_'jΝ0a5k&ɔN:Dh*�Q2 TÇUN wJII$vi駟^$|cɓ]ۼy, �}diݺ>|Z|֭[WDt[# <XK.Ӛ5kt뭷Z�7}!*5uTuQ={}{8ŠKYل ?>~z @0@S�QrN7N'x }:c$I?rrrtuy<ʊI#Qjj�`Q�Q !C9/҃FB3g̙3wk…e۳g.\]"�}d4~x_^{3j*FV9 ?;Tt2Q8JKK~;=^ @A2 �{NÇWjjN95lذ9:IȀpȑ9r$8^Kؚ]!C�Q2 TO?;Oׯpb*!v2�`%@<xP_} je@b �G .@_È|>%%%)??c'))Qd�9>2@%;V3<ݻw{=JQFqp7jԨ#^ <( 3 �9CSZl[oU<F:u37C%َh߾}. |衇>PE(�F(P9c)##C]t0Qox'\@ Q2 �TqƩO>9sf83X]TOc >\vRSSu1Ǩ]v>|o� 2 �Bշoj J :S Կ]s5W{9uA|+2�`#q饗>zq%CҥKյk-[L{wܡ?؛(2�`%@<C8pn6|jٲeĝ 5j*'e˖s`Pu릻[?# Me�>�sꩧJV\qE<q~Ê4iTԩMZh(�؇]w}^|E]wuj޼ynݪ_~Yw}GPZ  �X>@T. =zt; c'+B'|$i͚59sN:$UH0H(�F(�7 Ͻe}׺tsX�%�`Me�Ip^@%L{�HTdIu^@%!�|5�"JPW ìY4�K_=�(&!gesQڵլY3I:/8Ӏ# e�,d ?xmٲE7u]r@D(�GmڴI}<Leee7."ڷoE  k� \ѻᆱF;PӦMuUWiڴiz�J }6JFIYYZtw5n8m۶M3<�B(�G(�7fVva-X@3gԊ+TNja(% T�,#CMB~_Ӎ7ިM*33SyyyzWc 4!(%d�lc !�7 e?oSֹ瞫'xB Pƍ((�(&!JMMU޽֭[qmڴI6mxMΝ-@$A2 �Q2 MBӧkG<q~ p$d>2�$d@ox=�DS�(!?^@T�sT@D�XE(�G(�7�Xh*�TB�VE(�s|dDĬ U}!Y� ]F2ǡd@d�"C�9 Ș�#C 2�V(�Xs|!!�}pì U`2�`%�*dB� !�7�XE(�B�n2�`%� !�G(�7�XE@�!Y� ]F2pC@*2�`%�0+`}pC@؇�l#C 2�VQ2 �fe� ه�ldB�V!�(Y�>2�0+`UPC�nđ%P!�}qd <|PzRF4a„7ߔgǎqyՕ��,`2�`Yn0EHd;wTVVZjN:?."++K'pBc׏0 !�A!�hѢmۦM/T׮]{VΝ0Ĭ U}!DuQV-5mTRſ/ˡ%,fe� 4�B%ulNH=zP/\֭zHdUAQ2 �Q2 Hiii<xzzizgս{wegg+##!zU}%�UȔ)S4eʔ߿~|eK.矯{L/r\޷# `U0(�XFUUff233KV.]y睧>[ .~UXE� e !PVFF0<ì U!�(ܭ_^M4zaVD.�`%imۦիW0|lΝeΛ;wիW/ëRXCPB� !c_~֭[%IfҦM$IÆ Sz4bM8Q7nT˖-%IݻwWΝեKկ__z7ԲeK9ҳ5B�քB�]!Du2zh㏒̜bƌ>}ѠAT^=9SfqjΜ9Z`:-Z[oՃ>XKF X*U"C�vQ2dÆ G<g?~|cYYYʊװ2�P2 �ޠdfe� �x !�7�!C�` !�7�XC@�ޠdfe� *e�dB�֐!�o!Y�kT� ݈#C4B�քL!�B7h*4fe�d�A(�7�XCS�Me�! ` B�Fx !B�0+{L>O:t(w}^zcUzz ]vE|_]vRSSնm[;6C" �o*3XC4feyf=JKK+SyfZ~x w}3gz쩂7NC Q4vX{6l~iНi]p�}ݧݻLWnnVX IRnԳgO2d$)77W_Էo_;? -ܢ `@!�oTfe駟w՘1c d}]7 J{m6IҢE{n~%:t<9s�! �XE ;5do߾[lΝ;uYgyk׮ZbEqK۹sg|>}W1=D !�B�Q2ZA6mڤ>(999͛yyڽ{ %%%q%ΫUӵu�7(~g5JFRzzzsrss%Ik.\:u礤(77WjՊ:kᄏLeff�6T�A(�7׿U7֝wzNjj$e+qNjj#N^^^<7cƌQΝj쀗7pC@XNk׮ի1chyyy׏?zKEC(==])))L ׮]JkjѢE?`!�x5�0++-[(hذa:-[5kNPVV?x5iD_|EXl:u~|gJRs/_@ P\ J2 �vQ2 rСf̘QbB ׿U?N:ItWk„ ڼysx?Pk׮_xjԨ^~e;|_VZZcE�A(�7唞/{Nte9RSNU=t]wizgԱcG <8|^:uCjgizٔ!�x !�718N2 }'{5bծ][}ѣCn6hњ5kZl1chذa6?Wt�oYhQڵӼy5nf|ͱP!�oP2 2�քB�]pC@D !�Efe�d�B�n2� JF! ` B�%�0+` !�x !�7�Xe� ݈#C4B�֐!�onT@i�Xއ2�`%�&TD�좩 �7�XC(�x# !R2�P(kF@2� JFaVB�Me�aVНi]d! ` B�F.kƬ 5}i*�VQ2 !�kB2�`%�0+` %� 2�0+` Me�!5dpì 5� JFaVD.�`B�nXC�B�n�A(�7�XCQ�%� !�x !�7�XCS�k! ` B�%�0+` !�xQ�n2� 2� !�x#{ !Ҙ&T� UfT@i� *H(�xQ�nX(�Tff� pC@`0H�<�03` %� JFaf�7(5ddafB�kaf`0HQ��%� !�xQ�13`M  �xđC@� }+ �� �IDAT>B�e03` %�q(P33�T�C(HXC�C@$�XC@�a !H& ]F#5d;�k;dD 5Ae�s|dA@2�qh* ff� i*�^d@$�!C�ޡ H�s|d 54�8b !XC�C(H�CS�03` ]F;dDB@2�c !22�JFDB@2�JFD 5�G�bf�wXC B�5Cp(5q iiؿ6�T5q2ut萴re_� 2�"! `M2kךVILv;xPzi.Gb !HXTfu^iӦؿ>P|4y^1D(HX !<X߫V&Ԡ?vΫ9JFDB@Y#'5h:B B7x; ΒyB�${=��5GܚʬY#e!*/T]O>rr"Wc! !�k!,,֯ڶ5O̟jᅲ5֭rsTG?S7{; ( %�K@RAtg<hE&Z|҆ 嗛}yP>]JN!%�" `M0}Pi[۶Rǎf[-?_:7 $o:wf>k֯~+XO;k5a5Ϟ! !�k!\V][o%:-[?&4_? dEj*q[Gԩ3^ytpw(5q ׬ڴ11ǘahr|yl={SO&M~3gK5/խ+5o.~z[J/T7\cn(IվlԑCS�e&.]F׬1!gQľ}ҬYMҎ}oTM۶I7 pwף)iB)/OZ,eҹZXxtׅ~'iLuGw ?UWlDJFDB@;v4`P1LG6ϑ%^>t¼*q۵KzEfM@k}N|ʏHfϖ2BO77S0cݿԩR˖RnRӦỤc2�"! `M̛X'\t3_~1wzK{�`Vi I鮻L7__x3cG+&P`P7O:Xs"ޝog͒?_",]zt׭Ycjɬ˕ocŋMG(^.8V@~>`_ !HX f]:C(f2}$]uaud v,1^3I=֌Ç,}ѪUfn3[__qٿ_Cgqto/:T,Uwޑ1ґF/9 (:ĶdtP*~IRÆCOlɕ51CgAGLVkq%?{{y|&rYEy?\ﭷL0w1ܹ{ߗL ŷltwteg]@ eSSMӦR>&ΟoDu+: ?7^[ 30ћn*4(EupA=ի5j$ϧ &n5iDuՅ^+VqU!�kbTfS~wqEd 7o5dS^W&k s)%,O~駥++ZX^IYvqE͏aLs1e{D7Yzcu/41ǘG -z0/Bb&tu/[c3n0dSS˷d):عs߫SNts@ >}hʔ)6l~iرC\pmCj51ʔA(KpuEǺv5_VFSW əgF?o_餓*%?͇?IR=}{k>do W/x7X+,̑.gŻ:$=pɽ֬1MԫWtӫɼ^zyܦMp~oأGM66[wҿm*c$}[G !j-Zh۶mڰayr];m4-^X&L7~㏕cN7Q&.%3!&w\7^zs/fli[l^V󒒤}׬',`ЬUn|k&L.d ̱?4ZN~{wQd~N6,)3t }c;oo򨪛c#}fŒ Ө+?lsM&+X2iE럋رR7!DuPV-5mTʝ6m5k*|q0`fΜ512Zz/7:uL `J6OZ  .0+,o&#Egɒ#&Xf}dgF065Gne˖Ij|?opy|&@ݽc:YLzJ1eN;w@Y3=5,a4ת%\Ȕ^{mѱ6mϿDq"E722Xfg%ӣX(tn!7M{vUp_BJFQӭXBC?tUҚ:51oG &D_}e&o%je&cfw%$mu׮fn׿J[Ityj[dd,u5]Nɬsѝ_閹aC멧ľgϢc^j:ׅgi&?fiL@ػwѹ{L_D (3A 5 Mqsrg &'K))Ukaaҳ1pEϵicnڸۋI^X63A[hҙd~ū ߬+_?uʹQg+S2.''G͛7/s<tlk 3@@6Y|!tӵ){T:8wiPӳ\ic&x ;˗c.f&`gdž frw廮[|= T=~<%K/5w*A>ݬ.%{۶5ĺl~(~0s̸3e6lmr<֙E~X_O>1!@*R=&{W\Tų͛K'>k}agf1f׭F~M_2L.ğ{B[X^^j}:V}d�i0R7#| ,M_J$>|RԭL@5Ҕ#kgJMoM4@QoJ!ŋM6 ӹ<m3Yп}Yg}_:<)7~+V[㘽W6n4BM)f9d/s- 2i<H7Yڵ9mI[qA͚3{ F)pIuEtB>ԼN0)ɔV6 67N=^LF6#n|O|yq̿X2-c !DUDz%JMMÇuGjjj3!`ML?4 fL`Pzݦx#M0T&iY fzѵ1Y%I 0ayR2LrIIfr?wi t…Ҍ%L狯iXf,.^Y9%2[H&3\αSN)[ =tSu2dY/Wh~sHQ:m)/{ܘ"-u C*iQt͛7X#t0X2i߯_Xf$'5`wtl +SFz$`"l] wyŒ EZymfB`[,ܥ{wK׼930ƪݶmxw.<~Ɖ',yimۚfѬ]kʴM3#ML[A7GڋpuPLi))Ҕ)&8*[{4B[TQt:uRvvvK*--Mm˳ ! `M2f۷odBO_С`Eu& jJM6I[6~گ_B8Pװ%V2V4]+!LbqҫZi6Iܓ/KLfg>Ay#}~~Ɏ{Os싗TxӦOJmd C{w&[ב"i2kEC oQ- LvrS>Z;9F !jm۶i*,Vs5h>}zخ]4uTO)n�!`Mޓ4u9!CLC͚$dm"\^=f2X~k&~ulf~~=6l0%ݺMw5*)WuSWfR[ Xb_2͛M9_E-^lKI(߲~2c"crѐt}sipʕDe͜i2ڍ9(#7p͚N,,[Vodyf^MSrZ'Ph0X TTN%;φZe wTIgf*O!Du1vX/Yfiӯ7I ziĈ8q6nܨVz\s5:s4x`}JOOK/`0~س5B�Ĭ٦</#iX:t)1B4[K_?X Lȧ- ֮5C֯7c(曒MGF0h:JfsI}ndUcus#앶jmR7A|.G^gU[pF5R@iSrѐHAyԯo2+WFs<4}raCI_]chڴ1{߳dE۴6߽+ލa=V,w<%.F-wG3f8 zq2sϧs /\uM'NiRWP2 dl1s)E{YSV^ŲG#. ݰתoIM7E`]lW3f2 VD& z &:cFH7c]0spw0:ur4z h@&j6%#T>l* 9O?KDnmn51eh,C( 6((; ?~|! 4Ы;w裏"nV_&&Me5k7aäk1vn$֪eKTSOsϙw)z.;I#&sCp{NӀ/(41]7a)kSqe3ld4V:vt#0!fx>gW'$̿}X)EN!6ZCX 5)'2�"! `ML2gIUd]qc4ru$^2g&:t(p2S>?E>l4d$SyEazEUԝw`qʿCE3'}GU' CU:(TUX׮ueu,kw-?QA@@[ d7̜\$9i3>>R)'֭@mt>$Bإ m7L`N+*w U1M\Q1b3=K۶4ioe ^p[FKKwT \~jni4UE$8ʁ뤪.NZpf͉Obc.a6kְ1np%\gY7#;oF /9@hYUo_[<Wd5au+߶b/clma)Сw<U`Ua&w;�~8ڜT ۵ce?˿\piP Ty̙:^)ðaa*ݺDf\[pwݞ rsڦNe5>Çlȣbjg.>7ϏtM V/0 ŮB~=[v[@ ac6k:LgM:x 1ڵ:7d0Ү`ӛ׵hx"z_;=cbl8]&ʶQBqL+'f*En<q4'ֱba&_#rrƏgh׮mw.+ 'nJJpر8jgV:ѵNP(D#?fHI Cx6\s328&ބ3o7ŬK:ƒYeA];|vH6ee ,(A-.zQ ';2 *#"6E1U n7g j?X*҅mtZ"^֬Ep2n/ǘ4at>~OY#oV6 "ڻw-[8'^�5euu@aйs` \5j7rxQHN'prVŒ%īBر#onjnPЄni}%^lHԶv=6@JSPD(c4et\ ߃rBn.CM3[NiibDW&9x0-y<uOgx,/g{~>R!lܘ!8 3 5࿥xWɲ[N;+=o: Sjxӟ^9 ~E1~zt97ᅢ xg=0]8=rPD)cT!?{PNjPxhsy䞄Cͷf 4'Ŋ9i?,-zD@w/׹EbZ "N EvHoNn+ yi7lp6nb_߲e5ޕD D̂qo /ڵc >x"SOvѺRVmE-"bGPDs ,/{#Fľ@yO51ǰJ9?Z}X9 R1˗)& B \yyp-x1a+_ǏT@iz 8}O5:w/x^|9[[H a4fOy9eU1~VEosmyZRp+0F@CeDN5=()3gJnݸ._+%%[1c݀|@>YU5+:8[/N񫯀zb=7//$wsu<?tlqBx8L05N{&wݻ5k`UsC@XRvj'6+ gѸfĉ]B@("B8~<+8{b&~o+fT}V:Fb;ڵ9ì#>U}ô^FLfk[yR=q"PX)CX{uc`W~nBVݺޛ@j?.<}'[F1n6ax*\۷GXu.ށЮR޺5?ht矏h4WH�BqLLCeؖvoY3пBxQ%ojU^ u%%<4q#ˬ,nI 4_e c/\ߠ�� �IDATBx8)7IT-+x{S%[x*Y]2phY'ɡ,B #.Wocw-E߇ZFEĎ8& W_qIunxܱ#R[-i\.l 6a4gر5eÒl`IB&Tu[z_\4i 58ڵSU77._Ωyyl]PI5=[j<kXNÍY5rL6):AU-"bGPDS ?픦:֍'mWZ⠓P{fۣ-ӬϏ<Fڵ(uT@XP s[N† ]S:w϶3a|#7NJurI,Ϟͭ6f̈_{wV.ߍ;㲓tjٲ%]U!; " Q|R F֡nˉh{.S<v7on2,`jۖ'ZF+ּ9,Z͛T ѹ3g(VݼpF~Ml^U:p :+:{{y"7Z»t߉iurpO,.M y7!; "☨+S�rÁ epF [LlۿxTכja+�mMmۖUoIN 5ɪU'zosAb r LO<3D. ,S'@9uwwS˨Q DxTBتFkx¡Cy<yvp`p.N AhoNsB�[p}-qn@^=9H?:a~Lql Tzus+q{LBNB BqeE9pѶ-p}6;f `eV:&4h֌{Ԅ%0 ?:a:ߊh^omu*uCՁY3V C'iBoNҿ?ܷk:R[꫹]C:w.PB@("Bx )N0-'&@m4eBi֌BI nCv a^opV:2\0-^^sg:u|rQ5;x}"#|9^x'#7zxSQ|Z j Q D5Tf|N0ƍY V!Lt BS9f9 |% |+urJ v&:2 xDtҲ%{mrJNN=[H:-ׯEӂ P{w~9oSlG-"#BqLTٳ_I.--WW}h8{nȡ+[n.[WM `eyl|]bu "dUo s,UBT\s5�=zg <p,zGŐ5y2Jg;j98ZDtQNq$6it.V=`{zhuS]h g~,)(&pd@5+޼7?M LʕYZX߉ŋ`ݺ>tΉiiTeeCBsiH2E<T=EV[F9a4 aptn+ѷ/[DGfA p֭έ4L.=ɸѺ5+ޓ_~22+7{!CV6wlF6uE,7 wB@("B D2V*NX+_ tg@ȭre޾ǟmy9_PA�8lkY!- ;6gk2ڲejm~104nmj; "☈< 'jZfsUjJoޜF-Z0fy[F_ӾcB؞=MFc_^Anƍ#Tg&A @Q@("xqqő&^0jvʟpm۸yQpoOO ]yy5Q!oURuĪwu>@h Q D\!<6.&z( wf٣Go*vqE2*Q}! 2*SvBJSPD(c"*u+;RaӦ< ^GhYluB8w.o# &qTwek*l܊ 'աrU]wtTaZF5TFD)c"Ξ@n/ :g L <pw`(­[oUkْx QPًP-"bGPDq lS:o=1i7?n5kxW6$~058wA@HoNoG[@2"bCPDve3fCxW_$ t:ET!Vs+ <g%B("1Q G!+S�KCGE;Mu6@ػ7pmРaAJpP6k߅nzd0PӋdIH@v>#KAZ;wrۇ Ɛ!}hn42 98`dy!6"ZFE$ "Ӧt e\CX6 OǏ?Neՠo͚Z?N�NMQH*jܘr #O-"bG-"∐²2;rz3pdnd(]0$FƬefUEĎ*"∐k_{ X*E5kƫcp3tw额;'㛡2ee@׮"G"F};ФIPD(#IHуGFuK‘tV֭Nؑ'fx3CeTP$ #~mI8fFn5V65".eTDl(#ٿZ9|D)m[ #?ﰩ Hr+UE$ "∠¢"Q# G| I^^ߪďr !;ᙆXkiْ/#@ H|j;#IHPbgؓ3-@Æ=M&\mC-"bGPDeT#KmܘPDGB8B-R)=+jHi DIPDtʨZFLyyZ?(*j "mN}"ƍG-"bGSFE!(y>RC$;vp_B/UE!eȓ df&(D?&ڴj Q GeTD! j@ "∐CeEDi]j@ "m;!"5 T!)#Bj Hz"͕ P GhʨCB˥2"@PDQ j "ӦQ Q!T˨S G ϔQRPD$ ^ Q GضVPD$~rr}GӋBqPbުeTD$~rr<^2*"vEBs[BζeTD(`ѵkWԪU Zˆ#zXguj׮<\veعs}ѹsgdggCx86+ "":/d@uO`ܹ>|8=X_DϞ=ߣk׮�M6OF x?bQF|q 7`ذa뮻0k,r-(**=ܓ/U$nIPğyL-.5PD(; ϷoĈ8cw�<c(..ƒ%K�ӧ8 [k��Ÿ0tPL8�pUWvcѸkQ^=JR˨CL ,*ߩeTDe4'pOvڡK.Xre> :2 駟:T?�1cvލoctM8x >}%"1'!jI0@E-"bG0N,¶mаaC�͛c;<,YRoiiiXti\jʨHb  8ye1�PPP��hڴi}6mݻw ^&5k"//[lIы$ZFED$j 8Xr%n&p] �dff?++>5j@qq1j֬i333+?V0v[Ñ#GbȑQ-"rHeTD@XE[nŐ!CP~}L4d7Ҁ)))Ovv6l?~III3f z ℐN~DDD@-"V}pgc2e :ʷVQ:ꭠ�yyyN4mah֬Y gm""R5HcTRRs=k֬ɓѩS'7o5‚ wѣG;8�… v}+R]Ce.*"_ZC("QP AEEFyG߾}mwEaشiSOիWcᕯ;РA;ǎ\ 2$1_j¨H|ը۶ypbΝxw}~饗�ǩ[oxꩧp+VVFn 1x`|xciSz9,6%ۖQlZFvlԪ/"S erg>y opwo2331tP<3n5j3<O?-[Ę1cp-8u$R>SFED.^!`Z("c0cƌۥKL2%^}ոc=,eTPD$ly, ʃ"bh 8vLQ$BQ o "UEDeTDP G(8(;;PCPDaH Q˨HbB("R GB("⠜>z1ZC("E "" @("ДQeTD"@("PPDAHE抴BlL5"MPDaN@4eTDj)#ZF HeTD"@("*cơ+ğ ^OB@("+j*_5"bGPDU!IsͫmT-"bGPDaZ*($] T˨P GeTDAHED-"" ZC("vEjʨHeTD"@("P˨6H " q*"!Bqr{EBDB8m=�OR22"""Q8²,O( $F|Q˨@("]TD$rrT!EQB׆g *"MPDa;TF-""_!1XCeDě8B-""S˨D@PD0TF-""BQ@("eTD$qT!(#2*"0@EĎ8‚;TF-""Q8B-""S˨D@PDaYZFED D@PDܾSFEDKkE$ "∀Ѣ"$ZFE$ " jqTvZFTZZh֬rrrЯ_?L6-[HKK}پ}G2}�"rdp[n) "" .r|Ѿ}{8s0c 0 =mڴy]ݺuu)OPD2jY2*"h99|u4!1a<Ӹ;��FBnp=`a?g={&P #,X2%%UPD$qEs2*I&!##^{m233qUWaܹؼys؏aY QQQC6E>b*$ eTK,APV-�Kz*֭\XfMBP˨8'5-jI@  дiӀכmٲ%+:u`…xgѿ,^ ;T@(",3TFB ZC(hܸq7n x}VVVۃ>|8^;gy&N>d<;vlXP GeTDajj`ȑ9r/^^z?;;/}lv @߾}#ڶp5"}2*"xjPӦMmB ��͚5ccϞ=U>JPDܞ)$ ?B(;VBaa͛�ѣGsڵhԨQ\:R GeTDaAB(ٰaPQQW^yux7ѯ_?4o�uV\۱cG/xbuY?5"2eTPD$qjTg}qb8|ooףe˖�gϞի֭ŋ7@˖-=Y_R)#l+ZC("8梛a<wy{A1ydx≕q\*cԩ(**Bfpuᡇ:[FElFHYY*#L<x'7ѣ1zD^5" J]QOR܉HB("!)#*jI<@EĎ8²,@2""]!T˨P G-QBV˨@("P˨HB("a(#|ʨeTDZC("a(#|*jqH "$ZFE$ BqeY2jq*"8B-""I5"8‚xs�_~O'"z2*"ad$�Dܞ)� \[7�L \@'�gO)"2*"aB("nAE \/L<,PP�w t""KB CPDaYZ;wcʼ \} /@^е+.GkE$ BqrH*jGb*eey\7ht lۖO)"rrXQQ@("lݳ�ab%Ys≞u[ *.V˨R GXxu@ٳqy^w@͚ "r2HB@("U<}�hdd�:˗󉈤4@5"bGPDaXwcxBvQ 9xW2*"6EfL=͛9Vv(ctI"rZFE$Bqi=}76*@8{67?I[sJy3PRI ;X!ܾ^B@("ъ{(@wukWjx+-w<G"_~ @|g *"MPDp\pJl [?�mZG(Mv><G"?<0dеO.�@e˨ʈ7B`~Q}dqT9et7azz|UaFб4;w&XDn~`u =2*"El&NL6,^֭@CF[YW$zڴdٳoLT/ 2#@ZtuG]*#"E>PQ#~w@˖@ӵ+\H�믁{[nu*G$lv`0}4Mn/^y<dۥ R 3~<oC7&߃hv]hҨxLoADg Le 0eJ̪2�|}rASOm_Fj"bKPߺu|OKS # \.2GY�� �IDAT/_.P̤QʡCGr3w#^y84 ?8l`dU}a6mR/4no/j{ "&Nrrx@7nˍ4P^A}kǣJ?PX]�>ZFfvfE�N: b0UUkup (¿s}dљ?^zp"` Wz^"=B n ؑ9lX +7mmtꤽ˄۶zONu;vW}$K/dоjW SF}X{X3\^bUEĞ+K# U!#F��U+ބ0#??}tQHW^v.jy&0kP\c @|TgY?qX] 壏K/5juglYrیrcWܒ]��\ZC(">EM�Ԯͅ. qܨu8>[!l,}@~5Æ~`n=w9PM}Nф7u*[-|7t__=;Yv+Fl}M`[VSO ~ZyUpr2*">E bD R|*Uc,䈾�@y3Ф PfvȭvMӦ$łfRmtt>4z+aAA(8Sۗ!ۛiiL0ʬYs]Y3u "`)t{K-"CP^|1ߨoU% 2f@iSYzu?o� 'bWm30rxZ \Ï p,T5m<P8?ByiOyYoKי3ҳgӐصKB @(b|P.Ϻ�V8q[n2Z1x 8i�֬Mg%%&hB6!<GCXQ 6|㤓~>UL]pN9$x5NL+/\~9l>HY<AP kXضc7c"o5᭢^{j xS 1֯.fU~*Br5fYrfdHN ]킩-bSOj*o7~ʊPuioomyasz�x#Xy\Sl'~=A `Z /"< ۇG{~7ϹcSZ ̞z 2*"E͛}SEΚ3%K{U a)@g֪i>5eqX׮ײM'<$'>1kkӆ9wL q`r &[EۯQwsK!C '0swl]r@ӦɯtΛjv@h5 j? "V- $s/]K.3~5++2<0?'Ui*.)5�Rq ĉ?f ۿ<[$ǁ<'3>0,7o}5O}}N|}#m*UǎzqDž~==Nv g˕3f{޽{լQPDl)I\n=aYW0 Ƨ2ܖ9J/Oڗf7 avW!,+8|A5L*5l9,soTZH@8mS'|~s< S|W/34==rr]B@(�r/T@ t[@=ܖ9˰?~\a4ڱꊷӁ~Ǐus.LIe +ZmڤN >8f]c/ x-ZD~P]?;׏Oj(.f tvQ?]ȃ{ZFE$ԨQrw B˲SXi+On6dWn<*ѴTjoױ~`ckm,>+s'B;*@²2.!^?h�-[F}{NAF~UlN%ӧsm$W/VlH S!ءQ @(xLa!|>8xTb<BZ!WժH'Reay9ENf<$1Sh,x'`Ρ O<YG巛8|8ˤҶ ܹ@V %'9x0pѱcʕ0UdOz̴Prsydo4�9&}MRPDl(�a2*+WO,3s\A .,no=͖Fݺ,:YX)pUmԲgW/n1x0C q0L5 f9Eݻ>褭[.'g=ߩSe}w_[?hi߽Tj,:hŭbY펤:5"DҠo@hY,]uy]~>rXFRH~ Rk̤I\58ࢪ.]ʍ?cw z'r]`aDZ,o0]%FKKy]Hvo| ؑÉoB Cu?hBrgwc9'ٓ/}DvS!tQ˨H`Q#ZV]m6n�Se1F;!EdT ma{E4 ˖q7o\wSefHbg夅@ڱ}! x#x .຤oauۼy J6X%|9$"w-^jWB_gq4>pQ0rI yh:߇xXO=U<O/u~OO>9Ջ?~(kpZ߾T˕Q Ѱ!탕K !P)bcǡ M̻J09v5u# N�1a0Nc\@qCP'ÇzJmsJIk҄MFOȯ=%reԻ7ۈc&O9kM,8/^3pڽ;[6n5k/{&#T! "�]hؐN^3B3[5^GX 7VVg~۶Cb ;w*{2}U`fK}3w饑xb;`K=ڕm'v0gV@ ϯukg`i )zb2C wcZԩ ɶ?0{vt.]Xv 7hM(�4(T! "@Q@j{j\!{­eseihk e1C\z`ڴ>ϻ2TF6.n֯nLP_[}swk"Y?h8=iԴ�F3rXŋwв~`sgG1c/KAN<15i\m 3Xf޼E2�򊡡2"CPn=zu o=QBm'� #0_ 66&&ŝƍEA֭}bK/nn8Vt?>jݱS4:㩊 @:+q:2�zbzL{mqw/-' \e}oѿo^ &Ki)xFs ; >5(R˨R 1e)2S:^!^?hT'1C]@pĉ'{#`K~}x枀'hF??)US&~Rˋ/,Xvʗ'Z'n U>; SϾ~/[O!O&i 2�]:-'r '&b/+?~7L:llt4BH( "&d٥L.q*,Yٍ ϯ-u*P7!ֱyS7#iXvLz²;v/*i8sjmJB,S(G ޽/VQ<޿.>ˁ"~qEkdG}6ڴap9 -upgOe26G4myݐ!oW aϞ7<~+V3c<=z8;Xf<ntF]Ѡȭ P  p 6,ˮBX[FQ\I.r7f8l;$+_\KlYGl:h~:C;][7Dj��؛of q„؎-R7s{?'",+TX!*e W5jp];!|Œ $"N F?l~S_$z;:gv\AF5VD( "7N7l\/ڕsnb7rCBu }{/sGn!4_s$m\u}#./=ar8V\ kg 0 OꖿɓuD~p6gg%"J>339N9C˫5kx/Ǜ~ߩS=.E2v ;(CP‡ c1ELVfjй Udn7 ?gNgzEn�U?Ov8Oh?F4}!/,;$zD67"Mog(`.O^|qln1-Ç3|qEV\_B~VU5>=zD@ kײ=_N:?_)"В%UX石r0ᇁ7d_i)W2{7/E~dABbΆ y5)6R  Wfr2^҄fi|/B�r [> wU+Nn=1n7JZlʕ]w6AƱDzZԷ/'jhu>n֌a-QmrOFI?ߟ*͟q %t֧]uOzѻ76go^3b^G ,-/ gZ!,Be oE9v;/1JH "7޷5&ce[8e9…lvх'mˀW^ `83fʇsl!=U8fo#F0`$Ol4iv\V}Xzb2ulV_ Y`R }- ^??P'~5+ަNcУ/$mt|VcC"~B3_?~;w9'nDb5s&Ԫ#9(DR!tr ag&M؟U]+ srDVSw\s}۷oIaU*yy N/?^cӇ//V0p޽y"slS/VY۶.b'O`X V!;[,|IǸo/W%vċ^9 Z<Ur)�f w Æq=x[RbNĐ! ¿m:8㌪]֪ŀ@ha C- yys"$[ی|DPln7d={;Ny9;{MOj[!t03QgVnbTEE _U8� ݲvmڷފz>}x9q"E _޽wbP M/mn7aApߐiʼZnx"9-Ϭ²2jf vu"Yg}6+{ xEkYW% n 'Of˹E O^yuUm5=X�@et"~&m6i3c>f̘'qL)\˨e%v"н@u J+�Oa�:ާp ~cuONL|)V?a3a`\uUoY91#/r<_…tu @xgEZ'뮻Vs|.]xUB\Q5a gCp.+nÑڵŖ okV+vwއ|A5߻)SA2%%"')v&i3Pwo@XM[K5RPMABPl < МQoߏ4 _3mDOkbjԨC\r}w -;s0ܹ@Zq饜nlxy?+~=<h%K_ίٞClum^i)'iÊmXC>fÆW|5:~Vj 7O^xn_9`% ;~_w+7�-ϖ^>k?.ߏݺqQ<\s +^ 42y2sZEg�Q,V, 7gm&"vL%Z09,-Zd-ZC>Ȳ�ڶ-}V}&2feeeYVEEzeuHk- &VdM,aCӲ|вyDzMK.,˲Z+&Mаem}ZK/Y۝쯢z۱ò�-ZXX֫Zּyu@s͖Ue-XP)*:(zwZVU\lYu?`Y[gXі~}^o?aY%%e[gYeeĉ!2??Ə}5ȑgYgh˪QQezeթcY>5ݖ|e=e ʯ-k߾۵Z5gZ`=o~͛}__XhY5vl>H8\cY]TWΊ:affh8Y!l.t2{7�`_*mH͛sprdA_JĕWW8h8aCsײ[Ǘ5k\Ԯ+%{s;3?kbG?W\`ײj쳬 .^w. lۗ|2!v#ٳaCO|([敔ݛ٣ds8fĈV&N]zFoFv6 ߗ'`C7mb̙,F K/woub7.Z5Z<j _g8b)ʑm&>z_oOt 5ahޜg '/1~_7#u!=LJa!uo?\z:wI8#CF뺊يGa9mW_xF2CN>2=3ǜ8k<Qx0h\x!uNȇ;=+.f+-ct;ޓ9V-{rq^ /3'׮ F]Gb(oЀ.'l͗,p`I'qg�[g>@h~8,+"�[UI@(GHv6OK㳹0ps7W@؝ lˬҁ[UߛLT[azܙ[{yij[Z2^q|6z'}TbE>]wp$Jo͙f'/jJIl`ki�@~5fH�� �IDAT-ؿ\/kDĘ18)ʑmT&z/’ W!vN5˖BYmTst= an]sx>Vā4n`1s$_;WJʑnӦ6LlxIBϬ0x~HܱUetp~)/,ٲeD$5eguxono \zٿ:Bx,?T!tU<64/piqK<lТE6j@jAv[23y,7szň(m(NY31?f΄(_0*""Vr3SXy…0j:VUY)]$OZux.@Tˬ@U s7{`_X<(7z1^{S b ,s]w UkGuTu{�ƍ o;wY5nn^լv$7~ ˹x)]cy]E?΂u6'keTD$ c FzGXQÅ<46s|2)в8+㦹s}sy}5/|r䈦 a57 @K/W]2_�SXئ[7Nh6U~|Zx3wƌwePݔٽ3|UNŃ3n=xAj~H hӆ;Ow\]cjۈݻ9EK踗_HHsorz:w~!̙Ln7盿:G|`{K/1d{++޽ܝysӉjCK|N6l�&Or)\ ""I`b椣= |Xlg$ey[7y7,Crq_sW!6Nڲ2 McЍ7^ UTj|>?>䮻y?n;Ӂ(C8)k>;R6_֬ao{Bffaw*E_֮=xױ# ,+WfTKF|-8qZi?K,K:R,^}z1cnLSj֌ieO?С|jڔrF>]~yV??0X?ҥ|PYf99YVϞ|lۖ۶y`T@fd�?̍22[fp&i\,non#ݨXǹ{7UXgVP>{z:_vll 3p_r afd{r]߿o0lj*\ O.c2}晁˗`R^D^xQU!'2N_Tefurg  '0v ' /�_}p <Qss5k**v3hs\Ͽy0kߋaCۼ<G,^̗ s?Byn.lȵkYM=t~ 1{.u<سRT9&M{5 cLzIniwo 3~Dobi%G Z~Tݺ<c䓁EFXY;[x1zEg<R XKV\k|p% ߫1^=k.yǎ|"(,~5h LgQuZYVpoh}6ͭ[y|߿F /7:ծ].僺ծ+ݺg3{6ͯ͞`YU+V!>I]t߀O /MڷK"׭-Oy6j'̌ >!i' 3KKh,y+T͙ç.czxa>Gy*?,a51X\0y2o;p뭼߬Y7Z\lԉ6/D;w{>ɗ^{ƍH;m5E6m<ϗu{b>7pub<@6 y{^:sB~!CTT{܌Wd`<&n7wǎnl~-Mp̋/fǓWTğ͔)>s [t\\RV󊣏yܹ*܇gm@X%e8>@PVZy| Bkoqc>h>灯n]>?3K/qo]5 vc&AtUmȶoe%Ҵ"|2->Tr|޻ݟ=4 mR>5v~7Nj /3%Z+wXছobH40ڷg E܌ >{{dP9x!=]CJ8ؚ8Ms#[^9O?o۳ܩSYKN;. n;pxEAs#a5?? GhH絯M (:TrxG'}D""G|g깯&]Eg�vGv5o\QY*#L.rV=T*s萆ʈ$*cY.L-3"Uw1~6TU0TN-ն""`{- R$HJ>"pjHr ۝BBI "p-ڇPD$)H˝V,"(*O>ʓqNZCB-"KPDs HdgP-"EPDλB@("99!TPD(HU^V I!@ "p ZFED%;5j/ "pjI>BIʓBQPD(Hy֫턈H� !_ "pjIlBBI8ϔQ I5j/ "p$_BUEċ$9HOKCFFFDTk R 3'5k|$""G.M; "p&fCHhٙ$@("<PB3I8OP-""ɒ T+/BI@d`ܭ2"⡳3I8^%K-""I rBBٙ$BQd�Eċ$$+D$�,UEDr a$fiHdg/HUQ IV]p+D$*+YjIS!P@(" QB3I8P=䈈$Ke˨*"Egg"p ZFED%3�PD|)H™@dqtUEėD$ܦeTCeDD*#- n!BIRUEDRAzZFEėD$JJy@("\.EċRHii)׿YfA~0mڴdH *3nܸdHL{+ՕnF*RUy޽kѨQ#ԪU v,Y#Nm )/s=QFGzz:9̞=;ه&R%%%f!G'RV+@5Rzv=( W.EH(!ַԼEfCN9Z5^Qyc`Md:-M V~4mW {<39|9JMMUnnƍwyG^ݻE{?w7jŊĉ%IÆ S.]4i$B!Z@[Q g.9??_WZZ$)##Cqqq:urrr\< Gg"??_~~~zm5ɤ#G@rcwM.�VLc|i%)<<\ꫯT[[۬{*(..V\\III۷-'0�;qSx9f...VbbC=))IseL劌t7HEj˰~WT# /Ӊ'm6w\[xݺcƜϗ#K_1{ݶsΗеw#zjL&zVlTW9 ylA?߻vNK~ o}叹߯={.嘹QMM%o{5#z�YVzY�et9���mjjjTZZ;,c+Ռ@!"##.//$EEE9, СC7���RRR/Jl{5"!!A{QUU]}˖-;m���rm۶M 7VڲewB:-\VZVrrڶm����k1Ç{nv9rD_|VQQ< 4H ){2d^z%С.]~Mn���p3O~EGGK'&''kĈڹsf͛HnB駟jZl233UWWUV鮻[jjɊR``w߹k6l ___?n$>}ZSNՀ&___-]麻vҀt5l6k᪨pq@'x|7k]QQƌΝ;+88XڵbQIIú>>>{/___}7X,={&M}ԩSnOIx<V\ &SNVQQ֯_pk^lذA{Vff/΀ٿڷov)66V6lВ%K4|p<jܸqRVVUXXh)GpO<VXŋCBBʖ@C mݦr͝;W~'۳�o])^P+VPVV&N(I6ltI&iӦMn8[iiinp***JVDDnE3gZź$3o߾Zdz)W k~+IzG]?$/X,zz뭷l2I”Q//???=Ӷdȑ#UPPC;TUUew7)ZlIrV\xvp"I}Q\\>f8[S:u+ZΩGvaP:v[nEwo]@e`z7۷owG[@1B!!! P޽uVw\Cѣ֭ò$+i/]{d65f>}mȑ# xJL2劌t7֜=lp7ɤt /,}ڼy3لh|xǏZq4yd%&&^k֬ѼycmذA-Zpw0io]@ee2Z-<M=ԣGx@K/i͚5nh1B0(43gδ{8M2EX,n vޭ{N)))z%1޺SFL@@VCƶ:t~ ^x1qW &W֭sw+0Ç+55UϷ=*u^&22QQQn d7pΜ95,Sܳl6m5FVǏɓ'5p@:uJk׮U6mlo]@egUUUշl"I\o>8$ Tm۶U֭UTT䰬1^Jjݺ[hРAڻwVZx匷C 2骫… m5ժl%''m۶npѣ;v믿V~p~aZJ֭[ 2čYV/%iڴi%\]],l٢<yNcu .:E_~&L:hҥ矵n:u]npлwoGΝ;pBL&覛nrw$iܹ:q4|پ7nZ<xP 딙*VQQSro?=裶o՚5k4p@^ڝÀƏٳgkРANc=&I.B BVU/_J~6m�̙ݻWNRDD飩S}nՁ$vcTђ;wjĉڸqL&RSS{1nq6$$DcǎO?2թSN:t^x9ի~7Q]]5m#���Aq !�������� @����E ����"���A����FLLF6<ׯEm3|kNgΜi�� �͛oɓ|||lZxLrQۍ1BgΜт 3����/s@g-Z ]ۇ~{L&q��B�jhhpEnƹZ(##㒶Ё~+�� �믿I&Ibcc+___o!\d|}}qF3F ըQT[[J >\aaa2͚<yאָ׬YԹsgM6=zN8q~7nܨcǎsX6guYAAA SRRrssILLTXX꫋w����MD5k%繮!;v4}thѢE я?;7իK.6lmQFiҥz'5~x۷OsUqq6m$?sWyf(!!h"effjȐ!0ajjjcG[711Q6m3��·@�zzHM.22RW$=Z{UVVy}GzJ111OlpƍZxrsseXl׫W/ 0@yyylwlVpp]}ҥVXqccc �fÔQ�UoȑvwPU׮]o>[-//O!!!ӧ***l? }ǎShhC=44T~ j\p]��.�pĐIҍ7P.))ɓ'si=zo&O`u]qqq3f6o|=q�SF�WsyY�W__}gNoݺylVaaC=>>^VZkjʕ7o^{5vVVV*((H&鼿 �KA �xW)С֭[jꢷg}*]s5v *--M3f/-[+--7|ٟ��g2 �*AAAd7J:;pZ,iڴi:yy+%%E  ;v--۶mRRR.3��T!�xnݺIL""= tz:=hԨQz7}vW*))Q~~fϞsWϞ=e6wߩW^z~]ڵk>#$mݺU<xe.��!�Jn4m4͟?_k׮UCCJKKt:jMڵ,X)SO6lzy^[lC*//O3f̰G}?u7*33Syyyj׮]�Ji_��JKK5k֨wMj*&&F/Ǝی�k�hF9r~.;;[&IGn�� !����g�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!Ǹ"��'IDAT�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A?+x����IENDB`���flent-2.2.0/sample_plots/1000m_pfifo_fast.png�������������������������������������������������������0000664�0000000�0000000�00000263652�14670056262�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����)���kÅ���sBIT|d��� pHYs��a��a?i�� �IDATxyxLgDvBE&YؗHPRѨT-UJĮ Z[".BBlLDH"s?31U|?ו9sf:#(4;@DDDDDD5!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDH$oG[zz:$ _y[H$}mUTU?44ׯp???H$ܸqڮiokXuל<oϷ&"z)RF`` \]]aii XZZ AAA{R[?cccmAAAx+;OA +Uy}_7TOU=Iף`M~ թH?cE<==ee2vA__FFFhѢ&M#G(%qm?RѮ1o</g(bٲeJ6mLMM;;;�كѣG#//M6!J9s`…r lll󃽽=DQDFF"""7 22 ֮0<~_駟bĈ鮼ASNSNʉ… 011U5|3h 4nX)-::1{{{�۷1x`9r޽;y˗/c۶m/O>Q �HRDGGcؾ};>:Tx[x"L 4ļyTBBBiӦA*ccc1h 44*yΟ?SP嘟^`q l޼Ym}/m\,,,`aaQxi066~zѬYjQ+-_y 7`� 0@)M&)oVLAAz3g`ĈXjJ`#,Yyyy*坜T1{l>|Ό9 DL&äIPRR˗9::b-:u>��$&&Rׯ3 `ccΝ;*eMϊD"qi044=,pvvFXXR}C̘1ׇ>tRd2˚fVڴB{{{4jHі=ttt_ϸ8rix٘8q"֭ ===j jPXX�4nX1nܹ(,,TWQ.\ann###tCеkW … ԶWBk׮_~ szfϞ GGGݺuS_m۶GF0rH<y|ܸq�'Ok+5( ӃfϞ6 _%%%Xp!6m ===4h�fBqqJ?GFf`dd###mKFҥKqt6mR;khhoyT �vooo^zի(N{-} <{oSFK.ҥK5kڶm +++&M͛7U?y^zfffAFF�ի6l3gΨw|pppмysڵkDzqԊťKP~}?̼ Tx<�K>|8x &&ǏJIJJ¢Eꊉ'7N>4Zt]t 7n܀;\]]?ݻw9IIIprr˜1c@ĔZ_<.\ *EΝC۷oǸq H~E>>>ػw/5k> EEE ſ[(-- xw1ydܺu ۶mC޽yf :߱c === 6 uE||ҔשS">>C~�~:<<<puO>Ǟ={ЫW/c„ Jaaaaee ĠyhӦ affH 8NNN:ʛɓ'v2dw?#F !!}􁱱1/,ZwźuΞ=ZZZԩիT(L: +i͚5�s疛WGGBuVi͚5裏Pn] 0�{.RRRɓ' Chh(_�EyWy{eoۇ>�%%%xѤI ъ)�`xyyK.kbHJJR^bb"~Gxxx`ĉ8s v܉gbΝpssC˖-tDDD{HKK!g#;wFZZz@Ec׮]2d5jT׃^#4VÆ ED"^~]w}' 3 111JnEAč7[ϼyDAD]]]JǦO. ?^mD- _^Xpp(+7NA5kRzJJ+ Ο?sEQEA+_vM477A=ҰaCQ{bAAJ9UJ_?PdsΉb-򇅅 bqq"=77Wl޼(YQgΜt,))IUhff&y>EɓJuy/^cNJ U.jii۶mSJD}}}Ν;t=֡CEQ,))<{ EDxR?XA8q9 mVQ?zHlҤ%޾}[LZZJd2z?~\<]Ky=v QQGGG,,,Tk.D___Q[n"S9ˢXhee%?^ؿ+...J7oT9p%N<Y)͛7+?~(hbb".\PX``(|rEڮ]DA3f_\\,>|@D5SFH,�6ިP`޼y?~<Zh{C>|x3f {=�c˖-(**P=]tQ:n8hii)M+**–-[`jj9s(w+1$$ZZZXhR=LR#,Y}}J344?4:WWW\ptT ( ThFSSS5]mڴQ;wY>229999r$\\\ʚ9s&6l8Z �O<Axx"_~ FڵH$Jo7~ʚFFFظqɏ?FL*ndG=|:6YXXTxENB@@�0}t`Æ 000_:Ό077tJ{߆A*bh޼ұ-[b„ 8uUJݻwG-~}ڵ+F6vX�ϮY?SRRTSIֆڶfq(2ϯ222RR:c pwwWI366pyQm۪ikk999/ɓ'h߾b*:wkV>իWѠA_՝C֭+]iӦjAE�/ZZZpuuU߹swkeɊ/z^۫כ*Mw�(?zSNѪ1SSS8;;#>>.\P:+G,^{EZZҏ�ԮO{S(Zj5kJѣ矣E>|8йsgXYYU?oӧo5ϟ"}ƍ EJJ rssQRR8ux ϋSiN333iW~$''wҥ 7B"RK++&&FiѪzqruf5䴵0I2--]zѡY[[W\YP2צ"G~K*2� xg#�ԫWW__$OWw Ս{sssѮ];C󃹹9˗iU6egg�,~~~*k$+c鰴ĪUb ,[ /F6m*U_i[oZM޷˗{Fz#!!! ^n^(ծ]ǎüyk.h%>c̙3<n^ߕDV.]�<\F&读v= (ÍʒI.Ցsxz C3ccc<x@m*sm*RqUsY]Ky;+V~Zn@U4J$'b2k"==*S{=˗Wʪ_>4h7n ..N6f3RGΝ;n:.\P,oٙ3gЪUr{.VX֭[ȑ#*6mp^zΝÇ믿テL&w}@D{"R@HHHyEQӧO_Y_)Jqi##pOHHp]kF&M42jffQT_Q9VkdZ~}EQLYJu˝:u O?544DVpm>}ϏΕGfRݹVʕ+��cU&N:VG^TtqUwXf COu*{AEC%,3UjѢ>Shzddkm*!%C[[SL)Tt핎lذAt@@�0b(Zjał Tz{}d2|WJ_ ]+V-ӡC�SŢe˖J_k̙4]L*"00Ju檌$%%aӦM055ŠA,?`�a*ЦMtPrYZB�MW&ML4z)+ܧѣGVZ_pUcsÇyJ5::Z)ԩS rU5}t{O?Tx#cER?LMM1|GdJ?_xg? Uq9{\,2J QpwwR)p ;wСCQN$$$AF?T*~Çh"?~:uBVVg~??]vŋ8::ҥKg=닭[b߾}hժ}#""ڵåK*= k׮|ܶmg+owBCCCYÆ C׮]1l0Ž 77Jo*S͛7 ǏNJ+о}{"33gΜAjj*;`d„ dž дiSVVVu1~x4LWWW`ٲeV2eJ;6l˖-'| :űcQ\e'Xx1Mh4i/__lݺc߾}<x06mڄݻw{hܸ1DQĕ+W|\4hj׮;aÆEHJJB۶mѭ[7EnݺaǎлwoG.sssر Bǎ-Z@dddѣQlcccÇc֭prrB!JqAɩB#Uu|puuEӦMammLDFFBKK _~+k!itիWj*G^^ѼysbĉJe*RoeL>IJepEԮ]XpڇWmuq|ػw/?͛c000YGСCm۰b 4jsVVVŗ_~8Ƣ]v8tQxxU2;w… a\ɓ+um7n`|WFQQڶmoVeXi}}0|l߾zzzpssñc:gzɓ_͛7uE-0uT^ׯGϞ=f(,,-пE>SSSc ţG |}}all\j&O&Mয়~Bxx8 РA̜9_Q9;Vn]c֬YHHHիW[m@2)kcc8c˖-8vD bذa7n:vTou~$''c޽Ӄ=-Zɓ'+<a\~[nŋSxxx(3gয়~]]]ڢ[n*xw4n۶mêU`mmcy{ꅌ a׮]˃-z3f(D)w}WmVoAAAؿmh:x zٳgWynDDDTs9=¼yЫW/C"(=GyϟG^PvmXXXW#ѬYRbĉpԩj;?"[n={+VE?Cm"߹y٘5kA(wQUbȐ!xw`hh VhPH$w} 3qsݻ@4lNNNQ;"33nnn033CPP>|~ gϞʼn'c<x0 aʔ)(((̙3d23g`̙Uၓ'OI&mM6E˖-ahhX3<EGG{XsO3gΠSNBff&o࣏>Rk""u (((;0fo)@&LrH ;wDQŤ$Qq*&O,C k֬Q￯T~ѢH۶m(Hwhff&9Αm J$166Fڟ?,ڢX$۷o===EkkkQGGG411]]]FDDDtrr4hPfQɓgo!,ERRڷoPr666TYD߼ys)w^{E^;WWWlذF� : *S>#lܸ999վ>ϟW<7UP7h֬ 6T\CXI7oĽ{ND�� �IDATj׮Қ?DiSN).btRu[�իWtR߿_i9VY<==abbCCC 0 Rp a%7R[ʱu(..FZ---mutt`aa4u6hٲұc˞Q{1ѳgOr3f5k��Xb&NXf'HNNF\ +��]]]czzz<jǏKtBWWWQ�<y:_ =ؖmqFM>Cŭ[i&|رcKoȐ!2dGϞ=Wsx0 $H\aaʱ'O(GQQz<y4_:'iƍpttiըiӦaٲe5 J}Ko+޻9<F��=z4ziӦaС9׹sgtz~V| gpeeeBKݺuQRR+ wUW3<WN>zv!ћԔ,uxۊ.u+ŋTvׯupSJWrĉJ73�MJJL&Sdahhf͚Uiϐ/H*ޤʪ`@X>>>سg233iQQQ|Ҽd///G^z5 ѷo_EqDDD(߿?>9ADDDD޽{*i bƬ,\pO>-޽{8M)/Xr%rss7wڅ7n��Lccc|?鉩SÇXx1}]+C`` > :=z@||<6mڄ Twر#q9XXX`ժUE 4qD<|nnn۷i&\t !!! Ξ=aaaHOOG ��pqqA6m`bbd[ 4_]U`ɒ%~:�@ܹ066F3f`֬YE~dɓ'VZXd vڅ `ٲe2eR>D{/Ċ+coaaahڴk;aĈ5J}Ko+޻d߱zjdgg:tʕ+'AP)_(((-&MyiQA|q5ѦM<yʼn^\CHDDDDD8eѣ[5 *B""" HMME\\ܹS]!zM (9#55;v@&M*=Hd2HR:u ;v��oDDDD刋C&M0rH lՃ#6oތ8oEDDDT<ܹs H899Ν;˫sAI fjj �(((U� {A𓍈HC1 $"""""P ^D"gMwC$ nܸQ]7B""""*D"eWWWXZZBGGpssCPP޽ԖJ}h۶-ɓ}zw}Do>5o<�CE,[ RӦMS ) �سgF<4m>>>T*Ebb"̙ ʕ+QE7|H$$$@[_e[".""""r͛7O%-$$yyy6m4hr<66 BCC뫒:u* UM 'N͛GD)DDDDTd2&M,_mu֩S|� 11eD"U0g4jzzzhҤ ;ۮT*ٳ�}}}W^R[\\+WO>hذ!`aaݻc߾}q!tAp… #DDDDTbccq%ԯ_Ǐ/3 )e*|2d0dԪU ']vnnn.:wϣ}{}vWĉ1m4t={nݺݻwO>T;0l0aذa[.w}W! �Uuseee!""�СC*QQ/^Ĺs`bbtUOOOٳ7nѣ,W_4iV^޶m[L2={DÆ �qHi^^:w3gbԨQ�cҤIF||<\\\ef̘e˖qSDDDD@AP37 ^/�ԯ_u"::("33JС^]]Ukܹ`�tuuOOO[̀7nDڵtI&2e ,X0̝;�vڬ1_ 11]v�DFF"''cǎU  �֭Ç|9.�mڼvO^Z?HK3JvwwWIܹ3$ N>]fً/ҥ� ԓŋ#..oVyƭ[\j?䄸2I0 $"""z%7DohWfff눉QeuA� KKKܿR�Pn]ԩ:Ccǎ 2 8p !Hp)DFF**oC]?o< ^ҥ gd2H$s{yO>U9|0"QqO>all\f򩦷oV{\>) ,'OAAATƝ;wԶQZD/c'ڹ )3(jeff�j;Tf٘d28;;YyGJJb$y�ʕ+P;"#T*ӧ UB""""v 88ژ2e 6mڤ6_jj*u놛7oV{;oJgϞ,4̞=�_fZjaSl#wUX:::3f"QFٳg8pJ 6oތ/M@^^^}$Q""""憈3cƌA`` aeeT$8qFFF0x[0�M6Ŗ-[ƍصk ۷ZEhٲ% mmmDFF"-- +�? >>+WDbb"<<<p}l߾=ʕ+�iӦaҥ  ccc$%%c f 6 ]vŰaPN$$$ 55nnnT*#DDDDT% ;-_~z*;XXX <<-–-[@\zVVV"tuuCůtlٲ'O.oߎqa_�Gxxx633ѣG1sLdggcҥGǎo>|GJ{ݻwEضmBBBW}ЦMl߾k֬%;Fq(U ViT㒓ѦM<yR3DDDT=I&k$@||<JJJj+s*^w׋#DDDDDD!s84 B""""W]eɟH)8BHDDDDDi(DDDDDD!b@HDDDDDi(DDDDDD!b@HDDDDDƉD"k+ DtWH$xzzt7Q$IVWWWXZZBGGpssCPP޽ԖJ}h۶-ɓj;/AM'*vMw|S/"-[TiӦT)3�`Ϟ==z4дiSR3g.\+WF???CEddd ""| "##�mm~%zY|Q͛<L6 4P9AAGGUsyL:* 'N`j#Q""zX] *d4iJJJ|R7GGG߿YN|� Ν;?~<lll```�gggYEzzaرrR`H$]V)=$$(**R:֡C+tH$#==Ç%Ѯ];_:O'O*Fa`ooO>oV{%̚5 m۶"IpM!00иqc̝;Wm@Oo)a8]هRP߸~Mw*!66.]B1~2 P2LQ<߇+]]K.u>#t]mDt 0`�ZhcƍġCжm[�@n��QQQ0a(�'OpQ�R)N< www*{utƎll۶  CQٳ>>>FÆ իW++GDD 88^^^ҥ tttbڵؽ{7uQ1tPڵ M4g}B[gΜ)fb@HDqc\ypmZtWOeOJ|-P"+aE55"�6F#/BDDg#mq5L>K,Qԩ|}}7bĈc۷o1f;w wށ>TÇ兘DEE)˜d2xyycܹ#GW^Xxqa~~>Ǝ LtYqlѢE5k&M+}}}矣VZJu<x{Ƃ j*E-[k.t �̟?ڵ+b@HD%(!,FW9֫#G \8& J|=fwt*�_x6lZeee�ׯ~hh(!"233T:`e-..ƦM`ll�cmڴQTp\xJ � :+WDBBеkW�7BCCqYnΝ۷1o<!** }z{{sQJѣ*4=6229999rR0�9V^"##vvv�P4ݻEJ#l*,�,\P Ν rIoD1DQĶmx jZ]D7=7�:|%G`Uۧq)hK)0Q:)<^3NN< .WHK3Uf .h׮j׮r]% LNN�#x�鉄>}Zzyy!44QQQhݺbiiiXt)=zCCC>|kFUvrrR;jggǏy]KK nnnذaN>`ƍ EJJ rssQRR8dhiiK.*mTdJ+8s .e_�8ʀ tU<*~v;TS:LOG~¬.`mh]:e g_1{y>"_p>3k8s u[-I_n#!#CXX65Laݰ7ɉ']ypQiQU 8~�S=RjY R廉Yce󗮳:G233\GLL.!J@Qru)Lݺg#sssiѾÇcڴi4iooo,^pqqsзo_H$:9mmmźɲTӧOakk޽{^zl4ƍ*mXXX Kc@HDsL -hњNJ0~!ҥp]@05Rzʝ�{6)O8 K-ŒKc+֡CHJƦ6_~05Fȩ5ټORDQ�DV}%Gi%euj<4[c® &M^iok9p1"z _(õk׬}~)t˘<~ E/F4>xotx(Rll,d2 U211lQu)/i|@YfCQQbbb0h �PlrAE V˪l޽+Vu8r oڴIm<@IIJPXZc'TW\)?E[C7<Z3qnVF)w @H8t@@L� ^a/˖W+.)SS4Q*qV:`ھi*e9C)lo_O+5'נu+h5ƺ��gL8 SMk˩ᙹsju+/‡m [_z%=~Ć U)N:RD'{?SQ >77Eעq3+{ (ia$C+XZې>y6R#gw߭!̀+|}p7.ET[7⑜ O{Oc{vJ/gEO>-3Oe9::B__OF^^4gSm)O֭j*HRŨ:v숨(BY})!"_ZZDQD=TLӦM >>^嘺Io[铽`mZpml۔_>]ty(|Zyh` e§-8+x+-Z=ʺA@^aOcTGeWNI{&V-;]!e84ضJ~NuǼa)av{Ϸo푙Nc18X:ܽsOZCLl3zpV44iq*uI6mozX~|9{hn[W^*y1?Ye$hqH! ҞKФ!G}*泛éS.Ȇw7rȿЫI/E5a4hlöm5W<,|{>Mԕ8k_q]zǶ`oj/z<FĐS6O>aވSz/g_bkVwNncf̢,`�F^eyTñ:^U:;;40i&M0p5t+uD/({.~^=dH3< mk6[jbf癥DVRTZ, l_=aZ8~8LL̢$ލq؛ڣi#hK!KQP\Gŏ  휹s'д!6l_ޯ888ݺuÔ)SQFKMMŔ)Sn:4lذѣo! �?5IIIjG:w $$$ <<>>>c;v@BBTyyyaժU R兀�ܹsx]q/k077ǖ-['(ºl2{M~5j�WLJ~{7|Ç+>x� Xc@HDo/5'D㏖;J>]Ի7r�x象~*_b<,zW;W;YYjz$~v&vįO10lK݆}WaH!=9+al[|(|!9a:x+;/:</Z4~M#}9sߡ?& Fe~ϐ})*q[6Dž`mh�K-6âm c0nD=z:Snz- o>D^ą?g_:1y< eBN@[1QO[;cH73=~D�� �IDATA@rV2F b$*7 }ma_>D}pM[xyuո2m�~MzL }7ri~캸 OeO1i_ ..X?p=57O`ٍ= W;W SCotE ݰJv"z/F:F| u[wK} /8|0>9<kǖcn\<,zF^ c]cDJd%~ ܐySLpC"H @Gwv쾸> , ,`oKKx6򄝱йAgS):tt1TEz카;/ľ+VRwjIH "VNfS'{_x7VwWfEY-A %_KT/GTz�u;{S{w菝vBO[]ty-0!""cƌ1cwwwXYYA*");3!=!Jh1*"eWAEwWw՟]Pl(MA"($%HOȤ9?'r;%Syx&̙{[Rp!! s}װk.,Z)))>|8rss7`ĉشi1˗/Ǎ7ވ'OFݑ۷lj?fh4gϞFƍCrr2 q]J)?wuF HMMŎ;O>is=Xz5 o:;v@@@� G=ӱflڴ }m݆z_C t Kjj*RSS]=pU,86 ?3$}t#cz=Kz/8i[]S?<%Zn }#u;$k썳Yߞżü_fmy]]l[AEۛ|gv,˾>ME_gw}sC2۞fzwsog?~ؗ5IS]_ͦʴ liRBp"$kX{T+W{zЛ!l,<WdH[1XM} [~t9o}lUi_]-m a;]x1 `kOmJd}50Xae!" vۙ+}FcQȺ,f};8,0<0!즯nb)SX5KaUuU7_W+",aufnoz-ǂ_ f9l̲1mO̢L?wW_bގa> }4vk+^ayyMǗTɫ&3$uoGdw?g{"Gza:~;!,p6ۙl{Onwk]flJ,1߅ 0썟`W^gx!XEY[kC2uݽn=̣,''Gոg~ϖZclcF΁wخ]앟^aUuUF6ԲӅٱc,5'v7v4(;S|ԜTa{ٺSi_ll:[w{y웓߰3g^QKΝVe.\Pܯ-\ 6EDD0ooo^}UVXXhѣVe{yyyl,**˗{2F,X`vLFF1cc,>>͘1eff>Ves5^__ςVeqLѰ|Pr\^l2j?|02e b>>>SNgUUU^`W_}5c;vdseŒcuuu_f]veK._dLѰ1cȾG999l%Z: ],D[d,&6{lF(˯ȗ=hQdдk^k既S,H6}u&QXTYp?C2mnc篜W=o]=9Зk翚g/y"+s?La^Uq|>Iy-\z:V 3:h1y, ~-ݻ^ufOo{}1$M?B^a~ڒ]U `1o4ox.5[߃e/{Q_bHL6eЗkk+*ao>UْߖG7?v)))a ojn>~۪Jޓ^ `UV=cZ:S|eetvTYXBgO${~՟^e~..1዇^wb.S5㫚nlT{lsfXX^<}yKjQWV`K-aggHH'$=X7'aH[qlEӶ&GCv3]K~[ڽhaUމc}>cz[~tB9cԜTdv{yj�{'Tk`>dqG6=}Oq6m4dfSLelXD%]/~BYq]YX۱7=̦zϪvmΐ N|<ݱgG>co2^lS&|=C2T fQoE9[GJF 6xǪΧS>6W3_UKQUWNts)$2JGgz<3c {oȀH9M|yK"%zǚk0x{y7m0Wg=cxxm狝3vqXu*L9'?g\؁HhW1~Xuz!Bĺ!)9)&}50Ֆa (,;V5U촕"5'5 5�xA^Q>'ke,>)>=)6ހ͟U_^'3{1hQ? Ftz&ud<ܝD�+T(*S=eyg7!>8C"85e5eFDŽpK-Vt.,CC CTv g=p6/y%g1{lb!;�/~ߜw㣉IVKX1u:Wk{LFEVXg[>Jx"2_5BMC N5qʂP0d||1c=yl8V% C9\;ff GؠX~3D`|ؙ%-[h4m A:vVŹ˂16$E$9avshgmg)oGe}%BEFaUC1MYLDۆ!A"* Mc߅}MOwq}1,avv6Ztxg0TXviyi�x[7?{܃=&[5VL`  R}EvQ4Bx�F(8!rZoӗ e<RsRQR]b+~_gix }*p8Ux } 3s<IIiAytM} B =-&,^brofӶ#G}%æ& K/W7^#;D_(K99jzFg}fXAy^E>)9)z;L|J;m;\wu8p�ΔAuCCBV$28006n6V3ቪㆎ78aV'/�or/Ah ! B ܞSp "Vųßƌ8]x�wv=nhȫ7Է$^ޘ4N4}MDk~|aJn 5k % Áp,eu l):tDnؑhc0 v˅+H K2YY;g<6Mo+ Bڛc({M!AA oq])w_pUUx[5'럖up=�[D7}>ok}2NƩS<}3mG8Jeq�e|΍]o4#,*x I HI�LLi9/z*djt D;m;'Ό vۊ g %o;_<3<9TW#7|Pvh{Ŀ1d椛1(}10n!;@6d ' Nbsm~G"DS1xF=㻎?M87UmK$' Ų>8AnJi-CF%h!Q |y)ȠG5'o A>A65\:GL.|iM#2z,Y8z<^/L^=o&:t†i꩹İ?[O(fe{DwgM Õy̽<!$­.;x椛U'{oO yg:)9)EN<CtiiiBB}ïvڦJa؋PKFq[/8PP\*$w]]û:qFB o1x 4xË8I< y0%7c<D֐axKO+2!qFv DD:zGfqfpCBQV[&1!ArCHRXY'~bq^ME[$6(]Mo)9)ig=}VEȞ a.U00Y˚5ֹ P!ArCH۲vuS(bc$CF+*p })QEQ�PaSSz7*Cm' B ܖT\~5]="6(f!mii``n'ցR/Œ xk9s'@daє]zΡsҥSk̘1ӧS|||pWOA-Gr``-*11hd(*6ڞv~E3#Z3aȭEU}23puխ7_;m;K:đm'ZU/_tlqq1.\aÆ!22>>>ȑ#믣Fm6^q5_GMMݯ�Ο?VoQd FM6a߾}x饗Z0gsT;of Z%zѼz*GLP � 2ߨ Bjn*hryYW'(@V'݋ }Ciϟo$|cXht:͛P7lقeeeHJJw܁ht:>|/"^{5={111Fc<ܹ3cx"6l؀^x7nѮ}g#vm/K.6mS;w.^z%9r rUAnIlՖդ �ȯ7Z.:Aq62"4ョVZۅ:2pf۾ a޼yرۇ)S˖-̙39}4z)֚ȑ#~W0p@:t_x {g/8q^|.kK/?ҥK]=FZ-, <4�Q w 0ƸKz\½ EwYa*UTZ"dVVej=׿Xxxٳ'oߎx˭bcc1uT�Ç- V}믿u]`t ,@׮g%] V СC8q"áj�!\lY8[nŰapu]8{Źg�>׎;p 7 88QQQ={6t:zL8aaaɓq񲲲裏ꫯF@@�"""Я_?<c()1ҹsg 2WvX/|!$-9{MᏄz}dԋreTW*{h5 <S N&Ar7>3A㚶Cff&:t耇zHq_F:S7w};vm݆qAa(--ŋ1`�~MpWn?"4sˆ ?`ԩ;v,Ұ~zٳ@nTΝ C^96m–-[0i$<c_l2;w:ƏѣGG͛7#++ {sssqע'N]w݅deeaŊx'nÇǡCp;V! A%iyiځit�hUy\!Ui4Z""rA%m'5Gt޹ذa�S=Ξ={믿F;w$O#X1{`زe n喦m͛;w8ƅ p%L0sڵ 7p�tMعs'n|g>}z?0>sl޼;[W\ŋO_]]-92�? PHv0p$:kfM#2 2Gy D#k4!ӝ?=�? �:<Ʋe˰g0p%lذ:]wd>8j1�ƍ3�0w\{ؽ{7KC�X~O$ZΘ1;wĀ �̜99;$3_yż< σ!AnGnE. * ! 8IITahQq< MZFqF TIJus/Bу(0=<RSh\2 [W5U)}gzbيǏ5lVň#GZ�`i5ט� 8EKvmx1gl߾&L#CU#""�u9ʀ #-ς2TafbcBҋ)\hqѠo@֕,tQEkx2Z!~!F't5 BÐ=8s6=LuԔֲw^*Mh' (RlHyT[}}}Ӷ;СCHNNƶmۚs,-p/Hv!/ B:z*TwገuC^2VL]gwzj'/ Wj _;P�#U*pĈ�xq^u+/=/GpH 5S"#yXiϖGXz5q1ܹ>z)bFyEEEI Gx�v #-/ F; AAeŲ-N_(޾m<w#"u9}Iu RrR0<a[~oĨQн{w\x_|⾌14448if͈޽f~h4jR8AgŪU��7n4�Ix$ p;A; Q\]L�Tapˆ#{�ZW ܕ A>A*U/Nh4|'h׮|I\Rr'ObM™d?>G{nlݺhے%K1c !rN:CHIIi9r0VhH+:t�|I3Q ܊+Wp< B;*QgV('F&~ ļmN]Zs*d]“F= ݉vQG 6`ƌ1c.\QF!** :)))8t$FK믿?3~$%% 'OF߾}ҤI2e LD=z۶mCDD>CL09N<޽{=/9K,]#F@׮]saüy̎_CؼB ܊yG�\wH/NGlPqChAD3Ck�� �IDATAFquu[d A~.2-Ch,z8w^~eDDD`x뭷j*xyya…8wQq5 'NĶm/cHKK9;ŋx믿;U7z�fwTދx�Xv-/^G{EJJYl:ts|}}2CH[q$*|dȗjj97ÕPC]OV[Dvv/_T={VILLĦM$6z*rXz&N'*OCErJ,XH�Κ5 f͒<Ni;w6ې!Cjb �7~{&IKC~Ҫ/E``UQ %b-z*-Bw H KWz:ʸ_^ydggcڵ � K,)ST!A\=VAlP,r+rYIp ! s4ZF;{݉ۺXUm'2qD3 .tT��~!JKKoz* $­(.Fl} NLP _>j %{dwuUۉ# ٵk?qmjkkvB  }ۻzؠXv7�r 4.j;і5k1sLWO ,B A4Q;@L` C:z:Ar P!AnCy]9�C D뉤$*Cm!$BA ee�H: zE mӒm'|H6 t,1A$ ‘XGP(&k% C c!Ta #00�\<۠PZZ �pLCH6jb+ė8=0h4S!}AZZG +**C1=z111hߞn\= 9o{왵 Vȑ#n:|0`�BCCz}2+BoBAz=JKKqQ={wyD@  hAѻwo�O?k׺x6ֱ:8Мh;l!AnCYm}x]w {})<&|tҥڧ+:쯮 h40Q7!AnCY]l]kx]v D\\BB pt5:*(Ckj\;+h(A $m(%-(,\=p/<URcz  AH@M8~8p�8w3!S!9A(@ PX=lK-Jm-kCђCH,$ pH $ œ �UWv.V9AC AWCÇ;CZCƍӶ/EYP!A $m(-C{r7'o rFC0c;ɂB  AH@!e 3Ӿ+ B 'O>Fv6vmh4 M!AH[ШoDE] B{Sl?zآ dٽ?<ٜh-@Rs)d HTU�@?�\>={ z?{j;A&N<  DDD +W:>(c"--gސ $-�mٸXrx<W �o!Im-?w[F^vmCH&TTT{gdx{{cƌxW8q"VZ'|o 0zh={Ih A�<hcai)PW p'z%$66g[$Yeˀ'[nn2~]kCђCHnf|F̙cҥxd]n<uaԩ�iӦ[n?jA!AnA:&B 7sЖ`IIq%IBC޽msEѮ]__!D+GբCVoݺum�iӦaƍo驺%$ p H:˗ E!$ZwF^^ .]�??YBm'HUUp9*AmkQUU̖[C M R 2HKkӴ 66*-z ŒjA`{޼ LAH! yg$<sx裏*8b[icP!AnF 4 rTNL |kNƻ|:w0!a<OwX{>\$fgוFÅ˪Uj*m:AO?iӦ!''+WܹsYfSSS___~~~�j B ܂2CiC :_vF99\j@~;q!]޽ a.gOu)dpSOӧm;rx\ѽ{w�ߏn ôi/y?j%!jkALY]Y *+yqG\u_?ZOϞ=& oXG邐Nm;:IsbsgHն1AXs&;?oߘ"d�ӭu@TG.z ˆ rB<O!c/Z0`�9bv=o DnZt B ܂21$ص긻g66O[7Naaƫ66z&gwo2BYzb!!Zհ_~%"""\i;ذaCӶ"]&MضB9A]rE|h(\s }!-&Cط/<v 0@8@t4ɂp:~=s4;} <_-'�YBm'ģ>r9ʕ+/^^^�/qyt�_=|A:u  \\ 9Am.dT?]Chm9|ȉ087Ѷp}}=;AxkAƀ͛Ix!{sG9uc6<SCH"hZ|GxDZh"t?#fΜٴFjqwó>h޽III~)n B ܂6' CF. m0BQ2!dHI? l8\)FՐ]|qz`Nj;A&nE]]uV7h/M 44PXX ޽[Y}[!AnAuǣGmeꅅ5oߟ Bbz=PTQnFF//],lQ e �B %BAmN�"= /R/^m<r0<_?.ՍQZʋxz|wm Z`̋p7&pfF]B{,A(A @WƊʔ6i=cf1Dh\6q�0x0wh UU@^pcG,J .d!9A(@ ӨoDE]E:0j=а 0? o!/3f�A`P^i1)Ϊ5- [ݛ(tYY@^<0PђCH,$ p9u�BÂ2@sOW ;+[g=:/5Fcz:z7C�11N߯<ѣ<1N� B \NYm6&BF/]m<)ח?V cQDCy^W/ F<�~QyT.� Bg,ٲx1A(A #a_+*#2ZZ TTX7Vy9g ,,""(]!<t^k o.C+<}cIj4Aؿq{g kB AH &GkFEiȨ-0*,3YYQСͿ#8CGXX Sز_G}ZwޖE8R<iiijk#;ŜFC} !A.M ˗CrgCs tThm-_ ‚7 a}=0#8w돽pQO?qg~Eo;wJ珚 Bg絵<dNN B \N!|!k i>k  BkE[)-JJ ´4h*]^/Lb 6m-o !-@ٳ=t%yΡ̠A۝yD<Gi]P AH)-z*΁1Q.@l!!m& U:kkh <xϻm<A¾}UVf7JR,Ybq{d^V*35_?{ow ׮Ng0 B \NYm}TKRS{ BRF h"\p .^^|AoC(!9y&=-<px1"DŽ J@~vZB d!AH -*wܤZ3 lR=j!cqϝ~Ax(X у KO\>pq.mKz=?Ç9KU=r<LN� B \NYm}gqDcsg eeܵtvs<30~AXZ*?ַ/purY_0)s -kZπٳy=bVcg F6UUS92J!A2 $%/B*NIZxsC(D+ryy{aY^<ۗkZ(g,6y Oڂ96pgǁ`8Aџ6>㎣iAuC舢2! B \͂x1``0bq'2ZY~GWvj SN :!L,M`Cؾ=j}!0f г'pm7ϝnޖsQ1_\C!$BA2JeXu}1_z FW! ˚@)u3">G~Aؿ?-Ǐs{CأoJj*  <5of2Hrt56t HNĂ<Kj4ZAn h>h A(CEz{ N#FX9m ;,.]ʅ=Mj4Y+(xn!! B \M!7swO|Ѭ - =zHWµڵ g%3aY ¨Fa Z`X`2ƑCm GK6gQW]੧x"9A9! B \M07/EePPOv8{E.ݻ7;zXVh҂СeCFedMZ ))N[Ea!k> B!� Trӧ4sS0%Kg$'ŵA9ZB d!AH˱I G`CX[ ^ iqIXzqŸ) B@} [[^^-vmL/1F#Ga!MH!ԉ߸PrϞ9iUF y S/UP7K:Bm'p$ p)zGy]EeC(E}쥴T! B, BNŒW 2 ={rZZpa-" ?p.Dp: S @}os݁wԘ '@ R^69qqͿZ/EK;^BFiAn\qCX]ݜ%pFh׮gTy9wnܡ.]Q+xuRCbb eOؙ?;GSXDGsAXW,@!?rQ85tՆ;f]KTVsD>CH$ p)e|萐Ju="Kܝڰx?AXS\=QВzA3o/+㡊)>>\|z=wLB!z [;X@k P6$7a5ihڐѧ\N~RTV.j ~~-CsRB AHKIE?5abl(f;~NDz!T{-ZAX]-ɇ V-)\ 4 jBSA(BF-]S0iaK;ڋQv %HRlW�҂КQXg/jBF\ffrg0.صxb\}]Brڐњr n9MBsϲsgdžK DȨP+�gH †NI [ 7hCm'P!A.E?+ʈ DNNs gZ |m |]..\hRABav6ϭSBBHhCC22mqqlNB\ c\͝+W[n7zlř߿CF B<lD9Dm'P!A.E aQ[BkYP l%P,7&f(\z{(A2YY\Ћ|@�jȇZrwge)''?wܙNUW9&dF{2.Rau5Á$~>Jkv!oLj(**C$ p)zz)x7Ej.˗vWX#JP- Ͽ/ jgAf*daQ٩Ur]zBF-9ݺGKa\\J(CFù v$pD k B@^vd a$EUd@m| imP/> SEOУA(A Ra;m;Ea1[„8!bF)dbPqݻa]EB@s+ qjkhl,+TBATBETp[E47u �͟RȨsA茶BF-K!$B AZ-M Š .",P,B B.*7S B )13g;Y+ B1jsRMȨFҨTBAd!ذтh(uMax8/"* B5 i "N44gQ# Bm'P!A.A�/4r5ֆET||s?gV>lq|q{7Y~>?CqB?,AXR.mK&dPWiBQH%<J8Vpc!ki jϦjBFE+Aʐ+,; pP觶A(A RXo/o3J�w||W(g;jCF O7 T BuV3g#Q;jr9\| Wхe ^^xw)C5 8sP:jBF O{Qb|??~Ʌn�� �IDAT!m~U:2J$ p) Ey'(HC(r tVszqAxA,Pl^}u6kaQԅ\JW*CX\!"\9}^CJ@|h82b<;~:PS"5"_ $ HRJ- œ. yȨӗ򪦦nZƍk~"YEe23y!|/{š6dTAz~ H.f,?)ys={y2)AhrB &%D[v EVU. A<T}ZB d!Ah#)))<y2={b…6_`DDD`̙(Yt~gٳ'ѭ[7,Y/ \JQ*eCE B9y:&gҐ!Cj.L:ᢀ}P8QBBPp!ٓ&ihJ/V-rTCx労 l{?s}hK B??ax AثQr  ?~#F1o<,^C1 ҥK9r$n݊oFc~'xGзo_,YCœO>z/ J}cu!#pP<²2`d8Zt:E^TfHew{–!ȰMp3 CMh`  'B[)dMFMCF밦CXP`\ƒ 2*z 55\&A(ƗsZ%6dB d2q�իW[nE?Cᇡ_B!$$:C 7ވe˖G�TWW^ފo�CAc…xGj�Ax(ViQzAة9:qqz`L`&.̆ Q?#2^Zj wU΁3B9x/wMmqEhbT.dT,l k,)W]>}634dD~>/\dHl,EE\,Z 5mE-PrBG:^^_H)u" %!?G ///��֯_[oI qЭ[&�{AII q̙Jlݺ^ A(98AAUlj7~ 0m!У]! ul`6u5ᶇʕFe*AX\.…5a<dMJ9@{d ?A[BF+:[kCoOBB[m~XZF5>ACfϞ<C8v.^5k?ƓO> \|k̎ktAAѣ-…l;!B!c<NB@]~�^z HN P'\EC^ynoȨgkQKZpL!^;‰R2*Et^*3#4|bj=QZ3{aU/Mossyзw5!.k%B<!!9\Ԙ77N B/t 8:uOw�'<\xyy!dトXsw < b2ZZQ ZK鳳{&NR>/ΞuLȨ52Xk3AhCǒ Uj9pW/2QSԣw+]2jڔ^ ޏ<VKMȨi![Ox duuuBq J;ba3A(A96o�زe ^}U`Μ9MF}ŗ~GR]] oooTWW7kVԔyN>ݨ A+6-:b$!<|XW_q2:0pe)-&M~{N�|a( tʋ㘢Fz{sAb*۵SWd08M)^RaR?'=kr y5S9S '}}x[ؾ_-CPr?9R7}pE!0 t CF˛ߗ<,nj2CH$m`…|2233^{ӧOo3XyGQ:窩iOEaРA6p%6JR!c-!bU9kž=2o-2uAT A(JH\mai3Q aqy$x}PR௫cG1!߳y}YC(ļ רW;�OCBB F-9AB!6~ 8I &M*=z)T4WK:77y\\աy5aSBCa١rsz BZ^Z#竪rOLJ;T#C6\0vM˓A(-P*d3֏gHa!LǷ9}~|~V/V'EQ룤? BQqݻ tdQB:L! B 6P__F~LW]upX"СC0`@�}SRR%ֆCFT{p#M{EGŠ%*|3BSZr"T(z^m^Af 䎢 tfh` maB O|.B5NV|ś"\!` la(-5"ON B4h93&Z ^^^ׯ�;-[p`k.9swuWӶc"<<}x}1q|5Z e W\x(aZa! _iT!Fz|1By~Ry!Lqthv6ρrCxJ$BF!6\j-!z= ڃ 8,T rB0g`.6Ao~8BYLȨh*!$.(b0w\c˖-ضmy%cڵ3f z)F~6燅 bΜ96m&L+WkFMVU!:_$-؅;PYc'ܜ@^&&JS^EpB|}?WKaIVWK;J-'�.XP669(z"RSz7BPJ%%))ƑC)=?{cGUi { GYyίx–siߟ-CWkFC} Bׯ݋O?lkF._o>$&&_yzرcGSҥKqq̝;ĢE/ U3TTiؔ^r(i(Eo:Df&}rE[ _[a\Ch >{G)0)I/ZĜiΥֿrV=*)៣\4[ZO | ƎvRG.0/oQj;AȐ!C?XܯW^ضm1~a<N <zS.҂Axz"LDw<A)| e\5kBFЁ;:Y7XImRST"Lm>%AXQΫDEJj2*?(gقPY)AhLM gpq a[HM( Br p)69B/v -J{yY%sA!tVȨh,/M=Ta^|MC߭#Tʛ3l=ac#ƍ\(!,/_P-BpQ ˗yD!jB!-g2!4_!$BArssKn*+U-,䍱aBtȨ nK=I:!Ù!ܵ33]Cp|.&L�nBSs\Ȩy0!4˂1ޠ^-"YV߲7,9Ng^XKEkFK!A $¥4Է0 2EC(Ք^ BӅpll3!Ee||#r+*$--<)[<Tv jZN�͢]ΉMH0[TS,}âp t\Ȩ%AXGlPіB!87jB@1lN B \J}cu!reA(U$!A9}A_ț.8€fa*luM Ď#B񯴔�aj<+,Q%$   sQm8 W\ʅ*&$]w�N%PCh؇0PFR  AHK*dԒ- BV:J"4#4m9!P#].  Ҩe6{.>U4䎮ڢ."jJo ܷcU"Qz=/2 ۛBw~~}:"|ؚB +Wwy̅N! B \UEe<+ @YTkr;Z sBx;Tv[(STZ!o .)zE <{9\ynkWW], u?#m!+*AhOȨ9!!syCHEeP!A.^}aI Z%AN5/(ϊbQ/sS\ 5Ǫa~.vfVZAXZ,8u'BƬs2ڭbQg;(;QQɢy 4 e{i!p HXuEe! UgiAh)BF !A.*P͢/(HʨbT9CbgBe/u딟x%QFQ[!`z?BzA!xh~>8f>B./]Ήc4Diъ CkT•9B:!!T[!$ HR!T+muP5%P] w~~-2G_ XxAgƂRKS"#2ڥ !A@ZVWsϐ˗R8!ThHXg8PmQ[r7.,R AHKQv TʋQJEeߥpAhR=EeoϚey !>>3<gOr._ʂP|-C(ēQ!c rėPwm'�yQ2J!A2 $¥n;!D r8!4  B[Bc,?&eK`OȨ-a\\ yZFfAhzBM(NtȨCBFCժVAs1WW'P\sR91pyj;A$ p)zEeBCFM H*d}{x T**qӧ<LNoU$ξ IH Y"AQ"qaљGF/WgQa280"3• zDIXa Y;Ig}Ƿ]N}y<S{:;N+A8:*"j[TdT5v~K4&y)SOI}\(8ZpxXJp+UNiDH[+m:(`-8FPFf!BBXqT&Aá~8{Fa*e>z"Z B%DFfzm8G^⢀,d?j(]EN�pw^kk B%�B,9qUfa*U\gNZN>gN:vCH1+æ2n00 Q.~8rH�M -=NSŋZ+Q@'?E;P "w"`*g NɲlpחY~ Tǫa3/ s:sj"ic XAAH ~B'qyd3P-.բ!zCc RU%ĉ T޽ޔn(=M: ,BuJ{{E{~=j_?^+'e⌌ B3O 9sf!!<Y~}};A|} ]S.N"LB!Yؚ9h.BKp`Rkfsܬ_ӽCX_/!<$ࢋ}>zAxvL;A T66d(=P>!Tǫ. Bu.$gˬp@K*%t !&PBbCմ#6wjт!t"LS-I t:^\p8rD<~[c$̱}TMx"P6q*&UdN*G~FxM6~Ȝ1ҩ4BB)2�NS#ԩ.f*AEe&S3;Id0ώ;~L*UE62 8AvUPE f*∌*ǎ9x'a qEE9fuf--Bb!!$62Y(#4IF֑#:jg>l/KEZ=W(AhȨZ�ˌ� Kj_W! u" wZfϖ BE"NjXCh&:F5v̙c.YCHQ�.zhZuTQz.2 ֒?.e>^ШEӧ^#x|wεs*+* Ïؚ9xnhiq6v‹Sj3Na"@a8(FY3!tmh(8vA8wn{!! BBHlȨg FFy DFhRWk3AC^_?Bf̂0,A6(a HYU%+ig Q;B $Ć'Ў ܹN"@ Bc'> A!4 q3%oosd$Ѫ*9Ł;n"q B@>9 EK!bdb!!$6\:Yu`nYYEFU:uq>ymB/QEr؂8AVU(low>ת|]Q@B9!t-fV5BXr! BBHlv67C]i߶MVam,U:i*SP_VdT@Vp?BF wr. /==-iT͜sZC7䳡]~8F:E(B\BAH W5A B'Q5^ B+Pݿ\А<S^}91w,Bՙ šBA:n;0( WQke #2 } p]WmVXC B+a] |CP5NNBL $ĆȨۦ2f]FBzyntAu38h]d&& 90QK]FTS q BΜ)%Xa6+Aɓ;>ISNqixb B'aUVA X"@!:2$YS# d#qsg[ZtAhZvr+*4Gj!>0-꼰|x B!T]WW],ZMMuw[%j#;A!!$6BRepPYNyLj/j]Z9VptqS#^DЏ ,(BA]E8<,�j* <xxmg@|pF[r/ȲfMeYyߠ:k0HAȱ ( !JS Y�� �IDATXmhNꝴ�$O53Ћp#{Wl= pu(?+P5q !۝;SHzm�6k, Իfz8~ dSBe`,P B5z‰ \Z== K ZjQQ?>ftp㕙3-S)a-51炰J>?Q;~HC.YS 3~jJ^3 XAAH WӦ2@0P9vF3eulբ]Sh>_zF9y2𱏹 in!"Щ ̇'UN4P]8:fQ?5@Il!! BBHlRCDΞ- -[ tZA7 +2 .3.w[Z 0Fi\TЭ t(9vb!!$6GFyY)`QQ-Ɯ47! .aRB@A7QШfOd0^"tac'U aMei`,z";Yq B%،VWA8szc'!PBbqdtxXuL)8+vL. Z.tC51 VdT= 8jBaP0r~%J#CRrNqkk 0j++Es! !$ĆȨrtݷG1T"8}}]՜E#P k*td4H-(-Xf!FMZ�Ovۿ Ac$h#6=Ab!!$6;n}F 7˻% -[ *Qa:2j'5F ֒%@GL r}}ɋ*Mvpŷi;R!zAH8bN/BNEȨ[AI˥0ICV5VND*UX'DHl؎nzc"Ik(HCO�'\|[}D焑Ct !`22J1B7MeFl)/Aht5mh�FF"h!==D]vXuC֋=}l=B@ ;Aq!!$62 *RHicUFxjG!׮)BgJEF�1ާQ °B/L*5-=ɑѤ;FϓvzCCS_8b!!$62ٌE…ڻp[Ta6 <x2 TqQT*w֋2[LSG9j`1ᶆЏ :Sclb!!$6FsqQדּdSۢ˗b|ȨH*! /SE<_B-AI}l4Ѿ>ML1Tz= ӫc#( !e�ʴ�O?- [VV._ u" !9nISJ ]v9_4Ĩ0AFxQcQ:#( !! ZL-#CFF J㌃ -Q7 Lhգ>feE�!GC#P浽^am\DFB $ĆB7`:ॗġQ(g6ih0ޯC "@intTI, 'rĒQ zYCP!gB`zBHl]8nF}[ ΢{XCD½{}�Վ qzq\QUgWNQ;#y!Toy5@ L12J1!!$62Y5^%.<b,,~CK.7 Bs/xI`|6 T ۠"Ŏ jI WNrt B3PΙS#s( !esi>ta1vR)sO!_�Sn3bW- 3fH,qƅ 1$N?2"yTNZh?7E1o:+( !1uVC80mغu3�ˢsMTB'BkB[}x;>iR llctСIf5*:2@ TYR! "(2+&SHG130AJId~9t !"n�"{z?)h)fwlj>#~\rf5~k)@/xz̆wtv֬h |k/9~tZj Bt !j3%#~B;&M*n*q>]QcE d6i!Pp1s!LG XAAHL /XZy aZ"^1C %]h,AX!T0Af .2ʱ+( !C OS'haQM TL$ E] q$+1Ǯ! B#l*Ck6 T  #Zod(?Ao,#$5YJĕIPa@q cO/++LX5!##( ! ܆Lp[QmSщ"辭\)^-a8h#o)[ J�#t !PBb ]F`\`ଳ=~بr&,<AFF䟚EX΂&YNϗ2/(߫I}mBdT/f::Cl>Z CHc'!fP[`!!_c' ZAАe(=14$ǘ$aZ^S$+Wa_WAap^jo︬֮/o!"~FaPh!BBt !ᨩL.' A?;JA]FRAp fc0i0IUGFgP~ j"t !PBb uf `#Bmd4ɑF@FO5I |5qt*Z,_.ۗ^*#*Ο !. $Ć#0R-6A -T&u1!L2Ƒ$uUZ%b!=[\ %y(=PTƋCX]Ms!! BBHl8;Ҽ6!Cdd4+dAFFt2â"˖I#_,AJW $ pxطϝC8<,bODd0=#d"s1i$,X�7nkf؟gHӆsN@TN(AHJk:a>_>6 THDm-tHhճz5p݅E#[d|< vi}Y>,7|3.\Xt۔)S:CAH Gc'(! Q�2}___y–z{NplYJš*-Wr[ZDNzV#'� shmCCGp0=\83PYY17nĊ+oac͚5afY(!$6 #'M `02C_i :T𤓤 :_6K/1&=2  $ws�wKs9~.2ʱd"qYgA�Xh-[6GE6  BBHl6n=Cc'dd(Adl_}p[R�"W^Ihղhrʹ|e`Bq0! ! 28x ZZZǔ)SЀ}CxC>dCAH##0@0(pbaRʕ*0c.7Acy\T/B ظqpW?_裏bݺuؿDG<XCH]1F0B備C_!lnErId4}><ư19S|RQ/_wt�Xם;O}~fs{sOmݎֆk֭'?I^q+ƿK|�{.ooww BBHlWتTl+*9ȉBa:_UTHNfɒ yʕ~C tP xs!T!$i&lڴm۶O}lgg'.b455ᆳ>k׮#<FF !Q2vb^ҮAȸi22"0PSaOl,Wm9 |xq9,DQ !NbKww7֯_w̙3=kܹ8vXGW^PBbc47Z *6:0@A55"A TJAPWe!+% P#Lhղ|9PU7DuuR;tFS !lذ:|A,]|Mtt!!$62Y]S}edѧ!ਭ->Y77cF";; 0b]mPuaS]-n jQ:dfqFlٲ{/֮]kxNattty�z!l۶ ]tQhǜtXCH2{ s LzCr&@ JM.E*6 $[r VZ^ q|#:o֜9箺 38X wu9t͛atuu?y?�nu]سgϟ�Xn֬YO?SLmӟW@AH|>/c'u6 �ElБx4ٽ^%Y[.(AE %@A8j!Tc'Ȅ_D*͛y梟RqAJJ|o~<ٳ}7t  $ĂvW̛'?An #0h# Q{wVm@|ZPTQ 9vL {1G;pJq7oBb!�@8z<oSHAZAH#$GFg(+A3~r TJ r Q XAAHLVC86O{ㅾeQ.AhMe`# 3L/Wq7HFy͋HoOXceTb#XIׯ1Agd[7ޠC$F0VC[ue\4hj(y{V !NB, $Ă;{"Ja~v R` BHP˒%} °X"#BCHQBH,;pe&2F:iN0X`੧0mh($ $]CH�:XP5`<తpAS[ l L*AS} 0:kN.r3fH#&!f 2hP]FB:( !Bmdg48zȿdv`S Jwg,]*#>BO' L%CHPQ!JTd4 72Jb�!!$JNۇ#s6(朌P˿:2 Euupvq/O(BB!$B؉|ط [N6)ˆΘ!r�!qF}}!|a2BB9X(;q(00}y ÓO.ܙayV !@AH&.Z?O6! Ec'fc:hmmKKp,GAxl'O8Hy¾>'NB\@AHcyJ4 P g)\:kl)6xDLHH9?d /O:PBbh޽@U^힁s%yۅA*\>/iӂox~4#!r~?0!! BBH,ط;hmfRZ`Æ=_\^"ćr{q.2:>!!� BBH,طy%g--:₄z׀W^ ~ B+( !P4vb^dfSO*+٭2qvg ٧Yd!!� BBH,طA8~֭aBܠ.WÂ@eCH1 c')kEaUzuGI!!SW' *Q6!X@AHV> VaKFBDG9AQ X@AH:�6lBȄgsY퓃 !. $Ăr+:�f`ZL !$>9'r!ĊʸrbeP@*#Nagw-Z[g--bQBIYd!!�:Xd32r"�tI Ahu(BBX͍P1AxHŸCHAH!>0Lϱ#( !;* #B\b6QBX͍PqAX_/BL32J1 lMu$5 B\PBba4?:WT!' lF",PQBl!BBXo*!?X BFF !#;Aq!!$c'r)q5t !#LOq!!$ CHʕ/`"?�FF>rcTs !FPBbA;v"  !$ģuK�w5'>ik.`۶9y<p!XAf ppPV$6ˀ_V>I>Ν}/q35'c'!. $Ăp4_QT? r XXկ)S{>AolW�~xؾwc1NB\@AH؉|EQ !@AHϑ#"&}}SRF>zzZ?=>A9>`2෿:e be!!� BBH,hNdsAB6!IgnRCo/KMI'If6u3|�l!BBXFF3tI& E 56'2zzɓ`d{�?]+m<,[ NB\@AH؉li ac#PYIHs$&U]]6:Di{zG9)S3 ~KaFK/?qǏA !. $Ă;"+uS)!<v9>sTC-@{lt:7XN$J^s p-]F9s( !jrc'pͫ_/Gh̡ 4f~N twgtt�gя/Jvxx]iQ6!X@AHUC8ؗE! ΐOL8/_FGeZ&U\ oY*{Qvt�f޾~\|@S|K B\@AH5vbhLkOH7Bl*܀FFxf$6>%1rI�w_ڽ[oQ CHq�!!$Tdtp g67{s 'wB/t/ r n[[l-E B9a&+ϛ B�`hH>*o?)` < ' *2םiLVzMe::d?;F3yCu 9ʑ;G~,5AnKjkwGAPaU|G9@^^qk[�Ś!CH1 jD_w5xXg]pNtd!ܻWg8�� �IDATjjDXɍ2P)~!U! .#�3gtgZ ,2Jb�!!$؉,j+ ,AG…TickA:t|z5ӟ<ZB}}!X_>¨( V&#s'*�˖^[6+r�r%aP[+vvt@LOq!!$T a_o5u"Э; \~|Flqپ}? |gLrB{'QP; FGE$z|P_8Fc'Z%>m˗6:Bs !FPBba47ʔ3v;FsJ!C8e({.*'pbAIvtȹFAXJghzJCP|V#ƍ;`!NB\@AHL6*rY BPd`~Y9SG\<xB $ +@ylV{!UT[6^śEX"@APBb!ˠx%*E$kЍ T efΔ /\xSʶ8\ BU/緁P,Iͅ KVpV_~9!T_O4Axi!FFB, $hnGFCF h9Hbg|VwS'F3!P=\E (ђ۶v~NZ#B6$Ivvp@;Aq!!$2 Ĥ,*s;:d|20cFnY5A?_QL:W_hh L B(PoΕ 'śC/I0(% B ( !0Ѯ*46d咿^tv;Jɿs Lww~Pr!=s%_gA:Z(1 p"CH!NB\@AH|>L.#+1.WliTF B9HTQBĨ#TaFOh>/"@=55rN$@uu!OHr$o_AXQ!'.;A9jQu B5ًCx{d?{=R/u#|]G`NȈLj r^^ aP($ B73.2`db!!$r2 �x%ja:-Q?ʕ-[q1FQ@P$##ΞmrI$ YŶm۰8tX{% .2SPFDA!̎2( QFF !FPB"'A\-!_VT�ѣ�3Ar4IjWW\oQ8ODaUeh%}.@&Ld i7|H$6Jb!!$rFsE u55;w(ZA07tyxQq E >DaUp6``|>:Bu̙#!A~YBB\@AHDuEpcLD!Me/o43hed`[Tvֽ0QZG=I5k !t :/ӧ;n45T Lt !PB"G93W!NŀYt+fMe�#}6 ݻ uI^2<(H�c9?g3h8Im*kWkֈ=;X *CXaqQ]D:]CH19p֌JQ)C)0|^fp YŎ]ƻ T`VTXyno&ϒB9GFmhJ~#sr nso]HHK#t !PB"G9sfVɂŢЍCŷ! tZǎ|As,7l�'oM šsA"_{x B%-wAxqAh!嵰r`z%PMRCH19ãΙC8yH-A.̻ekVC�Ӧ%O9ȱ}/9s̛47^_ᄒRGa2r3h::A!FFTb!!$r: ?Vi*9ra~lB@ 9" |Jo}d__oz]ЖKdTǨ2OkYO/ܶ`8߳0^^ +P<NFF:(NBL $D$2:}dMI3A\9V0ia?"D xuuj$!,Ȩ;$!|U9vC`v 5 -AIvm">2Jb!!$rp\hB'0i=n׆wItGN�.Ikp5rdm 6crn;щF]FB $Dξ668f0~);,8TsDܹ�J:q'zdԩC8:q۶xG Ts*WA^BQ7~+2NB $Dvq+71sq9\}-IswgMl4vY!4L^$EF B YuJWˤIr#AxlՅ{S9~IG=~ 52Jb�!!$rtCXnȈ,FaSwES)$!TqQ@:._N>,OJzYa:-{)q8pNB%Zl ޽.iȪ*CXS# g̰P!$@AH~wА}Ӫ.z I+|A@)jrQ}}g^DFyFu/VADB yjYɓBu{a#' Np!! BBHScaB~�JChU? *zFM?'hCX[뽉z26qD2uu)Kq46oV!Ad o6k\ 899uV6c'�ب !<~!6MI)[ \Jw;Ͼ}omvkkGޔp2�F"S 8$ AkЯ+ev9" B W;Aq!!$rr)Md4s5]i!B+C2;v ŋoWNZTCt!T&<PϮ.&! BDPXEFǏ B/ўw c'! $DN#NV]É LCcd P]]|3N_%Zp$Y a"ZCh?_~cfKd׼~H <vy@!NB@AH|]SCh 2ʦ2@rB}\(!`<vB !LZdԉCX]-lUd/>^"==qQ ~A82"罕hB`#58v BBH(p<2j3vp B570Nq; Tbũ ܷϝCEd4NI a* hka9^[Bu] rKQ:( !OgʧNs;:!l/'a*1,_ns!yq@sTF zh\53 |\R 32:qIXQ AAHFX5N"3f<&EG l9sn$x!] zGu}f21İ] !=>F5F22ۛlA;hAΫ ! BBHRT8NNtwj!tKCh׶h>Zzm*3icU+mz͜:I!!+$;2 L <2BB ɧ2HR!!^0W1B@a t'[Cm,;᧩w3U  T[ B2sk/֑"'%! g !!� BBHSH9sYZ9Y٬.q:N$5}*+EFīZϪ:NQ,2:oČGFO TqF3B A.PB"'u†kPjK-�FFnn9#WEFQb&x†`t VCxI .9!LRS'!�8mV%D<8n$==L`!0Pr!! Bl۶ ^z)Ѐ+V__k.\tEhllDss3>OK]z*xb|ߏ $r򩱦2Edw #כmv!`T_m #ΘIvTƮPuU5nQCr)'O6y!EFB �ʕ~6l駟o&M믿Kǹ瞋&?#z{{x嗱uVTUUG?j\~; _r"!OePbŧCV B75|8 F'9, 2ÎGz9.V~8}}"aTW&r !ཎJwfrIvJhQ:(=ӃO|ذa>}[ oߎcӞy晸 g��WK./�ԧp7㳟,:YR&fr¨e$>VL&Ak&Nho/0{v{2(!4[Ϯ.9n66Z9p*ޔr;\0L9#/~ :t7�NK.�p`�{1=z\sM㯽Z7MH !0eԡ ! *2PXuv&zl!tz67S|S$.2 Hl4 mdԮ!C c0=##(=#`طo,YFL2\s _8p�ƻǟqؾ}k}׬Yt:^x!߆ɧ3!t"h*TN&8aP^:uݾN#–.:]d7zA!TA";A1FGGqeaկ~ ?qW�: sf͚UYfѣȌ@EEZZZW]]f-Ԩ 82/aea9v]FTaѾ>gqQ@~l6YyZڋ|y52ŸfFĢSDJ;!!dbBa``�W_}5nV�e]G?׿u ]:Qm4ԎQUUATWW>WMMۿےM6aӦM7B@Bwѷ6Ӧ2,4:b6tۈ$DF{{j|XU%kM'MehWpr{&#m(;9c'a20 z\F8qt, gaCH1ucy)ڴi~gҥK`<Beh첺O]]FL& ό[ok֬qK#a9v5?AX?ohax\d"(CX[+oRﭑC trܺH8ip4op7mwčxsgЄ]C/OD9)B adеÛ>}:�رc0сfB6-O822GB>A:U鸆ISj7J3n.2 Xm!쵵a*徉Ȉ8}f[:-bONG 5@u^a( ?0ɂ08Xd: CH1~]kmmٳڊ{[nŪUƿ_z5�3r\} GQ z0vЉHV? bAwF̞G>r.vCи! da#'~}>ܜ==r>Y;!|^HH1:uɷ<k !Pz#�'?I*wy�ƒ>X$}Qk+o{{ߋiӦo/ߎ\|!&ăB;B8! "L֖FFCSA'qQ42^kIdp #V\pxX%]x1={8b k=j*\uUOQ{xq}+_ fuqW{>o[piw#7ߌkGO>$n|[Pz2ȧ2@Mc'Y!FFv~*] %IIdt$uaƂnbd73Hvdy=8Žs}�%CA?>8餓p뭷 _}Ν'x_q 7\r *jTUU.~_c%#dEezԙ5u0dy,�tU R'>26{DEKK9\\Ch%Uc'̘<nIw ~a>fuy|cQB č7ވo~˖-~;G?OA!Cd t#ҫpPN!~qҔ#l0Ȩ2\njkj\B@NN2!CL ~XgEn\M!$BBH�ңpT0.NTle[.5QB;0#[55ɭ!܋pRCxN?4$5uAvMCtAy30)rD>BB1H�T9.N�uNB\EFF!t"P? n@xa67nwO(A!;׽C䂉9NGĀ,OpAӫ?)B $Drݎ�9?Ћ 6Mʹ99oC襩LEE>h#ZAR΂I yN>J;$N8).Ͱk&z 9^B $DJ._5F$!≴9`/\;Co*x5>V%[Z+*A9�Z42e8QMqh7C ?c==@e x=3qxkS@Ns! BBH ̢"UQN�ւЩC 6Mq fPTfdD~#vuy.qEF9覆0Hn�bN#3vhcEpd ~qӄGw^eSB1HHT(2ǩ9~\DQS3d mHp6r7? B50Ȩz&rdT9n(Ah7v9IngzC[k`d BBHr�R9鲊8�{ZXFuis0 BCaMM&{^j#zaC\pvwPgv$ BAJ";@b !!$R! BjTصgO> [gZvti:jpS0ЬI!f%DӫVo>l/uyg0{6PQip0=! BBH(8N裑C|gS�1=_?ɓrB;̹3rQ3T"nѨ8Z[ z B,NUWB>!]gol:ͱs( !2RB@FE-th*!ŷ?[AN"9Ȩ0HA}-2GY-bBC褦BD^a:w'O.nh�� �IDATO: 553( !"0( p#PDS㡇o `t`Rp("uFaБQE9 f94gu*U7"QCJA"t !PB"EEF+\4d!k$MdlM*㏋;i!D :FRC"P75]]i3 Vgц&EVP5PSCs=뮻˗/ǤI`lܸ?~gڊI&}/oQ' BBH"kȨQ4YcdQ曀_;~F$!T;0jJ B+~04z ī Q5pzT"AԱ{ʖQ2w^x!n6|GY;w|l._{_OO8t;<Ƀ)E0Ȩ[0@ǎ\"΄> ;jػv`t5UUuOCn$ B9mowvnDQ9##)jQSFFDo[oW]uկ'(o[>3<;k?8***pM7E$ BBHw [0)ǏB 'dAl(Lr3B!aF VpJAͯBaⶆȔ#I"Ң o%NEQdt|!B28묳PYYYtۢEl2Y>̙3㷵#xd$ BBH|`z B~""&p[E^BLFvP=~P{|Q8No-'0,A8"깒(쑸oe%JB'|>E۷c͚5%q!& BBHpt}1rmj֯[̙C_5*DFc^'2uUU龝BђN≌NA贆Z>sN証.NjZ[X7[A8eJa!\p] a*CH&,w}7۱qFutt`֬Y%ڝ'w!2P ȨG 8`"_a~�fرR!qs_NVQ֖vc>NO B >X>'z׊&gP $Q@^CP*WFe!I*s瞢ۺkźuO~CCC1ha\;qik !!$RCPCh,urWE>AD|,_no3fΔmggtP- BĩCɓut#B lU:i&9HgTi( 5^#6}c4!I 6m¦Mn۶mN?tvvv/FSS>Y[XPWWak04VP禅QBHAp@5SZ su֣Qf^J9z6nxycp#//-JK ! :gTg8E6+s+{{eW"}}""B2Ӄwõ`֬YЎ�ٳ?r)^[5q(Cut_Ȣtzg6c F)8n z~K_|[M30s#2uϻ Qo={d;.%!lذ:|A,]VZm۶|lق,^8M<H:ЪYUZPO9߷M\AhjF-[;4?^SOi  O?3Axl B hOORTVʭ <餱22J&�l7nĖ-[pbڵD[[FGGoqAW {/6l؀*''B"E c'ڻu>XzA 93ЉCh$DY9Dn?1/. ##?r?4*t tY"T3; 9s?+j(Q4nps^to!$믿7oƆ ՅE??�p]waϞ=?V|~7J+hnn~y|k_wI HQєZRVVj1;8X !<~\yJה if@mC`QnXRz!lmKA#FGg:RC贩Lw&f;~atw_?p+,М_FQ:d/"JaؼysRԸ LR%Mf4z!|K_m݆Ay晸뮻p)D;$ FF !ӏ;.:B7Me�kPMaMfQ+SWgM7nfo2`2c"h_w0s> pҥ9�}vEVA*0 ={4Ad4ML{1dYrY<pw ͎S?1>>0V"AAHhʝ TY tT!HӒJ1s�o /ꯀ6W_?N;!2 }`bફN<e/5S_+ BhM;7P(JvCH1)%MebV/\8f͢ qB'« 1<l`/[.�8LjF05 5}%WGjΡ(`?.Bi6]}:ףI7"c'!FPB"EcW}FF8qDF$nkLdT1e ߵkہ|qZGO=e?% ¶6+ ڷ(LuDG[C4N=UsQQFF !PB"E w[ChT&LA�=Q:N# xg ?5m?v45Kc9%v.^[, L{Z[Edj:E"NEK.QBC( !T=A�FnBYgI ܽ׺߫Ca_yr~Yx2xmyݵ0Np~`\mij '-7ݟS:PB"%7 P5TH 4{MpWo* [ֳ֯~<K;B pVrQ1CȈ_f륹PB:( !2+q<Yt |MeOmЍaZ Kaxz^jsAk <4ٲz?vE!AVC>?nB%la>CxEy~ c뿖M7<XCH1)ٱJ )WJ{p0ڸrD $!bD4685KB ?5h{yJ[ؙ \\0ExlFFF%Wa<POy&>24BB!H);JɢG+\EY+Wemj =ed4)}ݺ@w.VՋ7qyXH[oY]t$!bspX"|&/[7ѩS^r9 ԧnEb]d`Md!! BBHdQc'�YkBu|) oZzzN<P[Auba [W+]+[+~P0nBCX_.nN^Uvw[sDUC ܿضp۟,c[s !VPB"et<䮆Evqe*uQn;B#AϗC趱[AXY)0v�//ܶ`Ԝ Ç#GBs= C/nFPt9yH.n@I a>Ϧ2c( !yk*HЍ Ly°� B%FFe_va_,ձuTFk 1]' L%ܺxvV/B9"NnFTU_\ sGF(! BBH;B@ʺV )!T!T]M ѣGgMCx�Dۑ#ݹSZAa &Em*A赆.2~PCQ0( ї_|ϥ~ld4!!� BBHr9.B 1^N9SDQ^(!V:SʉC$!W?cD̚e/ zѶs 3EhZ>vN>T˿B'Me8aDFY@~Q5Q:�{(qli"!! BBHd}DF͓E-! 0+f̐m؍eB#w͉ Ԋ ؼvG)h۱X$? uUn@x5^VV;wJ=rDF >A%]F9vb !!$R Bw}?_Q™3evlԫCNBE܂VN%#A80 BСҟAEFڹ4. Hҥ{ѾgEKW~"ZJR ܷЩ8j.Lwx<d!BB1HLL.jx͟_,, Pj?I<E £G Ю_pdi%BLRGu֏P9~�ƱQ9)^g ½{6E}Mv%8)ңCqRQuQ8ӦI.p"DFB9Nk:TۻW^wk/X\{l:^#qlzu-A`Aa̙rN|r!! BBHN"E qF2 ANKaChMCX3D!4r{?{>mc-܏CuU]+۷nS#':JTzaeMtrq9/﬋Tb!!$R."TqC~oGc,tthFO䦮LVW[w^MC8{vҢ^ÇG9 XRQ}?.oNa&.VTmk4y`VUY\]hnbА\\SB BH5˱@ T' llt皚EF@9shӥDVF B%-3O}pUC@\G:oN�kAu`<7я a BwlaIQ:c( !R\GF`BxaMeh^{A4p0\[GD!('˯ Tv0T\p_?l/[Zd)N&MhЂZ\!PNEY BB!$CAHT&r_CTu7Ο/rx Š qXQ7asٌ3G"}jNSƂITeCDdAwf{;?WBp`[ BbTȨ2 ,B%dAģ2K!$BAHVV!d1v4UVaɼBtdC9 ٳeJM`.iy.AŽ9waUO�۶=&>!}kU'2 cTƫC ܺU. g:pdGFBL $DJQQ5~""W]Jf2nKP:M44wUL[cQnS:sVV B{|T=(xETժJmRZ;[m(h+UNEZVOkE/Z UHZ߬ɚ2YL>W$Wo7F崱@sSw�W0@gv6g$ M7Io-|Y @7RbzN�h@e˖F7V#Rʈl+歭@(E6ti}{ U ak8?(Շ9@3UUf=Bz>ۥ>?u] W:+ٜ!7=fwyϷeḱp< Qa} կ~ /0.Lv:( <X¶ /2  +zlt!iTk nf|k0}_ oQ2ݟ٘X\cK!a6K郎;Nz=i0i*iB*7z˚={jM6M˖-ӝwޙ "et?prmgO[lLފ׮5'-U!l,ZK t]~>aK,RaZ|Qž= 饗Мl*QB3oh?�DXSۺ,_\OSO頃үk95kJif˨T?i4 aqC3? JSo/M({eV7M %JKjٳ {f.q߰e@E +{o.]2ʬ\igK X).6<e \ ɻ IX1-T a]F%'ыӷo_4/�=C("fdnl1nkyϽtyۜ@xҫij k w]k6Byk avҋ/P0lyQ2Bq>} <5o<y_~YVҨQ_j$la6-Hv:u~ 7[-3g{r5&V];5%JeZj$ٴD֭h_9ag%ZFcT@x7W_Un4zhy:34p^! 7 uqQNHlnt;P=\NL@4IoY! ;CxXң {5ӛJ<T[bLԢ:Cy&]JNL[]-˗?g B� //K/Tvx $EmڴI]vUW][FcNv-6/϶eT3P&(|P#[y;a7aLVoj lM{2avv5j*՟S=LpL[?k-U!_! )mV͵k>Z"MB=�p…)1BSNwܡJɓnݺgչk4!)..B(ICH]&yYJG5k˨TW@n Lb :TYi<YXgL2uu5VF\:0yrBJiuv@2:TUUUgyF۳}95Ceq0Xȷ3A'jΓOf\;wl*ick˨T6vmx vozbF6_*R9–h+-> -?h7 !-�e PK,х^ݻSOՔ)S駟�C}˨3-sY!~ѣSS[_9MP:w)LUV~ VuMX L*oB1%v<s?0e !e 0`&O7|Sׯ?޽{C=T]w^z%t9f_ a7vf*W8R�� �IDAT*tp9K?e< [n1ms94wMU`}{d֭33Rx0azoͦesg-6o6�V1m,Ι#~o??L´)T4$/aP.]4vX͞=[k֬o/Xo<LuMguz!Rș2h=:YL?~|#[ÇKG-=@vϳtO6:w6' "ܸ 'U! kرu iHz l^8̟͛Νn:@f96m2Uo6?ͫo۷e7rQǑ< !pyb?xg?… zjM6Mڵɓ5cƌ\_"Ž@ lf˨TѕL�(-98"RC{WFj bDP _ QA?6GuP2!Csͮ+]{ =o׮b6{ 9֤}{ҥfZ~O>1oO>Y:T6|y,*-1*�BT L}MǏܹsa]s5$:Qe*Ÿqfwǟ{ y衆# _NBx <hk6nl}RYi*iE9Tѥ43Z799N{ϼڐ?6_?i.4ڦ6*c1=B�>.^XsIy쥗^7M:u$8e%pJee~ ͚U?2oxL; Sap&34'6i�sSP29 #N?8uWYk@XTd~ Kfw͟Se·!SFC LG|/й瞫/RoUhE\e.~zsKw5{RCSMKE_K_|A׫i\ atLu(8|$+yh< 3<h̘ytyT23L( Rʕy.*:Ce�4,|N:)ٳŴh"-X@cƌ!BgO8Az93WY)zi?ApLwիN=*FϞ&$a搝d)a>Vc1sޯZO7N^=15𤓤#9` p 22Tݻcǎ\_FV>nݺUn_|E1"o}Ky.@) h$s66IO<!ƙ{~ҥ-z^x ܹT}WN9Umؐ_3NN8垳4?#FjE2l&wt m̟` w͏(r^IkB +s _ wy:t.]sW_}N<P'駟W_}X3[�Pe7Tk'M"kxq\ܫ~ݲersA/U?B}f"]pA"7N9H lf"O J7.<KNڔQ2@V׿U#Gn/6_q/ [s|AڵKTZZ~ɏ:́VM_L 6)9,{z!f I#Gҥ&kknmz (L2gÆVѽ{e-Y:«6-\hZ>w7ՙ:*k?do|#.r-/m!k',]T^zi'|R_4o<u]͛7O?sx͓wb:4{l_^fҁnݪsT B8efuץ~⋥g])˖1P&2^!MpMp|T!lF^{ͼ qǙ_a?m㏥.Œ8C]v]W^yEFRIbG_} رx mٲE_|FuQ+W-PSF :JOsϭm=lcKr~063S?Xf1bhyi".* !OM(BZFY;4A?&.\%Khd]gڵ:ruyY@8~x;bt7 Z;QCz:H7n3 kji(*Rf B??|Ui3,RÃe .!ehܹsuGkĈիF_Wދ'Nl֬YZ l2=c.>gǡezȜO̮k(J9FZBTS!%%f:Pw&юfPABK!eu]3fC9眣?j1߸qjjjtE*'4F0+h#2[ܹҖ-Opj]z4o ~p˨T.?#o8TՃc;_~i JσTЯTl]y啺+3޽_Cy{9=sl?^M.izW5dۗJ%t"]q4d!2AMgBo.-3wԉ iab{85F@{뭷4sL-[L7o}?e'/?=SL;3Qߟ"#r9lwߕ;,kDt<TWTUe*NjM }H;ڿȤO !x@&MRyyok_"N_:y /᭷ު[oU&o{v&R,3ȾNnJ Lw#1mf? ]TC1*@^tIzԹs\_N]% yĿ!eҫTZjZn?G@4zim(fˀҿkTz(gرC_|qA�!\LߗaEI[9ƼB;OZ<|xgHeeҿeָL&Ml#2*Y9SG2"w-XL㨶V8@CSF!eE[*qۃӝ|Y2 4۴iti_nUg.~rGEvoF&_x(Q!D~Q2@ 3ӧjr-<yڵkX88mۖ+y}uIњ'¦R!?.[=KE �xQ�PX(Bf̘3<S=\2X( Yn&M#<Rj߾I&iڵ<�nB1B�-/l(BvޭѣG\ ЀK.3f?|uI< ﹾL� \sh(ZF{o[oV/#y2:aq;2dH,XQFko \K �-;رcu5+P>}C.qh ?qFCwߝ+Ɯ!ta^�@ΥG!I4cƌUwy+++U^^۵k -"`rD(�D'B:-@򪻼_|A]tEJի5}t]9:�+Դ@-@򪻼 SLIIߞcǎ:u9$}gzt衇rhE\BH(�D'}(k'�4 7Ǟ|Ɍ>#tM,�MUB*�ZFP� Ȼ@lٲ\_,x'G!HZF9C`_.tA�Y`�X:$/F@ tYg>?<BB�N =I�p*++Ӂ(Iz$+@tZF%<9@ zҪUTQQ.HcǎX9ur-�2 !y@P^jXB=XUWW_oGնmr}y�{ rQsB�Ay)~X555zgԭ[7]{ѣ=\=ӪH㱇�2@@߉SO=kjƌZfƎ/ח 빬�!Ȕзk.+zxbkN}eH㱘�>e3|T@K/K/U=4n8GѺut%q@t-&R!.//ѓO>sjƍ:u= .PEEE/>d!B�-QsswM�Z 7U^^QFiܸq:蠃8VX+V~͠A,_%0C� K А T[[yi޼y~8�9*C��G%�h&2p�hM9CH@ ]vY/@3yPZF :SFK�rJ@҇P!�!�<@2&R!@*7}gZFG-TN e*B�N-!@*N��DB�Vy@ҧ2T@`UF B�p3T!*3�Xe !X\LO(�D+c1=Fq'Qǩ?�hYє=T!ʓ+1Z. �JݨG `UJ@� ie!tB�Vybx�`(Ce�41�VQ!�KSF*B�V%!g Zє3T!ʓC�"2e !pB�Vr�2 �`'OP!v@� !�Xhuv@�*ƔQ�^e2�@ `+ !�D.d1=-�q7bzZF Z,B�V�, !BB�V!e�B�M�*�`EbB*s;vwܡ#G[nb5kVS, gݺu_yU �ж$+!h B<~zUWWo߾8px x?TWWNys-yy@P*�D˨Wf! CϞ=fC 1j( 4(O�`k'PJKKգGIͯx{۷+-�X92T :�B >\;wVtgkɒ%eU\B�\p(B@:t5|puI .߯aÆiѢEݻw/1'�,so*�B*h̙9s<uH]cƌј1c;gO>YwuOɿ# !�D.eBNƍӸqR[hlI'׫jq7.�`EJhb!B C޽y\_FXCH(�D+8eTT,[L!qi�-d({VYF~ݛ|l/jѢE9rkU8C*Ob [F*2m4mٲEW$=Zb$iĉԩ&Oٳg/T>}$IÆ ӠA4x`uY-ң>>}[okB�%s�bz)Sh$qj޼yrG\r:u$qT /P+;wgϞuwQ!�XL�v/hsfΜ3g<V]].+oqU^0r�h !B wc�,sB�\ؔQ*�x3�=T!*e!-�2�1�v1T�!e@�!-�HG `ya�`Ee !}!2B�Ne !p܍g z $9T4@ו* !�D_# Q!@?2e�,:T#KXL '|#Gcǎ޽.mذ!y~#TyyiӦE}Ue43�`˨B�ʕ+uwC|ZltM?F={|3tWj6mN<DM8Q{oB�(2ߣ2 ]q/ tM6lݛQU[[ŋwޒCjĈztWJjkkDGSO=%I庮uUWK.v1 31@hTogԩSy^FgѣaPN;4/$_צM 'L;vh~#%)b�D.2B܍5S<u]+RGuTWZؐ!Cx?wРAbz[HXL� NQ!fz衇b k$UUUe|J6mҞ={TRR"JKKս{w^ } �!2CH@a3lܸQ~nvu=sjkk%Ieeek׮]sJJJT[[)++K>WC3ƍӸq^�XL�&R!@ v***tu59咤]ve|.s˵{穫K~^CNA5ځ\JYLB�VX(B�i?#<Sjʕ{n-_\:uJA555޽JJJ$x< 6޽[6mRϞ=#�;R!ȅLe!t<VZ%u5qDr!,X>L|իW/UVVwx h=XI܅ uݔ 1 !�D+d1=-�Q!O г>b<vmꫯ:C%Iwf͚+W&WOOI&%SOUn4}t5*աCy晖; ZB,Խ{w}?|;nV͝;WÇCm߾]w>h?>yڵSuu&L .@~z-=YJ3�=T!q2[u7j*++ѣ5eʔA5\M2E?飩Sjĉ6 R3T z3 �a yC߿^z&=W\+%/ hURZF9C� NBk_L9@R!1�ָ-�`k'�45knLb@-�X7nnL!�D'vB @xB_ !�D'l(B�i`M<Jur B�NB*�Xbg'�\;A@�I!e�bz�M�kqE [F|T#&77"ʼn2B�PH({#foƤ3�HG `Bv�"bz�M�k a g zT4@8-�`Oe !X&%!�"2jB 5!L/F@�X !*SߡB 5!�D'v"&I{d &yc�D.eT-�2p73*�2-�2X*KB�Ne4y !4B�B�N *�2XS?e3�9h�XO y!ȥObTd &y@� C ��3e�e@X"3�Q��k\_LhYB� 2J@!�kBN�@-=T!Q�(e !4܍&9e�=h!�kB!�D'}ʨejA�� �IDATB 5nr1=Ce� rQh5-!2 `2s9C�s�h5��. ϣBAB�$[FY;�ƺ9CH@�XP�Ic.B� "&B� P!L!$HC `M@t@�X2깦og�@˨H{ &yuir@!�kWOB�ZZ˨ǔQ�!�!B�2�@ (�QK;C(Q!;2�P!�2R!@e�QN�D `*@-QN�H�k\giZFGE `_!thMe@!�k3G ȅR!@q@¦R!;2�xBN�@-#y!@8gQ*�X;B�dƨ@ `M8{ r!SFC wd�IVC� &2 5q?v�V!d 0B�xk'�3 ;2�ָ+1)B�QK2J@!�k\ϓ=!@s%/&v�2B�a�q=W-!heQ!;2�$+@B@:!�kLC(�huZF#\9-�`EF(Ce�d 5Ei-T!,'A `Me3�=B 5)9C�ʘ2 �#`B*�Q@ 5 �ҧʑ벇@*!�k\/Q! !�D/28B 5 !g Z-b(Lܑ\9P*�T#2 �K2J@!�k<%2 �KCH@�X*C(�D/c{d"S`1=�2X; 5��BP!@O@w/�h5BD `f=RII/� B�M@ `'BX\r !tB�$S!eLBcq9ruX,Yf5l٢J:tꩧj^qG `<CH h!d1= U]]8p$p]Wgy̙'{պut)hɒ%Q^vF�k<=@[F-{={Ԛ5kԣG{2dH駟o~Z{$ .P~tw'[5*�Jb �X2겇yT=zx?:aP***tӞ={ZZ5)Ce�) Axb 4(!ChΝrpUG `*C(�D+28b ڼUUUe<?zjۗ*pGO)�`Ez(Ce ͙3GsIyl֭TVVxv$I{[;!�k<*7(B�VbzZFڌ7NƍKylѢE<xp˵k׮oh`'WnQ�VbzOB]UUUm555Ӷ@OJB�Ve34p@-Z(wyG:tP~rteE `*B�vdh3֬YO?T{M>vkڵ7o^ 6hܹ:묳TF_ 5)-m.�X2g! iӴe˖d?+VH&NN:iɚ={KG 'pƏ?Xݻwׯkyg9~r@O=!�X8)L2E˗/$9g}V͓8KԩS'9#Q$!_7߬_WСC5{l~VZ!�k<y*'ޡe�!d _|̜9S3gxK.zG#Dqiy3�1-w@'eB��䪘@�$*,!�k<*2 �b)gYL 5\g@ggd Ɠb=3rv@!�k<�Jk !tB�֘=w@*B�֤B�K3!@"O%��{-T !d �XlB 5eSF �RXcR!�k-BQ!@U1gQHG `2 �Kke tB�x7 �HC `O& :N/� _eȥB 5ɵT`(B�!�1-b �bz�ez�yf(B��A5=TD˨ !tB�83B�#X!#W!@dQ�#}B�i�,h�s@!�k<UBϑ�XD(�X � c � � @�v!B EJ\Q�%2C �i�䪈 !�C(F*B�$ZFGe@!�{W%qN�5QA `'Q�)2*I@!�{h�- ,@?R!�;-8!@"!�X2e@!�{WqZF@˨*B��q*�V[F* 'qUƩ-QA `C�ZFcSFd"u@�XB�E!!�+ Ԟ9CH�e@#�*C(�XB� "y0ΔQ�&2B�a�` �@BH(0B�VQOE��{gC }[�oh�[SF]�+-)Ceh@ SB�%e@ gXw=P!�;S!@xS?@�vLv@!�+⮫>Q�#2*ZFd"b2 �MC @xܥe�l Nu_ ֈ@ h�-D d9= !�+R!�-R"r@�{!�RR!@ c(�X^B @+>c!zfxwuꨣ}jر3>O>ȑ#ձcGu]\r6louG\ӴiӢV�kW2J�H_;!ZF⮬~_֘1ctGFӦMӠAMGu$iʕ:յkWs=ھ}~_꣏>҂ T̘1C\s?|tMz75qDܹSrKUŸTZF4@ &MҐ!CTr;V s=㒤[Zxz-I:tF{LW^y$V?O4zh=S/\몺ZW]utbZ^Q�2�Ah3x)aP;0_~igyFGNAI:ԯ_d_]6m~0avءG�ăSFi�;ZF vZUTTHVZ!Ch_AGxq !�X:B <ZzƎ+I$UUUe|nUU6mڤ={$?(&}޽V^s]3�`[ a !mO?T&Lаat饗J2%,۵k֪4ʒՐ믿>q4nܸ^e�Ki5u�*�+Қ5ktgk׮z駓咤]ve|M]]]甗kݡ_WWL:U j�2 � a! ZFuV5J۶mK/<01Uo Qݓk'3޽[6mRϞ=#.�;Y;�NQ�TWW:KK, /#8"zRee}݌]`|c]p\M\ _,�-Ce�d"6C<رc;hܹ:C? /+W&ӟ?\cƌI>vꩧ[n>}zO>]:tЙg7X!$) f4i?謳҆ ._|$[oܹs5|p?u}裏㓟߮];UWWk„ t뭷O<ロ(qϴb1^�+¦R!@ l>@?|qd ݻ?oɓUVVѣGkʔ)kF%%%2eyGSNĉ}_@qS!=)!;fxכK/ԤϽ+tW4V-nQr}1�VR!@�+\,�`MJ˨c !�+2.-�`OؔQZFX᷌r�, Q��pSF"ZF)TXwĔђ?�2XLB�V$[FKh�kXLB�V.-�`]e3�XOU -�`MBȔQ�a�{"ZFBA `y !� 2J(�!�+BZF�hQ�IiB P�.8T !B�V-!�gYL %ZF5B*��[F*�`OB*��oB�8{d@�zW_!e@�8CXJ �k@gi@ `2갇�IR!@P*�`Oe�BXzJSZK#2J@!�+[F5QC `ymѢk'�d"u-��{--�2XzQ!�6eQ�B�V/g �XCH@!�+\ףe�lcFXTE �{-E�@ډҲ\_ �a{ u !{@(g!‰1oi�{"=�2Xkޖ2e�aFXKBB�- Ne B�ve)�`Qp Bg쳹 XB_;ҹJ+Evҏ~#S۷ 'W_}ѯ{BYn+o`C(�2ZH˥.L<n~9so_I'WWWNysQ]nǝ�+\*�`]BaޮX5 ,{ԍ7(I-ܢ/>ǨQ4hР/5o2 B*�`OpʨS;[aOXW]uU򱲲2]~zjժF<m߾]x<KB�V8T`h!!B,^X!C$I~1|puY:tg%KDrXP�ȁbBl+WnԨ*qիW7:t5|puI .߯aÆiѢEݻwdݚX3T�+Tޜ9s4gΜǶn֪,v%?ސ1ch̘13'KӧO/ܙ=Q) `qiܸq)-ZHrڵ+񺺺I'?Ik+ gXQe� k- a]aCnVTUUHzٻwom޼9kWB�VL�ZF Bap>ve;#I8p~?eTYY"ח�2 � G_sM8'۵kfΜN8Az$YF~C$_>^|E-ZH#G[)^`EK �BNP ܹSWz}a1tP3F?n:z衚5kVX3g&?oɚ={KG4l0 4HVΝh"=ӧn\}K9G `SF BZFn!W mٳӟT?6oެc9F/=9$).B͟?_vܩ={ꫯwѦ[F3`E2�`_Hh- aR>!lCt{msfΜR1jUWWG}yy3�HR!�{RZF a&R!@ �@*~\AViXQL �gQ_!YvJKs}U@^BX|\j�@-=B I! wf�yq)rD�@ *S0k'3m@3XQk?q�pرüJB=`E,B�*2Zpk'v4o;t0tF @b7=B�+2ZpgB]@3XQR!�B`PbLB�V BL˨_!!f!(2 �Z02J TB^LV!ܶMں5w!!�+h[L_BeB `2ʏ�*e1}!,/7oYN4 wg�(S!�RXΝ:UURQOB�V.B�-BX`-;vԟbW/ZF�+ݸQ!�ۺC)ZE�:�TڰZF+ԭysnSB�V !?r�*Ǒ*+듁`ӇUtl�y3�Vr�쫨6l(3Ե+B`?qw !�HB&�+L !�XWYrR!F `EqU !�WQ8C(s e Ҟ=& gҗ_$t FU9E=\_�=ɡ22PʄUt1ol17FQ\W5jj5I+s�rRڸQ1?C( @pw¶e '}1ZI+<ZF **x\_m)цJ P6n4owO}?k2 �9n ZFhPaEE㰦$joQQ/�ڞ}%[S!@P ܰ!7ӆyLHTK\�NҮ]�M [C-BJ\Q�ȅn$QjݹӼM:4Jh2P6n4Ytb1ZFs=�#R׮*\@-~ LJ,wg(l7W%Fҭ(<c!TaަW%!(lP2S!e �LeBO-@+*@q=�3*ڴ^mB|c �Pe�rRE7B?UPJ Q2j]io?r� '*+UW !64eTj;-KH{HJ;Caeu<T g**T@{U!lKP^2C<n0T�rRڝ*߭8CP[x\Z@,Qjk?a-[LH^S!0ojhݱC*-5;ujnflZJڽ[8Pzm"g(\~0B(I6ٽl^IK�rRTS !<~~P2Cen]Լ5k/ Q@ح[WIi(Q!K�r#+wP0]Tr \DŤq" B*~ d=~(B�ȍ};¯@اTU%}Bd@X(B{Q*�k^.Btt'hD DڸѴStx׮P!o- 9�^iZF ehCΝ[ؽ&,;z05!oQ6n4ci̋L($ړz,Wb'O a,&uTB3�� �IDAT` t]i^wg(\a;}ڔ\;A�rūTe[Bӯ[g~G(mh&! Wc =ɡ2B�șJUlgK~0N82h6! ׾aTmJ2T�rBunO ;;9aL-v`XG DBz0T�rU u̒%fD0fg(\#]*�;Vʉs}%kBإKaWvQСf* B.ZF[d(B�ș $Q+ގme4rשYPhQn y@U!ܼ9T1�@9=*%I;PRAh! Ӗ-fOϾ*Re$e�r%VY!I_I<iCe{BypJJ&yQBM}U%ڲk$io1B�ȕd0a] zUqF`7! >@:J�rv^G#mcCeW <XQ'! Sc2v,X*F(�N,etgJ,10ԥMH ~"05v5㙩FL *VG�"u@ؔ a†,f iFEYYNj+iT|n%@έ//V|_;+ae|~ t]{ׄ ӾvXNoǂMU�@۶]:3[D=65%n&}kB#0[ ҺD�r}6nu MXH•+騣ˠ;CajJ ޝQ,{gcf0 fC&B5Jȡ$3wJvrPtbK$&uǎdİwgvH3cfֲ^c=2C\ߓ+�e{NrB(]y/_.I;Hn]B 3\<07WJ";[ڸ&2$�కuV5@ZP.^YZ+/!\Lj߾F2('jg^.�.ҵJy=q[nݤpV{П�EKFO*U._h303SZBKEvH {ø8H&HK_҃^;yN:$~M^}=֯8ɕˤ2�0\ZiNiù8gҮ)WR D{{$^ncHw_m)W?)%ESMj& cRNΥ޹-HWKO<!}G*9~AA!�O`\0J JWVBR:RgKQ3//)F G;py=*mk=z㻠_Z:u ֕xz}˨1bqMϜwZ~&#G^yH$�\z[ӥWJBl.Z6QQvrB3/wL:UڷOׯ]cHgd,_ wIVI֕SG)kedH7RJ6wd9.\(Ys3Fza;^ajqc[$M"+NI~^B(#?N9�$\22R|T/Ґ!Ҵi%o_Jro%QW99LVn5VQ;dFGK}d�V̱-u}$}sFn&7!!<xYV[_~N&se˯Z5KZX?3^$|Ҷluwt&yۋN,scR&:HÆ$sJ|"͞-5hPx[>%tA .Wڶ&&rtM=]kod6mlnʕK!�g)q6mo)X|m]СYY6 Z{7&:~1Bx'G[Ϻ*[7xui,7~&~+  ]x:5:tǽW~=zǐ):0㝭WJNˤ[7@/lig|1{7)H33me}{?4i=Q#fδ `vζ͙#-&\cޱ3ƶOvzر63%+ ( jFlEEI5kDwoJk!ζwgpkR׮dbѣmKERLLseOr3lzu6!NH(hݽێS{G'S7ް'}矝m&QQRpkִ]E׭ ;S?Ϲ~ N؋zFΝ-QQ6!RET^:tAhYЏB�pK.c9wor׌~Kml۶I KPt=}Ikg{_ zHRժoVM cccɓ#ϴiӰM,6l(\)O afgd͵ekQQRD4o *JzQӘ1v8HnUr;wJK{ws֣m'+{Hgl˖I-/)-ֻVuļz$%I/hp0] m[96,4nloW&_3 ~n?`o}_&I% ~^kƍFٸqcAaV1~jw{.~~ƴic̄ ,[fTl?k̽j09q ged}5rӸ1 LhLֶی6͘fW]eLݺdf͝<iLÆ\}1͛Z~z4fr>εb1ɘc.feT=H `́%y1^kLP131{sM4jd㾐Kƴmk-Us=Ƽ1dLVv[Nv{X1f73n17P8Gժ4ibL.mCzk IȰq1}[\ΘsتU~ޚ_dNu�VkclXҞG4f΂s~d1;3j13gWldyv^o՘2ftcߘKc^ݘ'0ycU3A#n1zkYvv1=zJ%_#+W׶pc3iS R5m]&=O2棏US>Ȗgfz}oyjՌݘ#2֣3glckul1s2|_t?7&"˜:uql99ر nL~TPhJ\wgIcgcW/ؿAc|^gr<u\iզMԲeKmܸQqy3J?@ʶ单Zy){G\iih%,erk6b[ UgcGon0c]b.[خvf:ul>1(o} c;hS ^N;h^0e+ڶ텏hjtݶkL׮ږԷ޲G8u옽Kw}jO;gػwiqTŵUI`ԬY#*ʖEcgO顇tQK~C_5g}F�.񶺮f3<7Ƕoj?n.HMzB׮RZ~~lZѣۖmϙHiJf?zD6R_uGY[mo9b[ /-?hkis,K7<6I$L*}tCm%Kl۸~G~>ٶom)">%'>63_u[mIikVT븸HX rsmrm}=jOlEZDK{sClr\b2l3֭v<Rۮ] CzF?|Wtٞ�P>SӈvĜ9O؛}// {( &RiӤQ쿫U SOٛ˞.YR0/3ȰFwϥO5wBծma@NG;kSJ a"!bJ:UÑsΣ�|VڈkNR!Szu۲Z|~CCO\޽հ>[<W�cg8cB�pox5DxTJ~.4uVLMQeۑgpe4O=e'p:p\{7a.LiåW^q: 'Q;vٹ'p<(�GQ;v]F�Nr-�CBrk!�F !¨pe�"!P3�nWeS�8.�vr2�F !H]Gpɥ\y:�C ۱0=�xh!P3�nkX�<Kb !sP;v9G`R�EQ;vL*�bR�pBh!P3�ncH0=p\[` !�81�v` !�8%?!pB�nKQ�L*(jg�܎3e@Q�]BZi$� vf)�DQ�EQ;vy\L*�N(H]N.�'7HvX�<K@"!P'aQ�pK~p.L*�b !p1L*�NrHFBB�gĤ2� vX�<(�eaz�!P3�neY!P !�-!DQ�pm!dB�p.,;�bB�EQ;v,L�.�vA2335vXEEEZjj۶VXtX%+0… (nڱ$nRg>~~aլYSرRRRg#! ԩSտM>]뮻vZC.I~b oުPB(:snnwﮅ jzW믿nӮ]*(zS�`%''kѢE<yF-I߿7o1cƐ«2 �8.vRgNLLTRRիW/IR||bbbj< 3J*/ }9piH3DQxK3'&&VZɠ$EDD(>>^}v!RRRB[$m޼ى"{ h!:sJJ⊕nZgΜю;.o^.]vۖ!Ia{.Hgǵi&ʅ-չ݌Gt6&]6i{HӋm:vm<Yfw#! (V^jEJz\& tw˖-8nᭊvYC�eg|ͅ.Μ'##㢏z@eff+k ,k׮ԠA���&##CڵkmSg^H=DڵKl>p$)**ضn ���H۷/b̗+3<xXرCiiiׯ_/I ���RgiӦbkq_^AAA{BѧOh֬Ye;wڶm:u8���༲֙m߾]م=x>Çkѣ*W\qoăeCiF}ոq믿QF7o~g͝;����ǕSOiڳgի'&m۶ՠAuVk̙2w-9B2|9RF-]TrK2335vXEEEZjj۶VXP@VZ%??NHN>g}VݺuSXX4o޼ݶmuի+<<\>>\e8spӦMnÆ :t5k`կ__ ڹsg}K:N2:*\~~~ϕӧk̘1?5nSLNxw,YQFqƚ;w6lؠԼ'Xj:v#F/k׮ w(2={԰aCկ__Zj{==ۻwbccÇ+--M'OVz]nEiΜ9CBBԽ{ P>}}ׁ4c :uJ}]Zo+]FLrr-Zɓ'kђy3f֮]puAzr: DQQQ_7y_TzzRRRTn]I SΝ{顇Ȱʕ+_~P'xB[VJHBBZh_~Y$η.^&11Q*U?_+))Is0:Œ1JKK+4UTQdd$\K,wߝ_9N:)&&FUm\<y"BΫ]vAIktuieo+ IIIQLL ܼyae2h (00P;vƍ (}СCjժUm[VJJQesըQCW]u5tP>}�I!mE˨9pj׮]<6O>뮻ߚ<y:tuֱ&F;=zTYYYkljرc\-_\3gԖ-[j*;"|܂ ~M4IۊDBePjժOӮ];k.[}_qiF]90x_|񊉉ф "۷W5`�Io+]FL``233gddoAFԳgO}ץ{<E90FV\t(awP%&&/zڵk-4Y=**C.ZݺuuYưku]; n5FժUG: |ԉ'twɓ/TVmo+ Վ;V|X,xݻw+00$ISj֬ 6ۖ9^%--MV͚5>(##C=zЮ]tR5iҤvηG9995kV~YffΝm۪N:FСCʶl٢oҥwZtݛ_rJܹS}u02dn$Kĉ%Iݺurrrkź馛J܏mpx}5j5jyʕ+u-8PLǎUZ5kNںuf͚�%%%ku:D@4c ?~\o^z߅>|jԨ{*66VW]uF4kW6l@&T~GUll/|ryZl9RӧOW=JLxI|[AHPffy}:vnM8Q;wv:4Do,X]vɓTNϪaÆN䋎O?$IcrzInݪѣGk͚5 PwpDiې 6L}߯5nX|I@7ߔ8RNNNߜoݏ����|c���G���"!����EB����>����| !����(B�A4hacK.:VuY7E�� !�ˬ[N?N8Ql_SjΜ90aB4hΞ=wyM�@B�2Jwءٳg;jذ~ߗ븀� 0@SLqSd���1XYʕ@4%҂ Q맟~_}#�"!�x{Ncƌ$EGGO~~~%C{Ok֬СCP=#ұc*,,LK��IDAT;vlմiԬY3VZ2d?^jk֬ё#GtwoYf RXXZn '..Naaa9�PV��ݻvܩ jڴio aI&)))IgVHH[]s5z饗l2kj޼#<yFݻwkƌJIIڵkU/֭RlllٳgkĈ۷F mٲEɺ k^g��F- {Uzt\ڵl2IҐ!Ck.M<Y>|MIC= wO׬Y9sh…JHHo]ݺuŋ%pھ}\|ٲej޼-ZTj$��(�7xBiӦXZlݻw-^X!!!ԩ>SPPPc9b塡CCCR�H�W-!!!Xc޹sN8bӧOСCvIߌ;VjӦbbb4tP[{r�+]F�W<ZR \nn"##x|͚5/JNN.VޤIZt -YD3gԟ'=s=v옂p�b�JE5jH+WTUjrߤI}JKKS mV,K/Ə*UM^{�$t�x I*Եr:7LHHPNN&NXll8qվ}{c<rH+Weeeڶi&o߾\��UZj%I0aTres=VZ[#襗^͛չsgU\Y;wTbbO^znfkŊ˻tڵk}~m۶7T^Iڸq;={^�$$��ҪU+M8Qo cz؝|ee-뭷ԲeK;0a*Uh_7|cR~-^X/B~!C`M:UNW_#F駟.tŋU~B$��\۩��DjҤ/_;L5h@Ǐװa!�1��7+븹s* @C qSd��B����>B����Q$����H���G���"!����EB����>����| !����(B����Q$����H���G���"!����EB����>����| !����(B����Q$����H���G���"!����EB����>����| !����(B����Q$����H���G���"!����EB����>����| !����(B����Q$����H���G���"!����EB����>����| !����(B����Q$����H���G���"!����EB����>����| !����(B����Q$����H���G���"!����EB����>����| !����(B����Q$����H���G���"!����EB����>����| !����f����IENDB`��������������������������������������������������������������������������������������flent-2.2.0/sample_plots/100m_fq_codel.png����������������������������������������������������������0000664�0000000�0000000�00000174345�14670056262�0020372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����)���kÅ���sBIT|d��� pHYs��a��a?i�� �IDATxy|LWϝ-!AJHP IZDR%GC$DQڧRZJI4dAR"E2Œ9?<37:Ws=νwwιHB""""""9� DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HT!>Uzz:d2BCC|[dmVy?** 2 W.:!!!dvZ]^ϰ(ڎ9QUz9 ###d2l۶Ue*...Pn"Rz}\&WHx{{/fϞ;wmK%U^^^={6l?%I$IUV~U:+ͫx|RGQ_QūjSz*uAB͛'''͛7GXX<--gllF!44ΝcH:o GGGL8h֬YMWJUֽ,ݻ&L@ǎakk Lۗ^jj*Yf(`ǎ%jժw}k֬)u]+2pSitH7ݤ?>r9Ǝ +++� nC Ann.\]]r;v SNŬYp%Ԯ][8;;Cׯ#::SLALL _5kɓJ/`4hj*һwomu)zB;::󰴴UB^cM޽ѨQ##>>W[ �u틃hܸ1믿qFXh^z�r9ߏիWcӦMطoڴiSu _w;v@Zw*~=m4i%GA@@�ѷo_899!663f@ll,bccahhŋ1f!88_3g`޼yUeVwT"ATC6l(d2zqqqB___իWk͓*$xN:B"5W\$КJ6l$sUj*!ITXEyxx$IL>]GwyGH$>CÇbb֬Y4vID\ LVev...ťQm*jذaۡCDjjP("==]H$ڷo_d/^777!U BWH$̙Ε+WSdgg&MIġCʰeSMe=؏^I aaaǂ 5vލzXf:uЧO�cJ_}իW]6۷ok{V\\d2OtVVV033?:u LMM5k֨WZ<テBКnfEu+TvKQnz*gBBznxYYY9r$֭ ccc曈ZO"""5Ru6m>}ѭΟ?^zh߾=[?۷lmmѻwo?^zGDمʕ+Xh~m1ydVVVԩ*mܸ;v LLL?ǏPG�Pn  66]t ѴiSL<yW~~>f͚WWWA4i?֭[1d0779hѢRVOFvn:fff &O?@M�m6tQuԯ_Xt)_ B(6BBB###ԩSŋ5uEL4 ^^^17nh/|?KNNF.]`eekkk�˗/cW]O(/дiS͚5Chh(\Rc[Vk6==]ue2F7ŋE011#>3JҷgpppP]KzBllZ>B~ZBZ`nn֭[~(:_ ͛7ݻѭ[7M4ĉ!+� $ڏ=z%Iܹs�?:+Wijg0zh4h@nee/R:ڋ/0c 4nX5T[d z- Gyֵku@x\x>|xy%I*ue�T}ك[nHLLĪU#GN>$''cܹȑ#qUlٲ;vDJJ x U;wm۶vL| ,><};vDrr21tPdgg#22qqqEWR//$ Ϟ=C.]B;6999񁑑ObӦM裏 ~B ((;wo> Ϟ=CTTReiiioQF͛ظq#vף%͛1`�c[.U~HLLD=УG�^ \z֭>|;vK.Xl>c5k}=_84k  5bbbЫW/([e0j(ԪU ߏ۷oǁ1h $%%[nsΝ;XrZɓ'COOm۶E!?ǎz/_�6mZy_Vܛ/_O>uEϞ=agg;wԩS¨Q`mmpDEEիP^q]ЧOG&MT]w߿_�l2]v044ğ+V`HNNޱc_#Gӧo̙3-Z $$鈎F`` `ff�x1|||Ν;gϞB ==۶mC~]޽{�7�^ϱh"ԫWaaaGLL 9ϟȨGdd$jժ^z 7nn:tQwСذa4h#F@$DGGO?ERR֮]Vw} &Æ v" ӧOakk RO:o;wġCPVroY۷�ХKe...puuťK:[k׮� k3`�=zݻw~WAOONºu#001111cLMM1qD*p�R)3$IbСe.We4..N-͛AH$֮][b9ncFFF"%%Emٸq$Ib~ $IZ.[LH$>S>HH$&M~)addTlw}WB$ѷo_+WR 4lPH$Ǐ5Sϗ*͈#BP }}}Ѽysk֬$ ???sUzNNh֬Y)H$&N,99Ykkk[?x@CCCqqrzQ]]EzzFظqZzNNpww&&&۪t9֦MB|Y3LOOR\pA-~*$I#GIV?zH4iD[nQB:^GQ[VU]F]&$Iӧe*. B IDNJ,e˖Xܽ{WcYVVڿKWu{}aee%ŹsԖ\lR-ƍٳgٳgFRK/|\~ڲÇ IZ[!$ Ҷm&$IǏŃ<y$ WWW=//OmVHT.}w$ƍ7oj,P$IS<zH#\rE[[[HP }} Ijˢ$IbܸqjҨeT-4::Zݻ IĮ]TivvvB&k]Ld2Uֺuk}OKKB4jHsvvv^xBc*$R(233 Q^QQQ@xx8͛ݻhӦ XrwyG--""ذa={Vrڵk>Z7gϞaÆ ԩSEv-ʪU1cƔHo&&&eZ ZGǪtew3g [ZZF+++VK~cbb?-[T[<WjĉhذZکS _---U#mٲEh"He˖i*/<8֮]ϟcj�W_k׮z|j(<x0 +IT={*7ږe'ODDD"""0n8l?3LMMW_ ====#lll\5k@.ceh1N<6:jz```@4owZcРAjiÆ Pp'MLy<uFYi077׺j*�)Sw###̞=Be/Z@uX^~}+[̙SSSU)k�+T֭Ë/gu$ ښpB�?q6ly[YnEh*srrʼ.sQw6mdii=z޽{ZVe enntw科faawww$$$ܹs6^^^i]6Ui.\@^^Zn Uڗvq<x˗/AZ[E㭷*zZ֜ @vvɓӃF~W@˖-k???^)))'NPYs,Zn|4''G ݻw@#={u)9Z}Xfee$&&j]g%IzM(*|M�̛7;wDZZڏ�:u*100@zI&j!C`„ h޼9___޾\)Uo)))Z7;Ν*}ڵ©S|ղFj;iFF*ǜ9sp tڵ{ވBzzZZ*t<q$IZO9|0d2֮ꡧ1r.�B&!%%E-?''';J6mڤgϞݻΆuu~u_S˔A{FFn"*-Je_Vqqqp]^BIٲm m^ZCI___IcQ-*]ʪhʵ^qQ=Ҭ<>% PY:YYY� *j�I#�Żp+AeS։ڎSmyNNZjti!!!>`<}R{SVV>}ZwBBB4ޑ,qK,… 1|U1o<)UoxYMY ^zڵ+ׯjy\jjikQ -+<�QZpac۶mH;;;|駘:uj^j'*wx,rrr`mm]Pyv w^ ܣ^_g$ÇךW8%߿\ŵ j{?REJ!ڵk`pBQ+kM( (yR>$ݢҵQ֭}xxk;ռ::֭,Ǧ43.q.c… 1zP>Te뙲NjDJ.NVXtDDDht:t,XP 4kא䩺 :C\.oaʕxp2E]x7K,Ν;Xp!z-<xPe: ֯__Ճ"553f@P`ƌŮ_@!<n ܻwOKfYXYY!;;yyyZʾ\#??_)|_vmk))X4e .믿 IZMp}]x1J<U!дiS\~]EQxEEHr))))*qi<|PcyRRR˪U4i i,/jQkkk!\W-["??XVcS؉'k)<6Ε۶m �~jff7|nR VCbֹ(ߙԶ999r\t �pkNu9r$Xu+%v˗#$$W;?iIԦ[ZZܹF0X=*5oGVT<==!z&%%9Oim v*1ީ P(j@w_KKKhTHMM-^T-ewvm(-- 6l+Gfն[*rO'Ā^IA01f̘"Y>{,:uT- ?tDDrss1h (T̜9Sm٩S<~hh( =^rE5�ڴi@Xll,6lPW6SNUb#Y2srr4Zn:XYYwŮ߳gOX[[c(ϕ#::JΜ9zjЕ0z( _mmmLmQZC -Z˗/-6m<xS^[oN<YA9cܸqxw`ݶ>||7Z 1[[[!* ӧO:?BP SbbZC1JSSS(T�,~76//'OPٟ}�`„ Z%)gtx*ǪA{ O4x`յ]Q(?G#FP(ѣG8rH憄l߾]^O>DmPajYfA$uBE{;wWUդvUܯ־Vu!ˑGܼJuuARR8�̙3LTZs}0w\9rm۶Eff&~Wt[n-u7 &`֭زe ZlΝ;#''+|}}m6uBCC1o<̞=N.^(-88 vڅ7|>?hj /^,sc___XGQqF�s4:/_}0`\9{,|}}<LQ֯_� > .D֭aee J�� �IDAT>}gϞÇU|HLL? WWW|͛7~ >\ ?>T﯌3ȑR6lZl8|0T#V$88رc~4i~w_~)aڵ }źu}vQFBҥKÇxJ~޽QV-hذ!HLLDrr2ЩS'UN:aӧv 8;;cȐ!%n7oF޽cǎh޼9$Iq!dgg]6_~ \.޽{ajj wwRTמ={puu222===m}-Z7|AAA000@LL lmm|41uT̜9nnnիqm$%%m۶ lڴ -Z@Ϟ=!In݊t 8Pm׆ bΜ90a<<<0`�XXX`oӧO' �sɓnݺ>իWcΝ礤$U`eŋU$Ij?d2Z ۷/ '''h׮}@(Ø1c�7oƍ7_~8-2 wPpHNNF.]о}{=zԺk' /gg"!,,++KDFF oooakkG|Wsq L1]Ys-**J5Ǜ裏4I+”l5o9nܸ! &텉k֬7o֘$b~X?"--MhBqYѭ[7QV-ann.:t DTTdsJZ? zE 1uTq !IݻwK�ϟ?/z)h׮سg:EBݻWkN ѫW/qQ<Esa<f\F=zQm1u ???aii)EFĐ!Cɓ'ڵKmVk̟Xg(D<s;wH_s :Q*>@888333%~'^X~4קBӧpttT#FCi[Q[YwޢQFse˖b޼yÇjyŗ_~)5j$ 4[! =zpuuR`bʔ)I&X4h@=ZdeeX5;wN?^xyy {{{ս_~EU(X.^X ###Q~}1zh!+e;w.]add$4h #߯OP%K///ajj,YRd6lP} *233DEzpppb„ s,Lyd2?ms#*~ ;;;add$6m*"""D^^^ھ}S}nZYFkGq#mnz5jpttB&UD?sDDDf̘QiV)S`ؽ{w hڻw/{=L<$gggdjǒHӣG.]2Lm޻Ν;.]VZEppp#pOpss x*nDm9s .m!:nJVV&MIJ^~\r{."##ѰaC#..N(5fϞo3gpQ-[QFo߾/1cǘ8qbu-ZLP0؋a װ7OF۶maoo 'h^U Szp-888hժ|f“'OpI8::�Zn@DEEaĈ�'O`ʔ)ѣ6m`/BH9ɻjHT-O>֭[/F׮]_R]XkBPPܹ;v ''&&&hѢIuP{&%%[n-:UY-WVe?w+Arr2Zn(ՐJkF4Fk֬T#ܹ=zΝ;ѥKUÇ?3\;CDDD5b -1$I[ N|Jݸqw}UV8y9o˖-!ɪtn"""yÆ B( Q N2Z_hcnݺ>?dffBOOvvvj akku{apvvIQ5z {i<FYaz �Hc*<yR !FFF ۽{w&&""""zݬ]\LV)eӧO5111gϴ@V)u&cǎkDe^W<wus9 2D[Vey'UJLmδLڪ~[.q=gϞWF_8вe˪*aees^;<ous^Wgݲ*38qP*U~}رcˎ= wwwտ=<<�@#orr2 Z^"""""Ү,ĀaǎP⯿B~TiҥK_t)н{j3무.xbF�ݶm]�3f ,,,__E7o~m߿?:wD[fDDDDDgp₫W($�$ W\A ��?~<`ddݻoF+V~Z3f8q8~8 ʆ 0hРQ]zݔ[ຌk!zB""""""w 77=j6`aaQՠ"0 $"""*g"!!o߮vj׮ ___hѢB/a@HDDDTgbhҤ `ii oDP@.ɓؼy3�0(|0 $"""*ABB4i?P5!N#!!+?m#77o߆Ar$ }6rssk:TB"""b(ެ��?Pa J U4وtB""""""ŀd2:tPPLk׮tUǀJ$zjպYYY7`hh;;;bٸsڶ5ʳfϞ#оuW!$"""B̟?rcǎU �رc \"((8vNYfҥK]Z!!!pvvׯ_Gtt4L$%%A_-TDiVBnn.Ǝ h,G޽ahh(k9w>s<}TcYHH|}}U9s&<<<pQ_^kyDT62JDDDDNP ,, X`AvލzXf:uЧO�cJ_{tqqqd>}Zg0uTM43$1yd4m&&&A.]Xx1u놆  Į] ݻ7Ο?_:*]||<.^GGG >ؼ$BPS%+jy~~�[nEDDm۶;w[FPP޽M6sXt)FʟcqMl߾ݺuÏ?q7oތ @ݺuoooۥ8:D  $%%(hq+&/h�@6mUFi]pP]Cرc֮]!C/;waaaXtZƌ{ 6�ڵk-ĉ1x`�>|0#11-[T3~x̟?P0 $"""5sY3ԴL�cˈ!@FF!ѦM 8մiT �aСV\Yl@3]jٳՖ5icƌ̙3fL6 �`hh۬BCC_رch߾=� &&6lZ0�Xr%<xP' ?xzVv^^[077WR:~xU4||| ɐR.\'OЮ];W �3g(ٳ7op-5n޼'NYO #!!z DfYMlUl(wqqqjVI4��}}}޽{Ů/�uպN:� 3T:|0P(бcG d8y$bbbFbUnC[= o$ ߧ<ڵk`pBWnŋ c/B]_x{¢*޺uKrew]RgΜ<AٳuoֺM2N;ADDDDM6ױjժb !memm �ZHNN.vݸ8$( xxxnf`bbSNZ ۿ?�w%jmHodmHII2T* Ie˖A__cƌu;{,:u7nTz#jgΜ ]722R1//'O� \ՠ1J/_… ahhC]\\3gΨ駟gmX~=79""֑H]F܊:t(Hr8z(aZCذa222кuk\v ۶mCϞ=iӦ"m޼9Zh}B__111HKKC=Jr�̙D,^ǎ?ݻM6ѣGXxj �;v,vލvڡ@rr28}bj囙a0`�ڷoN:HJJٳgAeTBHDDDD"IR{˗/cƌŖ-[0w\lذzzz˗aoo_rK߿?O|HOOdž 0jԨbkӦM裏}v|�ӧc˖-ڶ5:'"++ }lقw}v'|ѼyslܸV н{w#((v킧'6mڄ˗ RHuR;q<==qqgrdffbٲe +rHGbb"k*;[BHDDDDDtKWeH(DDDDD#HWHG1 $"""""Q tB""""""ŀHG1 $"""""Q tB""""""ŀHG1 $""""LӧtU,** 2 W骨dСCMWʈ!H&pHx{{/fϞ;wm_< xyya˫$ʪnb_:QkDDDD W{B`;v,{xx��v؁!C 77 r9;Sb֬Ytj׮VFHH!)S &&III,QE*""""kZ ;v,4h<>>{!ܹsSe!!!U{̙ѣG~zQٰ(U:B0cEonnnؽ{7իWbuA>}��ǎ+U=n߾Çv055֬YS:Q~}~6l.]oٲedXbZU `ffgϞ-kӦ LLLTpzz:d2BCC&&&hժ~RUpvv?ܺuK#ŋ1i$xyy^?,, 7nZgƍ5´iӴz` !Ux\x>|xy%I*uOBZ$݃7\ۣ]vy&>j]رcԩ>|={y8w֮]�t �?XUFll,� //�@.󃑑v^6mڠq6lqFK;v (($o߾hذ!tRU7[gggUh,[ h׮ bŊؾ};u!m۶I&S\O.~jb@HDnD୷Ck&DDTU� SށFjDtt4|嗸r ƍoV>zhmVC] R-۴iC"55$qprr¾}ٷoXU@B�ma6m*?D.]0o޼‡bذaP(jܹs1i$aݪ`L0jeݻ]v̙3dU m6m!�`hժUWB"v;w 8|o]3Vv_ �ptt,wQQQؿ?@tt4r9ڴiϱn:XXX ""Bm'1mqx{{�п,^IIIHJJB�;vDTTΜ9z uÑX̘1Z;vQ_gggL:U-sprr*Uؘdgg?T `„ Xt)݋ׯ �͛@AWX�5k*�kkkL6 %֓^=  = �/ JGDqyx.y-붬VjCOOuϟ?'OUVUr???ĉ��:t耤$€�DEE!66ocǎHKKw}G CZкukݵ:99ȑ#kIuӃ/~gB�Xv-p) ??_n'NڵktiWB"vB� o߱v5kdeSFFFˈSe,r9�hLeTN"ש[u9994ek߾}0vX M4Aǎ1o<ǣe˖HMME!iJ&S7 ,@zеkWԯ_&&&� Z] [[[xQǙ^} )_ ٳ!}mZCيB5J� FFۨu- V(x $$$ٳgC޽@5P޽{UXQUֺ߹s .[oL-un .8U;e@woփ6mׯ=+/^)))XֲeA�~e*ӕ:u\,Yr\jhjjw}j]IBqu!I*_ZZܹF04r<==Deڎ'Qx - |kCDDUA$,[ 3f'�8{,:uTw奯!C 77WcPdAӦM-[-ۼy3дiSw蔭~ś$IjA_@@�Ol߾vvvx+i 666ذa;Gzz::u�%Ç1bڻJAcL61sJ'2JDN ܻhܸkDDD"::CСC ???C.#99G9LM+dYf!66Grr2|||M6{ضm:WF``  ={iӦpn w$Ν;pssS{?cǎݻwѯ_rGqX +WD~~ Ǐ޽{Qn],[Lv8p ~#00r{)ݑAaƍضm|M|x9lق֭[kmUW[)%жm{DDz$9{˗<}�� �IDAT/cƌŖ-[0w\lذzzz˗aoo_rK@hh(Ο? 0n8nǎÇ~CoÇ1x`;vL|{$IifffZcQpt wƷ~ .`ԨQ8~ڤ�O?/ē'OdݻWUm믘>}: {ر}6nX}W$JN8OOO?~\/;ѫqc_?  + g"zEeffbٲe +rG"*Yi%>V/Q$ 0J1.UDTW6JDDDT3QS@ǎ~0 $j nt%"zZ+WtMB"vB�}:t(x:pfDTVgyy5]{7yk7 9XEDwĀ]BWWN !fDTO͚U5)K#h#D(ȍ׮tB"vBIk׀O˶Auo0aw^g-`D׫AȑU+-wl=!U;!�L=Qˌnܨxݨ5]Ӯ0aB։/8ҀG{~�0dpb)od<`Ѣof̀n݀P 3wr**_�NtU&"L n! Z_(hu)Ǐ= ͒&.j&U #XU E> -=_/hM-˗@X ]\Y[O )dHI_8~쭨ׯqqe[/;|瓈*B"v/nnm ^]|ޥK ~W> =yt s疼ј1+ӧɓUߖUeeӧo{8t`@ Kmo/"4�?F(/9?}GUo�Lz$BPtD" * EemXº]R~H@`#% B {fÝɤ~'0sf =@^߁f̀O?֮]r}db¦M@v2pN"g ϜsW>,�k?~\dgK?=V&%E~xt"+H`e 9�?/\ _>cH~A~ـ嗁ӧm'9XR<PBԩЭ2mV|н;?wWcz|ٞ` `DY^k;Wt _ˡ~s?7~t-g{.!n6 Xu/ʽE7l(~]15MZC>7nT<3UՒO=%gNu�e o 5ظѱso ex+O>CYz$fH@HDʕ 4lRRArfc(9UP�̚eo)Ø1r}PvvŮ�x] :f9cϪ)BrÁeWAmoR=l4wc%} k*ϑp{4 8{V|W}=d|7v[oɯOʾώ7.jFU=?^Y*Qז>C7 [ks32d`?T_cf̐_u5K N}@Ç庼^*~KN5a*yݏ?^vwwm[yirFu0j:-;?3[MɲQ} GDc $"C8PS EG˙g)~CrP9r$(_~)CHQqqr2h$&Vl=MYrV�lw9S?pj.]p>rYtP!~7j$̚,osŋ2H<o>2@'%gj 6@zWfwȲŋsߺ~/X ~E聰sg}]r;eQe->;ؿV�x9΋eigի2>0y|#`>β$9{ENA%Z#@\r:63wD H7h Isw/<Mۙ,3 pDr;ژ@NA7em.^p~Ad^cqfv݉bh9~sʔpֽ;Ю/HN^.֡pmr OowgAyi&'M%=9h4?=`é Xwr"ND`mZdՁ:y"Ma6:tݻwѭ["5h LD9+ Z%G 2>:^: g7@pߜ.GGߊ5 |1 |MZ55D aՍqh)4Xu !KR?@v_S );)Ɠؼ>oC}� 5RJ7�l�&tFḔq /"1+ΞsM?Cy Z4%Kq-+#дZ[k]'6a#r"z͎\:xP۳n<&LHMCvA6AJZ> Mi}GC~~.qXy 3/A6Ņ?Zb̠pwr`DJN f]EJn {v,v 2Lex< a=Sl9f_,;FK@rN2=Kc症|S>SL8{ŐnmT,)bc]jtEƽ0�ĉ\ 3?C<dtiv){"N_JB$ nNn(qFx7=tSa=9o?vֿ-2 8AkhQ4MC)|dgJZ*9 f!'S|mC=zgӀS8~.7'7˟KauCFu6" pK|4 #ێ,g2?b euEdžѡAd'gswE�|4APCC�y!+& iyi84dn<S� {^�ͺEbY/Lh M:\.VF 2p_O ik <W\YU/;6m8t|g>}:l1Z 70Ѝ_bG85$^toߎVGk$>gZ!;~0z6mqn} 7>~p28!>"rLrJacFe^<t�X?ԙ{AiҶO-U[^;^;#+K\M7$4BJAvBG�b%#5x7 ݃#:8^^2>\4&$� j20i$a!/-׬�Ƭ3A\J|xc@wkѳt_IpL$"5#qoBlEb^QN5#:?/ع^~YKB4=@ۆ!pwv+|| pb>V c#0 9p�;#5vEA3ջ1M|\f3 5 BGߣ;'Pzͼ[!C7r rϿǽÚЮA;[ox>3G�Gm?ڎRRsh>N"$3@48ltLpS&RsR OgOoV~ԧ)ŒKN;~xo ? umr rk7Fi? \fY}ޒ;mc̳>%dx-�{6Dg�4hmwfb+rqO:+(H+Qo<:Qg3 ^q:<\ʼ' ^>PM}qKhV|\}`flޛ}G!Œ[fב~:>a@@ -]`zcC<4>/>xwϻU %K;7`�WbѢEX~=bbb⮻”)Sа ̭ފu^^^h۶-ƍp+ȳΜ9-[bo*t-${֬Y1c`ٲe-Zo߾XjCa ݰ<(�KBn9ϭ)N]=%'prbv!Ő?@]69f8ycv f</rEA(v{ '{?[5Z% ČgD/z ם+m]"u$4Mo" WY`T_{wwd^Q Q"1#Q&$^#B*~g%r r- Ѳc$+\,<{,~!I!ĕEBlBB|i \hQsakixM<8)O\H 'F8J`Đo+ghX˞5K!Ҭ?99R%$rDv~0ͥb4!�NY]4+1M'NgKA{;@hCg߷~= !Djf~8y0Ms+޽,<oRf7 !v!-\k+~ٯE^36Nyn=wq-BSoo!l`(Bb y}'N5[cZys;�Ѯŏ8Qp[Y>@?޾]qǛf?[^b癝9{V(pHM|./O!.,~+WS/^(fϞ-.^hk0kE鯿 ;B斾OVs"m;1Qًmѿ2B\z)ܹv A-fo-;jΜ9bܹ?s>7w\q!^zB4Ѷm[1m4+~Z[ %.]dyA M#<by)S___i[D~~:sq**66VĖ;w-[)y M:$Ǹ1B7zWO y^c&5k8P>!\]ܿ `W~x!fbҟ;xP xy<jG5/6xxQݻ bpWe֦DG`su?IV`ߞ%Ksۻ3g kOq~wQxeG ́{o|W^xչ0ρharx8`'ijϖKlA?ǵHN.vw 1b1 ́!Ѡ:bDc s >;Yϙ&1k,93w4\NoM^}Bѣ vG b2�e~Og6 qdϟ߿k/5'U ^<Xx%c= O qMyy۵>Z6AB̞-$Ӆ7O~l!E|#~ǜ8!쥫'+22cB|s11@hMͅ`gϞ۷ '''!,YbǏ!C;wQ؄ѨQ#iG\\4M<Õ>Wuڽ{4MZ_j?=C3Nl*CDʕ2oĕw.kcۨ,I\9 uj&RsݺA^6ϑ lLYDfph!lͼO@ؾbmLۃf`-3Wu͛e'܃ʦ:-Z�˖r؁V�0aK�+VHJ.E_1L:"c “x||9K;b0>t|_?g Y,̫*&LnѧI�o~+v|bbaG@HK+d' h˫Gףxa HHkN^=? ;>ihDs1bbdad^>>)�do]opl4{H{䈼}˄Kdj�qAĄt ;/ǩkmN\ׯ;v pr o*I;myٿ_6} [#.%Z⒓- ԫ'; !˝[f711 0ԯ2͘>}:L&,XI&Y=Cظq#v4js�/9s`0`ǎq--ZܹsѲeK�%K`0,\v0 ;w."##1b`0=`BBBB&\xby֭[} ~~~{qԩ2 �p\ڴi �oooGEj,?tF___x{{c8{lbڴihݺ5<<<.]ǵ{󄄄W^Xlr Z+go×q?{c"^mz23eGM*>�uxW-CbR GpPV6+˸o}Ӥ%H9"#C =1dGLY`ϻ]poXzt)ŒcIl4:tiؼYvb#,,tmG{pw;{\;Vv\P~Ǫ nz l~~wa_@@f\v.-: k3[ r]W鿝p r]ne1f<i.ey^~Y;"BYӽ{W CNY�<]<n:t aCϺJ5/ :1]*~{-*z,]$� ߔ)�zpIG+?,;^""4MnSXҎ;&M`ʔ)v4 NNN|}>~2e BBBOc[1c\?9sXtڵۇ"//SN? "?(eժU;v,5kg}}ʕ+ѻwoMeؼy3|}}j{5k0rHG۶mxb}ػw/!{19r[- /FΝ1c L4 -ZK.z~!##{KcyDDUh <p~o&z5^}VMP,ɠ]=Z`kvD^Ĉ#J}~xd|߼  @:7 #q�\]K�VNlO:aL лw;Og?þЯY? dMgaV/ocIn˱`A<%7puлIop͉5Ą�Σ_|!Ox-ˁٞh xA?|cX¬~nqcC~mmX>6.EUG tv_EDreK9//`=_y?{7FE/uɟ@%&�� �IDATc?th>hP{VDN>8uZ*uLBN,4gyNp|,Mۮe"j !޽lSVTNHH40Z ۶mV,X�xl>3<VdXv-nm…xgO`Ϟ= .`Сe>֖-[0`Z,aðyf >_}&L`9~ԩ�b $''cxDFvvc/vmVC!)W4FG |uߖ%_zcEu `Ζ!<z(,1+ h\\G`^`hǮ^΄2i mw_a:KrզO,s)5")W,W4|Pa` i6(H2xܤ}~}{߇Ya ʒaCY.ڧI30r_ď?$@׮Ɔ M 3�= '=VӽrIJÿъB@ܓ/&FYZrl7M\@\o *0;VzCV9سcbX_?J�OkH h-hfK=@H2p pn5p)Asੵlj2+!!A@7)XiضmpVZTr-V'm6mZ08vZ0�~{0�O=.\[ܹshf"e=&LA@Ca/`ҤIqK 6.T}HǧǣW#8rԼ5Sѡz!2!,1j(4l߬WC7eB!Z.~v) 8lX..fǒ%X/` hr�w)g(֯3rrTlݝzm ajn*DcÎrEꛄ6a >%<wX瞪+qc'5|$sU1,0Дǧx.#k2d0N︣粦eKe6ޣ r^|}#2X'%c;y_xI_eѺ��/ụ�4{F�ĉ݊7ªmڴqsh,{X]JNWԘ *3^bgo<=zMڡC} ,}x饗Obƍ:t(oT�h{->n D\‹]v#Ҿ=^HͿ3)gW6pjΦK~q܃=ع%]a/`Q9h<^|XsYiŋs'0}c+bB x;3' RT`ǎHVٶMո .Cdž] !X|,eym,9#ree||)gʔ MN<<*wZ3 岀\3٦ v%g?G�/%,̱cceKFu�:,؟5_nKЯi?tlXx]ƯѳhtkSˏ?~%'!\ɨQ^۷o@[ʡQy޵=G~իW6}][nk֬"##1glذR۴iS̜9T)P5T0r%acP<=8Y%G ,0 G߾B3`|Ym*Q`.yf} <,{챲PAy)UTF]ο3tRuƓOʆ{A{m6xlBx{xSNwavz= l�ҥz>>ꮵAEΗ/Ded47Wnv^@i2U8Pي-/_婧O.Y^V#, KvC3.Cqع>GDa@P;.@b4xˍ�e92TN ˘rol_*V*z˗/[]ob-ԠA�(ᳺo˖-d‘#Gyfƌ3G}u8`jv%"d|z|@p AH�kĎe 6c@G\ajx�X?`I<=lhl'ssQqTaa˱h^9x@R] a^7Ӥe_Cx*X8VX>fdȏ)չ&3UM_=mKYNΚ92~ eTU+ٴ8 %ŧw?֞{''sg0ܶ Bvpy|7vBI/;5Lr۷d2a4T7Sk1*3ZFݺu /KDK^'xHR%^5CCCB/?LfZf<LD?�85(NX%m8:á%`~})HYfѲ`u93:5@\ϯ\ J;wE#NFrv2.\΄6|m԰: ,pWW@-K aeg9+79/.BL pc@:#G aU,n'w~M7j98g(̨E UWse|>y`#;v wq%X �V [nźu' 66FӦM<GѤIb:t2V}FJmxd|3zI1danA.j|04'sY;[߉[\={ϐ-VanA.\<[އ[ժ$<(i}1YiOg"޹֬} a-.N ٫ʮ!LO/ޜE9ؽOvX1Bv-ZnlT[]Vl\O<Qz~n % m{3LhϼQQ�w s8VC=zàAT8p�6z]vD6m`41zhtܹ5jƎcǢUV† E9|C믿Ʊcб߹o矣hٲ%|}}qiDDD >lٳSTkqaBlI^k*-7L eŊf=~{8p\͛}, ̭*"w,Z.Yd%@`ѿWEhujժp0+ 8tH¡Cŋ -(�-o�8t ͲKM@Z{:܃oy݂L8GGfi%<WjV*#Gӧ+WtRF̛7O.͑V}w1b6l؀_gÇ7c…ؿ?ƍ}m۶?Ɣ)S��?ǯ7&N~X|9,X(L8(c\\"##qTptZMv� 403Qϵn?F# $ƹsмy 'l ^.=z�VHL9CXnaan஻? 9-Śb5:GȲH*aZZpx#c~r܃|ԩ20__ ۋ�5J!֐[EP~.rXqqqW^yCoӧ+i٘={cZj5kXܭjiKY#0:f郰0;wn�8ydL<]HHHի\[l|�߇jr>%֯7BgNnXC](p=h݂ghfѽO/hоmeڵKoӾ�FP@52_IETu (U+.�rVL,.]+-Y"w0d7,�g_seni]sNPz7˗��'`ر5ǡڋg_ vPG|WtRX ;9 ݂­U@({a>j{DGAlƺ@d+w?BÆ5{m֔ ..}+Z Qialӧp6S';`)ڶ.*_/+¯h0ݘFc޼y5})�E!%%\O7B"RJZӀrS#40CZU-O'Fbf"~{-l)g/m#WGMx�=1>^$&Vp|j܃08rٚ!tr�(}k'}dhQ?,K̩^;緦'JN+CB�@CZ:gUu}EmٲGV̙3655NU*/x.4H5 ?^W3k�r\:׾/Do `̖B:kWHIjc G巜�lB/P*댈߳,L.K_{)V{e[O,aEh�Q˿7ɓ'd2aҤI5})Deb $"J5aTס 'ONUIhq ߃ cG8DöRz=C@8lN/LLkc lN9R5P/ -Y2ZE:Ѳ%r,-IMi*wʲ6Cx劬tQs5Dd !)U4ƧתB�[Wݹ�sn<E@Ynu\ (J/'iB l6BggYUX2ZF6Cx#hJ׵:nVfϞ5kնHZ2�4h�|  Tu>h "ؕcvrQ20Z>,ż!PX*f6n@7)Y.zW忳AEY2Z#!)Z{\VInNnh2bl%�7$D6(Y6-zUu ;&&rklazzBod(l,SLM(k? 계K4RՆfrT$&amYC_VenDQ`L ^1�ڡY_G-g*9B@L,?LL†Z`XXLQU[M�7 aϞr^GyV5dMg*Yy[eߴ!iDJJ �y*B"YY5ltS羽{3q)q44h}{^2ӵ;zv i`hfM~|||ÇWL[@x挜D?g !@Tu.U9�"[1I±cн;E D_ u``v#ǏWߵެBCehTT~~@&Pe�T2 Ԏ1+VDxx8ׯCO1L@lU� ;g~>$$TdD`6(:u ǏKH)=&ģk=xmf AH[,�}W6cCrsϙ6+/,LW\>>2hnڢw܉˗Wc_ 6f3o_i2+a8ic"1~x Dޓ!T{:i@l￀uLlx=Z#df ,pSSb#F[nڤcǎر#ҐUe�̙}7SWͅi`h-@HDJ- ;k~U̙r嗁m X!7~%�OUV2@Xq>>>2mغU)i7*B"0Rz V>kbgػ&C{(|v%ٵ?VP9Cx#!+6yyIUsNQMeB"Rp E{`o2_&uAT~Ew@(,I49CX5m*KE`Р9ܘ]F6B"RJI ^ud48ظP%iUwMuЬ‚32m ( Je 40M܇U:TF7tht Z ,A=KFk=Xu[mX!Dd!)%�oac*q@Pס8CX!UwNd,UwR"d* !ռk<�ʿ3>@*k6B"Rl%6jTCuR6y5}j yy,5 v%"H)9CzN bt!@˿s.B"KFY.JJB}:N Dqudٶo+ !$"H) KxM_ Qis8CHDv0RB�pΆ/N@Xp "oR hU29DF#;5 ";H)!�h Dٙ3u`Q"g /N+aB"#2"Rl3D*y{@ΒѺ3Dd!)X2J>C:G8CHD6dbSBѠ@HD60R2,%R>,cn;AD1Rl*CT3||AM aæ2Dd!)%g08CHŒѺMe6EODJdfȏ99 u !@HDJ Q!5ug&B"RJC@HZ@º]F6B"RʲMeb Ä!e㈌*2B"X2Zwil*CDv0Rl*CT3@5 Dd!)Ŧ2D5hd kelc $"B!$R`(%dhݢ1RMe8CHӳfvlc $"X2JTs||�wwh+!8CHD1R% D\.]FY@HDJ�gjM2JD1Rl*CTs(Q"ͩ/ gkϯ 43Dd!)7B"~[/ۦ:3Dd!)rH='_'iDdR!$"R%Dd!)U1=_~TРA uR܇H5m D!$"RK2u DB"қH M()ō鉈Tc(@HDJdH- ec $"!j\CHD1RvH-v%"{H)K 4凈H !)e6A gX2JDv0R끐MeTDd!)e!$"RIc(@HDJ 8CHD fm':B"RdƗ""5l㈌ !Z,%"{H)B!!$"H)6!"R= DB�-R&T3DDdlc fѣ OOOtCvvv㢣qw4ij誉A�krSM_ѣ߿?{ٳqA^�p 8xGEdd$k+!:\CHDqnq hٲeúuСC�ԩSa6"55[ol>|M4� C ŋcATeH5n;A7G8V#www�@Æ ިQ#F��V\#U�� �IDATGZ �~h۶-~guL�.t3qt|M㈬= Ĕ)Sp??>S<3pwwG||<\=zϞ=qrc2 JMđ5KFQpp0كÇk׮_y��@PPPڵk:Bi)f` #k*jteu]�/Xv-|M'tCruu-u777�@vv@Ϣ~n0a&LPU_ QaS""4h�R-tR,]m6wd|M@X͛x 88�0ff⋘0aeZ;77srr�̩?ݺu'vH-RmfmСC޽_UuL޽]vF,DEEYJEѢrQrPb4凈H By82ሬd2Y� иqc/u\dd$ë:T2 YB""5-!_S0VnݺСC8ydۗ.] ш.]��ƍk… clق'O{UzDՍkb(L_㸆=Xr% z ~~~Xv-6l؀{ 5�KX|93f ==tGy %`�gf@Xt۷cx-[⭷ /`9I&رc{9̚5 9r$>Me !L_Y^~2 ņ \Q:YNDm'&)m'bS"bS""4h7㈈Jb $"fB""a $"BnLODKFȈH)nLOD1u DeB!,%"H)6!"RKDd!)ev DD*p !@HDJ凈Hv%"{8"#"TH-Y@HD1R,%"RK8CHD1R!$"RC!$"[H)3gbQ" 2JDpDFDJYdH v%"{H)}P’Q""U4@c $"H)3gb(@HDJ nLODMRY2JDgB"Rm'B"RB"t !"2JD1Rl*CD!$"{8"#"TH-= D>DDJɊ B"bS""X2JD0Rl*CD иY@HDJkTH !$"{8"#",ӳdH =N5}DTdH-=!$")@HD0RܘH-ƒQ"Rʲ1=KF4 2JD-z"Rʲ%DDJ[u Decz)5Dd!)Ŧ2DDjih Dd!)efS""!)%TH)!Y@HDJY2JD= D(gkY@HDJ ZTlc $"͑TH Me6ȈH)CHD= DKF>Dd!)Ŧ2DDjiDd!)e6scz""p DdGdDT%DDj.vc $")e0p !@HDJYrH CHD0R!$"RDd!) PC(ȈH)`S""=NDd!)}2QQ D!g_oY2JD0R!$"RKe(Y@HDJ%Kl*CD=R܇H-K(g B"Rq` $"8CHD^B"bS""5va $"0aH= D!d $"RN= DY)čB"RJ2DD 8CHDv0Rr@—""U k63QiRf)TeJc $") g2s "*bQ"".,%"kH)厁H%Dd!)%򥇈H} 3DdGeDe`(@HDJ pB"" m'X2JDV0R\CHDP0 Divlc $"TH-!$"{8*#"TH%v%"{H)!TH%CHD0R\CHDMeB"RLp !Bm'X2JDVpTFDJ!$"ReT(@HDJqcz"" v%"H1!$"RN= D.Dd!)%`_zT10R\CHD= D/QӸ!@HDJ !�@HD^2Z`DT!)%eH)v%"{H)34)ÒQ"2"RMeTbQ"P3}B"RNe4KFB"RLp !B|Ħ2DdGeD,%"R( H)5Dd!)% ,""~2JD0R2JD!$"{H16!"RȦ2DdGeDk2hvlc $"X2JD.Dd!).DD*q !@HDJqH-v%"{H)3 |!"R=b!$"RI2jfQ"\CHD.Dd!)% ,KDDTa $"Ÿ1=JNQiRfp !:l*CD0R\CHD D!JF|5(Y@HDJ ZgB"RMeT2j5kʈH)6!"R3Dd!)Ŧ2DDj vlc $"T2Tlc $"TH-n;AD0bf6!"R=R\CHD3Dd !)&.DDN05 De` $"4_z1!dQ"2"RJB""ea $"ŸH% De2 B"*c $"R.Dd!)&i|!"RE!d(YQ)%43g2m'4B"RĦ2Dd!)Ŧ2DDjY0 D!JzU5 Dܘ/=DDdᨌ8CHDQfB"*cS""B!$"kH1?{weu<aI VE]A,*((V(.ȷKj -u)q+ UBqI& L4sLޯL&!|}�! ��22 C�΄  �$*�LY@ c&n5� C`W�`z�p+/ !�c(�L@@$!��p&2 2�NŨC% !hB�n!�-; c!�B�B B�p) P�i�+T 2�#Q�p! D ]2 �.q]!p !�8v)�"8C�܋�R8c+ �Ve�IR!�8v@B�$ZFC�n !HB�0T�|B 3 !{1�2�ćʰ�\B 3h�L@ ,9眣"թSGmڴу>?Xgy UTT.L_+s@nd}}W^QnԾ}{ 6Luղe˴jժcV\N:A뮻qFw}ZxΝ5kz�U'>T&B�2ܑ#fw}.Lݺus=qwyl٢ E;szկ_?W dUb!Ce�-@t}̱*ˢ뫯w!Iڼyb _'OV׮]aPN?tq8ql(B�p)P ÔQL0fΜz/БGBᄎkTRR"IZj֮];.;t蠅 l k�b rD&kT0.];v{ҥL+R<+I*..$5o<7ouiNȖP*�{2Y_rCE6m75j${ڶmFnM[l$ծ];%I[l`A~I[{ P%B!�8ƔQ&L &$ݶaÆd}}aes 0 $)%[Gֻᆱ:J"K[nMztFvU%Ye!)d �ebUX`ڷoLaUE$iӦI7iD&o-XEEE;P� !rC&kT0bV\tի%I7~ƍk޼y)?w\m6 8P�#0!Ce2Y_rYtJx≤qլYSz$Gz~_{5-]T={tv@1T�| L{m۶+OjǎԩСCլY3IСC5i$viqF1B{,ӒSBk"7dFY#SO=^-[ԨQt&ӢE 曺4dծ][]vAcT5 dFYVF 6LÆ Zjӧ;*D({ !rHkd-�$ZFC!�E@4!�g'&B 3L�~T 3s*�c'�"p&21*�8C�<1L@�!3*�Q!U�g2 �N D Lb c SFD pƞCB�pΰ@4!�gʎ�\ C Ve� �p !hB�0T�B !�g1!hB�+B�pphB�aCe�c'� 3}ws5ZFD#p&]s)� ptg=�B��I)*�!p&f@0� %*�"*LBB�pC L| -�Z��IL%S3 !TB�䱇�e@4Ve�)*C�b!t�q!�x±�8P�# �i8P�#P2 3Q�kLU�gg`Q!�H@/L@B�C L|!B�p !hB�2T� @$Ve�)`z�$ ��a �2 !�g �<a hB�$*!�HU�gb1 !�B��q!�xB(hB�ΰ�R!@=B�p) �i8ya^K�2 Ve�)5ik @C(�xA5�#p&P�Q�8c8v�`(t�C�.1e@:$-_\�r-� -�U@?Y]tQmW\q;0nZ۷W_}P�#`(4U |դI3fИ1cԿ=CZ|G�{ �R}.}jժU'e˖z֬YczB '[TS*yWԥKÃ:H>. CeB�cTDV?\SL1F3fЪUԥKVR=^!h�?€c'�DV-7t.b5lP6mG__um@ 8v@j/"饗^R t5רf͚u֩AK=_%bL�/)[g�@qsܹs6lNYZuwAP�r~UֱcG5o\W^y&O7$**C�\ * -u]e˖%ZF'|j%2G �R@ *a6m4d[ZvƎ-Z{QVt衇j>}JJJ|_. �hNׯ^zi̘1ZffϞK.Dgg zG_\ 0e�Q�QU ,/ C{OWC=| 2DG}@Ή!`z�p*P #�*秌fiӦ۷;vo}I@`z�öS!ZMpBM0!ӧSNQFIjԨƍD 0e�ܲB!T*r-?|}g2nUȢB;�B�ѪU \hN:cƌQZ`Ν={,2e�b(l۶M7o}YQ ԨQ/:wh=3tR_Az�BCd`„ n>|ԩ{ڴiˎj*k֬>#IRqqϟ_7mڤ@2 �~ !SFy߬Ytm3_3f+zjhDjժ;/q￯C9=@F>S]~剏ǏMjʔ)YbLUVjUգG3Fk׮3<f͚I&MJZ+T-�2SRRǯt颚5kJ>h}./+UPƍK{ʕ+UNWTeV�;�2ӲeK꫺ꪫ{iٲeI-_~֭ ^ZWs̉/ C-YDw|U@*C(�0TkM4I{:w_]vM?k,nVjy}i_|~iwT3 �?BZF 8PG!ݻW_>#IoT\\>}xʪUZFwX/Ys i2ԯ_?/"͟?eW©Sjԩ裏>3g<o̙3աCחT �?R@&~m=SZ|D(peّ?ĉ9s$ TNg?<2j9ryjРAcr)СC5tPIvp?s}ނs!2sꤓNҋ/}8󁰼XV 'ZF�2yf]r%& Jl(�b �/h2sꩧjž/éa*//O۶mK8 ôyj wq�Cd⡇Ҍ34b[8-Æ S7lذ~ {*�~ xﯛoYC Q~~Ю[ 1FA|U'w1�{y�Bf)�^wqZhG%̵uLNB�{ZF=z>lM:5QuoYW_}裏VAAgjJ֗_~f*�^0T̶mԵkjj?CiF#GTճgO]pWF6m>}@Ί� �2qYg}NU*--՜9sԡCΝ.]h?W,PZF@L21|pKotUW<aÆ.;U ;wn֔0(I;vԠAtwz2z` �a;3uQEiё @./+U lܸ ޟ&M8"z1HB�p)@f1u*4H>͛'ݷzjՠA<]0^H`OǔQ 3񘺜B~޽?pIҒ%K4uTz衉)�^LL�>{=�� �IDATD@xM7o)-^X7xnl^Pmq!�Q�t \|K�PH'a˖-}_rSFS-�@(Iݺut5^�[,F�| �| |饗Tvm5kLv;4*= �?; U_VRFԧO+ �n0T�oxS!*ߦ_b^u?߮8@gq|I}w/V{S!N tꩧGUqq&O jjҤ?|=sںuKrB�#B ժUK{&N/RG֚5kԫW/19 !�aV0DN *??_tr115ZFSmaiiO/\M4Q޽uV=cꫯteD !�xi�2KǏפI7N]wݥ /P5}y@b"B�p-ުod ISN9Eҥz-[*XB+Vv9Jz0e@eM2ESLc PiiSm:` & O>�D(�@99 ߗ�`'4�\+�ʣw 30e�|c(4�a�L�8312�-�ae)@ch�D(@2!�g8v�H!$#pȰ�<WK �*`e-�A *�*"pQ�#HT9v@2!�g2 �~ 35H@�p-1T@ +3�2 �~2 !�gbL�^!@!*�N�H@C�9v@B� /;�Z8�h�0^!$HF  -�Ce�C  N�@#*�H@c*�>ď`(Xp !�R!3!�?C !�g2 �~@:B��sT 31D(�9�!p=�C|(-�*"p)�G^h_{wrdB�0T�e@:B��9�aeZF�3U@�H@!*�C9� pp�x%_)@B��Ε �XpQ�2�!p)�Ce�C  SF�H@[!e�\`z�2*C�\ C*�8D(�8v)�* p2�GP�i8d�;!3L�~ptXpư�)e �b!�@@:B�0T�wNe!�e�H qdBa6mڤ3Taate믿p@v0T�25v NV\;SuIrJuI 4]wݥ7ŋ5w\լYUUc'�"Wj}u'jǎ);S[l… բE IRǎչsg=ׯK{<"Gj}л[oɓ'kԨQ2&J2ydu5%OG'\ KC�>TvFfjׯZnrUvZwq)uA .tq@�ssC\52G˨<VX_=bIRSk޼֭[۷9 ƻw�A^`ߌB\52G ̲oFÆ ӰaTTT-[Hj׮r_~~~1AT~z޽{KN�eSF9v{ &h„ Imذa#f~;5jHLIRIII}[nMzLQF]v?Jc �A(TQE }i?'52G ̢KӨQr[nնm矫^zVxhy***]9p!�xG Dt}ݠAWwaeEVR,ӵ^C9$ܹsd|۵qƚ7o^s̝;Wm۶p@`z�)9*YԦM=IC41~M6O=PIR=3hʕ'^{5-]Tr@c$4�T*FfYTTTs=7#GJ9mCդItiƍ5b{۷k2�GH92kd- HhBo=P 2DwvW_}Ce�.2\FfzoDުU+M>�.2 �>ħƨ"7[_cp(�p.iP+3�ΰ�`!t�e�|`(t�b �9�!pp0=�xP6e@ +3�1ZF02ʱ�8ch�/=�8D �2 !�2 �>p!t�1ALa�p4Xp!3 �?j%-�*"p=�CYc'�$#p !�P�8P�#q�2Ce�Cy@#HF N`mK��w{iP3FF{9H�bL;A B�)�b �!P3v!�\ CI 2 ;AL!/;�\B9�*be!*�}e@*!�w*�^ a(ñ�* p0T�e@:B�Q!�8v@*!�w*�P!�? @�?Q��b �xcB*�RC�<  �P�Q�Xp®A !�xB��d[FC�pTB�N+!�O N�HE 1^v�ZFbe B*�E`B1e@2!�'h�C  !Ce�ZF"p !�xP�� ^v�*�R2DB�@!�'h� Ce�"p"1T@�pTB�N$*L�? -�R8P�+SFbe ZF7!TB�N[F2 �2  !{@ Dba�(e@ Vf�$ZF@1ñ�8A(�xf* sCe�D pc'�7*�R8L�P!�'b1a �P!@wi�OL(ÔQ�8A�|B 1*�-�8QjOg �xP�Xp"Q� !(B�N�gT"p2�B e-�Bqd�8*C(�B(TB�N0T�b (B�N!�xF@*!�'JK2 �> $*�* pp0=�E(T�8A(�Q�)�CH(�pB�N0e� ZF"p"SFD p"c �xeH o; ;ʄ!�|8v@!�' {@b)�8oc!�xB(T�8*C�e@!�'*�~q!(B�Np!�F(TB�N*�-�8Q?>e�o@+3�N!yC�^ eı�8?=�-�8Q�2�R8a2 �^Q!@V^v�2�"2D=�}%HF Db!SF2 L�~A�R8Q6e�!`(�8Q9TQ�)�R8�N�B _L@ _TD!p"~0=Ce�@!SF`e ��h@ ZF/ZFD!p)�Ce�D!p"^!B� !(B�Ng �@Vf�0!�ϨHE _Bc'�T@ N�_A@@*!�'2 �~@!�'JmS y� _TD!p)�B Di@�~Q!@{0e��'mJ!�?C  �2 1�WTD!p !�F @P2�-�2B�+ B)�* p"0=�B Ce�/�B -�W"p">T&2�-�2e�<B =v �0@ 6=�E2 ��HL�>0e@Vf�0W-�"8CH(�xQ�Q�B�~C  !�x�8P�=�R2D ZFP; _L@Ce�+!@D(B�" �R81T�|B�QXp2�{D!p2�WP@ �_Bȱ�8? !� @ cd� Ce�D!p"F �* ]i!�2 _HE DK�$H FT'B =@�p(B�Nc8�<b!(B�N2 �~1e@!�'b&&^r� C�~ٶ}!dB�N0T� C) ��` �k0(B�NB�wl� _@>B�l޼y0`ZnuꠃR^tҔ~:3UXX"]ve=\5P8v�R!ެ2kkd usfϞ={cUqqz!kNZn-IZr:u 讻ƍu}iŚ;wj֬o8!� !~9a <X:tPe^zM65vXIҝwީ-[h…jѢ$cǎܹ~iUc'�pgcX,f^+ӵ52Ap I?taUVOM<Y]vMAI:uGhĉή�U|ai'tm̱:/R5$ZJk׮q:h…/rTx 9C `ܸqZzz%I*..$5o<͛7׺u}vT5_a<-֨:'跿N<D]~咤-[Hj׮c 4hׯt[޽ջw謁tGB�~ߔB=Ʉ 4a„6lؐGQ9B֬Y>[ 4s=h((($|֭[eԨQj׮]:C�~ŧ*b,X@۷[[rlذA]tw}~[͚5KoW\\"^/"jm!:uVuM˖-̙3uQG%ݿqƚ7o^Ν;Wm۶uu@c$޹�o)ǔQvFv}W^3g&M?>q=zЋ/+W&n{״tRYcd$C �_C\Beִiԭ[7}zgK$ICդItiƍ5b{۷KSF'"dFYh"AiӦiڴiIAmѢ|Mp 2dj׮]g rm)�|a!rAkkd@eoFƏmժOūCe/)T7z�Np�CH P �BZFD p�O; F1�0T@Vg�0;�^Ňʔ!p2�S|B!�'a �2J PVҽJRRZRa4oc!(B�N𒓹'N<Q~iHF }_X !PN �z`JX7bt9ӥuثŏ�P8Ah%L&KgQvI'IgK;v.�{5B ah^x})䓥Mŋ]{D!pQI/~4gNǬ[g[CuKpw5;}م@  4fHR׮ɷP>B�XaDz]>,B� +~a,&%5mj|aMڷ/NBs�ʛ5k|SFD!pΘ!?҄ 6=@cmŠq',Ze�ߥ?}v$.Oŧ1e@!�'+=9Ҷ|ztҳJk$?+;jO綾.WbGJ7J}X|(-�#pbChLt;Hg%|UH*]WK5k.$MZڶ~Fb!7HW]e{-[H J\#ի˶QZFDWg�r^qOݶz ,r u۷Wy'&z _J_˦_oՆtg.]smBm)H&͜; {P "woOiJ/a>(-]ZkcqI~+ttRf_H^;d[q\/~!likVuz6&/4qR.wbKgKuHmcmfϖ6o|hȔQ��+7=|w%gKK'?ÇEԫR|>'wa1}tFćH{6�^piҤI1EO~"=kIw*m /׵իmuvgRRg7tP!@=~kYgI_l+]]$gCNmٖa?oK;K' I >GIK͛:;LjO%"r3kt6> ɿ_ۏ^Imk>s5n_,pcnJKeKooWpi֪zg͡Nu}I0oPR( �P=Ce^~N;Vϊ7nz~Hoņȉϗ*#loV~b闿^RS?*WHRn3Wm"/u7ζ/7"5wg,ۊXÆMŋm@V~Si}k; Utp:̙WQU3A`g}c'b;=xu Ce .]2{5H:*୷[n l`LsαF;ʆ {}4}IڪMϞv/ԩn1 W]eaIIb1G.Ҙ1n3یoF} >P`+g˓Oދ}4p}>}Oۣf,c::GK_pZFD!pdn{Yge5;Ոnlz1([;OϷCpmsi [9ݝ<F9^wX1v =joUy=S'ǎg??nQ2i?qGvm4 dEl%n άY< C{R�mkMRRbYzvn@aԪ#e͞-~w7R2�8GW_~ٶu=q�� �IDAT}As;EllWφquJJl?Zskִu ==؊!BcJgidj:FOd:JzqK._g{M}*Vn9yoKSn CcQ.լiE_xs);e=,uk[\lį&y?q\۶k,^\vیB7ng(5 m0JZC*�"8GyezڕܶmП}V{vOےy7ߴM?vlsƍ6LgHa^ ۶9!:٨.Κe>o=[oa/l<ou㍶o?foK4??o?i4[]R==u[?O:ɶ|Μ)mGVl+6:q}( VEK /_oѢ@(I?Q�Q�0:Tf/v(5kz_]6y]`|M7ٶΟ\ol�۾rs~m�ռtv?9KKs>\~m6L*,5mjK]xuܷ$,۵6\vtA7Km<R]~m|뭪lپ._OS{*x衶s|{vevX͹Νv_ϟ/}tY ܲ+W_--_ιK=g tԬ=~ǎ@ؤ}m 9e4ƔQ�0e?Bggëp@=EZ0~|ٞm{ܬYv!y="S^vgW}vA;v /`˶l~ԭ+oorpwt%/^ilVrmd|Wv_aW_mWG?ٶUVuTuG o[|3z/jz@SOĿ%y '3fLrbVW)Su6\u`+җ\by}\issR 1v짟VoN2Yǝt]xQ[̄1MΝm{d_oOߣ #[i`5|#̟?�d_ޱ~11_|[oӨ11Gm̂ٹ}i*;ϝmoi?om̲esbej}̞stcn5{o1yyu1͛VF1?1Cڿ9wc61˜5ju:t0G-3fZcf29Dcm+'ƴhag9۶3w1ԭk̦M?ڪ֭ƴo_ǩ<1\`LӦԪeCӦNgcv0 O?_f#<9s5*xvB2c_<ap// &g >3G}5{YӘSOmwe\?FI13r1=zSP`?9})-WCٰ!1_|aLڙ?7Ș3ό7Lj'njc^|ј4c$*ڱ>І4ibL~;2Ř2& "nݲ@ڴ1+V$N,fL^ԫg? lُ{|1O>i?9_czʾC dߺ՘-m3gk?yg~}9HcƎ9Ӻu=3z>cƿo2̜su@{F5zǵӲ1JPQ]_V)) g޼3[a7.5lfoVjղ_1b̭喲*ڜ4AlXSRbsڽŇӬ8^|ceۊs,Nl*m?\=޲Aᦛ~秳xIv1ӦU9v찟wYP2栃5mnCYg)a$;e1ǗZ{k5sw~|cv=pc{,u'*w=';7 yw+|cq"eޤрsLgqeqKְ~7_2c׿6wk(t`۶Eۏ9>QؠsfZzk۷s .T-c.,mgmF2_wI}ޕ74NcN;V36sgf޿fm\Иbr'O?ߣmCJ3d1cذ)Ӯlߧ>W.W>̶Z-Z}2{Ɯ{>֬iCO3l}& nRk1^K}2O̘]cp// &EwMc2zgla&Kj٣1U_dOfs6V|Ͷ%-/϶O?իx  Z}]Ϝ9_-͑cI˗ߥGm7Vwm=kä1>}lU˘O>O;Ͷfnor7gYҘQTɘ ӆ5>χ&[<>}Vp5[LI~,٪UOTtv{{;uǍ >H:4mt=K(Owf2:&v!ia7dϯRϵk0S@҄ 0S7M7.?N&NK5޹X[pvRi<=z؉mڔ׺=oe~I=}hݢ#ON[w䉱U¤Q!@z?+5vM= bK+A{4ða\Z{&Zǎjhaat- :;57�beE##ڴ׆wQ u;{CHb.j8< kMn kp~�3�0)P>.8EU7z-g-^l+ZZУ5%?}[?, VFn왅_*40q0=B�8b :0P}=~�iP{X:rG@o5B�8adD. kLz9WlϷ[F@p1T@�U/U��bƍҊB�ȆuSD p)0ں \@B�8RaGٶwI�aȱ�R8r0G1� g2 CB�DT?�2 &@�ٳ)!P#*7K}F lCH(TB�N$!$c�-L!!�GʝCGϣv5�* CB�N-}$p�z8v4Ʊ�8Rn e� "ħQ!P@=˖I� խ+m.mۖ=�8Retz�@.[Ym)�8T!\^w_�,*R!@;9B�Ȟ@0e@!�'Lsw{A�"a<1e@9B�l]~H�'~OIC #;[F7lR!P�Pb B�P�"p#)BZF|) *`�02i*�}A`Q-B�8etz@U@n+,L*�"8bB�}*yc' N�(C F؉ 0 �.Tle B�NjP*�}!!�GU �}i*!PAsi쫸0@ &^!e�ܨ0e=�8B�b!  �g;!�P@ SBH  � pĨRi6ZFZFd@pk*�}u7m$e($B�Tw碄@�?wV @ HB F`Tw@H(�d_ݺrm2B�I�02*,e� SFC Q]!�E@2!�Gn-X}1�Ҵ@yB�n1 F�'>Tfr7R!U�7:%% �W�FFune �o;2*!4"(C Q%B�p%l !] p#Y!e�I bc'�!p#-�Vݺ)Ce(@}�Va!{#s!B�nTsT@ DR 0e@B�Nfg -�-�v@}sN�),L2ʱ�* p֝HS!�w"2 <!�'-ٹ�B�DBZFC -�AB*�!:ch�/֕miQ*�!ȺX̶C�@Q3Q%$HF uHH[ }9�P}?˜2 @#/1`ߗ�K HB uIB�;a�* ȺX̨V=j{c̐13f^RTKR ݄$ES9TE9ũR"G%!sKdHdSK s1{Xe g~=ymgkgC�H!pE vNc!eC�+£G[@!�WB�nt߆C�NK>m=�\!gB�P鮻>rr@B�nw6ې. �6lL�N�pA vB�keĐQ�3+K535!J yrP�.�Μ<!I2�}J?keIB�QɓΖnEz9#}bI2B!�),Lw:%iRӦRrK,!*^bO駥M\M"^-Զegʈ7cԥvC>}t׮i׮/ׅZ@JM ч{4stҒ%. |_,^,ZU95mkx+(I۷K?/=mѫQC^r1Fz ~}_v];d@�ӷZRcʷٳ7K]_ӽ'H{@t=? vtic` ).N<Xrkk[~[饗pxQ#mOb|'O'J)m*ef}?m}W_̑N^yEu Thm�P=tC]L)~3fFݽ{?tOΝG>ע!N+RϞRt4`RTtf;vH+uhZH4}7cbgZ7/ܩlO҂ܹҤIe݉zJ1;_+?K'OJǏKG!}'Ubkx'vj?8}{{^Nr\oH-Z]C5@-P*�O__%ƻxJQgwW9=+l][7;hihmOXC] 魷o ))ң$5n,EFV*+m}54#Gk'8!?|{TZ<h; h|>+99H2ofL\y1'Nӫ1W_m9cL:N6ˌo0c.ĘgYY<=^P1mv1ݻãӱ1j}ϠA|1Ǐ3p1]d̮]=ۘYԘO?5f6{3Ƙ y]/6&))S1Ӧ/;{~7槟̏{}��ja\eL~ |U;$$/'vJ+ovu\N1s-ƴkg&۷YYtfLtd}˖`sPŽ&c:tȯ͘a˻hQQ]ںdWzus@sDEm۹븨PBVifLJ]z37m2/)g̨QLdLz]6g=Ν~1PZ~%\{ӹ==tnaرdfnTbw.B4mjLEw>NA,9vk1Nًܹ|1'OeV8ԫgZ>Ә-[Yؘ3fL{щ1c?ޘ5l.;wIżw�y>js?PcvYAo/dc+W6f{l}7J0ޠ1?|&$]4 6fVmt^ڮ]rrlgdc [-[]Wy G:m`gӧ۠g1m~0&:ژfE aEX-3G%Skr:i\+WdLÆ< sؓbN|,:x1 �aa5ճ[ԕi[mԯoO*rryE{cNn|^}ٸoX{b<٘k1eK<1Pyw t%c}^elKWnc:s0{5}ݶc~5槟K![!ryDE3thzh_.-�p#1mAAvToQ"kNfddok6$%1!!5eJט,c.ͮ]Lh̝w߷-K95qsVuOvf6 qF֪eC]ϪL{ͽ :jWuNYeg.?q–mTXZm?r$Yz1lGz~}3Ƙg5Kȵ\WڷϘX[jژ?guv +Ї|flرvXѣEw7nv`P |kJ}XX~h†믷bR}KK:|*_r<XoeV-{?/mkhT ԥÇ~aas ۓh{-2owLLnṁof׬}?s=v̙wIc^dbcg"3rdz%%}|x��U}dkṛEWlnGlh 4f mz_(3ӆmD#rry:;3&zD͚v{u)s;gkjN{=ҥhx2Ƙ5klPIH(oPۘבOk:UƼ.gf`1S5m}`A{u'1цژYΟoG{'':[[yJv#"ghݴmZ[/[ט>}l}d߾FFm~[SǘouJ+Ї%''%iO;�eeٞX{ǵ(#Þ@ {8tcO}?бo [^}^$+:/64eжpaoo̿ﮠsV=9:U:xnŞpØ={쉹V-; <&deًIBP҅B%&}u]ˌ{o{�(m̕cJq_ {q[Xދ^->��3IDATc iz~6$J4jdC[fͲSoߝwڞ_5f{}~s[x[{nŇłocn^O>qH<۶|ӧmd_;k}РA~/ci կf+\ٳL`{ 6/ZdGc~TI@Ò̉\O2e=9]av/mr>Dn]ulݝwڐׯ-i_^|`. >m iP8s2}b4^y<�RhkȅdϞ@"!Ƚ{Y.Ͻ0ג%i@MyQӧ?N*a8%8)a{۶-=Xɓ644899s 0!#ϯ>/s s:ȥڵmea{ڐpؠ|@\I@Ò͝Ix0h C 0IZm/rVx AAvJqtq;:O?0/=]�k!#ۙO<|r:=}k{B7ح[7J: Ɇ9ٳ6�իg%ز^'l6oIKGCNk׶D ?py}ܿ$=P<ۤ:u5/, f6{9?;vH:y+Ҵi~/mR_Gqs�*qȨ&Zw8(sСv޹e&9�+a;s*Uy֭XiSlÛ\tSRB/Rڵ|'ڹ..x=vf-!GvBPOti+B�(RE℆gw6:K_~yaǨWOZH?^=Njղ?*(H0AWzAi ?6|ޥAO�ntJ*�PN@XY*qKkڴ6m23O^�2J!�xC4dJ \B�2rz�q!�xa( E v<e�CFF vNc'Uqp�"pE �<˭N�IB�nǐQ�CV g1d+!��C�N�(@r<T�=�\Q;vLL�ށyF vCF�<pE vC�ށF v{8�gv!�p8x(�B�n;!g9L@AB�nP&�)�\)�Q!|B�nc*LL�` �P;vw` �O�oA @!�P�N�pA vyNQ�(!P9y �x pE CXB�(y"p;Ce�+0d@aB�n2�v@aB�nwa��,zv!�Pi'�#p;!�`妇@>!� <e�<!2 9y(�x*0!�qU01=�xCFF ORB�,z"p;wp!Q�O�P�=�\HffƎh(66VVt Vx… z8y{ _U==\^dzW4h M6MUTQ^~zO Nc'Sk"U.{;@bUt`%%%iѢE:uF-I4hZj1cOc(�x!o\!K,QժU#- R||o>0N&�pCFĖ-[ԼysլYey%I|'Tz;C_G1dK8p@QQQE.ۿu?Eݽ.o?|ڼy [݌GsDߚRŋmX$I:sLSgF^̙3 *zy KMM$3-PAm۶`Iwy$@Oܹ˲3tB/"s{[4o<5nܸ���Pjjn"ΧΌDTTT]$EGGYWN 8e���*SN]~>ufx6mhΝJOOwYqFIR֭=Q,���kPgxB/ѯ_?h̙y2335gƪ~,���yԙ+CFDԿ=:t萚5ksjϞ=3g���xuGyw5rH{1brrr|r]wu.effjرVHHbccj*8k* ؟$O$:uJ=zphܹn}vS]t"""tȑ#\b{+<PjZ jٲj֬F)..N)))E-|/ΌЋ饗^K/TvҥK5j(]ve3gz5ky4/MF7qlf͚y4Çk„ jԨZnkpn޽ҥ4ydkԩ@[3fϞ,442 xꫯց+&&F_}Zl)sՙQ6BEiԩ=z$iРAjժƌ{@ɮz�_~EJNN.x^Й3ge]r%ݻw?\ņ+VuVb=cj߾V͏"qqqꪫM$η!>fɒ%Zy䑼eAAAWbb3(==]gϞtQ"UHIZKO>yI֭7o> *6wɓ'+h@:v%K/ՕW^;v-|[9>f˖-j޼j֬<EoD22dBCCnIɞ.P.Çծ]"ڷo-[xT@ٜ>}ZjRڵ:u$N:8V&(**eM xZPP^zN:4uT]ڰasgN|\yرc>Bxh;V111r:Zrx mݺUk׮U*U<]Dk8q$η@cΜ9"˫W6;vTǎݧOOW_}|I\҃.{0x^x P5n8-YDqqq* رCӟԩS'=8V&`effY͚5wܡ5k֜[c9`ԨQ ի=]_~E{VXX,Y\η@cۭ]E%\,a{->z ױc<]'N[oɓ'駟/[}L6msN,߸q$q/|ݻ\!I_֭Ⱥ$):r֭eddnӮ]|rhe=C 1SNNfΜ,33SsQllׯ;|pe[n=zxD|rݻ7oի{d@2334$K҄ $I={"(..N7nŋu0ܼsl25J͚5ܹsi&^Z]wqM7)$$D;vTddmۦ3g*((H=]D@ڿf̘}BVZw^iFkֈ#)SaÆ„JwcԦM{yZrnVX“Ň9rMn`w}IJB Azg4o<kф Խ{wO (kk׮]:y"##խ[7=sjڴiҤ~gI{1FCjذ$i۶m=z֭[ [z8644TÇW_}+''G]v)'Pv/؇9���Oq!����)!����)!����)!����)!����)!����)!�wq2dQGѣ\̘1C5RVVJ���c6lؠ^'N(pM-RSS5{l7\ 2DYYYz뭷T2����SZ ܹsf͚R6mn\/즒�@ �(cLeRJSl͟?_ 8 Yk֬�`�>c3f$I& P@@#=n:%$$N: СC4 WDDƎ[5N^}UlR5l0?~]n=oȺ^{M-[T5k….(<<\}Q>'��ʪ ��@Y}JII… ꫯN:ߒ!>|5qD%&&j֬Y ՗_~K/T'O֊+4ejJ wС;w|A9Rw믿-[hZK p8ԦMf҈#Կ5Jںu?eۘ_?3��JC �Jmڴ… uwaÆe/**J+V$ 6LvԩS裏j钤~X7?ϼ@n:͞=[ .T\\\v={jE\A;vPDDj֬|Ŋjժ-Ztβ7i҄@�p�~]ݡC"Զm[޽;oŋnݺȑ#y?111Q9;zŠ, ?mڴe ә3gqm�(/!�wpObhh$AE;%%E'NPdddSN|~3vXլYS:tP͕ 6M�}`(�w'`s:Ԃ ݿnݺnDD,oѢ~G-_\~.]7xC>ƏmZZjԨR_ �A �)k֬V^N:z޿EZ`uE р4`�eggo߾4iz)UV-oT]q^��(CF�>F2" qqqф lwY8qcuIƘ" =z߁y/;;e͛թSr��ʊB�Oi׮$iܸqS``nv{^y<F.]4tPM<Y|w@hɒ%6m[:wZJ]v[ޣGEEESNWo߮ӧwyW;��!�|Jv4a͘1C~1JMMUÆ NZҲ.7նm[[7nV&MhРAܹseVŋkҤIyˇ W^ѯ hĈz]_x5j&�HSͩ��XjѢV\neffqzꩧ4|p7�ϸ��7jҤ/k9s(((HÆ sS������=����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?Ћ_����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/sample_plots/100m_pfifo_fast.png��������������������������������������������������������0000664�0000000�0000000�00000205210�14670056262�0020720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����)���kÅ���sBIT|d��� pHYs��a��a?i�� �IDATxy\TEvpM/(n'")fk45PLJ75kY➦.$++1~31 |ޯ,39y6I!@DDDDDDzGV """""HO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S ?d6ͅL&CTTTL*ϫ*rdXlYL&Å )"~h;D/WbСW K|l߾^^^L&CXXX�cƌ3 !p*ϗt""m^7Yzdr!66^^^ppp1닸8\~]-/ePV Ç8%I$IU~UyeVL=]ۿH磴3Ԧ,T / @B h֬Fݻw<LMMѨQ#DEE~^Mdd$V\�|駈)�' o#&&r~GXp!aʔ)AZ4OPiiiȑ#Ѯ];C&aڴiyf5j@|r/D˖-ann{{{t{)w+"_Ž?NR3Ы)::Z!$y 1n8بm<x`Y&r92331uT̚5 gΜr3x"0e$&&"##/_<t_GQ~.3 CPvr'Pwzp X[[Wf*3|kF-KNNFjj*ﯶ@QN>}{nXYY!$$8}4֮]_}}4ѫW/�\.Grr2-[uaΝh׮]Z%7?Ǝ;+Vݻ743;=zsbϭ7oF&M|'NDAA䄳gϖz,\cƌ"""`ll~ 8r̙ дiS|ڵk 6gϞUyɓ'nݺeǀDttƲK�ƍC 4֧",, ƈGDD6Ǐرc#uU{̙}zj=E:޾̬`ee_U>]ԫPe B~ܿ]tÇ1p@|7{0w\hnTT-[ɓ'cΝpdz*j/J3�N:U^}Ǒ,?<mݺupssClٲRkrssYYYwiӦM6;w.Ѿ}{>?#6l�ooo$%%�aiiYWڵkkȠ<9bz!( 9? ۶mڵkw�R/_jٲe9jժÇڵkhkLӧ#;;ݻw ,,,ﯳiɕ+W5kX|ZzeuL0Ճ_BPhݾff:;;E3UG ///#F@:u`jj7xZ#ĠQF&wӦMãG4Չ'ЫW/;vĎ;|@ѯ;v'NhOW3es᫯R5E*~Lnɓsss 88Xky֮] ...4h36lxFep%%%K.)4iɓ'k Waa!f͚WWWA4i<y/_%,--鉯깿|8|0|||j*O1q2{(۳ �6n܈ ,Z?WZZ:vEFdd$ׯԮ]oN:QSNaҤI􄣣#LMM쌑#GeeeK.-qE�ٳgѿ8::m}خ]?M4%lmmѴiSDEEܹse:Q8ك` ]tQgJΪMσ3cbb��}ߏOFDD`bb''' :gΜq.P5,\ݺuCÆ ajj {{{`֭ZT SSSԬY[ό34͟;u,χ~?ѣ~'|�^9s*�OOO7nQׯcذa]6,--t�E?&M8 4)7oNqBlٲ^^^3{�-[ !55NBz0|$?PyF|ؾ}; nݺ!==K.EJJ 888hG,̞=^^^1bΟ? 6 ((jEׯ_Gp W\{grãG,cȐ!}6bccsz$Ix1.]J96 Gaݺu6ld2B_믿>�?F||<2i999B˖-1j(_Xv-vիW_~ѿSUꢫcǎEzz:z=z��pyEnp]l޼]tŋo(,_ӧqEiӦhݺ5`kkD 4Jkֺxb5 5j@߾}QfM$''/Mk.i 8֭e̞=ׯ_?ɓa``: rIII;v,233KSپ[�(S/%)ϳoŻヒ:u 44~::x5 F||<Ο? $*+ݺu+zBhܸ -[j� Xx1cccXd 6mڄ,?eff/?FÇƑ#G?͛7Gdd$rss@Qͭ7rrrЩS'B\lܸ}K>?=OFBBҰ}v��Ə\̟?_ qzpqqAtt4RRRyfff"88wEhh(5kǏcʕHLLOOrOTT0}t8;;#22R-ϼ<7ܹ3_aӦM֭;Ç]v000@Ϟ=₂>}-g}CCC?ƱVe|.]4u@QSrbݰ@ǎb $''Ι  B^^~Gtvȑ#QPPP<~k֬A{now a$''c-Q?c 5C�j5!A4lPd2qyu3f$!C;]???!IHIIQ[_5k Iʕ+KM'::ZH$LLLDvvں I5dj˒$IB$l2u/${OmaÄ$IbҤIj:$LLL$IbB|gB$ѧOΝvvvB$Uq(-]T4lPH$BBB5STs;BZ~1ahh(5k˅$IO<yD<??_4mTH$J8#@G}.++K [[[QPPP߹sG ccc~t׺2СC$I^z"77W~~~@]Vmy~~pwwfffڵkk]vj!ʕ+%[q>\all,ɓ'ն$IbĈ IoV-whܸ000W^U'''G< Buuڞ/Q{… B$all,=zTt\P!I.5VZ SSSq uyyyj.^֭[F8::Ǐ?hժ˗/Ǐk}va`` Fqj.$Ib֬Yjbcc$Ibe7n$ &hqY?Zm]bb$I=rss^Bu=G hڴdqڵB$ѴiSCsѣGrx7xj $Ibƍ竕Oױ\N6M6B&[ni]oaa!d2XO!Ihٲ333$I}j˕+TzϞ=՞-B$$I[lQ[7|!I R[XuHMFp�EoTT||<bbbÇYfqڵkWC /e111š5k2uذa000Pk&ESNU۾e˖tR`j˝1f̘rUI0w\k? U ^^^8q߿Zl2sLakk2hcccѧux뭷qm 4ZR[V룏>BÆ Ֆ:tiiiרFLL >| 6W$ /F5di+Wē'O0zh_?3XZZbʕZ/Bm@)sss[P(MHoLQVg}kvA &&ǏGVb >+SZ[Fٕ<˗C.chڴں͛FG[.4 AfͰm6eرhCPt'MN<tFZQ:344|.}\]]Uz ???9sF,>[wɓ'ѡCد_?ɓȨ<p]} pm͠}F6\.WArve>??_c�5 ܹ=[|||аaC:�[njFFaΝN1Q!:d^ۿ[ZZF)0a]Yi,;pqQmMu QV-ܾ}[ɓx!ڶmj U7,YR߹sgϞE Pk;gajj-Z{?WWW/kׇo߆9ixyyil]Bhժse˖!;;@VZ)mj,S7Wkt �P߻wGEڵtV58qZYI@QӴ9s_ENNڏ�O{Q:tHrgddu"""&M<x0&Nf͚a7+T]zz)?~nnn+WD||<:|֙h-kA9pF B.]Z'''|8p�v Y||<rssՖY PlHMMEvv`g(: dgg,cE=zsAZZ^1r �0`�,X^zO> 7^{J-Ӌ_dU<xyڮML ;;[}D%a@H/m_啒R)_ZR֬h4CP244T{aR+TZZZ;5kVh �coobv~Q8�رC�2$޽{�uɩuz\j9M6Ev ;;;ۘ?֑ٔG pJG<Ə|7X`͛I9suJO}޾;ޔe?>֭]IUtRjZBI@TF ݻظq6NZje˖!55Ud2Yg}TTYCm5Vb޽ B@PPz+++d2<xjf6m> ׯWMѤIDGG?ש4ƭ[ akkk umMWa<9z1 }jj* ENm4Qhp7K+_]˵Qcx|k;%P<>VVVuֲܔe~=%v.,X�G.5 HU֞)tZ"%egO,Y\h4ݳgϟ_˫^zhР.\4 Oې!C0dr޽?3~t'N$[gvasu,X�-ZP QܪU\rrrR8vv܉3f̀BP\KC*y_()P3gÇZ:oai&<yYYYغu++ 4 2E&MTnO-~d2rrrPXX�\k^mCH/???4i/^ҥKKVʠm$N\l 8|0޽<}@jԨƍҥKXkQ[[[!UBVPXX]vihh=Shk;t��en~jaa7xW^Evvv+_jΕFgR۱W}>=<<\c]ڜeĈ�^KS>emm]oEdd$nݺv}(?ӊ*!:u zUf͚aѪ1zzzs]gIE)C]r}ՙ3g`oo5Ni:tӧc�?<*Jj*~޸wZВ*ڞȀ$I^s<˃!`b̘1:Y>z(dŊ/111(((,0`�c̙j:TP(;wN%4O7KJJš5kʕeS:uZs1\ QsUVaaa% [[[^Zc0RZn;"!!A%GQ%tE9yq BFA9\_}Ξ=nڴisjR}ep5~x_Bzz:"""6ɺ{.bbbү)(CQT)** 666>}K BeT9qz];Uy1%k\*>}|ڲDյ)y{{I&PT ('##M4Q,...Ñ#GԖZzڽ{FCk(󨢢`bb wm̚5 $wUgԨQ�7ڵkQfM?bU?�� �IDAT;wb˖-j.\cEDygzy(=W%j닄UӨXrYYYطo,--[nF~Pvmddd`׮]pqq^c*?;wٳCr ~'tKN8 6l؀VZSNO?___lܸQc(̙3qqq8tp)՜dOp<OuVx7$$$M68uTbɒ%?Ts>]@{NhaaoGǎѿյrQ{P]V^@ > ,@۶maccK.8z(ݫ`Fzz:VXWWWS5WXrr2jsss̛7yyy)cƌ9RjÆ 1o<hժb޽pss_|_y̙3ƍCrr27nӧOc˖-Ǐ?XL̰uVV¦MFA3g )) w… +=0ԨQ۷GÆ !@zz:`նX~=z] <xpa Cf͚A$\x{۷UԪU  ?www@.cǎ077{j+j ///f͚ta``UR.]0qDohٲ%Μ9=SѲXlBBBпI&8y$~XYYU\ƍöm~ YYYصk1ٳ;8z(n ;;;U;PT&0yd9r$ SL)\K,QQ0ظqՋ>cΘ3gƌXׯ˗j8`�$$$`@=kBRG|70k֭[aoo6h߾=1x`�$^{ _:!,.//O ///aoo/}\\B&=E@WVfM1l0yҊ]r~*]:;; /_CLxxx˗k̿U1a$LMM+rrrt?tQѭ[7QF aii)DZZ2Lc~,]ǡs)iHÇŧ~*\\\pqqSN/_:_.<q B۷kbǎG ;;;ѫW/qIǡkB]\ܝ;wĬYD֭0335=z}w>V~~~ZFmuVѡCaii1Py:u$lmmpuujOtcǎ={5k ){sh<<T(⧟~{\wyGٳG*c",,L4jHujJ̙3Gܽ{WmB'F ###VyF-\]]nnn"""B$&&m{}1eѸqcajj*4h F-|u(=},Ǐ&LQl۷gQيǞ={DppVVVs"++KcO}P=('OC uFFFnݺbȐ!ԩSt|%=7o,ڷo/jԨ!lmmEΝEzzcؾ}͚5B4mT;V\pA#+W{ϣTm_OLױlڴIڶm+/_3[|嗢ELىݻJ:%݋w͢CBڊ>}ӧOk=/ڞgΜoW+]ђ~$D@QS3fTheʔ)öm۪m@Վ;йsgL<=je>t=DGGK.L&SǏK.Q7ojᅦWI#z1Iȑ#X`+}rļ0i$HTj?"""z5T;>c qbccѰaC#%%E먂.]/lmm;w?9} xb5 }~43G}<'\]]ѼysXXXLEWs qatt~7ܾ}ISaխ[W^E͚5~iFvfƒpAԫW�жm[ >>�2e zu�BX1BdT9$Iz._~?;w]vŇ~B5a~:6oތ|y>|8 V#"zar8[[[; D*�!YYYh۶-UC+ժU 5mW͗믿G_ѥKv{VXz^ӧOKI*؇J]|7nڜM68xzVZA&UDDDjB( JNl2ZaԩSGc]:up-<yFFFr ࠶18rMl۶ 033 """"z<x\tYݸ,N ԃ��&&&LMMU: 111QUܶm40fʕ2Uwpb@Xv=XCmc<|Pk ͭRL<7ͫb [zYڥ1x`ջnyV)e59Ԯ\{{{/uAaa!n޼V5cܺu uHC ZjU@T%lllxK-xJ[^y'*SLu탻�mVV ڶDDDDD]ya ͛q%ղ$>}}U- -ZE`aaݻ?2Nl2L.\|7ną ��cƌ>Oرcq̙3-[DTT*-SSSG~ЩS'cժU5k''""""B徃'&...8<�@$�$ܹshР�رc0a222`bbݻcܹpttHsɒ%;wjѣGc̘1Z?p�Zno�T֬YVw1ʅ-x˦wܪxg _b Uw}CAAݻW ziXXXʪA:0 $"""*G"-- ׮]tjժ___4o޼BOa@HDDDTGbhܸ1`mm =oJP( qA_�`"-- 7ƠATQ899 WFZZ """"*AAA]D$Iq5TwqDDDD%P cmm]%!z��߿_% ==i_,|)DDDDDDz!3dbL&Å (c@HDDDDd[lj߼< 066|}}ׯ﯑<==>/Ջ8X&zpB""""*UttZ!y 1n8J�͛7c(((+QfMrdffbԩ5kΜ9Zj ggg!pE$$$`ʔ)HLLDFF *[BeJlҥ(((qРA 11vX<zHc]dd$|}}U9s&<<<o>^ZkzDT>l2JDDDDNP`ȑ(,,uonnnضm֭[jkF޽�n_R?d2L>]mǏ1uT7ƌ3ɓRU<y24i333١K.HJJɓ'Xp!u놆  ֭[u ̄cǎ=pĉ25DDDDTRSSq)ԫWÇ/q[ISP)Ҷӵo߾B߾}add_~111ƍK7??8~8ڶmpܸq֭CNh"1B}^^ƍooot믿i&t }y\~=SSSuAzz:вe2"DDDDT222�ոUtp]r �vU(:y$;kkk�EUyf\.q?Ǐȑ#h"垞3f :w �p҂x{{㣏>[oSSS�ݻw1rH"==ZR3a̛7P0 $"""riS+W��իW4㑜 !.]rk j5m4U0�&&&C@@�~ǏcʕQ5ncƌ̙3|rL6 �`ll٬"33;v�$&&:tZ0�111pΝ ?DDDDU uSKQJ'L�*Oc7d2Kɓx|||4F_@̜9S#GbΜ9HKKիW5믿T崲;J,'J4mZUG/emץK*FJJ(ϋ$IS`�!p�:uh]_vm�E ݋@( W^L&62m,QiUsW"|||� .P( =ycOBڵk]oܼyVVV%ljzUi7I9s&>|5Cbb<]5]y=NQC&MpE,]mZgekk �Z*qߔeP((qߦM R �j}Μ9{{{5Z{dm2T& IŋcƌUnwQ˕^H}#G`%VCL<�UFFF<x0 T(={ ,1 Z₼<9rDm۷o#44Xz5?69&&%HMFJ 2d XrYYYطo,--a^Ck֬Kжm[\p7nDhh(֭[sf͚yӧ ѣ)'�?Gzz:.\L͛Xnݻ �qa۶mA~`ee,ڵ }ҷ~cǎ߿?j׮ =zTʄ5DDDDT!$,G8{,f̘{{{lذgƚ5k```X={J,LLL~?_\YF*֭[aÆaӦM�ӧOdž ʔ-ك>yyy/ao[nŻᆱ}Νi&4k k׮ҥKafft]֭[Ѻuk[~-w^($*:['Uuؿ3DDDT9\ŋcȑ:GW?QXXXEy^;B""""""=ŀ6#}€UVEG%""""9kB""""""=ŀHO1 $"""""S B""""""=ŀHO1 $"""""S B"""";)))d>}zu!ɰlٲ.L.B""""*L&+_`%//򂃃�___jykgeeOOOÇv\$UZZۋXLT2.�^7or9ƍ=<<��7oQPP�WWWf͚ԩS1k,9sjRK#22BŋHHH)S UY.""""REGGk,[t) 0n84h@c}jj*`llxDDDhlsq;=X ___տgΜ ۷W֚QS(9r$ 1|mۆu떚fڵѻwo�@fffq5 >jՂ9<<<|9}4"""899aС8sv/L&Ò%KԖ/]2 xںvL�B&!** 0`�`ff6m`˖-e:NjaMMMW^ԩS4i<==~ȑ|?~Xk055EF0m4=XCHDDDG$+55NBz0|$? jܼy^^^8w:v_xwuLݻ Efpq\ ��$%%V�x!???�\.|ϟ?v^СCk"44;K=͛7#<<$O>hذ!h"U3[ggg Xx1cccXd 6mڄ,@]~aƍhܸ1><z?>\jĀ^96}G͚UwiSFFb*:ЈBW\ABB|'8wƏs窖=Z @DD޽+Wbu֭À0d;v $^CsNtv܉@ ))I@P 00P#L>ӦMS-4ht9s޽{CB@JJ UfϞI&aȑضmjyDD&N###v؁]b̙oT׬Y7CHNN1�`hӦMB"""z\Vߕ+Y lj'{M+W��իW4㑜 !.]rk (q'O`ժUBLLں֭[㭷Ҙa8y$ԂA�ׯ.\ dddcǎ� ȑ#hѢ;W"::HJJŒ3�SsQ^gggL:UmYNP~25MLL۷1h `�&NEaǎx"ׯ�:醄Yfj#P�f͚ ӦMCTTTB"""zܺUߕ+3Y5p swhUsϷ*,--UN0%{ <x�mڴA54i��5x� dgg@#)) -ZP!''_~%ݻ ܹ5j@۶m5vwwZZ~}%kie700/VXlU@�+WD||<:|=ݬ000FeiJ/&DDDʹ}02.^RS+CSZ}(k.]T4RRRF-\�SY(ծ][>uѺry~~joΝ7nP~}4nAAA3gRSSѪU+;v ݻwL/OOۡdhh7Y}?>֭] fff�j/\`\yB"""zܺxz5]zBs#W"HP(Zdmm hQmG:f퀢@_GZZ?~j;v1]Ϫe~:,X-Z`ݰP~ժUZu 5B]ҋNKiVKBD/[�{{```z>+4i/"] (((XU�>99Yk픂QPPor\Ukhnn#))I)iU(7!Ij!ЩS'`ҥKHu(,,Dzz:m^ 襴k kuy8xKQ4�tL]E\ݾ w�7Vw$IXx1 1f5N�pQ 1x`h *<hҤ 222auׯg �� �IDATGFF4iчNYC$/00'6mlٲP]^`gg5kh97orss�$ݻxw*)2eڼn̙3+`@HD/%kVo9�`|߿h3}Z_+1KBTTChk 5"!!2d6m#GbԩСClYYY07Qg͚Fa޼yɓ ___t]>˖-C5пO>Axx8+++@$\~M6U럨 oܸ ].+YXX~L& O>;wG}:u`Ūkժ`߾}pwwĉoyͅFDϞ=g8q"ƌ-ZE:6~ t4`blRu|((( ١CEݼzASC�C�۶3UIJcG8{,f̘{{{lذgƚ5k```X={J,k.DEEĉ?>>?~}ڶmL 4{ݻo233ηgkk HG]vк, ]gϞصkum۶aܹ8y$FMJ�=><x�| vءJZk?OB7oưaðE*DeɁ^H@֭~D2!~8UA<ݻ5]}=믫 *?/xKJ;�ϞD\ zG 3N?ƌ)zW\ŋ1rH#8V͛K{&KB*w5Dҹyˁ`]o6uظx}P�G�EMgg?VNz/O?-%S_gAu!Z.EQx|ݼ xs+!tN.+0`@шŦUz]:t(__9w{hܸ*_xͫh߾F0W۲=Z 8p(`}ʀ(z^(((*B:U}SRo{:XmٔH"֟h'(QdoB)E -EL>?I$MWy^;?{j^^ a :&MHD}dx2M۵ !AhH 8Q5cSJ3`~XҌKFT7lz4j34uuUkڴ DtJDGEE+7>aX2 Syn@󥍦@A <<�// @HDOYDDPjV%,wPG>H-U*A.Μ4@¦M$$sIۆ]d{0 c ,uDFRdajA//`0J38Mh(Ee2gOQhz:EF.^>?0gEuI.kגȰaEd$ 9s%L�8t9ĉtoܹ< }U})�Uǫ(7oRCVtbb.2dTdц!07i /PTe.ӏE޽|!�XY}וDU^t7eKsuVJয়ȝvxsl)ж-pZǠ$'V)Jb9NRС6j.s<fU1w.]'ngRHB<70n֌뮮?p5%%dr dV!0hFa1%L ꍭg7OTȠ]۶yyoMBAC2iO_f&ĔOOiHZZ/ޅ�6n(UcHs4к5 HHϞn71u*E`IbuRr= "3o%ap!#}\̛g8\4JPsudJenjڔ>-齖%:n҄_6p&$1 S;aA0LBj9!}GH`oݣH>ʪSJJ>7RO-.}D\m =8$sF* ƍ)nJA-5kSƧ/E'6n;C:A~)wo:u()3tLm.mб# [IW=6'"'PD_eJA9jJTP";b߼I`GGzݢ\&Cڮ&2 S`A0LBӌtB`Q6"Fb"EkT͘}ˣGG $4"-[yyuv5!~]{ PTiXJ_fGzVQwQoBP՟RtP2F?y=*JJ Id 0ie 9RVL׈$-?<XGt(C^%&;w3(qTJ=iؐAyèDU œr EkRtϲF##N�2 SQX2 S"vq'hKBEtBwW|<Ы<I)sKݔZs_H" ;GiZ99)tchz~h(2Y[k䓺 'h3/zcPG2c?\>77NCIo|FBT.‚QVߙ34 TՋRXq(PʤI$~ CӓCb"iӴt.!!D_z=<CܾM1p8^=|�4o^w< (ARܼ)e Я]WGP$EkZZaMJ 7HFG`XNäu_ y4kFwNah֬lA!!QADD3 �E٫0 4[NH\68,W+V/xA[h2 JE"$f%":-1i1HMΰxn8Rx/ GxR8n:vuN!o[8B@@%Th?Qf<qQZJ|/zS7U;x}noWG4qkVЪN+ N9cqUGb@Y^m1�toBq �C%TEs nsѥ~Ħ6wp'�STښ;8cL($$!"*ս{!w}C4li ۽!B6D:uBr8D{ߟF^cWyfGg`zu~ O6|�EP'jԻZ+ĭ 6YY*Ȃ~#~A9sOBt m7/l-l3w$e'c=4pjNq'I@v'ࣣHIFJ .S`giL$.6.ht+>Nuq}~]xY\J.[S\qrtDQ㵿B|{\Mxg# 66- slj,[46wqSݖ+'n@tka;8 ϯUy"dgA<{�PvvNuDŧs[MÅ˹ {}qqLD[ X `W�lO8MS;/y n#-E{SBe!TBPK-G9)2>L3͝uʒA)}󧟀)lj WWddF x I_"ʕQ9SWK"\hNvvALE$LD*@ E6X m`caS9X@UhTzB P,D]T ":)UJ" ø6mo-02![T/SNp:vh0I;:R.!q!mqx~l#,EJԛ#gΰ* (ҠE8[Vh HMEJn s[(NJV;_<f#)' NѰkh4ɆObL�٘z:b3#Rc 4-@$f%À&Pס.n8~8"#0$ XmaåMPBnnXw2 -/=Xd(ϟx:wT-wX?zPnfE^.h%AR#nĠfz~{D2QQNFV(TLܘyܛ:{1l0k F gG�-D:-iDθq?%i!@:D@,yg!0YJDF+J8gAf��{~O|\@`A]Q*DG�:CAP9&%Rr s1QmڢSC* y(H~ypvEvpvlE!$2}P*2 ;7Ǡ'U$$e'!(12-l WWظ@!W 7c(UNN:7DSggׇkAxy !&1 wmе=,mama L98}?x9й!�JW ze>6?=: ?CO3k^(NLyFz]`DZn %<y`pvwG,dP�"S@wK8Z 5#2!2\ohV;և Ñy 7<!(y(*PV +X*,a w,QT`4. ,d8w FG+10}tԭ[Wz|kbSkp� .\`0IɓB\ 2L )EpNv՚as^X)k=ozuXJ!NBR_qc!}O% DHT*%fQ߆~hQz(! !J(1| z)P*J=E"!6 7B]wmIl(0˗EŐr-,cŕkyQ#hN((/18 dEb;ľń"9;Y/qńblA-6]$#F<JRl *h>WϽ"{3C ߩBXCXۣ|J%N'`.6nR:BMĂ)B]s}$ę3B89 B'D^H,9D?$a"-]*|_DctK_!gұNeii=ݧvb4/M&Mh=Zyԟ]IrshLEbBѠ[],GӹQ"!#ADF& t N^=f!dun__5?|C={oT1uʖfXJT*1yY%aS@o!k '$$ٳěo&pcͥOߋXV ?_%.S7ug!>\luow]99"hz Ƅ$$$ `p=5-,k1ea7T*!3!:,"Z^=/Oiׄ!!&ME}, ѦΝ4~M"J!ZD? ׮D!~VL$'kd!tc>^:dm+DݺoJ툹ǓDؽ0!:KK!RSXA22t\B͟l/-/y*ѯC_93i|+DBە/O kkLRRwN ̇Gr>s_߾B|aa4mhwJegO:w~(Dz:$,#{ |h+,XL+~8P-a[C\{Y(BxxBͼ+}N~*ĝ)~/C5}60CÇ߃!-}5IIQ#zhm1Cz:mzGnVZ7TC,lL<"Z eHN{"[Č?g+Dvt5WA⣏ ^PH$%%B,^,㺷+*kq抠Aʽ+8c$ӧ0ɱ?ƍFoÂf‚_q}[9J`>ְ>\޽կssK++!~> ݜ]@ ֽ<+oܨ{ƍwo?Vt4h ѱ#nx{*~~$h^KUKLB.bԑ-?b[L| <OBQ^;hoko7c[߯DuŋwME�T)+ɓ~ eKڵql(ĉtMA+"v=,,.wx𐂢QbB!&L"}谺Ebq/ YL*{;Wq,G(,$_11;14m*Ĝ9J^^tl"9;YdYOx tV| !lf/OImDfAbV7UŦMBZY+ħ(yyU&e2Yk(d`ѽ{w.,--ٳXxW[޽KQtI,^X^2LL85bB&m۶U!''Gxyy#F š 0 SkoXn-7\j}!4'z͞MQ[k" ЅMccr$Mu1z4G䲸v-9:Q# %'K]9lW$:ٳd/qM5߇7͛?30|~%Ւ̘A 5KrQs޿*ѵz|KNeƫ Gֹ,^܇ m\TƆ>%|ArܷxݲK'@ӫW sTXbfיl>]ϺcCx'ę)ڳ5�r?믍[oxrhuqy;Stzer )Bo'g{PmpZW~SiG )xI`zhl,9 8n:t H�ŊƏ| 1w\HMC�b@f0rHxzz"==ΝüyxbDFF«ĉ!sN|ؽ{7N: JGfep*쭍`޼yhԨFe㕅-fΜ?/^ZZ Baj Rˉ1`8X9Zo_q;}nze 88o=!݌dOG( MT]I-N%9pnSR˂%FɱmZ�2PߡXI;ׯOsϩ_NʢGk|{BŲ31bmM-HBPˉ_7~_S;Nł Å ܍WvW[�$^z¼y D&97-Z<TCj*=49p9Sx]}jpj]?͛i^LDAg$!i]YUA�� �IDATgΝ oEۅaeNIJ[n2220w\Z~q1VVVX~=&LPjk׮aΜ9/lĉh"tؼy[QVFUj pi\rL%/ǏիWcMMl!d xƥ{buO?zoӅLF7c�0p lHtFK/"4POƳgrXY۶QKVƍSOޯ$Ν#(J9ތ %#hJmb%l ,ƿ*ښ";WjϏs,1,9\ "?G�G1۰AwtI EǎŎC_2նdBM)bCV{$W$a[t}jNnd2FE;wwb0~Gڷ*+#x*JӡT*|rիW>�I?>r9?͛7[npttDF'_~r_~�;v r| 1x`A.#..�WJ_x?ÓO> _Dd9b}v̘4uAI; WWW8::bḥpј6m6m ;;;m۶1cRK4"C׮]uVi64ej,5ܼ wy.ڬt(@7LO? 7E/1r9^c\NQ;)JIXϓX��pAmHiqB&#xvTЮ]iyE'f^Ek+[aca&Wf" <qFnW&cZ7q05Cln5]\<>ŋ$vN є�,[$,ѽ^n)\έWҪ}?]f:mצ } ""e?~7n@ 0yL&3:S</'Of͚AO>3g�}?~*W^((()S0qDXYYi_;wĈ#ヹs{رcx ܸq:thJ={`Ȑ!Œ3мys_Æ Ù3g!N=z`޽2dÂDtׯG6m0gL05ƍqRѣpSQăJ9l3w@ƀ0[ϯ7n"58yR&MW=_u1r$;{V[T8@=z4/n;vTVnAz!@/pQmVe3Pر$L%AhLD _Iu@)˚8A ꢕG+DΊX /:v|+ ,*Q �Y6 B}YǏCO?%K?kӔs׿?p E ΎǎFnպچX&N�ӧ©%#عs'�[9.GCE~~~X|9ڷo?X?Sc޽{bРAVXs_!o=ܺu o�|{=:|0z 3<CaРAXv-Ǝ[)S?c޽6l�GZZ/_Yfi?77W\N<~<X2 cğ;�blLחD.3.ZA҂wo2HЁap0 Nts 2Ht?$:;vP!$գ1laůs sp:4[V�wR&8AfC+nMA˗uU8N'7"v-ZP6'ȊK#�En,-zz 'z]~云(rrLiM �nPaa 2)�^%&&�r*ѣBعs'ѭ[76mZ)1JۡCrA�۷3gbŊ8rt^j0O8vb1P_ơCо}{-1�&L?bA( >? ]H>X2 cr>:XpcXpb ֠ LM2n һ^UK;P& E+~ f�!lߞNUх5{bZI>HF{:C(XZ{ůO:e7_QWMў=)m݆@A&F"MS7XSؑ(:(@Z4 B,믷(J~$qT#.~S @zɇQ%H|�PRoBQmW})ռ}oOr92aRR�M_C:p[.�Pټ}vaÆ @&KL!0&g׵]0 [Fn\&ǬYm'Gzm�@O3X[t J<0h1*A3[72hkpw4P]`>7p`R [{g>Gf~&q0 9փJ24oN['N:Cjϒ,\HVYqdvaQ:.E0t# B}UF˖Tij~d2a� �PCKpcǎiVoool_FI/veE3u$2 -+  88s6l~T)PNfa# Pסnqo͇_E6QQ𼊾ƛrZKfݿov"7~< z(!U@b"k3CuҥKقJ“ѭA7:ʊ%%c'(ݳFaaQ=ܚ!T7v? @>5͈b:|PT1]߃nO.d΢KCGE˖-uV(JСCo1gcRH01J4a j+.+[q?[we.h'Tr5GʨDӦPoUIH5k(RFPjeXS ÕWp7.cJh:<Ytǝ I�vRhQfcSGwr%[hx[BIV&DJ;U*ղcǎT*q)dRnZcT&Z :vw}[l�޽zw'S`A0N8 k.nlv;�WͣF.'󊒂rKR`Qv(@ XV۶ijϒ8Pil-mԭ)$]hrXOݻ,+L67,njѲk!d`aaٳgcӦM:׻z*W,,LC;Z]#G`߾}ZV\h<ShذaE pj&/^ԙ*E4Jl9zIv&0 cnŽ$l0x|{RģSboׄ#%t"j}CZ2M&(StpGjߟ6^mp榢W[x9Qk@ʮ]Z� _z`y"hΰ 闶:堡t^zaΝx/c…ݻ7<<<#88:Fu'x'OѬY3( >mڴ#F`ĈhҤ BBB~3z? ?W"@r6l؀5k 007+w^`ܹ9}4ѽ:lBaL!�: ymgewrba#\bRjYuWZJe!$~ZOд,CG֞v/ ՘tQ@4z5<`__./{|l3P52!C ** ,;v؁e˖a˖-P(Xp!jЌoU_~,X�AAAtR#Gb׮]NJ+aȑܘf<y2�`۶m:_U5ƍĉq}l߾˗/GHHƍϗ`3֕m˘ 2 crTBU*BPW;>ѭtĢ GחSk"E- !Gk&^aӦdr2ͣ/JEY>NNU[0&&ƨ0o<̛7Ϩ=Za 4i{ѹO>.( <+{h׮6mڄO>DK�+xWtngh~~~uڵ\-66>lk S!0&GB"=דk͋ _'|}d [# E͝2j=өy4jBOߚieE.�V'~>*" w(BjɂP 2UˢE۷ ʕ+1bq BaL˨&-[ "9Bk^t4�X@Ew%4wm!(U#MSRX!'Ф}*AJ- p3 :,%B㩧B |g SIX2 crtH))HI.)�Xgj#"Ԭ#4g 4 KUL8C)œOR٫/Kj9v9N<Te]&FXXX"G3'SkBaL>S!�\O:>Ԍ7,nL6FMգey iC}"E�,8,qʨ1T05 2 cr E7 2ш�L߃PhЀ#LŐ6߫fR)Bx6`Q !0aA0Q  \1i��_g (ً޽m(0abCAXBmdva2 crGJFU*^~,dpq6KDD9B05T(V#Oay Bn;0L# Ø!$ѻw"XxhtiF  h7�2[:�Y#GWca"}p8!d!\qve Ģٳ}`k ]uH HBU/�_~)r(Sx�ήfzaA01Ԙ^JDTZZ.;Ȅ#, 0rY0>RSpnJ[ v ^^^tket cn =F ØCZuUj Ģi?aZEj*ݠP�*Iի~wl޼۷ Qy$$&&{(cJƒH S Ø}._S "#~ IZN0 S HMY3ԯza@@��ĉؾ}{:qa|m"x񢹇<xyy^(.15 Ø}}##IZZ`)~?h4r1OSzaj.WL@@�ZS:ӧO7PL;;;N dvr˖oosp;#�– 3@zN899ծ[{ X;:nݺ 05ڑ0#>S+W@r1pɺ|1 c: AN֒iA 0z`A0g*s к5 3Ǵ*L?HajYY@QF�((0jB=vX2 crE^%A�{(fQaJSMAT[s !dF?,19"yy͛jAص12`^~$0Jay !0&GWۉ@$7j+5�9x 8Bh\C0~X2 crtF5Ci܃a ,2 c� Ø]m'^||�M'w ÔIj*P<$Am14# !0&G0I[϶RX dF?+ pP!dF?,19Le\NѭG#P8Z;pt *6/ai0`A0)!bcKG-i 0:))mm)ZȂPT!dF,19*ҊӴ d)P&,(0`A0Ў^Bpf0Qj!0`A0BeIb7ߚx;v>AX.]2~Z2  Ø2Wr(S ? #ܣ~|˪ݻ<x�|jqlmL+xM G1� BaLNIS]-'FSP� ^mT/))/u�nx be[yy gL!t _Oǹpk!TC. !0&G3B $$ dj7n(E�L!q?;}ji#G[xxPM+!TkJU-5(0aA0Q UqUW!h 5:YL;RoU¢"`B`PO;5</ޗrZQAxYP*Pc߅(+Jj2k Bâ!Mq0 S^$AAG;w7ޠں瞣ySQQ$ xض e $@))4 Gz5u*`eULIN0r$^c\C0X2 cRe49ptll9*)'W֘hT=7tR@efV|$h4~�Ve Ν+!,e}`nl۶”_?Іaa!d,1)M2L~ SzۗaޱT5B�6PdI=GJ_ᅧ{J  \7=WiYT_Tٳ$漽c*/\N9j̭[$o'gO%w*!0zaA0InJѤ$L-#?8KG%0A{~˖YѴт{I̚E5ӧ@-'G8D&e dJN}aUT}й_V^ 2  Ø]BsatޮЬ٣!ܰEMd2VXf< >^W7vПƹv-nee StTΝ)jNc(2YZ]X=lp1WdP n;0nX2 cR)B)LPQ[PE=zPhQQce{|EƏWsrZ- h_cǒLIB}gPTW/�ڸ:B!̙[h˗i*EI` @�;fSaÂaR2*Qr*E\\�!,,fzU/;pV*O-""/@hтQsgdF698T__pU+!!A(t <,FǎG%QWBCR3m͍{F9ea dƤH7%.2*^U7lْZ4ddwLƲu+I頻vc$h�rlݚ.:u(uYY(Z>ϔvZ:wBBHJ(g鍮h#F5?Ò3d,#Rt.6Ͱ!._֮6z&V]F1 BaLRI!djbߟׯo<a* O2.4"_Af25Хqu*Eそ;KCd#}ɁOv4%U*JmժNh>!w/;FZ<Y[?@ΧWt[NSF1� BaLLj*e` dj d! -hZ�� �IDATHJe2֖`` E R{Q௿syЁ:4θ8Jߟ> EȽT ܙWHHe*>R(r\ө儮a&4 ʄ# !0&E3BL8e5DD`аa#zm׮%Q8t(0z4wG 1pTt*/-sU|$Ο'ԧ 4!A(Euj# CtV;;,RtaXB!dF?,1).2hGZ$&4Ki9I4e駁uu/߻ܹ92�> <>v 5!A% O]uGPZO>+9 u5|msI #c3 EDn;0nX2 cRSF5",Zի@z^mq T_ cL_%Kmۨ}&/cP_Tn;46c LX3^;w!<z66e([7`ʲו  VVwJb0>>ˣG)-LJ)ӻkG1� BaLtS"ɑL WW3aE;e˖$X40\,zs]&(.ZQ^~ XUKL(V@�P(X=G}#c Le9J< ("E%d2`d%0*PP)P~~5 !0&ET&) pwn05]bߟ w'qH`lT}X*A(Ss4\ TjgW5qF)ϒPuB}<<-,_wVahJ1ݰuU*xQ@"/OoHn;0!6aRTEZCNEdtE#LKR`f&EWK(XU GQWHpM"d6ZRSՐ ^Z;rMKtͨ( E NӢ"2  Ø!7gj׮i;Jxy..:۷)S(zVQ֭7ߤE`Ep0վJK))pz5]Аè&Nz}г'I(zWVhYHzҖe!dF,1).Q2&篿N,?|]DӒ%L4q#к5v-5x/((T*j0jM@ :HH(>],H4#&P2<Y˪EƏV}:e|&zQtLOkB28B0X2 cRSFe2Z%dgSY|GR{X8{˵k9`�Xz?20dܼY1I͜=G6 8wjE50"5 ]BaԘ7 [YA xUtHe(c 0aA0IRF298e҄ epGb-&N~D7.`rs޸md6Eu\FQ^(sͬZEݺiϯ[hܸ 3ϐeOx}KTu6@?P*6W^!A}uBC+.*a BȦ2 !0&Me[hdq X锺٬YʕVr%pdHZIӁgc7 Ww_T 36̜O^eN7!ǎ:I ,!4a$oE>}*FOhz:[Q!dF,1)SrrXVX>0&6xR+SS?4n$J|u`HZZBP]\\Ao$<~ݸ1~=EFֽ<0 :? 4mJ=yݛjZs("ڸqcxT()ܡ<o_,&NX^CѴ*"zMeea dƤH7%t)qд];{J!'=SPɓGڮoƊsJz>"&ܔ)@=z~Ξ锊8i(4&Eh}))uD&nϰ2 No]:8{{RRFSF BaL2Pr<Ntޜ>R?EE};V}MF[K/`Tq<D  Ju۶[ +JqpKJ5Xd22  ׮S$ʪr0!r !0&E)dAX5<nYX ˹s!Q6kz//]w(p GuNlѽ<-Rh\]Gv-8֯_z]ggZPFISpUtN5~H&3Tch(uXh;) !0&E)IOJ# BzvO5%kJQ{ٌŋ]Z, ge2`#,ٗ0;<$X=zSjh({$OBJZfhv6O*,]h@ʨN0 c� ØuP[[T( djP2B(l͚U:Q HQaȭU;%S7; $De7hjAx,Ir  7}Jq !0aA0Iьrh%E;w&(T ~q7~E*S+BAU+r\zkG"hӆyzޥKҹd KTov( ֞=88P}eTK `QQ  T Ø)uFE+d(ӥ EӵTToU9!!NnT:cƐ{-)dE+9T7o^Fd2McBб^+߾llHEw5"GdSUF"֕,у0E(G+ϭ[$Tä$/SXm"$D2Yj_|7N(F‚꺺v?_eC/fX{9ɓ;Т+5kj2}PʨGRy5<gSa*G1)2ZƒSJYm&$tXՂ.Q]XXP+++owߥAc=\GㆽIQ+!C*8g0b0d*m'1� BaLtSSF+ͭ[$O޹cqU5yyԯA@޳R@?zV^Ǝ`BE$025 !0&E!sR:;NN^. !z�J._^ WFYjNMh`(B( k1)l*SܺEݔѐJl#<uRc˖ Q 2  ØDJI}F liZٶG<e*) SF1)BAKS]QI5Pag d�,1)R N ,+Bجp.TN:Ȓbh( B) 6a dƤX8BX)bc)"P..)32(KUeFk8PzYL  cBn;0~X2 cRoJnnK-G/ EviMN=tٳ4eA0)T]F BaL!trm*Ԕ^ eB.] ,[V D)>>$K:!ЩU=gG22Ne�,1)RYf摘y~n@v6a2pzz +#4]j\Q/ x?.<jH`�,cW "77Wkk׮aptt;&LM@)qqyL/�~ \^utPG oߦyTgXQA ܸ�ǏWn̺8|zMcL=pȑU\y02*cQk8XV#aaa DXXΝ˗{ رc׻}6zh,Yo6ۇPcN$QE^LիndcH޹4h@W0<Li,-;*>f}> �{k ;V- QF Nef+x[�탿?�`ʔ)PTذaŋ#77.]B7p]vE~zL:՜oa)c!do\MKBMA(̔˗ 4@RPKf&q#0y2`eEbbh_?z=`�GW�fͪظqà 2_3j�5 Vov؁!CA�۷/7o~tf <??~2juk76B _]@Ӧ+Pߙ3ʕ|w0C �'G8]a Ṣ׌<wdcҤIɓxl۶ Wٳakk;w )) ;w.}.]p%3aD. "RС}WE"?{w%g]ޏل$@(j0)5-(T"**?*RKiQB"USs oU[D 1p O$dqgaٙݙ$99Nvx{s]u^A!RLvoネ ">89iҗ"6!7ɟֈ~yq]җCe D+״G ]w5n/_xG>]tQDDX"""VK0wx駝#T+>w}/yI>Ή_*x~}{' 䕼=6o,o9koqUR^%wu?m=*Vi3]r8##"_r̞=;n?;s_4iӦӧGDĺubԩ iW?adֲYTj8e +R #[F#ϑmcßYyyŰU_hQEE]O'ЎfCeLe3dɒXdɨ}نo]t㡇]7ݐs1QTcCe?c/Xpa:e4*? D|y={|?s|}jȖшm@Xmy?vַZ˖EpCĿK^[8+_'ɢ}׿Mv5[VTÔQ6cEE;׷r;t.oZuGڵkg?Phut+VٳVaKSm-{ \23 I'7lmE]V֪R aF7?Wf:0孟.WץRNN!;7Cl_P&Vi a 188X|Dƍcv9sĝ犖.]oׯRj-#9O|so9b睋 m1sfYЙvw_W\g/2ڸ1_[DnW*m8ֺca9T_Ӟ>#뭅 w?,Y` ݱ7pC,~;.5C }啱pn)?WT=GN -5@X<_;P5sqE5]X2GZua}rzh|S.,7_'tR.qYg[o~x\zqq ,O< $~uCgQʕ?Y>xȜ9G#^=ϯڰ! `G"_34$+"`z99kԩd)y˨Vi@E ,~\~z<cqyš0k83 /:*n;[¥K#=U"[+U _x!S'G?-EoΜ{1 6◿u!3=q)s.kΨ) zM!첃:(yō7ޘ)W^Vf6nx{;?Q;Y_"=wFk?<o sBX=X+"n=_1E O}S#"]yы"#t_5nܘE(kZB$Ŷ>@`P5C-k~ 歗Kg>RatѪj (T< _^@ykʼn's>[( B:Վp!PL *dYwrLZ~#N=5#~?+ʕF-sW:Hz[^w3F˨ !tGM@y >D^A ]Ÿ?vs^WD?^uX$b aDDӸΈ?,}_#񎈭j׬BhЄ@$Ex[K^j#!3Iw^ުFgjTa`+y{fBk'&B MI>n y`אa4A=N;E`՜9y:9wnX+E򯋖CejN�LNݢZFx ╯̫h+/~UM>4qk|ů~:gN~^;sf6>P~Z![Wsl>-mؖ}W>Dmc/}iy'`nUgv5^Q:Pf[I0!2 $52,m^i6iWZWGl}lq\D\sMvۭ~ĝw&SAa6 BHZ!+?<]j ~5,cy.4r>1T<tJT?Uя"~>?lX;B4ܑf~ݺ71⢋:atd a,E{,b=9|z^uש p; ej2Z.#J!PL ڬyg^?h<U.\ay?Uo|c>%O_wF|3P,–P`B ͢BX] tiڵůNȿoQ~z 셿ۈe"*o-Mk̡2N�B ͪe?xOo5Ձ2U;O, Y^͋8| ݶWL28 @RMh7b5#'paq ||{v;瓟̃UW(P`B a~z(pGV/ WOd57X?È5qt~CQBHjxD+ݖ;׽.;Fc0W~~"x"bŊWo0"_t?}zo|c 1ehD lv[׽.b<[o]paX"fΌa]vTֆ]`4 BHj2#",5~CWj;]9@�� �IDAT[`dLX;4!IU[F˽l}ꩈ@X.Gzh9Ÿ`D9$#m+'5Pk'b!fvb5~u˟_>"qK!-m+'5PgFB a/v[Kp={2wozSyI?5WLTd !;R@al(Є@$Y ]t5o>`#-on%QXT+WrsA)S+M@R=_;aC^.C߭F[㟳6y#ܒVN�i-!Ѐ@$U2ڳ weFz"v9#ku!j T!zeʔCeZFB J WjtRIJe{k"~8'@y)@/4k-2 z2SyK>TT׊Ceޛ:BehB $2W^O >=;7?GhkM+!PL Vz𳟍x{#?+#.4S#vܱ3B qhD hᆈvۿ|&Y:׼&b|w2@/5*eh2�WjR |䑈_2W_A_8묈Y:9$bݺU^j2Zr@#*@R^;q [mC|iu-\fCe!gV!ᆈvۈ3">╯8>=^i2T& k'bZF-]>F\rssF�n9찈6�d !Ј !T%"Rw77Coy#">Ɉ}`, ʔ P!ʺo!?3z̙^j2*MIk'JQ`gGwl! hB TS!㎈8`-D @c!TB@ h4T&J @!T~|'oB4*Ov(&IU*]*vm�&-ek'&B Ja(PSF&B ډ{oD>�[FCeB +x";bƌP-L QH*.!^� Z;4&Iu a :PZFUB xgU!h2ZvhB ډ{B`kT!thB xFCnul�(&IUJgNT&k'6R!. d@h(P@ .H \&GB&- !PD trr@HR`F DO~n2 @$E[F7>? ` 7VP(P@ T* vQXSFB ʦ2>Ce e�rSFT*J*@!T֩UĪU!@Ք)cMp @SF'/2 :5,S޴v"0@$U*3Owݵ#kP!,M@R[;smNhX;*Y3k'\ÖMB-@H:Tf-VE̜ىKcVB@$U];Ba *=EB SSFB*BP-�5 zU"!Tҡ*�1TƔQ@$U*ѱ @0PMg3B@$U]Lߑ3ZF5*S @=HҩZFFk !P@ ȔJ%bjBC(EB {WU5*SvhL HU@0ahk PD dW{.2 0 `B ,bj T!6ډA-@H#k'3THij7F˨3@H-!FCeL:vbժi"ڪcūº a~e("Ieс= @r9SvB1H#k'VLp࠵@=Hҩ3ԛ:eԔQHzP(@T@R٦ZFI @$U*e *N�M@RY;eؔ)N�m*Y%&vB(@SNU!@RYtBe^2@=H* BbNB ʦ)nݸ1bZB"M*EB Z?+*ShL p˨@XPfB ,*>\e^a覵B D+@BP` !Ќ@$5ZF+Ov'ICe&0eT(@cECeT&B  )[;4&IMxsElu@G /4CB* @2M@RMCe}p*k'6 @RYt`� $SFtAP@=H#{Bb-M@RMk'M(@cCeJZF&B ,)BXPB H*,J �Ś 4e( IeZF`Lu !PD "R6-�5i2 &T!\>BP`)@3!ԄZ?+2 4#Ie �5*B@sZFQ!tQ2!PD ʲ,J}VBbCe�tє)JgQk'z![FKm%)SmZFB D>\^,{(4uj8"LpW$52@@ PhE  @b8Cj2�T+#X;4#ISFUBX2 4&I-|Q!hGU7'IMx@XP@=HL(@V7B JVBB *@RnU!hPM!X6$mkDlMg/4iv("IeYlo=!@sE-eSFB qV* �TM@b2vm(4VX!Z;*Q5kG2M@bll@H*o˨@0&-�EB ,ˢ4`lM*�EB 1B)NشvB  @R^;!hLP1H*3e{ v( IMx[w�I2*@Hlpƌ-RiTڔe( H*,JqN. 0SGUKJN�B TBMRU!Ԅ �c2ePrDde($IeQQ!覢(2 IJVS!*&vB [ Q@$Ei<o=!@kjD)@C!TejZFs*@1HL(@WմF3@C!)�]VT!ZFB!ԄZFݶo*N� @bZFP-@H*ϔ,Ze H,hBy(֠eB@$EvY? �c+*B*Zp@ �+*SV! @bZFe@=H* uE-  }1{fmb/|ak|8#b̙1{8⩧CƱvB h]GZ5Sz}o>:8cmGy$/_>e˖af͊??VZ^xatҘ:uji2�h !}kZ'vs='pB}o};Xn]s=GDA-q'd,*ZFp !kZeoO<#"b͚5Qk㨣 o|c:BN10НK' ʨZuaz뭱vo~x+^3gΌE}(֯_˗/'|28=ܓ=TFu5CeZ=a=ñq8c#뮻.N:餸O+VDDܹsܹs駟ÖlB5d(lZ=vիcڵ~0.䒈8cbÆ qW??ƺu""bڴiunݺeN;~G=xXxq)92*f` B6OK,%KzgmV_u@E3f̈ f/+"~+_ʈ??4r%… ;qu !@wuB6WEE;׷r-Gh;z~vgyf5ёVXg϶vRDY 螂@h(k#vQuP̲eF=6""̙k̙3'κtw}2�]T'Z=aW:ujc=6nQ?pwqɮڮeB-Vi3]I'_Wcƍqa~ַguV.qYg5\~xzꩱjժ b%WN+L@¬,Zua]~8ŷs=K.|#C}?a|3<3MGuT\tEW7#eSFANZuaM2%>8쳛n޼yq7&* UB֔5OjzMk!`aPH7(N�tQ*@HF(@N�mdN2aCƍ!@)@1Ht[Ϛ5@КF-*@Hf\B4\LoPO :CN˨@О–QB@$3)W!@k!!Q ZL4"hH@(Htl(@Nv(&ɨ$аBh(PO )S"ڪKWg]*ZFb!LuhBAU*aPHt,tMA T!dZFUG"T! @2CRSFB 5-BdN;TF h]QhV2 dN�S4TdPL 1e SF6@2C-t)@B -� md�Hp !PL v {�@2N�$P @$34eT Fg� @2mٸ1bmdn]&Zg(H @о@XR! @2zB5h5e(" P!蚆CeB@$S2*tQR! @2՛g`aX;4 *Q !Lk'֮B*A *[O5Nޥ+C*@B [1cFDa T!@2mO]6b뭻xE�}bz !L{B�ZWt0v(&Ɍe!,Y;d*e-�]SBHfxDo=*�kvB@$µkBv2 A Nm Q2 A n5Tk +P!@2jU!hOQB@$c@ X;dNM蚢=*@!LB-�h@$BB2 A G}4|^_M7'=�]c!ІI?;QϽe>O<D_e<k' BȤ _Wbvn*ǥ^>hs9@sm!|ᅈU`h2  H׿ư7o뫯:sϸˢT*~7+V1etݺQ=f*@IU!}##VbŊ^\L 6ZFP=mT/y\wueYtM|8#|~{xjB exyzxի^'2 Mm%]?jhOR)B(P`Rw1{wf͊}C1uԈxc֬YW )*�ӠeT(8`EŢE^;ķ픗NuLK- @Оk'!ƒ:(Ν'tR\{jժ^_LZjhO=vh ^{7N=xGZF7E]/{}y0T vB})@K>Ο??<я~O>d|߈w=)͛{Wr)q7{}Z;a phHo}qUW~~w~񖷼%va8/+WrT .+G?z*T.+~ƥ^ӧO3<3^_"rp#�к @)yOO<16n<L/ NSF@P(0>z{bɒ%C>8.䒈2eJ̙3})EƧBXvh`R¿뿎_*,~ZE@[ڵ!x v(0}kꪫ\.wK.;N .Nm Q];a LȆ b͚5TgwqE Mo~W}Risʨ !Զ В%K駟>s9'f~cիWcR]v%~_DDĊ+?iW^e kR!2 0~ }s~??G~ztMO}Wyj1_b$jx6/^җ e2 0>5{__7cw뮻.NJ%g>ëIU;sc*|ɸ+c]vkU1:kZFƯ aI _>O>7GydL:5""^Wo~^]^WL ̙3~oٲe6$*<*Na._@CXQh{rK}+yQ-+WmݶWyBx'wQr=PO|U0yuP` Z;c>\sM,X -Z[uQCO&U +~G.&M7'tQSN9%xK_sLr-cŊwWYet,+Vn@kv*0>¸|q'=?{Oڃ+ꮾ_}\C7_җ[o{3<zkx/&j˨2�]f1=׾xGg#w}=@W_=tzw%RlMu}sL*` *!/38#f̘x+b֬Yui-H³:+:묈|+_黾_R !l=�WB+>k_ڸE/zQ/'#U*kA/2ZD_B0^u-N@+֬Y~'MdSFުNetݺQ`|jBX^Ha\ذaèr?=j_CSFǪV !Tˆ@K.Ҹ馛 .~חD_}Q*Bg=C9iy1@01¸/O|"<̘>}z7>(JeYJxz|5A.�� �IDATׁsi51^vme`| 30Oӱ_x H}K%"*}T`bN2 c+-oyK\C~79#<qgī^1cFl1o޼83bʕ<ky4v VB2 aÆ8ꨣ&Md_o}wqggv_Ϗ罾L[JDB 4e`bj!o~sw/#I2WW188wqGxt8#p?BlQ)Z;c:s㏏~/^n!azpu1ҥKoo`DAvZwy=2,kBh !,9Cx+_{o\q)J18TpΜ91IaN;%"\Z>CB01CeLM5u*vi/|!wܹsG}﷿m|_N;GWeYсS\@1Te2@xEJY̙3/ys1<""z衸cړt^Q�WZF:~oo~u},>яv`ҪdheT(յ2 @裏Cel]V  )@{g/P-�WBG}tۓ]Z^;e`b  @wbڴi.DD94 2�30qЗP!} mb;ƻ8VN�idP!?BEcݖm_{7)կs=˃I! Q! } ,J׿>/Ŋ+kv!>N;o[V<T{-2 01uB@8V[mo}[ꫯ+WW\㏏ .ח}Riq !hZ4ao믿>瞘>}z,{Y1TF Xg//bvŋ?_'N8ח}ZFƯpa9a}?eno~q58CϏw;`R1e ¡2އmF@x衇ƌ3#ŋǞ{R)x … _%Lm!o`eT0"bݺuquu]7kKR h�:UP[!,;C@կ~ח�lm6m2-�Uv"�>%�~<_)#DSFZ9Cn]B0~E{c>XB ,)!@5 ZF!LeµkG-�WB4 TJhHBB@$2TZ!Ưfau !PK iiDBe`!LKk'L\2N�B *0q-djU!Qgb!L%2Z*EL�NL!T+cΘ_@S{ZFb!L~ vQipppP Fd*!V=NB |1SF׭3a` v%hHPB@$STQBiP!4e%ɨ$RB N�eh@$Sj貚=Ck'T!L)*�SS!I\ŔQ@$SmmBCXjj @2YT"1 !9CH iBfM6$U2j(PL B HAB@$e9֬v4Я,bzSFZ!LeW!~MBH&CmgQ j ܴ\v(&dYy@01�XV!d*fM(LLB)jd*#tFM ,M @2)�SMd\LB @-H&,JvBΨ ZFZ!̘BSF:P `4HJӧ(~TP@$eЧԅ֬4{ �cCXv(&ɴ4eT(ę2 H ii@0q jj @B-L&b@dhaʨ@0qN�-d*Y%\L/L\3N�5B |1} SF-*@-Hf*�`)@-HȔQ$j2 4 {* N2 d,))B-d*BM شvB%ɌP3-X;&4];18~@ >OG\}#8"fΜgώN8!z\%tGӵk!5*c}5c L-[w^l6u5-[vX̚5+?XjU\xqҥKcԩ=j蜼BsիG`jUOi@>xk^7nwynݺ{bw:(-Z_O%C5iU!{$_-G?k6.^{muQCa0"o|cqW\JV1[FMg^ƺ5aq)'O/_O>dpu;{Iq !@k'N_ƺuZF_bEDD̝;{s΍~:^x5];!ti@eώ>;fϞ]uEDĴi7}4 vZl[xq,^x"eM*�tN)*lf,YK,ܳ>rM.'?;cr) _3cƌX~}Q)r%… 'x}Mt=l!w}w N+״N 좇~8/%\˖-z矏 6įnZE#X"fϞ]>1r9R@ µz=k֬^P.Z|yT*G>/}K,]4zxK^{nn1gΜ;~ҥKc}CUxؚ5Q�&BT״NϟG�gY'cϱ^{EDıW^ye,[lhx3C1TF(@gCHj]4{x[Z_:Yg\sM~qꩧƪU . ĉ'욡ZFBΨ];1P];a([vi(Jums{?+≮ 㨣[nASFBh4TBH*5*=__ϛ7/nW4];B924fl*@2cv۴Я,w%dQQ!HbzE!LY!@g4C!0@$ !@5{ @2Y=tNMqb0@$e Ce @2$b "HƔQD Z$ 5h}ᅈ BNj dY? �Q*h @B �W.MTB`4Hf 2�S.!>Ch0@$ETByugB i-�Ih @ HPFBSFB k'VB5TF(PL Q!HBh1=PC jLjЯ Z;dfSF&_ @g\;Qv(& 5YL]FTKJuB ,*�5ba52 s,t^m0B@$iHeԔQ@Sj2etm_@?s%SF:!PBΫ YY#dSKQɬ�FLHfœ2@=HP *ZFZ!PQCe�:kœ !PO i6eT  h!LYJ$QvB% n !@Y;@ )Un̚5@YE魝�j@2Y!hʨQ@$!BSF:fa)� @BgUeT Fd$TP(P@ )X::h턖Q@$T2 J SF!NetqT@2Yєj 6-@X gz!P@8eJ~@!4e HetÆ�=BtJYk_]!Z 4*#t^B!IT۔e-�I v'IT?V!HD(HZ!,2*t)@ B am 2 -$־tQ!De -�C@ ~*]. ZF: !PK h8TfBnChPD h8TF(@w8C@ C)@ B 嚷k'�B!ДQB4ZFU!Dá2!@w5B k'tG²@$T+*c0@$a@b5{ @ aT~Qn0Th@$Q2ZxP Z I Z;FQP j@C-pp0e-$ lؐ?t^]h9B!I 2~}(t^RsT @ËGTQsh@$QxP(@!4e("IT۔$R[!J !PK n0eh@$ѴeBΫ2Z2 $ NtOm !PG v –Qk'B ek'�(CB$�HB!Db(@R{�j @P-�g(HbBe{!Z I4l-#LUµ @CK5SFt2@ B nJ嚖Q�Q[!4T( IT[F�Q: Uz!D%kpP(@wRP@$B-�30?VQ@$1e --@ B 5SFBm k'z!D%4eB4 !PO Z;HA t%I :C3@ B Ѻ2ZF#+ @ZF+:Ch!PC .0e =ZF"!D Q4�Z IT+ZF1eh@$a(@b-$*ZFҨ B J*�a!H2:P !@!!D%?2 2@ B jP(@"5{�@C魝�HP!D]Rx[�Z I-߰!t; B ,2Z *�Q2B$+5SFׯB0eh@$12ZtG² !PG hxP;*%k'B Q-�!t( ITʔ !HeTLZ ITZ; !H"3e *@-H B R9TZ!ДQk'�ҨCN�B CetG]P(PO ބhHv2@H:Tnԩ=">g HvbTiՊ!�UP%INu~{!Z I!ܰAn*X;2 $NT[FB!D -�SB@$14emG *B ,!p =RDI F$h.g@32�I!2 $jH`DX;$,HL(HbBX6e p#@ HU[$S.! k'!DRsP(@ nv!I OQ+M @YdYI HiD , @HRau3� Ȭ�j@YEdBgkd˨@H"2e 3�5B B-� c$%-�)Ch(PD 0e! I{7,2 BL!IT ZFfDX;$*YeetIB2B$Fnؐ?)tWQg!D2iDBeT1@ Q4! ITBF!,B |B-�UP!IT*BB ,$W;TF(PC Ȭ�HP` !D FB k'�z@(0HbB-�i\;Q*ED:@$Q)e Q=8sA lj {U"ay8gvmc=?>~>qG̙3cq 'SO=Ճ6 etk�nh:2soMk??w\,X VX^zi,\0~>˖-;,f͚~Z*.¸cҥ1uK`b @J%EzoM.;3)SO}3L|߈;/֭[sOqAŢE_z|=~ʈ@h @ծBl[:Z]v!lD^7o^zk:j( FDo;d 2eT HB88(jޚ =eY\2vqLjX|y<qԽ{'%BU[Ά ZFR(jU!o*=' LXCl" *ҋ+.V*X@[pUTŵV*x]B[)ZY4ȵU \QdSv($!?,3Ȝ093O&syLź5 'O땛+Iڰa$e˖qlR[nUQQe-�u]/\Eź5 c=|rtMݻIR~~$)YϾ&5j4imРA4hPu8$q !Bcʔ)2eJ̶;vTDuk6nܨK.Dٚ6mZY׍zI KfRPPO"&LP=PbĬCHQ�F:,;(Q#ƒ%Kt'Wz80BرC]tvܩ?X-Z({hih6lP(b z&+B�a !S[=PPP~iժUԹs[nf͚iѢEq[n^H1(խq`T&rss駟jԩ:wWhƌZvmٶ9shʕ0`WƭC5(�/.8 Tn0nVM>]͛<>x`IwܡSO>9rvڥG}T'xGсjHl !c T֭Qu$[lOӧ<>mڴG}[nEv.R=cal � &^c ^U[I6w*{kI, e1�੨u0p ukT cxXv�,�*A .@ECX:0L !(B�0d%!�xIe�T@ʺH�R]FT@.B�FB#B Ie�N#,;'¨Ie�|tP !�O2jF !�x%j´YFB��<Oj!�$cT@fBXP6 !(D�<Z �1"G 1B� 'h!�D4WN�(G e'Ja0o� $j!((B�037-�e'�D#)KQXv@B�pTX6 2 S&�� �IDATB�01(�xuT@2 �>HBHQ��<:�@^D8²�x"e'� a$@  SD2 J%�@1 JxlтWD!HB!�x#jB&'b` �x#hc#]FQJf5fP@FQ�-�*A YF �fP !�OĬCH �o$eIe�D#]Fs'LN; !-�x.�๨uY@"B�`Q�AZIUL%NYv@9!�O2J �蠟#Z$D  �F"!G~�RC@H !hB�` !� *!D�<QDa!�B !Jx1�@F @(Ja8G",;'"JTTD �e@%�<a2%!�x#:L* GLnJB�cT@F �0=Jx@�@%�<B��'Le7T˖0�P@#]FSQ2@"B�p]F �੨�]F$@ S@�ZtRZD#[vd !�2�*A  b&) !rB�weQ�Fu2 'Lz��ee'�#nq�-!@e;!@9!�L*C �$e1�xd e�az:G @DpFKQ-!�'L!�o%2B�Q�<b@�މYe'�#c,L #2 �Ke1�B#`q1�a:-� 2J �$2J !hB�a !�x.jB'Lt�o%l!dQ��<²�NB Gh!�ϱ0=JxdKEB^e4B P@-�Ieh!GL0�<ոwv�'",L�^Ȑ-[T@Ȥ2�bxn!�x+6ovB� T@�PHڲ�c Df1-�@hf@p@�ɡ>xB�IB 0 B�,f !�B!(B�dQ�GNuBB ]FA �&rapvXv@,!�Oe�| l]FTD 0]Fa@ 'X�|ݲ1�xe'�'-7.�*"DXR:~�RK0(5hPBH @aތ )(�z"(XB�,6e:�ɑlQe'�T@  3.�P1�"2J !�.�@t�teR�x"a�A !} cG%c&Z DfXt�B޽jWA borr$I|B�Igf,3]�HM'2 @ҙB�SI 7A t-B�IY aB�1�Ie� Ju*T@ !XB�IWBB�E B @,!+k!(�'RN~D!(B�IaB�ONDdb ��.(�.bR�q�.R20LQ�O(PAIe� HBf�B i!@ "EEʈHarr\ @! Η$%oB!5*2]�5@EKa% I �j!@HQ�QI l@@YA$rr$IKnD DhQNJ%f8K)=. �,!(BT3.P}lc1c)شI+.IUBHQ�O& =BOL,TT=?_ߤ *?_ڲ%9e$e]�[%U3e$Wvt5. ~te…RFH7WK'pY\,-^잫~O>g{wӥfͤ瞓KڳGڻWNK? UkZՠtRvR>1@!Ҵ53]M bo*M.;h!l?yY>mꮓm$UgҺu,[K;J={t0̤@`͚!͘vvu1c[o6{u_z՜9RVցw|ipqcW/Wя\%ӓ^ZkŶG l"<_,;,33~k74;l25k̊_ ?lt+V"6kl&ˬaClN=͚7wۏ=֬OWƃo6e٠AfMIf]wpeffuӰYFfכ]nK\ᅬR^WEqهOfn_ެ_?=̎;άCN2*2{-62Ĭ{wn{ߙ{ars*;۬Auߟ_>[pS}sd?B�@R,+=Or߬YcvEf<ޫgv)ءo'+(pךkgb|}\㕙=g?3I\oD&O6k];άqSǎf<`~nEEEfGqقof-5swLf,ݻۢٓO}u3fs4ibvfO|믛=fƹC58qϛaֻ{۵+fwv4n;Bf;Hl~Uxbd/>RZlBW^412w2;Gߪ 2=f6pّGW6tGq'ܡCͲcmۚm:^s鷿5KK3?{=mڸU=k>u_~ivn]x߉c̲n\ կs]YawߙM~w]c^.W]B_$ts54ɝ y'>@nPӮ]lYJ]sywo7wQo۠i3Bmƍ'&N4{% [:{㏛]p;}=ɶǗI6I�T-;]5[]oڶ5{uw^ڝ4onfGuiiNDJæn{+/֭[Z)7߸qjU;w}WzRz|6ϟo6c=Pl͛5=#ìK|A~ـkaC+{&opل }򉫫c6vY[kv 2^GǾֹY O?/מ=& ^TGA.>feRK ?]Bok?nQ]~;fKV͛owݝww$w.9s̚6uA*:;2n\kYz.DRt;깻K?VTdֵ ;OZ;a5jdֲ٨QSrô4wҭr<wܹow|w:wv[~m^W߫vV<z…BuBetkc~?9]$}uo7]>md�qT}]KO;l]q;uVS2;<3vkݵzD4}VKw-3Džou&qE */ev9umse4ȬS7KCʕDžîԡ^ϝk{ <Ǿoӟ_D{=#?!~>rA4r7 JhP_<a~},Ջ7vA^\H\/oy:tp ݶ%K\[7W|Y>}I\"bIc),twsO3g#~}c~p-}&$fCߊtu+)Kx]&J*wa ݶٳ+2t)5xkw_wAw-~뺻\7eVtCfcbnw#!pv̘,X`mbv퓦Ws�ʫǗ0p8O]J{_ve?>+\ؒ~- 5k ;vaZw]#tuM \YN:ɵJ*,tA9='?qsõgWسj<w*OQLqǻ_{?z pus%K܋r0x)U*[Z?ns'ƅQyǎu' w |:NnIu.w,?uLK3{yLTxx-쳪q<_|tWf$5��;gٽqh7CP_څg)S׮k-;ذw(v6>76 Wwݯ uA];"VqM*0|^=R@赀 VK,'ŋG}bs?|zf*,~[ix7֤IR׮t"}4kgZۭ[Ks,{V=Vz-7ܹҪURff<InpX3j?o:Ը/8�:UG=Iy߂D"/~![a7Jwqh0ss&Mtu\!(#Å^{o,p=coqKUT61HFI.MN>%S'SxCvo ~wKx{ lIRzuN �8`@@5- --qc[h@@zu飏=jg-cN;MZ-1­g.'t[*zȭA4rd` ,-]h6}eg{ڇ v@2~�* ( S p8<nk8G V#~+aN<ii]lg?n-XU`CTz7: �d] �55ϭJG! .N(5mw5kZ .I) O<\C[@i` }WK~$)i!L#jB�55/z]F&cIe�$]dQ&�B @ҕve �-�*v JFB�~#E t!! �@ J`Q�N�@ h!.�b$]YFF0( �0=)�E !X�$]YQC"!�E tUT�Ų�*"H0]FF(�.B !�2 @EJHcQ�U B�He'2 � 0 �YFf` !�lB!�,,�b$B�5[vB��(c_tP@҅#%q�?,; 3�IgC�5E ta�.�*"H:&uTD t@ ,;@ҕBXv@EB�I)e4YFW2 "jg�.�P30 �Ie�f`R�$]i az:�n#H:@MA !XB�IGQ�,;! 2)�HcQ�1 ;vZjO|wCV)S,pPܢ�uE AZ=2d|I/.pH@�[Vџ]f:s�poj[$IC Q׮]5f>"@B�\h!!M p eۂ  jݺu>84e]F �@BnԙXt:u꤆ lٳ$?X@e�ZQQg~t!6lؠ-[m/ݶ~ $Ixj8sT$-*޾^۷oג%K.p@ܢ|E{Ûu}.4jS;\6???n3c5D~~`̲+Zz$Jnje?}, ppܢٽk`JT7|38#fԙ^z*,,^ X^.Bj߾}��ڦ@Wօ^ԙe˖ 7l IjժUc999ꪫ^6���K{N`?&!w+Vh׮]1?SIRn(���PcPg~ zʶjҤI:պukK���:sh qꩧj?cǎzWfM4���\h!A?jԨQz4rHa͘1Cgyf~;vZjO|S}JKKKw�Iݻuwo߾jڴꫯ&R߾}ըQ#B!]}ڼy%k;8JTh"1B]tQÆ ծ];jʕq&:>U3jh!Ay=#koѣGcѤItkܹqS5ȑ#-ձcGJڴiƍvک[n[v>leggԮ]4~x}S:u|(=RUU?gK1۲(&… 5`�xڰa~iC|t"meufT ӛo[n$ 2D]v՘1c4|KYg/b� jJ7nT͵x⸛xkҥjӦ$ׅ+믿b#Us+IuѕW^anVSQ$77W'pz!k8z.̴iӔnl[0԰aôpB[gfڵk. nݺj޼$Yݗ~[^ziYD=\uIoV DH$;wzQ4`z%裏˗m| a-tRuI 6^zG?X@ :TYYYW9-^"dݺuڴiN9唸z쩥KP*j٣ƍI& B1bvw�IIoDZfÆ jٲem տ]|ѿ/?^gu,XA5J>yx֭***b!jVZiرѣ"f͚gyF˖-Ӈ~t7yd_^w$η^"2 q333j^zW^e_z߿N<D~5k[y jx SN;5m4T2@Z|n&[\s$η^h-S^=m/((({ :v.Lsέt PSc9p0zhiΜ9~)lƍKiӦ͒;Ze˖ 6j"M6ڻw/cXPkv]*=F۰aBwQkdffiӦںuEAڱc."ܹSgV-|a-ӽ{wXBv駟JcP|תW^$I@Mպuk5kL-{,//s0j]vij֬EA *((P~j*͘1C;wywL /m+,,ԤIt駫u>HlӦMqۖ-[_\p%W\3fhڵe̙+Wj> H0F$B�� IDAT7NԷo_O?TSNip?ηwj\;=z:vW_}U}̙3<q9կ__zR_^P0… u]D@OkZ~{9]~ew_qZvw&Mhȑڵk}QmV- <Wv֭޽ʲ_͚5K]tfΜgF'|RK,Io=B u]w_׶mtI'iܸq:.SO=ɓ'kժUڹs7os=Ww}:(С[I*zjmV_[nѼy u%|Q6++K7|>_^pXs*Wb xO>?pR@ p8\=#���@b !����(!����(!����(!����(!����(!����(!�Ѿ}{ :b/~ .yԮ];ݻ7I�@�e,X{W;v{,-]S^Z/:nСڻw$ ��!�_ \b^|EJouQGG? u5OR�� �j)3VNPĊ4yd 88p[͝;K�C �sƌ#IСҔ5kHC+(--Mӈ#lx***ҶmtWiӦ B;vlkF"M0A]tQzԢE >\۷oӖ-[ty=SOK.jР6m={jʔ)1CM6{w@��Uw��+B+WԔ)S4aHRٿCx7UVpB>Z>fΜG}T]vՐ!CʎꫯӨQ_駟ҥK5|edR`u=f/#Gj=z l2iРA1C? �!�jN8Aݻwה)SDm۶q-[̙3%IÇתU4~x?ĉ%I_ڷo_~,Λ7O/LܲӧSh˗/W(RÆ cϜ9S]v՛oYi;t@ �$ ]F�aÆ|ꩧmOKK'lԩSs=W7o.ѣ4hPؾ-[(;;;n{vv;}g=;;[*((t_���pثؒ%I:#o۶+Wjǎj޼yݻiӦJ_;7cǎUÆ uꩧSN1b,Xkr�]F�}<h{tD"j޼x㍄7kl s3fhz3跿瞘}mۦ ( ��8B�@eKYǎ5g[||Νoh׮]jԨQc5p@/߯;Cu-o:g� �j HRL8sss5nܸcǎ>W޽efqcl}:uB_QQQcK,Q޽g��h!�*r$;TnnԩǪ_~z*9>lxzW:urJM6MO>.}>gP(>@})~e˖ݻ8}W8q.䒲+I/ֶmte�@"B�@r)hܸqz4{lV^m&NmUO?;SС 38ce[*M:UÇkz'GGyF71O:Uڵ ��TUT��իչsg͚5KsN+,,TuwoNb �1��$Q4l0=tܤI 5|$ ��Z��� eB����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)@����)<Lh#����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/sample_plots/10m_fq_codel.png�����������������������������������������������������������0000664�0000000�0000000�00000233043�14670056262�0020301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����)���kÅ���sBIT|d��� pHYs��a��a?i�� �IDATxy|LWϝDvDBRj6T -XHjKO QQvPK)$j'5 oɘ*z{9νwwιHB""""""9� DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HT =?[NNd2"##khd2xYUL&ի+MDDd2.]Le׵F1'IEEE+ !ɐXժ1} jQU}|<?L&_ɇ<000-7o*gnnoooƢS$HTcהڨS:Uu?J[>jSz*NJU(ؼy3cccM63f ۧV322B-SNU1x~z-Z111pttԩS֭[ujTu *Ϯ]0et666d/w'Ob1Zn}&(*mC=+�鶨(K,\.ĉaii�`6l ꊰ0C.###3gļypy4jH-8;;C˗/#>>3f@BBӡ_Ś5kW{ƍÐ!CTUy&ܹ37n\jwttӧaaaQի=<o\PhB-mϞ=HIIAPPԖ9;;�_c߾}077GHH^x!p9lܸ| /_cǪ}�r9كիWcӦMؽ{7:uTy w۷oGÆ k׮~'>s$&&-[ݻw=8.]0g$%%!)) +3= ޙNEEEiZ 8q"5k<%%000@\\59u&Lj,@@@s΅<kY=/u666u]gfnnssgG__/b5ԨHS>Ò>}) U@kl_{8v /BXh 4www722Wӱ{j3m׮] 6m4ƢuָtR]1B$$$W^�-[`kRB?vi"\Q(3f tR7777ܹٸqc�Q%ߗZz5<<<`bbFaԨQq6ںg%''C&a믿KKK"((Z~nn."##aooxxx`͚5jUԽ{0yd8::nnnXx1 fVZB;ʲa``xm솗~M4ڵk8ux!ѢE UYfÇ*۷/affڵ�ajj Z+e?˗/GabbOwXZZ[nZ뫴qFt066 |M:t|ȑ�'%5*'@RRwkkkUV>}րHy~c޼ypuu5kiӦHc[bذaxaff333x{{cpxb;v ~~~Xn_MMMcʔ)P{�$&&k׮iӦ —_~ Wjj*v{-\prr!7nCٳ:{,Mooo3f ^~Yff&wKKKXYY!,, /_�\p z8vF~7n/j fffB֭?BǶlNNd2@eŊh۶-rZޡ_o^u-IIIj) |WС6l333t_}U?�///_xx8]Vf}v܉={FFFhٲ%N \L � IR>}`xҶ`�W_}M 6ppp)S#�O077;wZ7M61ڶm˗kA&a͚5��R3*zٳpttĨQ\W " *b_1x`iiiXjqjGL,X�>>>xqElٲ]vEVVگ7oDΝq%xR}x!vLc{.bbb\vrI##??ݻwFw<m CCC 8>ĦM0rHd2 /_|>=z8ӲwŵkװqFׯ͛7cРA022 AФI-Miu0aЫW/ zzz�/"((/^D@@�zc޽;V\zKxEFFb͚5Cagg˗/#99["##aee<ֺrJhذ! �{{{ٳ~)mۆ{jcȐ!HOOGϞ=ann ,͛7wߩ;}tshڴ)r90adddj_ �5kVVZeM_5y4i}􁭭-n޼G"...8\xѪ^uرCqq1x lRƞ={T] >>+WD.]om6dffj/##~)oرc駟pqO@۶m#$$055xWѧO!D 0FCCC%K��&M�jBL0˗/ƌ}}}$$$(**aˏBLL 6l} W^ž}n:tUña4k G$I{gt]V-ŋcʔ)ˆ#`ii;v׷ٳ1{lبԣG>/aÆURw]c \]]qydggk|_-_`ܹ/ƭ[лwo 6 z;#{bݺu/Q򻸠�o&>|-[`„ 8s VXMATTn݊Gj+7DeDLͅL&/^X6g!I>|x $dk׮ {{{!IXvmDEE IR[6i$!I5jF2L-mϞ=B$!IXzڲ+W I{ァ>rH!I6mZѣG$I̞=}BO>DH$ﯖ kkk!I,w?VZu_7o.$I!!!⯿Ny<SRRҕfBPO<)E6m_f$I"Uz~~hݺ$IqDԏS- 4VVVwСCj(ϕueO#FIѨs``7nTKXܸqC<:uꤶBQ\\,rssܷ}999@XXX3gΨ{ Io$ oooq]UD˖-~6Q(uetm(S5v%!I000>TgP(Dxx$It֭|<==uƲ<u- Qu{aii)ĩSԖLxzz_zU<zH_Uw}W-qjF%$Ib޼yjbbb$IbҥD!I<yFEEE޽{мys⢑w^!IpuuU; EΝ$IZ;w I / ]ʕ+_^H$ăT<)4h lllԮ#B!Tv-$IB.-$I&v*By/u ID||寿$IرCXZZӧO>|(ڶm+d2e BI4יq /I**5"!`QzxbuU!::QQQ5jڴi[nSN<xp>|8^~ehcÆ #:rHu{6l�KKK̜9SmWUVAOOO5FǏT^$ -q355ſo_CӧO㯿R+jΝ;We¢B-6XZZj兡C"???S'$$ݻx7驶LyTԩSѼysG"55aaal٢J_|9$Iʕ+5~dik׮EQQƍ'|333]Vu駟mbbCBP*ikّ$Iuϴ7Ty#G ::ј4i<==|I3ں)]f r9fϞ1Zf۶m[oȑ#j:88AeM6عs:cȐ!ji#F�XO6Mm>xQ4aff욶j*�3wCCC>S-B&M47mToeabbJ711~ �oU֭Ǐ﫽/I.\5{ٲe�oF7bXn]Y(֢LX6~xjJ 4B[mtSI0l0�ڝ�bccծ+++<!I2J:;^fffQJ'O~WipwwGjj*N:0jFݻ3gΠ;vTu*WK,Å ЬY3Yᥗ^vZ֜ ݻwU0G|||4|xzzj=ցXz5 >Zi%ϕرF}|.Jn�p 4nܸBhU(K.,--ၴ4>}Z$IZ @% 3 ./l �h}?:z*iРiӦUhaÆaʔ)hӦ �ήJ)UoYYYZ7;N*}ڵѣGbղҺFj;FvzUZPP6mѣ^7␓LÇC$y>Ӵ ;d2ꡧ1r.�@&!++Km}@}NNNw<ߏ `ӦMZ{nݺwʪ:׵K///eK hR~%=QMa@Hϕn6hU==eE۠ڔ____Ikfi喖Myy=k]YQ=l<> PY6yyy�U�2$�wVwm%ӵCm->|t999ԩ"""`mm }}}ܽ{K.:pMPޛ*deL4 /l2,YDp,\PjYJn7|S%7eݖ.] C5xӴ(υaÆDUk-{=̜9W^dux2aeeUPyv }v <G=塸A$Ik- T?ǕھTڪ<1Qyse ENm4Q<d@nT!rKKFYikVT#Ν;ZVcS*W8E۱Tl27<85zSnnZ+\'~-rrrѵwXti,GGG4k .]Bjjj6|p >rO?N>] V;v ڵ+77obٲex饗o>V*شiSU'Ob1g( ̙3SuRׯkx1n߾uꥊݻwQXXs5z(QG5m׶re]S9sFsABh\o5,A !J`` Zj˗/ۯ^ǏX])ˑ¡:ǎ5W8 e˖r 56ʨZ̬p5ػwƲ>X+OQQȔuTGܹsg�pSSSSkׯ_Pw$Cbֹ(ߙԶr?�dkNmy<yU[*qUYXXG;wϴzjS-;;B`iԦM7N՚P+yyyA\MOO/uܹ3 vQ{zBP]}-;;[uPY;wɓ؋ήeggܹsh޼yOPTT{3@D%1 r }}}?_O8nݺh 0 2D� ϢA<x01w\eGP( O��Oԩ�ͮbIIIذaCʯnwfΜ-G.#&&JykdffbݺuDhhhVVVX~`(s:xyyPrqջ�T3F BW~/^p  `pڲYf޽{uJt͑#GyP4i^~e!<<\kW#::}Y_Z+d0fcc!D>SHXZZbZGT(jsJKKS r߿ѣGCɓ'+Ԧ�OY*nlaa!OLy�)ShdrӧV_A{JN4tPյ]Q(ȠrcѪ%=x�>>@!55۶mS+wީL>]G;w`ܹ$IcNZmr&*]F^*W뀀�ǫF 00vvvaffV_={/ƍ#=={ ϟ_}cX`8Ν;#77?#^ulݺhL[b˖-ī|@bb6Xp!bccqQٳ9JbY?`ǎh׮x !>>:tٳg+8 �~-8qƍ�̱W脦1h cРAsĉ2Y~=tQFaٲeر#,--q;v 'N`䭷BZZ{wްõkװg5J Nj�� �IDAT&&&Xd Tﶌ?ԑR7o%K`رakkpssS`XRep,\'NĞ={вeK;w?3?T0>cccرǺum6EBHJJ-BCCѰaC+h޼9HKKCff&ѭ[7պݺu͛ѯ_?pvvVXkkkl޼xWеkWi$ؿ?޽QF<x0~#$$rv킉 kt_|||| {{{\r |Pce>/_v!,, 4@BBlllJ}"BBB0sL̝;nnn۷/q sΪ lڴ m۶E>} In݊ <Xm͛c2e <<<0h cΝ(((@5Fҥ ϟӧ={3߿/"55Z髨tU`eώgϪoI~0dXjtprrBRR:???U [4i]vݻ7=z͛7;vUt }F~aÆرckQ\ٹyK111GبE|\\AAAB&iwWY%\Sfoo/F1OZɲKRγUڼZ`z1bCYFl޼Ycɓ'M ###&ls !ĉ'DϞ=EÆ "..Nd2JhKYFDDh=G ,\\\pqq3gW^$ s=>}ZGXYY SSS'~WmJ!صk&&&ZW9sF~6Ti\ҽ{ļy󄗗033ƢEW^oQcLiݺu"00PXXX###ѢE 1l0qv!:w,4O,3<sU|s :Q*<yR[ SSS-*(> E~022&&&M=Z߿_cJ*㫯EsS,\Pܿ_mbG-Z h\o]B<krܸqU &EBBں1chٲ022͚5ƍyyy?v(=/N'ONuo0`gQ;+VnnnP4mT7NgO_~ݻwP4kLOٳGm=B! -LLLT_|Qj6lP}ioo/.rss˼000CL2Ec֊%)#LmnD'O[[[ahh(Zj%Eaaƺe(|VcAA;vhڴ044mڴ˗/ȧs<z9,I7IBTCƜ9sm2c bΝu6E}k.k>}zs#"Kΐd%CX <x(t֐djsOIšwh֬K/O>a}Ǐcٲe9'Môi IRQ>}pssCLL{Pw jւ[n!&&͛7;5F|FΝ;w߅=ۇ($%%auT{oꊶmTd:aݙ4i;Ν;W\_ܽ{Ʉqq'NСCغu+' w>3?~g k_{{{:t:tX+J5jUAa׮]kT Ije^Ҽ;غu+~ܻwVVVѣի.u!,, 7oۑcccmFRGD<(=z-oQ#Ϫz-( Yr7oo9r�;"$$qqq=zt]FwkYff&:v숸80e9~8^~e,_EիWWhI8͝;1nݺr�ME�hԨ5Fnݺ5Ts!$qM.1 ? FFaԨQ8z(._7⫯allW֭[Z_С9R5e[`,,,УGeoΝ; cc:Q￑^{MQ{EϞ=J9s&̙iϳI&sc@X͛7III/Ns M"LDDDDYv-v UC7|l߾| 5jcǪF544 멍7b֬Yx뭷0f븸�xr(_%zL8K,jU [z^ܥͩS0l0ճnI111z*Ξ= �@߾}P(bȐ!sڦn+,,�+a=k.W^ꫯJ]O <==kzDҒ,=wx.=Ϻ%C *CVVZj@Ĺa` T9p�BCCѱcGlڴ 2?""""""�(**:RQQ�hڴ)쐑^|0ڨGN:_-Z۵{&""""U8|0Ν;a}�M}v\rENRRΝ;j;v%+V@~~>]�HLLĥK��Ǐ$IxאSb۶mj۷lRmz"""""]`˖-Ǹq`mm۷cǎ=z47n �裏?"88&L{pBo߾BzdѢEx"'O$IB+W IM}DDB2dH]Wx.oɈ… QXX-Z`޼y:uj=GGG`ɘ6m ѫW/,Z>EBUÇCeq""""G3n;DDDDDD:]F*�<j=7LMMann^ՠR0 $"""'N 557nܨ=w5j�m۶BOa@HDDDT'N`hٲ%aaa*@P@.ȑ#ؼy3�0(g#55-[ěo I:DϕM ׯGjj*z?m�7n܀A*$ q :TB"""2(=,--�WׄJb@HDDDT|g(!N^FDDDDD(DDDDD@&!88&""2 .]P=ǀ%*zjնyyylmma``�[[[ 667oT++((H#?sssx{{#66媏#:Qy\QQQjK,\.ĉU#H*yxx��oߎaÆ� =r92220sL̛7ϟGF򈈈3|21c $$$ ==|- oUDDDDD劊H[j 0qD4kLcyJJ BCCa``8ks)L0>X�Ν <xׯךUQS(3f tR7777ܹٸqc�QeG Lٳg+>z3g΄ вeK̙3EEE喫$1}tj ưFݑnQQVX={y022 BBBcǎRSSS 44OpBHDDDD.%%gϞ#FU溒$UBPmSW 33 @ uVDGG#33喛___:u ;vDXXnݺM6W_ŗ_~~[~^^&N___kõkװm6|qܼy3 ### 4M4AZZ|||о} "DDDDT<iq&Ox�@NGE9s'O'U}v]Æ +s?N˜1c_{{{cxмys�5.]RZPP�___L:C�3f OOO6'Oƒ%K8 UB"""_@]k01r �pttrqqqسgr !ѩS' <լYT �"66 =zkעaÆU[ֲeK?sŚ5k0k,�n戌Ŀ/ddd�wbĈj �DGGý{;Հӧ//!Ur 333('O^ L2=s oi �]tܹs59q.\T\~]czk׮}RinnwwwYO"!QhIpV֮+WT9dQFk$IS`�>lmmq2�&Mh]޸qc�O3TѥK( t}9d29Xehg2ÀsZe d^YǏ5 ƞ&74>~o߆y*^~]rewڒ]RΝBApll,q eV68U@j /_ƪU\W5h{VVVV�uډ2MNNHKOOBG۶n8z%={�ڻϟє4rYYYT*!U;IrJcXnN8nݺի^H|ZDZt2QkE,,,�en۠A 6 Ac.\e˖�ÇW //ǏW[?~W2+++_2H.DDDDTeeMx >ÇGLL agg\L<xfff0QWWWlذW\Aǎq%$&&O>شiS۶im۶EdggW^N9�GZZVX شi<x+V�'bΝannLݻ͛755_A Bƍ'N PDr% .\9s`cc-[`ذa .ήRV!0p@ϑ 6w-s6mڄ#Gb۶m�gƖ-[*TߏS"///Ɩ-[+`ǎxwװm6i7nĪU`lldZGXXv///lڴ _5lmmŅ]FB$Q:>|^^^8t3DDDT=rssrJ3Q##((iii(..TZ3nb !b@HDDDDT;Б.a@HDDDDEG%""""9t[tB""""""ŀHG1 $"""""Q tB""""""ŀHG1 $"""""Q tB""""9ɐd={v]W ɰz꺮LຮUB""""*L&_`%//111񁭭- `kk�͛jeignnoooƢKj˫Ǻ:QDDDDTEEE= !drL8j{xx��oߎaÆ� =r92220sL̛7ϟGF򈈈3|21c $$$ ==|%zV\QQQiVBAA&Nf͚i,OIIAhh( puN: &Ç"""ܹs၃bZ#aQ""""v cƌAqq1.]Zj憝;w<7n~�222*T7n`ԨQhԨLLL5k֔͹sMM6ň#pyV\ LoV-}ժUd055ţGԖu ƪ�8''2 akk ccct?sSСCVX###8;;cر~ƺgϞŴi ;;;cƌիW#^ZhYfi B""""v)))8{,1jԨ2ו$? jܾ}>>>????\v BBBnnݺӧڴiSNaڵHHHoooo�@n��IIIx뭷Ty$%%� ~�r9:@{Et /F<lܸ}orw $I߿?7oL|嗪nΪrJt~~~000o۶mCffZ.-[Çwرc֏'DDDDT< !x�OZG?ĤIh"Uqйsg兇Xv- Zi& <Çɓ'!I^x899aj޽]tArr2Tarr2 tQvrr2fϞYf|Mt .,7 >FBd-X�ӦMØ1csNUzxx8L k.s_|J߰aѹsgٳ�ٳgCe֏/DDDD5௢pZ/mk40r �pttrqqqسgr !ѩS' <mn:#::Zm1mþ}p�0p@XHOO?�k׮K/ɓ~:PPP$̙3ZvQ_ggg̜9S-W_S&$$ݻx7ՂA�2e Kڵ /_�M7$$mڴQ ']a`޼y`�0k,DFF[OՀӷOkZ/ۇij˭ %6333('O^۞>}7:t耆 j, > �Z[� 88R]tA\\K/Z vl,^<)vލ cǎykmIurrꮧ�|R�vZѣGqqjZ> ===iQ.T?1 $"""m[ۇ@tʕ*瑜6her�ИBqƥnӤI(Ui־ݻwcĉHJJZl]b…HII'N<_2渎OOۡzo,UItR888Ghڴ)<i tF666ZҎ3 jILK]U([RRRP(A5QF6rmˀuU< ^|EѣGHNNFhh(�jٵk*+YU7oIJeK/a߾}055U[ݺuZ˸s5ʥNQ DVpeջgBZiO={hS\O[n(((_|\j5411+$5?~iii$I^vv6xW5+W ;;[#///#--McIDDDDT$Iʕ+kmq'N[n{WU6l 4Z___j زeڲ͛7#==ZxN7|Hum[[[o߾P]߾}amm 6hsd[nA~\\\��iiij]R߿ѣGK4fƌj޹ssέ}.DDDDTeOO QR@@�1|p >111 r9233qAĤGF7oddffشi^u$&&jlzj`РAӧZj3g`֭077:}pp0$I͛7~b׮][naUڏ); 0�0`�p!ڵ M4ʕ+U7jE�� �IDAT?�www@.c׮]011;2d6n܈Dk{FQQlق;jmU-DDDDT%$;`^p̙3666زe ,X 6@OO111p*oE`޽ӧtR;v _}&Mu;"##o&ߏ> ; YYY$i#ةS'j]VڎEiǧwػw/z쉝;wbѢE8s }]:tHmRz�>7 ڵK2~G̞= 9oߎ#Gbƍ7$Q^:|0p!DDDT=rssrJ3|[BHDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDD(DDDDDD:!b@HDDDDDU3\\\j`k׮V*g};wBψ!K&Uoժm�@ll,n޼VVPPF~Fll, errr Y<$I$IR$&&"%%qUcǎ5>ú =#�QQQjK,\.ĉaii�`6l ꊰ0C.###3gļypy4jH-8;;C˗/#>>3f@BBӡlynT9s&\\\0pZ)<7n>c>|u]%"DDDDT(UV�'NDf4{U'PCW,( 4Yu׵g_q]u+(]H1Jo"Mj@z23?gNL2$_/^ss=w8yZѣGә0a:v⡇n~޿ٓ4f̘v{`Z^+C0E׬Yjߗ?|<Ӽ{5HȨ  p, w}7L2ţxر#~-M6p7_pg}VZŌ3袋u<swy�|'n]GBBBxHKKcذa$%%¡C�9ӧOmgɒ%\zƒرcٻwom7p7|f_N\\)))L8�6nȰaHLL$..QFqA߿mCrr2ݺu{%33aVZѧOˀ GBAA!Z?TL&?-;k3rHHNNW\qL2=zpᮚu1yd.r&MĩSph;͛ҥK+ٴis~`ڵkΧ/_D:uq xbF˚5k>}:c 4+;3[h"֭[mOOOw1l0ƎKQQ? ))a}%--krWt<BB  p~g@ls(gzz:ࢋ.y;?ׯ{[jeފ|wL6;ӏâEXx1\smԩSyᇹX|y8x GakŊ\~:wC a\s5|ᇌ7ζI裏Xh#G`Μ9dee1exfױO>�^ZaE  BuPXv�11߯�VzӧO~jr͛GNN]tIOu].b|ٳb`bgԩ\Cͽ4~8n8Zr-,_=z8A &Ge Ԃ/**enۥ)=D  T^n�gIG* y;Ū,~]pe~6o\ �p tW^.˚4in<rmȑ#yꩧ_ʷ~˼&''L"D  T:(qV?:T,7;O=]ڵLHHpY2}VZZj[֢E xgYl-<y<.aPNv!PA:9kpeb!$WUT'Np{L �\*|V:t/-[|r|Mz!իĉJII J#N  oߞÇ{]jRVVaղeYyy9?3&ɥ;UqZ+Chh(\p=3g믿vYѣBC  pL&ӦM#,,|/z;v`РA6aLV\ɒ%K[߿мy ѲeKRSSߪF6n6U;1n%  [n[~7or r /'%%~7҈u+6X.bV^7Ohh(Fk׮U#=z4GM6l޼e˖;vG}Ď;ܹsO?.;DǢEvΚ5kK.v Ջ8  B0L >}ϓܹsyW9s& ۷!͗}}Æ cٲe<<3lڴɯ}xb̘1̟?Ç3uT֯_Ϙ1cXnϓq�|Wn.Ǐnɓ̞=)SyfƏo2HKKo$222 m,Bcƍ\xlذ uAANә6mw} xcL8ӧ3a„lgϞwZS^gaÆ >Cz/7C(  _|0{n �[='1(^D  B-gذa 0^x;Cvv6/rM7E""AA!2Ȋ+ضm[[}Q9k)B*  @nVn֚n 8   ("AAAQD   AARM:j<B  ի@NNN D6�Tzv!!!ݵkC%..d&LS|gReTA 4jԈM6ѱcGq7XV6oLFvbp=кuk4i#GׯL<<^}UmFZZU:   Я_?̙Ì3ѣ'$D", l޼{rWi{_|1_|òBn&۲^z ̦MHMMO>\uUL>;SJ8A( P;wয়~b5A{4jԈ믿v/3f`2?~mܹs>|M  8v1k,D  @Νܹ3bZkIP1LT)L̚5}ҢE �=JFFzrYw,]ZRWA( 6?[233EuaOhI&dffRZZ*ygA(  B0sLfΜ̟3f ""/efHl T AAF7nƍsXqF. _͐!CHLL-;EEE2   u `6E*jPNrrD  P/cȑ˛5kFJJ wѣGX'A(  B"##˗3zh[^1cưxb9b[b رcZBAAA_}.ᢚz [oɓ;v,ݺuorkk7"A:7St+AA̘1F1h j*ڴiO<% 2*Bپ""j  U֮][::ubٲeAhMFBA Ot+k B]ABABA>֮͛k B]ABA"P<A^^M),3. B !C(T#Fkt+jY ;"A:V+dgCyyMD8ʂnE# "A:VU-&JKՃs ? !XԩmpvQZ 995݊G "A:z<B!C0EA!P"@"Pl;ABAB:()PFA_A(BA(UUP "A:"@SZ^s;TbQ PA  )*#-v f"A_A(BБi'@crS( A(BБQ!DeA( /"A:"@#! C(PA E CBF"AA(BбXA%[(UABBA_D tVHIQnp6 BrAA(BбZC6*qReTA L=!2QA_D t!vmPFD A|Ca5SPP3<СCIJJ"$$O>vbСő̄ 8%pbBB ЂAq &F " ^xvM=�0L.9r~~&Ọ>ʒ%Kꪫ(5&Y AdB!0ɔs!,,h% E V 8iڴ)ǏaÆlذ޽{]綾^l6i&RSSӧW]uӧO; fZZddB`0:YMQ ;.PA q6l˄kse610p@ڵkǬYLD F9BY H2* ZѣGȠW^.ݛM6@Z!$D8!z  @&M\>kҤ G(UX,vP& (ssU;!"A_ZLHϢl넇?L7qthp@MF80Z,5ۦ@ r o DGGP&zw\p8A$_յkͶ(AP A|CBFk:TTIOO'99٣;(ugO<<SӭPEeBC!1Q?W%PAf͚¯YZZmBA8[XEe"GAA--HHPJ:dT "0f/^̑#GlVX={;vl L!q 2fs~j=N}::dTBAW$0[dggs1�.\ȡC�x穧b 0z<Э[7nl wM]`6aQ)*#  kqA�L&g޼yL&&L@||<Zo<DFF2|p^{5:am9*v5 GCkG hz::dL "wԉe˖Usk摐ѳYUܷ%%JL%<˜u>"O!- ڴ \Aڇ TVBBDeLkXX=]_Ee@s! T㐙 g[A -M&4"&VkTk s!Z9U2+Jة ُBAQB횋o`Ԩ]H]~=u Uq <Wbu=jAuA"A*Yn�5ƻct ~[3 FPsHA( ُBAJmU/QYMS禶 _\uuwE ; !X,5̯OrrvB=/SwAAp]j ,)9WB JȨ ¹BAJu9۶AVVն_}16 Bq]B' ¹BAJu wrM!CA)Y)VW <BcadBA w0+JZY.j!ܼ~[ RȨ>_u##^Tlsw!Uu],4z UC Aŝ X#o0iӠiSp֫W7@ BE9mT!s% V޽bYm   2qq5/,-`;yypJĜۂ)u-۶_S_q.*^aUgAڃBACa~~巩U/T4Ik!L۶pHQ} A8;A(BPq*K=@k֭б#hՐfj^aŽ/wPXaa<j qA~D T<9I!,*Rn.CÆ}ffնw %nʾ}_ CXVշ),T}UF%dTA -CXWbuSFG@PcǠqck\YA^+Ukm*\c6aueU ͜8_ӭA"A*:*a]!,.;9BFZ7AUWzahWk~ WXaaq>WX,{w`9o6][AD A9d42R k!Zk!4 ³!^xE߷wGԢ_PWGX0#C,VAh ᅦΝ+^C6Aj3"A*΂SӂD-,º*4 B/P;+#ִ#bazVFA  0=˫jD "A*!�*bJQsjhh`F񗑡?.] aeB4<}:reBc!(0UF32` 4oHq*Ps  2aU Th1WBƍ!-A޽P>Y čПs! nP@1TߪQon?>O7:m fD Tʀ*Q-8+ƍk6X|tH:CF+jrc((0!| /mUo Bu#PR9VkCŠL"אQc[MHA'oL T!Ԏfu p݅VgQw\vjk <~~- LA [nr]n "I`򹛇ɓpŰ|y|ž]-6U}#:fŠr),Tv!-kCȐL"WoK#PRAt)rl! h݅ۢ9}Zp7Ao4lũ;zT9zRyB9BB?^VR\aBUv lU5a T"A*:ѹLE:=XwR6i^QXƓ t>F}nj[Ҋ޽߾ uQ &wACoo^Z?,22X9Bׯv~-a uLu] ݻ㮨x⧟ԫBA"A*u`]hQ8TVmԤC)P@cZrrVÒ z|u5!! =xo7P_/! Š[g3%%mBzȨ]V&l43SA(B@ AP �jAXa]FL}2-q5Bf,*5Z o l\]AX\xt�� �IDATµkmqDzf{8}[BzPzB;>pŊ55 u w06bVBF4] ÔWVWD=BFA9_?ck!ugA-47RSߕ<Br֊tFa!4j>[aެCjzXгbO|la,$  Oaqj9ZTEFG!,+S—Qݖ](QKgU ?P}{yyU#,-U}WAjj_~:d49Y]Ÿ~~TtKKabRTTW_D T<O B900&F+.z}6]mDbbŢi%JCB6\(tUjwܯkȨs J(1ܢ!yyq#~~.oT!Ј !xr7A)dT PYU(^2yU˺2)o0H J֯o;a^wZ9] :>_0%E]GӦJ6oCv]2ֶgA !TVBF㕘Cj[ l O|<mFTh]pX$&F -|굲]Qpu.uWGFv`UF׮K/UTTTƸ ƍ6kؐQ-*#WR];υ D hD Tz Q!+rՠ�n:woocF꠾,ArC)ʈڑۭCON@Rr<jk_90.N!'d4/nXa%%NNV9}-[si5=55-Zֲ2߿u4!QABAJUaQ#Ŝ?;cí"P ߆45nMz NAC'A6V$܉'AK,{`rgP_ʆũWC˴iiaBF*6EЗ{bqZ,J٬m~ P] !T 0%$@pMJ<T&d:sϱ$7lP`tr+2 *GΓ }aloan!BF= uԹsXQ t?T-Wz͚^y%?9}Q`zW%PBAySL )#r?wҟ`8iaQz0C'!+$CC}AvrCB܇Z,IWO]u0:AFD(q]Z김f^ؽ:! ܼY.]hӮ!p\A-D T ˆ"P?7 #E jqCC�ҟܞ2�ޓ Ch2z^KwEeBgA!LO?{!t'֭S^j**=.αm΂ПRrrΓժS~>:DVt# CXRRḂ [ !68cFdW%!'CCFss@)(gj CpQP,7F12FCF}quwxr##U.1ov t';:ڳ t! 0!aPocQFӝhCh6*B A(BP t ! D!!M}Eaq!7Wm4xz Pbջ80DG/Szx !,)QʗʆZ9Z�Q =e|]n>꽻B r;A` Br9f:FAآEaRkb2!9nC! !+*ay ar2jҸz_av:!N'иo!ԃv <uʽ#hA譯),TUFfU}v߶휇N70]Ȩ 2,##SR[z7!5d4;0k2zymA"A*q`2TȨ^d tl4iW 4 bsޖ;иoxs |k}Ƣ2G^n~QkBͮڝ <zZ&## aOEaׁQ}}fΜ'AXՐQwQ9[!! !TFUjzu2ZUyB<uj (x hAXSOf6Nѻ7=zؗV eg1^݅])|?FAsE0*?Ј;Ax=|s ʠz_BF}Sب;AآpC_rU;[CؼA(B A(BP F 59V{Ӏ!5WFCF,Ax59s  —0UB ss *+C)bQۼ"Ut Q<(MMQ` B`ƗikSب'|s }!Z˖< TDN}J ! !hACy@gz2ZAX\z  tv5d!M9"<y4 q׾Q>`8JW6C2ZXּ uMEQUU:�W0SUA ]T2!Zz Ls~_B-552ڰ&8\ KK]A?d4*ʾ_]œCXUAaaB.R"A:(װ}ʄ3)AM[M htzELߝ K~[T*8!Aֈ ! !T6dT;>d(*!8aQgAXZjϋ$UFV`*1>Q_g Bw0+1T04TBOaeBFUA{}7VEz*#% osȨ6ZkQLAX^ΧQV2ڰ:8r{{o;A8ir XD T*[T&1Q}ShttCFatr !t77] 4AI45R_YAx*r뭮遰?xaE;ABI}u@JJEe"#?BP48 B},9NL,}LA:׈/x>eaav+gA( D A*܇FF*G'&Fn9O30m69 BI9@5ChlS^]{˳Яl ۶~H(LHdcOʀ{ek5~}ܹbНCUQQ TTe41Q8WQ$9 82*BA(BPTT&.N 9gBF@Seʿ>s!x%u@1/bX9嗫y';Ӫ%+PWW(c򵨌$!bgwC“'= s=u:OFQ_ΝJHϝ8|YVWН 徨HgAXYPBFA$"A*ފʀƁsȨq IIZnm2V*xrf{q#IIj?;*FP¬, FDժbeV#d .ߢ2B2CM߯ѣs9Ѫty u2\e { :-+SY@in-|,Ch:<TCx1WW̴ T o!~P-d.9)]?&B灨9W"   =^yKǏ;w=dr=2E g1c2WUVq.*s٣^矯[ب;5$D}ϘCh KJ[eBF ,/wTmHz;sieaCFS?!ՇuZgA б#|u=ccU< @ Aœ 6tUBFuhվ}mB=s7qkȨэ7dt| ZױXb:s=2wiD!4%E?o~P !Ԃ0<ڷ!tw=!s%Ԃ0<5dxY:̙pU0jcum|POxjȨj2qPY:J ǫM]FFA"A*p=zsmr*JV5d4/O90]g_N*SSEeܝ{2Chw6T`@osarڞ0cIλt WAh}YBFcbkh|u-Zk5gt�NC7>vcoxw?]TUeU u+kACL- B AE罸+*z uChy#,,Tn~EQ%\ ɉS%zv]heҥjGۗ%'4уvBm܋_畬C GO@9~`,0:wV;g |BFUj-dTWs/ B+\wNGUk]Lk^繹j7Av5XNx N<Q tvϗ"A(P@!PCXZ>}],V|TwA<!<s~z0aޞ雧SZ!> &w!?zVL&}~tȨ.R:�YYj]&P9 B=Xw2 N?$&Q֗BpG!ty8GTrT}>|ݵUePU#&6+ r`йү{x}]Sp__ny ¤$ՆBu q ^ ~r< {;&!  >_q}\NQ|nͻo0gԠS'WAXXZȝ_\9OxLOԋۿf7oa-nσsΌJ6t7}/~ls9EExcƓ !}D6}ڔUrL 2Yr| NbUQ *<׿ I|h Dey Wl^1J[#))/!E#vCoXP?UPo󗃛xjSu-3`> ¼<uCgO(0}lj֭ղm ¸8u Ƈ;3vAipF0sLN8ZjotpCX\Vۿ-/}͸㎄^w;w*"A*aX: B=P3 B B0'lxgQb7WxSe$&FAXR^˜Yc`(]!tQPH;۾+_$.2N0a=[| zL5_\Cv3 lZG$T/JKy~؆R\VCbZ.qZ)ZljlX~; s8f cᵶuu=}tv/ :wDJ$K.M1u>ꗸ~XÇ?IZіqsq � ?ً\zr֔ju6/ansܝs9M6'?[�Y3\XaFFBaQ9w|}'~?n1b^= bG+˾|cMEc8#ڏEw䕓t\u_:tH႓¨Y1uݵ!D,aԗxu,? PP1QOb桉xc<AR_O97JV ,.+aIAV 8sv%0wyN-'| h5[Up]p? T O9;-2W]4kaZ2Ҷx>us,e;V81Y:eeyo:wjoF׆]6ffBF]y}Qf\7o}a;ZZnw3|}_#e4n,%HVF<B;pO.𷣛8|}<:N\qӦaX9  𭰌9;I) ^_\ͯG/*ؙ_{ݙcEeZ>@T:a\C9J}gVG<”LO'1 !J\MX߾5#2~t=Cn705m*aڅŽ;N'}=>ưy|=ԝCϡ7]zߋa3q,?OC4OhΒKlg:91dt{2?g]鵟or,Mʼn\gObp0wD{lۦ^=w!~V+};t>K?>s}ՃDWóvfx뷜)N<z7[oap"Y Zܿ~fnɇ>.Ї/w}xw ,+a`끴oОhMnaaF&e&2;O= `=ƍ9r$ԫW]o:k.J\\L0S9A(BPTT Bg0?^Ğr!+o]ITbb &0E>GBR ۫Y&-Ă0{lG]~sva5>uBCB Ԅ38Cϭzo|13i;LN˄L$m5~_^eĿ˂j *\ԝnı̏gPv KnpBAJJ9'mqҙf-1 R2 3UaiߜYk`X̑*xL6AK B}n`Z?HuOi [of5oeO2w\ʢQA5w (GtNLr]xyIJ;OxI L/16U)a2ahX??QaQaAAH:[&؊ʘL&nv37}.}cD-vxDGL&s?ռY֝1!*c.3н~۾}ovu/uA |!|mk}>\ y_'X-|tj[rV+^ II&9&G.y]ǣ>͟gH}چi| Fә;܆gUc jom!}x!T/G |š_XV^_:?d뉭]G,}\r N駟fԩ > p<y2>(K,᪫<T("A*Bw!C?1D%G.ux v1!|S>)#ۏEB B;O1 Nvt g΂Plgґ &P\2F_Wm΁v(ϯߑo1R<>^t7/"cfᢤX~%B> t#㢻h'Le*s7SVOB�� �IDAT0hkCk=?Ԙ0ŞcMK9/<FSuq:oqlc.kqK/.7$)RƽKMôߚݧw+cm̵eV_v/$m=n#"4T?AӸ.7ںHN))X}p5XĿ1ֆX-&RSX-Wb͝vA0pBk+vnUHBBOByy޶JRsWѷ05HVLmB_7_ҁ1!P',!.T{%߽z] InoT ۷Cnfʭ0m|^ZYq{X}QF1xLsoPs �EBDWq5L,V Ma:e97L6>aM|g\ ?h<O>z}?]_&7W gzCrxSFx؈X7sעxe+91ĞQgCZAc2aFڵky衇;<y2/m^z ʕ+y'5k[la5w� CF33[:,ni܎z">>qN)hpf6}vϜ,]<9av,yrO0 J 2tgadX$^)2vܪ瘻s.飻m}<qk'8Axh8M?d{_^g`x؆ߎ+k^At#h;CܻCp􍄚BL81M&rU#!*7,)Gǁܭ<1}zr59]ӆO#"Mƌ13 #!}}>ʜs!Q垖e剶sSכXpd:¤$up ah<1+NǸ[[[&p$|x =Q7?/'I*ZW=qBP6OO8}8]-[9xu\J^+(H Eյhɶ\XȾ}֓#Gƒfń kM)[ʙp \κ 8Fmڜ 4gϕWc x\r^E�c9d%? ::oVXShȇ#?~L,qq"$X_~(y mY@w=L<m-aG;s"xjS/Nv9s.0[SgPFoK翰!}/"ϾV2HMsn3c N<ɿ/� fܹ >T۲Ү];f͚D T*Ch_?6)eMBt p,š|]7>\}նϛ7RLhcRaiy)k f2Itoܝgx?OciCQxo{N;OqPi"KF㻛+!#DƁj3ϯjoK.o)Weʹ]$ Wr23> | ̕\IFA5!'/O<9_^%V2iv6-YD`yǧ}iևT2Ja^qEٴKnmfޮydfBTmˤ�%4@ ¢"pe3 /Krr⯽I1hAAv뇫cׂ[n\jyYd=oBL!6Ѷ 4:{tcDO,>]eݤpL$7Oq$$^C &-*r_T߳9&ږ[':¬HhAo׻_|ba,c1fal|cg_$>lo3ʚHI"B*mL .cḅr߸=\J|99˴oОcgjaւpm1-wW<]ѓ? BKPp'&,Ǣ5Ɏň"߈ <GOrC0b4 1/_N||<}ő}GGA/秣@޽ٴiS]A(BP V_͵G9J㎐7OolvvXn,JTݱ2/gp<z5uOƝ | t&ϱrJBg.M'yt-&\UmaC=l>Vi\~>7~jH4 k7 ‹؜vl?6q]` 97}"Yѯl}%WO%TF'OKDŽMdfO./3Ϥ^x=;2%Geww";fC$D&p]0av蠾k 5':L9ѽqw.ij?:A%'>Q<qrDl ?£EJ"anՇV3c'~x)Oky8E}<2.'ןS/0w\}!t۶8[1ٻ Ԏ]fq0wAImm緻6|OV^9<:*X�J/7=ʪ?WpB]�C0,nǛUqgpS&$) .m~)3dhۡ6g g~l{Kמ= F~KW ޥ@L&޾m']Gq;O顷ibzDJ[}I $dT8[سgeee\{\}̛7'{q[iMghҤ Gh@ A2Ee^=|C[)KQDXݓ/yBs'@ z!|w|4\)r{lIIj}\h+WsBx\j<FCFӃcC UV=mǹ o՟^Jkǎ%neZ~r;>l2J.n^Y yUu`4Li9 5tp@2v/x/QJiY%s:;L\s5'teDDG` m\]]΄B.+[v!D2WGIFAدe?Z.<,m}MG!<u='r~ae0vn79M;'Oz@ț֨ͧ7}!Ԃ04$T r8rĽ lFޭꇡKo]1ɀ]',”SDE~J[mR~8fO;fMK_h=;6!!AXHO^$m8�qL?3ݣaržgMo2*VfΜȑ#=#ϧ[o7xk)Spw_w^g~"GuD"A*!4 j6"O!jdکTL呔DroxjmMr]la`fD$lZ(G ‚;A]ŗۿ;<W%5 ӧ͇g2H>=}݆=Bnq.#yאWǚCk W%\WEb6h4ʊyg΂0=?!\TSZ &_ږߊIL"BӸ$D%0l<ܨ8ĨD Q.] 1`*l�())&:&ۓ?$ttMa[OBP ʁKjC^瞄!7WOAcȨ;A()eMxFLLM -9xNkvAhZm0<\J۶Dh܎>+k^ئ~0nai2�ն)aIIQǓ;@;F*"AY7;QcO"Ո!Q2n8.\7e;�ׯSlS Eg擊T9BAJUCFӎA\:,Njnso fd" sCв*n6!dЈ -?_MF$@m!E s"r^0.^o8bQm5 T0 vv@p%G4mҽK ř !)4~{p'uA#&%LӉO, i\S[)GC  1:2 *p<,V .?"4:(' *SjYL^ڶ3nv $;[m#"B4;;E:5�mFoʸ!4T?,.Vz$qQ-pO03άv<z=Yp|&)ܡ]n]ڷeO,7ϻőș؂1K. xKs<dd ޓFUax5 BOQQ#B 6U r5<ssgeeI7N{t w9BAJEݴFA8o<B)$(Uo^FMҨ3[+A7sL#!ݩ"X'H2 BFˍ|s~:]vaK}=V( OHy Kn?؈X,]j.׽NJ+lEGprxq'A调C<mFDp{!%?.jIN_ep^{哒ձ:~ζ wlryFr]j0,LbzsA#gY6?sqBh.;3vz�vۣIIt90wqǿd߷&inZ(E�ZвW(Z8M(A9ppsMTQp)@YZBӦ6;<\fg2I&zJ3L\uZr_;L V :$ Uhnhw,BٱP *#bQ4vPL]]]zYTMM*++Ǽ+4k֬G3!�Ouմ={B.Vqjmp]!NdспwȖQ7n h;Kt'UG)$ +dm w<tCZok9_gkCI1봋KI*/Uю 3*g~M;Ea^qx{ %3Tf\a?*&foChJRS,,v40uJRYI; =PY)n#Gvl(xUh*nl –ǵrsCB|Lx8K&jm*(TO {=%)80qut|SֹRW~[ 6/ee҂U,B?N} Jmv/qko/##n$S!e#?yI/~+++K't$׳>_|E_^ .zB�kLww4=jyjiq_FW32@H={&h_ B8ym^E/rm @h+ ui0ӗ8頗> J+[^E^uxL;e2 =޽mA>e\GE\8֦f*Ʋ@P-^Ҋɟ VW2\z[cBI6tRh;Ayc֒7AmӦmn"*Y3I%~0g,^ mV377Q+BP@]yf۱ejje.N}i2e4\QVx[hx;14l^;I&[4Ǵ E-@hC{cB(OßDO -T1R̚5K^z{1]tE/}ׯkp ;⦛nR~~N>d;pB͜938I'ު73`YZEEvBpZvI&haAe*,QEn>{g yywޑzs#O Cvag|=͗??}n0ڽg9 GܠJ) 8/Vg}mmf\GOG*99W8N]h[Dn7GORlԩ޲=V՚YY!TAs.jMeT2}½uPA~kk Ma¾ZF=ԒizEmBO<a~MsN|/֭3OD=AY@}{TЪHۏg[[&`}n+Rd m>ߤC-ܢ^{M7f{~|_֔)St7?Q�<H:7zcዹ֮V[3=S90^=̰S =42J7QU?r~_ʅeȳyG3;<w aOYE*=\{  o-)>'{"xƽ 39C'utNtѺC٦<]eik }JrKtg~nwС*#Im9etGutVZK0B%UM#5.qm-/ɑ( *H:(qP2V7?(2j% ɴ&׷g XC* ^Vf/1/࿩Sߐض$uYڶJ[Q1+nԲ*a2mat˨^!ܶ=Lf!-233u7kƍ|:Oe˖Yw֣>4\F )& hgkC}с0gk7dvhhxK2i[omd*F{gC*2w6aS2eT2ի@(Ikךk_`Zrk7::rFDM|UoEDbks랋ho6ɭ?Ce$Sjج&iScPzkv¿eye戉FevJkDR5gD*ppLegdGV7J}y+feE 5f檺Z{zL \( U%{]ԲGzFLJrJ8Z״Zg6-l ?ɗ Bß>ߊ ZFIN@;v1kڥչ'~RJ2^! P*+[g^ ["~9MYg㱁p9a@.b+ }wy\ox.l<utuϚ5pk Y=S5E5ÇFZ4ȽBhXkfkfL=ӑp�a$5M0PPh} _2PSGQYҴ ں?r e*nAR2ºqzo*UUCh+~2tvtnnױ/eT ^F(Uϛ;39CM~5;ޔvNӹ n6i4@XYi~n+Vt o={ ȡe@\B�%9~HBfT�� �IDAT(iRwoNΛvP%մhv?cO -<{ϼlkQ"mZ{ĻOjExSd@;<> [ F/2Q]mڵ )-왨j ځ2DOh١S!tkn5(ݹ6"noޮBfGzzmd:Ѻ+/3/8E2±Q,ϬÇ5Jmv`7{4 O*H*lPF{O\!CcF {DAy6M.? a@zD<O*maV*RT4ÿ ]y=i̙?4 eI}mCep ZFX2E`hP!B-;b(vmrI|YMn:!t, E*/ C)4q#WigN}Bg-…3ך9ѾaE%s=s ߅k` ܿi}Z2-M"eT2m|W9ǫo䄔e'-mӦ=fhaB,Є#(L%34sonr)B#c+B6K*d' KsҟQ{QQ=~)ooCY_G@VwiiidȔ6ճ\6@XQ!xbm*Š Wn.|AQ9!L˨_Zij)w~C;O3O"bo&D={by ".hsud  :Ѯ.B)󧟯āc%Io5C:i\Q fTPkWvumMC-۬-MGJ<E 4ڝGj3kP<A;]&'CpƭFA(%>v" a2-k ,-M[T\Wff=jlؘJ)Ho%r*-5ZF[Z"zw{R,LSN$?:éLk@[Fݸ B}³Β%3|Be@\B�{%,\f3~X:?+73'2e4Q t[ JpBId S:ESͦ51@{w(U�) >T&|@G2j GwY!_<^94R(UT, a I҆W\w¨Bh>Mo<^S!̋6u5 aI^Ԇfݾ+q 1ߏM"ͳ@6$\9dL ou agO k #',{5wn;?oSϖ>]rjrq"$fe+S &=4}y2AQ� xVЂ9\9_PSs_#E}$xiPP Tjkhҫu)id:gaccd H˨44-R anYڅ.л;ߕ j8Q9Ckw fCuaû,kBei޵rPp -مf`fآ#w׮ aqN9ƶFU2*)sd?āP Mu өά]RF͝񾃭 d~?S2*IUA8=&]uHk{;/^U/3@h $J3GP ƍ3dH&~2 .!�Ov.0#+t*?{興l5d׮؅]څT aGuںҦ֩SNߕl l#:jh_4-Jϗ$[)JUV c*ndžkp4j,c&j7TF2$kzohݹ 44Bި2ef3h|/BwkeОE/JҾ@TQ١v@ q~ "єQTN=56۪;Su١ݎHTR avFv9YnnWس%ؿ/?<~ !SF$�@$jݶ[v @vacGNJP2m&LL.3AN/|􂦔MewaqYMx7U{xA)ZZ6B,>mcjT9HUE[If߯z=eCQeAeLؐY}򤦖5v5V;;D_'L!IGW%6Lho^͙Une2UST - WvȒ(?9q l쩓J7"}vn@8~æ0@hNo}+lu155jwAW}8 `a12nB+ !-� !�OEFº:I'nopVҭ:0~Y@״E?ZS|P Lt J3fgo BUx77Ez ’ȅ҅KTۻ۵q$=.-SvFv cI=پ]R3>a$uчKBL}&ezG4yʲj~Bm9jD �UUejG&c)Pz)~˨H_JI }c'Z2g U tkW! ZFd1} e@B�NH{m xl5dNԙr <ca?˛_և{>iSB%Ԕ|hyjmR߁0sW!afCeUS˧ಃ' vmѲCUUBX5CQ;L)o CeI٪7? n_B D‡54hL}!5k#<e2TST7w&et?9x.ū&#`x0Q0I%_-I7�i[FKKC'9 rD@|B�K-(ӗZX!LB(& a^V*+ꇕdNA* n{%h <([O}*>JHDZy2 - vu_-jd–1Rmnљ.'BB W"ZmJқo-$t&_!LFigR$mkaKgѥG^߬Ang:zQ!s DB U {qC >!�OE!SMQ2|q ??PB>3gœ'KכkaVT$wtőכ@h?8lu_!t)4&Bh~:QhMQJrJSV{{Ԙ11oL \:c`Lm2: a jhiPmirpx*fM@h=d[F r3x6۬@ kj~]ve>eךߛD%BBIH@SeԑZ!]T\XG/P["- i7G.*wI-̮2r@]! 7zJh*D!WC`hYy_>Ul,].v=-D E4A|Pz+B SVP2Aݶ[ <&@%M`[?ֱl }ml0ٖ|I٬FtO޲~r5B[NuhxVxЭa8LOX!e@B�Ce* *u]S]pHx5mgşi'Zz ;p [&DC>[F7l0C$ZHd0-i`2-aB)؉*q j܏喩0P-n]vCFe8*N0&hGjlo:єQ)0^P[& Ch b[Fs?ϭ{Nu"•s3ÿ TKJ (-�"m[8V=jh WTT0##a~Y\;A2}>SI1z&Oq#.ԥZF33c.et}I2$W!w]kW뮈=Rh3ԒZ2 {'}O_Vs˴cz=jlkTin$VU$Ic DB)C@~P0@H&īJw{%閗oQuA`"~/1eT|$U®.{<3<|󽊷 !x�<e؊=<hKӖ*Rhq/J99Ҕ)o鑗jUb0Nz~ # MƆd[Fb+-CKJ5A#lka_BIGLB jUKgT͐סB(I͹NGUl Wm{辎}jloLjdeieJIfΘޭ]Bh;:BJ99иaHɄ*;s כ'}RV aSbO8͛'{or8"t䰇@\B�{#ӶGIUmjoKT!Bm6r3cINT[k= $;Tƭ~{ mProS*+4p^$[FԶfewRP=T aS Jf̞=Iz}dd+ɴc+>_?Oÿ >lþ쨡&++ME~﬛N+BZF$B )2jvҨ=-@8 B6lmq*:&%^$%&ڏ-Yn*cvJJf`c{cRGNXJ&TT־1QVsb*1'< p**4rMq39sRC2@6eQ�x)+W/3X!=X}I&BAEr_` $ۿIw{{vvܼ bK6^ux\{t0qT0UTU%svsaRƶ[F%3X0?YY:(%:>}sD–JԶJү.\: &%eq-9jf !-� mp2TUP9J2lpڴ<J??I3bo l&j}JR~V ;NӾ*46pIP>¾*{ B(Ze_ܿjk+N:)ۄOeZF%((?噯3oz1c!e@B�%rG-Jo%&?Fk M-쯁Dl@8-T2B).jٳc22QZjf֙"i@P UF9G|>xϭRS!P]<b^_0i[j!-�! #*R\:|cxzxC%S鉼}j|%)eT?KUWĝ>e;Ppܸs|*- MnvGte+iiJK==ңJ_~m7ԃVVSѿ BGQ}9!RC(IO<!}IɜC e 3\ڵ/_n뫒Q[ U2.$+r^Lnua aVY^vDVS)Bښ=S2:Ҕ'4G3h=^xxpÁ$ 9B >!�OB؉TH=Xvןc'QI:S |mҋ/Jc,>r<̈ZJBhw;Q Ue+ ^kn6w *L K3fHg9q68C >!�Oc'-;e4 |>KBnJ~4kV>_7GQ$w5Vw;||3 Gr4$3z ]ۧB2]q%黿]!xQ�xWDhsgݖR!LKe b/Y!\,>z^!L& |˗? djKB=^2՘|/:$0h+C1T&:|F{ ,+3H_~mKM 3Ƽ2 !�O oԿ!)C-#=#MH>;؜9҇˗L'BLhat /@8e 8Rr–.ӟٟѡdGc'ɴo3=s3~ M8۵+5-ӵBH(8�<*86&{($wtY>)iMK5}OZ$uǛjz|h<eeO>̜v9# MHMBw?ZFR~TVF5f‡͌F6~+y]**>Y; !�O=>ƶ7u(dyƽm㤥KSt)b=7o‰Ss]LhBӫ@#͝;,-5a9 $~ {}J'6L_ R$B2> z*yyA(!2Bvv➊@(}vE�!Tp#m+u(B[NxT _}մrHŶ66&_!<L--Rha²29Ca3IT }vQɴLj҉8N{QpzZF$B ਫ਼(9>e24&v v`*^3GZBzJ{cF$y؉6 j D L'SY!e@x,6m@ oZ;7oNM &2*@֭$^|98 0?(CKܻSS!M0/@8TlOU tCȱ�!}Qo ,ӟ#'D-u I' lpv>luk\S)>~b 0## 6 Rdж2z`߿lu�#}??T3gΜT0l ܶͼL6dTTH6/pڶQZFlڡ2Q��$'etT@(I=4eePcaiIoH0YvpCc*^W "Rg(vuIMM#-�BS=~,5^Ov4ujl`Õ+C e ,.T1ZFTWss[ncbʨ6 !�<*ӻJ--ޔѡPZQI:X2:-Мs P~T 9p3 1eD tC >ZFx*8Tet St^֐+,4-w¡2 af &օn@(IO_=� ^!Q)22 *�<e-nuRXh^e^ =>J&Ll >ږQ/b褺e¼e@�<eږݻmCup8 a_{1t <U}I2 !�OEWG a=zB8QzW0B CSV*grDF׊ @ʌh6c^@X6s -]]Ҏ+/'e4}Uiٲ>fL B�qx*8TffffŒ U}1WS.*өD:>1.Ceh(^�HZFGwuP |s^`+(#E92 ?F׊ @D;1Z؅;02:of� &�� �IDATBh[FS2#ر9v@"B�lݣ B)B_9it4 akkj+ 9jjzǼ7Vd�.8Tf!L(UȳGc  !{GZm(-�!TwQ2* ==T%PU #GmyuyI(DFߊ @Zc'`m0UpC&uwHQ!F*,4GN etD?{t)(0Ax߾V~3ၯmf^w@SQ:TF"ZcFS!MgBu۵+"22qhѷ"VZFG} L PIڰmІ;S;T" H|D Xh665B~ pd2 t_�Ŷ-=BIZdbGG[ R!D<K/sD�<-C04q&L {Ot({3z�Ce0!B$Vjl4lj2 ѷ"V\>[555*((дit뭷-ݗL@;A "55֭Hag>kUyy^y}oD %SaDinBPǶeofv;`"٩{NӦM$]vezGo>* a*IT [J7zUUUE>vXedd(CcmKb0h"""7Q�}!^zњ5ke7<:]Qa  A"vҨ1e@\555?38CGyd|;+R+X!-C8xLJ=a~g#ZB�͛7OLzgumZ_^҈-ZE 5aB˓ƌv !Q[k:!p[uV[N59~}[ҢET^^{:(//Pb&LTU33%ǑHRS#oZF$0# Akjmm՛o+RQa}1B8G*ZF$@8LtuuvI yLitAԩ龒`MHcKc"jkNG(Fߊl:ꨣj*_>%K(##C3gLӕ=v";9t_0qy9aAAꪃVn謶d,¶6*�c0q 7' '+Rzgl2]~;vl/H ("?ܜ6OOA+'@8](mT#3gK/~뮻ޮ>X~o {ZI[=BmX?'_>;0rOe�Cʶ-Q!`9TRH3 ̦ pʒMh-� }>rYTbTS#˱�)z� c' T[+p0=�<e+ pdZ[2 >Vd�<N�pdZ}'� {GQOB�*S; O%%RKKV[+)ਲ਼ !�wB� Q`86#WT3G lQ`xI`(TWK.ZFcES~��dfJ �qx2�OR @4Vd�<*B�rG PZF`ș !@SwGR h�x*8TQ�rT@S;�$ɑ�`ESYjУe@_�<eP!G(")��ؖ�B�qx*8TQ�re !x�<ű�i+2� LO(�xQ�xc'�[bx饗\[bE۾{:UTT ]r%ڵkW|L�]8v�8N;)s1M2%ﺺ:x*++wܡo+V(++K�<*C(�x‘�FN8Aw^ovi?~$cܹs#/R=z�x2�-ZF1߿_ݮ?䓚?~0 Jg?YzZtWy@`ES2Ghȳxb(//Orx}[nΝ;uGǼ1իW{y-�<P�B$999 tgh̘1Zvnp zW4k,KƍƍӞ={>^B�*B�ñƖ,Y%KDܶo߾o?g͙3'uh̙^mmmLx+Ijkk#"Tp -� GB [-ҢE"n[jfϞcL2Egu~iI:::b޶]oCe�[&LN[EmhzUTTP CCeh�O8rg F 6(//O*,,Tee^[bf͚+x8�eBaΝ1YFtꩧo;Ϫ.xۋ/k…\끂 !�O)@�8SF1r\xל9sTUUw}W?OUXX馛O5\뮻̙3x4~B� O(�xB {vڥ{G_ .ʕ+uanz5ex㍺5|d`*�<P@Eg\**]uUIӵlٲ!2�2RS!�8B�x !�xLO;Ve�<�䈡2�#Y�B(DXX !�xP� x2�-qppG )��oѕ Ve�<` �xqrI�x !�x'FbUc �o= *�Q�xQ�C(XT@ �/'h@S��C2�aUc �/ٖQpC )�h*�b DXCe�[; !�Q!�/Q!2�B� a!�B� �ϡe@|�x*�)7Q�n�<E(�xG(�<ű�-ZF$ª �ǔQ�x !�xͥeVe�<P�G@|B�KB�}=�x ��^p -�\*�B�Ce�$B ీ|�pDXT@��H@S2 � a!�B�B�G(Xe�<d+pC @@C�d2 2�1 !�xQ�xƬE8v�D(DXLe !�x&x!-�\xƶc'�3>B�xQ�^p {`U3~*�e@"B�{�0* Ve�<c[FC� �x&x!�<cR!@3CeC2�a �x/8TQ�.�<ñ�=Q� *2J�ce!�0T�A(�<le �xQ�*�Ceh@3=�dU�R!�ؿ!@3v!Ce�;H@3f!Ce�K>�HU�2 �8v@|B� �Ce�$ª g8�*B�.�<cB�ph2�%)B�P� xQ�G(�<C(�x/)�`U3;�B�xc'�{o.-�ܰ*_-T+C !�0T�<=�\xQ�^p -�\*�* !�p�xc'�$ª gP*�%Ce�$@ 6Ke�,2�PpA tD]tQm_W4uT͘1Cg֎;tuQ�^&-�`U? zGuW׆ t-*9�2�L G7oӃ/]T'Oqm߾]կxc'�{`zZFaU"b7o^I&>*�c(D.9=S zuV͛7/x֭[UZZ+L!�2 ZF]p r577kڴi:ӂ֬Yx)2J�2 E] =s*++ӿۿ)++KgK_R8ء2w28@^+WG|}ܹ;wnە駟ҀQ�==�ܰ*ujܸqKOj$`ıCeh�|B�.֬YkF~aeSNя~#<`D �72 ^GqnFΝ;_JǏםwީӧkʔ)ꪫl2uttrme!�xT}T"(--Յ^G}T۷o׫/~zWug\ ,<t_.p` �x uB >Owiʕڶm~oԃ>Kf-P-�`˨ !XLj-^X/Vww}I !�xQ�4իWkɒ%-[L'p;8{rLUVVChI� =-�ܱ*so}KooܸQw6mڤ@ 뮻VQ`�BQ!�c'85kӟtG}T>OVҊ+pB!0� ZF;Q٩t_F]۷Ocƌ ?As ~suyLO(�xQ,Yo|r-*((Pii9577RUcwߕ$7ЩY>@1T�P~GW^yEu^x?HSF]s9ѡֹ+Lec'�; *@r>#}_cZO=SO?a2uX[uGΝ;_RcǎdI!P!�ك*$Cח/_y)++K4m4mٲ%]rBEEE_ݻW7n… #2UtYgB:#t} fQ!�2nGs{ァO?]EEE%\]v%|ɓ'$iʕuohhPaaaj?4bUbz\|Zn⊔˗kΜ9ڵknf'?u֔, LR@>B� -t N'x6lؠ;C_{9͝;W]]]q_q͜9SsUmmϟW^ь3s{]ܹsuqǹ޿a=#z衇R1t%hz'Rpb[F}glQD_?xuwwTnvi?~$cܹs#/w}̫Jz4{l}[R~~$iݪWա<D z1{1رCv$EyyyL3ňB(�x!B|I׿S!|'5`~:CtҸP.r+**oy=3g~ӟOS566O9昔~?O*..֖-[tYgi*((З%s=Iҁ2�=2B$===ꪫt嗻onݺU;wGs1>o? 6ѵ[o F֮]KZLwG?N_~u9.ӝwީ/w^=c)x@:p�x2x}z}}$iܸq17N{QWWWprh{G<va*++y6M7ݤnI\_|gY׾{W9S>kԩ{ת4EiѢEC~@2- �Ϙu#?-,Y%KDܶo߾{n|ͺUQQ6mmmeghkks OzgURRq #HL'1:-ZH> {:!F`h� !-܊Vٳw3FW]uUܷk뎎#&ZKK/0(Jٻh�2d~{Wuuu٩͛78*j[G׫µ:(I't~!Ve2-x/###`7`KҶm$I)x@:P!�2d֭u[b֭[:HzjkkUYY_=1VXYf^xu]ڳgP~:BI7| oI~N>?ϕN:)H{Dǩ�gb$9#OG塀Y)SH?|T]]]_|Qׯ׿'NW\o~< q9!LC t-$| fҥ^zH:K/'M7ݤcz~M@2L�^ ;A }1s=:+xM7ݤ\'|߿_wufΜŋ_vm?~fϞp$u;x@'N?~Z'Oֽޫ:ݗ?�0كb$s'f}1~x˺t7*''G׏~%ԙggy&XqرCwy?hӦMrG'Oּyo~3fK*dffG#o#wl˨HӧkٲezN͟?TA2֮]#8BsJKKpB]p*..=ܣ#8BN/8gwlhCeq B_ӣ^{MsL}+VмytW꥗^J(4B�Bn]x׾.L'Nt=a< WzB+Vз0(I{Z~i24Ce�;vaCe|$YF>8//k]TVV*///$>;M �ؖQ*@rq]:]\{tkܸqm۶Mk6MWѲI�!'GХPҏ~-t!s!"IZnyM2gـ2 �3r`�G t 7Ľ_뮻n(/ qz8v�<g*l�6lؐK�F !�xQ�%M<9ݗ� !�[F2 ׂ =-w] 021e�9�!z甓cJR4GҨY+i~�;؉�pA U[[[j̘1u9`p*�޳3TVe>c֑G[oU&L>9=CjjjJ#Ce�{H@qtIOz=*//וW^*wyz'ޞKX=�2 Ve.ugkҥjhhЃ>۷ /]wݕXvʨ#*�`Q�. ttthzc�� �IDATgzjjҤI,P�CB0JOO-[/˪ҢEޮgڱc.t_"pi�ٖQ*�0e?=czǵ{n͙3Gwq>k̘1<`DVi�ؖQ?Ce� :yiѢE<y?}:(8*�3]NI9�G ֦zJO=To8zzz<*``!�xT�@롇J%�#^)�9!Wt_00T�<G(DX -�=!g �c'pê g8v�gg!�7B�B�B�*;T=�ZF$B ZF{ gbQ�CHVe�<ñ�=2P�n�<P�-�aU3~;T=�ӔA(�wB�e�g*D !�0T�9�aU3;�޳-ZF CH�c2T;Ve�<B�=v2�x>;M(�x͡BgC�i�\*�-�&pG *�|B�nX N�@z8TA �B�H�pǪ gl({[8;!�D(�#'8 �xe�҃Q�X_;�P��<P�HӪO@,Ve�<c!{[ ghtB��<P�HZFê g8v�҃Q�x2�r�U�ϰ�Ñ/�# SF ]r�@3~ZF -LgB�XL @(�Q�qxNB�^c �w�xB�8;gbQ�9 !XB�B�Hs!B�X -�|b(�7B�a �CH(X�xc'� =9;g8�C2� Ny|T &AXT-* .(*# K{XWlֺ7JV\[)Zk@EH$$Nfs'~5p0>}cH3@0B4!�gh*�A!C 9fe�'#[!u$G@�@0X@*�85� ! !�g(W`xH3p�B !33�i(�$ !D� !@f^�13 B�:�R mh@@�T@*�1ԭ�pQ�03QX2d5JFB@2� !pƞ&C�yd<2�pƈ !�!y"C ff�1.� e@R� �Ó'Q2 B�P2 �%~�cf=K �pʮC(F$ =3a�#C 9ff�!C� C B�؉!�]C643T�@S�03 %� JFB@�`'(�gB�p/!dG}qƩo߾ر5b͘1#aO>DGVΝ /P7n `ԙ-;�sk 5ʠꫯm6]|ٳvءٳg ._|nITRR#G[n뮻T^^S?ԢEԮ]A@JF 2\CVO'/СC#D;SZlz-I:#5j(=0ag*ff�d�A(ڲP(޽{d̙1cDAI:տ=sA 3c!B�%hkvء;vh֭zkڴi5khÆ :#7l0ꫮ8ò� Q1W_}yIRvv|A]veRIRQQQ󊊊yfUWWsaB�p !�#d !2̙35s̘m[nmyW]u9]V3fĉ.HJ***pƞ&C�E2\C 3~x?>fҥK5twA頃$:餓4yd+//OTUUJI�pQ�F %h:,mݺU+VJKKOv0 !�( '(E[嗉B!KZxq~-azx�gXv� Q2aÆ ۪SO)??_d3/JJJ"͛7OVҸq㜍5B�c<�8G(ڊ.L9rzuiƌZrO,Iҍ7ިYfcդIT^^O%\OY8c<2�!D[q~;mڴI]tQGiӦ㏏׻wo[u+''Gcƌq8c � !d\qqkyD[�2<;�Z !px,;�AB!3d�F(Tp !�2�R! -U" �"R2 !�( %dcfpl �N C@#�p.TQ�qp(,!�h* B�JF �Y!JF$G@CS�%�Raf!! P2 B�Yj�;Y~Q�qpǣ � !T8ò�Tkaf!2�%�# a �ЋQ�8D(�!Q�)03d �Q2�p q\C 33�@DP2 !�h*�A T3/~ B! 4(�-P2 �CH(82TIINuؑ �@ (Jv@r^{Fmܸ1�-e'� ~SJFcfhΜ9zd \` �%�fZ]q0apf2 �3dġd4<ꫯ=�-8�Mea2�bfM6[oխު&?oڵk̶k-=D`xC�AG@Anf+hx 2$MZQ !�8G(T3ĪU裏PIIId{eevܩ/R]tQn%{@( 3Ě5kuW-Z+Wjה)S&@coM-B�fA矏io7߬m۶׿� !N�G@!ui%lկ~%IzH@D(�87d@j2ydTІP2 �Aa�C0͟??!�-�/%C 8K@X@*�8R �΅(!�'lc;C(�2�R! R2 �A_ !X�8AS�N$ dB�q8aOJ! P2 ff� �'TQ�q8_CH@�eQ2 B�N]FCv�Pd !X�8ad�@@*�` �T&LS�qp2�HSC(X�!dB�p/+2J@,B�NBJF=! 33�Nئ2&R�pQ�p"B�p.R2JQ�qp2�ϓd<Y@B�N�'   !]F92 !�'lQ(D@�j}2�p/8�sH�'!$C�٦2!T@B�N�ǮKO@"ff�` �TC@pXuNk:G@ JF 8~(B�pQ�NdBB�q8/;A�KFY@<ff� C�dd" c@S�=! s�lu$bf BJF=�H,;�d@*�8Q_2J�\T@B�NÒ<�p.;B�p"k\B�8_CHS�p2�R! e2�- D�8_C !�QC@B�N׭d!�( 33�N֕)q !�G(T8g =2�R!  %�=ɐ!�'jvBS�pf=2�p/e �p/(x�8 �/ x�˔B�%�R! DؿQ�p.;B�pֿ2�\($ْQ2�bp"̲��H�'Q�{d2�p"! q�( 33�N�o*C@<B�ND@05�p"d�!X�8A(�x2C@ �`y433�N!!Zŋkĉ8p:u>}XVJO>ѣչsg /ƍufz�� @<y Qns,Xqi*--մi4d8p$D#GTnt]w\SNՇ~E]v$~@ �.h 6LaLqq [O?$;TEE-[޽{K<H5JO<&L333�N%,;�1!2h JR~4`�X"mΜ93fL$?^s=l!�'F!�@ h*׫@fmذAGqD¾Æ Ӳe\113D$C5�2hf̘kתXTZZ*I***JطH7oVuu1f2!D !%� Q23sL͜93f֭[+V/׈#tEI***$I999 FE@ ?CES�Q23~x?>fҥK5tFn:z֭fϞY*//OTUUʘ}@@c@LHƐ!D۰uV|*++o=zDKEh';2d <!DWYYcjz7t<ޫW/j ]h;0WCmp6엌!`T_mmpB͚5KGuT:,K*))l7oVZqƹn@$ģd�S2h容͝;Wcǎƍ3<~KnF͚5K{&Mrw}<x. 8Q!0�!D|rysjܹ1y {zKW_}zh̘1~0!�'h*�Bzo kѴ Da�ɣ(�8Q!B�]F$" !B�gBs�cf BQ�!2@ <!!�'"%4x2C 33�ND!"C�Ah* B�N�@u ~S!x\C !�'3�!$  s x433�NԆ@<JF$A@ L2� ϣd@"ff�KF=2�JF$C@ L!�Q�p"%�!�'uMe(` 2�bp2�Me�$ 2\CgjiG]5o}n�Me�$" Dؐ!7qt Rii#i=6n 'H?.2J@,ff�0,;kv72kMK&]}#.׻Me�$A@0N�?_nQ9S߂Q[DZFzaiӦ`DztԡVwDz�p"%;vH&udfiʔki$iŊ嗥};˥W[kR6SAXYD:Oz/RHti+5F;qFi„̸=t6Ӕʗ_J-6FzS$ϓzHs{[}2IEE}eCa뤿=W_N<a>KAXYT:TZ>}^2�p"m;{Ζ=k2%NҥGl̙҇Jwٲcc髯SO0@O_kOr˾oP֭]@^}%^'yp4zt6{ta_-}4dtRqsMM^h* !�'Ҳğl3/.yt6S`vt&fxx;vH}$k'͞?))ޞ{tq-7W^l曥Xɱ,m5#`R> /hF8/71dh[j{ԩRmmx˖CO*}zJF$C@ A.]*]pt9vb;x(.^,v^s6icl0:p4h/~`?ftU3>v7 EI;w8^ynoAկ矷ϒ%RAt-A7O1Bk/ݻV}Q⾟~j!.ԣct!R?ҥҥRǎR*| Pf)IH~Cu4AqI'=L^;lf9 6+ge "{'|[Dj^&)+'7ߴ匷n'Ƕswmj3~:f%/d3gM8l?Jo+vr{"gO[f޾tQQaϯf.Gc/~%KYY~E& HXʖew萸I4kVӻ(ca'MW6s%Ҝ9v_7G Ԇ 6ٝ@nbKG?O2' lO[6z6s≉;p{wo ֬PAI',-^,]+v *@쵙~f["ZRb.]K/l˗lѱq6 鲴vR{`ѣ؛Q6:�! i2_~i޺vܽNo3#Ҵ^ 4c@-97(}Iӵy1cl0ݽ4l͎슪*v,I'V[y=Y5hoim3ܾkw$+ز>}il0ҍm/mKm)=7Y>|p~Ik¾sLk nܶΛKeeʕaN-w}&ر%d" D.;`];{S oұ3/`'\дxqJ6{lU^+VWkҾ?t֭ϔ)v:}te[rV;6i /}k`Sf^ۆ>'7h_6md}٦%۬rĴjJ) /ٱl'ަMG0>cS dCSOҏd~s!{A^*(]2ҿm^^׍ 3l`~~yyvrluu<cdocfϚemsjXDn[l9d3^&εܾڬ꧟6oOdGaNҟ$]sMb磌l6?6pٰ{]F/ɢ"${ndIDA߾FХ?lO�5\iNK~d4~O Hgʃ'\4{ ow{7lhn=w Q�H Zdd,YPFyFعc^`c9yY֘PȘGmxc$c~ژ2cڵ3[[kwc~}yazl�� �IDATƬ[>?nsdg?t`L.쳏1_#6fcFJ| ÷}1basgÇ52ݎg7m1oI'ϴ1<`LNNCۘmۚ6BG+)~ׯ7{Jz1e߱T-2&+˘[oݵ緄瞳c?>~%~FV6fs$}YVW3zWcz6f7~oFc:*^j4;yЏo0y׼-V_&)d*+wޱ5p y!;'g)$׿c~͛o2}%%7Ɯ{K}Ǐ7f㒌я26gO;߾ݘ0>2}{cn=Xz˾Ϋ&>VYiL߾ƜpB+4N?>o'既 o'~~ /s䑱JKd?o~S57hjߘn]}ac,1njR͛ggܹs5+V˝Xޘ'hee6w_c֬1櫯yYc.Ў춲2{2!;ۘ'l`}/nM&o40ui>itLUMU|v[[>,0Zmw}6詈 ^W'Nl}ac.NnŘ#m}{<٘3m&r];=4gf+ ڵ6x\|˿m<٘Νm1iIe?ٞ3'3s1:?L_ך9(jc~Lotڝ: v:}|6v{8l'o3 7/_n8<G(dL;N;w3l1'ϾUVߩflQ1ݻ߽T߹ l)?$>d>tRg5f 3߭dJIdvӦvԴp6ocj߼f{þM`1u[&&IaC>N+L̖U46u}m}>Vr}6oNiʲAlْ_u1S}6S7Θ_*qB'6 ɱZմoXcv5fٲ55\y}K]#96vSTdAM)U۠fV)SR?~?2zciS˼vcVС6wݶ,z8IIlV/'2+_g>oeÆ~V'Tn9}MN<|e1oH׬i5/9& N VsC_ �q" leAk2?&SS[Ӽ'^v͊gc2c7; cnN֘g861i{u1_n'MQ]ݴ>ݘ,qwv&NكƲY[@c3Bf'mﶓUUif2ͳc m]=fCmT~۾~CO~bd׍c?a_c]c2w .1gak/ f>Hݘ7Ϟ@4(~מ$ٶ͘[Yi3۲d77lΌc˩[M OlgG؟Kɂ%K>琉?3oٲ? q" leAkr͏&SnFhvl3&Ler6]V1]ˏ% j9h%'[MqmRTd̂EƼrƱjlgn|߅ ~imef)s^>@(uG5Ӧ 993:+쫩 dmD;}͗_4&7מhׯY[t z>{ۍ~_N8fsr쵫ͬY]~:wY`vmVM8`J63hm E-�-9[,hMNQd):NU7sJ}wcT}#yCK{-{֭AXU$u衶yN*۷s5o䙴իmvS?G^Kw9p'Z_Ҙ+~9Lw+*lCsʖ-.~~߻`gx-g׭'<]ima^|$GMMm/Cݴ>�s\[1~YКۚy9{m[:ڳnC]$ v2lJ}{.k h({6Mv&/mp4 c>$z>H<k;׿usΝ|hOJ>:yGuk}skv=q!rq뭶:ΡWL1n2s\XaL3wޱ SRVV.]>.8 c4{ۅw>li6뷅ԩ}}'?ixqC?.*G?:.7:wKvQ. ?j]9<LҵJ#ӼiN?]:@{ҹ&׻w_Kԋ̷EEߗwޑi͕*+6<OL˼6c會;NǎMߠswkwYgIIM?a;ڷ߽ΖK:L7N˥G~Ad㎓֬rrP #S6{ePk/)//Ls֒rr͞Qe @GaԌ K#mLHW^~[餓l}׿LO>f ait>'65Z&Dj^(unc6-XǮk(C(2�b!izhyuWzK'sH_K#oz͓+M,pCrQ\ڞ$:)d�Ƅ5(mSD0r^oi"\q-eɱUU6^<ɣd@,jd�86>twPh;K-iذGd:vJj.葴}>l4yd$ C ; i9;_e@Sr HEgx !d ·ޒn8#Br9A� di* %�hrS^.Y��h!Me�$" ] 6D�^Q�HMj*SU%}m(�5)2%� 1e'>̮տA@[@(!x�%dW�Rvd()%+WJ;KfP�e@3p"l\i4]g!dB�8a[7!CH(�?CW2<#C !�'< !�`׵oo6+:dŚ8qN:O>*..֪UیiLYn!�.ϳe!X@zs,Xqi*--մi4d8p`CvQ#N'>`h*S!Rm�u35\aÆ);X w߭~:'XO=!�쾤=)6ae)+Q@d hŊh9F,;rԣԥA@[E(& gUPPPbȲ4$CES�If3fhڵ*..z(nF2�2rrCh�,JF3؊+tkĈ袋R7ydu5f5~th0�|BC(Xjݺu:Sխ[7͞=;rV/x@C q8:&{~T^N�ZJQQ�If[OVYY~m#!2+W{B�hIʄ(aرczj:"l*r IvP�V5!%�fZk…_:*!-N@= �}RYY̦uG@A͝;Wcǎƍ3<~42`cR. �-'Yh.C5�f˗<͝;Ws΍y<BjFa~tN�mZҒѺ2B@Aϟ1255C�Zh"1a):_~)UW@KJ()3,9�-Q2�p$ESM>�eIJFYv@2�j*cy,9�-)IhV %�p";vH:ؠ�2T@2�0 'Bs? �huH#F)KF;tp>�hrsp.S'!%�pf(�쨲PȞ S2 !�'R.;A@�-/7G5KFkd# I!�<? ֕!e'e5X2J@=B�Ne'$%C B�Nl*ò�򒔌R2 !�GLd2 !�d%4!�'dh*�N$2ja�B@ 0B�p%I02� Me�dº2a�B@p2�CX! (�I! :�F&1CXS#ɲ�ҲMe(#a)>CXQa@MTQ�Q84Cc' :hso߮g=z{oB!=IO4zhuY qF#|�H!�Onn.dzmذASLѧ~;L.kURR#G>]wݥkV/FjhA�$k*C@�CmPϞ=n:u]K,ѰaÒwwB˖-S޽%IGyF'xB&Lp9F#I fe MeЊo^ݻwwyΜ93fL$?^s=q&�H! �O\S?CXCSqk֬ц tG$<6l0-[,Qe.B�4Te'�ŗu S26TTTTXQQ6ouQ4�RTd̙9sf̶[kVU $<٧]v>m!�'h*�ŗ!D?~Əmҥ:t.f^]QU _eDIpKTlY�eŕfE D旊JKKOv0 !�'LlP�hYFdm[^TXXŋ'<hѢ8LE�.4쬳K/ȶyiժU7n\#<\C pk  =!(E0m4mٲEk׮$ꫯ$IW^ytoQfұI&\wK.$gB�(n�H%h~}嗒$<Ӆ^.]wz뭷tWWNNƌ￟p¤j*C�# %h>&7`�kiM5�I!�GBnB2�pv%C�_Cg@B�T�J! I!d �H!�ܠ �#)]FG@ N�@z,_26d# Q2�NB@Ȳ�pT�ɱue !!z�Xv�T@2�I!(�eCH Nw�%C B�nxئ2�#ESZB@e'v,;�鑐!`2�p®CuB2� c0Me�D# �ҋu4!�GR@zĕf!$8ah*�nŗUii* !�G %�R_Q�Ip(DS�p'Aa:dD# F2,;�铛TkD! IT��Z^NMe�4MevYC�@͍ZпQ�8T (B�nx&y�>Q% !Me�D! N�+dTA@ ## !�$B@ /P,9�!<I&Z�B@$N!j*cץ'C !�7R-;�H2~kD# N�sIP2 !�7<#Od$%dD# %�\HZ2J@=B�T�KR2JS� N�@zECHS�H;cd!_ !�W: X�Ξ6 Er2 �J]Fd# vbH;w@EJLHFd# vQLE' 8�QMev�^Ln]F" v52�FNC ! !N�@zH@H(X�Үd !�8gd@ B�iWa!2�F !%�H;+2�X|@HS�qJd B�p#d2�HZ;Xv�zC !KZ2 I8*�!THF�H;lt̲yy �#aB�E@ jvYrQ�puwh* !KT�үkW{y 8�o*T�/;[Mڸn5�bH;<s҆ (@w%C�E%�bH;L !�WP)%C ! '+ pD�!@E%,;�De%!@T�T !(�/4)/:v pD�),oC !Kh*nԣG#=HA߸2�H2UURϞ �~y X�Үo* IvcQQ#=HTPd(@d׮1B/rL�5YB�pcGƍB2"C!3œ[G�{H2�He'֮~Q�@E"dB�]dىgKF)� ꖝd@,B�iB>C�p.CHS�]@ mS(@!d�x¬C !+m_S#mL�\+,6oVVX4@څtz@@�nH᰺Vʐ!@ :!%�Va!C !& !�UWE@ 27ors]�a $IՔA@ 2lE=/[7)R>%�H;yM) deI{j!P@Me @*)�6o(�.CH@!3yd 8*d@B�iW+Z)/# jJJF" vVJF ʯI(�.lz !�P{Wd@ B�i6aB�Za:*:� �.lIs z8�g*($*�$�Ү6l3% z8�g*,$u P@ڙk&#��e *v<�@څ6 Y=�/% @څMXERU!!�&/OeA@ e'vv'�mS^ D! v^EUJ5�y�bH_o$U@QA�pX:tnqTR"u$uj׌k>qbaREԯTTllvM.߁��YIDAT)++֮  P;ꈒMҌ҈~ewUU&?cZ9VH nRN͵pNkkۥ-[[DS'W/{۾]Sx<ϓBѷ{kMϳc,+*+ΝZi&AѾFE{_]m;+˾gh;cG?Ϊ*oeePMegP~eesgcZkUVf<k1c55sY~w|yy{SUUYJvLTڲE'JZIٳwӾ�}4T:|{wi휡];{];{߹jjߙp⭶־-%M.[?ؕP]\uum?vйϟGQ?pm}h-yî:([浰K3HUUnV=ڲe;C'pBLtڷ>P񃖪@cGNׯ֬޽}O: i}d?(WU_z?ܹoUXa{p9 ʤr{mjuuKyy?w {͕VVsE3/rr7�VTd.]?^c˓zuYUW۟{9DSDzң>~�Z^n?'bw.(9DbzcGI̙35~_ Uw+UvӋ҂{I۶C~S'^v>Љ o߳\[7{ͭNM֭=71яotܾ9om9'~ۮ<oή&yo d'54EE~ʮ̙a5g]uU:5}tr)?o%}c~T\} q;ضlGl ojLEk<OFa{nX{Z]3#5 h"=쳚:ujI\C9D]wy着GpYFk?� P< N։9sˣh={ueEK/Ղ f͚�G잰 KBr� HB6CR̙[ l2_:u>l0Iİa2!2�ɐ!D+ƜQ2!JKKUZڵk؜Ws' RZZчٲV[lҥK,|oZEw+oΚM3`t#7f'ymEEE2gF3DEErUQrss#%Ih!ſ?1C8`Ekݽ4⋄&12gF3D^^,gQN:$=3o>���6uI'%<+sf40C%MqJzXAA}l���K#FH}WhMe2+W<f… %IvX���2sG@!>lGluGW^���sGh8#5n8p }'W_}ӧ=<��� p̙[ SOiz5i$꥗^1_UU~ӟgϞС>hhܛoP(hѢHo߮g=z{oB!=IO4zhuY qF#⋓o0j/^'jԩbZ*ad_M3if{コ{/֜9stUWu)h yL2iҤ±}4 ֆ 4eGv|My_IIFnݺ鮻RyyN?P-Rv=TMJvlk\ q=h7nRM6MC ѻᆱJjx؜MC@,ZH>NZtCu]wy'}֙g0zu֩{ZdI ߝwީ -[L{dKF'xB&Lp9lvs8: kFÆ Svv}(R\\AO?-+2gVvv.ȶ]zZ`֬Y耆cT^^$h߾w.~WS3gƌHK8hMacAIׯ +VDquYlN:lA hK.D{tqiɒ%A h5khÆ :#6l-[ٱct颮]*??_'Nۃ ɞX~ $quVTEEE m>[r Giԩ_V_8qxͪ:Bd={? p8W_}U=/_7|SYYYA{3fhڵ;$quPNNN@>|1ctgkꫯ8:clca&(4wyg9_7tfϞFH+V_#F袋.%JF[<UUU%l<}i7z )c,aW]uB͛P[nN=TuMgώtxa+STT,O]ֻwoܹkXjK17Zii9[V#77W{キ6oPںuN>d^S="qu9õrJl_p$q-Z>Lyyy MLիW/j -Zc0ZrmܸQA{J;VWK/>8q2g}jkk#DUUUi:իW�G$aÆm˗/׋/O<1K/ȶyiժU7n\#J8,ISL$=Uqq.\Yf騣J[7<;Nqqy]uU۷|I{7o9映$8ԡC >\ݻwGyD999Z`:蠠HM-[hڵzugFB_yҥJJJtᇫk׮4iu}/^L k{yf~:"_]N>dA{ɓ'رcv$qu-ܢgyF_=PM2EF zh@Ro4c ^Zeee޽?ۻ,-c,CPAh#$\X .0dK;A#_AM aAoJTd.ў*7]uW̔)SN_CCCݛ$olחtwwgĉI?<sO:;;S]] w'ű~nkkkbŊ|sС\tEYhQ^9n޼yyw|S:t߷' ��(k�� %�� %�� %�� %�� %�� %8mL<9K,9;5gӦM4iR<xV�S̮]Ce`ٺukZ[[5oɒ%9x`6o|V�Sт믿Ζ-[Nª쩧ʔ)SrW k^uuun<'he� 8E gqV3l۶-MMMi~SSSݛwy^� f͚w}ITVV2~mKLggg/_cǦ.˖-Kooozzzr-d̘1ϪU=ÇaÆL6-guV;T䧟~:z;;;o߾\}Ճ{g2mڴd̘16`3gf̘1yׇ}5d/��׍7ޘeÆ ;vl=5+V矟~8~lْڼ{ ~tttGӳx˖-/n-wuWٓg}6|Ivܙ#t׮]Ȍ3oٲ%+WM7ݔ;g}ݻwo̙3sο=�2.̘1#mmm2q7~ttt$IZZZ7wܑ7&InL<9/Bvvvf֭ikkKsss͛k6Ͼg;::2}+\{CC q(�K?gΜA㕕5kV?ޞ\uUo3gLMM1۷o_ˇ~x̵~ˁ-� Gkkk$&L4+ϸq~|fժU=zt̙/8˗/Ϯ]:4�8=8eޑyt?Ç3nܸl߾}sQ>w4>u|Wy7cǎkyd͚5IMMM\�WB�N)摲 . ovsg{ԩS}9<6jԨ455)Ypa֭[իWgȑuwwK.ۯ�Q�N)555I2ҟ9ڵkmdGWccc]+o߾wcq�x9B)eI477*]w]F5z}\~YlY֯_O?4\sMՕW_}5O?t.\x}͝;7y뭷2o޼gill̹瞛/"7n̂ 7I>ۯ �"8̞=;k׮ͦMcǎ;'Nt#?Yfeimm͈#АŋgܹG]ȑ#hѢgݺu---ٶm[|/0aBV\L4i@L?w*�0L:5ofgYzuVXqW@\C�'PCCC.]GydX^|TWW �!��(#������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������7<p����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/sample_plots/10m_pfifo_fast.png���������������������������������������������������������0000664�0000000�0000000�00000241717�14670056262�0020654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����)���kÅ���sBIT|d��� pHYs��a��a?i�� �IDATxy\T]vP- EŽ1Rgje(*\J44#Qd ⾅2KfDP~|<9<9g;& !(�DDDDDDT5(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!b@HDDDDDd(DDDDDD&!ٹrssP(B'/cP(|r׉BٳgkUi| wΉ6/_Ɛ!CPn]AP@TٶmB'^΂=077B~MEe}|cB(ӿ<+WjKgoo???$$$޽{O8%I$IOlOJeY}nS28 Gi_0PcʩYWRaDz`mm ;;;4k #F]>EYYYaÆANNNgG*S+W"44| `ee@Inn.q >qqq8p/`˘4iPf'OPiiie^믿ƈ#жm[@P`ʔ)yfիWGvbŊ\* 4sʼ @%66V%9sT*1f8::j ? xyy!225jԀRĞ={0yd̜9'Np'8w0i$$''###Xwޭ>F^zU]ۣVZeZOwݺuq888Td*/%{X jܹ AHH2OOO�rN߾}k.#,, 5Ǐڵkd̟?6|||лwo�RΝ;|r[+ڶm[Y M̓}voZ֧O<g~ܿ9 Pieݼy34iJxQPP�gggɓ ,ѣꊨ(XXXGtt4<ٳgWRSgy2BT:i˖-CAAƌ,OMMEDD,,,(<999xp}e =}t?իnq=+_ \\\sss Pg(z^âR4'|Ν;wЭ[78p�ė_~߾}9 tnLL /_'_#˗!@:utz\x�Pv'^-He1懝֭[oooԫW˗//)fnn.> 33Sdʔ)hݺ5>sDFF]v:'>ȴ=T*Fbܹ7ooolݺUjqjB>}��{)5R˗//lllPfM 6 W\YG_󬔔( L:YYYٳ'akk޽[/]ԨQ666Ŋ+g7obܸq[./*JojVnޗ',,,44G ///oj׮ +++HLL[#.. 642e ߿ӬXGA޽ ;;;t۷o7:...#GPuӧOchѢlll8q"accGGGtYoy֮]N:hР^uݻ:m֨WR;v[npvv4i' Ç1sLxyy DŽ PXXΆ 0h 0r}a|_|8@ZJo-->Fmw`ܳ �6n܈N:iwww`…�]_iiiBlZ} Ftt4իKKKԪU o;Scǎa„ 󃛛#F… :>233ѭ[78:: 8w�ɓ߿?4>lW\|&MNNNhڴ)bbbpimy=ݻwsptt=u릹<==5Eş3�BCC5?(2dN8Q*Y.Ck ,@=+++ ,, [lѻM)B5ЪU+;L6MXmܥK<<x�F1�૯{nL6 556m%Kh}x饗`ccz!..2H={Vsc !=RSSq1ԭ[Æ +1$IF7T@eiN_`۶m0`�zt,[ )))?S}233goΜ9~:uBVVVmիWѾ}{={ǥK; ,,Lp}t q #%%zmrI"??ݺuNs<}�KKKǺu0tP( _ ?<x�8tQe/ԩSG-0rH\xk׮Eݱzjׯ_~=+++kFzzf*{gt z�̙3 3g=z֭[ؼy3uEaZ+&&+V 777;w)))hڴ)Zj899!99{f5k]hFի^C5sN|شi~78p 222УG㧟~g}Wo;qD}pwwRĎ;{aϞ=g�`T$ Ygŋov+^#11#Gbcc3gh QWJolق>}ÇxWиqcM~ ;w4$,Z;vD`` ,,,p!,]6mBffكO?!!!x뭷p8x ~Gy戎Fnn.SN\sSNK.ظq#^{'޷?@BB0j(?~IIIHKKöm�;v,rss1w\&E;РA"%%.sϞ=ܹ3nݺp4k 999Xr%/ϯLPL:g^^ƌ�tnnnx"6mڄ=z`ɒ%Z@۶maffW_} 4@AA? bƌ077رcac}RԵݺuYֽ{w�rSr}?={DjcĈ033j*+ Crr2M?^g[YF̙@Ԋ_WDyxxB!Μ9lڴiB$1x2o788XH$RRR/^(jԨ!$I+W,u;B$aii);VH$ oBsN!I$I,_\k٢E$IwJ:t$IL0A+}RH$NZ1!Č3$Io߾ZOB$Sq-[LxxxIDXXsz󙚚>7oPTÇ sssѬY3+V$`QXXIM6$Έ9PZ233EjՄ((((o޼)ػwvJk]~Ȑ!B$Qn]S`aff&֮]/|||r&]}mV8ÇҥK%[Q\aaa!ѣG;B$[o$IOܸqC~mѸqcaff&._ΩStʣR4?ZN|)8cgϞ$ q2mW}~*JDEE IDΝKN˖-vβ<K(~pttnnn"''Gk١ChٲV ătm6aff&F^zjeÆ $ 1sLeB$1w\Mƍ$Ibܸq:/,,7o4xW,99YH$qz! ߋ*J4mT( vZ!Ihڴs… :JRYܽ{W>n8!Iظq:Z3te>SL1U( qummmB:sM6BTjO:%,,,hذxfY~~puunnnѤWg=ݠAR MFv%�啘8bذah֬]mۖ3/kk֬N``NסCL؃f8::bZ[hQ澏˖->3tOOO=L*$Iamm]lmm[v8rܹIW7>}VͰQ568::jժx ,qdܸq:ZlL}ᡕ~!22Rb޽{4χ$IXhWB(8ŭ\5jN3f+W{|ZJ7ހJibfG$5m۶:cM...Fo>!..cǎE˖-3f0jfffz[F8;;<+V@Tbԩhڴֲ͛cطouAjtf͚a֭zСC2 @>&LZ~߿_g[Q:277}W$///M_W_}8q5:ڵ GEuc~G"## 5@ƍzA{l0R)>tuf͚oРpML2Ezꅿ[,"*+6^>^vvvQJǍi~g`4{{{ -- 999:>ꘛf͚q&ѣwڴii UT@@�.]jTo޼'O~zP;aee^zyyyV^=!p �L_'@@@ e˖zupp0/_KJYiF'M4??_ ڵk�@FZFC};vY___ȑ#ZMg%I{O*zO�rӴٳg/N:#�ӞV2ժUC:u &^ 4>5k ((pss+Wy ݷ-++KCoooMʕ+#??>,[}ׂNBΟ?I ;f͚ ݻwG`` |||{\P:tЛTdeei vVQJ222e啝ٳg#-- /_֙کh3`�̛7{F߾}ѩS'QFZb9>[j|q?ʊ!=}ؗUJJJ|kI]o }OfnnI eҶCըQ\tn�_;/ViG߯E=o<�  #In߾ @G_@P9uE۶m gggƍ;wޑ)//7$::ZdY;/1o<̙3$!88g%$[Vt^o͝;uAy\lf̨z7jj#]]];`ɥ7_|9RSSOP>τ ̄cǎPTԩz {{{( ۷Zf֭3f`64iJJ(\~JNNN:KA,(VU.TSwOMMJ҉& CQV/Ɇk(]uJ;[߹/ Ee4,Ƙ}{K\3o<5m'Y{.ӥKjM,>Yt)rssӜjݘ;wn]VuEqYiylT*k.oеkW9rDgoف/Wb޼yx饗k.UV]rww״8|0~W?iӠR4#WbhcU煚z5q3}tܻwO z-l׮6mڄBdffb˖-?>^uSNZFc4iD.];wP^=M]+RU]?d؇jhҤ Ν;e˖WI7RDVVf +++8p�nY^> իWGƍqy:uJgQF k~ffZl~YV1s>?EGQG]#SҵRr槶xqedee_ݔh\i}&{~~~'!###uͩ,o�pic\^޽;/^h\~]PVԩSBK.:gГԬY35JS^=>KK} h8?'NEokjժ}:u*͛@=*A2~g�V,V猞 驦G6rvv6:wDk@[/qqq(((8U ??ӧOZ2J>Hӧ5ŵmnS;v`͚5eES<yVRrm3??_ 33V#"""J\?<<NNNXz`(k"j :t@RRJ<K@3ʈ#tʡRjԓΟ9s2 4ժUqIeSL͛75yK}!!!-c_Fzz:6uoKvh0!DS8::bԩzQTZ?ߧt9Noݺ7|I=|5$?~_~VZrr2UФIdddh *SdddI&7Aҿk=ڵK!=*~e{WLL ,--`ݸq3g΄$Ixx9իWgd %j$MӨx J?aggD?{聀�jBFF~74h�f*1k֬Y_g?@q%|ٳ'6l`t36l?-[K. lܸQg̞= ؿ?q1͜dſpT(|wزe ^|E+(,,DRRZncǎqPP.]?C3ڵks6:-/^C߿ZFPPP1dر# yM6pttqdgg 02|po^}@^�� �IDATU\a;wİa40acc9s //OӟeGJ9se˖ׯ\]]Ou+}ٳgc̘1عs'7nǏ㧟~Bdd$bmm-[o߾Xj6mڄ04lB8q;v[` DDWvB#33~~~ܹ&oΝ~zݻw5<==1hРR#""ڵCNЬY3Hsaݸqf5kbヰ0(Jl߾6661mۆ?B5py$'' ~۷ZnF-p $%%c C&Mѣذa\cƌ֭[~зo__^+g};wC􄝝e8;;kjFNP`ĉ8x I&MTj.]i1naqFMooo|G={6F ???ժUq|Jȑb,{>33ݺuC`ii իBJωʟHy_jժ  f̘3WHHP(=wQ95sըQC :Tg.J=?y===t1d&XbX~[)((ƍJx{{ԩS=zիWvvv"44TDP(t>2tjqqqzߗ {ܻwO|'AR4h@L<Y\pAH$""":/E<rNNNVm۶cb"00PgggѻwoqQahBC\͛7̙3EV 6zK,oYgժU"88X888+++ѰaC1h o>|[l۷vvv:'zҥprrK|GZsO ÇW_}UԨQC ???_͘h8KSR^Gԭ[WXYY -|M{nc3tW_}%"""DÆ 5Z˖-ٳŭ[>|P|ǢaÆZj:[i|yF^^^J888ooo%޹sGL4I4nXXYYQF2? #jŏ%''G7N 777ͳ^y/*Zؽ{ܹk׮"33Sg}P=(GkժUuǎ{+9yfѮ];Qzu$v*ömDLLh֬pppiӦgϞʕ+515S:M6`^6mĊ+-9VG{XEo#GuBP<3_s&..ӦMJ+ʤI[VـO۷k׮8q=tQGDDO+!oFll,uggg( �Abb"^}Uԯ_vvvx饗0cƌJFN&=x ͛ CY1<L0$ς-G:u`kk oooݻZrrrЭ[7T^...]E~za%v4xm :۷ȑ#QF ڵ رc~**=U5???xyyy氵^,,,Ugر8p�ڷo777??3nܸ~[DDDD:x QN3Κ{ņ �ȣ y&?+|0gJPN\|5j޽{Ѻuk<صkּ7Æ &(9yH23Ɔ w͛prrB<UMXBdd$^͛7#??h޼9 CVu񈈞Z)))* ޓ/;<x�?f*ÇCRaŊP*ppp̙3q]۷u�iaaaHLLěoYTaJ6m 11Q3l~I<_~ǻ[ %$""ԩS1uRyzzVܑD%>}:>\vM3- �L09 `mm5k"44TgM^zI}z9y\]]$DDDJ*Az :5kİað~;wk׮W_}ѣG.\kviݺ5W%zS>w﮳֭[ kk*(Qź{.rssѵkWJ:u~C=I<y2MѠskvڵqu0 |͜9;v… NuV&&""""z֬\oVڕ+W4%K, 6oތ3ff͚xw5ZZZl t2 1 |J]SL1by4h�@Yԝjcƌ9sDe떞UvYAi .رcS�wPT裏0p@M9}Sݻw�غO۷#** zW_}e0ooolٲGy3-=xҳJ] jAW^yB&M�蟯ҥKpqqa`T) ""mڴuP-"""""B<|Po:�?pww٣?/糄S$''={DÆ yf힉LU˖-_Zk֬Zh@x8&ώ;pqkZV  ??/^�lܸgϞ�=$k׮i&7n5i=UGÇ7[�ww <KEDDz|СC5 ؼy3lق7|j�|{7oٳѢE TQ<]V?gΜ�HIII$ QQQPT8<$I„ t֏f@HύVudB�?J375uK*^<iѢRRRٳg޽{hذ!fΜkխ[7n&L�KKK 9# !DU篿BVw^v'"*\A`:W~'.Iw>DDd׀�PO\Ɛ9&&�o߮b=lmmaoo_Š'%+ psjזvq_�/+Q%a@hB+WTuQ)5kDPP7o^E$!˫2U"&";;ׯGƍ qHT JR}a�you !`@h"иqcԿQիW#-- Ŗ-kdʕ+e0HT$W\AAAAU*kрLB@KBrtt�ܹsKB&+ ^xA;Ņ5DDd2$*?é[#YYK/ff鮮 d0B ""Ӕ\kdLB""2=�CѣΝv.=g8BЪ.h( ={BϫÇBd/D9HRSTDDa@H&AP5!>>puu\]]\zUk_!!!:۳p޽>R=>eHV<K/.S7k*!$`!0g(J3F3/�`4h HԨQJ{ɓ1sL8q5kFtt4<==!s琔I&!9907WBOTV.sukoWr0z0(C7)Xe˖�cƌAu"""HLLDTTN{βhi>}:|}}bzGDЀ2\CȵU=+͛?J_8yjCDD-6%CRaĈx!Νk0x֭[QNRYV-�gϞRԏ.%% SNJW7W}&O  7ƴiPXXX~ՔJ%&N&M֭vء ,@=+++ ,, [l1_~:t-\\\#G]FrU~~c3O\DDa !8v֭aÆW$T*:(-寽233kZjذa␙7| ''mڴAdd$]u֡K.Xp!z-M<3ڵ+pElڴ =z%KtѿXYY]6-Zqv@,,޽Y� `dI ʵjŋ׻}:Jyv � ׸wp}.]$�@۶m˵ c=z�jhh(6oތ+WbРA%G!''#F… 0zht��ggg={V�?~<x XYY�nݺ#FhٲfqaΜ9T,՘&[`6m[@vWlY3@Q!Or @[�|YJ jʷ""2 ɠ;wh״)`cS-ҥK�u{عs'8<T*Ѷm[ 0ה)S4 �XZZ"!!oJ <x+WzHHHZָqc=ӧONJ+0e�f|={C�dܸqC  ..| n޼Y'*љ3r ZZ�VVe!:v~QW/y^|Q;?a~>z7.$0 $Z IEӌR:n8=}@P K];bѣGq]ꌾ �;vuٳg#-- /_֙^ŋ_iooXNr~]4T -I0@Ḷ[͓kZۭR_;^=P? wXa@HDD`@H5m*gUߪ:|5he$Ig �077+.KR�Ԯ][ZUפر#T*:u޽{ CrrH}+g}=ׯ%)r߾5ܼӐ3g&E5nn"r3=h07爤DDddQSW�eT*WGgY`8!\ {{njzei6I>}:ݻ7NHH@rr}\rE> 훨B>,6k(O~ݳF 4 ?^==Sʶ_""2IvH`4iΝòeJ+=.'''�;Df)}RRRt222R[M65߯+jΝ�ĉpqq[#mST"++Гcl@hlly&Mլ)7,O?lyCuѢ  >xt\€HIh"cXj|ܹ3.\PePDdbܹ%Ux=L8�SժUàAPPP4Fɓ7o,,,0x`Mz j믱m6} WbPPPPbKE7ΖѺ\CXVF(d43S_Gi Hl2J&icGpp0ܠT*?vvvyâ k֬ѦM={7nDxx8֭[gpf͚y۷/͑SNW^N9�fBzz:,X={ $$7֭[۷oc)'�`̘1غu+ѯ_?#33km/FѡCjBFFAeɩÇ7l9S$,γC5ꀰ`5{5^^5l,_^AmȤL$I6KիN<iӦ?>3Yfffɓ'V;v@~p!?Ann.֬Y#Gx\֭СCi&?�L:?Qvrrݻ1~x/?va˖-xw6mBfͰvZ,[ HIIAϞ=HlٲZºuxbG d'QC/ n3l*{d=ڵGirAgF$Lӧɓ'cFWuw}wJ2^jRah;5kf͚eTY{쉞={bȐ!zܹ3:wlٲRnJܸa\ ݻh%�P0Zt@5=|_CaѹkԐw/Q#I-5DDdJJ1!Pz-zQ}<`Y4( ~]"գ5l(!!s~D&u՘&qaF*2ـPu5eԃ2k#lmAS #"h #el@!,m`C#n ;5?X"ܻk"3F ذHL=S=Gv܉Vu1^]C"??yuSsPF¯_u[D`@HDD؀zuܸ&%prf#E"ܻWZFSyTVG˵[Vu֔)@U] "zF0 $""q:`aQȡT6a~>pBm\?_~kKΧ!rsu5l\*O}[}࣏f[Tu֖-OBD&!-m.œ&g[Z_~|qTC<BE{ض~ϛׁ)VL1ҫfg<¨ZN2%fw XzIՁ_qE"|edow&?22 !!ZrÇf%oO9py6o8r"ܴIPP�&7Y}… //cG֭矫\U%-M~e@HDFb@HDDkK�+lfkȁ#swk&JE9P|GzX^TjftR�>c@HDeĀLGY’jKrZ/m\ ʨ=er 8dvzȮWVN9^?ͫ}s<B"2yUҔ% ,iPF}}ܼۖsRW%%SNgܶ�s%r@~e!׬YXPחV k3\e3̬|TE@r^T׮mA/<X%t<{|^CB3!޼)Oma@=|8'u<J_ N+p܇$sAږ-@dys9<p@>?1߻' _ƒ\$u%B~{6iWo„y??,b}A33堺25jȣU&g=RRRP(0uԪ.J%&&BP`U]- U] z({ !0#Cj6~ʁek%`N)j`G$mP1}j\Kٱ#"v};p(p܄u2@7ܻ,YDD�/w ;|<!orp^<YPm[v&OPr ;�bNOɓZIKK?ٳqmA9t| 8?OZ$,27�� �IDAT(!BQE<+l~~~HHH=@2f.XLTnݒu)K !`8 ,K �8:|l]+vffrm]YGO=%FӦ@ݺrA?(xc\ہ gP9. `trlDۼvMoܐk1cs_/11ݻgYG4<ΤI%Er,I .^ kwcc7m ̝ ,^,%sG~? G zy11Sܽ+O$d@HDFbQ2 Z_3gJ%ƌGGGyf 4Bdd$jԨR={`ɘ9s&N85kjm#::BܹsHJJ¤I #T7nȯe ,s&%#e5|8b\ܷp(ZyrUY~�yE 1h9Dkƍ~U;ȩjׯ;3%EV̑,Y}>xM9ݳG./0e }1mmKys�K<NɁֈr߿~?d?\nZar ӿɓ ?s2w\c�L(_J|/ŋ� @<Ÿ~b@HDڻw� [b/XqJ*ٳC( qSRR˗/כ",,LkB$ҥKVZB$3Ν;$Ibԩlٲ 9M$jp9}B�Bc\<9۶99e/J%B̛'Dnnׯj POB%n݄pQE !ڵW!n}{!\\8tH{11rB(BDE0@G>TI"5Uڵ9>|(D.BԬ)ĕ+˂ΝB88UX}$R |ɣs&?J_IuBN{W^" @.ZAAABe6MGG'$ew\l2JJˆ#C̝;QQQzy{{c֭c`jB>}��{1W\aPfM+V(qǏ#** ; ,Z K.J_l lmmXߛm�BP &&0`�\]]amm֭[㧟~28ݫ'}]\رc0a?b\pA<xx4jVVVhذ!L9z].[C(7+d4#C=T7, Ie<<ʾ~U1Cn"ٳ\K7<eFg\rYaT6܍3f�˵j>>򨫉ի?rdϞr;cjh Ϧrעf_~)7 k~E+Dv&OZ KgrM޴irmnߖ׮= c?}Znڪ(zu|o!g`|dʀmֈHMMűcPn] 6ļ$ShcӧѡCŋxw={sθuѬY3`ʕHNN/ S߹sg�;0|p6v�wvލ`�R޽{ KKK9sm۶EF0daڵ/Rw͈$I۷/<<< jzzzj'%%aѢEر#aaaCaҥشi3o̻Ie*" "+"(*(n㨯8 : 3 l  evRнM4Oo{$7i|?>wyrsr8pBK֭Cvh4??t| ڵݻ3j-&ށ48XMY@Ba<X{%_ܺU<*#2͚5t*֭SĚ=DDkWmcnTNTmT֮֡Cm6L3ĺYD6-Mqjbxe~E!t;u9+K븩N,\(Μ)/ i@]^!|Rl $B][}"o)S|^92jҥKRƍ%N'}N3}tII/H!!!6Jcǎ^VXaq̪U$N'uQTĖZl)5nbf͚IÆ _z~+t:魷ުvYII:Nz7-γyfIIGخ-**`)--b?ONFi=++K*//o?$ʹ-_\tR%X=77Wj۶-#ҥ"9`IpA\^.IxwXȐ0KLi]$)ctr4x$M IEE[1N@zVW1%iI2E%we$=$)I-++I11?QBإT׎vDdw> wRRXlvI5k֠�}<XɄ˗#66ͳ]^0yd {'пL*a>@ZZpw�� e˖_~A׮]qQ\|sEaa!mۆ7|@s8l0񦤤`Μ9FdMصk"//> nv?lٲ/^DrUl{1#FsؼyO-\rx1m4$78xޅ?.;,Y.pj@uk#k;/o5•_8*ch__PgntX*C.ǯGu8zF)آ Yqq 1ʵ-U 4F:t�0T-`Ȑ!HKKÑ#GСCl2l۶ ]vї())ATToߎݻwW&''c߾}aqȑjA�_|-[χluСC �H+҃P&:Z _TLKE8ɗ_~^oR.p'LAHq Bb ;urݺFv233>Gjj*ֱ�`B714ʖWoݾ۷cضmѮ]; 6 /Ν;ѳgO=zcƌ^]n!\n{g͛wZh� p5UŸLB@yQ#=]S̄ $v N;.Ν;QYY*I\\�QeT 1jjb~Z۷Ǯ]P^^T?� lٲZskcz*}t{ATT˗/WFnn.f(w]RpW6m**T.Y"z>F'lBv :ŋk!I***<zN:!""GAaaSSSmرCVQÇ~! ]H۶mzGcݻȀ$I9rDFFyzٌݻwN~z-^Mչ~;t !.@AH :K.Epp0{9U �~7 >n;w C=B2Pߎ: -- W7|4tf toС_~z4lݺu3{ABBV\ipɒ%8w^]u�ݻw[DR1}t2rј^{͢`nn.z-?'Fv�}hqi( !.( h$b͚52e L `РAhԨ p#::pBl۶ K,p#;;_}ƌu駟bĈ}СN8oM NWSN y!'''Nty82QQQ1qD 4'NDrr2<-[YfXtiM4</ݻwLj#PPP-[ 22ݻwǑ#G,1i$Z ֭7ߌqd2aӧH��znLx BB !$Ns ~ر8s |M$&&b+W"(( ,3gШQ#ΫD㏘6m?{?3W=O>ؿ?|Aݻ~'L<Goѣt:}"**JwZPϸq?bؼy3}]8q3g-G}W_}~!lR}8k|ט?>*++6l>UV Hmab-!! !IZ'~ɡCЫW/<xf]l,]O<*stc0�矻ދO>}�9":%!!O^xCHȍ26J�!!Onx $�!!( !(I AAHq BB! BHPB\BHG 8 $R`%�!!( !jۃ BB PBP@B?$ $�!!! $( !.@AH!CAH BB PB\JAH BB PBdfYY@u=B|N') ! $$IIIA֭}r!Coɵ; 44N_{x㎺!Bv%nA! $^wϧ~Z}ױ` 6Dhh(6lbѢEzŵlsXzXh<Ν;^iӦ}NMYnv܉7xO?u= v:v7%@p]_0w\ #I,Y̞= 4ؿGUlÆ x衇PXXn &L@ƍQPPcΜ9Xp!N>&MXGAJJ $IŋfkXv-\|j#o^1heΜ9hݺ5~\xgoСCٳg]x]z BB P`ܹ6>bhٲw܉#44˖-ԩSm9vf͚hGyзz =z@zz:VXz>W@R-"A_1g_z!?_u=\�:w^xf#rrGW_( !.(!*TVV'l{gWu 7oF͝iӦ{�wysNX}ELL ZnM6�O?T5 ^#==cƌABBz=.\�@} e˪ϳqFHHHĉqicWG�x)eqAF裏��p!3񈉉wߍۜ/##3f@vDt 3gDnnž)))ӧKxٵ ૯_&N&@sN<yIIIx4?+sv%CJJ }Y=ƬY��ݻwǼyw^ 8x# 44bjYǏG˖-1{lvmXz5뇓'Oj֭[Ν;gݺu;v,4i3g}Xlƍ={`$ ӧOߎcرhvv6ze˖k׮5kN֭[/˗m{{|1s!C6m۷f @߾ߵ hHNx ( !.(!*U v{u3;;k֬�Wyv؁~ r{޽b-?.]ӧ0z`ذaF]ٳSOa֭NqydffbȑNm6QUR$yغu+F>&Mcܸq�oyyyxZ`0}�޽Cu|H"$]N@~CB$ $�!Oi)p۱#*�$%%}e˖aǎ$ Xf зo_=f̘a#k{aÆYA�xgcpK%�I&UA@SL֭[ѽ{w 1�SNՂP|6珈P<.ys{Eo)S;XTRP�9<K?@AHq Bbǁ^|݃zPQٺ"::J / 뉫d]=~РA6z=  9rĩ �$$$8[o֬Y3�@/f333z۸qꫯ駟͛1rH 0aT511�lZs8s_qq5۳;G > g{ 1BhPB\اcG!upT*Ҵi:9޺/];gnfRT!t;Te˖HOOǼyiӦxnrr2^|E)ޚN>ز?W^@HPUI;�^~x ;-Lڵ h h{c' $�!Oddpa�DqJuWb\].΢&Ԭiذ!�T;vė_~ ٌغu+a֬Y£>j<Fd|DIF%KY�9|90vp1>y30yK)IAAHqV%DACx">J 9vj6rTmfiiit6LՐ[ciu /V\ �Xv~YYY�jIÇs=cw';?Gh(<{|�dg3.J BB PNҥK{˗/W~ë/�~|`ظqŶ>�2d5oժpQɡCTcR(==zI#VX�V ٥sg`69=[T"5(I`BAHqFFI@hmfL2SL 0h 4j8p�*6Mtt4ݻw㡇M7݄ }ڵk]wa?~<ڶm#G`ӦMHLLć~<#G~ ]tg_ 6m >>gΜٳg?"&&vE E[DF_yEԿJTڥ';Y! 4( !.@AHNt}رcq|zj"66;vĂ 0cƌrZ}xiӦhd˖-5 BG0af̘?ظq#BCC1a,Zڵ<{1|Xj|M{˃>rٳ`@RR|A6zYc p$𗿈{af]o۬YHHBAHq B={V~ 3g̙i;vfX̝;suO۶mn: <=݃1c`̘1n r /_[~?qƟb>}b/��<䓚!fj 6>f+͛vס $�B[og믿��JKK`/z5p]ҡ4HT}FmPB\uƌ!C`u=�~|u=I_ ,tM !ڡ $�!!OSm6/?;0馛z(բ_wH;(F!2\CHѺ>B<ƍQ5M !!!B='Oݻ(PB\Bo)*rr֭T�� �IDATz$O( !.@AH!ķNڴqR_ $�a�'!>w ZSP�df(BAHq � ** �PPPP#!%??�"('#�4ܰ,\w_]-#@]c0j( 11SNŵkp �hҤ >N: E$I‘#GФIpn|22A;-^ tp=> D~C*Obȑ*++Ouh֬� 33D||<-Z";__BA 8| VXݻAiJȑ#8}4%Ξu3 1Tף ~ !ؖRL<z… a0pa$%%�#F`ٲe>}OP]t�ڵ _u&MZaeeO?p8+VNÃ>Xm;vlaÆ}ꫯ(P]tA.]PXXRHTC"įtdLԓHp(+F`^`\!D B@L&|WѲeK�@VVrrrp뭷߻wo|_CArK._Adh;vPdCH@AH͛7#77".**i֬rssa2 BB!##C<:ee15ùQad8@\+WJe+V 446�� ?j-` BhNbai)N02JBAHn &MI&Yl;tzb]wy'㫷GDD��rDAYշ>} ! qc?55J< !$ $·~ `jʞ2HLL;BprB2gOQ#FQ^.fs]%$@X|9bbb0n8-Z@F~cѽ{w_ 񆀂Bд~0"<X!qQD B�`֭?~|@%&L Ym۶m8u&Nˡ=B|A(;B%%ڍ!q! �VZlyW!C>E0qDt ӦMh BB! tiA� -'**n d!HAHT#!ǬXM4U;wm۶xW;`رزe Z*B|1hx8б#Ф1 !+tFH=ec;wƦM|0:B| =|v`QQ!!DB|ٳ@HТ]5r/ä B BBF( ! U+ (.J�Dk|Q BBF( !'F[A)KK8:)PB ud4"B<22j PB4BAH!HXC`Rb6?DFKJ+W丠( ! $}rsBFF=pLx m[`:PB4>B'�[G QN#tA^,.PT\� BBF( !xuGzŶ ΝVV&tg B["F±Ck 5@AH!!r40u*p=55Nee5qQQ5! vPB4BAH!s 'qc`2 &JA(a h9:t !ނB $:Ź| 92*׋)k(u $x BB!!53ρ]:udQ 12J}םQBa]0B!aZ ) <S ˆXC(I[o.9?8:oAAH!3lA%Fed0bׁM珑QG}-( !Ԟ'Euѱcku@Gg@: B!!ڳaPrC4E3,VAV0qwq#@-( !Ԟ!CjI GF:JXΜ$1xs�|dfz7JA(I( ! $�KRa!kW�#Ȩ^_<o ’Ȃl#!$С $�灩Sp~js̘ZQѨHoo EE922I32J!!YYٳ^8ƍ@.@V>Ѩ.֠uES BRj*,CAH!!^TWV}瑸( DBFF-Wtsd|rSC)R-=2t !˔`ܹ5j駟{15 111HLLԩSq5R_ <p�z#qQQ@{d4"¹ .v !;!!ēPz,X�'N@�:͙8p 222h"ظq#FS]/! "7nnVe44 q.szBRx-#Q�#\4o/_FƍqA[u `0HJJ�#Fe0}t_R$!56 'hhB\C]FaC ;!!ij!2hܸ1�@rPy;vlaÆ}ꫯ>NBH'$ծ;ŊǏ]zd|@`GFץqNY8tлPd$BBg [ow{Ç`T f30ؾs׏{KOiٿx%ۻB+ @pBݑQ Bg"̗"\C(0{KY(l�@fl~׬Y3r! g׏4 [Ϗ3]?. Z&Ɠ'T3U)-Jbd401kGAH,\C`0 D^MnٳѠAm&M¤I<<RBOf&wkHf swO7C0J='<+׎ȥwB˗E CK=adw_32J,~@DlǨ)\G%KgϞ!>dNpkd4?;c7 y<9O�͛{L%<w47 qR~fыE ύ` _t !Q?@Q%HLLR03g;JcBw¸<ĠVk'O:2+dq:BATGF�e Q^.>B< ТE 4j]zzzuBBID22h`pC͈ bگx@ս>qe�a}4ZV4i"ȨRD{[r wQadI( &`Æ Tm6:u 'NÑ[ +@ee@EQW0`VeQ_ :QPKd>c0�׈*=aTʂ!!p K.�֭[ .��{9W__!C`֬Y(**ŋѭ[7L6.OO'Ǐi;& oᖼm@UBZ~{dQ%fteqa-%2ZV&o\g#BzKt5bAIpNy¶oAA}]?�Xf t:NX$%%aΝx+ ,, cǎŻ$p!%`a}hN~3G1RntUж͍d/:¨B5 w�II11bp%IMFF !ނ={V~;wƦM<BIu:#$46eш?319yZ2繟]+'"IIq\02 4n|_^^SeT 9) 4giSsQ( w!$ MJV$L_4�@ӊL/@:USVZMdԜ~u6? mv8NCm, P @EJP\�9K!N $ ~]BVХ{t h +u\U^Raa"V㝞aV # B5R AhXGH BB OnoY<j 0jd&` xM`bQUÀ*jY4zaHaDȨVA(3)I웓1"%,;,ZV( !7ȓΝEIKlT.(# BMn`*Ή_ZGgŤAIf0C]IPl>5ZB uʨ ب#ւ0[OȍeuPBY�Zis2Ή'b4jb<ģDZ ¶8 TgB9rVE2220"r oDF BoDF5!$x BB OnCBDQ v 4D>PGU+=tU`CaprPʉz:2.3 ]+oGF)=( !~< :v&YӦb[aLd�#! Ah Avk{F@b;Z\ <v ?Qú&xkFDmТō.qFF%^GGmB<!!ovϜqdeN'&].e!"W= BbV Ah0�O:  Y̛޿I,*c6J_>'j;%Da:=* ,!$x BBߠ;Iٳ!�4hP;AZXv.R pO_<"жN C(G}łFU B&rQЛm'[VY�!!D3AC(;hVм{m^΅C˖*V*ζ\CXXV;/b0�I!P.Rx?O#?7w#gN]C)�JAH)( !~!lLqVXƓK@q{nO?y ^c|=+C!+h_*2* \_KrC'ʶcP)eA/<|02R]SLb-U@AH !!oP BNF BI"SU`.ۂ*ͶU+hOA_iFS+A\*^DF!#J̳bm'ed( !~R"6(2+&JN곸,hΞ\q5M<&HLdM $$Wt:VTԼ.u'rQgQ2RʂۑQ #CHAM:re7Fq}8AqS A 417LAX|#/̟*2*O'fȨw!#ޅk !ބ7(@۶kb]vu:7c G.�XM)yGxcaYGQqq"knQdkPEeY+Z"J:n,AȨQB7 $ a=vE^VWMeAN YOGaI\ !lpQ  Pڲ4 Ȩ,n , n5AhOY;AAXN(B B(!ēPBkA/Mγƍko@L剰+抹Sr <+ qI.Q/ªX"h̺,π8 cN|>GѬ,1n׮n#HR:Z;[Op o?kNI( !~;PB 9.ڻ0ڼыP*p 23Q^J `4o\sYcX ‚Д|P;QY\h>O]\s!/~2^CXR)�Ȩ{AAH!!oP6j/a>b͢7<0@\ff"/U&U'Czqyy(BU;wQ�@eN^[C,2 .#!we%2\(Ӧ QBkLm;_S\QNS BBF( !~=ОS <YGXZ*[l,ЭAo5?K! W l'yy( UjsNC#aFF[ JF~?BgU$^d}{xSBUdبC8 tRo $ &CB;Ih}�rEo?{cIx߾NZO̟<H�uhհ$u0.GBy5( B[ϪN1tn�8t֩r#uQT`?ȨRdo/^3gj?fHUdB!!D#AnAɹ.?LT']* 4j$&p_?Q;c5]\^lr5Nd�RRаX!, tQ 8 GѹZVT_eL୷,9-,SבQsWEҕ*B�8yvl"*a! $x BBߠ&ESvxT B#A#+W,˂Ps6X B�ؿ_eLQ#`r'堚26VШCYɄK,Bh^^MLWYd ,,kZaiw*TU+*Ӹ87@{.;Ț"PB)\M1Yr֜^֑PY`"sS]G}P\l$$ffAA&f+%M*08AЗ8>}zs3k/ E V!VdT~rVY 7ODFՊt% ߏ\&I\C(cfdI( !~+Qy߼,(@ C׋uvIbV7B6oRcz �HIA(3XP_(CcT0zV> $!!C&}U bhPgP~oɕ=pr =DVCH ^dTM^ a"U֕CtU1={Dƍ#Dlj-T \*CQŔ$!kayX \ǎFjLi*aEUdTCB/B5bJZʨOo BO#)k,B!U BBPQ} aNXb'Cؤ{J8k[ \iN{Сɓ4!'Ѫɕj*P_# cjt!֨"" 'yy5e!QDqZ;U:AAb(2|ɴo/Pmm@~/�!( UCAH!!op!58d*#x z>"6}xb][tD tV8_Tݼ}ChEXՄNբ%&FCd^j^+>|"2*G(`;W B@|^0u2rS/z[ndaP5PBW� nw!(}At">cb(GF4@>EѪkP=iAPz/8~Y :[uEUNبZ<%ʂ0"B"BёCv?oI<66ȨY#8!!$x BB`!4l'p{rY6n,&_.,QEF% 8CPA P\qeeȌ3voF �� �IDATF|݋Н( >/FFccM#=kB BB<!!o'[WA(vMlzz!TNn!*{pws�#FX8֓o 8Vh6aT#uBjXWU=P~ B N<oo9.Y0IH[QdTQ{e,4kMy9#AAHUD'~h@(7WFPzžCh6BEm-w ,�'jѲ2z~*Z>EAxK$W! 7aEp v[X0[_ɲȨCAxD5hv6} BBߠ!4'k5Щ�^*h{uQ@ԎZTQd ؄QG>yy@d$J+Bmp7N`(YA ¨(aDw"WyCXQZdTq'2 8i$�#J9\EAH!!op$nMnhi)DG82))q޽w�G�C=RL EFʀב]Ƽ< >5@׮Fw}Æ5YdClJ/S[5Ps#PhqpFhՠ EFu:D]DF|Xڷ״ƺ1= >CťmPB{UFɹ]AeFPMj%Ċ+\Shvh*-ؽ AؠKA4QTA�kƠ6X"@6ڏQoj Md:BkhdahVt)ŋ5jat!!DA1}dئm"=\lT UP ,jk9q@(0a P u ˃Ťo_6ފfe{\CZh~8y~Pka/2j6mDO BO.ߋ<x" TSq1PnC $h79:pkϑ 3 BI\#h!<5R}qbgh͸:IlQ!ɝ񚆙}u 3A-ysK'Jv�rBDQGaX CXRb~{"|pm?�߾5E5@%PB5A6d7z_@]Ț*$&MX۬GvlEymk6zDDftȨhV�6oY2&�P~F^ZSmՂ}[om\TyaByz32AAX^#) o2352*@[O(E9.Z)/ߩ %k&>ƪiq1 A(!D ^ϕ#Ą^_(!}JH;AA޽ԩƍ;7A9$~-oN(μyy.V9j&Y[c?=0eEVغXqqb:ˢ"hppM=5UDdpo,'qsEz+2 xVzs Ypw>ƴ4=Z}csϟYƕrCAAH BȨr~sz #Gɸ D}ŋ#lh o<#k BIBғ{ɪ!vB|QB;fg|a-;w?(E5YY:79jl:2*I5SȨ TnWm3q[?n;Nd"ENXGFbش x`0?_q}'"~f&j5 B: PBC~PF /N'QQ]:.!Gqsdi�XkYUgՕbV7?+.oxTBk 4uEEFm#CNaWS- _PkdԙCء8)8B)zXU ܵ ?^D>7nno /AN8sf+?_U BBBwr_FBܤWow$19K*wqsX,'uxsD�!aj٣}:"T B@ hY8995藺0'Dzr=p%2! <<p}հ)jZkCm#Nc W^9ujM{5ΝPN'+EW_uK>aexnC'QBCAH\YCX[PQ˟~r NaP ZWS:2 ت�ģB1zkA@^Vɾ}:7O8kZtSBٻOŠ KW 4vGQ#e}Yπv퀇b B_�9}'ڵ568X<׬,žÇn0;ۨ%pxE`qwv,!BBAHk] Dl43SL*Z3fxtqTe'OmڠirÊ֑QR.BDD|XqcڊV1$" 8`QPF;Pjʂ5 5ވʕU ct72<_rx'9t"jblu+б#[BT o;N�᯿;vri^?DM5NJd`�mX@8; JdTRQB@AHEF F;k"ir=4q/6!lII[X�,e 7) rDR0"blhݹsK7JJ,Z_ 4D_" v[gZ+ BDMZ:jkMdhrx|MKnHQ+tTp*oYw3g:b2`۶j "\uk /^E�^\|nfr~lEX ͩ :BB( !~( &Pb?gPM9]w`F- BAWy"FFQ Sx Bʊ*\݅ bw^N'ue ,nbc\QY<6o.8ZB*jPChMl{ !*jڣ.t}l aecA ,Z$-[,w}H%<|عKXY)^{@>TDZ!h0$ BBL8:z}0R:Z;VL\Y#_P&yktŤ^Q0C}""B(_ X曫3{Z<G(NWzBkddrMW1hYIH{*8X/pjZӵ+д6+֭\YCh4H( 39'`8%/h_}qSG $^Cwx_(!�<ÌΝXuA  BB(2 ɹVA69Cحع5si~P8U0'Z^-2*#c^^={D\Tz<~q jVP9kGsW㢀{5hJNCȨ]dW#h'\j!PS} BN%<|XJ>F/EV#2u#/]*<cxW<D BB6( !~3P Skae=t!Dltzj5mPrB@>;EȨPATT~PBHG B琐 Z!o kDN++WDF媥tdT7;v]~hЮB|>oe/j0:Z CgxBBDQ;C[ :paT PsOB\78jLXFFjM[AشMɝq]s4Yơ 7ڋ9ZʂBl EdzrUFsWE3{u^QgE~՞Wx!tGڻaau(�Tӧ$/#ַ/p5jA-.…bW͚9?FFzƋ{[.dС%ܷO=C8!$h7sfCrvf8c6E3-M18t;J^QkuqBeuF4(è6`+0 ֭GBkaP$AR_9UH&$8>kQRn\,\2}^Q{/W~<vۉģg8~\}Yʯ⋃kj\_Mk##kVJ8r*yRu"!ZCP0G.AqPn:{°0 & BB`O"% BGqQ~25Iݦp1~]1ªYhL!tU!,5LrB(DP 2!!"Sq8n ^�FSSaB1y֑ъ mhF|>/my k$IOΝQMڏxF8X!Lc!TO}t{gtg7K8_Tm1d3E"\,9mɳYCq'w`gð& O}tz�cfb󡣪@Hh%Ʈ>郊 ?Z.(>:k4(w!]Cv豴ڽo+W`2ǎY gwɍO⛣؜s„ yX{|- ο]UE\:^Q_Bzpu'Ꮗ BcG>b="JL*) ! $=ɓsWZd6:%qƹsX}t5K6׾Vz C–HJ,2z.Uvkn=�Rb!$bb/˜1V))At/lf9 &zmba, YcB_U`(FXdԨ 4Wh"? e_0}t+bז֌H,޳VOBl TVZN͕f463"|:Om| E"2?B;caM(4zl2H$I6m'FFŝ_܉6m0(e]u/~y~o{8~8RNEpqks~ l_ݩp2~r+2#ٯX&#0mAeZo0y�cʱ(75XB3Xkt;Z݁;#x%(/x$an\j n)7?eܯ_eqϪ{&k]X \+XlrMp"R-'**+0c Kh#`a20`qWsߊlct4PXjĽ_݋9;{cCknPh1+̧ $8F%B!Gux>ڵ BئhwDz#ː-wKp%O+rV68e"23՟+@d(Kq>?oz! J^hISdeuOǕo �bZ*.9 /ϱBVYu]B 4i.b}:32K؅p4(~RĄ *8x0S p!E B:5:5녓[*E �cEu<i,zO}G=[w-֝\ =$LR]pa<7hK<ZN$IN}{W݋amaZiz O1m4;w<)TJpxe+XJDJ!~+B˸tRvqkB|WG6s0F7El,]zo >:D#-N_[DF!, œ3 j5tC[EYՒHDF#"$w|rF bjefb^<<ܖ|] {z?{VyHWIN(#BBل@ /BJ)hZxYm6m@iC ˉx&^G:ѰcžO>#y.]}߸~x9[V丟sZO.į 丟 /MZKBJZ ^;5ӿWIc�܅hx=X"l߿W\y8%DA,�?|(,ţ Efj&8_Ľ?8̜)"]ݻ/~gL<UmUo}I|ϧ󞙇6lیe-^�? +fcLlkچO?ҽY>l O<9;8󑑒*ଳ\]𹅸jUaV#{/)qq`ɫwV]6|HsH>= _y/Xj7߉^ECsZQrM! T$)VH;Pٳ'>mcN= |nO7Ә}x+֍1]^MKGn;oo ((¤bZ~+O~׃Cvuwh9c1dmā,7}7&LFWkp뗘,ubfL]~4r9hnG{O;ҝ\=shnxBzoP8^q)4M5ڨV;oB3wzgk8||O +/K6�N&INŸ={燱j&OIN�|o#35|jk093 s.~N}>\Lb+9S9cxf3x:/{�c0>w ]z;5mm'߆_~~6L]]琷9?<po:Oى;kj`9W߶ cr`T).^|\1\=.jJo.[>G M,q�oL/=i.Oιi봻t81Xp}8miX0e~!8bF x{;?u:ڱ o^&jg潋ޛy_/+fDFP_"6\T-H/Cg?o@%Bz&V߆峱`h/;q8/ ypk\1w\p jU`}z|T>ӋC/u<vwO^l\?Fk9ƌֽտ\�^,=ϭ>N,\ p ;iӫqkwnǽ܋SC.̿/}r1 ,�]�t !aeÆ ذaP !1s/l|E qB'ĭޗ+.ģn?d!"G+w#qDžMukR>IOݧa&nxQ^+ /'B&w8 ' ,)׉>Il,Jn@`)i9MyM\be{y�� �IDATU̙#'-1q8/řO+%~xUXM㚏7>s%gċ(zq%N~HQV}#…ƯŘ'?(Vn_)}K�B`K!wO"ڻ}ۧE<O`)Bk^}Yc8ONj{ 2U`)ĢOO~O}5m5'+UW mxmM,q O~u=k}!f@GQ%21NL6!B<<zêŵ_+q_}8驓[ 8͵E}K!Fhq+W,xv˳<("⦷n}J_:n{ߓϿZ<ⴿ&n"[V9=}1}Ŵ\+ W(O$bJUUB|Z~]h-l7 =8LqŪBu`֫{'<8AnmBdd ܾcӷ*RHi^>w p?n(rq`)ıO{_{M B|{bB8KxR|!�,!׸BAx NE?a|W 1g\|=@ n=[kX[SCfeK!i h}2!Bh>WW|_LT"1r1 +^z=.(ҥBJZ%7r "?"_o,&_yB1f ,ȸ3K n+LS)==zʿEM'_sQU8g�f!0< oO4Biĵ qgWM |s+~w)DII/qÛ71;Fl{rKAӷ*-gQ\wGt7Q='PkR!N=UOرo{9%~DYB[jڭY:UoR)>ylU/ht7~ qz<?v }Wxt_?i(>|xWDh :MZoZh<7#Ĭk-q 7y2pk-l*C4BddF>3GFYiPU;…k7p @xmq&](+T /[CWE4 6pBA^hR9AH̘!g4 =D-߂O)n<@v-G"CedCSOprr4O!= cFd;L�CO6^ 2 4j6́S'=x/V}kU{&|{ƽq5Yt4;mS.N?54 >nbO St8q 7c qBuH]$F :)/r?|k߇O=yUY&"12*m ,{/_8\0};1[f fGƘ h29?ƍo~ĬY?!6۶mglbɒ%hj2n5a !!r<�'=97m4Q7AJAʱFݻs lZ3`0kEP(kj?9q+pC\ HL^_vW3f  3h+ਣ^&lhY0Y[�c~運ˁI#N__o.�Yyv [lj?eT]$L`Ds]CRÉYaK`hi-;VQG=x{YV=6,Xm&5kK_3'3܁WU/.:�ߗBY1ۨi{oPos=G}4~_#++ ;v@Mwuu5N:${A{{;~lݺׯGJ# BB4nsHbt8 (, ϶69;㳆p7 ܊R<p1? pak;a�7 zWh Hƌ~3/~!ҭ_?䓥0PH4Pz! 2 (~Bm#AO0fΔaf0ԜqIaP_{R Q%zqΘdC bD/ȌPC#Ho|�\q{w|xʒ.\vIiOAH)mmmXd =\شiF:gqxq5XuI# /v7ئܝP]FE$x- x�p vU+Ǐߴ4hw\S W,2XX> \\ꝱHFv>C{{ 4j4x;t鞶}}T7bLb? N!V! BD&vyÊ>/%M8A<>' B=sm^*\. ?!<shhh]w�pz篼 .\�0o<L:/e{0@AHʖJs+xGFsAvZqyr w &]B#A,"j}? }|tp05tg\urD"`ʀQR*AtcCx2,D B@ #A*2O:0k$Ǿ>s]a&;:f?^!Fx|u4( BW!^DNN0m4dgg#77?ǩ8 3{llڴNj( !#׍aw0++2ᐝ({{koAhXf͞5>wRF5C4�B `P-!Ts1s&jjhU x"!}] Xx96}~~j۷N5yQ(Ah` pQ@CU%4Ȩ9 8*z3&2 HPI B\HAH1۷o矏W_UW]{ W^y%��0jԨ5j8H!b9^!([v8S} HA`C2 ;6nG] �.!㢊 dB ;�V@}bT'vvc̙C %E%2wgD~~dydIU H18~<p@ 2;3D"wO&>$Ȩ! ]½{ V\ϯD!tF8'Wr[$P=~g[QCAH-[e˖lkmm5BGG:<�?===xqwiI2!$XUuZTF#x Œ H3V}>чce^)@r+#G;*<ȨrU ~[XAi_ #!zV vţ-RAxuaQtk>\5L?l=wMd4aZ,5տfQu!AhTC.2o.pN7H9AiҝF4v$7/=Ox?t61=^$Q["jD0kAQF):Dٍy5#&Mͮ h"ˋLxg8Adpu4En!(+�Ro!Kر񋌺\~d١a4Q :A" 2p!$ÌĥAKknnFEG֢ BBheKo[))hoAxC0NvG,{z�\EF9*A㔗'G xDFi z^BNxm-C H"Ƴ [Z8.jhO|E+8n0:YYaV/]dxT۷�P\\r?p#HDPB,!d|/<_HR"aa@AzQG8q̉mxT_&L_,BwEQd4^aV|, q9!h8"NlXnp=|um0̔¬˨$22 Hz W7n<7B<W t奕Q CXZg/0@Fu{aБK/�?)`Gn]tVX }]l߾\re{025Zl�\2ނ082Պn #t)pwufC9!i3f�o,2zu]XFE6CrA}qR|<12Aos8a;憪!4r�Z[}f5@Cm+']?fPYI(AM"A#+ pJevwG xpI'axq뭷?[o/N=Txhoo}݇;׍HB,G|iAiC/EF[͑/&`72#jYR"zG&\dT@C"68ccGދ{Y^8DB5ja �FU p…2Dz*k~az='|M Uc|REop2sIF[?Cc?N_/3Ѱ{ K.G}زe |Ay睾ی=&M[n?.\wyA!$XPath0v QފG@l6GF͚(p0lp5QzW %|yёPHUGnjۋg_jD"{dF h#t3Fv/"²2y߽{o;g5#!:2JwtD4/ ݡhf&--$+_:f̘*d�t !^L̗ӣUl`8Q Fa"kC}E#0:'~F2`5Qaˬ[g OD*U5`A&!T6F"m6,_.׆OFǿAEUl4TOFh2r $X'Up]FHt[[qWXvtFZ� sA&(! @.l:A.6Z_YCšJA |_26γp͕5s*vjCҝ ʒǡFFCLN)΢9JcB3䇍 BBx)(,ub0HP" ȈwLhj iQ {X{4Me{DF"-FvlPD !ܱC݁3,�4y{5"V(2>CEEC|N"Ǎ?+2j$ecrrۗBBHPB,G@0!oB {g˅Q 'RmjA36U44"pLLH)Q}SMt´TD+O?]nWaCH(A(Dt5Bt@?*'GvJu8"@g|F+vOaȥ!~D(0B@ šyH' !E/"MeBBHH( !#i?!0^qQC"r>. �)5��kL{'sDB :Ng-VFFC- 1C^20{//F:494ywމ.2j&SRaxKD&d"遂 ¿-Af0}{߅v[V^!!$$ /l '!N]RE )rvy%_b7PvUIEWu=TJ0#CNB95A#c]]qQťoپ9sUwQd4aEEt5͑ Yno�xGS:2_CNAH !!r4h7mAR{.` ѪF:R遂0IQC ^jGZ%˨Na ?<B#A-g)B> 7zSS:*2M�1y;m8 e�##llt`AvsFV;k !! $XWxed4o‹!LMp05)ڷLFsEcC86+K.h+)?LvL!Cq u<>MdS^)EF�;pG65 B;t)Ӳ\t !!`zBT&_nލމ oj©>PZẍrS:FPCiR4)A8qRܾ5]FJZ�74zH+ŷ%EE #99r>2*DFY?A :V B:g!!$4t !"csB-J8!oD]z ezAhy ;2  Bل孷sEFn-cS8y(^<&2o\^j(a8mm9FEFi.FF !! $Xj*jO 4rU(lDS=e4C!p0UoYg+WLAb=^y72BfMMuMTS2)]D BU_: Uo F)N:PB,G� ;6܂P6wuGj_䌏zSȨ]MeM<B9B}`7O sY2!*2p,2 ]UOB�سG^F*c'7!!$$QQ�raCx!#ݞntz:a޲5|֏0k*x=^ߟٳ2"'L papd4x&e<Qjt^DUHAnzנ?9CH!z( !"�0!o*[* aMd[뺕 ¶QﻬL.o7:sڪi,nqa wѢvvs#H(//Ud4''qC ԋlҙTW>XαٻWC(#v7<]Y !DAAHh΄¾>tI[$!ܽm| 77}kQSPx;v*i lk$ X"mT6;wCNId4QqQ~PEFA,&?{DFUW`A(47Ю9!ddñ /2BBJJ|mmrhGdMA *,>2xrUә_.蛭F'"!bOÏHIggD|#&0�� �IDAT#cQ( COolcee ”y Bfk[Zb !DBB_d4!Ws=} q9$;Q@F;eN1@p#k t5zhvw;J(*cuӁ M3^(!b䈴�OHQrD r)GF zA(K 6!_$ AAH}d+nO%K ܿ!tBfLZ N2*2_4*PE c;$N`$%DXp(�ׇvQ ž)!2OJ ;b!!rMev&NR"_4Su@.ol�veԬP YYrMA8XiU$C jI8))(+󿯑Z�|#_஬ $X~!J t /-~�\.yJu!4 ZwvM8A;a t˾)I#cGp0;/}B_v B AAHѿ*QI&!T D:yyr? n !,)?pP`! a" ;[݃%ͺae%0~|b#7@¡p%2/07+ v{:� BB)Kh;r!HAh˅!#\j%4;a4^96ȈNfŨfQ(B9ʕ HAi~0"j^EF-#9 t! X! ;\H'RY͆͝ЍL2ظ1to}*̆' h42"I! akphS+Ͽ?a�"A� !=t !k`#_C D B\p0v;DFҤH Ha Jy9n\EͲ3s+VvhNNB5Mj@Z+BB)KQ5 tT_:CAh6Cxm$Q%nL]F].9>4Q#l6C1B'K1zAdtC(Ύ B3P-B@vg^C8!ܳG~qPurM 982x8 ko  C� CH !!R#v q[Ţidp#3Ǟ90/ vD~4A8q<9JxX)].)Y{1A/>CH�6!XJpdԦِbK!쉊MX+X[w�v_x�!!~AhtGF(y?xet⢀_iQQ| 4umt !!$XrUdutFƍv;Pb"5! DF-=:ju4*GFICh6m@BB9t !jUdun!` ?@,X h*c t:H!ϗ5^Jն gAXY ,Zcq8:u|b%82:TF sAD͚fC=QBHH( !艶!T0Y‘eth)c*UdEKC u| dqm6YWϗ*2aw !$$B,% >[bk%�dÞi TC GFz ̙fAG(pHݽ[vN;L(AnOCH !!RN�Ы1w{S2,2:±ceHƫᇕ_̞=rnP Bu C8Ѵ4w`!CȦ2PB,T&(2*l rsAMOJ,2wSR; ـӁ/oklB`v;& Nr۷KAVRbH&:]]'il*C !!RT >2jwB2B~r6^Z̏[ ͛ B85mE3gtƸh8fYju\QՂP([3zl96BBCAHh 8[Ch$l68-кO\I@ZF#f5#Y~|p۷m\Q/Ɔ"<8`Ajk !! $XQST[`>2vZ�@cGc̏oGtnt2ewImmgD2̜)޽*{Hͱ([3T�BBHPB,hD-qш;vAhl|�vݛYb޽)zO&RWA>755Csm0I�4Ȩ)6t ! $XQd4Esvӯٳ�?�xZhM TcΑ-;wA$ rMsfCZn=}C}4$b)F--a5R( ½{u/压Kd[k [j\p!PUɁ#Ul%P nCh͆4<A:mC|0db)Q-qQM=2.z!!liA-mun7Qm#U~A!cIXH!%64yt!>BH!c:#j~ҭݻӋ㐢Cc?pLՂ@ 9|GFQFjS@6yeAT8ߔ`Ԩ=93q??#h6ytQBCHB;]8}-]-1=FKW 7RJ C( l(OzPP S81 Sl68Q:( !bu q5F4u4/0w\e[,FhjAY^C(]H/N*5\ 6#]Z^GA>7CUX8P 9s ̑TQBL $Xad�'; řR!RG׃Eyz{e]Sj9%c(HCPj¡Λ�l6MxE !$i $XQd& f޵;csǢ8C*X:6w5�&[LQ0&T%!wݺU:HF`G#Md&%6} !PB,E9Ȩ]Xݳs�@SdTN-[+٣5*6:A p$lѤfR N'@AHUCڅ!L``\=.lv1EF 6N J)5C_CT5MCp%%o+FY!^:8vb)Qy=H>Dqs}ۊ2b*AXR~iDW BC(1C^WAi~6Ga=z0#c;&%(BBI26!֝P9L/VY0/-w>W&XLBpwG*qQSl6+沆b!!RNؼR ;0`J!Ls!͑5k�v+-t;V  .񆆡0!$D�!!R|Me"Ri] ]ͻ0`Rf:sf%Lu*2JPiO\3GBMFN ZC(@b !!RԷ(#Z;1)?Pee%%�˲&]L2GA⍊Ro*CH1b)FQ?2ڗ`AFUk&O CXCYV�Y^(2;CH1b)FMeכXAXR 1!,,׍AHk 5!(AH Z\B̠ $X OZY]l �j2�`Ѝejk1*{�u8i!! $ 0Bv%@AHȨr<TTdWl/ΐ'sա,S:YY(B2ad4 2^:(O>wˑӧ7 :;c#$17$Vjم y`A4insc�G[4Rjq]FHaBA!$ [ODyy9n&`ݺu۰aC$$.EFC聝⢀!ֹ�WC햫T� a|Fb aϣoO�z3ϠC|ĎoN( T3 6iN=#%A B˒{FMee w FFM4)q!!FFJJJn#_a!GFEo#^C:t ֺj�F^v[*0lBB@A$\uU(--=lٲUUUxcG?O0rc&Lm{-<]0xa# 9Μ+,EErQ<vXCH;aPQb#IByy9>s98#}_;##$5^{BkFN(25&U!ht5*A!P& ?>�'Daa!VX hzߛn yyy/^ŋ'  Fc'z{7-ѝ 7bi~C0�B2CC93(7_r�׋gXx1 ⨣p 42י讖]Ȯ@zq($ B"P!ʐ al6&l>!$ǑGs=ؼy!E-JQ:N̟hz}q ʴ 01;{HhB"0IE__v�x<V! (2�6DW_bk؏>a(\u(4qض0X70IB;A10I8ꨣqFl߾=`e`qa ё_v j:!hjx cPxEFpDsL 2#SXC$?+sGAAVXz \s BBNv$;EE�Fwp4! Ygk+�C3(; Wm݆]]]8q"n|C}x .vp#'�e@Tuu:� $dp8s(_ !B̡ L"̙+WaPL#p&l9 ׺j�Lʰ2DFBa !!R"%,2yr9(L/4M~z>l-jP̒+z{:ET!! BBj0I3fCaz!Q8((B=hП-/) !Cnk !fPB,EEF9((*2Z1 $ -!`zBH( !bx--!5B|Fř s!$ %t !@AH2)Zb"+wDu[5ΚtVFֶך Bt !PB,lD-Q!\s's<NJg! $ %:.8vb)2A]F34':\?882u:eRB:CHUCMſwȲ#1n_Qzw}DڻuGFYCHI4_r!!:K1C]|�PS܏sqd5df�BB9t !bT&ߦ2w ӋD| �@M[Mֺj�LBHM !$"!$CAHn*n n{k GEN l/C:n7ABУ!BB K5 :!|{Je^ʲ`l9u:9ҐxAB. $Xc;wt8zhjܱpآ+v(,!ubT(D!!daQBHPB,,2; .uUmU3fPȩ82j%$:P!! BBEF0uUU;HA]YSZ�!!$9CH� BBGFdW4G�ĥ0)BB]Q:3( !Rt0xACXCY d !!$;!! BB! cVU@LC:;@߀QBH2BBHPB,EEFU qr}0(�kgz_ȩ3.6!!$CH� BBGFTCXV�3zPNo]_/~"85d5 $XZEF===5>Ѫ*#3upr!p;7ВC%;a !!$2JAH1b)fьDF?r�r9J2t&~w`w(!$p%ÃիWf[~}mmۆ>(,,Ē%K4DG8�!# J!a䄢"{>o~ϟ`w!$Øog6i$8餓{uV_)))VrBAH!Ā�*7渘a4Ϟ獟cy{<OhuXT1BH軌 f̝;^xw}7:;;i&- ̙3gq~i\s5Vj(!R g#p"v٘]1[ty9@Fp1! B2BՌ W^y .A�7oN_|Ѫ<( $X5 a ю< 4p?ǎ>Vmw߾#SE1!L CHW^y%rssN; 6l]WSSFs17{llڴCMz( !bMOu@CX*GNT}Usg357/O׭v�2'iRj;AN_|1~c;uV̝;7o��F5FЫ 5k1hHsTCf#2׃&gc}Z6S1=y'l6@:$Yl-[w;+`…qa?9V\N�R<&{tvvL?K1�N3hu[5�,8xo۷I?P |L.,oip kx[.!dэ�B,^/ضqF}cҤI7^{ B�)6QBGFU-xJ ;cg#͑ہ?nQ/|TT̑7G\vP\ <0krΠB kb̘1EEUtTOmm-  $XWxF=~yY] ϾͥYi6Դ@PfN)<HKV6yaS }W!$Û]v!==YYY@qq1>[~=8!8䅂b)¤q!~P “O:le[v)~qӮ.࣏~wN!qG B!>466ضe,_g~�]tVXj߶w}۷o%\bɱ,b)^ h,akNpjwJGYdSkE.xʥ�� �IDAT-i,.^ ,_\|񠏝BN=&@ -Z wq())_|'xYYYoݭފ^z z*nFa+ <�:K"L[쌞p0ر̙R}OY|Q/�7mzzXF> BI]�:dp <�~⥗^_O>ӦMnx0i$r-pB; !!R#@N\u-:AXY 'կK�\ ٳ]ruH#d' 7܀n!Θ1oV!!RʴXj5~97. @FFڍS1Gf>_?H!ɌXCH1b)c'0蠆B�XرCENںmPB~Ah2J1b)^ "mР<<;tv ~� |Sl)8rT�ܴ ((u B4b!!RDh,aYVRzp8 ?ظ9R^vƍ9BB̡ $XJpd%02K ᠆BM.!!d\r. $XJ"Qv9SPQG7"ۙ󦝇Kf=p@H BB BB9K `ѣGF7Bv%CAH.iA;ZgEPaTl㏁ `ʔA!XBB1K!b`dԨ݀g<+q%<]hnCiViRYX?8QІ ۗ/N?]L !`eFb#M!$~!|5@__P .2UWX%c8l8spn��fF!/MP ֭y&BPӟe:K /2*"+^[yO'u8yɨs g�PYAtw;W_RRsύl Bs !PB,ET&X!ִ 3g;G|Y(*3!XVUKB@VV_yEyyB!$D�!!Ra !7ۚazt}KJ}n%3#;Jy!z`#7!$ BL $XQd�zz m^eaiHFv{ښ1&c*LekEyEoBItMe!f !Rc'B�FKW aVZ[B#ͷ}r D@lr� r BB02J1!!R4inO75m�RtJF!4Tu^͸(!D/5:c( !"D`Slߚta[68lL.oYV� 69a6PGA!Ϗ|߄,!B̡ $XJpdTE趦m\0)J zWB�;(BlBHc'!PB,%82 nO7l2~�2`lwFFr{{iߍllN(!6!XJpdT/}5×n$$!1rz;v;w?J!b!! BBx7ld mB@F@x7.f#'!$#(k !oB;*2n � ²ȨJCg;6C' v%D�!!R5�GN(ʲ+qq au)>'`zs !fPB,%TdTn݄c9YѨº:`ԨA=!DBBB K$2 �PY0UtG:R";zlpO!B(! BBȨQE{p��  (,a\AB@_CHb!!R fCg' T{gS0K{*6Z摒( !BBH :S( !" iZ[zAi%^Zh!AQBȁ5 $XWxX:B3Pu9;vt�mmBFQz;@b !!RMeL݉Bg??=) !oFC2EFYCH11@Y!76͆ҬRԻ!@BPP!!:KQMeaFJi\TQ)g{tF_HAH kt !!$X;avv&M2Թ7n =lB9rB BBxEA='vY3_шN%%E! k|!z%!"o*A;9AI9 !!RA L)i6E@W^xG'$|Q !! BBh,4=}=z((zKA=uuAH9KF( !(�|Zqѕ+!;32JI!CH1b)q:`&_QBCH1b)9FzKU @g'!!d/Ʀ2S8vb)"git tW9FV z95rBB!t !ޘ#b5;ԩN^!$ CH !!R @s3!!�.LO!PB,E@& •+B`l)�MMA !`" BBK /<OOLaCrgޣ IR \R^ˊҮ:u,-`ZfjJ/㍢m)0NcTYSzn.o-8UWZE@@As=c}$AZ+9|q:1<y}.?8aBܶmc8aq>$!�2ƨ#eESF쑞^93qa(+'�7T�Uyp젱rh#'6m ?q@@JU%(�22Jt? ?OTSY<q4ujZ2{H�$[]#*� B*cLQ*ChO<4cF;eB*�d t$1B��򍯎Iۥ]~~„`B!q$ ZFQ��22p5xp0 (v 겟0A::�MG@4!�1hw𭷂Ǐ~4p ?p]yH.B��1x̭/UTHO< !u2|!|B�VutB_J9FzT7! @ `oⷌ66淋&L ( T/ �@!B�� eEC=BEGp~W'D ȨvP"蟸CB�VƗpU]]OJ�e!B U8r"}¶62P@D@7�/;r'\J_(+ "W/�UBhW�/FF2naP˨H7KW/�B� #cX!,>ӴiEb�dVC -�_@[С(BB `"vr� O@!�JR!]�,@`B�qR2�Xedv⭷�PU2�XUԖVi^ZFוV B��2kLwKs]yډB��2 :N>YwKs]9bz*�"X 1FRiӦs=YJ�YƔQP!@xo߮_~9c�Z2!ztA8 aE?'� �#xW׿uwq4iN~;ۇ*(]~4e?J?~�PXf)�"#z5jTϛ6mҝwީo}[Zro߮+2e1w#qA�5VN�@\Wn0H@P|MM815kho9ݻw뮻@e9 ҃J+J\ -_56Jӧ�Ы\q@aT#)\?f͚%'9裏VSSSGz==Cot%ܹ9]pAPB�]CH@a?^6l1F6mΝ;5k֬;wСCc<!{67ޘ~3+ט0 �1e@7h}O/Ç'>}Qx1i{IHGg?o+T O@a|+C=aÆ__UYY)Iڿ }k1蝂=<( YgIcHMMT+Yk'G Lzt'<c ͘1#{р>(*۵B"Kx5B�J *�q0i3f._^q |K=m-%?6oQ��er@aҋ/K/TZe|r+q31ahss@8ptE=�9YCeG L<y/^'xB{]wݥ:]wu8q=X]|ڸq>.kT�Z;A@>aC^wyvޭzJwz)uY>|̙oY{@PK~&�賨SNӮ]rJUWWkZjUGzc$*�`P!%#<R٩q U6T�=ו !T#lݺUWznƍ?SN9E+V$UTThȑqi �INB 0~Oϯ/7ސ1F-Uh�k\Wn0B�Q^|E}SJ;ze͝;@|HEB !pX}#F8pFo~͘1#~V۶mx@QcC�^bz*@O^Zw+5p@ :Ts<銏@a_*Ijjj?}s<(G �|Kr8ݼck�r|?iVG9sjӦM )9tMjkkO?SO1 +XL߃ a !�|xY{ @Oo矟=ܣ#<R6lPee|׆ tx᪫ҹ瞫;S{wܡѣGK I׮]U1sAhe!d3mmmN֬YTYY)I'>z+0uww믿sfX2 />[8p&On$_ C2J � 22ꫯ뺚<yrk/fΜVӾ}|ǏJ{9k9sf={hP@azg"_s]Wo>:So>-]T7xfϞ;wkqe�,ʸCF-[L3Q~o߮kF_~z!͘1C?緿m]VSLь34n8͞=;M4d'۸C;Ќ3t)D}v~ۊ5{=͛7OsѺuyrB�8|T]~:ٙW[lZZZuVIO3foׂ "?_j=C:u~#$;jjjҷ,"~MMM){oꫯ$a)*�`QBy'~zԅ^W!\~fϞ tgj„ ZfM@(I ,|V?|e@t}K][y͛7kڴiE7o֐!C[oֶm4p@}k_ 7ܠ~= .B<v�>Qӣ/I$⋵`͝;wj޽:^6m~v|IW=r(ӟ(#¤/ZfM7 <L^wG???iQm٩s9G7tuM7ݤw}WsOQBÖJi�+> !oY;vУ>zSS$i̘1y3FWGGGjrhnA]vjjjt 'hذay[IK,ђ%K$cnV}_<>@wb I>vZJ?яtqE~… 5tЬPs"۵. �'!{QV^իWg=w.?wҥKtRFOKK$Evم+%ZZZ"S|A}#ߣ7#F"j*=+tI'JOs/�p2[F E1^xM:\q1b.l֖Zkkkzuy0(رc׿UGydF]zo{2J R2B۶m/~ XB[[[ޮ7|SC IT[[Y|3z饗J(CT"y۳n7zk%i׮]#Gqe�,B>fΝ}_\r9ۖ-[ꫯc*7N#GԳ>9l٢O<Xr6mڤ믿^/_,P!tR9 yK.c}_Zgz[oUee>qH_B�V8Ce<yެō1+tAg?ӱ+I:suw1zGѶmteGuo/^*8qd8zJ7@(+6x≺ tmS~~iݺuZdFmL@B �8\CeMmm/= 7H>sK,ڵkugK/UsszM2E/5]W_}4uȻLEI|:ꨣ_J{Ə+VK.h@Q[F{X!;g>u%p'/עExbUUUiZ|yj*uYR@Xo뮻Nooq?^f/PQQ Ee2J}c=ĉqC\={vCe"/ɓu 7hС;w/iȐ!4yd@sH-B�8|YCe=OOz'>5T#\xJ$zg4mڴ׶l٢Yf颋.~xR��˨+T}}: ÇtG e? 4}t-\P˖-d@ �,+R!z$_ԪU"q% *a#Gթ�z.2Bc�P SF} !q0… uM7_ƌڮ]\ .t@2v@�+BhD8Vʼn@(iy-?^s?xIҫO{,|-#{dR!@({^瞼^z%]~ZhQ)9=n=x0xB�u儁 !BI۷o@)B�(וA�D!J?~|G�82 ¤9sQ֒G�� �IDAT￿D#T !nz!UUUiђoKf[Rw, aҸqsN1B_WU__rIR!�+2NP!;vG'?I]uUG?~{}<OqhsTQ!UU8�]SF@ LrGgt-IׯuEiԨQu֩5!�V};�"# 0@_fٳGVݻU__믿>!]�$[FN�D B[[~aw}ںuuG},\;e@�Ẓ1qYL 0G"ƍukԨQjhhPkk~_ּy>"kZF{v@�/2ȕS!)Iu=hڵzwtꩧkїe1"}-�`Yx82TD &}ӟVMMf͚?^hǎڱcGǜtIO n-B� v)�"3hÆ ڰaC8S}!y#@ߖY!d(¤n-#�}^e astV�}Z/� @=#�}^e;�`E8e{Db(�k?7[G.{D"&ծP�#*�"XC(�XfB�d:Nwjo::�P a8C B�d [9�iaЧB 5=67T*L@շBH ×*ÔQ�� ە\PyPB�(PG;�"X+9EE bJR!@ZFTPL@BH(�XB� &CtW!<ҩ�Ks@!B�֤ZF{)��=:rS!@ThWavQ�(5=n%@q:2,@Thwk'�P2Nr�@!$@qdTD &2 �VBQ!@!<҉�*C@!�kwCe@ `MeZ:�qY !|B�haKtN�}\V(B��Qh[TUeD�DZ@7�P!�OV B 5#NWz�P<@P!P�5Q*�`Ebz*�Xm˨KB�(T D@!�kk' |ik -�TD!&2ZBB*�PPB��v!�+B��q(�#U!C 5a+2<82ZFC 5TT#&2P@qdR!@nR!l5T#&lu }!@q-!hB�t;T@�ŕ2J@>!�k];Q�(2B 5) �;52-�`wt@bHO�}B� Gk'P�8|;B�� 2J(�SF d (B�8*1�P!@e@ȄQ�(T Ce�D"#ǸT5o3c�P\ aw@ `M- JBHơB 5eɖ (@�e#.D `#*�`몂)� ulB 5=j%@qy^e !|B�2LsݠBȔQ��B�1<(@c]'q@!�k–Z|T-TD!7>SFp(wD #u2�P|@H@!�kQ*�`!�a(�Ā !.XcL7{2 �yrC�!�k|u1TS}*�Pl cD `M¶@�yr(@*#�+5T !|B�t !�3F)�"XӣQ�@q2 B�քk''E*�P5].'@ix<_2TD ˖Q�@ix\Q!@�@ \WwG/ܹsuji;}_~e͜9SVmm͛}pV�A({*ϓS!D߰c<xP_5vX}Zn7пۿIukذakܬ'z饗eUVV7)B�B@ix\cC>a֬Y5kVs^xN[n%-[mݺUuuuӧkƌ۵`g/W7 -�`SFǹ5{T3<S&LК5k8f٢B.[F*�BA|>8p@6mڤ+WJvܩ{OiӦ鷿5!�k*�1<*s-Z[nETQQoQ7%IMMM1c}ܘ1c~uttp0@.NI�u2TQV^իWg=wn?/k׮]uEFZZZ$IUdN*hii!&X.wڨ@)x^04¡BР^xM:ˏ;t 'H;<}… U__IR[}5yE%|0TEa(�}*=\8p@JU4lԤZ�e !�_rdd( D]ոq4rH=yex≶W�rLk+�J! /"!z{=ѡ;S4ib1~<mۦsZ;ooB�[F �P|B !zo~jnn駟cjݺꫯWp%Khڵ:3t饗Y_L(/B�2 �1ԔQ*藿~wѐ!Ct)hʕ:3SWWW\-ŋUUUٳgkA ` Ce� !DR__ĉq!�kS!�\;� "7$�UQ*�X!d �XyrE@4!�k|�}TC 5:NċB�(=B��BȔQ�(>ϓch@;�`_ƔQ*�rX2e�,JR!@�@ \7hd#7>-�`[X!ԙD 5o <9aK�rXC(� *#*�Xe(Ce�4µB 5+HB�(ϓ *�rXk'ۃG!�_Q*�rXc'煶@�ŗ2`!B�l !SF2[FC 5_e5xB�ŗ2J@.!�k2*>B�9�w �`wt@-B�(ו Td#ۡ2B�(Q*�W_-u5y丏o[F2 �ŗ5T !l2بe˖ir)T!d(�NX!4_@h_~N;4uvvj߾}q( ##e'IrHP! az'~zXB*3–ѼIt󌔠B $ ]|Z`&Mqb � Y!d>�de|ڱc}Ѹ]pwQ�*e3A@6aywtR-]T= jСY544G)U0@�Ö2J@.a+4b]|Ňq+VI'TSSph[A�( !{ m۶VX󭭭jooכo!Chذa18<]4C );wKt1Ǥ޶l٢W_}UtUW}Lt9T@�2B�ɓ'{Z1aW\g?=O>#?!�J'e !\2Q[[/| yp >M髫8�}-!28g*J�J)�@=cq(ZF - *�rP!`M8T&M  +>@>!�kLWw �PBZFD 7u,!�k*ÔQ�(Q*�rXc/ZFQE `MP!$U->B�9�)@�ÔQ�] Ƨe�˨r@.!�k*�1!.X �AF(w"(XL89Ot2ZFE `MQ!�NF(w"Q�AV(B��&Rg'�J%e !lB�J9¶)�PaP!@0R!O@!�k"[F �PZ-T"_[F �P-T &!$@iQ!!�k$7; ȼCB�9�1Ɨ#'I*�PZL!�ko;B�(̖QA `B�.e !lB�9�jB 52 �1e@�1maQ��,B�(,@##7BJQQ!@SF++ܠ�( ZFA `M0e4evQ�(-c1=HB�DVۥ9�a(k'� B!�VeP!@#o;mmB�(5*� ȧB�q!�0JG!d �V8e !B�VB�qHR!@T07r�J/2jA `EX!l%@iZFF `ECHd(wd(B��HR!�<O/%A `E !w\WP!@B}LP�!Q!P�]B�E@B�Vl!�BQ!@Me!�@ `ECHP@iy\ߑB�9�۔\}'H !B�V�b2J@.!�+Rk'2 �BQ!@.[FC�2J@.!�+C�1JN!\B�VNdV}_ @@B�VD �PZ'!"!$+!r]yơB -a B�l5 @ȡ2mm#�Ju �9�Hh%@iQ!Dꢋ.ҤI4h }Ѫ׶m_̙35x`j޼yڷo_ .oq�@e(wXL>SO=sjʔ)jjjʕ+uI'駟֤I$I:5l0]s5jnnO~Kڲe*++c!�+R-.B�.lB^.ӴiTQ1<yZu]e˖E[nU]]$i1cnv-X #ZFXne �XyrCީ%ĉ+[~fϞ tgj„ ZfB�V0T�bR!Ddў={4bIΝ;w^|y;m4mݺ!{ �PZQ*{nڵK&IҘ1cw̘1ڿ:::q]2T�J+2**(/Wի;p@?W^х^N;M$ETEuuu}, "e !�y򌑡B2Р^xM:ۏݽ{:, 6L֭Ku!H«)Z[[B�D!�ɵT78p@f{ァ'|RGNT[[Ku0�%[FCUsk͛7xƍȑ#}-[t':jP�VFB@i%P!DoH$T__gyFk׮)~{|A566{Gm6͝;q{*�HCeh�JB.<9sh߾}y'IZd֮]38C^zukʔ)?~G/[B�VCXY)e>�(>x8x=Y9 uuuzǵh"-^XUUU={/_B�Vl �SFEc=8q6nX !`EzLN( B T:ϓK>B�9�[F=7g!�J/2*A `E2P!�C�!�+ r�J/\;A@!�+"[F+7!@{ �Pz'Wb<B�VZF}Ti@ !wוbz��H!d(�X.B -!�;{* [F �PzT@ `E!K B  !w> N2 ;!�<O `(�J/=!B�V�be'b>rC `EzwdХB @RwF `EQ�_ƹ>{d#"le!�Ā !�+w>(@ajʨ1RG�l[F �rX2<XL�!�+–Q'*� "oD*�B�X7T !�C P�¶@�CH @ec �X@6!�+J-! [FA `Ezwd˨G@!�+~ΔQ==&�(7B�VSFZF �Pz@1e@!�+d=�`_j1}"�(7B�Vt*C�J/Q��+B�� zTT(B��H$|8$!�(@ ɸ23@!$A `Eϩa0S�(ph@`LN(pO@6!�+"[F?�v-"F `E^(B�'le(B�Vk're@ AХB�qHM%F `8顢!�{R-!@ȡ2TZF@ `EB�IK@!�+1L$+.B�9��bA(�kB�ZF �XP�QvB!@`!Ce� . ǑS!@ ch+WB��le �X;Ce�!7>k'� Fq* :N U!g}V]t&MA裏V}}mрÖ0>SF F2 OE@u]zJsՔ)SԤ+WꤓNO?I&}DC ;!wY; \ve6m**gɓuꮻt1!X!@XFN=Լ;8M8QJ ''a|e!�Xeh;e={hĈq8,-B�wC ,sw}vڥȖQ5TDe+ ui/~ .СCkhhPCCC2jA�,  �L޽[gu u;+tI'Y<p a{{$�1N@  8p@f{ァ'|RGHa󍟾CH �|בg& �Lkk̙^{M7o?oR-a !�Xct(�e$H^<>r)q (p !�A˨nz�e.<9sh߾}�� �IDATyɀ×3ZFڂ' �`D(l2/q=z^s@^D8|)D ,+=XG�J&a)!�k5;� %B*�`aX!�Y{C�72T��/@|–фO@-!�kL2J@!�+2T`!B��Z;B�θ.w!"*8B�1[F}*�2Xr�be !4!�+ZF@XY�_1^2J@&!�+LPJ��+e ! B�Vdq�, R!@ ?2*C �–QD `EPR(�v1e@!�+1r3H� s@&!�+RrC�KN%H#7>B�!e@BI!8x<A `o|9CeU �d;�`Ce�D "2J�b-Td""o wB�iB�VdR!�eԧB^h̙>|\w/fΜVӾ},X2B�e(z{ꪫO$9~:ӵ}v]s5Ciƌ}V�!%!D/6vX޽[F?iӦE߲eҢ[N4}t͘1C~,X`e !�KL7x!�</ !zhԨQ~z͞=;%3Ԅ f͚7!—/�bN!;wj޽:^6mnédT[[ �`lBI4f̘ƌs0wXaV[Zx�WL!իz8pXETq=:>u !�+|B!�UR!DhhhPCCCs/N?gMgZ[[$ T>ǥB~!l [G3555`!�+B!�XTxB*ƍ#Gg{m˖-Xad=D0e@�vSF8s1#<m۶iܹ1pƘB']B +WԻᆱ]vI~رCt%hȐ!Zd֮]38C^zukʔ)?~/;B�VpLr�,KoJѽޫ 6q͛7OC Q]]q-ZH/VUUfϞ˗s00&>�,qÖQ*^ĉq!�+hx9^2J@&!�+hy)Td "hu �)�"Xa}@�vZFH#"o �r**@H( B�V9-� ~;;c> rB ` �[l3>@Ƙ`(k'� L{�e@Bl0@r�6y@hB�iD#7CHu�!-��CH �/y@ F~p@�pSBN�H#"k!�sSFŔQ��0:@\ G ` !;:72Xad R!�b B�V0T�VŔQ��,1B�Qz SFXj%@,JG `-�p!B��,1r �ףB Ae�$luX; % !k'� = ZFXad0T�b@!�+*�JMC @#7RG�bUwiF `q|ՄmJB�I!-�2Xb�#RSFd#Ĩ: ��RBZFd 8AT:'^Td Ĩ:A BN�D `QM'w 6Q!4!�K|*�BB��p?>7P!@ #_մ@|B ! B�UwR!ؤv{�e@Ǩ*lWUY�?J: � F~p*C �PH2�v8FU@\X; % �e0T@QU@�q [FB�iB�v8FUB�Mj-��JΘ`�b8#-�2Q2&:O�WÔQ��JO6z@B�Ha!4!e�C•B�iB�%l'@#!4! [FhX* @Ʌ-hX%Q!@RSFiX%\)�\2Z �/F PrQ@# ! B�%CH(�)H.B��J.CXI X#1T@!3 ?A B!4!󍯚�E PrFF5? 6F!@|㫚@� 2 @|ߤ[FC�H!@>-�PB Pr �@9H8SFd!(9*�P|Ǒ3T@@e!$@l|ǑC@!K>B�( בG @a�_C( B�%5T*ֳ�@p* @ɡ2$lj8�oCe��J.*9 �)*C(4!K$2B�{"(9*�PȥB @u&+ !�*A @ *�P��J7Ahb�q\*�\ZF@h@¡2긏�{"(p1_E�S!@:~!B�@.! + *�c1= B�%B !�8*�2\Q�WqB�iB�%*�+qQ!@R-!X2 @ɥNP!8R]sQ� !3%SSQ�_{ر.=DGP&�JiiB�ۋGӎҺuq@ (95�x?RڰAJ$>2@ Pra T5-�/G7JڳG> 2@ Prnk$ZF n\=7zяJk}�e@Z[G�@Ǒq${~q @�JKU �'G|K_H�bF Prn[a -�'q$Sci2ҎһoJK4nyH_5thio.ĿIÇK&ocJS3~ķ2y[[_7iH|UT+WO<$ɩ9"@nm? _"rK:a޼ G 8o~?�Qopd"B!Ǒ JUVNcnk_z> VTgt} 3 <<i|ݽ f7O  8"wwo7ÌVHgg 3`@þK/I?#Z5U8rds�JΑ#/}I&c.ur{-{eyُy^$o\7xf%_KJ7lL ^0 sD@gGÁo8ݺgcjjӥKH[[.]KLg?[cސ4wAQ?\ r#H+I^hQ4$ƨumELGXt0$4MI c鴣?LT%bL+1U0V\ݕuX69sgϹ! 8j֑:&{|ZTB|'EDB=|#qׯۦ[ґa2 MQQV^n.\Uccm~lSZccmA:sF:uJ:wC[SkBCmG""l_]-%$ئ]?L~=k;Z]m{Sum&BwE??[h uu^v|K?]ԩԩZo4u9yyyz'[ު8B(IIٷvpneKڻ\g=3^cV.w }큭V}Eҭ>>~8ۃba?=nk^55zouGX:kk>6i2a2o<*33SC QNNM{jرnי+ՊLM‚CmSw5 64!!Rrm2 $I~FlVN~ d? :#cf@Chǎֲe$IsQrr/_|y,Xcma��𑯚| x/̝+{sL&-X@:Ϗ.�<!3w>Fg=Dii>rHIұc<Q)8B�=ok/ĘqhQYYhv{[EE˼/'@; ]zUGtYaj}Y7n^֚M QINk\Ș#uuu2L.հ咤w֮Nb4x[x۷۟P%@}.7Ș#AAAX,.AAA.y}<x���Wyyyy3u"::!JIRLL˼H͞=k���SZZ:n*CԩSqj?t$DY���@{3gjj͎6Ţ=Z`u���1f|2C5Jfʕ+7(!!A۶mW_}O���xcҥK(##CVU;wԸq㜖X,ZbbbbԻwo=Z}ڶo>JJJ<] IՋ/)S(<<\ڶmeO8)SO>3<K.us@y탇ꁪatŋ5l0(..NfYeee.˺o_v>!AL&^}Uꫭ.7o<*33SC QNNM{ܚI222_kj�g/^TVVj߾}qYܹszu֩FTRR�Tjv+[nuj 2'򊊋5k,=Ԇ O>DÆ v֘C 2%%%ڱcl2IҜ9s˗hC=3fx ]pAQQQ:r kתN%Na4i{==Y6 ۭ$詧�y9Rl߯?$vN2s=h3LZ`uyVI555yK\KQQQljK 裏:'4qD%&&k 4>QQТ1c8AI{@'Otv)--UbbBBB{;扲v?BCC &ȑ#. #ϟŋ5by#GTiio]wݥ}*""B/Vmm$vX|׊D۝8eTVV*::ڥ:O3L9sMH}C=A/>nr=NLLVXT566Ho?}%rssUQQ5kHNB/SWW'4cƌј1c?裚9sx\REEEh?{V?�=ڵk~OOOWbbVZfUH'Oԯ~+iܹoz Y,z|$$$޽{ۼ)},0233={x؅ 4}tq\C 2nO Vu aװdsTDD{5+WxԵk4uTUWWk0`cm!z:uJ555N$łW9s挂\nTT~tay%%%*555tR`@ztiܹSIIINo̜9SVU7ovY,h8pܻxKC'O@E@=ڹsΝ;h۳g4k,VgX\v$KRVV$iʔ)] jl6СC׏~#v&.:fYߔm۶M~٣qy<ń Իwo3FQQQ/yfL&t$iÆ z***qF͘1ñ׿.;wN)))۷222TSS^{M:|00۵^rE)))zꩧ?Oiԩڵk'ˇ-]To{1駟$nB BEWև~*?TVV&M�֯_\>}ZՊĉ/{tyC||Ξ=+I455G劍$}Zl/ɤӧ##nCCCd}'jՐ!C4{l7+'Ə?M|||dZv=!�������A�������`PB����0(!�������� @�<xϟ2\ɓh7*..N7n袪�� �^׮]sb\[nժUhƍڴiSU���eZ NҖ-[<PU?{я;Zd2iܹz׻2����/ ???T^CCrssޡuYݻ+�@�//_.I|}}W_Irޓ߯ŋ+22RaaaZpTUUgyFኈЊ+\fccx 6LAAA0`-ZWYue'?q~z 6L ȑ#Ljj'����^O<ʔ7xC5K,QLL֬YbmٲE׿{W֭Ӯ]k)99YsqpBm۶M?ϵtR9sF6lPii8 ?J<(8oٲE5k233U__ǏDO>Ӳ:p@3��ZC �x_)))~3ƶkhڵKh">}Z/~zKjzwpںud67~xM2E.'O*""B!!!NvRrrvfB�@Q�ނ ~5jK3g8'ҥK)55Um^we>6k S]]\�;E �|~$144T4h *eeev횢\Z]xͿ7+VPHHFD-^Xluu�N�|tQw\cc}vׯտ$Ν;{n~;KNVUU)88X&տ�@G�^;%$$hϞ=JKKS``۷F}q׻wo+==] 1c^~e իcr :;��Q�W $S;;Si6eZ͛7uڵV+--MMMM. ^|�GkhhpwQk��8B�*#F$ZJfYO޽{^N5~X .Ժut1M4I*++SAA|M͘1;v"""Giɓ'+::Ziii߿b��IDATN8zKӧOw^I:r䈪�;B�W1bqF޽[MMM*//WllI[jko;CÇkӦMZj9shرګW/͞=[z-Rnn?4h222i|9I��:OSgN��n+))IEEE0aB׳X,<x^x-Y +��Ѕ`+w^NNL&-ZE�B����0,���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ����"���A�������`PB����0(!�������� @����E ���� LS~D����IENDB`�������������������������������������������������flent-2.2.0/setup.cfg�������������������������������������������������������������������������������0000664�0000000�0000000�00000000170�14670056262�0014452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[bdist_wheel] universal=1 [flake8] exclude=doc,build,dist,__pycache__,.git max-line-length=82 [pycodestyle] ignore=E501 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/setup.py��������������������������������������������������������������������������������0000664�0000000�0000000�00000011646�14670056262�0014355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # setup.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 4 December 2012 # Copyright (c) 2012-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function import os import sys from setuptools import setup from setuptools.command.build_py import build_py as _build_py from setuptools.command.sdist import sdist as _sdist from flent.build_info import VERSION from glob import glob version_string = VERSION if sys.version_info[:3] < (3, 6, 0): sys.stderr.write("Sorry, Flent requires v3.6 or later of Python.\n") sys.exit(1) def rewrite_build_info(module_file): with open(module_file, 'w') as module_fp: module_fp.write('# -*- coding: UTF-8 -*-\n\n') module_fp.write("import os\n") module_fp.write("VERSION='%s'\n" % (version_string)) module_fp.write("DATA_DIR=os.path.dirname(__file__)\n") class build_py(_build_py): """build_py command This specific build_py command will modify module 'flent.build_config' so that it contains information on installation prefixes afterwards. """ def build_module(self, module, module_file, package): orig_content = None if module == 'build_info' and package == 'flent': with open(module_file, 'rb') as module_fp: orig_content = module_fp.read() rewrite_build_info(module_file) _build_py.build_module(self, module, module_file, package) if orig_content is not None: with open(module_file, 'wb') as module_fp: module_fp.write(orig_content) class sdist(_sdist): def make_release_tree(self, base_dir, files): if 'flent/build_info.py' in files and not self.dry_run: files = [f for f in files if f != 'flent/build_info.py'] _sdist.make_release_tree(self, base_dir, files) rewrite_build_info(os.path.join(base_dir, 'flent/build_info.py')) else: _sdist.make_release_tree(self, base_dir, files) data_files = [('share/doc/flent', ['BUGS', 'README.rst', 'CHANGES.md', 'flent-paper.batch'] + glob("*.example")), ('share/man/man1', ['man/flent.1']), ('share/doc/flent/misc', glob("misc/*")), ('share/mime/packages', ['flent-mime.xml']), ('share/applications', ['flent.desktop']), ('share/metainfo', ['flent.appdata.xml'])] classifiers = [ 'Development Status :: 5 - Production/Stable', 'Environment :: Console', 'Environment :: MacOS X', 'Environment :: X11 Applications', 'Environment :: X11 Applications :: Qt', 'Intended Audience :: Developers', 'Intended Audience :: Education', 'Intended Audience :: Science/Research', 'Intended Audience :: System Administrators', 'Intended Audience :: Telecommunications Industry', 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', 'Operating System :: MacOS :: MacOS X', 'Operating System :: POSIX', 'Programming Language :: Python', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3 :: Only', 'Topic :: Internet', 'Topic :: System :: Benchmark', 'Topic :: System :: Networking', 'Topic :: Utilities', ] with open("README.rst") as fp: long_description = "\n" + fp.read() setup(name="flent", version=version_string, description="The FLExible Network Tester", long_description=long_description, include_package_data=True, author="Toke Høiland-Jørgensen <toke@toke.dk>", author_email="toke@toke.dk", url="http://flent.org", license="GNU GPLv3", classifiers=classifiers, packages=["flent", "flent.scripts", "flent.tests", "flent.ui"], entry_points={'console_scripts': ['flent = flent:run_flent'], 'gui_scripts': ['flent-gui = flent:run_flent_gui']}, zip_safe=False, data_files=data_files, cmdclass={'build_py': build_py, 'sdist': sdist}, extras_require={ 'GUI': ['QtPy', 'PyQt5'], 'Plots': ['matplotlib>=1.5'], }, ) ������������������������������������������������������������������������������������������flent-2.2.0/unittests/������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0014675�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/__init__.py�������������������������������������������������������������������0000664�0000000�0000000�00000003462�14670056262�0017013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # __init__.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 16 July 2015 # Copyright (c) 2015-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import os import unittest from . import test_util from . import test_formatters from . import test_metadata from . import test_parsers from . import test_plotters from . import test_tests from . import test_gui test_suite = unittest.TestSuite([test_util.test_suite, test_formatters.test_suite, test_metadata.test_suite, test_parsers.test_suite, test_plotters.test_suite, test_tests.test_suite, test_gui.test_suite, ]) all_tests = unittest.TestSuite([test_suite, test_plotters.plot_suite]) def load_tests(loader, standard_tests, pattern): suite = os.getenv("TEST_SUITE", None) if suite == "all_tests": return all_tests return test_suite if __name__ == "__main__": unittest.main(verbosity=2) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_data/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�14670056262�0016645�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_data/test-http-1up.flent.gz����������������������������������������������0000664�0000000�0000000�00000074130�14670056262�0022762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������_Ubatch-http-1up-2015-07-12T201155-multi-100Mbit-google-fq_codel-cubic-01.flent�kq-ݿO31~ǦmȒB;dA@?>ke*޶|MIij]+O=z>GO/_=՗~߿ ۣO}_O{ 1_>__$_? B>/7߽wo/śo_}o{w/_ݿ~7}믟WW[.5A~ūݿի?wx~'t?~/v?xϿ =IO|z?5~xQy^|7wo7Ͽݿu|{/o^>~?}7~󷿻B/^}no{|\�n{_k.ex7^>vR~G ~O|'?k٩~xݛp%o_x^N'ɓo͛}\wo_js4)u{;лg?y^-!>##yGû>zCo~=2]7ݣ\顅x~o޿G~y<A}Uo5Kԇw?k^g~_J4C97[>}ӯǗݺVcM{}y_믟Wݿ/\~l.<}gӧ_ٟz?j/ĞGwo߾yzWCq׿~yuR*[< Iz哗Il-h0 n?.nJdUE#ʊ~G|ѫ7_\͓'f,GU،_}/{??_/}/D0/~CO _ٗ|AԣoEpo8W~޳<W=믞~ɐk;LAgg1[%EO'ޔKO_|o#h4"BDO.2<ىOpw@AdSl88A�yWo~|n7C1Ga2u;DZg!~XpR?y˅-wۛt߽~L¥$?>>Yk a3"pwaEϣDH _ԮGHh#h棇5~S!OQ+)cVTم? \O-<OJ(<y2^?/y# G˗I|$'%Brw^=?oE>^g| ꏯr_~QO<ͫoV33չsg?Lzg-lYlS ogu촉k_'HU(l|=?On9sg~6b9 m6 tYa`? E.i83vr탇Oº:h㽯FbNeۼ9@ĎQOQ=DǾ d?Ae},w;> O㛓@l9;ٚ302O~?D?^߿|˳ 7J]zeAHowG@7w~NϾ}տ<{{tw_0 '_Hh~MLȳ7?K)7Ͼǫ|ݳw6ҝw0oϠ|q@k_^xg=}|߽xA>)jNEAx?<_uO͓;?38s%nKC ?jLMǓ%T͘ᴊ\_J ?,DDBggQ?Q?q/||WsTb?; PROŘZ<гeStf~*XK :*ϯB) L$(o/E m03Buc ?z ~ IȍbI?1 Ř?r"ǖjDBZL4qeȡkBRjcy}f<i:̼y : Z'Ɯ}'O`{wd>˶}?34Fupa[AAiVJ/BuK?S~LuuG2WoNO?fGrHYH?] 0,~E_]3q6yA0Ĥ׃w`Y!?dX勗IVbs'㉜muɈIOd;40ƹx8W&ݝ^Es<V}y\&5RErsT9_>ӛ귿kwuZ_ ͯ~!3wi?ͣx믾ճ/GR|Iݟ{l<ӯ~_‡rW]?܁=3t9|(?s A:S3_ĆΕ?vd>~OI>fG!c]gO>�&}6cXA<)lO/z_x14+ ˀX/1"{cU{c٢B!cQ>:!*c;z Dn<yKU?,cѱ'Da Q yBT)cm_/FEE'^rՅ QZUr.O²{ b]eo(%j-{iDۋTuBXS]Ǣ(7!QL11`սR}Fu[S^%Q5%KjEoq]-/'DA}2Bmhb OHIaBTQt Luo$.7}BӦ&<TlP&DQMAϔż4˾@&DqͣvʄB<<U$@Upѓh *LW'֪P[VM*HX"W&D1VwIWi[N_!Lӄ(fHGyh^e`x&D4lfj�&k„(Z3eBRalƟehԋ~i[bFUObnze҄(/2 QN0beO6h9NOɦamB,72!n-Ifh}J[fLmiB<%OH(<7af:'IL7!_'DQ-ٜE?ɼÄ(H6!JLyqдe A<3yBR:�ەkyS3I'9}f'$Ip}B=33'(9ͼݙx`,TyBV=o I735EWMS҄(حTd}42!J�3Kh`yj&^p,:T\d87*ϦZ Qu3BrSg:v;#ڴ<[nj~B=>!nF3.n0SZ%if�3]�l%PU !L?-!�̴)x6%3u,I#ٝCm\ٳ Sk%i[aV3$GZO,mYSW3BNOeB-lzŬiO(v7xf%3mI9nHE It%5 v)ψ¢su)F 6ޗ]kզ ͼ ݄Ì$֒L2SeUgdMO֌dZS I_MjR2&?.QRkD,%SqBㄨB`)zOL$΄x%>Kbzr&QMf"*U0NğUY <\7ViZ gIK{0qJT޸޶.3O%nNmj3*mB'UEf ?<zA1eȖz8ER;oO]7dL=jmBԕtHZ`n"&lT׍U\g^mg:KTLͤfQVиHV7RfDSR8_,z IXb-.[V@O-^(čkgTٲR:#nz%\*[RzULvkF-6.['DI OHb�c2 x9:pRt CE`XGi45͈:gMk#LÂzi2}ZG˖{4#JJw ^)[bjqyMNMgILO 'DS"EyAR;7cU.~Bu܉poKMM]y=)SΦ͙uvjzLcZ-׭Ǵ:yB@_&DguyOhBv 3>WIL]#)`gޯLަci &/ɴJbtm['*i24TL]BzLzT<vP&D nӂ-1uL͆ԻnRgD /uLMDiݸfgS0\^k'SٌxTf`k"CeD.(QuӪO"k4<1:_g0 Ke&~UgT2jqϰS1馩?[b4!nÍ}BxR/f:`?TKYe,LͼtbEr*y3YsV-^j27&MR{ݤm+=pI"Mrd\8m95{4_mI5&RƛV-v LB) Id3>8z6q]{s( Գ Q鄅'V}ڳ [ZV -MmIǟm#KKUMuX 43&*(y6K/?}BtI{(>6/ %%6{n vnꩤˆ-ㄨv6lcIZjWX&ldDx5IVj7*gm3~n 1V8˰\j#yQlDݶNm}rĩx=_j!>&nrDF䵫dm v=M se3%zXoU풚h^y=Lbn8\7"Mo<B51ȸoM0]6'oD^&$Q׽O"Y$$?7N3L'$S~B`Sn7nĘ%NH NHJ&o<꒘ц3GM'o.pDu1={Ĵ5,�~`jyD Q.i64qDa&.lrip[>!J�GsF̈́^m͸ 3/XNxu \_wL=I~qIjjOwnKnhcL^SSlaR05GqBFgf ;ҭi)'i634>-oY}0zmDޜRu3Xy(poOiyv2b Sۢi%ƾ<#̼͋In桰&p67M/5&DcIb!ɼ ' )<^F?T7! ŀ5 Pynf^&OjgC7|ݑu QRI2<!U`<cs@i[ےS 'D~N[&cz&3mD^S?'Naj_(31 \6bUL" 2;5f'DѾegD^wKUڍNjκ[Wѭhj~BT8cKNM'6P2iB-ݗ6lDv#%JZuEoj.X-9-a 3OIQ}/"xRҵLw;rXdLP?#EQ3\$:!Jt=.W)J0myf&b~O<U:c&Dɲwj Qx&@&+$o~2+^o٩=mHvM8JQ1V9qy!EIRu5m >'.J~NH$$'D4! N L~&L2!8-=džc~+^!ۍ1vK.k QZ^ L>L$ͼڷLMڌ!t?~)E+n~c㘇L]f%S]k~BT <L QUN'(n 3hݞ24–<ę_ KQ,W kŖlϗYvƕaM4!S=Wמ<<!CP)nfq< e+dadw<vUHVa&˄PB^Hfok6B6.OQ*a^6,jk65ىkDaKL̓F{vOzMM]hP6I4GdηV7;q3k%P<DQC& 2x;l^3!gSM#&L;3q%E+1B̘qGʩ%q0li#ҕnaMrfb絥qz͇dfBݩ9 Ir6 kj<y\67.R%-O$lgTz=m3%$|N\fD n ~|EɔT#q+^<{aF5"#k(7TzO<3qG4#ۄ`Flή9Mbza5aKM>m4o4a486>6ƇvSSjKM $\̄ I2Ǭ،Ql'L-lMI&餌k6X7*))OHJ3Ls_$&qbb| ^6BM--MfyyίGJkQ}mgy+(ZGveIqD]}ʕqKCZnAOik<\5&{@E03OUN/Ӗ3<yBR85<"UmxJ1N*㬓$itV25Zag}WRp(mͦיRT;<%z'$љE6^Oq#ۭ妭CgVZMId8*myQI h8#0ͦ2L8g\vg>!)9|=WJy3=yOp3•L|n^Fuzc%fjt״A'&Q )*]} wE˼o"LMQrK۵1پN+)LHnru=i56"P&D}蝐$y:5m\]^8!8C A\th!ocZ^ IQ1m<o(E*v=v< [=uI;,IRnR}j•lUۍ�s;!]롶 栵 t6oنS]˙ffD C^#g5(yOu'xcLQuFpa5&u>~0ϐs,٩q}@ani40\*7T4F. ㄤp:c>?^7_!4dlV5IQ1TۍVXTqFysx:?$f5>*owN#dLOtggL bF\`;.jKM _q,e :!(PElyک5e+ Lqi犢Vm?!VS (fX<jZgpVT6,֜?c-55n\cl1,-ۭΞ0#J bRT: .3 ɑg/)R֛7,[DB%C4Kn{0Ô-73V6FVF넨;|xYӭrj'$;{>fOnԸ|YpM/?E 4xխluӫ-7aM}ð$Miӄ5rSg<1.l^F61li 7J*xf6΂($.qr[(f11=/_pDQ;QW c60^Ӿbӫf[zZM 'GUw>~tnCbz_`?uWqNh}ԓ Iᔹ0Nیfw͈1a~t|mUS;\9-93CjZmRt^,TN;/.MTMY|p{9<l(ouSke)gX/89ִ}yYԴ];eb5jjUE7*̬<-_@jZMa"̔T3uBZ25ߦ]NhQ<!)]dSKMU%tq4.L{O7~՛WǷ"bxJNy8 {J|;.D68$:=u=B)h|l?/dλ\%`ApƖ>R zhx!>eeQIԘlg \Q\ɮ''1mNd7"1Dv9 s >ǍNTa_$:٨TNdÍ,ʝrfA>t" ccNDxcGR).d#j`<Pv|nCٽ-.w;S />2'k;}>pd;[qWt>~Uw' /?uMeec=}XE 5t 1qx OdøK5vj?]4?[x"(SdW:ha4p=];-1ʉvDXLbI8T'V.OD#cp"j_Lw@4�sSe1K /I:}X˄eC-$]mϋ$_`Mpl00F;䀌K;N`Od_J'9BP2׶*9]X|8A~"J^зQp:V8H04CՐգ=hj^<8Vvqk'�:r" e#iqą] Q^W%o3UPpMO$f, eJƻV%Kd-#K۪f,[8bsj3);,FRWWIf-brԲK6*ƌ? {]w n8X"li&[\m;&nkǝ) BlQh90u чR!{JcC"Ӎ: -ɮ,-Dv?<m`v;x"n'; _Dr8;Д÷/ {;q!NNQakrGNh9bM1w,j�*GLv[YVWEYZ352>i#BCwYND k;~1Rz8\ t[Pr801Pe, &>88kxG("u/}Ur:b<˫ۡejg~Ur0y0=s:7W;Rrmp3s2 �m8)9^2i\ϋl%qNd#\sC!lH~s:L[7AvXjٹ�FDv`A¡d9. eɇ4\!:Zj<2w4%C[W$xg7|~!lJ.;dnFyvˁB!q[GZcCv< A Ϟ;NN<]kXaч3@Zƞn~(Xi,͉Jۉ3xEvdCt[, j5 cHAṙXɮ:z&?wl{E }4>6.;vN+ 8(,ScDLvHeܗ$.ߦqJ-.-iv?w<-s7:?J8[majKw)ˎ->}XV6 bqZ[D< <`dbEt.j%+0JVrrUt6)a D۔<8 6P<F-A'jyRVţJ,q͞H銱i?hJ*x`ή2UxfZl/>u3&0)' Dv:k!iȮ(@ 0&<(I7:ȶm ٹx,GW)ƵBP-yswx*¦u$3㖝"$Cˮ1(d lŻ*9hgϼ@r7yc.yUr\[gxX~q#H 3̜*ub ;ёq 9ަ k)-6x6i{| N]Pc2):v<('- T;񠜼:kl}e2jlrr<eo-LvLjjq6$۴@uMhoTlJْ=a+©uᆲ$Y*lDv͐֟U4^\و^U4ODr,:eѹ p> ጲM'; eEXؗ(LNhٵ9ɫkh)wD rFu7At 9XV%FjIk]4v|ӪIюyՆl;?o(Fe!2/V-/!0ќ=-'2k^gJMl2dVÙ8oZP`--k(܌g^U=r2-?s \f9i58d_CQVhk'3*~q`V="?~=qk/+2Uryx":RE&#u٥\LkWEPt5 xL#ˉhF's9Zc/H7)RQvXN񸥪.FWHX$Qvmit-QX]*ɜ-ܤ@ܳDuqzʤd eǔo Ú ըe"Mr&k'ǟNF{.3cT->dStY\+w&M`F*!fS2uه f}8:޹|\[J)prS<J.Sg(JWH%c5\\|aJ>v8'܍[׹n*wcv7o�Od~� ^fBPɻ;/kXErkۙ)p@x"F4kmP#Pr(;~(:վdfp{VcA݂'CɡݢSEG%v %v EU裱~Ӎ9xhZ'cH6O`\9Ƿw Οdz'$;Dw2:,QF/܍g],ADv+ ,u%_`!B'!Gdg lm^!%rܧ5"g{;vtZ7e;Q?N^Gp'p3ՙY]pk.WjEEor3eWZ"ꚽ$d"ef!98i]v-7xc^ZagrQ0(7[h7pL,Aq1XZ. :wuQTnG`l xθa&沸Xj\8Ewn$"k|ڕ uYr˒ -F26p܂dkkk|-D|ON$ۨF66p6 ؿe V9/@�pTp&m[#F񨷧sC�@F9r"lꝫye䎝5Bvh}!wg WY#Av5юx"c/v|b;BӇ4[T ~gC^bH.HvcW/~݈Հx݀ә#;bp_Ńla۩h�OD*GC2dWTvy-8nmK2}y wcӺki�T.pV2eD^o=`1^8q5Ld*RهXx,nǶ;;.nI&);NsEHߦqeW^ oL벣qeu`_*ٵ%s~k˸FS7H%֛q@K[2on7Zzy˭Z] ..ujC5sG,ֺ.;]u7qY9n Fk7ӟ.mw>it_5C!,*&tRbE$t(xkl;:hV;z;=%7vp]SvoY`nwp |w G$Da wd]*7, #orXN+\Ȯ.QDRX["ߤc3L\mmBoF̉Tq^㙏wp^F\\׍b: Bv>uWLDv3Ieْv\ 21=aCL>?I7xz<qk wҦfL_ w1+cޮAv;sPW=F9,DxX++> Umܵ 2g^Zn2Ct4xl˕'OtVnަ]Dt<k,6?Av66/Z%97#ܦ/Ξr !drܗ oSŃdTorW_魐q- :rdWcTDx;iȋPPv8oG'Eeh7EPorXθ$a":V"~ Cr2$UPrO$7!1N.6A-;rc9ι<|\^c5B1y3١/}D5nԑHd|<qU~X\,厘snj u_u\A_ޘWCnM=)%kfͲw|:mjmC9n2g鷠/n 9ϼΈMz ~ሐ܌u^%;k<sZ fPkU*-fת^%Ǘ3ۉl\Wg?CUOd~>vWI?^D}8|Q̩R/ŋ K[vժ4;͏E׾Xv2\'/}&x"eifo\[j>K'Q=pZ=[7zz|u5 YyNdZoS+FMNa3JXgf3JMOa3JDIkc 4!w([-IhԭS3ч\+mT*uU8CN!-3<}8J[<caEvQ C<ShɇaI/עԀǗU!dN57J ~.w[h(zoqO__۾_=}G_ӿ}C}eJywZs;&욋;-P1\pii/" KSKwOw>"9CÇ0ifBmw�}s*VizHzE+[X)ޢ]KF*oxжǖC-޻\ӏ 7>ZZxy/%ϿKx\/z 1PC_zv8H< Kتc|Zk!'/3l u1ݕ|nTwݗ+~/؇IWK_ʥE-ZEHaWk,<gk;~ KQ;^#0=Jb(U)gAW>r>tjEWw^aAlxQY:a!Ԯ@|z_uR%,,;(/xU68 :VPOKQTGxo!Â)]Ry3t`bNA-Qw.|.\aر4 k AϡxBqG;a\Pߕ 7ԥ%Zep r/#bS`{<8xH= ߍ.!Vbܫ\*xGƈ4AηĐaba50$PLTN| ú_7Y0 1;:lYSQ8oTJn $r"9(y:y8|M€$,&U+D<,KTw8دX60ePTj CMM@m&#΅-eaeaP@Vwg;Ujx(4釦p0Bf@)`[#dQ.{9~z P S5'FPF%ȌsV1c-?]Wia@a8hW' : _|TMGߩ{Ja#8~_E\mC B?FZ5̹#:v;aay-cGrg#`JA`}˸\Uwڷis- KVk {M,na'.t%#C.N(sjWîDJ0,4p *}qh`(2�hx-l-럣2$j{x|~7Z)i(АvzG`SDZe*NdρNf0,8%ሡV*3Y;8 {X잧�O1ٯSA.̈q {Q3칟}0(P-1WN +Wҽ:r3z be- 'C(zpjAuU9%koP|bEET+j'+yEyLI (dyx#BXA)7b)'$QQ-,> zs%1fQ x<xuӧCe.(STvD*;(�*N`#-h/͆[hgōdTqx9*@7zFEhBձ/a;S(+BiQ3L<LV>26Vt#(YX #wع$e<  ` _0:]0K*yK:\9h5ZuHL#EY? z^U8 }I42eH=ݷXD"҂ջCJU؄v|DrsXwDxw9,i*)l2%+R"?*BwC+$xxS1N$e|_-MN.bX[^; Of;hGÜXO  ؝JN)5J4b"1@xt~fug#q:@FR�B[ddx~~ &„H ZߔBڅ C~"S,Vѷ|qtȣNmA62^2JƂu_ECV m*&%TM_4ְ8Qtu:Ɔ'1TF^ Uqc*cw? p AdM` 0tPOR~YC=BgpsZ<gI~%X,*} 2 4,W8Ƈ' T؋ z]ʻ0탺0w> !0ˁ€30Q1K\'f"%΄wY;uXS܂ K :C Yӕ9 Lo)TFMyXx 2|u3̴@A$ԟV3 `1NGE*]<HVZ ժe ~/ :6 E9Eؙ[;n/<j; 2cyZJ&a`yz)<~ VH"B#'n޷ 8FD%(08=bS`t_uit!GтO.(|;LxƩUHi$HѴ^f$Oгao ZʱxZP B�U& O>RQ((r' |v)"P AUBdVYuQ]e $$%|HP=*e2jO;ϐ�JA ;ߋ-HNXsQ"_bu00Ìsg,!%o[jg",.\3*}iGT  A=$ BFĆ7.,}+.W=�@*1T|e]f bb|T*U b 0ʬA[JQ:p1 CNW Ow\4k*ԫ`" &H�G_kl aVi7M+QA53m .vDtQ^ AG$e(49 b!)iMtV"!!9)Y%Y w=N1nhy5KGȘ.:Ĉpq]=!^ –n @|H0AF0 qb0I'#G4-3W i$:JO )ڕe"ܘ>Eb^lr,oX8Ł5cwcX@GPF2uN"u #< ɌA 80j,; 0!āW& vb0NR[!(똄ggʕWKTXstIOu]3jgW9;i7VV'XfU*Nu)Z)ӵswKI9 II eo+G u UB@V6E]cxE}GKpH+<l߆r ӕ�RKDBW<Ͼ'#zmEgWSL )3‰z)M'!֊xNyDۿR5{8d8SMx T8xX_ q щ.2_rjX&~<Ṣl8V)c9Ioc3B2 b-҈tlTiAS�'!>Np&a҅n#g<qe OE/Ui é| ^~} #uI@PP̑t/^Ԛ}KcZ/`]LahK̺]/(5XՎdyԅ>f)<=E cv,kT#<UU2!j^C(4K̙r$a*pFQRcΞ ZU,])\b NR݅4R<b'RLJE3x&t f`$k#D?EK?o:) ķE$PZTMWGN </ϟ pvzH4LD|iRg œ.B.Lt͜ŔTW$Ѯ\|d QS87x5'`@F&9:4Qۆ,bulZ mܳZ'j̮!V^ +<-l/2x'ZL %KY H hUh ׈"w#aBu LGcu7'N0b!䣚8Ƥ=?,;BAk]KKtYkK.Nd("CG;CJBGI:~"X!(Kf1Uo[2\Ћ<ёllj bȭԪ]҅_ 0+{*^$YP$yod5XF>b"!TE8C"r\ 'o,;!#8i@K�BꎧR\L01Jшc "O/ ?|^a3$jJNUT9jt]s/i#.C@+l!ˢhh@p,jx%c%(Jcp\t-�ʘqa<YXDxG㮏B σoj.� j*BP^F1 Ц4;Zev(6js$ᡎbFIcFܒäDdC4#+MwX t3y Q`(y噤 2u#/2Y|R7"" B:BVGMA5]OeQ-DANOY�ᯬS>O cyBW'Iϼ:POThbK95#GP4Ն@S (:$_]4ި#i,HPTD<'KAT8efŤ I[Ě!'Niԟ VOB#)&H.$¢ԉ rT#qLk-!,|翼L1'ГVj]T23%a+m q4f'J>@@r?"iaKX؂8}c)5G\t}XĂI)'  "5h!HY>(M&Å1<f#0H(Rh[.r,kB(tՑjINheF QH.`NLdw�Q®;He$X,w/EnS! Cg'`KD G'e_̧3\YmYk]xYF!jy>0\Am/ȿ@~c*DțjKhHc U Ys< [lj 0 rzpB:6~1Lt(nXg( TLdiD>fd?'`MK%j'X,6 K^Ԃ, '~@ɲ*X"`]E*MYj&9n$&OO HYALlg\slk1&R8y+O\̆.2 N}%9$Jl?I~tARIkl7xt["o0dT=D.u^Y#>ɮ@ʷeIGXD:$,/ˮJse"]yn"QqŮ 牞V{$~}&[bTRʲI)\pDz)(eķD/xjKnk"c 5a;%|DӤi4[͹ܾJԜj Ml '9UlԁJ\:GrE4mN7 /#1i+s6͇&"je#;bXƇaFv]WNɇH0UP( s[ߛRNY]?b⬩Rb8 RXx tX^N9Z`෼ndC\9!\xyD z~$##}7]5x]cS_EiVc͉^ *TN'UJ=oHHɺ G%?[AEۼE_ 쵌 Ф8u9*YԈ*aq&ãRh,PЁF^L]e_\bN^U;0+ی$ yHyM%i셟 <df.QE1il Syh* j41.gΦSyvul*}2ɗ,trfI^ ͦgg'7+BDc+U3f @b.!L1 pˏM:^g?�A۟I]QaV.r^, 5㢚uudO >\PH(Ypl(*MA`MrN�O7EZeK:K?]+ y,$4 (] KVm/z{^dOnEg$U.J<H5 +yV3ŏ, &,!-$JefB$Qt(BE#q : CU+^b,r,exAlMdyGD*w}dZ(3e\X- WQ)s3Xd& bVj\LەNUZow;GpٲyA/NwXH Dt1(94e&Z`NU\VfQ/l!].^YͤY#Mh%^Y"p4mSA^EO;:h"~ =HW~Q#<"YgZv+:%63S. N$5 } cn[7i+CJ`R!(?A7%t״djw#&5zEb*ɤ*)~'> Ƅ#HT/)9ls|$>XeW2;%^qgN"_˰ghzlƬ*AΚ%"5D%`H'c:`_awb/l;pBRҸ>ɕ 6uC  (B&CL3@8H5;?fš 䓷d.D8B!3fy澺X%Ǻmrzb* : ii( 1Fa%7aw@˞E[g_hʠg\>M-hy]\2CZJӤAS.68p1-`wX5zdդ+4w|Fs b$EB$}rW+# f;z@!။=tt"bMH/Xѫe$يt'Mȅ"!M7c%ȆwCL-?^Na󄰭13Qؼ_ΉIXLzZaSso1<ЭTn۵? ,\׍Č0._ $ Z$dAlTBN!<%rRJfs4 YV-T"^sS')\ Cƈ K0$Ըhs I>!&6>w"h.0#$:&$Oo>~^yn _ ?Ի l2ًHC 苶鏟ph>^ƪTDZ$ e1f$|<8:d*<Yzh?*}VM{2ߕc6b57D%M?A~B&v;v^ 2弧T^5M"'ȴgWA'˟ Do#k8fgEp4jC;[R8 u mDK~d3i R˜�װgktZ`EX'nɳ"3N|"]PWAci/An�s'_}A8+!>ϱ}NB;;O"oV86'rB1ZλdIB.-iMHH> O+gJR!"[Hf6J㸆Si|@3YE8ih۝_i9*qix{"5rlvN,| OJ 'ȤFWգz; Zw6] cϝ%Ƴ ϶ "ng8 : G؃�=%%ӌSձl8U%ʜ},H%L ۭ{|GbxݥԜFL6Wb˽DΩiS a7sP]σjIc ah h*Ձ":i, I)Kq)2`iN!MT%y<<)SG8ǀ0y`dub؀]YHdX2V;<Xt ^f˨8Mm(r) ϻ4Gf.'V&<*;#|gWGm!�ҵ4NBRj0&$쵳Cr9]f%ք8CyF"r4 R iȉ8Su<һ2~{2aNjyH{G0U\=v>w{~P429.9m?, Bb�{{M1cɵrv ->؇oE\v$i;}8'mvbj? yfۜ4w:t ڵ]xL',Y Dp( Ke >q6:ѝCYQ,iBly9Ig.F d [y`Q|'ktri7�uRsOyʜe ͧf*{ߐ@8kY}OPvB,ħԛJ?rU6OV Ld\{ļnxr0tP7$nbz,r@H@=aµd͛'#~�%?aEoݎK8YweWYIf۟4,)+d\'6/k~. Ҭ*, YAsNgg*Hh##ЃHAT՟pL}u58SH>FQ' U'2j!$HH>k@G𙆈) �͡{ܰ?xX(e"Fuܺľe8d,TTF~&9>)9Yj8HjQH4՜EP^)M9q.q j5ȣS=REt"Ū+ y-J*g#V있*9d&PNX0Iv$U}7' NgM%_ȨaU;*@m[CއMl9X8wy̝k'^Ϧ' w6Vx$޺I'  YO8dSi9Jpr&z]} tXo�8C<~@>VegƺTaZL;=DohLS0 ծh'Yj ,O9Y*˼cAUT+JwtHr᜔*%hlXcWx{ ٌ&)䙹?AH}:स"ޏ[L10T4l/!wleޥ],B+:ޅ|I{:>լ++,#"q+>U(?㷰ǞDڛl '۾˞l:7M*}~MH,wTL5мofª hH~qyU W=6nUo8X%J{!zHIfs ?6bdoMyqQ`=dɔc[ʐk T͒tRCsHNƯ2`dDKEfkN$'T{@(9 DD !bA;; @Epx+U<8hHWxmlЌ8tv3[]<x^C�P*Ve04g}u82^àXnO%f6rju#V!(u=aGK'mlqAdWn #(8UMf) f)3tH''T(KU�W 1s[1K(.8 @eL PpS0trB,v*lKBűI|1+:xAC &M#I c7ݤl(}<hnG B2NiKN:eڝ HdI:|OKZE_>~Xˑ#lHpa?2G򢪐Β^DD*cndp|YU0� I&C ]Ř;Ksʙxg~[Y)HOYLfZ3sF|IQd G+HdSNcKQdRYxҙmz+*g7scH;x^^)o$l,S "M2*I[S[(Wg&Uc2X(:.gO*3245YފE�_kŹE@uR=_bgu1 [q ej^S5/`5�Ë}7,ݷB`qNUGR?Q;Z*CW\HP8k(wJXNi2u4ℇ(I(m6rRVpƭLAYp/uo^dp"1dK-<HP},k[\?Ub KeeDBN UӾe,r)bV0J23ϼp&K+8mfO0,: 8Rt2\I H*%8g/#8F)iLPBHH,Ζ`LЧC68] N}v)%\Y3zk/9oweJ*k(ly^?)5r@Gتj?(r /Z1L'С 'H�Qq*.XWݟ6zm;44B7`ծե? a cQmO'7?&eY`RAaT7{kL2ۍ)XZz D㏟ Fjʑ%NRrvMZ$p@}NN7yS̭+q8]n1 Jm FZ,jjKȸ~ w*WY%jƝ0,*5Uq`x4sH+*ju֋,|PlbO,7pL"m-3$Si,Da!.rhl04 j,HV+Vp^E]Pz ґĢtx'U&:*2)|S'�yLPC1�rAbC7GxC?r{Jqzo[l%TqU "+76LrwMX+bYDžQ,{`x"“< Ku{;UU~1$J:Eb e9+6͌! F r-iKkd~~&̛bSc"/а62NV:.&&t+8)]y�& ,"^bzA ~XU f9]+T΅1OQ˅0dIm<XwJib B¹D#WD.E c)&Z#$>$v*O48xbq:kUN!]b\bdڤ;Io #*nلREHb߽O0!'R~#zB?xb\b9ĭq-LZxk_..Q? BXnO މSEMIeMl莞m(i_BM]3rmÑCHw<GL7vXo$g MNcx</3bkb$m3e6e6`[%cbZ뵄{ΝSo]b~?WN42D ?ҕp ٦@_O*6DMyԠ*sx~!IJ�Dˊ/HE؝&SOsyZ sngH %H9~tq_:"."UzH_ɮ}/aŏD%0seB t˚,(7[rx81H0jWCRؑHAZ"65@Iܝlv'uGMeuArE\>ϣY|]!]Tz5Nnhnw!#2ȼ0R*9^u+L1 R{ WUZ\t׀`cT#; 8> qTB \o]`+FHRr#=]d_YF\/(,eJ:PaUM*C5&U&v5LxuGsfc!_0<wT."}U(ԿJyxE IRذXy@Va2`~n9; vUӀIM!uUQ )Pm&n]U 8K/bmiW}K', !,$_.Y]M;+x WrL~/ђ?۲ŒYXb&:ĉ+$qXN{H(h|ᛜL@`Yi;tu:dz\i82;ȷ$/�/=͡;LdӴTSV2y]( }?h`t[4ȝ4̗U:w91:˺îSngᘈ/xR><1[p8nC5U4Gt,YbF M,Yi!jDa QBR{ք,prU3* RvsC/ܽ\9r 2¼І3U- HGv%,^v# /IW9P1,p3TGg$ԲB1?Dj(J4K˕i*+T^XiR , "Rhfq>+mdW+"$ڪmT 864Wl%7|6`$ ,Fr%ǡ&8Yyz NSwb᎞&8i CA+暋B$u]!Ȃ#ӵ %Bc[t;ԛ CYdIDEoDplURtj)Ή ʱs�I=`[4eODdj~6/X`2,ۋy=8 DeVH7|#&)JbR?/2s?xFs~^߆I{u :SUnN3zKOh;čݏ 8z"yd3W)]aNr <#ίM*D~McHYPפ Kӌx\MI8E#EBw> ISGvn0 S^GID0P%–oSs.Hv`QOĶgWW #Ւ8@Zo4_~8;'` Ծog\r S:LscZ ` ]Yf 0ZGQ[JƳEnsΧq67yz| ,@ҏ$[B]BgOi:s^F4Vu|sޛ5ich5h'zR35Wxw_ٺn,*+w�^u@QkgcowԢd=V78=_I9П!|:eߦNSuVM,`,U5:Ҋ�꾆v<ƪ;Q=ub{~7J][ߣ |ZihsI=xnꤼs1ê#\6.U])]밆;9ڱ1ư=,tdSgP]~\ϭ`5ڿȂ6/׹FgVj=[{V^7K,ȫf+>"k?Vg+sˌөkYy,3sWGcNiGuvWq=wR5X?j̙d(<ǫYQ}<ߩEu7J }~I04OWLO^ݧ:3^ցb8/?N,/߿?˿~/߿>?{+~ki[~ܬC϶|?][>[oJϷo=?0b?bŖ-J.\nrRɥl冒Bnn w/?߱ z ,K(6hhJA)I�D3%i4%i+ɮ$;$] I`\I:$F % TZ(ɀ$h$-(hC �4B44C{@H.H v D%5%ٔ$6 S$�&+ɮ$n00a$]I:$ %J2 & LX*IE!Bl(Iŋ/^l*IE=zLc=z:銞頧z+z:頧>VGAHP:Vh5:!vJLt:ZP"e:u8;ZSP"pzGN<RHwi($ݗt81pKH:헒P Ix.$p]{+IP!)\I WL8p0$A+B8T/^P=zA+z8qEW �= '=zB'@O(z'@OP EO�= A9=zB'@O(z'@OP EO�= �=zB'= z'AO*z$IEOT$IГ=IГ'= zRѓ'AOz? \$:`B+v$H�~g$H)40HX>aT.Ā<>0550hBcx`0Lh`h=` FKt>§>O|:O|:t:M+M ӎ!8x)a;y;'=)=/!O}S}6!O~S~L 0 A0S0] 8&BL2ALA)L2)S2)�)"AL2A)S2) ,@,A) ,)K@) ,A,@)K) ,@,A) ,)K@) ,A,@)K) ,@,Aʢ$,J)K.JNu*yW#UTRH2R2jJR*%yWW]Rw9RwRuJJyJ5*{{Wj*T]]TRJkTSR"x-R]bFlq8[Mud֑+bFlqD[Mʼny#8%oм[7VSlqnވ-ʛb)8:[M[sވj-9]oVSl5jVSl5UNu*eĖ[2ŖRbxb[WmT;թ^Ė[Flb[WmT;թ^Ė[Flb[WmT;թ^;7zT'XD8wNuRLD;u7zT'"hY:qM 4W !^Օ$D(hZW !"(|BJ��jPBy ᫆9+gwr6EUCݕ;9NΦj]9W !r+g;9"!Dvl'gS^5xrCr)2Z)4BlWvr6EUCNΦj]9W !r+g;9?ju���U�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_data/test-http.flent.gz��������������������������������������������������0000664�0000000�0000000�00000042074�14670056262�0022261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ԣUbatch-http-2015-07-12T201155-multi-100Mbit-google-fq_codel-cubic-01.flent�}]s\Ǒ~OK?slʒC쬃5E�(;T] $xK6udg/ή?_>_=~236>4uO94G8 ?O/oRCukc|ׯZc~..{}>xqw^=h죗\?~/yOꟿ><pjB=y7Ϯί7^qK~#4[^=?o\M=<JUN}=ԆSO~m17G<_xً%9ͧgѫnj]xs_]~wE󷛅{3÷/^]=cA̘�.s<-ۗ^^<}yvu};V ?k}޴zogo\74>󭑟O]^\\o]]>j\nvVۋk1}ANƼ䤏ĝ?'7zrbGkɷfHޖcٟϯNl]oߞ81}WWxyw=ggļo?=Ka/>Y3,7~WMY(`y8X_|~oN2ٟV <xUG6}<~OQM|07Б'O~<yӟ8^|_/OӁgGϾuyyq|_?1޿ů~󟷿X'bU0^szixtK wh0# 榚L*'(C"_w닣qG.*ڌi||,W</_yGo~ǟx ƥ;^;w_h~ /T! w__}U|W_=~9֬7NҝG3ӿ )R[mr^ⅻblћSЍSGlPg`-?{V9tt'A\$?(.U¸D; >{wy52Zۼ00<#g7a ugw}\)wL K.\=Д5^y{g~o9ZBv,=:3BO1}vܨISؓ'̓9>yY Q5 ԜܶmĝİIWJI\'/x?NyO7x޵?g;1݋/+|Ze.sWlvf14if{W9SV݅ضQO}4W31-ArwOO�ޓ@"Fao#ao-/D)Krm!ۚC6gG߿Ǿܑߺ;u+n;s]\goD:J3~Q7G/=vgi~ ؆6~oӓ/oǛG\9;Hˋ*!qyGxw}w|}g?}_{q}`g C=xex}k&Żﮟ6ßNox=Wg?F{?}} "Іӛ{z_}<>Wo^_=?{}koS W~<4zjƗgҝ(  _KlmYcdLݕ d9dS ^by Lħ,ϲ?Q鋗ng?9O'Vǥrfy_<Wf.ruO2ם3A~S&(gGf rp/4/�'@^ 4#O!zBuR>?DəRJ$4S"tz'1R2ąM![ZYs k<?hS/œzͧ^O/TӲ=RfVHяKbl)fS3ۧfmenou5__iIw1]_+$K}!?! =WG)@)?qO3 xvi>: ciq+) ,2;l/E}y_.{ҹu:ͫgr#d ;͡Iqy5ŦU^3 +=?�@,cTAb)ώT `c�yҷ팢|"ń¿|E;H|O;>h@�~@}�L� �gh6fXzĈsTOM{~/o<=gr|{1`&&8œ/g_<=$}/ߞ{r]wry}}cmӛlg??O>{.g?'^71>cy?#o(< [ ]T6r(_ -:DPkw2ٗ͢#NUm\9*uP~ARIJ+06kOW$U,_YTyd!{lZN*]!hB]YwA+WnQmUh�%,´4Q!/´c e(1.iݫv͕) ^6W9Q~'e(LWUnWQʀsV _, *JU>* UWQvX�k^EmWGFmise(L{rQ3}f fۭ ´;ƀ\Qv72*L{NI8.´6Aƨ,eAVMk *׺ ڮzg;C]3},ЌLTQvmv IPT4܄2۠0h&,*v]OQ1ZxQQuxJ )%5R aAyLU}S3E\),⬫.0-<ui;;- Q4/Xzj,2*XG`A[ӂ(u-4e{,h[ZbUPShZqAE =)2WNh+XlY΂FbGY xΛǣܸ. UrOm2`.Q~ kirDoA hحLLsXʂwuժIf5]RMj]I\DaKD"l=#ny1\"^Y "{A"mTgRێ4]ͩ9UҬfzL }wȩzU킪4z5ƵeAE5yAR3j2qP^r-.u?ۮ =0US"/HYWf{�Z`:UfeXL ڨ>:MK\JʨQ3%-jӮ[ȺWyJK8u$SBյT f.ʩlwV9ݥZ\ ADU9ur#܂N i4oawa Tmc{u]ժÛ\Wg=Q[c߬M2v NN߄;nM:qA3jJlOzR_{}NwQ5V> U5e춧}+5(_-<Uke{#oiP}8/XV5U5A j%QtY5.;P߂SU]Mlftl]w }܍V4^U6/j|] ޶wzQtR\۴toiR[4vܨ ¾EjAY-8uV G NZu r[ێF5෧ ]u6/H¬&g} NQ9_:sT mՇQeo5=W[pԪK+Z 0-:jnqZtj "ڮƔi{Lz[۳:UUhiP$=N w`{Ou~Aib܊$Tr+^- ooWVcHbJ@{/!*mB/1[zՔGٞ=6ݣqJĄ&g; -6j;n|^:jHWDqֳhZ/-:($ѩV0u{1h֝jgBjj{#n`xқ_(4D>8< IZ 9M2j/H3UgʮH|n糡N8ׄQZޱ=D\EY[0rG,ʩڜa7gR tjU:TPit>7rzTuI`ozz\ѩک슨SP}cږ=mi6jl}45 ľT5 Ml5[aNW[}5Z-*R{W:ƭ<-JYMSmUoWD5fޱNN@2:ofU]jn'Z r^ (M+SjzB^Ո}m˱Ŧz#4L }/I*+SW-)t#Fb&5y'/Mh&Iyx+4jT;TEM.+;4$ٸ2Kg{^7җ&Q~/зob?IMbnBliRwQT7žTՅ =4j uNZ*eET+WkGԖЏƺ[F ;Zd݂VP %i80B]z͏/Tm۝<D5]W흜QVۓC՚ee><{{ (KFҷ"aRPp{R5-fI=*Q¨`R&[ZtSwLQQm7(+گ|'JE\iJzweng[a#NL->uz_w:%ŞU Â!5ήL3Գ.vqHFm^T܉݄jh=<j(_k+6iօBS5aQiJ)\roqjKvos]HΐJoء34V5ztE۞Nns h_T%zj-V/tZDU=ATPW/Sm7dfȨl6zǦ{&^۠QRm}ǩ:S~A'ݫ~TWnuӢ^�k=mK ZGzl]Ą9wZLoU/^JHvG}k@ ⊨Sj6tI N]79;Ē[TKM'9\g.sE% F($މ"*SAb& ScRӧns/q4yU_iē܃R,}W`{~EQq/|~-&]Ť{d:rIwɥe{cw9I=L^G^1Uf܂ҐUҐܣ=RqEAڞKNtI$u+:dTl@ʫXKASn)\^Yb(\U)}Z}Xjtۼ[yms^WKUeʨrm Qe^zT/e}ER+d.jŪ%,bTM+*j�5\$=_z/o3cwa{9m Aҋ;T} )dzTu~;-.7LUָU7g pjI{VzT OUUeP H{\VztƕwWH{ԢJ8F-֤mݥ_m ZW \xQm,rFך]y{Cm{l.T+JfIW=ltW[zɌ]Utռlϥ^*Փ#K{lQ#Pg>WkH"%dZpu}gk LY{\մkbuATiz\ Qu5VD5֨>`XծMVKiARݩSѼ&~rʨ>5F/H;]zP[oи۹BQf̰DVn~iVS۷qUD=1 rqAf{zMt_[`sʻ]P{tݜGj8i1x?ڣUKQxp\1I]2{NճMkiRT{*j:F=8ߔQƨVQy+kNim1N^}Q;(j)GI+HQ>YM+X$]Nԥ$^SRާWX6Upt%%}QTܥ|NIQ͞l.0ST;MP5 i �VD;*/^6!'NQy%ET6u&uL,EtEaګZb.,j/UcZ.NV[�Qi,^6-*eOyAT~کL PKエ)_SIwLjG۩*xEn ̱k T!uÀ3X:Fm#3eATJlh {Mw,RNRTcG՝O@V 4%IWz5E}RT븋j]YS:[ؤ Ԕ´4gD6,U?�I͕g{ptzSݛQ4ExQQβmOQQ;U)nC wǨPOUi'%F$5Jڞwd=E})&ƫ Eޫ;.IQ;5vZKqAT{2Ԧ~'Ow8Lv:c`W#wQT;B@ nv׋Y. `=L˛(UTk=y?]]zvMw2K%]PRK93=l ]}I͕^9QL50ݼ|I7"MNgP>PRkPe2ם޳CI~;w)j)*}IQ;;JjNvKN{()s=EUs7aǟ?FQ<d5G=zTYMpt4E5_j4U$ۭؗa`^SU<[ ਦsg\ܭKQT-{oO}^4U=W-+lo{z\_(ϾjU{=IR/%Az&t.!8qylqǟ7DIu+;'HI-,Һ I^^ldv޺:neTmU~5̣Gjջlzڣ$5 ^_hًΛR]1D5oZwQTk_W e~AR:)ՑAپqUw~2ZSqeTy[H)sʘs+vJ7ࢨύh gܗ s"EԶ"*d|?n9 ;l棨V1U3~ARJqj#^bW=;o׶G;E57g52j NMm> =|?Wxn=R^͂WNu !Ἳx5_}іZreEV=pn?pm{ey$Eٞx֪LYO S5qbVF0S2iVKRo4UUЯa>EBwF`v:R>ck;\AQ~ )W ƗQybSOwt(ySl'5*a_ͺ_ʠ8V}T7יP}RNS^05U CY/QCʼ}hיүjbu{MnjWYHj7WhEӢz`cgQT'ObMsoT -8/9NB/A3 }py~>e?'>y}v}bx4Cۏ)D<NGGc11kLfilpr(Ɇ(X|mRŷJVJ)C9Y`-· 4#M#.R5A"&)o31/.^0]?vG5y,ϱ|'90~,L(,'i<6XL<4y eyTbYj+,1m jx2y (80qb!V%0?;)bň*C1BL9O.i|:Pg`X씞@p !BA[Xn9bP qT:FpR ꄐfy4 o3,XdZs1!bxDSKf}PBqP+ǎ9&X}DcaK9 UC擜 M\`֌oy+~ɗJ8<VfF58Y� fU5S <T(ܬXtz5,"fxjL)KbP|6H92C+�$,)IIs&~ϣ 2q*b[Zroʠ{ >Xh'SXw #%d�a[(ME ~sDք5wy8Bd F\,~8,JT�٠!(p �v_�_5=6p5czmؘ'k, P4SnFbisS ,,'1EpsFY8viBby#| u3DaA`,E V`-aI8Ay`#ja*E(sZv�f+, &O KV'~ �6,8o GȂ,@TᴒFA9]z. (bQ+D_#0 M+aJC> GBw0TV8b$<9*\$]:d`O2BiL\ n墘%C"'E:]2w" 6$*5b8k4 C+u</΃SŒa1X0Ci |W؞(Y: 0 ` ),w©<WX� (|èFNPbB3uc[jݸƊ¯bKӸWX NE<j1ql>*aـ2o灃(h'Nh],{L XNk]Ř㙝ݰn20ي�w@x54�ׂV2vzـ)P'y{}-`rf$2>XjS4YR1f1n hb͘4Z$+O"yLCpv0$Z ưfy ^tAD}(,#d~3ڀ!a7tXSGmP,L V@G&&0R''4CJiŷh@%M1ZV0\e,~ *2+?"x1AHu( #C G741g8oaa@c໣ xCxtl/I4Dn 6 K2gA%h_P~A'x0{� Hs0y>~6\Xƒz!H|xOB5֢p0ex[B8 f Ʉֶ !(اI2Yì2o;xS04 LbLڑiDWa8j(bKcbr=Kx0;G]{̘xHȎA&]Gt P|ZLTp2f Oci0@<s AGo⬓r�1ϊ �ŀ;j3ʂ<xG4j$uEȔ.<IyԅL̷?2皚1lX: V8'-2DH'a2[WgXS*tߒd)_0*Fu1s)% 3r-ې.hfy>G@.o䍍`a0Oah F \Wp+Ր~P.1 iP$Ecl@k. ֌1Bh }8@0A3>!XA2LLON7Z#�'T&ҤZ`԰`Ӆ.Y J Jdrp - N<p N5B0EFGjN#&#X]0$9$C +  H$$0$fG\&{d2.{f}('m3a"IZJ#teLkʄm_VFyGcpMcR2 �'(֊aHw2y^@+0I1=Z(ŊaA\a(PehmCM ;Y~U@$Նjj$ٲQY\c,XE8:VER۝ b(Osbn ,HE+"XEF1,qDV3@+(\QiIEߋLz"ݙ�-V14r0]EhC �  o ?&\/b�)3%6"!l4(&F( iD&?; H+Z5,ƴS29 :c‰Bs>sIsBa+:@D`X_D/ٺBe[Z b]tyioKr�U,,"+S0 Ek% M:, `Ю(*͚aH 2 (بE[<X8j}#ps?$L>TX _kÖ=%U aأ!4T, TJx*b:TmPe0Zayi!Ft2^l8P/0LznQa4'N2UnBs2)f!1!3yD7+a>SɾQ?Iw,;szF30b!N<0ֺG aoP /ɞ)Tqx,Hcq궀F0%BCj$"{H�M-۱b+LJ0XMD`1l1IJ7MJd^ 6xˁ59veYVAr"d*Lln9 MZCPc"Ђ/2*\�q)hY:2!%fcK5x<U-II|Q6 ?c8L3}^f/tL 0(} aY FfD>lSt2H *G`̢9fW? C;[,|Ro/:`-!0OQgd `̌x]1"Xe0ĈW Җ!h4RU"aSQdCUApK$*"}~|3 %V &:J#HmԸpLb`l0Op5=c&@>:#<Qj[J3N$&>̗BfC [g3d0�؍�ʘ_ha�' /9_-%sQOE8UԥskaN?K_G"s1nH +D#�5sR^52u V=3?/vHU;:2/&8:S| <] 2<A#AppRb ,V<#X; S5�eֱ޲bDR1A@(L4hʼn4 ;{>db2W~:$g6Ѳ+"M&?jdyatyLG\�(SvAL`.WĜP11:w1\p*xlb7t2�/6Z ,=!�.Hr0@+eڑ3*Y%(]lT!qb *K&6棼,;wʉDtn]Βt VdGB4ewL Y ᧃJ2@uKdIˆ"]1W:YnhU^y8)Hp`Iȫpx`}@ 7TZ6+ڊ4jhL+k&PbP2xjId]f Oh4\CDVͦ23F֦T†*Y5*0dX1 $xH2̮\֝y%`*lyVVvXPZo{&*7Sﱂ!&H$=*6GI`l̛Mce \0Ka=SwERn $1Ϥ22bmo8%*,-esD%YMk-HeKxF ̌-Y$zVz|W~LXiߛ/,i!jKQ5`W8DV]>TD- G <kވ40K 4Yߩj $XrQ{fz2 ̈́leTN�]rgiZ?_HfQ dC +6p^vaPz6" E}rx J0 h'{),/B%`Bc6XӔl 6f*@C*J}P D,+ٹXsFخL,$_6YfD�ڀg+2l4~Cx%! CDge KdցM^l0<*aILD}j|q±MU%s} ʠqr*tɚ[,M0I&Yc#ba ]8azbY֒k~p(LD2G@O%#DV c]][[e i*DPL-V/7KEllNwtV\(;Y|x,梲x3.cM2#K̉1֑FJETL˶3 QrnW p$B;Jמ\Y,]t:`6# Cb Rr#R*,cP@K)~|S2MY2bҴ|8 ;Y|Jv8D�JRkuJPZRi_lzʞf|+fofB"1I6م�<j% U3v[ȞMfD%ʖגnJY+BCaKϏEkhВ�Er%}>+rG|mLe<"v͈&?};!Q/);#QY 8l 44f WL8Q]r.-x, Ӣ/hgD!{osv9d\JeEbaJ%>91Bd #Bv z/1 ;Xʬ˾'Yes\i[YM!}(CAT~ I372`qon$ Y <Yc-u2fGHpp?Z8@f2KAtk A<nd0 s\`b煣ms#N~!YWrC~dE"c21y홺z ;|dWޡ `diZF|TE̘DELd$bۭSǰʼn"EsȲl#''Zx;šI\Fh_X$pKͪ@"!d¸׫m$IybTeݍ{Vn3: a"sYE;JibR„=xmeԌALpN2q"Y!dcq=['Q3aw{dRҘ7'AZp GzTf04c\%8Z5BaO<w:+ KCB%9S 0ȼ{ kΗ[bb+2:X[jWvֹ}$3K.ͭ2heiR-f+(LbR3+ג+8:K<:ە3٨=I$4&M9VE+t)W͒F/ˍn6Nʐ25k)mKUPh�C/SljڒU{V H,zL^뉍-RUnd---Ȉm4"e1O$+ mI8Jq&7O Cm+)bkꖵ;Ǵ{emm&J3dX3qG7Z۝pC{{dψiPdtN+GX>[}>/o,ef< #$wƦV@Kcc\-GOhk>7[s&xNk8kQEɫݲźMh(4eKŤ D\ܑwKܔ"Uv3>2ym7d+8m/6G"Şzv.~�-"}mPN鐾c٩=an '|+Զ`H7vȮ`>'#v!7;}7?t'GLiL^焨9E%/u$V" ʳ<°GTH0 3-+Ut;0أdG,�( dM,"),ODL6&={϶=:4<%rte~R)w2GdǜX˾y .LY?$3eBK 9{Y:r <)p&"wMfzX]/w!Ej|nql (JX=ܴ!49r m^٣-i1 OJ<"CF؉i�ɳ"Dxa-3Z}1 ya:%&naeh3ްAʸ!"t;2M,; 89omoG-eHēL1/{#d>5 wt&cݑX`Im%CQft i6,{:92D߶l,,! &9:�/^]ypzGO8{pydnG*^%#7φ=hn) sy0 w, HWE~<5y kA^8 o; Ńx5qQA\:Kq .eM\Vĕr+*^׍z~U_߯G8h}[XFh'0LhH;DZMKE"& xCD!r/&6h"95qx[iا4 P؁ T!$! xKE@p~CpF77xy90&j"pD:M4&H~ L 4Aȁ 70&2j"90&R! 7H /n W4z@q=NCz@z?z@5?zX~?y3~R^2O4!~p(?<z&duC}҄ 3Am5!C XxcznTD˻Ea("`4Cҍȡxz4C5ACAB)ȁa" L5!ACH !!i"^0^BD =a'  =a'h =a'h =ACO=QCOz@Oz@Oz@Oz8z85ā85ā'NAk=QCO=QCOz@Oz@Oz@Oz8z854Г4' ' $ =i' $ =i'iI=i'iI=ICOI=i0t|2 4X)q5eURd# @4Wʊg4FZ /14T> O#5"cDyx:G6*e:y(ul#VC<b#CmP<B#CO<4+z桧yiz=CO<4=͊#3~brSUQڜC<48+"ps꜇:gEs[`]nEbCP2(^"ph}Z_ES2 Px(e(x(A8Q8�GQQ"p (H))e )EAJ)e*A(H) R@JH))EAJQRR@JH R:RR@JURԁ:RR ԁ:RT)u ԁ *H)u T)UAJH)u *H R@JH)UAJURR@JH R:URTSRX3V:LeET3v:դZMT3n:Ӥ:MT3~:UפzMT3a:LФMT3q:LԤFMT3S}ϤIjҤ&MT3SIj֤fMT�4SДIjѤMT4uZ'Uak. [sqjزD|–kزr5ȭ-ak [sjز梹5ʭ-ak [sjز\;-akt;ajز\]-ak [v–հe5lMwv0Nڗ܄-7air܊2a'nzI"u–&l9 [NTk7}Y:aMr-ak^uҾHu\wazףiqMou^f AUw7iz=M90N!h‰w 4SQkN-? B;_+&hLw&� 0zt'M�CФ>k&|=M5fOw&fI;_|���r���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_data/test-rrul-icmp.flent.gz���������������������������������������������0000664�0000000�0000000�00000422745�14670056262�0023223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������8ڢUbatch-rrul-icmp-2015-07-12T201155-50ms-100Mbit-fq_codel-cubic-01.flent�mUq^W=O=CU؞#iBϓhs�FCf-dM%Л_箪U++럙;_ztſٿ۟{w|/<ŝv}%e"+2KSMr~{_#;793W_~/珮~O~gO~oկネ?<_^iXD-rezիWg?<}|_i=y|z.'~˫_4>.k|2˚mnX_^o>qtʧǏ>ztWwx)㫧??~wۈ_~YW/~n^|z8oawz $x^LnfMl?~pl;xW/^o~,~ϟ~?_{?x^>pA}Or{+W_<࿙z./!o(׿oE?L|ϳo]T*RŃ}}m N__G/xq">}ׯ ?\`^?}Ezp^|;//=l,ݾ%9ه۶}o{ʶ(6QzxMv1`p<y{9ei۪{á}ׯ_w>هƇna?ܽwoݯ?믿~68 _}s˿޽|c|uMuK%__Ǐ/__em&+Ѱv{0Ӈ;٘5͑e|/z֯)z5ʴa~, MƯ~}ɳέwv97H_aGLK%{�?ڇ3w_|w??1܃G格zQoxQ//y.7sg|1{AA|2͗>x~xSufu\_=^jwnS۷[?o}w.rBw7>zw3WN zz?[~S=Mm /_Y˃6no]) 3˫o?3BO>*7ǝ*HxXeSWoi|쵽̯~j6GRz1~zNuy]?mʻv9Ecn.-|ҺŶZ/le^,[[3K$z̭p@J' o?ryf\m mrv~Ƿ7#xŏL_:E_,]|//ׯ63Ϯt| ?I4~W/ϼo;ϟ> =u8|i=nN'`6ۣfxMÕw_exxW[|`.E2 'vw+cg䖻?vh+DФtM WRZ;x }PR*?~$<LaGav: =(-Bd7Wޯ*ww|A;nY05Ql9`#@v38h}<~}z~V_=5gyGϾ3+|v.mY>{~F>'ϾѼzk7k^ ^>/_z6^5ၔ? ǶD6x gj)([Ϟ޾ʓ Sׯloo b |c,_볇ϟfkOŧ>''ӷk.+=%Iqє.^^_^)5kgoyGp$TsEE߅(K&*Q9kag =1KQ:S@|U^~Q]_ǗEqEU<E$S])SJ&m ڞǮF>f o>WQέg.MRmd~(O±+D/F * x-bqބƉDa ;iXBȧ|9RH:C"kRMg?IKJhKjԏ9ĉoC$έ5VSk訟CSΥ4֟9,7z/EBtE[R&Uk_XtYiYi}z z{欻obNZv D?> > > nEw-ޝM>Osb_᧞!g\G;:A8@~<V„~+nk56?x2aD }EOsē}K>~8_G/_^%%s 8'0o~§>Z\*m{Φǔ7̕W'2OA/}HSg pӷwoGV;_˯i<NM/~w?~j,7~Ս~xDOjv}3{-s ge~SS;%g5i>18vZ~ڼŀUlY^[a;x0WN1:Oȝԭ=ot*#oty9|ʳ'Ob{0Ox.].o:n]: }'ϼso4qM{0r֜{W>/ݺ~qׯ/GM Kν_߳•~wOx/]IWSQy+YE+|72sGG%tCy6K?ͮ!Ե)`)nlٶz+vKȦTSU5dK-dĀ=`x%Bs % UsᔤD~%K.y[jexlMr/omr ᔑ+k_[.]=Bx1UK4RBdny -+kΊX!2\B8X4;-b;R'tgy m N /!\ 5:|; ,9"ՁXUB8:߸d\Ceݪ-32<zBmTj‹j©c;%KQեH5ZGZYX!,o$!*C!6~([eỵ&jn ^ ~d©6{C/Kځko#9zBw?‡cQf,!,[!Zl7_wf/8z<mȼu()"9IuL;% w<7|v+ip/jZnEB8Q,3…+-7ε.($z@9[˖k kY'jĜf}\Kfͯ57.ã'&r/(lpo#j1ןV7.m! QXə갴GPZ^-p{mE8;=RCx3ڂ'tDCpE N2W!\O_6Bx-zBmjƼ^4*IKퟹ-y!ZD=zB+quE%jn\.YI޴{=GOMv|J!\"tu9C,6/S Ҫ{5Fe3w LCfA]KNҩIѐ.MK^Z+ Lڠ5.G~RH/= HrH+G"sTތׅ?h\u}R9N^HwפJHYHXdtRׯ�r$.2zZe]h&ɋ^zz9sJޣgd"5"m+{/~7zV^sHS֌tN\>"G*#kb@f#{w<5٬JYWF:#YMgfϤFB#sje]i#55jzԐSG<HkdG_$62z50]B8Hmd!�ݑlSd#kΑ3S^!#ɑ%5<<uۣGIԖ赔<"GBt.flZjzo!mUY H{dj;d]"y\�E3ɏn^p�jGR4_N^kKHg{ks$B2y[THFջ52ѳ*<ԓ@Q rx"%NiiHFתe]]#-{mȞH7Uy}HFgGz$3eOav jˑHdn*=dTeyi4IFcvYO.ɑ(Lv^"UѕR#Y;dIv}˗9%rtfLΜrrK5bZHy2Ɏ!.j$M2zee|6 #qѕ Y:F-Ay9'5UIFr]V'Hdt"Ur#ѻȀjQQu1NDJFB,<G*%Ȓ/!]E锌Ŝ],*QYHd*=iY ,RU2jB#ѻ <"iQ{_/ܐBzZsHgDAʞcO$W2z7_l]V"h7.`UY d4>-^K$'}D% ѺD%svYtmdΗHd>yGOڤ J$X2zm,`ltѐ粜S"{OFgwKNefGc{$X2z_/K[J$X2yvwD*!]ͥ){KF-kdg۬JY0Hd8 H4*nw K.Eux𨎛˔RJF7,,`iGu#,=#ҸOӲDzqa<j/jDz%y}JFDEd}d$KԌӐޒ^GqQH}+`J%,R+m#KF[HdSM`i$rJ$X2�=+rMHdpDHd+7+ Yʐ{ב\v.J$W2:e{jS>:"LHdug&+ 9<f}W%+TeN#*!\eflU;s=;%R+}l1Hdt9eYJV2z_? |"XOM޳Gj%9]4(ZT93Ej%Ki8MFj%z/s\S'Z裈'jJFz.ـ%Qks=Y͝Y##C^TNt Ri]?Dz%hJWڧAoHdt;* Fz . 8+ 1J]ROW2zM,+F[%+]镌ވH4ܴ!u]JFs>"4.:#х;첽F oDr*@ ~ɕN]t pJFo $aH4%\}^<Ů&)S?R+]XfZu=׫Fbq\Hd2jq._HdtX2dn&Że{>e{Eܢy{:Dj%pY$Z"Rף5R+ҺFjHdtҺ.W\*մ޻%+]4ZDjrZ%Cz-L5R+T}.Fgқ*PFjӆlZ*rY#ѩ%J2X kAꈰ kV2ziTh}JF.Mz$Fr%7ہ=+vku]#K^e=+2+z"u%KS>qJFjz@ ^; Fj%(E !]:޺Yo'E\#Fj%/+j$W2:=jW2T^=e㞍 +)-y^^HdtNTԙC&|JFIѳ6D"k2z}Dz%s@9 ۂ_]CzPHrHd 5+3RFz%kfdDz%wd"MziAƝBm&uV5+FS]BD_Gz%|MJFHy=b>zHd!OSW2[JF;H4Ԩ,^(QFz%sb^ZzvW2z.Z:{/ 8jW2z^~իg#"5+"}louZ?Dz%W{r镌ξm׬JHj#+S*]kWdu^M^ܑ=,GU$X2u]0U#;~ 9@ ^IoHdpz6+]5w`aK}f`߈KFCɵXHdtf$w"u\,붗ޙ)쵕Kҫ_rq׸sHgvOڻl"ۮ!s(R,%y]^E%ے)zTKFW.')R,XCCUY%/nҫev9诼G%(]Hd>bj$Y285=WM/;zIΣq"ɒUs^Hdt󮁖IXQ`$KFjiYrHdtUl�E%!D=xV8Gu{ځZhI- (R,\ДWLX2XZ)G3 v _^Hdt6zu%k܁!~Hԋͪ" Fz%cs^ =镌=QmjW2MkYH^Q+SHd:9}(+|\_E\ gHdOH\(Y{HJE`\uyDr%Ry}JFʲ"RQ+(H\rsA$W2tHd6tj$WD@-JF/�{ȦԎHdpIHJFoeY.AXiG7+ZaHdtJ=.)!DX-JG=fx]BztYtkvgV#%SKl<{H4JF/jqϒJF^[]!]-чHdf'rJƽbI#Viƺ�|FȵU#]R|FxYJF<z\Xi~T_v߲d|F7O (GVi6�=6E̚]mK_?G<Y)KsHo5ԣGݳ˨~dG. ҥV u 魺]YQn]BzH5=pJ!]9j+ 9E*Re]éb)唗8˨|8$!QIKBr!8.@^  0.9zNm,}ҋSH'E9#9KHoŭC=ٴ04rhsĵ'rI!]\roD  K %5PH'nu=K taQݳ 6L׊d@bťt€={)S6Er! :^"] ͱpN�W"H*!iE]FϪ+Bz}ۺ=V:S >'QMKe{ړR5gLIysHQq}! 魥Ljڨ }ZHv�{љe=.)K#-sFxɀ'kkH/Gҩ^uC^3%<YUͣ`ế-n"{H^Ǟ.JS]X=6㣯zBjH/]z]> (:!]zd$7)^Gށ,-ה�Kl$j <rϤj}֭;3=ⵆhRHV+hrH$^#= R%@9J%٬6wGb%ۋs$V2:E nxd#JF_$V*s: "kFzqV2:g;,wZHdtGV2P/ӺJY"Gz<JFt5Hdpg)*.ˣZ7Hd:׷Hdt.Zv9!{DGJ%w;/HT&պDJ%ی9R*9JF:S)n`(DJ§ h$)ۖKr \GĪNI"uhۖxHS2z)؜62{-ځf)ΔVI>S%*}hѓ'^=k&*Myv L ;Hdt%;vͪN]uz6952-W#C:sRS$*]G) 8JF\]Gj?e^]א^.)3sAl琮,@~Db%wLe$R+d<u{5R+rGMZ<g9B Z~ZϫHdn[j9֋IV2zJV2:y˕f$R+]gGj%wAHVϢtJC$<L=\HdtUIJFV&+ك�Uz%+}վNvX/ ZjoZrZ"oYիkA^*]JFg힎vϤFj%kK-Dj%MJ$VJ=s!Y޳Db%s#h9jGb%![?Db%{gV5BzmկE![+~hJF'2+5EUd$V2zⲋνz!=/HdtN/Z轓Ve{6UR%R+vF|ZHJFJZ?4Er%w7_$WsCHdtJWHd^>Hd!P"8Q.Hd􂔉HdpCn,Z-1J eݢDj%SHdpJ7)V2sHd6 o2VizףDR%SFK$U2ȴmoU2z5rJ#jc/wJF/${=R+2.yDZ%cAo['ZoDb%ܦe[HR.v [Wi$V2{3i$V1J!u Hdb~/5R+FeuFj%+JFo#/Q7Wj=zҎFj%Bb5R+}܏{>[;E<MZi䋖2^u/O#GhCJFʿ\mުmu5R+;%]U J$qo!}T,!]jEHdQ%rC#ҸU"U5R+bT\wg4R+eZi|ՖhJݪ7HdR{Zi$V{l!];mJFo4˶GbqjRl/!vV#щ()Hdt!BL$V2z#A{$Vwd.8@א^hůL D-%Zt82hƀS_#HdqX_2XCPں҅ ـ#Eb!`ɗ߽̝{?={g/K ^;VN9ߡNBG8\?eهvC=qF6 y'TSqx䀭H̨!w|4Ǽmd(d߈!t.նn8F&iϡAI(d=t9dl ^`6 l lÏrg1QʃA'{GmY"( (O泀ٶx\%)}SH6e8\> tOӻܭ2 JSAdv?hUZݥ]pM6%\PyJ.?#6t^*64ݗ*쓪"O٨zYn5rΰ3Dȡ}e#BniMQrdvl(XpfSئ%h;L)=#m:jui[=<xP[GW;RCgE祎u~ZOcވû)jmj:+|?b3XKkZԹkZуptXCAPǁxtuH,Զʼny55\=rAc dbjyH,)nuyc%Oɥ䪎xt6NA?oPPpw`TNK#57O<"K)9 ѝ1%îfQedVwb@}=2 dnsWQt643:ft;MsDZ )@;IP!AI.FCc6x+MKJf,69G/-y8t%`,[lJs#~$# ڜO\Gdr;}%, cfגŐi;`($睅fUFLpe6rsb5 Ă5fHQarɨG#Ou?FϏpvai[4TYHSO]TPa[~{ x<C_2rJ\�!xdFYy&jp&qPbi LfqH9`8l [Pb7@IlGv,ґ Ѐ2q@0ȸe 7ԉP j8PrӌȍP9! =t{os<.ЀC*4FOkMGy~m4~ h籦^p68Ƙ舨Cn{{9cSWJP0 a^!1f !~DžOOwKt5%O"Mb=3yt3e.t6x0ru!+B4-ʋe>bs8'̿NG}QyJֽyVYKC$;JIm<<C3ڑQYEuY_ Lyhu`⸑ΥLZT8}zcFO{(zd6⨠VLuTFh zF? %s : zc:]̩ #Wu!.B7P~Ǝ�\l!)B`mluh 8:+i#1juFlє \-+hux(:!1L^#*P1t|DƠ̋[4I;jt$d9 Fb\=rC͋#GqH%y_"H#O{wVífr h\Cǣjj8w<}G,Q2;6[cOلVKfs]OJ+Umf JV{fUv .<sl*$P'\f V;1r>@n>Qw>92]IFy֩(KGH=$k8w {Q׹Cr|@T; Rf4$e^{UA2 �딍[=xocϋ8 TqNx q�҉�TV`,)>ݫyyUx?!EfJ :FnN*KO)ͽSXd) J&5<3퍫*'3` CN6|#Ĩ$, <&qD [+Ȕ "YR?"\c�N)qb[0Ȕr8Jmls,(ؑ1?2nSXݕbƦYQ##r=(Srl0yRw ~ƖD>2ju.WO6C#>:>/3hdq6mduSF.F&'Kclq<z#7$P%`Ltm! ,Rm4)y`.)/IT(17PpTbx6LD|KHL,kd):‘ne%TTl gX-6s_ad*)z}i-&Tm qr)j8+j8`8ح8zfS(G\8^ =ENnsV@. JS,Qg!Cv+"| (8`XFyy|PQNerTƘx`4#"ms/u|Sn #26y) ZAGשWЫ6`/wVm٥:"u=j9V9q`|s2|5vNm�F٫#"`A4h$j`u>v ݔ)N(EپI)EiȶwrnN-ZSDg@C*.QܪsE;4 ɪ"쥂66s-8]kI#CV, g`؂==:SK#Do"9XEGD98À6łS\)CtE>5_#^l䝂ʛ[WZ$F4XckrvTLnW*H]`<b=F9ߠ&Tr,&!sclNNZ JޙmM#6NS}Gh舨! Lӛ5Jx�ߪmj�Wj^Oɹ( YijPaCݦYonSE^O_ͦЩ/^Or{$ݶr !5):nt/%4}YCand>ƞ{SC l吡BZ:d(}#s"Y2'rc{s(#T(kiP0;`Mґ4 woѵaka wOk>9*񺑻GArzRR0d8OɊZ^/62dSXjl0̞ص{'pDxޓb*JV%z@p#ӓ|ox@W8])@uF؛Gw0Tpӕ`6ru:<<F&={V ]2Sߵmޓbw[�fG%V|ѢF|`t%O{>d![ 9&`7"t stn͝ З#7۲=)<I17iO P;@_&!wmlv[^�iS}\DGylζgPV+F4u!C^[G `<F_3j:dGzMdmv4ic`i W-LjMY>2^c^c^Q:mr3<uI )zP6/L[f(d+ϝ޽k:iSrT$>Bs$Ff̂!wG;  ]9 zDwr+(YrHϻTLG.id3- W\ߊP!Kí2o-MwN=Re;S5e;S`\NL>drHō],2/uZʼnRjuB t(D-b@fGV` 6]-NJ2ߪc׎g=>"3zmrs@M!Ff,I�ō2a;Be*N>47JPU3g6rw6Ȝ ZOm/0RC/;4Svg9i`< d>"fjdՌ ǣk9d N倨:)km jEm&Š$[#]3NA7Ȫ4g|8K9$2"?^?wjvfzD{g!7x<F+ %wu_ၶޱZaYNzΞdq\�WPqhodnw(Y[F:S6)ٍm* m*<bsH޿C.lyz0c*CVyXZPD'dnPp<9EjuojhׄGYlG^NJ~#w`inNns_z#C79y@Gм,Q O4j _4z41uym߻CQFj]I {GhusC&MN>@F3(*ttq4(Geg<6[ 8umv}P1R/$�;e)߇夁 =Ie4.#7:M htg*V&:F:mJf8f"anb@ArvXT0^# 4;}3x4r U&O␵&j6hyw7[yRRs7g\Ao:ȹQwEɵ J&'wo?t/xOϞ>zt>ۥtckx*f9[ޝ6XIQӦ#27vZhQfVg((Y#R|<zgxG%օjq0p/ph#6}k<FiG壸M ZݹB;JvݿMFq>'ŭXmg/hXC*طȸs(u.ፎN26}AmnuQrq֩dJ31XlSEl \sE[Q@l F -UCm$:d[ÃC[[EV6rsH7C>s#ldJ%4ۋDhwQ>95Wb{@YLJtsZ7q}ǹ5}02iԏ>-Fߜ "i~sJu`xqs[P%ӌ+w8pS1�60D`T -#2m+;1G!] |-Z/(9`M&yR/*Y'1 CF)$^; 7a"_gS>bYί2%C R0vz>dndz׌['Ym 1.</X-d[vBh6Iƣt0F, mH7 Kja9{ ##9`EoDGRYgFK Ln^NF.8/<rC+jus $n2 tI9ӂeldqࡶ-֊MmcZMQWHحiЩT;d#C^zn16'1{Q4t@87�SWL,Yd =&2mgn)W\2|dly7ldq pTmCFC)G~آNY4r9j6|6~2u,y͜[D3AQ5ZdsuNȔarw8ݝa4 =V6Z+{ap/H -NFjܵf/45K\٥' na+V,(;zd4Nol.Y 5Z!}6v/%\2$Iv4I<1A.rwyʼnmDCu@f'@w'^ĦpN.{Kl]g~�,"1yG wu'RO!M#WP0׊4&QmnݩGͦЩt*(:d$>Tdu;d7aO搑]UӨ\Q 猏L3(>Nb~cNN<mt;m{m Vt#W\Q2%Ce5< kQ8q7"!z䆏 ǩ9wq"]uފ̨ժR$<f'~':2VzW p늄ڬN)c5r_\~#J[f ~ȇrbW+C_!/sWGoQ'RmrKmGLs6K}t.;/k4a`O,(ueyٙ.%0PhyĦdy%93ZX>eԮy�ߏ['TS{p)uG1%$> 9?B�QAIK.62KAubNC2rD>#C=^c7D2x(C5F&cR}ЊZݨi}1͜g2#3e4sGt͉~Oi숯JA˰ Hz[l:Vp,F |>2:̣T:H6N"BɅ1D&Gh+,<?}{rhs=Q59AXxۉӼ(%4:d!wp[y¯nk1j5;La a@iYu<Հ[3r9^#ʅȭt>ѡr'EGr6EGמrDm#{ݰp{%]R;\y0v͇�thE5$@RۃSS{4^L>ZG•l @/�tTĞ;L൤9ϥKVOo4\gr@@y+SG~3:<ODngX蠊 4g\ {[᷸8p5U'wΰc"hv2lMV' ~4rw2l Hnݱ.uI# hj+mNn%:lun`/uNowRwᆖFV J;hRpKNnm-96*y8p|#SZS3D<uw(K݅[[dUPܲ lZIo#{s>W|gdrĶ7BƂVangWq6ҳ! l E?"fӮ09 NRcɹ\Ƨt�l0:d0<advppc+#$&6KF!Úlc3t]Ild�jNJY#n]\i6#CmDo ܚ"C%fG.8Zu,zm6퀸JS,9(:`]nS8o 5Səs0%s0:Ff:[|<l (zraTflXZ,^1rwl5cD}T=H"I[}TAiCKqI&tYtӢF3; 7Zyi^s'[M6s=9؂ΛdYHc6!Mw2!ͼ\2\NZ(sGz!'e7fh=؄<gUS|#ң}^B8rSùX 7Yeeϴc"ƮR&c`ylCQRpt`*C.oEejn9! z S()%B'W2zCWK@*TB;lI78%W#)ڀ2x8C{t{>#թ/`2K?Sčy.}3!7?5:ڼ. ص3QT{;R( CD~vG9olG3j4Կw$ %e>_Px#W̌!7C<G:+juw |^:d.6ʌ5Z\]ntt~A&v:UB:Uތ !sAn6pNFs+VC0w=ڨGVS0\zfQ2wPFꐕPr$w虓3 38T0U'<vϽȵwx0vx<`r!D' Em4WD)LĀ3o)u729p%Bk4pO=.KWAѷ,R6xI%a!L 3lS8fAB9mލ\F&,5ũx4+js808kfY2Jn qK:Vؔ78dUj]!>nR+RQ0eL}0ʶ�}VFJ>bht< \GM>@%)s[Ū -Fű;Fݕ<?G.pJVx<ZCVdsXl7d:—<9'A;ƅ:!R\~OփéP![ݜGի(8i3nGyfsCq6^y|[LރjkJmZ\ oMrJJ9d F�rep:'4Qt>}Hզ/:029dBR%7dTYWPy'0md*6Ks8ЭD_.4t!h9oɱ a=[cYud;͑!rTG)\FnyhΧ$ _]hL06ɼ3wѹK*8\#qR-GfG(όL_b#Cts`0=PQSLs1lEC##Fnձ';)[`4(I ҷ=o)"%rzDiʍMJElܔWY˭E1ZQ29#R"n,:6wWCK�# Fi;.#7†5Mn]Q!J#vD6NhC:IN|BH`UGQ[;DAg< ޷8dA429A(X39dEn4ͅqvit\�^Yr|<ZG dNyci@.ii/y[ƎTmKksҤocKg8,݋#W6U7ruZ1#4y ؄MDNt7N[#v:G0RP vh#Iy '8`I3jzT+JNoY관%1ݴn3UiӞVwIkn\틑CnLl6vw`u/1p#WoY: }߽Н{?={Vo*&0V:bOg{J R{xxQfz(S٨g㜜𣞍CKz6EG=)Y>~[E)Z@Tf;s.+js)){T&"ͽ3Ro$x7fع:2#[ zZgquǵ`ٵ;BNń^Hlle+"[hQ}"oeg�3JVukmrDCQp7'v6_n&7Baq<WN0X2zG52Ï_s e,w#jfS/W┻=;m':ih_ୠVS 8$G<gqdyj y||S,[}C!ǝCݑ ;fԵqȤՔ/2DOmL(R?Q&#ҊL9#thx5959Nq){:vӣnb>,Np%|Dn8_<Vñrm&#ҵ7Fn= 䍪6NNx[*juȠ$6imռ[hCNU6MD.WOIF{U>s(k#s%oMӨ&:#7rD{]64D7dqȸG3ʢRB%wE:\n6.51K;aHM씶SwA;[ ɺlsGnsFf՚{>x{Gd6z=:l0Tǥvjl [sZ:)1kvJ5jMY6:dXP" \dHH\* =zςZM4vw2+VY$tC.,͢N5ZNo[lNr%#\0ru"Hcs:`P3`^p/Rƹ,ֹjSGamlN<#S!G`<FT;"=<-Z TBk@=)8kTGw[h12!WhJ𩑙[ndu0vy@G~ ƌ]iE#h9uv55W�y>c4i{md&Ehx(JAԐl`(;g F4D*LfGi;c;7=GY �נ)?(tڸiVh7$9bzJly6+lz)Ypݴ]{L4$stHnI6FMykUɱ.W@^nBw, ƣ#룣VOўIP=l)Pp/D<۽E@)tޟs+н#-670qv:7'\ :a+ŹΊGsxJNiCC4\p*/K{p<}".#^u?lzt/K!G~ȓHC�Cw͸N V8x;4̟†[݊"<zokQrqiީ5Zj>r[>ZOAJ(!SGR 0Pģ^!N\2029dXblr6h5YmV!T:o@mCkNȨ<xhǡH1j;"+v[Um3 ڏ)blt+@}MNv@r; h, Dc7G7F2!\2xg&p.Q8`-@7r1!PF.ilCFars4p͢3mI Dzĕ %7҃i)lGoxJAFtvDbQC2Au!H##\+'s'-(nZd58S-Žo urTF(>/6.alCF09d.Xm@GZtGW&#{U+;lssl5;U+ m@cyʊN2myʌN<Zy2*Z Q8dze+v&&TK9kuV|8losFLKX䈒vZONw0;Z-WW!95+-lyJMnm5j<9*$-2϶@OkU O>1vbB:jQ)SP` [r>s;W0l59dpNV5')5Arir@fݧG\j)tA08dP`djzD=k#C5'mK-#i# ͋P2Gý!(!?u3VҺ!Ë )\p2o9dpӛ529sCbu)m B1AޅKw|SpUۘ:Qt>ϊC[m(qf<AA{ٛAറ;MnR VYhYdEodrȢxH?$C&`υC%F.D'HQ#9dFST-" \vzw-P;t^=@nySFZ [6S ISpm1MJ]bfњp1F_9\}e*Gə}Gg&%՚>2yї4ң/ -Mt GSy5MG;@u/6i իf#xamdu ` #w f:qFھ{ 12;P#gyUuɄ3tsT+T. C>.<2-h9=#W n5;[N &�CTM z2T[GG&F"Y=>kє)ZS.mhn 05(k>Oo;Ʈ:=cLFf-HhhjERrw $V$ GItDsZju؄ݕ;sd2R]U8,nlyuGD2K]tfqNh t8u~Pg<FICN SM +:C$rGCq(6,Σ k{c;&( mcZ_Wod9d�Z@ͩ&4$:qph$ % UrbSx@6F<)UϨڜ6G %wڬ6ƮmހY E_js/Ƚ5r0vjsXwfsԩ)_2e[~r:kGnQvK<Q7}KMKʣEFicW'B*j5hi}wܝ͢S\"Ҽj}-Nc]lJ%ˡ<=Zqv(#rgqw|SFɵσ{}e}e7̴{\5a!þiK> M^+ <s#S:(G' hn#FV.xsiNXL͕G ۡiCdF%N;A:뭬N3u5}@\QrV5_p.9`NCg`8t^j5M о!yC{8J8iC&tIо6yCtb,if|8\9^G{yo&'% B%:-gQҪ_KGľ7 ~Y</LMgj|~Y2#]krslN1<o(HNS:c:MKCFb&QL!gFa譣VOڏ R7[i+sd8|3D+2;߂N[.YN um(yCFGc4 x0[>[2zheX7rsȠjtsEc3ĜѐJN#=mż9GiވO4bNj&s>NFEQ n6y:C놞a#uhs4 \>p4F'Gmg飽_ [\(a@7ݚ)i_'V94V Am8rsȠa_刨G:iAZ^k GgM[o]a׃F̜QiK ]m׆H{<'w6VFmn \{yN1Vd&Vyʨ&ՍY9M+~/RG3m: Ǎ<o|kڜ6XM )u\9r %O{0OF [4<NƎ"Srz0Â<JN73ӟBJnf0ӃR`|XFm=\G[B:ӂМ`}r7X]&uo:fS;"I^hskN<̭QwB!&nS�#j{cj 4tC~#\Z=BAEaE򤃁}95`C4*m2xܡF`'O.F@H%洯EwSqz& y+1`8dwuuo2B=r^'XRjȄ[-miv*|`SQuc~>^AGȬѭ;};S�wlڙO4SXoݹo.=ӳϯ].٧T&x)O2ڰsﬗkHE,@Fe١Umt޹<+ywFM1z6vgli{ǭ&f}tf.<ݦYe<-H4-+);)Xe%7)z{2/S54@44 0 [~$ٵ`)j{館2FlxY#[4`v|eFˊ �'\l]`pWkbGq^Lx: @o8!ʎڠQM"/X?�pؖ;=uZyluYВb0Im: y=Ȃ8ٍ䃦88`t.>@ޏx4 i['񾕔H,.z ^�!�a?#zfW-�ykp>g~FJ?3+(X J惼�2��t>;~^z2)$ v+F𒙉 tJ7 D o�+sCƦcij0ֲwiz>` ֬l8&xj3G^ZoxiLYmϳzh+$c~B> X�y/~gL6dg?? LNi3?b 'Li#;� �  "o,MnY�My!~C:L?�w�Wl^YY䐘>h }Cg�DY7;kfH<fbUx$zE͸ma`/Fprn^�}a<\ 6o-m9 P*c VϖhQ~;.hVXk};tQ7@E=&a}e0tN/my�l4 d[e#2`:>1+@z. /8~^kA� Ɍ!o\䮒.@DkxUG:UɶC HOkħb,\i[W\Z7@ ;:7ks ]vպ1z/VFKxJoBݙ(A!M & r7Ǫ3-074cWE+p"; wzݸ�5bp~b[G`غ5ޝ{dK!_L#! C{1N}ˮz<!߽?'˾! tajÞ6]n@`B#o|Yc%]2m >řul هk7dfL}% yd_:/=Le51/bGd8DN8 LEV@-t4+x`ptSzMv �ogw,ՌM|ON% |ϫ ?N/Ҷ7 ݏ}6ߐ ӜSmco6=OܙAVm Ym,>T0ݏ 7~W+'+pEvd=!$ o#GQʹ!܇ q"9rjG y,ʿ|j›ec7fOtӰ/&o 'w~`o1%{x؅l6{i:E`]G->$W[om p/j*yY/Dz�TdfsO pYRQN\<,�qw'jdmuHX'|? dȣM!A|#=mz@&9 ֌yi>"Hvѫ)J j_bqř 53ߝ dꬦ䃼px;|G_'!mƐ!_y9=jpn>yy! @&*w0Y!6%y_IGi#Oˉ=Ҙnx`zxl3r_?<�l?h`D?.1zx4ƆF7fTfAv |~tc0M,"˴ݺ 6;`TlѐcFQ%J "//O\<þ!hm,�ț^s̉/?Hp!yud/(Vj<tHݏ |�0=(%Sw_|i^-O@ޫkNC!:Igwgd !w e.o�:=nȈQ}ec쐑'm'YX̍`$};p\#+ sůzMjA�d~#. Fn 8hgIxJGdPɎꤋf0.E tqΰ׉ۆ>bGȧ@V6kc@2t{F1^1f6Lvj!=҆=n&S WdqN/qP,hs�0Ip<EU)q&ČHfO߰gӒڐ7Pi,dmEX3@pOə:w# $?QRaOV�L &#qƐ=>2u?L09F< Xg!crC�*w-Y;>b\ {Θǘ,HY䍐 s^]BdǎALdLvdzͰ $A2>q}ø>G`W{C $~f_Q>0 fP7@ 眱:ʴ$ԙ<wddu359AKgFR¸>V7>솀i:y]1bzȰU?B` 8)#[WP\5Gbd78 y7$WŒ$c?}վ~fHŰ~$]?!hSF&۱#.,A (`WA3} ;d۾D.V"_`= / 2j $9؆{7Ӝō*ܡ&_+xv LXőV-q%Hql\yRC! O|jId2gخB z 4Gzdk[W/@$ 8ۏyY6;V\[|%'T~``�xyq�IE O<;H0}-a0+<诨pwϭNvU|`�Cr}3aQjcyV<Z״JWF<s'3ϏBY9 %d\�25m">xm}\Ew$<T;y>}DDe?E �E^~p>�xq=Y_7^HLIוE^�yu֌M'9'}C?`�8zKaPRy'>=%v"g/G�<f/O<ыDoK?@Mgy*c,иMh_oػٔ5UDhsN;=[<(c7<1!onGD^tb#�XX`C?/e >>Jo,~l3w,Tг# {veHRlx|w?? ~tc>QKw? +@& 10"xee' i)?|kxh&S?1@+pJ=}? _@!8BO0샬J &cҧ>W$i|H vydcyH=H+՛ -&S<fWOBs3ޏ#J*Y9T*)n!JU_08CfO("OH O{^K&,cHo6O"=x>IY[u?w1eػ P&=WLF>)?~^A�(|"oǴ>zVB%'b/@ Wyby.Dk!+@nߏ 9cW?33-]L<NuœdMdzYv}Ƨ6R,qx`a~^,kJ'=Wj௷.zGO O_@Z&Y`1ޱ;-cw=d;75 &Ő/7k +=ѬaW�,r<y?.0+W`nWYC{1=F~lk>{SmM{@Vcgzb2ooLf6]=8%o(C0yCLi$Ez l`_}ؤ~eR{h{ v#{wO; f׼>G F<% elC|`?И& ́l�Nh`ȝ]�`W59-1C-HCf2nȫ)öi bf"wÖ'ɁcC^�4'&hd7PVְGSrUK;#k^ߏWMm_1f;( {i/xfGOx^ 9v6d67Icg {1IdSX$AC 2js67^?OocK)mQݮv4~MAǺ:١ZHw~kn..+VE\Z-Yo:3+/:=qqkr֬L 6. 87^9:@ ʋSn>L>QU︩|]<aFRq&)qzKO )Hny{˾hQ* :*m>G\xGA9@~@ne駱[ ċ5p'^Iq 6Z/:#F]Š*ž@gn~x18 tgjN%[P"J)6'K2 dY w-g(~a8·JxזG5b$wfơj1 Ia(*%E.j5o`!/Ъ ZGTU ߳U6 t,! s<~H icadOzmdn ͨcc ا/W=СAZ֥lG6*Hb(UܜioN0?[s\l{V<Q,Ieq+aOP H~*O!j NG;hz+NaLb{C߿7I$[,eɍWsӔfgJFD ~ (Z異xIL)v |L 49zV[ʙ`KLQHwd"A).n9Ɂ^ոwaN%bNN}N }֡}F�#8e<NxLqɨg*`X(‰@7T[H`رZPF;Yް+x-ċTc;�{)*ǜdY+@5NZ!D%=cg�J0+;m@fKPZq''>/.>ɍtFeYH  *QH%`ں0l ^dCob,yɀŠgׅLGO/ap b&Uxdt}W3SٺfC*^JNJ†=`|M^/vW^'v=&wKKx,cUCO)G3qAİR p[ݺN �^'lѰ2mb,xq\{�o6xޑ w@Xm %a&ءv?U0lźu_>c/t2Ygw@\6drx}*W<ر\VWqǤ H]O'7_6vTofng2�5b`xZ> i {@aJe {JR_N;�N.nzt# CbX[;=~qn{ xMh,,'VbxQ&NHٱº$-dad}hd{r%qFP-W^y"IcjV-lݧHw'bȀ>ٿ\frwQ_CE"s\ AݢÅ_>ء[/1!f^+>E|FѿL0Xz}-8ϰ㹰I7(2QR/CaŎj鯢σ)ލbL~ɺX9Ta/INګXLbX6]~a1 zv`o=,v1u zg7>bg* :l(G )\2샦kKՀ.=a^WKj1AԕFg' ,&sG,aMf {P l%șZ�]:9qfHAn6\u0h_H7p%G[f m#:޹ ~5/kUMGZ$)lk7VW7<oq ;<+˝aDcr&^얬+C|N I v<;I;:H3Nj9Md46g=bzͺ-ݲ6flhX OQ<ĉ5A nKΘIΉ>lh�ӯʥ_ j?&5ƥA/T<ާ pBfە)9Z k@3Iɸoi,^Od.*%6T:`az?[;=gPZ'Gxem)/#80P5aV̰# ƶ~R@UfĹ'2&#^AIzĹ@eC`RoQ̆a#Ưn繏papYLy(l[ v#`jwZTiqJy/! }_hq�7`oOEeWK(·lE"j=nu׶lu}� rs7 F94^mL%v[毺`bO,޽Ij;[^lOhQ1yi bċۈ.$z^h۰me0UݓeZ{TA=ą@@>]>%Jds{mjVz\\ʀϸ o\0h.؛ze_hwž&wq,`n$ s"UΛ ;֡:O~q2EQ['#xP@`ZiO)Ĝ0h W5߲㓰1Ò`}ݏsǹ>ǽ&5v<V ݋LPIV3Zoj&sǯ-wUÙL>?#/p"Oq`*qf[G8,~"?u&-wlԓyXAAӪ%�\1lԒYL!TY.%}3-\/P`mLҟ.:&zO~ww.3lX8Oxjkߐy6P goy^}v8vv}NJo|Kpc8 `֮[Xtcm3ϔ NM ֝LM'ūgغ9>ȕ`BLİ߲@SͽfUA'|t˶b{̃cg�f3l gc,5DIVttg[rtfGDm,mU^{מ`0qQ+ǛS#bx=;&Zi5\ v` (|JKS'L?, lb ,~`_,ݯ(&۔pTr%2r%8aG0{{Nb96w_fq݂,8_YF1oLcƣ3AOѳJy<'>sAj [�IA=سߒU:ɀ{#NNR/ض' ;H>٩{`W:u/ g�@s{}< '7 `k\Wcx�/=hFls+8cVZoO<"\_a DjU Z^"g�/,̅'~Vk S츅 vZW[ ^q:_̺7+їu~#8B;ΖAF5k7УFĊw,6|6xuNN}D?d%ҍ K`]ldHTusIbSY~n[V\zf LV'O}〵xmͼxJ͛=S^IU(yˡ V}P</1)˼86ƶ*j8tv+v#A86Sݙp5%6S4݆}BړQrlmء7g+˱�= +7mjqs'@C-vdSxu`NJx:)< -Dxe1 .8jpN֘;n{(=/5qA l ST{3�etf^^n ӯ1W{8`5h@Rt/xL6.&zf3~�dGpND n֫M^J58UF`(i9Mύ$mCqHz.XIl)d7^wU( W6.3@o0>ˋƓ}(1 1g|(�K_<x=Zdz.7x ?,9,[2_Nr&e{@YiRe*qnUv'vx쨛L4Vj 3ejP t(vlj"r&OUEfJwY@wbK$]6F$|L8WWÎwƞZW@ f[m/s ofmi@[}6>N1[<AO}n{gg3}ԴCuS{Nó8gʠnDl(/xu0TV75IX z pHYL'S] :L.3$~ӫ=G!w+$1d6;.*Tԟ@þ,JDc(c<wflK­;& {͡jƹz˖ !E tGvT |}R>_PeĞa -goث7֝o!u.%�Q$�^_z�% ݝJ8mћ`NO1@nj{T\ /OILf%oI<~Ҫo׫ LC3qxfI>dĹ/{.0~rqLi BGܓp|8[ICl*6垭;~[5:aO>qSw9~d:,Vzَ>]$'̲qd&>?|]rTG> ,j񌦬WU=)vH؛Qdzw}ēl-\NN'ua%8V5옓,xfF %slbtWaugk q![@FpaW;\O측i;| o__~w?ݗF?Wn ʼn,f}3;tc? [$ӑ@ÓNHiݕa(PnƼ>ycn?(x,Vd0unbg>\k=u3 ٳ/ o|̺aO5ừNCNcb"B%&< ^K5y?(6Xz 5b׃OK f9Z;|^*`ыI_=f)w["kК #V\Vd'ސ ԭScqh=zr(ϊ_=ذuڲutF+A^)a'|X̰/{M8 WaA\%D;1Jjt{U�<vo֊3?>׼6qsR>P!0 4]RzN}a֍M/3lE6/t:luf) guouQC璉:Iϕ*ȫQdGuqg? SyvfM7q17s} ɪ!V=e N&Xye͓ q|ܾv8e¬}>o/)9df[Gc5?f{5Ȗ[�QuUYi%K<dI ŝ_f  9b7H`zdUhp~#P^d}r80U̖*dws3p){HpuҰE�Z'lDXY3q/H' �[An+i^ }NDȠǫbAf=N ]t1g=6 FIrb�xbj&(CÞ ApxC\1>)™@Zq4j(ށ! SW,U~n8 C-惽v\Ŧl.EO8{,,=P]nߠaV$5H7/7~s:+Q3-fl+tyDJq$Qߠ1-ÞHFҢwБd+Ao$qG~|kd b%K<TmrQsѤOyIv^ZXo'gl*'Rh|*dO /jc^? žFcԬfaϵ;Sln@_~gu} (^m DlOVF:Y8\ĉٺUd֙`PۓiT<\8rC-HCx%p,XdR{L@9T2u_lnx?<.6+[@沖5 jwJJ wU2Nmℙ``&бxPj%g&e|$zS>r?;jغięaQSS%; h#aˍR6=@͌W6iL\X0m;BdROS;V�=I׭2u'ĂŔr67.x|wiqa xAo@Ox/i.18AU|䱿/BwBW)Թ*&ءdgUP:)g-[{z�YT 5.VpeTDE?  d_ !{{$:pȭ {3ɼbr7jVSv LPi6{~GLU8L$щ9-;sY)Hm}t9_e– U[.gJNۢl7nVrPT hj2Ɠ&s1ˋQw060]; pz:gR'Oc$زՙa/w]wV}KM,|_`9cÞ29Ę``@yXuY=wesTU6 ˚W's\UN,<ocřQnē-[:@u}�?:jE!^3 d$g jT}YFud@ic]Fb [v,:ڃ�{pr9k<<,|W<0rW#9m Ɵ6|2M7a&jIIj-rpu{:Sp.0M8; lw]~Y;w՛ AEO<$eOrYٖg6K^_ tY=/Eɚ\KϺpޚ&gw-n;%vFjۋ6E[{;3~ ݖl2ĎRa/MoX=~ *+lPN)omap"ݠCb^-$82kb-!J5P gy7Җ+,Þy}! fJIb#X Slx$/ 2#}.NeToƷ`ˊ_JzZ \ YIŷ(3hd(|%\#AVx(Glޠ1 6j-?Е` ٺ\- Ky_2vif-k: q+Rl\Rz `tq]tlRJ<sܦ`#q%K<5$آ7iч$3dےe RO`"٪W_E%,L`'dYK<TPQ v_]Կ!UK}aŏ@΢#44,2~]Ry(||D΢LWݘD\mE{ QUx7 bUodV�ej#K׫G#M=|2ՠ eKeo#jp}!0�. ~گnZ1uݴM2{n'殪v5IÞ32`EAo`餿a)ToX|UI&Ö{EJ5Lep7?Պ]Bk%h+W[49W?a в{ꐽ}f܅Xc KM;.Z' q*w<">$۞1 {Wc)WkS| Uީa#Z:L<>pOcU>^ v˙|+𢡊LA {&.Ȟ 8ٺp_;qnQ5g;j CȎ!/^`8ɛ.;֯)#˰;eNQnV X,ٖ�*߁#vl7:qDd]l>lQ['(x>(`gl!/ #5 yBXFƞ[Gթqzŧj{=7pC/]"AT2˧d%رPA{Ьߺj3[(8Ũ(չ Xhטo$1˕d]4s vg$'eJ5k=;59h 6jeˎ{u2$S�QN%hR_^thN<5e′ìp{�/plm#v>u4,}G+2(bWU>VUÖwH]' feQ緪kUK>@ML%Ȃե`&=@>G _>_ 4l9 ӯwָ}&uGUȜZ@P%Хlͩ<kp̬ګlS$ZW8Bj%u-n!Thr7Yj&-vAnPPpUpՐ�OΦj>PvdѽoV`k}efԜēŖ䌘tӶ+gx8z:5Ҷ>8{Ѓ쾫 ~3FIL>>L]ۄ})g1f tϛ~6)0I'`PVof&bq'L:Oۤ3%SY=_ V]l'6U3l1? +pC`shRl%ŹX4ț?95BV 0h+lp2u/@^K>Ҏ3RF'`ZA5^8zbSjnGl* 86iS]j;QL ~%L \b`S uu`؟f@<LCujp8Ť}kOyg$^`<lY js-ŒE=PiQI T+^JC 6hiA PYY̺1{HC5=0 2оf0Ӓ=_ 1ӲOF]ɧ`( %P\J:'@Vu&28ꛎaNጷD6Nu]`@''x){Sx°T\W 2Ol1v1َG7-2t5ٯOߜQ htNBccghQ ^qv�%P>\C]|VzNŕ'F rUۙ`_@0HJjŽa |5g|qݘ yݥZ\[E>8ҁ|\ gs)Y,Z( yę/SS;\83X]t5`N}Vi)H1KbA&lYrzI dE<qoj`#(N@aK-a/ 1:Z{Z<U0W {b[ikٞelPtE27z_ɐҠP,)e;e`\lӰ'HVkr=VL;qwfl ޠ/0őXܮ&}þIՑ�KLE.1$絀(L094F)7E'/LpcJ.??/_~A{tQ V qf` F'y|lQ\/LĻXUvXJQk { SKu|$ػ?=ug8K̀GzN%fڅA\T]l@"_d"N0V=a 1)EY)RKXҰl7;u[I2,AP.TA   f_`rGIn$'!^LQ= kPy Ī_O7p/gȆ€E5'tQ۰vXg И]h͡n<Y@Â6͙`/ 8ɔJQݎf $NU"coK$W^'�:78�J%U~n Tݜ}}ch<>ILĬ1yRUsN6:Rv$/O!w`�;!ȦMC b諬}QL7 e[/5R^|j1M{4eFGDl~gFF67o.FycWs3^~$aӰWlWG9/%Eaڞb)H,2=Njh1l7 O&|c=],# < _%Mɱ p=>Qjp}b}9Q^nA=lFT)[%e{b%?2 3[VR׆Ǟt!�a -~*xgʱn{r\;V@g�˥`Nc*6H_ʰ>`9Ĭj~{(M@Fs|s,|׸\Iak:j uN>}:86%-*Lt8\6_1k2v8Wbhk:qC5| Dmޢ2az> 1gA|xj@çxbz&{L>sSo†^q#Gscx>ƩCg6RzSw}&PhI&s.S { x,M>s T_lLuYeUvF}+7 e^a+cbVX88Bz>wcK{$se%3v}ISc1lħez` %Cxm$S$Fܣf" NѼgFfcG^Ę(kJa8L!&4hжҕD_MK��` PZ4iE`vĸzmjKԲKe'9lTCSMqsVn{k "E ƛ}ėMrUĸ<*~ G*+ XIm 6Rqլ>З}T*.8(lAﶙia_ƪpŜ^l6y#AD?0>7j\6jSu`1ɶ*w'n6а!$Wc 0^V$!A o|j]duZ6'3W;% ذII<>`#KT^#Bz1i[R M_R -s~psɇS:Ufoʺ{]d@þ2)7ɂ_R4)�� }܀A%[WPD/Jbנ{}o<ֲt8`Kvw6CNGd᪙a"}u|lKz~ZltMyI/೺pCWطe0W-S03 rw&!YɶgEfcaq;|\Z .[U3x�|/ׅ{=.4lNT./AboAqlNL 6DZ m qTA^_nīȆg QT6t\k;'@dѠ U8VׂGՙ`ONN ~GNXdf<X:9esrӠgF Ugq y*M^ {@UXnLaVna;k1)LlZpg=`q%Hb j:Zqt]R1aڡڕ:hmLbЛ6IVxܶ}1q#A X^^v�F*EޓSe6 Ho$=@=譛i%ɆmjXO(oȍSf'+v//ۓg_\11(:)e; {W(xK=$= 'K1gػMR%WǢgK-|_Tt8mZa&+Ε@ / diP9;Է] (Q:kP_0%{sc'-hl5l8j{hS%}Guv~_SqpV Ǜr/J<AW9,9 ,3@˻bVM+őJl}(gz'W-# [f6s'zm+(vbh؈-2azF}ƥ^/;cءl7fqv n3X^{G/O$z v_0hֈ {_P!"֩kOZ 6:h~GGs/?gS3ޒf{y"$kSgÎBvxsTAI6j&; yq=Ή;)1r6ѝc?s;q~gZ; x;u+hRvDΰ(IΝ<zadG` f {)C l9>_"9 [w(Ke\v<Zg'سŝ EZZ ?jM̨dHqN0]Zo; K5XW_˖m>ˮH$` 27[[ճXͰ0jPDA}KBTn2jIl:t'y:Hl ,ذ]f$6A�y1L~5[W׾褐u|вC^lut${ba|rDO'>j7la BbKl=5ر{Oj垚 B f>kP `ݫ5s(z1E6*Z}:Wa=P1c&رollC -dC}7eaƀ*S$z(-.I`#*YGO1 2 ʠ'Ϊvj$ 0AvQW ‡%"@ȣ{X;~ @W1}89% d[ ޘ,r{$yx H=@Zx1Y5+Ebf�6wJesHdW]We&}M]uh)asZk`Ǣ:*OdXzxd ;9y hLU_ٺO~=-;=tOkNϤk΃٩�;,A|B~�Z623larbDL81u;k1Ř k,[X >-n{g !CF z`賍@zu ;h]a5y:Þ~P,ֱ>brcjeSDy0v4ߝu,n1T3Ȋn|Dg^> ? E4__ 6 -lY[q;p׽zKy�q%֕L,f-ۅ)'EtC?mYo@ԧS-ݫyk+`yuSH 8t_M[佅j;ST^~&A>�gyYv0no V2%3i_(|H/j$ 84JLNJu|WiJcs}pXZ�z-v"O$ޔvJc:nO'Rl>S Cg1X9Jau% tջn m1h8u")ٱ7\ZT. ;^pjdw9b}y7{-~p뉵W;?u@g]~J@_S7&^N% xU~l/ Q6ę>: ,lK {R=w;Mt6hlo$@tGbVl5l^}Akl4AQHojzZ$s'D˞۹N0PONɄUKHذ3}j'泪 {vjZ$ WDN)1 ϕ`_ą7l)5^܂n(?_\d^@To/[Ȁ$NLu L3H86hpB2)6Wr3^@zU2.�t865eaVNh ;L(A`{D :BZM�Q)BKۄH'!M}FgxocWjD$AZ(q%8wTlRõ8y*`ǂ{›NFe%2d&ڰQO..77ݑڭs)o΃-YaiO3rq@I>5Ne^#h jqV|h &jűaϱ e7W*aW!bI%WA6̺׳e/O=>wQWg&qnʐ'hida+ߝdVW64eDu^eEa)`dpݔA_ư6f1҆1aO_?ҟGf׬@H}fL2Ia"ZQ]{[(ϳ[2U)lף<᲋l:Xհh\Yՙ"ҽYn7>'.K6̶hU]jȖ [Ad9W;v+f=`:̟aRZ0°p)'d?׶$P5[XʍDrXxphUSʉrnOl=sę_ ƺ ;;`B1kdi=aT^Nۼ죱kRޱJV]h=Q"] 6?{,]^p^9 QYt*ۃc0Vz7N=2{' # X@&V)ٖl)6'P.)-$*?Fm\T[ԊGa¶ģIl_%5IWL$Mprm-6S(#=" ڜT 򃭨ᇡxQ+d6f.?@ XXYqa, "eq`R,tqU vvZ [#}}O[_߸@?'- ;#TٝfnU2 t<4%3=A|ElՏ̞>رB/y`}[o&rv'fl½dRz\@^`�;rL}&:.޲^T'ؠ7VrX ³c /<3<! H&{} O!ZfzG EV I B-ᅸ�0:Y��z"g8e lG:V?gJj9}'T�r�Uœ`3G1ZXW!|ٺϸd7gً)&`dZ<a  ,xɰ<I^|Fd)M7 +8`1y@~X}bL/o2eBM9plViAw > 3=l)t(lYQKѰ8db< X޸6g�nI5 6U]͐ K IGk>S`'2d&FH`;LaشlMϰuĕb$+'E{㧌N<d"qot7UdOga "~g\fvhcd9Jg#.YT{.^nnr)-�a*T#kKv,<=3><}kRV̰o`r8>8.&3_>': y.;>2(u}^଺8=#@} O=DѡlŶ h̲LecJq5qJ.zatpFWՙ` Yla/D4;H'P=;gԊؼ%W1Q. �R!475 Ld5zI3dwNjOPN tUq vdU#2!1QWqhkT? EU?$p<iS. Z7sYOR}OnD]L k\^`oxQGٺ E9V`SAl16VV5Î9D:|y(:.ATau&*\$ر}AlEDOn,2lI5{ +`osLdE R}Rl$XڢVzQL(AA\XQLy@CaO^lA/P/lMC]˳~ xJa#�Qʞ _'awK{nbwXarv j%QmlXNߙ</T_mP? i+t6[jjXW<+V99} Z1vV./}XĒ,RJ {ɡ{H6K"6K";NӮڎwVX�/qå�K~RW!6 ڛ=H�ޘʗ}0x9|zݘ{6Skpj`̧b76&^Y Lʶ&b wnO.x>ɰӑU^j; t\պv׶sv XNg;*5)ed33<(AJZ�hU abm<j[dxfS:sj3F/Y3 %7m}7b7}P]e6ַ/Zq4\%V.oϝ`Oe7gSl+ހ]r~7vQɠ׊;;o lM 6Yy~V(3_d&Ey}5QKj.KmqQ ׷*w$8dgs- _G3iTMOLsUĝ`ᤗA euA62cGGfG8%g�xVĘM`+ybd,%ưޥI8f?H;w3*n#Z^ǖec>;`)a^-YniЪ1E g ;xgo_xXd> Įe :$AQ`Զ]Cyj`O\a#^e9+y5PG=ȌdǓe՞`vz}^|/AY[:xuF7. aبwҸ>_%׳m bZ}5ޠSXŖ;C]˿x^?8SO{;d̑ w5rMϠc[<َnO'7惠;0`y^@h];eG'J۽JXo$ر[=[dTlU(;=H) [4M2`koC%\=rn/0=˞ZOmaYmiqӾmaR<AtX2j>IF$luBH6 naj[#UwC tx?(nΒ{_m\ʘ;䷸e3eJ)cQxƯ|K>z'`\P` }79N0t h7o`Qȃ}S !3 f<{~{98 6b ̰Alg'9}my<E:—aݡWI@6?k>N>b]DXpgLN(r46j%�QgnTD*/hIh3\&>X \ /{i3^q>1ūCIv,"ey`_�E2CLΟR9lZ|FVߚzqﶹnϛ`OuY\LOLÀxP)ƕ`J Wֻ.w/1MjK3;dW)i=e2-[wtѫcrltQ:Zwt>c {vbt-[A^M�)nLZ #<"g^O-}3|=^cZѝ`T^k/AlT0qH_͐Qҿ)`z'vԍlqU `/**H}|cc}ɻz(j'{ a]eW|7BF'jT$cМٻs^{k'|ROOt?$t'<cS$݉b}w.27#K9ƾ;m,Yi4VU7|{F4oR�DW$AaH}Ab%ؠ8*/L+xOH7\ \)=2UTEf`)z(} ^+-h~0[2u_0e?;j. bo62\✘r;X@+aFhB[#YՄR};E˥x5V=TVMAZLUi}@ZH#'xd=Gklpq[ޫS'2z8=et+e%^C] BqoLeÞ\wM]̰7hS-A\ȃ vt)pLQ_,c ;=svWL]DwRN*:=o14+^C/:~z9 kUQ7^'QF\*r)&m86=5\A+=6Tެ)Cuj5޵ b8CMc]J / 2䁉dz^[ fwd;Zt2-{E7:+s)u (C&d95΂Fڭ9=tj;O03[qQnO2.b˃ rSGN Ύ\2}$NqIHI5?(>adIQ$c= 9&z m/J4$i+ yDz;"%=hwoYQcF+jUL8U傲U/@p% e`OЄT}{ qKuqJYl=6e4W͹fT''{dćcR8-^1a IEcqOc+Zг.v {_0BvE里&ek|WPh U1Mw1_gmg34̉<m0X߉1� Z ZG[bt(t&j-֭C?/O_k?ob?? x_}ks~e_o뿬?knKBߣmvz7SܭlgGϿwc/3Ѻw_*&? C~[d+kۏ8zٟvɿN>He}%ߣ5>]3}YH׷t:WUGKqly`pBےvFvGwts|IS<gIJS:_ҽsݹuyvWS Or*͖:69XW-An~=ROW]_4 gܩ_V كmw4Yw?{vpc u_y+_�\;w4[zϯ˞2lMs-Yj'~]p USzֱ|bv ޱӥ]4U7;ϣWq\`[jg|=[қn1wUxNm~]ìڦ/`xg-|~Ǥ_xG}fGs|>]1 Ѯ;لm6nw]Uۢ,~0,yT{Q\l6~f{,ub_NUzzYflݺoM/fmK>_O3K~]<f9+0.|X'v~F{$?< OͰ?ق/]8vs1mOיOunzn,7۩u×}?]f1S=Q;ت>vl~e S޾mGv5Log}#cۿj]nrv#;R(vRL?qj^}|v c@t;"f> zݹm&õvŸX3r~cVsG_,y|"=vȷ?vQCc ~:\A;.Z{36뾻6 gz`짮K?o}V3ˆV;U~t̬znv}Ι\徫\f[Lvn |5f{5Ӿ:{>=%=vͽ_}0Sf˼}2WDZ좚',dysT;17:#>n`,:74h]i;?'l{-͋0Cd_95Tkk?_=v T?XZ;f6|9ry9~=/팽dk cWͮHمiBt؃kc/ fMsk%P͢1{ay6{6vrLL~?x_||U72e/h[n,1I-Sag^n{n|u枇זg6͡acH~mCX;yڝR$,ѯ~X|.=yD7XEg/ckeoibڡӷ *v/fnmK�.a{޶^g⽯ł,ss찝9ͨڻ5#nۛ=0 fQc̔Z_`i63eoWsdG>9T}}h,z\7%zulVwĞ_ 14l95Xhؿ2{ٱ`uLkޢ;tC0phծ?_LQǂDsr' {1=_<ʲ>~ﴪs '{ocɖ$goVpfJs P5"}'a*Q9!$2=^ӨJ;ΙR\\D ]s*:؊g8*bbTg:VoIB܀q`q9*o-N$UD> vxќJ(:;+eh?qH`'߼H�+ Tf.QMgPTtR(xQ#ϕ Gs7>9go8~Ƶ7RRec|w+6w TܡN׉cn 6yޞ~_6�Ӹ1 v'-bW UztqT k/AYJ`W8~5v*j^ڢ'Agv۱&t3 gN8_;hв R;0Sw{ዸu$P~Fʋ OpVՌRc`Vi7n{}a #RFV/?I"qn\3G-{s�m%T[<6$NzGNV~i4Gqq@=T $=xQ]#qt^2Ts< *` WGm^^_o?.l-^zuZsO?ClSV7IyK]F)ܺVnXz9k-ҽ̄)B}R;j8:Du>(7^o[7+JxT}%F\E!F< н'H<j/bӨ(BJ ZTlX 'UQ]mΰĈ;%p^7 huvs5W:E.ch: N #?"L߄{x{vipc+dr-`n:7zM/颲0z\kqQz>2P5-_9'}zꠃf?YGB@y_:;k=ufπhy-`G1>b'uƹ<6qiţ@^fm]KhM?i\Ѣ0i'TE..y&ǤcǹvD{s>$np8z!fd9ƞzbŤѼi?ox< aVH@~p4Q.΋^s4€y*Шb ^^际rt+e� Jl+.=]qC,3h=[1f Zl-VNE#ZlMGeƗʀ(N[0w]_$*So✏'eNffP=ӐKίЯto߁AcGUP.% }LE; 5)AxLۛeƐq,tSs(uѤN;7T$hh-sʙd:4)!�"h\Azȷs)B?:&)~}B=g|>_Xq`ţb(WWV�=Am$"?s9tQGm@  6QMϣO%R qsE2Z"uy^Oo)(ceFeFd'#�#G41skʔ-jΗ1va Nt8yo쯸|6`ho �eMtO B󂊖0xҼ/ V+-a/\ܓT3 79O_�h*qRWuf)uz|p(pq3/zsԿdS̞8QL쩨cZSepOD G(nrkǤ4n8Wo~G:O wJ`B\>RQfiǏӳ.xy b=yBRpb޴ DR &H{l,,ilAz nSzyɤ`1&NjT;{QJhۘ1)2Erf>CA#qmF !bˌ (*4veHxS!a".}LRʊ^ xSGzȕ"$9 9_^QT7yw?Fp-XԱVϡg&M8lbC' w>f<tHyDx<~7:Mp%hL@s8{8CuQsQ�e0f'v7q$&1Q\+#U_qtw0z އL=lOAXpw<(^鴊K16X<xoy>A%4J#C dwm؏ph@w EfݢrG1q3jgP3eL3PԿMBeR & M٭TKrRyzXIrO4}@}7C;bCPY22d)o:?,4pbwy'�e4q܏�^F=Z`q͇LKȸkZ�ol:'H9%\.$ᬌ+8aqФs&4h#_vtD?vSsc s )0]%IQ ʩ7!{2lW;TlbG.-*ͅ?'a_ÇEw٤TSUN; t%5,W5 D*Tߤ"*\t(@8b -,>lxieREAS(IkG'l- xʵ ʐh|LDcopm =I9jiD`ޛ c|S‹wIAf&LJ<\lE)M{=p+opN6Ndc"N(CvMd%:smX4,^FF ٶQHIQjR�kZNn? Mq'9=Q LQ- hr܌ B t6k邙Fmk-J@Ic;E 1貣F8c g|k2Ԧ )k~.53ٲΣi57hq/ 4+,3S V:}"kj!]1.x=TXF7'KԾjקs;ث#8MbI3Dc1j?ʫ/+K(: EOe2/m8b !;-)"ZԦѿCZǀʄ̉~e4GKp *0\bcLe}2H=c-~gZ'F' J~ Ct@ʓph&|$Vg#ܵ3Fb^k/lҙ|]QN E'x3L&t b8HA 593CXf eui!2 ٰj̎(aHw?ĸT%X"~,B?DMw3 f}<Dt\g]D );n40[ N&"#щ /7RX0y`+ mF|U0mOu Aj?\7[;YQ e]'>~f8JdR[HZI+5H]jϜuTσ 9vs-�b}JEuY w m*{a W&x t\ub&_g"8"Tڛ&}mg3-],p: xYAg񟠺a4̶{9� x�Ur68Y=UalVib<UѴ!& ; p+\hH}v0$]3(N KҘ#qaJӊ>+X ΑvgEnfMGe@�O>يLBP[Ù?~s\c.1|e>2s\c.1|e>2s\c.1|e>2s\c.1|e>2s\c.1|e>2s\c.1|e>2s\c.1|e>2s\c.1|e>2s\c.1\O_̿ן)knH-z ZADuuS{DD 5nS44Q>NJ,WH!.?#F ~tMo}USm[-R{qů-H?]hnэk/=?<L/p-66U-RNmC=_]fH<(Hf B0o*/*|Uu`8fo . oCD) Ek;085 UԌq(�'ѝOV3,n+-WoA~U%OhM1x(q8_b?`~A#xHrRA {O4\,e?,hr^T= Xybf)I>~DG &k?!?cyiVa} D ڳD.%xרH+'.+JJ{q"7Ey~ODx@|0^Kx^i5K$_Mdۀ;.\YnS)ĭ߷QTD` ]H[=߃F~bKcb aW}oQ8Bv;hCm|)gv 3 ŕ�B&Ƭ؊ZTN ݶPA]C62qPhXQLsZ"$.ضH׺\R3:11/7*OEm9;/u^Ŗa`ZkiAͨAۈcžb_`U;+ߝU혆 }ab/a#av;v*+w(f;(d-*ڒc~2fT%4WČ]Q;#xlx#obaB�BK�<},Z+q;dk@@HoW K@YJ<p�F#~R\Kfc[i<l!ưp!6t7Y X/̿:܍(x!ۙ N#~TQk:Y.ڎleqK //)o gF9%Fe:aT8~QjȤ4n٫xd/l$M;^p#Íoeڄs2`$%m!G%S90vRu1,Nxuqfѳ1[jhI=N=[�G~))룉e{o5W<9GM͸خ=0Pz[ Q~<#hΗE]X̫.4/hⷽ|֢E$֍5REp,@XiD0Mv x%8:3嶥GpC6 ;|(yhR?CW*<G[J8=7b&K!Nwc[jΤf:-hqQ^sڏ ]nX){{'/),9Nŧ6:%:(IJ6s-N#+GRϰ'G<TrͪhCYozsu}C;BvzpfcJڃR:l-*tL/IT*@[/D׎_FHc;!HSċBIq;/ s44 mA~c\)ۚl;ųb}LJ` xM N|6D{#Y�q\ rhd{<X"P c]{!#,Pwimӣ EOǏP t&o\eaBmM.ަ3 =Εq޾?� _+HL%MBq)l? MN<4-mqh0A{<1@A~7 Z1%HQ_`/_*{|0ȻǮN[eGp.]?!D5b .;՜tHsN;lY(MgzY4.Jv�e^f!Qqa,d -w ޱFmXrak.)U{*&F@�^P)9Aw+zB(b{#3m/CT?WQóZ=-6!+|! A Նܨ:, PO4~dKyaSG`pݓkȲnmߢ9^8\zVNoW@J'ΨSZnJnǧË\~su^T4]|PGAۡ΂sDNx=Q$Gכ7Binԭ zG 1VpDGk0\JfB\R9aA/\pr? f1N;Z.{T\͗3ګtRLA 7H =G3ֆFP3:Kv~S`5ϝփq1=qܸƂC8^R ``b 7l(6Fq;p{?B]rDd|6)R:&K^pvqķ5O'+,<Qvyk"*.znOrH"{9�6@\q 6Pٸ2 SKz`d;6p,kmGa\6hpwPX{1uL>t_̺=I;X'Į_/�Zz*W3=z#(Lm"ageq<(XaXI: !=e F< 7 0 ca4z25h{KF r(1[—SE~EڴQ1Z6ЃQW_ѕ oCpLGD1V)QI KY�x'řݑ�ŬȼM Oq%UO*>:[K ]ql*Z_Tq>VG7 hlft_j BXbۢŒX„TZ{F2' nM@aKMm IK #^4Xݘ /|Mvx W?aG/j*#LB8 ‰>،,.u�0Y"Gkjp+%x{g}8כltjwJwgp;{󲸉鄑 Z5wbIlW,TWUXj8#5Lu9(qkdB́Py] Umcw0jtTEcKI)JcgLYwu8`a}{�6 �L fռX(Twݱ-ޛ0.I:;t-wpxo|k4PtJ0mL&G+OxQD ٢ epOۋ՛xU(XEH[1Xx2:f!y:\_2Áisgp煮bil1(H¹lRgƊr7P:,ْ$,vd[J$7[\ʜJ3cQ52J5bZ\S~U[aZ; Bxc3J̵dI3v[ bwu<nn{dͷX_ <HYqf/;I3֫ �eruYaޖ恂mX3 C(fw"~?.u CVW1@boэ2W,W8VMedw+ۭg她@J{['!|F>nA0\(Vn+o|ӈ GMXoɟN#+n 5N ; сh(y:@~@:v~TƠMDFE Hތ uÞf?@lj+1r0nA\wRr]q.F!vu(560d rs*6�ޜp9!Fҽ9[5GY onm vVo7 T6*cRI|Si%3V~\)h߁ыp.72,aAm{Q/aMI WÆ3f\kt1R;ǤLEzANZj2EGDmw@.Ȗӭp*c0miTC(4;n@ɑ yA :Ds 0;XsAMlgbtzu�"x;Ɓ^i@t2B}s@#x^&WV)6 r]ߢ M"^ӕ4W<6T,@h.YK5\L;F"I7i�:S+Bp�1Nzf Ӯz tixE)'K!J ?m:H6p vL.=Sg,歸ه*5^J Vq*�SPLpqŬ|߈"z"~cuֿSZ{).':x76a/0H䘊b}L&7YTV͙5T|8bߝ�-;WuC`bbV; #!ro'K FI:�V Zx5<)2nhF`|txמ,qDp]FW/5TQT+9UdPC]8xz}H)K qLaK+" b6@uOX%[}wer 8<†5oFSސ={`h& 7g-4o/!* ÇEDObo\EscN %%i1V~c\FIߕA?Hnv4Pj߇(2͌9k"`a7Ep6[vf&$GxvFLK}I" 3 )AZ{#<Li+x|׭xRlGy;Ind}?TsY$ZF67D4!dᜑm<e z %>Ywx9&WtC~3\?t A}>]a=a b@'tJ(@s;�^㈄G? x L[1!`kCq\;_`ҩtrYq ~] ㋭MHBre]]G7sK|cjf4k7Z(Yo#k\qC4Mpa(`b xj0KQ}.&|\%7i"o�>fğj :eQKOcffba 5D�eE`h 9҇wނpq�X̕+ߚ T}XXe>H\+~ c(xMkB8uRBP=+c(jLԬ[x[P41򲘿9GbDpq\,ERixes~H9*PfI3X, sl'f�kyǘC>- y(`cR %kgnƮzSOyU &85�KゾZ_tQCm)6*3SG℟D;Kcp@%{�/ni|7U'n<I<ICEz&qnlYb"Z)H3 R` x)L@k+! .9EAب?̪ 떸SKeF_43金aY/A9Gv*EGu�qi 6]K_BL 0/2OLJ" 3w܈Cy2귙QΞVUps\ovg5Aד$ Yȭ#f3b"ZakS0=prDmL8I=׏V S[% É&U\` ǧc:gR}޲˦ÍtvTer\:8!ɐH>Q">9JpHn\鋙Yql̻xhO'1f4{T ?#^Op*+^J}rN#[Djq^ȧy C"XG`zYGW D= |qDոP?j9pEÑ~2M)'3:b*WfK7ں&iq.5�د.BN{F\2lJ Ph\ l)y~qS<cx#Lw<fX Kv2O? m:NBj9@3Y03t=݈&3]̺)râܷj.^kPpLy>D.o >ow/^͏O5j7I: ;c%ƥ-tW%(!po^/>F**^ғ]}eX W/0=tl 3`ciO EkL`@Ǻmb�kb=F(ŋYѭP,dV.6LH F'b`0fg8@&j3;"tIGpԇr[2DC$jޑyL=qo$Ʉ&jci:5O莖R2$~QE,G(4hBCZ"qQ0 +]Odэq0 $t {}[FyԦ6X#+YuW$}cyw" p,^da,ګr &nn]^W5QpL?|l!3~qHI1V 6RWzE`v@c-|n4z6|t-6}gR%IH _dX+`8H ^QweGF�w�SPiu؇?s(?-id {ZNÐKMwriDIg.aT~-&ē ig'2<Έ׹p sx ..^sg1fA e0(>^.m8 P$c'\| /Fܸ[g҆pژi=V ?/0 Pdr˿Eq _Hm(s78t# At|ȹE#tʑM:ԀXm'It*bb+ 9-D ݞ R. xGlr|I,ClJ/ b'`p&/ڝlb/\8c{E@s}LU tβp7a2sHzjeޮ>8ZF�>d p?@�ݓ˗ށ@ @Ϝ i-Q"٭7ϴǓm#T5 ,Qum+g R"$.(-d$1'?Rː# uA]�|gu2m@ZHŒYi+W,fLJ)�)HXOStH-65:P)5E2׋<17b:I'Emygi`W2C[GDn87pߥOTE = wVq[EQIXÄ=Iw O$r(iJ#e6WT2Pcn=r8q "J .vndXS;'6GS%a}4G_v;]0Nrz {-IJ h|[}l9G=|s|�#pm%BJW<S 6kH=Y@<-KLMzA=hc7 }|׺N?x%I%F%1Npq!zH'Ì*&HYLc73%{Վ3pě'h6TȟR/{ęR_r”6Nr5)lQ ;[J1:uɲbFPL<3zKPNǺo0J3Qȭxj{@g pivKJ=pҝ^^J椑n:Mv ߒm_Aհx\iV_9NcX#](&ަC4zfό(8!B;&DGTR:qϤ2浸C�~k]E':lsŸ3$'.(p0b06ɼg Q@O4ղlJ&Z؏qS&+$̚Hn~M5ucǻY"h=[i1vfKVк薮TaԎ}aXt$Ԅm}?nUR؉} vmŸV8@b{$C&wRd32,Ե۲5J$ iVCFhwh?1,kqPŕixʫ%Qv.ƻ >ե1'QFu 5=1vtҐU�c_2?& jIV5E\Lx䕃>*(]'j l"t LvIF(P{JB7>$9 <h*!M$sGodRfNeGɩ@D L*^勥X88甞TD2)eg./&0SqhEMyΘl3J&><Zx@B Pv6o 688İ[9悼un0Gj/74E(W^YA1JÅ|YiG\�;B :;Nc땄&lwJs%=+7><加B7ad B5\c[HF-]Dȟ 9)#$ѴyMS#.p�M+<y{ RM0"KxΈ ho* >zHWP+Q{T`7@`' 6spM+8ɠq[0'-fĪlP""�6*~ 9B+=o'A 1 r"l=Vx(R=N11>c!,; -"l4V@:6+u.Ž4$`C>EDM FS%N;N/j`"b7'Ȗ1rQ -ם5 z8 d-qߘK'&M~&.,<Z~4L]ZڤlG3#N Y 9Q֢'?-d~Kq rB@c(MG0Ƌ?Fp9L/WobAc$hpt=[59TmkQܕDBa%D9EiN�qo'mưL%vVc|�d0N3)?+~X]qy5O4|bH';QdR(q`:٤G?6̖ !ffM<2Bs^9 MO]:dRZ!&R,!ouV,5:krpQp#xO^FPEWbGqɏo6XMI q4,$It)2Ebi<#'pxČW:?&p�Fm^%+=NW)'pjd O^LX{f[ g"aa/Y3dʐ;4 Eǫ~b{_0_q\U�.*L)'Zk=˹+$,+.ʺ'I'$y[\?|CwR( IJmN59_Oʀ |tzqtt݃9 !1e~"p43iB _ç]o*I0|.B`yKܗ&yZ 1-^,"%2| TC8X*X_^ QSE \S8;mf/<G6k4WS:EW_@KV p?8/2.͎6"rvS〼&WY !4�5M( T:6wKOzYޠ'p'&X8 W9|  hfjJXOż[VPo:3.e4dώ!X#j H&S_چDH`_/dQ!>%" \0%ڭ8;NVRJQ$x}аE#Aot 2הi"wmJQ^J(']Z_,.Z1=$iqgȔk ?# IzʆD4D �ߑ-P1&m~#katvT[Y2fy 3ngbUt~&Zα ^,;x0WC&3! jo12<jKUZwMӯSMNWzܼ ަ/etnŵY<qߒw6Yz$pCf^`IAۆ WN%׎ju9vd0p-sF `W%]>Њh:Br@Laj#Tlց6lڕ,Kj~S5Ӑ*n>vGdN#ksX8\mgk-0<FBlw~um_`~w1x-%XnO3d o8MRL؇ܡzY(6&�酓ǂ'x#BC;4+~U.;[T9neePÿa9}dS(r / é嫒F^1Wui<߰ RUG.8ɽ%`%@:)>':]\+M� Si 2.ɛ$.dCFDd#8[5$U:@1 EktHRnGq*J^'*Ⱦ79MUj7nhP1Aȏ1ҌyN(a-m%V_;*mǨ6 0I?h#+b%4nNqG {dn&zΌ[v'!􈥿Z5P3j&ѕu,v.8[N-ULaH$jL"VB/$Q( ݀ho=u(HUN(8T‘܍#3[3Ahޒ6NOIr 1= f{Rͫ\dsS}Zp0¼$l|J0|xp/i|}Y fLJioQ:eɏBGؓ(=X' xq4~Z?O ĒX EA֑njCI|~7t8b#NrΣi\(hG9ƕmgH9U8%c5Ni->9=8҆`.`H wĒ6r[2tX\|ι2^qC8[aYY;&H۠aw c']=1ZWPY45mcîLN(>ʟX7Nj*1DNDHP][TfzXפ2V*vl \)k9Qe'(RPFKsR@9�A0zQ8iJf$=D׃hR d/X] =X1UG c1h-˰4/Ǝp�9n3%kU`\ aǩgm:>6ŶPz0/jkDWc?80G]yNl~tӑF@M 珇IYEGDhTh& VV]Tk]"ӣ?e\LIV-H]UXG~S~J1RQn%f$tO�qx3T\ǔ-JTR4wT1̾Tmgy:oU.%zibx$g|2NfqAӜ|M67HfKbZlt^Mz{]qwmSv9|tgzJtrQYlĦè3ϰ݇XKBwXe&gįʢ5_rf0Ń1P/35ĵZ0:}AY5H'GQC9ȼSуَ$]x%_5s}[mh'8ǩ 8iKvWbD?{KDĻ: x4 98.AE“IS>N"]iMʫ&ݤC_&lC>zҝ^Dݫt>Sx(9M@,9RGz 3ӑ<^/v2 AfD'n4֤>9-:t; '=(E`\~޲AhOK?LyYcImKOYE /{BY ],f\l6X_#rUp*B' @~չ>7zp _<'pj#hx:6߇>EpۘR(Nn_xaٞdSHt@x1~PNތpBxڭ3bG%i &\Tg&IQ\irI~h<c*7J\ =*wA FJ8N!'23G7b|ݩ|p<VWR=՞x#< Mtxul8!+ЅYzWi +=(;9郀] &ĺ+.V;5sY_@]ͤ�Н>o5OYqM Lt%[gVAO@˿N kl7ZiQ1`r*c<j9WF HP 'ͮbd䴱Ζ* KFpTb}ij#_G/DތH%?=XK"Q' c;5> !4 S7/cAb}wiNys8_mv# ܠ͞Fm1oIf6VqルNCF-d|8JS3Hى3d∧vY%MDːYhwlSR0·*wmu6''"U]v};SAHYqoWE$(n]ʅq^Y:f=v3i4hfEN&Nqi_D!DS2/lŏVE8JN/Jhc n0XzBb@JsdGiNhh ip^Q9ʞ=h.;hG"t[w +(Aq�_<LG i^99RxQ|9lx\,R?KȐ3:(+r`2{fwb);uW_9M(}i7=CUv WX�d(d-G6Q|7Iu|=;NNJ)Mp$E2)N8,-G>g7~c j (ŚTnZ$3bmqHuPW2Ǭ`6d{ơ=6߄+M 5\v) MGLqA(�$N;rTo'di&+5 8퀌:uo*TjX4E@N b!d4 TX)PRzVBxe&!$ ֋Q^]k5~Wǿ%N +4q|,(rY{+)YrI3b{+MjQiVݒJ&|.޴cp?Y'!&~E Q ->|X ֧Ga(ԩQO3҃3fP0_  ]未'0Dҡ[tXhAmqpt.aufn@YxkU(rvbO2REC8 Gez!N7wy]KiL Fh"aK62 PoB2S/yg43DYN9 v"Nwd`%¬wQvLP8 =d>[s"Flqo (h"u[i0Vxl]:Ѽb%t'5ƥV@Wcxi$C(qgciGT&CSL0ޑZc`xdyCŁ 'AoJnE씓n"Q7=L{H-YXLKߕSpF8jԙy4Z+iEbp "e'!e*-[ [wB+ڍPc :\n[^BCаo8qB6Ac/r&9dV<Uݓ_"#;9=O,O /z;+(nxy)3m,Bw:ʖ; HKyD*P3p8vq+%ad :  /^pqZpI+NC܉aIG}6F<uh'B|L3te88sۍ@GD4MAVpSAI¡:g!N:$n 2rK|#3M#`E}4Ky9U1[\IrkT<_ d m{b.16d8C%Ck5M_<Vew_q@'^wij.?~v$0AԞ|uι2&gTTNP4۳~q@*z٩J3Qa욨=t<iN}I 3Z :'ԉg:{br8i| ;4Kh=Y1s2V. `ȼ"d'dpcgBHu%#Y9 #Q6zeTM9sԕpI@nU}!eP`c8 n:cJC旓 9VMj"ָ +O�ogu.g@m8z\_HT38K"\MNoz6zusuoP><nar:gW17ng4\9%ϵ /iZĄ& )o:EN-b.1Kzp,훡qA '$/bDpCq|&W�s2UuENW|174٠Y9&bgs¤w[AkRT#V#b'lJI@O8VYjrn+UCf {<JA2^\ԑry9TqIն-^;q\J 8jpyP1ݙ#f%O?tG&40K �XgS8{eZ &Fgr&A%2讧,O u^"Ru3�B. ʕ ԶM4z̀C Ϥ,x kYu1MIiPWzǢd>7R89pFku^y$l]JGՓzYw]:ƚ;8e$]8 AjRmyܨ&"_&܄hL)Vz@(ݫ'ꡞpNp` ;Q#0Z 'Ұ:[^+ItFWõY݀;^E 'A ب}&~DF!焝p3ҜGUXCFN&;J.bjmY?1 %?ndt!^<IW%<=Vz.xDAeF.pNt=%rlx$C 9kǯHFXĚgs :VOe!bmBYNN( tbYY[%ҔXkl,@'Z`bdիU}*7nf7BNcUB2FM7Z)[eX.q)<{V E')%&F xW=Ǣ&%u\6/3ɖ.E>k2DFz 4c Џa8*Ua%˟Ag5@ӆ M>#0xbvq ,xp<I�h tEU�#IqmM�+֐ʆ " 1^ �V* ;kȴiJ6et'/26JV2u鵦4/T+:>k (~p:`za'[BZ@YEACO9}:1vPߑ\|52 EzX|JUC8Rj\Š}-B F9*xu,A L' ~ -9bXmd6~@vH0&|Y<saZn 'i8ywz-<}EF)e�R}Xy `O#d;cS}1aRc�5  1~@TmYe;b !fL4hk1N#V֯5}@`]$#VPR]uw˨zi3 >#bdV]I7C:M1^`llwgvƵ=g^vain,<6F#ɒc!Ti�%(TqZ$Wpps4<֠1:\pV`P6}gQdI[v i8U&ZQ$ьNu?d T'qdX;ba$EDҍaX|4ۙ�J 747 /^-5ԅPB<ޝW^)HhaiXؖ`bEx2쮂ο4r*)N)x e D,MVH$2 0"k8K:ۋ̋qNN�s7(AK'SXagd4Cr ^d?62۵u5@H?! h=-7�) t񥎏t'dIs"8LP4mw7#P, @D" Lw;G*Ѡ0@螃Bα)dᛒ ~\x$-'EÏ#4XbckS78k0d.4ƨh3I}eŐ-9}Ʒ-;ֆP l�y:pbo߾JiЦM l=Ļf-9FZBYǎAqઢ ϑY5<h$Hgrĭ0&:Ibҋ[ hdKejIEgd-o7J( w,TTa'Ɉ6U$m)g~]GXq7Vq;q.:Kl8R"Gfgon>= P"D B,O<uje㷃\* !'//-Y֓F%(s<FY)t;jc(x&aXkhBלhRP%oN0nz˓1!3uÊ+\HGx!d%_=M 2=҄e2VGO}!Xm0߇Ӂ7o8J$Qi1r:it _,I?ȬSwǔ@#HeVj v, .r0ʽ' m&Lyl?%QϠhjG+3x nE鼟Po0dxB+(cGbEM+1&Fd&L-](\g{yrfQHD VDHZ1#= Fpܫv3tnߐ̮'뉳Fz.`wD7]dw:}́#26y`TZ<W /``1Ԥ"}zJѼUX44>Wu{F]RQA_W3tp�D )+fi<8SaEO(l`և(w&m"SdЪk8}Pϔ==وQҸNE.!e`XMxOi2c6INbeD@-QE>U�HMƕY3dFy2>2NAT|qtԦY"-q*=q}EvCeK/gQqG-^6Ma0fMW\Re}`ގߚ/_E03^A]^ѓ|1Ųl{51RqV<gKI16).˻ :EOTSn Us7X(VGAW"nrAل>vZ FbyM`(mb`1.280 r>vbqXuո1 `n9y/׵Rg.bZnDP,fbx9 IΨ=%a4o7YŒfH{e33=R?Zol??Xьi/DHn.FGhZ,";8jʵN9K5c\uq4`v> L/hQB�x{3"xGEyˋ_Hc݈ߪ'N}wKV-$iqos`'Wua莹Aq |?N I|n;*8ΰiD]elT- ,NVﮞZ?BX'!$$PݠD)DTv2]T"ݑZhJ {TUŅ !#VSwꖭ ^̃dHi<Up&T.' HƑ"I/K&  !6�q\!^tG2͊idosA|R� pC~''iû DЦ(qCO-I(Qtޯ⬷ n!(d>w#Tߓ`9FKqq,qm)(NKS"xC 4"C~\#u\ p7H\E ti(ec|M\DgZ.2 Dmغ**1]9O$qٱDUR[ wr~+ 7+wQdពX,u>_+!de2\WW')ҸvHŦ$I7RFɻn2'Jᰗ_KwǍA<vg d97Vb*0MgIReΧ{'B~G$AI'fU*\RoCFΡCGޚ#xFo!?u}u-3Ys2[y#o=j!}̙i0}L. $)q%(QLs\ Z&H^2n Q\MW*=1P59ݚ|� 6hTOBC'o" 9Y$fF, "o!$G)$p8QyPj0eWk=L$.De}.0Sz Ykܐ*nm(`518+  J:c vTraeF y})u9N=Ėjd#p$W0l) [=o+(]%) r_+N4B@{'ᪧr0n-L0 RD-b\"PΫ5ĥa$6hênN)5�G9TC]׉`܎ʽ k9 mOvP8) S"' XPQ8xx\se3RGP:n¸Zʖ$IBd[ܟ3[Ȧ7ԍDc'5*npit2&<+ xs u6d�iT]\=1aU^^9*5#>a.%u !#N*x^/+Y5R2v4i g85h-_\1(T, kF rzJڐQ ebӉTbP,KY[F+1UMN r^Lt$yx�Ef˒F1LBaۜ2f>z͎ndtFs=36< O&Ia 9#]+YI܈ GJڊ*VA6F{kBX$e2NMhqb֑94P hLѸ!ǁbcFExn6hXsVOއx{jtY}C\%{yʲf\N=S?ii|EIK?ܣ?kd򞮌0v;,t]/~) zE&t b Bc(s&MsNC љ1&OTzI]rh&.8QZDĸE԰j*2,�TʬZLPCpnF9GHSsw4yHۖJae:A�mlK>r9>M #.$yH:-SekvF{ym8trm:̼MDq2;+Z-l$.Lb+ZP$X֝3Q;0D@ F,^x{,M~ÎᾐL2Yw(@1P^�Dj)o'O@Vbw%UNE;C9<Qe*0 sa i8,/P2X%gfHRZ@teG*mIVW d.hK,\Lov'xtNܨQM$* 螙FA\q#I5yX~@"@}ԇ`0L4}^<`E= u6 pSN }#>~jеk) {Tm~ z=]Pvfi@ߚf9-[GJ �ws܍n3QX=-DېnX}6|~R+02 "^o hέIDŽcd:9R߶? X[/uL~w7^&dA}UDᆅ\cH= ZQ&I^4;{}z_"9$qf0 l?zafBXf#php'CG75W0:tF"]d҃3ppk$A6:% Ӊ2!�P'zXLv8D[`M<Ҝ^1[n*|IWDon�orWG B�'h؏5xh' V-(Q2&{B1,8 CQ >bHRT{dJX ť{qctY7yo>6W6VZ$h C^Y wQ KkRL %j+m! .CΗbw!7ۖME}@PXpLf]S!bw4,ȖR //<B0뤀Yd``�0L$p˸;FU2O#ۮK%v!]Τ &I؜nIDJ9(hGdLY/t[(2Mwc d"W,ρ' LԈ#"k!-caSƾe=\0V%FJd6P+!>^wY sJr5('BY:KiO8(|A,u}s0e4. W4] .nXу`cs,3) -<P!*!qbO9 90(bMUnŊt�BYpMIzY07FUN $?8苛QcD=FČhqÇ|* "N-O,}1 ֛v{x&j.- Nv qCk{8Tp<X?5L$;9rVЊu92lgzPu6m"'[\7Წt1T0HSӭ"֤yNH-0܉r0+"b빺L~Hn<|͢Pe_rvu[Cϔɀ|2;:_~*JySH: TNe!f!C�|SPv|R02'*&(Up},[_I- Ase֎J Hy*4`&>~,NwI3C`R)^\ƅiϕWob,Bq .j%yZsh\5lsӹ 8¼9sO)kpZ$0hn#4:Mb] O?ucx [XJU[߀� ڀIcl[}P#Ê=M25:ň.)OwiL%SIsy15+kr1Mg7<}oF6 }Ħ U&bvDT#eЯ) eĺhϤF 59Fc5*dm+ZT ƙieό$,_G@&}4r~D\Uo+&?#E*xċCxtmB|t {8T]PϐݜY| πSV'[vH<DصQzrˇ7%;)_ + d5P<4u M#8J ME~ݑAt>k@6Ժ)G'Ϲd2jUf'ݖ{[Q"^QN*7ޝ6^t>vLh5y]Of": ?NB Ț֔t+>^ Ro؋FV87 j lא> р0S5o\qI=:_/SzL|g8|x Ser>7<˚xb4Ѳk\Api <50?<;Č>6+$!Bk�fWbR<M2I<OI+H]�Y9k7?ĦVLzqd:q)vE t@OQ i‡%IA |7&w&sf/#bs0k%18xǥ'vA5f`jQ}c>S\≨Y\[_c. ;4afV3ĩU=h' *))- ˽(W ^))4hrs.>M٧< YJ\GnT$<yה W<Uq\݉ԟK_KBghPas~5y)b9�&}]t"T)EtHȬ}Eg"|˓cp= JF5E8<!IFzmr$ݽQ.  VǀtF!pzѬdps`�Mp+ lWlF'0#pDiy?r.Ejw}`_Ȝ w2>\p1?K:/cV@MBJ)F @p^ x),EcwQǹY0ѕLW\W3e76]S|bPEwLLire"1_Wa &hҝD F#;&NZcɓIj|@(OM4fh(q0yi* *%QW&ivƂ1'p+nW](4IEwǓǺJB*y@怇xT27Y bnKLVo$b`ϕ%+i(U$~YJ꾩:zQ0'*n0TZ54~S�)Bi&!Qqz ^gNsxSHu%5L;spRB!rArc-lg |դ?Xj&O[˓3 /IVdFSt 5#Ie@]ՐUSZ'qa~? JhU.e\=T9?5C#"ޱ'H(5DK'^x2HYtv Ej.?hVtfNs7^<M3S^L \/43uMF'ȸ$PxycJ}pE(\cQhd"VrNՃ=#OIGaRƋ ɯ ;©{< q[4^S w9 =J凬hi/{+͒h~Lh!hBHjo2̏4RPS}V̌ws{hGj͇D!w#VDm8 3l1OX%!|/s^XYt.58YEf8l,v[EAAw׈Pq"n&g2\sm?$Mq-FN r%l*KmWd0B)k.kM3[ry*&XSu$L\ <%E٢cO!"|r|q y*(}1 4(#U|z6⮼iZ+xPE>B\w逧DZ/ĕrq1؊}}JM.h<b�%͋--_0RX31�@'Lʘ|S6UrR[m%jB DK!66%/!!Þؗ%\$@W^>(i=^tfbD&Wp e7nDTcSɩH̞T8=F #̴ίx\Dl<)Nr9E)\3AAL37 "C)OaMDO}["?Iȹ%[1N@%)%|X%n[}aB_ ON_qC rՋUƢ+7 d4|'gbڲ"8@PPїߐQ03C C) 7dA#љxG` J&owwj2Kb)ܠ# OJ? Yh/c~M.lP%.ɕ� N'YUAoA;%Xbxn:^tzL.Mɓ%&E~PI_8aޓwSFLׁDA{P)I3fM V1=`&M9)vRet"B�}A89C2SC#?O HLw푮S,J M|~)r[QjS!N`Hdf4/A\­o�AIu%e_mk9-ka)9L؟8Ĺ\Kk3x r9-O:Y¾S3;ߚ̪ B6c� 6q%񈕈5ODdӗ'Kql]G:"A?FzQVAApIxrewGTvVB2:pwad6lDZ+G+T\n<O̠~b!S@W4<_҆Y"O(WłGړbt7|(s؎caC%so5<pT\` I,;p,9z$PS]@"BSs :Y-qҰ:7`�-Ai(\1&"3ђvzPBR Ezr#q;dO>NHWJXʿisjSD 4�ɔKiYf A}al}|Zn-ł-Is/dsŁ 7|d¸si6]"^s]Oe@˷tJq'PNU}cPLx=QtHsdw05mXMx{|>"σ� ,o:чAoy%#g)) 0,Ol+[g\]!(f�ѢS/VNjdZ&<qDF9]l [m%i~b3﷋(mLj`LQ37Ln45 ),_L<h�sQXE^==qpԛYj9@"K$LhqmFNS6S z /,m8"sty[V*9?rfC%ղ \@<;k#xxOܙ?D"Pn8iuZf8hR[Ɛ j@\rve<z>.2h#]`ɉ<8vD%cOmT1lr# �U~oDFqC'#ǖ ԧDlt.H`jqVP"+aG3_^ݦDMqm+z9jIrwO=b$"kZQc6r +S8)M -ؔ]g;Cyk%waFT5w5ͳ;ܧq[x`f#h̄rݧyq(S 7!12 `x }/)o"6Ж<qچyӖc2 ݏJ侜ԔeEFL|pr"R4?ZT#X' 8h)dZ!N7.mGBWlB%V9܁'?NU (pS5uZKvu0,rdz(`% jUq6B,B<dIŭǦH<ͷ@ !VPxbՒ48ئ<x,z6Tz;e2?*p5|%˔Ȓo 0sxM$|�͆vSc'$(<KAƳ7[P^&Q;~ŽetEtЅgĒpU!ybQôD>-g_&;(&!QǿRS HO ʍNv\rUtQ `^݉)i"6]|]NFQ'I)TSb|Ph߰ h46Cp\ǥwE\UB7tb&xpP$_5a4>[!3KG>x7F!cz%Be3> : `dPk&"q3=lb3"V{RXй{VS#j*4N U ew.a`l, v=Nk M�mCxg07P\o LWtn D017Ot )t/nڷ<3V(( Nw2F_ww9b&<Ǣ?OAx?yIyWeBCOBeB{J3\n~nj?hJa u3B$V1y,�a(|48]:4 g >ԕ9Ҟ~AE5[;ʘAĆr$ tâm:tL/IJ&+"bZT@7,`/+b(8̄Gpv.Q9utK^ !𾆦 j+;%5:I<QK $Dyx`ϒgc Na4GdpB9LE^\itK,  x 7d "bX-7kL-�[B~(UE�$`6̰wE)U`'Xl|ƀ 1cȚ{*yc~Trj;>7?P7@1i= pwԏոh 7C"Eql24lVJxE $y͍ŕYB>Do û2ƫS|\XFcNUt([\in OX$4&NLp7#1-N8W|bieDOZTxwuR~eV>icBFFB?n NL]v0hNd(Ѵ0҆RDH�65PUSt2=0[.2`EJM8F^/0>\]1g4<f.xIS9w鄦 H~QRĮ=`@ n./i |R+wDr,p$S {y=PAʠl!:yvVE1j#|!%%<)baa!>r⠧�$)!8R*qoK<8B% @|;tϻu4$o}bm{J%5Y)m;h�bE@ŷa Lӡm&==L㻍 ۆai"O/`mb *vlÁ2˱(hy & MyH'0Yd|z\qn'-`C@d'NO' |`'ć` bS'A".5~sd @<#V5&nELRZ8X;,o>Q [yL*eB'~q-(]w,O"]q |"tAz1 qcoL4<V'` 2q}F+�X+=; aD%+3YD[=9#d9Xg[S( @'G�]hag#=@wEWJP6dOŖ/8 d(SpﲰKwa0rL&LΙZ$+0-pM[0߁<$V!|yQ= ܘԽq2wLxJv*+ORM# \|FDta_EÉ'riR&&#ޅ Xx+!ɘb!m$\~UeYWHsR-'&,fN Vi&.k0cp^F,ވMh"<MމOm;ᖶ~j 处)5h5ddB`Бg<>`<DYwntEk-=dK5VIo-%�L =u; ~)@8[3L&ga_Ȣy c4PdV鄣̬Xl&vW +9GTR GSCu52lp=c(k [v| °W , w:h*o )|WbFv3T LV_'CW2ƪGCk%VhLvУ+aMK,+3&P+cO;|OQaD<,E޴hɬzd'ݪ+[WB,㩴xqUQ tH`I78'jApL;0!bGs<0NV)tTXd[2)N%:MOD䤓s$B``P"9!93MIwlPg%evnJl~'l I*)o,-Vrfv?N>O%#A`aB, bAC^kjdE\pc"De4<,<Lʚ4a*VJc2/ FOj̟AaJMe]sq8Qji>J+%�.u_[U,ܫ.!J˘*z/"SMax+q1g^�-pHW&dj"1u*bsr WJ*h˅,[Guwܬtil&tbTfx Wl$Ҧ$aD3 WIJ$M5^K'ttP,ʓEk(y9t|}�D×wnef!FWtJ)啷+J9^՗#ظC )` ]'ZB+r Jk1%4\S&:*Nr"BrUhi?c_x5k -Hӟb7n+AK9k9QJ A"U -0Fcړ9]|u…) Λ'sW"G˼(qNt%y3%JI . %tmL?m$h vU8gʹ[$m4gc;t ^ypH@ $92P" &;նB~:EJ;]s}91?ۢ3tL/ 3oH-h*>?J-\DZDILC3pٙkrh8^+ enX(a*mM3BގaA 3 &V"@U4<V:M7^1l!9z$ˡS"^ѥ[Zr7psڑ$1O1ZbN+uΤ(\ҩ]R}S6 "+esW0 (XW8zXjXv<A%I.Lj3/[B}*Ӭ g.+2lcɝx҉'穖/ѹARQq҈%-OWYD4P3hj#*=ɾA4SjP~�aA$ aZ7,jM8Dؔj a`%8~o\&yr0+�;KI*l?xqϿoo-fS ?_G{a}ű6CI}Gwwǎ[ot=s~:Rd`yp Yx�6>[bYCKlC̮y+|4}B{KU$swZ.uOu4un"( d=b2d�}d(>ɮA+2f\IR7*vRa6Ơ:RhE/@ܜREg vU|1}^\<γ =mi,aNBjJlB44 } /yKs|iw+X+J#=pl(k Sҍ7?;V0.ԗPVu@<8Zh-qS},N/Y{�G`h ]& pƣ=vE�N.|?I&TESRμ4W` <Ƃ2^ߨ;OړŠK톢{RXJBoܚk@݉I<A=F$xK/Ȗ~{`-xCG3Hlh`DrV=ӗhP.^W12/hDfK(&aqKI9|cT-+d  p]륲|7٠~-FAdLON>"<h;qbI=PJC<!rpi]%>ņli/.~gPӍŶv${; #3 xO>KSl .Ĵ C#9֕ZrZ~շ <$aZ_$DE+Vr=ɐRZ=#)}2!ozyI\ { 7\-[7&TeU\d$ ?'<p}g6ҤzGܜ'維‡cʦy}cWmp?65V;gaR*j@J:l90^6[Aʢ!(Y.'Dͪ or^ckeXWF[#sd��gڷ= Dl(urpbuNA_hIt lܭ^пVk^4x_?Lc�X.v Cµi]߷:r؏F+@M*^v7@ݛԚo R;仭T"ޤTA$2ӥ A_zI6z]Ӿ�:q4(my3r+g)ѝgX8fYOO%kr!SRAlQtP?eWߏ*Ӹ 0@ ؟u6+#T{pB e$֚8`b r :m cEUwm HSƒ$AiR~%,zn(2̅6EY+Ya',a\5ol+ D4C3Q0)*Ӷ[Y|1Vۼ=8rMZK}\TI2gd m՟_f<t0�J{3$4M^-x:Ճi7^e|a O8p~h[NA2~<[P3>L@_::ĈwzKs흛L4{&2[ 8m/LPRїd:NAL?f <Lw25gv ~'86v{$` 1|o%-Zqw* xe먈$D1nO;c3ڧ-(QsIH3b:AХ[e4l1խ\~XQ0*4&Ri r ][%{S둒~ pHxRGY^r_8gh-E4x_9.AqXлr*$sS{àn$"њ$v;Gvr3)+mwذp?}elZ?nߚ Wr6Mr<9頺'̱>YIm*>/ *-Pjc&Hڻ(qT?/É5�3 tՐ!Wqc\ͽZxT#@ @ |}F.%+~/ ӑ`m88AJ?SS^m:r:F8ľs88&X˾%ً[>XΩҴmXEH됡:1\uRkg}P.U1`#Iז!QJn\i)H5fV)4P/9J+VVkCAP|IFqcʕ &n̂b֪`@9nQO?,N3.KC*/}ZD/#hӉ-.UqX$Z>Ěv7Rᦎ}_^6,/ņcoP)^sz^"qO `#8 rx28K DLY?6�y;mӷr%[N0v1{' ;B}TMHYnاcTLXTpSz:-AQ@#rZ˸~XY4ߢҴhh+״UvWDH_%D-glam]cx?z@jat:u!שt%y4/M&Cc]ۊ80�1 `W)(oM@(_+uݟ7FcibXܰq얄5c/75CĞ;J b� 9L<Ӏ'ʛN;M釣SދX8 %:n�V4 P|;EWU}�|dT"P|wf(b\=b~'*1Ií#PBgb;,LLvq҃Ҳ0�5 q aM0& da4P/k9j]txl#Ә+TKfLAي!αG*>\1vy#qc8]0 נZz|VPl+jJ0-0R{k?JQ=8QQXy("Mչs1&�o*  .{$5+ޝ46#^<WxaP6̡c?ߣ`'Vr8!'8<zSL0Zu?0I,nw QT$p6[.ul'u-52VtVw ZKLP\RC]ŸVWٞ_V4M�h$Kc^?�~f@u"\ӸoƑg銟Eeo25vNQ͖Q{e$8ȭEˑGu''GW-Z5s8 ]t5^ۦ@gIJY ւ}˛-0[5G o}Riz1e1/lfvӃ0�R3ٶX^Kf>L#Y 3c`?XNN_i:u89TX:s@\.<H;TqE-LvʀKJ']"D} }z |zw `pHm)>_dرǐX2Usu4 T5f\,AT.˱9/ y�@<ǙAC0)3Մg1dՕI?2H`J+ǟ6%3{%ă0\4d%g3?h$h#ju}m@' &Hk8KÉ|4C"vFwSh`q Qs' iaTXG6JR%S|�9Ltm /WHrBR'^^%\\]dQPq c2 0}F9^W5,_9 fcC,;LЊcA^tLrohʫX<eܨV*x K _ʹd$HZb ;|%TIn#y?4RpSNAkUDٚ6-B[}5M3oE(poZI fVvȻ ȸ;dA@/„iLP˄gt3 3njuB󾊉6o,g2T}Rr'ɐ@ڝ=mHY}`\{bD(5:"1Zjdوtğ d2vy/ūbm9c3{݇Zc%8FoKg0#ġ⣼hclkyPar~Z@�ʶUAcstG6ڳk= &]WzXƽm:l PW:QONqrkt6c-2ڬvF�oF|Ta~xYrخ5-yWkmf)"ar3`j!%g_ QORB.Vct'fP7wEyN雷% 7i.nŽJ�AE } wKCRH.#&bCWأh|ұY'|x|a+⤭y 0SZݢ<= l #<tL*2V]XV'0Y숝|OU>xe W,&p_=`?m} zH1g^pgH@�Ug‟Ne"H^z[TQ:E;˵"Tq:A5oRzC^u]hq>)pKyf]w:Eig)"ٯsʹ (Z8N[QD_i ^%_pA8`^({I;pm}<HLHrn n:#ZrpJ W4~>D钧cbڰهQ7~Em ow?1Mɀw^=:.tۻ^Fm9z-bAj $2|WW�\I$V6;D!ihl/&xXΩ,,(v3lDPZa,P<͚;.M�v\msބ%O6,tq>7CC20i^Am4_*r}ǡE0܃!8O6-I3 c"ak&<QcF=ZMI«dփL%Ų_1##WQy'@FA%⪐8V;O-g`g5.ɠs%.\E6)46üF$sT5 {TMF]XPʶJL 嵝8 b MI\II {$?𛘰#mNL|s&bA{H+nZi$%FPKO#Q4ޙEV4.ȨV:(HQ!ǰvn rgZM& ]BI8te 'YxHNlxz/|5_T1xzBw'>2y"ͱЀ zQ8P=5wi2"SvF9f&'Pu|~E@?DL^-nJRL;*  M.vGF;EM̠Tb9Nq'dNk!\zؾD{Ip0D� Ҷ` wr?p*-tMe9ZTS epW@�*! aq@ bfcC@/`,i ʍi~NZ7ij3bl ^$Z5o(5nqfĕaF'B8g }YġfFMRx&ѵ۩` @7oVKDcj\p@LW9IG=lBhҕA^:cDN3#LG;a^ IlwV@XE9`,[k5?&Dc*(~}vYܖI0eioo?#:5 D'|V(S ءm8Ml܁y5F0 ?g췉BxJizѲF"2e C~ 56G;ҭY^_V^ TX R[1 ң؈6u]ç:^ox /U@#D(վ!TaLL{:r7AZ`:s'?U!o<x] VKcl*yriv|�JԏISGtëd[ !K!&|xo~s0kr7~^ѐ. \).$9XW]YPZ;fs,hRޗZg×Upn;~% 7/ ُHg%T UDv'u#&;=dfL"g` nOREZM \m xTb{>HLt9Q*2lqgSS!!f0\;;44,c ۂysgɡN]FPP] &qjۄ@$Q_!hy뽾HY6oZ0ėNB4)q<+ldHA +~C?_"tvzX�Dʪݠ Ex-6bvS[_h4Tyi\s11'Do>!_*B$H~qO|49뾠U} q>cWZ߼fu4AS+`U/Eu[nh};XKy!,A҉_=(u gAKAPaY|9z(wQeg  8>=I;7<N|ʘd%hԆ'LܒK"s@Xnhvi .r×T[ɷ/UO 7ߗdpT%^5p#kiJOȌ�+R<z_ rc`slCxy-}BۯS1pG?SQ45Dݷ܏G͓/cX`kd`VMuz}=#hk:.?eFc4g[iaQ-?{S!d~J5z%R'bcNk~h3@>2iOֺ*XMq|'S<nݣՓZ29j_}e3KU d*Sn(yHp V\ܿ(ؼ,Fc/ME Txe4{2`쵭r+;m?m0=##:;ŠUDS9ɨmJ2b~lxu�<ew�0;V:)l-E2vՉLDlH P+QSa3aN/{JD:CFqx3`vΕ殙!ԇ x_?\,ݗJEYn}k!FN"8?`zu#qx]ԙ F(BL=F' ]WgE~:˥$eǫd_ \ EztcU]0PP-qb$F 3N~,gz~÷by?>(hDER"�{.BB0v6wʼn TdsxN[BRKWGa*TFίƄ^I[meSejN V7rDo;S OP#dcH\@8P*ZF[>�)/!5UU#C(Vl \ TKNHr#O IZ l"ǣ !U :5an-hO O]'9x-4^ Q ޤX\+d38qW<'lփ;=GL)/㧆X:!jzS'W?wvQ6Ê@,L4;adj6aHV:ސlcp]Ik;03 .2oo6;bs0Y^Ah|kly_~;VZX JFk**MVDLBwB{?`pLC0~K])4H|Έ뒞5,UtJDP3 ,�NcuLBf љD>ҙ{M]ƕ4^=UeD@0? BUXNEI?u/xLl?sxP[_>5=2G>wffl m/aIiA@]i(l hP$HRѦ6 &hEP7bdy(MaY<L`@*.9bך7r{=RJ~#,(9=^�UH>(�HSI)fDm$ X._C+ڸ!2CK'fbޣB=xoI<h;/lF+;CVttvKaSdi�w&w4\ +J,چl+K3zIaBMl|t,� !-F+}W}|j}^vT$/Ҏo7AmT3Q0-Leyba2ЭܤnǾ@qUf}34 ׆} {qfPj<ErT0>n"|c#x)i0xۜ=X]=㚥#a {`zGoaA|Ų[~aǵ^Ģ-4SƜ|ҚS2./eUO,j%/քAo qtt f\3 PF=ы4*R؀YNy[i5wt (.|| 2/M/:!c._!/Գ<qn,=HqL?vE>СhPir>jPVXu9cf;X* l# )cӹÐH*q&d^|y4A>sv pCp3/0{)ɐ G0<k-ZX#vqT^"][i Tȶg16JVN_*�+q]U$^fҚ.J4/1N&հ%I4Ƌj~D#@zgrY71n*k9lN@M *jRSz`Kuc >rS]>b9_ &"81HfP2VD7</A1Ӡ9oϭ$2J}T~!B-4Ky# ٘ˌ/8B Yi;;Ul!8=X!2I55)LsM@o]zuyf~WR-\hTjl8 | ksv*ɎnDK* _dWuZsAx.ɭk+6% |DҴ`"q}O;]7t �A* ∵+IOEb$ 'pI!@. iIm΁ԕbsyc|];JB j8?(jpNCBCja7MwD9'"HPYR5H G-}z!XYw O0sMsm4쨡!{Eˏ@uX»4VjxFrչ,5e~{R>ugREDU:,+^IjJŘCQ/;"+r6g6!0֠J-]A*m?F9*V2%0I뭦g=k@ �b|ti.?ij9'*/QSnE2yL$/gR�^5a ō 1i_*@»"4 95 8հwMiE.ilAvT44h}<@%. 3KK'ӯC1ōre>M0&tF';Ɨ'2W[PTX ACܑZӜ�Ve1= n2k#mceF5cYl1|}!2X*X௵҆* ԬJ$#x8Ks2JžL 7~t&ƉS]@T)"c`u.taNUʗ#Lx0鼺eS|24ÃsR1ژDDcIHF&҉C;TNkdpOX0Ao2օNuofs,/==*8 QXqi =i$|% Xf::H7GJaKE攐&-! �~~!e ,fbO zQh^SSdZ. Om>Ͼyh�?�'74pYVxzK"AʵzYƻ0BAU db bZn⑼/(]n�DĈ`?}s#h|tM ɔU{8�y.{\ &`v> Je&.b &r"s߃7h4C�}7](0.?&ROxv 標%4)3Oz !'kt\7įQ}ۓ/( RdEم pAQad [Y�͛C+I: Lt!ST z0$V֓Rd 42*�[SI"uyf%ρ\.ZZ`\#3Qnfyu)LlN &>c+v/"=OOȸV<e6tr>hdNF8@f]Mjn4isSQOY#c?۸$dc_I8SKĶ0%Ԅ>^qlb$$:n �MDi+lbG@j{|l141YJ=8|jJ78w354% X]LWPѳ|{r:?4$5 $@:pA.0)I DKm۹( bY$iMN[L#$ɟXٌ㾸Ip|@`P`R0f_[\Yͨ0(%N#1BQC_y ã4W v@5ʃ|>%L�n aŜ4T{e Y%:K`"N d耸Av0J=v.,joI1R!:H Cof)YG=2<{K );Wt>!QH]�X㖌՗/ ;:,blc? Sktz`^X]O&F֧{]p"gF{,UCRm4o[A;Z4l@+23L`Ogi@wj[. :RX@%LZgȝ|$q^Wq0+2y?y'^5ݸn! EeMN�puA#-(d`]>/#NIq M)QCtJ<h[,8(#8A/q8,Ԝ~ +r: .5E�X'ݸ0=9 J)>ܩ 'aaȩ:L& =<av6kESfG}!VJ?irDJF ED0j'#hO'쐞 *%0~e9uJ9҆fJ'Ne59D jGq843n4y.!,a p饭yQw0lr|~_ F( @pqBM1BG,*_O(%x>)HY:9$g:%^VU8, 7^0]2hNR%Isn~+N%CFr Zw $B0KZcTA(<JF6bFڄEu#,qARN&(ف#,DD�ٔD0Cs\{b_%bb-wS%c^6:4Z +-V݃?e3y2Ie/M'c}n4Mȑr1u+`y  CmAb)gP'|# "<]tkD47z]EmeΈIKNX9^ڐ9L^T #}~IEr)lKRmbIڛ`ʛ@.IߗRmwl? 4豧bLaGϝL/3`{{Yo3͹vI [l%'& >Lta7m*V Rd\9Y]E mϞ/mTtKŊLG變jQr2! VPU- |Uڹx,7Dtq;ި+ QO{hw]t0K Y&X/M mް Dg ;>F/N%*L[i&Ab#n JxVh-MW�].q 7M}~614\ޙbG=.OPHiE^VZA*Sa|7]ͼryLK1ޥ|�GQu! ٥G<IQ 8�e0f]zAÊZ:$yX(|v2pGz7ٻ.MU(hR xX]q|xd sID[Bڛn/)Tw2-vGv8O/M,q>Q7ưǗE4Q?x+hK8U7?HFl 'm 2ac(|@oTҴŐ@ O<=2g]SEP7"ae 4 [ YC~Qn9DUX:6TVJ&<E@&N܉AEwb ^K\O�ja{\@絏f`/>­GB &.,:Qqsv{M-v01)Vaj08zOM HwlǖߗA6gLmfny.O}C8dҁ X!Lyk@kok*N hIES>oo텕"Ʉ}yGztE^X45R6.T@߭bgЉGV҆(O|pvM < q0%Iyv0A3^  !;x&mERoab<0{1BF?gh`+A}!C}$3`+ s@tQvevgmn\_7- Z`UAH1Z@XQqq*3!p2?zw̭I񦉺Kò00coC +f @Чlfmd<\/?emyx)v1Dy29fU=%R7/NNSwHCLyh[l`\jמ;F0"٬&cZ0VSǼ腹{L0N= RsͰ5 stJj.cJIdfonO>rD}Uv@dcG|cU;5B 慫eI! dae7BQk2Pl'fTyR|h9A(V^\_j. .Jqk0}^: L !◫o{`7:ئogxǀkgĦh_<M Dj <0 'V[#v@x}an[jl<X:O+eQ]Hjm)4" o{wƑ~{託UcQ@} 2( eUhOk(T֑]V|}$^auu?t8qxqTTmU` ۘDl1m_Ntzo1M"Zo{\Y\pqIFUa:Ԋz,֮)&2X@7}X\f"|P4q~$E^LB%w%.Go`eܲmaH &$CaYL7N/2 $t˴Nԫ X^@.0g3D+X!כLƛ HtVo4q75I1['*dΠXW/lyD}0gU `&t/+oxW̼jJ8cWb!ql|6]) Qf !y\m+F6 |.\騪U*w({>n, ԍ.$>e{*iǧ^;&]Dzdak08/Zu-=mXTlP+ cGN~J eૐ|R! t P|>~?#j,o=1"2U1ƥ[孔xȩswkqh*'6i'qx^6~&7 }+VT_y+Ashh֗ocqPn bg}4X{Ȃi Ź<^@0H�;\BwË՞ЗXkQ*ӛ}4ښ<ʉBE9y9vv2ci.H`4.uqQ㦆gbsT$vp,^ ?gZ(£L@o؇!Dw#K~o axa%I}}byCOǓԡhX%~g[{,t'ɮ8戯=&RȰVɒk'bpLuD�=)ew'*Q BJ7[;J86eqU%.]*?RS`}d*8e"n+؅l۾:&lQmj81䥋Jm1q8 jM?Peۛ/?yW XC|EsYX#^Jt8�!(:b>F &SmH„Xîauд|d;BM`:>[2:>mf~S,]'<S& uB#T~b NI"Uَ7Tz2}*8�N9:J1MXǾ4 N_niUc>zù_w0Ca;Uܿh[.c'lo[Ĥ$aQl(ņ qfgg샰~ã+`@tGKv|ڗE =H#؅+(T @32Q�ٿ9<; m2i\[山]FenSLfeUh9 `BD}øA&n`臉(,P!TRXR9xܳ8[k6IȯGQ\! RO5̱*2dlGd5쀘:8Xo9:(+! Hd&!XȺBיIb좙_6i&7 /x c;JK-Nvbh.4^(ceL8l9cm.Dip0(Y opVƓ (eK!J btg$|}KJ /ͱmMZ_7($B҆n>(!q ! [ @k!Y-qYpK~T~є�Cя~ vID6Cu쥁˕|)>śԃ6?6|0'q&CU3@nSv=l Q80Ff{ \aѝݢ p?f!8- Tޠԕ�f|hFnUP/d5343v$`sY5lk.v8pB [DvdW fd%=EP_lqBe?^4 *D X Sw{rclbY)S"J O}pC~AMm`g,rTDd)X#C=.u 2#y:ћES7(^N47& 8w;?~dʉnJw;IęlJr͒ !\HFǟ%</},"-S~ՐX!Λ> ƗcGic�j(]>)dzW]ppBb`~"j~‰Q˞ ^6E"y9'RWu9D=q|vy&@{}X^b_?G~xp9?IY[V IZi-]"m!Lr'sN6%H͋g(` +4N(DdSzk&|3OTxy,8\ ;Mr>NbZѽJ{H$3J~,Zև B#0r ؆[&S5:j;9#ث$5ZB(bML2) À˧ذE(C N*(FvBEo^&z ׾t\J3$i=6rFTtYy^ZM|i$JJ7҉g / K[kMŨѦ(a8&  4x81tX>(y+KUUh+ߺTRW 83Xz mRC0V�ƠuAos^;]7U/)T ĥ0 )~ CtRl prZ[,1 16'@ӱ[A2/Q/PeW`l4@.�L<Mʯ# PB)q},9D3K|R0\uȎX 0- /bozA*7r9yo{,ed΄@A(2+kʶݨQNyƺ AsI`[<,xxfdsE=V:kqY'ߠV)\QԀy!#z6DOI+ĭVw3خ2Z^KSx^0se.oRFGeVBTFPv~=܊/X|lp YԷ2h݌�ŲdN+(?nbŽe?ր;\oɝpH2nic ͱS]:3,&8֛bw6'F@j1 Nt}lq.snzB�(m8 ƽF_,MJOu0G0/'5l3c"Ux7;ȸG'`»0v%`BG:I @?ڥH:hEHr8h2xv@aé{qL$h~Ӏ?vEfFm]^71MxP?.ʠ׊9'ʩĐA-Q܉@kxs #Pv6αh &'ZBFTb@UďI ·BVG! *˜,`⌘5{V I.g'7i\a!Ԟq/CQ<6/E<D`I`"M 6C~!9S&'/8^f c2 vq!|?7\R! .=9> %>8L !-pU+{CrIً g42�Fr2 #Q98esla;"|]V"3խȰLuI-f8bJl']Ib! F /ʈY�s7zȊ۸C|O%0O"NV PE_hPIFz_d6, UGner-N ṙJZ=Lɦ ]غcQq8?2in>J;?'cQ@ }2S`z'PC〼Faz˥ $iݮEiRFI+(D-s^8lZ&[L'\eD2mt[fҥ+IVS0^{] tם,Q0fĖդVM R.Ai@\L:)|Ls"| 9ϒXJ0P˨ UMfM hu]' 3"qc_Y1) l^sU4V)$}[|F'n˚pvʼ>G{�<tĂtfYdљ a[Lq�*0STؽ99-QA6 +HH٭aeB=`Lv8]#erjYi˦GƱGF^` EfVjÖGBlON2 `1& :B,T-$B{ rCzW?ڼ,{LtPE Ʌ][' C{_ 4 Cqx0Cks P^cKd=@4:e\oՆ&,gΦI"* ϖj$)aUE=14#zI8ݦ݄;J(uD'Uط D/7[QVߨ+M 7Ha4Y}J{ 9UQ@h,^BO+NmiSD3X"]~": 1AQwe0e8Qqn)h9<qх{5#5} T[A`P~ElTyg)iG>㜶q͑<�̡ 8z KJߕdp0m/)/Q댬O+%j$JpK"k1$fl9GChl^xnpl2CgUe@/j;8a})[*-O"%++3m"B6δzI&3׻L67gb'4<DFu#]ܱ>�*2U$"ÉJT |w! 6Qv�knEßFnɚhokUy)vҫO70CJܠHn m<|R*Ӡ1YUځSg6_8:qޮ{$sti#b4rD|;% ʙ8w68L *{`|CҮ_F&/B5V a8(O^:<fi#d }ML "sl@xfk:+W61n_BJ*Uñ-Ǵ!>q9^n$+E}%ޏP_VߍZr1VSyF)EӑșXfGl}8щšq%Q#TV&Vs$E/^-F|}74^YRUťDN߯t}c4+)7=`-]q(F(ᬽ޵ѕHFս A@;gmQۙ*pVuadt{=_̣ϩ9D6*o͇19 N̚槄v4\(nK\R?Љu$B>$֣4uI&!u9N)#vIbY@̇mVWDyCWۮг;HvO%q1=NEBn|z2bb}Z_tTL RJN| q)Wv99#; 7v8�@N.j&ycv0e;3/6uDݿ'.eVNi :0V",�kOA,1:9 sOÚDtEQwdHbC S΍v7t-UI2"3ZRiG!SÀU{a욼Qp/fs ڄ%A6!9p lC"2c철xihh)'z+HhWXWmApQiPtm$NjhJșl>4$`w hqMò쇆Յ)M SQ5 pwM1Ž9I`#RVY(TߵDma>M^n {BcP.Zᮙu)*j(,tr|9<ѻ{٠,C-^n2yR$ְ&GyF} 1pצ(-qGM[/]mN_,n3}^[s<( PsGuaY6ـ7mWѭ-OCxؐktx967PWrw&orH|3CaBWw )"2Ku!%CWp|nxîQT(y]I,i CCX�Qep%=2vMZg@)zѦ[uuTn %uS'N ð&`a6^N Cxv5� +ƳRfΐG=;JbVy SwHLثb!\q1>djB`wIq]V1iZhCpK$HG) \%[2mβ1894{Żm *a7t`Qw8 n<g\v{&}~6�B[rO]gA+nx}%.{MdQ8t }9?we ͿpZPN*&8J1а9^8/]cM ԙR@W/3 q4(k&nHCvk[DI5bbՠA#cw)InnX[.o <d~E*7%͖8 w &NwsC}=^oUHQ¹z[ry(Wt-`.\g*nNHv'[>O`7H) ,NY>+ |o(K^sBGHtgCx`i7a!$\i�5u"Kѝ_р–gˣmq/-(rv֦gV]9orKbqήXQBW1H! 8K\c0M1GBgӞ%zuW~䂿1$.Qq.˪(Ւ(vJvؑTgfe\�y7ؖsFLBH<4C-'âz*1lHƆٱ)�m#L0Tr{/B ۭ NwӤ#4Fv-JH5x-+H6#$M-4 8`wld1I)ƲKj _@G�nI7GQDZVO 6pJ6הFu55/J}_UBB\*S͢bP:g*Etl_ �q)R�XP?rm n ?u`fGGjy I!/*yb+wÂ٨s´бwˣ\q!AUd$ fy&1qE GXKE¤H7_ Gn?M tG~岴`!I&Kx Y8@�V1 $BH=q 6>a ːe,!8}9{&j]n>=qU [AdFaOǟa_>M52WijM^R({QLܽb ד7.OX5~Hin+WV�ʮّH5A={8DQj(6Gq:3rQ_o?IH"7ڌP @ B4e 7#e΢gt]ۜg(;:ꠕ5sclZEC?Vc{B-0N[` @h@" 1P*@·!44*mL +b OK¢M˛~j�[Bw^&'QrFKIApmmxt褦`t{:Mŗ)B(53N ̏YACp ev |5'܃PQkIVc(bfEh@ lYl<' ƁZQ'6 |OgUu:m<� L1@�C]B 5&y-DΒRVZ1E_$gNds!*'8w)\5c}<7/RiU'w~ex, C*JDP@xɃWbfAi'*b5V25Ȫ!ԮU 2Ha&Xdn-"зElNbAsdI /0Fէ.j^hN)488c<zSN&+U"V%3*].R(ҝ`BŷSpDlddmg)-hTХ;[ l9\h;X!(K|͙eun)]M#( RoKx+ҽМ}\;=;wpamS0íꩉC҅{V&g,acqW%ű13)Iw%J0 9C(BdtRyMG 2zӼ{xa8INyEs{(j2`jL&S$>€xF+TP'YYna$$T|I:o vC[&o1@Q 8xzdKfTi|Q8b̳Jm�aTW$tpV=хy|'Vܟ9`LAWp&@qx]ƜpO.&W5+Է1 CVxQ2Dc4:\tm z1z+yE@ةugfئw$q|=%=n*_H% B6DUȃEAn(FM~V^t }JHd%'C xIu0>[A@桽(3&Y:޳&@ #_njk\&s�X); [p6GU:$ӍgHZvuk+Y%c BGNa$KȒ|op!.ZŷM/ '_ @}ee)mɦa׻'h[\;nKȓUe:zL%/֗ ϝL^s >HRs';NX`lՍpr0KA%~UJ^+#( %PDKɤqRhs0G1>1:[K}yFώ !rE{l 6MKinS[.,wYB7 IXivY>Vn( Fn~H(P7s,<H1 Xx Zih61n0C88MoKb,YrgE =G Hz<jd٩N@YO!)=|d@'G< %_6[0r+5&|(ީ2ER-=U`H0j a p0[-ӆv]a[)wJ|e}l)r ȐBJ)1Xc>zK*dBCM~7[P[҄f }9>.j$M�o%,[Xpr �!'a!T8'-."K<Ry>P>&tY|^ cAZ{%-e޷�Ƚ_1;yf$G]FUبjd&ytqB~7)MP N#j8.7sv xtDW{v!H&YGQQMbd.ViHy"8cuB)(<y$sm88!F;s1UC\w v' jlj]’ss615Yvt.&=IDKnz0*c/`ya 1d~z!D L, _(yuNYƔ:Wv!bӨ+QeRC6W`HD4s^+l)^C).ہO=hWs`" 3v/&KH/r@hC2n:uFo$P;Qn rP8/S`<dR0UZKhLF*C4KpBԪ2Ngv&. gz?cF<` "ЊTar!#.%PetvJRhVkIaW߭$0h[Q2a6@e@5Rs0sbӳc]KcտX p d XҤGh /LL> s7ԐSnУ:*tኒQH9Iȴ8?WIi#tWh&7R�dPQA|fOh# "!OYA-a2:xCgM.8e,9&�ug _e"9\BJxZ |:``.r]p ЅݝO LGxX{25Ub} Mܼ O0~yMĹ7-X*ס RhEs:/nA"4 t!V5+yK* G;J!6~$dITIC'92@WMdRx�t^9\u үn5GmGzDa 0oIO-ׅA+Ge# @&"bDTkB=>P �"\C #f~ m,]Ddp8@`=#G5 o4OYbbXr` :dy=.6L I4;s vCB} 9Msm~N$m4JcVU2`ɮ[(j>۱ܤ*D,Awg T+G: 4 "J|>g :8b3pgCf~(8Tlrfg 3ٝALp9bJ{Mf¡`fh1c_"Fb95dj\t(zI^͔Gw1Ŏm|%j`I8L'u7gNvj۳`H�|Fih \{ L.J`x?{$=xU]\=p82X᳸du"g 2AK3|#fLe\ %"JYe^t{0E5?Q tO@IALo}1F9܌?:ծ!|?Ρcj֎yNQHgoɞY7Og^q<90OpX-@ݹ]Vpbph+pNќELD{dI뻏x KH<Xo69 ZqX?B0G϶nBptlj=+Wg X'I ^ ~ّ)}7y,e ~P.e@ AY x|:r,A+bk]5|䉷ץN <(M1`zaGkchƣ)�q :s� 6i݁]DCZiy#"չ3lOy] 6Lܞ�AT2DK ~Fp.D2`, ض!Hs=Qݹ[% 1 #&тo2Pj= k V'9S0 6CS">!TSP~'dBeR!Yx:|0%}mэ6t{FʞTz|HnsE 9SmOUS4�<5>3-LeJֿjђ]3L㍲n dvL{ Xnj=/'&ǧTk:HZj֣oP"ueC]%cg 5%^;';6֩Lzxl;'@J[a2=l^JzF<Qg4e-LsqJrEF齆.i?(3 t7\\\7)#5 {nTc PGqqȳsR�F8w"zOkug;#4&'| PBy�n)E<m{FrLimIå8PC*Wz%Go9wjqgrF|eoHG k׆ c e eCC[1F.JymKF$7#%)G%k ^yV$Gyz s ŵȈ6` HO14qsP_Ot;"|>R vaؾk!F89F9Ğ}; خ'2*h8 װ{ZI FAgBQ֑vg"PBJއ�Q� I&L\ ;`Oq#c *rVTnX.2r$gh|BHnIA7! BV;Ӓ\2=1K"ƏCx/|#KE?pG9O=Y)(I}*D�t'9H/)<=L:Jl E.59RLu7Qh-b/fƖ)ySD3QpE289]c`ӛh'IY>),7a]_]|%H;гD\�wOzgԝ�\Ɂ+8k(~$q$&MW2?&5bf4&,VT9Ʉ^ItHE2d^yw Er7(}<ERb|h0O\܆g ȡdJxǧ;y.0d(2# .[1LZ(XldɺP_Š@|^g1�~yq| W\L<ny84px"?8Λ 0 A_ C0ҡwID5}ÓxIm)ixz;TM`}섣'xXK4e B`+9ygqim;J{YyrIRWג lA!NȒwopaá剑2Uk58qWQx9{`3CD籇Dd?>79oiޜ0`ˬ":FNb ݳgvN $+e\,V.}&Mg; aM'N;| 57gʖB}�-nKgмA|[%RWP3 (/,"O!rKAw{t5Q@v|lyKv9xm, vU]A{ AGCԸʘUp'g0> t'8*9Qc7) ht0YC5ŰV=)s{rP(8 p^}r5> ˂hp�ոwL[G6+vW;zK'.J#bG}lpYսI"6|0k-J�Էl2-m-½*Gjp=`;iIŮO 17?AY! Q7F<Neh0=IuC W ij'(uo|b10Pկ%`1JTC K<;h$dz m'ah rל.TtےvB(fD`M6ɤ1&ۖK�>6qoӄkDGT8ouia0',eCxO#kWd{w@ȅ#BKEHӛ'Ό`=Lj4sCb ג~C博sr""Jt21%|;!;p8S{ l7[ Xv4T`~#YkkmHdId[uO"ԀF vwP4ѐHvg(iljaCgi6'Q  /AS[Ң#Î;z2 hx#&GJlqCYC ZǍ1;_3lN;44e*c�g.r­NՂ ti2 _B#yjx�^x(`Wy{rD7%eäa@cë!lgCQDA=זe$lSV/~v-$g?MwF. c199֔ijC#*' pZm%@zW0|:9 =އHy8`Oθ9n6ZpL)M0pA Ta=A-.z�tN%<\9sofN߄PP/Na[tS}^ bp;:>K anH<ӴؤDv30tP=?e%;%L=Fc|F"ډgURE;1z.L3�i!1xpH�*>|ݛ;;MfV-kl.Sy e HC%UgPj2(/R3_D+kּ@"n8r w$jYe40R(gO~v${l{NO ۸_E EVx5(Wi,B@pl,DQmv)zlР@ƻ\t2k ~.+CzҼ�Ewi `"Y@ ec Q ҴA4mqscCm+# svZ(}d,1\dJ)&S 2tjSygbe8/5{|chCƹXFpBT& V�21 ݥܒ 'À:K8%Yh3AaFSM6l\>hYCGKiOpXfQT܅]m:]4oMCVi9q ,.M=ԟv7,K[.é BkZSI5麇N+: =;;tP?`Ιɉ=k葜N4&Q[ `$Mt4Ft'iΝ"l+@$n!oGħfd%P1tc]2Va@ʺ</m%AؖX4N,hAaaL|jɮN`�:U&Pbi\.DvZ]<^| Ӳ G䄈5><?id@$}XM JQG0HIE/>/=zS4�"dAh"PSc8}IC=c`ЃTqCl(tᆙ4MѢ xBt)Ff-L3?!Hmi1Q:PAlvgunKt"0AZ M  &!Ii"#0pkEf7R@+pvB~0gq$xc`nz@і�tiex&TG`C hq h%YZr#Ww~8&SCV%0T%aᛒ2Q?gy̧?c+rΘ;86ޓ3<iIb(V݊0sg;v{$z7?P"EPAXdL tX؏ҕ;}.j|n\6(_,߷. 4? 6%d@ɚ|v(5S7Pz){ =}xS ᣤeH�t}$mXqm<@^,:θSMٗ7{)m,@7QJ4"�"7|Ԋt٢XVWI"dW[$Y\&R5%!KIp q%=%O#Olpf^V胱 zønNfDXZfSs>C`JIzI7[ =r upl,zxtJÌzm?'xs"@ς*^ L3χ;$G:-T `Ds LN u1 ϽAo{3l jpsw\V\!`#[P*JTG+ ,n Ť& 0QdBD|ƎRIPZ0dc$!@sjLޕ E\Dhvsl$HriL'g5 G8mDONe Oss^8�9Q>O֭A/Z#2@c�v.sC&B=9>�+U}{f&`*Ae#2m[)82`#-0j@%j kS&=?E5ः8z_F7gff;z'z&ُ ޿Dǀ[Yێ)In|{ԦImZ $/SC`:`ZفhS6 #Kl mЃ,[lٰ5֨߱]�+nq!9| mۂvjX.O،J.5 aeU@ddm͍~&*p!Ċîv2ˢEh(o+�ӕ LF3ZӍ|;=7M"5G6O3m;XDU>,�"tO(}9ظvUsVD)lru>k,8֋d (Auo@>]}{N/B*;`0$8%#Qd(.-"m#`h/1T&Q:Fc~p4< M ]6x$\cg ,B ˒T@ѩidr¿Υ}/5";aTxQ(d]]75a.'^*)HD#VtA} Mj?p?q7\+j*5{a7KU$Wi~寣=]\f>s h|3gL!U,tFպ6A$ϒ'7~ -Mi#k `TvJտ0 /`U  Puk?! .kh58bTPByw# ~mXMt4A)=Б3'; ^=a|EI+�:y z Wx~=QbU�6eh<t,e֌`~V]k5iqz;,'mC[f[H&Z(Y} 5%%+bz %qPtd$F%uUka`}�/)A؄gԱqc�q10±pkB;3Gc2փ�;$͕ymfCT;Q,~B5[?Lm!yaUmfp 4%jt @~p r ƭMdŅ&tgwE3$ %DDuY,X") B2dgMQ}umq~}6**80}9Зs݅"EknT0]:YCu7az[Jf ޫ:NT%EG�f� �K-rz.bYE1n'8\\V{e4r;s+ƨ(a$nÃ;q@e]9 [0ګ>]@{;}kʺ6rN+h3yAb↭xɃ+H\p Jz}e'QP;$|U&a~bmZ(:!Y kfb\% H Un JJ<G ߌOkd-tʂ4BJP"3 bv7w)-|^H,6u<+tAsO)PԺaSlӀ I}ZYl!2&)ׇ9-^(lDI ވ&(D o*!RO7vX<;dCϫс"_uT&2A[5vH`30"T<Zp<fH�ֺhI"; f,j3gtmХ^B.ߦ:FǵG7@̳v) fP^e>&|Ѣtc#7x5ApQ`/i-П;$9Zy~5T``û= 3DGCܟkqA X4iEB @]LLw 述0\؄+Ef0(er1#سC?M(؀=(( p5fT<gh.]̨a$--K>U˫zJUj XePe, !jR;G lμz &�˫snO<578RMxat B sn =슉jHHR;4f>)πZ(e#zP) ̨0ɍ pZ *ȱR(K)wN@f'!{S*L[ӇT#^2E4O!We9Q*t`Fap!}i| XQJgR cMLe`MY%^|4wOPsggTh%ZT5e6X\ q<<8,|/M�NIU6|c0:aܝ|{O4HR!# " L"&)3ngh'G!.ʀΠBˆp7"25iP/U[pre}oo:qN h/sjbʁ/B + ?aȜA`:o'54`UXH&$4gbHՍ# a鮏\غ:A57H$OjxD&.lN2>ί $FQ h$ )B*?E;7hѪXv9~)!%XD]`?]J$`|BGhIjBиQ* %#B[j 6bݲ HH4% =͆^Gcr^`HBnU@< O滲 m`LNrY9`GGjLM,[v~CP|(-QDŽF+z÷ Y/{q1W9+EIo (>ЍrP!<P1]^OWdR<&Re5Ը@QAyȳ0PN(Smԅ͊ Mvʚq%؏--']dLDLxq֞Z=G0MGXv"�;:RH' ��F0ۅNnP' fORn EjFvV̶I6p6/R)iO>V&(9CND(ĪȢ_W hHur})ić+bE\Yf`]$@F}GƝ¥W^ft|鵬p䮁yY~v&jPiB6EM꡴E tvE$Md,1;Ӛejoͳ1#<%hHҽ_D C=̟6�^A$5`sHb؏140a؉R,7H:Sb"ɖ4"AIrģHĪMD/<6A<c (fdu�i$x1!y,2L wu]]IFH.h7͜[j[IS(-{H@~az܈/4]dcW}/81Bv$ i',Gs$A3Y:V9ÂJ E(~1crjMt�}WQdۭiN-< }:EHpW۔'E71)F$-76K0KuWBGC~"|Cs=Mioy;IV0W!SY|zIm8eAr(Vƺ5_Htzs08h._yM- ,AA#a0!8㥰Tֈk!PBXm S}FVjsKpeqc)k ׋a7 4eD>4Hz3;F*h'\f[ݤHk*AƵ#•J3-1뵅YM(phB ݅=OmLtnH~wJYe &.ӪvN ]6]@`�Csx:x )f+5m߆ =\^J, =s/ T;'I& ozrdE| kd,ˊf5M0D^Ej$.yS f.8VgȜ2C\.XӨUk;Trvi Cv]p K& j9cML| BO'$9*lFSFt(R[AUe{nvARc9BdNCCCfr$%4Vs&g Ice(֔S�"`P$5[]H 46*-;�؝C}GهTܩ�*мBǀg$wt$A:KAxzCP <cȃ@,T24x� ZF3'h*a:pVQh@fs+04Md$Db[QB7P ITѩ=u=I ^;fR:Tpiag .9u*"/"딝q:rB{(]p<@"QB_ޱoSɒ՛)ZrZ eYq sbo14^:x!Ni)yA&_dOHg9]jC|$PL)jgbSPߙTi{j"#d?s{dᎱOGJPi5EN*o �udJi,CJ&C۽I{E82@7+vr @T/kcގjURQ <FLbw]mYc->F%)U 6dX5tSE?pAZ ;kh6j$h$!uK; L&k7h.x!y�p*'-  ݰ~:0˩4 (NfW<X$˙\&UMj`;l)��b"{tI;3}>RqR颹,"I>Kp<Mߠ l[4{(,cEVb2ux`]nٲa#&5-<c"X5լ`<KLE<S9Te;q$o8TeJJ h^lXq4jd 2w&f@0!2�$sT(jQ)#? zAh:#HmAt?wWZ5N)T)W*3x,#S$6(P\p֨Cgl % " Fl g#f?k4he}(5 c�&!HS9řj THIཻGZ! E}>F\X`, N90 Dk. R菺c\yWҿGn_J )N!<zPz5Ia1*ܵGD ts'NpvYd*f3/t`&e: %//3Bg6܃ӡq`Ito/#fKz6p2uqWJ _jVm=Q!Q EF R=$%*TYFqX2.N^oM}7$ zqy,( ^.O%A oƓn_K:5krm5/8X^AKƒ|�.h0qw<I=8u. 6mhڋ DUfue%͎ɶP8ɫ 2T8ns_s;r^Rlj PγBS<<?)4kwZ#Sh})2G,*q�x'Zddw-^^2!5ouUnCCp)Hg5Usqyen\_}*GhwL#L+vqCcjeR ܉xtgOh" ! u{/EX* %@h 7K8WA 4+#Ɛe&shI(΀,.#@|SϱٙsDw!Cdf׿de=vhz}D[0k3ã9.YfѳC;sQڸԵC,0j:֔ �9YیE7Mf^ ,e39Z ]>F0by5 ^}A'@N^F+0LGEwq[&qɑ6y7Ckj)_K XQz M%Y89160rpu/Z iͥZy_9 ʟ7ZGɕW�6sh3$$=68pv <!Z_? *~Ҙq~z{Bc |"rRM{  ziWT=;#}*Xnv枋 W i5ҥW 5IibZx@qI;v8u9;jM8I,kH"L,؂b.�Le1P^A5@˜ К+}fzA7jbXj+9 <[թ$.Zs=i U%G'٤QIӗ6~YCꈩzqNZ9NL@FD@YyDL:-|gTL?ؤ`my{6k7AhSK7㯉 ya!Ô~%OTg�O^SP;~PZb;]S*OrKC!cXa,TndALr=a+< X]n6P̷MC |sZ Rz]yt?VqEz2Ш[�Q桷v)FgG79*6vv`Gi-0bhSJ` N;d6B_N xsP69./-D!䠡^h.`rKc& Ĉޟr ( I=`ak.!kI/lR Acb쮀g=~A 5;fDWr*{o/�5QY[\d xjxA> )k&1%uD>go>{v= Cr�DflPԀBl0͡ &U|[m[ '[mwHbRrF+o10_'xp(P wb^7()yB:f}5־NxccѻQ:T>Uq/*i֔$J%[`C0x , }DfF*L8C`2YxY!@j;0PsUz QpvEDp00mT]4eɢ`ڌQz;ei/vF0O^r$Թ% o (8ae.ѽZb<,)27@7v=,:gU%\H۶Π4@HBc gυ _X$+PLY0Q`O i3<QgBLEib+L0tk1d{ ƔBHNswus<ךDYL=* 3BnpS aݙ+yq' ]SNS8[M|g/(v5zt 1EI ZcL!$RKpD9 (`}9)@mt+8DN8˰7@T CPfUJHNu#pfנNP~5Z'F blp6氕:w#g|wv8@#0V IL L6Yz@AҶ}I(a,A/{#9'/) ztbҊ 1{G~0E#)`YoFҗIțI=Q+--bwl<"t5|DȥӒE2zݻ3@+ cgaɤtp!J% D@r-xMHUPK+2`ߝv(!CZN`;+=#^b*! dR\{o3dF[E^wz܉l DƠ<k:+9-k , jVKAR*6 RK&xW▱7�"<0HUj͛2X ʬߊ"c[(i s=(ZcVgqS f'y㵝S` S&Z?i>ZS:{+ d{N*HkI�oM\"ioCĎ SG1a R2B5S<M"4 %0bJ%0G<hi9(-A55* cH}�&8ApERb(O]=&s#}&P/3,HG( 8DžjPBu`.ImIJSQPR3i mU-JPDKK�fa9Σփwx! г]ӿ R)B-^;zEuȽ'"alqM 7̗6M]ab6 lвj% Vsǔb e_;YzJ0lAZLK?Yy)W3a'aFja^! 1PN'S -uw<P2lߧhSG 3/SI¬XݮGՕ([P%5~RU̽L 4t3An43>0<)8R4k$)eړ”!y!ɋwthxHai$/OxɅn<L\ xꩣT>% O-dz3%#9N0 Jl- $ eT!{ TOʆQ% -B ^vlEvs@h؊C}I4j }newe5;@ YK$f 6T3(Js#*8oEf'E|7V_쯐kr(ta Kl70C L(RK$H`0] i`CI*q<oiA+??[[z1il+dh$ A 񟈲(_aȇɌIKҢ`=ods^Z:$drd�G3 +:AjFgмƗ7Ƭ9)Gh{6O0;*f/+F2+x_#wD;Pvh;QgA[~h*n M9=Yt6ȠVTGɡ*Uà{$D,69ݘe2[wgSWX3�@'b]rmñ7䤶~[?2atF'/sp"A\Zt,+*;D,/T5`W4,$_jvҤEzs(kI h鵧.ǃR~0M$HP$"9F5r8.ke_1\`叠I$$ł \Tcls n)!7M ġ l|LZ9Q}oˡWA MIW 0bHk*~ vC^ :`Z,i*#C}d|vKBoMY<ڻ?&`W 6H'Zӹ|REAҧcun4Nj@Y4amxP% N{6 [ILo$729Bd5׆IIę*K-nD-Ik41Hus`N7dC7c /�S!W~+_y_DUza !˨S̵�& Eq%2B#Q@<Lk9>.Cb$r'9%;Hnh ח�N+ 112T2Ɓ0w3~x$a jS "ɴ0 ap2,B� E{Z m[6TW +تiKE#�+)ZǕ2ҒC,}~3 M Tn^J.Uw2D*T? 0u`v`OHa)GOfp RQ%1+�`.D4Z`ϧC$q4-( /p UO;٘y7by󒄬o3F <,HDۂ+ 2!"d<3&(zl(@!g民҉pvcxjWTx~%!v@*YBJU6{xrI 26 R.+A>' - lـ$5Y5hX]IІ[:d }&;aD:�-v1f`{�+Ke^$Ju/`rNWIgJ{nkY*xg+<`A)5驦}gP&Z# T `T_Bxe'Y:HgB @8jtd(jl>wW gl!F*r\J2'"n}L+| Iq9,5z#(SV X' B>x`1+iqNf :G8u QL~u٥èq!8 7F|^Io>$,8 4hy= OPYőU; rRz*lfKtَ.YּDLR`pvw0gK`сĉ2\BH+WHo"M OhwU?UE gZx'?o8VswWa ^\QYgF@C �=7�˦ͿP^18^ؔ8:aȃ=Bg:fh )耽q7v$v1l,Q ('GALc m?)H!өmWk-fSKE\Lie6s,]pmX(u_AȃP<N X <$ЏE"Eom!ZJHǤ_@4\ nEAlfg3iIJ_88j0D, ~Vl[_)#9m>jbd3Հ<rI TFS$Ky"/v~mDzk޵= t%iw9;6i9Ju6CpӂKY;. {@Km3s I.HÐ A.~H�"DA) LL-(ۜQ&Ɏ$WxUQ;4A#g.`W۽/vdvP0:wNRk8XF 8:"<P 'tBt;ΎWkWa _fZXĄ| HS iQ۠zxDaa86YD)] ӏa,)KE\.ig# ҡ׆*Zw k;xF*swQe,&~  _ kv9BZ P#Ȝthb2)ez41.٠V bi漦KXy8@J~sX$re0 G>TSl$_D0]C\l)5�,)Wo0r,YOg�(TR˅fE.t^ UCq%0yI+?#<aX 4U~v<%`8R'*m iY[5)`qҟIE?B#aV #jmq2R&3\prh{^Ы,WT'! e6XYpCG:4b UNE̥O.q`LY7zII"`ȱ "*~r*t9AiKbGٟQ �L`Jɜf*X]{i OKo?'*^A<9{7Ҕ"ڒ@>;vv|64w<M:jH|rCu u ##;؟)- S'YC OHPh+�\Or\"ڱc <vvvY9M`dj_瓁eYAYJ8ɂ=ngv1]69Z=vv5 /j6O:s@0Y/e8JfKouD+oѹ"sia?0# 6J9CroVIBva$ >L'E3&G,;cTY2x.Roտ't)MT}? oGig(m?*x O0T<'-WPҔ [X=ms&jξ:�yGl/)4<i[mWp#Cz $L<j*@zl Nń)zЩ0;/Âys6>�yU4+W\.豔= N~tW5<&t ufU$."ON~+2䨿eS\ ]{KR878W�Z'.4 7. mT14 m7a $1IT7soֶE"_$9Fdq~ F7Ӊ0 4{yw9 0tS䣍A,nw|)gό- xdm<kV)7o@uzH m| }pmLt@PҙqavPdT_yaf�''xu5Dhw0v8W;HD)da8/o8\p~AWx<އ@� ޞRg_]F%Fdpw �hWhn1Sz g)"bZtO+XQҘ${jY`>df_qGV؇L័nho [ƏVHtІ >) >̍a [[>"yVtS a@;a�ж e^%:̋ŝvagS߅/3}; z癞(u@-!]vvAM3Fط8с)۾j `.bV⏾ã U7AԗCa7O QxnmJbK" o"D"Ǎ"L =яe9 9Sm<t2yŽ֐iO[mZJ781JjF~YX)QBqOWyYYjۊ!KW�-Z:rٞ)cSm=)VH ʿ ^v1*(*EH8j :7!{v t.@P_*bgr&eZШI~.lsT#k /T�s›+I&CTʯw?tKj~z>ѠP1- Va9- 3Mg ݆F[OMOn^|b$ҟLkW1Ub7]&mA@M@^/C 'g@>!Ii9{uNneV ol4}sPq^8(Z\ScD�8t(h6Yep^y@.¯!/`jg¸X!Qhռ ̿'"W3۞(eY�iłxϷ"@l2m&i~W@� /"*\uxp<cp\TޕIb}NӉɳ+dOMF?c{Q0tgnL`btxދCj`Sy7-@/[;᠅Ft-(z_ DV.I3�ClbU.S*44$|s0*[,OPaMǖ Qw:s2f \m(IJV/|Ci5{GC׾8a-4L)|,iTtoۦ:2YK!CoU`!Z-㥽n[^0gQ�:I޲'=rBSz7 )#^B{f 5qf-D֔?3=%kib]uvBJDCD[l_aQx;ޡ9ۢbD-_~gh#=,DLD{TK5n<xTD5̰$!u W5zMp<. rKR%a3hR[5#lșICkG$ {dO;8|ȥU |ӳ (^eҪ*S1|L;e oYԅ 5BF}φH"F>p tȩx^8S2,wAeZ#BR6x&~! ?A2b yְGǚIe})\6\,>)܈"fWMnjQuqZHg}ZT4ex*OP# ފrxhH*U悳nh k! F,'@7\Ͷ6$fdB*nP]󱖷<2XS$b:e(!7\Hy|` ڐ/ʓ€tyHM$ ~{RMKq@ۣx\'YQ%nn=TN M=a}6 Ɋ%وPYT/*qk'c0:V{ú7c�2u_@~Kt);7<A[hM[St[ %Zl~o"TKFSk]~R2soy3 8Y ]^cДƎjԫ8_M4 &KocX<HJ3r*LaO�F<tI'ͭ!aKFع魲=SkyP7Wyѥix^Õ*jK&KKѻ4J+Hr@ YN\n_`` И[x cM!H{ tˊ@ƛ"0-BPɑ| o H<!eh>OCqmzL]׳FKt /jőaGFj<}b>8r3KMpKߧԜپ@5|:Y ΕyPbjde�t'R f17ȍw(f4߭IxszhA"{1uj+k0Sf_H !XIAF;T;&"Ņ䜝'nE;"L|3LmO&*"J86%/5ZL3] EvsrX%G2;AM|5 a׌ڽчH6 #2"Ȟ$ Hͯ4l6 @Ÿ ^{C xuG;s"Mņ  )Հ#KMWEJx] /} EL+l}A{M#KDҷȍ]|2?cEDR[hQ%twP!Ym7NGl&Ҝzhc+U)3, LTl«Cl pu94#SӀIS-yB i$o G)L/һx#utŧiJ GDQߵyʲ%EK`X0䲉q,P&uT QP}1y/o"< rccY875f#K)vCk+(Khb!=e$2|I0\ÒO'×EwSε[' |`%==?e x[j�aO!> +X% ͐xT/el{GI6\NRu�5bCy%dЋ}8[.on*BdW.C®xg\(ۈBz VBZD.pm{i ~{Ss;7P Xeد b m=rP5"VRDLp>>BC yF3 eC ]09dejIe$IsZo.|zqHoeq8#v< N<�pe`248dR3K8i<BN$ht&+X4 @d0-%ok "/膨~'Hm~#뙒:<M['r|cxԤWN !7hUzRapHJJSь�=;ߕˑQ0?=:I95G˻)�N _9hX�8p=3pgX v~;aMO'%A[H,Lc{;)RèMV&G3v ~7%܉7-]9dM*5;D<0uflO_�`#ί%#7FX8v ND;FT4x90吲b8bH> �z{jNJ0ll B ԝ1)$#DL  C6o`S=%idz��PNk BmPP[eY&>[ @%96Ҥpȷj6(>PCJɧhL^1pd`Sk^#0tF,pP Ԟ@MYZKY2lweY3|ڰ</㶐f&}$Gr} G s3r#(rf 4tGXt2/ r\ȆL J,�jo p^?[\$bKVXB:~o IjlDm"jy t hf^CR! |vZ`Cah)+`֦B y $�pWJ1[^})2ݑ{6,kXԜmRYZu$*syGm< V? ,>ΏT\Su., 𷥕p%_|%+�dOyvl0:5H0rn@rb"g$QẠë!@ɻ؝0ܐrb2ղ4@ P:b! ڮ �RT1WPFWF'?[%y +yLr 42u:9+G&$S֟5  e.O`/cfL6N^ 1|uyySaۤ삁fN!/Z+֡֟Jh{x%{ jnd;C?d"f}Ɋln| ; 7? z6Xb[rJlƛaap~Nf|Ҧ ËCǡ댛Á:CUa6(SV@_12�CPrR_;o^:c9<+@фG0/8a8[ 0G–wlE>vakÿJ!xOy䥔_當/]GPm ]ˬa2lncĄ90"<cu�v'PΪc}4).;l'VgYs>Iiy NLC _ ` #z{<3F"W[ޖB`@\Cº}mS SLƑ g8K OJ;% *h#%أ!a/@yX'P̀d4r7ZMcY:nv`[}K d 捴UkM৵հ4 {0/4Z@k 0M3JJs찖s $Bs .@y>)n׻*iKS>�, D$q3-΍�mVrCJeDWjR(iR.z%Y'm <x){+~L F5RQU:7__H,JNSi$.po_%1~~zzJ@`_s3?׫?׫_׫?׫_k?k?k?>Xˍˍˍˍˍͯ͟͟͟͏˭˭V~~??6?g޵򍅜>_u|/.y!߀^|]Kޘ8?~\K֯K{ǏK0^7Trdo|߷ݟƽ |qy/2En("7 |!ǀK{DIę^|0?1Q%%Q^g(_,_|7&ʍR.Y.yύrcܘ(^D1Q%%䍉rcqɯ)7Bʍr#qɯx)7^ʍr㥬K~EOSn=+zW=FOS~EOSo=+zW=FOSoURoԘW;XSru!fSFAm_1QoUPﺯ"7 =M]u|]zOzzv_+ޓƵ=?.yW?.y_ݕn%]-}]c?~\햿.yWz+Ku߾}u%o(hUSKޘh_1nL]FHv#i7^W/K_Ӿi7zW=+zڍv}EOӾ7zW=+z~EOӿ7zW=+z~EOӿ7zW=+z(U_o7z=FO~_o7z=FO~_o7zƍ=Fqg_3n7zƍ=Fqg_3n7zƍq3*|2nq[Wչz5n1n@_c~\F0n[jkb%?555n%1wۍ_caE=45n0*w[+q[Zϻl] ~\yt~ytu::tu::wλN:aj~,9?.xW+x<?V\y<ryuk{ݵ>J }݅B_ } U_wկUoU?.xaxX7G<qǺ>c HY7R֍)#R֍u#eHY>"e7Rk)#R֍u#eHY>"eH7R)#R}#eH?"eH7R)#R}#eH?"eH7R)#R}#eH?"eH7R)#R}#eH?"eH7R)#Rkw#ew?"%0 ??kӌq$a k,YqۿT�VBD+4JkMk[0yk[VUh[eep{B+|޺VZk[~FmB�.Za~آ(E9V[?lqc+-�[TalEc`<0(lQy-0آ:;V[t crv=V[alѶ V[}V`+V[il%OQVJc s" l%Jc+-Ή\>K+J`+4`;'r!,`m| 8{⡐3uO<A"@v퉇B>SNvZp<E<VK"\gAw"y�4@w"l~+�3߷a޶eCw",{۲7 yne ye ye ye yxxh.^bمeCw",Ҽae.,ae.,ae.,Zae.,2����60K ����������������������������flent-2.2.0/unittests/test_data/test-rrul.flent.gz��������������������������������������������������0000664�0000000�0000000�00001446551�14670056262�0022277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-Ybatch-rrul-2017-05-29T143141-10ms-10Mbit-10Mbit-codel-bbr-noecn-01.flent�ms]q>b_%U#1JJ99 k Њϩ|۳@�lޛ|W,YͣO]=:_'voʟ=xo6DK[B_yzvtt6N^xW_e,xtRcG>CzW||w||tuo?#B8/忾9~y'O_=>>x|v~zr8WgW͗<WnJOnOzߠ՞^EɇN^]^^޼zϟ_9t^8:9]~rS^ϗwׯNkx76 @+?,<ʝ\>=}'RNןr>{˓'2~J>gxWutO=૓n8q'yؖu1G?/ş@ysO._AK~.O᫗?z._g/^:ӛ7?/h[�H}'g fw.ϯޏwkf?SO̼:9yy{~w,g3asYF`soכb3Xl@lfm~t5_N/7eۼ_~}|~9}cMgӛ7Ot|tW?nF6򴗛JVoW?]_]:}Oiӟ^닗YcSͫ3^qf6Ԁ;xcKw}xc!?9p{9='r\~y?Ȩ1ȟ~o5qZ8f7G>y>n[{Te-sѿg".O/,?w>twٳ~wO;?_O}\W>n̂w3o1ⴥOŋ/NO�ZCe6.;XSEc#o)){z ӊ�/zu~kJݎ5y2Ge\OÛі7/ף{?OY&㫋7g||s9Dg& ~œoO1OYxwݗ[^s߶olG{3~ٓaޞA7_ZHڢG]w(w7VJ>[v czƜXLG~*-}o?edG]A?Pzotݭﲽ65˕qSsst1?ɪ8:poG][d5RG}U{yv%ѫ -mLٽ3Wj,[n2%7%=zlxmodmߍ+Cʭշr(]8'$c#c+4ٔoo7׃Y^ dY'oHFi8&܌9_?,?磋? mslң4:S;=8F{߻~7z6p{`T'أ4睰C-),#rە0|6[,/^8?|!K,WM<S<ꏎΖG_CiM{FKЬ-&?axld/?'ϻZ x{4`NP:$op(%xJ鷮j'1w*o^JL}8+ahҌ v'5{!0̾c;1q6XѵGaK#g_0oN'ۋOj%s~^3n;_N(O-׫Ź<ysD#\`OqE>Z,<ū^^] .5/0:XVs-om|5h-F`+?+Ayo[2ܥË?y';;Sϧuί.e>Iyt\K'/]=Rgy -Ł~_.i}2~~/'G>~e& [c[7; U_>u9TNA>>GS/o<yđ矮<?}qyRF:qwY ʌKԺvVʟ7b[&W0"BF íA]`ĊGy=ȻtǸ/W,?SЭ TF�R+5%#/i>|}p8Hp^|>^;]pe_t~ybvfF_퀻j )݊]=cxa9129!NoX 9#E`+uYxXFt<?89J/lR$SXHv 6Hx^\'_MEtprp>6 g1n$N_v'xptdxFz~ru501GmP N9999x0mƃJd>YYYrr;Ļ >_L o\ʎ[(?T\|CisBP0 9!W !+$n=ߤ|?&~?!(7X0V:3F3r{w!Q~%)A;=A+odf1ɠ[U\Σ9999(:E?э!iFP/Z+r5Cxbo=5k~o;UeA$/CvI(b_#> <Ógo] Ybl.S'n<T[ OW@or}2ZKt/6C'W>M�<|@Dȟ$$$Z="n#ֈ_=a)zxwś6_}wwc_o|t˳߾}|yMږyfT<jscOl6JS>w6'<cc$;kw~ɷ7?'V?@ǯ31f<j)g0miϛˋe䍽>xy <Kzp7_~#yoGi&/W~ۡfhI;B=cKV&}<<>yȓGwJ J;+ 75G&Cś2'|J' b˙>T�{*P{2Wwï,?h-g`j_>/]H,@4X'O2Q>bs|6|wOc˯{MXW̃|A'98-�߀yЍy];xKY@ow _ڸIV)?Xm8'Vm/Dvw o~^WW\랼L<m{x7?5ó>f[5o>+�NG,X)Yd|uπbmS̀o>v[�&IfGGg@x Lњ7Ҟ ŷOLGS;6N^y+|?}w|tf6^ǿ}ʶ˫#FFKSKC_^mh_o/O.^O(Orj <ɦ֣'0~G39>obk$+W P{S4^rw ;f$b=t5lg'+^>Bok7G;{m4^־,=|;EpI[T[U]rEu_^[~̩;E4_Se_5[P%ok7=Jnv)=|�w.eBX)~̩@;"{7WM| M?Pu>5>.VoLUmۊ폨J퇫)?v)]*lUlF,)ljCz�m$/?~'<}N:-e[zT^~<wUi)3/T͒s:U_Ҷ7o_=z5Ei.N_:ȣ̘s~(dxݳ'_~}o1ûG{tq៏^>>K_blLMf6Sr"Y#)l ~A`0&ºdw"^?&lJƼzLcg7M$}^&R^׎|ʂw; 06Kyń.YL8Vxr4 ֶN&3ZBYPL^MXO=L81ɓ{݄Wf�J&\\hgK1Vh#y8oK1aNܩ> Zz8p~*"*Q+[mAo&]^h[H^wV2ߔ)gN%%mOE.c32=tk8 @.:tHڶ{v6mʾդ˶.c̙{ͤ.EVҲvr;&^dbkR!׸c6)b1,[$Fw&ԒVVZ)�le5Z֏L5NvT]f[R9fds5עӃIu3̷Z2̀nⲏդѻkR5;;9Cͤ\ k{dvl6דM:4qQ5t1w^Ǿ1fdu5$GSwلNwVp,hxqx3,lCm݂MxL,š쪎Z /ń#ɔ zr0/ɓMx#sr͖jP2];dX&em=cL8@\n&�d"q(#Ӳ /#N>׺.k?k&h`¹2jЄJcn!b];gjlK+9]enx5Xh!o&T${b&U*Z@S,5Ǟح*"V'c{6%^(gńc˕�u=7kheKԆ]V֧/YC,Cyp6ckʓWګ džfqQ݄6ڹיeZR]vg^FKR{ŤcYa L:]W3D]Ф*T;E72*ۋZ :tYjh\{դpv+yͤsGު+Mz먳=b)udoŤ˓aq桃Ik`^:;@Q�J xZrE1>:VTØ\kɒ9g;n[C֬qî?C}'@zA<g%A:vy- йC5]&}yaFxawEwra TQ\j)զŽesw K35Uؐ#%Y&:gÍp:TU+Rt9H>{Oʣ΁Aw-D đԽ1τB܋Lj=YL|B{[]uB˒Ȗ|B@EѵYNVǝx%:᪪ֵgB-i,kIX=<<sƒO݁ƒ*`fЬ<P=XK!tgpi3NYNU^X u5#Ih>|E7Z2I9aW`6[CɭaBN` KNE^a45Kn&ިXWuޱf4a KuؐyDժ{SR]v9{-R> `4#iA#3=M4km&POScU+ 5%Xy4W,*fmSVPWkRR\{\Z"ʺCycmϖ?z ZbӖtEhT٤z;&gդԲ:.SIԸCv.j >EBkL&fٲILioH񬦹d˸i B L2ZSnhһ\2ZV>=uctmo5j҉!kNzfҫlE]n;AV/S|_*ʽt"n"wWʠ8Վ&je1Q=o˰W쿞)ӫI' ͤZAKݤw.WOCl֥TL4qn`%IĜIՄvM :CS'{Э.'[-)ZmeIlecW}W.îK+\oIͤWfЭ_\&ˣkVd5e㕜M:0S2NM<6NX2592% ?5VXRg14'۹j҉;hF֞=,7^G Y.;9\ Y$K!l+VJ6@5+ ^L:Q"~ QK[(MzEd%Tk1.l5&Sa7դ2)͡dG&sE-ӉqWmk$_le(=<^L:RoQh;RZFkk14?o`ؤC$<&jU;`={3鵥ɳ{l& \Ti;dˬT>لCE<I_e 0bZj$IBO2h-& 騹L^:th-iw;тդ/ymrdn{keXdMwլwRbҩgRuW1Ցq%f(j. o٤Ck&:6gFR3Megg$krZ;'{Mӂ.eb9=y`eܻv3c`cW@2]+bI-W4Q- A}/c^["$z |䧳 {F&>rk5mv݋%Qڪ"4׸be5j0`[ݽ3-Ĉ}K@Z5DBǡ/Շ%U=Q|tqk*n%Ax%zI:H`I>r&όD#`&9V-˰t_س["cn�}5[jd_IUkF:\UY/j +M ,=t,;c,Y*s=>:VBNCR.@-Y@2,5EgtRgb#}7.�q_[X":MT=سCJ&}LHM{{v$B2Z^k,%$)RZ7,G^, =p6TZ_#�KF0lh16 >Dߨ7�SqTt&GީDW~X:Lj:qgU^ɀ#X2W`];.YZf/ U PMUScћIo>+XWg2jeu/Q|՚]ƺ8*]M@(4r]EFLߧxu/tq^M:Sjܠ4p׆7n"5I @2X+@b>5E•2 @Ra7Ukd*?#ՂGf.uy TKF t6 nt}g"ͤ7X2NFB|Qmϸ[2җg-Б CΜB3R)ɜYKF Kas[+#�KF tYLM+.גKkkf6䭪w72bߋ 6\+K Q_s g-e}I^x-ֆzдùCZ {=R@dYזFa+-e]&ϸ[$3M:y&&_WZK0NܖAHK R&2,޴V>rzdHAb(iQN,"iylK0*k(Nm%"EW[w0KD &Vv2se,�䴺_X"uqF,ZUiѫ !- ۰{KC0 ƭKճX%u^{ V(-TK0rDzv7R( #9ZBa샣zR( E/uwϳ2C\ek${xG.=浥f"]CA-^<,$&d) 1*6-°:ɝZ *-WBa%19Ќg ㈐9� CқQ :S}Î@ahmZF>WŸ揠UHaYe"6adD{EZ5asQd!h,5դל@UkM=Q^? 1g/ ЬU`Dy Dkch)F[VnBa,B8Z  )M=*u0%Qqo&IX߷,Ptu2ђ(|RkFA2L/4 N꩚GVSf*Q5Z]gZ]kFaxF@ƫoF]Brm}](Р8'Z"K.JhF1I`Z2!qg@ dBakC\SMzպF|l&ɠ^hdlZ+tmBKD0JhFTDB'@K+v_KC0Lʩ%M+eZUi-̈́)hNlhi.jZN&{V{ϔnȺ>M68tSKB@b^^%!=Ռ XI?;tyg959-@~u_X KMg{ :Q!\-D_~/9701GLE٫Iյ7-;3ֵy#h\P}Bh,V;>QBR.b+}ȗQhSɍRYЈh)0v-:[wBQZJXG_u^]vKQbe}u/tz]]K~6H:`] jU4gϰö.yTE֏ ޒS[%! ky> - СEŚq٤SKjSghÒ]l<.g$BCے-[VH_B$B9<ԻzvKB7-3G=AjgҒ* DI >z5 Wq .GQK,ϑ?9jEJ=hFNZ?֌QO=]dď6 1AȺ:j{Wxkt nGu/ީOJhI9SYJBȲ0YxT+N6|B@b5%Y*mZhRVkRQ=})dF{uu,A ;2RN~N{Ĭ" B/ 42_$ usPdIF$˭u%QKBy3LDaW2TXb,hK髭w bMMp pjyV%Pzy{֒%P!Tet(ԥVae| B+ s[ K tNV"6(]|:ߓ,È${@mmz3Y[z^%K0g1Ysj ڲd.K {6wKPUYdI.Im++J@ zӢຜ$>xUmm:Yހ-BԍiZ 5Z,ЛT%@N:j��3Y GWCBMAc`i >Z[}2Y <~LZq2:[pdQ(B,БjY7Y ˉ6rՊ%Ka!6Zګ~kaMz!Z(9#-孖ȒX k$MЛlZyV qHps=;t0k!BGW!Ї`R%sY ђ>hm?'mi(*YK=R]6wQUq;<,ɸKKoLwK}"²EjRYB=;tFN [ ea50Jν%kt^jO'BqW_xX\WDbɁ> H\ %>eo`OBG+gZs@E`OLլH*V)G%>zCo֊,վCCxK-BoWe`d [^Zז'6б"+m,ٌйekrxag\T3c#F"]nG+~SBz `W-ŏй#h#C.+-ŏ[/PW;dl)~KOum ?B/=5[[̱Վ$ֳǹoXkUVZ+N%b&\^jS:lIrCk%,^𹲱ؒ c7벆-I!TWؒ} PזdK#R}4kk%-'xZ?ݤhm9¦huu58+cK1#kkdѤip8Gel$3BgblIfԞvnIfe[�'\tKdF蔋OܥreK2#V'fK1#[r.qm#$3B x=L<xij$3Bza[צwU2D<!ML7`+{2g r.Xem|-AN_WI-ȐI2*ݮh"ڢylif> /-L2߫Z̕–dFPRQƝ-ɌЩ[]?0dF製Z#7e,Ɍ{g1YbR\zRdԹ ϲgkZX7eؤD[m[wfK06n˖^F�;>[zԔW{aK/# v2Br>_9%y4ZzA/†e+V?cC2}\E֯g)4Gг :]-sjÆe eC2R\bh>l]4 n&}KeN AˠVclT6žlyNZkĔAL}#M쐩Iz&kt{+&RdY Fِա†&Mg52$ym*76u<nyVMzgrVDZYnҁZW{2DꢝQMzDm}Tމբ!nUoObI6SdGkUg::*2ܭTekW nAΎ(TMɤz:lGOMŤ$V[ms{v4Fudƣ{dҩ2a[[r&6鵶I6 ﵥI!Э*+kk&]LubՋ9tj\Z{%\s6Uof'\Lxo�CPd4NdP :>j:t26zjkdؤ˹׶©d{+a$d#葉-(X ɠCO[\;!<tjb;j(O]VSJ0;Ց]L-RʠI'N* >mH-le֝^MzЉ+jls/8ѻ @%> I'^س *KUݳB1UTk1!+2hAv0-;0d弮c]ؤЌv0yդ&Z</Z#4{7RUuɄ f^zz1靫3K̈g IyRB2TSR t6U<*\>yxG߽<q?__~Y>~7Q#2_?jlp3DwcÄ5&<z:d;`wm6Emt$&Zd[\2<"3>]{c-(FxUyVwϭ/dZn3Ǥ&yB/WVFۈq6~[Е)ȱ.>!C*/v q6qt>Ǿ{x]ZRh"{ QSC1Ь&L`C뚸-ݰIzZ4@dSٶ!cbYEg"AZ7; &X cCDs'vvz&W'O~9{>|}XS,Ggf8:yRĨC;ptpg9:juBOG|aOgbՙl;qu&O:Ci:4qu\;pu&h氫eo~Ҏx}vÕL_G;pvggN?qiS||Дw6v<OgvFp v݁FL;v'; öã?v.;wjޟS!(MI֐[l;Jt;r+;pxj:;x5tf]v*6 o'Lj֍ע;>8d혔AOO )Sb=8w( s(ZzK^1ֲ:[>|s8w~69{u~\<nލ\K{h5}=M\oj 8W.Z+WK|+Ԍ1pMPoU.O,n#22W+Lԙ紙h`uz 榾GPѾ3@6k #y[1QO}j_X/m>cnyV=9 CvnX7 27 7A N7ꀐ 4u\.`V+0h¨^ b'#]fQimck.tCHHd{6Ȥ^`73#OI%Ӳ@IPc6Ȩ\gk8vz(@5i&s<2hr^(07X i5 M@'on~a9zuuƼFBMWh>k{9 U=ރ\*)u<|BS{4-]>GʑȊ1Chv.HBk< W8AxH}Λklh ={FOS@ E:Msc=9xb oFZ\g-ri uvx@7REBΛ&?u6Y۪FaeUeӸG1ЪSN1:ة*l-c)GmF:V,81.|Te9lANiܰz6ѫN5Qzե6uj-+hP1nk zoPR$L}CnNh.%wq4fu%:fb}TWG))F/:}?ش~oɂ!hflZ=ǨX(zt ͇@#k8WA] tJg<~ ujÅ_ݠ)Q[nsB VrIr-hQ+"�M! [c]Dm֮>XU/AV{"dFmiU7shN/tmEVQ8xO>Av1ڶ%=뼿uߦ=`nd~O"hԣz9zE'hF5:/ tkV(tG\1`!ǢГ˙+2 }Wu.ȷͫ6 [PheSUv0f3(tkAnWv'ZYC1w@ >zGZ<p+_4Ȥo ^P3jMpK)IsƔRs Bdp+ z" 91 Z-{ol{c� :D)nBwRKI5ۢ_IMBV obYՑ"u~'-/2'D]U`lki2�GG55r : Wu;/SBfV/r5MtZ8?Gl \nA7W@SU#Q $u-2նqt4k9`QWAݚ U~#o>Յ\tzЀ#P,rA-Kn:i@HPw@ qT=\.hBuNOѬ /.-#Brir~)BuԙG%Z@/U G,/FVq*s|@nb'G!G7۴h}NQK\rࡍ3DG85GW /s.AZj_u\! l[|sF ̣ALu\u> =2&_ kҶ)fH1j+1]9=8ED7d Z7Rw#ABF} w;4FM�5/Yƥ,'gy ]e^W/B9UiSo=3Ᏸ'5ӡ+-mN=@>Ź$hpˋAz<%ஃ]('b+N~qgr,4hqtM_qt/=0 xGNVZРczMAXU7N" 4Q Zo! V_[Ȝȑx6MbySO= `$R t]hLȓ2\KVôě1u (`ݿwXȤLNVZ1rwLJEcT)]T4 躾+mgKe4 W5 ؚ [ac59\ZphDZ;>ApBTZy}Ly2I>b0 #g6ШWt5ͩzaRpwΐ);V[rޏ 4:ndȳ=9 Sq?jY(U(Ш u3})n!1�| 2Ihsd*#`n}�Rinne$|pW!&˥EEXnuVv@IB$V/ "B$qbxP}5~A&Д#Zrde3!(N-h:OZ`G0l9ڣv!Ƴg7-OkZhƜnz u8Ϭ4ѺcK`σcRRh36+1h =5~v^5f]<ɳ5 Nt uPg_'Z)N<CB4 ѯGǢ,QKAF(-tx9#a F*&CLDk&699Xqvd 9+@^0'zdz)zRFC &}orJzRǛcu{|.?h EVJf!|Y^vaf]qGC =5h.AW4C b&x�_zY3֦d@ӣmk 9D*<"dЫ@@y rCmL5GbhCnI{NukX䮧9O젼͌y-&"yA> -ԽR_) :<D9 0PB PKml� c>iՎhttHG4 IdL$K`^Jɫˆ@ 4^ hSHǟzR+ik$6̵z֭[,4RX` 5,Ƈ^0Y7> ڎU<u1A1 U<.T-nJN{}~ӢE!=EҢIfV#ťIň b+&3$4i8RUW\BxO,J GezdJiVi̅&O*(�Q=ł},Tt4 S4%BlA6>G9zsW>~ B3wG̓<>Zpc :1f)cshB1 ͺZ0̍ƣg(@~F9gN_'ݯ 4Kʬ^Awh󒜧:4.b'm¢YA+ްhRFCР_d8R1'kǨNzPZ.>)>FHk'i[;͏NZ/<ւ9;E}=஗w<I(& Hd8d#UZ4͹mJ5QC5#UAPuFJx̓cu8-=Wq[( 4t!s|k U/suBW2ٷuTD1vI!MELuDv.'1/[ F+Ѳ?eMzzú y%:ύ铯YcNc 1R,I1jxƊYΟl@O8Hث#m"͋Vꅚe<QqPn)dHzR;[zf`6]T@IV;QԪwHpVsCw(<=׳oh0XU[33zhoU}5r' >&'Ţ<iRvh#e"g}imc!hk"4O(㑷Il9{Fu xsBOjD@iNkDFZ_ zgE#XO͑d'54rT1F�d5ܽwSh5- fG6}Y qF=<Fc4{tMj^=uIhOAנnIuЪn/U?kPW"䮧{8us@4'@W݈ޭW:dqz UNW9rh)\#u6%iGʶuF3k&Hg)oD," 0hઃ[TN-讧 ;/ffy= goP2}[ܴsuA~cn_ ti9Dd 4 =[} .zatp_U]J<Ƣ+(xGDv=D=_`IwUFX5Ь_ƺ9߱8I綨/Ib gkkL?!u<%^%ڂ]|ƞGJ0ͪ]瓚ˌp6vߠa0sT- ;,rx>W[ZdpYB&=] :U soۤ'4VIZh0έ mz}`c~mJ6@C*ݎqFڎZ2醌z{uNĪc -҈{d!K: QzNCɫ&r HplI2y`+#ajH90;ajpG|32u?+qZf"/@WuD?Gh, ? ‚A@ɼ8]3(AH zdK#"ik %T4sYh^Y/+KmK9R~^6M7u@ )kzGB9: yzrhU`7Hj=F}H!d].tR4g@n#]B='<zxtH%O3_Ԃf A4rγ[0Ъ?4?r5'o%:?tnUo?mr柟x DoyV,|AOmf MҜh4篾堎{A s3]s3X}A5MY)hԂ{,heʋ5}6y{k뒥A L4ry 3jAwm'o>k_\W h*=d_j.|wu^ zjնWu;5lrH6 I r4SXϬoMN0g^%fY]8zjD ,E/խyBSa<]zٵT ٕfPb:nI1=Q.[-5Uݫ{tG'jusjnM& eXuV삮z#`N^_t> #A4-hЋb'<D9:' q;= <dMzB-6{>_ HHQ~+W>d.@mZ 4Fzc+m@lz"ݘHnQB 8 vl7 vX[%BλⴐQ1IՂU�a a~^zxcܘ} 2%/mRmt=4rT[3<I7(FD ҳ&|>�=O_{+EC7xVhvד+e4]jMG^k#cmP͎r"T 47 #_?u[:HCgwRt Y>GjV]TOuw#ҰhлQpHI^c~L: 0`+wlAJtvL1Q U~Fq1eVܢ2a=5O!RlVOk:_"WbE^b6Х廁F(S(zFkmn v=q} IѷM39hqZ`dE b*BAk4g tHwj9 KhQ9�#EF�=[|@)>ڂF5)y]]pTS|:%=1ڬd�h3A|jdpЉՌ5ԽAcLÙq};yɄzVwbZ' ѬgH?Gz3բJFzLhޯo3c~-)hDX߅ Dz/1/%XWfe$/y`=}x˽[dڹ<I.rvV'Г9T 2YWN@]SC1A~�tTM9I/.6dGDzz P_h^CMP}z]C@:?9"&!߼8zy&(yP.&}ytήkDS@(e;*2p<yZ!_+G `?E(Xu;޳e8zs[|9NV6~5B n@Mv 5mi"+t}u3˵a&{Ӛќ(rXcerݦrjTa7z ZaM=MP}ym"k sכ]jl,|(h0 p_mP6Шz-z!h{;44н@K꾀sכ;0eҵΡ&]_KQГD)F]g ^딬g4 "QՀEu驿BA2,FK~!9N{HZMϑc02@QS ̎h΁f=kS5¶NeCm[zT? tՋX`$RȽJ O.C7l^ G- z[rt Eh0.^edMo$C) @OAۼ4%V`/QpAOv ʮW"w@^tɍBCݶIX.ǓT ʨ{&K CK z֐7h29`'^ OzJh07ЂA3>: t#00j8 4oMFz،H|=`ma%g\j˓̬>bBQЭ-]/=c7РE؅'r4e;GbcsI+L31# ~MSAsR[vGđ[ٵpE\tpfmY:O-FW �o#zbI J`0ąP9Sn V/n-QuR=q1!-:A ynUSO~ ئ.!qYϯy|D`Yuأ.LbEǴ/) @(d+6뵒iCݰw/ Ml%29hwH-2@Z4^#zFD@ϒ^DYhKaVw z'LzC@4W"Łaj AW#+1hM-t!ꕺd~sTХ~SX1$+&"'4)P eŔ@Jv3Ȩ{擁f,Wt㾾EK(nS/{I1$m`˳C dCF{)M/O^ ķE5Vs`sSmkZRHϘq& -g׉GI! HB<uڒ4JD*,IGS_hddʸ6̲j'wBޓN״Ewe A}XTd^&5#] p( Sh[D8z TWo4I ;{cX$=P kn�9Q/Rpn #=ֲnz6d tHJ0Ȩ׼QN-]8fJPMv&7O'~6Ѩʫ<#0Cd 'u\YPhhkХ0;nkt倏k\LE> e/gō{t8^`۬l>G,!%aXХF6 0NыAsM6mr�r큜+6ȥS`͏-Ac`-tlZ4NnJO$]a?Vx̰@)w$]5VϞq @Y"誇kh=VG-F=QCФwրLE31n#u,tCl4A)ȁR%Xs:l$3>zШWA;xӹs$~~9C H uc{u<'6LMע}xBպ5M݆jY'%Ogܶ9ȦJ$ޘzmjY':N_qfU @AģmB&] ͇nDM2 BIGmR#hҷnԂzSրH 5.)}Z>{K°Af}Z;M/ܢZlv;hպƏ`dz!o*Z3M=sf|@@)S@%9J0]&9p+<OG8MC$kDOZdzަWmR9*}asҠMF?5ۜe6!P-t5XQfA'S4kLГ+]  =Ī*4IdC3d@7l(BƟz";BMH4>)2~> 9NAC NJm<=N;RzB#t<ZmEzҼa]<h(j`?r&]SQxQj#""f?? Z,ǺʼnV\t0+2eM1jVf:0doM:F+zQKГak]Ь~ zRɋ3L4P6'8|&lMm$ 4SDcw_U&mBU1z;H#:5F t/Z46Pun!H@1Г>= uS͇F fr4.I=۬nkqtՋ8Xx/MZ߼D`Gn׳kSIBz5EsjXA\!h҃dY r4ƄݹF#os$r~,O&O8ᨏPSg2]9h^%:QBݪ_C<@٭p}#cR^3gyŸ?0Ь˲)Bn v7D5&5nAWT8 SL=^PHsgBwRc:k#I;Fg&=p&UKf^=4Г< 4&E8oBzD>JGH-f!TF8\LLY4NEzBѨ^o[=^7{L|ham[u.GnOz@h!=:Gz7+d=0GN-r-@ӧȁF]\3bxN4B=0Q 4H|􆨻\tfcțxh05xY>p1Mc96Hm\&n1qE0@X-Џ5䦧+=TN8&i"MGI,t '7nn}m.=@O1GGL6p/91n 2L{ādG/H7x)r S]DG|}u2StW%O e0%GYWnɑ1mK-ҫ+7a> } ~1VbߢfU 4ctzR,X(4=cP4Г"`wB6<)'7%RtRM TE/>ծRPyS/s޷<kl ,<zw翜:?z/gG>vque} -5h}T[w .dJ~t\Λ>SRyгN Z lrr{Hj>9[gu[f`VS'dzOaUμә(WдVavl!W H[-\Hd;u;N|E<k/4er>@fçNP ֱ%V<ydk.w{'X|œȴfx8o sh)j)w(~tWg^ ‚ī!%НMOfBYMek2j?@kfZ^ףlBUJ3WF:o`8`>.@f m&"/1Mݜ@o3Es϶G)r*Q}jgFXhul{Qߢ3GrɝfAߛz؂֕9je|@Åi$ 8B[[u0XȤ_t9[`Vi֋F]I9n2ِ+ tOH1ͥ8L;qd[A0&CV瓺mST4&'|T 4U$)uO66h{ 4n8=2Uo2 ;*@#>iY@s52yG/ H0E("6Y5j q1 ZS<zI 49M>-gzSi>tHbyL?!9G"U覷r ¯72!T8 .v};Oj-o="o{GO@$hҕ hlѹ7z#cK|k&Xhnx 4U(r]5γ9 -.d˘{7>\~Nh]U0[<<G:\2c�@광Ց.A8Pb`wkm}udуTAW-z^XC{KE>OҸCCޟE]ʎN3�w|)8o3G +̲EW Zb$Z2UG;_+)'t|UtIj@zLIK>?4+|~l~J#_O/ flrinll<MNhJ(lSВ -n@2d;؄;>cQwn) ZM1ZP?]_{Rէv(`)=g= $8/ ~ÉI?{58)!eĪ>R1Z!F2 z3URo.Sw՝/�i3, 2)h4 V2oљЉ@7i\Qf4,,;: ubQ_I9=b )jUO=rObN3%E9R>h⺾| Nش8׬-Gw^г2=~ 镲jZ1@I=h<jQ1<rq#Tnzǖk#b.^,'m!#׽ysTV6Э[PF(0RC t}uE F(HǞz>FD 7 Hn2'9[ M ']—^t3И!2A@ X삞iS4ڙ6|j QjhUBhPPB}bԞ X6:!FAAWfM]/@ ҷ0EG_\=6;hEAJ_㠂Ndi(>7@z/UDAn`뇐ȡGc$-Qdӫ�7v˸@=٢@IL Mkc5Х&QG;oD=}/]J!* n9[A}Zm_A>8t #M:VQ.s;V 1?H,EYߛ1CPǃg1C0<Cm9IEF赨u;ψq]u}7pc$&mXFE@;ATPFȬ&\͉ÆS#>4&TSm+kr[ HD!X?orRR2gOta ׵]J4.akBt?XuP#=z0<|:B_&sইZhܼ+.7nw` {fHaGl_:ksaeiqMzmY)8my |s%o!K' lp_R=aɺ �6wZ=n^ D DKA|}1.`?m6B!y1qlԖVuϴ5oDؗ_n)CHrcdmqv~r!ZN-HB-uxQ I+T=-x2OwbuCv"m^jhcSh75Pd}1woF<0x˅ 1b.3/d`ps3o5.Z sܳO2b?$D GqpѼGD_m21Ũc,]DŽK=DcbOoME ,ӻDÞq\H7h hY79Gĺ(ϘcH&9]>cLI_?\K ؃r6cNqbf!yL=E|ywN#l] :\HNzZ_G@C^p[@sk5]4v k.:s{IH]7.(CIp8W%X-{lu / ]tqqGҚ�R=mecMf)Q X6B2&^i Ѷ/% ׷G[+]4ih^{jtk(o$ʒrcieH {Xy~K2ב" D~zh7YB%o}j ySB4ǑÌ�oS6.ZE왞nDip{mmހ* ƥR:rɶj>Ԝq۱ {ʵk( LǼmEK^Erщy-Uϴoiqѐ> Cq|VZgDR ExhhVH比޴BJS\qG,kuq 1~K',Ms8qކE.Ymn:=L7}RH(61v ɐ- pDW7ł̋>GiB^a_g!##1T'^k{HY!ZK.:-7#$RH1$.t][IìSnLEnf!w9a7MцP a^ظhe36ɠSeϩ5l\W͖X}5D|C }&0�7Zq3,V �7�e3PL"Q7OڟX!y1;tJDЅ{ (L:ZmsAc%a7q-qf=spe\fmD.P +IݺpG$OXR!p[qIc<b9RP>N;y " o%pNLn}Ա)$˼s!8v+x= WZ.j.D˾rq-oeyhHYnQ\4 h̵7n;V\2p.9n$2np-�}b!.:f|Z~B70*Z\@M^.wT)y ^t"z=C-A!7Qh =']Pa/BTcc?yj{lgܯRz[97U_bӹܽ9tɉt˺_e?|^X?upѸn^0gBݰ7y"u9Y9ES21q B;;rP3GKwmJ2b]a BtqV< Uz tV\=)!MGhsiV+S۔/cc{H(U5HBHˠ{G~0p9\Ng(D#lX'ܯHWZ%=tB~׽dwѽdRVq.2tRA|qܞf"g!Z"|Gm/gOm}tllu!]0ar6Ntz3 1nx̹Oo"B4&(6m UA#?27\+o]rR>tzZI# PuRӕD0.ɏqK⢉k!Wj ѶwO>`8erng]4'mKi%Fz}}ɡ8]S]q^ٛj~zBE0_,SWT8XdF![uבfVά`)MBZ0xCsі6>~:eݳ/ZV1LuIǘ7�+ +A{u.D]բf!::: D#%6iH}s]& C>v(uö,a/ {C`A-$Ӿ p!~h;M˼+$ozu3_5\}r^f%(-DgthOg!JpwwRoY}mӂJ".}˛z>.zUK Awih ݥHPVfNoP!]}.,D>6JV$_x{% =!ܤW!Y=[x{cFwc!zM8|$ N]7O!f0/lj[mH͜GjEj=MCon9s<EnH |riOYmKx9?;9B4$n`(U "{Ce8ePS-???/_/o~/oaaD{5(g,$vKu E%%)z]UJ4>E\w!{#H({εqjQ}";٧hY7@uPim磾!VtSh#ܮ=px+ny0zn:O^dbJ*- fx?E~A[i+->_-Do.W@]B$lx{9 g ?ַ0PzU9Yzٟٳ\ZT{:lRN*D#o׃R{dx5uOt = e=a?jy{ގ=-Slq~9$p c,D>y3 ,ݞG}SpZ ˇ}j~v!R$?EӮ ǻ Ѳ#vS&X5;ѧ@ZFj=M^vɧ$|ނ]L|4ՃHZZ—y1?I!Vvn9pf!z< >w tOɢ[4=&hp!į+m&XYf.D۔ bR˾dw ̻Sn_$tCdԇIRNUHNx2L{0U: g筋<ǹ ۦb8i< d�mԇMZLuOK䢓ê�W b̛*A \.63r̽D˾Qt ٳuTnA{kƷRֹo7śmjo RNIa-ᛜ.9 sZ d^E&%yzi!#~^/k .jzWAWC/zcw[Sצ4f;hZ#|U fYH=!\^ .a}Ԉ1Ofv̥,7)}ѲpE='m 7w#|%Z<L?ZpSH^wۓL\+Dض, ^UW]KKؿ-ىhmKG^Lqh?/ZE]tp(÷s/ǟ ,}ii? #�gưOB-ӈua_eŞrq2ݲA]{Jkсon $ ɰ[9,8@Zz$(o~cg~+:M<$! Є}0'w4!Yt4@5 ۯWasC�<D8R~Ngg!yS*̅db$(`nC2}˰ � ɢ78dMA[ώX!: [p�س7\Xޓɗ:� bxD@LU>)46g`[ԴuK�m* `w0>/GnY!�l<JO(D^PW-rAY. \tę[L߹2 Q ZӞ"$ kYrasj@2h9$&ݏueBta{#dLDb) %;p(}c/}+r`!�zyp1K(=%.myp˨91|̶μia�\0a0L؉\u0:`sfWaO&0CD }5;cS5<>5B42PB49e ܂ /ןc!:mWw^[n"D)DwM#7 Lł&rc?pһmvGK^s8Y=1!x^3[1E7$Iֺ[||15+ X W!zz{Õ{\Ҿ$wmjv^21mj ^h])#Y\ q!y߀ZNB!Ui<xDzr!h= q!CnܼjAlێk7O<lo!>wѰO^Ƕ+H+r/Z`?CT2bCW/9l<nq+^MJg}-/V^`{E`^]B2}F4m_6.xLhp! }UIox7 Fw.3.-KN*L7y-eDy̻| ֽ[NkX)ީ^f0a>&=Oa[,DdDx̱].q>_2impBH_D@wMηs 7ihG|eo.m{0ʚByݚpЃ|D^.ZۗGrEþW dBŅhM_PW k|K}KPfe!AW̏=} Ba.uɴZkSMM Ia-X7/qܕb5l߸ Lŕok|mFmQ揭Kƽ2y4Vi$7=@IՋIYH^BڽI9^kދ̺}n0j vӽɅd].P ?u( ñHj^Y+&q}ၰOg (Mv#>k:tm I(]%{9\\ P:s\(D'?=<B4/ BžY6TDqj ɬ~Ou>E!moǽQQ3}xQӵ[C v!&T׾oP0%M۬\p˝oN;|^n RJ4UHf|ҌaDg~)vVE+F]Ji:=csyJHnhHx$D 2qa9䗜)"oOd38!E2 s\f(to-)! {zE>:G*{�{nO؈]y*DC.:~KMArM׷4USdz#&5)甅FQi6)q/Ef)Z"KKsl׼]7Hh72L}$Y)yE~[4<+̽h- m[}p \d(sҬB.dE_aB5 ·=,{`E}rѰt]`qd x`W:<:+EϤr2x+7]pcE 4MsF%yGLiݪWLaw[Al]T;sU;q!=-s(b:%~hٿxqR'`pP/}+Kv/:P:B&q s. Dݼ%fqɶ' 3g)?|Ih…dܣv,,.bȏu3c챿Ok"h�ߔB~#9D.[ƛ6ǚ݋}Wڽh7Z]zq6^ & aJf!Ҽ8:)B]FYoKg.<}TM f(ZϬ \O)D/jͷ3yB4\) PuԚ0 P޶{]dAϻ<͡UvqNr8~�hH nzCKD۾,v* 咄B4"~;ƛ^c6r�wAEBt25qJ!}bjo] TBXs(2`B0B[8oD#)VNzH.7aIvP`M4>{lsN`N y-h\޶u)p~1`Grpk_:W!9=H9Kf4CmzLG־݊࢓b5D} zΖ|1rL�`b\:.D>){sKqm3teXD[aC[4ঁ:u5F_rv[{ϭ;V-h7#yE'mwZBWZ[Ҿ#JIy Z[Da K!z߾3S4"Rݺab,D,T<pѴ_jM|hBpJ!oƊS-ɡw¸J>o.:un+~<!\Ί{y nQi|uqb܂მ˸ [) F?W0I~|*=6m^zM6.?ܹhw]j[0w޸zzwr6_ݴp/]R>W<+t$SH[[H-p-ҘtV++n| 2MG|%zR!{=]~^g7ilឃ|  Ѱ}m/NvE'im%8]2$[,Op^SN[tN|RcE*9yǣB2K | 6+meT d.}DmS!}xP/zSBtr_4/x(ZҩBז0kO,E �|sǘhO!z/#^XC4z!v!NVkN7iN6 4n36D'6O.*!p;y3a+[G8\ޟb@, W!w[w0!8˷0D>x 6;x6 K.+P!:Rך3bZ |kH6+Q./8/\&.,4ed\�ٝt!Btr{M\\D~XB>m;qoN屇'ToH=lح+./b"PM,n b_;A ]۬f)Ξz\e]@fXL]˘=92UئS 2!z&/[kB2;!ַq=وz _})z%#t{h |{],۸@ߜ=oß?o?'k_R֙Q_/?_oƟ|]VRM%|Moqgۇ ' TS=*Ca(d_)/\+B7|S9ޅpR*#wW/}WakBC 5t=I3CݸUg :V[^Hůկ[ngY?S3yA/ z~h4ym5 jL Hqv8"GYTN疷;_d0ÊXzϝ}7+Y'(+|Kw'P^6 R0ߥQG!CZ}ÅjU^/Z+9OKL,[xBP?/Zb"geelC(w(Eh|d/1_<us <1 5T~Yځ=u1v@|Y/ŀ_H- 5xdeʌ \XqS 5 G11ΫBb۬5E;ێ4p/LUAc: .PcP?j3JH? 4^LT5\gZM PeAft~anYչ 5_٩jD ݁^=d]5f;Sg1.UB7$_dB|ڂFJĢ\7+v(*x(L6GUo[$dWc>YX]驳=(|4\YNݦ -p"^(}cɒf^WjdU<3 ^~+`[+[O ͆$,\JeWMZ"SeZPLO[!aC 5r(ϊ;3P幠Sy"3CgOtiuT5bt#/F;k.bE` /t-ϋZF),^'{mr@Z,ȗ0,rWI#%/RyL ! Jh}}-V}r["rt KPTFy/ZoKKq".ͱjTn<߀ڿPأ}յЂܶpӸH,sya\,}G-hI;ߑ@4>KFW%Y1W}`3>Wܔ}hy{8 ~ⴿ K7%ZP+w}0R a N~ھqkJS9k8pc?eeLyyA$C`K whh!"͏Y^,wkSι2{} B3(4/2Q}| fC P&5#(Vmu-|q7At+6[Y"oewfM91 Gj(!ҶL3:%Ynen2E.0buqC ؽN:w[PwyL]-Яq,꩕>*!7XB/|1yu#67B�c7ٺ =.-vJg;MՖUFgh,V[~u1cCg?ACƅ2?>*Q3Ab;2 zrl%3᫳2pP0clq#jSHٌC/vO[ 'I̵ n}!2=C~Kl<賵=C%T!ag\-W=g/@/$IZ`tKagQx ~ʜw30R^ oe8`JkF鳖v/\_k"zc*Z�8H扯$_P>0Т F"$:*JZ}<c [we:D yEpzu˸NV05TҦxnbah+;/Ψ "W�,"kFyZN^1owWVV$dΆ28-@kz ! %p`s&OYM$,sqvZ,6c3ցgy-̴-|Ÿ֠Go(ٯ}P׿*\xnׇ#�Ԇ0Cs;b {J�=[I#OHoVh"G*oPB!P[ ң`l-CQn5^n<& mfԓ B}狭߱{K 9)_ƹu2#nǓ۞%'#fcYRۆZ4 ~AKSsDJN|m7q/ɝ+lymZ:](0X5IOsiNj}rϛ\ƚkUðY6BaChײETm٨69$_J(S7Cd<7>z?3cځK"k9 Zvz+J 1j^|{Y'7�U7˛8;( kP# ]4UUyZlDbό_K,ŧ4a x T 1KdoFO;JXU{I!|(O)AX))ͤD6 1/cXwJX pǕ$ZApg~N޸A<<23mn=<nezM&Jtݿr_Qu(b�S ۓ) `C b%yQ%)Sm}"U%A50]-䱴d=}ۄ5-l3$ɹ]9mH`;9Kт08~MiIY`STl|ajӺ$J4;Iq: j޲; U= S 6<`xdgٞ'z`*ho; d9X{>M:Dtvx˳<6c^-Y(7@țlsq %mMݠ!{=&Xhq2>\z0_QukBOqMB _iAL'=D*XHZT-N)eV=%{l1jfym)bVKj]{;at�Y> 0LoN2e@zrɔPc͆8@-CyI̶1Fm|1 �ehHv)34�p)R:J ڗW E)u�4MKC ?Bf pNg(mXeKGØOeWF|EY&hZC pڏurX t (pkm{!QJ(A>΀'V }pP}s5XH2 5}Sّ*!6l�hڳ`8X e9Y 7pf%nFڛCk8L4BZƂ86r.9>T2ņ6mh\Kt.n5t`ѝD >YP)Z6Z3j9W5kviҵL+Vz޸pd^X?F}+K+eIԚ-ۛZ!Mtr2D2{Wg�Lr\g=t"[]HwYdfԓk %ɑ@Ǻ&x=_| ҫ.EY^5zRCr dd Dٟv>`QLfB1B/@UQYΟ�y9>XF2׳Wn} n5>p-X9|BQ*33*GпSPc:OhcXn-w(gi6[OTyL]OJ~rڰO$W<Z,nfc8˧r5 9X|<.]a}fF'= ֨v?|E̵r༵Ԏ7pn.#t~`ŇfCeJke#ʳ+Wlvl| }ķ2$oHcFA}"`7Ej3(*c(zp?eLe`?v/"Ć.PET6)? lB9H>W{䄢3**_oZ' j,7bF�>4G{LfuGj(hMyaѶQx~r Aa`kH|7JHE�j_Ha<˅Q!Y#_E>P.c @OښZ<Q%Szy s|P!fKٲw=0$4j8P+No"JWA -(NkvyYc H-f*xU3/'|P|*(RA.>]ϊWx Vm&;<6Zk.gY?#Dtw^P\&fU+F'~M,:/gp=b;:';o;v:WL30HA=;Z^,hDbVzWq!MZJ2̲LbM+a .}>:v,qE_h4WC py gXn6yb'm_j| +PO5FvO r!Šާx. 9:J`uG诅Ypvrm1W F@Yc :=Bh *2ThJ5Xc�(DDJW+o|F?F4jk0t.kL7`\`MZSNáVns1>E0\ 2ŧ/y�j5>yZ;ۉ%8j6ki =f~a䮿v>]19ϵ@^hQNAQ KHX$Ef`5Jwc.bn]^+6k]eYXf}3l|M%�R 59IJ@-,Hã֬]7صDT>X Dtq/ҕ"Ӫzoq )6zfAu6i/(jexӱghEN˕0dx�֯*1ig(A4'G2s?!A%Yab5qmrkZwU+ � b]->tV@pn6>a=[LE q @'7(ᙶ[>ZgN_(,Y=Lg�>AY ZKl(0W!J~yt>U%~?lu~kj *mТgB7^~ԐA,F]ȢB 9z>Z"b_ ƫR}Yh0`mu� 'C #ǔ\ U\ew1ݥUcEUȂNgqTV` BQ7LШ_H4F`֍gIXfۧl|LS$5[XiA cҽ*]{<s%ѥz> s%3l<̣[J�{d7:)A &5i&Qjx{h/+5DS%7ܚae"k('FMtݹb/ٯgF 9-j(S1*!PT֩|R av+ls2(g_;/AC  f0o‘uxW cLĜ 7|[e}C#J袂VB !@cɺѹ[Q5aFuvj y]8 1CxF^HĆB$mw[2m훿5tXi;siQrjG tHۍ52,%:s%Fm1Hv$ N j>s|p4P5䳓jkC2bH[<䳞(Ag+57ZvaAΉ3v Y}f]mtsj 4oPbCtD{o .PHI?71<w&۝=H7#hȨqT[AuO2Bcʮwx|99O,%9 èq ,;ГRQ{p\!'s({AC >˂ J.Bwq.anUh{.q4 <\׈}(!udŨ[77_ZN-A³a 97F<\/Zդ͐>pnXjp;m8-qp&V#j3F:kBc/T@Z~}\L B9 8NƄ1du}gCeYc+9BPl/֌yOBV䮩d}%lEȫX_5!<2zg#9붖nC!h|,ՙ䷩Dtl(A%1;:H J|Q(F_2ZX+agwqL'MnD2r_eRQEoLY @ha5:Y]\_hVIM* %.m6b�c=6Ԓ>o΍<2HGoB;n &x𰶟PHy4]w7�[#$upڠo6ĂI6x>H>s]a]>&ѕ#Ch먋罪 F4ry8O"~PMA9`KxlX!VoKC !~,1=gg!#vy/y=n0@&&ĉf5¾%c}>N\jUV~#Xh"QکUT({93Ɯmo*s8xSU@%*j)V8Qyg{K\�_Y\i(sPz N RY.K zbn)dh<s']ϙs*ؼy7.z6[B󟔠s �H*|U{pY m0ftPj)a=v~SQb5'cU#1F]hT>-e5y:N xxN7av9"N?bf lhx:]Rt`"%+ &fNn| 3&|}sfBe .]V\kt眒!CG\XsRdLo5P@el7D]Y>ɠbi;s2m|rR?砍 G = <X>ФI P~w0B.|`hIP`.n[:yUGbyOq-y$MVob;lA۰&Z%ڔ,!5 rV,/#6% -6J�7 V<H(.rBaw)<%c S-a:d,p8co:'uո`" -zYbinP}<Z]v hTZ$ÃQs7x?>A!bb*/ZpC&,#O!<KWkwT / e8p@|hJ5}ÌXf];k}Jy]a?_ AVsMt6q*K]f|2T9o0b%rָx^];&:;Ju`> +6OfAd\`s;"%JIy*^4rJߧxo#$7J4͚שB\8Qk't#i0<{!5/]ptlXJ�3 ԕ"hA =68|kKc!4QWFE g |˴Ϸ%* hg 9=c|Z18 gCihmַgKBYküd-q@;o.g|NK<4 Ev4lB4jm/=@EnCg9q-< _4>HדΘrFrۚv9ҷ<Zb$ xCqPmcwphvlK#1WEJF61p(<jqVӡՔ `*:gV>A%*6tP6?i^B#�fVDm֔g,.˾o5V-nhI u�O}oh;Be+[ۖb5g]i2<8WBc<�q%`Vbg(EQڎ@iSݧ.OipY7{u!g94n-Ǎ.㗉BLZ}ȵ�ZfM̏05uúEy(g diIvyCSq$l`BsJX|*/}Ӛ|�gvQ- 0,<uۣJ>'ڨCG&1_OBF}"K=hzagP!`\R}B;W=#YcC`ɓy^<D+ڂ Y*VӲV+.?sL¿0DҺo�d`4(/Qz Ch'l߫e )$ɧI^,UtIPCVbVd%_]V(n7Fbw+c�9w] 7f Vbm1"A}7CBy'r4> ?:޳6I7S\|^+f]nqYg]  ۺyf4dfI=( - qXa$59> nHG wgLo@4: OKk=@&*suWYahASe=MG,' $C2 X ty<n:j7&nB?C*@iG>d]Rl<<F -t  ѳ+!heN"K?pj8Wۖ_ cYG}=,=%]׍׶]&dXՅ;ǒȤJfWPBH-5zHD}-F 9Nw:u?_A PCYJF 6ꀆ.[X'٤+lFmޯ%6hc>?�0 }[U 747}dk?hN(29 IJ:( No bg%mՑLV7 &jc=G-�iu /уzTm� n 3j3l6 qA�{o(@iH 7H8_[Vұ "RRd[['G] hѾ ꀲW^ #\BJn/9:Vpɗ>wO{gHU&(w!%UXhvhtQڃKDb*?{L in4+c4<v;{�d'.0A{le+<o;rzL]@gHCPԍO2qe~bLsg>y7:Zx7~YK9"eg4րU0aCV{-t'BC Iq^ =93iߕ{[Qv>5ds?I2>(7sf& IhnF9"y<NXLd|ށu翜 '#Q+g2<e4>a]Y1d}ϫ!5U\F0{O*{_%=lhMF%&B Xf+a5ODճi�Ej+Նeh<#zh͔|_D]!<A_}sGׂ>LlrC˾�5ab4e'~5((4X0W:SY77@?mLpϊ9mf""6C ֡DPWE_dqZkZj7q u:,VV�5:14 Yg*Z ^Ns' I5,[}9c}ɱ.zLBnrsp: t>MSf~C1ZC`7tݨj!$Y2kt-HL]It xcf1smIn|�Kg݉ -mi^/Erk<]}ڂ ТliD(}_n�|`<Gu2ϽׂTLe*Τ\XN\˜YU>X\2Zt?}źӕXs(-_ [-~[jtrݨ8蒾5TouHI|Kum~V[6]`_.9lOȈ7]Ê �*@ FxW:\M WtY+h<2Da -bhy(u߲ zZzbx^r݄c˜?f .͢XTWΧt\ S)ܢɣ[Vt'jgq .g}RvI;ץ@&ܴ Zf!8)<'v% =6�m4@DlB}sࡋ�^iuo.6^ƒdf �`rz-=+:UU#֚>-&O2Sp>� J>=*>G BgtJ6ʬӥF{[iQa JlCIP5b'sk0>hh󓽮Yъww(%AD[wd;$LPsÇٷ2dz|ס VÏ{YfNU1wN1Ohn[>pYK-T6Oxc9O<b7_~tJ`)+Yc�jZ^)@ʑL8dX^Gl'(5!R ͺ͜g+B 媭laʟ8Mvs2~PP( l Wm*IC E Q}ϒ9i-͝{h[}uQ4Ҳy8Tw&@C q]uq%|QܲPf~k{=ogS յ:`/ֲίu >*}Oðz‘H-8d3k|Xo]BN�3kBЂ *`ih0<ņ eh<lXl&W*BuEx͹RPb!I}#-ܝ$n5ʃ\ 9JlO6:[dKGJ jhz>Jy]t46b_+/Ot}EIAޕ2Z` zdu~T&[M{5.He$4+/A\-t2L9t<HF.NQUּVϚ`QG ZTxfX1D>+8P(lX:[-=H Vm - TĒr#~pPKH;r;>42a(J+56t 2T> jk$nh! �ޡ'[-O jJ2ρ"'hO -1#.|E":}LŭÁ.VOVC ۤt\LvN,VysS>m|<J5y3� Ect>l$I"KZ2t1fSQܟ Qdqg=^E{q sR[dlzy~JL7WM̗<OFkH9 >X8-svߐٟ�&GLl ݃�d;aϕ rsm?d,Uf~.˝\ +{?꼫uBFY)Ţ~w ˓U\.z^51?T 0fC %~2Y?�*-gC^|_O?O_w%㔼3jO_3SY&7}Ǩ{h0=>N/ O?2ḋ$!|EQ[>ӹ/4`{WF T N'BK23?4*r6Ԁ( e̕l<@Fz/ "t}29Aag6\NM'X<fo,bm_ X3*Ϫ/GK vϗ:2s8'flz+th9{-塥d<(_/vߠɞS [;5Q+?p3"VAG6ң%D/1\ /|Әh 5]lG懟Ls?`�<J~yvH׮ŎˮO#8'k$Mg�R&cB\j"RЮq+O\pazVfؔ2cTVfIdW<PMF={K@[xÑ4PQLd5QXfE\_g8F�|G|`aM=0PcyIJ ؚig)xFee -dj5_`8z5rTx IRl-<Sf $fJc�kG)`r\_xƪEj_Ñg/ PXx_<� ;40©):$fYɠMS5'K:9ͩZf<VO&A#tO0U9.% 7 q-*TFG Qdʟ6Myufe$fkZ_ },.oV=pi.?ab΍!9:J5`٬xU7qg?t2nR8kly.),8YEO݄lidTb¢<.œ;}PPjh9<kA5iT* >FuwIbCST)S܏ nlA)"L |L.Ƿ_|l1SDdt`5�<)?OO#swp'4'{p09xɋ3]Ue -hCw+R\2bC Y25'50WݜwqnݜtUdhh |GSg٧( (zAB]ڑz|Q)PHhX3]kXߏKϏeD� XZ�DCèZae!4˂aG Gʺ{dFU>WB$JJ|,58iC\@ҧIN C:ݪ2@"W}6`{#i(r"˺rTvJ,!&aI[/ %0ofsZ0|}.BAՖWE9s#m r|N)n ,@V@z잂wli"FZk1%{hWߛBːj8$fUᩅͩ wr)Njikqtj j -`I59i!5d:ZDž/@`^vuTW顐*CFOPF<cQE,1x<6F7u*n͹V DAHyBY](5piAg 5pXrV"`:PRb,҆J:=穓 9Vpi :Z.gZ<rpjC f#Bؚ%蹞WP3wnjXA<Y |G"Gf-uJ]Qpɺ`~Xf>5z$@5 ,nh;VBl9wQvepZZbjCB Sn~Isg]6gq^rg?:#U ?AV y}h| ]R6U"eC17ERa- 'TI}V^.d{T,دGK5Ny>2w%̪  ?i?? O{@)Hux{#<?"j-xk ҄K(=Ye[ifi6qAF.yy7cPV\ie֐xy8- 6>(KW% ˽^-LrP=̟TA0qA&Bܐ<\y.{Z:@Cd:d~`kNAk(:Ͼ|0P )bQó?wyv* ;BA Nc5 VC5M8{5T<rNjW vCfNR6!c:OF4OXcAS=;k1j+:9^+gdn$,FQ1êAz5YC <TږhS[党 V۶h=Z3pv^8=8n8 \ jl}R4"WlߑYL8΀*C5EۈZϨiS 4Dw( tZ pRD\X^K6<fzi Ao+c%S"�",\MbqW~ )%\R1` uKP1̄e|6tM&JT zhI7$()5h~binl| S2S*^J+鄮)ǵtBaX]-QҮZ(!hͭx'NG[DkPXewͽ*cI vΐZpë.Mlh7/X3R&@c㘾_!ۻv6p( g=gxԸL*ұaLjёidYvsyjhm$⌲gYG s~#XlcLd@}%xi!r43Dsll}l5>p1m  [|m`/TZhׂ97\øC~7Ny=;?m91&K߹`U0w_bFc]#b}q�[gՅCi,,`kEDms_:%~QSGS"G.0E4Ta;<VkG>k18Zð%*C|)@w;цn.^ - r|YL-R-HQK)]uKx/Ko_Ю;{-O%;ymco~_YFTkB.+!5$ZP=+ *ѫ_<_*>ΡPFLAU J/ <pWnnqa6o!hӪ39_6@ZZ!pP% =gg;bmu 8J(uO{2$s75<1xr.AFwllK3hc)[KAxSS<J:{mnB!Tl`8'nJ̺럗6i9ZD8APj @m!)hߠACsly]e2RNftK?jxLt4TrPC %i3< ٨IϣoBdlS0k(aOBe`] kΆ`PͼoN ��`xp̓^:}|v9)HϱڮX -ւo;kvv=X6S 0E~ sw^) {SsLQ_Տ�–bqHM[Z * fE#ijQoפKkX"l=|3vA0M|{8.6@];O˔Ve#5:<M)FO%dCߠA --Gj<ԘQ2WX0:髟| O<zfSi@w^̀sBh r$M,k-E0?�Uxt%@p}3ݏ2 �f]\"3?ۈ juVYoIC}ǁɵ#wWȬ}SVX -Z<QPYC :g?i7%v씦[]_ycۊ. !|"Cp}%Kݯ |sL e!@�;k n2wɩ>:7kEd$ϵ{&\ @u:X0w7S95gDC鉔]Tfyj*6Q=[/z4�`@HsckїJLΛ~MfԝCk[kx|ka2u$t ,>BWBrJ c,uRn)[>'C_8h�?O3@unւ?W <%]A~;܄?CӋR/ ؐRqzo^^bm Y(TȎ�Չ)L$�YF_p[q/h?\Jвzl;Mp~+կCjRx'cw99yնv�8^|}26ˆ'^ 7#qdBLRz\v>’_&;!l Ϟ(R Ng%VH`F<oĂ^t :7|y*|)hxN1 :8 a텧 ~A8);i1JK9`X7f:�&O)"~iBY[c/LEGzkt@]5'+ 9>?"e@HDRnys a.!dpaAdF^{8@5$Ki,_":g^M5E؃r)k_[?  8M~ K UNkZ[o0uY';{5OTdC,9\&cKPÇr%|ПJW4[raawnH<# ݶ W^mn8N&.g?1נ<81-٬&)Ȗ9i4ǡ lS+c=t3> |+f~K6bfn%"ƽVoo1`1d65B=&86Ig< j]Pr1f S;Nb'tpQ\M[11{&s^Ux3�hJN@/݌gy^gR};6N }>rx, `I(0S,"Z{p\NH�[yJ=WOycg|/# &6!PLۆˎl S=4;R|=nEFXN� E8`Jʄ-@ =%^f~!չaB9Y=]yw(hG<%T Y�!elR/7. VR}'7Ϯv91|YXpby6CQvY$ww{Լ%`{B8.2so>U\_ A�*g\>~zTyj8[tlpwg{p),'(?h�%ׂ2"}v{Z \j[w;Z˭ ߊ+ W 9\ۋ) ၴDY2�SPڤ5!Ng7@^zn.MY@+X| mhog-?Oj5k=@)i1wPiGi 0-Tهٷy/e:fP 0&̾:(,[ฝ<HqސaC+eGR+w _r<X:>`/*U?sofmdna/(TPDl!U9E Ȇ2եV"%dӜ`tg(U _}5P <@4y N)%q@e K($dfZz` c'?يq8K!{AiN ?t:<VIϢ=q+iO0= ELvV'PhD: ǃ�j.Ƚtac1`Lgb{Γ6L5i=UO{`/XiD2/ Mަ!9U5e5K(sA[μ68IKSTsY0GA5,9sf Z9Y k,޹#j{|*,r30}֯\f)b0CWR-h={1 {l?/}no͒UiZ&q(m& G;>qC?h˜A~Sx[kA5=xA)IEuP{1"3eQڷ-;gLO8q}/glz-*OP_vnfM\/]؈|}^ӗd+a˘:U3| k].eS wQ~`\V- )-]cQ.6PI"' x P('~29ihe DĆ\5UY=u0Z sDCOh1:-jKd`.=Z8|Z|l}vlq kv(KE.d[QN' G[E x>yO`'0?NJO.~V.;6{ƼO&2zu9`o~@\sMa삄,-h*=:i;f$<T<�U@>y8Xǰ̠5d+KLCjL.ܚSsgA~P3*ǔIɠV'A2SGێn<x`||rVpBhr,CR @h )qq }cr΋΍|xZl&ɠ,ѩn˼{�8Nw١V�eiIGc&ϟ$csE}M b:q]%0_^֙i`Sz , [RT'% $(ݲu�5=S@u !rt"{1#r-  vFUVȫR<!afloAӼ !NNtLY֐j]ջ ΢f}w`y_yeg@ BbE4"gX7 #cDZhu;@ L.<aZj2upKqb=$.Z6DZN`* >}]K$" �xrE6N،$Szz'R2}KT�㥤.yW߾ ދnwL|e rg AB]=k+'lMZe&zĺ~Hhg3Ç;b5R4ij>O@EGNo# l]Zgj`UlfH^LnUV]f ?>稺L?;|AaIq%OyS{sa.?2&$Yƃ}e6-\dpUo˞b׆Vr5 'bQIkv�!|.,#f_7n'XI {Ec ^mѠнu4)g丯1(@-55:N[zrq/⸍% R_|\{Ak>ᚶHr)+8c=pUnqw�F4 qFU%y�"¨Q/Ժ3:fͱp:T!}*@_>]ͱdxF}(wP+skaSw+�EpȠRH~_pe*HpϷr M*E8١(0,f iUfzbv,llM d7.9  )xi3ŴqRyVyCw]&!Ѐby-(-N%vN� \IMv"Ts]S,wlEkq(y6L}�i꒠V2+#:quM= >vESx_EXD:e"6@Zų[~c,0LlVk R`BW?-~1>�qOX2ǜ>  5y<s1bխ<0�Y*Re(%wz(#x Q?=Xcf4Ɂ1s#[ҷMP8qv?UМ^?5 PL7< ƒ`,&�Uʓwj{6Gl>ILY1Zo$Msj: ؟U#�!ܘQU4,?R3Z`'=]@R*dMo �djMMܗ? Dco/nUBs_@87ZF|MvЯI"TNB�{8>N=eԚsG�D<�j2pاoyR[q<WN6@n85P~ iY͚3k`} ϿI-=2 >sS>̏\&quZ(ZhpmPMi0 d0�sT<gWs?8e_ EĦI0PS9-mQ,;F{ N;HKp<5WC۳Ҹrx~xH rV',`LZ/@ZZ[Fcns'/0j]F)Y,uAr:fU �1{E?j:U3R Sak~,0lUӂh]ss&l/KI{oiSˁ^rl 6gGiZ嶟^<?@V_$PZCǵ-d%,^>�W_^Xr�V#'Oڹ&!9a3|ݯ5E: Px252w(t@^O41~Q[(xXO=;6[i~G%^˓rREVaɁiȜi,98THsLHa5A&HO2�)SWuN8o\ϰ.:P˹t/&ޅ+0 ڵ2H<PPľ7jR=L'B뤯hOLb٣hw~>9a[b\+f h]?QZMG=Hj[RöZ&OEˆe!Yb5 !;xa5-96[ߡ3]ZxG&&sY D}XrF[\#\N4 /p8Kz]{;(*9 W)Bez,@  :oP  =zW(L >(2ir³vL{R*Y:jY9-8Ba(8 Z1IOuskY V0n|v=DֹaW|/<ZI+& mťs[!v`S'5T:@ !ZVD#|^sAɠדgѯv_π]Xv39egX{1mVh/[(@xPX#R0!JpPsJH3e'yL1~r! +4Ĕ(գMX?ԈEPT0yժeA8C{}oEsrż&GdȃQ:3H ^T/Vڱ6W-ݾQ@?sX#ei߱uӹs%nn?~#3 70 !OH@ /k\br�c {j. EJ>wmpR&Iy)h{5 pg{BS Vɷk5/Ye-kg_ZV�^BR<WxU-T`l<'z?k;ȍ`筰(h;{Zi !m@p >u= ds3IgsuMm-�g(G4a: X!Cq1 {7/zzvw J sUi0AĹJ!>| GcrQvn>C7+ 8@af~Vr,!"3[Q^l3G'\9:Qp �%{=@QW7@Ӎ<be @84RjoUW?~9zg`<H}:Zui<e}&杠`RYcD )Zw^psL 0yP7@U>}KZY(8R^2nC,gG$ j c` /$쇾{۶ptCõf #e;�ڪ v\>6}|pp*҆{Qԙ~-2AcNdϭ+â=R㷗<,w|_QqM8uJ�SWt>e]g<@AafP5BMM4y!:F]ma"pDfJ'I{s蚗�D\=]2 '7 er+%zIp{W2 Bmd\лnܓzE <GzR-;"&(]6HfWAu+ҪJ m˻limOA.!"߲"Ԑ*}pCC d1i+O/Tk� W> ?Ә(DPcKphp.1B>gD!nؓS:o93a]z0@c6NҏdzeTk\6="Zۓ' R=t> I/rROK BP鄡y]U4}9R}rưL�^5Ey?ܗ.z0U (DqU  P-C!I\6~E"\yΤדsY>T0>eC}<F/>E֙Jhv!bfC x-9aDhBWYL:0lkޙ&U09Q[c|qƖ)ϷbZb�!"mX`Im'`5'^kbd (mvX٪(N^sx@ZXo'*-C*U oOڿ׿|̿kҬ Al܁ H] eGmO<R֗W޽m)xCS5 (uLn"$+6an)R\V,b4M6Lcb42!GL)x*]ᒣmN6R_u_ �>7mP zrb/`BqN)ݥ^{/p~נeqN+l*}~IHI׸NrA)EUػ)oᄅnGd|pZ Ϳqp hx7ka8z?| \A~p~Sݿ{W0+ : [^G\]9:-s{AQt30 òټelar~֐ hRa 6Esi%Y,ؔclD-Sڷ-6Y l<\ n�D\/C]i=!,RNV0ڛ}\ǷERfqڝcg'5 v5x1 `� V>4aD4A9z_*L^hSM_ʾX*fHjw:3=0=wVq}-eeꮰia"L9ܙ^^wF6qi.(UR>;KrL^.c'0SAdXG#LdXBzxN\0GZs&)l^d/4q "X'țlr eѾ5ϲȏq\_ZZ}-zU:4ʯ8YsKm[oiHmly<X߱~˞tCT56,*鷅x885vQ%|ߵi> j\ (.i>L.uZ2[4%k^"Ұxrv÷yU]|͸"p,.TJN B۽k5VVÆnADpM}=9J 9V[B`}[憋I96|-Q<"௺㯡uG2xi1M{D4 0Xeevhc"T\F>< tǰȏID c_%W{8fKûRʺ CJw}mKL,m8JZMm}܏0t}+KbɫVy0>1kH^l[ ^J*3ɩZ߱gI~׷Exhk? @9ߢM&5)`|CP E!}#s=SkMŔZ[<T4ܶ Ɨz^?-Prиƈí6MgӨõ{:/`K¯oՙqUk:露&#;\x䭇Cmֆ ޕ'Nv=Π䷼ߛ<$TߪIJXm"M W @D 66PﲲN2 <(?J3b,bb8XXq}t ㅃ|{"BU^.E 2i~~ÖkY\|{e`yC Ъ[((EPy> e{ghLw J0((rg5X3zby ΣRة@;G)~+Mo)gĝ ,Ę( 68K-.q:FO㮞+Xͩ=b}B)8Ll]B6@{۹zf|[<FV.C{=NjxnK[n=l#�+1 {CyimыZ[,l' a*U"%@"=bjج`vOɓ=v<Vmצ[]۷I>ךޅ¤(c 7SKx~Ѽe(<g">)Kh5gBpUzө׶I9Lrmgl':gS3gd4[eףsiy,]#UZZw-[na0vS> QAt*#g?bcY5`,y:ԎCFe 7>ĠTr{~! \-9vASgC9RpjE.Nߕ$.גpzcȥ\@�q̔6PApXE5ӻ߯Tϰ82 y"_kY׺9XsnZ58(c?&Wءod2M|D-k ؍EGr&;;Sݓd^gIg ZkܾA <{q(z$J& Sf^[)ם &/Z#l:s]Gv�Ã#_5zSg0)|sϺ2+hmM3wO<jt_k�5v4"*W7ⰽEmYJ+.Llq-*6.M@Y>bK|.<Gk˸G~FlGm>øD͝R)W nH8�hSbyVbY bU ϛe[֚v#@:HرTUZ_У3sgo/Nr,S}V(/Աa)0Y :ω ȉ|Ӈ6w;S {=CЬ-@t_#9Xݴ؇!ѤyuU@ (WQT<_ mr:|g.y/}WxՒҟEE8'xika0ͷؼiTa@GR{m^kݷYUkU 7\F ܟP( YiY'ˆ۲J&\a-) ,C6I>e7e\r/BmV^k;pz}.Xn>eo86Mhr,_ P [&IBk~]gv Br7L!:1}|2(uў'^@2v jr4KlD` ηYj* E&y ^P}@ܭ4X/fP$_os8Tl=6|V;TԨ$,kKYv iT(Dħm$ٍջ-Q6,0nmcp]Oɣ c+~LB::*-&6~̪$&u{$5~dI4~{/V7;DfHX6X`\.Ǧ9=O~иnxz"\,5m^i6%\ {(i/2hr=LNdEKݛ}N m\|*!&So"ySſ&1yPѾeyz5V~="2`}a| k7 hs!uD,~ VowdB8Y_X ۋL/#ýxD(zt0Jz-4,FgH> uwqj:^8`jdTb"UjUj�{gyYoz?.?,0VZpjؗ6:IE5Qѽp0 Vpzg| P/t2jldFQG+ۚ.3/5Jы~x2q5-ghn3qlMVW#^8@L~doV 68H!@LIO6^qq{bJ{=C`-X? ayxI&ܽ4Jttzz@?S]T TKіf6~K ":@iOCɻKt"@dDO퇪c`+ť<3}f@3gj{dgE`P>Xi^ ѫeBf3^{wi͇_!{S2\ 1 P� OE9c^M}O#R檉`l-޴79iʛ]lQdц. @c, ^@pcK^E'- =I W" P^\<AD1UFKGV+agsh] 8|oRX896zd$m?pc�f <@K Bidey"'ْ?xz(;lquf_Tka=GuKe0"w.*_L5LD=B77poxf2|J�oҩ^"F||{w?3H2G_Pig2HS,wZo]|79w8<?|?Hms6@x$E�sp߆~gl:Ι\. {&cɞ~w}{*9Z,ʮ]m{/x-{wR;M6*n.簀(Gglm�:{t2iSc.Sa)U^9Oq^1)mVO˓NM:q׼L*|wAOV$'aZRf2rI= )!6P`K%<ǰ&o:5\X^u߉e=pL ]Xh ^>Wm-VLu8[Jx9hoK>y3iP70$u ?{% 'jx[(4yn l|FS܀Be(UIZrj 4׭(H)޴λV 6Λ_2˗>8z~IeQl]BG|VMvW9*x�6Y`ڼ2ụ=IrpGx W>Qd` "b ;Aq9(3eu=Ix֯tgk~] j6+WS Tp5 ӒA\VkLj`ׯZz>8H: @SElDuT6y"C8mj7{߱Aff)/NWRwIt˦|&gRg"~qEը{BWڃV ]/[ީl}WVK+} c/NQz˻Ze 4ȭӫ!La[jV}bq]㎫4Y%`) 8Yx34K%zmC:;@>vXƾd3*UoZA2&a\ c*l/0T5pxc,κ8Ctpl-n^S9[6c̞; }}H3㖼P>4@q㬋"/_:+r`}ט^p"/ P$)b:^:˛\ZZlm#E^f=k f=WYeTucNZ)Lŀ9urO2Y ]E%S1`=>F8dz8gǷ~sQĨ#="jˠ_.08E}̮̽m"u.=^e{0/<5ۦ7V=�!jF nw:TwLk&|\2-4÷{Lg;IJpZs�gޕ]K{RJ&rNtqͣ.͎rH `2/ Jvc4}  �lHߦ~GނĨƓ R)'W{fVmn.6YpWgDJ~�;ȇ,~0jj.-)!ǭ$־P@}4VQW?b58IY(jkajm\ZUf?=yj(? c_ sO=jI UT4{aV/Wo>KRR4Pp~.> -[K YMKH>v%{m>?m<hw^ckb+>Vq*ˮ]l|™LA=J<�a)r:-&Κ<g'/|ǃ�FcY*#XR"r]U^9M~&]#|sWSOl’͇q-!SeW{pK]'?:z ,0An9oH. cbEn)3| Cx`.7hˎ)s�!Ǔfu6 !{l%l9%c"/Q8b?Xlڸqպ0l`< E{d,/n>J:QYAQ%JOQ0'8qm)xײ0g?L*�Щ87;ۏZBrKA2ʡK-2^XR*%)%Xnڂ ܿMa)R\ƾm>D̬w}:1"*kT(iAŪY_xDDg<N289Vpc)wHFB7 cTm�].f\{-Xl[寋g$d&ZB@!bJ/*} zuUo;$8�O6z6o[eM7{U AފqA |y^ӦIoWwh_:P_kf>f<iLJ(9}]=*+6dy9:tƂl-$YL]I>CyjlÞ_9eL&TQx? ׅ\;]C~Ndy..@s6W2Uy6 ] Ygwvd�C�G#=}JcExZ[Oɹۻtz.|>'\]qؼj�Yᄟ$_遤Φ7Yvd>!ZRnw`烢6xrbnO(Y( Cg"4ٟ4Plǫ{ 0~p>'(�39O nj/}, (+(2wN<DIEpiƄ#>͘o-wyd *J[8Go(@۝_<B)=J}-v3=\X'(Ȁdꪻh3 .˽^ g,lgڝs(Y.~+.4FdG�Ek!/&}mM̬I$ZX{?HgK^'/Ce7*IW5nk53gBlۖ~-zd(Es#ON~Bu> ͖*i7\q^7J)/?]|n]0d/DZ!U>&b$>%r! •u5}/`h{IU9 Lv9T;B᱈h#ѭdMX=yh$: M;"b}~t;_-|Oz3{379r>~Hl~k'ˣdﱆK tNIZT%ťGGTOFH 2,{Ĵ9q[϶V;N3O]Dj}8pT3(*U䛍)pv/nڟ_)+Xi}P_Έ4iX`}"5MMQ!CY~)2.*Uzca86ݟʾ u(yo ߿]h!$r?4t|3y﹜e;ɹ0M\5@kCzwQ4GIѝ'v/5oFS%]"z5eɹ[@.IM\HGb#|Rs|v&)Z2XNY{Zvjn\5#\N8,r&3szҠ~NyXf[o-~?fD8G]aPϽy>Ft: C$擒Ԡ`v[yI- & n+6闓?9DY\]@P>d l73K\3P̶ٖsK 28 O_Ǘw_+`}誨>_(d3I&>z\l,vؔ'd=I%ĈRBQ=$�]Ya>"\o(sFIsլac g8FJQF02v|hG@?H5�h~ 0ٝ"Y^[I,kLam,2qXsO,zb34Xyތlץ^7pa‹rӓ igKˌNJrj;:jI㱒`&c w?͝ZZfzfHTوe?rڑy͗'^4Cdz&$/ϋP[~ .KAzN>^۲n.I/>oh~.x?gpGd[=w֌SSqvGpN=3Jf&, g3N*hkw ZRUiۼ_ ?8ʸ"53J `ulHw!2w05pas+FNΐ8=R)9ekzoHAJVA_q1Túg ~ak NTjV;۔DB2B䗁!? D^ lQh-H/g-> {~jug=wgy ތVJ.΍VuVPF{dSA$aꄜ}hou_nQֽ̑`UgpjztI<Q Y(z8QTzV#. +<s;wRWҴgflnxeWjq+_ؖe \,.Mn2J& 3?= l|$Q>HsC XmNs-66Yz_mr۪ӟf[^-9y( a2qG= 荷Yv\R16ۃ!?X~H�bL9]MfwY%8{$ο3],3 A35^Hk[&(sڡr2ݓ`}^Ef ݸ5 en-V6ͦɹs;'e<~+T#Nl ȴ1mT#rrOtf>#nlѭ#g yfY$2* zwY4X?HԔS "0}# t'8zÁT>oomi͆OaTuPwhzlz9t6TPK=Hd2L}N?&>V+i)؜n޵CHv,ba0Q5pW}߱S+;< W$Nsecz}Ը$žf{�VmֺB`$-;{/?f2X ^7X.d a˙_3doyb$zXox>g 7䁦WqVE Kjk2={5Yz+xTl[HSL\+t`l]"sk(U^>^ˊ= N$65�U2͆{.WsOQ/]`ybb(_% |GHϐ<H}@a|αMlBJMyTj&6uKrܪ xԞkvD5p\*?Qߓ>e�{Y;n ƞT42-GY˖ZfO"b9iU(פս^  @4^Ѽ/U{&+nohEͽF*.w{ <N>p~ 7椂<˫[JmOvg:Pfk\~>}~7e#b>r:XHͦ X @)b~HrOc8Q`}9`+ZW9î#I 7%8glی^&(SSt .`}*4?FuW,@.:k<4B堿bi\Gyve>l՛ƟeO2,Ef?*oFh^XlܷX/x[ynJ lqãѪKk.3ebh<ؼun.>lVرˏݲkɘ^㷨qXrdSh*뚀0UCN^ɜ&} hɗ$-&bT8V7vy?~lvM* x$l<剙+/~e*x3C(&lkу toT#:,^23x=xs6~Rk>0:LjJe{D_�Z27Y`#"2GZI(�kSmjf{r#/%1촟.ֱ5KLN�Gx&, OmbRlK Z4/fȮ7/C&"`}N&Nd{jitV60)=㒎((9E4'mփ@x}˼?1zvgl/qk |^Uep5T6#&E4d%4T7�mmn2UM| p} } \O QL5 @�n`nVvϝԏ2Gq]l{]{\v&{,И]7* "L2qOpљZŒ>Q1qEOߍ (AYs�ʃh oZ9sZuW6ݧ3198^d_~Mms&4 I"],LNQɃ*撛`I%.vݾ^g(슩C ЧK uTxȡx]]%S;r\eDY{a:9DSbrx5t}#rg9{%k TI�%]¸qt u_3֓{AGg,/uz nl\_hPg@iWsrVTiq¸,!4;a/cx0ڲYbz@eb 5{jAdGpL�ʚx E3n O/5+<1Jx� }j%G"oO3OFP#Kҋ^oE$^>CP ?/E4-F^Bc?OfKOZc^,\�D"lZk @>' 6`Ns DӔb-d ];ޡM>0L_j#<T[]˜cq^z+DL`~.NP sMF$&Mmc oOF'yCh?@ie5ϓg8g}t'8@e2Wij O@&q8x-/d ֵ.Z@9A&{[첪2?vY-PCr|@72[Ob9 %$ӈIu\rt/c+=d}6{gTd)!ܻ(]brcۯ3lg4̣9]5`�L\ZMԕ)8d`�;R00m&ԤxT&t| p|=YQYZhXaeWm/{O}?&ʹ9 &WD{W&2Pݩ% wT*ҙ=ʲ'8Z\ψAŝ=#w0[v&۠8CXz=] +5�>0]/tb{G7C3p`>SUj) K)#$4@[ݞ!9իV;X's`z>i_uVx˓9ztf858a El,Ge`RNe=,E>0QQ\p6z0/6d=. (Hy>`Hk=΃'N䎀*˽}c|WwO\P oq9R˔Mmou_w\ NeՍ|=A`}kvQKY ױnE9.jsO&oO3`}ph<ZRj2>o.w*>@!{3 ]a8\]5]hyc�)1(*Χ rXniz@?:nx8 A.y h,konJ|y!a=vy}5-1)z¯s藭_{y8A 0�̴=f~ P76_ '.jsOs /jo}M\ug}zo{ Þwb n<@T욹m8{([١xrGE'})FȀP]{im'V|h^O8N܏\IǑY e\6̋S-Tl2)O 'XfFe=p i" ˗m<.Ȋ`jxC]ɘu^l3[kP1&U �uIa]4﵎oiݞM Oo �=hpP~UO2$xD|&ťtiA'oڈy8䜏 /ȿ>#\bN~]i "p8\O@�ۍ]-]_t8@n%/ZzasJ $!{. PjxD\Lg];Mj*b@ %\ߏ^5{r:b!VZ{o7�' `$*ڹNT<@v V]ٲieD`+yZ_ٙ]vt{)f`@H5'gFZ<̨jO,?/?kV_w(Z4:"V՗+^iܛôg?V3wNr=ex8]*:+Yg$1a{[Rq*uz boWՔ_cfǶψ_^vn>-֨I G8g^:pYV_[U%2bp涬u}=a $:\/h(\k^8]}KIċ8͞z%qsxG_&^8ڄ f3ة~UbWbb֒`* âU7ٍ/ u)߻dGiq#( o3lC/8P٪lXoʞoeqW}K(%<n pT1P8v2@kEig~Ƒsl'z1&sdD&c[\*;t>?UP0XV:@LI;*Lmho>qd#dUm[qLg=757^!\rb%K�:#;=ݹmA)$٫ F0Dsr7;N2Bw&ajqLW?Z~$U-Sx$:�%\6{"<ss/ +(9tB_RN*�.c^bI:$ qC{U|ͰʞE3篝^GB3 _C8ǖ>6GE/1ԛzC'DSt0" LbG?mRy@gvd,:&Siv�io=f_Yڦ|B,Kz V@NZc k87qz<Hxۜlcًo |}7a 3[mܺiX.w9I{i�Vg^3 eBg/D*2$,ъ'8u`` ),N7kb0cX+mtTZ粈7(ZQ1Agr�ݫ[BJ ' EP1 @X*@lbpB ]P3/>UR-�Y|kzj<O_(<,t/H2<OPp_tfPpʹU$rpY0A{ ˫̼`?'g9S'nj\l%nqКJݚ}\8WX9Fٰ3R7^8&.Wg=u{)K PLMK^f` WX>Q]m8Hd3# ݧ4]x_۽MM" vJ. <q6f[[c1?5G+{n5ľs1T)'Zk=!oHL'yRS=!ֳG޻<om3Ӿuk+?G[jώa넄}CA,~\^Ӊ=󻶗~3D؊q|"0QIy\z &íF^ʄ+mN39.ZS5f*Gd'PGfIxhBSk7ٕ.[ߡ(<AfPkpM@<֝ʹݣ[W=6%8og h1\ć\*~g>#8^%t<+V 7j#s<g%[ֹ֡8nensvV|HM @B|@'Zch`sكֹmG Qxf^X3s>EulLc߃GM>É`]~U|3 d9Z勩_ZvE].؎-L%<~;nɥca?G{CI.`}ϓLW`=8Eo| B֫0Ȣ�.9 2V6ro26X1e3] nP` G&bMk&׹srGo qY⚵\(}i z}9�ErXuZ oFl,5e~g1:2t)ELI-88 u4fnrB(_d1c4WhuƉ#9 m�8 0^N#.ymUY. [jޛHe~Z`XU~R;PDPGtc3KaK詚ZpVB: Ku5Of|v Lyl /(v̳e_?qѼ}faGּ�{ĝeݵ>ZaK8qt|֊oAh�6vze�vO5sٳ:afy!`o[I!:՞I)Ϸl~g,⹳q9řk"P #<8rĻ Z) [+|q<=#q; -{|mf/D8�&a [{X�9Ѽs0 VD ֧ RcViD2H}H?'wڊ`+ S.T0l�!sd,If[;1݈ԫ){5;;9g=.}(>XF4]DĵJ?3S8%cv@-\ ?XVNѵ# ʦ-lq=2bl`!8N,*q%Z.x Euσd2tr|YYKl.`pn[ Jݫ'].pՠm6@'&B@7Z9S)Xi\<�`ͷM75=~ `a=�R\YX>@!:j$}P/ӮpYƎ<?f?nU:0(H#@|vͅ F 1Cݛ 27.:P e >AaɛiS#_9j);pP87+lj3PN@�QX@ p:& rYXW}B<raE x<nJ;g*r*SEDNavE@ڋi`5Ryzqt P(,N0JsJxS#cø|< 5 A߇W#e=%(snl 6޻Ȳ#W2whwg00oP-B.-?<1Y;Cytr]`.=+}:?oN@H5H5']="i֒|0\\9;؂;kACa<"D̂滐{Rѵf:X؃4s fvvlf trJfs0pab\P<JUUv1\/yXZ>ε3_u FcasG*l"FpGV.\蘛iӌޞ;95ԃ[ ,|&joTb7u@zaJwwq:IrMwts-=9?w6>+f;ibhY57u/ H�C zZƄbykAIKw!dNP=hhEX {AMO:*IvS+.h3۟cԚ $QHspJ>kʬ$i2 q&XUwiI~ONCG{{Uq)mniSP_B?q x/RjH> N L}z|B1+;'B9)1Zl.\yՔ㦜.dXzZɌK6. }ĺ5ωwiԷ@.< ӵ eN{Ѵ %gYYT؄6};`qnQwG_!K@K {@^#cH :1P6<G6-Ï)ԕ]: L] 6K 58:٥չ v ~’{Ătq<4ms6-+IedI~MÀ;l6? _ :cQC9U_$Ywba'#9V8�83>(Tt ijouむvaiyI p} إ,p߲,\Ii>l[Dܦ-NBΧ_aqb�\vBxՋpm:R}^5&QiS!gK.䒦[|Cp)Ls>}.Z#V>fSp/@?cB$`YZn<ނ} 9Y^Jަ's}?cg4=K8j=9Gץvc#P *5d(IӺdřW0:GzNxΰRqٮ԰ r*,84_x^^G\Wow}~%Y>p"9 3Y/:�B7Als:) -87وYVase:{1?{_%IhkMK/lzzu5DWDnSMΑ'5"gc5 _5C҉]]V!a:S:v!bzyaKQ؄)H#n_<7G|rr&8o\8 +.j:vA#�Y.Ysed؛4| ҂ GG%.r{^P-ƫ IUNϏZ?8p{tra#@>ox_f\^5GP@kw !yLţ)bkBE/| 8beJj|dŋ삵$Ǜhv1u<Y}0wV$c 5QYhmyv[j`<GQ-k47}OUcs;lw²0R'u2Wveւ!&xϑ&Iz02uEŹ;Z?yT6AYH8.\=DZJ W/spTǖ2Zx@~[Knٱ/3 |dF1K(\D.osi!l OG/;Z-i/&$ xL`s+*Π !xD^i,Oa)~X ;<BszUW>'@&`GvA7n�I: m*IhVa1)fF\qdn|wzhES6"3)۬ .#A׭@3Չؓ<D%ӊ�缣 -թ -cΝL&]f<1"y ImX@ncAy (Mĵcl@e9 &fejnP)ʕV\k6 T`²îL^f痢^6AykeH,P؜P)E9 DVGxi]+frZu׻\<sCX͟rD)Uݬ׳ӊVم,PI$zs?mJnM`BM@2qׄRN+K&Z7/Ǟ$L4xO+|H VTʵFr:vA4_2L(|ƜB 3(u*('ؓ# Ǐxe|AY{ΜvM�4yilʜ&6w7`�*s~:&\?Mޕb<'dH(gɣ8<zf|n\<J,ws9Zx>KJٙ&B |+'1~1u6?j?G|3b{\}ta mcA \ϙ >ɵ.#/bov ?Ĺ|jiq~kl:3P}ojS4J=p7?ͭp>-F͖'BRy~ {;s~N=<*H5GAs>R؄^ i%yPPxNA_G?< C̏]y.Tf,'ovi2T`=UOdXqfS/bx2?I"*s[)lϚ̗;˿{,WYǻ 77oCE2)T-`(Rg'ppk3.$*',9M? xPx>el?HwԨG1TA RNVmPctwB#X^=QN8ccad`d p+|||?PxD:Lm^dbzSё߇9NT+#keiZ؅BGLVAԘ-lCu-y1^ O9ŠP,<.C,R9#x?_i b[keG}UvamuG~;?ze?GIт ك65pzɅ$@D ' 9r0vA:y+jlNPꟍ%H%n,&,g]\Cy1hVRDZb@홫U96%gP:@9N@dZ&z24Kz͡yw2pnգtFNTxRNw=,̕72RKsWf,hhMp قNBwDa(xG{7sw: DQhVx@PWNRPw0C<Ӂa+q}> 4Zү!A<FzK: ^R9ob(P^9z 6w[v1&Fl[)=~.ך9u2?р\rU#E)ȵHah U[.K#&d"VO3| ^K0|͍b3OrBVfoV0YshʜLë|4Yã'} EU5WQ,::妥WvUVIR·"rol$NZL$r~#iVVJNF.uz^/@#4䠍zpOJ][Ul \c @�V4W\A {ࠅ$;ܬ wvS4* 1S:å]Y!Lڕ&i:<hng,yWy}kc>=? }ym΋bb:뗒TNZR Բpan` Zg˷gN*Pp{]uFFQ{fr^EG=uoci 1h875l;lG4zTJ , V =JcĶ)J:룤y.L<Ieu#yY+lb.>o󋕓,] ˬ/aFMe!aJ.h|zV)|t!؜>=V2xUy RDT/r:Urth-m\@WE /'Yo}Zv}fdeў2;5?v`o-'ÂmhuAS ͈\ 4:[՜ۛڦan` & j9TaQ#zB 29U8[*psvh C?q @˧)E?t~}q{Q QgiyP `kܜ294Rv7>@DyLH4`)Q\.\:C\OywUcB Eو9`9myu N3?Ta҆Y.{!ţ03$֟ߨQ7&kʂm\ *4cE.w"<(zKu<ϵ9 ]0EGE4{QY%r7}mV9ht\JOMtr7zޙq^6Dy|ʭW/byk~ B{m>06J8Tv!TAÌ,&zͫD.޵S:9s,) G&l쬺7O;9|JfbDȾp:sRĵ{ӳ\?]8j/z?1G&IXɧKʇJFPF(g6/9XdfzW�](,*?\Mzv5&r)qB,u`dmX,`4.-"oI3мk_sS^]Kda-W8WJv.h_\x\&kZΟ'ǩ<8=ԃ;8ᓪӫ?|X<+Qݏ qȅ=5V_ApV> wQ_Fң=7ar뗷^θ.Hд -y R#l 9"ޅ{^m嬻 C_'͑8Lg \ CzڴIll~: (IBi4-yj_yU&Ҁ\Ϗ**OHZȌ5j>H0ΥtJco#qxq\%cJ-6w (u>\KyXC\4-c!L bH+bP+G{Tr9y6ݦIJ{*4[' C4uo22O{7lM $';Ħ>4|Cli\(Xs)X$GB='BS*l†!,ٕ+[ ÿ* ksYfkO b-̟S?ϴgANR`iœ`"P/1r UåCJ"l~Z}jђUx.dm滖6Cqk [w\84C`KG`կޢ1MwCjrWzlFlO l&z`cʥHMe\@e7g nI~3xF}4s_>o87q4Gx[Fu_ ]@-2<n!<[8)ۢT63^uӁv9oA!WMSDS}w(<ߠ*VHCypDsq-!2˂ǘwaJA^TSP! {?BvE!kkٔV-*8R\nV7@32P.5:ch¦Epc C[kr-UN yZ=FmI7u.O|C,XP>%%(lB$4g0 9>Ozt݃T:|С喒l_c[|6ɄϬ9ktu5} h`'A;UTsؘ-@-A#j99N<0>u^uNR~Q g%U1-էE9 sUi|x)OGFtܬ~tT^9fdcEHIf.][t2/xA9 MMEeÏ/uضr (8rD,A5R4T +lMZ+gT M} YI .{$a^#ρÅMqXdlbx\\,/<-n"F(3q.U$0Lo3ԫ \*x%d8m*ZmIƻ`hˁy:vmD(졳5 pN_(t-n"~ 6A13XbO~>#7ghilفZf-91[d( |cEuhPOG:"zmZ}v#2WrE2F.h=`][�[xPs›xM:j4o4/= B0o8}>~|~!�ZwdYޙ+[PV<܂}@t-=p~~C!j~Au\W\<Obw*<G_wnR@a,T\"iA "4i>n'?ޢͤ-:4-=B&Xnqt2 @\5v_|D\\|<ŋgN'#dy>R2+UUʩ4d3meJ&�B 1b+d)i|탑0*l{+mOm=7mV NL[Iz Ջdh {V%CHbem<T3szαv. Ȼ#[r\vSep:s5 v9j@Ϋdk.-M$X?7g2ts&Xx>G^ uɨ-.eƁ:*oR"XIʥt&瘇e)<4@KQ%nW2<7Z QJ V҆V'a!|ELȃ0jx~Oa% NsF.tp^ p>%Cp\~+Ƹɩkl>>v|-uM+x5LRA(ߝWlt:IZtơ Bu*0 #yd:\IyOhM~Wn 0n\wYBc!iDrAe 7|w}+. r*S6WS7V-x=c)h%]VG[H燧&*t' O9!;\(ƛ_ڃh tT1N hP /R( VL/P9]SbRx@1زr(Xjp`S Qf >^GU;$}H]55bf4ee|؄8VI'NE}L#?i -  fVtM8v@va= O d r:;'7m }h6OO~:lwȏ2v=ܝ#U5yO⪃W1ei>X|kЈaN&:J'ꕷ,.*CMp|SsI>^l5: H2, 7wZ?꜁|G|lQ՜ΝmsMPش1կIITÈ$s؅{R zhK)xfI<#(>"1|yJ'yגv!ìH+/ q ӓ.w7XQq<+;Mi/5jM?<^^xrqMK][ #*ox qθ퐠MF{`* pj#.<gi~{a*qݛ=k;!k4ysF/ !<JjlK+(.xp-t Cȏ~cs2+<JG /i 0�2xǞ_~f^xc cb_ i:|GD=/ϹK(AäC&$ j0z $S8*S c+_1 b.&ԿjFn WWj_i1-X˂m ʂOwlhT~ɘ91 ]tnR?v</m<l&ZMS];ӆN]M[q"$yr~q?4O=M +"LcB/LҨMIWx4t *wk ]M&3wL(y6Tv1l~Cs<K(xyysVϿfh1I>Jz߲ZaζhY1T~zŴɆ v7:~]tZwS4 P™[ҪD~{gt~ P[#!aVb\trnխ|<̗uZNV#bOrPWĸCF=hJ/ύL{bo؞_7)Nh%) V\'N#'N~5'd;ܥ`<o;.u%57›I& Ǒd<br\ &eG#S24~??/ۿ__z˓92uGw???4_}_?<|I~~wèJz?eYu57(]>{ZEW=m[X XF"MmZLE:ێfp</{|Pj҃C^-k~1Vnr"UX8vݴ4Nia^}{ 2i#t ZP4M ozm1 gk6M`bdmZ:+ɰl=z戳{ 1.7SM +/}@Bڛ +JIfPMmk M8P=rӦՔ{ko.8goB !;VC};<AKs&{̛ Mi]8!g,C.Rgc=>POMw2nlA=l6&]{(15޲ RBqpd2 o;GAPyjuՃ찶4\4dq@,~EP \Ay0>~aq9`.=S)KNg]mJmCvg6蜡MPCWv]M ʖC,Y={W'n۸ uxMljveǿ*иn(^<uW6<^$ ;cWmZLFCJ[`W•>-m|f [FwMFҢD%IV˰pqEIVa{|f&®tMf՜uD{VJ1s ?q-5 hn&]>`ig]Xх[V 4ߗMw0Bi5nRCwDOl-kG?lqj$qV3qVМ !뵅ڈc?G Maj0) w$?v$`umד:vm{�D!eg3wJ<L9Lv0YX =Ra8 Y*ږ}oBU 6-6BuYMHQlZoH1aԬ u8[RtQ۳7t{CNiT.0xGf%CA3Ҷ 1d6ǭyPM j8 ř,4}l%n4 _wRB{1ǦqLOF} t_3ҦB4hܑl$E17?PYyl@jUݷ+,ǭZИo=$@uOƕˁι-ՌԠw<oCPAb u!s(wڴh%='J_@i[}=5+V3Mk͖roIvmOFyQq-*JB  mߴq}g+PP0PߓlҝEheܖ}# ='+7V'ɞ̨ ʡ5Mko:4ӕ#=z6Uچ_ش�gHQobڞԡZ-xlҿ)bנ%S=71+IDEvpmSsf, TBmTqV6-%»-W~c1q–XMe{n7as֞xľsтhظ%?mvM{s#^xNVs7=-"t1JďgsL�hO8n}O`ȄVL}Ou,c{ⲱpir�'mZ]"MDϳoZ͂dOi|8C&+�:IY3ڕ��E8Mp~[P6Q0s@=; Mm uϓ^rw$Y}v!mr4TG(9c:6phT*t#}2OcVN<P{cl[˞).slx[ lژpTR;^ "Ós_b7)M@4 n1oLNi'z{%%i7X6AAJ13 Ӧ<`IjI؞ažJX͕QΙD> [xLhx>(з$#{!0--1hS޴niԌW~f ec5oY- ݩ{>(ش>n|q*6ڞY.7Ss[$5C�d˾tO4߻jaKU#`l|oNzw>ol}K c!gk%�ZO_Zi19O9a`NzzMN{&مGĖ<>00~ZG5XpOo}TDe ΏPsz,Z�F4 6C19+mtoeu=^HlK溘)]"d=i ݶ%F?ڃ2!oiŻ6.C�k:SoᅴH43o9 '? G{(H-R:2ٺ GFd5\[5Bܴu9 Y-DÝMԉ.`? 'D$Km1R&Z#'V#GBTQ7^t)LHBb1Mc)*.rrg#°ŹBv'ݒ4]pT|jl0" t㮃N{p᲎#oň0 z�"4ro;VM*A/M:lGdLtbnٞՂT0{@h҂__W Kq.UEmFRb4{ KE j@<0\RI5 EsOoXMmm!54K6cy:\L.=2=4!n`Gabb>7L{8ՄqӉf߮4+7iHɷi՜gMe1vv <q͇66VsBR_~6M  yZmژL?b&J4W<Ib7=fw1 `hKiñZs ?[Uj1YPՓxOa_鱘\%V7B(-xj:N,CdnñZ4 Lض۱bd~,4gM0e,+~t7-dH�zE<ݑdiBCzQ@A. >0%Epz$ؖqg NH0ū?bu H=Ӕ.}BT)ź tGMzxa=TPwlj3KtW8 Sc)&m12Z۵S#LL1gdYƆgƍjg&Vsî{x6܎=g/-򭶋~8C)>Qq :%mԌas0B]d3V ~p%g=vhDr|'g�oţ _6˅b"GJ-|X o[́Y�=|c5=)+$Ey˓-$hJC6l{4j*#n=<3 I=]rDC43 �住`5$XÝ3V6M| ]1kq![@ljtҾڅF\{S J=D(MycChoсx)(riKEDL#\$7hӗJ<K={xσ7}b[ hSXm8F}EЇ�7pjN&E PM"tSO4٣R6 o*U e5Q6ɪ:&1z 0H\G7-7:K�CiKDjo $ʠ*h-2G{ F({jvCi-H#=Fx(n#|CSı7[r>~CmDXl8E.b ӷpk+Bc)=@Aޔ#Nvi׮{CM_ }Huz!:1qi5S]{ ھՆ&{@3YV(xڃpfO A(gMmR/yymenRC=. -p%qb]lg5VblO~6]a (FX}o;oZ }<&"}l*yբc]t$C(F"6mL�:ږ"9{z*b|\>߱T49i1,u۴x v B+hm\4lDnv"#mb]:۵79 w@:h܃Zn4V'܃Zh}@�H.H{lm GA̾6uw ?v& 70^IiD?i+oǖ\U (c-ǃӃ)p}|W}ϙ(tχn {T|y?P/_ͷ=~w_۟?o?۟޲[ޏ߷* t-ԓP?{G?^g?'ǿ?dx}<9o0N-><6Gtޜ }ց^>=<:vNN\[r[QW>/t'jԿ xv'n8_Ŀ҉w`8'ǘJNczW;J}tj-ŵiz}؉wWį6ξ|WKnqCLO\_o}?N&+r'.I))YjĿ_;$]n:p.Iu>/tATJCb#;pĿ҉kWN\k{GyHq�qxWBG.Jɑ;G~ur#Ŏ#r,̗:t{Ozo|[Jbg޾^;+2LW:r1K<RG~uྒྷORv? *fpwN�BVn~r|aS~_U~o_;~_dr'k WgL,b_<>@IuKW<AC7GOJf((S �A"B6B-ER$[>'?` | tFAwMt׌^) 0,�'w3Xw נe=`pR<n!M uzs0aEҴw'Z(qb0,` i$M# K`7?7²EP!e\VkH{_ bXTK%,oH`YEǜ)pEk_El\1SZF4�}}v5�1?ś3*b=B{ßd jZ<�WR;AXN$O|>y"!K,G'A;ZCBW$'>D~؄72\E0D-`RP |iYlR E(/ dž-& @).H1$,,qVlψ?5m, 7KPw:a^~&XP&Fi<"5LG3nv:Y]<YqMs_Qq�)2VkF0#Pmf,e\:`{ 08\Eƞ):VWOvp?(ןlbI FRh1~t~‚XP˓@mJ3/ *f@�gZ$J {TnEB L* ^΀rq6^d\74?"[anՖopAs=»s_ ~O|9M6C+Q6BP_lkND\_ nUMpV,O@dz?y]H^PY.87"x 3�,O,}=۞bæ A/mw x pG皊^86 a񱛿K[cjl] b^̢В|ݸKcIpp= .#iy1?E !!AHxItΓ76$0.D!<,Xb5hēr2Q٠Zkz#?EW2bK+B� ΆWd`Z9_ t2hld*a�5&cq06= ]-_ćY٩yz֑@?aGW"#;B!i2u�ةSĔm}Bg# `5\8&z1f}| A%J=�>3 YV_,t85Ks6`=4in_q%XkeXVhp^->4k._2*%}8 ŕ&�7"ahzЈ�YO ƻ|.gE$)D#'a ~rh7cP0fTiSXEQذ>0rȳ*@?i< #B]1YiДk~t< qp%CLƦeJ$j"׹&VO)EPf$dP@ b'2.<΁0'ɳGB նb o)5L;.rFɦijAկHN*2:> }v=ȼI2C$$ QxHkVL uŧ rƋex0s"P*-)LJL0pɀ (Pzf Tfghd >ǂeJ$}(F?CADžzJ=cS5_D*!ƌf2,L#*`)ǚq _ENcl S(\5ul>u^$o^vL^*P @2qd0K9fqi(٤pdWRhg]@i-E0Q2fEruInŶ ψ.Ri=IV3Fe�n 1,D-vZQQz2>,QZޜU@D"MԞMIV`�FkK `8�iw1MIA̮-S0K�-95Ot X_P?yu[0 [VqU<bq Zʚ�|3uپ.b0t 6_ d+쥞ev@v@�.*S�x]m`ΟhY�cf7d w͕S1YRSh8:sYYFƂSYy+ aֳBBfXPg~TTI$6h^SeM Ս\A|�-au_ Ta74r{4#/XɦQ=!xeeFM ˫}nc(:t r{ .1Kn|}MH gs>c_Caf{oՌ>@3zK>f#ѲU ~Il" I;�l [JhΚH^ $HhHtN hWW!8d.R"̟:sɴGu�Z%*Hr�H3m)@$BU쇖9ٻZMsj"(s ^.م`xs re@ 鬧<e�*D'eFq�T#t3oL\\= Ҟn.R43MRqbZ\AxiCaxp- zFK+:.<Ώm^̔ _  1jlyWjGÈ"2qѠ*h:,-1A9)@iٷ"ׅB Pp wvm4 dƉIӺ@2wH3(�&+r\<HXWyUn̵EnBg&"h"CFJ;ꑠў0Hu!5@�F=ಀ'A?(FSLR PO?p ZV[r#Rsv~{kC>m *ߧN;@z7Ok}<}j(-=}>�w e 0|�@}E 4@GLe߾kOphOj,)Ŵ�q=!_)Z$d]ٟ𮑢\%$d}pedtm‵d~ 8XH4�:#z>D3AAF"-#X#=W<YGAB[8гl4H: guxJ,Y 0C &x oyB 􈸬VRDkwyqܝ"@`PD3wO܊pAGVs/aYYEp`�-wG`lOM'BbW8dNOMCO>;/G}ʬed #_%WqMpl-iEQM,M e ]ӄ.YgvZIճ g-o}&cO!/�gwu�L 9eޚ'}:8ҴqoD»I*PNdj&, x`D] 2Y1c?":\n\'4} P�7mR0"lLd>,BOpz$t W7k`ڞt7 *iɲ_ Mw!+Rh2 Oj,t 0?u]JM$6n.~7) &anACB bSIhpDZѹe Ћ 6ˊ.0 [|a(2aT"@A[~7hI0K[BW 5^F:6NMqûJ-n <l 8*ρ@@/TǙ -0:*Cs#|�ӴRRku"ÈE!N&K~&fcYn7U~롏Ё(CH^rۓnUq /R|!bT!S`$›J uhj\A27[~5v!u}}6M E Bp%HxQM`# ugSj)jkʍlEpHR$\E(a&r񉦷J5{1 #ԆG4r@n3ZOXoMpAǺ)MףkQ`ߦJ 4&/CE(h2B~ f;:Oi?zy$D6R$jkM?j9F |} }6ƜduY"FsBpAdf)tjÎ ׉m*)f,RaQk/rAg|č{ h鬓O"IHDq5&/IpR5bHѻ8 ⠵t6B.{pCJ hw!&Y!GEnDG>a9ר6hKby !ZJ|auYv{nB=~@޽S1@*ą$ ?A5$ӈPBc4/w97-* @ٴ }EpMYBfJf'*P$spu6 n⃬C0FMQICP7qɏ*y[L5 �6*Mw_[{XemD$Y6I^#WXG]P dc/= \ʍ}n WC4+Pڱ`XH62OMiq^Z U Ҙ,aӼBAz͓".^ !)58p)4٘&I_%$]0(KLovY@V _(tЖ9JkƱ63ס`0GY'}>TҤ9 \&]G;[nusr=(֢^ A'̑quOfwb ]43KHXں2cb5z `f** 4MW�Av:#&ykKե ij+#Y~SXXQ>��<`AYҾy4q눊Y_ O9\[rܚ߾W=}"Bn$YDHs-}_GGEN_-;n>׵zO9}g%N/}k* 랞O !A4N8deQh iB OͪB :r׀ vm<I3Buaa^؟d �+-) NaqFAHapuX{֕0(Wg%mD$=.Rm<ctà?,U>1LoXbIvLܳܿVیDKm Q0i#kP!\[E%Sg]Ƃ {p33 [с(-c&~"r:o.Oa|$zF, t=*qFO /,;,=k7a4E lje$:Km٫ ax #Ad3˳S}<Rc:xpNu0IGi_GT'cQf<,˷>+H'HZ]Lm»)ہJئҫW P o.cM= Me7_A=>tڇK� L52 |L+#p˺Y һ/q}`L_f?sVU2. /~ p�.e̗l,9� ?wp� 2,0L=d3'� D3#Ұvr[/c!ݞ)+ߨ}^8K5D#BlZS@ qO`)2Hj1u"Ȫg{[:+(0? !|mB”epJ�{cE?Lu)Ќy]I?  łC}E O*ΘFC( 9{ oiÚ`!u),'Q}>ZTH)"!\ HKix&5 9k*8n�cWO$ڮ3fĔr7!CwIE Fe]SkFOl'#{ 2a�Sֆ A'Oe_  az7�+P:غPz>a6W cORjd`8כx9$&(۫-O20Q$ @H 4_γZYR(xʋɆ(#`s8.CAEJE2HRjgq`-i>:e74=XH#C�!�@%f )Bs%4m x/|L|5D@<[|Ij`.,)!ł/T hy=`)ˡAe@,fY\qAnEfxYU/0٩efb5Z:AA-:Qb`c=Xz6V:J]pitXK̮d(1T֡rUX.?9sj.-[.q@# g]J E6-:$XX?mbAH^' ޵UjNJpJ^U_ QpJ@i1]if:=,}]YZC_³Z? Lp o>c4OYY+f2f3 AS<HVe܅qb|]�#}.7_ Ww!)wm/&UgXgyEq&|;[gM[3.ޜBfZM?D[a3Qo<> &m: nƟ 4p1u]}zBՁ֯/1)/\v!M#,!u!̮{)PBKJ).ɲb+ >,ɴaiU\|xN@b4l7zpP& 8hj݊mE0y$o)lc[J|9kr$@LCp~ZՑ0Ljs ho> ˄`&f&*~8/b8J 鸓{-鱌�$Lۚ=!h)7F_ $dR$'ԠgYܰ<͌r3Dq!t"|̀Ioegm]HZ9ɡ;i$*9])HB˼~C ug@:`l3%'LB2o+@`|IA@V^M?_G�q �; �a$�uH bw'*mދ"&yT1 b9uC>p 8")UqΎ2 E`0zuw`̇e&)վ~V[Y3s�]4<;*SUϣeY3H 8R$\=E,*;Ͱނ>vr$ g$@"**h2TL ͮBA AӞu_I&R'x֌дe$ A17 QxK&Zr�}:DP$Hلt\2o|JXw]^Sc}$AӲRκ.RxI @m2Hb6ʢ$#-XK/2<? fCFϯe2у+y }eE접} DuV6=fn0+=]I,@87e<*I#|c0- }ۢ{8`[iWD"$@N=iSMԟ׀C"X 4w=t$>>g} 涁1O&`ZLW ,ӱ-܆Ye8bA knyg\@ M:l'+`8 FYRAD8[ 5Ih;%̤eN#ETw)0|Olh\d6~N Ӂ0 ǫj 7Qb<yҾN2{On@+D@?S�,0RokI^bt( TjF̍o.JH֣[ 4ti^D^ o˪?#Cɹ4)*/Dړ8S HhlAƢR..5 }MHfXߵgU"? L̔Fn8+`}w\)_k2I'Q"aޢWAB$5L"[G~A O^z(96S$5vvv(DO~W~2^mU`kthYx&ۀt,:g崒@*!ӉUї ob. ~>%@B db_ i<iάZ.L5*ñMUVCW+~f>`aA>U0m^^M6vx" P\o7B :ֻ| vz3G "Bax݊VIVOkj^ Ϙ,)_w%8<#$&5YVUL=&y k= ikm~A,BAJ1c֖\#dNpuV?&5ē bNݾZ*Pr0fְ z ZkW"ףfa5E> 1[FlMTR0DqnjD1Ix2P'K*2Bq!un$le OjZ,�@6)R/Pt{/<K3� kY20}wmFDUv>5P@< Xk) F8`q_XJ|WA&WOGB $8EµH]%ԳLV:e0ND|F} )a&!|5"Pm=Hˁb0MQDԪU Wµ1mz/5g~Z5 f=mNEF/cK*hzԻKYr`76?ze OS+@ax ֳ a:+ݍTɐ]ƳIɨ7.ҷZ&ɱUGg&x(AS(,0 Z^v4L(W71ׅB:gƭVm0+Oj_7\2V!!,qnx/C8|<r󏩏{\Rz`ҁİفW"i^ |iY,ۻ`Km٩= Sd}ջW|<7T?AAIwŖi{6w aP7 垂Rw&7;?WEI]jDR,ԩqVAK?cƺLa4 OA&Tq ugd;(!#oH{ڥ`W'@!2* S଱dMՐ J>XY&ӗB4f\yٻfKoy-SVM'lu5^ Aj:.BEnu7{$gi@#8v(:?s{ĉ^ UlƩA /s?Љ_rn<cNU0\ I/˶@J!>Q2v8}>L2G37O2vg50;xO�Pj27Z010Q;}3xR�|: ڐ~To,fjôg@?i"d˜ڃB^>e/S~DVa`0YL{zo.5vvR %r&o/ p2M^"):>iXmÏIG-y$H�-E/pA @/ ~,Zz >"fm}7bpPirx�'-|\@u3Г5Ч7ܳ'. XjGv~>鏧Hٓ)iz 9EN߉Hӗf3^OOAh'b~8+CvߧO_3<S/}q�oo|'0CdR_E eDo)?bp7xhlfH]kB,J ]GdY~TWy96'U20]tƢẅȌPq5ћDQ`6pt.GT0?hYlvfd :)x= yHFB&N7*ijtՃ۵�B+ 5TI'rSd9="!ǂ!Qʚ쒷76HSNhbHLacs5+&s$zT7(CAX;]G2yXA3s(-Nr^k@I µꄱύvYzU"Y2  .8#fsvXo%DL7g]0j᝶/Ңˮso)R6TU5Nrqf/9!EX 5>Hќm\, {;Kِ[+*+5]ABdfJE"$Hi*yHŵ34zL Q 4!Z& 5zc|]Ũ)L!X=jRmxy_kAu A۔- zDvaޣ*H}gy-|MɽB9a?D+Ip&IE,OSO|I0xDƒѽRu<.9w? +n5` W[E#$G-(tK.t${CVPC檒kMƑ t5@$X )pbk;3[֦ݥ|~GA [G$XgQa-#Zr=} q/sbXzV\6ZTm0A&  �R6髷 A}Nxڏ! 7B(P)BB.ϦUi`]ti) 0D0ȆMJ rX{ڄ*R^zB_JµdV:F}g.K<i;4Yae DHgK1v5Q/SiTV?rwh-GqV(?(>M$LПgy tp0+HӋ/"5YiN"ak*-J:fqj)T͖ܵ y0t;•5]G R'm` Yi4N & V,wPuAuF; u~'¬oC`H7_&R0 ׯ_g¦vSAbG:[zg02Y:a^dbdfbVM6֣vO�WBY҂ {3dׄ`WGB|F5F'�ئ ȫSo+�Qd_nhJn挂[>IS X7 У~C~˧nzm3.|Ѕq ¦~ +dӏ#m{TV'RN˝� 16ZEk.$z֯ͽu`(^~e/#s+ZZ;Cz%4䮌; 6 Î�vbkremvFt5Iʛr( ` БެOdydہB}3<֕Ky.@Qޡ=fp5[c%ЮJUV y;C P1Bˡ*4QWo 9&ϻ5H\,IPP쉑k"Ց9*D r(;!d f⺸ yB ,3{z7g{[{"�Պ7rQ>`{҅. pֈ'?">Z@5}'I_R6Kta?l4{9NB bY@N}ʞ�:`~l@YPB%hM O`BBa%ؑ|Ckϯ&pmݛ!W?ї۷we u7 +˵/56ü7ozgG_Т\ ��cXpf-yO�o'A�{uuY?]둨zb /y9>=z2ή[@.�Ϭt $C67?An ʨ+PNlj'�; @ou ;i 0ד%)NwljC|m|o1OH a' ?Uo2pLzR'^n1,BlxzS?�\O]*mj !:BP׬w{"S.Z9)<+BB(C(:IZRC=REyL>!tY3A.*WJ^ �v $ȃ�YԹ3\ş>:ۥ @6){Ou8PūSHD,;o]թEuIp8o|}ᑺ!3ijByôϠf-ψ~F _~Kڍ'oUtx*:'?#1sa}y0FA0ѿD߻CߩopErm>4v!MS9?�|�ݴǿa�\ߚc|gF?\ 43 u+Or�:1wG!p]4T0.Tpq%?ȱǧӻd3,5n pDBk +B+$)$wC6SRT'~&!}Iw~6ҳ\`cvD@Dr -F}G(c_ # 뫁dB]OwDd|WcZk쌻Hуg �`�|w3Fͣ}B\ZBt?H@<w*cW$H74ܬFhi$w<lG( A7� [1/ .nѩ !aरu |qwt?Hi@R aP Q$~ Y79:U0j+Y`<1zɕ6RsѴ>0ksUagҳ@- 6on#K;&{*A|~sY \Fd˸xxs\uM(lga <ƒ<ѯ@`FBV&)d2Vv%ng <F$VHJc #/{98qYл{^#+u"-Ta 2|WPdvU(| [k*G�e3pTR 2ej ~l-0i3C_B4P0Afc\PHlj 4heY28 'uٚxLS)0.,e~#:R6c/Gf|ВhL[sHTgg6x|OY; JvP;00>4ePAAh? _M`Jqbǵ.tk|zNOaCj(ioDopA\ ;K`6Ҫ)?vm bm2Ps\aֈ,~F Hn affzPQc!GxzBF~0$Brkpry- РZ\< +$s6kLqB}$Lq Y88P|3g]wL1߾c(u߉3~m1ܮ-L^8 =xr(Ggп慲;} {Ҵߵq|P7$KMQ|Z@aYT$Ec-5QBs#ˏQ{&� 3`y|(8ty"~fm*q|蛼16 /t8/\[ޏJz2: RN<Mj|H!+:Bmi:93]  ?m\+ΆP O<D z"y*`0TGsԂeNMӧz; {GDol'0 TɘrXO IѐݣM2V=#O準S  [FXCi|椁`Ӕ)̐.oC)h2}(^É0>J b;Pa2k`.pUZn tMeSTGqؑæˆ/3ѕmᲶ6-lU ]W B4` ሂ!uVަjyFs>'VӀaܔ ҇L D%tVtmy(Ky$7W H%oGX47OBMNC왓w.\a6b ˰ƧfK C �Sq VMcX}VH#IF.-vY-MsgȲpBA}x P0\P9=#Tlo�]&iw ?#$ ]b[r$S[~<5ed]O(to-10:ߺv7#ѳèa ? mVO )woyzP@9%z�It9 Fs C$\k.fy 9/Oe(dǂ]\�Y! A/pVIO*Gz94@L {x[qmGʹQ9g_Yh 2\IP^6@ hAٴr[=*2f]<`}!5�=todC2m"Ψj#OI[k#lw l25�G&9@,?�״cBiocm? @p6l`Si<)_=zK߅ ),fޚA(p ۭAKH.oB!I[�/'… r.>;^oRg_To lPL9!}[c^#(E4cAF;'@ucȋ/&-c36 C]| 5 yr . '?%jC.7Z g<|2~6v&m'$BWj1EzsVP5oL|& w"\_rғi|Ô\jx'lތ$Rv$36u]/9%H._V# C#kvy,}Y7df~g/lca ~J7AgR^ۀ|Ul�|eCV(A.O?�A p%�'�=:|�?o �]]<Okꄴ,F�x>R5Ÿس1921 bDH]QSڦK2W2 y=#ᱸ<=aꓼ ?w&WKtHB�zP@J5&vahҎn; sT;#aPC2ՌyM_Hy:O A煌�e ̼3t= HA 1*%`s^'jz;\;∄�N&!=l8!< ܁B} {l?: 6n`h(J?Waz R=ci"|TA,l<qɵ#]u[t-0 qKI{RJ[QnILEZ=XmA}~3:Y1 ;߈>m?hO`aHLR!q-/ОE-VQ}>sjW; .#ͳC,\sIM vghz� /B`-w߱Mr5!2AxA* D%8!>%+3OA?;Wi͜ؿ2KQ !4`Xc0,o'vhꊵgrՅ򳻎�[H{;6%deTF`+<ݡvX,Sk03Vظaxm[g/af{\2 �K1mۉO2n#wѡ#'oMX;l$47_O1"*+YS?J%3OJcT URCa ^#YOmĸ�hfvN> c@ dh#f!' YBa mp=Y)wGUzoCƟ[iL'?% ~OO6@E`>:?C/G@ {XN֖cmj U{ʾDX+k\y~r0$gz(:c^8 W[$UY+? I =eXu,0eBvcEXJkM "_z _GDb{P͢WQVA=EMsuF?FwM g /Qo(b5x{zA1 mc1TpTj>!-:Cqe~aS_O_CVN��#`N�ǟïMߵBX>[`sr�%�˜gcY<�?#Һw\wFXw%�-�Z >7A�`)/[j"kz _mW:C\-v,0۳DEoe=XD' +L[MW" (@, -HR Hxps-+M$băG5y=B)qJbpH^*ԭAP S#hdeXFHl4U qu5YBg0cH<ʫ,8q&2 i:M!*1j/ I&0G;ZwҜV4/9 MAzB(&,6m\f&fRR<xFJ8+8…1BuLbSRpCa\mLֆ { 63mQF=C 'kDh\Y4d11;1MmdnbRL iB|^tc.Fqj1-�)Yp%KqOw6J 8<x!cٜ;X DgOߒ.saE|6o^s7AG!Y/ מz] b@/p |0A$@b$qs01 =`p%Մ`o =]1~A#@|7�+%N q{K>�xO�h׀;iA��o N-NԑALL4?w@&f1�l~' "@Eghe`D x]~F1( u+d7E"�o MaPƜ\ [�jٚzdjA:6*wnN&o�nPzCq30��=Y �6"H}e1z: |~[ߎo8v7 +2, tE#Ϭ¢= ~5i!"OtkթlƴwYRc!O ).c$` "A E͏ҖC ^?|48)\[ykP ~.("SIb,~*#0Mk2;2Sa OƟmVpXd%=7#_q !s✓24HL!J)vBt2ՒŒVgy tP`I[ 0,ttI]vN7Hc`zk/{^b>kFNΛ)bcOl@vnI^KރbaT8-DCےv Q/f~J6%5xuYoゝK^g7*tim:w; `ftNd$G8`GFo8 Qw/ E2LA2�7z65 :v`P '|6L&.Ar(.93.`1ɞ<եk(+Q$ "(c(wb`Jc4x;?7^' �h7WGEvG$w!e C~P}L&  )� [/pd09(SO`A d}Jٟ`` ݁|Ͳ'99`J"]HmyS&l |ߎCRp&\ӏ= <:)Ѓ捯oES^`ҕ!.)hǗ]%UpԖ¨!Xk81Tq>WRƅsA#aQJ'Q}^(cf{d&rCp+ż%Crw'HOhC4D6݆ pUYbWS: KC`kN .Wľ6YvDo>!~2s+ 0Abz咯TBiCyGCzB;m $GxTVpQpᅔ?hy" hy}kA^9bplf;]E GgFw =Ecۑ1z ŇBO/D8+\wM";dZgBȼ<jIr~=hc 8-D#T6mKqqЕ۴' Uۇ}IXԃAMmOHwܞOy?\ SĨ4qRu(h9}-(v"Ѷ#!|=9��0_Its*Y*3@>��X bH}ZS@6&,AU3O V!;�ɳ!ЏXK<NcLX3 ;7SeC`<{_L8!|<5NrŒև y�O=;$x֤oeg)c%>$g�#NUrE/]08C{H/l7 X߅_ը7=vx;0~`|~fa@a'oNpl'?;G\'"𸠳[1Y>� �Ƽ@�deLK;"m܂?U�@ȃ�`<o"pO /(#O!OW2 `GeCҶy32YAί�� w�]�~I|ԉǼ,�}8t x{Y{ʙ?R}9tG@)jv.}*1d/Zg }< +Sd77587Sqd8|,iB Phq=g}qsﱪ藒 }~vo"+g<=7LH VUֳ`!GZޅbכ/@og \}Nբen"ZI-La~LNpQw,ag z�VА`;q^{ܿχP~ %#N- |<nWOn#^b Eߗ߀OH26F<pE?*^{hC?[>!O~z/byn�` /Lb wPg"]>ao0퓣0#q&] }D0pp)00|zASE0UmS?.LE>Ӄ4NlmRUK%vK՟VKN~֠eȄῨoF;H^sv �lp") �b} 7a"}TK,3>T5 Xo\5|3:Bxi X_툫S@`NM5~#y^?ʘ@e[//⫞eNMGB$\X (6$oij6n:znTXr‚V2t_~>Q7*b$'2  &Y^Y0`u<�@k•/ldWm >_/C!$Pmt#lr7 2U4 :ChF ](;eA7Fg : %B*DӦ~Pb>M m^QVq [o^` p-Y2blp3tIZSYlݶ0iֺ!6 4#l./V.$y# Q]aS,szo)g הzX(rhO֣ `)ztʰ3}wln<� ~;X0XT6HΥb $|!uLbr"xV.t} 4XP5]  v&b <fMeY  Ǩ#bwy"ǺLT׳}[>īΌP84S LLmf-w{?K^^`p5nꅳ#g'# 9ur1,FQC [Gu&*jJ./ -єgs]"T}gt*6&ʙ ?�mOIC< ?!o1xDr6tloa GEѶ3JTXrYX2,y!G|n0=*8b|uz<!6@ S= xΈbt`A=~(0tvDOB?6 # ^Q8x4:@,)w4Lb6`cA| YĂAXh-8M&ȎfǒJQhl,7bjd4]dr 9 v0l (x>2ƿ-K~KO?Y9"H5 #vmG],viogx w3`S(b cEWo 9#5SA�ۉ#Ԓ[j8Wf/ ; 6}~1rV"7nz3aL ؏XdJMg3eX<rܙ71.)?t(DqbHڍ?m�4+>=lCr9RG&5?>Dž;4@i \`iS@e,x?  غKya;q oXȳ|yAU*YΗ˝bv0lKCg`'dBg�vS`##u%wKLk=wgS 0mmv�3%aƇgLu+�8 �&"n0 ҟ|nj ~{X؊)+h.Þ6,S?#v|k)�7~4@R6^~ZtzCAό6'vgx@цQ\΂`,(ިs6C9c#v,llJ8(%  $*&DiM RGh]n*K<R- nӹP)ϓ01}Lt~H7Ei3I]Q#F /-m!.z mOC?}2gw� 6i#辖ʝ! |Y0Ѭpz A"rA3.X"o=z0.Q9@FtuE0Bu9<7U;,x•%M#Tc; 8s@t\0ث?_wiMc'0�~��Z9'[#=w3' l' l�s� ?Cd3OLGsO}iyP|GJ>@|u�]7|?'{/` 5q/8|sCnf&Y!_5{@3naoCa#?/{ B{`T?dvs ݐ-a<?RwxsWIO *⭌:0޺GB~€% <5$[ AW﯌ONJGA..m)H^D"ʲ;o-gG{ǜyLJ]Qqf[^[~;EΜ:O"ACݻ_:n(Œ˺;pOv80.D<>xgt6 7xw<o5)mhT0~׀ eZ>Be%׮'L@`OB-J!LL-֠À'onqi~麅BF> w<>]+^qވ6["nz{OM[)r%)3y0c=3Ʋgʪe/sHwn;lZnԭI p$5\'Ԁr? \+eDwEQoODo=#D6EK $/P?Ry zl\G?a B KWGvVU> Ń/MJ/i*~a~ ߋ"aX.?ψkVy%zw,ޓQowo74זC]o  U>mO>sQst!'owb 4ឭ淟g@]#8vɧ{s4A[o0Wj]$8iZ_>>hYh;Y'k6._Oc3})!1<9sԄ?_ |f4.?4&2o||3aiT }WTyV#B>>+߉~¾Qu$_aSр?k_إ :]~sOŒD?ܻL;$gng֎]tx޼eCPMDz?^LGAyK|nqWAA~c>a_ {sOLjY͕r);\ɾg].U!~3dw{'xGY~/.9j9ħ9 <FHt#!wYxkhP{x~ljN}ȋCSGzT$-ֶi:r n mͿ[体x۩(>,4W`&5#FDi 2Oi~gcVd̨u|y~λ^=D?4x7t&Oh2n.뷋| :"!>Bo{l=W/<_1|g`}!yvB DOp2~? =kƣgĸȓqwͅF8ȺaEvrϧrgkZ̘ 8?%P炨W9RAM; 55q*!MPs{ %һ` �Ri1N &nv_8w40_s{W fAF{ɱZj05-{4]QJÍY`9]io S+S{foQ]-5p&2(4RcfP~MA* kwE4 ! .Q:1H}"pcQ' & ME-7OR/F*3lµoFR IqpYLQ@L}QCBn9pͣ. > ޾'?"lDqH浂q.|8j/-Hi{P! }Dndu'% h.?~pP@:f$bP^EIH4F8Z=uFKT8 \9rs<`vl7 U4^AvMfL@(黛l6OD]%rQՔ3\ T9/M̓R_Ͳcx;l \e$t> FNHMO*ă=KHʑYς =DCMzޔ-iO͑݃$Ofaf)v=O¿/UM= 60/,ebS !Z  |!H ܰ dM>w2o"BBy7)4P|!Х27 6j<sz_INt~/@:DB7TNƍ935 zg!L<O U('M*SہEڌII7ldR4y(֓6�J1=6w 0F[)G/ؾ[I>p'{-�AZ^erd WFx\ӎs<}[; CH`? Ö r8M V]P|$ H׌!}w]?u{X*W֊Y- =lqsE,+y  &N("Aicf0p{ Ig'%ĂPXҶOwH+R< 6iPa i%,;C/Xb@ļT gAQ"PZdӵBB|j!qTɑĚ@$\/^H Q9t*ҟdgA¶;ڐXj^=Pm.5 \f m: (Ui 7N 딑w$Hjzٟ=rx=|[c}Z@Ȣ=@Ζ\>n|96WN"Paq;2ϟ@RGp|'@0AL$n<qPHGuv"U1pT[J}Eiw]{)e5]EAD>yz}7eH~N;I߸<źRFӃa_49YZsPjY) $r=%o8I eT*8XL9(lӆQ)*+ M]w Hoקc gIܡ0J}]o'P-lc'TDz(lC Z,f }ld4OVI,H*|;hﻙ,FY(WxlӉ =Βr{ "awuT\ɍCo$<'xuq$lk_ߋ{^ ]H�[U%ngy'<!qN(cb ;ZաQ_Ղ 9\) 1h5dj;eϮXiZ91I0"!LK"idR γϧC=N: �+D U[p͐q~H)0t?#`sV04JxvW 3ia>Esk3 I O5. w῰-ÿ0.~ M3.*huX_kewe~sb7Do�'�q.rZ'cm~Ho@F| O E_ Gͼ٢|{t , ]y(hLh#NGρQg+ W1#iMt &Tcp!k]5hTBˁj(HElOUBʤS!ksYe0'B }MQWT88D$@ Hop'5Es1NӔ0dz$l$m\.z1*UiAv :o4}koѼ~@:JilP$3*o'&kNmgґztO^hJe; \ݕm<)ˤQA? G0e {]r=Z\B?Ih[# dѴS庺}m,% '/2`wZJU*shz$ m<0'}vHN7/&M%^]'Փ4n8̛Uuh?p8>w8}y*8 h֣m^޶+z뮉Dmhsh1 91={rlIKd7YZFQ睤OWY> a#C$dk7ӵ>Žlik&drAb&x=�FMH s} � m1(!Lg+--;pKQW;JXAW'AdS7!aN]ןD0"QRSAϐb&:-Q/$H,LښV[zgh9IN26LpB maʎaYhm$XS,] QS #+oZth0- +9DYLriT F"ek֎AjtoX?.jp+:Dd-!4Y2Q[_NQ494VuiaPhZw5 Aʭpul)'  x|YO'Cks,L3凾Ba_n ȞF~КI3*?vl,!(}+_\AOAY=sӞz RhЄD3QܼR7A<83$#ZC7 "By$Dlsf& | p5 ,I Iw;b#avHh~p[$djGI %3hurW9Jƒ'/CʸC:_s*nÓ0B&tϓ�aV[� h0ЎϢdlSу#~,))B<!Biלsbu8xnr&$RU ^: $Y}2vs$T q%σ9~B:D…0I' G/O BuNN `` p%xBK.3i1r Xɳ:HpuSY\M,ztD_*i8 6�; jC4&zߦ 0X}`55bjzԒdu>sTVB`a A _;,\RZ#ǻ"Sf*$˱1l4ՄX)j )�U` A0t8-3Һެ9{,/21]&vnY,#]7ԑr`N: . .̱4v[rz35A=24Pj#(ofK lL'åϛY0B EvP(7p{\I#IvBW@_ێǬ:S44PЪAq� [ .va +q\ ,{Vө&@k߈� ݜ!qQ~tl06AR,t(lt!Po_o4qvkmObFH v"obd;RZkͫ#9rGt=gs44՗d\8J@ama CaׄIv\\QJN(Y0 ☲^LFY>JP \, ѺQj:} Wu@y2 6 ?⸸LrsAsgY[5/%8.ͪh}eАIp7:,lb D ]Sv j'k,e*td0*M#+k\e+M<\'5m,P H@(\ϩW ]BdC-^\q^X莵K8<[m6~ ꣛RN )Gj�PF};6_\~lj1= S3ˁ^z[A34`ҺNMYǁIp5oA?D9ԏi>sr~=kIAE8;@*}b`e 94ÿ ,`dɜ V| _3> h�DAAqfq>Ag�to_klS8rĥUVk8*@)πiL mp~~Ռp<MRuq1A[j v� 0L…#/l0^~6p`y<A¢ mD='()W =fV4YvNR3nQ;Q&jF;.RV;& r$l juX4l_l8tjry} ,#uEDts}s˝cyg#82mz ;HƌXA en~PF@ -+I y{wojBt  .'_F_#Gߚ  ~myPzvIPo˖Ӌl>܂_ ס*]ZڑZ=5CDmZsŐs؂i*QH+~SiK@�F�`KԢkKc9hr̉4WI| &p ` W˄F/X.pvY0F%ͨem\䶳QY.ςI+[tw%N ȜD=#4$x3t3*~IJ74?ll(=p|=9DS~E7W#wba&14�&yA|@/Nf[타/0�3Lhlg괷`Z,yTȤ I >؀'H>v@Z)F|N˃Mw�NA 92ySUk 2>(q~iQsk6(譛Cl=19PfK2T?O'AxPFpam9vm:Vi\&g;X!%  RԿ ‹~b}]0bYr6W`,;D/oc1+8\iYcr 5 &Ӯ;(:QI.S=ZN zrnqp%f82FsX2c  cJ]}B')"3 KvvA@ݲێa#Gݻs5: 92mE1aF _\5NBL:ru@I0G; \Tn_<o>w$R`kq{!5+7N>{¸ْgt Å, MA&$*SapP A_zfǵ1z*D|([Sͩ?PC ۰ \S:,ΰAa6-{Vշ,H,! ) *|JtMG4aU$z$l]HH=wvSL(WϚYraN0n8'|Dv:90*c$: OMAvrB&# Al:�WXh ~b;\($| U(x; t# 93eս5Г@AX% `'b6zλ U$0%)& ipkK*j/-O| ##JqԽV#k"~F}^MwSPnw5evOC�ʒ@эVzp)���lp.�`MM타/uD1Þh vX~Av@'o*?۠ !sf۰y�O4/ y"A (WOw aFּ?)ln{|��7"Te4pWה&34$: | ʿ6e.^&2 |Bx!!fdj;�z~"`-`z 5mSDq S"^^ZgmP S38L@g aueOCN#\ U,j=8 6d ZVQ{3mt^=Dy~[&&!ZhVՃUgg@%l Nr,KkWORYS-VoNbTo p9\4%(\'a"a>bG7KYFݮ/N,r<pEѓ E. WUrB4'F^I b$ĂQX^КAd齪0Bϓ@aSDTBH0•3.B!.g@$#ҨD\޲qH:)#HYr{"AMo+knľSGޣo ӱ>`Xvh:ԦpPof+"k-%޹Lx:76FN b H8I`;FP2_LVIZ[@t�Pi(Q0ATk?:5brGz0W(lBP9Jm#JKajW |屣Z; Dg72a0{ߠOG&P ip(׫+e)>�X$"VxAWBm6՟z \a3|ft`�KÅ7CB^}T\(/Q[s6o$kyQC~f&i6f4?zFv$ v`!0LH1!׬dd!PaJv`F,g8(njЦG7g]Sep3E.dK~Q}ܳpUŚAeGΞA:?bҁ8 6�'M)C$\"DS?('L4y(TճHDSHwHXkf߭fH^4%%l/3;BA;%>�>i2; KIGctuUI򵃖}_;ӽ4FŃqJx=Q0t2܌Uu�I*_Y�.͂l:|}FΥQTr a[U5g]_]N46 t zе !:\8c[Z}wF}N 6x! Cnͫ{3e|h#Af·ڎOk, $?{)|/EQ1NP!@e:'P#�1(ãttgo 0v0W{>⾌10XfKtA@U &e\KoAn\EqBIRESw,644.$HG,! boP?`)|? :Ip]DA ,d%[_$ �\$Ȥ,@&+ OrK |!|k= Q#4}uoŴ~둰}pDBQ NӷO@0> (VZ(#NZ$޼ny%')"GـNBB K!}J_TGBs asg)C$'jZӃ KГPNBrE@vICNEr DµJ@S}l{=9˽2G $&l� z8 D( gT"Q9ۙzf͞ OfKi>o+IyS5NuƛAO`{uOkS5jn",`؆4:-6d YiUf/f)Vء5=3ӷ^z@śC OXMtx?GuDt!/GڲDc|D  vف9/܎۟! BP~EHȮlvpyEY|8g)l. ^+W7⺤G MD+ڪyЙQxa ;XS_g(5yP̧k#> 6,4 #zɲnQ,W =(m.U$p )@8"vP̘;|U h2xB$$*~vF;ߐX}T ~ !P& $oض4`H:  pG);զ%b~u/6ς*!C^tBqPU9JEŠZ Pl|A#4N^%,J;k&\oF{_0hCl댁vC߈R<Ri03B"z9JvG*.-nT& LBV~žeu%߻OPcIcy!L "-Uֳ6iJVp A0) 7Ztlqbzꀒr$tVHo!N F[[Yo:z)gv { p5[Mg/Ӊ8{).0=-厌\B~BV^l_;j, \ł;d3^_j%o;w{L9' AY$m " N[8Jf/>wjŸ.0+A(t_{v4!pĒ9 Й \n6.2~}'k@Bc(Лu˚&# y/~$2A -i0uį;w:GGh]o>->7~S%F&0sd?_E_'?$.n=h {}}ecxt%Yܝ?_ψ~:(q+.j;*0e@iP O_~wp/igaf|0%bDQPВ%% Ͻm,Cfz1Fd`hHo+k3AmяrДP|UeTxem,Qd<%wR~,5(v(k( EET*pold; IhކdX$ >H Kcb[1U׌c48@P KK+ĹO’# m}C`kHd۫7Y[)NfiԌ k/^ͽY4f@s&Gmum[Q1Jhr,D$?HX4>nevs!QW Ɨ#9"!+IE$# ;O d{処bA`FpBK+e[2=& 9<A$Hp] "Aa_渢k}Mv\<h2Z֪7Hjy,Dq`{X(Gm)u>_@I h<"a@Tտ`aSo0+9B8@ 4|hñ%t=@ak,6@Xe#Q:>-'9 @DN-m&'](F0ӤW8M(ILJ@ FvFZ }D3QV'y$F#2S+9<87e {xYԩ L,BL2A`ZG/X|-!_ɣ;NOwuBNE7eTP*GMx&9Xo'z;,6v_{bבwVuȄ/0D5u= _/4vpB(<xvh|<A :$5 £%Cp |Q㈳8i(FHwM'qj _GB `kc`qz/:A zW(1X d `+4*(`̿<y* V%q|CR!p7h; ߅be( }64$  B9ۣP fyggII`Daۡas s#5P2IP.B=<D!)΂oÎRL}Ӭ;Zu0/m[Q4Iaѐ3CȹC)耓< w3<ΑȤ)d~5]m/@a# xòcV7t^ADy-4X0BAtQ4gr4F PS(+.Ykgy"Fƛl 8it z޻H3Yb{ƬE'H3>ch%ь Bu#[rʘF/ψp'͎wpQoBcϡi}>2>/ WCQ .ӈƆ14l2>9`J&2t!}o,tag!]urަ9(Hi ӧ@Ԝ %v;@p .,8|z;B :z j 0ݎ Ү*t*Xؖ ςVFB093G-g?N]qȶF.1HIɚ{j|9cb> _.Hb=y:vUs|ؿ5oͻPO@ AFO. }&xT!QʼUECVCA!iP<G>XsQr[C0̶= Dmsrim X8v *󶣩\TWl\.LG ZnX-j�J\'9FKQ0O4V 1P>}Ec6ivT!|,GGUzۘ]Ɲ `!Jo!ftzBJV: N}; GȷEҵH% 3su6䢶lGѨA6 %hx ҃v2>;1cPY(ςR0c%grLAzkN]; bA _4rQ> FNN0Kyg (2bA`Q>& ̑#@r)!yUٍ&cTʿO>Zm! ^4D@M,Ԕr�9=4%�^*#_^mԜR|?toP)ǧߪۿ1[àa)-hay{8no^b&9>=c:kge'1`۷p�$nc?eB>wE-EZH�tK7 &8 ^�Ⱥ~ t v~K)?j 9pFgm[c{k!x x@ {A}J<v4}C!q^C7GG`cm \]K'*n@l"A9.)om $HV%X)'z}|v iM(<L�*5l0-.rR؟(..9DBaΧ^ԏx= F ='mԫ`I l< 1V@a$8ػ#Sqk}$) xp'[<Bc 2uX),H šQ'Hccva_.uYdOo2 5,MNɂn=]3�xY $aR؍yg^n۞ca('f_:kZ--�lHvѤT;̓~ 2(LNZ _as+hAK׃ '4C4m�8 Po rWv| nRAZ)�0o9 [zm0GKB@"9SһT:x/ЀC� /[l7=h1z<m@G(]ĺ@z%A;IפQB%d|90H !w�� xp2, $@ F9ɡ-“ۗWVؾ(PP6 a;+#D0Zź$p'!<7Na/C@q!熍h{Gl d:–BaiQv52ҹ~) ?9 ]qHN3lYHJ aDMNGSh2AH1g 'G$ -EDR%J>nsX)c-I%n\=?(B+5Y1ht}a=sHd .*ILJwAiwHɃ�~cзs> rP(k89f?H5ݟ=s(EJmY�`ra@ÂO4>"Zێ$퇆8C!ӈ&>F?� v Y,4Q% qKnnB8I Y4[8c6+amt;)ݎ\K8ܷ L>"œglR>" oO![hla8 ` 5lP&>dVj{TXB�0+MBg Ya+kQ% gP{zPRBiXZUYFC}ARI,L4#ZJ2|?dzkI 65E*)tQ\2qx,ǽv^E1߀P-%a >s&RhұQl2cAJ$X0yXd"P';d یA8B:v6k"@1ő* =9cjGVe]HbWZW*!]C4LhWvQN)< 7Gϣ$G1~aV%[꡻) e ] }㲗чPqs>hZc%LYpi;Y0"RS;ަ`r0 qTʁ\()"y iCcA²ضSؓ#vD&=,x0B`)ДU~C_`cM�'QC,4 K{~>l< 5ȱ\sOZ/WM<OiNxl" @LT�Tʹ^jǜw J"nrzRXЂ`c^6a/}zGLXs40Lj j^ urۭXI=]Qb,vZT+ cG溋 G0>>%2ʃr}(J;Bn&[+uTʈmgs˽< BJ%}`$P`8>%F'҃VK.zK ѵɨ #4!ǵH?"e[*#`&$f'ƦY4- CJ)Le[,q@2B](= fB C> 6 mІ\ͻNY ʦ1oԸR帎 Zu1ߑQwӗ^47`†X)s/*+vbD(B C)wX(UJmvQszıQx0<!Fq}U."aEudצ,Y Q]6~,BtK4X(# r}ҋ,L09l܍K,&vo,1cz c)ʏmڧfjUŒ`#,pKs<hOPGcgn{6raw!6&h;vtʅ4>Z8b]GxE%<vBuC ]u5R$aڹ<>MKojOo INVlXe9KsG>Q{8#]Yl|ǘ3^c4<>J~z/jYW!cc$|L<D.T tH!I+B4(IEQ4hگG7Ě*[`v) -䎲yۤfA: ^ǭwV/ t[4tRbKjCÆQx "aGw B$3e#v= I G1Y`>hw`шag`M=˩dKkחPc 2ZC0r.L(u?d]2� HYN5N~I#ɠۯey?f=H`a?sЍG>?m\4Yw`)il!6a=?Hs AbӶ`~E襇`Iz G *Qݼ۳a2aDO,W%rðu5*{�k*Ê>4u`x$0X:ߴAG2cJ*j!R!wpQo߁ ghH{,)?(rв {0HbcH#C0'JvQ7piM4;zi1H`偞hs9%9 PJ\Ӏ) 1;0ԝE A[-+OVK3a'xMB}x!ҏ3Jۅ< 2X+,jFBSz|YTEP/QvО =ĂĹ2#qG(XU/LjtMO'2 ` v:+ZRzxQiYnc Ş Sj#vY_"qRt0]="}y>,Vͱ衢x+O&]>M8*S9U{$}= ̉5 m'Qy)G ?j�P?9w` 1Uа5t&s.>*߮9*ʟN{(W+>6gBa!'}MCEss=H*|nc? qϤ=�ɜGjCK9o: }_.,XplqaX1FG6JWyy(t[bHp`}2%?(T~ܔvCS墾M lGxC(ׅzmpU#]sC Fv;9%i Y¾MawRFX@5˔| #r[}g{سy1q9l2O VlZ 4b΅R#lp/cO ֚[=ի@][8i2=h #EZ=L&ؖ YMl$f\Ns%U dP<uԣG5ZMg,lXB,ۀ:\G9 LFP(񨖟FGRB4$oe9/M&t_ kI,ph3á6b .r1D:ZhjYЍ$Z'z؉6elR?$^<Ώt XZRX|_zba'h}aG1iT*wSRF v1s.8׶aGSEE]Cg1+;sf=f!&<>q~aOm٩mʇ;t-!iyФ,a?k6�} tˆ }̩BO@�`@ō)i/|K@H<IG1'' Guq|L @301nCcɡ1v#,GU/ILƇN,w0(BrtQS?4 Sܷ,_l_I!c j9'j  Ӯ + .e#ᖿh'<WA VQmablhnV˿0s X]. 9*ќ?KLEB6!%"LOz& z �+j�a;έ!�lcR0ӊm:klz$t9wS궜ώCJƣj5&"WE8R ·&+Ib<4Xؙ. ral'EyX瘣Rb q>\S˺4ӧvkO#)B 3]tnbx2VUZT`#_N6KqNk盷YT1BOk9F̹hU-3c{r74R{(Έ 5θ ۥ䣆X}0> zhDXp3MU.Eg DBy@0BiDZ,evЪuYҽPbG^*r<^c<P9пX!n(Ky Px8)X(}\>J=,,X`ئ$0c? g ,VÔ�C p~K)(LqlUKM4\5:7!S5ⴶSRS|z'4r2],<(]q$BÒ !6>ޏZanX0{,! 5"jS^NQǰK$(C0 l{J5Y,Z I>B/ephGMvg lòZ?$rݡ<}Z~i=EAPVJafR}K'<&+)-hG.>e4zqCp\NRbF1],~=8C㕭J p]ד+e?2.r e$gFj K)C;{et]Sk$z(t)X{5)+MZ킢I ro΃; hl'1k;j ,$%t*M9/} -'RC+E2PL(%B9QE.5_z,ż=@(% &B{hQucv/B7l-8(`jA rU'A WjS8tj#n{>A upy:ay(  X~� H= 4Po1[Zg]B9Rcpg 4 6~FBmH\qB *$P5Þ[0 7_; Zt=jC"6Az`䍴p(=0u(4J&ۉEW u PZ5tTUB(L*�BQ{.W`k_(гPc`)B9;yc6jvLe > ;*~p~Գ6)WM.x(` K2,رX>ٚ<Xp"K:!:,A}ZI5{小Z0a-ga % "\Q{őwc.j"ELAvfWL# T>%s4 lz>;ܞ 9L;m"XSR2]T"#\[5-LD-`bQRrzn~Zo(`C F80ƴIxM>B"N\0lLS ap|nw|۹%,k=qMW`=$,Dp|~XeBqm4XcТ&co)d#ޭY i0X]Za),\5s_7ǬgOz b)6菠 tt\C@ ?GqJ)`v^1كyyۧt^# gW(׃kr, ؠQA>HaMJ)5n#[ljj+t^/Rjh+V G _9J9fF ts )냜vtdy{�]󈣌s>٣D d'a]e 7bX `ܮJK*y%(~Xxvx|hjub0lW;gqvڳ`XzN!n\Oפz8�xv\>+Hr6JU7XO S[p?oӅgWl5 = SY΍()=)kw=.sMG4N�,ڃ$f[ۦ,H()Qrv ~_kC SvV>~ht-Ԑ,QR;]t||1_!Bah\2G}˹ʞW.=NG 2tl#BI-¤휆]V֎;ʧ˅etaoŒLc) lw9.#]57`+c6 =햱Xe6v�OО%ѡjo6G_Kq8 ,tQjW ,ѐ$b^}YL08qmGiȨ<Oo#R#v|r䧱( lAZaaĂՓuUP?8򳌇/4F=̱uZ5Gra3B9DEGU$ʞ H.M yXEC4S {*aYΡa/īZtJPሡYrsJ,z!6@R ?:]RƌYb0JP6F>Hy' j+qX2ǒ$ױ&p m ȅB,lĬs"*zA&(٭4jA1I" _< Xb]C]4+v ~N[5ѣ6hy+/Ձl'6f/BfDX0%5E,׫ۡ0WAd;@]J,01lե ' ?"4Ω۶]Y6~XJy^{OQa9}EK Pqk:>d"\SrGv$Hh%F†4}Ny?!ʱg[(\(7@~\޵Z p:<W8E5 G)%v]k&f]- 燲el祏q1vCgL!P(Tc$ܼ\*իjزI`&Kݗ Y+0 9Y~W|4Us4zb? YP&X.ԜB,F͏Xhvrv_57`rl`Š|T*Ahu|r|_,0Dۓe# > ʥkanaϢ%N1k*).GIEER, zuזh,†I%:o"[BI02>;~ٞ $ 9C=veFR w#S `[&lX'_Yب9}ߖ YN@H- +0k\S PXGN `ǃxDq~Xl?T8):syB-e~1g )wذ5~:BP5NBY�SsގH#0"^zCHn C :݁ρ>9A"*4Me<.2"+9B-1nSa! ,Y>kmMCM" >%:le}2B|C�)N6/Կnsl~]4FP{s\h~ߙڈa?_09$tڰnFu7IIR!#rՍ_4^s"}u[:BX(}J侥<?I_zN'aʩT/ wܷda!B|Mkb/!r"EC\ړۨnRn"ϘEnk5,.aB w#)ߪ4Dr{}pak ) ^v? LSOg8ԓv|zG}�(9ǑS S|nM5LQ*~[DC zȣPh-ILi ȣh~'rXFxXT*mwh,PftԈ暘x4jY8=pH TCO}T pF!BPa[5.UPrpܑ81vbI>h](JnY�PG,Lb11*̼? q )t &tK&u/ kƮX)g Sa̗xy\8{/`AŌP� X?jQW_j$oL =lOdumH',,g葓_d߀& EQ1B9KTkߤpաC!f45_>0%Bx#op>uړ(BfQ3aϠG]b.B?sd5D +B�#?)e`Rcon~ۘXA _ %S�0}NbK�~OH�A} ?G�03ԺJlڃ)-cDEm e4Ӕ]5$x6Iǂ= @ 4Zcp9 㴫fiQWP۳`! jv%?궎qg О , KQa ^e=)igJMۆBOZ$ $O0|޳~KFpK;2"wS-}<RX:r5d3#/#,F^e_9cݙk:_Ji$-sK|SƝ%`ڗ4|Ib a4~m-'4FBpk)R�u ث�"�u[�{y}om<|"F{D�[  ��`w�!�n 0T71@ 7yQ(ܾ|i� [ 0I@FX?}_ @@8`/CLJpo?G?="XA.>So_ _t___o `O?/w8Uѻ؀T.E)ګXRsEs_چS+4L>f ;깧 m,EWK kZK-U-Q%=VK]r;׻Yji7~`6I׭oY{*- 3vl}@X7lf%(E돇loXN‚-I!fMmg(?7<tdV._ScvXrq.3z._7[uTG)*M�ˉQ"kÆp xƁ`*,@RY#sBZmey<N^o%~iS߰&|�)~Űs kGsᱡt*>ɴu`G_jRMUY& NUq筫0dpLjO9-2}3ú`9[M@`b^Z<aT,b7(`\{TXpNaI U,jf�y,.}Vp Ku3֥aC ^"p)XPdox:@vp#l[ U]0n<ĿnUp;8{yy4 "؊eg!~7h>:1HڿN- jx*T9U,]b̐˲b!a9!qu⎳g&k}rD[I/뇰C9+Xu񡌣!'{Y_7AÿgcQٗWuYq DI߲z!sI4?S8} }"p:~ĭB+@〵:q T ae(OF4P,w2 :hAZޒ ] G|@|xЋ>B Xj,]4~T9<4zh kF~j`0wy,(̥`FGY?l1;#+r7#8$#C<tq;nxOWmi.un-aր 6D?cxː@��ZcX$<?wD`E]屆?7,E_!;d$~R.hd]>9w΂'hdwg}"㎾aIԲ@-8jGMpe�$H0@8En LݴzɐZQ Ix1s[O ő0H I-QO`2A◰t~[? n^0t=4D8P6 ǰF24!3tvdv&@AׂpN=h EM(@0#/} |0%]oƶB`\!%ߌچs[d`k0q�|M]HUsA W y SQxeR.?\|`¨w'Åiu�+h' V]8*X�+&W]0(d0#(9d9xE9(PL,Xօ4 �';{CvwF^(]y2&^iA ~d) p� PȪVZyԛ2CJWxZ<dCR4w l@/BZ,YVI Q3A:VБת+%$P8Y�:w"%Ao}`P+ CdNB⟩ۛ9r)8g 8ձÀ;pڌB&b72&<c]8xvsq#P#? ;rziZ*)-Sc2B˰B @QTBC@`.@=h5ށU'')w  k,1 ײӨܘ`L#VWAPYL@?ACq^ŝ<KυU7ں$ M i"/ gr0 iqP NFA5Ⱥ:XPXWcvdOX'49\\]E HNoP.v%aZQΗpo�QA7X.`Sv&�3tQ~H tx`'iuYWy'WAoko4cd[D^yP@t .Èj:9:X-}MTWA$.38$߶Z*4t�PR| NI;>9JV KVBbjC0OC\urw`$>C|A ?<W dl3Oê7](> ߡ%J=y˒U 8lOcer|z^N&6 "Gv4m}<rԥC}U/av6 ]N0qi"DɡDݲn$" E> ܳ*ܟ5rze( օ\|#w(2'6~*K=P@p,Y_ EmQ.ТAGi3 ;-x<v0#:,d]x QMTpudba zISI�xg8 OK0zLF?OAuP) r Ócq+-cQtv~[(n@-XÀ3侍^ x1)ZJa`j8!zItz`8BpX.dBY 8e*&䍜P[B^hliY" #̈́]nzvh4иkw۠ yutf1er79b} h$<ȹ5!l-O T U5ZQ 5rC]CIf00RiΑpucP╀uR )祫pAcl 3l+&d@8bN{t]*1ͻa (ƍXW~,pQ2ABjIPNbIA*gQrkWҢѸ(iHyzxIX!6X  {sف1}ѠX M$(_MOcb濎"aUE1T݆"�N (XW ӧ):Εhwt*B\0LĂ6 |᣺$Ԯ6 &G.yz!X . ,YcnxI|HKT+{Ue7f hr\}bo 7  aj`   Bdd�WEQfF&Z<Fq'}H{Uv~Aۈ0J MTv]^ ֤@=-VUTwqQA8 (@ p2o(:#I3,_ Od&0i}8<t 081y,`>݁K80o׌%mzZ-FCt|D,HY0faNq bd'B8xJؼT( 1:5^q"NeI% PŹkm$;3[Z])"0␍(oxYG <QWtl섙uQwqyZtK®fHנ %V |YV /d,WuJ "Zp?fFzCAo͡dW\sB҄HqQi-4-NV4/p m@w!p`k s !D77 J#xGƷ8A.Y1`C4e۟:աY p]3@gja� 9՟8t+ᕰ a!òi:zoܘniZ-F6N^I`dtq6%$hO2r>3 p!Q' (Q*Dg}Y:nD7:+~�rgj¾c9sDQr$Rԝ!, ̲)0FuK4l[\j]T*,%=0}8<* S(ԓә3G2ñ)FgH6}ipq$k}1zYQ6{Uc S>Zm 3n*`hn9`YХeU]a Z3<$㙎t3CmFQs>؇0궶>)MgC &U�;GL'xBAGi( Ӄzʘ3VwIwA;?] t\ O 4V RfN0j[ fğ2B22]̰ˠY]fO̹ qbgAbEOk uDRuۡCh"0J,V^%H|P`^Ο@4&j*UO1m$M /0YmǫV&q2kklUzMbؗ^~MrFבCdL<kZPb` -I?6fƝb>h"PFnR[~ru`nkc"wpdxjx&y)e&'s n�]+3倯Sl´0f̈V)nMhzԘWg2%>[ǟlǀ#CN{0WL2 ^L5jل ,zΜpIA*]Sɩ5ߝ[gc`b}6qY`A\]%``S\PX ]ibrLᮔIk2)-A896_*Ck zB@1TݘJ;VHO֓"k  tqL<N Ɍ:sȠ'=P@`Qڋyoh!`J<]pG,i;)|<#;u%IA2թ [K&jҔ)nȷ*YۊS`FX5ѻSKaSi XWfWFqhwfJK�Ցr'R=x5)o! +s{Wg2/ybr%+%P>E0cqBf2Wj[܆K1% o7s骩ݛP<,JeN{\TLg:se %bJ5qй'VgT{?4Aݳ]NN6\0+(MS޼[f,n@A?K_&Jޙ4r+nwyXl}fs] |%Kx1G+3@=ݪ?8}< 0-U Z.G@k`'= 0`C;!4XWeHEOH5HxXfM)hA[Mh>MR2怪!8Ge~:�X�21k9>@MoP+c$P{eU<zcƑg%d$e@y8%izWU2Ip_HKab5Gҝ1"=e͝n\NĘZNuYJ88,os?Ī*Įu `'̗f�ӥ4^t 6G J5߇9ȿ,E)Kby m{X "̉q`1g{-G$2 ФI.V-9o?5e&0չ0Y\KOL ./u͡9¨s )�o<\Lj8oWx1N�{_L7{>Nad&pX(F}�d̓YU5c/FЫهYӏ㙅 y##p%<Dg TYot oسg^{V`0HeԿ,uLE\jYKΥaY(xR_t@5=u Lga"]gN=1aZb,,Lex,E w<I#߅=Px) Tѫ'@$P8]7geep2A2^ɝӛI"kYgیM#ҥAj'R:!r)M7 wlP H KV#KwI3^EՑ9Ċ_\@"?3x(e  6KchfR@(~pUZOOa-!$L~T=CBLv +2V^6J䍂$;7!}Ygu&"䥷Ԗy&1K\Ώ^xʙ1`wpe+^MZu a%,1$ҸA`XblY={!7IN23Z>O l`u3 ^;2GaR 33٭Д.D]"mx-G\%ha}V<2 BJA?P[#4>CW8 cЕ>1cX6'niD;d 6`7g¼DR)Vca[0Vf9kȉ :4c6x4|#~t48J+D&a|D.Y HޑE+m|w(ASR y| e7ײL<*5j41K--24Z6ޘ*%}ڛ^J1F:"H/0 atAmMΆ^*NRbwOVn-xgQH=N{Df dk JE> 0˄ k 6FD!.ȤV(hB1|h#?H gj) Y "_fS$ QAȏ=+gJtr!j7p&LxdZ3iٰHY.j(._4m3$x3=\cM2RѧZ@6 $a b 4oLWlj}o{9o'A`XcKΚBlB\SdU,JŲjzT(O eYeYNܲ&2I'dzy\ =_&)T:6(!LŇBzZ`t4VH XFZ_� L"}/(go λs Pz3BY0fwN˯@\sX|¥Z}%3`U.;bW>!Xn:u4bB֤0rCL\Ԁ iLf [gA( ٴj(\YՃfIio8W{R1FW^.n?{?dዉLl~a Jtvl*ߚlkV:oͶ&W Ƌ,[rHʬTerK4pX1kZz4o8ª޸ ,m3X<\4)LVbШz)vIk(b3gi/3S]A;ˋW=qŠe7kB.a96 LtkvcwzcKd;T̝Ƅ4C ;C8sq3$aY\پ d{)ڗLuJhkIe]u!f Kոc9SBrYR ~ SFg.{ɰGSBeXg\\6<ctwN;] ~z].^ux].^ux].^ux].^ux].^Oyg4RVdMLilJ d=lb5<ӎr<~KGT#h`Ԙ3~?;/1㿔".C+mQLw4eǴ6 X?2ٴM+'[gpgȦٮ qu4o i6JrXŮeim>:WmQr�JMeJ'd)gowX^GiwI,rD T-vdQ/4x<x`)!lq7v5Zj43.aFԕβO' y)kڴFvVҥuǮނ`?%]cWeΔSYr*{Xar1IaD|q.֜șFˇض-Yeux].^ux].^ux].^ux].^|Gw,ibls8F|T+Glv?gtS6]:US$x8\91S¶ͅO8ziK$\)%w|n)8W׫>sI9/9%'r:;dTG) ij<He'< e2+n99]'sdιD6d3ّ̽sbKu@-}9%}16˝Lv4񺴷=@ܔ: GdkZr1s~DC}52[& $ʝeG?2Dߌ}:n] r gpZtY(gT|ǚm;oBNII9ZzuN,=-&QK&s@[<bi34צ[1]+|].^ux].^ux].^ux].^ux].^_.1 -ϔ{/z3vK1iv][l/kh=k+c9#LꙭܝևF|w|LyZ;A$%>|f~A Rw)¯c#æ.+)]'HgUZKK'lHF7S%oI�^5-8-+gpnkʹ~wí$ٸ{ 0u26v0R9{lpٌV:;/O81bp q [}{b�Җgprk$mFcGLo#sx:׾Mכvյco8EN�]d}cQi�%W, Mf[RiE+ni)Ű@}izxc֮uo*dnk C^Yzi6@8~ HiJZeؾW!$e90z|&V5klY;ix@h.I57SUwc,i7 ;⌦u͌s瓶悅c/^h^L-olxx]me,䐄o ,E:V`[[PQZeɑ]NKɱlo8# #tZdg}_ LM.K$x'I,pZ yb66|G&c+@ O.):@~P䭪UMe' �>3WK˲bd4ZZ* )oS?>U[CD "}um2~P v0Q<cӵ1kǭ1ADMLX4?k>-b- >A<:`Cޠb8Pvz_[ Y:2T'N*!L JA&8˝L9Z-/nH0E�'A/dS@E}(ta!Jf (!<@)iw4Q [n#MXI'l}F}R+;0Cd.nPj GvibOlE ^X 2b~,?`XX 0Uq/o dn  K(@VZbeŬ- oWt~?٬~YkdguR#809Y4n'hT@,0fSAJNX ߵ-ۥ Aj-QVy| ɀeʍmk4HOy6i& lgTm=M2@u6 ma 9;K-QOnAv ċ; 9zh&pWWm@H0nj^v, w [434[Iؤ1+ `Kʪ`꤅(SF`ּ0_ې9 8?@~*;!zU8_SrpT؏fmOvu5( kWk{Xl/t8 W*:AA XhŎM H!N仃 Vy%`rQ>+ u(cyO$3ߙHxzl6B] HA F@ Hj^D1&QTl?Q@ض>em%Y?1 1ؾ_Wa /x'2d8ܵj r;˓.y�΃(ipEB-�~ [%7 �F8Б =`JI%Tj)N݁uGIlN̏ՁZQ@�h]'!mA3u{3G.5 :`2?p`'t`U}XA\d]6+2&<c]8x܇~2 �3c2HN39f:iXin!2A]PM~rEb(*9Zs*,@AеN,l)w!ţriTx6\l#rM g6p 6En@O$9A2E<'BΊZr0 iqP NQ0{9nV[8XNAqPXT|r)ģ a_�m `[-MptAut V8n``=Cn7WxTiuYWy'W[繕d[D^yP@t ǧj_9ڬδ{\`ojs :cXAbZ*t�7't{b%i+%+!s1y.aJ\urw`$>C|A ?<WƦ3dlٳ{‰G2VʇJ?3 R̯vp x. p eهN.(b=/rLz`SwChގ!(Bd}<rԥ~aUK;{'Z84MtpX"PX"nYOuXP["=`Z;·sq蕡0XZr5@Zw(2' ܯV-W  `j`09Iu~VhѠҊw&%9dzm3Bօi�lG`3�@14 dzؾv4[,rydaJ~&]O|#)^ɱ8䕜״bw, KT G@ DqsN_njqi m( P6N4v=&ǐIp4[[y% \5zql[ńsB.5?n xXҲE"BG2;@7 Zzt=`o3&֞yǩ F][A` k ;Dg%AY܍!l$,Lz( O[q4:JHuQ @@ac5bQ9GfLf \H2dԑʹ\P% `Yh@ +&d@8Zsx)E {nnX` q#֕lyCc$a0NPaV@k@@N"'}Łլ`0A@Ǽ@A�S$,z1NPNo9}V>^h0 |xm4Zv?? Ao(9ZUC5m(-~ nР;>7 X<qLG;=.ވߡ3`'7q~Ă6 |᣺$T_aW0$Yg%B1|9%=@3 9zL *;f0:,>◨VzL  o.ͰV @ ]*oahaj` ↯Yӓ\uv!}042ɇ5Jt;CE]Tqre`u?B5:&`IzZӏ$70G'Z(1H`aH8,+#I3P& } NLYؾZU:e<oSf]DF[/K0t�[Xa&<̅]93{:y+PAbrڪ:5^q"NeI% PŹkm$;r?ju᧴W$T\ W/+( 3o@N\׺ pzwf :LO9tVĊb@=9ˊeRX㪰x^iA$]W?fFzCA/(U-uM:(.=y16+&,>i^5Iӻb "= [I`?%` LP"q;2{Ȋc§y/+ 9՛E 5P;t6t-Oܘ@^ ݼSnOC~STvL+r'n4qJ JJu$cM\#7S)I,0e2t܀\>3 pu,K&LF@8MU4㉩= ,t܈<-(uV  Ԅ}833;aAIjeMW6ƨr~YeyWt1+,bP҃) ϣ> qN=98oq)3bԁ|ڈacǸe&EcQ`۫Fm118g38Y|fdŝU*`;>`,pԈ*PO}'*m'%ˌژ ;L5-OJ.|rn5m$OGLNuJt :MgFQ@|ĮS,kM2㝼 B)AghRxjd|e2sQ#<*`0c& ٖBwHg]g)HO͞sAzqļőejl.C"03-)F⋀�r"l̀V]~F"DpP[mǫVp45{ӛİ/&k)=t;dJHü5%@߬rIjchܹ,w@3Gi7rexIV&`V9#Sū6[gN)39ɘqpRF^)|u'5Rd1cF xLqk U$ܠaCSٹ7lN'%cg&1Ȑؘ[75g4Z'fFg*Zs#s&";Sן%*1AwT^`A\]eT<(a ⊆ŠfrfLs4 o[ƚL{ wN͗! @4]uTݘJ;VHO֓"k=n tqLbNe edFAҹ`LIdPƓ( (z7B0%}W|Jo~K^g.td洍C@>p C:ے$Aqq@iaH^V2dna^.P(IS!ߪgm+N!j´ %깓)�6zu̮4͍+̍w90˝n.J [+غ&%8D}en L:9πQLB}3i#OEŒ1 #v\mefs.ŀS, yvo@L"'wg(LL)w H%Kq3W`Q"TCX;ꌓj/f9>{+ɆQfiʛwٌ 2QΌAC\ubLw3 w&C,J_X2Kx1G+3l6>0@,exMbuz;pJ˥z c]GlH^p^,#>UY@4RwxR -wS Zg{'|O&)fEs@UH{BT_n? , s T|Hܘ�5 3A?+2o)g8rdZ1 1c`@x;=M_>4^f>= K5Y`)LfH3 XqsXLtiAuvOt4v gou7D&P^X/.7f25 O^/K9 _irl:*k-r&YRҗ,)NAD>c~p[3&Id2%MrUh1}sI).p4逩΅2 \zJgbxghl0gZshir7X\j :9+IY\-@$w&%p՜̄�~\!u028p, >it2s#NJGFrՃBń<X hU|ȬM2{;8]<gF oسg^{V`0HeԿQHo fЈ\)5uMgA(0͢єYR\/kQapT Js=НzNc´ĨOc{\e@.e/bTLN.4JIQZ^=L b>/+�ͅZJ %,HY#:+fn.R;0 Ki i٠~A.ݗ4FCi _y~sg5>�*P. JH4Uiyn>y? dWX63Q] y 2}5dtZy٘2+c8ŕf#3_I 9UG¼efŚL:|K�R[r癛,s:?&Ì#+^+٫n f-9ei,cĭ%ʖS}A7IN23Z>O l`A&`X :z<+c~&00*�Ms^3K e蚫-LϊGUFAH)jkߧ`J- 4ͯ⌤Y%첰V2Chu M0,ѣrTg|`=Z<rbFBNa*MqfQqyxL{]U2ޏX/V|$/3Kg=Gɕ6;))^<[FP>p2`ykY}&�OȜ%=pVԢN϶Y<V)E ^J1F:"H/0 atAmMΆ^oIJӃʭw,5n7Ktl֠}@X[ �LHNP12% 9pA$@&BИELQCc)S|b #)M(*OĂ(g7 >7|mYO|.D^"?6̮)ќYC2|™0ieH>If"!f t[%ZAHho@�O kfoYrF{L2ƽO%Mӧ'''D<43zLh&<WU2v]됞rZ:wduQn{aj+Scd89@n'EP?w9xM׊jЭU4{\M_G4تuT'WNN&b{Jsi 7e~~yXAӦ{_}ZQW3dIam֩]I\&evDuSh9N'%l;ODREFީa9jk.շW=1pEdvz>/]߮�Oמ)!qڲtS4a/Jdd[z7P‘-ؐHOA[H!IT_/?<?0WjJ|-a-kk0!C4>�zR:}kRQ.g_Oֱ1+]KF9M=W:٫OjMC?ƿ=+ͥDĖZeV I9Gtt>[I &"�|Zdվ8:E:a)438o߿wsF_!ADs8:.>÷V49eV~x?TϷ/ʗ׋A-_m$( ^|ɍkru~G^ ǒuiZ/fۣk{vjf]tY/@b):/o8/Qx9'i4pzm{%߲1ǭ;&nufױfwYo/~j5zϸrOMaυ/o�X;` O_zzi<Uzg1d)g³NQPOQߗ'9XKxLeP?pFjt88_Q'~Cގgg~D5u,%O* -Z4?T?U)-/!SJ4|~^S|͂~b<J,_eIxX&}G{6yUS[Ry":|^zy2?uU#[1Z;wc$5U[vO"t|K]k%?Seտ[MnYqֻ"A]~ #V+&Z "krCc42~fл ?WP@$NQ搐z!N?92Z\ _xwi6W(~t(|Z?dt1ŭ8sßUןWۺiZe<H�pI ~[PMHu-=& v+ZVI0ԧZ<:,z cɖZHKVC [?Oe82{_b}5,b;ow_;SDߛ>m^#> 4!u&f5T!ParS<}.(C<`7Ϛ}׾IηNxzz:Z)׻>m_zolW<7n׎_zҢ/3ˌ 5y:RU=BS1/Պ*�ڋӝ Vտ?P qtxcؽ h pG_Z{TnoSM܃c~0ES`Q.b #(砇ԏQsE!w@١M/;Fyy:)Կ|UJԮP9c߿tz]PP Ӌ)v!iZ7G?26 ȄWuݽiqmO^&~I&3AS٬Q-Ҹ1nY*9}7xVǗuT>Eo\e4:YaX_(N}'q<kAsb17Q@JGT+{D/F-GGYgus|EL5pzhGpkA  !>|'XtYt +cJUV'9eh!"N|K v}=ˮ`uuAp(H~,/ɺm̻'>tSyz=Xu)i)jnfzZ;]󊴝:nY~fYJK͍e&5ƳMlN\_zۊs KܞUn,ՂPh~/i1:~k/==j"Z(e+(8M)6XJ;ޜ|Œ_,8caAW O\^wCDV0yA;T2DXeq]kRJfmhwL!ҪbO6'ng ~q}X+6`ř>uQfbp3W,p1荔儴.)JˤUj?WԚ.%<w%[[ÜiaTuc-3)<4߷\f#uyt %VACIz̫-HNxnA.ذ˲=Q[3:)Kڦ'JǬ=M1_B;>1`@uh~Y@a[u.uGu\y~,uO-Lj sEUO>B+||LWi~>4 <zgg@(;j=q ӥqeYKX7nV!>cU%xDf6[_<2jț+C@}^cvmFNg>ŕqf1!FQ]86v !KC(e/vC֭FG\7&}:ć;Ѭq{ (~ܯxGYf.+gn$k؍Pޱt9q;EB.q;aW͞zd _U(NS(BS o*5zJXNucr811G43ƻnX@+B {xDotڛ6߄5L{)p-b,x2ȴ,22?}aTKyE4W[Wq}#=Vw-n"e nmF\ۜ*<`bbyOϯˉբhAJ{|-?DzJ |jN#U]d9{j? '\ǡ}{Z^83G+xllg/aCYV0E<QN568ßAdxzlĈxc-BͩYªU]6qlH `BxTdh#B*g=KeՁ5XsMN:!b 5y�=&8vxBDnLFO}g%XqfηoΟ(2od3 θu.B3::kJotTS VTu2#e#oLqV%E#lʻo,3R7F`K<*:yX_;n*0D8*"Pw%T!(G4gaԋuPSZh�q*FoFlնĉΰYRMp$%}wf=Da.zX1L퍢l-TpA&D/fxA)k #c Ъ/?w)_<_dѩ]Y "\,,눸x)bMu,g0s׮ue8`")ے-YX$3zz1Ka1Kk5x=6'P>>Ͷ^!#95eXH"wd5"cRw=nTz|RAmDw e@Cy[F-2REP6xptdMY0j}$zr< (AK 2<,Zԡ[ rLkFƺ&Cm*@bX] Uc۵dIZ뉔՛-+M7t'9Yp-E9)ċRӑ@z)맆ˆj^PgVX{bK$K ?7oT7$0OEjŜPƬ.'.J={JS* |.<IZS;jF&mo=L$[0d47ߎ;g/'ѭ;J_ 5P�1+DYi}Yl>XA FX[�&( FR Sg|y+oHmtWMةs ul1Z1Xtvќ3:&v(ד0 JWL^?"#SRŀ$՛?3+s=pWBJf'yC^{|{H\feClT Zߢt=Z۞r(I? G#2e5}V;E|'|])gp8ÉtT>)3/kUҭ۫Sҳ C1zX`1ckE0Vv8 ê�J&&y}vmF]dϵ/Vy;tȫuړyV~8C[߯_A^[6N~b unianQ-7�[?y CxSsOQS\rl9hW9Y1נVAm+;qY;�\?+ G)?l̪SG)ʱmpgcZ_\ϩ*\8[ ^P|N)}Vp;fu~rMGr!(Kc{|IXvM{eHOObMGS*Nb1}gjzyNbTf8JCR Ir^ pXu �ƷJPPpJXog \Y.;qNqFh6UCm?rBU4,[wS`UT9\ti`-NB9^,³6.-AU{&UbG1E?�V 0oqD!1RsX~ؑ M%CE r;6T}"Z & UׂSۉ;F0K&KwYPtΐg vc-fWyg׃zLOJ_. S,q^܏Drr{s6'yR@ YylRܽ07Q,{:wl]RU -|!yLxE yw bsSuX_mA=VP #{҉\=gsU O6bjP>gJ@IA=<"q߮>f�'N/wq;3)h| =@~>{ԄLpiwFܴQo*,Jۍ}PϣRhS,Դݕ,�)$uIjWBܡry9PbBGu#.ȒD}"wUif<wKVߵ ĬQyuqHLKw @wjJOֳ✹dz ٬u"Jw;|\{XGo%w(ɵ i%0e![N#(B7jOUjvLcD"3FyԙҰ~}T_es-Q+b\^N <Y:U;OR`oaZR>9?fEGDG.ѐ-T3JlO!SG,х6TYyʿބ q}K BM=v!p @xD*ok҃\YzK u`N!6-n~ɻz7+H=M 6L!}.(n+4G%^g\IJ`ãQyGjG\;X q_Sb3 yXaM%[u"uTUwͮmeˍگ؟ VfLL(1ݙd*Bzi/Nه:h0QrW)Yg˹k yr*Z,8rP_Ekz(_ZOOciάLJmحm$k-Q c/Og9Gx4|}v5d@Ey頻5:A{P?wr,aс [V'ҝ[S7q Շ]OۈB}]G*\J}nꍳJGn OMRzi۳ARĒvZ)k0UA3>a6L?`naPP3-. D]gwMDFSxjpnZw%ixX5=磏<%wwYk/g%zR0f~Fs=9X3hǶ:6CLYn{8)SͰ"3dR/d[Oq=1&kDIӜi8"2y'@SbnVmx jZjgCi!$5jT+,9ciq`M}YG8H-PxmT$ ,*85gIQL32,]MΛwq\&,#G}\?ew�LT) Vu5%V DYm1 CoQ 0lSm)p,1}TM]GkUA8"j%;K˦VDxRMu] y +*}K7)4vlZ޳bsQ7U bڢ#d -1>2k7Zb2}n7t~q2J۬ 77HgRk@lC1jo-gM zY}y~*/[ֿ?HGO1O{aɪ +/2.Lq svVE C}#A%ߗl9/BR֟2zk#Lnj+^K`ߡz>۩rZCN`3c��/IPgu%Us?4tuZ0Z" !UbM 4+X\wqJ/#,Iq$j�AM@GlH4u(}ͿpNfޫpĒ%A}br.>(; p@Wgq�/(s!~%9<DY7ASYSܽlGW|Ս-BTT$�`Z)FNY� `wj ީv.i@J<, AI0L~IPwMJ 4}hHܢ|AU$24gߏFp^" JsyyY](IBvt?ըn)j<\d =cxxʻXOݮ(c`9WIuzp=fw  rHhd:5puWߦD,da%3"C;Dc6c sD1յ'k7tp #Oud&2|<I~:SYPח0{SƜ5D3G=Yb-O_~$r\,Z)hY8A6Sb,\sBkDEqH` m&\ChGL OΓjrЪ/.2%! stڳD"\leQ<͢x%y ܉AOzS|^%HFTrU m17 P/k.WDF="NoZ/XDz βD_K&WǸ_lyb*x3p4WQ!zx0A,R %lmZ3€f8X)OHt[wcp0iIPzQU\ ek3>+ R+I=o\oT䜘<?~8F*ʪqYZ>TxC:ա)V00ZKҽ!/ B2]EB{Žj=/n +XEqj\MWj<w 4k{c{lơ0H6oLeMa`c|ns?i#5+- t' sn+UaRl }(S:'^5G6H*O/SI(y/?F9Jek)+mw?C7O]`bwM#Kع 6ٸ'spCymtKr뾽G6'`_-V) %�~66IM7wUDn\T<c� CȝuLUa*9yFu ELn/yj!~rT'I/2uYςF)D+]KbK�Է-B|<xe)9+࢐dlb, Vq(<<>ղ'Y{&GΌsN+i ],\Vg-]ǀ y Og|MqnuE@}D1CtϓpkfeQTT+U3;U(u^ Ʈ\wT̅(r*m-ϛYU6媗VώopJXgôixHr£$ѓ4 w#e:1 a* ;~Jvr(m>c6XO5&!p~dgےOW@O*^l?_6LUl^^1Gh x|-�k|o+,MҤ05d!8B!EG) p^9p>_ x>:<Rez⬢.&Y?,ȐCŔK>+7ɲHa<P ʲg苾rwY&?9CB>z#Kᷝ?u>WdTl62r·@+PKe*Ĝϑ BfI t=&w(Y"C0-=az ;FE Bݤ׃EIS6BKF7;% ٰ&|jwNy88JDͺeN<.QM/h}rI|mr\QGB`85?F)!& |POYx뉉CfF)J5km*T&-p'Uy@f'(Dڌ %塝}Oa$ %8=m@佴!s 1H)LzӴ.ew wpOfv3lbJe;+e#"fAӊn5sX(~)_ށ 6ijtg}qc9I)<MEvd }Lr;zϾ_{.T^$͈xeN\sKrh<7apbdQ ZL؍LlxWyQͿظd}ŕu ozP,9uK쒴i_߬6ϙJԮVsXe*D!(L-7gr_]t3ɩ.4ig' Ρ2_U+8|M!&bf뿲 HKǮ4< 3+p'4/%;I`JmD q֘5ú?&˛$u׈辳o[,hOap&/ v2,cYX06!gzE(Xg…*:Eϛ{=j\*bYӘ 9MOxrէqk#؝jS#o$ιjVLϿ1] nD22$r+;g\dUd!B4E '.ZebyS9M4JU$ᚾ!MX{Bc22Τb ¸Fv4e;B 66O\PRuR'uvtΨry[LMri%U3yᖐj*cO֞rg@+%dzs;cM?>8wzDUNIM !H~9owۗAt9(m#_--35#9EܯA%!(Ѧ4(g3uֺl6t.n ` vRGw@˵j=tX+T4_{%P7E,d$+Jm5F ZP?QTq]ܱܩHE/؊R3f=e MgFF%obr(W�95u=3/cTCe8`W�ԭ7(:*&7}X9rG6ɲO6i:c QM ޭM7ȔƑ֙1cd�B~y os٬`&ù$Wo`*Y|DS ם2 6RlBLgꋡ}.C(\*!`^<q.S"\0)ֳ@Ɋӈf,h<i.o$2蓵dM7p؋.[h+N,{;?~|*q= >}҇[).iL dwW>QΘlIG~Jė(; rLp Frw>5G Sw9e8ڵ1 4(ޜ&ᆫౌAy1E?j;1LoؒlNIx:~_ݲ *_9Ò"*Dns 0M" :NAUB%MYWif�!ʞstK1dhmc !.f53�%(22CPBX .ytVJ|^J AӔGc1E[|pzcS\H⛲-~#nDS-hF AWsN1|mib7>`s8 !##g%u6Cz0Ce/BPJ4߉:g;{6V`p%a[Lv=J߄:PNT6S#͌ji)@={阈JzF]UWaJYo6awp @ .6*ȿh!T~?EVk<9R|烵SD0e/?B$C&?t$6<뺣õ4;c-B<q8vVdQ 0 @[\: #|=*9Êؓ:OK)kiKyG%G8w-ddŔ-YD ,V}Ze,ފ&ޙ^3pxI2]vaU]ISkΗSj-6i 0iXV:YnC4Ӗ$IL5dz]}9g_"}ݞLf:ϑ^"|P!#ZEn}{yg]Vy5JbCUTItNQVqrd,^y7e9F›[OtZ 0Wk$s"}UΑLeʆljV]<{ܣM NLtm*Dj~ 돳,ՌYugU&&ѷGUO1g,c?.N:Qik\qHX+]p4mvͨPĹp= ۬񑙯T9H8٦[Nz(;EZj|57jܯ<^;XrPz#f(ϔVD+ ʼ+dGZr$c2<R9˂6we)g�=GT2R%awfAf<Q Y0 s*ffSLm`Ι:֮q Ћ (]7^5ͣ7񌙪,H~yr9*cZ~'$jp^֠#;U,p>Eݨ6Cbr뀑;Xx wVn^- 6rY:֯_Pn_6]9[')S@&$,xjWˤwU-8W菌Q3HezoHgůXV2GBe cx܇/IJ@6o%$<-ڧ؎On2hj)wk!Y7"dJr\3r$Y/W6D[~�fgKlTpK|r BŢ4y!nq(=E4wսuma<_,/t-҇Mְ:`SgXO dF" "o QTUmT[JeY^uPwɮI ;~ ߮YS4$q̜0Hc qd"EZ9+iHM[>W.A+btN#4r> Eeۇ -Si<7#GZv~-ɕl +oN8o\Oj{U.tӭDi@S?C+6ө7'2%H,Q ^Ddz8r1=YwvДSEߤ\#H҈fʧtmoxP{g`T@=zn+wlN7feZN؟@ne#V1v[E@Y b`޷}Vb Uwfw=eI̢T;1AҰb87<zz$ȥ;RymKUT:<$ A냟bL!J :\`|CaG.EG:- ^S+p8RuU|\6e1}UHgئ)GUFA,.5K拠mf~724SlM32\9RE W:2fδg2ve`M׭e lOP>*W~ZWp=nN<&^=6DcΧ2O:&.D-V^N"'T%ͳ݅vcA<DW=+3'!rv$:gH%$M[(:Jua⭛WSrH�W4[yt=s4A|>R(hO{G@*~l/AE@dМ�h%|V)( ݭwƤh ]UbzCh"*d� l %~lIH΀Q|0I@W~&]h r _r\甔?$Μ*PX+淦9V} _{߸E;SYʯOcm A�#?@uAz,/ � LX\ Z1$Y2K+HP;=HY3wP`_EϮpqs}UPa;X8y(J't7hH9JtXC>W;?䀡xyOUC2߄Q }IS0,z~υ^WTm,F}9k!KEy h bj=;뾼C&zqG%O]uVow3xv-? W'ZxIBݹ^\cxzӎW.|!LW̅Ku v=tɐ{9+ 8e+$nU@cm'_Lq#)/1$l:;_t[%Wp_qdb7 +DXwNij p91륮!~(]_glWD!Va]!h,qgADF1_yzkC;c$s仐'CNs}e߹$ߧ֜cvx$=39uȮ F 5gk56@ڊ}œA�[WX.*L_(}Cqf'#EsysP'S|<.yR"[.3.(QV)RHutSSF;oXK8ې'Ns*i7Vq#[`ׂܮoHWFZ=u)Yіr;Fr6{-:�3wGd-8LW[t7{5\:,|b> (;Zޅ8;NPzpyd&60&-85(֏%m%xHaZďʐ MŨQ7Lߩ1'Q授y j:iܝ[WG#7O=~t}Nx'n\wg oE:"ߌ߸4wYtQG`Zֺ/HFT5[?+l'UC+7i<!}Q2, S j rt}} l,XsOd|f9"-E5P՞9Xr>Pr\_bl:W!Gݺ_aer4Kx'R.SJtjri%/Z@5<J_xZq5s8H?uMʴ) ؤg~,`k|Ԑf[*smp ێ /ӿ]ŝdVr\~֬jӶ%3f=sp\\aJIƬIoyd:3\n={Vl.hIn׸Tg*{1dsmY-mPMnMRDA4<kc ޹w;Z`y78=r)kD l9a죔=_ta1F&$`Mz ј4 sU8a_E%{<$*2 +j\|*7m8K[5Z0蓮*qT\ 50W"sMpߡoxq<)be AiCSĠޘFӯ*V7ף*%eWO<RbJ[`H�m5;[t}AG6$;:FZjv& )eUڛQwfF|9_h+R4jfnAϋn*ɀxm&k}CϰģԃPS>bm"G>gnjDnӇ6,o>cE|fYMfvRr|Ẇi2`] YB?Wra(_۞ٶeb=aoF7[Zb4[3CGYC‚PHcK D̳hɾATϻh "Ζizb̢]{WxӛbڵQ:L܇b˼j,_z>UЬryl8*`Ee0]j+]U"mo5[wƞj_ށݻ_F K Q2)_<< B/3q/8`W(mRj¾ [m8�CFHއ^9V=܇OK|54Bxqll.ك�K{!&66=:sZ]P2ēQVWv\N[S䛹hS(5ͨ搣}QQ!6h gASp*b !d;A(miMT%U{0ɭLG:(B8Gq"3PiZq=まb,2LHRXYwILMyKzHbGdGϺs&&֬p^0nJ|zHp5mر$Ŕ*ϨRg4Uq<3NOޥD<d?76 [HƧTcC^,֕x&ƩQ5J~,l#Z'Qȫ^d:<'XL[JyM/f V9c$X09z5U.tO2ѮUUIC"{u%3TߔPy fi 5Rp9-ڝm?uElh]d ^b HZk ˛[M<(&@lqȿ+(@ <|sP>vSGoß>߼/5lVeXͤMNBrCch)_nn''ϣG!4Y_"!D v "  > C<IYz|Sh61 IߴWfAޝ_ĢT׳nGAmT336fS"}ӸX<οoQ%glҫȕJӥ*+=gpU5cjص1raz˳;GR" A+k5|!9]OUkUE5?Y;#H\ o7\!bK-XG^ )gt5\1S`fOvPy~hMV}$@*#XA7Z_/t"hϕzt~ޣ;pF_#'C >_cu�.L\YWSis'.<V{) CVU0 \o:جUbrz)H5~TSw0ݝ Cʇ~,Rh5j4Sr&~]nr]g^lĨCr 7Ji, 4Sz4{V�-ok qT'^yv3r)T FIs$\;XJl1F*z?v:8�zz[)c20PWj'M]eig?"ug lzo 7HJ_h*ױ XZI-n* Ǫ돼�{M#%f YN3Kw;ׄЫT;茬oݙ�NI&ձo6F r%A3;1=/Igq $F<!2Y5'갗'[Iυ$Q.S'ì}dcO砰G'>vT)JXZd7XBTȻkW.X[ 0UБpBah:fϓ:F:{]&*^hgzNDJKDK&ieٴt͊J[ - @zGZ%eZ  U ^"ޥpNp/yf '*A",2Gܙ$Yp78􎚐֔XK$V:_BWq$Omn9,~=[L&ƯDuz4Jp3?y_3tqXIS�Az UHP�o6!%!Zg<NM\];OFLAA C־;,Q! 65ۓ^tGmt=7x$6%AW nc( {~d7 UFjz̙caQ͒LR7B�<JxWz*фa,fS;TiNdxYAc|u =%1ZΔh'UXk(Ie[E(PʦTI�[FwNh $S+wj7"01MNYuWLg:.e5q ǜq,�SE:Σ2 pJS+U9X_eVY7)Ʉguo,q ;Ʊ5FGF6zf}S,30l�"|A(+#.)Ke rns3F?3rv+yLG:޵o21lZZۿ]ʯk="(+2=O^J5EJ 飇o~Yn_6G7n-pa^!=5䷶cl ٕ,qb&Z'Wum@Ϧz #J 3zwFbp3=KǺ#ASmToܕf~s1<r g2wQVΉ%H>kM=C&ꍢ1 ̛-A^"MvGiV~mdߤ_v8h[S~#2d1#-9sT#TfZ6X來WqW) 2?rxX )- CGR !u[YV oI%mJ- AL)".DŽM 2)O{Er4Es;}SS;x b>$ˑ;ZQsc6<%"b-&$5Hx5m3`Ɵj31kQI30UVϛ :Y_|aݬjLe?=w_G= 63Țy3%/EI~DŽhv?<`L(U(0j\>V>G(of٪uw]r*=.Qe<=,s^ijyiajK9v>owޣN4Ovi SYӋP!yDN/X1v+9&ZqpLGddG|W =-KUzKEّEԭ)Mxi06UOq:WFlܰђ^a k,I DDyeQV?t q<&l*'Hؤ>9'>~9B8!7z繅?障< 樀ԧiMkuR6}~0!eXBkqP:M'o;璍 =nmiQ$BJmG8(ߝ2LzSDA]*ujA+|0(T*==汲dY^=7ΕДo-=>SH\c;s' ckutcd.4Ɓ;gq.t; jaR\1{y'Ǡϗ\'Mc]0"oҖVlhv<g]Xz]y2[?|@Y9Rw\|PvS䰰)"*XE˧N٢eN:,Wpݬ�̿X}WU9lsd-QՅE;&{,1PEeYk޶u^؄~: Zw:>*3Sf 2U<] ,50gw+3`N~{:+A ǎ~Ʈ,,Hndܣf*ԫror;ٵ7ƻqdѱI&[nuΌkT 塊@Ɋo(!4CYIq;"tT.2yY@CG t E\Ԏ,e̥<Yf+.,Z`p{~}w׿Ԏ7kw%RS<'UTzgQ4`~ 6;rr+,sM:b~gŎVb|t|w&F4+W CkgOK.N-NZ/|~B=L䤖_a/>B8Qci7L.J.:絙J˪wO&~߯V9�qLibdސ-NN׼VA!mlĝ dPi__N1IֿyD&ʑFƷ~|˔k y<W+{,S}vU[n/AtS Ti{q?SݻEv淒RƯ(.B?gJٽڿaϟ::QMxVIU@zsgTތٷ֐;w8 H%SxI>b3]_]g�@uWj!?Ėu.b8()]B~!dU_\~ NM]ܵ2i "Gp4ŋl4y`=r͜h{:@ButA[N|i}y (q Ø t>@vT';GƉyg q�N96oO߬HՄ8յ#H5װze}™^e<5PW̛^}rĠJ(rInqYi)֦ {pl-ii¼>ӔmɄ˾r9ǔ3[S1k>>';O}ϣRyԦɋ՝Br鯞8o[%jx>33Ci1ɗ4+i2`Y=ol~^%H]vJ.}3KDTwSL2 Cט~2!CLQS\T. ),9cpB⧜Q]H2/2+Psޢ1W IP76);P=hzn3'ʸD�r =+7g˘,_Iyr$=#6 BgdiQڔa" =oQ:k͍- YJrb}^ndzlo :eWCRKsq ˂/Oɴt?ٽ6;Y*Oyޢ::,>W 6Ώ ߍYwYOS )=ASrGYm? }0fjJk޵3]Կ 5-l:F24prNr<8]>`!b]K'5ci''q^6ͪ[%j9gd a&|Ȅ=G*Ȣy9FlN*c59,OHy[6eָX-<@?TRrRD^Óи<-}CVŚyGUx7H5${HEjÜU%bxTem=rc;sIQ¦ftY:M {6R7C3 (gEfhm>Jei0k~⽔]eRtmшKb(EO5";޿ ҅[w+r[\bnW\]T"=[jRFRptpb2~+EzZAMƖ֧nDZui0g 9dCY7$VH@_` VXBE驝1<*v{| fތ\d#zԕXu- ?[>wќp /@%-@F*#7sIpP{rc m"I84~{agԡAN8F9ڽm(Uɺ]vsOPHpO-]rxc? v]MH&a^Ŋ]%l*7`XB79-2Z/2*i<REQ@sO, Yn<ϵWFzYSJ kmK#x _GP !=d9ݞ\Lũ{%,͕v&-qz!379^zzΈ7eD(x6=Ѫ59R@()s%'Yb''o KpS5R/_>\$)Q(՛7Qݕ5<ZV G59zҹbSEULE\|lֶ]_sCoR5?&`[$xfiugV h-#�ZNvlj_0IUU<�>Do[4P$3<;5 ]q|"KȵQͻ TaROA;H^w[oZ8jf^$~ $JyS*0̭4)$o_>*- =]$>5$uK@ȳr=,wK$_)̞sx4e)hjw,0TƉ6է_%a|+C.K[^J%XuQYjH'>ӈpL0Up:a&,g`0PKwDLxwB9̈U4Ҋ)GuKA;t >E~/�%u]˿.gg,MtVw<Cڸ*9bxۦKm^= ]UG7!́uuF+j8x.@lu0xXXɫ;ɂ wE01^G>U<z_jN" 0 [rUq_a1 u#?m}eNEC|w}=塸 { oOzhx*@L؃^A>cTЩjGRdrNesCn1%Kܡ`}bûE) k[A$W4*Nt!N}fHYMK VKf276B0skVGUl.~7y钍{g |.ֶ,`ƨ{:(:]a6^7m\eє;f�B|} *uK(D \@z-=qC h%c7V#ǟ?"kCxdH,Xi`,F{`2O4f\2hmVp[ײskՉPY-jauNf8[1fQnō{TiYаX˹{mQF׆/}k 94@8٫1"fPG a fVo> ]{^+XIJxWfhKt ͌@AS,P;XH֚Cf5'L [}%1Y}=0S06ŸhN!Wߊ(h'} ׭bb8fׁW|b9:[l NNTw,Zg41A,y:oa&l='Y&2 c[Tɘxs˴0>u{6Ԯ:QXuh%Eov⥵ UY(6wzp8.؝Tg^?=$˅4$;7ɧ?y3bF.X=,CRTVB6A 3 <m?Q (8:Y;QrӢGոcP-q|+ 5'w[s&*؃TFx ƿ,c&lb=NΕ ֙Kpww_Sy@yV|z:5)Y{Yk<4v0>HtB&2< ]N.z9zo(.Hhx{"NEHQDNj#bF@yM\ [K$'@ !XH9͜ymX֚TP7v/lW/-Ǻ{IZy(?s\$:k(V6_$$1"Du.neퟷl֥T[s1RT_ DF܎Y bΤ?=6BU745+ִ5 p8I 7D΍o9|^u8p><0dJ[G T+YĦ6"@B�~6&Gyjs3$|gAǞ/%?7DVNQƙqj.@UPO]aF|מIq,:1YQ3H(x݅Rb,U=jQ(mN@: 2,|mwW3rȣQ%0τBܒ .S 6KGb.m.̨y( JƩH8tݻ) 6OߙsܳH!WeeCEx3ȁfor _\:=~is"Ivܚ߽VeK(ڥB{0\.RZW�HDdghLIwL_ܶtۦ̪ ¥<]Qx9`ӗ3Y>dc1\\d+`~=35aBSkSTѭ=LgKV#퍑5Ղ6K55#WYQ+7 Xl1�wsW9[L@<z`]4O*pGF-Tm�|Sfp2{�.8AQc-;9=#gRi:t'do⒡9Vzxޜɤ.{s2!zX6~TfW@M\8 F(J!07)kP2$}|pWњ?ựPV \�vby.$VoQ(!(<{SYYN2v1Mhg`="VV-5k 9?q%]3kS#ǥ݅r-_ JPfF,@(ϲO IT] j;;`1-WW]̤Bݟa˴Rzgu2\|.x6LD&څ(ok yK̠ꇽݢ7@q$@`Բ$*&h^-cGM~Q'~?to׵gG&Eg*;s߭kĺ7Ay+źz6ֵ,YW>@^T mPy x@ʫ8MR`-+Y9hjJ yý <M Zx g 8#xԙ^"(b[a?8"< ҳPtȒZk2"M_$(tVw1FFCUy3KQtR?7G+<!SP&E""|#1YRFFD?Q)yz[<ܴgޤ8=8X5՝Plio'WvC26|s8 \G[K#j.:dOVܙkY`�q2\%wi}2 ~\ٷo)-0Keq"&H=1 { Tj#ޭNi4,=Ӻm6xf5$׊ΙWT ^0 iLYXƸ7CLi ;,>BeمV 6<M+`Szd6,eZx-z̹Qp]~î(}&fXة]"jhE9~BݳM=LIn=gN8Fȋ6 cԊW*,Xɡد4e1ke@{\9/v۶loidABnx]%hBt'U΁-g3tOS0)h=ji?�fgrr0mT1fwhZ땹Y$w:Ka033*~.fQD/UU`I]!M% QPv�ջ/a Rg/V +ƮL#Q]-YO|O~U+\-;%tR%cz\)l<m$k@d۞$T:7\p^3.wJ V!L>{<ȿN  82<<A ~t'eU覵B?9 "\9&1ṛ5-XHr`%@"lpV?̤{D&f 2G!`=&}Zt-#?-8khލMǃE5J?޼됰*͊G %<ouq-wזKyJ#tsD3@Xgq�Q>mwg5¾/],a$_zmHwS#@nӄwlu`WXtqBG_Yoܵ= ǎ\ 8Eǘ-9/q(Pf}b�,5{R hE?oBvh$5J�DԶ 'n yίdwV-΍ڡɄ(@\Ebit9d �d{Bh6R<lM>{f^_<H@ͥ!rz) gGd]WrdWKDQKH̑b^đj|/!?֬עB(j8rLM^WE`ntSdÓ?DY}?ї~E1~ ί-Q_9ڄI{ ϛ㌂"%= ߶>d_ȑaA~'Oq2"|+fKx ]T٨A_kG+6`Ƈ*kwM 'T7F;|RFavr6bYBĨ7MgO(,Ac>&ƾlRd̕iͦ.Wt,g{I8Ίh+ǕmD#yl^Jk>Q1sY^~r[kS~y»mD,eT-mi[T\c,WOl:ֶalQ_ȴs_B0pR|zW/,LMM.{l*u\\c AwR*~W, jlTQ͢R@~YZS&:e<6Ŕ&aTd@ E( *qb4ex{Ã%Ub-ZXXZ  `SVIYA]2N:),ɠY<mZQ(*ngNyrijS�?0 u([ߜmxr)?tƵD(;߆Vf˙*زW׺:R#l˺C/.Ke?F:4*Tuc.kΫǤXُ(t*7')Fe+ \MچB3J;L%oCGk&)B@ɻJʱXHJUևC"K}_WRvg UDN*%ĒmO5(p--WrFĢrE D5yr Sӏp<�~<[˖Kƅse4sޛX*$εs ?yk8'->Urs>Ⱥ,QǏSC<wʨ7^+4�QYA#wjs <)&ƜY"|tU=QYf?X#|8+.nꩤoڣQ{ . wd/UcN^|Uw8Ă~M o+`O/t~V"B -bW,G>kj59[IJ0 )k{t.NFi (s^\dB؛?n2t,2,f}F9̬0las鵩5Zkd*iλQgрD#?S0Բ Q3sjVs E{VɴVő#r.MF1-)y!0|n{\k0ӢȒx F<6JYKt"BcmtZ,l#%f�aеvta9VMf欛y@:uґՙ,o֏N qګ__'+�dd@*pGVIJHQXϋSRYfٷo4`ܿBWFFF׵춼ň5*dBLO(\~q'kKI޷W2ySVNrǎ!߂ou'(x}9㮲%ipEH [Q^(d1 }B;S\϶j3Bj^UmԨm@qo7Okdu;Τc=% `UCGռ]lV`?*v)պ`b}lK}kgR[|S{~a\fj%cK>K< }O -qe p%z"c-O&Pz"UFk5]]wyTUzzHHnƈbVcM?H({kk77މffy F A),ǖfa]HOz~Ț<vNHmd}=6R 5 fTc9Zse6y+o;R|o!Z@KE1wUD8[E@*ꞧj7TM~/>l8oqe NÜrBYg$dE\]̷Ћ$k# Ѳ0Weq7a;KdFmt-="4{ɼ@<~̅Rnj`Mvc\?M4H ([i/罍[2w;" mڴ }'2ۭm0&'M:=99Y<7jCXָR{ŗHw6Du>ANU v&TDs苶J2<|R{<{% r% ͥ=U"bi 2Bt AU^ܿfUvo'zRf[YXHK#s6JZM_:֢EU$ 9yRJ b[@kz@JE_#o;V\5f˨4c PY8.iLS@y?m7o[ .BWs C[⮣eirbP+LhNJEnU1uKU%SK|:8mX584D71FœReOP}]<Ť A|u0!ܷ..&INX>0ak2lN4Biz );z믔4=\D5X>}¢8=U[tkyHt-rt+{WaFv7/b!WKM#:ä}sM>'\wXZ}Us$he#n&3_ 릺mWh|yB`c HH~a^A[lAAY\keeFF(: !#8h;/loJؼIF!.Z{ ; GtʬzCw2;h�Au]8uc {=S>WOü) ݬzSRL̓B|�Pьq917fHL8qHxDQB5t=U vE.]U`DEjm>S.j+*l d#g>cTdio6 RJ>R&$HȘ*CǟB Ps+@쌿<t%L>`p� i7=7\^ ~]F*vtg{p 'GjJLwŒLR__ \m1]JVƨOQ094e;bZ9.s(++HgXˤiRP5,ZlbIDs .(Wډb/99*n^REO,]#d "o`jd3ń#mCQC\fL\x=!GB#mNᬎ�557r"ndaϼXR\psx.OnP؀/eKcw>=a 1ճ"`YwEk;-n'O`MVb^`x=)0 4'9 )Sq(uWTW! 0e+ٲ@t] &īY],$ڊc�x\ E fUC(M=7E�GJ3`ZV+m Q%^J3eCcG_C&)?Uv)$VjjDp0ŭe??]7rG8S<:?PFZ9#uPaT<}C'muذӕ\_(.,pfW H Ϸ쪅5nTOF*DŽZV 銕./[\ULm+l#Og&宨<!Ϻ7譤oB1BBL;+ H/jDɓV΅>)onW擃W 5rᏹZ'^F\Z|(> qLIUO�hHA|h8R=UW\}ԙzE@n|SX 3E;et%:5tN@l(Ȼn-Z>ɺpxY%;#pu>~(cP)[tex$�F6*{*?pDE~{'xK^Y~YX O/@5`#]x┺XAm Gֽm<"PnzFWKP^^(Smŋ#}C S(_\ci00@@;3,9rѡ}!Qa}kRG#aZqx]—kB5YBry,ݛ�x/ PեCc^1\&Qzp[C yLtOVfb%_uw/xH?@[M=v:A/8UO)H!aik#/MIa~0bڞi<<}kAWR8 *IF'y>?M wa<FVIENԑ]2zr_Ea(;(9}4-MPLf{YPTu;Y. qz y>)$ppr|' b,q?,و'I}$,ck קAX9y0 $4(m߷{9NmuOajrt. oݏ=F^˾5];;`R�CIˣq*|k{7NBKa_H{C=>zRSm? io7g: {AU_yPx,iԦu+[!B `1%|އdxXISԼ|c0_4`<!h$ӂ98q#Bw�4CއA Mvef@hWHHx XJ/ۖ<4y86v62p>-_+tF{V<C~0Ŧ%1PW&oZǻg﯂)Wu &2�iqKB\]N(zP_d[ zE܀}p+xT'9 LbG t-g3/Y |YY<] T }ph& )8z0WΔLH$NI99+Qn8{lVXǔ1mN-8lP%<Ս/${sbo۾‹0P$70\ώ6F(~M|#]V2bu[bj8ݴېVi0ȁWlN6BYGW9� k屶=#oe+߳Vëa*,W} l>.CZz4Mgol/hd v"Ywh?Eן|'ס"ONWss'RTq~`SGe #+tDa WAt@H#؀{g=.ӪVO% `Kn F#pf.-򼺃YR[^QRzsKof9l20qESyL0E~v-3DCS Od(d$g3c4<1[WC:Wz6XҐo X{ )5Q\Ig 1NFru`;eh 4θ-\h b>ˆΉD[h= UkxU&CXB.rGCgrIUhQ�^JQ ?9i\Я�7?$ӥ;;9B > \ş;}r+}\%b$C]&\4Vm6W8vwX_{�$RpHH͓Gsye2%1Nyuؔk rxՕUW۽ܣ?,4)4AB0T.6'ZmfR blM5߱;~FI˷@x:n@I۰$o4NVzИgF= �j游2/QgjiofTײsxӺL濃Yd X2J`a,Yҕ1A rWlH0 &Dd'AY�8lquJ5++X8]D=-O=~ `9|6$'4k53" T P q02vS^ـxkgLb ;7-;Ur=w`|߲dIUu JROXp:9YO FͨBl)8?W%�"/>`>qUTȈ' w;)#?#%,Uv{@7yfNMŐ-#'`+ ɩ'Y9&;JzR.wވ]2PUceCM~:h@ٮEjI /+KO<h2DeFd0�쎂EE XFA hXQG!3zΎ" ȕj/$_ G#4A0x!8Xe \g&X(@hs#ù|bEɾbW(6FEjql@wKPM5p4<1}Yaˮ8 pHgGڥ w^%,BnAs+3U/PyO|]j7:ouLcR`$QDG8 Adƌ۰3e5 :#ŵ8+CV++Ny[8>ʵ=.&J9]/tdXͶc1EIvoɯ8on"NLCu\dVWsqHKS*I\TB\5S@ާiXh芢gMGٹ޵!f·~s@bxHi7"#pr믬Bݗ/_ˆiiDf׸~Y9;2V!~Òq+IjӎMpvKl^LqV]uGeKRQA %$`j[gQ.!'-ȅj bq;/άgPHN @DުDQ%*r]^\r43C^KW}m}f\m/"S�2%.+7ëV UZDCi.׉lDI=࢒&p8t-hw ;`pSpLO{]Sl%l|ɿ | ^My)A޽#F*Nx*%Rw&Ey="wYSVjr/? cݦw19ckqKt,H ~ uv*oJa: ķ?EQOʰg*#Wd^UqEʗ->@{|x?kQт-AI/UQ)y(ђ{Os(/K !<A3ůyAO+?Aw5=[)y ?:oɝʿãIzn ~4v.)- y }~20EXDAA:KT= )?C|/:}ڳwƐom TwӖ4̂x%7Oy! vWp:ц*B] t\1F5~$೔+5[ᕵ9S`khgVB#R kLh2rӆQX`dSD hL5U^`+J, (rW|_xCBxJ'ƽ8.aM2 Ƅ<x=6$=ԼW _M*47Ck~UWf%c`d frd6} Xjsi4䞐9RE$ y vtԭ<)j/�&фYE7֖c]R'R/l?wh( J]{-5#ļ w"]JP#JY@}؍PК87N3~5/*3ıY^Ge#8t~1qהB0o+!M*V~#+gE&f<[<X2AoW`&޼Iـp>VPĊ(!u^¤Rh^ynMA` �-Y.]S"r- {z"m?µ#:HPX<bIbZ21TG#Pb7:=e}YkmA˟q�nG? PL$b;V7#2:bB w�ccb5jo<q@<;.YtM4pf-4Xk>޽\kXs"/I -}ms4n o,B?ȕNvj(;b*d /mb+{=(@!{ zh@۫loGKTk/Ӏ9%ewc,Q4o837)crWl05P 55@9(ٸ6@pP>>t#Ԍa!CXLjJĪiM(ar x?*Vl x7=Q¤يTlPp0Y^I+֖Pd17-]8h8<XM-؟̳m"1sWk[�O%Sq0DjU6ci>-\ۡ2>[G-٫ חɏw&iC@b<Z_p:jmTw� `W8b(.G1�–&`1 j+ה[r~8[5 c{n_"G8ةr�O reS/tp3@"lQQxD#bT3ǧt0G `Ջ9C~,cPRټ)RkIK1MBCS!I`G -s|Ds1U#Ehlz,I)jʹIٱu<k9C]}iXuQe!j >zc-e)׋ 5)$amB\dL58Yӂ|vƓ<\bkQe6i( t/) ۡD3R>rD,Y%@AQ߼A%9 yH0](=[%bvg T, 'a5e;kaBͲHvG E|J'$܁}eߦI4@a3?$e_ k&07fOkfltN8M6í3B.Ԃ4vCa1x|P +b Vy=w@J{=bJP{3ˮ|{C \66 c{+*?h Qc﷍G6+[pհ!:X=l,Opsjw` _[pn�4f{"E`{\:` FOqВ}_@01�F"M2t>{X)0Sw�nϒcׁL9!,xmfdj , GqolV6GU .w s^cY%1fj&V/~ޡ 4}b`_#OҲe|;9 ηro4d|6K-�WiSvB&2I>ܙZ@%5fhR39vb 専hBG/ /729�@/+s׫?2ʴMyD#6f֨+ڍ#`nI$V\n"45 MiҁPRgd_pS9iC}P/nj.ikLU<�`R!Z`qEXs{9k+dG  1Sާb[`[r0& n{ؔff4jd zo b ćL|]I7 i@kBxx6�f[z3lD[g;V NXdcsD38@k"tURŇgJpvˇ[WL{Iq~A[b8,GbW=lj=Q!G,:d2> =(K!Pˑn6gkb8:dk%ܭ>axsh̻. yI6Pӆ*u]TnA؏s``;o Qng繿^'tyl rd<x0Z=gY) IsV %I:P`8׾ ,bqbןA Cz@i"ϲ8?=2t+`>Ў'_LB'53cl @*aU[&ulǶ|LW3v4~Dͽv- Dc@_5UϝpĴvn՗i⾐{EdtʂK9i/جK *r0):K aFe2>]YRd_L]4qߚzk:gڥ""_wq̒mDO� ?7GXݩx0q{ISyR@s5˺"b놣Jd{Ik "1Q"ϱF SW QEp|w@xhqDQTK#x(,!]Ef߇@ƈ28֭ݚUN{L^@~Vd r9~L遻 |t]y2BTVkb bJGfeŏ! E懗VqvBu=G1\~94c%6', E Э=.aنѝ[OlcG Zi*ƃ�+8~_ S-ŠΪzN5f6p"`l{�\<//e4W2.`{)qKi>nzyI6Ψ"۰_V $ ! 0_(&R{D0LNԶ*Mz/ Dv8"Q733=m ,t )d&jY̢=Q}XNID6. 7;س z pBo<Q(n1{b+{ٮ ;㺫|};k(J?sc i]|SH SyxOTLשFh#px0[Ff ȣ!Α&<|T (}⥃2V%a<c <-3{H%Mľ# )-HԢM�X$ %.qBG5ciϟ6<78A7o/roӟZ?ی[L F`X֮Rp&di^UG1#/HG;%?_<muP(FJ_?* 5�lLz"y%.+g쏺‹(6SjAp L F9_pˎ}lX~1I{v\!h4_M(ZqfHw[NdM�Dɥ=lRUb[Oظ(:z>,F$#[ PLn\djY(exƈejԢJ4 $gkxpE}9 <-I\Fq6q=vfd&O64o<shH? ℷ5[h01dj*[֪LNd|n|�8#%/$ sYuCϳ%eHUO$~鈚)}g=?_ͱk( !‹VE7ο;VL_S TVh4}躉0&2,!!lg(RS Zђlf?=�FgWHhjZȊg C0'8r�\Kn7U6Jvq�rL!cU˰!v7ci{/fVh/y E l׾A aR6^lL܏Wwq GhXb,:J[c1w.qJh `BWFG%lu=e+s`g (o[Uhs(ز_dЌ d6"^-: R7{sxh &:׷X "J8{H2k,܃vuYh$$JFoF焂e'q$o+}*_U<I&#jhh^g?`t˴[ ĵwBQ$#ycIH۲Ĵ2? 78?gD%sEł�f <~ȜSBHKͣpi {ʞ4Hb,u;/P 0,qGtK(3Da׎KV{N$O BCj S_�?g ;4:Ŗk0IP9«^4F~^T1"akc~bx`+P0yn&qٲbY0ͯcD=uu# 1bI|D0)m7򕣀fTLD!aBٽZoL-:ؒ|`I�p<q|kD;)wh] PԦڰ/P\/#QVl. v"3\x.cP߽lv6 *:�G c>pk'FaoB4E !iDi-Fn)ZT^8[ 6=(MV=_cNTH~t$idrpO:|E3>~ :xA7cg'k:_zM#5MqQyRK'X^o ZhSvFBK9 afAT!3bGdLT^+:/DkB?0O:wg6+<M>FfSҨW2XjLƯC"ܳ4 ^>GxU+4أ@GڅsҰm%0#P1aBebF-"I7ޑ\?/u6pVU]f-1ٶ|D;J//'J};*56cmoP7M` 6hWx m(bѠpW|jvp #ې�e5ӥff|DGNCM6�c{=θ[oxtnT?.mL~lCGmD sȵ)S rhkpt,E(KiˌxY<@f rVI yxWa6 ܉`U|<bY$q`B<%u<jSPL\wX%MJ`G,ĒQ<@}IMaQH:ĠTie3/_g+. "` / Ä 0]{!7J19R}\󖻼GD{%U"a,.)lWҎ%`[}r0׆N?Brœ&9=6Kީ)} @,d }_1- %2}j ĕ-Q|CuKqg"[/"h\7U@ ˶p7m8sz! Epѷa@TUĐSJ-Tk9Z +xɝ̮Q0M5uT]L;3LYB`-eP"~N"!llӤ2Vei(mѳ\swbz,mMvFX2gGtԩTX'ހ°2p Ky&gbimy} c:&{ɓK)NkH (*9=`cګ0obrY?X[#ixA<ѢxY{瑡!c:(Y6M"yfw_Ҵfr]_vb}R-HJP!XU L!%sg@;d1}ޏ6L?d&"Ыwt'tpؿ^mF`EK֖b!^^ ܠP &'BRym.Ӵ¹^Rqapm K/(Bor!*Al#@Xqr_zZ>הk;zLa(J-jn/]DggESQ >E+]g4Gv̽n^{(gWh+lУ!BK-)'$_΋Q(3d>Ǣ'<: 󆷴C;`KyN#U@|&:9Xmʎ%O:rѼ+�m:s;~݁4;RO^St�{-h//([8tb6ꙞNf`Mf $#�$rF{F(5 Q:ް nTyz?FSA7f"l=xأ1)GYa>d!ROx)jPݧ <g||E"i!`%8<:m9VzEo/DuTq'C STOaт=۬B~LfxX|Vf]Jgg0@ZKd˹lF1uk%24˲y.B.Mi{t!Z1_+{<Wa$zIU 2aZTe&X!} Ykgn \Op? =s,#aG73AG鰆ύ+GD)uOTuQK&ؑ бDS#<q@03;sĞfIįfA&YP~$ycI*GfACìʺpDcĂ+g1݈˲55 �tVv͛t�2;dzti4S d> P(lQ-u|=Uou95ӥoqcPF!I~1,T37iR/ QּWx$r y_L{̈́H&=3 2|' ա}B!y!BO;or$"(1%LOAd!ފE !Oid"^^ WzL-rk\Ts{&7}yB0!y=r 63fDz/<39)ѿ! OL6 LeċAvD"�|`szzIEkV!z`Ær TJfqx/eޖn΍E)]Vӎ<\]fuz$+ͯ<Û=΁SġpqHX<J!)2d;o}$lDj;ҙc"cȞ݇)+FBr%/7Ξ$Db)pQ#e&NhыZ@Ł=t~gg<D#mJkzh&v?%=¹odSPR�/8]H&Ň獻ɾ|KY%Bs_B =xE~ o:MgV L~2o72Tn-/BdG^3BIS)F}U?F/DŽR>Ξ \bSͺnhz,c":zH8b5K ,շuJJ"3 s aPgq*xO1$q9-g "j,y1F/EF2C>ϱ?J}FqrMۅ >uuSG|N_!;go"XGٔ4ѱ[\5_ +&tAU54Gb(Ƿ+ CqX"cgL3z_f65#LTSEz]@k|J<hp)*k5%ރ *śƲYZ!<QȲK\g Лɾr\IW /[U8`l0�BJl(oM9{! aq::lcz-ˮ)<Н31O8�[<{1[!Мզϰv:C:L"e*`+`6x++b\*~[uƙXS_l{ ӝ; )E;2Ӟ3IL�:5b gNR xZ;[ >=.`<2+{ǀl}4ťzMBr^^BWmXZS|)z\{A@`--كkd/�{M?;�CDӞf'Qs}H`AC7$ LJ֗ؼ|Y9ap=YxQ1¼ϧh0΃h719T? 8=fC>g7D[�$ o鲼FAfFu[:q^FIaK.+sx[ -:2`$ "1` (< zmy\I&)`A 4߇ X(oX�~΃(JYcBiMl[o8kRZ)oKEOjA i,{@hˡR(O5NĠgY&o`'Ω^װYBT CP0fGt3wFpk9/ t6T۝؎6mnsPVnbuvSA]7L8mӽa#y �W^R2`.Qb J%Vk8/Q8ee<*QTCc1 drNGVH"m1]0;.X{#o+G3Vx"PQg|;̬+5k;C]#gg@$}؛-fx@[x:6iǁgd�Y/�C\3w:(c^F �܂Y{O}9hOy|\6O@|s>bRx>9q �1^ { z /龱ȯ "(f !vw2q0T#tjֈBl1x_\M(ўQν󫾒 iP^ "nbj+:U>"&@#͋K8P0K"Z;4P+di{p$}!ЀX~d!/@pu։/>US05B:E`@':NA@buRĖF؟�?!ך"eFMD 0b_oŴ1&뀈#mPATTsl隉cB3ZA ezFA߱|` !.WG9=#'×r yrlɐi{P ۶Ƣ0*/HqJhC4]\{^T(;S&<=:i٦@1GM$N>"/(xT#yLԱ`<Jv H:j^ SV@lb}/@ 'l ?u/i=Iٿ</?GW5]FK#Nc4u(�i'$Pīup⠴#zlO_lP8.l  >F e.Re 8RdzM&hZz49Ncy aE ʯ]|s1?5%u!O&1x79`.N/`f}H+Bqs> sqԵ&/=%(ne陥Ԙ1((zCUr5c)$'_LYdO5HĀXCdg5e=NnbTcՙ�qԫ686 3dԛ@ ̘Mh(pI1p֛ecE;F{}fO 5'ٚ/>]Nu Cl[/144輻=(7HZ C{" ZQv aW'#/A3G4Pt=(7LBCA$o-!qiZRG}.+vPX9JUlM`9B>JP]\a.X?ƾ&fЖ(%)WhB1`:<#d9}eG/>}5Yf|&cTZy?r^2rrt΍視x=lc• _䕹%U"-f5 +>-lڱ*"\rC[i6{? h㢹IneDo q@u_[X\{KK3p~<*gZ^"a@0 s×TnAl-iւ 9&'4tO(lAsbN@Y mJ^VjWRzpT 4`7Lf=ٺfw#Efʘ>_!hTG1v%R(~GT`$w^Kt>P?juTCw%&k%\u4!L鷙}p?V&qg(;UkH1 =*"J8g˰1#˓ےIRgX$W;.C?biL܏xXPmŔirw50hCXW*#*@@RtLȊw@ݣH>24~i'?~ ^.DۯTa=#U f\ V’"Au O-2,1 n|Wbezj$P0{R\ 0~g/JL&z 1D %J tCiH9B�mAG6G@ D(֘eL@:e&BE ]VM$ʵm.g`$˜;*fJȇeX*fdZNTO!} $xkT[|B~j@k%Zg({yE?&axGJEH@/%n7)oB*!21LU ǯd5[\ ẗ76eY`ਘ}-A3b=uM1b,^tu3. .pwd/( Z2NgޞIqb@9"䌯5#=UƄ113$/2H.rY @#\N `&- hcv wLqKcJB'Fa- w(fpX%*Æ2kX)JWjXq!A$'uI>dTAaY2+^'RؗvGȞۖ 3gׁfFµ+N�9x #ٿ3q u`_!2U{$iV)ŎX87QY4'xGg!!϶=>NQ\ xa|ɢ# Uޡ^&: [Yչ6PQ7 *p C)6ΪؔϘ>Tkf0,p|n8[,ÈG $8D;owa_w|?ٗ�Qbp628f3#cf=2>P[.dRq`ϝǃ{f߼).6iv\hPSx;_N:<Z8V[X@"-u=%2aR2m/%g [SJaMu*~}P>PT\˜KP.R7!Gd[ `3 T$tr%M  X5D; x6*UQSdߗd $yDβ=tyq!B^#iES_x ȔH#hX\䱶`Xȁ+aۙ.^Tg;3_Mmp} nE$sn-N3^ZXݸdK`z}iVȮWKY4*&ei<t :MQRH+d/((>^@y3<J,IЫdb:pUj5-*9nxuh0j>&By¶btl3طׄbݦ|H*l*bD/⏌ |"PU I2O6G}0H6mǟ(u5xΖdf PfXk\:gб9っ+"b) m n"acEA-͖t|焺=}H]2m>hh}FLBpɴV"~8n8Rv#<`&@HOc$܏^LG_�t$4#^l"Joiu,Wl,iΥCo(oF fNl5BulR"cwkz \ue|?24C\*i+v) 8q&S16*{QFd.g9:DbJl�#ލ_LpmR(!q@p0sA&ά6_.3bWNܲc6:7p4՗.QZSt5kpQl)~1ظIPaRu8z fLv|z&(31 BFa#%ӻiXBMd7ǔ`Q>ڬ^AN:*r�e 2">`�# p. ζ;M>"/l p̵;A=emX{@6l'#6.8RGa VD yԈ vo\�l%qer.;6ר1,Xk- h.kW@\~{x�#틲L㹁[N1K�})^@q0Oefhg4/YY={Ggl^<D#dGN.b `qz=276t0Jnovh}ߗ oߗB2gˊM Eu…Uh0 @fO)v*5FM|M+Ex^^`wv3@i-ӡiB|i\Nq "O@ Z?Pv!X/ex!;0v>zԸ\&*Qc�'ʥu4Ɨ6a֐@OUv,ėtBsCF:tt{NGK|UMqce?9qT4E@,gJl& RϬg%x+^)>^Z՞+6KO'? C`P(] C(i!) !A,8V�I"ˆNԨ' pkTb3:npǰ p+|4R-xH%(iN\:>?E,ޒ<mm:f"k2e*;h cӜ(m6Qœe&A2m u(z·V1U z 3j$jk糒0DҪ3+Núi [lӹvGDh :2akϢ({U5K3aǥmϖX]d+mhw-9�#aw66ϨC lml9)*U7B?Ė]{K aM? q' 3x=h?|rvtFos3EM*[CLV;ޏ<P*�,R]@7$l+L_cG.GbjX[`=2l'kC棰XE,/cM9UK| Jqk"e92<NA۝KM)5eӣ aafa3;2z|6\tUub=T`JX5.":hk v$4'vKC(H5``RDBy,q0)^qvn^yw8Bh;Q. N6eې "uSn;A}EXa/M ˡتQ[!@nm )2J/Qfu7_Y 8hiߠhPskʩ'[|(bC{٫:z1<$oxG@򧁲x#s x^e[Τa]R< 'Ҽ(Gc2Ŵd`.d.TxD%p4)ЃrP}LՆ8P"qrLXxʭ l5FRY `%PXfИYlh kwlJ*,| b.lc I Wyǐ$|\KnG^> ydj /ؗQܜ Q|+"xwOɗv6 b #Uؠ<q&2 xS?N08 So(^CV$3RERlbÇSD5Œx/7Ԍ$Se[5'؂W#RwR\X0$*#F[&bj&r~.rM3ļηDTrhbZl˾򃾠0Q@,Iyr.W lG`DL3pC$ҝ%HڜP9G带Rs-b S|58\.MH mWy{mY!Fdt>ێWhg/.J9j/qNs?J*gENZMaAo-ߺ&t49Q/ft岝Ъ(^:EMJOF$QFͫ2kZ_g+roV/hg\@8q=_V6g$;l-ʴx[ث <M>V4Ԁ͞OTլL]o l<\Tpp<GB<h!gj QEE^dmC:k4(iWqҼ\%xi~Wu呺 (Xy83Xމ�Ǣ ,? +OI"c?ZWriHm~@sZ'@m*1LHZjN̨crLi){`168Թ fԿ&n70VЀ6h6/pař<:xJ@;vQ!Ѥ.CKW2bȦHA6Q 4nJo6 `Pc[b;YE#v*;:Baqg^KlKe)9z $G2Swtac@BB8FzF|Q]ˋӁ 4Z[M^- 1^^%Y !\>ھd@(:~uKdZ|J)Tt�8"g$-rRހ)v!stjN+f<+ȼVЋ4?Wvl)s}L/?,旷)a+?O5$a+nl^3a*]lU"B oP Ezl]~PqZ +RT.qr%OJ8 ۢ5A 9ȔVt2Im;0t?\Çプ"s{={dG_~-`rXPStms$@20!L#W݇nqö,0!cn%xrp}jѿ/v7##;[dXd7MPܪWK2JNP]9Į$0b)H ;)1 #{eld<rʨJӤ(Ζh ƣ[*V>'ַ+̔pJZHGMs(p)oPo-l$L(xƸq:J'oz`P/3dhzf@C #7"X>CYìPr~f^_*Jrtgٞ]M\$ʖOZT[^'fI-s-Iver(a{ Pq)5hx}d>;' $ܠ.'7d&spZ= (dT3˽h09!MAuИzÝKR<yaKPd})�D=XT%c ,1/;/@cvqXӻƛh]ĨN v<*29 4Əm~>"شr@ڠ~L ;d9VSȕJ͊FJ44 grGN5EywR0`>qZ1Q6 ӓ^J# N.!J6_x>&^.�S(G0oI6aҔ tݱHGLfT3z y{fUB1JeM )5;͠'v}lP:y3( lnű%b4aP�(&(rCZ?tÅ1,ϴe; #lcRE n|/Kℓ}\Ɍ%qU_8+xL8#aJ5?a}2!fb=V2v # _^QBo'cױsI',h%]#LEߊ7Nq?lI}aOTF�OkL[Cܼ9͏ @Iqb 7`*p1DZ Y60\߸\ ໂ uQ#YdBfB9`~4|qn~#P / 3TˁJܞ, W eWCE dt,jSn)ӎ7>!v]z|iJ`PL7d1x(]YnjDe +K#e"-#ižPC%ʘE%*d"32'?cPOE96T$o$*<�tkL^1~nc›v HrcaL2z˯VU޹5ZxI}ANEj&Iۗ8☑8*ShFfСYY(2"tsGb|1ݵlPNC+G\DuMs/_oW _4܌>!ܯ)>h&C  61Q1uX o\yS [EWC??w+9 [e>#Mqv  ukҁ~0kSyea3\ߍLhUe9}TڤV4)6jIyyLN^e| 89F#B*L51|] ?Azq]f8Thԃ84 EB*\ϝ= ux&!Ė]톌8˙p sbtqv],z॰h74WFE|;c8:"N!;�1k# 1Ral{T6"bW -i^ejG#Xı9 Zʠ9uCG猫<KC?4lZFS&$:@j)ιpWPYW|뛾/ Y ?,Q/8WF>=y5+"@%s&c MV3O#׊nMUs#RЈ7ReW hNSk |&XRC"T>BtP8{K6}|P}$RhC b]s"q ̈́GVt3q 9Hn,sWod1:XfVARM3vXSc%`_O7"Vp]>8pz<;lY.^QV4c84?9˩EnPF('uСnw\I?d�(`?a}CTǣr㮌p !\ľpm17-67rWtCB ^jj0hwJ}%a=KW]kg0i'|`"7MP3m d0*$W9NVrQd%)0(2[cƳRi]8{dW>=Yσ4N&.ZrәB }BcUrbGnMg8O4Y:o]nhHZ:|j5Π$_?"k!>Y*/Í8tUc+AMw"Aܹ|�ɶ#_$3W<3:;Y"7$j|2 xE4!h%ܪc\/IcŸ*-wsM|"m¦IV㝒ɉ"f/źmGkC*)x r&S!}f, \ΎX .gTiÍf!WLӻΘ^-u|ݨP/š" o[kx.I $ xs*9 {k϶bRv;?L,V6 2n-GGe6 q)GʍueuElao \Y30l9 �H%$jf"_ctG BWV{Es.X Am*ihR)FC|3R-12?7Ge0mOd"` "<J1ۋgxCwҰ^K _ڗBNݡO3+JCul~<qKBji:u4xZD&Ș${P_a vΞt/8t& ^!Hf?Ɣ b)=i%N.&mj(6y)hNq_5æmh,_Md03h7K,hj*dɲ]4Hx).5_ԉHq `8J2<Ly!|1lPگ#?uv&B`S(Td6"luK(خpCE)Ed?7]�.(>ʚٸqɒsMT'Ĝrv9T31Jh$/?1*eTJ(ۄ 6`z'b>xTYS?7 O#*P3»\CGE63,0&NT75HE?-&D]Vѡq@R-ݑRm|X>x{A�;@6kȕLڽ "f6uISHxa sCQYt *<aքcen9ZA_\9|z1$>Pޔ_UІ5 qMzz q "y^tbq?ߧ2AU6893&:vu T?֢_ ;UwH;uyzZ:\쎽J|vbRٗu)yPãh0mArX=Y8yaW5$2m^Oʖ<~'[v̖kO<J ڎ@?7JxvI/V NOM!1w?D !vyÖ%&RՂD[`@H<) UB>C\ 4q0i1$΀<M@W ي~0YK:߯`<Q,N:~8$c12VSIPW .d1MO{Q.i ArᇚJ6e݅ !jT&Njae;ҋe2BFT}!Q|eB4F6e%bB, pԉ5߫kĹ 3 ذfvi<w_vCm? &UP̚qjKCTI1b½N̦ͤ,t![zaߙH pޚKsK嵞pXk@0E Nt1W|H!b|$|yp/7TY[~AX ;"f ^sq"[U"^i0OO6V=%gliE( dqnP,PaP;P tĤ}]Ȝ (L9aס jC'٧B9|u׾ bڞehJ(X N,0A48Kt{ ڶَ眢X'NH?;5YPB877wFU8�)7},<b 2~1Q)</wu{xBp=虋=zsF >xCq <X,ǤޛJF$G8B.Œ*C gQ %]9ړy":SO4?nڿ}"?_4ȢIpv]qKR 9efXПFOP* пu)j[2+1G4ɞ`!xYʥW$ĞewϬdj"\r@BSmQkF Y=L+b,7o>4(?%Q+WQ~~<wEQ1,u՗Vx=0=R_?H2*{tOР쒯*@5 L ŇCWY *B>ݕwg0A�jϊnSm"' 2Le{pX@wV֓/؟^|oV$)d2e珪{%>_; y;s (��Y)U?h| iWW!$7Q^E4T 7u$ 9(>:d8GiwueZGn@_(@/#ܮT֬?)%j pdwQeWQ�WDv$-'~SbyP"ru1Q#61P!O>K<ez} }O6Ϧs N1b]5ߓ4- P ô߰tἘɍy5ހE9AW>rGh6aU%xetF+$.Cq"UϏ2?Zx[.*?$�IKqϐ揎+[()B)՟ǁAD~]D0215~CEQBoKJȷ$zL27.c|4$FH{_l,ti߁.afLYTK$u SoGYpI 2_!xi4zK.;�zof#g;Ɵb](j`.4mӘv\ל{6k͹s^BI!³}3m-�vƟupU$k Z~ `?Sr5+A?-+S~ 5Ȳ.7{cLƖ gRcd9 2MN䆋 *2=/~u&Ȃ*J") -+_Ľݩ`{J1D 2Q$vmgY$+!(fyrDVF31eE0~;bGAQ?JH"\�-$J͋og+7?);wL@61,XD<s!Y-CIpO<)2So^ȫdP~Ϭ tO9-(&C.}~oK,T�ئ]q`W|^4 +pSmW1U*_ JTGV\0[|[_%@Ϲ3Mա"ͅSZXןdeb~xD *^JX\?e.Z\ycYc7X0{#^,D<>=9>5M" ؖKr;wUb51nYɍў>` c Ugw毋a=L~mrAU 3͹`O7ż_ aaOq qx?̖s�+̂ c.@�~1S 2ӳ<x*q5E )yK+͋#gfiͩ7fJ!'R"Nzmb7ìFwyTAχ(R>s=ы.rnC "jhWwA'.ܓ?}5nG(w&0HM  7ほH /32�GX7=ُNkHʷcPWرo7 nf?~›n?H wȃ9f${)uf E 5)emgJӻc6cҲ@} T/u3 5I(S6^J"2$='KqH̾2᧷" ̕QV.a`PUK$[QxrJq؋עF=֟&;ĉX9)gA'AyR}KdTʷM1B iT:j]I{+S :s}#ul"^ov#nW~Sh"ӦMrM`}뀳uߑIGFqDtwu5HHK(2$Xh~EFT5;YUFm|>@KA&!7l6 f)jQ9?tW#o}߂ ח}'hB5e1YnnY6(-c4T0>ws͙0\6~ݬnO3}Tt1g>JDYsJR(2p`p" +pAZkplw".ᰙq"c_lGGxѢD(vx@XPl"jVYEIۍ=xÑWYH [fY_4@(? f[D&v5XS`g,0Rv]PkV> syhM!b >8TV,Ht6gw"dzv0�A+*z�g;MVMq=?spbkFFA 4 6\t0]]'[IP'$_٧ns81WTpJL-V{m~P8eFݘevזIN0π0;+܂ D+K^:Fd>vP䉐B S7ZCssG'P%lEdHB�Α`NM"n,:k!9%Czm@ =o7PUcc'8}$^Kj,OҸ!i^Fyh& Vf\#"E]*x lی&Z<M;*> r!.Y ȤfzMx|Q̠8H!)w; Z-ROPvUҳED p$v:񞅝n*H8FI]<->'7A Yz�A~3dLoTz Y,1;:?VXGej/mxa`2;<~UOMLS &2߅e-K#Dat +m)m_5CVtK~p<LR;I'?KE)A b/)*N W'gm]BEĂ(i粩t< _fz{@B,{*\W}X&Yr#ofgI +cEuJ5bSjf WT,4|kp(37JChuU+C$y~1IօQb.J6T  Ys=V(|OwlrרҠ4*Wizpr}(M�c?@.5ɴE�iۏ#sL%H m7LVU5 o9{P` S%/TPz~<068GUՎ/TIi<`*$Q^XQT U{= Y~qm ^#)XBCY䌏>cΕgr]/eon&|40(v^훚h&p3Ĥ4J}q!5ъ ރJodx(gF6tjzD*n., ׌a;X 52>*}X <rnkž?n -0*j۱z@Cۺ_#`1^xŮMx[i@܃QΒ[ & 5:CrZќ-<d0MfwvY$|)p f׳=_ R;uĖf7`ӜI'W-\+k~�w$AE2̀ /LBAS5믑Yu5%TPI3l)!h6 g|%zI&Qqt-̃ zZ>w4wc-|2e�MF1&ּ8"iW"s<Zrlt٤= 8{wB@1Hw&Wo|xY˄X: s<e}iGmQ3,B ݷEQWOQ:>&9baW(J$y>>2 .+3idBqiTI!a>p�re1B URnW}6麠Nl|d؏t MPWOCyl%vowڎ_CæFZȭ׌a-bQM ]P #Xu]tR F] r<R2YVB>{kJm8O8ŗ-<7О \AvOi$ s:~lj`#c-39CQ7QWQoeihh\p{Lj?Wfc?Z@[\k~M .!΋yҾj-QT8lƸ})( @Zʺ"r|#& ZąA0E5X1ghA[(q. PY2T*/&Hr |6(y%vA<K�qh q„486.ǪOD<gSWBa/{ˣ8-vKqrBXJ.O])-t$D_s:vXB%! `w B&@_R?XMgP܍t b8bNtŀ>չCn�,Qu.| jZy8</kMɢ7тʊWb9n5(Ls9GnI-?5~y˜VSLW"Rfڻl{1%Sַi a!QN oxQl)_7u@$bՑқRn6(tMkZ<"v wɽAG wo, )K�QJŚ6C`Xe?io6" nךoD� fB�SEahbPCj<XPE!HzQlhqfJ<o"N=ꯙɑDw`s!@ D#]\yq\9aǬHsG/ W>yT1ˋJ@qacdSۦcJ|~Qf4?b㓸`uā.崭@uF U9xqYaQH pZ]p+I(svYڀeg0eCԼAa94 LHС#b`dOaF SQf%ri}#5g:I' t`m :p2 edRqgoM:DTaS鵤VrjVE ; Z1 C%\o*o&kg VY^ ؀*>+VN 1 ;I8v8<q�41 B8Rx+1>"$SM8`kECKS-}Ds.~$pǺ+>$XVG0/QE^trQ+هAzSxS?拶컘aEKcC-!s 6ͨa`"gϸe+fwX8>@%8>bZzA{|>hSK%+z@bWJXQ>7( (*6lv'*{2:!LoAt4>"3Cq2wt^G+c ;^N݅u ]+TmGt`^j!477Aintxn_(Bhe<8f)e?i7Yrg5>A"7>}@1YKs6JiBӱd|7<М0H_u>%!̘<d}Y;2|L>"b||߸8 XFv1JtY^|,=NtF<D{*^,sr{(QT.9>ߓS3lLBB!0/`aSvNxXZK$?+J Pr  +xl,<Dd]e\|fmVha4χD18DXp6SsN5LxdKl Ȣ YuVyWBԼ-@rZ0tqԨ cGS<o1j,qk2:3p^{ HP=O,҈[?+f0> IO|u&{/M�zSF:|S*cVlpoO<|m�i ;UEjƢ;9Qb >jP^?ß> %SbXlw'FDPG0:8%k8=Ɋ04gE+^chA]{LH C<RD'66xWm!nӔJP$91t9yxFe7"xsw M2j{]WG[E:Y�V5(z@H"x :j,fp%jNXs/?0;Bm9W@zrZ~:9+w PmCOe53ӻ"Bc8v :"Z| @:D [v]n  Юd"$^¢yBؘDK=蝀^Yx:;?VT"ޗi0)[ߛ&2Y_y}^#n#<tP�E0 <aCɺm擰kZef<dJ<F)BɡA#A0ɏ7TYЃ]Pu3405+ZP 1D%n@(b1 h=<Y, x Tr沣"#F3N2q_ϰ*3(^TA,x 6 n˒51HJKi#{P`%+PU sSo[k#5kGE$3EgQh}qľy #g,`HO-BW%Zn@sj�CU"@9j;Q m.QY(ϷW:W6i;,vxi7Se0�P_l pe#h Lf{< Xu\a62iZpBqVOcx/(mhle9etHjtt�XpmfIb $."fD#xWPn˕?>{v~LhG~pIeF)| {=rr:͉c..zRm8 R{걲8UX+8H]õے7 cӼ˙ѣgY* � tQکW4 _9>ZD[g �g' O35Ug\.xz3# @s_䑳dO#JOcJY>GvDFaۄs .{[u$e�=}Kg>[<>Nig1dz >XޠH_\,Lk7ӟfJG~><=ـ'ʼhtRʃaLD*™E|hj`ya !n3ءľ;Un-lU:r|]wT ;1`N5mY`�$:. N $n- ?eQ-\BY0Þ8)YżHNCȧԖ*b<2inLmOv$#[O{9CCr8yq~Ι V0<dE73Р0.{UY [VdqJɺ>"\-= I|Ϟ6@WS&"=(Qq!03^A4"!G֚`fM^7Nd`c=Iv{XRD3 MEמP`&gk=N2:#T�q$9kK,^tZ2"&]E²"NE՛=Bo9[LvH05k۔i>Λs5*[MD!IZC;_\q5 |QAf C8N2p ?ѼvE0k6.l s]Bst[j4lNTkEG\vM?GdP"?(4͞zSG9Ѥ 7+>IO&{9Z2"%5#p}�|eO%pN[lQY@2h 0q6 fkжhQc4$"&I ԱK#E4r;C3F b&䆡qʻzpc(yIC%~ �l̐6u Tb�tnߎN '\S)r\O@,k6F#ί[H'rdk�6Y|Pa\Ahu 1IelYr^Y̼[؁Q',-"@責x`>:p/,aRXR眓2sa{ۚ \$/kgV\,Д* vL9͋ if FQzҾ0QVYHti P&7E ͍뷖~>E/ĭf])XLfy\vA#_sv̱;~J d{!NP:*Qţ *#iv-;X@M $am16*dVRZ>hh#@;`1T'3VN h5.ښ" &c{\<hQUc ebrtDݻEּ+1o<"cFA7 WB@ 5^;ώHJȸӠ=0+'re d!*p:y4 9ЁW#zt,Q2JnP&%C 9M'd}.{lǮ<w>o(0up?ϕH$zڔ{  9±f͔gߍxJ}AI;ʧeu8wqƭ'7*ӂXe`Sй$jf-RDfw$n^7E6#'[`{hd[i"O6ce -;n4A'OLRLAaL$aZ5cIO?D?˟W2^l.a# Q\86cLhb]լQua t۲, GTp'[C4.E*2T2&?A3v h瑀D6I~FxAzX")4d2K&V[J0gZĠ~m0Ľd:jF '_y@VC`G|�ުL۸ GYqoUE);V"C 5P; ҳ,S!yX ` ̟G_ltԑ7]-tkTj$ol&e%71ҼGpkh d78S mٳlf`ɞ.5M~ot"dY դ[ny[WqYۼ,2K(MY |>h۔<ӤN9iVJ 5WHZe8ˇ9m\:sds = +fh lV rTL@i1KFMԜV Fm0-1GN* n�"R|ɂ/_yef }z ”bVnD2qUǘbgL<y�O:dD$#DXuq#ME5� `SoOI aTf+Of*)+E) X+bgy%pDۮ&O\, rh RUר>P E5j!V}43芀>&\"6&FY3 %X8U]^'0+<Ÿf񑰗, Q&52t4^hk}s�eUp~hlŠ"}(x. {֌ Q�ɚը�RnX)pu$,u0?(ďuCԂ1-"[Lړ�+v<7m"hu\ BkĒ23.Ä&(|15P <ˎ DN�0㴕l_F(XAYCMUA̵+�gDc'uXDxDn0^<G0ل>ujF |$uG(t{W<2ǿi"xHNRidi٢Cñh&dK&zȧ/*KGr : Cp eH2|IVkɏ "])ʎ"AαgH\V1H]dD:F"O=Y?7Ewe6n+d0@Y76Ra|̉ݒt<jUgMMDŽ#߇'an$-fD/:GM\.F<5˩eʱ8E]@(AQS�/{7H؊&-/Ȧ͒C1Apk,Ԭ�Q..F5r%1\W2ϸ"DA>Hی<j@ӕXr㱟"Z \::Q‘-0xt%{i[M40 @U@ g�t1"h(Rc3tFV S$v0wi10eyai9J` >sBCY$\,DV ug,Mm"kDVVjrW@ hɼDlဒ?`^7}nIl>X_4sA烥nK RSYTEuZjݨYÓscZނNIz`Ԟ X&{QZv@A#D7sB)z?sU$7o1C@"YTXȶ8H`Ⱥ3% VM qfd~* )W0E߆af+5m/lSڰvP䵯�'=y&\#.l IZ(CVZxtQ璙 JCMiJZ9./L{"a4~NSH.?$ R-c�\xx{X;@?w1kPh1)`~Ԡ~Xu쬉؎uҲgyÚh4,*. 5' ͼ7zd{*sAJP1(K;\'BB#[L&7QPQ$b>hSXOs yݭeeZEt>)]kR<QDXL.D#Uv$̒hj?n{4AivY`/P9qsM6HދUZ0nC 4Zs'-Xn[*KϮ ]d}2+[79 y&k+;VMW[G\ ;c8WRVe&3Bz\9>Q 5Q~a8`�yȠw5c)(ٸ,BWEhʵCE4oC_ &.\?0:*E[rٌ窀H3ɖR@h.Ij0ˌUt0жg! 1^w˶#iJA_QE: c<_#{Fu P~L[VuBfO2jnaCy<~O<~,,@wgcpweJi[X!_gGDǛ8f윶{C]C. ^`ܙ*j5dZԅfx!T`g$3H.70{ O둒`2YA38'@XZsŬ0uGO#|A*(1„CyӀx?UahuG+/`v"Ju/ f囆d|7_.y(7.S7AHb s~!u8Ed"37$ "lך QXfwN|C/܃a�U@ \nP@h4뤡ZvY0JNN6XJUwD YNn5@ rn0�'[r yJEE^Ww[hN \{^nF֬]rρy#]\jJF7dTVqxyW(%ċ5\ 0P{{Bs 31bn48!ᤧVm/\br0450SG]`R9"C B0pn *PG1BK@\`lR TGCW[{#~d %06u-bɠH+_1Pe JQG; j vʐ^"ΓA!X҆¡MM%3CLF]&%.Mnf4HYZ WhedZO3 fA1 K*DzCqL`2BgZ 1< N =$X;qBe|FH^:d`5ȓo �g+o.nvJz�^6dvdDmY@ue OA0's@9VGiX qFe:{tB6ʻDN@1D6A=~ݴx($/vlw͹_YMe碚S|]ӓC6.@g&Qk"ÇvV|l aY+)҆r5AqJR8``uF 5= v,2[7uP=(rH-љCmj+] kVXsV1?]%&"3b3BIQRtqĭ|�n\uVmAPђpvn"O@/ݕi!bENUuV?ה:COL{8ZEsc8*5/!ڏ w`h K]UǐeX̒"@Bе5mYF� i*a- 1r%9ֳhHI2^@ ș売G(Chً@Mp6ƴ|S#.t6L aIJWw@ފ~gaRdE^҇2!B81cQaZȜ C ڟv4Ҩ;o]+'"¢�du&�20.g΂!Y&) ]MScx#MUɇL\\*<պ,*Mh~&�[* QnchUdyL"z}˳$I "*%{dT`HZm'4iBwj$ ڠi.BaTB>aceθ̓/,I+BX%tgSSyHz aCtRG$̃KDF Gx\Hĺ3\^! \c>,p+a+�߶&Qd�Y5%4JyJu_Q#>s^#3 @9C )T|�5 sXH3xǴ7s As? ?MՁWQY�5pZfy�j@n IqXUÒiZ!'Z׀a/MAǨ\im�&6 ,)Wɐhcݖ&]F`SqX~﵆TA2 }#' :q:h fg,h sai"~ +9 $+�ƻbQ4Wv$^> v f<)ƲҵѳC;uo<ҵHCߪCHp.Jx4j5c;XrXy~$<ze1q 4Z>s&Gx | ۘF#H"j},c1-|a9%n8~p?S;fJAHb̐9 ulW6iҾWwoisj\\s>?8f < N\;wSdh=t3}eژE}2f%&j2@9_我͊ 8#r5 _s#äb0@:)@aGahf(ӂ" T S??FW[Kl2E;Je%w̒Eq &$kw0jeemõ9Nrh8Af''Jo*Zi1vLO6x%n sGTeF7֒S`LSj`}]$9M\ؘq$@ uch}� $68GF:6b)2hJ]Cj8%OCI=ϔj2dʹf:qbrdO.1K6fhq/C`&,;bF>j$Cn`hMMJRqbhԡсּ5o: @664r5oDƠZ2 v iA9)@ h;˖ w$tPyLQ):s"mc{f>y"ڵxN13&!VaahaE%Ħ]9#Z !P!Ptla.m{~Ա EaJiC| ^ P Р9d7UK5悫JG24'ّ@V"tsz M@dY M@KP*qe" juga!z@/ܮȿ ; @ Y"PY8ϴפZ%R='Sg1ynLc#}؛`'�'憞^VϑYTl<3=Vh4%)&b˨II;䳍.e0:ۓ55o}1*4ks-4lC2]J[R(�S:|8}#E%(N.^u@3( 7Hi"DYe,RYqIJ]heKdP=NJ 7ǑKstM"k#;54Q2A/BȰ֦ F Y.! nT#%6gx(BgN#�winhIH(KG!pCܷmpֆtHC::ŶmY (%xč#!P)@=-\b=5KmIuyOe, @WNt^G-k;&+ ȄSZM9q !=�zVFt|pqrwE0Yw)sE�m*<)U~h >"tF9&)֠ `7t: \iSEvRoE# ,EK'K`alw僜TQ^ +NiA$rE *HB#(}5@_T2jf|t)!MB- ZO₶%У J!ȱ|4quf%qw^aopd꛰=K(Y�=8szk;I^SL+sd{*JeU04 lvHI-2I ?ay٤W7T2MY@zqsUgnj 4Yw1�́@<K Ɍ[B@(XD&@/m}(�=rfC :~@UL2+^=#74>X2qg8f 𭺭%{P /r2S fz)vxc qpb"�zڳrNCL.I.(pֵi˩ i�(*q1\'(1(ś[$W!OȌNGC313”YV%r]E@072.>ZdYI(<$V@rl$Άg1XhMR=wMJf Cm8;|2,*c*rΦ/@.xfnCbsXUqb%Js#Q|a9e3h `b)[ؒR%eʛl3۝').Q9QAL644S<![fWV=7b�^qh2qɚy<3MJYLgK,D1q#F29z b#Ɂ bP .FͶ A|u|fK#HD#5ĖZ[,1G;D:>pX :y‘(P�GѷB;KJzc؈"dsHIЭ2A*|DӠw3 O{9e[чMz<_Zy-�]A]M5 ]" qhuḍ fb`,=TwXݱ̊4 `2sbbA}]*GZTxFOT#!2F H5T\pZG mgu bѲu1`K7:?[G[+h+ 2C0 /x(vI)є%B8nQ2T}MPı?qBb[!p?MQ^rz6t|FZwLm.94ߑRm"ۘ:XŘ8UbGm'0P2,0x Hq QzCP(X�X= >e588`:M_qTmU)3F@̈^+.uP9N/_B6 !߅gб\ YBqb/ |C?{nH~i 苹4 ȊUjM 6 #0wIBR@[V?$CSr uf9#MOgkv8-(\, s"?&K6:bUmޅAvҕ= (ވc%a䆭!{J-Ԛn;JƑrh.&4^L,fZ:h#ZrOj|/LmPMWbC ;4OdQ|UNF_ L,0H~P?pz{:m|Mj򨺠<|gd^f).B - 0|ZQ @:Ip;Vtw*][vFfDq7l؞ـRG1!*"` 7'{ fu=5~SݝoqLrZb~�d3m Iꁎ4F&9Hwq fM9Vu0ɖwV wwE%28MpA�28cHxcGx%qwd2W¾vCRc&s;1!-Tly|@τHu; -�0`BX.BT:P"V {0jGiZhcYǺh ]./v)pE[ZIӧ4̩E2ʹzkSbi/9FV?3hH:a]WXFjڎI;$LhX4kt3$h=qmrI ]�L "<J{Ca7|N$(аZ,X8$d*Fp i;d$&qݙXR-* i21"࢒b6 H$NHw4m(&ҜY!;΂)/Z/>� p7-YVF@Qq'!3(.jJz,8:N�ާ+i(դ]γDȝ9a tpHwXбxE!0(#h&7a@u>s',fTlae 1@ |r\n`bp.jbaEȠX)_ЙPo׳d)QcAJRX@r8*C` 1sLL`\sSU40�[~XkPKBgћbqUu)/u(�" 8\]MjD Q ٪us.DB ͣ9:tK#YXˏB+ Uڡi:([vG* V?r]I(BS$1'LAx8ί=mJi#cp~l*on Ji ha <qf wֲCt y[PEyr](F ylAW#dl0p*蒢'Z~H2n]ZFuRPX_zxzH 쭏 f]ГOEĭ:pWx+u-E'yRb4V~9qJhvWn8_q5[|=9OY q.~ US8Km)=�cb$P -ZHY]];[YM0RzJzym]\[H2et? {ɱѹsR5^0D9„�Id[�H qhE l@6RFhI(7bYjPgۗ@͆[i HH}1hȂ;:RYdH7EB}I �bEnz�\$XU#Dth1zf8I5W٧Ij,WdAG,^v3�"yInCuЗ_n3P3`%`zTF>٣ ̥P}ܢvo8.Ɔ:+cHjt_!nJfWdl9 IM%-KRp=ZRmdZJY$y0l+k&DЖJŧ{RpLv:|4F:zvdz}YH7qČ EH~r" h#KPoNJ}:ӆ^;RR&p삞HsV)zxY >A߲ߐG<8`!ڱ(|GT_]U-Go0X́>v*n >.˯K=#g`JV0h֢B/]}S;zq2bge>CZ/8U3; E<伩򱧛PXVg{{@GnDiSO p9E &wLaݥ_(KNjxq.‰Ȅ.nHuMTɕf5' VZ.,쪙@^[a b6@vFߕ0\Fqw̰w_i`6z%C+'~ �2"305JA#11 WT �#B r+w! 2Sr(RenG#ZkX G-D̉ҜL,DcE璆i4@�ckStμBq3) Ki\ Ft d&NHT , iH_F h&D@W)j�lDḻX=Ab÷*ռG?{螻CJC :;[)7ϕ8;|%s,2EAʃGpT+3xФT f:4P*R|Zy D}qRJ_q4A7Y[]=eQ/f]Ў`q :v/bI[m�2 \ʋx.g> uH'a9r= N /lS7AW8 23@:_6w� 2_uCyNr ( �fqRt fXfnNn~{ϓҁ"1+-fB@b+~Ef,3� L8bK(b1l3Aӊn;p4j)ތr�TTGrg8@ B`y ZͰAa#K&N]#4 8jBL `>`hp5lp 5|[$~Uf^jZEF�g@E')!J,2Jy\t$f{ `reo]byZ"5B8rS9$51[UPшEYL !޹CLWĮֿ)bۆR}t]*; ;"PBF^P˲ :$D%6IU&LC0PLM"UŴlÀA>�lS>*& 5\ؚ%*v^*-?)u'B ]x|\yLndBt&8mNԅUqA4fh(+*lK=c pkӗg Cǁ_1`6J *ޑ3s/tFqcK{ʑ͘ȑD- B bHO?]^9Ƴh(SVh�+W>~a:R -ewb#$`#E.q)FYQS/YBmj"%7dt5>EaԱCIO~t�GE?Ƚ }kb7T6M;CDwf|_Sx 50+Q`9T5(vb@ʹ;[ZeD! ) D%'9�kt[pq!w(PGY3G$Kq((<z`�!XNէq.h/Lz\SeWA+؁ٶe@HHHUѿ~&1u2+uh$*.<6訙|/lhCoF9A8Olթ{wE hA !YcFm-hl:1 {\*_ |):vul"T/ d:,Q Dm BE[pEn](XݲD&M o1cs�j-Ņth>_եNGy"?Z1 am)=@ fǶ4J9Н^.}F&ɢwG*4=)M^"-)]ĞX^v !G3PF̈́<#Kchy=ey =wƆ #!X. 8/&c,-Ł1H@*PS!2MRUbJ^L[4#sKԦ GfG)cDP)(X rlh/F!TB W!-CZcGЮ6IӚ:3QRAmQfL~<Mm1z%@E Lb!x~dF]j =2H 6*!q兎>(-wRݎBg=v<]pzЀB61肂=+.vIShWGn;#DPd9Bj#Ғ,CA@(YVF*Bdp6V!/FZd]|p�Jy)NGs3?Da6 |t[/q� ɪAo -w/Y.l>1|G:-88ęJv: >Y]X7UZ6,Y@쳼@B1w$pN}5�BDPjPH&(,^AL sQ[4wt/Jqq}WHGҟ`X.^P4*2 bҰ֙n l} Mc!@yʤQW98IOFAN>yc&Bjr w&ERFZ<]髶S^[ ֪M}9Hh|+S b8/h+ZEӏ #+̶}phid3QM)B,O_jYG._r%rtkd 9RK6t@p+mUܭӦ3 Ǔ\,O& -1M( Ak[̟"E?~SgZ8H+少}TPF&?q)H$>o}CK`}>XL}I+c#s/v vաh<GXb @6^4--\B]yfgܟg|i8;{c!&x{:cGp80T2ȯҕ AM$Uo:.'Ddn5ldWJnUXP 1׵2DҀ)['Lh\*]~ M|ڔ?.jRݲoN;68i/AD{W\CF^rUV0p~EZ++Ъg|P/$ d27yS?:UF) Dn\yC:FV4Y3*HkWr���2fNUYuI}!#ƃݙO`"ta0aFZIa *G3�xy KlWx@ \0+DUPʚu `|8锓WN"=V^^BeL ;ēd#UGwda jd3N GzN2v]kQk&Zqs4h YJב@P=[Z͓"k?Aфj7GWi:ZbN\9m[ b4J?OH:VxLUSܒ Zߺ= ]ɤ̾C2u;`ڸHt#)<A �GS<ο9YʮJ,Pט}]+7NS޹-rQDwk/yMU5:k)Ubi=/S;tAv!!7 ב{(p<DGb2(6Jc8 kYX`DxP =pni9=`o3IB+#eEG#=@s;}lx.SԖ>w 3 �'sw>]NW4 wӲ-1/ .:r6ls<jUzxnmSfVIL/p*\4b۰Q!# :r7p|IE(r&"{w6T-0ԉTwr}['9پ;$.M?JT>" !vjXhx||@_E<ɪa$fW46iiwJ YopQ69*�es5mmt6%Rdh]K*By>.*Srilڟ(>-XӞ_�<ޒ)?Dkd{' b+z?a2L0, 1ҍ G 1"�e I]fD9Pj?v"---C<NXGr#.;FПgMg2=_y 0_|;ff$hp Ӽy*5j/KWY9͍YD=#i<jl{b&پ:נ䚵AfL�&g䋁^.H YX[VF ;G;^$B틫.$hAjgY(5ʅsͿ]c#3@oew ml)#rl;يu?83 k,Pg' rZpQ^;47=FĘk&O5ܿ- , L5 9D]H8!xza<>pHG(Og%'b1E*2ȶ& (\!dO Br {k"QL~;`T,@)(q5 l8u_a˖N^(ӄgJtA;vSSxL5T"G!֔$ ܞ"G%YxF63+F~a~f]%^T$KM{׊hl>5jK-D䏀!5%sb@d9arz+&LKdEgu+ (i)P} _ENQ7诉79j× 2O'҉_wb+Ԗ%~<!raG""-qB*Ϊ_~B`9אAG% 4&+ϰfКH+8^�M'ldAf/4 *=2c[VA S Er%:5s1^ͣ.$hJ)ʻu /@Ur9CvG�>՗L6KŨe5Ͻ^75bXrIͬ= 8DGǚUH1>?{@F8rO?L-L4޵Peͼ=SywNpd~8T9{! 1iˡ@_dP>L4YOkssdK|'uj Tc=BfwF r̸Yifml qyJ!GŶ`}58(nfQldJ8FQ=AfyHewF|8Q htD9,d^ѷl$MƑ:Ex`, |!?&}0 dH^!񮯾%:5�oIR2@Ixǁ fW�A$SO{bo3_w}ReΜ;RO˟ Ǒ߁ڈ6x6 joNB78"lnlxTX'#7FŮ˰�ca!O.YqCF#A4G) 'x!P<,,mIՏ:d$P 8]`v KH~{E]Qdΐ0VHj^w,ȠZ4h}4]`V݃2Df Ѻ?p+rpJ/ F a O|c{ܤPD�k8]p2<TAC h TٺG(`.o/ĩeM(0yH\M$|zØ&p-膂xeKEjk FCYd2wS#fIeb6 қ&?C+-sQ+׬U8)m_5+:PmHO-<h88\F$O#kpD¾@5=ZUKFG_Y4&]H3NWX4u7E `du?;RۼwlUqdy>s !`{i!�UY -BNls?HH=&,$G U'#G{2CA\Xǟ Y2 �e`ҧОGG&u޲ jxOKy\< 6qS?sD(KOݕ.Җ[ODdS54C߁ qW:A-K9z\i3,ZqOn~(RJVR,1h0}f"% @Wi85bh"Eq6~8;@1ؗ'L"͗ܰ�j:0%;ف)Δ"N)%QL߯¡|#-^rZh  ,^a"/GnݱPLD(>tz{MUu01v;Q0<)2uԅjtNV,Y�nFO'+]˼<GEMebN<%4��oA È%` ay�58۞)n=mdxr$#^zaYTSؤ̱PLA.kޡ ħ5b0#b'+1}_kğ6 _HI'_[,S<qsЉa慈#"P./.3 F%F"®ͳ;Pv:=TܨDU󺁕}'[^98QXlö=%U R ۶Y7{�G| G6m×I~JX-%FzMJk&Wu*| QWR6G7,�ޥi-Dl� '}DWPӲ9DøIF)O HbᏜ1'v <$Ft5Α `$85M Ϙ +`]6,XlH@׉2Cz^\;}$Oyz,[""/fwkH/VvkNDPH<W8.; F[fA (yz5myx,d̪P6ImQ\vntmhVtf*{bQcxENA'z"MX[6xTAV$4Cr*ۙI߃@tW,/۱`l"�m@@iFflTGOedGλ(#bio0ԛ4N^@P99�Q@`VHAy\.(8{H*~X K�ϣ%\9mO wΗV%@ 8·.QMP#_qiMZҹ@ yϯ*װ5O9pVdGt|ޠ'/mq7�7E4F/~Ef9gc V xtQX Vtf7 (Hj]P lhHx'p!\s<ޖ 㸄_ٌCW�Z9R884݊$)RtNN <ߐvT^C2,^9`~r4X0yE4M!Sn$..%z,$ g.#l-Pf%t(uӠXvKBbk0v| $2Sg<4 Pt4Hx{c#twvhA1/OuX%N^K MtW|ѐ<b2mVTsh i:& y&SĮ@z)�NXAGłH@1"\!5i6\&z<T4Jo9Yb&V*h RE?x4cc_ :�(ojt6ƍp |}s\VϦl2ȼ0n͹b9}Ћ@9V 5�Mca61(%ė5> .8ZM|;z_DnV޽vDZ&zUK`7Ld[~L-t*lb(f�6rƈoV3W/=_v tC&I7`[ʨSKoP3v@"(OO1<u gPLN1J'&Lc/_&"-4)>7”Ĺlnc\j3S ⏨6߃�+hȀV> <<%RUyI8Qן8 B3vI)8�mq\FLUg[#mPĢ0чo )Pz yEMJT΅&,M FJ5D<'r&m wBܧhѹvب`JDb22#o!h揣PGͯ% {ʼKV{:6YQpZl˦[aY.,-ysW@F>cf_5i(zq;@�K1GŲ L+.=u2#5B'7eDCw�*lmܬ( ,wOQN;jˎVn<vk,!/hI8ˊy[^"ƅ^ͷw+,#2ICcq}>$*?�({NJT z$m&Ҍcǯ1\:Bki@t;&pDu_5ȱ#o:=[Ze/0d7:#T8N<+c|_:0xL-Q!OiIy،q;h,8=ٺa|3>UU%#UΙ Nb<S(rZOϞЅ"Z@fƠ7᱋ yY2d_tϔg/O]bНu.>r~ T3[?ԅ&3#C&{(Fq)ݨcmC?^ɯZɋ=6 rDDĊlT g^Yh*k-|ZC '<�aedF@򂴷 Eb]Y;)*^.ҶloE lz!GmƲ cu%[(=ho�Mq^:cNQwmG}thװc}|DE�$D0 T-HZַ@Xn$�G}m1>Gg\pWAZ2D n]MbiȦ/2E&Klf}d,\?Yl4™ Ķ|()  �LʁQ t "y{OdD #ٺq @#Z@m!͌fnb Z8;k!)w4]`2Zv!n7@o?kS1bZtV3H%>g*^\P)#Wͳ ,[S3IK}M\dNRK+&3`vL+7rq$*Л,bv>W2]8a F&?VW 6Nf3F`>q^ך$+26ѣS אrO8:~8Zy7@)o M:on$Q=^hsz+NE~"JǭF.<sg1",lkQu%0 M.o2 vfup@`1D2cб;=C| &J,C`6 F]rxnxK0i25C!`-Gj*kS5,dMo'9cSZxzVR|ꟁݴ-Qk@N]7M֞T5}/3 0~rKgKE=# j^%H>_&q͞M5`*Є=ĖIjr8|kgMl*j!=2Ls!@AhOo/3Ȉܲ 3'/Y[=v&N?qzg8tm ?wGTFRLmT{̒3^HEl\sR``wCoÏ=<@/ёq04 *ұD7QՖܹԇi>+&zT*f D8w W 0W0:WYe8ҏe{LFlwxuk(P eH@.z0XArQY<`v\M} Ӹ>G]fP֑]cYY^_8#/�Ec̰ &9DyDѓ.NlX!t^/`"Z<b$slx8הh,*X)x4y2h�y h>.LLvlX1s.C̸Idua�Gmt۟)<zfZeÐȟ!%U]gmdr$ y4.[Aink{,1*&f %θyɘ <� "1َ/re6,QSxi|pT0JAhC\*CȴWo;T~m1+TVXK(Mņכ OD(ϋ'h7z [w 2i^b|x,沱9od=N{mP`1N  ht΅՗Ěk-mi^RΥaҌXDba 1!Ji.@nrlϸuB3.T&}#(c| 3:yAykhSFvCү$Y*Pܲ3dk@;~Vzb$FzU=-E"t< !hTK?8&QDG~:~(eפ=ڼ18k" MEqDUq,u'iJ|a-:8XD}7Vp+n0q4ɶ֯tspLm2=PXrSXMݒ'lV_+seEY'b򂾐˨E]ȕX^GJc!28DچwI(H~b,2{[Խ% ދҜB4qQ.�ͿlіmL>n}YQw ;@̀duSAڱgs[@gd6l*^"gE4hZF , zզ}=vDSDPDboA } iE4JqkZY7XojOaDeYGJ#UyA{:/(܈];ƌX,ɔ4q1<qC:E¦q{3]ֈ̂J #s S[O>R%VR]Lm.K ?q!.}@1s&8c(HfVo~t�ȳmR䅂 crVp&*$ۛ^ɠ7QR{gkIr7:}`@)칍R%B%,$" bz ; s{ zYoX:ጏh*MHyRl攆qU W Goķ#QƏ妞aL!0bn0Q} 4sɜvF.?鼦ox^İN4 1iv�Wxl+<pP_=`eE5@@(}&u$g܏/r)#f++cBǫ9R۟JIp^G>W 5x=UZ{a ]UKk !H Y> )xJ׵2�t/WSJ,42--A[/VQva=Z|oTt&BGE[TSʡ+o3 rQ{R_u�`D֕ MHdG۰Y'b.%gMn,&�탖K+ h?VQMWѳ--n5=E)} 1,K: I A�X;!`Z%T<? z`3<ЏpbAsBpzWSTT۱4všs{Ih4lU"b{Y�;8~@Bp ~^"8(I(@A>6Guoo~qj,GHtf(d56.6"3DJM¶^{0GP򂄙$=END*Psؚ՟J__  n"1 e9̐$hq͗[8v$Ԁ3S{L.6ә-= \A\AZشu6s8`}lH5t0La12#4Jhsxi겄auM⥸Lxp7ũ9G!, ԁd�m&:%yt9HH&K< N>R.ƀ�Lɇ3 c8$cx;t( 3P92gJω:h ſ\N('B\7K9a8Gp&*=yzpf]jHd%]@9+P- piGX2_yBo+QɡBQ�ڒ^CE+n;@VK<8-&l y3pFB.\?M*i Z7T{լ,ӀO!$燓<i@1kfz3h6L. YyʏK\BeY!gO�ȖDv{^vTqEZ9q5: $S'w rLjAB3X.( ;$N?|GT r3(_elk5y^mݮ8~c*5S9 %43L!hb/]P68@] m3 k%H~k +z#j|0Fg>q' =8֋cyCF[ďڤGn;|PDbs@i 31:>3*ΏNUЙkD E4! <n!1?؇^B^{8Z\~t 䬈nFiB[Q[HT~CP:.pK|1kNj ;Dw,a:o·-S5c 1ɉd"IvvFl6rfAKE^\n?K&[SI4Ռ-ʒ!X!Jjesj\'m5 6%İ]+Z<dB8ѠL$ +9ÚF!9*W1zᰥE]0)f&2#[82u›cDy$ޭvU^/NKV:ׂ+{�B'Fj2&^"y~�au 4,;7n8Qj:xE CX%Lylz�*SI֒ PLb%Cyk\۬Zp|e] "?,^e*k{@ڄST:q H0T1ȣ\q\S!M09^<? ]FYX.<[}@M/{P ׋ْJE,̮yƞLu>"WdFHӎxeSbOf;#ʠ SJ)"G:e|0ra? nN)Td; | 1w#*u ܒCYN Ҝ~_ ?~Zfwg $ܶ[_IQ4̟i ;G3l"R!*Ê19 [+)CVTǞĄC �1P/ԍ v"xq:^Fё+0夌d9 Fq05DAmX˞8y ^Äs/<Hb˹~lԂD?O< $A\1)v ; wry�T2G 5꟨hvݴYΑTq |=I!l_yD?0LTml>6'(lM}$Ok6ipc\J6GmtpxV`gD ʬj1j7M47�7W<`cOE5/Y ßz:z%ɰ vQ9?$]` 6њ/Eƣxh99K'wɳHCvKF~h;jnE鋃J;h-,$ya5a@Dk&vp(z*s?&G]C~Pkc>i!UeѕtlPZ 3fXHUJ;ƱW4Y|@;Jxj^1 p û�~6Pqq îT63 34x4+h?2z/ᚄAp4+9SFf9P!u Rf>[;EGJsn�Ws9 f3K@/7_R8ňͼȹT |Ġœh ' Y) u6S- hu0/dMlBh/n jIEA"!^Iv3J]hMT hUQ]ᗅԎ,Fy8tC :DK`س&}m|K^+o㋰%ciYa}d8LJ�D&B~i< u1*heߝ'lA=5j8ȴt bzr7Oާk X2;Oz<7fGFL <Ġ#7n7 \i#-^+QO :rTO9yEo[bVN5bs9&l gnOH^K qz ~mw !l@~<T 46m;q�9_() neM5abä/63P\CH0iavj.-z203%P:i=OՄ1뼄&+XɆ✅U{ebDvR'ʘ#X,휹ƅb`$i[Y@Yv-yGy U&eF{cm)EP8ZDaQr:AѰq+"{_{3["Ejekx7:umwQ"jв`+$_ah8n.He!a'1L݋c#3uA2oJێ[G:0CA{=Dozgv bRo$njuSt%,8u) q$s D1Y:*MY1i:<֡H@|]dssj%.@aY㠄B.g(JCg<$P8.Х9ZFAVb 7NIed 3E)fd]v#Sh?ڪGC4WR4 q%ǖ,#1䝱r !_pqmco"a’fOPZ>;.0)PH3#LU-۸p^bKKVm+1$d|oglICneIAyT ]}@ei�PW}=c06knj=I<"cӋ86xmAy$[feLګSChY[r[*,y Yz-4|] mtbs1e4qh]%Vy{zA^PNۛ gSq&R;!y:@B,6�2E3l:GUt(e m0jsW(!BQ^-.,~[گjhr�ѺLbhwn0Nk9Prc|!!& (8R3A<uϣ4L` -CUY )lYzo`Jb)!ra&Op۰c/krqH(ZFY#2j#36>YVre)hOK$Эu2d8s?t۸*/!?21wbw1JwKdԔȮ= $|I|tVtr3Þ)vzmnr!i,YKd#Bhyr"a[qqēSUyiiO>e%<V XZwg s&цDxŸd&(,q($Qm\WN\,]I:7(ܧ\YܧuUgpeY!" U91�A*PH5Ty_JjF*Үy\T 9:az3Gl@8\A`^}Y;hFuɊ5*p/pR`cнvANk- c"GΡrD >f^qh1T|QO?NnTEr?caj$Y5c,Ys>%5T4W)8o1SZj.b0Ѕa- q"۪J$$c c`Jٛ8lXWR�k E6 9@*CfiDP{KI Qct V]<ԏszv7XhW[&^![.C�fC9w@~8ݏܐw,8` ZƆ6Jl`Ғ ?h:yf�O.X۞ۨ 9<ۺ'"tT1Gglv7~)U-ve:8&1rm0D'xƒCD( j㛕`fa&A>wQib@| SɥR*(;ЂU vJg6k!_W(PنB&sׇ2 y8y<<y7>u/5/:Jθ7RNW slZ.}Xz<"3/ǶZ7+;EdmG#Osu ~ǟfr-D[6PF(fFyS5 Zm6 MN+9ǥ(?B�9IH2@Zs2uڲ"728�56Bѩbo2X L5F��e;*ebEcܷ>c By:\1Yd8` Aۈ%/zNJq }ZE^ϭwF0Y_3; Տ,T'~"$g nO43 | G^6'G,l+I&T@Ij)~˫k(KPdYwҵW,)8Ա&$H,o(V$BQ3|U[D@mدGU"vЋ[ %G58d.ZZ1*"nIm!RB4[w(dH*!Cw!s,1c�󖁎8<b5. Y׊8B]DNys�CokvR>|BjX Gxm(Qm͐\c~r�<!ň۠.5ky YYcV2ඉM] mi.KS)E+a�qf!*eo7L^D61~l`59KX ސtE=; EG7{Y<qS7*�z$Ẽ q*1{yuèqE~CYo#B97,b(7c@�~xT iܓ}Tջ /%b^fxGmfKEϓ}a! $5cg6tE/8=LrLā!2@eg3=P`NbP$6k,Yɦ=\fܜ|s}:/9_Pxj <64|ck ʵB)@I͘P�2x}ۍtFKf!TUlۙ8vnh ;F{cbЫUװ.ԘSv� b#,\qH-|F2i#�].(BulrUX'LHM/0)oW_GAM w5]ф8U`\h~ zp-MqU"V[0,|PfIdJylOsHtٮ0cJf>8r+ '[Cϰ_s!Fk?ӲC&ҁ@"ٝyd ;u',*! b67Kw@zm9kS6wpd֙bAvD}b!on8LrT*i;D5 ~W |XVuh 8dF Adw{>5�mi\Fi[`'$WS&qRV+I~ Xmh/FWଐթWc`LsFRFf^*jn iSvT&gaNXۥ>oBWso.cQDwbP"ٲCVVf#6TZVw�PD tVs!2[7<`:?8yAoҕZ!c($nlA9L*I> #l4ZTDž4#hNh.fd򥹰p??�t |#[0fNUT)N˃~;ԟh5~z{Y^H㋜d zh_dYbd2:/& F@#GMuvq#˷!d4] X|i%G?@+ U36eG9YiLӑlg1"+F"8` UtYphЖĺ~[6OL) 6)[?a'v@8Z*!,} s+LdD'!ZzJܵ>[A(5/t %C`Z=hQ6Na"fJʯŖ$ X*U=юN['Tb ng\OFND1CB=Zv&O{=*Zp;QtbP TA} kڣ-K?VuP2L ?{ Nn'&m9۩qo D7ZhV XRuL˅&뿽trIˣ)yƞ3U?.r0_l8G&tkQAQG6 1X7ALS,hUv"+ʬtXNuDC$�S;a\<fJ&]2H KHMy Ir%KtbAŁ2Lo NW HSrՉJRMwf!7=rgb9 xT/1+2V\8kscCy/ʫ�G}3jU&l׻@eĦZ#F;'SBYi.sΐ&iBi#$"xb־̊𓙈 $# Nls8K!84ی]1kh.Oߺ^&YSQ4zS, UlF F$26jVD"Ǘp6RrUPzP!.$t-E#Yi0>R>(,hj-~f1إZ^.�+b}vZIh쥨k S5X]!@ljB)l+kJXrx@qdsǕ?M^�ƅDl7+4$)18h3^xWkbN d{Á �UytD=ـ`7>+G&p!bT \*ĎʶQ9}yNLI h:Cٍ趰0]yRgi!3ŴɈexO@lIWAAQ<n Gqlb`85 :3 qٝ,?hNH3UGMI,JgF*}Zn)M& J ]eg3h/KoM$ Ř ss ؄BXF8c[ & 3m,|աWcVr14-Ys{b ܡI7oFrV`Y!Ds8}E[/.&)QivNl{ۓ-cdOnK ΎnZS?EƌCa7^hU#Ih wSH( ؙU{c6ypAM zsgaQwNW%@:.l)E)�YB|Kq|"N_w>t*Ag/q+,яx08gގg-.)G!�TX�ShP Qr$rZi3m1k T(yĬmJkh0y |Xc n.U`b !̉7$={C(~P1ٮZl\2RoXԅgec)wsԐN/&0I%phD.1<x˻;R'ѠXŖWXqRR۲!%@­=`S Fp9?¦{xD"uaĘ;..Lވ_vІF=12E;ߨRf ]ʙ} Q8t-3,/-.BP[k-"?F5/.̦W[H%nJV5 s,U!nK(!C6bvV) e:(:籇 }<D|Z I?,v]S_)bm'0�<h_0%'ITn<MblގJ8ee-e@*X "8:^1NìLj'l=(x$A0F=P%骾D*%M|rhHz^+=,H2 6…[7ƀ #|u, 'pRš܊ѱ(FXz.,gć#t5o.хuZݞP[rM5++Jb,=Ԁ^_Q\aեeLqeu"ڍrcf[Aq}1O;ͩN<N5!$p~S. Yj&+P}dN1[:qYG :7ޔR $ Jޱl`ێ,hgi8*6v涭ν"$7]q,0"0Ui@۠vfNhȆa}G.{0-݆{ ǞE${'E%"מ*ى|lDaFU&q@).PN*\AH;dFNSD+qK3eXUuGviO CR۔.;4gs_lX;bȓ5k.vIkvؖ[?qvL7T$]rCwϚҳ ٕt`i2:6]̮8ZI*R&�DCx-VvP%]ݮT^c@6ܡVh&rX(Rg ឯfۄX8XtQ>[se(uM|k]EQ%;`6˹:"gu؇)! `S_Op}p]ToQЏ8'#ah\:4 +>po2a5M#isGO&(KזVJS8[gZ3(Wɜ\ /@⬋CUqd&xӧCE]4d~Vv {V(SstFHkDC`'!^j⻁N!Z}`fgZX7@{yr.ɹ@%X,^nDE :7} ka,ʅ(8>G9&IźOa!7?rV(3!Sf�m,bs8EKʀ;x~M|J^1�O,1fERM`83Y|,mB ]oB֥e-娘0ZVSl^a ӑ;awЖ!wY*PCG#p:G~Qc<}#�}K'iyOg4m5%?MA/jN_YEZm+6yv!8n1t@\`e Yל'^Cn и8Ľ@C6i)>~aNexLF+H?q-lxӡ =3y HhsJ'$+Y`G Јy\0Ody �il~ۊ "KZ39JT c.nX*^0Kb ' O-pNԫ<们Hc;Oq!>* \820 E-abXǚlA“A Pʆ%OG|bt>rW:IH'oa'_vnTnw9@r'ZífMyĭbH )*;R»[؀e40}<^H,ȖaxajPa4i QQ8U) 2 qn8N^@-5aYḚl݂8 AJ=/k ޜ7ytg:fWaA`gt˅~~ %5 &+{dsN N!R)>J"f z"<{ h,o[{iH,kBU*-$r j<6UT#o.*X  /ulb�P=+~<?ڄX5޶ P ~N CX,d ]x6O<z9\ҐA?.6BTøW8vLi=J4I6ߵ`@<*H#b} jxCiU,:MUC8ĉ`z,Gpc"']:RxۡkɉG7r?NjM4=3]txt ݊*5ۑ2f X @Or0WlM(�%툍EY["yOOWp Y@og<# ptW0(=^[>p4t N'xGKb񆴈8;3kf,;ML,(#nJXhyy{B θ)ga%'_a1*`rVZRLlRąC xex#MAW[\{ICzڶ((�m]^J`r(;Gf#`qC9P)mUq~\&z1+/[xxR_$x) Z4=W$!y-4c3&g"=F WW뇑ʵW07Z/YzayS�y{^x<-j%iY\e,9ΣBvL!u\&W`:߂șNxI0ʼkc+ gV^(D)̋t$908~^lUδچ2tVbߝ FlodJ[A^ vvɬ{c"eM XQTm3jJ CsN�J7\ 9Y D2ݝpѴý$QŸRo H+2m L"NOW�*@^CkZg4ۺwH 5&Z9|qayUSjI%Sn J"xԅ[eTf6Lۯ# A[.n2ƃ%|fUp@JcYX{}{<ID+9{p[HǪhhG/zY&qߌ-o/~ޡA/^1,m(ܧo4:ޒ;#*&Qu �ķɅ@"1:X"#Bi<ZMlJP݋ѳ*ԣKimR ^ڐ&yN bF2 ڼ7"k* 4oQH/Mmw}HS8=ߡt=>d �M 9珽Gr0NuHk"e*{Q"]&l%#2.TqyXf`,,(JnoqWW3F;RqdW)T(y$huY$J7e}9 ]KEʋU#{ rR<q.HfqP,b'/a3J[Ŷ55|&? %9BU|JW3Z7/:$jɱgB5*3)WmOkQeJֽJ7 {#p2M=dzco`URI_n 46}B]TS`"ȡ!~D %tLS@v i3̫FC %90ɮ:ֆ٢A&P &&<7A%LΣm6ْ vp}AB)"CPO[x\@5!qe/[͇qu 91= {#\O>' +N| h7g�1npV_%<!j$cˁ~/F_:b/'~%D>6Ǹ[!CPb7,@@$wbVܙ %PаҞNY[cM/O 6ۿVG- 7h6ޣmP<oK0qˬTvPf No 7%i;�3e}u�yJPrŔ P rB#K_G�N;Z2ZL뎨,; [?f plS` TqWuԚ5R~.JWNönKHO4溩b2caew%5 q". v0RL!EGdd 8W%TȐm1ム,υΜ$`k0B_mRA@hg0ɓA1p9/a&%4˳ysru:HT@lo0! !{#B0>^rm)Y)6WBdPw'BeqlbtHcB:Z^-U#`${,YȵEw"6+˪=(hYd+b} #z<<65r%z?6X8#^1,Mu W˷J 8r֚ߎֹb䫾!Y0IsTz ;˘&KGL lex<C[/p% ]_^.#Rɴwɱ"tq4$EsK0m]8Z̠.+RrH/6T.I8v\Le <mscT9'+huvy5c1 N?-pe0|M\p%Z ۬H\ hMc]�L\(f[o'3}ĉVUEzɽڛ ^7*z�]݊lP@_|(13* <OypJ0Hp{be~ [cR'U1qh%LaI^oAL� (@Dd7,;&!Y޶7?Dx%_;HzF{/ k N'D3`?ia:.LbWޭ)cղ5^~UjZ+d�;d7C/WiF*XѶ& !g~J&P_htASzMjˋ1[^N0'}x?3IʁM\M~p<+"b a67tTiΆ A#g`c(1ܯg#Zp󣃊!^-$ S呇aP.NAKSq~ u<qr/kAP]JbhYdGg;Z00b 5ₛ%jVre/xs vUOսAʜ2\DdX`-!:W T,Qӷ;OE76!׋?'6d64Mfjk uubE,tڝk _1ib;b,eHw9ny32KhKkSUt>c@uO֥Q^?\~zq,#:Õ2ٽ[eYDoIc!cP4r̭o~IG�2$4|`aV^`и KU '\88|?e^<*nH-=MWV+q?88ܙ+2$Q5Ni2 !mW@z L^h+W‚+I+6T|RJBW%Ѐѷ5B䙃C˪5SEd5S+(9V%|(_P\V ;lxp&@yxg%Q$ Sq!EcI9Uˠ ?(fu:"Ҙ|&X84NqKD *!HRBK5,\VSk{Y7de6xr�ǏuKׅƩpR)wnCqR#d'311S8 8Q̠P.K f;>0qlq?/En4?7cu*3ǚ&Y<9iUMu7FFmc>Ș &SnA2҆7\^"=?od*O-;EWXJQoT@VjIP$ a|QZ14_M4 QunU1 'h dsʅúĨɞS|n FY3j;;*2m<+t ) X94ۯP `7O^ g[._?|돉Bc_e}MSiJ=i1ġ+ߍNP�^ގNC~崩&V- qd~ E|bg7uڌQ.hpLr];%0 fx'/Q(E�<QoQ g_!p(d(@z/mO5SK9K(5KrQRTfuxطjqC!D@9;7,d\ؐgOytXQ*X9ô+ ;_= FnxQ-SKmT僾mRzQ|+Y8pqtJde.M0w `u;%?CCGӢl(M14RyYqѥazf'ʨd=J a�8 BYHJ)p5o(GL8E!Ep~ܝ)E:z!;tE@[~CvI ]' R3λ%L7j߿98iW:�Tf"/@AC4ilZ'ĩv0s'4{;ևsCLt~y;ڋ(q>B8@Җ *7\P}&6q(AL%Z#[ݫQZ˒JOf+9惵3ro(7iz='tԐ,?5ЁT: ^@+*a 1>Z!a Q{ B3*Icg}HIFɒ&�1IQ7)=b?!I%a@]}R.w"ͅRC7G*@Q'oS#y'YeY J<rnϱ5C\_uɰ,-={zx9beHЀn]}==,[J6 j̨ \<o*laWnp1* *� С{!&굠 CdW%QUm߬NB@#}N\(P;ak[> Yi|E6a]"זWV7pdF>,{,> H:$biM/nj Ҍ^yUC쉇_!YVT 7[=ǻq# M`&cwdg{Uf4xyVb,64\L96qa n0ZI�:am p$jSd$G\N}�};KJژSuV#jqzŪg4N#;$FDŽ6͖G#fStW0Yt+BgKt5OR6I-m~S?Yʇ#@fFLqtq'1<OMO?56Q8 T,H<\։�q;'Ǯ´QM^ uQ#Etӳ};<tj:DZ'gXGfk+ W=}M[GNF2EY lbwlerx\R=^ Ęa+$ع ܬm p?.C2ĕl[tBP�awi KcEWVX|\ >%[8,6Cog89"VM|1@ /zһ 5q^\Q`k60"pd*/1؏I9pZ|3ᅣPuv1E9-gdQwAe}hKm 5 )S07ഠß"X,U Hz`X匍XlcA#[-L.VQEE%B|,cTĖBN=6-(zga&]6U,mg=kܨ3ZD8V2'^!1?rEfGbn�s�(%L`Ѣ/:s/]Ny'ڛY6+;,pP@@1ܹg'�۾z`xW ug e[UOf큡1dQa_=x,Hb.�qk=E<MvvAp9~==+r" xxbk"xwOβmE:vFR˰ nm I+dA\8f='uƲX&6iη]7<q䙻AaPt\뛝NӜlfi֜}-ĒODP@ߑr&[#u>0d xy@^】Fz,H&Jlρr!v,{*ߜ" QPtlk EqZ̑_sg.jRXꮴRd _)J$溁w+M!^4ۼ^8 bzx?#R fL=7=[I�iRtj b9>|Ҧ=Nx,wr ^=e`Le<3#9|EuDm->g5#KU$%Kߌ*"8SC0JS"9-='c:l©AȪ)J ]ִpGH�)-D hO>6 #/9k |J8n]it?A& )Qv{OIO$b!Tگ%KEm]WTFjC( ph߰Oٹr[x)d7:վ"Bx 8J hX>@'p<b)( ybKM,5 |bdÜ8(7aSr +,WKI"ZqNibL jvQ\G+hq -J 1"fb?F.ߘO!$b x եt%%B<�K JLR*ɖv4)!8~;3 Wphs1Z"u#~W N awJ2~q Z73�X&eMf; o/=v+pc0}Zg^$fsbI`0%D W_We%R!T ~o~hQ0VRoe8dy\xETSrݽgؔڮBx1AЫCjO`읝{[gMaїL�+-P,whx T)3njAJza|=y؇BpiU|܊o*F`zt%ZodIb5/ j)S`O~3#c'Y|tw Y!*= >VRͫNF3lT@޲CؤM&RA.W}_؃5C.%咤bAbe-中%s^y21ο6+:ܤM%2l ps@7mlT8Ń[D3*ʛו1:p dSvDO;*G7m$$7W{!-sU οb[]VV!Nil;#IeY1O^Hwnˤaf7;xxTۄ$㧋{ǣkQ8}- n[2?F-g+b= r{cw+SAFG#,c&0ȣx;1Y[UD%<;t,oqYGuf$G 7mXe sÜ:3M|d]Nۄ'< cRT &ta+_\s1E{3)>ȧmh<oZ�gШWjڅɁXG O sG:-0,a]r2xY9 $븦(P׎`0ڜ,ΫL[ЀgKvc2!N1xEj7 E ¥#l 6%bMob­f "x[h16[C=8~S&a뜲]<POܷ9 po55Y]"jC'803x둛PeV%M5xzjhJ<.,dɀF+ш3\-1Q?BqKlO贵4h%㴫 |t7JWHQ@ A*\DD[h%O-XٜM7}T_|S 7["Є%;/*·\e9BƱ'}; {o5yƃfk@fX9R^\$8 `F1K/E+.D0)*dh|b]h{IP`p/ဥl! ۋSxi4D751#ɋZ_̴(ZOƃk-g d4&\22H1NM2!*Mrc5fÓeB,-n7IlCVؚ̧/G0Wтm!#1&8TىP*xep%riߊd?R,z,ך5Xe⌚3Y(v_,sQQjrief9=~BtZ3ld`+n/cQr_thՙ]` P \NwڮE)%B6V*ÎsZm%<P¥6^=q14Z](Jn*34LT>@zsFjJճ=RgXTYo𰊭 * ڎ7㛇QO[CR|jgӷ6:ei٩$#wC.rb;;"9agd럼9.E!E3F#gLAxy q S}s657L -(V1= Vn(#f q~�2;l_b FBREF&3`!C1 ݨ&yFm7H2 g9BC2qiv2=aI)xvgK> @[8;X+{N O�d}}e :XeCc[pKju<e7vݥ_5p*ǣڝw1i^8G qvx⯧#H f nD%�ꟇQ~XxdCϹF2u4fu`KUXRb%>#-;?*Gl,Qmr؉ 3L~QdPc�Im_TB,f&b?֮Ӭаi6ց A " }e p)ofl&(Ata^ln6x\Iފz Ghi>to61 ,yWbP)3G@EF|="`d-%!ƶ6 1T'/AJ;)qiTaOox9 }9@0h* (+:ap@W=pDEfB&Y9uaP+a(ɷ06Qi-j%O4>]oR} F⬁B3v^S:_Xt^ Rl;{xydv!=:F)r?a"XW61'<@kέaW t&@$㣺oǂ<IR}*@O#苃 CޝےNݧEo46\}`Oi`f|%cǷrKN�?c tġr^/7zzJmӇl[.ک(Atjkao{!ttOl4A뫡= |0:_19G aYmMV7@qP.2}3>ӑ}(Hn>''n|#lc99^tr4\vG&kcJ|8!IbS P]q "t):9 e58#_IFNLP{Mˊ rZ5zX54N5hd( |^O'lK<h=16ö:Jc,f/bb Xe 2?hi3 vAC3XG}7z٨Gɝ.^<L;y:Fak EY>Pw5a e͵BHЎRıbV:P24[ PpXDf2n+>$!?iB{1!hygNdjl0+Nc;Dhr^LL4Q52)7\L{k?Q7*,#D_փ0jH3})�vKAXWa=rp#Ef|h*HHm̍ˑ vc"s.n-̰brKʫӋ4r76z!JaV>Z!Ehʂ ExqB$\apqlJ& o5CeZD Iř[ i larpEy`9be:aW^xu8RB3y�J7T<8v̼Ͳ edm!lsChDq><^`-{C#h9aC0`~h좼Ǭ4� e__< }|q y>$e3Ȗ/ŷf\[4ۈ8Cw6a:33M)q*#:Z\EVQ$ٱ=-M2C!tz>f?'VG3rI/c'#H| 8DvHR|ruV|�xݰ<~ƛ9t:$TFPW8G|Ƴ_ !hqgt? 4;ؒSp()g 醈5%7$M @t)i4i51Jv^]:�Hy m4YtQŏWdAEEGݍ:a(n-њPDaqNc`75,~E8|~/,Ă`KDtxf3 0::Jx )0h6rW#^i�PI&dY :w?kϴ˿_fN>,?faL پәHw;z%'C`;3!<U@@�Ŏ ,sAQ8 ]u\܀q2VbT'%2hK~^,NTo%[Ł z :$UQ kTDľVNt� ̋�&GA=8-q*"̸g_'lOx"&TcTBx$]=@9aUy a6ud4&O0U]cCU+QPy$}˚R`ѩ1Ͼ Dȗ"*hc'6Y}gll w=vD@twfja;S(\~(>D`FHstkθdƆ ^64O-c1z aQ'dDiѐ|ҵfO�9zM#~kiJׂ !0Ήp&oKqBrGL�LÝØ0{ @qc3kK[˪2MQ*.)L (E-c1S�OH``)#.I=Za21\MiuzL )gфw密9~'sb/a-dlơ$ "a+)_q!zQK%9Aub=R$%"J?4񣆜cRPړ{5 FK<SmP;d 6$ f'3Oq_ T!/';6R.' o: %:Xu(Ѯd-džG}5zW_\X�H2cAdD*?0G}YYknQ݊7Q8&~k^.%kxgwQ^7DS2aCg9+/T1A`ߠW#?ҭU;4u)1d lXW@."3cWe/z,%A<nrG*p%';.IP;s"3 iD&\"]2y_B )D@ ã%gI1>WT0\qORC'm}4vJy+s%8M/U9aY OUE1f^nn@e`'P5,o!ǃ,�Y99ͽb-mXDai0/~t[Q!Uo|"1C�P.7yQR'liFoE^m$uI+7_X"dv({R6%A!+?k_ȎPv⨸ 3e2;"0`qB{\iZ0E Ԓ'Sq, (6Fa"7*a.Ґi%70+*%·NN쟠\-m(+aܺՌ+YdqxiB;U[gQAA<AzKŶ3zf6lZ0Ye_ӗ*V@^zkg ]d%0aR=ml㊈G, 4 [k#.Жļ@S::`P臡v>xetj{o1B ur~dC47#4v*pJ+T(sNC\=Yئ=ُ3Nj6xXksh㠱vr˝UI"2.I,,{f" 9VaP,! &w{RF~\XqH9 WЈLn0I*:V(SLt8qagS2dy Y msٮڳ91kVK`p s(t2XzaAB_(=NÐ4Nv-%rII!чNQ"lR;I{8|`rT:(2K-&<|cwfEaU M55(5e%+qIƉwdɆtqӁI5ECE0lc~]%Fkl9X7K>KLFa+ OP2C\quߎx`)GK0c8 qs£μIŻ_Ħ884P27qq� Mܱ o;,,^ bsKA ;X#=YKH8�l(n{Z�[]ђ?$2?5W7 Il [83'%oq"i#Ug Z%ٷd s֭>EN'*p*GkN$B(c*zq R?jn L[>tʷ53K~W;Oj(o >y[;A_ck@hOXϰXEJǏܺ:IQ3{ox_GS[&dKoc yeȓ4A`Dc)DC΄.= |I{X"!!-BBuI?4k^A_wa5mSPLٖ -pm1 ̎8Q5eXƥdXĕ UäJΛnX\ `Q~ %CَW2dd&ډ=))$ ێdHo/j 7؅EJtU Cf:U=5r)Lc"`qKֺ!A:&i.M=5ڎ~ ^K\;8 J.!%Ej 06)D~]]t| [B"MD0(JdiW6JFQ֪X?C1 1!#X=% :jK*hu9o;jbw$Ļ.&[Έ7`Z->@�f9pL2} 7-=OW 0HVv*Up~+z8XQnZZ!Iba/LgMACú;12;%׾/:B׿' 5=w vsI4sfBGF�/)iԋӧbFm2^`.Mk2M9 V۷K ZJ˥oϦbjGl`tiO PX�{w�.bO~ec~da!l6J`]AOudϸVgeq*eq? uKh,U̒8)MU1rOy'To:S-KئHp6 &)bGLU„ &({942AEhX_/qz-;e%Gdc|'#T Oˋ?]JFYE['EQ.8C%g7,xWP{�/{+wQXZF#1Yw͗I6]˅2Z<rBU40K07>jv9BfA_j:q`;oĦp>x=S)4J td� + byEO=.6]ƫh6/LYz=cp(e ⻉ڱ!: 9joo,;<[Գ!oRq]JL=bUbc(w,)R' c/#~ ZAX<+D>J![##0cOB!@tzG6/(bp'(roo<3B }A7ύ.}gVA2X+6RB.m?ȢBZZ5-HlHRj. KAg+dD@ÎfyԳd\&|>-\"9( =U~6DSS[4hV!؉GkQL+%5(vٱ(j6勴W< ^\ H27b]G. IqA|LUQ.%9cc܂-@"0ˠb,xЮ=blw0 x\XVt7|1SuOMRԮJxSmѭъ+Ȯ6䝸pcΎѝ&_KxFKX2<6\y_T1. 'SφawXN¼D=ij| DBjl'әh0(1$Vk\ۦ<GK 3C1It(xޚ"(gne;eDZ+ 2eGOjqj 8H_o#El @,ӪU 6hrVyN'ᜣULOЋk %~#'|HǾx\Fc-,�|T6Ș^t!hȷ^rhp C4<0EByͪožLh" +#SRr^Kx=4$hU;p맊=g(p xa۶%`B4=R71 0kj{TafA`.6A*`ӟ(n5tg/]j-ȾO%蝣D콨DɊB GG8$Y(LJ2'Vр>AX;WhVLĚH1*TAc2'}Ӿn 2?C& <xJ|%Hx,3%x#{q1T*t8;YX3EW;VĞ ]&-m>(ٍ`_@Uq&Qgv쐩:{y68',|E#*gYhT, $cmi"y\`ǜcʎ9 itXݴ9Ķc[UʞOɇNyXxbN9 =@*4F]p?q}<pCeŀ "@َ5~a/jr2`+KWȬ7ȣ )M %=G5}[]l<` $ #rC;S*6 "6:* 0Ŷc&6mQ! `FfBj2 ڜ[IGy1$0c~Q>9@ZMxR^H!<l`RvCir$J5DyY*3HT<)vpcA ,2h 򔇵,\q{АQ\ٸ- ZӕȰ嬜ؼac{5mfV3'e6ImqsXh܍L(ӫFARbLwhzn ('<̳K4Tm $6*r�+W $ⵧ4ʸ�f )ȼDmlXM,-XWVmQ9E{ ZFw}d\ p nZ,<PGzA=PF56Ew>G/ŵ3rA];%$MDrVRwЕi,MI'Zs\%TC1ݷPiREJ~H_VbsE^(h0('MA |l}Ay$eq,uT@j<,:fͰ#5@#~&(dS?Ďw[HOh{Uٗq`tnP?xsT殸,a)jfP-qr򛆓H5l8,rP~X0%q:^Y|ٱxe|, - y٤{/H)!c x5akTyD3\ݡhܭ Eij}'~" ۂqUm3ghY#̏ vT9pVqSoNxxc1Bjg:ܮvI7y A<FG:=؏Zd”pNt}C~X]v^A!Af/{g,Ard74f'c-Zj@d3s2#<|9KpAGC_!O2t2 dd5˾A@5o"x>S| .[&f)EW[r?W<,5YdAv@w~9chbbR2Nmj@v 3i١[ Dc4~|0mĽf\ ֨2iƛY?>irBQCM RvA`%,M Bp*i.`rp+'Ͷ>6fy GNIJB .I2z \hU -B;}#(9lr7#̯΍qљnN (/�tO%a6Q@mgvGD醁)1!¨mҢ-^TDڤN>Bha7mPؚT]ibPI760$5l@Zɝd4 HЊӅfV&mi?eۡ]My-\:] Lh$h7*֙3Z5+Gn҃-5l�6Pvd 5݄8ljhx,k.o@0k`:ԜP� �<YR:R !=.tT^;bueCZH@0hAHi <eL/N"@V0.}Af 2QR%Um LA%bhjʮ\m�** &L= �L`[i1c*P\5l即@@Ml i"3CaG(=\(+u>?ӿCwξٵa hFٮ!#)]4U*[j֑4e/ڠ2b?Ei/sҿ;ІX3_B�J*&^$J? >8!B/O~a ?趺H[L5|3 SfS|\-K�2Ŋ+͌l [X 1AMXHJ-k(3ZyQ 4Mּ`QjFr0xȿ6VAnALBx{d_/rZsK(cMcxi41cϏ>4]#fNK|{h⢻Q͍J,v|;>LJ7&\0'chJ*=Ma"!vtC4yd/wYs#ܧ+Q_G&oEHC|D6.V~DZ�B^J\&U'XAL p#h٢>Je,Ќ4dkWs pvBm�뿸4Eⰵb*H_Q�cZq%ΧwPc dvoe dvhСdP-.i*-%" q-X4ʙӭ_{&S"ybe<^NRtAR˜t;*u{-0BӶQ qRLِ|8ȱG:[tSVrqK'<^l:~7Ϭ^6ӱC6 !3 O2J5UG4}bb0D -dR:a<kX$ jW@I'Jr꘰,H1 tփ~LߞHfd^�?"kЄ^~/cߡC '5c,>wXCӎ,XW,ndr)b=,DUUON0T] [W]^Ÿ'"dP6mXl"֡Pvc;-_uv>@Ҫ˚GW@6Y!ʶ s\zHRΊ: F>C /�-b#2{wSM^�_r֨ ЃÌ4.cKB.0)&RO!O&"cT_i`$ b!|�L6d|J&0`U@M`Gfl?x`{!x ުM KT!qo`ɬlA !fm?KY>-R?B;<rbl&_<"4Jk[%Y2ڃ 12A:eUgA |-K\_Gx$/msn&! )Iqc5D_EI1_nS a:oq#e:mT^�10++-!7N.Xy`.y8ߐ5Z cm N?U:rx;|(r>L@ zG#*҆5iFgklBwc&CC]3#zTL%=H9ȑ_J@�lG�C= jh6b4 <D!b4Btjvl/vab0h"8-Q F#^ypOLkI){ΖI'Ih]�)B$ "z3sVo|1yDrrŒ_YCH90Q Y z; j vybMdi_̢Z:DC) |O{f)¼$aPf`3d I5,., kWq" >(QUϘ-]�o,,p% Jxˀ4=wĩ:~ݳGl3L~[P+{`ɣ�-_ Tt/Ki7lfkg1`jPO."YMObPuotA#Ѓ 6 5oKT q.k SO,Ọ_@̀a|soӒ%"�D@$e$bVqq]U˝ !} _>/4vBWkJ|~56.GP4x<2yXb5J|P=kO/~\T KF`Lo,Ȇ ({(2x圑 rx ѹoX8$hJqa ,m񈯎e5 %xݯ #4W)q"!^\*%;i7IL N08j]\,0O$IPBV[-:QmU49PG.I0Dv2o t-շ_>fcR 96oX C!EB%P['g:1x )?(H~:ar]K|$5ܦriȩje_%L0t)9Ayek VGko$7hdx-//VI}+Q&B}.YgTx %@xPzsHN[&Rfǣ^ ^dpmnablb+4|kzqT oH']C#hhJ%F,8SfW4<["vL<]z F*2֚2l}QZ1*8Bkf`PH1+n$Eu#iu !z&vnyhGvU i2!ů /Gl B/5HxqnD$GcpY^15NIBH|ViY4pyCGd`pu> fcA7(>^*uO*FLjI0xl;-~*+]9=,>\$7.T+<SPmu[4郶74VX;> ' #)(?7'+>BMWZ +u+YLwg3FR;m NreبӵRKcAoLG/7MgINuB,>GRhu{P Fj{]BJ:^Hi_<+O5$^'7BoPUh3?<o{Ϲv5z2s^+UuW cѬ$W (]ϳ'ehP#$iWdZ"|:=bq"##ޑNj SC&oPCX8Pg b' { ZTdm2F].f+ Hh?+*3+bd` [hLG-m*Cŝ&a;*y E_A#Wm{ធ d1%J[`g`f 2R<m%'Pq^9v^WbܬL0NeWG#'64 b+K "؏woۮY*8g=i8gK@Dl0?FV=٦.o,@NΖ\x7EIjt.nҿƭ ߹g%Ϫ|E yu0-0؋ZC R zKM3~G l(U|Xf#68qfǽ͚ћDvNd'N(ڦ=#d 'L'hLJ /,Fʻ`+CY;?h\\]&lD#,vHL)_&&ĢtDQFw8+fk 1RQ]b{" {,3V;#V|, W@8%,ڂ8aɋ l&ˤHԦ"kDͮn<Pؿ/gR'6d>bW!3+%I\Ԍc-EJ Bpv"b07,fq]->(z-AM8_#ZTn|;Y z"Q]#Urw&ג:8d'FDmuK@/[(M1MR}>ٟQ$bŒMUUqX| [@E0lOh#iߴȂA0|-7وSE+5Q F\[9;G7U[8Hv[J?iж@RPKAt-ϘȵW(_YAKKA"v?xBӹ bEF)Q<ap[&JRFlwqȒOkbyn @nT6|T/dG({'dzقɰJkEߐYc0F!r)3rM/,_j';Ӥ<@ W%W~ 9duc&!2OohbHW/Aeh2_IPt!?_lifgsI*g}؂.2Pj~ϕ!R1cw_Jb&:HI^"Cl<̫a*j(fǔ!͖(o<JIe;5rcCVУ1ٵԹ۱6k ^Lqv4^H~v"K5t.7:eb*6msi�;KNbRug>V'Hev: HBq7  ytX*#Zl|q4^9͖PU,< _A7`J(*'LexHGl59C&lCtX- *s6 WJ u|N7(2aƒZ}D3L" Jޞ5":1NFC?FfeX^hH˴y-b^J:wF}!v�?癄lWŴ {d-^aUaLnOr#x6#ag 6A(Pmɛ]|9-N䈘0O Ð1$3%�5`MG)} P?BQr"ΉU$zcHHV(Y^+ij.+K_LuTp+ȸ|^�¤D|*ZzQEf6!GyݵNC 챧4KQ5w┳=W,jϬ$;)PVl)js9>,v2/b$MW<ZG1B#7=b OjFemћxP/#HG8{ш߹a7 |8 ܿsvؼlr̡|X9Ȱu@TC9-DJjry;,y o2?#է>sX*"d i|c*و+j-bi\Ǐl,f9vQgj&P; 9cҙx_6d.9}*Db (%".:ȓsR[8cH8+Mr$YOI.`v3-ㅖ> ՏN㋉%ewq|k1+rGMJq<,TբjWHZ>9|8ޯ PlP"nЬ4=FG|Ƈy^i-"0{Akb<u8t%t[G.K 2XL5lɃ)@ތs"۹%E)i`L쫫/:8f9d; ;] ڞQC/=C@ tSZ83QFW&봲:B~SWZ'Gsh~I:<ᬎ؉z.)im3̱|Jqr0Tf/YG=*/`k?AWPBˌ 1"-3?S Jj .9dI0 MLn7{KQ#)iR_ݙlJ7vi.)j0ʱRPOΉ G\smxIic.hi5?>#bKdʦk e }lf 4"xm[-{n(SLq3-Nj>*mĚF@`-tzGlk T c/))``z91Q5f'V4Hbճ EoPuo) 0->-'!f+˗4E$2@UԂ#gp !%n5ecl4PTwEg&q]4312ߺ'Ikj,./hffga,pl'ħuCo/΁y-^8xz'3 qI [#Ҥ,?!^=N�&^6V"RX9 "r9:}BkA]@]usݠ-;8b(y)*18`^%*=ݷ (e6PBE' +0 ,ʕ4p)1%@C<);0{ƒ4vMN@"J,L̖EX=xyZXLB4gzK0'@;kکQhIrz#Hk<+FR*e6mhv5i"sJfL4xJӜJGhǛ=aԶDLlHtEknli8H7!tq;xGlr0vvYDFT6dg]|' DìTBT;zץ$D\္ULx7~;Dcf5 *w'4^atdRR$p}at(mm'dFuW8]q0fU<N2�=nϤ:l96Lo9ҏ7#{2+̸bE,4i@&ʈL6T<w{g̤r|is?/:J ^jC F.~PDDR3}ѯ"Kmhȴ~-zn@&lGcGѺ"=-Y 0Ex3t|B2ja J.s>kSvYgc6}E37+8U[vr&_+ˡ Vo`GBk%Xԕۆf5Ʒ|Ze! HfĶ>EfZO[ JOf2y^CBj�QT膚-jVz;t6GSv+P0̶tQɣopdKnM-OI$+aI|ҡX$cA] X͖Ff+6>-R]hǏZaVPaNbsFEqvUItFf,MLe/@NYc9Z`Qu3'ۖQ�yȶPk??a?�_Koγ0Ni=L96MCz&4q9Y9M˄L`&3@Υ3shUpqI9H#teYgqCEq󖷥i< =S aSe@Y[cl=>�i҈xlF^ЈMh;eٕG�B;<tn6*Q9EU/rJy2g.bmlv-7(cÑ #6L,:G馶2WLr ȼN(W<UEͩ^o׀Б^SlBeJSZtB>ux)ӬӱtP`z 03cf$o!ׄǀ}tM\2oak-ŭP5=F>jSb2kVqZC-9H*R͘{? \Tf=>q;A.G zI59?zd XH{#ym{ \˟�Ld!Am.# Z`d!Jbwk%|^ێ=%:gA>i|Vpwa⌊9iV}lЉfnFMqscWlwaq41yN#~!tþECY%I3;~P?[p扖:]!J+8`/Փ *@gz?3AruM#[B -|`x(C;ngt2u Kpl'#n]d[݌F/B\\ý,'>z"#D#2u(?1x[I@ER|16]=ρ7p<H=٩LCaS1tP$�1>p&w}46ج柆xexSYpIjgiSoƬ/L�6�m| .ik)Tr2 D;kႶFquye3A'izA`kz!S9 pl@Xŕ&֫zVIs`#�8g-i| wE$Q9Q59E\vzy^چ'+8UGRd [p`[HWiL3l=D`VURaFj۵NIJyPɫhw.vђY "1J4#::cgf'}HKZ9S[F'S0.Տ ="+X{pp"/`5EBr+إ&) H=x2d8Th]?a4vp[Ze|폻tX;nht*{BFtbGR D/$O?byB=x|Zv^),%#r�yF+:" Y?". }X~ʣ[ì\/@`{:%~ ^!@-eo+lkiu b8СЎA1|l/DeJ8W~Q/8=a^!NPm,I]@"3Gz~k=a?v^:\DzW-Ё%A ܋iBp̊ԕF\OUk DyrtYy@W'4Ƨտ?!;NƈUqlGЁQ6b:c 157ju|f'>q˩>c!bE3N>sI;+#!O|}/Kkҝd DA~Y0ؒ{zeQf@ OGȷg߯`_S#/"LM+0(%e&H6 Te!;@18~,SiGIu9e` Rc9= +Ӄ'J94הd�ɳ`VV ֬3F7RcݧH0XKBV?G ͍? A,7W�x &r#K zww%=ٞ)hzkְ3$q&i? %~YD\q@xDOmM͝r +5.iM:G.D ) ހHxt~ЃRfȳ\9~~B*uqW&e-Yz K$C$3Rv\$؋"ihh7yٻbΎ$&֖ Ӓ�*Om*7O/8ГA Q.iDd] H}PVȥx 7, xr2mܢȅ+ Y.'5\e"HЏ*Tq,؀Yj90lPCG<m5P]`)o$ƕmF;J/Q:3t-?@$чY/n]SLL̕ i)AZ]y#(_b LYl�GOyt!q`v{gq>樋z?|AP?�QvHF(e ؾH?uRdQ"fZ#QAqWQO +Gxt%B19QIuTƔȧ I/$e1)% Ә "S~ZDX\PGL$bޏKy,2-ydѫ]]`0d@oDrzdgsJFk$zgiRtsn@ Op�_)l@ҼCC)f!:>Y豢"By*#"j <a*{V8+"zc#b}IT�.Σ=�ژw(-Ap2^R^ɪ͒OYӣO,͆\ii`�,'ʹ+�Bpg^" /⦱vTw PV=-`g&m!$xɁ&c蝯:n:@OneCBl8�r</iJH 4%tNl=s`,D҇S\%͕"V.#+AC�a }|mFm*<mѵ CdKowZܼ!1"QU?X=y#dB�VM;d^S|2 )C�w^&e! D+Q9Py[_B8>hy}3#2ʿl 1(Hf�vaV$c9V �\a 5j!xϾx*ԑDsd4eddeQP:.Dd"FREgMj\]˜ oW2' Yf%w:؃R0Ha9uC1 - KsNC|KF x td|+OĿjLE/fQFmNpPW5ʐ_ 2v5[tAPr!ɸ'R3@ݛ(07|dfjj,4�ajYAxCCV"SbaoR%DSagI ujt4sXe)WJHAof{iI9KB%C^:6Up+Ec75>݂6ɏ ~|w{5bHR􏨝-~ DOzGG:$2 x[ q WYӋ@wI򞪶JN:KwtxoH`g|Pѓ٬^IHXKCU'@9h;u+87#rYfHv(I?{ļO)FDtFUT{BV5ɑV,e?r9XY!QJIQoZ,kRz2:B3VDM'̯ՁHj ]H/KpO±<#NJ0>붨NyvЩc*ZvXVua&@.T쬊&,6y5ܛ3L:4I.xg٣]hՑˆ5~d H'GV@mbeȏy@JQ 焾"H)Dk%ҌǍ9l<2Q҂ -\֩t̫q_6PrJe zųG5 0c@AKMJ -f*x N5x> =T?['?gL2ϣA}B.VGywoc9!{LmVϊZ.Ww9mG3lۜxvDm25F'ӫxdղ#a`QK6UV+ ECX;KGR+`8oH0QYK U~*C p>=8\'l<kC4{JB;�ʶK<.vY8'lPP<`{ƳϦ)? #tI{3G= @hv!�HA cb>SaPpݪMfקC$N}HŘȬӏNeJ"uڰG$4LmHLC#DR\>3mԒ�o;78P 勓ƢIPOH`1߅Q@]�7@IMoVW fZ<†6 ^v6 GJ/)MWp3H@4aXojj`+bDqx!!vaUhS&h3lXv@ֶv3k> Yȁ>6׵$V�e*V=99O9 ^ZB-./ʂdj7�F77tof=[Aa[[ ,S4rd>Ԋ-N=bYMhq^`q6S88b|]0�qrB 4u� Ӻp<`GTMS,&x7$Wh2t>>4x]~fvaQ.*Q@5XL pL Kw"k`^+�9(&~bvooŠ|QUTpI=v]Տl\Z8=L$VPT]48}w>'B~d'*Vݲ2 8:od%&iGj ,5W}Q^`R ٓ|Jͳ>& yo5T`ǝJ202Pݞm|niT=s01wo %O7؄G�lT7XK-V-�d '7ѮѸoѐװj#\itx&,<PHw_dьM# 6!}dqVV&Ksa4;$ _o9d|Qt@K�Ka3iy6uNǦ3΁-A[4<Q+(B6GhXx\ݰM_!z#<k * 8uRhdOh pn*cl=LX�t4>4j\?M%ݒS& {J5̗0nYl�6�JI͜V%fgDW2[V�|Nk^q8b#rD 57a`m0*<ggc@'m|X\\tU+1 :ăiWM9S�-E`$dxɘYwOuuxv�;,Ϻ 2^)SjMJVOӽ@PCA MB5в3%?j=7Q_yEǭ" R M|< Ι, Y5>PJDB+_"<f/4$+M!~YKKd m -[.+W?ydpU\3v7$&_@LվK^W b ^3Kڐr- =�CDZgtN[LG+�/()7#)*=vDd ?*'CPb >JV\GNH䕡cт`Gv>n{`]"[PMrLVt25e6Ury0c7o-I#PŀpYjlYXUbee6rޡXD3C9!İViklTjp2pMנ0K �рzAҸفYwyqӭ6MҸ@of's+RY<ρI2eR %#,;dx�CKU,INùyI,UM=$1bmpʴn[Bda@-xacۜ9\ FI{Z 4aPhe-mzg[)vޏ*A0,RE/׏EQ:nҴ2MuGf~luo|ؙD2KmK "EPY2C;utP0 �YR,ja`/½rxbV=#d_EֺRSEO�*9;u0u76[ Ӵ6FA2X5ǰZ <zj3oG28A]c8\AliY*T~ AC~p[ D`gHGC*'H# [9ࢇךjRCF:g@u 4Ȃ1ʀAlY9K2oS<5ɻR_a*E,= C, }l BW)M0.һ혃|Gܕad&6ckxL"iY 2 G6sYM"D-$pRxlؓ63SUM4(-*=T$uX�Mܰ ibN7 jɃe\3<8L2qsd5ƵlY{[HN`y ƑHQju#c\<'8~htT`h͉2znmiHTD^Ƶ:ōeJZPA1m7TkMG0FI[Nˏdu)2BC&F[E8 BLY_pn_ -Wcrl6ߤuS6t?�ϋSd`R'u }Q QY]dg虦:zA~Ɠ_F7}w5h u28wsl`mE3Z�X;~<eUh2 h!iKeQe,G A 4 :VN\+}d6t MHxV*K 0nEU1Qy G{郍KlkX*%;tx%i?Fz@SE?+�-l{"r&EsK#fxFRmH% -E5m-K!N|W[RD-Qyl!,ik` 7Z�!1G6tj53`Z #Ar0@!K4bRoͱ9lMQIb=K"q,+>IwhiH#T8a`9:Eb} hؘĤ+@oYjk(eRΪ#ŸŴŨS%y!KpFP[<rb|W3(QbMx_0[@oWJ,MGaOlBFVdd `˒$ xrHU|:BC$5l02wH \&@U�syyLyv|Q();/`Y]DS#m5H!\sc+s Z2:hb=Ş LJB 85H~Mhh9-L#FōfU!fؐq(w`WeN'(!J.LvŔf|S>�?wyiD S,nbaxf:zB |c g.U TC7{ *θ��۪~^P9 Ifvag^ERۆt?8�Y `;r�#W)JN8sV`ެ 5 Ns/c *v Ў8BQ *iQǎ)ə9�+Pv.;PၓQ?j W9K݊ Y,$70I#+:\|TSt&%7$;1@6n8oT5oҼ<8 C l6(F:Y /I 9vbBl VTEˉw 9 :(u6mY}},\L刽~8==rL,?2�(u^p(|y(О#&�wd;`܆5 !)61ё{\1'ȔOWL0m:iP~(zP8mSFk2MMιXXA˖Za˼a:.�s3b$,#N#Qgj,;ɾ(e֝#T^R#' xyRBj }h SNBT] xAf5#@Hx$mM/D虯W6:LfKx|uf 6q] ;4^fBG܇q`PJ8%mkKGٸ$=ejs3I |n:˶'t~9YG5N‚xśZ@dD hF#ybRUΥ[mj(Xj*s<Ia\.k!燈/pzkg8߶p5KE*\G*-pp ֢g`VP>ʖq/b*MRS-^l0vVK{Bר|p i qAHJw =l=q7ױ Tyz@F@ )(kl~nH~1t Lɺ.H㿪#:01*_P!JxG軆- p[bФ~/�FщQ"1WaSҾVǽnF %As8aA!$ȓs3͎> *[% 8lB&ŠH~v4LU D<Bz�%9]KM-HfU<Sd&�"2PjdWZK0[Ò&}`~5  *goxM7a\}MF|FdzؙxYtdZٔh@v:|Kѥ>$<?Ʈ[ɵ�Xo,i?d@!瓂xQ 7C]baQӁRjȋz`]*OA#jp=lSG>1,ҪY`'J17&.H*#c�خdbA.PY|Qg$9vc~0f@HyJso`hKXDMbۛ4dj#1/w+B@XOl^h'3lCBE :ӰRF޻+F.6u<B{ݍ&vbk)s> 8XIp2;Ca^aw !IB7̟2458„4H@|HkN< i_) "s8"R͛7fd xphG`zCy5ZvF5PX|gTH=J%6]|h,< nI%,S6UjgVp28Z ]smWӅ.#p\[`�¾drdů�,1;=Z;HL JC6Ov8=?/8I^?v`'NOA`]WgR\1>t)2`uo>T \.UPWԇxG@ٛnX5CڎU`сr. !ty9HȨC<)LM ZR"d�thNSs}i~gߐ,ݧ(@oIi Mr74#Dh=U9i8ka$?6HTDD/<ci�ƱzW/Qݤr}cj=$6$]7?Z0ZllI(%'$q*K7jMxǁ옷/̛^VdqHN,B-HmM_'v_� qX#cݱLk 3|Pqq1MCnʓ"o?'`v49Til }6HbZf(vTl\mJ!hLTߝ4+ J2:R˪痀):ԩd3Sq6�+yw\**QgHڇA 9D7@O٣G]+�p E/\}P w? H.HE3dd㈰X4:ӓ8ẁ@d5 ahzERv DwW߼Btd9 P  PԐMF<x&#HA8(H+hFϓ.lt-i$BsH% E&s8wb+h  f<^iCfAg '^\KYvˮޏV2` ă^J4*Hي:~ҙy ib%Ĩ  ]0]- egԙm@ǐRe OR�OD?26dZw7+(~[;]vaAKX|P&~ O%Xr.T>Kű*4!r.=*Ť+ΡuM/J঎ ~%Q0AcG.]gH$<#v??;$^^թ)k/c@PzH@R[fy\dU0<<7A#P!dEes17h"o`/1㕷U1:oT�J2y '`Gr. & Lmt[h$IyH 'yCH؀M ?H)'R� ݦ<ipBEs?lg/c1l&"h0#ᤗU~[(N7*9i >XQ%ͦA^7 *)ԖXΝ/8=o;Hy]l(Ag׊L9UU }XU _P0g< ,k^]y5!@S_ ^ۣH_ɠ?+fJ}wWTۀnY^ԄVՔxK"=M.`;dӻD!?O#mLD='a@,UZ7P g3@ yҢB�9@$qZg"Yg̴6q #8)ջ]2题>G l~aW* (#7'hT}0Fpl zPnsƿ^ Mַ)'ZvV:6dJ#C`ĦXǪZ1V:<t {=Kf_:ʔ3SxiA0tCW}s <ޗ> ] $UGG&R^\#et J^ъ J=T[,&;%EO}+X<&K1/?v0WӬ; E}7.<0_l)y  .F!(廤C^}e*1}x$0 Ya\< BD%y]h -vsR/;\�Įo>gv*yA۷<]Suz:)Eĸڊ1;{T$xv@ RMGC>K2ŒM;4-0&Ix,H�<ud \&t$$ck ۞bמ!(_o- ]*Ӫ!1F4] ;p4y7 ؟V `* FVTDHC�ng >ZpI썖ËhV'HCtK_XzlH 't %yH.3B`ɭgWj2F^zY4 <C Btx&t+M(8DdUHxͺ?Ig*䒏^[ ;rR.̐,ҴWDžUǓr Lt' \5== NUE@RCl 4d|ہf{2&e4v0F]ݨ_=ͰH<Ó�i,ZNEy ^'rp�8(ᔅ�?<_[3v> jSА@Kgͨ.~U0R:[A\.0=Sױf(/}fCa%69¦Z0dUGJv= E6~`WX5%vRwM#/bxl\@XE-d<i~i9=[ N�|,+,#r? 1ҋs)J3rw2gDx`n%/�`ߦrۤ^wY i~TU: բe%ԀU<]NN@TV^y1+OGC 2=-9f$PA4]<1ffh1u8Xd 8&H-5ښ-Lۙ4ؐv�Xx~O*yRV{+B#*$ g}.{x,u#6 .<{,!o5V? ]<z9;V8ތ Jnk*j^�L/5`ƈd2@Rx0i-ޘwSj#F9ǭIBwsHSYLT8Twp:OQ9Bﮪ¾~]H.S`*-DPH֢ܱCT4Nxˋs*ı5Jz+e. PwHCqoIWG)3hcL%zT5GE/}Ǯ-:,7 /kE2ʙ<~;G:4E~L!ҘY9c}Fs^q-NRyNG"Xd?:gf Y^r6YgфHyΈ0SNv0tT uzSkG5tP"5T`-)FL#' qJ'æA8Y>9,uDڃ>uI /S!zf̅ 4˧e|Ur%űdmDZNQ a*u 0�CQ&'̬EO!xgksBM!Lxzgc;]Y5`[*!$HxV<߃aCQ(M"gB1~\6OMFԠ&D~"Ve6DVVp`6�Ayv(ˑx@Бu @%VJ!EX#-:?^Xj 3ۂ)Tg-rs,Lx@ @wE^X#2к/B}PUFuG}[NҎG aNy,lcɶG2k368x2g x22zx 'j TĹOBʞ==б u!sx�vΒ! Iђq!.ÍxxgI63FJ SK{03éIk?xE,G~>&v`X"i؎!Y*8N?�39ɂ:yﮧ&r|>#?d*!8ݏU=!5,)aE۞W>%G-M胎gbk1 8o 42-^>�:&6""aWރ.a΅ų<n,&XXA{q@ F :-Z, R3S~]Yx)l<"y{qR&u2 l#c.髱<pt"xA@u$} gSa>\³ E/*RWAi`hRMF3=K�擩\t1c qQծ\?Չ 9iH&Kxf!ЊH &O1 Wv:vOa<tEl /A` �1r : ܧAdUs9 !Hl ,l2nw0|xG8�?hzS=BjR+Mt_VCEf}r}:ҼK@^ Yc2�^7&25!ɝ 8\w=m۴*@QE2n=Q8莔([h@ECP{ Ob̋31V7gӿb] Z0MmT# R6~p,|#`l;v6P ,>:=ܢ<^O2PKݲNw|g5.BEvf'yQx 󠤌5:ٯO60W $ {4SG |s ?o%�\Z5�312p8 WQQ?G$�OiOQE!̣l(W?A[Ȁ#O$q4փ/4PXrO`YaXm<i+vSuK8}|+ 9՝4Lɒf!te3*&+?R<\`n{7N>~�2H#~799$&8]w[4*6NIE9 p>=bkxN<yF$VYE9qگ7j_i ҥX J'cgftV[9Hh9"68i`ܶi^FN1CTT+=&hq3nEtc1j^R]٢DVfW&w4QY63 9iC m]5(QZDQ{IqfZ\Da0DY"B,[p}".,A bJvjBCiAT:74ŒM PJ[N;3R -VaNi7gS IY]sDň%3 N*,и2z}X3�0zOKűw~ x`E#4+TW&oߖW~-43*A9j*LʤffBcoT.c$=9P@G诙r=Ka ͔6br@ZiTx-3=Ws=f+K'f XLe#~}#OK^`WK/�9и>n�$1|rn^:Ga L<H_Zv׷90 %TCXrJrh{Gc}/W~'Ch{TQl�J|8 ԏȸ%&b*X6�#ۤib�*Ңeh\Y蒉5�F̌?$}"z݀7Ě)Vˈ#r2Vic@c⾰qA*.c[h(f=`Ox#q"† lum@r5% j\\/V^^eƗᐜ(slQ”U3e-?3H:�WF-JL$W6ê0b X6q(/[Hk24+ "{c~7 7L*rX~ƒ9s@P,l�gCYӮbґ-;@%ґoz4 9$tHj# :jw1" e:lkYN-TpL4o�J>[C#MBvf~a$ >:Je,Ԩ}p=wII(6qśayi2 V#KӶU $ï7T<`_RϊOTO/fE %&BR%H4Bg;bƳ?%Ź H=TSq<Z? �#}l}%('JۣK1 #R ˖ҼV(-ެE.)k<"!"uT9?Ƶpm7L:ej̷ pjf-iUV-ָd z$7yౖ -NRne{eY+PIf~a{dDEb+#@y!+W[D q8@t,Rܳ3^M%rぁFMpU$He]12 -fhq$b;%8U<H|gdc%<ڊn&TWi]i ~.V݈i1_uW@Diҟ(|W-BF<`-aÿ Bb iV7g!YW(- GmSu,6G.CX<:a=$R.4ƧMH!n=G"D*sKXf&I LQaE +-99Jr@!iwU7)E}EJ#>i7tj O;ECL k3ar1GQ- evk~ С"'=lj}12 /{-LF6|a[? 9 bΪq,}\>mtTVnlE(ak 쓆{@Y?],^BB{ tօv W>NC H'0w$q�_GWVب*EV_<iy }<,?53C JyQXx{C^}z! $KWv5],@@Jd Lw|y^E>s@(e\|rO<:T@PpqWzH4: =v 8 :kk |H/kf1bco^kP]ИvdLFON{Du𲥶=Y!*Yp5c9P B~: `8/6 3Wv?vvA*dY^R\!áΉ'@% xk &-]ϜkYA}<q5wj5鲛\ 3&leݽX|'+G3$4|(y .<q' Գ)[V<lam)eu4O RF=OU3_Fnq+D ccxI;}h-C|՗_f[y?xܷ?s @wY>ջ �.5;wST=vIMyn vt8>+6hl8;˰.tu�m�M65G'}5ZLX( 3G~XVU8˛@y3N(Tu' PE3bBa�hL l#oz\^PBC„P;6DĮqZ躷АJoU,Cu H)ѢtVd|C Ӱ[y?06Qnd8\{|Bn>돏M֨4M`:-{,MKe j4) 7!3gꌤRyY΀vj d\D0̫H\Zp^O g8~F x}LUSP!/2>C:6BZށƓ۹d 3jY臃cuAD[=r`1^Tj!$B^C ض. Y"Jn~9Szr܍g.`0W<hAXFCF*~t+OnJ2[ߒ;~<CÝ=S1Apw_2ۣtZB}Եeha"sݛ#N8xD|H' {dJ'[*yGlh�kpyN]$`: !㵊ޮU{"0ǘvbtI"vEkЍ%Qe(ց-*O$�VR( Y|?HGUhP 2k@ T2j1;/*uz#PB{>(YT4YKY9 iV==j;na8ÖR݂8_AۉQRUY .ŤH2U<+c`1MнlAԨ򱚁 !  3mx Ǵ0%ߚ+HD& 4\ǔa>?K/衖vZ�H5בӨc?V2cuՎ>HH=!Ŷf5 ז;Hgv| (rqNC+Bhsdڭ.%ͤ5Z6ƤinC1V< z. '++/؀0*|2봺0v3$/jZDU8 3Ǎ2:ٚaHQKUI ʄ!<ur-[Q8|hWqoia;m_(_ (`l'접GO0 BA2.AP S=bcw=<Kiǡb`uI`ɵ !5H6Pof4! (bг1G¡v.K⸈3c|D:cI;[CF Ypc\vAX6O;◠7xKaԍdzЀ~Zee ԁ4iW^H@RSp,x9n07Gz F sD4C^JYX*(0��Ad'|٨M ItvbB;ѯ]R䃬^H#Hc>>Xc[^6hlk oej"#D!B%e&,rM{C}m agU C# Ka]5n CΩNX0fJ9'c T;�v!> ?*!@c6 Vteid޻oW}hIK:<^@[ĽDD".�< "S6z8oJ}(X?-ʲ gtIHmb$fbǢNgi8bl- q[W1Z%e#a«Ѫ0=h4Zx6"OXnjBxRz(Εk=~%چp ,׼'L<\K ה&ֺ4oIYs h%IiD�d,9 \3*3G˝֟b^-_'Ϡ3Dp5dHN;(&OL*b9|RՀ,޳k2G(c:ʹBÎ@i{h*e2IDw/8W$!wo=1u=>ԕIHEgZđ17HqQ3xw.[hʌY> -nƜ*:dE DbSA �c"nS_0"rD׺e%gWӑb8 * j^/ &I_ȝCβ cv m++,ץ9x:i+(wb]95x[9r V%kR]q?qID,O&xY KQEcDc+eW0]=A'7z缝>ޟ;6&'i=wZ٥q$'-R땐9CS4[\6,PL,")=-�IE<RG2%iF ,Կ1#ѱV)NX&w6wK6s|'#`ۣD.↠} A[#$etCXޛX$WO4 0htaGwԳBD-TDVf7Ѥt{d= �(طIX; q%l1WŭD۔x< b\Äi-](58RH- >4HD Je蒑E v E/NN[{-›kFDQ|H-Fs*QkX lSv 9+[/,[\b,DU */X4ЗƖfn+ς +<kELP p Gb\x<-#c;o#o<81HRt;p!Ih3:ғ*/aX�VAplDs$Yj†ksI9g JAh!0cgP(q]k@(MB~L #-E$pQ'F|JO5|Nǝ xlP#<rYrAw�C_pJ cZQmpZh4k|D.cY{䴱l`t$Yaw9գ6&P`/iCig�P"^1EJ㸽pd~\3G|??Oӿ??!)hVf 4Ee RGm$z (@]p^TcDpq>E{<cz 4X*F%hkC~c?/aI_^ 8dIchO?T<Oֿ%OyQ�?K'.,JP= }fz<>zG>龝?w##DsTcYECy6(%]w"#ٯW΋Ut?Bqx;)ӔC1e}5wU# f|F`.P]cFd=Ż? NW0>djX�C=/RM/W'΄} 2ذV^o�tw)-}s5oʅs3P۲UXw ^M}^̈́`8<ax|WYX@K;/*24p~g ZyH`yx}u>@ j C{`WO~~_ mz0qhxi!C2L⤳a2RxCcn e*rANa1] D;]w,UQIq}Ljo+R�ބ*qh\>&JwS.O�-' �RZz lpR @x*Hu,4=@rNdXC|-Sx;5D]7|5gb'`b+=ܡ0,*vEH"Cx݉-"$''2j/a.8Mڀ1 V_UIjj8؅JףAb]p4k/E=#tR&aaҜ?&K<],:̔gX4�\KcLwP 2+u0x C o |M }4v_P+jRL% ;@CQfFcY DytRQe/ҖhQ4Д 5�Ԉ(T~A0;3R79ʀoޟmvW{ՎL6<@aWa@')D/跰,.hVMu{Uh^W j]i]- t>G [U&[HwPY!7_)x -X[ BWQ&v ͐UEWfoEwކS}> Fwu*eqQgYJ3Bc kzL5Cb}_ޚ7"r{q,cY^GOb14pf~:XKMawU8\O*}6a ?<X0C]e.mbsm9)vV绰I{=u|CS"q7[W.ҁoIvtVwҡs|Ѡ;\8c8PŘWuL�^Cy*ρAM.ĂYX)t%Ln,()} .2zu^e:KhKvE-FM0!\P0cp|B[2!+�xs +>]/2*I]*:Q݁X7?3f,9c{T8^b@<O xW d0ϭqIZqu)8G5C$Ĩ@o̪8\ťUvf`:Yl%)q]dj E=ByucX2I3q4A<I{։E!e+|Ie4kv{<swa~\PI{5 &iE8 qtzV4[0O0D#.rVC^=P(^Kⷰ9>ђ5EO,&P'{P| 5ڭg@]tj[+}ԗ_(r9)جC H!I|cjyybfy9~ϛy*Pz_l}#|0 l { J]х`9Ppi1}O4BKHSk? K/{eJBDrǿ XEbc;3WF:AȤQazmSʅں`4tWC[cр^,\Ҹځ5|TI?'!Q̵;'\+9DJ;Q˹k7P!X],eH<rƽu�Nkm0h=J%r�që=\|wf_ G\1);ZK4'=D$U+Nv 8|0JM3eqIW1,{) vf#bZ?6x5zٵAwl}~4OFs_fʇ\2E:"R/5RccyuHݺ 9rK26<amWLUp+sv0K.<bKefI;VĈwfA oҬt}PFH\"vB(/u]lv?&R̵àfXcAz3,G.\#aMt#n=3dh{]uՐ rm1|>(1ظE:¶ב@3 $, R AƼ%owD\07/<!�}!OjQ}”8V${&t  ~ j@Vw!ec;C=àzt&]Pd^GwSVIW6X\U&aS>oPpZiEXo"RMZ6 Fe*G-i\<:g4a22Xz4(@V"x=bv89#BCԂ+£#x �5X}՛DEgi[$"5@`>ʇ% oAqiw_mX>82p&bH+ i�f`P`g鰒&}_ec%4Re˜ILkMNE=A,+' Dk/Qpz0.Zbparm}Jc`T bY�F#j WU+#f婿 ef`epm\aW܅1&w@' /ZDYZaXSo\ߔFByW5O _j-PFw_>G yJǫaϣi9SL#a^ ,DQgmRScz"`QЖ++R v_h(VÕXsmb޸+1"5]S81e5Q^Ŭ;2:}TߛzHa|YRG]8@a *.^pAvUEsSgIytP;R%�(i+D[j_MܱXTAy`a1/KIM2~&(r{Ut/.:m\~,\Vx #%Q_E+78AlYٴ7>N:�ѕodE&dwiq-/B\S@m�oBv&ʟ&nRVzz%&R+dP[>i;ӌ{ I1WvgD&Kɻz�פll.)I W~ rߐlq_TM@\Dr7MH@|נۤka'Pk^,vLj՚[IX�#$)J-0WBЅ(b_wt'}be&.;:Y+SiXzE_/, KjoZ󀛃[i^[r'j!{EoOލֈc:pw~w`N!TЅ@nStfaY޻C4.#/qTP,ޠՎ8EB\ *F8)z;..%X4vC&&Y/{�f"?B ^_̲'}>7سdL~n ma_f?X!cl@yu$h%K[ro}jqof1 u_b 1l< +,J_9: 0`[WD#aE]; -n^װS%(X%ioEMwsBNFaԈ$z-S2p [<dup!g4=eZ35]z{%^"^_L$︺WF4ݮLXtc3C�?æ=!1�[ϵ} ~m16fb@ |d8/V湮3~X!Vy Mn+00o�d@iQHZ/Y=csE1+G©f҅y3PKga{Y“=詼v0¡`P45+r_Yʢ(�HC$;0_��p,lHK{xщ >fx~Yl JHx0QgheDix Ֆ|ra_&coV3:)AcC%J-ɐ\p"UU̽�m/ w"@ mWXhX"1SH2EE�=-Pbһ6GgW&K xJ>m�BRnASt5C$ozF֒fȾ^+ Vˌ6ҴM,ZA$i\;00l+WSDm %#׆]^W xw\V*5lϩ"/,6CuEY漉!X}mYv=Cd=K��cUib5T^at&P :isy ^1DAJ6#8Cad6Ĕ#Tp_Y2%/Iʇߦ™tq5Q+ !K2_Z1鰆@KW-azs6Z`."F]\02ҐURThb`y۱,oG5^Qz&Wl"t>\Nl ePo돃mâO\z͈Ȗo($5P\Tܠ~Go-M_7P ޳[_<YT=<\Z kM2*U6ڮ_UT t 4T>hW?5g& |25�w\}sj3aC0vx!�F/ l-̌0]U/we0|� "l~*G#S~:sHRܤd wI*# C xY?o!_d/zƸJoqu$g.67=;[aWyJy OGTPaF2c_VB]TZGꎵo7C %&`􅿄ΛA}SQ-(eFݐ輧PhV+7f 3א &X}I&N{C~B4:W-|L~ =d-]S6]#d΍" k "/6*S 2cWYk+X`;@ҧK%a5+n V.1Zm Mj-/,LS7@lKiɿBD86XɓL!L-C+,,kQBi{(VRG)wUl8Āow0M sRuXz!dCz,W&Ê�>~y Y? ]}AVn;n-[%XI|y~E^AnK�x74~D [\}_(lOFswwm^uC@>rzgosJ* ORїn܂&"aJE!/7Tt^[b �fh;~nQ6,8H%%>&LhE MEOr},\~v,JZA_9;NypZ^8Yt'7n/ox  i VV˯MPMp_^syr" MPp¢ 6(MK.9=m; ޭv̺'%/zYxϏYխ:@l,J}k;K]j!t{$./V)AlW.ZʿoJGjyMR7c=9k4N.]773K�hHe<L_iB!N2$fѾE�)@y~ o󝌘7M<>QB%LrAgԙ|yc5F':FD_Gͮ=/(03x#:X \[OZeS .o@vVsK .[7q{UAoq`m�O/(v4 eBLѦP"'_[j@}B ] bCjŴl(fSZ9S@=v$Y.&<8- "~VeϘR ,(/R(sgV 1 .bɾAY!% ([ZOYTλ E[Ya>GLN,M[IWMbn)>k =5ƫ8'\TV8egcGB)XBȓa|>ѿ-Ejvv7O�8Vk[Ob`¼d+@!J4o?`=:hM5 r*Kמq- ]!ypm[b]ax6R(-mϘX͔-,2o$#,kg{I 64#yh[c 1pUD6k3Û\XޘZ&3"…Go#TŊ|cpkaIEq%]X X`9\/VX d_# ,eQ`.jtz$/uB;޶BaCR "yUn5/XQ@.X{Se9RTy lpU#6iNv׾5__Y2_&OvxAAtUdZKr~Z]VF$'W< ԕK. LKL-i7on^S1ǎT축M]WBc#tտs{cu6ϞNQܕ(uz:Y*X YetƓK_@GEvwJ hσ;e5<#&ЀDV/|Vo"ARc@ 4xw=׳k&;$;)? ^vϻlCWHz!^9COGP0_>hZ`7頓٭~X;]?1kΨ�$G5q's]\0sߗ3$;oFeu6-?7䃿2y=g f}@cZg}(R2/oUOE+rlj/h jmî}iCnɗ%gfP~ù`&t,F]GO洴'D+V?^˼---{8qO$a)wg.L3^1ߤZݬTkwV�9'h-it~!`pWxPx=8:ciټ4 JO@Bق`нz%u8v%ꭅJ؏DC_y v߫a8,\\(<OB$J+�: {�{  ȏ""!Z�"%g5XYGa)@Aj/<p.ɲ݉P[=>۝<\6(t~ytZ.:Z2\tR 1&o 0/rbdx^έEZjvWg/l#l ꁍq+d!ON2w<HE*ҞJwgZ )3?YPdsڰjrO7c3{bA3#obm)@f5r^┝ffpkND &kG9hJWIaQ', @(c! M_j-bk+2<Q 9"~v@+v֞/4U9 ,]ފGЗ¦ MʩsԗW,/T Tzƽ{$jc&x 1i?bI癘OBu;Gv`F͂cS#K`zaAbeXiB=v?doSqe�;d>n2Vm1%w B(*JdCy=u\ʳ+mEuum PYO ]Az^l ?eBִJnrӱt NY _YAi'>"T}YY<(.E_nG _\<مkjٕBܢ?U{CSd'Ӷ:]n+V@p9hVm$ZrgbX:60Bs!4݌! .;b񞉙LLbE<dN̴Kwh13,i;n'A|cĦ݇Jb<<+]|nmfo-$)'A.BC+aہDRO_xuŮCfܼ͜WtX6ܛH\%*VuOj>]ZrYe/n#N!^mN4ҽzu֔i躸$ +V("nZ x,݇ |^ۇ jrLw�0ebжs0uAXeXEEwc )ݾۺf}׸%UHs0rj'B>-q5]vL>a褶+Xe)% Tju-$ϼd lR\t8UE?N;))^-:VK[-@Zr*@Q37m%}P$ Y6 O"vNP˸ˇ=t" V YSu,D!l1Wz);[Cd'ü`֝Z1*lg]魌)E47Z&}n>Ą1qV[ Lד2`Nz6@�_u@vY 1~Ѯꃫ9l�|B$( ٓnpY#ӿ#eWShb6++X:vwɭDr^5 %Ws3U-Q涐lI(Yc:?dPz2SRhLD$4P}�|DHRP{D9{LvE k%qBlXV["  Z%.£È" M w1gm8av˽VC+4;HHN0e~@Sc1J^xWY;�Qc=O)=h45M,'TDA?3Ee^E.YOB?XZ`|ؕA̵-ۃvlУE:~<tX6NN!mL7 fƽ2>[gE??b+wYgibfp,ZLjW)Sr0(�-FYE]N4�Y%)|.V_fJY.%\oEkZ bB#DH3R~e%B`?Cv]&k>d'd0zb#Y.pQÈui"y6NV2bqqꋹ ̟pT٬_\o7`ceـz6ՏzP\=peN Lړg/2KiY (xٙTyvC;$)uۛ`eGG(X,L8Q"T/-53d2Zawv,.k]q.52rƌ=K%@O{$?_E@Yf,7l`Z#'yf؇eY`@>ۏ,K٣n݂0EA:_٧b ;<حqh(Œ )i^Vq>o%bp rCq=le=Xc|^٠:p7AmBIkmgNgrCroN"؁E(ZE=tNkeYװK4TI>QBMV<lHT*4peIkDtBOI w|!):IZd&YCco*P3'sg HUma=nܲ=bpaY.QU*'jjG"�{7gGrw)}(, mE& (j-[7kPv"DU?# :Z:[hv\{O*[1E~O_);ڡ\'v3.,-t?`l6|hS.S$EOɁ)J̳*'c΂yM ͪzt\V_"d%<d:0'OZ RӞJA6ٲ dk6weF1C\ԚSQ]`u,3�'"9^QoBuQ[c!(V٢Ђ!423l$gA];&0?0گӋ Z!F@֗A)? m>b)Iwf쩖בJ0w—S8+aZ8S8ߎZ8'w#Vj/qxةn3Lk!lddl1d,\72HxxcOk}ER@M"2kfv@x0Ax ԼCUpdӘ`-DJeՈDeXCPeCM%g؊ J@�2AlyTV1֛A$?gZ }�+v3xa+C$&XwD|~F`V?^/Jzd @@vY 60xث <HV-~Ѱ`'w ph=]ey7in.#Иh]B4r邈A{ms{lX(䴜/E3#X;ۥVX2XNO�#٭`Rnar  <>W埪j ' w0Ԛm#p]?mT .V7~y#,iR<k@ZC;+6ʚ뤝vCزM.!X&_A z>N\^j2U;"L3Cy:K(wxC1HE4|e.l+Dwvc萛=poY-?a GW/@NܜԲrÞF(c<�%Ü=ա(Aw=C7 PZmKXS X{( d$!bpִVH"ڶ ˣ*>-:n6Z�j}xA=l%_D;u9bd,ɅL ] <P` ^yLˆf ~gn &2t|}:kbZw B:sO)&gƒD2܀&\aG/Q_[�6.1-xaxT=HW[:n n"V<(,4iGq"WLf$o7�48=B_1,Lp? X9z┽v?ďA/g=me ¶ײ+XZdq~CX�R3'zFj5J]p *~$|<Ļz#)^ۻN4n"z8b~cM=-!Ylu%}?hxgiBX5͞qC>h6ì+$ nc&;h4.9a/W/뗏l%Tk F3ٙ[PjCR�¦ 31H] M(=W]]MT .A]8`OZZ}^yȧ_dO h/I")yKLfxK'{U nŠrCMilٻx )n"Oah,sh_x0,Ԥ^Ԝ  6^j3"/.Ge%d'!F<` g> :`jcwUT._!u3h}pކZ�8+ړ!+v";}j=槉WN>}r-A|?m6@ɾ��niP-_dz2ىZ j;tɽE[o1(d"9XButdph=8<"p$sRFku" 2_Z0'v!,8x 2e}QW`6 N!G٧FcׯE`2p*L2�q:V:tܶWgo 7p8{ߑF(^PNbF)o{Tu pQK̆ h,_ Aa#g0;:}Ҷ"՗ Ku.[p)լa/I u/n5ƅadGcKopwޣ.:WH"�r<Mo?V'(e9hѾf/]h'6�MӁnj_ex4bwOS&OpHݺOKp3: BhHZdo4p&vmMT ߌZ$!, ۪Oq,4-_ő߸I,~©Z,,,}geY`3r=-=h�+4]$;Y5Nc@I-Ёȃ?a @~~8Paz| h3@n]ԺrqBگ`^¶!eY^9W@3 ~Ŵh(g/rv\X┇H p(rZr hkvOa8: y0TwSGr� X="7 .@!ʈ_ MX au 0e!StQ. I]+;IT�AAJo׏eK$A=h4TY:j:6vVPI[x4-NOE7|T; Z[?E{$<N`j ׋kOgh pBDH:cpGj>۰f – 65u"5aaMdYH2XO|26/,c?PɞO <HU^d'ʎ+{w/ϟ3Uq.h9R'y్ǼfE!jvV2m/T aKe)l2_j8/>,}zJ]QB/y\FN/۬r)3Dli鿋t*A`Fb܄,nH1htx)dNW}QJzSuyv+aldt]A�_nj]e,8Yt|PYzBYo*Ri�V\~KONxps=l xɷt9LK#"K&`0eDօih|}09e@jWÛ?@2N%5bj w''9#s}EA߭'^sXy֧JCB<ݐK qLw [ Zq+P)K|OIp󊔃p [}0"@ [Dl]|(($yG'GԔo<y((>#Xy`3jξy)8D܊x܌}Sي\l%7C c#=cAH-3?-r& :MTAK4?(XҾ<`Q`x-;^S"k.3S!,xf>@>~Nc鵬h~§sH Mo<?4PsDNe&xs�t/eBȊb'~5gI=p/+xMi /S�ZNs=AGL~S37k-JP%/-2?=9㸎囧TU+ڧctm}R٘ A=GIDO iw^!N5ma2wCf& X~) qNGߦQB6eA0,S(:C WCgtT.";BNE:#,@R!eX�Jj{w(~WTF LA%ZlKM̜w`:Ȝ3Ǧͪ A<Gq&qs/ţUX(uPOa%1Y 0 7b W*#iTnV_<qDC>ffOv+\ ]1A e"l }~fTxB(01eB.#::~U0X0t嫄^^<i%}c8*J/StU|2ZDwJǂi ;C"ƁQg3'wfc[` y4Q =ڋeHJZ1naŘPPˠ۹"Gf*Xosߪtx9%ճ4e`r{w;6#y"3,ٌTjuNv3wXBT0c~R#[DhV#@' #=B�N`5>Ë t&оwt]U L#d<CE Dv9":V>HM-<~-Un|q~+ x z$,^-k)MRW@}x.E�vG>Ooq mC@a/貈CEHt-xD& of^L9mb<F|'}q) ϰB$83H?bKL>xo5e_@ÚޥgOQQOL3@v F 50k� WgeP:kᩀ!6y5t ~;?'0-+#82<Z3!_UX91vfh&芰+~"wT0}C O]|oNJ5YpP[['£NG@7HxO ߄O+{ɛu( "Do <=N)G9E�L>Lns=Ԯ6%aHbd �hFä=6qL*"7nX7 vӗ32@)!<ѫEȁ(N(BnsTHl=_eƥDʠ/*L$_nN{k},n8I+xOF+(}*}O~vzޅLXT3Yf= O =Kh]rըvl"aХBkM/+-#yP>q6\IT:tĐq᏿~\jVpB='Z�E rmxfj3NM�b\:yFVaQx3" ^]r-JۏGsNyӷvuh( #r1Ph pGQr>?S-z%Ai̿!+4F_ǭ5ܥ*ef81} %J!]XF1dh[() j-)u 6˚ ;X9!v*ZEhcF`t B݁Y @Vכ=2|L?f@0<z)NBE_ϟXͶ ;/Pq�RL*`)҂b42 v MnGBRQh9 R_<Isx03v,oK,+<z-U'8sA5LGu| dQEPh^XdBo%0DH i'm_ +Fa<ܙPۯZǨ�CYHk@[{{ ;Z[L)4Z 2/^YdaEzQ <r;J;оi-COvp['" 6wrM/jUޢJ b۳D\*wʢܹS {:§|sXayp5[4L2Za)@K )4a;s}ޒv)B#/�JH.8թ|(@ ;z0V2sy(,浤jeJbV Ww;lQX3щ/$Q5\5EpGM.ЭbJZG5LJ(4B}x&k~mhxD 8cj<ysQz_N3B{ JDө'*{6Qi),[TqcL|Ѵ!11Ep REi~()}9c�k1IX5Bi[$> N߿=1˄veLi墘!$U"34:cHYc^3`g%? % L2kj<Y4u|!|)IGyVX˱0(gyH,xAeS.~"/t EZ[<4]wCC߫]g6 fc'~ȆG/ٹHL L<ܠR eN-(˜TJ쟡T=* IW v̏4Beb7n19 # F4 ɱf,^Pm0n^sk<j`X%GNClzV2X@<dVfI  1< - J 4Wo y 9 1FONs73Db0hel-πh]};Xe /hS =u=Y0Ig(Y#xV<8X .-? rbA/F +)L¯$ԐUzy}>" +AȲ".xu|4>ѥ5!a}3©1Ic%A-ysgPٸ[ 9B g&>h,C(+1=0:)2Qť9Н<؃,ӅmL>\ .<3rtFgfW#Y"җnp}u2sxx@!TA,ÜS 8\m p#<@Q6bf|�#nmB>}Y-yGc݃ 4t2up)gm,Q<_ElmP`pg_čT$#LXdhY1F(Os g07j&Y?;ýx)Jhx8Kh(pv^KR8XlߨІE`u+:?Df7{v O,fSE!_ѶrTlW'L^؂4'6]!` @#2r%(a%{ɏ^\v܎N Y�) oPx-4jPIVVL۰ qY*⒕j,c0Q:hK7&D#ȟ/w)pWC0麴JTLom*p͗*ataPy94iv;,6j rZjl)Ԍس޻ DYXcy2  LHW$,:W(yG:-` W0Ʋ`JBմ n@z`rBMCfZ˶h%;g�/OD !,Zk>l P ~%^{ - .Pq[R_qa~L_s/ w�nG%W($\aIxG\#*!O9GúTԝVXFw(B$f+"ȮUFN !<pyh!ӏyn:~$[op {Jt:8 @=}k2Wf]WE~\#I"f5xiЅ# /i[ĵH 3QmWqn-ZUWK;~"D0T`/&|CyTJOZp<ko&Dx,֪}38 _| V͋Yk�`f0WkB 95XV37є: J?&qL6!pH 1O%&JdZR O?8h˾ `Ɠ<j<?#CBJ4<CHabsx‰:((u$8k4n'5z=ǏnP�~<>&{M?=|l@y0"~"%sD9i�6~}JT㣫GRbcPMV@(ԁS<?:s}q! z1s ABX^<b3�̡˴*Q0Fݟ-UyԞ[Kg~63s,Dg2)@0+=Vό9'[^ 2뽮3n-4j4,bk֮p >k 3Y蘉<ۛr_ Ḯ7me.vxCt cU|$+Ҍ 4u?`դ0Ti-ϓ>0 <\w!ئ�X%"*e 8Ӛi@\@A'`|M J0^4%Ѹc%JR?S.ϯ?ϯ?ϯ?ϯ?ϯ?ϯ?ϯ?ϯ?_?5\'| '<~ݕ7+y\P"ۨ)z рZAc$q;<oJQD5GKKBP1՝ ^:Lu*04RJu$7R�Ԥ}vw?9JG vQ$pYQF7c=3L8Ԟ("wnj1Q0Gj6ͭbC-*bgsmP?P'ڼ^yc/Qcf{zmar # P|x46QuT vyY*u�\1N6^ĝ!(r H XŽSBL&yDޜ("{ux34.bȠ.q䕷'}D}\<3_GCQ#ٛn#HC$Wv;8bE{ܖo 4^c|g#`}yfsS]MFm0??SY*Hw `pd#HbBǫ|񈶂NG Mє9dRKax啳=l'kHz=X kT?Qy' ,dΠ6HF}7t}qK"ضrc4v4Ϸ\hԌ%OW3 WxnH!# fpueF/{NB{`@ۭ>Xc:CbӲ-J(ٶ`7!X,Tڷ%w v}Y�l۞8s >md$vȻX4#c!5ܻMF,PBv&SVWX wQ*ri>ujGNB1|WU jzA' '0\~xv@0/pomԣ?*"�9eH AM..K$ 2fyYN%ic2pT!KyϦRn,RJP)C�V@PTDEYj qbQv{q B?9`\62ե>v,y P<~ķ>%ìuF^^FYHc P"3+Cng:-PMoX' !bugX)1 B]4e=Ή<9~}{ǂAB[q=1hXRCyPo nU8$wpqAHY :ocnJQKz|U%DD `8ErTd= ~K.F% [`  <vΉFjLMv)(�ZU#wd}`4Y<;<NK⯐[ykzcU= '[K8 W+WDǿ?,x@4Na2Puv|U4j֏|I4?Lg0D5z YDk| <,yvxܯ^WZ~E�U=nGuqp=.F vYQdg%: Lū#yR8eN'g"E}4"T8KR4=i LW: yz4>2bqgboْCA>b.3%(3KHAO jn%WjBn:.29A } 8ruZhv7PK L"mBa؍wV* UvC$ [?"_u󗣓 KE:ƸM׊ݳ|)i :ꨢU}?(Eu\eB8ƝS;3 dI$'0UnLpnW�ֿSYBiQXҐݿ)hhq\Ą~\}=YmC%尙s9j?k_-IiTq]dAYܞ*~ ]uMLm^~\8$Жp||$4Z R򒰖S,dfۊ*KkvIӡI;8ɧZۂpCeй2WN(\u)2VF7ʘ}ܫxEKkzl4d\+{{P㎂&d7a�&U=A)x;dΎ+mk 2PMIcr<MȌ Q-AR.a#;023JJ=.[kUXۻ0eP7|mUFaB"c[܂G~3P(u"u/DkkH}H,}Df2*~z8W:VzȭǵfP7:8y!W|sI^JÙIErc iAڡzZ$%s3p7}{AjRu&;  %eԾ sO+2&KCX:</Yeb eRu^W i"FXVF /7' D<3RJ Y.mwM TsxCtc#^@{AI7,NQӢ sGI F6azҋBY;1$hzSvWMzVEcy,Γ8]qז, fI`Ɩ[@ i%BJf\Hn-w|� ¼H U:D?MAhNVw>JΒce嬳AO(5XQ>#kgE :Prpl^b~:!zܽ:zo`P*j z[2Ũt԰jE(b3?(5 PC tbv+<x Iq丿f'kQ1MIѿR>k08s; [D6ia&G?dw/J`;d+ 'TKGX$]<DTK;$CV-d&AOp XPчCq@ϝʗWp?eWd`1q4$3{D2)ٓB!~)Daq:S1r! 6-AűW30= ]8+Z)3r<P<mre#etWU,@6ڃFkt^}Rꄑ@¤˞i{bo+( ^c;GJc.:uh u7^YE{I> Y{$O+�c9_#nc?u `%TD[J7u Ť\"6y䗚(_JٻcPh0"Iϳs1͑_KIM3)]'Z.p(JFQƨ_#\;l:TeG!<`ꅑqM!l[V#`wANC|z3\%(0/$Fۛ%ٲ1%U?ȲnU<z˽D9Ⱥ~r{r>^Ѫ-;BX5yL ucr+r׸ KkoPfDgAïЁź,Tck1meEC�萚+P q9&so p GW_`h*ayQ<uA%vIѫ~PpAmvВ"OBzpiKhޣ>] zVW "lw 8Ћ2&~Ѧ\SR!^p*0$;qϫͲ5Pރculq3rDBl#㌛.^wI^cz,YV_KS|Kÿͳ?6^ `7Լ1=*zǥɢa ~JZdYßA%A�L 5o=.^8:/X^@`> vXHrf EѪ=xzwP\RGU`Uи}د�ߤ57yr ǹ 8y=O@р߇7@\I ئ6�|Ѓn1VE@13r7v3oK_ZaN'76j'& u'Kƈeن$A~C嶢ՉWq*IX픯w瞟�<3l*^@‚[b!ͥUDl^mBH>9 g7Px!+Ե&m@4w.w J= (;#ar?|fB AΧ>kusq#' VpRllz+Qp컧PdjJg4QKume=ݲnh-osWɗ!=215pkC_]n=*7A{"bH.LA|@{HSCIB}Õ\%$yP Г2!4[炮}`f`fЎa F7<5K<1cz4.;A+OLŜ BҽVgzBkŐ"U*& !}lB3:Џv!ӏ{O 1B_#Tӯ8o-b%3<."_!%}6*ꏩ�\ZD+nG<yfN[ؾD~ɰQAZ~kɾ}Ŋo T.Xkv;k\ Nz 8iyrsQ D;Bs WX&^Ba陲'1c]&3ȂɗC 6JJrقQP2ŋ&L;ضQɃ$æXT-6-?r3z'2tXhxN]wzK9aE'we#=+!..rsqTk$}V6vzǃl:,�Fb^׼VjqzhArVC ^`� ˜Vg˔bՄ"]kW�5T Z?x3kt. 1nt_a.VvgZΡ{R gsZ>Sx.?X]yh3-,Eǘyi>2H+2̹ܺS(d<3 fX{ o\Mn@Wg4Z*CBWN:3h&O4h罭]c_\Z?%R:E UH3 MFnV{_iR_H "a$*簙 LVb מM]܂AW`)hX<A?5_~f C ?rYȳ.!>/-X @fpg+B퓑<Xk%`E>**ZeN|dVͲqYD^aQD3ϜTGga೵Y'=!. 8k5]VL͊}öv A5]A߂EkY]Ƅ>MSh[eȠr+s%̵B 0K87._puƺ.<T;=Mv@>9 Įڳ>>EvgA*��N=Rc%lH*cˆnx!ܩ~PtTad߬Ph@�k3RaAjϏUb+݋~'#M f& keb}'\=c.ؕ,ﲂcE=Ij섘G,첱4�TB{I{jnFܭN^L0gY|zīP~v(;7R`Uzo,=l{ <fb$?`E<؍0@))v\푷z8<-�Y;ۃ)<-8x({$颳p- X qrS줂F̰jG`nZuXƳ(eWlPSja"L#1I 4([|G6jHd_ӪYF� kh� �ڽqhaFI0]#]"5q~+؄}x !K  GdDԊ�.B#lѷ[b-ގ[Ipz}FDc!\-aJ?**)-[J_?�o8e&`:Ġ]s7i$̬WD<\3A@EDKW n}/p]Gm L: Aq GfOq\ǝ  3~9}.br<Mmۅ(pyZCz?A&JkH=QUQ ȝ'¼w^ZzI+`%ЗG=)ئSOvO gz!elOvI[^م>e�^y‚1xBx^QP끅Ɗ N`$=Is@;~YQ6,wH۞ډv k5!vyB[=lՇla7q`5$̼N1usqݞ w~l }bwɔ &T|cβ]̄o+no (dHGb3az#~VZ Yf\Tۊ睉1nh"p70@ԧM   `ȎK\`?Ac⣆ |*FeP6BUP}Q^{]0cݏo?f#À|g!0QW ;э 5khH%B0v@D𶎇2)2J\a:P&+ʪ  +3 gX_@E'XC bQ B5%y ,%t::Ia z^YͲ..hj{S Ճ^Wb2 $yGw$[g=b N{~,,5gjvu<(|ֻ[)gYxyL53@�-a'YO e,|*A:O0 aW @ˎVcB[*`؞O]ќAY:QP{hVqK2Fb &7eƞ)"G<5oI[myS%ce32$0?64Czݪh l$+q�.,#Kqa`z4<ں<pX1: VruV/a3 &;$c=$}?=R~VmVE{<E* /4E7_v"PWn]h$4ޙRJ.ZȊ٥4Ѭ:A~E 2" ƴ!]HgIk3N*!wav0=Kj;1+ڮd=Ab'HA `Y$EBncp2Fgffqd'y:XfCE,H!%Hd +lt�'K-y=Z� Th5dXS(T{dV<VtɈDS*==O!FNO] > <7b8TXrY2QYB9ku Dͼ[B6Ј�E5R7'?]BLbPf%tgZA#m A ͍8S(W2e-gId _#f!uG)an*(,:(XhU@g9簙`ycU�T[w H_\^ yf�/K/@=$4,qQ$SYpZ#.҂QVI4./Ⱦ "a^"> -Qn-|L6[$`1]D&,5<KY\0`gflU"%EdG:HSqfI4H<@7$A. ͝j*De9]{V;J[(`XYzW"B#] !;BزBT#څlYG(%y&SaWC7k8Cll|$g !(!0" ^Yˆ]P1E_-2T{<RXH€ 0@U75[ˤAI; ^_JAlϖ Ly׊3hFbvڠ'[$DBLEĎy`8EHMQGb09QE%W4$E�nߐš�$ێ"rԝLVE%� F)dm  1TIP ۋ2MCg%Ubg/yI"E/UUJů)lGY^vT!t vE}ex2XАMӋ)Zo1_ .wB zt~HЗOiO ڷvCøܛxXfZV;dC*[!!ENd\YD }cd=!zG` ̻9HA ?�1 Bg/)$@m+Dm.'o<7ruJ);Yjg4)lBq,;-.Y" 5K?=|J ̠%:s16Bn{qX e뗶 h% 6q[c (I:+|#>y ~<Pfs ?{o,Kv\g><< 85ɤy].ULED>/{�C*vtl`[fA#ykT`?v!g1^f~ZJzT*b�v)UwgKST>Kc 2J<9چȅA[GD]v;W2);'\XQ9NfqW TK�GX;Zq# YYM<|xvu+~�!S? 7A0bO2&(V?SNVS狷s/^42:iɍp`�?K{ h.YLrĄSInΜ1J+t/H 8rgp{Iv eOx.*; o`�"( @~;`Tɤі�WD掇$Zpqtn:$BݰIIJVRo)6f{`wxXŚZo+%=8Q( ӜZF~B��T:$GSZ䖃*\1`C@@j(egyQ CISLOL?Q`z5[0ঀ+kakN.A|TIR?I9vhvV %Gwh1}"w2:mD ⌀/Q^&)%?�:@}N&ZS2~2-aY fW)| X-.Pq~K3C�z+{AERqp@ Z^JRMJ*z+)zۂȵ; PM :Ds^)4$ C)5mW-j=W<vMa3.r%%*4 ; %±.# "=u ?^D7g��d4H&AP*rʋV*I0 �tE0,a"Ծ J"'5m mz.41 @U(J4sA)=gĭ!K'<J{)ENz~'`)H`fw;TZL ]nA7'R ,f"�g29@Y �@<YwCݠBN0 XvO!!᭄XJ `I5B&3X鍃U )ɐk$( ` ;+6ZT+y.: +Fn9K*�43 Z2 yWnjP ݆p˫*u/5Cx_97B . s tkoo<EOZ% m~_>ރ4Gx/ʤ:Y7zR7yL8$?F p fWg)SY<.ëhBd5 NJ\ZKsK=6{;p||wPm ;Vr3Mr 唹"'D?v&B@ޭԍLZh^8Rrkl-v|L2ڎ0 lŖ@b5_xflϟ;IM9I4LPBpBP:#7?AdK-S3MFN0y*9لhF9@- RACXDf9?p*B'GS4- d:ӬqJ4;ou~ WwzE\r܍L !}MP@!Ki~Ortiٜ%[�t?v5 HrW>A9Dq0Dd #jH#>#}~!JRFv/o8l;J8 ЉtGN݉ ғdc:fͪR+q]w=6uP# .aIwf( Hr0c=ĹE,'$߭ 8y =ҔA4a$XJhI?jvwޏH<WqJIx}G|@fzaXMH:˵ {q-2&DUw pKE#x[k`m4z_!*3zt|8;tew JZlu]qη&|Np+j_X!Y�#u7 0@mS1#TRmGp&c->׮HKSr"˓Jڑ`Է@wfYQ +~�$H9lkD+^{F P-/ _pxԅfJ(HQ:hѣm޷'A K+֞d)(`/�j O3lОe G֚ଢKZhΊJ,@L XMpl|_xaSD)=a=O+h-}%k$P)>Mt mщ*FΡѼ{0򤪝9N4J\Bӡp*9!'=Z4 8Rdo\}G<P_wbäѷT:yʄ 8EC:TJ|,5]x$H v/) p5 >wZWܨ_Ծ*kF j9ZhN!hmg&xiF-+-ҔI/tǹ\oq0)1 l[BP =;. g'W1d?DcLz%"V  ؏H k B8T?,QXND[FRqƥ>gУz,?&@Reѓƌ^+)%$VԶv~Qh]:6E+Zd!r R` z:_p\AKVF[Ծ_whDDfA1o2SY?&X=޿vΣo7wMAj.!ZC W+PPZιK]$ u)\'I{#($T'ܤ@ ~=2"90&х9Cg>ǾCS nۻ7ܓ MnDGp�L\ $lc&! Iʉ?ǧ_iK BqZKh]d\nz)SF^ #LvB85QrdBrBi#mRD!{�JU4&vߋOGފ D eH=*{I@"ސZ.hV.0[my¬Dr({3XR ̜o�˸$fJ4OGb(ƨK 8 2w] VdI,=u$ fV}J|C H SH%/FVضvcxvl)xT ꎵBK}Vj}ܜƃ7p&�dgY~t#-D:lA"MH2G>.3 ZCjm0X4pS"gA>3[٢x~i͋Gj *JzuZIrN6MnyG(kG"86x"dE<oKT. ʡ@nr$!NAI(7Xq2Tx=z`ģ[#،1jwE$Tii 6eɍb@)?4ԮeGzYOub*Q%^{_c=w)y<~R"G;OȤ�;ةFzE7e i'�Zh{~(~q(jnzMEl1n v"~tu@>cV4/Uo Gw?]l$^yw-°QN_S/ U9a<IG&DL"N9C:}<? с}CQ;z:;@b�.)9̇gQ3#�l%n}ӡn}~Ns#)$;ixEk|.'y p+`@#FY HT_?AR¨j c.Nq[0IGSPG%be,k&'"(hgw,&re)tW!yKԎ_3 {,5q%,ö2WZND;ܕO *bG'DcvLy; CnI^>]b0ٲ%Yp [|{> So'a>~Onw҃wg.sжd s R#[R_ C]bɋP0iƒQ<j-SP1ݔ(:(]1nx^6<Nt^/ M"*CO�MTL^yaTn߀R/AJ;Hd//xG Y[UUtK&K>\${PIB@E~jޤg%WJ~ #D5H^P" n{0vr'4MY 2C"hsgtnЖ ,Y[uatIw+Fh#8JܓLbRs@o ?PUeCH<773/.}w2A#13iHW)B!p@b5 3Zt5+#mRd8ec'D|Nwa  0HBw1ahN9pg[RbwDdޙ O/MvvƬ6 >$B+YT@( ~jK{6e~�{_]g̈́p\3DT *$Z@ B"Ky) $Pd3hG9N9(ʦLrxGTi_آ>0�Z#@~|1鋗A[4>l@]394#aeƧ CQO-Ol~9CCĭ;' _ CTTwD �z`uD+}"3N`╤t2&Hׁ׻XS=NyA F<%WȦ|$wų  *�6YH(.ie&qU})</ l#Hd#L航 I`نa ȑ_㣁C_ԋRCisiѠ<Dzlm BC^7Lذ@YkZa{HR !qiQz3/x&5F%@(=Ii$wAS/9}g|/M�ԶX䁞~.Z .BcfVG xP!swЋe=u1/tQ- fX7(Mfka!�ⶔt4UlM � q<E4C� CoHk@3�CCr9N3!Xno%@'Jw16\V]k *K8d$:m:�V*'lX!y?V F!Q|.5:[kݭ�D�k *9Z{-[Rhp.G<8Ӏ$i}9.Ȧ�MMZ>fLN!8#)h9%|g`<fMEO,ݾ$tCyBqT+Ol"<8 %D/;fۙJ+ѻ{dPtJF2�Z*7!ڤPdycEV m#&<m|�^2,hWXqJ67"O6zaM9ݣ YDův;0!TBKՆA۲Q"z7YHe]Za !K Bva`6đ¥IM<ąT$ \q 53G~5EWdƷh:G5I}:l1S{QK^_<oO)٤hcG2j`3ȠpW'qJx_ZnIaH-"h~'}D3 p{Y.C|7K$<#n:ؖoA3t^IշfHlq(DLM欄w.xU)!M( ϐLj@ԧBPHSG 4@JN3F8 0.CύWJ787vM\D<…>3Z(zD/BFMh 8HN̊$P~*Ճ@[x:#h sXv>!p Upt%k$P#-r'gx~# 6* kbb ֓͘r͜C%le>NV4!tk֌'[TPKrEaT' 'aJ)b> mMzBOI?'-0e4FB y7mF2D#C^/Sx{<Xnï;cш+p8 QocDg "$t"yQhKJIq/B0$큌p֓TnۿLf ]66RMHTBT2IEts X8'L7*zK6Y0\� 4LwIkz'tNO ʅ2 �UwYA$-ZFw[0\odM<D/ފ4?_ڴ�F\N^xR׭q`]b619ɔ1<8S#fFd<$U-S2O8- tS3w4& w2"D0c3=CP͌@YNAV,hDv�=ݛ͈z" h`FW>NK ~<eNHp)3/ N4@[k.wԖxvJBAxwcC%ڃ a4g&dh1+LuDx"ZI̚ @!tDy]6*=R ӡMkrtn0~ W3(Mw*CFB �k%OU'SScJ=5E;yQ \B<rfwzBHzze/ E4AozY\@Yd|~z!+K?.'\k;\.6zFo${+tA#俅K> aQ8�a2 5Ԉ̔FfOɼXhU,tL75m2!TldD Rfϙf.qsA>deA@ XB)\^M�$f)[*6$lWR7GUC8aJyoPlބ�*MA!>\:Ejcy aW٦_|O90h( |_AOP,kT6'f?�7-XOq۹з)bGO2q=7izhg*Z~b@u c=.] uGwXiuM#;PnDx.~d" Bw ? d=$(dj>wa!l#?6;>A:V3 ;OFhZ4 ̕ ejw0!:nFWE<tVoEwv[@I TK \ _XK SmL[y8?S9B. c=%ZaH>[l`gQ}aq,z D{= I̖ +C-œ;6HA4Jʋ@6AfZbxHZМZP4U3"uSquB.\w K;\kdZySH>At[&O3݊JoϒZ(ꔞG _8NG4B FÊ\ 'X݉I'bFDVx_>s\?ןs\?ןs\?ןs\?ןz׿?糊5݃v=k "[M(h;;?IjBցszi߃* :V{cdY*`3E+3ms8h ϊ0_a8A]=Cƒ:rf?|X,< ~]}=}h;fk.hI==zTPJ&vvzC,L/z@;%(IDbgoV-NM]#@{[񖬳~mFi4v<J@:ʜ_(555y>b0l(7:[э|x=Pz##׳»m䙅KwZpxw3<X6h}{wfh3WT=o :pum/Bi>9=p1hpr;C,O>=PqKQRx>z&Y~n�&hh[uZt|3viIm7DgXRw "h a:2&TX4zebDϥ {L: MNwRU֦Z0'RVo`i5QCe(AުKI/F4,y.3X"`J)Llku=1Cݯ![M >c%;)wҍ֑*ŝ_:;t߉{ΐP|3pU_�%skФTNKk'oyAt'-u'2(. gr MH/DU;Y ^e_T+)G飪sCa7"dT57zɾ-ݶ^GP F4kt4}"w8}N1A+"cqt^*HEn<Xxm> %/bkQ�Sj\U߸>r <åKwsZhh|CxF&]|xEZM.\ꉏx5oB-Z>&:݀׬|+Rn*R(пMEHKFGy)ƙ_ƒ-QRc `!藱L۰9z`cNԪ+,BUhO7iʺ3VsƈNsۦHj/e=m;#NQ>˛~I+oYEU5ݼ;4|ܤ]gt:HEGeWar'=!oM_�p)5utq4-lRauf;W]Aޏ 36]qQk9x-8d2hڵ;)І>8*.sAa*!8b6J&%GWP A䤷kƹ*M<$gK7 11ySnmծl5jCvV75F$d-.=q`'J BG[{N˰ރ_]MNۧ|-�+dͨ&1?)<]OԋlS2Ř/m[!I/-IMa~P9SBG*IovI%U8† Z:ɸx5<JUo<Y ĢsaiOr9ֹst{4Ȅa' McO`^|K8S:iIE#jmyn KT7+7t8WK4^;jGsa\^aov_'8( tRgs`[\_-mXԟΰ"j \|IBwfPd6%d5t 7H=ށ2MAR&YKFN5QI6S5yHZa۾=ك,Z)@KM(N|i Ě5SE(TvQ49܉7Pn8}Џ=@<N滌jt쐲z0NE9%wB/&Ub?ãI_Rb4냜tCRq? 1z"M[zO1ۯhjN {A/CAKKca 1G);)tNcsFھ}X>=��nfT];? Z:Oogo'A߹I `>a=b Zvi>0Ӑ.Z_!Jےaٟ,تw9;c0C#fP m|�ڕJh":.sw666;<v^T7Q6atQM2/Cy5bmH{HS^RUPMo$.qQqsU"=ΠxӉ8*鸊2AqGK%BAn4K#AcMَ;qܕ9  Χ?dTwKg$v"Ƴ3_')Hټkŗ_PZx"$F#La3;KF.=ڣ1b]h!PMqڢoāȍL)"]Sr'LcPd-=ᡍGCA"Г/m%BrӍh "ނf/o>ɀe\\ihssFщR5M0k-R+t2`9xf+:{&~$|yh]3yD{}g4^<K dUYoA&D9H#_ؚvK}I#bzW?.|Qw)WPlR;E;t:t9>75C{<5Ms/DO~Y&LQo)EC 8ޖteLd5&C'm.=ɾw}ʜ& : 30y?8ɖ/N%k}rIdQdƁ(ѐlr#lAl._L*dEc(S:QzؙȨmL;`כB&.!Ƣ98'BF3xG_AԄTHBQ62|}Tck�lxcLو+rɭLԍ_-tx{Q&;/|Μr4yoGSw 3,FܛVI><֟!&7J~&Iޗ/Hv?rVKف}_iD3g?;"S!¦%j�Vou Έ з Zl*a|~h]^`WE(*zԯǃNnO p\b�.Lpm)Kh(A!Ädݿ8Pb){/VԹM~LNy<9/r [DT< … l9k=�nHnZ\#z}iq%ՙԅw$=n4AeE ]n|`t mnwIe6~&&Uʑ؄,; zF4+w(Ǿl/n"_ \P\;++(k-K)7Jn j<]}xT.-woD}=Tw% 舚BhssVћF\#<a|t;p7OO0 䅯C)<kȶ `A@EW5(Mi*4,Ir]i'"88~YBPr-Gb!A(Mx78=$}R7gD`*[f6O?�h&ODF#' !~4'8&sf۴W i!m94JC>#-|v f#u{)/F5-#%wgNNQO臞]^bAjO⫯wsǶ@;WO]%-7{xܫ߀hiѶJrHoo3pA7 9R/J?�z@{CL?Z=o3MF},TQ?t>+6QBe=^{2>o4  OoYBs< U4AKZ%0cwGW@_N\B{|7A^DtO:qYi:`ύH�jJ@2;Cs%ʆd|>) �пl9'؛H'QWh< vZ2S!#/#|hLZ˿o(Mj{S!&RBx{=7nҢf{8G㺾 7w $4%}rd4Ǯ4$G)+hZ#۾6_]*S((g*4ď=ې2`g)8 `h)о[[!Mor#U[wj#uz'|S-P� Je� 9~8:[&鎇+sIu:YHpI4b'5tomobgP'}h+Hǚ snQhR%_0Jzt)-9IxﷇG.KFliǦKsljBz{'w\SC=@j))]$ndZj+Bf|($ 06]}<M o}c=}XiW/y:qnZnwzlP'� tR)nԵ3SnY($.UPnP睞IӓEfuFV:+4@j]D-�6(KoyUM3^oRm='ғ_ 6رuK1eh1\q]xK?p .s@잫W鞖AMq WFX={u U<+`_>@/2CS;h>m⽥Oi ƪJ<Qq2ܧ0\r@M:2 8j4 (o*Kz(#ޑTF:fBG]SuPCf\?ןs\?ןs\?ןs\?ןs\Zua{o?S> {ٯvjf+W]cA2&>RKs#iT/h?R,4DoP\yBJS΀__BwXF"=5`R,eg?\~5-A2rK]9(qGuk^7sQb=n?Ӷֶ 酅e8aB~#&_nAZ՛ ȇ 몓y*M]W-SoOqZ#&gͫ9m*t+MhwZ5k*n NZ:^jZbjL�'U*T3=9--Qj6nm|EnWGNkXD^}؛mE1YKUZ?,G fL3>VmRkjSsjU ~F+֗.ERޓ7]‚rQgeۥ_:4~ړ_[lzωm`(ѨYVb4ZI_ȰҐ^aW~hߠ-1^Ho1*S+p/Y)cZk¥c áܒ< ^j!A#ӃPR75^lKJ)?^p!n_'Dsr7uͦ\c~_ǥ}Fqj##vS#k?y_7f`*ήi� z5{ %IHY&x)ѐ٠4cŻ"�QQDžJ0(? b_VxC$*Zڢk B~}+EXsq`OBQhgRyNjzbp6}+{z74h&SHV-MNiI[81Y?8=VeGݴht�|>}Y pڠ,| ~/~ѯ͋WI,>#Ub/mMA> "OT^;]N}CW\'-<cK|.ΗG2|M"W֛f|K"udfȿ%JMuJ1O^o~:BOV֡D,6A4~BW# Ħ&5kr >/h m)W3}Q-CnA>o?�uוKO']M>_kNg;s|||||||||||||||||||||||||||||||||||||||||/Ow# <s\?ןs\?ןs\?ןs\?ןs*s\?ןs\?ןs\?ןs\?ןsuA{3:Skg}k)]iu{zXgY׫_yuo[a=Hk+u6gws }zZFL=):ֻV.Wi&ժ l{6;mVX[[woݫаcwoN^|>ΪuSCop4[s{o6xm1x7Z5_{on<ZKN/V?[R5JW|{hH?\췡Sj<ηXEG(ݥ/-}^Nz}Wzm-uxuM4lӭMxeQ-xk~[ 㖗z\z5muik׳:O 5}׷|iom̵m`x>Gۈ[ߵ,T+h^iҮk:߆^/}#jVyvn:l'VM;]6nU6oZ/5m̥Ue&IM62a/z_m_j^kk͵r~VFX:auXI\W:N)Wۈvi_%<"X;r9tkw$ɍ[ZY}uK}KT_t|} .峳 H&7uWǾ=ȇntaҴ?=n-֧Ϸw{ ז<SFtvfl~;mw_fNO0׾:֯:~]+GsYӴ+YkKX7ҜFOLju!l\STKim�=ŵ'b=+thRtmT6Io ]͔+3vS)] a[ EVdvKiA cnlXRˬ'ᥴ)&XR۔ZPMMKjK"T;2[7^ꝴ Syik46{M6$E?"b֟'.U KJ3j_?RB ɕ 3y|$Z[i6ȡJL.ݎЩvjm| IViы,{PIFʹI=*Gg^3(wtP{ia>u⼚/L$DJU(햠Nܺr7P1@$a,T Ss5tk&؆Bqf®?ؤs Rwzi:!+ L&nC9ݤ!u[%̷jߒٖofH ɏ|ֲ̘k@2�ޣe7KXv bmgis2[SIJ ZE\^JGW'v^^_,Vlb0bKwH?&RMn Ѻ]SdʪF ^-")v[]MΉC"ZGQmDG^SBcM=dvV{$Ntly-KuO/6YZiOYhb)it&ŷFdyi/j?MX9d^ #qH~~VZGM,= 1$7du/trd%%S@~M�+UUpo3SɄw~Jek}-$Mv}z(6wГ LJ;@ajL TRqβ퇙zS͟+9|yGc^KIe/34"à'/]ԣi!IVyպ'JZ9M!kN2Z&sdva"ȘӐ(̈́\ R)$y㺕~S&o1)Byvq$Eg#oú넕óz=.a*}>>A{舽XI9̬e_WxwIdt>|D#AOdl},٣mNLFoteecCXc)=hکR#v'Kv68ax '6&|d[|En䉜fyBgsN6YF8VFVe^s.v4[+[ {`#ڈj aN[{Z[Wb5dI9ش8紛-{GAE{H fgǥ F䜬kf#m[4_qJGI^|i=�NvlKV!,!'tF&!NTZ%j&<[*#aY;R򍎯}Gp ڀ2(&I߿$]7@-Se%#'u9E>4LNj�tO!̛U< [IKi<K!ɪjs^nt;IR HH؈Tϰ�#'Vy\%ğ&oKat X`nmt7x]NFKK @/UԱaK<K@A޳PU!H&U_ܔ!%冧6•E%!ِz :qC9Iq ,[u'NRj՜%a)M,(.'lXurȋ;axf:W#yd epfɟ D4EݷX&}ce_pJeҪKRuzүv,fa6>|KrBs5fNy4sNArιVIz0B[1h)Yy#lpHMkƎFtaŪ0D,c?7/";}cպJ<;dlAK!'m֜Ȇ^o¼wӎz6%�/MF::ɧF3"hWj B:6o$a-r4މP6gCǞ|!$^x 7$+A5"zkpLϼ0 b&ͳ8UZ,Nl<KИ;f9$^ 46bm>ai3QL[ㄿt!dfGˇ˙9�l -d^ED%R%! d_=-EPJ!L+ #|?{G鐊HR(ɗբ~+ MpA]LxZHMuHK1KqKw{=ݩɤF2 $8A/tDuox8$ri!d4A(\;2U"hjؒW'(i\`FYĹt ̶;Ԩoclj $H$toa2~ O #Qum�@S :vl3KɒNGER.5zؖbW_l-6k=T+~s;h#pNWpQőZyDYWg3A.3}dŢ#d *MGP دɐ19ٺMP<V %*'H$ұ](rxuu;2""~YX_IJ_C7F)WLdӵ$$FN.II{S$)o\~Yz/s+v4,Փ}' �oYk _ӮЄ^)~5V9$ <"fݵ!3-EGg?Sf¤6p?ّ/q_I]hj΁L{;PIE"W,:"Tz4dHӼDα $0*M;tV:6֔*%\ WnS*=z A _ B�oSM_k I6252bAw,;gӏF`_`zUR5-Lo҇^gdI4fL&0 {�lח,&-vso)XB )gl16I Q"<tm# @2O6#Ƌg#l5*eu!cv6n:QZ}V26r+!.�Ε 8w'L1S:~rw+z^ [ы$X1& T&=�fgJ.$cd PkpCdKV�[&NTk2A#"-{{ 7Kl&z#{h&`d I1@N#.9& %bg{Î*r`toH|AgE`}-IH@ tzvCiD! s´`XK5қyʰx xtȎ}{,:g=|1߆[FHJKSV+G-pRrp!1"@3K"9{iGgEG +H-M+]9$e�ۄ0B)%'C�EzwUDʔvC*8C[vxMnt@2 U� ҆%%#r"5P*k̗ƽ N:"Qu FⵈkK:hGB g>ߢu"摆bKxoV,QIہJG`u{�`}H"h$v5@R~P3(SUqҗ&0rm JBAhj 8&mө@4kdK<!Xl{=?IHN|]>z(ʝ؃z-m3V`�2 cGA# {Jpe^_<)3\0H ,!%;{̭GP|њiny$^जbcтn2:R馝{C.- {cQIК;ۻ+,96<} iC~AȶZ߈7^ۇVK"5U( Z?+7OOPSz :hIKB̒53"^ށ$h.F' r{iP@a|6:B^Խ4SRW8(0d0�~LX}M{I٧o^5drPîСz!H{@՝~`jpZRz1U$1$>ӽP�K}3(a2 )?K!n "}iҔJ,+G"/ۚ0Ы#.!'`jr m'ĥinf]�l1|d{!2GԈT%#=4c*<h@XmoxH q�LU=$nОK dV P ׾ih(l#t$4�XM$`W>9*J",ߛ"uB8+a)Y/5?yRrXU>lCv"}FėAH<J�>سnG`35/ltIjT++ }\_Zf8, #cvt#/) a+Lqk[SO'̇:J@4-IҲӷk5Y=QAA #^r9"#e\-@X/`iuԀ4ҹH&_*P'M>R"-XQwQ{}Dl:PR >>w tJo8^Y?/:V@ōz^K�*}FVԂ)+N4">c--,CZI?BZڵjgam]BH0eR8pT'$"%�|lM: z&Ul}q7kPdE}Ḑώ[ r$#Re21&}[X[uy'^-}&JLS'FȕDIH nSR ^ڽP# \~2=:OqmЛKvLC!ҐAWeoU%>}HbJ+/ɲ9-tR`JhI"L]JQ-zS Q#}bJgk!VIX=l YszրG$keDQ[O/?S9P&P/ҷ ѭ]6t,+X[ Y>c/JH1n(? %4 ,2#@aHxK/ו & TY x`<[{963`)Wоv{e[^۽>"eN8eu.QVNl:sCN+ʹ96VAFz^PL UFv`~A�Jq/5UzgJ2~ƉFoQؼ@uuGd lr>[]lY3uDu$,[ @ztrk-Ju[,]Jx;5eKSI"1rhL,`:(~U*q"\"e-&a]V$ pJ)/5Tq([_>[/5Hf3K(OD[J=Ņ(pxuw7͚=# ݱ46ñg7[eg93fjd8$7wމ:|,@*cwdd|5솆,Ƥ[&E;� k_Tv :dq|n?SiMZIvD@u�Is!*Z Љ? Br pj ܉t(,Qp^hUIPzF >ә:`0)={crsS1+)jD dGې\Yy\E?x t@m0?<xڞ/ܹ6r0O/Pwu |CGG4)‡$5IJa< 2{/qm[( dȉra ͫYkܟ+zQ/Fξ,,1k'A+2Ҵ;PXGRU{'Y P>[0  gUITSd/JX>Iv00|D+n\IRx)!h{al 2ќ!$M&?ļAY@oɭNI?WH, J>bIߢa3m\%P8v?<'^{Ŗ+[&n=g(B? ry§GÇ.L=Dֈ_�\-՘j(--k&%P/;k1%#jecyP � ;Eԇv$E(xQKC _TI_v0n}�ԇbٴD9@C!A_yC[7S; cKRDgD�qH p#0:dgI 5l)*.<Ja~8s?[Uҭ$0bPv=Q'fRʚ: H*S"qE,O= ?qs[i,kH-u4I=y1Ėʫ$AC'JQߍ\ 8V D#]oNu _"ކZr@"P߇HJ0XCH<B{WBqc?0PVXr`HH @TƧ8K9УHfm`F.-]z{4~StҼ<XŗȃtL^: 9q@@ (@YOp0qp/,D?W"L]СqIB"HTAC>QVdLq `@ύjFʅvDIS6R>1^IRP HҨ0mlBpNPUc+ ƭ./',¥C#]" ,r#)Da/UN2SMSHHBwם@Xۅ.C�1BY'jw@ dvga,'TC;592۱zǵ9 #zW/s}Y<'ǶE,d&;h$%@"YZŬAM ,(Hּ>ڭF΍PʼWڊ좀2N3*�HajyJyǹ^_ZiJlqjzLPb; ;cW-Ql'q4 Г)�Ȇ4Ųhc Szp{87bSAK{XCk`n |<1Ⅲr A؁١Gm @ѐwj;BH4 <%PnGʽkj8!=+YM c S%*B}%ظ5pvoA SO8pℽ)m)L�K8*tSIx eoJ_Tkz>9Čf"r#VfOΗ\S 4 N;55­ %+$ ,NC [U+7eF`\�bS6٤>"\fvD&DMc`+$Uٞ(5h5+L 'Dn5WkN lG)5F0`S0s=DdfAgx{ p$Vs�_4aLM,q@˩5v'66aK9 nKu㲣Qzh)f⠁ly�ՠʵ!&oCPb0ѤzM06#-+XK;2%n[)D-NjnT"05؟a6E"m8[V@94ĩفz!g(B%dd *'Ud`FkOUfu/B_hHXjsM& \{IȥoJK\/AkR�Mli?QgBE:p#p{Wj9 e2y5gh#3[XFP3uRikC(P)r< @9kvq0P6Ƈ`Z%Y39o*R'H>L q%D;Q l'sVv6qU" `ekcvZ'F\ȣKɱ}4-hB㸃$NY*FLcPl 6>&DZ[h tjKmT"YLA .+}"='3E|wcWl%E:�"(( e("/>t`/3P{-�mO*�CPW%͔v/+G:D}t,t 6Bd60>uj9LL= H3矗+kQN"U돻EPsڦCj%΄TFxL^hƗ򞇝P4D0[ƭc4Tk9gHH R�{nH!s)2R!WWvٌ#8q 4$;)`=&χtg[-zƇbj-HE%4ŹԔoA+Nm!y1U tVTD]\eb/FyA硷y Bk s<d$@P`O.h1';cU]넦Bw;a zջXnF5'17A<=̌^Iɀ@' E2 "ȹ1CQ ftT!@Y*OFHNPGPdb$ز79@pB%J�(dzZF(Ra\b`5,u;-;R;(q˂#ipr2FgI8 I_;Hdb &)NM͂DܤX~҂ 7O ?(w|Cm5=v6�ب+=ϊLj {}2WĢln#жoesf#�Vm 2d è nXH¯g'N)DtJH!ʊ`,;>D.Hg#j8|;Mj^G.Cm~bLJ84P0H j%52BkNtŋY>*ch0ǦU܌� /<Fel�L$Γ+9ī9tk _K!~Fq#rVBz,e=bID =3΃ -GX~N[ щhPH�x+GXn:&ۯ`@@+mۘW%\u v/3Գ] pGvгn<YüǺsޯ{I/h3 91r30&.M1"_ Kc96kzz=l ^} ,]8x osK[BaZ҅ھG u(p (;M�x+`m[yG97 bedT.^сeQؽJz/U`I^!' )>ߡ$ufP>Hkcu'z/ʠ<X8%W^LhbȽl,.439joE\)RkN!nO` /RKأ:7 maK'^E'7sxE[xe;!bzxK/(MPq.([5`տs##>`.rWB8ؒ0&%K%X5JِE@,' 9o|rFʰnY$5p6.`.(;m�[uέBuj_"r"bo ӟ4R f{)0"b@& ^>B1&\!nLڼMzE'ث~\ iid^_vb]of,Ab# Q5v8[8eC$Щ^5qh1Tk9+}L8c4d;Vkڳ'�nx1=/opx:5*?_6UQ֢xb<oPdXV{>Q$##�OyҝqZՔ8|=3@/Q. 4#=JO"ÒmJV P&ê`%I˴SA j*D7QRK=r., `t*({뉅˩Í*NI) BΊ�xf-g>Iذj0/ VPp#Q *mu*jQ<0ΓfWyJH83{:I'T p|@lE7Rk s $x3-sт)cu)҉<{ͧDsҢpn ?DPզ l`șVF20S5 ّpZM(7*$DŽnm p2IV7<  ~hFPA/qWQSRb7mB(`p;!8+qӨjXB1@,GdS*Cm(лUh@TP"=Z@.C�bA9-Eᚊ,V>&G"F(XI%lXL;ZwfnIO8abe,ʑ+O;",6 /cEf"(FPRRhxSa0%3*{_p64]&^(!D瓒($V,- nhP|V԰y"E|YLO3-6MtG,t$|RQCAޠK̸ )eIIh1J;P -$P&ӇHQ+7! #=!C ٞ#/4BŶUOj>A05B xM{ܾ%VN['6QMO^:pȹtLi$Bhl0J:  8KhJ^TT; rCR*JjB D2vmZ=#gpҨfwf=QZ x<;BE0Cz@5u6/�4DwLOZ!~"+Hv ݙF%IKwF[}3-Ԋ-QDg5?M:QM緂,ЪӲM.AA.Pvx6͖y(śꦂ*Buߑ~/X&a3P%JCDIDS5RpN\gʦm~PE~гAOTW&饞M/)tH63BY0;&'Ex"[G]Ug2pjqB1BM*R3%)A\ycdtEªP< h;M"<3Wt-`< '8|Ȩj3F XyԿEcçq"tQ4"fxP*pg Xg-DæHg9ЖO vdF{x-wW!JG@9Rz`!Z\*?"\:rt7娑y#e+gґuE'Z%Jo/Z[A$e-VjyMtk P5xpb8p<'LHQtg]eَ'Rؼ_x hY��2kF- s8*D6V\+3bƜ%i\,0#HQL?HJ`p'wK�$+x Ib]ұ$4m!"`9DXs;:G%KĹdG[5q@1ZHxB< +_34G[yzQ/D\@g0vl%kަthYuXxS.+d~lwN[�R9:鱏ce8_-Ywtr%jٵ0.j/ ܰY0<\m9HJ>C J?P K3ĵ+_70Y# x15,c@MV {'RS2HM ^_gNѰQ6e+,'o'uiP՟b0QDNօKl<$K`oV%g^2'Q` tJKkrB;Tl6[d &0#%x-<Xī&A}u@qQ[*2(AZQj4_D=A.Scll`HH/f;})v_FMI <ӖV{Ly,52Ĥ�$ndS Ƴ2L*(^\$ $,BeMLx !hUa.?\Y'5%Y͉QĊ$ǂ�/uYwSBhKq'Xǂ1ӏW |yB@-!QC \45{,d[;RVn&;xC[`F1#O,ڈu/lNQ7]p"Y`Х8t>wM$4u1{<hT 2IEN6 Xn*>S46(۱ rSJ.&ghw BT-68Xa*H~: "=`q-0G ';tTc+ؒ udM5T]TFqɚ=lI2RK[SR =֛/i؃򾑉^d _ NԵsR6-=أ8@z;9 03*-4o`a)`!\h>5" -v>WTΫfLtHĖ>؟߇xJ;K HBn Ӎ kKV8SqoA&^D+(TÁ-Þuq^jn)蘋 <hM 9fTaK/!ĥZOA2&:x|BKl#6k34)b$Ey.8"59PFӓئHW򠉒gΐfb/d\2{WKJƣ9`kuGN_F Z"}kế$! LJ|_Tz䖼%kuZoɝɴ*/Gcj@ak5'gR$>Ф_lkn; H~PU6 0;huqR9а &o,AP|fqɸAI%<(ZK%uSǍzj\YYƍ>Y,p%@xkFL/%uOHsg 15Yu+]E٣"EMtx[=FRYŰSTnA�02cpx)y!v?%pgl} ^!H= <p.A)𛨇)_:D=:S :^@W8lV弧zT*cUt:gڃ�`Y t]BObS4&+ ^)~ic!(:)A8x~a%DxȢH&޻ 7Fuڃ!̛%|9 {BRn6O.S`>@G2*vA2>MQPq%7vPݺSPQ$%Wcǐwy $o5wp'u!B2 O39KDyB1ͯ\f՛`'|JRzFoq0"ya/-X϶20>>u{bLW[W?3*莔8B D)رduH D&0=#1Ӫa9Xpv:{E3 QYD18tf림t.L"n#$]L1]0s\7-{(\őۃ3(rx LÁ ) N"BM cjxDђ2C*~LfIu&ǖr1l/-C* _vbUtń/QE}UPLNG/x0v +`PBBcho^kF ?w{`Poú܋3p 4lYQޘMPly?TfՄ p:heTLi 1݈4V׹9@-o閈4D,O؀Uh&(}pl`Gh Mɲ(0'  ,\Oж!V" z=pbs�XHk� S#1#e8�Y'oRf߳q8Z$wy)7GA2 ' ּ3\HP)PIXI"g9ITC[&F%b֛\˦]д{[?/L108Z2Hl5Je&IOUVIo}u0)Н(*[|a-'ZwA̻ ,&>$׆ߗ3�/]dcru",<0cZ䳢I2L7Ogr'IÄ|6/.bGSK:P8 zM6SV-=n1*.-m@\½z{[`eWrT׫I_7U*e\QxW`\7.-TL Nq'A$#Ox]=@=f,RI(yS ʶŎ5|\A sp6 (x{5\(Xw tn@ aP.ےXJJVh{ZV<HYə 4^q0|v v3QmF>V=QnDCY8*H|!l󑉖d/fUnFфTÍ^uxrl&b< 8wAN)nQNRvc0\iU~p$T~wv{.l Lcl"G+L OrobqPr$SkPnx.Q:rϞ o.U*D9dK!�Zi\<aD^y qᡃJ7 6rw$7ӝ$N<%<ÑkI?. $ y쒼HӨJLQ>R&?Fd dC4ǞkvJNq6)GN-_Ł;Y_,ꏲm iN(K[]XI 80m >PRN@Bz~3J=@aF  ? pB%7up* UB< %ʤK:vɸN:e*<0As%_0XV^cRe{\ӄ!*E:4{Yl4I fbd\֣ZǭN@!T% 65 l󳛼1]E\R Y &HHmxl4|wO쒏筩 B<0H7}WTAvAѦIb'dU<8gN4pFs7z��KvX/yA܈ɪ:40_zW2 |d<{~1ɮOG#,s\*Fn%8dhB>S~[m�P[Feǯ`8FtcbߧԷЋZ47oؙ7dX߽r4!&p `vwoC#"#''cݐw ,O!ssaȹf xV\"4g�#j~6xOmԔ xDOHm"YK?C [s- 2FrT܆K}j_0g4_2hœ:;}y)>&p6zt;>ȗڪ+oeC l%7Oos8EК Q8apAงliT̗x]gRaք7ۭ+? 1,{0g[)[ YMuxSV#cC_#V8ldх94D!~)i2$ aePmgL٩&+xFu ͵ dI0!L' EǞ$ZõXx ~nfG�ًI1˷%}=}'Ghn5T8;wQ .xgB>6[0<NB6=tOZfE;@''E9y]DХVԍ-qЭ7Kd +^\"SRv* X ܸsΒ`VJb^5Y" -�6UB|ΐxS|cK9 Jz˜2ˇC֜d{Tm>[0숉ɾ-!7#pFp9jp�Dpԝ) k�mbEӅ1 1`@^_M8Ii>KhvaCX,K%Z'΋ًj̀[lyO2"4@O+qѭ㯓:˒JӪ#O…A|B1fry@h,X:Mer()orPzE;o)hwk�ߘg# pcv;T|]eS}B[OmsAJ`H307^F:9'"j+(h`YIi_~C}dJkS:ln6R^"P@ 51;CLd6$vAi_Xɶ(f1OH-7% dLs|$f%ؾ*2(0L!&>b) ty*S(,m)Hl EpD{G;ܓZ $&vwiXh`ƾa ? ;b7*z2MM\uݸ*Αsaϩm*E[q_c Ul n d~7X;0ԅ  GXnu'P`g:c ؐn0Iy ER~Pz\Ht's8 P�' tژx_Tsa$PDwh2?M>%lMG> )gjp#r!U %,Z|j2&I)rF1EDh:6t~6|Z<6EJ]l `T [T&̦mמC' fo ă Hj?UU ^%es�A=NrA<),B ^6wؖM钇L~@Jl[0,_K+ݵ]Y+9hLI EҪر@'cSt䜴.j_wYX$ZC5Q<LFc)8ߡ#W�37'g'®f^Dr#XťØ͕O�Y$D'4E(IG}#$SU=LT|1M8A;W:֐oylh0�(ZaN:^S$IiF7"@ 7xpnv8¯4[E? 6PUf\%�ơj|ԥejCۮ]zefUvWK'dNIX:^<t <p=.%=#'qey1aRB`; L=d35'O7) 'Q8AILN53 f䓅E+deF8epQHR3̌G#Ǖ9}!mR\U{(P.TGp|iҼ}h�(7`'X&F||bD�r>e%ia -j]{z\&s@D Co MTQ6638*j;w " &-M #)H+b P4L4<Ni UU<#N`V5)G8%b=x,ʝa]঎w顒s0~xB"Fu0OP -6\/JqH(]E9Kt0#|4�\XvJ(gƳb -vM OCJ'H.jY9D QB}A/.:&)b[ܵ'bZNBX KYtb9p3"qy (p%>B+|G Sě0YX݂pnrT9i<T^Ҳo `5{)>]j8H �$l4Ŗ˘oG/d@b KUq`L(G�]>N_ǃY}NGBPTcyK>X"@%pP {JA6SSAZٱ0]o`$)Jп4Ӏ9G(7ёmg#Yz|h9Rjs<ѝqLwϓAau7I;�|!'R1xKQǾ#9RDXp24e,f8*y#C,pL!g$J񸸒į>3!4V%(;Y9|Uemp":[80+/=L$)PôQ(iPYd>CB!Me H`a7ci[(&^*SDĿMait6!j<;u�3I)6X+CyRk@0XA{'YO"Lh;´1S1ۉN>BCg8Ae_؇s 9tGR=y)!E}Lpà.崮]:Z f*l$& g&7|?G}}e}:a5\["s]#EBF3BW+,J*.eMQTCntkqIJy31țԜ.C|YYvR{[aEx9'L8=^4"Mrpc#n'Sq[|!l`H gǸ9@@_:>q>Ȝ= " t(yo~%? 龼=ԓ @/鳊tdzP'5-|bF뼊;!' ,I)�\2^y*.z"&-z@[SWFIǁt 1.sv[mL�peq$a~ 1gQ)sX+[4-mI{_ ZP F[4RS.GP^;`,Hjc 5<,MM4B3Ѵ; NA dU'3X~'] -6 qeg*XHE۾(>ETNydC֧XSƺ)2o)8!)gcǥm6+hP  0FSy]"epS1TM c#֚X9iqfQ@xbMׯ4=ĹHUGi%thfA ӌz`HL40zUdфIJ<<p$槚睿·LKq  0f88vn288 Ĺdhc6CTh~ ,8]7Wj%!M?CO$wJ~Q M<o2)GAu:`G_X7Uh͑8bK[p[Ȟ|(dP<  T7bW)Hh 5M ĸVp"gtS:u PFCs(D8٠H&GtdmC8e?;kÕG(jjQ!r+'fR.QPECRWEF ro?g4)�uXJtO)@#Hvs?CT -QRHkc;(Y6> �;Χ~l"SaGS>O=�AQ ݑFRLUw@x* 2t*Z0aΝgI!=U db'3TS9T:Xr>\V &%D^ bN4z>:" V7qה89flqJ2 8XE]@0bR]`٫b Y2SFb2@ܬjR$ܒWl:(P�Y^=({͇o yԂo.4KM$J@NM4Q)$qq=1;h'GBu+^Zsw] h'qA؉ƅ5|ep3oj0�w]DƠĥn%̗2mh'4'wB1`|@.nWJzW7 gtW-Jx-vv�߅ܗlCZؔ3>)X�Ą:Ehe/_=B#rta0sp{4h)q\(8[׎vnyGe;wc倕10nvpHԷi:C?OF*%�2,zd]"!yG"Ssnt] >S4;Sכk%]PB`a-JM/SJ|la66"Еq!daӿ"AB ]q;ӯs $ λ3{i*}$sM'%q͑HxP85h#9{gvW&i6؄a`cnW?N"֐Dj2=Ko7"oi_{8]}X CC 1j{3Ӷ+xolSqpb0\TrB]h5�tm)S.z qK|0!˓2O2޴>ᳮ% ڏ5òezK#F ʅw!?˿&Gÿ~lJ]v:\#2iF/*$_ QNTh9b=P+}aTZu:_ic p5Wl|8�;bK 1w7rROX:uy H{teN4թgfiwBć(}.#}̙i aR,uVLI{/|T jIʹd#͈z5"ފXX``MkwHLiE+wv Kn[@"B̅q\ Pvt|׉ Q!τ; QwD-DyDWj̊3.RiunZ<ç\owq#;0m2I|Kt`:y/a>}'ј%9qq>+ EFHq2xxzvHO7zeϺU a ZZJP-Yu8̴PՠLI3<TEJ#Py>^THic5|@=L$ϽhDÁ,DOPv^gKmX_xV[_',V\K]>%inG6u%d/nzuP_4YƪMM6SbQ-ρ]-t0CIIq2ǶcP&@|_[qBf3(CƭguJg:EKK~l${ȌsOM7 m!S%p#^S愘`ܳ itNN(BX9& X@;))qJN'MO }3#śR_bY3D˔%`JMKKч:W"˩e1ή+S 9#{`&4#?Ѱz RZQ˻]@1Z0F\0 8Q¤@bOi9vJ(06q9eݧv-lsbMIk=d* �l*\�<z$GES{TbHEh#\EJx զߩK:-Tm041jݮP|[c nQe GYg>aq5KM|< 8ry1[J ,&(=i4"goM(G-~c̮[-2fDS*fboA2=?7 S\'�lqѭbLCAW;QDf@Du 'L Ț*b{k挐3Wqu9b]r9|L#9 Iz_<~ux>lfp4NG?27"=My]'a|:dn\2+!L1~8$u&E+<{$!�r:1H,>Opj0-`('k|zU{ Xʧ)2mORa+�$o2 2YBa+f)V JWu>5Xq6  &К [ ~'ƾ`c u}ydW&DUL$3I#%Ӄ*h ~cGQ#tq#SwA 4Ԕ‹ߞDk/$%xtnȪ#yK[{&50p$`PEMvb|\?]˘v{Y!Jbms#'EMQeS﷍ts=<ậq!pDʣ) ,7½HUb ȉ5Rkm@{[>uK=9ʴ^W�n3pfr!h1}bؐ A,] ؄57jF$|]*CcaGREs짗7KO{}$KԄ0�jRM*lT_xGvrZ ;LF L_)!R-D^o= =6(m0�E!.L}qOQ=⸋ab L4WW[84dkXvDYDpճ.wyv`]S=3+E铂 rY, Dmc?"׸hp>І}} @Z lw0cI˄>O18%['Q><QSͩV Y3=xz;Z564Z\�<% Mj{f0uo WsuPٹf__h皟PMaGXTK7/,i^4U*w1 5]̈#ڒ-7Ξb.i(!m({dչ,2IV &PXbZ \]EFu!ZGnQ(\;͝aIJЁwjLuֱeZԼ.,D?D t[,xQ�+ԅxgu( OyuS.Y&R`eU0J]Vfj˧&%䊼)LΝ232Xh$>~NaX�2K.L"&}qAvٌo_KK@Ƴv*sl]QP_u|�Hi'qlT +BL /e=8 =8 9Ce=)xi tǕ˭n/w;9R/>t4`ޗQFuXL6Q>t[IETEziNM>ƥP71:l䧬q _`7U:hU; }$w81$2GzKG|}OK"c=ڻ?rI&F@+Eډ&u_8P@HD/zW*N@܉Rpޤ) i�3?Vj5>t h/Fz4*|(c*/�`^yn73s4%Y3oi%!{hH+PR<n'ՁoYT-,*"+h//A$9}ੱ5c2}.!t`Wռc?:?sHJU�F8"=9eķoэT_ä~q >M4ۿ 9dp"9]EPI%G-Ō|![DRUdj)sSoI.pkZ'/J�iGq0ݚo� 88LW %z1x ;YYVwRO?Q3?|e'V\ևRH48ٗ4GRH,m/ :R@0ǍQX\\ifA[<>II16yW^qқ\XqBn'N;'D\tb~ۇ <ީc� oW4]cVQ�(;yu8j`im qbqhxwGNGh~Q @QShrn܍`R1ohA 8E;"I@m!c KUAI ypcP_: s,qԛ.tj2`w BT3v k[rFNBf\HnlaiĢ!mƘs�hi@' uV"PL!2D8d߂N jI Ӱث�X<pq>qޫ%>>RӅAK^ܴ0J2x:J̫N+Yv5IG�ms[Lwr/k#:=LK(YTL�|{Bj{4䯦<P\iwޙ11ܚX [o&\=IȮLZsqȡ(s!뗖=ɈHm̗WY .h&ɥ,;P]H7pM((!3=ȖkK>Wɐ(S~9) <c'8p{]lͤ\TnEmS RSD5$͞HW=:9 8tLƳ;-g+ၘ:({j܄KnCNiÿ*7Nq'7>X@'I%늅ʋyP{^e^VqG_@xxm{xu&vŭfiܦgt]"ΘN,_ Je d+ 1ce|yn"`_3;l8[k?~ok)>_O_x=|?։ 7f?A+W�^?) JV⮟<C4;Ѿp+Ưm:e|iIނ`0A/nR M^1N}jM4zpy U4& '</,^{x<M{֥$"|$0 `y=/}='8EߋK{` . -hcוDNe"s?ZCj\ O=4kr=Xa"0$]Fks]rAk==xҖBg,Wg8JEO^w9UҪ4Pl쾕(uj[zh89zPTS66Lpѥ2ȀqNV<PT) |Xx2@y{ZAh5z36c,C*#Oؙ%qš{kbRgMuؑ􈵊񉙡(l /3}&Ʈh5sJ\Xv>n|&'e�1'ꂪ4NQBbJP703VE$y\p* |%Z#^r獵!;88&LgW&ųլƕtW$t? QŶ}rFZiX=!{(@Yag3Ǥ4KTuPjߏ$(.tXǑ`#w=,^ԕ8.&Gs(nZyכ,ﲏ =IY "|qWIBRf W^tB�~1#_؞jyKWFx~z17Q$Z2ũRTk$S]zxLD1^6qELñPבC<ÿ:箔s*&u7\*q/I rcq83p8xQrQy7ypM1vtwjqW"v ^55B4xe>"HnDfZ|=y$X_#91/Zy(T@.u?j<w5W|MiqbXP {u:YRc^Ƕ)ԄkbsQrѭ3n.VXp,FKQ@x=)VA3]!¤jKp3Y;`.kxd'- ffdkwW4~6FEEI7ԐÔn}J͊U<  ɿA= :U]f>M&L5cO<[FEnj&GGαϲFt|4y.snebGy:7b&x~ɱ();:HM<Sת ū$$'l)V-P |J恿$7fEF849 }Im[t?̌fn9y*n)$x{h0n$&UL܌dMgס[Wa؅aX;|ylo^i3.1bŒ2>[ȯ>b쟓˖ܭe# Pp;90BL%GoK7>Nlӣ 6z.0E19S1X!+T>cSЁY-Ȕ%53n9S{+Bduft|=Ajo&]%*Ǜxt^x +ӁA#xjbVsF8dBt.Uwl)_ M(Z]Q>GGHP�WtFx6O� ?g5VRs<^FBkKqbhD4t-t}mdb-Qr$"V:$m2^Z<|XB3^ vDSZK(}%|d{c }v̠휏 Gdx׆3d|n8q >7U9ɜ '>3Q '@/6C.zNwp*@ʼn=io7/,Cժ'W?MŸ׎Q6Co<z\h؞<>a<I(􅜴xxIt0Ul])` ``g>9Z%QLf%oh`1~3@u zSkm<z|ƲJhQugMo@"Fnz;]8]^vq>GXODJLT.*!6eRvDCh "̅]X]R>5 ~I$ wbb{\቉Hᶤw;}y",V/-Y3^𥌫avSqxW|NVj{ yջ*!>:μ lCuBn}4)f1FRV~8WU'ma&xZY+UlGkG:[v{Ga>!4ѓŪw5Ypǡu"p_& C0/ 6ƒx^~&McEϐ۶vyo/{<q/N q |S[' p\ ޘ=uָ|\Z 2eխyHHKc{)n֏MX\107EJ׼Kn>vNKht;nՋP7'E!9ow~MP^ۇ?PbkMe)v >fga&B.d( b3 y;K%*N(�N^R"pkǼ}"6po)絓i6}K7{cyT}n{GU{Փ+ي_ Av/ pZUR1) >hR_Peg ;tN⎚  ݴF\%W7 / ΙfK 2^&+Tэ+OpseGdBYY0f/QqO*6zۏo*G*N<ocx^oʝvNތcx~~/G<x}|s9_Wx7mEt6.]|{b-OOxY<#|TPlnr^/@N}bcۮ7SVqO- V9a )1!DL5Odv rLez@E﫲'AAZhN4 s@01wjd gpF!G E}|-Q7pURl(;ݳ4YPa~%9xE Q]ĤJ sSW-<W|YäBn w<9+43 ͮ_Ƹ펏70l 4m0ba֯[43BMBPG@'G M#g1Dkxq-I1'sz9e+?0&ڂ҂A!dXFAx !Vj0NK.g mM�#.!d4-e]nFco j\/{6꫔)L ' n]ꠠ,M0d<^no1D(v48{xa40VA]Hh/uw@Ye+lxaq|c P'\Xr%;ƼS POp޻ĆF>ς];ܢfy1a?4J;$\,cAq_a;tWeNj) k1f z<&iE`ÃEט\$+TDukK^r0CH ;%YN )ƏZ'iY _! vt| 1tE D5xbz}o".ZߛSD$qX˶?;yK+!Q  68?QFrF3Y vXZNҋ ha ;8N8| CUw(5-ѝUՇBm6A{4^(Y ?-Ѻ;v-*дH (?�C>y$N&l&͘>k "Gz\8"2FIѷ|g_No6NVlwV@ Te4 cc$v}Tomnl#^,;#Q?FK??(4[%֏ ~%d}X–ur<5[?Z$ 8Kys "TA$eUZ+ vH k@5ɤ1o8&eGΔF3f!{3q!瓙DGE\PFʭ k2Z?uOM?Ta Dv*0_P_S}`]-Cx>]hb;}1eЏDZ2<PO*& ھVkW[udGQ!~ɸUASǍN=顨pr�#H˓A2ɣ}&HU9j@֮řQ%gTѮ!:xtQ^Mᮗo&2Tia2ܕj) �7Stَ#KyoEt(`LD]eP{gַg:Jp*4-V6\M8$% ؄QDAB؈'R󺠹�D%-NFHQR4TLQښA_|ad@$m{tYy{GRIA|٘Yͺ%/TKlp3Ĕvg}cO&bՌD\l#Cz1jJE\'<7_ H^z"dA<U||qP>~;@)T츗xuR.ARb=\TεB%WB@((fWh34>OTtPR-зwsO�"t|8l\&"0E: ?TV}Rxᒦ\eG#4*xzR7 }?r@N$u ש; u4�Ʈ©\߱}阉;0v5ֲH/+E<>ih9Wo)&=4ߠtHj}%3d_q(|R2y7 ʐoiHY'"ځF+)'UYbmpsbkb 9&w@ivb3%HYnG(ŃMGkf ,J3A>OċF^cqx2<qvouhX$Э(l W p}vY䓏FAM5.'gu;,ͧwNi1W4ͿOԄÅa3ذk>^|(ib^b3ca2KҽCG}pٰI'_VmAX/{6;[ק]5 R50CGޫa}wOʇ؋i-)3^(![ى m|^Rk$>PcK}ڃt߱:m!o�4kudmC6I#w{=f/Fk‹֔(U!č.WN}#tƤmx)TH1+bAi^n.5 b6AY Hd/ <`U"=IJ\pRb,xװf^)P!C|,�I>$z_}r𐙄z.- ?ID2|IY,с8#aʫrFi֚A±}w=!@<#7bBxv˴alS5`[~GJC~aXZĀ aBTCy|Po@H^>j `;WX .J\b]μC ~%sfۛϵoS5q88>{X*Yo:ж72{`_lT1N @jg-P})Ai4 G8U}{K-=4,f706xG -ˊ5bGӴ1"C)e# .lo^H+q8LQףtpm@뛛B0(PD@q@x�0fX< (Ik|] l?ޑ_éfߣ.\o`Q1}^D0NkWCP蒄(ibDZڤ!+;iUrVrOs)]AqγP {tI�ih qGp^фg1ڧ$碽;<!*0fDp*qL&dv}ZʌXeƥ7g>_Iq4"M H eF;Gg5KY)y(? `ۻ'VCT�SyI"+9# :k86(\vXt, @vi'mH?ڑJQ=+NH|0�v0]syh_Q`r#wؓ`n%>=x!bE!+*%0..$漇6L؝ WceZ sU7F|`'ES_ İ![k-KW{[iBIfb-N.=Vr@q! 7R9gT ,+.Y + QUB5aI [J\ `=~Sy|ZeAЂ .Zl\39xu(WwQF/Q@ K8Lg@}V̄"9iN%ka0 Ա|:C|-#O2]NŒX" <1S$$o Yaa&TZG pCLk b?TQ+k`k-E6əY]=Nc#n$g0 v8+7rZc?niQ*^f@[aw1n=..ٕ\N.w#iR^:|!38o:Fz⛀%-Ɖ5hbLwHg4aL%cw.VEO̎өs1Dn5#)CDd^Y`'yo%չl`^xt' HS`s1mh|OyCp)lxHn0 ׅ4t :+;= oc2ox``I@\j r;ɻiP]"yX`ߴ)I^.O˜8HH1 @ܽ)?ş]ZH5N. mb^qF.Q|+{f Ŏ!`Ć|#Dg۷MaFo`WJ{^& 8pG@ax ; V2eC |`N2BA%lP衾g:8 :/78V.yˑgct!i솳u~U|jOѻhQg89 Eoh'I4T_@'/!D6X{ N'#߿/7Qh983"Ba:49]d&)%(ݢ[9A&)q!>3,d1( +ڹi zDn7p#ɛ-uȀDOmazۉ'}2&&2}D.PF@59-苋yrBPG3W,-~U}@#za]\ .fnw6v%Ze2Hn02A1f B~Or Ƥ*[8�Y%1@ꠉŒ(>6N�x_^¼Bhf"0R(Ql7a4U.bœr"1jX,,,^=SQE"U8aͦwj;5=Ebx/yQfhށ~sQo-sk-RTԇ}IVqbyp,D)mm=F8;HLd#T#Kė>vC-Yr>Xl[4ozݚ"oc-LeoߋO:rk~ >P4GRWXV2hQ\vxcz=y!$N[L[7ǛdPZSs!k\Jbǩ!wwߚ8TEJQCu#ENRtU-9SbJc]]/\V{$%� I3^h]֢{Ur2ٺJ +DelܢLPXSs ꇵ͈ @XMLs3LHA�bs`n=S&j:kye"wzC;<|pnP"fXVI~$[ƴ@v9)�Pv@ؑH 񂜉i~$/jNXt5�7$ �⯌F {Ky- 9 /<w ;m!u 6~'T7bFZvޯF#}/F=X81Ŗue0͙Mx+7]`bQBVkJ~w˨8^!kJ7^?=b!` ̞%+ "K)ۉ,7uQv3t.SYT:x *|ݚ+pڠ1@?NŔG\'|`m-8.} .84sݖnQI1frozcώ�wiJUjb{�*uɠyO6^Ҥv~ܙ>E8�Sև1-9nc23l39ahl3ȸ ؈q=�M2#.lN/�oݸ8/.}󕋞=v_W8Ƀa谥/Le-rX#IbKIjnR0w6k@ 0}ţkVIT p85DqxL1PVuE ghxf F3/<)at59$E<>F%𗺬gzr?Zj�Δr3<N+Yu"J~G>)H <ą8+__ E�n}.:Uc ,tX*8.i/r= ]fy{Q<Fbb|8 j?OcB �&'ͺIfhjiU׆|{e8Ah OX% q|*YS6z!cڀgknMJZmVxfF#&&<L'(\L|h AݒOnlЀ^·G˜'̙6E&҈g8 <;�8th!* �X).u[* Fwqgr$9Ac_pہI(/l7j8#֔O(3ؔœǍCxaO%wA4[,1IW,oCY8W�Bٝ*@<cΞȧA &Sd&_T:YÑ<C ŔN;Gw4'Yb*J0%'lBB#=ba]eyղO|b8�Dz,w 8сaAGGk kaᶿ"KuM!t`Xl2ˀ{jˑFs,JoNd꩑}s=юFF.9V,*xX #X 2Q@�7 M[d@_IᬰBYKR&rM,Wcm;!g{c Ɣp}ui6 ?l {$W*tx9,u 7ѐ &I,dKܤ9IW}?SÝ`Gu!#+Lq80+%DJQW`S|8]OnLw[.zˉ[E o3hs9fff[فHUbCI9aiz`R[m_"+dndy bPC|jIYH^_ lxrۓ",'m08+Dů-R&~C&.j#.JÍ}9&ЫSQ(_2Ew&j\"N93ߍ-*#kj49|AG@yO(ZoA!#�4s<%pA>bCbiufbu3z:*iQɱ^ 'v�&u)'J$b�؍#irdV97D z94tF6aPlأ+N8E 61+qH&vn) #/ _866]WۈMG ~^ ㊡je(#-hy-v[ NN<n%M\e]l4䢓і4oܠ4UIv^+Ddi3BSN *Y<hPAn].Cg.y0bG8#["N|&e�>IDMi|9@+MF5vY_xW ˍnflybyKYe{*C|x<fm!r3Eib?[<'^ T{蠉d'rJފBhV ]ji1n/$o|V*[ xTYYJ{N/L'J6 Wd& qP>aaóN'l#ATMP:g2p^ m #~gYH܉Vzڸ)6d!3;U%v<lo V&JIq9S,E0b `l$q!쎊ira:�ޟ k&eCqlq^Cx SJ'>Y_17S7%=-4:>):t&=KD;EAC"f*ǰf Ky4Fr̫ %Y.z6к7奭QSDڜDszz^?FQGko'.9ޣ}Qi\ͷ& 𠋝>7~'4= �IOeFrN+ǻ@YCt. 3N gHJ'k[џOt翇3xb8<0^4DJVRG MykbA|X'Mf^ׯ߻c[&3q2Y1xI*gN7�mZK#Q:\B}ɿsv8F}g -9N  D䐇3#J�L<fh{$A=xu&Xfqt*>8YR$\J'xW5�1(@7t7 ;ґ]/%uԫ~g) &>H;q5%x{I'p RV1sS SIPR8 H0=\iV9q>M^8|3AL#UA槈Y ?QR1mS6LűǬב%Mcj0A1DD~Hzq:6i*"oTuhpAF E \W�4| q!YPJ Z| $qZu^%BKSjqOK=8f:B~}CH:08aaM~:cvP'$3:}F€qZ'1i'8)J>' yD>}Rcx%Wر`d!gĉ5$6GYM\D=DX'0hf#˄r{?(vJ2xH×4`fd€b9o ~L8j1|WRh CLTJU<Guqn_ԆH =h.^lW -DWMIO&X96͛;5OˆCzϿVuݳ=K<\ a*�魯"LEx�EX&txfIgqCx20[7sms]֍z٤ЌIa6g C}s 0<0K=ꊉ3i3*{WqNgvɃ %aj:|ݚGY))=7sL1d~R1QPOaE<Uzq $εDjK�hIJ;X! # B2o4{56nռNp#`DׁîId8` 9 RIfTR;nJS:0 $$pCp)P<K􍝾FUj[ FBaU9*l>(c'~fesVl3x̄PȨ$.6D#;bRn5q)σ",Μ&̋<=a&ge>S(̓V�>D}@ jIZRĂvxxqaߌL <f:Б3Zl so+*pIʦ% i!xiv4έ?d:e8dAV]Cg ^vqTRӍ+Y|p@3fW?.W( ӡS?sehPjI5N([jbna}ΧGѢ\r&q +0. x(ЄfۤC::1ňAN `](NrusOGR O& .[->lI&< aj6hN4r=! �c`)* GRA�,�9oIZx%I[$#-OЯ$q\x<:*Ccp5G];WM4tK (O9b*=(@5-M^\2TzhlUIbMc#Drs2L: kO܁!hjh 8sqCOąߴhu<4ٟv�"׾ �#yВN!QN{lY0Y~x[_'Y,x I~ÝVl,&,/_n&ʅT],wc_&e/+CKR=x'>우eҿ*u$3%dfj5r<~GP[I]b*SfMbѨӁ'چ-uO"&]sw=}0Y?P"*LDnJ gz' ,Ay㒗&{ c_B$[9L∋S]'gۊ;@s.#BA &x<_:i.KGAB[wYN`+[ͅ"7(^PRCz"h +Į9X S#τ e� 7>mM/.lg+jQ1[|7C')m_u.m ^Ƕ(/ypgE#2؁e^h3Քf#>P2 ũ:ݥte]A1?TS^l Pftx4)7:e2hMdz y40ڧDb&O7tB'(i(W^@8M)ژ9]w& ▩ù$ ^xf/ �Ɖ`qn0l:)*#9(#K15pFCtZ?E|e9'/�*R '(%ߙ&n`ѥU^,8X Aw%pV.}D\++, uya[1sKqLAӬr/^X~Kt?B]<1!G ǐӦ/+y ,腌yO,rk!q%?h|+>}p{$F.EvqwlY"]sGH**aS~YqO KX79<[zL^D}2}RCS!@qq!qENu(Vuѽ$w)_>]Hǃq:έ<~zΎDR`$& đ*rj7/j& wՐ dSƖXIWyGNv=BwaE|~K#mK 82t(5 Ӑ17*$“W"=+ɐ&\k2R:HcyK<뮘>bPNS1G r"4 (U<a >!x9f&$9:e{X8Фٌ?Bf$wv`iJXHPo1.T垼rE~=ͦ;r,S*p2K⼼H8B߲i&,lxL�i|I`&ZR }CIw 6-*|E~ (Klh!~ڱ`9S2Ȕ*?`N9`({$)`J| N1sx&畼&;}7o%e>l]2/8Z> Y f l+e,^*LX_Q5tEЋ%|/uZ:JO#E8GrDAn:A:A&n= �5&..<u `�lte9 ?.@2.:K-Rk=] ^1SGlp8zn1  /uyavi`U}'`:RoYĢy'-*!c9f&k[A;Tzr [Xwe%!s<lfr\MdC. δVXxwԷ&*1m:%/igU1ܴ"|MlTdzTHJg<=})24<!54+8> ƢP/ąZ Ġ_wC8~k& q~l7K%94{%\Cofc '"LLD%$2\n>< h^-Y}PT ,# WΗ7Pj-$bkZs*o_A�CUbz֊bDGUp+�XlW,4RV(~Y6 Ԋø{yI邼TZ81 a洉Th TCCN8230F ޕTA65_euҫlDkqqREzJZz7s9|ce9cŒAƓfDiHdX4/_%`0In+q%ۂy+@QaM>#3 J CziEFJ@@zST*n2c{H젋[,9CG2>F6-D {.!y}0EwSLT[tXGeW9Өls t;?҇k+Q$v-k(;EӠ'-;X &wNhJ| hab[7߄0e=`vp`ЩQ6͕�FB,I MXAɀeӗCfQCT*LX zK\#ce|hlEXoV% �`WEn'3LepkR λ9jRf,09`m  :&LPV_ E!1MTRYNƌԓ�p%Cl[E"�pqZ/|2?uf1GPG. 97gCnRXP~PD6�J�\&I%Q �BvR1n fKrjL8 vpN[d6 W~#/iMWB.N/veֆ{4nT^Q2E?~`5Ɇ:@Vʞ �Wj0J#.Qo|UfPG 5'lK-%RpU e`!žAĄE�] P�H fzy43 Qr$< 4 *Z4rp$R5+ 3`NMi^k`ini6!/))LM>-' 7g;=DM7e4U~yVԜmXs .#H|aZfTۢ {JjYHU`څtdL}m' MI"C&2UC H5]I]5ۤ y?ͿP?_oLs?s?s?s?s?s?s?s?sT+|ו<_OosNRvJnC[0W(q!kVz ѪOj43_HyaAa^EϷI<cJՖt@BWfoG*!f^(Q\l!cچ 2a#| Ԟ\<.닻kI+tc3[.v]3яwZ ׋(jJ62# h4&b5K^&?mg?Jbνo߉gag|Ѥju.1"2.0-hѧ` X1Ď4% ?)wwZ#|=&v�g " /il> Ex90Jk`d(} @]VְI) +aʍH2 Fngkg2ȿ';@3VufpI�9X_wEb@5sXv <ܵ":Ap&<<DeHB/g`|%. SL+ "~F* $菋>Яyi(H5,�iym5Zo_kF;UPyG0|Y?cɨ ƙ@s&NOY:L�_܌Cs�X[3mh[46׫,52)^_ : V9;s,hhpv�&ǧ--?L,R 0/ڞ ;wmtgkaV b̯ c'@ ļ64L!`n~Z)f FvAN@2xDQ= tv_V@}<@kTݷSd�TNǚz̃G~Ƀz\Yc3+5ˀk79VDé*RÚ{$/Vy%P^|K(.%ʤB`Ij0~dX^5`P@)Co/ê1mgMbmg]� sDn�lFs5AȒ;Wӯ@/;О& h`^na9K uc\4vn0AEowePJ?)䥈-6xSʓ(խyд̝gY��fo )!z孂=tE{݁J6{xlAmW+d�c m cJD$M-t# S9D3h+SW=ޤ,U,`v# . n 439`te�fS t— Ǭ Z˜''4]0ew4@3_MHJ|i+jRxfyS sG#h1�b8j1T.?~eכ3[/.VԱzC/_BoSYpumȌLyW 8�p5, 2aMâK_7u?4!T1xװ]�Pa*ly|\Вш|ZԐ I#"�XM4`wԢsʅ@yȤls QjbefzDat _W:<f|o^Y_6qޅu s2"8`50yon2O`MOc9@2sxw3G@r'mfvP~hX}? df1YG|"@ ›bƎ\?)[ $6Ȭ+շg҃Vf _vO�ՇdoB<M_/ΗX :`V c(8]]&&D3j w�,9 ) )0 @tmc^KތwIsEwIcDNq)h@;H*"La&i|ڣ~Zm0s!V�X8H_5Z}AAv @̎7 afrZ_bn1|[ېGn:?"ݦTgv|p*Д?6Gd Av9a@8Waz /9<R63H;"Dchxnfͨ�F)3QA @QR+MMR8z=<`6ǻW(>]63RyYP&a_YP/l$&#:$K"�pI>]f*G_ߵ9�.!ڜh,0 m=3pXX;`pN 4 QH*RH[<?�|½"B5.�sI1A0J,nдNj;Añ*l$["$Njb؞ԾH;4Sߦ3x%0䟑LOˣK3yvBƇ q ^by0#$+V]#>5oi)5am6+K#�G-ԷO8]-Q&`(r1lT/ԍo:^ʖ kp(N3,υYҌ\X&a6xm�'LafnPr|׶,)޵hd2 =#{N)Ưbx3,10EK3Zm1=Cɪ]b|ߏe&h<6#{~Nob ژ<Qa~Tz3` z٨Q Tlވ(X<EAh~IOdaZ,R&<{<d'nR=B pWz)Xo^ߏBLb5ۣOpd"4$u<a0t h;F ~e3<{p'Vw'мj5ߋP埱f֙[:{: $?gAv`ke%vI)`N*͋QiQ0㧓feǤJ L%Q 64K}X 8Dp˷ltÏiO=דL"(\jJfwGk[rR� p( j1laxw3#&`=4b^Q&� H+|AbAI?jP+Gye>2q A`ZvLN-QnjHXi 4"Yh@!?2Yt? A>|%Qn܇g>H!l2˧m<="gGч)ߎY=/Jt&|1/YROi,yY>^̠X>3ކ_ì׋(b뽣f!S 9$j$`cwg7G~6ti{@)PhY5c̖tTw#o;θ,cw$M ~^gq`ɥ%r6c雋%aٿׂZ:1V-<̺S ~}qն~V NTIMw"N/Oan\'g FxS4X*o 35V,āxL9ȇ@n^AC﹍-�nPF [rL[W<ι97fR9gƷէw-*o"1VO~)YеYؘt#&/D1eY߃^&Y7jt55jaCJ{\1Ca>B=-hWfQ͐9zbк?炳Sת]Uuמ3dL 1s15t$gTT=̠W�*9ZאF͏m Kq]L>)o>F^_j#պ}g2]oTX1*iyiS;+i"% Zͦ2B}b0(}V=1[Q~Zdv[z\ss慺HaA>eP~JzЩR{=j61'SZe|r ]2wqҔ\]@оU<5 MaBns9{̏Ӌ_B/Տ7 t)S!VY?~~|u[|+`5;|ϤdnO| 1pęFwJ^z]i= ֊ϕfե^AXuQAt<1$bx{</5'$ ]„ʝDeS EɌXLR.akβra6S*Jnk"bjVoi[gL1k+ޜr2eV3vM׈L#m%w=xI(t1U{ȵ6퓖mW*el 1L/0^k,!~%1G^x38Pw0/#fp.$⍣Z+|KuD{(8f~Dn6zT8K gl)-4F465*̭ZhUsH0SoAb I{%İxFoz"OW*<_I b#,$H7{@w~z\nc1|&OVfG~(kIX>olnmӥyL+#BAO#GNݏ51Opu0XA"Vn͒Hכ؈TC3:S; W}PW˵L[KIL-.\硽Ņǰ`G sޘ``Ynu_1$FCDo6 3̼}-&s ;Y"S3=r-î6{SL|+{ F#e42Fr(ֶzT܈1Ӊ7?o~ϸ9~9~9~9~9~9~9~9~eo/{R �3-s?.aWo/m% �[W5NPyuC64e^Tױymٿfi[ru4*ոuN0~M5p*ө[+#  q$�k.^ĠFoooK~􋦐Z& qu1psN;NI n (2cE?J?Z,ZwK�7о@Km�o@s7ȶ0h'G䋿W e5Mz>_<jq֒O= J6ZQm[4Fľ\9 =o) "XR NqlH-ӫ*"h?S xVl %˜hNٷ> ~h ?CoGke'/m2m Jq_7,JDV$]A*ܯy a'�LF�T-~׼tg}3# .K=lx&,;D2^*g-5? Ws,wvRWGnG%E7k%Ȳ_ۏ})w3�"l/iѳ1ފ)IPeEkŒ I˭Q`tmȯp&Po%vИfSMR9Q!V޵T48:JUoSEl5X tn2ίXu1|6ۚ/,k2mԌkkٚ47L_Yzt;`:|6fB{'D&Y~] !_z 0?k\6dxT�fdmɖaj =@5יn P(d́m0__+i6KTaN\(\퇗%$GWة̷";3ݐJy]GJG>RڕhLe)s[ӧ?JH.ĝqeQ`;VL6�À(k;.YںdrZѯ5rhH4t"Gm,%d@$qzۿz+yTϿǟn 74l3l"QϏe3Sc&|~>?|~>?|~>?|~>?|~>?R)Oo}9~9~9~9~9~9~9~9~{~?OOis?s?s?s?s?s?s?s?sJ{?'CTGמ{U<]1fY#<VטzIT^?kK ɭ~=-7x:GMKλY-͜r[gi *3ҳrn`y֭fInaϺ{^i΅^غreﴫ;37wned9 ]jeRjv^QoYyvjzVMV*%7N:T-]zgp/zJ^:JϺm=j3lG)g]gzsb|-},BZ_z꥗ԙ=Fwu}W/WTm(u5u|xc+ZE nigןz塿Dj=O.ٍK=J.MS3mԺiyfD@%PBťUןW-q󡇒Dze]KNVlآ'."7wgXM+S)L]&s+ת} ]<ӊ[ˑ%]/Vf&}s]<KC %: s+K&X]if.?v$a]>$^Dau$B']\-K4zsKKW~Ηxlp L%SW(GwK>/ IqĈQzuK'y,E]6ۛJv'0+F3ĸ"ҫkNLfJje>.W!EcWMMWrn~z=OuR>Imu>ziGavUA,%RШ+u5'{Acg=GKY+b^zCHd ]mDORMgEL.ʐne;q,f*>OqsI@Z.}oIɉiI:+CiK*w=jHܭ"w~KQf)N,6.k,by 9^ VӒ޺N%g.qvCUV].9GZZDne%J:)!JDsNuy,�,`տ>ԷL@> : _R2@{⫪/)-)bѕۗ^h\>,C%^`6^ooD5t) i?=bM'1ɶ^Z6^qޥg[-]vtKyjzM(з٧/e+ɀ惞KRZ[Odšʘ! }-I驏"y j}bvf^L#a#18Ĵ$ޅA 7ɢN]{ӞJ IkN([+!&$$DwOJ'L·LNP ]_cu>c�#y$o֣I:i&F2`J^% /ԩA2 l9}(,Quh^x}zyto"vp9}X(/3%qoŐڕs68:z[5jZ#ؔθչtFXZ*.+^RIgISɥ3l+FDOé&֫eM w�97cHgS LݓdERi򘛿;Sl<X.>{/CXYCrgap{:X(ʳaYH8I'Wd,.Nqܒ*mKz*T|lr]Hf <v]*cL ğXXwyzŽɕe%>$f<n =s<*Y,Ano5oc& y/x}j;c[Nď!Qpr񡑝ޝ Ӥ^ex2ז F9JHF{'9!$Q/vHܒ$Iv+В7IOB>'R-eB2.;{ѵ% 9zΡ$B<dzWHc[xI6ҫ$]2prEFtjfRMT:UAZI$36tIi8O_G<c1TK(u <C~wߠtb<δַ"Koߵlɟ-NKRARJ9Խ^8b8ilE\JjޟTn)U}j#QY ya/:\p]#t+�$kP}Ov'@qUd[:vKz$<#-VHIB~,V#=6q1},YK ׍d@lds!9q) L4 w8H9o٢ґnR(Xذ>LDΜ.܉3L^W5;].LBHwwխn^BYy~.@eLdv[q9U.#*%Ĝ\H; BHK}v\FX]NTRi~[HE~N![^y."ƒA崄dnPG;4y݊\^`\WD4вVd&'R{ῄ$CE%o <40al (iYIqBY5bN| /2`=&dV!d ])=Jo'=!$$IK}O7)u.b2K\HzeB -T:4Wt%9Ig Z019ҏnU`⺊ރ_ol]{DC(#̏|N>z,"/bܭqd`nn^ ) xnaٔA\9/|fsX<8IuGb b|6.w9W5=kw넸[22nE#rQ=Z}pQ1:^,"st "fF`"$I$~݇0'"Lpq{1>':N-i nyna WLNsv&M惥ԔZ'.LH4IU"ҽmKR*2g]pϖ-P|n\gYzג>.EL^5 rEHuovJHT"y.Aȳ>=ogq+o#VLY7O4ޝ4{K:/ZŸ.?yu@fYuaH ZU290 N%4-M+G cHrR(C*LȊܕ oIp飻N gF{GmΖU^/!I^HGKsBmK~s6GV03Jd5^r\H}3%vH}r4<0>01WPYrXeI-i^Ǒ(M-m!duerNv'%F+|!zGr=;Ievےòz\6H_]֕姒ˠ6@w ;x ^ zj.āELX'q8uظ&MWl"W#[A┤M&Xs)!DFutM>W$_$ْh.TuY9p3(A,8AueCRm,O7 ߦw}w>{IJm:4Vr'-hK! *;7Z]bzۙU"II,w(wr>-G8IkD@=H켜RCL^_Rw W-Rd-赱$ƴ&w.=qd;_-Q k%kY[nD$ cPpVD]?4"[S>")0z9T6K][m'sevA̚k&Bp~DiݩR /| SC,/X > hꓹoG/2fY;%s\�bj.GUBء!m$rX':6>x@VB,Ͷd,BXtK;z(}nqk1,BwK$k[V¥#QS)Xvహm$6=l=䟔@ t@"j#|5e*ٝb,2Ҫ:őlW5ft[ʓ7>: ud.҈5oڹN -gȖEdII%Y^JOn`za.Hz"Qjjǜ(_q% N'<#^ImݒldJ/gmBL/Sw Gŏ<=,<\,D:rHLw"2+X=}%˓\+Ԓl˄I*d`,!\qw++)&B2+dUZBni'$F⦢έa$/Y;>lVf:%i w[,+']Z,ifxٙ]d*76-NWߔ,^6p 6Yq ԝaȹ.Q$&afâ3Z *-+ Fj_jzT^IcۯAQD&Aqܟ!SD*SjT3'Y$NGn*U:B; J̑>>:}Wv+ &MH40 Dۯl&/nџ 1lTBj8 zt9ufR2?/sq7w!ׯJcU+ /S,["J\l(b"LVoTJ9Pzk $UbSWvB[WAn3L>8Íe_qU(SBMk2cbj+.%=d$e#lkJrE##ʶ)-|e'M*_]bW2I&bPCV=EU}+j(ŹB/M ;(\g&*WEk cײ2IEI1eUP|0\Rniʻ6TomaS5_.Q%βp3s ^fXGUWBJk O3NŢf߇VWFS?bLfKz.@ OS{'LQضRBS+}uWUCZܯ )pnV oZ8-<0B\M/#MX_o,͗KXJڰb}$R6PJSTA9"2Ms_Z<gkm,^ 059h*dտp\HZӮb44MJy"C: ~Q:g/7Ƞ~J%^Xe$tKhNS/{RKrDNU( "cl|=]&eI+JEXfp)3K%Ol"1|Ic$iR:X@iQʥV|s2qY2cM fw~%Z# {mwX[>Iݧ!AjP�CJFf)a~ZRCA]' <z'kL[tEŗ9i~U 2# jXU@LF̰֖-#'q?/>ΐ1}nА:gq丼J_JjpR7KMIjCr#%TWbRrSpCf޴w@Id@v#3&}2u~E]l# AɆRרLf3簄>D (6)ȌEFZn쌌!4AqVȗE A _i%R-R$j8cJ`gdk+Oub+ȐKHxfyf-UuyfQKwQ%A2Y7X]/JM_¦X EA4dY'_|1vA&O,dĨ¿C, k*%;\\n -~C.H_DS44|?qS&E0$$\u dd°C`{5^WhJ**حEd1C@ /gf($=KX[q9&3J=QWi[zo4˷) _hWeHb n{*{0E-A9_^m5+OaFU//ʚtASt/ 2DrL4R7W@*U) 3bbp$_Ejl/Ĕ8l J:ǫܞ!U6/{ѢTջGRAcb,گuUA w8MiXNFa |BD˺ȍe+t 4ʫ);$j^i5y9 aѬb,F6jXzY/Caad  Ev L3Lgf&Ԃvh,ޟe(* 'Y>݀9*f^‡AK ĦBH.Tɛ%*Y#-zhX =5G~KY ajٳMg<ogTEKf2%{fpևdN*$C׬4ȣ#iV6qX*ڈC'e^/K$&4e4dɯHԯIN>|dm/өqp{rdHo+VS%xzi5-6֒%KY_){NgǦx#Ȇ.noY#I2Bo_(Kv!SqQ_B!6*(WnPb-w/ڵIJ4r4(RW㗴O;y\bn u)2{yvhJK t_;n ۑJY)QRr;ւ44})ٟfyI+"#w(~Oi]dfHfyfY'mwd{Z;T3eR&N3~pMA(ntow4#*vH0'jY;69ɺoƉK@ꌍz2gp-_T-_?V8 |Q-G+Kì3�J~u_: 6.Z8I^!A5"UVU�!!lL$|M[뛰eX[n(WfTw2AB{B7@/Je z55&EX!ȉ˺۫  >c>iå^d{bqQʞOO ux$qY:uF TJ4jV3ұីI@4m1)l.nntߢ^//ћ@tE,L<)ހh E8$+" 锕O+͘R�#"TAdMlKAnNYu}7%2Rj)>*Ϫarxb%؝N3TR\dkL֫(hz5 ܣQGgU şBVVX罂a: z֧PEz[<ō&y);\<^/ ^pܓ("3a-ThoKK#xB "oWzv-,!~Xzm?YiR؊9o 8Ͷ2[h,yb?y:CWWCPs&lXA }#p2jpo _uE`;P)wj'+fsmDWKJR_'Nn n oXSszW?=]' /W�y3bz=kޣ`츢Y8 T_A^InuD! O?6v0Bn^CG8cðJa 4qݛpTo8 xB4-@1@t#FBԇdW&unzz"&:D*i(,rᴒ}i-`ᰖUzS3oPM <Px(e�N^نM@4aOZ�{Dev J L E9D>KӃcA+Eoyzre@( G%ws9k\ RS2d@J|@;p(N(T@&\�rFv.�bYP A&{CvZu Ҵŗ"ܣd!�'3J'ܣݨ-n85FFg%CИv p>= .[$`Ń%Y(~ [ӗ4/d"Ke9Bt!> &6Bȏ\*G}`0V0B ph" "&ebCLެX;tQ!>5px>=ITtKzG Y)l1Ԯ`UkYDT0, UjgS{:ǯ[i&F`P@DBBA%t/5 m\ e%MPH%Q?G]_5S]aհ)egatpA$({G^nQ^C| L^8֞u[ $�!`b�+hzmEhP= .aYW"8Np_ 7J)a'7 C,% 9=(%�U�C5 -dKdÀCՉ6% *mZҶ˸Tf{D%2ͷfҘoԺ? + %�jCQ|RCFg˯8TGN.72t0>� ܾPNAJH-5)jt:F5gA*(.2;iPE6d+:־:/RT+% 8Z&\ 1.Ӓ.M٨MK.+/m'H-tB6F}˾8h\tȺ!y]L+%fKJ>R31B:ܣJAu@`t "0EH~JIzize @_Yh$]vT2U.`ȗ Ϣzh`t<P*Rm'{6&Dq}ֳEL��cWE/p (PTO 1*8{: Vh ʤAu+VDףo4-{C%qԩPT.i ;Y[Y� y:`a%d0A- Щi]cߘz. E9mX {wkX8R# Oqtq):ȤehX0}N[>NvQ[Zhx~5l&hT0b] ,>W) a�9ew0/QH *)BB�KkHׯ8/|䎭R rSc0WhNz k$0`/A8gz&&.D0 |kIZXQfIoABū;4314A2H{ Z\|"ӨSeV @��N3_i=fި%=^ݤny|[�7nRb65p$CQ'sTi,aÅآ=~fSZ1Ka,?R�3BՇ_!D]ժP=JwFNQ iIϑ(I/GzfEɮI,9*M``h S4ƒQ[!H/ExA *Z~m?OSPԨy"55=tc2 �^Io UAˣg&dFA6[~ n {]2DǓzk薛^yӡ&P8}4̞iҀi]Z5(Qs@u׋D})pSiR ӃV og Ոx:bp#S%:{. Ba!W^?Pcb_WMް.miqvcfX,uҲm !Hd+8r e+!B*%^Li{t<7hEU͏1HCv}# 8'Q@!Û<joWN9&GJoW1xlC@ܭPy˥#aq;�jRHX/)^og0ENNs2H#a٭3'cB ۿXe9hdRNVHቌR:-$=T!*THȋxAJ- hKdקgMZ&09|R ('b[SyHLT0oM_�Y"x1ļ3X_ .oATѢ"}x'b6k&z^C|TKNpRx M@@ 2Y`:uJ+JrB8rTzD/ᔃgðOqlJEO:w= p'Ti|d VKN4aM3t02m6(K1Z*M ‚^!`! N)*@_i\<5ڂd}\G:u>/9�nӸ#J`0@<ERF=v)zp =e92Fc_"qYRnUPm >Sdx2 4;,86v@tڠ%,4iVK3wCI)圆MbIs2�g<8O B85~eBKHX$h!%o~)5[γ(#s 5^mlv1iT|#L?#Ⱦ.?0+kʖj Uٝ*qWTNpƩ ռOPt2a =6nb@w(AD1Q0mRDDe~y&YkaԲN`VS<fQ{}jqmh>|{F}&K9}f;hij߾ Mf8zAe]XgæO.ĸLOKab)7a^6^Vm<Nmg �5Ԓ:5 GCbS8hD>#UOZ~rfP(By$}oX'KџCj 3m+=>|*QVĜ!7|JI fƦ?Ԕd)g* =(cВL[EVG0*`JҧBqF cG.AK4h Ft~FRW3 ^xF^ۤ؈G�8^1߽Iv1Qdhha3M4~eKYxprjŒm2}NbD|Jއۭm%IƮ^H;(@hyI5BN?p=b"~dxRMJa3˰nam* CĘJI-Y$Z4I/Q*o0=aC M6#؀�~*S]M)D|_<}e1ę@x4Pfx\0P\U_9sLK!h�$Gwa݈$)6^,t SMmG}Ɋ$1l/~Ubڽ M2@F*ŒT\Y DkK1gY^&20,>K �̐[HQA,^ޡQf 4 P2 OCF B-'iM7_bw% zӢ거A{a҅�JVg-ӼS&!`S,`ÊoDa[gE_h 9�X6d%PO 2ň ^'U8 D+T.l3ۗĒ^0&fE33) ;eJrZRu$k+25/0xP j (fk@+~~#[%-T4"J0:L9u4&;NQ$eO_lcCFShCejF2,d, 5Pٰ SAom΀ꗤqbra? ai֣٘*$[rJ&b0֮Pk-dKV"f%6 8%Y_- WشQ .xhʘ6g#EXH?'6Wle~ ǘårPKC5xЋ>#]cmγ1GנT&{folc:’ą(xD"!ANd̲D_cn4M&Xc(>Lv NNZ i<}uYwx9$CEnB<CRd 4A/BlZT$&d%Am&s Ul0D0(SW Q 3׈2VkR>kbԸ1ri!wyaCߠavOG7yQr<2Փ1ѼTR+>#k|b!#J󇬖IX,WJ"? Wom֥_v8Z]ڛWXXg+r`jY`ASkK3]03`kPKȿu3b\1he2jc!DѪ0G˥Nag/_A7[O֯/( TDFcxV?SJ+\&4N$ĈhpYIh  8Vv#̹ɔ$DXXZrX Ct x'lūp0+:/ Y�Ru㓙dy"[w;?|7&܁bі1&͓ +�Oڈ/6 S�g#%42)&șp HR,4J2hbJHyk""QnWU,`hyqִ |G5H(mHg\/& * !Od if^N~X5K3I/QUb$;>.Na t=i 3EK<xhohU Pf[sR x' P,[_҇{$Ӳ +.s:ЪCkP,Tڤ�Ӳrb�c E CcbGP\c/M /GI{ `E562͜Mp!BgkaCÐm>x1keF %eN~eeCj$E€Ds(iY8Z;@^$)d8t ʠ%~ `2�5i]@]ы264_ C @z728~2T2|VA t`IVObb'҇@O?!6D` 0\lX 6='*If:E" Г6#�85Bgf()7 Mgc_L(eM8_"O khoL4l�XAt3fzYŽ/ 9^Ѱak$3$b E__"{D$D%:u7v5SgqO9�tX2nd:;(BTLIo[.A3 Aod}q+G�YV;*J18E@K_vXQG'EP%u%`&W1+d:_ "BǛE'3|0d7)^Bge[?jeZ *' K'ف('6/?@Y@<K7#.ȅKGDfp)Q@ a7*(  %Y8TVFEY.Ӱ+3eQ4f vR : %:@Hb UdsV=�?F8iVwB5nجY-QYyH¿tJr?'6Y MrpVI.gVfShCvN)5-޶) 8 ++cC[ŴeO䀹KfĦ}m!/J7 v_i7yRrK@ȍЧLe3`O±%7nNd hWZM,Qu9ՈxmcSq_V>c@ 8GN?%DG9"1E2x8@ïL`D[4k?؋Q8̙$9m^B#WTQHjYd 7!'eѼe)n]3?\S;Sd-H:#.^u;Eu!�4-HZ避fY^(KJ1l[ .zaA)U).oLwc]٘H32Ò /T ~٬r>΀ o/TQj:VK%<% ՉyD[2Yٛ~e2lXV� HcI,5Vגh. `!w;N&fP#%Mm$vi-~p(XsFw`# f>rF@I^Q:S3^UaZHTp@>aEWK>I"1fV"~~ Qn$=Cʛ8͊2|VU *L)0_ Zɏ�C$ W3Fp~CP`gۀup( |!2VZN΃lH61gA ÖIЄ<W܏^"@+V<G-Ŧ{[i} 0fi|nǿo~IO|Do%`lx|E ,mw/3?O࿥|#Yk \|-"s_AZ_G+ϏzKگWw~녵ֿ_Aڮm׿wvkݸnl7_ͯvfz7:u9n/=0Sᅜnv̎7-2my!͖lY,gÿ^ϖnz<l0&mΖ5rJw[a|ҏ8iMS<̳asx|!~ Q͖lyx(f˒n$Ht<<Qݖnˣ"NI-ݖNi('J۲myF9<QOve۲-Omg?Cr8͖wR/KYw[qO9S={=pO=S︧qO=S={=pO=SUC]w] 5&C걦pAmwdžG3CmrPTqɡz4C=S=]& Yp7[Jlyh-nt;CK7[CtxC頁Û-m[7<rvG};tݖ 4R8myxD;<O~v!pH;ݖ_/Kw[iw={v=pO;iw={~=pO?︧w={~=.w;{~=pOrqO?︧{={~qO?︧{={~qO?g{={qgq83g{={\qw3;{q,82c~B \ȕ ]=1C_cqq8`',qqH~'45ǓyQ3xy\yz'4Wy|Yn8<d;*zyt:7t:C<t:ot:Nyt|_B.ꂬ7D;͆y(xP\7r!yCsxuh{^ mt!u}B_7͆סu~P*7Xaulxa~X ?vaucX7̱͆Su8epʺu8eNYS NY.q8e NYSu8epʺ}8eNهS NهS}8epʾ}8eNهS NهS}8epʾ}8eNهS NهS}8epʾ}8eNهS NهS}8epʾ}8eNهS N.w8e N9⎛;w'y)]]/]ݮ.եR۵z]]&/ջ]ݮ.%R۵r{]]>/]ݮ.\~/ u}%tλ]ݮ.\0-u2i]uz[>Qox|[!Wx+x+Og[>Ex+Ϙg[>Kx+Og[>Qx+ϛg[>Wx+Oyvx+ϥdzvx+Ozvx+϶g[V|[.qqovuUo[厷o_x;*w2w;fW[VqUx˿s\qs]o[Vr[. qqovu/nOYc{q w|g݋[hx㳑c\{q w|6r|RFi\㳑/ԪwJ6rY.F5\㳑c6rqc�lȼλͻ$<g#Glzl(Qvu6Qv(ۥmױvGQKױvGQKs|6r(9vtF<teynwe9g#G펲l*l(Qvse;n]Z㳑vGQKs|J;e;] 㳑~GQK|s/���m 3'��������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_data/test-rrul_be-socket_stats.flent.gz����������������������������������0000664�0000000�0000000�00002403313�14670056262�0025437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������'Q^�batch-sce-s9-bidir-asym-1mbit-ns-cubic-sce-lfq_cobalt-1Mbit-10Mbit-20ms.flent�ks\Wr%ݿOvF~?1ݭH' M2Iu3~W� V;R 2G?\g}|o~Ox}y/^>{?\{_~g_N!P/Cǹ}\a1C߸z>^Z=헿O3¸>xY|v9B#}'<>t{={.ws{Wo{e>~xw?<zg_W!~?: vqRˈ3}tz;|O^}/xO_~!>?mO?'·_'Wճwzĝ pw?^]�OwÛÛً{Wo.^=_| _z_?<{_={+WNNğ^xgGs/=(w7n/ 'מ޳oꧫUO/_]7/7?>\ϯay{ogOɼ{w7w}$.n"||apq}__<ƕ];?oՋ7W/x>|{uwϞ՛_.'~+|{ w_}EoG<eߞ<k𳯾<{z}>xv~ɓG/?!' v>ݓ'_?'O}/od{|g?|rg_?O?_wWohwFqTcWGUM{Wv51SxqG  ž8X]՛{*?8/~M^Q?;U/G >h7>՞s9o?og~Oo[苯>Gxn/}ӫ}_~p} |b)G|׿g=W_|ɗG?{^?/\\~zqE /b ?o;}hN~'_v}G>g6G8 ']+ ^o~z 3yz~Q?'__x !/\\^\^~ի勋]\uwxl/=z1}_?=SZkKwn>.g~}FQ<Z|᫿ts:Sw ~RN'<gLiO~o>9~<8F-J-^:ri>o<yG:r^{(Bsٗ'5⭅Bg8H㊇KK4r }[ Si)fMƹz?)1C<tkRZScqNsO}s;?4ziON?s>=-i{Zf8@a9Ns)%mPnfp7tg PtcLNs{ szOayON؂<?I'y>ߜA+7[ٳ_LoxO-m//ɣk;1P[=St͑yO}}WG}}ǫ_\~(_9MV/.^@Pezj>)Vqx}+uWOpq&v%?\<7_}]_W_7_}7{'|㯿_7~WG!zՇo 6գ?17_=7;?n} 7?oܽwNKCV{b[_:0qw?'_O1:lki+t^?aomU%NgO?ybyctx?Ʈ1Nǿ;~ō]W|p+y_N*!?tvwוbe-'Cy<^Qb?>eWɽ,W6zyH%ܢ)Tn octQn(%mK�-m3ZqBŲS|AT[ЅrC Km9/u[]nk1TVnK)RS+7vE[iu0jQniY-S" sLۻїκeAmwνo"κen*/o\O?:ҮU,Q7rl/?wD,uk%Ǹ͸4n3ƭm{Ȥ{y M(W~Ydo.[Ja~g}6N-ݔ\,>'eQ?(vlVTh_G*^]KeY:EmZ: h)uI<Z:PK۹o?[3ZQh2M$|O-S( -YE]u</YY>IȫJggQ(J\)Ժ"5g''=oMTW?\g֌b:9w_X٫Wot7zP_߿}czZ3}޿׿?}^zݫʉn#K}?/W{wמ^c|wx%~Oc[赊. 䣬Z߿nj-o^@_=}Z^/{ַwW?9zfY|gOZϳ]AZ@|ݻ_MaշO"ﯭ߿o=B鷲xD߼8~Q|O/=;8jRL3'wQO�JC6i p1<o>ѓGv[)Qg?0̀[?cKw.c/A pmXŋ/-C?h곧5?zOOOWwE}ms뉡xwD?zc @}'|tq&퀣6vpR=iYהڙW\)oJ~p5m~nS3~p5k`F<M \g($/bS~.= ל*mm rͥCq&> \']G%6 LY ` ysYJ`%NzÆDJ` %3\،FxfNR{(A"kLݜPZ;SQK?W!%)3ys28k>%%  5S@2Z #Xs>Sg!&,lˎ?Y`hD"ZGJԁ,D0 ¡;Bʁ,D0 s@֖ù'C ` -s@w9S@fRrn8%Ys&^<W)#t(g"Kk8CO\ӹ6+};Y\A ^ύ]#طÀ~A "5?*d}B\B,dyQ m ,0#3s2dxX=WU)6%7@2l7)-t Klul?Y`3ۑ"+T&IafnOCh! xY aad)<QF⇇d\L*%ad!~@3zl p 19w!~bH>f? l�Ł,įl8d>D^z(1|ff rdit)5.JT`)6'c<k; )=~n:mqv<g)#Y9]L4Θ2/8YlANlڙBҹՙ)DsSH [<}@`s:pO!@nyQq<f! F0yf=A`K>d3�x93)7~n)e$)7uR{gZJao'r<#A5򨣧b6# 1>Hvm1HIvrY6Iz&>"=PM>ŐA 4\oCFAI$9&6J zB!ҘS3=Id�KMJU<i?0δSsAKa4\۫= X̅<Q|,a;|W2\s9tŞjc)邖{2HvRm/ =GOe� Q~O"8g-eq8X=z#\5|v@qf� )9^b0x6y٥Ao4,c"nKdq36L/ţsf2x(-}[+̀aR֊=''y0\"qzR,zzbЌCdoȹ�ɣf4JZSD6KFGJ!*8D).X4@#2-|)̀eLaP[+ {zh!4Id#_㴐11ϕ QT XtϱV\9әOS\qNxq "�.0KWΞb 0̡/H/ FztGD@=`Skb|&RbGl+/ǽ`q}=E}A# @KE,!^<D_Y>79W@E2aQ䁖8-D"A+"H0VLet% Ơ{,ʉ  c*Qa ×<W; & %V$F42b+.0UwZ z=̮(09:rdad 6f49zRaC$V 1n>-WI0b :t]N�61$816\zOb�=$@<Ra{za-Ypq)[L(1VH"ߥ3Ơ{ n $1 id"+fS]FWd�4>0Q�NCbEƐaY+q-H2idt)ǵD9yG$@2.UH#cȐqf·y$A4@IƠq<y RGWzVId zX"Eq<XSUK$cQ zNE&U a(Lp+ �:&H:j)$ AØ3S|r`ލ'GƐG=!bdu E@IlE@XGƠGemS@4kj{Ipd 9˶{JIpd�rˬʘ<Ipd #%S,N%naϕs1Q2\U$X2P1asF)3J!28G1*X2oX4fcɄJOd�sh%13c$yId� fVd<`MPu`�:<X'ݞKƠGOtAt_CMƠ{.Y4@~fV$F)-Jzւ&cй@Ǝs-h2 [O' {EI&c8 ,tAȑr\Od zi A/8qB  Pa%1*t603OHc1XgAe� u^H={Zʒ t99,�BgzB.*(8.N$=$(8=tv<k)5!u@0Qiѕ@ć$ rG; ̙ͮIpp ᣑOpp�=rg{>.88mk) :9~{otESR \Zqp�=BgenW Bqp`�3{J2IQp y!j,C2BIZ(8Q!1Sagfh( N=Rpب"W*Npd!{ 7=Ipꡦ9s0hYV/vE©Ql*Mh'E.H82t̺yR$@ gx-SP~%EH ZJ#4U=Ip�Ѿ "$5ƺiT$ӈBF+NC?UKR$1Ү!WDp�=T5*NmV=m>)GNY+H8ͪ]X8s2 *\]pWtheEif@3芒4U͊jk"zV4rz# Fƙ[a=-qPYw@0YÙ̊hcYPgEÁȕP/i:WV4@Ȧ_V<\K{8nG"t+6Ҽ.+"G&竄 ݞ:AV<@sy㐲XsT{Yp�=za^0*N?| [1=*h8f=sp�z=p,МHYEޚEfKO++g$up 􈌐F@Þ3 G,[DplXM<j!,#ed\E@OZH8xP3*+0Nd3S1+@+FV4a.h)Ĩ|BV4V3h g6bOu>+g)4vIS8hRa<\h8P&Op�0\gdEÁ`1Y gm##jyXYp M\Zp&B;ȷXV4.h>%+'}֎רh8q�:!h7p8tډ^gÙ5ϊذDJ$�z|ўk(NX@|(ac.Y+΄iLt{QU4@Zx>-1cyhe g0vg FʸrC3agcV$@|Є. Il3iP,vQppl<8Yp z<[$[a|n$˕$k L͆P_ *goA1A'%&fA±n0u@4"\|kA1/d )gA1h<j6nU$+'AW$a$M%, ȥPٳ/ A6|b h%VV7q킄cУSb!H8/NpI y"z$!m2A$ \B CK= A?=BS3`s-H8=k`g\$R&ee)c;`w4,`쑹SLʬ,8E0e zyCE0e 1'=ZuL1e<"2@hƞpATF*Oq2yF!Ԙ{Bqt`tٖ+OQQƲN4ul8wRmlƩg+]#,=sa2e,bVPNb@XŠau>Ag1ioYK|ZL Fg-,]ͷ{n|X&6_7{EY z9",T> WIt #i1v%ti!@sRdlW_oSH=-d3MFB`d:vŠ'#AfaMQ=\",q5Z]v@Y QOgjdk q)kAfIǙ2%\ 4"$[{EYlHe<]EY z<`O2 F{^ �+@KiLd6W0N\C%ݩƉ!l5JJLzE0N zN."j"iFUб ;S+qb+{NEN 6- 4xVA81g3$‰EŌsĠ J ‰ LR6"&lTLZx@KQls671h<Ƹ>7Y/;NrO2vȋa ER"'V NI t-"eq8'xV51ɮ`C1N! 8{F8LyRbTxҺg{Q@m'q]N+(I.5. _Qjv1)c'FD؁.nQz^bgWQjqݹÝ"TX1yE+RH5՘JLU( ǚk+Rg]E$E N1m*2*RH=楢H!Պj*DBWC`+|"�V/])г3_wB),5\"H! C,y22:ɕ_#y2H! F& R.GB /"�2!LbnLȃ�f |C co*I;h'n`Z)WE7t퍑 < BM*xa8T�ur "'*xZc?F衬UE8釈Ўīb֦K8@sByT+,L#ZQWP!2cxzʪ@ |S\@WFBaXiL;!RktE80`Q\'>-E6$*I? SO4:ޢ"t_tmo*I7xs@ dll!U'>6zOU1NٯΞ'&qP(Lnx 2U1NƁ7BUtUvO֩*0E;=Cj� B&cT*8GzUB`Bt"�%< UBơt5*R!dOd)dj})-t>ơĄ+\YSFo{֞IUMB$:-[dmJvo# 3Ԝ;7tSu=QH#lTȓop@+ mbV!oۆ)` <ת'n9󑊎ר'pFX+ [f@_GN&J#yUN�CS_4Y\+ q9s4�e:uBd:Tָ!T9ѹ .8']Jl"UЭˮ\qNEvY\29Ek*^bKavĠXZ%sbA2C?xrbCàT*WSPN *}d-[mxCpN $WBpN#@G8'91=e"8'ƹ 6vծTpN !'-r.Xp\4";LX 6"PŠ[|ً >6C ŠYeeznjdA7yZJMbe<UY,Mq^Šᄜ[ztXڕ_tnu",Fm=C`rlL/(,֝:5Af1f/Q DY,|e0W[ 2A7 c<W-ENw҇b-Vtٕqlb <Ϻ 6Ai2MY̋ <&,rb^<_MPNm7@Y<W-E:t&('V B@@/aĐar11M0NZ5 #'UvjqbM61TrI`t .h!1h-AApnjbЈ60>XbL<)2Ȍ'ĈQC ƉA4XܓoqbFbgͣ ƉA\Z۞ ~P]R28|rbIX4A91MY2,A91OS@ǘJ ʉAC0+7:tJe|"#X'l { $X'(>Zyub= BOu`� =!nSN U4gN8zCMY ʚP \MYlCv, ,tkt|i$h >At"q^Y˚'Š{$+ 'Owȹtt! >)+Ժ*MY J=MY�6&,` Ϙ&,N8aX4f1_j!SdїgIdCM� `Z .A@;<=%&,T6u\Ɵ>UŠ{fWLT@ۢ3 _M0Y 5ѣ & -<W-Ec^GO0Y�@t1faŠ{l7dyZ tHb�ouxMMEu] (IM�z܍ߤ"=BdEu\>H%ĸƬ5E7Y _Stg@SX3ʨ)I=XB2ecݤZU] `6ATzCZM�=#]E56B J*:b�2,NM*Qx!ms?sg{SlU єC Qg-ѠseS<MM�mi>�B\n4uYF_LN� KBW`',-F@(j)s"cQ'V="4F(j]N�:xOY“ncPS"�i8"(IuEeiFe|crYdXQ#]QY�=B"/{8]QYeia[dXIKve)h,29Ik]qY!h/v<ke@!<B;9؈.O+L': %3EHi}C"bkOHI}D) ]d: cvEnH2݂FV0 �3ϞYT+Lq\82Ow#ccYe]qdΗ{0ިt� iSƚY+ qWty(̀]H=-]Qd�gIQdBƐXKE͝"3`{aWo+̰Z t 66TeG}&9yF\qȌc15ȸőf۹%̮82ҩ</P!"3,Z3X+08ry"3` W;{"h#lxi(uB ߉{Z<mb+@R@C2^Gf2:̹L ZqdBZZ+ {Ce%3%ft]-]d� iTbLXvnWW$ CYnFrR,Jt}uŒ4k=pb ZIҭ]Qd�mIsTEfۈ!4vEf;[Mfe,\FB|d-%͹^4WB |t9EU肁cН \`�ǚ y(I]0p zЉ\]p K ACB~@*xH]0p zd6z&hv5& µCbMƠqHeUw'hɐtxgw CbMƐZLDZ4@|e7[3G*|qQ 󅳓 Wh AC0‰gqq4@GۇA4&㳌&d 4]=1]d�s|Y if2&f8who41$>%h2@<'DJ#.u-h2nL@토45+{4@#>/,H8Cd )Cd�=2kw4Lzƙjb P!x2m+ iÚoes)b1QY{'zawD!x2K2h!rat'"M3x 4'Kyft-L*,0FOt@Þce;u<>l Afd<+`4Kx 'CY�ݡTgtgYOO: Gi' :ANK}: -5ɦ$yrZCY zȺ=!,V;-lt=g6Agt̹i(,6.',kHryCY T`�>j=wl6{E0=6Ow>,zR.#('J; A9txtCʉAıA9UdX8Ġa <*u >[lh7ĠJ0W gΓ1<١!8'Ls A:gCd& ƹg=%!H'q<Đg`K SN5I|sbP:ˆkmĠG+,94%5 a4B(&瞞!8' ҉Aϐ �8/i]tbFsx tPa Ġٱ-.%H'L yJCN :rFA:4sb3D>s@0V 5g(Irsh63d(IiE2\T FDZVj]aSthH# E:AD[b[@NNpep@J]L,n(>K5H[\g \ Ćx.H'�t#U@9X႖"3ṳN]( ~CĘ0j"h{fsdspxsW2{:4&`:ݮJz* R9~)ICdWU/9i]u$9i&,<gObM{ue4yV('Zd3*I;2_6SQN*iHw* K||Z #4 %SBl~J=1T|Wq<ʧ�RgNo7<t_T7=,SB:WlOo)= S'pd\O( !,iipҏ:%(S1=Ttە3s=|*I?Sؘoazb<&]^IOIw*I5Х>ݤ4)tOf*AG:w2гt@SqBa-32'ǠEC*N>6ℌC,ipT�B]*DqB!XѥR'#h!2*w:"�z|I ׆H tME 4K8t--dAbs7t,nȳ>!n2`&]DM�=Kfթ n2n0n2,'I{槢^d˞+ g\xZ㴨.GM1c7./DM&AFypSM�=mE*DM&:$�zt5Xw*Ʉi#nda ME7R�zFޢO'd=W-%AbسT]L+|MVlgh~8!̦72~Pq'3pf碥гj*N4X2:'yv@%2!t̄AP0hO @CNsk1hsi\Zb�KlX;qàm3'D7M uxNS7 FDN_oa@A"v乺 n)�E{ZJc! +3)8!%7BsvbָL7xƣNÌ<QJr|'>k՞@2㺻LrMqʮb3S+c!H!Ne%C1SpBC `2'ĠK=t)8!=C` 1\U5 4yf\A4& 'еX^IB zN^͵]x R[lVJc%']l)QO >,9Bd5yR"%>l)ڀ>|J�-EouWx6HBs\c%@yIJ`O=f L0aL#7vlHH`CI`ap<e0` L{y`g@5s B$ӡ7s�İk–SJ?Rp* =-EBYuOꗱ}|&GE � \-Eg@ݰ0�[u3օl);xcl@'yʏ O uyY�[1<.b!�[ks |DF ɌT'1bإFBtEI5Bte-yI�zvrӚl!:V'vFey6J'NUv>aр]Fe}`KlYn a2I;D K�tStð<)F` P lyų$+ lq:,ghq1!_w>q ;gx FYb0l |Ǣ :scLzDG1 #(=O6[e bY`vzc=-ŲBQ~u׻rB]v=) J0Ҷ+ Vvðsyl(-X]Fh]-r‹T:׻r9k3aس&D~j$Ub�KDPv[%K|*^ Ȍl!ky{�[eyt�y}A-A-xX` vmQbDe5s`KE/6N %2 v=k`Klu7i/0 |T�qǤ\"$ny+I ߉b,`K! (a[{pGLQP6O+ 4%Ӥ,"g%B.mq7 w<JM5�[%+,=!ߤ^I!` 6䒯d^/ѫ(' uM:{xZ%e"ks6XPؔZ׼W`KlUi1*fHue Fbl):HjR>щb3Cfc]Ǩ!kc1Y$[>*D ۈ<:Bt abiRQC=W{GEv́U=Ӈ�-IJâ5;ʥ"�Yև=͢Ѯb ƇyrityQ1O%5+Syb؍}'naQ*3g!&mDfUͤe2ILL h):vC9Btp:I/QŜî,pbb%&W`iwd HKDhx2̢%6 ֕x2`&֨x' `B( ZI̳*ئJK}{:*-Zٔ>uK4*%ۃEE<fA:R*[K"RGJeGD'z"�h.&DTa)3{�[hMpm3":r9[ZlLs=o!8/(XEv퍩o4*<Xn/sK!ne}13�I1>3Ӛ&EEl u*RQffSUԉ"LH)b lXB~rAEAk*iP`<X[p:0KDeXR_fZ.LT|`X_ϯW|yY4pC`K#<Ve&BI .rHT|iֲH. P1_Qe &>Bb:Z* v!S“|`'ktY|ÆbO{ 3; \sKîNy�Xڝ* a2`Z|`Q_Ge [=^�:|n=)/ K1l^e=l~�츰\#kA) aI04yE(2Be\ *Qemy2{LXhNw.zit`'+Sc.]ư-ze]#]F(2"#袗FAvA`czԷvh䢚EAvps"Ŧ8sU/s`I a%ILivOG!JcKFq|T`#d�W# &AW/dą-rF[3NqKmdu=n!xxLc  %9|T`[v7xV[Hi7cx�;E6ǃOcЭt/bA$v&ILÆ3ELMED8I0q Nz1|$8\FLn#EA.l)({lw: &a<X+&Nb {|D,n=ٗ˧ Iܻr>I| ծ- fVv\vbA5Dcǰ[s\E$h>y; a7Z4]$A1lAvI|� <oR| H{ -d5:݂cذ\újE<v]J˩3zwi*Avh:R*[ ty {̓wHydG| U%A A_v: aB{D匍MsʥmarUcX|O#wA!}#X>Xi>#/X>y#(X>FLA I| XUx[| `jv\v9߮"F4`dpL<"/h>R][#\-eft0WN4`EAլǰ;i aۛ$4`#K߹I| M7MstK$A1lXJ $w)6xR|#[̱)Oز3ijB,pPV<b(EC{ԉ�IA׆h` 0/x>n3)-\nkL<:Vqqꡦf夨8a2O,;}NOr=):G*5ioPQqKWbR&Evo}$䤨8&FV% >AEŁcᚦPl2)*Nti䫨]B.SdkfR\v($}Wi.eWPTh#QT`9H]rSߊ.`ub;_QR�3 C_.VQZyNnX g3nJYF4+u4;RN#+N Bߔ;SfV`XȾAYZLÙK-`t57$+RK7CJs"A.YdEj3eEjvυAEjN5gjvo|sZb I|wEiYZ {0 *VK?HADGZ�ca W'+RKGFSȮ`V@wsqtVɚ_}$8YQZX1p;+JK7cI;]@YQZ:5Q3dEiu髐dEi0%P؝nrY1ZpS'-}YZўe]cYYht݁חeXα&3+B˰cb}W_WVď,P*F {t+F EMʊasYEh[vpڬ-6--J ,u;_Kvܚ-*uhɊl_e ty?֌ ˉfR,diX'K`AhNl!ӌ`B,ml۹؊bckar"� u \B,ml -9i96 -rZPXBiCk8ouR$kqYW-EI"لo'Icc"L#Э,Ӣ29"Ք"L#LĖR9S-reGYw9{-C=.\۸˼ v\t<Ђ˂R |K),Cc_׽K`hXvg_Z,]REԉKF qNXN-bY?XdEƖbi�'JpBK=-rX–R9zB9Sll[ b [Fsaw: -d2Zr1܅-dl-X2N0dXS awu^SX]B(Ba)kqsB t\^l)5%w)vL fȹ#Ҳ tρO_뗯?o?/E|͟^<}O폅Ս�?xq^uWpaYIv�/|G?$>c0ݮzxG;BzzXmw['^zT]" KwlwknS\==q}i}Vid퀀^n}ls;qv^vG܄kw<_(3T]DLWvN=�w}e}#X L[*JUܯݐuU~f ;~vI)"_qw7<٪p{öw}̱;w2ȇV,nxfsaqᶾahF6uqPZewot w~zۖx}]-^^oKpz͂\Xyw˭Q6ywcu6Zl:Vuy>^q;=}uc6wwJ[ߑܮvmk5Gfi޿{]۷wy6qg~GU]uQ+ m"bkK߸﷕4'qq*ܢh T Z2HRclwlxgaF-ۺd{wܶw\Jtn&s2f<h}3;B=3lYlM Ϲ;0[hݽG{),uv[^Y6Y:pgCny<[X:@)v}y9nB[^:Z�r mkTC.6.ֽ/O;U;vTJ6Ÿi+ۉe~eAb(op90UUb+pxka\)Mk;&iylEmUSԄ{y[,(O?:8FXO: _$j`w}/W|ܘb(nnܰpo5RC|Oi,!#nwIe;jZ#wp:4det0<Ѯ 呎 =좋;.5;V,s:^ pʝN[ޱjYJقPYyؚoYkWei}DsO%l vgږ(onW8Zb,l)OwҖh�/YVy#GZ{Ӗ\;Y͚ pgS%/8Wl˚�.߮ 5.8۪5W6Om0xѷy]XmǸOaҗ^JP6/x_l㱭njg܄'ainw{6UIiWRԓZ_-TXNV>&8_@w;8)]yQFGyd#^т4_\h\LE)p."j2onxecB+־㑆!bD2a.mI ^owcñǙ6q38T492n=G ]U,vsK'+[F+N8d+)m.Rm_4RD2VM[te#sn,D p"ae�Z]rb0:ʖ*)9\]o8B /CT,ZRmY%쐗nV>&ẓ p2E6~Ϗ+ϲՙYYͳeܜaSaxtJ ^DIb,,|vHx[fqiN_pޞ8^𴚕y$?;Yi6<ޥ2ájpgGU_TkܗNlҽz↶{}w1>.˲̋h8ϭue6n#Xp}y7m~HE4 `sd:IN"/7]fS$6' 򎸜qbS{^Yןo 93.Jigt8AۻܷYi5" 1li=fNXaD3,n ?bR< G~ux.PhivXAxjs oLFgYRE9Q[% < z%uUMbnV0&uxJG5.a؂ U$wLB**,3 dY o^a(Ri'I~nV9ρ{,fuUP[Z3h;s)ǀ.b( KoyX)(e5!-nKQ靺1xzֆ;EpaGEh8B[{M$7te*,{{ܪp+C̬@kw8**)t8઩TV*iq&;/)1G]WZi+h/ I;m7ܻl=[b'jad�/Qms/A(!1\>hguBک½:xP%E}/?"f)||C+8{;`b+k1Y^9&%﮵`t{m7Vg{MW .\ 6sDG"om~(>Ca@[ ԃpZ;ƧۍvHs@R!p9VRѵ9^E7`ah3@%a/Bޜg4ּJB[1iU+ͽU@h鵥<~nuӜ} k'Ɗv%%X=(-0"?C-:wt.|߰l})m!p}~s=ER΁0LL"⡑0N;)謁[]x$SلCQre)u'Mww<f1al;Np1ȢcL Cw\ҚӖN\ՖnV=f{mz\TU%a[N##<ѪD]_o7h,<QAtxojHm[ /]j#]c*(dw2XJ֖㥫Uօ֊cd!XphCh[$GH Ӫ4V\VJol}?D~ReN`1pmh<2dZEk%|Ѫ׼,>*;54Dbⱴ.ޜj xBKOiYO=_= ҐJ %;: /zZd+ O'y6e6ڳDgY3,ɦn֑'fcҳ<Z ha5{o~veUν,D^R[[kk-Wj[XRfZpQ -dښ4Uosyқg"!f˽!U-sy5Lka+[_~{u)USYl-\u]hķuy $oXX aJ7ŦkI cBb*DU2+uDT. ܁6Sҩw|TgU{cd=CX`3 Tڭ}<I2:uKX8YYJ4k7:{jE~T{yeoI77,,#eE$OHiQhuHVxW3;uܿᥓ䱪x:kຉJrХ!f15@<#e_$TeK흴2o.f^y1a,WG68!Q6Y6aoxi#)m Ũ<Nݰ[iڝŦc쪊wg̰t1cwx9MKݧ_δ50a*ݧB֕toxkc:kF<Z.!iхw7 ?u M7nϝ.}f鬖(g5LEQ.:" XjtVtINbF/*C/eTI2kI\YrY-eAet-ZI'ܩYK* ɉ^:ZeX ' =N9U]t4إN2SZn|+^Ϲ0=ށbXS޵Nݲ,,@&I)|@g1X۪vXJ_kE_N- |@0ՖmN3Ax[ƷdE@i×`Km8Y6wQVx2Zؿ2bp:u8k^c|^LkBdC6V]M޻g[h`Ӄ=}֓j'(dek Y3{o'X7Zq?L#OzdsmBJ2g/˖a#ݲ gxl9P�S֣h/ ݖ֪fخUzaPb>װdO| ~B޷$K٧ nxfn"n]tvD:}ܴZ򌍎 0]=Ǝi$2p0c5I"@5xnX]P ı6[fCub0ߜjc,Dk,[` Wk˕ܰiP]X\ZuuED yyD4y)Bb K[OJviKwK i`Šzyw(û;sS}@az6|i=WRP.6\~:k.%gvPo2ϵ1ow]ml7W6tE 5+4_ڮvHXzS`#⻥'ۃ ey$gAb,:PƗfl"PpT&8>S[zњPɚF :czYdk�&W%zJ|Jlx:xtLYh}5d4T5bD9rK߫ɸ.R<zzĴ#w^W88aaё{-v$L;.eں ̹߅vZ;ۢ4P/=n+ [Κm*OlT~НUH]ٝѮb5 0:L$zJ<|Xv`+DZcpb_j<e-#羠DG$S;BaV//=4f%)m* "%V_ƌVgzk='7ELJk.ܘro=s\rYM/[!f2a-T 6jgb-Wb_g/tA78ӃULwKƮMU#kŒIaH*q?5 V݃V3MVn- DlzP<"T1h+u$mXn&e\jOe0I6xᵲvt0fgs¶>LIxb4O zzƺ7ްp+Yl_}Om38 ~-6z\Hg2,-[&^A 'S'Շ`ye $$ŹgyإxTrֻacd:m=+~Lا!%0B/(` iՆ./)zxMϴmi$⇍^Hؠ8m:w=˳1K5e &X5Y-Lґ׳/9@Nt|GI7<)Xa{ކű"㎃EdQy8s^ |tK750\1T5>{=lAk8s> /[ 8V;ԡ-K0 +2_+gi.rKYM\QfxO!Ӿ6*Lnxl6+N8\C%~%ScoI[-/y/bDE1z\<)&jCa-,iZ.V>.wL[g: $ KX0+{٬p\- >#,/8 6 p-46F %/uY)n+'K ܚ-,X/=f#q[qU|q?6V1in9[Kdr\O-#&l*#iJ7 ۟~/Ⓩper;Ûtx~641\,=Ho^Pv9ǜ|7ts[}rG&qvy~'`HT\YxR%oH*ꖡhS~\i-*-GC29{f /ze.U=Ն&B\[/׶pů,wQâBם$ᓧ[$E˼| = -9SA"z:uT]^,Y6@E3x{6q`qW O\n;M{)eҸ:EpQgGLL[ xEjy69ڦ6z^r =)2{w'zxƐU>8X-nߛ1E�o1H�kA9pN}d8.nW[Ώ [~'udže'zLKKggrzҪȼC6|Y ~ٜow=i}ڬQՊKJe˸ >eWTS@m6˨`,z3[#HviL:_<ZyxuX{+owg~ॱEr'9cqݢ+s6 i\Ixn>Z،a:,K2}8[REFkc,R`un9ɧbx߯QTmЄ#P֭kC1Yq=l݈Ӛ]v0~܉۪Iq'U[%FqX㥗;noGWjtAfQiw|'z jfn>̀-I.Y}+.:xur\,O$cECߴd\iIԹxUADurWV ažX҇@A$?7ls/zXw0Z*ԼdXkN;q#qǶ^MBkItn:D?tz勛WܬY\UXLlC q=s}tLRJ0xJ9tvF0;JBCxL۱r,<i; s<#q=t.ÖryjBř~25VߘLC=2z=v}ZRѝ6HC화O=/'Xb]L¹uVbsקBmtl[Zi{p=Sma#t㺌\r]DK8ѓyBly<OמG<ӟ>C*"0<[cqT6a ω#tKZm)FCqx _:rz< 9�aؒCs -ǘcJ㛔X+n52fWV<Nn(-xUp~pbwC_Ňw͘'1-\U-Hxm݌M`Ŏ"¾"d' 1Ϲ $2^]+ 9ҹy[y08eRjZdj6&._ݴc;gDF:!:B~?14˳[=#+.6^kЍBtz@"Ľ=J_lԹڏ׏mDe뮜XDVmй`0Z:[ߥoÇ2c&r.<FתXx 1h]6_b,8�G2OF465a9xݜtƎxvhDzx y5~%]DI{$T$w]yHl#5?|v,%';jqejcՌ8XOrYn<0[OecF9Zu&yr5@}ԎQXv9w@2F 4dvO5М�e0q_.uu/[}a&l5|}wX- m:>)opK%i>v )2<* 1|SMx8<=@ZV ]2zrY96dgmq>xZ-ګ&%NEpo9}nh!-lV7.GE{NQO_;ˆj'/}4ngYDA9<׎L7sTiZ- iKBҶ{ WFr 3mX1D1nRKL`jY3bMdKԲZX(LWM1[L-u*^LnN[ ]C8K"rziq ]нųӧY4m]=.rZy.Z?8PM)ijrbc pӲ)9fZ]1iolh j}/ek؆u�"roS)HfuV 뼭GJthuKەVsN 뇐=X#Yr^A/rxƲ6$-{"0[n 75n7ܣM}e<Z0R_KX"Qk3p"wôPPTHǤ[-wnCJkK m'n5<g\_m3$vJL1~ P㖲G]\llv᥷e:'C%/{i_wŖZ^Mn6r[K1WuOnݲq 6+ v&L~cp_&$1"/g%%ЪK UUΈ62~{J\RєeG{nǙ5)і @Si Dfa_Z)n l񴗰�[Q`ZUt+[!"-[xZ(]+v"-@.Kb5AmU⮨-Wi -G ;A3D ___R ̕ICƉ#X˾V{M>iѶ$ "1O(5xtJr0 )z.rJ' _ǒRAJ"O'6Sy9` GQ96(vx?Iu+beie[Pɇy*\.*�`h/NM0^p#Nא.);zlw;TH%I:^8\I4Lq!o0˯K!U.1A2%I]ǒ=H &k't JYHլVRk& ]GH7uh֞!izmkXR<i5I/IµHc* I *M SmVDLP8&I'fvXLL+<F;ŬTM#~t)Z#x$H, /E نCȞ)|m=�JTɁ&X-,j `"Gg)swQ^YJUPQXגeXWh][jsM}QE9$EhԧvWX2ɱ,zi'}[c-rUU0>Xu~B %|-*!PXs%{[`  f*+YS@rA(%xcN`S$`(թTAb6nNHmV*bgSοȋqmVLtS;aɚ"dtN5Բ)p:#D#˹,,xI3A_ %Rxos1@u5n]Epev6FfZ2XB cIɱdu*|i ؊1G<,\WEl /I9ZlJ�c@Ԛ"K)ςKrDvO*`7I"/Iȱ`KO4t <~O]tlTư[*^b#%:kiMj-YmϜs1&IpIȱ^Ra)�u2 .ackxSKn鞈v-I92)DRyB>rsh`9fq|H<I^r(OSm߆%|"[ 2cs[L7{9-@sT+mht T[yWZ4r[1J'rbUR.$邑ҥF 3pu $IZltd9'p[۷5݄g2C# LI%7(3vA;! Ә1 %y97DKTGG֊ݎ_}ؒeݺE@ k4ZU+7K(ΒmII^݉.X-2;'I$f8Sa1[> 0)qɻ>Hy?`V6w/׶}3.k25Md#OC<He'Xq#IZqkOgh`qwiq<�ۤ~&Cc\LTG\[&nI2ɱ`/掤 �(8U#;;BB=c'0qaJD&rye\<z BPAn1!B kȩcOzJsÑX I 9Jv(g.G?1K9= Z= �ce GA9L) Z{hjKa|Nt4q96%[#HOwgʉz $V]li &m "[dגx/]t[*Z*شuF|Q[1xNTmyB28k&Jz{϶8Epfpoӊ)l4j5tfۮ曺~ U9a y zڢz1Ԭ*tJ,!u= PG "S%}&lrZq+;E;ykͣh(<.;!kK$P6&-; {$I?_BiwN4Ǖ٢OHGQT(m "(O*ǏVT,^ ϭ6ȓđcv0v-hl'F{;bhэ>S dЈ{}hD@r`c(HxݞQ0{}d{0PPcW# OXL&I%NJ1GO}GniĔKZ̢;g87We^TC&}_;fq'/SN{ W-5%N(I"ɱ6s'&X|a1P"oq3~1#P܌,TrD,5`e5#j8Ii^uza qOJ7vЗزq4{+Ͻͧ]o|ڦ~n稍Z(FH{oI+ @zID|}FB!t]0ƶlIgz*>$;(tQ(7'$("9.PU ١eGW<-h[bɱ6F-_ Fb<ܝ wKcd]%ǾAE(9 >\RfC̍ è݄S^9!d)Ēc(j_?Bh궧ˬbhĮ5 L9ntZ`\r &̡GӹsJ^5 3^̲~nPh[԰%|V,v7I==zwHv+bU9aK=rY%5hA fpd!^5݇) G'@n˸7BOJ7BmKв۩Ѿ_4-{P8Dh`7ĒG`*«*9L'd^v_[+9j >t?؄nW4�%גĒc `1"W$喸Q5&uKSK-XZn-*N` 1bQې;eI w^sm-G֠Mmh4{)`S~},LU/4BBII^Q|Y Oj Y^%=ZZYpuӝ Gui&y]<̧7KM)Ԉj- j/b<- ҥ~YsK^s _.,X0ncXJ=MMKXOv[N J%8Zyva,ȑ85̳YVS}M "jsUe#=7L9]$b:.5'rCV z1]<[wbKۀυ@?[FX+Νk*i"6Z w[dDDf]4,֏=DEV=R"V�Yr1S,(Ol̵\'ŽynOZ/KQ~jɎ t#vhP (i,y 9`wbŎZ Q:uSZ[PSc\lYI+<X[6-I Fᕡ;.a?r/ykYRs+F#flK c^0rbLa>tm钟3tz( э凰f~Q ؉t[AȢi &hHPXთxGН.SiǪAȉ{z3{Zk- =lԓP:JU%l4lJ!wvRc{h0E%t~f<ɇ&ѯ|%t2[xk7g�׶F&% k\Q~XHEc9X3U5/hhuOmY*s5D^8m_SH)䅒+[l`p8# 4A3[djW#|^Sj91O0'h2--=E 1@?`jY#ED'a#3NM {s fJqv7<&t[i'V$'K%j\B/{77,X[m1|b z93x$0V[o)U�bi:JJn ܝl\`5N�ߡԷpKZ!MfxTGZrni.yCc涇n}>F-C%LuMK:fp;ǯ=&\rT̽3p0yZT`Aظx7{I`}RNZ Փ/e!]U{D%9[Z38bvRBC<#j3nlnc{'Aa0px8_ v;j^loڒ1g䱼 o U8D܉cd+v Rf5/xx[wZO:r:0#Dl(*3k7 rG^O$tQāl]sZ".ƻD$ngFeAC#<nז}$ a^ssvyB LP |Ɏ|O3V2_j.ZJQt o%)~sZ^.T5 "}H [J:idz-6tͣg612;C[Qvx=c3k5AG{.n1ajio<Mn\WuT %x; -iRI'+eH'lWx/`12ԂId-=5-%Q7l:0ϓ1ƄC`:Ɏv�7H^`3Ԁ&˕V xHZ6 Q�:tە-5E /x #6^$Po<WDh&el9~,I9-`cm A,-8CXؙWĝTR  !> 7Yd9GqV51@#㬱?>g L3Cud\ǩe .ǻ-yMBd"h[Dh8\\3^z?IBl؆- jRFCӜXQȉksNβBT9ag &a$F+%8)po 9D<<1mGa {N}hGvS<C]_zmew"Ntiǚ/gė=O-RӜԱG#1ˈ.vB>udzd@uv۹R8M Y;zL2"l 95-GuLcFH[%/&TkmfL`M:! տ)/4vZ; x�g|n `!*)|JOѯ=&vHdM&r& <-햙У 7> ~e T{){h4Xf/#Y*嶳yPlv;L8m9&OOk2hg'k[6k=#DmI );}d vB5PR2W%(]=r86F/(=˘{ГZF[7 Wcsؽ|i;+BpM ۪aeYqLv{i[ͮpsΌW:\Iwd/5z|X\ \a#{P#R&ܜ5L!MNYsWUI(?ݤ>(.()K*BW bM&˼|6k?+ӀD|'ALvɋqBAq_M U5)'91BY#*{ DoJaOȰƚK>PrB('5{*~}%C69}y- Z,p@϶ q L`tϧn-gb[6ۄt{`QN#*e "~CO6[ O_v"B[|d ~JQZu\ko k >]xdP(%Epdg[AZ"fX �30y`D=[3nַTIޢL_d'ؚ(2$m+ pFP],cޣ{#2>h<Ɋ5.9q j @,]W`U-\WgxWCJ቎tE֓א1T agU{,Yyot~D 7IANn鬮e]A_8Ւcy q2^!ϵbk7&3L&QZO cDm4HD򉡨gs+7զ,6sϖʣSnxQVIYƺ+c #P¾PIe]ZF, #e}+"`Xe?k"9F?׿7 d~,P"pӖM=g_ .cG_"œJ>QyH>G-{1oqN .G5`d$kS[ 5kDo b">:gqz܊A1W5qRS䧧fkAO1ˎLGK +F r h t,Q@T{2ښ׃!v2Pti .T[*۾ 2$u~7n8Y@'):` 7}Vu\AuY7|]ϹV0"S05i}bC&v[ ??U"TdU,"nXk) =jOyd'EZ,ϴ&b2t҇BVQִu_h+1u P&{Ua]v__x>֬*ed*�ecB7Ǫ<QAǒQeta2HbRH|q۟Ry"ڣr4@kE.$1iDq pj0z¿J5GH׭i6�e$yFOh&S2lInTsm)-[AJk^Zp͘ lIe4Gi7eOu oe#ߵXWlN5WI ,"Ʒ1.wzQDpxEMYmMz%fO@$SI ǎF9a _E(`7*3z2Ֆc ) 9I9/-#20\0b`DNiY3 J fc1_D1f] 2|sG q>zK1<[-mVp>7f@ t| <{$ @LrDZυrt24SyWߕuvZ.. u=]JVΉeMtxU94ݠ?2SR}+@L?UTr,V!@Ԏ3`BuM JhX[6b l#ABOvj&d7sSG)BTvV6'Xr=b.ZqܞCoQ4UK~$0L&BoIPD}(ѵ2{qz#[Q#K d,}PliV4wkoT- WT/AYGW2Gw Lg"9('4A #`�<+RyQơ;~H 9lw$=LX[Hz&`K)k6a?;vJ*_"t:}Nc^ EOxKn;:c+K6=H ;$ n?_8Sɂ#=EvM`hf!yYi-2٩5vYt6kcw5-{P`ă)Q*�zɸlX8VPV qD sYbylW'aإNj"o--;-ɩm!= Z.ȢiI%ǂ-335?vE/*k-X -b[Wǃ%<-+ 5XX´ ??-o:Pq _L7A6Fk %ϣ 9HEy͚3-p/%,P^k2BFƓ=0-zt!ՏY\hm)XL,c.*+:tG {\?,eaދ3b=-D˘k]taP8lLDTfX+;=od� 'NJ=Qf_<dG[R/䘔稷4fEjbF6u2XLif.pt"wgaJ,9kDM50|O35 q#Y9řNlSɞ/er6'b@V1JTzmӎieʖc t`<z%e/D CQG& %a'#~ڳ{}p Iz6Q8馆"fFT"@?O11:NTPqh"P$9S݊$nq)%;V@9e�trJ#̚IIU%)|oK7;HƄ`q6cdzLUGzxYi].R,u;a %h H]T$򇴤$s,Y`gƤDh `]LٹDZcyH|VUԿxG@o?KuH# $n+Fĵ 1|ׇ*%# 'U|] vi/s~䜆Ut.!HvL^kpΕ $ll1j"XGn^^" pGW2E? u&Du c6",I>f*F5$b}pK5U >,X yZ$nknu>1>%35&[faX^Ӷb31b;-)/ǒNcGr�Imck [ [3;&;[F5?X׊evEvg˲O<@D$+y|ډ0FЇWE>PJU$sXJ=a l{ ҽd^d"�+ 5@欋/2)BObLMio&5 عc_4\.΄=jXd-;ڭ&?"CPE?Wc"X3~LKK;+ �KA&f$M,\ERWURŊ>5V^<VēkZ$w wuNgGA4Vb][{i3,Sb:[7nPt|<tFcT~B\ OZ50hc<Ml[ Wfػ"k#{11}.QdJFYQ=`]#j%W}]22jr"l#yJ@zckLFU%xkت9x{HH9n=1](D͖~y_9X/˭98۹1G $u.Px?/hB:8f^�9I~Ԃ9އ&94V$+nX>'ð<qDyҩf<~dR,RnRgZƽ,:9ƙ8\ﰥcm ]> #sׂN:8 H}ĿeAҿZwX1 v%PcKB)<]bg z2}_[ Z$2\eJmp:s9WmCԦNX >$vd`2"Rpe_[6J>fbU%sF.4]H X/x{M X{]u,C#*H'bs]$<-J29 == U@Ckb:b&)>Jz;~HL9VlG­}eN69=~csb(9Rԙqr[VN!._sJ_Y/2[v6u5ER2;dQi&*ް#lwq7ٻՇ9B Sz*R1hC b&VQ-­SU&zeem/<礶4@` "g.5, OH;9HJ9@sPOǑOUzR'&x{ y% nGKD&iΒ$ dTm5Fț6uPg-�SR1_'1k$-yWPߧu i@L㧴frhC$2<S8WmaRڅa Ə@M ~߳Bb)@̍5( z9- 2ߢ2T[+t`'Z(/?*nU˙w*!TiݕhR#[ )/R?zwz?IHmG W456`_'u M*jLlN5vcl ߣ*v.lvB԰0Յ4ؒr[R9&C'iVad7˽ /bԫG Rvaha}2,KEv;ZȊ%*P4.2OlcUCr6!'�J($cKrʱg`/15rG-EyN& ,/%ud/ϋKA`[Eb|DݫA iUM<_>?$|'>8iCD}wӜqWB])ۂ46Uv#"Y堐EHJӶIMڳ<YԷ'p6� ׂeڜgm3 ^ ^#E�!ɰ(FO.p`Y|yx[{DvLb1/q!y1@QA<//U7;)fkG tYFi]0D!H&~j-X[ȍ~a=` y-d>B53[ lgBRiOS[o/O Vn [!ĔۊkD· o < sNH *u|=j b Ho&)ǒ!eNK=i5-=k#YoԹ93K�&rMx6#`7@egI ч}[Z'1 /]قX5ãc�d$GlD'zL[Rh2QKH98Ѳbt ݐ݊"{ RfjPZN ~VQq˾gMƤ(EpPݙd !!iyُN xn3[_< ;]5XJ!b[$+n%:O&ՏAj-O?j`K6HVBm¸'>a )ǧ=&K[#X$!23w:P,J'u?[~nٹ&Ԙ A?[hip�x,hg.VYEc!2˰w=a1J c 3 T,n)֣ '7ƔpX :SЉ=-yUц0.ⅾ2^m=\F$Ф=JZ?0 bعL]]iag^pA/սPqҐK"Th طsz,A_|<DpLkZ6{aO88NE^x i^W=S>}ֹx+1> `P2_%ĿkezwuJ:i: _豴Xח7`~3iR-nK X"Z>=e^162wR3:㚝Gk!/k2!RE<1YWK.&ůGZ2ܲסS-%6C-L�`VNl>@Ͽb1c+AV4}B`G,UT'/pLgG]d-y#te;[j[H]+Rt@/}La:y 3@'WkG/a_)[Zhsf^{4rb[4~Plő⪩,E=h[!xwL2`d&,qÇBE+�Qt\0V1&D\5Elgmu[,u3m^͎3vbOݳ3X3o[h~h:Zamɖn &K{z䚟^'Қa=1^Jg'�cVG?{`w0-T׼,㬆:Oz}g0K<-Yf{&Zw"?kq-o &=vrLkzC,c 2ʖ` W5n=0r-HNg<!.]^hX1Vz~:Lg8ťI?Ea5r%\oRbi; <j߶a;ߓ!.M,`, }ߧ+o9OIT Tsi4Iġpr�ԓqbu.ΛRana 'tvR=X'誸c$ usi?b5<M\opZy lYb[ ؗs@*(\ ZD`E30Jdt-G-ât-]xR%KI`.ۙs< XõUIjW#.::qeqSa'Bf@5��e[L~mijJR|8Bc8 |КnKшdFmSbM_:'#^$/047K/ %T'+LeJi}{7%^j-\~ָuTaIǗ{o'H93ުUZ4(K5o>ZŝI_ 2dNՂ6@&KuϔpZIS` ]M5AZL4o؀QOvc;5t؊O|=K%cD_uZ0L!B|DRco5ӦY!JN*u<բ]]lg).b)5û[Aܢis&yђY)<vid9,z"vj팁VK8>Q#52<u#m_`��ʚ,3;N Q[Jz-U3%#MxBI$yxI HX5ocaD x\~)Y{ĩ>gex˥k2BK7~, ){U^ ##_)�bz{_k!J1pvo;4X9?엁wjQܲ+[ U<5w#;E zI x UX5r+gBS˿lgS,ִ{4Mm2[af{r\5s1B D.֡D8JcWl 8]bLwk&ךѶyi }hqR'C]SȤP5qC? "\}q;q[T d7a\xN؅cOl=E|nf;F..KDDLFT5q@ vnJlBϓ,4,^)hDaybGo|v![Y•>L~Z5nC }$ѕ5ɂ% +{�kYb'0YadKῗ{Vb6( t~> ~ea@wXOγk TlG|M\YE=gׂdFLESۮl?N 5>_N8/awgfoPd',tC{gl@~t{IE 8#Q  Z: e n5B.N-Iƹ1n C0@Yƭ#ÉgrN hUsb(kS8}wG$ҫ>f@.oVN mab!jD] !65j:%O9-v2o*/BͯŃ�ƭL!@یg'IM&_4 {џ3DrW U#*0G&OOm{ZLIh20q, nj_~(ZׁG!^.#v`)![=N9 (mx% \_iPq~?2ݹ-BJV(MQĦj<R'C].j"B|\o=In[\OH ю7l1Ƥ|1l3`zxB:CQg݋/ǬY\CK>b%'u4|+S2‡#DSA-f'UEد*=Ȕ[leDa4I4K1tyZcg8:}~ 'YcHNiIb([EB h$}Um09rZDBy/,A~Nt bR*TM'?01nYnVo%GmVc}$pr[o׋΋�ѦR- ; ELiמ-N>lK~6uRSLyȬwn={SLaB/0slr[o*{ӡ7g^žޣY_ׂKv^b"tM>((;Dar_IRQ샡gbl2TeP9"e}y*Q{exW1<D+phKɧ}L2p۾p⭘>9G_[{Vg/ѽA uW&x1祛'@dC!87_dn\b鳋IɧN;rv%6!UӅF26(cΫۂ0ʜ )|plz&)"En-ez9c=C|Pk"JLe['teٕ6cxtC:5BsP4|"/σSJ� 1#LDakabW: #W &@*_Sr9aZR_�@Ts-%whE51cJJMnK$u?:ls$ʌhP8VsM|# [Fz1l[bd24][F=rtν\{{dH1f/m #@,}ip?3I�T D..M'k { .ΩO~G(Gj4)R4{L?' ':o@<7W%lSsc뗪XXCFZyO0{je og7PDyJe9?¶ 2 /ҵ`'8AC0I:Rt J"f@eͳ{Wu0芝d{̤K\N:}V߇N@c5=9ns7di\\= )%I?N0ѿpӟ_#a0 #%0h┓Q/FWZ1T̸s|̗c#ךE5 IVFKV{}+4>6rL2+#H5B,IP~Fl2u-5Ied*XpeTD̚<B[]zsKrfQ6i2%zUXCk!{=J,2UhL[⦟s:TE^cmeN 7'8lz%g\.A"TpV⩐PgIU'jB�F&q[p p9x|bЭJu^FsLpΦ6ezOCN$M0sL}qvX@Hm_V�.#Y=1*X09;pG`ۘ]u+fTu@ag3tk2v"jJ:LOF,Um>=G5pjٕ(2X%y�ɶ5$':Am rlC|܋#^J$S%ZXQܐr8qAo3' AzNJ~y]NޮJ3nuFBf'*>%vSd}dJO3{k aIWE=>ق˂xG./-8++]@UroBW+H5<!�QD/!(�bT, 6e6I5V'1F|Gg(Z`,} ʑaaFƚGCN51_ c?d`FNTrU~ѪP1MKbɾ^[L}0CWtQ 襊<.gcƐ@+X#k(}~ BF ʮ|� Qj0 y6(Xo^gs(gr]7W% lwA`9?k Kk9SsH >gcqxӐq¸W>FNk,7ƊtGYV/'γHtH~̭%Zb:v"dVOÒUgc^q�qϊ=R5*A_I<dEPZ$t8*5f>uB d%j'P,ge5 ZFZyYQ Q ۭ:"ئ."q&R+,zGNg kM 5XMܪ(-+>˸$hNرJcS3_t% K(=Le3sI*}([peu o Q&n�Cb$RY/q+ϼCJfi9^I^AzɊ+}-> ,ڞEQncy6%h,UB$,Z9Q|MIO+lNxz>^MI7W}^L\ǘi;R)H4':~L4 ѶïB7 ҾlkR)zo54,ǼRXO2^ 2H~Xؽp~/aҞvuMt |Jc|(oz#ٶ1lʱtp^bR`ZuN-InO 9UُjrZbIҏ8NpcxO'�1 9l^T6 ֎h,ֵ=xT!Uj9ꔌru1v Ꮅf2+]K\4) `tt(,{'t])QН5C/VM"\&yX%h9'D)K&<yz#l@,Btt+C- 폸Ve fM^< ؊2Aï_h`JbZPOjmT[*[1I3>΀@[J賒vl3)m h t!v )c,jr5VοsC+gvuR%D]f) &X%Ow'L& APeޕ;IsM4$Mw'3I_ޝs<hun-hU/pxq)5 VƂo?0N|2, ^ں$) N'H/$&CAP a,. w}Ŷ2A앱Wd+*䠶Ia$IgHh*j cJmouSwi3te[p- Fk �!("%72,:v!I~3ֻ̣Hȍv̙ۅ(%_k4@,?Sg*6~0cfO ~F,=L 9td"dyUr\ĘX~'M⢱ޥa[}jvq*.ԡ;<AO6)|5I%: >P ¿w]3SYsn/tKc7 tEcR6%0j|XXu֧Ů{$vM;ּoۙe_SZ]F%6%M¢s4GR&@, #EIX")oWr!AdbDE}y#2Q+Mw=rGMy0Μ^P^_gad-|iֶ|Sj"{ЁeJg9\r[I`n  S_z-䚈o- g{i矐sJ^}% h!zDav`ɒˎ0gs0^;:B2xCr3IUոr/0!- ptHH-8G֗yIck c-ՌI$]獟l/0I%!!-Ơ\JueW+v9ϩPj;k$(Z2mB\yYd9 I8:IUXX-*)Dc؝TW0IpT;).e#,RS¢iNobOxt-)JH4XHU|Ғ%RM5z{ < 4PA4bBK׭~nKwa-`GeY|,j9ye@ ,|-];~k,k4h5MuJT 븠k<I"3ak(C=[z`Zo:!,[XiW<j; }U$+gx!ꋮ?EJ#Kt 9h&H "8YB-\.U8SkHzmH{c,{d44J'b&Xr w,,!fTG}fT3Zճܑ N4IO;yt˵h;X{Ն`D2"2mC]y;Ƽ3otDŽX �m2要1m{1%"éɷF;,?%hHm^oAvKAJO^˕L '5xz[A4leӵvtC}OV. '"H#+l;gV/#X:B0.N۶HLw^c!dB?C';۾\/�K%I-&8ˬ"׶ihgt"?g YFd[ &X'=at$ AeM𨖄C#Y_z)W!M23PMrH#Gv.|Uӓ̟2gpR<5ĺ`KRdRB;*iYHPW@f#mFS=ckYdֳ{՘<1h7ڙn@Y:Smy7X{5baQg=V,؏ 90ndKe!gKjSH:,hQ`*`'DuëLx~hV㰝DwP'uu~E8W$ kf-H]}vȻ'L˂w)J[쓑AdjcX-oy0֊mG#皪FC8v3OQ^'BDx4&TZtk?t)ku00FѫN,Iz[ l,_ZN%Qwg5;É-C..z%^M3lU a}6T.z9%Ka4a@ +z=T{\hDi@%E�6Zon˿5&Pm:S})'mJ-Zb?A _9k~1tU-NRiQVL(F&Ƃ[r~:O"-j8Ð]qNݦ𘵤&&㑐 1dCp!=혝^[*eSV-Bz"qۂlA5\|?ѥeuU5Z ed2>z+Y0|N ԇgi;f+ۙt;9U LW(Bec[0Ф(x$WsDjAM'<.]+ErX"[)ÿB^nf?Ōl'5㉦/3+l})�ĺ.bۂۂz$ɂeUYG+"ݓh "L8::˛BS\M "?a*yh$yG$!8sg=)jYJgn!i yEUpD2Dngh=4շF SpBEZĚGo@hɣD^Hn)@:I,n[nH:H~\`Q G10N!ϲ62II"nc;˄Znف3?_Μ4ͻM `e'>d̡ E'+ 15QV<GhUxc3'a_IjN)cALXX"jsi, @.Seٶٜ:�I8̳kdFWTjckFc1$"iE.y/7?Z8Vjp˒X(bJpd. z릩=&[b4&B,3@7aIܱz1v]e:wo"iZƑW0dr'@3+< n'vW! ۚ#<評V}Cfbq;vbsJqZ@gIZn;m]ɷz9[` o&x''1j\k tv yלCTtC?lS {k2^Wqi9~7 $oQBҹH QJԖ8V�VnsWhg]{-XZ ~ڇZ\' n}&3慪jGa~_F7DJ!s"~<C$ƢaQ֫wub3kvu`&y5[XȩYp|"MEsf\KKn !f1A~QTKހ Im"20488QG8) IȤxD$LX֌i4u]ol{sZPBg'sHnٞ-)^ Μc.G FݨE&9-9k|×Ou$z,{j3,VGЋ\vӛ[HvUa!Q0р7H0xD>Wl l�Bؐ=d{P5gE( <>A('5,pvC eO*!<?㺶З6&oM65Lo:H//<Ẕ*[S {nLXPҜ8x=_>ע7?,L#.ㅔ{fǺ;ٶzѵELPXO `>T~oə ye ZLB}7|q" SGM.eW]pRpfuapmnKdzFRT�RE AZjY] [i0$t$`s*#J`ǝ'Hk'pK g/#XqzB!+6{H@S; e�6|yX@$;oV"8"uZHךgmQ@p!z%` V2;>X4I\&Z]N(=H蝞X2p~} 7^%+,4GJh[R!{5ct/ ['q)nI%(ۗ dh #L!vA44`1rPw­QzR-%]my=aZH?e z۩7L]X8AV,,(F-.3O]?)aWSx{LFJ؝c%΋v5閛\} KV%K  akz\ =>*�[9Ee6-nv{84gl.k-^*RĆD sخ3aKHUȈ됶1>r|;zpGFnz T(z1pN@ |Gc"_`'Ī@$IT`G?v/hW(R(`6׽dυ0.>lOC=RιpQ]z'%{UaFh0Es:�nrN^Ls8c"uȨ,nHWhAfwhb[PaJK,) 8VҾ~F]tL5=sÑ79"]&GށoT W #?$Dm2w՞"G]ȡKuTrWg՘W,c�o("ҋeq`It?z/t`'8\b)p kHŒ I R+ڏ+g8ťn8ɖW(-q^0༫_bȷΫ*K&^I(JO^YS>E@]18K@Ub5|`<&~j8k*1=.qrJG&psV7FffUʓD&q)әkD+V*) <9J,VF|!L<ںs5&,,$*snpQIsz!gU2/N %(} 9Ve)w @պ:3v` %CC$f߄y />}akm}ȅ\[9=**orv RϜ&`rdW=A~ w9A ?*k2]J!3r{\rk ;iIJUJ}2ֲnAIe{R+ڱ-/H^B�O+R�a.]zQ¦6V1* 4|P^d9>s4&�jS6yv&#X~,"9�j3Dz]caXHth׺a&Kը>XX<1llW�k<.@;k 9)2YHC1F�%2@iqf bY-º!nF,t/d'46]1{TFLN,wH;jz/מ1o r45{X dz!m 'Oqw7Mk#mO^2<5\݂m*d_͔N(1nuMC(*! (6LG[q=p4"] XtKzĖ{%tr v]3*%&T0䖶P78fDžR;VkYZ<݉3D_-adץjPW)5X)EB#E˶+\,L:۱4t , 5EhENhg4<L$#(х-^kgqFx=^ɖpp̡SƸ!AL@0Y;gt!-keFAт17{LQC"ԗN(kIW,,A(,8bn5g0P c�1+1=!xzQ sA!Nz吪;$xzb5 x5]>u=r[\!QմI-KLb5{B 4h/GSM]aU&zq 'Zm+A[�!99#ȷg-N}&wiYcbi5�I 0@`lhò%1h+0<bMѡv'̇"ҊE5ɹTd4ȭ s+i!w? wIW9*7v$ mYJ<v@b ,8E\{Ÿ !Cu Al)#Ė$-\/+в|:C1[E9avvrli79`<8үUk.-jXk]#kp̓FZZ.̣/?A!B)1fBlQHFO pzWzJrZTbOr N CPt4/cnSb B&@.)X.�؟:=45 FP+/ x@t ['T]CW*@>:Z) L ђ]& 3FMy6ks(G j�ոzOr\M-][.y-G%~C+J? nTph&Uv3I7VF3Iq?gH "V<Lu5|OCmtc{Z[j,Z2t%."R))Fˈ|�=M %ƻ .hIY:tM""�e;OJlgtZ\ʷ=n:LL7>DLX1@b$3+g~Vݲ4I a.⭁+mUz?nvO `hEv;un5]jo?ug=b{,C>~K7VbcBY |놞C"ݮHO0b{%Ż ft:a߱r%%-*SI&6}_G" %msL6 ~/CHa)T𘌻C-N@O;f\ }<b;A.xS7 JZ~tE2˪D2DX%/! ݑk%K^)CP ϱkN2m^I1 { ';i-^bU8'Z |y4gGoN7\n~H-]dLW]Vbw2TE;sKAKh8\#D!8$y�o,u֎ƳZZZIuJ _gPrG,Ѿ%_grʼ1y尘wg~!1wc@f+npBM`wJ"NCcZ% EWZܝ7upTk: ?x b4?o܍Ugwh2m9d(Tͪ dvX̒%/8㔃eh mK9;g'Ie"LY WH%H^CjB脉 ϟ-&щȨ Z(d;tp[pȄx7dd&P#ooGc&jĦ1 c L[avGv<P*QSvq kAYLv"/`nXHQ`^OpO?^'ӣ.9dB{#65P207 A?O7=\̏o-IxEDۂ<vvA iCRVdC ܢx7<J9ֻfv> _P/mVR XDrGƛNCGGB'Lb"d%y0_^ӒCcL�Pg3 )[KdX yV'2.iy<<1mqv:\cת{tǹM=FcSGbI"ǂ-f= f?PQ!&oj{H[п\. #/ktfQ"02eeU 'U\NҔkRr J0r,miθAg>B Ht@q%gQ遚.rѧi(L!a-f- cji=:(v 2 邫mKIRȱ`˲]\gvEXp7+y7qٕZSMVBZ9Y0Fqr^bi^au]G eɗ{GyL]poM7<\r3lk2) IƂ3y^J;{;jWz.5i6@uY-sYByC» *p OJ '@?&RؾZׂe\{O'ːi+QU&}KAk8tk2,I@t y:W׈t&UZTwҋԀXAMCmgk܇pƳ!?+hLO\z;hKi }eXP͝i^P*1pxJVNUfكM N@ [~ޞSqA+-Fϭ$阋A6F5|zIʲohbrX=|gj;1KN Yn쀛 >67H?H#3L�Znzը&2<H)pfIwc tml^$(# K6=]V,$]7i\Iw`\q\r<{t뜧`3nKg<$A}Dk}v*d(9 qI,9yG\@CxR޴ϕ!Aҁ2~W0"·]G]k$Dc-;KU9Ϝ1KzIi2OjxO^'ⲣ+/1ygcN զ�y9&RIĘKٙCl^ssN .~;/x)k 3pH49bHa GsTMKn jz1&$f&"6=2Љz@3$0Sڗha|%cP}WF]N %]`Brϊ b )63 Xq>Q גe1:/yBs]qWQ! C̄ '/Z}3uX!@u@Yv]םuvUDxzCɱb2wNH˯z~=,1[w⨌\=$ ؄D9Q#ݶQ(٨NTDg @T!Cɱ`lW׷bL OA6tB:ӛӳPժ#!qV_YcFkc~ܻ5osQ0,c.[s2!} x#'BP |HIM,bQ\p�BVmv5$lo;mWKN |3}yeȖιCWh}ZڡF-'rF0 y RϺcofzV"*&'J:>OI |F* PNt z &FC ժ%+n#,@mqMy.'Tx{*p@,W֪s$iZfOm+~2fD&R!eŅ̡,ut&k,4:Kt<B^Y&IG@nߵ,d{D5dRؒۂ+!"YǸ[B| 91tʰҳ}ki .G[Z<ꮋ)6CՌRd9ԣi4kC~`o? ܍pK'[Az+RfrtNyTRq^aE- iIz)?ӤJlB,i:[l<XU 2tϵ;Bfv$ȊeUV&:kDWHQPhƼ,h$RaAlCZʒFsg6-ET.KƊ[hC <@ۊeXc`8ux?K0ouyTD]-qN_:1}|٠Xbױbۑ|@% Qo)RÅ`QQ YjPqO#>:N^[:|eOGM(?dT^ǒ6 `^(8߄ir}^ WA'>9?_^>s(EPѶiy{Z@$y+n*h:ı,Kϒu zY)D"`Nx@0bjUoU15LSˉ*uqZO0YHy0zL8a簵V1"ʴ3͐u[q ORZ0p Cx~{X a]ZnD\n?-ny}Яpd3DRΝ827?\oLHu:6ruG*Ih\@^N_ʵBRн>Br\+i2T]f#"y1BÚOgPuD N?Y R'EcS 3q-�vԷwFܲ;G~}Pux<ElȰcؽ4lJ#>5\KI].p.T|eA=b2QV{  7p3%/[M#n|A8؃[uEݧnU ^*)=_o"wv^GkvyCvֈDEȻ4@ mC`.(u_L׫]w}?o%.\6ȴ|nz:m@> >iQ~WC79Q[ r}9Ěw{OwK{}@}i qzɞQ]φ@ 4zqcJaڢ|çZ.Nl\Sfb_haVs&B@&vT .`9'^D{p}FHaReS/[c>zCAO7\\ix. Ahɦ[Wb'0b a}دD ֽs VKB"" -nלG*.(#RqvlQ4l޳Ş}TcZH .n{t[fGP GuϤ@z=ɿBi%K|tˮ[ a �O% TQ[RX%?̉k{: ɞ4NETyZy+,s_C5je>j) KK~@:ɵT蟎ed�-&%]2$ȏ.ҽg]*DH Y?5סmYJ�哚(4^!nA \g+' VϖxE5Ar�<:-_<i1/S EJDq%iTioi&2]6|hrvFR -.7ü|"3DHC<0ȵeX8\GsoqꉽZC˫3)lU jZ3J<#*#4:4bDkp-祃XcR__[h#õ~,qATl1, A&QX nƆZ@)җgTsk,r_^Vr[D߀H~ͮťWix;?g\n-^r'd/PY-.y8Ghmil$Jd�F*ױPM̅-.:R :t56|/1@&Fmwwl)Pslfu'`B h<'m<AsK' 2Z:9qMDž2$Gcg/NG}[` 5-Z=#v4ݘ4 K'moVO=2xͻt lkf2ȳz|J/Vekt25Nř#i[b 3*ii1<β֤vNavj(yol#"%*S[W`Qi|*9횰3;*W:ع �q='2IϣBv̗B_H@fvp"4W^WsWot$`G'VjKĽb{ /xodW^ e =BUZq) ] `\_IG7-NZŶ�°#.j%dˉhxhq}9Km|oi\x1O.@rd˗hImuRĶ@8I((88kCܜmTKN [Qv@i˟+@%ӲԽaDԻWy&b[e:~7Vk<Қg-":u(<k t2eHQ1`zXC<2l4[ru NUAk'7ugĖ2SUHO;-JxqLgNzu56)?Nqԯ[..˕PÔˮwsV~c0 Ҁ.˕ juO8M;|7Nm|cx>[o4B|yw*׻8msiw "[`3u[k]R;d?f/Z5-_*=!Oί#RVTa ݅yok\s/$M.$͔{*~$yi n^ Qt b ]ٝaɕea萦mG7GX댻e <Ѫ+nė"m~80*U's3JYK$ d Nɕ!M!GxKQVGTk? ׬1&Wxz i<ҡ&yN. [՞x ^h15>}V2WLbyo4xZCPTI{l+.LM.ޗ^vw @x hq=@9^bl*%YsxTp0?DŽ4usޣ9{@tp!yn H\ɫYyHC0DPidV݅BݞɌˤj P7\\01c5+YD6h߶{*؉3ƞm[@K~AL.4&B. 9|$6!@?sQB"ǻ 57qumaenhl`MD\3o\m}]7C1)cw^ǗzO/�~V jLCxkd"ـ8CJ(jFΆF+ovGwr5k' _pQ@e6>T=-BbuNgp~ru X#�j y&0n!%.̼:<x4 1dBZNO֮w IA} Jdˌt0,&YGMxru Rƽ]@0[8E%wtIDPj{:hdxڲ=K#A:)ZcTw7kIlR onbĔsequ W?_B'* L||%9)wԥiFO#lW$9]u֑d0�ygJl2SdRٴ7\r2&.n/);d XL^NvgJd*lIIsrb>~ p:HA3jFA09-l^`'WYǸL)ئF]Wd5`+fn팳µ}{n5(<&{-(Wv9.%v}(9M(Ѻej[D"DcȐ�wH,P< 6e{ކVGkQ+@OM~D;2y;] kzZ=;�kuK K[3kl7mE65|G6,F}fq\|&WY�+ 7ˮӵ c%` -Uֳt6Psu 6!Ԏ#1FҚy>4508@[xm=9C祵Dwfrk]0t#NH=m;Փt>59|LB$%]2څ>{ ȏ|1R=ŜW֓!/X*(rV9io.Zj:vq9X Ŷ*WA/[{>{2S:UjsT?JSbQZ {4}}LܧrU '=UHϴ )%qa6�>N@\J+P%E"[ya4vI`?[Hs7ZV娔�lKዌ~W7mz2 OHxvBNYr%0wOzGrWӰOeMh@x jN1V*sȭ uemӇ&yBR̓!\<NO9d>|am e^Ȉ*:PF ntONrLmHfwt$ֿy~#N0hNLsbՎuAJ9&9?bZAYW%eRU`Ӝ4A̛ƗT&c+%1 uz,6Gn+*P9J2Uò@dǮpe:~(p"2z ?"js)ggzB:ΓwW6s?QI{4,ܫ OPs�O?LDM(Da_h^nX"0cN:n"G~~2K$1l{j1{q7 z  m4g`wQcvz6Fe }ZuzLF"#ߗx4z(1I2~/IT*,+6=xvQ@W 6!Lot;`MZZɕ$O9<mD"c$<Ƴ2"u@+PnlEN|k#:1i@Yj6ah82hҠo0y=?@1y`Gx]u<|SMfCN3 3'Kkg:XN5T{K D4_ e^aw7?J<R㡡Jd7rJT!!/MŻ.Ĉ`.2/ld J`׺,)9wEӣfɳ4?-!fF@Fh:np k`gULJEZ mY_5t(~w[#In#ۖc[M_ ^OIəw[@ϙNJѲ/KS2#OԂ[+C*}px\T4/1`S/]: ApSd �L *x#`p.)|w%ޥIVvw[k:ZQu-:O }?薖8KXJkOe-Co.ɻ];�mu;}aK"NƘRXtuĻ&nO2` Ҩ=03:gS_wg[Ax4U*ߍx1 J]^.kU;1q{V}tf.9Z3C(MN wVNpab&_cJ6uy؃jxeI01h{hFǠyS[)TA NJLY#:{RZŖ'*soKv7۶8 x#f8y{Z Il)ܗډ&L -IصL*mgH3 ɞETmYxVZRT oKU9W&Ώ%,ޢt<Ș�|@5 @pBxA3 f~Vձ̼5u"٠6I7B֢ݛ uG ORAukh39�̑&1UT#M?w]غx-5|9N,U;鼀y@ت*\N2 ~sztE*㍘/XҞ@jC0}r&a%!#9wä-7ψYZOf*WcO^JL9> &TS oly:0(`Z:u@=<: –Dɇ=#lClźS"s)c<20K^Dt)N*oUG>Vdz2QGJHlX{�IKys#TvxRH<pﴔ j9\F!ЯñTjw51'];V! ^ڋVGP,L3b{}wCn5^3է;K# ڭCUQ 7-ej GPoDl@K='ւ͑DIa+#Ы,w}Hkj;޾ <"ど Jd Ӝ :KLUqGɫH#e lBje k6܃[#T!2 5^&S=F{(U2#M?7h Ԟ8jBز ꚺ:1KR܅rx1EZغh8@0X:S}$jŝ**d6^]qd7bjYEL=K$:W,KgŏuƌqHn5 P1kt|eۂ2Xh1EtR tOPjy#^6%N2 '9W;EK^0%uz**0]̨d[UNImYꭏVDչ5ޛ:T Se!k9 B 1eKu/U[hW54j t3PSωjz[ĆZ;6R�x}fFJvyvs:el `f!HŷGv^` Oٽ(bەǃ\-`n`SӾOsyҙt)HNB?D=KK[a}UDLQW}kڑ[Z!cN/9szWeXfnć`>$? Kq2>դpD� R:q|wڇE ,mC)}x 5wQIHC~8~@9Qr Y,ν Ę@J܉ B =/ 9AͣaDfxwh:jeFҕ@MRƦ~A~xqmgg,]]25vv.>xP8,.•`ܦ:N9Qrܠ_Kr|P)a Bj̴fu}2,=ʞ<_TLK alP>߹hn Exg!rLTp1x d 5L)pR)aO]IE-fca|4 w]'󂼴t2pdtR5FE 9@^_<3̀UmQK$K5Fx[ߊ1FfNTab-33Q+ك.Z%\4p9QrDfs8 ﯝ5c<e:y1`N5荚p mvcڏ.HTaX#p=!`M4ysLZVj-ڿF5�G(3^Ŗ7DsY (Įq)wW[ћ f~P̷"I`C(>#prBxɜz`+M0\.[g`hivYݞ9 H+zIE.Rb.ΓYE]a7h fW8zh{Sv@[@kQ׾ 4|bẻ*#kTv[LE|q7~|1 إ7}Gt$od8:ۿxڣ?ʸVM5dc1+L}vWrB/rGV*S8g G('an+|ռ83V[BA$B&߶O_pK5DkRsDlxz5WqYEN5#k9uH~BW/@mԽ͔p?ǭڃ`1G b D^ȹ1ѧF2/O~eJ3@eжY#2YltM_q7&̗/u*EtGg.zd`|lzΗ1x $Gf@: \Aa% Y�PI=] YJ_eu1U2GPƶS(g2Y1$wA׿ !�곐+.{zPN5?{th?^cL B > ® Sta#0ۉ}xhP룥ҡ)!ɲ}%J]ctm69R(g{'k6._ɠ. h8Sȅ 5'  l>/M$GpWs.h3O-]$4s42Kz nm7As"42fP\i؞+qԅUn( )E 4Ӑ! yC+q/_ %)B՜:/51s !nžxJ!`j(x ÀJԞ?T!TP\2!tngqB A#ccz&kvPTBp`ճ'^H2MRλi*2Ez?/�4MaOPʰ/-;;?JreX*TzKѕ~Pqfa|$n|3v7ϞUgjL|;!9QesIeEq#:߬r& , ʹ7*(+WD>1RZpa.>V?d!CɑysN̋v� |u"frњH=A!)Ӷ|FhFQ" ;lx1@eqyw W^ %_ù>%x)*ێmI0MgeʩDZaYE"*nO<~cDžXO@;74҉=1|P�hqae@{S4WGa`CB7vBsGeZfF0v{B #`Pqvʏ4S] U,[΋u"]>}oΉ7ԈJsِd^wATIg�fw(Pt. ,<fkd_N![?Qvm} ޛ"_)Riv2~8yP3}u b@DյLJ"n/Ψcqr{o:"JTYv!j"Bcn!U+:NαmH]KImlw'9Qi{YS,m5;mD7׿Z(xf~iج(RRO:'.wޠ!pKڒ)~)Ju|*K+DZB)|"F-0g;.U8#c6 �*<g2D^=tz~٥?]BX\eO/ޘ GК?e =g};旤mh^NrBzqs(wP'1ʆzȤXP+Og]gܸ@0N4 kR?ɺ~= J7�̛)0O`mpbYy3.MGPsaF*`"V D 0wCJ<UC٧0ʯ'&YKZFC ^;՝ylxɆG3DȻ�fd\I4R ބϥYwLn\A C ^9+>G#AWb }R QU ;xb@JJCHdYcĶZܓ̥KsO(Inmn >pуq%Cu (JQH%ׇ;iܽp1.7(gt{x7v#lh!S d\섡`V{/}Or59Co. 圉<ރ͵S=s$g$GcG?D kߙY:*G nkB-y  e 'OPȕ 2oLM~iY2Ts2jP+Q# idϚ 7g_&+-i43jey;Qm,N{_\dwI7~==ilςYjDh }rM:zA/ČA1(fy])V~>̰%F%{2m"uyx%hnkC8VEьY`[y�B) 1wϸ@.Ep7 -U֒2e#7C+x1f-4ZMCQT15D Lg?q{G~ D v~N$;2=ԇݭjppp@eO-hb- H!C՚%Y緻B\9n$bNZą&CT~նA֪40 ךW8[\ jwP_OSavFK|űFG<s= ߯q2\lio۾]�l6g ˇ+C^S!Ķ!\9E4o$9̫uǭ~bɡ?B)8Q+p&%2c+Lhp_wOH89qpy.{v'/ŶR(mf AB-'̼=MWG1Բha_z$*oIb wKۘ{K R/b :wpyJtzNVxLBKܧ:۟vD GRvmHpJӻ*DF0Zh0bg^ Z"ͭsp O .rK`9XP!~ƼQѯy6Rz+h~B{sn%q)(�Vp=e`J%(FQRQ wcP_s'8sHqd/>i"HdǕ;FZօ:8īY*] m%Rǃx3 d �PD S.)b+<Ph >'O;X@%}r@#^vN xOqLZ|hj̅7_JYոoi#&߆6N&^:s׼[~1H0ͻoڂ.7.Ir^!i/{M̥VP =^A6P<+ vI.'̓f\;cPnfo0|bc_9''MUdžrcY`6xxx_(nb'9Ha&XTG X?nrD . eOCUO, AK5,&5r y> h8HF=YawTC\n е|kz3sp^s!~ ԦTok{I&M{2pET\{m{!k_eû�rd=DT拘SL# 뷕ʛv�,l&@e}@`:wlwd m%y̵uLzP.iO/U(Gev2^SO{ ̌'`{WNhQIWx5Tnn:3CΤ q'ۄސocu'`(rن јe~xHd7f8?K.OAaOE2r{ jd#Ѹ!0Y7.h@ DÀ)V)ZARII)Ѝe :{)3Wkh�<kF` c RK"H<ttol"S5nh`;U6 19JvajjzwDLae ̧'{8"9 sCN]5M@]Hi2T#aXFѣ[龶=0I >)Wlx)>uNˆ=:G5!=jI0!qO{"*{)2 OBɯn?JMjaOZ b}b鳇hU{83ϓn $zwJ`>KF07Ҳ`5-ٝrW0 >UfTA% R׌|s  A`֦#awv%T~~gg2QhÚ\5YS|aBN~u\ 3'24ؔ~HuOr�F5\!z(]bNr(ෳ΍s٭np\6|@FH@.9!]C`3ÌMUЭu}Ahxr�`65Tw2Stc۩:)0Ő[c[ol8OT'1AAPXʻjĐ|͞.P,'?+2m@1dWO:^= Sص5{;qpcn:j)Y䵩oQK.B&3:d)ܩAhz`4im_r>V4sC1OŰk@<OI$,kjwYt.>a&>U~2 M 2,.g5qЙGum\0|O<`]~NLo-]xH5c`";>{Zn s*s4,gbk9ß[UxPQ$D]Zk͹yX#h]IdyDo0w='pB hS 瑙{H4%/8� >挿jP“DGCT8ͯvT"=LV}L%|B� Sۀ)$TOh 1&Rb.o]d̠(n}Otun\~εf[ #ݟߴăc\*|B''ٕc TxPU?p t$ giܛtq[\*в|J�Z?I!/ Pw"Ra ZSm2\J_g!cs8b@a"cr[)tXuʸv\g%5ny7'Ko 5<>qxl+dJ&w* {r�Qƞ<C(eש=qݒܿFEqQCs�RfΞ|a֪aڵ= 𞳑:5-GQ <Ld,\ q6qfk9i!e2F K%9fG2 ״.g`P,3Iޣ.Z17 G:O ܓ33ZYaÐs精gQP..D\aqrƟR, N=˞EB~@geK {56O yYs1T"\Wd:emŕ9v̻ckbLni'y!3إi\ղge?%<ޭj5ҵ}IC`TfK]J_NJDd)seFAQf* {WCh綠т^c-ILa7We"BgST \r+@8%Hмta>Qz;<{o9Ruk T"\_aUdv<z2!h9Ǯ!]SǼr6!׵}kp8Ak18ïL;\ ޕ> t#o_pHN%\pR 2'[C"}Mu9˶gxVэPEt2oW:IBͯ(Y0|5 ~RASeLсgoWo2 ] *|f4)8BZ dZݥ$h._]Rb8Hzqbd]PnV3!X 8]Pp}R>!Bzֶ \hPJ0 Q*I Be5-uXYz';Rʂ}֩*?` "5>GȪv*#x=X֓6]I l>O?SsU:@6'ukҊ~w8q֫3ݩ*{(GPH7Ts"4)/#~k7l9b|$x)5Rj`f׀S$ q504.6}ήTjtC2<GGe3U<ǧ7Q#cJgwnzMD e-?:=H5Kنo0|vFG�=-Pl@ǿig,{rXsӁ=F ~*%9"LĿ&L%Rs]2&& V|w&> g[9\+L3v/C5`0$̯ ga/T\a[{mo ݥUe s*z 7~9;SsDǥeMCO;Bcm*�{ :SLbܥZ]^2=dYN%$ֲ%]rլԕE0rPTGɞY -8Y+5cJdg/*HF ,9`e*uЖvaٔY2D#3yːhӠ̡%Qip0&֝ yU2}$*vO( mBWoݭS}pDi4Ac`Âzv@CW"P u21_=e{OIJ+>ռ@ sElIֽfص:gPB ]47ʜ\o1F[fޘnא u>Q?,ɗM*eA@Mr'~M*+g’4YR>8֢ɣIA|NQX-s މ)4bZaRԒʃ[xw;ͣJks+.M;Y\R?ASR -'kCRdB@+eG%]-CAcSp$<PmHŀIjL8씕ttBQC{݁)=^[1zdW Bx�ģO/*pEח  W-wѥ ;?KoşV4>wXry7DL3�Ɂm]G Kj:¢7LwC'N?/&GFj K9Y cCd[B0>sc;/T`+~SGBDRqE3Z ށOK fe+ƶx#bHeab؊ޛj - g~nZmw 9@_y8JkZW >B1i>y*DCP+dL U]~J^k"eN׍PpE{ʒ>"&nqҋb&ܖڥGeX_",{-!#b-yiޙnNI=LfFV<b F-EA9@^D4څdjs ./]]F[,Iv1uv|5`:zBTL4GlPI/\ xe*m{ޅ[3Y}t=<+Yv.(£"bIL 3-T-CċT2:t7\tacFd#]';L܈)$0*DVBgB3$w* >M/O񘛁+چm}x+ʅ#f`}'O^GHG9-㽳Q_ ly<  1GFk'0JUSEɄA"+ <ZV4{{ #b)yjHKG?Fi: ȉ](,e4 ʜ(kz!S%p!.5R@YNGP FUFAu :h rjpW"/4[imP>)aA6q%Sp(Zo1&lx{ʅJ[в4u^V,yPy}@3Yr[q>' #`۔^0`R"%gUa͹Vh> RS%ˊE=Jl*'M M7hˌk'rڥ|6[uט/\cЭ<8 iu})Ys9YFa)hr"wN=U>dRIz)E?<.3vA( G!<Yx>S!;_Y3 5DhFLZAJ+朻Ʃ͓yPQ~7&QMs?P-Ƥ&-UO4˲'0(Q4Ҥ\߀cl{v͞tR:Xr v]˼.>l*cES:uMUVqR,M8(VN!:@ UlcqwV`8"ƀ5&':y (`k^`hDBVK%O)Pp yVy9 M#uPpXmk{}&ծT't{kWyO:]!etl9jT@ZgjኳP,rA' ۫=TN א=YV @CIwcOtߏGCpG dZ*cw + TЄ5 !Sp Z5Ԓ[7>'G=7N߶S[ ׶P\;Rɷ?<ׅGB#Y\0Se&KU^\n1k#bokyQFv}l`Si׃^6P)ns*K \J>KULFL5@6 yСNuF-tEr$ۀ|<8FK'f S/ !]G?JP,tRRF'`ֽ !B lF? G֍@!D0ˀL"r> 1/�4Z�U+gWWY-ڑ=SORsvu;ePmoLM:Zv X=K}2#?'YF0Pw"2ވX%XSGrwpUwq?]n 9 76rSϦY6Oo0T M;Pp)y",K0nk4%DNLoR𡠿+{B;+hc{DtpTy_&i $Au#~pZ"r-:"#켒u] d/ߣ2RO-N藖Y1u=b8t +T8!hJvaʝ /k{sw;sdj R9pŔq%}xo}M5gpxٽ)B?&'`xrp7 z%sp(jD뼐(Ք.T4\A}'9B$>aLDG%.d13n1U Gİ %jY$1{׽YcwyҖ+fK?9%\7YB"blMsisdb9h%ܠD 6!1DS̥lzAz4C#0Р%f"ΠAewD'*p %qɕ.3%m'Z~ېk`Gڠ[-16NbSY.\:a2Lt Bg:]Tg`[׳Bl% LC \9w2CwHH\w!IF;^rДR "0\=Q0duTz>+\C@HD,S O@ õړ(\;N32 (d$}x.0 j9A]t8 iΟ<8z^_+\QdE�1;#ɱ^~\cljYj݈L0ŸGMeá|%{gx`lpi!j& irBH;Zn8a_'3 I04Z&[3%ܺcwM@{.+[Z]ۚevF⻣$f k@]+S߯suf[!ХG8!<OL].klȠj5zc޻sO &5 kl^dfndb(/-'rxc}’ WQWo{I~v_N) $&^GkqHJ]+�B;ecA^R!ͤ @ @MG n\ `~##zCۗl . /Yo[OCTLugбͩ%ր|}NwK"ۻ) G.jj?GoU\؍ ۞u_O/y25ky&o[RqN@/@- .q]!¥.5-O)u3FiB*?+w+ܬ'h$\?ܢ4ԵQס"BSudPy5˂,^(*>0E^<Ū -Ҝ~%g}Op(z]l9ԖbC]WU-dS'#bg^f6p*+Ii#Qk# u-z5FW<.y2_XY]}2Ԗ;4s#`FK 򽃍 �>Lo8;ZLeyok},:.Br?eP3K3l#Ք:Y@a-\sUtRmQqwr`]K >G>j".CUK::̼m &[hL p)Bk#iU]{ u-bǛ \IgE(INe){Ś\]mϵɧv+NVXy^".w҉h]mu\]!a$Gf`J rq?mmFAecd \Uѡ 3'A@͛fg"N%( |qgSה-su]h ^ϰ"-!C#bՃ裮h@ zG&:ZgTܦiD&v& l7Nc6J#@Z)>gѠUgQw[fby% R}tաu;]5x MS5ey:Rh v5xE8vWV]d ,dOxv4jK<Y|BއĞeנr »G 5ZҤO<2|kyR$Fs?\&dTǵ'i] IVMs+Z^l}zSԅ "}jrO*ԕ}l.4&J/wLqgEAYUX䴓/K+]b]Y^ZKj?~tݝ5[{,ݽ-}#ᇈi{Z $:wJëXoL_*ZZ;EA]`l]=2cW+/BP8j!bځzqejy%&kkxRkwL☮ݯGxa S 5$y=PΓI뺻`&NJ=:7T)_3(o Цm{6'rD@/&OL"hL9+gi`g'@i&y'dɨ,-d$v,`e'%Iv8u5<)[dWD2.үdLϐ'oS v &wػjt9GbU]:*Z%#ꅋ$It| NyMh2#vpmwK3ܫIRx{/B{1x#0,UFs:At&h\k\# CRȀe"Q8%#Ga7;dU.1޽M쓞yI&Pryq`ݏ8^S MpPր GZTFrlv+S5y-VЉ;t??K!/>3Ba8Ne+\}wZ&*':,9YLi;Q$vOD.pqa s-𺶯:hHs(H^d&3>uN…^$K[y2g?/70VyyS~RK!׀=7zzje4ww|_d0vrMQܠ&/yדen{{kb%7u 1gwåk2 emb!eȥ: a9>Zw |GKO�v9aO1,`;Y:n0E[jp^bPAi�|4*Ļi)Htq;N, 2[%ҦҒh,wAe`Vz, E3cfl ܉kjfz]!;"}ell;>$ V"SqEzޮ@@ӣK'?Au_ �Q+iM"W4~}*,,S,+Zcyy_"kV߯1|<ZpAw:0VorSMDKEw=@Q?rod.> dj9.=L LB0S ~9G$G=ydExw.U-WS#r ,ˏA~2jfw"UNJ?Йu`^(]!J~G J/a='*$9Yh?c$&i"وOݶ,m> $%wR7hG>tt}}^/X@oEk(ptQnߍ67yY?j~DN`.\}.n,NYTHE#j#F`ֆ.ެpMw 1hzq�~[[7k@1nQ*25g# *8 eAȁ]ye#eS\ mZ1FYHmoR-[ =?N/b&Nroat×)ͽ=pd?2E]yG/ؘ"e[K AgHvǑkO${93֡Mm_|@ y.Su3:?+v:;;H_EJ:pt\ȣg:8Z)%K֙Ti: [s8<Np&$vB B6 4JNzcC]�z%5\tRyFȏ*lFtZMy% T=eP<:vX4U E c,~SLЗ6Bp/Ո #^=gR]3e'r0/f ;# 'ug0^Y6s O!k2"S_Z&DUU؇odJ16.lO]T #[O'&,@55M@ 9_o'H>+aL!Nͤ^N7UZ\5{rey(fw0g&Gz7lxuO Jg˜tTB02'#Un2'^ɝ_=ZeB_ . Qȍ3Wpo4#3u3 dSc͙֙Pzl;'9>xaC Qvfv˝sf}_bqDZ.OYݵs{Q;bYJk=N$a˛3ZG(;Kr *[W V^N^K~u�a #f~ou2gL)2}?!K.ʦ= \, ш0]VyzSBu2VN9<|ݝe&O\سm@ g+E{Z?SӜ4/E'XW'#btսGny@Q"}7,r~"_L~ɇr6ԘD^߇[ k9P,ݝt2DBRg&FU'9v_}v(vi:&~'JO^aVTv$);[dC,PzU`Êf!eJY7߽2"tv烨~}O剗jфfCy%6sl 2ծG%7ըU]gFTȴ3_FPڙ+- go0gmo'Yt}*^.yeKuV`;<<˺f !�wͅ"vHaǒUPS0uL6}@U"|2̹ZJ#^x=MRJ(_}(ʋM-H?]c«R7|Jh@*^W$k\P]l;cƥk8ڦ'`zuOP)%gea h:AxyVXB}@:Dh~5y/C2SXXPD4. Pv5ݨmS t梲VȺC悛Y\ ĵU&JȯsUr}p>}-I:9'&/92$frok\$Ki>QUSNX(^oOjɟ{)#Ϭdڥp4z2}kBf w9PEO<IxͬۯP.gG-D)B9#ʟ6B<OuyB-rXW; w?o?oKyBViIA1(k,V/rB_/NHNmo+ ~ *03TzT}εj] ߔ?2TgCe-o.9KV , 08)s@j/.iO)ɞPSGM ¡á1KOR;D-m?fR/(#0pm7\hX jeo<,f�"A21 wX `S(רRsc1pm}H=Cn:)QSeΏOW :OYr_*!ԾJT-lmLpz %'C/ +Y%f<MQUuv>2'[M V! ȖzmHUAZYf:X ,;3 {8%[Ֆ\Pyå$ h Szwqɠ;낊d/4$o=Z__-<fَK<%7ıˎ^b-YnN1^?'dl k#dVQUdΦZHdefJGB=moWm t{H 8aGxY]Ѣ~B\^\ZjhyVkOǵMog D;a\K VSQOf DV.NhR4K"{o9|YGt?i/s]WGVkIR)lG+kȑ:i7G (M:zkC¡qP"TYmHQ2%(dA6…g V͒t7g:<dWj(`RѩTV%kBēK$b/4d7ZD rxsTp  [0!<sǕ-UxQɪuTŤр}W!|,F͙S`4c9JB ѯJWч3mSDK2?& ׃YMB98AϖH9Q)kZP9;GH v<4MY+^HOn*Sw_2p1YI^mLզ1J`0,\T:%kpEi_ѵ9,5e4,i|^4)e@e00Q ,A)aE1O<^cv#@g9Rq`2eE:*u|Kz{nj ״fǏJL!^[a,kؐaX>K<r'<1k980U_S-qJHg'<H_g YvIX~*cꨌ}ح� <HJ�‚U{/vh_vh-[np߀Ҫֲ'L-}/Ժ׻K@kz%V˛*KYĨgXb;mjTCg�y@މ8Z2)ж|RXUAJXe089dvqxhTU0_y4.a8*3xʠP rM)[+g\*J!\L2w?ܰU[7=Wf0 ,9 U:3E]C( qQ[װl7YVgXI!dP7409ИzۭUxB;vxNtypn]٣iUCZ\VJR-54v8txBZ_ /*RՇOtEd:ݙ,1[(\}ťp4\)-9bd.ZZl[nFPˎ8xQ;<ASRTҲnwtzNg!1Yl �K40#wL5q0L_a$ Q +2O7Wh&2;V8hxw GO_.:zVG>QfxApѨh+X` PjwGDA7m<7<^*4 fjIjD@G .m&5qT/],H"ve*={π;s]4FQ(e! <^+cǁJd WHc;KT,E1JG{l}X=;h�MSݪ8]xQ$~,'m&ab}1EL,b f&L"[niku,i,}DU be)E*Vvޤ" ?J_Ps[yQJe#Yx"nVfۻx- pvt�^Gs-E/\Ѳ0㵔5hѨ:RV!Cv*}FLދM/~}(,\׳΀"a.#h eBu ]ҁ-p+<%ś[/�_M;":S;C0CdaJs0XmUW㔜2WcfZא]U3tS֐a!3P٫Nid]ZھNAY1d;sSK(kPV>bzPI0iN(WZVe=WJq %.zFsP{ O�=8{_@tjPYg<ӡTBcyn^C}/N xYdNxC]w;&w뾋:I;6T)*9 ZJm?;9m[#ms|[0,/EY e~_36+o L7_H :LaVC!rsXNí"F"fRwTn (6 !|#j4 .v:V@VCYMA6],VuwjcCbO#YK,,0R+ɮkx8Zs#cr%<=,02rmDJ彣NǓuvh#Xˌ5sF pٗ[PWp@F Knv@^d^|G;  9/^먎e0<)&pnc%Ӟ^ђp3 a5s(mgO�_õ% VuJY#�Y`d d̮Q-1σG  p&CAȚT{P F:ԯ&QK.1z8dUV``͍DyP⠲4ba7 t"_gEjDuJ T T&nҝaI&tԏjBu_IVRn%>)R=Ʒ?*g ]-`Ƹ*ixx+",̯f?Ei)vFpz1/y пs;O ,ŽUwuGz7@4m)K ? 'A*=_W+A' Ίx!)Uy->` MtԎws'X } 冀nu7=14"/˿@%@wGSѕN'9n8ly{`;~Pb,}ie,f/*ܩ?$ꏶG3x6Ֆʎ_,HR x3o3S$ʰ;Z~{zqs�vϑ@~ bm|HG~A'%rY c`{Sg9K݀N"mPUiԘ[6⢏w޺�(;Zp!b?9=e0ZAruRrg[NptN BHȣT~Z¬0mm ^z1n5#-;A&B` (7PQ rnC%v?<RjڵW IqJN:/:pq١Ư.; CnM (9!PkBI3$^jwu5͢Z  xK*NԚ0 %1OT+kCP4bXy7rk;j{8ܝnw>t?1n#{hAy|= F%~ ɡLW ŗo,q3l7yGBؤ0W >!y{oqxl mqë`k_v{WcJ}Td1REbpu9vz#h<8iL :C4GI VdD_dG$sZ@Jۙ@i389X 2}R'Itt]qm;4pl(YsW=ڨ I BS/2^(ݝבOYg3ׂ>u휖H&rR7.BǚLܳ'54g>)*Y_aPA%o$x1Lȴ]oSS-oRq2kh5"LnkESIAt&3W;΃l_~$En[;&m@Ֆ7t03W ok<ib(Z񡬿m>mnɞl|rQ]e%'p_Tc]\ 52n)%#0>b'ɏ |7lN*̙$@]Ge^(Ԃ[!kγΚR[d9gmv[ˡ5Ȫ&ł>gՖgm |lj>Z6 &4W(9@\bֻ窞Cd nİ;ys3\ Ovs)Le0nj8Z鋠eHL4g5iۻƙ[PNYсe?:~�bK;11ŘVه̕AhI )8wi`Y{"<bUx"8oէAχ@k F\`cٱ1\< }96Yj@cdd -C?mA~S5$>q$zdhLd<YZЅA(y M߾ps!#\0Jv 7t(kwRC Y}bDljÏ5'EގD3$ԬV҄1XcȌK0Q/^ <vq9ZP>ȫ]E3ť\Ս􏥣Ӻ)rюx+h8: i4{as N}ܳk"1/{1Seof_v,ٙ-]]Vx1ɧQ!@#e>ӆ-vPse0 Fϩd*rTLL(/ ,@9KA-YE`fsZ>/BT FTJIZ&ďutI�sۃq5K3]9r-YjӘωk4}q"G%ЩھIz۫py�%Ԓc_9)~`ج:SsyvDK\ xu|Q|ӧ @3WX$21./%LD)sXK�S>'J]@ːY[L۳?r :gAܥ:L r<n/m.̯/ 4{3y3S^? dOA: eQD#j} ꨬ8 nւxZD^6lSJ>O| #Uq>?lٝ⌟VH-N0 Ͷ{rT `*ȨgR˙f0g’bAB5BOt)@f/aTiL06IL1c_/Wg!mủ|4iYD1$ZcrT;tRIT^IC'$}轞D̰ٳ61hք'Dp؛.'(_c]!x s^<I]:s'\uxc{m'],-1;�*d'ş,vO>s'*m*d# |,?0S1$G *]3j#xkBw i�ro͗s̖-f- /[RL㭉HnS'CK'3䷿(ftQS ^ uK>ujL-4!s}mO4"^ϘCzc[砚-?ӒP ү�xuLj>ɽ$W7Un;R,C?P)2MD6\;_wm=&O,r0w{Z8F~b _֊ԿҚOO_a\@_/r e8vIŹ)@nwx/$cz{!)_nh3ٓbzC,1*8MtƹWzBep-[PtE2x{i̿_biy}VJ1PEeqQuOTu I#KJ~N@0?Ԥ7s? ,,9xD؆Li Ô7=ʰέh98H{YN1tANFRR *?xN]5+)ɦ�ZH;Rĉ {huXURPGS=vK6ۮdBO+W})ThZ9!b&(=G_e.[vF[Y %o1/1,dTT;cmoOlWͥ`%{=ۧҋ{KuI\`_ s X>{5񉓓2S*9s)Q4U&6 6DTV謘E[&bwr’f/PU˟V'02ԓމ}؏Xš8e^_ZQWØOG>̍L Ѩ`2b*P^@k!:ӹ(y} JjebE!�Yƾ4L O`Nկv8Қ?F -ez+1~OzW GE̢ߢEz*7 R;4e9D&-+Z |Q#yꁲYQA>b@’bѴbXkF` WLF?L،gԳ�²1K}O?{5%cӀ<Q lqϬ\UXV" ߰1Ȕl;wxzJ&m(A^<#ח1@z)XKv\L|&D!Hd8 h)&?qגxe}+x+Y~ųabز�hyrO5xȔŽJς]5O iONq(&A9D B(+E?6aaYŶ7Ph& :ZͼbY3Äb2%=D\^&T0{haE 7*?Q^tGf܄fjc v,X{> J'hD'U!G]N73;d ÔV2%f,ծtMŲQ݂z|d+CAv̥hڪ: \ bzaV[|3LF0ql98ĖԱNb T<I%N,JEZ[o,UCuVz{haQZoa/Q]-ͫ\;^nL-Łt.- cGe]'*?Hʨ?A(*?T u_т]4sD]TxM({Ofv|#w䩒!kq]y-%jvh[FFPGG/W1筍d𾠑=g/GuXW35I'v3"0c{|?1 ~+/XBO/_]Q[ԯ[  R�k΁VU]eIQ|9r./#i"�~K$p Q[iY1M2"z&1\4vN >wjGvmSiI/( x񳀦WM7}άk= ٞ_)]9Ci N #|$HZ}*n.|g0@],P9:<ufl<ɨ4̀u`y=婛G#U0<B9i25; u!嚮7P9V@7<#̮,֓Y%B$IcuE9kژFrNP7h\ Ϡ72Vfq 0dhѵk4lΚN8A{])'LT2 K,S e#~+q"jN g"cu%hoKw�sLBgydO\<DldTP'vsOq q^Dz`1@z>b?a T@$k/8B Xo//&'a<vK 6*FmmGGxl=M,_1j?ӑVfX"Hf-hJ{ǻ3%S(;Cq13K`O�Ё݂!i??U J Ah^x+ D6ypo/=;OЧ_3 ιL *EA'))ܖtX ~' H_oYJXt$Vܴ-@@ ךUVK-z9|ۊ-׼Վ~$џ2,:H(3WeZ-wr F-~Oype2�e0ݺ/ .zȅr`+?wg!TP#'x`̪ͨ?6T(hj戤ZQID_AYY$<@\7L CLU#n[)^~qDA[i}ַhӶ3W(lA7\V *A45Qi*[wqހRP7Vz-G 4hS;6sKoEV ޤ(W-5/Q<iHk$ 8V^hs |zYSqfˣn®^3D-6Z*%k>6"O"XE ooA5-f.$3'i68o Ң%x5K(KV <=:II\ ڮ* 0Q� 0!qL#[%y\xi'!D$ybsk _xɠAt |/obpz`V%ύ١%rR̶:Km ΘqtP@hwhMR�_ nqbJ3X(ٞ&/7]VC\yߐzT1fݽs}Ǽ(Ύo[p)فk.`%<-"q>Twϸ[nOP7nd ޏ+Gơrݔd@$"EOϖ`r-hIwXE'͚Jn۰mV쒮ի{P7k\.8!݁J;KJW =vp.'mQHBX}to+k͎:B893Õz}S& W`Usͳt+cʩخa(akKdГu Bu0 mU5'Q0+(C6� q([pkeo ͬDq.�h: !&(F Ղ( RƢ#y65{3k*ʹZL*AcYz5`#ÜG>&ᱝe}Fd2nJpoB6̀oWϥsj}ڕ~h@䥶QP:vߕ@6 +ecDh (;1zi^>+=921`?>[ 9OmO%P6kGLP70g) ɹ'z_:Q�Rӵ 8=&U;M,ȔkRR" ,񾻣dJ1OWcGץ;[ Km$DIAɝ5Zʁ)lm{givӘZ.0JlHݟgx bX\!?I^)d,͙*(eUJF,@dZĈV3jzhV 1; U8+,yx^A Cy6.-![ N╽@cGN QiwdʳwKccq] Ɗ|R-?[dRUA=(ޚɘjaܞ ׂieaij+̙? ;)ć$;5,%tYK ri%d0:8LLtJ/}іސ"�3ܷZuo BQvn4Թ^nZ3ƪ/l'uo5 J+Cpi(S7"RR]4nh]F}mzvgϚW3Y(Y]<D<(NO/R_HeL~a;AKgkӁ;=(Ai_U il5[o{H/ʓ�[b6k2T>VG0蝡 <PD{ r)7nc2׶xd;</QsF("[ѩ,ee-m`ОR\ b$cB()֥&V\ <~KN0c\+­Y:C#u.n&,D]<ܬn ?( t%I>)O/#xU|s-MI#(xlHr"S݁ӶQG ),_f(>FԖj�I뵛gJ0Y waB1H;Z1o V;0#)ꭘZ ykrw0-&-E$$5^""ƠxʆX?玄`~~44ε|ikNa#h)l5n8/'o:DMlAt x8oxVi fI ;kcRB0a.!M~][oԱ+,mKF}9vb2JIDPd_8{ABxx1)xثk;]s~/ V[ \ZzR%EVȉe̿_a2zuLcR~:Z7)k0d g &a�"3S(}-8Z^E޲#;1}cLT x&IWeoA4y3!M=)`H(su5jdtɪbϪF%Oʑ EF8g>H Ov"=ק.@o.N4N'p2 4`IX2`ĐTd<C 'z7?qꟛdK7ػ8V&#yⴠ;15z#9|XOD=!,l<rԢD}@Cڽ0\[0Uuңk^%${Һ]8 pl I,<#T-L:Qj.5:fd/nkr|̩8sAi}sDFWP<N"F:1Yzc'A1$ۉU\v'~ulũ d}cY{-Z 7C:D욢SnٍV/um+@VUüp7fvSݗV7Iv^"uӇ^d*'i<o -uܐWO*8 Ig8OfȖuvŁ i>b=2 x-$˂>6{q+oogSy qw0"yhKl>* }*{h� 'F/:}j?aT-�=33ns^fR[Pyg4XĞbr hsbm'�ww^I:E<^goºx,/+GW+brEg<_]qbc^TWR}y'Uy~k<tvE[ޒ+E <S۸/xrfi*�]ftQEW`'e#)Q R8[VDIjFClBB= B{LNBp o8EmW1 R�%'6�c7_EPnHW3 aѴk}3Gҩ9B1YЪշ곦VXݧZt 2�qIsOj" x`bB=?>}8o`-[wszQ/Z8?rDl~s5:E rĖu %9:goO59 }KV9˻'..NX蹨YF&j{x;5mФrwG-fKdVۡH fnNzMW}4b IsK㒾`z-?F?0>;_497* toq(Cxhye' =7exӮ3v4`wNrwTh#�UG4O7]"* wr-ۖWvM W;i_-6h_8 gɜ؞Y=>O@ܷ^YInh2s4{;3x#h.D~S=ŬY� |Qe>35LcW;P"�CvƥiD'2Eg4؂P'@jЙA=r uUOU-q8ZI{Ʀ'^(Vs먦LbhEI]Lr8y(_D0vv�x1)l-Xi֭[bsSͭN!�ۗ7??`}Q1tf/ ,k?m ap<e+'ۢ< <zœ^jdMs0zAW Ex"6xIv2emQ;[A (U{}!WOq4@`*Pym;/jPH80E?9�h0:O`0Զǀ' -@ e set&GеbPr!=(aOpDˉ8/[B=kZZcGˆ*</9[ӄ(I@{ D`-Ǭ[%MM玶qnHyn78 vHoZD5O씶8|9!o'|2oJſ0ӸY ay{3�ÊRL w.Ie߸:6Wx:ƌq� }:X^h 1}z)FB|3-ֿߙp* 1 WRZ9>{SgԀ&i?-Ԁ^Ke3_}K4 `8],hVr0r r2BcV*=#Uw?ػ`L K<:;ϲjycÑۏ.pe5&)`3nGU  L8'2CWw>z<FEﮞlG@#|89!m*x\Hn'#Dz!f aK 񸴺NINei\KE袶Ù)6N1Hy6PdÐu8|0AfGDӵlI14$u蠦]NwW[ޞ-ͮ+0{M',u Kc/EO~XѢTgrT DuHD Ut�gK;je�>Odۉ6ѠZjHYSb!Bn#ReMy TAKemf>yB SX򁰠MP/kO<X~9| 5mJ?!,y͋3*`OsLikwoA\2)@FSzH ӮϗaV5hgziT2a<7-9*u>F2mms_�c@*ǒOgmr5)`n|Ϊ|ZBLla3j᝗0s0 {<@34:d洓0s4D #$}2 ,2gw"8֛{q ǒOJ4{x8b0:b5i  *_/'XzMth3] %L`�窣 F`Z?Vj~˰;x5%7$Gɹ'V+Rϱ)V=)Hi<sk4ښ7D$0PQ ��&s_Z#dlͅsY -:ⰭbL%՜~Ԃrۦ~e-'x tuZ#M5寠r׌\ 2$V0g]1Q[E9z?s_*(dD8IƵ:%2ԄI}^+B.cEʃB0#$/sMfe@,0r6Aȥwyv[csQ5w�Cs5j!J{i]]AeyētTt{cPnb+`4CJfis>94:ڏ2EnEfhːGPA $ٖLZpX{& rh: N+ [Z]($ba)7FS!V'x}1GAXt؛IۑRqY F#=׊kr'{Dhaq6( zgɞB'TN-V6^G3ީO Wu:庪R (>מf $ՐX㦃`@ݶhQe ip{_ f98Pmz Op&DhC$[,;V)EexWfI'(6s[dHvo=-3~$|ʓp-\etLnٶ~ _>ŘlۂcGAzfkrLWqO1&%@=)5#J9 TE.]ߣz'cC%늓?0wp#,(sByr6 */jB=Ȇ'F{qew_F)_1ټ dJ*NJa&N'\Ő{;0f)vvI,E0svQ DX3) ,%ZT矹EH RʱxkGo.dD( {Pħzln]y䒽A(/a~ɻTrTLK+ѷ^-+׾|z(=Lq*<5"4=b Dl'L(/w;Z vwCCݔ_LXNLͤvouٹ]z1rz7׺cAp}ߌ.sڝ^^dIT) �bT<g7VE-#F "j;k jp[5|ROHٓ][h7 ktr %BSNgJUjgݞ V~z[&,b;)KZ@^j dF.?ĉ?0kVpjQ[yAǤyчH`iqj ^[NcJ'NJ!#ZIGs9dҹDbl VQ ؾLjO0]3BRO]>QM] r2~ ejn}8}1$@e&@B%)mmv֫?}P>yY8h.CQ�yUH.ɱ~,MibⱫ{� (/-x^ t?"-4P W a<իE#�K]ːZ/>,3rnjAL=O CĒb^mj< 3:B XqsgjFJjMdh؏̥jI`!s):k.IY si s34n[;Ez@[ѩ'r,'ȇ9y'qw&r[/@!,Oj2,ά`VQ \I)�O|^{rʱb\S%bT$tx{ڢ#ջ+r[0 <#,?OEE$ԌjkZ;`_cZ)f|0~ʓ;0 =K-nm_ؾ!mRf4QT3ߔ]L۹bk=9/hB-՗ԗia< ,-d6weUИܖͰPkNnK[4iN[|RhcGNo;:ϲWFO8-8zWUG{iY߀QIPrHnzsTWI(v t=IE8 8<�4$ӟYhZ VP$wn'K0KQ0+AP Ej= (|e-d*^= \GnGHZ%;*(Mw~nɲ99}ݵ ̚x8 ~aHL w_ObFl6mU/k.ϧggC[xGX,0X[j;̸;4P:V rS HcgŹUǢOAz}dIzG&P{)#{ s'Z|l2v Rwud.B>ڢQҏxͩXGD> H 9mW'Ulʄrס -vk=*l' rs!p<91t@9͗۵bmAo稹x4c\.Ǟ\1{sߢ- M&XlmrWt‘s'&7Ai&ѮUPOq�ecpEk:ZL &w6W)[v鴊bm͸'ZEt/MoT#G '^y €bq r|ێi8د>mV!kZ,i#v 5Lz[){qu4`Ec ?_]|G[[�t2ױ^:Ƶ DǏCAXeq 2@Hl'y̠xC:0eHB,;A`K΍Vq٩CGxL֦=u'⨕n+@P>9l 3j]}±v<'^p .o,h/7NK(;4w|@#-ؕ02;5lٟꂎe[xr˳$yB&tC϶b=$lv` s G2PB9bj[rZ35'= woI=RCE%B XN۴v"p;݇zJyݖh6kϳdfJ";/9/) vM-̺_C}3IAa PD9{OR򿗌G{V ʐyFXTml+ڶ(IԼVL +/IEw5pCӇL8F =?ho1L/2`nՅ(9? f{F_d/0\Tk4ܪP|=Hd=sknE*~@ޔ2'H.r>&BhJ ȤmHjQJ(�2NtI!KIQ"öjA #`OX`.%4jו47l@@x̀mj&5ԧГ7jB-z>&׊iJP442XL9r[!C-d*D0D\ ,VfoQeX!@h= ^n=D]R@9\n˅sm NdP+)zc=}+.$K\I X_`@1|c9aڽ(̄(+P^BB Z3ٿQ"5T )YK�-qBX zdcI�A ƠT4nsi<PH9:Ɩ7#B_IgDSǀf#3OWdΊx"44+-NS2EF`tԔNO=9zJ�ADjG"0/Y-ec Y~T ֓ X]  M%oUCcL Y=hQɦ_MEx /wBayh'sv^fD;SV̹㚧lRP^TCS1ZIQ_iNM6(q.m H$׵hs \`(Ld6PUDp"hsP:s9em[91eE0>Y/R ^ܺKv-\n] ȍ^JqJio&\IȽj׿O86)mH5K]1(z. 6&RJy+LZh?~yJ#;Y%TDk1fz&5׿O_uY$OВe) "kStKSx< .K:^@8y`]^jnEՀ8wOFYP:%;wTۭUZ+Wֻ%M %"i"<f˲1ڋ^ߚX4O<4mG7==e?c#]kF9ߒ;J0&fRۦ6i˴SQ7 +Ic>$Xʻ5yUykQE'>q_Zo @ h ilj}.d14j0Č?dGrWWa!=bXB65]$.6xJ%&b A- e|'eO\tOYzty}ajqbܮrG%ؚi؜9\,α_Ki-y.fB9h,[ SܪrC ]s#4t$Ii ;s?R7l/O`vB<1NYv;M>ve2qgiN͓C4#QHԪ`3ܘqRdۄ;F!qNA޶hާÅ7DՓb?H@;9h^mpND >8ǻZh�?-yYQsm [|Uqm+h]#qCRi]2M"ϊN<!y7 KSiP% 8Gf16~ l;N 3۝?Nnp^o={Ic"%1RKmjF^ [̯59)\.mœ|lcTmΟ`pnj< O(},%}VL_�։y;ޖ(/Pd?535Mŏ?cp_AGˀ^Z0e/YB3%4iJkƖFGDmŁ xVj,6Ӓ(,_PFp`_% M9Qgrg|6#B%JNhLٍ'niѶ{! 3y}y71�^ nZI"ѴxWW)mk9liVv#"=s,Q(a$4: j7z?pؼPJ3k+$7I V=|-><uuGheݛ4t/ؒ[-(j9{hr`T TI{W!JdA bkqLmOkrEkl:c}AMHdNSg{ԧ ;3#wTD5$;>oYM+%�o(TZ`�>{Wáw �x0?_9@|UD >.M.a>uGCcҞ1ާ<᰿fԺgܟT \זie {p iYf}A [Bz1$ [hSVy/omk",;'#7GC*6r$&2j?8o[ŵOO`s\]2?gmϬO?İ![<o]<Um hzRFV"sE jM+F^5Q}Sڵ�,4-B(/0q* Sdiފ QNt9[N;NCdCQwL*QX^<oŇLŇf4 MNtu{k-g2H'@^Vs7ty+QݒٶLB٩* ZV:$.d.@E8[MZ?UyrU*#Cپp%(U]*e $o Tٿ[HLo0R#ے.t, axHfHbW~U"kscqN/M 2]xk&9%JA%tV?wK0!,|oKO-hoL -iJ~w-:T+l‚z5XO!GYa֨gۤzxV{NmަFV?D/l>! _hDlw(i߷:uVl7B9ɶ\.*{K-H$E$ݯ ``b՘ӽ;^^-'*+A&}6],GI-0tDӽ~r7кR[E/ 4[+R ߊbT'{NQaR K'M1}_M+O�*M/jm,F/I.A,$*k:jt%5p_zi՗X Ev"#G3ujRt1� 4ܫ +]yߗ[z$za�;W[}bb[o@jC\2;P&n]rj'&1e.UG#uz]E^&l}Uu_c`gn 2! He z(ziIHKi2/ljj-AvJ);>Qm!<PFﳶHg{w(糆)TON:mN-%15dά=65N1i>r}̑E?;D�RLtkry6FhwˤİHTxbz:h)zߊ:o<<-~xt?5'y\Pq.v%~6|ً]5Xw9޻/8U{bB᳃l|#&a�|/O6N%C @QH=~%@z0hc=Ji _]'m( x(8�M\:d-)VcvF÷U{sZu[n)n?ݾ=D [R% 8p[/įÌGlP &_LΘ%Ps9G Dw u! YSXT}W3Py^<;r%+ln)C> %^, VjD&qw$\CI25XY/F=+8֋AF*Gùzֈ(N2|"u8hDGrsȶF5%ѯOڮ} @ #)(`#|ۊmi #Wb{ ,�9ģjM1q'\\O65:8EځB_۹[ Y< d ~7bUU!yy loTm:I kҳ[ /IN`V;01歘F[`iZ{A,XJʑecɝq6Eu*lqķ-Xn�|mY1S Xv{>w!Sr'g|0˙Ke wE,pvw)| ypk`Bg/S9z%ݒf )EwIykq''|[Ur~uQ'c5RҴɞ`=ųh0Aʛrc'|S)Cn?&͜ 9q!$#\ &WKOl _2 StZ6$٭Ge'ͧ;/8#9q%7=b5=ƭ,V2)l�̟Zpă\nqbMCZvAEOwxvgarxe\OG`3X1+.pwq�W|ȳ7=.Աbbn[BSX=S9`ε{vC`Z2ګ' [̔L~Qn6%CRT|7NxSI#fAS9A\EePpBm¶Sܑ0ڂDؙ5ɷ]ϰeһ}\Z=10o>:LOv77@'!ږ4RF[>W)NžT;�[:w%3 \_Li#Je :SC'/i1ʨ%֧[*e`<0cӱk=a<Qyx,aKԫ"<E_` Q-yMž#!dZ;<_X 6dIuCW m`sn%wqD�w=mO,}'?Ls<U㯛νWDBg$q-ސέ]GO§+ȗYr3'>X9`#F1̰/']8sھ0k5X99k: >8C|BYb+jG8OQvąL=ar4O+͝gje zq#+{pl\t"'tXAl0[~Bh/z-8Д+9 rOJEIOU"rA%6;~Q!Wz^ OqG^`/M} |Jg`wW &ftwWWGh1<:~Ԏ*,ZA/k_,R iNA'/oʠu+>j27_!V&֋qAtbH^5_!3AzG9N߿,Z'IA4N 84ց :ӹD"" j}Oʃ r |aِZ GaH`:Qti'^t[z|\_&VVN(`B {a);XAb鬘(Xq߿^t`G\A6 A(;K8RJ({"XW,=R+oSJ/`IkT(D�kiPDXіI4̑<_FIoN5َ0`o襀ڵ3š,col�aRk!%zgUMA5p8ZU_vȱdL1xZ aX9 _cN؋z[u&65tG'++7 }l4-q.P^Y[3|co//^v{u) 1X ]0iLȱQwM=\�^y'Nrm!&=J^+Y]3( TjգEy- w_z#6@纖[ 3XEaƳt9Ƈcmqオ捦S7֋i(8tMfN {vߊn]rkjENA1uAzB4 9Qh!yj/q h;P,k$" ̣^(rŽ'?rp8dL6#ۏG .{sܑ}״ =ZQk\Vci)�pxT]]_O#fCI]rpr'n*H%yu ^Ҝ^%C(&bE>pO,#?d Qw]f[$uJ̕b2m][5ȤGStOCuQs۔"'X>l9g Ȃ th:zZ)+$-oY複8K vb0|^maRwPXEFJÞ#2p%Vofz�`q 5ɆZv5 Lӭk3�";Whg "n/˞WN?G UhUDAz=bĪhDvJ&U�]ib^K)P7ּ)8{a;K݄((=@qrU<]Vé{PwEhoO=sc^wA_g՞I uZK;FXO'°pОp&l$&]Z7`lZP2>/1qtO/?)jt`ҿd `F\bstJ0=!T! *6Jk%{WW;f}`.&#سp.=z I#O|6o>;=8e#ʫmˀ1&ۼq8o CƈwgA$o3 .igjK?*E-eQ7k{EQ.,cYͤR@0b%-4o[p$3=[ͯklhHܚg(+GtŽ&'C$Ze`7ݵnY`-[fy9[^kB=@>$LkE47=a+cw։b;)'XTq?u#VqjmE�,Lg{ཧA'2Z_{:3۵9rP|JqX=f.gt`e۲A%C!<XԧЪ:{Z).sIFLd1PD?(]!4_ꖆR7֋lG/5MΔI,hjۻרSBǽgJN łgPVP':�&Y#O&eIQP Ɗ!lqda> f5z@74*:7}&dfA0-HėJi;*G^"@c^~>r-;%`=4R31kOn^1&$DVO B9%;A>1 FОR7e+ Go Qij-3P"9D�umŒ7P=?/gɶ@ö>s&�4gX@)f:S";o}77qRIw>fat ˘o罠iI/%"b>δ &7h3CLaXZ#qĂ"Tyu|`\<]l{] &wYz (f_(ljEWy%`x r,S췞Ic9V#!' V0T\ `cD?2eR$JQ޵L2I9+n-w_ʿpOg嶧oNgC)E  mO[7ULX/I6`t[Sa`Vj~Rb7E]ӄĖ1:RX8kt5pmrRlgz<Dx.j{r m4a/vOtFoAwAM^P R9*z΂A ؂m"8k3ZmID̖9IݚWg.bJ&p6bL_QS9"n6-%Nk|Lڻb$ #gҸcAT~(Ҁ]c{Xlr[r/'ȶ3NLDVbnޅĖkaL,pV &zv4't#%㔥R~K<[1*&^ZOAlO`Q;p9h1pGȐsVqdJ˼\`kh̩ !OϞJbl4âKl b8tK#cKʉR\1'NԞi%n-<[y鄖McGC^\G.@B/2W:KYmwix%s'Rq¡9gw?"h@OOص`k5j/OtZ2`JCZ0b-mK>m] DdZךJėvٯ`yQb赵uN>7w=4SwPJuߥzP=[Em *=0ՠ`!(t:K-xOgG:뢍ԕԢ5\O8y+e5} 4YnO rO>"/~_s-=<ːzh '`٢@5z[ju]XW"GL;z�iDiXqo83(z–C*?3s 2CE`PDԉ(pݖl  N`ñ"\$&g̍% @wxkXAP> S%`0J3[,A/^g^K+9JU4\1"1*}X%$hgZqpM@'j ̉8|WE^!L~=ȧR׫X>zvnꌔẴ]m]\%..[D&LvxJ]ǒ~V{`t2$7 paYls>F+N(|[aśR|ҲDm&Cby_KV^+nzӁT*gS%pGlE WRj޼"m_KdFɪ`@+�3!6hkdS.ȋˆޔR:֫v zjx'-ؑ=E|j&K{8aJak9_R溭bx"u],l)G)S $/)GqqJX1l]=PvՇN&12ܦoښJ=ER& \NF,+<8dve}a=WS.h)oN4�lgX`k*R}-1aщ:(nފ:)$C4 Lf�95>Pt2HP;_ֱb{PQ+*g9/&WlAV"ˣpsq m'Fwd ϚJ`GO8% [ǂ{ñC^&�j)]7 6`VzDbr<W8r%MG%. mC@%u Pd9z-8PҚŒiDLd \vd?B2E^WKnG pk�CF!״)&#NFxwE1^W5Q2>Y]m|<KhzfţTzuK )Ƚba�>sdli>=w?fc},G<^I/ #Q/A n~,65cäo _Ru80=Y=KߑW{!זrc߮,oi{%%u�JXo+mJUr{[~|sAdo[\W^?� K0[YRyBk&0 ualL`AUbX7e7FDD"?0' Oͣix 0`Q2mK[nɧwt@<lێZ.&@Uѯdf#|rze_w #R^�&Իj@!#Խ3pi1O� )*hս}nAX-u |@-N䍾3|LՖ,Ta> ^Zw:ۃ9Rr�z1bY?"3S�dE?T~BP 9dxWQs'p&-iNR"@ Y? z<zC~}窶` 巓!6E]tWy[(1 v9n*g aơ8)\=I{F+*_|LIu@1 @<uӲ[G�cLjBNv+ 6u c Y8%c:: OEA;8#S)ےGzy;Cy2ڪ̳}8>Jr;y?͂v_Յ1CjVN[oЍNnYPs3={__s~tgѲLU?y ؚ!2IޝNv!n;j*'Y1V\o9ui tNZ3S t%JBClkK5ܻ/ Cnk[OdPm,pI 4[W|׃$*D֡1ΝDrsyo_W̭v/c0͏9o]A-cSE-$\cs0sg }Fa*gc# }f=]Fϱ@"{S:ʑ RSƬ'c :�Hawf,})B+ `^Ô .@DڌRD ߌ%-*dɛu[\ZG[. ˜Z$A4ז[eԋ8n]j^ / P 6 XP2⳻3<c1pQt|XYa6YzPxiɢD2 p-=4ԂATבk ?BkWy(@#;.W9\8'bۀ<keplY9R-`T�H2r@Zb3޸x8ƎL%T-3pFznO(u~bˣKmZfXԭ<:C2_&VqZQOQϽnP|oK]AAۭUtRj;ADk! ցXNl ĘB'T0Y;8Xhr]sOد\{f S˴q0_ juc,\8)({8ckuYUsW|m{3YAIJIW hrEu}V$D;Y3-EK/e]uβAf1r2I r̫M0MQ*r+3s6LҲ'Fp5ے"iKwz5^Jdc厖gvrZ:w&0-H-hq/8/ZY9 &57 Ȏ^s6yǯ߂B'Gev{k�Q)Z52즩]qx!vl3 ʑŠ;6ĄTH z,\Sב~d=Lv];A% Rǚg#tם{FRt0L%QKh "_Z\f%J`lr2d>߱GB Uk Z'98Y<ϰ:t;03zC_W wb20՜ s4-*7OJ^7JCtI~LcөZ1 :pꚄAҔXysˆF/CswWZNF%uʟֺU) KU$.km;C`gٛAPF=iAMܙT8^S5ϲ&b3G(PnKp:P5PnqkZniDjٮmb$%%96E3Z`vfbWFt&Q:aFg0ᗓdR  gḀNj<~ #Li|&[ٷ! _(Pit'xK)Hoj}(֏*{z:{sw_IOTs+lkEhz6zaHW+1ÉNtF ߒ%?$U*ob߂ scLi�;0e]2bDSD'Վ&agJB2֑i)9jAJԛcDv&:yFTN2Օ!^xKCz \ C:i諹F"KkΡ/wĹ qّ:#:g3LCs%Jx'A7y}"CiIm D8ot3aKn`\(آgP1˟iðwN0~:9gL MC<h[u|4G9֬f=QCQS&Ӹ}ѫ"7P{4vd'K(rRZӗ[`Gz"eoNo{(oZ-/v<&~;H݆ZlFs џtbH~*wg 4dͶX\ݖ 5hX=ޓ2QD[wk@ `%yyTvWv=J"e'uesؒübdCྒ/Ud)[XF"-%e2>ѝKٯЛ@cziK}9zqiP16AliN ?W5eG1-~s{>z4a]ɔUGpUz6cvEQghHG'Q9VU�C';}EҥU`o#TeP79 s|J/CaδGjLɚ" NtpXՎVjWJ T;]H%tvg;0b̞-,O'"$#[sh8#{aeIO8fx^PI煾h(#RF{Yv74v*2a()F|5C%^t\^QMmRWt  YX%8lӉw TPa#S6 IiY"\Cg[s1bQ'H(vXxYKhY:Gxۊv[ }ZZ%&вpҜ=Z !@sc�\fHeT8S UJLjx=_M`d~iٶePMp �P^^"Jg4ԲۧNlZI0 5eh_V6<vǽJk?+{�񞐂Lf|&ʠeCal&'bmA6-<t N +zrm5]=~cHv%|`?qEO`na摺 tm-T)W|V '{:z,'o@"Έ[ o.~>Qmd%<.{LbLAyw�Y-Xz=NL*pL6$ 0œ_ U7|ɪ2"e5{aJ3C9ڶMI 54+gI&W W`s %: v,@^5nr9<A gWyWQWU0' gq5&t-z:8G/Sͮ5ך8 <^h#ʴF,92}XG%!<{ @|RCw}.ڄ޾pdvhP; f,xu`�'|\gA϶PJ,ɰ,FFPGŸyP_ )ޮO=}Fm|vU' Պ62 P@C_,E&h1g4S~aR20HjLj8^!kkAh(խav-]zʅ`: H$5 "5꬘[X>)xHwt>bgk}$UnmV)`ۖ[KA {` z.y3EfO0b߹(˅˹MEkC5Ѥ -MdC79͵dh 4-y خtsn6RYM(әsy'ZX0.HN:Po$Tqhz)#([Ҿe ~E>^RLޔ,4Q$-j ϒg¼\{iAՓ?npWdin3PeRd~5Vze�U>7m)$S7֫sEO4Yμ=:vyꀗGԟGog(@Yނ�?gƹ�Qe!"Y#neKo:~7Ҽflى)љ, be#\Һw¼m3oOL'e7֡2h„N6z1~ׂ`kt�\[h^1^ ou2phIc~ �$/G$omxbtVQ岂Iw0K^YM:M#5'OE1X\/>Y o4BqthHBwKu'([~-Rv#bKGchPTRZ]ӳzExIlwmkI,rl,82jVwWDN� 杝%Cbr^`TVCo9pkpϢP c_kPvpjnH@}rl'*.r؆r:0Ftk% yQHA:3)sALV#r, U=5{Ex�0mf[8DC?_>ƇVV8v1 y#j`ڌruo]X޾~bl?΀3C/G;`ob`B2#ط\.C<Ek}ǥ_j'&]bq_Ö$9p.1ttW3~QSP\95\.ʑB$b.jmyvsw~Yl&r}L"t?@׺GWZX;u/n\ɡ܇x<;scw' ӗ$(_Guu:zXA`Ĭ!3E$y#d zLPS ӏe|Ǐt.%/5fQߝN d;oTy|VM^án5;󬦓NFvK[ުvV@F;7h'wSEGRz;Vq0=îmtk݃䘒Ng! 7S>VAX^3 >UN"l Hl5C5?b8 .9V}r oege<;$,ϟB` XL�GRN ٶ5t.L^:NXe,)^Sۨ:zE v"֎,ϖzXR !w *GVObZiq$E\4m$ "/< i-g,>^r;ysѳ{Vx OQ`{"u%bBvwN0 8~Ylle>m`kI&[`h2U+ >y-Щ;% nRe0д٤)L$;(L2k}X߉iHBE k GVz8Ӛf;U'L¾ kU/6LR'GRDSbHC�c 'ѕ3 4~}w2 6K7zMBL:i|yxJ]5$7(a[GsV$ڡ8�,Xm 'p%H4k<3HŎp+RqV #;CB@IM3HӴEKhvims ײo4xr I&.�H]O*#b5X)38-pKROZ ǒ$=#9l{,F[Yl=H $Y 1Z#ͣ\,h4 <`іU8 ;ϊ'Mavpiӑ氛R0m{gi+um˒U7DzH.yp6k'+. P|w豿<�KНi;wGLl?"t%GȖ2Xļ2KI@ijih՜I8$^'0)!bX\䑤hu2MJx3շ̘ g;;TG1bx<6 "7ѕ.@|Ē[vZJg;ŏ#w[x!"pz Xp ")a-!yǜ}-35q u^]ir}DkY!A8 <QjYՕ@1<s "P;[!mU0=:$(�qMTvZb0jBT2$ii؇ ז.^ʡ{,ns3Y9wϘږ{H:i 1-[Rn{= jhV"5"$ߐ%l@ _P!w'(@BN^&2aDQFQfuN)GzbȷzIV5%蘢&V&KXvHzY+̬s+ps)[(V%lg>N>`[B&x!q6o܂DM9x0mz`m=]#v{oh2َ݂L#yL!TKlDڥCEKJLӐrQgvMo uۓ+xn36s~؂ސuRS$+6)d*~t򬦓f&f]C$*:{,Xz�~8<U!2MސY%ld r ̎#,v;8!:ة ง# j1LQ]vCFC RDVXr@|$[Xcd:�@ Pdv7@>#eS3/5%xܒuC9'‡Mxǁn ]+P11d\UЉtHzԪQH=OX&Xic8ęX,F&3-fcPr"̘}fd/HioaQr҈cHzk" qҒYG@|J2(ldk0$wFJW쿞 Nӱǰאˊ@?%J-ef~2$wK&ky �Nh3ٿ8(.N{כ m5eU@+>َ@uj 났_-WM`xyZ2*@:F�STW1#x8:"qvm*QBU1> H_@ )r;Jlߓdhd;oHEfZڎD0Js{<op ݃|ɶ$uc M0Udkԣ"#) y_3%sz$ ypl_6yѐ")F'L J4 C+[to"YK4vdC,Q.@F'@!4O8WtJW N5m1@媛 m0abuDl/d: ׵؎V]d1Ȁ2sA' dwNU횋씶wx"4E?nwF8{3ur=U!f%t!?^E'ϴA^.&;Eg!]K3KHXjC J =p΃k \eKIL}<^'naj&K;Dǘؠ#'gV\63Z!RKEgp.>8D9<&KyC- Nh+l~[}1ݺLK&C2h`CvR-n[g<�L {GvVM#^B1d[2$/f`+. ~r[Fb2`Tp@<(A1 ffgzXHL\[u+d(B\;PQ<Ul&>bpxtq`v])2qɏGv7{�fi#=%4ώ@~n2Nj {)a PkyIJ6.;uqN|,s-Zlڒ=}KǺ(}-N.A˹e'حŀ1yG,ӭUl࠸\O%Օ,>b a|7_x%˄.mM>XI' &=f1WKV05 KblH<}7H |?^$^>k~@MAz"^s!X 'Zcew6a5L@_ bLB*H>p[Ĭ|OɐkiVz5Η4g1}CPr<һּ cICƾ0~{#ܶC3sAQ_ ]cli�mx8IEyX}V X-֫q-v2ӂ̟b8k^[j.d}ۂR{9G#(AmP&ٷy[[D|:2\x垕sO4H:OMo'5dA:-;#k^][A Gﴓ^ĭ/fc' Kq-,oHkz)uh+;z<֤'q79}#@6$4o#2 3i?ei0R]H?C&edW`ՅC|$37LA4tcwD!Z?O@ t_Rd}>5-:xvA/Ȅ.z+m72U EFj6?!-$ǫ&AVD+sJ2|- ;@F畞)}[@5UIY̤>�.w/^x&G9cԞYoƵk' h}e6!h䥮0\Mx#TvjŚuh&"1&Ww{T[~c(OdpYHi1 G0!rs#?t!eJ!J_l̨i-hSK;R=X.igK,Uޠnj} JtXVx7:;0IFސ7*0<:-x7{5~iVzCgw[ ^T1hG˙NaurH[-\0/mfjκqF1¢BvvF*AVkp웟U((+=-JTeܵ_jC65~>}VvIk&y$�PHd2a$~G;v2DX ;YIKCp04ؓp@=us<d~3`N?IK5];u8<mUobc\#(HRk[m<[!m(T;GF3^ѩN4#ZdkQ҉-5qU ^;K3 5|9BnFn]l3SәqD,#{4d"ͶC>Mo~ԋ}0ߡipC.izpci[Z~Hr9()!׎JƑ74;_@u5c b)@mKKma_4">15Ts:AdY.i̞< xw�kD,?Y\KhiU<Ur}៱DHY2k1G{OVN蔉E9!;8!TA2Ki>w2ÜW(b@|EK�&^.epB fBFV1[ ')d/.nxQ]q]Omc4WQDXA.{s5}>a{UF\R${,oqP`QtrF!'Al cnxrn3Y2ɂ :('M;dž߲!c;0R̎ڥ:UC6R I}T|XгBV߅{6FkaIV>`7f5jHC\ryV aa!Yp܅XNvˬ"qHc8mܶdij 9-'ݗjBGе;镧y\*6A֦&w rGs!k>p]8fσ$S#ZЧr�nE0wVڷ6v;q0̢otidZ2DR R GF a5xȩu&ns+DcAcS'jy0wǖݘ iPs =Yhi WƑwtbcBL<}x=bEi|NκXwqq*|JGS;W+ۉ5y4## K@w%:fmZ{~j yhg'v޻MVoL�m\\_i+|I9<5&ɞ1&a> 5\k#f]k K,aO_iOS#/S"6UVT K`:ɖE!zƨ9)uB̵M~sb,r@%Q q6&.j@xY@sfg],5R; o#,qmdڲFvg|5wwm訩c(M88L#p۠y -?$ 4I[zjg/?7^"Fg6[P ×,W)Ag},mwj~,eoj@z̪OpیKv SΞOSvL5MV7z*[+0<jg= PrTiTj34g&ZLSrI쨵',b{LTAB<}3+xg6 sCY-3}IKP+ 9׳:&AO\ΗԚHo;擣_SJ=tks |i@�6fyμu-{m-}gOF.ˮ[ +\p%["@ ݅xdv{4bE;VU ,` (zU>[55|�g3$vɗJj7k1מּإ׷#n8rt ̶ u])R[\d1FDg}:0溩oXF`#D؎<D ~9R*7²*.@hXL L4 hkl]P,@=>HvJnUu-Y<tQE:}9B!sِ t4xk/?24M ^Z<װ[2R#qOC 4I9\�F#o}h%t}BC>a&+X\s- ʨ-)3W }ǘ9�cWL5!SC'0mA3:-~|V5aѽ?+`y@g{ee!7{lC`}ܖ:8<0N!)\ر6H"iu$G%Yx5y`I@'P mIJN[S'܅F '\uHoX{Q?o h/KqFP^5ȕ'lB0>Wŋ- oͿHkY 9్*!yM9L !{-X}RXg<M#hZYDA͞=UmLKzxMӬ'Q;< oAã=F+ ϱWC{Ɏ3ai1cLHmh gU>JXuEK e5"O/�c,& D ǿrDZ<gKP L$kc+g=.G�ȱ`},}['JM\4|.2~'=d5G1N۹t"ixA]&I2jS㈇܉mUhIcݚv^8c〉Ii-&4rTw, ^G[}]Ӻnת:Ǜ @=a"?K,^ 67Pdy[Wz@T_mOkVvK-:ׁ#F5p\2޹kl8Y=~l<c{j@}'\ #bK#�|$^' j+ڽ'N-H}hMc-KgZwi�n$ b;fpٯ4 Kw= *{+ؕ>1X#}>r 4H^3fo'Cx"L5(*fqe`P\܁UU1C4l,)ƣD2ZqA~cǎ^�d))A΀L/x<ZH?%dA 'n$k㕷ӃM%"-٤04![O סiT@H bk)TV$eh7leȸ[d̈́xӫ%'`5h4r 8inҙ#䪻'83CtiJ&\˔sl_}2}>b!8ӥ=g0f~A#/S몋d+}"he[%dy\}#+$_bw�tŮtC  ׁAA VeC뽻yBncWGȭ>cp!r\&HDg: I*v)JT 'tu[Zc@UֶF wct�3㡋z[N2&_<xkJ9~vOGCȞA N " eSO=vJܞBHN륻ied5LL-!fN١ ׈d{fv @$׵^נ{(1gĎ&5vYZ1^3^IdW7=H @ZVpk񠾠!Iv])Rd#6k䥮?iB=KEz/w˻N< ; JVh{?ʶAp =\b2v_ȱ+>/CAGZ}H^ (SUDW,H]Y9G%"aubY6%3Se⽊.v7CUΞ]AF!(\H 9"󢓈dCmuV{]0pSk?um-|[zg87�U+Nc`e!jϘaB%_J;G^Z]es^n1܋pU((q'=8->;^pI9q˰tdjnYx5$Jw (WK9FBLGpv99>q 9y("ڽX&\ko*N-�%2OԙbBE0<mXqt$_iqdחyo<۹Ug g3>#Kv�cCR;bs$w8@w [LOyׯ][ H$G=}aﴥ'u;t)*Gj_i#֢~Ǜ&EZI^ApP5u] |7zdzԅ1GM,IH }N$q.5R d&hU7jЎVwf:5Bpnm dUdN$ٖPr׾vTG9X2z>)�xJ|#5,Dr D78"ʄ{C]y[ΟqZH^b2%U Xwr+3;%7 7~c-0' T%%lKR2lXr;D'-QA1u/|5Fʿp˧2[Pr ,y}Yg̱f1쌨✂ g &NN ;E'S9.Ts]Kj~GK,5lݮ"IY ZH'>؂c_UH VLr4)d{pe&ʼ={l;}X @a.ߧ@A!ζ$*u, #r1|7ίU~B RY5eҨ3F X,ObeXEc(gtbkO&ܔhr 8Y^H'a+/kRE AM=ĜE4bdrD 5fLo5+1̼i(Kv>m{;r⨆/wd‚ WZ6ܖcvVcNVik9<` 0h}̸AvV*;j+4>bq-7$oׅt,Sbml!j<unN#VI>D#%aI?˜ ˬ؀uY ٓT4m/ib i32?> ׾ONP@G+$2~f!.Mz92� brDl}ohL}ƸcH`Gf?FjON7G! gnX?9b{ٻ~ٻ~g89ܾ5?/N^ss?;hVt t}b 櫝^3'ODz1VT�޳`FȊ1HR9BTr<cɰ>y ŷ S+[Br7v$^?AIb�9[(^yP]Qt]#[q1lOh{&kFqV!0kTyS֊v߃x|ގݗYZP<n <jw e A!.1Hd9Bn@O=,OrZ76j0f8DܗvbD5# t S"'1uqH<d[a5; /nAX,Σ*uE֢RS5j(\b.Щ@lbrJ#: Sn>Ad8=N=wKl4'`{e>!GL˽ٸ5 𾦻ޮ&lT|׼Fmˉivwc 2cҐI|#Zol%Yqp`qᱠ}KR斶% [2Km~t?mN6l,$89+6Ԡ&TH ՑD;4|,x1C^ljX76/WX' ic�]W!xc L,Moº!닣xC u>iT4E2f~8b?1?aʎ28?^Z [Lby:ǵN*]щV*wU>Q`dUg"("U$5K~IףTO y_kdz7SG$X$] rVONAR$2u/beq{Rd_#PI7ud|Tَ+~5}z*4r˩ U]f8h6kPaYhyLNh&cAkICD6oN2.IF=If5V'Skqb W/urjQldrt I%\^ddK0~|vޟGl9}tެAn٥hR*ޙ#2K4:B7ncbjdi"V|in<cl( Ɩn*Z)�$!ˌ f esrr|@WȾf|WoM!| $2j B<7Rg{4 nV M^gl3$!7Zijr~jSA}2*,EvЀj0@6VM(&|�9Wg+%[Չ IBYpd5( ݠKd`IHWzd~[̹=&%_̹G RvWc.37,2e\Ea2'QeeAw`ȫ=qbN,'1UJݒxϭg~"B6jbo yo6.O<,{5e^YzVܓ| X^Z.zdɭ Ŝ\-Ns{Gԯ*d-P*P>86s) X&m%Y<.&NovW~Br21 A'#T`P + ؼ˞RNW [6zQuEC]A҅qN937?, tg)E),t"n.Mao Zig~7bBIRDy% ]-veP^j=f>:E$)+q\vSKR6"%@z#"}ǖPj Z`9pieMYNn2c-%uhSI vvAM!չ6X=JX6B%pݬ"nP|ۈWipCAII!N X&'Ɓ [ gz)$,Ny64ES^ɒ[ lhVʏ-YMYq 2wU.4wօ% 42˹ G1r!r!;Eg>1nmkҝv}M$SC-|u˖}1HInC)2r8=mU袎)龿p˺ZF`!˴ ~KlƲaEh>xmmx֫._qJ#`ꊪKS-6"SL&J [>ۿ Ͳ ?\Zkj6ɩMW7v"uLL[i]; ytf#>L,^ң;CճfZ3~4 PdeR-? GUKv=~~[$9/#5_3v~4m9tlLJ5Ӑi) ZBT~ӐSYN Bqʂ33AuuUZQ8ݠPcXӘqF~#'x]xx=K2EXN^V'0'L;rt@nBJw2V jwL'̑44$6p4x30;\%X4ݩ#G֪#s'1LpĺIb^F:MKvde #"mҁfTh-˔k+$VmOwwfg\2[w^;ehnvk? VHbU)NoXJj3 {{욛]J޳Ϭlm{+kҼuu z<3͂z`}Uڈ#ʼn_-`:5սTLbS 1[I ~A &~S C:![ؘ`i| ]&/t z[<x6{rq-V~_w!'bsmDžOO"nqy旍?pE$n#Xf]0"O{6<jMs-#S@f,T̻ EjJ i tWMAKTyRӟ$3JxZ.VK 1]q$3:#"'FXk nЗ0a5=>*[5]ZxQf%FM $OX\63cqDN*{Hb NԤL@Q:bI:53{kW.G6S`9&M[#(>Zs_p쒔ςm9}^g+.fP nX<ӉG,KF\SS0`8<!1ht!Wh6o%H"rB(MJ' :cYu;J4^ꞧ2vb5%0艸[Ἡ_iSYb4Lk@ak j|$`i'\ҎF&k0 P'~^ sT' 0ņ6bD;ïx٧؍'k ghRR5qM  CGB$) C Vh5v3G^G.NbIYźAN^A.#1=ɩmomsA`_M+M˙eXNvkb֭\qeV<M|>ΡUFOeCyp; te08g<�U{>!ù{pL:}<`w#KBv$MgDz0S]>O`HjxR8͞5e7;c"J;W>Ī</8i<'igaaՖx]PNeaX Q|8|SΓe¸s^\^K4X)T +*5cG9E$ w9O/@t@Z~,[(u5V�G HaK _~'fTahH*UDM Lb0M#ϝljr ;w:%gd XO_#/Nvs練 K39­ONed" ]v`ճ3NrފYLJl ̂ҲPu3Qد{[r,G列:AK &[?!k=:H\NB󩯤,0eM˔Q;t4y]@g̛ Ə2^Oy r J*Rvcv2Kg `sp?58sFw@bӨz0˓/t,1;D%ցc#&9�.0CQ!˔e ɽpbV,Ǣ:DҫD <ry<b*\TQaXG%O?qH:{R-a߽zpuASmH}ICGU{GU noY%*߉Y$QWi^xcZ~aOD.^S@gp-o|"* $ٵg1Q]zms. Z˪G5̾0),yRR4tBhBs~)ǖʚ?=~`r~bX4>@:޸6'֫X'3I)&PcfIl7|&cA~4RΘ(<?VW^&jv :*g59h3J0c}!+<sx/e00Q0h ƀyuf]9$aP.kzwD,Ӯʔ=Z޸I/؍y- 8f/`,C)TV0U;g:,pSmM|8uw܄,[䏚 ?13eϖBw[7{qڶ[+}LP4i`,'5ճ"^6"[vgbhA9c^5qQ'NưWÛˀ)/<b딐¾̿f'`ݢ)U;-ѷ3_@Qht ejE=| >d=} ܪۢ;4^x>gxE rSڷǶˣ;FlGpLײ! K$^vœ^9T:uڂԗI?e'Xc){.}\`3rs^m8׃!Qfcxt+̌"0hb,LK:k[y9qyDM׆ҡJ^lq2Z*;urQ^냭Ӫy9Cy0B|Hۊv|s09@4<n3)ܷaƧq_ONzs1J1,XG|ع=r[iҥA$#I풨0IiV6r_71f}4zţz6eш bBsh7ҾEP^Qx =K*#1EMq$̝z:Y�98G=0F;!oӫ$se̿,p|8{GHpŵA1kOx{.x4+>*bн,KA4]{8: o.2Lݳ'd{@vu;ߚ+jLF2KK>O#iwVRY9ꀔ*.=:Vր�۝Ri鹭6?ۯ͹6 ,a@(cftx`Ʈ'8䕬8ԬW{qVxإԚ=1*y g ]9FNT7X ٽ6X֥DzNoM$ȟ{1| )^&qxev~NUJL'Z5^{"g-@?^qNxm`f)l+p=IR`%Քb;4[0J(zON-K&ܑ &ƶ&G}L xR:ڹcT|-8z?Զ/Pףm 4'd'EY>/ghwaׅvGhKP]{Ԍmcs�YT?cmHl}N!{rrX,w4b{­J#gMOziT]bUIcc߻ZY^1!HOV܍q]/Sxc q`ԑ�9^_8N> e*+J60m9H=p0a! !T"TM-so6*<Ug2 1gO0.ߒFadF<!ŸG5 YO*jK?k> .[d8p. ,IJ9f^%c*Ϗ򓅄ih`JX'iV>!iG$c!j(埤!X_TO'.24Jfogm9p'|^JunUg.=~rlYЈ; ÊGIF,4~+5k<c2 :2JvC,2k} Pˎ+!'G5ԟaAsD2h}CY"R+}*Bԭ=(_􈕨'`ר̜Q(gof4RGk%KzxC}3}$$M"]4_õ1 .J|x[2JKg?׾ɮ#^QB8Bݫ) r iIyocbSP,DUjtGm�>*-#!pAhypۿ!/6k*PT\H@s/{D@VP&"9Jlx*<`Q3( AKZ|袧#Բ]9͕O]mKO Z^uoxj,d3.~r sOdsGܴ_Y=؇h(YfGptUYa8ûU~=?;9sszz:N)ʔ Bwݧ&_ ۩>tFt병)-pS`o'[ o.,{0w'`r k91ٽ8!f4x=Ћ4Xew#`K#izU:M%D9\\D Yi}, 2lŰlIhυjg\A,pV,:2T$<Y]ڮ/+1|e!I |r&>M{s$p)] iQm Q~O$\�T#!ۍqY\3Z{ (GͪES#-Ԁ)3^F}lDIsolك|{ku_%nL�#`gRi`,; [Wu[W/T?X͑[̌^%b l3{J@#=`0�(CG} J 'xrzX5#q}6I6#�(Co8 Ga-ÿ́}E 0lVN;. wB;VܾxPɰBB`&U_r6z 岤K~%,ǒb;Rb7G ɹȡBzNE۳"b+I{}o( ma\>!;YWG `,ʹd4E րbbk�_iǧD~ *JXj-a󰳼)H/@^.юuS."*ڟOɁ1$#]uͳ͙V&û' mޑՙ0;jd!lMzF5#*YxW,:"ꩈ  I0\h\3U/P�6KtVkb ͑?J;Si[I̬ݽ$sͰt;1]yu`'+:Bxyw]~6m+q]_TU,l{ }蓉d~2J]@$,zLPF/"?,۴+ vGIĻE e|-94UW5cp8nV ^#f`S&ON/4C,.sdM`ё6C$awŎZi״"NҨx8m,໓;L~2J ^5*,яC?"ҫGѓsF,]^{1 x- C�)gdUQB\2 8I;`LdF8iw/K>NvgO !ݭ> _v25gJуօds|JgUgDQ:D[ْŽ$1LV:+y vƻ9)[Y]čB#럈 Hi嬳o_eɕl܄FK-' yoKnjc ZStDXT9Ȉ:8R-I"ErlFɝ ~Nf`W*lYG֌GǼ^!˓f}w�ewO+7)4:.;nI[S H$޽փ iuxkΣ-`/5Ңs ׎}RiFnE#$wGmzUX2NjS8Ye9ᘮcdѸN50j8R )e6`poesBSšQI:;d|HnǪp6Q07Id2w:KNn!O7^6G[}WL&u*c:Ԙދ=fi$!7m8ZrqtqG^R8;,t-17I;j 1<<k֥]kX*`  $vG -D^Ȟv`wA[./, mxNB]QnAcͱ:jenV8198o" M*A}ŠVZLN!Crr/cEYWpʷJEM`w.D' wԨy'BmH=/af% `(=*hvz|w9Îc3jybL`O/-H~eஆ|E+HU+e+-LdTQ?$I`Ǐcxt58~jҘ3IXdzJ5Lt:%v]1s|ns(I{|,r.nOʄ=UhZ틐Yv0:{t$id:y03GjyV+ZW?@Ї[b-d*2n^K\<`펾Et `K$a u> +'7�9]2b@U uQQ5ݟā/uY ^)N/ʣsp"Q6M~y*S'OXM᛫"˯SXIr IQ:l䢮ă8H;"eI|46Ut.vyk'ʋHBPQna"pՌ9A/3mw}e3DJ:"a&/F5u*IpVיvUS2wWzS.tęxt(#,8&aܨ8QeVvX=I9 k9[I.Ɓ~TC_+S%?o�Ns_GR( {^r8 zHcar``[y%݂0' ?SJ"P#7dEUHB?lv'KŜ="3hi8Ca޿ݎ%ϰ).Et*蓵K$A݃ 0J^F2xgǵc)YhP4{=eewzlήy2o2V /fsȈOJ d7\Ǽv5$jg`V B׼Pڲe'#8)H9gKq,-2Ų |`ZQz`Ib-6[[E)(@{+'͌خTt-1b73De-_)2ECu`܌>,/ SEUNdaY~z|v?XQnKYqiM!A舸a˖4ԮbX r<1|x UjcDH'%ş=(7q(^d`>x'Zt+>d!ۋ7z~>KFʗkK'kc*voPćW% F.RӏѻF(Y϶f2 RlwD3>~NZ^@Iʎq�%n[F,݃D&7H G.CeR`0`"IKy WZ5S-Y/8^mzI;"%M\`$^v6\)OQX%gg;I-dt-58Sg6Y;ϿSKlt1awD ?'l�LUso.ځTAMBBEvIfg)X{ċdom= T˒IYf4߽BQ33/IlWNIz% R# |t}L-aݶet3͝ݢZ"b2hn`ouŦ=de@;F1]PŞn ^1 BrB42^gF6_OI̚6odzrԫ4*sP/()J?bYe\gxwC _?I\7}0)W>LK->zl5vm|M#X&^N9<8r;k L}q=::rNľ6dEYB cHht599Nϵ~VM(@I̺�N1zB/$ FYb526um]w bE-NecuX<q,]T.7<Fݬ^rX PXb`Vˍ_-x!s{k.8I!lu}VR`a քS>5 Gd]=hXKl]u7a #;^!}/80i2X9x힀I~ȅurM$<h'%({9k>4PkV<yԫbar=|"v.Xyݓoޕ]?{ ثo,ouX}*t wǓRld)[X%iK+%1Cɵi% *I+eߏ^KOGhjEmzZK(jJ٥ D>LEj:q ,�n wHT p/)?v+fi'r-3 R+'=%wT]|wy0>Q/fd2٫"yP)MG)ήmuib Ž]q>9c+Ad�El]fIݬ}Q?uqf.bEE,wQԘBy@,Frۍ"X #e~ N6\ lvzsQz�vF¡yɤ!o+kLr#04%boE9kA QH'd:0V;3pD));6`saa~Y]IEeCޠ) 8I [9vKS2cS<7hvx1hi}4Ć^ZF|m}bndTgݻٟn?8 OΕn9X,f\' X]^U6Y=t1<6isCuA?fR3|yB).8fe3 *h~U [$i߮# I%JQ `v1nm'XU-BM{ 5YNy:{>\k&X(1/ x)0EtmH2zoY_eة )x\hv{dnv*]wsN7'Ks 1i|j p5oqFv5R8Ƈ[Ė}ƈ *̳lR Vw?Ohz[@oIX}W_*PPr~PEtI5axƇ='`yw+HgLFT_]/蛇e]|ESL:\LW_에Nz]eKh; \2(zD+lvؔBvriߢM=&hHm|kzx_{TwWq�Aڝ1)*w=*( a kj0 `T`5v9D~ߙ(ZO<S=d:0+K [~=jyf}[ד]3G,.i'¨"#3n/9,SBYڤQwYfh1k8|2['7t%@;6<@[:Y-`,6Wp91Ͳ/W\&c=rv/&�Sl ^O](f{qygڹs٩he{(9e  <-3<| : /</y&"̫G,q�6g/~i)'X+ݓz\W>3}aoՅvBa)-\Y=\d1w~T;)H�pӅ`'Ή݇ӳz7{I2q9X0 ;)5ycgotYg9@N CE^h)r25gsYsnc<Y<nh=eH5vXt[?kvx"w^? ;98b�UبE>`: hd-y.]UK `~&RgM?0g8kLACo5XǛm2]"+u6fe5V,^AmM0r°TE/j0D,3Ppxhvƾ{WW j#l>'^nA}]X:J?rHb7O+ZSCMKv7idXabv)B#wvNgKڼy]1T=? 5|`Ȥ'L,jpb)[<1P[G@-q,܊oյ*0.zD,![%2"�~t7Ge;z`9|)@~Ӳfj#iuÖב_B)%g] y16ǂ\Pª,R.8'`r @tqܦ&9+S`u!i&=̑Kh4|2m9AOlE{qmC>+-DzeZctpZ}b,;Ub^sk\f45}`R+'3bKNT-]J 5},@C8N..Um+C5BT~otN綇at C nP8`\aqe4D-fX];OV!<jh YfD,{?iYgǜUq_o(ZV[pw6n˚n7Ls8R=yk^)o8b;F[)Sy">^E ',{v "Mzz96,;Q^!k!.Ff!{Zwz)k_f4 1!*g}A5<ke+B` _g_A`>doЗ0BL5 ҨLx֮GX=)hA"چ\{G9X]z_Y piۀ>\p[wNyȬ AϚWܩiw=S}mZ۽uk^gV .T)O4r{ЇiW{*_i&> קܙsVSpZ%T Ɋ*%9Iÿ)(IB:gMA!=k+ODNkK qs5K"xd]#̸0_+QȮ8YY-:U\]d AzIw8IW7vs@ʟᬵ]ظK5}4| I7dS'?B<3G v+VNWy$DAVe#0>d҂Q#б[Sd}g%_X]Mľ o}U߷ܡ͟ S6X]7r89^ӇsKBHB^SW^ݾKe௬)gS)%'J11A\!ۀc cgM@US9PGN)y;~:&ݺ}Ǡ;Ić\x>^׫MfH._yOc7MAUD e9iqMvsvkeBwe~sG/]f6Ei )K{&FkJz_s@ii?q(1.^2vEU.X"+$jY\VV1Vy=纟闠.ScT%}cĸ'@ʾx)$:bAJ3,zx[#Ұܴ}+Πۛδ]/!pƋk(DO'2S6Ow &_o91g,M>!|D緱鵮-rq<c.C(5W'n1ux^n?4k%֟<XzA5Kr33&Y1x.|\a0w&o Ԙ% zd=S7k3~j߳#إUD8i~N3W7υG?~VfQSf%ɰ$[jI@GVMTv¾y<l ѹ| vI2IŻz?⭆1=u=\4b"mH1=O2Ҹ8-F۴e<O{X )kݽ7$;$#y0>y}f++]pG KDnA/}I`eڏ9R7nrm~ΖR$]sUO9{v/GV5 &Ra[3JzSiV++_{-ܖWנ$!ߒkf]ϯr4|Pu sE[ȱe;0S?!ݯ>]P04AGudNC~ɒnUN~TrӴxŭaKE?$L| E;9G\ĚZ[ľW*8uI zKSf:W ؁͟D#^d! jviuv!GShU?N{jTp<bnfq ;Xۤ׹*3J:FGhg'g:A K_].yƕ%fW"d9g xvUCO9q}Bvr.((?E//?ۿ7;y--յ@ mu9WYڐWz-{tKe>|lj:ғFzxhg%<gbPհ* �c!I#ֶoF/_"W)⅑=j=|a<SKV;΃I-aY†<7?({!}1,5;ClSKv&Hu"^{<UJ}3ȝUl'nhvO*uZӾ\~Xtx05<hkr喈+=F$Cg]di7t[rLe١!O,A7?e=zP]umI]Zժ@ڵr8lX,_/IuӜFkAf )UȪD~2.gc&LBv'[79+�H�^KUi9y%^gU^/ j*B_92ƸȥXl<lq}3:%( #ċ̊?`ۇX2z~ĹzT~ʏcYbev>Zp GsaŻ[*})2 Dx<u ;jDl<rIh2J,jkFafO&sK~,=&7.p?5W&stP {g$1$ o˙/Gt`NNU .4AsKܱ˪NEr i;WkZ<_c.w5 ]ڱ\µ*[su+%o)պ* 8`wC(f;8+p_$-!ކ1"1!Xv FuD4lqݳYd}%^t:pzؔ=dũ*Za7Ovfwb Nj(=% "JE8OTJ9:$ {ڙ,!f*={8!=2[ dK<312eͱM햾5f$,!bZ!<Yޥc]L%iD'RKRȯvDw(2陽b8 g 쬇GG,Ӭ <,98F79`<bJ:ժ 'J2&(r\ +{*{\"nS1NOjKV^5/>0uZ�,H ؅9VVwc#VfvRo2ʫ2 #G'ciSB^9KgJd񢧕&aTvj,sseqd/J0gu>;lj}Ͷp`F;[KQFfg7d˞X{,}&l/5q(b]zq5칖*!^N3S ~ԧeM\[9hInb'B[K\0<\奫۾WD$=p#:ZZ̺v-zqoOwvr gݚ׵I 8%EK+}<$ϴ\>r]@o9ISBiq~#*O+�uh-fZBځq scN);xC] !P4IRB0DgH:M;)7O\D[G >J,dt_|n{ J M^1kى=Q4)QJ <4iħFEoW9 .J RxMtg;-d߸~±{ \Jr,K9fC/p~9Brz -~s&P eKmnz֤tǢ$gfH`NY2*KU|c"t4iW:2jdH,+hxZ+,^Ok844P}.d$I 5l9+C..KR!}Nٻ#wo2*yJ^:N\=ݒ$XӵhmbچƓ\4`U V~bFy{zڴ0NGV-d!c{7dlX=8,s<_WvuO{CE úLd|8mM[po)E<^aӉV y2ӂ۸ /N={=p i,uB>tE8߈T .aK 5;*] �){]#S$o;YN[Cr?C^wP{Di9V{'$'Y }OYt3nbSjӬ^v7<J$8 l)jw/qM҆`i{ם;yHnEV+LJ 98>|c$Z$`*9KhѵQ�}Jj N%coa9c L|uyIVJKJZs]C}[xyh{Iv&H]V%Hw^Fi!@rcUfFݼhwwDY(i_d7?o/΍+AQRLVCfF;ix޿^O}^ }4ʪ-i.\*e ,4VUL<PDVK�è}s s�]#r3�hxh2"G%G:H QR>֋qThQXWVQڠ%ii J(ɖBv(|mw3w EcLcwF( OYA\nMdgc�CFC`lg 2(ީaVyrO2nO0+.L[1 /Ζqv39\9Pyoߔ0cn}Ն%9eJEbްcໃ!rs,eP( +h̟j\s-P^3Gz_/F! Y6uq7䃐[[&Mx3hq B K2i )Cp2~= ([_KjV[CWXH,fnYvP#$>b^#nhḊp F\ ywTn~hCZ9js#@˪0�pw-z?vc FC5NX[p`A5|,\–t7Ԡcئ#(z Uw B4Kj(SS1΋hr(y#PJV'2UH-Kf>#C }Aao]d+B{eyR \˥!V[U,o&bᠦ_6tΧ9Zo4j,*[`Ry< ˋfp!Oct-i8:g(W2lqX& /;ú%T{5@I1@ҥ9gx@-voE K gx} O!)jhg7GuIìnr!Ͱ8js.rX ,`V?ςʜ NpF[B& ښ228,hH `(lSx4jK1"y= W'|a}s^hW& *dyt47{Cі2G6PEl;0z#ttbN+B΍Xci/ ;{! Lf*[wSc5)niUK@wl6i5Eʙ<Ie׳͘u'xlvs(%_s--7^G^� '(j䂞R4:4)Ҟi]�Xǽ,\r͋)N |=e)w2汓Cڳ:m8;YdWwr^X$*gY;!py|xZ&w.g͡U$V;B3݉MǒފmT<tT~[0* -.v tB-(]R|`yk4I[$J?p^<4%.'p#7$h!']Ț@Vni>%71mw:&,F\.ߚ1 P ^uTtտ ̐&^)ΛN#\fG+mN\Yr{-jFkvԻ'{4xn!]P3dAu&&?]- σ[hs9ƨҾŏ*G^o˜w,*%^L0Qd5} e㤧0Xqy*nTcs^llp۫!T$9#^F:c=T."^bl"[r71NdneE]x^9rI:i{wO# JMdRX<Pdx[r`֩W 9"k}{sAobi.?Ē4[l1+ɜ ma?Ċg9Iԅt 9 3! 'Jxq]o8w~'VIXՋ#ז wH,fP¬f?eʕ9ގ¿El8Ilɘ0\y{8t62'd>}qrb&䌬|Ȏ1K)@sOܩXNy :ЃD0"% KՍ8K{,tL%wIW1L52Ì)Aek `O8$TUHdjj_@~\ sl5sH{Xz)cO=tS\ &]cK'Jc͜ߑ`jM=8 `Ӗ5iʁʥPgQwowډگ+o}K|kH5ޏ1,*S}NDQzŚCT0=}їLk jj,{>4?-{^,ғPqo]҄`pm[34Oֲ8ĸÉ^˄Pa(tn2sD<b `p "ȳ{+שAړĈ+ۈ-NoGXΕ6qDU3/MnE5 WyHX;\:1-pt[Ɣ::K&I)$cЩE[vmzp?òU?T%ɁdΈǹP`"WN댪^&\^ٖ#&wJrC>!:}aK,uJ#xಐN1>}h%<\O@-b\T.+7_ؒ$^8+ᖭM^2!;'{:C99Bg;a Wt.:Yw[e9qN@mzivtXpZ1vm;{Uo.ԩ9(V 48)XRI7KEe.v@rwԙ˲j@Mh@޶u.5y$'N)pȃVL/OAĎ :*0A&h4<@t[ǜ?)ݱ1U%tDk"5o^z$sd@T@Z ]E 0nelx`&dbr^y93~XPjOm]qm*^l1dM2Gۊ;NA�0KO:01LA F_`̈e륿w{?VR=6Z0hZ,,7@ Z.$�ɹױ:T[@2ۊ%`C7B6xK�sS43 qlN4#%9L5]O^[EL3tә0?1[ͣlYT^ r+^ f~b JճT~"WO4sl\E.7 Ga5r2ZmRk 'KhLX5'<u,?CHꦅPihRhZ]XX3')PY |[;\Mh~=d+{έřkoƼoi{/lk]ٿTT90~bFϫEd~?b?8^yؽЉ#dWD[d^rGV̘o SJ�Q*|h+A[t=j` 8fSjdbOMn-@K8n 0pk~fk>獖'o=Alݩs_m (iΙꐣ2LS0MdFw N]IEw:cAF?-m%[Y*0Ocz�-gKK\~]xjaRhȮq2mGܼz-8İ҄@9HG{viq]8dxj"^\bfF2EB L Q>M3>b``q?Gx k$ڜ>QwA7Kk';{pLڠEӨ{Yj\AI9aD[eχ^822 &d.:E^c}^T{~KWð{Zdox5nJ,W˫Xr^pWh-Nq+;YOS!&FC NJ f,ܯO 1FdǨE�-/ާZ_dJrxkp;du>;YIdb(cRK;e7~IJ\o NVsVǎ- %q / ѝxWD*9{Jz Ywx[*YjPN."mauzU\x- ;x-@QirC¦M;jZE%pM8iAIC黴11qwU{O,` \KnBNf\2-{f:h +gP`Oq6 rɎ1nax�cGv PgfCX..hм$xD<c{.'@Ysn՞:m7O- A OOTgZsS=~ljlYom5knGq]w\Ž@U mIonǍbWa @'/z Uj\9Udy N[dߊ)vӖZdQƲDo5E@Cv3Ů/NwhU91x/ s>!.`mQ;G(+e3c@I*CvwKl:d"v)9h3S9뼡6 _Ǣ튽?mUؒKUpWbPo[,-. _Gt _ F+Ȓ ޚSΚ꣑x`Jwxku~W,JdN]{^%q5cU$Eo{Z#7QDg󫧱û?!n.lezf*ķG(yF,ut]{M:q0Ip)}T0s ^4Q,:skZ_ fԀSߊ{y;`lfǸ+̵ GǏ3{_t7ejB]VƒcÎWCG wx~)ҭ)lrmO%(=9#QT'deCVo5c4e/ 15f<&%cmA, K dL[JjܝE ?l2wIaqx J-Чb*J@1$k.`�Է#Ǟ' .UO1`8'u0[Eu/To.DԮLK^bm`{Uo;X|SCJ#6* ɨHƂDv`3c}ڥXaU?i$Kg۰ 0y,5tbD S5PNϡ3B*/꽗Wj~%(+@uu1sp1Z~FV{+6S`{oKJ.GT%,'Vp3Fج.ʛ=Q|Mw8%cу Ld@5v: Lmg{*w&U dt rH=eܱ&7;HneptMAo^ArHY:oA5t:oRz\R(ȶ~!NbSPb)%g䚶Yuo:&o=~p@ - +A&#^{4eFkȦn:YgB(A؜O_-B;>㚂'E,S:'ZvC|tDN:&jhA&�4{4Ԓe|-(pxIɾVk)x":FgkP~Ӌ'ϴpxJ`;W6_4irˠ$9 ov-"#ÖPb{Ϗ)Ñ e{cyB]w!=^_ȥbƎ~bZ *y %{cʮ<Re%$e {ɗa5�ԥn_ ^/K<uRj@zZgTLǠ-WNO(x|"į(S])Eb|$x. {cŖ8Q׆b#MU/OF,a8u`o$$w?{y2Vt<;!sFsAŢP7lmfa$,iۀѓ-L}bG)WM1LqY-*{&7PG;(RcNxVLXq[3S\jlVD#%̉X-E]E~�t_;νEޘ%_ZYBUSɐ}!<W@ zc.UM'l 5Թ2B݂Շ>iJ, (q K X]0u֑Zq']2ƟvSP'S~ %{cRFmݥP8鋜@2?5r遜�9 1mWg@(;/Bs]ԃs,a#7,.cg ^#D"42r{f_nH}hy5xʙayMiT(;#1B]E 'P' {#N8] Fuƽ$gpL.{@ت_?h) G+ y*pI]U`d+F 4Ekz'?߹ZDsXŰ8.;O/"ݙw槈8%S7lA?+z>Xq)\ jؘ7AxƧr:1{g rSdzE'BVhOVHiεe|܈")fw)S/�B�/cdlq^"yj/E7Ȱ.z ){!gLn\ ?K@Rreq؛KۚIwf`8``F!L'  ; StrM?#ؤ!u-;oo[Eezu `r+>3#@H`%9, o,ގ`>ɰ}3WZ]csFd24Sl5y)4Jׄaʙ@ k4{D~Jq ` >-#U)գ@8f ^> @(vhҽQ`WG R!{1_ wXXN4Bޫ>['~_>Hr[iZ}^4gD(;#%.O^匀9tZkj Yr}ѽǘޮHFAҐ `(Av΋A<wk_g*|r !wH_W~*дF\=z6Ɗ{*ކ^ӫD1Tꊴ'lC>jl J A {0[$OL_Qa'״EP(LࢍQiX;=w+WS7VltYA$mf֔Z.N9\UH,ʎI!!?(q{ITtݹ9۝F%N�Qb]ҷ 6<m:I)Y-p-Q2b(I~aW?�JƏc�2`)W3+ ^x*$pCx1Kw\ <$Pht^sxґfA\ ٩Ñ=f +?Z/~قI'|zvc4a}:^k#CIY,DG]�) q>RtBP\>Z,{'@Nv çOO8w'hQ9@:ɴ,3l/? ?� `$-0rJ�Gzb ט\{$|#zVi{.~=6%ac=I#b$P'p Lj'] *4KC΂KHq(g#%B_KɤB>\2OHQyML-=M5=W6SbIa۩ﻫI05cW'./\,Ob>Zп34Jl&)"P6:lS<-ld|IiILj|}'\^Q3~׿ ,|4s"|5~gT^}}/,l,V[-+ %,{}sm< ( 2OeVa9u:^VB hذeo/^Kzw Gkիp6O8jS'b]|ZO 3.P{ Jj0Kf 8 {ϱy)XVc.͙zlbpkq:Ӱ+)-ueH^mG3F4V.[Q pUPlQ='CA�tjpMzԊ~c9!yd}h^2L 5uLx1A:iaRe(YUӛ ܅'o(2ټKc3xNîCʬ8ڙC5c'Hs=;5[xڈyB‘uYShDy8 @, J>m?h dx&zd=<l?4tg>I;[�s\y~".UDA]1=e6uŀ#?+kʂq((eN>s) ǁg;ujA8Sp]@1N}o;ܪtcî0>~h(QŜր.pz`na̠fS2rj`NXZ]S1 #g6bN &:D=$Q<Gaۊ; na+n'+Tw2d  Dža_�eRHx "-X%w{k8b6c5 AhIO0wc~ <8٫֨HآiF}ʫ>YbD }YNO+B)<KǴfԲRcU=I4aZI(h®�UO$nf@l,)|12b=&'a7؞{b%%qůoߥWeCGcrQQmcewOP˖lX$NF4a"Z,px Qa7X\VU AkM3<BQspq`8 A\Κ= &Lk8 Z!C`U<~aRu>)1LNh PE٣ng]a (G`/zSn Vw^w�PI1I8JVay &Iw|bشmY'�4VCX!'hP`Z@c2݀A.,r鴇[%&7[s]KyS7[to^'C7$mGk˝ZaGJ悐3iSj$-lrJVx  7O%=J{=?i{ %%{r-iwwkі]ti{F'p9"*ʑB6%ֲWOm,Spr3eLQۘ?V?v*` I Ƃ >w4T$X<Pb1MiS@2<@Gac:t'@ٕJB)-_<N]2vJv۲>S=&ڌKYm¸v3C{!$һ* 4#޺R#lѲoqz)^יSuOXL9 adqqC!8Ƿ(Ǟb5X~…XoLiX+C|T@>)sy;mZѾD>r6URjlA(w]Lc'qz.V~nrv_F73K\\)|ߧ.ז=rc4ll�ln^0M\܋_N܁'bˠL}24enޢOAqZ#CQc5CɱI5YiWPv-p-π!@7X'MŬ%%1٥y3`sk �'mVNܶ-%Ibi d#_e)D!E߶-qV 3OzᲹCu*L vM {(g4 >C"t75L[hO BoLw\giϛ;">t~NqW7qAWhmNޤmCr^GWM#wTJ/= Bn.a8_):2E=A]WuTtey2n6EBF5 ]9i~Rtb4 ux*3?I dN3$n {AeRk"@ExyN>J˛Ȗ^>Hz:QXcתFwɏ Ҁ%ZbQд-Rr7.Kk=rO8аL;eG]$3FlW@]vr7${G͎( =*W],쪽#R0|nQ @@>%h狶WHa~:'o{qⰻ5Y R �eO& D]sZt[D?ˊ[i RHqie]n*PNH1ۃ|tS]!$Ź9IHpJv(f1a˚coԺzOG~%Y8CJ\z7EV|v>~ iι].tvXRPoM9{/􀩕)e<_bL6�ZZŇ^c^{^/59>)|bUɭAao}1<@4 ;y�_F!~E-?ODpס /,cy>=˚1hP]J$)&/q:Aix*HߎeJl {5<( a$UrWo Q@-LڷS9 2iX <F޻wMV%Q]J,{ x$t}cLӎ@"m r@o1 -i5zAkaICAǝ}N`YpS@fwVjthٮ$jƉAnpeǕP~ fv#`~8xnofX a .q~o `lC^cSk7.Dr'3Q@D%)Ėbl3!2s e Cw&uˏu_.H-u.aӠq"1gβe�<NBI\`:= H1~ 0G`@伭%@8)Khz)}௘;_~_?n*٬r Zݒ{+p{�J6X2vڕ l ֖3EԜ=wTh('z~T VqJ&Y2^Ԡ/#=ѡ}dnM0s"a=rpj)TltdE4) 'vzF[iotB)vRȭ(/;r[x:6cA8{BdPaBc>(`K/UaKQYLѴx\x-H&3` k[y1 qPrihZ LV,~aZ.Er6:)cf rNqnQ3F s"|4=a$ 0 Z'oq0MuQ{K5&ɬ.bs:Ato#yx$,.YBvh+kV{ڂ8{5d37+sR&A?P tCr|8t=W^IuZB5Q bTLVs03`6D2e0$ʂG*"=G&^hQU܊  ,#W|W<lϒnLCWD DZ<>8+bmrRÕUTq5TUEHmC{ѩVw1 U\}cK'{w[).3,CYr'J[-{Ky!$<P%iJ&9/_� "'$"eX>Q\:5Vh'S[=G`c>N w&uQ+?ĐBv"G]#:y%c]n4+i^W E7^YкȬ1&!!-z9|bRWgtWT"Q}`AVn~ܞIqv6PRfK,ڴ,lCËVS9,o} в_r1,L=vB1#=vBq�Z\vo,Ί Dk�rf*X`p` )E,sI"u2x١mH:`aJ)GQBIY%NAYHO<[olũ(KuTk0CE�%%b1qEhƈ1L1 ^$d!RuVQ93m=,=c(JŘ͒_Ã]M{,ZvG{]qEt"lI-d-v2_ϰ_@_ա*Ej6`.V5ۖ=i#S{�Xhny\'UQ)_:b+[و=#^ Uu&85�(rvdeFP_o`ZN}_]%T箦qw0;#S}WD.[[٥Ph٫ws}kWFbvjk=dy%ٌ_Hꔎj'ݣ9)Ŕcr4gH:OQw"xv5k<GLCš(: 䈖- 1~,T(辮~pEջ w dR+mQL,.41Q٭O{HSu|x!<�JЪlTX ʊNbEg{HiK`<#U*ӛ ]4" gJĜ& wD]ZRٯQ[50]\AeeOWK/1'<2TC? zsFW졨rY"^o%$s<z'_`КV.11ثRPB61ty; �X5-9rӽ[%gAeOۣO3z<B^9A|9zQ;S*/(ֲ4A(G|s [zkyyʱ2"VC�`9 KK /:-ښ%yE#RGĀÂ橈]K4j*Bh籝k|i) shMx'WL-[16^~r.ZSHhM-\٠|/[ KRVh<]Rwo\qU *z{ɞl0; .jdj\BJhCwD4ҁC u|zL[hiyDjq{/0ނ) :}1Cl:F%Y uR-uB#w^A!HQ:Σ=fO0ܕ(i�ԙ-P'=omTorbWicdq*= t.2HfsjE}47 FVEӵz41,ѝx-�Ij({F_X0h"^@)Xrԓ҉�lCG uZOcZ#l ᬹ{*DJ)GQ< 2 ֢v(ckӍ!HPN9>RkvѼ5Wl7Z@ h^GfvtŔmg@k5br qߋ'Pu,[(w E;tX(t: fY!՟M.85Ng^(ưƛ<ayf\$ Xɕ&0,[ye(%gϑN1á/5ƂsِԂ9o PDԘ'o.-ۤp@ֻQ!LI߇wihC85 J?)[5=nʽp=h3nyt| c͏s=+h^әAZMQ 19Fh]FrW':F56͘vo1//liњǺPJ9fqzӀZ;ߤyA\6wKY_<Bit]Z}$t FFG0cmcUgQv=ٽi%}Ǐyj6rۦgd}wTF*ܣ{ EJ)XM{!GTmRLBι`M {`qkg(;!O$XQ= ;JlnwD8̳J)_PD+ % NSAA_5[C9cʱ\4'<hvOj3jADTV/=~cFPF9l-s 2N Dn F?He,k\H&叔 {bsԣN*˰1bܢAȐ$$[vN:lI-yܧ7-IXMH->pfrkC쳺+Gl^omYgn uRMڔ `˜*:Nv#rߜ$^<mt;Âh-6S >v X`%=(;BXoo ׋Ȣn!}ZGaVf-<9?!ڂǑ_U섞oasbmdrgoOjx{Uw;LF`k2O"*.P49Dwv J:zD w&єȹ?~*=-{< &ǂGj06xW^DPJK% tlih"8_';Kx9Ze@yCi=�iwBlY-&i+P6cw4 X'QVIPzcPzw3fW,?I0 B,K7VzϐG( @@)~!5+QG$Ҳ'^LA?(%30oOH zv vE% :79-z^}ٿq0 cQu5_xO%f0fdFTе\aucujǼ_ /b!4A2, CǏSz/VQ{O; X�H9yqIQc8{+ &NAɱ>@ڗr#R˖WK`ģ6v ffG8/9 3cn쵒QGbN˧,]jA 5q8Nɱ.ͻ+PB۵ |%UecR YY8Pm]S~4[ ?vd ~3|-^zA䢿lxwt3ms?B#v L"hO@#%!o p=z-ɷne~:;0~Ԗ} 0} ޤTs:١Ie-A%X+sƇ[!̔4 l`SU-= p&PjϾ{A3r*>$ֶ9;`TR$H -ldV^YA-V<eOixޏF[1Xoj>zw| A8beᗥ{j-|ԉ>7ӿpta[,(P(xX{l,=ӖHOmSV2-_NS4Zo?h͡}w53ļ} <MxyɘI5:~ǝK4t\�SIYsP";}jj0"# 0nc$am^2 @`.B*BTԋZH#`XLF{`n9(eǪz%iK\8-Cž[F9ח ( U4JvmUf2 PӡR29*vu/I?ƵrGe9&n>q8){4*wZ0?NDh[jp$s_  %!�͸JcvO/ Ίaʔrnd Mǟo},rVP:9VqkZdTXlBqצ{-Lj~׿1YWآtrȉEB|.jpY۫+K=0 ̛9csɦqM/[bX r,F <30Ȱ|;QS49LP4 'lv ( %7>2u7un!:[Bȸks0唳E]4(6 } ԣr#v)J M89 e(d9[-=A 0Śz�bϰϹ;pCZPr&/sx8 aa[򣩶J`f"K &NJq[@ܙP."_ȅ,7|Đ2)6drJ{:yDE'DdZ)~)쐻,]^0* C8 %!q;?98@EȆm�`fTLb&Z]ƽ�K׉!#ƜkLHLjI]W⨲̼]T} Iǰg?d+Hm)"<w;MSqDĩ~BG^1H }:svAhi�R7zbt2߄m'Rw{4& >w(,fHST,jJajN�0rjCδ-O]LB(&mEY\Y4Klm45kCRQܭ=»+w75b 95;bɕmR(^\?ˢZwP__v]më[sw]Ҧ!Dt,C#c7*&a#Dnc`[sF7O@kq27=诓"U@GHS<�xW՞nHW�A:eTn/pxaL42.wWzMmml1$Y[Hq&U%/K\:h*n]fU8ܹ< -@@H <v] uy#"XU[ŘKvr۳qAhy>/S,#Tv$e #tmΞV(ʉ/Oƀ$:^cYn?P- zu|5 gxs 2ss±pPل <N9tCTFPBgT,Eȉ9ĻBOZj()Dݴj5w}xf26Y0z1Gx7{ xpD(vgo%8BxK[M>!uc8Vk"㢶$XJ}(9.ңv;3hpwhNX^:o"<Qeu/[(\/ O΢VÐ]) #zȵIW;9v" |[f2ojLyL,e^zԣ ^^;rS[j+2zK㭶֢ήn*~u(Lv�Z @'!t &ěEo]­G4q c!'3_?M^.FIyn7iS'|.ؑdն7M^GC:L]ޫu9'<[ATrBKuw`=dElk:x',2[I1kv 7mՖ1dW~m!^іSZ+^Q 9ٳQCidж)6P-%iF953CeV%îd4m3*1z`PH_09m[ᚎ:2!ϑ< *29ȻY@PP-8i6&XBR&N03wqZ@Ee6K^)FTL2-,Gd?`Vr:Ŝ@ s^J?bUK*̲"FV i/qj h)=V~߽QoS[ьbD 7ϺpNx%i vNp[^g_Zawѣ]p-jD\؝Cʱ &azЁϷ=Je6^{mPwq+w:D%YQc .I4wؽo]ݩNW%Gu׵ qh7[8D8`oM9@/Jޗk`ps<I1xn$̴Ol̖c.P0*n Z|tTI~/N)0΢GP'KWgzE�f#�Cȷcyz$0 =ҪJ?-/ [F'o^}Zf]QIbLnILūdI=郦AZk", #?B34fzS]c;˚�Y[!{tU`qɉkÀ2۲Mv3;ffzqf8M}5F7̈́I;= [1Ur&ݝ\%it BL(mB()V$_#[p<9-�$cZ/jWCJРq*Nr(9D-aΩG|\ CaOD#ԡx |o'&O1#S#-&K@i\P.#;zR[o({7|*a>`֕û;Wķ 6 |?²~m5KVV]7=rxw_Z1AIwdD68_` ,A ]& ,!Gox_vS:K)31P;G1{sTmcH.hCq@Rk%lX8*(lN YC |GT9cAsNJH,@yQ&ʈLL5{q'wc bg~LJ'^8XAƄz!h )Ik*r7�oh-8:9݃J} <_Exh`+w2ӵ;8]˵w'uWYZ&Z}FW0}lir9׃ תp3>Dz˱AnrBj}ĉ=9{,Q C߫nu*5_ <&+nq`s^ZR\9ܶ7PٿȹR}B�B&(cxۚ[X jmw6HYwW+ڕ� #j_E!v-0J}HO <O9`A0Emi;_p}>rtY0  )zYS9")w9{lN|گ 1C4%{o=V)Ma00C qjS %mysmˢ}W 85y9{u Us0ky3/&[qoU /8^S2@.w@ΣT 5qDW%L-ў",‘kgj/�Szr=:M>z 8Sa)T�? E[OZ_9{,~"!6�-xά) ORftd: 0ಐkhoQM_tנJ"@8\Y$Z(r b0YvoO_x/7I梕; D+h4$j#~<gW`L[z9ܧ:OyY,zhۛRoq YNY 2Hg zwW^Mvi8\ -QDu뭖>G^/G&<ǝl:YJ퓘`,7V壪i8<sSnʑXր&PRVR&7 u̱ss9χ`iGǪ{u`}`$ʃ}Ӑ6o4¸<HmIőݕ:~/!#v/hrA@kDsb ֗PGuvΝ'Ǐ X+9�uŽϕ&~J~Ea@}fƓ?fVo0q i 2WCNah:e6cda >5?D# eκ+E`mMex#?KA8kek;l$O Az<i�-Ye^RX#94{Q5xO=ޟ[T]NLNa~c9.yMچRXJ2 }=(Ķ/wHq&$.BUMVyo.j {70v cn L�eM1Mz`?ŸbWzߒԲʨm+89hƂ==`A0>d'凂H0d+lyO2xOz"> jm?N(mI]q8-p4(DICӖD3'j[Y}B,.91L 9IrcRA\sMLR']7;S;-Oo潩eIo<tGwuwQAhvM^R#SM>GTT �L.PK*z=1+Az&0BHe>ɏ+}tqPםGyO�Y`e]i.gx^ŔȠ]DU 5ڐ7m߭Τk$,_⿛}{%r(#? 9SB o]Rq�׹?{CszR%[1<"<2Y^n1v ^)U Z_ Krz`mw\#yrwdiө#OўIGƂ+ .05ԭoF=sTo%n~ "$Q1P8 6X^齊yc]O`=ZCEV-DЉn־=/$W^x,i5ƳX ]b>Mw^H$owݜ('Wh|/*̚qLqjmFvK<12Q")s)0.A^Qa0ycUqOvȏ;i-gv[`B棖xQ, v/gx$ED][(mZ\sk+=PFd1(z:Z7Id .unD{yj㳻pqjJe3<%rPc j o=hekmt΂h eHfP!xcS{V7=˘%x2.AE3δLcȺ&>.ISoڹ\:,!D1;d m+bBg0Wv@ #Y{JQ.&x8}Gf{L?"Ls;H,iG�eS9JNˌȽy�d+T:=MIފ $P,OF l;5@ye*E 8?~H#kIuq*y3˙*:c%ʦKC(1$W[v!i`:f1㍑E.{D!"~֤Zd#؆fܲ?mQ7}ӂJr41�9rM%ܚx S,ÖQBbۃZۜ'Ts)c?azz5C^.^`!uQFңyG2f].xiSb_!%{VY 9TJƊ\7|rύ|Yȿ?nLSǎ5RkPd>?Y,<{)�; O1Xʮ˸ibn4r y(쩞0>:)x`^<JpntA| /`^06$Ck>ouݯUmrk,WK"#*dԏ6K٭dM{v(\\ի`+|8ɨPu 瀥&ΞN,(`9 ";A7wO>ߦ@Vȵ+™O~h(Ҍ2Vķ)Ζn?#(�2>/$-m9L/AeWk, xq\UdT> uKR\<Ŕ{mߘ=i�0Z7hMA0@/LHaGSnNzht{%cv[fE`ZLdhm ޚd+ACډ$`X+xQ ֋ց!X{kw~7L&s^,K.*E^=UP̱"lҗ7D"/IeD=Պj -GA֜VORXBeqӊj}ۥPQmZqa$ừAS |U2,H@ _(v1"+ؗ_\�%hyCjE&gnQ5lB�CB)lƎlV(A([Z4ڒ5jwkh՞K*.x}vx@A.}ד_V'jHQr֟R4T[К}lQn%naGԖ瓶[E«5,h%-F~zv5څZi}b?<5 @P >.=l|?Ɔ/WJFN�dOLaRgѲ}+Q-gvӓ-Q^&m:徿<SOd2/>S5 ZN(/ѸL:)ƘDbBEζk謥s]'\hD$ NC6jk|_-AyKFc,d"Q֪U'1n} +]@5ըP$_/[ZӃh}1ăbf[,w ds|"%ǻPʉjXbsahf=W9}t_w4ه_o︣+ok:{}s^8Ȗ Wæb]n!s}7!)2/(Lp|-=l>sty-Ս@kcrn^Sҳ|ZJSg Y9}E(kytoҙ=5N[쾠B]Je##i v0$owF;rbpB+#J-5H;Z.yp,ucVG54o,HnaShꀔ8+)NWKisMޘ`{䚖uyЎB^K77b:a#"'^v23B6X! = k &>/(ս%@KO%K=BW9Deٺ>{=UCI޺4Q^O {?ֈ)PA]1Sc+a0PivGiѦn:tB`ދmK<kοw.Q=4kdU9/nZ{ߞ[g#-86P~eycî35PCn>gxH󡖘M{4R_[&&:r[[9i[ٲؗrbS+h>yctyV0i3em/X!MokRi\3<^}m?@|~{d/=䙲5k?f|;Joj/'Aύ3y``! \/ٶɻ:򬋾D(O䙒CyNb @? Lsg^SDo"OLLȻtfsv7mnt%ԁ㠏8FX#w!<=_[2wL~x2ߏg.)p`Ys ydv"ĢK^Iq4:'["Bۚ'vV'K}aXj: [.W[HX346<bl\oŬ_Nqi BWˑ$45}R+Q7lORGz7̙T9˪%0U*fW/y'u4<)2z/uXAF6V֢po".9ѐC.{xi� Fi-[%B64-pvpVLC;Y֛u8:PZԫhߏ.D"t[L1lo,OsB191+OÕl l/e{LjAPիR-vc;k!$%XsunK�Z^OnE#v|U+0'_{nCeϞ!(sQWd C<ˑ` w ĥ^,,MqԲ 2̺Q7VL2Xz=jA"G-O:+ zv():",S0#?E_=#cL$9獂}&u[Jɭ)i'1N5̭։زDez+f-y^H.UɛQDae#1 Ԫ tM5v KVr%"ӕW?,Z^~}\Ҙ3Gv4#\u-n>,0u9-Ƃaj8iSj U*b4D+q.TkzP gi}eĻ{gٯYK)#'^˩hě\aa~gEx@#V[4 c j N"2[o9O\Иl]NٛT~J$l.s8o?͆><gƊ `0E)0 ;ty NB:QG<19$r[ .wtL.R̾ ?!YycPvah~Z\I}}x@>i~–Tx+b3ְG=;2JA>p߅@*%90.zB&<v`8ٿvP ZzG;QV]'qպI).2LJ0Y>`XiQ.qTU?x5F_ Hة^4{xpmw#?eF\J`H>&tcJ^zWdzR0F~.[1 wگ-ޅcwѰdI㚗Ia ēKBñ~pmmAvDA 2iR쪖$dQo4( j6' ֶW/<Ԑ^Ơ)ѧa[,ybw.4@ -"zh2�h$VwEsw]Yknx4D?V@H##2|9P8ۖ' S#lZ0Ǿ/K^(RΔ1I]m_smv_ ~!ݧF]4@hiho 9<0i{-2ѓ4bz0ey  BS"cydoK%uTg)LE/hH؎(*q-xX$e Nj!Id M @2Yؑg}CV} !.j0A8h1 ,Iq[% [pg AdǙ Ɗ)7nh%?�>2}3Jv+Ȓ$:gyWi Of>y@jt` 9ƨ@A{7^a޶`9%]&?D BhK./74a@4k(9\]^IH \ B !&L݈kq-w(t0N@TH//O3VmH2Qa;fr5Hv!*[zȪ+˃KAWSswé{ΛW V>Yp8HE@`m>.c'ŸXgW(fWm+vז+1\vVgo^y =*dOC+eBW[0蒌bozi"Ǔ7btٶ !&fHvo8:a~ 8y[g<.5 ϲն wlpi!Z,vz2f$1\bŽLob9Y7 (u=z[Wqkx1^8a*#/s!Si@$L?aYG7^JqF#PՓn l<ʸ뙁ZQ% e" '[\ќL੗2ȯh*@ o6n "- =`-m;k0q6yCS%p@d%CAgW}I0{T-«*UK+'n/#%>릆.L$(N^xzxPԚd>'!J#kTKrvNޖIs-ڴe-)0B)2h^qi އE '>ȍ}4CJ{{F]3Zj+{ dJ�ˍO{1'=F^/ac&P:xIy] c"Z ^>J7?N9's:9bp{� _B@@Nj}Ow&7Bpѣ1mCRp¶=`:Q uycos�@dU=yd 7L&- J4ֺ:}/{c뺟pSW "QvE6:xF[}5/%pN4ft$�:�iMh;'/)Ns68"!=v }K0"Dž̂ΰ:MUKKM p܋.=1iOKeQ As.@x'Z>.eVׂ~_|ӄvӝsɁ28xmNVl;{Kt"5 >1ğ>HR8sѧŵTF9)K2 \�hTf8lI Ԫhx}4D YpQa}(u}^.8kuuJS2`3cgf!a803W˿D.j&G7+ł\ިД9"& w q.{F0b*9q[r׽fQ;- z;k<eprX"6 b32p\ȂYwt.c9qtyOۙ&Wo3;xEvq۠_#@U߉%= lzRwg~%o8׀q�h:h ,Hd/{g2|tH۳4J]ԇ@`N.];hT@w:=K<* bLNo=/&_Ltr<egci0a[׈-_Pκ<Xl KfюZܓ+ڂGY\Op$=� '{s%}-X)57vv*fME6 %k4@x�NB +;�Շm!v 'pk{5E>3K$/kGqkz}Z%@i&j5fȆLb &δNa_i"j)[N,i^f5P<UIR;=o,-1=V^ bk2@LnlayG3wrxV<m dna43e.xՂ_jk\VZTabÚJYF{JvUZ<gVx!6fۙ?aB&]\eYA�lw2Kp$}Qָ[Kl#Q v$ ]IgG{+4D`ڹ]z2qLC2=` edQ *⦗/!.:<7wEaHl{t Ye"[�؞>\SMKMFb̙ҚOL6lqNcjprL+bY&NUONobXG*̒ GRZ ;6 b^} S>ʍJXjҴwѿɎv m֕&&g4'Ğ꺦K}bMuG^ V=d 7ZDFbdd{r'ϸN9qJ%VWSLfg,ʗ^+ " ghr4dk!Iy0_fEkM#aƼܯ%{jlk�`Bj(dB)y:EQe h2՚`HO&y!ZX !#߭~HBկxexЦvMneCZgǂ*V+iLIЃzL{b]k* . a+gMWpuJrc0IO$` {ccjWf1[fO|!~tMs8H{:pS.ϥ.6 k\L�;N_Ai\0[|i&=,5TT>T|Z9y"+3c?Ry彽vQK8>qW2Ӛa82v"99&~6 ӭ6;0$^iM a~#yR V/aUluyE˥+]IElRy,V nMbKAu-3%++xtlABkMZ~�xO=^CӖNK XJ# N;Nl%>1Ӏ 2RR�_f[v5_�C\YPx~4%l!f'ޒ&9OI+6t )SlN#.vN$vQOLj+d'4sB"]UDozνCp<�rxJP(tK'6lda�q1\]̙~/;.O WV jgTPzsZt+tewU׵WAK7KO#Qz} 1q[fb/ F OpbFHXV CNyc3@.J� ww n2xÕਕ�sSz[ l]T,MB{F\-X&. e!sR';O'o45pO@\ㅻIX/KQ:XhC _zשeo~P:}N̓-,UdI {tP\ማ}z 6dJ' hgNhfjR v<-3Mx_uiV[Ro.qm@*_#[h|o{Vӟ^ N5 |.tYfGݱf^%ie^OIy,p|}KؒKOSzB]1;iI=sDh оKoyXIPɛ>Y> "GH-9눸쁦e\c͊ :e7=>DGCBB3OY/j"k];@NG_tw09y0Ѽ#>`d q!oNOCw{ȖJU&:f5n=9v/Cy:�֮~m!F־uDlCfhd5<>9BZEY"6^Պ/]'rXBz<bc݇jŌO<Y@˚9H2<K3f×rLE@n%j,ɑSl*VHh4x9gѰt8M|Yg4+!%gï76hGW{+p],܌p/)k"F/G~@( !uIY/`sJ:S[_*ju`K;}sLJ.9/ a lګkz^9+6$`p-Gr$oIqZ;0+_2&KDX!1D.dU6ӛ3@ȕl!;kNiE!bV${+13Y>֡^Rc=Lǰ1oK?eyP+V\lɼƟ&Foj$:l{ˎV,ȱZ[ˮ.En]T>yɛ~- xOtދ]yV%f!Ƅ{ر.5/ʡ]`y+6KR7;2Kfd Zk:bt3lߓ|VHH F tIbp؎c ~J0<Y,�Z *OWF\n!d%#rg,1l(Hap5L iXNe\b:V'YuHG hMCڋzs壷ɡr$mm%XufȞ4;Umw:稶ك# ܒuC!eԣ[yP7?{5}_ucM4< 1Ui!iZmCcz#rQT1H-Q}7]�li'[}J&*I '@p q TG>UtXfu xB %m)U^Lkɺ%sqnj2jN H 2%m[JE\rVzj̩D?QsQxЧeG̶|R$ =H$JiSα5GmJ؅2u+n߰8{QC"ZG=Glg.!њ$9zh4ހ*ꉓ2d8VB߆C�Ngm!M]O'7Wbx:$m.wؐ`rDdZ&jUsM|vZAhUb{X{q1$21(a3ժc3V"fȬ$miS{+.kr7Gȟ ,,[/K^#l8$4D 5!q'=>ͅ%TF5_c, zk_^BC2/">5';s'.MQZ/l++轓 )ٟIn[ʲ!+U=mVy+ TrDqS഻^ |j֟/uoR jE\d)hH(yB0Рp9xNm<'v6hbАLǥ%[F%}quYkB�v8UC$c}!M\ Aέ,>#FFbuؾwSh DRKI%G}�풮oxMȮ c ,w3sP>k{q'h[}Z=V`㧭H̺j waő,yH.8-'dcpe[VnL<.P֬=@wùmuLn[nyTLgg"ӊ= ˵sqv>,%N^GO.,6]ScvzU;7SH2yD7$dLGXiQ uƌ:;Ԝb_ f/]| H97KMO.',C2%ގ. %^po*:_HĬkH4 ,v 7pU0Pb_wZrSu]N0>Y>T[)E8W!n3g,2vw� V15,vd֖} [s nAqߺT#!NFH@8CWYZ Sl1XU+RXG- /91xmîʬS^( wuBdmdsH<9kUNvW#k-I` LX"!52!}|ੳ'pO"H{D#B@е*'I(GT 7l^pz>N)V%Wx+,ƊfD4?C-^ ?u1vf^Br~kR杊. I(G=& o\ }إZR04aZ"˚! M'q]-wɎiuhJ;LWIOxe{M g & ςb58n3^[Q^@b٤| PvYWYDmߜ?}(lryԽyP'ͻalp3IR~`?k+^'ײkMk ;eWdz)#HV=f$`02=R_ljG3 ΜM!nTcI)'̘&9qmC,FsZz9f!BҪ^k{(b:rD qc'Jo/n]x-Ų"<8o^˄ 6́sJÉH8~$BoAF>xl25)6G p2Ꭻ++Ak@�FH @!n lkYrw1>ReM ZߩVۥ/ĜG.ֈ|HE̻Ҿ9Ol,vnCi7p6s V0b,ߖLo ˏ ;' TGJں#VJ "^OH27=b*G`a/vmUn{!K!vːRB0$W[RHjY;b}h4¸Z6:$Ի2ư""H;v"#bE\4$0XU&6\ofLݤg wnm`ֿ,+. nl]*{1Wx cهyf몧ƃxRx^s_U<!m:~@ބnuiUOH&& + 6v0^h芕1oyלRӦu k JKBw"\=a]x@)- 9H,HyF`/ FvfN/M!q�EgS*`f.y6�lȐb<NGa1I$^k~k =p^05V_J6/*3mG?SrͶ\%q% ~d('d#)!MGht3Y0͋rwiϧJ^Soy 1W\t^|# EZ%Gg~ʶs/>a=bkC^ʲ`~GFOU)- Fym|2tʵ (O¡$M<%$ZTGt` -P>Zq}22$/eqNK&_WؕM.`<�Qmy&Hs)CXցA(Zk6Mt8 Vw3BDw!ru~Mtٰfu}W2ѪX[B@9^-N d^}TwDڰP_JS$^~]Ar;`#cF܁aE$O:Ň\%8kL{]78 UdO-2vz<1Gd$x4 cN|s=q,q_Jbtd´KXIO)4dGJ{'\Yt=>X>MD.yWϭscbCC�=''Rp`Z 52D=libυNUV2eZsNcwz^Dyg=ڄm"#K4ѻ=2]{G.!M4�* o%qQ'be?4{v:O8lcޑUGܪ(ع8r>|e T5Λ4_iX@s{+=_?~޲K0ej"&C\Q{$tά(B LSA#R ~b쯑kh}C<s [? e=VKu'am-N=10WNS L^N$1'R{z x3v-]`㑝L¹oZu8,=O(}0oHSDZE0n;CYҞBxVΰ;#['W&[.34Rzjt#ek~^<˖lJ&tbn#6ȳ_4p}@co |^UZn#DBxk]5LlhwvJ't�3�$o(t 1ڲZ[I qKR5_ W8GB iHvE•VlR|:=ۗwFlb=f7OB F}^b%4͡qr)f|>Nhn2ɳfYV=>W&[b +}jig1yKXAa&4 7jܨ@c-V_o3I<[bP FvdeHv4ȻdCî3uN#{Kʳ,:ϲ/lIJr-Ff>4ƻa K>|�8Gb7&ViGave}&iRލxVyİNG-�P#KQecKcQQu.[$ZVح_`'^rxz;)^c+gO *;L;fTUg=�ls:-6E=t- F͍dîRM] l98X{Ka,EMn@ŧag�Q<i8{HWT."z\vxFaBvR[ m/0$vY(%�}Sz7Q�稌I VU%vGV]K[/ Jocs<+WNerdϋ0M P?̴'Ooa6sA$Kco?{:hlm,2O�Xm!71dʶ`¤�֚Nd x"_(pWM0jRhIpxcF ޟÆS÷SRX,!$qRֻL;_`i{^ NC:Ծ'lC!/iΥxeÚxXJ?M!CDWgieowaAFSS1Ryߠp+:ySSAm,zZqYaj.9tv,<Vν{*bxC8y)`5rDW3hN5>Czna"oj2̕4.�h۝|["KTwY~ i쭖V"VKbCFc۲4 ;`KݳB2#YRNY6mɞ1dTA&j@lm˂rpS;pco{ZFmi!+WqKl<D[&U=51;MU׏54zZ+3Vƒ})~5vPbv-K$^<#);_WöJ@~9,WxMF&䈹LkЈ$ 5[*5kAIm?٘gj@ CGb$<Lu'obDh!N'`j<BB#.ܧ xVQI<ZE*c?:{Nջ}< B�-=M^NagkuR3⧆ȝMޱOo";ݜ#ܛ<*ܜb =DfkS]5H-aEw,WaOX7k CW_ȕ0Fwl!fBl r=Y[=pda@J̜&w cbs|8տ4x)ʛLnYQdV #{p'<2vӖc?|uidh`?+bn 8ZO^jS՟3 3G^jLap.v>/ cj4<i{g#X)*_Xԧk lmlZ4l~.kcYeJ!T+Y L>̝q]*gvj7KA7e{iXD>=5|@a179[k^{'_>,OP  ρr9ZGEZ.N)YZ^ FO?V{K3 nG g~u:`#Ϗd!x,Ie<+r!kI9tV.ƪ1[}{P0 KIGWs^`g Ԏѹ等Nzۗ+B䄉_ d=sj$/-봺,Lڰ,y [?C|ß A60My[v&x+>;Zs¼w}z8EOK9j@r8Y3hm[KaNVv<\A,rݳSnY䟐JCODBv6 㡮cx`DvGAH"@NLJo3AcvLebnjQ jg\p|rCoMlwȨrWa#6;95{,SbBɞu̅%مmZ,^m!rrbY|wG)wIө0|El9%.L35ۂ!vBڕr4Aքr{% 6osIf_K,PwAI"|@Y+I<U`ZٍcztSu[0}ZkP5`D45'|¥?s($#Gџ;Jp7;, UA8.t {S9 m˃V%6byLe "ҭM9LR4\=`M&Ծa|i+;[-? @hkا OE+X;;OGQi-ONΩf^�Be5F^ VlOHq߀oD25z‡ܭ'?3% bs{w!FY{Tc{PGu-πMֹ!`nʱ>b{p&TFNϙ� }zDrܻht YVpIئ]t*gNhK:crSkՁmTEcJi_F:VYy]ťN26UjŋNm` መڨ]&ǶЄ3(DjXhL>wo~!af-JhNrx{ N .4 *YL~ Ŵ]B; Jl9nŲGll8ai@_t IzF6b"AIN3JO;x;4͉v׷gg[,i1 !5${j$cxlj"Y64</3⻦~i!&q͙=G Q?ZiHJur3AiM0r?sW$ګE-lU[LVq,4v{FB^COҳő0z�%' }2&OiޯNKaba^ilU3�%WN^}c-Z1 q"   xJw]n|f:xftK2tzuZ2,S %λ)r :5L !)U9j.ebTD'"V"]UaVD HV7I=oucZ�LV|"'afڤ 6jIznoyI$R&O@$OWIQ~`q7my&р"ҀUU-8{ʿ)Ǩ *hL77ϓ%獀|dɺT^dKbyFLDnsHo][\6%λb&`w8aZwq$ep-^:q϶PRҼ?yNG?p2ϳ%/xOKiFM(mnJw}`xj>S1Y:9jx%(DxdLk8WҼ+ EάbUAlgBM{E4/af! x\`r&y#`:m^ZUa OS3�XL:{( <On3f/gFd˥elѕI>neFaB IWo4Z`ox+%ʻ?0XpӰJkMJ.oΕgh:~0x#^5ajΑ9qJ\-liq,,LBUCT;i/rgk rh/>8�\[Ք$oA!b=Ђcd<E^``8l;zv?)W2¢D1!;\.Ӳ?%QC&&Li0O@Fci-m' |8[JxEZz-7D;ƒ~y5(i]b*yk%0ӊVJT4z, 捈a?Dȸo`u#̶j/ln-la M-IB u.RM_2e % BOX[XvFb ωSu enN(Gm!{0gmW{@Ŋ"~x:"6XU.=ΔHoDCzWG\<,3mY̕ab$zW]bKڨfz?"? (z9u>l"0H;^qxB}݅#]n:PQ^x-q&f4ﺨ#O{i'N>> &`FȘ15mqS[OUϩ334l>H+F⓯,ljޣ撓c\jU2g .H>-qw~dE<-D _$$kd:=wk ؒ(o ׎>ӵd+N-.3&(*#|m],*NFv4QׅŖ#%:=g<&n^!S!3u+>ՃUKmT[(N[>M}9XdN,ٹDÆ]’x{HL˒أqEJ׷eZ Å|Bxe0c̓4jJI;2jw<ہAp]<&&�O̱Zv Rd$9'ݩR @%?o-Z]ZtvNWY X:S  Aw<bYŖL&)_j/hz "A¼+XTA&LRzZhӄ)s6aȇp!7t3E,-fjgL(:QkYd<4Z6$ǜfe&1HwS,/4w%wPe_tJNLsdJy#^+e': 䲖Ř>禛Ԗ^phZʡX&[~BrVRH45pZV$j Y[&<R#!ryĐ_';]- m|#v-6Rdm�o>i\hO]!O)K]cj ;)]q,nFǫ-ikLի] 7’Wu#G+65Ik œ)-TWFEߓVߐ>e'jVT{ u~�OAbßٮ8N=8�;ZtbDﺪ̶v&ʲV#h�{P`;& yR%d~I \mAN)pŋX /X^ Xb;3MiQ#WK}g#ºB}j~bv.hR O<G;f`Km,mW$iYppqk@F*F,S+v*.;2AGtR~4bljXuAX,{B[Qז_Yf^34DrbY[DnLYF[zuN*ʧg9X&^^nyxUPݦ{|AFkQaCt,EZˬ+c"> ?39ɺ 2tϸl߇- Ǽksorm˴+cXd=N.+z o4oj# 5b wC/~,`|ӟ&CGaU-\ 424FqD^dL@Rtm׹g 1$KQ$k~sl2N4˖E.VʶrT @L[0I%T^SWi2)YN:¹)Gcbz{#>g>+!YGOkFV}]Jb[6y m1W,z~i'7iRM-הbp;`B./ F0|*vxҀ˄ Y}p<kAYA-ކzۥvd >|a|.]k>X0xB&ވ޷LFٵKwˬ}YZ${g4WzZ"r%xbhC?W$_$4BgZeH7l5`e4.0VwQRcJr~7_X[� ơU7gHBV\4[ālF]ݪ&,b'�1PIJgn:Kc7,״|PRO'b'tgV6P3U{vhkSԑ\ҝz+.3Q xHtmoD|=a[Ɲ*6,3Ưড "k1Hwc6Y I9ɸZ3~=1kuT5/Irq<<!.{e{ "}Q<IeU~J] ˉ'+nz3 [e"oyt:s ]amN-ˬe5ͩ)81�.#Sֺ>eϕ5Z {dҵңh,|9 ѥ|M}ǝ~nHԾ9lkH8"¹:c<k!l@&hξy#=V  9W�U|j1μEӲC  VƺU$~{*X%C.`s:I3&~+9)'x*/׃nyB'_Z&^ٞr8l'jU /}FT gO9mK6w+'$ɼ{Ò# 4}RLRzUD=JlsCkT+"Y%Q\xO6>�pn}1웝dyT("i@eUf>I r>sȮY¯*4ؓzԫDŽ$ cu.n _Yn/ONeO\G˹IJBamI/MXWR-`;rH;b7g!ɞ!LD|COп݂wa~@r \~/Ģ=RKjcDP3ƾA"-N`ۛNaY"=*4s^Wʃ[P_O }v++i|z N\SEfgptV芾j}_؞t+\%kcrvFp1Gβeb[CjFvt<E@v%VGq{iŽ1c XOu beb! .0_W;>dPuGS~Km #өFW^8O bi j $5cyϽ/iSPR1fW4rcLjy~#{Ҵxs9d<-L%_WĚmcwK=-䵽=آj @Y1*#7!#wi8;׃AAM:̎N>njG)Gt7IJF1h4;xibLiou~)UMD9L`S3BTqO;Wy"еuڈ>X|Ū+3xeFS육jG{?+{̺jNA|b|vLxV uω}+$HVO`Xw )g YS@/&.Lz|�>i D+Kxq[S5rbknVfгI0pЎ~dFƭ)�?8%cn{ZtјJǠ 햶p""L'P. 8/- X>dE e?ѾD# =dP<YâFip [6Jf t'#ro^7z~!>sD˧U0'&h4f'ceTdxTkUhtQ{=dS�ihR;}{φZxCVm0[t6X Yy|a>:9&Z[De1UM2YO*nO8 9*^9~mG_1 ,,r}!TVZ}Ѧ[=v3XyaxV`k ymmS?"kt5H*, Zc;W%A>dv<KtoYy io|g==�N$v@+뤳f >1˴YRc[ �jף<%"f^9m&9}WeIjoѕa %[.'"'~*ssrGsXH4jQu@R?PwIxt6dsH so^]k446TD܊v);Ɵ$cpobYd\0{|ٮ~bWCVu]:G g!e˿5.TZ/͹^g'`s5!F]>0[=a_Z~j-_nn-nsiyBiY \MPNV0rƋyDkւͦX|ss lotɜ&@F@gn$I4CU ܺ \*eޗ&VC^ז+é ͱUzXn,&xL-z3늬+Wɺ b\ :tX^ي?c {탨$]-!maIIv1DM/=YKX[kjj{pTikGt> G]'BUL8DgaӞn(Wڎ:qH"Ҕ<h҃P  zoٵ^R…] <)A/kh? 9 rJjmWibvR/^:}_NĊvC[*d'Cbd^(:D M$SLpÔ0^vwAL9V kv2͑D %h:XvExl *lWw*�t8yK:CEP%v;ʻ`, M(SB;B 8Gm8޾{S+.$R48eGh:~ Η"7Y.+7M,^U4oIK{DX]!ﮟ=mUh 0p!wRiD;b)h?HŏXNzCڥ$0xj I 'W9ӾB9[�M,Z.% A&w!3 W7=[|  b<9vt'WQcq}]ZٷܯGlW 5rѰY~NԪ PO\u*ŕ}xm>F~'NvPvBl{r ۶u?:D-񔝬 сy<ZdI7IUV?۟)&!V5H a&wF|PL<xZ}?0nvaXwUs+ˠIZz>ʉQ$|[ӡ�ynAY۵"peCrf ({g9cQ!#Q҂Rx^h$όwn+1OJ:ue퀲VTAHPv:jUc +z<ONeOCWȝiF=B;M׈liټ}Ƚ 5f-I3;'A:#wjL|q\֚VoN{E5쵮T5"?M0P_:y3DpIjR8 -Z jwZ'@8{KF_v)XGIvZR wH iY ~Uvdk9αU  =[6>=Gh&\J~Z~B'K 3h͙ "16`j ϓt57r/+dd]sP+T̼6Ff Г#"6ؿouaKcMkEm-s$IVdŠE2*xK[aG^4⁉>K4PpU'chKk{V!HNi^0Qρ;,ɻmo^ ]KQh?(Jv;&h2SU9s_ds'�߹o82=\2@ }tsSy"a>!k`,B "CuOuVHIɋڂkDKJ1 )& ˑ v{3! ^ka -ڥeJ #&[O3YtO*^!Oybrni8>c'Jdf5 u('xFAl-p&wiELdPz/ tԈR&Cډv;dW o%|Y9T}VRhe~2J: ڡ_ˮVM\?%.6F/Ut,̄v�6;6><c7nnbl5fvJCV�+DXM}ݻSK S0dh7 ;5}@zÌd# tЊGj[_Zڛ@@S'쎘{,xpQ+rE2ht#2cvH&&"iXFXWoVQkH$MwDZ@y[axil[ί|Br$,fM{OEhvr/hܷQDlW M-L_wٍWQV╩j?!Tb#y[>M%4׿7˪Y!Jl3j3rţ؊!C;o凜X^W 6y 3 EMv`Ȑu}ģr)8wo4mz/Ў׵SZzn UHȃsb1&pGUH7ڌ+ l'eDMv�xO0lXF`ۛiA@|сu!D65{(eLZ/;D;bݎܺA'H6{3_N,h 9m|6soG[ ڙ"|P6yX6tPߒ-Fv_A"*%dװMzFIc !S IupȘ=;K$wloxi%�6aMr8IEMu0xz%ڮrV't|b8sݕٟUޗ[y-f'd' y)pQ|Xnڒ TnE-Lk'Z yY'. Fw't>R>tGa<\ÊӃg1 = 5\%'i$œ[-G@rYLp$ҜfUk2ZKh;M6Kx]a~ [ 6O'6)GFfX¨qSmeGS+rPh�ԶXq8ETk}#Fm9A(qvA#c?Ӥ?ňقD\Fp(™m#WH;#f.\/j\G,Bb%m ^\ 'h\_4Mo$0k b%^�c8bRFIto .#c<#'K=_GW T%Q,]'ʸ&lO�cY\!z#ײ PokA%YW^]FfQ>\4aO"V)i[sӴa$guڟT#z)Nւ@Sd]%결'.=o94K Y2j$mXbVNŇp/Ȗ~*d?7xHw-䴆2# p >Q3T ?OQb۲M80l8 ?٢fb=ǮNs. uGk 'yH+㐍.4JCԧ$l<J{UPyWO7=<m:m(€BVYB3=_m*8' 2^]mx5cQ I1nAׄUjrzߥ8Zx lE5 f%Ϫ \ t_qzHV3NprN,JVZK{ 9RTn7LuVgȱoKc5[UtoBTN=qGQ V: M($PaϽ? Y%+2Bfl'zk0 iWMYa<E(˲VH3pnV,2=-^GWQmRˤFQR",95:I;<tm_.Md^@7dJĴ:g߀rZe,cE1A?c' $4) G82T={lqDf%![:a9zkA%F W5V8E5aeۤk_P@K>yS8yn9v^Ri )t5p̅ȒpI1'{$Nv h ":Vn9^4ecšgiƉpve{/wR[<gM_VHN뎘{~m~m' H ] }lJpx0َ=jkj#$B=Π?$R]8;>2kFD#'j?H{x@ɾez^PM4Ů%]KoSYW\ͱgڽW@7<;رAC;ϲKr/n?=DI^:ڴfCH|M$L7t%ܽj:ŶpD|);v|yB9noKNHYD vGȽdv-߆~sAnL,o\ԣdJMo] ɻ*vZéJ#;(%کw@=: i:KE$1+y}XlMEܢ+�cfH]x >y«1n`O�UͼbV5DaN�2G +R%׽Azz7q]Mh$:P:Bb.=2_S%&0RSYbȷ8p,vs DTwD܇.Ԙ3pL"kM{ Z*?-B]e5+'$BqFwra>)âɺBJyz ~Bv.H9/.o!"= KH/|✳qPĺ, +{İ0V&v~t=D[sH>z?]}֒h@3p^A,OНᮍi̺JZOkֻs뾙uz-&OO2JxEfawr+2d^83m[+W)(%Dl'f{6P:DmO뽆L6˔h2 Sy2a8A:%޽bo(թN�R@3IT ÉJ{ .iya=0iramRa흗5* 0 Z]iuhO]4!Y!/8AO͆3c9/(N0 6 4Ōq�ܽv}mY"8B-|%ɫGN䖱Fzr'ۥF<dYpQu\0RܑX:I\}R tdV@V{qO5Ia]G$6k&c$aJE˭G$I}fon~: Rd(r”ۡw4t){l5'K0s #j$BZZ@:#m1bjEjR2hT�JKI쎀AK6ux 1LC!+ݒK<Sf<$ <g|i2M۰բezzwf$۽۰OQNɋ{+F)hkI˂^` DCj-Ƃv,S /r ^?uxzvO'f'GXT:;'9ʨMazTz7�UeB$mICy}CScG)�-(n0qC_){ [Ix h{*Gw:XKUN'„X+EP`O紞31󩈗֪A~V[4sgLNV2{ /w_G{_S QZcYm}Bi|f`*|'j_ QB[,#p ɴ`WIb24<e$0,=KD+H/r롯ZJX b[v|0Q|qrK-X'tGVi6;(OkT!9BNU%o6aT]ޟ$b_MXGlF&/PV%%XQS'P$z $ي(f#tSאSQȐKa9Ǯ+ XC{>Ww>A SVk -4$O=shWl*ɮգMhT$άg#³-CnG/v>#^ Ë-ڶ5v]_2!`NUs2lv#KR;OU3T'Gey{^H- bP(ϒ".j5\ GwI2IR-d'FakPĜ具:i(tk^oʲxīuXBaɼfCTfsCHܲ\OqR+$1ΉȡO.1ToO[L/JY-uLVK;bV*}!wORa#)侏oDjP=G$]#YĆvVhХup~MupTk иNy2lJ,wDGy}<"cw:ض{Y-Af*[V4J{^]�QW d޴ 1G{B^)ݖ$c^T gҰC6n1`<>KP5a-yYzt(Ʊo_26MZ8f%YxXljz+@Oؕ-i4*M :*�NQN&soI@qk eeg)IoY#qO &}ee*QfP!v;RH * ~}cewK_/P.(,IM7Vo5p}-=?o-3/K|hT2ބK._łɎ/{~=|ڋ~"WԽ1M\ GpFtdn5N~ IR e_ЖLwb; 1 үIobwԦװifK-/p$Re5c<YWׅN2웕 bev%L"-`0O_BrG2PН1c÷<}?1;}m'#<}~4�oqG;fZ3yNn+-e`u(7X'l"f\'y t<yً:? [cYv<&kIu}ް*Jԭ2q5M]i,QT% g?^=pBr?RrVpNՋ脡2s1H~ޖifSE'UZL4TS oW sܑ: ﶋo_Uky₂~Cf�$L%UU"Y6T}̦pZ$u>H=W/Owz%>"l \RK)WG,fi{`р+j-T(sH;K=E54?.w=%"ӀwYxM a f& OJ#5`9rZwak]82SltU^eQ?AqÞQZwya[Bc qҷЩ"H+\p08ɸEY+#BEߑ^i477dpN; ܔ/Xb&|�ߨ@Q4O2߲?G33h`{EtM?BV 8>xQgcf쉤@kIun3(!o]**60C hQnrO G ړP"#=.&mh L뢓 ˋOTNv3.VܤxhRN.'=Gޒ_ x_=1)^\_rn~$jd4JD`]! ?G̤^?5ݗrM-P<*YC$'tЎD_pDz4t취r"ٻ+ 㟗lHIA՘/8m#,'T1xF1j-n1ky [,Ucl~8/ꃰ1p^{'vĀ JVAiyMLpbH,g;CW8[u AHݐH|YՕ.e~{HfOۯ = T"H4r R:!cFs�}S`ivrvb}"w԰24X{dGߣ";s^{tx Ӟ5Ճ!9{YľC SUk ݰ@Ւif'e 0YDT'VGjcm@;{v;niVJW,͊#+muУfX&9n$N7+izg؉6-9D)`ף3iUf"?';SP.U+9m-5FF*b Ư!vrWxb$v#9~#c''Akތ8m[ <B$EQuib Lx}";25l=d;Qnqwk_csh'k ;4]{Tg8^Lr详`_7"nkcH5/";4U/_Ȑd$>@ }> ~(ck qPc̬#i:`mD^Eb,;پqfX7:M�f964d~d]{< h4\thzv _c w\\iQks}Ljp"RF䀮1f'H 匊ڤ!;WE5i *t97|OSBDQxZ%oLh%r;W`j C&sFRيo^X9o0g)0*7~5tX~\'k Gt89R+2 JCql�+d17,Fv~fp=YL=(DP/x92' +*!;+GėqFx*K[%m (KZ)7^w[Ip9n4bj%M֎0(;v0�(ǎ/Z㙈UüEtU7�F3_<kZ68,< $Uz}-nZ`sɫa +{Ik-,cϳFb_tUڹ8.12x9U|J],y浣0J-\˺(IW'2d=aE^usIFWj0JF,.Sd{ %s*Ƚ;p&Ѿ=JA r4$9KI M{dzaf 9CiQeլiX׭ORǗvUk=)%p+A=jpLUKa X&Gٝ[G3e+K.92rڤ`m<4bpuudN6牷 #eG2Rm-sݿȬiqMvqdσˮa9GW[t3e Yл=@ȗ ;ξ1�0{bY;@W9Vp]g=bbaO\580^Hl1kz) 'th M7q&v,S>Nl^שx-rL4V[ zb5ؽeo#mYt' rS. 7qY4U$X&>! /΄4||]ъ{5ܽ[^ 'Z>4}B°t!Qʦ̾.=dMvx{[U[' f+dCލ.)%8k3dȸNV㭮ӟ/z\LL-iƺw[f Lx jZA'R�94 I>^Ĉc%_ W\v#ã@6[M&3'�YXChMHSo%.>\s$5},B܅z¶<֓H??#lf۫a,SV$Y,ȵ*UTDտQ4!9EG hXk_dzKg]`<(SnY[-U츁߯nf/7O2$̿8N:8qgyfa]}�K)a.Ml vk1( +ߖRF=OZ FEӵ$Sc-^bK>Գff.yt*&%v\k�Խ=>p}.uGo*X(㦝bV>@Uř5}E"f/ $yQyS4o(]UhًY!Mg7G= A0r~8v#ȴy�mş #9;r 3@aVڢû͎%;]FѲy\(qt<62d|s9 3ZΚ>p$L PEؽZ]ȏ2؅ H^۾QE,\9ɹZj]O@09yTMΑZ[Qց'U9jE( IZ5�p;Px7_(gj`;UɥCpkH>Ϗ슳90sW>܏JPf$ef}r?;W ZRO*4cVß2B~l)(ua>sTPhq]OՈqc3+=5By0 Bn'͟{jWs4M5Acc%-:m\v>D`D\ evTkFB; ]gb焜h ,G'$L/uC$^Ho+"P|sJ[WL,b `8ƞ񈧯u*߿y)&{zn!w̾&>:x팔r@bJJkE LktOl)Yd*n@ioWHkpfvpnj7^/nk_y-|r`EE20Ldw 6%(`:B�#E֕^ܮHbov4}u)ٿ\QeTߠS`Y-h|HĴr]R;_qf)}7N}րw�} `{=Avhp|5juf g; Rg;ʃxiW5}ZR_s:zdk[pN .&.-_r\�^α8w:CvҮf_0\cp6P/m82ZO39wNgLY1-rv\soI>Jеk_t(ҔXcK/6Ơ}ygբFQuj\\,I wJ7yNN;]RW7Y4pZNo{r 9oiaVmGuh3ְz Y<g.2 SX&0Fgs鸵°ON5?8֯m=!}O'htu:84x=ẕK̻,ķK*B~ G2Gv g:ž+bNHknYB{X ]'XUNwsRҩ+n=[IΒ[ꄰe]HnXjY-"b{gM]R.Ih="nm)`8U}V![+udm?.Nb UZ 섀;<Nkq{ [w%>K(AY1'f%/>$wW?^>-X @fg0,SOQ>=^c ~Ŀƀ'4Y5s#C(*D h=|1ΉOp&2Ԉ5Kr="FMvvt8%xI 9y_+EH7(ʍUAmOΰCUn:ڶu<c秮|5<e1>fc׿N&"-J)9Kp} *Q5xEL$%lաDLbj=8J22]v%K#_Ip5986ے (0 @uQ|a~T#3ouwjt\J17SӇ(jk]ǵOGm|QZȗx/x,Go!K˼KT^]3!_QP1khV.O.Ugz _hX3?>9p P_,J09}*YPw4kSI?ܰJ'Z|OM_O?e hYxBtܴh)_ba@5n2ߗqP 5h O*Szf^R'-~']f7aދ'??._!Pp?�s ѥO᷿CY e}vẀ;Y ~Doާ}UPeZ*g."fpOf#W)aE}HbG*\|=I]Ǹ>v146Szf/ KE\;';7sԃf%5*]o%J" LBL!ħ/92e*]_2Np:}_|XFT:HʫLQz/ 0_嗨Jz)\~ds-/J'!_}�۟_|~y~ꥐu>iIބ�_Q١6X4E\︀`.\. 6ӞZ@[ŽleN@Nڇ�i]ҏF[2 7XmEǴ` /|}` EfMsi,(ٺ>s0 qAWC&(Y;mJC ]aR)gK~_ť�C=`%$KNwa{]Kܲ}ިc[xTKK n}>z]7b_UN>p5SNgGF`W ^x6 s% e�v!X W MD;E_1@E$aQ*\ ,: ܤtчK*a~)΅f_܋n!yG \!i+." ?[Cz1P&\xB_D̓eWY.mo\5B@NGf.jrQ:E Uk6</1BܜBE,SpAӚT~4o2 .&h>z' ܴf6^er8\+WQpwh+Dlws7b7qcccP^67l51VV#溹oׅ4e\aAHծv , �*j|8oCD8eF?Z+>_t>|,,.7B OTNQZ4$ H}އ޵&MonU3|^emWU^/}+*4]M h)DZ jA)چVǷQ!?~X�f#+/̓q  iqX 'rއ*_W hNnӼ_8H一0λKe~(thz_jV M鰰"u RU=vYE+% 0%|,ge -kgq\,}-j9SQA%a> 8N2 QIKỳ(PTo:OVjN`A$K:D6†/RT3 }=)/uHޟ\d.HTP)` L: �ozƅf0`6 RN;1`' E,H.tNNe6W{.0<@=kw܉ׁTo yݰH-.͇"9}ާ:7{Ua\ p ۄqAg8Xo<4l0ep)&&sDZ)h.i;}މrp+NsQJB] y pZvRhs+x%ͥ`aXۀ\_v*PMe~G B^@ hws6`AꈬkaB\HJ)YðAqM^n`v00 ,.z6_Lv?/.hۜhhrWm_~Y> ٓm|+hZ\,^lhx4(Ӳ";(Q-p}%rf`wȻK͆;)w}286= ޜ}<Pp_|کt$8a+k>?jZsCO|߬CZ"%y24Xm3F̧_L `AEuhldn| q `9@jAVW͆ESS2�K܀|hv!]fG&�)+XRyōһN; dʣ_ phEzu^p2  3ozu,|8.ͣ@h [&d|<%m($.:Srr3 Tb 6=G6qo=Ď [ł5(3WX4K+۰Ѥl+-n@J$^tӴΐ0fȪ0.}�h5*?1\(z$k_MlÀ 1wBviJPb3�. ~iBz,،xWڣihȒ>d#Wz}V=z5 l2 FۀV {p R3r5’^z̺=%.TLfՁ­sՂ]/y@MI ij|FQz:0LZY6\͐Q |ؙGf| q$i8 Ԩܐ PUOt=Ȁ9:wtzG>,*6˸8MX4V#n9"RBμ:o9x^_TUMTg\oÂ'-c ''hB` h5/>A˯s|^bu4û.�ٕ/qLSSEja]yaBl,ĺf's&9"@LΜRCL3 o{i`k`)g uφ3קm.ٮ=s\Xj6~4 c(א2\S2.p1\p;`x¢fKy<5d,}.8ǂa()' &$}HGJ7, XcaI嗿톭{r'MV(DU`Dss !(]?M8.knD /6k<|ˋBa @_6g Tm-4hYX]c\dpWy=mS!8Bb TpxhztCT8M >mZDC�3ݪwcYs&,kFtgi<`RDsO ?"ӟ޵ #2u>@PTKE]EK?䧗^ ι$z^H<DiWz}Y Esxj(WYPbj.ms&_7 .v;xU~M帰 ,®< a,(wc?s&YZJA`G<"6\,%2o 4z+ѯO84\PT#<pL} ̓R  s>DZurby\ph  DžA,�PwBxU^zCa`$]3e#\kF 1S?[y~K[Lôp%1ByA”ʳMSY{PyE˖G Hs#\|41ԉ*tP뀇8qo$ wnRq4B<MV[ }>)aPz=%-ɐp~RrvS7XHI 8*٪&L}.P PHEH:e Z'�ڷdE˺ `,(!8u'-n(*&�"NPۄX U_ y n,g<M4OAK<,E!wTKq驤&,�i|<buX8*GmL7V (†% mG= exAUN`a'7<` tǎ=]PW퐉^@KTKlI|>k»7͹ݿÛvmڝH.X6[ M-#a-|ȃLl2G"4)cTpj18 A]uMp:Aa;!σ�gCw_̜xX.7!:.w>caq^ѐo2GY� +J3ABc{U&:]n>rΉneVywv%aL>k޿`Hi"h`v~rzݛTP?k=$A= Zm1) QpM2]/͑T('Wz[/x $.z'{¦NȦ^M+gZ8"v(߂ͭ"?36ʩہDS.q K} t0%^0++c tQƗn<!5aA6~3g1U䐘$ `#,>jtNiAdqACAX<<+`s+j ;]+�UU/ۄ_I`hꏡ.vlN>]飋t˫=P"3C[a zNh^C Z^ԛF͹١Պ%5.]-HL }XZ$[Nƨ䦥;,,h ju{bJXv0\~-J`>ۻG  ~,jW}\R$a\6uKÅbWU`;A> ]v_)9,̋:4Y83EM8X./0kH4kĤhX,[vP6Ҁ D,؇DJ9فRmF|Rgv#jm #3#MټHˇ,DDJaVĊ(UM>0p77Np'TD0} <M8ޅYu"Qa.'9pN)5A^UMnÁs3[V"R.ݻ<Zv%*C+xbp֩4X8KlKbqbe \^ Ȭ*e<˞Gt̴":JݏG304\Dqwkσ6c6 pka*b Ҥ{; Urʆ#Sʉ mSEߊ`^z+'Xۖ'>Xof9ai�N4u,Il%s BZ0|lG^QNݜs<]z Emrqa^SlMYdd4{2 b; T榏 `$> J_ fˆגa@>povzм,'dԥQ$�zEN a|6jJbnȘU�xlt8*nR�e{U)adix})⹄"Z^;O{?�[+'oS\B-S%N>}/LLK> gp; YTa9oЕEB?s p`Rp?d vsسJbU0m : Eࢡ'vr]wom vAJY ۀ_/=Wd3|k]nJpF:"9rI!Dw85"k&=Gn6/KeH4l*5[<sGC796DžlCL>pEz ~M('&8S`=[RN عFT=P`N{eH2.6&<b5EIѭۡJKa/. s=F )mX9VkHtG$pYQL(K@Hhnh- Z3m'Mf  L1amT%;_015ډ ɘ_z/օuRC-&%7 B8᚞u5 ʏ|k_ }Y܇` deNත`ܠܭTph(p+m;M&vJ"!.ؙH}-XHQKx[LS :PyCsnؖq.GE)Fp wϸ܅R\:�Ö%\�waa:vf~ⁿm~zm q ƌVY|$DlӉ`o+�Fy\8$YLlNO mz=~R!o/M}n4;!(vˍ6w(!+P)Q, Ggkg!ѠݕfWkJE�E,wX(Œn%!Q+@U[hDah�n5h`w,9BzjWZGڊIpb!U/mggaNtP(zxcX!268Szz[^�9ٜ\Ilp&l678 Ek,-0]8vp'Q4c!JQUY$φ(EjMMK\YRlz|wm,4EТkhkIo8rgq /.ȸ5.' QvN(p'0s@f[dMjt\1Qֻa,IoX!3 `^tjQsu CP!C[1a!q?]x Ts w@.&8e(iG ;mvv 4/8U!wi,4-ITZn s Gn5:cV4} ~5d_~?VmmUxVDeM@]ddp}DfNV~ v�ADž7^Bg[okoފpaiD·-xxF;.0%U A6:B z@9)Gyhtx.G; j&y'88YNӢwAm:W v#U8oT^<2.a.7km@4EنDCtHy"^ TO B!�:Z^g'iiy)0VEVBFpN.QAǟQOwᐘ6Yw\V1PϹu!3\Tkyc;�Nґ6X8'אf7f.\'*=7\RKj_'9.be<<xS6,ulCRULQ LYZ\UqAGuw#ӗ8,b>Ȣ6V(E-MUB E [i{L?tysoP1O *�>Y^s4ZɦfؓYX6l$}*rv %?n )D$r1s:'f;@uCXXPܲx%U vp- T+Ktws83% w!3Լ7 Ms)8R?\o]0n=zȜ|hȚ7mg9 |(M&gl@7mieIDywT AvmL:zvW5YH߉ 9I/[{`־W_=9y1;FjdTn^#z�A9c-=y9jd&v5p61$Ý)�45G 6wAޝ]nHԄN" y{TArCےu}EU>78mj79q.VPai<o獖+ `!IlJ+wCA*q[f7")G' zy1C+@{7GEW""'apȣ`AnmDBR1!ZKgk6@~N<^+Vgl<Z6Ƭ T{;6u m?H4 ).z`O"N/}5 29qA&=S70ߍudrW]F۫PRPe=dp ɲ?7]r铹HȎ vb . h#%F fYj? ۶({QX_o'A62Wp9ZsPU(-X\%m gE BQ܉Gxqu@m_4*βDEkVV%_BIG?bjsNpwY&n.05;^eSr1~[?\.YIڗPE6G WX2pg; 4RbǷD,7` OI.VyfͪOJz_όUk$ROg l4`7z mƷz >8uorʃ }-Guq�Q'D]XN{[Sl[܆ L: 2粊cLumR "+0^h0 + 2zݠ�P+KizU͙Xup 1g\jہS0lȂ{E0AIEO3~YU[΂ˆS:SPFep@ /K04 +]nD@ॷ ^&Kn M.uU 2؆iANX@]$X0i{1\`$?+rxrɶJ EMDoZq2"/gg['bkCi趏o SvKW"D, ~95ٶc@ĸڱ~-,�#7;.8jWOVN$c4Ew;ph>1E{;2،d<<`J&ۋ~dvd0Tlofҩq„wNˣ=LxgRYy2=b3IL?ہM%[*y~kAmZDoż*k#R^\U?؎_6i0k3-agqvl ?@_+ bR]y=1˅⮇zíF.'3{+3#&\-&J,0Ý*|@QD`bZjm 0kK/,njn{f/۶ ˴}Uо}/[rv@+j8E35GH,w4Dx;/ J(/Zt�3\k纡),զy|H� [!,9rp<Mα@Zt=BmOε9/9@_tC,ﵛ)<}[715 WVɩJ6bqq4i2hv4< Si;XW?wyYZv6}(ck_5܊5ϗ޷X Wnt{ |5KvnKOu)T1HZIg"|n.nK4lhk4o꛵BVԑ.us#N/OXYzфnEs4,ДjDEEj`pMM*n |\Ap Uz|>*M^pjR#Qa>RkWUH!7V4NHhJQp óͅ.Ch3؝α' wZ 3Å AwpX\v["2M- PabVT5Xz %j;Y*Bb.e!~M:l.Mk!k3X/V6*eHtNuie 9PWW =468yl4 (\;.Ws@'RˎPD /G`qzn.".Z ~uyr|)p`V@6pAjx=,ϖx1;x"8nM;.5PEqPpaB U(E9/v7a 6HfnXj r!qͷՋ(6Mfd]BuH,FZBﰳ�vA5 Džwܶe>lҨ�.+PGp>ﶯB{uٜ [rɑ趉5xz6ddD;;f`+Hjɜ`s͍,N3lhqP0\+5@-"=K8&!Ԏ8S{'9Ƌur[`Ʊ؃2=? Gh^N zsF C>3D!,'i$2Z aB%UQ'<C<1vF+r!,^]mn NOzj0uǷQEڏnI MS;ϚLY:lHkN^o5i5Ma4G \Gw^3)(0cnBw k#5&%>zi2k� o.dxVw<mx/cz M-kԒlUUKo CƚИu op6~ jZ^d{ ,1,&8; I&2f;,wh6\&Ͻ@J7FY׻rZAzDљ߉ ms.3laQݳ0XT0咫+JQ%_]@Y3؆ jβWFJ9IRӪ*嚃� `ARG,@aGɞ�̓8k2|D2;"AŽ}3/4i +2+/:,o~hql,]3 9YWŠ]K nCn.3/ KJjAKa+E^jrp'ܬC/q&1Xza(t(%%dN)"T"-z]0v\6.U.Y9.^o*�1&`pKN)K򱹩*[pj$YK0\˚ ރբa|GCZv&aqweT2RFsvC>,wBa4 K9l&BHuWؼ@裾htkj?ԉPXl6 󂪴b)!L[$QIV!X�E,wDS'`3soB*Iy-.(*0`_$.Ыj~;苶&P,:_Unb6 ,࢜*UpNHR HN2};4GU-[uxpaF%1T nKŶ@j|up;&`Nq<1?^Mvۧ ;`NNH waɆwDžl]<y,8e<EW܃5urad 3Q Xo!@];WipiaSI;m:,7Mr,z7HĒٷq'.j+R֎}- TTp;zgՈM̜;nbV syֱ*% jU!89;nd)ek3"?…+lD=qE IU P@x_2 0j Zp w2Zvfn;]#[/(ns ๥ m 5akoE\$X' [Fp5MoҤމJf}0, p\].R1i 9Eݠ3*b_Fd[!{I ÅzC뮢] q%6\見"TQas1dqp2>^zk;+z. )z0OnXlS{Vk6HOTp!Aj޵n/9tN~C7SCDžEC#Of' M0ϦMy(.jdVb�Ý0@;PLL8ۀ5?`jӨD;>\4~)|T{N~{$GLM7U:j$w �F-[Gjd׉N%bm@ _- {e:~3a2z+ôX-pLQ#\ ϙdNm dŎ,1є+x~d^f`wLu8It&p ymPqD�`0/[PQY wz]DXP=Mv\[NHsԞ@ÀI2Nkh >ZiRc IM?Npr\Hr4pMm0�wZgl_ɱ" m0pxk4wH[+wpaaEZڶ; [ %Xl24NLv8򞫀-uFH^sTv8]T@p!5Պ\8S.쵒 )h<)]P!RH˜Ip#0!:P EV(pLi [|t^+ht" rBe-,'ē= }u?[Gd3(ř_;28 $ ӷ>٣^ ]G ƒ+wQ3܍%,Җa#y{ G �"\Zpq�[p䎴V\ȷznT vb]T1{ju X,%mMφ=gfpޞ011ҜZJC VDu$@/]8T2J^$)?zg&OE;+=Q/ "O68f6 jKq$ rrnzlVa ֊2tG($xOʒv$7tyH~b[?GBNIHBU ΟSOvyv~+K3 SC#i"Z2"UYMm5#L/ᾟ|ȒIWC@UpaW{-b|poF[ I.ڰ 1f^m}4x*YS@_@0EfTXϰieLwmoEaLF:%=QOS!Ej#ǵa?_r¹">-Q x˵;M2A$S6I 99p)|t7X.ǐ<HGMVp{f D^utZp+&co_~?61ׂeD.=,RU>A>L&Q^ALIp%6v \ngÙ ʴXVG?@opHpF)[pƺX p7Հ{`,HTUY;,6ja]U`8Aj"6n(Q#8e ϪSÖtX(+0�HXx)ġTUGd6EsZEU*�wCdq=.NhwD k)pqf*רj$2^~م ԠT\o' r� w˦v띐Xg Ҵ* ҴS CEYڎ 썼ZG8,r-A/]UIcaUt,<i<X/Ȋz"_v!'m W@US "�x]%Z??٭<Ї.!zcMF (F6xgVMAh)+^Տ[okC<rQ){ޡ`(W+M*"…l mhy)?)k\.iǸ^fZ =ˮq\жIwPКXX<=7|pg%[K5ŕr#-(O9jtő(+,)ภ$o ҴENY Ϟ_0Dz+qe w ab,G+7R]9iQ%d6,mq\W-ǭB!Q `L +H=3EgL V #뙿ljUmUz#\UEEA=¢0&N΀3(.$h\踫ҠsU)rz= ÂcEA`(24/stK:hF:̅ty8|� ^˩<aX-7 2�^otz~F"Xmi۰ Ew=:.x*#s}Džy\.$D *8 fۀ %A%o,c6襚 [P3`C9z5`v57DhZp:)\Lp9pp֙Hq':Lw<nYzфH<lj}ł0̉n}X&;'i&eE_ wҠaM۰/=!nT-m +n :ZDRSu M1\<=9x˥'+X'ʶGmW2ŽRķws/qN/l.7l{ION(ކӖmJ^mOUx>ۧ$ǥШgr^b线mzy''(G7\,=fǞ[M\C`ͦvV$lS\ok >zhZAKA?#4S NޠzC;u [WO4LC-X 9u`kyR D8M,N%W|~|ÙÂ:n$8`8.r3Ů %4Vʅs\dΫSWQ})P 9|2\,CT%T)J ېVPY]bLDJWAt֔UҮpfʂÑR; wSQ jr*2Rm 3,t(Yl~?; s"\�Gq v`n3x[*}~|մPZ0[bl/56#Le`:?kGDbs-03H>X$֯j(iZ4kt: D�k"l۠zfJ=hþg{5Xe3;d{j;QЂk!`Oֻ$`-)8QuU4;.D!.|sH B0Qi} =jPiAbyWqՙp紂E–nz}Liq` 8O&з}\ -; *Mmy؆5WbO8'37pP.ʄ8,0c避u^7$dp +G9_ípl_,,V-o.w 3TK*A2/j(&jԒ.,ӹm)-Qe DkG= 3-ӦŖ 4\OAyes)eAT7f1a]Li4hw+3aXTͨΏv!gY; iD~8�,wE#\[Ӳŏe(f.xٚaċjFA[/,d dQp9梼Fp.k/fd!T6r ER QUlCݰ?4b3\.PU>pX rۜi8 k֖Fޞ 9D\tUp{l'a),c<‚HÅR Uar Nd2<PXUsu`y[yP%W=S>crx=_< mpRE{ظEo7TYIpl ǛiޒPnLVLC #Eaq: r=q@TunȈlb͊ƭ kJѝ@Hٕ,Â}<-04U-ՠZLJȰ:AzrغՄ�*"Ku<B4 u+5]<[q5E@wv:G-@z9pE,M$η1gs5�5\5>X.5gr/X7U||rȌ�26bsK_-؆YZ,zJ5 gg20\;`h -R0hU(% ۀjM $#aoMAP٠HdQf9" r%` xꍠήB!I>7jrZ(؆̮P-E&= y5ѐuOY� ‚E 1 ~J Le&3=Ӟ;h[p'd}|.ni!) |E)Xm4}Xv V}~GyY`w'v" CBu[~-@Pi<Uگ D$膋r\ƴ<wx x^θGyR4}&M BaUr!ދD})d"U/'@`.I- #/Gw!veFíJ ȶ-?V%k{{)Fy0TiVN}_iچ z{b'S#u-Mg;j[ a93r u4VaQoDp&JB#1Rq0-\N8,jTY 2pX]C̚7* "]`K63rH[jToJߪ`{mj!u*q3@{|2j"S gYi1O-q. bB6…=qbpzQHv Pm_7P\\(cͬnB~,+/@1՝ل#E!.!$} a c>Qդ8*lE0ԃp=ZIIHcҭ=WJc V{0=v!D)N\f";1 Â46 ӃŊZ-ιn]nİC[.P.'۽H!…2#ڰCÍ.oCvW'N{x:pBq}|r?{!A z%3 ό^P<sc/mmb�v⇶\j<򅏦f|#T_OuPvci-{}},77p ' ȅۛ ] ؇g:8kxPԨiBE JԿWȦmm% S �⤎d#I;ˢ[IS פ s/oإ'Jx?B{3)n'ɚ¼̧zǷ[@qs3և Cd u(ɤCߍDK Zt{aB;ew\w7 gS6:mZa< ~9*j: 섶72%L]q $ dx5i<?QG7U03fi a8(՝l؇�wB] 7P\z,op7|2/#8"؆ 7F_uӛsX8 IdGrhEd1Kz*sN[C"vУ-kR0 ˼% en$j}Z[ 9rn` e28('4Uj tͫꈡ"mIBj@öm>lHM vw�GZtl$0LC(i@6?ۆs'8؇djR-8d<yp~[6N0 \[lMӮ}?od\TvHWN!Kqv9)ahI7e L!FQ[;ݐktX}+jW =p_s AK3`psK=q#pǟ5Å4SAޓ{عG2<3\ImmmvxZlmrpO'е\ܰF#X<Qf[}<i_iQ0=eN2 s`X Ssc~8ln O)q{� R9I/[MٔF kݢ5i8,FvqT\� #K-TM=ԪJ v9p`P .bZ?*qB NRP)U;T"XVE]5Z 6dn�=P? ֑"[tvԃT`q~Wrק6^ &/ԷvAqq #5>ihy8!N?\,Aߦu_7pe1UJZC0nv T7""1;[1BқVXl�/A=LN*"7> J\3\<JKHc2obH|\ �P(j P[AȹNة$d Oޖ<� j!J7 /A-Wm^0O(N`|؆d:Ao(\lEB BΫlͫ;G5NÝӹC <g,uˉ2 "ӫŀA6@QVb] ҆pT& Ogpb1]xno,{wx2:-- mӆLxn{~ӻiZ <m.ԾEP 9ofPQ^}$uA-bދcoZ ;pn}[3esuiu5zym;@kk 7܅Y:f:[{m>_ )Ap %Hu Sf"'L6oX%O&#p'LʦK =nɵ ]Z"mBfO-<  E̠g֪YO⌎^X?JGЎi zj g{尘/1G`yD6Y1܂UʒZE"U{~,jDָj+[Uɤ!$}.0X8I( L�Aq$ued2I[JDp#,MSGÜ4N <AEwA@V`PF$ׅۀUb6'P.H#rye0[q\@EH Fp`(Y/D3P}CRN3mYNt9Ȗrz|(pZ$+N nεXx_Jh/iݢ^h DUc[x a`rlLliI\\݁ItnYB]#Mpz+ pdw13܊aOA͑Nkvjt Ƿi^z6\&RiO9,.4&P5&/$DwQ%m`I6`{RpAf-&͙@+mo6rB{fȗ_o?O[SZ0.'03.z0-fd5| tM%FTm^^[^7uf>mNh,J=Z6\Ϳ}2rl *roDIf(Džl"lQ#z7pK%a۴Az7U}I2/f|"\ ZEk7 U%FK7~hi ol/r :hFn&tMdzhFp'Lh"e.,U6B+<|r\7h*ϡ8.,.u6;|,jF좍p[Ȩ{̅D6g}j#>*rvI&tJx9=5lmxw] GaP%4\@-UGNˮLSJQ6g .>*5UijⳂэ M3܁%D okpJq80$vyD39BqFdh-]s\Xzx@a,img/>_jh,Xo>ǬC8P!^K5rNڭqxs|4I j!=醙f>8/97X/.OȈ`8}l6#pdWhMFUKAzwbhwDiע=HdՃc.T2846"n9P"iipThCi1^Z/R hzkۺ 4..PZͤ>2\($ug,6 7F뭰O^36;K-E!U0T[*[fx`]v T 3DXQ rX0ZE'nvug"%@)YǥglԀM/ڸ*dTႶ ˿Hv؝'#\X +0XT5G:6ׄWm4ObmMᢁ#U,klɻ6\r `;TĐK. WDn D?r1^a;D8[<d6@#RU`sO˝jsXՊk\<,7v`7`ʵQZ:c唾ιz ZLM%W[@VZ&5\ 6+qXT+0.-^DZup;̾J6t\65Aᦲ軶<QPgmpqj:qߍvb^-* ȯ͋쇗cGϰvv3 <spZB,l3cЬ#?ʤWہ'm2KL�-wP}sjŜ0rN /⋷l"ǡFTbpXKoe� W'K1\(gX^JF]&aTR87Xl&R[Mm`_~'T?uX- Fmቬl�i.2,m /l^ Xa<Hh.@jiO[2r`멼Z-Mk郋J=x ?v7ec!%v0[Y0aQBa 0Ӫxt߬\x#(Y޸UK4e4?؅u3gN$K)ސ]դP@ cvffw<C`7-dzZ!la(y>r?-"VfpKKC ;Ր= :ET^f3Ug>>= ծ�J>E}(]r` u9ϻ;CƢ �i JZ4?LԹ  a4E"{@Tyqe/�q>$!Wᤤqd񰤖4Bgoz,0Tvwqw*GSމvwF pQ~kQQzqUS,2/3饹>2ٚ+)`2Ov04Frs z9 !:Or٭}pv`drQ0ޥfZZwj0E9J . I9u+rq5 5V @QV#Vػ")mB lDEOm']9vD0}\,Yvc ,XStP{>;b[u�^IQ[v"؄M9EApXi`$LQk'rdb&,2}~ rE'lFRBD!L,b25+y JD}궍Bn&H/mJh2cm04(tl2;>؇%d^Y" ,*Iqy̋n]YTS34Jf g฀wz|dzGw^4K4-'99F߉ɚI?z9drrNb^aQ/V2?Hk@jpW掶a|@0a@I #,hϩ*~UؠH'{  xE\r휳8a]jzr ^wwN2G&*wغ47b!.PgwA `!^$8�M載f͓/ڲGQ/mIa] pe¶hvc'UV&bL j")öqlD&8(#[K0BQ%%] m<  Ֆ4?.Ҷa9CoE4t$?oCUXY#XOTEÝúD?qj?MfmPur[z*lj< }>EGw {R4e��|Jp&3{ mppzt@s,P%X/5Ew.d`S<UC{7/ q.ؕ" D!Wi\6ɞǢIdsr! M`hYDžC%~8=5ga=êjaoC3`]j7؅ki>kXy}Q |Ki;AˏpȨ\h `Rk`t65hoZ.|<C*  -YV+ F. Sf.< !׭fP0e߭v1Re+IuXXZ"Sp=۪ + �2:|`'3]4Kn ~4:ԋQ7(uQGrq6W $y`7uz=BvWS,>Z`j"vխqP6 $@΀k^sNk&2]\b!+$8VMg%{RϳLNuMɸǧ:.jQ{pQi4 EwNOYlE-F@ZtͭB 0r>ÛEm`trTi`8,玹͂]y!ǂ#6ӳ1 )*qZt%l0ႇg{Zv.Pw;P4FE8zۼ1db U[6jbzlalCHlT;MQLTwp줡 jۄ.I^w/-Xrఠ!p8r7`t$-!wuTZH"=.` Ⱦ-5` �@Q 0�^.T8n>iUnNNԶ>*,u>SAB4BI &rW9 ~ 6|qDžV'p_ pO['>CmݒǗ73F_丠B.QX. e2Y`}UoӴ8 4-5е}84ׂ]2܇ Z}(tZQԉu\@i#DaA5Uf?@br3#]M$ p\e {/% 7_0P|a!,^x 31|\(މ-Hh{_ELV a!}@f5A6nK@":)`R%S/*U)z+nL2 ]Md [a+*hCJ~b\hp'׬\ԨoB-F]%Ӹ稢k!r"\&S>H𒝇 &ٖЈ¶ UTLZsXXM6\T :drphT(d0U8>d4U8#yM:.V/IM{. fI/b>8K6I&cCĴid8v մ֤I*,~3Gv!EZDj;,2 =jǴPhT�tƥ[) òJ.ḀU_u<Ndǡ^`7VJ}{3"6SSf_ X^P~qtô^U7qVuV 7_To/ghlG^Ut%/RS! ~̈^`CPOv;,\fz49.( uu`"{M q?V))TF>ܘvvʂd dʢơ-zt S4\ REa:w-5.,oDL9ϤCm-no^4~[ֻ@`?N,RZMy9,3龜lpT*ԛH~6j4z1 jEJ<Y*>E6fya\T*IbÂ-zJ w=9+$;1{,0d"AVw?ή4b r78GݳEI]ڤJ6Q%^`@n*aVj;x8lC C9ǜB4I4< xog+>4$ :ZbtN� r2=؆ .T91\mZa& �fEYC ND�[[XPzVbޒ Wx{K*Zm{C*XlRa%&t)UB]LsXN$N_$`o'TLbR@wq Ep%@Aj́  MlРٴ'mk-Ez!WoSX<5 jUS +.Ǖ)eCRhrljA ζXhǂݝ)A�wd-8oJr "잮\\>l +s{@ REOEl$Py [@T^/5>Y;ǬfET!KX,%:>>p,H邉<aPv4QY@atɊʺ`m8谀NUi{@Fǧ G3)4SӶͤ#i$EG$`}58Nd6ē,K6պ; (ZER/ʃ1X/wBd<lQrV jjrm}WCKDžre FVnq4,"B =atr: Kdʱ B$JK<#4\8.,RT8B-yVU<W>vH%R]ړ:ޝ[X#8P1_V| `Rlð36Í3&`\ o`gl.dpxu+J/K94Ȳv@^۾s*;4ˍp|RRptRQaIu3p7E_å:m踰K]P 9j >wi@H8͉.ĮSz+ۡ>4R15$,K,ـ�GکMd4ѐQ T 8W~̄R70\4x2Jq//9,i%m>qjğ-=5nL SpCl'SdHE!؇[s vϰr8ႷB31wtS׫Pe\:<|-09i`56'Gw֤8ft?CQYUt\Xy>�iDKy^U4Lbb'CCPp:T#vt*n`'Lŷ= : e!sB+"6bCWDl, p#l);H>r#'h6FNM7$'WtX"ch蹬asNL](sx;|'  V+,;�ݴ? OT,wB]d.X;).<N%\4:bo-V ހg#nbErթf,0�uۀªxׂ墆a+aNP@Hk:.:!K> Y~38 v9^CdOAqٕ57 CVao"@ Oþg:v 6]XNf�FncDE5z}/])1!EM̼qT@ڈLHvZs)qAv-|v�kkb@ J>typ3ɖgxy1XPi'[.In1#O׻zA>ς?ݨfaXW#sJCTzAgA d1h*+1OipN4  W<Xu5X,-6F [ABpah]pH2|4H^ J_G9lY%3\gPg8j] PZ[%J 'bUv0FkcQ_NaQZarU =Sjc Me"W\fhfUl <E,@*=T~lh@2+.6>:"Ÿ-9pSBu^44\PC)YZ˹g 9[t�wt Np)&o&d]8,�kau Kj;YTi9*ݼNP6k/ra0 r(T!ΘV؇-J)pŤH �aYu,w�/f 8.Hr2Xr(5trXcLokC"]pƌmͰ=}6$H͋ۄQ)4'D0Բ#e3/svG[LE{ rA-z^*; )*i, {zKG,@SZF"?I%f *׋5`HYD{zs^~K"#z"];eyܳBu%:.LmVB\' IYag�i'cn F]Du(q\@[ّ;VDYhJ,RP <ޚPOvA6h{Xڭ"H.tXZCI5REok3`e`.ʽ!l5?q'Y1\;܅FjUN S&*Qǿ4̡`feb wAاÂ*1iwliOnr6WEZ!-p9eݢf#ѺYH5@!ee4l?=ɥfד C{qX4D|% 7Ըڎ.@Qiz<O{$N- AUt*W^ ,!f >łIЗL] /@-i �W@4[ iUL ,,a'w60PqKc2 (YP; WQ-,Iw Unu< e݇ UnU�1XoVΒ9jl7GKEr!EȄT8 9_SE*>_H?'w?????߿_'|{:?f/??/.>_?ROBǕ~>/ݮ瓷Anx_?sx5Fُh?k,^.siZ|鯟nζy޹AvϙHǞk~! g[>|i</o󟧔L=|Ϥ=dU6nŧ/Zv|ڡ_h/v*@Yt~E˾(y=oh/ꇞ9kL~-ړt:OT~2Am஥G~~)|Q~Z~;T} JE t/C4?/t>~ b.$$ѬA>t/}s_B3>wrEWv~S_ ?r+dn]h@8-,O; ^9@'*G} e/~QdÞY% .,r/*vgFϟ32 _k+OgtKxaA.U¡̧ۧ];7Wn<? t~>~Z y^6t.0j%΂=k짰{XO)a?PX*}SS:iw\^%I<c:qe$Tځ?^ ëA-<o</@n|#tY1V[^]y?BBݴ'Kp1A 縭VT$[̥A_ʼǸ~|1~f{S9g㚭O+b7سl'ɾ}E=W<$Y ­Z ?}ă`=$wyes(ʷKf'{~od}۩fM^ANw1vXVE]`=_:Aﱋ@}iQ|+`&LJ̑Kq=o/vՄ(UiXx8Y:l$:{\Y6ǃձf{~7:R<|%=|2ύW$qփWx}{Ew'=eQ=rʍ[6ӆ w1(=O} Z=aZN_S=ϱ_}ιS%i9cc& k\==d/A],|'\rпs<W^!9Q7qq >J FPY/(xh/6 ig_.ݜg`.\3یޓ?d'k kV;O.k.sFcsW@տݓEb# ]=UgYHM>o/xk#`v~s'|OܰXsJ+Lw"bowɈ>ǂ|Nk #>{ϓys {k_O[)ms6v]k%mJm[wu=9p>Wޭi-]dž©ڻyT'F3xSO9f5?&v<~g0/QMt wg:5/;jԡvyF~s\ Ky2Y] Y|C}hsf]3�wQ׳6O}óKzq30\OÉ}tݬꋕJvw^ αsK|F|*xU|5SN.{<m=U+6?|<~__-@8 q[ %.NGoaǓUWʗ_c<W^ͿY֑l}Ok i'~l S5=gd_{7QSR瓗.66Pd1w6|aN%~aan}r^:s*x!DwC9gy1- ~c/>sK>>yI7oxYv\d2>g߷7ޟ3xk +` Ykk֚;P)#MwW0h.k)[m}aS|D:A$ c\y:}"$sv1ǫ<zvwS2zCپ}MI;B/3)=e_ħy##~t>rRel r*dv?}U4;ꮽv8{,9 ظc\t_3w)м&y2%~O{mnAUXP繃i{Π|=w8;{}P2}6uǀ|_P?gLzXmgTm帣Zɕ{o;H<?;IFzL<ǏY3o9mgѧZ1gh^w1SJ?~ʪ0?;eNZ$f+eߘs'E~ϟUkƵg S|&Ǻ\!K̅Y'[ѩkŻ>յ^t~'`?6^}Nh9Mo]29;2~E4qKdmFN&pav|z׵3S4w\ΰ`A[^yӟK ,Vsc_~կc:I;mڮe7 P-:ډ_n|f}QD~LoFߣk1@ 9|T3]:gת Cl>} ?}Oa:  k@~AК}8Sy=چ,icqQ('bzށ6E6o i;9pǴA0O 'ۉ 52?*KUfRwR#6SJܛV֪smz/(h&$l'HC} RDA= Teg ߾'޸"Z1W P}b4öPc 3^ d| VsR/*BN!WDnܹ F@ J@DsiS9v@'U` }OIڳa9݇OWտSQu#[} V)*cP!" ozT4mf2ݻhHb2ȵpwo%hv ".A'y1J]5tU΋l'7ҡH~gsn 7<Gv%7sx>Smy ^<hxe];݌lu#ؑe.cgE[R<,5ټHo[ZpjhUw<O,ZT+ZrGd7]1毵D>_]c&)No<Z=E7dzs<NUE�҂3K ]e/m-CE)NWnofֺso) sQqIkRH»?ٶ_zvڝCz%8.JnMR̗^yCU8QI$m{, F7PCRsCzߜ#:=%-peKfq k\ـ}吷z+.鈤g`r~@ d-3'Ծ>ɲ?6]x4u0 e͌>$cYejf+iu8'q<<н1K᣹Zi0K/ 8jvb?~2YFP܆V/HPC5Ӻ(d?ɛ5|Tט1v-m$Gl [ Cew4J5i4Tg|rp�gcճLqĜη2>tbyp*3@VW3-,h+<FE쒠 kݙAи9'8P7pRd}Ŭnlqo6%l6-7 FIY3"C<`_jNuq8\ٻl،h>42  x8aP9  Ub"0-'|V~XW[ gTpLFthyuurH"HK\W[/u7gN!:Ezͤҟi' PmԚz]|<)&oմfYoN//[ }M%[ LT=.9y85h@>a>r\ opM!QLY9ryY+՜r4'jx%Vsطq؈AY3G9FހtP;NUFšS68&Oy grLVcLKäs&b]37<uېJ468<q凕6۱W ;Xeg>h6{ԽNY5IK[[b?ꎊ␼uZ po3mxi +Obۦ2G_[xB8dd4Q5pĺg=U8r%[.Aȡɡ4V4o%j3׮d [ۋd2(C)-K9>Bk#(Jc/1چ,8C!q^+V#)g}\..:1FxJlE!>,7ab 0Ƨ]ťtY�L6tS0,g%4|=aq1i?e$mpY1E=J)92WHguڮ5택Q/.:VMRmsN7K9O#dx4{S)HM\.Tj0kqvZ92ppq4OB20&YwƉo�|<1hgϣ'ÓaI UѾx[daQCSŸ~mw�_s "p Stj',,3P N GRhP%~c/?prUf&vӁH3vh2qӸ6w!AvWe _^<榋M>L=xVN@-U 9N厖05Û|r)*g4|u{LQ/qlO^).uՀɆYt~G#1+dLcU%6h[Ѣ F eӍdǫ <&d0],YoƲƓ,E,$qMiK8&(~d١`FIZ&f~ZHD�wՉM,g\8'hN6v8CY'`>Sz7=3tŬTz7tR%8:q`$A#n!˚l` ^3Y(9lbr:C^Xڏ -qXW3:"[m}H9.¸pW>qAcw Yž&/gt |tAr8�gFr]ny͕*W8,{Hhʱ>ƒx9"Y؆mludg$!㤃GӭP3?ڴ,WAS|Si e+V]AF4ZF9NXҐ28U`im �_, ۛEiId X8tw|1T HnSvdUGMɚiiq^`9ӑi}mi:MY,p:SkTOe3/"Ŀ{Md Ʌw&aYAjMTCf#gKOW8)`-٨'b#9gb=g=ܥx&OpVY,ug;J“;a F)ŧs^iq"=ʪX'8}."j;Oy'$lkTԒSDq6GpAd5Tⷱ@xcECc<YdOc[6ug*@<OGhGmt9 !''1ddt o2Z8\4Y�who8 YcNZM&4'EI;J˫v7uYn: n܉H!�.qbҥ=1ooH15{W\#8 !+Y-2Wp2pxRp61z9 -ӛ6=Osׅ@:f`ɘB>@h}eb8pht(bihePrR wUW5*5LCv=&cZdRL&345̮'pO24L{?JE #&1 ᗽDZ@ѐ 'ZTB "O)뭩ZĂ/`}jFݱup*_ܾ�<7˒˅?=7~[g.%QRTv=!hP_Ewtgv5.=}s. ,!<g_IGa ggl䔹'zմάK\DyϖJvYG`"hV@CTGsE3MF?i-|>gm"OUs`cr9-|EqҥNX8L~T6TV+0` ĉ;g;+art-'%9?~>ʕ\ >0Ai-Vm9;\*9x^K?'Z=ϲU[liY)L[ۅ$1EZ|}8pХCL+l ڍExz3gika<b&I<!}|>΀lB UwUC=eËxWD1�z9L5!y`op! PN>!*]].g[:|5=xKs]`y(XCG5n~Mw<iNcd3(?ǶC11$(tЎ;~(1?4`z^,2t_`vˢ3kfu"7#Mv4&˧PV4jA֨I=[kl]D0մPTM$y�gdա>q,ljc瞧"YGpUVM+rmep&>0\hެmZu Լ'_4c%Flb-{uy$Nh\fCĦl79nJ<wCON~<DRѵٮi{>~'XDAoI{ sd-]'CVk}~FP'ZD 8Y1b=ox sb[z| fzK5?>^vp>=.류*~O|ϗñlu=?]U8?S,5)+p̋S3J-f˖lߔR}tJh n_2e$r"e p8 ̣l T~N'. u`_"6ssM< sV7[DMe[H74uSA4MLsQq(e6p[Yt!BGW9օ@㛚¹jLc;f;.\9Bq$l*aE[ҥ篋tʚ2t'fتG4߽Q=N{Ѕ$ro _ C%ke6Dj:mUҶ3~-TK{6*eF =CV$L Emb{MJ6Ne:Z46Ex921<QOeS+b5_C9&N�fkLwwh(a8W J9#FRի<�ZXh;d̖Cޙ}k(."-qVv =˔YOxݻ? gq"дlŃ#OdCF{[kZ(yyF \{INmΦtoQ97g_iU' 'E.хg,eoݙH+HxNH>{UԼIgc!74=RJӒOvJu8nt++#kIrXyMUٸk%fWGVXb֢<[O|HA-Ϙdի)%< sA!u脆MNd=؃g-\ڪSmFUƺݦ'8Zڥp}B{mS=wy4fzXe;?Gul7oȹp\ć#RP55 Ḻj0J?iSs gx!gB:^4af!tpzStbRJPNxt\](*Zy묟le%ySen;VzzN?)5cf[ro\Ѯ`05)r4fC;dؕ 5;@A6˚ bBé--@p-*BvWl3}*-Uk2c.d^˦^x.[ w *9̀�<hp/|u,3SQZ_'<bA]Tv L_^# ٿ, "p܎4#&mP_V=NLu%i kX품pZ3rzDVr81YҀ̱rЯ8m|7 Nou xͮDi{Qȓ1#Jy!-ɝ`7#=pV}x#}:v_Ӭ`uUl\1ӕʨ줶C3TYH9 Mp�ɉr,,M>4p*Β8FZҽlœN!bpb?o&t8]Qlqm֯2㑕b3 l`eS. 6g<5-hv_m@3/H~:Dp4%gqO6;mO8V^Yɤ,OO{pjkksKQv8h:80cv/LodYPnHs5 G`\,k;޴q^ݵ SptGhtTa=gZh bIvugK�ځtxX IN7 2B`r"+Sw&+F>agJqI, G#hl٠X*WuHjk^f OCOx2f7] 'Lg=:[;7;>Q ~ ך 'vGLb׸MzG!S9Oi9## 02 K\)f,}G]5q<:aϳN{:xa`,)t2i_uGre,_W% =~9nBL8Sg8f" hw;BwmB5{Cd +O}/1b6mp(<࡜b}us(7Ns`\3VChlCNc x5Arve?4+gx51x+/~CtiO4pJޡ%%sh"*T<n1ӵf]H"i8G=6"GJ)0 7<NcZ5>8/~K;rm XWp"Ex6ӁS/]S['JpA9N}n>?9f-2 A!ycp6xqYh�В_fjS8/55dc_˩@!fv`#'&. k'yZ]2/j(YmQɏ2t:BOr UpFZIߋ[AߦC 'Cu"uvoS#e޹gx V &32s8Igq<iB1M*"=jSSWZO:,*x8؛1#K|D\ޟ>.}- qF+gԍ\Cf_Rn�֒z L<VBf\Id5׃;a4۳Gh`5Z$^Ï<gd*!pil,RxP/1*nj~YxޯK9 0q NʫkCS"ԒE ]7+;giĉLNK5@xƼFWDHc@3(v~Hoz pif2iտ'm_}H£3cK;ݓ(.NC)2uV-Tt2D˱4}D>'ZB'tj9rG:]'Ӯrot>ˊtV~c=22C!_fy.*t}oG!YtupM5~-J=<#25mVWm8"o3%ѿ|ɉG-ܶ)5M n7SBӷ,Ih#E3p}sNu(^p`-Z:V6Ye2z/WƵF+$G|*ȦǽG'5WKnDR2jT.v'7=yW5qIDZ-`xns+|[U15hu^4-`nOwwO9[+S&xvYr0EA}C>5μ4ih=?!8Ci ;gޒ,4^2>h9FTCȲDZ.nn*fHm9|#8״;`@cjR3q 3E<4lڀgBBt/ލ<a ^OW_p-nuXBPk#c8"7*O-b9Vq~p>;+ d}'N(lRzu9u1ui{.miIZcRCTx~R[n:EE"uҊJptanhWrM:I;*lQhٯYWq-~'VˉEbgMNYLܜXpo[i 8iNY;{t2>iņuMؤ"Z=q:i+&]@0$tX*t"^CM~̩?s\y>GW3pm2mz̘n螳fX ɤ/W"x`=?)=hzu[PC߮A DGC,9em~mBL نtߎNw-7k^:h.)~փ;�}r6@7p:-1b5放wː1%| w^."IxNlQO;g66?oDui^~bASo_P?nי;sΧxIr&Xj1=)}Vz fi"C_ B .6cakց lr̆5X{^.>h>LHt ewIB'`C|V J"zBJ_e,K'v69Up4 F{ڜ{d$# TSGt 8 傽}ʚCu#{它Rl Lw7[�f4UB,j nw<Cu7F3rJ_Z2O{M\.9uP*`I+q+o EO",1ۏtde6]# nBvqJ wj]T,Ƒ<\-w<vnΝh<H8 <rAEDr�Nt>]5�JxOhhbӱ胿ݫʀD/dFĞD}oo֦3\2l4J'p.:d{}p| (wKG}gV!/Rs4vc5|p4Ŗ~8حll%DPnvkNxxs3EO9q lӤ}oꂳlqݏ4z,SדM|uUߟ0T[n@g3WUo�=SmM:'M/ grdm~{^f4WMrٝЍ[& dR#ڰ~8Nm@fUP GƳLCJYFh4͜~y9Q&M)8r'k)[b.ŸrR)fc_rd.h wh#<ZWzx:ZwUp<g.bi2qO\шMH=gW#~C ^]bq\%JzD*YM0l .Hs s[Ekz0,ߋǔupbI5kGV@p<ȺӺAcy9a%ʚ<k;m,sŭ͑B�hTW`ZZwx* fRk~b`)"vV!Uṏkfgù8i던l+ٴ)(u #FfЌMa ;WdK8+qPINHGP�[+ѶLפ'Jc]+tZh Zq~tKgڔ ̮j:#hVH]Um$M5~tz> (TSՃ gY|͵ëzɺg D{햿pOt`mz218]/ dF?8iiE3<@Wu5sǼٜG|@>BfD>ۃ3M 6E8s)[&'ġ*׮cnYjd׻ntI7+l##IsNr|x@1Pfz&VqfP;l3x˥7ټEUP~۟p?^Ә:>C=1TcCj#gQB5}m^xMr'ld V| 5 _[q³!C]TM&3*rq<mC445my#%bDu}vxL4[Ag/jF T6+4z-5b;38e9oL'7N_}/|d Ԙ&1IY4;nEGMz4M8tXu4Ϊg.cg4xNi'4Zu_8kf;fV=oDcӯ\s,FFNxT [N,*n;<`[9FCl[IJ9Mo>gS+W,g@\iXqOzLZ=s GG/ҦK?g|\WӐ3u ИoȘK?_ /֯A:H7 lWҹǀOkRmg~ܛ/]V12PJ]lZ¦gkI;N׍Ɯ)CM90{\8R*}=j뚅uo 4M?Qa08WJ1p>U]/8 8`ȪgєCq({3|[q{S@Je=pzqԢ6ت c"}Wz;Ě~4. 5W]7ߎҌ |T־Sj,dl?6ߘ\{Iƹ=L"-7 ?&8Kr\#1bc׉oNrTEprD׸(/_m ms[q gEWR,%WhctdFyNEIz$FV No>;zOe;JIpSE'H5*=c:ʯxx:I̒B57cG+Ǔ+`Zt։4ᔡJ, Ɯ1=P|tl)he)#dgvenf3r~3P?6?EsMYc%[N?=K[Ҡ)6i^i%usFהBS5heb4/Y糙j-P>3#3noS&bDL+젗gb]&]p8ϧbOH1+yPs⺱H2tM)17F̶c{s 7v!W]C~2[&%<MjZIHg Uko87d%~[xr.ND,ϟ=R( 'c<ɽ8k>fBb?~Ժ &0+gJ̩h=R#ݮ7yIBƲ'vT[%ҷ7msz� -�Bz |sk#@Gwhg29j̞!뢦X`+O*_КvrҴvP>.?o ?bù@qZ8Q⬽~\^a~qRF3fȟ, 3-t)ם]_yᘭ^dcI3瘱jAx|s5sAߟj �4WhK&B 嚙mX`wx.z]k3A1ːmW֮xƄcሦS?g/<_ve8()zU6ggSXD}#ƜsH{iJ̄6@;eyi�*5h-~_ .D.j̥gZk8& PS6;]3;͋BlcR�2]ZN֏E6M9S cW*?BvH9$/g> |-1$ݏPǼj=qqPGl./)vݎ JA91 [ʨ5~ `tЪ"&;{7`t_c[lK|p(é@(@hhc8^);c f.}:rO3X:` қ9n5fqOgf'p=GMnbv~= xzcu aa4xPxb>2dW5G�ڃENqV:8VpǺhJ# ?f?wO' /�ц| sn/V67d8eCNLhwofg<h“Fa!K>xR @ȦPS֒,Qx$JVV4DQ4!pJ-t:f:inClGx&k(YSVS9R_eJ44iqPy�%e<($ prP4O`u.VS(X.sڥqi6/4\:s& hH8CN a,$hf #戍iɿDyJ 8ud:qZXpEwB⚽dnp,x` )`dGsM k^m Rz4]jI%eK%K4,R|d`uTEjG_egaGpQ8!g(2)HVO"9OXSА4m8lB8nڪA>J2=i7CJ燩=c*ٜ'D?(g?"l %xug])Գ|{f1~RwBo'k QlΚ}p�KAi1(}τ~p4hNH%Ѻ#ɮ OE~=i5/k9FZmu^>SDoh@Z^Ьc3<Veb g>j]6Re7l\.\ ak"YGp M{Vfx"x*ZhTH MB7m�37k;/jUT+w[1}yDv6{Pe'{wSV+<*ڿhm] 'Y?cg74~Y iNk3 tH\ *#DNir\m`q8SY66o4B-7BVק7̓cG.)�զh*뷴H Yz;�'-lO\z&e78N%U;lC<eS|U .ysLCT"T]O/J3Xkuٍ&(e` zmBy.TתtS FXvhCt cx57 &,PC 7{nPNg8G;4m;z%^/qpH.Acn]#GSp*~v2Fźmg �NBjzMw88;qy0׊dv3e,8iSh?جքU5Q{:xwOFxQ͇ǃEN?Ah)C-{mV*b/Phr*8, }tx:Wk-%ҤlrK]}J}C?P?Ԅ\]m^<J;SAA,Gǝ:Jz߰C*=":=g²MB^{rY [hQ&|-yw +d59fLk{ {է AVPG C0�18Ϗ)tqٍӗ{2a m'˄~ù? sx6uDl�2`1"Ww3e䐕Xr ( ' 1dGDŽO8kC{M~ @|<ñ˸6oX4ַÓX#fS~d_v3 UmY׌YD"rW}c)6X TH /4+şûn>s(ۼC4ZƘ8N>Q;cR4y )tDBH=z1r-MjJM* gsmCc18hHWZƿ]�`2zҢg_Rf;wK ׌u ztg ڭ�S)I(ro-#TtS53@9՗,v2 β^ Grf>)r{�{:"UH2r_v:ek;P@LBt Y Jbr1)49h>.q<)Μ-]&ÙxV}1#2ҺE R}(ޖ[f̜;8ğWV\lpݮyGvd}y (be'H[=U<Q] @Sju=Ŋ$t%6,HW-˗ ^#k 1f[U'O8 UH8hjC3eBm&cn ӣfrqñrPAx@܎PATWi ~8jp>9.9J] MTBa)E2Q4"QLƏ1G?HP]9TC[ΐ75G(sNh@ݮ7/ 3erU)R$XstȽVlBcٯ,^x&q>P؊jޠ1Nf\B5I/b_c"2c%GQn*ϘvoS֏}ĩ#(%Kf62SdLA3MH*� (%f F9 sf&f}l.Ok4#?@5x!y_!q05|v'p<K1O)|:i}ࡓLC)H<] YБNϤLδG�/m4ꂼ?ӋNٸ}?n>=q8yt`ڜpʄxJ )[8TYC tFjOp Pn2H06LEJ2lwxznK=•~d/<d}ztv4g}Gb:mޤ Z*&`ӡ*%Kw7ς.87lOg*;/i]}6𚹤 'Pݳ|dV2V%qG՝E@D:cU"le`H b"^~,2ҕzZ1C]y7#XvB\emW pвCPO9u+YRuGеHSzI%H\7op= w4>mNGۼnv]HPP+3]otFzYOG`jriCׄ)Ft:b l7mWi=CEm[ypDx'붵3[zPs0)v<%BղSU쥡%9SZ!U/q@k+_BIx+Y:8%d5AvWtx?S?}8_wa@6_�dz n ˩aːMhFȝ,y߫,.(Åt5eOඕΡ:̢f. 7H% vUt|F�}3{Rⵢ-"k%iԘ{ 2 3ƿ%J6ȌYc~f PVZ#߀_eУ 27 ΐN�kӒ[ߌfrvxl%H{O"\ ^~ߌ?^xEC}%!qeӢdy*z{CcZ Ib.“gB³Y5< ÷fx?n_b"k 65/c1x`1T['!WT/0s{XQ,cz-$kpIjP�h~(_`j}2S7�bZ%p6諒Jh gq3w`+O AS7TC^lKop*a^X&Fџ3 ]٠Ms w11Tʍ8bm"I g1K(h '*;lF<v=hM ݮig2ϥcv #eOw]A3L|A[J i; s|pzź]b5?zq �;.Kܶ';ԑy#$h?$8*H-6D4&9G{i ZS 8qXV$4m+plc8ؘi6ݯNŠTor; '2aC] 7]¬sǵ尼޻c8|63"&q$p,B1'm1٢]XpUXX|?]$x5;EnQH3QgWePPq}g:k##lB6NN;aV#,ڜ;ssgQ,jXK3vd fϧ|6d3 $U'(@Fr|=wW!8ցyWmM%Sj'W﮾]?7Df((1xq-gOM(R"& ?1`z_#di!:'o]K LKpZrm#[85Y:D)Mi׬eFnښfgb}40kg53-.~J=8\IMzI}H>sP`pVJBs{6;ׄ`E'/NN@(4\ :}doV1 !ݦ|V{ [$[>5J"ϚSR4M6|,DW9kDLLpC2;],.mc'|tbypZES %(Է_9 ڃh)[B>ULxz=`3YZ׶lJܶJъ ?~<emVO%ˢ!@xn,�.w]";W}T~8pr.c9NcZǓI~`/ՙэģ!| 0ڟd1EQIu(:F0sg&kIhM\Íb~xSmzlX}t<zߔh?wp?aLمCl`8A)k1l<\rᔽb8oңFDxRE,;o:z#iWa,w9{L:fktM<\x`=qR%K=l  َ(N;BI~$ 3k &r3_[fr1ɜ޲yjjpM N"Jښ̫@MW! [g^q s3/lٜLIsx8?;ŸA+*7`(fTu7pr&Ӽ&- = !FБQLųx:.y8ECRl)cIoOqNE>>]W[,IMI��I$+u].p3I~:H^)|ф\BBn;.p%:GJm!6CleBS&|I;Ps @'&g fkcS,FCNW\x=8%m!òll庬'I,Mj65NA%@Jst'[g+>eGuV)׶Z]m*'Y0O s8JkVI`hRx=,[^[  8aUߕC8�3^?m/4aKn1't47<NSj|8ի; Y8q!`<ֶ;/<Z &I+ :P9@Å~@(709)8P6ߵo�{E+"CS__o\?|ךXB]kfiQ\[i{n5(YwEzCiσÙ=["?F hJ2:/l|ڸB5d S?{fq;gG٠ �4[!`sZ)kA&^QԴ̏oÿY:'l/#xh'-._�c>D&G *3Ԅk�zPE!e@hʟƓ޿O\Y)U@vVKPm2)S@<=6X5HtLnqj2c �!.~ F3g@2 ]θ_kjz;#JR()ّ5"" v+(78tVE"V1^] @~i4> w-Cقg#hpdLIEyWZj*>"ZR͈8FDX9_BԊ5_$NaGsT鳊p�Syٯ5^#V)ĸIr٩uk8_ElaWX<tD9|lV$T^T~B?vbO2?IE8IN6S8w՛9Ïm)~YZv s/3@<NNzplh۶ { E}DVpESt<%tp#uh}1!PuӤeRVMי/:S@kJl {9,إ1=9 ]Rn>+̓II+nBe"G۸Y{32WvvD?+"I?"S8s W9X}`@vᦽLsOvO+@, =Q6 rH݃A]5e(ƅZ&fKE# D�PJL+"l1Dsƾr;J[ħ7RІ^6_L~uxWB-LY{ mNd©B㋟~rfFg>J?(q8{ i(VP7o*7 xҳdr[zMpe!g3:SIm4"}01׸$O]H7GuQ8uR1UE8WBiASllpWq'8ⲿ5HcN)ul/'`/fCiEl VXs YͬdwWǰD.p�kfVshi+d DM >ǵ=Ե+^\M;˸ݗ4]}Cw=y_R]U5$XyJ,<)G^`2Z"Gj!+텤@&kh곯~if4ޗ͔ l?Q00ɚM,qM7/0rRP=ҀtfI=?0AKt[{X muG"(WV׃@yk)/e ǾffLQP6r~UstV|> gLhv{ޗ 5JL*|#b4z(Y!AJH{gl %D<YU(n@}_rUBYZ|u04zMR2 9?<b\�΁^ `9"#o9$)Cױ6 LE7 NT+$(6 |UwZ͢xW-f`5eA8ńn"whfɪQ 9r?91�1mʿay6w, ϻ;?+Pư.<b6jHk:!*?qČ;pUtb N=&۸imR;1Jk׏O++?л3N�dNM4&"6:g6g\6}:ӧ"B)=ӹ=GKmN7Bz�ޙ<߆0 wg`J7 6hqdU? Wl)"s�fHW9~Xo<+*|8'NZ ;<5ƸG{> q\Mzء�칁kBxQQ5Fwcm^>؏h�qkEH8+%)�JdnAL`e?++],p<&ÁT'?*G 4v=k)v!g,kPTBdoOY&簯-?A* m2w6i)'6K|l=8QB}Y $l޴>4Qz`^ !nm1_~4E8{ ƌ TCi 5%(NaxJ)H-4hfHrT+D5wVISp$gK^vy߽*+X\@VLv&kޅiYKG .ΎǔX/H7RwD܌*B]4k-RmT�ҥ >HZ0<?/q_:o0\턈<=:?of&nzXhJ4N#+s6LׂEs`ߨjʴx+H}TKģW5bE6}>W+=IǬMn 4`e$a9FJpGDGlKGY?POW߹'y vo̬ Nq·˯ZΚn,*Lh)WK_V5B�V􀼌z..m E4R׎*{<ĕ $6K/0$Nwkf'P[s}P8bGiP ~4FZWvJA曵?<*?jp8f 5K7~MEvq< >7~'ڨU"]q):D{FU ; |QY 0mB?CFݷ#)KRJԠc& 5)&Tq;.*.9#�3pԓqpJʃhĔ)�] hqb?Ap![KN`cd.7h pT/WEOm0lݷDO~ mf=]Wo NAbM*b]%MoK)!qΙ>W&g>2􊼤m܏]-pe:Q;81*ifŁ-RVo{mXro\;H3?vZ]H; -9`JkK \5|EdIS hz99^pnpyalݏELhwqV*8Eڔ;KN"wt%s kPO'm9z46LXl~-rH׵TO{YZ\5eXU|Ζ�ŭ/毇RM\a|A#+x|UvJAZCVfGzk{˜Uz̤4SxG4p&m~8j謮i?\*N(jS""KYkEfAypTY3A^c4\j^΍1GD]tXw..+) }%1K}avU g^{O!cۦZioG2ʼn`=p`Qn(e۬oPNۻZ/4 &<(b$CMCg9a>AjV}kE:,rp  9:pI)LC~w sT"mb~8p&U .'6'yYCzOl]>>D"Ht{C^xf!ٱD9>�WbSP\g[_D+UkWhB.^3a|=x&P)_Ac5dtX&|18P o `\(VSr-MS>[cp`/T#q ,UkոrY+,"eH)\&ֽg#ni4 !<Ɏ"r>0a<y4ιfRH\8)n^U*P!mssp^b}>} Sxʒn(~B}ۺgYls&D3g"x5oymw<>ܳߋ.߷&=jN]yQC߆%Cܭ+Aw f1$sin]"+>}͐32?j?yA} gj,+ϑj#~Vš{gMz|MǞT&-{`x껲!h34'-p%Z Lց;ćK^^b�ڎS~}9:NCIc$y׻l,llɈI?@S=(7wmAȶ9xD]n- eSEC8ۦ%d\DTdij..D�lfӶ"auZ O~É' (Qv Mߌ cee]w'ɸ-F/pq#v^;=ϬIG3<F ; szP]b>{jGTp=#ciH/,-ret#Vތ'55Ϋ\mhh+"36+$o)=+q8#\1z _U8;cw#{um#ID'mz1WFpZ屔[:#yRgv,�xID vH`<0R"T@pY_`Iij)$ q mCK2RM1{ 9~zQkfZ/a}ZD G(ZY1?h| axBľTM oo#6 GF*1Џ7mW82\X3_KP�8|ZqZ]98ŗopgyyF4eJZ!/8t(I!T30WeC1@(q=E~e"Gh]³[1;|#PL8pt~p B)܎{IBu;8\TNmUو}8v1} &nߩ,D rr_.hoBpFGK v81IXjA,46wxo6'FQ]z:vj`G?Pd<S<@nHܗWoDn[ڸzmfr<4T՛|XRlr㴼Eqۨw3ĤoINv2g1co&2oxc@YD2Pىgd%ԏ ĴGW]1? N/Hl˹"/dxxAD/fɞV)=uY͔<OO-oWHTr^gʖ/']Z=𾏠Y"y /fЧ#=2c1օL l%iFPUa2!eU$} 7ұ]W_hVՒ?&]'KUX̻f,cB)-X:kSgr~=Bɍ(05"hVYyx>^D9!rtƲ(bnxC\8X=8*B?9zKj6xv8I7{y+agW,< &l.ElR;%?SZVg4+ 7仚5 o0 S}_s0kBb6yFǫm4dɔ%SƜ{ �95-yU/XBPʯ6__C.uk!Elh4_DJ]&liFt{`B 5 )BxonÒB<՜Xy$`Ha6 .?*:5sEʪYYrWg_ ʮۅ'N9o:65:Y9T"'>d.=\e/bmRP0L!v% Av#n!nZv+uٺ>%sD0TGt  9S-T@g&2]Η-8ZLyh! l˥MlRDRCH$S}ɺg<opZ2WУog"t'&^h}ZqZc@_ulEtzЮ[i0Hi+|qVj6`:r):ic/Bz\zzoF֘v=ݦIx$0\!a>V#E8 ᒀbl&,5NSW1b83X}[<e27s '@W&ɱ0odzJ7m#qqx<�3:5Q;=muwH$&Glz*-Ff;Bl]=[{Rf5:>l@rD8vkS6..))C4:mY$Pk4&E8m䛉 u}F?]L/('џ$PI`H6,zj Y ~nǃe8K3�5ۡ:#t"Ҡ z^'Euk- ^ OoH&Hyl,5tI6[=M[YufԹ_!ӍB{p6#˷pK=f><tт\qu!PƼA ND#!M65˦>8+ZbsUd lzivմɏÙl7O4 k9[ryme*Gxa0dS+Ӝcb'`[aUYn:L@~w8Bԣmw D53W<O7m<3`hztŶb7[*'Qfuփ}.=0L8U1ΓV\rvI ǁݴu __:1Y`ұjx98ܫA8"MbI<mdNm=jQxa }۟GbGOéo$y><u9b_/=.>#3lTŒA?;?eٴΣ'OT(O'987GvŅ^:j 9l^p}}b6R뽄z_z.g9bR'#ZPۖk&^yLYIwbY4C'ۥ6TNqEi2LpܴЬ>TpCP;Q{ѕJo9"$t&sο8O8q<u%\RK@dhz߾=78,GZ�ggh,jf?!zx֪5A>6 )ZJ)uk=Y~= W?x=nX,Yfu>!cyJzOיN,ú&pbOxN,wQ!c\Ern[3[\1nmf@X5qa8q5Φj3#wDiQ}sO~a~)(nz!۶> kNZ=a|3R$td[eQҍpzQ qƳ#P6'Y%'>sN79[ZxT† 4t-]s"1/.SWug  o٧Z[ӡEwMom{Ŏ:6M9D計ZDTzOB9MYr895݊z)q36;=, ]"Pzd%K# t`YRӃᘖg _^f\$8s?F2 ZHv^L \%5=p8Fo˿�Γ S|ٷZPrnd]t_.+<FC2Cfel ,mXE2vO4P4IU Į3in[/q6 '-$s෴Ĺt%^5چxu(|߇\*M9O^`<\G*?O`'Qg<M<+mYGxP˖ \er09զN$N2q;#Vr!jWVK^FQD4^oPRH=*zb-;ɑ0.So@9}9Y'xPi/.p[ܝ,:[1 EmZ>c;O8S?gMh2x'ѬZST-qvp)npVu_*ٕjsÂo)C2�lt6tUF+;Mvd4&›,UB!mJ&\e9D[nxW~,umH ?rB)}S\Yu$i{H&گU'CJz)}4sKSBΐx^Ty]s Nl µdB|r~ppb{8y;%&5(tU $hWP2Гg:k`!)GvYc x-BJ,T߁X2|h'g"iPx埗} MD_t6c4Ӑj,neA6'C6|<TJ$]ZL.FC1.1v:,z<$X/\Lr=F&f,.ly@]4hkFrB8]S< O PygsiKNe Gڪ t #o v^hb,魷zIStNAV-gK1gRS[G{w,V2qGWWZIGCY:t'?b\7!gY&r'PJ8NN[L%̆KG u6ζ_pvb> C5M*R} %o!&$!y4ɢ m2d|pu�Q(2ű_3>ގn WV@>@ ש]3P-Q(;hN`M(#j!wL1jP"<hpḦw9Ζ|O)>&_ӛ�8wjY8ZuZ]yhyXᔫ 9b GCG2䥰шs&GH.δ4K狟uI/C9EK[;ZQ95bТ'pZ/pF7屉N~=Ev`xŏ$}m!f>v>Q յniU;K`(3:]ySHjMD],8>C9hKk6 zo63b[RwzfZο0=]$O' f[pSK}{{JWوӧV~FV,OUJ+"{%ժ<,rtp3lqC/Y3\:bjYhDP7.wS^ |ή?fxDF"tWqZ+2.xH96$2{zS[Զ_ g3(leu# š {ټ^ҍYAdmgS%p*,qU;g%t[gpeiJq p�jT3ݽTM'<Cy �#dEPzU.ʢݦ䥿FU{x=/-u�hi/8A'S{j.;+X_Y"\viO�[²0 [ Z;gET[{gjwүs`k.s*NN+]JSMѺ&h Q]Du`r:x&dxBjk ,k!p^][�T`ϴے\%XPW!%sO13ڣ|γy~}wd]GO2g&55m;rL-8A1tV #p%#䤏CjJ;^V>:UF\~{ƒN7;rr>e c"ǁu}z4}tBG"%½|z7$>6a03B&PxdσW.5#4 c|q3J;BhȵaR{:hhV+V~ ʚ<R ᢑzj9K禮Pa86}C6omʃu�fU!26p"NXXDjVOa׫ I|P4[]p~p6ހ|;5;x >R; g٢Rz -t'@X.2ӓTO)ӬAs.RJf68[<'l8+xF Pؘ{ɻiOYdsa T1_ M;#wl˚;i 8pS`_4 0ɛnl5M:;QϙZJյb<x1>r^O5toW.3A񴞓Bo3rYpȬ1adӺ;+ӝӧ&nw3Y3ʠփsZn�-Hh@/2*3.<(jt]΋,N7&x#g_Y|ْ G3L4tG!VGȳ(oV(Cs iU5'`׊tZw$ T9ĘIO67| G_SҺLg -z~6|Db.bP%]k #⥔XE1Ao$3qk|~j|BѠ5`L~'茏|:2ҥ;<Q'v:Ȥ}X?vO6?CGkOˁxOye@Wc )"<%V6UVtmvp8C4aOjv<M%:S)vCxYgw9.4Đ<WXZ\@Y86:ɿq xY^¥՚/XL^&ld0ޞg vOOxLWsZKV~ٜ0Cnp/xhy8ge|kDsd-X M44ةpdbT.y\{G-TBBLY  \"UEEw6>MB.cC~/qDp!qp8֪41ώ 5q30㳎=; iA4ۅ8Ώ'ih<Ce>照;UxO; Qる9x8;f~zd8bd *N ":Cr: �2o4JlGrd'Y4{J1G\fST``h2 (F0rwⱆ&bbklZּ\#ۄp8Ӥ >r -ѐ8}$1>1ʱ goi†tϟwpk&yF.tc6,b.K.hh vXOҋ/4f FQ )3rV?UgXSvi;ÙrrR9zowלxp=8tUm)|gIXR|vg7'_^o2D mm$pIJD]gz W8pzղ0)8rN4cpOaEɸL2'8%\78XgaZr3iuāy_,xJ n%#κZ+B_ !|xlj=!Yض J1mt qrۚ#}C(EyȐئYWߖq;u뫶s倎YV5$qS3z*!g)XÙCS$i;2AudzfUSۇ3UKk| Z%W#cK)՞ 0I:qB&=TL%Uxo¿'Ws`D,4m2AS<_xO"(_dok)1w<0pZJy3Q}ͥ5AfG,"{ya\ñ/&p8窻Lxs “iSԜC?k$pm In[]][&xe~y+q! 8v'w"[wNT{ԫڄ)RBu_R{uἊs*9$;bN^8$tzMJ.1W9-znΚIڪZDf=<0 b1| Gw^hșHZppQkށNч+$p*K9*8S*W\WVT5_7.M|WKPeퟅ'xrPJ :Y6sfɜYoS:>ӺyU6RkCj͎F)Wr<_4Mx:R Mn,EftxD턩ReܓbjD 1q烃 Ufl)[Rğs}Xh$9>Q6][~K^i8RJpGp6qC))Yâh\̩;A)RfƸ?bzK�Awwrac92eq$k p`NT²0v=7r`xV  ߎL`RX,G 2պny8Q�W9f`ItV NB* GVh4!82,8OlS>Ք,蕞S^b*?bd7T5p4eݞ9A8l M9O;toB~gǶy5X_>cQۭe9[5;5!yG3m6"v[s?29 k MdҊ{b㝎+UTۿ8B>h|YjɎ{pnޝ ew&<"`D`'~qYjַ!K+ճ)?rhVWlYF<oT;mvQ O')$nHUָ M8ʨU*wG�~ e3NKI!Pwu5X%)3=e�#:vypC]TJgJUN^O DC[Ly168k?: x|+oNqZqz-׈枈NTo4i|'&Q4^G \ ϲYpfEdn[g8q,Vzs:gEQ=-EUAkH/ q(' S6?1Ÿ⁗ok⠆xbJpF^)fpJL n–dba|g=8%Rq�1>rm_c94dF_4qkk,`oNliÛv?m5w4&] lp^Gҋ1߆Cҽ#I׌|'oۓupzcst^JF ̔4F:m/b.zQp,bŢ$ͰS׊i-3մe/8qrl@%i!)+q8A4,AOh}+@.7.13[CO.N5iC ^V(vxzNb\\r]*pNx[m B ^.x̒> 0s_X3w`-ټMv?Cj1tJצ1XtMG`é֊4V K…TCxN$[kO4/8ym'l,DH3qqzCV0~mW_M'ԓb�fY'mp7QD֐\�6g3]WM-NuEt\Nzx;9gefXM)eo>_Ϻ:L>AǿB-!=HLN}c!-|z8_k6ߦb58N‹(3V=u#3"X8fZl P[Ӧ%R%FCylj;'L p*(7 ~̖l<n_΀hʘT#+t"NKJ.m ᯻~qm$4gއ䗼i#8;X;X*\3Әg8NExD^V jk*cC{u}n+ڳLGt'G瘇Ϝz%K̳{!9/RijqT?TF_s<'.])Yli t'2WUEgdt:ٍ{0OHW 鄧6z[HdZ}tRA'? j\9՚2X>-]l^Ѹpt�{Dzp@^_<e?o?9 w.[|g؈,I1/>'\͆LqƌM43fDKدTYWٷ<s39ANn?Xp2Is^=ߎܷƘMLЩ:Ju( ]i3$oھJçw,iB Yo8=9PKwR wp -g6o#0/4[4+ŤDzoW{MA.mJ:�չYp|ΥQ4(RI: ˋy<ݽl kHV%M Z{Lf$G0S/, o30{BRvw l%xV^:?kiaA1e<-N"{'d+]|B{ӥkoegjThu̍oxX,p鷾8{yn4$R-7t0!pVCKz޻IbxxJ:ئ).SI"KK@~,o0vQ\QImnt?@ꪡaa.a^>TBYHa#S1-8Tڕ ǨY_܀l4J7�4͢E ԞR=ٿtO={-6b>֐bJ2c"-bp&(mEVcqFO%J+lz/ɌXqGci<KьHۣ6&Z($yȌ�3!s︑ƈ39 좧$,5YgPYY7gE}VKiCǟ N~#4ǃ8(?l=fukNҴfK,  BmZ\@yuZp od`5[.iuZGg2'%7K<N*78M+nΕmVK߃ڀ'gMNBq k&S3/5<i'Ϧ%XQ_ۡv$֪Hz`p*#М?p}K؜ճQ]{LT^sk@cpq5`ʒBiieCM ^VU^ `xm%*Ll@L\Z*g-&٩ [`I_P!Upf7YYŃu Ke ϘCYr;afé ~3[RqP,t쿋2lhD6:'/i߅WGF1r\Ff #rb{rس3_žYv[8x&>\;p) [.J8"}'"YT|xqIMo5Sn}0bq_;֎UAo NXGB\g2*";C^Fw&8NI <s'+mɵqe<qߝ'SF#2x1ι_ ÖuHhC:4C=8BҶ1=;N9ʇg8ZҰ͍ _qY[7Nt^?4ΉYZs_r퀯\l8CGzq& ي-=s -;udoא+1�$":YSdWe࿃2'cY(|8KOn~X�zD~:1.θ<F4HLH8 +e0yDf:iZu$t^nږ!cM\a$ f"2 ZdMOlkH1ſZt`pYoc0|Ш5 viY<,nhL.AvڂJN@vΑH9φ+�dW2r7?!in vW 8Lz-(";.O6OY'D!n'^7(w4n2~Vle3N8L=:h.c//)6cuͬ⭽RVlO}dvP1W'0aDd1 Nα7\1ZЃfة=_M+.Y#b/,hVq8C\t+k ?|Ґ'GHJpKΥ9ύY&9в-rX-w| p8 >h0ɞtk8UG*,$E5SOEX6M;J3 &1,yNB)[ mtM!7]کc_څ;$pq8mEJc4as88qd9R\*_Odit܅6s_Z\=.ڂߩl4q , E iCEvS6t,3j=1iPnl^MA^5͊:xc"ٞhui66ꢕ)\IKwX(\9 y zg9ْ?rX 8 2JzhiAXU#"_g@ri/4zvBrO)*<SoNv:w:XcB)gg>#. i]S5!ʺpt sqm,8ceoelt؉@ �l& E+x1%;&8fd2Mw41XuĜPe3*o~"aяt;8FKPEkyoO?r4ozt 7:?Nh]'n 'xf- D|3k9 Fk5cɯNcC]Y5{Wژ\}P-г _}US<GImۆO\Gvb:ҘuQ�a ÏϺrNUlph88͜)YuIwR,GsA<O@ZU QI&^,Q(B8sn8G[i�*QqE_9p}dd5�TPezo:+bx?i0dvv=u?xlP'pWcmNO&V/ھszdNE?$1xeJ h,8䚿|5|'̥C3/OJ\lh~״G" 5b?m*KS(9l+&�4Z)nҎv�cf-B~#@w'jae"~o*Pّ؆<` <gq8 䶃<޿5'xpv_g6.�xlaiX/6jl+#iMKk+ZPrCs.gU|N:c�s�Pc+^qݰI%q8g@}<Fp~xl"kW kPSǽ[KNw O+;YJQuU+�q2? *ڶ2*Ԉ X[3=z-2Qp/XHJ:A/"cץu|¿ْ<={r>O(G>'7 }OL6 np;8'Ş\ >|jK#hɫlbggafH!*q"p>sh@Z|DqiXӐ/7x gqn~9ၢo YT\~|8:zNU'iϮ$}yg#tƐb\[b[=uH;~,y9Ί"' g4z:,jq yo]/8Y8kkq;$0 S䍶N\N ޒldpHX<h/=%,32d|>b{'9% ݓߑM4Y;M&yilIWG8 Xfࢇ/<M'$a!ZԱ$ g„S/EqN 9B"+Gm#:HBqMSq8liODkXK9f9$,a8p'?ruc:s˂~e^?Ӗ1Vc8C8#-ݞB/<ɗk .τշKovD2;qpD=CZPD~1\"8IjÿxW-x7讅t*nhtd=!)l,s82YQ,w%fQ l:;*t]0 r5xȁmLY W5tZ*y9bL%a 9Ex8ZԪZg 0DB)0׊0Pu>y8"wf3[Lki*#U)fda:ٮ;ƥTJOyA ev0~@?>B1KS]ٸ4%YdÙl$)XVJCr�ZSV6Tppp!^#^6;<mc<ިZ'IuCGbz[A4K6GYO/[y>wUxoo9+J>3u3-md_օ_E%u0 /ٙ ^f0Wqm]\Oo0Φn7|~]tƵ` !B. |:SVl>9'w  zt6Vx2ӛkgyIɜ^{Ż  ԓl8Vq:uj8K]_ t8cb0'GoW,${hO7<NE0:÷-HvB E85Ԇ3B^_ћoQzQM#B*8NZ&ʷ壝l l`!{9FkMy}|8xA z$;1_DzCzmN^cCQlgpyv`4&U ',km\_`S _p~J`B#F�N L'p8`QMM\eHr}h_ݡj 4OAU$Jcs5ڙؚMHޢoc8E^9 Z!M@aN i]U%|DKw-2CxDL\4"rfLhԯMͮ9W3u݌]5} p<Tʱ' 9 v jJICp(l6Ћ$OY柣ƴG6g_N炣[#߼PnYvYA)]^~Θ)({a831[]mٶ2#oA\2XZۑ4vi-^d+BS/"Ig�ڳ 8F4#1& pA*㔻Υmŗ!%)Kp_#ɿ) q%놏L%�Fq6㚎lNT|vjP$/O3[ksp:+iYsDPqM ~Vzpy.#U`6H+;!ih$D֦eOFcBp;hȩbp")_X$X;_7v2h ]!HC-"z#òey饶D7pA,ճ54zMA ͝>ʯG'i`j#M|N'1;XF-+w.jo6׶, hW$mZƝz9h@[ˑz,C3$@տ3w|xfrat1S! /UևX3`@}Y%pVjlv=Ir\lD.\B|EY3blA J'V'CM MhG{q5O .ΦL:Z(}ZIB4!Lhru0 8Wzpu " PO9/!:#s0Ve_xµ 6.U-i^<^oƓ)|=~8I ^xte6R[HkY\)RZwބǹm۶ԛ<2l@lRu?d?q8\jm mzHk,gF!r*FP:]D1Js(Yp4q$ 8ŏhAd(~GJI8PN]6/a0P@k)]c?H'PJYp:3D1,i 1jgrcӝ9P~<rL?+RT]2  p8o앷~G???_l{U/++I֍?WwCc4k)>o߬]k}alc| GYM*\E b0fїjNIg]Ј#xdEb| Kd;cIĸCtSP{^!^N?@f#2.w�ɐ}5=NEP‹)3めkUഴqNi-KY|fK[jVFUXouC?�T5Sy zШUni^@G6EfI;Bԓg[DGJ [[~1Gs Aȕ$)#<o:i=aVjrs#+ɍKWus"(IFXh%Gm=3ediy4$, >#\V-Z5Ÿ-i%G*+a? ؈? *մ 9,F9+ʉO@bNlC�4cn qs YrBQzȿҵ`&fP1̅JS1"{k^,s\7襋nH$D$I;#Xa'"JougX~ F-/%p('j5:kڭeyV9~޽d@Y !-ŷ�im)\li%:΄}>㊡�`m'nnmSiIG$ "sU:HxqyH)KJA`@sNGĿtmSG;$bټ P++%-Npu-ZC٤erLq->p7Huhƥ=q8C(yNӺ5rD>Z&˶1hfGC8.̵d@y>=b;͵2=l\EOz:H.}+C[h]4@ Lb6%zFSHPE>Tp\ڔ-Exj8`L-sہ󁜞YonAԭ|_?>iDb:&vz)}x݃F~7s:=U8;RkgZ@m#٨57aR㙜EH}#{F?wq<+qrtp)JSGpe.¬O=~gZ'0x1W 5YBY(uK9MK{/Θ}lĄRnQIp݋a,Cbbؾ@ V xHPm~mߺ'zs5sr(C:xVAN-sX`:r<+|wGP _#f&V64s|;Fd#6UH'G R}[ѳ>4;F^Lڃ3'x3ǠV}LԶu樛/CĐ>&1NӮ]Wbm3,.{P'fxж7/ +_E M\jk %YKKaډÂt~آ(5k,h0]~\Ȣ 7xZ4DŽ?1ZWs,$m5SEm^y:iIA[' ZK@{ލ~Tv~/YHf"t߃o(%trKD}hTK3uk7+M> TgN=$|b@NHkO oDbfZZZ3{sb7/pnEN+ȭ*!;jZBxk{n[ 8oQxEDC{SzgMkFu{\38iz[?Iuu>9SYfK䪮zpd[҇6pK#}9�4吰X#mWgdK3Il$PѼW/;=upZ*3z9 %4F0]3mǓ`y,Y)6oi!GvmmO2mxF .l`5{ܯ\ H|6x&^M 9 NUs ά�gP`g)+RKI!~Ǯ]sΧPeR0erVw3vCX8kh% 'ksďպc7.ISiI5%KI&OJ0dte݌ 92\)՘Sch9i쒓Epv W]MAhat]D|�e[;Ϊ[=6۔F7[+'p�ƲD3N|Yc-kj :wx*p t~4Բ_D}h\Gro' gi[Kt_iXB^? D%VSڗD͖a򕬥m ӊpVZ=1LXqftx vMns?dXP+=Zޏɶ3ƏB;mz\ayy,ph1QΆ*\po٧C:VTیEE9KqNrvjG@kjGkQ:T5˹jXӐYV#p"a ӿ{B?1,[.4W4~P谾EM84} tz3XZ<^ -tܰJL3/ Ȕeu1pG+:F}xm烓 X:H5}g&L)f& X=!j_W_sN+_]"<pXB2QeMȏQ0qɀe,9"VA Q`mԶ�GԻq%Ae!Ǵy4fIxP% '͟͠ jRB~0@Җ,Ko5Mk8{Y,M?n} )5 ŃJk'fJZjǒ"b<ڻ͊lqnxV?b=m8}` L:Gq:3qh qAǃ`:Y\#pEȦN]-u0ZS6s8>/gC0[_S npZL|ɍRIlEcz%s߱B!Wژp'oYuAE:]%ЛZF[2/~& @GWp4\ Z.Д*ɮC{ba摜;x 1WR [CުfDa%Jе@GރX\/3gz2nʜ? nc)p{d;-e{CZ[^۸mGu/kuGV VxPiŚP>t9~+7tv3&U�HPXgމ7!t:xsn\6 xWs+k<Oe8+� Nb|@nmB?jθq Xqp39-g>c0t R}ݐS̋7VP9sC9~au=ņ#򟄆Ӭt8i`j%-h\S/z; 'ֽg6(luE1qڐge֖ԢK6c)1%@v[r}暟cB]R(dT6_<4j1=P_Q lµy 3͈v<k:-u<k'I/}O։~ٲN^;FN�en(8m%oNG]MxSf]&O'ۂj.`UAܻ'S=uIkᒃ3f^#ZۋJ\"Nm~Kf lsFݖ锄Ua[f~./fp|=-k vϱ 7{jkHa=ܵiHz־tƴ]rۜeٲ<mV2GL ( Ms!Ե+$u]4xXXH= j 7+?%pI~h^Y΢*�p-gDi @Ͻ5)Wv;q4rJq|E@Ȟ7k࣡$�kv%5>EUL|%Fb=ⲱ`녝 /+@'.5rxй<NK=ѼYfËQ~Oz8C7iY@MmltGLd7{H@3ZƤw'ހ&iNE 9@tySn$1NC$.A$YuX# W(9n] DŽ@cy?oUqimEԐM24s~s�gT+}7ƭ]*\m1YSݷ^⦿jͥyN~�q<K|bc:Wb@x Ș= b [;>"\چ^AHDZ[`_pW;^],IT7ɂ(6:X! PL]m+ٞtّs\]0W<]ԝe�dt{ nFG'YCj+Oh#xO; ԗKWN鏊=|XȲ}ݴ;˄"K1RH^}p4uSaҏxT=DA7o6ѝBF5Q$ i(OPK)!vD) g  ToۜR"_чl3bJW8d<^ÕuGWm O䅦[(/]qӻ02[8s{zO= c&p34||X(,Sc|VjNtt Ξ%HZBh^{pJ ŹFlE[7ǒx:X ^Ee8KIv�B2kq9x0T(1w(E&3i-Wh`3VL<&b8sFl6xl#q-KX&GE,+.OxD"X*|<;SțT^g!J+" &Nv6mÏ ^IJ/<t<^$:ӹ"<WNҥ8֫/1F|6C/<#c<W;ٿ3N>:S]]"X:H2މmJ1N�Һ)r"@)u=@ppTFNɖ=̶dxpa<pH3%- ~Wwed'4u>s%=/*~(\xrʏ=3j|xx2Md/?u4[FaXtV-G'G ^jd8a7`~ DZ(Cn;baQAر@<ʐȑW�gmm ͻ"vE;H܄]>bAiS=ZX:dʎW8lkb]Lj녦;/Xq8 RKvkfmjz'~q$_WK ezz*rEm4y_Nk F*!_aiapyh ߜb\\zzS=hj<t�P)wfk BmGp&mR'l5pw\Kp~CC2`*,`0z-!Ppy>UNbt( \8iO=)j 1_C֚fPh钯N?34$TudA3- qM=APM[ u[/5ݖ4kCڍ|ՠVg9{ EuY@4Mpw5.y]6x: x<CK^ f&FLX<_JdsmᏇ&>i7nEjAhM`ْ;X^utWLM~'xzJb \\1>1*>N~`U3[g5:|%2 t.n5~eu@Sz&rઍTE=}}?HB{ %`{&z�8.L=[b48,;Tv5V?V]ij|4lr#<a<)zp=bCfY=�+u5ذsUf;2|8ZwWfV" ُHN =SBJqg KC% 9֫W_[!jӝ3g~̺HCb@ދVOm2?xY&ZQ`u"gHMT!ElAp\h3r>ݓ]NUw(//\*&C1 p<w7r\fep0$JiO8MH}8E04M2DŽ|�KpVj.a&F38jsY]yze(Z ۍd 9xM9X5^0*ʪ9 @*AM-xmDbi踶jL:kew@ӱ+7}`E#KLj�Q-܇ǃZl`-8_$Ntޭ}q"ur<m=t"x `5ۗNJʴ&'744 G·'s*{E_ ) KǺ@˱Mӣg4gG \krBLygE3(㦃Fزt.(yT8}dOx< ]�8ٖwd\)Ymw+Y K Ɨ: {=f~760&k&xUd#pu: <vWE[w1N(?ٌxnV3s ]l5^*ܓb1gU%jY13su'r<-py#^LE9I +p:Z4 v=_;QJ&;mkW'T r�'dlN=8m<=X:EjK]qRHzZx8}Ee+V豞G\ka7?Dg(g z2HiMGs/<&ۂLPBIS 8e+hl9-{1֊=L;ikBԐEeγG'sE%q.m~\7ڒrm%..MuG pvvd!n AWgAC{6d6~^aUO0O)HC 4,5Y\(cP08[%grԁSCELD CI٤<r*iCgy-I/ԮY }dV5d'[Ixv.9ŌLW^-_߻j^hJK,�*y:8]qg72P.Őd20p:Ig!xZUUezK*3*Z8qМCO۲m/h\&)]bX}OpgyXBkŽ |Ā y ܌fkkG ԸO#$,HK}6]+S%^B{1^:]?Fxuu8K\N."Ҵgtk۬˅g+i цPf JEX3$hy,xNԻU2g:\5K?P~L:32gZSi;Y;; %;U3]B1mcߨ,x(xF2cK:Ci$; f -#GHޖ6ڠ1[F]79KMWf[OԶI`@g7-N~B\Ueå <z0_)frVRC!.Z:CAn{k9<HιBJ&X/UOv]!SeU"S)m>_'?ͬ^mD5>?xZE7Ծ~>n(JNrG GblgGP;z�2S0v]Zm+\1xjQ: mGUkhMyTpO7pv"e #T;\: kFig Ekrx$Q)& -mW-՚Q_/ );Md ~G%L9H逦ڨN.;KV1[Ǿ;RÉv rB0vz!-&oK-Y ٓf _cj P3mֹw>7_tp굕B:Ww7[oϺTH5`^?ἄFc3,- JBgQ#؎KBAsyhO�3 N9ͲX[G^C2fū(3\A`ti-?a8F3Ր? ʜ?,6:I87 7\4s)@ɒgèG4ҋs~F؜JF> _^`Z5TfBz7/{qۜ!?<U[9GT$tմ\rvh{{l;XbNErBZHKp6Ы\}+$f)hn0"wR}VQg3SM[[{?WaVjLxqBZOo@9(DOȥ!T>x9=|XRL>lB| d7[җaW8ݦ3,]y꺓(GwI:.W.z$@h{kQƆYRrZб۳$ ϼ޴/816|tBZs\xSV$1h7*V'-☩gr@␓( #ME2FjCu6SvQOu)"37J:%pVnоrmNmcR`άU^_h?"4u2Ҥ-UH£RIR~JyaL+cZ!pqj}lim+Ñ0*hv �in]J35Nv n͵Nٸ4Pғ?enܫiZEƴIk*ݯanf>X+Ƃg[x�JƯYm+tMgzjkY|lSz9.|p^{Ogk hF$xʥ><)6lM^mMU ,4x FNh7}5ZҌǝ>yQEyD2ұoёoǕh* ThE&ڶb s� ͳ p\]S&Sܵ8u旼tںlFw3"˨aPO&+c64s΀2X7D<O7ѳ9c!KBc3~c&)O_JS7ί2JI)vF\DbYznqB"|ɅrkD"3m*].8tp:gU[A~NUqMxV͚ .7$ (ϰ:\#nGV;g_?G �ϪCW 16+obyǓ+Q(UoUg)_)e`nپ<fXnq'YtALZ/5Bkɭ,7Zm+åyKJ@evwl,pVfY_?ՙr#4K|?!~:ɟK"<,j[y?HW'1aۖY()r[pC|r٨Qct<6=NnC 6Jњw>g?:-2ֺ6s\HmqBzUTPoSe÷Uđ:'�+ۗNHpp?/BDbc΢ <4Nm,}fc%]}zx`<M[֘"OmW2[>/(=w讟odO j2NIW{+m>{m6*.㻀 Jւg/}⿃3dklЂ蘲]dG^Dv?ͥU|/*MFǁljGQ7,JaRH@܏'hcģwgGoLfX7?+YUjnqo./uؠU6K~ޝ Z*+N C[^k.ڿ};^slM@o=tpNc's=r<tPNQ:`w Y=@%uƌdn$^Q7kN6b:ho۸?Ù,bBXid1{);OaCNXab @𕎤{: ^fuE&7Dixo’Uqr"%BMs&9GޫfXg9ǁZZ:BEk.=`Q> u& q:]yK9t4I_h8C[Jg qOţb9&[\~dezo? G61bD<)voIY]8w@ܧE7ԈK:7Эy^tnA9dpvkv<g>R]Ƙ6l㙮l%he˲{sXYVƑxVlt3\۽z\͚:")ԫjÖ$Za<>% %Iyrftwm-NbGƧՊ�'t!Lrݖ r)%/'c8Wz[sYz6+dɴgjn=j<pcbQn M@x Gow}pMd1^7{ƀI{6wi58So)ghv&ۢe&^ui16%[Ja.pq<ٕRM@m`Y5'-?Cƒ-qX&q|`48%=[:/!Ix&8{$#4�XatNf84漜4K fhZY]'ifbW+BtDk:Hƌ1jo=q mz%Fiu>iў7aCk{/<]dpq<hFaKƉl3!9`}h Rw<_<Q"oQ=6шq$Ҙ}((ag=E#`BE|J.AE4h<"!uGx)FdBmś3<hxJM\Sp:M3 זjnDG=jW=iJ֑OYt~O֚ښ1ꦕg7hL]$SR5\ʹO0:^zǃ ZCn˖-MerX=MnjjAcx̲]<Ɲ^0p8g_noq23Ag#߭;ml:KNFKݎ` Ѭ6[^dzg.ewX߾<$Z1yZtMk)pKR͈P.N֧݈ziM+(98n/1 2rS]sI]m{ đ``V B)-l7L '1QY2U/5Hsg#U|ڲMgi7 `z$͛np7;f0I >Zl BJDi 4Xknv>=sNZpboKu9N(ALGZp<\;{6$bs+umwX/ϧSH+;vY=V9GIOg>t(á<{J垧(mu\ -Y5agmSqeGNEĹ)+Q>9䫮^x,aJR76op⍘Mxl mq8댍'`cv8T^yi4 Aw8 .o KYs.aѽi*M< 󡰦FΪ=mW$LH8݇Hr7Βz06E,ۥQ^Ub<Wp|W}{xΌn1}Bݙ1Kyi*c&p)ƃqvدv$|#:5<ێSXƅP`qB: h#4_lCWr=9)#l^޵xOO.K-7NOK�ܽϏgJ?P:2ۨCGXY1kfsrx Z=`vXsXאU57ߖLK9?b_5Vɔ!´OVp!>td<Ѥs)YT*L] O+Ghy6M<Ԃ#β}n‘pe#ru]Ӗ('k> hiMMQ>ׂ=r_^@~!WC�Km${fxVgc pzL~HFpM-p1 }>:|Ipw >?/]u.`D`eHqv|?ww4FGR:`0M)WCQL.�rfAkWM89Gs={@wܵkg}Y[dHyaQqmδi⿗s9:"FYGwԔ֕aZ?푧;"/烏CٖC3d8н1C>:!F(ky'6oƩI5$Ki@#=>9`NP&2xqD�3 q}+Cɟ08و`ns%{t\BPM%y];μ5ӝmFgq 4@w6~%ϕӎ\tsU)Y NSHrѯ\sEۉaE,>t? ,@mU7"8mR\B8ujMX+ػ<�u+Nc[1xx/<[w1`&Kpl/0W 峛xQ|'Itďyh53֠S }.q*88ɗ3k-`vq$^R!QOt{8sLI4yCf3L]>n[Q]8WU$Z/5f8Q?;pH!po,YcCQ>(2@# i=Md89'מzHk z -a7SFq0"馡:`yb3(\ ˯]/[uKgc(.{;ɟPGj;M80bp\E#4M`~=6/x(2ðHZ\U8]Dp8z~gas\^|x!QN|[c[1"{yWV>>񩀈 U֜x쪗\H{[ G-WE.^˲]?iq'Xic:g~X޻b) ޤ;Yjs&Ԟխlt�Ohv /㉭4rPZcڣopfhSB̢W_9 N>s(6mqUkJkTVuٶyO<Aiнͳ_7 =ƒQ \I_jN\$<g:U!vـ_q,g.фGL!Qgw- glE󂑷Dz$wCc)hH>ӝ g͐'u XiƈkH7^P$hewZn4h⯐"Mce8$hRvG! Wq:? LnGJ/j,V i?xdu,dd6bpm-7pcu1r  f%z#σŋuiip>]r!1Pp!E%ЀfzugY|zL.b)H{eY\oPHJHg=PrDO|2Ә Nci6ΫT7r9jX!@Hr4 8x?g{lɭ/T-.pN JDSYtjz&体4s �?>k9twVA$VT ld74'k1WL8+e)kяFب29]~O\& CG#b%doa`* G!㪄8 ͍[N|k5HJ^3_ie' ~& 17Jx mG?}@OfGJu�]-sro k\R~I"SÕ9Y:^xN\| !(.Y8H\=OBArx`[YGg$\W�a;mU q E\|[g@V9=xVMNw{ZYe4+a&ۧ g9Tub%G0.m0"4%/#6_gEcӠJQ2r1?S]!PhZ=$v2ww1\_`HQ>9rL\1Wm+YpT�hj[Ekv(j팭KQ]zlɷyNKk&7m^ZǢiNMhuhcs/4tR E&<>8qȜܳ"2~%:`8QpC{JT-jݱ]uEI+̏= X;Zp2Y[Wś6KI6�9փFoס6bl\ɖӯ֝Ejj]=* m؛m-?2KUc1Zy7"p}8Y_|I;GUaz%{ؔv5Ppd 8KwxqYlc <& & MȰc[l3kV_27NR̼ rhL> B G3udwʳu(TX( $Čues\\R'C] gEj p4?7;/xT>R8k<{)kדsb>y=Q'CYMoy|:& 5Jp8lJāa%CPcx/N#GC/ ivd[.ͪ `p-!\7:&+pF$$`=7W`+sӚxl9 Ĭ kԯ ]zS3.,H 0f{86s6Q߯GѦj ꎍl$$pmQIߔ kWD9r^.Eiq,=&B9Tr_j!c5fK.>\3Vd"|[oTZ2IQ,kMfst6b."lE glvK8I)um p:Yv8bLݨГ*W+RI&$aɂCax|xDpT+_Ԡ௧^Vg';,}plc8$E+Z$L\t5\]om jCx85)ӫeNJvǴӓa}AC` ]7#S{% oq猧[h6g9D^{%ON`%ßNHK#"dRŜr↬aڲݝH=Jڻ4DvF+كH腳FAQ94VI z#Js ٗ&Tν_!#ѩ4U[o &0+-5~3a%�# yΨtŹjO臬VMͶ NzćZ{le+_)|[\ (e>]?@~Df Ts nvRfW3v+IUϣnv`6┿WZ[xp|mQKWُβzj)ݻlY{,Y*U9J &U3^9vBEb(8ek+M52L9śVb8 ϐCqYM_ߎΝޝp`qc[`ݯq9D0 v͈E^ޭVSnIUt+g"w<f䚗tyh8O-zC(mּ@kT~6q^4 UmI>Fa̓Alc4Y i��:0Z2JrEgr{w "1<pFn&࡙CU n>Y4 mτY/F"爃)\~~v\^,c> n> ȕ"=?8|8c[]EZi3w}$r}FtZ A5^/yoD| <DpZ|Cꢒܩ`r ȏ gSZ;4jrjhjQZg:(�BJӶӵo}ݬUz�YoM>Y;x7^,Xx\G_J!9`ǣ#,Q+}õԸtڃȄ-9h+ʼ>>i.B[l% c{q-br�gL7ESD4&lCߨmz1QpnC<REue.( Thl}^St9m#o$Nԑd-/o! RrL=XF6]G&DN�4m7/Ec'tp<8 mWuՉGuJ! ȃgNjlpq83!<�)lK.Ze*y)tvIbM4{fc`z.]Le}?R?0`UF5ֽb38xULsq3'}nB}~?@~ )^S(T}Vrnn:*z# hWibt@1ζgNOe8"2cVy>16=#t �B&y/i:d@0ev3J_9ϯ5}Uxnpf/zx֋D:7|/e\fKź3Ő|8ɇy*k.B+Hl|URʃBS+:o mMt4|2vm{FU\. !oAhDMa>˝0ˮ=n09JU ( I{Y}Z):DsS *~3\.N0RnϜI|-T@YjUOVώHO%4-e Q7jTBl¶pq5uDCI:=9�fϹ0w*ĺ͠=;%kIĿ!>p4 JΦiYd�d0^Əfp/oi ?Ks~ <뺫%B;58ш|4�il]cg5c>hͦ^`T2pb/K=:QɶO/vvpH!3)hޟU'WO4{Lk!^l( g["fW">*XIw*  8{JۉǞS TGJWK\(z!FBxI's m^ g$R.)?B u#ޔs ^硷lezK#ש>F˿v' .+FVZӤF _ƕOpC\)S�lvΛ}&'R'pƻuUgS}Xg:g}h^csAŷ=Ipd(֫GW^KC=;+bc#Glh NIQ|v>|mb$3P'8e8Or說L?`#mu!3# WC В&G+NA$P+ݪ}}7-yrXUST.08flU+#v?^]v%I|E!WCpec . M$#bvUϱf2QuS5#r&WgmtWW e\`w'Mdv}4Hw<ٞxZ 4fRQ5ƍVrȊ&ߒIfNāЦdȘt]\ҹ wG,V s]u\/TIa,fbL~ Ǜtuׇ P|)^͊Q_no{Q‚)<ќON0GxL˓e jQ¥l*W'yʄhZQk+AVyίt,i'dgS3"{dRԒ4n^)sV4i~:88Rp= ,qeDdBǹTQ<,4g/8UXP$ә]`oQ4O⫨u_/wF xׇ9Q?$v<UZL?Nf<pg'UO'+p{:6ȏdeȢ Ogg.8Ջ% <b<kxC؄4K|}:3F9q sgf>6:Sf& 5쬈5sOgǃH91<&IՊ0Q #:=*f*9hUp[ӸVV\dPRz͢#j# >{޺J,NBmb8Im ZvAX6JvD՝qK4v7ON՟y|5 =I jnQOO~Vu+aV[^M|#mS3W &l)pjvVHh{*E \=xOfɓOv#y-K<=ix\\M N\hzG+K_L/_,aU"uw3 (RIyb/475Pӛה%vA5=tJϧ_QU"a#<_6Ɇ,2k;n՘ZfqSOg *4@j{yj,Xo4UݐjTB?fvk[,B29$O|sazF~YEπny#K=$o 7鷋<Wt:9ՈH5 p2s%&zcv8f;Sdž /рxJ4nN;$f7m1# ,tZ4O�O+άkhQVJ?kCթ;\A7V3.wNr%ά]4@3"ir{'72huIsP@W1�Ȋ!5IWI٬;O8w?1)uVB\<Ii:22�'yY$QF(#C*ɠg=|І'ڳ**J-(osT_"r+)\'e%%<53n1hn[|Χ0pSkMWϢ;;XZ'3d'J<;JgE{\!%ni,y<΍jc1zՒayj%NOfr`GD= sRryGRx~c3OωZ-2;2O;#~Ir|ŐUoT,e]Z_F4x?硃rXxTfNRK<qwY%eD,F33ِС:[7gb<!nm9<єZ'emZujXW%Ilv81"=l>+&vQDX8vyᨨ]67K݋*fb)zz h%S_$;LC_t ʸ'S@y#<JbR a_Qk{<=cvYjF3ԩSHձ1tDz>Ut$G ?1d.# 6n*O- 9Yڙ:R) ͺA+(Rȗrٶl}mYiR1/5bR\$WpX7E){SXwâCAG'q4ijd6qlL]53ƭV }PܳF(Aէw\Ͻ1ޒ7Y<XhFd484) T02֦у}⇞E?:`g⍔LE)<lǓ)u VG/CN>-5&z'tug^Y,Bᬬ9Sbs\XAwZpq*Кm揲M XE-=21OL ej-y! hMi֗S7;#q>XfPtl[)wEq;a ξ[ݨ4W^b2s)P(7{tptI£ 6ջ;`g0J2 eF7{2J G"tQg!1G]cGhGJKЈ47tDْæ Be%MSx@cgVbtsb 4˨'m3_rI^$6gws%Y9=D5Ze#w]v钱8G-dJP8^v}R F_εi~cajM8ΚL.a\_ wYc\% MY9zEֵsQ9 H:"z$c\Z9Q$[c8+;kRɵlG}g!EH 8r<g5TTb%Xz\v<l#]X-ȍHPnOC7xO ;xБi}ÍLn?iv: Jvņy)-Nַ z[d߅&EIhL5f ??_?W_:RW^ŷ 4v5>3&'=?5)SCY_>3E1me`I={OFNb&$Ӆ4lh74پ P$Zi*?3F p.@$e^MaɶbO.8bQTR`>RMh y]NN%DDPcmX aؓ)O"Zi߅'3\ N q;6�4Qw!-P'):NѵJ_QdIo؆]<恛Bݪ> ­\_"RGd+Q2_ @"9ۖy6?QQiOkk1nD MXۖ(<gxFBi nM!p q&&w (+[z$PyK|XKH0Y1*͆%ۿ"h8k3{8OB^(D�sL؍7ζ N~1<PRIHe3B$\|.-KH^Dp16w�!ԺdO[!8pzvu%OH)>p)&�cf~$AٚIlY׳aP 8JLmj[㞧~WcLQV*#:;~}10D8;diMjF6B#$AKQ6$�L3;1&J&Y)?-Y`9=#GhUT|, wQp.Nmu!O6-I,$4+*l\)i }p1x*~O]ϱ{vq/\p/nZJS=u93&ϒ9aX<ý`Kjç2 ͜\dyv/Lw / emòӢ5|gͼ#Gs1ޠʬ64gY;Lx+  |I+ʽ!#|A6>MwaPW\K%˔lB&GgKYB0+: #Gr9"xr9h<. qmaIt1;p< NQ%-SNsHRzތvc}p"f3{1c<* /9$|De4(D)Si.C9.+iNU%2u_PNm?rp±uDyM]1y=4�Ȏܧ}1+-_JL_ŞQOEDwf]lZ*}f̄{Yl۵#G=/xgC 2-I CyER)5υMzE *Yn3kZ0rUY@lsJ두[A~vE{o%Z ԧb<6g6(hJVQ oa=<%kgGEShRj+F9찭D˹2Iͤ#Rh iVV^ZuOOLq.X>S_ᰊw"iRq/,f ZIEyb#:Q^lT8m' ,/7rs(3 )rt"lBdixm$2E G8nBpX;eI+R[IRk(B#"Jmlewg1,M}sЀš K@͌N4ONog'7ʙ%ma PK39Ň(zP7ID/m!N9yfIy#b1$`s Δ/ l0L[429 ϝ6IrNFf4p\M)[{GNX@]NLm.sՎgp\Pק*rqS>_;/.4͉b6U?Q O}v4hN ~Ϟ|td8*#Hu}~< KO]Ukg hs{&ZLHЛ(xQ'3mvv?QL6]\ %|ŕ&D ]8kw#/NKcK"ُpI#`o:D<vkٛbm֐K N%l)NxlBI1Qau.zr>h.Д^feM4`T3g)is@sθixda*RgcJBRhj`8�tI2/,4b/<Ux̕жyhsAtw*|Bi7U ~AW#&LdXsæ1*L>'UԑK-p>Y*<GKYR!dP&$|$dqydN<Qmzu Gf fO^g@N9<e?{Pi <50Q}yV!\Gt er>|k<+Ln7QmPEht-إD #&S{ӫi*l9+Qrhg64U[U)f%P:TE(cmja9ϕ&}�$Q�"fjiRN)Z@=> ꫡG@T}oiz !{/M]ޝxmm-` ժW Q!W ;pjIg~nEPJr戣 5S$fWę2I5S$iX>FmW�8 gݱkl8~ҳItzQN8P FTe5*[-7[+�^8ՖTkȱR.ly*^%W ӫ  Coс~tJAE,9$E8$l5väOH FjllcK߾<MOA::=<7 /Izs&.%$-#Gk»{i{fN�(\m - g-U9ҠN2(h()'5NZ90s8hlKuBm,͖eq4{by,ΑSC( u4mf NgA Ȯl $Bs|D$g-nS@'AjHCv+,] xɩ#9F-p<.3![A%N69b-ZiGbzG0 Ԅ4q 1MR5o%;: u~s*ڼ2eٳb)$q۲bn?]?!1!I!߬:4=pT} ;7^|- Ul۲gVuO幚3+�nSwnaL:RjnBt5g{[OF_ܤv<bΑ54G2{CBoS'5 [KF! I6u屋 W K A4eRitX&NRk8 6dٖx;lX)MYDG@SQc{qB<pX)sJ a$N*hHé nUAIKSt�(dlP},OR'PlDs6 c<y2*B\@ 0`Yf=lHnމWe hzjK4YVfGR֊h˦S Szq+*e$n3d*&eNL\Ц3kn6mU{^t8F7g8^C7l'Sƻ9f&%dS-s `"~B/$u<Vz氲rl{qBUҴ2(TkXpK6bgW'RV'ڥ(W;#[d82>GʛZ LPNc{<3]P/YgvY2g Nu9,\mtݩjgTjSmE<qiT'u㌣uK=Z/Anrh3l_^==a&B#s5@s*vMC,M&YBǵ Ǒ̶ O2ۆ<Pgtf,1B0/ٟ `4r_J\=ĝ* {G3Vyqq+*(CxyRo5M"F{&.%/ب%sIφl"+#2Ay{«DsP;U%S ^z툧-.C#Gn"zaiCHx9RY, VjC5cixwʢ*9"O,n|{gcNPN|NtX56-fgZ (v-}3G H;K근ҴG|}fE>+a}B7;SĽe@%Y9fsM2OMTM2zQN8oy;%^n H8[55T"dC9ۡ eE6sё~ &\V^E<\d,d^HOͳI:]_a;pDdI^Ӯ88r|;vgjvut_49Kyn$<QT< D6fܷm&ƽ*ND65 FGBN=_9(y&dXZx;G <HoڑDiuj*)_S-`hTwF0x+K9T{93W%:o}>J; T+rua `H fKXpΜ,Sxzſ[D`-fQ_n!ɍJdV"JMCGCc/vQIwvN-qI["ٰz|:VGKWE;zr'�gj~ޞ_zSͅ F@8%~Ly<#Diarg|,M\I8c%CeʋN;2.1MNA-Zzřpf$үђ( tRuwPr 6Zlm{.͗5.*+c?OҎ|V\EB(;kCgws/an|YZcZuBi0F 44i`BE&K9Y)ٚsAgM5x BIwنĜ NCh}T+\PΫ <)4l9 ӮoۅQq EWRoƋfZ l>cPЖ9$Xs遤!'WW!톴kɦYɓhoqv4@㙂4"r,eӺs%0Զʰ<rG@ 4X)1. V|c?6)Nʩ@9v-XOymL%I=ۀ5p8ߛ]0+'VMYq/Zz YWȔP_̎G4xB jo%qˑ +dXns}LֵF<1mɔ;SXqd7>(uz2(+W}G4-c[&Ew0[,2d): G*wQeP7GfN O8+~b&8RT'H7];V|vg^9m'M�^_ ZgŬ @QJ ֛yxzNnjm7C+wyRAjaVw gT|KQRskm7{wSY^ϧAݳqW*BNԀ+ļlQ%)^6NG$^kʧu}5k/{EVv8E@\NGadO>j+ n\Q(cL׹ٽ@#f LV^"Vf!QD˙%ל' ME 5*ęs'O"6(IStW3 2l3c!hq#VGqfqYˮE{ [-Ɵ[+H`3> Ҟ7JnfQŲyY}EECſ'| P0~𒶉k4G4vLՙ@#:;G\'WKi2L7"#b2YԮ3U̧";ͽM&Ae5HYv`&qVN1ML@TnU0Ez-b rOZ.ګw,!Ý0섣J~4(k֗sd$H8=2KVIXE4 6իN=jc ZJOm2Q"H0}P ?k=wBMhj.3voHjI*xP^˳њLt@!lfܛUKB[mGS6s&NwFޠgd鸳b,3<>3<>CV\)É΂v !-i},l1KNpϓ{K)bm嚗|40y)-c3nl1M$Q$ yǼs?TxL6a>g]Ђ^ueSqm-Ad$5<fe@/kݙY=QnScT#O_*@}L>V |Vh&֍p\;?9Z7k\y7<fM-£b+1E9(tCm2qVN?t%S̮P,dHy�Aҙpܑtp$;՟$1ENXjC: W"6 QqUTɸ#m@Ejg|0wJv_!:"4'o%*Ix =J4vPހfbIu:3pfcFBCgvvx2PL7]IPM!xl3U^o{b^{F%F%[gq<9w!L@l;| Wj06M'/Q4t#XSӞ.=PH-;dȑϊL0۲DtUfܫfZh@uɠ3{E ڙeٛSS- yYNGql0r<HU96C3JWzq0zcuBpn1b?*%vJB¿<Z9]>':s;ڂw4pihkY8 <=ܿ*wLӮj8i`כiѺs/�lLN04Z =sG%l׊amU*hmW<UkfA<ֱPR]Ҏxˉojro'i הS' Ryl,l:uoguOP<kxr Iȇ2vt ӕ瀮9tHO'g#P"^^#Cꇭg0/}ߣ^',B< NƃX]gkK~7s'A\a~˸R`ޡ3{zkqf* Gk ptj'? \H[Tjy:wKjQ8.lv ]IGUЅR]~G Dioޝ}ƓT^E<Fg:.Gg-lH_jHgJѢ)3wI+/+8Djh5 }ܺBϣM$�|G,/2úqCtZ<~'tJ*u1 -tsxlcȁG^avd{)a ^K>njٗw 3WE 7廕jyvM mF<˳B';|G~5Tw<<vű{XX:i'mևȎ:qb$H64n3pjoS?b("iMɲ,:GMß@PNmk J\cxķ,4 !L^-9D5 PC;*=U#S^#fnѸ θ鯆!gb8Q _2ԤDS?<.b4HJ`v4m'-? x/M;`P] :#-fHWүN:XsE(r4`.eQ=o4<0ș[C *N H5桍)g&N@p*Y(wj5)4DJB,@4݅Y*,'MbǓr [8;_tbx⎬o`ZAD)D}?l 7h &uƩ�P<4ɲezue! CѲ9+x[JUL' [6<^Y^KĬ<dlw8iNPCY peܙ+^ûe~>4/ B<ZQ] 3mpG!<�'ֱ6ͭZElyLxʼ'?G|kPL5nlB$7jG<5y3MnAQ^ov)Ƿula 9.F8<rLxH G8Y]SK'Jv/Q`y}f9ґ} 'HhaRM513Αljiu ‚8ܞ$Z0^1,`\˛5X�b͎ WPI'=/(ǽԀА9{3G/3[Zn/O {Q%kgx1g%Ʌ6S<BT¸N̆ËPCbdhdr7ԕVgG #_Vh!;fOnQqBW4npiE3iu gڐ c_JϳXĵUN抑Dÿ<#:9,:Azu^-vyayL<}By4٘7<4?ZkK4e׾,75Jw"LG8ݙv uNǞ\O}6]bs:ɞud͞[ O/)ͪp>ԲYwhG|F,YM̓x d{.P1Bn8ҤGItp~:'j>Zz!{ψ #;P\(kb+ppi7#2CF ,XIĥ3:{Y3']Y+1S(syS`x אiU|o"b?n<rpOJ8 q̇8;*nݢa6\h5<Һ ,<sْZՔ;3TмK_0RS(yi_ 2XI EqTU~y&(JX չ| ayƙU荦�Օ SBSS-e_ye&:l8DyppS9IRj\Xּ;Ue7pLs6m1~cuz%P-LL@>h~<'  ymfht6y|'K u`'7HrѨRS`ߏ.ӳiw[1MgѬ8:Q[a/M/Pbj${3+PsWzcA4tQYτ!9ЌA=n0yxtYs $p !#8sN٠њDAvҊTm) auQ/NްVt/~~%zV"ZQƍ˦G-|PeXEp sg5a,Z.tmykDIEA <C,6M_޺:RJSwk>GKH5)id 7\lST)Yz?tƫ |q,i3y mM"ɏ_m'6*ҦdĚL|gk0\٩N̯'LZ[U672¬ ϖ S<IH])s9E8M Yi)]Ü/t1rr89{2NbtP*,qiedf8Z81t2{&f{m,NiyC}�$TT1vd98H(f<EB&nmyY2*,=Rx5ƥ4 `Rvv~]T;%xDbq$դFMo(@fS^'jc,FY8B58)_3lFhkDv*O2v3|&L)[Nc6Vh{ 7*U~;N2-kvɋ@Һmlp8eq vfás+`(T RAatI+P!A'SNl#FOʆ2�!- ; {5 RpfPsO f5J)>3q<I\<]U>~$/(o 7n9`cjy邮B4Oވ7*#P*kVyԍՓ"KThWWL@#LTўT.]+ٵEʫWCksM%, Pl6yO|t>^4,r Ǫ,Nt,,]+ &۟-σ#B,] Ao lLB&Ҫ?_=67ݿ.QR%sz<L8mvh/[永顖 _Ʌe3g Q D Eڎ=C#Z';}6@3rE=(^}U\`a\]ɵe 4 {Mf;' e_Ϻ>zMx✤ۍY'P_(4Ա*8Z_Ξ)xȥ}juy?ʠ):2JL7sO`ÙkpiRu*ͤK|yg~¤ d<?&?ͻLJi;o$ j/3$;lHɵMlYZLLݤ^!3pX1ׅNO:[7L7_f_sehF\Pl>ceRQ'/7 ,G-5+vy*zP#< sz1QSmv [t[0'3Pqm7]4È&\r“h˪@,>~?6Kļ r<#"M3k|v#v88jgu*N:U,/xt=w^_JsCt݀v&M8FDmFh'7Ouc9qSڹ֚90~y dpLJ?CHp65jӲԂpoqAKҟg"6'ԥPӋ^X{ςa8Hg{0=ٺ::Q7'HaY:3E3FŠ`͞;`?pPK{ͽf){}E9߫.j[gډHni0M0YFȥ|_4-! zA'I3<'+WډZ+Sl5XźYnL`pq9 쨫4p+F̈́}wdcģO[Ѡ7kI'VPL *].J0VU5%%^Ht69|ĥK"*I,\n LU5}g溜6 G|˯ޭn"G{<O҅P=0@p<B_%آ0Լl|3N~R}|obB*QY prO4$ +eh}cuJ-N1rOTru7L6ؽ؀0ULCOW EaZ <-2'ui 28<ZYg9.d-J&8 ZɿfAw9{?h2;DXk@z^*#,"YKxDӐ9yxd0J ϱdhW0NVQx<;3qxҥ^-,1Xɐ_{9-sn/6}Qf$v NDs) ,1l⟫;PRg"o1 \s5Ier~cqr)J.)hCrib4ߋs3‘>3<wڃhBj%ls?6}-8,f+Am6kٝ H'8HSs]ݘk>I|mAeE]Zo=J9⬫LKQze3X(přfi\O_iaڦ|'*m_ 6Vg 4w5,ϰݼ%јz֝Ά6e҈jWx~}ݤj]bnGft+PMA%pu-go]doDx!΀0ےASpnfP948ܔy07@l~D@,Χo_!:ʪʳkO1dH*pWUQ/oeݙv9i#ݮ?J<wF[~̢S)z1q,pjK}*QYj.J!#-gp(]jd?NK6cX>9ţm7q1=&'D)A+ٔH=?;Khbe{ 9ԽxC~@l¬roVf% '^U?̈́ N37(&NL4jP:푤%<\c)ގ(# � ҟwEs\dG}SK 5,5{i͊`ܼä́ߝ$/={t$6Yυ|U{e'*ol;C z{D¬O=֍{x,հ4uVqGaaҲP擂^m!'<P뢼R7!Q !{ZLbE98ߒ7ﷄ3mgor}F7P?S0t^c-v>8(ptӭ4ƒ�W>*ºy�g5g :$^MZD5U#]0H-UɉReck磻Զ:nIgmvL¾mn; =CHVNȋ()kYw'ԏ*H^\lhٗC8aVeNʩx]RR]h0j,wC�ȤFQs i ԕv<4oG2Ԣ(=5SNoBGr4XbERͦӫ;tqpsQkdR_)f݄+>K|I纣WGŧjoIQݧݼ| m+v[&_:k7 9-faWM+J 9崾}q<5QN3vĈ*ԊV2?|Is-3'rV,:5 Ȥ:b/,R3F8,89r (5kPNlէt,̗0׳ g֍!*JC<ΩVJIGtzsqJ+)BV˙f-قĉ`^a4);(-IBJI2qwN՝ZI5<M.`cBqTG|/}v۬g{+ojP;?dS\';�LA)1j(痶:O4̛.]+nWxs66qpav*5<OF'yyZh)iݩhJG)r宴p)e).Ի|}rI4W>_ nGv2s<ffd%ȴ@SAG )ޗ?h0㦂v&l̊IBIm<=l[KPàgieibWO`}v&AL0*-e7Xávieg SaWsso_*z)B=ܧ[G£i9H73[C8nt8SG|<B ˡ%a>|W#f׬+R2_8d; (OU Cug]Y+6 ȓC6e6GgMnxlxf;r[t;3ȥڑ곃&)evsHcÕvZbYnyղh$͵1~2c*vK6b:gU#u 7jcjNG+EV~'ݠg,20J_WIIos2v!HǸ<YVJjwjg-[4ģ4.6< S6AY9MTlK82"h4zr `1Is'rhw4TR?+qŠGYB5Ӭl<.ֆwiW<߾8xI0 S3? ӣ+pPNsKH/oߗ t*|[;X=cV'hH7saJCqyFQ;x7𬨪Fʩw` M<lTpjX:͙FD8Q%AE|J7R~9pg^SDA_ÏufunP˳,vX&,a"܎4صX X6<: e<35wz?ph|j>;$93k`wbDZ5I5߾8{͌N &c s{_Ss1#gpں(e|ѠLvZJhؐ>5Y*~%}9_6F^H'Sö[=&>E&>|EpVqlkit;_7'f']_ԳGAHBv*>C~rWy: 9 h8ڎ\+l]Ru;-K=4x[?(wnEu/Pt,Zqќw�rQжCYtv[6TcQզre=2 c9O]@SCq9&ȢXMVmga <>U'O3J'2pڹ0%v*TϤ3?nc]ZqNL-Žʷ<R}f'6bAYiA "-ǡ(W9DfJ>ҽKa&Dzc r͈XNCqppni!3 |clIs^e KsBv4hf[ε]8 g->IT6i~$ `uJs;+ |‹U#¹lsp<r_N-JCcCנjQ(=�Iy0zr'?'$O^aD컱<tu]b8SjQt*#junXݳ恶a 8CsЊEGT؊S5M.thϿyGܑu~VAW/Ԏf�/kYS� ;:\po= ӕ3'󉶐? %r<^9RݸoJH>6ZBBx@Ǹ)"Dذw6<OQDW pK[~]*.߭}i%!V3}6MEp੝ѡ{Gr<_z[My( qpqH]jL+84: >U�g??Tj 4)WB~΍>HݢF2$V?:egԙ䙦jv5%$̸v<4j ѓ ؽwDNH;QeC 蝾$F|$s} hX;k@u1EڪH"ȨXٟ%2[EW늯xTrӜyZE-dd3pZHkĴ:D5vԘ٫ÁֹNw^o03ԅ;9_!LECbTڸnC<#V#(kCq\cۅ[3-8KG`))JoEж:300F3?[E,9B8$ly]ү"cjxr-}IB'L\y!~&OoRM^y)Ξ#O) &sHqtNϤ`f/HY,o(i7`5W փ99G.g +,| sU0`ncuJȇ/ՙM?p Ǚǚ Fy\f!}e'ryd@S A47W "2|8^QRgN~&_Hd8[ /S@2P)jnj<n=ybhdL=\Idb.ϼ]fEp΄\&U ȶ$Kks.s7i+|<>a y+J%jV%\r^ S6hh㪟̦BflWB^v8)th[6V5R|0+NOK6gN䟳?7HdVїvsvJBꁬ$эeE{ Lj@ӑiPt +Re*AA-nibo'IfKix6a,U S vb**Pn^H"Bi YNj/5=ZpI$eY>koŠ P[^eV#O,HǯfLtyvy.͝7w=NϷfZO[R~N4}"H9=sh!Fʷ9ym]rc4™f<N*%NHNTt ̣~_N+Ft7PHŴ:-(q/d;|㴿GfYҙxߗ6qY)ԓ6"ld瘀9qƞ)^pYa`7] 6B4T(5^ҤSl@v X8I |Wi7l`( =YU5R_**NYd5*jp,:wZiS&>by9j^HyvnHrԋ;ʣ 6YebHk< lZe kR+dsdPpGmrLxV҆,D>g#UknG< ڙ#_6_03o-3$,T̴@T^eϪx`Ԫ"\=8h*#aBSZW٦}gN-$sf+ ^æscsu,-bFvĝVJ -lii~p1>]N G=M!j3^,D<8̾]ŞkUF#s1J룑 I+d| GyyQ)*M[ U7m|'T6GiYP%/ZeH=⺁ؑ,9qv<p<G-ey~)5k]=f4N-būV'Ck=ѳCAE* kz̎$#,6fm) r58~;W-3wJ<g�0|?+Y8ͺcۍ݆Ϸ_Ou&iRDB7XLär+؇K<tDl@ҽsjXikǦ*z[n{W@3MXj{d{׵R#aT`X7ǟ GtHŏ<"@NUĜ@3M{y|BniD-j3$V;-KNZv&=`�E:aq5rV}02Ƈ&-E-Fq8 H` 1UU{37o:TQN=#O:ݤz,mCI|o ijWlh8ЄyCǵP8� 0g%`AMZRԣHb0ϤmJ<9r+gjYt5%[E}_;rBc*ה➪a4jmP_m-*9Nfhi<_}~YQƼ+Z{u6 N |osMnQ#5+ۭνьHʲ@@NNH:}49,X#5#ք8~}6mn<K8 ً0#Gr.x=aHsxic,|wض3v1²t7<H*QzT)^ +v!!uҒpS^yB{g{V6T] %@D8:x̂:[s00Q @OedŤ Evrh*rқ&3{69W;ZE:}PSOPI +ZwNKS<˘KXON˩;ۏNU}#-2]_ߍCڐb Lqx\?$4UI՗!lm-t]<`kn;xY 4vF4-;{ipgYE 9pDҊs(jJ9 Cv]+wmBǍf~?&D̢S$wR i΍ҳAZD;K2bAL%IЎ)mL0ϖ+8,aLN骳oNgߓʈ\jν\^yRN%aXd i. W)~TMS<h_ G#T3H)t*Tf&O>z},$^jJ=p4U/ADm�(A&y #˙lau,Y'HyV+Dk<"j`3Յv/T <!>\,E>lpN֧ ^f%~<Q-+޿*'hؾ̜hdy*8G* C0h5(⩓=mϴ6w?3|}"4KC2SA�GrzI^N·^S5sูa0 r&_g,qO<uKMx#Z*.\݇5(|3ܙ<f&aYbL(am'9 {Z"rrʴ8WZi)ݬ4_usLdN0N5b�8[!4!QBir6TP۹ ~g,,VC/3M9o1&R*uXfN!rb` 8N1SK-/p$XwW'UkS+f<2#3ܞB*P`8e.k`qj~Wm2 8: an*=>gPHN "+;j> ml`ah3nNg$Ti i& ~X 7O j˙BcƒXY\cy2P$ &ۢf& 9ᩩ3ygu'.}{n4I4ynh|Lß8^tkMIr==M#ǦFINҭhomϦ5I;m ]Xiw~DIax|tD)Z (p:N4s4} C}y^3cIo& nNCNr:WU > 8 ҿsO)~94}S~"LK=Bc[( �:b7})T<fȯ]_`ylA!Z5J�fu]7ޜvHʲƕ+R@ ^ioAʳSJ֬Nr HGW6^wN(-�,vY$7:{yL[eEĻB9ڜY$$)< $>$i&XTwP^f]_¡cӤ%?Vv 8nrzcp̄Żw(' gARwL.KIff^l?Gm}u|svTGAS^ibDf1Ng y0YdY8t ~K 5 5\IvCQ+t mMjU3zlv9bggf`d9L3׍iȪTc o-J~W'jtCH!`2K)Ke})fqyw[f_.>9<P.jM90*4;nrI5q�> 4Uus$pxWkS2AEW'F$gl MRQ̯fᔧ%QyPT|T` 9\+,ygdg!г lY|(,a 03ikL sz NqR҃?uٳX7)ZiQPcIQ9c 8ͅzd&0dr !H(>r+c)_ʦ6:NyψsRhH6ip[ajQ'(fގΦ;Mk9Sf{ n4t LgRƙs 2LN�dv,C g_ UE \JC)swA3-4w#r`pL+7Pgl^U N3IH(U|&Ų.pb\7$++PG3ypbVͥ|l-!#Jb]bi.|jnAS]™i3X1W*,.qS-˂#wStrrC'Gϥ2dϯY6c+[(~z.A*jCRwHfN|!<.Մ:c#L9$rT b5s8@{g$�\( A-}vr}5;'}n.mynzI"L&ehSॅ̏Ҵ0IRT>8�pt$_AM(z>*N&hm)N@Ӕ=){?hzg%n1T kXaW9J5H4UUU:΋S#RQ9J3.vuc鮖7Fh }^Qdu#Bk:xY0P)^=7Ul˳ ~$US581USDo/N:ԍT @YᴗqN7<'kɂtU'íM׺iQW(S''Xl>۔Ӏ 7 x(զXW<ң:~zy4T<%@wTc}ZX,TD+rRQ#|{:xӨѕ aJcL=Jb |`%_ di"+S�9e≠$77A}. `UNasYb)B:I}8QéI??_?O_'_ox#/o?_itqçx?1P9{?q=Oo^\rJoۑ+q.4oO\{v8?Wu|ӏ{PŇAodHZs0$5]s=bcFYn<k1R ] U+ABCeb+?-�q) ߗ<�ǂV0d[Q2.k*@ŭZwpݳ\ηn�"^UTsǍK-o-X` O /2u|>ΒTR^ KoObH q2<xahߣ6zDƹVLQ nޯTZ΍ߵaz{0#kN߽d446B`=4:t2py7cXjýRcчj<>CrV:RCFpXĈ!qd.?iG@.f[&]N-3p5(s#+qHO/S}Lrba40zjf 3jP7:܌]ɶB@ɉ->h߯ ـ/c8)`$ǦfGO*z8hz2.}0pC͒?M/>g<J]/1)#+ Ϧa5UTgi Q;{ɬ0B,x;� qiLA%X𕓧 VHi6<U >9x#!=E,@\(2֜k';?v Cɖz O8 /5Ql9>\8-T<O~hUYx5 'iE $ǧ $⬠S&_ Ǚ3޲0㝉+#.mefЊ3 TS~d'j^25M~;)7@)Ƚ&Ƕmm=]ctUByh7^]-W4KӲL8J"Jl yg!6 N;3˓[T{#ը9r{1ȅg/OhL g]>, b/O#\eΑ!ܣ2>`5]"_&mħÝq*�c^gꀆ /L~aq_߹t{�OKhp?Q Jdu:c0ٔIGy>܈ pq% /Fdq<A<3yO8y9ŵ^!FVO4?Y^O ʪe'ыa2tp=q=p*^Y+<Vs%mJf!f뀟+ T#m7xOp_0!7Gܴ(>4<11ə9ˉ&QU3K\"EnmY'ד>$~ȕyߤv閸GM|d@x.Wo2^~^rLz\{I}*@+QcIr!㩈K} VXkk\8%"+*"5ˆ.<-%d`Rڷmg2O;2|LBl  .'"!,!ߗ2F~xxݍ"N O+đg?ɊGs!d k1vư#]O8fؤcXuX1< 6di] -FAY@ gPZo[2`$T0P]!Po 9pĐ= 6b ϝK>a2]ԑ: R<?6'Q1qE $DBbD{=p>8YlQֱY�c>ui0gv 9Yv&pb7B%vTEL=8oL-qA@or-LX0x'š9.Ca<QdiN|ޔH95ÔD�( HZ̸f X<Vg<s I~EᝏŃGiޘ4;*waiJ{G%5KC97~|iK˙{2ROO 3Jƅ_4wtqSToG -.! DqY&UqkE륏xlo4 Bsc�4F$Qf3=+ `!{>qb[_(8 2?:(\Hx ;m}?GPQ6#5+?B[ڃ >kHz2Byόqc ]6$&,I 7P0ߘS'/BfW0?r1 ceXi8* H֓Eu;4WC 1cc 1:g/ ة뚹=N4 V>Do2my<Xp Iϭq7oqȼi==yeA_dEa\C<>}YnGdq '$t?wL!32u56%ՎYO|UEʌ=xaiJ^l{ ~Zh<q[\u?Ϧ.ndWp "@Xqeb|`+q'eĤ~XwTذxƗgȘǚSHHPoXFXYy3a)p yS dUmE8Bt$|SH ၅]U2* ݹ5M#̪=e+<IU&? n*|c Oq[ x̉ Gߞ&X 78zyY[,"3txe?g><WdtJKꃱ/oYJEܒ!H(:#5[GZ,~2_ww}̯EG&Ra[wF`ع 1nL w̓1e)ָuAw , x: 4&H` NzrشGXx 8b =J* [ b|MYH¥tvXg@ffT=M{Y4id'c6%tVWGc Z w;~.A8$WI㼰NNpk1jE$p}QcyhH$rk!$a6"0CKdzj%ty|my!8c6uYY 2,�*MAۮW]%$X4[.!1@WW؋n F$2vAC/~*̋q<=m6b{7!!*N[-Xz1/`g9΅Z-^cއYr2H:FJMrb6>)>"#[ 7%L;3zhE9|<exʳƲ6 1j3Zitnws<I:oRFKxnˆ;Wl,~1G˼xdr:RXv$U1_afupaP$u&3jue{|A *2b`9Y`ȵn:D$Mܱn|Q?q<.j\ry^Xq<ndvV ϰņG;_!JFZЮ]vTԍ3<l�1c<㙤ɍi#NچAe{m!;H>v#|;=lC) {q" )Ǐ\ [5iIFry/1`j%nY%6#M>mH# r톑9#3W--#b!AJx$0Gحj%Df d7,@Qػ=IG884Rq0a":e u{l�\WaL}Q@<?gϻmv-sC[LM\! ㉀DPbw,Ϗ;<+.-zvXkm"j0mgz?I9Bw,TeEw8ؘ?_DVa (q,{exd" ECMI`}x= q0RV7(l�Li{w[ZU'L~9X!A9h2B0953~h.~.n;_{npLr #y'&з=SQhH=Gʓ2:( N>9b+Tk5rFڏ%P;NFC k�gg<_8{$i o�vsY=Bcs-za bymLMk](s`83Ss#NvҍF;F_L)?x<'[Fݭ}jhA5?/B';Ew I? 5"^[_pʺ5RZq'A\$HC q`⢊lQtxR[ꎣIc\O--4�M7 l(6#njGY`4R:hv:).Ǝ`\ Vff }0/\j3 \8qGU-8⤯)[!4h1.#lC/._UM2d*_\"kbXñ�<n!ބ ǀE<LS0)'E`nT)0s+یAh6c=uCg»MŁ)-4pkPW*M׮  #+ؗ e8I,NK>!\O@mcԱ8gU(T(_sy| Vʦ)zU!DtGX܄_Pn7\bw#6@vNlWOLSd`>VH~jolC FL%QO`xP{xӃ=Ԝ5/Aq3̩IFp=LRcޭ.R.^8MT!j1 ,B5Dݕ(:23GiYF{lkc_ZՇM #`P[`ߘ.J9Q*➇Na|0vQ:̱螢M&EOy.mmSԠQ;ĭo^2p0f &Xu5FCeY".DU"L{j+ D8c3&иx lQ \=6ګ%p?2aV^ģ?u>1Yty ^}5S؈jk޿,ӕLT YĚʵT M*h tGyA(DqL߿B,up'k+o!M+#v@E*ip*7Ql6_ 3d_zj1cQ%P K;z’{?L⊊ !.(BȿٹMT` gPlƭ+j<@�c΁@ڬ(myutu~T7:`˫G'^P[ ͐3fH`P4�cf ~}_ܺArm]#Prm/ 85ί`0(t;o= t(aV^I,Lbm8'w40 o JTͦ�22N[UhPAJ@ ϧO[:)6z r&ddVW{K2FcehBK,R)_]8Q&mVW`LcX@>O^dL1s\Tz!WvA6�cTT;cGa! KξDX%U{f+=BG;VaIp�`)Z0KjSSii8�%Jh /4CùJ@a4AyD1Fcbd/;onͶzìJ Ym>`)}pD6jq\�90;L@2H^T, nN+. f"9n$}.@.(^0N|:YVr?.]Z BG^5qf${8g.GJ(\kimNa06(s.KPB^ҪMU4ɤ; $ƨ/`0p\k5v\kw"͔ /l<^_ɱ Te%JH&)@=7\XrAE svC1'N#7K- JP.ۤAhFPyuwXoY.Lhb”ǢV;J>Du>\ ,Z4V ƨaԙwssQu`[P)=GDƈ&t,6˄ݖsQŅw6en b껭5cg|\8B3dģ3r\f=.?r&Nަ.ıC#(FrpQvfUJRG:Dcbf掌X<hP=0uDv7M sb)bBjI `a?l3rTpYxK�р~k!Rm@BpSQ[O7wCo7n Xy Sa6a{m õЭZn=3 öO5s*O8^j"]tr9& `ve s"4J?u$ZVM]Ef*9!4}xU|caoK%zF(=F>]D|K=Bk܎ <UqNћcP;H\7cTF4/Y-˯~f G2LdHD}8zѵ3xWa3:[Fw!Qsfho`JLtQ eJrS~!i|}^S >. >h?H �[][L.JQAus5+…[^hx4m#y�0.tzp$/9cp-Lk[ǎ@UzeaH8\i2cWzR)Q`C+m>uvkv D)(>4'{PBGa$1Z3sO\Lf[�V4rOWy=ӳiaޛ@A)�60^itNkS}q'Z0J8 Zv 냑XW=ddQ屢D}˗mC xFUfy5eWٴLy<ޞAk�4o/(pb1-}ԃPFD�}i%lt{%ӆ&�`u &= K- f5n+KzKT4[@b\ @+0` ٶ 5Kc hB؈$M1G7l#= (O2z$R|(ۭ?`K>eq䣉1�:m6�K`sG^?0Ԫ7U}/ uHV?(6[ t@AO nڃ8: 13*G\o@/4gwWgSONoueݵO.^�>lCTNE]`E10buwvHcЈQ{d[>UOy:!Ŷ7u9x�!I[ W-«/>@l֠F6bX%]C8}J%CJT%աвn0>eVY1\ȀalqH`}Q|.ӗ1 ̎(-AJZ Vq77_pWO a2FEsۙCd=?nho?-FKOUeِX0+$`!gO 0ٟ!'V$N' =ESÿ١"߀9xN) /σczK6\cݸp:ThTkH 7-;eˉ B^l 5J!Z|jMWMYv4aϓY-*"X˦^mʜ~> bbAFy�fNN2 /Hy fkvehAXmD_@Cu@t.I;沙oE%u T&p>}H+.o3FގǘƄχK>S�2oJфf#n #Y=?l k ɺޙ.sZ=-Xin* xV !V"8+Q0 uV>$vĨzR8/gFLKk ?DIWAl4ŠKcD7lC'e \yP!?̞cQ5qb:AIi/Wbg!wZmQ5H]a~8C:hJvuCD] I95xa!C;QwJV8_/8k! r2|!5LWqhNq`Lc䓓RR >_A@>9Kw1O<2Wfv=ڱȲ*h+ЅRV6űq)HB3 JErEH vc8JF NBĘ/ 'nd Ѹ6/XDpʬ*s$\�l# a"~sf!hϚF ~y֦`\ֻ]zk:*?t~8 0c+BhYׄPLv''Fߘ_"{qـ`b7M&>9P Rte枌+g:rV UaU_Nv[ C :lP^Q/=XGz 4�/:QÕcp'= ;ܰ1݌'ijv VK5vg u0ָ'SjDX8(t3gsa% F@+c6m/MX+&Ը2M1Eo!ϩOgZ3!QŬ|=�CuS2˅!QTҽ•k39eo BPfdr hF L`O-(au1k(5 VD\?zI+Zk=C^Q7K?FJӛ)].bq%_�4Ĝij>?Ϩ#LƛoX-]B1Q'̪\1 d\}tSbn6rfqcYӀBlٸ?EI]ͨ*YJC!E:o tŚlS#rJׯU9H^}t �bwW}](`@` ;ec�Yׂ t.]98O@IYl:ӜQeBW̙W )ǴCկnݹ9(:�0ET/G(:6<˫ 9&rgG?]nEȘپ#(""`8&bqLEadPX̫ D:$bx*u"f\=5xP3-)@DsĿF_SlAȴ/-$XE%!7e a Y W�?*bc> `yQN_A51E|zXEњ2V6e/A] H rP.\P~x]\vr*Q7`MS-]Fw2zqaoy1XtrZLÑUw)0V7c6)5۾NT )wۼL #LrfWmب*ZJ`A #%D�-Nx Um3y.,[kS]2Qz8p4;h=W|HDTmY{N%3S|5Fc(;@&~y^Y=}BD0{h� (Ð _3/n暦 ndESkkvtސ&5]55d7_wK>s4қ.:'&ivR (o&d$W 4)~;SPY chDʹ/jX9LSQ[tnløwq@VCk Vcqp#ڳWKN]@ zg@P^88sȓ$� (Fqy+si_dPND B"}|A.tA8d7HoҷxizZfP1.? /P"[pS*T7^3vOn6L1$o_+@{+C.g`J҈qD\#s>Mc])D2Ii. ў5;tWo|,`_]M@}Oa4̃ ]7x JU:8PTuRf|ͅ@[.BÖ~f0Xr7Ln D|Z3>Hxt\P HKj9uը05Ic!_9X?`a 2MDWŦ[D86U>;ӓ3}448\H; H-bc|I<h&#XX�LZ}׏^<T08?@ڃa�kazoK`z[ʅ?pʎ;rŃ$i,#8�Au9w`JnX[|6)5d6ȅS$a�0b5(mf1n(8D*&T`Œ k8�(,+hc/Ƒ&AᏗ]z.i (Ly`iyKVDG!V"nT%:RIɑk9۬cL4>4@j&|X(i~Rc1XKG!'.G bMj3|փ6htWP-ƙŸLT-�\*x7wz\ &h~7TUv0e]*osm4 ?�:j0c *TrewJS4^"+c٦Fg%ߓڡX_[K#ie(1g,bָPU]pb~fs?bxK*ba/$͔#5N$i (8G#)'>4֞UyNVl"0ZbcG.[!|_b=nqZcⴕiwgZ> Z h۴܉ ֆ�v o<B 4o3lN +�1CpMT%U~麼YUP*yto+ hKt3訣I2!~"��T{[#|' =EZ.慤;wd*Dl9&JܼskI~X2AfFlr0$ke!m'WyĜ xW)qG F�D3l2qD[]gQ '*2\`VφP+Ė%<\nM03*N۵D*}oi  fԧmgX5Me *,i2f֖:ho~n?bg>A$t=WE(r)_/0cU?R@vY?br.px .-"IBaMQ<_K _9؆AwqX8ajeF<r8̦  Q1 eƹyNMO )୼5SG<,s$Ҏᱪ6#6e݀ β{b<l8X { -T˔_/)>Suƒ[ ZHvFcQb HWSu99 :[ V-jN3Lx|AoјtvjʑE<rWVN5| KưfX,Px]ӟlFh2"TUt-uL(J,K[KHӤ␦BE4Qjk첂ൖLbT*Q43\" Ѵ;)k"BC@_2 % ޚ6W_ZA̿Ws;xzEqI5*;~fFK-?={IJ=~-,0*QefG9ڧ!_uZYa\kCʺga i&=s4o^H<a1wVYRdQ`moxBNC9F7�cTc(Ήӎ_ӟ/o~?.6+_ aa`"#ָlcJFNX#1 3RӶO(a`,8/;LM8A^|)ۓ cSRYj]w[0a_dBӰDε' zƞM;&Q`ڀLDuz%+& #EpA%91*R>ӵe@WVԀjwG}fŀ�s{^ߜ l & E$(E1nCA?�=D6"K[RL7aܐ:n* !Dx>:G%x°]8#csDˏ9] >Vڭ)?Z@Mdd݊a?skl {tqƘ}~,$B }6v!qo/B@ͮXʔnQ"'iۋdOأ@Y1Rtd.P 9þ̂0coRAZ1>}d3@99#>$ 28b8~Ff;MJٞq1-.2X=�~n{:'8؄[=Ċ5_{F6T~Ki  *ȅg<j?xd&-獰zO1GӖ�r *V% 1@�T^!v5w|D8;[ŀas7h%"+p�4 J+m!X_uiX$ @agƘ ?TI1Q0IQ<x|!+hxEeyX`i^2g@/o TߵS3.*G F4SdP]d0`f~$/\S ' _ң`kP)xD"c PQO !Ff_<E.̆ I1@%e)#LUW>;qBq6@a _E{L�˘~]Fћ=K]+CY 2Ō+ UA}#=K}]]&Ht;1nb>fc>l8"B@\ ]o(Dg)mwc;Z|jOX,f򹓯GxMeQtf铱){Ft8jjɴ}AO?2RZƗL?%v7*�q?\Z 6<9F rWb|L;`(Al ,[$\7#-̓�ȭn 5%iokjI ws? 2OukKT7I* q5r .(؇ @SJ[d  Of*ͮJ&Hzb<*zL2~B``] jNVrirSsK1vEB)XegFfLjUxՕRaM]ï86(7<mg޶M([{J4f{гʼnw!`iSTLTDgLL9^ȋ4snų4i!fًXO1n"6*ؿtHPЊ"ZftRÍx+&@Nͥr6δbq=Mc&&*~1Mvh".BM~Ę,i,j ghD$C8Eߏ1^qHVczJ"Pa1D  I7w RُrCnshVR@|g)voq0q0+rj.HylQkLp3$m6|K.k۶8&`.lEc5`*hqM!}% ^mXɓmn)y% JZGF cS"bS1H[ˤ# q mSyEٿ~ 8\IRKUGL㟦#Ռ zP B;t?_sDp,|vCYa cҍ'w"T fskGv!ye� b[o~f2@_g&@kc\2г b(3n.XUmgFAq&bFCì͘84gM V[eԙ!O.G1K!݁Bk O`!8`;Yc![]&`#lH@4L̀2v6n88,j<byOxdԺ : k9KmQ]ⵢix*1 䋃=bz2/*RLts~DǢ<NFwLyfB ?"芮ep\>CZ0#,!,*"G s ,?B9p/X�I . -D=%XiG4{YQr_Dx-|@&XQ4gE-g; 0Bi " L>̟D IQS+0"`GSʪ\D;VO,[/)-&Eh  w Lf^agW@5Y t2PlZͱ�9qNA㠋9qċL`Iy8s%x)A>ZrAT3ΡmK=:|!tI.rC$7J K%]U5ygi_+ţYr{lI*]Maul\`[�' OK55vpe S͵iR,m<kfj!:3kRi6Ӈ�|<q̔a+p1 LP76:%R`C {3UlY>6 S3^2sB?X@EziD/ާigp{&0ˤK9uLTj.^Ҙ9*x q1³\ְpֆ)(i V;8c3e]"b3܅m[FOf某21wZ4F?a&Fde(Ԁ5̅&_D_b?_>(QjF ؉~süH(j}T+=>dT9M njC!V>;kLY ;iNBj"kʔ~sA>O+ԷTiLlZ U-1BU9wJeb`)- UM $@^'5 %qY/QY\F5fl@f|/M+,nQ/!]"<v2h^^d>|6zh0[52pWpB]\$gpdELh1G9Qi0(Jɶ)W_>P)iȵx0OH0Cb�&fI|e ؋)48^EzpcBT] m7ZԿmuX5Q0Wiz@lsg`J <tmp_h:v 8yQM9@aY8ƳFk# Sna�E+BxG-h<;F^r" ŖBl"\\ҩ00TvIrh\ Y_X2{PՓ>P(ZW8]hD|>AǨJ�E+lJ>0\2ם(TF+FXSY,sm"H+tC*S,"s"z3EEqF& mTaRd;lLԱ 3Ǖ.i`of!ߐb,%D*,a>5!) - X0|Ł{P` f$G MUUpH_(VI';[^I}-aHv]9^a\`|\Đ n: fU ;O j K|JodDlhis)>SB$6Rۨ!O_4"(lZ[^d2&\Hl4ŏq3WheZ20*S'jT\V=2ۡvD%ڑ.=SylM DsXd|K5p>BI: x%\wfG=w{,r 9bN0)Qȉu讚U8[҄۵ {Jмh5mKR_QzJH1^Y- tWwɖ7=QQ6!0ޚn]ܲ5=9tn5ʲI1$~`>=(,ok"(xgL�syDwiM/'B՚2q֥_GlG8tɱ~ yY-6Rcm FN≺t8E5a2lFۘҐu7?UbUWFptC N(.t@Lx@)F'sҥaOP_b"hUNQb[r/)Mi$Bx <*O^eGYv _k>�bW ~`D]5Jmb4`r4~L.'&iXg}fC]0zqSM/x KueO,aR'w̾rЋ:=RoQxL2bŽk Ǭ-=]D7f@0!L."W 1TQd18੽?̺cLDaY!)d.yycZcW2=,)gIlFoRMd N܇ܤVx{A..M;q˂ ?@K)E$Q9cc|KZ<.Jz5gSRg :xfIa^� nGz^Q0R7m�!Fbw9`a,jP(L/-!P8*O/v|or]rn'?'Fm9xw41{1a$2<oEKܤ28"G1Ggy m|g^0>~ḱxK%bfs6B ipxR?)U@J8>(mhr{3gT"o<dF6u̩4 B9h̎5w7;C11s|]y5i%XJXнd Wl\#?v jR!*V@ F)7(ZZ]7 .(q$RaL2�-8�+DSr9SAb!H?JphZ] <"{Z&fRyXrj:m/ju�0CDhR tHRNo֨X8_`\|]!/lR ?p{PcbL[n/}[ϡBi {2plm&$*~"淒!<[[f[85iaO)dRazՈwyk 9c1WP3 &/c4+tG<nVpLg*Rv_4K"N8qE|<nPx *Jn#GEԘ ]H]l"ϏŰ!6sh! yc..&HhńJr*?tL*@<QkKO8U7LW6o!)c~Q3Ó SXHɶe J9{^NPXlReZe8Ηd*”2 TI(' mB;]fl� l軆* 'FsG8y@OnCI;6e~m*s ݦ<w 2lqT0Z ZVt": t̸q]Ka#eD>? %q5ݦ6bclM>D∽|/<QnuIؚ~fq7Y5u>.VTy WFƻoQ`ѓLa�>Ju:@ԑw%Y8S~9 6js~1P=�7!;,oIT6`X`}Y!+<⣧kz#_0~!dȗa؋]8KN_e3JE7NԔ}͆2HIVݤJ؆ wܖ<zf)ljuo]17 @A((T<q?قs! %;Fat{krQܬ#)ŦrjQ)r)6(7U e |Ԯ&(NW +q^yKpaS6 ra)&z<+P$fغ8R}v˛yf9dR$McB*r.+~]p"lڧ &v=SpV8_~[#n׆jv2)==ED2=N@O4i&xCOF1X]i}6nJZB"ӶciFoW+,&OSwoWTk�Y<MQ썋z NC9u PnsѱЉV0Øeyv:w^~SqӭE d9hS1i !o./ZLu"|02N~z%B: l 0PJR0Y~ Kre~d'm7MKB3lu`g164j1Jy5SE!X1(s/)}a4A]Ȕ($Ȟ X6ʠc6O 2nw!1g@xV1|đl QwH I`F[,rՆ@rB.C a4D*0~#t ^++N'<_]hj/ohJ /d>ͿΓ EQLɳ(66܃RX⍚ioRPe=XA?]ȴSI>bP5n,*oXyK"x>J˸Oq/CZff0BV`^d%887Pau#^q;'X3Z<4`o�Yh’ƛ_([ZMJ > q쒰lǫ;I<6 )2Xr͢[ge2"7l`2hk^bS9-YE~}€7'I9zaSCC **В(r%=`{AUo~nqܼ(&cŢ|>l)<TTS6\9~M \%ֵІk>B`_`dy`tCϋ.�w# sb]\E~� R2$ l{np&f(CS[iEM"N܎QSp1Pxy^=ķ 14!)L/Y$C]%+!Z1FњqL "h kqk@ѕW(} k  .WݘC.Jwmnvrv!j3 oC[l{X>3 mB/n>J :ݺp^3ڑe9x:|3\%7VYl>pMqVGSa6m԰$B fvNfDl >diʴ1,#Bl,`f5]4ilت`fm#I$/ K(J՗'l՗ג]{p/,N&j 5L!ATx=Yy^Gs x<@l9Pn7%&X Ї+WZL*Oʕ|0hHn,<}(s">o-x>eA+cUXI5MJ.#5Z#4362h(!6xs:;M9J~ !g24NL);%fLElS q'G>ҕOpԁWGXzVkR{cOJ4[-)9(j{莒?B[T!h�/e+̄mM=V 8mNM*P_?h9J%vfnd=i>ZLˣ<<Ӵ+}Sf{@(K[(M&eQc/gll"s}'Ll Gj zhxmҼ@NvĐ jN6 2LC<s1CF>WH=*<yv9’ZlHHOY耙iKϏ_I �[ƯltȆckGxE N߰iOQo6Ӫ>*?)&QhhLQz\ӕ,?bƟWes)x|9 _2Ο&Z^Ӥ*+eEͶ>ߘ֔EXN�tMaʙ*r3Ѧ,>&ns];̍C9<X]L8޷y+]#@% !%^2.blWQ~t|Fí, ({T/ΪSI }’0"(yKL8Lwi_bvFs=,H6040Qp0!+EnDX`|舸`M{56e1=9 7¦x(o!JI6#2Uo@md,tsΛ u VN< N~oOʁiʢk4[Vhwz3QKr`;=/"F*vkWǙ# o PJpP\58[i#,fH.<Fo$"bK8fCwU^ XyHHPaSBD rd0Vw13*.4hx4*,{힧ɭm32%&jXhq)zz*\5ރæ#@y�șǸ:jNKLP].h+@`VMֲ3(~5w mUNOh1ț,;mRyYEwFlʣ ?Ȼi f/ Lge  @Qi|=a'GZlebFc!.W4Ҋ e:U!*C7,6ȝT2ҳ'ӏ㔔R!A�? Vll5(R5`S9y°XF}ez@Z3Wdf^Pidw0L�u''&犫 6D(HbI%ؠf#`%'u-1%Щ'j T0$T3Su~KDxÇA˂xHft2�W,7d ?J.؃M" r%Jq|Mlä̺!.O㢣BCKZp=&c/^KW v(B!'PV<S fʿ%F]'P*r̯�P]2 ^c:~Xӛ`�Čh+ H#ȒX|xLB {{ '@ᱜeuH104 #9PEc$Rґ=0׏jޑQPnNa愪x7[@1ps0[cyIQ);׶-BI9⛯h{Sg݂F&O72&y:A<ؼ' %CX_Xpbt 8t#jyr+[Qh�yuaraW :hw=8,%RLecP~"ngX ^D1䰯'1qBv%ËR;tƆ+A `D͗Ԓ�jw.Q]Ѱ ߠ;W,$EϹk#aڹڃqd\&\x( ,�)rqU\㫩*87++tᢝm T5 M-u] YK: :+qdƦhR48LB;5�kw;|Hr<1ʻD.7!zgyǀs"?լG=\Aa<)Qkka2C+^,1 KNd]3C|"U&: y l` <5M3]2m!/YWT$jϬlؠdžf5_+ׁ$C;d(X`ϴnVHŮ+_e]yX~,tC6 |~O =J[BhPrQ"8:!ƣkNl+؆y ?b5C=3И/;Īx[F ޅ!64L]:me#k8;L|=$vMH&@ZŜxpqgԥTp]%BfQ: GʜTى^+f{0C"Ŗ { t+#W[9aGW ("uf<2`FMޕSVDKR'"Dnf_GhܥnC[9-yM绚).[IT `R,o[7!~,>Ihx,<r:V}ݪ!wzKP.<\q†<1%ʻ4κ)gIO ,t j~圧Y?]cP9"exZJ�Q%-̡W\?d p�窃*iK~GD**딥p-*z"vy4_}#W`>J\3bhӭ-,k~WUEuqb%mXc'~XL1A8$h=*a7X=~~Ѭ>.Cp9# v&򅪁8٨ 􂪥tC [*&\P\3 ygҾcxY/y0?B>*sfq� .BXF$ 1ݦsbIڊ!/ye A>b(6% d\m T\C j =6-`c0C%j7 Jc(ą4cϬSԻL7uއ4l셱Έ~Ub#؟Fdc`.a_Ik,M8Z@s&Xr 5T\]br5sB FOtk\Q5nTj"r5hyS’8a6H&&029CR .I;. \B@%aWo7M=a΅%5Ak.P~aw^1pdxp-96ViupU3rp,alUL1bV+[05[ ڥ@ΓX$Gg^;�#"TmW^f W1z7`4^4fxCT҉ߡ]0)*vt :.6YT$d'R+fQY0)9*(n0qŽ^~wp4@F8"FtqYG<`b|8nBQWf0w֒bWBWu."╩?Bh&Ҥ;%%d%^0$`c"cg<"LƨCDwnF#=I<3[I } 0),xbY"7BIl1fIhT3dgT'rV2 ˆ|YcDwqT9cm̘fTP?E(VO]sÔ@R2cm G?4̖'RKz� nN/�`gg*iR/܉b !Z>!qN0qr"!4t?O25(l;X@HiڶXALh\qY}-0U~/pY'peTpWT]e&>^Gܓ'R[p˹%ObPzȊ;Y6u<'+9Z!'}J~G93U\Jr5l2rFw?KE){Z< "ȿ q,)1]<y�LɌ;*us>.y2?3/S7]Ea"_ xf0S~Q)Vc!oeP?]߹З쑏GP$s+^RЙ?%rT E^׷jf8oLMX5ssY: nrd2OόP~*jV1~)C;$DbOsqg4Q;FX4D@"YaGCdZ y9>č&FiTBqǦž">^C/o??wsױlǾOTLQhO�QtC9]kYK[@,N5eD�޸R#�hۿɀ!{g%\ʊOOLX. |ζ?P<3{?_.<W mMN�|-]M!4] DZ8eѺڱ+[VaLl &Ġб]| 3-Logb/L�MXilT DO*yS�%}z%ǛG03EH`a1[6շAH?_lZrfv_T@ K`V FoXXkz@wVg4)Jd<ISR2 X˩eW+pFƅiaCOPw& ؝ѕ<~3 n0dҢ`l4SAAŒ{q¸!x`ԒykA\Ln;~1!#>ri>2:D OWIx%~b0ZBQb_nu%s WwNA`OsuI+ 2>"`?vdksn9 ZƸOYsL�ЕLN˥u|++uzWĥ^M`Y|fWXa\;ك6y"To�SӁ헃sm *^/#"_;=D�Ǎ&mst)mmh!ȵtJ :RN+.5qpkL%yWȜ@j's73ɢ''6[FLg?&A 7d#TGCA U70r[JFJeo3RD\y#fp!!ˋ\ h|o52>V6MkGscɒ�h܂c #4V*~5Ss  '-8ʡ(oLY !цXk$+Ү5e8괶CiMt8n)8FPT.2sESWka[EYiԱ,E2NO1# m®DƈqgrM9KOLt,)w<sfq ""{N,&Ʊ\?X阆{@d_ʀHC�mS";e$M byq'3nY"KtlX :Փ/?hcnELA#d8[~q?5$uH0rі`9۱2T"^]s<$M %#¢\D¼9OUZ%:!$|"@eȥR͔2&&l G+CrB*Jq=&Y+aGI $qdBK@Ņi a14udQ.nwUWoh :KF8"p̆E�#мt@0C]c4zQ�1۸ )iMИ:2%-uSˁ$(ȧf9Fsdz6Y8J f˞&4gpe<)$JFrF'PPS^eXJIa9V82Zsc�vZo^|l%?)T `Dad펌ldaew }AY<,YF sv+;ӾeC?I 7ܹ,9e/t,\f{ei_b IJB)7C$2SStgӘ`aO>9ǠXћ-SkGd,(p4 5ޞ{{ S{xaUR/\gs�hCIpR;Syqt{`غý Ӝ]2#}z\:| ,!5. �"vb;HV,Bm0cֈɻ=TNӹ/P(RcT;&3h&i;d#j.ДHT3?+j1X@ɸǥ)\pD/30+AP%۳ *'Kp-hޙi^�Ef=!QKGq+Lt,PT%2+;WVCwj錹u:S1k.7Sܕb̍f|j,PNaxc# ]]S�iD8u d| +Kns!vw^?+CHlI'A$WȢ4)6q/(j9??8rŤ;agൄDGB|ϹZz!NqMpܞЈv;}dP9 c.V8\jKt`pC\c8a/?-8](Zv ƀl{ BBE]UT\"frX6%/ 8V7U"h(9s%ZO\&ex+}-߳&2 O} W  s~�fpaaDkD�(l{ 23P(u]iv2ʅ t<)0uM1Z^gQcVKiA@ϻ*TP^J >S4_wV۝Q2Z$vPB-_rͧ-ػ9a-ViP7R{c= &M Jd\Iaib7& |MUt':&y _M&-2pz(~6p]3՞UT oje^E(Pe,w҈`g5k M,'RX&w<wBi(j!f/0n2z2cϡ�/JP$uaq �l]ʘD Д啁: o)[|:EMdLѠtQmt6e7 &r0½,}]24GyQo% DܛW_ExH6 k p S`fR:|1F")SDܦ^1_^> qk vr5Y`<K[:J26< L(^Ȕ7B{1țMʬ'tlr$&y&~dSaBE!@LioQ`dk%{[D Gj2ekURk]q!F:'Kgx_ B~BFQ7ʸ&6@5?}7*95 ưdLL ?66Z˛.Doɾ&͘KȾec|țUZp5 bGr\`\NWhCn BHo7'.�,/(O~1=?,_(?+f$yKμX5Zajc <9T} O 7j;KjdXsCx"IyGӕk\<0f�z(r'}+hKatTxC^7ڛ*|:\, }A%&Da´ ,@Wu^R y,%{XMӋ޹0=/0 ED$cu~[`RdpH}یC"E,'gV0}Nhj:RR ѩ\IW͌ (ev8PVS,Mcd|JL&4k|?f/2g>ȣͿl(E.6Sy,vo)PFM:tCgcAsI2C vW|G HM0'@߮s?`?B|mEI8$VT), xi g3ΓmȼTWzmB bs1PJyű�`!ZN7D5% !b"3-&ޡe4FP)3]B/b0heN2]< +bQšy >AB�cO�y%JdGōUi-{K^q8bnWcC$)9cH('lȲE^s|\pM=K-qx\ V4D8VRG/$Dᑽdf%/᲍aNQEbG]coS`+0n~9D#mC Q_8ny+\NӻQh=DK aIkOԽz% yǃܨzx:en`rEЊ%G%X Qڥ?hW̐R<iY8H+$ərExN,󡉁xf39Wy>?k_g<ߟ"0dll/+ehVTIO33`yKfU F*CK̽'x#!%E⯆oRkƸ&Rũ6+g U`Uci7Γ>01< b[}*r*PW/itfM5Ev`H#i&6DxDMn;T?K1"B{Ѷ}�#2q%iB3cS*M95 Yދ`Qq1³8QHRb_!K@593rY,QZN$ .v#G1 1V_G߹qNClm,ӷ[4@b$E KŸZ%kz'fPC$j&FRPD :8*`A܆n%\g,XjZ, t-i@C.Ga$Ӭí;k#b SY?9\ڬ/xǝ% eWk$`&{]Fѕk%ҟ*$9M- VkN.%ES*>,956hN_Bh?2-\ RkR";gKhn+UcB1Ygz"iaYbgpc;ĿقP>J̭awK+`r ܇~P\4ۤr &k>o$ULO{]p[G7aVo '|jPKMr ۃ۶`%p*$d|#%8ȵC !pb%e+?=~qdr#Av .IƯ}26g^Tm`dHadIFdEߍ`G7u*L7;*﹤q%#ۚb"ZjI`M \ل5%!<+[ߦ̩tjo3km6cg@)m:G$쟌);&\xvij3u b\Tq,ATG /Jdt#mTфU)�DɊIR23pbƿↆHWZ f¤BԙM}推( 7#!Z?s83#~,W-5NapL\AW"S< kDK jDz<GvT~j q\mwҩ̀f9V7JHr2+}`#j>.0' 1~?fLC;-$Rx˵p[ eN(u]ݮy#7)u?T_ͶLKqq<%|礍S:_8/T*bA맼Nٲ fCFg g\l `X<A"wN��rj[%fbٴ^B =l?;G4%NĄ6i"{XA?3V4'9=rN8h!8LZF</Ux=!l6/ 7͓Io|?n2X߸1/#'`uy %YMCE:S#pz"h42&̡!+Ә6Eecՠw2d,%WRǀzF+]z4-vEw}ȫO @4b6%0S r2@�= إfo:#d7OlѮr;˔D_WY$%'wyshҊt,1)) �3CK ^l~ d OL~bJ !{18k:hD<nUPUВvSBWͤ7^=(9&NU K=:2fׇ|M [H`KIΔKؠ̩clorvx|loF9Ku$0G_7MKCeA|]lZ&(K6eږa,Gˊ5tiDg˞&gewׁ>,e]yU{q_|~0'9(e*%]m6.aIqfoea jʎYP*WɠA\e)S,,$:dt'=i|4fY|dX"&#G>33 0q]+LF z>yqbV'Qh"wQs9Orav%wa?PO~Zw,U 31S!t5h%~q. _H)D暅Ɠoj$-w+uƧKm'Yrd1$?CXOJ785QV3 G+(WVBq4\>褉3n8%ߒZ@14JOWTӄa q-۽_$vv$\"8rzѵ!bFۛ𗡒1c@gA�6bf s`.ɡ>�&s<\OcsS?T'ܯ28܃҅};Wt\2Bn^HQ?+BrFP0I_R `B_BTP &!Hh49M :.n2 0X%?6]Ǚ+U1N5+]7<cFȦȩU@x8i͆Yvd>ȗSG�ߙW;e>R_`u`*FNLAb(3FS2bŒr=}G; �0tS^n9hHKpیPˊz[Ѥlz6uCXʁޥ$NjROv9 XOLpX6}f!jQ־䴭Ӗ'HB3*bqK1�[~6C,;5F_Jf۔ZC#]i&T/.mdB 9L4Pg#X`:u${@h[.$XTP}83GP&5�) 4,H_cY30$q ,(yqp3g<~mA}Y(^v]˦kpwA-*| T"c%*TcGH%dZ-h^΅q]҆==-~Rdװ s a`/TlvY/ 86h @ S|q >0p[f&c5bqjT06yJ#Eht˃A ML[%#%88 _儆=d<�Qb;%-ȀcņC-b9d,qdFֵ$gF,Ʋ=C.k:M#wd{-Z(: }:DiG4@V !a<@MMan 9_HW'umeFd፜'6?7đEO9єb-TbX2_O˵ W1&>+sW͉?K`|� ASFP3iiQʈqSMV�(Շu LmkF&BI_| ᣊiA�*="|2r`TyKJV5$^蘠8罉XK3vZbIE7eF}j"@hOkdacҊpV fC" Ox�IɖZW$a `S?Vlbш 8Ũ5F(y'ěbG]\UpM$GF/oR"`zFT;$mOyA;^؛ʻ~څy9Ikgݵ`3'm!W :Fwi,UMS3سdY`"cIj Uь1{׵.|+H0ӑEАEhCPׯ|bXHo5#LjxCgZPf@Z9SY滯 jh6v&rmV{Dӑbxinz杝}88 <^p>ղDzc lsUf qM 5d;ίK'.HW$L6(by9h^V=Ev} z�蝦25!3@,&l2dK֨4̊{t$QR`f9INw)fyʐ?EU<v3 tŶ6QC{j̑›O眗)R]z0Ԓ$d>P6)뿲5[ܚ#^i*Y 2ឳl \i3カD E?<Wн1+O .f-4|и's:ܦ1qV+C*/n:M"mvSrmOw X%wSv]$CV|m|[S8(Z^j֫wiZaK>~;A :$qPj=U}Uёe˄1m.4 %U ל|dAF2nm,^y5X|qJtYD�.Bh-PXdxG =ӌZW_w- j##B2 'pu)l2F-K92Ьؔ9vKeb8Ey;@B%jz<㟜#$Ý z͜ .d K5[Iϼ^ "5#pX=?3^K =3W'$q KiwdMNl`Jv4AA#ϭta ̸ZQx(@G?>ic Z^i*-}cݞZfX 8[Hu$"֎~i,̑js>/3Z|5d\bvFc=G8IIX5Fjx p0G<2 qҠizVFMa NA{BumC]կy6ERi\&ᬗe_l$KZ^(!_+ p~Nckq^ކN>5_fh w2<&v;gEHcc)uXWK7C;epěaIA{ jͻ<f_j;՜`KpPAhËFt3 v/MeQnS`,c*_Mg&A5M%\oq_ ^bO\k;]7o'I@;W^0uV#K6Y`@Fˁ_]||O&Y($MO̦_oyߤs? l.x^BhBEq WDDB(|^<k-_L XW'l&%"J86IxNY-7�?{7hW#3}AW3<#�I(6-Rx* �#=)2%yn\.RY4|m?ܚkfzHg8(7 ,lzxj.W@#p$$Cm/bI(βԓ}6R Qs`a8L'N6vd ?` _kh$s(i47m3äk͍19D>{5p@%E.r' pÉ Vpq [ iL+!޳6mu5}b;Xtk$tuyON)xN]T 0Ov/UnMMrvdP)2q0ya�I1UbxQeڐ-=+"Vgi_KJQ6<z"aˇD%!k5T9-zxg dƆ1]^c2a)oͶ%1u>Sm+eL5™,()n+%m DXx7ska檌ݛw^QP]5|4\ q h=7n|}(mKG#NBOބh.Mw%p<7‡ [ y?\&N*W{ٮz1i>  @jC6l۳qQXo^]yd*Vj:H_Hܫǁ%Nb>-teܧ�K]{ $D~Ȝ^5Jm9Cy=130s ~{{:{먽mjcށJ=wTfM{l7ߓ 5YnCL[{.N\�X,e= H\@r>*#oRW2rd�t4qmɗl "Ok&' TP!RTG.*M K6Ou}eNqTt=,'tлo(3ۚqi0:k{ux/O܏9FՉ@{t#ЩO}5\!#E y/݂1.'ɓ:50&kQU 4k樾f%lg/xWͰhQ(޻ɬ >zip>)jEFSCHj:=wFwH.9&,_TNcgcxRs�VأY֒؞c$Ts?vG?ϱ*o䟭|Qdžbq;b^r,hk9L%�ՈDCPq~�1Zb8FXv96eKm#9ʅ9V2rή.2mݪoЬwⱔC^WLJ =O},{l9c\= j䮧ə>4ʱU_+u4o+^kuC1$!S nK!M؆g:Xi%uHx*XԜy~z�9 (5oṁ<}IiȔP~|%.<&\Dm_P `S/|0luB>}R醙+qYf~M(m F(;q 19"gpw8O;"qc{ɬ{ڬ6x/7wK[Ժ%W* D"rl<=8ƭ\Ђ˾ e4%k}nӢ:s6Ŏ }Y<1R/~>%D*}EV۲"v<g%Bϋ"Cn"%_l)k9^C5p>0_q]㴟>*>c) g қ\&CnuEyɗi!߮,ᖣ'}ޣ/H'7 y%GƬi f5+'dU%K${5PY=:Ze3؝~D Пc?^q7F6ʒB%ީCW:w@?N=e6}Ip R'aw�A}SD"<=fZ2ݲ1-뫪Xa`G< ҚL0Bٶϥ0f jjؠZݯ*Ԅ[#rwP�C[5 Yn7p2uPlDp~gܑϗ"2>FOrZM dڔDi7m!jcWQ;ښ< ^IU`5oKZ>noq߶fy]6A\Ӿ'2 Īo.DLNKs\6e%)g#~Ɍb)ZI":׉7�3±"bK|MO *J{ % 7;6'>Gz6ҿvh-q8cχLcr|-79?<j ?j=%ȷ4WG0'+ {DV^?_ipXg`a[KE>z/d\]aDEe` s9~'ף<yhD}ޗ&re}7Y15E\ Yϒ۷l ?~іd/? ^U0#3-mPW-AO1!mߺ�g_Y9\{5o2UeOމR-ۿ??WyꟻQ,%.wv^9Dg ~>2vHY+;md{V 7zpt-?Kz2pyCP)OT?7hn9O/lko r:z@ ڂ~$r5m (3Q-(M=g|BJ0Kԯ:ӵ}9wt[ ˼?Q"PL`lw}k։r5w c\/~6H2 N3ODw\hr`?yԠVjght}m,g^Luȯ=ߨKNϝ&r=eh>T<Cp~S+9eKxU7o Ͻ 1KWMP4}9w�ZX ` lk)KO Fu!K2GY5GËx4dX]>H f87iKNݶWO<8y%daZNt> 9^}bƒ|7PӯXwc { {ƘG3Rմig�B^ M}0 iR;H_2lg6~d!=@nzwWLw^Fy:x}O@%&ʧ̕keeX/\ZP*ڭ IT o1QK$)m,Zޜ3땱/X^F@ϻ4\ [2ퟵ3vM;=T P/F:W�Xkh{ g*՟٘{  Rˊ,PtQ=3F1NiaLA.L{tY~ " ]>VNN[e$I{x`=&(.R7N5ncuYwJiO"&Su^@Ϸhbw潤7cHn%(("þC ヲ�.K[ (lv{RNJtzk(mKQWs7>O2 zzC DJ!:ovId{RsH&_6~xgm-AUߝ k+AS2S*g$ij&``̽2<dS-0RP b=l. >!i}Q0izJ+@W7|s�+#cC>אsw2xIK^пܾ939>=|[1|j9w 1]! u3_@zƾL{g]GF섁Z@G:kv(RU?H:jzC)y%w6Czͺ1c\cvnwsqo^pV稹tV@(VG^8`\tRH'2YYe BQb+2pN#z^d~lyƕxAAQ6 9(K^hF$h墰8^%!?pט'XeI_]<R($'zz㐕?]4lq.piRcX4 \|꾵/#9֭wtQ=%W. a!1Ή<Y)9k~7_yᵧFGv smjس$c+@YI|R908se<om*Y9`2 ;l. svr'f.6iBJ^ (.\(@CV˾DzXH+bؕljrQ 1Q֤^,Grx@�,V>\6QB2[(6lS:2n2 ]hH1jۓhX%P` n7~( *hP(xNQ0Fg2f構R<NJzA$I]TjWTո(KƈརH Xӹ*nY%۵~QyD=3 +u&F^ڟp9 Oړ}tisHSMcI\3Uc}}rYy9Ois[!{x4!M?u;} 暿 \]=aLEx}!xk,^iOA1 o%:rOyS׌>5n9ºOҮ댶 \b'N_y[ <YepYDYJUHؒ)J<7οr\$ 9+?TJ<11îNv#|OXF6okm?$$ _7.N8ާoy̟+ħe= _B>4T uɭ3#͋eByjԛyt3&Ħ8E$ƃrpU#\踙YG )(? R&3YQ>o/ѓksr2l4(;쒾ٶlEb45͸.dٰ2n5i; ^;A .̮eV´z֪wwY@+.dGZGWls1( #\,LKRIMHml](bKLfǮ (RrAϏNǁΤQ zZ#o?f`fE.Yҙ ,ro^<Zl;6O=K�7ff*|O{z:iM+$2xO1aMH>>SvCAߓ Y*ߡ%MZ۫+PО$KbDGUʱ$`+!cu;<x~Mn:/|ֹ>>Ve6 N2sY1D,2uls<KN 4:?*,�8X}EVTbh'*z+8s1>/"(\D\j={AAdh媔8/$mi!h:2d bTrA {|2I/IW&pH⇓)J͒s'�ƅ$2JtG9鲼ݎGєxWo꿶Bu΄b2fK4}C&0۹mC7 _c*U2?v)#T(G_11KWf퇊~&'zz^L,/8ވxf&ـr{N>w=l"[f{Qr\ֈlq9ucdN18j !ǢpKs{ѠMeN7n~drYu^tg[,Qx. S=mJgZfX6ʱ?keo[ԣ~y^B݋yt^צnμg2ٍI{nO>x8U&3D_qKM+S&eT~2ޓsQ"sTO@.!HI/=o"i.kOfQMI`p_kڈ4a$Mѣф5Mt,cs4Hz똜fBa zrQR3YL+QGg=e02g>|LA\'Q4xUHG~:8Y4U+D4~<dAy^S.T\,IK&3?ʺ0�kZɥHPc352mZ,&BQCp +dJ_?j}GΩJx@Jk rz*HT@ܵP:Eښ*sgb\Ǜ9c>*͖{2FvT;jeS3x�6Lg)a/~!"_Jć9O+v.mXXBNm(cv3UKz947XdgVbu\J@7̂S[8c[^!*ĺ_zW`K53#ۓ[% *�ø7 $#"jSK .[o ";w](gް?ݠO<e1g-)bA$񪍝s88z >Ii[wV( <|w_o\;ԡ3ek |~y)ϫL� v4YswM/rhQSˆwݡطޔ R L]%eLhR~ [pMㅛ?Sb7NGYyvoW~"yWX}:jr<il, Qv !VlW!D'+恽8q~n Øij́Xٺ I-C;;{I 8 %<gʼjloTH6c3Rv9. 4NbMXpCu,Hޖ*lh?.~W8p{B12Ը k"\,]%Ĵ ͚UJQ1WE8,tzRW͒MynG1\EŴ-mI}WzLIN=#\�?]_ɺ* >R&* ik>3 Bj&0_dgTE]cʽ)(_ؖsO-dW"U1]5Fb@;r7un?uW1AyHd+Ch7>Iw܊(E`?YZp~~D̫A� t zz(idit,5{R�dw5w oO6H?\OZwOx;4f0;,بcMHUIhT�ºڱ?x @)rҼ_EwJx 棒Z<[dyJBKP`SK3\M 2?`[m f,KcGѰ..D،HΡ + ?iylu*�ǰW&IAї,HN_~Ҏ]ٖcDX4^O RA&8 VRM<Qn,LozC?͌Gz�V甶yno= fc%ᰞ5.ql+zߑSv?!5eP`29ν"I^#QTw6r u9Mйj§䛔eX'9R#F$B{TO3lm2#gᲐ*.%tQ؞6"Vd t625~P6W#r4rf9\{.([Rc&Ѷ{$~k5-E_3Vz&eVfyKzPHu�'HzW^o b'mj7ߺk4 `"Κ�z- ״9i$ gwVJ뭘=39O.S&\KGm|~=& Hv"/$ͯ,To_ضyݞ%ɠ"D sv[yRJsRdJcq$D8j&8A_{sPxN^]+OՆe Tw Wbt~_(GL/Iw4%`޷)d0ɋ@\Țg.iݱ_&~z~�@【�Ҹb }s6S`ƓSpH{3HLzoB MNlI9*9a �b\ՖޤGHW ^Oυ3n~].ˣzN@ I)*+H-*t\ф9 -֑r40CqVnS*F6/K^ڍ"}b|Wok$flKJ1uːa'�o*+BU}hvmamQ)c]'Zp>?ZH{L}yƊ{ZEޭU,+z&;8OD๋m@tJpZ(eWjla^o~^j{R&K4׷c(LJPr4~>e"ll0 fmrwY:ٺX)x?)}${i^[fs@C�5=cj_R-i]j<+VNeۤo$(g&?i>KCF5%0i\-I`f7W{Eb4d7{{E5&d˘0ލL%/g빦X(@ϏGm+W0sݰ&b{q?~Jd"bW$DvޣBwp;osߓyGž3sx^~yؒ뭳,%Q �,$p~5G=FԈJPkj<HTsmD8E#0Fk !|l{]Cs}jhI~ O%%edRdӓ 35Tޫ*uq<y�fJ ke`[ F \sr__q rWȔQ>9x3c8u�βgObl%V}$Ao^57g|„6̸jS9j!AOS;- ΟWu4Ѩy(,f *%Ur^tLQ`Tݽ0/M\X]Sɖq㢘 p`2r s=#&^XןTR5d!U7y[ YFrՙ7WNɻV|7RWgP{ImjQ̜{ oO V -룒"M呴q B24ԱIFTsy,3֪y 6|xс Cj{<V5b>1PCv'Xe6-Lz\Xq2{uѴ9 *ΧLX,F6("{ETa΄WrpֱuB=uټj';yIx*-R{o,2|Z|H7_[H`ZM-62ÕRwD(gE,J _"dJ{-@J)3)c`/FVQ7̇p/NYu`x2hS:?9FL&ȞFJ?Pn9>o8.!H~cKԜ qyk,dԥ /S;?~4@yy33|�)L\tYI4(ƋM6yK KmQSV]A 8e-̱4}u" ,,wYapN飝.5􅵋dezb`^:wgBD RnIˠsqy ̿Dbَy@RG&D|.;IQPۢ#U].<=x E%V c D%~M^2{٣LiUs9"Kݛ53~"" - )'Es.4.6OddXª-{V3jqfW;)R| )}ԉ|u'oy"0xؠ x.3*Lq4\c:"k_Kr4n�cVl$C,:"pOJuw>%p1ł{˺1a3SEx<2=DE<]]6+oFmcHhZբ}.oaL,cc@,V1_KGHZ: R%+m~YeOVLYg'dʪ޲1g[?ҍN#:U,cꙏ4[f*L8 ;D Zҡ'+ޠ%YSFN*܂Wł$Uh JK\ {/豍̧QxrEV"|;8am7xq%46 _ŭ>% b )ξsRn};s8_tDr^|7,mk!q1l JΦoaXˑgL~W32ʔDs^y~=l O-Qw#j9+Bz4  _F\\\>qEkMc^9aSy1f%F ]kl0=T|$X>h.?uflZj$tuQIOyǂ8>2>oʚ*k875"ݝQKp rAvVGb\щ5*-/r+h\4HTI ln,Դd%]3b ޟ)$*+`ΐKp6 џS{2'%pe~jwRڢc(W/Rwl+xX)wtru=lWo^-yꠛ++-cqT*2Sҷug>f~"lѕEDj]<{G?і�Z NVZ)|̛S=l؋ ),(;ݼf['Ia&(_ (_ ˞Jgro�0k2}#;)<hV;,<Tpm9VL3Y\ĵ:5>7/30ZRϯĢs>34}h</9OsP;$m ]s3D,dT5 (x eBs,m@mG-M#g7٧sҀ>EѦ׈ x! hTh\\<^s;w㪜/t)i\: ZBH; B/ 1c�ߥJGi&Ap]uT"`!@)a+K'.R c#~& e Dͅvꯟc PXN"v*ߴS{[4stlL_U2yήqt9?�tMԋ~Q/Vǿv9\ ofb$+6ui֔zu@bkɘkZi-#uz|Jxl�S6Ko`5+AhWCNNu$z%mq)MSH O oDQٔa.B07ݲ6q:@tsŇ0 RG _y Tue70nu HVy2w~,mB1Y#ozm�X:G |oy^IU J'8(gYd FO&(ywL_Z]]XX,!k)_Y-~[t\\IK)?ُ39!ay�c]LQT3 5$H~Lv 䤾1z0ޣ+!,\];~`d@L$lOmy!%O6=fG`)nßoi H>]IP$LT܁H⽺F&H+țG4{(2LY,uK*v^;AM)׈u ϫ.;޹�]wHqyrGIrjt\rzV(ڊ}Ec_cjP^B!*QXg٬tU$QrL�tCd'8%jӧkkZfMS6j΋bimյK,-!FHKf3 (C{ܪZI!d*a:3kFVX:OݴQrD9Be*-Gz8QQ+<<R/Lk嫗UP>Q$zJE, fMMA<j 'IԶ+n( +3|:x8ZG 1L/4p*ȥ]K8LڶjYg^& j2 CQ%)oj<$LU`:1S/9 wL1T] >$Z6sY!?ƹ뒝gOt *&ފkh lz4H(r!:uN};F1n\3R :sb %1_K!ΐ%m|":аWS}ϞQ0z�9A%y㙩Ik"X+pX D8{&$F‚gzUg'А<V'|{m ȳ"jIyI;qzFȍ/`bG k^1(;Q` c OZ[%Y!8]@~?VwFPjE|;;P-e/'IL]VJSCci pa]?Sֆ+ԍ4^zϽb J+cŐ*/\W듏(N6]%G7t*hݞ{*) âf <*-kml w;J{Jh{F5䉎�)~ U@!Ael) ۙ(LQktE.?WJGaO]f: J>U#'nȯ4[b:"8*߃%<]^ٗ8LY5|}YcsH1ֲv;s`uoza)5=;& iN畒lkAZ)غBjD̊Q"C^3nvGy2bȐc <aw8| 0|PL!J*(G 3/qqvR2%ϼh󒣼o[)ș (/eK8͓.)9 X1=R|I͠XSV^ZN g|DzVwwҵW|GE{l "VCvJd=o{{ _%٭'3+Rb.&񟵠l).ZvdWRZD<1_?MXkͯKV K_ob^tsh?_DL6OT>o V)bjտ6cB];$EZ=u*[ ]Hl/Zk'\�1Þ_՞zu.?NQA< NA9J(" mt_PI9c+IcكU?Gr֤3P\cyV85ݹ\D[%(h&w=uT3�ɚڻmk[Z(nV #c#͎V/߸ }=w@ozv({n9>w` h7.Ym؊okLmV2沍Vteo*0 !S8Yaad.|2H;tLp|f~[3=KwKm:&XKL/ '8pwd$n@E:J(u�#X~p/XM'koL3CMi:k>_/]} }<u߫2?7ߩ:|觛Ou'[7̠:bPJb,:'PJ=L٤ߨ\222sVl1)to9^AsS3\97Z!Lݼ̤V` 9H<v�ߣ3_Zu'DpU`חޣ`M ٺը:7^3k9ޭ? J| "6dg$Y3،=Ên@, —쎙؆:^9㢹fQ_4S 7؏oL/wv 5ۧ-u@16|sLŁ)Yo'SH 0ّ~@z<ѲpGu"ܪBC+G|`y_;cC_I4+3J˧ܞuИ1GrEH'޹"ּS-s}JFuVݞʰ_K=�\ _1t-rq?ѶRz%aG9%i럄?q]'N'|:F}uhPl Q_X� YD&=Z {>^Qpt|lLui{peaܨ\^?XD5-gI \z#/PW+qoメ*dC`-GLiw_w}92~0.;#�<47zs(O0֜dY0ٌ7 #i4~+0vW%lAl-W3^/;̻,A| vRQW2IKR? I@~~"Rg;&+r&eeѪmMӓiRϤ,$B<t(ԡg_ ?rq՛՗95̧[^Hp23au_0_o?ۿ/ykx)5\pN`;% ҽ_M\!u|cdž>R9:|zxtoWP8xstd],(82֒;b-V>ݓ>>k-Ҏ-ouw\?~5qpHJ 1rMǿW3:sqmבZ`ԇ Wf+зc?CHWhN�O=}ȑN{ͰRY~Okר ȶֆk>l7?k=T$c-f )Ȟ^]\ ͋^6XzVDr/}޸%8{+sg76^pL|<Zz[t\~ђ0%b7[x3YM7,K/̒BFXK qN{8w%C/C-[ˤESHg)[;́(\Y&[ 0o>Z}%I^ `MYȃO.LWUM^Z5]Frv/!}+wyOJE!*p*97!kOQ|dh`mSw9FJrVP'V+|~/ Ny{*\}�{=Ĝ}1]~8Ga|gGrG^v},7Xz4�9ց˷OBsw%똨uV7N!Z 52cY,?_4~e,WYlcH\_ KH4/~VX'iLLk&qXx ^#LWs[rDp_,^b'3^ -Ɲvw 5֭B՚<'{pTy2̼{{OuV3א㙠�v0ɤaeWoɴY{y3e`\_Yƺ1ng>7؍K)W⠫Jic.C `D\jAT9_έ;!wY*MEpEWƊr_J1>46Rf>9r2Y&\;f7dwX&!G2r}]hUHrmrѴP[V:"3T=胰bMiOo"? y~nḂ?k^z{Xn+;de}^YݞrG꥙$ý K: sEw?Jnڛ泵NOdQ%cɻ'-(]V3>e9vM�@obW`MXZǾ<)+@ΐ)뻬fZ\x{ ]Xo:i@1Vd^ 7eq8z^=<\\Z1�' yץ1*@X^\!D]#ۚ\~�!ۙ͋I$Nq_1y;#<=K}2]sG H!cjwѾw<GWF_m M%nW)xXў,&zR5hQ%ӵL ~q,r.18ju%;+UBHp"J=GDzgyG<[X˨<8 8tyV9'z?/^sdH3,>=KKXd&�ೕ]>@)$[iISV{bV%+Z"V^1IԻD9V73#?@�CQd3G=ZzNɻ8;gl"P8/rG�[%ޠnaW8` zsi#kֹ`LHՇh7&"(9 WMO%t�n%/s̹H~qMFQCӻ⒦�o'JŘ6I)ch4U<ݖ`?ϥhޙ~+xPu%Wxs-A?L./v3BKpgZt ) 3i<ޛΪ5qăyX4#a OQ?TU3 HMAhG)J&j-?oQP9|h\*"L6De9us-TZ)WP[gkI ",x jEȲ^SPDq y&³w,2"1d�<&t Eg<dh7;:9ĜM*[tPVnLMxsELlDk&%a}hB]el־JSp0s^Gv oܖ0{U.\%[GE֮A7*S#Q�nlz6Lg<n**4-cyQuȳHɏa{?Vo=VܣI5!pӤe]:BMD)J" HT^a=c9$9[Zu$slv61`M{ Փ7~/3EUC�jr@A!(/Bd;5^ $] OW lqn$΋CѽZ`޽_s,^k,}I?лgޥ]JWz5w�DB`i#L&nJm{_Kk ;Qkv&u*Y ;~Y8;}f;ZIJaF% .Ԇ~76w$a?Zñ9Xo8'X<kpL@#T (:)oE^{?@`O7XXZmp "ќOtId{Fg:ua0R<2UGDXFlJA&uOWsp@.;8g/VW骔Yj2no<[%3@UڢW~, MKڏĈ_wI;ܻLfӥ}wZ+ZǪ 9>-@2#ǃEҹPfN ^I &u2)A ̈́Po=,d*F). %rhIj{P0p x' ) L#G9#nAYY=ZЌbO$aGGu>pKyvQ[š$?oJUlk3#Mz'v;H09$tqn0a7,3KBNUղW`!X4Ț:К<>lkp%V|% obY+ 㹁-QMPRDUC}޹hu~iQ'B+Bb+N)yGewEG~;.-RXᾹZ3>@ۣ�!:BNR9̡<cѡ۫[Jbo,-yR<�0KvQҶi,Osu$&'\v"xB) Mdd\1ѷOeQd[ Z<9jaYKe~I]# 7ijjp*6 ZٿA<~]-2A=_*QAueKCbYO\Aq]{?wJ!M^n[+@$}km1xHV8`k%O?i`۱e1>�/ᜟ0& 2nuqDٮb$A6/ J&T#`{Fe+YN?f~ZDhY ؗ~aaTG`T=ȱ(a"EEͳ}pR-S  e^|%\0ĔKO5 ?CzpRX^QQ*eY; QRQTߜUk0Nxf1:z<Mhj[K<o #"|7@ޙ crdUp~,-9)rNu Q˯ah^o<R%⿥a]ku}ւ}l-_cm=ZT?M3R Қ0v% iUfGhU^-3Qb%[W<1O7x1δa lw9$?Guo51;j/FO<t;,Xgm݇B>n}IV|vip!^=-fic+H%fSkzwU mM�hxQ Xvؗ&8Z)[9j0#S͠ͺJ#t=?_aOu~|}5-[D72?Н׻c;0z9=y<gfZ*QpX+糿m Ar3ke SC -«GW~ÖUOcD<dD.g B5|uUn7]ͅ3SQ)j qhȍcKfBjorɁdpUx- Yǟ+$Q Lݥ 49=^xczQ%j3HtJW;~#V =:]moub8Ȅ*ͿA 1o8,g喋~Ov2͹Ea)L{䨦;s2quӉ& mZꀰA)=B % 0p@ݏ7"&N>{Kl^@cȁRzlBfpF 1L+[g_<'!$xp>W?e k4ZT6bk9(ힿ'ܑLuhh0Eݖ4T^U[r_B>@+A}3bSZ"an͚Rpd s<5/apN-@n|G"Ǐ}ӽ+!+[gwհYI9q9Nu5ΣIDh'pJ~ )c{twꐆ7%dڙW6*mYUAӬ+!l}EA,ϼBKc^g xBF Њ9Rq0LVԩP&>~jx"?_h;r+rv$UUu\+ 'c%ZJ-j~iC7?lJ+*rڌN$?="ֹP#KM�|uAWTiOR񶊘Jbvˇ#C},8{cbYOuMl%/jrG%+đ=)&@%`[{oϝS,J$3?�U uH$D- C_~yvzuiQڮ+$s^(  e1dU{DƩ;6>9q޵ ;qaVi1GbphY+gj0Y E#=Y/ _aQhd"\f`J᷎9#\> �te8R7\'n_3-:Lorh*N=, fg2yK*uLQj1r .71$N : r8f}Y3Od7ށn n|n%Z~ )Acy)_t~cZv{:KE_t=뼿bkA^نF냋խDC {%ؘa+ "q+VM=8]i ǭ흟"dzs/$f+beuxoF21 ϔ Sk~93qՖ 3D=g.t!8th/͹Gt@Z7h;iЅߥޅ%`i!iONIqj0# *?CҭѥPUK>ˇ\ NW4,]2-f]BNrҧ^}+\l?>Y2mE5y9 pڛE R"5rBmY9- Q6ó� -l lX�ǴFS27-V>߄vUIW/V{Byj^bЛ0BS;&dB[cHif*M%Q$IAQQy/hJXbS[$\],c]a UJ-EC|4*)xԶAD$0M(.Ԉ^c .cb78Flt5} '&շke!QOtVf(A*UVLCfLl k5[ѽV0N& Z6�3kB\bh4i減k'U?sm蜿08N! &]?^WEmS!53iWpWE)bNmؑfxg049"{=_sf<C| ȯg/8ǵϲ.i²f P_`2N7GRЦԛp.7Zo�Qpt«<QK^@9zRNso% ԔG׭ZA'h}ت!�Λ ~8{:9ơR}vmPF>?|8=|g tw^YJ:^<釻e~KogU:gB/Z[&ΐR=;)85XXWG3E5cWihPzh &AGQj(24VF3?+hl-2:֝Ep0Ţ(yLP;tj#X?W_g R'|ݥ+j 9j7tw\Roqޝ3nt{.Q a20.L\=9T4MG[H"fs,Q̠h<&y曠9X I/scr7oBeK}!9FmĹJ�Dȣ!dU؋hIhM.zUτN(&R�wT8x=M~//!HTp\g=9 9E #(E>XrMxN',og 깢;uZG}@IbN >?lh㔲 G,"|/㎍UxcmlRw 鶗fBpcJJ U1F| b%Hi{Su߉H&zN$-3I*:)8}{ MKD �VK-Pj8dz}3\lKJΖs`G"b))ԕ+s^cJ$RtQ xXj`-7w"&Z 1:js rdc5ؓ,ԮMs}aYTkyIX^USO+(-0H!5_^jQ4_)lN㧠!_W<k JCQZ&kzGYmA#WʫBNT}E|v6Oyu^.-D2ñD(jw"VLy}GLK7VV&tGYHu WɉY72QoeY?Àg^ă[/3 S_3cߍ-oԫc{?{ R/ճuŴu&yz\p_-(QO)]4zt*D[8 POJDB,$%B�E3+}/Lv%zʳM)C࡞6z381B  w0??(B[ӫ!ƒ]o<z8?IuMUFą|9cq4Ȳrgx3 ZB#]*#^5d8+3s8a�w@ 1V5%Z`u0e:) FIz9FO48L|a)uXI<lm I6`"$aUڭZnS߷ADiKbOl^SiIw2&%%AxZ hy֢ gg md-'8"J2Sz o"?|ti- &ea{r-s&T Yv+B3Ōw2UJ[KhV<REgq]I|@Ŭa#lu?OXUV^Stu`MŹ!j# ri(9]J\kٗ)(bu*đ(BtRg"^a.AX4曣B[y/0O.ٗViw}Rx f Ee8Á݄7(0^v J`nM,Fa18'.yĢ^3ٷcxỵ[/oVq8BoH;q^>ymRI.~vʼnlDۿ!~jPR*1G79^t >uiԛKe47mń.UXYO= mc 6gW:NJ,m%Q8F[t8|id[^RUQ9&rm6<T1D_F 7QVzW/Ʒ&8uܦty/=^5]LLgzh֑TmXM\$$=0h<,6b.{wxճ1 Fegt[&!2?e[ǩz.fHE3{<{_Jاʥomb`A6 Vc[O5^�!,1D:П<B\ BTD7֌6Cw=pČ?Fݔ\b]$;N)Ge*m+=XV[OFMX,8~XΚ''7605o0CsmI<O'kc[G]mytqXk?M<" b2ݖW=i\UB�vtHg<oԶO!a)a`>Zo:R'j;1x<a!uZyZcSVSD.{M"l8Qo_FzL֛oXGv^[2Pz0jJ8-fbF3t8.հg3_?"lv3JUjIEkhNAv?%`%Zu94,7N_4�V&*A#B?zuziU.y6yO.:*,48OݳAY?bS)sc[Tgks�UM((}COVl L W|b&ljFHF|j=VRIՒ:9bKaX<z4tZ#g-#Q; ߱յyf[rPOUSWp Wc:яPc Mv@pRڏ|qծNϴp4TN[DW9l(sϿreLH-�c̫5#+p v\�k ۘbԉ1Y%B,IAu3`cp?$ w8>rTnwjMgnLc+9:[l*3aK{[^`痨љl)=m8ZCiiqC>rx4wyoi }7 `j=~_c1{Eq? bMT_Kl1{Lg+ꅧѿ8*}]wya\֜jAKp3yoե"U-*YP.ՔJ\E8U4|oOfR*=ϲZْػ~[Θ@3 ӟAil-E65x8`g8 ޏ4OAןkO!gSI2ӚwG} {;ʐ1$;dUr1}YF)~F8r)Hn5C%unR9C2QoYW@S Mv12u:+ i+GSt'=X_ QG3>Qi!gflO ɨ(N'�*>*s~OEa~2e<j/+mQ^mб&.=`}iQYСsEVj\$vwKxn_&~9ޠ Kss[Yrc:y1NmZ/k{ I(v,u=Yu<gƅ{Ǜ;5>YkصhZشR ^$yՈt܍HJlXH{l G%LyC;tYހro=sԒWrS޶ˈ5%#?D( FEZh%o={(v3ރ3 84嶫&U3H1?үeό_40H?8 < E:hP}T'Ԫ_3X[55tBYP׳$)̓Bw;Y= U&]ppFRCz Y6M2F}PJ>'cyKnΆ;U=ѻlRL3qvcHm 4Ij>}]wTKˆSO[VQ�R8{r]/SU'geS/ڀ@&N{^^VG95~:V7eZh]jҋ%~գpRrF̾W8+*; fKCӐ'gUc DYBoe. /:_y+wqVk 6G؇LkqXPF^ݓ`k.2(K*o|sMu\I6몿U4NeNc7 6fZr.<oH16MF=y7z'k^yǮk?RXfkYP@X'e 1S[$5п~&d^o&_+[Ĩ$#p^Ǜq^{Ž)?G֍+~l%D#.=-5-4WoXU`uk)OF[N}ULA? U'pS+rh,"8짢5|-q&ӊZ* _rU&G2L"Ժ\nj{Q%<q}sV`qm3Vu3KoEƀWI&r\kUڻ:d ZȻ?ťģ ^:V}ڔ[҆'K ̩ Nӯ fs0m E¯ o߭UxY2r-C ~­L'>Z;Xia2e;zROY0,M-bLxegD&2g^W<h%T-poeUƎ+2rya~Tfpwte@Hf=ƑnQ[@ӵ3cAׄ0./HĎ^<Of  Vx[[>odmg`�\r̛e@g') />M>ad� $*1D0s0`[ 8^񟿍 <O[$5۟v ӰdGfdم4^? \-Ku1CCIC׀rܘsn*LDvn4N w1x.eiKDǕ" ZvHxϤՍIxcٺrR; և{kh[2G:0%%a* >禽idPf1L.\яqlf< SKoиzYH3S?:?==P}-^g@q?xFrfd]|swũ~xfHGL3fK|s]p^d{ا3 W ݢ|'hq''G~ ˹ YrpDO5�cD$tx?FzsH1JhԎ>S'cgąI=d|ws\ezU2.ϥ[~ Dg/ۓReT_Oq-WaOsd2,E疭EwbV5?!|(~1Y~-Рߘ%`ߵ 榪+&wKis=`~ 0 VG|E&ICͿR"=>5 G gE̾l Q`a<gnl}H:H&#gomIΦcbܞZn]0 [#5g_`KGqD7F^UϏ'_???_?_?/BGq𳘺LD8 Ʊ ^h/HnRtfB)@ؒ&?姍F /<+hf _Z¤ $Q_$B{L~g%"9K�O'/O({09~40Y'TY2_p,W8]Y?3�UL&,'Q}9W8O1w0`E>ooaĩ~>( u%:⦥] >1^1CJPWF=CM, KY})"IGXDL"ۄI[Qۓ/X_85ma?]zEl W_Eh)Lٍ$o[LLܦL*燁ĻUӍ0 Tf8qWbvIEZ+7dxk}%K^K"2D&fyD$HZ[ܳnh⢾1C~B4 fTʠ\O[LQR [n]WFqR@2( ӯs]v9 M[)G |b@0 Xlw˾m gU�K>5ze}*P>E p]{g8teQi 0jjxqCgcʇNZc3zGI"`ҳ--]A)Z#^=glx=zXů|*`CX`W0�1,߂]%HK,hUz["he"< '*ߒ-Q f9lrj C"^'=9 .p,T2Tvȉ<[fs7ݶEvvrFa}C7?uM[XUmoMҶWq)оT7D|K0(i>{25>zDǢd|hQoh%Hh (A £K]+͔-',漶*ȝ`k;y厭栅`^LR<�OF(V4gkǏM_ɦ-u {LX׹ܩ Z#9-U:k-pDϊϝNv)"vf',؊ۥrwEJ<Ur/z'7ϬY0\`[e?0ظc*h+ϯ:V.</.S�#(<_<w7Bj<^2tW\9� O&ooٱ0~!e)nnTjDʔ$Cي$}T&S#Amup?qC[* rCZF'e O,y~(3PߙAͣm3M&N|Y|aL%@qW"sY^[!E:DY-6[2Sptc1t_,*#.$P48V?,uڧNnH8�ַ<m<C"*$A,yǐrm3ovkF208^c}"r'UJ[U]5;m3)zooqjqBPJe ~ʒ{'h+J 'D7ФT>>QO,ZP6c}Y0:qswr>�!VhFtY|;`F>6?v"‹Yg :Dq'!F+`|/>2?sa:Mk7M`:D'gG}pXG%Zܖ)(nV%P`nJuO[10Y-~YúgJhKSL!I3YtT_' 1m\%ZH 2äWSSȻ0jB+䳋YGWi@pV3{EGz-phY!1xHYoXo>}+o]+n;,J/Z8t=p ?[VٞP ig'9􄟶huĒ8E:r'̢ ߷"3Hi8O.st$˸k>NonG+zu 5#Oݺ/oQٸT 2 ɨ+Zf"T, VEV#@ vrې)hW " cd;+K=O<ǂ<2V *O2z)R&'jۖ0hN} Cb�RXzmDs2Ѩ?mhhL\K+$Y|8WbLZh3 $f`Yf$H9 E8DVec43]+SyƨÒIGRYS0ʜ[_7HosVc~qdگg8}"v ~ pXWvD__H`<"R^KX7iMF-?FG"`E[k9k <DZْ(z[N N DmW4|d l<*b= yҬGYT(pML~DN_h^b6ɟgtǤL9H�#Wƈ-Axk]r::^8iߒ=̋h_+6eEj挶i8 yj:Rog=OąL7tV|NB L]拐oez vgXz0;;Tur_jRlPstdd fr @˼ TGZ(ZoId8:9R#Y:V!6IU I"\v +OS/$x4G;m̫[W5#>^׊pyẏ:Cyk3( O^ĵ/RQ=m)l-uBv(h|(0EBqystкxC~3YR2-kz"mrs<U}NJؔ%ǟwn#^S=#6jؓE}b+Rfnz{{ְØƑre }.bC9Q/b5MV3N:<3Qf %.x&OV_+ȯK,K7(T])֪2ԇ>W1!�(n|'kV3Y6_ ڮ-S*P0f4TCu[:ǟl6�GC"!d1'\_E8uQ??\/|"f?'Nr;ZXnh'YbIT[۝T`ojDxuKHO=x B7 Yu'J.GV@fxIYD gX7 vidc%6z3- Y7v9*E,g]y(r04KG\wu <.19GiѸI߼,1m܌�NxYq \l{풝%9 Ͻ}*) 6iz?LOJ}f=ǟxepZBW2\\FJvlaCd^d>ԛd\MJ8Ӷ\{]3' $]z&GKz:Hը +Q*%= ?}[<cמ甂l1sβ6mVm뉩!qU?wTjf~V#y2<[ # $2A Ych8]Ձ DX5wkf`-LqݨS9]8[U0vp*з;p[G?�{;tnnR ] UK]P~/=^6'.6u+E.nF8ׂuͼ# j{+/&ٸX֣4R|ԋS֮CS`g**[\0 ơ:ۛLˣ>pH#ZfoEIfcʒJ)ܯ ;8Zv y|V95Nc$W!q�Ab=*V'4SS`<s G6!<W5FAXSգ& tTNfX"�az+a(xTt/ۛ{-bDHE5J ¯3u?wKLriSDq W4QlT|ڌy12,Ws/1UJ‰^`ĘCC嶵' W^ؓD݌8D~FbPLBn: ˵q{'Ͱ;xbՇڬ3.OƛXKW$uσ0?9ViZ?(o$PF$8Dr`_aDXնt*7W5Nӧgt-?03ZB%;ݟsy i\wwB7SœqKe/g`Qg2Unю~*߆xoyl� vQGƕE^C DX`LdTܭ @#3ȹU<iv2byo#;C~ *Z+paT~%_{k2‰"i۳uTnv;3utԋ-̘0FD%yGf(\3ڀ'?>ԯ(ĉ Zpy{W浐8C8$Zfzޫy#c6�oy3~~D` ޵e%G4[L[a#t7"•1hКiҼ٩D%h5j_"@zbt˂l6mh~u+kސnEu` W�Ut skh >qGB mZ1T!ȇLFc-柵F?-u#TA\Sё}n 7BL]=,2O[{Mv'$: C%\ϽrYVw!ўP K_ow@rnC]DgO"۰(rrb~qft*G+,L֟N>o[, PIG_]ޅl[*R :hxD�n�b! QqEwJ#VBZ\_G[|Fg0kXWr&8ӼJ*\Σk"T!=']{W 6KVybl*?F}K0{ju,"m=9&mVW⭋I 33u[' ud}ݼP@1;*cL| ._坿C4>>riaѷio\Zy09j鸩Ԛ@9*bK+W+)VHM累�u0G{Or. *΋l۸H7ηOG▟:^P?mh6qVYi`-؉e xI >tE^Ӗ}B#᱒MO uSo]qnt"}B;QeGb6:7bJG!꒝(}~`ؕW\ȑj5[__(w(&Fx$] �ѽnK<9(n8pͥKH,@IM} 3a/P~kz6?.Yjiչ G^#ğ={aHuv#9?EQą83J_d|sZ@%Bn(3*ʏ),}ΊiP<BN!pg#go*Dc=N8p}ODMp)ړAoRBZO =YIt8؎BkQseQil_k!:Qqs㉋4yhn+9+PXĖ8VZTilK`~QƮBkܒ[Z<FyVpJ^:g5ZjWc%lF:+7jU2lcyuKn85O\w__JL~~ſL=Y^{vo7_T&&u?vKjWjVkq[D_c{f "l{lo|IhZov勁Co1hg__Lȡ,*jo:ns*eiL8ryϵ$$ -M̡g8 *?P ;X=l/ =~`Xs*<:阙^>#NV,C^|�; pJR/F*Щf"x/J{3UßÚMWUժ{mD<Ow ZL<2Z,)V?6!pp~f_#X>zrvf^-;(u4}ڪeorؒEHW CsE,No7nTʫqHH6NI)0ЙS\MǚB"aeC8Q6l^ ~ˋOˬ|G.:]+U99G7:|>zvu@5WS~'lȋwQnq||&_{Qȍޯ$ 6 7Y (-6Ϸr'O[n)�\թ̃p(Nun/(lTz|Wԁ$4Q׉זkNk4ɰ|qPO;rpDW #F3k3tJz>B j!"�ڌZQ1 pfzjC NzH*u@%·\O^q}[&[uu?MSu9 DܜgUhl"ęYk[}pd z+P]ꑋ=`óGԵ#"n)em:$L{Ջq⑫Xl){`pqOYafyNZHBϟLwZ5 ۻ)7$v.xZ ;g^gড়ӪİH tFҧ̺A]U"_&U@6۠lweKC0<Q <+ۨ 3\v.h,@xoRƒt˼IQwvOpw"Z&+lUl@ַ>CIQNK mSErqkޠ&{V+z ff@^њᰅ|oOѷwDwvJ:6I-dW2ze dcUᙩÜ>ڮF;Va8w&9q7,ǣOT%e 끷j:DQ{+ku҉EL/LѪ'iw>]Ŕ DW^` q]SV:ᢼʱ/+QQI0*crMĞ>VO騎J.IV$!S.5#a.L H{r xlS('XByũP J\ZBFU j^Bf@d(2h|8y5{qFs!'uo9Ѵ:W[z^ʎ-&_}m FT0jL-46[DU 4>ᱝ2'8Яt-w!+w6ΆCU.6ܙKǡZmQ0)g=9{gJa+�ܜ"^Kn&G{ -lm^uQ)@ݣöm?*4{Ҭ~yu5ƣW"kziW^U:}"[k<%VB !^έy iCLL(!_.,Tfp[Y#3oRM,46>x LY[wW٘9L�_ wZGoa@rtYc3K} DGq;;TWQGէT=ѝ{f2Rdd  ! 'Y\l3h_}k X* ] 5 9.=km,(R :KIBNx3hYOp[+ Grl�XgkG>ū$J0Ȋ)_9_Gpŭ⮻$ӫ⣫Y YҙY_Fmx Z+%V 2p~(*T$S '&w=}A4Η[f2)7wNlR+T)LRxx~5{~v/P i%yk4%+=ʍ*I óʵzF|ee\.V f?jfcدO<(4ޟ @-xbEz<e!B0$U}Y#'rcnl rP V_I-zIɝܬ~,&7UK8Zg$j|lXQWɶz-pzzIT2{d9Im%Չdy&JDQIkGcbM0nH{}WqqzgCV~]Ck y]=bI "o}FVD[EuԺTi)((Ukvտ"S Yg #J5V7PD}k.&|OlډzkQNo.YM\*+;Aىe=f?>Oͺ F[;~%v̛T|1L9$&W1B,%?[UKyߙͧ÷3qF-g7:oMc"qtG[xd\^a ;:jnn3ڒ4* ^;DfrTLOp/Λ`{ʿIHg?H7цI/9�F'M`"f9JRَq~ysq۷7yd5vWM(p^O3Q0^~>9#0*26z`4o<fYI[RőL Z ]WF4*Hqq7]@]o8\dv.eXV\*>v, 7lKϓtI1VԯVei ;%ǩ3 )JdH>z4?;wEfb[f!l* ^Nwš3uS >VJmr>zw0si: ƏbT/|>6RD�'dz8lMp|6 Ɗը4'yI;g 8<B#5RRt1w;✼<<(L;6Lb/bUp<<+lg /izʝhݣ+-:X9yA~~[/ 4 8f|~6Fu#Om>:)&"[LUV ;)CW(lhBqc Xv߃u ¨6`v0;1"|#[sa :$0gYOCU'ol$:)64^̺\L<-/Yd.h3|y۴!.wO~s1_̫ !ig? IY笕bQym"A'bZ:+oĿt1"C94T 8-R] k<9(~̀-2woNkO@u:}f(۾jI=LOնă Fq\*+d]32 7dn1I̒ubY}0}6k*&Ako;1~7:ܵ,*ugޞUGdP>϶t0iP+|)\թt4h n>Onu"w5ۿJB@h9CfA5&]5X@l7MNMmR�,X`ېgXZd1Ȭ`�zy"#Lu2%>E6q9INSyh29yc (aME(P[sՎl:GE0T8qMp(!։Bi ֶWs  6+nuC}aN^D蠪YO(#ɟ6u5A& MP鄛̼#2w%7R(%*c,696>n:yv}>I$gl4fIk5in޳%Ɗd(:opEցť))5Sd҅Ŷ53 yv7{ΧLEd=!&|nP^}~q7UKDG e3G۾s<a{`i5aǝ3F03Xi 8XPr8z왘UC yw@�z}}z3[/>fhrlݹ0!6V|X3F\l-<L {WH Npu?3A _ڷO5I ZN栞7WigiF0iܩ$*b' V^)]=ɧ)(}wHpY\BIVap&;x7.Q|}u$b?zLl或Ac`8DqnBWo~tb SC_?_?߿??O?o?o>_?_?՟R81rTbYҼCt#ʼO<8?rH3|qUX#j~~| ?pb%DGću<gcMD1f^5K={^hwr2|6^${ $qエ* oUDH./LhU/82 NVh+O 3.ʹD4O/{c O(NF huԇOu]r;2Y5vM2bjAN̗|BjOT_I i<7|&kc9uuF aF%s9<@MAˠ8=$XN�E &wЊ6@1n?Nӱ SٓMs5#iQ*~_3%\|l&]r2r3èfwzQ1t\d#tLiACV3Ǡڦ+iF} f X- 'CYo ^\Lf~P&襩(R(c"[Cd[‰.>VYs!c7@H{4<`b0+ze{8LΏ F\jNE8\o1zyx"fs?raݛx̗ʃ=qxGLa8}^[%2.*YmK,?Q(ѐ[P?ڝЄWQ�:"g7¥}#R:.zn rjKOFK bXVO жCPJ>^`&PY8�떎Q/pglb(p~# uKҺ1z&q#.5JбO_x1wFW7F3JiؽNA̺e՜C彄Ld[7bީu%V%ج}99 #n&K^5%?/\(gUrmdhuOȣ7J_V(-Χu]C8)Iǂ<7Dr44ynLWhǕ䗖j9d;[Ee;VV{dr\U Ļܘ/}nև3&N %q7++#{p7V}9|m֣Dfq6w<Oj@!Y'qz`gdBY9iqY*mJeld u|&{=}xRқ sW3 Π5w4T!hŎd&RK@:]5x%K֏gpX:~.Ei)^5]F/Ì c1`A_ycavGFyctС`738hyL+-a"2ZJ:Jg0 O|ϓJl>}fl'{y#K23nm2&Qo~LFt'v]j)ص<bsdIU}ƃRNFL_;3tF\EDf@_ 4a=s^.7^:0Ҕ^z멂owLV&kь|nA,o~1ݷ-Ɉ%1鮰}N){wG-?W3$9(b X;LK1&O-# |j ־1@#lB/[LD:7+0|˺X쵙XTg8FQ믥>Y+߹c=cXu0M=|vD'O (We{K{IU$:uqh= �l|3ۂhI[6=-C Bdm_<n-EotGrkh"5_(8!ϫ=d-s=kb<y2N{*y0/sKZWrT+ybi +wZ% <㉟o6ZV�:'aj|H<V`:o <fƿޏSy3_:HzEV-8jPaj˰ۻ4gc1΀l8<1z☿!Eue*<uK4e[̎F0ɉo9iyH.pu/2}ܲz@|v鄼r܏vQ ON\z'!^8<u@վQM/L*>ƲC.;ӥL@G [y2-ޭ~H_9Yt r[mHu)�oqWxת(}ɹrտƀl2_C-CV*9� `z^77BAH49Wu1-vxO`iY6@]`{xT@=Zד UD'&8UQz-EɣSe* &ζ:~diS9Ļն>[5kuOLͫߨϴ,j(x]pl%$1R}i,[TYh(b8Պ,1�5yV˰'D<"hp3Ia$aѣ% ׉lN;wzw\;)GF+.g_JI<j!A nϮc- Nm̬ 3vSePʙPzjGz{k0j4aLlm{"ēLy[m'"T_c_AG"Bu(r}_z3C0c94dk6/<=zaO&??CľzVu/}qXN|~&ëXܛ W�M^>CO ڬ=yC63K`zndؚE uaTm#%A9GYLAѴ&9a)vco;qw~ w£BpAsNCshK,gpr,4/5Q6To4m0TЖ~}`#a#) b0qz WљmhZtE,Qp\#9Q+_Dm \Zqx ޶6pq۫kn1Ĉ Zo;TmOBn;εDl6eaWO*L{|v6K^7zn /GFC(hw[R^auBڤضجv}MꭷZ^j)ڤDǾʰ _Ovr欆/x4HTy5=yh`GT#V~ -0 y`ND(12J2l/m)dpCʕl]+pu3cf 5\ϋWkЌQoưcdrX7iZΗXs' цw3)`7f+wT+A.`R=#,7Wt2q\?wx1ֲH>Tk'uJ}Hm=sZ`&#-}jSy# w_zlк/L *W\y;i7`0d_o G`U.ي#񼈜M"V[(ϹncPӦ})JۚDB3YW;P2^}mC5MĖAsYf=GE[{ u (lQAX֧lR%5gs#ag9z5]urPٶY,(F<h==miu9$wG.xбC6a\=@(f$e^#8�Hvj 5Hdt*u[Q>CJ{92Pۑvw-+S>x[2"9u`r6OËKrN u)r7Xz֦-d*74\ʟc6Bp$ rGv#ڟ^S>Wmk{BN}[Q-O>n 3) ])Z_Ø%v[p@1cs5tGnVP^%3*�啸Qdي5`˄Fs\ #b*4fpqQͮ Njs1FM63=O%zvѾ$z뎶3Q20JjQxnq n۝ic+q4m]LO|HxkbYd؆Dn]s5j֍E͍|%�SfT/[摻 wh#vOT qцCnꭏ!B%}Ehw[׷{E8MIn 6.{ ou|dvSgۈ[l=KelPA#dK8#B[2G1ZPPӝQū[35iׁ7g粯`i2f/4:n+M]@͂W#b(ZRT;ٺzmm"A'@=z;ͺ8Ww[K?zyǕT}J5KɯC�m!C>1 =Dʍ(zGFu=yC^ V;?\4fF)G<o,eoc 2mq4FxFQP$W5qrΊmgkۮ!#v|ge[0NK!+-;\@rG&W{,Ueſe7 Sw0J~/'f<+q'xW>w -ܖc_^/ʨl-ȦQVʵacT?}-7 0*v+X#ڟ.~MH :[$YďG ǭ/-Dtb2;pA2|o ʉ)a"4.;hSΣG ˄nrU}$R<{6Wf^", ]O%'W`kcEjz:=¨cڼ$,=gr@eEbi"$sOfy[�G k 1jSSq9mǕum HX{:CzH_xk*3z(-ZQ'h۬DM0R cSy-TLkzT~{| BTW{WE/[_!!6 7@[XgLciCƵӺHOKeM伒}4|p6} 9}*qkdnpWM=Xi*س?(U!gga0ӨJJW :WFCe%©X(x  6]e:ޫ<wrijhGч-T;69p]}X_u9I_x}ԡԝosuM�߸7@9簽oϦq#>ר&k^i{R]풋W ;D&ß%D{Ϙ|mߌ$[N"_2ɫE@jW8-by mmD#_\dc U@o~H%<Do~WkpHN>HBټM-))=_1(}*jJ0u:zn5Wg>*ë=H}$A|�f)0947M j6HWn /xڢ!>-PdO.aQ .̻Y2|D܃k;e+e[Ǒa+9z4XEJ֭($Mͳ Zn$k׳y` DFknc(p'-_\[PƤ{;$<- R*ᬹ2 )&" V֌fbwqke|CZ7S@*w( jNo\ p*yc~/e đ93�7h#/E!VhPs~F7N0ּ'_]ɆU1MK:,]ak34; 1;&f,m6ܗm3=ue]H=…dks;7<㥵 8B}zppV54=~M70`X孫C&{h L<Ju)/Ɣ{bz@/Q5b+R<U?i'ͷc xXPUHMIg͈LeU aghWZS [ND%Ռ�Ali7D_O^d2fN `+xx[:br�ڞǸkѕ&ԛs_$:m(8>\,h q4JRKclGPJ~ڐϨxQxmi"Go+ B<Ļuinu=T0!X1tHN.P~6DZi&5Cʑ3$M墭qB8jwz*Dըo`c;te=IzN<LGHeS@LZ*3~kEn$^f=pU@ rp ͷN} (v~7s:<IV*VWn WzT,{k0+0T -wKm"<!JmoE"i Fe2Qeb, [zXӄ(<[&C3}FNFUGwq}y<EXp(t&dHީYY_&jsbP>rh`z9A౱}QWU{RՏ`~/IP |1+g##'8 i#c -3h5[,.&GrUCȥ\B Vsé:4R:1wpφ=q3?w<3?,Q{~Z#2†ɸ<cps�wZ(݃&!Ou37HBwIJmEVib ַtcXkuVRUJۇѤ:԰dj0�==h|4UskBZb^WNs ‡NQ6QW2 V1ٓVlmoViwzgWh- .Y0$SkMaĄzZ+빐48" LRD)Fͼ3&#J#g1  T\[*<6ą J(@4v ZuykQy5>@zr(v{ (7gCO~K{w-1ef~\δX&J[/2pYW}LO&L;N˃\&oKUwNQ615g"+>A3B:*Gu)H c߬g~7x �hնIuHVnݍȧoĪV`˳!{axUJC wҀdSA*f>6qw=Å_G�TUsOoY#  *@ p�ԇA0 )ͼ6`[/kU*L6~_EAx\32륞۵+DhpZ>;Ʊ[Y ݼ+`=PG:W1 M'Fv㙵7"qk|.ꉧ w4a@IX#!kf(mjϋHmTDANŕlU1"#N[OQ=]FIhiVF$;|Bcbx_V.v8Z|+l'{OBGRnџ0 S1oY$ٳ7ym~z=tP̈́}LKWO;zkƻlF,&kbYSߦ{"zYl)#wo*(l1W 8!wb4\Aԑkis?(ːV϶rU2Sިf0% 5I< 6$m!/X|DOPSf K[ x&^R= Svl:N:|?˒cG*7!:&$SwU 8 T{jfFcq~֠ho}%lu/51 $͢g$f۬NV{|.AɃj1C H]g{8AZZva/&тF@F7ܾ5\RjӼE=nE1+ftzV[#?}}E&Z.EwY( ~q\߹U/ ܧaʖr6΅]o#n|̽KF0>"*+Gbiq & :c-4jb|q)H)[J ,&lUBIx$!G* k}%NpUA;w>Mj=3Z]+z aHWc NaX(F+P8y4p6Op47ϭu�ф|J|}ud,h8*-UJMo$. 4 McI�SHupU|\{J_[ȫG8t% q[(V1~.<&ø5Jt1NgQdNwC!|c\M' on8k6cmʦ7dƤm.fϻSxNT'_2<FGgIv 7^wf\+2a/7u"w="l6 5 ?9[VbWm4*RoNwmdÉ^_8g+h~U1Q})ޘ VFG$obkZ+ O+km Tgƪ}[E^U#؈/8P8d{m{дigcyg( Dm[6*V'uv0d;pߛG#%H}?� ad·*#^uQ L@T֜g=xLfHK~kIF&Eh,&{^WBoYh /:oՅboo'hșkWA<\J2c.y=i&(Psi!jȦgjaNfX[qu#u4k6tߟ/{fw/ՈzqԊ&2 Fp:u>(轷o1I;/6}cf 4K++C2wQ(a(l:tlD<Yr *Qqn4n$&2^aqGyUvr=k΀H0?{Q@Y.ҘXBm bΣ!q݅jv#+@<AJ2Vfv"iB&b8QmN}Pql`rw:vfFn!HlP[qD; sӣOGT[^ Kzk~Rv>Z&CIv*tR]Si[0Y8TxŒV?s P?Y]<w#^_i#εĹ7"IrE <J8jA<3Y5n̰ӳ|&?A{[LYaCT_W!p$h񙐨62O<~Xh۞&VZ@9Z2k%ʅRi4c�q,/j3q*2e8"*(0G݌Zn}[4qlQDMq#ӑB ^Q[V7۩{ݗ H֝*ŝjGrEطvH ?*vXS g<><s4Uxx%\%Tm5&_x7$Wtqs[vɑbs{P<@ШFS0q^:Yr-,^&kFFd5+JN'Ef~vsda^8O6 ź8y^!r,ʑK ωɉ˽(T% 0h0cڧ;9HX06OWa<yDEhO6@16[;}~4�6<7#ͧRh6//:llKZDjx)όa 0 C. ΌG|HGJxP3f�U>-r+* +@p'D{QGsx6Q�(`L% DꭔG)O,+R JkŽg&r[zu`_Y=Ƽ90Dof1_!wpSY uGyrjݮo/+-x,*[}|d�>EL{ G Vnüѹ\Lwc2򢣹lT=[Ȟ*U5P2qt -ׇA'Z1"Ƚ.2R=ͧȐz:ڹy<\uY6 Y橔33(*Fo9X'~t6$ә{V.zbBr6lEV%Mhİ4sH<K tAe^I|SwZ}|A[?տ~~_?ywwjCX3rWZ֟ճ= &0'[_(:?'Fq_rs cQ�W,֢gRNwU`/IJZS@;-A2lQ qH 8q]#ƫCe9JOܣrjD1dhY[\DcRއu,U^7];Icy%ʡbV-rOm؄X'KPkDHyOZ-".A$) FZ$)|l \{V8. [|L~(%L,a.B3F6PQIJZϖsƨҠhk 3MLeV$ h<#v<:;x gJD%}Kր3B)ed+)YŐ3p3tx돌Q'?cv-iO5l)x5yGNcT io`Y_y2t_x9i5ea֝g'&NXQ݄ݯG6)&6Ӭ_?wYX!vO5}I?ShoT30ōcؚ9\9JqA%.Rro.afe>덖<C ΦJ?9Ges>Kۚ. fg;#rk Mػm5IkMXDM^*eV>ɾ^W׭ Y+$X2A̓x_ͯ\do~!'-&ѼHfٺn%I$B~t,@.gĚҌc"~g7")2 ek!Q"%7#*Ck*f[d1o ԎNo:ߊ X7/|KHGѯr(Yx?FXj}3 $q!:`){ʙs9BPֲe퉔0O;u)|yo#=c8F.>*8r3YX=mo Jg3n%9:<~4Q{X3t'.oAsDȝ[BƉN#[ !D᫈,w@q.K8;pȓxl]s}v8?޹"^u\-fs3Z>fɐ%4/ HuKFi8b;# 8 _~jVpAPoy(.Y o{>8l5O(O}VCt^yx s=k h sZ(\{ ǽW엿r~\EuXիÐʲ<+zt~ѧ vߗve(\VMJ8uaՂx2 pkG1{T'P=ka:HqgIדb4*&}kZjVko8fs[:l㙜xsn%'Odňjg8PbnFKN$2ѺwPU>/n=[$Se Wo[d?Ė]bv' vp\ޭ~կܯj43Y 8+'շ1e_uP|.2"lq8}؜g*wdX@Stq1(ZNOkdLidbEPa5OH=Vku!Cఔ"(JN ;:Z3O9[<0Qau:@dp^GC{]y#\oj$ Q^TKGP_Iք)?_ۥ-LRlm*rys95윌MwTHc4(2}+|T0LrPcBXFK}ENj 0HzX"O1 gܒy$rrG-g {-[̊|}I֯ `= qݜX1@}Ƽ? L'tk͡׬Ҽ݀ ˍ.?yRXW@mM:U i8<,W qChUcliy&{dzwjdn4>GF.1GnIO:u n&Q׿:Kh;s늤鉚Q&u\|apsߑ)&u5߃҈s q[wgH8p73^>=RKK^}&N?vU0w]PlvHN q}Z2K&5RX/JW^f0ñC=я8>e.p}QMsSA⚮*_}[G̸YL$hGYWN X2PKYjoYn=?ޖڀ9 x#.T(<{G՗kڼt,�rB(jG W`YFI:GG˾Y'!@:S#9~Ɲ3eSI'7Fi#Z!\N5.vU6} =QHW"]ZLY;-m\V*C2PA֛]^ ~֦pKEN6 D߫o*b c-p[�C@A$;xUHGho q k%q nٚ$NipyztC2qȀjMMDC7 4&Su c,7EtH|E[ 3eszc϶U@e^b%hhT^m&v~ǃC$VOXF?6ǗRK:6[ J @D@1Ol*1f8msvM>w9�k_qG+3Y-tZ;&];mTQϭ^bTX&MјTP^:۝Zu>tNAtXs9&$b ͷA<9 mW(z}; #L7@&wpKm7ϮlRŤ}CĽ3TC}ਚ:+AbMSׇwz|ʫͥ@ͩtޜ[3#8+ߓ6%^U%O8&Ə*yX݈y"t!K݋oOεxkXܭ6:ٹ9t}O%d movDO.¡5/}fDys3xh~<U6YQf :*FVҚلϧJ^^wzJ"VN0lRoBGs82tĎ _渮7o3.e&7ėL~VGgu9<t&*(-eUyYH p4@s 7@WN~7 Tʚ^4I7l7lc( P{Zϸ@Sxmi(RGlvQdjnJ_44T4GzƗx${ 2j13R3~O=(g$"hF@ȯGoO&SM[8ib4#{ V>Rb|96K1>d$^}Oҥa-Ā%hחV~';lJ�W(5n))M&H>WӼG0\R;hc[6k=gM}n̯į1yfԵuԍ2:\GsC?|'q?[hf%Ș�A[OGs̜Y ~VBF,MKvǯeHHCCC*8G ͂= hZF}gz 6HWu'[Ϻ-P7X?l2[ Rٓu kBX$6;N]h4` 2ȒbHWj+[vX^6l`7F _*J~YFDK^OΨ\^CѯEʃn ům4'S'^R5G_]k bz/ƌ@j.O(*u~�(Bv!` pM)0ͮWV1^lA .kuj^YA[W*+ ݏy'WHxAUw')AIIrbtO7 2}]`n$`5q#Ye1Msg=UY-FxT$VcxW2Fە:> N$lj@$j .ǣ5k=~z;Q-G3_fM0Q5RL %.:RHV 7%G +͒LĪJx)ZE~ُjc8y.[ima湢&$m.pӟU80C (kCq^;62Mjl~xj8n8u D&w-!!\#UeaK'4!AoY(ݻ3N)Yz{n\Nu*E `BrC 6f-bpdp$ΆW]f6Z]!]fr84lWLfQ>H}zY/UHȸ\FMu[`?Lq|yAi'' ZG2+r-ץoԠ Æ(W7uȚ~*:,GÁhSAvjpz*/;[ z 4>qW7 9I"d[{"j3)*|Y![Vnnk�f[ھnlBAK鐑UBeP6AY|FX* ʅdOVp鹙M=Y j�)CWO<Wtxk5igTh""q۷a Mc0ku xPζ{ DZI }BDYh tvR 1nR`oⱥ�sJ m8snSbJV 3'.PDRFDy;ĺhј]u1*dϽL<o)I\WSV8>l9eCS4Y[+uq2޷ؖXd`PR )iy~ċ0z wm\3+ ,D&3Yp{~Rejar՝Y�*%Fȣի} "M |֫v?9emD<؋ГuWMv>&suQ~,jA�!RQ"O9  #̞"�k[a̖lT|3Όke4Tj˺а&Rvi}.ZUڍ;`:!kULkqΧm[-r+uSHwg"Y*I7˛;mJ-| .J[3j;SW54="[j|-=b nZ=Nx*׬M\Xq6%2ѐi:,N�~itJD!Gݭ1Uwz|QvTO+"]#D1+)z$5;3mj4#~ƫZ^4rhIicؤ+r/KZo?S$QS/ aqmClo}}^Y!ȞU vGx>aT^C7*A.>W#ҡ+MI]e?~^:B^ےY@eX ;Yr{dQi77eUw�٢kMlw1* ]^t'<դ<z[rL*ㆮibepq7T}`pWw-D$(w|4ǖ]S ܑ!{t5͗Gi7n,AHWiʿMJbF0qRIkGrCVAmAL4U~9oϞ7!+�$)ބ:ﷷ.N+F-dl׬4NVcG >?mrNі~n"tPf_do{ 8pHKr:hfhɏJJϚF۬ &qR&ʃJw:eצ%Fv?3D :L# +'PEΣsiTx+JB@:؂xm,OZ^EN',j�:ls[xsh!9>pŴP'|+K5J֚bv-Up!3o#:HJJҰ؊\ugQ2a^3m"EJy,{PmX$%f}3l6H9&8 u6Ev)]A&.3~I` Xu9]I1$RTAAVW#Uߐ.\IF8З, �a\5(]Fg7[uu}a-mNJܛf>;R( ڃ5v =zO7lb>S6aJEIPP:åu=|d^Rob;-m}.7*D斵 'bD@Zx`?DyJդhT2!mI#OfE$kUէ~f%Xɞ~8j'j*A=3("Fvglm3^.ق s^m!ܳ`GƮ63ˇ3< 2UeHّL50`]�Dp%yQHwM_Ϡ܍ks^})< QA]hg%yY@9CqfU#L%<jlzdV^1 TINw-f`Qͦ yRud~}� \yem&Y`Yf`O=u�d/KH?_>hIޣ=+*> ߝr�<k7b<QM[7IUtA|7h7{Ǔv^MI~]9LJ;I|my޲ P[ `~r ՎeÎOcD\Brx-4! 87[lջGM8{*vڭ}Gy}'IR%/hGdAPN[naSϡ̥'kQVJY3S~c#V.w|>�e g}43@guidu$ՠ"u=};<sj~0~lQ9�ugB[773FOuk]�n t\ճvMRxߺ>B 0IhN6ms{T|sļ8#_B`' {2T0 $Oׇ$sZ{+gB�%Ryg=Amvym{ɝЊ먐dY1φޢeHZWi;M*Yޭ3w/;,u_؈k@3A4QF^8UlCES Y'Owe뒽M>Vo*ʕзO R+7vYy@NMxZi {G]&)D}nwk7"W\کU:Npu*71Q'4Ƨ~(bLJ٢ x4{recR )N d>L; aRE= 5cR.s\zv up4o+��"C=uJ~rr{ g[ ފgylR|JQy"MQ?.(>*}LzP"^ DB+scUy۝<uU'{ZjܤqEx)3)v 蕴�3ܵWvX�*|+SrYDӘEwH  eE-fUĤZa#[i~݅_˞<& swhm9.[<6J3F,[5!,x{rmV>zPDskg6fw?׫,gHOV`E[{,p]f m~u7�/y V^ զ$ac7HG?laE|2##f?cemɚ=|YST{ Z ؛AT:2ONȈ?y+SLwm+׶{oS1`O>xV|Z\.5y!oKe3+>˴1jMNl'=e4fYYSA`mKG‘QJݫB5LH 4q =-t~έ<q{դОIc,!HeZ$T(ƅSз "R r铰a oN2:B̏m[I1@eziFU7e%X*"kíSVUA(gIEѹۨ�iIwmjwۦV EF޳0F˱sh%-b6~?+mjmoZVթ%o6.m-Q5r" luºrW 6<[8m6=MۜZDk-5a|/Ð|Y:[a,0\Dо}X% H4hiL*y5f) 7Tk.J iض p|ev)gs|pQtq20KD:k+uczcoI'̇ybZ Ds% 3$C=�.&̪U ݠ(N=.;7&x4Owg-us4;Ɋ-㣷feD ]lC0;[#{-G 88BQ5J+4tmQ7f;0pR3L3[Uq60;|!b ]J͗ĸ)pye}Vr&ڥqrP<Y̫f6Y瘫kı)_#;V0Cb%:<O)ĺ35wK# }S֎ ޭMQI2HWOi)uhZym& e!G7˯:xp F^ݠL׶[& HZ.}AH)ty[~Aq>z0g,fiVȢ'nӺ]2z/+n+;x-{?yRfuͳI$/=S%d+Ҋm2.]6o_NK,f{'JyƟ*=#wɇ6QCQŐx%\fĤLߩ݀U?sĹw97y r>b<mv-[i"h5o+owNC,cxfPgz*rh2e5JB̎Q..֔+T$eBjdVS9B0,4 [K[3bmg-y6q1Xqsbu6 S'9n]ƅ*֍9cd`KJ4"#tEyy-~o~ ZBl~P5N~a5Y޷f`ɷ1KѴ7%`1ONv샬>{%`x8~r6H迵taJ2D_)VA¼t]= >6>x( 'ë;d >*E)],,.wvkX@< 젤k_  <BCoYg+& 齡W8s4u% ygj?`~l6է*5-~E݀ZKY|.�xۚljHt*}81mD侊@C n_izy?R5 �H 8;zlċy[ ѥVҝTj.� CeW;Ckudhd~UTQ65EMv #hǿg?+r ̎=Pg%.12{dbޅW;!|ڢbNH@l)VC7wƞX;, cVl΂ztaLW\UTTόgyPeP_Ȗ MK ޹MOiM|gL`,)Ej#0<lϖڋ6N )N4r\(s^RvF+'c?ɍ?̍?@o>(V b rtDōjHd{5JK(8t4??~6QF:;9 =?mTC5ӈzq+^Xx8P9'22 QLzۛ -'$2Щ֟-fҰ.n h@l@;tp2kp:@=DK MHsXJZ5~K@iu}58JGF{"Wϱ,~Ig)wU&E\j N5zIb["LG"[,Q'\hb�7vݳb4}1lY8s%QbsSJƹאxKJ"ʺ~mT.mAb0py盽Wy ug|mb*?@WA6K>Ə@umS<b/9 g],.2T}m^Q(/}xβuNH"yl(幮i<b%$bڿs;jYβS9Lƹr(l7/C^Ҏ{?Rsm2e!pp;w:*X({wIubJ|P<pSֆAU*Z%bLJ[rOͱf"ە{R ~RB-եMϵeQU=݃ om"-V 4Ž OVT4akrg0mK7E4R} "Qmƿ<Q56i?J\֧F"pOr@qA~fW 9ch- }(kv:qU39ێ<iŵVEYe."nl@})bGt<ֻw.y؜İ~ۜ=o2ʻٻ ~ާbPku * ~q9<9MukGᅲ_dy#φSnHW[[g%!le-&4xd"* CT\JvIۨ6P4&LM KP1̈́dU5=-r JZMds~s?/RF^j&-k÷W3HlfqbnN>V!WQ Ҝ1HyqVꑬ[H<M$ڈV;N!X hal1xQ0:49fjv<\ML+=3.-Mcupj4n"%l>M@3+ϝzƮ=xl)x, prDr\WΏX a$ {I^Ϟ}9Y~<`[g#&ǃT̀eKgXLB}4J'OdT7VlWyÁehU9ێL wV &ԳXq3SdLLXvàloDgӼV<bi?$jqݝ"T6kۣ\%'8+8 k 党7Ycŭ)k{uŨD㜉HjrH`r׎f_5sP)e}Gyc9l1OFg,FD7=~R�=wf<8(>Z8 ˸nr3 &1:9vh^`ɄlzZ`K0icjRTs˱+yjOZpe<cnb'iGo=B-}p];~OiWYznm_G:dg9ksW ling+]!TK2B* F{9?+ s(}X:kM4J g`n2D�b'4@a.x{*b3+<G4eCvK2rD4EAXI◽6Ocv+jOKo 3O-cTz׼iufq %H'XX1#|hZ\Uq1S3َ?|M9'⨷"K]cФ+ӻE|=y" oɼjuxM. qDlJ0kс3:O'KXj9ת&VGx. \ ,'&e7U +IȚEtޙ\K<j/nHiwU[F噊;A9"%yݱ]ęU<]X(ew`\~W?~vBOrifθ딒g3,DFR4}e!4uӍ=%e{R*89DxHG 'u�+OG՝跘I^!cAN$6>QX0Tgϰe hIڟVƹ{iû%l3Gi,˹(`�soyE2ws�IY>P9F9ص͂6-S6(oM\G[1'kᡑp j0_dO b%zhTrƟ -Vw3"d]ʫi�+.{Q9ĭ~iC '^uTPb k1+hUIz]9e3 F9b􍜰vgq(8>լw8^UW'<3( 6KݥP1TĹcj^J>޲g|݊,p<_ֻx;YPO8CH?W XEO֍´ I}OK +Sw)i:nABvx$**y7ڏtMQn5OEpH,O(:kholqdz?_R$B_8n?aw<Q^3 W<YW)Cσ;)~,M"~E : #/ j5Us;?o lUkk/|#*$ b~n Dl[UEuJW?ysq~*"k*;feVoݟvΑc]k/ȁ,hc#~i֌D'k *NgFO \OJ ˂1]rY�rH bm.,M V|V,똆sO :*ȔA<ϵ:(0a4=$!͛y{ cԳѵΔ/�O?#H̵^X^*1ȲEN]ͨ9~9Jʵ7Fygt r3o8bտLe,柯/•Rd{S�\ѥb-zk# ,'c`: z:�%(E xRGL^շ2o 2u A�۬\GgV䟻.D?VX|ڗY5jRۇtBAv :b^w?S*\۳SV'OН I9À}d|hJYz䔘 ʂ5qWq\"ٌ3f<u,2[^dG9QU|*JNIpFc/-d a<{w׸)Rp’D0k+ٳ h߿bfS&7[Fj I!(fZe3WsjIMaԤ?FnE`oğp&^{cr|ބ?$x+? Y"ǫ,OWmW4ܺ, oOf3PDV[)׷A<8֭@e7iĀnHFZJȩLҦ;~IY!ek쉊s ifX"Cee\ϣqdn̈́1Gmm,Z+]z]$jb:4oŜ*.兜ΫtkM^lmt_TF[\-f'ٰ)u{[b\|4*lŹIU;$ԑ3nC:82okUmO$\XNJۥ讇7,%쌗x2V{,D)_>9W.Y摬QUGWCP܍C(e_.%z`{$]c�k6ChĔ�~3L jO$)CKϾQ.8?gc23"�pVm@PzqlG0v 5W6ѡ;= sF|M9hT|w Ȧ)o 訲|Fϙ{ؘ Xo@Wpfx<zd4Xo7]PkNf/KG/oϯ+5AFc l|h%DWg0kSpƻkTj><^z0=Uw9 3 ݬnȃe؞o(D�={y�]WA粌-SaoQ8LHv(c)>$UxS�h8]-iD=,XƇ IXc"ϯ&UAq&,6=?O#ܾ/If'V 9$O6]*i ġ'�:cʣY} ͽz )dzSOs=T[z=[m dEaJ"aO fFE"ҺXgw0ញUN ;Cβꡭ[WBb Z0l09q=>{T!/SȭY*}Xv'ixz*#p4iDZ0dwhԳ: `V|A)RMzx˳q(qUWpL�qˬ-YqzJr:qZb<QXq FC ۾qoRR۝(@*$;袂Ql[, A&ߪ#}wa]MjtP&91&jW+^\G{"y;!p+69Su F%&ٝ |nRg"CC~I<Q?; SrQ k=A~&ȣqe¨~YtB٬b 0௵HӑjВw+{=2ٶ<<G1w=d>ir>ȳ#KEocSWg REm?$4E4S:�W6'~([aQ{eY cNZ\%0mg*29>]Z;hZneiS0Ϟl@HJg#OyʨNg [l= uN}Xs?Zw)* X=a2bU96 )]n/w/i$N"%CaƞFk#%W3UBW@�4b85݁}4aM+ 5;q+5I!)#1_n0khUÊ@lKN[=:D72?>Q/Q͟rj`]iz Ngm<>j澿On"dO);a,YeCC"-GnyxE}{^Q(k:fU M+>ZY&+f:krBb65..װ4K'�,}$?D|_4L;o(Ɋ捿}dKF),q.Q2,MN>C^%ombwe0wqz?7Fcԙ !.q4NrY|LDgz^UI<{lV\:_4Y�ū,W^n[a  >Yz2^MA~(kr_HyIs+- 1˫t8FGcirqBx+ ErL"O^ǛH~& Bsu,Y eH@'L`$ĈXǀUVߡ~ sعVtŴ nW9?8{_<P5]C<N챚cF6,+祎R@o58 :%-XRxeDhˍwhjhU׊%dmMa[<I_p%9QeLOsGd[]`e Rߞ4g[N[ko�O"6͛,dčR. MYV i^HIgU)-孞Fg>'%|Boѷ8Wx8HT(&^g4jDq ؞&#)_�tR%&{EnfɲԵde 1$(PʱAgHζ*}zֵ9I\~9ݱI6͓4Oc|5 ~А+1Oþ2 ǝHt u ~V'y~Y/* 5ļCbRI#6>ŰǡK9~>#TTJ4,ݮ@f{[HZ^6b&)ERF8s^=lBFQ(.XMqYwիvI V9UUwҋ]Ok"lpen;%ۺ#7Y6Ɖ/k=Kmۀp%QfOnSHn'4Wb}ܤ@} ?o…g;2xY6R*HǵUaYKĖDwG|R31_ỳ2h h1uXRzzPI2ih4; 5ELjw8k j͙]\0νs4 +J%X;ĵUsoCnx!y) sRRI^Dj6S㭤  RD!O-#apJ[TC="8n:5V,`K!/劥੓+egiF=%aB}P;hR}<v5FoZ΃7'bⰟWѲ8K (7#&6J_X TC e"V&AJ(wug|�IW+[4nx>yT9TC`##[M{-EQSsT %nY;_ 3C|0i6Xɦ3ٺ];ӫnFo]X L/רd |\Q]>٦r\/&mjo_ks�/u$KAQ8QBRE H骣k8Y%gAXz }L7;+yϘeʺFMtUv|<[)60 m~Ի0UA?O]psFMNĝ9Tv,nl斂Jd~9WwSu6Y;EN''x #i╩3)_1=+%kn~֖(J{_ΚXX擝 mg]4&O>+)ޕ̳sDPxx*h'(H&b13kVX;re|t-OYS>62Ӝ2%il XR9Eɪ:w;rg'&ZUf' kpSǵ/ ʢa<Jy9'"i>.B;\kvxRk*399f9~ k|˕�ʵwHȥدG-ۓAE7b>ס dd[T#1)UVX+qv\c]H߬JAQYgU| ޗ$h{B9*ҾN+0cɘ%aHmp"ڂ[f<ow @S q<{3p*+{_^wEW;qLR!,>c=T"́b7[N A@Cxa#v.R?Cx8l}X:l |h"sgx(ÙDqB6I.OuR׆A6TIڴWy_y'qk(kε.U6sb<z \68؎ެC7ad{2Sn_tǸ]b=-EW8mݨ} &;Ws|jg%YEקz&3ZaT-cD8+�G<^5Xm _RGe r:sjqpX^ws88ʐC�;OgَWB5j-:˳Sr()+Js]wFͲasH{ng歄L55k!&+xm"M,qϹ%Κ,hugn%mCJvỒŹN�jvEd4G+ شP_lJfe[ċW%qǤ`]{ŒtT\f;dmg>T:v~hѾg$_Jh<.}@Āfr.E<Ӏ)MBӸx 9{.+B[zj4rzRuLY4Q6WPyӬѡ! ,jEdWz nAvw@٥H"l2lW%%w|픣FwΒш`QgCa4q_ FNo't^q̼ck >UgK!,Jh˼ T+Ϸ|tx^o WKI I%-;K*>C(sj-N2P&\mhN4Gַy*41m "m5KyJf8ޭp8{K DCN8ĒD[m{BdB^{efmjXGD(ESSETW>i%CB˂ԹWHWJsDŵ[caͷV=.VW\W $\Q4~YrJ0pTZl;#�eC AW=J~٦t C\/iS"geIe.^`dyTmm|M߷ǎ+7u¿{ lyᙷ%6E3ܑ,,TX}VÖL\RVSSk.= ЏG`UBvFc<ϻu7OYb)[&ހ,2̬*~$w Zs8DA+t=a~ B{*yslGL˅0O\<.fyeO7*/KŴj˸L&vXIq{y^qMSG)o\+jZvHl0<''2pF| ebzU7ꦯ>ΨsePDb'`1$@Uzxxu]ge gJ+ 9U3Sm?l~1csVd CHt{7~ԸM)ӊWyrcd�ބ2 ,;#jgu*{~'tg7f׽6e;ִ=ewGRܵ}v̆UarV$x89Qi˱Xc&X Cɫ v'亊-RYѿ}"vm4ڳѭ~s&\*LsFDm6˳d+RC{Ц5u4ŽZ?\rDV6T6qny=ՙ[\WX{j{(M,%ؓ?erdelXF`<F @R kW=}Mɝv<a.th*p@L &~D= KhZ|~'+zǚg;\xFEve߾Kp;!,`roے;m)֬GjP $T>(ϙ'bɡU'K ޜ- tPm1 aߏmr1GԇpYvorv7C],'c3n[juYFw >A:QT}EjVs? ,'{z$ N(jEelqIPz1205}2n!].{>m۲r#^ g; >c._f4IǚLX3kd3 .F7d5Bg,0ɝL 'i},l!׾쯿yV s*:qQ\lf;2iNp@S҂zʕPrxgjJ1LbRB/u[#͛ӗ8Q Oeeİfho։,k+I5;GqT�/?BꫮY8۬m6sF !r 7FO>Y`$ljts#ue$#zkU g hPcJtf#Nny5&@icGlF6e,A|fEx)vz_̧|V/qQ|`gIG̮rxy@)[�mh�7ιzo ݉+|""dsaߑb%m:PĖgf/[OwLxy07B93C ][b;);p2k<kݪyk+5t( #X .\!`t33l/u=#WM„!6[y2�Li%ıiA~\#ו@Lv̙K7:nly|S~㊫,QpQEO+Z^_ۏZR'd[:<gA~OH]^eVLy^(tR; 뎌dȷ$\{7w-V,!W*.ͣ{K\S()P`_9_$t`KXΛ9w5ioW?B*??s߿???/Oo>??UAV&}v T1S&oT}]j7Xo\ƹf{KSNd[62S co0SSi#;`5q]a8Si,r_Fy~A5Fe1 04:)%Q533jy2ٸ)dg9V4ΆU&,Nj;r[qk|F+6h�lr~l=Isw fдy%uX!\@޲4yOT5UnGKҳ4}Y/+䵅yJ}̜(^kXs0f'}GnJnՈ9;ze=ޞ!r"f zsH4AGݼ-j4~aٯ܋@TW'} 9WP#_M^~5+&h;P O Ow t7Uzy\t@>KNۙR zΓTG.bT6s e (5Id\FK='W1[ 3oz6pnJ/(CX5a&=ňAp*ۆLFl˶)!"ZUqe*&q=z#H؆^[2*)s/\o6֘EfVVi"x[0lϑֽM=~쉍Ew #JD#o}k$dLXÖ)Qŗq= oɃҐI\ VAo Y}mJAq?>yEMm71#yoc7|u˼;=ǒm)hf2(}_-pkRɯŸ),B]njݞ߳ vw3|6Ț97UQ0G6s2?l4g|JC~シ5J3r-4gzB0^/%cKO"+':dwQn[s-YتW.0zO. EW|o4_b÷Wq~„~:2u+SI:4'\FESm*TPTmV54E\n@&oIMLs0j% *Fՠ3+;og\JSʔ=7<lbO.Q/fx!t̷}K1[y Ѩ9J4+}ys)y|\�nCx10FD(ۺA~T,ϔ3.ˎ.cN΅j.ԴG)_xfj¦>[djC;+3xs9 rY95 vې)1[;f|<K b.C@U`mLɝ)3%. ƾ!j,!Uz< l:[h;3Z}U[-!^�ɖ,nV+(*#{u=eOJ0ٲø.MFuLli_ xs5"˜Nnzʖ%C%3XT *AILwF4_e oزDS7*Z/fep2Ahd*4zE{='?YM̾{k^woBV 1cE5~o3EU|BU(܍ zŹ?+z3|+|)iiK,,lX2eJŔ�ʓW@>#1GeŔFBg-l!*Q{Ϸ,T/(l:*r ^);N!XvƱdRoLFsW4#"q[%r͉*QX"$%M3??nQ/{6> l;qH|b7F^c)[Nݾys)(x*&S7.Q V8VO$ r ߼w';VU;14ڕ!WA(I l\OԹeVZ}P对CdWa5(۱$DokVe7SMy4NS3k5q!>@HBVi27 lDS;mXyH2U 9_wjyv)hFgU9~ge_*sk Si^<҆f/l-Eljm\<kRGFYmc~#_S'-ۢ_q)3au$xxW]KLѪ4_p`hhL[˭x)^D0܉/QiǘI[!ƒ򢱼$sqͫ>Ƹ JhY3',wYuY>SW$k'7acB /;UV%F-[klòuf#AT䞚/J [:.̭_V8bcX%N.Q?h&g,އMOs='{_O:1 =mOo4t5ؾ0ҵ"؆ɫ& /DKЛ$ k V SE9fj?+Wm˼R7ծn 5'ʚ/>3nK_ef]XyvH|CRχ <!>3n4b^R^j=dZO߅V*,Q֓<Fe~jqs^=VoÓ?G_'U3lEYI s+J%P<wlί*BJ:y`gnRFV<! s¶AmAE0=cck"rDA#�-\5z95<yQTJo3@=bbu]4e&n&i(Kv)՞%uy;=}Z_ S'9=EEe<y=햛}Tbܼ7oEǢ_K{]umO_3U7΂5X=y/wlvm|1ػˌ2(܈=+j&Y =lfFQF~1uYr{4b \�<.?O_S�$ p|v^5;MSK1=fYitTK8V{D~{Ơ:]G>su#ӣJf>.YF{CtM)lx2 xʬ"B%H;�ΊO4 l#gIp~+p>^W]l'^[}Wso 8k+̢9}tfYHweg|mzM_j:OB&'roJkJ$BF^ 8 xAyVLNH-ѵ K:jף=xR-Y6{*.q [̯ϊg L ~*"QQ9=^]lD%d~FiP6tugP& %WèEwLd=`Y$CĬb|pr cfWE'?x\BòNBlZjUk{05W( j]-UVsW~f,B-zr*m{مW]SHWOnwd<ؒ;e0$,᢫,m_y^f,5 jNL! Fk eNZW=,?,HaVXM]l|YV88j埛GK-暭%qA4S O (j<t41l .kލvUruf#mv~cVYvwq;M{Lûo[-Ƨ>xVXB5 F=@”nZ qɱ`)nCDr\OA3#T״;Vsq_/Ȼmhbr1n2kO$[U<fO+Yၱܦ_>Y@]&-vaJe ܏i噬[U[&kbLk XO+)Ցu i.E׶me 8j-)BAǫBDi?[}nrzYl/"[ndF6LL<At7b0ƴ{·o/:춾Y28⠗eZJ;q6 ,xڳv|pxڐ!2;(Ƥ>j;. c żko?E f{&"g.Knr+,FN0p6Ҧ^Gu=tunI F+BVC@S0ڒ ytzPGΑE,r!2 4^KZB.D)~)75Vl.SiFՍp<,۪Ҹ�8⣘R@fnqɼcr"4 {`?(Ft;{Q,:=:juojX;<|j>+^�}yd)>34goI@*茱iB) @ gPy\to;enٮ lQl sPThyG̲i[$y@оyUVg#isMIvK%[U<R:y>Y4(|q<Qo/5<'/O{+0SBu5*8@x{b0oGY7}B>R叵j[:jejZ,U̴{Y;KqUhD¾9KB&fQ91fA(!:hb=mS ڌ#1!\io]( [G7 x45aF [)lomf@i^nC6f'*GP$ǩr1L۬ ޭBsG[ln0"t^b/{mݣGoW3xq:5L!QK.)-Pk8nDvMsc֬Ug((A[M�9܅=9mËdV*Yi�?#ua)~)U!P�MklvP"򰗤"bHVjqm)@YS2f#i 9ژVI{y滘Ύʥڼj1FYcDO<A ~!le*�+р 54z9Gmp~1:61f^~E˳˄n{H#0 Rm6F�Y#܁9[Xq\ٕ 蕪鼳0Pr8ۇ}4uZd2`f)*92|ۑbEnjbgQ"gVnxqfz<egV)3ntHzI UT5ϲ^ bݱw$r7D"Kt2߫zB+NRp.򄧧[`ЕxB<ؿ W4GSV0<Vf]TOWZLfA C6w9U`0< '~d|7YYpU UMv qaW^> ̃c4ΌP >2fX5$,SpjZ5h"h~VȥWi^-A<ٞYmp" FjqzrWM>m'xkAjs1%C?ڦ΅Z6:˶pf>HL]Ua^jO7 #j6 [lOyH@0Sln]m֯6R6j0ݨ w+Frd*I}Dg%v80}cuumYp|J:Vdsz2͖HZX2[vd=ӓ٪~H}C`YFpz;,˧֤dGF,gY"%k@ˍZoԯ˖7>o�ml YAYRn&n+ x)ݨf$l:*ief#7U>0hk&"%f*ouhoH)348y~L8EPZ 4&,'<f|~0~+|ƾ@ v\˹õkʭ:{Ij6lҖµ߭e]%p^T% !_ S<PƊLW4iny4Q8N"?Oܻ҅N0Ϊbe/m8668!l@mFq7 4^?M\C á l-KA0R!Wvw[0W| eh69MM4DU:nYϣMw01+%ƈ?9 A  Z Gj]ԒyJrJ~^<:@i*^m+AnE$hiQql=XO6t{7@xo)6@+=Pܵj0sOLDZQc5C:El`d˽X\9hyobrv]2˱@;�55"`-/3fI)r}zbS&BJɈKhLt-&_m=u\X<h1k6a~Cu:۞O#RΊyl e*YU2ektw\u;&@*k\`1?2u=4vqeUnhz[#ڬh,/n[#NW5tTz JάtyF$VU\&"YwIHz#8u\4pBحsH΄8HӬE �"̯gJ<!CK,5|;{AB69bט?77Ġ\�S<y۱DӒD ^O)ry.[wZ g1 b Ghb[26sF[N K2^M6;4?Z/K ɧcVx[~5 'R[99`k@W!'8ӫl ):@lŽIb! u@a^8X#Z ]T�l<f>"2cjE'(CfSĽ$kӑyP&5_0eR԰'|t/s{MZ(Xe&w[ȟ!*ֈS 1ai4 s[!嗁X6Y$t-mF_meOu@<CeNJ#&;iPVۙ׹X^'k76W6p˺*)B+f. C#'c�0uqy[3 �V^y9|j6AYlSZ̓8y4;yT<MZJtT2M2~#` (0?w1HT"eZ5 $UkKx˽w QǓjV<@xPh5Ft]:"6?'xABs R$-)KbSϪ<l086UHPѕ4 TGWXaub5x%gkn|{ L\Uܹ)s[/w*w!UfD5B}\ oEOq_Suwۜfks*`c42휸(\@l8 #l%\xCXT:U11')o(>{7gT.`ǚ�<҈4qst7olK_?@(J{gϫ[uQ`JZF[wQ 6rM83nb*sP(ziZ(,s?UȻUzZ-}R!p> xݺ^"bf՚B"isr0Em-pң[rK:&Y wdȷƺ\QyS4eo9|ڝؚyЬiBZvflżVf֩9$Wc)`bp] AnAM^VYּW(oo0Yjce}&d;td㾕BGvu+Zh</ 㳰iu+hwˇQip(4p4Fy!z99TM)cb=Id&pPEOi,$"hَa.Oaet=*Wk&z>/tWJ}B_W9Lۡ_1g9bhy5Z3zFf/$lL~hR2# }fX}a*͌W Yd>7:X1p\a7:بVO B]1_$:m#[Tooل=lq=ȍ'nUƷzWHQb ho]Wſ"Ur/ZB:+>k0r6SovƬsۖƳu6#dAd}4F|άwNI꾕lfqVJs8?�OFP->"T}PC)xg]HQ\Gن%/"QR ʛx ηyfLeꦕn٤i[<ڵAѠ䪕z9N;<1q<ovg4 HLEԽ5+Ŵr;],C%x*n,mʨ@cR`X{Um̷<dAg; X趚%6ѧ7Jջݕzo+qbf%5W�d0˼9/NapS) .Ǝ;Eea$2j]U~7쁕uѕ?%&ΗVl}n>!lG3;Qri4p6ygh^ #g1=O禡 q@n<T+@2[ScR�͗^=hV_)h%JR5fhe1vό.BQTyu}ItGLst_E;L{80e-O?�HR?J~n^7lnbfU:]6 #uXiW{d[Nh&k_+Ivl|Q`fj[ı 1Krh$݇4ݶ4~tXd7Mi@ɋj/ni91ml t]?6bmt{W)w= s< Lspjٗ+֖QRV+8]dfo!GlbU sm{ Qu{oR]24;bF]'pVo ր\}4"f]#f% ؊#D\f@Rڜ KȦJBa= (ڀJjQqZ=F;0N;FRc/{ O];e#h2orJ?xvўQ h΢E51 _\xUMk3 *rM(ı@^scח*kZ*.4^SI?<H 6dNeJ韧 rE<gaU fX.ϼ"P&2WXůRH~�&7I6%h۝w27 -AnѼK{YO:Yl)T-;.E9Rq/x~+AyGM4h X .8,ӔiU'^,@%$ڨm@$L%dGs=3@b>hdyVVA%B?tA;@t@$ZC[Q|Wٮq?eJ9oQ&:84GB \O-е Bdfi[pOK"-B56`&9~F;q3K䳖u>;V%ܴBZWnbL>e#Ld1bju6m7ձn4>NTlL²ܙ?lnu6޸Hl֜j-do&c=fG-ƿVu+$.-h-3 ϶D}&vDw_s뮑 EJ3,LM,z/EQKH(s @zs"{f':%_ixYn8?Uzh8K3)� F, *}SEz<'o3?[�ц:lX#4⒰a#^u<56T`Dz`ۅ6<qЋmSQpT3LICZsghAtͿR0H0ٺ+;,FB~xnb5 \XOo[.37_W'"f/Yo"qB)JB 0<7XXJvM \DHwj虝hnXM]!7ELۨ>Cd>4Vu(O}Y{4OUkycى?]mI!~vG׳(L{qD)΁ <ھ3n3\ c1xktIC~s,St=Կҽ7gguFo.Af8 2eHyM+V>n\3(L:l)? ~T;l& Uz4k\d[b,Tn:dB43I:CكMwJش_׈<cwu#Xx둛Aޥ0<j&SW5K9"X;d^GV%g1قpϦY$m9!!G4fmE^"gtEzBzD}mve4e)UnƼqm#82]:f"?߷HL/QpOU=xj4U͸e7)єXE0}T]˻6v inU82wz=rcW먭OY?96Aao{{mXrd@Ŷ!ϟϟ_~?_?ޟu�2e7N%)Z2R$r2w߮Qq+_gr ~%cv7a3΋MwŕJ^=i}W_d=EH9q읍혜,Az>*W+pdS$rfֿmnl_~>y2_*& lFEY?|/q Si/1K[\~`JAoR7yXF?8:%&JpUBlS#:_$m7BKJ`/3 9 cST5?PvǦ+ٌ6V8rV kp"YmY\nQy<:KpE5jǿOR螓ݓbAm�ҫ}Oc$u|綘B-j&[i X럛u>[LBC ʍq8Fi5VPQӾA5= |݄L)Hfg`=b&v ?@ƽ^XS) TXLGMx7\qba[%s=DiO>Oy;B=&H.#,_on- wtO63pKIڻ!n뺅y P~b,1Ly~[+oN]D;rp>Pۙ 7[%_7 b^z\v`c_dY`F#<7u$Aly zVw( 6=G'Zwrb*gA* Fay6dReྵrC73好J%톔4 8pMǭ�GyD,x?zRcXjDM*SV0l"^exSXLPH/sxHw$J+�Y-zj Vϴc;*iyۊw0"6̖Lx36DžoHQܕ:{k bƮ1x3qMMЩ"% QJ#.pˈS*= !Xp]8αgvvv/g&k?,ӭ1Eܼa7[ udYY,_N?c$ے=M(篚ra婑\/T[ =(GMk!%Hn;Z#$4ay[ IjLzK0J3GBҺ72RbBh<?ʸfPX<[^41ռ(/h7wYOxgGC8㋟w㾡M<p;"+HsD<a]\ g9$< P[Nص2S\ 1*X$̈́[ȑvV�y2=)7u?#vËձ7 J޳8*ͷ uVPz�փSOU<ӽ>r31ץ9{ӡo|o/5UG0vr!ʸʛb^gx<S[:Ddă0֟ǒks#% e꺏V~Wkdo@̟Av=+a6h/~9dzPvv<I~|Ԍd1;%ّRPxْ7qȣ#F#׎*(U|Mc" Ӑ4/̻¼nٞ؅C,G`TYџq~ !֊U/&̓5Ab.ѣJl,iy�+ŽyrP|Sܔd`:Pe_zJm_zX_|r'u=^g<71D!XNBϊǾ)Z&5*FOo]-놑uCo'aXF~ 6g[e4>!~K 22�gkK *0#WեxHE[ݔ^&Ju֝8EAB %2pK?]DپJr0,  Bc~fG7HV-w>Ȕq*! }*,)yMqk# "`#nS8@#mbKΜLʾ"[wybs/ZgOzKp0P 1c1cU۫?3ڷGgns;r [s**"Xb3NOqG7p)Wspz�Ѭ|dX] $Js$L&{3y?ؽ8Eh #xKTgl]k^, #y^;T'¾ R)wqW2qFTd rEA*I*ckQ\<f>>Oէ^/jim?2=;BKu3o)Ϸ?qL+iHHxVcJ}aGq|FYbY1WD*C6#[6BAN;܋U\"WySڻL\@|38 yZo 8QchY{TQD- r&D*g `F)~+,_Y&j"c(>î}6(SPΚh9;d9vhܨ3'ޜ-kkž7`8^q$G3!ù&4#S3Al)g]<Z➹=^+j8pI+|qNMYVLo `,2Yg3BHV>dedW HM"+*Oo6sZ 'WeT> 2#5X#boWbl19.ovҺ0;C1Ujۙ k :6) &�1\/JsqntBDI|ttgTЪbg:9:bkudS" ]et?PW5~jcv=rP2W/|ؾ,[h.e%3| ؃Fs3GgEH)S>Ix Gq=2#$/Gʝp0Ͳ ay) UY‹aJ H囿L;: }GӥuYJo.3>YjIy٢K[}@a>Ԯsछa]G C<_x)b}|SFO<Rv*վU"%<x@g MN_Ůo3b1DHO]nUl&J D :iahv*qvMZ9J4%DQo1NpH((G? !x,iFE>5>n_;^&qPG P 3)מfZ5SBZp 3y\e߈{Ba\/7&c4>쟳 f6`�~Lfp. "g^Q^W2DN*]gRCu]wdxY7DiP@�*oȵne ;<a7LyFr)Bޒž%f?wi[ �[4 r@j"xb3UJfuw\Aڢ=`3'XYQoygE#Zhر[4Gm3*H3Xgȑ Q*Jͺ Kyq4ҍݑhz*GDHxu;=K{x&ȑyJ||O}X$x�MpxVWdClX)/fǛU`ŵOkAN\Ng+r*LǽTȝzPX;#.ٻRgq< Rc/Mj3f!'.aUK";kMU9exz?wV,A9({g~ɚdD+2Nᓜwseɐx2z<3Ż$Z͡TŜxX9) Sa<=R6o_u.E[o]kKY֌%GEFEj;޸ɚo9֌oq3͋}5RkEhT"ÿzW?АK$ ]:KrooACÙ;UaqH^# Ǿ,XLmggݬ\7J+iwޯ!2 æǸGgFPFqtHj%[?EN- f.G9Bdz2Ψ09[\20zHqM[ψH>m}R<OVcU -MǤs<.ac+foX[Y߬:)M9ۉ.ɞ_Eq{?/4XlX]Ԍ(0GC9$lXXYD{ok[v]p1Bw?0B 3m=ZAW Fy mR:bWsb@|4eyUo 9(GyaB^Ԋ<Db3MCwdЩArA<幮!hxE}1I˹4#ѼTN%׊!@HrɌ2v%덂Z̾jFZ#L 4 Lu (%OG}aG8!6Dq3/|)4z(<RxG,i93} Q:"L4z!'T pWC4 O ;X}"C+J4E:-lpayI,mLjN(Ԁg` >-=+W`'n\JA- &~:݀'s`,9Ȱ(k)=b_rt^c<c+z|7S$Q8@iK}2yQF1;-#|4)d8 u[�8(`X == QNԊӨw'p13� dL3%9{Hjq2&my$s-c}DG)({Dj8H bR20 ßK@azkdȕ 3\98 ]Hs Ĥ` w`x |201U jɾoG0rVglWrg' CctzsA[bv&dц2cvVEVp"Cf g!PBAzx#HA|s'R-^<<%/ɝPA]BNHO;I [R(sU, W7ZPݫ+V2$rɦ[d q=gKeuL4#ʍ^4Gn_FB_nxԼ}t�B1=P|y>;[VJ&K r!@gKˊlh_{J'( 6!ihi߁# GtIgn- YNIˆ[xeQ�fؖ0{ld{�Ϣ{sgYVf]o1! 2:łN; 6<Ss�#ZɅ:i#62x\:81R)gQs"0~:U6i}}UoOIW1K;@EĝikXx*\8sb?T.Kfɵ.!QzU;"DbX\@Dnԕ|W@sM ?0I{IH]HY +hkswM-cgS!*RUL hM W`wDl\ s௕&DAѝh Abdwy?-J Y3(!itVkOHb߿"CHЕ_Ѡ|!6$OVժcFlYC1DQz$HRB_YKt9C:gD#c$,n!JCӧVC^wS<6֮) 9y3gn|N,SԀoGHC'ݐvAD@P-wVM"2Jarϡ[gJL| t.d+ ucY2`PO=npMlץLU.ZkbʃvD�,Ec±'SטX LԞ_ *}w ܚyVVŵss HK2^FLЉ =3O,p(dȥ`bM9lF{=0|$ U̠Jiyv#A%cӐL4H{+@Ho8h zcEc3T;Le`2 ZŁM=E` rOB(f_*+N1=*?lX"|,;7Jϕ1TBsJ VO@@V/1a:9AG'\0āD](hd8% UQv|@GĚ 2nC\OvbLp/OFNqn��|](I0>gz/T [ȶYځဘG1ng(4~A1J?Uە'ɘ|O`JgYА\} ] PU׏<3zh0u<ƒ5@,`VEyFƤN>QU(dH: j �fp @wm@JλAXquǮBn0FH'+ia Y񢕣&e�až'i7r^ sug@y)$IspKiFAeVx"BV,tˆSR*v0!" vHZdܘ#A8H| Zu`F&/5|o(?V w)p2+q樋J]o1MpHr2j48s)sfR"(*<8C*HV-˾q2c8gɤ?-]s  'by ,�MgK??ifd4f]$ɛc4p&2,JX`;Vu 8v 0NR)T1ê|Y 36Yng1՜P<+*-' +g&mY3簍wLtge5I>P9t |1ɖt cœ}i[~)+n"0Ya*<E|mɾ !Zy1%B- ػs $8zO+*ݕ/~9jT7x]S"އ�OX!b8ّ&Fz}n7d R%Ry i!Pw z<|Z#oȿa�?G|rU=giK;Clɷ~1 cm| H<[rOM ? /00}h2an8WǻChGF G34mgei^QSU iR<�-ݚY PnԜ<Jҷk454OjA.:Z� R)x.ESǴص)I49EF*[4&S V%}KkXRH`+8�wr,C^??؈�Bh/DGn`A-􎚌L}Gk%c(NLÚ`4!u>f2?+iS)豿\>"ȴ9|2L�2D'a"0>2:K (ly} d2 Vd%K&"B^xI*0!JϢEl)YO;aɞT.PDf|a'YJ-?L<>Q `c&IT"/N[*rv%Q5+lS`r:H4~_Oۋ\S�g^�S)@7?V/4U~^':@=RM˻lU ub$Fp-]E<sMA2@*sޝ3 Bʲ<EMC\n}2AʁA _{XT6fF93{7 Uи;p`rM*6uy9:JZCAqt&}d_M+0BP9RUx?!S.S%=P]&q ̑.{3&�l2WNVșCď|(_zArsb#GRDqyS NKRB2{$3Ir9:F^s!} v4:{1BPmIuZ  ZRy1!ӎ+9X:2HJc"ӯԧHzfG j.gȣӑ%&O1( $*]2YĞ [l4? p}ӭAF 9-mCR6-JÝhɛ%1b׭"PzZ)%ZkAP1H?H(4?ݨ._rpjM)54vea;8:1H&͞ UcĔ3N4p >�Rs400 Ԓ h3sjHVNjHln TsueN/,:KB\XCi@�pIglZP']cu&L6cI T)E�UɑoY%KQ%F7AdrVo~`AF|I6F$ː"qT[=8v`5eJ|KIEN[VA_c6,_ LԦ;%䟱i꧍#!q(iH!D s xu  d0bSaPnɎh_&/,e-6&cN�$cY܇b PD^X]8„[ \Dy<iU06:> >V!uF<#^"i!KP$KK�nIJXA,V 6ē*f/n̑D]%keēS9;iZO4y# 6�isVsI/%"aLjo-8p k Hd fd(7&e&d�_4!(`ؒ=) >47f�,ד-rpRe`v$!OJ0‘$fa:ȗLr�"{�&@=K�.uad6;Kv l2z*׊kB|$>܈!þ|"y'Cy<0㨐KZ6^ =۵5Mxвa%Ӈ\ҧW�5xzm5trݫۘu1-i&2cl:Un`rGFQBtIO1ߋ:LT2߅T\'L ,Eٽ IxK [VNi񍛤Q.׊P(|IH"IxHR` Ls�Y r: YzɑW7@Ş-6H@[&&JscRtYۑAWzegG:B@Ͻd[vQ6nt(%ӛw5[!RpL23YmJ}`jK_ɖ!p3UdTX15EGPa6 HdumݚsNAɤSE jWݐUNj?'A[ ֋O`B (Al4u<>�  Ø>b9D<7Ztҋ LZQ]dmtBc}P2h8PiD&Sqe!1q.p1i AᬹscqP?3q<(IŀG.r/:BW"QOНMrYWem$܋ٓ`Ć^Uњכ:Z]4&%|V>=dBz-EG7ެɀ&FpDDyiIߛp.*A!GZJnl"p(.,gxtPl 941; st OTdU̙F%0\:S +[4{eMr7#9;ѳ΀f*E\faY#J[<S-'QSB $ ފ.O^]e?Gu]V9=ω hm2n;eN�H"ړ3qbI ͇ XlS.r":,28ZسAvѠHi%ɖE@`K !B;|8:1<QM~.%<uDwSM.K&mg7'XKthgvqP=3{K L S/Lϖ! 2^>U˜@Hj!dzAKg*{2Rb"Hd&Q]sٱP/DL|80IA,; <TG.2K HIhgWvdj& J/!jԀ+ Uλ#p>Si0M;)^VQ^5iЧ*e7ǂlM2SnRFHs`mUX&O!M~@rt/_gDRbb&os.LMAoEǻ`!u7Z6gN:U[Ȗ,Ԅa`B"BHwr*cMD $ DZfёQ}jۙnb箕ᓔl�ҟA:UN )Q" lLvIMҳjo 64}'TQ5 x23bĞOʜ5cW"�+p[)%{F(_Dжوf},TU7!A@{ N*lھ6M `xW9u3Fa&=ʩn(όW,_o_œTB|gQ�IjpA^| bx_Kh]�cm#fek]랔 "e/|ù2ޥ&VRj88&0ջOoR�tOT=GѓcfץxlP:Ǹ.$ _{>.2?JŃ 򇚠DŽ͉MIOG> vZ9Go|ܔH-p14*^zH#3 }\98 ֭}S׺?_y}Ưo632|_ͼyk^~+-nn|N`8)l`k=xrIzJ~J4I @He& &I] +-Jgt݁BBAЂ1zQ1Aۻ&~߹٨@j:Mc~Yj5+6st!6=jKXឧs'v)VWGo>{s]:t?[۷?o=8" N[oȏ5PRX !Ct吕b06tIikCn" _Ww4 B%u'.jKBV y;׿S('trP<ղP�5WatFg p+mo'eΑ~fU'<Ҷ ^c–L-%b6LW$6, p}-v\Oh(L|�l'ǥSec'1 سOW;q@1B614jER˼Ј~e6g(OK|9a(@$a ֆ E`1Vo߱o}Lj7?'3gB`)ؿ<|:n,B(2D5@(iBfc8+Ihe@<r`:y20;HE2]m[9dNa@d rYqQ8UT|sm5HYRul1ٔpg@+ miQi)Ot Kgozt:Yܳ~7N:Lx#O:,v0#/ Z@5l+|a6P. ia(ɘg۳xֿ&%yTp'L (Z5(#:n2vl(X#[6<rqÉ} ,,3ǣ2?XvxֿmQd0%]Ήi [t*2襤6 >ҏ;fISI[Gd]P!$b8,[�fƑMv޶oc1)wV7ԟQ Y;f5(\)XVeKA95B4rH }T©#13qS54j2edMS6fZ3][䚴-_L>W#QZ@[dǵ%tt["8<n)88)f&ԙiݔ(O l9 ȋ E 탒bvyzKpmR*(R_NdQ袘 iGÊ?x:HNP Y87n! sjdX*@2>,N-m/3</!<pptG$o@cpD|o^AUB]7aWO\̔Qn T*-%ҭA  r5A4; Efq"LO%oIC'ӑՌ>Vr%oIgxI࣮@}B!ٟ.I2^|=jj "p#L ^ Tn&/}}%/u.lO_"eQ쁒 xlGrc뷳g?j/#`H23bsChּϑ s/k�(qn"6v3�N<[L]RrvLR Qoo:dpOEb!"'0XU1dFUJ7Sz#^z{xsUaus(M& lS2g }⼕] '3Y( \rVojt�k\WW#q0Ucb%ռsQbP(4 =vi&KWrM4Lz&N$cf i YS&=1N _*dݭ_/5OKZ2}_$#QN:iw!�HO#0L39�SٸYnW?iG-3yUBv&qYwܐx7ܚkHzJ_,?bVOuAY=E4q1 ofV/I6?GY=,428K4bdISRdNߨr29[T|Jzl]*O="(撸AܙY2, Fپϖ*2G6r%= xAg3 ̡4߉S}֝ Uґ}S֔;r-̌\R~O-? ^i>D=:>*Ռcݝ?H6 BoӇ[l#'Ʃu@SE#d@˯ 8x ix!y,&x:rm9գ|iӧ7&ny#> K䀕% %VU'17&Nohe;`\xrɞ3]Sm&QLnR j@A 6 rW rhyy̜b6qdv] ХT<4O{;%1HMJ$Zۡ79V:0Э>ޗJ3\5+fh']/'R+ >pkײgț[Z䴄M4AOו/>A.(@Z;VzNdƓ^I6tmX0f2¾`obMGWuD_&Ӭ ҉@`!+wWpвZ 4(`%>~7TI&>Hb&,:MBOD4va珮x#kŷU*#MϣQvxX.0˳ 2$S� q5𕳾U`핗F;}[C\mKC_Qn Y2/�GR? /iJp HiRSaJ~,榓y;.m(H8 SnxSҕ9l,Cmr( =C[L\fA>޺ĸTeTy2گdUO2iuk53h c ]crьJhMC|jSE>Xh)[! ܲM a1VuRG&96 "뵳t e54h[tAAjm@3v~I! A8UKc冓=prlv:R!kE>8D9H� b500Q0D,9y]vJ=dÙW)Nlj`S@ُJOTMHO�I .;.ˢB^W  p Gp07sqL0;@}h)i Q(+;UмsDtQ󡱁 ̛&�ձH vM$Pq҈f=ꀉ6J>;&1Ta#H"<ȱ9muZ!/9VE*/OK5B4@<,^E8&}_׀ca۲X eP!ܲDLIEBaKES]zUW5Z#. XѦIfBv` m(~KF[{ǻ4USJu|n/}כK˻CPDU&eɸ=>fJASC4iELi#+>s=H|J Y }ؐNgɯ iPKs�# BO W  Jj\ oW?j*Jكm]ײbhVNtA1&+Z1sAY%cXieL| VKpktzYY;uޭʡQ2&`\GB? Hm#+H#BbT9wWb4[�E R'& .I�d6Bbj@dmC[l#/~VR=+>KĠpSw!FI*w^`Ednq<Ӂ9 MpEkdd۽_t=I* |DdO?QUrp-"&m`)z/:^0|U-zUE@ݺĤWHϓsJNs2l9k9L5T 2~ <8Ԏy"q~ؼDSIa=ļ>Rм>*Ir[ BU ]̩u_pep}^팭Q.7 ]Tq�aH<UvYy 鷀mȗ_X v*z|/bW m&15@p췈ge48 sIs= bi2"`-aQY˲ ;-*bhN\ "j0"ubr]fى' 'zeg fMm뿎m}Ǎ uZ62lTy!؍H`Xec"͠B ftFO^�[>U@>B}?&<drx\ɥI„8P ;We[֫m@ͮ;C"X B'8&"N&3ߺ mYX֓r55W &EPUVy ص){TO`|҂3H},w'wx;ŎQ1ǔ8Vvdz{>IYˀ>(_k?ٳ`EõP$ՖJ +�Z{ ?ag6IV9|5q:^f:׶n X++mӹG龓`06tRtҧ&n#@�,iy Sv)+$C6LzdK,ׁ�ÅA/m4bؚ=:~0'{^Oן}~_Zٳۿֿ}W.H t|&-Yt+2_*$z?n?£ʼnF|jgA0u2oGЇw8k*?2w!<yGɝ7%q05:@tAvN^A.hf]L_%:ΐ|ȷ0RF}T>H|@EH ]Kj/)ar[Hyw B}Nֻ XxCZ(VAZ�ЏmE!ɳ㴔Eƶ[ O:I1ˬF[5�O )+[9@8JCq+0Sd\x9[|kZS)D#2֯9Օ6R<UĶVmO T!^Xp4VRC5:'0CLOלJtW꾵@`%)s;:Evkw9G=v e�æ{yA+дPcOrt|K<e "dB<~<_^ ,;m hnCs /F4z"<W15o%$goZ; D(S1El>Z:;>8٫RE1NI' � {@#!*4V<+)Vvrޢl{/<goZ6lBOB3,:lp}Z*4MwNQ9&H eɣSgoZ6`!Wyl) fkxzZ�R擩t/ڋ-S_ZQs(" ̒!dD:w"/q2mqb%v~Jy׼ï}j,/6Zvm5P6о"נT+* 0ZR*�@"e{U+J4~Nw4?[K?=]7U|W$Ɩ BvkjK9 jpV*epCAgϰ c [FH럕75"KNqyEC@ fݹ5~O֯9@o�= $=3AeGP.ts > *X%0⵺n QH˪\E>ENKiQ]dwdD$30ym cį N'G3~ՠcZРب@7gϗݟa(kMűJDVbr)K;xC,=NM8N*kZU~?`LUBLw$X#5s`e a!^91B9wvl!ʠ>ڐ?Q\HZFY dCft`m'ꆊ-2_Zg[h7B(Z6B*KmذYbVm!EFZfkӭ"9<^NLdjKc}E._~Fi#OW?=i嵂_գzp6z[ѡLk ရ΀O\8߻~J2@ˁ2Y=Kw@)ty [PcI !/X/R7ea k{g6zh<;0aAT/IM5>5twv<o6A0RyD탄m�+.�~U,ڗ �1oнd:SB#/z֯14X[NhC1M@>L&/H;&B2| 9*I3ķx>\DېA) rӂwū4l?;-W?<IFY`Y).f^^L9-ٗ[xordd0k+tۥ_1(Ǽ_RȕXW*iH۫Pp<ռ#iIs ^~_׿Z?( _}Kh^Qe𴆩\XHu,iNzqȮUƻ%[k[^x7i?)K?V_}-|Nw&2 ] ذh }vwvy @J0°rւoQሀU3eQ4.A˻^=9,Lޢ_2p-gkSb� rt cy༃D$&{쇄;נY":/c81L �dzo>X⪶^noRiLa(k1` q>RXSԵza-pU, zuy~JOVYa IOa?kxx<uX, '[2݁p7u-' Ɍ#˰+ e-osc,64w~x<&xFp,_x_7!Pcue{H`jj.c_ q;1}n 7GLİ1a_ل!L˲#/U&-?H|ߵ;".7hPlq δa&," JHH0"H̥Y^tH? " TğEZVp~5"9^'FЃ$?<<gKxlF^a}W?`b[x q}i_ath\ι|c ɋf<;{bb~7~~MXz*h[ FR+rn-<7rk^'&ʭw>Geԯf+.sqcDО/p$gtg {8vYĻGXz}+'g& }s;)t\׉`<vVA܋m=|Vղ'nFדis1y{R\E!!d-gÿۦ" [~DJ-ۨIv�IJ9Ro-ACP8YrØ^3[[[PoRrSjag= >h!36#s~Bf:v%7uӠ,ZgQNdxD4ŭ._jkoZKDBZgX,k|LtUP}"qlhZ bjFz'SF0Br϶n)Vn:32`)Sh*A+QC={1/b4#𜨲F'bNGJsX}?mA+8H뇫u˽C؄"އLY|MdMhlzW6&/Ag#;,]/_*LoDEdx `UN܉'szuM57?Scj^)mE6ZvْDO}cy)ጢOO7- O>[a=?fU_p4+"LgH0b8,-w*\KKMydp *�YGkx;%!EEhȸc}Ouh�#h>(̵ߍTXc5>X6�e!B;f=F R0еoD`&z3X5-'9vΈC %۲FΝ {ȯ~v%` Z+ɉiE^7+KQh~eyenhF;~khKֈD"[m@P#k[ҏR4'0i W~FqJ>=$r)C-QnوeO#PJzgHcx'ySȈg<ȼ#kvVhq5 _dM6뗄18DcZfar4߉+(gn%·y]cP>"`˥L|_.Xho}kR~da0C7\_(aж'쑮n}upm})sEEt_EOqrt|ǗƄ&H?_:bKl}ȫgn/XPC[SK=xcu)K?l_h>h3ϏYRRhA:q %0^˙ʦ@_qߗSfo5e%ǝ^ݪL>@؆\?jo10b8j @V^c$8T8puD~#CFs89<LOޗe@bFGnW=KW3{'|NKeQϐ8/ߗ˿eD )$`šHn!uf=%bA+ J:cZM8BB}RR tCj|fۺذH_l5H<#dh_{_/©:=($#ãbŽn|^7,z.)5#o+hEO Ĭp'趖:9ˊ=vQ\%}y2&]0}|_~tFxE6ps:b`Ù)ِb=?G2(#]^oD m6;"ٱ@pkeNDc[$j1.-w#e6r{Go2(:_ot'w9ō=rzИ]`vx_~1@ 2 \A9cQeC`}XY{3<]ngr V7_6 gEK}scVϘhH�~^/t(ӝSA`!տ}\rZr_5^g,6#G(E]6FB3nDPM_/ߗe2=c'.T;vl*/ \??oņ};)??Q2RP({$RG=e̓f¨o ʻ/%扥_nE_EH"|aqFX^ ,yY-29א.{w>eN9eGFE(TOk~$gv�鑋dՁ5I]+r_1'?;|_l!Q ʿbO=t^vڮ}}]D ^TrS,P< TIMԺ̼1?znJt70yy4XeЦ5L9k;+:T:&n<Eb`ЯLG @M>f&mfm1_r] Jݶc-Zk;aQCALxL=f]#z|agge̫kzڽ7*;Gxe=㷠c@<^W[l<ӨeQw|=VNÌK2^Wg[ 3>6AMwE&^wy4 k0x*UCMx p{} z]X`b.uǡE{C cx}"u%M�$>Eڍya4dc6Oe_ AΊ<k( Ntij.y3bڝS 2x:Ezv,΁5\-&?Ǝc0؈]٨`ch<_M>ϩ/bn[I }}3qy$46 z@5nNbNvy.g�v#jBm-87rybg[K;퇠$-6D%wz|8_~s;~VWo{5?4s7$YGAy �>K] ۋ64"o1׍[c&J״7PgReQm 佥[}{e ?#&<^d9SI1rq_%&nW3V[=b �Vo_L=36X;1K-6-94]wh1)3: ӱW5!ݸa7~O/Yݮ".gn䂥[zUg#` hDsDz%v[$Cd{x-fwnA;`Ab!Vc`1 --ϊ7_w0ЮETAhL1v*ܕF}ZwIQ[mn[ Z~R;v-#qV|\bPT![j`-4>=܌~;g16G<XsW(رɑs %:-ג lH1"2+ >ֶ##(Ir;f~ 0tdG^b?xqJc;oN>Q+̰=n{8Xb#+U}I p�ɜ] w=8w=u w氋{Ql3�˓Pr)s̟kb4LL2r<ػ3_=։d=az]:9r α*ol|Y0 $92#%_D ^06"1Z1_!ZǏCD1xjI4vg=Ԏ8&AzYߚjE؍h.r<(y#1cZobD}݊{( :  `#$o}uIjR~~ǶKBqN?e&d#,b{p^PЕqsW"G@/`U'@"o^p)9?+BB�ˏ\X#TuyNa{D�㴨'#jC3>"Ʒ%/ <|%<JjM%J^> #x/&@Di/pHx!"GKl0)I|ך-R#ȏ2)%Ә! %9Vw$ lqk X =2(;Ba`s 7 +_[y{lU˙a8=Έ[K$Öf<U0`¦AxW'ڳ<q3H 1W 簏?G'A;7S^<{=ΫH2LcfZT }:)1WΦ38pF6׈ `l(1'Sq=B8qm^Y(r LzfS{qLhAozǾ6`ݱqu;yϧHtmg7HFK 1ԑu0'ƣm3"7GŲ^!˂ =]Ͽ8;2@$UaőtqnMN(Ǭ5##7ȡ)sjmP;TeHC7J48ozhd$-hË#fϡג(v Tg<^٧|cT6܋}lg\8jm ة::%#P9ƑdgU3ڦC(Hɛ'rbFfϷUk%q #4:Ƽu[&�9~SܿeǏ[(/i UǾD?^43$œl0ʫMZ~>`?F",=N]bDa? d##]P+4C}n7"L#C)V#|<j¬WE08/Y9q'q4_'cG& כ#jmGt>ǯ9dB1ݰl2Abцu_ÉK0mQTWEOJ,rSH8~ ʹ܇?Q<_rLOb;Ě^ߨID?%ߓ}}3�>m~%7$Y.jZC" #O8hnqX$.%G NsIG"NBքT9$b>[uIYھ�ShÚ<kD3Qkx.'R%" BdJQ0#Osb7?>(GH<U!M=m5H EDOtH( a<3rnJ^c*I!wZ$.~a8*~ڵ4 ɐYƹCCA jtBA;" uB4%~iR$jf[m9^&t]ױ6f͟FGG}i`Nb%1pGkg*(BU|t$^:u||=3zu r:1d(B1ލ#kzՒŲƉM ?.dEYλ`C!^<B~-4"/:/|\a P, ŋK/b~}cP?s .I� +~G x_>x|XLI=7=J\+CU[tH= \b8HAuR-ƪ.+z i�6{nŃGDlq\E)&)859bE;w;g.k},0ZZmXEаTwU1ci)-Mhc^ b72@Bغv>@c#\pNےzP6PluE j: oH6#x 4pU<!9F*�hǫ< ˜< "T̘xc>BEG(2ؔ&5gH) ,�T 6_!b UQ�/J>#TZi@ -8/_cS6[:%v$g:R,؎jŖ^"ڌ�"e?jQwߢ-VU`pPd s>f.w")*%d5*P?BesE!km)Êu_p`n,N>q8ILkd=*2q$2c�b?ׇ֠8OZV)YߏȺa`BCم :�=Y#Rp ^ߜ:`wB%87=>_n~>l ^5'zUq8G^1-أ당@}V!,%WxL"GDL6U6x#p?+Q#d4w79( lGhLs�|>[+P�8ճ)' RavrNǡI/Fb~+P%q+bGYG4Q&ݿsutH!"yCS_"sPĉ.czݤWOFd'm?#>(^.6h?<KfĈ.H~IN(r:V|"*t*;N 6e :Dю,}X6�[^AD" g/u0%ޞL-L M N {>6@aQ/цH(>Pq�MlBR磔FIeymސ!98dre!"8ѵHc Ͽ 6V~DKlH~mo03:ՊqEV w0h=ooCՀY8*t,+Z|G mXX-:On<wNDR-X:6IX]:0lM7KJ(@eh|<[#*b䥦YVP0*e�_'_m<&M /+4^ͼ#oz" b@hQ`;T\ACԖG<H0}}ccg89^T8gEyYS>>@$~'Awȫ} oUq` OFk{t6\(&m +u8'u67?@Ʌj“Bb />8_8%S::3%y|H=HcS̽C@`26yY@["D ewFF^sh Bzc9G@$怘$e)J AU=k"{ŎCp9ꠒ3U xfHh ];%hc~E ]BшTSX G8B X$T c:a ^{N$}׳ؾbjGicWąe7U!G65|oR7Ic@Ή`W~g$Ӵ3ʶ`yO ǔ(ܣ 5T6$s<* %0g-cL:6 `7?wX((8t_Xq?zYaji/;U 8[aL©@mƘT5Po,F54yZK7x8MS#VN+;(|`ќp౮,lY>`ڀ|`Eψ}mPCR�, @O 7b.U,46ڦƵjxc̀AnѨ0$bz^evg�* 7;v) ϞHn#KӍ� ߍhs!~hW=@ړ< 26>)g|c}& 8GR KG)`�ˤ0}H:}7 >>[L}#VT!^yv:xB᫁ M-B3M02Ha.x+9a^0-K/+4PC1^3n0bz/5Et= })K1&z{֣mcي3Z~[,DcqYX*Rp[;<j%xd$|!b(26 V$9:X tf8Ÿ@] GՑr԰�d>"yAƣ)c_j� B08GAhп�dl "Fq3b+dTxi[w)K\gPR�Я/T»*௎]8F!o2ă$5|X'iFR ߤ38;r'Ckm$@N/w /;GzBgWebl(d5s onUdq A9{#p~BƄSQA?\xں\(qh>B.cŇA(F2'PqB lՀ !9Հ;$][r/rz\CM`,NprwE D=V>S2K+m: &XqHw1CegYT';zOw\2!d-&M16T rڙc Tu#~L|ũ"KQaay8(#W:!Oo^A/k5A ̦YHS~߄qfI@ obz8M A ofC9 CQxKTM`OcfI>bD!r6 )F{T\cp;8XT݆`wK'1"F@K3<ʋ[E('HړFڱ#NbwZ-C.eRF^5@~Tnt�$` DaG@Cb/ F@ݭ=$x0a<_ފG5)�aOL%[WťBl_-HF# =P8G(= ez>Mgx2;Eg٣]V8wh{ѾgKQXZ_ փgCH:/nBF\35ԛ$Ҧ'Ch(؊m)GIzE\/qc) C^#dv q0  hϿ� K ?TyGB|O=&Gɇ_򕎚 1q3Z|1+DPuE2Hqb �܈<D(F%b @|"h\`Qrt.y7%!`]>aWKHCtnA6BS\7&Q#ӱ[Ă} yT򜌦EG л7xlՅ6Õ%FA .bk1 |DN Q9 88҇gwFYd`d4PBk{ 01]z(^|UuhӜGYU;fL'{$ ՀLe5B;2⭳O2y׃߉^uUD484 j��ܡGR,w)5.**FpCv^Y9G 8rIH֍QG 'SLK Thu+& \X6}x]�0w%HSyIl,]GsAQt~帋kѹb p!%,Eqyy]pe|xgI8: lr-$e v(91z^y~G�dQ߈0()6\a6l9ͫt֣p\ @ )�܊&jk16G!+R+Oyy5CNyׅD( 'x8-vP&0Nwϓ,I ,%8R<H3:bdx8ٻ`GYڃۥC;xZ- ĐFQ I#U1<;+�6 .Fl~αat4%a:4~9 A(JM{mb :g Es@m\J}7G>tI£L#k}dXЬ6<u:k�3"!RFUTYx@j�FUe0TasӴZg}#Z]"ւ(vzhNC5h G OzPkxL7z}ia<WWiǑ#<PMhU$DA)>b-zy1!oV!ID{ )rS7q͂Իy~YnJW{%Eiک h?dA݂}Q䥐|d@=(<ڒ cыH2%8f+Q*n>pbXlSz?Sw`=aHiNe]&ؽ2- ٠=7zy( >Z{E4`Y? A@"~ u(Gy#d4e$xZq`<%ƭ91[-Q6uq S`-p h3(M}j݊zS}$&j!l yY(GɊTx(i>[0VGy@WR}y'מ'{qs{ FϿqX(Cu{f-Rj)Pl-_lbI|j^>B8mķ\{E<GP o~+:Kޣhm�L{>$zFYj$:a8Ե pt:e bE"ƉHp"@"x)xM Ȣ-:] Tn˿dmc Z:q? fQ Ly`P`BAڱuh7=ggQ1I†X"¨GOch!޵:ǡvdeEL)H: u!Arb[AEmՔg`̪D2�yp1;\ ?ۢj?^= BBVAW&cd^fu�&7DA �BÝ \*45X�q$QynFZd;HA )NX\)B OcW{ճJ#]~=� 0YL_%1p(@d4,V0RA1\qv N狚 `<5dCz%BBn* | |P<=CF%kEYQ/a< FUEq@]R3k=\ 6SQg/H;6+W;L=LaEK $n�^r/Pz,pռ^vl<O!IHx3p2.B oѠ FPQEoJgKI;3Ѳ mhCJkD)utmls"(JAVKGPO`` .)?>\&$:M17qdi'm']#{f.%OT=4e%kbf$eW]]?{4P�4&N<U\1 z7G@;t{< 1`f3VU)?|T ?L�)r=RmŴEN~hE(d0p{1Igxx$^c_$CV7ay=~A[>#ʣPN'W|]c9HOZmfğfCW<?e:�SkrzO% $Ә8yB{{@_<�+s�X@> Itd#Z2YCS<T;!?ʇ<@4a&IlHUAo>2Gp6\Do09o-ӋZѴݗͻ x5 t5>ɗVJjP^ 0VYLuT%K9�&ȑdd�"n{vwՇ +aH<r�bEd� \A�+ǹ4-vd0#@u @N,Ocೡz@ wdgP#/MnM#.&Su#:F镅?YUmZ>0e6rk̊5 {sͲP8%6mSlx$oNd60[^\ �"VÄ-BD´h譒{&6SkhG8ؤM0yPˉ.-422x@ST+GɍǧF{*Է;b#P/!@ڈ͏ vi@�7,WB,IK뱉#)z/de^rqg=?~>n)7 )1lg̯yO_/_?|}K<>bEj=$8|G.ٿ qCibp#>_EIGF:^k=>}HP.ܿ`c|"XV(Q^f]�SY>)u[LrnAK!^o]I |4X1$+1da#FTg~ؔ M‹Y .qRP_c!n# &ge@^'v�lڸ9)4~Tߥv9B-!?'lNS~KwMCdVCgTbI@1WN (P86E< x(m*_(^AYC{J2B }4'pݍ`7]1˼S' "pB3)atͧ%?l ?)h^ ȷ/Ԋ V :m4D+Zyhuh6o\ioel-4Jg#DY:. u>m,DؒabC< i 7A_kw8FK"|Y}Ýes#j-1@c]tY5:]u/h" 8P0=@cRv@z<.c~ܗ׉Fv2#%Z@X~zޚz5֌DNsk$<0lfYϤ−5PGu=o+15I%/tl12R5v +݁Q&"JԦF"t:� ߒ/}J8Dol|KO+Їam-DEPhEJ9:Ȓ0*!\qcBB8~,-? P\r[2o15/Nڑe\AJ+f 8֯>&὞wb3z٘oO~sh۝"9m,º4 1!chu GLٕp|CN[D8y�z \˃d�=| y@ ¿hIBMoDɣ9:ZL6rɷ#Lj@}*p@rI%Rq^ qăxew6ts:Ks `V+~m`7=ِ�ї#݅1ҟ!FǴr5p.bHy:A~(�)}1NC &gw-(2B\i܊ )S&-~�Ҹ$nx2kfL$@)N" t^6B6*G!y} E ӎӔ&qڹb8 Za3ɖܺ h:#f"ga1 ~ʞ?2pc>DJj(M`5,-V\ {UH1V3u&;{WReۧǑQ Ыl-GtmnJ_`(_^kigd|G;AL;:ߕ=ۦ~I74z+Oa FgMvh[W�KYnӠeA obH;q@{ϳ93##(H퇢8WF; #і3k221$`hCCN;`+8{;rXPt;?Av !; `,{K@l4ǽlYDG ,6w,D4FU{%mb-RP] ԃ5a7]&ڋ ЩF(#!@YOTNP#d $۫{Kd-")DbTzo\W&.�+="pPA?Q#| P n:,7"-V𒣝0A-:�QOCK!jޜg*~ŏ!1L Qt_='χyMUY8dt�DC 'W$Vw|B⣸8XByA�ti!hj/\:)Z)5heW"Y.C_^:n_g'y]%}e#49Hsb /ً) 4Enzܞ~Kw!M }Z<.(�Q\S$֎@ �x O Q'2ئ"WY0/g$!vM QpH<:*HQиM&⟤~0.!6 Vp-*AsȤGb-tA /IGpp%m(�A܇ ٬P/d@Ix=(=_-^.se}R^OU 6% p*W8z DkF_-Уt p\a*P=~L,#$QA4k>,q,FӲKĒ ΧU}$ba.+O ooI4#O9S&0<-!ٿuWE\Q=9|od?ibrsq_X8.'E[[Hk+Sm'4t͓?,)Xk]UΒ8̫|/ƚȴP+LڠZA4Ga0$flv"wY{ k@v]+C<*zpfu"3Mʇ1l'WIzqQ"u]ڢS;]g-Cu߿߁Z|:jq¡ESL$.<n*K/H3"D3Bȵ]r|!)n((DķUqު`k+4~/v7|;@=nv<HP#Rt.c3޿UJʈC3 "[Ci?-!,P#6EwsDlRShI#:-W{5SЊO/DnJ؊eES߆8à _j!qJ hp*ܮd Ji.Ӎ$}Oݒyw>s!G'O)Eu ? a|IJ=?Qr}yC r1fl<L&?!7]G)ZL w;m)vy96#+'#ŋ8w 6X�z@)%" L;ƤT6 Gm5}zCUOݍnD˞Wbe}O׳Ep,t$4x0|<4("L]r'Lߊd1OvOESbAbdww\T{/aՠ~mQj3p5M6a'Z<GjE~ʄ64GmJKZB65<%T8[Ekolժg᥎V?DU#TKe<78[d2ϙ̉ =݀�rB,݅va5kDUxSxۢhS"GM *ݻJ{&0rT:\rD ?u0¶<9āűšg+Ipm( K&K8^NۓA\a ;wdsa~0n2h�Hcӆlʿ!?7S&HA>ͫ3A0c~wI hiɂos󘸥 qcwa �']^WY c{Yq[05yeanH5 ڣ=B'� ӒJzȍkEL3%Œ+%3=A"#Mx.std,[U7+X<BiS^W#Q"YI,(KrH +4.#F|^ި:{IZ 8XJ_ `]BDhִۡ(T~^9`'qCXt� nLkJ$qn1\әA"%u)`%;<*gL1iDYx, Ly (@JHaG{s5-jU4!Y[(8mEoɇL0{4/:а¯+)!p'AIj{ˊC$Geu$zC M%D=7vf@~,W;]@i<?9v e^Yk8#-eYajt) |BbD܏D D?`Ek.'5�@<}3JP_FT)ydJfwP#rW]XQE^ k+!VBPvټȄ7iمӒSρܤMw£8>RH=XNƤMdud쨠dSV9WH�\D]51z/%؂X|0q1"UE&ˆ6 E?DbvDHS& o/ڞzQM7{Tg-fd `gx9 qmfN]Ԏ2rW,|F}X5i!c~.0`kɻMByF|Qٸ?^JSwLA㸿t0V^Ou�bDR2O0G%0:OMu #nTvU.{ۈm^ʧ)|:\C ATv&Jb[Al`vv/I%m߿鎪ō~7m'}+IwP3=^WBBT>/F6|_h}UPe<2ydHqa[h0eTp0Ħlr#pRޠ%b'& Cy#p%#܆:9=IKH15&t V-4;u e%t~@qwOjtX~QY Pl]#_BQ>UQoY$T: !Bp,z 8rIv\LNϕNQf%G� 䦯@@qb>8X+F=xOT:Lz`QR1î0)gbim]Q}!_ԛ^}*խȴ|΃BDS@=>) 2|"?]鎑c" w'Ϊnӏ DIVl4fpGHL A4VmZd -hI.6ЦHPzD=Q9C<:؋݅|p\%ђТi0 "O�p*NwIgPBhzYs1&EQrS9Q�7@}XGˆq: &O?IPHnO�X/Vob僌Ț^{p b3Go/QP߻!Isc\_ "aD2@HUY%jl.<pdP в0 "~y 'x"h1d}:9Q-'#E=_.NJE4+e t~5Iq 0cY4V\B7&,vG"@o=1'9u=HY/j}dkD呕f(fLz "">mO&5+0c0K&~XhcynP ߏ‚i?ՌWЯ*QџUb"H?M d؟JgZqr$8f=tJ(Pl"[iԽPMN θD,!%lx� G'xNøqUmNSk(z!dc B.Ȁƽ׿D?i1DLuHIĉ N e"zzS0fo G s ˰! #siTT"(1D2Y==]Dz\m*d�/YaSҋh9PZn'bс$,o=5pwK<?%Mt: C?h I�Hod=:�[ q@f<n0h H^m9W)?CTLۓ\PI3JۮAOG` dIűw$`>F|7~oSTjymg!=~aCn6WY5yWe HaQ" �j 1$pJ~l$-I%֕WyzyOF7;F1nbg3 ·PK_+k6h>v/b)؋ps�͡iӸ2< `PUfAWiU"�"$I+DhX袞]pҁ$�B%@\'zENƵ<W#sQZ#/T(DԺ1G HT\ZTu%8 g�oZF8Dd66M4K8/#Q&?bD:AXO2m >+B=u)lUQv@{=Y/d#ȡY+)*Y(~e`Hg%pׇpn-m~/6(^a֑ieS"qLI3˅L_}$8!aX#TB*D+x=LWG#3M0:X;_/^H1 h (Dˑxq&x}7<Ѱo �OK4v>wMQhd"lӕ>%09yz GfԎ`hIkA/bRXG9(5PpG<@v!oN�+jq\}.уfB˰HzsJ>/I,k6�PB2 Q\~gb�5 )bC۫ڠ/M1YZk[;qDt`.DSl?ߢmBuu 12<:�Ӥ$\"1hN wAV$o`#/Q1- .>%eMdڵ);J23d7 '5m|Zn3Ӊޫ{ /X!|RWCsq~"ݘR<' B}Tp&p94IiWf/w# bt:igp=Ё0&dC )NTc5<-\ƒ49&fyallSfhA:2Gdq*|ImFrAґzÇ9ightޭv(KfKnomqf#s NA[ eb^I<C3 a<-wlA ֬ԣyʇSLL󂆎<MyŮ2e+DaQ]uƬ8 HCO/z_C,kQ9^"!@%+x1ZLÎz$n}�x#CRHIo4'zdZ�2֤H KksUh{<I,J``1[)5[ #F{S&?J ,LO<ضq*CxLNY$o?y'$` ΀<EAD &^U,Il]Ѝ9]xcW"dp`;2?pLBыꁌeuBBmP|7=@Ÿ;]ͻL%-e|f :;x `Md_!Gy%7&[N%Ft=XgZ]b|e .\1teDh V8lؼҥ|_\+d8`�XPG&CxW-?P!r&rbvw3\wQgocюL2C؊ܘ%=h|c +t]Aes LIUp}ҹyH)O<]ۤp*5Md_E;` Su�":&̌rao@u3O`J\iq*wM?:MR- o:3dKIiFl*|.5tǥ1.{r/,̽]nݥbԛ~N\L$Pl24#k$`$D 9i%NUzW$+|{//?AXd_EYQT !Wy{%9Qa TWOG"J)J.~ L$N#'w3BN�Jk\f&0 /5#CZŐJ{UB+|2DݳҜb'�W:OsުG"(2<9OBx`1T&( `mT(QCTJKrTjU__5KFԎݖ'%dަ<3C SXHvSR|" ,!.´< e"˛plIFN<5@L^ hm'Db*38>4qX.MQxXw gFoXͱ(#ˣ}$h tIC|o-5ěeW 'JCI|28~M7Yr \ rr:xUsPH(}V2B2\ GwIB�R0PP>_T Ɉh D`mLSX9P%&dEAACP{: ]Cv)\ = o/eQS!G(:sĠ-GSr3IZM؍xW1z$ɸjXbP '|јR$w@Wӱc_X 'A=Aޗz( 12 `3~qqx#E,N�E 0h0qAX0}%m|ڟ/wnӅ"weP4EҸ)OiS~VA8z7=Z>gE gQh<GRy$)oQa>BC L 5{5罏+ɳ]KcߡK^_* 7`d`2)" HiI! U= X`ڽPw� ͣvQ%�vX?: �'4MW hA|VCWXPIrn0ޝD.(i3@}ԹGnu􊸗MK*'pFלRїa j-bBdW 6VW[^'#$Qg^BՓ iHʿP[}�4[C#al! $6jlaÓdZp 6Hv0Ww,(\D<YABAb4 Iȝ) +P=\w+1|YQUoP&(n�z6"s!~ 9¹`Ǖp3§ ?Ũ *9P�s@H(!Cj_OA|lж_p&x4аz8ʣInAu_v)=lQiGD9?_`hY} *KL[/jW"C@ǧ|/$Kt� *V#y^ +hٯ_G:!(vt_qRQ֮%`pٙ?_ĶbάV^iDK"-9 ;Ñ@ �QE?YQpVv? g8bN}v,uYF /53oWn}rS{u^{-L R}5m@m�hMp-ڃ4uec xOʔ&u6J\(hazcy̔>3~q`K' KrGψA|:“_Rg7⁥Ђm\}Bt.Yl5q 2 |׏a*nl~IH$ټ1jҮrdq\5uDKr!Kbv㶕ARe:#裵Y%mk"^B¡pz-lvة 劦jz|!\ۗGVݒ'8Vтf+c`Zl ɮqͩi@XuA(O [XdhR?!P;u^O4 -)H]?.uAS+T)%,GwhPYK)451͕s`RU+c1_}]b3O Lb,}$CA߫01\q=giBP^0ס0|}Tkr,"xZ @(7s-=aX1bܪ&Ug#@PQ@,GZKt"*1'pBG$ۏ ?P߫@߂_?_ǿ_?wǿOw |տ͟$> oaIQ/(7M/e~,!+"m]I̥#"e%;:~whp(p]?PL}Qx~PEC`3 QRĠDG`r(? \.O9}; _ݯ$}1j-x.OzG9KQ:_|ʺ@_~ Hsd#xǸ/52$�SEWm̲.+_k{ȗ&k! A ,QWl64>Jy&?㽺$!(X=1X 0ҕxTQ̂tSK15KϨ׮![qKOH>{~@(?2%ƧdLt{#*“}%;>�`ҕ{c0b/Ԉ^b 'oGiߩi"Vӯ(|auiЯ%{|@iå!|BYMQ=:z\ʡtp>7W)||&6&).JW)jYdS n/@NJ'>JH՝$u~@vnIw~&*H_G+]`J2Xrcyp6i}ܯ!S[jFt6wnß] km � Nq@Xt4S뷝B<dU|?(Ak=E%:dK>vl9S�]ZF%5YZj$-őLj -eQ)hI+f�MW ٶqd56$Ҹ.�Æy,vkxe9i pjB)fI3'~Z_diw R$vl*{ l`M qyi7{3E| KѴ9а3-;UKGŚB�F#D-օ[ou|Γ o [ҸXWQg$5o]WV[ h- KtʊTCtl\F~$wXmz᧐X&휓vL!$w[E>Pz^у!"s>:C׆+eSҮ�˖nq•1 +\<aH֧_@� ]LvT�h'~N)X^6 aA_RM`^Edd[$>Be?D ==IM{S!*PI|8~ny$a72"71?ﺌ{~+U<H<yl]b~".ծA6J F[ڎQKP,)x I4 g7,oDRmi9>qXρ"x(fj1fl. pɿvǶp\"CEƂ3_U][a콤q\@/4fI>垽NuO[9Ga%˟|pDhųZ-b |a8�fX$fgGqSV70#a_-8|N;&ޤRb-H~IʌH�ju>|424B<?E9FXV4@-1FYMh* @8mb_/ Tnk; _xTz7 :*)E 7'_`|{kfh8ERa&_*#V;]j,uHJ'oE3% o&b J.k;@eT]AKW͜lT6mb9^3UT~89\9ئ(1Bwn8 u5mWĭ]G4?ylT|%U} dfz+(Oh#n45$6 }bnKBR9,gfנi8يE2 K\Ak" h:\tX4g|E:@ࠑ.<Je7(24gS,6XмH8aW !EBE1>kT3^/+8|TՖfXBpJlxH+<˒EU,bL,DF"38/ӁzmD!�=r?Ht q'iI="<#ڟUA` $a JKv1/@ʍF?%Hr45/-Sde��u%tM:m'p,tBKԮD\UkON>#QǺ >6}ʟ\C F\*0h"!4V6~Xn֥ʋ #g v.{%Ƃ Ǵ&#CjF 5|1h؂a8Zx&2bT_@] 9-~DH)*K<D_( ܯMB5c{]bx7&4KNWYvL2 sB%˙=vx%ew|Cg c mgKJklD ,#DVjI3!H[7/ӽźɕ)St1cڜ{rtO/<ȷ( n]B/P9:S\T'X>V+'΂faJ[A|@Q֕hbV)N[R˪ϢhFL[J$0h֛z=i6lwWB xٴ_[<Dk<РZIY7عU`K,MTse c"pr`^(s}1Hg''hecM!7›. iwܫ?jD .vI2VMcZۚ 2\!jY~hg�ZܙU�eh!!u%5JS t߿03jQO;7>dg&i*J[/69A_a�#wJ8]E+g5N{4YcDGbf[aJu�Lo\ XRBF..ƕ(bqǮ\>U*!y杞qC%{aٜ?F)!yN`fH <̙ Nφ|O[jޙ"�C`Cs9K(rT1&A;knm:)u-MزЧ HSA˫Ki'b},;p4iyalg붓j%ݪ!AK;:jYa"4&} ,5(0e5d.(>Pk-G%GXZh挤r^/Ph*sd9h zBԜG__ҞNU6T[oQQl*2& eU9E < -Zn#B=Reʐᬽr<Q`U/� J=vHI֧OL*8B]|Ttu3 AXWLvIμQ ʣFNR_w`%f;NHo֮T U~zܐ?h8've!/و@& �4$h10y2!O 9= !Gth=-r1Q=.PQ8JGđhwYp֬E߈HN@=!}}-@p+)d&@FSz2P ՎC s-v˖ℐ2̄WhA ƭ2X˦&!ByaOC]`s} ÏX|`mIj:ؔxijqWЎ i5d@Iry?0x#z  :5vG;sP#i$n\^jȶfY2KZ%mG{~D0CUvL Xca\41T\>4&{L/yy q)w1I{ogb4KR$I.{Hӭ8y@-g/ݨk&'ȭ9 ݛ<A%� j1᎑3X.€^H#6GB"T~6]g 8Uϝ}4.90<)n/EO~Ԋ!.ЯQk)A4b~<=A ?EqS`.IX>Es$$u~l+ A} 0X>ZE:);8!jam= k쌥I!-gT!ʙz.LN.\gPSi?k?*kdGX8�<wrRB])v] $ a:8!A߲V,I Z[pG[r!9(xA(]߅U, J2 &.x9(Z3�2Aqk8,$zx߬6b80e塎TPf bY 9u[¤s8S*&'w+AAu6|Izn4(Lˮ �x>;骴HEE=dlmD8icb`ߠ |{E%l  Cu>XZD :-ODYRc(N]Y$IKtF=>1O'0ӊfEm3dy5Nݿl u�?tWC_A"g_ Qr%u2�9cQ{3qEMc! ~ nsXx|4* bpis3bive /-N6pdx 'zт+t4lHjd9h|֔2ȴ4 -gJD8;a-~}$|]??{w~:| m0Q�^P3!F +�FQ@(I n{ $k9ĂhM2V&$ ݞ5KNʩ�+iH٣cs|Td:$0Q$eCSH<A׽-HFJJ< [ ;\l&2TI1X6ծĄ g8WH9t�B 3v;Yq\P)q{@j#*%_iI:z�5lO}3H\@(^UaciU&/aY .9I+H4$UPĵw[_ِة z+L0а!�Q4A~!P u:"S%NKs~eZj 鱕K1/L&3^ΫBM*NnG@EDnt[I,�k7ُP\i3)F?e.b&>{4bw*F8U-kk) V>%W(7t lmg9h]nY!I`fR8*h.de2,]ϲ dm$UvgzL~(X *:@neI[,=$_ 2KQ0V_S؜-Ezޫ \P&HS1{:xeXYpcmlO1mZS)6yU~v}x^IXvZO 8rJj?0]WeˤA(H55E-=@;u%ƆF]ӝR�j̇5acW%J/5jިKpd( �u[ȃ 7+sMUz8f 33T4U:FbEa` ۛ} =+>ww0U >ln�VQ?ۺ-MSƾ�N 2h{{ D&<B:6&Osέc{>[ R $ O9> <$i i˵P hvwRa)V+1+R D+EAwlDMiWb'.V@F0j İGv/P}ٮ_A[³n&}f5C5B (g_8xIq튼:9`_˓U|9|8z=]+,4Jد{Yt;s@WQطoD٭k+A+9]A 1GG Cn׽YWm8/V ]6"u@=F۾T爈R:X :I f^x8%,jH֪?'r>ReL1qظ!d/ ѡ0%e^FR\т@r4{ӈI@hqjMj|kylvi%x�0zB$34u<v%q@w+$%`)YpHa:g�RKgfҧ�2 ^2nF\:sJWd[mw .E$38*[ւL=fN4kE”,Cpn�Ê${kIeaz_9۪MWg䞡jĎJxaf}Z0Gp`$GK^A>h0.1jJR| \3f=7񨦀}(+~,7m/IbjC/�D4:NH9| 9GO%"~A/'-}z 4O,>(r&yhW0Lh-�6״v*\v9h{3"B:E( ug|gCu Y ~l4omy[lm¡V|sH4 GnӜ̋y&y{/Y�gP:lFbw@='L g~* V�N(6ߥ%D}aQ  ]N91[;]}-pwXٌypt}(&ɉĩ)!#߱DR%G39,N#̠|4 myx@� %P@_8ǍZ6D{5!`̃ nXo}8e Lm]q>vuMm%eyC1SAE7Y ӒG3Tr^Bh:jD%[i͞<~9J,A(X?2턹cA7(ė '0uOD>�ڮUr26`�]4(<XIq`=RLQ֕#lALM$r.+`aͰ nX?x-ER5bñi'l+ H}' YI QaCcvd@q AmUv^bb]L9Xc zgf9-q 4!F֮셔5SI 1#x?{:R+AR% �\т;]G4ܕݿ&gS*uL 0Z𸹺�Ƈ +q7%qT,a#s2Pog'N/HXkԐ�2IP`Hqﳢ :aQZS0g_&!=Jދdp2DiJÔv^). ۽ UT JPgx2$BoUEΘn #:?T , IT\ 2RZ!Q/LL@_ITTc 0IZhk<.jAm �bˢT(Ei"i>l#u W՟Fp<D~�2VS]al >gAvC'`\ (ƴCMHr0L../t1H"x \ڛad>Dpc8aA(!c+"t0#S@KAڙ.8 pWn4$d5H@jtP4 =2dSp`'bt;ǨM-\ˆAuπXtX'^,ɱ|)yCa*\xlq'اjZm6*gi] FE͟)4lQ8FKkYr0SO7]E[Wx8)QqM% rnQ筜,([DM~3JQdUYh�V`5U,Y?hԥb]^)'@[\C twܭ"|1җQ>W0�zw@Mrݚ'{B Ayv(P}-t<3$A 4CͧV]ChbMȝpb>P3|0Bb`F=:E,Q츠%&KrBI;rb]s^őg:"m#ox@>p!U=b,HƯ/9^d`;ddb'Sgq<%QE: Sq}&F3@'IR2l2Gل8nBacT8>P$!c_qd'(iG09P!j 38pfPQtK $T�Z:X`Q!n.XQRևnyn nw1ɼމÇHQvc;`1J!FUUteP%Vߵڕ GeVdD�<>-s^ղzP<R-a^8 BMJ{2hBlv)Uʣe6FM8oYjy=}, K#q!F:]>]֎7Z!>CdT@ ҽM<b[t9՞:jχqU:zO s e\K `N9yhL`@Hy ld_^V}(SOk5}{4AMa@'a~q#v<Ǿ�D<8*kh6kR4<miB[MǢ]`t(lj_՛o[L$FNp7du Ddpnȥ":2 _rD C!`Qu8]w4ꜧ-9)f꘲B样~ :kzUj<")c#=٠*!3%+tq@ɧ74|lKA|HUCo㳿A qz86ʈ*%QDaalc4#a�nF(x&E. c+r/s( A$>"Sh !0}ާ׌_ƖR9/5X3;X F[w%V�Hr2e 3K+96 j0÷3_r%GRFk3%Fx{gvW};.D3ǔ7-*0,[<l(~A2H,Ssqd,:Ύ j/` p4d씵o#EƚvV`p(܄9KM� г$jK` Ŭ_ĪjuXw7&x(QkbE41:Uyu18e"Os;M0A  1LFGJ=xk@9 j 6 ;Ȓ1'W k0WhE`60)cFQ*??|Zn@4耐]+>(tBE>c\b4oiW4؁TاqF^ө.o٪c:F?mTIU3޸N<D j+rFsXwǣ,RgOBu :}yOnN=@_�IT} {�@J/ �^!=pmFq oɚ H Kt,[YKk0?'_jך:KS0 - L/)Isp̉Jd vgͭG}?h0q9ZIkEBgyٵXM0tHM,*=ixU%,d,_Y%TgNA\.5$roW6al=蓣zlE}iT kmWLJl&p;)S947=Pm# 9/#ThajS')G J( jC-b @52rdEI "A.sprNƔPҭ+Г#CH6'G67!9*mnx JkQ v;FM{N  #:4WdP]!L"9=:˥+[T\'rS0f^3~d/PHVEYz hD6=0ɂNiy 2qx8,E;!''_T8UÝ}-hJ8V_K:bn5 HZP@OCSIA"aaSBxZs(;H 5;v^t}Nd y.>}gD&"b:PWֲƀkޝDZ$L�x�+SH%3:B.5]^G'JdMoK! =rx*@ IYV{q tYcIGC>4;F/+مVWx@�n$AD'DɔL#(["OA( +N:,i#; $A4ĵZ8dP vPus_$ dCYSl <u=|Ǜ-G"U]/B#n8LEIsTbq>IĠ:V!3j[Q![ &_wO?7b|pf sN0�E73?0#WԈ*JyY2IDPPsF#!w ϟWXp`GscKrJǰ ¢քkFaXr`GwRC$vFjζT(aJF6Gn1VjJ&r_'_F]k/D 6[#pĭoENcp飣WK~!=LpC{gkj05 ސGCP&Qu"~󷮂O= 0"2s@_N`@4]{UbvIU~2_v;h4&}ĎK0ZAtxpG:(K1/΄G+7M;qVwt=aDJ.AW)㥔 8^!,K#HuVgv*@ Z-ʴk$k)L'Q#%k+ۅr"ЮߝD�V%o$䦢sRVt-TNGLNzwKnD]•?e9Ϛ``L|W-0ZWp(F*߅T,1`$dtKO@/[h�jQI�=pgF;ӫ vS0X??3Q�iTtvq೯4g_uQKZ|4战zx״גʡ+z3JCC>G0[- h9^I)-̸+Q$~{$j"pn}AR'[@頍[ڌOzt` @Ey)ID}zcmgS8ڛ+.xORvC =50 BW~ G< N!~<xbP,xPRp^l`~ZsꅊB 5F�\�T8Aq2p;g^>k" β(4=0cM18̄d"V W2HW"J<Ud1;wÁ.BB�9MD :JH#t^$؞Z;R<Q<ߍ[N-cMЗ%&CXKJbU �Ag4I&3qNSR u4FJ (Kp; MKh-ɛM m!R!OQX$0-Kȉ8RZ"3 ^GX?@Px^m96ʼn2'x)ɒ@qGl"!K4ࢎ~GuB-Imo5^㊘%. ne/m ʨn$ T l\Xt֙|ҫݓWE9ybZCNl-OS3\c{ R5<1i0tN3ϐ08jy j-]UPFK*/ȲJqeÞn�f|wDA]wJ*(M95 -0:"M Y廡 ~ QE靠K niw4G-|mpM85|&sZb$(<JHSc{d$YH3[J{"kj9:\j|n0c(bK{n$>[*\3^@%:QPsKT}6j+#0Z`FXdqLE7AN f:8NA hqCL93(neA-36Gϸð@$ܧAbhQ'lZy#tTC>`xokҰETҺSOU;F, ;8Nr6|ĞD -ϴ/m>r9Cp%i @u [(?SIȔ,HF,Fs,c �t4ec6ZT܃>z48ړ xi)Rr�o *%|G+RZYI{STuNlM)]Mbf'pP@PLu@/4BؔoU:~$5 }p󟓗Im-@l3޾`Csj+[_,) 'sh.IߔRo<INMZX*l#eH#JF䠬qt&k*tW;rMS8@}+])ÍӃ^R1Ld((u9vsF1;Vq`A�ru9;)wF|屟EY4<YN샙Ô.']jS]HdTSȄEdwRdR<ޣ<H: ~ lI4FM]o2)J4T(r@hH5e,~H12򯕲*n [ypGkl0k/)8<] ieStnžSyi/BQroOyka>M*$iyK": %:MKma<-7~E\w6I8zRwnVJHs?FV?UmL/yiymŎp�oXAK�z{j8+kIt(uv7B(ؐrxG?G^_A߅MշVLN@j7Q%!a^0Rqs' vu kS*R?O�Α%҃u�yB6rs;c)rܲ!@hQ(! ܭUTShQj"`ޅK2G(fr?Ư(S N9EF.B`ш7LXb5nʈt\DeA1p}< ~mP1*Д;)2]HAwgvrGQ hmi:+4:8 %S+>Ao1,Vc^I}KlJDq3YGK<a|N"b'qEO bjϯ@*_A(j1އߒ 3LE<TQ$_; yH 6Xԁ=-4gFN<4.Q eWOg4mm4#́7ȥqbڟ:ENDs><<]I慙Pl57,ʚ/݇o+ `K0N zfn)$RS؀G.Kܺ 0I 3X(Ϝ5NE/"zRjqglcR>#_ *] x`QؙH+MMɊ*o˥#UH K9'ȑh#ǃeX3 G:EЁT9暌:YX$m_tPMQ+7$!2=Xir|HF& -�Fk2"%JմcQB@ Rj칻1NB՘BMn 1(n5$=:;QK9 JՔawTfNW,iE4Eg%}[\`i`&\K[吤)#7ɒ 0KS;(ۭ_zL0O_5k."闣rqLBi!yQEb@u a<8df]<dP.@ !)Ԡ1K ΅5j3~T3I}%%<Xs%qg} xS~֗Gm ,/ڿYLҮ^%Bk3!'Ɓ-5JtC<ۺ|^J3P w?7q/Ω ZM'tzz[v8J9~^!U還#WtJ[qP T(@  S{$ere!]up1ZǮ�v@"%SFf[7$)ᯊp~B'XGI G+󐆊q{)pCRTUM} *A ]wN2v`̏:~p ⃘ڀ8Եg!X@IM�R^jdXi0G,G,(7j{XC|Ko$֐xR2dF%gKK8%^2otcr7& ߅XT̑AIxm^' jh'D~mg�R4,fpy @ŚMR2_BJn`Vw悰f`yr[`�.G yG|)_-bSKth5Gиf4/DVT,X @B.A"R+X͞nxwj+#_P )@)ڱ#'ͱa7=s3V;5<sr暘C(Y%3G;h㉔ȈWwW8TfF>͈S�A;)(F"ڄ")<2*uVpC tKD)fSj%v4q4l$OO\:α="=KaU7~|lfT'_z #W&bSs 8l{qyD>GߑH1~E8G Bځ=ؾ~4p߹d_vJ8t5oD@W"^�2}h4cpSkWD� r(H,t9ES=6.Bjи[91.ZhbRƦqIɅqpˬ*gu n+}%5hmOtk9̔H1P$4bziB'"fQ{>Mi',wKNI~ [ϭ'|pW}A*Ο I7vkWkO'xi3IViӚHWT\C z"DF7in(h #a$jmc#~.B7PR\ThfQi+2~rb@mTeFjPT!YDdpqdvaV,iacCde,rJ)j60'uN! R p}, JIx t$[ڰIz;2z \0lINYjBd`v̳ _�gى M_~(cz(ՠZdRovP(>䖡:etiâ1Z_xR b8J/GV8/K ۘ͵fbT}ؿ+g6Qz'LhİpfH=ι;y\,obx|r,(NY43cxRa^&KUܒ=Rr׃] Rb |$LN..bcW5,qsyZڜw-@j24 *K,1֒s"Z#)R02 47CX[Q͔ēmX3[ <Ffd<ΖP8 #.\% �A+9q5+7e1ԋ'ZE'ジG0ɬQgCs?Hl1@`DEtXhh=EULkhBLyRcY>Pb?`\d;<Tj6A+zBN/F㑞hs"*u"y,*?d,6Q٬:Չ}hʔ*c!R y:sm�Ԗ bxL>^fhGîDb5M'?"$qU_h6Jgڞy']YYJJuIB\\6bGl58�e͊t^BwB.M@�a'ZL4xދ1"[2"C]II_lSB4m>[0*, D sqm'}+ݤ ӔTKT?s.K+pɓa" {ӏv%U%0SGRQv'K]ab05کtޣ�ɥdTfvߡ?A_] TDžCJ~W Egf%}_(D= PN5N&J-ӊeO4IɌ[Źf/ZR3GY#`m[#8^3:42̶ TpKH~W"6%ÄKu8$"@~l4 y0&v"V52Q D]Q),p%lܖRH\ju<b_q$Vr7} ?oS>u pC*@nh0 O3A5* 6l{ "t FR)4ADFhΒkyLi8}O0;M3 tE,*`.4o7h^k"*aE*HZ", N2ڬmW�xiM5^:R>P mң9[Ѫ;b2'dpyd+02Tn,ͺ·],P&ҫBaDI Bas NhUY}̄ӄ1bxMBYany tZ ߒ�HAxa*@1zp "+n?D3> "C>!$)Dʕ_2\ئn 8,4Q؞l42DyLƀF|!WWb"Im~&@mv8(Y{G,`�di}/\�{~ o9ZGG?%*clX+?_�ў I; D%cV!/Bd΢)cYk+BI0x. |3E8ϼã3%u<囤r x ec�4-vv*IɰDQAn*.�tIEŚ I'`y<Jn`OE*W.7]dHf)TGz G8Ur>'SIvWyC݋b%[ic*)>͛Q1Pڎ) P<d4F&Tp-(fT^2 G4gݎo:YjP2*j8# [ĥG  24?+K&֚ne"4;eoof6 +!}"9G�.Rې:Ԯ55bR6m"lx)ܽh5@E@ޅd@! q 2HpZxGp+JzrJרi fR7x|TP;dь%"9P4㢣'q)+NuflU$f:K'DsPʖbr @-RiïNEO߶w]S *)Xg@BDjK:ӑ.BbbF2B77^Y#%@ycS=cSir`qN iQ1�{bŨ鰯)Ʌ=bDD%EU?,YZ$[h7@:ېNIǯv KL2ls`@d[B3h\yUj4{ Q$P2HC mui#q,3Q?Agh>D/Zr�# \  KlNR" #QRtҥSdc zڋm X1KC7[`d8g L>s0F}$]E|v8@nȽKރyS DU5xQ=ʏ qZ*#ky5 7Gtq3_dQ:9@>7]FiLA "f O&+xbX`| O|bh @s-~Va 2TZ̶6 xB|2R,FH*LwN\sjLa@pM9C-*&sg=se#DSXjѨueKEb $?8ೇ;ؠ<)M̀b楈%pؽdH'5}f~7> bs5H#6s"B}dW6S0{Z4VwiU= ѷqAuDɨ '1ͲY](ph58:|F8]pR C^%=Se8Vc;8nz0S"L=2X��_:d+m&c; <&K,޲IByՀPWF΃K) el�G^2�UؔlA‡o2k@&(B8o,~oG aL <I˛vq'vJo65LKN\l gj=;c)U;DX0wS֒ce%N9!KtBd퐜\@{MXZyJaXJ ΔizKFΐN]If!3vd A˪g "6G±Wl1Fܺ9gz2yA$?D1DNʴVE�5I LP?M&\TjGZ$%j^,]/%p+y@Bŕ|ľ.=́y �\L6 %ÀE+rԂ%q`K"' Ĭ2 "My%S4)y%wԎ!M#8b,.v*jvQ �6zyUcveK_I.oQ7A ( B}1=抬y(9{-[l1EdO<ࢮ ~ 7 ~'$[ 8Px\BCz; !L`$kG 78TJKa v/= I)lQnG XDFR=gDׄY2Ap3sA~:Ryo 2H]r_ӑL0(i7~zia,0>$6FF5S� OS{ȺFcJ'Ԓb]V0CMMyF>]N?��XYP\Q߯Ng21Ԃm[r`金qk눪]2wuV*ѣW;raGaMZy:y4l*s1uaK aiՙmA}hWRdo !KQc/ L F>3ѵQˎz)o+LN626 _<Wp_K񇧼�'xu3g�6-º+dMSbnLk[$g׾8o[`nPֻ�)@&ҟ̈́GZAҷ0/�(~@ٱ3d`D N8/g[&6: U`Ο4 ;KKyL^1 B12zeM1g~[xƇ^,LVyK8Jrci"&ƹmޭk^/ɭDɨ2&!,C#=g-Y\Mvuf8.bR:,(Tכ#>5+"i.؝f++ 4߱e,md Q'" 4Nl~&qpZ\`W8!+x"\^_ s$�:w?\&lW-)R0; Z~0LDB&ԼA,('S�T؀^c "Fh)TgݣA:In^і@{q!ysd.ǻpÇ٨ : ˧Xv$?LmnކEθ!r^xU,j#5#%D8pE<W",rma dƕs1ȁ)2:VjbS=<C$> UoUFwBz-t/~&oɄJhC0-]2VP~FyɁW-{A<ϙǮOA[gq=ױIBPzAu{W.Y{\q-dWvdY^P, ӈFy�K[ lW&7u> @qkSz* 2ub<;F=hˋ2EjP#,P1�qpT.8ZÀ=t�bab}C&0O9R"WA&TUON !YAۮAs.˃YgҼdp 'O kh!b(!*Xq<@>"[?8E1s`С%>Y=DkIX6/ I*sv,:ṢH>iW(w�sCR#\-.F#2oؠ8>+R ^!}2ֆFGȺ E$͎j2:Oȫk"'P~)/X9&j � . ,Ӿlbe]4jd qpi<|wQ֫T(q6y*=[:{btQ@DV׳㩢Bg.: h>_7tbv �&(#RGCxk4&jʈֻQöܟL}I:ln!HsBmwH H� 7ҧe.o2&1UUOڣŭ,zF]Mpd@վbf܆/+Q~Q۴$t·j<gH]fd)|9u衾qU>YcQ-/-Y[I}�h1qjbx9U C5'GhgO+gqhnD&sk?ua; ':۱7:i"veĹA}(Ah/x? X90uGrD'>$<%lh P,s좇 #!t`Άb0D {ZTr2i G 8U@}xˋp[&ȈU&*`.(T' ه;r_K9᜖nu >bE;!7~fM,fꔮS<�ڥaz%BIy\lp"]N9҇v:B YŽy2K<99U8Y XOFXJ//_�, oRG= !-MrmIuZW &ǗҀ"0sH=e69p04*Pֵi( u5K!5@�)y'/ 9$%:Ȯ6K **iC$w$qsifs-848[D?z>/Ͽ_W_7_^zLjd!'FSg;θth3'B#qÙ<oV} ?FKqhR{KnkO+DΊG7]n&HڶТRwAvX8K8oM;O}ũA'{h2%T�>t]˽ďo�#=a;<""� vo>h0(ޣ"oP"!G87=�W*wI#DpUTjʧQFQѺmf�t |wwZ|6I21w :2> {#mV-&vfa]^ BJ{Lf18$H$V&xOa~#VRV`1;}05χǥxh0t:>GZ^ csdpÎ<a%Y`MF7W W##ךGʷDcd^*xb '0XՀF${,U9\/,Cn{?J<Dl!J:z j eFG~Q`F|Dh^9N$\L�@&:h�u,@bsi;I R(C]$^PЇFػ*0GK/#܊_Oc$UԂ” 2D7^9E)zv.|a΢=-/}>I.oBjX #Ğq U.;c[F"~U\8di|QPA&kĦ[LviQ>D;wn# 3^4TZɑgp3P W\( [u2I\ 7Z.-y3|/Lۡ2`q4xrB0:5f�|?ln˭.wG9. d_5aJpγNA Y?кvvN ;䒼BH ޅ{,eNZ^u%.wnE&y]A"9>ȃY_r�|,4>PA-5:\fC-`@ޓbӌĶ4sԋдK6e'*Z\8KVF]QU4u;$A .ldDv= !BY G l҈#~Ռar1Y+W\5gۖ=?}_<)҆ R1UCۨpJ%`p%'}l-}$sx&Ò6kkY! h>2ȏ.8h@\Q\nů5(bѩ2PEa:kT\v(pfEG /v^q_oy9?[98|'tk0ۥgH+?}#|_kv@ب8M%TJ򌷓i+p&3Zen۵ eQ~A⽄ikʔ罄Bt )P;{Dl.e\i-`RvAnm5ZA36(Ds:_PC -CQ -NNF?q:>!^>tΜQ@0ZTe!oltP\ ˆٔ]tT#܉_ogc?, 5uv\${ N9͔v\(쇧5^+@osۂyu2 `.Ql=J<$Qe)%Eϳ?) O佂dOݺnHJAp!Ե:\]I}f/"}_ 5XOOJ4$Bhxa3nxt4A+z^q͗_Sx DPU5)%G D~lz@.m8<6/xC޲}L7!m-m_ߖ%;UG ԛGُzF> Gλz_߉DQ&03cOd.jQ:<.6ص-3h5ZW?G5 ߭U6T[^8/1{팑 Zs>xD^~72ΒJW)z_kG]܅QgF܎Qy�Xζ#+_1 (6|4?' �a'B[f͘uVeUD5~x  ǟ0Jlޕ/#-br4~~y;Td/QgB_/^~?̗y�Pz\̪EyǏ}^~?Y^Έ%<SHw>G)W+(G] :^~7~C {ʘc-'j  T]4 \@ܴsn/ YE&N ruQu!ۍ5Goe)|>Z8zԦ~%ˬ;c/6/o 6Ν m;W\GF◑oi3,<sAx }H=" zBnz \[b|Ucb) ŷZ_¾O_ јC"p/H3nNfu^z^}5"AJoǟ[~YmE<Q6o pKl񧅇]kEc} բ&sW@JMDڀJ|BxeIQ^GH]m]1??ZIzu|QP1h=`ſ1dqW2=d>3KX+Dt+ y,ʿidomQ|8oxBd 䈃ޓ֨@4r5qOǁro?:9{Ĺ GW^_rz;}~ΛrZoqZz~[*PF<-g׬D1&%NSݽ]W]8LS}iX*Ȳq yDfUwK?:y4G^?P6\#[9-߲qj-O2"#E=xP,W$_˯N`E5‰zK/~_"_^7Z|C۬[`lte׆(Eu6ʨh1ͨ_n^fAc`/cn(7J- M\%:Kd(;;1oXl0/\Q*ʼxKQmQʈ{_ս {"%>s; +~_sad~ҏhhhW{o0I >XZ}-#tf%ZBLڅKԎW+X1~JG DZb)+\(8.[QJhgt[+hkrWXZ{a14m⛮x[jXCSa~Dg\H5"췏pOruL.&غ qlB"o)}"7Bl PsRTfjbxQ)+#PEj_yMв'K͸]4" )؇kҙ'dޘH5H%ˌ[<{.[x}Ox7> #8. X6!f,ӊUb=.mݟ35nMs51wmM[Ct+10/D2@2B:WZRH>{1pdpjw?\rNjxZcH{;Y(ܫ<eS12,1"xg@ӴF(0a4\{gQZ|ͤ؞f]NX־b F|am^V/¶lpT/{�g@�wD -'uk{i/~ǖiRxWIȎg~q;IH#i 16b?hhj2>C n $ iFuLGo [$eqWel/nD%>HkUDm>?zE Kdi#Gl 8қPn#޾⸋Oe`m&kƗUOqCb=)&fbJ<E2!�΀$qpF7r5i"o{lbK3Y' 2-R؃>v*'MHs\^ f!ěDrNlܧe'nnH]FܼȨ1Q"CUO:' " 3hӋUPXsD1plDUZś k޵_%OVҏqCL"7Kȥb7{y(YEh P4򎩑O˓;l.So-7~Bn#n*,bF"p('ghh+@b'R(Fv/޳#q@ǽ<beZP(lxfcF,-z1h JD)<_*N]rx,qsrٕRg_z |W#\;xOA`A*tʬ/7MְsOpMdi-*L[9qP.#2+F)U` cn IZXTmϣґ k/ж_hŇEvd&!x8u~,ڼ!`<-'&G g�IULrk ӭI q}^8ng#`wÐ69wԝ*&X=VvbWCЏHl8GhTO Txe+# {$vr0 }*D8cQS;qm$Y2;VپZC4v,*n14XD&Qpl҆x,e .Xd7 9(a%4w(9D~em2Ө6q)Zs"zFԍ�h*1[s^'.>[ӛHf$7QPFwhK*n__'nuVmdŘ~dҩ';/s՜3aM9_֋ =yg4q$ǖ[EK={#݈o8qQ6N]0KFc � ̽N|;#i%|JH0ȼ"`t؞ R\̲VD?O_!oo<{S6QAC5w:27BiMs f?ҳ~9X4ۥqӍxH`Rvc^Jzs"]=Zʦrt</G%IA;zo rʃ%߬u&�姜n 9hBpڥ$_MI1#%.wo+5$pVkOL 4Uae/#]&?_"V EAe$°㔾`yz$38`Ag?/Te$FHH=v!6lwFm7cz[ʻ==v]3KtX6Ps%v N?&7. )IW/Rv`I -eվEVNIi ?㮍/CXw0.6)mO1yg/c{c]z"wl|3=d <%A(N|r)#ש4nZq-D hs+"tQ3MÍ娃o?ͪk>NZS-XtGA|mԛeG%]v]iQ<w*q=&ci}E'03B|+1nP$}ZV|D19 nD Ǜ,5mOM;xA.j,%3F{wܸkF.ct vuCzz@(Њkc_`|=#j!CהLw vY<LOi\oɱZՏxO?tk_Ȕ'h݉p1۴4;R8ك W< [̆ˀ d@E"a~wW7Xpz8.ScFh^ͷƦZW[G؜+R5Lf" TO?-)=%_t͵$U$g\`o>KXdzMr`moVq,}4i)dǣH'HYh lsC=Ő9MxhI|+8x-q!t\S$]7*ޙ4jgWƩ!E,b"<gOq43dPxT@-"-ƕ;QJq[{ Ø*6V2ZW5AJAzD$ױMQF#LUfN}A FU|)2-$fx1eoӬ!&!ܑp$pIKn1Z@ QyYEh-j[be.ACXSPrR> V_08)}l{!B>']OSl G*b;$@xr9"P$sI&]LXHؓ 2'YPM)rG2h<75N)qGްuJ&۠4NoD�Eaj9R*V9ԧ?iBƜg֑ݘ( exNKWd>জ!"0& ^ZSл M,!nn\ KwL#Uto7^t(LP-s^H*o#oaEiCE4v)"v,Ea*Hf"'ଋoފG@E3 ߾6"* `qX8ѕne )w]4\ D{Wň-cY w/fYďU)n . 2<fֈq:ۿҡ?jHF&m{.�Lv)|(3Η#uK.GRDLF^c`^=f7Ț"t h(KΒT:j2HDzf6򕂙#r/Ŷkm0 :dDds�uS7]<s6-}O~rhDt.;V;&N6?vq8q v;HC5C$٘Cy8 ^zJ˥x+X#-4*FișISI:qhEQ6"+2A7@MGrx.[Lk&XWms:q'8/[]sP3€ ֽ(q"&R]A[h-H?)S^|&\~ j>[56@2@.JRd[H8^9JN=F4yKJ䍿x><�GY"BH{j::UcoR/4́viCS{V˺BAjq6{z :2F Ge_o)E-D60 $*GKG;CnO$$V8+p/ Y}PDȤ4opKL$2Sze%�?.OHA%HrFGȎω]a@}4jHH@8 M㍄Q3dArܲ4grH,q#Hd';C1Q[�'d=J6JAm0`%Uni[kB32n.VRqCPo;mWnjY6,S{hL;YR(R-Glr7P}l]mt=%sWʩ�3ce"s]34f s3`<R @^4iq4,i|!� rѲ|Cq)|*@8*yj4cڭ 4ЁK[iSE8#A:]S6wg>U.ܤV%7rC*}8p6^J56D g|&�g= ďpD8,W}fǘ*7EmiȩM`*0e\잨j(7ZCvjTH7'�l6B՚@wNq2KMIxR�C1 Bn$fEsvuߣ،%bZ3!VI٬@ؠ\ҴRt;AǭgO]cDD6>ɉωߴ�ּQom&0M~̫) D}aN4-1CxghKgK[I{n=n<]Z=5uPLqެ,5pmye�(K3Ry1 hn4 e4B_sNő `J);Zo)FSl"VRl^ DFb|{+~I5Q4˶0K]/~Jax0i*@jkA\*G\jc i:u 0ѓ40>/8t {)z;9@n3&VPgǃ # ҩ^]e9L UOվN&]KI)UmxƞƩ:PEc"iir% 74}8[~ m>w:s \w0&I38zg>%NHO>�̐>>: y"M\�g<]8cC3R & : <RDIQT8?M^My7n ,ft!*pXGTD='ȥDtxDno9K)ƙ_[jwU*J)񉓢)~d`jBmI FrnF  P+`|^5u9'eTRZ=]Ru�7 $"iadqsSS{Ћ[҅og1Bq~qCQ 8Na0*[hTQxΥmK& 舢7MS�%^!xr9smHN:0qI t/W,0Q@<`F%fdw!'?Xh+1hNGn+HQX)LrH5o;9*E֮ϴa"Ld=>;:"n>!t*RKKculWN|{4 9Cp^B�=|8WaQ(S}dЏH  *mFKF-Zmxب[1Ʒx]%]q%<2!rwZNdeFN|?z{" M*˴PkN׈} /1'rh=r?Jڍ:�nR|=uKUƑbG넻Cr:FVW7ItI})Pb ,2y24pU eZB [)n�i }N&A7*^3JLO>IȷJE䱝~$l.X-&ϻ $XtO.21>1 5QL=Hb#n'B�Q9e>H<(/�$E0VR!T`{ח #X$w&zdzz D<R?+'hCEI s�РӨ;H}3;1籘bkzqWHEGZ75Wwh/ y>}»QB;BŦXxϖ4f !GlKJrDTOe%hc.Rr)xTBhw4F|x~v7s7[Z) ,ȹ -/ e+)f 1Sg TPq;L y u*nMSC?.+U�EBbM,4x#I?KuB*wa*{3 g0c:E Wvd?n?3VVo43BpB.s|Z!%㉣;�"ui,5<\jZ*|�-qEdijxX'W[n>@Qc<H  QEKg2-j )Iu]=ɠBK+ iRhkYh% D bxKܻцh XxVRwIЀi.1϶ ,XgmtAb\r4vl!D3,5(>d *kKgB^yO'ϊZ~/#:Kl\P TgL ꨙ%^5e m%:/9hU5x'K%E?Z538',,%࠳&Hy,$g&t=B\K!+F<An:u@vh6h3 392G#J~4z@4@uѐI!9>&<;&(NňuJ̼Y4 0Gj%4b`y9\qt2ٛS'<,ɉRR5ڣ7(Q|X>^?i<Y-H>gvt%uՄ�[Tէ 4A[y{hgOLSimnۄh6Û^-= W/h8J#JdP (jߤ� MHX%Q)ns~BһSg%ΌP'ѕ49Ӝ.L-m6vmgJ<أ ۉP&.ox'҇I4Cb]퓢s:{R'0KCM>A9 +Ǟ޳�GiMBZ}`r0˟Amm[.ԻcrFp ^6dL3`lz0B.b4ʲ+ц@x29^i�ɗ/h7(]k:)7xtR5nBQih_hN ?j3U!TWjpU#E&̝JdDrA)k5@ΞRp[QV7c6 8H& tUh]m19U~Wr.Zڶap ^n}vkbNC&e)+-RIIKb,+?2%C:&.;J5+_Sp) t( ̍-Yo{8u0Ŷ1ǐE|D[ۮ?#]6ڛ~kGl#J~i8A$AD>j#eƷWU8df)[@hDdٖK?\DMH�ܩI=b\[*DoH'ľI'=-J շ/d񮉬ꊪ;/e|/3l�/* xazZeGA+=_ GjY]EO"{xeFe e@Ϥ4I\J*#D[UrE/a�/ƨ'u!@_ rARMP|giNFKX< )-|,SjdV쌒B* {W/i<eP%hz xio$*Ax;8S FAKC�iz;N&NT:@;*_2ge5PY$ h!)(ׇe` B)ƽYY>b#Zx{lE}(ǯxߏQ-7CYy!%D.qn!`ѥa^c) aEqNÁ&0Jg=@bл˜W6<w9SO~[L|H.I>_dz rÓN*M4I�~g ( @ gY򲁞6isSACwoWI��gw<Q6c>Mg&_rr {/߿zF-xh&t XU[ k}'lȺ!Yo˚iRGu$"I&S�O /MGyF磧")I,-(Lo^9D|TI'D+y]H#I}>HFcPN(ivف灑ѥ".>4 ᢘҩPI.<@~:񹑦<tyJ "vB%\6{֤apD1G݄]auw`iB`˜Aϖ"`bW`#zIjRù5:K B4 J)' D<M 'TlQL#\,@RQD4Lh?PFj1͢ Ƙdj1.7{<5/;%S�':?�RMs*�vtlL**c]ɼ:]=Nl>e@#7#ׄe?Hu NY zFR>k{Kp4T41?seR3a8<&g#8qo" Diu' X?z5##tMf&3 iU19gꒆ&PwS#\GZBrHK@SMx>3* ȔjFe"K ~7~B6hیvΪ,1D;oN94�}Q_ )=l2h"=x 77R3ҫG鉙)hp;:i/lu%Q[ty/!RlWBLC`\XZ毐( -!nզj+jN6z�A@ XdOe`*p<FEhEr8b1䌣"ű c-!œlPs zs 6EcXAD-e<3Cj^+847x)X MQ%O<P,Q%HFn3,,(+Dt7J\$92Ԕb'-ƥqc}R~PB{0Ž9jzjl 2"`ja'FV `<�VSVeR?0nH{$Z=KbGdiוQ:Yזp`Ti{P$d%eT# MGl*�%ɦ/*C $Qefxpz~ 6'H26q�.QN@b#P@_u3H8sEǫLqs()r+ty cE l /;czER) }Ȟ4e >"7D7qʠB,z8Rv{#j۹.aq, Bqh7IB5&}39J~T#=HSؙ5qLt|J"D Wgjf2=0&!K �ց oݑcQ9,J)ci64tr"7D) m}iC΅jȩ&=kZB55S�g#؏z^o?˿_7_^zxDd_Wo0~@eےɳ-I&iЈL;7PP@3o%hÕ u0Qb=IBM;2 .T6GQ?^1?bN-6()cp\r3ޗ+%hZ bu~E\|!єubiN:#G̎e2K*J8l)_-`ե,S4?g(Z U/8"?5^X1&{.intV5 (�0@ǪKS2&LFmC֟6$uR>D;k8wvAWth(Ӿ~.QA W#pX6ƼfF 'ͳm}pCa9}/I~W &pU{4@pE.̈%GvWyd3948TD�i.Rǚ-gD,cB1:P*aZ|a쀅M"Nihmcs}$į?:DC<l+6M|wӹBCr}f5%>r//SQE<žRO1֡Ц"ʯ z 3d�ub'3r,+E 5ݳf0bi8w6.67 숿 P2݅@;$3�t!gF,h؄`aKd} u̟7cY0݇Xdkm�Iꀯ1S6pH}?J-`'NkM}ГX,! ڐxc>Zob!3 ?C h*bG#8@kZ:A]-Ǖc"[NB?F ]hꠜHA<z("ʂ/qn kUN+зF]� նL00)7:2vz,rw! d6(c7]wm]y@ r&l!YNc-wr$Ւp`Ǝ䔴 1a7<^3lp@R}Ig/1E_(x2cZ|Q-//l)VqHMN2) [N>LH`ə6avm.sDz{3v sC%X H̐YGyCOA!fU/'F�T7cDrb"j&9 cLxgb|T,ɳ ʂ$L"<7b(#xKs8z@wgܵ@Š&T?!�]I $YT?{ WN5bre`X]ˁ ,#YӢ½ 1L* ΈiQ׷(?q[)ґxf0t<Q;-J�nkggd3ǷYgAFx٠!l3ڡgV_x0Sqf y?_KC 7m7RdP }o@W�7 CLGEnoPbP8熺RjĈD^q,,Y J.ؖ9ImE�Рe�B$ h|t76zڍXJz�G[t{3Ct]<|+8gƝr =:x)ZVdB:Pk{'JrqsrER8)[ѿm?@[6gHDD'wUR݁ Fһrb8� _qqM%؟FN:d}PF$sۣi 8H8LnXr0d{zc~T`(ޅ�5$ۣx"IV>tK7{M׺'x?盃M1(Se.с% m;)a6=m.TYcPJ(X~a}O~pSx mxdME(@Fw ̕�j0[I1V}pw/L_lkBuna)/?4:H8{r *o {pqp"P`o#e6^=1mY; ް\~_G E׺2@=Մה sQ[Iuz9AZtQC Ie5%:cbv^nUGU=_UQ4TI9KtvCĨa R{D�f. ح_bGXLSRM4Hz,?%X /~NK fs|nO" Z,ŗb{b`m`_w AV)[٦'ϘA J QĤ2$mSĺ MqstCO~R$oCrGSZ#Br*:wl;~ɒ`s 5MH xGsxT%ȊO(Qhh;tQXXoY˞*oniG<>E?wCA[ώ+?[<8E-*!͖EH. V�NHhnL& ] �$aEgW ׉gv 2 q+xX䈡?pt( ऒԳ8lQOkGxHjU av <m}1;].ъZE2NbtO$6b#~, Cާ+86UM#\4U@#0ۚ [ (aݛDB;UhMX%"k>-&f'#CJxX:O\:E!+OV%O37 !Eq tVo/z,\H0Npy]IoU>'y!L"wJ^8lR $+1 .L?\n*\v6ՑLKWco }˽s!_r @#u!ف C1EM4!Nw/!:\bC1C 6-PG˖ŎKpN<<Q@4Wu7pR08ga/ Ba.Fo}Xô(�cʪG&.p`L{ƹ(~ҁ;N;CVǫB`l룦sM4Vw̅ vrLB2e"QYV$4<*48ԂI#H A/Ed-A8# ]SN2R=gRXM$4o42-Ag-o2vL6+}XGCk*& c!vw4MS% RܮNz(x;G3Ρ'luCp!#lo.\^ొIHp~[(I 3=Q :+>w,J@Jm1U xm5YdvV eқoDq2(oqH{hx1"v[|钀|lO8f,3S`c%gAo�wnՐ"]h+`Yzf3 n,{cSxY_2J1#aHRNž@.>.ţ@ِC[Fj9zI6)5#t_$Ib`;8&8=G\GPAծ+:uk&'{VێGБTu]o$މMKN8*״}Ph�{qФ=AŚ=qChm{ )=٠)9jF2ލGTHuG(>"FBлP(# 1V<nUy9ZY[=';Id7kZ8aP}?*4b&GPK5[o5*2ɨ.vLQ,ui9gcUC{iSC!VVB0d+;NPBSPf/�FԊ!+z"MNȉֽTǾj|" 1Gh̡ผI qMLM*p5RlG!h-ܩ<e? -ŵ)9.+} ?Q"6t*^�EZ=Mn!%n+5\^Utʲ$tȐhdlR~Eҥ=VC+꫓x Q`]^ V�'$_'9-)/"Sq8WKn'LR)xB#' X'sOgo{�#ͬzG'P0PAu"ծYqF?* q v' |o@l ֞moM*%/ɧ47<B vAULu*nX�zFazUl3E~`Fij>{llWQ$w%Ⱦ!DX/ŏ=pY˘:`h7MxUUO-kBq0 7/E*V<TvGwP=v4 q\䮫t/3V#+=hާR�Jg67! )r`CD`TYH0N%z;c>L>$-H^ᰨsIyL0M3ȍYwV|�v˛��uBo@82Z)9 A{5!H<@#0&|/,;cf ?tm= 9X�44HqsA4 Jw@]H o*(y(Jti ,L?j"iMGх63$.P61 OGW./o-<?b}v@$�0J 4SK@ʁ`)|PAJFtRŅ{y()zF6ׂn&B nP�wΥusp]Q4EvQD:{SET" Rf~pɢx�'p |Eeax_E?#L 6؍~# 5ޕ^?8lB˜&KԹ)-0bӞ�1[0Щ+Wj�[\Nh2%[f;Gsۉ,mM[8]2cاbv` h[V1�eN4/74{A&b' ٞaV0y<6r!2hyM;6)a2w0t`Qy?@�̋"Uy28D $hmؤ-a<*yMWu �0Dm A3|`3+|2ȕd6良/?y+@K[ b%̄ "B +A|O3�c= Y8I^rGׁݢKkZ #ryjv\Y#$u5-迓a˶ ׫0 erc[f0roD:xG:E,HmE2s#| 1گ!;wŃǙ,r@rpD.,e %ԫ`0 Vl\*h#?y_x 'F&C5'zφ+vҧwbUpj5ѓ/%;2 % 1/||l-OF8 "4r:A &:`a)IP{*r#7ᩃ=h$)TWeM gr[]rQMJ 6<_Cj.ɰZ{0e4OQaL:O{aPQCxBvB�ԘbKZ309Љ(z{c%i#V:y҂vU"a<Cla2/^+HQ0KگGϊMs`(d&qi^oMK_[/ 4-@Kj!p*S/l�(@>ꀜDC0ۻ4.hC0NȁI_Ġ퐡3D5m!!>#-)>C \jz"fu|֡(?"G"6N "Rh'Xgt.0-uㅩt>U b8$IܰLveDV1H5/9}OGY/J*Q͑%cE?�zj0]�bBgÊ̓&3�_{M}j `ݢ5ˮ{_z]4}uZrKr"ڞF~e䶩׋.K9($FׇBJ KuT/=nx_3g\vRt!d{�J N4ĦΒ9EP`g i$nmJBK~- y.f�clĘwYAZ\PY<u)'M&0PG3ہifG/IbՎ "51 upv~ѻЁ]:pstN9NqhĘ(FSޱ{2j9&ɰyjJTHhцy/9VyO^W�ЅoB0gCѽȦLxg 6Pg8|b�  5LHTFWƖv+3ilo"k{rS;_sKv<]: 0EI H(i�@}K8!>bz =ܴ8!A7:L j~cã8`<}9ZWr<?'AI>ey4܂7ǃNƷ(ny'&PDZhfW/F$ &#~wTu<#^iO-`3 bGs\@\~LuőZ8|,I>04\^d0θ/ᙈJr8҄T*W}WP4mnf�6WNY"ܚX@/}(>�P痑b eV3| T={IQ +Dbc}~,#RCJ3hfę{�D̤'㙇) L8&d1E֜h{wr&> vUsuF<jH3X bʏ8#>'oS]ZGmS>k1ityDm, jv7Hs2BDU8d ZuU5yN^YS) 8KM1G Ѝ Z1*~*p $VQkb4flLH]\5GN=$4]>w 緑pi0'z/ߩOz`/CP Hݖr$ _UGGcL{ޣ_`<LQYrтv8b#d*?WT"5ݥ+�rv /xyS(IH2Mf�qfnĿ,샽<$♳/ jTWǞ-'gu[427Fq>(0"'*Eо 5+"mi7(ZRIdzjj$iBA`i5 +n݌Ngt?;,5傤Utܰ<VnA* m�9wqcA9`r$VPCHzUӓE{F*yQo(Ix }(6?2OMMsp %ET55 'f9@$ÃGj$hH̸v-#CӻBhDq|wKl@%M #*Gs.<lGmt5Cj+c�,�X6E q$Ě|8�j %It07oPS'<+Dd9w9Fm{ M};کMJ*`'m%$C[Sr'T2q+�.dֳnH-] Md5=ƗoKǒ G]O^bJRRr~ҤgE0MiF ȡݳPn@>]^d,\|<D& QyN =\/ǡ4z2EoXx]Q 2G@;CcqkE!4 %roEXGQ4w#aO(Y$~Na\Y4a3ɀ 8}xNL H,f)g M:Z?v ɄxbFKYN*oQ ?(A[<Xy] c[�A aP4e7ñF9 6)זb_"A:#$ãI&?^|04Z�ƅe hQ.ք)P?"pP3#3ZOSH(J\OIZL�*):l:aPql5IG'lM!ETuMR}| +QMԣo';� $AG@g=@ a5dwu~Cl{Oe%Ac01C2(k8!¡MH袿~H#X Ow`tlƅ rmr3m"+ti 8jĽ T5v$q*;-M1w44KMj`G؅I�2�=r`N᭺+D<I[;7 1 UH3ԼDnn8f@R`KF[ [2R=MEZn ?S m9t5tH: >$2/.Ĺ瑍 VAEQx_Ii\ Ѣv\{(OpH4= qD<cզqBP!E?9EMJdU1ʣy( &.p:yWRCXֵP艢[g2F͔/ZLL'at)]a;T~sf@Vn pv`Wup X^_trl>!3_/ ໚(&G 0t')tGQzw=XV^Z 2Tv<9йO cc }:gt60'{z#hkEP.`2!L>.Nb t7)R uC mzDEe4ReX-0:-( #OP><*KE嵜8%Sw,C`{VeICv7&{f"{i)9iH벐{3 ]`$#9N) 蝓P"^fUwNh CZ\7f9DjFJm'3[/"I ̩%Z8KŲȗ 1λ4+Mw8v4pc0`U%<?KNTRCLK79! Uꤳ au2uH50?t"wB%%no"6 -҆]'\4Q~`W2? 9J_Uhptc}Oi@\IXp;xU4 O #o�́L5,~"clP('bw€g*0b/pMʮ1Nґ,lKB9�e/OXe!ʧe*袣 l:\EvIgKF0bE&> ?:`�p{*+p<! ?I%I= htD %h+nQ�itHbW[2+r@$ghŗƟ;!R#C@%fڡ:`uxPijgO$ 75nG1%5Mj" 2lcp%T+w_e 70�D@=`4iyGQ L^F. Z"ox2W�E<QǍCCa=xz{?ƪ54vQ)U]l#/4>D";d;[&9$x~(&QAy>L BoR͂dG O%@)TMχV5RE^Da' }T9?dyJfR| =[$Vtd_ҫIgMws UsdrwZhOkLbpub94d{6ڗpu`VJ$ψw(Cɝ4" *w'nhZjLW_N׺}~rH֗8r6mg'sLF~ZIF B!Gឨ�O) jjn$q  mIWCD"amѿ8S{I~O?RIQj<2�щD^^Yerof ~Tcg"2YrwA-TD>-aXhu5$2~ :j ǟǏ zH?s48\mͿ08*:D�ӆU?}?ko?O_/�_ Rk}ko@64 k#oXT!hSqPSTKVɘ=­Q\~+Ptj{ +ro d{S1ohcG{){`AEI =o،GP$oy&{&u3{MQR}KJo�hO7orF j:qah8@4`�>ϫ|[${Q4E\)?޾/Fqyaqo=ђ>HAd$lHNQ~{ڏĭ`x@-Ȝx"4ot[1nޑ[xN; "˷FW8 x%~z<M^ h5i[PYP<oxj@7OUQ5zrpOmqpT}O/~S=uRlO}+ [b+( �z5@IT=;ȡNFW6WT \Uʏl2Ww뾣#*]|ӉaLr|{*/Q[!ּP˜/ + H@M ՅuWhǎ_ύi-�^NL(oVi".[Ug>0*Pl9v ّ`1{ %^{ɪ �k+CTK`]8MPCVntOGG[<ʹ էCGJD/%}R7)Ur ~?mvmao \ԉo? GE?=ꈼ3oIJs7Kw߸l #hG&,�t/79%0T+1;'e!1p?]}ӝ[BG?k/?*W4+Ya$HycYۿ>7?Ϩ/_ǡKV}93=l=วC9"pA!DcTbmWXRm'PBf[&R`͖ ) jad|͌�H~>ta Dp&{ƅoy xq {yίN`:&{ G"n9R}@v.6<rX`|+Wl!w&x0X<أOKgw*Ne8Xs Bo�aw5t伧wT͠)"t x@'G޹J]W}@`lZp_ C$5  P6^cR\AR+t)̓F9{~.BW~y66을$نnbs0ԺU>M,וt^0Q P@ &+-}Jo %Kwד(25ͥS:dVk Hd`yDHYCݝj2<@/\I(jc ?�3@`d$B M+ V"Z B 2-M�҃rʿ>AOQ<8G[UC(JA1Y(I-4_e~W9 6<༫"}ᣐOB'0qHT\Mj{=3A#H/'t*O_>'9V|dOup - ixe52mAE\A:N?԰FM9x9~8d6|8E(eMCzz *w^Ws IR6zm^Iţ�w:٥9nٮx5ܒ$:. XyI*AOs؍X5<U<(%Y<dc ޴CDUS%h?@d{ xyڋ QϸpѝCA=N-20i<(Xu9Aޅ%gprY{)H$ScJ&'OIX&Y\/(�a] "u�ln??ew}4xsymb<"Hb!}̘';|ۮfx12cgNᏐa!HqAbMc?%#cf:!�ĮĂ$gD.]K  &H9�C3{B$Ǩ7W̓n cPSްRIyldRE`4RJ7{68.p8BD"�8>z`u2?@3v\2%<<? �-_ߎQ]qY񿖃P [)avJT9'%n"fvTOKȁ ,]x[KZD8Q9LLyED]*˹5]A{oI?,T8TiRQ--(Ln.#R4殻jS%16.T0 ܢ 6 :H v%W050QH( 8 |NCWzqz6]%_tilG۔ Rg7Prl)yJZ5u{1WF tUNmC5`%g9#6yzLQ\?r h2πJ֙-+4tXOA@+% H))W.KPVT4i,mKD{~e5!Nor8*vHL^ii{QU>ԍm4ة;}erѳ^GZ3e9WP4}& W@*rG4?kcI&npu݀8!=+;Q, j"Je"�/g*D/Z@�I75Nyi+!¯�,矁ȍN:QrS f"Wniu Γ K|*7 AN+jOcFp!DM)@J%a)3B.g9ѠCJYfCj??:SI.PťNzrJj8n/hc:HEÝۢ^Ær<�>nlkCAhf6H %~4p4ӖÊՑ4*N`w0ܐ�foUzc~@sWjNԨ rJ£¡e <V2-h\D!')xRK;Md&̑Jgx+-24p Dc RQBBȃMWO"7HIӼ1F=(Q(cB*Rdbt+M~#;)%7~1M}jȩp%Ubݤ*#)nRDu�ؑRFӟLW&Z*CkU( S7`mwE4jX+TKVSob;IS�S3QjP#WW  l-<|E2pAKl zJ`L .)[$ @�x~?@Cv slE!}6H&OOi+hDd4'LW_O> |0IFO8+o98sт$ V-8ۗZJxe .X_+50 (Z~!X[ʴN@n>WO-|@C|tG9ǔ" rZ9l?mX[pNIX$[޽d,Sdi21XOz]GZ ђ5$򜖾L"9#{ZPj89ď #lVhSm�a k+̋&2)̥=rq&zw"T2(rv 9ͷL> YUOtb bwƻrxn\Es\ u/0f|)$v]YK#>1"]ө`}#[YX, MC4,[{eRǿ^e>lW'}]vg ')qLN$&y2!m*R`ݼ�p)oENP"ҷͰiN4Cⶶ8pdb{q 26"uϑYǛ4ΓgjA2GedHlvOUjƣE#7U\„ɅH )gd mxLLG˜vrhg'3Im,8)V4>C+$�5ܜ� !}tB1dE:A*ڹ )$KF3JRS3to~+JrD[d4鴞4% Wz5fiIOc ,$[QėTQƯ:%# 0'\x9' yrZԡ>_ >Ae9hthi<؀-.QWW&S{M,`7`piH 0@ <\8bӀh.Ʈ1==g>VF塢72LQfjBay: #]7g]ȿ%|%_UFK. +#:&Omr]nZvOך>�nk^#0Θ<bkHkurerEؠ2*fHc h$!_~sǒLƈlPAHSfd+OF|=!f+u;xl;N2GX2;%2RZ  {}MwxzB;AdCk&DeUz*} ;^QW O.q>f1S)�[;4>=m8#6p1iP *ĦG% a#;aL|/)+g $&�>J'$V Ls` @QRBCHEWdF{#}ZJ zY)>%r,F@Z46[ xm>.drV@ׅyˀ2d$tҗ&ҝOq +S6'i x D#|jIBrtwsx^ݠ6ԛ/$V?6,GI Z!찦™@\W\Ft6<;p ̫|2$@ ONΧ:*UӍiTJRH9ژH]HFȀL N–^8F|` g)O(+n't9.n]AaDUt1xJ\#F<Nꢒ @g=f*�>=8=ѽkDU# y;Rk �kX!_?QVݠr" 6q 2Pz㝧1-I<% F-JvV0p+_u`zޛ_וB^uBtx1~i)Gv;&t &C 2D<!3xP4|<2_;=Jh$dZL3Ғ2<xcKcI#J.|iXNHof,6G…"{v�Z_ϻmT^4$dO̻h\GJ/*Ry|ȫQw.93)6ǜk|�.8DQa-&%jϫWa)d@&ω,i8)K>ԢeB?\Q9M--nsbP+3R L90`~ƹlX$Ny$Hdo,GW Z O[[xILrH{҃XU=-"noԹQ"SGOCDž"]nG z71x$ZbΆ :h' $0h>vonMAqXY r"4(Q^ rnM9E<tɧ~eaM%[ r1S)C{F<n:IEN}Jx;d¤] g+%;(mZb?A۴4ڠSd"a b f)lHW+}vߤUn`l8=}6ըhφ-:O-1`>xLH:M!g'+K�b}ұ_د/8KQ`apq85 h(Kr+S`s#z$Ÿ>@��ZJMٸR[C�MF T&=^2]ɀd4ORx;1r lE[!PF6>~A) 9{ ~?Qc$ˌ6l^(}}lj1Ur'#1j8i?1>4[=m \Spn924o2"͘߅}3SI$9Azr̒.O^L+L @,DRI+ae&Gr }Υ#3>hڽX; ψ̯9¨�!!R n 2!3"vbŋp~<"Zg\1Ѧ"=2!hwL�~)^.>mrx"2iDB2>rdjbyP/ HkSj@$Q60#a-wS>NZ>CӼ)ҝwQXԞL(8msYV©Rz$_<{&ԠDeWqLʏpFM RsY:;Vj;IB+It'#yv !HQ=Lq/Y+ ,! x Xu @ǂt{Sy`DZ~ 5�;o�,"YlQVJa�cԒ)#F� $aSAfL0㪗3ФF{>wzusCR8@3غXmB pa6:̕i=ݼ<& [BU@xx"x<?>>bV ʠ ;E# ePn�dz" @ $}j}%жKϓE ̒<M|�Z(Z�e9PJnQ=ɭ\uר'LWOoadMև3&~Q HjM1Aɍs0:.i R -0gzKPRgn"~s% !_$~5&2˃@^iL&>S=�*"B} <SXeЗ} >q ʀA"#y")nZ:@㖢he݌c sXHB1=nA吰OrHq@9y0+X90.gzV`E E)$3;mH Z\ ~3]|MM:S,s"J9Wq{Of!QY0VA W)=.2Wیrô ͩ#6+Q5ޤ75!~Av/68o"gO&D/XQ"�_LUUyreWV cĀ.Ej{>6 Y*;2=BR_VRJTU-I. I>68H]e}>!+%U G&=SLF'H&RqwE]}jGNG~b%` 2$,Ar$xکj:V'k9sE#[+K^B�Ӷ5yIaIXMx%B $~3 )ij)�n!⻦>ziKzHsN2V`|'<oAjh`cs'q/FfC81+Cj r%/|B1\>9GYB!3ZXZ΍*hהah;Q?&3 5X2�/~ AvG�d?3 OMCz TMbdJaN"qMߴԸ(Hvz,N/C#G>EQgI.�_yؕ&l2ʘi8j>ӡ%V qҐHc^^9/1a> Q}^^%=QaA7uԠ|:VT`1=r4�vӡ&K]f AZydƩVq%Uw@$qf޵]H~h2~Ё4I̖K?30,i3 yjf+h<QSc>t> NgHdA194Tm`}&ڝLP.W _ƕnI,/HGs{bG   <`.HÖ0-5tHzA,+e<5ЛJHQ%�Hq5c+$5YDK3 Y|U*,q@4-%{c·hp1Ae}("`#Ѯʰg iTb[<(OkYL>D\J_ H`p莻ݍ'dD]AִEG%VN@$g1hܝ<${w 0G{U0 ?9 ӑRA>W1)&A;1CSsfHy,rWH r`sX]. 2p:zΗm̪D}:u9G!GN:xyp k?p"Eî ^ɱl/i!K3Xs{E)DϚO=@7|H+;ى�L&r4Kʢ]r, E.c2q*CF~Ы,oAD4 7nAW<madU)4LTLc(%'qG2#i(} v: GJ!J܎&xJKk}y䵎%ՍgR(#B+YLIRÑsiȴI5*1σ%]="|'28sF,QaR3s-RT! :3>puX{*U'b&ilŨ&p+\*qΈ=$W-xLҩDwn_T_HQ>lDݝ"8n}탯ً 0FE0R 0m>|L .֡5<@/3ݵ5uĈ,@ys`5QP<8PPV2'zRq{=�ћ>'gCKQTe'Ig9 x; 쎳4^Tn{儆)3SR ӧw)rX}NT'\h\e@>|2^[|'$ ˷ dQIrRt0cw@ 8 X/E D+pW32_>S $ÁF `^b< tk!_m @NyriSg�9TgF6,Y2UM%r z5/wK8>"EEޙPSⅠ-l�zH)au"i#WȤUxG͘.2X8 J2i1WئP?PAz(:IדiK2sh"ZR0rZ:\MM~" @{jI "oӊJK irε\`zOt-5D PfMT{y[GM01E]' g(8!1 c`͉R9ƐHSfh zυh>ZX=+!l.!n7™H.\3}qiiXY]{‰JUJ} j@_rPL"Kj":BKYq?M;#!9 ~Bh1_ZMJ5Af35CkdE_+(A'cVq(9!ãNdXR֎mIm׽ d#t'xXWn$I2%2fL/){DAnEmGD/).;iQ;b8�0 --[x`n�RWR[4~QSCm[I(`�Gmu$BvC)Yu[$Q q[$8R<oˊ2`SDF2IHP\Sn�.$XN)|Ei8Tm_~鶓O{D0y̓Qh>;V87cV50 UOZ7 &`sKٵ1M:ͮ!&lf}I1m,>Pţ?�؉sCfJ4⃎v�&3}uTSl]?ZQ;ΛŲ"8&\{Oa�nwgJ({V nyǀGљ#>L*\JHr|K`w3I Dg<0jlVפ;Q@d L7S20,+<뾻q<(HPpXbeb(8Y7yBvgfDC;7K{ub#E.z}%\z#JL�,z5.` `ԤĤ@ C0s4fΨq8}_0GF(0d"2Jݒk NQe`ܝ$J{R,)DweKւX=Ȯ,˃]h2'C܇̪B^vm aɜ6>HĖS trgC ͱu2 }]0hGm3"X9C昑 9G 0[ #[6o Lkcܲ=߂?k___o_o~zO Q߼gJp/r3D0×CuR/>Ð,tХC,PVuJ`"gwE ttn!6�A�zx D΅;\JM(G@ECfT/) Γ+L ]Q_DqJsԷF|(RI0sz]tA2"Yu7wHxwAȄ "H G4f^�wtXeLyҎ|_Y23D6o~I9?"YrR 6gQ6UX { ok!G$4޷Ár@d+ KAe8n\aHz87=U ~tT %BO>Npt00AzG11\f)A.S*T [`Ч:Bt#KvfEW|hZA¸gEߦk3.~?Yv[Q/Y5u-c 2Swg"0�ǻl|iߝ&pذ$/@ X8!14 !.Њ0PC#p (YTYhdXb%7^"%Z@<(v uݦ5}{iE|<p]hHQB #^[\Q/s b(}xlJ}@oJzд1d}w1 ԟ�CÞ&OwIpm�Yg_`).xg-0/λ-n1V˺]l+l6{*ȕU#7w˄3t ~D%uCE2^'[+̈Y¸wK @iy93L}C˺x畔ӟdd:2t0Q=XixEGK豧+:fn@=.OQW ײZQ~dm^nK]߿*nQ ;׌ (ieL>˪t": F4_ naka' t҈[8D3-I[ d?̨e:,a w]khuG`a?Nvl4dfCȫ:poPO%&ӻ)X Q4ʹ%xLMYZXXw V$^>5p0eܫdJ,@l"SA0Ok$\' oOo!&ױ'yȢ3y /BknUU~-"8mbEb D ~! zmԄLµ/~)%Q:xNљ;ARkg{fm0m~aF(8㩣o� cEfmb&hp"BrV0D-BA^Y/0%]pJ$}:4MŽ#]\H Ľ#zЇfܰ)m2PJ ɡvK [ 4$2QuVҋ<QPt_]i_:ɮ-e)_'~cif@%1tzҁ1%E2_eAU"rl>S%ygYCȲ}gDBb`,}pmp}iԉkݛ~  ҆DfdpF`jH@OhL }9R#P]ebR ^ৱ2A$OP߳#nl]p=?k DFK*XKRFk9!`:g@ 7 X$c gY[8r_⌤wk+どFkxqV{9OtA,sedSBE䴱唉/5s$r-. G`؆oGM  0qڃbԸTV!A=Eg*z?Ot@W:__(-lۼpC% bڑ{a_M2 ".Z1]lOwEDpBll xִ.htN hHˑy<`+\h Z�cߒ+)ᖜ)gZ|Ԟ"TG}0, AhjfRJS%�Q!@R;!wM)ZY ʬԭ)>�_9 !U=ֽ :ȟ{h$S3=F -CkOEJB΃mɺ:3r6L t.V`[kp[@RC|"ޤM{IcAm %ƨj- DD1Xf yOJ6u| V.@s|=-ЀjcCN'C0&?uT[V<E8nH|ep$,ϱ5I?V|C˸ʤ/ S_I=MdۛC̟)6W<`;7jsz$墵B 87=%h%_ri\҄h邂`D!]b3`Rґ6FV-"Âwv%O5ă+XgR?l稛"ivApr {'vw^= 1JRV$,Z(Eȏocy!]OhUhzo<7=$, 6{ꉾ3$^mDOS`*Z WKg/,-\01$Z: "y!UYC@*h.[-F򥎦9#j!%,yx{vJ ~@anh꼯4'ȀkR*,hޖb<n))#ïI Ae9hiLeiF"v)5G*Y5Ԩ�6,a3Zp(T (4z9V3QY!k[&"Ai.)ne⋠0o,!QUߓ>́B!+`66P35@Y񣧈(Fwr턄xi^PkBR$<>!5!OZmzBpX O%vdvy]4>B{'m)6/:re9TuI bRBy4,AWrSgGPPPreY󂙘?c;#MX<4GkL| hk};2pl_"(l5b،fD)bn%w\%hCջ $h ,jEБLp\@sLw=hYY=(ahu $f̉5ɴ;MF''PJfnid]7w +.= )(K3`]d9 `#%I!n%xXpF~hD=b*I~ZЎ&6.~P^CrGX8A}ڕk%c?%+P({Oܢ0װAĥo!,b@k)Q|dĘ;""`F2 <Ơe\Ԭ#X+dInP$/1TwF0IQ٠: ZTc1*3 pnZEݸGL/i uZiH "EnBM.x]pP HhʇttTcI�(c5s$\8u2 iQ 1Ha%Jȸӄ^4Jѫ{>7*S;<.LSF�1)VTmt7am_#D/ ֛w}b(e"nUM[~ 6aEl<v4Kl{=Co/j6D6DzT{'2̋AR<$(H';teI¢av MiE^UN+Q>2hF~4|@uq=_T<me"1@h?!E_d91k B@� P(XKe 3$~@>?hZ (J ʖݹ/-JM1.s6Yp_|Յ>&'DizH%ރy0=H}1漌=9#*dQC2@}#])2vG2+kN&>% U<kuFA F9a3M6HZ V[W$13;T#5mVcuL >ӛP:¶`ˆDOẩVQc0VΏ9}1`\|ҽ7y Vt(4`7\v {pD؝%Qa'_/6`GP֒3{jAsq*Z�Sy}8zN<v| >s!9ٰ|D?ڮ3b9oٺq5$f׋Q bw jױDؼ6*O~^5&;xP_Ok,Gv'EmFRJH�bsR eCb"uޫJ6R"8wTà"ۡ_A*<0@ňjw,dk9ؔo^x:f)cz lk8ɨcDŽ0QAK(1[$kdT_[[=P%La_}vŁނ +7H?u)+xX&w){9*c~t/=1+VTMYGr'�cgx$\Re+.hOAX_R'̀A`bձe\6Ld`g`mi:/Po, kTgJ D#C`T{5|l؄ ';s.3aX/aF`ԣǖ֏VqhV'-ϗ&F!-GNYf&Ų+'X$Q#+)_l; d9f~oM\'#7/yn;dGED2nL;1V`ӦbqAhM# E8ddn GV3ᝊ�r8Y= (al8)irŮDF(nྨeVzKg_tbKV`8/#> A:_Rl~cR:3q]Hp2CkC6%#P$wݬLmb{lnрOd,'9ZtpڋxÇ,D-u|4ѢQ�i0-8$76a aZL>Ԓ)y{N XYFޟ:(""b($?I y2$倈đ4S?"P멟l/aRpV ]"}[=Lf"Nq. r^ 0F.dmOO~d B9Bx�,6zRkOBt+LE釓)mN�-mRj!V@957s VX c%I++ I.B1!#at3Ư?s^ KτDHoRz%mJiui,]zW`)-vLPD&ˬƾ6=d�"fCF|'ǔ }̛M*8b~u =8ԄO *$Q3MU)G`px`Y=^/D j%- tO.ƭB#]kEW-*+91ǵ>G` ƀ*;Z(3,5DÏn:!SH/p)kfΒZݐ-$2ȶaQJ>ªsn$#ST^1~XO!Uͣ`)Z\e4ޔ#v!K̵ Rĝ" ,aI:UQ#E5:>� tۻ*2�M.09H!@^z[x&F0팑W'\ѫ,8AL<9UD\b,qӀtpP 1SCY3'B{'BJnJMc] .44ov)&(u",0|B.kM6&$W/Iv jrpÚk(5�fBǢRt+Lc"9 w 'H:P~bq(ӿK].ŋL] ) 99 c9摏v@my+P}qlt+}&C)ϤFݛ8ő>¶Lgj=ۅk3 ,N;/1-m@69Rw6#cG`ZU뀋$mDWDkljݺئ ˊfI6Nj_6[JͲO)\A�[Mlr&`TIYS̈́^j s)KHDQgU]ŵsܖ yT﹗ǿ˱Տ4ݗQF:րW_ ;V}F{-c$LK"{B XWYPMFt oIyS3BD[Q' 't$= _DFlq{&xW^^E΀lX38ӛg<STn{ c} ֛O8IiDoboŀ[ֿ| y!vВ)tmi dłar+\1G okFuaQ}_`\1)8s 93VB0Jd+[\w4m+q)of2>xyDFb0l*n0B?mB[E`+Hg"2]M v>7[:t~{3!aS.N!qs&K/M|IXo. 9} I(eﱪvcgj@P>IoBLT+ `h:Rs^] -x6 /74rh!! OX(Q<8X@�cDɾ7%+0"Iz^@|^8ˈ<jJ|,&#h1i@|DJc#D@"1}eK0kB9v+ /�Naj-ށZ47~pU\Y9\D)04ZbP Ԭ=0f濺oJ͛22[" 8;2R8/Pvx V7PnoK 02V{C5e)ϰڐ(>4|-!Xp( Pߚ^:+Yِ;p D5 -1f*;G34U84k\FXBqliYRbr=B]h8 >) GǙ/#zO:uN@/؏3Ci[\YuIZ6>W8UP(.F[}V lnQl.0K=$f(_8RȠ[\zHmԤKL"-V<>U9l.-XbJ[$D ꆁVSX[Â; f'S.}\adYKڕԋEWNXX 5^<T\<KiHo* . kq�0nKo;%-{h"76麂Sjb`O%�t⴦<\RFI 3Q-G-Z8fZIyR>T @|Gm9c^12:u]VPjo4YA)Z-?r%Z眹z`H :4MlsWx_^9[VѸJyD* a0 )dov-;so~T6y#>@;s6K 8ގo{\?Kj90^`؇,ĝs#OImCv9Ii ĂmiNęS3Y#{UB}w!xdž##X-VQ*PIg[` tMlN(L$/ P]C{1a].`|L*2ce6~ɕ}B3>o P @ēIilc UТaTzK=v w6ۥxƈOuBXvT'9%)-9QEq<-8[MH~%ݤQrZE bk߼UN*PfI895)/!"Sz @8P \FZδVSJxBT[ ԀFr*Xz^Gw2xQ JkU+LmQuP@0!|u!k="2x9RC,_ 3$%inGk9K֛l4pT}=|/<g&e|޷4%S a؈Qx"1;ƮZ$R›ѦOP^�,Mx@Qɗi}d7�.CCA+ͺ!B7½! 15Ee-+!+JAAfznlXNk!Ҥc&k]x.,K(ɩLGï@3 YLP;!ō[jEy~M\mX(ãi"~yd^B>S &S9Ѭ qG2mNj8~9 ͳ ē3wKs^8/ko:6j-b%3X1<X,}CHu4:q68x< & H: k0$YԨr,k)`<1ptZ8Gl֍]m=uJ3:M4~KUvu=~WykM,o1fbQ$<;΁ʰv8.+ ¬JR!*gWFI!Xo,:4GKxRi֫)#p g&w ̃-`R 1 "JK|X/Z*Gtrg bIp qS\ғ#i"M8_ G7& CBߴ9[`%{h"b2&JRCyojxNr)lY9o_gRmLg]oMދkV O/唢sW P2W92A rj\ ͷvT" ~&ȹ$4_d;Pe/m`;U+27ȑ-NG$K&# ;šB`WjCӐ] G8v@A!W6o 'f3MC:uf2xvNH5Uώ06N8] q/G֬"p /mc;djP :MX_~.\2Jv)iQ`ceϐ$IP-�[4 [ -1�`@ w7?!T*KI4b啈6Bx ]&-hp,h(u8`iWwJ塃UI2\L]""�7"ʾ Ӂm\E„ulmF݌Q͑)Rz_LHb2Iwnw^1JR8b2;3 {4R=3;Fp*1$I"峄zgI,�;{j<܄߇f!<~OAc d75MT(R!%E([4[KpNNEΜ;>o'ٌ]KM^JڋJ"I~PۃcvĄeaȅ++H(.ɍ?&gB(X]kCӵZ`L\m jX<ai.]ZU`[Zۖ~uyMJɘhph#h] qr T@B<)bZў{DDZhl7%:PzLǫ`tHUMD 1�=QTb-^ F3Wc[lP5Pqk֎G"gxP EԄMϵ7 ;Y ;U\f42Ƃ0ZA/}J؈p>yr:ȏݢ f!Wh)SЗ GGG&1)üȏ$evhtqy҅HvCC4ڼͅ 5jK<LJ%T0"]}Sڸ/[UVJ(V\@<-8KlK2f 4t獮kRGX<b3�i2l7�㟇3]=жt<q0y -=JDϔ%h@!?r\AU|�11&s,& ,0Xd~=CM:DHXSDSί]2TMp$"+Ýf)|I*H. p.-=( !KK:(z5)d ;-fľ\X9S3FԾQZDK=jm+FxglNN_P@A2{НW]S94uƢUXvPgG:"VH kp'�4G.l` 0)|<p G4Ss!16w'Ogm./Z<ԡE;p_ M1%KEA~$omƹzFm- [4$A4�ض\Txx"T?Hh=/4,Nx ,;A^0Pc0|\fHAwV6M+,ۺ倞%P+uCg7l@=xW-sHa@UQ@C~Re+[X$guG$ xO3#i+D;F*( H/1m}TxPVJKd(j/;ʩD.Qd6x͠/43 _3A)H:p_9hL|ncb'Cgz7lTŏ3 {_O&[ľhr44s1nE H՞T! b0'2N#yw b( ; _^?_/uů߾O_ב[~MdELbHgM)O �'JdZM|/$�MC{m_crY ;@AlyMH>ڇ<{\"j־n/5 .KÊo6|ĤQJ@ _]FYݯ�?,}D۝pMx�= 𽿖lD<^+݇ CP1Υ%]ZE[<'zls5 mũuDk8A`WhXfժKG7~+'}Np~hynؠ)y/:DgDQRϓ]F;.΄;V4ّS gC*5r(`C`z^+ 9hM{Ӗ=4>0K"0,gYn8h?(R=&y.d&JfˋP!F/ 4>e| "1EWT~_{Yc.xLkr ! $94N[y.Et y̐Kz2,ruHt}(Wlir!*Ln)(K_]GP/ox:_O(HB΂2+qY#2w|ڪW::;j9<_0:&Fn/uvĔbڄE-6jrv.ZH#Z:-܉5yTj]sChMaSkM;ZKz<0ұ2%C[=–%$U�1ZUt{FNO?,P ӳ\9K$ mR_^!0y⒔ȗИ7 2`!0ur)f{tހTF{`~�}TlL,9p0cII_ IsҦHr~u٠{Ks A7X߅m>cjK5"Ro#hʪF_. ;1 'TwAnڑHPAYop#~9hmTC #T< M x9T-܄NH\Kz=tgn� 35ȗ]NPn+UrV/yO~xBg#1%֍wZKψLڄvagY;Mi@)I{ QpD.Ҏkꔤ:PEo _͐&~6ЎRKS%bbݕV4rhנB1S|+C/m)JO7kJ\ג/8*~*xD_!?7Ye5tdPaEOGcd=!KF D6U%QOL@u<cޜ.Jdƹ{ncM5U]vОQe_ğ9rfIXuiJfsA<Iӏt)!XTroj/z0k3oV|I`3-D5](>k^FH7tLtm5G5S] Jvl*Gj^+DŽ:&7S `yTJTqq*Ԟm竤){Й^#aQ :^hSzAz6q܈s3}AjNSiʘ|=oIC#`Q ]). M0Z!pf >l C}>4 IeG<4lrKǣ)|6С]bw7G\M'`ջNe 5 iȢ{%ZrmA4͒/Cy@&G(Hbj(Ey-܉5|8#N< g{\" Fߩ>hpA0ˆxO&-܈SHi}\4/ (f%!FxYԜj2@SKElctvJ\_zU~?_zc_^_#:S/-U;w 1&2;^l1p*RH_2-틍 fHn/o]5/pCӗr&xLzw^bƺOxxa1*&%Uf^r+;+B3+UPf/b3& )>b [:46~1?1̔/JPJڮoN{,.Or_/;~Å<r A=Yt۱8ˌ/?*5DRT/sԂ_̋IYY?7zKz+=0fG{Őn?#O'o-ϯA8>0z�n;#ʂW`FTV ucGb|19~qv^^?#�=K|c/q=]6e s-/iY_Վ` xR#B mG $?7zg{Yǎ>𴹛R 0<%LJ 5ډ4ElSVw翌g`:e~ЙC*~뮂Gv"H!vþqWk˰q>ܸ_uh[lsq0Afqc%~=Ěk} *U-~kit*މ6q:Jhwo~4kB3oe7 y;#r:Vk,#+*c}ek6N ﱑܾoeDA'| Z)HWP&elwيj1Wo hȠgڿ䗱aIr+NŠe<WzS,ʋ!WT(Q3y7@6RٓFbkpZ2d~{"'%bg_/d3ۯUH[, بMQgTX�ŎݬNѻ}z,ȅ:tSW5׷b:2ywjڀ'k+>Ҟžʩ=Lso%BT޹'4*+UA{0loy+ǰqO=s2"jDvw( +ez_/"[ =/(CnPZĽ}W`%/�fL&Nw;m;xQV _Kzx;vn/mcױy^Cwqfk17/_^^Xh# |wSΐGP7j~-|uKY&bwm rSr+MdmW׍~U R[IvOYE^/Z|q؊*>nGòoN3JS0:HK5daOf65](/Wr:.cu_1?w;Sqo7!8 0>G~bui2c\אn;>mE~D}.$>GRqK fogO_4Nj-ՐO2StNF"CxX+q;Ї6fmIT<xm㭎x-7+i0s18$pHzس-8l}7;i4�Qg�rX;P~B4zKc'']-J-i߇%)S C,Fl KG(w]/Z15j} `Q|Vc`b5PX3?ʸlgC'Bqo1_ڱpZ<oԒ<ƛ\VV_̵`:XPOA]`#gf շLX36cI(coiR*aҒeP&Xd$944F-9]iEH"b?GZvXY|(Qa#eFOź*P@/V_ 9bsK%Kxq ?oPnN\ d9ǧ$A4￈;�<M$3C9y78Hm|86z<VpƂJF*Nr"Fp< QNڀ--YERAA‰'Xt98tqY+ΚWEfXAyϲa0]%0ij׍eo^7i=72'|CG0+臦җYڇ%2h%6cə*o@F̟%^ݼΊ01rOvqdА2C{G+`ϊVSzW,3?}9'N^  ?FN8';F$-V7t?V݌Ģ􄸒 &x*d|2ؑ5b9mN?E+?;b3mEqg>ͨ'bA#sn\K8*39Y-: nGŏEh\ Aai33"6h)6h7Xj"μ"B9>+7[Y&Tѓo>})Cu?~(7|?:Mx#?adDZxNkHWzMI@MÎq-<>a8XȻw�=wjWĤXSNE$ Qwvṯfq/�C"-SyRj9r|,,Xϱr<"r.Ɲ$"QUpr~UD|si=Wwt|XN*^RĆʗ]"Dgɋ\=J%J9wZO5b`bBq}7mSENiQ 7BmJzbWF (#h{FٹcϸlBh~(/mA I.=SF~rvEX%?tDz+3By\EXS V>nYƈSXr;�Gv>&vH)!NeSϼ<k( qlxW-Uzbe+ݾc;7q;9~JHjś8QEk8I9Su:OK&/5晹9 Q RK\ӈ9i$H;bf~w3Ldg!"l{q:s= Qbe|4F؅r|}8oLrΣϿ%?q/zTSҠMrBDGA  uu^IU&e`@8t]j)exvIE/BN]T HR#W|QS٠Y8FݤWtrV htoܾ㛓" =Y>!lI%ȯ6X Qشo%?h>q(S? HQuLSnĮcPcj TQ ^�ȼ$RtEEWMU:z( IL>IWk=Sw9%Nq-O(}o~z<RO‡>OfO͗]c|q?~Iæ5LԉZ<nNP2g )`QD 8�&ƺuR{hܶ\Q"5?G~O9>)'ٟ0COj"!"]_MY8:5G~Wru4%+{ht|Pcd"dƃW֎Xا%{@7=~|Kk\\q :�O| Ԣ}N?!gQ09bT[gZDrYhUd@VT5BK}UA|'>bAǶu vz٘t3͹A%}`m)*hIOɑ2-tcݜFz�];i(0;tiop H!j1-GiyB|iL4zFڑG㌈3r:nE 8W({̏Ys1~ڝƝM 0!9Q2\bi, cW(o-Co~t񳄕B=ꦦb#{|.HI"=@BVQg``GxI-[8A7mviA=2F2Jè /.yu,֚4:GEJCnaη6C#|ACyj"Β'67B4gUOaxhm()#c!Ko.nr 1VV yJTJ*S}KTtJHHqdE%-ent.M 2vFW+?0~tw\ /] _ F0J@dK3!UƘ:Q QXTs T.(JqdE c\S?+4`g"\.bc)l#ڹuʨk|(tf8{?_lshjLlTZvۣF#C"LoK 8?"-Zd&j- 9۸Iei>{K#t"2ˢ? 9m"C%$ he1^Ф%~"K)�Ĵ}u5>ʱ)o|lcr9pxTˢhXqohs�Lu("c;~b9U;ȿ}Ɯ>yMrJQ@R1 \<>6} iD 9 *]F~ [O /K#$?2"xo9㩔<AcHO eJnHro3vj?:X9~0W?E zb(uTꎏnbҊ>JKA�=< +VH"z^_#5Ы"SltoTbAgh@\]vM榭c YmIsW ~DQBuT"IR??QZӚp@,5w1}xw7k.f*؂1']<Z ?Fe4KqlOKg|6 <KW�T0uИq&bB`[9dϑP兝/uڌMU{ L:NR$XM)-Izn4EElqBЋj;4$8YKb`>aoLgeމ$`؞Lls}z~??kM3vSx;K!m$eREC ٍK &a[Qm%'[-#~agNϥ9:6ց"hBW=pbx=ʖE)GS e ~,!ø9ߑXFQv6R?Cʗt%~ I8mCj:i!oymOv*pUXt>W,J6ʰb!;I/gpƆk4O06*$)-$}QnuBok|}ZgI=֚҇<�7{FTqS8LxfHE_]w&LgwP-zg~<?@1BDG&lNz<<]=5uR-/ĵxoc?`^;* !^P^LlP5}U*|}MH薫Et,hcބ/vh=q*>xUnv`^l&\%vno{J2 g1@l2HϵQ<he:otgf?jـjU X}L .8B]lRāmcGtI;�*@4�a4tw_, '+s$V䡈5b%uc+Ɗ3wF;�~̇-ԅf>tcd<*xb;eRa󇶶ԇ֘,}>y\b!7閑â₌@aFJrb ر&cxۨ%d` ^{R[*N7T�SOp{0͡ۮ#0;d;AA[bٯ(h]Uuv+}<7kCɟ׹9q[sLF\ *.,[ `uicreO=D0ؗp?V87J!GI~R0Ȩ,Ʀp:hZxgth; rzEYNL!�~|{x<?F<!ZD0ٸrzDk״>0-l$`Y>5XY�Y[1�%c2ўvj@56Hx k(kA<.d"Aե �![:ttjECaq-U]V{+X)-rҌ5-d< # Q}80:>-9L 4x䣤9Tg1$Kݻ8쌙P<VĹv[֩(Br^�)ŒwZ< 0?'mC!mx.5R|`KNtbpM۹O:$*=!,G</jMzPy<si6YJ߼ Q)qՋҊowB6P3|ZN<ȋzgݠ88cOϚsp`. =83x欲颏g1!_~ǭf`6/+?G̸5n4KxKq{׳rA !<bn +$I|1"xe ^ʚ}ޒ\S:E\>Ş30P-̑BY\E%|1!vY4>viBtŷ EJ6xhu`]2-*Y~:O;WQN[w@`ڪwkr+g*̗Ah}#Ǯ̧#\|hQV \Zwl#e=Ta3!yu-~Ϳ~7Q܅qトY {\`gc d/x_XVqtQ[Y]T*K2 c9l+kf wYOEmSÇAc5oo,P'ԞK@sͥNɂQ<x>rX"'p;;&#R(2)ͣ=g${, ? ad /7C>:k�ݻGt":M?HPCmh0/(O&'`|s~F$(b}L`A&6(<UٱW]骂Ȏk/JueaG[(PxVJ1Ş:i5E#{h8iHQ"J"Is?ڥ)%oZg!8gWpJ0xQT m<2!6O rr焬Lvh�=b5QDSr#'bjtHvZeĖ2١ N;L!.-6=zJu96QKF733)dEJtqj% M;x*!eAAYl?=0 Dؿ#>14DObzounґtK@7>d2#8ojLƌ3U~:kN#"zq ĺ$< 5Rz|FTQfr<qcp]@FjHXDx,g%5/XCNxEc 4d߈7ǃ�bOȣ ӷK: ܼG6Wgs JGor9hp)_nrIL5->&! OUxĢz t-ZW *; V~6*@lw_&ۣ,j�k�;_Ǻ1}8RV�4Ԭ !& :2 FtA@v\M_8wy<ljL<QL/eq&ҮA%f@gBP8ekv)Q1 Ý,)Lq)a_' ڏWlLU]3xw ϯ lJTqW=h{_nψ/.]{LA1 ]aA?j :Ϯgo*rSx_Y8;QbHd%}t, K8!fm"~IQg?)*tLюTRa3ިkK ~feU, aPI <<%X\qu'8}^   \C1F =Ky<w<l1#D&>JFʱw�}yO>4AÜ+Y"è)N贇tCW mU-p2#C7aAcl9t(eϮHŌ*Pna� .4X &GG:q щ>ON%RRDYqfϥ rIVT|X9;=hqrdih"7z:C{X<4):cpqS3eqx$tv*r@pO!I#p^Ȃz2!+pL#gp\HO,Y&uQ2CJTA*JӼ 6G> j0;pfʭc@D^)% QׁzA{f#5ﴛDOr5 0:4h nr"<N�(Dۑ N ~ʮtxE ,9Fgas^ɓiP=>Qv>HnOU<vڱ?dwhKh`ZŷKQy~*3|F:,O&"l"M&� r0j0_<^)UU]lܙp2,"p籸0sS4GgP# gOĚ=)˱K@!*N^otDD^ޘO*x2ӌ]#;ͧx (SlD3&nnAIcX}9\>GY*WwC ɞ!2UaE\tj.Ob<:{ `-U0< c$1RzLb=r {N@<v>~DH6V$q%[-36.(,�t4okAoAZQ>}U&z#`.ƔCDC#M6 82g[ytpd' =S;+ƳsCgSeB+ۄ=XYA-Cyraa0AK_K;׌Yq�sfgG5itcރF4 ٣\j8̗UI$r'l9V(M~w+Fk A&:vҽKY 11/zcgREͣV~CGcOQGcٖՆp8@`GK|8}iq'PSKx_Z`\bS7ɳw6,gYѸC[fM`K<73\'�nj܋=@EL "bl..iXsmh_; )Sذ$ο.?5T5�v`Ѐw4'61.C!㺁 KLi lv U}LkMg(OH!CgOC1z'*]=zG54` _%&Fb#3=~x[5k*Mxop�]tidP;jo/V^ FqǔU5 u׹?.9IlDa-\ Ml�_0@%k2MgGq8\`W[f"be"ƒ8Hl�B u-Z 0CڝkH4ۢ@sz6=x ;Dqc6�"NqL:읙#Pz >Oi<(Xs*R9G2@1^?o< rTH*NIެѳ>[PFO>&j�NUcO7<j26U2 [҈:_01!M Q d Sց�~@p2 r/N˖xi<fUk;fuBp`; p$̆AR"vd^-РaqBolyg.Xk h*pVRjWt>NJ;ބPdB\v+cx&JkLH]+z/gF�H 5�W s3n8&eF3pp|DdޏQ>T2Tw ϡǪtv/g|!l6R@ >@� + (1ߴcvSŸr 2*=3Pd(izSNparUqp:25D`M_&zZy*2W䅀^ie ~A[`{hlK$?(漲N/Oz.yЖ|>E)a'�KYt19M.d%*�KGx 1lP1narǼmRGgBؾ.$hOSk.+vQDU܇D-|3gP+uձ<`ϕ&Δ*E۰): 0+`y_r}Rӿ} HHvwe$dEhΏ0b́<n?tC *xW!],)#b*r%f< L&zjE7'WY1lllP _[@|%ӶzCȕ EKRsD$rTa*>29J ;v`w 0%pK`#2  {>?tRplƼC@j8TfWOf)Qs(q[{10oaFr#%c<XX _X= d`6<e_̪^Jxyk^[%[?3XŶuQ@|H9M`++c\jԵĩdCRyUMu0�$^8c `9vI͹C�Go&#k pC|){:ÍM#[oa}zX17 *_qc}\.]pٶ�<X2V]n9= Ě&0ꌓBB*#y(152  0HQv"b=".F)tbP88|_j `OGKnMMLN6Pڲ㖦S*p+b&yZYsaҙ BhpW% sjC;TS; &㷦>[F`pQ -6۷(=y"vʚl#hf(YD᫦4_�GeJPI鏱"&1j0bJUQ mΣ̯U*4RBG?_???_?ۿOwĿׯqAi1@S]_Mڔt<i)Յ &K#OW?BzhN3]T p(,(J,dIv/kNdIv!+\5ʕ&-/X[&. h1,_ %93AH& %d@a4 eOyVϊ3TLQ(=4؞.NJVQaXrL4Kl),JE!SӦ_nPUc`W-uPUXm{Z$c[A(JW_. cc3/ʉcɄ(עx{8bA#:y呣#$1Bk6(E; ,/Nـ] EޗX2n2 h0 ! Hi&Sz4.C�qa2#wscE]Ý/ׁ$1IE*FxR~ޝͻ; Ed$Wpb? �G4`s׆5\,Wڹ hr+�yQJ>dE!NJC]T5X2"cpH1|00z*>.<vW Q p}% $TQ_`h*n�)΂;+fĿ@_#5gV+ rzӠKTq'68GjuƆqUM_Dr4v|9 P!E삱"Fzo(t꾅"xbc�MφQC@úyV<̫_"%SC-U <GW}$8~|VFH> ķ_i `v `1zqy`p^Ȓ4_sl r11GB_ l^mC$hFJH9Au* w!mms-*`X^׹PM͢AZ># VVVkC1d{poiP9!{9?Y7WrP78:ځz/ubuʇoaz16jqCqPWYs |`w}DA%L=QYPcnxt_du&x2JZ.# 3Hd[E*>›HjE|"ż>5‘AK1/gQxl6mnSG C?[qذO)7'eI o_' Ydq$Em_4>0ό S>,!u6pRmt|{ -ND@M@6&q+}~(Fp*|ȆB'sa=n/))aBPꋞ=i.4q_B#%np]l3+mJi!U8EI3Pa[=D.JmuHa~`ByDz*hG?¼'0 ҢiC}{G/ͭZx<GB=٣,q2140eh\&sHID)uaSpd  !b հjm3n\bMb ̏EYݾ'd7R;!{}ַ;~1%gpRuwkA~fU+i">&Kr_mء]TZE~Kx0l*sĐNpp7tfR>zIT:dȸL9 T1\ | l�tJfzTq&$pL例TJv&}Rw[C355G<s/@ Аl[Lٚ=V\}F>#m(K-*J_ȶ#ܖDhYt#;N8Л9m8T'qț{ǔm +mP�#HO+ݢ=zhcG4hTWnn xJMyCyZ 'K&`b-:E}tĨ.~qH~ؗyNV~A{C#<~B#zݒ\wkOEy4wuĖP4=Qw'\hfBak*g@Ah-?*~a>q=ݶ˷){ɦ*ZߡqN2c)* P >]Iz1c^,D Q Y\gyA!q%d('㓑=sz|?!"Ȏ#�3Vc68*I]g�9 E4t.sXtK;C..q ?R6K}RÚ (T9b\\l s@N`ƹݼ<H1đ+c{$.o09+8Q^(:yށS<L&6{'mm;"$.VV=XQ * ;^g5IsXx=Yv/Wde v[ՕK|)n$diazۍ:Qtܭ$ںIG z `vp>O =0~G`[L[|;2U fMm]<(9d* Emqw`T6}�[kE]WL[}N 5.ơ(v,)xhg69p&{d& ҴstɈeG.3bf3Rry_FR?EB BCd\\u:㒂#FyOYi\4|�z.kdi멓ƾt~w2,ux;+WPx@\O7?Z &GC8hJVDW}*E)쨈IC&gg,J4ypI{o#㒸Z{iUe9.QyK.G=0�)v1Nc PĠb h(SN�ᣗ8"YqSSP"t*Gؿ#DzhF7\Ԕ>1vk yުEp*#Ɩ!1v7$3V4TpS$"\>DtdCZ*-bX)hx<?A[>9R EsCGB-GZCH)783Ox=kW(jtsd)WkR=lOHr{^Qcώ>:{G,,ĩ @86 y~x}hC\-tfO_Q=^/Yh$M}}\>~F הδDC77}h1q+}c s3[ʧ+1JxamCJA=03s{E9Df>cql6:fܱdj =bǜR,XcWT>:{еK6Vy}b> ,`+{v24niHR7mGm >-zy"'hSDVԶ8ˀav,V^1vnˀo>Ípj (߯ 0-42,LldQ#!<%2nA׈SZq "_{G!脧{$Oo$$ú4%6`O(ͶŮSe81ރs>!ԃuQ^b8M܁8ny*Ƹa&6K,c,WBB.hKlAT x ]--#  0AQx/7ݢ/hM}q(2#<JBcs"J|^9U xJZ`9*KCl;<MHltdIհl,ǭse)<9:q:&įh"$~䍥}D$ �'&Ƃ & BS`Ǥۤa|=`ɓs9+ UdGrA�&N-tb>U!w`\@eZQŏ^h`95װŎ =[@IBַlgE org"VlS"@%(qA=j2xBr܃6|r¼(>) 9^S"A|9 F7#d:_5w{]닠sE&`@|XscbWx(64xd\D]VыBF՛KIcD0d]sX7D<s5f'Q8 aCnuh=8O .XrGAG8 }~>b+ls* 96s(XemwR�\WQN't=@g= r&/ݣFF]}?;ڡ GAp䱏NN C S2E(,&VS<L.ѕg.w{Sc/ > Y?uNqpǟ+iB|a>`WFU^[, 0H22'~VJzU *P{R mA8X89�t L4@*`2xƷcj*݅cSDr"i(Pxpъ Yu,`Us`z/8"/ቼ骼̭YEhh~{Q҈cWavӯ^Є>yv;LQ/74CZߌdK3X[6b*�I&*g#/YM1r-EyUXdgeWnjP48.Eܴ�h[%#D:ȪȂE#P:N?)L MjE|>R=,;V^-!-Odq/!( '+n^Il=pLcśYgvP?YtZjTJfzDm`f2K yl  s vNDT=m➍aIE;70"_'bz &ùnթ vYE7;Ć\.q94p6]ƚ;7ĉ}owUȏW!]9wYUKP2` -5%m51`)@12�~C a]A| smu5BCOr XE)+2*⁧g@D9~ Iܑdt̶m17E!W22f,QI2 hO!mW&i1elO2Gas{4`Eۙ<8�`S BNasT ?\0}F$|~@l[Sikhauzx$CigIgsaؔc,8"ih|ѯ <�}nD`ʇa؜Jλ)z<gO�a !>UN3UZ>Rbf>RY|vhaD*N@`常UB "0ak2?>y &@MU)c21FP?ŌCJCdŪ0G&+n5 fe|6"BVa {8[ !ac)žK[WBKh3E(R>X}:Ě&Ibߚi"$&8{ L,97%eM'!%ToUZ[ CDՃɨ[p[a.)H|yݐ;#U&]}窬Rv yGHK| *q#Exì{u(CJ0lv(]Ľ:C!7HHlG5PpD>5\+D76phB8V6#dϝ@)D;@rۍfյ2>/QK<@\SGՇĄ vWhWF ) j{tȥ`ϣ`Xr:Cdf#$PauH~ЯIA ҭ<fܛnt݅'qO"Z<W +~xᵔ>(7x.%!f�axW0&3o݂# g B{G-$p?PI*ϊm:PI Db6P~ {#ӝw%2^81)imjs̡#r+Ht9ICy‚5c_q(:B׊l6׼XR␹Rg^A'v#a$?i)HlqamǖP}Ў+G5 ֠=q ͕0 wYԤ>#膰""jD 3Ջ:}Ƞ! pk4uXaăYYTSNocw E~xoĆ`Ww^^NL:ac[}l@yʼn*E&6-lnb!Y|OHQrrɸm}y#%:r PQt�*}$&+31 ,L&gb)G?sN0Sk;{sԛ>L pIΑ$  |jۃ9.#`,CG }PkCx@&�6ǪbE � (X{ޟ<_&.x +\XM欫#<fnmaUBIb)}~K=nj 9Gp$GWuU\7H+"z+zFYDƕ^\ >;>aSx}T9G;n">cl6 iw9M<vzWSNҭA9l:dKz&*<b0ny#.fݥ.[02\KI4cǜ5,h] -@k+e{ܪ1p!>bD<bzצbJI;o1~te ;hzBcy=`01ʂp|LCi} mt9H15Zgp,!RFQfξ�Pj}wWXJdŧipw;>5iw&G|B3[zP�WN1d/qM:/g9`L]yz U4BØwP2)(wCl1c(&Р?lDssl%<ϧD)@q&wI[gLUVy 5G]L卻KÊGuq!�"e|N]f )/zM"6=s+ӞX<h-sU ݴm)$K["# 9:6[4=F' HUEh刣BilFC, թZK)diW_Q 15l\y"3cQ >i=b bsXX~Ưx {G]1\`G? MZ]Rɓ؈`Ev~qL+ Kc:zr)Gٱ*CܔEzh- bCEJ"R4}:-#vS/ `hAPdbczC# EfL_[}ceսly23'~@<L8ELdz 9&IDhE}y_ٱAOoC[yޏ͊GD Gl̓{#+hy~噖|R|Bb葞t,&n6G'^}'[֪\n+}<>لi h͘0CNp^۔Ys?vt`Lu5iz =X`u2d8D7mUx@ ' >8?w d.! )vD(LfDSQƼ{AXq۫h>m<' aJ<BԩQ![ F"˧%whA5AH${ uAw#̓7Rj]GAHdp9XU1 -"C7GCZ. OC~QwYIo><j2?ȿCMT=ث>)1~l=92DS+tPm;R'%uӂPdVP yL ص+$Ԍ{<)rxʉNB,-\A!y ]3kZTpj v BᝯvM Q)s󽢸ngVE1E?U8CMʗɬ([7 غ< 0W*p_@oEMX[ گ`TUr >/; ňa:h]= ؉41?Oa֒4we/ "'S'>,R uo)m/y_(?9qGL;"G]1Ss<*by /c\?O&p v )j0ΓOk$cxboEnbr8;d5}<JA x膴d0gy>Wv6 rS4p2EWlIW. 0S"Ⱦe ,2D8vHJ:[!"Wl,e5A7R<qLaA<5ѡqyb+]PʼnɆ#=d\.m̷d:gB*2N|ϦG˵.?a c`zdN0Cɚߌ�/(?fn<cIjʢt1~i) йq�9qTzlԔ㩩.s<,3ą2UTYY 0jOܚhQw0xH4x0+ޅsv:(^ƇR, J(Ֆ,׮e (`[bvt3>*۷iTrvS9"kcMpA]s[j=/kP51n{=I qz*-cM*2>&8Ta%D/>/C6nƱUʒz? gg^4:v<J7p(Ї J wNQsaBᛷdqR2QlNƛ=rnw& {iq𷀡ke|Bt�Q�a㰆s:uʇ9΅3)Rp$GSa2_q{fPW (1M-z5Qc3&%|{QyQԸ u17ɞfD@q)%kzg^(݂|cδ͜QObaNi.;G iH fzEL.9)g<}z`^a[HONul*펅I v*ּo'&Wyf4v\PXϱ g߲Q.^*2]I +@hFwyKB�dL;P_`6IR+:=m<!6@P$S>1|{^o'Ky %BQQ|R/eQWy<e+7KcȎ1flKrCi>18~<1̵U PWֽr'ƄnxT>mQr/*!Vi"Y#w @݀@] %B&{nctSI|nX<cϥv}l7Lo+ĝ qH9qkؗDo@*aYDp�Ԃ,ZkU$iTp/("1K%1� 2R(3Gӈ_VA+ 9)'<خO%g&Τh <s W^ }ȹ#We8o챽Z:d<I:Ui,!'P9# Q+9$؈sp~>S^| Irv??F{GSՏcOP�(*zRn?4-'j%!0s@w-){o;Q*@ .k@�T@s-NJ`Uq,v}&`.͠q^5=`Uo[$l( mD mp֔u9vgA6ҋZDI55Yo1Ra,` d^r~K;�ɞƮWi^c;y�)x8 F fw*.]76HUf{Ii f\xr{@0A2PR$f17x)ANen'}tQ*ź_G:}SXkƅ+OS!o}___/o?O[,=A1py_H۱b�(V mk-Gup/i:[zO^(%Mu_u=@\tT0ԫԏLT~M+W}+BEf)�A(~*_gvT_@q4%==!h)k % �<+nCt &(~7?a~,ߋ;$秹p$uL'b:i-`, gKTv^5ADK -�[񝔟zIz=0̃Sf&oQo7uƝu_[:I.WV8hKЭ;uoRL%qFJ4p 3a YgǪwe /M O}h"GFFHĬ?�Ӊq ~Uq @-oy]Iמ|x(F ?bxi',Aa擯F7c$+DA8m] $IG\{G6{tH(5_9>Ssaɫ<he+gFu-IƵb K@ԑwt{GܾJm le. �WTz'u'2 =KH˔"_eFRVAͦ _jm+> :e Lb}㶂1U&ay%' wZxk?p~Ơ<V- hagxԎqb?okHwh&bc :<q4u9mX$B1= Ez $ 7Kÿ[RE= fx{c&b]|=TXeo3sj$DY_k]�Kl: WN5=!L'$5<{J\Jw{ AzאDId5G "O.\;v3 H_j@᳙:‹@oR^¤Ao_GV)EM۵!? aǃ7<h^*jk2 6Z؎D|+Pٞ[%vG@A7l7G'ør嫌I0𭹐mU?5Um G2z:wK:[k@`}htF}6`q^z;_a.Eࢫw0G:6zzmu3y1ʍFY/ R ɻl؟gD{.go=d#Ɉ؍v�{p|YWb([Z|gq~NN=ѶGZQQ+c o 3xPQi SH$ 8h$ICg;(c24n|oA]/Wcf{;y, RS'WR,BGkrIUIl4LFB-Dg#قlY\8`#lUY8A :n,̏:^g hi[|/@oѷ5A4k1Mxvw>_A߁r}+7峜S>>3@""Ø IF~j |iP+s!GQa*mdBZQĒFHUմ>Gg64G2GW!ܖ2[X<q{G㙈ڿ SL$mHj8bzߐa T2&y!r -Tq@a' $⹳jB ׳C ͝nW2ؓccFPAvcVQMW").g.g*rktG'N+B%@_9hfIZ%ǛG3F\ɩ0_wXҿ6{qn'<(q{-#/)H7@3-G99%%/dh<?DzF$ i譙"'. }A$oa n&Wż4Er/cKCtEG|b,c0J˕c%9V$ lVf&n·=jT`%Ws[}a{ұ @7mWQkE9-<mF^a3α+Lה{m :h ^X _ 9 HN|@ !ĒPolmo`޶ -8%hQML6Xsܢ 1a"CtN;VR#v_ȹroė.unFEHyڈ;n� �n qj^ A*gͧd�eJfz&h!U|ׂD =w-9dlGs]ƨr jcYF7ϒ~`6n;;z#@Eanl& U9KOcp.fS%Qx)'@pyhWacÅii!ŗ8d m`e˂YgF'+rIzg@ ,İj670EǮRH?�W*dȉ?މ?C?5S)OBeNKtUqZCL3^ӂع \ 2!aK S[1%6/W\ %JaHItҹW,U_|ҐAmeVW|KW["B⩷]JLv2(rgA$ډX% aQbg0F<IQG}h]ع;+n^_aojϹ]6 Za)F9 tg Or {  ~_ٻ{(�=KX(8%_;0&WFŕhK5Cr$Dea)s҂~aM?ՃE]Dx~~`I#/:S4i[4*;�ĉ=]4r>|OthWP<mJ.*E%ԩ{RaC_Yը y| 9N3mGQO&%x*вFr(4A'u}!|~Y(Hn*0l(1W9 `L.݂x4bx. rKz<c[9 Ӈ#Mј?֎su!祵 fM)^3l慈r/g-`<ҏwUQ7|TSNr�V'[d 2LjH'2Ґ$i]0[<Vad5OSe@&U;w«cp < b$B3l:pc&eN<?0Bt Ȼ#<m[+. @:U^  q_belg8 S⽍;>-X<aNkR$ x}XH`,IIH10j_ *b+o>:ÖGCMt�Dэ)Z 80MNKfSMFt#O,Be7mDhcA6iv_AD\@"4;Z2UjMJY-j+pr$Pk;Ryql,|FZ odϙaAxԊl8Hm~M53 W [V#>'"b yWSaX> R&8sY +-#j;>q'|-ޛ 3#1h5%]U|(vK Cf?ZKV 8#g~6k)) /ɟ?q~as ꒲3,Թi3<FCSsU@H'Җu`/*&1 TG*Yؐ�+\#ޔDN]#I]!�rd0Qɥ Mwrtȣi[pYP#?`4Eqh?DT2&DC+I伦y1KR0x52I"}2ofEd1~~d֥~WU4{u0",C遆@Af�>̪02 rQOqiot{QRuGTj+Աj\r 6һ9O{<q#Px[ͧqK8.<R&z>_D$&;3 e82(IV@U=-$2`۾w1s>d8|toN"ql&y $f'¢%#GĠaTf$-|px{|ɏxx@"͗/h raڭTd  >S!r0űDؠ/pҏX )ϘELj1g(!؇pбN|SXy{™!-GI{:J1xl%zjٞxS+*io qa8_rCs)`#˸\~DKxo;'_؆w4̯dM,h #Cl#!N*\$@d`QqX>٣82#sLsBP)6S0r`0$Q,;v+ٹ!JPLn`A=ݴqKvƛ.H=]^&x`={D+H,j3猃57Q@ ;f3aBxбI+AVa-.ȷt}2۵о2lA[5G=GL�d]sSe|`0Ezq� BUb'1N@?3 G mFKRoU{kfsOʅVC(x30\MG2Gь1 ՟\KN3;9Ϥ% xHib~</bkV]?c0�Eqbۈ|3e|wJp&V+DJiF"/,Blgs:K8V;]hW8Y\n�Hihk 暈>=Ad3eƅYNe™<jЀj<^ \U=wUnɼc<h*8ơP~+);$SS� CJ烆N%sњ2ub W _6l]tiw>Ч(y%cXy $*IxmXyHV\pDjXUE-jKQdM<%RC68ǖ9]FDD*#xH{42fj;TAXG+b&5')`aSΝ0t)a�jv~,nje#%Xϔ�o'-,X7E3_ J.ߎ ,xV↝Ld8{!]Bx.5uѮ&uzWIGᎺNBJowCs^J zS?7wy~roaOE@I:7OMU! NO=D̴FI_q$xO 2Sl;"ݐLZƔпQN+ /~(LQHFi4ܺc)O섢LYqݭLZ 6~$BW'k u&z;¹d!fPY!Q<Ɣ NQ7Jb%h 簒e ABJ5, pwAIvCeQљS2FHP;㽬pIO>(!YuS q湦jrZd&WmJN OV~/ b@o%>n܂SɳRt&:L}ɀ5t idoȱPX_,ek&D=9rǫ+ߺ9!H'zoy^3-귩 ?RZ7t(B눅Ӛ(P :2̔Ck#T9GF/͓1DyLe$UJt$#lBYBY 9%iU >+X…W=}5IzDJ!R;y hJD#:lY ^Wf[, %œ[ }w{H̀(!YiN!kbkWTd 鸊ҷ/4 :V 6TiGhW6,Vs6qHι=pP ?Iu7|e w:p,i,vIv'f<䫭PQS2m4Ϧ-{(ȇ.kc�?2֯􋟟e�C6Wd:! zpB2, w1@X ľpz- +7;j{8/c)6<%ѩ*%n+G<*Β`!\ d׌[x JwX )_Mԕ(j]C jc% xL㶂pF]  ]đ@uF.b28m̷ /tP74W3 "n/zmf9l.E8(3CgX T~0HLC{%yrM2t\�N-vD!0 :pCP͞QRy/Kƚh1(/+TuGt+P IBgٟԂo)(pXq72?e9ڡ緄b~:ibpt]8Aw84 0 /(@t [4WIWT@َ tR;ƿDgv& ,6"z4tr1 {,x8 r)̊m0+y oU.fW1%#a)'vds'Q" v^[{A(u |k!ݍM`Mə#]ⓞҁΨi(e# 2�yӦNX5VV<~G<&`vG4c-Pf@l%tZ9䨶iKԉ7A+~p!c|GPd봇$�2.ڕ(T{<*�X꼛ȵ'CݭE\Y(ay+7LDeP*L^cV%HUmiYόpd¾[,=vK&'Ͳ귎ƒ!t|+ 1bAakc8;0eޠQJPc[V J9a(t .$49{'2ⅼ˯)2Kl4{E}Нm ZKqc8 <)L(Q` ݇" loQ5%14C.mWZwҐb@?! HضLZų%mx77zx,8l5)=IӸSTx'S-SFvus-"3R"*R i'~m$r \o?Z@6*h0?5]~2z~jbGͽQe3Cij�%D1e6"{\}^ХXwA]4=嚀h GUW~*Y2AgV�a—b(1%ƗsPuz=pKӊR/[q@#ԉ@̐IM,84Jb\I=2HOrkOi t/;̘Y>  ,Ba6"N}(UԶchGuX8.SBv 4F9i[@4Ef&y_7 E> Ǿs:)͎~˾HujU݈łlE<l�(l\KwsCSL%eȽYE.=4QP/0TaV̡%z1b3o:^Zц7 <z"S*wmg3S`xXrZ?g53xGT *O]1L_MҍAðGIb)D-3+$;wAb)@Tˣ'oNh3lx4b{eEM1%B5V íf`82dv "=JW|QLл!qžK;= 7v_5}'D{m.CELpD==\KWQQ  +_``Į| _}9ɳ 3_^H4')ab ͇ɄYpD̖6P<KVN~Yk_>`fF�ULKuus!FnU @$?:5K$8KZfP~aLTgny/5A3]pAPLLbhk},.* І/hbO\G%Ζ`,"(8tKCT"܏m cFB>8YB&UQsP\fI`    Hҥç?;S $%P!�Ox l u|Yc?ߟvQ~攋܃dcrՐ, PTo̦+*x&3NAv?kU]#btϨґ| }θ<w#B⛱NㄞωtQ:6< G W+ lH=VQƑԩO)îLX!+y᝴6u!kLsh^Ԃq-.ej;eS`!5")tɽՐY,]K2%5bN["#v$I욞@{y_ pF?7ױcG3UHM>0q:0Ew5{oTYSmOݗEwq)Ƃg_(ϻS1�6'+;k͚&e0S⵿ M(y@T?Rŭ vu<\dOTa|� /ւ:%MVKyw-Ps7螇{2qkraMLYF0V:`#A!/usǕ3�A@ҥ _m| <Q+#k"=8QL fctz1a!f\Vӆ{(^ bϊun[=Gue��5!j.1=gan}"ܡ|]I?8Q,B;+Ҷ,q nIc ryedpA*/ 4r q�e|7{Mpo<6$~{xqIy},P2h*hON&{0Abv=v|4j;^=6[n'ĀWCYI(O.䪢{ߌBc&0uo9J%;Ebud"n֒SU)J!gc�N aVm̘'Pm E* 11mvwYbB`'v L� [ *0j2c?˄ ֊=�𷈿|ϋR ~j,KrAŸ홏# U}|YBbXKq]'f)w1$sOl&Ii.Jz<iu1;_+D>Os45DhTx-m&ȂF`j#ÞͲ])lTi$~6@뤧ޯm[QekDĸqA Ty3O" l(|%Z[#<厺Qι,-vdgo b+@!D&< P;(Ƥ?'$.6kOig6;†zG3C~ȡ R,3 %NjTd4 Y!gehr=9v\Egn*kɕ(]m�JCf[SRqSyze9&ЄEw%eQ=\ŵd2X, 3WE͜/: LలonxDuyVE 7NOJ&Y2qDU13'` 7cAz{<��yxRa;{mMrBǼi$Xӝ7v! s4x{.eI34._> S0 [2(z"z#J]Q0h>)K;${x[L~\0FٝIL[ᦴh!!2 |U9h$a$Ⱦv@vAVխsb <ʡ/ [,6Ⴅ%o+$-ᥧ8ԅ#>=lsJY2RHuZrQVa'M7}&8wm&0NwU͢t0AZ>B8W�/�xa1onpJkRIs4 !囿遹�A`R�{;2 $ONg\Cxa׏};uͧ$J׬F oJsd&<'?@d0 b|ĵX?7Pty_74JePfYx5 !ᘹe. 5ےQwmSźVt" Q2k+D.||\6f.v*yb#.��b*9.cx/%}+<+1}.qo+h/Nw6^ؐ :.Xsm{n4e+RTi_rH WD%BN*RS[r$$Q!c26RSHd_`^TkIʴ5GBP] 0~2G?_???_׿/OwvĿ8 dꃺ  N}3zS]WIхČΥ\ ;O 7p`^,9;u&"#{ɍdȾi,Ώgk( 3j~<P[M6Q*)i:61W:@AݖAVUЊeyDDQ{νېWq]I-TCib_ni!^uxH;}ةjS]!͞(bX^2Au~{I0Xq�#^/· G,U nn|K:‍w*bÑdWܾE_\HqaUe1kiA&%?$6I~JN(tJkwv)ub=Er޽X--#s_/|gYjYB6B[*b,Xݸ $r͚sf#,61o)E `K:͑S%]7de`anSP� WXA%x9^sIdmԓ([{R7徆hfD3퍿 ͯc<KkA| ش; ->4 b߫B]S`'Fы~gZ<(=VUs|tcTF~T߫-}/Vkr:Hi~`)W4wW MPYХt7fn W4YeS&IewYZd !nTm+ݟ&B*g˜tCbϾ'C49DM qb&{(I=>v3}^w0tNhzp<"'Ez}֞y[>X %l!w2&u8WR{[$tprI"KJ>pi2PK_|qhUy,{z|_ tE2 vE{? >LRǓell?nE2m$4E`=2ױ@1O}w4@M /Lnr{28n3+".tn:4eM MKܜ)"T"hK K& 6:DPT5=`lx+unΒK]|9r% S9b y\/3!ug P[t7FؿJL-_P#5S/11اL,(Pɮ%Jk-f [ʴ*|wi%nG2dܧ: %XvLOġHAU0ۑDM69M-f=S<Ƹ˳4S&{S֪f;(x=Eݯ2"Lm@"}gq#cLfYKgi> GoEYc\UB&(ڜV.\8`RUj.{ʬ0лrXfߟ aKS̑1Q4;7ir؈Ŋ-FJ@_0EC {btꞔQi KpU#,>hQ ILiQ9 ^\MO@ŻDv'ݶ7[?_-΢&O(W.bx Yꔿn0R@Rd�:q2;4b p|mB՜EYք׀a#u#SP2BHǕ{̄m+�Bvi<T"MxQof6I}V)Iᦠ{/ő)siѝwgΡ/qUCw""U;1񑦂W[i8|2,2x  NuNtomE)SOkl4xo=NrhĄ炴9LmZ Jf/o5/AXdSïGMX>LyR̓ULE hs.R~o"_}i Pt)nt9Ra__ <>k#nM: �T%^L1 ]aqq&mQۣǙWCgQB)qSeTIpŲ!'9x]@ynfR额D%mBo1#o/%@[a# E9f k #�)^6*Ug~$G}Ps''F$vje ah) -,zړe>Jи%IO$9_:nRד@l2�G'^ GҀ<4bx wʷ5R$s+n&")<#iKҧV nn9]hh"eFke&(|\I x}ߤڸ]PS:J_>3y s̒bWA_عiQ3V+z7g|!+GN\(jqpG`rHƛK7́b5zZo#%?OY{\)6K9~ R {V[dd%0+WlP>deT3}'Kꚙ)p.\ꅽy }mAGmsUD ~$i2v0Q kisN�bA4^3*~&L楔U'{Q d2wl%#5(BBgЭO y$LȌGq~ܧ."F*D_xR^z=LMH޴ȵ_8STw>RrA{]߿"/=*D2}}ʅ9UDyZ/H UT'˱tW zAu'ut}fː&4=Wi{OyC)RJ�iߣE3So+h}Ĉru+3xo/xd ]"'TU鲐6Vbp(lFҤvȈ԰c?Ƨkwg*� ۮH"h}ksJg'cXasN<eSxvZ;I$iWկDW'kq5WN a3dʵb {.ySx軜fCZ Z|ȡh^LX1**9w3sI#ENi ŽD#dgB%dzף|y1I;Ww82%-%3<I?[mmF9CЩ+8eәlڥ7~U2""'C/.JC v>ޏTHDZd/G2+Xފ!�)�J|h[Gv/Gm`qZ%L!Gt9MڀoIGɚz07 VVL[eZ9Y5߾ =ҥw s(@QJi[bMD12dgdӌ?mE=8RJWN90jͻj,;(eG/4 kJ><ina&Y64Hl`eLi{b6�OPu5Ravg#aerƂ+ْ%ӺMRiE ]cTy.CnݡF} jNMTRHRVq8qR*w0 1('ٽA嬺3z1YRW+c%XsbW Yhz]�*�( o +!G,&\qƷɓ6QT >ĽKM+mS)ʫbf[ R(K.*8sn|KKdOV+Q/(G$YK#tv]J>#}3&ZH-u&q=3Kxɶ{p1Tq ) i�~A$%R) Y Ybh|}2҈ōIo5Md;ˑ*nNpnt]@ +[eV 469mLNZhu׾_ $Z_s}eo>jT*Ökdfw^$AW]-T|. ֮qӶN98rE?:P=}$,_ubqo9%]٢-̋OKD-_ޫ|^3#<W4?rwqǟn}TZ ǡ$2+tW`@1!u-(t*T\UE636h̀DgF ,/! =qK~~ܿ<Llk߲#%kDvPu7㬞P4/}xFZ̀"L,B|eI8ܻH6ЀA{]�V#fNZxz"%fZ $,d/ m$hĆV~ȣ'>[+B3`0k\֘E_ͶکW4*ʎꨌFH_>ř͋?Vݎd#鬝bw]�`>~XӽW-=5 //t&t(ߪFBuu3+Ͼ56}]HQ7L6:  +bMS-LҲ3RQ' y|{PHN[+盦S;\@) T(iKMOY`u\1 `7+eN֗\`Uۖp b:#3HZTrV= G>U9#a9ZK-kݴLgI8yW-44( <Ƥڃ K @| Wg&.4߫] >6)G;@{IDFјep<Zh@kwߐageAorA{]{_ii{!ȏbɑy~eel{{$ RTԑ Z|kAvPWt玺,fD@,SRPIc;ZaujPY~: #`6.Ə(GW:>19(+K)QyU[QJgj>_) 11z? c›�0=u=⠰8tb_rfWer8#";j5GGqH\#gAͫY }E /S7蓕$$eQo8(f_NDWFy/\m}f3FE;ƔvXR,d'LhH X<YL fkbFJb \y/"ITUCbwl 筡|RF=Z@9t+PRMٙ"NՑmNY'{6ę s`|PIҐnCGX;=XOn-ea$= #(Pb`,>ʬ.֠2ꩽAsu JrmwɧDŪee&a4.!:uԋe߁$KXHldJ@1ږ<U+/К?T!;\ēhT}2eC(Ԍ߼DFeVb9oT62tݎ ڵ ^S3oaUssbRl`Gi$�ԐTU=y)qUtpG~~rEztD(4/of 9MS-;Rͥm\}A2>J+|Iz\E֚�5PjvNuaW:vy&<uhq`Ijz{Ѓ�yg1Z9qAẃYtЩ>0lz JwU 4Ä8<U=j#s&n=۪m٨vbdveT3VW-C`gㆺ.$I\Ad r%x`q1Io *rlFT.oX4+KۨPRUfNP~_+(jP+ĝ]K!2r0^ԧnHH+>v &o}'݉RWnUS'h[0t:jGWM뒹H*eBY:2 fs*wk?2Tw ?DsBx02SԼP<" 6z5wZ]m"ǎ?_8w uYOFP Q)7*DubkԆsg0+#n&dAnqmH^r�Vtp֘@1O_IrÜ ^МvtҶە4VQNSdT]E|cU07%v"mJPcOXl�*0'&`*6})6SPGՊ)n}K, =QiYqh'i)~8';H^$^5%.qx0+:2KoFB3l7RqByp17PYA瑀hD[ wrs|f* Ir,+0BA(Բ7lg4o! #_UU<!yUL@Z%<@ӇHE$Xdn"'PXx5ގw^Qy WQ&pz{JFpy\٤سK1TOynpbWR9kxd+ YUp@s-Ed'.BQՐćf#*XfVEE4:QJEL{3ټG U{xP_X6(Әcǡry҂И0@TO+AO\͕ kV ZwD)m}gs<+6p^NF}/Jsꀅ ~h]Ut99Sw.rՍ.)|E|zR5hI#P.h)$7,&dWM*#o7Bǩu!*$yiXG),;B*ۛ,O-_8-T3l3iUVnBhB ݡ{Nr U QiUgbuJ'6 D�w9!mPfdv2r=C\XPm@ R 6RNW;fU&�k #8 <0wL?*B6:\>w+ *'nwr|X[ `|Vfy#s+Κ'eٜZ>c_r<]׬;klHZv o䁔(`qc)Q DEyN|ΖlG[l3k$0U;7|Ñ,SbRHn(/P[#Vui(ԕ[:3( ^(Uk@AcUاOj.Ӊ< xIWZlxA7%xk&a^dSM#r0pU}T:*HfGN ?*"tdx] �bhI:˲y22X蘋<�`,_MHr&nĝ3; ]gdH&sܺ x N ^y"V.�uji*e":,W:=ˤ~H~ҥ!HZMqcnE`zp�DRV$ 8@^g>lk.#:=, Uj0ӱtl¦ZuMb#4*)՛<2e^,nF7WxCJ8=@^DR:Pt[t#K;Z$/<>r9bw<=9JJ/ S}'Arśǣޝ˜ T3Gg<*Л?"5S!A!Ҡg7jof! \wIC7av[%3SZq0^Mm_MtaeRY0[ReX[˕mT�?jڎaM)̤ ;C9G},yԦUe+>Mvt1gK;"MD3*;f[ n?OQ$,XѸ/X{/ <#QOWnMoŏ*&z)TN0Bm+itB(y%v>JfX<A$_'~J./{=8Ok{{({uiئM*[[EڋgrLJ%Jbp%-^S109ݕ☸S` J|AoGԘ>/}1\\o=ԪC<$}w/:[ڣXL693GA=FٻM9 L?KڛѭQ h<ʨδpLPK\R&˸3 K]E&7}j%[8^.RdFfQK%V#=*Vلyb(;|4L\FfʼnTi xȫ"_ { `J1 ؂xmm/\ <TȎQѤKv$1m,It1%rZt|\=3['W7v<cӿS_$bmm&qJyAKzlw(rΆ@-λ!N�#ryG#cE:<kA*b5EС\e^)]oֱ ʩ V\9N WqA9kF iP!5tE,nf-oF%I8%ث C/j Y 6B4�oC!k W%C N䖪jUTW: Hj9b3V 0c)#C) GWn]J7r.GR!*S _UF; 3dרҒ+K]kXK<cgQW%}s_ }EjWU)01m3MZ-X[=sTNk޸{U =`YR#:'(4 t/H4~jZ!jkJS-'_;V<T�aNVæω~l[foPhYdZ u& 0oFT9&)e rZݮ#~e#m@ J` 2"<EI)L[jl\5N?` fZ:"c:Ѭ#K@ 7W֩t$ɮ7*:2Nivj>|1K|b?u9"ڗ)HQV0m}l]@j! SvfN{`3c/�o'NA= LfID\) R3XׇY.pQYP)&rmC`)<P꿵AX94W21`SGXi݁SB3vR#MdQYC݄7Uq(bx<3+ INvdI˱@V+(/!k8]< �!>P敎Qs_Ɯ6)pt1-,RV 2r~<aډTկ8pv3S ʩE"7+-{YGP^JaR ;+~!xF#)L=+;/Hy567"dV͓1$|F &eyjAm*"Ft dSd}NƂyƳ ?^Qx�O[/G:j7p.ṡ2M77| u+24b%_t|BrS0۩I (ʐ wBaY ؜WY.Wv}j͓>!!Kw_ߟL,+z"-F;Y:+g5?pH#J"9?u=2^d1KzbsD�-:!UW|G H[*{VR0ș5H5̈ *`Y0!XڬHҩ,Jx>+JǓJ2᳘%.UqWi8rjx"͏]MȧjtvGyL :8zٽwY#ƒ͇!m(nڋsC nJ/�<}ZxȱDث%:N5lS{IۡNqF=ZC^#,Ldz1x(~ѕog8RC吝dh9^X#ҙaÉLb>(IXWe2!([Ou%RwZًa5R@>1}~U_:U4;j\)i P>sGη XUqnT;U)唺\goͼR,Li ~=! 5y/!`O4B[SRɎӔcz(#rRGxR)n{1z{wFmFv=Ȩ=m:p K'4X}-SS︱ҁ\T H54K3vnBMjb] 0_*IfOH p9،zODJ%UO/{a7WS%8{Q9z}xT|湥yם6O˲\R$XU<e4';)09>HXDD˜Wcb5AG<252x0.G]x.LKZ uihuɮH>wr|D}Uv9 |#taF f@|zHvBr:xa05!S`&gśX&dNջYqݐo @g5`2Z:[8uU2~N֜F~sτ՜dR{(a:PU8U !cBB)~Z@JO␞Bx-`n>Ѭ= n9RV}$U J,-٣`{=S׮>&nz@jh~P~ܠ̷B̩eC5^\ޠ6؄Ha/( ,2rb:z%Л+q}_ m7jfubGMƀ']Qn Ă;4@݃D_ QwzOML2MH.VڮBgVPU9,wR>X]*0~j/ 5@'n.((gW*lகxR@عƹy0~h+͆&*XD74 u7kw1$aO?t̉Sdv%AWR }ԣb*7#+;jkYMufI [Ø;.GZbs?(2s Gkb937t6w89){־C %p86Efޚŋ(8D&Yλt|sSWKO(דG>WOMRkꓖ4ԿT|$ߔxSu~i] )>J1A"Qi$6=%ichHұ"~U"D3wm L]IV ^??k?/w??şw7Q~矟)?\姰%;3z${שu7k*�ıH=#s?*>h<:n@�Y\KbTzsI @^u9 `QEYTdI*;q*a#}e+?j+SŠg0|PQWϏSހC<R cskǧ\a vwB?T7IۏjnzCՎ룾 [oЖ5?qO:d̑>ooGȃD!1>( ^p"}6 _@F&xb Y5\G~xoToq\` x[2|y�??G No:6Vq1FA{Ti?4Qy jѦ*\_X?"O㞾XlHU;9iou,= 䎛<m9Smlk Qq8Ҙu?)saoz@;[\ۿ7GBIL `~ԣ[(}9ķ9Ϗ??Sw'+[P?ց+:ݤ?{?NѴc8<UpMUʸR1z35r6u$a54濉@Vo~-cyNN?ǟ %=R_jɵ%.?Ϗ??/ɲ e#aʞ?<ؽTBtS6gpo9#e/=s|U#p~C d}@pxM}/?翘u6rg .Ry]c1*0q``:ITncX3q틷a޻żolrSAqߋoa-ϏwQ/wA:G./މ�=S3gϏ??cќs'F1vt&VlZM)w㤐 3S!|O!נ{d)j:=p0!4S@e?(E_?o??ۿ矟}|ζMGR:)i={Ҽz *My}x+݃7v6jP/7kK9kGy/mKjEǽӿΩ ˥0b&اɍw(2//"mQi~KNmEH{c:>q^žA*xPKaL#wogBx%;U$RrBh1r|X�ql NVP6<QTP&tbz0[?Fm?b_1才Zwx8oYU/E|jsr<T»{KOnl_ aa_sRAw W<'J;+ۋ&=ɋ@*oU.2zSwٱ^Ius,!KehiT7lj_I4D5Ϸ톈LkH^!<eh5>륋jc Eܧ1Л6 7O5v~<6M{ƥ΍=l_VMZ_[j}W1x?{Kbɸ[ǷgڷeYBV݊Gcyu˷"9x *GڼݱrIz4<P11hptg쫺wvH1E=x'UGӍ8'v#vi84C]^C|Ʊ?{k ?Ik}mNvbCcl7_" $%.MҨ/o86E IXgUtW 9zQw.6ݾuC5"-$%Ɂ]GڱġN{Ox3i1"L@|DoU܅hqwn;@a+3JbCUL˨3w/<>iڸUW|+A("L-`o<#@^|x!cŗ(0\^%ڗX9C{a#8X|j!q&!p; CO5NO$u$!iʠQ<Iv7땳w$=!^npߏpZyκӈ[K3O=['?3"P!Ħ QBj̟"i<WNBܖwxRl>8ͭeӱV޳ Vvk=e"6'@{yNF�N.U[{>h|~®`]d!=N4#\ dP!}n$, 8j珓)Q,<%rt"УU= 6/Jrc>1D.N ABn;M]!8f1C 9F2F\_X78W.ߕ ΔnCd %& `F0۞r^=~fHd"Aw:ڊI_>m<[_K6f .'?oGצqXO ^_u@:y-gU,? 2K8:¯97gRn-'Q}/![_#) C-άsl{OFsoi\^u1c(/\|㻟?U[oNs4͌Gϰg;y =832FXy_N"_v5%Dx4zB*KӫUk[@$M �+Ci-%+GN|+ϳ_b o$g3usëP1)k㜠L#Rٌ˽d8ab$nzA9ӗoe.CɧgkQe"{t~}.;z[[*L5KԎw3�aGA@EJ̖ōۈ9vw?YE,p^s)t Se;1͕/áwD9mAis9rwYxOIOjIEӫj-.ïk>|;-vzx}x_̩}"HnzKNj/ŠkVx#IGJ<ZR {ݥx6 n({hV1K_O6ޱS_gI'\5%_S/ gM�"#]zb(G氹==T짿׾d=�)|L؏/RmoEfvܱT.}kQ_SzFm*( /CxqqӞ[H(#, %LJYK~wk(x)@Ry=g0ж?..mM#֔A{ iշK3抱OcV^S-}!TQ6mB%ROmۗ&-q±xy9tK(;t3Sfu$ u %.3=qF/iLy_>,bx  $>S?_Cm)zoz5(,tҮ%r0u2?Fzo+[N..~{X筆X nSDgL)zY!K3h()Ҫ*К{,۳7ɤt93Bb삾jG EJ+La M#eˌtf[.b˜2 6q2C췥^~/߃Q=e]~5Cmf<aV )x_8gaQR]Q_[ T L;CV#8?Z*#sNu^?>13hK&ɲ|ڊ;7[0nxmlk?1KԄe :c|u$N'r)vѫoؗ78�$$>o`ڰ^M$s{?K<׌[v{.]d9c# iaKmVui=:c".d+ٌ:EAC'g>xݾYw*'SX3Zzֽx=ꐣE0Iv* Wǯ>"҃{6R{=8KWgbUIqf袤{ۋ DG"ʦ*j+v6QXsy{/aQlcZCF4{ ne\o͓ͧaijϷlHi6G|xL ؇*VkaP6G8KH>QREQq,c*e/pv^˕a GYP+zFˆz}FO]x?1bu,!O=::=RE`ғ tUhIC+4?s)u44tgl# KO@)rmfiHЏH emg9A_C;JמI1"8_RjnEqخ0OMеTG˞5Էp :Mψ.{߹V% v{MaS` k -'rЋ]{<<HZ#"]w=-p$OiSLRMģ[S}`tׁ䨬u3Υ^TZ|H;@)sq^:*\~vRr:&=?6f{~]{<2__d-Wz/M'RG_6>ܹu4jzX@CD <>]kiƒ xشH_ YOg Uri@J3;#n6]0JGڳex;FN'(mFE429ݗy?\$Qy؛zO4{#ψܑr9y̟ )3 Pj1 04R?g.;)[pؐ&~=?xgǞ#R} zr$9jЙm6#%iCGOsf_<V#!T(iqKl8N[ˢ~S$WĆ}w{8*g]Lu[DA34nkG7|1qϾ;ډSp8H oO/(xXϳ>g%L쮫u}nVgjɟ^cKل7-+GNe~y ӡ4g?ӝ:.59zdi_O{!q)͖"doR7r&ޫA]:NJ {.F;];7HQj3XK![?7A2գi b0ۂ0�D*ˆ?u L6<oEGV{Q:^ll<V ,顓]o \˛ؒ#2y:[dsO>93{>IWr6A+`]dB ;Km5m=eE0.NXog4z-xʌ<>8w4VUx'8wbF6H:U5S(od \E@ A]z"4lW-kMwK#' / [|["B;=RE gM?/SI;'CgfIby:f2@$WԜ}{]+X p�m#U/~(⟇T] ʰ䑨mtd7>Y=|O[eoz'ފ<1gODG_q.CmYJ,5*VB �$^ӹTbLbzcb{鈅H^|r){sdm?qMХR6b5:[,nI`cK"ns<ABGMӲ3<(rIZˆr/C_ 8ԅ(AⰊd%Cʐwo<PCΪ-M U#SaY`avdM,s#bA٩zW8~ e.()FR<9ƽ% Tz' 5kh$O,lc"wIlV\gG3=툒/Qsyn{yХ-E1suKL1:~SmH"ƗRKP60<0Έb2GVNijw6nV}:;aqpZK•9!uL(v<8W4?~"R2<)*W!T+qT1vwv.Rz?j8ŽgƳ.@ϊICNV{ShX'K�`D-siq_H_,ahIlzg[:$u#sȐ[(F ؊?~b>۾{{"C."m4˶9"UNy(-Na{ɠ$-׍>WDVC%dlߣ^zRḾ{Af}^[~yV5''?b&q7L6r cCRIedd#<;L=m=z+r-9Lv҄Z:N*.]}ǝc,=eq;/mJP3ga+i~@FZl't 鐎L&OۓV뻰M!MW'I|OkEqཫrɨ?=e�><F^|RyeP'*mx{< % ѰK[Ky'4ebٲ-m'gk%>ĉU^Ro�/`HkEH7Nݖ(x{Ey2Ëhdg&sϑMotUU|y/츧yo2[N�J'}18(LINH߮2tKv(_ق^5Ǐ޿p_(vUJ߹G O7f/G5 ֤yAO=~�4/{Kﴪ.`ze+o\V,E~EkyTd#CS]q=w~.M3X#Ը{KSN2t,9뱒nt&i7x&+Bkw,ǖNҁ$x2]aF1 ٩%t ZS~ym%7qO*iTLM;{HBDyPk$o<KId;XY5[Fff#7ù3c)߅I׵|O-n={i"Y`Ha1�sz"~(-̅|r kv@TƒJsN1{ֽFnsm3Bˤ$haVux{*Wν73R#Ëoȑ"pdw#g;rPxq"=6k.&\_. a7Aj}'OY79aJ4Im"I TRz?f+X7.fr\I=,R%qdG tNB7Mu8-M9>Tӽ(Ѳ[1,wb\Ć_'t-ʒ̰6[P3 'x^rl"UR+<'R[^Udix!.ldؕdF  LzkCYb9L5{KԜ8n(YGoe'=ҹkyŔM@p<Bö]I3 N}dxN뵜K 8.iKwꤽkܬ? c:0v{eH]ţHTh L׫8uvG}'ATL %,�][$+ˋF9"ތ*<1=4"=q% (qc!8j3<h 2 Vm7TouxGԯ}-D|Z( ^s6aZ_wI-N6RLKQ<A4Bfȓ)mKHzц֏M%y4pai3w%ll)%+]<ToʽҞRWn[Iu;r' dkš,/~G=(]hZR[<HY|:(Z4wr8le՜\'}<I4~S$ądo_J1񮯢,Y~Ҧvvd K~%jt �(JBۜr!bRP.bA|'" 闆AHF_l]~FXUTgeWdrN8P~L$Vũ wnվٷlbii-YP3䤻)$1&CjE . =-D}х R9-\4g(xUo|h(rqflwZN>hyn :01,jH_U|kDe|ĻΞX@J%j34R/!r@_ҡբDgr+bo''X:mqo tZآc"`#vυ~?DI/mU!|W">$.B ?XX׾N7*{қ/8 #Ch;R'*b Hi'L$B/5xm+gXi YKݷ'mZ`gq,T4>{x&BMC�rK;_nu>ZMd _m<e:$=┬o^0H ႗F|mCJ zCEa9$)9>FKAwy2:v*\?cXKF�gJ`H0j]n2M14z[7(1=ʮm15!CBљ-kOYLQB3QZZx#׈ Bcc^&Et.&yK0CO2�zu;ǁy{γD? r-e, ^[tG�Y ԚXn9I½(ZxOAΞl.i!Am˲V<?Gԇ(pp>@Hm2,&#O겯~: {ٴ E189my$O=. "u<}!k&޻u ej{^kgP^vE [qzpx쁵~ZNxڎa<#&3e{$%8y`EzpOrBj%a)jxH푞BpT?dg ㈄בz>:Fo.84| i�1c3_n,ĸNl$RY,sĹ�90EX ̢g_ֳ--qHƍ\g[1H" ((P�*Z)ws)i=: bhi2\W'sJ,e^nu$׋.t0 +fd,1T7\T`+`N- Y]R~KhlBA9BeN0|?@Xv+&ґnj2 GTcI_3̉E-qIB2PjE{-9nǬhEdr 5ˤCk.ċ#KI~\D>l-mpv/{$h%^E_:}+;O( <@V-I]JhbT}\N.h^p׍XeԺ�6SںƩ!ĻVό X60%>X;njPlOr+t H`1<ٟ\\9>N=0yI9VtnK{QR4Nώw>ф"-N])GUN =�K`ܠހVs/#q!i.O.zWGX !tZ1%⺯ wI=XT?n'Ea{c&p_>cX AO0||wKUI#n;;;O%pBGΤg,q 2`˭"$x<$\-GP0J&ȵog-[v҂?R=PYU>;CqʅҦx]&nD�e ҌKE� [R[v%m,uՕ۳9iVj4TI@s)9O/= u1!n\.w F;׸?\\펙f0 Ǎ*}Xb�F>eM@"H>ړ\GQ$(FFUIAkD.<(,"t^o Bl;2=ρ~:z-i0@w5 JDrh! w rYxPI[;;ɇ9@'_99!"<xsFkLQM>3-!}61TfS=;{~[vnh ԌPqT/7;Y\J<f8$j^)67"a>&zt*q1 raXGJO}!wu6}IU;Uy< .E2}3E7[KHA�o"z|w,Wj_,t D6޷sR+v c*=.+td w 2͈=9yFlhBY>w9/WNq#2D 4FK.H}!'r;`*7B�'Xh29QEwQT0g\V=' vI =J4K9~ Hnʱ*ڠ/�1; Q-@{V,,{&J* q83 /~זuBk_f "IdhC,ԪTOusTH0a_t)Q.5Oˬle}]JlM`ҵ48�aqNV$sdwn sivܤ*tj0 kjB(=wb6"(cE5sOZP\(w-ȢqWOïp GP k>Gz)ؗYLN_FRtY$"Gƥ/!X5 gWZScr3m qq+i=2XRY*@CyIKpu3s瑸h!o E!bVA�J$[tpNiַ.cTTO"OjpĶ=> NwmDc q]^7& y^ZѼ944 (1xa{=D 칉Q0E3fDzj "E 0I-Tיsk׭#n7>)Ƨur2VIl!=㑤96?/NZ2Z37diKjyC'gK�cN/}h*9_dO:6ߵ-,/[C W?\ntO=O$k6--#$2@]8ԹлG8XRYarK#,i %VdjX?x!,8;n_?/~7' |⟟~'bkZl�eƗ4~ }rS67Bch]Uٮ+wM}1켫̬qJXg0>Rh~ klc]ErC^hQYՕb}�og[SY>#o/J` x #Rk zxM'bEq]iD/of<~fݤ)H{3 IU' )+�כ،A8ޛDT1\k~H['z?fL}`W!/+?gN*0nr|%%ѫ]/z&m&hD-E:+k,e[�iΝ=۸HɃZr\.<Fm{)8b=6t)vـF/kڸĥu^)ԍi R][0'$&jj*U0wYw?X/] H%j:SZœ^Y0EGwWEF|bEi2wJ߬3I =:>�KLTeoh{s{|h ѵ:=su9R g5L^FbQm$\E@|WtuMNuh{Ĝ2F2q2o.C>Xu0WJ9ty|ڰ I"s7hT0J][ ' Hx.\W)f mc/In{5cf o9c}<sK'T7{mB}$[prw:ZpG[ƈ)>p}C̻3ovغ:/q .1SCѺ<C5i6e' Po"swɚ<Ͷ7kf~0S<>gZ{_־/PWk{)';~}>dhs=5wklɕNˁd-rFǀ#$!r*;r7XJb:6\WnmqgǓƆ%A7zb)Er?Y`}"uYxo; Fڈ+%eܛ ŗxޘ/|{]ڋ2V}_⋨I^F65R d (b,7{ A>xBۏEN:Wd[gR̹'>Fk$ŧ`a+jk$\$jbKў'ErH9o7/𻵁cJf)70 A{&#r[pm3W ȸ`_'Jf Kϙs/Ymq7^xFT{Clb=c5\0#u|D~Rx#7.o(UFr&zW-nG:&7|\#9ۂzSktOtdz=T2o]tדb>JDۘ+vP4CM'H<x �&l¼C7%lY.[=#Ӌ]DFx'Id1 ڥG[󂗷3v/dAMZ^dgztpIȒf�I,?Q9ڣ}ʅڃn5;}Zs ›:3bZ^]x\鳹O]JR=}d "w=# ,+с]jIʓPt^Q+fC5vRl$˙v%!݀[L�,\ <{Ŝ.Jn磩).'sɖ.o-rb՜a^0w3w@IOxv$EF(m#} OL kao[Wd6%'L* �ܾsa[E W5G~cɒ`r]غ>o<GKXbk~<rnwǴ#y: {VaW)$-"7O3/rע0z K&m/)%t`Zq|S�i|q,ƕjJy#s'z^{b,٭wo%]{-.- ~<h:zR3-),)D?e GX?zw.r3{E@!5ThIy/~`ITS#?rKիO'@M kJxohLI3 =ݞo荔H^Cd{LO߯(p5ĩh)$EpyLnRޓ|{#JAoqO{O@s:Z;*\? {Fw0hr k GQbi.(rm&AzR!{ ݾ΋c3d  Q|8HI }ӲevBCy0 ܵڥo|sPm6st#3E&8 zyZYKTq gkȱ"hh'`"/!q]NEs+xnۻ4ڴ0`)_M~ ke`sJ]ؾY葤=HZ7ZJh,)ݺ-4 Z <2٠ 5Yr2nv -e/?~0ƃci\)mfrooF^{tq�M][,<D L6]$R"<Ql)"|WL({.cdP[Z<Ei@ '7/0EO0QޏDX" u&cϥbtAf+hHNQ{Ya?6h"wb^,"s;[rӲJ~!v ]gЖnյCNRݾ"E5z5D3x)#=!b[S!<s2~̴cOEM}IMKZ9?o;hc :ڏ?o2I~{ %-[wzq}[khRعtOZR1@$ g}鹉S*G 6#HUl?]*xK ŵu!+1-:OғAL&*'nkvg}8<-8)=;J? [zzagF8h3b tƞ$/0kM.rت czsH{`whZB Vћ : iu0(baO#{ƭfRi&{oigi#R'}<dme)uM4O!j1zяWK}0)|KD?Dv"ҵ?d�Wd.eG-G52@P=6fJ_!%\>H:ޜo%9FXΥ[zFdʨt؆~?l<G^HLGҺ^Ť’oӌA0*~vQ̔v8uL VE9<8'+# b4"swbKGd yMgqKv]eER +QM%@Ő,nJ<3tN^$X{x[vk(}/tRJ_+-"<0bd۹sd>C!z_j/~Pq|{3OT HT5<_LU=OF[RF~ƦvKG*f]!/ 쬵ԣxqbqr PXO_`;,k]+ʎEvb(i (<s-2Ex$|E~2?,v풢a6ʝ-K_nirld>{D HӞ}. X0\)H́GBcQ;BL&֋&ҌXow'F$a)ςXZxhᴤ3s0ؙfo>{̓e@c5p;Ϧ-c<.MI]2 ( ]B sPji/C1djI ]kY[R {3ۉÃC8n_k$ȆG/*?{ɲ)Ⱥ;e 1Q�q:IS=*~e*<iPiZ=OO%){. Fr!w[oWPG 1PjO$nJU,qJtt{1{!< "LhXG8+q)\׎x7OuZY`^A<J8-_o ˀqxف1FLs%ۻSg'a{?=3e4Ko2=g>)uXheltt [)B/QlK}cтߓ$lolm* nM]?}9&$,}N*Q4jU6$(%gϭ;h4D}!N^ˈ1R@&#vpj@a]IyXEY2߽4ŊB˧g\vC!;=]>b2;Z*Z#8nKn4>ud!7O3xެCgn98KXӈN;q5Xzڎre<͛W5ڱDZ gQZ&&w0{ҮlRǴ@/5Gɛ`jL_w͒vPn|gCMeQ شrph4<Y#ؓ)pWZ> xhbKI9`S@0W͗z~_[ulgj+[iz3+;.)O,|ORs6Ǚk 11r7HH 3QYet^ #ԕf)ko�=LϖBBvd\zQKKg9@OS ؏)*Q>qe<HBm�l<C-]JQK&%)|K6XLJ"Z#0$ᔲPP5*{Kٓzi8 ﶾupKնV=CyK ~a-J[(\}ٛ,{'>J�TlHn˹fEir4]qP>{|JP-]"[=U PjE5I�'VC#5*OJնܔހfN$̍>6,[_{J Q6y> 4ݏNr޶HorE6:Ù"9O-AGJOع@y;>0p4�K`H; ZƏ<fQ֔yW"ٶ+UvT u>v/SqDFJ`g<IOւ)5t#a}zN~3_$K4 G51* g_gD4a(dfh!RN/4|}97vڤ繰^Zx+BGOC@Zf)M~hZ YN?ױtnƫ,:29)F <R=#S'g| W:$a⤒,@HZ ;�2n [O)i#v'ZJ�{Ws?)Gyf0$<;9R^;OR pK1D%L9)# tu 3ex=J pjobjdLӄmTvIa=34e)pa#I:R*pP7 ڱ{?LՁwX!�4ǀ!\{JGKADO}+ޚ(DV ֓XiWTUVmʑerDcg~L=H-[/0^RZ潝I"r}jp.}c(?9|ilɀcPM4T^^3Rڰ݉c˴Y|MIZ}ݎ Z]np mR!9믺hk~]l06ɿ\9[B4HߎM, /yHFl;=z<ikp98ZC*qJ=*jpGߩqDa?i+7$V0J'L N>I\s-H:z5Ռ@+8tqGto$VҹD\ރ7Rl2͞ܗh xԼBeT0N,aMU3 K> } τcF(5^#!l!FH& -DmB$ILvP碏@}7XR QЦz.ܻKy0zsaO;qw|{]YJUR�ydPiC :H };yTğw#a'VDi.rN#.l⳥g‡0a# `d#VGl_:fYd" {7*%38j}|æMKFڛ5!_JO=/.2>C[*-m wδQRyX2҉z%<ݑUDrmy{Odn1Q& &F|A 4]'?b05M\opl+8t8wr�c-O?<ڸuQiOڲZ7,/%֪93J�M&޴3h9 Aq}}hV /Q\e&FFad+��SKW2>YX"<хrhK+CItT!CI(eՐ-#ܔkDo3|r@%rR`'q"Xu|`s1Q}{+A^%–k0d价s 5'\'vѠI}W9SiQ_LY=;QIs>\-1drg ]GS 3niD5Đ)5sQ/m(赿χ,+pdf\\mWk n`ܷczIJh=fwP:ZRѩ!,l@,&4Bh)4jh60|gS$_ qjy*42Bu>Ș fq$Dc.d s!g *3J ~ 1W[vr^iZ¢`wԳѮ[GA7E(ٯ&8x '4C#W:A.l u$.H&ɣWЈ2( ʆ@s݀Q:< 0 r9c%E19iRmmaqǗ*W$jA&N< kgt8K}d߲J.ZQ_ZHp7f\hP#�'ƽ/�)>@12Rsӯ %WOHd '>4S"q .�dj*z(m256TyrZHe&cX@~UBf@#jP'{:v4}5�Lz!X~D;cW?C@( NKUq28Ćc�02XuAG'̗[q1rRs`BȢW L0[y?& Q�K4�O}4۾/)4DK'~I  K<bc *>ShgU^.C{ߛSH}e%i!Wf-t0ftp�+L[f/AP0H }'іzS`/_3_ҺlpmQBe$ݔKI( a&Lɳ3 ,PZl0}$L~*;-_)#*(j:YN)oG]zһ=gCc<q[L08�@E%5O )ו0AD){~:3HG'%cP)7#:5|(iΝ >\=hd ySK' k5('G2P1!*>0)p4p$y%RAdP\7m%Bh.cUER̫ &w 8nY˫׌,B}G@1MN|~!>31zTcŗ�JUQYt)*M'rA A|t S_7+p,5X4Z*u�t]8@*Рt{E"Aa&ԑz=TayΰE@ ,Y1Y;+fJ�v,Rjj/#-7af4/dd՗*%`,7+{d\q1P̀]GL}[`dza!L=Iԙw41"Yy1Uҗd�~/ɧTȼ%Ձv- (;)H9@Th1Az B*`/,0;nJld5`;dy�hQMA7N6ci›B�|nS#}E8g 1Xz!? M *+ؗWuWbn!I 3"6Q6]* y] {%@J߭g-E̜&WL rP!#"d?& !81|1@"p!c4wwy|{ 8!u,T{vDT[C&@g7x02f3V45R5S`}WKBgE_K fiAඒ yޑlr-!p35~NYt^-^2E@^ ƼT!O޲W텕/cR!ɼ 0O,b$*&J',:PD{"W;S٩ir̴"no"AX+ߺgoItwf[Q}uPeqf*#IELOt8rn1=)/)GNԄP'7c+K-n B44a?_=s+¶GA64g $pz^f|oI^&1Wc@Q09##[б>+<EX CT򜊪N\3^=93Q_82X6;@n_9͡VVzFT}],qtCrU#ȜG@Y8SK/Ú(LFf䔹N/n:uW".Hi{ yK(d E Z \1V1MtrX::,X/g* D"gۯ{+i1U?/RYHrZp>4+'{j7'lzw@eC4$ơ=CNl:hdeW2"۫/ $6#B}*(]qсφe@',k'SU:<Dt̬E`O)zm0SS рEq>S--:ދƎS z\/x%9 wot*;_q H)Z5'>#B󝌱 .1[10okgH7tJ A7 2B+Y# Mq2fM=Y8GfjDŽcyQ3K*< /7Pqo+# xf.c$rG1dFHJPD.ѐ$}t=X8dȉR88wt_S`oFچ}#YLsB*Sw r 2 αF Z/+6.hB{Mؑk=X%uôof>p2ڞ!*!+!bNQ}̧:Cc=(E/tsM+yLP C$ii諅\N-hHOsm3_7=҂ty�Wߐuځ*!E$e}%i/l=-IxMPq7D ޝ,d`vRCnp!w]~[6!Qe0G2�҅ȱt. =E l'[@2\.V)2bZ|{R5d*ޜ Vtأe[]y$*R+G˔fB3|� BW[ \H~l(7L].�i> fLbaܔ&*5&Gy + HAFDIp*�@k4 YcnmUšHWfAax gkȦc� e p'Qr_IxEߌ:}gP Z閌X+�xq9qs J&Z j:ℊ#nlzN}oڨspҖ%ާ+KI\%: ̋J*,WWnےqLk�]WZ˲)t!AG9A =WV<:@\ge5ESŠD^xjA;%eE/|XN4@AR$*5 hv3]ed:Lh@c@1hKBOFL-'2Ճ}z3g([Oa?Ѕ_ );v4%@^]ozDDe}s0];Tp:YXDŽ]E,sD#}(c1Β*זK ZM(5%8F3_(S&5<ۿ?7w?w_'ϟ[or"Pnۆia2SwTn'ManvK}V$i$NYdx3]utџ뾢lau,ٴiAoz p"ofW\D@ncȇ+莯v}Oʑ,M7827K03߼9*X4ô"o, W;'w~(=7 {M�Ct!H}]tMr귇uqnH}/)AmLK6Y owk^1(~/1]ᥤ EiA66 {|x?6}PB;G1r>wڟ!2ܴWV3om6.ZA6=iFl/wu9j~~h{t,Y|Tf1Y: f|DžXs@]@�dO!\l#][⮢x“]Zb'*� 7FTEk/`9:6. Eg~`vFx&Xۆ6 c]/Bz5˻? ILz/=?\ؘh~YX"T -M JYkiB߃+ T2A.W415d+ZL^3dږ"WT(g)7<}$p3YXbV iWP]hxr++=wyɊI;4Y�t˞~hA{_O_GwX'*xǗǹD +-i/`5זL!B%tkZS`l@ JpH$6'`Tv+; �FdP7Oik*[҄[Zs'M6B `(|Ox5hAKW{t1.�ޏ ޡ;3GrXc.+b2!BܦvS+|efinl+ zpסSKC^lx2s mjzIn'́rd7Kгi 6/xaIE~)uWpJ!%y pg| Y: ",/m6c!\AkC[ R٨ M&&+a-t<gd�~? 3Hq�v$K`!:@=�fqJٮ?2"x+ 1xqW&^6iA^cc[{= ݰSq3 D@;l*$F%CL�tFRY4Ee;WTYںNoSe;vh1|!h“ھt/ }/Rѩ xvox4@Ix5�Q,- M" -�#fcҍ9 "pwO v!3y/z龐; 'hi;nW]eZKjX&ʃl2ҕPZ鰂x S΍Ȼهgt7Š$t .JϺ&beK ȷq2ݐ?:\iSt9Sx!i"}=q1+.1紑QS KWW4󳠘Ԣ{Z>|^%Qצ6�GւFv0ؿp[B>. 3c9iʭXj@to"GYRXw ϥa탩o$UGNLLjw$ p MXwtk}sȒp?-@e\@Ճx6{\"@F g?"m/\Bt10?t"p?3lC@./C<t+^K_T̑DƏ;1[Wԟ.%|P̺j:Mcj@ oʆ]${CGRaV ] 7-<;2ރԏAgmO*Բ)| Tʉ{xUcqK"BTc+1Hhd,JȽҩ fV&BDPS,WKO[,ldϑq QMnD`<()J4Vvͱ$zYF[)Y%_�0KeQh1:c۰X(^^-.n>VD % � QI_<D |Zoу߾q/\<<5C))=9d*^g/"0;7mloMtpjxm{JѸGWO W*-Ӱ@ v4QNDbw쎶.%B |7u zW[Jϣ;j[kh0H?mlt Z~_C+vO@DZЁ 3{h>W,'o_pWPO6Jx*fͧ:fF*1pm97AH'Hjg _I[H|/2Wp&so@1FJaSKeNewf7y#+:#]XK-o2#ӭZh< m6t5NrL!O3:F.M8G A נJqjM[(|G S+":rSUD呢Ag cu6kF#3HYB"/\9`F(}ii ,YpiWjF#P}g[! OW5A{0A#Fb.6D�7P#Qyx+9#\AA4F)}tԪ߯B i/7.i٥9ߌ/\eB5ؼʖ1~*"Ka6&|'(Q>}jFԷ,x fSͧ-zJzR SNDХ&}f*9dKGp7 P׉E,H0RF'!WeG{v=w 蝳 _c֔\"-çzIBr׊ p e '. x@+zj,fRg~ ÝW,ZmXGz\F+I*LB$DU-TUv !Lc,zL03 'eJ 7ueDxxYڅaBmKcBB6 AH2E*dϨ~L {R*j5*~@qIPRjbЕbb.�5RDngp4`ՈD"-i5QHrݔ6[CF*#/+0T猴lEgC L߇z�H'La6t ʥLg!!o4.۪O# h;J{Z'6�MwPíY=/$rL, C�)u!y&7O >dCJ!$}hqILK8$�ù:X+V[2d žOjDa϶)v,h`G|c"D6t $M `Ʊg9Qx/[ yܨ/Z^ڴƗZRIvYY7(P!qCHl0Bv NOTwdH_g'll AOP`7nՆJT[N)5>^*e!˒$ I4-!0SMA(>d'Mjx;N)u�Be?Ѝ0gJc#{R�I+ׂ 'El+$tOD#q)35UOQV+ ͜=&s[~G{mbE-bh"h cKY]ȸiVs_ ݅3e%'VzeTcxdySvoQQY[o|P(k&uHD%!MH�CLO|A2K 9z >� G<@]T,6wU&#\9ݦ )kQghxDCG7^㉞B8FOH{sP}?GO_i\ƽ^?BfƳsx/řx1ek�Z#ipxWD$@cG\k 󀛲ťy$Wi3u!8*>; 3c7~Ka-mdt `y5uÑ.e0Nھ@wŽn_@d²͓ 7^MN B󪭢HH(eWfR䯟~ii5J^'S(Dt'�4zQ>+<\h B)u<Q`jRS@(]* UTMjIR%]&I6MxXkD7ӷ6k( y][%u:p@̘QI?~b:*yNDA[#o32N^<sA7 eeIHҦAoڂoz3tzQp˹jqF]$+تNW=(LRrI %�dOf ғjHdIL]t+Z2;8.8ojs͇P*HH Vkt60 8-1&T^GG4sj8g� Vtd )/6>PIm0k�sn/%_'Qn7:*>e9k$[L៉0n ޻!V%+uaN.SWLfީٗ Qt~7B:&%LX :;4npȸЎXIā;WYrqdF"4�C./v"ʓ3I{xFF-ݻ8@|@;�YDQ{FI$nQߐp$I53< y{dENz tﺍgšbya 5�vœdFycb5T-f>!`URDn  P528;`N1:(�5-OkN€mXm=A'f OS0q49$`Wjѹq!W`|DB$]LB=*[rZLI]IJLHHɝ|!/T&&?0^0q0Pd~B`]x7J[`QeI0BA ǘ�s^zWwYJ!DiWLǾ;nYyIiCD AI-?lǨY(>/2Bq8n]#Ң^Em%/cO;f#A@?断!.Ncc"npAVpE ;j}T e~u ?.q|ͣx=N$Ɓb Ǻ`ʰ2".u `'c! 7ej�7r`�L[B4G@%FF,+l1,ΙG lw袂C0NbR,7ܲ嵛N'kһ3L7oX)txkyP-GiȒ}APO6oA{VfD%|(uN2 ry<C-Bq�z1}4u2ё <#f�qpӢiyP׋Pu%/T9nY@=B!6)LkbEع@q :fKz͔w6Ul.kźv]<3 n<_񖙲+ƨ 6fT.IիɷD[ 푋 -4௩/g b  �4V2 )oǣf(AIК5Nz&c]X= a-?@C@`=dIE\ђ;72:&y~S[ MsH IK{W,I$K~4q'+zܟKO"H'uu.+ WJ?\ѩkH~#1}ObcFkMʲ%na^;Nh_53Pc}8荶T`DU#b+bBzL?7?@[Fŀ0_�-fWōb�TJdJFoA 4{?+7Q`l ,cG-2ʐybF֠e>fDb{\$rӕ `@ V8nۨ}qt*jeZ%t"|<2<\,}x[̊dy0vCz=u<&s (4DH`F}~t @:j2ȶe@_p'ÖqJ0 Hxy1D#T||5 *DOu:4Zfh#ߌ2l%ҟqdQQxܺq3fyӁ݈ d'eb^nPR+^ *7b/8PL-A`|AJJBj.OZrxVL( {6oz< `X_Kx2B>rGL>#YV`�_}$tq-X'qAiG5THFvUGAIL�#<(=xlFؤ aՓg,l&j@~T?x`)xQ`"'2*%^C;l&߇zj˚ΑKJhBVadY3Tf8ju(g5XD\#�Flu:Ɗa3KCpr]@#"vz GDd/ (~Hrn3�憥emʴX]S3I|ˁgMwQ0 (d`e zNr8)=2}J`d( 55ܜ�sh{̧݇iJ-LN|L-/R~UX[F}dO@8ϝ';JJ<cJ_�';K7b+NoRҸƩU0\>�6+n5e# rt6DHŚ::>$a4�4LߍƖ%<tѝ3mw:~-Ĝ;&:Fj.4b%ϜyG B'[Is�[|A y!Tn�3e1&0$p Tb|Y 4d1/QIV>%}j~Hs�P#(@鎹^"shzJ{(ҭr`If2Lf&u8x9a\/5Έ?caJ=\H "шs-RHFBn|Âa2zpWR!MQK�27B#Q>gLdRӊ6bTc#Nkte1X2b:,77b~jPH ݛel�#,G0k(ƙ;Ot.jO$ :i P2QDA:r :^ӂG^ 2N -G1&7sĂ?,46y&y%vhE�ô0†d|R_nə f[o+#S蹍 '@ HfE?yi ]1c @�C-?)iMy1xdS8 Fd`sozLU<nʊ E5|'xfqtS$ė09S\цx=-4ߖ[Z#a:2O)/ka)L<_L CdҖΩyว9fBG 54z#�CtˣИKFm9ә~Jh _Y@ɏc &`9d -DCŘ]KO9/�۱) ^KS¢ۚFV?9VwZ�nIlgo@KidLۦ%Dmo"x@^ 0wqoٮxlgMҍUܾA4}` -{E6*~3AG^<r'項:#c[Zh 2pR#ONL&ZF>F;-[" #ĥjƩ\B_X(԰K H} *wYF2涬YoQ6?;x-bl:%(d/`63S4Y"-N™#y@ȦB_< .'X#75-Sz_0c;ǧհSPYX$ nle)=Vy&a*O~tݎ'$NShkl vK@N˝E!`n1xJ8"dE̴/6l2QѲ v(=e�NQ=SZr̡nykWڥ68+oԳrL,HUi퐟g:E5IfZjQu'e'%"Z=is"K{JCj-J"l]hiCӄ5 4xy܃DŒs �dX5*B0-E% @I[ x"`Uy<4K,<romlbM7ʼq{72ɣ'}<i D Y{5�!K>ypAӄ`6N<N-4[BYO$e lh¾f+GJE;/0C)=)8 We=_%$ hbk14ʂ`f˯!BӐTͽ~/%'j�` } >a ~x_Ly"\ߓEgV@giP]PO�NxzEH,aԵp6p_Ӆ<(%O &vL1rt'mL"~o\r_|({SNwu"�lLM_EC<p�N';=Jtܾ]U_;TU]nm5!X:C3)MxN=`<s>z,k@W3Y$�UxIA&`db;פ,qEOdG2`2^CB, 4 XHKt^{ք pt6M%`3h, 4dKp$#eޙ"<Ϥڑ!aZ\̽NEx\l ~MXM~er]K25gZhKn7GԿ+>X |H� >2^f| wĕF TA�-{]浦\xaJipy0*ѰNېY (cJ0T R^Xt4Cҹ~AoIg|ydIxe&P % f<f]9\M^'e�j[^g'm+-| ~%W/$d04U-5QyymP 90W<<JĔ sn@pP^@7Jv#@0$]kHywe< �h6Wȣ )#:JXs U?qRt@ |�x .9ռ?dSL(I:5LaBAKE_)w$4/Jp.5 Ʉt4h: 5]i)ZҒt0\I@HPɰrVtڻq>pzd+rmQŞr`A J`;v\ۚRL.vtQ.2(5^Qa_?vHQ:M @RgM>nYMk4Y|<4hP*bƐd#~k̅~JiU̵0L=Sb>L}&+y4� ;E\D >M]U-~\ԞuED蠟zn00)h} vB>oiyq #=�GNl5'2@e idg=0E&qne* %9} �wx+yR׵\J:ظQ,8<o|5bf+T[v.q߯q0tD!9~S?Ԩ%h#DDž)t U竪LJ_TDFV %'tLZt~I?)lgE2Iq8(VƑKu *^L iCxBrQ& <@(} FuA(R>sGwnzuEC4D}.1)V"4]S&O8h nϞټ(A ;Y}Kv:@xH|#t )(:Ff�<ִl'd@'C *"mg[R]u};M%85l'0=ʡVH>vp"ĐmZ5.52ԜBHl�}%eg \zIkz GxALlY6 li!\^83!c�N/H5nc86 Y=h e7 +҆J(2qir E*/&~2c^IAN{@rG@']/=Q` ]X,YieFthAG(U#nNW"Tt8d}T~BuPzEٖ #َ,YKFl�闀!A!4X`?s_o~wowǿ?o鷿_ >ϟ?\|+|VAp&r4vo܃ LZVfC{A|ZPV}oZ[֓D= є7Z#ğU `USȇZ L@5 sJf]?~_JT[EŰchEg|`qD)Py1y2ɏ<q#ò1II<&6=n o^Տ |+./(;tiav"ۆ-=ޕ;-ԕ snaX-FZ'"HN.͖Wqjqs_QGu9J<�oD? keVįltEWj wys'g OT ~q2>Yݸ'F‰ ntfS$œ$Jbd1b.s�Kg 5xi (;>6E~?, U4QhAcں6Imp8*l@1†4VSPC&d}x.�pc�4M8X><:Cs2Ƥ%Ab+f+>Coin J'80!X`m.>|9`Elc$j[ l 5pҖD9oD9P e*Xͽ/ql]?"n4+Ѳɶ G`C1#)(ءcz/Мs/$7 X8DL=j . sdviaATV]M Ҳ%N`lWA4(O. _jH@~}h0tNaQ<0C�1F)^̐sccZ̹<.mkMp 8q`OFh鰪b;.eW72p [tā(w>CPeSԂ<қv8Ǵ'E BAdٕ=`2 ?Cg!T BH 8It)eq&jvYօ/q}V]2)b3gVyX33]Rma;Pcf8d0kã(@#E:r<{0 8l`$�a/hwaM} ϵFӐ>d2M.!K~Fu C3b&hJlڕ14fbL|c͋2~ƍ yl WhOێ{T)1$p&;Ђb;T4#Sm]ִ@t@9oȁ^&\aVKx;6&xHJG#n fC:04P( |/s;S$]H(Ϛr@G=VH�agrq闣^DG5S@ycz($^]@:B_Y"v}fM*# C'HCx/i\$FF2t/w@f06U1m0M, ^{,úB kxx5<aR<vj͡ 0ly8$@ΉZ0ajl`l/{S"ԕ L(n,|&n)141T*U8šl085XD@=l+)�K5lNg<٠ZVT>X~|C9c,mbi-&UЂC ``i�Q@?Ozx[ po1怇¸ 6uXԸvF6ڬIR3/גtGu|Ve4]@q8HB]Qy)!9 )vm; A3?VN+=A+v@2ƐT]YB eQlF  S5 aݍ̥wWVos<Y<QSs)6W_oAD [u()|aB|c*$$PTN  g^SbuOJy!Z#0 w"!"׾(H޴zUTnmBXM%Q,? a(8(q "\g)iMc=Q 6mNk4?jFDŒ9+@sS| tom*m38\YUM9X퀦m ly{R̂=K42Id_I7b9CF(_!/?FvLJ_IKۣ)T#H~NP$),%כ-w AP_)�6t73DT|2-KԠzmB}}=�JϬ{y /:`yEՀA3-` , ȇ#"$h-[|Cx³yʈc՗Pt7Z[H;ͤ%3|q4F:̩if=;Y~m&Tɲ01 W&"]S^ʿLZJBXFY D{I Mg�Y2%]4<RS߀cʼm 3Ee_BБF6CتpE (VBeȅ\| ]f2Odi3,]'i3EQE�68A4�އ;wn5(|syN?g['Wnjm)XQ} Suо%qm.{ hFS*"kxlp u&E:EA `?WZ8J.o}"܊Đc.;hF0A{L"e{28GW4s_K -4*#V6'6h~ C,E!OFa0�—9�*Ge<etHF]uY}WFtPt:åÌ[TѮ $WxWe$ȬptmpJSNZ9]Rd̋rb+OG"\ۈO}CBc mT|E~ZPE,e>F֐'@Gb\D>أ(LSQrU˴ ȇ<-iACNA|ڣba.:.ez^b*Kuc >"{.Qz2sK e0Y-{,R{vcMTZ(&NHqZ@#C{ςHfstj)5 k#ʉB:FG rXM[jvF/dU8[6Q M=>'khrDPv;qcm ZgGBCaE $xV>ۣ:u/Efn2[16mt g֝UtπQ8v1YJoJ7>t0;X|oL "[T ş]E_1 K9wh6Y)7wV;9>g6gG#? {HI=xR]If^}'r)V,Cߴ&A2xa!'D -xSKKE1{|CpCޢ@xO3o?){?*a(:(-꧝ Z.>ńnH'ך'EUQ*Az<XCHϑ-l!;#?�p:R_uKKűZ?l'{7oB} 5k~Y%|4ȁrט(2*何 YZRenf~BB q[D`2 >glc  bGFsf~5"K!̛�@�n6 gT )]f_'Y9nC@^nJVX% )xy2.JfJ6w[#52hO%_:_Z-l=1ݱ@TWVuTؤ) ZAK?2UhSQWLã2t)9hpkQn\Bgm~B "U|ϖX]5=vt  8u.6-W?,S{BX"cI<N֙fh` #d)p>!2�,2r~cqk*)*V͏׊ƒ0Ý~+TEu�1{̠ q%Vwl|ONϰ:re DMTc3\[ AGKE*'-%?έd=7>&Lr@Qoczwn8 ; N|pLr'3Wy7\ˋqo@ބ&ǁ.Tv0#Ǔ/2W%w%צ7{")XTx{nÚfAm2iq >>BIfqD�|%SKD:P҂ u$yM &"m�=`6Ķ8Eu;+Q)F-@$)OȂMbX~ܝ%!rD]բ&TMg~|F:eBSG˞ "jKIBS!@˝!$>@sBH IIm88PtaZ]6 F<E{ugWGo~"}0s Wfˀ9eoNPMDXΚ-)Fo=I`D|4x,ݏǀlÿ7LМ^R!00ӻ2d3GNK}ۅ"XMiXmMwogꅷ_x>L7GawG(`R94a:2ſ`#U"9>~- ą"\M;ڛR)vNda9-݇{Hμ ^l 5GAsRRC h-e%gAbJZ 4١Hwpd=tEuGtO$:Pna U)^'o4Q7:NAGKy"\*_u3c!Lphj%hXkwDjPC1{ΧY|3>?^`6U7U KS*�$NUZ`7l-$ Pc}!PʚYg2cv )XVv]q5b+ `9ýdQN7N"^o (]Ʊl/}.V?41dh); 3HG&2X~w T>rĞ.₭7eP_㵭|}S䟘i<G.N֤3,z3 h(4PiҠ2&CEgN7RhU [ 04ގK}>eˋb+1k [5#yR|V*bHH!3!X`4Y/TI$_~V8݇;. ?z ӎ+J1l 23!3b<Sitp4�"1nӓl L?˱h*-�̊pv$x]eb#Cf�>Dj vG+fzaL>oۗ_VGwsޗZG M(7r>B䬇8ҁ\.6}cPl띍*bIPF[KϑO )lo�8vV3W_ ⑨PdBޓNh<SH6 e⣧(R2K܉D VE-ˆS~晄anja#<P|lA&Jw:Ǵ/"вA@zYRl;Q%.-:{o+'juY(>X<1F]41׼f߷$wtAtdĺ\1%D3$P} YI4i{p*_ӔIa6ʌ$.QߜcgBn|;活Kz(?QY홙K1Uh岡H2@ ӨU:QviZ3C?,dP*іfЀ-g6^3Ж"{P3$ 0EZP~5 @�ɤ҈oP>ǹn _Te{ѴCnyMQ?d[/5B?<mX7cYPP̙FK3 {p`VK|dvaq}s1qw {av?؟Qi҉Ƿob[l~ ĭ2I`e4 Ոi R&ɭܧ ~5mT|io^ ъHKѹ|Yc}J t)Rsɤ[[xڰţ0,s;"lK/ 0ɾPӔOhH3e6tpq%׻ƀT@nM@,~EFk|II3,V%7J K iI эCVdP=1l+6 W/dH0EXl��c59:-0GG6I硅IhFÕ40\�_=_HHOT x*h0Z #� }Tyw$k@Cp6kk|l5qAuNOwO&n{|$ +KU/VNrؘ$9 ǡÂe~ 8MFf 85}hW$D�o&sx@'2l[ :s<#H�2Κo8N|;ꗎ(AV0 nඅ;—-;z"}<i*1E)D(|I4 Nd%^c )u46rH#B {p6B<@rV|"-A,/FM`Te}D8MFà\%vű[\91 nu|""&DjNL,10B m  B<ɨ-nlX DCX+Q2d{q8#[@`-CVw"N-֝0% v‡+;Æܥ}əP%I&:4g/ c2S8.ZӘ<pI!Z.'i<@,@T>+ՉHmN`a];#t.hk)\!EAñ?^(t5#FM"2J3r *H a*ۭ*2 F7x9OCMB?XWvIFh+@‘PU�;\q&!¨ ?oMR0y Q ;|A\Ⱨ3S <|9'*1(2i0rR>˄giK24MSDLrshS 4[l,xۅmxӎn<!ե<1R򷀐sWeu=9C#BP]J+Q=r)XD}0lYT{983EH<$ ĥ�@eCsx 1HP}ٽ+bQ-9!% {h;^pm0V"? ``K:NZQп3]fJ|kʣ!<uѓ̷L.78V8v_KDyܑ iihR(�̐Crl� Y8 P :#Tw -6W v l b-{_ >e)'4`X暤Ρx,DIN H"HL)BeԔ_ MT묃 V\EAʛ�Li{wjX[ӽa܂[x4NԕB󐶓:X5i%=o"ӄ{Szxwbj_.ǻ&zۑ‚y[x`D(jLÃh,yG&͒%~c@I̝NgNAQswy KjkJ `cڣ<AAdz>`'tR:< C)ٍh ؋2Egʯ$=%D<2"bpmIWvi0jM٦%Iםf"un>֙c d}R,k@Pe�O;|p@3w)pp*rMYو╂f&ic$0|fO?R׌F>и.yk¢f.Xz&8P!@+GChNXۋ�xv�6f$]Q\gaWPNr8v9B²H�D*qe|t0 AqW$j-s@hU"# _X|1tZ]}|8UU@0m%뮰G@sP7g3Gǒ g&0gAR tOa(P1YRO}J*CuB) 6>H{JDIF7bBqABq@<?tk !atF3TFb2f[/N)%\U =b8pIBZbx|&#o8*}'. 0?洳8Dwp 9{o`*RGjϦ� eU`Qa -YaOCvl8 u8X uU".)3V 7 |"0ȣ#N-]!hӛh0o :.~exQ{s ]h1fj%(jI e(+I*`W:.n  C^p {}u DU TS \o >dm1,+0E$UkԮLq$EKӤEIBU6gkB yϝt0RDt.A"ЌQUF8K`W*Ta({ƹbmT$/V& {ءA_hzFQdoh*>(3*N3Dl-{AV`B3MFHC"g?,0ѣOzͼ7I񐗄~gT __E'<],-o KE[TXm;7iMfPjkt} $MV<,D!  i$hz (~sQ4P8 \Mgg-؃fF~1lub ee05s[N@>4O%Ժs9MSg"2aX-}�e tsaW.198,I xonWhX l^O1^}嚑NI>gDm` Μm/#48ty1Ҳp0ƞpb]TBkUv㕌6ef>ps؇>{V2[sƶoiwK q5ZfhF[Y*2!4>|4f4*#0ҳ%-̭hw5V2EԎdێqZgnk "zv�X<@_;)pY4p>J\oO:�T+1V~\.$8�LG\U76A>Bh|6`3>-]c > 5jJ[ÝI\<g 3c`  knF.qgxƉ̢s@hg'B<6ڀz!p|m皢w՚~2ϑٍfy+¥{@AVMȊz$q u)18٨>3$JA]'R,r$J }ƒhzx<"B/3%>_񕓥BބDQEŐNA$58q5;ac,] 4Ubtd?gX#$}pV1Rkl 4Y9T#, p4& N6a=]yJ5]KL5DBA}9JU< �@#YP.Z;(k<1D86-IZ`DeX̾qVF9\X�)MD֕|@"PV P$E\=2LTd.%"oA%i’ :dU={S.COK>k*$l(,9Wl˃*rM<=-Mt\Z(}:QzC~4JVy}(C5 whƄ",浝XWQj<GXK9#/X@4ԁT wk *;4q WP܊cfk~;Uãg拇DkܡG |WG2V4| - #u5=c[8vdLjؠHt8/ˁ+t2qvzal&# 4:1ENeLLxEQ`'1`/eG]ȣ0H 8E)፦V{fu6&ek&ՙm)ȸHڎ+d7S4'B5,t #� ,M/Ms(D;VGM?H;\$TvMo7hairoʰv%tQw暄~\ y?fAiVAcb!Yj!K_ Oy\| JG�,Iqc,rK-8�.V؋އ BTru{(LȍTz(6mAìɉ+rA*? I`ʑFWNYw^AцU'.aGZLu箟*s5$9S)@n~ {c++PF`EaSH8sDnȁEڀ $Jc{ C' ֋0k&1tđboÚ ȓ8gHGydKc庺۟0Lo_d�ܚ |C*N4{ kM'~/0tTTTA>52ZūT6!Dh{ XGQY'p :CUs2b9wsFe4axo#B:Sas@O!hiTfMWv~kRp[5 f l#:P5hcz; (x~?W|- Bbb?o__?ϟ(t}L/T�aE-1h/PB8H 2;K rؤtX'EG.pEPLA=BnCdgC%r<:!r/+M;6$lP+$w4y> 5&P( ΀13mBܳ= ! ? iR\.LKtaLpЋ*) Chg,5]Pj*]Ψ@ #_3~ @9E;OALdQ"%9[%k*2"Q<tI*�:MУv\\�M?:,an ň^ŸWଯXj0.q^ 8w&$hCKxۆz #V-sxhÏ;]۰V\Y- z`vi/ 8j+�`2NX@z5<?@hrUet> /@N1 `m"SB%αDEzn =M}|J^^.~V:`#Ԙ"yxh rM` a.Rw6=$H{#jg:jlzL *Nzp2?stVZke�"Qv@S![Kf S \$09ss=fA O3Op\Bdq[/ڦ^W h:&֊$x@qVmʑ^t qNQ#bZcng&>LBW}xSقI'Wh*YL_5Jڕ&qe?VЃφ M+E+|IdB%Z:QN,&l cPqW.XݥA( ozz ﶴ1p_}ց^䂃1H}$."'SH%gFg<)a*K !]83I(𪁀si#]jP|F_"(K^R~ O?rw)^?{c`<o_-U,J?v�q}q}Zp<f\p& 9 YWbx�`(-\TޛïC�2:s[ ̒4LSeD^5R1&HV{P+ iiVpwҲ@۹�f,AQ�5ejCIw.GEJ8p`=u78Toa y+c$֤�* tM*F8ɲ>:x!VDo,N x6^EWbhi7_:_D؀)@* iEmd֖ף ކ�p+;K2;d]K6L-.^KF)u%"UO &ˊp^/ %3|C1VA5'%!$QTKLmE"߬&  6j: \Wl4pH ByLs'<:9VגV^q`mΉj) B)aQkMl�vGfP$琨m^9>6 oO3Z8ЛǗLo r!em,Ϋ@+l^o-V;8n1N1Z(yĐ2O�grLTg;3r?uX$^+R#ANCcA)vz6,̩wҰ ._&83mGTHo)6W߯f+BLWf*;֫MZ6z,v;5 0"SogV4f4 'dzKa`oJ\b>pa(o0wp`,@);#<`L1t +Mg Bi_fFurJ7ИYAD&ٵٱOaܱ"w1 z`?/I{6q2+++r"s))\?e_y {'{k4;oߚ!,q==bU⠪v?etD|ݩkH34TK#MZ7Q"t+)tt 1 +Yc^CA2'YD qjT2pҶy}=@ v9NBhgYڠߎRk 8:A (nM^w:]CR8beմ-FoQ΁RA /e\GJjL-k1k<FdfI#F7=1es4{jiHS[>h?馑!@`1n/eANFSz11b!BХ~,|ۺ`.Po:Nn!tqCZ%-4*.K}>D$KBb{DP5G>Lh4!>ԥrRQdiV.wDFh~1H%mУx2A>rUB~ ^UA硁P`:?6�;"OXi$ʕsH:X=͛u!#"O^9aX?ӣzY�liFL+硱 Y u=bEY|$,YS0 uրPKKO,RzF?i^b1|Ӵu]:|d=0ڊcM?&Kꂒ^PfDLÛ N2f#%iQ&}%xrPJM}Zd<z*,9&(| wb Ď]%#83p"Obf ȋit Qu*K�ј1~n~OLvL+||CU^(ഗ :?~Qdĸ)"Hm̎r% Mim^i *#ehQFGi)>kPK)8{oyIņ2 HL"'rۆD}9 <gsTG k<xD3)k#ӟVx$S!Fk*YS,X=6RePP#}}>P!ʝFxZotZAȒ\"46.:z>tM}jTh^�s"}0u,rXi=Y7:F3u;F ? EFRg)D+jy*OÕ  h˧} M<=Hv>$ډ*XM=gs:2Cu3c<r!۟%⏄:9oB_2!N C_F,,MS0c#ZkZGmԤPZ#84q@+u ȡ?R"<Aⳕ8�2.BE|4i4O4[J,? hhϳf+#t>>+YPr;:qv~ރ0 t2Iqa{� Mge RʉB9=;r5/ 4fv;:G+Quʶb!T\_goFOX.YkCx!aͪ<'| C!&kY!Hm'CNpݝR%?br3މ9;PZ ط\Q;Ǥ|\-[zSmS=<E]'7G>OFƓmv#)3D3rsGɋS^/x;,ɑN aQ/VS6|io6UsQPtu&(E8u YP#(8g=-mh@qWoCFĄ`�wXn?wЦ;I?Rj@TBDz RqQ-n 3\ anGȞVzPNMzWGǠ_l&!J;q ZM(LPH&ɑ>루�-R}C%l]`e@c"$ %Eg6[LAd:"h#fm?Gvr?M0C~68ʊ{M\ϖ#3ܫ>J9@.bμd99dIb=rlAy r)wʚVJ%eMP~FlGs+R<-YGEsr?ggM*{ybo_)5qt09} m7`0WNqJ/:4e4h (c bPQ腢Ʒ+zUWbPH~8T1}_}!9g<t}hG7dl(0ݯ\e0b41BCsys$ hӎv}"b'~Kh`v߄u�QJ4*J'H\!9a,Bg -LT\Ǫ`Z#]C NMF$dSy2 џi}u'}vrL}_6NFfM2MHZ)w%؅iYJ)4_G |F.c8xKMmܑ,e 9@}#_,%}"?' (:y{ӿ ז%+.6 ,؝S8EX;uUܿ[{d -\{ٟDBH]ѹ9pY�pvo I@&ctSU ԧmG)y!ԉ<Ki$#4?BoG*"?|*%'BXF~E 5o6/nd:"ƴ52ZjPi04אje;wF}*ba"MN3 AS']R?m$ّP^&%=D'6u]9tx~Ĥ7|~5:K[X4E/CA~?=̉~om-ktý.{mT^w2lGg6gL)Nnc4myKe4063>ڡT;&Uʝ%(ӳJ(_=bo\-IrC~LtKqXezfpGY2jgl+x!oI?QY.#RR&I4mF Cv'}[[?FA K?oUɳeCJ]z>T_N$uiW`cz6%X|KAO訑gZ}AԏodHCjN2p y&AU Syfm�Aѭ;W7/ތqb͕D ނ=3|;r.AFn]o_g#ar{yŏ~C*g0-z*hNp4  mj8C+2Xb ^>�>AYcK"+ 5%eO?.r{P+lAv!OwF x8V)܀i5-wV7=Z_Y{2)νcZv!+wutAcЎ7h\Iޱ|Sߨg |T'ZH4 R{AF=UMQӣ܅F|h}sԖܡLUYR [}v{)-H"K@Q<\"4 @vu󔖂ݙ)[@<60itO0qux:SjsohκGڰTʾJR;{hNh,30>4€opŷn�}A8_FDDcŽ{j!pBa AҮ$@o Doά̑V@pZ$Ҽ '֗ԍq(s&ھ|j;cC>)S%Wb#+/K'!>'ZT)KDTJl;s[bf{EX $ځbSĄ*ɫo_u{Ն5|{vX<D1;o:Ly1MD 6 uO\CGYnwSbPiq;(ݟAN[8CW-DEV3 s\;m*/sS%C5ުy֮MoZ6^iKOLW i-:"Y9gkz_FqF"cK|!錆 G&hQ@'{ls{Q[k!i-$H8gՃE/VQfֱ~kmQ*^1ش:4;?d Wނ;q;J KvVl!~Ojt!-O|^gvxsbdB<u< `ڵ/,8&gRF> % Qچl2F{ SৱBILo.((nD4sdeM}Rԟhk2GljIRwWxY|ʭe(^YCg/e67>>߆9aQY*?J;ꍌDSzs⡞VF<IH ;p=߶%8Ⱦ#p }O1b TiI*f靊/s<ݡsۇ*yb=UO_g$>_ڈӻ.YXms;گ#T6G�LSwN?<r;@i{0cP ir[W?{H3;]\- l? }/0i{A\=ַ|BEqApsY}sgi"b9?$%-N>@yIB<1_N}Lb[gb90#냮�L%&~]%IJR5Ydu,~ʲQrD2I =Γp8w@8R&)GyP4By-M鎅*) N9+W' V?_6/PogԾ%)A%I:j\]f;>W#Z^'yނ+i�}&t>z[II]$ ]O.Fczo9$$]%:59}Kx7#GH3ht9;Pc}ƚt7;2Wp<!aoǰUa̹-s@ϭw &om\0[33_ۧ {Y{`AFT/7A6-N"#,Gǵyq,8b3 z1ayi/b۾8LO5jm~80pXSaеkzank|^V\bX5xxx!cq)u:v^|T>/3^%8c5<VI<ŅaĹᱺX ZӞxX%aF :ˆ=Wrː`f ]b{%xn\sAO25- o[𖽼e-y</oyx-o'˚{[򖇷|-_x_1ֱ:^:[[[[Gx$c~Yso#u̽u,uuΗΘל}GJPÈbG Èc #0fz+~)14W7_|}-,ǞW{ ]2]څYe-xCg3SBVkC5CvyK.U7Y=t69.=1v9)k/Y=ecYs hws=nVY?d-L{E+ ~w㗬,̹WfMbdνW彺x7OY?~ɚX|ߟh\;e==ڹZ졳̹ػ9�|7OY?~ɚœ{Os wZ&kf2{<e-%kG`z, S3].1~tX̑u\.7KZ\!K4x-?@XeM! .*Ks?ͱd5t)Ks?w=8O7KUY{`r5t)Ks?C`]|t5'XI4X58Pi2]:)Ks=+tHɗg8{E@{u4.kqyS@KS'/|/%/0yK�@yyFu! ts ȗ�E|s)^.$_#/ =NWt V νD:TGLnq�:u! {O@/ g]{/|/C/ N7| _F/87^ "$]@^+:{"y#MZ\{%<{"!n:]I4X58Pi2]/48ɿHɗ@e{%p}/ \ttY˛{O/e^^"_s `El,�ӑ&e-.o=D(Q`|zyXC P<:]I4X583¯CutY˛{O(eA/suE\( Q\kE\,FYp\ke5ʂkq\k( QkTq\.F]p*QkTqu5jp*Qkר Q5jp*Q\.F Q5jpu5F Q5kר5F Q\.Fר5F]p5F}&eYEҮPo\v>di\\é].YA<pZtXni7L<sm·, p˰~URM 5 Uy5Us?׈W%�XkpYkjj Li1aE~ʡ3F;,|5BU 350y}̴e"Ks?H�]v>dip0U>aZtXkTEk@|.K;48 tz 5�UY/5Uȸs?''Nvk"?dts ''Na8>qxϽ'\8Ykf-.Oͽw9pr}d/r<c.NnO1^dS5:_.7kqy:l>~k퉓u^@cNnO1^ds ''NvYas=!nν'ܞ8Y 4n hgLc҉NnϘ״Z\{/ tn 3&Pn3&1^ds ]gL^kf-.Oͽ xn{Jn_0=cEN<0y{u]nt{J/z\oϘ xoϘxϽ'$ߞ1yi<6^& gL^ o gLc҉oϘ״Z\{/A5h jD 3&(QhA3&1^ds5gL^kf-.OͽPh"{A/ڂ^/t5ڂk4q\-F \hm5F[p&тkh5ڂkM\-Fh 5Zp-F[p\khm5װװ\5l5L\\5,-װװ&a a&a5l5,-0q [p װ0q a a5l5,k؂k-kXp [p a a5L\\5l5L\Âk؂kXp [p a&a a\\Âk؂kXp װ0q [p װ\\Âk-k؂kװװ\5l5L\\5,-װװ&a avUkXp [p S w5L\\nu*]p a a*Ž.k؂kװװ\5l5L\\5,-װװ&a a&a5l5,-0q [p װ0q a a5l5,k؂k-kXp [p a a5L\\5l5L\Âk؂kXp [p a&a a\\Âk؂kXp װ0q [p װ\\Âk-k؂k\5|5\\\5</. .5|5</pq _p pq  5|5<kk/kxp _p  5\\\5|5\\Ãkkxp _p . \\Ãkkxp pq _p \\Ãk/kkpPxװ(4XeMY2}~=Y<eͯ:*HmyI( p \�>Pbp�"o:<Q7w"})$wl~n:;ڹ)Dz@ﮄ}?>PJ`wv}?>"@�讜|?>PB&war,|?>t"ழnN}t"X+ٮnN} 1dBX+d $J�..5qeʏkxc>Ȉkq#0'd+?�ynH3����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_data/test-rtt-fair.flent.gz����������������������������������������������0000664�0000000�0000000�00001614722�14670056262�0023040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ubatch-rtt-fair-2015-07-12T201155-multi-100Mbit-fq_codel-cubic-01.flent�k^qޟb_ЍF7i%QbzX$"irw?)^W’3 %=kc�~hϮn}w޷^޻u_/_~v˗_<pw~h}~}v缦6h7oݿ_!z_?~{֯>ywߛ~7W7?<~/Z<Ae۸?F=x|ŋsOo_Gk7~7O^x?z=݋5JoݦyFc_}O_g~Zu~۟>|o?<yB_)y7KGO|n*싇?qG/į?`@w:wᣇO>?p&/NW'|G|ޓ˛E}{v%o>xoɟ>zW?ӗoO-[[/||w_zq/+W/m^W Wj\]~+z^]uO\}ѕx˛Wk4r/ݷϟ>{vUWO>~ݣ/|?ޙ{Ow_g}|2z>M4>ߴ Rӟ[nww~׿ե^w_;坯˗wJ坾~&pѫm㺋^jޛg7wG�^yGnٻ|C8S:ץAݿΝ~{o~{o/Ooo/^ s˿˟.^u{፶۷G>FnQmvl�{i e0}"jq|?yOg=~׌uOܾݓb)|ob_<z?~9oоÃ!u~x3/y;?,__}SQ|n~'wzwۯ~t_2wx?"8#ODQ#hGyfP?_xi2,7^۷>OףdyXBC!v0qF?2j܉Tc#EA4 +OZū9_={/o^LL8dSy?<*&}?ӋW_ѓ>{"O?ڳßׯ]?n轰}\Ћ;WaDuպTثKmyބ>>r(/a{?^ă6^m(mWw_zu5n_*h}[^K%o8~zUWxC=~V3' 70'7t7~ eYMO~wZ0~w}[y]K??iMi˯7'=ンx?;ꦎxw\wkޭocyPW>->wûlab?ş:,F,ȇKߋXKq2C1^tu1.~Mǯyr΃q3#^2ZAx9X;^hml|ԝ u`k4w;>wYnx5hl{լJ 7훟GG|X{;7ztwN")eѫ哧nOѓ_'x{ߜ>w_7O<ͽ=!>dx/nK,~ҁ}g߿{petf<*l_W e_<x.ϊ~u٧~=#=~]>ںVAKx?6KnoχQ뾖>~Zgs-9Iy!~^}?tCu(~3jk<S]GDOD;=Pnnߧ>'>^<P}B״c&sM3 dwSm̺g5aRQ >>ٚs70mu] R?JVxܟ+A#] ><|eA`ouq ZO◁|u=׏X5K> 9?̏[?kZ%?.&[k"CͿPDzmjs/za+/0z6kJoHHg7VK^]$JSyywٻл?y&ѮFØ]}ٳY"'t7ӇT㦽eN.n"ݍ?nuϺk/mmLG?ogo|GL5_>2 u q^g3/M ̟~`|aev?_Š<Ƿ޾vbr�chV+7 e9 ?ֺwO>15у;sC;~~7TII݋~n_zgKs~՗z]/}[nï1vi7Mg>ߌPyջ]'fggW&zخRkmw<{e}w~E�wB5o!J|?~PU}Ƽ&9EʽE83_{/~;?H/ u&,򈜨/.x7YoV{Uwoﯞ|㏢O-9lD;tQp>"#r4HŔ"Rieۦ;,zzjM߸)|͝>*迾|LiӚ"osN/.?{~{֯|yxVa[w~}g&o`~[?{^1Af7Bn陵?b5(w= [TMcUi6A?v|ȶOY˞?͞=̃:}nlaٟF/#qO؎_4r4{|adn>u'=Le{pek֒> \r3VNfnv=pj>@3`cFv]Q6kYUĎJ}ٳ-46GA#l򁚧OzۯsB8npٽJ}._  tn j/tfqP!|kMݛvEg_6v{@>x~­[ 5yG3'N{.>G λcIBaJ)Bg6Pf@ icv!|exl.< | `UGpLmԒYzp>u<*yB8Q7=s @$}Z/Fmq*QmUOfs6&g(:Oƿk|l$6q_^n'jӌ\*2! *pcn.^>GPo'h޼bmåA8υCiv\* ( 5*ewi>jm;z {k79{K*Ų |:mp ۝:^jNmNW9%YO(=5TwEns/@ߧڤmp8*K {J6D/I_>+P!܄Bx<ݭhp>k=Ѐt@BbAs #NYR)rZK |-=fUiַjrݗ7PmA8-Nv@*uK'ڀgAτj^Yb5>Oڄl֎W>M |j5I/ "W7jB] ?d.TwH:gX1 }$!Q t{CjWiMH'5�7i җuۘzSHh1yK%j3nI ])dEd߼tY7gמ}@ǣMy (Ϋc HUkd d|0ڑQti- U⯎"kxCԋ!(V_eZxH)rpHGN˶ڑTpyJ"k!(|dȐ>joF$9۲a Ef';2H]|H-vXCH9}x[K+jpoP\px{E#َgG B^ftd9}5Fݖbt #Kפ- H2rz!+YF4Zf� } aooft$9H]*62.T#ruGMիӐ$-T$9}v7:r͡wv\d#8>]X)!Jq}~A ?#%w27r Ǯܑqt&j/GxJ J32"(vɧs{F֑ӽXIjiFڑә/] ]ZV 5dhB�7<ER4#3S"V:r.H:5 }@:K> e#ޑ~NB#'Ӊ$ 9]ck/vHA W&騌zHArGxŎ$ҳ# 24$LOb9~<$}1'["9]fGJ% ]ZztPHkmy�HN m"!,l INZ%@JU(ٽ^9I<[KHJr>3GV}ߒ�$,HLrJRL.H45,HMr =!7r ftY'$1X-=;j^eX>LPrW3)tYȬ uT&$)Ő֙k)9},mҔA %6=4t՞J}HSPGGv CHSZq0Xh:+ttl_4v41u%ٟiJN<ia|o Kf@FR2@RDC@ӇQT"Cv%#.6gpA-ի~h ҇(LHSr:w~SOeޫD3yJ Zr$4"Q'ݨ©e-g枕j;iT ­Iڑot(,%SKuiJNMbGT 4RHܑڇu#Oԇ~OqUv)9=%[X =%쨩 H'V*vp$Z0HRrx;!I[OSJ7 =&iKJώ$? 4tHw݇4%O=ʺ@ӗש$o WlmOƐ/UR 4%XQzv)9[v<%a3] )9=0%5RS_oieyJN`Ǧ{ez OIcpvCF<I[ ҍf 2d#QɚUIzZ~D%OZ1CpW).,lTDFobk)9"cWnSraa;ŜLZ/H7<MF:D03t╜Pt2SgXbSr^29] tiJ#O"QOV6,rex"Q3pJN_3;Q2 =ˮ0(=:j/u}| Q4JD%ϹhRHTrlD%LvTਥFzmV ,L˫ Srn}R<%/Fc,H7kCU66hN5rnWw)9}JcD$9\TpZtTWd"nLTH)9V? ?zK^ev;]n!}:jWec,%Ӓ:ҳ%zVvrnK3bT訥U2SΐNڳ$ҧaERG} -rju8DR :i ThJA*Zw_@R iT@Rm{ ),D>CZ}l$Cv�RͲ4;0;j#%/jm ܹUy }ڏit_9ҽ)eAM5y,K4ҹe'+-uL6z^9!YRvEָGDC!}K>4 ¹eiH*ON ¥y﫻KDҵKP3`J}�{!&K:MHdDgKŎکsK>ۧވ ҹSvҁqtq+`5OWOQC޳,!1C:_0c?{gtz?'1jHrX#+,Tt%\ <OJV9/BCz$%K4WD- m@Ly <4S* ᑖĽS =TRc=zrr fJAd(K}w3G)著lEi:& E)葖5t&= GV5k@:~+pP}sKLYz =Xۓ11Hq)鑖oȭ:+,GQKHKfyK-u^IDO!Y;kBpv@j.H\}jiͲ4 ^ #Ա y̙m.[:9xQS,\ }4~B*C:Vi a]=HMUT#QoJT!}$~?1A:gHpTZ*XU,Lp$=K)V2!٥aHgYWSMHG]d*YG0+]Ɏ2ͲT0 ceI-s$}5  F!]ĐPSR[x]s#kߕ΍!#ov#ne)i.K{TAC+,%AOi&`'Ht4%ztaRSBR %yJNg! *#CDV^F5zd$(碖/i1F9j[UiJHOrX7NZOrt-2.t]*am${'WJfBʒjmVਡzI#CiD,D\ g!J7FؠtkÎg%=İ%Sҳ3{ОmU;r6ު@,S$)yћ5^gd)HuzE҈\G= J!$F:ѮJDӭ,jCwν~,%S] >u'}4%[Hs'@'iJ#cT)Hv]SUꁑ4"uHS`RJ74%֫J>iJ#+Y)HS!㭷Y*uP==;cT "D騝]FEAӍ>4%{HSr:g*oiJNX:!}Qc8t#ͮOHT)GJzXePEE䎔ZO9<%\Gs2(r%)D{l8iJN w.FӧwЉHT uj7#I:ܽ+F){vٚf(Q9jٹʈ%<G=3qJώ鼎A;Y, )}N4Qrx]ڑ5U%}8j/UOHQr1e5AzqZR(UMa%<GY,)JN',Gΐ>efY* Kf&BVd(9DJ/TI[U%X'%)JZrk"E"Qlzt[mJy(;2+ttZZzv ( kU*#A{6蠩rIzUi٩1H[i{e"I#Qf@ 8ʞ T<G٥Rztt v%OeN{8ZzttSIRgW9J<j?>_Sg"ImzHRHstRsԳrGGѓ쨩u7Jb)=;A:XYJN]PY Rrz\xjd-BN iJV5g5!Md%Az&8dAVm)!I#ՑIJ(SJtrLܴ9tm Y RDd{Ae"I#ol]epi!UM(9\DJ.)J4MڳH7lֱ%TG-DgHm; Cӵw['訥zK إ%IDƑo %K"JDӵg+y2n@;H(9}DFM%\G-KZ3Ǐ:&r8ďdl4O(E}^(9|,]!l ]L˔bH(9]ʖ*U9Jьf볥g>3yG}/DҌlGt?E5̳+!G)OR/HD)JgJ'% e7W=(9\I2wG BzceHEý=qs"CŶPrEjPrr+w'R"R`*)JNx^ ̼oM(9\x&%G+}D~Rg]'w"?5Q K Orz{&fd9zZjHOrN/>�IOJÖ"$(9}L1vgOr8OIN'9]<vݶp&ғ3p_齐S&K134CvҌG-I-EZ/m줘�n-㌦ŮIҗң…£ TQC+.c܍IavR,Ar9.cܾZO4cΧR'Y[* hܱF\I)8[0)t^3ZҳKܒrGvuIr b)Jc~n)AvDڶ,Nq^ |B_"HM= 3I"gt9.b= 2.. 2aWFd&łj⁔Z)2>"?;A:o{͹ 1I"Qr+yIz~yIm#S7+�>l8S Kr:t#J ]3Vt$Cf W'喺0d&9}D­IqD 1V'9J$3IF?>UY$&9eIKϮ>gix+�2' RnMDHMouerF"5VJ }qg* Rڢ]iK$ߨ%ɖ$ߨeICjөdDK%>;Ƃ$g_&9$1]iX tщ!H> /Ih-+J$ χ=ޕyI+:RU QK�򒜾'G-* /6|yIKɺoi"$S8U]Kr̒yUJAZ×Oǎkm$9+)[YIkD2t$%9"N +铺6&FۮJrQ{ -iuٶӎҒN4O&HK&drFOEi7ź +ZҒV6j=Rۑ"QO^)vɣd yIN_Lx[rѣ 5ƜDaKU۩IN'Nϗ3bIN_XKaHMrOkZj$7\R?̤ɍ| :I9=6ZIN_3;RqINn^U#qNy*$OvMArԾ?`#9~[BrҊF-�*$/$HNrѶS P0 INq)-&yʾtxBrҊ^p%(l!9iŘ> ~rVd.Dž$Fwޯ #3]ٻZMrO1H_s`!7鶲,&y`LUZ*RNk&iң{x%:CZz"?Brm3 IɍZ!Yf򻐠tW.$(9})%Kw!?ᦔ%4&'4ٶNk7Bzç!}JtR%ZX J>j-Q6J% Ա.$(9ݧ1 }2)V $(9݇$?feu!CIuteVt\'P;iB×/d(9G,?[B"CI_jT ٻ< Jɍ8#AI#=}pfT]OHnD]3-'9=d۶.-A*5򓜮-K[e˟-[.uOrhbc6$sA^B~%n)- A)Jԅ%Fֶ˽trᑠPJIҵgw3z(r~dd}HҨ[]=nݞ IdT ҵ3WIJc>C-sVHRr:1dXH 7+l\ERo &@oj\Rr8i}{BeH2v:4Q+$Sjs{|!I"QzU3fJ]GӅzvλ2"KJt"BR'SJҔ>{%t$uE[HSrv+Ҕ0jJ iJm};Ҕ,LHSHrԓ+ %۳)9]74i{yJNXQiJglһ#M«'b[ ҕWR*)2H M=C٣$1t%"@%΍t=;[UNy"1$*9=ґH JN9MU$*g2gVK+Trz$$OTo RwHdQUHXytT%KJHTXYF^-6K![!)UR9HR *lׂR)\%Q*.v#RЇw�Uj;΢Yޭҳ{Z Djݣ:"#Y :#>Vz]m$N.XT# u,?i V. ҇On6"yپ \"/utr쨥r$%*}\UǂtVVPpUwS)fdBS)>T%+鬚lJ#Ki#)Y۾F 5TdxX*MhH }X?pB.g,+BHdJKj.UFMK8\yv>#=ڞGtruBetzi*3eJ}dP;L,Ne1Xsӟ|mSVH_mHl^@T'jvW&kaҩ%Kӥ9 |>&M4Ҕ&CE`Rvᄶ$(zzCGe�Rg-9_PtoFnnN:E)RjXہpUJALRW_6J*0nwVWAMuK5!] =;Jž <ґ}f5Fvtet 1l[ЅZ*ENgcC: }@ퟍEJcŐnCѧ4v,TO@:QK6ij }zO)E#ҔJ ݈,9$U yKֶo4Tv.%$ъkNhe)^Lҍ43p(jr'�vTUtf'!uA xCT )^S*tc4*P[]ﯶYpb0Oݣ8Abj Ɖ]Z 3L_%4҉턡 }ޏҲ)t{ m,)tP3~6vϣXN\6 }N+ל# :CMXTChב#VL%&\*ӣ0ڶ6 IJN_(o4d)9ݤ'g%K5YJ_Gšm7̐t6wSCçp?NRHRrNWz(9DjA-u;l+StdfJfA6iAӗ%YJm VKJo9J}!G鴆xÐ8B'H_amWw$)9ܼw?*${l2$)9J., LHRr\Ƅ,%[?-KMyJƻdTgtґO%NoRrRNBd)9to6d)y;뺒 ڕ4',%JJ>.HUR[Bӗm,%[m$%ݺǯm!I}@6EdHQrr䥖%qҒcJi>IJN{ IJNr/Uˀ0$)hcnD#9m%s$jފ0$)9]"nWHd)9]+) YJ=4f>!}4J^!K8IRjKRrx,@R5 ]˄R2MV#K}Pǐtnl iJNfɱ2!ҔxvV=IFU)9}q|!M)+J<%KxsKSrҋR <M(y%Q!Ok;?T2Srzm K^lkِt>v_b ;zr^1F$%󈼐 I+cQrlɽTQ372d"&CX'2Cć %{j?_B5m_`PFlHPrdg4Z#?Ld.=plj1lN52ΡdHNr`_Nr:SvX g9*$k*U wCzR,Lzϐ>8 {K%#qڧ/HIցINWN`֞5TzOS+Ϝ^fT{–a:{6Jt^c9~gHcY KxxU/鯖wc8:g&t4 cL%Ǐ3AyZfti~RDUz Q_,rݜp?~j ijwjIWH'b'+kbDGM딬]鑱!:5|HR6w}HǮ ^u=)E HZՓD9RFX+zx^~%";HJ O;a #RDyibDz3.9^&a}mB5YҗB;Ь͖*җ>3KgŲY/JEB=.85Y4;WVHarPIVW095(6GEW2eRw<&ǫZ'zR˄~B0jv9^ -=o^/H'`+īQgF'l&w4b3qD],83dŲ6ދe3!Z;Yv񑪀NjrOyj=Қ$7՞Zo<X~B^dT6HlrlR0ח~&ǛO8Dt&z2f=Hnr<,mLArg,ZE gəZ&{4Kf&'&Hpr.ud89~܅d]kOOo=[KUL9(ܻ$ŲO]XKHtroc?L@W>Z:9FXjo5yGKo==Oc$ `"ssO? ~ :: gӎSֶxr}惼'.Bd>9>H'ګUuI*P'/t D=Mj#9)e;ږ2@ N/|uaw@#X~E'dWL<(/`Z#:b"'Ĭ#Ľmjy!}5=v$BM>xtHe7S9Yiם9YY_5xbɼZw8~AboGۑxcǻVÃ6+ڧmu)\*#gv,;O\-N&%ZAGΎT(jgc{ϧ#zԥ!sl ׌{0+:r%ӎ'͵GZrji #Be*r?ZNG23FsG2MرȆErP'D(5ZdC9~zF:}AɖKttmdCY*8l(i!+ȆrwxRh5ZfKtt̒]`=jre)9J (f["\U fPA¾Б%߬fciʉ|(:pߑ҅Ro|(/gr:oq%%i(Ǔ+/?ufwמ~AҙvW7]u0AF%]:2OS%z܂T!!J"$˦F$DI-Ăh"^FW{ƙ3g QK¢oՑN: >9;L$DV4RW(2ZDFirxlȈ ^aGF{:Z͗̚pi KPNT2Ehȇ QvV)A>GR >ea!]ZQH&8imUP!2hBg>WΎҹL9)~ȅr4MJ xm*KA.T\l6Br{%s@^G.SvPiB.SK!.ȅrlPQi}KȄrP x~cQ!ש=BdB9^ECNGMֿyd&^?1z&Pg'zD(LZD(n *z3:Q8 cdͻX8yH^92VڗCԐ0P1J;=xYJ$BelԿv jń;;9{ ? ^F;  )yA٥ j9xv|PkO//^]/HWyxFhHzܝI uwҠܳ�.; 3'ҠLm;iPbϖ$J΄xI .iP^Yc%xeLkgK@lnyP\Rȃr̞\WLxZor"!~LNN>yP)R<(˔҂@"u̠+5+dBZ.ɪAzL{d6x+$B9^"_52Cm4A&T,5;( PBYROgIɩZxyȄrdWQ]1% C4eJL({ډI!2/'i jfdB9^WO|҆@&T,?. 2?< (Y)@,>3 x]IP7Z$Hjn?#g A9>$R߯HҘȂRdGBb]CIV+=AjsHr<HIP𵝙! Eŧ-66;4J# C,! +$A9[Vr# 9H&k^9Hr~R:OgKO%KA9^S ^mcSkOZH2'< -\PGS䎴ں4YA~Q'al_gxxj#"k Jٽ,QiPN6Ȃy'͒# V2*nȂr̉!~8'x�2dA\ljoA9b{DBg%:'g,kyP&'e: 3Hr<5~:D(Ͼ~@ɳHr}@,erjǻ׵PRi{4A}24(Am? @m4̮ci !|H=! ";Y !~l4,Zy]^prcg'ɹ=Iيw)!A>~zl"TrP^w H[iȟw|OqiI@ "'NodU6;.duxA}Bgz#x$ >癝7uowA<㝘R@A,9v)Gd v? h?ON C:? s6R3#}^Ԟ~A|K%Qf9 xҒ;+tj>gzVRe&oS$g!BmV{OL4!~.@) ބx֝j+r9IdO"ǛSV{J;/8}Et4%d5ub`:fɁRaxI6@Z>ʞAxA.)f} "_ g\t!~m>aZ�4uq<T?I]#[{@sghPA7%OZ_w$?pTID,O,I *KWy?`AT3Ej_e` C<YO쭆?g)kV ~%JJ{wFK^2\A<LZUY ⧭$XOX◇ҵ){1ӣFˑ`-Y!C$&K뙗P knIYHeBxzxnkȲfidI;k6󠑢F뵪I '4k!:!>} T >0IQ*0UG5>AYx OpuWybPK5O@F?$k94b#͚_E&i։ CM626BtX:G[tD#;]3 $c6ۿ1'F#p)PNщ #:,Icj%Zko\a@7ٶHrPȀr#Qx藑y_H`@9~}9^)PgT#Bga@9^}:w!#*,Nz@9= (sm #߿302<ddd@`s&FRȯo d@9^8ee/ɯ6Of0R7c@Zs]r)Po->C #H& <#**դ,d@9~yoV-tmԊ~B̙F/u HrΕeaKfWdWK"^!~LKn*m#1Wu}Cxt.^zzdA9^e'-9V,J?ȂrNTݭ,(dz,'ċH:4dA9^e%zʔ,?ډތ$(s6BԈ>F # jf!X5kx+$(GvdI`Rȁr.ooe$AEVTp֪BXD,(JmU! "Y'x~>uFTDΚLdA9~ PYPX;Q1xZVKk'6iP"jA<&ͪVH,ۗ iPnɉZoWGHr0N" lO3.vL<ZmiP1[7ID+FR ,(Z,(NjYr/Jm,(G5޿E9ډ/,(S'Z?cEjO?!~UϐtkYZѠ&##vRȂr<,D" 3fm"6#k?#,KW@Ezǰ(SJHg\b|ȁrdr"ZvDWH.Nl! DE_PGx,KݟMA9Fok٘ȃr"~B|dX&o2er4 *B< oPkdzҺD&.Ag PWT(b-D4YHr<9xBXh'R?#щT(/In UZHk?D.(WO&,Np x#Ire'^2# ).AKPq *o{O$C9 [V :,A'B<qz%<* ȆrLA:dC\xrn"+9[< 3V6jTHry7'x]hCAN$C9&e=$C9~Nn PN_'/_6ȅrMI: Pf%Y UHr<,zɫHr,mHrYPZHr'^-jvݥg7jמ^! q2oԣ!e'dJ˻PofWPu>ZSbg!~f9k Kmj"y"-D2שH O$C9V? sYi"=&Rn+[ R5f* ideta"sirޯX6lfM[>uP[m-P'!ڛ5H:)U)D"㗦ywJ1oqb$B sǭԟ!uhHr['Ҡ D:,([߿u" ʃnL,(ǓlLmDQkG㗑'kȂr֖u[,l-pE#Ɇȉg>P'--" >O_-jZO_| W$YK}1/m}]f"ڨ?< ^TzȄrgؚȄr<{L(Kd#V RȄ\3WlMdB9~]T{ ܲyCċIVJ,H[Kxjc&ӛ̵?M tWgʆ!>ώ{4'kl>\Xň܋gcP}evd ~'Z+Kxc.G xER6{A.T ,%ijeCσ3-gdL(5ZB9^GB RbnGu9Hr+I\J Hr<G;>Q2T x$)y"*N^ >h4ٿoHxD A"ㅒՄR4(+ydo ҠbŚ8.Hr ɖk/V!i%l); GPiPHr׷ Ҡb  A}<R4(3iP'B{A9^یz DB"3 +(AJk PW,|"*vؒ+{jL(Ǐ~S 2ϳ'dj22iNdB9^/cdB$-T }Lv!kesj*HX^m_+HDùBWHqEڟr",=Y) />/iP׸%DE&Tlhc)P9Hr:d ^dK xMR%R‰쎈R?,!Z+t2-T xY]PCX :\': $9NX|ڟ!VvH hYfKrB9~C7UHr<_6{Bg_/,Ȇr*AֿZ)Y/8^ ҎO+AhU9Hr&wIz4CkDqPNI Rt(dzd>^ B t1xb'kd]NdCE,tD\?1"Ȇr<[v{i'fȆrǮNli *:~<_5*dC9ޫMLT8pP X<-k!o>:6j+|2D_N^z(6$ʥP_MN PNu}b!ޱZ2OͲ5() `w_\Hr^݅T([ɫXzz˪ )'ެBT+ P_d!NvD(k{,#�[vB#1 P_#=%xO P>Gje Fמ^!~yTB"׈KA9݆7 z|6GvV xjǫ,%q`!J#gS2{ !~#^2o-BLS6P'u'qvYnHkIZHr6.dBD5ۿb!D]ZzHHtjw!J#cS˜}BH:ڤyPVGݿUg!dOTKl'X݌Rڠ<(G5޿j!J:n73a yP'N/L* ȃr|dY; kR(4(Gz/dA] iP,kO<jA򊳿}vɲF]G ^'ijf9ՎmZ4(MkҠ ]OhGfR,(P`_+OKmiP_ iP7$c~ɟ[Hov_]ȁr6ub*$(O,[# "aS2x˖)Jwj/@]:FpY+DR*fȁr(/(rnx_\ȁ2n@9"OoTȁrtM(M-ٷOeIRW(k-@94tp!d-ɼSАN %Ȁr{r&p (}o!ٗk'FA?9~:sf!>ߴ=n Љ=$?ٺX;!.?9,J?9~J oeb\ �x {kH2$Y> P$kvp#XȀr|8}tBT8:g^Ȁr|1|_H2$Ykȁ3VegR A]>k-R !>o}X,3s \#T`@]^JJ^ ~45spG%W@ ~p TdhGMvJַUkҹә$ %naO!^#lV;jE㕄Z ď~s49+KdʪZx!h9R%[1%XG1F2yxrA7$q)c&Czڬ6]=:XmcA|$XF!\ekoI&K Jʫj4: ָT4 > %̹)ClɌ4!dELLb0K N)) 8ȭV ~1ejb-轆?g)K=縣Tc&H kČlJX8W*ND@`ɒȖB^ϜxBpĔ 5j-(P.[&a=K%0ϳYPaEC 'WƔVPE(}#ڤ dk*GvfZן1TP&15!gT}|*YtlB~ɮvX- *Y ,][E ~O e& "E޵7jBBkXrTT6CúGzkeCIvbet1g)JBv^ҫ%˥d ď5/j+򪳟LA}iD~d+5!>W8CjK: >yv}V!޿>٠-PEvEzdCCɉɾ.gx*UM7j ^56jy޷F:zWs$NQ#[Ĥ#Z'5ZW[ GzcjovA<'gsk/z'za oɯg!*nmeT#ȉ~?C&㽳N !>}ǐ 5uo#XKxxܿkܐ V~THkѐx mlH: !`M8?ϹzuHbHr]TH Z,]>`NIpYJ2A9~vNM(><Vjcoqm5dA 71m n,(S|U"C/'+ݛ! ?7sfڐO5dA9=L! sP@W_,4(㥳4(-}d iPB>bHr>4(ǯs4A9_8J`4(og%ҠO@bHrlBiE㍲%ڌ iPekƥ9P&qXxC'’eԆ$(/ʄdIP,]-:CKK1Oר͂-W_<J,ҠF c?ADg(svT)H'' }$Y"^g3ͧbAЧs>Qo}8?C#gY1@9~]͐x̹\C 9PyF6Cwƴ`Hr!5=joVl?!4WVoJ3o‘%YB+Ȁr7RAϵ~ːx7kSe@9~ eMT/%-,ʞ!]&ؗ=R|W(@9%K[S{ ⧬Gmڀ(/Q;(Gyb)P$qhyg2@9ȶyjsQ=XįPrͮXA Hy"jC i'{@9~嚪=Bӳ 8o`!9_m4AI{bk@9=|6d@9=`Hr,9m E޼dAV49XZ_?U;aku^!~5}1("lKBJ3]d_9FrgZw<A{UWBbQgzj4ZױrS.~AÛmxx'7WvKo!u%A }FDw3M9~@=<Ad\9Y6Z0,e7/ύqt6(K˶7k%5 kOڬ5sxs?ZT9PN)PN8(ǬHp.޲'ďv soɤ G# {$K1b[)JYPYP>ܝ:}@tj)A5n8ΦxfFC?mwȁr:ǴKNT2TcdJtdCAMRΐxɗҋEeRZx$(&k'5Yc% &Ȃr@<,WDǬgZTHWe%:h0%;պdAgHr<'.N7CӅTZjRHr$ME! *4A- q%6 {?vHrrOZ$a~$(Ǐ(ݦtuA%r~({H%%R΄֥TȂr|$s<2KҠ/%ikHr,*hwbiP[xdA9'9}) ȂrLIVRGu}Bڬ7)ٙRBՁ/s%O_CeZr6AukSz:*@9~HϦ< 9Pg,E~"1~l(ǫp2#!*ClV{⇬m5@<fZ/bɭIPWI$b($AE`z;$(Ǐ*@9tY8 IP5DHњ9PN+K]{vt^ڎV |huYkFԾHr#;G%xQ}骜R+zbc@g ?2kYW4Lud@9^4M30K.g<v}*&"@:9"<BpQkZ=qy8(>"oG3zO-l~^L}wnM73܃B7{^n8L>zf3V.\F;mfkzoy{e-V;yU`ϧ_o߾jf@b1@OԚkz%o/٠8cp&7F`߲kL>+N Y==@/9᭏8󟀷U6d1 nI۽j'smߪ7Sy{I{'?9-OPYcbnyz]=<rlԤ%W󟀯~ { xċ=xx&Lj~91ɫbe1Z}>%{'&@_y|>Q|%|0 #reW8B)r9{xfϪۙV(E|pa1 tT7:cGbwgq1 } C/Kj (Eo֛e{trɾPz>TL:k=QB{Oo<Y&@4>1 ܿ?9Çr_ '(^3:HSo (mb>�Y5Z۟ fޫu[?j[SOop6t1 OU*&s\:xJ{ḱ>]oSj[59PۨdV(Џ^lPzz~` (tuaZPYI_o~,s?gV/[9P۶~lj޺(^_z{AzsZhL:Uq9ڛ23TdR.iLnvyPK\[Evnk>SmyPCzJ%-Sսj3 Smy}t3 %k_@fkrxv3 x{UU1 c<(+_m�嫝Z<(՞iPW󠀯t~?c">d$l&BEE5[:H0**i<&}iz3.hUfBOפbFuӠ�<-3 Uen5XfA_GyުL^,6Ӡz̃ jZ%UsUk$knLkѕKQCKAXk̃ޗ+a?/gNfjMR|*s=⵮yLx]Y={6j]f3 **In;4&]JjL:d4#>ٟL5}.ևiP#km6lAu'_,osfTVNBGL:ߗ7e|b̂JjH]l_bZӠEpXE2 x|נ2 tI2 *+\q eӳ6[AM%fL jI"fTVP^F+{xW[ P|eڶ̂7hYP#L]5n}Qmo|z3*+i]V-{Zl4K_3*+In[tt[m&@e4}Y6+~VfTm8۹+iѓ+~m|ohkP'rޖm\n?e4}VHӺ<}; Vy2)_z$f3)_Vy PY!M.e6*뒣'crze ([H̶̀f�zo8óF[nn&@e4aVޡ1)+vA)mbSZn7*fEGot'c џ #r!SI͔N!Suj-<de/\ AD?3[Op=ʤ~][?=B.T\>hQB.74=)#bGևP֢x|KZKY>=_gqY8JtVk"(YN`SRd\ۑz-K=1ZmkUG[[j/˽Wj7cV{YomfM"-ѧjR|m{Vlx3Z.=vXxkAgmo$;)|(ݮEşSPcMhhSj${JWlmfw.Y&vS&~]$)ۧQš𧻓ZivEVxr[ku }~a"joߖϚSY>5CPTnڐ&Q̪9~6:,D*U)3!TO` [FEO$(L-˝zOs^�HP헛Ws8B$gݓcvޤxٷ^M.ҏ\$oJOuoUKgmVR xqt \2Fzw?y:{E(>ܾ%jɚb'Oy4<ŗ-&gQkqMLbL{Oڬ[r uSr1d1J7C8|DtţERR{Oڬ+;')M%jN|oEHlO.| hϿ'?P"B x3]c%Lo$gM* ZmecFR<3C7ER\~,/^MY7@-Yw%R<rW8FrдNo@o-|[L(/VRfB;gPg>ZKP&BoJ}Pck єP۹iS9VRfB=<k/Ά>) E  _[ۄL(ɋK_*3XKQP[:ﵞPcl~UK&BosI=S)C/UD(30z?Lny0 x/'4Zt&Bñ̢Ԛ޸2 /r eԶ}<(1H{?̃0]Q%0 <(1<=GB?*}3IQ̄z̄UC+S/w/PWr^OPWroY){cmYs)=2']Or V{N2 xLkP sYe*Tv߹zPo=Y <]'ZBfB_~{1a&ԮI-3>4k]TWNf}וPcV,Vd6$=W |[WGWAeJze6oqu A qVl(9J U}Kjy'l(+0 xl(!߯UC齯1ƶo`*ӡ.{_ja:R{o;+@}:U U|7g2u 6]ue2uq&CrnXfC:e2Tvگ7o`2%<_L^zl(]{N!y;A1ҘnU,-�Pcx۬f 졶e2נӳFξd(k.PcxV0 xrEwJ={ZB m*BvNoP—#&wۣY {efCͶ,@f^d(KL.w;, e2T-] L-d(ߺݘ ֘ |\7ЌPh;C3&C]&Ҙ <&<Ż$ט |o/jc1 ]yьPcN:0&C�{0 8vvU6LaBkӘ >uַʘ <椗Qsl(\#{e- Ԝ])}Qh̆˄Ŭ)zt(#nJPE2Jh<@ߡ?4c2Z 9y]ژ ]Ζ2mL>?ߪ2&Cpj̅}Z5c.e+aИ P`G$jØUyP ջRã^vaOS|3Ay;Z5AQv1 ș1 xLտ .IP{f̂@2Deم[V?(1O̘d]YZp&A_yQ+�dj峔$(e$(|q^UL>, IPիn?c&A/kFm1&Aş%o)$(s:^ٰFfo_^ Jeqkoa)Pc~omoS?+.5&<L>f[)PhoUUe#/q ́A(Oe[g=̘|^ͼ<9P*@/%Zmcw&A-ϻ<|Κbe+0 V(˽{-֘<{˜]+{/6(\D`=Pmh١3 ##7(SnT/&@ad$5XfR||'o߈lL>u_slÿKL^#TxS~wkK Pز3 kyYOP,nF(^4.^bUTo.(>dzv|{x`1ZmL~^l_z&?o&Nrf?~'1~$zag)OX~\�ʙ<^mŻgv[]'zcpyѢ'ev~h[K'Yd 9ݯ;7,;w]f?{巵:Lf?/g߮y_-|R8OfՊp?G'D'λ^(]J;Ϻ3 x;gry3 s0ge|OV|wOKopY3 xusMZO'O˽%ޞ)Pgn 3%jL^zMoq5b 'bL>Kn<<kzNJ\z5)r/Or@Rn[%SϼΗ[S<$(&mK!$(q̹m(\>3 ]٫ў/9wboN$(+9}:zɡbgQvڸn#:s](]?,6(+p{pe3 <+h̀=J͡]j{ґ3 xŸ"2 ́*#gQꟼǵ*_4x2 r,7{xx]2W$(}{sfA7y'8ߊX '(,({{fAeufٙU^[QiPo7FB70YP{%BE:^ŷ0Ug`yP-ٮ,<(k'0 k̃" z3 }Yz_A"!No-yPOXw;˛ӳ&!tz1󠀯+X'eAl4(]6lzA"R[miPa0Yfu`iPZ/YPVu{03 >_pfBg`4(+4'5(^\qk~z^j"fA>o }fA&r\2(>.ǹW⽘~wauh^khu|]Zd9L>,,w~mG7ŗ@WJ{lm{SZxaT N|v^=(]Ѩo6)+n=6sLv}0f[*>Lpk:@6v1s*sUݣ?ԛnsG/wIPO7Kߓ"S#IPpb"fAOҶ߯>̂c լ|ĭSh-AO 5=̃~{oD(5&FIvmu L>oW^-ju-ЮPKvoD(0*~|hZ&BEu <jLܗz됙<Ki eRzk:̃T<ZSΓ>oJߨ[&Ǥ{0 빘^aK@A4(YӠO L|~[e4(s|ӠRjV-tbuLݾ[D+$(Ϻj埭{eMV%kG@/K/n9j:́, ۪́>o8LJÛ=S@{0 7kѕTaE}^j` Pֵ:Lzkҭ (O'f@zR3*I |^m70*+0ު́T`9Pc{;2*վ^́D/V~og6(y@e VHVg T_sz2:k>Q|^b_,uKxנ;�-[]ÛD ') Χ*>+=7TMjG7G݃K퀸{PxSkDqG(<=k/do͈P|ɻ_Pٞ%WȚQ|ަU³V+x}֫]rB!kXJf(>-/kM<koQΡx(o.%ҏ~+dm/_f*d{M{=+dmc+bgelh/dr E?.޿;(ގܲzo6)ެ|v0 F{*ckȦx9WڻzmU+(>1xц[qM[=.}zAVm e!I'nC?ϺԞYBYsͿ|߭O [޳BOKٴC"Kw^*iw~'Yoy=kUIvQZ}Fn]7PR6KVxPeh)W(>3n7|HX{;mY5t֫8I9>qh?wJXk7% k.FH^kXzKgMV־KyÝ+/G?_n{m9_-<)n|uwMϢd6Z\q6W !q+^rMWdaMJ8uKJ~~(]1Y^W KW{#NR<&6Ubk(8=C#}[IVʼnMzMoMC(޷^ ]C)=`m6*^2鍌)~u;͆8~VDP`g<ceU6,~|^owŷEFnP%Ho#I=fC4(1||4(U}gWz4(Cb LUKlkpL~W|ۻPL^I}94(]rhCb%4V[7N˹W +xszziP%h^Z4(wM3iP\.Enu4(2y+|dTuIz^]LfA;~5_ ͢w;70 s;UժL*·64iPo4٣54(|{.iP0;m9/\"v'({O JAnZ4*8KIk%'|C4(*{&B_d&q.AͲamu<PWYT(@JBGofdK\(nXhr%s8gT(q2jW_^NB+ō~d&e`L(5t^ \.iݓ̄>*7y+,UH̟'-o0b"jL#'P`kP5<b-YP}2 x+VߏT%3w|qKfBhՃjd/aD(PkO~$ VL(B1 c} (P64z%(<efBjsb |^l S%SnwPwymu8L )a*EST(E53@//kDګ8.X}() Yf{/6)>׾%3mfB/ve$3k=3?|2L(s[qlXG)^V^ƭd& 9KfB_zh <ؗUֱd*俵nd*go6<(U[|#D(QB宔uw`PhpD(fK&Bo;''? ͘zA-:/ {]yPh2S,yy 7^;ŋ%S+Mju "?~ͅ)>bgʿ_1 x[n)~of3 :6iP䝍*7;<N6pqcV>/<(b𩗨ޛe,A_2 x//l=xôB[4(nA'0 J11 xYef[{O*/ev Йo|xA/u8ދiPǤBǯ+ŧ{8|LW6)^*g7???/yz{{Jc3q#GBZNc+aWVa-?v6ݑPl\A5z{TMiЯeރ n5My' 獟''S#?<7Nrx{&'-7^샙?JPv<o>8k$=(\0'ƿW^=7)/-+*l:#'\WJwb;WF_i&Bn} |x6k{MӏREg&V)r;\(<]{6Zӆ!1 ǜf>+<r(oǺYy?ρ>J *Ln BO;Y۬o{j(rìNO~(bQ³<穊Ykp~ޓۢp=-)܆qP8FBaڶ5@+۾x"Q_y;Wз捵L;~oxcق3䤁F8?Mq + n/ߊ|S7",s@e~^$O/]"{^zq=ϴ|gZiޞy|^y2&(05:ų)g9}VSϣ^G?y(\w"q hr'\煲YݿI4Ie4> d<ǢJd2MPcZ(wkw`)pfm9-_`-º׊9K$kGYn[C.7?zŒcS*":/ZYR)R/OhiS&Nɾ䶽)CN>Y댿(L`=t]-J}[۔uֻC?yt]^Qpr{_W/J/v褡b?垔�3@׭whQoa.mR#LT`!+.ԭ3Nc[(=H頾F\zRz]f/YELƎiEH)dMUnCEoUb7EwJwwE{ugMD瑭'oufGD(]ww0ߡggmmA} y1בXэUGc%՝Fz_53j xtX5}c71tUwi1tM᡹)Gy0T5rfjz_ZL;m}޻3;jGj:M?ajv;%#н|zYq^F2z2m~L$е.X?s?vc�ibRIO[SRsABdYHwzLC*wG!LzH&"~S`<$|eR 3u)7HoKJ{s@s }Szy[s)~vlr|$bBzb2`F~{2# 8l謩hY9I&1) t~&1+ t }3- 2/BmǠ$wF9ުSc|M=' LN.(0x_`vu1RV{T�ӓ@n_ֳoJ7쬩:'떫%+ZBޣz֖z߶ZtRK0S J^uQT]Anf*B<L%[<qnf*aNn3S@Q}uQ;)3O=9Pz~o*a>ejdR`*KJFLU|9o*;囩J/5)tYkҋ1U t[{m*~&|-tLUff&Tk:φfK2U t[5JuMi=}`3W مNt ])]\%m=VϖV*Cmpm3W)X&\%e@Uv>fTs3\;@J(d,,m&+299jk�O Ϟ7%6s@7Dn*~f)9jLVSqRz`d%MfGrwwSu鬩Fe7@ .z8qm&+^N Pz7񞔴Yѫ?怃J}<?kS:qKzw&+E]bsdVuդti5*@7}M(ec7c&<LWʅ+!سYL*@?uGJ|I5@M:@7AfߖӥoJOۭ||@ Wn)2v�Iٓҥbg϶9}+G)LWJK}f6ӕ@s"fvf砡vf+}~JV|Mֳ'Wt%-f{lJ@C}2VʃJJ[JA~f~}_f+ghI!$ӕ@\yV|na ӕ@?us)LW=SGΚjV`M,av;Q:Oufڽ ӕ@K(y/DWT_'KCTtE7]}=T tBt%^#cBtoR~!R;Bt!Uyك7xRxW-YYKpD F(}W^lt]>FNt#5TZ {'G|?&(>|Z*AP^1XQJ=9$bfOe8W绻!š*~Agt-A9JRnY~['>emT:](}٠d+sU(?}P2N! U4LރE^IZw(=[*X[Eɨ1 {1L (/sPe+<5QV*YU[b(DU*J~:CT~XTtE'Mt>$*}c:xU2LTt׫zvP};gMuGo ts;8G_,gQzh <W9ʿF+sNR:mkE7Jw||P2NakvX;EY:At5NRv;LQh%~kvn;^ ҷɞm(kGa pJ/1}!XKO}GP *{R e(b?;|Qx8d~ J˪%?6?ǒkx֭:g}G -JKMzXSJ$ޟ](}܉駔uQ38SzXGޟ?ՠ^e~[z%G)owJiJ]~2M :P9iJ+qLSr{;Wg{?߷iJ[MJwc\z%Jjʲ2Q4K2Q N7J/JG2Q -mٺU0A;c T]3L%+>2Q 𬬓J[Na]0])>)@?v%[o)qebɪ J/3ImF)&*~*g@_ a:gwG,/|Q&*nK=J<%sY)M\ M}x<%e n$T)nWײR,Te蹯N0K #FevUB`q \eg,%sTHP1�\ Be}F8jͤЙwCLR=K}1I % ..";IJ[]Tk߫;@OA^2K %*tX>`&yUf)~PewYJ~,%L4WLy2Q t<<޷)b7 ?yJc.X`XSUT|2(]PcҕJ}K\^!z~2QIB?Jb@7]L%Џ]lѝӮմ謭:ު}1(t1_\%Ndbp2Y hzz}yJn+@7_zFeRNM,&+IT@t2Y tqO(@7 \%mxwr:tR/5&cr֗QJ[5J?e;'fMnN~y3=(]:`}/t;{O4&+~* TԘ""ӌJKoJT;c'mU0Ngt`mƘ$6xIgp#1Y ܉1Y 􌓗 gYStcypn=Rz ޷J\\%ʰVۖG2Y tIߠd-LY!=ژzVx{ugZBc=;l%Q.Ę@Ϛxw3VRG1[ tLsrOJoI:l%iJKMѻWT%S@ 5S@ |LU*;[J/&C*gZJgOJ:d%cA1Y\kOyLVco0cZVJ&wQxTJoIS|W@nh}l%}}KؘzX c@Kw_&+^v>ar7J=8kUγJWy0W t:ۘoOS�];Tf\Qc{_}w^*S@+&J{1JKJ5VwzC[&׿s@/Cl0`.0&*'LTcJ`<%]61S=_u)3<%зd<%Ub 0O ta<%У|z0O&$<%.&%) @D.j"JodvEOJwOL%COLk7JWz^~pf*^令3S tIӍ+ JZLT|-U.AjKR{Ke聩ÙTM!q)w)^y[JרVͭgg-3O Q䠶-5,%ݯ$t^)@yRUw&),Ѕ1 V$%jiZЮ[{r~ٓ3E 8禝)JpNO)J@;g5'g},:S@V񳐥$(Co#Za-%=6ЙzĹ謭,8@ߑ~gzͰϜYJ{R=r:ӔjDz!{`)C:Ӕ@|0M t|n=Ac'ۙz<;Ӕjx}LRD?{/r/Os&)^> fm,['{LR\u&)n |ggʙxC{$*r IJW8)&gLR!߷ IJ},#},%+r jP�S>u˳wQ=׵R(+ۦ)J˺t)JU)Jn+)' %J~q0A pk2f';@?{0G ,S9Lə괶;%etLQ$gzvq[W V$2ޙȷRs@7pjRA?3Xe艢as}.}Q]Dz̙QJ?⃋9J'QgkI|@LQ\$o7LPz]v:(}m0A =C0A c~ߋ8LP]tpr0? pSEuI$SNN)hdik={Pa{cJJ?JWFa>c:P]C>&(nfF@? ^QzW0%_1X~>J~]O[~D(h(a&\9J%'ײ(~=0E n&)a^IJc|0I tT cR=0I gq?:>LR \ܙ x/t+mޟ])Ԥ51I <68et=}0I t<{Pze}~V+=0I GgR\}xlavlU0J3)Jcqۧi;ky1E t (y)J$V[JJ?q5)Jg l0E)>$%Ѕ-|0I Sэ3we(o9Q\Ja薾} %Oeݙzf 8LR^<LR]{(0I tgWJo>jw-�IJo~970I t&Z=)m<)ծT<%wݑh7c68`pcQJ/w0Svs7P3@>dك}>JǒۦAdTuSxJ59tx.tP2B6zԒ5s^X1Yyg軮<t]yV52U ?J#f*4.2GT}>uVBtZ*3@-opTΞ\vޚw*'l*g^#1*;T`R{^- &+w|mMd%еR{`.kl%УWNzC*gVكVoR=)"?yU,[&V*zE~͠ RUl4*ѕ5JEn|Y[ݕSLjZr(Z c޹x_)j~ȍ؋wm<O boJb^х] )Rzqbf߬wb;o>x{P2A鮶ٜl'GZ>aMo\1xʢ q+57C]ѻ?/n(`=U~bSƳ_r(R}'An ' $)=foz*uF: ۪nJWpuj I%T)=L텲j?/mvKkCjg$Фlߌ{|yآ􍿹?tePbֳ+m줭ۊJ|:k,~ RϻW*xTgJ۞ JE}>QW*:ƨ R+=T4T8+sTQjGOS>{pL-P}ϴ  ^“ң5Uu)999m;BAiQJ~Rc3OqJ߱As(]zMXكcwK,NRz*8zw;/bQn5hբ c@08GG;7)}0CuLXΑVN$k( ~_tL>;M|R(3n7yuyAdX[ C_Nt~CAJdPmQEOJO̙ޗcm5V{߰oQ|6)ݾ38P:'宔z"{%%@OlJۚ$ӕ@ЩԤ:JLW /nG:՝J€y&_W,$ӕviۭl=Rz*wT+O{ro2]iW6>�^#};=(WgKҞdҖkWs0e td2c pے0)K:1e t#tT+SoPqJ}w'Svj@.L, F))=w#7G{3e tkfa)D=##赞])=%SҖ,ɔ]gLYڕ 8zX2c ҕ!EɌ%EewXt;cTf,~TnDܕ|03aYj϶U2c tQ,`'3vj \2ciWv bK} =mɌ%S7M%3@?&=X?u-:iH=[YɌ%<KX dƒTv~y&$akId訏Ye'ɂɌ%gR'30oX7S# %3@7\%LYJƐ`Кg|<$艞K)Kcz2g tÔ{/w,~ H,?}2g uz:˙Yݎ{B2g .`2gI*[oW8w*sG+zYν$sk*sQJ{ɜ%߂;KȲ6S@$LY$P,:^N$L(]I-t$:&3f赞])=K|+1cIߪ$->f,.e %3@?maf,^7ZV$'^ڝ2c(m9-{�/4Z_|�xx|yxx-pR~%F0~E~y,{7ϾAgVҶB<k_u] o<<S~1eP1pL$-xfQP:\@F=I=[ Ϡ0c.VT&տxf|hˤ]1x J6[~[et&?=󙴒Aw̄&h΁ <k^AKc47 xxEx �֤nP|epO[Zf6ip7/٤-MZ)ܶe#ӳF}Uqݤ퟾7*f7iq_ z(5qߤ 6[Yܑf8 L7s2IҸۀY9hSq8 hYNV2HPM:9ݜE(&:UЙd}ZU6t>ow7P|~-u;c&;Ug$~/f3&o)^{C{CTP| .K5JQge/OV6HO~S<f&=s"='Y&=7Xh̬'㔮V+C+Okx- F |~ b_k{' >&L~>.{~gIeA(rbwG4+@esj+'YPo9x̂]]GL1]O`֋eT͸=yx׻_zOAw LϷc~w?X%b2Tv$Ϧ|(~(^~S<b2Qٴb2T-5\Q>mxx=} <uoIeXͪ3 /WЕPG\r2B5�o'PkP{kAS%VZ�3 5mżs5K G7XQẊAЍw xxP<+''(>2n^ab>Sh6/d~S~v/-ӡ@ok0b:RP a1 x4s1a:?g9y͞)4XF[̆_b:fު>sfCAY2ʣo9U7nB|U1 x[{UyFO@F<+@8}Ṗ^P[LChN er6l1# xkjmnbFg`)Q羞lkMju^d!9Q˶()Q|g�P|kV:55P`N&{=Ȃ>(>E;F+x6Z?fR"~Kś*Z̉Hܔ L\̉0f Q藃7s@7]LDt߄>(>KAѳ6kC`Ü(EmY x3pѓ6hTL&bJ&F93% x)q7C0% cg1# thQ0/ Ō(lLsPoi3LobJ>u72# t52# SwFP̈>]rpRw1# :Gb7@Jl&DoT)S/xKtmPbSe(^κ+x;{p8l3 spN z bYPBf>vX-P_N G(>O R;gvüepTc3 t59>>?7 &f:f\|N^PK Emt(O[_noCaimuWFRJ�s3 xnPg"f>T?4[z |(Y(CoB6?N:d&Dj3~3!*6F_+&DwCNM#l&Dߚ8 QdGf3# ͌( y_̈?ǛQ 3j۫m} .`ό(;!̈޿sZY (3Q͌ZQcV=3# xrlfDuBmb(fVˌZw_׌֫eF{͌(+ ofDzo2# X,g̈= fDnfD(Qük`9Qߴ@+L} (^Wܖ{e+�(>v1Y&DVnBTaBeo&D`�˄(QG-3jTA,0! xE:̈m0DcF�Qýc}ofD_ "fD;oˀ 3S<8,22#'_zÄ(UvjNL>%kbn3# #j3# x=e3# x/=e3% Xi3ʩl0icFeqfDCC˔()oD? z4DϤuQѠU%c7R(^u#̉!dsɭBSzk{OnB+v]G# zѫ __{۱=}R֑B D*,N tV@u@*Zjs^)~U[ju (^z|:Ż#09Xk7^mR6̬dvŻŭ*v=zZ49˔A⷏6dū[Rhwu#p6k( D'o[i /ū`1GdQ{|2dS|xYED(c413H)j Cq\-š,~[4Z?},e-яxE95zMq+f QQ5A8{N^6e6k!I_c(^'آx3C٦$jMjuj5BQ s}9xxtuz'iBGl#BL'zrpS#;Y JT1 (Q%,~3:)zx|AtZEr)T` g]*88kn >)^>99w8rş)>-0kZ)Rԅ?15J^CdrBLkV!)IeQN| ;Ƣ$MbS|.LjWm;jC)^57)hbsϒKV{*V{*)^N%?moa.?G)>wߛUVXT`y: 5S59"y(>)Zj_-Elr~f^s[0@?ߔ{Ԓ2)jG'ʤ(ޤ (t}S/ P|xfT'N2' xQ̉'SreNgft)sOỏv̉"9Q}ʜ(Ox~H<AXrNoYKIۂE Ϝ(l̉ԍ1oOLZV$^BUR`H7+)Q)P|.<WfDؖKܕQK WQDPPD>&)QǷWDV>`M<f8eNAcT&E7qHIQ]v9V1) :uܠm*{&Eo5<=?nzO)>O]eR:u<}jX~P)+CmóVV)٫9I{ 2) x+! 2) L>BA( RVDQP&E/q&^YQ[A42) gr2) -0) ÅSˤ(\eRzLh^|NxYQ0J>I|]:̊}P|f~WZ;ʬ(1<y;bV}+*YQWdϬ4~sx. Y V/9ӢG&]ӢTeZTM?s´(BliQ7}N1zxfE2;XIcVTor2+ .eVZ!(fEn6cBZj]L~WȤ^&kmӿDkt2' X>U uk3% ]J+(3@w| L=ɤڰ]eBr:8L^Ƅ(+Ì Q 1#ŷm}7fDJ9N7xR8N=m ڒ禆 '(~3՘AKƔ(}ě1DM:)Q${rؘхƔ(UdfLE'G)QW7yzj^GDɫMǿNL%n)Qm[xj&tSugR꺭C(;Ňb&g2ɩTcR[&>)/sP16Dꃠ%cJTm)Qc=0% xlRF@1% 1֍)Q%^k J60# x5bgFn 6یQYQ弘B$o&Du2! xۄW6Nk~i̇*ۨ P`lI1 ?R|.1nl\c2TkfL~=R< )GLN=̆Zu$Ҙ >ɤ'k[�2 x?r[#fCha=A>d(9+sn*>gz\Ks1ʘ |g*S҂Bg,,wo3 t؃MTc&1Zט |9c&T "'L(7&%gژ _ [T(+s4T(#eTNfc*98fLC2 3@D3YT( KB,2 xT(୬v s?uW͠^2 P< 0iGOGL>Q7N|b�;d:& An1 xA 0 x[ѭ L6´~Q|VZ3 UU3 xLR.dO92(X{{]]v]T>AP\?1"o㧪oZ}k,i=.]\Zu-Z_) +Wnk w ӑXElIV֔ -tdC5^ESҎloы8Ȇj|2%P/1Qj,U xk/ߒdG cݑ ҋ s$CML"21'd(G2TC_ȅjz1YPT#ZB5~k PP Ȇr!iG6T3Pv1uG6TgȆj|Om`G6Swl5+Dfk{БXD|G"T㧶)1 oP"Hj̣oȎ= nu'# o[z#GTun& }o+'ydA5>vO k'[U"*~&.u$B5^w0P߻7ć3%_yPM/kf9WB<}Bs1QU; ȃj|Jؑz^_=Bkp$B5^:hHj{PТgȄj|;{z7w 0)odB5^CLPaQEG*TcBbA*T㧮&{B͠O ȄjHw"tB5>#S ͑ Be xĀT4j7PPt:#ߪN x]F*T(Ll10 #vBuD#ZJwB5}]LT!Q{1OTWQQ8Rz0]h+ks#qP+|CRKsQ;Ȅj4yDO"'P3 $B7ڌBHj =Z>L=A_4$B5~#̯<Kwmo2 A5u#B 9u;hD.>xiADT$>*SшE16J52~iPM}/Hj("Hj\CҠf=7")ATzsO &W\iP6ByA5>E(jȃ(#׾dޜxcL 0})Ā<cH!*?/7yPgOb~CԾDw1DTE)qM{Hq ]G6Tڗl)UQ"x! P7=1KC:T]a##I-M5SMH #%6x@FTL{/3sƧ=yHu ċ)s9xk<q\ %nZJD-R 9Qi`${,zněSCNTӂ#'j6l,ֵ8YAHxk<,BNTp%{D5>7U%15e{==}@l@NTm+S:?lJ%D9QQ1ZD5~J1b")Sڔ1<Ƨ_LM@RlOmS"]Ƌ+1DRTL")ƧS%53x ͙@RTS\ߋV^̑@R4$E5^#)z1K7dE5.oJ@VԨ)�0"jxb^!z#D@VTGlavC|E 9H+(M7dE5^r=׳ r;>Ml"-JPO`Ernf*5xI!!5x{,nS>m gxx5M~AO |A,&=e.pW~<s Ko3ΥoSAA Ytl]ۣ톛>Ġ⥊r%[UImSk"R.(Ŭ͕Dx}2$F{_3nK =M F{ ׫**Iɹz^/jzzEAk) 벧$^!~E ~'n1AQFwm2Ԁx]'5!~OM_q WQk/=q6( īs_B}Vf7m/q&ØkN W~yO5qKn%&iRYE55w E ^=wƑWoziE(QXSa׀tU\#jU%Fs;52azIG!+kL@wx5eNY+oۋ8#nO'gC|٣qPjwm00zH|<!~[/UǾD8͸ W@QkkM;_-Ԁ 'Qĵj> 5<AQv$z6 ]3e$\.j3//oL7=0_ )!ߩ]b?z9!ܘ(hoW̄3 S* EmMfPl{޿BaL,aPem e9|@cw}Br< #R{ +Q[Ho4J(/D5^bBJTwm >ƥ3!RjD; &kӦһO߹/⾿BRT# .$E5x733BNT5q9峈)Q&'zD5[(ѿR៯(D5~^4NA|EhW={G1kݵ[!)S1*$E5~W\5BNT.jxm6W=<DNTsVȉj]ԁBNT˿' IQK×{闋Ը)tJ$s IQk?G!~ wW\B ڸBNT)3#'StsJl Rs BJԌFW1OSfDJT)q2)tDT!%6s5_ t1Ro+.OHx5!2?NGB|{üHj,&=Zȇjz3|mVȇj|/;v|^HHO//mc=2ﲉhJ!!j&;}ץ/xy3%LP9/<: kiؾo4~5 sO1mq`!D5B2, xQa.$C5.L!ګPO' ^Q4 xZ& 4B5u._ ^zZ YBMaRPM}/XHjze^HjěI#il@"j;gRHj Y$B5LI!n=/&Hj|U55rb,F"T ] ,xd ?x yPn;Cp7o/q}+SýCwgB$2kwSws oy{θ h'?wh2: LwtyJ]7xA>3_/nĵ7w"xxwWvħDr5{XDё!^Gjz@T4>!ާ.kmS!$&f0xx {U#~1=t| =Đ<ٹ,#PȃjD.yPD'{ 5ET3 yPkć IP͖^}/)xx?$A53ֿmogPHj|f<@{zC%^ʀx}0mqߨ}j@@Ԩ"=EYP2^6.]xSMo1CH:S5X 3!9P{ԊIPU h$iʧYP^"Ȃ-l /^٫iP﷞# 3"F{Au)*KD-Ҡ?Wf<hIk|B|\q9p@"T &1^ **<.&<z<g ZRJ 9Hh-[DrPM5M~2^} XNl5 Ws{B`(fA*TuY0x)YD PYDu{L)K{ xmSwb`"5>3A2TOb^{$C5^%dB$C5~K^nB|Hqo_ROCλGQSޘ7!^u6> ~ctG?0}A|=][lbzs=b" 񡹾y;c /F>T/=NB5Iₚo+7r&O%ߵ{A|SBrzl3= PWs&ø mq PeN<A|s< b}!zY̋)B2TcJv kCG*˔];P*z- 8|x9XB k'-BjB*T^f> ~b2- P9Yȅj]B.[w&.Iix*j =WO,B5><j I\x{^ʵ ^)?j_eWLWq,$CwnQE>T5Rn@"5M7H'4ElLZ !^{4c>Hj~.jD2T# Eu-<F睼dkRYdﴧ}Hj|~s]W/kP^sEdC5^=w=u1KN$C5j]PdjOdkE> PeDm+Gm#d%H7J: #1?C2Tw嵾 ȅjz"j^T)"Dȅj~wcT"*WK2r)k!~pe!ޮM i|@_HL#y1w4Emw PB.$C5~j2$C5~2@$C5>G$ P2uĠld x1 )V{#&ョMbX jn]lϷ>7?jBdC5~^D#9wUS@dCK;*}_Ȇj X &;|@>.B6T^-B2Ԍ#`%%fQHjԫB2T[Hj|fȅZ x[m*VĻ$qSDSjG39%󿷽 뻱.ȇjiO1Pwe06^!>UbDLQT*ߐ~C5ޞw)Y'Obz%k}ABTE; jttמ~ߊC5>n(f?qRW<^{C5lU2]1OC5>͘$ jErA>TŴv f[A>Ts|ƧqcUQvY2m|Ƌ1b5!,">,X &El) W%hȆjힿ1leP#"lۅ8&Ȉj츈NAFTmӧ,Q-vO] k: b$D5^F&z Q)HjJ~&Hj|> d(h1q6K(CTeUȈjT%* 2W-"@NKQDJTiՋ[\-DJT=,u\IǨ_LD5^BNἚE!%D5~~1DNT39_/H-`o )y2 )n$E5̫hȉjz6]9Q۔)ȉj0]D5Rd&!LlAJSRD5^2("Hj{ #=K ABTӳoC5;FL!!J/l{i)1V" fsEadC5^ʉ9 *fzȆjW2 S PSV8Mg$C5~_i=j,F2T蝹xdץ&B6TT]GP%E6dC5~2;ȆjT]DPLPUSvwGxm<qO=zbD:Tg!N Hj|-y:u]kQPI:nm|_.+СPċ@ywwm?Ȭ|:i_矛iYA]6GQ+Sv% u ~2֌.cXRqxz];^~kumWy<kwO⣿7D&WQZZ[S=#^oE)R݌_ ]R5*Y>!xb]zA0 ҷ)c ćٕ$G6B6r-anH '@' >zIk_Ol^.A쵩-=rkM >]^!^mMڧj֯;B5YjI{OµD˃%t{6"+}u 5r-qA̮u ~/6T 57k^ r(f; <ˈ/^EXtwb-Ŭe;x -&;S]G짓ޜ ¿k]E\qAFR ~SO/y1%=4+Z3P5qW?k;?kom$OM9֧vƜ ^3ң wfe4j&n4TΨkx-l ZКSv3oN@|5=4ҧv-Q~JmڵuA(व ~Oqgd;^I4})^[FdT%\!.yʢZx"HD hg2"!s;'v!!~96$D5> hgKrCBTǭousoeHjkY:CBTvJQ]v3O_?w#!Sѐx 0$D5]~CBhcI#&?k kƐx[N|M PMҵBғs$ P#HtOFA:Tm.%PQ0Pϑ{ztw1C5~ }7dCʵDT!.(?tƧ8#ҡo&sؖ8`ȇj|7MEPBE} 11!/Exhd;'jXd 3z$C5~t!Xdƻ?b$C5>Gg1$C@܄mHjKC2Tl-qg!Iמِ51[[_> Hj|G= J=1d?t,[dO1M x7/!i)fH۔%ҋHjXq!0ҡVoȆjzňl:9M<Ae&Ȇj|I̹0C6T}+sِ qKC6,[&VȆj<([ lOZ!񾳈8lƧ_6!jQx5#SVO-?ukyzxwaJn)fC6,sBX7dC5^|q 6i_Ȇj{P[Ȇj|z1!jR% 98gȆj|y[mȆjR3dC5>DEm.]eȆj= EP(ܐx/blgŠ P (B3dC5^$ oS܊X#"rHjzm[Bvrk3mS/iqa#1xZ+xOF6T3E_F6GȆjd2^F6Tm 2oC|q΋{sW>P'Qc][/% x#Tf{uP3xnr'ZNRbA*T5ΆQ]i#^uE7EPPfS x'qF2TJ28F2T"OHj|]vWFl$C}<.[dko!L8ǔ-kJQߚd1A6TuEȆj&v6rSj|#)QFvD>Tuʑ0 ){ٿ;JS|#%ȇ[xԻ/WYN$�7&D>TgIP)GM|ǑՌ5Gt. qH8H1]<ڹy2QUʭտovFBTC=&~zR^-R UqFBTC*;|@|EEt&S7a#!:$D5~O=b"j,2_&qu###"odD5^$ QUcJi:dD5'ɌգdݍQb ldD5>UQȽ72K>y~C|$Q)-<}@|"&HID;sa#!S6:> 񵫂*Cm\xTbȇj|#PK4ߵ}@|<>*zD QY`FBT{ԫƇskdD5<t##-hNȈjEm)!#=3wmdD5>B<R_{kւkXP:SW~A|D<k,$ f{"ё9joHS9{ޑni»fP܌ȇj|OX:Rs ZD59KHrµT"%uՎ;G-& Hj|O׆{1Q}* +GFT{udD5>zCwdD5J_Qg8HjVRo=?k<GBTG"GB䭯ue=/Ϟ)k1w9?k9Q.*GN\{9#'r=:Q9Qʵ4)QM;C|Ÿ < ڎ"%rScݑxgbDCJT{y2;)[ʨzˢj82os})ӳ} ȈMQq<hx[zzdD5{bOQA&@FTE[Q7(Ȉj|&9 Sxx2uk; QW$D5&KHL^Z0f QO9xqěrE>TM/>G>T{赎|Ƨ.#j''D2G:TM=B5\POB KW r?M/q M)ȅ2⧺bOuS"#Sߔ8Hj7% :3YdC5>:$Ȇn}13(dC5o}L@2Tӧ)Q| ^22v#iI-h 5gŔr$C5~ 0-& m#+R* /H!jFMt$C5^Lfԗ P.s#9BdBgfBsdB5~^"b /޳TjiW㻧;_xȩR?;econB5Ln4 W'ne!r?ObrȅjTp'P! bRS{ݬ@*LlCZȻQKxzx ]Hj|/Q' ߓPTYUg>!^e^̂x`@.T{.L"TU jVtS6 xɋQPj $C51?$C5>Ә*dYM8IHj?}j߽THj|/ؙP̧}5 #j2Y!@2Tg8!HjzD6T㽨 f YRQvȕf'!~.3)~+@2Tӽ|6ȆjD- 5 tti}-"ȅjzwS˿. IKV$C5^M%[ }mF' $C5>xr^9Hj|JH]̕pdkȃ =oq6ǺwxZr9P%k 5 Z̛S1Wk3P{6T 63Hj,f Ob* 33#%)UD>t$M=WȈj|LmMs{$DM.@BTUzqb&N1sL"Lj(Đ)ɨtƫ[uS{>Hj|L"b w^Dɍ@BTEwm<I 񪵈 MQZQ, cDFTkD@kʿerQWS N #L $D5=L9WdNRgw 1GCBT߾r9Q#ȉj|XRr_VLY뺺g)mK|QU>up_\Dg'k> Wxx߿UD);7woC|m'6BA+ݳQ9usS^O;g]c. z-ӣտ2r)io!B4Ά2r/qPZwm0'.s%T$ ~ώ)ǜ>^3eA|UQ5<[E) q*!LE3qp1EOyS”x FJA *tA|U8Em~U!^{"cJ2oC|/:~'Emvڵ& %&Z)) cEWSW,LBDfK'I~C|< UJ- Dm/zTLKԷ {mt+ >zCTK̽ ~ Zs%Xu[!~n) {t;A|Q;K$2u; ^.]<}BMPS }n#'4 >/g񧣨호Ñ|;B]ԑtxzNLa}C|3Sp7[EUN2O"[ }ʐ撩 V-{jLB-Md ޗ?]7"@1ۿ{. $*mn'Q?7a)K($!{צ@S Sg2 ]t1n!>BBE3/gve2!ބZ7 ާ19 PLqEJ MkBZAKQ(|;Jǚ6 ~F4bဤ.U")z}?Pȉjz*5rfW"Jr/EӅƛh=Rȉjfr̖O!'j65jƋRg IQp ݺlF^8Wȉj]rxt軧7ѱҧ|m1bʤ)_<|B%N2?kO^ QMO"Fرbj/oEA*$D5{IH.$Drk3xxse?!xFh-C5ݷqb!7S[52:1^"8]Hj(U!>w%ҡ~]̷P~19B:TzML^xsaj?ҡnAB:TөK P3NHjzy!G:T=RHj{^ĕ,tƧSܷ5˴}@Wxu%1( r PPjt O]"tOyҡoS B:T3rAGA+Sv?gVX!6q$)LeB6T3'oOQvHTN Q4H iaoT^Ȇj|f0lg!?*ĩB6T㭮 ~-Q _|M 5ˮ +YG6TAB6TfRȆj|HAQSk Prԋ9YXȇj|yB>Tj|(+n!zET(D5~֙7r )Q<=͋yq#VȈjT%(dD5~*9R$D5} t!!J.`D"!F>Tӧ~#?kD|r*E|(gs`mC5^G<&ޛ=G: ~'|OM_iBB%_:A|ozy?mbkz}}TZ/C5WD{9\SO'!~DOvM/C5|(ӿՓZ^Hj"΁腄o뻋*O{~C|^LdDuZ$> ^u"?ćF~&r_S}x1eqF/D5^qⷭ9QĘ 'o1^Hjڦ9Hj6Z{x6 _==r_DE/DYl׽ BRT% =unOb6Of=}@y_?K>=sn]}_�ހLKAWT^7rpov_“{6\|K8} p4[܀n%·}ߝ}wCt->jDˠHjosO}-o ޫ"MïXE2$ӫH ;V.KwH^ N%IPݩ}x=t^H]~w@tj|TEN%FH5H_7ߑg>CU4OQݫOP ҍlA*?|! jT)׷nv Ub3�S{KHdty&ڽ ]`O H'Jjp|A*1e};{=]JANpC43 $|}8]CGen3LUC{4umoH7"-惾�.1zrHGqzNӥ |_oG3I"!Լ:PtB !.uH.]_~1PB{A=~U }FSߛ=Ql1IL6t#[!}:ؑ̀,)Ql"Ȃtylպ ݸL-H[@:D-q` 6*(>˫trES(VO:_^-Hn[}>ֵ ާX| Oyxuw,1Ԭ @0=!~6'd]ӳ| H2KF r|%%A’_'<@t-1/,,-b4^HZ`Jq6ѐ䷷[S_Qٷa lRKDNe!wOq4 Y |/zP !NN0dIA/HI%r8LA8Hbr;aG[cI1Oo')o{L&wRϡ: YCX8 <rdXU!ɏDH L~L_o33Ln7hxv4FNݵBR,(DVj iMӚ&IK4Ul{ֈM~&bq!O#Yi!)N* R:=K| INqP^ VM48syNqPF⤡l<ړbڦ ]VUo{ O,<> MC!)̡IOq'fPun7|wwΚ_H} yx' ŜFSi(c䧸'~JGSݳifa ^eR(P~r@1$VȂۂJq kETL3D"TD(q uDX!*N&rdZ$CőwH0MdbP1y D *W,q|ҡ"|8'aI' Xu&Q > ~cb$DOb-  Qy۴3Q[틉 QLMy Q,o?]Ln'r<6(j Lij]s+dDIE_r$DAx/z Vs!޸} ABT*{VV?!i9߮8ȈcD1+dD12gDGQEFTn^ #*ED%}OG롨Ŭ?) )*h#)*T3 '*<#HSb ^ł(&)ȈۈZIȑ'E gH[ZNdIg 2j #*=p)Ȉb 2ND]DU'EH#D1*$DOb  #N)FdD՝ZL Qu>mbAFT#ʉO!2䡘2䡈#PTQD2w0ixa Rw2/Hw #<fDCFTy(mF,ҡԁ*Ct:I(BCկ8AG{SU/\lA:T9JCt2 6't::B:T1F6T% P+0NDWa[c UGbSH߱<bzd:)(  Eh͂d:9(7W3Z U'Ea쑡y/ K^*w,KPT]jE*T(RPpH"n5PBU+PU!˼9!P(0~jN^L'wA cBGP%]1M!ݚNC_ B >őbvP5U1R TORO/?]\+(hZ" }zXpleF{qe /AAkw2IA b_EDP]䛣w「wAD1!~>D!Uxg¼(j,sE ^Ʊ k{-;9@|wBCAKKi/`C|L+33}At-!+ ^Qϧж@ čTQݳ\ji7}qg8&D.3Jv<'*g)p/Q* ⍜ajN U(bX 5t!`B /!0?1qmjӱ4Dlb};EƱ ~BV@,Ub lO23{7!~V|@̡X ۆtxLbOc4‡)?Q/m=(f[# k>7O*ӳr2 ~fǛ=y(f' lwz]~ĎO- bRӳ b.cRo0]?]n[=i(Fxᖜv]?AK, Z?s(beb@` ړ* gzLMkCb!+7' ~eDׂڂ;j(9y(%E=2:OVN"p Q}CJ%*wwnĐ%'u1]D9/dž(9(n2DxxxR0dDD&!%J{(9J1O?Zb_%.j )Qrg )Qr2Q/fH_&h{DQ(1v7ϐ%'E8K(9JQz%'E((9J3 %JaEӳ(D]˼H?2A_>AK$ QrRQ)QrRQ̐(-bʐ%w*Lڐ%' HD]k6O2m_/&R>w1DɭD-!{Dqc 9QRt"'J̢g/-RN~%'IAu|!QzcHhbHҋ=0`HҋV #JO"ؐwq(jDJJS1ĐGb>Hs6Y2#%Jo%bHңD1%rT<CNޙKA9Q*g<&^LD%DD 9Q1CN1ZPCN'j1][O5D#'J^"'JLIrDCrt?ȯ~CqG IQz2QD5CRޙ($ED1.$EӻȊғ"Hc~]dEIEV-Zs YQzZdE鱢dodE鱢7DlklDIC1 c.P' EȈ:{y= >/Dǂ7b5ƍ(.-Hs0Cm$D QvPewJ QvPx(;y"%w7없bӳo#!N8&e' E  Qv[& Qlb#!Np6줡g Qv( OVH2c$Dn$D1 QfexQ7lkehH_;߇A O0FBX#8Ę(;gep_OnQgx1ef72QDU(;i4C|k,QgYKQBFB%e' Eȇ<ce'uC9G$_7d/-W#i{EȈlmڷ/&RvHG2/w-#%jṡED2)EdȈڋO*rG2hGFU"hȈ'l #jy̪QT+gȈڿr ~C}`HO##j#FO+/ Q+.l$D퓉"KCm>|}Q̆foCID=o6CS$"j>Ժ.ID 1 A>>>Q s#j|(D>vF>>($F>Vuȇ?ysiEQ1}D5 QW<  GN>e(<D] IQW|xxt}ʕ؎(YQF <GV+JEV_.GV+8)ȊcEYQ;~C@f!޹$#-`(jO.Z!-ʅ]:Ң\N=ҢT,gEEk+GZ\a8ҢhQĥՎ(?u.$iQ~D1rEѢys ⅫHr{ Hrc7iQ~N1rEO"FLEN6N@<Y̑fiQǝrdE9[&ʑL6AR߹(6##O"ɑȈcDI@GF[‘I,R(QHS#ӑljb9QWQԞD3{EN'Y#'<#'O(gGN'*Q'̽lj"v9Q7"'*.JDGNT'8ȉD] QiGRTD)BRT,~5GRT[DՑ|QxÑ'E:▢đ'E6q$E9Ghȉۉb.sDEI9QqPL9Qg;#>H8512\d*' ,:G"GJT%,9RbcD"%*{ۑ'|IVvdDũEXrdD=pzIṡАw"Ȉ`p92+'L!G2T * ? yd *NPg^ Cӣ=9(BL$CŝZF͆gqm¸ m^ҁ\<.q( ?/wN9 BIAf * Eܫȅ߱E7Wg= N}A*TEBi@&T:(m *"* 6o2RٳLTv' ?yzx^{$B% A[=<<UʙyPiȃʓbyP;GL?*AR,yPyPyRP<<UʉiPy4`z yPyC1QDNL'EHJFy *5ʉPy2PN$ Lfˀ8)D*T*Be>^_T{CX *HnãbZ ^r fCi"$B6E"TzA֝"%$IPGIPuzIPu2P.U $Zg7w/U? y1"ꤠ-@T {)m E4=rJXX I:U'E$R@TɴCe@|rGIPem H"@T6FTTȂbbUqv@CTmV\ dA>D" 6+Ҡ(/U'Eh4:9(ư@T9{2U DX! j\ @ۨETxrPu1LBկ0B.TI(!. BUD*T9(VD*T%+'RPĆF"nJ$ ȅbTKBq6w~yseP[$.HB ޹PR TL]h4A<y<: 5YxWjM`sS|^)N '4>,H')(hOU(L_A<y-OO g'QD㔂t 2^?=[߳! qT >]Ts{8]ҩɒזTj=PĪP 3r.7NK[OV4HOSh(hy<~BApl6xxzxJēIP̛S/2o~_O <d ēQ3 ^½!1CݳĈ'hiz: Ⅻ@}!Jɢ 'gM'Pܝ c%j&JD ~L~(QOQԞLd9܌ ⍺+cA:eē3P0Ul7N=pw꺶t <C]yAq2xv//33QnbA;!BCB:߇-kMNofA<yv+Z%*bd '9.Xe.!u:cq;Py("Z]\wE% R$ ^ ,Z b eϝުkCvv '\(PC=֗ce!J.|O!J+B&*R$/x!JΙ<f8@* B/Bɹ!//Z!J~(G.CyN9ȅ9!Pt"J+BrDMDX!J yB.wޘZ$CɩM4$NTH{bHC2l6SQH#Cw$> 6il(9I(bL@2p� Pr#>xq %Ta+$~~ F8i䔓B.K f %X@틃\(IW!J-(hWȅ"|B.{m!JN&#J~B2LqB [ [ u]D!J/:[L(=šE"< JxBȃSjsWA/ 4 ؓRbA"c_$BIC}vA("Zb! JxJ<t#gȂғ"TB*E2xjm"Ȫ4(=Q YA~<6h5* iPz4(fр4(=( <Ҡ>WHy<qG"dA鱠<Ҡ֠&6{A)dA41^" J(Q&׃<(=su!J=έś/mdG{\(BiAP Ӛ IMbNrdiu!'N&_Ol@~rgo?rGj5jS?7^T'wξ(~OrbӳӿE~T1$H-H qn93ӿHSz?#e^fh|Lɽߓ+}P$/.k.$J =fGQDINސ*e?Uj~|"4l);0ҥl}GlN׈Eʔ|5;DΔ1폤)ISߓRfu) W7k_fA攝5> uʂ-|/vr);%͓"{NMs*|>eGSv2W#NʘE;;#ʊl>}rWF {1__dQiTWSy}J+fG.>͙TUM j!j%3BBW ϏC YU[] iUW _UTZU:bπ _c&HƖHh~AEOHg&aaL|!j$+c~|ag?Hڛm j }e$ZVn>Y? Bօ\]Qdu >5>fDվsW12m\boȹwꢶtSxGլÙR/ȗu'wA/ȟ% o4E}J-$]{j ӻ|^j[!j `串}Bڕ_'xBڕ;YH;u% w5*JZHu>L"IWIW-Q̧9W~E3x" #UbȿgQމ+jSy!t3Ͽ!Wuȟe3 )Wy!jKWA/msw⊩'wR|;fOfz~[1+WEwȟ咽? _f+W9W'|>rz}s}s~VV 7ȿy=swފ_ȹgjr+3yf/ȹ<#f+Vȹ3ȹ<3 냜+Ws'qL"oRqȟe+?+j8+*8+*73W |At.6DU\|Wԟy9r'qu1iC\I\QK;\/q H CUgs's9Wq2WAO*#*$EUܩ+n. =8 *ԺVqVY|. d^[ŝZFn VqVTVqVL| RBUuթ Vﱙ *Rg@=qfֽȷiڇz '~7 *nߊAUݿVqVo5߆So/"N2?䭨 VqV7yeV1yVq筨]5AULjS_AUyy= W35o?ˬL W1imCݽTAtTw2eV9YM%V9+^Od\$y=q5 ;>ӽQIq2jAU{jM=?[+i|g$\夭6Q *ȟwp5]jjԻw Wgp!{p(z_&&HJ;˄/х Wi˼HJ\ &+ĎH}oAU;~-C-}s⋙#jruς|q~/%.ȸJg/2&+:ȸ83ߐ?+aWw2mAULdAd2\])Ww2])Wg|fH<˼?H;u�RNRϿ!ט5Rz|zsWY\uV)WuWL@AU]g}ČȺ_d]I^Qj3 NJ ȿG=+ Jid]Km!NYW_Qo?Km}!WuWWuWE/;(|A/$^LWew2Ҥ ^Q#H ^ȭ]՝Z,~vU'yh:+jrQR}-ȿgvU~g{uU~̷YWurWԾ;-;DUe^d]Us+氵 N Ⱥ8K(|6*Ok EU[P > ij[ 5 Z`d0||gNj*Ri*J"t(WӢ|y Or ٴ*fXs5;/poV@~ޟ$tmDoA"V.*,˂KYmCům}*TYJ% WV \؉^o ߹@|cgL=A~nRgݐo1:OR. ȿc=҂{lf.ȧ9gf7$PfKoN Ovn(|ﬕf Mk zNf-sނi _3bJސo䆸n|VQ Wße.uW \ _f߳+Nj1/ \ ˚jJ 3 {zߋ{Pޙ_+JӸ ?ݿT RA4ʬƆ_j~OR@kwrOAt/u љ/]%sY% oO2^C Ό?OR\1˜ӿi3836@||Y<߸J]A/ ӿ6Pӿ'~uͻ:rZx? _ߋ#gI.B[._洈]v93IoQ"} Z!J3}&gCڕ+iCڕ\'Ү>-x1BҮdgC,~v%iAz5Cڕ;~iW j_FK3]I^1mCڕW+3biWrWߐv%v d_e]I^1+Q>~v5}3?͟_y%'}Eoy%w7^/>(~+9+Ҫ!JNYR䯘j +9+Q_/ȿgf+3>3+3bRfz+9+jGH~ Wr\A@~>LO?? ߓ* '|А{%'}ŜW6^I/?+LzW35 ^"Jn2M!JS+=+jDU WK_1+/RgWHғ ד tvWz+? ?G{+،!JOy|d^gd^)o^2WȼR=˼ȼғ<|cȼR=+?ћWzrWTn WzrW' Wj|nWzrW8lȽғ(|OZ!JcS{+=+j+gq|{'wŸ!+W+=+D:?Bm0^}j JTlȷ/?W؂+=UR|'sŜ0$^io$^/s,-yWge=+&z7CݽT:Oق߀ύ+ . Yy#ʮ%捤+VT፤+;iteH0zߐo;ę"b#NjmN[2gAp2W̉+VAƕə63b'\1c'䬨䬊 * χy(vqAF•U0탄+;5qC•΄4[Z }B`pZ\?\khj箪ʊ|b$hݑpea2s$\-ZQ3e$\ 2|+5+&Ǒoe_iw[Y"a~@>B•]ኻ>J:)9% Wv+F8q$\{ fHW:LH2l|+e+VvVӉt+kȑnejE]nejUVѭߟ_d#nAG?.H)0ҭ |+ȷn9ҭ[7;e6V~u+&ϑnYٓr[\nr7V~}+jq|+_[ [F|+kW|+LxWߑoȷ[Ԑoo03ҭV^G{{(GUz@ʕQ GSy@;SHO݊HO}7"ʯlۋl+Ծv 2[H;V~VtfȶOt&&#oيFrd[yFeLV~M@7ȶf3DV~I ʯlߕu}[bV|Vqa *o~7d^ȷC7Vȷo ? ?>@U9|xV̏ogM@Uܢȷ$ȷ[*݋ӅHt=@U\ʩvQ ^ Wqٙ@U| WIhg^H[bd@Uܲ3'pE]|{~@>[ $\f~?.A6 i2"h#'qqf"*>m󃌫HI?qIWIhg޿ȸqEqQ{LBc *qEqt89(:0r7ȹ9Wwӗysxu~2 9WtD] *?W+ \m?rF\1Fo *< IWyY"*o~GU_O8큤WHJ[0r[zDUӎH-EU^*"*? '#)Wy<R舜@U^t\tA#*x@U~ٙtt 2Gȹ[bֆȹ[bIWyn/v IW]1IWy+jmvGU=Ⱥ[uo0Jl *v '@U~O;d]-]Q[Ⱥʛ7uoT0H[bJ]tE �DUiȻ,DU=ٗ7 sH]QiWF\1x0xwI$]Օ[%J$]mdf\աOI\-[1ˉSN]-\1O? BUsDU)Ⱥk]1_RDU^AՈsA"몌~"骮t|$IWetC"验>%tU3 骜&IWt/h"n{>_Y n94tUq[}MDUs4A"n6;ӰH[:GU}bANr"=יOB;|r r:WL?ȹs<?ȹ ȹ/HsU_ I\UӻVkH{ SN\C+9~2I]d\Cg'2s rDUvA`'eA W}SDUzO?p7\ȷrP|a7-qo0FW"㪅Od\\Q [,po᪨/w$\+\ H+\1f\Qu7$\fi Hj5{ Wgg$\%Nqշp3v~KWPȸk\=LWw2o_d\uF\1Od\uW}O,cAF$R\2s\\1Fc"no!o>;ӭSHO0|" )Wݴ[Hr !-\-]1BU}c̸-\-_~)}=~s|6ꪀs # HW ׺j ]Zr? ?hWg+S!/V@g.ID ~o7syL[AaAdXIB~ӛ{+6 y:So3sy@~եR| [boW϶os.tiB~绔^ڐZe)gl,C u} vP:Ve +OCQ/O?33R._]xA! [{fFijsyBk]1k`]e_N7Aۗ")]-=yvZ`~=N]|zmr㥀u"{+|e?gr*I"J4~b4ҍ ߹9a&eJ4z>ط!_~>@ٙ]%_YF'/! gHJw냆oT5Y 8sK8W/3C>P3 N/h]|!y V~(lU[roqg? g~4Wi< !_^Fƕ<tY#J/φ62So/"+ = =Vr}+fr@}xF#JnՊѹVWV"ȷ,VtUo%o<;Sl[ɫ[Q%FfAFGk[խ!ҭSb޽ȷsVrٙˏt+_~|n%nueh^݊yzm%o8:俍Ӊt+yV?=?!խFZ1j#Jn،t+U+#JnՊVruWbRVr{^F^An%nHO<;3~n%E5ҭ R[ɫ[a^_HO 3? Jnuymچmd['䊹o>#Jn 5!JN�n[\Aft+u+hFut7ҭ֭ҭSbfO$\dtF•޺m|+uTVzu+Vz WLBi#Jo 5!Jub#J WHҷQP[*|w7OpW(Ȍ/$\}܍+UG•~*WA•=ڈY#Jo 3 J?+ +I}*zA•:iH)xǿ!FЯo/VY;#J>oxvFo6l#J? Wz W酔+ʕ17\iF6R�Fƕ?W|pȏ_⵿ F3 ["7ζCq@ۛ[D|0za\~Ce.? R?>Hp俾3u A/\aO>S7kAʕ}d\'y|rerEl  ߫\)u} kCѿ? o5u~g !L9Wv+W+{'V?te|@֕9{ճ0~B>Yy>vf~C֕^".f\Q7$][b@>w<轥<ȹ\1!߸]㓐^킜+WE߆|I#n`3Wv+cލȸ+Ӄ+k~">9Wv+WɬseWZ S^+6ӕ+\m&H[*"o*VAc^HsV9W~JWIW~X)ghʕ2Hry/UZBҕٙ-Ȍ/$]hAf|!o:S||os8|zc9W|9WndwRow\p^\t)WNg\ ^߾ȹ.x/rr<ȹrEMȹ]Q{ Wsq/#?!WGҕ_銚ߐt"o/</ߖ&;uk9H[Jr{vxҮأA/`hޠ+©Au7?ȹ>;`-\94/.__\uAU<w\\ŭ\19WqC]|%=od *<Ν{Ɇߐ/kJ8IWq+WDI9ٍPX俕IDU𥫃 R?!/|@UUQ!<=C3?#*!<7t2yr+fGU+ c4z2BU\z{!*6r_\E'W  俎tɞ;|wu?H[*키D3$]tfDU]<Hb } ȧWWHfA{iWѷ%_HHfm>AovGU]^Q]%u5|0~V *?g ;yWy+j|!*wŴ] O x6 /iWyWT iWyW􆴫5=#*oVҮծw 3!*oJ;5#*Ni~CGUBU{?xzExx|E}"*o<DU1+e>xtN$^eqH?v1 WyWƬOx|EߐxyD*S|'I]Q?!_/EwE , ] ]1xx!7AU7AUޞAOB~qY÷nP!<eAWusڙ n :^^ R6 2_ׂԫ4 wg7WuO|'!<uha6WuWLSzUž;ꙙzUžA7x4~o )H*eCkԫR:PEzU|נ j+ n7AU{n Rؓ4[/H 2(ȧ߿HwE7T䫺mLޡ >Y2|!n||ܫ+noBޢ/{Uk$|^խ^1^Uuԫ*Z^-^1MԫWƬ>zU7' M,'}[bZWz#?zAU?HUsW}WW}WLd o ٙj$^'z:轵+Qy/yB 22hEUd?ȼ[bAU߶AqDyȼx?!!AU>O_$^M-x՟C냆X ^C�od[ o*(~B~ޏ ՏM_]wASb]uM݂^1 yW_fGU߬L:^ o ]Af"os yJxտ ~{W}@~qī~W֮P!/Ǭȼ6B*27WUROC~}y|#' ̫;�jK_`^s ̫v"=hЫ|a<φ"gTg4~o*A{ T×YIB~4|odz!m$RaT7vwsAWE/Ap]FjEo陙}4!T_oOgC0=Ϧȧ u=h)ުuʘUKgkjh3֐&g䳑9/GzW_7^!;H3!ȳ.hWe!)Kv|!# hWqfٞ#DUs{#Ю/{9�jKe^13𮖿WW񮘟OW6|#4)n,0x4z?yW oP!?߼fm E[|6XԷKȏ_ΐ/WW{+WY–!iJ/4XE]ˬw_Y@~Rծ&m|!<||O/Fxk\@;zgr/ ׺:FL? yȻ=Fvφ=ۓaȺ_c~C>[0d]Ǻw~f YWrkƐu%A"Jn c֮YWr+FK0d]ɹVu}7 5$]a++HWBҕ\ʩo䍻: 1d]qu+1(:Cҕ{t%v| 21Cҕ-rYWYWQG+qz_ߐv%NҮ]Q ߛvE}] Jnz J7]MbZ iWrڅy~v%WbҘ iWrWF~,w%ߟ֞yWr{z>ˌ/]I 3w%E4]=j{4]ɭ^9wg3$^ɭ^)uL[5$^T4 y!Jo*23ȼy׼*f+=`ȼ. Jo 2 d^/ȼ{ UCޞA8C^y<yB9+W޲!Jz%1_]-RT=,N#RWJ~4|Qa+zDꕾ=ďGޕan.]1sҮ,D,Ү]skL2d]N!JoA֕M~CIƆ++yCڕކACڕ~ҮiWz+WiWzӮՋ+ yWzӮz>s yWzڙbGޕ~ҮiWz+S/_H0 /:M +} WH[n᪩Ӑ/l|vepu++kGڕ}ڝkvHOR;w2ar+ 2_֎+;tǯ#2ë!ͺr]3Үs 3|veWJfAڕ _ou]-\QiWv W iWjW9ʑvepŜȻO#ʌyWftّwegz~wex77Gޕ9??#n S}p],fDޕGޕm8,4yWvW 俟+K:Ȼ{`+]LБweI"Ȼ]1ާ#>+7YDuґweEw95Ȼ9+A{YݑveW>_veM:ҮgGڕ?t#oz#oViW~W쀬+US||!G֕+? 7! ud];d]0QfzF֕c;Ү׮iW~WLoHriW~ ʕNw]GwRz%++&-֑vȼy˼x!\x2GJW?!W W~KW+_Aҕ0]Q+$^ͻ&O$^m,;+ RgB>5++4 5zWx o劙>W~?c>l~ oC=?A_"KKīQT *__x7=S /_)zīW7m{ *޼듐zī+fȼ WqOd7$^_ $^-]1 īP(xʦf:DU\ ]ŧa Bn Q< ]@U\97w׻b@U\ ][*yWq!o3ut 2?zW9_@UzAU|+bt!*N d]ŵv *Z9̷▮oDUܴ+ d]ŭ]1IW]YW~Ck0/_d]EzH|zrFU>!|@U^6EUc9@>}vtEHO zDUިv􏴫=/Ү R_H[>Nvt45ҮjWr *?M_ ȝ@Uެvt+@U^*"*oV;UAUެ`O]g]H4:)u׺bVȺJ]ծciWyKWȻʏwEހ]=7񅼫W쀼Q#^1Q @Uޤv@U~+wL~|!x]Gb]]Q/G]]QH9ig7yWYM]'E~[$ҮjW7R;I]e ݉l(v|[WJiȧ/ҮjW @X'Үw<?HCiWud"RH{`6sc`iWudiW%՞H{ ӒȻ*I]խ]5u}U(wUeZ > 2'JOB~L"n튩&֮ᅼԮȻ[2g^zGU9}]"n`Rz>{o2!_yWuWȻDUݼ+DUݦAeH+^1׉̫+Ŀ3xUxE=hVȻ3 ^]Ua*:!wU 类w<=HO 3vvUͿ{vU7쪩ۛ_BU#&Ү?t+ ?BUߎAAU߰+>>F~ܸKd]m*'ȺjϠKd]'YW[WT~YW}+W نDUߖAjYWts"?k IWd.f]1p%V!ҮOjO][:*iW}+Wu72m&uN;퉬N=> GUUy@UrȺh&}�l"몯uӔȺWȺv~_.~#o2u՟Sg-]-]%GVYȺ[b: YWZW <![5uu+7ijqYc~7^>kL/r˺~71r˫~7^eLW/?-]zE?>h^)+i(BlɁ%{@U + f|#cJK4|=0OC^&!|vϨ@[Q|ufh~d䳛 e'duiB_wVPOCb>|#O);R&_D|Gv 2eB$9Y[@̞iYB~:iE'!5 wHdw27hfAq|\ol C=`7p!ͩco<nWt& boeN7p7rU+RWѐWU׮/2 _oo lFe@~!o Ec׮NG= BxT=od#eՁ|Vgsrཝ<e/Woȧ WϞ]Q)VCﮯ02õZ W+0lQCTF ;=S'pE;7@~lG[b#ML8ij{?<OB|q6H#JPF_\Z-X)17r*d6r2č\++oZɧG\ȵOdF܂SPm$[Ed+zl%`gH}m$[ɭX1F܊ȶeVr[Yl%7: yH (ِ7k%b|26rS;9 sy} V"7gOUhZ'AnF5RVr;RZI]T++&׿j%CY"J>G#ZQ||!+VegF/2$F$oȽ́Q,+*&f%Wb4F]@⣡dg>Je%oӏ$+y+$+So$Ys;k<Hҷ?Pu'[{IVzkVNf#Jo HқHb$+HVB~$+=i$+47EHқȞ̺IV9MȲқNȲR#YVeqVʋVD+HRVjt2N#JHE޲#i7F-D+u;&}&VzViL+u+L+'ȬoiA772֭8@Y?#Jo媙VzM+jOV2V,L+}W  {`Q!_~DL+}KWB L+&L+~A>)ll+mH}loiVY nR!_&}oed/VF;J\[a}A}N~C>w/3 Le -A]݊netEljt++gn/ҭ얮 DVa nx WN2oC /$\ ʌ= T$\m<㉌+b2x }qeƧ背+&H]zAƕUR|!V,O}nevVfD}|+աd >H\)Gc7s>ȷ/|GO_j~l?CmƙTrd4wV֊Z_ * wϪg?f~ =Uta~yA 7+X/}r3@?m^BfηtD\yxT̷t4Nqa gMBL!<�o_G,GӀ:#a*8p{x <!c w=c3ty·t;!GiH:: Ϳ\ ˙YF؏ ҷt4VN0/UMHMZӻ6ЉgH/q[8sKv$"c[B- =NK34Rg$'8t4o 1NKG[:C>˸@lqem5 =!;bu0RiR9.* MnސbKNFbu7EnWaa˛5?Թ#Z?ZEDAqWc{C~WZw5H`3@q[B0K4Hۮ~iM|fB7Q͂q[zCzX>e*-y+t R-y;x<tW!z- 3CT}*!]::?-!=u~ ܚѿO-.LQo/mVmN31%f7 -Ώ']|KoHx<_q:<M'?~Wϟoc<5xb!|0d5>!^"~l+_oQQ >OC|DW@|E1؃?#۵FMKMk¬Rb{y۲v/x#^!})nxKcDà ăRmWc6rASlZ>iLjTb[( )ST-|#p8e0!2m%sң=w4ш'af$3 ^ʞ`~B?leA>Qڣ;Vcj=~Roiì4>Fܗ_/QG!-u=2g>4j1Pk<3&z#a|BfS ک!?ԓHNI}#i3I^45 >/̝u經o_VsL8IfA;Hu|>J}!iLJ9Hv3֘m߃lAq }Ի )O)sggV` 񺟅Ĝ*d= ><DA{K9yO1foY!ig#̧b}"_vNSE4d? ^gm4xsoO!.<ҟݢly*AU2td@ =n@ [MBԌJ3>!^7y. }^̆ Ҡ30o*A USE"̤GZA&UbRj| 5Ԡ-rߚ?5|=\yS cfx<et2vC 0^53CBPW*Pw3dC =P 5~ jn[.|B_s}S iDr=S 5Ӓ!ȅ+ĻL8ȅ|_{U 5,ǝLB ^ݛܜ\'B A*|.xBB ^)A 2!ԠB&3;w1ң1ksg8OE jEZdC ~B4A |lkRWl{>TƛAz<̍uHl̍5!Pt8*ȅF0!>3kA.; eD.Td6PפJ!\{\Ϗg6!PaVȅwj*oVB ^9U 5x<1a"jY?@|3KA*T`A*Tmw2҆ nw2 ~j \P̭o7Q\AP}[Y̻PiN 78ȅNjJC.TowQB$CMf{$CFt rz3ӧ!ȅ l"A.T P~3P~SO=RzrA.TT9PScPT j*2H ՛]Ծ�ro@ ZB ~C%Fo/D:o8#7\[ktpeio 8!H7ICN+՛) Ig uiC2&D j ĠE:To PPBx><]Pp垜x*Mf3!}މ3f{E:To.x0E: lVčUC "OHȇD">da)]x ̝-mbFUC|a (swċ.Q D-!^Xėr4j7(<#=ڄxfhz C7oX8!aQ{‰Һʁx1*8AE ~…1E!>t ѠpL1 sj# Ą)x7ėQyhnpxx*>8Ĝ 1j^NhnxaP վ_o>o3)?LjC|9A DVځxqJGSʙLwA|mF9sѨbeS zBN*pZ bM ٍ?̫KY.o#c +泎[w PpLx<3 'P&V[D臸ZD=^ ޢ,׆9P!@vSďoh&3>!RO1ONA|a 5k5WmQo@<y ~lVMxKgT:MHe4_L87)VdB (̂t{b 0Bvn{6Ĭʹi [+oF<We_%Fm̔Ss_ oF< zCz7-\6#ˤK%?-^a+GU 1aA|m;Gvs.x6nMΫ]N8_=z{Рqco{K3#nCWHo_Mvoy/MdHM Q)9gHM?L'!!J6E\ Q)bH7Eydcă)'dc)%ސ%#^ƀ!j=>̝M K_*dSĩ}C>l8oHMUl(qcƆl(qkc߇m3CɆA6u֙2!~7 >̕ooyC2l8U1$CɦSgJVPHCdcč P1sqU)PCwI0;C2S 1Μ]oHM~4ž]$ J6E0r!J6Ek3$Cƈ! P1JMH7&ɐ %#L!J6GܙfC6S*dC 5(<-4 QWMȅ ^!~#a( s[̐%>m > ^gDLȇM'X P܈" =SB>,n-f|oH<SD>ݚ *7C >Eko'2U.C&zruJLȇM)ϹP*oH< lȇ3>%|SN|a!ȇ|z1^Iۆ(7%HR{SQ(7&#!J7$Df QO +$D ~cjt7%Xa"j'{C醉?'?tc'tąT~!J7K\W!tĝN#J7J1"J7I<6dC >$dC ~^{PIنl($0o*C&ǐ%.TPQzǑ%Nt((qXG>nx<D#!J7J<ձ#!j]Hgnm љHr#!6J|s_= ! QQt8lĕip$DF;'H&͑5yꙄSGBɿ=_'' ^TGFཀྵKGFmt#82v+9Lۢ##6L\_(0qibӑe&.ȉ WtD6c^#%6K<' ޞhf(,dcD dRGNn?Mie%pvȉ?̝EJm<HZw7#%6Jܨ=Rlg!fDFg/1e%L#'jCu9rlē9Ñ5x[^#'jqq9Q"ȉZg0R#%6I vD&i;rC)QQyH?eR)QYƤ;Rߐf~@|R>H6)Q{_6ǝ8"ԩɎ$s#'j1xb?̑5dn-;&yvZGNoLĨENo0y(0qJ?vDS^8rv>ҙs9Qa~.%GNox<>!>:̑&L#'j秷շ D ^tʉ9QߜxgI<9ȉ|ͯ'GNԾa"'7MPȉM?L#'͉'{DݜxǣAaܯGJ,Ґ5x#{G>o8uN#!jeIW$Dӊz#!j\tsgԑ$P"$D&?gv QIA>($qe)QIHMw#f? )QI43;Ro'dD&G+\׼(Aۛ,AQ $DfF $Df?EkЍ1@BTl8H7F $Df`o3x0h3 Qqĉp QYlfń@BT,qg~=o8S $Dś%N-ga :?s_ + P[LcN dC $CH&@2Tl8 $CmQ9 dC ^]X% jo41 5MvWFCmAh@:7myMI߁t7mbĩ@>n{CEܸioܴ2'!> ?smiӁt7ҡoMít PZ.Pbĝ C&wkӅW|#joF@>TlxU|0G2?|1#j=?8`lsqib|,q4CfǏ|&rĩcPyiD:Tn,9PQ̈́nҡ\C j}6A:TʿoC ^2K@dCLPQ.?5(};f %TPQ)v *7K<E2 &^LZ *7L=@6Tnx3Ɓlr 5xsNdC ~3' ~3 ҡift8q@:T:M\$D Qo4uѠ͜{0q !j0(dD ~3;̍-H`h8mo C冉C&L\ *7LJz C冉bu|0 Qȇ 5 L@>7" $D >P>H|/h&N3sN"!jj|$2f-&>$ m3 6LsQaɬQi0w6!=m&#8M/ QiH٬@R%3;a~<%6$%Rjċ,LDf7H|ÜHo=X(D%R!̵AJ=nDJ3)Q)Qe7o;kēH*{c"%6J<9UNF7ӿHNQCQQ=ʇhn1ߴ(8ľ@"#⍜fcdDf̯/3%އ0QiABi !j)1 !j8M]4fNW$DUibP!!6K:"U%̶@"!6K<bjqkU%^DC"j]|:ĨB>7oڙKm?J̵w6a ȇM37oUȇf'%>D Q}޼if(q%% Q4/ko/siU AF9Lj"#7J\4vo O7dϘt$>ې՛$3zēɶJCC\|$qnA>0Jtou6 uD:noCDl&zĹdC+jȆ 7؈D:Toј$q8 $<Ȇ /'p$scѐ67m8 ;5x<ɉtbҡ_b>> fH WjP]oڴ2> >3E4CrHZPȆ& ՛#v!7G<>B6To8_zs: xflśRlŇ4k~|0w�~c]RZ0qjD' P/A141_8ě|\Pʐ_ZܵGvcċɷ/JZ@/Zr >ϼE KРq=Ե1[Yx3k!{ sy;_nX #L[^ICX4qNf:{ Q"/kn_F&s̵q7ҀM'CJ7IY*o oH q=ně bځp=U&_F, 7HZ&Ax0AedćsK/h qސ.Z?oA`_~ 'n nCQ!LDjT.CjF}�j1yj5>_a™v:e|b l[aʯZ|SZ|E1 h_\" %&ó!~>ژ2#w$vSB1IB}ECl:xKkfX<ا@|%uk%%2UN eRn?*G&ʄʢFUAΌx)ꤚӲXu >qŪҋ qBcvĵ/2HmaCSef3'!~z& GV5ۺ1X@™ٸјqϡ }1֧~S3'T11Jm9tC48Y2 >ژc|')4ҡvswU#j\{xbVǍtϋ'ϰcP+ ^_/M͍|(qbF@2԰1#j3yl$ClR#j8WHosⷱJF2gH7sшչTT#j[S',\(ȅ '&$B&~Ȅw2z52hs_s_#jI z"j.9Tx#jz拔x 5x?Z@n?$B&k$B3{D,2b?vQ|B&])pȄLIżg 5ő'{B ^%oB ޅl@*sT( qH?̃L(q1IALHz5HLxrȄQ*w 5xUhnB 7΍HO Ȅw ȄY3lF&nVȄMʂLtA62fqx: 5x18PwKf"j[ ^ ~S& 5 &8ȄsC<ȄM Om@8D$:C'LF"Օ Pw"PO|PoƬm?Hz2LL~q2MgKdB_u%UȄ312> o?S A*3'7rg 5xnPm!^ȅ`F.Z P(iB ޣx\g4*G2g%t5<LT#jȆ1ylg:ȆEȆҞ[<9 ŴVP,L*t:#מ=סo !Ko@~gc'w-;aׂ|-g /j|fz@nH0|ym1GW? =jqȟPF'~@~V3#S$_sN6#LȒAA狂9cqG1|Vgjlwp ]P3]G6~Dm^μ_25̠L H_dM!>0Ҧ//3~75=z"qjSïu;$4|yoOqSÏ?Sï O#+T(o<D mM]8,סN-&FQfm#!_1Igoȷt̽{ ~&O#j{̇2To~T`V'HMO^8ԆdS Thf7$T _\ eJ}[ j1`.R_rrv`>\$U _:m&V5}W5 so$}C͑\5|>CP[GHA}"jlpk$X _pdX ߔ:V{9V/ՇZ= jWjL3 E9}e ~ߐg5DᗒdZN_B(?||A5 > VPId[ WTaVm!ȶ|2B˔Sm:|=Z"jfέ=r5~1\ ,�rabiȺ =YWÏ!.Ak~(S8ȺY90K˞} a>~} -0QW/7E~C3Y jBҮ_ۛC~4~<WOJ8Hy! iWß9 ߹7_/A-oqyȟ[ <Ⱥ~&2|4|gh=^u5|>3;#jNIIWÏ~@~+.?o`2 _/QL?-|4ȟ03r_ȹ=<9W×|]ك[�g\ )fz@drvO)E9W×T9W÷4&!ynGR @~%W9ȹ=49W×4fuW&qS)WߐoIΧ4@~茶ݑs[Pσ Eڳ;ȸ~ qr2_O]|0v'(m)ȗC6s5=,rD8ȹ~ _ߏ,Ωr/ۏLnȹU1wȟ/qBr09W4s( Os!߶]H~r?R_m )W35E𥃪 j>wȏNj jWo~ j!#􀌫Q\d\ [( jC=ȸgk-!2+0 WYSo_\ ?o.]o[%H۝i:ȹ /$] Khֿ$] _rU$] (C|n3zs5CpS>?_iۉ 9qIWoy~VJ$]b̷ j*\ j.„!?E()Gt5{ Aլ_bԷ j.!LYt5~, j-ɜ8|4~e/u8U=A}# zķ2'^wT텔R!ug")Ms5Tq9WoNv>'PN jI7w\ }ĩ)W3hcy/W;{ ~\ ?͸냜᷹>2*e-ȸZR: jnAp54$\ 꾿h aʆ?Ԯ jg>,p5p5Y Fo5]o5||VOnA˽ZnU=7R[ _r[ /?"ȷ~t ҭAɪl~r,ȶn+ j4 '<jGSoƨu?򭆯ma&[ ?wψy#jB[n"WgVVϤN~@~"̫V{v )Hf7{= [ ?jsd[ P" ۪ߩC OP ߇wfL|AJHjtkqt{Q jY0}|lw?VN5Id[ _׵e>m5|Clg+WB{`Vȶ|϶{n5|SF!;.AgmBtws!Bt{zWYS[ Ef|!j<,ȷZ#TB j39|{[͟*(QlyeN]l asu|p)@ʽ{)@ZnA]="Ӑ<̮j)j y oȗ: 223;̞!Gw rSo{7Ǿ"/שY; *rs}UMM CC~P4zY2/I϶Am =ۂ)}>_Ԧ*m{PG!ߤډA~ ?(C`0U4~g顔(Մ| OC~p7{ PϏ[{q&/IEj I fԹjŭ ahQj )7{uQkQ P. o.hWg?P]-yhWf~xW/sjz�UnÂ::Fv|EW]-lǧ!? ]- 4|gm;3@|]pG?_ _a$+eVh+nѐn\'/'yv}7@8׌oԻ1 é4˹M4v}@[?ܖ { >C%8%PK!߂ 2ߣNG-!B7ߣ%P *ȷS!?+{߹vQ\ݰ%r6Z!ʆmG(wߣn/m4|7:]g'K*Fj7{ȯtleHzA )W×L&q5xˢC#]#C+`jWʐr%ΝeHMOWr%T'!J6=]c 9W+\QR!J6==(ːs%Ԯ!J6==(s%urVx"τ| IW÷jjoHO2$]Ƨ?֐tQs~dӕHOC֕l~Q_+tnݐuw{3I*+tϐu5yC~lGwqlwQ҉!jt$x|fѐt%~ߏ4s!J6>]ߟJ0dӹS IW' IWx|jzCL}C7ȹ3N!Jw ro<>u7_~ds%>3 j}77\ͫGc 9W59W9W||+ty6$]*ِt.T!J7?]+t{tӝ@ҕn~:u!J7>=;rtrA]~V+�C)ᆜ+�}}!J7@] FrtԝsoCs> (WFS[~"Jo:+yW\!J7B]ߐL˂!Ju#Jo:RS^醨ס6zT!joY#Js/9? J7E</w9|6o:+}Sԩ-2tS]Ad^馨eȼMQOjW)IgȼMQG(>^52YqאwN$;Үt3ԕ vd]fȺPw*hґveE;Ү솨3_+u2HN]xNrd]ٛߐm;:l3%:lCUFGҕ uf]H:lCԝRIW!\H#ԭIW!ȹ'ȹ~fS/+{Ce\ Qo k!&d\FȸP]);s/.[ٛԺV/1)~C~Ct|+GCwg ][sIGm:;lԩ#tu[܃t+F]|Nu[Ä�8ҭl[3#蘎tϲڰs[ ?CȷOy="tnDm~e|{Â>oe?U |[=NHOtV~әG釪 ?tnDo~JŽt+t>n5S! tM˖-)@x< q([̑mε":vf:Ie>|pG=:-9ޫk#&N2 2t{$"lUb,ŭUFqO10ﹻ1bAb:rGb䯵)BAb+)MJ>O i\^-Hk%e\샴VR6 VR6- }OEi*.Z1 }zp/HkCڏ Z%_7טUJ~T Uť{QOjHj%垾Iӹ)ӹ2qAJ+)GJ+`Hj%3OHj%eΙ ZIۤbO2O7iVsw^𢡄Smig%*C_Jo{_ڪ.ŕp?!I,)[iy/JϢHnP$N_"Ue%ΙH*[i nW2Ox*[i+%WQPM**\%u )sjE+-1)\UVNeHpe>cScd ƅGJ<=9J<KHqUiQ9sR K)R\igJ7p)i m2.`4Weɮ!Q$JI>SHv|T$J׻, U= (% TҲP:k*]i9OJOHt堾Ԙ"ѕ:PG=TPJA](E+-uȊTWZBJN&h4WwE+S&3DWsP'e0Ht?uBJ3NCڦϘQ؄zYSrPDTWVFY*R]YY+#ՕS.TW(o\_tE++ HB}C|O>ŞHuU1 E++ M?Z_Hvee~*]YY AR8gcHweenT5"ݕzo됯nK"U݃2S$*UPpXE++ uIB}Q&WVꋋϑB}Q7Eʫ9_BPLE++ u\),GC]3 R^oOC)]"UOe1㏔W/||GʫdP|~C=B++uő"镕:aH{e塾}C](cE++u0iLԍ&+^%ކ-@~uu="Uw "啕JB),'WV]yo_ې?{0O*gHw.T6CGM_oEs:9 {rՆtW^郪X3O]7OL ɮdW^R%]y 7<-̻!UcTc#C̥L5!Ur*oeHt|YF5$JUE x*a9so7$sǧw$rO]y/!ѕ{JDW^2N<pQyyCKo]yy{F+ׯZ3y7C+/h )͘!ѕw$ÆDWɏ8[z5$J> =*~_|;:ڊܿj@OJ>]1/R]%_NP^BTW^c2 ?dR "UwAj8[֐*!BE7$ShHt-N]%_)ZC( ~DWQs `F/"ː*A}Qo/Sf{F䛞$J _!UMr1J~OFnHsGC*4WT!U5@!وM I|uf$K$Wy;N$JdH Io?1>Ɔ$Wɏ#BCI!U! !U6gEW)}QW?!UͅWƐ*Hnj@Hn|qɭSJNdHnp-!UxA[%GF& U%&cHo|w; ?߬g j(R;3{?[%CB#U2HosˁlFPj$WՂ|͋Z Cj^U5>klo$W?{uw *͏U_BUr2>'䟡 ~C|N/J-S^ >׈_!A%}k~|jE79w_\T1 gn{|jx6\}K/3_eJOIޙekIƙ8G7ne{@Q ֜$|]j{C~N7Z9uWoqAE[!k㐟+7;_ πjq&L?ɟ/SlÁ*Vo2S]W IjqA :80qÇs Z7'q *~`>( _.(;^ٹ(~I-\lWůTh W? m~jqA\GW,]uB%A&?!?OImoy|Q 䯳)EB9jGrW .gkW|?ۀulR6! mAYmCN䆖o.\fy BIkw)s ;ك>}@CUO?":^|A ]7g=8Z9w`%NS+6*1!>Sʤ-P\n)W fxbB!]<W cC~sRߏVo;@~@%-AROjV:k BѠDW~nHtB}LF Uۤ}lI}BIA~./JTHt|/+ghܵM].PRDW?&=*Z-"ߐwQ/̩ Uq@9*ywuJTpHsGP 7\%_s eݹގ$W%b)/X+_<oy5!?/ق4W5vNu $J"7\rOEU\rO$W5us6/rj(䟪g _iLhDWuġv7J 7b UO5*F iaԫx Uj#*+nB~rW@[BsʥcQNDWPN TWɗ! UmeHu(>5>`f2+*^+KB<R]%:*btj}9UOHu=/sQ߿ &yC$TW2ѧG W:? UrLxdWɷɕ]2Q<*NMG5@Ku mmn"UZDPߏ֯+-*{ eHv|Y61ȷ[]%?yArdɮlɮ_1ɮoāHvh7J8]%[ jHv|BY]%?I5?}}Q鮒w|9Ko#Ug$J~O$ͳ@«9^%_gJC J~wHyuFAoo_W~V7PFo oUi|ɼ_$ d1m@I/Ja|?!_D/7aP!>ę9hyI&_ ?O&||Q1||T}%!?tŤZ˻#);ߥkgI/: MIPg?GWn+_m6{")ɔ$ l{"Up^diMOS&9fV!?̂ZH{u+/n/3x8W'wyAګSVs.f")+<'߲Rߌd]!U= U-O$J~t9^DuBXc3@v[$J~B`J/*7W.iΗNAګ|j#U%wCګ[I鉴WsPwwʱ+,=#UwȠ_!^r4HA~uB7$J~e~|WoKL$J~])3JI}p;^IYOoYon 镔Eʫğ!\f)ԅ Α*cS||^#Ue)&z@ʫpe0h` %_ X$_!_'W]b b:-$Rߌr#kF*g 0WSg$JO]Tn *ƥV*Y1/^%T&ϩ7*+?ZeNյ&? WRfꃻ|!ᕔ\Tn }"Ulb'@ZT]nϢ,U  _;]r  yZHwKI|]Fm鮒';.ի U MILB&]LrS_\-7ckoZHw@Jnʖ! }>-l;׶ADImHw|1}= !_>鮴>JM}1p fl%oSTuwu$ _ t GWuC`+zuC867*zL$2SDz*WyS|#{85 *LJa쌓VoQe!r/]%Rw$Jp ]%߫U5<hƯ#U87=* {!UUb ݕƯ42^UHwe>]YSdW6 9ܑ*y&]գn"U¡',_J~5CbsJ~#鏖oέyab[Jf{Fu&u7B++3uN?D6'8L}qwk$2S\ ԩ.7w; D5vW_dUD«W3a~_$J*n=] U̘^A?_Wg *j1 !U|RʍWVꓱ[ jOjHy|,f斓gJ! U Hy|ui)`h柹r3R^%9Ww1*}QOHy| J{pʨ?_*}WVWɯ^t~|,:b1ВSV,J R^%_ϤR^%߃{\HyUEP/Wpc )Jx*'Bʫ{~h9-J N*yyR^%?]Eҫ gF=d2J,$J~b0XHz>Ij3GP߅WUwHz2<w$J8'A~r%ch7^LBҫy!UʨWȷ)kQA~L%'ZxRu I_ǩWɷɜ/H{x_I,$J.m:ȯQȯWɏu߅Wz~\H|tP _/B[u`7J~kB+oVG fG=~_|ًH}|QoUB`Wn[)_WɗmTeBWɏ"Uoa7$J>z>ZH~|9 Ul.~C9éAw{(uBCH~|9ƨR_%ގgA7*q|Q}pmrTTBp< oRU ?dS꓅Wqݔ8y!Uw�WQxA[GWG*W!RO.J_H}| UMWV&_n z/*B*_jT]Bګj@i+^%+mYH{|XF-JXA~$^uo[mBګKu`JNGJ~ U2 9>w.�4n!U2,ix6e!U_(KurUOoFg2gU!o4s9@{U:65>\!ܪ0|pfZ!LwPÞ%`~o4A~Ģ<sDwW;&@Cu)/5{S!ߪwNΰwO|OCJMA5 L&cS||sŬ!z5ZA]3k)HB7TZ{/j+ jZg]BCO@d@&:۷B~BVoy(ey}@c>5}τ|%>h&c:gC~t25;?3^ "^G!g*ڷhUT/ 4WufC*/u6\E]i@sUϲA@sU|]F=Zo*/֗qȯw' Y5?uB~e[vd|~C/=_nLQ㯐y@PmEԅ>C~-CO@Έ ]7$?!H ߜ۸k@5;v Tef~@}ؙoh~_*i~߀j@e?}@U ?8Z ljysNs< ~K(S!!P/S_X SsL ~KvLW|'k1+U8? .{GOٜf i5b B\%__8>X,4WɯnLn UZJš_!ũAzW/ *;I$Ze *;9U|WAR]TJf}!U.:Hwnw*_&t*hة!j0ɮjT U򝑳*ő:*GUVsRg#R]RԏﶆS|vN>9HueO$J&8Hw|Cޔ:ڑ*ˌXJ15J&Z]Hu| U*r@FɋDW|G *ujAU. 䪶=_T$JrNs*3XJك$WWzl$Ja>)I<{*u5<5)nTA{~?RzN)rnHqC6q8HqXPo")_M.EA<R\%U1s|!UO, U5&dw*R77 jx6\0 B&cy*Hp| *WuN{*+>0rVWEArW Fn{*/}s ʂ UK BmnHnjqDރVɯTɭ_-.*[奻Z\(5₱<Hn_ f*6r28Hne>ZSŸɭ9}*2)5Ar[YSã3f{Frߜ ݐ*{r7wJLhx*69[%>=3yjG>ss glHl|JA_[Q-JV/zE/?HK [%[0_*Qr>nb'Hm%Hm|YBOAjL ZZwU'|~@,LHIo+Z?!?2&Z= U{ Ue3 Um@*y\*)ɟ&.Hir$JC3*r$J~T Ցo qJ~u.1YTgSAj[U1R[%?0YGhu.̛ Uߐ*rdVɷ7kf"Ue+Hmu,_Vk2.9VVɷ Ġ_%B*;Ƞ?0^!Uꤘ)^ʄJDF8 R\%qJSr@A[0 ):ւ$W2kK* i]ԛ U$Wɏj?HrTrAjÄHr|QN}@Ru$WI5$~($Wߖ˗*U'Keg*VcGM.;$WrsRHsm\ UջD*fiF?Hs{$-i͹]%7jF[nUR]3}sGJC5_J *=TW7�TB<zJv /&R]%ߜ+fJ~~<U"HuWyPaJ=yzG8^Af']%?Bɮ2]% !UT#U0㏔Wu7\z� $gCK!U5W)j/#JBuHJ)Q2z)R^%߇PSEʫ9"UO.fWJ|)#(EʫJMLNyH{5SJ+_%Y*>` *547H|Q\/_=jWגS|jQChP&ZRݐ*ZىWw"U%FלDګii3>Eګ{٤2i*1]M W)CYHz|-,GʫRW,lRR^%- )VHy^"U}XeJ~f**)NwJ~Te)^%IYlNB*ͩߐ_iI;W ߷/X,m.5ȯ!LM** cPIL՚"U= A(^%LEҫ3}EҫD(^%p/Zۜ$J~y-R;$J~5aW&(^%ߏr^,h0GW/GiS*աyV$J~u~_|;oD冑*UJ'HzubyPpEҫWEʫRUe<WJ~U~0W?r!R^%?A] Q? 0ѵ+]%Hw .9 U]K}"U6=Hwʽ1w鮒Q5鮒5TkP J~e/C3AEgŅnHu|ϻP|zP0dWɯB(!U38_6Lє"U 6 9 UOP' ?CxR]%mS閭TWu0ۡ23TW__ ~C1LrC3!U݄r04 ~Uj1$J~FԳ!U=I+\UT0$W_Υ I|s ^+7$JWAhaB4W[` ifqusaHs|)-ߜ[(N i_m˩iD@$hŢ4W_C;ؔj*ywTW Oꪒ!TW_N5J 䦾@~ EHuks7ȯ6TxTWɗu6J~(CGFk4΃"U3?R]%\(3 ϐ*y2ks _m.5šO@MpƐ*炊ϑ*7'g8cHu=eC?Hu|B~| ȯVL]CX: 1JA _[*wnHucHu~Dφ|Y;/R]%ߪ "UcgRm Ť~_j@ˎ3$J~A> B~TW{O*TWɗy}_$J~CHw/gcHwKO"U5<y;fJ^ '<G(3I)R]ER]%_Ρx WjH,ju{BcA=] UYqB[ ڙ_훩5JFyaPTWQ^|CȢ iz^4W!E!7KlwՏE!]sTfwS~\!Nm~\% `ZEt tRm.C{|G}S [/? T(+C>lsA~^&7>'>@D9O0JrQ ٧A~du>Jov(u_ÄzVY=Z\^kC'u ݖ@~T&j[.R29'5?ŹG _O0}uuM� QVN7;V]Ѝ6Ze>(MoI vRV*6U#A7TY7K(e@et˼Ж$7e ?w*5sJߺG˄u:ʂ3 eo $>,J 5]ר\jIup>B.>!tE˷< P?|f|ȧ./os֮ kʤ_5?ebOCNNS7|6E kl O Z|f{>-1&n yw ZMC , Wpo٨ŘO_P O5bu U~ \wwG7\>%\A)y5~-rQEL_%xfXQ<67 zp~]>HuC])U#*u5j:nHtUoUK3ub,B<VYO* Ze>b@z3ЊQR]P,B}P\>jYL-t UIם/jNc]rPjV9+HuA+(*1JtHvuR $J9Nɺɮ_ JHvUTlHvB}Hv\ɮVY*?_~~DPvɮV ^U9TW<s{C&_ wc>N|2VTW_K UOcZPg2TW<j|:uBPlɮE}1tWo.䗋:; #&HwE]'rHwE(@U6F`]Q\jVJ~/]%Ԥ]QDv٨IOlG]6꛺}!.3j$壞|E ]Lv+w .#u[ ϑj:WrHwH)'@ <,]%-]2R'OJV?>FtW;>#.'~5tW<G]NBY]^eR3^rRtoW?Y-^%_~J]*O ?ZZFn0tW/a U;Hw|u#* A^^6]2RX .#E  v/m vW͹ *u=Hx#7?5BO@IHxU\ O* v!?/G!U .#ɭ/$:e>:_*{,WɗC}CU# ӗ,}yi3H{ U%C}|ȏIyV쁴WS^]U6Eyc"@SF T&}_/:_%W_/ҝW/G'@~Rfz")4iN/&^Q8wȷE9=WɏuGګ#J f*03#^%_zJȏ 2R+=>M{ )#utf$:夾:*!ձg<C@ګ*a~^Jlgn{ Um;siNyFz^RQg{>_e8fKO9-٢ 1?l'vtwɕAGGQȟػgoyĖNn$yv6̘?h5{/o逽7_vp6E~zXAI7y|zwwzf{�lTV6*jmjIRշrio� r? *τz, W⟷-m jEۘQvI[qIC]dc(l{w+[7;N^&mYT+ֆ9ك!N�=<tIiosunY4'CL݇oƁ2�*r�{~z<vN.u!ֽ to Wki}Kسn=dT&k ҅Uy̿U_;صsru>٫+ `Kk ܀m{sI=x<~6g;Z�rХ"Gzvvۇ a7;[gC U,nm6G�X{Nuz�lK~m f2odO>8+ki%M) _85٧hesOH_n{}[�\ۙOP1 V;cWN2-6IJik~h,Z(-`*DX_RjC_=iF[\j5XY{2.۾6y%{u5E? 2JEL'ۺ^&9'krk+H:{Ksx~KNgnݧ,�{]Ba=M*Jv ^g\Nb>&I*-oշyA>{o~2{L2 s+']w=_swJ NƺC40=2ξfWǸ]}w Nw^zUۿTªUǯlk[5e BBZ2>|>ͼzYǼvT&߳E}^~); Y}L_=m1Fk ̽}.M"9j�{]fb#ޝ_PϖNwWWV!2r9N>mL<غ.d~HzQ%/ey}lwYMO2vTJ_TÏe$٫m>sO+K~W:%՘m~_[Z[/>wdM#;ms.S^ݤD&dwA=}F@<^dk{A!O<`,kPns޹8OO{KNXv1}mzng6V)d!y-cskQE9= |5yM@>z9pVz.UeZPZlU+(U8{LdKxπMď9)XmW=L.#˟/l^/#ٝlv|ۡ9}~#Ewu^Y`gbk^`˗sݾ.UpaHi J�[p\�kZiW/ eJD[Krǩ 'yukr;D_Xı�>YU]~awYFNu!o~'Tu&1^^ƭMf D 15﫫c*8N;|=(2}>E�5%5_E}ex\yS_lRdnfx-"v{FƨFU }̙l9zǀ~ }2_)k ᇤOٍ:xx@ f6]n!ɶۂ ~&.F7RcdW6n0g8.MQ }3~(Vn^mR q+xΖܯ!Q.gYǛd]t_n 8+c.NGz6@ zqc=v}}6d1;GET8&z3oD*L/KYĻA]uy| Cv+>WtUETvhF5$]#[ ?}}UW>p ۷=ӹdkӐ:gQ&˹-| آ}9ҨC,8OݮKN6`٧}<JhLzBl?}ū6ZQ{{ʽ&\WMw]N,e58Mn ^n[on Ĭ}t�%7Kn.GURIU[[IB{[XC2[UUUze\I]N:aUڄsus�[GXY�w{k[U~q\b׆{-)v+/ egd'^9d}mQUQ:[_`[>J?LjxNKǾ#Yth\bg_,N {:ll$ mE>K?`e9B.,/vtNtH*s8.a|+҇>{k/0R[ds }yew5ޗɳWNT>ڧ&~s^g=^e>Twt^W? ?^<&WK犻3=s]ٹ%y}48_BX�>l=˒a26ճ<fPl.7Ssq{f59*O~^_CC/Fz7ME,d,Ѥ yCoӑ8q�-Km0 =zຕ,;Țbn^JP:-d!=d7at&` ?wV_]&l>cl~<%_%,yȖ?]<l6>3Ѡ\ Ig(U[/nl"3_U*rݫ<}v|mmz{�wyr^ &0;+0{/vytG$Zqrg%e~rynꠀݶ- ߝ]E{FTg#TzhĿǯ7r;N;o`}qaUnd>&WrGk=[I݃^vdbυEU;.cj7+ {]Hv!Iu&(SgǽO0߫KzbnB*5.ԸB}7f #*9?�&`*r#'g52zؽ'i<'_]:is>b<GzJ.ir WWs?WdC~ -]8-Gcjg~O[ZUx/+;db$deB/c]ULB0 OLRQY?X+ J1/VkrHg�}{uta~b~Mz="<x]lVl\.ĵ-+s=k^pݚk<opHю W==;5lWs },lX(Ѹ2dоŠkT]7{(x1mAX-Kt*oγ'"QnZ틳>:`nIE^^;:@/Ǿ^`XL~*6(ۯ{hRoAS3$yr ح�~]Mv[^83M؉F'E/I)?MkY1ܹd IRm^VgwM]. V[%f٥LD;Yr=6گנ I1Pݱ#qʐ)syn%9{utbVu2XّzرrA%NUG{D}™S\NRHgtX_np~ar +2lᙀ%xΡPʿ=]U>[[dZj>jֱ{[_ءNtI%*Ll bwt7�z>ճO[\&&?{^lê_�G}$Z}R{춇VMvRMzRN-@0> wte-+ Ԥ[,&35v/ٔ:0}]ZHN2rx\d�l9٧u�0:} RdW(y{ψu�I.' jl%lwbƹsf7KJ,ɟ~nu3K^.-!;fmjP=&vƪ@䉖aL-]l}.}i=wWN}7+ L>SHi{-]_,^wWa}tU伶hHKVĴحdmtE]7 Ji2}w�]3D�}|*EX7w<�tt G|O VA'_bXG ]}ڋ&ٻf}ȫٞlo,ќ"(##D)p2xv/ξ%{޴%{c%Zxu꺓.(%Rm�qdޝzޓ=*};3||{o{-<7`[!eIU}Oo@Vb&l/<8,<cfK.gmߺ}c1xꗗm}&$ EtG^8[^U<0*|h˟Jgq|py<=?eUJ6`7jz-BVT]KNh&ٱzX+1}wdoTrݷ]pVܻ}싋KcM8ث;l�骫Hlk~}6zwGD} mp>}ad.þ$l9ϝbZR~_9bR^85.gV^A7J4}�vۍq=O߆YW1�-\趣\YLy1}EUHj~nCS>Zo~n_.}Yn*5حJHeWJٶMsvV{t(?><ժE{l,7ڲ&m'og\N{bQ`dWu) [>sWG}Q`T{& &ٮG.%L/�rfޣj::`˥sU4޽~twx[W]k? >zͤ+/wṓs.#l~Q>ؽD_[`LNj̈́ռ2UaOrv<SnaS<E8ԑc-"6#Oky_9-11RsY�P ~iH'pX<:{@((|}Fm7YjFo h/60:.v\0+>cیz|2_W7`/e’R=S||�t\n_]߼sZ߄M\L9[ ~Yh@.J2:bv@Bbv4wz}'u~ܱ.qc3ѷ9e֗F%.YlL>#|r#Q6ezB&l}Lx^n4̊.j$՗1sITˋpgxb8MyM*�ʻ'[עz#cY[{}5DYdSWk{F-ǼFm3| Nto!<;D`N(iv]]#aB{us7i>luHץ]dWՒ^ qvYc!*1FJu#26UAwߞk\.amal܏5ON" b/ ۇز'6.~pBBw>ҧsb=f-[VحeVF0vٌrVJG5N6,vZZ.!/NX�:fT{8}s>`q) 1r>lD g~qW\$W &ئ[jWU�vS[!F<wZ}w`ҝծyTnz;.˵h(ƾ{.^7&UcJL@ =$i&5&߾q'B[ժeY}iB?ό%]R6ȸrOud^ ns S{KHbmdr{JJlvooOmuOfٟPՈt}Ec )HЙgO,-Δs>?-2A_l^Hb}L*/{G|@nW{ڴ� $ϭ9B{{CϾ4 x w]g3j\%ל.BPlK춿|mBrf3%BZc r;`ko* [_Ѭo\=;{ص.Sv*?.+ٿٖ׃<cJ e`lm'/n8Q|ї�#}仉 Ihb)5hYU ޹n.#uk=ֻ8}0I6]oN7 pV]ўM5nS K?y/Z>ǘ5wkz^IŎ?b?&qq-s1 [sg\;e3ur mGJZiR(RNhL>JE:|2^3fnS#˗RA.<ۼdmڡdlUki>\*}@&! vncj }o\ 6`t@z ľ:Rh+Z٭'yV8`,8wqE֝w;mJ ! ~|諔 b\!LSEN|zu<nDBm;>ݯ%jh/ wEA_b6j~uRO}mぶ{_܀/O"c/7WiT k~jxY_͎wu;-5t]~͛wE}�쐜oyOOd/ u|ѤS5WNkV-\gv~xVo (>zOtzT[mW%ɓ_+vq<ܵBU9fM7/8C >VFn5r^#F)H{l�[;|eַ VP7f_LeWdkbG/~yz?|j`͞ 0iAMR'pG;VV֋-KLzḙHmhij;zG}Ufw Y{)F}4k6D !:sýz#R> g]US~]:LS`pv;�1}w8;O} ,>b%9\9#VŬTr{sIG/J'έs/Tˉ>; q5noPC*,;ervi=f?K\X8#aW\vսOrBο{ uvTaY5:t2+dŸWHg*բױ?u% P(CߺaR]ćU02N�EdfHO (T;� ԞxDD&\bɦO߈< /}&Ng9lKʱ_UH^Vz3IV_LYi%V"uglA)uYўl Pc]3.;rXb  =g@OR&PC uTdwsV>{D!X؁D&d]S-O?$v}u3")M0߹eo'߄8׬X/.  @ml[s7bFkc{g3<" m*on)$8+3k R!B-һv  |®4fl+?YC`Jrmj@{\ Ja}cM^CgL>;}v'KKLdGן_ϳ2d|ޠ!i;NQn}O;F^~7{>_l-ma}mSz?'u_on8d4络d-VHޛYRc>h߷)J5c|Oke3X/-Ov6;b:x8%kksXuWd*Zi]y!: MoY�mE>Lw{A'K͆A^e+FŔ/hJ+;ux}~/u\tDGbx+!TWrp/E;l[}V}U/ V}u{\8 ɶ^O)u�,$d2<|줉;Vx_mґvQVn%6lwdK.]-y.$kr}$kMrհْ}&@6*}O (e4J+͖YFևIEDmH>fT1Ķѷۤ:16Ͽ27և+ѻ8ؽO3}-w'oo,>'hKKGyHNz0!Ly [՗5;5Xߩ%OWooNѶgt*Tgl9[l>rX9fR=zXj#vhdkIy~@츼;a+'LUr^氯I;*nؾ PF�Bx/ㅾ(n6.>4]ؚd_i^V_(J`w>ܫ|KH EZ>!$?j1�ݮ^:>{4/%AI.g@~{v_U&{n1 ~J`t--\?0y^л2$Nv{M}b,nr {aǹZ}vqfh^T6zgFY@~d;msٞɎwZ[y|/62ӣmnK[.tk{њr}~D3?Hϥ}!-l\wIŸ υ|wE]Tʾ鵑'$Z.G7{6#k>Fr].~{klѾkɭr~"I;ϕy];Knhxߏd=9l(=@їQ}Eks�u)d+05kwyB߆7IR~ t\.`)#{9٨ho\*U_w aqVdm`:JI>UDf}%iVq|(wTV?p5q{زɨnNh q5[.ѭfۃv%ZVVKZ%;nSljTIRf[n'Zm_vGac|;vn)4)W1YhY}|3ۤ6MoC=_5CV iTl+/_sWvfL.ٷmÙDlݣ@lpŎ[^ lo]%D諳r{Σ/~5B_V6J&ѫޜK/W/)^/l8(vfE_8$\Iط)g 'Kzc% a:ٛ-ŎѻO,6b7r2&ɸ5oZ=`J;ܘ`UVemvҾ O<踘n=āюqW#s^ׁح+sۖk[uG{ Ns,~"^ƍ-to^j3ˋ/vD2\2zҞr%CvU- cFyf+|\/ �Zwq;F-߬6%!w4`bg֥jW6qn+26r>%;.'qf5<a_:mWcs{O%G/Gx-Qw<7))t__!>L{-~|ݟBoH_7E{:oL4z~g_Ejì{U>ϖnm$[Czzi%ȪbϞـ\zbTqXv-(0r?2v_ ת(I@1ijf_HE }.FPz GzVNU vt3bWW^ƀuaUFj5Z8[db}{kp{&ץ 6>zÒc,ʥaڽ?j]ݪ+ .΅vӪʕxV^\O) wP31{}7/¾. V8e\iHNgQbI62W޾z8S嗊ťݩ{cId,v:޿49]gfCc(?AM٦˜#8gi嵈ҚաR\.4~dCmrl>,9\C6`gi ^%>zQZcW5_ i7j69oa<T!pW;Wwym6_ӷ79P9m5)ua/�aS_U>ڦlnU?/eU jEN&uM~U'bcGXeyǺP`z^oK=z.UU=V'JY>#ce+8~Aa\!:WN)ѺXys[Q܄^RɋøM2j19А]ɲ٧Wݸ}^NZO6t2+7δ=qK*fX{OMU E+ΊGK޺>0)U76x xfڬ}"گ匯VBWt+&FRW^9ډ[]ԊvIǭj.<uW/+im?-gWhRhoK(v9s}/)!{Ht0c{ ì|_jewٵkȥCz_zv^ ^:r-ss1;kٗC9 Eo}�vzm~dBG.`Kq'MI|OTa1 p@b]sdl3�-WUK_ !vKyhjy69h:zPt}-=^ԨO"k\\hآRT;�[7vxn ~}܏WD=/'C�\O!X-?HDΎ?!Vw}"{4zz_ɾIi+#턝R Eigb趉J^y';SvVNW-K>mm$>xK>uqsA%xߺk)5zroRrN?!5Ɖm95}o6v.mk?!.[=lT3gf jU2=:/a\VZuc,˛,}Y*`S1wvb'^z'�y{[t{ v%Ϙ(0{Edًb?n/xف/r9/v%R �Gگ/ `sCKUOЫ_>fLfNf_1"]o{ i)`S:zAϳD踈Ʊ3#dv&wɃ>]mlXWFkQ,@Ml9vlIף?)hLa,DVYi`ϥy|򴥬Q}?%{]|ӿ$Ioc|OkY%emwYV侼~2dm\{Y�v?GL�73;\^OL%BUU-}2SC73Iw6-# a)ٺkl(>a@0U}s`̴1KۻZaCn6S(26,Yorl`},j&`f UѰΎk8պm\/}Ώe׎On |}bs.9onLϥ\'dT%cU`J :U n)mv'qwNH.dϘ Ov"L'h;Pph,^ >6Ϙtw%lfŹYlhتsmH=Lx|%eojd Z8v~ mk*yע/^|o6$=.#rhyir &>dH/<,9z' 1[aCΰ랜U`Wt~ˮNh-35tRyq y~4=]&lTc⤢Yj:IirX7["nqW "eК>èX^S'Ɇ[hu|LtnmuMм"!lv߳7RP 9`pU)jZlBqUˊP̋ݬCVqE/(*H_o4R뫽Z$tXՁrMka'fا/6W}wrͬzɽ \.\eGb!֑_& 7A۲Zwh.O<pȋ_>91ÒˣKLp;6S(߼$\(פ{f D-S!~0 \ʳ](Ø!}`4 wܬͽͺ ;U}]20L~fCfʣDs 2{ KeHE�^ϏM>k}=JMϻA /?5qڕ=G_޴*.0m l+:1*S;n%YH`s'FĕVS5rh}ljf.O|Di82 ͉S {0̓[ ֵ,fc4Ѷ.sWߔBϐ\:+IO9 v9ϝzJ!Js{Co9-N;\+l>c+hW^mxld"T"'y<yo_; |m\5uVSm½Y j/iK I5~r5s!nLRaK&>ڿJ{򎰣w *R^NɊcVʱsJN$9]`~&)<.1yHmѱe. iD#7 EVA+_v~?w@iع!e߅~K3/Xw3X5ǒ s lܛDA6 Xƣ]ŪLų} Y`?uu# jtۯ b{KA;N(oXvGٷ;|g6ss sڗk .'}`69lV,Kjoy>G+P;Qv$;rfy}rs04&vqz`$܁m_??Q)7l�k)=�N懔 h]wx' ߂,5Gd}h[lȩذ8tSZK#.q 0G- ʬ&HYBP(wRMfv:L{r!ˁf޵V'g_cݛ,0<\#<}o4 ې7>P<| WGu/OGs$swBH2׳N?HO}36N_nJ8gfmA+<c):v:q"F#7yYY0r¾S RG ǜu{Ynmr9qgF!ؒCݘPijޛr?.s'c{8# /쒐@Rn ]ǯj^PSR>SvJ25c1?ʞwgNbz;[)mo ydnj<}t30ղ5IݷY3U^kr]U`R\H%OwI_1vH r+YܸJ[7x6c " a'<9|od}KŎ4GXl}q!srp|DuN2oD ֓y_c/IRgMF'g#S`߳]a ƺSZԸ^/Wh?d/ lr@;ADIżm] hwT$H {zS|7&3:Bt?AXURj*O*3 ɐ( 65o)e4Ֆ^aW@f,"[Y;rE]`c{/#!;i,(84=tλx$MS9CmN _DO;9C~yN.jR#\WHީH.S�nk9 }B61ֻɿ9bPa+غAu-"ВMRY"osav}SOizWOrѣ_JO3ܮ.@ E+47pG 2 {w/jS <|zIYluHONU $Y6՜vE_FN㠲՟ؼGꐩS?YYN>l]`cl" 60w먰-=8ST38t? 0D2‰I\V #WV`)v!/X T9r#A(r.]fi�^܁0<߯BGqAq�نEXTؖzլnnht֭ 'C|lMXb]ؠ)SB\:RS,A&KW~ز7`_ɛZj@vW%Qp3'~x/:T٧9X0_ (St=ױng!+pUV5qG[rV,871A N`$acᶓj859iMмҝԷHnVӜ%cNmv88NLu4D{MAQ7txps0MB)w:Y̵o2_A7bC^t͸_I.. o@ ::n]c8}(BS8v8C5n\;2ÖRZ57W\w=`"lȱ㳿ߣ?Gdġo>4Z, 5qp$m'yo<;Y@?m(7]>ҵI4B*譹("9d2)m />v@ϡZU%rlD'2ڌx$ iweiYoWEU[[sF8�X xW,U{b!/uGI_[ݶGm̌Ih ,`\qrc:a�&6׳Q4C]aߘdJv( 8f:#$Nϴ|B2WXaߙ< 2/mK o@6 W}졏MPrV{HV$p^7qލ ׽5]&DjY<7t.d1nި 䔕o dKP<nʭ>+):sn!&&9Zć~1WнQJ<:vN�zpinS *ɕ ePLDUb bTCGx(Y&K2+w{a*kޮEtWxpg^@tl|Q(ϧ+\/\x8I=u'v`od2j}P2jVZ�ԏխ PG,w �횆TO(�{zDL:ּ^2YQ>?9M:&8K9D;7٣[4ori;VvعйcpЭ;8;y\>@vaїgG\wlY|ox]%?)Sa4�^B M2]՘UѺaY[Ƭa,~�Jd֡uSg_\:eۢ"8qrt3]aawD;gbG?cBVu^sTA:gZ`9wR4K&ܒPzPgr8Yid~Y%5ϖrbJK=@@L)s${/ njqX77Aï[ϜY|}!붌$3c^8J̘dž%LU-ZSmPɺhx] E;`%*\gpӡl v휗B܎y jy;Yxhc%;mY tm}FC^$;tզ qϘ| sudʸ8o\C7ofp -6orq4B;-E]w-o.ҕ#c',^O󷝵(}q1%xXKV "Y6u ^޵e--VM =9}oɾe!<k6 ޠXjF`sy{+wRm;ov]N Ov| }s:l!h<>q7u_ʂ5hs<8(Hd[t"RX[Wv+)d#0[XAj~/o޶(A\'~}mF6j\ec?޹gT69*8f)1m;vJp� c'mȓ.~;/уŸZ.A(s]`/c-Ni^v+vm+T뾩8Now7-gZ.[: a%N:Gm.sAHm#0ѫT'F҄,UfǛ-\&o澜ʎN:h7Xunn%;X-YN3*-6~/ec|�c$fR>n1SV1I!p:f`Ӟav]3xcɘEw7vw-V5 ?؟"̮k,ZKnSC*.,KvT|(R_[=B r}d#]VCDJ? 3N529 i jgP,ӂtrB@罜~p vhf3 })KhmK%B<YJ%y;]WsW%98Ykej<no_;z/=868zo97zs+}ٰqI3ٯ0zJ#+Ora#)e6c1⒣N<M7ʃcGD##zּ]2nJ flF 17^ l4 ֬BJ`(Y``m?s1>^i-۲ }|=ծz$f;<;Dع`V[)Y=;Yj:͍ ;K # qЧJ%),9vVVή!~/h,n0-2oJ^v6s6.DMN;ۚ~&=fMFnxcV{-й}[-#*rƮLkЖNN>YޯV~wi>wFj̓f 5>#kQvUzu@h_ 8IHܤOf{5A,ڊ@z9/WsNkewn.)}(&E[e(7M b`o 5c㰷4z2ZS\LVyo- dv:Ob /cwIHJ~oN}mް8 cԑUV~ȋLrdu¿zD]OW`}DZ3etyw IYs@8}Қ$ O劻fqQ`q=hHKMPJ~htmSg.JjX,~Zܑ̤RKmIS~gWÏ^ޤ\<9cK> ?yz9fQ\mw,٪cL|�#W}1OO pszI\%GG?Չ?m!bVj8|\/Лă˶=WCdRGg̨ +ss۬rcʏ cv5fM M)A>2؁O( ('c!+0b,P|M+H{Bt++)`T .жM5H]b!?NpB<y]khNR4PNz;[vLRp~Tc ۘ{3GץFKb50$^,~f5(^nnu�un2thdc]r\Oqj J`rZI>mLHSqHL(g\$Fz+z-l#nZ"F4_[qYȾ[kXߕ$v2/3SמcL�ry[ ,L $y1= S8bB \ Y m0VyК8J hfxo4.5 W OyKm,۱y-�U�ϸ@�r'#6]lwUAE<OvQ` l̐QW\1oA%QzuVVc<9Le9#w˛j"yW.ȁ}o.{!Kf|Ԣkl3ҾXt : -Mu&ގv OizD[|ʉpQ/h]F9/o9Şe- @J@H-0Z�M5n;bR[LOP3VrH[dUة!6P0|19˴=NI?Ა0/6Sc4pYxO@ń=9 HZřןmY 9ȹK?1<KuL@®َb~4Y@Z�>VX>. }wt[n>B5WyHcR`ț8LJpf%q蝩| &ةh? z16x8B>U2ᰐ7&t bbe 1 :Y]!^ q~, u;" {' 7ݹSϴGv&ܟeΎ۴s76GGm3YW2b;U]jnj/BVd+*G=/7w֝S4 T#D7*T#J<IqrSJݨFDsqopLCq\e'Voȵ^�ˬ +O[,tx*'<02]H׌7~\}b Kkp|>u?ͳn~e ;;Mb 4Ӱu|Tt ljf9^div{6-P<C̮}Rt\ nsF<0ɴqlVRVw1寐3x lF&xʱ/PI`柯D�+xN?U"y!}%c$Lv~^v@SgC-\aҵ^7Y-by+%*ހ~@RYkK))+%k(#un6CF(nn%WDU65FrJsh6+0n&PVn8,Q!yiþ/uйnjm;& >3_:eeșܗ:I&ksKl3�iaY-'uF!nls++^Ze�0{ؗ$vr1fGo &$6=O< 4N^q3:y$qK<{j29dE0o5.phӮ6m}n?7y3duSWǖV}ع8mлOqU\y3Sz6 =Xgꌓ&חwR:- i;N{R}]2عssܸFjcKps2nJ$:s{`cȺ#=q^KH2s#?Za9R^-"sb͉rbJ)]XHs]@[Fa [Nblj?2diol&Ľ CsjUpZ䦥-96=ؒ#sa,/; k)j _S ڪ"cj>J;)>v&JaʵcEkD!BHҊi6nةBb6Wr7rQIN=Y` I{ͼ0UR{|+Q*P;c6+x=NU 9͜BZ o9E[H>*3X`k΅l1 ٞ4)Bўd Yhoo!'t+S"Y {K<4w7.`:9y-ZY;Vd/$bc�piKk-S}/jQ]RԱC2jA vJx+t5^gʠ&Qɷ{}#S`F`h}":r?Té9׶۰{)du js1Zeկ~*{%؃(vJ vbhP<fq퉯}MQͳT-@4[qzMr,ͭao9{f?h.O~w:歋p z|/|ǔ=8ѡ]R&~Go MAzNoxa,͉`_ ,lq `|ՇV;ۋ K@?Pd9Q|kT]1ja9Oy9m}jwW]ɦPsuv{-/>\%oXǖ<^�%̱>K.O(G{HߥTV y:<[lʱYd v(neٱ–챌l fH ycG%qjy(x.ϛ{.@6i <E,+vI<'gq#Yl}"OcTvKrZ Kyi[):)Ts_!yYI>1lFN &(_ހ7T[_'1aL/۾/?aeSk`pho'gEN{nWa#eH Kζ}ׯdRO<?d"'Wݥ2[sk[a͛-fVl%.g%֝f§ww'3- $[@'cɇ�d{ʑNر>e7<6 E&ρn޶ڦg/}̴M)v@=-UV`K*r?ղu9ؖN ۓy mC^yvڀ }>fx5 stI^@ns+ĸS>?n<Zmerrxݡ }Qy[`+]`Wp8 &II}eLsGAa$\-UJ9qVyo CxzO |m20]74g.g.=?3N`su7ۡPZ Cfgv8 s |;3 Óۗ b�EJ7GR7sB={T~;7 JCh^0ʊ`L[R@TE7rM)LseGde7sS@#f])I͔6Ċ mq뾓MVNBY{EhH1/7wq>/|ZMY"pP".w; l- ;Y9\a\hi5Aby .ra7F{ <͟kDO&)VsXj6) '໋eNN p*gG=x7y J%h2" QbYiDd¾9%/!uYѺV)KɰDZ 4)-o֭X6р =;s-o/cg5GQ5yWo.|c?ys{_jB]`_śk8ɇsu=N[N)b`<-m+SM?l%$04,H-H'r}2'ANe\j] LԔޯhI$�] kZ\->O;v;&]^vD(Ϳ][3 TQ&l9hҫْϥRhm{A g(@VܼI^Etb* _3s+?Mytk/% |ng \{-FjG@L1F8m ;Fm}|= dZ`ǶZ3fxx&Q;#ƠC3*; ~|3*9<i^%8K=IHo~>2:H2Tn5Ci4r]`K6hXހ73)mT7 ϻؒV WN3wzpS@[pyu?>PɸO:WYr2 4زdxr?d.d8`6'_=7No7{ةIs(e'y:]vt^l]AW$.]gۀ2v^c!LaXǀu]sU&IC^Tx6ŵ4Y])ydu q>y=Lv2\¾K|~/n^z#D+=p(c67fI m<+m̲GinzW~<-ѱʙ9Ѐ+S d<%] 6+�\-Sh {�ӌj2fS 7nH_)NX܁N %m܌slyiq?ة7OH[LPFݔcK:ŹDrkijݦT:sʠ (IЙFf;%ؽM^_5ڈ9ts W;oھTL3K;1:y9ńo}Ҹ[Nkغ&%kWn.䣖7g2sƦeqMIN-k, I4er_UP\5<#dޱuņmemɹ)b~׉2j՚DxwIyߴf,FX g%lyof~y\ıO|#3k٣_^IN*Wd׾iE0)_-'yonRKDl7r1?`S[eWa+7CnML 2O/�sm9ִp-Y`v`[_a F5Ɍձu5_\Ii;co� ~Kk/,5-51ElR2+WNlphb1�=9l<ԜBM^4%rŸmOy?;s9y$G1o0}H4Mo-w~hFd{.ilZ / MB-NǤfVGKKxӭX,HT/P)�I]xLUr֭΂cCV`K2C[:e&*h+2s B,OB8dz,e=uR"{,c!Eⶽ3[/Ҍ9]yIH3Qv_v}e? YDSC k\7,/b'baؙbǨU-s{ UtvF΂wDMZ|"BəX6@bn:u9Sṉe&;!*0–Ms{W\f[-o@uU0Z$<o[8dءQaY.Kg`Nc ^r֡T0) C 0z8c�*r*@>w@*7*M6K,{n+\]{R`ߓPdi>|atoz<6n^&0\ 3|+;i1.jG> } ղGEz;/E5{= WOʚt\*5Zj=cؖn1v髿Qf|R`Wn5*~s"Mݬ \߅ݓM=R`rt!]ΈrR$S`w|vhw2glR 7 s~ ?Gsh+$4NMD5; m9:w<FVob.y;_1 Es_H]W`?BU&8`0׉c4B]'>A,ּ.4CxtnhmS!2IR`V*}J W6@o'R3TJ|~Av*CR`[K:ݝ[6`x/n>u w*} |{R˯ΐg~DAg~tdQGܟC'0)y lt3N{=dۜlSF.M^k [rl=)UMn |r3>7) m keMV{oeidCԱ >lD ? *QeodT&W6~rf?wtNlwXчJ?ɫ4 h5 I`׉0.mijj2fvNQa[0킓=?u<jJqHT~<jraZ)06U[S: Y,2tAd- k4y77)]&A.V~=1bAV-I Y}\u][xtCo )LǗLŞf:| |pg)/Nnr=7T!M6]jSJw=R88)EK~@UYٳ#/ئ"r3L|MOhim݉H[`߯Mj.;M+܁=wo2Bۘ32w0}웳%"۫W+=֝Asl8M]Sv=ߔ_I*vԞ8x0 윌*&Tf_N }Tx5#c)b q./|2ETռN?Ǿ1++?F s-MjaL-5Wgg|϶�b W`}2(�`!{�.TR*l@Nop@kMR=!Q4!i hjD?^G,&lHe\$BoSdezɜdoAGu#"_w>9ПzZN%ma.R$+\ HRbq@ ^u_Pzxl&h !Gw_O38v6+hC6 82mX\,5E$ZEz_&yblg;32wJtCK:LP!y$űJ!O4 9-9硫#Nnm&<#R6}fpDZX7WW;<[mzecKZ*>@uXcx޻IxYya#;nӧO0) 9fgf}e23>9eJ_6w)F݃,{ "՝g+n@?zYof,G_~6s;*O\'_I@?07ӜA9J4=Hv:i.m~Ijqe3Qo(T_GzFS|m@٫U(*z@ѫYlR</Ȼ(f9ǰɬZ е[1PhSqoW|eKNȡk ؒ͂19<Nݳ ?RcxR .aPS}ob o8 t(CYXN6q]9)H¤@`eY@)kCfAm 7XLIbnݽs=eit쓉Hե~Jv hcyg׳>B e,Xⳃ?ڎ~^`Ҿi8e6)¾X6Tv<dk&~lwk&}Ő{Sj`^=ʡؖ<Pf+~p9sgf zO8^9<&ZmB2p ?ɇml9jv mui+V`yu5 L++1KIUF wt�f?܁О#0?x7o,y0R`t.ӟ }_On\LG؈Xp{Yr/y$S`禷D}r"O[Bh$J Z 4trPW,OaGa Ke=!+5$_7Wd<th8cTΜ~!c?[̄*.Vj/;v>uvm` 8h<h=bkPi%p FVt lQIA)jC [�,I 5`8oKx߿\LANC'y%{aqdR`F$Ȃ{$O`rlG cߝ{.7^۹d]V+ #vn۱C 7꣸b}׫|&wӬ3U]Ojї2ب NRQ -?% +H, |m^8V{CDL[}CZBR~b \ɸ=e!"&Vݱ#Q|nD_S!b N*_ h(R=` 3JMUkBb'֔17 ؆YDZ\X7=\\DȡfWGw,ZOWrFEtNq#[@og{:aX~6@X E 'H(Vm`w)/ XtiSPzmibE:Wa6_�عϜ :FaCF6|Wa_F?<!i#V4Xs>dfoY>SP.ݪڨ-{fnC[g4M*"՗~E+ŀh \ƣKv@>)26啊 0$ds#̀HNkY }q { jN鲛~/TBy'@hqS@oTt κ^mffvpt`8M@+P[\LЦ(nmع1뾒ZL bfImoļյsع/lϫ;?:}kr|Sld3/u_e>Y_[O[~6<ug-3Ƣϔ|DW :Mڶ.t=~y7rw<q(XN+$ #FG_v'"BG:;wmnѡ_sT~g3dqMt゚{[xFW/ֵ"]�\=VI;#+0%@Fff>TVzeqJK4K[VnP܌vtة\WN~mw[ ߥ?<@>Uغ2%f}"5rr} '[G^-9demS/.RWZ` q$#!U#[l@ijtұ} kWg(S*ue˵;0Ԝ6,Z؇K ]ѐo EN}5f\@ʦ fqKxNS0O{jVPOk&ظ2؈_ տZ0)I})@~@Շ{ǿ;)4c@(ԡx/M2|L!ѝ[@-H}5g5ι ~)@8d=|I(we|c뾗 @ǢK8 7/F(w7(\0!2\/nBZ{-{SkC0;y1W\%Ax儑g}[`ߙ^Ik@?u3a.%d1d9/9]c8甛Za>\vm .j58LSa h4n9Ք h M놇r{R@sǖ7C)]^ਖd0&n$no$;'Nu[D7gGSn $Hݽ_;(xJ NyݒەfP.dfp_a :怋{#5)7{-Z[7cF^@G1I}^/>{1^E8LCDoSA (x63"N)ǝ']`> utG=1o~ozy&(m]N]$퇺%պ>kcCh p(V`oL]ώl9Sjd w@e�1*"Ww�͑X7¡+2J^nEް}mb]:[Sz-v.<*;5 SX+5J)U%;ϬY;պs>a @Qh ^$aCc ѣ!fקT`<&!̓Ka踽9;-hNbnq$j`q/K 4t𰺼/< 0\)mw2N2C'6vlT}U<{Q mLW&c|Y!(ÆS͓ 9 ȌrwW<9F,|MlFI3�LCzh4R+;.m_[x&O(\*_cSa_UonG~͍[g*xһO5X,±/&gI]&)rf[73#9ӟ=~6b6I/G)% (݊I_X*٦<3hSs`e['t@E\qs?J{6eg-C05p*35I Gv5JBa"KVbN~i,'}G(IS`}&̷c_{qI^Cۺ 硸LB;gf|xF Q(λyMRn r8pw&˺-;9aZ`\aVdul`Š 0˱7y޾K0ԱsVa<uc1ެ [4G8䓗df]$ffaqݻ?V[=IVl,̷c[ZmKC)Wowql}hf Ϝ4Ɣpګu3$ z}.*9L&R$ JYv{*q*N`w*/v^ )s!b9m^jJV\Y|պKS JӗWoe5 lp'br}h$洘f9{/ kzFl6q[A*T{~p'=:^] vdO#g}�$*f85Ө'r7f2kHMʗC Yg>)UUo_xuf}mعHt]!FnCNJ�O ӊ;TGVPV[yEtSX*8�nbv |Lvb̤plj_@#O%hI9ҼN &me_y+tv<8x�Oo#a6Cꋼ F&j Դ=|9 @Ǿc?Dӌ^g OE:kijGxI6I|OpV1u셴g~+tu o*Oኚc|rdա Xm/Kc 0@IZb  x7^8Pde]b4^BZ])7"w :Ur1D, ;j,ٌqu C9c/Y}=Z<9^;g~TfgOSJɒA~C#Ȏ_}^Ku{?9ƔF֩:\�Gľ?+(S˪ݞu|fiaYp6><9 1훍󧎼8Vs(slLq0<y"- L#nТ矩:60xF 0my23y i;%Jjw埤 L\] ? ]3 {ϼi>׋'sdasmBY cEL\V[_8}.B|egn_:9ysc7&,d ؋c9U+y-sOIW{0B$wJϿ;M 7 #v#5w8jCGx%�ų}flp OvjG)j6gFaPn&K!8A]>C`5SB eNJhvuI(uETf> .^7JX;a�-MrV}T/{uog>5h>96 u.0 l4DbqtQ[OX!уPْ]%-~l[()Q=0CB*S++H4u,UW{7P47單QjΣ:jm'pΓY`[[]@qc}+K1y@ l؛[`�mI!!]̜çFqH$63?eйlY=^Nmp99l.6-պu @3`;TaX[kce. ͤt�JFjH'gҚkHJ=@0uIuFSlk <d:Q_Fēw)J*7d450Լdz$=/@&IVy p%_p3ղmJ_FZr>2A h9I) ݉G| 1Kw<iZəVp*IyK#oC_S\3Gjqk//njA@a`*:F9[57SA*7MN|ܣQفgjGϊpj1^¾>;<4INŬ?iИq GF263@MWc}ҜZ7͘Zu4% #`Kea@TuSk/y}qnS*55-P܄,٭.ǺY}ͪ{v?*Sߘ[P^ !)w:vZ g 1gqY|0NvRRH=STYwZҤϺ"Cy\ +}i.ݖm,a<l!xv Zh}g꩖8C9Zr<,9DT :^ye_h6:#AͫxYJ>+/0sh;0PFժNG}e>Q7r:/$.n?k/+%CC6|R6-#I{|_<F(.H?eR0QL8B$9.^ c+(хѭW3Q^ j/q fG9ϛ (Ci1ijSL)g'1  xr2ebdwhЅ_4J eY\f>Y`K]W- c;,L{OI~fZĬƨJhJB,KWB(3e#Ydwv±%Ӛ2Z KҖ3 Lґc PlбC]lw< ~>G$Tv.5[Q߮;LHFͨJ==G3}:L-$UD%ᦒ-UvY![hZߖѰY@sTѐƄRXJpzoqEKlf PSx.ɤcRV1J�e!5zYse3@uu>1O@p-@Qv^ + KqgcDp Ʊb(NHYF-{goJ/_ lG #<9E'iʙ6BN )jE w¥s߇�;kor%ݙ]` vhdIױsyJ|:K{Fw 5/*\?r=rZS'rӚ4/MugJ~:O(/{H&">HVin!NEHmF=9x O~pϱe1Cv6t|=Jv><7bGu#8_:nN3_7]mAޞco#]=F;75=`tz9 z9ȕo<㻑jl=:w9#l_gNcJ%vå3Fg|@2KƪZT)Re/\Ѹ<^r"wNTik瓻@t]bɨ} aeۄzHci [nN5:.Uו;gIkPuҹ[S_H[̅}koR`?=>:5;E_[ \^S9+h4<:{shh s #4_[@K͂uE_-=8�m9y1|Xq]@vKX2Gw:V0sWAZd86e)&{yעIơco@1i7Zٶc3Ź@3f)[PCiL C%=bYo?TN,pw* ڃURH9b[vM1C0(18M`h>snTp,±/96}fXFƪ*J6v JV'/\|vh^2y&֦U~w2ps֬zWS/Ԅk W^Xhn/J9NH؈O1@-orM4< hZVġ͘f~n|O 5 ޱ;L' ][DjA6&Ae=lG.^zȀǡXlgرϢD0(-:G-e˘ct^XA >6 R :ljƦplLns>0:{<Q {(kx7o-a[|eEt -fTyxIl1 ~m$-;LAW`zǶvBjmRi?_-/vg!m7r\sl3s_-ZyqϿ\bƠ.-\^e<<J:kG;WP%w . 96 j;`- 9;i5Q܁xm[\rl{܌HquU/9\O}"NrFɱ Lvlܚq-KW@+Pg|=a>,a;cYS`W51%k<j} ̠anw~<m3Ve0zc䶋EN+dHy!ԁG964c =2+wM";n3a=& 6Fނ뻋;Jz`1 )x}>XN)Nf.V`u$#*`Pܖ6yΟʮ;ywKH7<<?k+e}Jz60izI7g|m@ivRh!0 amM6~q:; _c\Jerk{TƍJ> Vm7_vs`Ob~ME[4}f:u_ys;CWS1S3 7|Tp`cLcV}O?] m;/\YD lRM+v._v{ڀ&o$s<n3 l�M_ 7#H q k[\TaB*=.pΑ}֦#VyNͲş$#c$z agP'S.mϔOʬ9k2&`BSb[4) l@#4PnwdWd;<aÝ}hK3+uHzBy7{Z-r(ZGka)mG6 ބ4IpdُiB0@iWkT\C% v8<[fɦOYzؔŗkvQu>"yݕ{Ync<0vͨdjY{p~䧚o؀Vr hUfcWcE}Veu(LcB#U~qSa_;[eD)eۙ+V'K H\!j@рu|?7ӫdQ#cȽtK|?u(-*ldr|qG4K`%Tb75¼T6 ;m -[p=qM:$^՘!#M=�.- }.w7Enz^=r`2  <nT*9} +nh^<\Ts.'Qל)gҡ&;rzmk\9KNN3V=<.ig4rpÝr3T&:H:l3PCdAdžMG&DXԈk&F".JxlsM&'-Lv՞R*RsC s�Hc|�A]+8t썌v;/nAԣ/./fOS{*)]>@ }IcL^"ln"%}<*HI\y؝qYZ!G-d@<�s"CRUtqvl$Gm IB5gxġef, բOh&UP;w+hعH^-vO(l܏T;dα7Hzai9jngl=͡WfFNJ�ݕGv[7/rႚc&Z}dl|W>[@ (<2~;7Dnbʿx:y6 1.k^'R`!NWV)B4;`by0<Q0]}g�9_/Z6V83f/^{0r8[=qenMWY`-;+쵕ŭ]Naz}>a{y(RYN; ;v2ʉQy~�Y I4* 6`sFiV/n)};<TSHq0ߙ]Y$]O=t<NsH(gqr"\L'D ZҎ.Z|oO(<X@W`oMSn8{=9aKN<dKv)n@Od&oRxoeh (fUg+n3պmt?7Xʨ4yg}orƼ,˸C&T;6pr'u+o6s|\)_4Wa $IN6eNJh+ஜc۠|8ݹh[T0ыJC_]T6RVxI3 '+2rK,ޱ/7L(&b:ʘc)L9} 2OCo2uFSsl9SSGfVdo)Fa%`ӍŌ ϱ/mܮjy@&.G_MUpbbc+q`*K:)mY`q $fy}cꘙw^%7 w.#?'wcQCDr1A3)s6O[]wWpH[Uz>|򜏜wftw 쓵f[z ׺5@u]ݐ<c0qۡ8C, 6ji%;7s#Clոx)yY-]A N4ڔ@\H Nr�qgcF3WkJOoe icFt2JٹN] ~=W񢩿.V.%:tn7V'5@K#>] `<zIfr6Zoߌu s쳕ї|6^@7|{T8cI"ŷc_ Ao@Fbg;"@GQNpW~J aie]u\@%UܯR@x `m/"֣{Kታ(pdı[}̆{zrm[@oULV ն)~ENq(<i?bc̔Ҩ-*qXU2rl˹p΁~-d] 34"Tv?*TRL2"2d_)CIeuMnwO6󢏰 [}4̳9YvMa5L<tu+ŪB}@o3jLn67B!5k&y=608 JTՑi>hI:;ќA5XU;z%L[q_'M"ac_{\nY/#*b`"3T:6 `|H:(պwލkTLZId?WW-hHɌձ/h2qmapK,ȵ 3qع6_\cw+84+pee;.B`n*[mvf>ǷEpe&WIGvkzؚ5gE<ίjf߱K-zإO}=Ձ$Xē:hkA3~3V} ).�Om&#hv>R)$E+WЩA\̺vۣάvf{H-7_#""V;vu >nw`ߖf2CHvO.T \p`kB- lDr3ds L'gI*R@+(mg#drwsRnn></{zRys_f[Aim!O6-)lZ\QPz[r<Z,eNuMrygxv ?|n oѰgLE}M)F)-U~bs]}.r6'0fU �4e- KKm]:nGS`6y9P@͈MafS wɅTynO}j'cr 쳩 lx bR`[P-#ZlM Q )lH>Mwol|U6(mU}rf1vL=& d{|/;Ll/i.$J�yv {(ȟ&Qm^ hS9Oً*B2a LWIXysHWC>USMNv^/n2c ACN _;e!- OE(jM< l_rz6>sG/J*M Z`r="#%P7m3(1"]4]aoN1¨֭OkûD>Cs:cSGv>ű?d@ѻ{hIl� Xj4Slm`!w.u8c1q~IvD@FҬV}�swn˷1C3xL蟰opTٵ4gosۙ3` qfH ΁K"R+kZ=h;"#VYTRTKlFUkٺ(&wdfdbA{U^sTW`cMmYB 񘅩q *Sxb6AS ^݊-qIXC1OW: 66WwINS»!#ԱA5sag֗}*0d, ɸ`OX< },rgݔ.V yUo3[4# iHr:! J0jI$n"ۓ#I ]9b//Wgub)bu~G爓`$gs^cӎU!浨xxv~„W1{O:y8|}qЫm _b;/6!ۈN>9BbĶ*=[EB_E~6-UeO#blQӖ`>rb1<DMjj ,Rmx }CA ؃J|G4̇,S"w=6+ߥ_(؛h/o)&;z;9.Dg?U_NѨ[gk=2&EZcIfgՇ#1^Ec1IX`[ ^, \lvŮjd&X`"" yTZ#ja&(̉(zvu6_5; h#(^D?B826=Ԟ`OǬ|QgdWX{7$1!'4ymbOæʭFf,)ySdx'R&EvMQ0P'0>I{mzϮxF|>H9S͜ZKM%ן OWM$<\WwmO{dmO*lU_׎Ile'kXζEG^o9x{,˨^' 4Sq/&IlrS-? ȪMMu`3^SCR՚c-aB;GIv'fn(&7)ow{0-b2bg!8xy&aZ"2Yju<P U2MP_h#;S9zdmyN%q6}WUbLAt,Q$]xUɒ{\b%yDm>4C+x9:ctcUW'*z līW'%ro=>"{fxDA v|qT �ќĊr،l1zk2֑`[ :/vNxDܯ>+S;A&^;V]J|7\x]|=OVU瘇h D>%sӴ.[G ̒b&XAaOEDpԋƈu.# &ҍ X߃ GFW/Qo.-[1yиkhPIm' N~xh:&d Rj/6А++O]=GV\3:~V40tя<\lsл&ۈ+*~O /{IdfNJhzʝٺ7Q3?Wf)+XTY{LEmu&VPʝ`#"Y^rkҿ8ck{,Mc_ >i#^lXE˰gZY +VJG!wM=ٲ]9V$F(튴g%j)j=JLs23>ļT'w$49[z&{$'Ry }lV;r;Xe"r1ybώ, <f~k-fU/zNeJk0=(3B8jO|VOXIn [~o380K<T{ӆ&kXD4U)V1~ tg.#D$&qsmlV4SVؾpWKV*|nk|;AQmNwDǞr1)ߒ[fP<!̓Ī `σ]G{-o F$Ue87e/^l{>Ϩ.$*wUTrvXS�"=;j (k6 0^A=$, `O `h^! _^9?&%؋ܯyOwXJo:<T/F{@!WM2l7+:Ox?ꓓ,]ti?A.AsX}=`bc X[؃LUӅ =ת-S!Qu>A|8qm&fO*%k|7s\2Ɖ,{V8=@k88/7f=`O#<d(LNdK%͂@#q,u{/×0\>`o^{}CcԡV4}!zenBw2&ac18Y3U%f@>ɱ+UpU{PFOAI\HUKB/^%z>d٢ñQTN%НXhV{'>pL-]n%4|,J7'؎?IMϬF2p'УU{I *K>?"ѴŽ}8hKl7&]csbxcO!>zǠK~z }8M`xx* qdИ*:; 4ge*_-@{`AfNbf<`CDK|7BhbB뭋 <Wm3"O6<ثDNO[䪲O 7%JmBHxeObȻ`32Ui5'F]u#I&[V1˰D.Y|O biQjfv {By"ߜV)\ vߧٺJܓ<hѢ$HgܩlLuIHðoQRviٞ@S X%E)kZ{ ̜u[O5%v'R뵇$RIGN ;Gr%Dx]3݈^Mbߣ8="xԨgId"y1Y80bɁE ěj1j%ؾ`p0Uu~ctJ`C7[ uqӓ`3T6R2U$x~+ɇcDx6My^,RW"( [} ׊fݔ$7"T2ul?<VQs~,J+2޴ZU4Gh쬼; ݫ˾Y4,%Xu^#,#WwnM\EWȟyo`e2=["*Bý/eܣ&,f^rЫ`=V\3I֘$Vi`!GQ#!ٓJ1ٺ<GщY 4){&ؐr5!_bnz -y+#W ػ}Rr4+XH5p-v+x85BzVybCʛKS4ˢ<LRq˰,?c'HkqS$;ul# bypD- c}o*2l,)9Kث-Z6oiMZمܦ<OK%؛KWǹa ֈ;6bi&/W|eq{?DPMə=..2Syp{eb%({qNY耒P͊w/*>t eI\ >3oKӛTI%,*B'gUBA:>|Ńo%_ Cui)6z[$321!}D jehx'©jk@r껔�O%xEAVaAy:E=`IMb Qc6I˖.n֞`/-K?Hmı2lCoLc&xU /&!@ٗ O집AcGSuu`a@=tY`Uk5me~;S;0þ_)xC *67+.ڄMۉjHKwCʏW}ՉvJ0Z` &wu#y@h{]:%4r'^\Ct{ V\y͚~3o`I=o=`c;twgKRJ$7JM*AҐ4LdZohG]?`C6e ~͠ TrY E sv$*IH UՒTpݫأVgaڢE`BijšV?x&[ົT7؎µ-:}Qm^[U9I#7YYT3Zwol_|7p+Mt%h xd1NX> BŇ1>+˦6 G!b- Vڒ`CoS#>v9vDÙEvTKo셬v*^ඬ }J7_RJ~ɉ}h.(Cn|J }_w{<Wz j Kߝ y<mL|boMEŘd'Sl%8b+[0GR+̖`c絊uus+hhY,^l%~$Їi4z4nX퓹M|~Wx d)Zhܰ: WG�wKԔ% x#]8:<p*xbGd&N2'M30E6,,qGUl5==mHR1^ձDl7aTɚ85!˖TqI=l\m4SȖado{ʵE2?ed{麡]o>'j%pZ|pos/]89q3ceOt~97mlY+ u1%xn@E|-{VMv8XZ񪖎.iltKCQ']Y[qVa%Puj^`8PL9Gc^EO/r%< u;Λb.pJQijǫȞ7((V.4lu}B4 Ǯ.G;A<& ⢔:CUSk$sF#Pdg&}Uel%؃xu|cO2{7T{Y>勍5Ut\~>>+iɪpתWeNR ~δ\lkNo +_E!J!$Y5vhZn G/UR<F]U 4Tou<*NeYdE0ZE*/6; `Cg]>yd:qƫ㖭~xQ6ņRMnr 48}V!z k};q_N0N;).:d{>IQ{<$ƹv#jsbK+[.Zwo귬4al'-Ve柨<[ٲ=9BLpYO{Wwd /{U{VP"x1lМzaoՃO㾅X"8+^!rc3FE>{V^@v >gZ:Zm$|9O.s)k?$;+Pod(׶*Kw=6VʉBnOE!~`CVLA~ 1VQnNm⦜zf^HŒ4-�[(˞ 4m"{S?Ʒ;4>_rʷdM'י՟OwH{U$F]lo{^IȳZX˱ͱb;^ZbFڬ܂؋(c-T@vEk_!GIlf{N;]3k%cJk͉__"=j̛ >$ؓ8iSjhaW/DRM$2yԄͰP"%˒FB70CڊA<zGxvTU[`<2m!pe<XbWf~�ya?V" [\ ELDz᛽ EAIԻ }2ͷCOՔ+YuxbCdލQ3K36⌮ n{4G`C{ܭh�̞`æH09 Lz+M6O5Bı&9n\G&>bbٸeГ(%qO.1+_i+X?: .;D8f%{D4Q#=6!*n{yJW)yj"m5=*1 ݳQjfu '% :<33hXxSlV]&ŁX(y=!>:)Xy&VybNz6MvEvm(^r; ^9%<0fO$)q^bn+nI %z�69V=a`uo6&{m77Ip=Zd86ZmwD}h;dYq7`᎜U+1JՒ:&?%)ʄI6"KfبPwU dhPi-b8֊[iJ)ʔ%&Wu2yϫcNuhs<f6s/Zi23ai-]M̈gKS T27 5k'n_kγVq_X5@S|Ց%ʈ)g!]lL")%ʗ~HeCY\Ql2xμіﵹA)[OL31O̞Qi 6'}pz+KMWUij~{yqS:7[@ +1B)S j3>c?^#pȂ|VI8mB9oLUtU lCoL!?˻[4+y"B WJw P<NH77xJ]W=\BUR; /4D59YAj&w)oO>~VO1W+BoϣYř^T l< oV`آi"bX)v.gN?!9ef]1GE3ٓ`o- B5 /OI,(jzf S)ژb5p'G Mָ\#QFMb}`rrw0@ώъ׋}wW+&MS5e .6v)stO刭3̇\MQD'%X.iت|,cs %69ee<XT ٙw+ov qz?䳩(MLً֔>k]njM)DRh?_2޽p܁]UR VjCW< c֗~`c=NHO@/# }uS#? XƜ$%G ? }h-@halQWl~M),zC-b5\[$=W=:8_rKڨX$_lcrPX䊲mw`wzm &&b7{݄6J ٠QVjX@.OI?JlQ Eq`6*C3<\R+TvI'؛We'K˵W/F}pq~.áZbl6ƙ(d7lOEޫt$G c{ԱRM0/c^*u1fcoHGg'9_9>c#)44qx5Y&o_Y#9n{u㦰סt5M,&t7,'B8/0\ɺEl=Wlxb=x8Z+\8S苙Ջ{2*i^%Pqx}Dz^ߥ@cM!EHvXj"/kGȍM4Bivnww+qY=6-r;0xY[ݓ`@ڪgpbQYS).$FJ%Z?O4~<x{6+y'Ї8S{_ZTyBamXFtI}Sz]rc_3ն%~0S<&)6v/^o~p_W ~?;(꽊s|Ñs[`wȱ[" PoGV$LÑbƟʰ>^i`C~j)^mpg&XrQMBt,Tuh)5 #zI!=^*N}Ab3;70D$[2?8np'^mz9ڶLQL71fH o"A*Oh-O~HuT +\W8uJVl;H͊.Fb=p>';S`7[ZKc e'[2莚f+&abo94 Wǵ]|gm yV)$7n5rm$}z�B6 G!tw? wٟ=*ƿ i4X:^4سh;)O<3^-<#_|yvEQc3OIQc{c"{_/!3T|#'l/'؃ϿE,-4c3^5ꕩ6oҔ%؛4DT1ߓF53Ӷ(bKbDKE\3ʧ[05r&ЇTG CE' CZ=c6IQ=lf3#%g+%5~M& CuxM\fD8 "}bJBn~R$ƎC=&_|/0kLcB/h$ČaEQ,ъDcDC~pJuIj\Ʊ ?bu'8jeQיog$d`FdRz|dXk6Ċ3ÃIpZ%x|yQc]jLx”fgkaK^Dm3(V>{MbXB1{) Hf֊ ,Z_ y"ߍ =4*è׌#g'9^iR^" f}#У fvMXF3.2,/O>z^NK&2Æ!#Eu` q9Tܩv#,.v(Q`O Zv.P|i`& /lzu�w.|kHۡ{gY #bXL ΒL: ;"= zmnK!r1~GZu2?#_)΋ 1=CeoƼQ}mjϝ`^Ez̅^H1u0hb4lq z݉Z7~e2t}�(=G[yc*ITBUBWVmw-'x~Z*ݭv f9ۢJafJ�U|{{ev?uEN~7=Y�%#Mv;Yr8 $-lFEzר2D#6 /$? giz0v5*v3<͹ؤDAŞ";&wX{UDZe{Why@hklq$gaVh;Ieյ%dI9ei?﮶QiZDG O~* .^D WWuc{|׍vSdd˱$Ruc&k9ŗmF/<uyp֋mPo~O {^a>!w&Nr^Oغy5Q3֕Hr0Lk Yoy u8+{**rۡwQ{|vb+ |N(q25Şĭ.a+j 6]%ؓ Qɻp#ch[?O<E%ذOhy[ %l޻ {9 dG: DVbsbIrzfJ3zJVuX)LFɞ795g h 44]m[x+|@7l{WK¬Dv5>2C2᪷ʜ%%i@;4LRFI&A>BC$מ !CM*}b}|�boUNcRnl)v,nG'r`oE2^NqMtX &b)Raj xp];LEޣW< cʉ[9KyC~YsI;y~F9)/G`w xVۈ3$sfE-r7?nw{?h+F"1Q`}]ds2j7XLQrV `āW;J^¼ܐJ,Ge B>@!HJK w| 97#qSܕ KZHr} Zsً\"udC {zԱa::JwɇqY?>%ƫi5ӱh0^5#WvmOKG6 Z'_=G.!{=g܁^n^T滽@HjazXY-t}(ʍ {YP؇L)U3aeذKP+deX{{"^F\ ux̯jC҄ߍr,0j5Օ@U _l"Jӊ >9_  ,m;8f8S:O}s.vlש_$?߫n$79pŔ诌"B܅ɪo`{(6bfDޟ'rJ) 6,)rxr`WIlTH'[7\x<XUOfdfMLh 9DB )W {TL<D^̉^]=D)^;-PmڳЗ%PVISbO]t=G/ϸ#=nS6hq ^Kؓ )O <;v*c{v$oٞv*3oC[>nCŘ{.=FeԱ{"Slh.cyΜZL,v ^=5_{Vcrf|g{FBIڠzϟJv$(xG% tgm"ΰ\$V^$mVboS^ˍnbOsFo;'rx܄o`a)[MbGOɛMSK ixTX}Λ-[ރ ݾp#9cVhy 3>f}֮(<|Ob+xqJ* l0z؇87/iXd7_ +-xwIPvMd{Ui"nwQ f 0,!-[̣Iۮ'D?H.[ɽ{u:wKotMvT}Ec 6&^ 94ooHHDWH$߿L${rID[Ek럭px{סmZtul~LC_:IHʎ`A/*6@}(xh{j+Qu U&ogbm8əbHϷcuol@{9h[x=WV 3hBM@/kŨ8nXHW/ׅ՟ <J>Ȉ T%$Z+aBbd<G}[ɞOaUU/60[S^/gBֽ`ش|}E:Dm lO6@zk=V)$Q@YC1ɰطhCueuTD uw\V׽OP)T^t 48/oM==w!iF6ٺ Na'0dG`JEV> !@_X1v{`hN+ydëAh?1?IM&Z//1Lt4I@S^F{f"_-ۓ}edW%s"j$Z Ϟ[L,yE04\\-^~z =)͢s`1cy7{5<IA i{BIha:N؎l݋H鴢SEHi ]D 6Ujaԩ\0oDMʫ=b; 3XI{ _Vdnj0$ovL1<}x)'1;|("I(#ƕް+ƃʶ㝀0RT~OM$': vx{{mUs2 gH#.)AS{ "4vyۂV|9>{{_.J\] T-۪$h\uorS7]͋1,vWliu%"UgNϒbRܼb5)8a)>1]O!O+=\lS8i~OlO/w蹱VV7Q&Mjs$ܳ8W$)^* `~=#ڰ:ٸV=[4dL~H&o\{g{EfgួV2~]緪K,py#yH9%q' =eR>AϭjCA7/ӽƱh :w6^-{ol1{>>iBCyXv9/2}6HvSIol_w%PΰW?7[^`Cco~'^/P%[rWRU^ոPN6N*}>A^D WyM7VF鋿SFXXl'4Dq΢jexZI�{[[ M5iTp. g ߊcE)]Qgw^:IF<T>͒2t@Nc8ybOs? lў_3FX{|욙nr6^q2vd&Ks*ɦ=*N2ǥoZ=(>GyK-ďq:6S5X: 1\'d8jDzyHN_:j9$%X>%aANɮ~8e@Ġi3W}nn%Eٞ`]M$ ɖx{=?i?Z;?W؃<QS9[w.%m}h/WSM|Sebh:X>-UwEqX0d|uuG/ΊK"/tD-YF8Ú˨ʩh4'[VP㒮 |R(G?$ߣ%ѷٷJ,1皟Yʀ'8j W-=쯰ScBߺXT0(?x*`nGƿay4S'̏p'?qXEa#ް~67: omș*h|oj]~%F&w,hJel{|'^=ټ{X`;J7 6(c%1[ޔTD2Q3x',ȷT䜴.Cw,ٷo%=ug{֩~8a!2+cFU#PށEf}sA}t2M:nkqm<`:J6ZuS=)Zg!&cvO%6YxEw}*U=`{x!2 r=Aţ1ZwBd@Tűpu/Ó�U vGbmO^\ֽPLV;1q+\l7MYlx),`1}.6a-"|Uܼ6u"qŞd2XvyÑ˼y˸GO]dYӉIg|~Ji$޼ڲ \䓈pmOTb/A$ Yy"|;) nENHs۪oĖ6hΠ'sg&?lY*]_OlNE:/vJq`Ñi]FOH0p >Fd{gu@O0Yted?Y"Sk Yّ z1~nlfy*뿣%P;)vLN #EM&xb!^[/ҏ3X~D*l'^NĦ-FӇ#bZEJ1"'SZɰ,+f8=Vյ=oml聞!NN'0iqO5-k" i[> 'ؘU_G4 N|h 6dA'̃O2ܐڞ:rd-lS!mKP{@%Vj)_-(01*l)UnK`r)N^]5Bm`N裳V 4YO/xXw#%A87U_+ilB^-VDӌ3NH ݶ[ĘA:=rWWdfqFMb]<mq{#^^1O~;r33}{Vk -_$ؽc"aW`�(f^/ѺLQeɗ^t=䎋j^Vh@~`ƎjlGI]Uh͒WRMV{YbttQM$CZGjѝ],yj:"Ju0iӊ<7`f(yHn-j+ZBaaEt97"l[8TiDؓ4-Ďx¯}l+6rޚP4m 7@Q%!ٓ),-4?᪎Dg%ضOv{?<~r$bnrLz}Xd/7V:&;FmuI֭ q: MHIބ\*oz1_|x{7HYa.QPH-mjqwRnU3XѲz<J$/aI}܇ZoL\_CtL 0//|`=K|Objs,<:/E>EX|?w`8 g@ol:ْ`3aD'q,DUxgLl&Rߥ|_`Cb>Ie#\[rd4ؾFGp8]ˠaVsJوWUv,Sf`yuy'zQNj_.zJ$a~-zP~ֈJY`O2] VM옻c/J[t+ $rSɯyl[pcH8pГW8Ɉler-ux˰|ZԘ =IFu7|4ABыŞ ϫCEIX7SdBC 񈼇h89aw12p2q+ N*j{9x 1�7T/@^0 p;Y" _E =|aA|Fw3gZؓ(9Ϳ}NSav'#7tr1I,Qͨ-Ǹ;(55/`#zgc5 gĶyie ]-k#h,tw8R̷ۧ)Z=5>܋}h6J< zŶX7v')\16yyO@]ݓ+= D/Tྏ-9mĂ{+1ҹ)yu" {uהxRO=oNzpͅ6L3^+,j%^/Q+2.D<{L KRlh+ c')μvUe 8ssBU+FSs`a({qJbKb>#+=2l_BE H8e?,2n.7|gU VN#hG mL~tcb؏V]uH(NjsF k~FAה6Un^5jtXDUX=~sCU)G=Gp'?d%/f)ٖ`;ňt7ڏ^Z=>jx'A8V5UA+ \SJϱStl 7%#k`&{tzc$[v]#>ihޞ\> Ima}<^£f uL}Kyb+w_e;Lݿ3 (ӱxʜ =%Zm=L-W)j 2$W;^9%k^N&[*9>ȡW.6v-\Vdork<]/1+ PsaLj[,׬%v^<S:K0[7/0g˶ۉE(ٖlTзƜ'؝onKH_U"O(ElwPp6u}3l$,wmyzL~1JaKR;ÆEo:{VQ3aRxLFD!qST[If/;*~3h|6<y &/F1U1�Π7FVbod`B)wz}WLUHK]^ !"]`)&,VVk?5RU<DJ]H';;!<?&%n$㴙`w �^h;XC;ٖltn襆a޼8�=[UGW zV(cc?wU/rwWrA1Q]gضj8l(#~°bTtøʼnr6ޓ؛UQLit$>WEӁO<]vA"$]]Y܄Y'=FEC;URں[D]ua^t, cG?s] l_DSjS`o2\qyb2̏. sjuh<ߣ6?mHt\ Wkk$P1:DJϜcBpdd Ճ &ӢGlbً}>+Mdi}־ۈ7س-lK-vzгNU^kPt?*6?gY{,U%gQk'*]ɺ1nuj:aC!N &w}f'F ogcoϕmݎޯ:+βԺEG$]Y[rʗ*L=%Tlu{]P 2PYq:=ꎄ-!CJ^ 6(hKu^|lmQohQ絇^ؾ#b'gBR+; Ih-z° iZm(<c+!Q#Em6ka!]ƎS5vq1¨cR|[cl;-zQ=r˓Z98#:!BYy*2DW7l)f޶Jez\|O3ha1e19w[Oe GqyIl`'vq4P&?obL-Qi`c+yB'xȺE](k 6ּ|GN?B]x%]앇h w^H!OX1QnuEg'a$|*}%FNTuЖ`*ɞ,rd&6dOULY-7Qtjɳ%؋B?E7Ř%7zyQXFV^/Xu_lURؓ`[6.Iqq tl #W` Z}PNbW-(>W%=?$w)Abn 64,$ث㒆h+#\F ]S-PR(.)Qp'ǰ#~W7|>ջtD Sde5аkv QDq8k%.˜0~V]&6"-Z&wzvJw77|-'* 0#-2;v8'{Zǂnv|XаEAC,:{(0 h bl 3n" bbʌf[@Hȓa=Y='պׅ[bŋʢGJ7#3% @r")ƫGd R=D`=~D@"I+JfX/gY^%>~Q@zQ<%Luh! 1^|On` %$Af83;=76+Q&'1_l}^bt?t7&O &'MTG`!27R=h,0Uiɕ-{|*.kA@b<YT7%"[JSGAգ3?;1l,>9)6<8u"}~VsⷭVwTMx7,{zHeu/~o7q/[.y?17/̟%row{g78HdRߓgFbgغO?ĕhwb:*ߠO~_UW[ #A+# 3# +֨ժL٩y8M4&]9i*p0ve(jL LCΜ5!YG NU͑@oXzd>vbf(ƜR EZ%`X.O|6*Hr~%^E>@=�TX'ZuzohP?C,/E^1:Uq,ْP_Җpl6;b'=yeSl<L qRˉ煻9k ߑpY2Qepy}<LIWE FXmdpbEi~|Woʡ6BG=7HɞDTo b_{B*ʰ;)UǓ@c?}35v/9pcN-u_v-,Ws{n<)rʧĘ׬)WCҰ\Oog7.lO6qG855N^vSI,^W,ēCr=v]ZoIl}VԁyybcU>uJMKPIcUF lع iKpOѼꬃg�t@[zJg'U0^Qd;M2ɰǨ%ذ3c y [&˝ n"!=L`F잴q6jQB/?>'g$ĩđ`;,nqrs/44 .HB⟤v?y9b$<^0z#g:#G @/6,Ry>Ǟ<$.Xd~Z촴{ Qygƞ[Sbo׫.lɍmOK'F:bCv4oNɔ:%@l80x<o mnPQ;phXl"_;R [a7y1>ծ!E{}}3J^R ߉ }Uu'c?Z=y.E !UedeF-P[ *O7_`-PfG[<Eժ +Wss0hC6ظgcugL/Dܶ4Pɓ[_V=vo* ieظ"7/`E51MtQ)\htLmXzHIjv6.!<E AgxqT2URVa1[ 4[M[lnlmɦXE%yWVCY":#'bG[ X]պMֽ&X b{p}'>fMtf=Qs?4-w3?+_웈 8.90yo捽4vucU7$!6g 7ʟR {PlɗX8+-FMyCl=Ş](Y>;pm&F)wOƞ0f{W"V[%؝ΰ 7m֡'MDg} Aoles/?%0Ʋ?to&6`t}I(x׳׽gl9/^an}vFHE~N>j8?7L{N'}hpn]Hl|T >~KXDu`c{Uܽe*]cd̶XyLכ''8kXC|xbmB"+M@{7LbO993Ki]tسcSQ/Fh]d!>xM5}%cCmr{]~c` TLN+<ؘԈ�o\&TF_bv/3xbefU$Qzя2\𪘈- }UWi8^11Jl1\Xehc"ޯs$?JYi$97V:6BWy;yrN^vNНUCo?=U;}Yj[{ޅڇ ^U FLm+v$ݽқ{;Ҥ{.\%}=ggPRZ~HK!wȬ(cPfj$NlR4Q[3ގsxQ%-!۫4{�۸q뢄Jfdmʳ=Mr>nE@OBgXQvl7~;D_b TO'1mHƶy~)y`rg#2"%اa*v}aj-f Z?q$ț 7yV5NS+k/U\GEݡ'}A\La3qk^ex;Q2ޅ@cG_e9+˦ȓ8ƞ5@dD/GX&y=B7 f9  /%Eڃc[ܒ`ônC}ILY=rή/{ܳ9=7 ?%ۓ^tcV/MLK;leתL+RcC"SczUf*t!Q-FǙfdڒSr1q'ǿ???L Nea`TR=o8Êd~[bS$A.r^ Τf7B3X[`7dr-4ʦIf7lA_eeѸkN,̯Qa$<gt74"' O-1r%>Fɝeת5.%/4Y>^ ›ef< m#yQev8] ϳϠ琉RѠg=<v IFX^JK1p7C8%lom[t{MVKUkјl[nџq>^ -zx{ݎ>>\yo|$Hoܩ2a@Ɗ_g~spQIb#ؘumm{Oj2ksm%Z\{P?a:3`ыQ u?Kn^ A^Uj1%cƈ%`A UAߨ:߼~8{@7e_2LArE N*mR A c76dm1Xg=; 1\Gh4.Æ[%%aX+5Fg_"; Gx5$'2 1-F3^/>m'^/ۚl@ZΩJ{/<!2>UHqW^7y7L'H;!wB< W|VLjhα#)\h)ha|k~aFpbT~xuIg4lrװhPw [U1 I).Еl{o ~C1 5koł&wDxnGqsE#o`T΃|ü%6䙒*߉Oe8:C,JXZοp9 C$Wt{yO; 8b'%GtCdh]A_pLq9%鞜?R׃H mC& Y2>;Ɯ#"|SíBddؤi#Tnu@q? DLDnҩU�4+cl7H "YN+جB߬C66h{'Ie^7?@ d!׬͡1SF'еd>LJ bi$g9/yC,UV; `:ޚzjLK<ʱg{9 [vЭ0Ъi 4|_da#>EGrj K~6Z>xAV̇ۧėM5D Swi5y@_/+E^a[z̊QSB Gz-vxq ؼU$0A܊1?WY%PfWi]h8n+1_{s YSz?UTwbR=FS/4xڣ~$B }B,, yO\}bŚdKxC-W45hrf=J_x-Zžh`Ox`=:~pVpE; wR@Ck#ʬx2?/vA>[}2:Y§>cyǧ:}j!cx_MV%2kuq&G b[>{yBd<=fb3=chO3 Ug%ΡtnPzޘPXpn1vs7[ eQ*= !ᢰ#oj"U4>v>=>H`y/Zvnc'fxmk$?o|u^hmCRlCevGEաB$hf<k4X$\@ "esq!?{}>X|$h^fЧabh?'azEg]ٌb oN5;54Y`W-nOկQK`lC촜ݝ8Ew~_?%/ = ~mku 6,R[)|g1VjQ7VlT}  =yt)8><rTV/�vo9ldEH.<WCCP!3/A,> /dOBⴻj\ H-umғao[w<dA+U@/";^s*5 lzMXUQ]T{?U͑7Gy3ZW}O> cmJo`ufx>0m1v=%3Z^oͧ8< [!_Q|C4=5ъ|k l?Kr@n$!:Vخm$^DpGDan A><w<VXω˄>2XEy^p�Ty+"ĒJ5K_u/9=Hc^*Ɍ>J^0*ڨ3 ` KBy!F/jeFMa <i~a_ a128zG <B ob\|R:gLK�z+ql >$wql&N@0Vm*hPbj(<гFʠσ(Z9xÕa3_dlzԉ>㣶µ\#S,ePl\W>{"ǘICΰ}?뼰z7ԕb[&!kM vh;iW}SXf^PflTJ&iЃ{h~2lĨf7T/6,uOڲ4ꟘƊD='n:yk{ǟR.c*WߍHa0  rX(3Z"כּj,7L<u3.ܬMY X,X [1C~XQ ͤ(.='`9CDab )BD3KUݵK;!P%?Q`'VN33)H Z7_udV{mrTnOгA]n'Ğ -lTEl,;F/}ڦ ֟ zB yٍSX<:zwLŪ)g"(1y*)"A*QE̻h@m8zoɗ:4|qltjwLh_{:8 |7v`A>UENi!> DwpqeЪ>\|TW}SQҙ 4U;<> ˆDvo"bmlpKv߬fMg%P*YB+ó7,|i�_ls" g﯆'${i<�1' ؋Ócg�I]腓&g/s6OuCɞAΡktՊLO[qq>&jz)nQ`U͊}C zr=^wDSD~cx,y<@c*Jɏ߈ӷb'{iy!¥(\sqÅU0LщIbz,2ǧ8N(AO(i,`@o :'uaZ~'A+ 5*7xib) Xb7N^(1az}Q}+igdexTG ܢuK9kw3ƜG~y^{/h䳞|SkiGKGU?}`&T,^wO(ܰEs^]uQ 8vŗFE`q5-{#+eX\hAc\['cT87^3"yV$hE`o_Gٷ|KB~H@H## {S�Ӳl*N$΢G9JIu^Fq'݉@Va$wN Gv*=-4bdhijϰ >SLSG6n|oEk>�ذvhHI'X<#`o2w9u*<=[ﶸjOqWU?; b~hݍh[ uחMnmՓ-~XAA~)zv@=GQ< t\j߭υ7z6h( :pQJ+HBO,>.3}w. h{%"=O\5?֛Xe ɞO&Ƙz.yx3? N ޱ80C昬;l6Ր6ozk@Cb4ڱ8O ژ3$= OOgi|'.$OL YTŶ=|*(.j2KӘdRI6bxX9+k%Xm @.ظ:>oIf�u]lÜ{EɅ\"nב@%PL!ڋSQ $/&=AWԍľTk{ 1|Țe9\$K"C#y|3V> _b<bBHgCF#ԙEòvs-/}n-ihxFj7\ u9s r'A>m~bk&X3Dc})kd|s(gH־wIVUOקoG0d3IozR!ŀ^xC)f3H>ƕA/^ݐxt @wfn5 m)yqhX܊1+ }{-'s%Zb qbX6^{l6;W酉4K˪ /rwPQ䰨jxIzaIRX`(ʃN#-൧PyݘR~g>%{/փO*οmٖAKZʑ ЎYo޵:d@;݊uK]Y AʼnlٛPz|!N RϚ/! u$F~Sz>!# VE P%Z%;9NWOUx#jI^f^&z%{|\<<nR_^ [|Q>SȞM@QPg$cl.yϰJĂ6Χ(7]4 � 7]owU 0tӰdwl\/T׬u3n]']ૻTc͇.ꊶ*5#N*+@ sp UN]W݋ـKU�*m+e0Ey9<S4bpozq#Vӷ+"ܷF!vs fcg;?'~[l 4]VPF\R?l6: VKf#Pݎ1#H=G [ p~?wvFEw/g.ʵp\{43�KLڄiމuvsZFbbK/)HQV}˜ gގd)Kie: 痔Wi?gKFVV]V6Y^]͙6{:ۢ_&9ǭ]ʯƄy·QF/]j"a+"a5ߨqC7 {KZҭ{澩u9F~ZzOXK,6WHB)?%M]g'wK#\^6}chҾc9^^jyg v۶{T4)BErZY!86z})TtϚG섥{C8\kΟc8; KV Z^jϊT^a3+杩X=߀EνyY&ۡ04KOk0R{f#w8gµi JF͑8<x;Q3퉱mr7=cPg'Y4gw4m#qli[#䖥ޚR7?=Lo ϧ.=Hmy g[.2o}bѯܚE[9^1MRP󶶧[5ݨK9$9^~&teeO/x~ ӽ]tVc齆^aݸ. v0w%aJ~z}Y6}]P#fչ}l<Iy!Ӷp)1EdOb\6!3'w}~.tӝcyor-b[(<vw}zX=m͝vk;˷ß#?bvMuÇ<^6/-]z$/Ŋ-M؇f.g^HsaqOkm[E~}P׮io22WFySnoՇGU~G\/&ck2v=<-=ޙ頊ErޘO}u/+2O8CGٻ'۬h?g? m%a?-եbS";xtgˋ>z{IQH/ 6W]U29ѣ+{?-[~b,˹VTKe$os2[>v} MFe6"n0Q7>WWٿ[W$Cvks}޿g]ql+ڵgw3ݝe䙖s)9^0֥I{X{ξѹF:_+6zeK#槕W:@dږW>oѝ�Av_0vX};3J{zzaՕ?˯t֕g݂;ѸG|Iוg枖n1Y}O@!a{# -KN=u6K휧xK=굷L{7}.ԧz!r09Յ[]=T.mts}s!C]x} X9΂ �ԥw$qD\i1B_0wsW۽[D<Rk'G;9\h綽DB*/ ߺBuy_}/z-?*߷˥7�gkgS}FAi^z^zFwK>_UY[~\b5ϷB}z%kztO< sjiamK9͇W"{I{1\;w|moDs{~#kQ6xoG.aSc < ~>Whf_W^G/!.ayRr2hQw\zM'%t<,ݍ[s(mP[9ӥg݇q.k>61+/n~փҵRS`#^eDB+P.]2?_(wk?χoEי,+N)~3_·t¾< n8Id?'7J r.wgcmOnya_7tmџze5k\1o4 KwiT;Wr7Y |QӴt*ow(^{v9/ݵ.g /;Cx^{;[CǛ沂,a=!dFמ>y=,=Iy]GVt\&W}ei=r{r iɺ_e*[�aVmz>_aW%Prvs<<dw{NI/w>,Ҿm[45{:w;1 |!G +m%uO+2g{}bΗ/k뾳?:(BaUһ\?'Qvw+_,3xSS~3&ʿ5n^uyZZ&wC٣nnJ.QI"N7Dst{ [%lW.spyӕ/Q+X^&} Ff>|Xz<sv to{U4X[fy<K*?V_Jϛo>t+-KNU:wl;)kV^}|'PN-EFpzwMf֝\3MLaMx(Ғ cJrL!kqUs/@'ݐc`$w]]w.=ڢQ/eU*U߁mJi-c^ VؾtWŬ ]~f-|kKySz{,UCq..Kh3St"\>9"<͊K9굃5\4ݶ}wyn0[#lǛOHXͧ7~KǺsшjTϫ3۝A_:ԇ~ })|sQkJ燥A/ = L4\LgiͲHx]^<ayVd8 }e&cY5:^3H[ڭKC{iHv=n[IQQ "|u$Uwsw%T[ƱřXz.;'"/swbUoat ;|XyZfl;zyi fbͧ>k7&Gn~=u~Xzҗc-W s&Kwx8nWoU/UJ,=t;GVB/yk=>I.EMǾ'sܩH|򜽞?eUZw}.f_w>yvpkaio-ÎI~J{9aӥ7a2~ǂ*a-l̎^.ke/ 1B֯s$]E^6Etmٛ0Jv~K -u>b ]֟ ,x_w+kj[&,2_j<+罧6+ia5K^QgMx~%,5vb~7�i]y ?H-lgc&cwKcU x_^g\{qOs ۦYېg^is B$? ʬp5h)JϤe;YQe-$}V Ab}KҲ Kh}Tr/MR = 4^eK7~Zyk-?/MƹXuo[^fhTg{KI_zWy[+u r/k{i)3 #¥zXz'ӧ=2O;ΓTY؅#`a9_ 5ϽE}lݼ\/%T.3~\s:Oy/U"'F. ܳ {7us=P;$w҇/^ Ar[be䇕Ǫ?grsE&[|%| Ȉepm_޸`cxGv/Ok_h@Yq#:?n=I.Ga1FugetyXz/,P/%" B9O$ᶼjfX-nؿa;zwJ.r�<ܓu^G#}OnKW)z?ok+ҊW}U^1_$jboaq?]ZX[%G?;J_)}헾w⻎lK-4߂VoD_wޒe3S;ỏUeum96rT=a5MU9B0cQʋr<2~rk>K[W;#X_PZ֙#܈Yc?\Fl{$foO^+k_ݧ˳xvAyC&f;7h; d匇r9?53m̟=?Zͫ>jF(ڇbVeoxʻ9~ a}#\&|%X{{[RD=tKXcٗwG=}Ui-a;Hk/FlItm-R,Y:׭fn򰶤}=_ JA b_BYXΑ[[ۙu*r9:KE+ŞG>8ehVwwaU狖xs_[s]i{ eJ\^:wag_ίyM]]x]罰e)N{&[/T֞}[U_N7j�~i=֮sC{)zDwWV+v]+$? yl/US߱eI)?|:w3ס[ҔWǹܝxoku{t~#S{ْ| xKWt+GX,kCmCAB}iP>x\.9T#k%/*ҶZ<]lks�_ ?XRXK/HdC>Ř֤nM^1t=گ\RQzK (^v|e<v{ǖ�mZo%|M6V!_W$Mso]MaU>1~8ZWBڊ,yESu1iEsXj<@i Tӻso%^<υo�I bqE?~N;g=}DxO ޲E?:;M]jX bKR}J`Z߽g/2֮e?H瞮/̓h] RՎ~$/ay0߾Tyxnh Nq')�/Wx- >$~{KXdVuk!qZ_)�gG{ݒ~y!Cƽ%<֥ރv<ʨ`yX%@fyRNSݗZK0Oݣ@ßʋ\ w<.-UtLEV>,5%Q|ު_GϹ^{͜K!^4RNʲ~9uio#Ϸ|\%йo;cu/*{ ;C h?W::&=wr&κB[]^g]$Wn1;M{io[Έ9̿ͧs[P=+o5o˙Ko~I5:Gl}Zf@LJB B#M6~r7ʹ_Wත0nUϽ?w}X{Ͽ-n"KX\ X1wՇ<xqyuJ[MJ\ Zi?H7_RVKuQOkKۣddKvg_r} Zal^n)*|wjdr]:(Ň<a1KsiՓ%!GV }c;0 }_.0 O_m}�?]*ДA-b_^e\d?ĮÝcJxL!sy۽IW~Xw)ZKadpI8#}P=K􏹏ah/<,H(u6޹C?eR+0*ghi-hN>)Z =]^v;=u} c[ :veZn]}xQ1a9 6- ӥC\GתPgZ7Saup~g3$`z+}Y^FtbRk^o|Gpham9]N4S{o%"Vga2!{=L aoϨ!H^vٶ0ʔJVtzHWZәY)Թ^I$^m[RJۙ޺͵O'Vު<\c$G޿V_?tmVxf-]ڻ5=-txntmmȟէ$#[}X{Η:֖�_(5C[iKyXz ݾڒWpn{yw%{{/GS_}}ʧv=[0χ-E^E{d'�_Z-B'[i[Ž% Hdԗ a;Nv~yRq!6{c>,~Lv1:[[y2l+/筗 9\&ǫH fK`֏+k _{>إWl]OOK= y\ϧG0oxޮ<�V>ͺ\!T^{G.x{ߟas~pcmy 2{%7`>,=ƠPbSfI^aźVzɿAذ$[[@8uĞ_ E򲓨k^_/ނ*]ݷީm?$;3YKy,=1D~?QB7u9l2M>/Zm+->Ǟ}{0:ge%v_?gPt3MW~YkԤR3_cmYh�yXZӗNxdjL$\J?r7nY>K]y)gv;/UQu;syWC(ulK?ihy+xW L(r:^ lƺy8'hD]خ(gcVҲ㙗*.w-G^Jjz}~g8cWK˹޲]!sDZU\ҳ۴wK{*{;;jyX�CoGO?'ÿO!e_Ô\ڏ4pͫRƗy2˒>~IOR5Li~TJrs2ݭ&%O7]dGs5U'kLi\EHxLʏ)|!#m[[kS5ZģM ^?8(s9?Y[i JYwȫXy92N^ږW~ZYEt 8Wel~ݦ?G0`!o,"ctF}!Qce] ݟբnU?Rw?gЏ!D_mVK P5~!bFq2K9XO k>n!\᭺'+9,zSU_D-?ucN_/WAM}h;EiM#׿;D"utץBWu=u߭@?N:&EDi*o3}}u7\aKҿx7e:5&w: !J_J^h0l� )5Dx* ֬;-8_ <fi$:NՋyV<!ᐦE#*;wRu?Ꭴ8=]4~ɚc~eدxs]Olٲ#5kl‘[5Q}`֯GcnYcdj@r;Mxѣw<E9ܟTm[V.b׏(c|y$}?[G>/?רKUPJC/bVuSyeῡƘ2t-}zUut ,HјΕU]z/Q_uӿr-I]!b5ƥ_lß5~ĕe /U:4h++%YQJz3$%z `i61CV4yӓoKW>]z/LG/zL4ӧUGC*;[ГՅdq5j~WcϬyDre+y8ЕmW.HZoyaWz$~x?_%R㔞xIw{M3ы5 -cU;חS5}'=cuH4�W{TC3Kk#סEn}+}ݩ8`{N%<�VՍU2[Z4 jגzhZWT)Ÿ{&F, ,�_Oz-42IH+kKOދˊM5L"ekoɋR^~ zmѻc4}hc$F-c_J l5ixϵOh:%+㖫U V~ zjEɎ>˒47&kɽ- IzsoMwdvq t ~N~Oh= Lcs�57tG[=򀄪wtS=!Ftg'zxY/zMKO3)դ4s|[Fw11:%~H~SI}$qd)ӽ|Ih?:'V~\jYȄZO_�U#ɾ^dm4g_7&7Tz&|Iѣ5k̙CZ5ͥ[\B:!W($Th;(|K%:_޺Gi<&WZtڧ>;O5\|K+MN{!BW2I#^z47X.io(=d9%fMQh %Oq3rF]W+~Kj:{$ K34RF=\Շ=#XCJW$ w,Y_xItD qy'9 CF@?^j4=^};G/2tӬxIYҀ" A[Y +ifwb$g hZ_!7t$op}B`iM՗̺iȬP$ =#UQMJnܯWFq8;.nw.d<Nfzp胵B_شdZE2h{XSw|�Z A53ࡇp2kWPKzL\cWn1$mG +F ]cD" RCmCpoRBtE>UUO@OO(>gk5ZO%4[O.>i^EVkڻgtp3嚬c-`^0;h:״B~;=ނ>o9 Obɨ_*U花 \h\NUbNݦuid]l#x}mt!IFƮt#^>-h%%Huj=XCL 6/ӲgɱtE^M{2G|Ȫ*i~qRx^䣧/]fiņ1$x~HPD:Z?N{pZaរ(t>ga^q䷚AKp}vWltUԛ;RLअaeղcN ٺ6__ =4zJݨ,vowK}ujS]-o 'r f@4&5s# &>|}iGaZۧѰoSxŬǫo>Ȝa~c!;")ЖaiXz*$?3CK)mD>u#Wq/u&MzBu {&-چLJ_|I[OsyޑL:u>C#\Y7UaPsۤ&Ze 0thi$ 3l,1r)dDE ji¡W+t,+8ϊQ,2D*|WJFb?D4CM%!j11L44 iM4 ($|Kx8~{ӎ@%dZPOM?t%ژ͇: QZBF<RwhhFn%`A4;T '߉ 娎\%57> 3W>ӉLQ5$^FBr IbCۋ?ji4VPh~�*`z)oLz}_"i26�OM3tMJ-QI,0b94?А_?^Z#08GRKVjDѷL&/|},J":×?BBp GkMԶ6̼M= ar4ؙI@M̔D?N@8hQ e#׀oДǕ dbpRKI @Yz|EwyK)G#dӏ;xuOFO}Iّ& I0(J!M/ ]`ESWI&'rR===Tz-enRbCEzi BWmUz7� h/a3k^{hAd&> }XL'3͑Ԏ.5�4jeoI_Tv4MLt~V@'kLYw5lbXn.ɜcZ[2~t&D_"޷&fН1"guz6V[!+G@;G:zF4D|1A8uh^HߔksZ-8 i00!M$xoEz'8>ƀwhL&Ǽ1މ!?JtZAJhiLQBa�1BVo<F?l$_ϥ fDܬaСgGPLFz)kZ;5)r5P�-?} NY;-b . ZZЋtyǾ1a9+NOto4{@EhRW2@6T'%mtW. Tk'wSN𰗥7ƩM,k .Tsz&o,/N+WԐt1N po V=X_L}jR�IxuS;|OOK kzsY^1u~5H})F#Z}s�-k* ̐,Ak[MB7y?` ia4JﳙsR2Kp`UwVVt&+!̱4y342I K{.!M=DFF*_Gs@7h!ӌ dB HaK5fv,w~TsiT$º=/J1P`S<UGz[S># ܗAu 㺁HAk6m'gg܂9�ԛLE7?Ǿ'cL!ydq\kx('_d}U 6M2x12>v1lCC7a'Wt );ZU~BY_@}O9�,hӲ^C7*ߑƯB dapjp�Ӑ JȪAb%8:nҊdbLV^#xOg ] g NM*!8ߵwOa&J'ɆEX˱,O\`:[^Kx0,&0Y+)J[s8d6l;gk2]P*3q N&+@4{ψx-;xBy~�󽴈RL.p[Q;k<EV'!ʱ9|f̏ҭ+]$/4g+ovkH:3 s2o:8<=\5WI,إ-C;-?Mg>n>Ũ#P4 1dw iCȮ=w 6, 3ROZʁl-m@!fM"4,CNPY_w6x~AX8 ǰekY,L&ʁ13yin<P`7B� 11dĻS` Pb2>@ͷ1 {')Z2�ʯ@q>Wh=@cPY!âf.ӸAWcNǬy!5У]$KH|�5\NB#cz`|6,{2AxtT0G؀+iogK%GFC5'�4YІ[kէ r*}]x!W!hh.i$OoWc-ْQyP͏ŅT`shёV<X[9r[B?Wd3Uy̘~M K M Nj! &̎ Όb?ЏB癙ܫAzi>mZ鵄vY~G.i2ٙPjG_^X"t$dU}^ <'p~>r x 62`zعp^fb%q-3c}e �C7F\%62ftR{B\!ŷIt%LQw_ggTz.Vw* PD2)iѿri �(à.z^e&\,CU� 07Zk`}l )@f4$MUa7-.EG?̽-3q IQ|h̉ϾKu<Obh-XA2w-RO;rƙ jz/AE \z ܞkse P:$6koySC�OtfBig@〨(;MOh&I=WP05%3\!}e~OPp)Ee(Հ--9YE`W O=fД0&<R/:3z!knԓ`Lib& 㑲1\N#% bcq[D,< A83"{ 5N )~bja%J`k Z8`&k:'melv}0ךEЦݓz$cPػO؟z^%шr #QToCdШHj^yj {&GwSN/<}Lv.P͵|ȼTEaBPKX=4�y2lgU ][(q>%LMX#kY>3D%W)̖ڦ71 f˳i@K4*aD=Xҧ;̳U7Xz]K^%�)*4z`=a&O2<{VFR1c6y0ֆ$[𧟧hX1@C =#K 3gp0.{`|$kEr,{&0se!.nRP7xMv-  ,0g KS�9h#KA{Y>1ʢvBo!.�@ g##�h@ueF 21aKZX`«j똁�<n?^j�M ÄJ X.:L^UB" T 3ۜ4pw:xiAY-/Lp h{ oS;ҤdF<W Kf䏠$'Al�͐ 3Ȱ@{ )T Lrm$qs$=~% e-|K/HŚ%OKD zlo8-Id6 Pv%?GJlS.F T|PiiB-g>^ *9p<$\fit@ZT%�;Xh0 G&jLzOA! Ƀ>:f vסA+M`&Ȃ*^nI.aVsi٨vPYfC]+4،8hpd$3܁X̎M028b74׽(&7">Ԭ@CC]ȕ ,<.z�bWu_c'å7P)CVZX_"]_1\ h5zV~`R@e0 H4)|hV <j%P 'L!d}:A *{LCߧ^ ̮?% N�c/vz ƕǗM< ?h.Of\ 1o8Ӈ<&5ܙ�Hg%t 'Q 4=LֺCik <VnH&zebi8*P_.˺SuU2v$ѕLbmmE ]aHK3}7K0؏(&=h?(ǜ$$-g4Vfs@JM.k rݐG^ 0LKn =ń '>@rr, .R೦䥌t耿5)+PuECXcSt*H=4zO^*d^ 0S@}Z5n* SMP pj&'pqb3tϘ~⅏KByde zR<,g7gA'`6F{Ic_O8K<2l BGqja c=|I KCtG5Ĥ6VP\ĝ @U`4' \\68=z+1LˡY�Ɠ5 ߨHG`7@HH8@'?+ѬVm>sHQRVuq6s!QDj"v A#vC94�?1E fOL�Jxj j i~?'hxTe<8K("̆*7wF��F#bReǀ'^ON,/0^$^iw D@u9E {2�b{+/~8ApA0|d ы r#h"S(f13(2MJ "jH<GPmfGhp7 " 9ɕC4:? tւ,)DJE-(@ѲAK}BLqF3{=fXF<C[>TlТjM]߸ z1YhKOy'rF|fZ9 dFPg �Y нH0+u$8p3/\/ dUICu<0 ⇯VK'1 +`J>0z4ӈa ֐XcDaMiJ$2!28CS fh֍c'�-4Cĉj*uH4IQ Ẉ&d"ϬDx!ԏOOH7n{۞obeGAl`_e s%hM:?Ƥʄ 1ᠾ9<B័[.C(Z5-�9:%y׌S>Mݳa3 y+҇Hβw0W^s,tP*߲txZ[u<p6";g{nӔy 1%ҳW�(SEzd dÐJ㰏 so3�)+K@>L+ &ã4Aޣl�e@ 2VQK/gI`hBz6M#2 A> *ZU$ Zef)"@Zw^R >`ȇ%0y \+\AdM #݂aS{~LHZ:qd)~Z� lg Ch >j)$$*<d<ոO_8Ȓax%kWV<d25L9!em>$DD !R~%iӏ�7E$P(ߙZ\ /:Vdbs H 8>DhN%~;_d%`4PB.E~5: !ԃMRtٗ})%ȥ+& (1;袁:@9kڂ ȁ_mͦIy%> XnUQWwSwz3\@2#A~Yå }frdKЎzpo01A!/ٜ=6t2 %IA{{o_8&Dj z3S�iA.`3ː(2R RJk̗g.&/OAxYLԶW@F{ Y~(heѝOiOBW%\L2Jk!j4>o mfy�\`*/CP䲺yMcɠ Ⱦ86֚N# AYm}Le3 ]פA&0h \f <%ĮS sY#hZ"V xm ;"4 Ȩ}fX%,53mMҠugi%tyE@J<T4b@mM^{oYeXL !"[#8"3jڝ|=|@]q}O=r^f ^[�6%Ѵ0ҟ7V2iw*zYEB4s`hk "FE-Ln!溥ϓ>JPtp&;9DS-``{!@X4ņAHc"*ˋm#9 eBBᎻ%GH`?FPtQcI8% ޙAG*Z}Qf "A4 <=A1M)}G~9tSᆚp +*c7H.RȲ˫^�@07V0|}Y%B | i4�jLQEZ oFmFrZ$bX-&sA<6E2+ *rJi<|ʸSbbF[p?!m |:DD. Bx2H4/uR&-IN0VAڢěД%>j ]FԜT<ŋ\Q"E%bwƘ#`k3'$}8q_@<.H9d ar^Cw"VmBҴ %8R^^�gcjI['gE0J%FXt"23!whBM%q.5%~a@,)5>Vt(<y? Z;dWBLKہ8h_3mX!C`ׄO( =Cd_q!8҃gޟs ݈ $nB,w<gb"qfѴsz=LpHlBl1NAِ !ͷ3Q0fKG8<~3C??׸Qqr,451ɘi �G˔ :)ES+Asd);s&"| 4 n4+ b)(A"6 w6쩒4.\x m5V2-<F"=AU*E KSрӨNFI I`a&?GaaPvq"%PL]" .XTVUҰ‡oNQ|gY7\t[ 9=/#w(bk,&!<xø e֢==aH [&4#hڙ'& M2vUcsz ˂mp&Q pQZ`�0zm3x$Tx!<N<e~8s /@EBD>"0f4ڗ!T% , p%nځjO*㴌F@43APldE1k&Y9ČO0NLĠ a�٭NLpdJK�]@5nx=qH4S-[r5/c?iXiw큗&eSwYjn;apKW ,덁+cw'!Pyǵ/fTA>#JF{P4ei{[DtKKUaCNo P̢ (VS^2y#c\yJ)41<\źmIdFZ8P< vb (caՃq %F1#tvӘ]#F1%T #95�fz+ܧ@Dg$@]5��Ť$}:$Y1op^ YT>Z06(]RÐIjK3Ѐ t/ӱb<h[,ZP#1~?:C9WG;fb)i `ZpȂ�>}P\!~WE&RFksg86tc�"[_ ''+0%-q0ABÞACML_#PT6*\ "z5*TJP w[>_`ʈ1Ƀ&\!Cn] oZe4uEi]xbA6O72RTyj@Qbv3t8'vUsUA:k�>5/ ,Ke&VȾyɐ&5`#܃  Hw՘1Gq$ ~[3F*N~&I }Ƙ4N [9 z20I'N1c2{B7 5f+@( ؗbjItf"Fxo5%%2-H;`4�IϗπO+N0G|)oϘyZ̦VZ |xU^dX9PƤvhEЍ<KO`6d.|LFs�f�s';j(~p=9fqC  >\3-DS-{3"DQok3OiN#z\,0̀wGle vBQabLG84:tl'R胜j 8<n`Sju Q¸+! }A7^B(' Eyq7K(s;B =pt {�S0P(%{.�vMlJ5h*UPw0֎ U 8eh!?5fz|, _lުD)gXX N7= 1a@ЧḬ P 0B>Ư>g5Bkpvo_ <Xy!w<0vlPCӯ�ΦTkP`�Z'<SsH¢c P :AdCna>z@$?gT@^9=f cb{|:-�8r9|tt^qbFTAdP G&iӑpm%J8I7ї *6C=+!3O fX3[A"~pt4IU #W$PV4q6 kOB0mF,&?azp&S̔e)�J{CK >&_l͌R$s�dD˃c1HFaUUl]Jm OR�pDlj5KF %с >DM*.)/1ST#xw2N^:NQxH>g-Q(>Jx'l`�)<<<*er#30cks'ҢD`B~B@Ҽ#%$jRkb{�Jpw�-Yƀ /D>Ôy$?؋+E4;d}F8V368^E6e]_)t j>~9 aH㏉o !Ig9C01dH:Q�4P jԴ<p1&)جXC1 l >Hi-<"*AeoPpC ].E!r#х W|Fgx;~2fYԂ.Mȭe/0br4C[GwF>[( n<JPuvʤ = OKl9|(Xbe'cu8&#bdN# тg6YI@©(uk4~ x0 @[JGPa mB-,O|iiP5O@z.VQBe6&"M�-�'2c娣?zUOJCuK B)hjCՏ![$?p Eې>1>l\6=>?3D tsz yRrܮ>/ πp .`gnHK@[T5}ڙV@ %P5W9 V<e"FXf+256n`AhX03�  hɼ H ^6{LOlb(Wa,.xz_R!Hl8 J=d !p@ .AԍX`bmeF,5OѵEg~S3rLH]K dM. A<HZ2X&Ӡà淁Ct˳d sjshqڌ>oϙٜ^%yOފTH|isff˅+9Fk\N6 Hf*mwV\%] ڻ�I g'|xKzn%Oԃ-:0%$F"XPp�\P sWSͣ6c!_vfDILyvIɂKAtPDp)ȲZhn %^䐚,79Ou =;vA&P I}qwa ?,P1k識y GBj6 5RI6d&)1ǖ!HRX]7 ~;: 6|xٜ-"J-6^Q2 j kdh2d >N zoE,z/&1vH~8"GL7U_H -2n zѣV.VI"w{$7|pa H(#tAӢ!3 dˁ` [ctM0pHAq@['L@1'b9!eRbjLkph,иsPYJIof>aS��ߣꄱV@ۉ_jtBA A$0ɰ AN@<q=B3 Т1grP/Y?$\<q5 e?5!iIA9Czu3 ڥ|`xF2 H2Nn 4b-1!fn|{E@a$n(^(F@`Ci cUP&-z`z nZ _iߘeN#G ę5%X"- k/+ 2m"G}x7Tc T"T6c+_<R{NTUT3o,![- LAryo75b2JE++Y ~,[typq_i-^v먡tÌx!;aw%p(s !�"_ l-bW5ʴq Mg0?pFp~kcֺnKZL1?)jL)!vF >qYjHp1n5,$Y4ZGaɔ?j`BƜx&+=жڎfA)B&(`@G;dvmG-?(3^Y4E&Uf534Qze+cOY//2,-2%2*wEs}3hS=< I4 ˢӫgQfE0OC0`0R[ ~Lj0hE-+2x0u\Di-Svg&b!@ɍ}GF~-  遅Llgʃ@>0Ab$Nk:\ 7{P.4xHHKlX2<)Zt3Jj l'\9S1TE+TVL`+&ȸ%W, k+adf"�Ja5;MNQ H!+ |5H3>v{-M�l4iHU @,v ]~'LU0"Y{cǢ?ZFnnAV >W vz"la62,G '39 yء(jTQA0Z c@i4%vĄ|^]4µJPt`w#"p`*q41 HFA=Ԝ2(b[[�[c4�J0:L],$&WCL2/qFNB)xIӗ W[%u6P]bI@ڃ BLw3 0N}?DVႨ "`,SL#]`X<@#y-#$X#L^Lj!b`[eAVVV0>d25̀{K8d 1# f)8eA 5VsP#Сs/5/ӼiQ3x!԰Ly~)RlAwXJ^>15`f2LPCsV]zPΠ�ﴏ@6,ԢI2h}68z:D܈y5E5dC�r6 x59r=:%�hg F/FŁH }l˧&Iw<ebkn�a=,U@0MCϩ<e:U0|4eS#Szzp |�J-ϹĀd֬ 1FFgÎtEC9 t z #dڔH\>30~^N c:?@~4a27=T<++)Q !v )cC -"(-;qz3D /Zh uzG@4YJ/LnFVbJpum;֠ArǤ+2</7냘ka .PFl\h{D2Mz|4{}YĮAI u8:?eԘH@e! OS:0f I7$Js3dPZsiP�mt7+-#W+zwQ(YIF:O1D&zc >ÄBCG5Q!92l!ñ+bC!K$~epK[=<�L �pn ,^WH'^yH V&A`w3 *>YTACb€ *.̨ L/�n)OSCP|4L \%Zg1+ISh~ޜ_A %~ ?1huDdՔA{3!k5L"b>R4(k+D7#爧S68 0oprF1BmC_0!q4x 3rchqtEQ4GP�݊W6* bF@CMsz1p7/zz&ǀq_QWWL#8q#E]Ne MI 2̀ޯF ѺA\D\M"Y EE<zۤqD_Q̃x{#Gufڎz咉~Tj@9^6`0uq UFfIK-<X\V_LrfLJD1J4(DLj"CPIq]S6Nx ^-O*55O' @10</� Dq@9حi"rL1wI+;ٛ隔X{YMSQZ|īXb)1sF@a~-&υ_#uC3 #Hw3 92ShVh@D d�(1h@u*;0?>M&]p6Et4=aټZ1K 2SɏoMIhQwXfx!;e7)8tșN^ %ڌ p[n sԀWH 007B2|@8#yֹGPA >-b-OiIq0@g' �B=X -0bsih@4yG|P:—N <&=FafO ".Q!2h}E65X MgȡQS!@V@ׄh0.Һ7(PP6zDѫCn4,R 꾠6_ex6,zNy}Xi>W qtR8@S44<?:tͺgcJ&K|䑅> r;~8I7:[= SŪY/TƖ7ȶZд|UtifG;xU7poL�x<BaS#AO %5:j` !y+#�1N oQ+8yW2|wj$+ceXUJG-Ĵh;R&+z9Ms k .\w y@+~;sXS{)d#Cظ,Llu0Ai/}:ןb1+C@i$iQkFa-ґAE l E|*-?D nf&ǾDWM -:8@{ņ0>^,hsqWYc.qW@U">]=&&~IC4}V9" * "w4>2y:.%6jDm\j gnNpmf5 آmFuh +ٸ:JHy=M?hhRTM>0d *PhB-;QB;d[cMCƫ#Ť3dM0鶡x߼@'&ed .٘HIn8`7O-!3E�297rZS 766LAa# P̹ϊGX8 Uzxn9MNBCtp_3ٌwѣ훤wq `w5Q_xS9Ӎ4whm\ j 1D~ D)\ mhfh.]F^s`;vl|;2s�iL[TzЧEUF�%G2_2Ut6~CkV27ܠR+}pӑ.@+ݻĢ218RÐ!w{v&hJty'Tl[+߲*|]A\O\؄; 'Ck`0 Ci.[Hu0[95BmDu2y?)VTģȳz9BJk1 ;&Ȝ iˁTs ~φҡY@=;bD2bLLr0C)&닸<L6oN1O<u?6b ˮd446oCtSL3Qc�*FĽT.-gE7j[vڈ~�i�Kv"aQ|<y,&bX<ҧ4eP_BC#qݍ-=-~eVgh74h�FG0y%x̞OUc`KSph1=7zyF=v�zA 1YP8oOՆ VNcH( ݏ[pGhVm�%I \5Y1_EP!b"PU88fz 楪ih&׼% Sl~Sf.^sd>)Vii`K[x#oPWO�>&Ag%8Ak7$9 I&Oj3M70Y|f8U,4 i%w6Ly:6F M.1a,mlRљ>G/;\<~9#Ro\큑B>oD^;4L?�ԓ0;Ulqњ>jT`Eɞd "́9nckAC0KmC$JgX24 lHpBi9x% b1~s#PzhV5k:o-s j0u5$3eH�N'M/@*1>W3zBlM5ъ!H|Se)V<^3$}ː=1SݕW 4t${ȘdB&ae@kb L M)/ 9 p0 B}�q._ 6p6LAQSɁLw8y-@5 Q\,Q*s׈6x:H."ي l~�A釃U<l2@D$T[BaVpl73&~ Ml;#УͅxR sc n6h2:c)<&Dzi}sB!>/] =hLż 50yXw%$К5_,.d+T~pC[A8UMw:b} Dn{`W<p {cZ8 @{<jIh~%d/>!l%02w6S8T T/ وk쁢rcӐg#rl%v f/-v%E6ľ),UQ&=(D`'rBER8 9{~@kSXнĜ rA6ux{ s%1}CD^!%Į3}Y߂nJK K bMg A382<=ZB:0 5͋;M'<üV̈́ɋ;ij%a�LhdH6ic>Խ +jj&b[hyrUi@C~%y?9Xނ3HF[YZ2j=y=i&}Kla|<H*>ѭ4v@MS�4K4 $) !u5HxZ94t3 ;bQn4HXC:k?`zje}_tM | >cD5SKgpd>LoEI;b/t޾b O!'ƈdsth-AM%R[QKKk97>#q##q\74E2XOEM>U" Е sz@Zu;R?^6q\M'SA_` n4pH@jhS+a #8f'4/=mԄk'hxiTn r�vѸRҗtp# (( ɯW hİ}T``nrTka |P~=ۗ]^pq�/=^XdR:>e@lX u$U� !z0E7iWU#"q1DB!T@F6,/]s^)uC̈́^+9e< NibJRJ-bt@(S(Lj^q= - 3QߣN@E;/'-M6qq V%9Fr)K2W?Ôb6k67NA;PZ4wF'!U)WP0H\Q~ &$Nz.JW)h n՗4=~E V�M>Te]T\؈^uoxCv&}_}1oﶉb즌[}PɝiPJ !V �KKep08Q70m +5�M RZ+$#z�u4"Ur5L?s`e`+bO5:?ޥǶ,+jA4h UD hPu׾#|gE tZa6l<p7Ye%j EuT% ?eW44F](@'Nf]2U9f lIT6i%Ӡi[Gڒxg! #f60OVTX<E (&k¤ģ* XH+8��{[hkAn2^(F BsnH7r=}(| 0ΏFF|::`\:g%bn x=Nf5Zm)@II@)D{@5HR,_63@ pw4: IŻ(!_-ɘ=nDvh РLc2-9"͗P&9d{ nQrkߒ3E1v|EV%g28*Q1"H9׉2Bi"',h`]k.ؙ`4JQv:^$ߗC]-ri*8ي):As :U 5$NY4KЪ]A RҐ )bȘqf%nϐ ma. X1ۄUѺKuflq'<>nL$;$["x0hbk�9{u&ȃtsDVi T f¡>AFrط]: ʌ۪wqIT9*"evPˎM^G)CĄ:$@ĝ<mL- dUYԶjIN"N]͜h@\UۭV#ZLT ?gw?CpA ۱0}ǡݜFJXU㢔&?\H};d5֘'s3A^›dZqWv ˱OZf<E N|0Jc*_˻RЇ!\ ;Xt9 qE^ɠs5HXJ 8EǧlN4:IPo'{eN:`@XSTe7D9%8碌K^%2|2�Fy|lKpt AIptI]ilWcKv+` Y Œ tg#v WQ94 9ը^K[g1J�Ŧ*\ ,As;+,;x4& p5B6M]VM'+|Cr]5Q#�.H_13WO@aKdHǶ9t':Y EHy /,Yܖ橾x%PO~Svrp[Hl-#vJg:4;ʙ+Av)diZ춤Yz0: "W?aDSN[J"MB!+3Eo~SUys1mtr㬰 K:ØL)`Y&ߔw/(\d8mܭ'-6X;4N>SNsWVu|ЖYÔzr `o +!noo?'8a�P6"_VxY�a[;KQ;GlJ,Vb<xpq 퍪'8553bTszHr)W u,a�"?/1ek(*hݠGFFcK|Yd%{jb\4P R8ۊa2 FCrr$ӕ < ycDLU`�[ |TlDopD"6 \;Mq,}0b&sa^xpZ͞it0ip͂V@Bz[ѰͲY8An"{9)yRq2Qgǥm sCT K=ZwK,PvFF]qQ[LI:\ 2=gG*H' M9'8d"Dz';z/ )"$ $S )d�{Vacb.a|OVb1AYQ d^dbg.)Ѕ1((hф9 O+~f DAc$rL P?8X)/mػ#&^8oh^dJm &,rv ]9DưuN٭@n.\Cޅ碭yXհ/dMelY-ɟ[s#썑z⭙y7E0eڜgH+ 6$#m2j�f<ĩb&,jzӤdgM9VͮFlP6C-40]C8'BghaxrN4~I}2< --&xМ+4~q2M;=b6>D,.%4@<3i,lY<#uZ2Ylp e B[p5("eNoF9Y>0p&g 4CAБ& tDaЕ@I'T鬖_?gShIa!N$s]y_Nb1,21<ڙS8#2y Bp,(NWb>jdqtd㹙y`*$_-Imמ)ÒNoZi?bYztARAl76~Y7"J![͢׊Ej2tin[8DcNclZγ*ͅ/I@ 8 A1N�5 \"cWΞa)3VzD tX6-jl)9g~ħW2ۃN(u7V]򐪩e>R!Kzs+[zm &t33t m&и +<Y(J{ d&.&siG^r%jd Mg%N/gV!g--tuB m`R$5_E\nD'O-O:u/\HLzs'D#'B A̘ ,5U` }u.ԫa[ 5X0Ǝ El@+FŃ6V ʘbNH]b0##5r BTFdz<A >*"bs[+nD`:v\T+R1$|BpFd=.% O"􏀧"/z]Xaՙ/`?vaMe޶r!R^ĪF} 9u3ixs]M ät#'"mL-(uf͜1Y)pNP:)60zx%pspRx L.>cNR5#H{M-qBsm5at` ͛2mXsQ|Ym^,=D#f(Dğb�;scLݮf T *H}(3Ca DW `7RUxyn#Il( BΓtȒM8R*tזzw ,P2%>> KӔt ,lLEm5hwz2a3%Q. !/9L<f5zt&C*@D@ӄNXĄ4J'E7ܬgڤ[F=qp#l"&]Oz$dF5r"xG~,8aB9@rO2P*&kPq˓ d�"ߜ86e"q>{Be*d -4'shcc)g 0wZt yQXݤ;!}Z8) RU/ ajfpKuV`.L2O;a_ K3fzE-(z؊- 47"e23Е$V |8kf-,ח.yYYʺwX#{0'Όg(nON>6PVDw?ӿ_oowzu>&[6*kjj5.OoH`V/^XSr%C}LU(j'/P1[~/joho|є^oys+;(S'wh0"ǿ E@nHBaax~/nke];7;0icJ 3d6|)bϗ]f?~XfdsfW0!ı_G4^`Of˶곿0cs1o~ub0ϐ-F1AjiK#M}8W(Vȍ's f<囂|}O| q9Ģ|;`nuWP*>F%}q{o ,E>'?Le+u}[%ߏe[j `k>!-!hk+ )Ax1&Q%x!>7ઇ͇w5yvY킥IYs"I!\I<W$ )c~K(F_6p΅BY#Bix.e n;` dCN1$շ::<Pbh<MIgZ=I tRaPS%V?_�JU {h.o/s{&<ٰa'MoaTsbG)?ns]M4HV`QJ6[&Sס}@)b+2M uœ nzUA[O$K+x^Ekh 8=jl-{~]f,+˥#BS'FN^U0 > nIyBVo;K^qzXK`Rl#ҕdk5wZ4e0_{YAK e4!{9)ÒM`K./b8ƿqn(lϣٍw$vn$VhrZ8W;\<Xhg|ըboTW CeL8vBe@G3/ c < aj"UF¹aM|A[h8\R.Xeh VEF*ܰ?K3>j4Rvf:Kc`m?[PiHbAizVY�WՇ&>B_JVlymejn;F+P`E7+1;`VY^TkJjRӘ v'Np8rŪHNÓcV_ z1\Z? pZ lZ`e\pQG#".\Bz$.YAGLʡ=4t؅NOWy=˰֍;bQu.҈@FD)�26vҾ-xek! 4] OrxQ=LǃXKw`3Nu%岵~p|Ö^s\32xXs|z YTZ}Q9~ g&1%VUn3<Z'rɭ pB}ѩR'$z~y,2MUsgl=ee[PH9V_i0r058+Brd@L\Z99p3NP 4q0YD$36Ɯx.k ܢ2=: uM K)lڿRb8R>ҢR8в&/d,BqZjffKCjc(7W 8*D;m]Gn]k]_> 2Jxl`[1LӽȯD|x~1a'ύ udvPqgcf;E�Jφ?7<s5abp=KB:@L?%v�- �5aă2nfrJ}ƾ{D-@5\¼cJk1'(qfs2FCz R;CK;y]M1ah ={ʙ'cΔ Bȿ+9ߏeg(,P̝V91~D W}Eޭ2ߠJ3f=gDCCUGbJK6(ɾ^uGw3Fڃ V+?m Y$E3#=[ȡ<f܉V M,+Ub^UByg)7ȑ`^g!krlL&VtOи1glbAT!&9s 6Qǟ:@̦!_n+ _IqK𣼂.{{.9Y~bփݠB\mhQmDYW+!)H g:9 w$,Me~Us~_ /b|uV'ИĨqY  3$g} t- | /_'iKX2[BfA64#LWI~fn)<s۔ IpPP#OtLB h[c,9 |ij͗|y IJ<ڡ|ޟ66aPA]܅MxmgϏ#_�8Cq\(Pgtt"nY%^5z`}VcGM BQ�c,adg7?[Qgc �C8\u6f@t=lykD`Mn�՗cbc%&*=dc4l$g8PEԇךq\s`W_LI pC|ꩃʬč.X6[ի,?|BP~ �&<b/hO#wTgdg-G䭉0h< /GhjmOj w%j ܋`7ws+)oS>Jptbl &zp~iy̥^1e PN WYcJkVc>(b'-ZDӊOƱA!?p ]Aѿ?ad1C i!ҟf ;<a⅍4#'1OcHELwhƚWAAJݰ(6^?txc=sz%|6'Ebq!PdD:990LFI&Fw<> a @ճv`[/CEd`x5*?umxgl: 1g$n%m6 qD<G|] )#rV 3$wb-*ldr54"֝u/o6-i9�H^ͤ>3;/l�m n2ؕ[[}@[&#SфGulXRNц3}.[9e EKu-`.~`?SsQ|٬Thg9V6~AxώvM79`Ԥ3)(m< V (rX⳽F62\Cn;mc m28X>VFmQ.l'0rDMIZtWuF䘱5+H#a4ez?d˅BV"t9'BvǸt0 c-+ƾ句]+F8ȹ|CdzFCj=KBj׶dݎ}6ۖ3>:B2Dq\tsvcca-Bk ծs ,LS$1TRA͠=rDck6/WY{0㡅_G~2y[`W_5w$} ?Iw g!OT0 s.!پ A#c2ҿFTV^a#Y;K|aؒ.3#Tba'C!sr\zqAtgb_$Qtq\>ˮrBvkyk%0Ej&*?qT? %Hs|c$8oq#$"FROl;XfHED-Sr#*g0.m..cV{ysc>5hPEr~s$b#ZB6F\A-& z7IE1_S/_Li5:[ :`]HƐ峀X0@q"Unѯqz*;� ۲5ENvh+L:nxqmHI%|837aU5k7 vgZ/5ʤ8 yx}8Mx/ŀG+L].Ch|J*=.z1OVI&rouԌ%NV+rm_GbE&<Cf ]9^qCʝ*MKw;$oz)p1=8M\0Fis$R:9DDM#h&H']pO-&˒z=Z1NLmE8N^%H8y4h4hHUa_4+$-ѨŹLjCj2̘RrTZUfƣEϠ_x<ǗAn0+G^o 6^t� k:NKR)LY6Dꂃ|fer`rg~f'O? !Ev)&Hh^] \(M تk ,  7>?RCV`3re*/msbjG7.R%aȚt,zxHs_bCR�7zڍ2sb; DVog8 w{eernHAXHBq/rʦOkOa]luV'MlʪM"qB65@dnqn} n�*tVuUa&|IBftn,A$9gS"mX(vTA?d[ w](1L|ؔl@1c#YRPkFp&w6LgHX q ;w˹39ꚟS7_&0phWݘ8L,AR qN!'4(A݊ gφ(z6A|х7q|#|x%psrf5Uʻ[ Z7hthm& ?slrQL>k'IpeǭĈ?~nFP*&yȏ;@̮1|̀IoD\ 'SfX!�qDX2HݧPaVLWk|Da~ND+!3eP^,`Ҩ9@;^D3a$Q""bù;vsȪ{Y1$n";ه  mY^ƋYKj$:Yid TM/_7\zR/P๻hIHHso7y+gB+3䲕+x>x-ԏ2<LmX4q< Ji֩$eh' T+s`.tzڤ?3ҞZh Txii�–koC&jQTbgr;E#'F]tߠ{3)"=`=jf 'Kw(`�@k;TlvT]iFs1H>R0_[nḬX0QAFܐG%g#މˣ z壧q x~U�# g_f F%!1!c:/AUeC'W͙JSX]z 2S >`RJee$h0ǣOybb/'tFTE;Z9OɹG_J+NvqSd?<q жJ'd4,tqȵ?&.8EAc| Tv2jGR\m�[$/Ngi9OLutKqy{OÂ5QE2Dd\ 6x_!hnMm=<mFs_Rd%cS߉,aV5 i` ݱ?Bn<iafǣoˆ2"@";؞)i ”)8wȽ#D3È|R!PZ)U%33EuRYː4 =>ӎRLշćAy2] ˏ�J89AAHص v�|쇣(ny0ɔv˟3D&A/UJptWݰ!�<4k_nr؟]#̷ T^T>Lr}�c%4Bbj^?ccy)!S"!-s`qrX@'V}gu{:M|n6sN s3d. &:}vžEÿ#I6̐�\�xky ˮpZ]0j�qϢo\h4t;v$憬\QOyam0]鞝xmf|�:n(9QVD_x *6=GDgCl{tXaF@!2xô,"LiM9AJ?;*NF,6FuOT&tX@D4 R՝lc8.2>Jz`͝83Dļ-/$BHh`x2t!9+[̀7Dhk=ap1+ơdAxh|P"Ob],u ]#\cEָCъj  Gz[<@D)Y_AmDͱB�y?. $5LݻR"@ulmQ~:P*mنL�Z)9#IS6)*k28v\6^fc6ؖvɠĺP@lrpz�D/QL�v&I"P,'m;@J)|X>lJѢ9͚5qDKso'X&zFhNKӄ"r٨ ʡ(Ƌaϣyih4Z3eY$YE'H�$OuKT~c9pGXȕmOg]Z?ROi"d6A0)=Qe7L1L ]ڍpYhxT"5Utiΰo!Q!KNú0Rs(͍Qb0Axv3r~.@հubF`pW: +4AF@K5()ed$#v(}< l' ``ll i? <EinntT YL.8AI} uڣx-CQ7ȧ-e =,%%aJ؛g`OoIޡMJ1Gr&qLүtf2FK[a N 1)%!<k=G@ <DG`Ga|b'hg;vk$G\:/@</ ?כ.Xs FK2@Y)(%{-V~b12tJ@Sv(AENjg/cBIE�*nĸpW1̨$&xVdfY"J4$t)(RMBm&96dP( m(Fvq/IJq4$WJ^So0=-ck )A1h3če8{!9;A*ų<+q;=F%RT`v`avF ԟ~;! 4H ?<8ߠɾZtYpem,�NN{A nr"x6iſ3v0= Rw#J[F؊YM! .;T<1p�w&z8oSyyFMD5FB,8NoɴL3 C>a\L"bcUP@zY\Vw)$?'jAHnq1L+g+r` i֮I6яQ\8g}ԯ[sFXڸpf ==J‚_!&bg)-FF/WR X^iO7s%A_'OΠ Pl$EYR7c$H܎mxKxxa@T7|P`Ԣ븸!18~dt)r d\9PrB ňѦ L/NmɣT 3g<i$eiܪQwŲKaXZ#˨q<\>DA {'1qDž"wb-h(,Std Kz x2]lD-nYTyoXr/}0A5MC5C8EugnrA-ePfyLxm`yu 7m3 I-6IVqkűQՓcj)ZJ8B O1DX6Xm!Wm VEJMfl#mfy#[OZ?, )ivs-m9beJ )4YWx>VnAvG&u YD kj{Pԓʺ0xdٍ#:7Į~~poʼn#XsArɞ($Xm!cB!9a9 끥� x]-Y?)l쩋+(Yf9�?.?.&f/7̴ 3rֈX6av)'M,7:O%sqƧ!͋ʠ j*83cزy^1b657(O0v0/Gg^E{@l("13uIoӁ'B0:Ee &T D@cr20yQPBc\)O\,R0AAJTYr2Ŝ1}<TrQjz9|+(22ÃCJ]\/2@ͅi\(ö<PllvrAmwQ`*S\'ޤC©! g`]�]8yF|4e%B\aPS.>X�EԻ#%2^σSn/cVgܶ Kc䌾eu'By^7\R̋R`  cƈp4b|9dXZ8ㆲMKFT{_hЧ 2O·fL֖Wώ%y8~FBqg>٫MFCY@S"$܆jN AmzZK4H@lZޙ,mt2? ;` Аn˫ێ>.>$ޓn.+̄.]l&U:&fnݰ gYf'Eְɚ|\XZTajpƱ&ÚC{&4PWS0yi;I>Z۾pOc'ӗhozuC II>B1 C y!N~jJDvu'sWzH6j�Ƽq>&\qxcq;_̶h9Ξ*AƋO03i ln'3&kC!ED[/xcsY9LL1W؟mA,4tX={NThFbw`6'xܐy)N1N*s1xfyE?C]θr_1p 7Q12o l F,, Au:UۅBÛ^w3nsc[;֗ ʘ36 & 1 x@uJ+,&DqAT Q} d}Hj(n^*+,ě 0B0|_W +GWxi5q oES'<Y&Veb> #rz*N̞xƪB SY1/7#^_,/?GV h}hCCr3,1sD 2 Z/h}<CjS9Tg�S}0�`Lp �B- D�R۞"2\ ˓x9 h]vzP`4@nfAJQm �y>V\q`]!ߘ5KT8؄<>SS qYiF2Zem+8@%FlG!|{YmdW"JU>b+$]Yi] 9w$dU "]KY:fX@j^npRB/ղ\rU)�Mk\V<$M^=!N@وv@+ީ+,1uB8.ˍ-?= _q$0M 8)ut{LT oxs} N2¡ctG�VqM2%[ʉ(gMpUbtf`'fq 6ߗI{JѢl}J$/zlcK/fmáC)0+_l`xْU;cd|v0j$&–B7fy1RYـQl?-Z{ܺ2Ot<ƭ WWvW}Yb\�jڬd#nXN[o^+0J}z+ =0 /c[`,+IxyY ڑm-&xy[i`2ON.-B'5ĝ*!H_eMiBh% juVcoГLs*^g'\TGBuU t9!`h MTKX~X<vtbW:a{jC(o\#Q:U?ph2<0AA0M2()!}e7Zљ6C&)UsM@ܩ>us2M)Ń,5??MufEU3Dy< 8ˡ 7z:ȭb񷮕 y"m@bHvgxcJ$]0)<76m5R@+(OYfHkҞ(\EĢi~{pPxu]/{gF:L63I|Rwȸ"ґ< EDiO@U BH9\{Tn[hصo![R=UGnkY"!VC=sB D-zC>�wgJ!`q7$mܬ}FĒk6,36}ɖIˉG$vP1lWbp>Ա֛< &j$%`d < M /)x>쒶ȍ٩MyIݣ"W K/(L8xI緉;ȅS`'RLǺP.?+٠!0tu;# ٞ@aL36$Y,~ n /Wu-c*WR^حM�`ŖҤ;YwOÐBZ+u)FP̍{sАe^ HRlD5@O1MFlQaWWYXQ9-RV@^WPkyqi>q.MsuS\(b)&e) .t;PܙOE2iEF zv2'=oGC~J_Yq/} ]t0!h<cT˾q0l /ZlܐɀxO(SB.=@RFf?7Y$%4ċq(!w9lgECW&a^R$ xGGAp ʆohXx w ٔx:khn 0Q I2+1؉l}:,6-T=ܖKɭsv0et=bwzz ]N5ҁ, Q:PKއ¶#6vص27CޗC܏$I=Kp& K*n`Ɔ$y%ac3SsUv7R05)Hd?/Ɩ<S72[$JG@L*骖Pq,ſ`_h 3f4#99_ bzE4mՌe,N5m従cE)Lm_1^p >.;.u U[;E00-cȷᯛg#$pA!#AnY:OSdQqa,,‚rCl W^q[QXva8d)s!zH݄Fphx^y@sd̨è8_2&li:#wuMߑjTBe@ ϱzÏFIHtuh�;o}nIJo=a }gf#*sՊMx:F (CWɲ H f\\>Lp[BQ3ʿo1CeQ!0O"[SY9"ޟ4Ȟ_!#GoG( r<0)OӃ|ح"c7v'|+A:ݞzEQJsl gf9c4lAy+fJ87dp'&b&)=<%'c)s51(êL֖|tf$dB#buooT9QVF S޸f<笉 n4$O ޢ1Δ$櫷P0%&#Vʱ*\2h.!Rfict tk΢Dd]1Nt]bLвepjcdl1Fc يB9a}И d{ o6"-mѰ%b jCb04_b/H[ζ,ʨD!:Ht X6{*c}vp jƿ Y~OyAeHCw~"ڡ2r` FeLrKZHõ)0\14Gk5%8Yu0|ybh1Ⱦu0_8[ 0\СFߵ+֡Ra1m!D!-G^>I`{!blaT0G4kdD &9B%~Fnw.%(>ogcwaUn)ϖZpE xH8qNU=b Jw(xG4=+#_�D<bp[ UE= =5@p a Qf+S^MOuyWx12!\7@ :pQMtLˆn:rARY&TC2~^m'OBlɒ"pJjYܘ4D[99$<P5l]b[WyI\48; !fvIn9ԎM35.<_jAKQ/߽ .4i /réYW=:O@.̕.V?oiՓOm$ p NBƣ^PceQ-stƝbO Fgtqdz5kY "|%q-̧/jW<\M5!N벂)/g<;lCڣyTd=.HDnjrӎ sL!g72LŦغRFA`y;X%=qShc,*ȩ4ďh҉C(E>:Ϧdx o:f%@Dʓ*8qcHfXb(hI)ĨG@@l@Jl9ಡrNrE-2 l^;BCRq9X8tq0=ZKT36;@H~R@`5~eoW:ЂFea}߉ȃ0Op%]цds'XodfQ7xZ(s뗦YDohCaM�sGn!<R5Fp8ivb\)9ysuPil9Y7ĥo_ AZR{=q|{+8-"2*,QUK⊿|+YN#>ʡͳ?ՄiAF#U,&?'K� }D༗ֱct(ļ{%&nxĘ0�~Rӓ: @WEFGcy/8Oܦ0ڟ=akBM܃OBXD)jNpBd.c!%O|L,4Wӛ p峳/ϙC !,S#}!U5SU�Q47̃q"{ iЄLY^RaC;W`pGf<ѠyaXfLʀ;!ᾙ φ\~�/yF2c5r%y}1)7 Y.WNjtq.E,98WBrqe <dw I}=]hH&AʓTqA1F!b31 Qۭ{  t-Ԯ{}Ї_)jzM¯dzfEJA* Υg3Fp]aٳ{EG qN#:b%\!i?`$NRLk(Ư#ݾIa-\Fy| >2@-pᑀ_w2nk`a/NBi_mXO%2KS%ql$*;*1~(N쬇EIjԆ!q P}0jxʹkFCDcCͺy3 E3eniWTR F5l J-c &ua EHĪA>b[dN!lh2"!H<mD(&%4b%OrB. =4!7UNd OO9cfX_ÂwP(J(fhC'2bZbЄJ0fIMI@p&{xfĒ d,Ua=nkcIo&%Ig r_z#عY$&ݒasؽԮB,I@}wRGșP#H=~CrdőD8  ayЍ@C=MaJV=-,90lO MF. *ma۔*Ds-\Gz'ίm{ޅ61J ӰcEsxfOܫm�Q^WT}a\ip zT`+3~� {)1.3Jϟȅ*'4֔(\J1n%i ·@ W-8!I+D=Ξkh(tmlmIRGjs]B2g}ix|0sx=/ې}zV슀0K$Nmy$$7/XE^8Ϊ |RD#5pPJ`Pw u&X7) 'lثD|2 VfF%vgXqëwvg.TD] "%{EoVHX�( mUTDĦjf�>� c«ŚKHT nBrQC 2Q`8."`1t}Vghq;fP`$tn1c-6N<T]K9Sc#9adUE[c>49tL/%9I82K/ȸD8<t'фcY0DYk͠^@[y? y(9 ?c^$es9 ievJ5Ģ/6W)1.\jd4̋2\ceh ՛5 PFE7Q,'zV6uekH 3:ʚ_BfVۙD=2C4#φ攀PN$iIȞP$$#aRׅ\3$Ykhe#O?Po#+I4y])䅂'fs)ν,Q$M#2ij9y 萟W@"iqSI4nMi[qn$♑Wmt螑cf˙5t>00 Z GLJ%ܫ&JԉvC%<x=t.&3{y|z]950F <N^a uN<F7j#vztLbE:lvAb+'+Xn`ˤ ˗̗ ~312az\7_m*6[1,̡Grwvk2 ZKB -*!k,Q&z1lft;_PS>!l;JD>D&?ek;N.QܕKy9 ]:3q0,,rJ gׯ}ZX JI݅d}b,HX L_T:j1_T 7VbNˆ::yeڹf^}9LT3] ~1 /ܒ]{j|<q]k# z @|N+\08,:' #3&ty9:�fE &pOyRrg22g En% RaEx!cK2n4?D#΁y˪ 5{ a]< _\#憸]�$h<P=0$\@,r#m" Co-vsicy)ml"8ƎbCU'4,> -YצϨ+/uq׻q ļ8up eNkg^Ly o8N\s^*4_t6ڏ+Dc[=X[i\Y0raE=o-gk O*xuXBƭK>ҥz|d00gqԘM!$bV4:I1\k- |nD!r :U.KJ1a Ry`o Dt!`Fs'_ 4E]~F c/L.ېJvMwV^j20m1&,-g,hrF[.+)J@9wI'FTo'wM SPu6'K�Nv m8lC1kӬvπ6̎#+\) sHvO` ٣/4\]1e1FZJ;Nr R\*qL%K n-&4E"!tYmm_A(G ɋQX(& CZ0_zǟnj?|ɲh7;L{8qBr1]ʜD?Y2L_S]-=6xqoؔIk( +I,̴TkY~r747GL bo Y� 1r6N,-`8Y<УN 7otv^8׈3~K"Fhtip#:xC2I7?\۫|mr;[#D80O�HⲊ,jMbQiH ]xWsnN/?`ţNt)sm=Sgaco!/" !IN6S+T"ġ1LAXZ ̽\cl�H~=sdv+* i$)Mx 6ZY=j=F*{ukvLuw K> iQ弫P [#ǨY*YͤbaqF2>;&PLe�=yx/兟Z3 J@IisFUDtI\^I)dFP7F#T8(2&;O|Ti~ g{S`J-]-d|;=9[VO&"e~hlDxqmDQ,DZ,luG:.e< 6Ƒid\w(G`.k8?n4) Dc喾4\(75>TȤ6>M*lӒ_x[qKytyy$'dɞCkbr)b|ghH?J|N.y&qHX]PJT,vKIk=Q䇀b%Yi^@9HffRZ qu:Ǔ@ON3JN"㞞%pŢyK3 27/nڅ~hvc2 S'i!ͤQFc?s^ϡ}*EV0JggOM % Otړsܒx0مN![ năQZ Ūm`Fqs4ԑVhQUl?yY%nĭˢhYAO1f-V' g+1'@/ksMrK|$`.wد0Ox p唍CKA$ c#b?O`#{ӿ?O?翯?~_uʿOO\W; vβX._ͼzmJmzB^o?V_{#Yݲg q37wopMw~!ă7�ooGV'[~Ɵ~pq%:%@o忼`5=3QQCnkkd?0H#ި-rOI|[N"WPEk}keaUW UA-jV(ZTqm+CK:ZgGZO +ϛa䪤俥FJqv\VD+))auHi+_XI+ Fsey#oQXm<(u#}�`6mGd 8PĨv0N]g;4WiE]IY-l $0' }l*Ȁ19}#9h>_ +G3}F[3|ZGZ8 =v{i;'h~cq"4XG'v8W<r>.|�W(w 7۾yr_f[~}_Ez/,+쿓8ﮍR~ 2"Dm1V\y/ȑwdq{No(!&f3(yoM\| oTwqUᷔb?~v#pw J<hxw.bBR ]Hxy8-|7UF w$(LGQ'h_\Ě1D�A2PyoŘy<TcP;`IN*έ~[/?(3qߨ<;zFYHGԌ;f3i7;W*4U$H&JY/i9Ɨ#>izu&YMt+" HxZ})!D_ |uxoY|-0|']y$SPck= $d=8?"к+~#еϝ [I20~j!,@H?j2?LqN:$p] yBl K)QQڡG_դ0er= 8a,g0DVWW+ :L'ѩe iݗD{N>|mׂ"-wuS.R~|k {l^k߹:hǽ@b7~?y;}}8@Mz:P‰GmE uQDU7V}d^fWf}znT~Wo׿Z^tk=c/aKʌvYN[m?}~KsEjVivsu@5;0\(%vHjjuuAj}4s$X?l?Qۼkr-6l,yR}XՏ@ȟ?i-ǥJML[ǽɸZͻ7>(#%!${:|P> Ax*+kgh-<%r/ΰJj@eB]Cxr4>!R놏 kF8}vZ15btb̟]mഄUwjnpS}_6ĵlV{t;OemUWK)ƨo@ܲ b^E173_֪*OI=!@nZ}Q$$vC{σ[HQb�$Opu҅sSEdY`Nse pͫ~T3Þ\6j9`# cx%e`WL X}.o*p)˖PO]fY6n* xMXqف|w9fK1fc9~8kcynF  ; z.d#ٱiX5ޘ}s>q:ypWᝓH_4ѷ~pw/|fwAjsIaĕ!N`jnOr<Bƽe_ʄȡQ?]ur\o0�௺,B&ھa_fBu;t#nܙ=|ƈU,狤W-32.B>ljS`�$v.nz^{3k`sP/3zޤ䟞  @ݿ;4c}훡n;-TéQ[[4g%=i]\6%Ys _)QKmwE?շ?`pnߡILW~紉z ubAF!G%E0еz^@K(Z}NzT]x5 yX07SEgCM[Weqc{^!Q<,7o1䳊 ޿|?ZdHhTٳt60@%JXr.iS[kUjÏq&3� 8kFg]\dí>FT݌1!n}Ͼk# ei>I_m`lZAMa p@*U~;Hb$wF*|qqHzG܌d:՜&jyiMTQtSa38dZcGϴ4i&[k[DA=&Όvh%Ϙ+[9) S12&ۗX+@Oira%S?ʉ+>!r�IOgq}}Wa3; '#b,ƛJ{uwiSw_o4X]a :~_GL|;U?e!]]&a! a!sdez8p:_N3?N\f_�U,pҼG!C-}l ?3}ǖe^X%U~ߚU3MX-%R2OxZ9q5< _ bH^ L?ʍ|/kjkGˬf(0Fu 0*=/N'~63XU>F_r2b*D3Eo7(ΰwl)\ڏ[,ȷv pGܴ0ws\ Y-*H^":a:ǣMO_Мqglqu.,RԔm^~}&3e|Z'puGzŴ} VfLK!)R+-/o||r8j~`GdiȢjfx0ێzU DK5E;%)"]xp&}BbM.s·?"~q9g<B ._g3SzX ̲_'f~cGeݿa~4jwV|Έkr(9߽sޠ%;;ꭽf"d[tfl¿?b6]'d-L~ّ, wDxʸ>~CN~f$.ԝ\7 GLѩ⁍lhvuL6}q0ɅpR=`G%RN<K" 3ZEGtB.&w YUhP߾ݧ||I?7^^rw+( '- 0=.+Y j߈L޳˅ BZ1N/],LpWXw+h'x5l^(৉BC1ze|W[aԫ -& ͉@k@UL"art}hɮ ]^giEP<Ft@G:7OhѹLry#6Lonrj>W"ӏ>ǻgRlA.qv) 7^E^s06*'A+v9Cl2Fx@;/%0?":(A@ak|arZ;_$YK[׸Sl/D'\@՛%/QJѾ d2Ho˼Jr=ˆQ#V2mw<q~gvJ5"}䒕`w>U"ˮ+4d]Bf Kmqo$O> uhx;4S|6]k[?.]¨`!mIG\ks%*ĩUD<$FlD" r ~!kTzEtI bDJt}R/+!¸~ԺG[_-W}DiTv Q/-</,"r}K̵߯(<a%M%M\D-R/s0/αrœ+7F+[B ׏DNICTתc~-͎l|pK݃^trs.S4i7w!gHx\rͷ/W9jѱw :{MKKwNVqe ex</|uT< o}wՏ3&>؝D=2eM'*nژn*.�;XO5Hq?S9x (K>T<�ب~P`:팭Tjr>9Y!2 YSɊ]n鮠'vfn(R>m|Wj!jr(>-5z򝷵PӻzH)u7V=U@PGNeRzE+W1V':*^4Z!oRG~4{\`4Cyu0On*\!,SpElq>~J/0h\>T»2)@RtULEG"F#Vj{'ٵnc~YZݓ5 }߇*)z=eJ+W2Ñom>* k| riv۵jYkO>}@4c_V›5) "iƖɳE17fqʍG!7_VPh醴 * 6q}kp){I-@.`w1\èyEh,}JH*? u?@SbʅgO`0Bh>BP۰K1>m$j<jčNLodx7m3(~u XFGpUt#ʎZ|y4229�jϷ?^ZLB|g@F1˧Fa_7z*z/ N+P,üP?쉵P)cb=@>gORY`^Ub~]j �xF;k]Q,aGs!I_.-ȩϑ?h[ me>bźw&$f݌8BK僲m.Z2dsH|ңh~~)z79eѺX/G +/X +~΋8zzrK, 5w~%H,׎APL'iT[8x)71]aUȎ2E)>z�7V 6[XSwywxG-zJqR]mpux/{+\X^OZfO uݿx/z+ZP<#-|j?c0_7] !#g�,L+}ADi+H߃^W֭F!]wK. 3N(Kbl:B߻Γi]eoɘ"z8Xk;1"\.jWa2a ӽ}eCf-&GN!4o)QЫ^X XpB>qMEMu3Ti?�n/}KhauT>G-x,]6Q86>xn|>~PF1a1G/rOV7ߜu5:FE'ѨI))Szbu o?;\[vJ#) e~o>gRy%/o5nڵZsxlTg?4}֬"VYqh9_Q0 /6fkejA mWp CYH{tu~2>a=+WMӷϮ@Bޭxng`,L5ӻLtVZ~XHm7Ap4^ٯp<ت<Ie6U?׌ؘjˊ ASy[јi( D07ZƦur/f0- c\-+.$*]34Y|6 } [{xV&*'PL Ɔd"9_żB~y CCO" pK t>^1r ;s\BqF=^$^;-bzIӟTAHn|$ dÊPs12ʧ~fvn tFڬc59sgyu}'j7x,PR꼧˕MOe?(b:18&DlD^g2͢Zwu6zi2>KQ;WU~]um|CR dɄLULJW{"pgZGtS(R>TFÕTT9< BIմO:+5tr܏.Z), '.T:m'-LN@;jDcF`(t}~'4S֏Cl6Vg#)| NWxS׎mu ;)yH7 OhGs> ҌZh\?aX¯l] gǩx 9p(\3Ɠ }^sJS3"H]'JUO?IcR"wjI׺W�#)J1aٳg?�KsGqz:X\퓼8sQD-k+JMxUVT|k^h<>H= ۉSPRV18x*ՇDdџ`\'lxU0>IB3Ѭ!Sڰ# IWqA6 .;rHcQ*,GwdȆ/YoY݆E>qe/G--y#eU%-Va93qX"6<4:q壹3�eBiP{/fЅ?ה"֟(1ۺx^IHWԉ8z?h8-( X I篠jz*{4eU<HQA'g1hDl~lyj 5"ztAmc>LyL1<\"Fd^nu кv1V<l u@  dhvwCi꽢­u|𺕔VG fp1Qij+gйl}5Kp@;cLxźB8}UV]zR�>6_ wд_Ȋ~HPB~~#XfS7|np VojޮxЃ1+](�sz >W9_CA:lA$7Ͱ{÷?ڶٿlUR:0�RpFXUq9 +/{J!{2R~zȓGGB=\?J4l3'0\=�ڲPv`~PA{O2Dr^ %Wv6MD?n.!qšSý')zW?|zտ?a??}ȿw/ƻx^_uEAu{k; lS-/uWXUpIzدU t4ouZ8&yݿ_ʴyʌcF4y+e7Tӝ^y_0c}̫ ܣ4>e mtՀW{Mz㫹JR蔾OJC.֕ ,`}A~_(ݸOV:of:O$(@y=׫ ǔUߨRFAaLro.^m� (?ldEE m} G~ݾ׫Q,Z{%|#o]og5tw'Ge&"u*-Ox8׹{x�EuD]^w.D!1�a 4#^w/6Cm£,~Ab.R)9KG # :J:yx!"gP�{>urv^^^(Sʠ�\); BweMQz׎> r4^:恹y rA[oE-Q=zzzzzz`!M^)yիs@b I??\|J3LzPx7vWsHmq?~!%ݵ'd^G_a<ᔶV ~nMC kA|5Ș~wRH#sϦK~|ֱ ߤ49Zu=PuJ6ڮ:6f^ aNJHCِo{wE9ݷzASwf<1?Qk n[ Cȋu:m+х(k틤놽^}AXÞL ?Bg 1aj^m?$W\n1OGk]vW5)kU"#;T�7GBL7<ϕĠ[ҏ rҷ5ӢS:C~5sk۩K_^׫_ϫfH{kA󟭇Qvyћ�|HeQ6m?׽o]N/P{>^׫-|OK;)U袹8RQZ`e9~Agn][7G|'ׇ߯gJ]gNbJctWmOH3ӕu,Z( q\qno J1TvVPyKs+לbrmtaq*UnLEhTer�A{:VgW)/y6e*R1DTR0@ʎRoUPrMc +d sR JJ_(~u3j OIB?} yh 8W{d^M?r{][ʎ0coLqVow2w*\xsm\kIhށ&@UM)~w50p#2 ]1FHc ^j?s>Ճ ~vlRkmDaC?OTKCºcϟHU|Z#v:hZ*ҵ^o|yk̒G5ƚ/GPLz�YtбI89n`rMvg˂5Ou+gό 4:^^)\v9EGZ�!_]5yyk}Wɒ{"2nk}[#?R-:ojբ{ji�{M{2kQz=2 \25!J6Fw<|iKB>|e^>;#v HSa$ ˊ0osW|zs ~RnCdX/]R."n*w:5j?8�]ҒEYng#._ջT\gZ�n.Zj)z:s lN_)~bKb*eSKADfj|(^^^^^^^Wuv 2Y^m_A1 ]ԫR dלyۮ{vz6KIsXU{/_3KWfN/N4Df?(UFSq==󪌿rE;AVr9޹ny D!~k׳8ybW! �i-Ѳ s'+V?C<nn>ezz&}Nu'fɒ u]r/5婪RO 9Zb$_2I|1^^~RuVUܻjx`ҸRE%A;V^θ*/c\JFtj鬺:iuEK<k[A3wS>=KO u^ClZGWWWWKm[ ^-UU3Zv_M#sm8kܨ~VT~jIwIijVbȯ7s݆'<wįWU~_w?W{VOA kݢuPT7]+~J뫥)休`UOs OѺA\ TN:wrwta^4T[~kVF GuϷή7;־U}W~kߟc> ٦K@z9߈km/%-D㭫XEE.ޭv7gȧKU]es(_Kثg : Uh2P>q;ڜmsW&D^+-Y:rU =>Ox֙>oio 0P-y,itnr zֳsi){XzRuά@7:%G'?j5ZdH_1mأ? W.mvӮ/x*djZr4Lq!o^qj]ߖЅUg7-wO;m ߅>+vEXvԓ=h&pr:ݾK twaPa5.ow:-?~"=Ȋat)vW/hVSAmB\9M<zY=!t׎l/ŨJ-wH&ڃofk.TE|/\kwG9ng2=}µ^RPH] yk;@WK;F t쎦H]lcy҉oQ=Y*.~̫;33Q�w)H}[kK_! Z]4.sٺ=H = IU4[JvC=Xޯ Et�Wo5}QU >PVvL?l$M=NAX PgM]oghY;x4m{JCJ{nSZqo(:S-RoSa$.aW`xoRCaMdFTE=6;Оq9uLE;V&9μ}D=Z5eV7IRnJE9E8IZ`mM*#)@p]h> 6# {!)\ɻ8v GS']},OXm;ui唖)W<ǞJN``p>%Rp(`E<ZG҄8 }-%]Ǒ*bry2 u^m)ir%+V4:7B=e1AcJ!dmwIQLVEr.*A'G~ 4kH)m;)4 ]R=UnD0=Y`1U{5Ebc.ZSjjw9}^/e=W  MoPQks睠,o0~I^%QǢ$8\1>-Ft,ꦯL"V=*|<&iǂ S̛xG_l{+iTMxκ53K\9ksm`*te,hmtqh9Ý9VHV_čNU@[9a+~R3%mlz;Y]{}S%F`<]šΧ-5{[9tEEOInFRG/]idBy:0Be3G*ZzM|*U M:?YϞ qW-0GF t) CЪneQ:)К͑Xg7d3 "0Wt(S%T䥤OUK4n>G jUyRN KC͊=eMzA#.|ti)kQ ՜++^՛E)QBj/V\ve1 М)!/ڍ8Sm҂jZtgEm>YP={y0}Z'bR%5D4T-e t�Sy(G(*-˂vVp:shr==DD>=F$( ۧ$Ugjۍ;:naf:-$JU.Yft㡣+݌ЃQT;t(f]S:0W@q5u4s*'9D; JTq溧*[XGW1Q9+DU{z<"78AM?sbWU'EtH+X>cbr4S EuOa1r,QHZ0_SsZ!ɢ=# %Z<Vj;+AUJ$jMJ;y|drJDA(-mv�bhipT٩FɨAa?)�kjxj>di�PXCZɆ/eAPGl)泌xMJ @. |ڈ7[�m%ItP \z.aZU|ӭG_.c-Ogew;^�+([6]9<ss2^}JҢе,3�H58^uh[.ZjΠoƵ$LV x/sQ=tra{YyttYiͲ R|.ʁVqz _`R^jX~"6:(( 6;xXf"'#'ue 4EյS0Ii*F%M<۲~x [o>ncyhВb7@@LvsﳖFasV)',7kaR2=ؾu;U7L~٫BJ*--cC\j.5T<df:5 6C)?hP)3ϴQf~F/܍@0!/>[DUq)8zOo@15\4)ѹ٘jm~L"'ve1֡riR;/ު,'D[~#9ṃUmuVP> t<{ypmL/XR:hG/c$Ķ's~C'EYLT 9D_WNXpΖtcXOFn(24^Z$+ϛg(tJqliGŜs(B Y8% JϹUcNT$dŝc=k9z'v\4cg3Q8 ;[Fk6`jvn[KeKE.VU(!Klr6k MWH+vp9Us~q1X=},`#<}yU%=r”;"0E% JmAU*q[*j };dN-R4p3$. Y4K+v2K|6 Uό9i#S; 6wNu ܘI6G9Vh06ZM͝iDӥ?sɰ]r7 yZ4f *9Wd'qsKSOi\"NmK L͏ai@wƪ~Vc^;�#ШT#ݚ+�WK)*cmԲP1e!9D1SˏoNc˿%\C\mzߝA0؃YӃX4 nŠ2d`AO!insNNvQ  z=VQ.ꬴ ?e}U5Gði?Dmviwzc;*_/=i%覆8nNu]h 1^S&]iԀ0x&m p@䑈*)(,< >]y1k'owyr<ۼyհ鐶Caiqtb=э=9^0Mk>EHRG,T@85inHKnNT4keQ9$vN2H9_U=x$odk^j<ϩnC'C9G-_(mi0) `B7"e!EE r1 Yw�F@2S|٤[8w l̺gY9ig.W)eSz9:P˭`5efX#{P3B> Հy:%MؒE,nizk N]j�ڟ`d s7>#r%ul{d@CZ;/&.SRU[ӗV#w�"1Chr=8))l]f 13 +"-߬@/(i>lZ&3It\&0 v}@Ѧe۬[eU;fw̢jWn`2 X@ `naeVPZ>:NCbMCEo-ImMb483Tc}E-z'"k-eəVy毺VF((\iy29ਧxu;|}W2ڸ+?m+L65�o Я6)\8;H祎NӾH5m]k]Ih jܭMgA+&M T&nSh~Yt`DMhlJ9l< p\}D"ƷQh d r&G![>!z3H3@1I\}e9z5HD3FX yJO,;# pr`J漳8xV MR+u9;?83BbQTGGV,:k 22UU c7X\0۠uƃ_IXƉB]oR5>nj`tsB+1?`2ɀ'@w:RUuFa ~>[g(&KH'I 9؆f䐖7`p ^�j]ʘMC n:JoYr�Xs-Ro&LF 0m-`.mі+0AE+�/W1z} FL./ը{w&4g]^XN2륨 14zGz2ÌrU 3^Ie5:^.<tj%m f\%XV:󕣫9ZE@7(`ZT2s?-4|sY|c̬Pw/s\D 0w2Zq z$,ѵ�?6 9$A*�^]4Yezhvm_jVp,gdp&VmKjt7CFZJ'а8㹻nZ+,|&)h)Pg.6!`snXQ0[#3Sܘ!roɛ�Uc`n9<}ъ%MD[[9>4~O`h x`>WHy bkU׀."ϱ'{vy38<ndDm4 b j1֡υ+ :,^ldh劉G+A?DX@T�`;Q!SmUз=|*ཁMrS�NhYԆW@d1I2s^_ rA@Tv1/ejI: i9(<`sY+ +(. xM`Eïu;Ku�I@Sࡽhو c-znbƼMY�Ǭ@G.F3>IGfka17;MB!8X5ۃ3&=5:HmD@6a?-# |l%Z&_\$|u\tpWN_Sa_кQ0[9FpW}(Egf,¼H�P4[lG{f"\n##/e`u.Z9J* !4ft\ZU2k֧!bA۞<5_ wN>V W4\$ma MmPYtsΌH4x\sG<keP 3!,c.Ad g̘%ywkԠucUu "۸UX ėBXjAq +l3G0IB-z@%M|af@XvN/hRhaܩT^)х-F'-c0O3'<)#k#8}p1Κ5$#xF vj:uv򭽏9COsz]LBkU ?gÞ<)<^rSQxP ӣ}w،LW1RQϝI{t~Q'P*}:(ǯ'666E$wlYm=yբH{O5; 'j0`JTAe :n=(� )؁,9Gf,օ7#p֍]iHb uR^dc� yfc5bQ.kƂZ~2&Pa{cT}odC9m2s9Uf񰴸�b3}˻e6 jLtbqj!5!i`7'+:)k%" TW4[^iJbu%,k4G7t lGT96&%! AӸh<jL~@I�VtlO9`Ն J6)@`q(Y 637q;X{PC3CɼCĂfh-fحebq>}|~0w(21!Pϻz5k�IxH-V/@>pM5d&9*j FEPVA2 -AxYE E 2Ĭei0)3ev's))�[9͋zQ 38B (5+nD!#*!u{N=pa:zRB$9פM N2}yb)UYAD% X[`t7pW6*f (1`azon(Dn+( uY]P%7y̝ܘ_z1#SϷa!QCjh'Њ&DFkugn c9'<Ŀ(Kf.< @z!ܹk= 4M7Wi0sO:C ۡY -@)--sBt=`6:r3 $ѭk`u~{C~v!+`WӀ&,OK1˧6BҡS>z,: BN 1ڤI>@Ek|G` Pkڳˣ`O�M˗giT҂^ nùAy{x3 ,6蘖iBzE96FC^.)9aJjYfgnp,Ԉke6oH҈8;PwB cE!7*#HUۦ$Ͱ):1L/WF@IGx9vpifB9鰄f[HZCOi-5Nkb2uCiz CZA,2/0k =kvpUNڜE\3Y!ޞ?p:!ln j_魑D육Z`OOpwow1�sӳa tN#m6*`=6 P7f8O.: wp5twHeP9:38t) 5lע_ -Rm;!Pyrs2ɠ~N>@Hb*(T bn HմZwDyS{:56;zDni8&XLb,{8q Ee7%1PZӞI9{v\A |=?ojJ%Cv4CpV0B/mPd)~d;TdRP8 m~76mvv IKx ې<4a]W'~ A6(Z9SNHdu&=J{Y7h }C`v%i#y0x+'PT gMV7e�rDLۧ*/NO'hs?+k[--R�£c7 ̲*3ʰ?`]Zd$=wEDQOpn-Pj$Y 'm4b `_Jt[jq(iY^-& rJ۫`}G.'g |ơ1ٴ14C@R> qZRɃLtd.Z,iFIeRXdGy:251vl'm&!nsFrP3Pοkthk,݊KLcg)nS!"[aߊ';BZƟn?SFI5˾w'O'BhO6؜HJ&kIφLa0z 4 {„=Bq%\Fx0*BzU.*pXBkNh 앩WlaM!QF\dUFx=4Ɓ`G `v A`ILxDe0b^j{! o46[ D'ܑY䦒mF;/HK,@ -֥S@|ΨHq҈ՀUcf`zU|_G̠cE(Y3 z1}u-x\~�[[ɳ/B;kӭ|GkK@sPqÒ`Gb?iSv9 w`YmZNQG0 <UcHA4 #U"d^aQNҞ(#WHQgC5WH. #SrRnӋpVs`ЧZ<U僪\]CF}fѮɾG*"Y,;yEu 6TFqYa ZT;e,?g< ,Ls'HAܥHrT7+fOZhpqאnCi!G]a=H IoZZw#4} y7]c LZ1@ѩuqĖkwѰdEFSW&ǞSK>lY베lɶͫR1Af.fZ((?@�ZbY9Kny{_U3s6i IOC͇ C|ZB>v挎h;)F#ȝa:믡JлE)L\naf(?6AgAJy-\WX8E=$mv7>B*f?&N?H/6Z܎ڀ[b/& #;cԻ Q& *�XWsv3(EJ(a,d%sYPOv‰91M>e f}^>-$EAQ>pk9u7&H0@' ->A| Ep5!F#n;;C_<SW ("[j1"lF.hq?fI k';b $f-Ao[39]�b ->DQ&*#4(6Aea˵< #DB$Wz ydg6X9辀"t%[a14CNXi3t?M)9uRdJȔ[7ˊdc?4ـw4@u)G&FL"5p[O70J ' "7Ջ̇پL1ÄlZxS3h�s &װhWI'װ17iU5<frPsiᴑ`j am ~E弚_FDafU�Bcjta: f64`Y^!V8a\)c | _䛊ê|' ÄL\+T٭Zi?貗Aߔ+ô(MQ1!m^WK*7Mv؟שU?hg2<dLA7t[lj %Fm}0"m.l3NfC8)nl'tˉbDX5JH8p=5L W1M1d7HL\Nm']5`~D!3sͦbl!fh B38Oɥ/\Z2!a ŸɻsEbOkBL٤=3y?#:,E*жr28x'5lQFX9C]ל[5 !& \%ᡆ8Bx;$% lVt K;ńa!܍n}JF"%cwR<K ,<703K5!!XwH@  X Pt4Gi}㫛 Ai QEff6>.Zp<Q;p4.)9C<m:P:xRX*oq͠eTTbLnp?eAwz; tv3O�0&osD׈ 5X"e'G%l2Bvœ`bR1%;BI :cA^ >)#&(FER;PB[SpKTTz9!C=a1Ue藁<#Y\"0뎹![S#5)' ٘'\0gH3F3 ]f2D fqgP,g&\<(@[wA-EfH(=ѥApX<i:6_}Uha¥ʂ+hk->%PC(i5k==f5)'z&idÑ imP'9;.5b^r4q^(W2ĘiIkE`MgU&kL?WRw8oqXtcۆ5M a�1?0XLS5\Fz<#a3Ɋ 1,׍6UD̘ i.ϵfƿ->oy2 Jh&�2:(f4Y6}=đDNJCK;n#*]pi 鉢͒$n/HsfĈ t&B>EVmcUd`ŊILon<j1BɴRȨ؆qޜHM;.dr|-&SyK 0.Y3CWpLs(rz !bPlX"�Ccp %mظ.R'YWkRRtbbӦB|,RD,6 ^ni=mcG˾FAyxzZ3HI <@O"&xfS+ᄏe9/n]ZDZp~MT;& }RqjQ~4V$Hlf(Jf8R3b#;Qh<AKH J B(BAp( Rdrd706pl, 9tAFOPZFMl% Ơak5BuZi*!0^0a(9BQUp섕spƖsu!gRbhtkE^ű|=wdm{em8aU8%<RB=Hr8C � b? "=6�\1&,MPp}AYA NVǁ8E1B]yё70^#_N|z@}y0$o0/*!c*x7hIZXbrRC:ޒA^`&|scvLXDy[IpWPa$,[0} Y Tl`S JB\wU@9?t.fY 5+\ `Eo`{`d�ҦrvAFEz1[TlC=\u3} FS!N 'KpI2^o ,x۶4ӣF oX38!{b7SbXp ȢY͔bFΚ5k ePe;Ħn|@2De^؅UgjU n)ѻC13w) 7D,+DF@JXk*':Wxp0gyx^\E24@$ƒR-v@0Twg "\:SZhdmy@j&Anz&OC-)1byƱJp% K/@lTɃ! 0d5Xf,0{@!Ex>.V<vZ<HkM9\HU":Y"suh!)k;\Ŋ?"YMez_g|.Y\<E7:c>ǡ * $uG�Зeˬ*]%N/ P <[fM;bY>:&^ I,0F ϧ#il#Fa߁>L` G̤_Et g~ e-ћܬrg>1d 3Bd6�lB hCm,Du6gY}3F ^ij1H($mRk'd)ml=\ } FT; ޟD򃶦wI'98 IܛVS-fJk]q2j1"eO f K'@y1cKjY)Æ<YY.LtNvV5 ;d#;Lh1줡黀R1"88eN@12!svLHq%~@[78 SPF@攉gR6seDC (xCMtS}+ưI x M >"NN<G#u0U,/" Br]Wk<N_a6Hb�W0AN}IA4.S�A&&q>= 3lpi m<#lc `fN}t|th,9=ZqPGrAq#6 |+sW 1kŏ  bíhK,bfoI0np{w$,u`CHY?ɿtYi(e[C r|lZl2`gÙ3h6u^἗CB,U9GCamdkbx`, N5`$M_tg%;DP;9' ό-z1HީOLGjyNK; &9CLQpY7<  1%�C p1% TjBmbnCnT$ׇq1FsNAD{;`ц(c,0<\ u\H)I@@+*&M Vn;hY燇K|[x JnubOl|7s~+]St@|#|Pja-x2mrnpFA @ڮ όCt"*F02:~x:H>GE~ưh:XKJ =rjZ*fS9 KwV�˥r23@A"S=Ęns [n|m̀.&y 9#TS5ҠG'2=4Vf1=+hz!SP4juNF'& }{AG uac%騋,q1�p1F(W:a�\S  ݉!Nۙ=x|^ 0 ;}Vkāk{Zb,Ä=b>v[u�cЋ!WVTL$2t(lH4\a ٝD1$$&Lc?,%n6@QH[x:�bp ˽y$ ZGղTav'$YbxŒ''@Ɗtc"8dY[ a&Z?fhIz86dcJ>M@G2}<* S+ng EA*3qT0%).*p'g)6HĤXy],G '#+IasWNi;ef}2eˡ6|n!f8 v!$p�]1vub ~mX ֧aTt2ip5L#3aU�&:bB)ʰw8#ͣHZPZ`W +�2؆6p>݌rG}]*6ܭ)} nr?i }eںiTHmeVhg}' fUaWf0ì[HO=?qnGk!VH_$ }h>B&P!Bht1tBh5ɟ˅6q0{a3 ]8YȌNTbX ;*Z`i$JjB  >Ȑg gM#+)RXaxlК4n쪈vƩMNEm.{0TQ_[ !s B*tE;8fAse:̥kb`-gUh%RlUI5P+MV4t7Qîi�4$^4֯i0mn2':t'*!A L}LƂ,ʑY<1 3)"ǺIu.ܳ;�d[K )M@'OЭaM4'0HsC5߃84 �΍Gtcc LfH`%8ՙ4ʵm)b_@U͈X(}g1x̊vtB{>@|c[Ӣ53ւ_�ON&1*2J& bh0 ..]9@0(L ui80¢ѕH6jQaq,8#%W"�z6ӕ 8鱢|v]y!-3.ed^q5ӵѲಬC!xvӔ�2ljG4gOdS� ٢jqΠ||>.#ZFGbԿ�pF;DhR>( >~bT fG�XV`zɳ9ўfa9FDzy(XmnEgഏ) &H<]uN1~Ԕ&8EGHtj*V3 L"WQU0P~< zG/Ā2?a D4vئ@fQS5tH$Q7"2[>lhjxdu\\\A13s@/RR {&k1TȤZLy ¬o fEᢁR#0)7,E!c;c )Px,)7vz0̀} >zy0]F hYA j\N9;{�, cK`pJv@wh(W>i 2npe #~ f6gh aqLυ h\Ahw"ԁXs| R6/a G13sFqdԐ"ayhW˙`m++rJIj GsfK15qnafMJxh&B[Ԥq&"? kV@>JhՅ0É(k�`50,*D6. rAZe.lT _yFXCp.VtLJ:%يêtc W[ØA�m@XgYsrmy:OǮ/m4 X*iENU~sI1fJEP.4b Osf>Ȁ#"3v6> 9wkasPcڟ8J UĶ$&D0Nu]~Ja.kotqnǵ4Q?fId #VQ af cq[lbj0jlԄIt@#(<R;2B ĨH, K:w97v5H%ݸd_(Ѳ+MMĜϞ@]ç@B!nF,N]=/)8ܵ�Y-1zﯰq `nNH݊~c2(Ӯ'sU`Ko3 CVj3 2HwH6�̡0Ņ!VCFRq&S*JY0vU>Cee-S5P jcdj]@2y0Pȸ5Y Uijhqe)]`q1ERSH\j'PrpӸ 4Dr)ǴyqVݠpW3͕y7 EaӃ2 f-آPp pݲy 볠f> �S"7e$ RPECқS2ِR,耴O} {~(su&ˎӘb4JPкfqb 6k?˹4`<ě!qtpXZѐk &Np"li +$p, l@qts=ƷI``P$ra]Q'y-N: %w:)6�{]H5&F0$=WPQ1@f%w9=dfv ,Pn:54TVv3Xxt/9l J<<@t;%)`+f.FRG1= >͠/p6wQi-[qp�35EC7TœP޾{WXnu /rgI>d5pPiBk B>u.Ctf=ᨚ"l+|k ;�|]?6luY dmFW3O4m,u l3\#ǂqb,[CV Pƚolz4爦$/5~ :YC*DB5 ݡ hPqr*cme4q0,hi/ו@2&7`tP]îM+yi-"Ӏӂ?kNODZ4 T+z!E^FduvdT88=m`,mW5WOabpN \AlF,�y-$ zL gvcʢ8dݐPmr&\D>[0L{8JC�0@eq'g}!v͝Ui/y5VdLϘqh˺L� zǀ3hWDӚ1`C\p 7qk BzBӠϬu,su&i-kxډ2Zͮ2P&2&5^$]fcqe#0h -L([2 Y.qִ3Φ;Tj^}1/9fIJV5Ьcܜ1KbHd B U` KTLwߦvHy^b )IS0J4s/KeL;iᣣk2 À l+0D(4=: 1ДQM@ ܵ� /[j8xT�q=nȍ.`>2Ŵ`%Lꙉ%*!ȍW&{PN1hD "F&;tPcCBn__*K "V`kR٨`#́^&2Fɗ1/JtHԒ<F`GI3E`ɻsЧC('tL;9_׉ k.!$z+`P6aMBr:)80Dq7Nv!~Uð*0Ӭ0or�`X.]`GA@!2,} 5Hbe冩Tn@>`0O3U Vۼaæ4Y5N0Q[0 Im<lջ̡[Ȍl&ϲa.aB@ *FtQrM X\96'2^"oJRHa ;.ežC$X13Bipl&9LJ?xFWފ Eҳ1І&\SV6G(0hQ_+ h-X }\*ܲW|eZ3&9;!iN})p4ƁXMx瘀�A-a`mT�tnڳ\跅hg,D UpD ]ܪT^N<(G=N{{9I6,;9Ai(g *}AhP od V59̘!�`GԢ X˄gW]Q.EA� ` 4^SxPLޫDCsr̟_L>q;48aGv25F=CKް}L-@&apм4(,x1Cp%V@(?V!d^&2`i ' J"&'8 P�(ct @0$I?r=Iv#FNM Ճ{Bk,t=|k`ӧpGNs=$9ϐw`0Z.t񂘡71`{jɓNǍ~u#4D_yx!P9 ֍mWP9Ls\wi䄆4H{pY '!'2l (hĘaJSA!KtJk}tc* P8/sfx Ks/#iVզH ~s= �.^DZ LN^A#5XBШI_hxw"?k�Yݢ ~9G^srP7 IB]8/ d>Sct� :V]{16qC׏ᅎI0d$7^UҪ +0>l)`=¨$XJڰ!hؔ#H4W.H jMʹRoZ j42٬%9$Yng!8x sU! "-n[taoLkhr&dJ} ⯥C@4ك5p$i_a[ɭ:7,TٌVݢD wlIGzѱW5:m vtTdq ay:kr;VQ>`Ш1,sDbl T;1hOBe9tsqJaD 'o "y7v 7E%6|f!L_g3M�cvuA&J+Q1Y3j P3(w(e@;Dr ىVq+<Mνn*P&᎛)1&`;[<\Ԡau iH' Չt ^]5Txm#R L+^G4]3,&<+=VUP?^rn:B.ac K>͆qL[Y`&lA3tu 9ujP~e !3#)vhlsVzPYqȱ2~0L?r`$YaxQj5LV72*r]`0rwۣ>_S6H0)xt!aectU `Bg;V{L?|iL6+W᣻๗3/=1CojUf=Xw '[ajШhB&;>`"M%虃Ĵ\{bk1PLEhB*<ս@)9:y=πQH2(]!&"A[e/J@^5Hs5}[KEcw/M'=%R6+Vߦ[[6o=2arfSz媛@lA("y|-l�Pp{b@qg8I Gjc;Un#y ˹IeN2feVQ)5KBW8bѾ<I|б5s34 p=+\Jһn["q1-l#*V u[V�G@ |~h}.SFt#KȘ7F5ܰ3@(96l B�kxQ-5Q$V:6?'>dY(!Y,b@ q̶a ^%1azCe2]W÷(V .Y_a@1/r-PʝF%>3񫂭De9( cGjn@Iph/3RNkf;ހ㻔`*=BLie%Y&SJڕlß6Z븵tKD)νdQªC_1XbTM/BT AECEF*Lp~<JKnCzdĊ '`YSKlue6K!raΓ#wh j0a6mm_lBQ9#N4&yy]P!U 6}l{u RRh~r=H,SCZnmvPc 6Z4(3#U5I|dkkpBE 8;BJ%uoGA6 B҆ zQMc$(˜)C0*aaqa@|}Y\ߪjRڰDv76q9Z`5E!`(gSF'.6>%f=9 yBb6"ށ.2*i; H.GS^2Ȃ{bД9[!ӊUMZD#w磳Q<"[PZUe l ,E rv_" dL(J>:ƅԔ<_ \v\5V GБr/W�x|qrs Lg!5l7ʴJ_ΠC-U$L-n(ɖUڧLnP\fj$YT{C|Uqsĺ7-f]КbFs|pКlkɇ>B'2iwȓ7ip aaIAyoF=16 }߉X݉HrmGdf*Fl0ԫ)\ ohZJ#oR{L p`wEsh�D<0#0O8fT]:71i84a4YH+5$(sC .*3i 9lrJA5ӣ�fHsŒ50hAts/NrMN|ё)pN4�"ytE@>BF)`d>7ҨuM+Y<8 <c͉dc:6 BOd#TEfd0CޕgMoEf4!Z3 }E4ûAoPI|{;2'#r +OTd7[BO_MȻ[�hZ0$jV٬FupglD%�*MLbvs A܃*3pkZN2N iZFg9SGLXmR%75f{țca )dk5*@WNdDAqJJO~DsƳ ()uˁ }Dz8vlv8KԦӴ)Q,T1c\<{4zd&صswَ:-4~%q:ar _ȣ S! VY\KXpolĊ ޼Ӗv$i `hW,TmE뮆yd>ؖC+ +a2=J'61XazO,A[л`ffӪ$4N~M&غJیcpx5zMU{mPbv F*n!u`rյ7o 8gmA WYe)e>[ē>Z} |i՞IOK7n"ʐc i9?9;@G>ҋ4@Jk:zp/n->ru>9hQwV#X g1qYm%L^R4 C$TAhK庐; STE 8ѕ"89 a?  =r([ O3H{ 2}|qVעT=/cOzg�bhMDIC]uɻXψV | "Kvcfg=8huۘ \U/vav#ޣG(W0ֶ +qBrǶ;0M'76]͓(^@I/kaƐgԤ\2 [V!Í,x9v/aŁ nÂ3~ Z3 lղGICД>Ij^)TхP.,5%fWx7PF^WQL3ye,6a0n!)~0e IC8tg@4ׇA-?WgD:~ײΆ+ }kȑ{H}4 3|Zΰ ,tN{&L(ڀi dv_-Vh)0˞*9 Ԥ"BVf6DnPa՛g ?tCI$xF3ףb=wY`q#= ,{RGk4zn&pc$l2*A/o'͘V8.+]Q˘= X MϗacZdYz2 de-JjϜ cf{!.X@/2/h�|rQr1[@P w0S6l 4,7†02'>04wÕP~,cSpboS +#Sө|G.XNڼ%1[EN<F*P/Zh4eg22 Ćo4Nq4Qʲaڬ @,kv@Y90a-9t *zjĮǵEU*dwيv}Hi7`uZ3ˤAxą,_՞RխqzY֪zF:0h29fFxm(r5 cͶk#xRLPɢAdφH]ëEሱLόe'ڬ¡hδ]oS:qֈK|0E.Ř jx cXUӗ383%Q#9|s% !D^ L;1< OM@oçwgukz+`_  ! "w/M v&L<<ZӿX??JO~ɿO D szd[(?y/.3 aF ,uUo3~Ȝ-P /mq\֦ _esR6sMoy-p5gJWCXCrR7#eU95w>)d2v^!&8GnG]:%xW5ޫXYGRVP?pAFWy#$U{4(uu}g[PzqyPrEkWס i)7&g0h $WA?ʼn1֡Թ:k|�tt|y")EF{pcWo(lO" ]�YD?3++k kalSmGHB3S.q xCF3z]Z>7eIS R�Ş򤪌/䑕d9^ rckʮLx['?LM|aߕ# 3p�Q(pƯ~u5X,<^<Y�./w#NVFAgjGGPQ~+ y[p&9+[hjz޿:t|[ emU[p1_TqRu)*J>T1nO?\g`px|<5Bo˷ cF޾zsDɣd=F[Y$f$4tΣu4XWo+DY׺!zedELZuR4<0Q蠳$Ը |ݮJ.uFtOН]� z+`0ל]t玆oDɝ;Qc|wc0(MTָ?6VW1Z0E$~O_0L/%t? _82=~X>h@$u.;уIuܲȵaD_棺i*q<L7_|厠w},mO"cߐ}&@E?7N!Zx0V%.*꺫ԤIZ"}7|=p_6ZVpN؁xZnh_cx1T:jrMAw39w)NIwdR+{|pl ﲷ(OX0/='�oʱ\/ {;`[f4W mu�;Sȫ7y[yWnfq"$ٚ-�ELe dݣؤ[>ȩ2W $mn C7u]xgͶy }jh\95L v4Χ?w�}a'T5sgep;PS[[+bvkg!0:A[$]p5ԑ.`eF':FnV-Έ!Wm ܻTA- z ES`"3@zKVbW# 1~y<m/TO6t9x7A^2t a߫X5,:4<!a}UI1,oR%],0u#1 9o ?xQѓb:`Wk3`Ë|FC苊E<yޏ?xnjxu|iN=^7E@@|MMLj͝g2Ụ<AL:?9K&>*;qaG5 ?~$QIZ #Sg,UF zg: Qnl@w(Oϗdo �ɹ&bRȯD ԓ7ڀy)5O#V&]]P'h)P=|S%] ;NXl.b_ _Q`(\JY7#-Ʉ2AG(vYz`-3#xfԺE#)݆՝d*R܋k{48wG~,+' e^ =_)JqAt_U/mr˨e-!_xM=dO~&ns G0Bdt6 YB6t ]T>V? �vY@v0jˌ$.MgY!÷pD",,teXwi2Q6Hzs}*S1.wx.ob !p94q Cn6 'p`'[zAnI[u o =kc,F,@1e5BziUګ/9oij'DKۚ}<TvC;w!v^5s+Hj]@ 5FLd{嵫-iŸl͘P.t]v7yOQȖ4zK=V +L |nHKW2:=zv} Dx;BCڧۈc[:08/Ks3I]t?˛b;(xK0@Dw1lfT.ۙJWd>,$&~=D=sਰI/,n] i>$dn/ĈRTK)qC9 E,i o`ST@G)fKr E-Mx!ȼG–7xSRoCCn<l[[$<cuD'SLޣ=2@MqB7nd\iDkx_4l,1M< ۖgϣo``GaӋw(s)^y#0ShqM^1xA ' Y}@l|:0o" u%7 Pi؁1bl E/J(+`ntArk#2whaDOp=<~nuDLJD= @)-sa-Kq1/E_Bq?ǸsMz72& m㛔!5JNKjݬ~!SlmV,ߐ~1'qas+�Ǝ-cB˪Y(?\J>Y!O\&@J櫭L5-B!x@HɑeX@aTM6!nHZxˌܕ"ؖ]*iVO.a 4D[2yQW9H@5Fm1xT62'Ud *l5s~#&e[졙#hjC!RNیD!%S蔔_}7B}F@LAY]*'+l!\ YB.x@0vRG |ZAv4b|(XV4ڀL;:_){ pFy~AQTN{=|u8>hqćivD7Hfӗ_آaOu` 6!xO?ѼϏ@B(*@cHDi'r!o-$zg)l^@(d2?]t{hY{dbu=hw"lSq. ŘD)ȬZ>0' ²m JA l@>(so[!Q;  !'mgV"8fF̒cpF}-c=6ʧǠ@_CL{9ò| -hfeߊ[_&|D2yE'-&�~ȫs6AwaO *VlgCۼ^/P6jdVoE&>5M(yPm57\;[,ty.Tyij*nyfqdq FZ/6_4x7B[eUJ_lc[ӕC |`HF7P-ШcVI5JS0 2p.%^3ؾmAnhyBe1#<grPw順\.A0Ǻ Wwi r|yN(^l IYXl`^`_ LcFK#K 4h R{б{!Фv@R7|W` Ewe6^:{X?el}h ɏFuWl?!&I92[r.?&0n]٬&6nl|ϻbݺѽ8+%ۦ*+ԞU8(C2=}P!L!/jc.M_XeE *~[YB $&,fɀKX2F1١P֌05Rnʂ%A7?8XxaRܸ鈿o$%XOZHq?l Is)߆:�b$e$P07UbvDM1><)ByY+y c3R鳢DCx!M 4b.iؠK;8wy.\.KECڎ O`0g!?tuWCh"%/_k;MCbM�،"e9ߐQrLUϵP%Yu!-mX{V^ V2;_I^|s>!,2ТZU ;2ΰ\AjnؤE8&Pެ˶K(Z\,k+''iSdq;KkvRε~-ɯC&[kdH`5.S�bK47NU$tYM 0@{lrWײРm" &޳80X]f$PT8 2o{p`<x'eIz?;ðn!^~J<<ܜ0L4;adQ P{5" 8`7(8a92~vG1rXg.O o5.gўitcM{^*Ҽ $%(v?obUc|FYlrB hߴɮS[cW<+~-7!k?N(s9r7>w?W:LI&(țȢh ikSG|!n@z:6vf#ȔKZ8_w*jfJc} FVn~(2cLrZB|�EO ź {( a 4w$}  6Uk0>+nXS`o1qamw`;|˥ub8zӂUD PECyŖ˧&9s#~mT_[ԑՀ/oO>Q,tfYPCAE ع_>`y�kL:RT%7 8dzWW*@ZIrrѹ֘!IDed~| ]Lt,ݕK {LR a^#٘6@< B8淙] PTLlO68[R?&m8p8�0c3m4>Op\"qӞɨHi¡{a5G*VoH7UC 6t:`jnammm7;E&+Vh MU%M;z8Hu ۲kwv;vsX<hͩoP@ma�͆uCu=!fɛULA}8'7K;ʁ.BSVRÀxQFwLXxp(ȍX 4Pj~(7 1hnU`Bu.$5 A'f7_z;T^ :ưyy⤢c!͢U-"=ޅaX'Yo8!B_ WR4!i)Ff@W bc)7yGwnp{{QgwVHLmhl>Y~UY˜-=�9J4U/D dEl7;<u˜U: ͡TY .qFj4yЁQr}/.Y M%35EHDΔt[i<zV+U|kI$S/ޮ|G`p`^mJ[(g">N )"ci[ߴh7kԚM+E!@D;m7kEou'CcT�&R@G6%^~D{MKMؔy�X\¤xNjqĖlQz}IYq 88Gp_!@KP<l}\:]:AV+ nUe_Isv(@&x-d 9>Cx>4f"Y92NB �7r?>8 '*J 2< S >4u@[ʘGcXylk@t }ӃUpP/ | L>ߨj%҇?2JE]aN*HHe=) ~p>P?0.YÔ960R4`|:P@ZXo4eMp=hZ=T ~ ͞Dfk1.Nr1-Bu"caɯr>N0.*z�YI`Y|8T{4 L.םN2~,o) R_X[/ɩ�G8Zxp4M:&4ju*inĆ1F p%k+tT0% dnj*_qa;[^X$"CͼEݵ/2UO&[B'pܚE;eQb/֖W A{#h:A {W>rJ-bZ7jBX媡؉.o~Ζ57n$N pB1vn0:}J۟}ϹeOy.>ڽG^4@ ~a)MW1T4|s5nK\*߬^gO~At&m&z0Fa"X>Hq Pe @vJ abϺ'qg@F#Q&zyhdL31.1x%Px6-6\\ƌh}%$z)r8DӷF~q3cx̖I&C0XLa/{Qg'@bOxP _@^ l2 @mVQigSؤS[a9/n?-CWz8l;ӆe¨iyz1Dqs{ݢʷKݕ.r'b;HYĄITHzBSB験Doub!'g7fuP.2p4 )e;'T.�[M_2@+ݖ*r%EV3yix7ՄO:YQkH[ ZqCBF@_>߱ߣ’|3A><jBtYr'LΨdqڱ�r{%,p:nd/cԔܹ^G6(&i(޾s ˕ `%47!GdA0ڸQRb÷Yxom"%r?1-mHKMƻ>u"Eo</Cݪs@k{°@8N)$x(^m<腒윁3Rdg>˫Ӹ<9`ܸ~ed u5�+RJK�f<֦$*L4",nһYBn0;.Irځ.ۄ:Sg1>ǧ?D]ڽ W1;qX}Iiّ 6Z\8%G6]9$G$4#G1y8U#n`fj\h?PJLAe$-/ܪoD|~튔0b.r XSM MT(熧 dwuA @;jqskkcxdC-./y$a_8¤SSO#It dY;nV&*?� 8uP -N#֒~D(bh;bknA4r"t<an㘠:Wf^$ hj9e7YoׁKDÙPᜌV>ڍ"yRGn�r1Dh, F)\_\E(#_kBr3a1_qP ϧs%w[j2s>*(0ؼRABj}d|kGd߀q\'toSsJy9t=6G<-$җ;&sGbYOa8y*,XlX\R*&71b8:wjap$.3r1Q.^g.o sYͥ͏#�#ak Á]^WFwCjrA*ŝMTXQ yTVk7P<J:r4N9VIϺ)S`ujn.JJ7ۋz/+ m>Ki5C .-mԮ C,T1̨_J{ز2t'HeY ŀkL�UK '+d<S/S+ܧKpdvN98!q~.) [SH@DyNQkP}rɨ?XI? }Puvʸes6 1Px< 9B9WJr\v[n ɴqhta~Zpz4''L q.f rxA~cVI4i�Rr5^5F50KxF1EWQ&a? _ AVw| 1dzxU"xYsť k0/[9LGqS]E`\2N$WR:o9,X5 8Ӑ$HYV-ò b/1<?gp5rnUO#b%tt_o޼Dp i}NcUyFQI+ Ώ`WA/Z&V\cj?JSRzTk 4ZNY\$Apu/Rؠ|}ퟻHD(ݓlSJ]lJCM:-nt@]@ʚV\oܟB5nL8 B i:Ð@ oaW�_Pp @Wydd#lCs/bM_uKkc`{A_q:YR :K vՐ(egNx”9^N$L\|V 9PNЎ-ZNd{*r 1h|P̂y'lk@CNz$Wr0ϐyNHkqDV갩;n.yg{H> �!jXHa/7S\k/tzxgu"*UݨQ$tug>[3k{¼Z�h0l{K$3.& C>,lj ̶{@�WjG\)E*ǥ?ܾyyfoX ԹY<=EU$\Rv<tGx 2$4qV#Iq3藆tZA@2Rz&s }qެQQ䱧qQ^l 9U n1`~|HKJ_ y98$>EE ]V8;b%yހ�$(m+Pa+ 9Y3CڳD�.;3TAtFxp-kC*<# F50 Oc7}Nm rIҕA|ב,2XL?nAr#w/F@풵y`|�x'Z^,LMlz߂x{SI2ߦK0XYt8zt| V o2Ag-a hOndK4r$؇#/z,,2@w 4 z+0Z])~ȵᬧ)3,R0Y%Y;.d@un<˜ J}yv P˪#/9*2>ICz�,#))OX B# q#֣�Mv*\="ӤW# X+-qz"sXϯdq6q(W4g-E-!.m MaCZYc\V*4мk$?|,!Ǔ V\wrtς))F{:dsTDq׎nA+G шZIՇbkcCq:`:7CR1z9M>PWcF(B6 b/*d̦ab4�q:׿�ؖ )@;E6s%&lΝ&e#[Аd f(,^=^I'J;+B+s�1vJzc.- &ߨ:�P4 ڑ'Bv<C $?iYX:<4Wc UQ8ه -QC,?]O6_z"~ϡ(}l 4n_i :z$R|)cCAz4d2%й+z0|<8: 1 {; G)24'<egW* P8N9kԆ9!i <~)Fyǫ^র:A˨#IГZ@ko?kou3,qɰ$̛G+g+MFPUyB u+Q1t(U1jtw~l' ͖ﮉ 逮 Ue]6 zz)ӡ˽GyV>uLuc%B;ƅ�Vu>nppXԤ!Vjי CI"z @S$!Xc\Fm7ֽ`)w:0_Kl:xRF򟸱7hņYP@ ӛhU Q۳y Hc,!չal1BB Vi$wb"OR[ A[$eKc@qlxzC,ɜSCdwI|p-OLSh!<BDCfȣ&ܼ|xD[a'`M>`q2J.eL k6#2w 2P?\0&y2\!սgEI8&Hȝ2JxM#zu)I9̳PNI0�nq<3ycx61K.A:+9d?"d[H7:Fc O6]#O>լgz#bOQCL)lJ;پ#/Ŷ؏0jꮁ8uNjvGxq)IX 4M숬UZ' gw�+NN'mh}�0 ǿg\az]nflE_!6)3IdUF|aOT<HyfGFbO]~U8glCGi@iքc= 6a'!8EB/PRpQ2M7wRME_OfvVxF7y*Zng :ξ.ܷ+ nw0GB Ḙ7uF7$ã9yeUơd[Tq9Zq}!Ij#GB2ȀD[x&XNy } $_1?1p0#/#O(Mя"6"M6 g ʓaa D54~ qnGb"}MyUgyeM dn)f.N?9hwD4\R|2QtvwǗovʏhX4/mb.p=G&Bnݓ\UwkC]c6Zx's}cIcBP a~LRx4( g9@E= >BŽaethp7\YQ W| ýI:n(v>I7n: -=$uHC1AC&M4O&BZb͉gv? /-{sdMM+_tChmyQ ewqȨ+N# ;p9VpŗI2'#!CpIb9zlm U .6ֺx ȲlQ))WىVӴex/\r>kQ+@.:^`X:f"^|LxH3éˇxsaW3YuDѓM+ϱGGN<s ^ zAYޠӨg;+  3,BJH.pWXn5z~gq%ì|.,9bSA [>Lh;ʚKMQ;b2FlȂPbnac@[4ͿnF3vr%5XIB)52ĵ`Cmvj O <Ȧ֥+3pа޿ y�Tƛ3]=ÁPo]g7C pP-wҘ' "}ؘnܮDV1}MH_H 7wZ wF*:djRṻX S =Hz=O38"d~4p]jqL)$hy_r*A_[iop?hPh&dH0xlJA ᳭ B#oq !VeEeλhA0GmŔ5TOV>*R[`&%zLH !rd.T>tட I!C)0QMM٫j7y_=+Z~Fābs2INO*"ﻹ9t'âvJ +m?PIQ;LMҨ<=>.A;R^‡v#p(ކ Hs'. ˲}JF%8"]D RYS:Yf0]?O#>Ӽ1DE/l6Q B<@N L% fH"n_@h3"]Ѓ%,|%yj<hYF#,DQwg0 7ZPEU&hUHbFÖr#v4�&fQ<#Dlz(Gr^GM�Mx:@0l+gb K8d8EǛzZe-:.6A q[8GuҢrА# O@^�҅ lDU,9grv^pꃼU"ǭ0fUS+l_2<νBf7CJ] !`xcEN;6.ff .6(4bYslDSh|xNρG6< kJyB'P80Tc' (CV.%E&JգfI= 3CǞ o< :f`<7E?'SFCBH à *?e`38Ǻ" 0hz8 AGmLn.6iH . &"B[倊[>w2m9w eZkCC< AY*%\wt[/f:=W<Z`_s;-i6C/ЄlC3sh 14Ǥ @8PvaӯyG-;y_E `,&UB8iH HwzĖԈ_nj 5%4,JWx9Qɓd9j9';6 W}`Hx<@,J-�K]b-&Ơ5yВGJ\\,v,)3I3 rfDQOPpMC+=メ\KikR�W|]g%+IrBLJ9/G1NgCZ]E>7P7/Lz>!%L(ݾqXlLJOP7GYr҇׻`; r6vpN0EFEa]ÙC$Ǿ#ް3]Eϒ^*ѧgs3ο<8SitP7( |x(~Pi2@[f@u议HWn[Nx@8Ltr.,i+ْzz )fZ܋W|qD 1xl" H,J9>! Ƕca(ӻr :?~l[1<nF 1&D] ʅQYBV?Ȍ*Blp寍'h*z75M3u'GOyFb&&.b2Qa ap>YZ6m< R8uK9)!pi+))PZ_ $ 7O+^<ۋi&Ê<bsz}y6smn]!^w6fٺoɰR`h%2]_w 4-Op.ڶ9\>r*U%C,; 8͗hdiKpxa'ӧ L;<xY؟=3n#h-ˁClGtI' 7jhiwEf}1˦-S/̗ӕry |7!A )䁓BESWb8ua)}H0 j�y1I5 '#,nL,;@V!]>9,o͌P_=x28hT5ІrF[P `'�i:aTm,QT@e"Fy2Əe~Lca4sTߢ0K-ç٬!ӼV`ԛWq}G6JfHzeDorBg  OQg-n!zИr^WLQVy'YT- 49Os{R嚵!h1*Y'÷nQ \inB']۾_CV~ۿ-#?z  Q8g`\PB)- tD fN!Ă h ( ! t<!9$5{N,YGuLզr|sLR! y&8�iUMAļ3))5}67.s\=I]5i4 މx)dd5D~0OAzoEq+ZGaD{瘏�2=}�AY*&"X"3L4!@;|r^`Xt)%F/VuuֲeH{Y}`0?:FН1Ԏ*]f I=+[s%MH{uO iO&G_l?/g=܄hSgjs vdk sfr81yStztOaXq}r^*F0TyԌ,̑sӨwZ1ͼsStcIG))j@&?f-yVA nDEi- @Og>}w"j= &O;aCiKZ�̟OF q6d>k8TN#p$wFfyEdgT z=z?Je7G 8 PM*o:6ӌ*kHU'>&+3Cr y54�x\ykXM>ߴ8]vhɓWhR�~u)f=Ʌ XW{4V[ ݾ# +ud@y>yey$[ eW{;wCjjd9I<}"Qy>[`Ks!ƕPL*J$pS;si�vjqNa*,kTn .RVSB.WoӀE:l%.@ΐ }j1/VSLsg_}|NqU)qm楧UB`[F@enE+f~v*pP_݇tXR6d] ֱKp2p '39bazeJȆӜdd;ؔV7,}D!Cz.XΩ|nO aWV*n>pr n;pC' hmBKpח+ 0St:#W>Y)@6v ,g I**)ڞbɉd$F-G{23q;:|-M C :gJW苉-5n Cڮ1 tj~@Q}3r͢ia RCx3hAσ!JXFA& ^G>_RM؅=h :]Μb)tvѧ+x!d <=V++jinO8#B ?toȄ$clp!帋Q%|jD-&{puTtPh~ǰ:'Py FLJn.�rTt؞s!xdT:~~ږ{  &1tqi,5"m4`PskHh):Yd(40hg44:<]Ŝ7*YL2�cDQJiP(Y@zZq٘m,2Rypw[' i+KZlx((1vkdJ^Ym߳izDw@!)C> E ^[)q‰pNδu`/\$OQ?.i95C0:nՄB"wGjK}U!7nci^G3w45O:%@366n'y!a) myv"P~StsB Yo<19s�L�^.?�&`/&]ByCc H+"zgNb 5b-ndɆrB s)+Y'[YhR6  C:FX73ǂ[itp3%&#פ<(8ϗj 1o]dCa*0q Ha|<TwO w;3^ɳ3ަc()yt̾Rh I} p,֟�j&@m3ƮK;ԁbt)C'u`ZlX=Vi>֓P !2y irs臘Smu7rhSyB ")kOČyLC8°x,�cȻ {8/:Ta3Z'RІ G= dgUDFNd6夿N^v(c5^9z4o[fZLu~rg$e��[7KbV*hUL ilA1:4X]a,#2=^^b 0<ߦHohukT_8!9N+?ɺ P�=cA;gf)w|�lCmGM:g?uhRμl@Y8vY&XzQV뱉hR}x ߐzňe*{İ^֙PV Ā@ ad֨Z8j;0'Ea|;bb&p}= Y$t KT<#o|(޻xNPs w�]7\T,q0[IɪMqr<\j4O"-jT/ȶ:Y8zA;:CHY=`4T(ĉmջ B]Ӱ'{I=j߆&Ulah'k 3u!GwĊ~)9gצ0L>#QV,! @:tS)f3 :NII9;n^ܧuPoМ)FLy<Z{!qQ*:8 c,r*Eq29!SW 3b`]앨lL 1wօS8.:nHl)u!pI6f@0 �^~?ؖBG<0ӫ8s\+�a'!}`kqBp|=[/U=Haa0-@ty =)+i+F=Q̡*Opnq뼭S <(pNa] ;36ިy)G4 ]:DOf 0z\lX2vO2b~O5+o0A6LbY46^#:s ]lIA!x*>e0D`>PcSyy׻K@t)'G,!aO:DWupoM#Lv0!u`<R!]i\btV)W ԠB/ /*^6bP`n�sE>}{acV%4f>Km7Lr>ʼ%>mcϷ?N|ED歍&qyy J7vW`qz,oFm߫TK]tyxL cCcU< {xxBMO6CO9KX T0INy2=:""|ubO[ށ<JiQll_xP Dk7dgT$[H8־Bx19 .< 0q�?t;1T*q gpw8MA$ԝ'EȈ'ܹ/w)=u9 d}U=^e"ҝcSm=; CnC/yz2SRQ:hsS\pw XVFTZaNtK$6W #-AE1V-:)]<Sb d\ޙF*'NyAERIGŎLYbJ0drMi:3|r*mSi# vuV@`ٛnK=U<@=A 4t1fż ̗Pe-O/\C_)jfEuO Aa2e#x\*c()})\#ն<܀ZcHr.F0=g0 7 Qx(X '5T��XN]gÒ?*p8?Fi{ g|긇yL@ j pX  Qis.VDi*c^h[Zr>B㙕0je1Z8G=nRѰӃ43hd qOSCN1)RV3sa]˵x7SB y[q 5t8_:bM >_1AJw?+"}.A!u/C`;LqًKKc,hS{.G3_Χ`UWA*Ξmdh+Pncnb6A%zs#U@"\_JˀY ESY89xKf'W'C 瓓B _Q=\!�j<yRdbAj!q]@7[OburJ V)MHV87sks |(%j6Cm?!*t2uWjCoA]ӰU'3#9'-|cb �nRaubZxCnl�>MdӱA>kE 41.gȍU *7j 7Lz 0vN-g9M!a.dH7~&qa~ʇ8!4`6 #Je۔ּ "R='ML=Yit/Ӷp:s_)nL'1+_LdSGyω-q!ф+ ؓLi0TLryKL2P4U)?SyѨx!KOhBYc-qŎt-AZN(rZڕQz ^,lhlP0c AP;.dG'2;Ֆ�HRfd&mֱu}*1H-!BT Кthi@ep~uc.q`\%@NL2%3K 7,'zv7+f1e@ɟs YZ  n OiJ_*3]>#THN2c٣@3ܐ !$䌓8tdhͅ\==?Ղi`wfg*J[Ls7kռ+`xh\)ʕsed9 g&ȄAyvuyw :_t80%-2o8!.Ǩ>v@οG*-} 5;<9:/bZW]R!`uѡnL8k� RA`XE 8njY8k)+|eI)!Ya|}S/% C7[e<`rlxB!õۇ}c` m T,Sq:}?EE&C! \c?0= aŘ^&[1@A $ rx) 'Gb5&heyd3bZ9]a0u ;J/+,O˲ 2NXP*RDihtfrA^!d2s7|bHo4-Jijo(D~= V6ˏuR$CČdI:Q;9DpJUȑ-Q~d]yU W[:m%/vQ_/͘z8:dZ}IeMR*CGi۷ApƪݼhvdNG&}ƩY&i>z :/ y<�<nŽ#̀biBh$='z8?Rwqs=oRΣz{'&2îqs<aKť|rYu!R^`·e Sv?�%M'<0_WPG-An1.,C܊p+V#c;`DHރH/`[^fyד |v:NlI4EZR t2O㗂 M!VF/+v<W=QdbP'xF8cpy2} 0|$7!'B3a_&;N8a@8I_QQds0cCyZfZIuMmTDC*7_ϷNI8` XK\n]&8j2wb9 nWGyr{[6c⻆~Gc[B0 {ILk>C|+܍L ` #]U$q@XOj}PJpf'`zJv4w\oυ?LjxV_ ƶ2-)w~{X1s6O{[р+q6A7 NR>'<F.M<|ҡXTxEaOFk#P-djQ:+SȠ=Q<S/ۏ4:Y⎸?ROF@硇w0@" KCs% ڊ`X%MvTA*SR\D: id{]-2wNBA1r+ xKS%]=Beҷ!bZ, #i06Ngw ETcԳ j> 3tb1YDw:\fTculq l#(k=v9Emʜ*.+B OPpPX|ۮ"'lqz8قRRl'~4ԣb~\3E'ѷ0 `u:--?C^p<v6 FNF#nr )4`%_$ Ó>JEpm/T;iwP+)�cԓx`%=˪?U:q鈲t2'^np}<alި*8tɳq7 >[tFg=,r|DҞ?E (h9@`89ԛ(5pԀNՕvGQ�2,b{OtÐ-sfy౉x$A00A]fĕ PUynAdzHz<;` `NEԒojQS#�"=ʇ6$n͢^LJ7A"GA:.3 SԎF/$)G[C t2?j96t0II[ *MCw\+q/)ldta+$ytqFc; IɮFi̔a dV$7zJH@j5{,[A7<zAtMm:64xZv(ˆZ,qs `q16xD[6M9e9oʽ-4he᪀`'$M9JKOh6q@L<)z;4dmJ xaCo zTe<2<۸CSl[ p|(\R!9w]0zy^a\D-b0٠ \4.)UI{uGpS%ZmHFpn<2!!h*5<5T{&G<-qZb,ܩ=1A(MqF`GwhMʕ9@n8)n"1TYp+4r9h:}⾟mb`'(y`yE3w">Be&YS@ s6O* V14 ݼo 73 ^CͲ\}L JV@, },: -I(sxc>y][]݄Ԋ՞|骤KzF`TiJ=T֤<cI�Djq}aghV 'R-{x?}s_nh>^ \v(1g(SLVJIR *]'Ri.}Bn#qt()( $<?) [8+)Y^Kp+d"9=G%ey-hT_!3^H0a2f)C7v(xsք0 w"X!Kiy! ,=%(1bECqn6t:488dݜF1M $'#]838>6(Ѧ:zO '";ܛR{^c\Ɔݳ9V# Awe@QBUqy%}a'~G憤=^hdXH&WVKsFHSgY+ Ϡe ͣx<dq'+(OhoVD nԨҗp%ug~E>.l-|cAF<@MlJ{Gs*raJCD4O))Z yo t~)YeXO*ud`&NUxȲcyqhɕgI<>knk7b%%[RȽcJ z.cCF 0 ȊC6 'O/i +י~n3G"a@~z<4g]l5[e!57w,6t;b$:XA ^\0]`~,>WV0%3o+>Yof1!),K1r+Y됳cc~AP|4V'+9K�ΛP]l40qz&2< gB ;مb:TA3'hR O:0-!ܠG.{$;vzbAox%+8�zOR :JzuWf,̔H6hH8apu7nT5]/zn\8jd\-JOծOu<_]B:�W�M3̭�kOˏG<]Vܳ:�$7u=GE0P\wH(֮.e�QǂoPV @06roIxPi@O Kmq&R2н5Tbޙ!R%Y;\CaVZy. =MIQ* eXɃ,Qds$CXci0jQ)a۬xodW:ճ42WBSKNc`{ }f AtceQ hSQ?ǖu=Ҽl& s`Bx�㤙um|gL+3BAĊ=B�\ʨh\5Ly.' C:D BcB*z4u dj޽ G<2RT)?4 -^ddfehF\<ϺS7w #7/-,)Q-f5gNU41V<Kax {>2L\Ux]~.y\d4[[y%EC +zT gx8*_N41@ a''40Mcp8Az^[)IjָgOԁioE1mΐhPt4)^WQC5oI"O6'D6ƒ+3`yNr刪XxXB�4X˒Zu- ,GR㎌s+Sv" )y^p +_lМ6eİM#C'& h06]O<4ux S(z2 P#T6jAe˳bʕ_QR[sـ<2x0cwFMb|ϖ<![+6pr;i_(Sk eਲ਼A?f ֦>8Tl Cb`G@+kC B!cXDaTܐ[<6+XsieԿHnVor7@YWXm+]_yŔ4 XOkP@.i哛1\=)(U&\])k3h07!bۗnw|u dH`,x_EXa.e[>[큢6mʺ;}ƊŽV,O$'QHsPXRz I ľE㖛5Q><DdN66EJsoF7 `H@%Ҙ`@hR=q2a;0;\J�`Ӄ}%4uK#K!1J<燽4&VaZ,J{Jc(T QǕN=qCIski 1#ZzaW% "T%(FRG)TuX.1ߗ wP](�o%&-2#"Z/TQ,r>芌ӕ4v mP52=7'PǏLz^ (sQϓEӫej$ֹm| }=8P({9 FS`РGd*cG�em!⃩H/n5IFE ~gEuW Ξv<' &&–Mj`sGq~aA_ 01&-9,�)hIe?RgjG:R)QCYqT9"աϞ@F!11N#4%NK8x$ , sEa28 >2c*V0íLգPjJ!XW V]7pvW&Mf.aG0 C箎ti2t3HLѭɳeOlj >w&fG;.g&m|ggڋ,cFVܟ v1=LMAHL꭫ flŒ1zxUͶoP)AjG)Hy' ժxIUdL\exNEIi=*uVSe:!]bȎ= \dI>K 緝h|.D�E+O4&ӂY UWnW=Uvہ1o$ NgF=md@E{<Q$Pw{( H98' 갼¹9SM6}DAe|DHg]Vnr/ъ um{ka)E#bN,5jxXKs{|UN*<.mĈN  'J声- Bʽ@Su+).f+ 1:bd�(|R;YۊHȈyGYzBȿ4~`h .z !Iw}_(ti >IZWpۻet(n,18_93 �~b"!;0D‘I Br^޿O߿O_ӿ˟w%_O!+b㤓-3{Tr1K;"i%CՇパ C4"j)HwVl㨥ضAaHY؍J7g@[wAa+_wrwr/+4 bv1v}ߧ% / y ':G Mz_Q57w48 {MZI'9MܿPj4B�oM-v�ag e ʼnIaHDUvB.ݺX׊c�{'vOD½[|WC7Pjϋ46nU^7De=qD*(}Bnn/ldmVəye)"y9O`#}(\@yu?),w%Bޯ[E`R>1Yp#ҎX1mTIDw` eP/^o.{E+X0PĦm i no@ߗ@3vI2I{Bɤw3 wr=@�{*Ħ<4[8Kֽ�D�@s{{%nФ'5u+#qZpGrc" AvHf4(;fӥ(]kZr $ݲ�Lu_(s}I򻫿B|nwH<h%HmnN@iO紳]!`cϰV; %w+)#PJ,yhzLN~ ݊j?2k?䟍wЁ[n|SW7Et_mh�/ݽSֹMnѵt j9a(!6]d`{wXǭ9"foM{e!@Qβg'ʑ'pQ_^֐IBl#C7I, B!8۷?DK Yږ`C]Ac*/z1;ťg@IQ(ou�s^~T96yw&$D󩉦EgcQQ`Ѭ4(mO -kzD]5XNV7ʽ҇Chp '*a5ƫR!$x%oĕȶ#_&fn(1#B �pioX:A7u c$Q;+kn/H2 +Sa8YJ7 hN-$i3-IRՈ$6ϻ&|8i^Pb8lӪF(n^T:[1RC~[B Cn,/H|)͊۫ˇ\YPS"cڸ 6/(y@#})c`<I#r'UvƂf(QWߕnAd2wk}&[Μg$U;5G-bo _ EVgWs0R\>[ɍBK!ͱ[zz l7 .\/AhEһGל Oۗbl[h+(0P 8EҺ$orjQl/-],W R1�e<*5Pn.ѤDXsJ+hj?7*,Mh⿾4r kaWn?XjJoy4bP*zwA%1cڵv,df9֏N9q|9® r?콻mA\+u3)S|DB"kXGqYHT{eGĈ IebҒ4s*4OKW׽,um� xC,c.åцmu &oLڗ0|jae% Eűsdbs=tm^ZMF`<0h1FjYSI b<㌙[ #OwNJ*k7z.x.VR~Q_,(^XpIJaLRtY+%77Z (A.-t6XW@%T-h {skGY~e9zk UԏPV%-6> ex@M˪M_f!6?Kf"'�+ƣtH^qGo`]4bB ufX`36� i㗟N}}w@ه�v,tQAяRz{q`G5V̿@$y^#˾%d}l#u}0E"d(pb^i4eB*ixh?ZϤZ�SDzd UH ;OqJECC x.;,ŏB[AO͒$hS')D$×q>ɫD/ݫ`ѹIxj %H X�A5FYbeE,JPTm 13U\Zȑ~q̌y6q0Xc̜E9Kx'"'$P/ȍSl3M#?\"2ʻ*$jp^4=ćB4Xjk:ɲ"$ek>z[',h?36o~+֝97:2DO5<vA#  Utkg}ފ`yo5^ؘյj5ȆŧQ+Dv;"sZ@[Ž)hLЉ%I3oWNL14kf3G+#Ց=|S_1\ebLKẹv߾(ʤ>h f%@v+U޶QCrIHئcu4I~z6j_pD)DAKy>ڸ!EFȥh<aN]Adͼ84֛ÎLo$;?E w5(ҥéJ?kC1qR4Y=F},B[.IП]) 7E_0w^A$;$´w/dۉ=z(Ud&p›3βtٸ "@+vwil<@ 8SרV!kfAM;dy @<_L>m&h1p8\]*O DzGپV4fq}NH3;(>֚,˅yL!حƻx3>﹥%Bv+h(vWaF@b}ER2 ?<0G*ez&<NHtD?A^ H RUe$ >[7כ{6;<Z au׸,nd9J o 8u ʵ/I[Vm"#DxG_0O(ovaA"\EpsڃueAN2ekBZk[*kvM~B̅|leʆ7F7m)ìz3-%m>]gPRZEҐIkrKt FyR$5MMvn5Ç8̾ j7[HxX_O? h!m#ï&$W >52oc(Z|Q\{rzm]uRuZ\iNbBrA,MOv/�pjP Ѩ!Ǎ*y`>J`Fk"8|4㡤.س۫MtY6Zk-oY_/B�M썇6>eLp]^Θ5z^LPbL5<3%QKeȄ*V)XPݑ@8 mE&U>,G_;l8b�olMI1_O>YG6'F:a|PaµKh1qo%_֚jbLDQK 'y6JCU+AOۛ+˃+eGIʏ~%]W|+5^ BQ7lҪ) :EN~ DeKZ`"eR̲Ipk@zyj|1^*;=^N"ʷ7Wq^<WI{G 8ꔝʤC} a\d1Y]45 _w C^P_AR�a`y^*sx/;v2D*`KgUoV@KK%҈gw\;I̼e(H)ڷI<MWP3݄q_W*6Ȭc%8wYbC4^d_+JfÁů֣O׃Q"pSS |~ T4BCZ6d7Y~P414|Ⱥv]0) d`<p :Sg<K!IbR@jihouU0MxDl+uTL*yLYL  e L"Fq!/FJI8J)w8L@;.[ o'qXWP&.J�*/}dZ>Ćڼ0K%65d brMpUE<7tX(]kG)O/\kD ŷZESͰ^sJ '%` 0[E݃\<P-WM7eh;*. V!`|@LN g(N`on2͈KLBy P]1 >m8׆4:D tIᦈd))u|l%;*_.5DҞ&Q bd 7W@F%"~EncJ/Ξ +.E[U`>Ep7cJE.xs5QBgTJ}Wot@hC 5~"P!-؅|;+P-MӁYN>FdžL4 pOr!b; u=EN%u0>uX,gfůa,էcY煡|E XVT$8.}* ͆qG+#g: @O4~};K]WXb߄zSהlTphRkS_~3ӧ|ϪK ?�PA � J,c�504_fjߥ�] ,Nw�^HL=_uL^GztծAI>ȹ(mN:3s4@Bd$? h$Eպ.F|ӷtAPl\P|P7rgThY 'm՟{pQӅU@ѫ 1󚌚>.TTv;6uabOqo} љMiZ("_o$�;$#-?&Kɰi=U} xi 2=b8` YhCᬤK'❏ }$.3 u% ؂%2A+6V5(nT#e0GN0)6Y[[ǰHjHk+^)V"e_睅 Mt)~-.,T.\[1wBcKHG8NT`*�PiQ{|Bbn+? d|[(oQrǼ]29NY>7|Ps ="اY\Fi펉xzlв<vi3+iY^AUW5=#,˫Nb�uQ#vR3 a r51ݿl+6YNA.|^- ҶhԡYd7N UeJA9[  0˶Ce?kmD~{ɷqSy"qRj+ Y,q S@=} i 2of@4 +F4Gb]%p ˺-%?+ ׹ƒí/3f9un 4<_6\}KScp( ih"6d1͚eB!:Eq(א =|tI|EFR!w0ZÍWcIt6 9zbLOSxOe$Wm}RX�0RBa48@ 3|7l-Dԃ"^ʠ\$Ȩ`O{G1KPöG1n$G&kj/;'eEKKO&4&~+))Le> æO'IfNyC"NLN-ѰO4 (ythJdQ-6ń@nd?ws(lrG8 >B_`BQf¦vD;Ac>9GإEEDPym.仲Y1v0]H *AJN3_NA Uy~G'zS @v,<B஗Ҙ9/B]R ,<,>i!&Qhtjl9]<>ҴX稪XECY,mI\p\6'5c[.^Y#b@qpffE ^$4̆Ӹ(0dE痀a!s`l#Qod')P%o8 NA@!ΘV8}oW%c5h}A;oreId[Z,щAV\c _MrDk_BypϾ0^&uRxl] hk8@xьPxLe26xaP$UU`^ۤ.4H;ՍV6HߊW>D`8yd6U]٬Cb҂pzG|LQ.4~~`a> 3 ,[dDJc,&?-֨60Mk_۸)p7@ ՅI?!8 P J_H_IN#u,X<jwsu=||PDPbڄ6G/h&hݍ8`b�Z"m~X=QnEf8έbFuy]_D&0'Zkڊ$}K O +X0 '4u/q t̓(q} `$*58hl~ 6m~ԟ25!Y0vwH e1Ձ0Y}EOx}xQI7Pb6\ܰ~cbTmiޝ6 0&}.(|]M<GW YvAK EZ\i2rU3^,,M0i-r9ν:c+qWQQmtpS,̧vσMIݲw.z݂pu \zz9ߖp=x'(S Y%1 9+wn\hϋLy2mu*B.=U$Bk>w EgI-$ 4Z!"ˏ7YzSnA[Z8s:2HÇ}zWCWDqHgQ3*$8)@reJceet"*88CLYP�!$# h`9g9cFgLȪE_l`w V{ vn&#! qfaQt$쩉}ƕlG5XNAu?nS1NG5/,\%%7)P2〢Ea䇂ŀ}u"g3"s{s9'1b>YK rCoǝM< G&�:RY4T !r_a3=>Ŝ,z6CWPTTO1pE'3\yl0#lx,o𥀋Pً\`9p!.\*WR7gAz ŽbxBP9M!@n^Q843A7~-btqI 羾lA2pYY֛>b Ne0*<GV$XB=m('8_FMt#qVG؉$zq牮!*IDDZ6k\}PwcEځ~οɳvl24r‡iDCl7/#Y#_ퟐQۨ9%^y4=4Oy~ smBLHk_n?6ƽ0ic"& e)(fHڇ>Ȃ~!n2 kpcÕ]`Oaߢ!L@(>6lfS.<*AnqBJ(N.ky9$ 3 W@e'H�K~v࿀M'K'ذlNC4+ԃ)9ՀSãŇy:%\27P&HJ 03V$$tg)%3Q%t;f)dgdyZ|M_0fN? 7!!3:ObS!_=g h[,;-hVl1^`HK$d>[.Fk]d*z`SY/1K5곸|`l")dfU!S"(^fg+X[t3+uG|ұ69nJ?d ϴP!Ո,y((a|%47J7 Aǂi/ Z &h.YN$d.>f)>:La3xÂr w(I[5kcfL)Z!i=3/P1.gR9(K�ZCaG.ƈv:HkGx&ԇlZCzQ#Nsёr dKx,ee,K+Gm{#d%\TƧS#s%u;!vCΖȌ@r%yIာP|΅6kkppd{Gw+sߺo moII@oQӫ85>0�ҐT0gKE}wZl? N96;A7I0. ,X: ׊rOA7a߾/h�-k RP=gz5ΰG!KH ;^{~H m 7~ U;=_ho+h j ӽBi0ҟp+<nAcz`L$<K]+?/1fωtZ+ߨi,[&3Y0 \Q? ͟2'[KaO@y 4"X%8Ɔ8Uȯ̳__Hl7 rUQ(413떅ݫfXu�<L_>cWn-"0;߮Af gY׃TpΘ&jL0cf#A夊8 80icI,4ZWB:%7;83TKDPCVgؾ3 }![xCl0YMB1%Dv ((!\ Oa>߼-v1"}ڽU%Mokh4v`p0L%+l,h B*H�9�=3Wfvbۏk@L bl]DZHtp!9`r) CҜl `S#kÒCaK%5q5X=i}VԜ%- p8DaK4G?T 8v!(h2Vt).@8`!ڂb5:3NV*.rûNbl>]c6Rbmu;e-d; VLTc� 6zeU*ҵŜY3K6o^{C YJ đ�h?G^,VSvcDa"�F]э EYsn/)0+lg2'J?$2e' MwwIlY@�oPGT45� 9݌9yvC])^]S1s%)%AYce|є?xÐ2ȉ '*dc9-eVhgpd!@>[D,@Fk{WİUB&Qc:Ib'\V?lpLۨNaOf=Su簁~y8AvޗPǡsKg|,gV &%E|,Xa8<UZɽc&!{FW &9/t^~Ң!d !ϋ~4Bb&pykQ,4 90(D> 4k\w!Oew@=*N{鑫±eڐ_: :1 M (B_<ڳ4PK$&z?Aáלݝ UY8{|`edvNaұcqVhP56+rXQA_A42;5-ga4W+ ‚?�wu:o&+(`k '.%hb=eGz<d!z7#g2:+(|gE`aL61nxTX(3kb1H"5va �8= AM-\\eۊUpL16|%YY)^qk?y,*{E`֙Ɵ,%fU{MY<#@I_Q)1;[xdx{;%4[ <y%.\z.ͫQSL25d6G`G' tQ$ `'9ġTŊ7O֭ւ@:'>}5fM=@Kwj r4Fxt.s;=m-g�*xAxLP& pS1-5S8tZK[ae І_څE_̍mL^RZ@"=cv`93!{l%Kt M?+g@aQ=ۋG\ӭ 1 93%/do4ڣ�r0G"}K#e6^vqFS@ D6{JM/Oe?@956 8Bc Y. 2ʎ;V`<=d]2<G"]F?D E\ûVIs۟p0#dJ-=C[ G}c֠vytyˏ~׵ư)fX;<;t7P^|Fx_ѽ57Q8c- OL׼'C39=͘1I?f+Mt Lf6d%EisQb;"v趋K�p�BB2}_(< )q0 bX"2jR{6ݵIxXG!`> ·M1hk}7sR v<羮UA>ȣ4ץ^kV l@ѧH svNeE<ò}', DV?68neɲ;d}Տp�X=DLc2Q]Ѹ](D e,]L#E TH a/*fAgA(@W}$9hAb+ϝ WYYMڵ aG ex0"%D\{ Ҙ\8}1xⷊ~[ }>ԄQ:݄KqؽcNCc_j~:=pi$淀ɏ`O_#--]LC|<;y :W, q0a_~Q-abQ3w+p(I91m=/�p*ʄQ/T`\gֱ=VU<ۢp!z-KƳh0T8JW@Y<{4Dk64򇉑 UZƅ^oQ2DWTpA^D}Q%[}4R<+@2I/Lhڋ.f NX аd?8(�V ;}HkU?օ0Pjk C7 nNj@c':2ʼey?qqp?_yJ]pX]8ܧm�`}[cݠe_'Qbޑ%fsE!Xl~ UIÚm2E,3ʀT񛲑?ÂB`h,;�b:lEf/l+yDdrwe}>Yʻ&R3ϐk{xC*ǟ/#T8l�7-Eb6!3;(PE֧b2mwbk^L̴X<t`O{yrN@trHJ5g)ӷ 8 N`AKN_‚MqWj,z{ ֔%VM7#x25fp<kPliQRxbFaQJ2hyNWD~k)y3vTjѳPrbOz֒0MgrzT CڬլI 8xLpx^|A[©`ai)g\DWdAGi.Þ.쀛eBTrMu)1dyJP?,No*2&rMOF륚EѵMOhN,8}(,+ Ggp$$W/(N`ݮ`⻼b]O/.˒C yKt�_+& 3KX\ s #N{=`sMT&-!1ЊkM[4 (p# B_b2RMQ!EO>?߭t܂B}NwP쁨jrHv1&?Z bu ֻ;Bj&X:$81ZY(.K1F%eV"YX,9/K&o&VrY2%LV�^Q߉ ,PԔ A~=+$1lk_a*"`o e�@Pvq!6g䚗 >cV?G !%^+Cn|]T@}{܂#cOpmn~t(XQ'W %ӐD:"j1m]^YO=H?Ž]&XqW\,MO(.݅)�yT[:<M(F4dNPnP`2c!"*z;QzHpq~+cIol9! Nyg΀k<<(6AOWE>P;nΑBA^pÏ!LE]\ .}W!%ֶlKC-1ʴYhS7]KI氫$8@vOgG3 bs*,eRT@bNpVS,IlXUEM304rcfe7#YsT X'[h8=NeB:W9_s@Ҁ U>ii;8_js5# ww �,JQ abqcUl]23A)JMm,aW'$ӭڣ98M5>]QFW+گ^M!mhf3Ȯ%/q{62yO04Q$le> 0? #|?o#(xAea8 罣'䳐(<Vd=.y5_ b5zkX/Fg(0C tDD߸E^HLWwQݐ}]4AOG˧̜4|Q4"xU6&H/o .)yAp+S<X;sc: ,aFx2v}�i ~mUF]FKg[^t\,%B߄="d s)4 ټsC>8xn?wg0EVVulGܗH`z?{2`UF3^]�* ʂt]Rʜp\a9‰%�Ƅb!6 nw8'T r* R`3  Gn>O2$EBNm1 `T96׵5" ɣowi�P譼̷DMAw)3]$63nbsLlN s񗄁0(,�<oTU|P^r?*ލ` }IrI|=g%.FhLm? LEhi.F} %[@{pܒ)$h%#G",֬UP G=)DQ GH[v=5ڄCׅO I:^⣇YLW)a94C `+YjWzYa=E#.p;u!.AY:a+jzXk,&W (� HSvq1.w<τ { "xK] ۴#ɢF�P| )5U' h[Ļi�w MahURv {zE|md=9xY0 N{Ó^먒 tuVމ.* [-X3Cs 獍"̘� *i?X1S袛Voq>a@E=׻1Pm*o^b~kk hB�&q`HƟBVѪoC7DܦubZ�uխ"l Q=I s)av1eP0lPMӇz{%"q'o$o^�=feFӋ7>j-5kFI~^x{K%:)b/g6!.רR#keBQ`}N F }v<#efmO]R:ᎂz>؇8'm 5\{?j>>3<YP/*G-4^0%~%13?{+G%ۙS*0uNAVujЄwmlhY3Q<Q%ulަg4ޙ'J26܏hP3E#K · .vG^ Βr[,G5B1OW B<y ؤxtNP!&l[�% ?rkB]E^`⯀D&g3}YMwpۺWh i ?Vn^|@�GA~&EփHD)z8D t l!>FjD<f!0q:8&7@J#RQD)j0HpA-T-{)G]o;1LGZae=M2^w2NȬ` RC8QfegzS-Y~$Z)WՂ<KbtU򃆳5Gab�:p~5$bz'@vD0Dkr<bpM4Q[(lN"ɱ0ԶI?IܮYA3h{q ڤF%ӛ7t5&腯D,K ǠuxHH|V(2;kәƍx#.<de0r GgnMX&aZ�,g.dߤPU�Whybv)SHpGŧib#:;75*;ZO5:Lgsxwo>y(|S4P;XɧA/| }bs F"2O+" "tG�|Ow-)X Vgp&J4x3)'O! T $O!Fs<3f'uOrG�\0/s cYVT-e*AvuPdnl 0`C</FdcAV/)Ѹ╪OKvY3!l*Q~0i2-C͑rvh29NxB9榢Z KB))6f% f]gu;ϝeO(_Lp$$-Lq#galy B}n ^#Ż@\a,RőqaN |Df#E�CBIZhS,H7nU JMԁ^"�*^ʂ$_AS:".ZN'#rzό*BlxԶa_CT#\ߚEねy]ՁUbGƎnoO:_S�gŇQeh{O-+YLT'̳VbE)zĕ/1<^䑚l(kZhiH4\]v)RﳘTKҞ@ŵld@Qi[hKuxԛz` hBlKa u&X$7(i9`fy<C)�}zI"?;Jb&'NeNn#ێKԲi̋}F%Q  ޞ ^o?8S^ Oy<:? qMA[_0qru )ᆯ63 )-` 6 v.9 ={ʚ &6 yQ"U&lR`$I7&7!#5o%ɻ+X<P@Ps;A %&sThT;ȑhj7vꐬ).Ӆ*5נWc<d*a\]i}ջ,X(+VRL9S]"xhXэe/7.M'Q0N{"ouL0 M]"ͷ5*Sylf75lu4S܂J@6ce4zR+]XN*yX|, cF?#`i̎~9aҘKY_-�0ي^?=f9xO@ q=ji/J^G?ǻwU'6Kt,csLB TeA85ZpݼX2m")ҳBeGoieψKY�P,Q)]U2*4]kEDĘcq3a[EV曮7ci\ |,7hA,8,�NJ;ZOiSY{m�; IM+{2$+ehRyb*aѺ&NxEQ|by$5OAL5PW^-q<wnx"cj`-oX.hZWċ+[s_%ۘ*<\{Nǎ ͧ|4fE3d;bzٯ(XRW4Q$dm'ZUS@?A31/;dmoا= Ӿ16 lQ b W^k#VoϞL&neɄR?/α-TLO6=F\AϸDђ@mo̖amt1>ӂm6CӋOJT~5*ȁއ|O!&M�)O{m|f-N,F/GE@h{-FC?1f:&M"Xqxuq1RBOF I9o fz_sDÝ"~w(l58# t]",y1L+<Kf@:-IvzfG#IXQnr t0uĝY|*&qpT"XM@sP3Ӣr ÅtS_A`|g!FjJeJsp{ֹO)(;Mj*1Y q!h'$sm:C@}E"nzӶC c ND,OG=3]/C #\\IC{ N]~`Eׂb3Lz$f1~k06 xaxb$Kuzn1XL$DŽuWJDn<N) ˖8Xet IA2u6TCM,d8iBy7gc׀# l̿+&Ԃ%HB9)�I:,@ܝ-6/ףp`sriS=ĕw t`iGx�~y͏7U~qsʭDTEI:[1W`= @SitU$_E26U%R218`8$6b} ߭/ht0ot<$ z,)8C"@੬&ٶ(XȊ)&LcGL8ބѰ C,4Duf%{ >ihw�Hsc zOT\Cbp.w)Js+$vxym@YtUZ†Q=h:$ @>4 [q*UIE{/3uL{۽!}U'tj7UVzw>:z. !()j;PgE�[馭fw\| fL٩UO!bTӽUgQPPf]B0[EQ;yi<\jZiXuQ|E9pE3vgU$@M# ܗ1\Jl#Do^,2`gqqsrMx،ڄg>!*Z,|�&?;vY'@�G3>w1TKMf?kˏ@v=͏;X6&DZha$ \Fj7! DHSMI1}/G*"/kPNj/Q_ZILc W4rcKF~a=>=) 0s3> `w|Lz7oe&(Ϸs$mfZ(WZx:WđYx$p]hr>$~䶃cSa7B=aٮ0@3;ZYr;Wo(*|=P1Q_EHY#+vev{OvO^\GT[Lkð{N*vvpЋUP4Dg-$rPaJ ad5^W^!E x0ñp= A*<:q2sGG$] 2."(LJƇx|oKW%: Ro=@��[T VUh1\c\qҍGdŴQL 'T#KT x(}s%3]ݭHacN&�*%0L3o\MS%v^amwћ>L{Jҋ5G2]e$Ʉ\ɞc}7tzgIQd儶sM}0x}2޶ \@% _!ـ3 eb1n`D |UIw%Cp8xGjzFQ9^:"i?*}? q5 v0hvt_=Gx.*8 A""I#\c>EĠ&|WHgx+é2& R~|jj)O<�@[{u_|FЙ-1{xIxsfcPE)CkpP^@vx<DVиx[h:yB@r`X`w_~8V:0V tk:4?+ZЮ[ۥ*Ac dS/`/nmVҘ p7rqMDq1jnsRp1|�aVmiZA+D'BE#Gh2V.*rV7s GB,굴CzH&\GŲ%GGN3 †hk YNL1I\J]2ШӸS&}| '# lC:htcv <,| 17~IdLm<lc裞/W\oyM omLc((V y9/ XQVADybE`0)I˭[wߜdx=IK bQÂ.ÿ+*~;(Xr{泃*.!-9[#ntn BgRبcIvцa9 yQ > #|ZsR#X<SF%፶6L'uJ4HfY#|FJP M+C, K% 8<r4Z%!Ec`] E+`T|s[qOmc jzp3׶UI>ZCeRAJe:Us0&owt(kAzlt(.%c{ D RW"ׁwܣؾ =O,@�@ cjݧW2D%A�۰@mۙQ(ASbUGyww֫t P2aϟ]H&/eư z-܅w%Mi5 <fj>@drCVٴ :tSzT`rO f|:(A|1#5`fCjz>m?IlF1 70{O< $SV+^?x)g/xq!W-"iH h)ã<BL=z=섦kjzb(\)mZԚ ߀:E[ 7Vӣ /'-*}|?Ijt%"H&Yo..go؁ba]&xN`ĥ+PRhSN̗ޝ`%0>5H0PL/"d溝hW0NS/)PŔ C=V.E@\%.;dĥZw0|goS/#=ky)ChgO}%XX9H1?^q %>JG2 qH;Ĝ rz%Hm?OR?y”_,r [8\� dJ϶]\^ p2yImeKyG,H}ǻwLTm0i,nkqtaCKi洓I, Z?z\V'wzpA6S|rm>OC|VMP jwK BኙMp6"s+[(S_V#=3S,-.>_1I@~4caD4*"):UOR\l"T8ltq(eFKtZ'Y<V$NS' ,JvwXz,vF 饁 ?- i_d̕ dAd2'VxY&2,&]k= qrO1�]718@)Bhֈ542#(GcbNUs$@ӝ^TQ #ȟʔ& pi@(ǙGR:!ˎ8͊y ӑFIv![ye~Q_hr™P_+f�^y93>Kei%D稁OġPʧxSϔA*sM)T;tHD`@ٶcp셶PB0<O[8 KXK,,;Xh+i\5V F`g?-&ILb#(6OPb htFuё‘VqHe,zwQ Tv/uSu!)Nx#]xFY�-(E&Jcۙk;NR[0gޖoOas�+G4Wg>؂~g%nq`p+ve:3hg 'z=&bz{f7h0v$iUy3LkUe8Km1~#zɂ5VC|?!Yߡh�`t Ap1lRe͇Ag_j&Ϣ+DwK W]JUˑhO" .AU@ӽ,ĔC .К1moOS.D~_1ga"< /l))=% #G}Ӹb$Y{HaSMw|ߦ ck-hzsa| $FX8rZiQɒ{:4LC苻BAE\S<3ZKJ%ynmʏ̭ ˚++NH|2  %1P-׋=VvZDHx]%cI.PCM(=ͅ?,\JI{tNQfՁ'$G|ƃO]h7fʶNF>�2 P͈~J>҄4b÷S$e{ClETl[ Q� Cz2=]Oʪ 5W,Gp1ɉb 2Y*i2  lAzOIS2c"vAb{`ø7e0n>.Mw8 Feg<[jѰ+nN1q @)[CNNFOv5] ; uoTh2Wa\ l'g/Suq- \E\Gx^ %tCBGC*xy$뛰¹KrH'zVD"@�qb%v˜A}JkU8kII2xV  pk/TSGQ9gj/D_IR Z Dk~g͒:-UKp&zsA.OCH ˛NۖMGGr3CWB088AUZHC<{zF50ԫ%"}&e,T}N WAqnmz)<vH$ %I9wIF-G_k.3U8e ]#_b?r.%)gMȼG{Ig>oT)Y-w{>(W/nR_7( }˲z>n</\P)ůP�\1,P *{Np^,B]R?/H}*)<QH5, 5($U! L{ &x86}s6K̊-[f >h1Oʉ$n+EhfwDf0}1%40{D9{F_eP;;�5B^[F\+J`&8 C4 Ss y_]dt7ݵ# +=i@1}PeKZ6& RzƗB6jnOI! -0Tj1pǃl7 v"R9s9ˀfϏjh\L(-z`6p # U r>,7+1y_eƨPu$=y9MpޯRܭ\+F@tdxݵ& ޔQbdվ03X!Z4ZlTYD�d(8I=_-PlQ- `@\6 {fJn0vX#^T<P>BK+{䟄� 4CmAhT}@%WѣRA^6Kr }tgI�m>CF�//4eH8v9}d3s/WɮR3'$bg`KbD!q:Zr)i:iKu>!nXYjH[)#>d`LLA9(wh,C/#i}@ԗ: [HAV0}5""a!aeO`2ar)$l׋nq<Рg&;7 K6t:tzJwSSsw-"i?dsz3cѪX4@#\iFt;B0o_߰v{lz(^0-PBiY0ۅ5Dr8SHB^)L Nbs}7p{ޥBL0 W6!P�tbvxa|зv"nB(V�y; vLv~*oO9R7kS[9ZZ뉊" 10@UvFBZx�^[s:�T@Ps$8b*=Qq[LM6EG) L3ʦZZ^WB&`r{.霾lety/}롂6J<tI#Ӏ8L=n8E4!/} "Wx6X``G";#p+Gs 2z�ӳ* MxJ&+w]fcl{)j >1�_@[xzgbJY0!l-@,�Q%DJ*X5u7>HbS?!ˀ~ w8vZa<3'}`_fWcʌ4 SAZ^Z-_<4+R<j9 GW3ۊ;< $_$iD&E%D6Kz6o7kf,X'Mv WaNay4Er<S]&2a=me*w|QGb҈zrk;rOs+ri09Qp)-@<ajcDVkٕ0;q9:B *1;:O3j g\ O8vN ʗ}*"O 1Vq $J+=V^H˜DL'lL^v2/q:D;<@=1FB6.uٽ߯Vh �A֓$G"pPs62 }̾據oO{ 2:~( k3rEb_ݿ@ RyYWBoMw+($%*P3ڻ.HǵJx .,q2z$X3az`x|`Y)}ᷚ!ʋL0'h:4%3G[S'`mZEGuP%#dy=?m-g#u,= ʁpZ:px>gsI�FY˥ˋ~sVRz0tu0zXk BP7`q  xvs7g>0Ԝeo؆4 ’ȉrIWd\0|D$f{4μp\>R*/`mCu`.ep+~/~XE `٬ɦt|'mQ=ZNb9nJBm(0C\%[Yv/pV2>$ * G,C11;xޗ=ӜfV ]TC}P @CೖON" dA@FbEP6¦cOLztZ�0=A^j:45Ե@ &fǩXJV2ix l`:��}LK^L9?İ[k<2 D7C[Jt̻p2`>o%p-5QB$ޙңԯѪNVWSl�\92Ye#$Ue\uC�Nx|&*[QB. uUuH6oƶ<?ۿo/??/_/m_0C>jJ`0481/sN|W{@e6l$ظhkIpФӑS_"3x<Ap :(Pb&gWZ frlR3BKyq8IxkZCm`vbMM6~#{KX m]O<z (ϥd2"|9DؠLyÅ*%昰n >,?2|O|ig |ZFbzN@$:E!kO+dR0IDGЅ4nBlj[(.+&>З.W˺48\&|&<pzɥlpT|A V!&?W$vJS\EPD .>G?8Aq`t !Xj|߁ #)6eqȘe"Og)zZ&(%3 !B#8#VK4s5!-{%xlY=*؎lJ KN+(h> "qq @ry$t}4I9Fds�$rǃb%q8ZE6.~[tȜt|}r>I <+iJ\0omv@x]|I- %/(9G,(.}KA7#qB OEalp ^i?}DcVA'1jF`-Kݱ5®݉qiz#Pd`*A,Mz/훖`Q"I13E4~6e4QB{24n64*%5uM՛*O@mg [.)}|ob!YHoSHGN.HcŠ̓ZV %eqyVOM8Q_gf.ȋR)}Kmy|C(wgV| V=Lk,& h_ A΍tv3 ɋ>de2/Z 0^+*fτ}b<&I9>^45K;LA 4+uC%#&9H6 %nLzR(ދ%�KPJ^ͱ$D=7NELvݾ!b1wSb7H+K4뱶@vE&`8c)_!g9 �|@\>h:�s:n1XY19>݃D4 7&)4(Ju P (C}eN~Wy T0`F~<MW[МaG K|T+-C:duB7d3ĕǘKr=nh).y4FHc 6B6>ġA<5?+N+$cǴ/ˣT`q/((+DjO@]$tߤig+\�\=쀣r5䏶oQ f:pR>s1a$ iR&3t|9=d}]yJ7]mBTcԀvC u(X{{Io�9z:Qw8ѩKRd NT ȑ87JK@ s\?GGjuY6r@JL}b=L^4 F8/]mE-w/WY77#:ƯC_b)iP<&Tg +6y)<͌B>~`փ L\i2qn6"{yf>w\BiG.!K\MZS)(ym."LȠK8 CTty%gԻۣ^ncZ-+0fS,20m)H/ζ`9鳿X*1<2ܦWvə >ed5H%G t38)ys+ g0$t?m|~F61<}�W5kwY.ux,T&is |Yߟ.<rW"ot?Gɗ 7ԑv _b1)s^(q?a!WB%OɋͰA0<FI D ~IRDqq)0 r^I-\'0: �t_' ç(3,0�HY˿D(qG &#oz K�Myߩ}4Do c1{$>ԥ֋jȳ<JIUuP;僛\D)w|1dlۿ'~ۗiOD:i ]E ㍢.t HשJUGD@xq@y4&(W{vn,$V?>2B{%]06C ?@,(hE6i =nEBq ٶG,XQ bPV)}D۬f' $GWXaH%|v# o mctTIb!:-jߕ6fՉ=,;p3N)t 7 oXKƮZn8vg%?Ev+F<U6q෎_*]%вdMHqJj*I'E ȅbke%- /a@vICSYqUV1?k;XąHlnL@`g)L12yZDGaԑ&@нʒϘ4IP1t 1Tkq],C%7 %3L6WY;C 0zbP;W.kgقFr H7޼#o ,q*~cm8\EޓDF3Jm+Z}ȀwȜVl8+{}, 4 A!('@( RBs !zZhK&[4}_t-A0ϲOo!Q 0<Ԗ?y,uk=Pmĵ2]G/&75Li-0cu( q;)?G5,z `nw-?Tj'i\5i� ?6@yӹMos^YqvMבt2' ArJ쵊ȸnhy<=RȊ 㕿LUdmo(jx]>T N]B>%<M/9iY'{t(r[P"rT @4 h#ϤcOZ{m=]@[^[Rt(Iy)E$ ex \fm`Fђ?gFә=K8'z m86ƿg{L BlfyrdX^(DU]?ew/mq)v"sc92;D `V=X"Y@! 7^O%\pAu^bؾl7<Yl59K3}>aY%A|O{5br=\,8N"`hê|eFYM(DMtkaC/uGoo_#Kg6E)re#Vހ܄{ ,l_(րH\Qhܠ 7?�ᄻ@:i"czsK1{gk۲WR4O%ӻ-~~򋱁<ڈ-d5cTeeF|a}c. dek#܎]N:p9ȥ{Y`HvK9w kҍCMJH比ʕ$Bc%܁] M { ޫ._)Y   ҋ,yNm9 T .@i[3w5[1D.h}{X,Ht)"o}-,g"+Y9Pw(부5@5?0+aoĭ,Ti+u1zGIQS+G +=W' qZĐjBd c?<U%|pp*ڭB-..GIGGْs]-'qQ|̚} *x iϖк�4mMXkpv�Hi�x|ڡ2oq700s@F$/c[Sfani!t ]yEE@[zDZ"Gpw% )ۥ{Ok7l@a#4(9i}er :0ZS}7Wvd2C{ /I'tzGqZ-.0b籷W:>E#.{f6Y@g7Alaeb\\vP0ڽ/4fָ Ed#eHT"+"=W)r<9/ABXwX-CɧwA5q.}}Eڤ.&ڏiZUb.-$hLBȈe K5WO$k3 \ka%,KxMD8Rf'Q&$߷vَzT^ ח\Jy 7Jhfg vP}t3rwd.1>eyzO�,Q-4]|;0zG<S2sa0?3bҏ1]|PXGs~\Hj\�91M$`R8#.Yc\MAB]!2Hi&BHJ5 V(Ȧghi0Q 0oAkJ2E"w3.I ANjF840\!xF/sɷp;oz;5B p:H'@&jT>eE)~v%5\w@ �%Ʌ⡗:A ْN}kot}KVAEP|u H�xk.Ym3,U,q֍v "ڀ{iZI ,+3ckR1c*C+|Bd{KzT11ƂӪS:( ʰ#ӼAA_^O@7wَ-y.yKA�M8n"Uqk ;bQ'Jº@<{\b eTi~~SU)X#kSܵWDS`2첈* Jv_8_(vtW1'�AɄG ?p {2]3ˋb\O2C+CT%뢒ɔ%ԋ4\ɅMfd#UNB6\Kl]pRHcLU])cASH䛲OEi}#\5n8y\{.a2x~lyUߗlxLYQadyq_BNW\\}1ŲvJ OUTr G.W\P"Wkž "\m׸"Gՙfx `ehrsDcy; ʬC=)d+!Mu̫`TGP 57j$Ma%z-۝H8#ӹN OGAL`mZ͋Ӈ?%ԗ53>޹33VUo cs\s1 W}c*q\AYD = Y..pSׁ�MM"OK]> `KKkԕ3FliNt:Mb%v ڊnIK͜?ԻtMCV&N)f~Sq2Mw. AC#`lv<]oT_Ҹۭ]FYή3!-nCX2L'{6A@-A}@ x I7"4Gij_ݙ~F{/C6kԠbC蒁 .fj/]>鎮5f1qczYj'/T2յG#EE>i#E?A[A,+<#ŀj+#RNwɑ3) %0`$}kaA9Vy?0,6aҢ1iu°zЋBbT SI/&z> 'r&c`S'0عlu(j@{06=M+i_(riw~mROt1PS;CpVSj$ڃLDɡu[ՊO'ZজM,,#P?�mtcɲ$ͣ(!L\TO ?8$ O+%+NIx-rg#)?VL=�FG4zT+:y(m:l{̰X)Ԭ5^9\@KW  /yHz{Ab%9R2<pYįB Hz �(]؂['~ DGtQ'b|-vC.c7i^޾UJClV[GQXTeE Dt1sHǯ*to@ĊziRfU+y #Cӱ'0Fn;JFvpH4Nۿ &yr74^Cw fq1.U>e9:oOHGK]“$#43Ma*-ɞ)Ojt3zf֮&))%�\/RrȀXq$#E81Vf*eTPh>9m\^!E#(VV/ qbתߞ*{R a?:)Liˣɼ툑�$/`D,lۥ"w~rgjM_lŧHEW!$G'QdnhjjIr6,.jCc%ކ2*xo^|mxA/Oʎk{BER`z15fR 퐣LAXO<tR 5K Q1,z%8x�BJYe+^+\Lr#v#u Ǒ4W62ϦG tj#ES-/&:#<`ېWL5 g%4|5 / xWZ, M-9&ߴb(h;aFGl6hmiT\GIp@c3.2Ao'?TSfk3ŶP�( 3ҝĉtN^/D\XZʛơY $Zȝ,}mضĖC*j9]- {7 `e.xܹ#$Dus0i zbiNA>~u;̉Xl=l ǘ#*KLk(C.es܄XI>"wo !4C,wNt�܊Qɔ"4S42=PDH qqu"1vptG_~҇ɢGCR<V+w'MC!9j~3%(KSMHBPP%!bMf2Tڦ͉H [tIsd56j:UzKKڤF,eUO!0,|śLk!-:h,;I yfD{�iv9 wOš%E2PԱ=9my\Վyg6ܥ=DJnߔ1lAҘ)a>Cet"z|6'FJœo$GOMuu* _TlՆ=) ^4hR.(h~$\9TB~B7S,8ťX:x/F ] S^sui*j,vfZcvt0[٦kM2. !;PȌ$Џ�gxӑm{m Q7~N@mxz ; {? D51x/$H,`~�Լ,n&ST?�)^ | aq{yzν,^sG`*JKB-7<S Uܳأyaw8B8Eg\Уָ+5;I-'J"2釸Vr^p5#jsҔ*=QuQLk| /A.zpiOasj䤑˹VWIP Ov }䶘~#:n�AvkWﱈ-Q|𭵯ȵ}^)R.+M-#zw GӾ|=UD MA%(KE 6&9ߋ=AA.I f2fraUAfR]I+N h&bCFl!3�;Tqֱ3RH :LBu|0&Ms`>p+]zhXsze M@i]#ߗfKD0}y0$VyK͹rl,$.( d.ećDgƑZw$S7WԊmSUsld�B#*6m_ǟ]{&KN�ReVе ze&Y_bPIuh+S\{?U  dU,utJl7XƐnQtrTB$.Т <>cX1{0CZ -Nі8vWW%n-ڐVK&iWG j3Z,cRH|rƪD~H6őbno7SɃD)k@D^+α! sl͖K*v p'7?ߑ%]f7'Z:V:Q9O.c͛r!ҫ1jp s&{Ds[aEsۑ�U..\wSN_'S?T%\2%'9K7N&3шxZbB$hqv?踄7ћ_dѢӏ%tl:t8ͽ~HJ*QN p9Q  tl\Lb�l\1 'I$3)#n iuZALY]B{= H2==#EysۊNlsH= �d?,8JM&q TLW; ilⶶfL)y�E^YG  )}׸Be~2cz>+0luRũeIY:lzp߄)w;S+G՗,y߇N�[y2r KuycqZZtcy j̆*鷋܏gKrH0JF(24-.L"U~-UMP[= Gs߉`mܠ+qf{ NcTJPLQU%|bXOy :?(DcԵ(b!es@imq]Iܑn4L3xqJ8˖ Y24{ ѳO& KRrBł(c S.)cv"9 %m?g|�RP;~+ : �29@9wPLg9vM@o<SVas Z7DZW8cS{0U`>0`$$Ϛƣ˛Jtʲ(A ٢D5` 20r(EYjTiB-2�>hs#NBIf@Ҙ\j̑q}W" xgm물 r~6Q<p*' +kK(~gӉN$Fzp1~LvԱ8ym/$^ ]C7f-vb0Ye<h}hV޺z0)n aBQv|"Zښ4X>dV_rWϖ Q-(< zXtόߎ<f pl֗CsI �νFJ;i/'hԋ[ d-&䞇TrTf6!".7O~Ql{T{{TZI6BMd WDg׷C8wRIOtGЃbAZaL !lNd1^x?`[z}X=-SmdžH Ι4A/ǖXpѤ^l;G[X0iKY&[ %tDt *0eER*V1LrџExUFK*2G+NNR7LqnD4dIQi 6n@Wu\d!>nռLr9nj\YHs+ <n,4LYw"WTq_uɊsV`+3n28|24*fh~Dt]ADBW�YYQ:)4i V.` :49YЙû GDw,Z\Au rqW:[XʙEY�V(I-tꚑ|-y0?M5K̩y]$4wI.+l"3}@,_ 8})Oe^%\ <2"%)x$*d9F~DC`:k?>EX$LbʻwSz vbP1F p*13[?3S cf5ABշ1D:rtT <Zd 澚l8x>yfWf:MMVZ$`A+;ME4OSzp,g:6OGƧ((BHG$+j)84P>qA5mH*D^_ł)s4n"J�&'#k5j\=f{,w }2 aĎ@(ZTot -gFOS5Wme^6md0WW68 r*&fDe]R^w(Vt=s )i0^d Dlg$Nte cVKpwf['ucC.%MQMr*z!\;~n+}\$ReVmCuHNRR&\JsnҌT£xZ xbń.4R 4j ;594&ƠЫ6=Go1[_CNߠ\md ]["F#arԋԣ:^!qdK|ğ rR{&m$Ec?~G:[Rg8TJLKr JE.F$p:ScXv� W[{=H6eF^(EKxPve1d&DE+qG<IQO˷D dBID'{UEBdq}^I@cLA[ld]7`5B[bHF"4 zصаjN^eVb:+'g(h#9(ՑKciI#jm&"ݏLhUreTg 21OrŎrX>0Y�FcLĢˀ$ Cl/p03\,unIxH( 1GP48K_SEoS/dKQ1# kv7<Jtю<PWKZu qna- clI KVJH>t*E~;<ɐ<QlD W."4ͳp�з14%0xJc?hu&b#Ў<4r?R )։5bEÉSX<:?cHc%'OŧUJǘY}ؐ`}Xi - i"@\ASSc[f%Mٴmm>.{C{k,![x wm QA8YHUR1{>6c<oz3'Ƴ3 v;MwDiDJ0ݱTeAjb:DOF^}~H)pH緪9Ą4+ I7fܸi,$";N=0{y &6�>&T%ט%</A%J~K ݶT>LCl>'dʅŻfKc$NT"ֲ,ZӾoO/R+y9d&BMHow#H$)�EQ3:qئMZD0H�6_r"pueұP/>@,edgv}dy&',ʎ =5X r NM.8Ǜ1n k3WY>4s%/Lkp"^i$&GCA?UqTN6K>t1ķ+ꅾ~F|fl ̑= *R?oݤ@<6/)wvx&蜿 wxyq0VKDׁiE:Ma`+LR-H&2εyS3*JU <@LN$`gwO :S7 j 7JC$n6}hĩC !{@s[Dv?)*֪v'~}ܨg|P+UfYEWoJ|5Q|/"8+ к% +Zr,nxZPViDF)S3w, Vbd" f^eU'̥ \-ފMԨ-1/4ш'&G$)?l-�'>"q f+8"px☚,/bi,ovhwy(Eq2k*Vy>37WWQvQNuu g4' .ӒG8̉SSgSȸa{ p$ v+fg�;+FIp99$t2J'! DJvo+-vw–J-E)D R;eC~!q*%߸'D/c%G^j͍-9?(*3#?nNZm'0%UF$1�_55~/eH0NLb l@qw%<ݘ%#1AjђdRP([pI1= \`0?1sI-94eHrnί&Q*vq\ 1WD<]k5)%, FN-$&P{-;eˈmJ Jd)qXA& ( ==] vD1oOɑ0Ȟޗ4")Fu, +r]ʫA$m@E V-c+0+唞pPTKMZWa]Tbr1șB#Ҁ]>gp/]. TĶ) ^VTӢ[K}jQ 4TXu@l9'-*{(1ɉs E<BG�B4\t rH*(%:p*FPdf,'BzuӅӲ vZ.*k¡CZɥ`pV."92Jwk/nv` #_XBz0xa_LZ"R7 Ao78]ߛVZ7'te rq6VScq Kx<w{ة|; #k $ m#=c1QERN$g(}E -!TshԐNrU2yr~i3Z2/QhP/Wr7ܒPKa1sZEnC4TzsIg+ŵ5dZ= S{ í.Q3o@x6P&Xpu)s1mQrOyk-+FQf�V FVDQP`um0#λM'㢤B#! m P|H1 iJyk!jl镂G@rOA etOc7T8F,Wp4e`BZvƵ]cyXoFP13e3D΂d3`<~޽+g6L0ТR, TUw RfXVn Cl½!{kf V+}t�hF*% a%V%ڛB) JW5]q( R⮳v΋oz^I 1vm7ES߇11\$)Y|xR<7F!۳D0 ?åA KnsxҚc;g[NDޭA\ؾȖ2}Wp/H)7 %" ht>zu3F~- F+ei3&PG29?¿-H?<n$TcE@ۭ@0 _4eRNOJP$>,H#2m}89UrK�́/E&K°Dx*e)r3JH*3T.&Yc3B AGt+^e-ifGZp_١QJ_XWͱ_`}n MfBA; yQY~@�ژ&@96v-58zǁ")�=h_)F`vn/N  1 T ɸyOY�վ]黣nXRluTFa[yjޢ_ D]> +Ƭ.C>~&6&IG/+ A|�)r#ɼ4<?�:o2GtAH!~ pSw->.M ۳u\IIr>߬t7Z゗&%g|σ<=ƞ.|Vc; NDv<&y\{F)<v-K 08KIRh?`kv g0v X}W- Zw9բ 泴YO+ (ɜB@y4u].9  }]QO5,9 yh4F11FJ>ŝ d&WNo) Ț5rBI69pC%- `WP 6J ^qy@ cY=Kmj}@*- Ot)Ck_jlތ&\- Q:k6@Lj[=I@.Cm9_͎M$&`^0s94؅s-)P:4C2Aq)0j,Vq%BRi�Cs fͳtJl)I  ^e)NA 0 Ғ ~Œ:+cbu˭AVC)Ѿ;JH^d*|,{�{Ή]區\8TezV,̽YpWhVQBUfz%",_ &�(ޫfeell>!t( hxwlkޢE%Dク> 0. jCz�8.>p9 ϤCі(צk@b]ikM9R'_9m$zQ7:@" mʻerZIKQl簕o|+$,&0H k7G)guE۲;wY`#:q8S  $F$35-8vB^MlCON&#Z6$i+@@WԻuR`dnDŽ3Y[$]0uҗ&EMAs:"Wܾ6 T)/ ,O!:) z%3Sq(cOfsv<wF5A⠤dHS 5g{)<^Rr3]dV"r#6u}y[˲qX1guMSupM%!Nos*+".lWB)\Q;r6XQU�L 70$qݍ4wl1b`14QҨ&X ȆuܝǰpR�bkq]$_ .f ckX}!8gL\Z ˤY JxaM!ׄup??g5$bKPX`\4cź�8h`U{@["P&w[%*!XEEtIX6r\VA$e8f u8;+Z7bBr2Bhu#eqgBP0oeM&Af8^tX3 %B5Py;DӪ[!_xߨҰd`>akfI _qR/?uI@ϩ`G#Á6_\f9xw!) "j ƸZô&=jpl;1xu[b<0N Hۻ�oN~Bٰ:tQ֛OQk^a4 5Q&HȤNN~ՐswFO^*ySQ`ut ϠjBX_sђ]5C е$!ЎogK"2UPEorM Uyb QdӪ.o#TOS',z�hq;i1+-6UnBJbn7UXHaxx=]9M2BsrKHG^NDrb9l*==*^an7P:Rlh"rR4Id-EL5dN#XŧZ8=wNNwػ,UfDHޑWy z@H1@>.)YA-G]ʬ8g!$Eq-ێN\#<~/hE͈3{(HCLi*d-e=}Ws2LJf/(JZ"i`*N[1QL! Y%wn)Ԉ\mlKh%[D'!”FNlvR=F[)(o8C� b<<>Yt|+.y:y@%i0͗P3Ba(wH3&#xSn@)"ہt? EZga$MQ;B܌nH=q!= ` `nk1'q imKb-S`h"EqI+( )(�  Llں@M>-Z<@H8D*,[bTTTjHhP CvCM?X$P[ΤIzRR\FSD)ʀ-,JԘ)y6zb UWDE :B#GF"}NVgF?G(�˭/weB �sNˠ ,7(tw*clܴ̱ќ}1-sr@)ȍ~h%SDsUlt%e"͓s-lטּ*4O jBW >8i|Q@ |˸r7W젥EM@}L57:h[] d05ыŹH/T>ZxB8ч\2"q^b_0.5RazOp"p8q`lPDN):+ BB2RDM$hĚ޳MMFZdx<Jpj}4XiH31b"hLG,L5N>jbٽx@* 2B]=g.{p^8C,/hHVh:6m\ZNϬ:Fa~/J:4D bnT{a1p%qMQ,i> k5n_Ek'k4wT媰B2-I7YliH]@G |?&QWE 4qEQA67J ,^܈B Ok{PeNTEb4j'<4P]nf ōgeNdeߍLϥ"zlu S %]]h2{AuR7nv1guG_f/ɉ !7ҞKj%?P @5:|ZMa,Eei¡B @z@r|߳iz?,š~`U~M7 I@Ks] ܑՓR"i!ۛgx?A8S�ky?sō\cNئTt0XPGْn!z)qҶ}f. '~N˙- G AԥSi�ݼ jvqr5 $n XLˉ_Z^=vt1!R-y1qa^YZ.RZQ 7akGBcxheHݾ2}Z.7UlGbaoPEJ0fH7ݚ zc(}x0TT/}icӿn@s]'@ Q<Ln3SYW igp?B,NR)Q@<Gr:(~CxG.}#ѭ34BPk',`, c5s-D) MH#!.dC+ȪCѶ:Buwl͵Y_�⎭jo{ zAgNDS{e&x{ׁ'<Lq=1-֝u%j;R7^;RֻN.Y'44�q+0 T_ %T)mE4G]NiidAd3>Á5t6|6T:[9bvN`QjERAúav(+|7æŐRܵ "p'hS< $:o#bSE7+ ,8h\%)]A;iIā'|ss7#uQ�tTTb$gp6=jIPqX#h*$ �EK?I=DpuW*fj .TVX75>r aH CW)ҳ{]NW#ӕf#\!W1tP`kߘh_ 3y}Z*7LDDLdЂI ^|uw{\ӭP{\7{^85k [`iy֦{RA f~([i iQ9i 6q;D+2O^esBxkբ(i} ͕ >yAS@L+> l4Yzi)S0z Lu.B")Ǔv1&+xN# wj O=4&UpJGeȐsv^X'?$kENv!n.aTtRݷP: -U{ 7< eq}do]gPoҹʃƄV~)޵Jcjw;(Gբ)VO D}EWӴtU(G:Gҹ=) 4K7mH86(Qv\):< &�݈6BU_ An[b\h̻P׼Vq3Qrlf։!K9JCnG R'_•,~ h$'JJ>'f,N&Tc Ol5t~,dQ^}3li(fBS.;P�SAKW7:X` <<F_TgRdA!6<c<3ˣl �,ڑ)CDAk/cݚn#y\I;�S6c%r�)jbqTRPyD0shȍdf|._&qV LKLKL2si(4}ǯ X8069l'E*ĀdŎ]PY% {´|/6.AF<xf2 F%4:6tٖTYyH~nM$ fzQ>Lc� =<N4JUvh-T;sMh3s3ŎNW@LR-G7^UB!>g)EmtL'Y΍'}3@\^•H$ş~!G,-rp0HƭuWXPG:`~<HaHCSG # :X:<@h97jFW13y~F bQt\Rdym1}8p?&^9-͇`MT~U><%NY“x w U2&܇ MP{ӗwޡr_Ȍb^ ÑBn7E6Yf򎕇 hpDqhM?a] R\&;NǷ[H+Yr5zoqbb{&@/Nb0*r:و;Ѝq`Xtۈg΢"5Rݐbݩ>^L㶉J #;^2C%g4ʷτ+lrjP*Ǹ 4j9KXM(b| P;%7K)?%׆##:}J�x2Yk9ON3Z#V%vY/fĪdq5Fcܸ G *Έ[_]amT0=Ad_~FTENG- Pۍu}xG%4Nnvzc0 (əN.5hsɳE4+ވvT#:z\1\ؘ JTJ4)H?^fGT$B @ގtpYtLREZAƞCU>c)C j*^S>c<i)o)z4g,ntyYU;N"aX T[(uUybUW gt;X!J] HX$ n1dl6\?Z&KN; =9]Č!(nTW ~2aYJ#.ZC} PJ;uuo:[j/q,Bd$a>p(̝'q s%2 rm"-ɰR􉘢ZrJ^+6??nfwϠX;�7~|Ӌ+%fV &a+ !=su> +65'+< Ц;5(�%w=[Y0\n7U,H+. TZλpybg[q\o֔[)poU}ێWdxgqgl *ɔyĂlgڝɇbvI S}-y-J37Ty! $/$*n0pā˴ n46`:3ۗtq>6آzꄋK|2B0Ag%Τe"S@2sq.W0f.X0*C]%.\@p(5UR$OM>xNS!+gQ]{lLͤHKbiz5;>h?rG"ҽl0U]2[ 9(ac5?`WAApIud㖽<ş> SCj:j8#j.cLC7iqi,/,Ju"~I/UM?CrRRYZT$^/ʠN` g6]tJ$j59{jR29@Λ"O^FM1A˟Y?%7ApИxSD8Z<.DĜ�U _aXɡe&`t|\zw뗯tAu/)tWԗEjg-* DIz¯AJQ⤒y$P$FS3f>tV kL[WW,VKU³h'4C׸eGbiI@E]Ip}B>+x Tf'Sgpc ~TlFʽ)MokD擐!o$d*E╅l-‚}n hOj ?eĐëXt?Afvsh7[Sk|sNU2g&n:dw69 HG]hӹ%9T$];6¨{Ĝ.{`&Ϲ) bĴ<=iNAP|+Py;#sʟYF·:*"邲[%e!c^] Gچxn5ƱTCHAY%'O>((SOYj9Zg"#oD"=DGV ]u(F')aU�֠@ Зy̺|!AJg<g/ǜh0&_ sǁHl#K-Q5OwΈ%X*c3J`)E6׈Av fiCϵ Mb|�2,~2$b ff>#Ǜr-$he>kr*dj?@2+uΞ*lQv撍"ҽ*xl!#EIH &i&�mqV _ #M`#1&JDq}!쀩 ћRr֐~v]jun?taT{bonx8-\Y?o\Z=abyY >qWjZ mPs`B:om^lT<ns<-]CheIY5B -+.;sJާdwl 9dc/HhZjr- Mf܈(cw<@-Z!sFc b,u&!*ɉ;ViP W3n(YgLXfgp7Qtf_<3$*_L*Z~8s;焃 ;-ϱ9Dnb v_u T _')>n\j24.TT-54 Jh&cu&, bBc1%;9 {՜ӝ*3AÃqj�O`rpOq(Vvd~YC� ۂl+Pg]4h1!fAJP9k->hP#~N K$ aN `ZJ``{h >wtOi $qϼJ; ^ 5rsǡeu-uA_b\i4A6:%/0h0a f4Xאǝ"$Ok{2P׹ExNe!5H;,>c(l{VHAJ0@pD$νG9`#j`yP)<%R:AOHnWƭS*- -ۛqSe4 FZ\*"V�ͺ+ce:FǕ9آ`UH1`jߌcrі"ׂ|&. Iϒ�  |L"n _(æ=5 ABܻ>0bf#6}Wr-f9S5fQ=,_:hG83IwDĆ8?J$2VtggOFg|O`C/PD.L"[ElTY1^$g#aE4pf!'ViH^mKb$ss^^Z{9/aDXוcU >cEŠx_`aĄ}40HJ/)'fՊ&UO Zmj9.BZ?g|6sX/-.} p@bE/0qNJ'Ȱ`=؀-ncLFOLȋ[&2V35EN0 M̐/wj 7?Yh0(ioDPbV}雈M9H.a HdvHC߁.`)9  &X?0E9S cas>S8~ LCئyQ٥Lx͢sAh>Q4k+3h+x|3[++*?|\pBu(PcH)pKqJ2bc!?"=\Oh^ 2 fDY<+ $_Y'/Z/l:r6j)7H"XxE^%TqDͧ3*7Z^atd^Dux&7|OWzK薑M2RiP`-XhGD-Ė=HC*{@8US(hTBS5:@M9gJv00#y;%&H#*<U0Q胢loUP[4yEJuć2wp~nƗ:?H gB%r)`g9J9~@҉azcOPi4uL[G yK.h7(/dGx=BO'gu :XR&T 9;,a) Dr "ΠOAU), ~섎TGD󛢤U4JEJ-)ext6]n-$_sx P2] u}o Cut"cCJڝW=^tPr[+}*ep,m`w~dDx *[�4>X*w 'G3۝I[v0dP,z|ʲ JM2՛nљ`r`0X�//M83Z%JJxg`l)f@@IRƾZe!D+M#Ew%_طJhQ.(uWH^@S.;O$;&~[-GPf{?Ι1oO5a<[`�A/a/;W!*Acq-jٙyaEC1 t*rij͠S 0(Vf8-X֢hJ[<}wI$xSE4^8̩NmJt @ɑS{$X<_ʭX�"wWxQg2 QΑjBj,6b+ֺ^ho�) u zpln$OMl2^^j%tTfH r8 S-هl8=,/0ȁ"QxE=Os Ɏ+om:lvID)g(1ȱgE[}4?'q? ˆWqlFn|InҎ޾ǮVIUhXzlq3A41' d}!SYkp!%/^>2w~oqn0iU5jPpJt*i y4b@Ngj \F6 i�ee rp4՜ ߑ+ft#c'66K6<mu5*V"q!dBӦﶸ*crZi޶6"塀/bqCU)i@sJ? d=a18JhM Z[8J3�Y:5C;RcehxȒmfI$8HGT'GT4\)e9ǯR5'XXNJb:+C'Dzm_eٍI! n@N-C *5uX9 $-£\i$"'QO7NY_kMQRypZ\◁3.49OdN*[e<T!&0{<$lG^J#h[A<M,J!QBX@ x[3%>J,{ݨt4I Kl+r8:qd4ϨH4wF)HuÒH@GGo1?Xr༜n$G7w�=vU,XV3&l訲,{>???f,/OYͫ+>y `ܶ!K�n.lL>/EOB + Vg]l!b8?]>ŖRԶqQ]qQ  `'GT*sFy%=Ck8qA {dECxY5e*aۤDB{S 1Eߞoa\Đ|ȨO+q  k`+]hJRZqJ;LRJG۾$",y}"E-!3[ĖZ4H6粢kL67D8_GbGud{7-vC`~hd!TQOv Z>x ~MW($?"(HfR,j "m Qʵw�\t fm̹}Q"$]7$ jw�sHq˾M N=L{ a &_{zۚ!h[J̭+9XP̻%l\Д?ǨQeDMQޛXiW@2aj }[z+toF(Oÿ@3Ek/tLQ2^+0,)t׷ADW)G7FKuga9Ȏ.Ͼbo2/NQ"R B?3>2�+b+E*㨩x7FXc8/e(STYmy:$8pqhMd1_TG�Xb%Bυej>~n{΄4HZ.hL*cHADsŖ´F+A*AF`!y<bH!qTiqjX,% `MX/t*T n9P ՍѕZ`V4<q&yu:Gȗ8cgB/_0`@q) pUy/<C.;ı\p.pљx5v6DV $>!$_H#/,mˢ.]OijM5*~?sdrntwxI�ݮ6C�V�v<ڞgv[2INSmC:/qrhbو/ PkbpbsMCrltcu?o737p4_^ (<.�9z5_WKITV")Bʰ[aI~ӟj'p6@bZ*I'\7/$9[}C Gj0rͼ|#p.<- sF 1'@dZQܰ +#,oU76/K:zFH1i'bf /î aFHr!-~$b JteOAw;9$^l6wNOp`m7 u}Smvpg�8ͻkxԘо7>p<v ;muwy`QLw�Eij0#8>m__n  #Ro.:|t&A h-siJ}9brd~ <bRL+}HD"g/lއʟ~"+"a^N+UCf 65%4 aP<H/~q=OaZS $%_H(0־;9LƆRMZE76fDg?jLRp8 c.xl]\qURk}ׄK*V}|sJC Z%f<aq78Y.Ĉ~U+(* '(<LϚإpvP[KiaDrjz ]P�⾘hfwSG1}�R5 F#N>x}ѵ p2tl'B!j򝐃>X堸:}t3cTr'\hy /#xT)&yT ϬTkPn 0x/\ŽWU=IX$͖vD! B{]q`(c$!DCS``I64> Q|WѬ(`^24F#d#L9uagM/_Dg*CQe£yChlmQWrښr˸SFjV2vcbo=*|$'T1F|ִbQ\$`л/#B.udb,V05y[5oRۅi}sKzut$ F"7D:57:^#DmzmaHҀ``a*ѸEe/.NK=!'RbJ橝j8JbJc Lm q^F<G{(^<qbݴf [51xW`Wg�C+ohtG+'D &=@w&\n~{۶3R|̏T n!caJ`v5"M.7#.XqttڦV w(+om &j˼xh. ?^a<٬}{Di hp)r?Ivy+ Đ7py Sb�L84v;j8v&zWUD=b%6ޯ7H�]j^BԳL WCwP8C2V?@jTMȏ-+ {GfGS,7* |VVLT0(q!k{DRjJyl8HVo^QF!դMBˉ%rXC+j71vUa8 x׮BM+'lTlTfƤ]#%TGKN't:IެBiF^3fX% 3-oB&^z0zLQc0/uv٭sr$bwü %>tp[@ WaVn[<|O} \avBvI A]ߠk{`}ɇq'VҐ=0{ 4D L=0J) G׷I+kqs!^bȗszqmJVZ:VI(Q!\tݟ8V舽g7˲@Jϱr ,a^^?őXkf>TJ8h;qEa0p=%*!>c)玀f(h"Ch>!Znm r. .ij\T^!qDMjv-HI #vV4=ؾAE =k `[1K]Rm)EXB/ m +L+SUܒz1 K"ǜJ}8.b 9lo|2 ב3}|Fp$=k#<eLÄ-񸵆Sa[z7- xc;SuI  eQst8 g bz&*]DXIttS/PV/^jIȻ!צ]`Z<´la"ETfL])#صƝH$ƺ~Ia!![њWi%3dvtBA۰8(⊰:]mleSl,!0]֘)dە¤+Q=rXX: P#H#nh}T_p&K5q-5zκ_8<am2kAxuf^ jjC[x,/1 Ҵt%@Pa?[*rMb*0 )'/ \:Q#A%ˉ^)rL:_W[d/9NbќYDxbz.H8Nq}MAđ4~zLDžHK"rVĊ,)ym(( a[zZEbɄg7vhG/nKpWܪ oV386PС-0i<ԃ5hA1oQrmPΑxy]mHOtm&4>6Avu$*q_a{844ڄi`*p6y,)q/ v p#u䁭=MpALz,]N[ Wy`# &9Qm1=1b]:9̕~AC$Gj1C,ח co>M|A.] ing]͘n?dG,_!R׬`"PF�N\η[-9GxZc@pEx#~w:Ȯ4÷Qj5MoU20Ȇe:AV&OjӰL>g(C&5G2SFu<+~�C?;Ti#zU*H:)89Үo.֩ =!6].0hk^F L3YCGJ$ۡx"̆֞pPAu >l7)=SPWNv|5l@Y7ޢ+lG0cLm\%:gc[ɕJ-HPV.- ]2`CBLj86GF@<OqOǙP0݊SŸ"+v:uj 9y<oIYj{4]o7pkkJ<)`924FaBq0Nt1RrPut'%ëXqBFHH�^W;ymHZx^(v'v 26#f!e+u=DPv+˅ESͫ{+2QjY /mf_е fWzޫyD+Ĝ"s/%A*1*L/v>*$r! 뾘 Ob< : 8.Ý]Hl @<]:ǥU|f {�2z㒏&;4T*w,$F?W48;iIŰ�v &Vcoڴ>Zz;JKhԏ&pSFߧ匱I b�BTqy+MlG4ṗ1$"xw1)Ĕ~h~`)kxRS[/ 0iuz0YiV#mo_^ȁ͂ؤAa8'KO!e]>E4@oRA z9$Qh}-"T*0vdocGX/£-%+.䤤K$jWalZ ǒ۰bi3zkW |Zwl&�Y66WynscbriwDOcJ $"yb Eҫ#\ PuFivⷩm!%]d2?a<5R -$ @d͵&B8w7>G_r$BiP6F¹~HElJGߚ\RT'~m7uէ9ȧj5=qJ:~Hmuj6F T6 Xl5o% '@(3&"#{-p޲cV% H�~FD5 B7&8r2X-Z~X]3e125BV4O;˒M<?ɚ,xv#fѱ]҇q⾍n (]E_5 Xjq7 bhMpv%NMXg {#e5ab !x>m=wnI<*tÕ3m`Q.5ϰY)´g,0XhM(DQ c{8Yb Q# GìKUm(ѹ=XAX.Q ;i T[)qb;� zFIHt׏v uE !|gセ,Ǟsw(Wwu$ũy|)k�LGyǯ\1_>qT@i\GHY6÷fbߥ 4=Ԛ#Ӱϼ<${~Ti?xU֯_{9>}P1va -}QY/ Jۺ-+ubnk="GIguɎgm%{x]a&6}f"[=mM(3\M3Q+ T1682||VkK5Ż78j[⣧8Jz$:ꙢG3bTȻ)-"v(iyc>+RwC{:crFo-moѰ䬹 ˲Fu}<;0εa{WjPq3irO3SraM2ܽWS^ў2Rfou*FofIqp*!sxĐﻨoG|!{J/ΊE?0G?~_(ܣY߾P N[-N/k!̜>k{<~d2&+n^"ӳ̈=#�`23$^ٮ̩~ìo!'n+@>`s&FoJ.c^TnBA~uwo [gz *0U+sژDF|jzHX0y V,]ûG;q?$1Q|wOҴȼXA[\=UlS5jQOZMx -eV7L> 'SM>84f޷H~K;]5bUev+\ fhh}-y+Ϻ>]YFN_X~^mEi>*%L@Qo'l0 >~,^?dq[=gv*԰8!MK'VYPb#;eMٕBϵ:Iԁ eGL#v3G{ܮ 3_);R8wJ/.$"6k%#zMedj aXߎ7խcc79 lQ�$A[㎟HP{+ײU'uzTer;pf/161ֆ߿S%%p ˻Wmh9Xݖh*^hs3AS;fF^wBړ MB#H)Sٙ FEϺ2f$6eG@b09"|c 8X_62 ^'HCkw0o!-o(WW{6MeF(H`I,^;n5�Z1\J8G E{W+-i&1'QF=.o#\� rl9QB?\(SHzKvh%iV"('o ൕZ>NJ+6p1 43?xO0O1͖v<G9MwT 7mm5ޗHȗuh]ժX;FX!xk6g0R||zH㬓q]<\^+Ʃ2uH?=I tSEyYo_\kԻ 8q_Fnn3+=:ķmUF+bx߾%NY w,G=/īaQQ%[a &:u7Kem{i#O֫JnJ 60lw W S:ñ6*rtڠ3ސQ,$$o:1YwQ-]N`VX3:zWV) n f&#qkq45Y}n)PȪ[r׷KÙVdݲ#k"l$X};tչ*y'gZ~�63c QB̔Sitq'6"$(OF/O+5<\ЎMF|kO5'G g%OJ >bwYXo.OԚ6Vhl:喰_ҡ9XeQ]Gjʚ}×=VVi ٔ<VMvB7 %2u GAohB:2|k蚨FRehLב/73 1 N@\:!ew-/({PQ$MIjoJ6Qg**ehIGJ,Fj&' dL\gR`[ H%7ĺe^ŎtȏA R؍} }D^YHM9T¥P) YXk;u:["ݡ>>\I"֨XõSbl2d]Qf)JTLqA,3>b!Qk G+/F$bJ7&dհ,n*ƪtR3-)R,b|d6i|\_+ N"OYh{|Y~`wlػz7|9X\ޒ+w\؂Ld:!ue)g"{N \6P"<ɯA4Κis=o:h8 >s:u5X載wJmE9r?9bX$ u_֮B ߴHZQ=,#.9n?P غ4Jگ O q&@jcKYh'hiRw֎WR@YlQåһ{##ė%05ŝ/~^_W腍Ѻi`/E@?m:4\Oy%[Mō|-qJFPLvL|@B;UN_RE+Z,e-EOu3@]$gk)fYj+[QrPm{ԛU롣&,_q9PEIl/yr蟔*yY :jNXnQ?-H{Y^/@BTg/uXhq\ߩ$By(=H )x Aڨ)=]u3%llG0^ $Z„L4]Ql&Md_GEW.v<:Rd4k4s<='c"3Dz+]@?lv zLq(9M^ړ X. +8Z0D{A:.-7?њEQ6woDqMo7&1r]]zZ3~$-dA&]YdMߩ!v<sQƓLQ/^KLB&XVO^5/-z^3;J7Δig]YhZIέY]i!e1 j7lat4ͳzcZpZg fs {Ra)xe"ENM ZAMVG`^aqgօﳂ$ԡm[~ 0S_N7 ˳ $ݬ?#'"۽<Y$*5hǼK=~[R!j>b#cF{JZDZ+ƲD> 9& G`rg= y O,\FF-V:v]@IEQdRɈ7%vr03_}7t>$t#l6` hqWqԵ'B.UH=O:k(I׼+G^6yqIIzeZo4o1$RGj?ڰ`fm6c9W�b:x z"`J${~ wL7};("Cp}4wQ:N5YDozΊ욫 �!1b [/$ * _BpUB1Ra1ŗ aX)іS_"j޾OT_v-CZ>đ>_bWRK=)e+{w1 Fe 9ӳj"W±�b fS :1#�OTH`63Zvn}$ã8)_8b)Y2Ư|!{ġ̸tHLܕ|JNGw'gE~1^M(l\lL;vCsEIUo̊w˥̔=?a{>7-X<~Thо4v/o B i,d{'lwfM6m \n)r'54 3Kn0$ v6^&u v_|u)f]7;H DhD,v�vlvl)1JӋ _K2( QHG b2FbE)T&3)+/sP\LF4W%s4LG<hFtrB2eMpnD Jŕɂ(W gY5[J#N<,-c<VjwjMmC& !ɭzZ@Y:sUfa;xw$oݗF>`wݰZR3BB=Q{{9gŭܰŧM>2;LxQ7\K0: dM$Gu?!~c+qFS֞g镀$ɕ! =lbaנbr_/ B4,u?`<{ӝW˗I|Xe:%LwOm0XnOso"@EYqkǬ|py-PuQ/xBSVVՙ`>gDľ(D 6ȱ4qYwc[zt3M=@y7"בY +-ln@V87})9*#H}_ɶ۸vn8ĚQsWL??Y3@k!t9-D<<VD5ƍr^s"E'XgFDU[6Q܄?Hh׫aLJ)n[Cϩ�?qۙawp )!UNX(rПs(dMf.~2i ӆ,f?otMd~#YoB:񽩨?վސ8eV!=jUhʬG(_u#P5~TX@[Rk+l4|0A5j3'9Hs[7Rwq㋠+"|[3ޢ?*j:#\뛼K"\Z0jcT7UR[aZGnn}Ņ7;/O)wY n 40Y12/I~^LџLACHkʎVs(,ۨKc8=K@լf(q3waO$v[dWGa ,,}kp;`U\MyۊT ohݸio~stŝenO!X23{~rAI〛riV#]|n<ex6Rޛ^>�M)qT[nrBھϙ~ (A<A5kμ�Y Gth7'n%wj_bWQ32bVOYV{xp(q2B94Y[mrw%~\^w+3 ixeh zx0ϼk/+4O/d .X]vH *ػ+pt=E]!䈉y0ү^AܼX9|** n+Ƭ %&.ęY�gz <A$E'#} (F&3!DES*B$Gkn%4 #؈h[JBI| rFbnqܡֳ0Tu|b0"ba!g cbo"( pbTm 鋎$:rγr$]4?Z '7ŷ"" =ҞPtruS½c >83C.8!WO\�UhnD&ݲҰ.jٌo*|1X32 'I3$K.%OfMkh^U*Z6EdѠ{=rf)"}tpP@YrzT$+VȦad*Cz'fK?|6tӛmXc q?O&\\J6y1]ǓrQˏ*={|Gj"`T`8`qSzWϋȴg[Kv:G9{1*8.~p!^#ܔ1ܰ+w}ős82mg+ZIqWz(c+ МւRkʵ0 γ�By w64c[F BYd6`Cd`8g,ĭ/Y+CZx xT|nHu}S@?iBx&K$ڬF y pѠs"B,76MkȄk+?>ݫ~_2[t@F/6ݷ,&ה}1q {w*KnCoZ<Gx6M4A{^4y|_6H/s(XͲơ1$Ƭx%-玑1eձ q:v};/^/:&r7_|آ@z0U@#f䠟GO*]vgmNU9R~�ۘ ]x;wkRŽVӎt"خHr)Jz?MRDp.؅{a_z^pWQuN0al_zWO ܾ"{,%zo?_\({\xX`ڝ i KE1))E^}e 5&�U%V 3|h$[L>GU47젷H}"rվ&iz`>Hf^@cHʊz$X֧;'F *ْ)kr�C*s2uxyލ a٘b8P %.+>M~N)<QVz f޺P:ZZSLh*eHVoxZu $1eEM%5Ԟm|*S=mRjKWc^E=S_U,wOL$|< D͑hmW޹*䛬ih$&1d:.�[DƜVjgA 'mFtso9F2 %٠1G VB7xA's5PG$\gAXjWFy?:UzzJC,qT$ckAzYe]+1b0W͠OIv%4^<^;T!),;h::D=6|^:̵`GZ'!#LuF'`۹hYieչ{ ZGj֘K7Y!l-0Jڃ֣j.(3N[T%)|"Pŝ]$Ѡ&'c Ě9y 9gBtj|h5ڋO&ks \6MI-]"qH<S k:vKGq4.eM*pЃl9(RG|R+FOÀ3Um'D%8sUI/u+YZmWƠHސo>.{uRPi ǻZ_Uٳrӯ{ӿq#*o&&LckiUGprm"ygKNC;GAuiD\j-b1mLIs\P.FԚGY2ʨppK<;[t_^52{Y֒a* W%>'澅ԇKK 2_"f{#z}${jpmY'~P㓓8*w[`.1ϓH :DʩL F q|*8I۵TH J6e'Ŀ@sҝoA8*?rdSn>ZvS<H5ph'WxT>uzv)frp<f% -z~'#iBh0&hUӒ(clulYULOh6;ei䊓 S+WQ?LZxhJNNjFږt:+Ut~lI9|=N@/R.u~ }wPɎo(Ya xN`9 \:XZJy4e%mnBcmWLreV} R/L e?L10LsxY/QiA:Zo#sy(  d`eḾ3C[_3G% R guK.OBϦ6[̈Xë8A>A;wT@[ܮ~>2R]anL(;fsc}?_%~/oxr8Qu~-u4u47=H>dwoJZO~3'݇MF 4uFE;ɵDCjYD]WP 4<93K#SWC2-K*̓GMR|=@<T6dHR/>;EɱŻt #fo ۵M"që%?(HgM*"u%̣g/)l!|it$S12>b r͍r;9RCj2& V!n5WꅻghH3p1%y 3{^(�&s^n m2gα 22U4ysIj&s~щ3Ķd1V"3\<Tָwz~ծ]Ϯl2 !aoJ&\ z-gfjruMmXRr{qw32ʗj Wo(HëdԶ(Z>5/30?z'^P]1 Yl}FlB7wUfȹL9IG%:cvNh;VJ2{MC'˔>QDpmPm[/zk+ -:ITS6|v?9Cq\)|DY]=4G*؈:T1:*w�sz=ne-ڥ)c)7cRCGo3LIUgrLj9ʹ_#ug2NLujF,4./{-fsT Q1Q(0--gz:gڅjU.O=!4.wb](: zv#TLē+.ێ 2PNC@׏ 7pŮ/Ϣ=|]u*I\ݤONdVUsG _ژkkXW'ϬzDc%I-Jڷs߷_6 =Pg1d\J6w16XbG|*~F\e s#S5 qH9vW1:ΩzYMc%&{G) Fb<Z(z>jOW>J 7!�wl_mlIUGgPef-ߟP`݂. oS,Y0„Hyz,Y{C͙Њ`U+VOnx?lLWfS9M|WkM++pO!a2״xreqm[ޣ@%6QFP:U+LXl2FJ{VFYЌ4,zƖtM%w3ؕ6U?M 猈>mjGR/ B+*.Q!vgJ9r9sv}yR4Y9]23;bFv;|Y`+ܟS_)(E)=kD͔GWr6vA;{8@\#tcpRG&]i3kGV2Ah+\9 ΋ |*A_ϯU[]i:u ׄ*&pLppőS/. >-5W@{+㑦<B;M+[Pkّ%0?7YvlXCRDm�ì(q=sߕeR7axs2jlph?̈?Cnڜ9B_0G*Q~ܡS,3zFڬc7]]^3zeq#u=3.@PWKe8E,'1~X7 qsK�{SpS # Rshھx?مc[)zWj1FikH+^f4X3\O|I4[>Ʊ׉nn5+l<ú=Hzu׿ L):۱4$Y6QJ4_ϧq?ؐu`5v <;dSO4l1#3Ga& cmoEJS# (|VfӤ Gv; *Ȍ-ȹ"t7brW9='ҙV"ZK֪y_J`tkZד@!V B"% u3YNH^ɞ'^.ꀧmvzntjo, 4]bS%�7[-QM~H8@Xju' .O !UR8BMVƷ@tBW |IzВ"vߴD;O>wUWG`ql x_pT$QHS&\=�s`@efFu/ֽn]j\#v{@!|Zya}Wh56]I'pć!Ho;Pc?q qD/ocI[*Np19iYtzyf"989\Iܟ/b=(eo:\ݐ MȖ_�a!]^.!o!{[% zPa#-YBF6ة5VL#r_[֓62 xMU֏㋝7jDPL}[h6ǁ\Ք.w<j<n\O ]=y?]T#<d]o!YQCAl~Rg>rL6YDix' %'!;p:qD.7g꪿.P)m>ɗ}zV6ٓZ0?Jr<p;H sWFR-X DHu2ܵ"t"OI X#==w5 oʥ]^C*~ TS$4m5Dxޫ(Nni*k\{ W9չLyqt7Y=CPgE:g",3, a #.u9Ȟª2kk_fQ/8lDF�-ⰢrgK @V0m̲T1gm-- @B1碦 |&p*۸kg1I\UfǷ)�_^eo8%\> F!x*)x;dȭw{oJ TqPb1\9w?˝#eB̵Ԅ )je 1�WiJ&|M&C#T.JJgO|ԞXnLJhڷ&q`륽H}U6rϬs\ Gnfk0J~k9ߕbBgi|5X,!lg2-"[S jV;o6giOE}"]%Jy|DzKhh+'f Xb|)`¾l__y&S acћRdWv2`B(;[Eq_-+UT$Plr3bUxGʚ,G+bzZ]Ƒj 5 kNC uYx@~0 QlAEXٌAϟB< ϓF8WCMi>]K 6~W<Rp9TU> !v?U:&|W.NB 2(q:*gjjx{@"Vƈfnncnάq0E2]dl/몒Yn~%ۍp*-zEIϫe d[´6Ui I f#h"N�@4%^uktg;[WM֌)FY V ;S)Q1ޠ;ӫfi@cXQ]/TlT<PQ2RGk7XJ+06z{sIA``QT!BD,|9dN1Adb'Br)0<2U(APգTYs�E V=^7uUVWoJ.Zu&{g ZV7ADwRAEkE@F{;�V7ƹ[X˕S\%'fѸO]_ct/b)<-Rܐ>k{"H.A m t  L lNuO1)9׷o(P`I~�6f| bC:?WQ߄vr0m|MȵA1ΐA[VC-·$FFe9z)lTmȈ UIXn]MQtRx Mz Vw&�V,MT}^ @2Ksfc.5Zu:Xv*]TnٓJQ)ŷd'vny3XkenQH}¤x3G7@!Hp1-Yz|-eT:*ϛ"h_A?SV/~ (Țg+_&+d|$LJDM|z HUU. qC[wv/X~};Z7ޜZ^MlN=E%`iYN~&67diDgiV Ȼ>vIEt 8NA6XQ,~'ػѭ(3!jv;MQh:Ďu+AOU`}.p�/ًM5#W" )5>j*PSaͫ]U9*=oAW(T̹ҒDZI%-Qb+3 )X\sT[NʰeȱG/yql vpip1bUe_+8rޢKN>M ? uB> 1,FՎ{ "*sw.-i^%oo؂T\K3RyWF+#yB=Q-'Ս,Ġ@%Y{ QZ ںTvgn6ڒM=3KmR.޹,G<59u\7S9I,AlpJ"BnF }w]eR+)OzD9k^ĤqoZUl3%zqDC_1*εRQyzO4dmX$ᛢgolbOtenQ5H|nL3ǣ^VᔏAz>UCHU t-:Ub7ۖ"^]j<>%췠{Do"a@lƙ-2jfOȹ!YcPȬZ1^rqƧL]h*y*U~2CB!eW vm9LMR㏂#m:8 >SrJ<{x;D䕎K-=LoL?u)z=́ V>Ś(AV8uy`iE/~|גּq>^Kdb# 4\ZtJ|e}Q#dUvY#-9Bf9hH{uzHv[)ڒMs?Wvfn7bnw>3ep>כN[?X(_|S֝^0{%󏍸t>ChKvu!)5<HFR0UWwkd-^\ F7nwOFG0xo<o"[8hVLcgP5i]' 0b/ Pd-}{u ~ʎu%0et2E^$ϫ4$|Ӟ9w.G^ao.<&Q!yreh|'[=ijV#oL0o0FBfVݞAO 喛u !<ƢS]G\M=OE(=0*??r(>%$Ni/kNˡ׌VM'[=8 v6OHˮ.* kzȰ\3ΣIֶfy֒4Ԙ^|J>QCm+|}(4z}ϫ^}hzx09�5C(/huf!<f+ԕ-&ԁ;eM o` & %E /Z"!#ӑ4)gA]R)C8"RMrmp:2=pFQP&soP2ɴC7F{n,9͔l4{\ECbdok8F+ӺlTw4 Z KjY" )v[íXyAs#@|@JWAZNr~@誧 H܆mh jR1MW2ε։\33I1Go%\u%�ۂ(~WoW0PYBh_#a~sr22rlECוF[RP1aNwNU^l=ElQ<>WM3hO uqVf*`׫|Ip=~0[/[f*5Zfubs^\I;/ӠhTQ=sX&q8Vb@shoX+A+tX a,J`aP}hzk{=g! +26cUIs;ɳp;IgAd/{ �ٽ:n%W Ȧc?X$ŲМ 9E.mvNs̘ekQ<oT>xЅOpBLqo#<[ٸ[͟OF$jGM4S#m߽QY~Fq@qpbOnz֔ -5AДgɺ LwI_%:70Nj8 $hdȊWe!,w͂꥖,uM.,.6}8 .Opf&2e Gr 4k*bҲC&b=*f j{wd6Q˂:Exv?- ̳t=0ṟar ]Yu:BۙcQT3k#{m-̶gFGn{^҄#Dbl)M6ᶂ\攓Flȱ[4ɷ^?9]йV7 $ t3.sCcFȖsdo< #]>/Zg jr{BYբ}FD*$Ki')9 tkv )Tfx15slNWFWD@1u9JG{F"KKӎ H#^y*Ӓ c(x8O .`JXp(Wf IwwݥLQQ9Ѿ+#g&ϙ[ܺ\LԄUhn0' Y冒i߱:Cߟ"B=Fz,Κ`K$+  e%cԋNUޙL[O^’GN.:!~>a1H,<yT_mff8= W<#z,OԎ]!Y1cX:t̡5r̬5=i?#i M ѳcש| ? Zʜ D1>$)֝\MF[mRɾ2e'#ż6|Ӑ5d;>k"-;4Ed7IU.rڦjKuSf$8|-Hqf}]Ύmd(2FCȞs9{j:Z;ZfA滻}u.mT=\byC HWD,6P )U&89~rR}cN?jf6y =+ͨ^_ni5on,`v@Պ;GsXBܽqZUU(wؓ I78Gy[f0oKz;m:O:>Gn.v᠗&VaЫWU 򁊠DwzFͩXɜnT()6!C]}lW~ڼfXPҼZȰ`\_PSv#7bGTJLY0m`F33T\f|Q>_ܽxRenOLj�ɋl@|cDAƧ/\/K?/>5*2VA(#͏zNnmwљȻOxWGq#2t)fu 8 qWo~y2k1YOOek5=˂"~&<>]N2jn-5϶R爨S5ǙD'-HզFS _j9n7ju�v;BݲW4=^9ݲc䮮xǚ#&Crʂ]'Q D^ck %銊r/N0P7 _[0Ib+Fቇ&{Ny;gWa;* 2=뭩|D7G5!zip֬ y({`LhE zOe߿zsd]uJ~ϒ1:&eE>,C_ I3Ԛ Xߓf i>jM Z}IA&<(e40qA{;oť٩㐥v5:̇ ϊē%<+Q]ߕdwQ^ M֕;*x>ZgේeU]`t[7n(S;kka<]ֿ/N9 !(ֿ*rU)x>WZ|xB5; �S[4b�>A_bu Ͱ)s=V^;Oe˷;|ȷ OڙOEq떗@)~$7Cx o%'K,Dz .*+tf]_?{j^R[)A.W`_eq)͎gzsv_мʐR$xi8* x(B$ڡ4d=:rO`;}*s\[ ĚmמL,j9rE<$A6diW24h[8?&4rݘ-E kv$b_u>_F#=]2D�3솹B�-'/V>zv G# 1JvGp7NahM[5| ~:/IQ&5j͞zQ>TJ%z+_7ypȮU+ +BẒZOo=�W,1]6B#U^OIկA* C ;{ ^uH v尶)Xa<Ӈ=&mߜs4ǦZ#vw%{m]<Hz&(l9(=*2POk/sc =^vW]0VY)Œ^J&7gtfS]3 o?$*sng%`D 뭛pY]̳AX*FxnjDgcEu/=z!{U=;oR:%%\a-뻼z!PoF~ºty5xH{m`fF7fR(,s xJD;:s\r]x(BKlk!\ <ҋ OiѢ(o(*):Pя=]X.̶&u3yR ]<=0?mPQrd!d*E2GA<+k)g/1 @tńK;{pҭ]&}' ((Բtbҩt Ðrsz�#ΫXFp$Fg [b1|Vi@WE^ymWsEjlxQnKbisec/9H"ivG?AbmFK8Lׇ9I6%)6?8#_H~}#I 4l,h[8SC`R8Is;{hmB7$&Pt?T<ĵ&?}џ-5.'D VFVcD 8A174;58 ÷!Sv=MDW>upo+U(0wUKl %W9 ٷ V!$e.lQuBuZgp y} BV+fuɔ6?]' edNzSSܛ+|TT֬"Y5q=RDzZ=qb zqPJMz#cĉzKE.[ V7&#f%fΨhk6y )fbrX1+־&]p_F:<~ksJ}b k_Iw"&SAՏm/:1ocm-:$>a!25}Sdxi2[?]z;wmtC9͐=Ь?nP(e *5弌)Lm"uDa̼Zliftee׌>j@h '儢ķ]e 2Oro4wz!4&-WqǫT=۲dASzj*~*p<Q7kwozӑcp G[!�G5jcU]b*-V6]=&{i/*hYך }Ѯe"ŵ"@LvaTȜ2DK3h֯"\!ߴF8{7{upHD臗Y %K^]Ί�UZ'O,תsP!3bo:#ט"J!=QD$n"& )GpW'zFܲrgzʃoS_=)X;weэ7`G=YVA<ԇ1>uGR8w�ԐղS?^o:;UY[aŤ&=ܛ:Gf}@skPj]J#5Ɂyf:i;%(oq8S_8 !c0e܃+K+{rrġXo1|a*/Jj_un}D1=i#rtgĴpkzpWWFYLm?+A.{z8(7<bCRNH?0[Tk=J?�d*IH.ѓj:5D/JT~°@: n];dr'ޭ^ҋ|M~D,72[ҞBgL.,a B}w?̘&xLKL,t=1NF+, Hyʪ &҉*V9&{_3+F``+tr PԶ{.N*{9=!jÇmIy  KbSi DLhSsQ]a$*DkyFzy󶸨jf`{Ӎ?�޶Tm[bV\ B hx�+Qm" <GerΔy%R82 0 cգQnpjN2Dmlq]zATXʼbSHt-ŸQ6A:+lN{fFDXTz@i#$1E3+Iee5ʺpm]'+=&-9K ,=+bIj#▫A5ld,3(G34lx2AS9E!v^ FԵ�{?ސfHZ=BGhԳ3Ĥ'yS t‹nPQME  Z=_:qW7{*o:u򎅔}*A9YN{̼9$SMJm{/{>p\-‡~+ܗgud@8j4Fc꽞Wjʧ xuJgt_|Z=Y n$Y_io#ZÝ۾ 4+;Y+%W>X$=erLS滄w4ga̰_}4YzC%C&Çx`-ShURzt6;i%6_u)4?Wr?_?_Ϳʌ1Fk)`!f $<YԷUXwK%V*ϦӯX3IcSL:T5Ս6M/ Ft|],BS#Jl+EN W0ml&lFqÉS;ⷽ+MmZކ0/{gNw?M뛽L3tSߔM%~iZpb*񘖬_nmǏTws ~[Tyb_6`1^@뫎0*0uƊ05FW[x_9y{US)+'윔 #DΗ\7~)*超vPd;熆*w ~ttf= ++z| q nd fq\X;f} 1ǽ<S\ WLj +ȰWtb&\Va繭˩G&Sm vnW| 0\߰XX,\벖]m&PiPlB&ÂS\h/Iocp^Q>80-UǮmaO Z/*U}?켼b;-ښ Ah)ƍw-xQ̷]{G>rA~%~{E;}_,@!c^wS3xhJ ]nHE3\nswmLuݟeq5/TvqD&' ؃GJ̓ 4f1/s޵˒ $gK"&^v*^aGC/VgzߩܡѾgJ:y MoVpPF)�h؜#[':A 4lGwkA u0J-[>2ݱUԛjcD` ȝ�&] |+tĕFgZtiz!O Ō]dWFZlQDX.W+_բ4s' SR %z\ڒC؄oA9 v[-kك̵NmHFD'Vv-{iG:_aXЈjpp!F*@=b[8+a+ѕ |hLq/%RTe _= Si`.;@OsdJJag%e2zh+"4>U)~`3.[_{22L3{=L_Q{QISKEas^=˺NJ@ o 1W WɃ=?n  ߃ 0$~(o}EPC{$OU>*jjk}gZNuTl"h?G^<ڂ?piDmCn)go'qOXt7+xhm@-{ _`U_h{šBаDm[2!YdqيTsehyR@G6ryڤuǟz(mUן Vw;4+Ĺ䕱u=oTaؒWR^PT7 ڨp^QT#zEKHfhH6An@*4wUa2cG4צtoUqmGl(bb|2ܔ~K,%ԣ ȋ4}uG>G>D~> <q1+DpYS)J ~v^#8V⥯2y=o^4 ĹYj+`p8� G"Qo?( DO@ `*˓ d=F(mIqWQ]EZn :$f}VT2y$i .;.|/b:ԓm"Z:n[z}wƭO+|ه+yT-{DǗy~Ym4( yQސ@c%>gا0y]ٷ8bďZQw^{V| Bӭ;E8 l~ʿK)]zm?&\cu2z b M8ǼXYAfoa%dh=u1%HWWi/\d:䈨e-tL ܜ!k{V Ki.G]wj_&aML7e͗w''0hm!97{GW :SSklUrz]�`c50y `'%)}E4]1ы#XOp�-A{Jj+3=qA~k5ZfKXImϱu̞E> Od#FJ_COZeۙWN&xYWqYn-dsi<o^k!nOHV?rmw!oTϯW@yKB;uBQ (&ܧ]1f*_Wj}cr9͒YHd:# b>{"ʙ]طk QZ|'9#onht;Tu wQWaV_sQqԑ­QS;S4}VxQ{O] A%WjV2#a<5|gRdN҆_GJS1qGԇh;(յq^Hm·-ӕDx+A~te?ÖC Q6PqoR"WnJ$:5`é*Ӂ떨S| kWYzPڲ1sl/X_>vva%QX@̬wG|!Fo?YORíCs&Ϗ#y_T-%=]tQomjL$w-w,7[f6wq! ['/8BjvVae=| E*)?SR$~ȑ'Zn[SR9.Ĺ6ieT́QV5E7bQRQ*zae_8YiPTDq}ԣ:б$8ze}_CM[" 6`k.x׷ :jvXtK):umM11ԡlӭH{Vqm[3Reijk> RQM:-?|N|pFN~Yk^3)=V7{ PlUVБ?qdU݊MiR 0uj Y{qΈ駴ov\>tg 2@zvڃ=5}QƷzR6,VSq%W6xWGv)ܶH~i5R[toE?S ~e#jq߲seYG:~:z;KApT3 Sb# /]-9"g@p4]{̑3rʜ/[ {$-pO(Eaڸ{W5 eLWqnka_!ń+|)d:"qEAm3WۛHUJ9bDú>^&|V^GzKՋ2ɹMKdkv\ję 㴼kogfe.M/eMٟr |\`fLq ɇL kb7ITrIX_5OU2h=7^' ,[%Ҋ^{Ly'I'Ow7ש56`“U|BMEytQ_I˪]ꁄIzk~%E;[duwdfg > ɾu\Tv@ !0}ȴ(z5 #{\eY+n)sJK}Tߴ#ȋQ{R(vAaS;_<1?iKS֡tn›NYd >z3tA7ylCaz2SŻtJz燑@wZX RdkQg ^=,+GZû68V'kԶ_]}o=cM$sm^-qğltO ,7q~ͅ6&pu.ww'Q6yX+ Rw@!-Ԅŏ?6?rs_DQVM=f Վ8ZǦ[UjD#eV,f%LH'^KOww|+*>\r6,9)J=f/OϦk_JmbYhUGKz4p/j^~�e(s˩l܎t\ܲU56]5֎dY]y4hyp _p!06j-~6:ۚ.V$#XgG}Aa!׿t,Qf[f1w}Ctkl,=IIJDf؂%2L p;DR Gdw }nS?x܋wf6ު!&V-F6UKٔ}=[Yy_}<2bw%2=iqɦIr;&e" kKxGH(R\CEFwh?rZEYy@|t4r^\p̕&`rT:xes\*6?6*e amߩIGQvƮJsft1?@ykN<udue#"w|7SOFC@|XM훷RFkb:*4ܪ~t7#|\WS\'@.3^�۔Ho~}T|1n-ԭ%^Lq]SADEp)7gЖ][OfI]\^qdS<o0?׆;; L2FB:) o3aN#A+LF on ٣mzuX7Q0-ւ;gKQ-SFOq8!KʐOdC+Q(xD<<-,nĂH0mݺ.xŕJay0RC@J4iX֪my;SSc ôTHE'I-elX"oQw&Х ]=&:.m;/jECгkt:Bd M7|@$"&ڕC ȕ*V8Zmfߑ@ܳ>DʮuM+!zr(\Qd/ 9oR6}>q]_cU*9wO@-86bݿβ0m7^sv|2DHZyߒ�)muXAlxG `NF_$<TOP y۞TDuܛoFG$ܹO!~Axt$bo;km@ht;{*zy)Gp@u Tz b:<�vS0m&Dd)YIAp56i[ [䢧i97=� HWm(UT>_pV<Fڶm:=+)YYA 4Eo0]k<'* s<>iMGZV0ԡgSl+ yg ;d 3sd_Us'+yMRxѓ}f!ʭz?܄  X4֮<0rֶPA|yB yc=˨XMͼSK>9F,R z?q�v#:y969E/ĺeuHU6қ s=ZDs֔-]{=شn sm(<+cQ>g_φwVV7Ԃ2il)&5MkX[bH82&Lv ߠ n#Ļj=0}9{s0Q{HYAF^;W6)4Y7RoJDq3y+l6u -;[5PD5B7GaN{Wp{!ر6[RDyܰ8IGK1\F~sؓaom =-g36,l5sy_+xq?[*_Ũ2\&9UZTPhf&ȂnŏP8N2 b 3_"%!s`6CJ2cǓյ W[w1 p)RouYU^*m-AJJhTV,O�CDJ֋bKIJD\K ;(p}Pnmy'|7KQÜp2J \P|Bk!s+3w+D ը&s@lYȌDL>\GO�Y5s|G#R^ϏٵN`=wp;Q;⭁ nZΜ:´Jͭ&kp{sEqS>rx?Yl*%ZxxS Y猶gޛ%Y<Raǒksc`>>:_M48N(ZT3w[_,! Pe!/Ev#:&I$G[e,ITxފGg!r %%=0 T<H6g̼40 w_6WΑ1=kI8' Vg&MmBcVO=QQCj~lQP+oAc|}N\x[T*N iH?ޜ+n)EVpݡLd ?a:mVH3s(4+晅[)5D7智RiTV;�j4[+>łQ*4UhDHq}Ů(a>a8|nF# WZe�tUYJ}5h%B葅o8RT=ۼ7wg2؈yo7ؕ-zWq<ض̻f2?H7oȻҗKiܜڭ zYXs m2{s Y$g0}*TReى"γ7 yC'̅lilAu|)[xBk7]T!;矤%d:;3>TZN^ԅ1󒇸JTeDGpjfAyA[ۚ mng>| {6k_wX̀Fy*�+sxl FFPYfLV3Ԍiɕ$cpyyHZ污"~B*J>·b*dܛ$*HDuW g9JPcz/ gWln1RYO =Ίxk[.˯Z v#9n┘�lmHWb6w9�.d䰲]KN"+*{["\U#`2�xls,/ؖ,I:.l~Q92(FH(90}lT?gjKdL.]"zViXZ#t$rELwŬYtڷz~HvcNeJZᶗAQ}+ QpvpzY{Qh7@z) ~ԑ[G(@VsSǷ:6ײMriu-x[c?z.IOmfFC~7I"7G)TVoհ7d,ݽ:<BɏXNVqVnY gJ=[I)wK^cޕ: #O.O~4}<B?ƹA 9 40Ds4$$*w=I֩&[>rw〹@~s8�3\BΊ$^jZUOO& f^^X^XfnɌ-?Ľ[%CMɂ=Dub>Jr͓%Edhz֬7d2ϔhތb&A9rXRlBNAm)09$ߚYtkLMctc;M9q'1h#g' /e ռ*xC;COK.QX<@)� z !YaYWСGdž]V%b% )>8!<H0#TAaHVʴ) :#>S`UrsMgmI ^ %Ր`-厙er,/s4Y:I.I"Ov7 "~Hr%?2.xmƱ9}1PFZ}_PreHT>i3JR|OVgNW\�ӑa{ בآ8)e d]@!yl Ox@4<FO.gVgB+XHqw! ^lQ|UewNWOd6<Cu/ GSRC7Gި+<f J!zNp|2x<w_?SH{A Yr*'HvYP</lLOoCƯ,AqUCCSJxI)p'? dQĹ/S[<4_'0Cֈ$rEA4Ww4| k `&뽾[9\2ջ}Q%Tkvg[(7X04 .#LÍ\AW+ u}kc cpL(ߝCPY ;hxwj#"Zp0D"F; G3`Flhx^W彣BbA$8М#ڀ쮥"jbp_4#3hx7 R v8 L_Q7J=]΋N}a >Ots2(`tSⳕ83DG�bЇqULvvr78V -4A",c P,~5ޠ ^![+Fӱc}sXkL[& gܥ]k ˓>g;  G]~: yq?kD8zJS8őN18Ӑ3Vv;LQ&i2iM? }A m=79yɣY8x6  ,%vqZΘcp+ W(3C/I1`Vk[†$@4J !ٯV=yv etG:e<z|VQk6M2#͏r ,h),1&<`R. ܘ 4S쫂(G b*)kDM޽]gU j>@s6=}`h C`agPI7�h_|ğ\.f{9YK'|U6GG;hn(J%DA &@6l=#]hmg;ĄO˿Uටc$z-Cks'r-CRj3zʤEvC$4ٲq7Wxg.6hV=<Æ.= Qӈ@㨧e4L[!Sz>EoO\R6,W;zz&Q-�uC�q0y$ه2#ߋpvh-_h2BLqVF;wDT§07f^GA`Y'ckW|W J+,jhGtE'/]<xJC m vƋ oNژƼ$8}3>cD=ZQJw^QW7-,X9LٶUuk",w.zt$1dfd<%;3Z%UHZ{4I ƩibRQJr&�V0+u i iUU&cչjdʚH&#&.K &y"E(%v-fAVixAU H3״Hx15:e$}1QF9QpMFPT|<H`/7|.JdaQz/ l|F `oڊl@q\VhWx˥-|ڄK pD. e9cn@GޅǦ3M^"C#qfU'Εu5:5Z*%a&إ4:0&Q O 0 >+FGih:lIUCƱ`NG='K^`^Rmy@;�79hǍtL1PŤT CgqC#?<VI|HbX?\=܏G~;TJrxaC?z"kb۳b=/TʱeQ|G /6%P)ݕ"`k^;ПRSL!}wbJa=&�Z[=GQtnҍbɰ 2 ޘ_0^Dؐ KU~p7-xJy`� s2EـG*R QYB#xE|9�pPEڦ@e0)7�6Կ<eV[aͅ d Qz7E'}.꨹g6 |Dʝ,bNQc6v%J=Xl-{Y(IɤG#' J/s}-CUpesѭG~;3<CPS45_2hb PBv&z_hh*,u ek/?H8YWAHTvJIaU??lkH"Yu81Qx{׺TXI;  .<5jfԉX,v,d1lO롊E~4aHjnɽ$WD0!2 Ɵ ]njmK}P ~=^a% 36r�=X.#?p8\rcOHčz%>@qGc%Ag ;XpBj/x4T0/@20#e1 .# #RP нFuht' ~}XzYQWYJgDi+Q㑞S/tXZ@}_ŧW(L=I)X D'TEڡ8zg=zQ:.7BoZ.P~ Q)n|XhkOBxi ,EgTfw^mWG~oB{@&^ qTwVN!'}6ft4žzr+e1Yn`m}8']$E>@72Ei+S+c,YA;%: {<S0^IPX-"Z7ᐧـ8%Ӗ"#9F畞,Zє]QkɻqI + dy PO1ɲ#a啪Ru >ULtѸBTV ,@2l?U9�r̹`=VhF@O,tJ WJ\ĆvAIsƉ r q.RԜPCh�<` 21P˶1~]ldFtȇȿ@lv K<hA?v"Б!n=~#YaS~mWQ$/~ Džp?T0QS'DğX.1K}]PB+4`ޛ@h76k,^F,bȟ8<d)E1 &MW8�m|k�=!4ƪiKr%`mhSG3̒M*~~M̼}7J݉90h:8D=풀jJ/̣m7hnpAbOxTx@zEd_1U,?6AY) .8JT|ƴjyψ7C[ny*CQD.EuVn+|ϱAX2s(3'T2PwnKiU) $ʫ3PiLR'GF!؏±2(JWG: Ʊ"0M 9,|r1 ;\�ƶ0>'Hmä3i9,=rFa zwXMkueҟƷ+'`EY$?=`ڲ*U$>ԋ~BcCxC| MۗeNŠ NjQW *lͯm .;q0Sb͆5^}NQӏ xdqcAЋJ-d~5pMl/yZ*+(78"d7<`$w'_ݏd�.}�HbBnR2pMآp}DLNn=t+Œ<'Xy<l{t̾¯z!wl+((6(Ň$sh+f{}*�>Iaф! '9/3Kte j08Τ ?আ F|CrJ8t]0*^h뉪9jn/ w+R\0v&B]Falxr{οIJ+qSeJcvUaUZN4bt*M#bZFD9ĐIN/_0ޣ%w(+>ąXn!B]ua^^Z1R4̡)N*;bQ[O…V1c%u{AG۔od_)m}81Os$Vfـ#X[A|A-Qn@̼>:7h=5pa* Σ%g;;}y9UU&lm ,qjۋߞ\ĽĉjXгUА`BCCtVVL(> 3bdON|pâ %u3z&Y+4 Pd?#ZEp|,hMc`cNQεhL q;YG'3&}P<s{ڻ\>. Ohv$}z *^D"664|m ´׃5å$|R-IxLcNo WF8{  T;$z&]%z"eZ1]y% RP.(w24ztl`P> o%PcnZ+c q!՘M<~s5Yr2A}a]l»BB\@, YV@U7n I�FY �pl`Q;"Nz ǎ~ebt0x]"nQOSwXFrfuyG,z$P\#K �q}J"VT_r;X=DOCӊ8OA�@ֵ.kIoOЍ׷ <QJŅC9Ehs&|fc'}QAfo~&jdj}dx8pT& ;WoS|zQnF� {LZ5|(( XvP4  jX0_6pqrC5:%y?DONF(:ӂYG0ʩ}$Ec0[ &%�':.1TMh_an!c<BvەS4ܷLgPCD_$+ =!G@3!*P&*CQ~+_<z]@yC;l7v h'8:X}ZwN|>1LDcn7O~q$v /s2uE Zax{Nf2 0g.: �wMl@`Gó)F5yT;9F̔"_錐?dzArXeDG"BguRLo<7pPsl/rՊꠠ45rG`]r#Bˈr$6OƬ+Wy8ᚊ`:VĊl炮`%!f~k"ԿK "@EAVMlxN{ #NVH^Łpآ}�'`WyV>Rٲ=}dDٷI'(c?F4˯4%|H�+MpqIۉ�psgF+x1aBDžљw@&4pw\ra!gn-7 2ѹ\x]?Ը^N 3�B{qsyOrS|Qr ]c/ ʘ]K~I 4Cy1LXPkJ0{[o>a18}8_n̅s]]Q<Mz;Kp83RAekzk4nPeCh S ,N&C)Bxt?ˁVp_̃z[ ,m ]`\E^M:c{Oj*^ 62[:+T5XWd)l1iD>Z ҅lcͿ´GU@c 9oaP }gaW weŌ\+^ pv{`r=Oד7roށHoO&TUUWytpx;AN籀LC6 6'yxŌ{zmr\^LG1�uĵE+ wy2"{$Nv)IW0[p^ho �KyvA tӮdMFCK3\ uj p+ a~0nrEx*]shyr{a{B( 쉬an!쒲z\# XK7l[c40r IYĭ,; ЫpuO 4YXT%!Ht, 7 1H{࠾;$/1n̄vc|^+Rb&.X,x!,VJrؘ +ACZSo8M lھ R__ PF!ihjxd?QgOTľi̖(,aC % 2_878yʘ2ޜ|_98h;>1AයHD v# ohD,(e&">& Z/w܂dW* $YcGuG{ ?C1T.}ӔvqG$-$WwJ$`D�(8oo�{Ȩvd[5J dhDwc>r:ᲸAG׿z}+fMvHGDBqRC00X-p*So:"6Mr3@jDccd&`ErWDJ]b@{`Ufꈙ3A&gt P GfA@X A>9M6οw&"@p*W Z}y ̟?PwoMP ll8WTߒCůG YCϲ ?/fb04ĞldEbc;;O4[;o\$V8dڊu`q%zP\ƱaG!B6iz|5&ojXei)D23%#1ݲ$ P X|d8rbsn0)Q檼Kn^UѠx̭Fm̔1"y0$9` 7dkF''e\?V ҃Sׂq3mE9AOBLSqHZq d(9``|wT7X̣_'b`:II%>w:G+H3)@~my^QڬKԍv'vc &>Gj/:БZJ 7n1>B ]>W2Vgqҽ<q4sfݡ %%2:(^]sDKƶY}B );U"EM0$e�e+iW ̸\<)unlA91uYQygrt !7lD i#dqGDZ\s Յ4uǽ:4?WӓZ֚97K~ !|OJӉGN?6`΄4ZP-0O�\}V  H8(oPz=zUMZ\Zv C:Ad]f47 <[F_Ÿd&bP64߹T" B⽶@A@>j|o仲{_oi>'׍X?/PBDUEw4R;]�Yjm9MZ"9ؠ%AwY;6V˅7$7PngUK4[t_CLQ[䎅`~U~"^ZnT|s@ iP /FR*q75tW«͒!GI"5g{9 sh{3^5-诛2  �%+ .^PM}EDIgn tIbB}UggV`G_Z�dmE9%c,A�pD?uБW�@ g 8Am9Cu[cM *aSgjORH7GB(@%uFS_%fN;3gnEGb)?_l8;\ o'R989T4t˜}$ gل́!_=QVs[yuLNCh\jtBخ6/Ɯ.X4VgL ׅ+P/Fx?')#IRw!nh(+ObtWY v�Z|[L,dqS>#4fȰG?@xFp}~J; lC<l7f: X ](@}aAA B=k.DP(fd~ZR� 1G#y+#ו<.i otS9_7#u+_G_"a%@wR$ «߾AgH}*HyV}$Qq (;'+d 5!d&SoUX#Ұ2$0mi^P${,;&~mkF1|O7ҪR�&p$+U#7bߝ8|]Дhw" +}4i:%x'+&~`"I4|CRE]׍"x<JNK X և JNj.ѯ$^A}¹8!js>;G\@*MeQr48 d</Fj:ZK;;Kԗ$ZUZH(G SbJYV4gfagy UݍtD86��v.}tA/!Xy@TMǛH',ZCEŊB:pzA/cFXose 8{ 7 R*5j #�0@戮~'@To΍JnOcq =6#WWz{nAhE w j[Al+E CBșë%;>V5 \>l`QӴDOʶEY$? f[CE#pV.sf!DC&@`eFLCčx)Jb87°g@ G,#&ڋĒ^Ά, 7$b%4zweɼg®3MAveN/RvDHF>e1.F;}"s { M3ieIڂ_M�G}q k ˯aCp;Kyoä,A'*Q U+%OR]kH[~z݈O; )Gh# +�i\bN1m lʴ @c<I>1,[Lfhю$'7ӏ U``Wn|b d ihT<tq>B)}-&@ΔdU*"A6|Wt (a7Vb.Sߠ}ӯö] z-M� h,ʫyAXB;8--ܭ5l9SKc<#Z#(du:fɮ#c6DRŴcdxy9FǬqڌ4Ƈs :hN7M+e7D0"Б@.D9#]DIt4ݝX lj^wT_`cM{&M &NۃP!eǾ+\^?ri#? g|DVo Ý.ý[R j 'IA;<jڪZ!�JrY%"!Ղ;y:ICB~7Q0vLk®K,'Y72+/jwzZ'.Eе&G !^[[ܼTCUO -8e/<]@OH-D57o ٖ?d\6/( ^(/ĥ{ym( nc_p/d<.G`i%| STo7"6,t Q/b47/|xvRMqɋf[\ p] |8 + Ѿrgb#J%ˍc'v3$TRv5Cڧ?e=%HzEpL%�mvH 7 ˎ2x ; BHJżHָw-w{~K;ဣ󞨐 ֆ,H oR0ckhujy{FG(^Ac'KyQBA )Spl";*c;mG +^a9=$=^n.f}&ePtpC2dK|x)i܁|D=E,$ 9<w)|^G_/™k8d]7\0cVUf@ZP.6m@ ,|H/b{!I^_ijiE@'rNc1~GB_:ܰLлwL ZD$ W@w ISb!Ah^ 9 C d~\�FO/Nd|2#<.=Է8qXD`%NZ[G 0t9HKY"=GK7$:pdK2~Zڇ vPU{D1F*c249}%noWyqj( yX1CЂwrRB N9 dԥhcfR7![RxUS` E7H<~͈kBl%'Cˬ:n0tj{<.Xr]=)mExMO1| **@NDqs: hN]v) m˯7>b NKz8m &1 R,|h;V1 Me_;o bӢ^ FA,eϕJ%" z f1^.zWwih;{z~ArO10-7a0 ]͌x 6%ktPdrn~A�1a<}$8dTpМJ󄑋{#AG< rO9u~q!ѥ7DӲ]1|Zw1!`%zrqq.+`ۍ&؞B*W%0PSq_z >ϯWxfc3 }9))!CzIm<)r^lԈ]# �B]j�Ap{0EXQ4A uܾ$wA?ݛYCm~(_pɡ F2a^D/{/Pv�ilGJu(ѩ級-�:bOҮ +oys8{YlB(Yy!QtW#�`mR?zVgxM 4CȬX&8~ũ]\40tM#FǼ3vJ:} 眺sU"^*} ^lb=Zrs㉁DlAp]>(gN ћa5//Uѯ>=aJҨq $Gu|lbXZKaHzo#:F"*>hѮTeY]ד @arxwzh=Q^Q|R梨~saȺE!CQք~Jϩ+Poe0ݞ/>d{DS[ B%Ui]m²$p)% Rt D+&cJ|qCTW ʃ~(Bl �x|vT2Z+q1J^csb?0T!QJ7ˌiW(rBߥF vďF097}12X GΚ u#LP!"e<"t>0c@؏#Yj1BZ{$<o$uȉūtLp!C~j̒CI}mb xwo:oj{Makx]C2t^Nh!a)IDăws۶&T> ]?$ S8\!MId�Y4B@j[\qG zX-rjNFPH:P|HjEBD7Bc+vwL " >/.YVCMث:2Fd>?.[Bs}GG<)-X�sRu6Q&) Kr ^vmJU[$HK4?\!kP;o![p .a/B.BB{;Ow,¾M #`dфFF/Kt .>Ao噗fnA܄DN!˘x.AS¥g:RP�;JD>(s_ 2xp/cfp lJDrA�W`y'wnOB_6:aPR(:.8%胉6.l]-Ɵ<vor8$) *W%.1`D0y,QxT^u2 ~Iy5놻TѱljB$oj䳨5_ ,A\?ܓ[w4�Ud}g[6lݙF<z ^ݫC>طr2a[Rf*ND{S S+2(l7c\GD;b/%_MMaz!dB8IegPj}?[_;YkEE1%$8^N̽rϵE"fG]c] 1D@qƒhQ2]2d<*Pfȳq>cB ; *2tJDC]Q$ٕǬ(�vA oD[QA9JY%xC^oAqjO #? ? Q3)M Yyd0}1_7H1"lP %Ƨ*`UuOLAΏ3]>:Q|Qg}�eDνDsa4A<2qn�u?g$ҾV\8TbzoI-xx#نn&k+M+9^_F?n Ʉ:A?32O{&. W&ťԋ!c@հcڶnd%bn^Ll}=2Bl3HD{OS)}\:5/-C{ա ݙnJZ3_#?.*2T_Vi iV#cmυGM7^IQH Ӧu+,ÄFsgpIbz"F2LAƆ�t͸Α΂eCIK,Q!| $ʏ :l.Vi9SG#K�I d o_r%!S 'EТ6'\b ͆ݢvPHu̼ P|;pg=^CP_Ǎ�S5i^eXfmI57mQ9;Hpkʹ9{t'(-/]elOs3q13(yš nb?x"%z!5%]Ύ@p7K#@:C8D9z+J ֽvPV{M8NE3F 2>OFBUyc>vlS11bۑ8CK" ~q ea|:ZJv!%>Geo!5Zv@.WtcΥKoGp�B҃>5aU) pp"hP"*]gRočLy<PGAxC$B KR5Ugt2TpO6Bމi.ۑɦP#1ccRፔ"[Q%%kO> @cj><<AsC[5DG/M[UŶ_$E.m} Me匿:n앍|O ܯtڟ>;qklBqnC툰+(-Qaʊ93rK̹.14 |-[ɬqs�YdJ&L}|Ћ\"1&c8NnP D3 7cW:"bh1%'#>|a$f(m#�'ϛ] >nb(3 =_iJkW<NU+<̗|GMaPȣ�<V�/aM/T!BB0Vt9G$X#N%\$]ܤb8?_ y| tD!]A [3, `#vt"30Kŏ{W'00:g`]/09mxX yz;{֮bE9qϫm5[ܱ3J0uF1 x =f?D8 򜋲88pŒuW)%&ýw׆1m%55qL{eJ?T#AG Mc4,& /}a ևxBǤcՌ°H>�d9Z:JAFgHYؙ,*J�*(r'4ĠSwL۸ G!aFX}E oI"EvV,S^G6H{zc-v Z›NW]`&ղO\r^!ФMRaɁ G� D}&3 J\A'B}NxFT UZ385g0k9Ք.R u'O"kh%q-hԯČ_=2Hteç?<o{R^U({@(^BNo>tH.kWT` aev_Ř}i09B͂Hpc^+֧Jfhp00M+CSV 5 [Xri=55eK]Sչ;|Y(A dKWFLTGup#[{O iCG<Cʷ8¿( RyxH,o+R;bi !DĜ"SD%.*UDm]d,!e{ $  X &2\ÃD#i; CxLfՓ?VPNlBD!MLJ>(ʝKG >rk"}o ?>_Y 8dxK/C .`нabQ\~A3Cۂ WAP/L(_;AeAZѮkO?̎J* 9wCO7JӌW�;&b+}"|ö4^{[5-ԉ=aŒ[n8S!wh Y_mG-3}G;Ǒ\^Q|[u;^o1~?<Tގ$)bz "3*1Uѭn-&,eY,Fh1L�.VaAmFdb[ofﯛ^Ov;ڤh* %V~ @95K.T? .=+?GKp !aȏkaأU*N2^<BnUV1fЅr4Luʦ1ʙ b[lI(=8ui9-qm"r)Z(Vi߽p7|/e~/"�1~HdjsF@j;R1zBEbC]r[!NX43/66w {יfUmwY}kZT:bN )/3wgcW/%+H&AЯ0%+~LX̸y(Z23!fvWbߌN Z[IMgMH` G{l- \zC+\z:'9\5?, r`{F�K!<ݾ-_IF &xB ,nZN+-[EȥލCt.K"ff|@mNդ8`g]Tսz/-K:ucþElT.�D$̲.0PȈu[˳uNtWA%W"0,p0!Dc6sL@X֣<\}^+Sy@ &NaT*{QWipЄY#BԘpnI!~"1H'w0NY_LI]s�,Ǻ&䩮$]}K{b%ÊIQT31iAB5piu $Vo(Pueٰ&1o~婸5Pշ_�Yf;Z)OC 0B|K6?,ژu?L'R# u/+qYY<! B#y.;|-gkO)XK_7cP-2*g3qG-xfՍu"7N (nRF~_YU?XWF^+#]z-`W x~76]KLDNQM"[ 6{)-mCj@11ؐ !H�)|W- 9借 |)[~ĉPQSI \"E_/Yv�mUX/ I^�Bn,R 'uFb V#Ck'BڠksJ&-f"3( Ӟ44rKzk My:c5=wяdcָ+I9 䦅?Ǖt NcG`{s |i=~_=~G<ܸR]wM*U J9_%c eG[Eڠ<R Bǎov ,Xhn#A,euyIBKj{`^_»- HK Xy"Dl.?Is@..0>|BnwWznqջ+7Fm /^4`xY]v?Pן?_?Oݿ??Oc(LYa3}"tj{fR ͛m/iK"ta~Ψҫ<`L.6S)Ԟԅ *_B)ǿǘ[agP]@K+]p oJvДBT$?"{\dk.ڿB|tgd4?!j^u~~% Y(@ _ebc+pեUF,ײ%<^2!?]uxk6Xc"_gϟU&~* ֖<7E(ZKm=ֿL棂ڗ*L/*xq˲T^ͭ3\Cv+DugN�Wih.LB7P N^00l?4X{j4rBFR];@F;*f99,dq-MiCV~�N<ta`v`R?qC AQg9c̡K_?QYFK>b(:/ ;RJ^KPuİBz&ãbU|B(:HCG\l>&�fѸM؇b?ۻ0wC ϖ?`!#L~]ǁ48e@p|>[EkǵW\pޱc}B)\WޖlT3hme}b+\ XqWCFĬ31`~?/z,(𻗒'0$[Ld<Dws]=:◠|U&s4Ş'#EM.'Ev9iCSIsc?QNqzvo^QE?./%viԙ^!MM{ѻR{4 M1)~|xp0}ld]zsM*, IհYE̖Rt1yT|%_5hoX] VmKlU~i[;9ۆSZ2ڦ&Z-X[q޾"dzxJz4G3~PSVYk^t AѐgiDZkkW>Z�~LK먼1d*/%?t-�} >VY2~�=6oV4`Y=6ư#QO%dCwCYym$=}(?%@Jh�+-*W5Qct{d3gcz_44Cr?W ۃ\6cҢxz| ,�}3Ur#c({lwABchP'6?kOxcxxxr%ۭ>:iA1c$Ɠ9^0_5Ȁ/XX.f 7hBmL/;wPj~#\T ̄*uRt^?&<dR}Wtԇ{,̆Gk!{ &t0MI[y}*ܝ 3WLλZYg Dhqj_Z zΐ?5x^ҎCTnm٫Vh܁&*WqL] q6CR{Wp|^\ ^&$G!*{HGĢF[ˣk�L61ndϿ{Yw~5//_m@B6�wvvu/@bd 13n  W!nAEZyla,!x{Gpt Qz#6QɼՋ$C(3"CS�:'S9Vq}-6wT;i,* ;.Jz!]L 6%kI2-ch*d/pbO^IF^e\,(qw{㈣m;8R@.Οv :>K{c|*ï.  dҊ#{9~S~=sx#I> bD&@WH&�F^dبN#iDWd~[G- v QaIz'KѼb;ꊊ -_V]E0՗xe]Ö@Xq'%X?H_*XUe#D>cQKIRe"5mF[KA P|?/7B(i*Vûm"ވFo}VDʝ.מ ZVCY삤cskyY ),&RjQcC} NjxܭۮսC*/HMyq kGZ" *YK PfLyGȢ0}"-Lnc2y2_Ɇv\h|K0 |b3xW"1S#<,#IQ='xL�.pyqH[BKXG %}TaY2_^:3ja?41 2io,9j!N]1>ʧ}1GOFIs-#YbI&k0Fb'?yknV?,ڮN#sB*;xr/@$1%mK�7Ⴢ2Z�dz ȱAКP GgAΉQYh9Fgl1t5 2̿>3\4 F>]yQ4:"Ez鳘aTT}-0˥~'D.S;;ڟj4glJYa5ؒ36ܜj|7u{'X").n~ Bĺ}< ׉"7]>qWM8x!a4 \Ώ-#iYl#"Q#(XHd uô&x[c~]$B8+G+g蜇ï "p6pD"t {Lټ#j|t=*lXTLJ\7QXe1og�Mcm^s:$C 2_o* 5Ps5ةVj_fFtU⧸;#Rmo xΞw Xɴ?Nujqz#;!6bFg;[:%B|)r_g W35.fi[Lʋ.C?y4S}tBwэ>90E8wLz)L`gF1n t0ez!^xuA? +Rv9b?7 )skB#jK-!e0DS?ceoYU8=7Z\`zea!mR, >&P:G[VV=L/  "h)ީVAb@<U 7!aG/=IR TGof I0B@H]rjUFx;FN z[X "y/h=:)rجZ.&$6T\(] P7pzM^ hj3E>%'#-O ;N,_i| U ,% tO) 7κ1*@ЍR}04a ֑qTJ[@;E{"sA!g5[*XƢ`#7`B_wOr=~ <0Eҕi'Z3axX_ -'/_gd%h91BqԷXz 4D)2{z$nͿ-u* u~6(jxGhz4z?1x֨d0z֑.致f|~}鹏Fcͤ/V&U;o꫑�%+t~H J JYQ-n 2$aȤ]c*F.<d8om<l C*N>~ �YR\u{ N$O3<nv&?k=R<k%F3!BU$疫F E۔ km30`s┰Hލ]y`Zo`B) ?9nVfQpC[2E^|ێWrj(be~!1DvۛƐ`Ec|/2:9yL{tdK^Mߴq"`U6 E^XZͨ|w�BAE}z }PzR"Xٶe+W75|'~vmI'G6k'SӣY[ZN2aƞ"?D83Txz8.x23aM3KeG9+SVxT}  1't9f)˭PG#n_ tc =++ l@kJ`^(B*lHU>Jz'VG <ZlDɵR?08~@xlKw(d0l^k#q({O4,XG}1όƚ2@9pa; u=5@14TY(m>_VZiΠphvvCj!^m pIJ6dB_3 N5c?[eZB7#Kq}HAX('d6jȞ(_yDk/21^y#FDxBKj{_iV.\&V?Ӥl#je^d ]H~qq)ks3  �PG[ǫM%"OI~QW>P<gUj%+xW 9yy߹W bQg6 k�$j W'<OB_a|-!]WgHk [C-~_0.`>,&<p+#eѳ 2ϩ &]T? +X5x:*4 xZ `sʄ5m`DQ A !iނoy }F5יPАx[YYYc!84?])zr=;#sk#P"|іneNkb bY;YOB܎Bz z;d-٣,B8acϔe+5 \SL8Py7oz͝z"'m!ּʂ.F8A3 ;CB)ȹߧD)--fpaR DͮIDκs ;th:U⑥ ˏVya䶢�`t+;H]@iL\B #^3$$S7iTo(roq6AAX0/Y_j3)<rUw5pKPBі zg1z3/ˉ}/F~ D m^#pjjԀOe.j "ƀ=E?.E" !j>9ݹ{+x ݠXD $bokAy{[ML4/\ч��'0+^wVH4OTΓ?7=&:)$>( ׽�P6/8@zNqNqVGlC~?c ާVJy_Dƛ<qn;TFZUxPV^$mm=~TLRixeߟ ԩ ^[W�(RUSAz[%^?2MExtkgyi/2Y  ڌ.<AYGS:0N6" 5=-Kng|V@p/csV4#t J!o 7Hd7tw7) wȢlj˿_ܼuzII�6%*d?w)bX3Vn1J-=  oJ+ǡP}lZs#IKLoYOG<DQ[Q.3UΞM5\z}x:' sY܏\$,*wF%*4HqgrWKbV=Ԩkco15dŤٕGCB5HIU{#.;A zmaq] G1OIůF4E<EBI?S߻ѷL>opv ҳ1*'qLtcWj|I=t΀E(ٗ*ݺJu ?&LGIe3+dvʊj|p`8.)MPWC$ E+6VT<,kwc3Xcj86OhLÀ2C".}1//c/녪} +*Zp83p,ONb_*7GkѝjR"苢iZfaDN X|X?I0@MTL�"gn DQ|H!pBif}Wy4zbPCD gR"kS(v0\,i|RpNXnzEЅ0�8>|@C,̾JWj̃x2$Ivd,C*λ:P+JDTb^n�poڻO_Ѥ焛�' '!!^ rQ=·E`/pzzc A)i,ǗVDl�}PCF41 N*e`s9”oiIYpSg-{YoN9||X0@:+;+ $.'H$\U+FNGb(6_P iQLZh @F"3͌2^雊TlrUE}'j'[1)):5Ŷ. :"FEE}bp8Vq6�jBƕEG'gPA0*)? ¤Bh>Ca/A(L؜$zO;$}{<ܠ+5t]^םг 2J̖–}n/Xl.q%| [THˇrB�U;c@< kR1a81& tSܪz8x=ȼѵ;^Ux֘uU3qE ˆ]&D{2dl %ue},,W$ي8~TY#lp-bFDѰ-E[x$Bt}3oB5/UVlL6-W8ٛ8?Zřbj^"-+WE ^/?0ȹ:DtUny%*x7T7B$a )L!w3Mg aBCB(6?Qfy; 5E-%Tw5Uyh%0 wuAR)׻ x[P|)0J[*a}c2|t]Q*WUk-VxBm$[P[tѮ֠a_G.gozOUؿ銥p΂4J0j ;ݻ^m?lʹBhRqEߛPJIJNk{W:w\E.Z4S{%% #49 B:PWŖa5ړW lò26AJz?YmI܅~pEZC(W9_L|SpczIeljٗ@Lq&ܿM:9n|2gW1NPQY}deWK}]Iae#wUr>7ui)4"̤zBĻ]hq[4pw2DIsq g|"Mc&v`͗^<IHF7acXK)&;l K`r1 ęHc(JR`]ז`#(sF.+g;~N&N:n?#+j6pϘ̼=4Cߑ?'ߗ[0{ Fs`BO+kK4:26̓qOqF�,z,Qjh=] l#i"R7(%QpfJ)*C|V$:׈b Ĭ97G"Y×�/_pWd&Yc@hkT* ZXӦ?}c\48"KwZ=sȣ+ZW&+X3AfT,F!'gbH{A|&5L%xYlڃBt&>ÝSpMGX-QV;Κ /%t1`/ahw|Rv Qcr3E3Kd#f5yeu : {%epx?5qΟ+t`hE vBÁr<t/k%^[RHO@(C yFָO6p C8pբ3"ԑ9snu-12aew4$g"{7k3;42:ޟul9Bsv2O{Vp_wp!V6]E+("<{]/ގA5QBpGddaR{8�Zՙn-RYQq#3c(:'8}`�z}NW)ړC$EЮP3 AyHOTu1t{}a ezN)BwOhDv9̙) Q6 9$3fb)[�Dwr&#; l� WĖO-KCw`˲֏:͌IQFSlQ(⼚e @?}g;xdοTg'úƜC%G Ie#c܈*xlgPKߑԑ QQi\JE$",P! {|4g+9q#ޔ fܶ Ԁj F}ϦrdE)|%n�*:E5J_L>] YHiIAG"/nNvLx)bZv& )Р1m -c:B1Gotp_%΃{d]U{!!p[y$jq@l^1R rAk)l_㞱:Д {10沽mC%F T�q'ތ@ǜ SE.-Z-e= bm!f%_uyܚFB}+mxf\XwX7*I1H�ο^-/ 3Hp% pPza'7uc-3tQIsij;c\c'D^4brq X(oPPq�qx`8 >+_EI8RPR̉qE% =3|D ڰ-WG: R 3rKS#X k+?%'D^}0C2fU: e_-9j,GbXaΎm,"s <^.6L:⢿ҍoUQc pR<BwBCĬ߆y(7r0ZZn04|ZM*Rî/gJ@}`:L=gk!eSrQ-lFǪ6N/`M;1$lPᔢ9;;76B:YBSOu: OCss__Jw Oh放( K̋KWM:m; jHeppm{hXeI\VT6w~h0D (=E%@u\3H0ؿ̵:fI {e )bL 3']LKw4wrQ#L¨k{q56qE ;>/)5~@FzPӕ7Q< c:Pa~1Jd#}[I+ym}RnL6jD#R>ٔQ/<dj:{h`y᳷!;EI~x\`~ٟf`"_2^C0 FED{WH%�_*r#S W �WqYl_H8>R]ūʸ2{nb.;V6lA`4"chM�U^>.@;Z/4$RW kQmūKSaj&zD/%/{D4bj14r#,q_r6�ƐD`-Y 8g6=Ɖ /^Or* !jQnMt'[U_Qpg9bu4,@30$ӰvMު)#Һcg渖-mrT@*'@A@Y P/;Y(PcIeD{_clyg$Gb}0Jr<wʔJZЋA+{>ˬJ&N1;r~ 0 .G뀑 %!T!# <t൰~G ~]ЬjFf/Dt9ĭ%[ 2ׯ Dj>LNtlǁ@呙fx=5tgt*Va;J(b,BJtZ!(yC=<p2Im\p;VfL_,wrDoN('#Kg}Yc㢡3!(*L}>H ޢx)8c%,cU) 2E`K&yՊ~UWQJ9` A;B6 }yE VBaMFur8.ÎnR$sK }H]Kem$O {nC&k a~Pb &(tx" 1Z 4ёu'W3 `ƚu x�BDkBJ^!НWt??* ~S,?sPh 3C4 oqzksTpԄ'`1y^�z;f -:a qn A)[]3sOKLz+O1Z*Gk?=,.yS %(\XF/ ! hs'Ә?Q#`pgVQ"!Gq$^"ݛy)V(9p(n4%e([zZؗ6$4EԘD;YE:"J%kP}+LKIG S$N#a`Qiv@<9 PuPAHg8"]=1g18~( XiQϊPAZ 9@Q}8 ƒiu\C}e ˾|wMn&񸟩CX~Db}W;<o,�.3 n5;8p&gW8zVdnF/2�QϹ߹JOXSL<Q3O&|h#dq8KJgfTƪ \slL Î`?nцyNrkhjЉˑؘ![bІC [(h%R)~$\uf D YGWXx]J E҂)H`r=O\|+qL.#5o>9PA/ (&cL"M|R<́Bʌ2hC,Ậ$0 նQĦ/1K!3Ka6ݝ2Ȳ}.Z}Tz@+,ށVpvpE�tG٣7*D5{\5k+nq_OϿ&b'5OЯv*H8bpӴ'w#ELz+8bB=렟 (4Ƹ$^!{Fd$f\NTj# (_^�hT5DlI{#RVR%bj @l5!A\öBI8'OqPj ^v8)!{VݿJ{f Ajscn֝g+=zZP/DXKAA.RbX\C`ꡭw8ɴG ;r�/$DDգa~�n~t$^[C8LynZ(*ӽ]4g۠)?3vk1 !KЦD\[uN| sܓ FsqxZ4{4+,&V^d>ZP.%<G G;JB9,(p8b#| )"p ʽ#ltHr8JhPg9J23E<%(좯e*}Ey 380| 5 NmsxT �TEπ'dSl 2|�i4 T�,jXW#$c[�VNaEFh4 :穀d�u =f!VZ 3! PVz+O5dPut~"|^\] IJJ>K ume>(24 qe˔a48gra? !(U@z^IcN3*=�ACіHc"ލ 9 (\W'1`^hu d&f./\yc�Y㿀LM'޸ Bǿ mH)0 >]@")dk1:HE-Tژ[>kD_0nFCظ>K37^N,l;˟ <vZ{8[y.@@0Kf#2aŜIŠ1'3ϵCb|.d^s($0gQnB~WUp5 j 3tQ5Tz t$`Ó&׮!~ or"E2Mʵ0c6Kf0dD _3Q5/ %%uvRg9)_AE՜nDz[!n?{`RB'Kx &*fp*l6Ra_)aR,H#8rl`@Hyy` n@hl'B\uxgJ9QvA/N]pjX_K:@G2~{))kU4AD.2beqyt cٽfJJfST)3(](^晄1E[ sP[w]�0ITqfBU$+#X6v.*~sZACt:-Ҋncx"xWHƻ c|MZPۊ~WdjjA]. 'a;{AMb pSP[O:P,tˉ#PCvsɍԡ B(UnƉHr`7 ӗW<Xڔey.OOGsC-|'˕P+"BQ.M|׌40&q(cˌF_t*]=`|3:󸫐|@B 6dls'C k@6#`V9\ɘciZ!&.I]0FTqcHlK[iW Eqш8lr޽0{Ke . I30G2z!E>ߎһ_xU .Ȋ�rc�5[s{|Qp${d�jT}}^$ޢYQ''VR3s1%~ҙx;ὡ+5Ei.rH2[;Kq˿(KG4]i| MkI Z]RE P)=^2vk9LJ({"tV;!B"R|]]&׌`#P6y )֘ ֲՒ|y`RTζ|<6۩j+0@DNR]mtuIcPZv(8Ozjep7|6^#V0;);+K:w,9uDז}%87AYAKy3gvStߓTfuSaX(iH,vt~R\!ZvUUPpvG- _*pdX*(8=ac$ Rt;tBL--\nb 8�mW$; %C zC!~ oPX+Ki\t5T"+Dw#g{S\DO/B0g� P4CyLf~9rIvdI jI聍Cnd^s Q Fb_=;Ed_U1<HRx=1JMHs1C�ՀNX^RS'aSL, (;}BH5Ex;�zQ1=�Z&]/.3HIa&x^6f$}U䄕 +`r<bnǭMrQ]9+bNSUP &bRڂM2Xj�ip( 樓>X3DFb)Śj_R�@w&ͯ}T`bt'’Gѧ8;_=Z_?SADJ"q d< N>E&F (Mw}9tP1aG #g9%I/F1.o*<&>&䌕>Kqx<6,LBS \- >B5Ă]*AZE'H]pio0xgVYchhlHC#�J!�dWAi(2`&ͪ@܏ o*T n]L+TA#i[>'hSh�uupp=#> `W¿9puҦ^o'v>uz%/ Ew ɶԇN}3%| /:#sKN%d'rjؿ8( DBfwSvC@W /LjNθ' >.TѦir_a !1xCH } LRTBN49!::!cRJ,_scJc8AC K7 q`7FR;53^ε+E)<7V`>}G~2+ee!*C2@ݱx#u) 2ğba]Qj^1C^Pݳ$@{mшWl}XQk8N\(Gcxu$Ϝd..vE#v$Xt6D`Kzqv=TV(<G!<)kj'MwKB ۈ_`0;|< b3_W=+cIGm$ >/@Fj?/|@#[ 8d#A6B0)"!@ٜpca\2zO,4SxO>mjBGFҊ{bXO@Y\ bR1hݣB0Ж={ob\ʗGDj[^ =z0|\;W ?+87/i4$o=@.AiTHpyW@,C :#<^lZ2eCE7t"rY/("05!8GQs|>*yI<3 Ρ- AgH][K3UFV %C�Pm TrvOnv J)cjޛH<L*M|(ۤx#FT2fƊ7tz;6͏u}H ܘ.)0]Oƍ`&K0Z bo+cZJ"Xc5SIt|dž~Ds֊CP/b`M&.62u$m*XC&2D Ǹzc5b&ֺ}CБ3ΧZMQ\T63 ; ~ $WeX5M"9J(Ā"\YMdy9Rj|N'H"E[PcP4T  ~J;Qr 7 HQ,/<9 A ;GG#/RO2O j*+ oas)aw�vu0׹_Bj`=ZL93|L�J($0w$Uo; h`P hh x9�U":H^QR,Y 'ܬmt4XeC6m{ Ww6k8yEsE" 0N -fKɑB]Q@(9 Ypu,b VFtW1rhA~4Fgd^~Ҙ9.: R1J,'']KD2c˥Ov@rge%!C1K?EFR_"ByE'<EKMS& f!]DP>V~5P s<C�$:w#f;M 쭀L-/_8*UbQh8W 3DlCp2"t b/W2CnrܾƷ=QOsv^ ma\I塯zyl; COHQdUDJPa2BFd�I\% eXT'uy•O R*Y ;ې̂*ޛNaAֻt奇GEKU>=MRz 8SVt$:{$JTL& "H^}lk�(`zd->itE>`+Z2|))P"f&\#X1r3!'PѴ =؋9Iƨ^luJj U hc>;Xl<X;MWSKkc�z->l/#pOV3LّD+tšᑍUkQ.?.!̮vK;X1nabơ!h5 k8΄Q_BX)qF'qS`آ5#$2@*nuE|.O<USeƈ8M*J DHD&*ڭS5rj_&ϮSK!˜%#DW/8L|GFޑ] | :ItTyoS�FL2GdC3. -{Dv+>%k7 ] )8**h"K<oid{/˘!r"趰%bpw S';#O Ap8^2MIZmLSQ_€rts 46HĊ01{~Ʒ FN1HbIpEFAg24 zvU:df@X"ܥ@பMoQpl˭EET@YJh$a= 70m,)�6J Yy62{x`&.ҨÔ'5?k;5.~Pkʘ&s0 e{=/T+*pMMG$"l8d &g1Bmn=iA0)!&8=> |"SB ʟbE T)W3D3"@m5D1ip-z@&,%J$ډ$lD)W<HjX@(nU:MUbl$⤾϶/Nzx0;baQzO<c+s(X''e}1cAZR -)^_CS p !8 wĶ >v#|3rg)X1Zjg6}W_`cw w't=a$`%q=a;:,D87Q wnս»~)h׌j8jvoG'ؕKmOʫ@1tcECrsF <] @;}2 (?>ە6K-ƟyK) TaoVxOT|'V 5QGA\�No[&ڻ=J!"? Y`0! j7e'n %#`J &pIO"p@ $s&u][z(ES5Rpݙ̃k`~oL-P31Xe@!#H='KlC÷x%45ui9p،,^zE ]r)o|HV+ѷ_X%YWF:b:e uEH$6ÍeT"a"X$U9!n xeNT./:8kp2%RvBvuU $f?�oJ߉3 &@; dwdo޻bÞR<,bQfЭĉ]BBhWOl5 Z_:Bi6xdYD&Pk\"+عA/)m �\??g3[Whc"K5 I2]g"hP2/=t 5)AuÜg}F z-NUrC@QY[5Z:XT/MP6A.QWi5Xz0'soіy$48фYt@侞d$Zd-j8{d/soJ bME|O咅 J߭D[Xe3z\Rx13 MYOlN(C^g!Ta =t婞]̴p 8x :a P$E"GH=-Ǝ4\⍣/2݂[a'_MPY5w8&'&n: R݂oV \-Vއba͏7 ?.+F<CNP&ZDLxx>S$\| x[L(Wp1g+[)\DVe,fz�HGbT?rĈ BFʲA�U#\K`!yɼXAbkA_"$ -ުL'ht'rP'R_jZ>&K#Ek vUcPY \2aY%r\ U[jLL8M:\vx-񐁘$4ED_eULqEFۖE{VWT2Ͱ%HH+OcjEfUAL3/l}+8[")hMW1Yjʕ)0DoEvlLnc&l"PM[IL} 'i}?>``o͓l{=b<bHxJ8�,{ܔ߂t.a0Bt`&l:tH=lUBDT:E(TC"Yl\~V2r&2}`+E N/\e,b@V,OD<wۋP<QЗ!@xX|Dڳ/\3畐rIQEYŷĻwb~`1aL�n ȂrFBqݓh&Phʁ=Æ/*�!?Mo5:SY9l ](PʡI ^_}X 8Sp[$[ɪdq9XFiԻLb *q`vBj_=8^Un򪆀'Cy]l9s0~8-A j(b(lp~6my0�I^[X밑HkBP5o2v6ߘӑ =Pe 醔}3A.ӪݏL`p!V̱ od"4"`w֐d$0^˙~|G.Nf#L[ C[pujԾ} ;R%TNGL�r&k!B4GvJ( sp !}R DdLCuZ\v-5�?'Rf8Cє$a}(= r4j7\~d^ܡUqUHl:ৢ3",1RBp3o?d6Hė-N1Eaէl<;`M7_i$# ;|}2'}\TvtFJvz7,t D +-) [@F<X�[LNɵڟ%9vj@rz@̠H҉y!UEIcal/`3 {(kA @EC$n9GXDb8dHT45_Yx3k57 ~3fHz ~ .IP ?;?{%u:#3=Bv76Ji5U 9L\ɠcf8!oIcFV#t6$vP,Q 4ja r`1kxȜ*&t7I׺H>W{R1o˭0B]b,p%>lO\Nl43% v ;|�v0q ] p#VATw%{Kòb! "(}V-Td? t (s>t1)FiT=TyBS;\MގťCI ސ#*&xs;#!8LI'0_ˀsyc/l0F )CVe>$<SIޤxE~u`=p\ʓ!w3;RYZU? d�PP VDiF8gC�p !݊P9$ē�5fbxa}>X_֊_RW^m!\&}>Csc够xp%nJN<Ȩ#;dKL9h$ 9 HNR>K\(aNER'$ܐȡ !۽VO˫3�0@Tt!pxodd% 8( e@VSޖ!D:Ay{*]4VG#tڣ{낭9Pu"B̜=lh iH W:f}Hd#p àZ$ V:E8R eags`H i1^OdT ogV)#@BKRqjxZcw b%(BbU4g~:y*_h@Pֶ5'1 WǺNڠ {|/Yn+Ij$&/1;ByQ1ML7)LY ?n[Q9~tJ3"C)ø+e HnND9 v{K+ZՑw.b[^"K } E 63fWz/<Fe'I$?ʲ2\Pt"]f}&lJ |WH zο DL1X̜FخKɗ6fBa x(^)v]kFKTq 1֤ikE aJ#>]SdD<p[: XZ(u"VqwiTGP:H'c ʿp%?'ؘAYjP3RVGz(nkW_ ;9!¸GemLa4#z Qoa#Ŋ-\+Bmiu пJZUs`4ob+Ka)!>2x# A'+|EL}8 ӕI/D )jhδJ^;7 O\r5z^,ұ 3|1AlU$_OVRBCby%e1 bBdoVLA fQId}@!$F'rmej5�T{]Q%J#d Wru53Rj 6j(� !p(>IfBuM@J.QbSy&'Qk7"i#CڵXV~PcX=QexVg$ԯGp�p`kU9p64izo;U/4zcs3Y>o%W(:eh㽣z%4A} H A0NM~JСhڎH&+ 1a n+6*9aA.  QI@E}J_=gq)_<6�~+>0o f%C,) iN0M2a"#/JtTB)qRcA%F!HT^11K=(hp-kF+ ƻndq�#2C#T (:%" ߜH}rʣR.a+?1yOZǍ#z�%,'P<%5r#,t oil9 nz?kPc5Xkω; 3>i+=R[+P(,-a\QNq8Cz~vb3y 0~?To޾}L+UIqS �@o2w&9_ ~@t'׮? f%!lOyQ.\Xf9y  ܥMb#LX 0aǺ/}N 8!OC.XڒPہ1A%_ KikcaYn0,8ܿ}1 ?c]�0s[T26JY=(q $38E,<[Pa31;]<@r"yPc4'F<C/~k+JeCF+z+yA٫E-O&# X@%}Mb_Xa(Cщ!-P@/3qzwSpe<MC2VpQ8D9jLztLMATχ,O HY23EYï̺B%DK;ڛ{XH>]�H+;ĵ׀]OPX4 =gPqj,�"I.# d!"2݂dI #jsmi ՝# "^Eb@7Q:S+<hum~|V4>ГTvc\, 牬#8q')ipF>~2p3U@aȃky1Tٲ+g?ĨEzo`R0{+p4=1�M_uH2~OA@=iQ<IT M#J_߈=E �y8iH]u(p0]IaڗO ΨU%̒G] %@ e@xv+Ɛ<��=66a  OY1Ai@:$XA>_nq$�#|C 'cJSv`; _ZarG7uM ,|>JTS#,Zt Iz:oZ~2"LB* H٫q yq v89] 01en*C`( !Ɩ3\BPg-"P<Q^T$vȋ8Kq5MIqEYI! V'޺'z A$c0u54x)}bQJE4$ΝVGD:ǟbȁ-QD]bWH{YaE  u(t"0?X0lcE'<#Ҷ1z.X,RT09jfJ5ܤ@&*c�7T7=B湿E a`u$hHRB@ &B϶c R6LŲ\]%} ^ߕ;(GkS\xa;1QX (RK/HNyO 2ħ>Q<~C接b BیG\^h$fn{d˥N+t~Q {o|vH |u &B RA|] -0n `G f LD@qOE1+LdD(58pO :;%_,܀JĜ"'Xo3*̽I [°D鹋3[w}0B聾[�@rt> }8 ӏ槁&gQOFy[s}*fIaI? 4#i yFz;_ n#cFe-#?hV|bN40l`gf u \Ɛb{@+L,UL`)UoV9̺yީ#'iZ`j3JM| GU$/)=Gxye)^� S*W uPkx!|?<v t.#2c.&6;.I%wyA〭J^@2(h3m<b)j"#W" 50L̪.5ycZ |{QLձ* CK9vn`2~ǖD/T_R{ WxˉY\۾li ]" EU!s+D[3t۞v}[̞!Ŋ84 (@[~K[9ɒETkTq Xr*\oBs,*"χ /?I_0\I8,]|a Twoe)(Z @*+/b-8R0SRNE!<ؕb6HpR:% vi$&AX\̥ցkU�wGxv'̈3P?`k�Pb1:P rj8[-pA#|B:Ɵ"! U(6c6G.�+DUXPeᎴ?#! *% <u˿@RpAM. {;>Thp<P *|k=~MSMm| 4`8B(ɥffKokqN$``SJL5P J^ÐcS8*$qO3#r<6 J\Myң7BHx7tW jSOF%x쨖R}׳H;D|Oq cGVIӘ :{^zHe(&=t6.WL_wK Ʉ zRhEuo3*�#/ڳJd ]f4^*ºxv'vY v~eYOO;v)M'k|O:ܲ%@J"@B!P,@tFUZ,zDJMCӄ&|5]i"edx& oIU܆8b?(__Ͽ?O?)g4;h4mI58<OSw9\»Oͦ K)vю}^;>|~ l-~�^H:h>$1|mN(dB^ 3w)S<tNf_ �z*m|w'CXX<zB믻Hfas܋02{Y!ond%{2("wjѿkW!X??ڕj[NaΙK3$Roߨ H.mJj?c5#S3 `vL 'J~YB)z/ #R^]Ahlm<,׷F E_ d~cO!lv;G@d0 >HԎ.c +oCvݰeˡӪ :XIVh? c?ߙW~'Rx?J>s=hJ1T%x�rOv Pr`}yY <Np>k?w`A%[jsHs%T `o&ex�6 ıE9ߏl.@_!H]wA2TW MSyloFD D y>hڋDB BR6D0/ӡ85_RhQ*-,ͫ4y}dE\=ٿtIG!9sK @rLaX#~lP_ +(>GP[ND:}؇/&V ^I"L7)Ĵ_)i#w2HfSVbcx^`V7W͞mԧ~fҽ l;�R)N}f/TDp%o߉"wUdA2oSF::y+_ 2@ܒ?34FJWdE4_☨+BYM~ IM:հ/*KnƇ]lpz' b#| ˀ4bۧ{\FE lxI4,J,dqTW8 a}c#ޭZPo{16-Dfl?Hm3{@|ff>kE)b]\H|&N$K;Tb+YxSCpda ƿ 0}WT غlˋ9PJg%i@Ba[yHv;-"MS&P,K^9|Vϱ60rEC%{Vn`|ԎRe`TV~Ց|h)kR3ڋUQjdVAW$_SkS^X4H*=Q]`mx'իKpJHY&u_$2/βSp҂]_ ;&XWHc}!"Y_DHJUT mi:q6JYŰ.rfOtm -Gs|Ex44Ո7?M%o[nL-q2gML_5/`!z @^+8gksjwZ `ZxǬÓuQxVW4ӡy6!gP�:ޝ6q3IgF;*(8q~44ߟ=, U8^;%$!lCwbg#͞IkTv]a$[?`}zJyaMc^_.M}*;~.(.~Ɛv6a0=$[Q;wVv;C)",YЇ6jdbP|PaڡZUxUR'tJ:h/>["#7^q'@f);, Kă##)0X�G kwx|#7ve(} 6{+[۔-m"pxID/lPosSt7YK֤`l8d@ae\ sC`,Şq·;E,]$IEe�ߗAHK;nE{Hb,Sq)RjB^}iAϥHxm^SO2\@EV�DP۟s9{;+_,yuxЯE _|pǑk'e@߿!eb.Y2ff$[.p=Hz&a3@ %N^rגv(9똗`QFC[a78+nEjc_{ ~EfԸ5vHz IW{ MpB6Ƶ)LD1% 7*Xi80w=^8H Z/1`lzI V(֪_Wnn5e} Mޏ[G关4RFϠ}g8,բca_z@2O{Q4˄[S~akK!ƽ Vo\ _zv|ʮoSΐ n)tn`ΒP|MG�^r_k+?-sZ$[�Ql>!c Ծ/ S(gw+pJ`wF <u_""E Er %MZz]<.]=w⏟Bnk!عKM_ 7[#i7<)jV&jߍg۟[MX?عQZU#tWҋ!HA]YmG8Et7<lM"+P{ݠCՆw'fg@02a$m.`W%nVГ17|CH\\i8,,0ɞύûfIAnІE-k&q.޻XN^+[yE(_+~2$NgQvl,6|#և7�]lg_p,,|^(W > sDOM\%MY%Ehȼ Od˛&PDo�\)|Dᣌ[ZD0%�Cۗќӷ!At^P}=M!| S|W8jaE7ʇEs{Ub價ʟսWYKUYj�r kb;sTF:ϡ09&) r1+HEm z[ߵ72/kM+ ԕ/8 v8zF{>=C?:qǘ_J*R�4~gzH%a^yslkZ6C@d7;D[e7ˬx;Y*b>t؝ ajM|⛫>~;stXEW=,uGvKǗg嘽6؅xtMmdvfqݔk o!Uۊ19gwhD0C*.1/`Dְ k Hj?`Xz3r?wYE¤Y޵Je7&C:DYp#/;[Cΰ82jn,SE<Q3`p]^Rw[¢(Y!ũ\AMcRcW`h!ޱ Y$$Z|-B`&�*"}_ ůL/Myo4CGC]2<{7htYMnI—αbň^?` 06x]4=_+-Jz+�mbj<yCӫAL/#QM/e!ydublpm^qGSt 0a}Y 5J]p7UAS޼ixypoM u)?v|#�߷ ᙭ƽO9lqFo'U~N |'t,}ZU,5BbG C-�^Ce3VTAq<U6iݕgQL+ 3R~7u).d31[ăN KHr*lťWcpx e {_3є,GDa�**^^ +~]+KWMBv頾Z]]POXw[<WE6HB4p+ߟN =~0ۦHfLW~isƙ[mB.DxpULN`TeEU۳ $x S\kfYT'T4L֗bsa\wÐ)ɥ!bm,G_u!oj<TW+#&žc^p ߸~!OEZ$UlJ2`\*@Ws+jZܼM�@o)HCk˃/u}?U&U^:Hde}_v1yX܇}q;LOE"t׷O<p5uD丮ߨƭTQ3y.Iտҥw(?͠;TW~<ה谧>[#)1X!. /78(qƗ'6xGpgp:L'o TQ( Khgxӿz" TUkfjWWr`"!p}ixU53l'D &QXʱ;(L#dŻEe~DbNW ʛ"06;k^\,t*aVb31bj�厑6x<h9P)$q񪒙i̔:aE>{f(˾S`D0~$l1(_:rv*͇HoI(Ҋa!(D2ą%aF1M25?[E0.(U֑u]N܈(n eLAnQWosq(%5x d 6)C'6wҗ'k|Q|%u4H+(?D~m0Ql:PB{�QWf �%0" k3BWr,1IQ�e@AQrZ Fc$y<:gHd䎻η\(+7}\{<.6jy|]+6(+ЬcӁ_c*U ;IDfE/EZӎ3|ZPd !JEL+itQ֮Ǘ'b4erp MNӐZf\VP@_PCJ L4�-)'F{):qRLWlĬH8>4K}'aM+p+ Ѫ(k@, Ņ@dźys|8�gc?<&6ǎ|ޔ"c`瞶41F}@2A)"Q eno6 f*K؊!"/ |[jDK?6X) {L][P@KṘz\JqLZ 1C0 q0 �ս ygc|cWR%ʲ?C�ҩt7 cQƟ5 6M<dR]EI.ztBͻc>㢚\ocHuj  .߄:l}bT7X‘4)rsSs%g7}��CW-qb_hX&%ӵ ܗiըzZtGf֚v]&;y:vwAnٗGe({!<QL0 rF?a@KE_0X=ַ}]PdR[_\DpB"ps ֏::'8t$,j{-BUˍ_%AT}ymUng&(,t+4YEYaNs\l]KډƦ(˙ j(^ӿ/5<uE?2pg&s* wvCvMKE'tO$>!uAQu@ʳ˅G*wǞWECu'qM@ҁy fu2SEX߁5L*<M}~uBE݆xewR,}+z}Pz\ơqrM/ŽE߇-;E)H!.>s;i7c;`y[W>ig0D6*S䨂n2\qn q!EOtV#aQ~3SI:_O[4S mc4ՄL.(]JH+B:t^jԁH>kZLb΄,n.'(0-wN˕N.N3~3r}6 t4>D `OJl7@_5S#+jjvM49JL Gb7Js_RH)_q?H*p"p5vDM(CGSuDŽ[ﰤA)J6@{qn=>/6ZǐE~Eд{"3y-+.2I /+0ZYig /:c1 JcY".)wz)τ&,ȼ>r:iH+v⤜IX?YX+jNJa jO<\$X23LWm8dFaU$״ڰFtխ"MocPd 8DdYWd],S(7md\#XD_Dn(Vw:@nj擄N:2Ug8ܮ %"H>ʻ_ lklc�D-\p˞fyI'x;SҸ1yWRHGHX/7HG$|Ĥ}(Bv"t%}kyw,pRW9<A6SZ{O:QAC>̿ޗaL ӈla*amA~T,ٝ6 Yϟ}b}WzunH0ֆkχxl53QhݝU{S<m1`b$\4ovC>;ur :VQT;G϶}0_'p+9y-ZW Rx=R>7C ԗS,UqlCN>G"x kEٛB!Rf $7@7b*xuqdÖӱlN*9#j41H0ؓ;K:+Гh[w2@ DĀ/w_M{5Z-TvO0;x+-oA`�r ˂hy'A"HrB >Q}uʤ)y0:j8\Ę[1R;&+n.nan',DN.씵h w6o?Q;g}AapAr͒C[@] gH�0Vl>P�&zq1|\.iGvL�YfP�Z~v b yTyp�9< k;t.= R9kn(7ZUv6&lK)(gY,bt[->q髒,Cԗ0Y4m4a6Mb`*u1CfnuwP5Y䭯|JЏY$Jtd,w#ꇫ2}9nu@ X,@HUp]442'6KgH0|.E] 5 TFvȫ^hxʦ",Ƌ k_A] kx w"6]7] RFJ7=_ dSRv0j.5n]dG';Sq­B2t?7^Շx:ebnGdmR0ܯ:%r^k:EHy i9EɦAeX4 _Ypl#(X= X?6~AT*\U{Mbzddl)�E4dRe_,jK̛ ʡJ#8zUʞ]LɇP&7i_$cu5X{7xklϔѕ8`O7QP&q%PlGp ؒ2V#u") `^{V{trI, `o?q89is[6\V hqXa884)'][2ۅM qaWBw~$&zr Y]yʬIj z] %0q|<}h꟯"Wٜw7&SzChgl Ca+h= get&8ݦ,d+=dhemEppT<.7UEVuܾaIc7rIe²R|FsNh۟SMA},aNEb-ؤ́޺D7VH,w@s00[nIIDh`j~l9vxagQtxg +eRp]ear8 }UyEȻqCe)_֐uRB}ݬ?7&1s:w#Y ^u4[|` mo>gڣJ:6;U<VaaQ�Z0/ua݇ʐktND,=>ޒ/fJ FIBS(0Z1m {.veC}Cj%\ѵ NnҚhhqU..Qc*O7`/RP1<3@ٯEP8Tڰv&NfrZ&o0F8�\nB{0f'բ!#C|ZsΧѥMA!OA[8[Qjvwh mINZ.[6>NsNK5~iyoN*cm8G]T`& _mkDIJux}#&9:!@ڧ;5VVUo|/znc~W}T(v(-aI+"~z|f Z1%jFtx|nL]X}3b/6R[syu'j5>u|Ec@~޸*#| {)q`i΀fAHWq#Kr g.YXqFMU 'Huږ/B+)("V}e`׵%ҡ[&T9ٔDy,ҪPݥ7 Pt<_s6MIDnbkF"kw.%"B*4,g+ q]Na z ' jl vS*};.s@01#{nG-/cps0D08cfB-DWӷI  S&dJi1ua\u/ڇ(c`_3 Y֤%$DQuSVHzO~#DoKmJ0ldkʸ \)ґ{Ș, O�1=rf<bcg4H9c1^@Ml&u Ћ,$u1]N8nqcf󾉚aYD c� j[|nU.USG!H|}4{f%&l8T;̉";9k ~Y1BOh)5q!{gON[-|(=du6fQR`]xiC/!LbtgjTIq 7v(K&aryw )yajyRֈ!)<g1~݆,sXDU6(0.^.ۊw4ppiHp d)+<6r�D rJ3!5͎Be pF8FbĴ *U+�x"l= x j 5z,Iުs �EbS<۷,H ֚díصKFDbY T7 ǫ`vM9nvi1ӠRfSaCzB2{�pfsW?WδfҼ^M<!OUW.225(Ё  d$7#Hq 5 ;MA?觊0`ިׯ$[VNBœ,@ݰzCy$-iʩgJjONQdC  p໊ICEC%ki8BHb-3ȧT{s[͞I'BW*(+&E!~4enAe=&u3*R0-[HCx;Uy^cb;�<$|J}dt?WSqyG@=_8RT[a䭟d;[V.[^㬠9_: &=G]r问5\nZ8 \c~S|_Ö#Ԁ`n_gubfLD  iIO m) 6Wށf?X蜩 Aj^2;@FjєII\T.%DRoi1:(O:w`y=ngU[TjuiXxb޴ tuC.;>3"XEg%оT'3a%ѓ{ e`R7^_v]*Y`4:U')Ӑ@V,QL aG� b .)q}X_¼dv:,.,0Nbh1VB~~ |oc3P&sp(֫"u8v V ֤<X<v:h3%`^o4S�#.nUwI[L^u򹵐96'"kw"&9$+X) "x/נDfR䍫 Y5�M,RREjo$ >eN ^KnOנa@^9|\"H:גTȰa7=P!i #!2[2 eaAEvW$Srt8 # 4t:ް5+Lض{_/QF]:QTj�lEEUeu\`g-DsG8ӐP2x8oS {\4@G qoFH=�\7R~Բ" ;MFjqkjx7& o\̠-NV,&q ZƎ[,]N%ZˡsL.),1=; o@$B5 6TM 鋠!HA-L00q3FK4IݵU+1V3ČhXR$gu4ᾁy|LԎwn4rixgPpYvhTOxh+r!}2 <åӁc>EO3⾈7dKYs ?.<DW#xGeϴ2VI[Pg FEf26KU[! ܦ9}~e�6"s,&t-X>V, "Xgį VDq� bӼE["a'ͭU{qׄbΒڌQgn56 cpKC]%[^'@2H 6#Q�I@WSMqiVKT¡8mt vrH'5|];x xiޞ~sɐC¢{-]7a=.Rt1F^J/>Bf'^*]&.[`5p٪ _iZk~gpmśӾZV" %s]Kw퐭cWQf5x:@ 4M;8kޞS,iP殾Ɠ޹aDXX4e3V'@lQL d5%1{ s]5zXѠh<3A0ښh�m#�;Hv]"LTpιIzFoأF-FԾ,le[F~6/RPr;ϦS9fzг{.wm\l50Reo wtx:' t x@[!g'(:Lj'n`Ե s 8܃k%p$q׵l =ngTkИr"!88).,zYj::ŰCRCeɩŁybpÀqҧ�| r&a9Z{N9  4$ŵCn8FRKqF|;0m~CHC�Em}r{1wnvC#E]ͭ]{!}3$<G Y݊tEj=A֗;Y1;E ʶuI%G2Z+M9⚩VMRm+t"(fx?<E+1LGA}EKg(1+@AvUs`q?.%ŴQB˦р&V18! 3^~{b�TN+6cL/픠ѐpzrjP#ģh<v#3D/?"/iF}!˶mU.Md&\3w;Y/N7A*@߈a"`_r21pSGՀEQhr'Fb҉>�Ca{&Mg6 Cv^|O C30ޏ{NwOk%Xǧ@jB^3DX1mLg0a(z]% M3r.$16Cl O:o ".9^q7g7'UF#lᆰ'&icq&4C,@cЧӒlq#!IŶ 7= Ƒb[jXrfx Bj+0e>TYZc?Qc{<~CfY1n8߿I6WJIYP*PT6 %^Az7ٴ]~, 0=iL2_^r ץcE=P&B , [p*[=Clկz#=QZ<<ݩu(͉VAϊ+L|Zae(2a,vҁ uF%kX'r!k.xO ݂@g"MRiJv$\\ h݇( SO{fi4eeq0]x$wCM\;Ȃ= B D+PjV0Q(W,8G�?&!F7(hs]wUϟմ|vUli-7$ k(! rzP($MJKeXlH ŝ}Gwr.ZD|@nlte{ۃo*@3EHWWb�%#% {~>@1`7_$ip(=+Kf=F.U`_!HdYG9׌pf<@N08^_ƫeWw35v# gg&?/:pH;D q^yZ!CnM9.RlAZ!S΂g#4o`w~Vp޾MDőg?ϣ¿`\ :]?2*s8È$;AbnLl!b:j;`rmE/]V;'t #;? (g�MU1ܻ+YQULj$Z ^;E·Bb�\$0j#ӎb3?"o_Nƙ$,]T8Ѡ6˽YC`Cb&dy<r�"4g^o4fҞtA;@՝ e!iMa;IMuO{3=IWs$یs\F?ҪWG]WnQ#x9Ope&=Fܩ_1^mJ C ,B~0poy`C:Y6u7AҴۏa4<0@iK#'~m12H )cxzrj܌#Lo' (4٤{lE<v$$oNY�='Bx$p�obទUy36}V|Ce`^ #8MjM/#fTQ1Pph)<�y%LIRs�9.,Y~-ZsY>lݞo |*4VX>3z( 6BX$-3sozh '88XT={לG=Ƒ<\!|B̳fn@IuzQ-yU5zSQ]uٹ4t$[avya[4$6fWv 3@et"F<q_kL̅1Ό @"ƖAȺ!kQOJY~(0I)m<?^xM:[^u N2e;Cp\Sq˨pԛ~k0;j:<3ơWxcY#ZrĂٸsq{E[?nΦ(@ոKeLpkvM C%0_~1@̎٪ ;Yr!6 #ܧn|Ň6\c$&o˳YeV}x';x<͌=*٢Vgf $!bha7s=AǢY WT<D\>v{m5dW)+ZFXqΘ5Bp# E5IׄQݐIo V=BFqh EųH.8=<GJ:mJnkD4& P>ylPgN+"/IT,[nxT֢y{hKEc9C|*$ShgW .aܔPS]}3R.@r5k%j?D.'T�0 9j-,r74Jh-C<Dv:q3ƉwFUCv0vcb_(-6Yg;k1kGq_\R4(/Q49$Z49NHd7;E.Pӟ~oRC17G\+fsH'1E<@pĿ'7<ur"3{ (`!| R;_ 'CBF\QC?<s؁mÐフҾG�7a -sǏ|jyX5G5�͋؀9t>�L64B3w)ò;ȦmiH,jp4~k˃g剮7u`?(NCA! r raT K>x(<_PA ดV$5cd.DQJ `nA\ٝfs�(&]fsr]'ﰬ.0̟4A:t <}ҾϬNԖQI@󕔲> k<R?V )o8^#d=0*?0G䁿F{^,34ʗH>a%DX^4ttwjUMp(nM%؈'CV1 �,UѣmWUsJV1:pFe*ޣ?#Ob)A%B}S؞_ThС2j@ aGlm~ltLͼHѽQwo>b=ҬIt˂־(uxese\s@\-5鲫SݸKmbᇲפ5oF%]ibjgI*6ܖaSo8|I,V7y ^6O&�INqh_"c|xz0b9e`  s 쿟:-'?RX΍SSÇQndRL{gpEZ`Tw;^=>ړZ.rB5<0ƒ)y":^M=Ǔl3Fe0#"t�N'\78d=3b7ʮó"% !#g5~ܯ8�3dCz: ;b%j%"aB~QG;s\0}q\ae#Dۏy95S8:*oײH*%oL@fq^hs5y.O~/=aXG"*P܆8Qqf,1XY}ɉ[϶scgam<eގ`2Iӌбh;!i1|(\F&8Aɐ |/c6 El= RԸs ?3FCzlP߫mRaBCx,gqȄi_bJ =CqF'ϸxƾ}08V3{3{M˫ ~ xǴk. WG0F1 1skrocO3F ryQ7E&4F0$pXl$}x߇WnW&<tQ'+s}o G˴,|h'SwhC!?2z5).mꄤ<ĝ H%.3oᜀ8mv>5}z 9|%t-O"E сe>Zԋܖ*٭4"X }[BYv0a מO1OKQPӍB |\ը&z ʿG.Y 40  Softr z E F> iC�Slh,q0Jv?Ot=WTa:v bǙaxK5 )wb/o|"耽ifJG(ne6IUҏZ. /R1̜ͦJ9p)n2̺'p!N8h.];?C{W<;x^%##ӛF!h&ؾon-u2 AN6m,j @]Xg ?tz0A= p!fay1'(_Xg4rddk!KFrG=m?A`͞]rSH%_S4X!Bce=+f,cL!3G* 2C44g̟1vG6Al#:C#׽@'ƨ!3DVTRK5aY:B~M"<a"`zU >:5:L.MҖָ ;_Tu4ѭ1?CdUVg=|<Ib[@R=L4@8y.vlSy#T,VE0bhq$ygu`~0L_Oҩϑk?4{Ĕb\,0f8HRmCvgn `^g]s?\`?J!̂( _JB0d8oNJg*cW:sYd4 "E>~ɋ6Ix]^4P{|dux_g4QyJ./5"h}v1@&>V0M'f3%v.s%A-qkw(&ovH1dYyg -ωRyRk=!Z;Kk`|Job]Y(NBr}~dպ 9'F�A+޿3�Z>L*džB:Vi_KfT#l/xJO{Eue `~ֳgIhTǝƯs1~J%@Ae0Z>ݩ6bꔹ.>Y &-5Ϗ;ONr3U3q0PEqڳbr{>)Jػ2~b ';>WoYq aq`Evya#\SG9fig #D~̝_^"۲BwH滋c8H1 LP@[{KCIbdj#ݞ|+%x+!Wq!ssrN2 Cx! uSN%=B澄7.q-I  'EG:FRk =I 鬹~p޸2lΟNq?C`wVp$;|~sbX�QW~bZ_Cb|)DL:yrQ+CKavL ik !wya>7SN0[W%<c/]5c6Uoam�NޫN)xkrt!EVC*i*bp%eq#VvYr1Krak5B*O!BegͲ>qdEw8% n2.sh"vg� nmt)lTA %$+Y 4?6 $G&F͍{c')w`Ng)M%?*GAYT@; IO唎zRZͷˇfcf?Z(z3}|1mYRpfAaK+4jCfU+ ?BzԿqњ$,|;/Ƶn,9*qL=g{I!'#Kh Daady.0`g|'wP ݂\0{G 7E`>ﺆ;H7k5-Fr2%pF'Oun&C{'>dJc~ jR̙8SlOV'qRmDo =1,{}hQ1�|_"OhC{ kQޣڀ9gt~lⰲOfx}|my5$߅ ίۓ*BDŽH*fQXde' :; B#!-%6t$2,#ٓ'# 4dBOx/{'&-3qMtaIx!gG1 ؗq gP?+"ҍiR]}K; O(pT&vkd`9 AߕyINh@ g;713}t)F<U9l:4p.QtE=$ S+yA}̯ц&-sdy@2G6wȟy_(|m06iwm_$܌&kt( {gONut ҧ] d ʕܢ,sH$bVXپ<y'Z7mN綃PQi, pCQA{&aߡsjx\ ^ 㾴t5WYB'e sf?J i}0{IG4{7-BI=kBE>51YBv¿ ݱD5)y*D1PF)Q#rG5t#[@>S0-&E%7 'fW<e 9S#G셃}߽YUОV8�RMp?| S2] fHcuRT?B(gF8E\t'-["# );ʅ�Ⱥ !L lʭ$7ݙTx/4ޙ! <g"�2- ۘ;N^dn={o0f]wfgК6{d(Lg"PQr:k8k5 Ї�uR( {1LBH*!\o\㿭l{H~;$<% 8Sr(L:_YfE ãeB@<Yeǰt`p'a6וfU!}#( 99JEm<{ :?)l0#Y(Hyfvyq7Qjo%gSԗ;eTτwxZYS -\=cJW)ૹaW#Kru8dD{"8;.J%ѡ{@2b>g5H `∺%u*3()@TV ͝Ǻ"dz `3r>shCf mZIrG\Yvc0~@P5g7hW-'EQo_H/� 4{uτsL.eFYB:#LEC}K1>IcC%HIQc3>00 n-̄ "ќFhmF1ėi$jz;ʎv3GGpX?95v.$9Ǝ)缨a 43 UqTz̳"sɵ: @oL7[M=7%:IyIEuY<'* ?DžcrTQhH;6̇>*|@Lrh񏁀}s-C # &빨bSS#@DyTd.Х&8] �|p GBvz=MMG5|<_]ߧ%CC9W <.Lg+8BL>'-Ney@eAP*~TjS6d^!c{Ej`a Ӯ_&Tل Hl( E<'Rdܛʟ#<屔K9Ou}#QauGk)mb`l4m}OK/#<Z�0W\Yܗ4pkBHO�l|#cpaf5%W=i$mZn{8NO6Ⅻyf:i˳qXmF-#2ka04LwjY|G `FSrdz~gύ,}Oė4d|y:H9fS<㑋J*|O.Eֻa;刁kl4aM.xب,|tl9ZXY6Jw[ y1,fl`ctvͭϠ]nq� .&=Abޱ.xw4wROq.eϜokyzΧ>29bM;kSq*0E'Cer^ٿM .->[FND {o\0lB#`#KąbS3o~Z,SWG{ddAi0E1c@2^-+ض8a4h#z񘝡S`9S,Pg|ƭJbOf1h O.3HSq=+!fad+eÕ߿MF>rAlCC!*t4ĈQh:}ޝwI1F!۱b#]>  kwB 0%[S@- 9_98-@`|-jٱ0igwlɚ aF~[% NM!;L +`7L<k ,= P彋| ѝCAk,3òL !sQ_f/wB$ sqQld3&l"hs$@?0MAv\~Wq�op™qwc <VMIZ)HSPo5X+ r%2չ&޾1jĆ%hЦ�} )$'*#*j[sE76{;03'<Eh~ DQĐNx`3Wl椔Cgz3ĥӝn?DcY: }4�'QdZ-|xtz3UuO=8x{&> C +grԋXmse|_PIb|gb]]і[od,WH2eEfՠSCL:l^͗3g;'f#Cªs/gx_; zHRוH%i>dsoj}<jT!;*0׮t1 l*$ך' ),;A]Vrnjlx<y fèhYf@Z0»f$o\,K)4At(SCPɃT"\Yt**i(vwN}ώX-<BkObvQcw ޷1T [">* ŃgeAp Efo?  ]7~VbdžMԪFgf¥Cwae;{l{Kw*IJ-r*!F.Uj}ǿ;]T#^7gc A!L"?,'Xy8'f1F a{f0cd-"B:rhm<�)BH3xS2uDfl&IV:3{Vن,dzni "$״.R &F9RcZz X{ӏr /Gًp C!t'N.[?nƀ(Z0a]Aqg΄,. ɞ\Z ^7 ٹaȏQ; ~U^86zIK+==i! G:E"a#lraiTko�eW?rG/zS^;2jo~BJ!YOf`.l^P-\ QJ23|\F`{onk1(oZ05*=PFZlJ涿y,^8si<^Q8n-k >wiCaGj ?hO\Z>}If\/,3ȍ7W1@< omӷpZ{B/Ɯ=>e{y\(;#2nςX.~6@zU1t⁕a}P\d 7;X7((ckbG >|C%G'%n-RG]>)e|gzۖ/mz;7i&Э`-~HT+㢏`zQF]DZ  5.MgQv>:/(|k&.3*e DDg^|@=Npqnd! ;jG3= unRϨjh/yTYt[F ܨ"Q'WV*a$dإPOx3nY1:jwiF {nFxr_% O8K_Ґ@UIŋ38Ԏ&H+zG/%(h3?%θ/w:T^#oƄѥdHywC%*Qҳe RQƧݳׂ-7&doC 5X~ζrVqYy` wvYphx9=S�Q珐o[S_T(z܇_\Qv Xe�k@ 4K}P;tAFP@#AzO2U#CH*l[ˈ%-"[6~?i,*dOlnKAR/6k<ab-8xNf'~D <?qo jpek}B'g�y}@aAP-mof`榟vEeZa/n%Ä&9Рȿ_nB-M@)m*P/oͧړjF?a\[NО<"M6�hZub2Q:F`t�2z �Th32[O^\BÆXTƳMwKB%uw`ݳKm UX` 󨶬!J8YI5rcٜ۞rOU3#]:�*poڸyeBT< / *a0g5U8,Z5.o7q!qng`&p-njveir zNi~觡 &q&3O80Gg07i'PK)~)lj!Oಎf< ɃA=)W9l=鞈2hTxffTls˺KjH",8XBFfĎqf#=,|ElHE 4,Zp mz#3F =?}ȃ7K%PrUz-tZgsk@d X‰ɛ|i]M(eFafeo1MPg<W #�k:S)^H A+..{=)o$ ^8GuhAɳ^$ABO'QC,'!k#-jV;kaV�f2~�7] _ Ф1.�Umya6x.6S0u{_)vdbb7I[Yp}+A,3 i\6/3YPzl5|n#A*Rn9]CHGlQ37◸oߢF[4Q(<q:H>5/Q!_drEchub5e ̬/-"_@OB&ߦKɫ<1C,0@@R9 x% ϒH>,KjiP:5)nP}E䇬-T~s#KMiɕ%a<)G2xT^ =,j53ϓ3 c0%XV;9xhkgz{l=Xyi\|%xyB ]јP{׾4Šb 3 �?)8]|86iʵ >- #c;(007�L^P.nYdi,(V9DRM$w`7CmkM4z *4r$#|8`;!G=qAi3ifL)DZS@uD!=֙CY ݲ~Ձ8Q#ijײj48  x΋FBW/k3{_Vy1WJ;@;7d`L9>}*,8Ổl Y_'M3$~!v3R@x߯be8E9F`] H/ c![�`h;tSw[T(-K_ C +| ߋO{O9@l\eq5'kK7<^_h^c3+/Q$O|EElyVsS%5 :t:ddVROffHz?duedi3 OhAC<bݲ~Oxz 1B*Em7�C�-lݪTӾɛ퉡TCÕv#%FIyX|5YhK鮇:"hqs X;p*#M˵E�S9Q߹frƜeA`Ivyݏҭywآdױ3h{f6B(HO OeLK$'r΍\{'c(>rD<54bDJtF &Cs'$Ƌ̤07xxz {%9ů�7Fsـf;phU1BJ5I>!))&<c2E?_׿o?ǟ___s||￾'�ۯ_|??~?_Vo'gYij*lG0?FnpO'ܬ"n [UU{{rw??;Ʌ$dCBU!O>W! ٫<9Ѭ i'U!<iѼ yҤyOȓmT!OQ'Ivq _g'Iv*:A rR[,lh'ɇv'/! yrO?E ,<9[U!+;B^ ٫89ONtBZ7ɉ~r{ҫ~B''B*8!ON߲YeH?O!}U!|'_ɗ~U*{ɞ~U*{ɞ~NX=Ve챓=vǪ*{d챓=vXv!v2s՟s[,eU!vNSvv rrΛξQ9Y``dg۬}o`dgo۪n`ޞ ,B-Y!޶]\)BT!N,go{Bg{B}վ{*J!w B*'䄟Q<U? yū|/~WdW'{dW'{?'{?U=dϨgU=dϨgU=dϨgU=dϨgU=dϨgU ˭ʞqgT3N=ʞqgT3N=ʞqgT3N=ʞqgT3N=ʞqgT3O̓=ʞygV3O̓=ʞygV3O̓=ʞygV3O̓=ʞygV3O̓=uSo<9O̓.(b[Ȕ•Tt51OB̓*b{<0OS8y<[~EsXgשF\luO1]a].^箰z\ٶlu ˊ.>]gOWO٧u:tt}>]gOWOߥ*5V)v"uv*vzg;Ϋk={={={-FFF"o^<)xO E V<|xO>E>^<xOrErx2=LyLyLyO'Sޓ)o)o)#N҂(2-2=LyOEE)d>LE)d>LE)d>LE)d>LE)d>LE)d>LE)d>LE)d>LE)d>LElLҽ+2eȺe=?\D~$VEmUTi=]JU^EcU:yUQ*%4zUz{ϐ{FuTQHuVQgU}4%QWuUQHy%[E}|DuWQFyxrUz[?^VrKMrK[ʭVv̛v[[-m7-m*Z[7o[+oUn*u&ժjUni/]MrUժvכVrU&$Z[-ivYQ%VUn*([]*z[yge.Jnuɭ.իUnIuzV*%VrW%]x].Y"݉${/$twݻ|e=e}Iܽ._pYOY@'֫@4pg})eU %L %vE I i>$lT$=o $ x'ls[U ҄g}ζjgli>dg[Mv4YNvW;egK $;۫vRg}jgli><v+y(;egK˜uHv4Y@.;[ZO ^l- r'lvΖ8HvW;egK3A;egjgg}==dgK $;{T;{FDm>m>d*am2* nETI1 f]Dl*!oETIVQ%Oͺ*y2vUFެ:%iSDAf]D *$oETI٫[�g]DܚUnM-遳.Jn*)ޤ+κ*5ܚ +^喴۬rKM:笋[-i7饳.Jn*ޤκ*5ܒv{~;ߣJ*ߤϺ*ܒ|<"֪rKM[-i7۳.Jn*ߤϺ*ܒ~>"֪rk鴈T%Z[g]DZUn--i.Jn*YUrܒ?"[+%ETɭʭWrK[o[0�[o[䖀�[o[�[o[ rKVhfU%@{z%`]Dzz%h-ڮrkKn &v[B ]֖VuUrkW%h-ڮrkKn 5*ڒ[]喐mW%`]DUnm-XQ%v[[rKH*A d[B]QH,r _П"‰*O6ڪ2)HAzK^EHA XQMZU")`]DuUTuuHQEHA XQDUTuuIUEIA XQ_VQeJRE-QwUrKު*Nq[V wA zrKުܒ.HAoUn _[[2)- zrK& U%|AoUn0~uUrU%]ETɭV喌wA XQ%Z[2)- zrKGuW%|AUn*/ʭ4ȯUn _{[:˯- zrKuW%|AUnD*/-ש^Ws:߫*t_g+ RzVtJnU|ADHnUA؀Dܪȃ.Y}Ӊ*Ua]0ֳU2&Dܪ�.Y}Ӊ*U ]hֳUrB gM'V1tXNTɭ j57[Ѕp`=o:r)[w`=o:Q%* zVtJnU DDܪ.TY}Ӊ:4Un "zVtJnUD^Dܪ.Y}Ӊ*U]H ֳUr*`gM'VXta,XꛎnV\t.XNTɭB_7[`=o:Q%*. +. ххч<S[eet2[ S'H[{ S'd[q S'$ [g SG KD.`)HRC$)`)HA$`)H@`)H. ].@`6UL5dgjgO-- D E >ta .ܡ EMuHv].dg j+$;[8.CqE ق.tA( .Z EfuHv� ]�.Z@I$t`]TO5dgjg/ᓝ-AE t  . _EP^قtA  . EE@uHv].@ t `]-x@<P�"l!]Xdg " $;UI՘V;U]I"$;[]]�v- . .@ߥeuHv .ΖN}N}E ҜҜ2Ϻ$;[]]YdgK K ?"lww[vVTLU'URU)lֿ S'ʄ>"hJݤn2Ϻ$*47icU QJ>IduHR5n7gTD1U&p{E QMI/QEFU& pCPD%Ui4nBUTn�> Gm MłU-UQh*,! pCPD<I/Q%in�> ET i4nBUI& pCPDܒIZ[-7i4UժzIZ[-7i4Wի{Iz[-Z*]VrR4Wի9{Iz[-Q7i4WիQ{Iz[-ѵ7i4Wիi{Iz[-7i4Wիܒi{S{*-ոW{U*-W{*-U%*ʭ$/RVU:�7Ʒ*-ΗXUeUn4M-rKn*oUnY[/ pSE}r˪R}i4ͫ*dߤn�7r˫%�Iܼ-rKdL& p*-0iD[^喫4ͫ*D=n�7r˫)Iܼ-rKtL& p*-0i4ͫ*Dqn�Q֨rKL& pUn*Dn�Q֨rK L& pUn*Dߤn�Q֨rKM6ӥʭQP-iۨrꆛtM&pUnUqָIkܤ5nʭOn'7铛mTU5M&Ms*IݤnAYVN7iM6ܪz&u޺Iof[Uݤnh7i۬r꺛tM&]wUnU-xI ަ(UUmmVU5M&y*NIޤSoҩYVն7iۛMܪz&=|IV[UCߤo7i۪rtM&}[UnU~VIߤoʭo7mUUA�& `تr"L�"UULrK�[UnU +` ܪp0rL("ʭ )0A L**/0 L{ܪ`60 r"L<ʭ C0L0 **&I0aL{ܪ�@PWܪh{)PrKh{ܪt]0AlWUq & `1خrLj]VE8& `ʭ w0Lpv[`>&**0!L@UnUT aBEPܪ D0A$lWU& /a[7ܪ jyr5,r+|$o>ڪb)X VO*8r cXcUT)�.?^E*r }B_3*֜b*ꬢ;p.\W\W\ ep^q^q.\ exexep.\ ep۶ʭV[exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep:ʭNҒ[exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ epn^VeQp^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\ ep.\W\W\ ep^q^q.\ exexep.\.cT\ƨ!\.c1*.cT\.c11*.c1e1e 2Fee 2p2Fe 2pCQq2pC!\ƨQqC!\.cT\ƨ!\.c1*.cT\.c11*.c1e1e 2XwYlM$Ix_H48.q$K ,~#ӆG"HgJɄ68mI%qdUđ<hy%vH_o[l#68IvYOYGvwoIƑe?/qd?w0q`{]x/ XGs,n C8ֿǑe?rqd?w0U`{]x( XGs, Cxֿ6uz8M8# aXG~/!~6~0+`{&Y#d?vqd?g4B =g,.C�ֿǑlŷ`8M8 a�XGx�].)~vF08] =g,Cz#e?=~v*0_8] г=g,Cz#e?W.<~v08҃ge=!Y�YG,C#y~!sֿǑ<d?9~EHqd??kqd??kqd??kqd??kq=Dğz8Eßz8EŸz8Ez8Ez8Ez8Ez8Ez8Ez8Ez8k"e=e{Ϣe=e{"e=e{Ϣe=e{"e=e{Ϣe=e{"e=e{Ϣe=e{"e=e{Ϣe=ekg=gg=gg=gQg=gg=gg=gg=gQg=gg=gg5TvYOYGvYOYGvYOYGhvYOYGHvYOYG(vYOYGvYOYGvYOYGvYOYGvYOYgJs8)JֿiI&qiE.qK^1c$I+q%qgH!qFgJ)qęgqYgI%qV8y%+q"Ζ8[l%ε_����e_zV,�����������������������������������������������flent-2.2.0/unittests/test_data/test-tcp_1up_noping-cpu_stats.flent.gz������������������������������0000664�0000000�0000000�00000046170�14670056262�0026233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ftcp_1up_noping-2024-04-06T202619.506230.flent�}ksבw ?Ɗyh[ ;i({vbs4*UnV�)[j}w=xuvqwt_c7?~}:÷=zƃoOۓo޾xCu:/eEԻg/_߃gN}'Wq񏇎ϑ E^pL~Oq4i^փ/O_fS?s^zק٫ߞ;}뿗޼x'֞䰵'ǭ=9mykO.[{rړO䟶[{[{֞֞,n{ޞhٞ iٞiٞ jٞjٞ kٞkٞkݢE=yۓ׺=yۓ׺=yۓ׺=yۓ׺=yۓ׺=yۓ׺=yۓ~{oO^-'ߞۓ~{oO^k=y'ߞۓ~{:ܖzE,w/~;{~xͻ gʹEO_xד~??]˳-\ߞ|/?嗗oN^z֯g޽x3շ_N_}7~}9x_la/uWK/o{ƫקAñ ^uw~yvqv~?EYu,_j|2|_so/;GvԖ}DpG0Q ⓪8;?sv۷g?/@ch}~ޝ{B%!:}חo~=r?s >r?\Q$es)R+NQ!>^qyhjjJYcYu~!N/痆)J_JZq~erʪf$JJz5Tk&YqvaªfWD%-S-%4N_s%gK\LP)zLN8A`jՇū*NNWX' 0g(3$k45 ]-8x'aaCpWqi.ѲXpmHNޅp5YwU^3y݃ l s!:$KHʒ˴d1NO,d(+Y|ϒdm2 c$KiG$(d%\Rb̐V'|H/Y4Ed5}QvY򻞵_}ݣoN _=z||x'ii'__\th 'z�z2܃?pGǏ|=l \Gz~y늰߽xgO}gIC!M+wױM<w'_\7COg?? ׇ2OG{$>.$'KiO}NtC={GG8zcsӿO},rP" SX37ԃj{</zgoro"=т<M&z飯?z|G_|ۗߝͫCq>/.'?}Wf;~g?<yz|gW?y~pgOߏO,{o8/}pXO?3oN}o#/\q_ܜyoz1/$͡O^cceX oTc'$ߓv:}7K]ޢG_=>篾߮v!>] >,_^r=.%m~sqZ3)B'qLIe+ w7>'/g?҇o_Y7E%?7ξ~ ~e+Bw/r>ٻӋ?yM}~De|p::_}Sp{ "5wȝ-r)YώpMh _}}ݳ>+1޽:{u1?q_W^-t2/_'߼ś|y:{xB7K_ӟ^}S6ϡ<ywvQB}r7ś-:2ȝyI,PS,-?_wFzsw/y_@9?9?lM'ӋAfn9;l9ɯ/n6#|8<vDBŧGvc*7ow.^%z;񝿿~/'1k0L^v3oJ"_=&y|ׇ?ޜ_7bt_,)^'_< 9'>z}'|v`]2H dѠfnF3<|ő vǁUXV}$t542>t,аԻ玜x`^i<>pypMYzdR94 PvK?HNVxsN9Ź#Qo<?BL.4LrsaZaaYܑ[ܑ ߿<C&8w*Ch#tä:epʫ]<#;r:Ȏ9)Ǚ(vn}& sYss#Lܑb0&|w܍Ec�};r͈s.o�a0掬a#(ڭ9!wq>!%JLQ:uXkAX͊CۚgG;py\hanUv418gnj?w[$ _'sGy؈J>έ4cFϙZWQE#˼mGC-լmKc`dWU&vh6"f3}C'XRfJƐ aUq5}@Niآ*eKVa<wIP4 (4j;P<O!tiAbiaunKMdk^ðEUgp3I.:lT~PsG&<;q];pSyҡ1|z2ɥNeM,WL \ˆZ;o'rFL^;w58aDu;r)~2'PK:w` wQFf<S/]aH12a:! nvpcg9&9l9<ld@]% Qmd_eN6ru51rqR(FwCp#ٕ#눒ܑGJw# |#e$�f҆hn^#ƃYk ەaSίeHUy><6fy:qw G# I>]Aj֑+?jN8wd?q(33}uӼm+cgT91pMuF<2<s`_(k9#PQ\1J\^9A0Lh f$ܑnsq cqF!G,0wa=~;Q}.2;T np_;]a/r2oKXN.#39c8-ͼu$fob8bįBr',oJӇ ,RE/0ś2 Co7CNR'Ƥ8sI`)6| ÕZdz kZ Fl5* g2fG&cll'w> 2uٕ\]Ia|&&-<-|ʺKe7M#8^j"ykk&V]~}xNjȫ]ef 7Um9yO)~쒧<"[%Ժ+NtqWe&8g.qM&%{QNTvʉGeN<M* .kw 䚒0 sVK3M?l rg>o8| sl>}ה,W|zP7|RAg5uw/KDխtֲ^j3PLdE[,!g Yѻ^O9Z9KrZݟ+(0BN&,x`7? 'x|W4@wt}d1TWZЃ{9@Q~_~CFhJ+N+ֽSr-|jr{'L(Ym=6/詋O&n{r9t\nk̩SL.wkZ ՗4RK,5¬+fm�ފt Xk2I<P}宦ޤR>-tdV玸ZUHz름sBȦ틋}48o^#u!Tn& :U.e¬k\3l]6QY\﬘OH/ᖏ;)>!VX<؛K>̚SU%e$z\qCZ˞Ha_\ğD#eZ5)UQ6nl5BBdx Kr&l% :s.k!jvԘ)vz%݆n7#8s* a] 5:s)=uRI#0vD>E'VS8͂rgwW"O'T튄,lāN1as^WʺUJRyYwPjnb,<f)Vdn+קQ%M0kW-E71Mw 4qqv>6ۖ<ٍc)=q,94ڋnn3'N<2jR[CYE)E{]p  ٚďv  ȫ[\{(<Mű%0-5sAH؈k5)WL,z~BM0ԅKSkq"'5S"&W^bqE nTkT-g qN`BmC̜ \>{,iSc(O%ElmmOvJP:WY]T xQӺI|9锵[ܔ-ǂ'+G錇!_΁ڹOY撫O\&j P8J)'πR&lR؋T)֐!x[d-%>Maf:U32tv5$tP> ZSJ.^G֭ĺl"gΧ(bc� ~d}}^X2gݪγH~/~~ξNdä>bX{fr+Im9}w6bD@_7l-A%+ޢL4si쭦lFYO$[y"mK*]cX&B M5&%FI3y V&e$ ]$INX\7a~{͖W Z~O9{ jלyy<|XF9e.5Vf�bܛ5aw,>lvpں=#uŎ;>1ySCb oHia�2&tT }\ݨBȫilrd;SX1/]ݔ+=wqe9s_zN.o2n[zZ=zs=Swt>Ê7)JS Zhѽm9;W @ӟ͵7kYuEIv�=id^3v>SN'Dvb.ؼmʽ>�·mW՗=ZTn9h0L~M VkN· ׭)OY렃XZr`5eeK_vJ5#sI|`7>'Id!q\eOf&ں5ǜ7\t[[w�zr-ǗXfTnOr4JQ^봮+ACۦxvZx^V[.a|ٰ͒=d%s>>rq-T�cmi;g;wM2v߅ZCtٖ 8;Gw|SwC۲;wDrRRs']~pȦ[XFC=4pby;bR}H.]ד8s<ⓩ=vފ&ئ\좺6],Ϋ0֦e.l(`]F|kN7psi=uA'{ꢗͳq,2R}pY>ꓺӧ=4Kx帻\=w7킫}.b>}:B-wؕ\CzXg<ɼ n^|qH_q,eG=ȖU)K:;;-7sL6o? F,*^;I.o SA/eӊʺZ"n쮎VK)v</|<+ޢY߽}~<ߙ7mW֝g㈛n2\v1@L X5oFzg7VA 5M27eb$u5KΥx�il-$90'#Nw%bݾi, 5_v64v-s<w8!n+ ;ESnFvu37}s|t#jwk>Cn $]mo9kW%靐Y T$lV: uX ^j<-2.lZߋq5@N5Mt׵<;ha)wqMu/]WRMXFw]X8d[<mM[ly<X|`3b&qkHr;.Gذ$|jy`9h}fh3 Txx|.E 'Dyӽ"$PC>|It8pINoDd.\Ò`m ,˷X:[>؄vn�pRak ٩6SV{%a !ܹWĮek.%{O y=ȲSC<Ŷnߧ"[:]7(Ӳڵ< e٨*K.hI`hrKMݝ46kh ~׍2Z[w.t |vҁMRxvrTdwaW5C">odIG|.2Crʔ]!BLyDjQM0e{UG{[oċx7kvF.k kwwdjƒc'M)_;ү-{Nb}tքiR]yv=m4ϔv ' >sS烏">ujaj=31SC1I^>u5R4ޗg9Ca3ϝd'EpCp1XlNˌg$&t4{S:BTKmʭPRNrTƝ5[w+f r.Nj@3pv6`|ɵOkq?xwv9~r۫W"^_,K(ɻROd-⣘u*Iq)p ^5]AfٻT]G$ \L7"0^oph*9J5,Q+ x@oe;RNX],#!Y>-9ffIߊʍ|& w�öJHY04:,C&uf6P l6=A+u^n֍0|*g3J4fI`+<g;B94h v &6n T8}1ڡ"NN$cA8ށlA"+Lo(p%` s K6ǝ7pX+nFת);I1fR &qPwYebLdKb<A5BRd>8JXRx'3;3v<঩Wר:_D0z98B>X.}޼:p)М@ >Ra"gNͪ=\A1gSB̠bn76ՓW WqDРe涂&SÓShš*'e i \�VY-Vk=ϩGk\E\@',E'NlB<KQ b7#%9C`-[-)CFK$ayKPAF1Rd}DvWqat\85kL~[-Qf'Y~0x7`&/tq$>T;X V* NT!3a渕DRsE<d)U3ܱx(55%1y\~Hžh%(GAoUC 88<`$ ΊiE=l +y bPU Npxb�L^a7)PHCP^,CsFHs{XqKH6~rƔm=K6 Q*nJI)Ja (T4ID d<"[T8GՄS+YS,n h X8s T2<>:x8j*K{M(q֪$8P �%X{B 8Vdˀ<ӳ TV1N.njVe%mWPv ^}HfA BU]JV'#E[ 6d eɎC\f/. < $6:Ȏ & 7pX SX)J=2e7&c/_^ڨ=988?jf_Y�=c&¾7b8c>T.8<KNM4 rC3hߕ~H"ʸ#7`t*.Q*6g݇8W.G)ܰ-zk-O;a;Gr%gp/[Z}o6+P ;ӘzD,{UϴjEOXv+`:gpE?\t <ˡU`V Caެ>z YrJS @ėt�E5/EZ̯`= fa6E}Saˡ?e+*~sWP%8T1hb $j8vؾ@l|ėT{Pe@lX'}gy0q\IA?) 3g ɔpX|y MSfہNj!VOR|?ܝy`SJ :�ye5-@rҁ  1CQ&^ �|p> 7>S,DqWl Q fxL4ea# 耀}ɨ.Lτ&f C.÷pI$37|1 2l^2)J᾽h,Ho`vFA-[v9|WJAfX!@%En|qyf":f ,SPQTjSwXv`;V  YZ6U.O ɯDMA>C;$`mQeW^f)iL`HjLr[ ,1<lPM9]Ӡ']F'1$Zwڰ̙"CK]oday+l2𰒢17 ۋQ0~/l}]>KaGBX"ROm*0ᰏA5D%YIЃT:P41 g\C #xk=mYE?}ꗁ阧T\V3ge3ѨF~:Nʜ:؇B>$3DԢGAJo2H>YA jB�2;@3}-(cO*M cEh;%FU6c :a3 V|DE,fp&*t|6oK7he_3._45js3  qDy:.n(̧*L�[a4i\n(l 6Rs LAklB :ĚRc|'|r/UBUȩ=4hes5R#O^c^5?9jow,Rl}P[ ,`6 Sj ^|F@:B%B|ڳՂq=l 2Zļ-ShLiHȰJAY`5y4j/g/+.|t6D$䳄ph�aPLJ X@TFf-f],h :=�\}A7d%PfCھL<x9+YL{IBg5kզ5FW鎫Zz#@k*,4ÚLqzP$3!$,2!)8,쾆Amq\% |2)94җBw7\>_/?/gʵ4*טS= Ah_7#8D}VIgW(L`F6T6EZՔ&0J-!ŲVBg= یEYMӲIK'KxPY n̺[R`\u][ܲ0:<YbP39}hk%j98}0yoXTf3C ˆT KLj.mX0f&UZy8Pp&#Y2_&Ps,ݧV`#܀,⢭(Xl1B"D؂S}2-J8SW?6D}g }Rh/o4,`ֲ:7 Xq1HX5!|A  9K [ f} LuJN L VUxO&c;I|`Ur<Мv$\MSv̬ k`&)&njY8b&P]6e+5Ĭ>!`VJXbLw. &0ҢtPk˼0R9<2*#XA:]DPTͳpd.༪D{n ,bc+"*jg6IR֚6hW8} 4x0i@# ߿O͸TRP>6 j oӂX. /-obL7bI0$]?lRx0PX2HTWqN,!?F<8BjyIʋzlhU"ȡw:s0@bY|@Ag+6;$d^vC¢-$341WeNddcLnem$ʔ*15Pa\wɔ;B*ET&yeI¨:Q4A|n Pr`2GRY(Sl ,,V=l'QWc}%$Y4N00\~&A <C i:QUeyC%}rƪ-`Wk0&K $Vm"t |FAi&X'.*ac0HE.6RBJ%B@4e f2:mEQD0l 5r"hx4Z ٥8VWӠ{>e6&d6o1d Q UAfcVc*( L=Ev}RJArx1K0{8 ⽌xVYdeDkqz6u^_mQ  qNru, *<Ć%ˡ7(P$ī!XޒMpTA\ xA?1nO%oJ*!!!YW(a8+dPc}Ge`=Ք5VrLK{bj4G%P"Txxh%1dLѥl201)?1yB%‰p[2A|K'[JlfE�$Nqp "L0؆E!{"5 _~kpKr54~${],ކ#8Ɗf=y%^Za<^)U3V62vP:{0n7J̓š{ %%ˡWg)RC O undS &Y9 .X 1&5[!~^#ZJ)@$1Q2RcS('kY8X0Y$yhmQ_ig ʎȖ e $pe 3s$iBT[`; xkP:tu !ap`7X�Kn[Aa=)~"2LdZB>OlG,馧;n2)dtwUuL 2 Y1JHJLZ5<̵Ye ~ 3L/(;" GD>ޒ_ 7b-VY ޢ:^G\ %THF.KKe}L,DDF e$FT^E^#$4f +9C,8/kڵh'( 4 &;=zf$:a~)Q\[�WI6*DfA=Lj`Ϭsa eJ0$İK(Qg f퇖q<S>hۣ ,ő()2W) "P\퍉"Ol EGe<YeDW!8Чl:]ԅhq&G@k=*6:<9m^ f~h>@^*~F.">{VzrcΓDQ}n=倳DNGSƊ~OYdB,fZ&沯.j^{U$V o>'e*+gszHh^و0 J( [.5cu)|$ GXU[C1(ĥ5L$Ԁ*cAXzfcT½f0Q99&z!viI$8ت @)LD(1f:mL`\KcYEG0=H=i-k^LDA1$y)H0`Sn 8+'R7 gLզ^LJ6#dhLj$X[an27@&{hKɀe pt+AmK\p<O@!ܰb.I{@R[@rM"0…;,C Б"K[D21m`1 &3#!Q %mFy"R 8m213<iVU#`LJWb�.M}PܠR)7N `2D]nzQ/XH e Jfm8Kt}ҽH*J"lqnmIDBᛧy;Z#,cLchWD9] pbP(S ^[xD` yZ =t:Z; ql+ B \Bf0ԗ`;uU3j4!օ@1dQc!q;, bm� *cvKpK\\V3k!ɚuRS!QhZ<n+r]C6,6B2YFz Xr&Z50i?[YHe ِjg [݂U XKqj1,*%L ]ؕKN]g#%#g>6=.MmpNZK87^q6bPKIHXUfW )?u,(qmAetԈI:I 0m΅ȈGʰ�jc5$vGpe@ɘl5YL-#ڋ6 O` a2SEɥ.$~ܰˁ-X)˦Bn0mI �ݰ,tlY|UYNPaͱH#n%(us/{'d)KdUo9~̂۝t}k1lC< `53D>~痟_~n0k lir"c8NohtZpl# 5NSt[~TvF-;}Y=)LMgE l3�l҈/Mb>;)/^h üȵؤ3z|c+oY,cIv{̅~Yt`Ճ�=P[1wۙ+iՌj`v'smma,6Y ;gT$-.&'"Rff3SxƵ0K4Lbސ,|N#a&1+6nj1ŎbZ[ߋ7K�D<i2עy>Kkc!O<fc|YzZ 1Yf3ť=0;aU5g?™x?:ZI FEڍn2[/M/{鐣)-hՙO$P#0l15k„NsejZEн5,EK ZiDL#eL9,8f˙k3"뙦kf08k3"Od] S0~!DT\64xjz0|#^+ mng_l&%)c!-6e!皰r,J  덶7Seuu]\ͳEiTFNK,kLclR<e,XZ" Yʻf`2)6`�Ҫ{Nn2l >ʨUTo@dMM4V8VK3nq$0b@W aך#++$b:5,H()pIٻ3b /IGZ�2e73.Ҋf1\x%3jJyy(#VAfYCgZ #a&ɭ®t%*Ȓ?vwm7L:x[lU }WF,^!6%aeZ11-� vGcE` Pr~$ǐ  3nղmrRka apZvڳֲgm&S]ʢbZ ,resĸ9b^d[F&IXY}ؿ"D,[)b bōXlJMطup\4 tsZ̎"SaS2 :@dm<M5%<(yLe(9H+ɩK3tm"LJ,',Lե"` U _BmnV2S+frg!#0/[#{'. j!L1p =!YU  X2j+5T^0O9l3 mʴo4UB&[F8>#TXՐgYPd *P,HE [Z ~&Q&HilQXL*2z-8Ȋ4v bA*=Gs5!N1*e?P<K+7b7Sinh! $"ٝH % Z|I$[x\"N+Z&V 9leB@@LV ϾT 75\3/U_'1<kzdA3&1'<RR@+WV Cll8 lݬ,z25v =AbB2X `pedP~r#Ȧ) 64ĖifN[JlSJO!CY3DM;r_ALRkeVՒ {1 m!XymFa!T̴4߁yDpo�2◠Vwг856We_t;\Mβ_M Krgb=7ybj27 ̭I>lq}Bh.BZ9gA 6��H LyxňR*C'#ݭLȇ9tP[ž.l) L)YYvܲŶ]l5+3VCrujj{P^ KUeab0)6TBKLʲ`Lclj3w@?qZdX$GN6cKٳG¾>ϱVskQb%}ށ.BT*[7 r. K<~(`nba ,UaԕQ[;tcYiJӦN=f2ǎ-acrVl/jb<,CYq~d;`ž&&3K]!ZҰr\+`~y2:P(TVe҆aO$z6Svzۂy hZeE/2`Ez: N xƘ,kUBb40?CoO!i1(U^H,t{TTLi9,w1 ~X+jU,JⲰ3FID GmK0g]8K-J,+)qDCmG)m�k-TB\;yŭ͝enaXH$[ĈVЬ1}n9l68Ķf;"HO-.Sa-AZ GҁKH%b9hQ/d<1h ޼ge%$yWX\ K%b..?3AG p;!8f+miF6 8O4ϻmMdܰ5 !&hb.pm$ ya7Z7>sZѫʆ&X-' C4#Q9 lB(CDbc˃@ #&\I%ya"Se# NPF}c?~YZzDsoqZ-3Ua"0/0Է8'ŔOܓrLn<KTFM$N];dO'X2vL.u鳎u# @'Kn:JGmJ P,r˙vLUdy))WzgZr ;S-&Sǖԙ9L 6כ}ֲcKqafސ8o>B+M˒a[ט%X>:noCb#蘙o%w[ЌΩa)+e;ΊɉiHlwɢг=DZh/FRJLFp2vWb< �ʉF4Lbwh!Έ:]Uu# ~yjʤu1l-=0Ie`"9H+ά[nQY"a^Sh@W,$9`f&KYL#'+̅bhDtU VPKlsARDZ4l 9ER0Eu</cFoxBL^6PZc, &Yb䪅 P5՚Ҵ12{]Fd pK"6 OLnY|a6 EKd-`Majر6`Jo%XaxKYS+,Wņu觩B>*|vbVS V7u>2h+~`Ja˲ eO0d)@,tĜ4I`kM6Ddo kVh*.1%2kc-#w!ZEGXZ.Ȁ (,Ikpn̚ݰ 0%$,80ne4 UBٮE,DjD<7d\-LDxBT3J2fg# CYGz ߪ[? `Hizh�-}mN,w 8HRO)fƭұXb2?Xnľa)X#f¼#tѷR7#[ϱ< c->1<[)N.Bj|=ە=&13j*ƌ={E70;hՂY,Wl\tIcY*)5{QA!zf,i53(uӷ[y"4g"aՎˬ lFd%i X=(!*ylV5 e`rjH8<`)l%7tucz]ƄYY0%vJ{$gYmJ(%XUiyVbnv/d-WKQ%EDڵ*UY{hD`YEäQ[Ň00!fNbS+9oHl\.V>lf.[ >e:1etVZE’@H>ʸTQV >zT@$0Hԕh߱bXdNu/0u.FXYyQ QrV (*s69D }zq۲<TXhs<,k[m}"vscfֳǩ5x.HDm)46/%&d0/ AC.m|;5l68󅑿N_ə?rռ?z~Atj(J˿ ~|Pz(?2ʏ  C ˛/C+#Hqd8<R)]GJ##Hz|=R)TG*K<\H/^^.Mi51.(YPlqà iж&ddu˂jx4]#bh~1/F[9^ z #h Bǫ/qdmA철v &-JZ~AⲠq}^>/~ lū/h[- eG W7< ū22`zÿo#0ՏGF[t]P.(\hadmAẠp#őbjxzuAx5<uA~-#]]] :rtqtqe8/���+F2^���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_data/test-tcp_nup.flent.gz�����������������������������������������������0000664�0000000�0000000�00000256051�14670056262�0022754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GXtcp_nup-2017-02-21T215510.300695.flent�[^7>BOv 3qN7=q$uĶ=`ȢhT"x�E.ڹrD̨" ʕk?\\|ջg.xx?|y͗_?˗?珿şߟ|;x'O= |ޝعX˫WN?/~m?Ǜ~?/?kTd_>KoyS_<}yczo;WųCIO_]xǿOo.lYy/޼~z>o[eo͔?{7'__/^<|z[yy7.wCSˇϟ?W__ָ^ιK?x~Ç{H6!{vۓϟ|}lэ^]yWS޽yw?|+_^˗o?z6h-.<sonPs,Z>듧]~'qò!YW|eurŏ|wi?^Ϳ?)___zFӉwm}\p݁OVݺ>Ɩ>Ɩ>֣훧9P쩄T޲Wt2<_%yۇEgzIDUo'oO߾;_>9?=hſ9,tz{A}?zO?]=px׃]n|//_p᾿p?}gu>.֍uP.0 \:1mV.> \|\OME]o7~87]x_[{OnZ';Ǿ3O~| ǿ~Qo_| lmH1TS ?l>#/;x$STq9O%Hڐr6rlGr?~"_q"'?|O7<z.գo?o_'w~xJCJr:lC+*=~?~\?{ӳ|_}%g?szϏ?~9_ۯ/T~˯?=t[S3Rxxຽy??8g`憇X5Lz=P9R\=dy^}W[k_u}۵: <c勯^z/G_=뿖S9y?x/~߼xK1qC}}ՓKqW>l>!;r%?/.=WW.;y查p>Kȟ<|zHzvO٥/!>}Px^R_ "M"=/[$}G]է~O?:ǯ򛖻޿}O߿xO ^<Ń.<mu[4 >uۿ}՛Oɟ -qX?ݟ.@˟?q=Lzd}q׏?w@>w{e.zkhg{c'W:OWo_<SO]D?ŃtY%SC.w}ڕŏ<xpq]O` Sw8א;.E)vD=ճ!й=ׯwﺭӱjN_V>8xZXtii Ok<:i%0o'^tpc=VOLk98pZ;z*`Ze<` =֠Ok?qeZLO)i`ӚV`Ȕ =5Nּ2C`T i=28`ȄxDJñ>lȳ#c0#W{9˱(1pHsYi+|p<1F8�%x<Ǣ`!!O pXz, { NVR<VtCau9`V&`tC`W`tC~Mk{0nJ+{0p!Ϲaڼ ʼ1~H>_ 0iA #Zcg}~l:A$ r?2+{٭c0c Yj&  PDĆ#2{|G1}pym^_c0c oXYrpұp1Y5$N+H"1NHc(NJY'v J Hc{ %2t)at0xZ`tDΟY`%iKL#Zװck>`ENGc\>*kX"eKcc,Q�O|pW&X<,K9S벆%r88+{,{% =q!(?k`"#'VrD`r0xZ`tDDY`촂%cbWs(c,QNKYO5,QN+X1(s(c,1V2uXs9pD)kXb8,1 WGc]ǁ<&b\0GXc9զV"x,{<ql%vBwc=ODX܋cd{t{LJ!߿넞~suzՏO~۵H[iȋ~S˗/_rׯ~zL{ځ_<xs?uuyOu?勗߿[?SųOݛWo?,~Pi9 /߾{f'O^wO Vkg  ml˿b+)+gWo.]=y?;umݛO>y{է|ջ'u\=@iͯW⿽ˉw){ﯞ~ä̻?erOg~y_}z._>Goa'[Oq0ׇOrF}ɟ˯=~ty|yݛV_-;{"?/zrA~m7<[λ^W>>=}R.|'s>9`eZNδ?4Lrv [ga ө6zt`aA sX1a(j8DJ{ ]D B0S\m8Kdvo7u8 _m)i_ޡCv7Q) %ٷ.<K`I? z˂ZzR[C8K 3Q){j>k9 v`3c[6JA-s ʉ6ȡC}}&ZN1 u C \H6x0=%3 jY\n# r(.hi9SҹQdZ.rw=X `j3rlXuuJgmx`Zj$gfTt j$|0 `>s9tZ> jYpw9hs@-G'`Ȗ콋w[` ֕^h$<"2jjH67ԲH̝ vP5͝xǣs^.lzCa^*M3j=uVGQ-- j9t6Mb@M+օS^"j:A ibzު.3jQPu'Υ2k3w6<ނGMs^Uy]m-M3jpN-wbԴ"BLP^鈚Ƚsϲc،ub, {>5MSig邚2u:͖j9&.&E=jG<=Y6cQNޱ &\QӔk˲2Z,1t=\5[u\t^,:X?x߁QӔ9ހVHAMZwF>XnP޺lQ5Fͮ-gj.̮e$FMs}y">FOgjF|)c) r򥈚%0v`7z]uQTހ 5N*ǶGM Ce3؍)N.'5͔u^rdAM 346145].,F˙)rD~g jZqjq4ţs ƢeYFMS(1&XjZO=r@-G.wKdKD:ݽ`ձj9;`g2�%t&Բۯsx7U<cϏύ0y<| E- L@Xﳳ׿yk(׸HS>ˤ}ҁޯ9FP7Ψ&a'z(?.f>͝+ %v2w jkN_VI+u7m{PcMh:N;@m3J˶tҾƟXlJ8J3AJk0rZ85m8]Kzzٿ,˙P˚럀USס}|iU@NdFn~,dwޯsϫ;'ylX`ݖ(ԧgt0{7׏i mCN;]ރk^sPay|Qܺ-{9ֆ.Hi㱘U6U?pPY(;AvnO b@8ԁ|c^  cP"u,dsT#ԔktLP!vH>pJ.mCXᢽNmB8>eޒ@u*)SDZw5,Jai#_ćZƞ6%ׄ >">5/n00>4y;PCxpfa%֕=h?K5h i3g\GvCs/?R P5.P#ܰu;S5RwnY2-/|i,9w~sR@iW#.;B�Q>y2tZYsK�ppힲ!B9ilCAfJ;ё_ udZb}-Gt9}\]UЙ>R xGBu-gp NA S.1+nTAB=ڡLIC{ҁr~6g)aDj2(,%o8rh/ǘ;G.o]e ׌SCic :k ިޫ(WP`÷{л<J ~$A#!4�t?2&Q3C{ -o<(WK4#ZӠGi-I(WGỵ ]=ĖːIFF|V_#Av[bvQ{Иb@븖O2&lPPNwƼE*iA ,'/ Ըnecb  eKjѺPsE;(M7o1hF4+A! P%DR@V25"HpA!g9"RZi$kЅlr;ͧd[ޥz�Jr3e4 O^:%3uZJD5 ݍ*[zBI;LV|lhW G&g:~j]BwR d2/KKTNyDcrd' :B =KR4E=(#<=¦A,nnY1,y[dr7 9K@VgryV9bqK e!VpJcY ʒsI#B1, q H=Mq�/='a}be+$DR i_Zjȍ_- h_^χ�&j1/0Mhi_2P] }p|B8/u|r� C)ڃxTdzrH�g'F2T4@mv&"TAx-% a9/sCu2,}QY8aP'2)Fe"Qq: CN!d5hf2IyN^I 鉙(<MGɠܐW"p3~V*%NGepɐmUL @EtǢ%AGZwd4*5X)-}!8#ƢrB[% Y yOF3/eTfH?y@Y&3lf@f(mve(߭89oȉr"0qD\�mZ\:Pœ޹9qA%Ȱ;uzp߷4:N)CpR]_ŕρd5ndį +RZ~ݪ`255hb̨;Kf.ީO4(s j@ !<UҠn =yF0UحAU3قc_<R:(_ PhYDɴU^ThN45 CyNŻ|)Q40z u!+ 4 $KQ྾lgSFaz \#2}?m8Lp@d_Td"b:WF!"!#Mb {(ďm x !xQ3ȣTJ}Z2VC+!AŒ ;ts}QN9A#ʄ-/}0 @FEDFc0xKeOή JA~al *R&bȡ*h_ϊn4BOv`O~w2ﴎ_U dGm5ˡ5ڼӰoP{(# K]WQM� |b:{jX,Qhxt7WvciYϱD|2:<K79SKon+X߸TžJ NDe6pi2-T C_on%yOƾCDĸ :wRq˓1dQJzUi2],%N$Ip~G 픧ߍˆ+nI$䁓.<{au^M h2�^�pe%wI <�ӆJ 0xXp uKĐ3ЍW8"x#˃kx$xRNx*yTm!(Ԟ(۩'JO=fe$b}'YJ8J(=аAwV7R˽.u1uVm)R– Ig 2K1y٧vH=h5v?? 1u6`꼎KSբɺV0*`DF,>Lx}dB϶:HmI" ;[̸[d_ ~AAZj|Tg2P4UyrXv[22!cTAMV`mE^*TaY}Sk/0 Շ#`.OD(N,`1 Z%Yt#`zcNqii6ވ4WK)dsťk] 2L֖Ҝ(P Lʗa@[)~Ң? o H#i/9FA8YVC9/#e K{ե([0ޅS(3 .^}v%m-Z`bR"( .֩/In�Os i0Ypah5ŒX1Z^T<pZ q 2ܲ<]P 0r B` pnʓu DBktN!CYf+CRlI${=e2 V/2e3a2PI "10"G4[sX@]Gc%X[BB&'R !PTm8ϣ ҵ2TCedd_z[[0r;d(Wk6! ( T0$֬G |XAٲEqGyAAUEE7-1=r�ʖcHL&.�+'eI X /#k䉢nŇCOP EX-X nT<LRaRQar+|k7okDnf8JW"՟ D}5H)@n-N ջdlɌ?"X.T" Fd i8*f1p0_�FZҞ6hK,Q=Bɴ$afFCMijFKtEaRJEz/b͠g(5I5Am%|PS1 #_-XL F58ViW,S.Io7^/6vQoEchz, 薧,Ov̻[_=쳟7M EU1vś'҉ƆA?G_LE?*KA׭2bG ]7-7)~)Ϥ,BIJ9R2!M4o|}VXF>{:xP<@@:)>ke .>viyY7F=%>MI5'\>d)Zx:z5#M0RTJ(>lXjQvPSNLyMpNэPjOE"B'؆:U;ѩ&ޅdtNo�E%MZ19ԣVB ^xi y6kͱ�U܄PTRA; mERfHYS>3P^P! sh jx';0M _&c( D50C'Ŷ/& v_Q5�y9ŲD['Tb6 Di;zbB@,]=-@[Jw(qEl!%v@A=W@p*\4�\9&ܪI=C{߬1-|^KiR?!(Ex6 |"N�|f3qd{{ MiHVB7 ̠�=F$2iL0mg\E< rL)H}tdqDY&em*L:Tl"n1nEԑsڅPG6@y(&>Å恫tʑMH7f4$w x>y)EL232һϮeL \^Lm38ǹEM - w_D cX|bZ0LtfxIgs<Y1U CNX-V AVKLs꫒�l _S_,@s*ؚ<TB)CWx[a6;?[/AϿP?_/%/dfPut4n(ީIcPȓ͏t4^/d9rz=3G%nE#ng.+-BlߨBG%&ԁd'k^elhe2Xf$%ns8*(3ĔǩPg٣M;4̤%h0yӇidhZ=y=Hh!B2V韽mKa288-Փf#{MQk!lڨa[WLM&Sv$_W΢)iXۼUodxÜraa2$4MYj Ij+.c[wWk2PF`x H́{݁GqZ^fVGy;|="[ʼ?}hScZ^0!@ժ2v[haEvC#5gHUI22h0W^'N1`34_G W󁶛R�j=H;k `!M;kzZ%.$!9Cx^�62._/epgIY1-o;:}}ufBW!:w}4 |o-<}{>eut&אHP0t1]^ty>ߝ1DMp"+RJ裠d�q&R;d�n:[8Zȳk6@T StRYzjA&q>icYK=awЇ lB]KG+#m GUčn:GA"!vg5j@ԕn [W&gw<߭6gz9z&FWCX=RJ @yo:6Jos2(D!d <7YvLIv6i=o�T\kAzysjR{ MXS0P6:BePtVjA9Et Uy5JH[ (0~B]&y\ 72 DY&\b]L;MN{&2.XPl偌urļԦb ԪP:[:9$%BVPNF~+N k#XdLPuw&aXOlY�4kX /Kr(<$c8ȥp8dp X#A\QlҔ K2NzˬmjvQD=i/w\Wx5 0(zePC0f^װѩ~%Axj %G0gĻJeуW &G1ir+ z=)­{3r &v.׸AW2\U E$sCŭVۤ � ԏ&&CdTW@8w!OiջW X(oх2z0Ȗ]�=M[l*aAOrYr,D4eo(J]$U? J̅^<V(**o)d@m./ 5-07" J6q1 m*MO2`<D * +H)2 SsM.#D>qo7i8[8^q] diS:M |UB-p?DizQdd\s#Wg~]oT70pSL<Yˁb d5zNm5 5_f. Jj �E9n=Utۢâq׃:QNܷ(\1/wdA.&Bjţ pQR{D ah|zD8>h<PwLXeSiAN=.zD=wjQ뿐g\òlznp+<FrO(ZR\_|=ʗXt)_Gsfw`}_B<O|r@qANAyϯ4FQ2\a�Z.}&=}zNB]d~}LRt~�ފPN'衖&J,G$VI(#-Dλ[\oZrT/_Z~޲בj*@-Q3tݞFt14[ ;JabE>:}0Y YR"ITO&'IAV-@i�^/q[�]@KWˀ&LuےBqvs=w6ˑt(On?{ D6p?K*Mv"t2VHtx6�wهH{'Ks{T'(ӝ>թ@"~AOu&\en,պUZ}nA�2(GT0JHu5Aq:i)JۂeK;N+0(r2?ymd- ;R2t6� 0Ahмd[qog:Ɩ.t5u뷘蔡c`d_/*DfV_&hcXm| M#Ff Zl� 0Ķ,d|A?e>T4`aW:i\:c"HG,M 9 2] ]wpDH e_3z$d,Y$؏e:zQ�k6 *d3AG|P:ڃ.HKhRڔ `5x6| !Y77Dd @Yi$tphk4LnꖷCb,db-2w*s A&Mfu.ex<`A a1?0zӠ?'ez^.=ZFVԍ!m\(VqT5<br*XźHMڝQFm%m-i eDTU%PUB]`i{B7 j&H\u#iԃ"l$2=w9�,qTt :wB 3lMwD%msʠ 1�7@lJ"e) z(aΛP8a޾ۡAmހd5Q)'}D]7rWtsraH&sv>Nr1%{9ދ#Z4r�!sHV6H?>ނa-M(;-]-y ww'K4 ԫ9K< zHQլ2P<mdoٛբcw 3g8XQ`IVfSִ;>z"b16& | [oM ʷIz"$(Yl]<Aw{ O0^Ġ 7KE/b]7Qz ȤpPҋXHYA b(B<* AQz0�oU0 V F>C&r^G7Q:yVpE(V +Ȼˠ$i y9p[e#ͬ%1O+HyTUa�Iaa:~~d5FR?0:)\a5EU�7aY ]=#TɁLH]Y,dt<2,T9DShr!W:˨(T SgZ` D+CϵWb-2,VhwBL w,1VW |kv M \H^z&}fI} pC’%]&/<:v }\a잜ՙ@GSYUBǪ mK-A4<̔@'0ո )wʚ %}�{]GO-{3/"{@Dzީ1GQ3uiy6e{?aQ1HܷEst X_/@4Tf֖aTuW 81FhnmΨr»2Ҷ^BBPu{XENI&$-[= !l":-Us̈VL&7l(4y}`)Nә}4dtN~|#A/Z)yPA~=Q)3Ϧǻj:=A)d U\Iz eIgfk.05֡Ohn9!+<޲P90$vhMѰ<N<!t;A-͒ 0eBô6ܰ%s+!$./PMj>Ntf9}0 j*7duң#0RgLs Kd/\g&AeX/Q?a}~ az1er?"@qQ7 30 S5tIdV˥2N/oe�é.Tu+CTh82{N~N-0"ڕB-heX7Ѐz7#ϣ@U]LJrÜ t+(lce,G< ԻP@ʸ~WȦ,^""mPe-C8zg)*"xGF dQFANHdQا dL~fsH.`7�VdZddO\Rͫ]X,{LfJ2W1'_$İӔvTOYMW#"OmW)8e9S%6Tte6LN9"b'[(?@~sa O�!N*<l8Cjww\S_(R&>m@hDkCeܬ0xkxl1xD!FEw|L!¸Fdd(َ4n %Њ 6  FZ[:(\ x0C) "1, h6FXp2OjPRl('ԯk(`.GûHC +I=lmaGRBPYu[H i(PTd뇇$LtN`z* E/EQxd6^ae#Y -c-h*GvGquU2 epxɣE]@4v5P_lI> 4te�-@H7cNXqBC+pk%4-㓙rT,)T6ŒwpB]P^ 3oFV$7F^;Ά:{P{/<KYUnA3{* ēP^d3eq ;{撆iA dQQ%ͨ!tf<X?L}Xuu՝[呫[L 2i0*m(!mc+ulYNOcʿ߰){"5>cxXd'G9ɶU[F@0`[-iT~Աe$+?Q[QSgyQr_&!yֲڪS).){PoIRIZ`q|\`dGtb\Fe(&,YcI+ xT"Hİٙ 'ˠlBsm$Q51EMx�Q J7].]tx-\T.BNE3HPA+ȷd*Τwpy-]d/4[ spƻTyk9J t,.'Q,/+벇imѱytJD+)jVQĈv󭺚4xKfjv!ٗQn !GRQF ,CbwZˢ]?!a&aw-)70A9ˀLd?(jG)m,szFrB笧6êltZm O[R8}wʮ2FBL%G#l%yDHZLN^;ܣo3׿ `rz"y=k3Ր$R+tc6pwH߃KS4E�]HnZ5[VbF`a"PBf4,@@,)}@AM*_Q(3Y OoH< g֔%2z9@?Qlv0Hɇ0HE)!> ?x / ^a„Q<^UF|FCMPf+Bbxӫ&hÜ? #sʦLMgQCʨ%$zZ ԫ -; 6zo@UBez7׸@pj.M]a'RN[]iSG 8,/rc,~q۪)Ւi!+=m4ɛEصu�YؙܐUd&ժ@hQ0RFAA]aA9[꒒jJ/A7jrz f ;d4elں@Wq|Qح>w[~b[ޜ']K>sX$}]G|W$0uw1ܕncܽ^gP5+ޘMKT?}b{䏑wf E+t(4Nмy' ng:V5!û0=4*0b]vZv*}ڢӿ n~o3s4qV Ѐ ۃv$d2� [ڠAVMokl'qQ"qHO"gOe6�S6=b@wOF&?d�4e4=PvH%TLƟ?  C?FG*<qvsQ2, \X@(N] +|d@<^Bߪ#L^-pmC t=a2Mx%(t8Cޣ'gǩ{E #aX ϱaZ^p:nN,%IG�bp<L\!%= SO1[Q &ƀXnN:-5K6d77d<tŦ} @_ ՀA2w`M KW/Nڸ&7w6RE];eP;zo /Zѧ-WuB=-Ӏx{T(v} 1eAWTq`-5+:0$D;a&P|2Fy8=H!zq'!_ cKrixz:D)4Gv1$8O^b(o7h~sl~V +Z ncMw FS;:R*F]#P_bs2u)HE8<&{2` Dӻ<F]z~$Xy#FHT#Cr"DH7Dp  vuI铀t�uؑ0oࣃ%  \CMK(-\ lP_^RW|T{?(o" Z̃(|Q 5 )]; w A%X0u{PX#)} }Df#u d '`طۘkOGa�VYt$3“dEx#Ṙ2;xJph> �Li2Dj,̆H>l,*yS/3!ǽ iN#Ke:H ǽ`[w<&bȤo)a:F<NS3Y;f$R�?2Rt$ y V t)CM֘uULɁsNvݞHֻ + #ꖛ9!fa@ . ]"@rz.7܌ 2ħBLF⋣`M}-! Qb"d)5@js>`K%<lM^Gb{iBʾRbˉ&M^6e<{ɻ<jI|c|DW}"j,qr|̧ç pV86}C ꙨVmxbc[b%*G0SnYҨ;tH'q#)w{2*<* eXxBAM[iTxw :E˰„8 gGOc0  ZR{rGS�@lXJԝը;JIY`-`z^y]Wi@$)P] pnQI!ͦӫO&^nse6޻{6ط!=I k7r2وֱқoNs :eJsiSa2#>;t@{W- 8+q2HV7qmX}2g[a%ٔ Yh,-':G[.9LTԾgٔz8:>ay2;a&V5nGQ 9lC\g @Ht)oÜR)l ?@ TZU/< nHq>f[dl{=;ɒMČC}.i [GFFvnq&Q/lX% GPYp@I%PN4 2;B+lB619 VٻFc¢@-@B @0~xidJ:R>$e8O3W0m W0RM&a4` q0@a2T8!J_W�ԉcͮjq7ytrAE )˩"ݨ=|DK;T2/1�1te2W_M aӝb( !nѱ߃(桘?"r1"ڇ(6g#MtWSq@W R ^'繐b+ц.i>YT`'ZT'V1 )&Kʨj*Xxw2of6 R HeUH$FOЀ[4� l�*/%ZxQ�퓇.iksFH|ʳI7pgM({`HdM ӓ?TSCq|m<Y:"[ MQ%J֎Iw~٤Ej%S`eawQ֧Ihtd 28UV XFuiI<Jo"|=N!Pxn_2a$|XkJѼZc9dn 4n(}& J [~BX.<+A @<l0^ã #;UqADEFd] f>QnօyKp�䮉suE쐝Gf PؼGIpe 4N �t!!)ݬP;k+4eC7Na TJ<QYI)uՋrFa'f+ Z(@ĊPJEPkHaH%47Ip(1+Z?HABRY NƓ+0?ۚmu!" ,D YE΃.-L@K"! x%d慻wtyd�:ؕMBR8tK&VH+i7<:)tgȦSrL%H[Jw:us& w>=v^NW='cy9�A/>[5 ;gY՗W X?bV5uyC-f`P7Ed;jV2rP l`ղeN̩|:ǹ|)]"Y-Z(l5΄ϟ(ZjL�lqV/(D<IAVşm6/o9P>rS7JMt|W$Kd'D:5Cl'{qNsDO#FrM~LpZ/+ *(qKYTӁ)ʄAkQizAmw:u&SQ_dE!fjZL N5-GNYͪ4ؘZaP%hp\Zԭ 3NhTirzo4NŤ(3zk0i}%uhX/daw6CuwS<½Q0y,z||ZxC0[L@q?um flܩIo6wzـf}Z]7`E)鏵~ޫ43d^zZ_MR<mT.4?bxgF ,ĔS #| ][͙3m]/2a*m3nQ,stm*˶Xo#/:W_fY=m[5 +|ڃ\L;К!=jO'bohͻ!DK[MZ^K '|9ZȎ9'A$p{iX(!miLr>NWL=i/˞H}mxdwF#9ɶɍmˡ'Yxu+B%ymNe㲭T$7{  չ-rQ֭܋lBLTYeZycQCPNjE^?ц9\�>'+惏6@i5"#w�VD3lO~0޴-^S~ծe:B[ )48xOZ l ,'_jLУzz%v* Z͛/m]Zz_,β( d^i^o(&ݕSt ]O/G)gҵlc@,~졼3K.<pCjyM +JX&ey,5ve3\lY:>t-mZmd~vS@%�7P<R+_&vZR� iHQRƲ!M QX3AǢ<ODA[|#7uF.YH[  Rhl#Veu}\#R6)[yoDsN0rn] k'xřԸ #-uS3'RXwjoD݇ĥRt{W$a@%ZEV m .^(Kܡy,E״#^_E)Mn*f .Ut݀#UPYzmAz|Rz~3([B9h kjkr/�VcaeD{J,|PNx`/Y 5*Cp Z:.a٪-)P8U[f.7% @>%dsN` |8ldA˦#k'(^Wa$(L j2JoLtcW@y)EWoHEu2J67=QKTNk(DHx׎< e3-3c`P׷0Y($%q-Y3Ĥı[琅BrޤN-WHAu Ϡ:oTԂYFS=^Q4&.)3l}e~|[aY-0�.fp!7 jivhX&TL5顡ˈd~hPZē%v9"^vJyrd4VSE$8 HnAwW`X Pf~Z\Wy`S&7S\] y|f/<4$[-oj~i jb' v2k7wWPv&QMWMJe:A \ ^8~[g 4#RWDpid2@-wMyί?8#GqwSr)9r5GG{)9--ɬ@e[e#%+ɓI9^P4T:lJ2=rHF\)[ARJ/Z/Fʑn?s%y2)2 ;.izY 0]lVN}!ˢx2Q BoKc/m痥I<zN$FJA컴8*RrIrG~O4W4x,t̴~te6āKޭ>P(4*"z!_L)Ik=VQ -Z8A"j'v<*E"*P wd'<(Atir$(xTH~P*CvH"Rh>BG44hcSyQWN(, #C M�hSqr@!H"1ŏG}wPTG:T4magW=׽sβڅ�V'xFq Qﰛ@/N%aTG:8( hdBT@F~9ҵ\.D=Lٝ<kN%yѻ^&)LWjUѦNR'.HnMfOz1˹rX'mi {.Μxà.v1Cϩ PIتL :WR/>UٴiH}_"d | ZLׁ0q&5W^&sSrH @>%P19 3!~?Ļx7O'$e4 G!T9 v A,Yfk(Oe3!!N+%{g).dk6gɼ:j@/ տ>nֲ18.b 6|^xF7f!GJTn Va:TccÂqשd131jdU13Au2A)mu/:9tb{9&͖KkJB'3([P�PVilAC׺9Ps"a̬8 !M1T33nD*18U'JF'!@Aɬ2 /Jş*<"9=H^(cVxHڨ ┾a $ތt]JQޅ\);Gf$4l P(Cr]eTINuڈUQ$נvZgeU$$,_b0 /S6XGl""CfSn<ӉRo a Egc"Xa: 2aTDn(@J}?$ȗ+~ z7W\ J j.8fY)u9ã@�\i/N:zjdW+]фwAI 0nbtKlz[njK] ngM_սRT"GBUB`{Dd4.mX=ivg:Nէ H Y'>vy5xXj5 ^0XBD~2(D~!r_LHӫ#n}u 0֪tJ7|mRu R2; n9^l*<X*�m7˳�׮9rh;-IQ؛-$B31fU]hZi#A\,03͢lŀW!8q&q8c* +HWk{xiQ^E ]FH~\QWQkN0 mzw�wAMjmMܬEV%5{jmB"1T3PJy*W޲u4Ҹ&CJt8ڹ{gZ ۡ&2MIʉ^A"izvZߚ}S097rٞ>vţ5xMyG+,V]!. ! #锸w-wJn|G!^],$Sn,(zɷyrnqq(z11s z&&SbYaRnX)(ϝPM:q3gLۧ1z 1jZQ!F]K{"ɓƧ3mT!ҧ;Wonwނuﺊ8̮3o7Ct+P†tkw&x$0rϓNCtؾ6it"¬vSB?ʠ 5wn3xbKE3eӝx,Ĉ%JOpYM`wNd8?uK:nc eF0IAY]v|yv>=ח$N290ϖ"h_@]KY7.0G=a~R�"=`έ8rrKyV [AyTLԝ1="F%[w}1LnHAr֚Y@Qu{JL'�/\]n3(LLjcـUuHBT1Ni*SmQt=Ph:_jd#o!r9诵fDSg X>)v)Ѭ"}ASvY>l )䐽U-} C~V}DF R R`шt2 6*-%.`MN6an)s~,|R$ B#0 AbO gB YFQZחDg&NӗB*p5Q"KeS<]!jUV0ꍟuMs19r9m/L[ِ^ͩX;&2yM$mW5ë 6bѹmnIY,IטTILU̗uD.+H휂ZBjh!q^ӹ@C0ʾYf:Sm4ƍUD�|5ǾU2r̵qɶ/k{,A r˸e] mRA內BbA(^|mlB=CiՔmU}B15e7U]vY\dے`= W^kd$me*+|,̀QmABR5e+Vūcצ ?-&Oe 9ںMe<hyiYâoD9/M1 fbwFN)?%釵I�M(uWXeC/�Xt^!I2aJ}E%aJ}J[Z]3&U/9,U3ךRTPTϽܮQQJ*9֧9$gmyeyPuASRs/b ɾ +9<*=^@?ګ88c%R.cłzF`LrӨ>>(S/zv<"KG%xl%SareB6-qn<0HcF�yA;,rQ u  4*/κteT^dB,Ô`DA i`?e+MˢmOE8Q\Kw98 ZJ;]-@%`Fs4U7ѧ/QvR<Ƭ30WةrxM2ApS=޹ +EyoVY1T#wU 𨨤Lq]iqV@%eO$ΑUG]Z,MrPI,4ǂɕLCt<ox쎐Gpoј+ * H^}tFBz-/BX͵d @F]IHkDߧ@M\]MMUZ/LTs}%f͞VnX &v.kW9C�Y;ww!_'i~4H<NT1ߦhrCA&.'C16Fq2BRZ&( `l2Ψh._Ŧr?ReiIˬAE).8;铡- iLUQ'2P9JyS>{@yMs4C2}dAW4@�Iܪ;h/vL %_&{dZfl5xSrJf<4VḛٔRO&f>Rf҃N3Yn@pB˻I/i =$.^a%/%YCkwO\e&Д<ICB}σXZdJAI5(;ޔ@ }ICTg qe.j9I`'Pd1IuTiRA>A4J-U~tHb.x3teu aYq2Fy$Cv9PWCC/͒E|eV 0ށ/>D<PGU̡zQAv2#�Ba-oi']$0HqH!A_N(+-HF1@ȃ( ȁyEtᦒ ,�ELX4ɒm$su/2d/N1ٝ�][/ 5{kp]7M+M~8X&,zf0ujR&<isenE{cKnR@cgA g$ce əRNuG2*~.[]bhM1F VҕQIelW0Ħ`1 J~P3j1!AdNRjLBM|214&jO)= n2@te5s&(gn<(;5՘��f5;AO$/cJ . bQg=9(ԣkO5Gh8_1QH[klep2S\ S%]D:]t�䎚E2tFCm+1@Xyi^TcP*GA0X"QDsA.#,G*w x&ЗWlJ+aT~3Dyj 75!U6`~OZQޙ.\s{J 2" R=UPRT  $zr <U2z4 aNZpu( do9HCU5vZ F/h 3b&an0Qz<N0J~Pv8T>Q%$̜ `fnSK(<A`w94((yk"]gdJdĶvL'z~2')? x^u`r( N~GJ ZO C243!ۇN�RoJV܇M)aXy҃xr &\f0*'j.!2(&Z=<m'P}fM <xXSRmJZ5ޛ+YmIv<)19,(_�iHw(T?tm'+2#j-]t7 4I0?{Ҡ? f{�^qMo%}t(wq(~f3٫|Tگ+!T|: s?ǍA}~v7^WW|N"OWsxM y3wU]ǡl}rg/ŔwU�꘿gds/[4? t� nk^xj|B3N?~6w}QҢDt}נgp>Hx |]�nȯF.p+{Q6_| %X5#lv> 6دfqR]oCnǹ@a�׋_mgpwig~QFLg}t?Cqk( /f0|u|!(a/<\WfTF|}%]e»<>n/@C_d;_C,Gr(lW _r?oCaWu~Rz{h`#h^A}4֗kEm/`gz}ǣzΗn05/a^\6wJh~e|yGW~0S_Ɉ)" O/l?!pV|s70;t|,V8L#bO_/&  ~I.KӅkiĖ/w]F(&r ].) Ō+WZH G*/fߌz%&_Q}'WN#13#T˻x(~BkƔƇ6X 1(o륹җwUT8Q 4*4?z٥3p@;)Gxz˒duY&Aj_v:_v' uGPAa4}"oQr=_j;?QP_Eׇ1{Jk+Q/WA"٘.| W>})O:[/j;)y+y8hpOߎ?_o1(lHJu?]UٿISzhNlX}:n{wblc eeيt pYQ M-l5wKIyL9X\I;u,:<0]o(ꦕ͵onޫxn9KNee7՝I]TվtrsR<Z{#FRosU?'1!ݪOeu%UvFeL( lMc&ivZVΤ$WW~W yݬu]~5r4j6puuJoW,^uA*Ct;ϪjlL0QgP0tYڝzu-s9иVEg`[:V {xo0\Eb}鮦&^Vtga3LQB=\=ޤ.:IHus[.Q)(LMlVL+)t]2gYzCo&\7tZ#R'yJnkH: }̚M6Ig"F;Eǵzo$;զf=73Iʩ[ƻJY59VUdO*QW4?͓7ϭhwі)M.ɔB@+(SO޵{KT5%j4(\nJҒޤ^moqinXAEOV,/ �;Q,sH׋SXJ=z+Veu֫@ѹ?˿_fӹ>KϬ^J=mZF%u).kk6n,WaMYƭO+綶+IWx1~Et)niVOkp!K>iRS> 觩L{<u^[e*.5tj:*hޖ₪zi]T]0w#iOMmJ6ȜfSWY^ÜBPiA7%k1,_t:ͦ1al麗n1HQS*J7)ޥ3g]&f[AE4k&lMUهW?oT__-_!tkܭlSJmF)Jlr;ՆKXQ%WrKZY]mKҫ,^q0+7VrT-"w- aTUILriK}ɡW>XV}O.c7D\$lETNI'xkH6jl=4J)jMJu3'Mv*ӵ[9e]C6G"1+**`.==@O~W*8-cvЪ~rtU,;ՖF]uW)m[bU:6tlVw"NG5LARϥɲMW0PPLk-JHGFRWz-DO=YT*n俣kBTٺ|K#( Jjc w٪ KL2H%b^wGLW_@i!KIiY #HY޴hYiN?42]:>M/nYy%IMaRvG _+R*fDcRVeo)ň_+~о*']E K EKS-#zPҢJ~Ii4tiu3Fg]~gJ):c橪S:2tCunS5RN.C)x[m4C'寸v/3~ zT%ʹq3 B2.?ʺ3FL.կF*u Eh [X 5jS_NUKnEJoR5ݭo<]7FEЕQy,[Jev-<C<{SY҃@L~Wcz /T/W+j4DrzozQfk0F+<}&(EHߠE?( -+kRs-=o^gΟPUX93K#FKn\Z|^w:J|(+ǎ`h`r¨e~MLbIx>t*LʙGޥN9Hl*]N V5erfߡe;KV4[d **!aeтH﬐j;j>:-8Fkͣ*܂LK!v3R N(.AzWP6's*&JJG7ITጎ~ƺį(TmKSX :9S6ϴ\D-~-q!mqu6Mkivktkj@+XIBϣۤ݅j#DŏZLVW(?SBPR+&C cUP9oJFӻ*@V+iAQXԣ>FԶգL-;Dbۢ~I-e ĈS]SdvN]a,)VanhS騆֮NZA8ooh6\3S9?ؽEW ʺb Bv�DTbݭ_Ud"^}78oFhVNP3eDV)&ZEq-�G.JuՄoƋ[<Rw@N[$1!:WZ*KTG�dۗ^Hjln+\DoPwC]+KŚ&pK֎zW M*t=LHwo{,Ua+z~uwQ@ *| NR1:,ZDTMTX限NRGK:63SS|V1AJKw 0w kjz̗*eQ6at#CKWO^th(ԧw6E9?t'WjUԟ^W֮J [/G(phCoRx^ӡR=Oz*9X]]*ADѬ% %@�\qSTiƌ]G:KTh[4FdUAUQl&–RZ\AҒOLE.33ӲUMc\- nꥯvcx+]2yG?yÔfk>{dY-}.ߢkjiVz:۵Dk] P~h(%"ަa|tKkg2ES))�e:+(޴p(@x~KO{>?JLFUl(&v`LtTyj�#-3ЌF2im qh�PXIGWnaΖ $z$ƻUZWw^=e=#(ɠ>X#4*/R!W�%aK.կ|Df|'P%]GoDA@fp*u#a,J lc{Ӂ ~ʼqC|dd#ܜ3V5slZ(.Od}Q=М%NrOig~>4g fqϛFɳ7mFg<5E rQ| 0Z_{hs0<QF(dp >-D[9;pEHX HHZpul:UJQMrWj+]~lJ߻D^h^ =~cڕٝdر?ԏO6ZI0>ϠVz_s 2{b.,1x_5hS RtFB 2澕`Q_7KS#wzf%uAF:VZ2נq6XÆ;i}?ȝOz>Pm8nLEcr@%1mlo0pB eX1}wP?AU}7bㇻϘQ`e|RnChW^ �v˺ @;M﫵uac(150Z3aC/2F"aT>[ >f"SW8/c{蹷(U&fu'QOLGαtun`=?"/35n SjXz;ת@ fA&Ah"8=e:<=ozKbcPҒiML(k0n }nXvRcUZy }d{m=;ޝA10<ݽ&BVLdCa]W Mɛغm5+s$8P'jrդ@RBCb"uNT&Jð 0f@]}ǮT}:Cޯ;*dM5Ã{WIaKtEUK%wP* D?']NbLgu`II1o9E Y�C54_y;>WB`<aOM'<T8Mws=X%z`4x'dz-9xKO FS$m&1A:nTk\(^r@\/tg0lh>*SqĪx"N-t4LT%R ejHh,-,XPj!iC5#A8}c^7k!2p[v e5P%Q*jbd|m)�ܴց@vRBd1@�M=[y 5I#GZ;mV9PeR>j1 ՕaA^ڪZUޅ kF?P*[vO4JfJ5GFYBK&|W_]$ft:t)}@DA-X5*{{S 7WB}ޠ`zYkrgrsQqN(%$TkGesVWE挙] uK�pyCj36VݵFS7 '0SI8<A2pPDR#v6 TZOC8nHW)0:eT[H!s+΢|>#(tlR1;(hN$yZhU Y4x<` jۙp2e2h"QJ NkiE,Y)UՐ00Z q(1 lc{BŕſFG챍mO#`v}* {/!c}楸QWl� +tnz�E'q{ i8/Bu.ZUac;ء2as(ԝd%b.C@u-3,12ymR3LV` QcE/pyaߢ U&CSw Āz&lޥ3 =HG0UOor#;,&y6a*tuf'h5ZY@u~ f\ =g5Ճuy|T;]#nF ttIs4 0VB[fBf9gH B5DUjBTD 2҄LB)}u-%x2hP"rO!@8Ʈ;Wr{^gfB:?d *ĒCQnSA): GM~!{g Q·F  եBk ze]AEN{>�Q;x^zP) Pѐ{/atgH&CRf".u\;@o4Nn5\m@дr_NP#R̨&q1AUbj(Oqq5/3 |MC`{v#8Y"T1Ȓuّo;|{|~ޛh}~¿8DB~PFPڐH1fr]0vzx QNm <hg/Dܔތ턓ӊb#c#;7kX,3ž@s(:H?0xMimàgVbt>)iVfL,$/N i4,kбȶ�V+y~�&o; HG20aA6$e?SE}#;�[$!W;78ӑi 4{YA+QI2$AQBUqUo?2T 9k3ǺlFyǖl[vXEVtC{88rFU5zF p 挳&Ogh 1KXm:Iݶ ߮`~>�np68v�lK]|9덮Eqs vWuP?9Q~ZV7<FwFVcOxTDr[,3zWW CBtlTglj@~Lb>FoC^[x'B|75 I0-5% w$moP1 ۀh:({oQzFoj\d)2[D;¸P,*\F^@:gO8  :w r; )3xerx"(j<d%}T5k£280s@XεP5 9)RC6;eI. D{*KR% \^ @Z#AOtۍ!٫GYȦ!8t0Wz3!]Dʺ !N30mLdi p2zݰuX~h eLxLFܘh4[pA:M^~{F}_=<'"M7ȤQi)wN%--Dx3 ƴi#%XZ[,kQPp|Mah4S /t T&8`Ӽs-+Y*rPƛ0|=7TQFA,afI)~lew G59ckx0SڷQm ˆtB1 /}ąϠ"=r_cwvf )dځ#&FB-̩GV|@:1:L2ϵ=bbHlF'yA6T1u��EMTF0* xh|{GD;VxFjnJ78'xPly2_ `m˽*0bYYy +QXRȬkXl { ^vPcDg2ɍ:Gv<hй1Ѫ3lc`9S1tK]dtFՉ CE صӜYF$; Ob Z=ָ[4>}a˶2_lݝAnVO�:+CHc{b$+Cj\W"ﵝ^ؔg"Bm3{?@=ꠜZZU\UK!Vmɪp@W}g/X@djl/yac1{C({>ҁ93m#�Fa9 u!b0hnFa7׎ wbYǥzT^LiRFWm2s/,1NQ9"p<diAPVU?D9@Ii\?mfۊ`dfȄN)i*#< ե@gبU#¶|> KgePG"b,+:pO7@)Xn!O M#dmDEtz Rnf2C':}9"ᖅƟ ޤ\9L !S2`lbh\Xʥ܍2* c=vn,(44ℕ6pVD먻SYX1]6w6`U 2FX@j:QBuo*.B5 | =rd2p :RLEIPɓ1}#yZ4-dY$mC]A#5m<t,x9M\%c%K ҿjhMv nH^ŏ{say0l"=n7 h7xUOzz~`ܞ|>>c0iq-KZ (--N줼H N ̸~G41aN`p1y*jم(!GS%q2ڹBJ6 UxP"HQ@@vT s3$#Kdjf)?YTބ ӦPTa6�Њ`9;||S \ng".jst%Y@ CbWVzaڤ�hԷ(3soR,5~=I,/CQVWq a&qp\3lSG-|>zvE"RWykh1Q8=s[J(mcӶǝ9`&Zm*a'&b$:a;1+PHf[I\XI-c33AR( |FՒ]!T˳@IڼM{!=ө]:NFݐ# A{C/b:БtrXԯ�!fј9@-,IGzXdn�ڸ|@!Јjr Y�aݐ:ΐq8aPܶM�zCJ:~c3]aAd93?^oł-3'wA̬y/.]1 =_|^ZZXq2Cu ZGSA+,ln-ZF Iz%8[n,yE>]Lzi4#MEڌ+6̰iPZ>8@tq*/ZPK4f8K xmc-NU#֕6 L ~7~淑5?\#!ꬷu @)؜}> qzɔֵ[FBn-EnA4l(S~_u\iA\-:LԠ* 7 ^<v_^/ƨQ#]k vXn B);L'jÛ!}D.`T 7F <%V1iE$ъX{;kBRNIHh( / SzڐҮ- T-8`z|AV E!Qw^_D`-@;6yql 39 poC+F`Ghh˵ܞ@]a"#=>Y=;^yO;oX,zl]Ʊ's!~7Rڃ)^fz3&ͼ#4 N,W߿p{GV�Z� 2|ܼPѠEstTCMVn]OQ_B@: t*hĶ}Vѵbd}hm̍r>1ŋX&C)~߼v%fA˾Pڇ  4@J#;u!F@ǹ[2v�A#ӎ;,T>mT5,e>o8JGslõnARSu 3YYB jV#WB%(TFxfs9Mh|r/BE.kbu®zڇ^2nfKX򔌲UkNx Wk#ƒHqȀ!l@hJZԯ<o3ulK><Sp{�U/#`l{dLNyQV8\Z-iwm6_4gP|t/B[%w,9o[7FF0bVV'ZFGPϜ%/JJl(e\lb\G ;%a96%B.ȸc*ȹR4sl PN!N @:vN61fpiT$v~{A=t7&$$`>XW1+mʰ)z|a\  �f8!"l<ӣbـ]FƀU4"Z&YL7`֥�k. *Xvp H.J;e#lЂQMھó !jbd@bb!1}lH015&!ˆvփ >^;wz *jxzl.&&^{?FTybS;=�E4f+uҧ~@LVgd;+xCׂ6g|iPUcN[m%8^8" ⿣G φ_cVK_JXI=`pO d^K_(}IYn=  7^(`�oڝVexG(@@Z_E2Vv*bE~7Ĩ$bU\DZlcD|T9"|u恪ofM@Nт֣85pܶ]T&s4NugiEO]xӂk<\]IhuaZ^Ǹ?MQE762eWr(}f@C1 ƈk^tt{ mV Ey>Eѡ~7(oٽI)&דi�q̂*g"54TK!\Z&΃q\1ZCG̴¦oEɆ rZ>uRZ gbϋ 1xTj3kn!&{sjD` lxf~18|.@2gVa 9 Fn lxyJ(n%xƷ "^̧ cV"m^Y ]8fJ.7P4*DfvމG8W(QoN8Ӡ#j?Gbz}(b}hϸ@FZAq']ckvUos܊k8aiwJ۩aiŘvVO菏*s~6M\W?ʌ jɀ-n)HA*?yD֘/Jf%Ȳ';5{&XRآ ܿʄGS~hs<xKs]L�t1e+pp:55)tmN{XӴ\`|!ɡ2Sł<?j2Ouicf2,q6f0 3x]E>(3DZKt_婅]Ġ}iM{IB쮑3W՝T/ƗZZ ՝$ 1h0,pq LM9fnW<2}}`ںfC /BxzG1ÓsFW[s&4Ta\3߽2۷�Rt2e7 \ۡu7PTIF*Š086S0Bf.8ˉ�wrSӏP!OktUT̃!܂fPH %f"tnbT9\tef1iȌ5PygpA i#ة86oy*:Q̹嗌X Z~d91:wt+J� 47 ј-,Y̪مx0~*�aQ 3˼3oDYPxs.`-# n@;M|'j-r܀0+ r 4Vp˜3 "z0C7cE80H�HVRA=-.w團#j%>0x(vAʆjo,BqߝՄئ3޲Apa=F~ VSC)}ʅ]^!l=Qq0D-Ȱ f+#iL3S>D�m? ,9<52u@)Tb[|nGvQ-QU� @S0`̃I4 ܶhL?O&,rbmT.f, JQ#Wpf ~h::l1>A 1qK/JepK n<1?sBStt=&-1a&BACBPצ-`&eh{"_GWTrQU.F}#Ąr[/Jrz$Q5K%|A %�IjU^4TXE�}*Zrwׄ]7k yb<oW<Cc(ӵCnZYCG*m&rJDž0Y[jN1,h6uC7zS뺺x w*c))"02tJԕ+qhQ[$e5:7y_\aW4{:t.Q+\ w9RTy>k4#\{[PGKqu\i!GD!^PM͡ ?Ux:fkgHփߺBMOO7hz|=)8aE PCs|T)Hw#kkFѢάYHm3� iRHmШHb[^S팏L\͠HQe(Vے;ѶH m|X=@t6hlqK'I5 hk&6&Bs^1lE/54삍T8,tj1eWDlmWL3OH@ "З VPsfa )rR2AKArulQz0W q3~`Y2WaZ*!Y@VTAH vV!�5k^R%|(!@TGT5_@èu BJ:pCZq–XOĀ[ 'qx*w`)ZutVUA-ρp. ? 09FŜ>(U?'hɻ`:β3XE;G$t}+(TRwu-y+x&:5H.I.saJ-B pRC$SnO%tkF?xWjZ\z.e+MsYxs$t˻F;z>hLI/c Qշ ð+-hyɯy E'귨ScgA3?8Pu4A{>JX$ݙ5]Xa*H,l>Z[$M3qM +(A*!6m\V94kd?T'\QPFWĔԎYn"X;,Bίآ2~@!ꪓ/v+\Yq+& V3thf~heBK%nPu_}r.ͦ؀x3B86tlϺCqOzŒʅě;-wֳ\:T_k\iDXBm8,m 4Lnh11Z4zƳX'Lb'&F-e\R,L^#I)-2Y; 6Vwamd$VӿWUѤ_PqZ�k]MaSoȻ iwWс\(&մZM9fk?%EmXf{Y7TpWjvwu7t 37!P7TZwW UOU]b~8jHN:Ь |f" "ˎO12ZU{5}Vi7`vM A2AeU쮿*O�<Cct-rw~PC6pcuI.֧/~eRimu3, ތMՑ[rLXaRULHyeLfj*1 4{IЮVɩѪҟA!R+潫Q.VTx9 ;-י+eܹ,@nU֩%hd@{_YU]T & "j7DB +/9J}F@]\5V[% oZv"Ő,3P~wk3ȭuzM@!�|J]<S} ê'c�;uU]q(ϔ*Dh,Rtm$tA t:nh%Y.ZЖiå<!'~?pZ ']jp5ni^p£XosF:󊺩KWc_y8{NI<= k -f:Agj]I9Ch v<Lj!OF Zx>ŖdWVotz橞MW*bnGZi+Lh;ttY+17jiOm1y' JBfpc<Ek-+<05'WdYZCZ -/zjm aZ?W0ƋV3#c͜D0RqT1!FĈ.C۩Gp Q+ET#jN i=Rai$CTZUW\H>r wOn2XOwDo a(_BӄQ釪dgo'[}*s;B<BE t kgEjNg<WxںS,m\XpIk|NlDfjTjڢ=.]^9>R 7IC{+JG{U�aX*]G8]SB1d<ZS 7('Gr@S+demnu;"IQI[ȤTz'n>-q,i M/د9Sl)iWh+QÛ%A`Kʆ9;+]pѾVc1umsOOw8zu"$O^ʰ|qA%1G[S˟hfI >,%T*ikVV|Ѻ\|Hva &vF÷a->VcBKB=*rܘFgHkbz[o;3^4K ׳ҞȧoFkJT7E@cQJoqs)eEJwCU Six~ee]Wu.rgѨf3tѱ%)AHJ66 -G/xo/?̆l ku-U3bʻ3<TukFNW7 9 +o(X[h(0"s<\\HU3Ķ#:4Q;,jO+, O33f|d*i?}I< Y&*r�hip7ެV:$n)Iںp n>!IF(G-HLN mCuzb zϊ+x/g)+KIJb1~Y_G–- X|U>6&zTĞqX@)q|BUSvcoFd mA(4W?%5QV>65\t=7Ben$a5Ң@bRI1њD30!9z aU`F̳zR,+11월K*HKd8": 1�+b1܍fg=t$OZO{M@<ܠ:YrQAUw&�EOYLP*0jU߹(uNtnHAt{L8b!={XȢVyAz >k7<oe ;/B3|5(:[-3r>͚'&qT=Vp*ъq=?\/\xjhtV֒aEc Z G8M}J=oCO'-HxU.T''g7+y󯹸3![fB?mdZ2SFLxez*„O(Qθ#%X3(u«}Ϭu \$+dӧu dIh%;e"K5*t 8w <&79n 8mpPXjqSm�xV۝#‹'WH %=/ b!H/BZ&('` 8InS-H̆2 p!La)i7&<r5u/: GlNAz"GvU<wY W kj-۳U' `-MbΣL*reܿ~MZg{ALFF'[T� tl,Tjܼr̴^45?x -ZY]?g0=WC1ô3'.iHB@hBBîJm]9]Mj&$N܆OǦ]V?&̠]75Fjlrx=AdQtPDՍöJns=<Y)c MV=Ky̆A> *Ҿ)"!ҸaQe(F.2eRJ= 9QEruB=xN:D4Ozwe-MLY9WҝO!Lz-~l}Pd ;6p3u6JpaƑ0qm^V%w[7Uu 6z!V@&ӟq(9q'86E8f3nfH *REkڸx#~Oak l6RVcm~%j~ )\!YZo<<6:Bʷl }Rz弳* ;57cU昹VmD,Jt�ì^ض& JЇIK6v�T1TbbsLeu·=5PŪBv1u!wW2f(9l0!TwV uPқvcݜ} L#}sK]"堊;9!,#t邪Q *^qF?!;FT]LͳIlN yquw]O %h# б TNպ!i _vsqaCrh@)Ua#] cL*Q\T]P BƳ>~fRRbN kZjErU"Yv%b-B-,wbZFL;3fUn-5赘`5rqiLcc9WZQM7ckkeO{R0sa<3vJ3U6B^*cuBIAQiT|H <>WBJ6lX6v_& zi|^94-`8uba n4:2n>\;``3-cw :;]q2S .; B]"-Q P"IkúE[nu|#J駋#BFҽ2 *+{ :Ǭ5~~lԻujJD,_Pӣ+̓œ7JwzB dm {EjmQl!UlD$.+&myj8[Ēt-t8ۄHNZT=bRB93Tͩ�ڵ} Ikp^CMq!-v%!b%� sQrOHSCC|F 4L=DXHF0Umf *+DZ HMNaQ �o?!J9.vMw0өx?Ԣ9/Uv u't0Wςd=yQaL1=[ԐRm$Xc-F:&Hƃ�!oXJ6`%YuPyXg[FѾJf G{wCz=$sx֍rhLLَaa=ž ҌKnCha{H Ѐ+ JWwm\̭1 _8ŴA{yVdY?)GmW,p kr+!#0M[5{P*5"&[ ^}:2w ZjFt'pc9Cog?Q%~>*eQf\Э]6^� U.ݗ%3zGSqC;զUܠJ~ծ#m׎ZuX 3"[mF[UA6n[* ȷ )K4 CYw1HQ<=T5Hve#yqSUk?&CFO">)ް]|\u'n5\(:E=�|Q}�+ab !zg0�2՘q8'IdfPbdT#!BX@3y 8Ocn1^ggdc+j&Z 6;aN59cٖ~sForTӈYLԪ%Yİ!âXVF~q3SxLJIKK.n DI^�GTICaXdrh -ISA?(CtO1fN%.GO+c@\#Es C 'Fa$!:}"ѹrri�[v78*LPSuu8(\'Cfx?Yn d7S-1bB| 5qsJxŰo5 mwN(-$أ$q'W07dW@v3fba>!*_bǰBd;Bno}2TuC'V;fypk׾f+UFn~Ԩ]8P!`[Ԍ`|SDY8-10"paWAl,4CЪ3F2AHR-;cDKYN;)E㬔PU|"nՇSVKjI݃WJ�1MNdO+$Bv]̜MUcC&婯Xƨ.LƷzŌ0i\hK@='~j1!ĉ+Xh2ǨZW⏿(zo_|7Pa]iZk*4 |x&Ś;ա5&G-Uڊ|[Us=.`0`xYM`xo^sa2]Ii&J品VHCZ VYeF)d-019'@5F@ NCa+;GB@fa3`ыZ5.Ⱦ`SiQ!xݎ *߭uv�ъ6ݽtUPCdաH�&>Z uj;p9yh,2O>[H๫\ 3W(,teӑtv XELp+u]KiƲd,IYڢ5RE Jy�do p3@):6I2@۪xfg`^]Jq_xCNU +Ծ*-&1l؉k9UۙYB#p#B6&.VUMišv=mh3P7h}fS$YHW<-Lub#;eN!5@ԕT<]pܯp`hpDIF oҧ!wn(STy4fp<V8c6ͻ*y.ӹWEfe19pTcLF11KLw ?+>y>oÞ߇Fm5`2}280P`X-T{&;Ae Bv]=~>s8HM[)c,jXhC'Md1 CDAK@Tꇕ~И*J-9>P>];IY _qm s?+J_h&1l3:l?a$s+0P:Ya#d?Pd1V 6<q0f݁!¥.3<LH^hEwQOrݾlERRCA E"ˌCܡ]qk=) C JpNdzZMWݡ#/B|^dǓaNp5YM|^UZSݡ02j-B 12M҄b4RM"o&Bԃ^=~+^= z:s35p_U5l-aH)E l}fT\1CZۜb:L=96 1XYɉ∙o [xkubFzYJp9NћrcGURLx0J�Q&h@6j5iw X,$!'gKqYZ�Z~kmF_єV³rX[yT'̘{y(B+I `%.L1koE!/ϖEPm艨J@ͷ3e>[p{Ы7|nӄE;"o(1)m1[n<c�ԧ֝v3 FYő .6w-H'Ҝr0)'v wpF^9NŔĂ> Em-7>k ٛʭe5S{T#GFEI'vfVT$c^h`t9:AG+:Fw&tQƒhEJj>Gk<(D3̰:1q᬴\隘nh:n C1R! 了DjrZe6S*!MXeUCZoR %fٔOM]\.]Z7@aFˌʈ渑bMr t*T[2 1A6,<fo q>TQӝN Џ,5Cq‰_)8(AbVzT6`f9 An͉;*R3-פbZi-0vxSa:1nCV j#TCsp T<K){mqWБ aǑALHT8<* k;[*p9%)8n/؝ҩlX⢞g#q196mt15ʇA,v% mL~7ߢ`y�wR!1db@d8kc?s!< (V}"۝հ/Ip22&I3MC#␍hY3j#xB4&q =Gߒ#Q S@uy9:K:4xӕ$ QP"ߞy;0& G7 2|~2,&4v<ku+Q3 eJYi3IaZ1󄼊aIT gI)quEf(q d$K+O )cUݕ7hŢ?cSkc30_V+cCeo k`!is2Pd~5DkB`1cw#h1 v}5&Q#xɯQXYkV&Z¹ۢ3lךԶm9i"NM64_94 u4 hRComugdx vU RӲb|\X[f0YF/UVQJ_C�'\-.7&RFoL&*PÌ4Ur ʕa< *!ҟG`:;2AGRte?#7CA8M_c#G)B+vǑ,%?0X6E \WOw@:s:`".u P;ui'@J2oB3GU].!HzM }*-K=`^ .>ŀ v}J{�/p<nf'NǦE0a4IŪ׾6b_Tʳ Xl~М_!? xZBRf84S!{}XcA,L(c+=s 6W2a !)`jF'+-"3 mO+%jT OsUCbSRLҌ* ӲT^T)V2m Rҁ4w"$(Զ0ݧ!-� tԲ.yB3y_o"k@1J 1ᜦVR a|֬V,rcKI`[>=*~AgD}vQD9`i5F{ 7=f$j1ʘqғn B[r*}-F�t9Pp6|ԇo3K :^\cr̠nEJB[QQQt]3}'t1a[R0}O)rV9rmDNʪ*<.UEv[rhFq~ne&jM�Ƨp0;oTm|g>q`CRcK^qnԸ\X0=~[k#WUqv+ȷF_JYKvZYwCʵ{y7>tjncN�S ,8mV0Б!fC9:hT.8)SE"01TQ_#vv㪖2ƛ ̮U:J1ZKU1JR+) D I`،aaiS"r;G%qL'8\}(^A|ζ+Oycـpҙކ`4nEPeRK`YFVH0=ڦD�s(/i m<a󉜿g<6&d  }dF d]ESW&JeϳOzӿP30J|&ܤX+gEɢpWG]P4#bj$1O &Na mB7/Bw"RM a FPCMB$JLH SYq]AÈ4+<wQ'0t[A.PA0wpCmC?`(SCs%L {7Vt#Cy_s%QuC2ɩ `*.GvW:!3Q<;ƭ GYfj,o*ԯĆB C:( ųNzZhV8{΍tn; z1{C{Plǻ W * Hԝå B V OO{ӬVSÇ1V*C\ضt2k_/ܙP3PfHZ*G6v[~1j9pkJoK &[g,F-V8z XTF4^ 7hn׎NxLdZݧP!!#3~Y4F08Hf̮,|Dt9Km w:hҊAl[J .S.9 rO(4ezcǠ\Q]E )ʷ;2L'wܪ3dڶBv[gy { 4#07y[7S˜ԕ鞕Ku=ˡm߬ pig?K_u1w0>M{=Y瞄j2)fH 08q`P$L/|E 8>fxi_X.a uݞ: Bϓi|v`c/Bh"*mJo:X_+/FXt!H r:Q& Ӽ3Wc\Wx/WӾͨ4?B?1VTsw'$bDŽBKj-;H{TI-ھJ(Nը3Uu^ ~a:F\ klB>|b+;VXpfd )ptV 6)mY:AmH.bfcf;=o0!6k" 09gUqMCRW#^6+AX.ٮ֞f/L?fk.hah$6}kR<+N+ BWҚ[ ( ۺkP\.HR||GL<�3 Iλ^ϡl.TBU6p_[_dvLxc6(Dd< >&(\1gڇanaBʁcY*Jw8'D!G (YϪ_=P*RcF_�σP ak<Kwk۴hlS?RoEĬz*VSeYs+<7'Qp]hѝa,1kpӞ~\g2޸i)Ё@%3f7tYk-=2_\.%fBТ5WkTXnk) HR6r1p?EYPN%W|T]'vMsξw&:dT*wCsJ{dWW8V'C563{mU%1dqqA wÖHH@5B/  `bvSe\}ZuԵV`BOnЉ~W Gg@LI~*4&S1.f@TUReضojay;@S{@+7՜ /<Hh!+P) J�Q CVr҉c@MC*8G7 ˔_&7Հ!A-:Tawc@�צFڅ}c*-Eau!L&Ƒ fqYd]aj+n TlygŃ2Y2ˠIG 76L1tQ.K(b[J@kш|yw a(܁)) d H0ɀ{d>ÁBeC LxpmA0Il)L6ak)-oT<'ZW?,!70RpoA+(i~fbD:*hUmQ}M5w5:zÚQVg'owӫ̺C1Grxf, DYlP M4JV:|Jz7?gzDku\x\RaS"f|X b_i JD˼|JV+d`i?PDr;va]@8;])L* -{+85 BzQ?Bmn&2b" )LPAcrOKS{ ীe D[^,'-ȍ_I_ i9mUKTK5J1nw\GJ Şfǎ? Ҽ ^M+*3d^W&wAh.6RɜzZjdꎮ?Npff8!~<y9acV9L){}E�{d ؝3(+< KSM.N9a)*aW0tKEcMyּ$>oQR:p, rz*;ƿ, ”)8 w%=2L d>Ij"4:H>e1�[߭¼rע7DQN=a wh E%TIh+$*V@Z pL@vTf|~ /e^Dd|$ dPi鬹])ޙ/6M MW\Xi5tj'F<'k{Vi=M\8h3C-ƪ$Tg m�C7$ z֜L>';/ـ/ߣ?ufȻ{48ԨfK{*_Mt4ySaiS1 k&P"cDI�a,V7QprizS.r[YrAPQ*k5(ZY(gAWo Gf=+1굆 <"D-eFMŘ*(2bo+iRh!m c Ϲfn?Z{cOCͮ\9[Z\3Xc.B4ȝ竄N$Η aJHcZhE5$7+PEHL:()Ne4!5ZtHj% mbFۡXv6}_܈O6eDQK[XCr0jJH0Ӭn!4 TD -(RV$I+,8YnJtPƼp{|fh>>סdrSh5URP6*rmWh81?iY>gy~?`aP|�A{;,fڛ+3 sv%?tttт`)tf5sUCI)/e>VX潍vr L~3L A>U7�Bq3TO՗qQeW0 4l<^{־;B^l[T6G%hzK*mה9qe#E&lQ{o[;i'Diㄽ~RqI! <?U\ =K~rV5o̡4$ (4GֻBXiNq{,ghi*["ҥ0DA"lpZL DpA3X%̆&@xsޣpL-O^0L!q[�v$U FYWKޥ'|Mi*3ꬮ<�*=)97]VQ eߵ eBދ>@u腹E@r�Kl?lDT9y?ݻb7'C'P?[x7֩[ }˻n1[zpCځ@;t5LAui؀;C \Ǵ.NU\eF+k.0[*ּf!/1�ga&s om-\K,?O ˂2:{bvJeku{мa#MҐDjr ַ#K>tf؊w7 qn6e*+tw buZ5~g+2<MPGG  {OQm^]QM/0$WQD~9R!H+ܭG5hڛ7`$͔ن@P|P*Cгŗ`".Xֱko:c5w<FP[mzuA;xufc]7ZicpdqӍ J LoX麔ԸYХ{MĚJXˣ!E^'T6[o']qHda{ #"pfJ-Z)ௗK ~;˩`1uP3MxʂdZaZPC`ߦDtP5 7qErDȌa^a9SaRnmK?ӕ3v5;L5 ~J(vq&|�-_3"vѬz!u .UB˜NXz"e_b1+;(r7QvOaI8LHw#3$<.Ft%[ ᑹOLWI ;'<qU`w`yP7q+wJDqۡ[�]|g&X2;`H|AME#TC|ئ^_~Fh J_ij A~j5A8vgjكouUI{h2V%3(Q11h*h0Of[e;Y-�=(ev+X0O bT=mM;\srS ;t~?^P+)(J#j{rgMu=JtJAT'"%\h?F{DlhI6y2JA‹=:s( nI>�T{CO$LOYu_@)\# L%U"I:X-U^4]4ƚD&t<UG Hnh^ Ŵ~EѾ^tm L JPcv͆)TktWޚ(^L_ؙKo,1WtEPY^st 2`苃wnp<Q?&" Ș Mtӹ'%`uWJwF gB{MJ8?xU-S ǡU*D.u(bkZl+y*tXﮓ{-PNUeWM<Ž4ТE-ߢszTA+�V~~Wh"Ŧ"ʘ;O8eQ7lÊ/nES]x`JaV4J r 7"0s;J榓UOU¸|)LpBdY S'Kh0=]xC$(!ROO^¤}" ISe%MnwTp$-y|y_e+3;/`5ǐ&ݎ{I].͍Bеc  59~hbh&:*3QBpƘ() ֒OcÞ2+ <Sk(ln@CX UG6;WĿ($K Sth ݮa}tQ՛\?A 9m83/ppϤP%x}d_3DVj?_eDQLv9|P8}N AZK!ȁv`C *̾0[fW@m*~ya87p�h 耨(e45qhsn @ߟ(}Oj&}ï^}5 }JiFǸkL{U{+Pv #nZoˆtR*^A(yWC/:S=Nu|j[cjtű%؁k>3. W^iUEFڑ@OcB׉Ŋk�C`,meԽJF Ϣxc!%FO}ut6n"󣛹\nY7mw;HnЮ;{Yxa=c0El,K5z'`~ye>xZA N>*jTUUZY1q4DIU%"β@sOU y!'RYFd)E 6KkRw]h}s?3;I+4~{~d;:aHSV؞tX$ aҐrv+$C8+[8i|v7G5b#aҤ;^\2 i"ObP>L ڋNVhuT+cGJI`\<vOxH-L{E#I497 JXfEI?}W$ ť#4z!uF{tV mjztk:\[I;^Զ~?P*uo=IIw�Z;2N=vÖc;n7ߦ/ _3~ v[;`R:q_<ZB /jV9SյpyI>g'A36A76d0Nd.Ьx.8N1E׾OBC4T5�')O=푮VM/hx@qWQ8s>˺WUPYP]Pj|16(BZkQpfH9eכp ?K秊bGEgwZ}8?cR6rOʦj 8gEْƦIc/l~ju&8)=)ȧ0Ɖ: jU=z1ע5=6e]_|I� { 6#7@.�d=w vݕbiar׉hժ�po1I$.9e .-x͌go4bv?>\Ol5JbW &g0t  9sTV iU$AuN\LkMәumKQpLHDpa$}=P*f? ~ ul㔢C?fN7g1kUaU XrAjYT3>]p`{O' 3]gSi7S>87%Q5דAOVov0;K7a3L+W�n /#C =EkFgD+|U٨mzh5zIv'90M?S2+ oH2(mQ뒱،oЂ#GYY{mO|ӈa[@.wRCakӋ/V_Zg@8 G4X^)4vϕ[(vwˍ&~9f"J6zj_( =QbP$W?eEm`ȉS+ŊnyW.Q+h& :QB'OT'B#rJ@t4IcN`1 {C蓽5[o�_uI ]^Q|6w+C"Wt@''((Z.i^Y�B3`Cb:%hkyi ~ƨKLG٫_'sLOlÇ%ePz?�gÁ=ۿoFOGAOU,[ J,[ǯtLU s忱8?3g7W@ǻo4RMdF#WfԥU_g5LK�ĦU9ڍKe;cB2Vc8Vk0"n/ʨ0Md 4M#p!%Y Xm^_hp9񭿢nBg\�:ӿ;Acz4t|ϠKt7l7BX1u_*#i:c-T"F;Tَ|<˳g_lu҉.*Zi T${KC,h [vj7ÁuԃaAN{_o z,rt䰋4 iIR^Hb:[q�딾*zTPhJ D/6-ǐr} UCuP ŭxaezBmG>KCsjkkyFzpxkHC>BEhˊ#HMD{RcƢR]u8^u$+j9CkKoJiH^.}_24G'RA=bݪI796KE-#!; �/TZ.L)mP# PSU0]C#dYlfXܯs٦4^Y6ӺXm`8us#a8&Y=Sl!5MaFG֣X"|!t{;'b+AYWMpGeOP I1'Lwg)@7ܽInJo^HXvUL8nh򕞎hV؂'i"9N"+mq2݆0;I|:]QӃa[GRۢ�a77V "mE% 7 S4%*03IKY݂^fIK54CJ]A jƟ:9J?'^]N: < cNe_8ȭP`bݰsG�Ds}oo?ϸo_RW{^)MS rP1m9gB6resp3 +Bh鮾 ٺ(j-e>BeR/i V[vxݒ_<W@>oTk7$ߐTi*%8q N"gڪi|~d;x߃)+(N7ÁyS* 6zǠL(h*+QzyNQ{Gœʉ鎶xwbTeT!V|0CEEi ƫ2q / ?.NQ]D�&/MȆ&:VN\Jnrɡ7JX%eI̿%&VRn9xL6׈Zޫ_wb=4&)2.2GTv FHfoJ8^IRpucn'Tr&Vm&}XZ0^nRc6+5Nz~Or}EyZ4~CdB L|P N%BXB7{+ Fax6teCev PgmU Mk`'F�svkL%~JJdᐈs uvy/t5o]k])Nc̖"12thY:X}Br)#aЕ6!xy,5%%&x;K|c%Fg36K1s>T]`O2+fD>6+դvw&Z}x0W*c";.@4'yd\txAL-#a#S*}ˀ<.9O6Bw�D'L6 dl`%BlbVdAi6@NMk"* D%cԦWJYŝbG;%#{6)�LbS.x= Q ¦ GI =F$Ƀ.o,48o>v=-X_ p[_Ptl`_<ؓN:4n2?s+B{m` 6IH;_h&. ǐe6 ?zya?bmUwN!ݛTi)u!?dB,h`VD=1*6�jq\CVnC~Jo|hCr彦MiʑBBqRUm,FSWQ5͆9I/5]A7k$ :CلXF)\[9NeQZM^#V)+_LԫkzvGIMRM:g(/VHۄEk8_c! Uo1rJI'#�jm3H< 4n1{V0q2PZf^6{QplQ2W_3<  Ql*Aw ?0(  Nf Qq[<qK|B(`OJ=axq uXt|z-h$n} e�z:FqI쐊f򬛿Q߹oڷBOagShfӉd YV- 8C(ǴBiҚ>R y~RPSw@;x:9KIol-SvEC7+⍙&  l�$C3Eq)kIfO[BP<<fҰFSK\Gd6-gYJ-K$18VOz/p)oW/6c3 E DC_4hw~xN #W�XɕFT As}APbsoA?R2oC3CK9wgH`)L:X(cd%xO߉q ){o)GxH2݆craC %' KRrZ4 Et*`C/k{Rͧ+Y&@aNΖxC*N$�Djs[2tg KU(]cqqoHNT~L 賬"8t@nE0JXќyj5�僖v_hdޙhSE4!7�@Y'LTBؾc껀%}dQ ѤR=d@ ғW텙Kkr|�ףA?}Ӫ05?:hYb$֫ҰSwBmCŝe&}0#Kx *C&ER'jl.N\ͪes@O7ÏCD+(/T0Bc,d+)ugͭh.VֶoH lp;[wREofC=V:=D!A]j=_ &aȼ`9 m|rM0_ߣsWƜЍt>EDJ_]"`)Ùt~Y:c\ކrhnWנ}uj`OJ+֜Uhq^Fj v#GBт"ψBmNLС*oò':{ԦJEq$ "%u6 7IYa3k2lB`[7ton^js(#6h>E)0Pu-xl5YjqBևTdrJ`B|Žȯ09*q9ehC0UlhH׿'Qr]}bOr'ٸL 7Hf,f`&WW1W=@|IPU-*:}@+I_:K'UaL.n) >_Al?ݘ.e"'RN:J�ΠVa+@95Mw+F,8uU#:oY*+7:RfZ03eDrn_%1wѫyJ-xVyS+�#xRQ o8%w"du22=dz)7ҸRE·kM!`:"c#Sgl "=|%#gg*Yػ$#O|= TϋA 3{R:Uɼ)&-|&*3TGQJ-dźQx yFdKf |")d5�ݽ'$x7ZMoP�PѶiİ1SnB)b=)R}V޼<ꮖ$4<-Ϫ!8Dv>~y :^ Q V cx_#9^MکចA;R]x|HN\6̡in@J}-LUӇ簽xLۻPFA=?lR_Ѫ<n6XF|`$ЕMh|)O_ 0qttcCRuBD #NJGK衸QsB%bY9si�bIk}}z dsCOR(&U^%W9Y @(E)ݧq`\)T>=8O\4F+٪ùzQނVPZ`M32^]jo0U]M, pt`'ZWV fszS|W\?,@6`]ogQo?o>*@LҋqK 1 "fl.e5$1<pfNc�a{=p..LQ]•&%2J,QňI@ b1Tg06ϸRkL%E*4,~(VVP$I`fsTuR]~ymU(- Łl|<S=D y-7H䍵v٘4E!ѧO&fP-DN'fG�0Ӝ6\Ym({K_pg%J-/F3b0 [ @Vn̩Yޭ>'_,lywĒ.o~*xRhM]&$Gkme?zL3h:FU]xLwX7 :~?oo5^}/C%F&T (p<dD_G@yz6ZX]B9 s#$H]EdiV !>ՙLutU)aF? e/}Zm mu꣍Z:�q?e/@+$]J1@3 ZI]A1͒q$$MTUlUl]־iZ3XW>װ&*ۥaXt}!\Ol(\qtr kkb55迗@(q `GYJhSd*..wg2Z{/S骢ncVRZ {C^Ǔi7lGxK)OKw3 Vuo}c3|7V+T.oF"!TO*�]KMk &R5}[�/-aV9p=PޠL+,}6M|WѷtM *̬g:)9:HI|RT@}UXhLM^ 8){ٖnpgc󢮣\�$H`4drM<^VыJC, ]a7d�+AQiO ۜ/R^=&p: r*%h.TJƻSQihY=+ /7Ys@3-xw ĊF#(-F90ȷ牋aeٝ#fHTd aם,vƣWhRӟH}P"S-`'huqZR ò-P5I, {׿ʊ$<qh*L0plY1`H*ĝZ@vohmeVwߚm_9W_4Ru< Jd&o#6=<tbfd*Ka~=զ2/X&[ PMG)o7B!e||q͹[RRenk_ɾ. G7G{g7<`Ѝ;zt zfY"Uߨw)n{.`!?9\>g0.Dѣ( ѽ5R]:"|^WAس]VI,EL(JTZZHgf4nW2 _C(<pE\ܮ&Jt   J?CЀp٣դE'm˞AtBRlY_YzspXL: n&Rsg+T6Vǂn+ǡch$ b$ju$0'О7s39z3XZ?Pf U�{3RGLnۀ6[u8%^x+,)@52׼&`b5yXi#0P k-TASɪV^drgꄚIFޠ] !<R+kj6h܂�#2jnm1mn8  ИoBivȨ<>>w, &lĸWG:kМcr>OM k8>Km!:)m2W0 Lw&<8eLW9ڪuЗ*#ѓ@:;Kd`i�a% nE0y qӍh#-}mFB7d}9;Mܬqw1Lm"(|Nk ݊3GSo z8mw.ktB%/=4y WCJ` 1bo5UAppbñTĈ2M9nN1n1T54G7@={K DbBֱPmX4,#>1*ilx OJ'p[;ɔ˻7P6W `6aA dJޥ?9(=CdKGϨHGw>a2.Gdɀ o{ ^H# 2a&}bf nh8}1T.P]f OKb`,FG�:ҷ"kV*ПtE^Fprl\yNV=Sg{d6઩:b/s#lj P S F#C uhe!TQ%-mbV7a!b!Jkwu/={W,^CjrHH*y|ͱѳ4Kƒ>`dӮ胂3=zQV_/gwy0:s}o ,ӣ6ׅa";7@kz i�ԌK?##^AUr\_xpV(QD0Eʦ@Z}PƵ ykxGbF@蠢oaޫ4g76njqrmAytJܢBC 3017 cOqF{~i{}L0-)ăuL8ZZyr_}3G8ŝ6 وh<n YUi!nM VO|:1zG<j׫k :Dsy+}0||a041c�eÆ>˼ ؟q,<7�7ʝ/ B JCw=/ n]7+w8} 'biX^")_nGM֯SM46W(p8^v:сJl9L@:6&2UfSt]) Qx8$D!sPW}OkQmP+pb]p=xG2tj`k!7Jm1{ÿcƩC缆kݡZ@ȍ͙߰6x՚<Q"mSƓQE?dP; A~jC,=H++@KSoALLCvʣD\AnFPuGlc99¶`4@0?[1Wbmʣ^ 6nxF2\2&l 8ZSƇ=9J ˰Y@n$x4<,.HaTqf%F \цAdptMָȢY/*L]#mRt|jڅ V`Os*ڈ֑=UlU?th㍥;D 3VMPԟ!\X~tehh0+{ ":~vʨZHz2hT2ۆG7T]X\X]3EO28!KO[tC)r8|c1?N*$7z9c�(>M@ hTa B+VzTus *="@N5!Ea3=6*bi7bX3Hl.S=WKFJrc' ޟP*~(w^�uQN+Y޾mZ@Z9T14} �S{ڞnwO�u?՝Fm ИH 4K owh)W+mTl4t(Mrqm7ݗ̉t}iuA$ չf zzU*`*pga0Wb0X'!JW*)%,NTFb>FXW~VCPʨ^.V"WZq]r*oTh+K؞jԎ I='a$wBSGfar-ҝFJ9}C믜>r?-j΅VW]4|UR_ T"WSe\pŮl;E|GB\q7 t.//2JhSXeL=Ğ1y> K^u-O'"ai~nDZ\k|U/+l(9*1Z҂uj v`L.O<< ͟sxe!rtV־}umL6gTQֻvz?td$:MZߨg \#{O2BzCIB0VRM JT%Bx_8zp`@Yy{) BB}Y1U:K)eL!׿t(&Zꍾ{:v\e5i"6kt_<QA8,HZů[1;qO ! 'S9<Y cS7) (\8mT^=η(+WJ >|//P~˻NaNUtޅ9:ni*8vǹz0Ԉ7$%` ve?XR~i!xkY-W^aQ<!ɉ(!~7�UKFUz*A;h*8iaq_ JgsaVpє+1(OMd.T%RzփoTkY6?h*1cC{=¢ rd?ۿlkAK,^YmXͫzZd:l 3[[R6fO&pxgG*! @dacShBc!]�hϹej8?MRZO0VeFo6�J(CjLTP}}Bd3y1&-0P⺅ur$٪(U|LƟ:QU6M _}u-JݙUhOsfSARi׹ m\[hhm*c$?3=A)=[ύ U3/ pg̻Sf2̽i׫|osØ./3\(XOSz3�E_N314:Wc aВ2L=0N"-5Ftx674@QWz@vm}<)}4rb+K|ZD;~BIЫl Y/>XV4.PCvwBS[�(G^O/"s)یnqm MOqEjh)QT BSHW 4̠cq/}X.$|SUD&ջ7* 'A/iA8�Eo^4 $hՅ/FMϰr<Rag4 pmDFܿV ރ> sbZ~QsTBO@l153P<9@h%VjQ[}yRHEhAp$xj#<ijjXZ ݅>RW] j}.hOht5:~=`/.U.\JZAM4ZP) ݗ (kWǛtA i`uu'|@Q 'ihj*@<<»ڥY2T[i$Xm$IߘOua3�}I*tKN~i x4$G78R`Y tuW5]vuQgIC:Pgc{.,r-ynnj~]J_&_52`8u\zq ]F\麃 șO]U3!үʨњ{e{Փ,{Ш,9`;23gHl)9gLlgLlMctKil-160jP Tl >R֊YO&j#rHkV�?%.*JkK{̸+AYךdW<` oݱ6gQt`0zWh̘~}]dnfN t6L`oBY;aE}bS<wƭ-حP}*&弪..xt9w黇DO%UD$?(Aupe,Vsl%[y)Fk}9Sz?<.™soL[7z0zcb}z(Aj }MтPD6d@E@v�RF RF&:H(hz5:T[SQ$nh_i߮+)uM#'[e@g0E䇉 Y ŝ4&|TiM IbO/&Ґ>|n*kϹ/| ;s-xؠۉЄ�8RL-)ݙA?̖:z/rL(teࢲݙ~{apWnDvu tC3��WDQ(ߒ__8MOLaDh.PDǮb{XZU|ק6N+9\ѷW\qE|֚}ܓrEIez +ccE"�yX/AA]/,KPq‘؄m يaQ2,pj|~0.bz*} Rt)Үeq>3aHdQu^O5 H{nIP0-@CYPt1s d9"vsa&@ o$ m`c߬FF2ѭ.:=+,{ephm:dCk>_Q2=~cc=g^@;x% ~ҸP>HK4 O`Pm<OyOϒ8$ V~7QLB6s6- >VʤR|4tis-ޅ4Ai]RУ;Q 2V˂ eYaMHM ktV3V[$ dŀx�^.ѵ*K<b_,5 *7y[i,٘+]LV0v]M5c7� $¾#vcWTz~!R&rbJ\lt8�o{&`(uҟtc CP:mD pI 6"@~ W7^"8UB Ec^!ccl"dFPA dDt^ǁ yO)ћq5D/ LKF%+*"jWOrwF ЍBk /̤Q:\Pj]DCN<LV?1K;G z9VpV="RSWsNfl3o;J2Dh4(㢀n\5n";<X r.(qs`DWHэ1~i!rcNSfV#,z%CƬ5~c�|^?@㐊u#Kd ~| zB >o_<#go2 WJX"gvsf jF> :zk1BuI"vtU,iyf|?g { ,[560y۾ )j_n13I%8+tϟ']'fpLk./,xZA_E+g%ڐh7`$yG[my!z@&ˡxiM](48D];?*Ǯ>pZ/{ 5l řNhۜa'2Tz) kDgM1 /f԰CbpQ6jU0(CS0Bx, ],_y&nX^I]0y1?!8pZ$Oi4SZ:6۩E{LXEԎޘ$�յL|P* 5d]*\2U_d D cpC,>x .ih`(6QU:6Q<~yU&Z)뺭%0UuNC{D+e1³O"ZFhp*rјE ?F}Y?U))Fg9 GKƸMR֦L'ٻ *- m.C1/SIL @/03.D`_ 씉oUeAR:iQ1şb?JT yT.p.Lp?IV=/'\o2~ ЩV P*Q4+^wg`mF4tUZ(MZe:V y(0\DrºxKlX 0o3f]:=fdAQ?;Tx7,~_w 6 :;F1Q{.d&hS\oK>>7`Xu܅}x R+z+_Ļ;uVr!toLå^`K<QvpZ[9a1M{wS@jQo-s @zFP G-xNZAѫe,`t&^m$?ҤxW{=99IF1ZLJE.v2ڦDqeDYmGqǔAx&ɾ2ha'Ll,f>z*EqȇJuܸazq+>nbėOrRojz. fKUGipBZRJ iʧO&F u"Ћ>oS` c4͕?1mI@Vmn5N[!"~imTv}qP `齯Fn?FWMBN}i[9G܌aAxht8aNHuPVukʪvm{!rŬڦ9UCAFWͥ0[[?2QaN޳^#t s5*ՙ2,DmEy9' Q4Umo]/j#/eΈ"2#QrR`(hF`v0rj:r|nrIAЬbE@>nwDE,(r6^̋!=>m G<,Y8{ޑbSN1R`KLL߶BѪG56'pDic@<v꣱AA%}\ի7bA>!JSMӂ{-?<v(L@M�b)R$IQW> uHҽ`fc3:+a{S[DCfW�chR6TćteQP=ߨ3E?pЭ[fH6?~B.t%R8 + `3 yC DX+K5@qni>Qvb8J0`sw/ !.^6MK+4*+ ǠQTx\>gKpJ!V]<%RTҒ6U>v_Gw|90ab59!KkvZAuV͢PCС�fBTih&$kyQj&kɦHD9fbJ8],pG'ih5"rnI_ċ z;TNu}Ӈ"aJPXkY,t7V{�7Z=xKb<Uv6"{1):qRP'OSsWSyZn %,E}խi�Gu/oijGMi +ǩ1>뼳5GX4!EoW>R3RPjf*mj@dnʢV'}5aHOI%- 7\ܔsq^p v=mХ ٸҮםל槂zgU\R6DJB B[tݖtW/3IHuuZU&w,01b܎9O9?sg֚(uV-ME)4�<VMqtzR+Xqo^z}¼�T>8jw@Rպe&ti} YϚvÍys,f*Ь6`=azm>,rVg~Uۭt+8QX>eSqx |7?bPiUNcX[oL7\~SSDMa]4t+IeYdM澪JA-];e{z1LUa20Iƀ'B" Md?h&Mׂ� EIKv�#S :0r߸nqz'EѢ'Q&8<tOX+ϙ1%EǣO$?8>S>d?/3GrI@S!iUcŦh2+: ,q3ciLH%&6Z|mWµW ~DtS)*@oRh4*WP+ I0xl J2X5bt| mj$5L{ӵli6k[C->[ t3,olzewƚ1my>TgXzSm@!ʤwGr .( )VGXv6.T-ks5','1ֵm1d%F*JtPT֦0:Tu^;]11I|T^},O{�;flMT 3$v A*"V`)�agШHJދ#JFq5<`QM&_]xp"Cpi1HĮUaE8-^ >{6MfHtN|J{Oe I44j[1yoWDEIn'mECϙ&/ÞgSgI$,oT۹k*B 4'S!Jb{hn E&(׹~UHMy^LON/NzM奼0]"P>܋3vU|>xnAQuM\ä(U"t z~cx1vglyIض:%zij\9&ѝ_$"6>Zc1ٳlOXZzo=Z q+c1zO67@/|n7G_=3*{0v Y.X=їJ|6PyLi Ї>2ZʙȂѭ8ɾiw#1`# Ov'`*62gm1 5kg*O~�?h? ,=]3Ȩw`}Աb&0h{1Y3:@R]L䮋CCAz|Ewph } uqK)~e>=w�W[<Kߕ,a]�rKas !K 5L8FՑ-3D>% GCt\K^ټ((k-*HG~2f-JϒHʂ+t Nto-i&T9M GA'&}j=@ ﹞ݡˉxND 2gf ',8ڬհ!DV=y }M0fB]:1k4:_VZST^~ (3щDaj&9>&*zOrkt w}r˾o-8vvs}]eW9GŨkuQ\'Ovn> Y:^Ne+MChd ׿ 3~d~ݟa;LjiT-}J074z\82Hz<ۿ 7*q`և~޾Zuʳ{^@>ײrU / 9=㳄 BIrix *EÄS@ ;gJC8uz>N%e 0CHu-�$x@:bjo~*uDo9ߨb{P"ԍSn8Ü0?'�\tx Ǣr8*h3GV0uiEaw?P44@V)Ӄ8.c';h+26R6 ߣHe N&\yг7`jߥ^4}P|&MZ5iŕqaak|!BiwiFmX 7m7h)GLw@e"BZ~M*aֲ@&{#(zQ`wIތYޒ>Ƚ3Ӎ@hwaAF!tKחڎ+rnQ3q?/AUCÊevÙE"mņ„q8w.@ݎa%Tv )@ɦ|9  3@)lGLts8(Ch<S<uE'ЅdT"ds:p8R.k!Cp[vY4zz1nrIN� ؜Izr,�='=iAShi K[5YCE g4b9v&DB{wvwĺk2J>o8EIj�VϧS "]L~Qtp<׾o?BV Ls ]bs`wNЧi0 *m?A &䕽 5�J%j %HNc %NJ�$Q:v6CcM3(G]Pn`/] ju(=eTeCazJlb9e`#XJo�zY$0T@{zP+cPqhPOG<w}Fg0l\%y,j]^a2KK8O//T a>\B}D̬zE# t&q\N-/2OЮzZy&c*mUNyЮ'Lr4/S|N"lah;MՇE:k:*T89=/'\ܭ?[йh-4DPKӢNv(w LF<i*#00O$$7^d˿m^%]I.}.Yy&1.fWT"ed ε,Г>ϯs3czS ƴM JAY#.jXKaO{@hVhɎ"aݼ "''g-<+gӪ8]^BT_k{9po_ܦU4 MG)$ĺmNs}q1zGc2GEWۘ켾^OEZ|сUU,NV`]QTj:ТTa`q4R׉>6|Uӝŕ+`1#^# veT)/kQ=?׿2ӶjxLմE74~i{')|6gcީ ×ljl.7phPO*]0jRƔ\/l4w~N zѶ蝾.t(Aek]EXc3Ѡdttшh8Nѭ\r[dӠՆuky_㹯v=sl*Cy.RIҕ + /DOv}�URҎ*=)Ŝ'+>pȨ0dWhxa/_n(xǻWQ-vm0⡝ػ_z'yޱN*n ̗{ğ/( ;9իBB%NOCą틓:M2#VH G8}Nj>]Oz#p;}hR#&kN跳 䝙eV=%E-L0Cu\ $2(ik3XV*t#<岍?Đvɵ,d<_ټy,9"b-̇5S| hDrZG=>,!P� '9\}M %�Oݮ�I[,j-k_-qLox%_+0#"⻯ఀi\՚ี]b 9Hk+љlU&oS>�ʎMX`U7Ae*,Q,:t?8N_+2">@KC@Tэ%=N4=ꝰ4>_n1Q(b~F{)uPY4if!@�Gk[Y0)d0}Ky,B#ev:׉`ĝЭS6thAEJ�2_.^J%f@j'Y )dSteETZͺ^,B0 , �,TGII]`j4tH{9@V#)gΑjՋ&/?fdkc=q۱-_yB7MukuDqN-f�S!wHٿ]_NʼnT9FL@ղbcMO.kMe%D`hQH1q!q2R /n}Qb`rSŸ [ $r+lwCCAsP2:^wn2߅?%k9ub\0u|ΠxgD;Uo3A8F(˸8SM"l<C 3=)YjE5¤ !<T*owƻRMyR!11Je!{OV tR�N xBRmz-zz:\S ctBTKYYe5juKԟ,tv*RU_Mb+�̃�]l+Q`NCR$ k1 BĽ, !~WaaUǨ6&qR)W X]h7 *N+ +DͿ1)~_OFhBRR#y_X4P1r|9'=QH*:+0QR5Q騩USSR4#^%m`iœRQDctκcU):?)kaxв;:KTgAWzrF~Lxn<Ro]=J ˃̀2%UhأaZ]O`=}ĝnKo )ZʸdtOSM Qȳn군Ev r~PXgQ\( ѳTG6ɇ|;w]̜z&!='W qbdOQbt_b | 阯_y~iC곎45nz;MEk6ǥhoKM_~ޑTӳ}s-e0^5/)2DK{W?(;N/T.2[@l2#ϡVٞ)u, J,$(�/"�,ÄAЭԶ/{T8 7Åȼ"]ŀ_򛷸GIsrP}d5Z!}Rx/7ƤfeղZA[+KU =9^ Q;7fr1 E(uFoXx k G�EiJtu u9w_evH#|4ta@ 6|ww|y8QŮ!$aftWWefdDDWN-P&t_)ֳLj}+RAcj{]tg毗zW6ţmyb,9fD 7Xc_Dzҟ3 UVk0(^VLa?w$] 䌴TPLt!swW>jYL*U">P権`lSU<^}jس-, 79tJwsMJB#a\jGt;~0R.D0;@!tY'WH$ҜHv?KśF6rMX_7(փ bXn> H`¾.}� ݳc!>ܵ\E*Rj ;HEXK{>/м|W8ݱ) {^ҷ2\nn7-8hnev AvY>Vս ,gQg-m6kw84eY(i!lZ&Įyм n@xR5lW*BV 0(x)0JhCc+vir(G;Է*YېIS 8/E{.<i,;'KyVݳ>6do4%5{R鴼HM$\\- B ^ ع#sG}M]6ͿtHpRAQ*!MSksp:H=hN* FN-h4TjDӫ~ ]6Pyԡ ^F9ΘZ6ZֆK*irXTZ[AAgAZk֞S o# X;h!z I2nb?FmyKo6S{n,-#V۳38iD-C*6Q̭tZeQfH _Lky `7.)DPףjiV57{Բk[^@DAaY l#I$XI Tuϔ cI.4mQE"iY&G'Ppf1"A*. N?WX(:T;@2!Pw[Pφ@ӳ&,A%.uS6,u\'}ylF~BQ1sQ_"冲8gqMxrI8z|7ѳnm[8>T21-^b І{' #/ȳ}Z)fݟZvڣfzƞ]nI.j}H,\6-45L(XAҁu]J3]ygy_^݆ [G`U-5؜pG]o_G* .QCGGGIAUǾ?(S "{21RȍznSR {lG&ɦRBx>)`S╢=)am#T)\އ7=u޽CW2d_z,=VDAĥ>D%dIz0:R-8G'/./ ttS8;Pq 8pTT3)at)qzy"գ=ُU:mPuA\T!n;&CY-n=,9a[ Gfۓ@^z�`:m͸(Օw$rMļ}Bf֣*b4"dtJ z?Fi0YGvM% T gkҾLLv6ʟ}s~~?bFOvEw,Jֲ2PKU�y!<(dtۺIum+;aXo5 =bVn].S*WA#>aSU uU m$![mr7y{C:gT엂ufdB\^nL]XK;= pt ,V w 1էp$q@ cq#%/ G,|#<>{5CTQ F*XD]! aPҡ4'#T8VSBw4@dݚf#j&ڵ8jV[nsn1橎bg74+5-H37!S[HH{8%+aBNW6ҭ&٥<l|hTDUb`&3D{g`| *:ZCh*!:S!ĸZL}qrЙ- | ]+_SN<Tq ~ @E}3EF~oV²nƕhsz.w>M)O2epZ # 4wkA`]oi(F}(XpmLP1 K-)lA vEr@zNf-g |6dw o%MKc!b j ZIĕU-τQ_P3u]h%"h](1nxhE,r]1==[Si pFJD]@Gdc= *Hd1HKe5ooL $̏-&Mf5TS\`*7o]MBK[vLjKƅҲe4=d:۵UܞmY@ 7j,:>Lo"ǁRF5?�Vhq{<r[l: s!0 ᣚ:Hz|7Mw"qRp` rC n%w9*'3L@@zZ726i~HFo叾v+afzz�P7R :u(H6u6<؂P"-JyЖ)@yGEA)RH.D#㪐}d\Jnis OY> amh+|Oe6H0{lxSaSQ?kaQ5PMb 8ա͎mƤrh5QˆHDoնwй#71R|fΔ]2y!-?RO%O`P>)꡴(4S[qm*MW�pHW.q'!Gn҇#Eߣ Kwy+RZΓ`;Mxhk$dg{E V0soO/Yol f{kcISvdaB]b#2(as4#˵ń^S?PȽ uZF �gfY>emkJTP_#·}C?߽g9~B] Č\i>mwYŏg)yλ[G4rbIG Ur]s?q7H=]pKyRuG4QSaճJDca=U1u]Byݪ@(X)fo@? ^6yu喌 Xlz' 2\ڛnJktCOh>M'wZ mJf߶ DBs]<~)!TR{%JJ0t:T@VSXF \( %kœh#w>"jǪf 0t86Zr +3?&wE=~^XIk6vF3wXoVPIg`#ck#D/zaR0qO^쯰p$jpʿұʎo&Ъ?XAÍ�s,F džX`qthh<O㿁_:uD!xlnX٥C? =ass5 Xj盋>[ }7]/(ԘAb{8"S.fB=&Y}a:R탓j.sDILbޮfRv2k '1SZ_mv`,?,-~jмC9 lrt,jSьpq&6 uGpmn+ӂ7lý5 ?T$801+N?MM^؇s[qJSTVMg~Nރ tbNpCjw%R kc+H0pZ{ݿMe?_DM:v)fcϧn֦pZk)saeo.R7+q~ -l >^m1ްZ]M<&+0c=MO\͢M-<o#vs M' GwSxclS Q\kqq߰菾ӯOH)JE=F{O_B cmhmٵG}ӜZ{䐍j59IJl!VqEjeh_pa簆+AtcbP+*ǀfu\4:0r_z5~{$iD N9f:uc Ԫ_X2LA'u}at\ɬ)x5Wj �WDD`uX_'\nTPxY(l8AAϪ}F@yQaā-䁟фoa,#VаpQaFVfw:`^ +4q]?11H;@FKr Y=N$"ʵ+w7VC+LNDqepBE7u.#lE޶O2o UhA}5b&AuœBޭ Qwi^s~~|/3lVG:o|ҞʠM5N`XqB)}{}*q]XّQYGKJ.wԩ~laѺM34#nT4Y]7w[2lYL1wh7 (2uWBeuĘiNQR~Kn(,GE:]ґ@"m27/<P/`R#`Vt׃78VEvǒlJ(Ul_ e\Z)u-Hvatps}E(cѿWTl+hg6MƒP )m$9cBr3G@ &HSD~DP"5w tT@JځyMtlvr D30LaAŴs0Q+pdg9X7w5 i B KhOT3'T9깩*\t*\CܤrA`Zs@1ti$d-o7VS4F]֡iEەϑ� C%b(}= v׎'4TsJ 2m7q1"%$Ȭ6g5c4:Z TǬ 32; pCy>Lif̼B"59x (9wa՞xK ?B1^V.`Z(?!C?[/ZS6i/,@V`Q M{t8i^v$}@t`RȣvxkpzA[Zӭg<Xߵύ5.(rӣ'P?%?@3"38+| VC*h'3U]{~]63M[q� e;SַH+n4NѤP!B#B :m50twq1OFEh7ŮXQ#N$)[u4hkBO^C}gs[�  [Ȧr]<M4 ; 8-PNEےhdNYK."&C&B#AȕsIfYvv֐Wp\:m9KuN!,gi!lG dV$Guf!D6dp@N Eڼ**AuoB^C"2A!IxhX0mJBFPӡꠕ&ݝrP،H?S"Q=ĄItW/ADuZWڵm_!ͭdm}"<܅k+ צß\6(E YA,ᰒ3*^ %ĜyT �tleG:@j Yb]lM]f a^вFi8Jp,s]ҡK823E擥3mjN d>WyMZyt%5mT8ZYt#>߿g~ß"iX@SrQa:evA*CE^w! SzӮAA'"TɲŮbD8rYpCt#eDw�pYHUu<Nyc|mҁ 82hxhE>uYV5O}[P.~=u@P ժꁶܵbF*L"S} <M`Ji bg ik ya0SUu[VtjoM3Ԕ¹+,k[H5@kynGI<R]rK6N* 1sbyΡ4fT:QɑE鮣ww% 6i~$J(sYWƱ (ÝkvhrVlغ T &cݤ?�iLpQ6M- />ʓڿĥr`Gí8&)t~?N639A yŬmЭD< ;RIP-%侅^34RxXSbk`Nj.>#]p1n*N=ť, ƽSmhU pm}AR% uKktҶ%+Ӫmhת%zXPHhrۏ7A ^m$H TzqgtL! - KzĕRFm+F_'uQ HIGL{C5hA\tg\55 Ⱥ:"_y+" Н\QY: t(Yunc*N(:PlVbH{ ]Ni.:JLň)s6Fn Oa8vfEؒi3iƟ*<՝_(^3^NZN|F\/h 6ߟ;yzf =>LJ?_γ?5 UCem_^>/ꋡ=nN߯~q#HH󑞕i<F/F4#H1|1|j"<LJǩS%=?&s&##{>,Sh9Z~1svh9Zy1ZyXosb9)o>hωO?G{N}֌2?x~q}<>Nl}*O9sv篧w}h^3G+P5y~z%-|{gx76����ma ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_data/test-voip-1up.flent.gz����������������������������������������������0000664�0000000�0000000�00000776572�14670056262�0023003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ubatch-voip-1up-2015-07-12T201155-50ms-100Mbit-fq_codel-cubic-01.flent�k^Gn&ݿvcG5 d֖iwwhOz *-lj_T8zcj<ݼ~O<Wo?ǿo=o^|?x__gM?|!CkjH o/>/x#'go�ϸ}3hogo_}Ͼ~嗏ϰoO ~ow졧>y=~_7/o̓wٓ7o^#o_<yW=w'j<!k{x7_O\KGٷϟ|п˛7A=e={諛}g37Ͽ?{'/w鋴~ٳO??|ͫV̻ }?>O;ųo=ɫ=X{Ç'O~؟'+>Ջ<ɋ /o=qonzwݿû{}WBx W=}+:> >/틮`vꊍhWfW/~/nj깝oׯL˛?p??2y_=yo}u^|һ}y椷 6zޏձ6g3 nOo[4}?_7/X1xx 2׿?j3?~{ḤGyW_<zoů?1foM=y_7l>w~nF{ag77hb#mз"oW!Ӯ+ {?@ zo0B3mm˷o/~V7>oyhcZ ;nod= ٯ_>~gᾺR/޿%=/}j{\B_+?KGN|( ?޻X_lV7Owߖ.9{3T5<ӐW\iy'+񉲇R+*}?E+)U.m n{ݿ_d>c4*=z7wϸE~fQP\=8]K/?_]Cy#X>|g=;j(i@P\=6|ZWdž:v̫9z `Flo4Цc4PNlgJh!,1:_;Wxu,՛Mt?_e?߼}/0{zaFڛ^<wO^7ϼzl7o~,4[uJT=LJ~tƲ V٧[h?b}qտǮwOWmkvL_\~?]#nu޷TVSU#e>Ug2%\h 9H8&1^OhʛE>Oei̛bG7l+�3C*#6C10dN[{>,͙'}_//?߼慍d'ߚsGΤm<⃶-q`?~ܙw|퓯oWv~o_y~iٳO]'K_c<~?~| -gW_=#d;}+Ƕ!gg/Wg;['߽6]'On,ߞ _Q=lf>Ot_oZ1E}K.&8a20&PҮa #4<F='RD�5�M!X6G'žówQOn_?{]T~D/*<pv}qz #xn89Nj歜#N]Y0CLg|. 'W=AzЮ-`OQuEdџ,kւˇ׸|9ᜩO#DK¹bPX:"rLc" .}#M||c"}<P˛yӟ?g]KVݤr_Y럳7̺K9jU G&זꢙ6h9LȴNΞKwOtrR:MD~'Iw?sG]S~OmOݰ_PWr_FJ'LO#'!n; ?#}9æp6zٶ5?Xq1 ̰dougOC%糇OY Љp¦ޜXT _Ck9}O �j?>|:ۙm:c1>^K|un�-ù.? ?�6@e6M_~_|w>ѣ?/ñ_=~$^gP?o_x xG_|vo=sfy=gGgleL㏜9L{([;G_|o>]n_L_+ yg>{>|@~ya_?t_8>}{׏N}G|ԃO|;CXP~zPN6?`'S טgo=5% m֔Oe{SNDӇu+ڇ̉>̴<r'BB{Oɽv߸>sD6&3rl=FN61{ܜHK9}WY9z"='s<8NdOYxÚ|p-Տ,,eѝWuSbezJkOk6ӵhۢ;e[zy_[ӦhK-#^ӥ=.%IDcM6]XmBAnD6!.e'l|m<\lvri!8Odt?랻Dt׵薛RWvӰCf+Zr &VZ0] ߛX77XvNmP4mK=sPz"+)me&jJrЉlY7Lw?=j!@ZKr=nRvRIWpq ϖs 8 gRr7ٓlRrN$Sβ+){Hh6rwMkƔIEk谜$6M6-$:- K=wտy=jT3pj2^r"Kj۱ݪu{BvNbX5ٳVdʺN$R\Sߕll Ս>5kWHKɐuEq4o޸&ͮ]ɼ̦ J֋zb+Y3+�oZI&[u}Avgd:z|qu)a=I;ؓo:LĵS.G0~ \D@lC*wnbEdJM/{ڗ3`'bWt\Sdj{yn:.LFWY;.Ʈ*kDpo_:oG23T4,k?m6fOOdO] e):kl)i/{yG*z ^H}:)e;9ޝi_(eædޔ=u[Tfzɦe(fshNɉXc^zv ?rSD6yr敃άͼ.dQٓ׾d?l] YqW2E&"lɁknsV~+"鞌 TwR`APrp;`CV&/{vrщ)l2h|%V[WTH%ݗjl:LILE1svIa V?OصՏ=FU\*N\vZ_"3PŨװܳdZJ( 4FHh6tWrwp_K__#XhI ma 8/=c^d`θkoMSAhYDE&[W2iyfp"{ .ktKX'_V {d數lY%xSp\򔜓0I7C˨U:MNN湎%`-%?7Se(6^#V~^v ˖f^˞ .mL &\vy.:pJ~E/ QxJlt;I({a-mE "vÀX۝Aw7t1h+3B46wv up&iʞuzs',e'u&'qvOd3e$#*: gٕJ7kaLdK +XⷣMg@%ޙe\dݕ1.rUvh nϳIVp nW]MsX 纤\x:1;94Nd%튦D, =V| ֏["E]D2Җ/fĪXkѥ^`4eu-m **q)ܼ_ p-`uΛI<oJ /=X{$WpAn2'v%Ӆ&Lv0x{xڳ@qdTrɽ 69-J>Ql%ڭx<{ٴb5ٸz]O@gɍGxaƉh\m3LeL9c_v]s]FqoՄѴJ̗fҋD`͸=e+/c-?>Ȧ1g- .�3BSWֺ/7lXsӜ99{zuAX˦ 'Kd=[%aD#`{L<izn ).}%Jc貗W/Ѧ b4e(9*FOsQ1ʦ;OQgC/R^K(ܟ r n;>ÂMWJX/.Ba.y/v3vY~ c2jSX4j)2ٺ4Kb'1G@NeH78Q5lVl;9AM0.8e`u^@9 `ts\jS p[K,v$E-X9.3+3\dޓ7,om نmY6޳;/$QvBIJceJ.D2ܝ6=%a,l4Vfe߳x"znu8yk{'r"q]Ec_2 Od/]__ZMAMAmR3Cm^Ŵ DaStr:%"Aܗ=T.B1IndG,^퓊lE|O &-p"/ҐekPz4-rb*؊eOSg3^e{p#lY]:z~"{s#f,7u [>Nd#rn;\$Kκ-yD9^^q-gVp!X<"ef zw J`ӎҽК'M'M@sd!ZdudءӃwrn:v7EDЋh^=I7Ca&{ [mtoIAӦ݋EPս"rV2, +6+ n_,4k^jxwGP&F )%CNpt 9M'8&WeD*:8ds[&{7f(dϥвaf~ VS}IfPdKК=2CllnTj{Ȧq=*[ND/ɰ#f Nfc0}+,vږ~"Z;tY<.D61+}k:Bؗ=F [L}xL ! D>JLk>( ~ rR9v`TNd/ aEnׅqh .Ҷ[f;[/[2Ug=cu0b'v*Ne*{ߝF{nmܗMP$Dκf d\JNc8ܩ_id y,߶$o|$ =L{Amfq",,IlgyD,,i^bk)\io},?zMD uajƦ `Tw"+q.KtvtB)1Ƀ.R%',;c`I^kDžޙ.3 m}oťJMVP=t 6uO:gf2DӪ+hw5/K5Vpĝ cl6Bk9 u^Dv3- 3X^K."g1]$sIODS5H/N^mMd4$I/Y5;}kyMo38r>^˶orc<{kLMɎ a2<ɎEO@ڊk:}Pq"ـO:_+㜒[>Ldnѩ9SSV<&agQב0- S',#2<-+=D4h0ڬ9snGn]U\V xL,ouL^y3\=.128:(AJd6m><ɛP ]Lw8ܣy+M4cO@v\S$Pr"zItS?ͺ~.aNiU 0}&R"cD3N״հ8?GP L]׭Mkpq D~I}S!A uo\DI ngxɸH;6 jDޘ jց}"y Ӊlu Mթ;#s)Y uvmSJfC{ iwBc2ƒz\Cí&\AM ټw7V]Ug'dDREqkټKexw:3q+'2+QM|"ǼL7!h_B{ܙQ/D2}s>A|FE/I^wboDg[|"-A{;Avw=Ѩ1Lt_ {fdK6c;bG6xDW9}_6ÚɾeHK ׵If8dhis9EN9/jGX[%=;Da-"dP=zg;7lɗGzEȠ#^ #idOZ3 %f{9ݷr7J~bw35a2hNﺁMGqYJp"gZB:l؋OdkDռ[uR6eii)y; 6-2/qWѶyF ~p_륦b%[5pg9Ż&[!|̥d8f*(Nw~1,kd81CJSR:UM]ʇD4: jJ&i]MP:ȶY=<=>.uVOd Ȯ1ѣYD}٨p&6ݣfa/[na {EDsseJ\6E\4]w:#*tٞQkX|x6\E/;iCe"77".oq#^glLqQ/mf1֕U%6tt>/cpK3ulV>V|ֶ&MA=IjwU&vٖK^v-r.ѿ%kD-<ۺI{2\r=Ttؕ+t}DOU )wO=={9^5xoBmk !'̕9)r3S~|p. 6 ht|۱{yl0<,(\mm88:Tfå<8\U/ދ٦Z۶ʡ^hb[zjGylƹHD6} ݦ!<\%Af8 C+V&ۙ�eha>C7w(vN0r7zdb�n ܚmy=w ^F7m6] Ӧ X2x7Ƀxt,zm\ 8츧.(-[Bnf-Mf2i6i}ܻ=YnwAN zϱU@}eSϰ>olo6ʮ;Q洭'bg!6eμ&vӥ0e30[v3P5CwR#1x}]0:R7MDG ^ayoV[ 6<e�1-1ze \1e=yM>{j2 >c#= tCUmM2o Lly*PZ,a֋pf tU\/:`v'Sj qn�Ҹ':*l6k9h(t3c*qA$6i! |zeө)fOT93×u^~Y^ƹ{VLY3e3mqml3>ML{*][vB^ǜJ(7KaUi .!*rŌ]'VQnzx^Z븮TFы0k&䣷n4|/n`eu܃d6Jz\926{L|f Vѵ<zxLОQmރ}dv7gytTW ƇZ1'nebs+@v tmbmΙcyN;;�:ڴc&/W@11 rm}w; ZPcq=Rci61, 2^90 k:̻*Xq%2MT{s cc,^ǜ >ݩIYg$4Ѓϵt). fuC(sJ``f`48jKv)6YS&aߺM0gyp]b%&e3d;f=(M\/R9$\у1e." 1]zV2ȡ]\cHb9%eC3<L[&est ĝT߮e3`h̬s~M^F9C~b�mILQ>S! j42Ƒ}Uy5>T]$ZF8SSȾjHt}OA74٦ǀYsG rě]a)$F/˲s"Qk]H()[M!0tM:Fhh!Aa $qDfsng>oeM"m uYCL/{\`/XY0@1"L[=c02uG: |$܌45a=2u;lf4Qn08eӃO(w |$hIqC2uC9 $m I,Mk]{.~sz,٢~8IZcoZb2q ױ;vl駌L,%Jv]7}1ԅ[]$ݴۛ.es<Fo22aY93ǣyIsۥɞ s q;\,hxhP.K.8gV,9к}x*t<LY TɌV a>O>GTඃ`EyheE b/d1X'z4-vhe7͔I@>M Ocm9Pa�{x o {*m|Tvpbze؁NKt ʐ'&>E؟K20Y{E P<Sv;E3ʘN)[�eS%,6ST8@Ԭ0dZ(P˖1OiF.ZqsWM}}󴏠0b̕e@L{ k,mdҒ2irQEcc?}ː:ʑP3,Cgkj͙<,CBC}e-aTXXƼaGAڡSLonv3ދ2 >oǎ<3r^K2⹷$H ٧>�ː7 ݕŮv'S@gևkqg}wH1ox=4`@ּ2 xrOuT<=*2 ^!TY=(`S2 ȧ13Iaؙ%01oR D eěf^#g;Vf29)fxApPkrWwGp0pn]ƤxgSZ$^ƻ鈣?]If؛hؗwtp׃S-&xՊ Zif PwQL[f\ J{T|속N9Z5awj4cSkyp3=yIe3CjIl$ 9ղ Yzke+rLT&a '+x6#Eq] Fs-Dc8(\F<r )P W=RvvUD{L\F<B-mfxgs4yd ˀ #Ihfx1p.ЮlKe:EH:>IHQ Jxԏ`(SRF:4 EoW4Eꤌta�f tHx vH tv> YMWMz?jVΜz!eCuȲMGB w>I041 wvwte.9-#NYjj@ǻEq v^ABmHr (xg"|-AjLw$$5e#Cq׽ciҼ2ܑl{V={>2ܑc7wi3U v"9vRe#2*Q(aT`Ee(^GD4f(#^pG2e(^ -o=xיºh{'1K^nN;lG w])H pݰT 2TM&eQ%zm7#?Xdžu7҆ht21Ćvb4 v!?3a5m؎tnƛB?([29I^V ymqx撝ec٠zm|3x3pAi:ݕknfX{1Y{:[xւZaȚx3{3%V<0U/)cb+#nm\0%.׿ Ӿ\ po 3xB=2)嫚Ttygd:hf2 ۶;TԕO$dk54n$3s+ChD[DA(##73~xL xT*+#s x4/QFV/חO |r)eS;(3bO{9' p vya@ IK vvD$6GUiP-9QXz;p{`-EzĖ4`tpi>@-HѼZ;,sT9m۞dj{blb# iF&de3=2)6ܞO p sj2exA9>1r,2 XD&|p7 8 A4 HzT&;f uN8RisveϛTTƻ A8 Jq sȣTW5w9Lp"VTf3TvzrdHeCtNkʍ{0gtwKX6Mfʵa*NjwNhN^Mn`ꢥ29Q'*RWH}m~Q,b/*EN<]mf2)9|NkLU»jYE%dxmdiYdUΙ IrU*GAմg{j_- (6D4{ZUѽXubպ /JoI(/bk l>V*lt;UQƫ{ s.eVT*lZgWSvEFV"Z̨NٽX xΒA2M?z=E\;Eӈe ޠ0A@ceVKj8߻ˀa׹2!2g'x05�3VS'e VdOjdJʐSXQ y(' U{R<Qnyv"{OT'2術EzP :~1ϯ `ӝiX)~2JF2o?J֧r$SrPʐDyU:2桙/HޏZ<f y>g˶A-#SL1'd1jX1ڑDeɱJPqhYO! ޴H,1{}9Tyv }ɒy2䑆LǦyiH(C鯂@1(#͐X~ߴ*2=zg2uir%�G V"뢮2rL~ɪyeAr:GYf2yD["='(]kS2uM/`Sg<ՎO,YnQ;ֽ2Z),j׵C{ʖ?w2y"GyזM;xǶY"9:/t /;/@p 0qY;v7ieL"k趙 v삻=ߩ/mЕ1=i{&3CюWO7IJ jeN~PӛCBf2ڹ)A }YUh'^݃vEvŐ<2zf2y5 tSyY{ZɞO x9ݫR1ʈ~f=uˈ< T ՙ7O ʀ筁 ʀgqO#5|<'jć[J\ʐ8mRm rNP<H 7̩2޽TXB<ts@eӈRк'qdfw޾TPh\ph Olgo2yמ#BwH&,p."i 2UcUAf3%n D4pNn-̚ n8U{Doz=gF/NJn&x xg+Nw}2Kg,iPyltT2y4 ʊ3lb֢&,#ANՓBTM2"1є46Qf(1C8eʈ'#.8?L *CD焈 p \xDe̛N~ݙBeЛΩtGDg'`qAor8통rA*vS./y^ӀQgmHV1o\9bz* zŰ-kT-n/ سs2;` ttTV)r g0̋q-@@?Iz cdUn-cIqȉ@$LFz /"Ȭ7L;*RZoT@eJ›UsQ|f&Zpq0=Fvu9 yNy#NY!V6rD2 Ye 'V2lrj&1(bg{d ىˈxA!{L#7!C\<S`Ɣ#G#29KۤtˀQ~?e3ut9GSI$e߂JEB )㝝ȝzvhH2!к8T w@E4~ 2KlNCT$eZJך")Ý7#jMsW`f2޹Q-uC _<pEa:&fRF<O&OZF<4ēgrWd^ːG"7$y>gOIe1ݫBGe#cJx;3x:SyfyGrS{g k_0ąatxvCEnPy_H9v.2^L{$_ ih4L!9ԁF5F!x3x7xgG1uf"4p!40k0's^QF;GԠgi⁛lZ(]729"2uûVJda2u'Y)깱zɮ4pםq89=pLfƌ2ܙy4vǵrFeN2"O IɦF/7^{O#eᎁow&o3_;ߏ#eюCVbDe&�uϞw3p3XB"GZA7hQљz!]f2P7p Q82юj.b73rIҊhwd D{&;cVF;sȫ@̤f`moesaTAM4voe~$/ZoeûQ6UgJ^;7Y7{1W淪xÁ# jf2zcʕ38 xG2DOm2Ɍʈg;kjĖ6iO١x2%n(M@ӡxjx7{TcRͻj:!# v]v(Ck&Jw{e΃֡ yJҢ:`kј yÑIeX:!Ov8h9sAeS{[WvSsi!ʐN;dM3CyIe25 ,Cz <))A0Y˘g'+fٞq˘7y8BW>-2 vלQN f/#''zמu,C)Q;>xu]W/X<3:>x^I!A5ϼifd$/;,#^z?}:Ϯ9FǷ<9Ne.8T9:]sj2Jlۓɶ"ʐgjz=.;%*CFEz`wəʈgv}KE:!ozvi@޳z\rB2M< &w;y8Aʴ2ͣ64l+Nes->H&vܝ!{/cޜgOW-KL3U^UZn!^V0g5U-֫,XSgД鹦yij L稢to.]#VqzIUZnaó5C<i_s"W-=SNs<⍗C7NY`{jÃAjJ:3s9IZm!`bx9\<  v-[JUw.8ѢOEq2SŴ,EW2|ehd*+s�o{pOBv`*\F<p߳|exȣbPPy2g-;w|8Lx`KTdW]ʈҥxƅk9I1 GvޥxA;+K@}=En yGN2`!ՉK/LR<&Q31!i"7R<4"tz: y*+l˝1ڈ\jə*e##Md v-CGoga5;  S4ػϮ0=K!vfu<-(/ԫڿk3Cе x98Rk.ff=uNT"lˈG=h<eTa9ʈL4g&v nQF<o d 5aG`ͣcm3&5$%/Qw;J l9g etkU3߽^)c\2=62yfDt }wr,SnAvB}7ȁͳQ," y ovP3̏ulY<<,ec Bv6�LYƻf\줄 i>pǞ~j$4o.,K!L6Cb5d%_w5N wA0n-L+Ý QQ[D@vC=LV;*d+Y _<u ۲ŭxq-)ʈ'=loaf2މELm*R˭ xfҦت:rR>Lnefxː7Ar["-+nYz(#gsS p)272Gs{fg x.<М xJ4|41O= tC&yO"wxO&p%CT0켓WSʘaj~Ct`Sݡqf*11?~ClsXcFՇyf=5 .{өˠ筺>=NXFyA]q3nz}gxÉA= CZf2 .d7&Hvd,0w&I2w`>\mv\r&TȌwc:`F=yvYI29aA$׮Xoz dʀh_ZTƻ8zӗ=X;3esϨ=Tﴁ)BJ2 eަ`Ov1c*t hBlE9S񦧜2!o4% xHT,81 ׼xcsff>ZpNN415@<W-ԩjG_vY"V<^MJj o%ֹZoawO5^r nݱ[ 2`Hƞ}\f67'rb ۴g{r%T-+W# V3u<s ֶ7^0y$|h$h{�?3z 1(!=.P@^�;mYpGPV}Z wfF4^o&+# w7Eley2܁s_ΆxI='vrZzÁx`9R]sHKl0cH.*sQ_U2ޡ]TCW30JR< hKӹ+(YR</ ޙqfF/SR<ӟD9TKP9d8AMM!)"G}Ε e#;x]× Qkd5-xpd^ːg*j:.܃+3zȬ/f,JJ> ꭖzpl[M,xd7j^: T9k $37j _F<ވi~kFxw}4RZZ2ގl<i6(^HT)|xy;5]nv= y&< 8C&˘gv&(^2(c농?!^4ʐ%"mk;ojG\ {:r(CAp rmx痢 2MoeJvZ21H7;{ˈ(YCʐӲfE1pgH{3<fY;!/sd}2ޙjOǗ "{Ϸ6)swmCTn=<p()gK+㝁m:eSO@[U4<ęTNP#{;")ʈ'Nxyob@ifJhlЀIpo;ld/#3N Q34PZLuZrao`G9R yrFQSBbV<Q]}jˈpLx}zqA wj93n 5|nFMmlٱk^Μvj5&vnzagxwŬʹE3 P;Z0{ڎ<|dF/Ý) (ÝXs$yfý'pt#g{&s-P;#l7~ѱw+v-2HeοAs\ֽrg/�NoTbesttɻrcKO_2y:g5ӱQwy}jR'}jˀ7 4J5_`u{!,p b 60eʨl^H8W,TF<?ځ3-vq 1 7zүrʈ7zl-FKTrBe| ;}*!nڦ0 SBe< 2krz[$Pn?ohP3hS nzeLLUT9g@k6<*ҽZf1P8rؼ81v|]u6|9_#"2 Nx nW,lx/Jw H;W_T,lt 5> ilR-lh{ZZe1�[boT -lci>it 7:<'wo \<Hg]y.`[ uWڙ{JLs'PS ,0JM%\F< {89eia@<#=&\<> .2_pTXCLi%FN2䙖%TSˈgg>UC087JDxgjXJjxxIetȇgpHۗm'eCjQ8Gy)VʈGR<ݾ;WSS<;hh\DRd%"eC}22ဨM('&ܕURF<Qc&R<rݐ2î9M yd:Fmۺ9alZ-C#q8T 'lN2 jM3EˀlsLÛ{If ώS| }V"5e# ^'´'V3 񢨅3˲u-# r#̶*CT)e#3j4@=wl}Trl2xz ȶf>}#�TV֟(sэ2uv$B=ʹM(])4̠;2>wcOr6i$GQƻ.Nn"Yp$6e,3 mlm`\f(7 :7j aQ)AԂ/$ߍ2ޱ^1o:Y<SBRrf,#Ë <=F,#SZڱ.62ː'N _<6ȋhΫx{O9g,C+FG#;WRjۗ#*@ʙ"<)w,#ϐId2E'YR(xbSPPLV<I#W95V<g <)hJ? 5349x'AfwNΓCx'>g 2܉oJsYh'Bm_2؉'ny 7m҅ w[4;:`=2i gTbXUhg$;WzKw @.Z-P(Ýb<<؞{Fl<(^c>Q eNQAtnaϱl+O{ 5B4@<gădaBT\ 23s= e35rbQYeS CA̔#I yN ,cݣQrD9TyQǺ#g5TMxXƼA=$d-U2ÈQUy] (3پ>ya8h3eeڣ$LݍxhY)R82ѣfIː7gF"#'+ețX͸Atf(+ưeEʈ71$ egE1JeěvLf[xxW4 CLˈwZPb7]8esdNIUʐ7k'nhJ yspNބc'?5ed˨ Fo*9GV .浫]oSpm\"o'gL;n j4A?OYV-lxrB#J,aj92l*B4Щ\>wZSsyx}[KytO5 2c< L˥"j†ToAV+.lx' wR`IV8e/*Mԡ23.Sw \?2yQPAd6ȸTx,QwXSc)!{.jOi0~\.CyD=)މ8s-ːwM~]˘Tĝeo͋+CJPASl[fˈw b'd'ˀzHgΜ38Қ ԓ*eCȗ3̠ :2!Soݺbf2ܡ]XP{t:J!*e3s0:w>d3.s w1 wYr-7R;G"+'坦`Qm2@)mS)#y- =Ulv7oR]e#ШzN}+H yޚ.g2yrupіCx5$;Ыe)w-C̔#mZF<u)׺̿v2ߪe#g FabR2А:CMf2M"w9]ZxƄ]M$f2&Uz7lg esQبyIvAQF mMu!.Ҩ b=fHHu<wHQ(] S7uhhhiFE)nѮ;'Jf4K(G1Sg֍3`܃"zck2X֛ *3`7`ުeOVec矂ȕSEDI:hǶ0 ZPSj$Iw#jG=Aec T 'Q27,;e& Yqf2'޳Sp_wF#[E-2s u, xwx9kz2 路f 4g/Ý`H=[cV;9LhH, he!<S{CgKӎV;9vtkx' xp2v2pSwIɪʘ'c[wy6U2Aʐ'dA^͛ <Zc5*s (# ɨ7@ʘP<zxдL̙ʘw4 ]f[!K9rӶe3%bB”m1 yvDI9f*p@Q=)ʐ#\{Bg1=ܶPƼN}}8k@ʓ3`ևQLAho`X<wWO29Y7@J ,c8lGk쾝.1Û ߼ gΤAl(1 GڗAox("B5 mӓ_=-[HK^[X<)XX /lĻ? e C}xkAR n8IT; 2]MT^: *$STFeuAy;˼)9&391P7A 4.Ѕ3ƤJnIԂyԘMIe;7Y.B m+"O;4)Xg{?pfQoCUXhÛQ ʹ夌bNsY<-G8=u>xLљ bʻ~1v\(Za.T^w #\QM8u>u.k�߶O: YxQSO:ih xbU1Czzd3ˈ4e4׺9K8 x6uB߆2×#ȿ{i=ː"ڳ TM2SrugUT52@ղyWt9l[֏eZ h>GrMJ!hf08pCJ.Czq?A.#iaG9t|T2نFΊٚ!e!QQ؝_(T̨joXH3 yrCx}G=Cpwۥ*R39neF/mO A]>J3޴sx)}xG-ޭ) uԱ xNn ?lݕ ZϳN"9Ҏ.k^ˀGN倫whl[G1>uرOghȩ.x=Ug2 y^у<sy!K0YxKF2 X%.ZFnц!{ޓ;e!$eD߷]mT6(Ca5/wes7nkf x΍DQFS(^?EæHc2IQ׼ \b($ۮw'2 _< w6xP*'Ip^-QdN[7 o%5|g[lh֜EK21@ 2ܱ@C4Y;TVbr2ޱkA]#m2ޱpb �t/3TȌ^;19H30Kꗳwb&G^ugGH ?[č1yۛ2e?V W8)Lx{ekN3SXO]<s'3×!O|U#wg+C62Xle' x'uo^F< .rt.-|<fF<{ @Ar f+#M:Pm*S eS5OO`zPF<%ni1 lf2ܩaKsf$2{5)"uӜw= YRu&p'tGƄ29WDQm7 w^3&n .!3zm=vMO`7CG-xR2yGpt/yL}|F)MpiFhb{C@Lv2ܙ:Gdm{/z'n8fJi6U=vbpE"v&{NRjeFQk\Jub0pet3TtpxgSHVdXT;*Q3l^905xf̾Yf8T;ϡۭ*ue>v$qSg:TFi{1cgzvjR<6'vtT!6s~&YO'T6^j8Q`GxRfvkAޥ;ftZavIm=%6<iTg2gg†gA\fFJì<j`{V+,{ϮC3cy ~h }!Kz-N@0u)9pgflTNW ^;Am&gR^' "ns['LkO.?KapL]\W=&HT2ځnջlhzr@dY0;~<2ށڎN %63zLxԹljk inx^X^V(9eC;#+zb1eC 1uVSpuccetՔ2!"$]{f x^4#z?SʈNoȤxIWbJP?czJL{m= ]+Bb/岖2>M[>\KptMpص#ʠG͓NQܔ29ok u h q,%29jPF3ڥ-h* wdptq6i>[C9v$3VnF;v17ia̿esÀ_ѻ<t l#U3 wdh -Y)SpٴAy&Y8 wfLRR˷w^ 3бF%\9ʀ)9`k<16GݣQY'_!2d(^O+]҇5ʈ׽o@"x4HfQFck+lȞQ<S#N^D)'aie3r9pZ:mRʘes3sszР)8WYV~2ޱS>t\ft*3:Gs'UR^;D`t7u;:u΁7p&<(,Ὥ}p:]j*p]Ӥm2y`z l%rYF<9ēyFgxvFv{K#V<d�`ta/cOqD]m;uCke{r5%UZ]桵2pwAF} 5V=Wq%;YR~2.qՐ9C Eɬt\+f<O/@POK5R )G{j2ʡdvI@2y7ܲ3m"O]y;E]`*c* =ϊ;ЧG.D`t1C2u9L %R㗡X@˝rSР }NOZoR㗡oDi烚wk3u |tŁ[΃eV`gBB?C2A2"Q$۩ '{) R!L2 "`×qoz@+_les[:JQL訷v83n'+٘;I-' Ш|fPlI kS͡?O!+%{:7m74ǃ!W 7B_ eSGe{͠ԏ;-$%7es?V`m{9yh* nv` dO 6e}}GyxzyS-İG4[;GdV{+O6m)S_@! 3ց^V^3EC¡U1Щ.~tp7{Ϻ6!_tWg\PWs}MEBT-ȰgH8 ϲl2%s7dͬ̀\Q12:kp o(2l| ~˦(qᏡcqj|9zg1m}Γv-q@{q`:eCV"ǭsRϐyDЇp)hg6պY gLp$Ird{*bM1\6( @e=*ǟ 742}Q/o,R^ͭ:4"*}>̹ijxA3iUn*4ĵ+td{9>V%\5:?b@}%XUOO+X[4ş>E+D`|~gkya>4Xwbb4 c28 fQ鎠WڝP}뻸mʾwܖ6RAyL| }'A_i^[0vҳ^C;ExGoxa3r˩0%ѧaROj/5%/aW ˅<'WI_Ǻ ZffE&w8_40vz"g}|}։FWQ)V%״Ӕ4wSFȍ^ЬoW3ƚGRi_:{hY,X}fg](Ǽ +5WQ]ÐťgwGZ9~4 /WdZ#3ݻá7jHCH^dU4B{{GQwXRRq?=SX|K;;2 tO^42ZJ.تd0zlPj?ݓ4jRp`/}ݻfTV5T?:F#6$n@ b9:&gձ >ީ1miW FUcދvSyWYN~]kMs/N&n?,eMSNԹzb#޽i5>bQ>Gc{؃atʅ};3{ ~6žc;[1:U7ٙ7{0V~FQ3W&h(fӕܑhU!3E(X׫̷Xf¹#?4*nmPPKwԻO/O+x,oܒp~ݶ Xlsrs[h,Vf&3ὅf_zvL/4@vBJbCg^Bc/a)<#l #z֟{nnǮG=:{iݕék6hfLػP;6I=d.hፎw%ъʯ˺Er{_?;lS||GLï?4_scW5pCSpVT؋=4`SP3/9>,`2} -lv]vu`h\'}e=19/}zZP>}nsh5kB M7[[.tnv·pHMm:?ngϙP, W4�m}<vWq.sNb^'לOi^ f>RD)t}@kUP|&&6|vU!]UG}t>>#KuW!u7d`|Ë>64R<(*6{e΁ ko3tQfd]7z@c aWuM=tBX"nG^j?Ob}`.{OsO5Ü!kIGu{_[4lʞy:4~C:ƞ``Ȼ{IOsʣ*=ʺ@.`<1ޢNO ||UV4TIW7n4Bo+sm\ }GkKНu)YEc ?LIX.0~ǿ+92Q F;h!h%Jctl zZ_k ~1^}AO[wY4tm�4TvWꁔAes ?=%zBLKmIO^ھ kL5*IOmwutp<יOQoDZq lN~+Y׎\7ii.#i=M胯"cCC:6l|͊mImfY_kdK~&ۢRhv#{~ 4ߥ釢5Ì#Wyt>M?u7u-U9Vޗ_?W;a%r*KzPoCTOɝvɊn@CѴ}i=RW&gK] *K!ڜ{;.>BS/p}{_}PE*UM>c(k }~]=MsYΧ }#&_%t]qt3d^, 'efPl:ۦRhy-h nHgnY4Z >W2糇F_ѥ[ qiⴼ d ;?_<eHwȦCkz-7S;%M/p6 ?궜8H)S6ͽBtԕİ!^ߟlOЁWut<MW,S ͐U?3Ms/7~knOs/HDCdK6AE|jcVv63ksCTsVyrO/][mxEM%nF"Zܯ'߆u>B{= ^Gh e5zf&z&w=t c-Be}+~{TG竓Q+64`:Ѐt{#컏;rh]�49uA'UƢrhi\Lެ#߭l&ɅGcCïRΏ]4\eC^k%>_'UNaVɔufa9|Ԛ:p2;v?zija9&e{!vlU}:=f5z*cQ绯ɇd#>js Q+uBx(:GurCjQLV-+:-5+>+k x570{ ?Y4?ٷO,mҎ;5 4RNM ٔM FZ:ѓg4N;&`zh 4-O<V:ĞWL N U+hIHdB*j(C1{"њb40z>߾<Nu!G`nx-WOL/$\|T4cw  :i ė:hC'oep|Rk Nqo=Yi d:O@'N:Y6EN4b{h׏f*i4T1`Ͻ7jwNCm;w0/,!3 w/zLl{^&߁(O3Q,ܡSEI0N)m;.Rʩ1fVq|}XY ER&cw՜Aa4Q6XuZOotFHE+Z3i)u]of|gO}jj?pjFzv~2qGN5^T9$ѧ&UMe5VI}4#iajir%pdOm@SʌI<Ћs4&M>T0j%pJ[RS#w<P|iYV7Yal4 ,?aV@q˥هjUʥW?7+?Wa|:-Kn+(kE 42Ε^gl͇.Mk[ k =b4\Z LW'ͷg_dWLb[ʞEϋ~Y$NJ'g>4=Cg$/w7:n,}* #4_o t,|ٹfm3ԳhA?BѪ4E}xE;g tBwz {|g܃XAZa,9^jFzg#o@}<y6 >P7"YA/\ iJRl|ot yPn99U/8F_e`'7t~}6MܫJ_l3i%lG>fl|Ѭk!kUI٧ɇE5y4)}(R6-r (} enR@g ]c1]x}V+Up}|}Hwmގ>lHƕ}q| L*Mkf߳$ڌw�cWhZkv ?$694*kh sh՝MDE$4Ce+D*h94nvWċz�lh>~> 7߾݊{ 9]=.ΗËzqF;}n%;E&za,dgE]:qq`?#Mek^]qPeg9] yқVD<QK7v[]O|'}ȁN$?uK]&"F/_ۘ[m}[u-lsٷwX!=E4شxU-T( ?d&/WAuB G3`19hA ꅒ7~Mc4vH;"6zSnB1~k.4& egvmz+߹,>~4Da7 > Χ'GZS2n]hSc4>}k8M?lT kft8M?}(|Q~|~[HXԛ6F,r NO/-ه^Ri{lf vfAwDFq}GNuYyt]|QowYC> ^iLo67ݕ:k<A`kюɨkTu(+d6:ں 5'hUBӵq\F/ԪۨA9>)p>u'R˾C֠هqAĻÀi'h_Lٺ4ԗ U˯x&h)L駰jvZ mFgӂ_gGZal;is'M?-5vpt$M?}ɡ$M?P7Jѐy\gI\tJɎJ�f'iYѯѩ?Ա?">I ~\+nIώu+wXwt4L/@2ҞK"n-fv#F7y[fYvGOޥgeysUU9L{.=c2Ks+m4$궁3g0iۤ 񢘮RKs^N>%;[mZp4LRɧKsK$7P ՛tsݶzbCI.2FÚfR:2]$EϣOMzg.};0tsh'F{<ܦ}V]4bs(!|/DfF_=k7`6]4BF'M"o=4.~|u&X G)G[uwhqL7=_N=_vK%r~IΆuid֏/鹦an}Qt  f_:??M=V4~NO//9dч.;|*4ҼCT|.>ɗ0lVj 9/4*V9+rsRїXXHx>GMF}RpٟO~N@RsꆪBHmxcƩBJྕxLUUh]%w}u~MͲ.ه1n3هѭFWCzt*BK!NU#𫔯|hCR=4nzbg٠#YˆSe:UŮDo*H-J6abOB]pr;#xzWFэFBd{>v/5>M̗huE؁{g;#^^?^ t뼦u~h1+Wvο-b^)ы�f&_vmE+ߩ~*MJZ44ᑠJ:%vU| ɗ QUimΞ{ ?PWqUk~uΧWqHإ_TMK;-j46ZM Ǫ{t< #p"lΔNF)eu~SG1{oPRO<we2|t& *׬`FJM-^Oas(N~%T+$K6fuv'~;c>> >pߑͭpTl(XF&_Q}n'jO@$ z%l O@nG!杩-*I}1 VwtaO6D; }KLf߱۵9fZRȌnߡNd^,ze4h{4oYv-֠w׌`AJe>۶dAj+Ďy=DD <b8b[iTăxPg?fv7i)DC;3`,:j֤٧O+ |`(wК4`$gՎW_X[l97E%jo- OFSotO7 5iY_ı$#&M|Vfeu kೃq3\ o֑߰4L{ָ ˶C&ͽJ'کZX/ >s؟aQٟ4unWĞOfF7f\&I+^|f1u ]Fޥ{7<X"0W<KZZu̾||Lmt-zeS4z/df׌wi5A k^o&rڦ~qdllD_hF x|H)\ bNbF_!pB+ئ3h=bp^v˶h=;.-}QYE^;(5-vl m+vVfJGiAb=uU șXm}fvaүbm~[׺zp6 @=; VئWVKOئۮɳ( mK="3<v*l7RLF|~[՗&Zm+.CT}Yk&z.qꏍ>ٗžf7v s,uGvԥ[v}9F_^鷈}lcc &~hJcPS3|*NVeLh]ZSdξ{|V<u)*>ˇ4&4BnzץMY~K҇wIwӃ%vh<yΑsg-vh!"بLχjinqI\tQm/޻۞68U=b2vΗӬqTQ~G}<>[3N[36Ʈqպib`3:c8UW?rw=ˇdz[unDZ0;85[u~n*ZRzG<FMR+˟K&QcE|UkP}Sf@"#}S}_:ѻ4 g&*}F胡NneԽmS|j ׅ43}hWH-YbFo.kGN|xGo R=ŶvdCUaKh4kݥ_np'HR|82{]K.,/ս?l0'&tg!{Ú[~@cXf0|>-/bFO)4gL*卑`9 G̚2:�jv-s8=^0wWNCM_?{bpeNCF pϵU;b?S|LybmbNc@ ެҝBtzGmySةggs;WmnJqCM֍Ҫ )AC]ͼz[9vہS{؂^B[zR6]XIe~ݧ:)4.^[q?߸uZ]XpYS,7s^i̾~|Zb4kX׬<:M?i)٦ȁݱD=*$}IOئ g6h44X@VypmY+u tlhIï.*K$=悱7cWU>Y(݅gPo͓$ ?F2Xݧ1^|!tdgCc^]?oÁn՝asiջҍhwB>2l,\{v+'wcv/=Dv]|^IEZ4aQTZC'[yQlڥ':6=2Ks56+P.M> ;8?Ea1]uāHM9:f⚽AZ >4ǒܾhVeGu6_4Pk20^苊+;0|1y}bn{hADC_4Wui;04e_)|6 *pVQIY~iEf+b@[]=iA1ҽۋc(4` }y4=Õm>2{h!mnyqm}4Rڧ⋭=M/Ov.@oַ>o|(-vvvM2+f݋QͅFJHUf]yfY=B/#լ|o!,.4n g]uii,\;vd&Bl?1iC59_"N||WFky̾~}Ҡ٨ i]viVn] Rt]i](6S7OĜi]TUXf~hr3;<_׎ϧwaq;9 UT}մ~`#a>g8?O\u|'CyordEq!W=Y{:G>g8߫,QEv#lvvG5E9J.pDzp:Qyw =د }|΂{UT87:Lmw<31R8JpW_W'z �2qg]?sٝ4`Ḿ9^<4 -Fw]/|U,wge^ɷ"F~6d*MVf4hWKFFt'=3lFOFi*-,ץ|Kn4^f4J0f4[a1}9&[!^Pf}԰G47UGkp8M>ݼ wLK-Nҝ&ƨaEk`t< >u7&4Kaw| ڙԭw+&>w}GV?EߣiA.@$WgiAk0Տ_YǗ|}(wb!E?2ߝsf{U@@4>dִXS둧O#]EVd1]w ڍbaXm8}uwҐ|%h)tAUhW}DɧPwɗR |Y0Z_/hAYLțϧWwWks̆N 49b3E̞44voctGk4\m,y:k6V4JC#iU1o9SUO|kml 󩢤g"]iTi?> |3iaO@[O=iV5y֤g&?{ 扼&x3"Gaq53g409(DTȇۓrsiTAMVCgDn q0hy煾a U+d~iy{\Kn:[K8jFܗ&_sKӬ& v@V2+_}Xպ4.^G] e}*F_h?WQʅ|N{\hUUօ"2BεĢWZ'_gE+(3*+99c 4_|i#P[4E/Pm"(>-Ǣч wjh&턙|,|sT<PO4w#}3M/;4lTMoWKiee[V3**g&DF_z;YTLb򩲏ΧїZYS8l+Ǧ;ν�}4Ro*lcJKl|O)5Ħ/թ C.ɗKfG?K6ņN}K '4jw&6 8&:m(0H{ DżBq?zEy&BX#SǏV4 a%߭ !4kWl1ƒku~twz~7{ʨ|zEqhމa5KzM5k"IunY7ʞQNjvG5cui4* Kwqo͜%C`79| vwBIQuw),9) vOkeC׫7J vtH=ָBiAw)9X#6.)>q-_˻  P~,`V Q}[+iDR 6(n~>>ȿهՈsY0(WwӞa4ɺќ_Q>0?k&FoDyKa|- Ųg42[btů\nZt0}"F.vX#RmC0|0ipX6}P_n2GhIVm~FO[7Fqh4$[ w8rh]wNï.r 7, '@"4٧n5/ ه6Wa:ucnw0.Z@cwORt҆,4 ҩ_5?{i. jE;9h}5' ADh1QwC3Yi/hA4.lЉ;_٧+Vc}KDStujEҟnx|(ԵD4Dgb}~FgBWF5AѧXl:?{vFz?&s#&Ű:+ IO!/FCrc]Y$M>CZD=_'&Ս{fXZG :Y-=K|6Np|$M>wXi3vU�|{fJ7)0їi!hC~fL*/o5Y.= -V=q\{^Z1iζ0 ͗#kU t +<ӥfZoĥW?mW uib}~iUvCaX&> ]<Q3ɨ\4<{Ƅب{hڱ;'y<r[Y|CM\4bn3eׅ95E/vݓ�T6mhal=^>F (6 :Jg,h37穔f_`vW;qHԌ.7> 1S_WлVS4O6j!Wn}Y| WśGwKhD4 +O$dx?ad||> Ն>t;7M?(17m01-Sh=ҩU.0ΧᗐkFOV𥫒a!EMlDN~~v-k۔Bivs7w+]Kq|}aMaOe=Fߵ)40Ս@ : L-4ԝ`柍wh]2c|u@WFTZ} 2߫s%YҫO~]=2ip s$9p?K\ЩLdVKrC 9깫g}zG}~,m2~܀ִ6M5bL|6/5IP=0;SIr磃|^OHrV&1[Q46dٲuT0<|*>ֹV~B*>HV5z+Ic]<7_igK5؅8#g<4'*;^O;4hR$@JcC<x"CzBCɝOo#;̹o4ӌ]qi+&@)q<&1\K-N�M'o#JPiaB 06exzM>qLK7+oeZkAFOBZ_2e>'cl3f<F Y"t>;Gz4\EeCPcF4&?kii$wmx+bs&NTFFt—Se}z}R&<NX=}M ⛏(r|4FhLi8L APt Tf;u:VAs@&k?ԣI {Qt @ {7{+Q.( 0_!ˠ?ljcW |ZkNz1&ZY{ZC1%~tUH[2ܣȠѧT w};94ʤ5b oX Ib&MJ-3_~O](3iY5>xW/iYlO.\u、gֲdg:і4 nMXP=枙l4{hY}4ǯ㱂WT6g|9Ke?p7~}zt ^}yG5yiy/fDj1[_}F@!(KcsMUPB%(1_|n֖y'䙽w4ܵ]!ǧL bݸ2ݛiҪg~W]һcj[\7`{p.zafg ECRz |z(7ܣIWow*bTo7|P*6\#ذG"XpMpkq?:&2x n|\Qα4Z).ݩ4rYPEoQNHw܃ ޗf:b,!nz-+sKKi䬈c{ݣ;i{\I Z<54vWTݺB~ۥ3D Sр+4 EcVw)B~` @4u5w/tŰh}WhU*"l [Tk&9h@Ξ>}׼tM|yfʹnۍg8 6GO\8aAdfWQWq3ag}z[lyOe8؏Wi0^>v·qe;m_+}DXI>`>BQǟF_,1.QktvH׎H/Py%:ߣ+=RߥϏ(p׋؇_vcC|(L.-oT[,kU~{�/$U}{ǻڞeJo f VBC46ny\ڧ.ѷ!Dc#2|}B?߼aCiAr囕 .EVF ti.~(Ooj-164Hr |Fl]ٍnf0҂6̴n4D["M_'O`Y]7/;Dh4ڇKnQHŚ #_WyUDŷ9F4?9a]u7f'm$: < diuWnzp:Mtskƫ7:F\.,QOT13ۜN@")8.±O4MJC]glDtfdDz}ǀ(v{Mw0MQc=<9?hGiru4-5wGzt>=]:?V >DB)(þ4Tn7M9b-ꝍߠ7beBx7h.ֽ/4iPBp h̐堸9$AO+"_]Γ4ʠM{Gˮŭ;lI{l찺M{v.D<rӬ7?&ٸڪ7xnCēQ^pw& ?LT/~Iϰܭ~tݤ"uKBӡ4*nG .>]TkV4|ڌ^:u*{.>G s\Č=f?IU3T 3 )Ys]͋g%ǽ4GIQwiy3Tsu]ͺKu;(4|y9xVxΤPT4*||I-<૤p lje-|u %dW֢wS0( !E^`xX╵hE~K."Mώ3 khIۧt7b֯�0A�AF-f;v6><߻h ӄwFzdm|H6c \0t8:_v㞄6M<h&@Dn6O(kKnBKMMִQE14�u@ Ҩ6~F=E$ x}K[+|B/>A/C9'uYBֽ/4vyU˚㟝O6F~Χ59{9Q~m⮍Ru6"Khٶw(G;=:ſYD/4ZW,ݦe MrPv>h] D=M$QQIu/wu|5챡ݡ]ѩ'Ϗ|?rS⫢Ne}V2P7?QCx- +Ż|F%]bm|8gcv{u|l@)莕*Y鷕'Ki՟_9s|&$Ki=Mԡ0{!KiJi)Y:>43d) mR4*IL(S{ۀ.="4j]Þɇz̾~z;N{|ܗ4`\+He.4q]ϊ5.[oeFsOvZ >Ω-hhB[|ٷOO1be4`*`K}1B5KW|N'fiN4.ihI}Է_`2f>M>Io뵯TNBct;mЦҁ#Xbώwvc,wj :+*q{ic 634j{W4f0YNx>\V7e9J:v2>v#4cیv`ͪ`t/+hۜlެO)[=W?_ce+nWB0)d>-ݶSX299}F_sbJAo߮8~g?zɅ͸8}&+hi]MH} зg m"A={I϶uӼ枝OϤ?.v$ ^aKH?CoYIsnX /7ξ||v\QSgPtxi“4NݷУƤgu&Ypg),* Σ1w/Mz; . BKڬ{\|.޹Gr<ΧqjiYw2iꯃJ^4ܼv]D7pf 2\~ncjqJe]~fӑmSXb@Е>zcƮg+|;DhU؃R#άOJlnH^4dާQ¿M?,i3ڡsxEn/MbhhZl݋_PEvE/ڤA'saߋ_=]h"+뿳f#JtN=L^O %Ԍ"#ֺ7;\:WWaOٗ{w?24qmw7s=*6M"f.GnMs{+맹͵+ c}>ޣ[%bTbQ4`7 -܈8t42[}V69_heLtV|,BB(Ս ɇFR>1R<MianGhvxRN.lc݇"߅"]'ץ+Xlc M?(sD牂ŧYϏV$3GuZf??M +:ivTCT\:2C܍D,!L2:oqQ.cgxG }>TBz|l cv·JhSr)ʸf9/QP/lL7|5%⅀a9|wϯ1DhTЫg QO?VByeK(ϻG_>q.ϊMCS:F^\6B[GΧa\4IЦQQ7g,^> %w) R+@/Χky xlٷMctx(;Ji{9nV~=t힊yV-mkFb[{`C:F $:);Fi&7[a)d:簍fVIhG쫘vu>V<OOl\Gaʴm4q`h"z5un.aE]N%4v,5o'`hw*z9aq4}:nOԷZG<q}ϝMܱHTf=;G.5a8\f&zƟst>>l ;N'K0zmi\ݔԓ 3;Ǩiǀ)yԗ#T=y&>[GCOؘ8̐Χ٧͸W|;u}ZOO%w:fփR/GN^T>[^cfN6~ii[kOksx8=x}vb *a'i$*v$M={7&(v›M$M=TLcR$u>=;MZfM{<e4Lw;[̾?UiYMAp7}a)i7k#PYG3"6w]rYĝ4, ~ %Oag^(X=_e׻NǁI4߻4|KvKnt>>oQj@6E}ivc?PٗFk֊gdFf02d-XOB̈́ F}9~~}V;iV;˶/>u/(�ڐ9SޗFĨ6 }cM~Y4J̈́LęHdÎ<h//^4Bvx=a!f涿$!"f_h/Vz!}]t,|Ut-.6gdE7JdkaUM:V<94:&_d="9vK#C:g:2 뽟N7ȦWXk;<'֎ocM/$4Ԁ~tA6M/ٛCGWov><_!EǧTianiht| ;f84h}96MĕDV6S]iU8[ta}tn|mwL1ݣM6٨"jZ"4a&P.zܻPmBid*q_h]T>`2|맹w~7R7~if**"4*(?+NEhanGT(E[B#~qg:F^=rv^pg=~4nF aa9}w a8XyJX-a8X_vWݩk ANG{ght??;4AH4>&pמ4ơY2;*~>f$|i_ba8|a7C 2Cg-403& ( )"nKE;)(M 2hѷO#ҋ%=J0P|f rS'@Q|Mܑ.Q|Rn6zEǧWwz�,Χno ٙ#w*<^&<NgM3SDI0Wwi4![�y1~h4G7f=Qh[ثcT1}_(C#FJsL b4?]3Eb4 41~XN .&--Q;JgIi ?4644#+/6LKF_=۝<~@e-9߁x3Z ٯOorc#tj $NWhGs S]Sq}' ;ys0L4ΣLu�JuJQ<hm ѻ4 K9C%Ad —>8 W޳"lsZ&*aRU^(RWm H24ԣt_Xab |MԱ?JJwtݯ||_0kA䜪Ip>O$i=~oMSX|ږ4]Lm iO8 -4:mv 3&YVe͞=|Vɤ6{uH g6+IMV"C,I}(wAϮF 44** g{x^}Qrн=KՊcZ %4\.=xG科iV4h(aiy x1ػ"ri9DBĽR૯eȩdq\~ve; ux9!Ko=0=3.8&ԗ*X?C<,}0[Q4"x1_ZY4ۿ4 >;lJttU;tD;_X^o,2jH),~0>f |ٝDhiZϢ ]~{wѩ-Y4P_Mw@Mp41 .nM")B(~=\_;F_VɄJ}qiɶ–;ΦٗPme.dАl}iS _.gf\!ᅤ|l6S+ۉVˈ{^B۠2Ztzw qp=d5x*\BsmFhQFO܃ֱ+${JNs~#4n noƲGha#%ܻKGhUu 9Bº"@iec9nqceb_<Ju8v<UǹƁ^wXN\]ýuhCƁRiîq<۫Gd|-muz0y Łt.q< ?缢n\;v]@O]9Wr1R5:FXڪֵSQ}K#Z Q}aݕ rYΣ4i汰g>M>YqȪ,b �QiY iQ{wze݅=ay(-HOiÙ4j m9{GimlI41FO<g_? >kA(>319F>W&ȣiFj[1v0jhSb>!ݫdcp=uo:nL-^ᵃ<p> rbZWOȂvsZy64.$hY:Tp>lF:n}Gjh;kw1-z6t*X3 ;2;}!F3i^lX`uvb^S(ߞ䛖: SCq4D!4P:0ew Hwt+0?(kwrB[ڭ7Eur|ӺUj >fs><ɟJ圠ɧPl,up|z'hi|OPЏΧ٧&3i)5{?=PMVn40p[.3'hiJWiZ9gO<<W4f}0WzD--oEI0Ȓi}P|Tg{'iտ5FY4O}fguJh9;p#if[sIl/w'iAJNØ~3Ix`qf['ijɣMEl8Gxi>-ov][ܹ4K) 4*2 siJkxKf} Csiw:ꙏo&m8R0OQOjZ,0x/Mx?0OFϥihD|4|u십m.xFt .~}fr.b ` F~yf.~PmFY! g>M@JݧN}yʡ_TRY% O]4BF.`}gZECmfY+['Fhay4)~Y>=KS+Bo u+u"yT*'nWo6w uWգ_2c}?:_v+,,n~((5|@ iWAV^7 ?7 F4`I=[bt> }N$wA$rn}wj}u71ڤBX28*]'nFkt<XL^?5SUw+hFU|=ӂ k)4*@Sqd}׭-zXjBKh}L~^Uw!̴Z@*=:m*4ptWT!cSe9?2t#GYnnsn`*}2GQ.H1Mm:]C1caze9|lE;t&פ2G_mgHsP8̾}"E3dqQGX]~e9�\)~=|?j9jUIH(Qc;guW1CoZѥ}xw"*M>F'Rqsw)M}Nb*{c+MmZ4{E>U}[uܥyeiM&_;V&߮;R/bȦ6 B4W}ڍf6X~LEj4dGg#,4s샜w<|}l:-K:B Sʇc)c4.J!0u^UWt@:8Dt6sFCO:v@ɒM=F^s>ૈs̫FC\GQ[V ߬4emn3Duy`.QwNB;̃"J`[X7s[iͅ%#1|xNCxIق4*v &߉lWQ4DMWYg�Sub,N~hۗ˰42!Į<O | of>xYe];AO!5t{;m}usT4f J* Ac#\$-eC zvolqwG5hi={Cf_% {Z|ȬDGÞzj>W!8>LР,5+4-Lƞ 0;jث}/C׶]]0}0t%i4[Yh쫏M@ ma!zM55i.梽4iյE!x3U8iY_?١IϠ _? Eqg-i_^)lA/ ?lR}8GSli5OziypKZD+ n!2G%04)TR/>߻"foz>4,yʻ0M{;+!"34ӦSQa=m x'h=j [+ ;֋E/}0+ןi@-}&ؕHx}D%B*eX] .~y4fKN{;xyҳ 'Yo @ۢᇉa/9٦Ic2iaQOwVl^ri%rfG�ο9:_eWvZڦWofie~e&C'$4B@ݕQ wp6DA9v<?G٢-4@klt>! M?hܷwMhݳ࣢⼰`S3~W[VGJwjBӯ}w$K&4`T]\τߍ+Q1r:5WOV7Ϭk\NMhA 5VeS{cw9gO_1v#.{QR*:;*G/X znG${tGZYcw94bb.GkMuSLe:?. |J=r("8]>@4vc7<^nֻ'2qCoC/4ޑ-CoxbJoC{Po"uv> ?,Ivl+ ]_mWH\:nF4v]]Ճֈ7ᇢ5./2:) 4" bXtT~cTg_5+:*}:իВ_iac\Gd} iQo4hǮk9VM*v?l>7snυTˌ&7J{fFhFOWs;=f4oMS7#PFFO<s3hգ}<*-og3~gϗ>FTj y[4.C%z;@I`4 l]G׌>w*YhM@Cc<";~ښ J=M4\Mhww8M><ٔ:T/1чᆱ)Z<iV=*鯠×F_EԻSkn~|AO4-1c~izu߭sljuTk{ZLZZQт枚\зQmXSǗ~=s(oAOCZ#d 4]ۄ<5^ܫr5龡pY9ﵠWj#V'fF4̳gnGVl64 sQM nx%;iU@bS3E9k○ Lƒfc-Mk-30:&3+%cl’f_6cg]x}7^]̵[|+iMӽI)m],iy=Z^\l.>Pf3]Rَ|vg1moBEc uHLlf{E0~ksGvjcf<Gvdot_cMOeV4[mTƾlvijZwBQ<.M@h4WqꆋY8_4 ._=mE/Ƣ!Yo ݈} _4 ժE6|~Qj'=4"[@>p/~جnn?|4*X!ﬤiNaQbo}|>݈Iԯ_x7 O_ijzo~i|I7 tvZJ[fbX oغRABOw{&glS߭U:0:Mn ^z(tw+.+Ѐ~Kz.4*k \l҅f߳1m4 rSr ;qƃ#9pWϲfhU =^F| j;0Y!O: M>7rbF45,x9ՑO#[)Knu;4V龟㜏H.tN;Yٵ:2FC꽇8BzƚfZGo=ٸwTٵ 5H WWM{;}:CC..uWyL4n !'o6F VG%0ȸwKW|ZήށUbtՕleڑ֫/+ mg+*+4QJoWNT?g>M PdD* | z\iսrFږΕ&>?Z9Vǚ5i' zy7x& WZhi向w\M>6rۡTmn}LTxJ FsN8\8 >iY%Jj\\n4PDf �>? >l˺P/;l2,"RugQ;v~ś{ep|GVi~|dw\:;žF>e2U vwvځz~wN,6ݐJv4r}Pu=ȕuyixwK8F߹1ˍ>:&wrSL4t7ao=!ɧguz.M>lhY_qi)dC; %4 W䁨6i?hi\;AOs</ %4ٛ &93mөb}-nBYÄ/h403?z'>Mw ~R;hVkJ}VwOсٞsͻIlݶDzEQ\_賺׽쭼S/i 9(wa0LS|DJd z! R+ߓ&DHÓF3i}4Ё>`}h^th9CO84>/}]} acwR4d>}/~pOzk}!/wޢ9 6:#ZIV/~b~p_Ys;/3`hhڦE/,X-UE84^.n7ѧk84BXpg:lC/Ia3*[\ŧhCšчɠ lU}TaK[}Eoi/2-)oTg'P]$`piuJyk~r K;pj MNO\K`+;WKȡ% aEZM? Mu/ɮ%_B1 .[w-!4ߛzs2WTvFY. >(~U*<>HLjf-ZWor9. zXiBm+h ~zGֲ .M7MъPy\{]oLM *Ϟ^wiUso@k@-t\{[4F8i_mz57qѫ`)4G_?)n:m4GoM7 u;էo4GGj9m07zʪVt?N4GW~H"i߫kP\ooo4Gj$XQmW:~aJW' otxN'.^f v㣢R_RPxZŧ'gP] kt*< ?Hc |E<~ GiI/a'{K=P~:⸳{t=VQ~b:ez']QbvjlP'S[ŧ׻ ^wYJsO@2vy;,Ci &kPHgW'|OSNpPFT-'Bi=0>F׻s~a•)W{rv-roz R|]fR5f)V9@?=~yn3yXnt]mm4n( {ҏ8f߅3K;ktH9`֗lFMm] <7h}wgLN5青Η.SN=fo%N,8שKN~ wgз8ewkGNO]pڹa\f)ڍ=zjJ?)Jv"zjXO74 QޣtϮ |Z{O<($~=4+; U,YޥXhM>:Z;ht#hi/; oUx|Y@CM>zkx#|vnJBQ[3 >}{g. |{UtWlg#ipg"iZJ!T`N}f1iw'N^{]2$>"E;Pj%Ϋǒ~Dh4O$>{c!Jnt׿􇉤g5<k#Wy42?1騅YpذC3NU|~~s:|ƟN7|̯huE;y n@64:A +V_4񗃂/K1}{Z]I/¥NyM?X Rx_Te;e4⌿xF_|nU#qXˊhT*~׼^CsB7WPi^4硩xA{Y<4F*^<Widgl3n{{=?M=(O!An! QV%]K塩7dRV-YKb\:"diu:1&lv'k9ȓBs/ѭ:NGM-)4R(7!~} ԗ0W_h5Vk^/{+cri%2MR?jH}5{]UHժIzOa.pShakz*#.vf'W*hGwe)44G4Jϲ0/>\ 䭮yi<a{%`}Viabeh)Ϯ1CKïQKï?sgYA)$9!@;?z+nC#Is ]ORȥ wnP = )Kg$g9'*p<k{ʛ(qJrqy<Rtͅot|5C*hd|4_d+7lw\tޢ]D#`{ئ4De(aJJO5h77o Omۓhܗg}JkC7,4zOa(h{[6up؇N?fX*~œF<PǮ&Fz:[i+J#7{w{ ˎ4}WeRA_/zFHS{E!p~Kɺ4~<n>ˉ4~DNoOn_Ss+%^Fmɶ+{k4~!ᙔo4̯ʵ{PaѬ4}"Dz|s}KA;^{bKt}N\`xJy:O% n"F_WM:?Wޙw4^?YNirn/Z4T[t|iuNqϯiU|}J1:AɿtϿˠ٧O 8o?ʠѧ<htA>7s,44!8vn˧ɇ!!|d4nEM>h0̂l,2hA{PJ3hYS?ivIcw+sv+?iYC[_t3I%i}D7M~.gN(LꗿϤg]☮EG.M3iAׇm~wߐ4 ]_W{4\ 78AdΝI!0*fˮ*i94F^~M窓+pQ4fۺ,~%pސ}FVh9.&WΉzq[wV ?EEKo\d8p1>׭rSMp҉h7 <4?žE/C-uh0' O/L'xNpUS_RDrC߬u֡Z{0K"GZס3v{+ٝh_}(hV~7N|a3v:tJ|yg٬.n8uh%̟&r䜽'L7i_ M>d]u[B/;< P}{|]֌5=rM%42D?tx^֣|%4ow,CO!4Khu8M)J.v,oJh5}Bƃ{Jha&n~F_]H!O Of&6 `K=7w˅~.ͽ2?T.ZΎE`oq]{>UҽuiU})ߌNȗKPnuiUUC~!]tV>I=8B|t OWLq,gkbG9:Iـ@yQ\0G>u,rtRL~Wx ].;!ߠ$P@B[_bg9:|oSG+zYq[;3h) z4Ь?3fOO+KLvic'C O;4)rɕdP) ?јҎ!< ?!tuyw=JO :;ځfDLDkqϻSV'9>} Y].GXKiZJaإ)L); => R}Y�]5ۣwa];' pؼyF}1tG0乕M*w5&C4̆35l-׵tt~ 7~clϥ+YvԖ샶 )ڵO?Bpg[9I}Q2|hocSFuJ=t+>,EfwK*>\NZ&C:=MtΏgQN٨];qjy4"{9M>t- gr3~0ٿGWu;HTNUNVtv!n.i?utPxE~ѧf?w~i)q+3\d9>T P1u\xl ?dJ颰FB*tЮowחAO?06; G䃿s,4<yBl^a^ۦv N_P,w ^As׮?$^As#z5ﯢ~ {!A(V\zWz9*iִ뢡Bk{4Ыnîv|1J|V4~h%ul_Ncϐo ~F4j4^Tjߞ'M^\cxXy]m#o%=z ՙҺ OWz粒ׯ k/t5mيkQZ.mHhqЉ,:ֻ]o >N[ӧ_ŧ1!*x~H&_@h[Ϳ@^aCCik{*|܁h}᭢zu5hEvYtt; ):{޿ L͝~6>Mf <S{B~!:sOijU|~0tɵs{wML~> ?4[r?êp;f_^-?X~ΡٗOFD)sh}3` BКo'4xwgsKIݟq4kR/_ZهI<:>;,:+;)+NŧهYVShaLk^? ꠘ'cp|*<;zVYaB*<LI:fsi_q߰ZfzwRQ\?siUܿ%2iUᩭŧ-!8[wn:SN֚vC(t8%)wa}dt(-wQWӅf}g[Îr`h:jwjZ:A!{3GVz&@>;ʝ`Pn`Is$x]v[+:_/M= @ۮw=ÞZоh}gPue<}WS[thiLӭ~|az{1XlW~o`iU43ߦ&䅬zn:0ßq(ƶw4.z_ )Ƨw~S{&\(>2 G=ޙ״zf7ms} LB77t@;ߞ>*UvݥwFMQIc}7|pԲ;ۇyFrA(ҽWW"|{ !khujSl {WX4)^h=<{*<tB# w}FW{jRCM6ܝ=Be2FnF߃L]rP{nվ4giNo:OMQӅ)Hoi)%VIU6CcmUu;nѧh?K m4p?dJɧYb#)_S4T;AcOn b8hUxz_OM=Bp9>v4siC"=huB;5j 5i+&Wl=z3huœ4 χWB?iۤ?ܰ$ >kŏϾ4 EC£C_r4wMk¿4;,|5"枋Ph҃6k']g̘4COp]Y !Ӵ{4\}8p:n77ƞc2ON#E!:tץ*v >?%;Eϡ9(f8v5E/OSv 4h56> Sč~:7n蝢L/wnXKVLEs/:$|rLwYV[rhM.7VOM.eӎ2h~= 9`vחC/ҧ]ں8J٪M>|ߓ@+Td9 v}} NۥJɡGpme-^18@.f7j){ &n#s.`G;}J4~Rɪ|Xg=[ ᣝt[ '8QEv>|zY1*}3zu XԫS[n:U.&xjiuFujڏwx{og2sͽ.e.b2h_*4i}.w:цH.ͽ6j[e/^uk2׾4z&ypz;VC[riUͲY0_>;񰱎) bTvt#"v|CZfpFi{`J%�GLJPPB>;gi�0|l Fo7z$g'8:~?_J~_ӝJWt|hN#3MFWtx  R!v1pd:۵Sȣש~H h &r~ʩL5U<}2 xާ_OO064BmS(>L b0jǧ'^G^w-:~] Iۗ|JO ::A&.s103?dV~(9eRE,Di]{̯weU,٫4zg: ?Hݮ(M?h?O$IM|tj#FἭ?}GMGGĿTM键Y*z]?u?]|~Vfw34ߋLeǧ{QA%~߃J<vr b4N|Uh=ܟgWiqZ|i}LTiGWiM i= vl_Fs=X:qr|0y4{[-Q{aG|Rrt7sJg~?ݯxyh-||j2)6t gRH4n~E;l([uISO8ͽ׉C%S{%~>ͽO~FTe}䟊{&A'q|Hzs$+h%/}]O;Ni�ΦմmsKC\MtVbO3h-?gB4 EK8bXRUFX}DwC暤g5*zW*<M>NS$o,wŞ4ɗ7 k%M~Spջ~|nI|b;'?#[d& >G!I|h#d -wC*>M>(hHs(ʤڵyםZ`0ɑwDKCOz[!՗W4zi<=o&_Y#)2?1~vG :Shm i;vwLQEr~~}$_|.HAsZ~y8HbM{Kypy~yv]GW&+Z}+Y~boCtdVWhA DkTzB9~^~KUCs:gjSF}_V3̲ȋһTBkqfx 8mYGha`aH6[ˬ 6eo]nzooi{S_AM/+s_r0w4FM\Ž޸f{i'dpH(DwzЫs_= fXKC=|Dkrg9 ߁*P"y16$.;a'?tZ kˎqtx8apZcg6X \vU{8gFsP\`/Q?b$W jZo^:h Os\z=w~ 0ܵ5zV>|CA ^Ogim;>>iE}4�iR- GO}98ޚ`vZ>}UС.p>< OOΙwP:U|!@q/g%nб#~CUcWiIڴ zi}3bCoWia:ej(tR'UOʠ ݯt!חp&hz5o>ͽFle|4ЩKL-/Wܻ6~+ N_^w!z:4CW';6].yt?F&X޾ Wɡїy[] a*F}CWIӠP5~" 3tnk4<Cze5~>4hvut :4{Uh{4A۝H8{ +i4^2m; w$-΃R:;}Aw~VOZ,'H>(rfַ2ǁ4Mm=v#rf߰GjO47LWu_:ݠɧпҎ:ĵݬM>MGx._kV404ofA :u ˷lA^EE։I FU{S!4TCܠgPR(Al|?O}>yKE>>> K^Է'Ir3uA`% .wIѵ&JiךM}Ύ,8;FC%Nbaz=]Iϱ20>|iښh#i9*gz&E72pzEϡ 488~_sS43_xwrft}<`-űo䃹͟f-|aO4cR4Sbu~=ͽF$L/sʣaӿF܎ݢIMyMLo iӞ0>4]a8MBywhI} /_ |^?1(%ny&_(Q>M_箵|{C"ږo4|h}P)DOR| ;9,O?/9}}Cwh`.W_hAaGW\3@ O/s|i~:] wE{By<aIq$|ܱWhuJ-'v "L\|w=>_apo_}]C[m}O7yy.M?\eLwi$Béjz]~-tWj.;gwiaR%GY6='&\8k] k0O/Lc:0PSSoU c90yXyv\O>~M]nZ&iN;/䚖>; s;&hʲ89+8Nh=gPo"+UNs|?qaؘ~ΚhA$O.ӃȲ={r0[^2Gs æ "4OO p[}4¿G=,=*,w'hKzsuR')M>{ N6 )Ƨ4P }eߊ컓8-y{Aa) TzA%ZM>kR|pփ '1*> oZbS|ݤJwػ8G6}.3yJS 롹KVߝ? QzٟܻFC?cZzMhgiS~ g4 H3@1of̚[ vz>( O<هiX;g4:SNZh3~y܇{]ŧᚥK׿OpiR~0z9fީ=K ]?4󜆟|8mێ4TOn4ڍ9 ?R:gti[6U>o'N>ܥ|s~j'-pSj]r']δ>]͍]vk� Iׄ4!ެǯoƟ}eiž|҈?SWmp4B-́K)W5/hu#^]xgg4WDW;[4aqw0E|_TfŨQ+pЊ_ͫ?iuIQ| zA5W3S >3K}>(5ڒ% Ψ+8^bZ:BҞ֤犒g,^st߆sݤvԗzk~枣ea>r{C:eͽT n?{zвy~ѵ-+{]Jmëӧ0wZ1fJէ_4д:\4@9C໻~ ^{p{DWeӶh]q:mS~p*ۄh703v܃<�+j遧^+tٿwi0|n-1bA{Gי[_=4RtL:k=4:0|6< Gu|}w~?;^ݓL1)1{΄P>-N<c]GEdgBztbUhe] j#5˲Q:{Thj*x +O0kOCrèI:]Gk/+GïN.UuT;gj1/~~aIw*4,>XVW/GüpņΗnja$ywSziU >ҎHhJlO;FaZMIa.D:}/$Gǿ6YdEpԷ{NG6%=y"kL! txSQV6t]pU<)"eg9:~߹3/Ex!SvcODKp 0lfh_{_ 껓&}4:i`"o˯\|b_%45@:ޣi?㉣5O ΋Q>|>d\|G*= ~ ]y{Х4*Qt*N%TO)f嫣]`EwOS<zWvF?_Oiݯ_t;Ti]g ^> Nb39>U}]O@ zBfEJ!9׮2}P9?eJF~?3KF-C?[ul9evfZ~2ëBJ?%샤pߋ eܲ3}h:+RTSH;vȻ gsgiHF5Cvp;/7(MʎJðWA^: Ť"h*i9'/XO3v4�sܟ9>>GOOoLI.⸥4H$ <N/x_pFiu|:Ʉ?Kiũ'V?4BAHAsO!G6M⤣I(4h餎n·Yp%]n >_)v:?h+ex {&9p# 學4(a(ugADt.SOtɵO[ }r^PDW5t4sZ~i.WfuM1zXEU-iYxq;!|4;LM}yM}"A&|<zKMa]Y"i[)>g'M?T_/Boփ!*>?_ÉQߛYƧV]C?mOϿA2o@zW_}~Eӯ-LypA-LSk 7ТA͗vӢlg 'M^I sܣ+nP.5u oF|=d6$Z4O<p)}рn]�ԧh wZdvgf_!Wi4p)ε~^vs]١p/;l/~mO 邔R ۧ̋C/<̳;5N١ٗ觟S޲;Q-Cŗy~V)Yq(7=Ɉ(]J; kʝr ?7'T85W9:#Y pY}nBF鶣kv}Y6vnx&4d|9Z~?bis~pbSfPuZviUgC_pNk2Kн8|ۊf;߹P㋴0vF*WF;LI1vwB?ͳ lW񝎯hFrӊ|@Go 'wqA Pn=ى25uQV01v cOQu*z}v#B8G\X|pCWrqhao;8=AN[]3n&.Qll9gb갨/Ŷ .hILJy/t[٣'cGs(Ryvi'qh@}4{J4> :ܿ8\UL+^)M+wTH1YXw|CC4PiB _||Y2*=RZ6ޥ@)M9;eg([$ONfػ.a=Mo4nA6|ohz |Y)NŒC=13TKh=yh|K;*3{̎MOr{4`85uBH40>Hueq>gsh5A >v@Nmyl4 ;:11P 9~­{80/T0d4P`z4:{;ѻV72~&WS|9`NOp_.:S4Rg{_wһbrR8wU3cFN}ˉ ~c i 3AOKGyt#haR $2U)|V_ު?u4y%aUS ?hD)u{4zW~>/jAïS}-A2yG?^^C{٭|3$9jn0'N \&wWK{p^~Ig+ K{.[!Vh0oib]4,q1GZՈjǧ[@`W'M=6Xo~>4WXyG۸7oƞ( ׃LV4 Cs0qb>] !Ő麣hΠ"n  Qߋh皿Vkh}zdgXhDnj)|6%<|WE*ϛ<Q:sW3tV4m ~6M`Z le; trOza/];@YpЁ#3~;k?4в1N/y]?4>axaKkJ?4+f8e=:eCsv7уV\r=A.K<qZE irfR5Ji^8c ltW ML|~[<|Х)x ˅_?]~iڍTiuWĺ`|M� ;$fB>,M\hU/{ϖK.448Z~B l 4*FXr$~igƒ~ћN?ܟؤSR^9Z6u9;a63tV'5VR BQ$[ gG8}?38GGNh:.5~Ov]vc(s2 -ldvvGLG͑kGI$kQ6f7:xA{'P_65鰡؆uC=4(Uy̽V]hɍYkuZw;5<9-(M8ǯ >(ànhw&_'\kS>4aC nmx\i .Q>|gJSs^�ΞMԒ)C04b>(o> K2W{) :tWi]L' :޺ɕ^SsgJckKȄƕ<mZ1Mkhc|OjPFcBt]މ{g33{׼~KuF7|EOzX{&Z˧4h9\ʹvLwmn4Іq}lr^܍.Fݝ_];Fs#]BÝFVw}R=S?]݅1t&ab|}*4 ;t39!؝YUgڽ}| arp#YY^_4 ) 6|tQ|^cE΃pg󠡇a^{Vg{4 v=hA &-omACuꝎgV?յ <-|G/iȆuwNNӺ]}-OAs7 ?9dwŗ4:9 Cd~48tNgluMs+ղL{0T*=C*8 On7VM{wO|ng4@ X<iV$^ÍƓLI뭤k-lyjWd=*T M[Qz܃Sj(|CijzP ep õyZ+{ F)Yn5hʤHtW4?E/zV ^gB\4b常ZWw@[4.6K/:EݝġPDS:F]ơGFq2u$kbU|~ AA+eciYm.V!hZŧQ5~O/NS:ށwdqh =u}œ<Cz\C$<g÷ۯ]m'Ch%4ٙ.YG Bwx #]v k~P7h~Q邡מKX*<;j "p[Go?;;hf_ٸ4G^]&V3_o:W9r^\1{tff( I!eBџJ<x$.)s|ilnިo0y_H s)MFǷY7'gozOϷ:o%u,K`7:Lo-v~( [n}ȫx44C{)ǣI&G3 b/ߚţx;! Z&_A%;$*>M>75\wix4ġ34WxjM>xp$9ݗOOR.P<>~ɇa|0SUx|y|Ӯz&߅$MC4bwX(jUx|Ȩ'5x?RNwU'U'F&N`У4tEq:[໡}J] C3'B6&y9~]s{hmENL4D8aQMfMy,F6u.&'}0)FcM>QZ]qAa\Fsqtp9wFSS7i?lFS諾r x~߇ OSO!64ary4Tl{\SHN-^~7 A4æ_lNO :?w]ѿoQGS:XSI+Ht+Ө N:9NSX %bp :Z ?lzc!kÜʝZ=Tr"h`6u83&!hٵq5XJ#F3cW`Wp4p;N&]ŧgUzꗍMAzi C"<2e IYۭa*'ia˯Sr)IFoR]Uݑ4:4㈧skH~NdaH}О}Ck}gIïWxpp\l)i`fg|0:-CI?nH}>):,oyg׉Dʚzu gyeK(}]"] ˽k(}q}hO\g/ӧBD_skyS4Я9x%묷hXRpooxE'*c:zvF_oaB8D[EO _ w]VCCC#Y/}%n#;<1jCm;;,mΤovٗkhR?M?tGpcm[ʃºޅ^3SG~1:{n,a~קNlo_g2C(R9_VN%~؆^ ܛB@(Q?{f_9nVi1w?ºJ!}!twF_5SSE|h^w+HN ͖;WBLzᝥxI MH0K^|a~z89n $q?ރ0LsuNۼߜfp_Z=/>Dӆێ#s֜@:[4뼗{:|ʫ3/~Zuk&:H0{\~l%ϝ<}CM1a{>}KPutlN w{љf_o+leǣ' w]w]>|py\>IW'Moڃo[ \v|ÁG۟]T|RPƛ R;*Fs1Eݾ4;>?ytU4.iG6vz[T}â3-4.$#}6f}:܀w44I: qGN*_o~GE<ZzǗC|+$QVi=rsp=< xmM>t}94bڛFA14S\h{a4|07#7>>tPN.+xFJJo^Ʌ.]a)4|&jlm-AE�ҫ4H>٧N~?{.O&2LOO~h'Zϟ:mr~2hvn/ZF I=[ږ944ef/au8M>I-ɠ׵+0/Ȫ7A8ei1۱K^Y7]vm4݉_M=ӡ˼#_o6٬^*> =Ȳ 3ğfڥ7h!60nv\[ YE׹ĤU#3lQ2ix-IsN8꯮/'ڨpk&=!L{y |!`vޯ4:wIXN6ݤ +7襙ϸ~KovwK(-/w枃{C|_ˢje LX=)fC0A-�/ɘe_43 dKo y&_[97~ _4 cY4^pZ;XEzYEz39hu:wM59sflY4C|4\onh$xS.C~:4ImԐ뺟KH!yi|{1=b]ŧzh%W~> DsWVih|VbPuF_s3+&_ְ~KK:4J><BgkA;|hR|~'ON=8Xn%4M4z/͐ݽb >)jFt濔(W6d%4{4{::r st˴Ghu=99z~G=%4ƧopCB. >sF}^; G{w#,Ŏptx4N}Ggg8:>DxGً\I'`]V񕎯6u2<Npt|өDZ:9Yw:h'7=:yK;b87g}IOarŽCBb7:~لJ/4ؤ Wt=rCkz4o? [ գ;t4ҭmo=|b6tP3GS}e=|8nנ?돏F4K][ ֣'H!R}̩vy_Mwq3tB* kt4.Bbo)w{[r^x1]%wuФ4.B'ݭ>ͽkw☩͵%@) r888:vs^w'4(֗{4:z]h8Oo.{g �Aê4}!gvlsU7Lv+F*> F;k Y-->}o}o&Z)haA5p}4^s IJ+43޷4Ҟӫ7tNOoL;ҭLV9 >}qf_ziti X.8M=T&WlEi_f:}iiĨщbnםOO3"C$ƞjH8:Nw2ʼ4<URv)^XA`zmۘ+hu>/g2Q4ܳӵ"mAsv{/rV]gIeg|ۏTس1 H+hAo}a8΁8/hu:wEntu u[؃i莣]u2Vs1r$=NTxzIePWbuW^sͱ]6 =XA|ۻ4>IVs4AN zViy4v҃D 'f$덢هktדDBhŤ0-=h?+a=U5;@0Y[ڵ?M`VS۱ ̿dw?_ϗahfp~=ViArT!jtl|XkG-0I.zVOϡهvE|pzJG?V *?c}g?*>mNǜUx} 3hcY=fn0cuх)&C%jW?ƮKdCx /EW^R=f_MG 8s̔vֵ"T"m:Fvi{J5qŲ OsE @Ιҿkvs;ێf= Vե0WhF\^K=Bc?/dJGFy^o2]mUm^{N^ܩ٩ܻ:j*b8:za7 䵓pt&ߠR%='hzُHa'8:vY3d5c8:|=A#s&vOvL~էώottO -yۋ6~v<z 3`'si @'X'Nw*zuwbWa~Zw;>Ip$1ٞY�-'&CGC}[[q?W]Ɔ\ZgD]E'P`@�l߾}4$eTF3c '8IZxL<{TTJGls&ߕƒ5N]||6}4Y6Wߞ`ޠSUUX&vAͽĪGi]}z Oo`i*D iub<~r~_ȷSrb?pZ'VB=J֠ a(.Bzf_챭W_c4zkп]du1}I[`*>MY >~)Wcz_z/zÃ~ iE{M3O;ZiWi vxM1:ˊhϨ1}8䊃[*ѧ2A+TqʾZNO nt]#ROUw'=Qѧ:hÝ~.&Wiu)?,N"@ 93i)z K`G}z4z[:Ӂ ygKeB=NOq> ߩg ƇNtJ6Atrzt;> حurzyޮTO3Ȃݴpt>=As%m~ǣW~%hjpL}*Fg{4߸WF;6=7t\Tc?Ls{Fcv=+.80۵[oOs(H{ww~m' > iOwj^y*OKc~]||}36zFCtY64zæ5f] Wf֤s=)wIϯ_Ag۞祣|'7'G_:fbz_Nj|Q4Un"B'^Ѩ__\E>fLmghOB/qޢ9ڱ�h5kUOi]|4"gL~=_MaNu".{螘8NخږCs/F͗hcrh, ZP߶rheY!S >hFM4np)|m7Jo&_BtB8o^gt! %e-F:Î2yViazgpx+]w;[}_}uu@xK謊G$Z|bi]2EgmضAfMr%u7|T8{Nc׺FNv#;ɀn:pz*@o{Z:yGŪA#]C?/F&WKm>Hq*[A 2tu֞vVS.:|m񃎟>ajKt|N Mtey-F@gPe=O ;=j(%KۥN2ȣ'wT%|2{4Vai>ј2NNYGO ZCْlnJom ey ?Y ze'iI4K?d3wt=}�~ݾ(( ?tRYC55*}w\$ojv+M?tM=):5؞)MNoh( !6w3[|zeZQ~7ġ͵Z( y0=|ܨW4.6{z\xw[h=LXa4p= ~*՘k4z y֏FQΤ EyζRF8\3gz�o=.F}c?bi?:Q5A|0]m7^}ï?_-4h:I':>>t .<@kGW"q~*IX:t|~p͂'X>Uj>Us8 ?Ք;4`CfB#ģ?~*:> \3#YŧT-i=Ȥ5tE~ѧYS'ng@}!NKn3xRiANyGGb*~wOkW>\`%fͮ~}X.6qٵ#gp7KR /�_?I4 4:缶\4 :d=+g Q=l { Ixrme %hɦHsϨ#ClH]|}=7]4u=87$5*t.h߅~w&BvH{WiyAL O[I}r.H*Ϟ&/cˡ`Vg VI}q]hvzi\[X^.Rh q/ݢeη:z{)|FCoG-}Ec/9zӹ.{wG_^؋` 2){!~y,|ʍk 2}Î&9ݦs @atQF=4N_#wڸKoW+zޅ>N9,~p{h%Jᔣ_~y~u~ͽY-@ź|oM 趝|Q?nCrcͮ2׎�6~]_W"J".xj ´!+4 nZ++(PiJ.wķtM'-ЫߊA4zaZPM}rf_/!ؠ֙R ;œȐx'*<>s^t$֟wwdw=0ˎrt|`הx4s5HrVw:42}Ti,Li4GǏ;OwA;O\}~4Bx8(8ouz.;̡&/z^iu7wts k/{iAO~ȋ>~@FIn釳!2d>m)vM&ܰJ>~bwfy 9Zw=SSŞ[?~ɒ'E~?M^<{zaFhiI Rv!%}4.F&~H>~=Z1u^ׯW|8tAGgXfYt_c&28C1ȸʼn4Q%>ᇞi}=qmMrquϒhi]<nn)4n痃Zd3![mJBh*>C􎽷P_z(>ݽs4CM[_ o"7})</eEsOvah!!B샆h=SLsrnM*P.}d4^ RyyugF`}- @Kw&J.7J˺<̆v^M>\ Sx0˭r;FyFRagz_ Zzju~j�\_᧮]C44T]W%v:Ma2T=Ȗm^釔6&;|ZzTiSo_"P/<Ɵ?#rl:ַ;p~l2ds4Lml)g;#4 9C#7h~a0c\&M..~Aٓ>=~u6Ac9՞|n4aw 7h9BݴBBr7Kt^/ zQg$tk:}ڸZ{I7yC7iaBYݤ AϿIO뢦J~%iuM=P@'ixq˶67i d9$c7^r@KxNhf:GO o ;8ޖ=q(~~(R- 0?9=u|(WW4zOD)~a.z]|[nByz_*^ WWj_KhߗB_K @e)&O;N^,FruXO/u|4iP/]+6rhy m<v0Z]ŧ4R Hny|Yqt?׻G&_٪<?FyhU1 $v[ 45!a}/_*tX_O5ϐKsPP 5;\pдw. .&D̘{NQ#^9 !^W.>tnog"f_s;[MxBPb!b'"V+͐@篎z>+IDNR^i6EXMG8q=uQڭut}Y@ +Cia?Ww.A<V7zKa9z:ys +Gi#e78cݗOS[ANh!wpww1wӻX]+ 9@T\Wh7;}|ehc]-Ocw;Hy\1OKOcK頃ܻH[ meh<,H 7ݷOC*OM^4p|IvqL>nM]~]ÿԱ^vNQv{0bi. w Q|jk#e)"чꀥO\uN4$iAˁNQ}/jeQ@C޶U}qW"y{=%b !ҬPʿc&Jï{pt{;.1}]N5/>$o4z^4v'=Fɛ]1gׄ_~4UĒd|=3}2b4$<2t 2*ih R%k|1|]T@4gɧԙ:C&lq7GʰYi#u~YwS\EwnFF9Rv:>MfƹTOy|K q~PMw8fk+Nï_.3i+NGw!.XF8c}~3 p~/}g KXJ3D!ُy{e/A8D0w_*vy4 yS(Z^ه,ih:Nf'$;K~CKpbz<r~a.h%hc(|*,{vcq$iA>_iR( 0֧1à,4acYѭ:eߑ4ヂ" &ۄ�I~�]z-4FsWdMM]I46YwDy4Av$ *auHX}w98,o^  {Ec/n ?)]w<Ec/Mħ{ÿ4VS*N:x)ޘnY2mNKk,[ )zA4,vqR4F<uKƷ){]Qn0yϵ;ݖ_WUQ{sðCs/?oayiuSUߩ7܃{LWLx[v=47 dTzhG{ѝSyn˒QK ݹCMf/ |ue:K%C<֧Wpq|E^qW"7n[V+q֍ۦןk f`_rW(~/_4SğڣE6X1^}#q\8?8&[E`|٢iocTRV?g;k~_q"D-x.<4Bee<T5x\r)_aϪS鼭C2^eh80[I̔)pmgMf(#]~Z_hUV>H>|&Kw8]vdh& 6ݳOx>Tib|w h-:UhVڻRZK}iS%:U&*zgUwciم-۹}Pj.vyW*4B?E{ϟ04^695ԘK"}Cf[50ܵY^i=i߁KhW{zaS|tߝi*M6]1\p˩U|3*?Hw1qbM4Ξ Z G̶w4^4ܻ &^Cg'果KgkU{oê.k;tãFO~ObPIo:vK ڙ#'}hIᖥ,qrEvzhuHՔl'18q3i>Ϳn8)0?i)"KYj414O{hNf yg"}i2 @?iuI3wUv?vFa-QFf]̈#ig> >-N0ݐM> nN=9ܱ@X}j2`idAsܠ"Rd e=!iT&AI17v;ˢzF9r=gJA{<7|0U ѠEC^iM>wkh9OY;Agwihv>xɃ?͋.w-Oo;4\? T?֤ם.D/P Z7i9憏߽$/i|6rHo^ɶ9qriM~ȸrà=Й,G5ix/_<o $tqa`9ٗ49%-~ңhdȡC'sE/*I@rlahnZ~*Z4"rвO D&-{fJifzc+֢i 7-Xh5Fsnzq/f_ѧYRjբɗayMSw(6C/%zq١ɗmDvh0}vC/)H<<nKԣQkSNieMG.׾w˴CL/auaFԦ(< lӷMei[Ϯ\O`:o"N4p_:qKB;y g.?~qWy0XzFܫitz.=}||Y#|.dުǧW pM42ve]|OS<x v[zc*cΣvi/KD}l6볂}1\$U:~cg|,<c%t/[1X4+.> XMG/ᮥhJb9k\b?_r]p7]kzxVofm|)M:.op:Ͷ4u ]XBs#Y =X)  ]wjMh]X$S]pv-$&4.:aC;.z]q! 1S=49P=t=4=lAL٣t)3aLzOF\سP(g_i=qZNS] Gp5ו읮w,wn4-߳^le4Wam=~&W^gx_#gn}}ٿSm0.m. +`i!($vɔFFVV@lFON%O?u.>;&|>L+>|C^7Ex'm,Ct, Rh! �/Ԛ}<pl!M^>}ztȇ`/ ه;͕ oٹYie% v{Wu: ?Le"qNStX$S(98[9 ?h ]shb@i)p-mRiyw1b;}`]O3q2n~f[V m֝OͷUQ3ԝKm4c=>T>4XZ ~)zu\-4<]1ANR]Gҿ-hu[1ZCӍg~jZ)yBH4 t WNiJ?'Oli{S(jxچYfbh[.l|%M>Hl9]oIlCP-i9BK44p2EuA|CofIcDk90O%>GM,5Z'i9&gYVG?dUZΤwt*E2zv\ǶZ_<Y^Ջ]f_4r80٬_4>gYCO,|i}/DEy4/>>NO+}p"$Ęw'%hE"8_ZsO^ .ӶާZֽ3,h5ҏL]~y^g^mY^Wu {V\xP<C^ 1xuvٛ6M>=Md.SYK#}MSj?49:ex~:z>}gh0!>HkZ_uׇ[W>Ww.Xiޗ4p5[˅KܦVv8g{yøĐ? 9_}HK뭟-_}g=_En9r$~7m%O=A.rr�#^o pRIY%G*i`9Ur:ug׸fAh^_,uV|C-t˗!|^WߣwM"~tN_mWiiD8(֧wE+ÈGvp?3tw, Oo_\bx]h!~wÅ_6ͅ RT jݱٝ|'ׅ&_ wQ:q|-'0RMBcfh?=wO;{:vMdA- ,R Dny{oߣ_{ ?v֧Є~JS,ceo}ڥ4^(!eJ]ilyOFE.\i rߞk>>%pPuǨq~} E2KCk+M>;.K h0bp&]hd/$n4`G_Rк}ER,n4> 1 GOS YhٴC׏E=4gn͝&<;.p~/lU8M> "Hv| СA=_=;>KG%gmNZ!Wn*i駝C1̒4<>ihb=;Zw|E!vi$96Ý&a\}R^A˼ggHoW ?pԓW\Dz3ڗbq<h}Ʀ+~/E4,gRARPˁZ|VBpQwcw&~KVa4>:0:}4sҖj}.K#wۻm/iu> ZO{]$It"?�iV5IGIt40_:&gM.-ed,k[N[1ؿޙWI|qw.6mZs4v]=Zʘ<i"E/&g~8x i23n}} d9O,/}M͎N+>(xe7R4;Ccpf_K4q)$<n.Ƚh%\B'wu,.~ ʠ%y{; mU4?%o84p<p*9,Dqh%lBKnie;X_3n\84VMPI[šч钋iCS5 a*Z8sYU^qh p/莣'VwluQ=C_7l5|}5[¤5θ4 dmE�Yĥ{Î0.>ֹ qi5V'goYvťهQq51XA-pˁp<I@]ӈ1X1Gw0&;J9z7Yeä*9zyF -dk)a VCs)yn<V_?(X߉ V5~]ˢq+Y ]/9&UѭgP2\$cɟy @GšKw,h]󴂩H}|02A?Oѵ׫0:۹x49|sQq! pwBsb`{8kHRb[O ՝:L{N:BhiPrw<i)Ɇc4nw[[X[|kgt\>Di~7C`Nͯ%!4; ]p֧ 4Enl4fڭ._uHHE{]NgmGi| 9͜K pk$6+J.b&t&Aw)43i]MBi!yB뒸uAiʑ(Yh.:`h ѦXij˜}yF TŽ)|w=a4$er_7Ij}|[dR ᶿRZ_W9ٖn悆i׾s>>M\J4[W>c6:F6]䎎1Imi`dC"M̬,e4Чii ru~ZR<:#G9v`Z/3CM%0)HV𳧣C9Rԇ3ɹ⽏xYnm&7>trZUAϺY6ƻ!F_^<`yw)gYD5۷yF6^@SBO;Ye&FrEshT8o;|.Sf`ZA!�|gAu@i]v% >1[H|_qI$>jϹ'r&>OY^~|[ZuFs6 -v|hiPp^4&_\=_-O/SX:Z4BlTT~ WO|/A#ZG5vҢh%P8byvg]Es˔i%!"[[)S=b ꯿~{QM^[];VNci kZEc)}7E-{GO7<yϏIr}|0AGspÒ9 Es/%1H WB2, 4:m Ha5NCڬ9/h5N&_/yHې<4Mneń/w<4|2MvѬ>/㈿w~d<4O:q}뇟F_== bdC⺍_C}K^_Oïf1صaܖ$Ķ+tc",\-Ot,wvoRɐ&_^m;}c>LaJ_]mn+H5ucn<G{1L6܏I=|NqaA/邧}]n*I)4 !ԸGfJ,~-GYn[YtV7mUDI*9DZ/E%wvPmW ~xց̲JRʁ+ QizKi>}{pWЧ&uqcLG"~)&;+1|(ەi؎>4.Td t4ǯmco0-]3)4Fk4*a._G\lnGRh!l*d4zϾvh_rtLu|Pۧ9Hjʫ[?p~a'XxTaXNWJ }wz(ߋ]DqKW{LUe;KT~抻/Y=InSi 4OaKTyI0+|I*M?ChwqbCF%PchIo0O=|ofٺ4~mͯѥ.&5oW>K4|R5]ɧoUFO:bS/3FvWmg"?6};DgkEC>BcPz\܆-?S_B&,it|p0mt`Τi6=22f G]d9N 鲭 ?^٫iw'"֧׈Cuw%4lK.1 isMo:?<U|5'vY4 CM33hYiG4XRwj:xcg=kAg}~67|4p< Zt/y4nO??hĠy0 h~W.8_WyZ1vuy42 uw=נ_ ?4^a)t+Ȥ9}|ZTI-4E^pZ-Os/>pm$Bd2i6pbH ƼY]I>{S89\m.`& \ &^ۺ+iE^{g샴#؏B}wr$$ Uu'`#]u7xҝ{[>v cn0]֧p)F=(DzuGᇚ7KeY4c:qz]hY4kÈ)L-fї2v7ZX\=<kWKjOee}fC['LC�Pw- M֧wᴧ7D8܅ju{!ozMz@4arԡ׏á~"n={X<ͽ[=Tg{_|`>t.^]|ap;K]G]|o:+%Bɷ<g,Rq/Ҧ^r}Nʎ^I"ݵXeGV A/wt}Oz.fMn-Lv&Dkgy6-Vl(|ꀦ )V.?w);Қb|4Cvԣ8cMGw{SZ 09)jqԣExAԣ(jJ=ҮM wJh]1i)%)w1?3\tu;KhuU7up,UG@R%SH+=ʴ.sͷ׻oRTB㯷9l#ڵB=\iuM;E|@ AhaklaOמ%4\CW~uh}W0Z_i=N^e.Ji.gxPսF߫yy+.O8wă4֧ɇKoĔM$+g[KiǡoTJw7]SJOTxO+9&gVPFO̥߿'UhI$)F#dz{o4$u:lx&e4S#/ >niiwvgLDej}}VNn ޛpZf>;2=*B]έFjv-,h5ҧd&4k2|je~Eq,>%yr}HV@ =.T4~Gvчs<>lVZxdF_NQTsEF˞O;|oTn4r=>r?g <?jy}d;^1oau(B wg Ѹ8:;ogANwsɤ40;>y@G Gn=AM)5B"a.;_?o};MOc< I> ~.uS]4\}:k-S&r }n~b@V;5q%>D-X| ŕ4<|Jwϥo'橤"bDu|^܃EJJ{p2zEOǽZӆ;N>^'ncG[W [c0 ;>Ni!d%v>&_ xoS| ۡ*|0a'~%$.Ӻu[42q6Vi{ | {E3VK3Ezߗm[4/VCӞU4Rc2Hܟ|O/-hq!|<tRٗK{r\Cް ~ᢣK~ Xm^?~#6Q;t{!=Vd/RN H|&0W7G-vMrP6_^< wɳi';vMz ̞Ĭ[f{ټVv.M~w,z}~,LeOVv. |''AUuۻcsp0u+ֵ,\ʎ^-q:ڳ Xa?;չ{ nG0s*;zF յ?Nja~N|^?rFQ~<wxHC6SF/Uch JVIvM {sme>M{Gnxy4o9Z9D-Uv +5:>v>#H1KKYGe˅nj軽Mӭ8޾Vށ>;ۘ$ Cv37;Bycn`3}ex5K²l] >Y-u"4ޝd:tсC<|4Wo;^e!4ڴkǯ~t հ|&IW}/TCR~OVNPkGi= g>r罕Î{H@U=M.Oï ;Dyi۝Gih^-}^-OɥۡIܽۢOi fڃG/#(>mCaҝ>s-|}bg: ~k1�ԴaT]!PY/94/ jc4F!yσUx7܍Uч1gpmf"59?[f;y)FWvblzL u?i`%ZHٕF{λs$`h!w:mV^XI|~]Q4=rΡR~wֵ4B!_69>!,`۞iA74ysx.gLyq}a")sڱ>h>YS.gr'Qy8 ?NOחꎟ+{iCwiM> %haj8V bcrZFg,܉ΠM.//&7?vSuL<n38h^򦔔~, q^-O*?&[v |noR`j,>O>۝$=w'gOUIsasVI|^on0G${<>ܫ(y$ > 6*<'hv&}�p 1i>NWdc | Ĩҫk SYEI{arPr!sԷ^ VIG? bE/EL 9zvw_W[]Tv0UY]oWo wxGh[mP3Rww#Esj~FV'q' 4g]\E3+O4-KI^f_cp2KKX#YaaB=42dNJmޔE=4HgvՉ1ZW4=]/O7$:nU:C9O,{h¶u\Gj@jyzzg2#WGj.W *ShB{iU?$׹0'~_{P*L?Hmm{iZt6E Lo~|+q~V+|Cmq7z}<0_^V t^q޿[4+ -{,O'|172yB" V_?cjĨ L>?166uϯ *^w,>}W2 1ruz tGs?Buatުݾއyô_,wlBthu?MS_\=yһj41RMPYlyRwC MG˰ ׺쩝y]wS+AĻ3)+4uds(X4ūi|/]jy|^yU&,f}פ9|Omz"A|lO&u_WfJ{agaӢۮ U}߫>nf~JD(O,W|HTfYKk#`{dcim4IݫK4a_v(=Oڅ"Wi~ef*=O|i=Zz(wsҹ&FO'[uեwHghI6l;$um4p:iX Qqk4Ol"] NG>?Mo쓥]FOd5t6iFӯ[3͵/-5}pMC5ѝ.S}w448uNBp渾X[Fu|0ԗ︥\a.{lj.ȶw{wkvX?+Av.t:ϺԳ"Nc׸1 Sfc)]13H<%wI>> ϿR孿W4 p p$ReNv9~;[ ~3]7t èim2!/gX8o39j ~.HY=2M?Loa os>}Ϫ ~Q"㏿#ȿdUv%M}^ul(}v)i3q4{z3.[S!+2-V7i+2̶i&k&_:q(<_XM"6`z{ԓ4 c-u^4p=hEjxЎbQĘp(d[4^\C,Mhvm/ݢPr柎s:ͽTMQ]w;,k 9 s]p$$LGߢ'!6OtǷVͿCï;MdoZ< Z]n?j}~PO~)ޥfI;4>%whߗC0TGƷZ_5lmxЦ.9ߡa}I_W??G`^p#^-Oӯ`gӼKU`Ppq^|f_/CBGc>?Fϲ~-zuWwwφj5QX)G.w9cArRE i*9zyH7xB4OZ%|x׏qqpQ 9znَCջ/~ox1[ .F2={M錟e_/>hƬD} ޣw?Io~7. \uG"nƆ!0x%GM&7n<; AXON;'4.vВU&|L*.7]]+Ç|x_yF_c|U~ֆދz&2MݮB}i7E8{Hapۻ'401*( MԻa{sY Oi.^Rmɭ4^sS iǩjWr* >0ׄo'lE>U}i)>yrޤ}婪'�S|2nIJ`zJOL*Yz<TD<7~Z1* >O#mޙw >waa~чr:jҚ~tkzFOq3vv;, S 2s<;kN|V! >i8{sZfh֝<_=sMxFSQtf.mütf᤻OO+CCC j^ѧݟ" y3s}XID}T<ч:N�s|[ (s}hl`CGøzF_WY5ݭOTf &nx>viw KYuſNq4V+A|Lnu)z~g' K. !huM3Y7ݦn?hɱ˻i9CpJe]}A!Ê!-NC&_S9Ui9aZ.[4< NaҰ%>OF sreI13 yIմN6eUK|qɥNFV>TsUK|!6zq>O|4 }_|۫fg|;]R?&"&2髭GK||_L=@U^עI]E+|yich^CxsȺa9ox9WCSMKj~>F]iA"6yҖh@ݡ7^`yZ4>ֻG>D0l|942}̡a'Y1.'u4Wdf ]C!P]#F_=. j}}]NJDnu|>ZZze}L> :ZJ4CzV]<84 &y7kf+.K\}KZѕ6{P. [bssW t5~y~[^/7~m}~tXX ʘv^5CeuVcI&GǵZl);昻ׇK^}ɢUX!ETt0ѼSjys +?Hxڹ@X=rc8]OSˣwOL^Qg �۽c0%Dv>= .~/|Q{ty7Gj}~n(E-3h]{!Nx맟ߵ2hw#rk#fǿ*fzjT<俢+F}WMVa*r߭5;oUB ,ii/@&0}q?6yg>>\d A-?Ne7}wM>,6Cefw<-By;~1Gzf_5'0c:ou+; {N][)(>D}ڗEiI51Tԏl4tI1E!7CI7w1Ҧ8Z9)O$>Hi;0aDt ~ *q_N\_c;(JO_ ɇ{i9׏]']W2 ZdM>ř u=ۯOO_ ''FO<ݴtu\Fw) AL<m1|O<PQ9߀rKexQrQlX>zOC\_8.*Q4)֩MFtS b`q}E> 88ofH})Af&de?]4L4`# |gv&_tSZ-OL3O]G@l0jçsW8=3(I:{4>{p:!NpY={Acջޕ&c\Zƞ^Iy 4]M=t1<S:爳둠6<5G)S#h!eonN+A{RcߥGfˆt*:ܾ{`Ӹz__B ٪%i3u<fj<8\@_| U_{wE}?.׿޾>oM) B>~4Twn 尮%  >*wf )Ocp] I/r*<_+ Y-_4@ɑ}叮gKf ̾z/EC} uiR+<)} 40ZPX)}h1n1юvKȷeEGD۟go?O~ClkhWL)3l*|}{MH? i%a:WQ%2[ AH@$=4p6iCAYpmc4zw-H"?qC ٥Ku֖_;78HgkFAk._<hCx�Oï߫ akmR_a/gp|wn*:c<Es*:z}X$8Gct{׺^e%IѤ_ιGYIGb&2_}? Zա?/++z'w?~ˇL>vFY=G/2NUbiȜap9z}MMalnя4ȝA>|y;>{M܇YZSY0wGsއG{ :h]_-M= pLظf[ܻ0,] u3Ri>t\vpTh>ɸ1Uu M~&D7IF߻:ݱuم~v1*4~[.:tr~8$]z;4Q`Ǐ+]zkl~~0V<<b=٧B5ee)ܸwTBarn{~𨵥[ M?$&_+h*MW:CGiRU~]ѷh)34ϸ},Tys7JO`0{ggp>Md踡y kZTi N)sٴZhT0^>JOa޵Yw'cV'iぇG]O偗؅#.vmS8N)'o^NOM&;7zij4zW,5}]$<~:٣״0ǧKBKM>]Grp'j>M>Ⴡ#~w&Y;14<ڽȂ]~vavQgMឭ߷ˑO]FfK>чӴAOq퀏:><2X]Q"]-O̧پSz.gS-_]k-:>eM^G4 tUV_ܿ;?toُ4GKY }~w*�ߔXkO0ZqѠA>Au,V3vwI4N-翣UРwYA-K x.@5hA'CՁ%4M4e 4~չJa$zԶ4~oT^V XM{!q{x+nzkfӤSLNsѤxƑίP_xjh<e&n%0S# 隳ێXS܋{5gvEs/j4k;h噗]X6'w3h!e0,;+^׮W=habo.|+zhesL'-w+|xrJ'Ͷw];]W4:Exf_hT"7G>"CdU?P:;4 [DۭO`74+ZO<\/IA}t;4{=_Y{vh 1XֻR7};4>I3 2l>;477uKۡWXt1fK#dp.6X9G_iit\q+o~X9GLʳ;n8}mUkח[R m9z$Q>#z;ni }D^'Xź5Vi+;)z^T[hÆgckd#VFK`,׵ǣqyǹe۲C "M4n?_HA|�muf^sA@lGSj!G=i]ߍS#7x% {4טO%%[ޣwygXہɊBFjyz7k8銋X0 <0Og-]?>խ|ՄF2A ;% Jz/3i{|o>?Md-yљ~w%% gZ7K~z6.$5 l9Mh}J/vBnʞ8_Wṗ>jS|±>sAi o Į.ҴƔpğ#qL#ϲVz⽳agЃ-æ4aTS[D6s> >A(ƷhܠNb>ѧƤF?"3}H{~V~R >.x(6unhɭ3٧FI{'vf4l˴cOyf&t({Ү\ߝ0>pԁ#VF`Nz݋|o; ?K]u9 F̴du0Rs(7O[..=ۣlUu: ?\ nF8 \ia -p~=mه1 |̢ΨӜfw+8ota'm0j8sifA׆tzTo.o_onQ= {ެ'oIcAce:Je4\1nwSg7kAs:Mr14&RgwU=7YC7wͧa`YAs),֭4⼱H\wYO{} +w,iA;Lx?9_t^~toglIcAd?{8iXQ?i8PlVs4"d:bvssՒ_$_GC굒F_4^I.ƐL;I[4_–sEvM7,t[E/Lsp W闓E(WPoWv G1zf_шq^mo,QܧIZ!{Y; D .FIcPgE/qi?XA6*:؊h𡮌%mO3[&_] .u%`ZVy`Z_U_A"1ܰ -UWtj~5d=&_!e(;w^ + #-pP}@ˠA@`�kW0Gb>\oWK ~]l䬂#3s:° 2bS[}ɛYF/:g}n'oɡnB+ 3(=Oa$Ϊ7zyxƗ;Uo127cwVgfK>qp8Jɗ QhanN7Z+aj}}>RDPGï{ b=q?ثi~'ϐ2 L \ڭG*;ͻ[nv!?߇ :4.ɳ1]WGg?~w61~R" MPΙ lI3$S]Ŗߓ>,kIB^j޼.4ÉjiɊB;,{B!nwVŅFKz~q\Y?~7}{5ڳ0 "R-Ӂ뇮<OJ#)4y񦋞[W<?Yq'gM#.~ζQ~ҍwh\i N醛r#Vg{pr'9pr_q\?ݗOk;-4|үꞳ;m"MYJ7|跇R~?`FOOQP D[:&EoFO!8쮸h)Nf{cFO=$Y뚻yӈP,E~ufc ~s^Mi3^y *w}vIL(4ٲtgHF1mRۖiCpw}{̡)O.nȝf}dXmC#/~}6bw}1v% jt;>qx>Pn?~]PO_]멥S; qƄ#R>A僆_w\K&4kl K WC$\E-=huGc~&nNisB~-Oj^0b;~%>*x> }PFu 8HǧwNqd bJv4Z6]|j4_pH<8ES苗~�`VoF_`fyq~|ۣ r+vOP*œ_AkH[jI|F\}?iEo8prw8Ӻ3}||?0^<iTg,6yKӖGE/!#Lnw=?uϪ/{ȼB�;k./|z[/z0 ۮbܮ/}uJ'їHܚ<Z~eZh%Nke,-cE^/RJE/7;~bj䞕>oӤof_&[<ǡWFϴ_a;Ϭ84JzEO}Hi847E&4oj}}]V!(Stn}}Օ5v{&Wk5BJz0XQGMCn~9Y>+6t-qwg悇lD?1ur{S,9ݯϊ: a-( Vѫ,&Ƕ<`%鞣ta,\6m_g VC83"u%|9~K"c8m=Κxòk/L97_+W<|ː;pϪi]Xw};s<|w\{t3ּ"ߣ`(zD&jy|.tX ֚> �RܞƣwkZ[e܃Du-n9i\yB.S1{Bsa}.xD6M)Av,;덿4lB�IOMu!0YZ4{糧[„C7^2Ch(L86 ;r1HePz bCi}&7c4%FІ#Wj 4DH<b k)<tݧ1GifCG# 'Ma@w8p5OJ3OC4ޏU., KP|zh y'm{`40_θ#&_׿[&Aţ KW0~ })/fw|1}xI[K}} mH;&_x]hG<0}o<U öq4a4ɧ8�rяp}FώL~]rl[Mgp `o`iMZIp|&]]B�iӎOL4x$5f2Ks8�IJiicr;~z}p}8�e\8>YE+noB{i7̒_MnvLZOK(-n$fiA'ӌĕg{4>c u:4[=K*YAwɰge[&Ds~r)hw<T}pqz>]CΠه_egAϻNys}a}L "eoztR̀/G7d0K>ǫw?iJ<un}R#ipc֪{xOv#=I,L\C $ONj}jr۟4&H~aUG_nr|Kˎ({0&jxo({Fb_$$heo� VEEs` g u:}6^]j6o2i>ͽt?}n5%o˰M<ԔNlҴ$/ 0G*f>+Od#"hDyh~x+}Cs?9c[^֧WPGN(zGBj}|<4@뫃<4˹7R9P >>M>a #EtGyhUژH1o&j}~8Ȟ:.<QUT?P$~7+jVmI7)sIRŧ7fOR:T]R_v+?<ִK$Xq}2a�˧'Cl8Iy}#HۏSOwzw{vwyi㿻a]*ly|D8(.Wwׅ4dQ׏մ�P屝jGΓ|GCS=lڃ5+X jy|CMGQ,Eh) Gʢ/IXr(WC5c+ASuRh=NA|Z{pĖB'K I қ&fV_{S} 1ݱzFJK)4>ㆬlSh=~G@B!]'K媭[G M1ck-jy|>.?n1iɉ]"rYF*=10КT{b,wwMaZ=JsO$MqdhFؓ9KQti :RiU[NS'S.pz#F]@aH =h6ӗK61Nj'hi4Tz;wzm?1Rz_Rg�_Ih"\FcZ?ozNf]W\uzhix̂RŮa m >-w+8o={4 Zߒ+;}?&C:: ygfVT3Nw+)s{91)тO؜uKh4~攇/\=+j:= N NcϲA2_nWڑt{t{)lLdX@Exrhc4dͽ~Pu[&es߬Ou6EC; ɠІns`T`7A}b!(lK{ |0\z?fg͑5zn=gACo0J1�4I,Zz־M~tQ˅nSQn%iA4vt/\ͤvn݄Y{ȚI0)@I/7 7viաxpjb=f_wW;ru/˅+y9KSL| K)Mwcʢ׿~hxk}P4%#,}P&)O{S;4+/H-'5:#Y<?,+R>-SeW~�GZ0dC-m0qxtmF]4G5f_ T2:Y4ގ;NI=@w)i ~k,{N%:4:$hr>iMy^[[:4iPHpZ^jסW~Q*k֡qY[]:4#;ؽtӁngg9U^}jmV܆lS+I@7K ^74F<A"KB <[uzyrV^8W{htг/vpׇ(8VcZ;ˣuy_NܺjG/~AViwwLl3o/Fij7xWV]}V~sr׺|ui]H C"3ā_>˳[F_gjli~{@v%4i\n}VKh]ԠqrثW[}Ci>]YOAg)(Rb εZfiKh ^Bc^Jf_zxER}MI$LJ§ϋ쓧o=SJïIN )to'ЊJOp5蔼[f:]'JO 1>PFR}ҟtEK6S~ar] @qw4'OnjsSѱYv2SXZB1peAh)dWղ6xhA n3:,_p-GC}?izte~xv1~ Xℹjx2Ydgve%K3idRxG=~f6= =_:^GCbgr~;Z;~]{ߣסG B6>Nj}~\{CSgggݨ92Gïz&J4[2ԣ E&Y^vaZ=~F2GA孷ԦǛy}WN5rdO7i56@f}BVHuIJ4`utҗIr|pĕyi!TB,BZ(i9A'ewOv4|Ew™g_H;Dws[n {𕌡U㓍:vb4 hvڹ4To@wE}]$UtJ=j |0.:弟ju|OLF�`Fdr[+TہptI/p2ҞѶZ_H4[qGGjj~xb[TdQ_U-z&,4Pm(�d$L#}y4@c&M>8UKî_M,H/[^iDlϸ^ڨYC!4w?tnͽ'@&-ĪP4719Dum~TEswxۅSa=(K:Ђr`q=UE<:4tYAf 9aK//{S+J}>M>j.( eWk*>'1x8W&?ޚ 룲=\E3�<Qփ輦|!N1 [|*i{iuv|X{׳u_aCDKew,~yWeB}}o?5Vߘj{nz5Cח8b݁_v']V7]sryALBo1V; s~q|kcgotNH&g|FLWgLvBKI| NsX;s%_ǖHE]_e0ti'[KQ?B#ΣC[ NI/4:Z\ʧޅ pүrk'SGhצ5| M%Seiȹ<#4P*t?@Yd4~u-op=c+RjS)^\ԧA&zGiý(M=tJtR P\An|VďۻȚOiIx{j1^DI@_{�hh 8vm,(=:p]>M= J uw63z0DK1z.L,=_nu, >pWնջo4Ь7II?3Wq^^V٭OOxҼ.r>H_?3d~Fg4^Mڻ[&_om@.#Ka%Rî_[9!y4KȎ4p3Y=<!]Klmz}}Me&9LLoz?|[ ^A4bۙ�y4SO |"M]y;߱MhOлlT{z/'[D?N[Cƙ8 غq}Vp"C:&tŶڏ{1|~>\F =&4VՏ͊kNG=m> /=vMTvoE'۬/han}HXh4ƻüw4MAc'h9 Ȇ@{�Og9KOJ1OR s1jU֖[ϴoVҷ=+ɮ^_?;dޗ: ~!Nn` g[rK~wr$AKד!I~aXfߙt\v~_G29'i{h8`UCZ}= ܆x^C®סK.)i呱\_4oSs'icWع,|w98&KieCɭwuɩhuV=we{h<H8 !V__K/uML[2 40;;z!ZF_}_o{@tR47zܑhhylψ^owY >هc&h߀uCsﵦJDzz r5?z_3֧W(w_9d)vRli7D=jyˆr*;"~A^~;CȴܿGtB(Cg 9.;ѫcLnbε{uS5!y8ܾ?"qS )K"m~1^n KȶɫY}Lط;ơ`7/tli{엝KK辰4=n}]dޅ tOքvvӿ4n::.W >N Mj&[;S^&}6 oŪyF I;!<; Mcőúw'H߼BXCwB {iɱs~vOׯQLe#[5\'bh?Is_uV_Ϸ.Jӯ _iIUkz,a B9bJ뤚"ppD> ա7>`z) ?&qC#֧釢4Σ/WyP0ؠR:5~o`>Lg P`*Oz5}hJc5۾k4]ğmg44JqQl9|F_,{uD兊j7|fhUMpma4I?Tv'ۮk4 #<Jp4Lo]1O@W:zYU3D8wc;tM>8^ 68*{XM>s}7UHﮞ&ś2n,[j=Pq>F >4֥GJxcó֧O=ZGz={^={q<e:zbei=Auq/kw4'?^,; F,|NOv$(|^= >6}{Ws{P)8F|Nc5N íiBxn;;)`ʮsQ)xO| {}S+Y4$-@xr__` C~BUiAt%(tLY>}&r~+q^xln]ֻ\oiaRq)1Czm JN𽖎;GI/tP;]sS>09 i<;ƗtZ]=M\r9oR|y%X-Os;݃#4Cu/ A,|{y {>mCeFq[40>Tzݿ\yP{_gSG'Zkͬ[4呡s=UY4-wp`ml+}90!~h􁭓nDte<ʿq'?s\iIy_8xF_g8Nwz; a?넧:~@cC4P/?YO, g;vȡWhy4 rh_-1(�v`<;(U{2mz; V[uȡZq; 8^"ag9_0[p+R]a<Ui^^svۺos$/4[;CσrC~I^yYr^ [cܦz:t7;Nxs41Dw|7=ri]t ex1%z/;Nm4sϮDEh];w>⧵f>;ۑ 7^۫/4Pƞf5UEh{2AХR\fFxM\Cܡ)N >Pr1Ltғ;^FYcly(/w~1X! %`>#Ģ4иwQ$c@ʭk/OO`7WٛζR4FRPFg_n>=35;z@Q߱LyqK~I7E:tR7s r4TTѧv '=m)Fbc#FwzPm.0m8hQ 4ΝṶ-b4`Wjg_Z?\=s]n~F.Nu_M?nѤ$$4 sCţm/-ey%'&O^hVVgPI:` 8ˎny4 *ww{9uk<}z>; ]_?;&`zXy4B[? R<~">|CbVoq}O>q}KscD=ip}':NAa`p,iwh0!_o۪i0/oP/E)FiAniRﰬfi!.õ/j4bSc989M>o ]Kwa֧NLrۮ4p7i(}?hy0>Up#[A7:H['~; V 9AΠw#�`qM>mJ͂tLvӧ|R+*q]wM h4h(bȥ>$M~aX6q@Tmyȕ4BZK޻iZ6V7[3VI}^W{⾝!$P!š&_v8;y'.L{}/JKѫ2ᬿ~"wO+-.E ^C! `[}|)|&ɤ G!ڷ;)|v0{OvƟˁ)|8ɝj1H-i\YgOuy_Mjuy*s6U|pa#{hahbNgb}VCR4 [Wj<̱Cp1,wjǷ^lzh}`zJ?/^ɇA?՜ߑNMa9n=4 F9t5vI'_[zh!hYe9жmS{"+#He9>ۧ͠ io>1jUv6W|~MVe:ü_;PvS+jh|cwCTb7jWv##oRG7{ow,QhEW(pǓߤ�LwVw'P@1TrOx%{=ǟo:MR uteQ^'S%i7MحOS7P.d asm [*4nSe8}iThf_gWa1}N=A6֡喟pc=>qqݚ`ہA8ZA&ueF%o+>16=yV'ҿvUi>ΩJG]8OhX1![,k=4ö/pgiJO'N wCTi)BO|WeV٧%&ja3U~YLv| M{%l:oDHJ,hЉւp;<FO_L:4} aOVO6޸6"6|}B\![up5}lj-hkVM&50ǂN;̗Gj4dň.⯧bϧFϤoZxl]e4|3b~/33ngFA(t\ k0X=GbFŸ<zIOA DWhYTmAmۢ3 'ruNFCv8z:(eh֚{=y#*_fӜ*Ag:f4+]i}orK}tu}s=kbu}/F뚙Wv4d'َEz7[&ö$N듣6ќNwF4է~vpLs?%i9&㇘G1]֢L==J$Ph tݠW&uv8C7wiy5x:_qhs ZcItbRdE{_}3b4. 4h1 N˻ՠRס%W4BVԑ4jҫ`h<~f_tX=Za4k: m3iA r#;iРz`z1ɳ'& C:^LB[F|IcCEu+Ic/RCvwQ^BhKL,fLRC܃5}i*|8J-jtC4pv;A_[jy|P;?:ͽ4v<Tm+i'VaԆ֢WwG'_ضM>O1G]9NڢWzM7^G>WvB1,G vhs'&Fu `V#ܷCPI q ı+H 7e١A(Rzu)j Ѓ87Xzǿ2vxp`辋/=j‚_6vW!{p QZ19jG$E{;룧k謨0cli4vva!c8zy!MaO{uP)3vׇP`w\vi]w<:B\O#Cv% �{iaFRqi]@N!放Kqn4.fWw hMhAfbxYV!҄&ߝIKHv0z<bDmfB,oNwp9gS ځOh n|%gBs6=h{hw }|pw9,-}PhBsO ̠v<AL Li &3k#.S|a 1z&_Þ=QQםX) >{(V+~4dlD3\p##W]c5vRPN~;ֺԦ4;4TGiVXeF?e?)>Pu |M>}:&T1{e+=(pٍ/T~ 67B؟<hiG2mXfmF#OQ߾JjF#ώTdyZbyi|2`cg`FDG-m{ =@+vf4s9и+_]:٣ h7up6Chd& 0Kˏ_GRWGC+֧gc?=k&J<Cg2~4Կԝ1[S{4*\SGٱ4^TvE>L8rL+, \&3,ZݱkOq:h#C<p;s@<-+Ni`aZ r$_M! Zs|l~3y帺9M>of(,ܿl59 }|0KtT޺ΜF!foi!5}S?.}3M|Dw;hA0֋,haFbzzW3-OFN'T#-Y }՘Y#ԡןf_@ ~IԂ__ҏ#53h􅾩aTi}DEؑ4bŬ UFr6N44,iTAox&4aŲZ&_|B(J8VݭO/ :̂/[ZX[Cx K|H/ P9ia*ox% >MsofwDƕ4 '[ mcl\4 팯#Nɗ>.pDr}| 98Z=E/MT䵢5^/u[4inӤ3Nv׻$Ivi!DDlz/z>Y h`Y^h웏~Zz$c V/;4~Dg\z! -5tߡWoFB>X<+whA}ȧJCy7?vr#&[Nۡb7V;~/Ntӫ=z}GLxk~7 mlh;Nn拎휦;wB)GǛwv-~Co#Vc7z2%f*]C=vzkt,[;8;<RWޥw }PۉԼK#wi5[2JçwuT='GfL.Mk1Qcbw=V<5'4tĒe dѷ_]= >tN|Ow@yBzY&a-x[w >V}05z+jsV4o]h}o fdR% ՔyJO :+?^4 >WuS}YU_Y}JOOZ+;ܖ<_5i4TLbGC <_aY?QKY-OOO&l93f=}}ٕ/ۺSG蠔{bRwyF3 s鈧Smg44sMXHs=هk,k+FXQUwWO0>B {Vkaho94&YE&]Plڊޣчĩ7?4tҗ|=};P|:K<jlPޣOY~yfUMN/.Wz4:{_$„qy!wgpż)d%ߣtEhޣ׬vP;۞CN>Iz(>i:pXߗFCu!\}z}y78>6Y|NC7Rsm[s9*/<a:XǙw)I'潬C?J ˎuйxAc; -(nU ~㽡@͵L ~8z; x4Uzw~ CN֪/h&[(j;\z'+}4hCsk40yrnQH7-Oxf_4QNێ} }SzI/7C}AYO\`K}dx i8h㞝K}&2K |r)fߧK/i_xhih?Djy}. cw4`21:h͎W40:vDRӓehA~/ ٗw4{~ECFy&Β@e0b=||M$.7eYc.|qfgusn?\]̑v)~Y$Ϋv3;Hf.{J+<Um?_0 nSk rw([_tڀ(>NsdorlrUqpv׿0}&^˶NsyI7iXY %}' ŷMm2~|[|r ~L'Ri^ xi g9zy~dz/wWzq%Ȯ/>ؐ m}o&?~5Hfߧ?)[bpFNU> sG~3Fk0vw!:T<`:;4&K".4C ^軡w}eR]h] Ga/jՅ_ﬣN+0Su'6~T"X';JEf> ΅fyӁ /*]h,a ;Ĥwu>1u?'ŖBï~YR+ ?g8BZҕfzוF@(tx=̲|}M׹0`ĕfBygy+ +M?uX^rz•_w (9o? ?^Y\i)<\i鳿# r7pmoc>FO۰+rN;v1Dq᧐ gKswFΤ;>T^gW&{!ee4LlG gǼtwgPHߙ%qgf5hgh~43]Fcswh턎_4u鏆M!io҃<NdJV$<pȀ ?y?aNӖ%h&3鿇j֐ͽwߑɑmv,wGsA%?{; KW`{:l[4TBini!˰笻iu*s~'p}�&5:mc;;牡_;ӈ~v4 <!CzYo'N/3y4Sw {}9 hW{ Rw}+6"(xwCg< >9^}>kG=c/[{scPliهMB㛥Zq>ʂC8 A/: wt4MX^h;_Sk#Aï챹hJ4xM4V=xϠϧSNSv,I/Д1ڛi;NI/~CsՋNt5L'?tυ)|鲵֓_ *.W}b]hN M_r7WP<;4O~)q?_O}k!k_6P<#bV '`F,1&k&A N-Ahe}|viehAu>%s ^4I^vƋ&_5drm�nEh,a(t=ſZ^5r8ag[%~<Ҙƈ#u]2,zeqZBEM=0T`L֖O^z kg㔰ZqhaK?K qhU]ơi lh2$kS~CZ ?zyh0svGMt D`)<G}o< Nb<K~C}`9 pS]xgaK;`9zy`<K6y4>]Ow~BdBE^r:k'ygJ3X?][e\}PÜ4*)vޥw%ݪ:!Bߥwu�uHAao[+Ƹ4u1Z0F ~Zĥw8:8tH;oo;R;|pXE s#4z۟0_,&!4n$_Bga|ꌥH^'fZ,2qa}BIdٷe+& i01͵3 יR$S>pP^.0e\C|M,s@(M>rk Shw\47j=4mJCOCkɉ>_A/xmBi\~lQ(uۙ>z9AIo׼=ך4PBK#dyYJ3O;fx&p'٘Y O|JSO49ZQVo4t4;Zh_ [_ ɇ3,h/C> YvKG0~&gʴFlTFwPͨfA)T~3x3?>T6zzUGڃ\ÈKo|2]lƣg06wOo?}W ٭?nli!F<lϾ wv^v=_O{﻾ o9&Q%gGL*&&)&Ž䚍x4Z_4^ܿscG _8;Υ#=)4TBKNϡ:R?aa؝DQlY9 ?t % ]> ]ӽ'8V/568>ׯeoe 3) TcO_jPgr>ǁfYAk^cOZ_tNC;z?hBCL֛O 3BE3t!1K,4ROgq4 2hϾ>Jw\A/p1Lt:4Zv p=Dի4+._ <&_V/{j7I#d[H{ 霥7E6C}d{SȎ˯I =mACj}|(Lگދ~wiuF=GI!..|:6 GjuA(wͽ٣ha[69"ފDp DsL/N"9FIܮo=Et^@9htdA~]CCR;}nnw;o(Lj4۞w`+ KӭCCrIGDaT}}R2N]A~~z;4h$7z Qq#m?II%/=4R$I6aҥ~l=cϷVIr`ng2}A*/9,C[=|r6qw{Y ֯A"K6~LuAgۗf_C;񩿽m'KBMc,дa.7KCax.1lyʘF3]?kěFJCC1սi}1OrHڹShuB=MRж0)4nKeS1n}|ۚ{ϑNj-YBO W'g>;Z{ot&֧7x/i2�^?>y{W\RhudۏK~e/ ˋwZ1*fěy$`nt4 [dKRi)mޫ]Jnp)8EڪSi|hp _j}~V{ށBÆT~ڹMﴶqT"#4#_H?O2r}'֧9J~.vcHFO;4}0sDFS騫Ah[ufPk|q/][4#MVC4}qLZ c _74`P{^[gpfj2awG瓞 }VO3H&hr֞LhTo8ьO,zM~9{ X}_Nt0Ժ|4J8;s|4$!1hW{_N?9ֽq Ij}}JN|h=ȼ ìg}{NSI !}7E4Bx뒏{x Nvet}?Nv'No4ZFcta+ѪU4:fiBsz3i{5uB7ǭi1U<`SVq:>Zܡ3NEo_2 }ɰ'dw`y4gTH' F,2hLk#5* .Sޠ͠@Pphlt~/FtWZN-f_Swk9|lݙAٿAD$;>gWD ګ&̙4"riXsʗd4PKZoCk;LIzbo_OK(C$GX/i:ջ Ǚn> ? Ix f_}_ү?QOKooU_Ss+=UIïCVhη;-~xbj.ZcbiY(~DҥsV/3f}pߋyeU4:{[{X?F};ֿ_]N5eFOx?>vY4 rC܅cwV1Fߏ$4{Z03FX;X7Y4k35yl;URf_guS /#R_ajckc ޻i6W~`[O Cz<oM5ޱxd< u.vWl?ˋ_/HW!ڕ{%n[uL4>َ!_C|Kqu[uajK]|pm0*ץw-6u_1[]|C޲.ͽk u.=J}]~θ֥wLfqm.`Kh|Kz3U[Bּ< [-[KKh y^I48շ/4:>CcyM;Zt ;)"|_cn}}b2ŃX'b{h Nz([y;Tn;ogCQU!4*HvN%4Ck遠he.чJ^(\@@ NOi<Y^Ƹ7{߲&Ϊ Ͳzvf}CIVɇD!Tޟ.Ji駉=w$T?J)M>mMt?i5]GL|﮵&v-Ek[qR}"ο>}^j_hvY/o':4} Кݎ9k=FAE/+g FY?CbXFϤ/~ɕI.hԻ?.1|RrxؑhZujtg=C %xܖ!p,jnn=&}6;gz4 8Oe\=u*v oct=|4D3"֒|wR=_ԣOw)d^D{6F$ၦb"ּZs_RGïÊY:v.yf:aSRv]M!i9<7is/-OAWZfoiR]iXj9럅̮F,'~i2v| ϶+{x9[P}0J&m-hAexFy#h29x)hb4`6ε6skiB]A/w'`R#NhKy{:<nͽCoA ^5S ؠEHUuI'^{ * |6Bſٳ,6$kW~ww ȅK{_[Wc$N:]PI/{s:\0446G?zΎٗn %(3= oRI/&Ѫ4ie/2o;$CB_`iq$;)No%l sd}쫢їiSRZOjRҰz54U4XըCB;54֘Ķh䅌q(FcM_ɓWY @ wc)ሥh1nU4 J@mv94 a]u体,shUr %MnG Ⱃu) %^b L9.!4rC{[V?z}}f' 1ͭ;Pv7;$Ggawv~i)ސAHvC`:z%A^?Va pIqi^ίh8η/~ /v48= B,er]~I.7%zKwߥR?cvϟUh'_{!{:ȕV&X}c}OGIKvJk9HC\҅w< ?N3סg#;_[aaK>R ֧wA!ѾVvߞ2tղvqF4 *}f1/|cHEbn 'cF'i!G'1^NcO|S&ۨChItĞ༒^>}.eZ]'$kM<h:2D o)==1ytcrS{М!*QvU{*1o4}vy޳^ZSMQzP^ .(=!p !ڳ4&44bꪢXJhA}hyl뙵lq >|c_~KfM>Cd hK8F驝0ywyVۮ3_c4Lc z]v|qfY0HQ*~~48FiwM?DvG9p~9$f;c8g9v ^X墭x}MwiP><~L Jݯ ·bVgj>Mg9n}huZ11 qم5Q=B�&x0bb[gh0Η[fۛ~bz9>?55V^F_ 9+Ѧ8NeЌ$I^F([&_Gt5B8vZ!4 gM#Q"gZ / =B4:蜒^7{4ׄC[+z1¾&}XL,m=nHm#};\?$CW4FtN�}ɇrM)Ѩ޽4:2nÄ#̨K[F_64(5>gɯ_!Ij*43 iz?4}$ ?|OSg[5*;(I~۫%7:֟?64R&gc ܙ48^b';0$ЮMN:NwÆ4WΤٗ;ץظ{4ژV4Pmz;/+f_}ea :ٱ=l)}Co>pN_+}Sn{f'G:y m9wfߧ4t4 $W ww_X4ն]E92tʢWi3˃b|-R0NB@/_g:A{S0D /;ϡ:)9`džV djgL׿V;zJKvue:z}J?'X&rw7m9eC;+yURׅs~A@ߙn7.;ǝYˎsM.Kd>; `1)֧pwL9u7t/ ?.5jv2I[)4.vtV^}>qL^~nO^e< ? )g.-wi} SKR=VxƟz}׻ڷBU{f@'yo0+[K^f=ϴ7Cϥy/OOpI'[O/&t;9+4�FK363N\`MpZ\'o& ~WhIH ڑK_2L맔DzJp֠bj+M^d9}UW}wl:䰻4Ttwkw4zC JOM*>~ɋ}7 J.JCkEwQ@>>Q15ߍhm"F̷J.F1�XjM>`C^w>>Y٧|;ɛ;#A;cj>3C;[f=9e#bO\+ ~gaJ|ha>Mth&<}h~_{f("}�+=~7d?{`b^d}M6Ik~mZzMg6 }>|SINܦJ/s@ߎ^7Tܮ:{4=0l?N6U{:(p߇N}[Al(h8 >Hm}A'lWz>>C1fEcesE/t^Y}N>9ջ"ow4崡6v:>w ea{i5*YF12vm}&Zޠчiяr'˸fd:[;$sҕ!zf_];sn$+o j ~0Twcn ^d덧cI{_vlqibiCt; b43;ۊSbRngn\z2D^-O/<oo&_yt#~u]%MN.8gwt>M>"N9 7i{cKE^+&M>iY|]qH|>1(D/oy1_4FHwƱ&E7Q,~; &_A+y8DuM .Eӯ~>$y;K[4|RJi_gto} nS b,?Ri,aZ{4xr ǒG*,:-EKodPrM[Cӯ*&C^AQݕ!oN :>G1vvSqI,%A"s>w t/9m[s6ɮַ lWɣ]h'NEAؙ^8уi+rW1o[>#$ ^>9_Ŗu7Nq ;WL%˦b4BﳫK3^@GtKC@A8+]Ogtij]OZ}:V4%j7ϟIwO;o)%_dPs;2KB`z.Dh] +C7_R^h~5ya_`9i 3Iv�ɩk%O^@+a8iQ7 o_h 4Ckh轤ӡ>I;N'j~HdiJfoxj<&Ko.Q}Pi5[B5t?}|%4ÞU`d-nQ~c߱ѧZ/鴾nmEi!Z+{Z>Jfsqi7 ;C֍fW?(=za/ZfyU'cn#J^19"ᾐ:oW*Fcn~'T3!Dۿ7|aFa<hrehKl h٫{e=M>^'{ ϑz>,! ;b{i|{ז)hsA/<vn.~iN;I8ȣayr\yvuGXd$OgѮh=tCp^H'n/f'kHL׏fu A??~o8aIs񤯽n6;𵂄<~O!p7>t+U.NϨY s=w}v>ޝOf_ԣ`*l0νZFSgLM&#跏txi9jv MъsR<^߼j}|8Z$zo>֧(4nVF70~^lli"y$hAg'/~IF |8~7;^_}f:dt7W"40!pdW47ULA-u$h5S'l@" 4"F}.%w.4Cj}}Oaգw{ȑ40;cĒ4zCO- [=ه!}Cޛ{%>ML-$;4#6X,#qIWIgC-#XZF_ 7qT-Fz'&CF:H˒}#%];+.݄rKfo]K[D)}PM5 Z&_L$Z~;HOp9#E o+CR4(-'.*}$_"Er;W*[FEG -Qt)K>NL?9byeG9P̕jUvÂ8;zM X-/L"?|׾g#ժ,71uԢ 2h_Z~)Qv3zvޓekh+c?ݭs 4_home90E~RI83軰[Tj}}ݡ8Q:>@4[TwUrSxzw=8!蠫X4h{ 1 AWf4ao^> d mqbyĩY,-uG8֧wKc<bUᇉA۳Uhut!Sn~b|"v F6}fThu8mjgTeGOskU>cw[`Nq+^-Uh۝J=M|8.7w(s5wxW�%٦BsO0Ǖ0~Q|;L򠫫m+ҮJ;KSحOOa;0oGwS){6?PJO}-ioYpP~}w?ϠJOaF\huw{Vnbc`JO!u<U;@2=JZwo3oC ' ?wc4c.ҭW[b5}߀{wf-_|>~W6^Lp2ǁz֫F9$f!#q.5~w}'s֧כ˽lY9mJݫo =n;:}4z{:k_y{yܝt>}O|j/CE.S&ad[W/ߣzo}+`o߾o]_գ=ߎ;>vDhNne#:{uhj NjTH եt:>?M6%u}8Jv ?lNeIiy߱A#5qt&UR獾aY_LXw.[|WO) hޚixuiyI4MUZkiy[o-pkC(?)u&* ~gn =4gh{=<}_ԻtM=<AtfM@FTk{AJVHU{k^t8gjHt̵ {yjhܙ׻(VڹnJfї~Ԑ4TI/;!wݿ SF_;@툷F_ZLF,k[#VM|br`wpn y&_Bhh-,`YVI1JqQZEΤɗyX4:uS{/VEZ4,nGYzz\^}8nIGh-p :+|{Wk+d+>Z4 2CsG1_X]hUoKCKaGoVE@|D#VyFJCߗ+yK[-}C^3K7>cg9/dTT;}ncG9utG/f(q.}cG9zy;# Ǝr':;z?J4Y^�i~lEJ_MraFۛ&ΜQ^s74T\1A55ɪh'~B/o;n;*E/t.wiaHyx443~ մruvi6 fnoSK;1饝x 44C `^إr4ɃRw:vi]5 [GףviM! ;+P4n62!ߝ٥tه9x'a }]C >A;IeK ;ǂCca48}Q|^هA.} <q3V 4$ϝ~3@Mhè@ñ.[Lh57h9]_) I Tp4RV$Y4p&'`eS-]?Ml|y^qׇ41YawN;_:vw4'a\~v Xݔ"be~nS}`&lNgȩm;4pvЯ>>lk>Cx~IՌ}3cF-\CCq1qwjf4P*|΄܌f 醖z4P~^Čf_oc _=sнY{wl_&YOɝ*nh*:r}~O [-OAlh1W}ˬLm'{~.�X!ée[ORF~t_˭îbhrp)9I;꺝GϏm8b_gP蚑UzNe\-ѿ&w8 >̩ u_z޷]v|M]c|wv{a?-Kxs{_M鄣ɻ69=ǐt<`znSǗNcKjkNsJg`=?bn {1dZ|ˇsF!XommAz;0mcAڡ`[~~tℬKRw24LAb#f_xYzBj,-"VᇉA6yz^O/=n' ^P@gLjinI/A'W?8%MQ1d % l -NIkkI/!=_vl _%% >Z ,#iebL=%>O3/;B^H|u{JLLϯ6!ՍƖczvpV4Jlj 1CG.R  >\SuV V^ܫgSCծ_44T:׋Wy8rhU"%2+} PQO5Cslm*@0_<v׿ a߿X{d˒XwF?NV~e +]*U{/�B;ue4~(s9vn G;]xܔxiKyz՝翿,Fc5uru<- ե0v-s?9~q?.߲YS-eAl^2Vľd}- spU!}C1]8wهSnXʷ MYfÓ%yO}}nW-oj~řk~*Ξ-oS)I|-טz> Os=qpͷ M%V26ט1O^J#Y{7dݪn~djJ֮"2L?$d-iӏLcmxV+j ;T mJ@%R~+:]n/P-wS;#d:h~WV N6Ω}U@s@F{WxcP4 /R '#>r+USvҐ,7Ny{eql6b~enאa{!o_fQE;/WsM|g*Wf'e#Wf /`x_~bGwRtjV3 o2lǶ3*E秀=2n_gFM߿6kcp'3;W-n28ܙp  >Z.v=CVѬ3}{?:ٳ_WպUV QٳO-écTwf^2|'rgNeLX[ND}Õ2x4J3[ s-;푻/yӸsiwv xL( ?Y}zҞ2 yQ6 l]kxx#/Ye1m/GQp=!/vbHc[R~A!&@8�Ts=duCOcgξ~an_o e_Hk"~IC_|2U]cS{g-!zV][%x:T|6N{zȋ/?lEzPq'5矫Q|}_OFxGiT<}k,Q )/lޟL>GsO'"2.sx?{�[N's/{P|8}j)ҌYgzN|fϡjL/ߨݖ27?�Sc ><5\8TO|I& 6чKSf_Rfx m ߎٗ/oh+^}Woҹ$_ݿ$|+:/U|2%Qu5!?zJ_k_lQ2[ {{ =r6aǓa^^69(2SdZnL=4rjHL]%c59^6U9tl?͒W&́T m$)IP9i/iQ4 u#5=*%s kt,@~BOѲ>GZC@J>5b2r\9Q CzYk6NdoCK J7S:c5dm["wht亟Jt+fΉRjac[&(7hGd\26vb Y;̾vݑK3.t "c ̀AdFѷ!lt-|rYba'v?/; /l vJٳdQ4jw47:/px=,ޑw1"++`}C=T<e#7^GFyxTNr#;M>l'Y7bߑw(:<,qd]j6-8F/ÏSkJ6EդPk\~xڑC57ZK+NuD %vQ+RjIpŸ2.΍H|qe!m*كĹd`ݛwkrwwt #>_7Q7o�w؆e}`Kxa2 yU#.';a2($Ha2̚e~a<9GeQI=lʆ3^6],#S>CY_7 kMbdk7xnU>ڮ=fŗlss`_ꖩ2]j>+eUG,oiDŽs]]oAu4w ?<J~h&JfxFL?42<oWs/>2rreY.ڍL>ŨwOD .G"!ȺFCFޭQiGA"dL[g]{8>gQ|}Af<T$kkҞi$|Lh5cM̶#d!C?+̳2.rll |Q7<|{b|I~BpkyjSlMMO&;Vl[?A3x2>[㉅/9b;LdQI~fS?|Ԛ 鸸K9 vœEZ'J3<|@Cˢdž|d=:45~p7>jk~z_/ nX !fZd_wٗǻR$=l m)/rXffx2xŔ25=)ӏT擷DX M,4%oKJwfIլ? 22ț3b^8[ߍهIf1B*ٻi2jǑ12p4Q)ï&մ;<~f\%83y \F)}T_CdPk7h (~5W^[8GeUOddTv FMP8y!wK{ɝ#d�V=(|EFOopQzЃTw\zՅ[Ju˦O]@2C~O]@7Gl遞?rxV%Pm}6;^ 79|D'UGBv~F]3T5,6ˁ>Y]įN!ZY@x-{`zoWdon9226`Ec<|CeꡎkT [6Q5+8qG{<oç õ2-soj t;eq^t~ti>7-e⬆ojJD;3W_f-G8_rL;2b]&־b$jƼ#Z7QնM=ߑ.ү#Sal?3P;~Guw\.}dOL6;2N:Fg< /J7HߑwR}>]E:}X\?WA9\`ػVeϞ+c'k7ב.2{8NKmF3e=Yߕw#FNyݗp]{u],Q?uNL=n.wq|{Fug]d>zm2leIQNO h 32~wMT؇>=}>XЅ׏, ?CMyS񂌿~utg2 Iu{ygG3z>o&(L4[7ܠ}&ϪR;o{^f=n//^-3~H*־#\iٰ(8λ]fN7x;]f[/Q7gvܡrs}5f( _-3a=ǎnu.1Ue9׭ތJ52PٴuQ S32b7xx=~2b?#c[2gsѓ,:Кj\f/͵VmC>6{ᭆ_F_D+o>ͲQx}AfD }�[I=!m_&9 t/d򽳺{F'ߓzsϵd#dNo<xeo|L?6Yz8RsR-hH9x2^nf۳djrq#O_hekx'/)t\@ng? lt1[OCᘗ2'7/csїwO^nK||+@޳ÿaɓ22:U3q)/f9{O}<^ %p F0[/ea$eC PLf~K#~ûǎLdq9j8}߳>.y' 27Zgx%ܴP�_dRĄ 2 U{S(tֹwJս!ZFE'ѡ#nr?4;MƧiևwQ)P6䉛8D--JG-EFӍ\xz8^3^RЅt.iSǩϡPkf?.^Q8L{>}Ưcp+N/nx1 c\26/^/9ǐsrlf͞26j:-25??%iGnnkP,Ne߼de]eQJj7[gjԃ8v 0̾ݗw<{emN5- n'O']pJi&喹wv~g6O[/摱b5TQ*M{Wo6CN-mnKNo/f{%۠Ŏ=2͞&gU|i, wFS{a>X1#sd.GFߥHh#N6# ҜfWfwEb1# uwnk;p^ye]*l 9QJξ}RmlX ǘ`Wfߥy3Begg_fe^KyeݲV^+(=7FE2+K%yerNPlmdžbM@^g0h&/xÞfю^>gnt3$%裧쳰Nk]=i2Xt1eFw3<3`cR _=g2AƧ/N}R"mzO)|d9^HŦY n'ߺS]./Lj=L4 /㏷hM{9VzΟnw̶[eEeyXUv\?mL?ޮ2_SA.4_.˻&;1rQx}cv^^H=jhʕ./z`f%2@v%;]jR!/~WWl|asuя2SIdN#z~QFeqk47w�ߩHy>Z ǝbv>^'uxjL2ޢ@Dv,Y%3d[ "2lR>*$n4ƹDv GUq~.8Gϓ哱GMr'S{w1]Lү'><.Xgzid7ΧϋvF>z+R]*5=6: ܝ6S^rKd zR&*v43M}y}>:uSfΕr }D{58qRZT[ 2em^7eB3e~6|x?p<L'KSیNDZQ,~eZ' Zp4KiDڳdUF7MIϒiC5izJ 57`6K~�?x ԥgX.w7r|.w ҴQ}Pb.J@ve.F=)`9<'Oܳ#;(0,Tԍba?(U=+uQ4{q)uz~i_T ZÕZ26fw\pwגѷ]ץ>U-olt2�ս;TV'#{Gem.Vy|>#lzpp4tģ525_m~xv3+ 2pfu:O-oﯟSl( Cmƌ6 )賲̾sZ `Ü| RwՏA?2/NT_ 7#xu˔ǂ;2NT-:2ηKbudΊ5\#Ï}&W 54:{YiXL?n4JE F_=Ny{W?M= UsAé[Uwk&1d8 55wd'%0.J w.aLUAͻҧue]]?K5/zYY^g_ӃCMہ_0+sϸ)r}m חg mQBYeZbd좷L{ISdB+bllLFm1[Mg2 OXK@sͮ릕.A1])*9XԘ~id}M^PMgF~~Wwӄ(es:[.ӏpip}CWr~JE˝ |t|o~~wS6}<8r~j%ʩx] ?60T(!o e17Zs{_LBͅoivLFCNChϓn.t?i|5g)fyQ//^ 6{B_S/9֏7ՙŗߺ|sSE1&ŗ|΅*d6 iQb~/dqSC]ZY$5Céә!QF 5Gu7(J42}j>>?Iξ~}N%YWƏT$hw[WM4Jݲ=}[VPGU+{xƚ>~G%Gƙ5Zԓ]';u۫Qx~Y'/֌^\tPĢ>>ՎR9,PD>:N7[=Zԓٗ8ߚ>;*o!)/?pV7)/XZ)/w]ӗ2(l2@v_JFw4W_d*eWwvi+eo$}2 E΋/͘}2@Λ>"tTCaөϴLJf_/|X>3"x8_HW2uԪ?Qx|z,Ʒ|%hokwq8AW3*$g+ԋԕħ6Q'N 1+VW:t۴'qg.uёRv -yPoɡO=v(]Hu}F>+rXvGڧ[$Tow?ȖJ3>~#»E3ϝf PO ͤn)RrcI>o{jZ26Ŀ3mrm~xWxzl ~FoߖGunE,͵eq|'eO-o[\ÖCMxv/jn:L?6;ͻ&ŵ'ӏ9\1o}y83)\[ke'#4mfP~#pN!בGANɃ}Q2N_m$tiw^Ӻf.wxN={2~LI?G+Qx|pi,(݄3>o|iP菟Fŗ FC=8_}> /Ip٧:,Ƌ"|uN>mCM&-Q|{W %3eW-U<C޹(IhCMoтl%ɢ(2.-: s2htTXM|2Oؐ%z^>$griZ/[-N+[ c2f*N5e2̣3 9LfjչL&65; ?De2:]2W.zrL>ػI{(i _&εǩf h?+G|%GDc_f`[+W1.9LF>yg2ܢnMZr>Hs^T9(~D=EW.G}h=d瀛&o.tu;.һSmfj[k;Mַ E:./kyLD.zhf)GnMʯ`|TlQP|=~!/⭦q'\!EcCpY: y!/j"o Ix.v<xʹ߹ėlxi�!-C{$ltQ3 MK>*d}'.p'n{(g#FfnEL?.g}H?0~'ge]_F8]Ǐ3.;;WMv9e9:̾<CwŗٗT'jVQSu>e{X4A7O}\:=ꞃ\ǭfWީɕ2pt"H@}DɗTlVz(;/*vzM +Sf_qx61CfZ[E93\)N/nJ}2['^jF]'7Dn<;Jf_'B'2̾zJy ޳>u=AB?idUV±5U2O\puT8qYQ-_OR:~]yTW0|x[mˏE0|Ԓ6J%ǷjzK͝r|oke0_u9qZV:.3eӃob?St 74ׁ̼>>YN>L?o}9omZ^2Pխ&sI^61Ku5c&w]8f;}W᫪y߃ߦs{<hgVܨLVHcQg3LZ/c.{8m'aV%OZ釗H\RidxٷLu|vN-N99wpR{/|(2(f]pM=t[߱V93|r|vǮtvwh7Sտj+j(oכQ\ '_iл]#Ï]{q|Й2FÍj5ڪGf{f <Z軍)82>f]u1vҵ=1d̺geוͰ4-(v�_GU`ѻe};cM|7ҟe]jQMG3tWfb IO >3ʇ6.4.LjXu_}|[gt2(TS͠ i_~<y>W-8_I6~ڲϽc<hMosV^d2Y@NrʒduFI,yZ4J|Lf}J5v,_;|>&?ǦD#?W28M>h&ټ?5Qx~zw'a'Klx ͤ.nX[ޔVYm j:.-wQvqe9r�5nɇ[ɽџ.ƻOPlv|u**^p[ŗ&oL%;=e!ڿ[e9}W/d.oқGBex2(Tьp]Vi !/^\K'S[zėчsO~y( ?^gnCNAa?Z&_wUьwh0UP! Ĉ/v\+w;>{B߳٨saIMOx{բdfYJ~2Tk2V{`h38<~/>MϵBk ?)7 c04x2$´f_ |c#<ٗd=ٗ׺xX,|5|2l;=;e%қ#6ۼppU])/K濴cwێq2PX怭!p;ҝ28DEu_+ߑG|~\jzŤ?__Q:Yf6c[SDBs$2^;eqZKIc?㥣2*(~`v~ZG}g]G-|E.뉲lK&N?/EvQ||l#/xفۻreE={;9=]3aQJ%䶺؁w͂#62U]Y~ڳ[>4zՁшhQ:>VzSueDǚx_ٻKH7t,{M³˼2r,|k{.\p꾜=}26/]%o^R-"%M)x@i@_̌nOem|9`N6d9/:KRg;g5O>g-gIȡX&}2%Rvl2ej&7[Phal|"p ;U9GFaAF34+8GFNPA$.%;/e&rѪnņ!}+[lQ FoߑǗۺz`גbgeQnwSZܹʧ#ӏXimx>ИeC HQ|~ע`!jy\~ 7_BaѡC޹2xԵ;gOCo^ėw9\E3;WEMݵ[.wyoQgex]~]p5'>z ?]#.Qй2l0@79W vW;Bqe値g~&[ePKg8pL$=p1}Q1~K}s>Qc2^T.f{dkYt Ŭi2|}}xRheQ ?'̆]V3ڨ[ه[eY8-f\eg k0+N CY Vڭeqe.v{̿ݜ'IJVSwqcs2begD(И}~~SvI|geΙީa26/?'<Ϊ?Уe{j9tܒ&-'d7'tZ|Ѭf=Qx|xv#Xr΁ԣN 4ctϣl3~58!/Lki30ocKk7jN{.׾NuNM_;*./w>w^11$&65e?!7 ?=I'y+\eٵny28:J`;ɓهD(cϧMɚ[T?<}k8}<}nG}0jo^=pViϓǹ~ɩ<}\ic?s')]7cWuh >dT&my>y-sz|mEI}IЦZ>rEggݟQ|}!FBo55>)M^fHVËw:(iORf*dfz-k+?7}T,LIWŅ":#W`_{wͦd[*Y4N}я*Hȣs|5 7{7<>oR[K3⾺n%z#6ՅVU2u4_f4G] ^Q*F—�=w-W`M;c\:(w Ckګt%fݘ;\؝~tώ-U:r ?Z6q*.}*[QSo).~ԮjpөiTA.~) ?}=}2(,u"w۾;tj{ҏ5]k[G;EڈIОŗ 4^ԐZ3-oݤNT<AGem&49Qqأ(>$;/4߅mgzחZهM|xN6L+e1Hq7ov>|N,]0Gw+nGeNvk-$~[E~8OwG/)NT#rg@o4#V2qŗs}ޗsp~K#̈́'I' [>Ə||R#ij7ljוw?ifߠðs̾N7Y>CԽ2(M⃜Ke>=WFԬzu3j6;-  j>X2 kwx6}Ow ? v|8p ?hlWR3k?zx OO3+mCcD^5<MmгPĊK5~$o,#ܪG]g_gsc!k2M4=!I›__~vMfS3vio*k2jTL^Fgt<d9&' O>gwL>GQwl4{eqc$?&.5ew٠\t^:. v9xu'^eχr.$q]g;\5eo,6 P̾86<<@\ +h9OCJӍrcl ./p.($|*ܐ|3׸2|? 5m~T y)2IG_֧{=l ?ޠX�65!Iſ<K%!V3KϬ2fxui2eCjnG3A ݙqy;}2E[P(\Fe!7Nxce eʫo':Wb|n֨{2{'Չ .l}2X'5%g&/ڨ 75HOF_wˤyq83;̾t7~g禌 `nsSf_"o9mJٗVo{́K_a͙2(بֲ?T̾ZoNTĔEIkVzޮ^uSFG~KM-io䫯ܥZvޔWF;暇gM6cO|~7e9nÿܸT떌>u>=Iŗч[',uܒ]a74Bo(yյM<rҷ?1P:vcS"K\uu&5iLuofIgO_nu-޴q{F%VS:1MjL./tۤwӚ~\i^|_&G1~W!Ɯ#6j%u(v\ߖLZx~d`{tޖ}_'$d}^"?26w~[2,HfM2WӜfg|f[~]i*Gel;yg/2y_NԷV6/uewـ#Xp=}28Q4\j[f9Hm˟ζ̾ +9wqwl8/ ؖ ҋiL~SsmSo kGFy^v&mvd=|qb:Edž𩖄}A:;!;2ο˧񺡐{|GϑqubLL>.nX'`5}˦g䃺`3^;2ҙF1h]}ʡK]2x>̾1/:ݟeь1+B} ؕgmKPsƚveцp5G/^\t~3)2#l%Dt+p/n^zgj;O5ؕgd3}w -jmژ}&^uYSb&(u<33Njlf;m.C! 3|vJ{1xMotxO7zdh}b2VcVVơpLR Pnl3{\+p\&ssknH囪יSYSGnq2XUt+-r( g2(Uѓ;}&d.>HMƻ).vp "e+_VYHie!o lw6,V2cN /Pp.gei_?%)F_싷:|Zy_uumzЦp8i!IowӀ?񾻶KǫK{JVsӲX 7qg{(+:8J[)@X^mŗDžfש%�st̿GvpڳOۜo55lv?~ȌׅǛOHg_#T|/7(:m=Gp^|ܨy?׌9di[9c;GeQp Qӯ_F2k9 6?ݣ2{-]ꁓgNeK;YWF=Iwj)O>VqhK+i'eQ%9r:RfRtgN>)ÏN`sE( w� ~z.'K%ul'|bϾ{|l%0K|mz7%Ptte(۩\;tJ^idS\Sw:wӜ K-";[NެǿƂ٦t 9yc>ڧ.u<:vg>%9V^{:֫.u +,846Kj)oMiRiZܶsG@jեz;_Zfuu}EeLKb\E}ó׍w\N}~~muKOb^mlEGek][)Y<}× ?Jz7^B_~xKf޼nGߦ%V�ɥСFeiwP[)ӎ~-o?Wӛ.2v}: 7]eqSZk_NGsFsvekKGf }hoDs'|qn^|i[.7ퟥ3 /ӏ&T]c= ZGyU|;\m< 5T>͏ ?u4e ?g~G;[qX9#ÏMϜvv~U >'?Yɏ { x܏̾kNwAUw)-t ?dջAӍ+>LPv},t7dkSWN[T;4dWjxUَӻ2lµAOocOE/K_~v_ 3we*(.N}2eSgL+;3 zؙM=ﺐ}ȬlL?1Y{!M!Ym2|76}#30 /ϗW.>>e4:J oo�z1}~2qcuuf1ΌsQZ&ϭ㐙:dt=e|8߉ ѫ2x<1gs1 !=fV2m;4 >|v?'W2t6peESKkD=ύYemÉw?Qtzn)Ӻ .5ˏB^ +<fNj<9TGmG|>hP:<B[^sC[T0:BV˺,832%`U~ 5k=dXfUZ|Ϣe=d=n*nIـf/\λq 'j|q/_ͻ?Qx}k|q*V#ߙ|Ofm4|ŽA(>n t&trSOf;T?}t裱M n=2jHO&jwxk֛p>|E7^$lmf <ZC�znT7ݱofLMpR&g)/u7lI-> /lUO\O{ߎO\O{EF??7o]=[{t»1`WL,Yv0vS_|_^&ymTS2Xj!cJ8KvxpgnQy5Ϣ\"v>GϢDMs蟳TM*]]@kc%:G2~<�~!ǿ.S=5;X*oO9>/]xmÑ Ѱ u_˹yM;B@lz/,݊.z\J^? ?7O>VK Pb,}j b,qPӤ3> 5Xy{{^&6wtSbܺsWg%oS7vBB@ 4ĖnR#ԫĖɷQQ6{nGqQx|jƙ9LAӁct[&YՎf2p㬏BqĖwNӬxfG[&߹l7Y2=9<|[BLM,ql|NMw;8طwIn}5 S,V2_Rܣ\m\!r|><]nőw?iY#s;4qd]7 \qd!hd0(̼[z\y_([`N~#2>ÛC{eoD;tڸ2ؼUQp 5kԣXR~_ (=~"ξ2xs%<~Y9= 6yQt|mt\t\|\sxxLwT]3ld1t8G_Fr)lٝr=߻)k٧GT`=jv Ŀn2v㨳qܟQo2[Liz8C=UAF]o&&9up~y'Pt8\ e=VРat.�[Ri2q] \["Cw;*ʕp~Rv=~2P'Vڴ \7曽1j5܌&4qڿ/gO Vڎ2 ,2k.nPH/#B}NW2Q.;2/mj 5\VŠ_w !M)i*B/�^`ILw37G==W"d=]}(>ֈ>!~]>B%~_2ʼn'[B_G1]}2 (:\XHnm"]q'/y{޹�#ҙ<}yZV)ˡ l<|+$z.O&] y裼R#}_7wS,þ3x2xsY[-G!N)s/v"uBl=7{xM'=Oܫͧ<f\l:NΔWv^d"9W̩wD"e[k"e=G䫸-ۣğ~24%.|hC*W-%[ M|]>ENV47-<oduH{φrGY$w9m1?7>m5;=7hRP1j<=wMރ|ss+P8?U ר[pܟ6A{Gq^x7:EY)> x3(s^ͷde,Nei|{ (/w3#eou8s<o_Y[~Khs'8k:^Lvjp{ p-zm4Pcs`k{KҹN.î1:@aLoRE˿e!fG>z_eN :^.;�j�S')2z >䳍H˼S4e99;íշek; Y>r-sPy7[+^-s|˿ul{tXl\e>߾I#st.wwMurޑz:˻tuzk2`j:ߑww/k/ߍ5,ߑ)F)N#<| {١N}Mޑw93Թw\(L-W,ޡV̞}{'U~f Sŗw_4ֳ82nv) eߕw+Z?+:_TZgeܮeM6{WƞM/>>eQu 48ejޕgjRpqlu=whtr=h(^%O 2r͙b\YfS}&cϸ x4ls5t~Á7&ټnIwZU&Kɝ p{^y^$2=>sMSiܤMӏ/s۩3|x'޶O)պ~,7G?|bs}N?&8Ougeq=)`(珟]Ӫ©W5zIaғu=\f_}Q'ËwΥ  1U26^3y]f_}M<هgCF_WT>S28)4i;2�)Ghx2V d~!ls"32^' ʁcԁ(~H>BO.<_l:xAsɊfuAevZǒ/d'/6^(fxߓ*%FeqZt/ '/@݁klu=|tfJ(k 'w]ãh7 xH=|4mҾ6~eѼa/[>n=t{T( ǂj_F_Rw^徯K|oS6EQp{x>I{z7DʥfC/e'>t[|αc/ WTqy)(^{ YQNjI{KdUҔbEPL>֒z#no{f1z״Q@׻޸7߾1 ـ9c'o|3Zv…ٻ*jZyK9[vs%(9^qsuI׹@.r:R\`|z97YZΏ>l=F38</Ï~碐Ɗm4]Kf{8ܠ%oS 65egђ\28:4X@!@a.}+CZu\2(hqu)(Ýё Hn|]q糏Ûio]J.~bgċ2nn{.pN๏sn{Gᙣ@Ђ#cSDan^<2_tZr)/u:rأhwQ T<=<X2*U}^u<27VvcѩvĉHGz\8uCOOSW/-摹w}hisd*6K{7um#qfܻ~utq-=V=o].͐Gye졘Z.i= $ye7\"\:>Cy˥siϜh$bSc蹗Wf\Qo3J63gH)v#ҙ~feYv$Qk=2nso>~"n^}_i#Dl4M_?bp4Mf#t}NK5mfi!ʁs˵2m\B> .=ۻԚŗه@Bk>眘h&L@A}0/j >0H7}rWOFll"pw|βޡ2V../V|ci `jӬ8EqL>l“./n/ U<Ϳ~|aCt|^^?Jt!i8Ŭ6 25OMW\f_J6xky2Pͬ<x6=`2d=jv<H8m֐rM_]ΐtZ e{viGeR / $Vk{l7?G|!q7;y6Þ.of֤'8̶(Y\9|diFܹm~8{gHdׯ̾T ۋ^هu|2ʠr#q߬=e%Fys_F_MXϧ2adgֈc|2(4rwyL>:?{.SFʊ߳ɔWdBs;͔Wjny"72>GF2Уf̽k &`sݔɒ?Y||z9w6u D >Jfo7=(%S6SK&MÞ dleyTInL*I# {ip I48|# ~s6skJΣG[OQt[jgU|79>}ms;AZ[o,35u1-ħ8hsdU,jv}uc׳[p?ij? 7i?rufu<TK]@| .=w_%o)-W-}{G7 .6 %oy{%4 641ԒCKj0tvXK#6So*WK~F)s2}oVpגh4*fiom}^Kce7gV9ij +5|w ep| s2΍P=j;='' s2C Q|~ow;{m*2uB~޼2Om~]<Xt^3JyN~8Xi.]y^fL3bA[P8_[]ǜ_}o8t|>`RG&ߥHh҄E|^Uf~Fѫwd]E1v|O|I|lj>"7PI|/xwp?r을2 c̀xy>[F+G /"EueڶjdPErJe]} bq<: +umw *$E&Ke!F+ں28:mrW|WFEv<`i]}8S~O>&5Yg2}4n42|fM0:vLV#Xд2zDkhNsQ6\Mun2{ί|xk1UF/7x|j3|MցqA泺dN}L&[n%8hie9%Bnjs/WseŮ1\-T\WS6KL<;a._~3SR#6̦2xmOZ wZ@(m䋨 :@P li\^^MLDhݑT Ĺ~{ _ݑU&9rNQ!YP.PBF; " u$cd]!l ٤Fe=c5dE;r$EH췗NJ4ى?dq=eGmF<5 !çwY^^:?8z2H-d?2Jj"󽣟cYTegLd%EBe?dq]SONE5Ro`a=~VJI>C=}ꚏ"9w'p-9 pF_#zo_hчv4#TkO}Cq u9>~)Żi>هo+/Gkqk#e!YX<xi8+5z9R_;pM+f Go|YB݊SB5\7)=uod|:,,u8�qF>(u|^pIמ,g;ԥ.trX֛6گ+CI )o`+ܱ[_]zq=d!bZ9֒ɷ)|=e]k^kt}n:&/o 'ZZ2vEzk2f?ZR:^1u(kJ7Gx^&Ɠ,qf'bk-}gy\CO7g~gN6u츜/-b٤}[9.?25<ܘnT*rx;Pg(19j2v h;(wK=)1OgߐJeăߜ4zkm{Y@{앁#ox)5>ޢ{{n8k{EU7PhRWjVܻ(,uFwfv3#k>(82ݮc?2puU' ۳gOeg!UPmZ{ZGn͏/Q֑J3CxM_{FS=lO?Lw=zIM~;h6eueȚ42ueL_r\{H*irJԲ1"G%hIQ3q3w{6t%e?{㿑Կ2`uCNGֺ2ZcNuZ3~U%/<*vȴ8l~=ܵӐBmvзiTl>_�7@&F,!qe2hycp,zӮ8Z&ϙTHi-tkVi*j2|6<j÷Q=Y?GD\F_,ڃ-PqG'*gϩg �1bO{2~UcJN&-Z.U#m2½gw:52hm jIQ2qZL>?7_?'ٯE@ŗ~ Zcw0e.oF+^7S2XPXSr^3>TShL$;CF;X}zWrSrHޚ<!ӏi:PoxB ;.!Ov;\p}wv2`m;.-h>|7'"=|92^zCf0reϞ?mrT,s{?~ b6V<{�G'/Q5 '/OT÷/U0g'/ox" Gu(Lek=}zz2U;(>dQ/:O:T|p˓EE7>yL>nN/mso>e1W[3LTq7ei]lE9�'F1˿wGёPw6xCzėW1bY{) H9򀮕2*]e7vO5N3CwÎ>L>.t,* {WCjjuJ)CП9=t ۷w'_]渟FF3U3{,U9(QtGM.M-uv@͇f;Եe}Yv؁oO߾'\VL*nFJcs]įQ UKF_rwNݙLm%rxJ+ٌ{ۧUry*gD:5%or! >;'m!-or_T\ti2Oed헫Q8K m%Ït9?HjKʺMÆC3Kej)?E0]”eqc1Gg?V#c[ߡf3bY?fC{c'5So:jcL%qc6# Ȭ.K=੐ZY=+޸![ܽiIn%JHE=>a{ۚ/^wֱf]ʟ֯WobV|}Vtu&4_)ϙ/46) wmWݠqgS݉_`j}spBOv])6>ѧv|<Ѭ ;ݧɇqi4?Z_a0پ MӼvk ss!ޕɦ5nBOo#7[i! R^tw<Í_iխrMC3NOlLݰ u4Tm[i޶B<>kJӯ󠮳*c3KısEqtWZlK}qJ$ݫCGli|q;nW,lp:ᗿa+œ4ްfC0GMeF@w<_+?zFC#|dMjk Cn nټ|htH{$;FUm4Cph9Om|+8ym40Ѱ haTh\!;M>ѵY^Z8u -NT_%NQ:L,nhn:i0 9 H/FB':f?&_MB{ÐiJqNtL싻;sNy֗ Ǔ|=iRjӫC*9,ͦ;h~e&^nkL wr7hqu O>M~KLI֧ɇ%;&5X$#wJb *힒_C3<II^/ ^}4m4ͪiSf;hlž@}'/X ]Ϻzw;!]{ŋ[A߰~'M>R N|_:{ݴ&n4{^~붱f>4p?2ϡw3Ix5f[l-Lܟ2[/(% ֧w %W:n7ӂ]yjy`΋{E]C}h#ۚ2Kևy!m6Uއ߅TCga&OPd\J"{ .0䓗[3kuṃEpimgrtZa':ju՟n^-TTCd#>Lǚ&á4oa':jª~KBe~m<`^Ok^^fjC2 6;abY&dׇjh㲝2ۥهTi&W #QL4ka4D.zyrF&1Q{X>JM:ҴJ+ d.+նS8Y46vY™<,~k*=B/"̜W_Ə^4HEo'SRd(7sXOc> ?jh~ʦ't5~#n~Pll~˺Ȧ:w1agi[^FkȦ'azݼw[չ*33ƫiAvӼtrɦ'ڡ(J֧ 8_釭_rPj>*vSxVgfj{H+4jSd\<j5CE"4L u&xfX٧i"T`^}i6&Af_nbz:S}z}5wȝw3jC;qMF_YUf^Q}.}4K f:՞RQ|fމxx\{/{ɣwOia\嫿xFB_Ң ^>84 M¡Ha(=+igH?R1;)=Ǡhc w!Yݏd}WD}D[fb4\ZNcz-fzb4KA)ڧ1}Zo6֥EFci/NdRh(:ӰhoCq_""cZ{NMa:*9/}kG5F1~P9Aw{gg;|C[q'idC;4Miua\h}}av֊ &苈NĢzQZыD mSp`k/q|qj4/O/ X]rV8;Fwymg7h%�TA <OY1hek|CW(Vh }Їj 'l8,A/-﮽t腏ɗL,zw{Zf }+. I8m4mvCv'=_K<.( 694۷at;ovY3M{bnAԡMYf}K5WBS'=Zf<.>ywߩ+t$s#�#' pev?]CI}%f\$:tbQ&fm4`C~;!()zrp&,I@5)Tx -r$i\;<ozAC Mc/XdziᒛtRL2z<MFt*&_SMl8dMΡW7Cï^쟧ަta$*fCbAСRg=}iձmx; &ߢu01pDة4۟8_pg: t3 NPLHob.vk7ִ9}P0\ر@&_ڲFV7zuϺ;ԁcmMjVm|kYE|;Ӂy*ڼ@Rvo>twv#5|붮0.|.pT/4f1!5tENm#3OcϧW4DtØvJƨ~]4v/z7֬ZM5[}xis~$"phTZ 刮i!l`MOHxU;Xn|RY"O}#^/ɸ:hnzJJ nz՗!FUwFsئFzPbM_+覑W2~ ^x\4 SXkeU*;dyI' <8NEF:_*40I]Z*,Yg"hY1@ZgbMBOs|B`z̕Mf6UJ ?zZf#m Mz;uzHJxE:s\|Pln$Gn*>CD_bQgFnU {p)>ZuTQb)y&Q w?||Q C]X?Z4j.9p?`=JU pCpdQ|Ǧ$G;Uiam{: R3)>(6ͬQL:h9Dp `;M >Q]#X~Fs6YB zi=iB -:ZFG{u WnhyJPwyЏc4.pmPg%}5{7L(bXPj]||>f5{u0wP:Mxr`Mth N6vԦg\::ήw#T8cPoVi%oXhn^f;#44h?nH04H'+?+S F^߂ 7&y4Lc:N/wDJBurjhzm K4a< j\#fGˊsdN!$yg4`۴\.C* { O&[ST |Y+t 6VA4V-LƉﮡNM*EAf4g쫳\w�[ga7h/\Swa獤w |ޔ8gżT$NQZ;GثH'5- &3E^M{whF/lb_Im~~!ZhiI@ tmiH{ml!*v`ܻ8PwSucyTg4P]=44Ҧ0zh!3)Mg`hxQOgtqSFwZSӕSS=4.A;+zha8kマ!4.A;O 4Zf߅:hvuڝJS+;O9l{4xMkF_߫`{ŧF/﨤);Q˫um$,I,>R7n}o ,p>kyNo:hBNi|Fu>Av 8}Vo7Q$ ގw4`Wx0S̮^|{ҬodX4߰Eo)Euhžz� phy|u^MK:ҽhzg-}I>q4vآٷܔXTS;[4ő*.9z^[4,ECJآ'pmyf][4wg[Q:ƙL*Li \7tƼp/F|旺Im!y44tm|F,㮣ь^e1N+Li=%\4`3dCsΡ5}4tEkVg: l(Zk|;Q::?}-&4*]GkS4̳==21ɧmvbܞ =M>0ѧ0-aBOO4wߡ |g&4`hmm> >ð@lfDC zc^]6ghWo R:kϻJ[wQbI˹*)M ow<LiAdwE w}g]S|VxNÔϲ.Q_S{vgAsٍP7գ3es$C~�e'604|g _+r"EFSϋzM}JuP8|}ηB疻`hUDǝ 04W3WoWMZD`cvi;[EQ{KFIi.Y]24f%*_u~y4Elۼ. ln~Ec+\ʐ4BN;:VMܞ&ڜ_h#LǞplٜ&_O4xGc*dNs/ ,_g_�9 >fk } ]ghylNongrn(gN/Ը>4Fu|u9F}C96k&h]}Gfl9pXK4n:z?hwBYgvv<>ŷVWfrI>f$i:Y70e_샽v\fs }XoY4*앲.ܹ ymam(,h!+e-?OI]$?KaI: eW5+2$;F1#y�4j+Pj)ݮ!A2kWGn/r$ s/[óԪoۚb}4y1[ͺE1%M?44.W, ?Lv l>!64)l|g;4x4B:q,} hy5}LKeC}?t"@VɇƩƉ7v#7.$ƪ{>vGVƁeuwD`'9jy y Ō#:6v/ua- n,G_bsq;QTՉ^Gir iRt<MO!5[rvL^DBڥ5N#@ٷu|ES%I!1EoC:t0f1J5$|۱vCp^-4{jWu?.u/|/|VhF8,0F~eCs:PMLU45inj!TClYl/|ҁ]zf%n4>rz{+5'֪tZv:ago}R$<wrVf<fKei Z`<_VKUꛆ<MO! bX7M:ͮj٧"m?Z/q]>&S%�8dž.4 4[.ѧ۬~bӔné{t}DlDɧWZitKl|f |Vpťc*m&_ԷiShgp!kfQ,JT/ 3ԑBK`i[hga+ ? gN(:y +=4,3Ygqz+tXl}~I,\iyZިf_S:uO^~} f51qh]N|U\"F[sӦ�uֆM>7^;ÍFkh2`zLn4n-bHt`In{>o4RGMn404ɣfln4!MYg]G^V2L8406Jz΁m]IiJ~wPʝ_aSZ!�WԺ܃J ڟDzGfw|uo3bhjߙ"{#M{UgNT (4ɞ ?e{4HPj~ݧ ;rB$w>Lhhm䟬4w1 *&qOM>@n4)5'WͮuxуF_5c*[ g~m̳ KC3ZF_%g:k+AԮsw<hP̒i;M#v,4EV̑40-^WFwNTrvM{Ek,뵟z+:TegSI@#"=z c?i44SZcȦ4.TVxi̗4.)?Ggwŷ/ ]& Yz ?40xܕx:F@uZi ƻ\GEdgh;cLs==o~vaЈXxc':Ϋtiz*9;Q9݄ TTnvGylq(MG5:ݲ㘱U<zؑZ]\9;KّZw7D]Bub^?xog':,(wvq}9^g9ڔLx7΋|:<<L7^}6˝5Z}4 fץٷvw%<VOhnEo7, 3Ŵ>]GoiEco{v-|kI,{޹%a,{;shmFǭ~-NcAI*5MOC1Sf3ıhUPJhf~U,\o1 xcK,iI|K=6MW:p'6M>\VLwl|1ΟC:phAM>ٻOOnvHs cl|}c~ǦrY1βa96MWiDI^qM|֙%/|jZir>.OhA8vT-ٻ]<#NyZWspS >=9/[_OΑrũ_1Dtt[BjL n短OϠLԤALBhU@{ DuWJQ] tmG3+ݡ\X(M>C";#JvZaZ'W(M>utVu`Y8f_6W@+Z4Dە86&}0,W}$Js!:OEBi9Z'kpcc0~h\`1Аisk2^hFV3 RFϋ~ٌW#0~Mwlz>W[O'є u&h)w@:‘OY#>6c*vl&&_6WS˜&_j݉[Q]TX!&_k.Ui%/i2N/bU#xW{N/\6뿖rMyӣiYmf0(/.sq~u bWԱJ4>_r釁Νf!٤:m f &;,5'9O;z9 <fښ|之yh=A/1Ⱥΰ%FLѴ)\业>AaVrAoèMYFc4Nv)<r6FAG}vik>MuRG;f*͑4.4y ^> =g׫gAH|ܷki}CH|"Y�kI@)ip bW$ :Qt4.zkwf<NFXO3D |tT.fؚR̋6F@8C2' ;B}DkJ-h1e S˩4-m*ǡw.Y#v0]?F mhSƝ.Oï>-Hs|$֒[۞^Kg<Z>t%"rjȖn^ Qih�7&OfmS`9j}5 GP#&LX!1Z xGoE=G_tQxAZ>.1@2M]&_]64f$qiU6SqioO*[Hu~? t4ǽY'ϡk.~uZcN]l .\^~.}ujeJ1ńoMLjr۵v}/L.}%y\4*tsh?\4PΛFz/w=ٜٗOՏ?\woܫ1'ώ_o{g 2JMO4w8l*iաQ_'mQ%7MGh:ȳim>^;#7M>E"ɵ8iϪ˹inrJkl'7ͽ:̶AyCvf]}ij[�huִ<y`ưBSO~{@΅h g =VKƊ; 5(ǙBsOoF$>-B =tgƆ^늈~ ֧gOKft)4 ]k# px<F}'kmЩ4P=m؅KejSiqpd봙RiB/:zJzuoJώu-|xfFૣTBiK #k/oP [y>-Osjk6ST{.󛶖fc-Osջ9 ;!ؙgi4ܼU'URhAxwS4v~RN\Fcϣy4z/Ywk\OP m+':Hɇ1nLF/vTa:U-I&a5rF/ }<LD4dzUM}iU PP%_1}աuGezv~䟣.SQ6|t t}u%t} 5p:; QvG/KuY`;fܫ +w8 {oB^^5$^BTcHAc$=-MS3;9ͧ4M}nߡ>hMĄ}$}e]@i/g :S4iX7ށ`먓ygMBz9_/eP%z*PlɱfE&ͽ)vSb'my: yAKԾc+>wguL{4SÙ4 [ -IcB1L(f4.FX)ק*}4d'2>[;U5|{Htv0㐤GKh}|00jlwh?Κ}Ҋwn4yhajJ[!x+>jbCBlU0'աm|#+吼F'o~sʕk%Φy}츗^Z7=sO%9t2Yu_-YUEqw}]~VWOƹ$9ѤYvjX?j(>9FiF T^BX=?j464t W~j&.5A_^}uv NaϢN*'=&x\'O*OB薌֧ɷtSV7N:c=ZV qy }}G-Ne΢)s:+UeEOPn$>|i |O| Utϙ40< fg܃vi87J GϦu՝2&@ns\F,4QOT7FUi TK啳iߴ1;HuЋl}wfhvv HϦѧv~l~Zkvԡ"O7[hpi#8Zn3#8{MOj;GSt5hSSv4qBF+e9#4+%#4ze܍N:kW;T=B08P2:FI7D't>C\l$-0vF$Q}V?Z?]t(>7W4J�(zfAEe2Zfvl:՗GlBHSnl340u֑l'Q\?Jϑl% >|hՙqf߳Օ<Xd(~fNBʬ1}^n~z<7}FϣI 3c4FS/4ӿdw m8l~F؋O'//hn fXd XL6T|}x;f h۵ yYei:uT 8 v2ׁ#Ll}zf~f+䳶:#9 q#Piq|Ё1rŭg4՗:Z\v uvg/ _[=NB%4RNif1# Ӧ]u~uг6FgwGE|g6~f_4lqwCnf}y(a; |y3 *#'himEqu4Ζv߯mܬNz6<AsۚDC kZ },;aR.r| :ݦ yE*d_J[Ywp&:)W{2ߴ40yBMkf4џG1aP ֝g6IpfU;YGS\uw]ca@h}~wk0`.O:Xu7`vT$;[xUVB1ffq5|w- Cӯ3M;9/q ?7aW:uφl8(z~ 5W|94T\o|J=4`;,G@3yְ;uƯv֯ϻvȱi!#׳~QnbC{g.vwIJDTCE3YÎsjt3S,rvOk;P Wzc/zhtYZ&dg1Zf_g*\}/+.;-֙Soz\}hή!'P\}fuUlWN,+e{هG{;89 !$]*(|4򻋦߮}9xr�+uEo_:tAQ.ZN(XB'm'u:,',MT\.T> ;0t?Ph`x7y3W@w`;vJ4$BˇwdBiզJuO34ҔΊsM3wC[ښy4᧐jz뼟3`-OOջ3#=Uf&Z=vܳmWhG'a`˰6^ɧfCDRC84fB]BOO4_YW|B3TqP@oh M>Lv M>.!Y9T B$~ };Z&_e]G|~>>d|;}0K TU~o릿2+>!nD8S3w+v)? :F+~4Jz&M{eS!yET۹cث4 ը;bz3WiF7t\W\;P0I {s$/ě~E#M>,dy$JiUdݦ;0}Jt1}Un3cOC/]ه3]篵9l< ٚU[8hB뼎.i;p.բbc~iAkxjye߈NQ]݄?bvF_D~-,7Rǂai);<n i׻"?`9B4>"Jוi3N&[}ڝEGsjz`րhkK=]irE`GH7c%"4 *K2ֹ-ٗѼ|aG%ͧ7h%:y>FiaZ0:GB^mL{f_B <*|;Z}ve3O; ;ua<s>>Oo%<f߁dh\LHy?~~ʮbdza0lIxMs5& "ƛ4ވXQ�x>ģiy(y"Vs;v>*gpcVA[J܉"j<>Ա+t 2IeΑ~zmuywvR5Xi/i]'|hAc}U?4.<$m6U/߅,r׵վliZI֮P'>ƺF_]h jK1Qa瞗Ӷ7Ԁ3? r^ ".r⓬ѩmu Wn})`:jX]_Yu}yXG-Q>ZTsY?+V#kM`G_pn6e ?cNv;WE1W:Zޮ廸T3m14 t8zZRǥWU7UmKo[+ZZÜ46ڛMP34:m%46&"gL-gL_�2ʝjfzlP<[O'2O.eus�|n,d=[f OP*So€Ih6yG`g(';;`}ZbԬѐI_@nFң @jI}d}%>]�H;[Wvu]�MAٻ1MLs6] )kw?H~ 94+ fN̵ݲ>@XbuKK4QBCgͼp4Zٸm>o|J4x㭸�k1Z3BB#3GW'gG"�H4Bκ-2�fYoq= ss)8'jB H?�4+_7r(1 1h5gd ebp4eE+Ǣ"ҙ Xh u  T*_|`N _!JؖaHEsOS!7B[ u&p4ktnpzgg�%f$7 ƔƠW4ڪ|nMA̔6qDM1MAwы20!)-l:1nr3�FCڝi|nTl@SO�?{  A<}\�~iZhd*&i(h4*MI&᳄v5�d\ !Fq4.#h6yi4 ,Fo7G4MN:!;\l6"Ʊ yu`#S\�@wN>A*5y)ae7� 5ա^:-SNct!1` Ø1 )MZr h [gRx:VDS&sJ}~ $vwjzXylNc*.`>&]w?/`:6ahE?MFSsu&Ϋ"kZ# 8|--4*]H`x##f<N\CRASxY[Tm�* 71X~ &2ij:i 7|>\`4],Wl& V4>64sRoEw9  m@kZDװS)iq6U/ #Sh}mh � 8a} 8k>諢O]"{ ͌f ^Cq^c/ikm^0-|hb Rgn숈YF)OmR;"RC;+Ͼ0 D? /�}"MtTz}T>QjԦIf[3p,s$5Bf_�;*Rg*r7"AH]e: j] ?Y7VS0(|@CS͜,218 ܑ<֧!wtzWBԆ. Z-T CQ,O#~Z/j;=l8(ARL="r\| _˄Ep)FN Mק ݻ>]Jh:u/h2R{�ܘj29q4�+S!!b;Ô^4Ҥ[{7s=5v-O#PЂ8cxţ@CP֤B_0 RӟrqI|omB|&ZD>`x4%+K:P0ǟ!('ۑ] 3cЦ!X(I~boMCPwvvd17 A|-4%X\�ANi+[g;QPTS4u�!8<o1X�'$f@cP!Uڌ͠Thv T4 Bd#e A(4a lI~@hbF}�W Čnt5H `43 diz8o<ө-4ͲqQ+\<S(\�MBG‘z+\hڤ&A�sb9a�@i—0Xi>qNLZ˦R[i6Ο3I� Bvicvnxppe+A/:ƌtzn+AF4zu|=B[i {!68d) AyWtZO3~ xju Ķ 8[sX=aF#@)_#=?�EE6cs5kF#_7ߜ1hFZvB{B\[6ӦG%Ө;M {bx ÌF`9'(7. Ĉ|wIHI͓N30QS ciF6�T+J{fXF`Fx={lrq[RE~ڢ&`BT`YkIMóia, i&:`L8w tbf;?%8%Zzyc-ӝA30bzxptȵ5AS0TTw<Ҫ/OC4e]i&* -S]� cθr1ASr1ofO0e4Q$9EJ. iYQIt:f״St' KDd'@xydzʓfF]g!!L!PMk'M;iBM,@gA013C@:3]Oq4g 4a6k &iu % ? �A&>4^A&2 C#ݶ,OitxH$ìƝLmv^.�ZiMIn[=| �H;7pXkwH-Ҧ$$xC#Oz}k Y΋x+kxû9s\bw@@IM4)#u<534^6\ Ё:meEj}T1>%-�fpЃvwK3p`tZjxv tHjsUܺ[->ߜ>hHm!7-gZ47UPm9hB 3[hSmxʢ ߲FPP$ki,A90.f`aB0@g"$# .&g>@~w7<Pm9tDK2CȢUV!~?M@1IE3=QY4qm<9X9BM@iu/WY(F .- ªi�ѵ+<^i dY[i�. 4ݍ1e�TzS)_ f1lMc |R+ 4�tIm[ӟ]�M@L;:"֧ 0"BǍtʩhQNEhi|_AP B#^7e4DhBӛz E4{#Bz!Ћ,L"Dhm:m|O~.bv4Mu�" 2.ɉ4/^Qp}wa8di{ h6g:-J3OpC?Bpfߠ >"r )h5Ӯ[[Dij�tLc $0LiV@X!bM{歃q tV<:l,$+J3Ei< AX6fB`*N{h)cNpT01Uv.|O0h9]q#ϩwDF~j0[)YC&fV%h ˆÄMPC*HFS0Pݸ, 5MbyED|^#%OظAR`\  ߠ㻱Z\Q $\O`98t~1.YqnbS7�Fg #Nc0w* +Nh ( %3mS9Ꝓ_ȩL?A=֧1ϯ�fW;y! <pv4p("=4zWL<+6šIKJ<;ڬ D}Ce GRYwj�JeiTkKngg-.X3SOcz/eMQ`!R{RM J^4dy!qISԇv^Y(4ߍkTyIL%i $:_ F୽yІL%i^$BUxu{S3'뭪"NWu [@wב pw`M.W0FୣZedc)hbv'eVd>At|P ;1S�+af ɟ'gqgޤߩ뮰##CKAf##HN[/lb]ǽB܍N*"6vbl]yaGFP`=EĎ<.Bz@- +U;:ӡ4!|ku1Xޟѿjؽ47M[X }rq45buZjar.(ۅ<4!SX-aT*h+EsN<?+ļ.ߨ@'R]47ީܺ: M7B]4e6)q4XOەt}Zy܉[!(D0<;uxEClE�u#05v@u{CPOfD+(${~(u%lHv!XӍ֧!_ȼ> 4uRmQ'tT47�cqh9"9!'f4U!N\giu@7AvOnnOcA4mV7A 'Ǯ*45oW'/4ܟcCDE":Q!G*4Q솗"FDTh_Q+ *4M΁ng @ÄL'Qw h֡nz(st|#+2is: mK*4-}G5O@i?5_kֺJS ר>UO4<�uŠ.4}!,`UKSuv&:ۀ7B9 t5:.(0( A@>͸hz|4n-JhY[Yanǥ5̠rS!XoFJe+�t<6Qy_5!jM`f@S0tud2`mƷ0:tB;S~�(yp2T`d'f N7ap׭N}SLG(irL}R Ggi}m2KYTF 6!mΞ< ̽Wc~uiaiV`bR޿Vq F4{,mNC0mwR;Teꨄ^i S)LN?jm;9 'D!WwIiDY6+o8 ytm:fW"w c3c usp33LrA3tzv9Tf<FHܵG@ e7w@ܪDC QXRx7U!|[gX[]>\~)I#ۚpwj |M>~aY&/4sf{@ Դo k*@6#2Ē`E:m:&M}5i ^0d9  P o)q!6G4 Ɨ:\!@@> *Tܡ"gSտjB'OapfDŽBSeEjoWǀq. uZ* LQ g'|EM/tW�R'ѡݰ"旟vflXQZ?~IZu#8NijOhǖt)ʏ� ݻ axn[/ ") P<翊j !XRQu]s[q}E/84cE:ܞ;Kc]M. p]¦i AhG7[4wӴf#hFtۢA!l(Aϊ�c}s[4w HZ: hV=DQy- I8~8/4/«NO\f@sP ~ӆ@s^555,:;EsnVM{́Ö/BCAIUA#i ʋ/&mk}oJ@~ZvvMCPWm?Gڱmm7萘fM&&ijk �"F`Q:YTȚZ7ki)49ͰP=p�h]n3"%Ô &4x"OS=F۽KTp?CUӦ9礛Gx4qw( NN4V|t%`b,zhj0LvvfBЊSOQ# cVoYn^?=]ϢB3)':[MiWc4 x d4'fJ3П{ӝa[qI.f /SR@i :Mځ֔Cд鑭#okJ3Э.Q ˮОJ tdycSjo=4�3!U46'yo[?iv4$aS3R1՚ͿieE3hD;%ķz#3f4jsR!a>u4 Xn Ԇif4#6)͑ !976CѦNț ml#hsAsuws5fՇlf@301$r=Oex:M܍%Tmւp =\`>cۦ&_BTLmt$.rp4\:8ui SNIf"443r5^G0?cs f+gab5Fe,hi/D!Dǧvk4%9 ],&/zh 4O/fCւЙZ7gǿҵ9X@c,hh:7)R8hc:RIi8Z\Z/oI[,t~Mg}Xgiuu/-1�F`(!U(4�ѹ55/!&L1PLƞ4�ڤNu*Zv/)oI~dV4Qبh_@<h^ 6AaN#7SC#B[Fvh{SԨ[Pp&DIϪDM#dH]@řE|^1͉"u1mj"]_:l7v\$7޺;n*[f#N&cz]OHgU:ʩ|"~K7>bE6#5HV8J%qZ3)Ms !DG"uq(O?eY$|i 'fc콁34nu4U7ZEg@SptS ݫ~>3!g8Ӿ4koS *vi n(6: 6}i[`apMc@k`xrpBh kP[l1X__c6�S"ӴB`6;{ $ }eƷm|DӻDf>,ڹѨ}9(^@J ;e=UUEsP gФ} {E7>MsL9o4znbOEj>AݫG Bov̩1d7 4[IKA}M#9E#Gb4W -hS6 mzܭp -34�}PMR7 EHkO#b߄ @?(TZ_ܘN 4y#&{!q߯ MA4KG3/}k/\hvhouhP2t7وO."64aLX3Pr0TuN@WUܕv>advku\j=i:̕ d4;g^Oߕ)'f1ӕ7F˸k73\q@#-0کzì+@A3plp}+@H7PׄVbO7v3ۻTHX5hV3}EJSG7eurPՆmn4MH62iJyz >M0cнk�hb.SS!F#0cًCAx B )XFI~;N$3 :Mj~'f@S#9͸H1@՝ zqZ^9E+.`&9 Wx]9ms!܌؊,\Lӟ qXY; AH%7XJѝ`F݀N! s438/8kv)". KH`NOٞs[z%?v1HFtP<FCw>qM(h ș6eA~%=h d$)i 3]r4FCϷ\=h ЮANc+@Si*Y�N9�N]]FoZγ H?fgHPnnœ!;!!%064-9xZ Wu"Oj}Vcmٓug�ZG0'SmqO7MRj4/LQByfX ?)x:1Wuvhk|op$!vh.`nH]^_ˊ3#Zס׿10;3R`I`ok̷vfϴF"CIvfFD"#Nyf 8d+(*p}q C#uǻH =CgFjwjv4?UZ4HkS `:RKcpC[^NKs<!j29 Q!jua*:�6Ks6C#$N.NwF0>4.}n]BHeEb|M p:dJ b7 hrECPi rPԙO3Z[A:NTD%@Wͪ0M *34Qx먈.а@f`uoaO#X4k{^:+dLc 4+fX4崪+1O8bsy�PPtd'6MAŇ!&Hym86 ATYA CV,Ŧ)̦S2*N7 ;yw:)IdO;eb T 7)8X8 6iT fSk#SX[=6 AXȊ##&'W `pP֐Y(4[!4� JTf03 B*c X{lkʡAM@+K~&&U+_ h B3]WQ[c8h33RpTh AK|+BcNvƿ8 R:lU 9sƑcvmV48x'?ZNHiUi١S( tj|nУmG@ !? o ri :F:]4K4触47,ɵcP^o;V$k&$Ơ E2VJVPUv8j45NR':!`4 iMi})> 1XؽMFa0/:J;a4keie0Ѵ fLsa4ϕ7[1]HMFCm(Va2&"kF`qN,ӔF+f|t}l6f@#>w--\giXK<^p٫ƩLS8Ϳܧ ]ppЈ,"?㗚 XnRUz@#0[YSՊAaeiPiw㻠?y~L4aPh`qRj8ZknlUX+AS]%j9�i14.gګAS@>g -O#hz^F$fY@v3"h>M>&h~24tVUI>)x ڤC==)X{nl'01Y)x[-1"5xTKPvnTBu C<\D ~NH }>z/vjr1ICw7M Dk:ICb>Qpy)x,<΀,g7YkU;3rt)�({0lcgFr 6oH]C;!;4rarVfNa`ۚH<|M`>ءUѾak;5R/l*6Wvj.8بE/)45 vj.I!MkN'6qԶeD\H7^RtJEk47T[qi>%}Nu|.~i֡z/1T4wyOBSȆëqi:ZuazX1.M?_R4Kp#/D p"c_Ph2"KH,iN.<<0DZ ,s 5)uA$Qݝċ�Ms rg<,d=!{Ӣ~,ESP mX*"R1|4%[u n(,I\4]yξ9^EsPn4HM{m>Ms%ޚa�T4.i *M~] L-i *ld򐠃H19McPUT_K6iI;Q{N4kYౌKn8tY Qa|n XDn iNӭBAhꝃ"hj1(�4#萘\46}2lDkH!zi]45j2*: ffW^ f[)4Ot)+<ɡzB&)4W7)^+ ڻ ٵF3rx.UO@agqG�2P<0߷u[iY( B1p(9}(AHF5SQ̇& DW08JsZ 4߄bi]lǃJs];U=(Gcxxh:T; >4PJh(4&\Hrv}.TqJd4+R^逭tM]8}ǟ ~(b4֓ ?>W 4)N9؅h F/naÆc4qcu6R8FC0N+M2w}� sW[yi%:`@Q_Y:)xu9qBL1<NSl۝oiVه#&;"jvl)I@|V@Z )&EZqj{(s`=a!z痎<j"a?[4@ Gl}vA٘l9l9hL-fTNe/d Q hо%+j.aW׷W J]ϪPg'hV6'h>y E t+ "h, @};@N_uW7+ &2L`ee.Y9A4X jBcsh f5yc[}ޯshtGOѼ0uh VrQ&Xh941"ЉCQ>g 18m*3׫2> `Ay.mo$gς<u3Ar9CN`;Z^$X!Hp}.1�&M-C3$XE'#~!q5,P$>B:!H O8NӺ[)vzg^7v#[<=,Y99=dtx}!$ M,@1[|'N6n #s64)T$ v>)Ի1dua|Tu7i %g|p<>Icp{C1㴱Hԧf 1XIw3E6RsI4=ު!U!7חWo,qAAk~-KC 6{DsšIA̮OSPzz -c_-w!hB9 k~cECݝv焳 Uf6]4Oo�9[� AAGPsDyg ]4% ߍ9gدf̳Ӂin@=PEa2r7 ʴ駺U!z;9ٲ ɘLE5!XvwHXϣ~unu/p&Fw}b�AEkx3Nﯴ4(vi *ڒHu/k=1Ƃ"Yſ-f(_ϒ^1hr!o b/f4>Yr-cwWt}g}Ơ . 2T+40؀Zmy*%S_9h֩z&Ojصv_W8S4_^ Kl4}7+".iֳmVs_KtDizqi^mWqIBi5wN t_y_*z;_dF^j֞Psvy8~h﷜p*?Ϻ/ZtͿJ.>02i;{c5!uCt@4tQLEE |)REl~ߙ�p/j\L6h�BBO/1h?Aw;s)α5Q[pVy"JG!FS@T?4=t`]92V[N#*;BA;LF�0G9@M767^2>SumF/gz24iFCU NC�ֹ;5g !x h%w:<t`^㕵BAC!Adϧ8lAc�VU- z[ W-fXHx!1߷b86UsAs޳VqՐ9XM�(L29=ЉL _~t6� F~)\1b/w!){hx삑mu „iY|ަshvp4*ӓCNcΰ4] 94/ۈ{+_<Y#g Z#1MiCjVJdÒ94rvqV:!9(Fi4v򊡲:mbFj"M,=Xey"@<&ı�;4ߠns,ralaZg'F.? 89z ّZ�\ `~X;t###4A?>fF egFjnCB*_ߟK3p"?|Ap&ځsdG L˲I3=Ҝ Ghڋ _n_ޤYCqKh@cpC8f+t7i nh~& &3/rh{r*U P@l99XmD*6`2y Zô4`Ag_9(8mb�6 ihJ%;0Nt1hb!Kc"Ơ<FM ü^P9A:l~ )@SPv-WfTc,Ơ4MzCӹ\4kƭ?G@c-M<0^/,!MC ge+aC4 1]Bn!?+T6>ZP==:@Eӄ!mraJn Ѧ sp8fsTrԣmD8HWi�*M[O^MPQDAʉ}}7q�NJ b@4X4aI*4<XFj$lgRhMg`'Pg1 UQa_N0Phr"i Vh^V6hfߪ׉~%gקhoԴ~aZ 4h6Bбs# > z$Qph(@C~J$fK+o T5&kRi + ] ۧ=:4g'ZnT;SA Ri Bh "pTr*J30I載BH4mu)\:[�Mmv XY[Tdvyi/?4)9R ;k_?r3M(ךƔ |}ad4*$imØ>N#4qͯ/J.Uf;i4cȰ<qh< ONĮ7ЎS;kKx hs)6stv·Pڕ\o] лL!Bch'Nc𼉀&, mf)xn62!st R <8rhvs)F`ᵫnW OV?w4+vv!1lOˠXV7*ÿ:Oj;ل!�iOeOe�A @(dAn,& etNo L=/3h�sy"A}c'& 2߄ A#0 0PL5jWsryh&<"t|PyЁȡ D~#K|.*f ~vB�4{5%[LDij̢m![_^k@S0+o;dA\#1c # AdE|0�Y7Ή8[�,ga;&Rח۩w T%r=YΉ e*+s"Gat" v9XH`HdGEjq;Qy(8؜K"us,cXIǡ;+"?YTco[cK/�QЅ\?&/C݄"We/ ja7%i&niİdVDVM_{5Uɤ1Xpw,A%M {a HCpP4V:u.>[�M :!t&614[�MAL9L;J mTñY(�+zmu֐]FK3A[$Z4]"Qa@ESxF׷u=5CcZhƇKZ4׌- ICgMAX(y LLMoZ4"tFZ{-Rٮ^v5!EŠWu砙ξ"RS5 GחVLkTݵW/{ifL΅Y]i"z^Կb`NKVq Xi�Cwi�ol䡛Q q @& &=bD>SZ�M@Gמ2/4MV !h~eAyڗpo�@̪u%vIO�!XV[h:۷4zӟ16(4V;@-q@<Kh ^W GE`I_?Ae4ԓ>`<Ґ ;4}7␵Ptd" rzu[]=:1֭Kibd?[e JCmu]̿{ZgAŽ./a0Vcf ꝒQU ,ƴŐbcս`@սYTdK4gק҅K:d�2e-�() ڹrl6a+뱷 olSf`Lti^F30NeFQI(Vq!JjDV}~iO*4ۇ Ni rw@S>N gEKo`4 Fk#h Vʴ?(96,H8 S?A!LTt/)xL^Yѵ轹g_ <HˉtVb/xr?ea$ti<dCr͙\(n5k7] }8 ߋɱԿvV&>??wB&jn} +t##0h�^7_4�I}=ExZ fj}~�ٍ^m]kM0~ֻ )&FP[@TE#1x+4d0n+hb"26QDNf :o.4?4BhZC0,^CS0UrR*PZɽM4]m Rɭf4>84+Yl듞mCf`F+IuhѮA ifhU6{?Udv_lQ'u&Bچy9Tߝ ;vhmh779ۆyZj+e'!j=lcEjV_ [ș>P[\s.ѭPKm"_Ckx0΋*!w=m!v^D,6뒭pRq$pi,v=Z^a;4~9kzjU'8SLZѵ@S 17i4"}f83o� u &8|:@cTxFi%A5sF#^mSS=a ׇPO!szCt&MAu8J;H`مʴ& AܦJc\k9M(k;{N N;)(wG36an{9Z@4jދf`(98E3{ h″Cg@I'p4_[NRDG* pvpy=JX�fi^ .L%T4Ю%T6M-XH\HKw(7 q wlXt-FVӖaVፌ{ b\%ڛ )+: sw`mt"v)ܮ F L{ :g|>6 ޶bVſ:f1h3m؄&f-4 m<캍1[h ډ-j4(Z}(Nomif aEs+S+7>@i3#hba&4]b7JDFkt&J3-hDk̊Rӆw SS'#[i znRT&V^z.pZ^W)距^ܩ g[i 6ϠfVvn@Xp\HOF `gZFW _'V/g[ v/>E^i ӝ_nO.6C_[`̊<ԚHja` 444_.^f`aGb: fj _?ŗLy=uW!b'tӓ4* ט5mx*l�|y~ ; FC"b(m xFFK賹4݉Tozx�NՕ٫<u5Uc<a,4!IyQu} NS>"@˫4j%=2g0ݎvw7ߪPd B|4MϢ&{MAsXR;6Έ۶(8JΪ"AsMaRPaxM Xߨh s M- FԻv -맶HS: l4c#];Gld'ǚLdhKmdTTnLCC0E΁#䭬l֧ A84yPoy;HC01X"ۼUny#p>j$nn$(Jvt_~ |o/.`GMh \>tM;9|Ga:H-�~J*!ϊH]UiBGB*1.yf@0U8eF GB* i8AٱZ }i>A5{5eY(rizśѥ* I3b %"_2.&MA|f)$77ӥ4N Էp4wM�~N@q屓phD`*%M7",�O8 _lx+X.OCPUeOʈϝ(F"cI;Y4ю~ cƳh�b7 :) {z>- Cz{vˢ!(U zUn*^!JMAm5zF$dVP'е` ;dVHi@e-0/Y4Uvװzy˦1i>S ɹ9>MAݝ \Qt*L_MSP}wc'wvXM3PU6 X̮O#PÃ`n Byɦw6JCqu4�+N,a}H\_k4� KgR9z`on/hbsDh D+GIJ=O3ou}a.!qȆ @M>sa4 fav艡Q){O DhVjAVyXBBAٴ9L?iuzAh;-5 _m^j^~4ʦ»(A};5<Di :Mc%+BJc^E-(1G[÷¿!41tPdق!feSaKQYSUt * X:a{1@̦G$Y44a*ۜam9D=hViÛ:l$Fsȍz*07`4+\6|'8 C6Z5h Ѯ"XrṄ"σ[R1a=3V21H=/xMK"FSN9/%FSY{P6l)x nY!xIge̊NC@A9ғX.4jF`0@1k!xuqV(2`swj^#_nC \,@1>[1Jxχ,iNC0kli^F'$ -$h^vj&PY{~.4Y~AB6P) W>tEZ4o!w%hؕD`rjJ iE_gR>4/TMoxsv0 ׮Cʑ͙OK JM缻*>ؕy9 hfaݕ }킇f`B4#.zh& oKʳ|-`\4KNeDuj"S f94+ށu* trrh&: ]Fthfz "`GFxk~5dDtl͆ĞK ;2V ooMC޳F\W)~M"0S}Ɨ6vjI. 09*|>q.`ڨg[o�pۯ�@uF cri2[/‘KǚE.MB$]:hZO[ȅՁy44 N34GWZ"P]0-Nr ̍%imI]25_1oTUIPl"EG*O%g1̣.b$@(هb|1J$M@V^6 5t i.}h&,6ܟ.R˦*#O~L6#hUi tsAu+'6mNufקFV>P[{_t#+>C'gקtݳyR@v`�qqn4.@PхjnNkim`xPb# r1i g4!y? f 2A6@fa3po!h. Rho%R-@hVMCf`ӻ̭ThBB;ʿEq&B#^UA r2B#N{~!B#FY~¨™k'oKC'PAP^b4kwY3[I @/-0�v{~qyCp[@# ! tx5'B Xtt_f z0n#jGw(�jj8 .woz[ I=]gT &V< HRY Y79 1ziVSvcpB<J`\i&)5kNC"s5Qɶ4q�F| @c0n#kƋ ˫UAa Jt8FC-H|JEOL!h4no�DТ5RS)XkoYu-dCа"4OZEWK>7Nc`DWPFo:Ș';4Q&V(,bNsf'ڥWMH^@aE+֐~dv<Nu�i^5GC wMkk~l&h^g3<}}|64 Z݄jq$|M]"|g IVC4aC4OB33C=) 8|wL* 6HiWxig0ߊN|9д>&̦Klvyvf\W'H<ɽ?4!+Y<bYv30"UKJg NPO̽uw7d9vb$uo"6q#�dפ$++8(;2O+`vNے##ۚAq My�vdPh&1pЪ@>R/b݁qeneD0IPQhu\aGFjmZU1wb`VcGFjvi+:,P##ܝiHą!x D:OcrO^x5oMk9Ns,V|}py;7 z[7yɢGcx@4Q}kfGE& A4"+ʦ>Ҥ!W+׎& ]6*2ICC ➚4rXU&i BQ8GdȆ&MA٭j.hV97Ф)Xf6jp%ICP MB^#p= ln73Z):XEcPZWSzaMA ifa[4w|. )X)ZM$!M&lvnZfk_;TVMlZ5u-A-i&_�߶ax!h"!/Oۦb O^¹ķm?/P495rM3P+طnn);,f{iB"(Yo+@#e;}ئ ? Oͭئ frw޵M0oTLmVx=~�4+TE $4 'Mˬo V(.. Vlq*G0{A״XZ6FBCТVggg&4(l4+ml4 @4rms<[@qrv>mBC/,!ϴiل& 6:/ Aiknz}Ve^ѶlƔE$zpB&>`YEZa)@H}cהF 3n@C؏$]::%˦풦4HMJ%�wWId *tLs.tһSsq : G RpiꃮhV/  '6a�&wX܌`X+jY*y 3]f8?\�MAti1F~lGh i~6ş� i3A ?4+OJV"mw4[� S/YSĹ## x ۝$Jf4DM *Bš#fQ Ba!=9@87E_H<wG'g<[fT0>4!x`.TD3v@S&9籨D'y4E6゚Cc;;xV/^hEi^d{*!gzv}d<A5 ע; 1{㣑1x=~[IDw`m,-F4_R"Od,hw},h^M7C?eɠ1Nm6ohhزmASW=`"oڅ7!0W$PU~ȣj#ĉ6bODLT0V?42 ֿݦ[WaVafm!_x搼E‡F) z;2r +تOk;2R gD!p,l؉~%;M9�s%c'FjZ7 Bt=iff7'nAhQYloH]#IΊAWյ͕ �[rNRKCʝāˊyI (3Dv ]skP,vs'M@Po0]fw?im,=lIoC+ IԖg0W`К-߆iәR%xEg8eIo<w2QI,LjZ3S.\Ē`Mb\V1.C$@A|JPΒf6ᄤ=lŭAkBgv}ۚ &Z i  ]Em�R{Lפz1( S9_4bp(P_4+JqafY!_4+O!A,!O3P13^5 @3@+F2CBa O}e]<B4FT1LZ۳DZ[|NXӤ,GN}[Y^6MtBOff]s+ !4_O7* \G4mi.i>OXN'8HhZey=Vg 5P0v(h%E!X4gR.4dgsWe s%Aqv:Z9pٔzf E U~h! @#nXIy ]fP >yW MA׵ :Zs1H6ĩSJcб7]b 附+MA A۽^x Hi Y/:S\i Bȣ_H@cгXM~ִ5ŕ t{v{|.JS6 RazŁ_i|�myAYWҚ@DP5)@Lfch}M,:gק ya7qvg nghh~]3Í <]\$\Kb'Z+!F੧y.+d hN2ի=@OFW4G_ (hkD BOUפ |Iדm<hO톖so4iTSVBj<(NSVLV.R:SIawH9X}w"NsBUY?4Nca;v6;wi�^>4u6 Ŝ൝vĻ*Y/b MA57�E٨ -ƙź{(AS@u Px}̮OCM,*ڂp|  㧦Kl > OӥZ4fjmO<h,Ɩ!w+z LNWjz LhNLv/oa6vhKW[ L .@L(du(J?-0n�Sg ˷3V!hq ;*rle.ސW]?CȴE9=6TqvTiF;DbsOׇis.^ɏ0dvo͌ |뗟Mj"�34pGbP<a:ΎSg?8^MvaR޿=?fEjW7: e:df ;,rHR3[BU. F$+ Ps sfbP1�1>4!U{\9kdg藆`qnNSX^7,S�b3կ)>Ԇu $ LNs!k$Ow(0=M n䠵6 ̬' -Qb1&MAY%Z4+d�AA33s*F:x 4&!؎Xڵyn'D"Y@:1·uzb8MAL.<]K|0MA4Ns0Ն o rh &*x,hkYi"S1X4+a^U>@}Mb3-ƢbOη̮O#PYM�u7"0ʎ.iM*:|l4+uV0-fB˴dgQ\M#PwZ?;TƦ!8C|:|Ŧ!XAHc4Q[l&&V.ӔiLDb4LDnX/ ȩ$lg4;4!&K l2ÐwFs4qV: !4!uسnhTV/i ؎Э!4~MEm+tݴ9<bbZ 1Jy[>!4,^5512xBi zj 2"x(MA?Oo*"g- UtBiMPYmCizZ&v]a) XmT|64�5Őz� 7}^i4ꖵQ |2J/`؜8+p 64ՠ4P.%Sw0qЩ0HTHkϨ:+a4j?5+Gl4>$(FC/y 4~&a4FWᱚtcS* ppXmgB|jNciCji&:y>bM=Bjo?)1x\~ѡNcM9bj<Nc *Nq~=T3 )xf(EQ9vrC Cgr )1x2v_.CAsnzek}AsiSfAcbAT>RiL=-6NW(2LE)~qH:1Xh "++_ӡ+#|SV- HEp[]b0h &λQuOME̊s`f84Yz+%+ġ1ѫʚ\9~qhVщ\He]DЫM0燀W`b8ly F]5ՇgH-` m�wc#�GF` HnhLVAZ'8ع|f>ifc#u}twݪ8ul|FΎ$J] zE[΍$m;91E6VmH-f{<R_ϟOS#u 9Gpo�(!bKCpcJ~9.-řt+URshĥ!X?P^\8rAFJ賀aJ$ ]6!dbxF`E[M d6v㳑4߀d'$W,� rLxlICr݌oF`Be ,!,i }w$jS-`n;|+ʼK%i JfjRN'TT,KFKUΌYu,8#kt4K= ^�)Yttcɳh *`CUh *TC[(pgק!9Cab$C2|i 5 fTh63[e(p6MA!4CP!Vf )Q4Y|v} w4vsv}p3SVhE~i l'McРӨ˂VlSg#g 4kT%)"\8pB4Ϧ]wz9B# T($Pۙh�p]i˽#4-)5ܯɽNa|T6~o�@:VU#4k]MU(t$ Min{)+ 5 A)G&vlV&ձ7[t; X;l4^fp+׾8gdccyWOW:d>A!=kD"<;>@T .977t`=?5A|`t!;ݱQv#k\( dW#ﱾQMdZpx ` e0Cۿc44ҨT^>.1 /σa1Z@dAٱ1IXAh V"1li\,%@cxh !u [%`}6O td* 1Xn;?S|B m!C| i J5qv-3aS4DS+i ޥ]J 4/uSmi ^g :ד9NcڵC"_0#u״DB4/ M(8~*4+ޚ Pi~Qf~ht Atp*Pq(4sY>`m4al xAE34al׸|MiOy:4nM&v*5n>A#0Vs4#8կxhfX'WY_=xh&\$heekSshV| I7xhfb}rlYUכM_m(/|ȱ,�ſ& $1:95?{l\(Aa zހN$-94〸W"d_>>[@ V\5ݧuarj bn:DРYqarj 8޵H(ey: }y w"^Uk�rf H&xa4++I8>}j诊l4x+.t<ssi|CD7vy&|iBI`f_w&M@򝨙^ ArX�D Ӛ>Mޝ^_c˵4]]IuڶB6$mzISP~p,S HT(0i!(朤'pkf$P_?k'~{/a4ļ9>Tkh|<6|ٖ5 +1L5e'6L=&@O j+2 'A_:/HwC'x'!EPa VƠJt aE9m{A7w~w9S]ϻh 7ƿA1 Y0bi AbSЙKMCP 3M-.Ҁ$^gwԌwۻF l>u?:|.wF:w�4L7Qျƞ Mt `{ h`/ X[nY(DM=5>&E{L/d0k<c+4 Mj@=DWsjLW @_9i- @G4Ŭڃ2W!@hDh"mB*s\I 0-lb AG'xsr$QaJCt*bxnsvyWǢ37tﵰhfReτ 4Q0|P F~* rЁUJ0eJ#0? >s 4[McM@HwQ]E ˹ʁV5k4+j2qh X4 w#m:G\fh =ѻF3.Q hVbv vm `ӖSq*f4uz±1-ܘFA \Tx%S>{i-i`l{f xl+Fd!FɑRN#g>LnXrhuh{~AgـuYp8/~`M[Oוuh)c>L={:ݸxA#9i5QNB vׯ?JE0MQJ+7 JJ&(x,  Zt̝2ow`m Z3]$Ac|*m�is%~6e7 ,NS)tS2L�1qKEHf172"~9$fvxMzͻ)ߜJ3"w?cݮrj;?g(;#R ;X-%:N/@VǸdvFkfJ(*N Ň;#R }gQ0&N4FAG0 M=? ;#%ͱ΄M=&M !+:H-0xI(c=`1͌OE. m1؉#/-0[3 <KSpk݂ԹХ![#/[01:Ի ]+إ!p Y?aX t;'$/pV&@46M0ڽ-n{SU@T<DE0iJEbfo␤!;Nu,f|fM鑍ھ  ,�ZG>)ah973^AZV�wh6R=oT[T>)]n c9(k Iex|vyѦ?%Bi B"> c@SP5-YOd )Xyj<x\4U DyW#MJi\4bFR1T. Ai�̩pMUrDݷ_ \nzdw. P<>@E\kҪ=xl ZS4 ¹iN *BhL�@yi#NDcO3Ф~?Wld<7@4c(!X~'[ C4-zVaA(f zpmtug?O!hW_4 ռ ShVvSH '(4K)Xyj\=�#^45@H0j7 v t\cz)41L!X7xQ* ̷5cہ3#q!$FOMl6'crhT{(JC0CoڔW]41Pi/aM0`mj](z`>D`vv NPeĔ`x36& HV&ZG 0q2s5!lO h4L;Wc4QwvRڂ d4t?FR�sORio@M 06Z3~4Qo +Dw`*!F#V̿.^ɘy%hoUdDੌ98YR9٩<W̳+V}NC\S- 0<p۸4ﲮ;& J+iz+<;>3 ˆ5Mxg6)+ x2y͵i^e|MA4oR^ a4/TL s|أA#B; _ID8h {$[w 2kˠX|'b&`3|4Qh°P:k]F`wZ;2h&LZBw:VD hV켵*chTuA#0aݡЂ{g f7*$!Xfw,X Dgק!?CjMETD'S?6݅i!FEO+']C*9^0^xkSk';+"ODž k0V<dgEj2D0v_4Y>̛q%4z>ŀ+ܤrHµ2'ΊwHEz04e�;*Rׯ9"HFbϺ7ZKCpc2}G6/ tp%I*)XanbJ+/FbDm 2'!yOcxh VQpoǢ6ԳKcpwB 1=Mp[mA@쏤l41MVmx,`Ita1&!4!!&1VRˤA]M^\.46ۦ._B #A(۠7Pt_i,KRV㭒?v!yИjꋮ7_֢(t*|IF֢(fnhVu"BE#Pٍ&G  ]wp`l@3P6V)px7>% UWl@#>v`Ȟǩ0Sh *LxEcPQxf RY!JlT>s2#kTș6m8 >ri*FB/"جM3V !#k^B2TY&�l5M �{SGY]F`幝x4nCb~u}ȴi?ݬ[4i\4-&VO7&dPZ�@6B(u#31 V; 4_N\Sr  Aǰ!Yҋ;HCv:P .Le MAt":~i e!!<'xFBs`l!ň;Hs#6C �ѴE+ZEbJs6N#*Kik9 87Pi B4ӕ/�Va<W*I-``. Ei^e1ݼH}k&_ק)j\8bliئ$Ki.[6 ʞĐ>48 z°fkk*It:isC5u^0\""VaYF#G2 n`Z<cva@%jyĎF#م#+Y@<L)PFddM#;EeM4a_#&A=SQ3ȶT6씖4�+Ҕ#ИssYN𾓗6: cgF�x0^DM 0bT7wf{D*X0/9UP4M*붏 ,e9m=PR|^]-N z1v xez>ԙ2z.蜇9 7ws&[ $S3R hV@PPڤ/<fyX,]JF7>5M =^Ky Р .Gve@tvQRz_c·Ռ^mdo.i-PkH( N+zv*h`Ej)GMmR9s{ŎSkqT~y"fYġ ;.o"x$6ҫ`Tc{"[s:ܖŎm"u>Uu[M}3b. )fp+VK3/1!dG!U~>|nõEi@Spt6baEdtvytsÑHo=TGi#*hH->;?Hb9hྲcmC!YICx" U49LG N;30\8M nPPxʌISPj$1IUiA*i]#N4ŴuA!(ݩTm~hhJhw,T@XJCt_f3*S ETHS3 f6-GE_3q Vl)X] IլզBM@p8Ԟ⻖qo ڡYz�hiy}_l4խsđZ]fFɛL/R)_kge^w&"ijZלë4/O"{Vi0Qg{4ݩcZgZ؛Թ4k` 2cRקhn](Ɏh.KB�[|jq 怦7l!ho4dƴib"E{h bȕ겅3`xI~tXBc&UVGMlLV(m1H'ށ>78;lBc&i@q^m߀zS?|0Ơg٭4c58"$`e@Kyv}hvmOC07T4C-_{% Y EܦRv\pҰUz+Mt&Tٽ@c0-"Wөm4㶚/5 f4Q9>4Yލ+9T+J@C]E M#'OC@7d, ~˲jRbXW3z\lnX9Wk[>jAF3Dt(:+F#o vjGLK<GiJ10TBo�<? L{Hv&{E�Y=9M@(GtqD&4 ChUwhVx% l( C+]됚]ME 3BZmT u�h�b41AJg-;hVqx*#; l, +Ng);h&Z6 :^jXFkBE`jL9]24ax46?Z s^͕{ L?Y\Fv 8ms #TBkiӝfuơ L/�?\my h]j W "V/i〄# ;,b8�T0,r 'v\ "u"l&񺼤ߧt~߾NmwA}XdEj5KZ\z8s^0>{E/�j3>{uM_MUU%fODHgʗKSp3kjJEX|w?Aq0zi >.A)3Cw*/MAI!+1_6cQq:̲K3ǶAȽ^F`aK K&QO keQq(4dX^PlO{& q+^2I3iu=#@ a'[A2fgxhfUi (he| @CP<\q~Ql42΁MKhJ=^?^}tdV_W) Zi N5j&Ko@SPkCJ0EcPqx?59,ƠoӞQAZ*S;@cNB2h !09t; 8ȶWUP  dT 7(>;YMF6zvow̎4mz\R< Ff 9n̮"rکrɦ)h3CКQ\B6MAӵv ֝>�w;1/#?5;,-wv bxY6MAd|/,/BSnj׿%4-JTIHfi |ϮOCFV  ^k4]S[5<!٦S8*Lu"4ag<D�w z8¡XAbܨ)BCa5h*gD߹BLc|vy 蕋u="pLhu[ק Xqn77 iqy:n5QG%^J`P`H{ױ">.JϢ�ZmAT\ife.ѰނŘ(ͿJ4[ dhXRx0 H cqU\F`rCAbh>[&3@Lu,d*bb4d- m;ehgWyZNFStՠ_-<+`H9-L?| *O3a!xt!4uG p' hqi4iƜn74o^6}]+ a8LƝ`aB EAy,4 SJh ى ex q9O=XtZO|=г9 vj=V!K9z3'"[Â`LH4#;޾w.9 N۱ab1f` Ld%hz$@̆G!M?'3 m}v MDSX Z{CS y51XV-=s 94]Al4brvf)~hMքїn "7N!#Pz.('Yyob^umgcU2ZR^@EM-}Av`YȅeAa\zGVUV23Tv`puf|90at}v^.&m7*"u8?/iӠ"/a2pi5;)5stgק1!]ۅB~wiNti ndG670Х)XЊF]Ibإ)ک#j2oL%'}Hʥ)+lvzk.Icr(THJH’4[sJE&CK4:J8O$es[F nΆ痹 Dd~@�@p6Cp;zXJOf^ m|>4+|o-v,*H9O%i {]_h[*Uy{dt JmljW[ AW},i`e{X*+Bh jCu34:zbu\M@uU P3=ōOn O X.&ϗ&`y]1anpI XAȾ  h24.iGg(&i C!j{}f&4bFZ_ r!:Eu4&k .ƠVf$0=9~iB&I>1Ơi.1A,kt}1N5`ahVU1֮[x`r (mwB9LTh :ûGq) OS5ZI[q�4$Ƒ tk%e ~Cj�{�oC **4+Zs�DrX+[acg @]F٬"fӳYUIW?D& t{wcc"B4kwнtO0Wt �J0no& q_H&`(ܦ֪41RtUXǤ^u *̩ (6 rKǪΪ4+ut9p rfw o")UFp uq#ZCG�2fg+G Pvg 4*B]_"RÚ(iv6 B51XisitWPfwJzս'3߇ۘN;Kc;h  P1N>3SRcQNG34/FC, Z GhJ0sJ-`]~yST mۧb4 uܮT1B]]`Vwa`MK&pW&!1C�ֻc@G�x-V^Oa_@u*ZQq?ltW`jf \SPb0oo$*Vo $f_zs,dlXqh4�+oAOi��X]h7 ui�>7FP��N7)8 @_boo\YO2y!i%:_"TaF~ɗPFjz3ec7>|4: :W~H-̮/i :f')%_ e>ɗrlB/�Z717ڳ+}yV8wvJ I`\:ĭ4b :�41x+PJW1qC(DΫGήq @!DZoo[9hE" sgv=yK>XnlTq0 *՛:Ng'ASf;pa !G�Yh*cQ 2ݘ z"4t!QaHC4q\g>-AS0#X^8,_1x:l>bfHDٌ #Lcνf%i 9IS]͉$]ƁH`9s:>4$R&᪱NJ4BЕl &MfNRtFQzx24Otibhȸ1 i~) Ak+( b:f^MT8]F ģ:;( "ě-fqz1 ]4]w(4Zmxhb4_ئ�@uq:$MWF jp {q F@ȴ jxiu]4a;["]ˈdn_/^ڡ8M3]_DWULtVZ*44J!%U41t[ O#PwW�K�@Kބ̞"`ԧ Ivߡ?� OnVVP2TȘ6:P;!)Cvc1CC*E ":{ A]!hxefZO#CStVÕbg|2ƠE; ϮOSf/OIN?c!=4 0ݜ@^;!+Xz*41+Ǩ@r9e6M t,4cpݦ"*4:M X+ g'A;eBC"vZtbezܽ{|2BSk.P !4 4-"2+|Js<Y@%Дi*[oz տ+�(yu5!wqx4Js^6E"%a1?W9xY,r}`z>VU9G1)6*{G%8FJcBʛXp.34o:]h~ 6N΢112:R1[;U#Fc0PN?vTǃj4CZ- �ջW84ڟ{$~e6Fc0L;{[Wp0fN@TS%U5pLc0Fj4kYх"uo0NUHSS5uYlhh8,rT:MđBӭ ZWg;\% iuE}{.NCEmvTdNNC01ӌ k&_bήOC0o'VgW 1mjBQ<R& �iօ m}�_MZY 8.Rօٙչ:VL וP-ܞԶ3#�u.F*ޚc9eFjw*;@ԛ.ۃ=7e4vabyH]?S1ԌS#�|GVϹ�;8𵞭°O hValC_.2<M :eߕ-WdܮASfx6ԂK{Ơ!!fڈw#:olt.oIKBٸ"4wŻ hVྵfnMtd)4! B o�MA#YWɊU5i6cCR4V4L8aW8tl$ AN;ġd\Aŝ%CI3r͂o%p]F *iu4q߹&@LfN̗8_�hTDnW-4hh;%!g9$�@trPπ+@#VC`V%'=mǦ sah &'&8SMgק (3m ]+1418?{_l ^j�\4q&M׏{>]-b++4JήOi7/u hA(9ày{c[4-еGd6?Vo)4͉L@P M) x|{v}*mphy[iޟm*�A!+ڦvΐ'iL iV?!:ڵMP?+ X)SJi�饓ڇ*V!4X~JC@NϽD�A;4 ]&ao{5;4MZ%a(yӦ5e3?ewCS 9dvhnx;4&\*ɽh ZDc7s-A;4gɧ:SLh :ܣcnsMh W D< c R&iD=цНMhzb 2\8 6nXxp߄Ci@hU$TX]M}MhyhX>_~ Dh9�Q?y4�\]Ў`a4 Sg1B{Ǹ4�VípR e8im@cw:20ZW Ji7 �56|4{4od7 Di Κ lUh[[ՋbP*S]3uS'YL\3@r0OTvZ3Ѷ +1!zJnjF`ܺM2(I?�h<Ԕ@w#"'ؠ*X'@#07~v֭PÜF D W+6 Hh9֜F`*x^לF`]=R m4NC_ߟf`j{ByesEm2uۢiD=~iZIj[{Z;%/i4t\706vJwW?!i__4 cDD<1vHPDPs-`Oh{>\-@߄e=5vF̏;$R ވV&\p݅q(Έ+ތnJ'Rk6Έs];)O^:%݁)Lc1!ҜJUq* +4t32+H!A#pk{a?3)41، gm#_#" hndQtS١p�߰)F[  Ov\w1lDCAK̩şM@^4"ֆT5"4La] V$4xc(wB_,i 1:cߕU}z(4~ C&=1hJhh:ܤx%y`i5/� Sf4A.$ISnM9&i \)ԓ,~qh6ž~JA_4!f͡ }vCL4圶1epao/qEE{Jh ~7oBn|#Rb:*싦:x/r;B" U{(1O ()].f}4.X _i*20ӛhT5c* X Z{Ԡo WfP2MPM~6ZowhPM#|3|#ۆ !![C¾iB7z;\S>|iZ%z5yU:6C# `*M�+ήO3HHPl!Q~h0ʒ+F ̜ _H@#-E`cǵ12 @|ig2Zxڴ_X^ ͧYȡnR{624C~vT*.;@#;R,@*p%t<(jt8vB|9.4TyB;`w:BCM5ŅyeLې-EaZQPfW:<;p!?. IbZo$BCS 4/dqe+<)N&64/ZP` C 7kDӠZiנ>WYi^8SN%+\iʶzwfA42d3SCęj]3IO?[cv}]Y}z !J30K1{7l۟Rou!a Gu3�bHmB<3J >n4\\.#q0X F#v&=hKcuɣvڟF0}72n)D#|1w9vFHsb2^*4dt! vH`8GOML7kk kloNq %IEw$7+A-wuPH72i ֟,$Yo8 rhv -I,\S OT:99p0n&MǝGH³kLPHV0(7tfHBSyfͧn>Ύ.i\0J9;%RB qpC[Mׯ09¦I% O)Z@ڌTrM%u~.Nm~1-|y$Ǝ#MoH.j;nM`DY7Dj=p!|Օ#*+==h&v^7+M NG!o{ASp~, "M H`qv}n?sYS_CV!ACpW(KloiM:hۚI Iڥ5*47:0ws.{0#3[=v6&a7cqOktϫKI3S*4vh3%@`uB341aGAQ+yfޝR)x b*Ho$0))4It oe$6%!guh >\Dxhz A9WDXᎻh smP7~3ӹdqYY.fV(\7!XFWso!C@l4RͪdmEa]4%LMW.~4$Z�۫ ;T!hYA1<FB-ipάyŻiit@m!!6ɻi4.djS i* ΧUpFf"#e\fBS!wDXg/\^q4a]A 4 鎓bhn84 Ec{hl!F; 5{h @^+ NkCCX)l*2YS[{h NͼbNg(2P @!^cqD(zh "ofΒTUxd_-,$q A+_ӡ+4snT\^jC@Bst5gSZpOb1[Ƨv_-G}6 F5))Xpp6+41MQ"Yi0&4+Gik4/L^ٳ>aUr"j8{]2GWi˦*FA~ͲA xaC̲vݫ8[�׻46%ww&űD3:,Vr~4 pQ]ļ"4�1@vA@}aJ06D˛* i5׼G0L6\!ҵS<Ů }lšVA=h(bwF`X#[!UUF0N٭陀4ȸ܊Mkӹk4zMJEʰ$g4#w`TMA%2h&LS=ˋAPF30Y|ʎ.4J]1ЩumtQS4SOƿ|~pp ^[0ςf`Y{VZ:%"N#2v`@#0rM{J}y8ӑ43O w~< &ErnM)&nwhX*X dEa\7j)8 M|.9.@T%U΢�r^ @Ӕb`9^#hKD2n%>@`W:ֆe">Ls SK΋`pu ۿܫղorSirvyJ)4AC-O}n+PbJZ7h ?v*Zcdo'*ޠ)GME X;gHܨ w!(hCkf,rf`8]{}*=16hVݽ�P-ȣnCf 6٠!x@ 0) ZPO7{7w|\& Ak~^&?%#vf1]ݩ̆s}8>�^z3rQ{<M8T$ @LC 4!M 1QDSs4ϪǞV1~tذMׅ>EPN/Т~a@ʴÜL2EP5ňkd�!&&@ʴ ,bvo� @ںg"h W_ĢlKoәQ /Ţ!8zn$z=C \[-OZF,6M[v/-ƠuՐR Nvcqg`vSczhsnv4y]+ĦAVc/śĦ98oBBŦ1(:5qp1X/`dƟĦ95մH׏ 9hЫkF*$I)` }r c:)3ð IVF%j % @sCMI&P5Dvъs4ni Z4@R5Y}Ê@޵ʞ;l4}y'`C mš9\^h fo&˂t<5g3.jU%Chj._&fCh:!1I t!** +!4_ٌ(@@j@@e0|4AzDy̽g( ՙNPq(9} Z@#J܍~mp4Qt;Pj'pˬT͂(Li�{[]^%F84A�t47F6.[dh(J3^M~]`9= tS!a4㙷4Ql0ʇ :7g#ӱ3 8wL% @#0C`Yڥb~@h :9Io@0˴-r\PhD;S}4a N*׷#p)|*qgkDu8NCb Df`}_m5DO~N30+<fhp NzMT=%F \YX1I 1; B.؉ZT�y#uvH]M*v3ف4(@l7av`Pf^#`5>,)G&둘]_{RxV&辿Ġc1[ NR6} _o&vqi"n:DsG@\NaT#^cD:4+ _MTaxW47>F b2= `KEڈ"^4j|=Y1f4ѐtbd'`eCmIւ*p-%/q+R; G#h s*"uo8fO HӕdhŘNI돳<G"i5VG 5u#i a;x-RI3H8�8=mHߍGֿ:td(F .rw R<ulI3.4h G#iVuH]U&4+L1\J)(vz7ҟNsP\ 0svybk5 VESo 7{괗VM=&] @TX#f ֩g.t#?ԟF J#OHdhF L_tXf'hP0tof` TY f4UqHn?Mi4M]H8( )OѷZTv_h:[�A$ͅrs ^31OVP27@WAģ@ѴM87@ku4am|6 GA@�3_�@kfq.@qa+ @v]W84Erhܡ)OÑPw&㾞5>M?h3}鈮OjUeTǃyhyd* :WWLT3 4 *Gm{]5Z*l>BBnr/s??wf@L=:\�M@LfShzvf8 ,Z)4gApI)xωA] MJqꂐW8ZP39 I$P<3M)'bԡL*M & z kUcfJC)ʁo}cWTR| FuC* :CT 5K+ !7eZ|d<F`,:3JD/�Mح,ckJ ^%i4 o{S@ItUy@u)X3F`@ɴ Y|;^�2mB*xjhJD-ݜ4[�iӢK14OkNGh5 CMh_D=pxhqFBp֥F30O N[} ug Fp#tk4t鷘-`c5޿N1lѕ*Hbhf/fʻۤL6Hi V=o Ö9UIvTVݰP+x ē ݹ͡HK4FݱrF"];*%C1vX ~j\(iffd4Qqo2ai;-`@6M0;-r\ܷى`��fS5gꋑe38?}4k?Pk2kq^h6Gr,ph3 U3S!G3hnvw@uo4 zJH$hNQO v|ųyUp=i_R>KNv7v3h>ØwdjN"5ѹ_sZ%Z]Oe&SfsGf{P<hkQ_N�4RP&M ^hjEa.4?I3C0B5Τ!:Rw4,p65ֵϤLoZtU$>-%M@<tV{d >B0vC/@X+x"61Yf N^&Q䩿^l4ż+G * µ�zk ~:\�MAxozdd- :C:ur()[L5Na6k?{}}Э$%DLrx}uv<#]`֍f/)Xԫ{ m M{ELJȴ(kTOu* z 3mZh\j24s^_U Y**k�Tt7Š,MedmW!fȿMV/e[AJ֦i& ?r�R6?dMju gԠ&3Ș6K;mДuhjJH%?rh�dLAP ZHf h1mƥ<WY=1Hf�q?gۅC֡ hy[ʿ 2ԍuhVYIaUteo{ :4ܟO3,Kh D#xC-RW:?\IYBsMw%+KhG'"JIr&4Ȥ}d Bh}+ѫzM]STkwneY5G&ۣ_! E__T PRn6Rzu�y-!KiNw'Cyn<%Wput*[X _Yp�GЅ8]sz8h[.\ ThE[]jV^Z++@s0lϛ13¯hurKcԿf_xW+u1ɀgvYI`h f qvE>h4+yp7.{_mP1e4ZU](Ek;FC00D[ SP;$d@t4ϻOFF`>FPODgʲ&`<AP}wBb:,i[S0RЦJ 8 3TJIY1Ӛ ̻^mKO+F`B'i4LScYN#"I ꣳ j;P/N0vdbPch5}td5skFq$C87sطұ3wYH]vMl8V 8Ћ a=N0yr v\>j f}ޤĎr:o ~`|>|iBLT8| 2.] u]bc�.܅we^ egnaZ"~4ǹPܺwf=(hW=k%>[i YA3p/B s."$hkhqsnNNeMAtCy}1>M0 naYACRj-%+h `{*F V ?ٯ/aE*hǭX=04aA>l6}Ic<c}afa&b\kn1xi ^H9 OSoX)ؘ)n|]ꖚ}Icfھfק)(> ^γm iJQP=; E`E6\'|KEf E3F7G@dLe/U,^~ͮOP ?3/{�{ړY& @FFFO4$Z=BL[K%A)ap??Avڦ @=?d/*OTUXCk{ RMCP] ,7 A(Ʀ =dބi jϦG@tO9Xi {+ٛfa{4fpDÛ`mt/)h*ץ)(CS ~:\841,?OK>w08M⺎u}b+dZ ؇ l>9`ؤAC7j \946А}h :~g5]ڇ`]j;@s+i"z>4ar[M_:JA['~iVM7{x<`YVfDzƠ_( $6"1轚_BDƚjsBoIa6"4a݉&8Z~͹XOSYת;_߅xk&8DiL;Sgf`L`Auڨ_E](2%[ik4v?[�?@YÄ|c@|VQvSƇr[i�ƶQ Ϟ`,qQg^գH Z�F@ ^K{rhVWSѿ$t* g\g�0h\yqm41ވB:[rbp);`6<2BdE9mh "jf޸ z 6UAc0+oT-!}?\S #-i z&u(ai Vs"tVB.l)Xd=no)kEFZa֤ *w7"}4vޕ"*r+I`޸<i=֏nBp{ kA/6;vV0i�|ݱȮ¡=iZnT[44^+N"�@<�]B +PE%nz2N(DS33xǂpdEtcRXW883H- o`+`gƲ/ A 4=00ٗ`]Edal[uk�MA4"{GJK14 KqTj- h nLE7"_󃹵qM>h V;D j:D66Om!7C_޿(z^h4+/IxlrAls3}V}}0hhŇ j4A?) ]_ 1Xqf>;i LKHK-`6m_H$Э?> AvʹAQ2[DB4OaA.t%Ut'MGD}{ ޟ]ygMITmv}5MA"`<KmZ D:X?b' AԜ;Z~ &!(_9`(Y|Q}98 T3^M(hUpNc�љobv,r B.cqݳh J(`,RuxMBM#هIY4 Mͤ^!Y4 7܎FhB,ulzg Tt#5 *+yqlyNUqsj)v6A#e}i 6@";MMcPa[9 ͭ\{/& <`%?M=!M{ 3 mЮ]@yMcNB(̂|@s0%S=Ccoׯ{ q5NCcMqS(! @"hQ{x}8j:&/^RtuJj3}xMsh B+fuž$`vtA#82>=Ơ[d'4>4i^y;8ƠX6=SGhVFFK O*D_J30gFg)w-wʷA%0}SϮOSѓڔ%3mL!NL.*-w.:5Uw]F=셙2F!3CDI]H8XPMk{ZߗThk n _ii~lڨq rHpp(?X|t ō5hy}&gn| FJeÒLDuj<x`@S+Giٻ-Dr_c}Y9>:J#0 kxajw@hwf�O?^ oq6b4j=|9h Faد/M,vm�99³̺޵?Bk㿍-�  9hSщNd4ǚDgק1MZ̷N3em1|@i`Rbsvy MSqYVg!N#0QM,4T?/Hs#8·DM;7%9PO vnزES@t/|ع/qo4<6z`l'tع ؃`b!qةte.xXDS#T??gïC^C^՚}�zN_ AXXƿׯ77aFP=N >9,5]XQMj=}u^)€[�d "FU8[6;<f`cg 14Ibu<,M?ء4Qqx}EAbٸa<- ?(NnEaL[OTkP)�c=u <G_7l' ~EoԽ:7??I3915hV؅b۷>=xtBc" i4-_+שи9$i4[M9dr }O8S+N FVu oS4q)M ϐb" bt )atnfVvE?3ˢ(7 evyho6DgbbɄ,R{L#iύ [sd�|;Me_fV!]e k\ EO7gr,HAW]EbUei 2؎+柊n&)2ADa%@?,:rljٞ֏T$\7i&&z7'kiܩ]77,|j! eE+ȦWiEy4� ҴD6l4fc44p(@#Z[o=$�@iS7!4n^f"a}(FŮRz}ζCS̟[8, | @Sw] rh Z^P94. y@l4pKnfTJg `/�@?)@S)=94!W)"E9KLn�8ROy.B{9_\`8<Qu_([uu?svyFCUNjst!A�Lf"4�0{8@#sv(=Mą&=�Q^,4alY$܏PQ&`ř/CDi^nHɑ ;C{Q}{', >Ŕ Sbkm_1x÷6ׇxj<41 +n�@Q~&w\x֢4c߶;?KMlJS0jNC*�9_cQ!rArMB]@lMW6+)L Fh DTz1Tq[w53Hk+z%Q%1 c du3g1vxéS1O1?sdbZ6ydjaoA)v!M4}8L&妽A4_ũ GΆif[MJ: ι1qYwSl4']Is@B+[~w}T9Hwl`C =aDu_]~eij��sB\IS9OW2osIGe}[ȝ ;)R ( yE8H]׍鬖"uhD!&H-D6%<qqMw|zL|Ӽd ^D'.gri :*8aV6nriM:z* +I kACMэ7c(',ACpcixE ZI7w  w1yYYd<hD+QK<;;lWb4$dP|?~fs4t>z;gj?KjK<O?9AtVCAHgRz&1xji~q84(MI^HȼM*i &K' <ΐ)hfSrR RQ7ZeK`kSMH^~xMhhGgTtT869ݝj⁹.kw 3]4mk,Ry]4%9_h !POkz@!`^?Hœچ1՜T>e*eS"bhMb/BquZ_s8p_g !5U [4!ܠK .Fk9PG3kS9S4<Y zffn(5Uڈ@ti }<%McާS V1MS*)k,a4aȈot MڥGiB%3wNFaB@Zw|N@D5!+tEخ$u`Z` =4baMI@L*b�tH6o_Y~:OQ1@EӒ"s+/:?Mlۮ͡Rqv:YL%fg*B3좝~wMۄThhH$RA~SKנ' 41E˜ 7)5Uw 4zI%*4! 8të*4/<R3j*4/fznSY &4oA5w 4o탫i@H9LA)xiJ ש*MA3t*[̏ 48mXu$Ti4w�AEUjhJs0Nc"᜻ t O.*M€iS)+U^at2QA.͞epZ0pj2Zlhbl|%DòtHsF�*"]axhB飱67 D饫 m1G,yUh &D`�bG6 `jsكMhb0E?3Nc0!jڨ8'7du!)̵!ܾ4!pu8E"3 B PHߜ[i_%b d^�4ɕ{\GH-�'O0b8=n(;;R @cEs8%VO�x 6T=);;R 0m" 4P@ّZ@杺/ΧّSLhGï'D#�X6G49+ƛU/>3ziѭ %`˼4+#ߝIVbI|4Ow#>Г@S]YZL,8 Cu+ASpxoP,+1݀!P]Qib6 &x�A#pCqDaU0-Y4O]5h6;Qo�FǞ4O{҄44UV\469IvSSѤ)xom=0O8]MR6fr#gק1xҺH Z55i V=g$AٶSn4aۜT�q<\�A15آ1JZײ[a8/!h &ڂ !꒶h {w@]?2EcPnvm4&gs<`;^P0ڢ1(PkLW5|h *S"h M0T~U-z-bpC~:h?-byq)Ehfw&WEC- x٭``::c9ȃH:oB㴙 vt}fO`T8{ʮKCWdv:gF`.]ӲXlnO7~s D3u'\p6@;m1۽@# qy�b�ء8c4rH3B{*|pޱgMBiK]r8=f`QoSs[;4u6^MAi3Avöe;4]w.|Y;4kڭ Ԭ;0nCS!'a ݨ0> Ais6e/?Nѭikaԇ!p tIt<B3СpleMh :J)q 锾+ d~ AJx_Uʄ=r.O3.&JJNO&Lh%0sOLh ^P?dfJCB4>UPu6ׁAjmhJ3FtZ㳵J4!5dZ=gLi Xp6~iƮ?^>5jJ30N:RXe8?-``L<qd5~MibTƇ,pMiV|rŌ`b@l7(h~E  \Jƌf`+FI Ta.lF#lSM5kq g5'DFj<0 >]Ӊ 3 [QxLEhc q!lFC]*OװڈV4>0oW $`傻94G"tvEu@ 5LϮ/uSVB26Ȏ ͹�B�uM$u*A|Ah,dH`*mT BxlH@.8Vʭs%gH]]5ʮЂ؁R;*T؁zkۦXO}}C]ScF?O[9P񼂱#\t¦3O~�aхHvcʚ {u(T6L'@3p56f4V bv89^= ھ~bWƆ;vinx)V b UM# @AC3t'TjR6d0hnS}PhLY\i8֞@�ҠU& cu;Z<(VqGN!xd;6xrq07F 8$¡0V4dSv3cJqv<' A6n7P!c9%l'poA�liA+:(~ՒtX!E`zu:iISPvbӡEKx A_|O#zȻBp" .4Sj'VgNkI#ƻq/Po^ 4>M@TηK@T;j/ hB|D]#a+Ospv0F"i1(D59=h *)t>]AV3\޿ /i n / eF._%4Qo! @i� ySX7@y)p"ĝjhEAZډ@Abv}ȷQJ&$|| J OjX[|!yQ;H3TS ḄLe|4oW.ɍݙos`-`ߊ$#+ob @WCsOF"?ŲOUD ,v7axz7`3CcnY5pA/ vB¹lx[?4nOSR^~h AҕE8_U܅ b]%a^0F`Ʉ þ*|'wi[EfWs*mBS~~p56p9xlB OF^3sԠ M8 2Ts)xOʺdhy1t1?oyWޮ4+^M\d"\:MM" (*ƒ;+I( A -hf%"'+4+m_xM~ L׎<<MYks} JHḫO0kCU+0[MA'|x&J0~6.LM֥vʟr4OA%,OK�6W$n4�9h4AFIE;.GcFv^ޜLAKΟs57 Ar4+kDkD@C@iM*~vQOF30 ͹@ةMcEWw3 u0>|&{`l4}iN ^׃a* )[gEjraWHkv}'@!^}/="4krvZ_vw28 $$ =ʳ#�tC7sXX΋!(?g?u `E>*ͼ/Vw*󱴻_f78c1O=>PEυ;a/ ss,tin0i8fVB";MZf.6*bwU$t%O<hVsa!ۨ遆0Hdwi#~p,a+v= N=QNmz<v(8j>UiZVxn<Ҫ"L~z 4n^fkh"̩|SAn4YFhb 27- r] iۊ%+'St!L80i֟B͓f l6x zh &MA٭/T q¬Cr=[a$4N}(ISOC7K )yNU}d_QKH QcN}"0nwg^Xx'Ơȩ;o2[�Az}s0S315uy 5WpD2pAѶbuUo4 "~S>l.*ՄiPEcP5ֽlb+:wT.׍XP.hS?i4|7MAk48F "(Ifڮ~7MAԻE*Eر5m nI}� {4 #Abe%w>&){7 AVOJcUiFz 1w`\]f%# MC"ݟ8<F=4b){hVn{}И-fev0NPpf}F 4 z1^Ĭf-*tx4?!ذ?kez=4\&U=4�+oe~D)tnrWhB?{&#nb t{{f XLW'dZa (4�wEI\jv}i㪁f`]lW{\ W+iv5y":S :TrpFPj#`"ſ֟Z\x1 @Jg ߣ3g<Sɏ\X7`7ol’LUĮZ\^P*MJr[^*M aZѨ9nJc.š TEp\*˥Q|X0H":ק̚$q^q)h ۴ǘJvh4+ l:6<nקuד_.ik44Jvw@з"ᩚ5�nZbPp4 MZIh%#w88F`j[H]:hBq9\ WNUկLșʇeL5!萁FqaDţӵ݆/7.R k<H|b`r"oܸ[�NɭlV$qw}gu.7/t "gCOv=NFo4B=gES/1tl>7~iw}jz*W5 .7.Pِu2VYh\nZ]8'p!vd D3p Q^t*[סT<,F{inș6t4+oS/V0.&TR^{AYc<[� ]k8H\ ޠX~W{@P<@|ր_ȸݠ!]&FO ٧W뵞{ܠ)xT*�X`V4QoҪ dT5)x h8d tlMAӦ&'<Mo<.ީ}mw"l'1h=ٛ4 ӝ4*#dpl'JFna6 ]& Bi B^2.K% Bs4NiaNPY& Bnf"Uw�"O,T4U_MB)v6;X]+IXVH ǺT!ZK]( B i{e i,p1TEbJPT5A]rT^9܊b_mFxcTH6ex0I}(ϒX4U*ܻSESP ]Y�j,jxMmL#X4a wױi j t RMCPC -0Ou4bx`+/=?1LǦb4TǻY0[w66MA+ vzΩx͟�MA;HlYw {l=V:]*1: c|@ԂZ|4͵ F {~3ƠAشPrK[,Ai3@]-0g QVߝoa<ġ1X{M,: FS_Lǡ9X:V EKOu�.t@ qh ֲ^8@܆!AACXթYf'8(ѩQk4k~3z>o ȯ75fק1X~wn [!4bUmoE!ݽ/BSd>Uo mUMQ8,͆ZOW@CpHۆg}m,mBc¼n~ڈD;vC!4+j !Z;MNBi ^4we e<Sz9`uӆP<û`rJYr( B: ] k( BIb}? OBiN;Y5׆< IXq3 M^qB(M€i#"QP5,@C2gק9Xy&y7Fs-w5 &EO[I8qL'h(1;럆Fh4nfN+~. L +6j"4fa4ZdIcWgs:F ϝN{lF#54f%i L D,Wfw܃W8@L+7w`*LGii U3HAk~:~Mh V@w M戆 oh1d9icgI]_Z;S?I Zm*Î"V&Xx6Z@Etޏ Z AP,;A߸dcA̧ !gg {\hnK%ֆ7`KUJ"ՊCUKCpu|_ǧV>T !s&Fd2z\݂Js ]zuPg\NQ[BAcpcjsqy,4+RJ* #h^ V3 M;}[?fs\Uѻ6 vi` <VOb&445): P"讯N8^f_D <7;ӗ_D <igaORF<8mJ"0_)<!O:F $ Avg# kƠ"_EȜ6wijșWƠhvMY]Q8[�A@9A=/P D_zs8$!F9ѳm5`d^`VV8zh]]Q 9^䳔8 B: B^ٗ۰(V1wkGr TtctN^5?EPeu U}&Ӥ< BժSzfק9vis}AQ+1\4~ˍ|@3EsP1,ٜ6T[%Aյ.WPTnZl0mYNG?4ÓƠS9%ZRi mN'+{pN7TMCYa𛨋x'7 A$寃g<ʚ`%]0N E AFU@"qiN)˜wJZit*@hh azQ;f`]U`^tt5=hمOFZ>%f'T�h0=2[�@ lVa1ۄ@ li"�S٘^TW% w3ɻ!﵇O gNz+]XhmFܰ?-f N&M)^&W1زQ"j"!| _;>H1x!ulaH {)4Bƴ@sޯ'u D{CM)4!ZќO@A>plB.zEdشJf*1ktc(J0n7G4 /3Ϲw* 9H3Lv-lv}qN7D*3{4Jsim8ëФȺ͸wW] !U9dzTQWivy C9?%L9l4G>}c4g'H@ѥ6J9i\"1D֐1~kwAXnƙ`\37`ۛUZoh ţM9XR;Fs0+͒&9$vSPR�~ {剷=PxP(CNҲK9Ȫr Ú/+Y=_pw@OM)OsѴL 0x¤#[ţm" -ahz4 rx4xgGڏ#-ef8mR[@K/䵗>Ow,�I/ ,L T89n8S>Fϻɛ?`#`Jd;Hp}Z]Sw<(]ke;H�iT©l ף"&뽷%:e4VX'5Q"Ǡ;8ĐE5i"4J |aai(X"k:6aA0X)w7@0XG/Y�,a':7 >R90X| WYs"Dĭid!#Β*Bv,Kxk*oM`",Rz4 6 vDq�*gmaINPQ/Y4 ztOQ ';xۚ@\uɋlMc`[mnM #ɪ fgGq7FAj6#ƹ:\i:N33cI]8 (|C~ #NE0]f1DJi>~"Q#(<z* O'`=FA!IIp*0+v(ȑN+N <Y>#™M +*z9 (?̓WXh)[@aݜ7|磻aZk c:.�aÑB'LZX@{nN$)KI`xUD7륤QZ>y2m5| (< l�8Bi:=qR7qt4 =4Y�( #+ ِ~^jGsi~G华=gx6;ǿ@T饦pP^ 0K1CT)=fKMcχdy*4<a&>'f<ԕgzii d&3p34xBcGqji uy$9 hb--wE);6*88IT88٩8 F9=*4>>R@~b@iKKf"LNraS7DZ֤Icy\AI S#j H% 07wzF{ahM+! 8>E^(Q|/իS~oIhn4 "wױ+SV H 8. JI?o/J-G.wp^B不qp*v/!)Ezz9#OViԺQVF 3{ D4D˰'!q|A8ibpOCF8gN.4^fBSzAyk7 ~i�T [9])L@O <-w +Oa@XׇٝF6_4qrs -�1Q|zBhx {i�TƱdcё@tpRԔR\~�%+ shFv]H#^= oWzwX|EtClˈ(TrrDNbׯ@8J^-#X@+Uj 3ٖ"|I؋XJߤ4FZ&PѬxgDwqr"0@=g{Fp}ꉴoj^%3"v^qSH r.+Ζ#VC . x,N4Zp7:�`Om WP\*&0Ȯ4 ^4[p} 6iϡJ-}|J " 2Ϟ4 stF 0XzcH႐0bJ ɴ4 RAқ t/#E'4 aAg{k8il\ @<r2фQ%hoY# 04 "s i}M, I:;`r"c8OQ(&^0%RFF]G ՂQa;1W2A`7ͥi W1A)S!NQ)?hV`aPmx=/DP:Mp�< �{BJMo$:6&QHf41@(y6lJ45˙JePVf>Pr 20Qim4T4R2H B8Hxc?1*~ŮA&=g�¢LHkגwpoiU`i`&ĮޥTc^>^K[kI`j]RŌ`;KMZ$KliY%h2 N:#Ԑ hA4 f~<W#iHU /+DjMWS*?ךAҽEzM( kMbӸp&c!QBisU1r5MK[kknDH2v1p4W zi[\"N XcH. ADmirN:$n[%M#{mi8o)Ԗٻ#{f~2!p9e+B۽4ٽD%Cphmi:۔^pT%:זFAT-,B:-UF3ma>$\]l*i\$M#hqJW^V^WI WQg %QpQI|ydaA4~m-4*i \TUAʆ9,ީSrU *`u\9~)(6UN8'A ^i(ܱgA^in_#P_뵧QP@w(4 җ`mshH^{z]CeqSG\ɣ4*%w0scPხKi5# djORЪ{ܰ2iٞAC$F )]�6+@J;~T:oHEԨ# )x?ll|7uԑA8CYş  4;w'R D o4 9]p|iA;48NkKbi/NRST뇰^i$JU0߭Z5;aks<zs\hr6`{2}p(;IEqKCie^#-:\6|O_Oy:7H/`LOYҾFM{6@o}z7}! ұWh48Y CϺ >!HPK&Q/דӚyz]iX33 ?=N+^ӳB냏u"V z+ U\)ԅV�9'+Xi�JJt' ,ozcCF@W:7kjTT4Ho Dhf]ix7-3eU(CF۱Cil1Ua�~qx4 A=dy\C`Wg5 /Tmq9B> ׈jTMa(uD!4C٤E7¦~κ e@`(@w�{uqP($Duǰ`8@wY"A|kIX@7t !@L(4փ#4JW%`)-LBDCVYW8OfPK[o(i -2Q7 �@(�Ýu8B΋xS57JꑲV@xt=ZI`{ *J;9?KFV8Is(B!.a`_+i윦ydר7Jܥ:N+L[I`dGl4n@&cTH3x 0ةnxCQs>ABiB8D q[|i Q4 r;T(0o5 whZM.DPn5 S8Oh5cn1=kP`4zYXa4Ct"GܱOC 8 rQ2f[q\mG3٣hKC Hki m{]"}TvZ'%NLA$CD8G)q'A`Њ4O! MS ~*~n@8JAȜc$ZKC $= hi\T8uE7<9N0!:$R mpAwkKc_�8Kk^u41%&i�\]Go H 0N2L5ƃƿ'ˣԥ+:vIΰ#'73uMHBpǠ'Nii�${GCZO# N] G[OC }Xh"!|boY 4Etr mPOC 2y4/5GN?e  AeqqBpuzU׶UѲ4v];zEdj7@9Ȧ԰si X8F9^V#8饍4nN&10%⣶HCর7jsx Dc HC 阙�G\x82\?'2#<6 ս> -a7mApSI\|0db Hi,GZ_xі!D#8| 1ZaEjwmP qRag/l`mmٖRb7pH+~2`LƊmL/`6@[T@eF׶-1BwyXuV9v1 XBr4<%U)1WtQL5t17W{+ߦV9WQ Oc!J#җʂ7wW_:p@z | B W)(Ehسʉ^.+4n+ Ѿ8:jM6;y>J 45.:Ei8Mg8!@f:Wi�ls ^XAg5 s9Wzk0:Ɇ4MC 1ADN)^?0o+Ng _\ƪia<)9md8g||46_є3QANr򺅨�_PAP>NC | ì@iNۛʪX2nPfc8RM|3\7 m; 2zg5.p bm89Tq NPɲ4 U=1We'( ic3']2Q4d(xKAaMK/g]U,KIIc`4*W9746rф4 vz` H lGEIq)i }[_A{Z_ II!|4 "q61pTO !QU'|,% 34 ɞR:;~"HFF)>gKM t~3EjGwd9iURR8|)J E=w"!5 !L~ŮFA1M+,01@j:/KR8q82$#5e*2 +Y!cVe8¼4"qebwȘIK$7T9^ ʎAؘZC eRH kic ٮ�is)l KK<gY3tZ'#G(!}(8eD)=iL\R  iDQSQ UjPX$ btJ9o1+ iJA Cե ;$ D %ʌ0P2!"i_wQSDeC6F3Bs8"1Pd#x I $M+FAEuKQ3ē ]Z%XAm6GQ@S@v+`4j N#,MHO #'ϷHO anj_j^:I�|[@UWŒ4=n37s�l=Faߦ&# a!"%#l Rkp4RK HC GF8^�VFtlVLgY)*܂i?9:Ե 0ʯ-F+R3 >0[@w񎇃'Ѐ@Qas``Kc^,Ѯ,â0d"U<y$ lе8sѮ6kHUMmj9-TlҝΆֽsd ?Ec_~>K@Wdk8Tϴ4Ȫ-USZSЉ�w"A4|�>M邨+XE]@(SXVa!?Q<YidB9N\QYiSks1C5 4VNFj2~&W+EL#Vخ ˧J`+` /kiltOpXXDT4oM`cC@ÚFAF93ڈg_gkau"6 ?Lc H`]mi`4 p�_X0dE&gΗʘ=\iY6Hf؛4 ie<CAKsb}ʁk�[pi# (;-<[ve|�Nki5<-p(0K%ߟ?qolEud10~pi 2-Gԇp ANC^ljFA8Ձ �GRDc H]8ό]? swE{I #&%^('l脩^ QcF%a^(c Vj,  . ܁NhR4 uao_kג<0}k3?߂B(,M 4-w-xiSA{;B'PjfzM'K5 $FlDJs"kH!F t!{Mcdd:)Coi : ^lUϪ}oi -˖W- l]Ugܜs$%'Ap: N@8dI&d.NIAd1Y 1!$v?4rqoFAӿMMtwmiNʖMEXZ4VS<pETʦKT/ o=D(KKGĪ'-\ƨ.i\y #Gc( iijRE7 s00xrNNuv] \JwI ~'O뒆0f9eH "<~JFAՋ9E&({O24&ls"= gY`qiY33ýQP oA]> ԪpR"<h{lxIAMnr'A1t5ߩ1?ĵc H꜔`'{O I^J=jxriܵy9QYzd`QpMYUgN# [DBn FMIp )SѬH<­#}a#"(pEcH?_$nG1`Q6!kgf&# y=8~ {4a,,D{odqć�wu)GjtP϶өDv#=d!(l�o2H ~P^S"ٶ Gd,Nv8̶,NX"YB1-=7N#/ �il/`R&tzo P"rpmھgk#rRvqA53 5e4 V 8ngu0A 6f$؜( ꑑYkQ Xx))f8iΨk_i S<�Q/8쉮4E.Ë7q{W)4JTN4�\!9B0Ga1ƼU+ ͚NJ k*(il. PQ;2x8m]0,gN@#V욆?8Bu L[ ik[y?AE`R4 ?)8؀`}N0tx3'X[AD+j;IogwMà9Kc&PDD35 BwtÕ[\S4 038Li#]YFAxnNc Nߒ OcR,i W`�܀si5'1OD8m;Pc - t?8~έ؋ taW^ꅱ`y"% Ta'ˎF@*x*.SGXVm42wedFI`c;S` 497~jzST`@%;)/躍A:gޮ'AseG<[@C8;D?J"> i ?!b$Q #L)(% tf.Th8bc1p�W;h5c gcQ 8Ba+}r5 4 o0^?"GM�:*zQŌPM# ^Gv dBQ�MMq&w &GM# {;B.,jh p?Zg[_kVx"arli<=d Nf�IRuGKCxȮhipvܰoisOO-s;2.p~dKOۖIO`|4M:'#�E{FK#*8MGKc k`6.i\mz̄IYݣ5d]pG!?Vw.9$_se"lᎡ!i\c-K ]`FC N6PKPf1 j*I [|Ґ4"r! /e:K^^W1FAv?�²>4!iʮ<Gю. sGO!LGЙ ޿hG<{=XkYbdmM +qPyqTb:.:q4rⰽ:H@`7sGO#:-J9YMOɺސD 9j4)i'iԅqjv` ɉ[Ĕ19Z-coSͩ=AlHHxJd,|HF @'c%x;c10S\]R GەH |ϣqc.΃cR*#'Ȏ9%\iܬ;8":lΏlrʇ76蔏mnw,@DgfEp=fH~v(g|l(@Y?q{#+e3)<.EQ#+ELw1"^4>9r<`шp'Mg*QJD0>X�ױFBGk4rKu8EXpXi @GAZQK 4R[C?CFA^ٝM aDJ 0:JeQnz~ۣIf!J`%ڤxxpaS˫ V$d]6g<v4 q3ت)ZNJ]?.EW GlВ�ԎiCB)46"x6U#ilGr=;$�WV+)MC +cI,ᩛCqN2{+<i/`$/4 <7M6Ý"CHAO'e0ᇔ 5Ҋ<�uɐ4RR; Y猣ziS �g:&4xge#; d:A"/34v{Is@we8d SxIu4 U:7v&WKŮ@/ӯa]~4M͒+7Mw%42j9B)ѮY HjCƮFpt,iGhe0oA\YgB+]?]8u7`�9.}s6gĮƿQ|A6g8Ak4�"H7aH+1sv44l3.-1ptu)ΪD[YΚCuX“Q$4W4SϖXi y�'`s�u(>k!l؟11cIdpY0") ?]gMz Y H xlZ*͚ķ7nq3rAp3DNx- p(+`xJnXG9 6gK |_Qj4�tAx6m p|(J#x[vt%H̖?T.pϫHRv"<[rqr1haboeijΔ4. D͇+S+# &@Ïѥ~Ks7< Rw47% K+jCHY{JxW@%/g> Ǯ?1,gtŔ4QmJ̞F@a8N K3#,8{It@ 5{8a׉30d +`4*ޚ8>$g\Fu4 r*աcAUGǕՑT=TeDp;#WliT`*b]00,]= ;T'ϑ@2v"hю̑)v`x&;í2sAp ,e͑Ma'u,pgϑ}&8Fn@Eԙ77NHxi99tH[3(9<ƝhpCófgQds_q I;mVF,L l .'�*{NME''xhզhyYUUz#CS٬|j b@p̶VCquPU 8TX<B<v-IU XKR3vAQu3 $E( ~.:`4V68خ$T#JcQ>VZi @' !~Px;9k2Wnyu1vysӤ5^SGrli {e°<i l:_bJ`o lJ`ko,렎46nBdJÝ2S H'ϩ V&Cԑ67cZM`j(N(7QGB4 6ueDUR%H`xNRh.295,>x]yK QCirHifxI3UaЊVwf'; ?F}GisAPHvƩL]`i`wjc~cb逝Am`,KD1; G:Il4y+l` (,:jn72Xiey,ݯЄw?Kf4 v3'8j,`4vqDY*:3Cc H g]<U@H '$G0X;+H!^l]?f餓2a R:hQ,_%<be҄KKpiezy^f4'NJAj݀iIɬt\a8w\A;jQY�{D ī!p IGgZ1׶vSDc=سj'pE LQ< _5gSzO oK<GBOt4΢)s2EWM ޯ'C7BMͮFI GQxPʹCVKu:GxAj:Z'6y-Sk(8:''vie8ݰZ'"''YR(lݢ(8v_I 2VKTWR!خoWã-VK$Il!uIZgL/+ä<!^- 2f]40r#m�5Cח4 z }Q Xظ%i\}{!%$klC%3CI,󏶱4 .2qR2A;ZZF1F `PQ(Cv\6bQ|T@I-Ir%iԶzciT^buX+Z= KJ}%+8RtN!'VO xRf%6d4:2~H `eT�̔piP]HKa?qpv8m|4}T3?؂0ӿxCyʞ8biA*:6q[ :C# cqlPco`apOErM vЯʞsdma42-&+D %X69[@9_vԩ2lwY<eVog)N!/EVmokY h\-`6+ٺb& 53aLWm �:cc#CZɶ.`ңCV;L%}yV1A.щ+5PQgXl#�à%"Vu^3cS-:bg4Ve8['hqh1Ig68P%4idm;NXQNJC yz]*ٺS=k!IIT¥JӁpAtYc;6Vµ>Xqj1:#U-u*Fwpm˂t$,V[+^:jwv$(VTkfQih,M#`뮤@6нk2ilUxM`Hx8E`rik?g޸նz6cil.ё(hn^1 OEh i�ҼuF Ǣ4YM#P�{�#+x3n\;k NIs>7vZvkRu^"Uj -TN# [#0('9N#CT=Ďب۵!=Ova lB2Uըi$֙*6ĨK䔝AR;!+E؁:N#`7fsUGGwnba42У䨬Zة31ZZHZGu2- NqZg%7dt- ]%p͎i[>?pCde-i<9W'S;ApTOS.E1Z 8c`P$ZՒ!-;+{`Zb]!pPDY R!ĝYדjMD!!p,WSw|�{O( Bpl $:�8) \ۉZkM# U5ךF\=[i=SqPb HC5ofk]?KݰXfcZY?{Œa R�} UXpͅjK# +N.@(іF &ll, jKC ,7IcX=IҖ):e\OE|4+ o}=ꃴ4�.9d~XT4.J:{㜭C3V!p[9R?%<J% N6  [1t$f}CapM]%!4 ph)2@4’xHי&dcȈ0Q4 ^9L]:f 0nE :$JbPaHi蜲51iTz#W3MTI U!3X"rB ݗx:1:i:UUai <6v4*sw&m8$a; c:"3.\=t|ȡmꀃў 3G`&g\=,]gh8i uLKwóApKNGl XaAOpQpD;\ʜ= !hpli @gШI;#[iz*ii &f{D*;a:\&Ll/˙t r|TE="~{8zښkRػQ5[)ܢ&mJ(J+d{D*eXP$9[zeJgN8'rƒ2C�=�lѿ-!gO";WK3~1Ӟ0p.\<^i.Z4U|!W< Z"fѯ<ɜ7OX`4^@ulVĎJܛ%M ?-J֕mwM֕?\KETv(C[W[aZ4êɑ(ت++ M/ eJ`�/}pسj%=d ƉQF67NUƢM`Ngeѡ;g窦1Gl��&jyAfhRT=潀N5}%#4 cɱGP(t)5QZGK!PX -S#iwbve p@fj>4h,QWn՝@(8`{Ԙ"O:aPh1G EasÃՈoӡ%|ةOhWXaBpi D5w O]"|3�.r] t)qMo~.i=> oi DA~MC] 0R H A?F7fWҦL� j29N% ~i/K`Eh4 JضVV?%/z9GeafGt4 ZO/!`HiDy>ϣ܁5 K4nñ:ֻapP"ux҈NR_/?ӿ^ Q" lJl3`,{_,~v9.%5%7(s7%Waqqn#!}<H̓Tkñ=]r.HW; -7ot}~Pچ7}87cК?f=4KG#$tOoqNToqǒJsX@<4T9-?pdč#\�>)$t*`ǁ'x%5foO`=?JQLRu fi}Oeg]ac+{O�|oT1} .\ֳِoxxSd>?SRP<h'Jiot S"<me1fp,gPg<# O`cRH(O;oؕ T~9-`�ף0>I{QQ.3}Z C�l~y`۰u�Jq|IOba~!n}G4 &vX>K-�(65f>�bsroCǁl:G=�Z`]{Ѯ?[=hXfxEɲƒxm<Z6'c2̗)7 ^q;|X44b}yz'Xic!lvU}űrp f#O" >U)d^>nYn|8x^(IPj)M=nt0:s<C.9Ȯd#]SO�oXs(_Yh-ώ=~tas6uކYqtS̅;h1Žvv<?g{rtZ㹍8вZ{uIy![=cFt<xMu%>'� -J]O1$Fd9#'Ar <Ϋ3Cl(SOd QPq3Y*2fãO?; SdJW}}|0Aæ㓽*UH�sZ@yF2]|‘f�c^40ldDlW(}AGTdmS1_֩Y_9c3m==\Qa2O릀"Y,\'\$`̉WƖg'<4qq6(R[4$< ᰖ)}Ƣ<ǰo h>zmi8ΒIfo-: ۍql`'vO�ΓSB>?6'րM qlxi|H͠Ye6ApO%hY'$wpwtX7Y wS&,6sg*s"qmPaf+٬/s{PFSre]h#dfUp\]J<FB':e3̸�ոb�qW~pΨ7*9_Aϰl\Fس<Y|@Co>Js9ڹ/狳M8>S"{GNc|~[a,Dm;uiOg910W + QBD;݇'ϓTgB9D+Tu<-.a2Ʒ'3q lbn<zf|/lig0<~|l'<<5i[fs|6"u�3ﱩ ̅S SU B3ɍy Oi)s4 }C;=5נ24ylZ)I 8#p& ||Ϧ?"Lw%/ 1%v$uJ1Δt ipmbqz<_BI0mRcU}34!.^e/#l Ȱ6ɍe~ǿR/v?@_g)9;p,lq5s<1#d&e>! ȶ!D|slKu%~Z"h&(H@>yl;^bl59$#TbQtq!Ld / ".�O$sX}C*SvL X39m4;;8hviWʹ>ǧQ�zqׄQGN8~z0҃) \Of<&8W},|2:ȦQC'nib1gi'OϏ  +řAΆ>)$<lDž,TpԌC#s [il[uvW6-PuW1I�rIe̠?6n:q2^Os7hzԼq?P60 tÄ564^_ǣ}aǃLcs]@uL/n4=`þ[C˶m&|؃f*NIre v1SbZ9ƈ8cRVp: p=&Vx<6cvyٓ`l#oM6~JJ1k ӸSMy" =kLLlJ jZwbPMmJ pYI(Ex2ke"64k~'tec6>ANü 2K8d]XlpDev.xvKy#l�nu[|O]VM0Ƣ5x&gh/`}l}fHggg,ϱ%I&qbÁZ`R%i]q WAWiٚ5[Ԛk�� 1a?Iyt_>�*.Ͻkwb:XZ,�d8KFu؟�L?> QD©{3iGL N1g0kW`"AӋ"6-ܕ isc c"g斏ѱ{#J\6T[`#Wtq'#d\sB ˇ{Ʊ%c:=>K�:<Dd=NK3J'y= ^~AcnsF3s>9Q+ΡesK@7<.Жs! ,dAgIIwk;-Rg|L0 SpQ]1eg#SAw L3 Ml=οK|¾o`d-J->{b<%L0g' &q&boU: "v3Z�+f 0=]5?rdߘo,�G0x~el6&3=ԜEn3ZgQv[#Nq65Mc`j㤦+S/FUk"|IaꄕTyeV6R66=RMo" [V>~|@C ~R|šɡ03 `v_IS[pS99X~~Bt,1Y(6!:^dly]N9ansJ&;JO2Sv+#0Mm̘]-0,eQN^a~VvWN]HcI㳇^_46C,[Lw)DOpwIO3p|8!Z2@ l|شzIU:m*6d%x, +rY ִ#RLbrQ?#a`*?8faKʇ'on7.! xnc;Iyzr"yfB0>Uze7zۖV?SIjI3#yKnSgnW鄰Zf֥ `=I0}8n5`>m&o׺f"M&n G/x,<`g3#@! W{BE��bj=o wLk/նMOkv־ g[b 37+T,ygdc)T 5@p;琥;-΄`2n<68҃Z'вl WOg 89hG:Qcwn9ڀX9=' n '^&�&bʃp# ^YGKl"Dkj#NfI@% eDU 0;;G'13}C(֕=LR4aQ:5,+s~naoY:ɨ (OtDZQ E<1: _fMD3wn˾D k3%rY`0ZT8G6#"uX _O򓚰yVy4DSbvO knht9�' Mx7k}4phT-2rӱ-LFڒc,]2g`ńP4ղz(OvVk#R-i&8Ks 2+|!t'&<y*Ꝺber:9ePņd(i9fq~‰79ŢEoW1Xg�TX`=ÚP#ϸyFZlx>c8XLXUћ-E< xĥW.#;!ɳƅ9 L$ ܪtR#ZtaA`95Uܵx|T0[8 BiJ,0$os)`&?; zbbHԤ2I dr?әl<mgCC3gXጿfhχL�k O8|`*ڶAHh'tU@x|2XT(u^mnMcYSl_9Ā#5:ύm:mn=voel `|\XS[=<OY#Ǫr1iN}6MsofGoIn+my'sɖ0ND lfI $3-R�bFbLSCd[Sf 5brqdױO`ۆӗe5FC2)B!<`S/@Xlx`NrW[gDx3y_ UNGfTH䧢+W)3 󎃻LT>XO-&)6*_f[࣮ݚẸl●2$4_L'(ȤX,waO8Y%EK$yB9f60@(POb+cjY˝>+wd,m3:sz'Y_X7u3qʘq}y(f88 ̺t0l?V-wD`xlE VQ9VNyMɂ :nXLj##hyϙK`ߟ>~!*$ ,KLMߠjIQQ> c [!T6n4)w檚K�(8nm<Ϫ&_d5`ԅWħ& .4,.l^ o)r(6 ygu"T#N)3vAz*Iø| &Y]8Co#N:uH] ,vM^Yi-4;l)s5|d]q1e<]Nk*SLVtG;3;]YάA~@mYfHlYB6qbEa)J6v O&)+rÁͧU ռ~˴JC%X-fǑ֦3H_[,eZ6`?@9~vDsMtʸ#xk֥X]U09GAW=/|jͤ:vNqqZޙ<.c@ͷ-$x6?(3c3ЕVj[# 3]aL)Rv:.,1L" F]\V6MgCl'fZ}L?I'?RjnL&.;V=$ynq 7(l;q4ϋM}',.U6XK+5mFi`*e.20#[~Fo|WжmRu٫l3d[R>{<S -ĤddKNN[D5͆R+l]2԰9錉h2癭gc5_I d&7;|)NcztD]fU)$_H3[d4Eg*p_Ix'09^b]XLU[/I>ͻ)oaxQp_\�OVEV6j}5sbKvR1bVŠٶGNŹX3-Ǟ7+85'aNV#O>޽~_wB#$'�.Ųڞ#I< m͟v<^v^wnEg Peu"RNe(ggo,C}>�L 5Ukc i 0IwCm't&xHŽZ_t.UM0l )?۶__pn,W??@J?%c!l]]UG{?~P}~?߷ ~~P?߷~߷BowUgqoCx(f?e;|O3=h?Eݏ4E~rtoaKnOM?>g{O4?�|h8x׾~r{\-7o">O V!SybPw<j_}W/Z}0~I~I7_OYu~y0FSuG'|(b)q*>'5}m 7z!5duF{!I{Gz-n/[,?^ZҾmr}@5 ?,yx٥Z_οz͹-.fk xT˿xk/ZKؘ'l_'/~}EU|i^¯'v:ǨVSսBw絛~y~;{Fݐ6ԸnPmP"a3]k=imzNڭ߯#2fʼXW_wIm_|旝.FV/~fyl׃o"7$7 /u~롨5Yj|:~<eu}L}{XkASvwN=Hއq_̺H^%H7_ٺXWGVjf㼛-{pe/ �m7%b_._ogj^%ljFӼ 2<W7l= ]n\R}żc~};$z,ɗ(zS}0}^ȷVXwL=S]{kՑ%˪+^"3vv]xh]P⵾}Bw~=@rZ G;y~}B; ^{ٷ04WPІ 9fF-qz/e"{D &l)|يO^&J5{&߫}H\ <rFGJ_ejݲPMD T^@tWFRHJfM˙Y_s"27iR-| |mwu_x /֤=E_W[ޛ%hl(k8*p9Omx{ݰ|Il~ͯ+ipw?Ȣg:�u|,nV]yz_"> i<99$D 74^oϢ\8qj!F.ѼR:TZ@޾_+AqY81_/ZK7\Ik%xs9m|q1o/Ͷ[J77ssr?a]Jׄ.׹{W*F7H�//1WíkY}W땥ZT&f׸n|' Uߎ_q|Vz]t8=˹v#tn#޽_Ao Sn5(a5 ˢ`o~x-*hld_϶ދ;ud^_uBeJ!^ɬJm7 7n!=yd|`c I~ͻxXb"̶W)>~RgK`*J8iim[y(3ՇbO4y8gxy&<{/,6˙>?<o̤||bc;7wWY[7oz'Pyw=T8f<GMW>&!ԼZM /w0x,scE�41g7yAb^c,N;M;be*ۯ4/a[8#5_jN;2'NnT_i.WGt冚[,mvxvT'փv9ifUӊ0gڧكn׺QIԫFs(AMg5{gn6;zƪ4|bm^+lb~k=Tfk?/7Oke]޼{Z.ܺAr5F/Vsm ~K3cMx>1 mTIپasmܚkgSfP1F/~"]w,\>O1j b5_iYI0g>37Oۺ3bzY쿜61Ih Ϫyj&Z̦J ΗgY|jZ fܙy5Gü5T<ϷT\εZE׌^ q㋋eSu\ZًB\jVgrXnF7La`Y|vsIu  o_J ƎlA<݇bsZ{har:VnoƜpr/Pror[p )]\�l!A7z)c,b ynJȾxn|0\01@yڬ7ohtws3wz#_-]sҪ6;7rNou %KK3i}?F(ŤDs,ӱ/%dG qknbߐ:y ~Vl u񭬯`עrQ^qKq^ 9񿒋g_.b쮷yKR>])7H &Z4V3 4!³K9wO^Ƽؗ=fu=/ 91«sKV_ˡ&2|[X>K^>|x1ͤMt%[ίXvAsnwqO9g`rmޒ o-%/朾-0Km\w/iJ?Pш jQ} w55\(~_")joYSgD+bk ZYnFNX>H)Zyx&{j/ͷ7'T$ d[3%Jhcz@fUm}ny{6Ŭ--kvK$^r7;s{*(c)`Ͳ([g/y[x=DE+з?7p{37%pqnn#\n~f AԛyXxܪQV鷂|vyJL7^EL&2ܗBv\څ_#c@4nFn=[߸Msg~yCbbGsWR44f /]47ţ7usw[_y$Kz9.Vif%>+8{so YPd7~|$D޲ܷ?~+)[]0gVus~ՙ׳V;7~-r?.&o}H tد2݌-L o˯]`ʚn[1b$n�D%pT`\fCL\7t#I.r:ƅyr]FY\>.KDv2]䷼^zUz ෗s#޸7bem;^7?$Y_<<Kʶ[Bw,lHc<l YڷZZ.-/J̥7r]V<\wӭq!K|Eo0g(/gܛO/-s騺db<thng7rxnqKaխ#<qtdR~&&xaO-TEcz~{^:n;lJW[GͧޅJ}=ty^ץo~ 떐QIu+֞5b'$@?s|~Qzk|,-~["t2Rv;7w/B9wF ,ri/{Ɛo׫ИKQdUsmV"wWXk.ZS{'RoVnSKV]Wnb~Xm*3!_Q/ LPsnxLJ)ޟe4bwg/ Z1A뉉l^lBcͽz-=eKL.^m.RX^_PFy4k-S;7x=._vbﯧ>Q;no<~\vռ;|6yk^+)a}v6uOK!eoڈrO}C'+2/Olpy'WܴFp\ ]wr͚xbzt€f}K.O8ź GqUjuW@:{/a.j W1{4_$ `fMwO/0}Ϧ,o%Y6 6jޓ;<z`]#f^wNe׶ˋӋl٨[ٌ5/Vi?y7G7߰ 7 C[И^^&4Wo5K UCQO˟t\p bb/=1K^6أ\+S_nʼn]Ђ'hh~@vkgS.ɤ[(lӶ^"hx}7]~{cD+9r}{n.{5xp"|_"˹ma,a?:.vxϯ{;+U@׉6#WY]&_|% E|~ 'h/Է?x-6/X S+3"5 5v @Uj`f_[ p%Ϥ?yU+_2_oϳFrA0ά>`@�-,wwv& %B}YIJA0E<fV{_3-.I^wmsw>W='_hm{ȺwzMK=<[Sd5g\<X7 <f.w^En5~7l:-{A;$-z{~l|qˤ齣~<ݖp~g\5 뀶N.7@v7z}}a126+m$g0TpГ*_?a|>W mS<˒ub1Ƃ8A7ºѹ|bOW?4X-plsұޠ13Zf yꙫiٖ_;ذ+mN|sm-ņOrZΧ-̀؝w_mN ˾YLtc#:"tqz*Ƣ^lۗY>}{,26U4/ѫ괆7eu狛Gl^"r2/-ziqO9zowRG{oŏ?}ΊCя~G?я~G?я~G?я~G?яKO͜G[ŭS9 gxbV~~ lz,Yrۯ(r_~q`1`y_o_.] zۮvUUanv۵ۮ)&m?\|Fܪ3}3"v? vG#SKS�)ҕLRXXeY` ,N), XS Kb,)?/TP80i0i0 tHa 8x rL8CX!, nҔ%1 W,i�&(ˢ,1n8p0,CY, Oe2a &LRX*B8qrJaxqweqA+z\AO=ES=S@OQEO=S0*C )W FTQ& `6U0NPPB9TP SL`TҔ ^029H K$),S $=pCX}Ja!%}Ja,P>( hIAkP`"&LD*K�!B*K�/^)K�=zB'=z'@O(z$IEOT$IГ=IГ'= zRѓ'AO*z'AOT$IEOҢV办=IГ'= zRѓ'AO*z'AOT$IEO=IГ z*詊 z z詠詠*z*詠*z*詊 z*詘in| \*&`5V!6h状 *_ 3* b[=|E+XI4d! QxѰthuC Rܐ↵BsၥuClb۰ThEx`-ݐӆ6䴉6! 9mi9miCNrڐ&rڦqb=VdmM" nHp n]" qnsqnaG;ݑ.aw#]0D;Rߑ.R]:^!xࡃ.x! GptGOaR:H R R:H邔.HTGN R:H .H邔RH eR eRH!H eR eRH e!HRH eR eRH!H eR eRH e!HRH eR ePRw!H<r ]•ȕ:Ô)W'WW\; RwZ+{G+yG(PI\SRwPwTrʵ*W*FM6JA ɵ+׮\<rUE[\b[/]9ҏ+Lu[\b[ܘ-)Lť[\b[ܛ])L9wFlb[ܥsnĖ)L:Flb[ܶeĖ)LEtfJl9Ė+\|r>~r5vA+Ė[rvA+Ė[rvA+57Nt%cMܿ;]ҕ43Ast!HW0"hBaDWF *ʈOj2YT_ZT_F@IeD4P~iQKUF�ż4eD0dBɦ0dBɦ8SGdS~iQC%;(T_FPJ6Uꗆ%;TMEaUORM%JKÈ*Aɦ0dJvP 4(١l/ #Jvd%*vH�������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_data/test-voip-rrul.flent.gz���������������������������������������������0000664�0000000�0000000�00001433236�14670056262�0023246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ũUbatch-voip-rrul-2015-07-12T201155-50ms-100Mbit-fq_codel-cubic-01.flent�]m{OWI3y'LF5~QYtqHjS E$e'w?EqgJ$s/6;__~ܽ7'?ۃ_{gw7|;ݟ컟'I>~IwsQS- _['9IK_$GO_'}')O]?}|{{_|_o~G|?x/$ wzΛ~񳇯^]=ٳ˗OtO>*7_>mAsoPnwknwko_F^}I_zw88xxً_~~R~O|J?W?U_?}/>~o'/?^Wk-p߽kSïo'Ox}`27ݜ+7#u~o^>}o_ߘw~H~ݧ^x{x絍~J^z͋Wo)AW rW_ի7*Io}~ŵR*T)_=ׯ$=s__/_|W\P}맯_)V?ϒJy>g/J7~|C-e_^}WJW"B,4?{fY''_~L7O/;]_y <nr׺}o}߼;7_ܷ^~ORͷ>ý/~m맿/\}]>/ntoMw\tnwɓ'w\_;Mfb{M[Û%熩Ni,3-Ο3hfI^k&_sjfo{|o{?_􋛟~ɟGLOK%5Ù??僷?^|bh׿eoJw'[pϣi(hr 6~D~dŲ~fq{f}_aڹ:y<` 'sFh 4~dԷF?* m ѷ/_}7#[.>7z{RS#/~K柙5 MOS'm?R]:~7-4O᳏&~>|ۯ P>nxϋGwRWxf՛uu3anf̫7:>ܸmJ{hVJ-ftYuU^}f6\}7W7S\_6tnFYtN13胷0??o[{T?×|g^=еC΋g_'2s4IoԗN&&𧏎} |,9ǯ$jܻ3g Som/_${ExBO]8K^IJh2[�: nJ0y/\4g.!c"|]jI㤏9.y"$׷qM{nn'Ɇ|S샍Cn=*dV=,%QVムކz3gh-[d'_/?ϯ_Oߤ ˃4ܹR_)EW /_d7G:-xl/xOey'鳇]~w+5x}ˇmѨg[ RO</4⛛h؍y|DZ_%9_WyՃWd2~J7[(x}ŋ~z#O|7>RcW>{3>8y{U- /3$wn{r75S>Wn"?k{dZjގ&jй(sʭ|Z o:|Iՠ+BBGOqÝЅ5 N .os%!=h+LU #hc-Rޮ֪z?Z q-t' mNP%oYt}r } dCLh#|-Kl-W]1Ř״R{Q3ճ#? +KI-sM]2Ҩ7SErt%K]ןl~Hu! +r{9CIv52zaٗ ]oyҹџlnyoAަ'.~c$oSOo?vz? 73o^zSol9+J!gl/ϟH ?{[%ex/^To#l޶It5C?maB<d%<~/ob8d4&v0m~WvԽ o]JGrӱƔ'o0U,yO�>˴s?I~sWs휾}qG_ۯ_g?S_}?O;ʖi]սO4N٭"w즛؝vY~wg{rUTZ\Z͕O={+wxRU_q_{n~痔r:ۆz^||1<}D9=OW7GJQ_7~5w~I>lS3PyBx?6GRhOM}g-oͫ;|ch z.Ǟqbγk~$<c|ly:HLy*<K#V3zv֝O fZZ޶?˛}{)_|5/9~x[s΢-_ˇ~Ͼa0 }uGCoV>RGyȭe ?p-˦Q(Sv8luOq6>]ۚ]5Rmih-rwC+pٶJٕ;'ۃ )f ›vՅKRj!>RKi'uj~-9xm[ѷ}m.sޖ|imxZu]xy% [֥mK^]:h u׹gF۞]x<J߆ o>ѹmw.} bZ:i^ %J^Ep)UwGV u@[i]x-Zlq٭Hɼ¥ܷW:\Y9y*GJ]Sv~m ojm{PuRki&D5ȵlKglYƶk咶. oUW@ :l7Ge?giБe[--JnrF>KuBEmɅR-c3Qn.R˼:7q፸.\H4:VpʆNHΎ P#mxv~bqMвp�z[prCr@ˡY.Z[y; ¥ip"ۮE<:(مWNh).q\ h}{\ȅXxJGfʋمWV ](s …{9s1 >}= m텨g^%$vCzub7NN.|H~}-8>«pn"i6jAg4]x;>\m{S~x):=><* Q\xS5 .\R >zc;h#Zʶv{i qѭm> 9moˍGBsg’>t<{9e^(}; U6R$.]Kjmpc,f+UY.Ne?KSZ5] .ч YM0:{5E-렪׷xEEJJ߯t~WUt]xeEOC)؟2)_?"sueH=QHTu>н"QѳW]tJ0W]pNRz2^y{R/";I#SgHj/^I@MpPKdD&g:$|^r]ݯWet;߯2^9k_L)VE^Df΋̔*^2ײ2yFJeyJvqW^޻K﹯OT{yҋe53ҫ8R:i$Hs@Wrt]Rs_#;zlKWtte@&{UGJRW4#.:O.c~&s*^ Eᩫ٥Sȓ;3^٪=W|^4;#+6)"N#{ C^uBRkUql}wn{٫@ZK߿ )]{իAҟQպwF3^Ǭvh^һz>Wd߫.)zsE0ϫDR:՞6zH R$wJzS{Ӊ4;b$EQU#)gU#)m+o?ʑީYԇ^Aҋ}J3{IJ'$5#.# WNR%^U NU$_;$sKU&)93Jlj%P$$84ҩQHvqZ9]zoʳOYg()]UFvFvFIFݿ"%3UJ;k2% X}?))p gPId;j .(RޙN+V蘥퍟+)LOk].^҉{ 4m<V7ZO5.u+VDrV*^ҋ鲪y K(엷XI:kއw};jɠݖ+).gN hƫVR3IPj%wYB3UĚJMsǾ-%~?^ҹײxJJ"ݫV^ާ{JJ/}y}]:u"3!Wt+)G@3Ϭ~%\IeU+) Wtjmt+fh+) iꕔNO{ ;+^y+)U+ [?Dz_Rz%W]^z[DzJJTvy^ʕn]tW$JKgWj51Wt{Qa~ꕔ.իWRH=yJҭcwWSPūWRz)2yJ »i3+)}.^ T b=\IU_sYr%LyKʕnw\I#!\ʕzQܷ\I5KhTr%WΧ4#.]JJļz%]:[`#k ^B`I_X%ȲyKJbT`Y~,)?@,^қy,yKJ~U,)]%xKqr:3^Œu+1WpD.}^c*:vaj.xKJv{ūXRi}͈K\ۋWt giN]“KuKMūXRz#*.WgU,)}P`«W|迖o^+Q1eިWt!+)}POn^IW>9i^ҫi?ꕔHצ}{JJۋfz%{c?t>i&\)^I麨"O٥F%f{JJ֪LwqRxKjǹɥ8+XRzkH^\p*W>8 W`Ig^%W0+XRzc \/^҅#WaMJyT[u+OWjLv#ǓիXRX_ݗ!}=S5"<\zH,) Wt,)}RS{ZuTuXe ^eyy=&#pnP%KOy,) 8o^:w`Isq]zTj/q[oE[% WiIݫXRz=>^Œ[U,)]ëXRy3U,i:=pT%Q#oyKJor#%Dۍ&W1!⼒%MóM-y%KJ|큽%70_.,.]^ɒmPbgtJ^~+YR:%3kWtN%PS%T#WdCr5ҫYRzIT,)RrWtNSS(qjnڝ' N͒Ke,42wv鬉_W%~,ݴyZrP:5KF/N͒D2yf{1fj#ELUNsҋUn.tḰSҭNtTus?<\xQx 7IӦ\UK'pR\줊gjhvI{reAͅO Yvj-UĥV/{nҋ߫=.A.Kyk/.Qkik,ov:;R\:մIvv\s$ҭ hO grTҋ=ZFrT)\٥f#Q\z׈3~tuTu4n]@i{p gur+F\zQOۏ5ᙪ˾å;\:Q}ҙ ToSt0@19JF/TȩW2:QStvL:43tqx̀rH(}p隿Gx)W2:Q܈%\L3{K 8{I\3S&7NG( ,.7!$eRu۲ڇK/%\85 tѤ]:m�*ť6}xv) bƁQm.8@gΚ�]\zg lrRLUm?2\xS&N,'T g/޾GΣۡYUI}ɥ/ jsL2mtٗ]\zt}{*7@G@åt�O%)t�*Qv7@=*.:}Iv�*&:3g\*}͜ Ĩ K^k`#qk�oå΁w%NƚnP.{_s&lŅ1WdYCgl+TRz)pB%/{HPIneW>jc W2ZpB%%*):%w+T$yyuJ )CꔔRWtI%yuJJ}:Ro.^:jgå[OJ^orzJJ$BNIjyuJtPǪC)ɥל;wPI-/SK,;xJJWTڑ3J} ^s+6PI-s$yJJ+ܟ^G+T*zJJyP?2 ެf^;J%NvU'U*)n.jZc^R#[pWp+$oE^N{JJ7+T* mn6yJJEJ`U =J%CDO-Wt{<pyJe#yåkk^9˱+5RIR)P*ڼR%~~JjQs+UR=7j4Dl^ҥ*U*)|X:Zo`h^u1*ެe٧g.VܶÚWAԺO,rprϦ}74мJ%%uqCs^RG)Uj.kg^қ5ٷTTI"n5TI飵f<K%U6TIJ7ZѼR%5ܟ^&6ͫT5ӇK(lUtF^қ>n^҅iTxJJ̉e;j*8C'^~*))ͰKUVI3ҳU9,9%pU3{JJorj.VzJJBya*gi*)] ߝn^қ&Z% ONŅ{4TI -ˈ81TI5TּR%kfR%˺)ًK=+yJrUSK19DyJJ.o4XIn}[taQߞWGdTb%vC*)\hU>FD3^ٚs^}+)yJ ޛWƟ9WQTغJ^G_UW{JJo6*)3ݫU2H*)7VIdOoPh^,O Z%['6WdayJJ/"kWtJ4۫UR:'Dy^{yJN􊕔^#b%S+VR:ؼjs^ݕ:%g\VO]zQ_^ѼZ%S3񊕔VoxJJrYI4sxVIÄͫUR:l^_ -*n^ *lz[fLw饤\r?1`Rɦ=Đ٥ۥXJ%(Wb/oWd#2*줪p {JJ:c>1Uۢ,})zw,ðSj.'{JJV[g4*) o^m +;m7Wt2yjNV+?gZ%s@Dk *gXɶ+@WR#{JJvE:{JJ^ҭC0{JvB)ЩZ% ɥ=4yJJD*)S t^@^TdXI(нb%5y b%[ȑw9+VR^QOwGHXI#r0{JJu?4jGzJJ}^xܚb%kxb%UwXIhqF^{kkdlUǤE3`XI%T<{JJP+)ۨdW~s?g<[U[̧}ٻK/_BfZI4wwZI&2}[~4~'N.XhqLU+)Eڎj%w֢4تXW=cM^ҋDӳWt vU+)^Dg\I֕.>+WYlH\IE(p.^ɚ\4\: Wn=[1%G^Œ5)xKJWYn٫XRzפozKf j~%NEҩվ)7ΝoWޗfgzyKJ/}Wt)b^ٮio?^һ잩t~,),)Ʌ/7V2yKJ3,ي;"+XRLw`I4F .)ꕔ>&yKdr,)& W[WpI-tvCS^I˜+)/d.h,^%NxJJG_49׺Wj9y_vr8jskńxJJ 0D;T-p/^ҫ,[@9ꕔ.ꕔ>`4@Lnե[~K+ꕔB%+)]+)}v+IAm5mWtU p͞Bn.^ҥH z񪕔uٯZIHtw񪕔^kJ~J[͚v\ԒwūVRc=KmG{WZ5*oM^ҥjxJJU螭j-@.1j'(H񊕔nI@vv]}=SCu7XIh?(.^Ub% +)}YW$]uپtsūURzki"VIؿ?-^G|, g>֖x;?}~~ϯ~v/ۗt>z']3hZdhB,6.wyKv{" !["Lf ;HYdf(= Ls\azA=/VfYW%s'=&zbLe1ov%ڰ XB`OˣF:  .`(lw#G C+YaB wrHK?RE L>wJ}핂d'7 Ǝ}{=t96Opmɱں.U;nM t۪Bju(*Dw3¼nEoen'!733n:`c(p !Z8KH`u2_F1;S?.ɖwĬ#BCC-GCfc> ڐ#gMczv<eXF?0RtWSig,*&eGhCzy@[yČn+j@\x)y@D1pm5{25lZU)YEdeڂGG _=@Nm"" &u >: Fttс [CYH Z:Ttu o(XV0y@>]W/0Q@FX WGٚ>d*eEP. :IAK3U]gF &M @: 5jR9som Z΁Heġl[&H�ƶ9�¬9&(&(.)QtjΚg)mJI Q@Ή[m�qhζS! dm�s$ȡ(lMك$>mȆ@( ȝ0Gk?AZXٞqJ$jzz\`zȑ[xrԅ:!3lO`lςHhOF6c`8r A 3=V.#tikҴPL([5Oĸ%k 3EEKca{-źCGahI=v5q'St)aff)9~=Z HϤA;HMq[P<L"䥞stQ<=҈h%萖^ak4}tGc'j+ PBdKU۫G rW܈U45IA<l)8fQh-&p%Q􇘹wB%6N٣!n5"QRKTUlJ- rl%5PnhjKJFo m#'6QLQt Z 乥\`�57kP�< hCA[& #w}C6t!9rk@I'O lbpGQ[)CJ3~у41L.012jAx227 QP (sCn)ȘlP Z'arɌH4HqGǸsrò˺"@2xJThՈx lTakw_9*3*T4(0wXO6ТS-*F&|647 s\a23b2p,^idg.id^e*Q9#:#CTHUkC&H2vttDǚɣtj.8v\9#y<c^[ sb53rA!Sq #C th0e5icYbz5&(SG(rLRF^/1CQr ECF0,A+LfX` sGu펂n9tCeKF45Ȅtd&#-?#7&*M 颂@3mn)uY sK+(rؠҳk2K裣R9sJ}.1IqR.#s9;K!d#@ L҅<07 -J ,x䊉2$IQ=ǔ\鱢)7LlΈF+r` bAɅaB 9.|11h7F~3ț&-FTE˾ACh7H<wKPGGC`^I^"A%D k v}~(f)cm)%yg7dލ}EW_mԴvI9nci.մJA-]` 3+ Zk;8-%*Qn-kSK=bI!Wk[atg!W2[i~_bi핂)`26:<@˷$ƹ$^:w\P`BD7<�9}(ɂ H{pCp-%cP r#QBHJH FHHC,sAԏU YARs\'>\'; UkjKLjPE sOCU !4A# d(P$) Hi7d@M%,;Aʭ %#C0'-cs),m  4t8FcJ$Q% BSF( (={( L]@d] >%&T@Da2�Zn WjXYP&mhr Q\C znswtP?r\`2wp#yC#k"rI2wIP}RN EWP%RPr/Qh]ҐQ"�.-{Jd.۔Mɚ}-^B%7A;Hf˾!j30–{SufORtБrE2e.1~cfmTG0T)Ge-JAA;Ȅ3ZIpj\k4 QB7 Zyx_Bh^yQąX1pKhCPNI`NINiMɄ}]DdX6PQҘ{KX&nx%%=RQA k I;wl.(LVr5),!L(ʄ[AiC L!gR\ cXX@-aưm%ē{C%Ed mxd, `Ȭzn}Y4yC 32."r)NQ a2o/zY߳o7_]ׯwg~O@]&%H\SLDHL pEI(;diŒD9* %qGZZQfnm&FB4Af@CW#3e@^oN^(ClOsyЍ2@زb}d=FA r] Su1)C Zt= -j.kQ G%C$|T5 W6]v&c˂{c0}X͘2m=K�4lMp b7BB0a <q[{5浝Gy6FkoՆ`,6:fRv~s#$k4 s6 $Q4@%JkDG @`H "@` �Q@l [s5:<D 7[ kd>>A6.b9:F nŨ/# ;kf-B[C[ȭUH-cK#H(9i3ֻ-Df2F_| ]! n =kҳ(=k`PkdYa %꺂]fOvL."ry [%kޖ .ֽA"skޖ5oC{PP0qjQLњ'#F qDc/̉ko(xCQɡ9= ,(@N.#3PP`$$25Ȃ?N|A22j=Q22 @2 ̠QV&WjbmJdԠEu4uLC|nsC:,̻H9w<xRC/N!rzkoY/q4&>ppŸ=z;rg#~{ 1WEȘtB,'Q1`>;ff,X-[2*o E0�<Dר]@\P`J0e AZ{Fc$SGG. o@K-Acrм 7NL$;8IJ':nq(Nt)DO=�<qG&̘$c6zB9$%QIs3@ dm+Z0JJJ6[Ց2oAz  '6o>:qXk*fh Ӆty7䎦 -t!Y7iֽм+gѸ":{]tv 9oltVٝ ߬k>ψP .(01AFBp)yd>1A]�Pg 0DFTvЅ`ߧ!Jf2JC WF0et̚gLd :hA# =C6\膚U?d* uQ@"dɘE`]VZ%9(eQ+d)IIYp!st d 'uT8.ahƣKXIQpMsH#h&SHF&HT`dFL:ws4ms5cez T(+dĐNφ,WtȮ|NUӍ\g.F<B"giQiᗡ9 g:&#RhF#@/8A=br;X2ihR/3y M0^ )ɑE EV Z4/2KEhCz[ ftD{!B4č A♡KKLaK <(0Ŝb y@ ͐R>#wD]Y.822 F˚E RT T "JWpǀ+M%ALfHt 0t@܃^{(2{d) G'eW.(csCǴFˑ1z^@2 hnt]1뒂y.1=<@ =֚.{q0ui%`PNIMP̎QnI T2*P*y@EJ#%(S E79`Y#GPs20[>ʦ9fj]!`:2ƺ u&zM8MkF&5cM`̤@M<*J栥hg n@?@QSYV f:Jh):f)Kp?2J}m)9*tT<;hF\BhM;Jh0-DKMU% 5+1jVrͺ5:Ͻ8M砦pi 3#]B͚yc<B"0%cZ+Hu>~u薨б%eU+<ZR_! PrrS[(V 5Fح6~ea] N2qL7cd^5!j+!sK6BTzM15vH" i5(r:D͚ԣS4ǓJbN_ɥCJL9F;QE(,(;)0;0;s; faj 5|=NY>/$ylcj@!\z+:y n+x%rt 53Up%SA*X@W V8}9ڀL59@uԏ~n+d!(]` dqԁ--# .F9r1yl8*P 9cj#@EׁOP41ࢆsQS'(, \!K=0zK;Zk:(`MJ4wmG(r`2w* HϢ%EE:#GrȰ{¤ 0nNsCd'JF܊(v )c( fe(em(Qn(J31QrFu9uKewt fGA( {Jքsh&;;4Xa<mbC7Bc`;8G}7sF\a;?Ա3Dѝqw R vΠ"Hc%t:Vrް< +霢F7l؉:\`27K=lEc Z.I tƯKQB  hKN䪫7;0%b@$J^]D]Mr V$#T`$nGq J`W0JCfuD(2d24(2df(=0F {o>tϿۯ_~U79/C,#<�;FiP a2azA=;ED eX"W &3J sLA=;B R�6?yB܍yBnm =^q(YP"D`v"s;w 236 辮 =@�F.Rǀ.*c|ul#d*`b=1ֲ .(0 2mkstCaRclZU8G&z)YG8v ;ur\L*Y;j)=42 (=4ro҂=Y3V R 8SX<Wt>(MZAY}iZ0Bk^R VMqz =kZҳ(ut(; cRM[׷،P2AkzM3V1B<҅ȽaY\[\4tiChRG9ZB - &�ي& E&̒ V2Ls_ \Q> mbٮRXc5ukA * [Jߵn k=HfK1"խ1dں%ȹuÌ %r)CP b<GEKZ<t ichZ%c]u`K(ANIvր-AD0),2sF$kP䊙se#]*l)Aꪸ 9dj(mpC<@ڠu6h:ZQ0(L&<r(m,(z9QaI4^e\\@) l9r"ϗ hRAkue'e' ؎ h~Av"im'a2h\RN<AE;w b ;h:)듉|oA FNY`PF(pEQɄrnqr�ķ2T- $q4И)3L i]"v-\n`Ch K1-MqwGe pObVr"!y0 1P45*c;h-h#MCh({ ڊG. bem*hF } q۴#gH I ERrϐLhI5#Dtc$ttgPK;5s@5ě;n`ACvMs9(WD%s]UvψSjˆW &rM#ceh2(9Ci*g2FI\J."7,s1Q FY !vHA=GR2cF :UAutJ&:HȋHHa2dGkb)Gen([i aAf*5J'ZN '깯=~{B2(z J,{KiE|8o#cLȒQ26r0]+,ufɲ}Ѵߙ$24팢&Q(id1ztƐIE0k ".- C4LeCFSc8`%s/`LE{A M 4/eKhCV UcKPt G j&(0(30Pg ;L >߅7eF\UqF"swz許Դ&ŝsQE$OV2 ⦩dۃ\G=4*LѴVtpB_ 3c7HE:x9gK &"15_[1@ȄQ%в%64 G -�ȮCB9:HHYL !gXIXfic@,X ׂqtnldyQ! Hy.)(ARPRrQ`R!Z 3 36 -uTPPC(D]0EoAP˻W֨̂xsVG60=^!1EQZ!'G89@kX_?2f5фqN\ ;FȘy<rI1`2$WE@慂!r&FbM!`Ld%3dVd\A:.G<֘rcur,VLGMd 1Jip%72̖T 74O/ ^."Q.j u*0[UP"( X$pn?Ƞ{p+#7.0 %!#xd} } }P: ] \+F`>A %dΠCQ"c--\;[ϘddzA#K iQV!{ -qe,agK+伌,cxR[ 1'fdY;d5ke~dy;&6Eܝ  >B]*+{\C%Qτ"W\ ana 7\+T,Rnxt Z ҳeuXڍucnid(2d_c׺_R (dQ$:䲶FU"S4 PRѝe.f2eD( i,OF{E< ɘUk'C囥(�s=-2d+Jeˏ16U[(W7MmlR0 {q$ܘ0f֯MDOɅ 'AJxy<0GLcރX3oZL= ZٖQ4u(s9J m >;A>[id)A ejoě ( ʁ;1dԛ0{>.'ˍpBdࠦ0 YJ4DR`2 L2St*R(憦iGCCR::F`@ tF,Y<#+cK1i6 ?͕ Rͭid蹨D6RR04 ncMHA\9b!Ҏ@`qPpY}\0;Hf WB nI܏4P@9rc;e?3w/_=w"T{9"`s-=d>9L\-VillwۨBxA'5<m{n5.5-Z0qmOǤquK˔\U )9&# G/Ξu<ߪ/G*Zt| 4_sy+`npT9i&J͋ɑrܧW ˊk*wԴ !9J%xÔܣuYD^,,E<۳~qmP1%W5ȷ*.}P4%yyqF\v_H?K(,#,36d' Eh֒)F-%>_l[W7+�i`Z$*t_{4P67}Dr7kͪ^?G^Wu_AU|!m'}D4%Q2/E#Aoxv{]|GeW+~{yJna99 dy<pbtvyaIJ\n;m3y,ְŌy=ym/̽Sm&J-uѢC`k�wЕ1xqՇLV(y,[oɕ6%j[aeA-.`زԵ-=Q<Qۂ\).<zpG8jk^"-(w;X`:{ ǂ\muDt΃B7 ԩ"̣p1eh4K2u%L rSduFC8O矍u䨱RvZv$!9<8Ѫ1T8{*h/]r *Rty,S,<!szɣGu%stYQtr NtFs1I 3b1/#kCb7VB#bKr>QpK(Om.|l =zwKT1uE2kTj[ CcANA M#5^-fuWdhuĥU#EEW /h<Z [גׇ,JT豨h:srlRuQwUB)8\aRDӮV=a{;jr0a-57C`Mӯyʼp>[UB:Qi R˂<u'6uKnX#N!9Wd"G[٘+Ffe󻓕�=<=R%#p v?w=-Kjcy < ڊLQrk ڢ BtpGnt):Wr]t+9]-EcmA-I=9h+0-k)#ڂLfZG<A:{Q!GtE3ģ]{#ťTA8A>c YDZE4KW5PL px9dEsO%Yt9R|ˌ!^xy8ri^XkT!=ɵE ` %9ˈtdC(y)V/WG%Wn e)Q[Ofa,9ӲK^ԼxNrۂAd25pzm-e-%Ӣy(y[=S;#;;[ȻU-*ne/Ýawb{׹Gqtݼslgѭvr Tr_&;uaPWɴ ;)y`){,)-ۭmʈJť-JW~u+7̫`Avkޔu )rԑZt Nn)<|+˜nyqJ܌2re^5@e_59iE(䓕0E(5r$]I] 8jsypeKDss민ͽa4 zHٵ̷كJne^>+5 ,z^ W"l)(yh?,IJ樢)eJnZj2�XnW+NVRܠ#IWßnخVxJ- 21ΣHۨ♲mO-mأHz+yۢ]xb@Prk˔=.,عD#K(2<WrkyY6ec,udÏ$a+Y`u{A}0`#b{WDzmJt\Pr +dLl)(.qC1uMF7>’YcOy 8|1E/ ,Ʈ"\vyq+s-<@#rasfxЕ{!Yz,d7,NsJ=d C}bOuq*Q"6 M(#{`~oKE|rmG6|}rUDNmFy\ې#Z3E.J=o#Fg}lL#/f2vĭD=!Aa`̷:EL8Z/RK=2|%Su9i_!%RCFB}Sȫ69XK<ldYތkzވ4v'hDJ4?[yμ4ۂE6,Zj'<oD%9Yt+/E#R1ry9/ˋF%xʐ^\[,`,˺)E~f̐㜜i[ٺ+~~aC CsJjEaiيe+RQiCXt|j˚,ؖH^#9*iHӃHkx~)E7#}2,ȜPFX+p`i3RuTRϛ/[WrX./xU3ޣyލ4 ǀR/cnۑ ZҔ܂O(Y76Zvn?FVY).._v~+,Gz`~h7}͋>fZ)8ˢinZز ݑm -7{ykfhFC)Cu/pMiǾD52mDj {<ᮍעiXB7i.q}J=oEZ4ocA[HS`L)H;cH**tOh7D/v8&lu>F3e.r<uyr<L[L@u16Eƨ=wZXc8/Au Q2qupwg<_Ś3(:7tѩCE!y~ةۼRLZ3[cSG꠸ДGC9vW}A֖1R,KA(J$p\ #|w"բX�tP`Z[\\[we2ߚVЂSx�(*eW6ڙQ頮5x)Ko hNl*p)*4#.t_ U*D? . p4 B35āqMjeW>Ҽf\|xRTOJB"v'bw"-VEǰ@ܴ.¼0m^ZtqMq{uu)Bv:o@<(R2u}A>YT[*:xZy kMDJqyzq"|ґZF%qA-G!9 E9 VGJYl[bI.:fuDeJ�dROƕm=q{wjo�es . pq$)rȼh,Y/淶m#:PLNۤJ9B}MpNnѸTe1\'d`\i-Sp@w5GdYx3h+|SmDyA׾(/lHt X0RryXP2-J6),ĐVD%9XdZ2%j a1\zz̟= 21Aފ46|3E-H]\8AִzTjfu>%y!],\.SQwˋG},nͶ.\8=x"dIm7>�hZ/9}8чF\R}7zїBwbK|з(IM:8p}1oŋ%.7{Z{+L='1l^lX}с5xemFT6{Y#$T6yEN{Z{ "Kam)D(V:^!\LDOyyXZsQ2ɼ>Eʼh<iHIѥ/"z(uȼ /Z rA,:^*[J9d5n^!ܭKX\zE$lEes'JlLkq\t]{Z\:! R2-MÕ͋#ձ R 1M]/U\̣t TZ0׹]zGl+<a}pKG_4W2t緌g�.24oh(G22i�* ɐi_v w*d /A.ТcX"M\iѢ8`⢦yD}ȎĒu ˂<u%X+H\>n\ C RL rjse Q�䐤c( h/ 4ŋq-P[ݓ%Ye[4U˂d=8ch!z$Ћю> (!n+W5vhx':J 2EmPzAcѱ9hBj |{2d7Ûݹϯ|^<g~;+YciG` [I83O\ӋOۻFQ#dҕP y eGuLkZ*g`a;9r^I=;)ؾqڐ2Nx ~? Ƞ̳8n.iqbR0΢7D�K>@r͸/mP`$x3 /u<J'/y\Xe%Tۗ8~Qנ4ałڗ8~ʒL̋ zejöX`0N\\<&~,Yy3={CK,8WkLY@+ `[A^+7q(&mvgQk!rWgWX�>,�2ׯBg^A`Ə!~y',�2R q@2A#+^e:|1MdcZWK)A�[@vGβ(-q�yJw/!F[)[t?ЍI6*9*azNg"I}бmA@t.ݯz;^u:Cg8C'G\CiӘ 'Pɓcy0aut~8xI692B#'% SFX3| ҃Hj"9'/z?)Ȝ�SlP)H<, LnNLZ]u>؋@J::9UStdL+adFs:r>B&uu}`Ȭx`;vKAb?6.Z�s29 ;y 2}P?D{`dIt=tr*\i Kg }0q:]58%ғB^;`0 YA*Y�Y&V\IjpƜo={!چ=0xi: ɦa'6~+YPgh$S:~X͉*1V�"ls=;m ȋOnFE'wl�__N&5,['f:xtK-:EqlP?ļ>D&pbXx,llh $#<њQ'/jdW~;m3C)ڋnP'O@6e{er "|]UY?swZ c5^ĝlk?CpW<ђOm+jucW)y";vmbsr;,yޠUxѷp~Qn0/=bsIv nL'+,�YgTf )s}h�~]y,FN6@?/:>V=7Z"_s�y`A` Rhǃ9` 6@&mC0g0D A!^;Yw l`͇zؼ_\4:kUyMcWm;0"pglK,7\! X}ş>pih+6Z>/ѝ7P~޳(ڄ@8"'Ky '+ NN xw6xf8nz&Je}z>LO:zJ>.35o�\.Mdl}?hLɛyu|L8Yh(K6/QJd &Ozd^tH{~Zp8{cW>m׌G�"F?>L /H p~ j W@<VC~,c<ѫ<u_xZƓgțX?D&<{2N;yddr8L?nhg/#U Bh'rYT; P2#OYc`\0χK!KAB|=LQ~!'N7$ǀf{y-Njgה^k^49,t6w:g,@5 ӵe <@n0AD{�Rq/ 7^f٩AtՓ @HOq)v{R NY;;WRl^PRkA%ɂ״"' Ӎ¶>tks8O#�^Л%RHg呞?pS ߙW&K@@B䁧@G\NuԯNP =W:)QlQl M^+(&Gk GǕ>+@&r!uc=雳pdɂ#"dDoƮziӽ�@4bҿ>h ٝ 8 A9X\^A^;ٷ;|�n _lʯzmU "o|b|!`;)G)7V-`yqhy20`]]v7* -k^Gh<I~` ԟaNVWn.z͂E@ɶȇ܌O0'O`Ex#"s/Gz?͟~2fgȊYDH0vxG:ml^JS E|a&WN w|7b,y=HY�KHsh''>1  |A@އ%@CsAYRP,Y�Y'G=="532yd~,hk%#0:5;W3c䡠Nc.Z4MɛKe.mC_N97]uȶYAk#u&l �[5uAM|ŪOn섃b UJQn"?-1ț~ xFi]uK7[tUi�k&OhkBWy'k0IO�|v@JZ]�*K>Ț$G>1_C`@^Z[e&99uN`y٫g-o Sk`5#A6@{bɏF~5U'?NgWm? My2 d2j፪&p3̿^/Od+(4Y&KހLϜ[">Fyt#g̱Uo%M&=r?+>wvu;}Gh֞O򯡿n=qy2?< )ʮ:zEO;(qu'O@z<2%NV@,�LBΰ@T܂<gp\3FER ra Â7�_& BNGm*L 08Ū}WU$kf3VedDٴ^<^TNК&cmy'+OPw[u 6PZK\Y^Ci72䀰MX<Y@])NF ϓĒCNހ<iNtd< ڻ'Z3aʯ@=}>'dmF o=ƮZyd;<?yheMW̴#]P.z"Wɂ-/j}ʀ:!_ԟy`G.+1Y {#ZrǴ' ޖ'd`W|0[]d1y2_qm?jyftܴ<dT<M_PUl`~a'؃i#{W^78Y-lf/PK]ltqWEˋ<s)}!Zi MA~P~ի1~@L? &.C/<�sjy"3{lyHe텯{@}R{g_TUWX=Vy`љ"a8z9rZHV Aiv`f&/@&NOϋqt2eG|4Α|7,YPaɧF; s2&`x'Ng/ƾ%6rqDN.vHYr?<Ovț8A5>Y)xQG?4bA^=M,=Z g,E?w</5,;yH0/;57ڝQ`*v:;=(I}1/M{ Ȥڎ &*-cp 6ydJη8y<2mS6\av [Yu)5_QV^.g0-# mKsk 5s2 #g<QP͵'f,k"a r?!g a LuOdP {e?#' zzչ}g{e^~VNtoly9.0v\]@>"C#C=g ɛX3pv:w_" ^rF: ZGŏޏd}Ka}$%@۠Q]U 9p4g m.*jU#{ ݓ6hvO_۾iVtIT;JlW,0y*=®:JTPt&cU`__:hԎNfv3s:Yz'o:skщ.Y&yoO6T_�u* 6ȻղsIs-g|`^w_Q^;W#=L yL T{-e-ػ`K/l!>ȗXsllfγB$ȶϓ4Q<=Zdn$Ⱥ9 m{bB&73ckYS򦭖m-g$ƒAހ !g v8] @Β'ހ͙-Y%|;}m{~P d1d:K6@ɖ<:%#-k-yM cAIK%ߌvXC?¸ o ydj /7ylgk~gWbdlƅig2%Oϝ^sF:\[:S]`c #ٜFŒ7 Uǃv  Omw֏|u]@b6LZwGDذ[8 [Om ƚ^_Oy2+ BdW{,6p2l^YV556g$LS` vcQ4|*l>ȋ ] Kcch璝N5Vyv>n r:d@3M9r:yɒ & idT�UۓLSZQ[;{/-@6:Mu`N3c \%@^4yq?ިGwd vmS;eRHW[@R_xbW;4{ z_i`i1DiPNT]#[Ds<1סOmuҜ{l0!y.|�y?잌p!t�95vwe#/!Gs^L U6h< ??a&P!y\RY8"4 n-$l9`J_B_h`J3+,`4 ~`#_u|>  'և>p=1\# Q'l]d{}o+Vm$o OhpdKuXG(&ٛ9gm\u..n~Ż. "b7Q7]A< xsP;[h$3m h{hWr@+fW,Y~ dMﴟoMCy29ķl-w=\r-y0vYihպ70h 1HF>Мy`DGb8 C]"!8&b /'xH.~53K?5ѡOь<{SA.K?ECg L!@Li-iSH2 k]-PRuy L!7уD^,Yy~0$4vgχd9i l25x5z |Ip�GjrBBX,E.go[tŒ/ AJ,ɝAK#zugWhg�m ‰�LA:y2={¤sA8T|I}-OPxgx 2*³ɫ d8}u!YL? = '+ϣ;m?k`sIA)?|XLn:Y3_�j?4;})>Rp6wWm6*=o bd-O҇9ͱrTzT ɶ@=SO:bK׋`Bd>'Ol+WJ?$LXhY^O-vl+&K\6\RM ;ʇSH&~|wdz�qSݛN`2vȷ/|ޟiyҷ�{6Zdqdmq'W2I1Gm$G*9�0g(o(=-?T',X K6uahr;Vy.A_zjwB(R-ɒ' l}OZ3z1ş3keL0΢;T~AS\5vl}HSfâwrh^뉑LeBA>E}oj�KYqe YyX'C5y5_&'.ةNI\Qrγp:{vayjp16jsJ!rURAG!ٛP+wCws]DD7s<"@;UO6uMm٠Op~VƂ7�/eɺr 9,y20 ;Xnjx_9g#9 ϝGBtʳsA& l̵ ) O@LCzXej]4hyˑ!zL= F_6pmnU@Sgczl߄% @| tCuN`VG=0;h_$ {^ <Y(`$:>T8$ocGh<{[^Qldl?]AS �MyKV@fO%hn5q<f/4]Ge| |G'?�~u3i>%[7,l?q+\d'w6yg%4ÖbOyMz1ҿ:0�n<lVG1kZ jdE8Y,}`<ݿ<#9!y/F 9VCqDL>BHE<^ q6a[ �^,gd *7�r7.w9Kl,95=@6+zNjdY_-gCYr۬7uvގ2Y�uv9/2PRq)^ @}&osr{8|teٹټvC{Y~?_7", d =<%# h> ,LkFX-ퟷl# دţ$r3h: <^*Oz&A/ZgKh|NvvЋfFS̑EN4:8u6D#[md@4hz' dɨm ~?@'Yfp0(0$8lϷGEo@fx$mlJQ?̭))cs\LcoAVYԌlB, G`O޾x #*9daFW!Y).<'^a*H=YqI&Kx*+KL#Nǽǟ!hM@0}0gU\y:s] dcFS+D^`^!sA{c\̊Ԗl<;ɽV<$Ǖ<<LW} j2duE|IȮGb;cVE'kJOE$y\D�vܠ 3ӻJIy6_drSQ+cSγU1=TS}gO̝]V{Љ`'^'ړQv1Г</s09`=/,AvCO3~L ]/{p?憿Bmc1y Kހ|ГgyIQV'yWT?1yOy AT kt6 Y@Oi~VT !Ư:C}m!4lMk!4Әb3:B`脳^K=M&'[#dd2b2(NGbyQLQM:Y;ـa{u!=]W;tV+Wm`oh "4Y~c<Z)n46wȢcZ'& 7fd>m<1Z[?MFKB?Hdd,4U|Uݶ /@ Ζ®�29͟<zhkFz٫îZ4e~H c=/N&'v^4:Y�|N> \;tBYɣ=n9y<#e,)y=>yGم&a:IVM]kY1Q-;M؝>CSț=h;[9,ɛjyĵ#0\쇿큼8y ,aqvOqS7(D]@Ukgdwkgl ϛ1gסiG'm/ ,`^u~0ɭY?*G719z MEϒ'>N)k%ǟa.#Nv9y f iOg>RG 1@X@) dLJz !ؖK+ETH~/U -E'G8<4<r2Ө(䍲WJ޷֟EMW}^hMZCۄig- 䨕rA;!G>_C1-K;VnxNk —=F~oO]6WL)�>A惝{6a3OL&;~zJ܇S{?ndw$tNgsmOruPnG$W׾izd l@qf/(K JOA83FF<3v^NHk OaM>)9 8A_3u2*sz^ЫFMu;㰭k*y2 2ҿ@Ep:blA1Z.)ٲ*f7$-m PfHu끛 y�}齱 F9,/>Uւ,/.g?ݼσ*-bZ`cLC{ U(7 _C 52506{"6jmg1|,~an~`@lƈqhx=="_hSAVоK6N!wOgh<.vClnX}̏=Jd9󣩱 {ۡ@xvdr"$b�<N 1Dԡ#y hzID ~J(3\7 ůZ;;зg=Zȋ ~_Op�}6FGJYb;?D{ ?d4!,Xл(oo a4ץɒs{F5;z;̅XDZ7s~( '['- Fg'􂽁VʣGv;wQ8aHU/ 6Fή)W>P]i76F^5Gg?G/à<:* _.Cj>?˖*^)-$.9l}ˣDb&# $ϣSutZ#I?|>m9xxև0H,I|A#V HMd41SC&9ϗps@߾ݪ`K~dL'#vqX'?Tߞ!8YX<x$7:"�fSLs{R6Qk^oˎ6#1'Z?:&O~`7AdrC\g "Sz? Xg8 -&goUkF3\̐ROq?0 y~ݏ]0ݤb@:y2S 8L vaB &hm`#|G0y]2ȗr_+8_OG/C&B Ƈ ,y_?daniyT> [G!tȗ?7c:[;{}=k2$*;t 5Fe܌T(Ra}V#dCpx쵞EihLM\Y@\S? ˧Sal5@Sy1܏PR2 ^+r'U4]q,ȩ6?JJg0%qZX�2PQ�.5qZ.e(џӀGgK$l?N~#Cu'Τ&Pid?Ǝ^gw|wP53˞,lz7y԰73Yi> �l%'7M@f}*]aM {v~ItY@މO/ًKy gyIp&+ל '˓%TzɃZr"I14'/@`q2g`qBffOX/'Y@ a v " kq$?دWm )yx4|!�×q5�Z0|Y|G1`髢Aɂ|XAd+` ,d3IJ <#g?=8,5udٳ5/}o#'2[5 ɲ{A^@ςTʰ\tw% "i4fA^@/,o�uF>QC׋tC\̍ /~7Xr[oq�I}Σ2ȢO<u۹玑?ſ"y4W>3H,,V M'/dl1t@&N?iVwEu#MDݜ�Fyo:Xb7k' s'!d2lx?C:(tzĐ7&-vHПddV7-Pa"W J4IѫaO%D.3]sgDzYdu撩C0VraϙǏg1NvVtם u\./oyN" 8l;yrx`ry?a7:ȜdFo4+y'P۝]sOf d+P3Q+\cMPL\,YY5[$y<vlt{h E€qB '}Q4 7H #ѼI7'#z{zl{r0\u-z7m/*]ϧT65Td [ZAP]c�|Sѵ{7:]0{w!|Ə`v:Uu?�`"3zNXyY,9t?Bg fI7 Nc>w>UAnS1æe|?nŐ]dN+Ȓ#4~?(g~C_#Z?c � lqdF>eω E0>@aܾs]A_?@Dp= .u"EAtl8 #eƂ'adv0�DO٫/-| !,yݸL+;E[istRʧ~7Vf\ =:,Ƀ##~A^lߎb;%ۛM?zD`Z'�#7'1:3Y?CAU+P7Z>Ag:r;|Q} Άhik~O1icMm:Yf<˝Glw,y6a&8A\UkS&^yuهs4Fw O@f?OU`j/fxdnzf8z68{g'! ȜHDEL2^dr*:ym~պ:RuuyϘoLcyɞ/hR|0Gddk&$: \ӹ$<)vN6@&疦@R%Oɝޅ>?<'g(^M@^|ͷ?L.޾ Q}S`{Sql/fMM)1b;!\' WvժwM >A;+=D97c8'0rt�_Sd:!tsaR<+�6=/?VGx^ Y'@ usb^$g\=*:y%+ا~}钃\9\==lE3'95P"; dOvNx| +Pgm@O,xK·;_)_ :3p=963vOv:SY]2LEvPÊPGC?1 t] - ~)'o@’~D^ ٻCY:T= łP=y?A0 E0ɮ'o@~7R+DfTvkGO퐙QV723EÎnB`y3{Ch&k0zjyI퐙glrHI�.c;q4私A bȋgb6țX3=�dZ%KsN^`A@>v$z]B`c&<h`kx?G٣Oǝ,IɧzV@,;{v ̤e 'K9o4 ixؤ8x�0C@Λf �2{vȝ%giwg%i&;v E j;X`+Ozssڄt|6G<�. 9[DytSl/ßbK<�N:{<E �>=cC܌ pi::{I~6N0g^pV b/ f x_P4-^28>xL9y�2%yJod!w^֚ѿ<,;ɴSP},oסOT� RO2)r?0L2`~ @'cK=20lZ?qŘyg>PQk &= GLbhL3~y#d @CU`R %f ycDc設�ecǓ2u<)#j|;o&\<0DozUIo'눴Fl^G$EtS<Bs{/~/jsV2-j>ЪQ:f=H0[`K}6/Rpӽ4nO_�}%{@ylil uIF>#OR.a{RΧm(/;uEYq)o1TU1t= le[>ۘі}8Kޓ2^`+uO pY{&0:/gdQ\&r}.@,3ڷv2 ̝/c`eZ:d~&s%q\Y.} 7~qfnLw__`0jwy_`e9*.c\p:!opq/#Rp >RmSi6ߎ]8b/jp쥃1UuY.];Fi32߶v�˼znm~[ǹ`FZ#kǫm;w^ղ6&KZ|Rm+wUQe[L3N~JP --f~;M"=W۾ԩk\俿\xN] ܾxK:P}WYsE/QI +^FHN;쑿6!H;gjҡڒj8LPGZ/Ճ% j"*~/ůe8Ddxgz UݵjK䏒ޒPɷ2__)8|) Ё~鹪uXR *@?ǿgL؅LVq ʜj h]zl 2;v?H~[l:s .n 8ȖS}w\ 5kBvN'/?"J #4n˛fZn vvz`/;@*g2: 1B\bDFDa:{oM7jDR Fjݠr:bODcd8pBBM9=\ 6fD>~ d+d :y4ٕlF%\@ujKpAn%?bTr`쥔Ǭ֭"wkjݩc x({"|/..'L' z :^c+P׸ d# N* VP$'\ٚH 5 a/J[vOqٛ%V X/1ә{M0|Ys-zeUmyN_X.` llt!ݩBQ/c'Ei[ET .j;ee b.G9@TfF=pI-fo-+{%y#S:U5g@wݎ`٫煋[-QGK/\:&jqzF{x>2Mxݟ6)1.i2-�8{X2k[xѸx%%WEO6=f {p ~7q ~jݖm'yvnȣM7n?2% c[|ou^d)/)<h8#/Ǯ=BUeVh+[>@<l닋[LN 䲴P[Amz ~rN}pxg_W/<d͋Hq%]IgR!e8':sU3HMbs0^ ڥZn[5ƨH=e^Meag[}'of øx{c -3/.\~p  t+~WyU'\l;lzm~jڕӂm@ Gqݍ=zՖBm]A+}ȟ ,ඇ D[q-^%WYg@ #(S.ղeZ2C.?}Lt&g2ŗҀŽ�Pn(nDkyo 'JØϰ{["\,[F?sm&:3(̖vi7@]Mj `odl7ŋOüʼn+){_-~ E>t=@rtS%-_NA-6sg0m_A9vzf\^oȐѹbv>2gL>xVϔl#lgk$g]捋SO� yS+.;;[duFfVώ6wY:~GaTC.$;vV5.?8쵔w (+b! k¿H5`ϭ�ւ^_CE`Лpٳ zSꉍ=�+ jRV Is+kPmԉ-oc0 C݊eӤT N\=?*�w[^kRl5}'UX<'eW<{�%{[^V[`K.cl]&JEPD_{cbK*ը;WYbx~﹓_[`qafg..K2 vOa j`dpgw^`O+LdABoVJ 6Q[zEIVAF3xM@T^纽vUTHf+. P1`A=0xUl{Tk`o3sޠ  e_ޡ>vO_d6 UVo{\mX {$#'^ZB*;?L38a՗.{FM(+?-H\Pݍz̼=Vr>/]G1I?hz.#*_M؛L9{XUbЂDمY]?}Ncc nz3 `-5)|Spk;Y?w>P9GSmF>$t(7i`j_cG4(^3poo+K^,~q"#:^ ez&9#5b{nS~A6co71P &0 ]|U&#؈IK/l;I$PlK0owpYo) 1Oi2{TU'cgQQ߫}f^Xʞ'-\ŞṢ`opa]V ߲ ߸=-SMD-pFU9oZ86s,"a`>G>l.r\r<n`}@R[$-Z1^ŗ>{3m}fAqZcF;5R-{ 0U}@.w6XZ?i~Jt /ݏ`k(S,[0^, {euvW?v;Хi}NZ9'跁 e6.R5 \ZyR1>`Odxua]z7A1Ν`NLh<vVn8gϹ"<0MꂳO w챸NU`-U罇߳tfW=,텵Z1 ܺ0lkӑ([Ϟ!{heW>A۸= xv'ޠy.4L*Ϛ{F;c5jxo;[3R;u%prU(^fw^@fjFU[Qی6.ԕnڸ*BAtJaT>_Y/32,*='8Mdklb>{^<P2Q%[$-r ma2I8Y7T teR@&.ېB4kJVV̖_bk[oFVtou{+kQZ7 V1r IF,N>}ZFY/vsB>k@\ϊ[|98',lxhj:,D \,z9zg m}bݏ v +W Dݗ}[O[|spelTOSպo^6- }P iҷz^e D:sNrUV8u+5 N+TY{D0Ѹ MN֙GTQiݞ&qMzAeo;"FqOQ~lZ(\V+{^@@NigZ>쳁g*!PT{\Ko'~^ x-|0;{}سWp+ emDn˭^pkG5( Qbukv<_s7e%Ttx_&ObbSj|`G=-JMx; [N�Vv2Q̻QƧ`+p@ڬک&c[~ɝvaʩVln=֍߄rgp8 HYQ.iG zt�#m |׭f#N9[d2v?Rm^^*a䮌-Y7CX~/rU{rAYa_] O%tyΊmPiL+g�6)8\1S�ӽ3-']&Qϛz` Ξ v~_ns霙B_5G_X@hjnqo{T4}ui{|b/ 2Yo2g 3o=#`/n&ֵa)سS�h읛hT2Ke#gE<2ɫbo[xq|:Iꂒwn{[/:Ivڗ};;ZML{Z =7S�z]x`oUoɑ< h~Qb {[&I}`t.'^w\)}){J*, 2F>@x>07Q(m{QVlIS) nһ@4}k0nf� juG(75@ڸ>&Á _ϡІw;J^yK,:AУ\u-[~`mZ=$װ@`oT[ܸ|Sѻ(c*fok{|Ug/p^vCLosCoC$|;[h|o@/0tvh10%C뾿:/_Q c6J<`hDeu/f"r!.΋72ʂ}Vgeۘ{t&W ޝy#U vY~WEb^s/~ *؜jqH026e2 Kn {Leu ҂Y +l\HLre5cRx(v- 5S0%?-s2@cyyNvG{w~ ^dG47uK=_b8\$t-Ywݩ\74}ww.sվTl0~L9@i67} yOn$Q?e<ZMtVM[ ǷRw`NNb^޲r_l )/ԏΨLV @nmq;Ay_}K h%~5ELBLM5iJnjglwRZj~N@OI }I˽5bۤ:pBBt!u2Ӿ+z.Ѐ%DC֣r,}ѝr'R^fzlKكbn~N`i}QGnG'md*Mz)50n1Σ8G 'ls1ca`sSeg8 )r3 L.x<,60OgtnD tnnihdvq~[‰dze[KtPx"}Z̢:`#L&SJB# uT̂R8EjNnBJ}<~#3"pe8`/N<%%j2=�?ӒH듆v5fT&PvYUlˏI 6p>y~^}2f8h%zd^IG_ֶk~A6GE,`(T7Y#\�u/;5 ZKj%Y,"<5*Buy΂=WuRb?[@vH[5¥gQ-Q$/}-p> n`hl&P'dr2M{!`Y(;[Nݶ=T{br‰]=𬺼et2}mrP;ly> &z//#2l~6 _|<lwᲾղlVbkrc'r&On0$9 (D^}blSx{Z =z1E[smʮ@B3@y_Zʼnzu3 lC;SEE gﱩ)ع_=q3 ]Lٓ{ًQhlzT]de8`t-h,e~}*+Mz#2YQ}@stce~:tQ\EyYq(T{;y{F s-ĉ0JXVyLrY ldзkA=Նީ ":Z4V+=VXh U;Ow 47`'<-z{"S X,Fn:Glȱ>GoV>v<֬,1AߵyIFnԹ̖,Ĵ9U .TdӢQ1`zyu73{jv M^= Tv٢d_Tҗj~x`OP<܀%7PYjďR?M)^e!/Ռs7(X,4li ;{2JsNXx*=`t*bN~SهAOާvAȅL{dK&5{ ^eFݺAƄ x zy_� ~ vx~ >t*Zxq[UF7d^mFŝ0.ꞇuna(|6 tLU͠Z/Y- 1ghw%Sm0)ڄm@_3fUUͩʼn*=ZSz*NW +:α-ײeWhyAnD:{#'_6aIA7#U|A.K@2uQ /7(5HA`qIHѳ`? yu=:;u=0rݒ_*6ַ>CX>Y'eVRw1qWܝ]vU!zɾ*P^["b 2Nak/L!=mN!y"w Y'>YSj͂='} V ]GKf| 6lI0lwvsڀeu]mN 򚔸fb~÷b[ڧv{?tLihKr޸M |Ite+}`~1gyJ󆭒=$ʭ.tp"oOt@تM`j<{M hV4Ǜ;WhS]}FYJU;r@2PI"Fѿb\eXԗ` r*a9JVrFj}I^˝U_Ny$)ah ypRwĴ*e�_Jg\!;&{.{9s1*ًAe(`op9`+0\ƿ~\`:t8{1`+@M~]K{83)й߽z/@8ȶc w׽,k1:|>ހFLmrIE<l@ X a 15#&;T`/`R~f|Z:9^UE %O9r!{g5;7f%UHBs $¤fy7iLJ غaGPK 6kp( .M μPygNVɻn+`[,Wz"#gex'{$~,ktl~[ٳ$JOdoTMw_pب;Z韉~dr?-G5l&T^IG@O r;> yb}{h4'!o~3:3j1+6HcvӁ>}PYӦQ<VdoXp,_y3n` ƌ W=f${^`gI05qB70{=/) /p,GgߝtL,гqc+؛s)vDֻ&ޒ cR=g[.vkKTw?gJl flهC'a3FK]*"P`k.Ge߷~R}ٶ; 씙@s0VQsks@'RF ?l8JHBS`Axº(~%=E~ape{Ryy2v03-U[9 їkc4޺[#;&L73R> ;[f8`C)v-S¶9{rv@z&쑟H0;DMKTv BldCwP ^Rm-CznjlzZsuR?^HC}Gl0%0[#Mdsv^7 ?VʇK4Ϥ~o4ca~NT\ϩSnZzFٻ+p 6l6l qu"v셤'yaݖJWGʽNid\bp?;^^<Aoq% };a5 }cLei,XP9{1g7N8;zk_cH/2T۱vSe ͫ@P78tځΞ`|0O8}emB9f.~U*s6fj&Q]=/[z,ؖږsK3S/բS~nl <gPZRhm[By]gW�}kWja(P w:;W8..)<!Q{5roւ-&d(ضΛF$w2$)D *gÇX +a;=7PzVuw;q>w,{@c2Z v*r`7:e_whojjlQNG u0 jd׮ڽZw}U/{G-/:[vBg^Olӳ YJߘ//5NL@[M AxJev8/VhsrF̱ARJƀku{y:@6> voL[%` }S ͌zJ|H*,}Qm`rq9`_BQe{b*rV(nYK4]zŷ .[5 >ɘn-/_ �H#6Дs;8 5Oe+<~)W ;o+<l$לDU7g/etۋ,"[PnKZ>.;X\h2 [rix+7ghpZ2a_Q`y銄81RהVpZ}"F4wj#J7vn|TP9]h}@P&Yx|Q<J5lMg]P`ۤ0:)J+2w*ۉYm c׽qS.7'h)Ez@UݿW~DסvVP}+G6/2{M=G3pxY/_qIo^pe$;ҝ{Ilb)P9z {U.:0Y`^bOwyQH6z6 yw_sv 3&EWV^(kTS] xߖvA߾U$,.wN=(? Z~B#,:ǨajŋCJ9`1&|/4 w4{�&zet~.ت,@e-.Ĩ(=J^bTI\IDd+fM\YigZfY銭 ƒJ:(ç00 ؘ\ NRt螞qNOqF'6Q�F^͜jҙmU:<afʗQs9{ ]Rpo-8\IÑ`Oi} s:Q'kP1ͩ*'uo0p[gP2 tI'sH>T <"o<`OsliyBR[N>`?@5hJـٓ*v>.ނe\YN 4ʗ_brO> <Ʋcp:ۂ݋<#/ ړs-(bRq[f.G;qwmHTë_e d3S[1p2ة͐6xjtwK1nwLS[{~)+dѓkޠ2? Y(^Rb9Kl7Q랤Qovx;2 L[AI*go r9g6@>\u//_޸PשÊN@5G@u vGF]vXH_�6+ЩD{(w2t\SY�* cP<=R 3m8l\'Lc)VgORM'&cB~q<ΞmyNTLϭ.ؠ{93>  os0q %M䄗2;%/y3s򸽰ePa<UEL}Td챕|hպ>T߮l-cUi. kJ{gkNio.޸6|Bk7)]U *Z(U䙇M*ⷣ Cn_*rߦ/\*~Ԙ�1[vb~/"'zs)b@Ad$ouGF5hB=`gj=Tnjz챍j5|zk ?u=Cбy ŽC5` T6bq$- cuϚUgzb(\}E'~qgG-: -ZBMD9Ah ][Q᪈o΂tbb8)ޜ N5Sb-eL'Nvem- b{'D= "֓GvtjzNdi 09k\v@]pBxGgPSacL �\miy&WIk44K&<Cmʷ�7Xls6z ɛCUڹ{9[QBZ6vjx摃ٮ֭mvuɕW� 3 M XdCOX>JΕܧoVk#e&k rқ}C8̸2*]5UE_lor+\|LBX;Ta?c=yUpi R-~܋h.\mϿ{_sޮ*zLҴFb k:敎WxIԾ۾li[tc|M p]c$yWiK#DLn=M9 _cm&U/G;}E/ÉAeI9*҆fɈhx~=X7J;^lfvyyǯpM*݁o9mc�<Vv`*iˋ.U=[ƤZVV\oϥDiT-OȾ\өD~1HK{A֥6l?%2ymrvo9ȉD&lGDf\'<sF%q o;IU%qDtJٗꇳۛP*l&q4>3<M7ӛlTLg{gDoSH 3)Ae!ӷ7rC癏:7,k?a쫐O^l+7%ټy2C@!]C>0hDec8_l;^c{1mH|Ŷ[L]<<D)23B4.Ys> 8%Wl[w4ob1nxX Ǘ~a֋C\bW-7G2u9 EJ5s}[]ɧUJ?$m ɋQܚ߂_Ngߧ6Iۏۻ 7_l>W(t`͓i{3\ cQ,/}<.*w7ۏRu A]x/ Z?/}?GgUOo aN_׋mrEs^l;9hwNssL%l?Ѱng>7(<"qDmq:w^lo4.9`6KH.T"qmɺJ -zLvpsC~r(!Zn9ϭBWB)Rh&ӏzMMbpƻtt?} &P 2~~.7gY&r&6d涛1P1}g2CJ6~ǻ ˓T/Ŷs譸�l?sjǃMV"8/ϭ~ loR귬۬v;10 $ s{-e;ax5mLB}H!.9,e/ri[&o?{; �}ͮʸs%_B9c]"iyƴ̭i{) ݴW3| fLI9/=/G P.ͥ熵7UGz= 'H�'/ EJCto" ڛƜMrbu3*9kF1o´Co&#oD[gv1ȋiϦE0m?3=/L<ۖɴA"nódl9)5h:_.J`Zy+Vx1}XtN֋iT㼘~GI.I5$ + )?FBF^l+KQ6 *LR^ѳHLmτPέ2~}\.lv6'g>=wڰA2'A*&iE X] %C0l*MD~adEwNxg!zv{L/ÞG/y5L=x2&m?P*ۍض̓^$dbɔUсM2$S-*nay<!c>Cl1@}|Z`{Qb2gMA~_άyY::byux}<5_,ǸR\ݐrH?t"Asu tہoD٥Eœ>nJ^lG-|67Y*>/]S<օKwjgġ@U x~$eqk|_ls{9ns _Lӿ_XqWcJϊ孚?^L?+^n<Vڎ\nYvBI2Vi[<_=Հy[L8r?SVHߒmAa i;μjn}6Ix-m/ظ,B5T.gso?/8Wic~k۪zR1_l`C>Dn33YyT6<n!2~)( T..|`0.GAg_pE8_Fc`ڎ70|3Tn~Ŷaoڸ<}[/G]a6LM2z\7`2sS Є5$~_~ѿw[_P֌*sӴW1}Ņ0pw'\|mmN~ԘP^*bP._zdnM#3|&*V}DvQX>Uk;Կd<{Ԝ/o Fr^l2sLbzkH/ITUȜ, au>a gL"zM& Vq%1"<Eb^lo"yX/Wxn)/bvwe#b_vI)vmg|ƱtaBW8/̛wޤ#Z)aM!=rĀ( Thm͢慟6[a^bZ6I8SY^ &D g\19ܴ[<i ]29vعᔙTDӧ}ǭ5{/K_mjRc9:e^ D&xm9Un5kwjKF)=8Mg5r(nt ƛ XL &,_ՔV&v?/cJ Dq<ens뮡\)&Ll~y5W$?U(%@E$㋴bY<j 9J.iۉ'hמI|y&}ctԣb[/ixal ؃lǶ kQ,D*o]yU{DzSѶuS/ſ6'wPWbz}^3MZU{}"U%/7Lx׉ Ŷsˌ]0EX3/f,8b{3jܖZ0KܴspwZ fnB_ȝ$#g;5/0d؎+ϩa<9%פܵ?ĿL3<"t]8ygՁ:9 Nŗ7J<y%AZK/}3,fcy8؃uי^L/F) KȹSC4L1}+a5xL \`y^7ۛm_Z"%3M[_-m+ٞDz by<oUafcKzjZla꺛*i'ūfEvQad i{;):<ܠ"2jBQ +>W7ۺ)^ Ę^SbG 1`y+m,){VlbzZv1b}v"5sn6#mi[Ϲ-&i{ ሜw1F dQť:S|1=DlLM֎g{UZhW+_ XgU7?~5]_l[+J"TAF:h+4ժ|Ǖ+w>wg.K/PZmccF52n8>-_&#繻7.fc/+ tݪ0<s)ۏT ( Uʌ۾pWWC�/hΫ |9fx9h7܉MۇL\M;w�߽a{N ZZ~wmjۼǟMN@Rw3:ouz9hk~N²/^o:Ǜ_Uxּ&b{ZU/λ:dzX;f^ϊKEzfzwԄnJs<y8cP6IsZe`"~]9Ųi7۱ %8%Ԯmj*cϾԭ8i$#P1X蠍FߙGtޗ[\fG _=T}μVLi7x<H5mx~Y}6췷=k߂/opίU~1,2RW8=/coH?h׫-ys]&Ҷ1URK>r)?@n]6~" ն}YJLۦD-n9q))?j{TywP$k  7*s &An`f=z 2z']0+e6 sSlՈ&iJ8I xyONՊ)t!Cr3Uf*^lO2^lxo +VG(3G\yTb[ cG1c^\9zN=ivC}͉t|vį{Si/S&2;~1=U7m#hRŶg<�g_1m$5m/6X~zF\;yA*K[c_NUNCi{fjg~溙U&2L!zWGW}L*}z P}+d>uv7EF늟Z^LO{>"7/-m^}OϼkmH g^Qsv2w(ۤ:BMyF,?.avSۛ-ƥۤ%.1PvL]T΋mրإm_v{V:5!>W*b[vs9w0;_"I>\~9P+ҘzœG vqJ,%b3qVuzu|>7m8VF1Mg*ȋg¹Q/cb_ee/!ؠ~]bi)5@;¶ʾp~m[~do[7qk>wfO|oB6x:_ǮT۴}tan:Ͷ!ݼe| V.!<:"IK*m?7O:h瀈<OU;^l/"q6.a{oBuOQ]]c*;5_l,uI&ex[D1]_p*R![/ױAa/3 Cb'jRDq1dbZ7?-=F{7 z Iy$m+k4\qn'nc_;a)?U{�Y_l/7f{S->6jrܶ?v:`FUϋAGv^o?Aq9,}3bY>jw?zb#cg8HHPz ߾p ^aщC.d"Koϋi%bŅиv&%2؞\؋Ŋw02)#\酿IȘo(EK6~yz~nL!b{bvQG8ro\bsv੤$N7w;#/װ+( n1Sq 䲕^@3B4{1$.4mdwqbq S9E>jz?KXwQY׌;HazA末|s;͒j Szf=oa<Iyvd  t2aUx!mrګ?䊟Uj Ƣ(i&&MJ}}=5s:}^ö0yض7'BݮT(v4R2PVgh-xNU_LH*lp0IۏKmg<GT(`[hX)'´_ :gɟq4xNۆ^mqċmncJLĪ;7 xggܞ\d~ڂum(<TF͏?IJ^L|*mq.m2-.{adfz6J_l>[Vئ}~WbP'u0yHB~6#к%ZL+Q+m+*ZtM2;߄xfVlm6V]/IK*$ b~,Jz '7kc}1 L' <Ջ/ bqfO+Q/k?ᴽ]4,/U\Njm|LFʪT|W\96ZXÓ@ȫ~i{=r#*QūXE|m?ksyAxiR&m%iAKHܕ^wUK؞būizœצ /ߞ/"m-o_Dd a{}U{u bY|˟нT]ϋbl~ NF b{Uګm##ෲMǯ i:ԅ━L&)A!lL\99M~=/-ѕ ]J%ѕa0󓓶9r#+zy'۲\^Yoʴ; [|'?Ãac=g슩>d(~3}ť#h X*&<ed*՚/Ri?jj '_LO+6-v[_ċMjƋ`Q#h;BeV}5= CL8_Lͫ7An-߁NT '8mu/!lz S‹] Yq5cxBq ۺ݀iǍgWy֔n6Rɋi6XyFve <QTҝ`nn?TL܃֋T%llk\M>7)'†|8Aۚ߆6ܰoe]`pJ˟d#6]-漽 r:i^s޴T zQ0LsE͔5mYF&e[7ͯbj#qnĕۛm Q#{4 /ϼi(>_<�Yxb#|7E uY{׍$oDcta ۵wu2vn=I r/WNڛ*OttgqMg./uE6癰bC'(_n>fsLCyw51Y%eNqf rS.Z9qr7Nk$^l -#nI(e UF8_LHR.م]DJrL:Dw| w#z_{J+YKLni9j ?:+C2Vݲlϧ$r?_TC7#K~w/>Xp=49?b8XdH2w{^<c$fcZ|[ɭڳQ'_^|_W֋'-b׶|υȟK,)^| yC3彝{hy!8'ŒꇾvSm[wg<o&lM�Gy 1ߕ1~ކ8\ /z֤ q6l9 o~u涫l6bO<_ Klrl Qm!K2$M @#m/>/X.Rym3ߏf2/l\<h<W賍ry u`z‹m#7s.8g20ᜉGY+C?38"/L~qf*@qunXx7ßA~,/-6mo>}tbhGzm{?ݚ猼Z眕t &św.vm#݆Ԭc+w{6%2%~qSi<a)^kW`V@r_}<t@#W—ߢ6й::pd 0˟ B0[+V^0ƹ[Xb sW3]4Ii/h8h!sYmY[WeCʖ*sI|.ׂ?@w?Ws@ξ#Zm; tyT!5ȝy+$Н]Z:7]廷(}mb.g\}'Ȧc!tjCI#슼E2~SՆPįC%cPw<_<iotX9U�x+OLױ+0om;x.ij09y%sF%GgmhI!@6Ed?O!_bm| t �t>Sgam 35mtjYk]F,~*fango]Xy'ZyOк6e5!\zQ t?1Oțn]$y0bdμM@r0վ{89^loI启+j/>)dP6‹ݶꈌIb翓Ͼ۫'Б[:ͨVQv{{9ՙ[2^9hN9<Ǖ.O; ӏL+OZ;^^P(.YФ7kBv9hO1W8smK{.؉@Q,DxdtN0sVn#OmKϰ3.9TI'cƕn`I"AN&mgm%[Qd5 ;qNbފiX}K_.G-Rlo8m#X/6Jban|CϱovA9t#G[z6g Nِ꓃Wy6M<2Fߨ q<VG"ķtdm>ӂv[ i\!?S6eA$ZvmKU;#}#Fѕ6!*$A3z!SND&zc!Nu<y{.Ea6VwHqb/(@9hÜ&q)opֳʞk\icOR3HߢҝmS>Ih[O+m,CVut};3Fİ1'(A娹20d>#% @}|P:xS5ص(tK瘬(om6^֢^6:7̒-uyXpnt%면ŏ6֥Jh|tT}#?mHUDOݞ^Hh aul ii6UzL,^C}`DڀgȒLêH,Ο̖UXj$idM 9v"m3y&i-*ģȈHw!aـD!7߆;A 2FXF wt">Do';;ɘpF^;tw!%4<s6j) x{Lc12?QEi6m%gxs JY#mShTPIϰ# xe>l4Ad0=w- x҉Ϯ1ېBBr#1#Z6+l#ޓO"* >/((?Nm'<x8d$] x5ˆ5w@ᵍw3Mf8]z6y0?eM)ͼ$ugNBx8^Q'úJh|)e.G^mTۀfn3If9@Kކ;Ϩ(4$͕uS w6YϵPthX<2;}.Bj5ڀz$/h,M8wY+er;,IۀwT)젻]ۀ[Y36a 4{TG[Y$ԝeSjQj#qʳqZ;6❣r0c2jgm;x$dgHi<$8 (k#^ًx6&ȣ2IF�?І0ҵ-& xha$ŪG)oUz6ZAH.S`ڀ]mAx](pkgm o^�u f5F6eXHhYa6E~\a]8q 1Kf&eNNI|Pl 8aO !(V%׋ !hF b6;<k'1fh8;#3/K!kCPYoceҍ> SZNP�$t:9Z^>7$NbRH(#:^Yj;oC�HBgYx I %[JT x27g ko]+omD_Y yҙ?ġmKU_wo#J1GuT,o#ާdS`}ԭJ/xr6k?뿛*}mē0[I<ZtsN0j/b!o&ґyv ysMhɿ Fݷ1q%WrN2f //vyӌ,tn)y2-* ys^zw^ :mțM$5g.~V8m aMK4Y!o4#^mmatuŜ6(KOc5#=4&Y鮋6\6_d\'VKGT34x]h;.QH.(+R݌hڦ ̷<c)?X\0PޔF{$xO>~8q%}6ށM 8EsUa)n~60hΈ~b9ڀxHsȄP[ƻ2b'q+˷oeN3lԦYh^Sxkmp 1ØEx|{5;bˤ40G2Zfߍ$ee6-PSg`)\h^)ڝq=\Y]x<,${rY*;Oximg!*҄Ӕ6Ѝ["|ZKOiF/w0NzB3Sڈg4xOF<[N3"Cyt-6~X7rׇ>:< v.O]Y yݣ8`_ݷ!/RاZ-y#%rZf6<Beps>cs7ۘNEeЛm $m@u1=ʑ>mT ymRݒQg"7Fmf3;j~6ܥ \)W܌ƻ[2 Ư&J^l]>`)kr⇜ mJCd+儱\F3Uj ƺr6ˋV%vi@?_=Z2nMg`5H@~J?C6ڹpMmyyumpaB<%'m3tw8xR\mKnL2`[~N6}Z0pw% 4(ƻ=~rEՆ;e2V0#DWT䮖Wj=sT[m;T7NpsJ߽ wPna."T»;,2~'xťFj;W�wd,`:sH[ruCA;Ok݇~0sj *,_5K҂m3S9B3jzֆP ^.Lkdѕv~sAe6ޡamP#Ɩ1ҙkGU<RmK鸢M[*M_M5<Fw"SyS'([!;f kƪ%2M!;f1QEBVFWș1<D0HF0`wMɿY齓͉6s|+~quv,r HwYRTf1\8`F<Ic4c (-;ɷJ Ev Iaӏse6ɤg[(dxաt輍w0SA;y\Yw ́&o#ly~6eH^W4),FcdB 芗Oz N2TfO~fe6z p|oݜBhE'kncLsDi\āDGBZ[tN7ߦ] vhzgT_o|1`@my`7v,'֩ Iӆ;œx:}t{Rf!5j^l;d'#kuh]*&UւD1mvˆ9ܛ3ڀ* Ea41whjURD)-<374HVQ;|cX?"[ƌ6)t#3p`ʾ6w/he2i n6-L 2H3TymKq|ut/6#6<K/#܈mCg%khB'6-ǐ*w`-KtnIwQ7֖| TD26 7$QPJL1�lh fm)$L$z_OJv`[#.JSv105?"5Y6Y>!ym )N*p?%.N2b]Hvhi6Q֒q2'߽VWi#^n)XJ ^N66x nw;ջf/UkYmFG ePzWoن z2Wڼ0OzvB"hƐCmۉx~DgvIJĦwyMRmZ TP󚓏zəmyyr~wj|,H5]VPmPqRtچ;97cDUms_IhНsz<_ƀ&m#c\PˣEl]QmCo `6湯=RRmc^X2tj, "E"<]m;yFUfm7d ue@Wʰ-dC4^GxȰ`t6<IRT}s�>|0G@^Dhw2i ygs*6D{hQUW#OtdlJڈw>Bvxt#C~'j[b󡩵/hh:l bCCzSFͳ6tʟ y݃#)6ֆtrXs߸mr/a6^}%6A;[Wk#^$mFSƐ, xcC5(_j;h_vY.)֪P7gzo;hP`/?l ;eK&Ev,l|ge(-ҽ=:3#ڝ~ѝ0|-)Djw"@.Sb;z8c[>+{r6C<GMDv"zeg${VmfNRۀ']'dz}ջ6=d@x~(o#fH.;ߣF<G$yz3&9R9*}6 wFU<TJ<4]5"a?mK' 6ҳ5:=mȃr4NNcӄ\b%5 =m̛π˛Y"ɶ67i6M4޿0H zs;hc7땧 z3a3zڐ7..O/Ni# gmx3L1mD<F-$ܸ5ڈ, ZRh"{^M'DG`?ti<LZt+mNLܜ30Y6:+m0+t:eb*x^/H%B6 }p0R F<Âe.fBhȟȫXًpko Rr/k/qJW1_f55ڀ$=Gμ*Fև Mۀ~'v'IZOm[adeN|VHȤWkJe6a<55Jm\g܌%m3d0*MΒ6I)nX]Y69gwxG8o@ *Z];K3rjUKxg72c/ϊwP$2Sg(Y|ғ-7hvy-w'"}*:woFe6Yg!LüDf G^P;nZU5ۀOH:s2T7ۀ'S%M(yw;VǙm |3CWTm+h.#&(@&SfJW@['^F a;NN)qfCg:0ljbw?Re6AUHk6 }w6ށKWsD)FHJtKۀ(R#ɟx $_тL#/_lό,m㝣 Dlһ8-bji@MF@шJr/mC`17Ci9Q}i6y *PupPUoF9L~6׼ҳuͨX6ޝ9X=Uw;a6Yw(őwv2V :2VɰfW�jAE eHقԭ6ޝC}~6}e_xA }ڀ"ldؤT_ƻ�bM)`RJYLOʲ6,$Nիp_u#uIg YAW.Fײ w wqr_͟QYֆ�߰Z1mƲRNZ1\<"Ԟ諊E.#=);eTs:HNZ xĵokW@Zp웥½<(|hK]w"uafZ\NXꇱ<oG?ŃRNL9mbs s2&`lٛ w+@'cV6Ʉ24xP";\~'S#Szm`q:ҷ_@}mxm t6Vho6.9\n%6 I;*C6afNn-J^D[o�KB;@6lYSה\ӆɉ˧}8iLc[vth bd5@1 5h73L21KCkwO=N2``%<xd鋣ZJt2_6; p?O-?m2nsFx6cg&"6)H"ؘ#FF<НOuFlDwTm %ц<MX%UytsC}6ibϐhc5< 0�|Lne!mS螳Z2S#XF:BZj6-TH@kv˰F=MҜˢx\p> |@2 ?j*˷oaqe|SY xid0hނBx6]VRfƻ !WI'ӷRFp36ڀ@lC6ڀghןa=5i#^>?+6a1/AUtaZ5^6WWXȤx@L/1>w]˷2laЋZ+\/9EFHק)|AX5<r'4CjF<=x tKI6p�w)fP#6Ϗ^<4z9;-m!ok}2B]F7ףmۨϰlCtQ|o3ې<yx<NL_lC^{1.Ҏl#>x?c y;ȗ"+pm:;M?Dbx"Ii|n^c m*Ay'>m˘Wnϝ>x{3E&⦏=ksmsGY,B2x%Wۈ*`ԣ:ИU5 62X{ęeS)! $H:g4|"6}jcM0Z_m!("ȀK Q3Q|jcY.BxHi|VNn+2:0(݆Xz4Y)Č v_֘x|O4_m;vR/ro>:pu!gZabᴵ.&RdcFm{fbmKn0= $E@6JW^&|e6ڡi�x:7x`^<u+:8tlE|(u/2r 󝻎"׮YҟhQ4> gh;b|E.OkP%A ? n8Xwa}a`Vŧ 8  1K[f [{yNZw)sn=�YwpWm|"6 (gh7ۀ'% v؝mCI#yߔF<,a)'*˷OVތ|H'Kۈ' sO'?Kq/pƕa>|"]L%{7޽.8?4j< i5ې5RiC�3#]wiC�5QYS9w ybɈJ~y%Te yy<g4l"qicP4xE>>p1;mЛ`!n291k=hMx~ UoD*~DNɲS ziL?H[X>ڠq3hm|2?kD>*:XQWock kJiO2Wyp)3 xh8$⛹ۀys $mKBt+z].h^n~͢w''{.ηц;xQFB6߲I|m[:X:%!)bmKr|iUrhݲ5P?|֖!'!-n=ڐIB ޒڈmCوMݖR2k6 ]`Uf:#hÝᦉaأ wmbU-mt`+VH:X&F;[ٰ˗_Unidd@6Szli76"nvV;F+Wj[` .%-m3o,8B6aP$3yͪzli# +^VmuK@2Kk!Gg̐4hF?բz6mEL_ǧڳ y{3M,>dmߟeƼ0s?$O'PYyۧ0xҞm^$)9: U0o1oCmvguFJVxKܥS<#'ʿ5mH i@D9Wqk\Y6kN[ۈU$2fޑKC<,"!NXH[ۀ\dq*˷/< 8VU{ j}[ۀO" =�ҹk#ށ$kQ�A`Ң9چ4$nՆ34HH:h-FjYiig5d^m-=vZYxZ-5tGnW+8_2?Ut6eD o 6�!rA0oIj^imj$.o+homAkd6;4E y8[$VVoC^E3 >Q$ֆ0ey rU.@IlLUozmC/Uemvlk^ڥm^rQcY5:07Ԙ@wwb%ď{ņdy\}E.?cu-6*34Bᚨݔ$|vw"W_GGF%j )bII֭o^BխIsA4lN/za B9H*e$ X2[h7:l*-wy}ETK7Sػ w"+ vyI\O[#/y[Rކhx' X%*/!l+wi6ޥ_3=~IJ xP&mxyǦ> 1o#ph�GՀh'}!F3l%p7%'7IQݧw)b տ}ʻ?mK0WF>;gd 4*n.{-p7 ʒO&$12O`ָRi݄+iL.&@ZmO G:2Ua}p7$kH9[qnOfu2\P.m`M x*{LFͅ>$]Š6d#d�6)88I T^h DV,==j՚hڞktq? yف4ф-mhC:]:UmSĬgOw!/Iz0d_ 0ڐ,fgۤX!6-L$w/h^>+OZIe6ĽLɀfE6:m[`y$`|zwŊ6-(pr.E?_$x':\fGFYz,ކ;haJD,5]h݊M23 }Ά29 <m3rHd;4;Ld "^(6%L%y<{^Yx9Q(ERh-k\ڐ~; Ht|*'mȳeH$r׆<$(.ِeV13;FZ c! [AE8�ye6qh> Cc,=|F7ji|!(3޳'TY x[ "*s]3xd =<ۿ-J/wێ> uu6dn'+˷.),=ӵ6e0Y\Qƻ 'z+mK]:)Okqlx|䖟VViw]Xk2V2|=9VR'umfonk&ڬ`msI7r\jjb({IصvLs,(ym]i:|6.' r2*D\<1>ù*iN#>j~ouW2V\2bb;B| ~&i x%_~6>ЛPd6wdU<YLr2SUjq \Šj#/ˈ*OoIm;P?~꫍ydçP jc^3U^/QC1/@EG(uIFʐ&ՃtP>ڐ+HLWH"2$|*ڐt jFUP,[ӏa~FoC^ `dSb[C'XyZ_w,+] Jڰʐ5ޝ7G3 o4[3S>g7ѝ=H+f+E1@dGVY8X&0Z *S:o;e;yL/[*xw"WLc==UBNY1XStFr_W{R|Iy`<4_`ȨXọx(J#i!/i y( Ȩ:7,oC&墕pB22!O67KL޽ yIUmȓyB>MVYxW z\wo#*w Ͻxfۍy;ۈ74@(J~ڈ7o & -VY xru6Mjy[FtF`Dɛ^vi6M2 }EQlN&2e{>47*sڈ)x u2@>|4APPj-aOW_AF<3Ke6霃\';ZkmsH% Nц<5/hcuL$tI~e|<ژskn|mSS&m3'i|nx<7dڀ~dd3Y}m؜fDmkl2m[qZR5InK|FXKRY23VםƻkR9@h'(Q'ƻo%| ,ƻ 2!z2 mÃmww;6=&D Ur٩Mц<K\aMy֑؟m̳tew8yNg]xFW1@KY>EYc\><`.]oLؕ!L'Sd'2(8!6(g/żmг/ВW#?=d/cy疞 zρ-K$Q: * F咸9]J1_{$4J H\L]8y[]0ݕ~hlc^&+%�(Bz-!gcN/?ېthtelC\$V6m(QR kx$#] gx=R{fRпM^Yx> b_hs'L W}Lmȶ_c@XVk<| E[Y xZgiLWâ| x`sCw5Ƙmð0oAX?hwHJ C>yކnS!u-|=RmKw [G`s8lB kWԠ gv{mϔYYg4 elNE6ڝmb3)g@Ey8 {)6ݟF1$t³x~?ө J6 sL *-]Rq.ҵ#3e"3JuҳxtfQ.cS=;h0|& #,Sk#^,cMQZxdL'N޲ZLemC_/ZhO IR6ޅAtK9 xy:rUX"faM;_cgW*Ł@s݌壽<x.I,0YGӎVX;mq<Ɉj5yXKdt-r<ͶcFѿI+;銑_}A嵽<(F9*)u.Gau-bAt-1ܷKu y2@D4 Qz63 dH|uF<5i4%UOdPBk1kmKv,?SӮkxb>Wbյmē˳: U=w@n6Ȣ$L{ y2"@FdmG}ʨjWo^F5#X^#qۈ7sgmKxmdr5%Zsڀ7Ӌe Abtל6L3#J$ qe6M@)I'써"@26}/. gCN;m+|2qXv^Gy(#HLfUZ6MpΈ#^< y0gY1# %sڈr Bg7 @e6κRfcnFJ ڐW&NVnzӍP8ƼtXR N1O.Uhc^.a7sF-mSOGt=N!Oʑ S'$O!OӁ'\EaL?m[!<m[ߖ{yݷ!oC=pFJ1ژng)c1/o޾^QqƼQ \5lїIe6 86hcEX!BVJ yZ;OQ8FV g#m3жzIP҈1ڈZ%|7lR1ڀG6k~D*}x!m3<k FHI j>Z" wy ?@sK:76ܙ P8U i㝡$4L<6Wƻ RHR.if֖o]nIBc8ƻ2̘mۋ2~:206f@!l#'kMA1piژmKy ;D.f'W@:r v`Nmy8c._MʐmtX{@`)mw+ t}`K w}vJF mÝ,93PVF;\ς^7m@yj"@y^m>ݢpQb m&Hh*eiY1wNFӕ en"vh2\R,2ȗSe my!{CV Zmc ,e~2γ6mh렁HySsW'w2XmCSG6؝-%MvQƴ8*jcA<U+ce F)j& Ef�e@6ZHejHpJ Z$o6܁[\!+ۇ. \?BP#JY) kLx$sZ?LXA`#C_ĨjA/>?"MaFխ6!sFtQuz yQ|&ŧx̀XH/8Z;e˧ AjD]YĻ̯drt,svKDt,35amBNYȹW0;eIg9ӫՏ&1 SH2Pwj~ݓ yeuks*D!S.S6I{vϼnb!O@M227yۘ댰s\HTykt[~$ {A,JɎR`xFrfoT0F~z4j2 x(T0-A2_<9DӰ'�z]6F< ]ހ6w;r76MQ6J@G$ƻ; vyx71ß6ͥZ2L|m8mKF} .UV#dJ.!P>Jӆ3ai1e\hqp^ ;/j˷+aY+}+؜M[Y x w% xs"^@EV(QwWi~/qM.5Z13',5;5N'ؙgkc]mӽ5thR8x<=Lh"ڀ!!6-8RO ZWY9 xmPl,}6ra+yک PG/),W]b,W.A 4(m[ {.p_P}v5ΐ8#O߆6 9|z#LkPZ,eɖs6-i>)t"뮟^f=.n^s64V8+?}H\Fe6 ~fiYLϤudHK$}uʨi{20CGm6j%A(<jÍ jl Y?Kϫ26'm !=m2bm--߆u2yXEB҆t&*#Deن@F)>A;zfd pd5m; ƚm۾kȏV8Jl1dʘmC(! r|&5F6+f#-<ݵ?@#)Ɂ[~YtgbÍٜE ~�L峯m'2(3.kocW85j?{K&*Ii>VnH]֔m ˺ӱ'"s6ct6G ȵƾ3TW2} HcZ�+M&6vD뷱廓ȫ4WeB.@;;cg.ƾDoՆňߑ/sE\[ }'u4ADl[m;~FC zWNB@!)mml@Me+\V>IֆXi,3Xcj؇F9h.< ~PJV`׹6dXPO 1'&Ao$D; ؇"2SeHȗCkO>H1~X cdAr"Wo^9VFd4'6ϻ~4zЀax/$e4G6: S+1rol`wTʡ97ȠkEԟ_{^ac0>K42cX?oA?;"b.o㰔H=O@mP㱷,c3ƈOJ˷ $'s2E߆>Z$2-=F>YQq~$ٖ׎O,!G"b幋Syd`0L6%\w^xN.o`4H~OSO@%"n$Qm7?gVo^N$/~5V}o_F(na6e@\eåȵJ?mÈЃެa8mKӌTs8mK cʵiI{(a˛/ewl6adT:tx֜F>ESb2FrO`Amr}MF@_@=mbg<h!Nׇw~p$Oz=4VG+b<|\6wdU4}{ m(~X[{m^,U^\| 9)QW^ZK3Gi]d6-65Q-QZ{kgu247@_CLRYN |kHLZtdWR/۸JCrZFE!orJ8m[)W~BF@JD"z)мs2qoJ" |dCiH!24:pLzkG |6m"a.hCNɀgJRm3`H櫯"mpZX[ Jr"ƾOK3?1v~8ɴ~Zbg"mI YW6Y_ŨT&$Tr6mP) [`.h?jYחIZcOniH)@c:v,D ~l;!ƾA r:Y }tƄ74j;oo̺۵l#F_ؙH;jH$EJ؍8i t7,+߿G$EF`}|y{=]{hgEelYe ZfMqs9XnoWxe;#BqC6}dNY�]aa2 +t}Ggum2^lxs|upw+*Y{L>24>klܑ}g>Z^semXy{b.4CÛÜe]ކk%TJx_b.RKB.F#4BJ3EJqwecސwO{<ǺoL?䲫+I{L?qNyWZa}~lfŞo3,,/>\hڏvҬ2rO~| Ow{Yq}^n ~۹jbY'd`لu̢#O^P1.*3#/Ï39(:G.miq7?fzů^<GYsؔx9u{:ρ?)_q[l#_,G'Xʫ <sC;N:a,v%bGx`Xy'^4:~;:́dl9 S7y"VEy20Y1!/ l*sidL>^7)IDoe@1xR6p9c:t^➙i7ZZSj>^}|UӴ/>dan72q;h}|lNóƏ)%oS aF7^7k(ݲK&6N/{9%]g5wL> d>-Q'N3?]U!a?.}[M{xk_}:vS)NOfnj{eYjcߗ?z>n=R7Wf.ɥ3J6.Bm seZMc'5+ϩ^Vczze}͚N Z L?q`]L?Jθ ]gkCY#>\v!}^x7CL K1L>ٕZϓHgb环o\dGi>ƝӐ}&y :d N'ʋ}g  z[걫lxvLlXASjK_PMb(mK_ yl;3h%s/ Hߝb%=Z]^܌j^phdK_p@縼lچ>ۖ Cf?r0gK&Ь;aa&D][2N'~k@]Ysgdv,Xd[9E[ p˶qk;+l;UTus2S[>q#n|n 2O *ma?A%V2ثٴU)e~Dy9byW"-/7r`|'ӟ}25'<}Fd�&f}f2ڰ�B"yd%;�#OBNїe~m3W 5їXobZ.qo2jxx>6˗Wv)f˧%~3}egG<PZ˗W~:_ 6^ q hs}oǫ<D+XM[Y+66Zqp\F_`nO?+Vdg.өM_Î_~񒹌J_L>?8e1nwh}| I.B&=e!,Mާt5P[4B B&tC{:m!SOhNN0QӗG}>Rq?eQ9aŜA7wه'sQ"k*A ~Y7AU'vd~VR"NesU;2^woQ0 vdzMBEYMK]92VCq499ArrXW8eKv,Np`}_v-QІϖNQp:ÁME!fWco0uhyRQ*:9|*hk_hPKdzS^æ3VǵN-~ a2( m8k-{a)sobyԨ̽MЦ d_gqdgu_IKadQyinJZ^ƞ:r6gٿ $4+{<AhNfp>\g3ml7?bcJS:)Swɇ(͛˧.}rەXZҳhuool7w)Tc43kW.ԇGd[]WF?t5q~gxweٺ]}c?9Z_FSFbWFT؎~q[Ǻl[]\lI3l"7ng|2;`a� δޞ ?bY%ؓ:3uݞ v^$<N"J'] ?8;5'R!93 pbߞ>4uꉌ2ݡ\=}iܾtdDxEw]SMp_2"ke^F89<G-dN7ikf_52c @V֗wXdoj ҭ5^_FY'c-/^WGtF'ɽA{ñQ_2NrUS}ϗ>ݶӬ÷ޔo|AOԶ0- i懀f;g/>McAp 6Y[&_RIQ{|ࣟtwT_ΖYfeF`|[磚jC~{[&7n̾<{ypZnM&cϴ3 kXdvnx,mC,7|~g'27wWYT\4pxM^CP_|H ʇNn28M͞ejP%MRdn2*iFFxFdnWꨕ>meU j+z|K]F_}̭"ߡ2eQiome]G6QNeYA|{Q;L?uICe!NXym1<Ch�ClCwymHxpcZg/k\-M:B-4^*x2.NixCOCJd{/ఓCf� V(2j.\oM!~mŸ+3<28[{{q; 2pvo]$äe^R[>Uێ> 6�?ʴ{=e@r<GFkxx4?ls d e]񺫓Xt}6&ng\U'9g^`^!EgGv=2myr'~84u櫨7LpuXi{<“s mһ!/uꦮϮq80s{5;{wyR2m#_>N4ӣeO}=Z4 S~9쨾Oz|[2EȞݳROz伾;)Sh{WM|d<>s[^m|?VBFm^2l{mJ޽<})Mɐo:I%c]mmW|YGf3v7 ͎6ǕgL>ڧkϦ^2ۧv_xd!ܝPb(dg&H!.2G؍*1: \}vԇï> pyGޕgs3W=8!c@y=x reVE%+QG^P6\|l[jbD12woeD6:>{2tߩCr{L>lUkd1\'i{;=`y2|}߹wq }'ۧ;n=޿Q-/'${fT,./vnO&_9ޡ~bnnm֏%/ڋ&찋oAX2{!ŞgÍ'L`E5K&3_Wwz֗wH%KqO,}wYӰ@YcX2XXmIC(gO_߉VF} KǒǓj`˞oŖwQ,ql}߇W?x> zc_ӭXl?w>&Hrгedӛn|oXh-/R4=}|P4fhA[F_J X'/3c8RGQǾꯙ^-ҔCu28ܤ{aM/޲3tL^Nk~f{֗`dŒFEvtCBy !\CqWh)3tL^s"r̼47&-Lf^9kӀƏ\h}zpm'=fe챏du<֗Wx#R' }peU-k<,q&a7QR.cʺik0*k~Xa#N2s S2S\@ij̾ 5yAe1Tp}ȥ۠Yfk2$"$#{f/LKU7)Y|T+'B&ŶoC|<]FP&Bp@yt2Ӎ|#"Kci#dQ(;yF۸ivpXxg/eũw"dj_:E̎O?2"FŸ-/X˧Uđ_jux#T&4}OͦFCވ [g{81ʇ_:4ǥOOީG=3k:?k-9gzࡎn`u6 ,>ٙ}zO^>[eFY;ٍD/-:nd`ޘ,:9 b}2ꎛ#em|2$B.1M(fj)jR^4))&.)>\'E2XnL@Tal*)o6uH}>}]+wS'>eU{, %P=H6;(}j;NEկk"YDchz3n䍒ч5vpyC(|󙖣gỾv2 >_bTjw,v,'GYqeYwFӗ MWf5_ߚ+π/y\}J@ay.>Y]oa3=_21/Mnƕxi{iv\~k@휄4ŕ'ZE'W';ųW㮒')t tkv?~ll -MϡE<~wSmocx2/?؀c\k{2}PMŞ]>#vaGj<}AyЮ¨Ke<}Aya sf'/E3AOV2)u5h28K_|T :{C?as ?6K'?d?K2Bľ?'>KU\OWoh}~㣖~~/ӏafұ8Y2Ns %těGKjY2Y;/1%IE7ġ{-]7C_2/-Ӻ^f] pjzS<iI-/wo /=gy2RG ias G3@ʱH~gK^mwF?y-//ϱjZq'm'gL uzXL6y6縫L/&l<f#d%ް1~?uGW% �3K;Lf>,kd;c>̾r>Ma)dUdYpwD7 =&ï9poh}~nt2:0=u~E:>.ï^Z5'<wqp\^N1>T.R&?>.;wXw߿>8rs\EN]=eQfwIw!H}Feݬn3)GH#>S&8k|uB&߽tWm,80 |4n~<(g~SoʤhL> 6-i# sf({vB&)& -/sN%].6z{loHxnN-Nܣi]vvZq}?2T۱k'< :G{l=Q[QG:xw;~FHzSG:Uv,uͳ֣t|՜su|gFlG`Iva.pt|d5=Cx Gm7E/_TVu^_R+;\ng=.;uww&<_gm ?UAzRfBnlc}}&9H|~xA3I}^9SH`c32ؑK`D?~}ܿk{V\'e!n=@2>|o~S2 'o _2wHvQ-/oZ×7u??%Ï;%S2lSy[-.%Ϭ #F_3muEHdǁg3|asH2 }�k:N|J^qkep\~ƝݾT2p_~ϕg<GlYn)LD\}xe}!FЋݓ:p/|+G(lW+Z7ٮˆ|5 ; >O"}{a q|\|^k7IOc;<z2ov>}xWCI60/)}kMQ76?|j];s9"_zenݝ'//lhs<|}G8<}gͺ dѝbdE"kٶ}8ϓEg Y͢\2zMè h\?Lbs0'vr;Pec\2FRM3 gCBLr^8%`o|QgnO-S24k.}n ΋wc{l[݆]6: kr;Emj$.oΐ[x݅ݲzn~cd:jehq}i: &<2"e%H8nKk ?\&Jї^,t�@WO&[曁QeqgɗQ1d۠;&d%uM;Od%5C^k`nxʔ&sX/=o*MsFi2h?N'\i2[HôG}NBIOWR1ӰdVI=1+6ayEs}XIW:'֍'q-/ӯNqBe/]s.`.Ï&M[WHw9+w4Δ.R7x0gP._fŷu+l.Ïu<Wasg Ȼ^46)Ct}ʡ>:!]D@1(MHE̾K&v* _{<Dnv^]ܳC }@k"d{z{Ώ{2MnkRnlxƬxwt\ls?dv<Ʃ3mː@|gw{; _t?2;PpZ<2Vjԣ6Ǯ|t$5ỂgHV:ӑ^}ԭZrPg:6@L=G^h?1KԑddW,+0%kpqr!䫱'f3XRv52?4+739BLzfNNt$vg w^w\s$;7k-dD3zSp_ekXK| ?7rҞ2Μvl)U7O˷SqL>5-x/S&Ͻi+yBR&4xc<S&߮4_!42ѷotŖO5)2Z_ߦ*n3Bvg/g(쇚%(5:{hCӳKF|q<cY2O_ge>bh^!\xם2f>48KJ=d۴R2٩fEL^|Z p;Vg(;,4=<yy�wd$T/d%?ؼ2(UV ﳖ2nhVz#+sXYRVZ >? iǝmL>Ǟ亸 [̻*>` :K\+Ϡl\5>+6u۔s撐Of_ɷ?-9k@  c5ӏ#4;'|#zӮ'/"5L>&f1 hy2^Y%Kf哹n7Pl-{'eD=Jj UD8 l=4,k-|h(ɊM_e?L(yBZ2_r4f/n׻vꌵdh3faiOc-~'۟`e! ^\gBeq_m{5-MC+ȇ-gge%ػ밣/2B:{͙s4e<_)vԖɇdvwkK~5H6"! 7Ԗ 』leQ ֖Pw@ҷfJe2VWaGALLgS[;M)uՔO!7x+naєqG͞L2}巫 bN L_Q Z�1;d:Dffs,e2yg hT.Wf|y{y.݇^28aʦh2.Tj An#e]j6?`P\M?/˱{x̾O/Ơ/P4\fߥ@DsTIkz#2Ѷ`oqz}xL?ꟷThLw3Fً% hB3^B"[(1"4ԏ\> oǴ_!^Q!Ïn|IBvݹe=jwtg H.9 ~/_WX] uTcf)?2 lܦIDʯ? ^Nrߙ~ȣr`8!#G?!,u(Oҕ<6)רQF3OR}5a:ɁҘL#-_黾6 ;7F%r`}N7-vơNnX6 m9{ZgW9ΗIvgȷHgL)mo~ ';#ֻ(?樔5${<')O]+ 'TQꬔG}F2:xw >Dtuָ֒2t{뗌>d[%=N0%j"8JQ<:%ϐw&H7hO0<f)|f#x fw_&k : XS*|7S&z|f/L>Nh'Pxl,P%cc"hvv`U2xߚ!dxpJ u^3@6Wfx00u^| G( ztL>D4Ɍ8,ln >:=gWw +ԕ U >? .vY^+)ڔ: e%=Wf�%XΦgsJ#xB`g1-'?}ljʜICJ>#4b$E=|5TPe5c'/@ӉT~hG oS9Ʋn Bk yŎ'm[]l}}tez2{fgce;;Մtxw^'/EFw]w;m戅r1'/e FKj=̹K߱6KA%wgDhy};齙]2'ræhIXNϷw(McQMWu;H;"t'}}z7`H:~pYp5=kp-/WKZO{L>4,-/)Lҝ;25gxORsƖw- jfvLy7BY=|n|nnrY9g[ǽ% }Zٯctcy3J3Z]_;&cبk_GY.a}n7m&cYe7byMF:UpieՉRC,~[@^>{aM/%[Wґ]%w *<R >K7⼋uT9J˩*T^q 欺qEe!LvzU.! ec~jfE2FvMBu}'k;͔ڮx9!5F%r.!ntphy}{c N7ơ{pސ3f&E5{ٚGo!Yѹ.gpOo{~Vw˱H6L?ƕՔ7Zkx2Ah3G`=Z]f*Ӆf7dFIn{EM^w~,iFߑoMr\uvoyzlyˬgk:Ɂ)Gք^hꪣXӛJ{;<;U(j=snҭr`C& sOr\_[Wߙ(O3mwogn:́_v$4)oƳ;GvXuI~2eY;Go']?)i5}f_vv~qQ֝2$v�7eqPvKx`2tUp oh"'{gfzKF-*5q/L`*tߒg+`A[qS2&qަP%cϼ>+I #_:>uܷd٩nvӣ?De_:W7p~\2ǿ}eQwU2JÕg Vǎi(گ=Vۢ85vzNif{L_Aܩ2x,_0seqV}gN?t^{ iN#UV{f/=Fs723}{eyߣ}V 9+c+Ԫ@dD1LJOnjMGOM] o'Bsj] "6٬s9L?5ɦGЩ3}2ow3NBNd#g*TzLkZEx+=}q6-i[k_//CrS࢕г'/t~X[ޒ1Y.{ߒwֵ>F:o;I,o;O9X(K&izc Sd!yl,!㬷-{P9a֗Y1|Kީ؄]ΰ-z#W]1ת3-ctl:%3ez0^~[f3cG:0s`|[f^MS[:E2me西Nan<ߖfhZW=\6È6dغ*XLxLwvDI-c/?}_!CGd0 1L2G3LaTxAgd򕱎%g2imdE, +2Xx>c:>g sg2h$Nf#GgKdU+mGW}FݍP\g8uԉ鹌Wwnxܻ֯of�̽ˡ䦾)<w0H6 �|ǝew- Nss}7HE馜/~ΰ ?g^`~.r@MSSo0]uӳlxBF[ti$+FYcC_'KC>n/z` }oXVN2ش><Nu!@DbSB&: \y<Ї k'ByN9t!{!s\B+4o9Vf!sQv9s8\=+v#$t _3mFe.u~Q36Ba~?z׷-Cxtg7:UaZQ8~lNvT}̧o`y0i+DZHv d~unFI~3w_5ofS8>rb:񸷮-2t59SfɂӬVGuEj$óчbI!ۧ/e;5⦟k7~)so#mC26p<{ڹU=:57fGeĝvMQ%=)cEnhw{tX*{|}+|S)c3g<5mT‚v�j:3JF#N+=^+}tgI+}v3E_ѐ 36=~%;Jf]߻)* ?CN -GΨ]}lhߛcwe9Aiܕkz}e5Ҥ:kx9f֕hf6yÑ=`xW&=dq}s6vjyyl.XEujL>|[b;dS+R Õ|M!l�,dɦ֭Ϟ?[_F)u w^7/NwޓB!r{飜 D'/>49 s;Z_&%퐔_5{O_nbÓɇ/ۼ /8xO&_T+ig*I>p͚oaۉW̾@:@٢7cF~*,|+\X^ffW#NJ=#6fFG&3CX_f Bm3 8/pkI/uhy}xM[ Oh$hy}m)Mo,ekH`un$/{X׿:Vⷵdw78bɏF~Kln?x) FK[7Gc&ЅeNK6e%5;RX_&_~sʀe􁬻Y{B.2@�8{`^#wq/Ӿ[[f_Fgqm}Ieשe`(*ieUrjSc=ػ>b2ʲSF.clhqV+3k}WMW~3SMxV&/N"$V}8Fܫ v$ӎ6RB^;aQmb8ۼ}þo4>ElyyJ!4͜<.[.s1^x;9]dHtNC9[.sM:+G3X2uf gfeF$I+y2d9z/fA ;w]feNY-Ĝf盶\߽|EnfY2貶sv|o\`+dEq~d!ZMʏkkɌe="|q{^OK-/ӏSc[!G]{~F }/9HT*mqF~{ﴕ }VWC,/"inD8΢Egxh�.f6D<ק&I%u_9vaQBՖ8wfӳX?gۇ4'9.JD|7ƣIUS^IO^8)D{_QO^SAS _鷩Mќr-nIZ/em:uWP>67AN~F)Oy}KH~ECZgv>#Fu4N|4g/]2+4P'0Tg7_Q_븾e5ηSpF'-yu=/6g[DJQu7m}X0k,2эtG<Z@_77~}eqNke1|d^Z!9Gm OzSi|)"8U2>Md[%Ϩ: l>:h#4ۚu]|lZ>;sz6xq aKIAܽfm]{NGVgŕ<'vkL>G@feE~F8[o}Fj>h=Z]v ~3>ٵc{[yG1fǍA&ӦжS+j5TEd챑Ί'sefs7x2({=l<qG 6|3VOw @F6*ֿ 59,2x\^75a2j$*)Q!^2fFd d=V<t#l/~jLPGΧeĴٝ>6\Hl/~Xnډovkf{;5%ai/~M}we/~LRT1<wޫk6%uF>Ѓl(`{˽;(YC:ӉUyW_fRjk Gh˟kߴ,"7)Ze}:ostԢe֖nEm[F_⯎΍Z۟!//FXeDHCؽk2XG+ү}XG+{x J/ӯcc_-�Fg7cbC]͇.pM_lh>|Z6uߎox¾M_=,Y6Cd!1pѣw}y:E_ԮYmL>5 @|Nϗ໔ (fv|]S{Q޴]{ֲ$/Y2nZdRX,.s#8xܣ(U7050Z^G +Ce}Bm=03ѵ̽$pBW+C߭մxI`X>Z^s_N!:(0{/|5zt3b!s}©f)Q<ƻ!stb:~tZC+IM%?!s, <q3|g5~U[8q$ǢўzQ8L"H oy}t91Nr`yfNr`!iS._'mVOeǦjȣqlucSn5S y wP(ѷW 6X91ol"Kc`zs(j;em 57�^{vZϋ0{˾SFhx j-;e7N׽q֗ɷYdHóbS3gvē26k֝2Z4LQ28iߙ.|N" 8"ƭ%>!Ev]0q > 1M%"W)ֵ> k >h}y7T8^>|I6kfvvMzpf=Bh}v,;?/)ĻKMWse6{<[_Ct S֯CKu\|gw 7v$2<ֈWƞ;ak|e1m:=c C7DR>-Q+c+׸;,Tv_{N5z!͎̽X<).߀i/哹z7sl?3>d!m qv'ck!Hxy|tpqN.x2zfQd+HMa̖򁱵")?|q;[a{ xwU>|NZVf%F[2B)b-ݕfo-|Һ=(hy|3:OucC?\GGvhټْwNv"ewaoKFlP\]*z;H$ $kVf%2\6g-*vnGyL>:G.K$h}|/tSlxd[&GtxTP;sTe-/)<`* K4 '"NνvؖQh|a(-/{g=C>L¶ Įv.KI籩p˪x;>Xe%s![ >2XPp|}[s0X3M3Gf!맥dc&ÏhoZ7۴L_qPi(O7Z]F_Eun7"7W+;~`Ta& O'R+^4Ī{d19m#+k]`yv2G1lpLc)wϨ\ݷ\Yс_m# =dS:eN{l#XVF<.cm*A<=Xwϧꝙb̽7~G\&E6isR.X\&nKd2.ۨ8~g﹌>[c63{hErgsnO8z!vs.QwF{ :CFeg FX6J$4 ,n~}ߛʈ4 %Y{YTSnOǙ [{ߑ4uf5>Xo:`�gsV'N4S/>u{{>X>߇ys3X]ݫ Jfy5N4lh8pjc5vxjӨW@dZ:l?jGF2xyK 2879$(/Δٷ[59 V`E;걔ǴHgmg*j)c{ܴ7`S1OR֛{ƚZwuev]R0JEK,eQx5GTG`6GaKr]@gV2ؓqu_28&ɸK&g>z_@Fc|s\7\VfIGV՜."}6g13nV2p[撹kۍ#VܣZ+{T+9ݾc +|ō; >a㻽(i;/ڕw׶DǸ{ey}OL/PޮL?ǿ ]WBΆ f`-7Fߕzt~*z @g-a-2i{oa2wܦ=}aanYP2η'\M_'4x2"QΉڐٓч]SwӇduqAӓG0=}ql mOf_^!_`~gد/-OߡjIwJK. |ۗ̾ÃFS{};*dq/}Ἃc,_2D|f{f7_&(1u#PyM };oLJKjxe3߷Yt1ɗf>;�dZh}| .~Mۿeqk`Aƛɗǝ4sˏ>zї>+ v0e%41=[5eef1al,N"B3Og}K s7Ud# ?4-Ӭ 2jEcS;=}Ewc7}-`@cFY&ؾFEcdUDelMF_h$s]uYM_q9t~Gg"n2bwz :#$M+&~9-+VSk[Lˮf mOgL>vn0/vQ2. `W®C]tw|Ě/5c5JOOw28!]~3oI44p~jdM_'w{Me]cd{ȺjXq}(ͶD )2Z_Fº՘/|;d=rEWX3/ ~f1hCߋ~>i S(M!ò_~54 Ǧ?d!ΐE6�CY_ 4S':k(# aOh'/;f@r4XN'-p:ρ=-JW9~ˮ>./N7O wW:΁平f7Ih |j8:́+;IH".n43Yyo~|~6Tmru?`6_|:@G<ߞ ɇ+5WPK{ë5w26i'uhSч{۩U.|uv i2]K՞2U4n)o#nA)<e$^18ч;dx5+x3O|+7K;CGF sxL>V4bc ͟bhy|t~*8GV>:^2hwt:ݦb-&|#L>Ch>\?"Өd٭vGuKQ&KΙ,>ηJgZfKˈF062D~V2rn�%ӸpϔZ. +cϣi\9a]zHaNw]z̴_{EsTt΂+cms~Iwe93Sd X+>_|~F㾷FAdݮĭk5e> ܟo\d;;Hz}>y25lhf{_޿'/g ɮZZד釔 R#Y}?j5Ŧ?Ask|d! auW\z/IDǒwvg<<\3 X2v,}TlV/.9۷2x~Q9Egd , $'jJ,|^3L$"5Ēw4.&D9\_yZ X2>;d%Uk}gϟfnl|w|"L>^7E<^C…3e)?N|6\^f_gMc!Ԏ۲GKlM[ <HN'IbKD]Eݎ-/oB-/);x@:ӓ!Mr<N-0fe1(V<fmt&uDx1)\ dY~rdY#֡^r= {L&_ڍ3$9nM+dgP;a27T]n<Z#w0}C<1wrt4b}X}l&R}lze:D&l'Ѿ.rdV>;I|βCD@>Oޑ핍ueݳ:4\�c_j/wΌi܁|gG.ӏ'A~G-N"7xp bv.5o~| hq|n~w!ݳL;\&ߣLiۀ|/k6!^;e .өdLks9@В+B;iGuX,=fö¾4! ͗ɟ"d𽻭qCde|4Y6'/ǖզ؉_^aS l2Gq:́YeSgL_:Cukj JnRM2f:́c}LB\> iR6džJs`y3~%u׶f5"2?{C>2fe޿c,92Q͊#ovy6ѹgqdL?R&׬䫏c4Lo l7 }MwΓӺbG#Q8c�?Z_.ҺvLRð/eM[0 SWc¥'y"eSm_tO\)sH7 !RM;KLiCRSk*$AY2Xk(#JFvft-9Sݚ(}Ʀfӥkv7gnq=N|ܸW/c^S(huy9OË,zUSu(|HVSV28lt9,&_}ԆNNN>mtq2ٳjוǭkxJt5zWF/i6ŕᇍźb }ca|G2\gu;sЯ)U[hцL@`iTS9j!vǕm)n/ɦY un⿙hS<~^K%dEΦÂu&œٲ @Ee�i+fIYdB۶_CѠx2h1fӌuv2pǺ 6_Cx2ΊƆ?tw<|HEȽid֗wٗfiΒGɨN"C h}|'ӨLy\7^2?~N ϼNRϒw @#4g7_FG^|,}҆i,4=~}C%|:&/?2~~s//ztp 84nx KGӴ!"zS_eeR'Y_2cc!2^cLl|s{j锞-/) :]I@ngJe*J_h}}Q|92X7IYstW%B?p8[_ü߇x1{ ([؂G5|E].(sO׏öNv91}[aʽNA뛅]&ub+;Lzi@jf}L&߇/c2N aY|kiMbǯJq}Bl:Eɲ2.ߛQO cZ'|bÛm|̽[i7=FMKaCܼ{ 2vSpv|{\[ZnN؏C4/Z" dIdv2odpB&h.<}l7N['d=8O{IզCDlZLR֗ᇜ:F} ~kq ܝa3#>8ǧf}îa[Q9ȮMY tP)v4Od}usb<0;WqMzR׈=,04G2ٲu׷7QG9(l'޻Q'9X˽M…'Cq5Pϑqj=N!d[,;2o;O8F:|8޸!4, wf 'e1Ǝ sꕙ#ݝ^ֳNfDwVJ{ßf!7U5|O5sNuI72$Uc YgGe-fI|Q\Lfھȵ}~2+J(P!L>\uLtчhm.ɶB01=%wQ!rNFcdd kOcrS!ɋpD G-ΐr1xi~S2t`S&%D=Z$2ԯ(T#>?C.z}%ٸ r{>.f >zp^m W&|n gkL\|-֗ɇ|# _ Εl)bst]g~V| g/1ugMRQ!LIΕM#o{zeQ,:Tq\}aHd1@}{2l?}`~eO_!'19O^dw/>7Ne o ̽6@�863f?O}o+Ƴdv}O"'W'SyO&%RԓKF߉w Ŷf2Us;Q=dQi.k<xe֗Gw% ?ހpH.2MuG>}~-W7@sw(K- rK|9ac Du.}iN<e>dQ{e%AB3.zɇ+k8d2[_3,sr֗^W@^-:bOn|lnߣ )///_sqӃNr+7z=->k:+sL4ݝ2qdž>{dхxSÞ4~Er1l?>kJgэ#X̾¿LPCٝ*k*9p jb^/cO0Z_G:'<\7H>F%i 0̚!M%{I<Muso2hڜ<Oo2ehoܒ.VrOoGi]ԵG9mg_o.qEg^N}.|9Z[Ը2޲N Ak]6}d!P释;ފS}t}tC Ϫt@̾Ǯq6˓i%d| 2|1yC+yvW.|) /9&ܜv}2'g{<5\p-2dQQR3d1fYE+?o?p6E8㓦T'9e17>QKHno3@k`X%awS�_7I|2j:ȑ)BѩBtIǷV7BMu#}u5 KII8) .:ɁytTlj摹.t®gkۈ] >�}|/y瑩=vv"Ry~&̽ڿHXC 9̽/U ))-/c<nr?fCF ߦ$ei9Y/3Y26覕zmJL:R̶g=h&g釂ho)s5.;>2M�ln7SytK65eУobTB]/cB<'-풹�ia降dԳPAu Xd!̐^2tλ(c 72Ʈ~Gd!Z R܌P =>v|Q)5=5ػ2<NmZye9 sźW|`:Mm{Sۼ2".ً& >j7&\Hs֪M^},^5-oQ{8WF_1 +/TW>}ه L]}C|2n&WT{Ϟ %\ם&\dRrGmXhy23-/|2~l{xacdُ0'f'P$^Əo>D/*yWÓGS^Rf-}ꬩdQnjJy3}Z2Net;Z2 ^Ҡ3LsϞs1!%Pa)0> {ikK-449'gõdaji=~ɛTK @i-~ajF8iv⧛vx[ͬeܸ(D͘22,>@jmYxgv8 gtg_2oq ֖hi5zI Im~h& XmoZL ?+H X?˗Gs;_[_9 fsjZ&ӯl7/�3ida`sq,_A2~Ջҁ(*Wu;" ;,3l|Qf[w`TLF6\zӍnX,w7 `9Ǩ(6+*w Ws2||Co�cf4vwdDR؍8Y(?016dHW:mn]\7ͼ\f_vripcw>~ٝ:ŔCt}~ZY=]W R-eիx72\ߣysQ.ovؚ.NOe̾;6C3Og{^-'[*ʹ{ _6-!{?:#QEk sB_q#s[~禀%;L]ܣx.ۯ摹GwFb; 39Ote2{Ro Ͳz?_r|vR@|՜Gg_@voX"І1YĿ&6ł;*i:ˑ<ѱTWw:ˁ<Jw]S3T9=M|68ťPP)4iħRhQ͞.Qt~oּ2&_J{e{d!iYr6ӥ/d^u$[Gve36;.PdgljfOVu>Ra(uQHͮ_fg5SOȐѷ?_/ؚ|h!ExGx-Q&:2d}_+ fۧdD9SFߦPhs¡cٛ2>]ڵi<x^&coQ||(,}.cL|zټφݕ2F.M9G8dtL>7� o\/,;[<~}.Z_r2$͔[OaL�3eAJl#edqZcW,~ P h+~x=dtg2<Ѭ8k.~\ ^߳ Gs?\__%ɮ,}tLho,WܸӓGŦfǢ+/Q|}H)/9a;#|2ݫqd,F2;せOP)K>w; xFoY(擹h> ?S|2in`1d}2(@ {.Ofm1:[<ܛ}.JKAZ2ݍHnZKFލ ~-y7__*`\fޥ8nm09㖶Z2vlh3/35|lȇ;dqQAF~eQ}}j'gj v ]yH7(L=N 5 [Lޭ97|SL=65cD7Ve2"yLp"GjjV&/>7J;Ktd;[e2xn)uMe2خiGȦe2Z6M-Te2骙ŗzj8rOLgjK仫:0j7Ԗї+k0ˋbcRQ[ft`un1Ԗٗ7D|3/y?Nr}jC ^nY7G2wMڃ/3Ԗ[jg8cYe> ^m~ͤuA\_V~X}0cfBr<7VenE:kXﺌә}'-.*>G�}|(:/T{I2/5ħb_1,_j()od];g}Ʉ >yR/ ~=<٩#Q|isA=#pN so~XV Jv:Q[ ׹*ݙlPcnh[@@ssO&6R"~mo|ש{r|;7 ϥl 2OsC~YQ6[ ѫq ~VK.bnXjqy3k&ݔ+D=\/u5RsfmzeVڥ^"٫'s>u)Fe٦pX<װ=ێ,uew:*d6:8ˡ]Qpzng;{ӵgx4:_n7; zIwM`}gut P!s`$zGeҴ_1ik2͗yӓH*e4:*O*e;SJYMcJ{wi~) T#_ϑT~l2ݘQ^;׮@iWБ3,-g+e칅[Fmoř2C2cÙJ|5PC=c}?xڜ/},o> 4K>ه�ކ2Oild9xHmU2eM-%PusXd!łSt'20]_&a#ߥx{doj *\A;l*/V]ӝ'|R/ԓw2n�H  ގdi ZR}Q|}ń>|{wv4HZn>}}׸%;z2tq>^v̾յU֧&I־'_Wa;fo/'ʾp%FYkk-ۇڐoY"tG}Ʒd_IoWo仯N򞿛Sɷdm>qaSUܷd27`P-|n^Q" o2l6a'/xesj$6k{&kj< TO~^/)d=E}f>:mu,Lf_<zu>k~QC3~!f #̾-t^#g2f s}Q#3}ImfXw^}2m[c=~Lp9o]xVc2kA6ߖG&H a^c7&<ux|mz^х51{[^Qx6%|ޖW;騅LKͷe!_2fF]ọNx֡xkoyuitquC2j՞,-J5Z Z\F^wÄe]Վ|w}xC0Xf\tO4gt~L=d(̾Z|~h޿^hq~b}7ròِԢF;2GV cB߈d},.1fQ _{&{ W@xM�xE@|<yUx#i4#a#S'8e[MPG}S'86Zan3sktg+ <u˺ƚQbcSg8Ufٯ+yW 8yƮ3nto>ur9Ja[׻2weIf,gw>mt]0ㅌ>6X_֚2,w'W'Ԃ>w>$ }'Xte6 {!^ Mn }@O'ٷx]: }۷uyo^ּ!XJUY26.q; <dî2v1Clj >Z7~ggg{6[Sե>p#Ǣ7^vSߟ#V:z5.sf7qwiXXQc_~Ӟ2J[nuǒ$@a_cb՗ܿ^cBg<d8sߓ%#|Am6<h^v~]  % C A[޽D ?Vt&8U?kѧd1km "+h-~iGsV<bv<swnϏ X*r$3W2AKr7J:@]Խ;m;7:M;rΗtޓwz昅NNԎ{28@ߏO&ߵvۑ۽#<|wܣ9; ~O&ӭ ce?}{kC>md2PRuC|fB+GyIZAdD>ֺt(>ⵓn,3y?g_f_|zeˡF#cIը'pWo *w__P!r@K(,~gMgDm; /r f_&/Ⱦ&ȴt9%4 //hsͺϞ}Μ^&_{=٧g2!_/sӴTOI_F_R i/Y>.5{(/%\^[|tNчlGe[Ws2;lG- ;in%>[ W緎zhݟ) B藴}m~\NS'eU8H6iM͏22XUtCn۟軽@ OhÉr|4l 9oCx}EKf<ɝiνe= |L j7אp_Vo]&_n;XpG9'FeM] Ǒ.+ ؼҍ|{h2ضv{-ߗڬE.GkX GuR2z;uǗ"߸v|FOܹ?2^Dׅ j WpR51r\o]8J&6z̽:39q/.;g ~x]*V}ه/r0N5wu"GG9su< eZ^#~O+Jܯ5ig9f'iEo:/q#OӦqg9?fHO`vNAӽqQОF; :weaqNb-l2fiۄrpctߺs e#o6bR1)3 (L?;g\$|Cun9l6�W;8@~lg<*( L?VN U{_=GBbve!:&S?[G e_+,%1 /ӏ`9G׼!ӏ2ܝ/d}vϷ:,B߾BZ1AG[z =>j2vnؑ˳GUFEK︥?bw@=2ߗ_.~Fs"9ZSFNy,ŰMNq8"Os{,>?SnCCΞoL?aBT)U>JS?:0=r-_QW2XYh8 ?zwp/qƯ(c:% n7e|6yTIGgY2f})bm»df&-7J&߹,uޯid'7<}[:_OFߩ)= SsB�ǍYߓwIjz<ox6dbpB�( >v0t5j2.F#)u?|\Dsj}dQ]cn&[2G 9oםmؒwku}1*mHmEB?YIryd]ޤXÖ̾v[Nd,)Cpd,F[2-Tͭ`Zsri-|/;9<dF|}(nF_l4Gf2A4-2Rji̾-ͧ dkE+mG/tf2"5Ϻpq3 )1 7dV3KJ {Pw?/9eaF]_ԝI L]v}&ٸL:s`ĈKxy^Sjui8iŗه;iE5Rko}n[s: /n݆C۾i :ɇ[-eCH=S?-N~>7t%w+MM <rXn[&mt,:s4^?}HayG 7=H&r$2E:YFs|Qŋ3xHe;͝251 z۹^ۚɾ GxO=$v7,R L9-G2S; ^ݓC67vCƮ_c{MoIvaud,쮊Ӎ#s,͢Ϯ&=_jL̒q#?1G,抅՞u{4QcPqhuY4\3d}Wr|7'<HK<g?Ǜ2 9oR{t]@_UNOxL@^sgq'ti0IhD¿N[Hncn +dŸ^aYx|xږ@w"~CFޕɇ]US8ėɇj*Xӕ+/l qͧPdd#U`7nL>V/ΧOS(>^?!>^MK'{gY|~k T zه/19lStd5\yBfߦI1(|o9Gf28kFz%vͬAB?/~R<N<6쭘uL>,k/-q9K5걔DŽt- |kv2zXH)ZP}O/eq+8Xlj6Y}:r@GqOMs^\N(VQ|}~fV3ܖ2^oЛ_6ޠ]`krC\ЌBrM'~P2ZNZЗ)tdg;9c>N8Yx~xd+~g9>x|)~[Jnp#Hn%i|ĭd07~<Am%clw\@'?}|/ɇؓ}G/7 /OW$w08Bd]oCFe'٥f3Vܣm8XԨy2Zc[ ,<OeJȆid݈ܦv6p9;9;`KͰ愇= 1^2nuݜPm|_ |/ g4N89|#feE+܀LͶ!^2ػtK"r\( ?Բ]'lF(>.4ӻ.}__P-~ic/~mPX̗˷t#Bځ|ȸM_pRѭ�PoO:k&N/jlG=f0ލeâcL%C7RC7&/wB}j6~ImfF%6n <C?9&/o9i)TPSKN7_Q />[oa׎( ?Ju/:xċpfe姯 _'~'hWNdnjrxʸ/M]X6~WmP OŗtH6쾷>]^&_V56U >'PW5IG}*wc]ܣ]uJFI jN=G n?y2uwd�#2Xԋ~1%OOoG)', ֛=~}onX]y%fV2\>mkŗهjPv}/f+<Ѻ{d췟#Q(9epڙ 7#uGP9 :˱7`xINr uYb9k,#k "V:˱)jt'^9jڊVg9674#]2:́o]0x~vx_m#V9>_'o=<)iQGfcHWlucsRӚv}eс;g([/pd_~̨uSʕ+ϰvD2 ,D|(k3>sE+dD7-k$)Yă~}e,9(JVL#w>64Vc>CQ:rC.ƞ$>Bri8~�5eg[eco2hTy2gzLMPuF;~V J2>ݛ49`Yq=42G3h)ӏ:>;kd&φ^;ei{?ǰ"e}W"wZ\wȵ6,>EK}y_c)ϩ-w=єu^& k4Z7V8//ʎ^+^մ ey?"/^(T\OO&{(~~r /|s1t 4:ج; d3k|Y6XhYx|TM6{Ӈ28Eڹ%'%=%5 ?(,# 8'=d𝰝j>ppk >0wt y<|l%_dgz' YSGd jT(̽Klv8<5#OEDnfc$p ٷ'Կz:w͚fO&ߍͲo~e?/lɱPM;|軵4pҞ.<d]Ncm8 U۾dQ"j^\ӂϗ 4W^P͕(IFdN e�6n%/_A%/n#xOW_F_2zosi} tJgcdKjn2Wt]I3ad;cKN7~qn󜟳CQ{ܬ#4/_Q:ɨ>Z}L_2f-;g .n2Kֿ˝d__^<xoX7sƿ⳯}$3ŗѿ!λT1zD�x2yk/$>зew/8W޿blm~?F!1vZl|+΅]i9ӏo|S42&Y}fiu"ߎ0d^$r;i3 w|Ķq6<0L>jbeu0R1.(m||w.ōestcŗчښ3~:Æh29Vi2xӸ3-2EC.ﱜkr>mo hCIr#Po(LLKJٮt߿D K8ӌtu9MS[o8JTu\gi͆]@|9k _kjPw/Vnw?=Ïu/=S-eDS/~IՑ=J[Xǻ]H?,<cE2=k2 Tc6>~d]o`Nxg>2l_{aeoUMz3762sGWFŘ鼅br=2ޮ\7h+ϢSm|}Mee!3~p&̚,<dY[-4Oww#T <̾n#qǩd_f5uxMCf26>+W^LDzi!^r}cB-w`Vt>:Fњ͍Y|})d~vH+S.) <&Ɨǫk3/n9$.}:)Q5=GwzQQtS�sX|[2HΜ9!ByZO(=[WR~|2ˈ2<;d6VOΏ9X;,~v'KWv^cƛ%ϩVR̡ ?6Qu]jr>]~g[>%5]+5X"\u߱s~ks s^2N4o?߼LIK4^0L֟ ?j4 8p}Gembe2~O]XݛJP ].t>~w6='++<bw Dٗ$𻨭$ʟ ?䶝#7qqO]2n8KߥSe1|΂軼цdŪ} 9qgJ(esv2b׎F1%/V^NvΒ _#bUYGe fݭz4=gC=Kg 6F4i7oq]/sݲk[?#̽qZL,J[~Ge{GuH )AO1|:ӗtI1}o.H7<ŗч܌XH6d%ߗcV\M^2�_T6{Xzs }2 ZW2WdkϖїEoOnr3|m~FMs5-ӯ#g T/l~!fKO dH@l}5Nbq{Zp-Ɠի,mgkvY�3eh-wo,T=Âo૏_fۆleQ%m؇xmeZ #Y2>v.7ghwre35y\F~whevdBM{-xei]̾pQ{F./7fme=b;0jj29u#\x0 )u57ϞeN|G@|Ϛ>Q:G/%uK{p[x̋LW~St C^-Ň"1\2;?v|:ӁF͍O=0Q:?maq5=XǡETlBe_@x6UY'sBWF,{~(rrcӳ랡l276r~f*FΕgn]Q<z5&<W&o4ߩ2f/>CMY*܂Yc2TS< ǯϕgI VKDZF\}X_8ˑ{Vp>|Gk3:Gg!oӜ,DZee(_sBFNv=5h:!Ï}jGK|Qx}�uCd }&[ŸL>MS̡!齗s|O/dqTo/Q_I|c F?{pL>;rd :R&o;&wXL>7|bI|j:QmR)GPS^<:t5ǝ׍!;g OZS۞T3宓2fK'eЅ NCVqB.|%eyg kv=^K>NfSJm̾㍆ nip|)/W*M7KNNTeXH#i9nC4Ssי _L C[2NykJު*NLR^ 7=01 ;Lkcl<)Cןmwٹ֙d;+'SمC(<{g͊`<lB@q!׳qd]wU? 6l+y2.O^7?陟cYGٓlwh{uJN0%sR+}G.{i[( ?֩fg]2ze<4WԾK_x39=X{w JVmNxUdž9^K&jȿQ/-5acO»d|Q3dKId!.SN4f\ه6KĻ܇O^هeuf]Fǵp ܈̏rx ߨ=zMf_mV^!6^ٗv~l񚌾JScٳїqՅf]k2(%k2[2!/өg2zyوe}ʹfZAs$C?һeqj9^CF᧷eG0 7TMwXWhk)�2u3pL=a6|�t:WXÃUNp=k6*qu{\;;}Po heY\G�.u{Kfe=FCa.s߶uh:f.=t҂= wz\Fߋ؝:z]&ߣ�}I$L>a4s]XCVk4߹ GH:yíQǿ(sx;Ws,;3\uK7PUG8*x#&W!-Nګq^Հ cŒqp'?YsB{k~umtW~Fv kҿjQ|}FMN(�^Ͻ2|2JV+:G͗vd}_c_{eqw?Vh'Ǐ+nC$TakcNs93 =gVsȐ3s_fQ"Կ#qCFQш<*jf_F':nك̾m78̀f_Fqpz7f7dmM_1 }X[6|Pѷoui'l!bq`ߐɷ)EJJ9 Xf-!ogXwgC7d,Rbd3mڛ26nj< # 7e9V꒞Sl6ޔF%gsEns,͢rG%. _<0/;Ɗ{i:xZHM{fg25pl >>h~+H}sۧV,.}(w#([RܒwV+OjӞwhܭ(xh:f{K[fFzn>UZ u\eO_h-}Yw d|F[2}vz?iWpw(l7uz)2u:ij~[2O3Ζ}{/X/pV2|(a>k|2(+& Fe*m?'öy7wZ5?<�ꋟŗчkhD?2軽>?`1,z2n쳣"s?NLƢ'uu %YC;d޷i0ضIF'~(:J;쪴ǒɇvX2hOfdaIߖ_$%s/>XMke[o7̸c ]||wIΞX2,d pB2MqP#䧩neq#],~9 VsV+g 9bC~ZP-Z0"ߟ1KEU9SH|'Lf_RYwv=n]|yx9@i&/ r _5 u5ƞD> A/Kh7 *f[&/\7e姁il,PrDd(&n2X?wGL?�LKkm~W#֕X8πo\[_y{ů*zc 2%ݱeţmD:OR'2 f\}W)D nǖWժdrx'9Ê-ï$ĔF%9&un595k E Gf׸ 8i2=yP>r}l,QwUnx{{3ʞޢ t:\fIr9|}\_f__aA> qvye[W:cO_F3昽xֲ+j,HGJt9~޻shD³hn? 1tFu#huvչQ>}x3O/q#B@[/BACPG:}ǥ!YO#!LQL2rxHSi]>㑂P':Ӹ߄7LjvDG|"^7J{֛9޸2lQ9@kҡ!N\};Qgcqe'ydw3S +Eqs3T<>w=Ve\}v}7 XoQ|}RG_XJ0>`ucAU̽2Aa3=MQRg!os)'-2Pr#%{PpDQW ?|zx _tcc;卐i 5ಓ#So}^[w`ݽxóهmb{׿FemT !!d[_+ɷ)ZQtbW(zjll)l:kc=,Y28W_rSnsDFYGc\uI o5GC+ǎh&`)s;$|I<RF'5/Ӿwv̒275,Z)5_jm7P}>daٳF;ȋFF;=<Hw.fg^pCu朡삇s^ӗv>sDwmː3"OCQѽ{H簭7JI_牒޵r|^@Vӭw }~n\d]6>2<o{2puڏf7w>}gOfߥf} -{~qԿ1‹'LZ8j<l-}2nĺx28&٬<Tg_Y' O}yσ\67s~i9̾}Q4 ܝj6g%/؊{}g,L8$&4[.}A_U ep%/=4^?dHS\2;o\2~l!t|o2>'M}|Mf[ti2apAond&/LJ۟K1O>~L+^'Ul>c}<MF_&rF/sL;hZoK,jMCؽVөwn|pϚ|MTW? IN՚WLh[~&Fe՟׹?=؝J|!.c$W[_]\~|G@# &븬2*FAj?o՗YVR=eJnիQ.tjȕ.slS9|͏J(=J7MZe̽֩N=6cR19[ Co_;oOC;qH]Vj xV Mkgi~gL>6,_0/aqofxeTG9kCTg9s]K~0Vg9beCTg9'yH<JmaNs IKcOr>uul~weL·?ZYн-;$ݙ@Yέr$por`l6OIu#y~D,_ FuK#2@f?Wh;޺s(e++0_E_2ERoM^}v݉?Ԛg<iv.N32f_j*WfճS+ٺ!\3N226Q ŗ9uw2�()VLU$? ƞiSij~{1.Yzv:~+I}'>p/|4 ȐGq9DMff̾ͺ[M2ڔ;(2VWQut)e4{/?FH2WgOqҝӢ?e9UH8')94 L{YmF9AxP5g)s{8\To=b4,hONOR oaM謳!e6 h99>,zCd/,z&%S M䳫bIdqxIxj36͒džF)e}֒wvㄊ[Џ.KW;� f;tkFI?Je;̨wFYdQ6bt>w[M�T8O&f]og~]C|2e:يGCWxdqKg<Of;W3G3?~_)?<2|8HOEJ;NdQu,lg;"Xu0-uR ~-}Xxw}T?2b ۼ#ÆZ2>EMG)=&^dA&sE|v"g{ d}I<ōV23Z2p}Hg8M􄱖>|d%- ~}ZΚjjw`( \kk|/Ϡpfe2_)ᗻyW ?]C Ώpv]&/nAYcKj6Uuw4//ՖKW]{qhU̾p3CM̕LF_2h<{'F%('k,M[-@WoX[F_=)2(;eQ5N1#be8/|m e8 /wSm}RsQm}>j T ?5)ϙ֖V'U+swh[.Q{teaGt }.w8(9LR]f y#.y Բ4j-X7YzsXj$j1/ ZrD{tDy֣:Q Y'ՑķwyRG:aҚEK@xڽo%^DY9xԉbK+O7xgxRHGsǖg )i:ܩgа:Q-|JK(,K ~g.z(s]~Ml)yƾ^02imzGS-{WWjp}fJFe֦U?וGvC+vN+Lŏ ?j4mߎ'3]7tfAὦueq7KCvqM#ސGeۙeN BFfU9E1n`''Mi(>­1oCUƉW~(.|-tan>\5͗h)?n~}JaW{ ¬s=V;2|N6 7gm?e9NyPI3L|Rw{zŃf 62�>SyERɇzSdqzP@R&^vao6ƹS'J|4jZ>%x!eqc׻+eqt<5ʟ2c[[)w5KE҇U2>;%*~M*qU2Uv<*ڎ{J9eɝ[@?m7O먿J߉;VKqY2NfupΝw31}޽\xL&6[dT_nHr7'Z}44$]6T'5ye=>d]=6;^~G}dݓ,8Ud~/q(::pŗwqe֩l4L u[.*8}2nZz2nǡ>}]>x|O$[y4S]o ˿kh;kzK&_lz7ĵeVak[2t'=oSnՄL@V SIqn8Lj{t%d?3<v~Oߒч纭bQL`j[2IUYgwxLf_%^sg2@݌t>ÿ//ٖ?m<Lf_j^KcWoIg2*Y<ΟQ|}FJbC;g22\/u>k~$<C-dQx񙌾¥aoBcNF?{Иm|2m|ՋZ Y252OwTn-wֺՉm|4j:mR(Ro|mAߖWE_4[콮WNȃB2rQp|mZ+)E#Y: 2ؾmvzNs|tlFZ3|(\7z|rEޗs||Q kΤ/ huS*=c'#L>έ4s|Ⱥ'E_/3T>Uԩħ&lʁe;Nu >;R'&wk5c-?u}Rk:NnuO@v㋸Æ=uQ4?>t>Ȉ>PJaA}~n COS:-;#/YH.^F_wqi]N5]>37g\ /^|+MpQW&N+}: ߕg7W;ߕGC{e+ºUQt35:6hNxZq^|XSW6Ȼʦyϕg,rbvەoɈ+oS:tw l ?tU՞Eq?jBv?<y7y!ӏ-۷[zZ}geOcnͦ!6ۛ>G }BVd'ϽgeP o\B&ڻ X{i:/mX@NF:&/dQQoBG˗2e^NߴM4㽔ToRJ!ל)?ħ3S큟ӯ/IgG;F99R]2y$>M/cM{'j+_cMќ4.cN?Θwly|}{=_2�NHB*y%>ލ#ɽdv(wfO;wwtLèRl/E3={KմdfyC;Xn/aWr;SǶvׇ3d]vp6❚*i'__wQv{&̭g=Ow6޴|F)4msy2ZM:Z ?6ݏ NkjI'Ïꐍ3x2nDSGgnAnx2XٮN6|k?}^Z kJϋoy*-ߨ$왶!̾@WO,g4ـ2Y/~˸Ã&ėq:q*3 )v)usמQ|}Q;_fV\85P9e%MǛKu $Cڳ>NK7ӳLfW~eQG]\g//ܹ+Qaj2i)[nۮ2.']//}]&FY :j9_8,ɇ{" ދw^_:.ZxO&2{e>e&†X?dш4'Mȹ e7;ügm}1j߅Q/W2%͢9s~諸yT^F):jٺZ_Q8kM+e=^`<02f%5Zx])o5/y\g5wh2�}P\v޽7-8er'w﯒~xw;>59 .;dW^CJӴKcz2]: ^}bvro-dt2:I-i]t>Xf͕gC HR?őFF'a-lorS]r(!t0zDB$ѯ=cN $IlhɎ!ǧ c_A*//Wp~7_Up#C(ΒL=\w;Hv WN'?7w|FeB]KƎ^YWƞHϋș=3n5+JgeqT9\ִcpܣ"^3EgYjL>iis}+{MiV~VѲsel>/lvO ɷwZ㈼P޾ɷ=Y|- |.1L>mulۑ_3?+d]hZLh⬐t~~Df_f g6* ه˛~{CARH3EoG]]{h4fSfr0)n ??e]?1@u;))\(eQ#ԳRf=h ڀpxeyxaEóa2И٧(rg>G\jl;+7Pl[J}*vn~g#K]YGewYy+g3/Mמwpk9`bRnhdʅvex"q_KCFPxQ~/gLc_)|_ˋN3/A|~ugG&wf_GrhYJYwu;T.;crwBk&TOw)XHO/527 錸|y2h؜pЋ>z2nn?E/Vg(2P3DI1a|}^l9 Ij%7<fu XSG_;DyN5!lY(Κp6bK^ܵ:GǗ)bQiK^IJ{٩qiALbcφ(L>GW)|#cK&_$z' Q||l:KH\~[4//y޴vDd%{;,e%%c&/ـߜ5|1~(L?g| qQXX0PF=l4% 8MOYd%5ξL⧧m _>} ΏKNk2}x<Hd̚ă[xCėهZ5KG}fG{lnOsM~Y7m}i)e#1j2NyݳmĞ-i*Nvأs6 obH{p|Ӷ*kY.^;cQ l8@ts$ [f;e}4s|Scc[&73Tx')kg/Ls l~sC[QWޖ涘)s{;)\Jٿ;Tėj[Pl.2v!؛L˗x PpE݆݇lA$OXAsDC~rW#ZA1sѲr[S8t?%)S'9 .޽s,Nr mub{]Goa[[S<r znhr·9]h*|L@h _y05S:Nx晞ۑmEg'veit2N2 ޣٕ'qy2Dx{f!'*ΰ+@&dOM+&2jmu\}x:Œߛ,e2(5 vemY=5+skjz3Fr^$ >j3[K7@ ;/wY,dqj9-dm,MGxaY||[)$7Q2˜N |ϧfA;NRX<aʵXɤ}$ NsoI6_w?e_}%^A3,nNvS&*fo'Q|}()IGç݈{2tЛ %YC)Ệ+)sM')H2(ѩtzz~ >nM5^|HNf:-e}iV%sigg˳ ֒x]+z IE|z[%s<k%+iL>TS M[JY仫͢VN<?|=k<QL%-0"v<}Ԝn\g-Of=u_^<2Puh=~m|Ttκ ?{B]DDdc_M% 5}2CNDJLu#{%[# ?j^߶Ȅ6L>NG5^21elC7c^2·H'ci%/n<39:KfŸ/w?(je3//Fedŋfps/{ziVlpnw/{iNiJK5u^?{ˏ憷KLj/556|y6'L;~f//ՆŒXϴaK<(FP;2dvR6}v̾«$m~gfde(;/2`m2jZWH=No}EuݬxEќ!>,]ڇk7|ws-%}{84\_;6cs: /ӏv?ʋR.Fn̾6teamMo9=4:Bc?u5<o?ęgM{cB|{U5Bvv4r`f5[-dg8DZ]F; /7k.,~2n.v|̪GkL>\~̱]&X}c6!d=-a3.<QcvOVHʆ[@|v{7=ÍέplJ[3uo.T[axǍy7 r? ŏ}$g/:āY^DzƆ:ı)M~`ڣ"G@xz5G|tMGGX>cG}d1hRNwΤ)ݗɇjw7xzj_|ހ>Xm=3a4woL3+8IW&; u垩+ϸ\E|goL>>4ދIym^&ּ?9{Ύd͜lɽ >y;n3^|(wӃwOlc>.Eq:oc9ɇ:7.цMAwCc:1g!: uL>TˇVS26,yx2PƊf ?Ls=2hsp./t#da=ߝD]3~N׬ {_76BP�Fn ;e칿B2\f{Su2Q7z|+a2sN|Nfmx L>]Y,Z;eRAB3;5)8;ٔl'Qx}BD IgL>Ԓ9ܦԇgs"ӀJdmǥ͛/yx�3}]2N9n|Lk\̽vJީos۞{2u5 <;$%NpwwzJ&JfΒw}yxsRa~2.EK)xd~~Oem=?�CYd]Kl?~lYhq Q|~Yɫ'/5+/UA|O&Jnfqj͎dI;b'3~2/U�1nfHsw) 7 %/حɅ>3 //G4K&ՊiG(o^?|HjvvlVq,ؗL> "4{ARЏ:^/O5/~%"a3/~uN$<XD!n2( rp9Su7~ywZ@CO{ANdeԌ(Aw=GKLJ7`}:GL?$mG+nf7~If@OCv7dE{�c2N'~~FO8Cef7~(ۚ"ޙ8G݌N̸kE{z迾ѳ2hc98@fRUeKeqL{- ᅩzut2~bscW W}{̾9ivϽ1>-Qn3- 2n֗7qǖtc:(VâeqُE鬟]&K ؿGm2>Fp=Gܳw|jL%3W8`B@aq(GGq <MOCƍCAW9 s,`g]uNr N9~SmhW9sEW9nJ8>W9?LWօ\|SL]u9n3ٴihE>~uYUv.b=:ubruߟҦ_^ ~d4Z)GͰ/uJJ;jHoɪnDcp.{?i2sٷwb]xvӟ}u;5 }4zJ˨\=!o?wZ{89D_MV~PgNcds&l OϽh Gr > ;8=zaNLjN4R:NñvjGL#L>Ng圣{az3uSp${GA_Á(d 9^gozRʼ9s(c?qfޏ'eL,6Rr2MwŧtJRYa[O;;o/=f4Q:~g/c= Zg%~;^/|t29BTrlyJ&ߡBhcs0Z]F>n lpcdu?Y \\kV*}f~n;i=<%P!tw7<qhy}HbwWh:.]3̾6=g{+b<7J&'>#4sJ&2gW&S ѥFe瑝FČ P\}xWfI2to GMUϕbNG56;WF[VK䋍y8,DCȺ dIx{p?|eO3?{ϓNjhKN໧B:y2"k(G2CŜdE ,5!#YoXdŭ_8OF_0ޯ ϓه@by2U OOȿW~<~L~ɆΗL}IۗL2o]p>:yC_2N8LW V_2#؁h-utGV)9mGjLIyqW/~qN3Ι_׺ɾd}]z+gew, yY/Ï D/B2u`mǣ÷̾vc@?hy}uu7-o}Xog~= ׬[FάS %>}yI/X9 iriķ{i"UMFߥNh4%򩀀ϗzdݼǿ%&}yb͖w/pAK&crAǦ n2KL1&;9C>c9̴&өVigVpMcbΏ1zl C#cK_ FV{/8.O?2VY3Dǧ?l#sw˩3{2;u((sj@(S;)ܼKaRNc]M_B.8su)vQB>}'/:npq%C_J*"@3tus8 9(@ˊ54ruؙʎ$r`/q:ȁBMY\plv>Xn`.ouQ.osN)5}cw|%B.9luv #\+F|MUzj=dml)a~۵7t6}A5H9J(̾ZL T;<d!!uG5Z]FY�2ڬk?]blGÓ}2G3J5e@Ĕg}s"va—2,uSSfu[2 TF\Yo])4`{u>:e M?@9RFh6裨]3)wPV)pJ-,H}4>;NO}`c'mw7 ljNz/F){;q8bF2N?QZߙu > wa[vycBZ> c:>%sϙn^ŏ~wtKS%6AzsGa=/L>5MuLL>^6}8o"iO_|L'{O[hy}k?d 8߻2lJ c=ܽ2ՙzPگ>;|ڕwv:R̈e#&ִueҁ'|W% ͈BDglVS<oO^(\$鞯iyVgc J6^ܕt//c/n+Qi1'%x dч^7Z5QdQwqǸq3ȱ4UM{ ?v2,t!%hy}<TBK7w l~\'ǒqm^|w q#2?@GY~TC(ۏ%/4g}!hN3{~~ԅi-9tǖf |k-cu5!SƒW OcF4c-7SaX28´ZLv4!曱d]Fpx,>j 6:}'Qӄ'6W%2>*/ 2rg8[&_`g$LzN~[Fn1pgяLg_fd]b^؁cǖbjva|hu|׽zl=<ޞOAzF軝F(}-dT;J%/5+ 9םd2"وIc2C[tts"ęw!h}|9n0|7x&/~$fpbnVZc9{Lfir]Iy'}Qu+]9 'p~3 ?n񽁼1_#U>KGET:e!]zXjqd!߷#`_/"K do>u}s<eb[F.IDs{E[xt<h'O^6VP,qb:Ɂ#Z[^>s7rO ܳ�̳5WfSK㡎rpP0wemj6  /p|Auyv̾mٙBemWʘuC7p}tUTe yWq2vf2A5싐񷋦3o?)x2V_sF/a5Qg g#dQ|5GRS2li:BatmF*՜$D3zt VC$w'yP_L"e7S޼2uS8q%4J;SƟQdHwG3P4oykqÞ~7jsԑ2d[E;a=eͬ[) ]H8:jU5*Rfic5Je͡5(هrV} #JFaUn8llqzNQ2rƋS=b.%֪N9>6ɇcż갇?+}N&io1e-/ϭ'idV ? +}h~~[؀7T\}ߜN(|ߛ{{fWffY1>t +MWFs쯦> kjWF];ܴreB|ΊJu\}afG)x ̾8~vȓ.{:vJ8ڗ.՟ >tV#aƸdEj:@?J8L>U+a /<aדهdQ9m:7m0Z_f_nw7FI ̾Dh2ALaVē+#DsGrZ?Gc$٘K_ǿ4˚K_x/關WlK7 9O.}@Ǟ4K5r}wvC1G%RME/YK&_gMw s+{g9fXzK_M_=UgVj%NCXbޚYW:'|eѬڗ[F_ղ%xoCd>eU'4;Gew{]+x S28-ڌ{X-o3]iEy)wn~!$C <zr]seqjhQd]Nw%Ȣ &VxXL{W;PJc8(JiNM]G)*<{ Nsr=c ?64. Jg{l/MfCf)=IǞb{]ߐ2^5ClZSC2Kأe؝)sQ%rهn5jݟ:KGfߣP` "o#H.ps9{|}lԺi`T';?k5b4,OZx T';ek Dh?HK[CTG;<Ø TG;~l(%؋IjwXwݝԫ;^:ہkv5nu_lGhN{,R'ʦ#)Eqi2j#Eeɺ %-YgIv jt/neӊ F6VH8 GY9Ga_٪&2=L>|;MXm!o?N.GZ@k=[W} 3Zܳ{9le:J84)Bs߸(C&Q ťz3d!J])ϒM_͔gծo GCm2ڻΔ<(+񇼦ɄtZmLu 'f;xN9]L?$5i̿~~O+L*]G;Hh_w-tqA;uڗ*%s*T2;{s2h^<lG}n[nY2mD^!|hQ%c7޴N1KdsmZdmLjyeJW>+lc2[RzZ2hh"W7WfzR\Wf_wEƁĈ 2լȋc*W&_F0k#Yoۤ[e+/Xmi t4T|2( e  PŬNN8xrHiSHי6>{`K\Svw\dB0wd%!dEV̽<Z ۮ;O Y;[_^ xp`֯%/)$ÿ62"zQ 𖩖L>)֕9D]֗їw>k{hy}ua5ʨ%81ؤ{w,%_j%ÏZո_e'o??(6v%zwɦzW;{tkmk~ wcR[ߧD^;Xm:)Fұeif@o!6={2ʝMgkmj:ܑMRm~ A/>~eQƠ oS[Ik|u~ojS[e7x/y2.e2nwΜO_M&߭<y; 6仗%d軯N-(wr>J[wM1?v)e=@}ȪwBLJW4(Nu3%{,*O}ǑWa{Q4ȧdn~S/y ^ud=]} Ph}~7\{/If:QYԑYϡe0V':aTmR':.x~^X#Xޫ*μ6(u?юǛyI(M[3LĎNq_ՄiIU9<%C PGilG^ީXxf_CFo)3e}Gx|tN`m ͤh{jc2(4ZՕ2e#a֬\FM8ǧ?9VʯٷFAdY |ZgGO ȍ8&/?dv[P!/,2hu;g<؛Mgwxe?kgihkFH'Bm1KgމgBgc~e+p F[?e5K2j&)Eȑ2ݹ223u/-/|D$WY) {s\|ôe})ޭH PRfݍ1"zP9RF;OTn:$TW,_?4Kf6&;zΒч}m5սcBΒw.=r>cчõm(hb}޿>Oi^AdPlw dGbhИJfg;1~~~Pm7O?uYW2J^;W&NщS >{eqJp(ՕUf\ ϣhL>ĕ8Nc~Ǝǟ2>"++Ҍ{Wͮ8^25rσuQueR掃XnC;'/6ӋKlO2}hsdt?|,6ts$lgDgTOO&6++e%Δ3+ˏBnH1C6߉IJ{UĻ&I\ qO͓ٗ_'d-//թ{y5ȱ^]2Ό7]2\fOeGKG;[__rV9z'%sfCݹwwIc:%ï E39qwW V.}]XopknPpmN}~ϝ%s =A?av-VИN?-Yn4{tŬe!V܍#%Nϴn}$[]]vS-@΁x.2.[_DT(5|2 q| ,gwn;pL>v:7TljHr້~M-;͗$<ߞ^3\G%Ok2.)g| 7V)Ym2]3-w]d=S�gr?l,dmi36~2=GJfV66־쨛2Tޙ;э3z#j{d}ښ-;i3f7\v["d^u j B؝y뻼>j y}|n PtU8.}ڸnjvy59kulH /U9.KJ/ }! U'9:U-GdN|A^�?"Ό:ȁu>5^urHΒ~ѷgG8!س26%ɨ2y[Htx>e7K EӱPu}B7[OWi͞_f-n#^; u~Vћtjgck:<j( Y.gG=!{˚o"x ?<5R}l)^1i!p`>>43]qߐg;'V*7b!((e~GAp<Պ!>f!BތbM{Vџ#MkCVIM{bwaiL=dL#Q-/cn]|s{S7r}v8| e٢?r8 7eN7 w"Ns'ϲܔ7j+1U%TtAMw_*M1 ;i)d'1 Iߒ_^Nzֹƚ1do8MϟZec7N-~oii?(DۣYd!ZMu>�CF8.}4;lm|؁[2h"4V5^ӽ28j\I}gߕpTqc�-/?*\rC}{e!F< fGN'dw]}aP#>1ߝz�ѫb"5 {L>S][nEyLqS+{eQoW<|Qߧi:@ uԟKƟyN}2Պ&dgOp>}Iۥw1&繇9ϓїȸ6Y>}ν=ǾOF_47w9޼KJ7G#,_g^l|2;ow{DFiVݍR>V|K_VuC-//6_$}K=;#Xҙ/ÏYbj/0lxK_ ?D�'Ï{)뭍oAG-[2'?ṢƷdUn&'T-~t2n;@tļj-ӯmΣ)@GES%k:K̾ss^oS˞e}ƛ7>Su7WRi[ ߖwyל.Bol8D=KGw?Nwػ?FǗwv3|Nc@ c5L ǟܻxŝn¾DCK2μnG3I~&w ߌfL̽ljO}z]d[;r8GLF-3|N]G>`SLcvdLéҼ}ܴ fo_&>3|_b#kF.T7~GfI'=zPC<Z_fXK#OxܯiOC䃐D:ҁIq"rX#X# l#Xl*qǽ<GNcB`H?u}tr !S\98oQYƧu<fo;|rC?{&a_fem5~I/>-7vݏ칌>n料}5emo52h !(DqgXe\q_ r֗G]Ʀ޲r1*_?d!Q|!Mǟ,@ eg4tlBFNOEK3/59gNw)9/da{k.svǵΐgN[W'ُ/Q`̱y}>cyE]zO(_賢tO}¼`>{Rf>Vip9L})aj2޷Gi)e žwl ^aK}/m n)kG7Gٲz{,RgJň/wURY VK}.: "FXs~#^W Ufmd;kKnNӫaL>\ht#3l>΋4At@,Jfg;LK$S>v3O?lnf0>n^sR,x]0/MŃWjVI#n"0Z^kZѹD2;kZ>Ju7-9UpyWFo D[s-//>EMk!on8feߍf ~ɕר;zW^@by]{<Q3I@<;Pwt֗Gn̦e_̽eӉT>Z_2ٮ ,fo_&s ޲MߓMS'պ{~LF SU/: >J4E߾їlnhܤdN31G<fѧ%gOF_<~Sf:G{21{2(h8P/]L:LLM{!u;o߲̾vΘQkK:1wO1y}/w+ ?lNP62 FX~eށgsxZ2ߋ]ͨ{8#֗釠i>v8( //ӯ@۬ ~92Zt)o|wE5ϖW׻?\*Wiz;?|i7Z^f7j 2"hfy}nyD<k.,/z-]9|4n/dEh}}THyMLܣZW-YypGzػ%41f[g-L[WFY Kӽ.^Gf*"&t#5Z_RViPzhd=#q7{D>ލL{v~{>{&l}{X<;gg4ՕWh }?_(7{ZuG{pi7:2O#js;y}(K下sv))%wh-y}|MEU./ox|y+ Hr_|߹%rp}2+6e,UkX<ZcZ;>%rptD=:R!(%9<?~zei\f^hF),k8CeqN$-*g26] N*CX_fɖ: '@8i^# OR`>}r̾Muqs022vawlb̾}ӺY <Vqw~'lq=dΎۇ|ӧg;i[Qg!։eq .k?yC&Q,ıs"PÿyecIO٧/ڍJ3Nޡ\gUkwz(#?s#s<<+e!^+ejE;5g{) N9OZ!;+eSm;%c18R,"{áBw+ ݔw>7�%;|gSe*󗌾u RX_f~_F2ac֗狮{MW#g3p|;VsbdS_-v62~dN<ʁe!.pc?j`7*5Oc@1U2<i7V<6x ?Vhg< *ź2hшUQ7k ?t~Ӽdve:wAs(2b^;b1]"-R'Y%l]8X9̽۹Bbc1hMEqy}jp7Z[?uJ畱uoKj쉅eEuC,9Lq%{NLFd{M̽Rh^<lѡd!Z]X !瓹vpx ;g!)mQy ={||Iuog{O_"G8z2Ab'/le^ 2s}y{L~/}^^` Mxc/|xR/K?6^2 i=�V"/%sMYۺeC./[_*%%BjQ`2>w MQ?~&󳱗Lt~ę憽e[}-ZRa}|Կ]cq0NH>֙Tή’u2.0;2Y]W!a M\{ca5/F@9e]6u~q̅NtRKZ@2νenчVݽe]|{M7:<md]6wOQcGE=Ⱝn> 6PfQ 6}.+M9Өm2fm2vx^FU>e75*fm2Eg2G:o?/QhMa3KdK97巰$[nEƲNs`uڌwctV9{I9CHfFqumؘ\qmu\obؾs`yd׾ [ijG-Olu7-밵/<,S96Sy_zL(1:αYm>O=B#<_j.oS(ͳ 0̮8C9pk]Ecw!b>s>sUCٌ2v2Z/J"ùn=ҐO^ه̦fwchf>ڛ΋?㛞2cu۬_OppCfYz8.!o=�`2pF7Q7g>c)fG12eיBT8!ϲip4C+j-c3zuwD }6:Bŋg~3d/4a_q2Y5T8|L w;vZ7BV;_ ?՝=) k{7OeVtH~'SOcVy�B5)vmݓl2~}2vLOKyޕ)]2oϯ.~XºC/C2N>w1x>?hZ7\Ac>w+W%x;]2<Aep^s[ w r]?5y=z6Ho޻2(xҘM1׽mbpeHu#Łw*UL>,]y>M 9':}~GC͞^^x΍.9DN=0W_?0 7;Xb_}8~cC>R]vemWy:8>䒻)6R!i{Փٗhd;4=֚̾DXqcqpxd!bih'C6{#Huۻf^s[uZJٗd6o8Xi?}q<{)6p}}Y}˛6<FtȖ̾LTg>auf쫕Ql+ʿ7}29h}}I7í� ڒWCs iԃa8}iK_E+Ƒ6R.[2QY8i3/B6WZ^dS2Y3Ne*Z6ٖt[eH%3Z^]pZp5a-V_|>i-R2I/qܻ(cy{h> -szvvl)W{f`[ލZzEkbjc[f>hOoo>f_ʼn gsbOslCbof2J907M%̾[B}Lfi:?+3~̧aBdXZ4{ު=2!5{TkSi 8 d}km[FÎ2PZq_ϳLL&Qb|q,ru|pLc6R4uX9 (jf]t`yk5~~;Գ~SG:d= <4:alzTuMsv.=DgZ;ԁcš:%JֿuwbZSol�|fQ:ρ=reu h.osXva >-C*?1sem*5QOfWC*{k:-gLd.F逜|/oJ?8se< ];n>}7jTNdN |nb^B&8?-5>߯8́rvt~Ql84 }T!nY,xkcg~>|1+}u2}[#R(E& n }q%1eYΒpQX[]w{VjM~yހȼ_f^{[<S֔G$(nG si bZc;Z/[kQ2x|~|($h}'?7N侣eZ]ul8:חw�zj֮̾VB'y񁬑3>ךl>A~Jfv5]vI\g9V2,k~~ludQ<!C>{wSs-3T'Jf#힟r=l*~7jާ-ps%aQ2>AlO+>W_,D물qV/nZ ?v4d / 2vVHuR9hz~elA<3)+]QLC9{ ;G)7//'aQ Ib]~v޴ 'vߴ=~ۗK\soOUSK<_vC8xcXd׷ϔqa[=~ e~Eמ ?JvjNGmK {Xht១d=}mǓїvt51G:jx=}uۤIaY28{uL:,}8vێ:YebGY2 rx ݳdQ[mg+v5xnlzG+4mlcۧzei?z5=K^1k*(7Kϒi.hVЋl{wi/Xʩ2p Bcr`}>~]y $aO2hw3~ggC<:\lcķd:lp:[eVQ״L[g7AhKiL?5(xo}:TMkDJrw𽃺wzL&\s'bkaRBd8zL&ߣ2WNĶc={||ti *wt̽+{|.{$=Ů6YhMG[ޮc2aCZEngWj8\ruՔ:^=p-DemPX|7?E؁O_ժD alX}7:ɇ~u:́]8=Ǚ)/W3Hynbs֢s`ӵ;8u}<tq,9}5G8Ah-h O5b4jttbK>ʠ6g브>/f#[Vr z\> Tۛ+ᇨkap/Ug"e68]M9|'oVP+9C::ᨵxŰ?Q ?64gOok(~lƢ uvxB&Yt;⟚:g'򿓮 }25 }9c-D{3'dYNhb7 |Vd,H|ø#dٍnཇ!! | 哣Ds/e%e%/"XA5>zxUKCqs'e!M<uvoUyRf"rȗ2� SCoS/2?9&wR1eJk Ōkt;Tѥc7eZ7ϮL=|cczgudQ|8n촱B)|Z C:~eOsϾ+ 3o2OH[Mz?)h}~%S2k®ӱw6GyJl!3Yf ǟ?ǷxAqCg՜-V~> ?Z)u$. G΅Cb=WF.jX\g ? 5@42" ]eEVw/+/t<FfvwW(6~8Jqq2U7D~ld%Ǵkr?9y2nMs(O=Z_oEbi31'/r D?&hu~IeΟdovsft tH}O; D뤲|1ϓa?/9~#]6Z^]49SCdcpٟM=b&/~/qȷXEzO/2e/~Wunx?{ B$#_4%va/jV-fW5w d/0;WG*9l%pc9;z}C@mIs߷ }wXFewr55!ŷ K?#z̽{4XP))GPʷ̽94s}eݸ6TJS<2uV~)Ao}ȧct > g,e̾tl}UB`|r&qH,] 2h؄\j;i^5z&?}_:t{>zmn2;YsM&ߋ~ýȻEn2Gd|/M'ds/8;^CN7}䗴dy|LW:?knfRiu`luSWBW:5a!nn[\pvuNU-3:ׁ ؙ#@o!/k[7TC5rqu92{-dU:>R /:lv>Ì>՟^k{3 *xə,2x&B tX6]Fߦz~]F-VM$&]zZNkngq,e6 )‰`d.oCkLΣ)!ٯ/ouš_Eq2tF.VV sglCCz䳽Oګ<d^lk/s.k.?dq^v 6"kid2X^d}>g1KNoBCh~|\i.Y8qO[uΞ_o#Yh'"ΐɇ-n~ɑSF;([Z>)5-Le<e2Wf6Tl?z)xx7v]|e5'ñ2NZWqc4ni}%[tIS@'y)e ZQ\5jG~Ȧ\!C%sMCW$HP<K:vH\,+|ξ9Z/}ȶ;͂u֒\Y2ߞUzC/(mxpp?^h?8{?v'Wht?g[F^2bYxȣ~eQ//U~efO5{~qB52MԈN0$Ǖwn>-_|X9!Lr_|c)546fqוG=ȯt<S*}Y2h ՈNdQw]O^R.}G@Ÿ7/բYoǓ:)y~lQfAǓm=O_fk_p<|H&wW.oՍe=L9D|L= 4nt_݁&WzA&-d!hNbУz:|7+]a&ϛ7W%ci7ÁÇX2-<s(52* MdUBޡ޸,Ln0zDЁ>zBâivc@[/eq>9sll|TiT/}eǻ)${^l||F8*]5f!e]v@v7Nd0o[fh#=jSl}WcNp=ds2tUAk|yD-d[MCݲ"jKߟLǦ& \=d1m+6Gu`Xcg8{7釃!ě8Z^Nt*-?}d=;)5LfUKN0{]Z/_f[?2EUQ<f߾̾Zȷ>nPYgGdN_ǂ/ yG`bw r['+)f:-:srd<odijkdFPǙgo?3;}K{φ(Cv/X):A!z+6Ћ /B *v^q2}xGF_jF.N G8emݵT.NZ~<Gߞ'W7j26rs4j.oSyP526蛪Ӟ nes4o}n9j* i3;;ЅEfn"3_C~ rwsQ]%grK!-^ea2>VbL>*'̿ "f?L>|՛l(^!k0u/.ȧYӡ*O}xx˦͊tX1Botz3Zt7:2~هw߉u&Lb2NϼSߡ$7%6pvCMQmGX#eU#]T횇)ug{˒$!R!~g/"<iG(GgiWk̾Ft/xb0U>x/8G>Z_fS)-L˽%~]u_>G\׍q^sZ4Dsl@E23"vv&tMEs7g%m 8X~Q2bn O IT'9 ?m58+/rǞdT~gI`cz7ʸ63>޿2wNfδC9s qe[]h_/2p_F<jӕG1יSMRK`s}أ+Ycpp#nϬKko>d><�kb�$\dd8lb?SMrxd𱒜͡nOK^'//΄\81e'/ 7vGi0-/?t )2ӗW{܁$9'K^\o^>CI:%id {q]璱Wڎ<Lv ^.{,J ^:6x\2Wu>ojsÿ۲.QLyrctB.|89gsh8L5s GKst)˳e!z0 Dln}DK>1ɼ;2"Ձ B.YՁ� hy~ļ÷!p* eݤ6G鳩}[FŹ_MFg3wCwxnXro*nVnNMEn 疹l?Zq{?olٛL=T\W&3ڝZm=OSeeQLН|zܧ 9={tmO[NS4zԀĂ^@Ad<o A3EEivDKR iKW+q`}64OKn!9'yQCU]�Z=1,DaGHSS;w.1:{cA΀RWgNuurE0z̞?/os%> ѮYr$}'}8em|MG>AGHWӈBkqK[LmNBP.o,a&>.o~|β7Hه/ɼ5EsD26K&26VZ7IGgzD,w.I:$~Q0�e:8@t}7;�01v̐Gu7e}ȸV7/W;BF=Vwj |5ɐgeu|{,}f3t%biC_>vQ{#/vKN23  }�u8piӝ=Աۘ7l)o&/|)B2MEQ̾C7VYhy}M%CLje;Bg �2Nxoַ.9RF߹dj$ð7eJ)A\>燽Gsॱ4ԇMY2O^!u>JXdOW+}{= ֞΍~_=%;u_5òdy5z榧dq8+rY2];[ѧ1gX_7ł\22=W&^[qb yeGGن+Ν`c8sȔW&&SN@ЇjZl2X"iD͝7М.jUjye &꩸ܱ΂+'nM/ݔ2[S |l'que~S} "K$X#=1vltXC7Ԅ5L>u59FW?'u=}|9xǨQ2'>">ͰKש;7<}+w 5''C3e;dqc7ƻ0%>ơx-|l;֣'Gk6JPK&_PK_evf`q6awK-|Ul nZ5^%>j~}5Z^_VsգNٮDs-}w$kzK_K&҉I@(g他֥4>C͌2.K)e]6axjlm"X+>dӭ>ןg][F\c͑lyxװ>൹c9nL>T[*L}k{1Y%L>r6Nٝö2|8jk/dѦvTKXe2Џw>֡fxrl(+binp83LFy.6m9d= PwEWSR9?w4R91_7]w^<ַ8il%|4V?u~ $M^md8צ򜥎r`][r\`NPQ,tL6,us:gE[S^1}qzM1l,u˿RW{)v#Btļ>N̽ϬDs =Y 2j>iq7{L}n;ʁ?atuTh}~(ÿ蔕eTٯ/3,D}df }oq{Jnwe7xr ?Ӧ[+e`i@e ~ƶΌ ƌ{Cf-ߩJlƦ }|B!}Msjr2 7NݷBN}ţ Y3d1g-(;uG-Fѫ+A>cwXK`;Tǟ!P ;} G*e/:ɨГTR߭ƶwljZ)8;pD8ͮS %]~~ *e ;OWh}~-|Rf5yƆ?ili[뿋w)ϩMc!rRꙍy*e;هud4 ^<Y޴L>{BR7fS>Ⳡv"2L>lݐ~P3ҾHn2Ld1чzfaQ޾L>Jt?$U �ʾd@^W&_ P?x? > 6T)5ڜGa߱+'2v͏Y82byNVvWTޓ摦QHF9;+s/74LQW_~ʦ ury1J̽D<߸0OS+ԓGլ9>~Kj6 Tqadeb7]D8~ g=|lJkmjǗtlJ3Z!Zԓї4xԓɇ4{?8tN>Z_F*k|"{/u2ww"`W͖KF@ˌ?d!NsP]2~+VypW<Cw%8V' ~̗e8;=v= ]2ZM'<r΄wH%}d{rS]2.ZZKPRZ-iע4DdyeQ4ȳW/"m?n<[MkP 0ywv9 2=oll<3?e;d̻e!) >Sќe=Mk yGyd.62N/ٝ)LFԦس 7&92&k8IuMm{ߨtMޣNu)7h&s!nLڔvv\ںRLG{Cc<6\u'>֘!U:ZN0zc\u[+TɮzԊX*'ܘ*4_u=7΋5U^u뇯_<e1yG['|zj=}i,xqB;^qnzbuJr:Z_&O7H9EۻYo{mEe!?C2p W1ԣh>ûd]pcu]ަ>fWc~5V1u42!.S?ux~8:4][,*FȓSG2 }7볏97]&|x)B(ߞWF2 i-\T>8s~kvxCfeXSХnç[ю}�i ~ߪ>BhtRi Ogz{Cfᄞw]5ːظ2ݠOo!)_)ۉSodz�x:j)Yy?#>D϶3M/wSfIBÿ9 w'*ɐs_f߹q &$0^#B[çI/z!+=dvCIÈuԛ2g['os˝LlߒT^\^ ?Mob-~Ni=<Qzd9 &cY;ꆗS7bdagw"j7-|+d38RdMNSӂ9%!~v[2pvا?b]富 ۗYueɦI*FE4QJW<b[i˘miKo)9 go__0\|HmL<WFjɍ5R2%{e%&KOfO~Ɉ>}[HAAc89ne%~仟v2ӯܔ;|ӊ gH)>}H&-b /_fXў|o27Sͅ71d!=$EP>}{`MU,촏 ?14ZAPUޒt"dY7jˣk%Mw�Wj"{Ůdb)"}+a-~ZLd 2XMn>|u\"-~v؅+(5jxKQ t}rqo_lӑ}g}}m~u>oC^5YcF2.sn7(~te]5ÞZue]N*vjmj1eU{f_gs^!2e{eZ ?7~M=G, c1~M쇠D#U9L?ݑLOI ~Gǭ??u2{J{9A4hu~?nw#/^u&8%L$X:yNt`ܦsEOcM3Z~&/,O{i5 ~8(Owu"ռ%ۛ:`?us)sN~o!vze5zG&鎠F>gO&қVC>�{g4t{8Ow#͞řs|;ڷO\Q_s}vA=*š&<}wFۼKi-*66>k?{vM_L>mwS s|F5f%s|vVW6%sĝgyl92֗4,i)d 9nDo4A�AbάQt4HMP[{@ H:Cy2K7d3Z}&9{/S^l{�o`헹SJ0m2lYqї-Tuܐg Wlđli._f,y%{ʮ#2G1˱ɦ-2,<te�~[]~:m l2pa<˘gSIt'yهK\Usxž-[EIYrm~x8e8PiE-'~ l@n}V!{ >5*e> ^k})}*Y'=|'e!-YX^CH=W%ly7_#-U~VVPd{e=KvSeEC>Ng}Db{/s/ƪZCx׼7eȖ/9ܔTەp r>t(x-J=#=2‹׏Hl=Gf_*$ٍ-Fd!(%rnk}Lo5J?qZ٩ry.GfsTF#vcȶQ7h)#EG?EёO[d>26mi=㲻÷=wuợz<pQR>iQ+sdW68Bv(XMv̽mJWN6<Uަ26OJW<;tI謶} 5:=Wf_quWbNߣ{wetJї*qxCBirgSbu´ǐїn+ AӶA22O/`y}zYxVɗY u:G|u2XL+1ai~X\^^誈yM2&6~Wk}z!h{2h Cfޱjm6Tӣ شrk}y X^FپRө2"ܺ{WOIk}zxljo"lvBX^ٕd-O|Ԁ,8N唦֗w'2;ʾ NϜ/2WtN!�j}Kߥ8K1?Jo7Z̾sCiލ9 JWKfC=mKf=Q:X_fg+A#썧5T3 PZz~Ϙۧua#/b*r .oa SCд8Zn ֢H==L,?BDl)٣8wbi6X֛'opud8jvbyG=;{\uaEYZ2߉{ L{>(W8^?A4G4neMSȮgNz&SoF/N)Dr$c@<yza7!ƥ7nky{sJ.5X.oܵ967c[䛴|gdu4wQt\w2or[*Y4dk{6:>?.!2-~=}}Ff)f8O/do<_~fs[襒L>zJ'ݻ6F7B&bf.dh62ɱV=BFaN=d@Bޙ賙ձڠ\92/2la}>4by|=(pz, 2 }NWd潎/VWRN|aIc8^-2+*\`>-L러O9״:ۖgXoӍ`!,B̹L?rr_H̆e_[+JRZ^U/@J@yȖ82uV4ٵ~SEsW {[ofQp@N[L}[y}bGw_F2+uJZ=ӔGTS~ăNRf}=RfUrN5"幣{2bq:Fp{̾SM&dT~ߑdzRp;X_F_ph $Gf.@ݛ{ wgk:frsju}2(ec/ %NNGAZ1>l'̹볦VyQMđg̾|;3}xef ~ӵ$OAעaoKKlWfE}y1~x鹦ZWFtT,<@"26Ҋ/+[: S:]}IBӒcԳOexf#]hWf_z)xqEsUר♭e2e8tYFkiCF_򤣒lK%+ZK֓�fo2rژk3p#(պ搹w2/=s;X 2dzH 4O+`s~qzBA{|tDy{~&֗mgH#R ״wxVC2wΏ)ڜ?)tLGt"<><E;xA(χ]?eܭ9bd`K YeCE뻹5wW)Oȣg@^3 |2^joS9wszHu_2nj ݾ<7D=Ѭ4%AdRֿ`Y79;w} U9<\:ȁW5B%Lu۬<φ?3TSs}dWtOucT9ɲ{X((JIlvG:ɁyV/^^>u˟J\{TS$VkTQ,18z{GX,SТ7::M7 sX8B2]2*]N:εL>k,r1%&soR8 ²|7Z4)뻼{Uz4)|RVQgLy֪rw24R4SLў.\j''n2+,vm.Q~`'}24%ه|FQy8 :BFBJUHf<ꀹd;dbU>d!ec;jxZ_nkUfZ~l 5ΐgê)!q{{O_!+,#]js6hf3rg5Cl 7"tBƞ X.ZHȹe8\)1<[5JaPgױvk}}F{*gl;woS)kn~v*5PP {_ߖه;l uS7ND..pM]= ?<{"][~>{~[R1qOly^-L? y1<>)yq/ ֪̔ &Om)E[+w�̽/}%\O`/O?e!^E;>=<SF_B88;z&4{LX4zGi GV;D>[M|bB|AԨڋ:<=w/`(֧6#$֝cGɝby~«a6`NfWiq#WsdQkPNTn4Oq'EXGLGf߶R爐JU'5>0VuȻGx;fqȓj ѷg؁L7vueQj,oT{VseoV$x(ol-/1}{Ɇ#zbUcWf}e% ^E[ٗ"~GU]$x-w!/V-E4)e%5B+S#Jч[=AwڟObu|y7`qĄ\76֗G]jgQf?6ok;cWGlҵ24Oאw?iXC&=>5dy{2NjC ' >}8VWaM{1|eM|'w{@u蹾b}}l+RyrxM|T-"~~z*ԡp~{仈98e72/2ZStәۮ הw-G~=^SfžVT3ΦDŗLKI[S<k@k#U K=Nz=̀d!.d1.R:)lkP,ucC7]Q3ַ[T5Nw}˯ ԯؗ:VKX<Yo"agb%@y9x^~ucq2:H.jl7y}~δU^N!\wqiD-ɇ|Vy28&Pt*adu~ jN2~[ Mmؗrqd1-j5umǾ"UҖ*)8s[w~3,[pN7u~9D{k ?<1[5f S<{Wi ?gѿ:I:?rqeiÖ5Y;r~ / ﮐٷ,Gާp6sG#B~ѳ\!mh^Tv2rw\e$Vм9zӛ+d[P)VC*?Fxe*)עW׮=8hQc_Gfc58^{fW'km|X=lm}VE6^:<ZdAXl|~յe^[tM3-ނ}' ~Zy9 $+-i/Y)vPKrm}HjSxr2<7?9YfI>ߥD MʽՔY){z醒'_e9SRؓ2o|1 {/޷#?:.oaszSFϏjg{gHg)/֨y"O}"[hJ~]Syfn$GE:2b-Ѯ}d{5/ѭ#/XUkuk#/(T~cN wdudqP4;iM͖ݗG=i/`H^1^VRl.o?;EgG jU#o;em|˝ uemsV_+o,u Ѹ >$TbYs]h2GU2.<~D]ue圳x֯2Jqa=Hpe͟s>={l/ljUe!\r |͒^ 6+MlCF_,8Ym!K"}#-<6d3 |xGur;NwĆCˍj~H0:a!ﰐ]dhnf24U 6dQ8cT>[p!pG lڔwvy=nᇤL˦ sV%ы9/h/<Z/vڔwJ7N2h�YIG\;T67ٔGr8,;'ӏa_tOlaxq٦L˚B{a3%Y~𻻼.@KML9~z^`d!B1\g6Eaʀ->"mtGWA>m<⟛4w!?r$l|q/=[iXqOTQ+/_Չ,o4L0V$~.B܏ck+sE2ښ :a 3ˉF5+w0wjtuXY.Qv�{s`yn?s<?>7Y,a膴֗7bfMe|3|LDz:Aq9t8dM WAExS>$b]b!٨t3bm2fŶ;w; y#3jg^2טAȞL M0aI$m�s|kJ/ ݃ݍͨe8g2;ͧij.1Xd_ ~ɷ;jY2pq?SxXz{BFb>S;Bܹ݌zBFȲ)b?ٷSaGL4 vjLJ-dQpZ0Ŗ[ }-SK,d!f.} t-dn؄p)kky}ثY"BF߃lri=[F:9>CtQ tge0N& rhY>q`XT0.G7xZ_&"[a<fݞR2Tَ*_--t;y`ҸOe9EB;I/4X>]~Ó> fK}w){f'ey*<c\%e!,IdyK}"~^G[K}1,mS)XP\B@nKw:s3<b#>wM`¥//gY(ۑ{[7]vdE~ׂL>KH`|qw5Ez.!Ʋ#U!TsC2hbUtTG2 ZEO9Ŏ>} Νx8>*E's϶1}żb27l,-<]{fWf9 . }>_262 y#J:̾}rnp_<emeWFGGߕї^) Ys5+V%^"ڕٗHNUwǧ6=Wf_z.+t\}x'Iu>2rgU>{C&_frG|[[CF; /@xG[Ї̾3(}fqEOL>l,ͯ1\{m̞CADUcE ;^ՇLg!9ɶ7=2N"F>t|c\QNfCO|:$GrO|Otv"F֗bu|cxΡn wYѪLHnHvO3)R)8ezN ߟ?t~.qM#r* fdfT{s|DÀ></6 _2(7lG,n͗L706zXo~43ɷuSy�i/quZNոn_X5߲[8P\7dhj:ρqmCseq,7?8Z59suu's83-;^v&&~o֩^ih}&oRY7|sox`grc!a+7|m*Z7Sэ{LߌQs8'h-ƣ:fs7ww銲@xL U6|+bM.)1<2vn Ձ'2X(Z VIh9.oQg0Xe!ޛs EB.p|A?e z{l[{؝o<B~CbI݀7 л|~-~]l+]1^}F1>|Q {2l1,~*R+!lZ۟f#dqh2pV?޳Cؾ*xd9>O>{4˸')S/-yuo\o}vf\si=2ji}s yg #h?}|fSt[|s0vs-ϹKe!R&Yf_qG-:[7-o4<e*T"eYDO)stL`1jmDwڿ2j>}ĻL2b-? @^V5eUlH]1L28]|}s\#.Xu//{V;P 6B?2"ת=# <gH|A{}䋻*ݦt-/Jb(},z#eTi7j$wܣ\G% cY_liEK{dmʛ}x7#&׼+liʣA֋'Z^&|ŗ^&߾XW_w2(]}qer ݁ \VV <St_|:K+/j{2 d[v!ٔ3 >=|IaB>#M+[1df^/Gk<̽< o\wbkvHu3[ {R'l?IĐw&2iwɇT7Oл|}ǼzSĐwX+.v12Nx5BnǐGӵQp<eNjgۍ)jɗ/Hoy|牦o=@wL}牪ToӉ̅5OSF}Q)Nm\gm0q¦1IL}1MZ!ĔGJU)R+tSfJc(Nx^ƻEo軇m+?Ǧ;doUa{,W[p7aƖP9V*fiQo&%GoQ9W)x#4vSw-貨v  C~A{G^iU 8?J2{ߢCAh:Lˮx0ubUabOS{ i.[rvBs>Lf[*?Jc̾ U(H" ~7K&5ǿe I3iM ǝuVax05b MfZ`#kvdM*r-sہ̣.)UD˦Ļ).o=R@.oP 2\\fbhW?#췶u>g;I̾9sZ]&2~O6ѷEaLgڝ9A.oZaa<2PܨF[=!5݊K[J}ckjNrFX9E?#d(3ϤLq>cB X[O3Ks2gxzu|mL?e'.-ND3J㎙,HZs"BQ gA3pw;2Ѫ$?4yǖg'+ %&}L?cŮ$Cܧ[k-ϑ %B{m{_Ɵy/ZcsEva-zI4 ?Vo~g9㞳i}Rf$rH9nGU_m1xs70݀#eỮIȼ}2_wQu@зq2X|rm;)/@J[<RFj>G>@Y\wu"eӲ:#x|ݭ8}eU֯}q LОcnϑ_*쫙u}< i&ى[_FhnNt{{C]u_Pnm죭J~ԸsFw6> 'mB(Gf2.5}wч|ve6xvڮ̾MYh6 }oi Ǽ_ge%UOᇄ{zHHgܞG\~̮bu>\`Uo;s|s+/΢aW 4ĕٗ4v~ܛ1>%zەot~ ć/s#,E{KՅf&֏dbɗe<jtF:{; w[0kh{wQ ?_=uҷ̾cԳE՚CFa~5ױg׺{CR9 0]{;TD.<x긳>Ki)#h ?{jIgyԴL?*QϢ~kͨsO}Zg5X#H|d ?l<%=e1Y`[AֺcUӼ3KlSfu -Ǿ)b^QIxr)/-`<N>MG38jzߒw\ڜ%gx ~Ey<dgR|qw:فW>]ZƣZ>ja9޷չ6X8M? b[lX* ,Ž>(KJ [ޭH<:˫sXOaf놾ձ,笤)ӿzm3|Yu== dU Oa]m2&nluԐvsҧ/_F+7H|Hnמk>Rj,TL7]v8gڸMF2ʛ386'Z+0ݴbm2& Vz.?gm.Ï) Vၗ6QC<;Za\߲U8 S2(Y<c]»])ŏQ>ZeaUӟAv~ LZ}!orH)G"CJ˂= 7-L?CԿjY{A[]fO]k&ݽ&2w3|&[&'5Yo ~?CUG2,VW1Ss|>&j`eDT./do|v0Qab_e{yu{W|n="[Fej':N7O32{rL#}|nU?mgȽeE2<rp"D2|_Z^&#I -DB_sV%Hz}lvs ܗ:v z//x]<pຏ9?Ǘ2⑇*:rh?eJɂ3-dԞ2ZVAu#)R*Y;e n̾HNz&r]mz 8> w~ɅJ!�DJ6#[ RZ] }dm,X :W;#-/uZ۔-/fGYSHc~q"H(>2<T[A>{d~{cT=)@'̾MTn'7Iӕهvgsz26uJ}we%g SZ*XݕG+iU-j˛ҩK62˕ٗeeВ>=KQ>p2?<i2VQ'Eo;2W͂CI?/E uj9d%gW+9,7k9dQBڷ^ߙQ-\}t 9dUMC|WvR@eQ7*,'"IǤrYCߩCPc̮|V|im?| 2ٳ*'|F {N{OnqĈӖƨ)mUлi)ӂն4d\e_-oӛ0>+JD]u8{/>(mN}|STSf$@ߐ:M3)f-Q;m&d]#UƨH'&jSmT:ߘ x7yyԧHňw؜L_X`?9%pͩu`}˪C5IKu#)X5XPb!][Tg:D#Xuٸ'Mo%)Չ,_rG3#ɚB%?h`āNwՙHIL>^`xpmQX&(?|L L>$U5+Eeh웎ݲjDOÂHk}~3r>E>Ӕi2hrak^?ƲńoL?Vw$\IG]| 9ĦdtLʼngKǐ4N橒^:foE 8 }^ǤzcΚ.mE"MvCLz']&ߢjhU~):ex!^&6>H}밤Ro:G} |tJKzlcӋCRrD? |/'=Z0C"?.2{3;U{ߑ!>VD7m2ϭ")n?BFaO-DCb=2dYso|(+|tԅǿe-8 V]r=Eӝ--Ks)w!]7c$^|RmsA"]v%8M2Tzis#wFzrCBbN2.V:eyW6]̡5Ԑ)Ï+%L}~׼U)ç@-zIL}K->vm͔AҨ '2XύšFCE`2"9aL@Z]V.̔C5@oZw-Sf_1 pDX|>dz%GfM誙93yd} 3x=j82V|z~kZmyd�;tg<21y|hr8{2͗ IX Lٷc! [_ΨGbEЃA7Mc?jeJ/;tهݪdcrk^}H+T#&+;O!~}UA%"ߕɗOx!#VypY\(ddO4]K'<țW&_RzyeePg'iV.+/Zs1"AB8]ye!K--9R9ӕ&^=;}L>j)eKZ82A3dvar~)֗w'-M 3dqm1{;s#tX |'?^4#3dqZ2} 2C }7\k}{S+Gs;S^e8 <43e];-sv# F)sIUAORL5yKAz;ۓ;<S&:Y>L},¤40,m;Sfn~Tڛ1g=;ϢfnSL}ש ].>{7̾{ RL!sOew,}fslmI[; ZR0ʮzQ9>^/bQ9[xJ'��k.oq*λ[;<t sKwzԁ,6 ]}oXTl&u<㭑tG&T&%~95<:ҁ$C9x-0~sZUMӶOTRю3_7o|LFn+N&dͰ)T~礤w^!%-/oU1}vU'f?]F߼)91Ii-/o#vHG[e=},\mU|\&%g1_8s=.X(j i͔i57Ǯ[׌77#2ܪb>{}e!Ikj?.ohE^j/oQ_j=!o]'] 2_̲O8̆OuB2ʹ+ &F{ ~!/ i/d^'daSYOyi`pBfGqV~}xMO2l{eNy/~2(_ҮOfw }jF%:YK)՟-EIλ?eT-l1as}}hbcEcVs2?/otS8[&[Tn}R/-#J?vY<l}Njw"wq˒^~Iߖ/G /žG]D|9SqR6JA{vR_ ;#KBl>)*8Lm;tZS_pt$^[_Zɳ"M2bQe@52"Užc׾|qjԙqfN#/Z~OQ?\}5TvlG{%{Ǔ~{1+iB"lv~G%#2!DZ^|92vM dƶ'}|2(R۵l(\62gsd1W%2~`Wc2xi0v&Y ]p'cv{e%uC 4dA9zưKQ .$:V̓+/=E۝WKJV莿.4KWe|&u uk}~LvowLB[-w˛ FEZ^Aj1jk6!%*ޜh-/,\~u@Ot;wZ t#6Z^fq\[w\+o*!Ïf0Y [~HW1R~WӠ}mE8ոdsN}lBȺWN~O|-N}¡E)"Ѭ[z>gC^2QT9hd%;e]|\5`y>4+VǛ?aGs}}@Y`b� N|7O%YM;x6)> -Eԋ\n7%BA7yَϠ&|q@ #e_e>C a+GOX1*Z,c.[ ڂ:qDmJNhZ=-:9*#u7_u:菛h:idĸ_:dJ+JTo\u3H]uS_*8\7U~>b}@y",Nl~&ʚdMNGt$]lm;LF|~x. uMFdm! )b|{Mfdp^H&Uur@T͓k2r]Ft̻gI~]Fߢ4ϟ>7KGȷѷV)v/Dzfu|r&-ܑ=2(\9[=e-62mNj~LH:h{dss<A{7_:H'*?z %zL>O~yöo5<́2.%728LY2𻿄솼!l"5kunjtŃ)YעL>VJbq@V ;BFQ 6P}^2ю,:}\ZCLyoOhRt!(sI{mrᇄrGAhZ]fJcTUn}N=rSl-/mr-1i&̶>Sj Bm[FlA2ȗ‘cNi}|2Xʪ)}3Y >䒳<N)zǶf:n{v}SF_ջ%26yB<_̾xddSh]̾({>%~2̾5J_PGۖk}DO)fcM}AS—O;nlBѻ~~'Ym7e!D۲B(ngّ)V@OWtAٷךeE;ѴƼGF6kA^}x ]GߎU6W>M==26;i^i~")#bQ7ifޞ9=2؏Qe!鶖QĽ243Wg2eSSzE+C/X1w L4d9h}{e&J}C̽ [Í\ukӻ2g*6=D9ݝ%2+J9.Z__>mCEq6=qɗ~1>}Ħ2(4;ҙQ'j̿3uvq!ԏ']? fun11iI2W=uVSku/E3UCߡfha )^ ?gC;vjeqcGs5-qs }x`H\ޚ1dz%\kaΌ[v9L>vT ^:R*=5;eG!hߵzrL|ZFGywŋrL|<l)bG.~)Ϸ&h u2UWw`S>+銘f_ѷަ?e2btj|zz=6+_jg1e!o jT7CoŶ>9Ig}$R�OFU̪؂ߨ2ZlX+Tlpy*9tSmYL9sh%}ͮGPmY,fI,֠|s|e`!}LIN{E7F^A􊱾LȒ]BL?쮳RӜca24E7#~.sOzG <~E`Zg9ށz֗-+8q"׽=&awY2;`zYc\f#zmDgRn 5Ěe- e+hӲ'2AjcAhi}2pw+Hf:L?ݕb2pӚ2~dlVAL?*Xːw+ ?c㏗#d?pқd9BKңW`^;֗ᇤ0 ?$w7aڇ Moy}? X,-><]/؃'wS'_e;#!@m2V?dYSar~l1Z{Gc3]qT$\lՠz eq ;ּ-;0H*fmѱ>Q;|X_~Eox~}zsډÖGq" ϯ>2wa?|sn}~U֘1M@J+dd[/8/e(XxcLغ)s/VV,tP-mr3bѐ#e 5dΑ2"(/풁/I{a +wԔa}|ƈ w&ޓ2Z޲#oP Cv8cݳe>[AǑ+ Ҵ\v/5#oTsr#-<2fsE䛽_ާj~9߀'-/Ï궪.˽?ʷ)cw>N@e"uj_+2H[]vYݟ-3W_R'6 A5S+/i;EiMgA+se s\|Lf6ߕqv㘊ype%FRƎ{>s/s/i=6h2cw^rqe3к%͠c}_2BoUk8H9Ҽ߀e#Sh}s;Ͻ<1)m2Jݤ-Ԧ%c;{41 ]j<z$+�dVcCۻ|~'E>y}2|Ufs%*<W)}?/i-o)Ï7(,Z7>BBb8<Ze]6N64Z5̾A# ƤᇐG9w|0ǎUSdM꿌d-ݽG꘴^7.[EN:({.T:>;Hst`y'D0=ks1gAG.>; Tg:>“ѝmJͽIʚgybVq/v5sfVڥt`y4U>rgՊCVIFr ,ORnч򥒏o\˚קp麟b[sa>]T܋ e=˸ÃJIٻ2YUya3E9,ӤdޯYhHPF8x84}sRA)8橦[V1C[[wg> j:nȾf/r~jKln|Լy6~vc-c__B`7_鷂bH[Mk.ogYXowrL?jUFJqǞI֗Ϊtb>HIky~0{ǣ#h_!fAQ�K{BфcS3d*f}/~8 ~UvyrL?6-W{^,6> WҾg4/N[ܽ/Qη!Xֳ f{,b>;D/2(G[eӯd4JW0J2SE!7vK9ַeQ)ve{>{-ϷU|m.XGL>O)$]Moqn}~l9a 6Dј[F?êEu,n}1M/`|"i`a֩TRF_0,]rRM̙2:W4yE!eӪ>~L}>Q3e.@_sܽw_fꜗ3/^ԗ2YUm'x;zͥ3eU|l<ɷ~Wul&"=w(cS&9 mV̾ͲJp9=[oߑٷra= $7>R=d>7Gf]fyܰz<2F\UtqCk;26muiIGFš5ocq97GZG&tJ{dQpi;X9>W&[G+yLbb}|Q/GIm.2,žD,vY=. xm;AhZ^^fy+s/J/t+s/oS'!+yf:k;T*tGXp2r,P&mT C ꐁ^7YCʪ>k Z@WO),5x֐GeSP1[iZCf9E-u4ժאwH[Dpl֐w)Z<~gwrM|()y/J)E[—))bfk}},*$||<_^SfRs gkڇ]o˙|v=ּL?E"wu֔ws[b݈%kYJ FҞl/jě~tC:ұABf;Pԓ:ѱAmc>|{#X]o>D7NglOz7S':]pO\Ms`/ȱ'Mpi%E}8bPq8R9z~cGyNs,,T]mv =^?7+vݛj-zH+K̉o6Id͙V# 2zseu)M^&coZV,[\ݐdM3ϣ"C2pW5bs 9|>Uh[&o,AXX{Z1|3r.|v|7OB/BtjW}%}-d-uEc9؁s}]SKu\fvruz S > _@e-?ZU[߾C614ʰ\FKCΏ3T.3xE[.oSzC`:}y2Ug9r|FgSOo |6*O1GP?�iJw\gaCsx >C<Unݮ! |OO!| >|EБȵ.Ek!/-CsBƞf{)T90 >{d[ P ޼~|yte|ZUxю ;Smm},fU',F3/K^ȹeZ./+hэ묵lks 5>^OIxёR ? f"d=v=0[m20bM֖H鈵eŸ'f`$ۭ2R]>[~==S2QEL.<+e8} wu9V4R&_Q9R+eqT8Zv" [ϝ`L>zN e*J|.7Oň^SWtQGNSfߞ>eŹ̾(+cпwsdmjaWa :26ic_MudYy0{,GU-;n__o~2)C)߭//)F_,[GBQp5 *֕6bؙ3ʞhԺ2xPl~q #{qα̾Srwe%5Ћw^5[WF[V .yd]}IcbѤhte>2f-//Y*>mlUnWfEϩK麲+R. 9ĽoCfY8!{ӹڮx6d=,g QڐeV!6d!PY $]l2W!cC- ' 6?ĭecʃ]=5Z_eoyN%6dG`!ؔwWi7vڔweGʱwvl..=}|mFqx.ÃfŦ>jH9GtOۦ>^UwӸl*ؔGvLX@w۵3uh:/Ø:at[U;)iڽ姼ZAG;W;6u;RY ՛M|Klt`MQBX}(g y,\$xWW>ԙ{6 \O)6V֥t`yzc)^KfS�l%!,˖agD[LF߬BuN3}fU$هZRf2(]F1̾m~ve1g̮>.gGS%LFD0هC]'9tҬvC? kv# s~T?\!/~i[T,dXMLL^H'9~-!`.oWnǿ>Yr~9 '+#V2v7o8v~ᇤʩ%j[׿is~׋6 Oy×g�Bfvy*o2aKC2ɂK1L2-dU%o6 ~Fu0dΓZ3\("υtagBQ/4_結ժKf4,,dQ 黹qw6?~>_ w`W}G4L?|U_l[: ٗ9]>[ؕA B/Iב۶L?}H eyusLamb=.j2yg̣ ??*Pb߆!챤J>n}T̗Ll4giHI^2p拍.mxkwۥd)/u66 -Gtګz Qj)2+D[7~+k/p+#dzⴇ][ms0K}{쪻ˏWv-eVy@;{&%vdQOc zO#OR+yo26?q{[Btlّx~U0ۿs{W1V5h<W;j<2OYHs]x;2(Ky+c{rЕ8/5ّG'JݩؕG[H$%HjWꨅ".NgFVZKnX$qw7+1[˝9!Xk>+/yY#x͑\]|<,|Jەɗ7W[kuc]|d@ o+p\|H'FwFgwCFY9~Cf1-MK~sTZݲ3~'rKN>dXɉs+v~'^q!ӏ3(Y;9C%?gku}[)*MX#y l>d!옃\Z]SL2(_9ݹﵺb>e] [;�>ͽqb2 Z@BߔwyE ι}_]ᎁnSk}^r֗wϙEs! A]$ 2.;>Nu8^GquS󾵾:fbt`u;8rZ3XOSP#=t`}pϫ_UL j4!yOՙf5̻V4$qIZ۞:Ӂ*}t߫:2A.%o; hylno2hSX'Mk87~6*Cؼۿ7MAdM*v1ԁ_72fjb[@oMFD"o`L>JhdM%'7}4b>I/ok\^2} qOe x99\FBJL6L>&e:{O1ַ2b`z[{"alwٷ[1ˊbp.oQzR4Tuٷ(bR{8FN;ne٠yJx-].T lﱩ\kM2w|C8oixx3WՆD?iIgΙ$Gdں<dq (״g _eJhx?@(C枱mr!sF)e7sUW,H^'cnw,R<d9bmzDS1E$.~V�ъ! 0p7;|&Q2"D֣2B݅? b-Foy<^󭮂-3i9j/lįΚhRgn[:p~e,Ǔ==[Y,^nRo)uV4'H3z2!UT(9FR)/SzGao|k=+0]SfѶi,>bYz tyu9*)tUdKWSهojܑk/oUU#o.<)C갮/}1o1@޻XMP?26ʖme_remU3v^\֗чxz^i7wdmZV'KT0s5OZQ@C|9*'ځ _>fmԣ<voߑ6E!f I+^أg5js𢾶;<6֗aUGCqQ/2^ǾPsZ)2ϟ#y^yZ_F_JOzIt{e%ҩO3Sc}(<_}˪dBrã*=u�Z1d!BZE1dQ*E ,{͐'>(ϢBK{oC㊘Vە& M?ŐwM_XƐwUCHW#SV^�B{r,̽;mG+cOw2Α")RܫŔ[Ȕ~G+VvaLz7̗,1e]E/u 򫅱M{NE#1ea7(]58>2HxrM`|{泐ŗB/<Fi_y}E+~3|{]No<=XGu<X � u~ ocKah;Z6o<'jfbLl .Ŧ,iBx\֩.2%hz=CKd2[�3T,tqiOO5L䈌U+w2.ᇻo%Ι dӃ8LM acg+a2pG!Xܳqz=Ma2&+$>v5#L3# هu70}PK&o(⾱ +L5+YR{_‭eQq%.oQ誉J[st)\rծ[ʳwhe-ʂΗFe-Eôv[s{UV97{z1[@K!ɰ "tAeܕ :g_]ku|W =t0oݴ‰g+҅H/cvM"da61�qDT>==_&h+E쳽gԂ]5RBfa*_Cgb$\_F]t`&;!s}x'd9O.;vt"vd!brw#֙zlyoEK#zoX5<g $D[fM݋ ?vz8Srlju1<HrG_Cưe1`lyHa+m)21;h7!oo[}UӪ̇G|cA!Q)Ï9F8dD<8S2u sxq`7.)* |Ӵm./LE.EYi[ jZ˺elL??=nn~)oSԫΊ[='o?mk\rzGHQ7?c0`$Hx9[Ȫ̭'iןU:`N6akN:v~Rkߔl2sOU)oöډ<bOqߔ@{#  G:H}AN32<H}au|ϼ^F2,'Z=mld9i(ahsSܪLi'q{TƖ,ѵ[2ԵUddqެ;)6Q&xn#:i6;Nҩb"mur>p3 -{;+d졒!ʐiMܒv[2دU•h\L=ϧV(o&K^Z-M}֣Z�^( F~LБmza2X2~ѽ-qõf2x\虝ƒ^X}Q?{X2}N P,)VZ(L>: 4J!/+Qv,}jz2˭2sͶO_&G7 V[_ro0-ÏN.n,>۱e, ./Ω |l}<Jm/#89`[F.8#T !ZvBZC| v͞OwɄmF 5:āv'rxG|̫S"dgCq ]M<]^wT#YNmsQ{N>h6uq <vw~ ?g^_GOf۔Kq6;#f]ſyĺyЁ%̾ /d}\,~9G2 /o_*4X?^>2Xt!1}yMoMT3 ѷyߌ GFWï$6qm2R5t`xS0}xf%0}ܳ/ o;Xbޝ40q]FGys}"'\fMA̾9"mdkK.w؝[.f?^ad^{J6 ɇtup}XիA:R1{\FakJ^-eQ04W =W&\ћ#g6GWFfp竏|g~p]}%vZ(^ahWF.m8<fE7=W[n`U8ߕGŘ欽QkߍHފg^F=@3=#)B5{>?OVL ?Rc] ?L^s]ttaw ?^6D-G=NQU쉐(KR8֦}Φ>P:=ņRq2PSv;>ؼm2FԜ88Ƅ(O!6JymwfOf]fIO ֌|O&u۝۶NO&ez7E_bYIx2nرgpLd}|{/?w_FߥmY"d;p}2nYb@'[Gwdէ� ocG9ۊgeF͈W G7W SMoL?utXHKY/#ePk'9”ه}wBчjvѓ2Jp!R&#ͣ_<J|Q~:]4hE=Nv̴C;(QFY{s̽GwW#e졦;bcMG{N0+v>nأT5 TFwG%WM1s+| V̾NN?.Tdj%/\ly(MiDHn˃NsޒH_P"oKt ed >=u'=^\TV;}o˹ wθ-{RewϺtfKO^RcbjL>쫝[͆?f_&_%WdQ2F=ۗWN 2)�tlN-n 2ډxmo6E T%ў-ӯ(T~ ruo[;IZq~~Mڳ9Du7z@#%&CC٦t ]-O]NfZ:xw<u*(xɞ>|Dǣo)M[@ah$do79>@ǭ/sNt<ޤ{?mߩ篎t<N-u6gY|҃F¢m~u;㑖wdOv״4-Ɓקdmި&oT?=/δر]3;|+Cg263R3%M]JDO;۟ 6+Ya2e y0[2ޜxDSkg2AXo/�i3~ﷶwEOss~T j/[?z.΢aӖkTILy%[2NR0Ke-魞m>.Y|s}sܼm><c+vx%3k +x\vSƞmm>nJnLzߕgkZ~쳗 YŹy}eYfъqx>AyT& >W>~ڕ3)we9eCҐ2+ρ.񊻐y2ޕهҪk7,ϕT>5>eש }~iӈۋ_F w2<y8ӐQqx7CF6>yQY2(5ZɇMX.2Ց_c|!s"<% 2.VAXb?b(}ܯZ<}9Ut(;oy2.M:lӾ'ﲏ1(:,k,>Ɨkg]nY]~oOd+cυ藎j'/V(~r(e񞌿8"3'/d; |(> ./>|m:, MRFt: :^6-n*f)/O4.G7lH}x_+Sf_沇'/Z1f0"2( ħ9SR|):7;?Z_le2xҗ2xM)`:fW2h7{T_|hY`%G+ioc_t6Z9}}%Ï: Ռ_EJ>esLut^#Wo2-}4j`qiKK$m6yoLOJ?a?VÚd7EsJb&$K&_:7?o%/8�G\vz4-j GrK|x78 a{U.{ߝF"(ugd1+Hϋjйdΐ:i׾or撱Gf&x<J䒱G{ȷy͔]OGQ,&p_F-[ۧ&1berlVWxMt:v7W۴ !Wnjjy7/+OaS㧷aڙTGbwٛvv<w7:֑pѭtٷnxMNu <O1KNu$[(:և|l=Ts2cPG3c;;o|<ʞPG#C?}}u$GOOL{\~rB% :U+CFoKn4?~YOcvU<2i[Q#s~i:Gfß(wcۼm zdk<Lj~ݗ&os_FZ. ް2Mwy_;[&oS4KWZKdd]C-g4F7NwHˈ1`L=wI1_2Ywϰf%cƷK22Nw!0;s1];ϺƊ`mox.s;zKENL>d(D cn#Hʔ.)*H]=2j 7ok>3,Zt[t}ro{ԏ^?ә ߾O]:3#WfS7ϚFÿݣӰM*2 $7(n1>Kf7IBjXl5iϥt2~|(>?[[yΒ+ϭ}p9ï^ѠJ峓ƐTI9/YGkfF!ϣUME�|M2}=9Qy=VIwmO:śf &{|QFk?d]K5G ˗ч52Q״*C&3HV8<2߮`sf%Ǔw=]kâ9ӳn|2n]k]ds|2C,,[s?|2.%w'?P˛j`u:H]p<|*oZF˿*Q|}q|zWמ`=膰wI|2zН4dC)YcaK@`<yɓ2+M|9(> tDw4{2ǹ2};hb|63L|o!|3>Cg{;N3Ā,ygM)H&_wL|x;Zy_wꄝ)VYbώKþΒGfUkuJVϺoe1Mo]3cC{,g_{)O¼JGO˅߈uxJf_(ju{Jfqp d05bwwem]O>-Z2"]L>ʱ4wQ+Ւїή1=%!( T5]dkԒ(Ewqܫ ts5?[{2H֦mu>^%NZ {Qx|Ef |-|;wLwZt~ ٚq.ָ'Ǧ\e0!@5-c8_rǨ-ܟwo|Ţ{ jQG/VK:ƁΔl:?c(:>E}(YQGтtw,= )/SQ{ZT=7Ӿ\SOfaq-g4WG rGcsEUMC+j1ϴ]_r/u+1  ? `7վgj̾Q&ŗZ cO:26:k_ǟ!xk^Fc\7|Bj_TͰ۔ mfHRaQΊ2|T_odFȊ e26S~[l8}o]ӯqܣwkQXL"#?S̽sϗej^p^c^eq_M >l(v{]Ffz<FeA;Q|}'(\O38 79Y?2Pvx]mo4;/*|�w^L?LޗL9evRT̾ՄG)~87b*gwhcٳošm''<25AHӏu/Z|^+aqe@K<{wa]~֟'h\T]}�9JRhxx9o>*3֦+uŬ\RWfDf WL?ҭinxkoIlT 't ?GYմ`QG +d9; 2MEOX*d6~2v;͈etAsd1lzj;j!>{T6o6W! 43HXwZ2ROލg b]OS/|w'|QOEZVK=uǪ!d]4 w{{dMxu ,u/da)׸1b{28"] &U}2K 0CJap@̾MKg|c~ԝ2Q(L}Ӝ=hy;L;RF_ X`>W{e#d/=e=7-T/e=>}ZJ$z`fG{uѐ2'+TI}N PdhU’vG'fU2،憒;7un#3*|϶_(daqy"ljF>3K*|ysۜz>o|X2]}[ Y;c'??i*|z?2CP&_uf,Hh]hk,7)s];>j,⠱ϺNMX// o8Mr~ėW4Nh\3 /Tэ,\KF_Mw;/~H^ 9/d=X"a=[{2(•kcVSt2M1<@5ʵe~$xI%keQw_=۝N28r3KX٪VP*5SY\0nQrD9!?`O4bp$ζIwwz?@ϦYѝ/_o8:F_`|v<<H G`x7|Ѳ!ӞGO5 ]k\Av5f0r|X#\O %r_ZO RwSz6TY-s>i^f撕%FDlqr}9 >:nq;].4Vۏ`%9U\&on[)xþ\&_vk&:|eDT~C7}MΡ0쬙r|kiˁ{N^/iV!>6<,6uGq}f;<PN!ǝ6Ax}'oɊ/`}]&ߩ|zeR֊ ?;a=}}Fc'Y.هt(5_0/,aO3wg6C^<M1/P^t\|i{cfݣe`3θ2fmyCٲ1g?c9.hѝ,JK ͑hS+z]ƞ{ :Ȓg:mt|X92u »-`=RFue9uC΁.x̶G??dy: gs=$ %~%!sIM7̀_`u=jbt;oٔ+d]ll>j( >T%X޴|vЋs4Ȣ?*vCFu�;OJOmr̾kCK<b/d:ؿFy2nNηNgs=}(O7By* OFM4(w9>|קhHTu#fB/yE;@k6Ɔ2bgVg.tl}2-΋~%=+fJeRNڔ}Of_Sf8'^ m s=~jN)YC5c}K$Rf_P+3+e1N:h>w@|}A<0'o�M;Г'W{^He4-S(8t޾>tmT4O5{Rf3)b=`N}rR9qx(%g#ԹJߋ+$KFe=.*|�ubzW2hfǎ.̳ƒǦvQ'=|}\0uO>z'S2ėه;gG mV28lἷVϒ㣢N㭿g__G(FAJ͑em]F_Rټ~Nw|{ămjE[$5^2P:܇ Lؽ6,1FeծI/KM:lՁem-H~=d\ z랽d}ǚ_AQgCaΩCaG2 _2%pjX c=/ooqf}zuN}6STΆj:ՁgupuݼŘmu_<Dnu}mGzA#NulvRt>v ikV:#4wZn:P07:Ձo&tK篎u g-k<XչUB#cBt!_( �}Gߦv^#BS/nmeﱶQ|3K�D65Gϴ$Aտ/F) 6d_VcCkf*죙1~l#|M` >FǎdJr۷×9y,2XUWѪ/d!8a_&ÏeUDAzMFܨ4Oa>ǚ;yэn( s{HP6~'N"N~ᇼoeS;kJهwP™c{.YPq^K 2lҍd/TgL>{}FtvL>juUl]fٍCZ6og~7 QrL>ؚjbͤ sL>XKukh_|:{/#2zW&%'!E@5OC|}.+Xp7^Wf*2*X ᇼЩ3BSlɾ2wΜIQIx߿ ?Xs}ew#ٴ2XU6=P2<lubKL?ztD slCu'.EWՊgb#瑧~�̲F77؁qM7w?JE_ґ!\h/V<JBMsgeuo^߽_Ti~7Z%*ӓwu}qZ<'k%x'QE\sNO&i<}y6O&_s^ywzd,=Qs1/L>wsM_Fl{A{YǓHlcGDj?|X|Ca˗vejQ L§LxIx>*)%ukLr͛7Y >_ҏ:<Fyli'_WѭnÁ2A|:MkO gn_,)ST5ڞ6wpvU7)/6lH{ثFjaјunJ{QwۉjP0| n^x>jYpv6WK{h"KFuo翯X ՝||<nF yG]Ó=d%RZ<c̾꯹}}DK퍄{>PK]oW<@ %$s`J,|I$Y2P˵>ƞL{:}L> T nc986ΒW6mr,|[Lll_R&2ƤD>K_YtyBPԱN:y?ikQx}ll.8?Twwsbmw}r^3Sqqg쫌)TÝl}UI8틜Ī}Ewn_9w`Mel/G@|j%˪:Ёti.ױ۳{SpzLG}GL:ЁK dzql.h uudqԁįh{8R3q3J̾?r ~92 BRgo_>4r- Y|~^'}h_^{dmk7;K|g|̾̓!A<jO+#o[3|N?)/zO`^NR<&so$kJ5)8&p^YSqwL>*Zs`wLzuﴩ̽c4Xbwws,^E"C;9G#d_e<au{=W642NiZ/g90Վ:.s`3K7hu{}EN7oH=ҫ1SjͣS^J$1V3?5Gqn~V_=.n֘,~kt\FE<8 r֝+޿'t1Tt\}։̎O ??TnȜÜ+tZiϕ;;*d]798>vlu+ ᛴF;RXWcO|0gK͹2\2<aX}w'CfZq>Gjݴԁ}XC2PWPPw) }.nT;ȌP>f~Ώ0}xKX'd]H.Cb?p }Iecx:Sզ2�}28cgw9$᳌_Y7j՗'SCd!Fd_1=}IEwXv<mʦ'gIivq 7Q|GeY6P{^fך^v<s,|޳7-9OfŨOy2⮮jsYNuKΓ ÿma/Q|~H<F=n=)/]~#Yh?2;.$eU'Q|ZFO~os:JT| {LJO%WZjO{^T2?|<:FH`'e𽻎ɗ̽4mߺSp̔2O{c_F;%s}(Lq5C3�h)z`N&ts)KFNԣu<j9fd,fCYOKAHxۜ&<%sh9cQ>^d%:N^ *adQ;jO7c/{h<u0[2ߺ%>6vamC6(d5W<FÉkS0[2hq;6`9c%l[6aFe?OR|Iz_ìÖ̾ۼ!tҘoeK_rw(6ʲ%ïg5b3v<1m+NėTlI[3<4uG1NgF_Yr}AcdYQ$A:5\ه-%?RS8%y@W5T3uXW^{sF=Ul٧qg9Ŏ,_7lq ~Qa9ȞMڑѷ\8u(rƿ_foieJ4d#W|QiM!fv("wٙ&~GOV?֙q{*vdmIv#o?[Kf26j5F#TE[!>_fxA鑃mv3{l:g&iio0GuF8d>dUi&\MI_2jV!Ԋke<s3Uoe!}r?)bVi.w-s{ՙû_c]4>tؓ32:eω(L>#8suz2vgA0 He[~yuce<Wi>t3gwsѳX;߬ʮ>KoN{S }WF~Ӯ>Jt#SnGΎ&=Wf#.E;κ ?5ִu~LOPmIQ, ?XcK cveQy'+=EwHYzt, ~^;o9tشF_s 9Tk~M^z4†Eg o}L; Y2QwL E?1αwKg ~ctKrӗه{m^(6*Y u]}zd]/iFٓه-6uO');ړ6&< NϞ̾8jLҎ ؓLN*_cv?}qcH8ؓG= ᳗/5ڵcAJK}XfQ/FNzg!kuZ{,;_Uegi2(=;NQ7 \!V{gсsy2PLۤ<~9=7ws-egww@X6oH#BaӬd𽌶D:/og% wP~FNZN:KV|ɂJhT:N:EuUpSN{;J&_bm5%O/n6={2xo_n oF5SK~kї̽Svy W}K}+on*f dQ}L:=po_&l{Ђe61/}Ef(/#Gec/tG_2bюX`5(Lz4sL-xL?4#5\x^n2{3 5~zKȔՁbmYt^:Ё;ϋ/ӻ:eҲ7ƛſr|c?f)ȧ u8VcF_]g5\p&89ZT@{W\t8O7"6:ҁ/lIƶRM::TFVDduuٻ|.S2u:G^֝`cyyGeQK!~de>՘b9燑nfGfKU~~Rm|(K E/>�*FE1Yϳ?%_y$5/oWu-ȹ37},�CQk2;)X?w$&tk(;Ŵe<f=3y7|˚uy�ԘM&߹ufg4'sD/֩&A(9_w@ ><'T]7F6}Ϙ2lڝx0t}Քi3vE>cH't'S8u}ޝpWj=|ea[ E?5y\fs.Cj}q"w~Z $ ?˶ipد>Tk S52v;lJx Ӎl3CO_㓰f]Wf/hHģyg}}~eLځǕNseqT5y; 8nk&XWS-ӯ?;zGܽ2?˗x/W}:W.*a725TAԟ3Zi3ޱ.jW2.1Lz!SU|9\`ç/C"mǏШY9w94 u[!s"BwdzځE8wc˼IF!dуbOriz2.r&u軵Uß̾�_̟ ?Ti0P싳{ށc[/i՟aϓ{F?}Z90'/>m'fOf_&I|{( )(~2: }?D'eI WS[Xaֿn^>JB?F/es:g$e><C[$O}mzԕ2(@ocupSGHGl)i3Sj ο4vqdo>2^%/~Kwƞ΃|n%ӏč!j jR^%y&<{z y^l#ރL3ԏW?dZ[7jQ1>Ǧꔻ2/㏓*[ǶƉRQ|~}?Y `zQ2j2K_V!^M�>W- |#g^s ?w6%Jw͇jNo%ï̺_|o=w+켫4Lz ?dC9O_hv]2 ukW*/E2PwGrU:8P vȋeUg:>Qʧj٦G hաֻB#C!6[\uWɭhAakUg:9:#>ToLnjt-;8q/@g?[wt> %Pi>31NtP ޻`WaH`{{5+Sߚ#/7?"ߑǛhf<Ɵvu|KR4< .@RhTr#o['-[(Fѷ$ e=26 5~tYk2v-5~l&vޓ1v_wط\7P|`t|MCj(rY|~o7OxD9U5~.:fS ?l|,)/zyQk2xն>ǂu}<i2l7mQ \ot]fK&)eپR;hϮ\32\krŗFnK5F.<*uǾQt{v_yY<.sϐ6# ->VfK_l ]/H-¾=ý2b&><2|ڗe}t"^+Ƹ2[|5 هoΖtQqeǟK~9e5(L?qGM{emw&)` ^{62]syase9RNKm!+:_:r_?CV/uCe]o[fO_=l!*Q>2P-o;e3~42.~rCSWx{ԌL=G:V}򆌽^wԳYsR,z_w={2n~k/M/'/(Аh)C~Nz {"ak}2^ޠ['/ #XH|YuӬX}2"޿fuY|^s(«]k|ޑ2غCG;G)qdi+?8M}c]_i8)nm#.Jv"e_)+{7(M{9%èVM{/m?Ԧ̽*an{$oo3ac[28-;d%B<g _\g;-e[w!s7d)|To2d rvP28ةʽ%;e#U?BViGkK+(|K?'\7Q@4YmG)= 1ĒUj{:K_!_Ґ%ϸq9ʑ7 LOYŒWV'!X2Мu4=Mۙc+lU͏ %vA,|4Znwޒ6AX2xy=ǔ<2*Qs6<-{K6=;*9soZ\e3|ɮYL$=Yķ46$s:ʁNv^W; qPp25{!7tzr >BV<?=ï/_ uj2rMaF.ýalCG^~I4 ?K|^UK) ?m{zkkB $}_ߦ FK6kxG;'Kd0 ̓މs GFkkF82v_qy4&Kk5B3;Wk.)(90|HьDxvuӇ;w(a2]m*Qx|jۦt;T<<oq;S0|5<nvߋF~>緇^v0}c<zgV6 Me? )U,( >GB <H7&\}d؛&Eŗgc_$}/\e:qcCS5A>/)y}eai*D_X}eYb7yo Sٞp}J*ZCӹGrfWF:ɰ Н$>OWh)?t+IEZMVG~o9ƗK ֢xŗAs_}շxąct|;>,/ayޛƕS\'Cf-\ ?$X7Nr׽56hwO+WNa,2TZΏ,L9lQv</dkMWJx!rhp0%if^ffY2&wӺvTnB*?提FHy<1Ӭ'/7iƿ 鮯ŗ mLP9dqn7Ǘ*4};T)Βērz!%LRh}$dzƓYghxdYkb7mJ}s״7~fXkL zRH|nrI3L42yyڃl"#H|m |9R޻KFn̽!ݨw2 zκS#^^j_ZuN"eOL|H/YϽ<rLj~봡d}_kQp)}<G9Cu�w>15۾T%ۿ_P29? E]Ǜ([wG 32LgA]<w%/O<Z#DIʟ]9 }̬)ޒW`{cGis3tK&L'-o+e6󣛢?gdUBQS~g V&!{%[2N.I`|K2Z̹K/O~I-{E1fסajL+Jt, :[}si5QiN55z(e??H}멣K!\Qw9:b=ſr 5؃e1F;:́< mlr7mj<=Q^&@)SG9UlչߑQG_xGL})7/[ r}|3K ښ!#owvdz(}Dl;2vk_T<)}}sikf̕[ߑGy4|zרCŦg2z0:4ŗw6 @>wNw[4f*>wu4";>G%IUbR<wؐr9[gC9u]?,d\rpx˗woD>ɇw}]G>aeQ7_2=ɇoiX2eϗgog)ԅ>C:Q/Q|}N> /i<g%MG# A;>u}>R2 y]/'L>昛fN sIwz ޕъ)ߕt* MSj)<_hϿ2( 9z*B;}Wt"]{HVWwe7wߞ*+c )oc<B]_m<8gG!jWL{RB }ȩ;[S(]1^4m69XP΂wiGwOvwĿ=/d׊D�F_cVc{dw7{28'Ә�*?{2xxM̾ _ZEװ=}k6ˆl=}n�r'/nN 3ş h·ߟ\oM ȵ^5 Egk]pWgFL:_e|)m@3Rߣ}ׄEX/ ?jt鋦(zfoYҊ/GJxYч#/iniϼK}׼hN^/˾Yx}"%oq$e޵yT"Yd3+}\Xɼz?*}iHT1{K6p[̾)q|]ӒdQTܚש:1[}26SRhQJ_kj }%/5'>]XCW2]s{qןK_qFj|4X3FeQf?9fx5b%ïJ_j%ӏz|ֵubS,rlĘKӹӉ ;QdQi.}r֩G.~m_)GÐ|XgDd-T': +5@`6ȗDG`oy*^bCT':{7=Nt Q'9tδt/ՁB}Ʉ9ՁĿgۗ<R@h\u:΁4MݿGs | #؜j#8mށv -5gJK|q#L\JTywПG&EZQy=G&\:\l휅ɷI_(HYѓGgN|!L)GeꌑGFߦtwٱ(e4yIه_I%9 ]:ޠvGi~gYfVD}i2xҴ[qւ6<qLGЮ#j$ͦwMi2GeߗFdJ4}vw;s=6OGQfhú/&_/)__ޞ}}%e-.sp7IG'>IncCݨt}X{E&u{Zѳ23ͧ]2 ~l}qQM,er3P.Ϯw-f<чz~76Nw{de=08˙G#{_fh<kI7}L%e9~=EӮA@^}'Clڰ$w2xס 5ΖK*+{P 3 ? 4D"ɸG.W8a{esoR~ح t^|i]W&#)b' F7y.$e>l.~ȋ@֋o\!&g`䐿1C&E>eiK6ɐw|kwe]J6W ~}.ϣȫ&Mr+d|yM%33dݼEL[M|Iffu;?ʇr8<}5E'u(>T3i^l[ Α~l_3Z%FC"~zd~Z;L?L>TR{şX>LL>)q_o^d򑩝)<¥O(>-{w>H pP:+SfۀKp;{aL~�ģ3ʔ(Ǚ)a}u\2nt]ќ{(>wd]~G1 /Z6C{ g{?JGe>%'L|¼ qnxS2j=b =˒̢X_Ѯ[2T^ 3KNY2�Q288+{4ll'~2g/_;WM=6OKk7NбM >j > :l)ӷ/XU^|~~8;{dgLWܧda_zIȻjeaKm=PҞMek+>iXD_T/{iZ*xt5pe9/d{RG/ێ V֒W)h+Qmc߽d;%R9<Oy||�f*sԺʼnj-;e)u-+~479gms z ꜽg t ~p)o/riS{zLGYvXČ?9>@Kt}/wyjյe68paWG�&|irdh~;xbC۞' ϽHPGe2v?IGed*]Ggwkn͡~\׈S:2O}>\4�{ae v,2o>&5ϲ/Yr;gvmgP&%2|WFP~eqnx6ʭ#"3/8'ΩrfL>,8lq{ohPS&iųws ?nݙc>[{.޴p:7l)هGQVlNX{L*Zw=7U+92~_R( }N!likGL=^^6<c(^Bqetx]-󬷣\qBx ԦexHz*1>J_vWwW\kXWs6mJ S0oSW!Sʥl >G>qQi}ey |`h_{Άݦǚg7k~]{H(ڢv {WR}|vw/s{Z w*+sN?2^{F |vяX eVSㆈ!:>Lw-7aOU̽ˌ 9 |HgvHO#_# |tc1~C%d R37{{O[1֓Tfh*LGlO&ox?oO'p}2?kΊ'/b*#[hr'`դ8=`WO_dWx/Qx~SnujM=~oj';x:|2;J=m)՜4xQ)2-Y忡LhL>RG8!Rޔ.$]bxL!*e=|Q)ﱡ;f2^Je W-V <)CoV+oKpU\ <f%SoԷ:IK^R"q94:d꥟?zNH#7;].zymsh./{{Lpde0)ѻ,~Sl){TFHPIjWR%=̼aCe-Z ;]&]2PLu(y;k-}픚Pӑ_fՙ2XoyGx}EesjÃ&ėǡBt >̚t_n| ;Twe!IԶ!>mKu!X"wYvV N}^`C릭zמ~q>7|Q9'G#gV#%ޛ5EsUPP]kRԣ(|ywl󸝠G`]avT;lv]4 req:cuvFqx}GFߦSGmӪem*jQSE3Wy!ɷI+ZGFmdn:budm�ߡz>#~#]xM6>:'o3q6|*8Tpهk>bϗwF()\lxCubr|^nfLu;ϱdZS"= 3 Oܱ2RX;Yf-GW]?#~ e|kf>2&[&su_mlᕐV'K]l>(a�en.quf`jc)x/I>gq>V`1{2ze>Q 2(=:' ޝ{e.`'~MMQ|1=w}jyٯң<[i"s/6=Zj]|CGjG^{$mc=Ԓօ뵮 Jwֲ2ML_<~o# ?>O^!5X͖>: w\ZJ+?fه@ <K8>wwȨsiŠdfdoQxkEņxVz;K~IFeq2}eϯtTryuԠB)Of_^<½_:|Ӭl<v=oCM%]t"@9P;//>b\a_Yi�?6LLBhXF%�^&E{3Hd9@`E5>L eaO;jҞOC'/HNJ>ȝYdE=%i#˜~Oo2/Qa>7e=ܦN52z.G!{RFκN:(ܧw{7;7Ue=,F1}?Â;e򽗝^Ɠ~)e+)tJ|TQaL)/-OOFe%5Ț/}٭! ߋNaᇧyP~:;`/~i\kAaӮ4[ktkHHrwx=#qδwR2UsjE;{2ߊӞ~i5[lql ~х[Jк^[YL ?DfuI(薣2Y޿xy'\>LUA?{(S{[,Љ2*ecj/}HO1_#:,l}')/&@wN ٷm<RcV:7Üڨ>!D⣠$ԛtlPub3PmX:Ёk<߱t ~4E͡w9[-9-g m j#N Gp8KG_:ӱKXE>l1H M5娽eH Jdm|}~M}d $%'}Gf6wR-7u#oSKrw}ZMiHN_>А�_Riɿ}x8ްh}4eٝx"-uR/Э>2>IoMw2o&i2밻q(³ 9,6y6}4h֞v/`(Lg,;]Ix3"6`uߏWgK_&o^n>"CqBdgVΧؘ ogWTOYٻ=4�e=ݘs{v2o:@ٮ2M�3[.\6taSFėg<Ns}?}ao>|t0yn<.iƩ78_ov2UwbO'Z1wNP>07]go28a}e=goݳ\~:g ,:zf?_f[GrlqS<ėG?(V˾2.*Cm-WF:+0#��ӗɇOF(G‡kgA֗)d]c= rx2?nG<cdƆ2nXk1{F }VoMg'Ct}lP=dYs<`b(L^rWƍ4F?Sizե=mbs$>4^F(μzN/IX'/z>ad')Ӟx^'jⲹ/g1ߌ}> . ;=6V䴩z?{rMtl{2dg[GeGWgUִ e=s|sH8vc%;nzljoVm̽F�q[_ܣ0{UDHdvXkGͦvŗ] _}Dg)i;l{9uSf;e'k 8.} uI5h2%/ݻ)T'?&_///K&_2H/xwe%v.h,Iwn<%՝T&m(y./RK(<\ڻ ͕H;*# oǯ̑*T'#�2>Uoy >6'с9c:-{U붝\밡a7-|/:|+2t%H;83[^&ߣF-|ݒMRs/љOp&֗دן#f=h}}]O!>v^PaQŸϘaoٶW 򸁬ohNa(VwSXtcGC:ˁ#Swm t:ux4+7:ʁYf$yvy}d.bU<[L0Us x~i5#{W<`ٯѷkGKfߞLz 8<Fem6{gf2gk.f>~l[l+v<<gxe&o'e RRcEjbrÞ#f26rS7^L'xdmzŗzZdacm:)`ņag2YtU'><1︯ZR^kur>VԽE [[eYz9L?Cl{߿=uvΔ[eYF`Zukb.nn=x 2}!@ q0Ipe4kve9ޯq>P]ag.fr2.ҕC,dy4zyRj!ϳWSZ[tk 4d ]0zBfW#`8 }~ѲZg~}ZFJ7pBfҺ$];sSyu؇BF_9ӡTn"R_$ Fؖ2[{tZ}9=ayނ|pRf_k)xzQwt>66nj3om)/zPRT~p%e֝49=5&ٗl1f3Cyٻ/E?DISr~@kz/6Lα#/) Tj:S~kŎLvr(!2NL&bOP9ǎ s7wxe"}}꧁ߑG Sp< ?u]ogϧe;T~>fէa?G6Owcwv^,6vw/rn?LcLs^gƻ6֧qLSI*{Qr`%|\OGcH9̾^gQvNk>%L^^(}*|yv/;ۇSV2h8E&-կBtc.OȊLԮ̾:1.fBve'x9SM#veZMCX:gRveNΖd]{8;= 6|{xxϾ7Z_hzqTخ=s)v̄xȨ!Ι~zԠig,jV[ ̽OEiq[8{2. ;dql,uegSd]q6˳ {S's$d~fw$gSiL95lL>*EAs|�Hh2*?{**/{݄TM: |{VCƹKȢ'.VlghK߫mnK߻HŽKm5 |ԣ/f:e,{7,Sc7Sb1juu볆i f L2]}w]Y0VgڟW/dᬰ};FXv*nMnWg9v_3JfX\s3::}vejM$YҞw4ٷiQ`);q2l;q~^Po}̊fG.2n2|;Oi2vZW㗋 n2iovV͵d!d]9-pN oM~N+BwE2(HKn2�< ԋM7sͽON>c0x:bu3EIO'v|F367F!=!bw~vl:G36 wEԗ"/cWi;~0T-]F1SQ0Fe3w}x;(լ]F3B9GjJq7\t@1֯pч/<.O<!`8 +zY_4ܗ6{c?w5 eqi-9Uݡn>!9Gg/ <{02kZ3T<y $ӻ3=yB&n lCV)F#5:=eEj &L0=^'gcv)s/㲛2՞̽@h|Vwvʔ2⣽+e}("-//WxО�/8K}�̟b VC<e%kj ,^?aG>dt@˨j5 gW"1֗hzk�~d!W_r#ӏ#(E}GF :ea_Zy 5a}d̰#(>Sds#^s;֗wh}Ք|x?2pc;kYۏLinS2y4 <KߡI{9 `xN%dΜ$^֞}%8iϡcKf QKCtct8fG7Y5 VJΜ/H}~u5~ ?*txƓ֗W})0sBW_~G(ܯ̾BH呐Rh}}EWn_}l(9!=+BD82.B{f~ey9ƇDcb|ϯ̽Og u,~eqBlGeW}g]vvrzyvsʈ<gѺHd]+rd!ƟB7'ybGet}M8Wo:GOg_P._ƙ<{S ?{,5GLI/ԱdF(Xv%cP], |F d LxtӍ%UuYHBXLg%d!M&Wv~6X2չbgYl#y`n&w5`u#h:rՋiOmAN ^ u#(ej^3ulQ[  _b5)WΣoce( uWuv|ty+„:΁oY44xf)s`׼tؾ#26֌! ģeTbbHs?[^&wҳ^l}tj x׿>vZ'!, ѷ) sS&o۝;r]o'gYd{UñQ0|'Mԃph96c GF`ѯ>c@mbhM&ZM酨x5|΅p$(GA{gK(J[L_~ɇͰrt.Q3`~7\FnoWL;6Gهlb5LL@f&V^?l~2|5ahG2htig /pigC ?74}-'zfp~}!^L?Ǐl|y(@ŠS/~-s_ ~-]!9|@m } EqV |H:;?{!/MvP0짣|:_~V|:E!/ʮ5v<OL#d􁖍-_)/G*D䋳i hl=f}lG)Ϲ_&GY-ZWL:#e}ƛΚ.$!~S_~fDEH2r :Vsʳa۬Ҟ2ONbν#e𱙰:zǒf||3e -t=2@H7,ͥ32, Ɨvc1#/kqp%T|I$O|)�ӗwZi)ܣ|3=})SvjƑGn|zUYIƑwu6l9cO82MuX.m\%`&xϻL(JF4$/gC\Q2NX.S6ʓqECn#2>u%ÏvVa _2wguOT2.J_B%?(4bz)?khM\\~jO\a\}uvg "ŕǮG\}<;nY}jU͔;+pwRCpnեnt" >6tg<쪺Ÿ2.l8<wn=F;xxLN,+ R�O2nN™r@<|X"_tGXTϘ54?|j)U6 >4C<*dQٸ`g|O&h^ Z٥ڨb]{T/ œGY׈#zDG_ᯗ>ۚ.zC\2(ub]1ԧ%s?3[,3 ~v\ހ٦K^-b|~Г$L=TSG7=Muc 9!G؅}yyy-:[|z:j|SqW7: `ZS̥=q`̲:'kq|.dzfSڼ=^A̮-o<Ʈt|ԔG|*4”0|MSxoOGsCC/ge݈33DćϦ#\emfghe ~Mav2c?{dm&34|;sDA-FZ1i2JƝUydb`#OkTG0Z]մTmi26gnҁ\=MuϞ >d=<<Mj'c'~DP}5ެ-M&EX{.>B 2Le發M36ëx q ֗=,qSSL?{>-+=Db$B# c<jYg>뜮E@n<s ? {nĥsF#NZ)*tه7u; bם!3Wyl}}tkV@B=!ʐ]#'ǃrt!)Mu꾙gŦ,R4{5\!/8)_2'MgX3D1e_wOǹp0re+kwTeC@a @^�!H}AAaH7�AL}f3 /D72m3Õ[<C'L}"@%QѾ2#j/M·rof>s`xlR&_rB60ɮ~}Ǟwbz#̾dHw̃_OͨD'm yd9i^X{G_VcZ=pW gO)Kyd%a;H;bVGf&!J}91ݠT~G~[psWR+s&GF5Okiu|'mqS28H#G,\%_ߊ;J&bwc*7֗wnua'pe-/э.Ži0*}t]w}vQL>}{QW'%5be k|%cLI{=k˒W<F3m2hԨ3qGW&_4:A ߏ1˕Jr7rg0WjC'g+KAΛY{wWu%wկƊ5yeQ yhD14_|di5+s:x_6~LЮt^=<q{ǓGˑ3ٜ1l}2gz><q=}l%4ag�(ǯ˾=|oǽyؽN̹ak||wQG|t>cx28gcȂhI:d3d!nb}Qy=j7k|)X,{lډ{:j=K){>b(z}|k^Ek}w#zÆ֣r`y{M܇/c6W^_#'dt:ȁu^4l+6u:ȁ$6y<[D/`(uIjB Q#2c:q>2ѧJQG9q:Q5r_~upw%}гemkwΖɇ7Ϧ-dǀ| +ΖѷY҇pS$$Z6:<[F4;Ξr/-odzvcF֧dmMQ:(?&|mny2Ŷ#:+L]c2ظOĞiΎ`>۫sR7+uG1Mr !u?#>P}wkXg5|OnGyF%2�7j%9t]2OZц"Nk eKeaO][8OF37ܑ+fJQekΗ8wO0GivMosJ5#h 29.}E6=CsGAs6.֦2j=2Nw.pN?2Puf4.Y>ƳVtBF#o/doˇd2V|=['d32bsR)7猨(N|Bf+RU'dfMP`NyB 3T6"rF>ev*v�}'e!ՌXhI{qwd3:L+@Ifcw}K̽jP?ȵţeG1'׹c2ڿ!JI}^ -//ټRwS_?%fC6ME_ͭkP<Br> v=U{ϗwl4[>֌9GF7; "U}jqu'sdDVn|U:Mb ^/Gvr4?%ÏŤ5u>%pFxig_6\)M'OËٱc,dm+_O]fO5Z_lQˎ�~~T(!~F(G+ n Og2>ӫMŝ#++ӯʭͻ+Ïm}GL22M ^}ۿ2XGi+<}l;H;ot\}jdKjK劅dn+wHx?Jч}nqmi>|>֒sgKe%r2[2ui9ͻ̾[jK owojpx2.ZO^gw ?۞Z8"ל4W L8<|\UI~% Γч;c'YYHCGG38pxL>K_,G9Gg$djXKFnT?l%Yuc~#@E3Z_D_o5-ŎKaR9t#/o9;>s� K([wem:QTbސOKqyZ49J4ߍLp:QZ/͒:ˁovZarQBwΤԖWZaO>|gm}{7"K1Ϟ~}۲unϨi zG]l) e3j`mfI nZ&ofx4A܁p{\T&'ynB<?tWfHd+v{6GOdmο4jaM`[79Ge2l*YpLfMqϐ!g>Buq.ssY}&!6gߟ ?r6M1!gt}2ݓ/G3<.g6?v ~CL?cXئZl}~L.Ҿd R.7̱/s<5}e!^Ȣ6=q8zL?gh2<Ο8G#ϯ/ V|`]i/d?M12*f*dn�_<>~r0 ~:N{l8NS!Un|IPW ^R!϶3BſsY=dlるI3l믐I [z[N?2~6쬭 /WT 6Z,"i0/&;EF2z#_y{+ey+e/ٷ~2Ҩ i#{n b^3Hk`?Bf?_f_ƸyͤNN;++eeF5 ۴E|G_=(k8QG'i$$8C@Lq|3]CNJT~dudf5,nۏ>h}}gh#/ve;v=Q2}C@w@Ysx}!)S8Aӳ# ]RbC\% o_Cue`7]o󔣦Ŷw@tD8a^?"WC\ݪufiY2c4PA3͸*}ey9ZRwzJVVCx=+>@K֔o:X%;\}c}oه:h<{!go{;[2G8Ə_̾5&q ى?Z^F%%;yKts̘43#Ժ2֚D >dҝL_; >򚠳OЇt=|<FQ/#z2x6dݷ ^=Eߌ3n|2ni;|d!D$i1$^'QKx;<>ܳ1z2;?/>j5q;{}H{> oZ|2kI<]28�uc]Oَ1_{ `s=* N!5fW<Df+x�̈́:ʁZ)\xݡTU9>s\t"<^[G|K^M_pXjwEYqi,O垦NK}i?U9~*Mr@Xnoj ŨrZc4'x7{4}2k=ZG؃leg|:Pn{l7^g[8::KrL>|0ZtJwf;?"ݣeqF_'^<qo2*צ!9-d! _| kzMF6N6آlSk2~~I ?C` w5;۾&$T>@}GO>O3 5u#;+�dZ˭o]G1 ϓϬL>hJ|L> Ek(W4^Pwlq]FҨp?�}.骬~]F[<hjiL%>ͪ;nn] syNkeot_e T2 /2fuR-Wk,T|CfO9*SѤ2be7Fc@gv>|`f Sgr>l|c;j|C_oo 쬝7ǧL/s//5uܔ޴f;cSG2⦹~ @H՝qd؎ >`=d@KЋs~S_|)P!&M|ɐw lioKG6(EJ#~֗ٗqVhx7=3퀛2k9mCƛ2&r082>sp"n#ծ__PPk:AxcVk !CΓ+Ye4(en̾wFt>Gf΃xorۑG{%W{d//#|ta#YusNS}<% ݾl2<%\ֲw|wybd=Qd?E>>,%߅!oڞ=}|tx~bTtkVU2Ԭ6\(|P#ɇ\~u lzԍWhqc!n䫬ΓkZcS]AkWF_UYtw|t~^},VBm+HN6by7sL{Lvoys͋=WFfGH fc\YA7$Wf4"Ϧ[lوWfe`Q_jn2o#(>S-Ofvu" w?}Z^f%[N{ee!>w\мl| k0@D(;?}w6niHR)dB@LT>}xwO GFmUFg>f_PtXIp-~ʚȇji?虝%#AQhu} t#6?JfC^}Ӗ9_x1K:񨁿~vĻUL[:yO:HGg_yyڍd <dNs`CۧF7 *?uXcI=y:ݞsm:Ax݋]܅sۧ oψ1Y#n}=i^>zd9;)9Z_fw7dSp/ U-ocOI'6zox>[(BOѿe|V3g26כ' A3}<Ċf~\蟥d @OB'\_Y6~بZ{*Lf7` ?zz3G^q}ds"ų3efg2,|)_05fy&hΙQl4OZ<c.8?Iw2Xypubu><M 痙ԗ>lj;yBL3蹌> nKPϱNs} 8jFO?])^9pL?'Ke9%:?ߟ_tso5kpy.ϋ,M {G't>~C"п篓O@1& (_溼__#[6y!/xy|9_ Z7M[o fہw_}!GtŒ֗Oi&*8E̾hz1̩ }]]>mXt lscjyޗ2}j"Y'8{S^?+G.f*5hx//_-/ܗ2S֗ᗹl; (^qL7̾<)jMR_RԾ ?nY˸a[ޑ:R7P}IgtC vczpd!YMsn u;2B5)8S}Gf k=#᳹V;2h/FT"#7e =֙G7 6ŝwHbf4=sZaW2Xӻ1=z%ïT6J>(D6</~,zC7x%ï\4o^{6Vn <*~f{Otu8]>y%ïH[2>#pܻ2R<!o:̾zr7U,x ƧW].@wLKNWf{Kb؅^p2Y3-WfuD~ a/jZ. WfeMYTYȌ=Wfo% U+bk ~#2.߾={2}92>Ïc'Qz~9ug?_fjޗT3ߓZMw+kvaٓчkum-saϓ"Þ}8͉dt<|Z;͋gw<|iv'ݥOfksGp#u�~<fFjdJ5b3ǟ<>5 pq-5q|M.\?v3{p V=2Ρ7rg^ oɂw*M !pΌQyO�Ɇ?vch}qƒ\́ h8ك)'�{e7ak?-Sm%G;^6|2� b5/#2wFtdS/#p'lV7#~g 3p/;f@yYߩAPJ `˯8Fqy]5 vޞ m_da08ƻ4k$"#?e{'en@2o;�F9i CM$lucݏ&CЪ̝a E6F2yPM96q]A흪8= g͏\_Ơ#nڗx�*;�;܉;3qC^AA[WOp ADYѴl:H$9HxQqpp$p soXQ~g 9HNJz#$bA=\Mnp!c?b>q7>>AV>0|U;L,!s0vN W!9^au)/@`Хs7/@aP~g 0lpLSh #!0XhB (}6[_!". ![qa,eM @0T"&1NL.@!n묄YjMɡח9vD1<� So]~g;Qdٵwx2y' S0̛h!>23It_kZIy5H*~G\_ +3@qdpy07sIbOos&zvF|duw7C͋[8{F##1  D:f<ۆp#&dGfMx29s$|!Ⱥ_'Byw̅ΎLs>`d ?SB_KawR`+J>1xhybL9XW'@3>25u~]S->^d8eqDX+CC|I ܍"ڢ%sX0) @^ c>1 ť1 iK ;Zl0hD_bQ8CK^An6eIɯ3G:89 pBHn@e^Lwx2w�~֧26�,+PB9x?& dF#g/vտ7/@᥹f &''cl}c*E|㖡'(&͠dLBFDB:Pw?mAM.^w`Ne >_ִmơfx͓1o. \Þ'S6R{- S1e#0CN^LAvXQmo/h8Pxv"7OAxMAwmueM*v( X3[卌dZYVGp<fhcp|#�<N)ˉ{8_=ק T8G4svWgg˶9CaVG>-rjON>Z_t'oVGStEEen"4 -CMFUK93@*v91!&HN,8c~8@@tݿ e2;뉋~|kl}:v@ܯQkxeb\o! V#INv=lWƻ!r./x /6t/@3^2뜻m2 <MDY&%צHzo}sqy2uj!(}#d~aZ]yӾm2auL<2٢H.q|<m2Ѳ/d5kB{tt<uJɆq1Mַ t@9\<6TBjz2)bUڶtHje zXs&WB�!2ͪrv)R◂PHb@|~({׏aS @r)$dTb-M d]|4 0A@b\Jb A`5aHèw`V蟣 % b=†�7S;Hݟgt|rL`Gn3 a!Y#cJqx̧S;;dDަ׃C`\CTI2V‹E#. C0Y L>RF/2<zء7r;e&,>s.3;2E7#D,8ۆS`w3;mGuT�vՈ MsvDk޴a֔ C=ީS ^L\ ;;ucm4 #�gzͩ |~f5)g7at3F>|2" Z5)x8JoNao>2os,dHS$lq|)G9]M߼6 <C8vG!vnnfab|ïd vc##fi,P2)"Ќ#8SQ]2 ǝʻdEtaQc A?.uK0y2kB!*Jrcf+ XT3<KLxk`>22F e!i]]ǩ%3Wl�Ȁv'ɇK�hxn)O+ݱh)W&qZS 򵚕 ƛߏYX q HFb^6msn E6 @W OhË`9\_& ijb D{teދ7U*s8='C\کӵL,H": $�!�G  C=o99'C!oއ?Hsiړ0+v!nZ!`_Mm\j?ԓ)P{wM4dxuSTEԞjx:)bOۨrQz,M`}jpQcg;}}N`}*7k`ɨ _׏ͨ"FF5|r`rl޸+ͩc=.aSDg& 4ƴ;A\CI̳GCs]L@|mqT!02YR�a5_^,>ד-3p#QlWbef-3jz4@¶@6:yU2) xrjf[Fߒ0!/rL<9~ AliN2חV~iL RLmG3H4oDYya@9dSԸ j&#1`7+T/zo$jkd&#>.M,[ӱ塙@Q?VTLf }, ?IsxûIa /3FE@jggFL2gz34u !H^3ı^\ Fi}x.@]9{;[Ԇ\_ rkE156!3$(v A.㯡@d|]@MS6nҴ!HF>/v-d @lbp᱔L0H(duiD�\Ĵ2zS-Ac"_@d÷7c5f!30& `o$a_&`k2qk `}KR&`;ay}awa<j)0׳FX ʊ [�LDYo/eqT~.XMվMt-e�XE{'opd�gJiNEod͋^:{*2Y7Ew@l@l_OKә7##ݙ_kx$c )F<79=ME./|M厌A:#llۑ1xN c;#Sg~?tcmأkG˚ uIg<ou9 a({sd Z vaIaMd Tq1+x5E߶c? 1XT_9' Zld 0ViBV2V͹ Ssz^AN4%rKm֗)Xwvf5VѴ)\ÛIDI�7ƿ}s>If M6Bq@hޟteīC69>{ve׺YAbϊٕx4bWFौ6|e .0u<(`WF y"E l=fЕx6o; W8>FAϥ Gͦ"yOkOۨʿ6S[{29i]˓@C'3ۍ-j |am=GΣ'33M6=功XxwS`lTٞ@ݻ9UiM%aO NG/dL]>M݃4(5W$�ȴ31,Oy-OWDpn~x|)?quJYꘈ32E;quLSôxLC WDpe])FVuuN_ٝ烟Ἣ"F7Qzw7+HNCCS2z%[K!e2 ^ *3Wn-C;Gx&51Hٜe Rq<}$1|nz#63lS 7ܠ`s4Mx93e nB;tY&&CN'" >moC&C3 ҝsB>bn2t}@ 0S1uH19 hOdҼU-g@H͈FpPcY7s4h`i\&3*v12Q#h16RO @clI-\ "mC,΋ܵ(n"V?w4kU . ;PsxM-o` D靳Qvu kr!~P�|LA+ q^ᝫ~GV?6ӳe":'grHbd�!~x%!#0hu}@}ņ32A O<|^C u 54X<=d�i@~~ :Oj!>1 7WuauOO=d"l$2iJ򟦜z16;#~;p4>tQ_|XS |S`͸dI#1vw\Zgrz <i ¬h*24ֈL¤:QrZ8t)N'?=0#b͸ǥqua6G&ᡊ_S6;g~dD[V͵\߽^'yj܏A:~@.~d t^ԱPKӏA{w@kM#SIxQB #ϩg <i~wxk#3L,D" kKF`!M9,ʳ XdQ$$S 1/O4TXv]"U?ӣu*i{10.@f`eux{ OKf hFƿ[\óђXUN]d0Z%CnM̘2w%ix%2/{Ѭ9`6XHLKN+d;�ϯA[q4K\{KүL+*2� Mʃ"~e�^�;ѭ k1w]|5ůLKck(X'Q}M�| êXzl>{8Lg坐O&CڜqRYff Cq 9̇݇^A& TL={'cؚ`pXLgWnUܩ?4,&@7zk 7'cCo٫:.4+2N~w :.\->Y$.�x4[񥐧'B#O)j#k:2 kvcr:ۄ:1gP�8КεnhG7EBܾe.ciMM&D6udϯ�€أ a][ =:%MvVc2Y^ݸFڸ[dfSʵ~Y ܔ lx2gjexd, AbE*~ pl<:%3XhltlT7#V&o@7C>4>9-#-MbN{d">bȅe0cX<r>&3ytfI%^LAtR95= )h?cw~D݇LAc3iD>w@ #hƃS<VX`N)?%9hCϿXRt�4Z2DĊс.mn.C;!? <Ͼ@!xvs0Ăit|.C_p#o3#ȁx@}986[_f _>a__p~Wg,xjwZs+[&J6X,\f`եSMDc} LU#d "~m=_SSÌ4dbf*]aDTDPz "!qF2?R]1I65�5= oW f!0K|L;1lS։z/*^”A:ރ7SAH.R D)3=93"eR1,)t(e fnk"Jy5ۀ)3ތRCyg�H#{ˑ2?iθXC"R 54v@điTD�o�GachGF4\_CUvU]_AT-쿿:f�:2�O. _ ֗xu*ݳ;n#S�ϥQr,~2GFEaGfyZ݆;"3[_f`' Nz}ÒXdB"OULdoi,l\$J`! fڏ°*[2n ϻedVuI_Dd 1oƧ6xc*%S5bZe{HFDODaX,D$ЮAe^J6&lNaK"Vf\xψOe kwwi@d4. %^/@ O'eʼn dxl2[0'q�p\MrixJ ;.@f}w29k"O >+ys'C! hd\ !Gdud|}"œ)Hfx/E A<nf?mƓ)NtsI+}د8T'SU"~C<5%Y7T'S6On~pb$ԉm5k=e:?NubI4M)iZFq##Fn|�؏ۧ*:|]_Hu`frcR?v 2ܣF׽k탩N|^3VH#;Eש@ɟ |O4G�tb!Չ>Zxnq 2?-MĞ1wkVM^D e67oiUs .|66O_G*LFHj#G.Á2}unAɇf2Y&pvވ2a!yd|^-C|_Z`3ùe ×0`m&SxeO4f),BzdgScA)h083 @h4uG3 D0l2Nd4�|]h{a  Axio)J]U$ &3xZਡW@_nA/]&ﳲ+H4sOR‡QSL@�nt-.CУQTDƭ2}35Ĺj|}1I)`}37JLeee znj {T8^Aiu|^2ܝ-.>I9Na( NE3dKMUxBB2iJat8!WA-~t>_ BaM #&bBg~zF!c0>U?BwƶHlnco Ot,.@`=kRNTz[LA7C;Ʋ~?7ɐ1Qnm� 9S`nd ylF?C2B&#&LY A&{]A�5nXϔ01u!&&)#r:U2Tg^l'!-/QnEAo ^_yfWM9)?[_YXG3fwv,^ \,:2tE K57$SuFpވ5[# ؝Ir# 3 ̿I܄v �<)[L?*[p2s=<vs*tdĨNOqb A쀻X9yt, ,F@w@ a"cs1K uG 7foIfs׎EJ K?2Hd&AšB8T͒9ݡew:Pɒ9x{=p+sb'797u8>BI%9`ye R+16"!1Qo?Kd$S'&ǿc>QDҵiO2^H*.@཯3ތF93We[|gǖyeh�̍|2eMfǚ09L&mxYM|voM)z{ud|ns Fj' A&7=B68 3! SnnSS_`i0d殶"^a ud2=iE MW24 Cԑ\^C ڏdN`}N&w7"oׇ5`}k7"*.Lh?3lUݯG:}(`~㚭 3X9|R�P[2;u^S?9&$uq=O='g o%3pSԾu4t m;cggv [ ;1g)r2)ӍAL-?ϖ1}tC)óenpS2㧏gΖ]6;[f Սsg 4x. aW̭2΍G}02k=&3n}K옌@!H qQ@N.wGUcAc2hJN9&аmt/H[y؜sLFq{,f6e.?^@xcsa1FCo6<�" 92y(6bCQ2| ^(C-qN oNe]+72u8ez"m8; A՘2xs8e9'0܄\ /Qe 4Ow#?2M ƈLq\0Ȯ2u60` c|Z AD4QRCB`Ygy&e8,dR-к0jxl @L\MT'dEclOD['dr 5av_TS \u 7꺟HsFI_?Iw]- \:⤌ C)Jo ALIHwSD H1а? ,BQJ\~Ő=9rK(s0j{e:{R!OƲ>:jm8e $M=$HHvy/#c74sLC v"v!82M4mƏpM#C܍LLU GGࡢiS/92/ڹ3Gf 4rlf EheE%#tEHukIXt:brjvJf J9S[x83|J`Q9 S24e=Es3LKf`蹩GԢ/IY>X23EH(pl@6Au!6T2ǁ%S~ 8ڍQw^AmAM,J7dtx ,Brta{%l AG Dl?Ĺ2/L )T#xssebjB/{x?029H;G#Ĺ2ݵ 3 B6\wx\m�oF 8'C}hƿANMށ'SA86_|Ѽ3rM  Cd *oSwd J;[|Fu23ГAo;xݝV%Չb{S+`H>MԁFnjcx'wKP}Gԉ&S}|L�NFu~G9g˻<=wzteԁi"E_Y?]I$Gaa0^ֿ ҽh#wKCd~ڋ@(Xf[kԒ^Z =-p<woKoPǭ @lfhТU[4d :62wA$$ 3pVL}hjm))_n,E27\©r 1CzKط+j48ˑ)b<nd ;>/#0渀FNxx e Ԛ#d ZV�jqܨ<>`25fSLF }<UUd6h:eT A\3d:["e2ij$Uq?jөrnՙv"LA\{`⯏X\&[Roll\&Q$.#A�HA)Ht:Z|`T.C?^(/3/Hի_\ #o@`ۍ d%qh!؅HA<ݩx_%*d ),^?}je 2~?2wm*d OPwa[!S0v"EX a62P~, 쭉<62 23 {SB`Gs2s XtG9w)HT G\GR`:mN?:r{ A|5Zsldl^)c0_S96L<o^{NzwhQ)3v#D]:>be}-Jldİ"sJ-aJ볩G~|dgD6 {Od|#<S#j~'_w(v ހI~no[Sx >C:2^{C{$�<4m:3x$wbpx.zdZkwRT<2yz:IbQtaJ2[_&`jD*E%Q*w.UDYd�"lI#BysT j>x4-xe6vf7d]]Doir AISApffX *4fQ~#!HCJ 2˿dRW H݀zIi-ZE`6m+szM&_hkܢve ޳:iO2M{Hpd`]Zwȕ)xg"ke8d)>:Aߚ+Smv4"VtϊQW u9}^Lۻb}S C Alv^M6jg0{7.g*^Oo3-.Ô=vg80 #3rve|΅f b"vXbM`!: V{N8tHܨ5)u\Fies,X -)^u\f|ƣkdGo#)HcY%jd<#~YS�d&;/R _s2V}'dEjf/Naae:ىZ@w@DF_n>T*Sed'F8jzT*ML4 4 t^  =AHid.sy$]@CAb!^\?7 5N!XϷ `s�6흒}4++tn}ߩ\Tp8É4qLU7|f 4w]EUXI+7]^S)fnVf2W87j +XIo[4gC)4 Ê'" f~$BCP9U&T?6#1 oQ wxT~1NXk�Hӹx\H (Ezu�0t,N~ @(fa3ۅdk Se)TWǖFWz;z"4{T([77[P8̮O#Ym ^*ܘǹ43!ލͦbr:|hZ=˾4܅f )KW^ApTkQi*@C*., s*@X_À,6yNi4MXlAK^ "FS ϠdEuΝBhhNWw|:F3N﯒QIJ EXot2+[_25F+]ݬ_OϡoIZ y)i9|tG@Ԯ4tV pJ!V9�T#b|&NS�UiB%Dө[90�x 􃉭m}uX;ȫ9bDaX{- N'+0^~4c?-tjNE`F%S6@*R4\4ʠIE¦O*nwg$ sF<t,-IXYx,aGA0*ܧَ!p�Ii<P3/�t&S(44ץ8>,n+Caxva\X?ou2\4<4F籥vAj,a`G~>C<4�NJx-94�jߍȂGIpphH^C3ԾrCC^/>B,Tho�MA%6 $b6S 1,]y0iU|[Rv4vfzC& JĚJE*-]`E/KmK++{4m`3N`e;َfק9n$(y$ 1ABܳc $ "U6 rwmgZa#ti ^4  ׸&ri ^W OۃI DPw0d4MzFiSQk|2tiJ!NӟQY}p4o1P XIwuyfb;_Nv`Sl157Iv^`y.;/rOft9RTC")6rtXH"4烆iQ=^@`n8zS΋s{vN_2*aW{ͅ/;0R nwCQ;4!4B/zϼO.[q޶!`g^ t-UgEѻi nk�lXWxZZwDP}~ ͰOn:,R\nU? ] ~Hnx|v7 Jn [Ba 㷿&d8fn4g ڐA4+Yb`({+Wh᭡+4nW׺;<Ù+4k/sbYu JW|yM Whʹ4)?pP<4%NE/@ g 1(5njeplڥqƠ]$ AS2?4yьTD6JSPZGADS)MAFҀyUWӧBϵdԢ`ӧ}, 18.P۰`޳>H� > ao^)tֵ,h(4Cn�M\2aCytww eV4\!h N#hF34,9D,h4̬pxh&7\M@ĚMED7 8lֻFБotqֽ̦1y]Tٕ:%lkzFМ͠VW^tmF Nk>豻f=4IV<> N#O}husu(|HBGPί]XxG~`8Oa!v bp8d� zw3n1nAC0& .4~2RZ|OG&n Ɍxmv ϵn~<jG-AS]AFjHȰ]MA4Nn<zmurNf a ri4TOfths6R;ռqfv`hE#MAs {w�nN&*FXp-o^:4O٪O86>M kz$*Uv{h b:JtǖWDTўh%xu^'qnɝCC0UZBISb ]DЍZޤ)^s/mt.i &Z= Ioߤ)6r#\5~IS-ӵ4Ayu bЧF7i ֿ^ T*jϟ64x:9Y T\&1* Dz;|/MFFN.l4~s^js0&0tx*piV(ͱBߊC{iA٨^uj�-uɑ[Ry##XNDJ1;6V''Fp}gn7d:n%'Fp}6vs=@Yn46jzP5fd% P 6?s>+9'�@~GUvga^�5= ^@%!ș,FsP h dm.ҲhvP;SDgק9tg}[^9͊ع׋&uT� lj4F 4D⼈^. v}I=:ܧն�r={v};Mz|ZI#/ghliV׍7?NH6vikpO#PW7ލHЧ:[�@ Q21B3ͮG3gZCٴy |YEz/ (~^B#P7Fw CD ͮO#ʹݙt} Ťj4M]' @A|@ S!8ޅa`Da=_UEA�h@,ˀ\p/滕F94 $$RcMUUk4kR[荳 wbOӀT2* JC ph9 kF�7K�cC7`@3:w~ht/ hjLBQCQg~ r<h�B5PSP<s8UקhWT|K~ @+JO|ޠ ad4 ]�1ai{b-ԥC0 2{?_6i!h&R*9_~$yj|BP P}?>nfOUC|6*C9pسWiz%M-2T(7iׯ*TLLJ7WLBr{9Mz» 倉Y7` ]O ?t/1 W4vc/Y *b^\Cچt[5;k41ᅔ~3)m h Fvu&;` |dM)f+63u}(hYS|ik3{MAw+Q@ J_<t gJ�k�F%1XّT<90}qW[3. ٞDZ̡xix ~#fl1D(4 SoIM4jA5xD|x"th>s0͉Ъ@<} "5&P/]^3f &`ʨ)�L|Z![I/ ^?TS2-_va I/;{+H^Dwd�Syvwc2�`Ezp4�:PO?&gaGZqǾ|eaII&ض[}IJ{嫘.tRv献)bH5O5�])΂,�]4tt][ưK3b{vF/ܮ7-SzX4 A]8d#D fG*%鮽)kAiͬoo+dDjEF2~:_yNvs"WўM_]! F,H][ J}![S{#7[ g|{c;ݦd;& k Y #K^1VӸAG+Q.OinL6h12f \6uA_Eևo~*hxv} vz-R{`8cڛ7M@|݁X-ί.g ĉT<*{o,i2%R;dR}f\|op#.�V{mNd.u9('~kT^Ms/Zep0 xjw$ɜ+YinۊziEf MB:^l4 %+ԛZkp+f I(o1ڨR1I(o?-4 1{IEބnB-&!|E.l| _B hf-4 Q5 &$\0tm(U Iw$mA5Ytm2w^A9w]!k@sfZ)$s[iŬkN$4!֍G@;4Y 4FFmkmXJcРT4(hFD%]Usͺ> A\՛Q)QI_f'k3m4JSz@)Xi%ѣmuh Zv}?FS9׷5ؾ7 (T0:h V֫fKc6\5Bj8Ik%^|-a}ihh;MAIR ͫN3C4ޒti:&p1ER&4:mMhTz19>, :M@Ax#ln M V`u:N/aڹ NǷøzd d_piEʹP}ٞli7y;hVӥAFp|<4GZex=ag\15 Tz/I 0 Fƴd0 giypx24QlT-� %ySW ( ܧ٠!x*nVqϩ}eN4[+55 9p1HTe1x*lK~=5[9lh:ޒ1݇`J}~EʄQᏪa`>M%h~^f`icTYh:4!P٨+`w8]'i;iV=�~"4<ҩ�X=l'M@إXs&u!4Zרzj_BEax4�Ih/Whֿu*z,�\$ |ifs'M19oKݺIS6:>/M[/zgjq6*'7+^s)M�;L=KczmIoѹ4on|]ر}i7ЏSx[!mZu&Fye!0Vس<CĴsv{*츈%*�+�v^Pm|ebQ_Îr7ׯND# #'BŽLSQy#u5T$0g&^I@]=vbpcE6V<z⏹l4!ig$ya ( *絡Y4+ƒ.=Ed#h- 11M=V_xx\6MH1{q(:_ Jn# <Gi­ؽ1G0ʦ!moȦ!^ԥ!Xؒ S:8+f`Oz3+ d 8Gΐ?Mw}@dx$tI!(Oc'":st 6 ڀ2"n"4%NoRiAm�RZ"z֭_T "4ME 3UcEmfB}>z5Qme{(.BcP1<ȘCԣG"4k iI,f 1u; -V<|h AТ\ DEi*z�٬/;QY!Fa:11kvdG.QpF栂(J|UG0j;9 CSiuQ,dP 5YQ)MY,694\$m+'0%534ɈHid J_T|s6"FcNOI¯45#;V9h Nuacq5\�MAWvzbz ?<)P it fh d+q#64֓)蠠es'Fcct,Ge[|tn$1`hV@]0uGO Z7b:A*Cm\ޏl4b8^V*a|o9x6ۦUr<fkX"E i "kV|87B)NGo)];AiHx"0kH bv}@uUC'8h^]#BPF`TMI$0 gG1SYi4|7UƕѠX~Wd@@vNg x?V ߉FӀy ;gnb$4ʋˡx o=lg*ih L(4@ 9.uld$&K4$[rh�kM(m>;.F`aV,V &2v4i@yd"]"IC0D* 8nHk(\>)fX~\te%i Z͂~R 6(xԾ Y{'gק!xX$ :V9x_Y}V Kx &bjFiuI-U *\B@.MA[##riVyXFg^4q(Њ8Aѡq3.@ F7,�ЈZi}7"No9 ;7R -Mj= Q뿳NS#u}$?0\vlD1$VEeF4 8(ςqeFj6C1La4 Lk΍n( qИfק)t^O>$2e.椋3Db8R]1|i 6D/]m4ӀH8ZGh fZ' ]g]41( Mcb_$ܧ2&i n7*~`|l;+ -U6O3;MCPlƩ@0\Hg(z0@|(yzi}{NE$4DWw*ze.Ob̮$ 54MMN�Pi:<Bd$UhZXY[3X4z'`6siŖ�Ȗ2B*4�ф]�|W1& jS Ϳzbח<X$Jq8vs*4�twvst_ M@}= +9>P &z*J4\ݍj}`0]`2(*?ڝz?0|{s؜zt XnL1i*M@áuJд݁‘|eB-Fu ~JğbXIn"j4+B:B cZ}ס7{7f7][xeS-5vՖ McAe�^Y3-;|ā}mJ@ƠRiMEy l4]0xx>ȚRT xGRfj4b]!k,NS]$t3bLvb)X߷'Jg4 JJ69NSЯu hNi BDAήOSF4ǣ?ܦ2R43O=4.m  51Ggx"4rf`SuDtQ1^S ܕ_ȡ:F8# 7+ wht*߹33cp iya gyg;̈Mf).{S`BŠ j%3)xj뎦$Sٝ,Q>ՠ9x,G8hm]MsԡAxBҰjnf<[ zhB.i؀bZg{ E1zhfuaYQH>Ck=4ګtPA ~KVS „dqo9݀9t; T h7[� JX@O!$s٤AXiv4RH@?&?1X9 BӄS<>݉`g].fi ^d=☪&MAHEs>r`kISSYxW <Ԥxt˲΅3n}4oV\r]ziܺyg[PF/@tv_O-O5&,MĂo=} LXxdFj| #婦"*jBTƆ]H-�/i'(;/R#RF]yC3F/A,ms5]ׇ7 R*ܡz;/R pf!!r״SyZ�*^P4mwHqv<ucgQ[4a~v"ۢ!FN^锚N+آ!5 c5(M@cBwLΩN+h Z[9elwk1&dF>!D|ֆi�b[M1`{~٦"4^g*lmOYMaP%͵LmZHNQ4#M̩gȴc}:Cw4z˃CEp4kj!a8ͧKi M@ٞpbbLe,MhJgHC0+:Tx_vʼnTӄf=^ͱCW{}SlӡRWhܮQ�/*Q T0rMc1 FĪ2; MhB&&+JCuƅͻMi *ofJCPG"\BS +SZlJR9Z-`e.Ҵ)Ah:-=S;tͺ?MbJc$�HTɔ Td�$&1Xxu͂h)6[�A@wu =)c138jFtkfa�փT$N=n01X{]79YYB)7B) ~ bFScM5\cAO3.󶀱Lg<jFSӍ :N{,$fFcbNx7u/kFci_dU5ƻf49AiMF}*#9A]cLg9AvHs ܣ 2b9 Ckb| {hN0rth m%U i _nE�;zq[�Mݵj*&+|b1Ak;a XI#31ޱ1Fs:v{ĬEcP<ǯxdK"Ë[<ZO.0m!x4hHe˘q 4tȽ�Jөx:7C})lF TYt@t<4Sj36�_;m84�O]S'�LKC;vhV5 uINL-]E䝩١)cF*@,S:4]jء).0_L!�'~I)i FrG]ug4kbs(hIsQ$/bIcB29<N &[qP#vvfק1|rkw;:ꇚ4/4Y1xM)`rseIc?im=~i Pmvcj`=em,|R'yc \v[>pi ]*T+g3vd�5ԦS w&csw풷._�6(a tʦw@ } 0bXyd^6dKxVDv #V,ۇ#OS?윋MPRhִ= ,_@32ie�P@TIWsnf 0YTP@4vtMJ�kNT| D?6GCkA_4wX74!RX}S 41i\H=4wn6$jÎa4w%zL*`Ver)>ó 6aX'x!h g.;@T0- ( Bau5M3P̾]FPybhV}6L^_gק(ay>{�4q1>4ZsXrB3}Pҕc*/|rօf ,=}kkW} MAEO]HhBțQ Fws;.4lGw {2~4N M3Zu̅Ơ&3;u+A=ɨ,Ǚؙ [+All+!O JSox4:q1h끚EkXXiE,!4n{ƿiV}Xr]_m/а~ <#?;c_tM@g6G" ? �z__E>�DҨ8+=={_] U7nt.Lh2C}z=tfP�9׾XmJ~k kF4+#kn6NO4^8+ 2 sH6/$ҝƟC˴|}@m;ŊeO;i�ƎNA2~k]_m"S eN0W6bm5uwbuSodN300.֌Lk;zH+=hzI8)X HVwv+A8(hL P_sY=gHt-LiDS%K'Е�3}V*>ZASyZ,m(bAԏk"` ݧ XiC㨁ԥ'iI DeSASL鑟]&R_#ZQ`#6M@93. <W[8sU ҌBដ@s~ph&>WlMl+ TU;J84Sv3�D퀕1iQGiK~ZHyr7@#$8I+yڥslIcl&ؚuzD ⣺r\Nۓ.k~4CWpqj&xڵekt9SKO3n>d4ѡ4&OzS-{qWe* Y pi�;#;K\]J~iG ^ 95$>ͯ :;R @msT!9!u}Knx{}c �,񐺾nr[鐺~}6 ~0xH- ng)' Yq|<tH`U! @̉B0S'H;,9"4ugק!W 2  -p~@WS r~ 4 :[�MAXtn;b8 ƚ8Bz3qfק!϶SgX470#p@ũ&BclYg4fMpߵӊH-_ ??T;]YI˧+b�R!ne[aO 6 @kai� 0hJ=" Ǧ(8s>c2|�4�k  q@lr49~K뽃t6#F jl͌2u3kI F+0'>ހF@MKl]^O6 Fn(E7B1OMLBBhN!WY'DCh;n5^~藎AB#b"<R O3mnB#ޱdž|\ >*JM#�fg$BBibAKvm}ܘi o`L(34h7N;k9(dQ zY"Ѵi[H(1I1LUBiVlR}Ni4 ZD J3wqDb"c4+Yo4X4a릚|nmFc%z=9LŌƠCi 4<0.H)ٺ2O )FC2a46nJxǣ ٪+@c]Mt~h zPш.TU) <ĵ))B[{4jANi\kTi V¡{>irinSumO3>�=]$RpCfBY9f`m\R<!1 X/MSАUjCCWpd}p8 86 x<SjF 5EaXM=sMA"6j!9u)41axkʊ1)惦=uU,ꕒK=Z@#yПn<hB; BU}As7Ӓ8]v׳<k($#h ;./;fc:4Q k|]D" 84ϵu:ڇ5 OC0xכ_<Y84ѡޜՃ*ff`Zmh7/�T 7 dsjkF`u-taܣF`:{C &D >pqh &dÁ1i,>v40IH.{ޢxV G})LcHWLou=*2HW[ lE1xʹ pTBqP1xSWrMvw A( U8v%/8~/Fr Y0pi 6"4"$.OBT}#~dgP1؁Z�HUOΣ1v`PvwJg pz5@e·qS9KҾ6 8ЎLB2A DRgnY)d^"8H-�zM$RqN++Zvb�S垇P{P@,{u Y4e;=;f AsIig n#} 5wdh?³ DG`,eŰQ,8NSЭdlEC{\Rccl M@:OF4>}q Aq(z6 ڃ[ա.hƠɱQѫ]ȎC`ؤp6MAy}xokLϦ!X B?49 %[;TlpwB@G2e0z6Ay_= AémQ)xK#47+|Gh�3UY(l4q8Q{=r#4k[u0:7#ݤBCBOv!!jgadQ<_"!38|h *Z% 4>N\HڏMe컊�tt̮OS?{_ʼn#dZGiYs >3+ Az5LdPE(@ӊ<#S}J3X<Rqv6wfAʹ{o=sf𲹼Ȃ\C( rE�C*M@{A@r=FBTFoB@|6p U 0_RR=F%uCJx`^>+N?絽iӪq6퐗F+֮OG"'A�W\h:n>^A"w)xy7Tl@V<#+3SioӨY]놞iF/͙i%f ,h,ƗN3Pnl-zБĝ`ؕFJuPatxh yClvyu�O0Kf`B!`<OÃf N+R4Ӿ .{~J@36xkqOaZG'UB%i{tSi+Py$4ky3u'ho4 l<ObD<ppn4en1X}E̬v>\j6_JpC%s_^O0UZ`W.OSFK = Б+8[�MM9Ρ!MΡ)x˺IRDwht k!guR7b HǺ/V,OP{gX^A#!xW=ew {wK\l OgNJ`ץȶ.'i ^]ͩؽ�DOק)XܦKSv$MuP L%`m5rOg%:KG={7]uH6)CN턶sz.M[贴*ƹ\D" ݹA֗lB/,[x}>+pqZNccP 7E!vZ$цS u|;-R `T ^yx^$qD/=bgKPo4`Ejgx8΋lکcj^y$& Hv^$pI',W@\4!/4U\d� hV^?6Ӂ\4/.D.ifV&hٷ;Eh5Ѣ_'3=\4ES{j2 $ZS(r1/k1t6!:tX)+!D%oi t7dpt`!7MA^MS bPi J T$ 8xD#v7)ZD~)fj�kyv4+}UD$'6 1(i\u+`w:;&MsPRr<M)(TpS]F.imN l_ ]XhB}i&XNT\[o�BP~2B#P /D۶@ @wjY qٰY:FV5j\KQ؆3)4~_c[ӺG@qoEBcX* 6!峩d*A(77.9V@Z{p4aَ19hftIv\Ʃ4  DITw>YNy4鴤0.S(Xw�a޼#TvpAEBi B[i4Z7;]80E/矺bxr A$FCX3T)+s݉[MA4-3)n6f݀z� Al'nMJG=b?M@[� 49nFG޿J:X&Mf.' 1iFZE1ɱj:(vт'4|�41 8[�;oG 7@#0;ʓ'EP<>ӄi;ގ dKk\q|! R2S9 P+k^B,v4ϣt)D\<;ϳQ.T_;&aNVS8V t5k`8hdxd hNCZbAs`o2OSnzO x3h !D2h<?4f+YX]MOC3*%]d톁X?mI./Y 70 %D C#0giԺGN) KRf`T(  ,nM{_#~4Qv:MB=N?¤)j8Fg7 i J*4ͤ1xwq&U8aIsnp1<u=_ˤ1x6F:DDD+\gysV02, 'Aڔ`Ͻq~8/K&bǚguz?>MwSTNNKsIj}N<6JҶɎ!5 }Y^AvtB`g#�=W Y0ΎQc;;;R ge!vvOC؊/L<)fgGjxǚvAERIk/;;R =!Y`%ew봞WSXэh>�%>bkhn(tz $l4w+ ^Nh n@mPW;ESp;ƅ-^ os%][PN)R]4ĝ&5XnD7YZ}i۵;uS/\.OPK<X7A?20Xj/u`\nW]H}%ޫwDq ֑Gݠyi$#?46MVcm~6Lfק(hg@P-c6f`V8Hc+4uV:K ])H[T>gz*`vyZ}#Q+4ծH۬Y!Уfã+4uc+T A]m}f BC8͐PbW(JCPegYSA!hN[A M4)5ƠI#P0 {>˛^9hnQjS׫4m 2_bA9hgfܴ�u<P~ū4ajHԛߥs)k4}߹m[ #k4}#* _1貺6ٲ u_FS5i`e~V55[5^x}z1 F(l:rFեZX \ ..ۋЕ~�݊{i�B^EC uȵ ӣPa]t߄،?N0j %/ 4ЊzxWT/<4�liv�6�D3i%/M^j7O�lHuX iUDO `.wf`ѽD%~ݠ!xd.z;֞ݠxp ߴ`FLޕq~- GɈAl߇27h0l47@.hMߠ!X4/UCS0+lXq(yTbAVsCS03&fB`JI{hx9I=L4w`+ׇJXW4qg9XV|HE tw|Pn ?y#7{EBS^(06>pp M�kQ[-kh^m=bu- 6.WeCチ1V+^Ps$MJ!:؃ZTx)3)x!לL}P.nCDKy95iTp*^rj Z~PTFgܭK`LuOxjc#X4Hȸ2NN]$zUա0%Fp}�^@v|h}*6WP %F`75B[q_rh׿jF&N},6yuh V۹DJf;oAPqmSaplSߡZ�%Pz8 G*(9ݺ& J)PϮOcpc.;�Ecpxu7F78Lh B: DӝÍ=64et}2)$}.6AlײE4EL]oOj>ނGJ;CZA|YPچk4+|z6 Bߛ3qC aUXAqDRu}9FNN#p-$#vl 5Ni JALj,1,1FxoAӺ,100HgrvhCuTPEw"1X/XEiƋ%45j ,Ar_ VJBij:6,i 'ŒA4PntWTTS :W@ 4 އ @hu=}1 4o+{X@J:W~#ʘ,h'ڮE@32>}4 :Mߪq fEM]v%Z$֥?9] ?'4Ôh ?f)*fS͋FsСbDBnONCNO۰ ,6#Zwxm>YF#.rGoah& hܝN$<51>ufۘp; Ȼc8b- 14p1QN3iu3+98@H&kCN#0Po'~<4e#pagY3(3~O;Hc@?*hFnjhh} 9 Št5 ZŇק9XjbZ/7B17n@JԵihAcJ� k%+h ߾V254[�M#G%A&ׇ|yt(h 4e5!_ G Ig#AS餶럣.F݇Oz>*+{O|S1h\BњV惆 洭ocX4OfARPը%Sy6wk4~ Tns ql LdFҖ_r&3 [`$60; ;G7tĠn̰Q瓟l4IOKX 0ء)/(Ew4tӖI VlbB֩ƭ9Xܯ.|d $GffW)x/~( &bB fwWd�S7b1ˡI-} #"T>4p'TBϮl*gu}"d}_ Xx5jE#U_N "H-�MA@bjavtdCU(T|`'GzkQ zF'6, #}M T2 OQx# MI}lvWF)*1fGGjh߼"I/ ok啬>)VY|K^4ayz^4QΏ=gl47%oً  Wr/zWWa�L4!) )XtbfXڋ յh?9]h >H R '%] VL7i ,P|x7MAA}dfo+-oZק.A]&O6do⫛c_7ؐOg6([q mE4@Dy1#<\�@A]Gd3,ۛ&<rk`lJW ?@;;eX;FV^{R 3qEBP -4Ujd% dži@BL.)U XpU#[PoKףϯ9-l# .1L[hda.(4KӨۏhV^I|cw.c8گ4|:M9 Bq>4Mqlw}i锃JsX#<aVj36Aϊ[i_{utɱlACg ̮-V;oāib!Meެ lIG| %*/!qJl4+@op B<6{ᇐ:5$|dhtekhz:^ {:&amk |fMzvスQ4 pħWTtTY, FsЋ݉5vB%VDvQllG F2KQh F4>H (F4" @;Ӻ :O0_9t-` ~+ rb(1Y )r+EPlZg݁{5LU]?uE $6|4`\]WB1J͙¥l!X7T*PmMBΚۧ3;h DA]!*9{FZwtU481H~ģ~7<+۲S|n);hAC@Q:vV<�M}FI>S<_׿n53?$!C炪Zp1 A$BMh)ΰl >4S>4}Mt1RaiΡ uk_S؇ $-H/>�y_`';@M5beedjA+C#\פ,L ~ _Xj' @F3.>Hԣ&`mBU@b~F4oDA&, MjjP%Nuwm!`)x 뿵+ߍqH8`E =g1^IcZ]5",W86ԈBٵ=i";6"0WuS{0S#i-H<$0SԈ/_:+r}Hԅ/eSF-kv!ƻ;}q1Ӆrthg##uSd&wt9H-z'%C `"qi MF }g FH#hne'&7 {D -:eaC'JȢ!) Ս;<n~PESg<!z@Sb \ѧSAh @\ Y4KOs l8HgyA-nE#c-HH765651Y ‡itoTr FxH(hJD!ah3nPMC{cHՆ4%Ѧ7ѽv<iwlxVW @KiTX]JG|z&#BPi ~GO& 9FBQ27T=]b_Z\XVr)Cue=5!X9E̋~X:=99<@ͳ�w3X8T#N?!跧^O"4mmuuj iD~= +J3^LDCmiQ89ϊ㜣͇( A#YQb;!h~ԛTN'^CO DӍn?,G(Abb{Nas(A(tEy^KJ`=((Q>6`1iJb_Xbt#FSjФ~Ouehni^zX_^?CS]$XT84l6=FاEqiznfUVT Td`)F3aHxN 1ZDֺC tH63W # @X5yF瑘 4vb,L7i#UE KY^ f6>^xVl6!M~Qx#Dc5Z=bS-`|XBlYZ^^T>Uu)4fT/`=LAqlDbt!ACx @֦*AS:%7h<? nk[I{7ZJp>:_�u�ia>4a+*+zIh~?zlI<q rӡ6)Xv I'ph &eMoLM 뢇`B>T8͈i)F7YCc2mP8}46zWF@Yӯ>FM̵9H~K:R:4+s/+uM9xh'k#CqU`ĻS :^$A\~ÅWq4?1os(L& e&ӯD@Юl4ӄ$MA7@n7`fbl-IS"uNhL]P:ϵCpՊ3#~,m6 W2[-g<ͻz*^oJO󹴥C#xWy0;576ءhF'r_Ե?3c#lp.k8yvl:x xnHع>T|;7'Kcp-+3VV +@cp}ΏGu?mԥȴ*^[p<811=SESpoE* Dk/6!Cڨ;;3{v}{ct=}A-Jv} tJ Hu 1.jF`rqH~"i4E$=MCPz}4k?[Sz4kaoJ)X4�4X3A!jh\7MNp3}^MSPw@n0>XM*d 9Kq4t8Ơɂi}w:<BcP[5f+>!v>[�A5/yQ%b1kW ʪ*45׹NXc>nVQ1lP9)BcPa�t *(0Tux'eW+pv3BOa Q7FJSаwv<JSд_z@XNu( ARW8LUix3C )PUSf_͋T(w4 gǂtDfj?{.TεUi&g /OW}M(L=i�c2߱M@Htrb PQN&&^7F#v `��JӲ@GSX ;^)F۬Knsig5pFdcLձFSaEWKNero?b6j4n=Mj_³F!u! &G^1U1F]#vEiFŁDa4׊C\4vITGNc 8 @5vuN�k C3tU`TNuuNQ}Yɀ<k6RYf:MAL.ܴM#G )x]+P_!l%GA}s`D@ kujF4Ph <7=o9j <ǥH +A"nꁼu{Xn.7MBdXlM;pwC8D&!t, D x C0!qj,-Ʒ* z;mLoN^`kE_J#%uM$k^AMw:P?,<*RgD|ݱ'MAR72( !)wB.^h+%LwI5[1Tr!'ŃIcb^ݯzh~gcDڿ;I8&{[xn �IAk$킾y:g׿ai#΋Nb`gGz L 2egGj(<wV Yy ;;R @ 1#8QBo`*H-�hڀ)H- O{B7j#uiBz4wux<^G^!4jF5[41ӹu-[?Ecp[+^80(ۢ)X_'q̽l as}X!;|4ɮYNhbT)\!VhSovmOmX;KrQA ʗlb|0iu}9")T aOe:H)Yw|WZ 2ٴUvI" ʾM̡[6eUKRvNw)m\lJ.%OPkڼ_)cz̦ggӱx%l\Ug igܦLu^rWFs2n�nu)3p[9KndE=��> )H\ڒ}z?͖٢ 49ڽ2dn (Z6شzm "=.nl^_f >plx;vl7-FY]^f N'AYiX2g&(YnǪ-ƮbndfI̶ AyBúmɡSib[ [v- al#iۖh^ ~M#]*IؖH[kx 2-oUG8y2nm<=E=�1ۆ'EUz2TӓNeӬ ANSPe ܀!a&C b5͚n^^f(8:F[iLf:x=>#]d:+ AZ2 .`2qswS-u5!H~1CO#uVd S[+an߼L(tXHYCL`Rg.2cbrn㻾He ^xXl\`JV BENl51Oѷ(<]Q-sSqw.CIo[ }S-O1M 6謾儹 A6BuG# m&.S09U4kK:v>2?XD@� &WG9z27A A6 W jIva lP9񒦗LA:y%¯3�I ඏC wQh Ajżw.2i"Ӝ = xܹ2x8_Xثsn)3zEg~<@o2O,oښcۂ A8u>fԽ<o?JBlɭ4ILAv()2yS4>_e&S 'rl[A{}U.D4hZpdC-*,<g]Y;2/Wq2{N?<2*Amٔ#c*>1a*+ڑ1xy}6SA8g[ގ{Vu8CQm3V#SVLs[E;|}33\{v_+_EIḞա{T5<v pf:4¤sã*Aʋauf*gyIuf@d@0nVgFu qO@ԑ#ۨT܏ Ae*Wऺi x*[X|Ty[m">d "!\UU$b"6*>dֺb >dN 6}Qz3D(:CF|Ԃ{:He�kU$"KC͗_6 }m:^;T=˅8`;; pqЪ]E"Sw?V'SٜOk)%+SrUg]^lU?ĻO+/?foh7!m/>x^OԨRO·'s@Ҷ|)3p?4_3@f K}P ɐuolZ aKdnη| n �~Mw_2|Gwpo27{"8<iQ)W_9)qckv}ܗ~*}VW -6j>d"-=l~Z%{\2m`n-c|庆7pAǞ>d <GU@ vI1ɼe o�G6p(Ne  1[ ]v$(!3lW-SP1T?M9o?2Һ[S: )t5!7Q}pATcE(DS|2=;Xl֥Mlnn2Y]N9(eCCDz?r͆e7 ,ΡVk.sIu#x4?.s0늎av$>r1tsW3�xg6e 2Bò L�RI+s;u )'v&3..nTqL4e "ZEq8s92GdE@fۇ\ J*^fo- d fSk!Svk1mnjA{3}OZ<d f,A?7 )'+R'{!S*>{<6-fgKo۞)x@HBYl*DփC=1O654)x ^)ɵ) NqFT|nU$ebKTJ'}p=epĢ١RSSgꦖys}6<e'("?3 CR^)x拲͍@5G&pd }v1;)-~d REhe֠%|{vȏL' p[rɏ A$Z뗬-=Մ GT@P92/MkPFxinչ\+T.'e_[,`�eWl:7S58x4HP`ꔖ0>Ú_V^Sm״΍c{չ, h� و:83D>++T8[+ɪXwpů 98WCnw\scNvE[&hctd%. Z> ij ۻ AR]£wM�"*-[!Cp"U (!Cph4yFx{ח!8& xc3 jp�Ɛ)H >c5φb6, "qώŔ1HQ>c[Aܕby|ވ)ca)2lTCtC2 Ҙ2 y7{).YW+=F53BfxLxmk�\qگd oI Æ m|kv#@y|c,A<ɮc,;oaw'Xgd"@DV4@4gDOJ$@"e> #A[*d> U,2[?�!5Rg�MpA_*lh![- b{-CмFlVQAu˶flsM47M{d"m:͘6-6e "|24-c,vz?qlnդ }Xm[ LL &oLA% <ҽ0F1FQ*gK+LfN,wMd :eφTh{N+XDbH,A7L OW %16(DWP*L#*\x0jG- �'wl Aåphޅ PIILd 7|%.C؅ uOY)q.#U �s*IXU)B =*ٳ~2 թ' Anlbv;ue,N|m!p9׽/5�7 .0g1l]iEtaC @e5ߡ``4d&'3[[`:yv98I˻qyPao!pc#7S !!.E%%8o(G<E1VՍ x6߲y xJ%?~2�_H:=Y6@uN*hsMH'C;F_޽w0eb؅qlsk]iH;(SCŰv܀ݝX!u* A-2i" .O7.z S58260y @j߷$%J;[L@U,'9gtKG& +M̓02nzd�R::APEUy3ƄoPE�"<(|ڬŪ"XJ<pbVxvwN$](S͐zot.xD uR @WB8|mPGEYtf"I\"~((r<W"XMy&Nв{C&>D,^sx=s\HV_K.Af:E&M؝(te >-2' [�{ȉ!sp_`e䙯�[&uA3_ cpWw3м2)dUYŽry}L6ʚ ( z,C ;#A<2[>I O#D9d >VK?[Pvs \ L1~roNtL/&ѝŜ2;U,Bl| S~&SXs2񍯢5g"Am^N,4u郇O*�dlr�e՚4PS?\ܳ3,_& >= 7#4f1!Lmh1<nE( t\7~{"dmB@_]_^2zӿd8G>Oĭ�jj^fMsX�t`=`|w}hs4dQaw?z;r 4Zi&[FYc]2:8E#<8ܕr-C_Xq(�PnxV !ȓB˖HveҿT _-CGP-C&S6_Z-3йsT:>@mI2cWBp;[14(2xe!q{C�4);A9X&sK'D_ Fx(Gi*MSzLAfU0&8Mݼ2S=CJj{ \28 Ey9ljQ 0Y=.s0, %9Tο̦(,/6ͶmvI_%>2{9' cM$ QXe 3Sx-b.s ; j" |o21p)v"IR e"#q.DŽ& 7Ob)|]9 .kLdmOp.C!nZq2 )aHJV2*vy.eh79q+M&xx }:2)[IRbl{�FPLEKs2ϸrrD"2ϼU "A+GԺ 6Tx@<J|7@ ĪYkigd*VeKtLAf2e `0+-DJ_ hfwSph2tV sr<(C&nRp)XUȔ9xn6ve >"-L΢8Sj>n룲8ao>~N#cRc0e[N0}SqJzѕ#SQjhŻ?Gॱe.ɠ`KClZ4lRGn#hV+p>}bmTGGp}>ݢ]2 [@ES{,\<D48̳=>[Pp=3MeT'GM4ŵ ;{ RGp6 Oui\clj#X -1|+CخfRJye Y(*,sٰ3+cpYl"Nkw+S*Ռ@?#2Yu+`ie܈ΐ98}bBB4eIE39CtM)&3li!wYxZƩf; ڥti*3diJ0N누n79C H؋t۳X8C!\g\>5<}mѝ!Sp k"Î mfgaT#<2jT3?)SE$w 5I3e ߻|ˁ ^jvLEU]a5on22cYM4e"¨s1_3ܫV4ꉤevL-ln͟ӻt8 0gN{,/#Xs]_F 'WQ8Hmuu]ϒ8oANFemw* b0Gs2BȀJ74Y2޹-d>* yەd. ^iF{ח,%٢rA.dRΥ0YG+.~@TGtTΖ!hge@7C|A 2 y53C[A6 X%,v)*e߼2g { 9<Tֳ@Me :[" `IG-SŖh dz=Cv A7:dzL  wց|\fTdRFa3t%1d:cB]u"-zLf Q`]f�kU&!r1&0(\Va Ve?CxL`?g#sm܃d.rLF`,^T# `xdvdv+(#ZYE=m;`2lxIiq,�X U= |e"ߕ}O )`e28'W| /E*GfXtj�9:@*?{4{\f lլÃe ܅oӣmtsB`"-faX m#8%C 6*OwgӖ8>!S*ң:ʻ*/C0Wڦ5~dCFߢc\'"xbF&08dy됥 <^RÀ 2=]tblR:xfY=J@tӕy?)3|MY ADO<4[)4$G&wf629"^zEEC2VAXHʻ L?V&Bkb@|e^VR٬I}v(t ϑxYa\{tq{6Î ]Qr#>GFhjp9a {*fX]�`T̢}Zctѓ29穸kB0Yq,dϠerԉK *:=yz?Ta(h`W#X!Au`w\8 ^|F[#X@J՞!̪#X�crûGGԶ<Oݸ\i!`CFnT `vι2lۜ(8w�sfQo?b1Y2Yb'WnW9 Icۢ?%1ݥ{LI}\]C 2x<4!83+|@;6;d N< \D{f>x e1Fةʚ!b-@ R]؞`dkPlK^8~ µ�s:Ӽ2?ST( 9Q[NM%ċU8S&!(kԕS&!K (BTdyd"}/9rs4$9f*E9HfW(0enm*.nUN/Fu˗;e n;Uf(Z1-j� ?;#KSl7x>hѼkq 1&@B 7`|:A88Yo)]27GSO/cSs2U/~^Nd 9Nnl+%cEW!&^a.KƠb'GbIn戡M\}[ ~|fan++dbr۵[[Ȉ,do_On,?Wj1gppa[F [ÉC<h -#筴'E>2" ;TV,s Y[& 9+3^AoD>:5`05/{Z\M,Ec^zdG{~@gSV2ANk2i"0d6Dk2c @/Vm̾C.j|eM(*Fk2iͲiDBG L&`<moMo_ _@824/0jo)^r@.8{ e[[ `[gc.{:v٨Lij+~] ] o] rx# 8nutW-7.#0٪W[9n+2k:2yV`qǁGgV踅/]</ȲO-W[LSJ gR(:t}7dr&k-')?hސ xv-.[Lg"A93ٞ2�@㔁ßf2�O̵+ǹ)uORFb?W)3YظT6NS =�! BWLA@~zu%}o&Mg #@lU ӱK1xm&/MRqP D4=/#evw; Bk{&d26UGgyB0}+jL_6A`hTݲq)<wM.84<jvbqfG6X ND}S#\Uwř^W)"W>:fPbvonpx"-Nx˹1]!+`kmp.cw%gټ2'gC!li؁ͺ2W&d>Z�veg&R"=ϼۜse"-[C~ _eos~UG%fFm<"t$j٦: \Z2gO�hA/d NJ4_[|gz�e `dq{\_ nո#-k J ´ws2ـWf]X e-5Dl2hh2v]]? YÖCǷy6s~yǍrPgC+gB^?N" |Wo2PT⦏,u6q}+,]!xrX c2dٹ=)E^BY8qiєvBo[k,djn)#prd$X/pUOne H% zAȒ JVX٘5q}ԍj1< #p_*h 4eh�/dRUG(OFKf U =EGC8/S�g^8t@EƠW( |i- }[ q@ 4/cЮO=#f'{Mn>*I c2v(S�^ ݉ Φ cб UB;!ǖ1t[W戴AH|lM0N8D&c1JN o!vݞfv)/M/\ BVHAqs~4d2 ٔ�@@ܮ L@U$#zZ@,c߱"&s0,~Y&%N] 9 8%!Fhe "ܛl NjZ'x02 2VWK3 `8me@:<X6ꍭb2_ ="d\t4pe]U (zE#ewh2iTȋ/ i ̈}*y}7[º," H'},W{XL<7ggSVW t7.Lts,@#\Ueppў!c)xEfwrח1xVC!d >}/ qԺ>uM8e#c~2]Ț1K@d<98l&c)C;$qI&eNU  B_J)8% tۇRe)!VE٣P3+óv,2/08_Zȼu}wl~D0mo 3 g BaNtIS* pw  N9>lZ~qd<b֑ZARV1/Ao2SS]_{*R0+tsruhd]t't;k'YYp ;ퟒC##\x!yu}#/Ewv T@;_kTPF�R*Ygp)/ 9 KEёIOVģx #J]6;e ABT4V9 Ѣ6mnc| IDBEi$ݓ+pn[1^uT5M|߀A6eVzԸw!cjr�xgҍWC;` ͉_S[9ݨfW/-ZHi]Z)מCʮ,RQ{F<LEmS$ݵ< E5ӯӼ2MExs pRUA0z4GT,GVsȯ m)#p=r*EM٧<* t%K{J>@\EF2 |DMbN{a:/Cp׸݈]p 6ax{s{N ߬LϮ)#iUiJl%36[;D4~Qsn%#p#JB۰;KFQzBL@曕:y7 \2�mQBLٔVd( g}|x 4~ �1mdQpxwL !h+" [V*>@a1�˾zǣsѹe'Ջ `OT<k;c2Aq FjY% 6tLAmU[ 9W Vwvn>PXWYq-SЭW΂xLde 3/?!Pe11 ]cyAi!$TD'6v4tV%a5`LOpO9Ȏl+:Fb m',Dk}*6؉+YHkwN1l_oL 8�f4atX.$ů>dv]l (V^A.zx>x.ST2 22vYe b#hJ{b2{Mo"MQ2UMN�=; ca%nJmz 1H;BPSe ^pv<{."?.He &q _XfXg\e,n,8C`*eIo* ח)x Q� Dmϐ)xG8Da tľ' CnD!.IG7!C2*x6Q!7 eI2a2i&bZ�û+4Sf8gl+Ngu 368.سߌSfM8e^&ExXR2�/Mt*2�/BXc!�i~(*{l͏O 5Z'tfvda{Nm=)wkG| '4nIu~t-z~1yp`"ۢzS P(/򏾰T'F�*NsӃB^%, 3Y]Smﶫsk| 7:12xA=2yE{ٺ?C^SY݅ukAcT$)~Wशi%=LAv" O^!8"AL5#+C, ڴGI敌 )8gA! RA32gE$>@$kdś,d$ }kV? Slb2V#أyn}!sp _&3np�x˖Ww�_SdG(`/-2> za5d{1n: DQ݁clYHk$\ =omk$^w ߱ 5-֔Iʭ˱ �W LBWU| dRڍ2y2va ;Uk+f%))?Lp`b#cD_dxMhOe֔Av" ̌Z2Uz lR{ɭZ2p-d\GblGKFUhilΗ &LA9;[d d{ 1ΕB+NN c焆j*k+6yE |m�{\4*QK,];ˣ)LAd[xG'k<B~2\Qͬ~2E~ ĝ o/56iZ]^& opt :�Mo>֖ UQl+H`\dsėEP, __[0Qmke2dvª KkLƟǥ\_@|…)}6 d�"x��)'1ho.HM19{=^?Zise2W{�?6wf4 CBB|:#2#'\폆FOh ;VH6y2Bp4s(NHRqJFb޹=\.SQZEf\ y�bM2s]m?<:?6\`ϦAҙ\`:4lR뙛.c0T0#o r)w|H {O d &"ڜ珢l4JY?E*+d P+ m�d NfU}"I#oC|5BٷћV<To"!3ҕe|>dήV@?eliv,0wVg"es( 0?eF'1Q<+e=29E1$YG.+Ra(!jX #\)Tp9mtVAGKG)NU A-"e�ާZ,cI:2�/L[.+Ș,el^F3fTc}]?(s>SGF6 X,E}8ڞK�j`BoX`*Q&z P'Fp}/o�jG^�P_JV~w:2^LV+/)`HṐaH= �)V^W ew%u=tŽו98l^K�2K,7 s %x$pv$![fo+Svm 4ŮLA\\L/Cp6,8TUf�8ϬAtL-@f *Wq9 M~zCf o=!xչ S5/3pYikSw/#pU" Wܻwyt0*$;7^ seQa6DyvdW#w"8<9k!Sp\YI|aО2ބǞ2;?YE1 !BK&z 2_thſb=`dcw c>Իʀ_@Ƹ=en$ŜbQ-_Fe=gd #pZ^D!T2udCgdn4'=%3N1x dH%#ZЈsHBqI^2 !^2󭓡d a*"1!Y$AJȍ~`ţѻLA{|@pO~pX�d L[{493<5ow=lz[Fg{tjV3{Gqo?v32@|s)o[] R} s愽eR& Ω lt$a:N񁮋װw}0ammEm2OgL@y{(i@4mwOAU m m{6AM|L@J﷤C�dřr m H%$ +Hm ,6Mf`?h&30ҦW: Zv Ǫ4أ{" lH+4m)H}*]F`<ْ|ַ LzY!JreU yGX]_`vTUytg C[o +m!ts 0e5e f:hp'!s0}o:v \6Kw[rj7Ot<`Q`*uMg"*=&{ 9Xy[9x}J䌳>~A$d"]|<E,ȷC l3; l))xgR74+)SulË|0e R1lFv:2/~cѣmp b7^e髐PCg[Uw ׸_Gx;e ^ˊX<d^0^zmܦN׽&t.61 s"ԭFV%Pu1mҷ.Z>2~Pi1)Xo#cE 0P>㽍H1/Ս?f]RBUP1JVeXa34UFpJ/ gv3[)eonu^ G^TIwVEp}#{9ӾJ.}=CO*@M=9Gɲw)_ne3w龜U \sR?Wf>P(6U8)[^ >m[o_sG9£0px5BdM ^�Kyd Nq�jvLA${*7d[1[!CEE}'ܠɄ 42-L|!lCf  [6d. X r kڐT^؆xC{]6dWQ.bC&ь@6d-em]Igk>{} +H2^!D|) ֻ̾ޓrM}Ezo?(eS~TQEKMU2=|Y!})ǺEptDB `S»]W)p2JN /Ѳp2w]x@֖}*�B/9o ے}J1OEMd򬩨CU�[2 Ex-L0 3Acv ul RQ7)* 3ЬPao?X[2-|8܊ӽcK0)d*~ڇ!d (XtE#+ ^¶LAYW<TlFBA X_7ƶLAG[Hy^58 d #Q 0H1jO@ kE$4D8˫�Hq(z1G$RTo2bPgCyl2i+_0bmU%2mQ2f;I RW))K1)t.FerbzƛGf2m(LV<q3&30~K/d*\ӱ:p~ѽ>3HGs|^킜ӭܦi@>d 3Z'οכ/R';P5& JttC.sVU_|^qGϵ�D`Z԰轂.s <U(|;"9{T:k"B>22p8қse &Ƌ@+%l.cEN0mؗm223Gi #&L֞ )*- FB 8v,Zg{B ug1,^eҹȊdIjx./3ZUEBسx|3BfaS$ĸnjX <( \}aI iip_$L18z@ Vl#b-e)3ר\RHBCqҀOR#WZLDBd<2iWIR൹9hZ>+۟ k�v�vh�Vo2/L@qGEsCє1Ҭ4HbfS#cr:QdYh篮"ϧ^ «ټ"w@1ͥ"[. jd_NYhۿOH"R. t�f56(ٶ3uXYfοqھN0Y#Wca^dQٌ.Φ<U0;<ۃveN@(`\ƮL9K) *B<U+S_U Е84sLJ DӹtueNY^]Rcb6)k 3p&BJş}z՛l�>BA2_UTd|:6 #ZU)Z_vpѕ!#p&3 ӿs>d6c@2_lA_sr4ȇ̿en|\7UՇL)vבч�P% �E9tw}D*5"8ܮϨOHq3^|.S&F[ "C߭so2 z0{;8eU><v׳)3W/tՂ˱c|dg׭:5VWPs2yd ء2\7%MgSN*g )kr�جq�Nt%| v[Ey96omw_2fȂ7%SШfZ,Id %{_2)gU<l`v|4䏂(!”4}[dZ.{~P%CҾ348<w6|Wq4Oh׊pC Ի@gɻRE bS;ŷ@^!oFnoN%bb[u*-CYC)$& v(e:K7)[ G{))HbfbN*yX]ķLA*dj|Cskr[ڴhĪLRcש&cjΤ1 7n2c[/۸Y VdF~L =PpCbo� Dm/7a^M\ZI1A)"7BAŎAVy%Gh25n2#:KbHo#4q g~[vq𒪺 b \RKfve &6"K6.3[! `i5ٻ 1+;I53AK9=iyue=uV22bee"O\3 TZA0duޔ}-_gĞŸС~ A`;iYy;+*$ ѕ<d_l!C3?HH!L67)P{ZY)xj!S}N{<'`GO5YMf+ Z2/>"pzFf32p5J# {0mjr=%<e 6NeR �NQ F;m!ȳbd*2o䮚t�d^$څ.2c.ԻKAJ<-DGf 5+wΌƥsTQ`8"؟@�uV @{*EOd#c]-/`Yl,A\Ky,]?|L ~Q >Q#m*:,ԍE(k:,ٳ -8MCWE<D6!uVW?ѢΊ:+HaI~{Ε)hBX~w@gU:|ۍW +>~dd7= ``2e}o54ϻXnW& Nal`__zʦ]x]g2'QDB!łW vpG%Hb >kg21d.?)a2A٢$b \L4{զػ@0f?N!C"%UAbR'rz )sjZl EZ@2!#pеO&nsu(bҐbL 2n[Ɣ IacT0vfĔ )hZ9l|:{חw?x(J{xLt:CEc%d|-29, wbҋYCI&0e S}Hl)c%"0a͝V.Kcoǒ1hlB(ƆO|s2m;rd vv4|T"%Sx8mX2g4EFeFd ҇"12ebwkj)ƒ!H/q7o[R9 A{UGc#m29*E(^D"_bs\&LA'X 5(ۉLAnND]2}]ΥMr?ۣ[ lvhK/+ cПvBWfBo2=X}I:LABEq;?[ G -cm-cךּ; 9^Qd Ƙe$d~ /C082_+ ANg*%�t]lΆdd1.3�X͓0:5yv]0dsBA#.DGa2~˃�]@R8LMF`<zE&rUCd.˙sbXbTAe+gazOxWR7\ ހ镐Be{>c; S0ת4"Cuo.C07r\ xGer9#8Ͳ2żA>JQk S0)\bHT6 A$<cm J7ryU.C0/)D Xި~?JJG<&((d�>%b`>4gw$Gslo2S'0*ʩ] {JLV;i+b!#JJ2:z x S%"dϰ2YXz#2.Z=&e ^kqHT+#Mz! 70Wh/R%}(e wע2/jz2/R,DXd+{jLA 襹%"Ǵh>�y)CcCPGFl'3VAmݦV##^jv{<H`(dm99ymDo nF_ o@ Q߻V${+i{Dv-fyfdfחE$$FGxt߀#/fȈ5G6BIvVPh~Ec?YK`d>mH#:)^@0ڼ2gHO)LA|`VB^W{h+ i>Ǖ)HV-ҵv+SpjhoNNHFLAF6W<V=rWw}Q h9d.JV @ 4a-@ S݋H?ud.GC:ץS-@ uꪺ\,,L7's\VJnu;$rc&iC࢑Qfӷ cp!ߞUQ(X5{ח1lqPEM"/HNf58An_bDCdmCS }f*ݙk-VsW.|d n+X4k"۔NTa|sdWA%*KaޗP)Cp�5آ3p)HkS$?^ٜ2]Ci?,W*1YNMhb˓)I.&t˺d.cZU2@lܪzD9vl+@CW, ~u\2-ݲ{3/@f%Ϡ+A7|4@|͖9[%#j9r=[&#:6…tnlygnA`}Frt;qC-E&c[ L v+J:e:b]+/Hnnyoҏ\o=LAa;TͰjnGNZ?2qW/TX-<*AýHcO|,M!QnCY+h2ce95̤ ٌm@8<J)pOL@Yk;lAۮʪ"=5&SOVdcMOdz/%=j٤.o�4+jH_*{6)a5.W& \& >YGqns4s! ~Nş.#W%�mVqʯ:$֤Lէw3d RYh}<u7!cUA@ʐ1HwJu[D~X܉]J2k c}% 5%2 ]W{p5x/`֠2񯯆u 0'2)#jLP xrT331)#;+YgvH@ 4[2#-#OSf; t]LJYh/35)CY;pNS9jg##zҢj� .n*Ց,` Vltgud߷jD0?eL^ݪ hP9FΌ`巽%0wϢWqߣ?nk !YˉF#.8Am+C~fU �lOpeN|iUx\GO{9bC6Rfye>, ]^l!/9:2^dF+g�?RRye΃;_+CXu0W/ܷ+SpQ ݁ 9?<8CbE|~sNϐ1|y ks~pm:!co !cpQԴ8 enl/?C ^JTr.kK!S:^Pѓΐ)%=C 6Y lx>gݓ3d "_ qZmL`T!kϱP*yL.8�рGALͅߠz A|gŹIenjVvh})ޘރL@NEQpxe�lnE\�ŹLsan/{:g3P&5kVץ{?V)Cliqr?۫lݙяL@G5J[`\,+f4w@ ̹K_$]Qݳd ZdssA×SCg`x1b1*)ёΖ9{o�?ě؎CA*G,Ã'l|/3c;wCgt[67BBd "Ѩvc dް2W3]]e z7x<m1e :vJZBۻLAGY m$5e # aمdkM`p8Qa2N9qL >ː!Sm-c2c#٫:D] qo2v -*d `š31O@` ߭|fƸ J ./C0 ,6cE3bu[T vi?aA&C0^Fn1W:{o G9L p؆5hw%bMyRT)(x\`")/԰=6x\ Rɪf<ˆEaKC{Af23KYUL<La2YvFLʋg#moA.C +5L8ӌ*Z@J")ϻ H!W`9!CیJQͽH dR hkzBaW$\ dz!c`#^+9xҴdR*I_Od^&Y}>NDeݏMn(uR -_ʤA6TF#3/ 9МUeRuY5Oʛ'e^$E(֝>)c`,Gj<z0e >+x / fF2/oѤ-un"y/=%UFP;ET8h;.oVӣQ# ?`!{!ul RV-RK�+%5Y}HAA+V ӓGf;w}/:6rُU!+Kܷ�3^ a2 zu:]mseae3_W\sGUȃ"B9W)lq<aX/)W薤ْ̱ϗ89_x}8?> ]l¨1~!T2>(_v{*te"/]>lX!#pإ-ώ;d۪MZq./^CB]tHFU|Ԕ]^;^>!oETӬcVIo~2} NSڵ۬y @dňy!ލhVȑTe&G{,F'i$PtS;eg4( 揄]_& +/p'Sw 4fF7?Ý21.�P )Sp'N|N2Kοwd/WL�7ǣd{br }MiA¦2m.j!RS_޿%#Amh+U|e J%3ШoTSKFHl"-w 4S+"Xp@cj1 pۇLAi"™)>C Cb~$d-F6~0<~3@y?o>Ϫp)-N^)nJA: q]_FsЧM!1-3Ѝ-`/-#Н" 4~|秴no2ObtF}9ǻe�:%M#e�: NS@2,fgO5(�v8&30, ڝd[TCL* jcwrhi^)~Wu(6ftrL|mk2iV MѿfUkAogWMȠ쭑2sUX17oCj\#`sƤӭ޴.sNj1aweE.S0ZbǁOK}.snџD-v{SGLAJfVZf e o%"[LAd|f3s]Gk}@qMyZ z3ޜ5ܐx8[OG瓍v'Cf GyKI;.qC'U��2O,pHa VBFЬ LAy5lY /3 0(P@F4!#ޫ0(x4 #R<V"s?*pSe_T$v<MvM~n Z[QwN@ձYyP0Jݔ}k.K z(h</^ݽO0er -zO]TDSm@u֮8*g+ΊpΥ 1\oBPG1/3׻�kx�mgAqX׷9OY`@ "\O<w8+p|̰ HJ|vMRձTS#$qR׿bTj{#3{` >5>Z�dh;$v)_+?#fj6H]XIvhO+#ڕ40VqeK"W n?Wf # );FqOP Ux; DQ)K8U!Hi͊2K/HfO _X;`eդic >U CjXV3  CpiQ,@+uwx v;q}Aչqh6LA\}x ^r4l2YQlo솧ץ˵ )E`amL q<z{#d вȅ V}n2A* \7vI +iӈyjXh!.A�[_SƗ']SN>eeK9 mK} 7pt(WR[D z RR.a绁0 .Ln@Dh; Eoŭ|+(ؔ..NX^OP0ش59:ቺ@ `L#›4 0 fj<7WFAf IAtVH;n GHIQ5_Z*alz:Kۼͳ7 m+HyEtalېN(U?*a DE.e+e^O1*|,h.+N=z{i٘Etaj(Ĵ_s-|&-[n4|@K=lߐQzE𺼴T Բ{+n %0h̔YH0M$`DkqFY=a>N1GXa-p}[ApԞk XݵWQw0{28H@PS!p ]OU( L7o`jp"xfכ !pi->֫?06yMLu@paj\/'MûџJA"^K7P!�P8kan0B0N&SXa x&ݗ 0Bh`enz@u#q5/p.AV5LyP_k/9P_9MK +D-X% #Rklr&F@I5+ jn "b䢐#amHynES(+qh|hFAXW*<u ffK# !%)14V[NіFfc^N#@ 2iܧ^@@jLOaTckdx]F$!apQu̴40cgё'@14pU1[##3[ے8JE^FAƼ1N ^3Ks02jx,~?/G;|}15N@tnBr[?DEtm<eXȿ"~Ős܋R$:H,70U,ev{_OR fք#<G[8F$AL8F/ $0*]@P4<#P#a:aYygΊC nͲ8KMeMRa[]/)s:*Rz~�\OLo͋hs*�:N[a {nuEj_=9c`Q貍8ڠ;a,y5?p<_ۯ'%\=R.ut7FA25 (4]? -\ULX,=S%?-1g&Sbdc2 Ss `(a) om;?@j)1Y}7@fl%zxC 6tslRc`EYo3;XNVQW߁H40VlyՖXmA_5Xh@kߖZqtN﷜0@1!uӾQ"hj P+Q~kX#0 4Dw>M{ Scn3wQ^alyK$9Xqi\(\% ˬ:agn 6(2KPZc¹QaM-]>7F.FAdW:|H X ^!*Y=nk1 NF[kmhڜ4\fПt_!PAN6D\5J A Tr C`T=kZ2f|V*> a24tR9;jJnO1G0mL }c okZ&N5!e꥾AP{tWOy 0 b =Q*Y>[TҟMXKF竖q9¹QqnUj!, 7_m^ tQplː&嶚lQp~3[jlb%x- J,[ſK+sFkٽݴSc!|Uow= Z+Z- 0 e8LE=sbLm&{'F&r\} >/[;0έ,p82?廁0- ]*Xnxa4,rVwf"0c㾱+;-BtQXJi軁0.HHFU8 !f|-0nJk}`p e<+Ps@ZX-Y͖Gqqئݚo_ TL:@YnJkB@uTT%]a ` ǯu >0(f+QO.-h8)yqpbQEF&܇[N-0 n5 v`1ۂ3:i-VJT0N| r=pI`uyu+|fKM!3"P>2nEw;oYhAAOi/# ("U':7RP蒖/Vw2:7R92Zl)'<:7XzIFSq97%$�822qqŶ?V| '[IdsTzAjZA޹9ll@30&>}86HK_a ܬAԚ Rn y6YeѼ8(q0Ȥ5BKox˻A@F^KAF/0l.@x4dդ Jo0 !ꣀK*EC[() bp_Vw0t@g2[){/2iUywae~`0ժ1I}4|@L&q[!| HK bZm4+qxKs%q_". 5F:zKs%an1w)1Ii].9 -o<~'%QԿXd*N VrΙi:,)C`]=mDke$ua 2i7'[0�"iR @ax ku)@XV2ውﻁFV׎K?IuXn+% w&!�؂D䬕 C7:31)̰wUR(h+_ Z/R8s@B}2B à@` ۽^L2T:[taQ8ƄV}q7xGIjR"\a۬to}Xj?o(0 v꿥ZjJHJv!4c1"�}^a XLpY%A=~F,QX%o|0 he^VfqkAB]keqB@jnb ,0[78[u#o4gP8tOrA0yMNia\,B@T.ܥ!pi2uKNWpkf!pbnɋb`|Yg1 #:Yۥ!p6$Z ./ZzgX3@= tql?RIF)4D矯(0N!`7<R%J|J@J(CA-dBBM۝.=+CeG29w`14)TQw#̅FMVBυGXse17TRro{01҅ xz R,~)Ъ8`ApmpKGgct(S#nLaCR& ߶R% A6 ` QP0[h~"A}j|m 'RaGJ pj> t4+a TcH .F@mjخ1íL )haƆ.l0F<GGȟ 0B6UȀHnf@th*@81�)љ]+ cjhR-̈n@^fF m%j~x)4G{vDFtaCHR |XthD70UïXC#l,W>@#{k?<HϚ+4/:Û 6+J6b? 0f= f k;  ?F| ()б}L![n 9 eA0OS]QwTREv3Poy HМK Pi@PQN\+; %܍dL"TW>Q Xr*㷼?c`)*}ͷs1�v)6 y_SFkcZ]<57;0,IR-(VʊFr$,a Yu7yMaD,Ġ 2:;RSq&RxqaecmUa$ bxl5BMa za‡@0V\)GàX Bc P` ZIg0 ֞<F:r q* QP ck&%u:JuFr(X5n�a5 M/C0 "u^|^͓940?iӽ)r[sOk9%Vk ,RmKj `C=BZ.r@[oH `ŊD�a$6\~S% z^ ^aр(_9U 0 bPo%j `'#4:I]% o 睆ռZ0kΑyf.| ʕ 7b8 f`ARLfa J  Vo,V(W)Xabc}Mj._S54Ť#U8RzbGN赆1,+<Vk 4z3z V'[0)g4QW?0 9<Pk _L1-*7ia|f)iUʬ[!nFE`WZQ6zXiBjgIQO!"A&Vxk T68oYFYj6xQ[L %k$~5fFGP$6*Pֹzu ۓi~30O[]*;w$(8W5f y0*嶺Sc !Tԫ= r8U裈̍=zɖЉ$kgg1pfvJ*j3>*|XGRJdMrbla \vkԜ!�IjAp{哖xa\}=GEHA[a\|ʄr.0 ԬpskK;aoOtIQ'S0*mղ O_AJɚY)i0 bIPO^:(OfޜgPk (1Xg4)G6Ft^?t`k'NGg9;*"~miG?x[5)uݪ@gNJ)6#ҼC5:: 3~m DGGt,UrNklDzO( Rի�¦'jtrDן=%݋+&>1iȧ~]9 gktt*rhSZ0fzj 8A<պ%=YLLgraP^H: "Ā0 ڳQΉ(OFAd8MTr^V`RTLh! laS+ݨ ·o0 feDg*; R-! 0 *FV>3*wXQ[zဠ›0M-MJadoelq(hR:Z[ 0 T1bA˺[ `kAx1\n/-QaHɑ]sƂ-APuwoDxKa ,H�-.U]>:%/]-;Z NQhZ-g^ϱ�Hנ**MMz'N waTkڌċ2-!P/itb4l9D!Bgۂ9.ᅞUtwK)@Jq:c0gCaA )YstAHa &Ov_>.'nA sxWPJƽQ@ "TZOnaQ �ʦYݺAP?V#h/ȴPs;0 F| \z=wl]Ey/o% \xalؗׯd7ແ07P0d+2B|+aY[V6Ju Ȇ!bŜq&0 Ѷm6k^V8ػ>0J,)+ j;'&Wϓ Och0O`)l4}ތqPvf%5W;?#{`(5"+ C&a’} uieb~0 j'C囉n1 8|( Am2q c Bk *  @1P`J�iΥljbZ 𜳳?ZRݐ@j- ScL9@Z'S)T>|Vs !?#?;ZN ja V160<Jsi- p;[)+)8xH6ȋ+廁0n�T-άHi8zψq }<Fʗ 0N8yDgM!pu)5[# SF|Lfv}9av[bJS_a\(<5Ỏ�+~}:@HPAe?d%@m+4dRUgz>{m l+DT@ݵ0RPa ZԄ@otOIy0*N$ʻ -  `1ps 8ZJz7T+ 4&{v0f E<75f9f: R{k gq7$*'CZ^`a Rn3oI9hQ00ܦ-:4tǼ1:8KW̪EgFtL`(J@(:3RB۴EgF8$tEgFzdF(x,ZtdF6KL>g}770g%]sc}Nw{::2BI_][ u>gW&:2B-mC{u: R ~Bވm+LFY%aj] r~DVsV_yK;� UQRqƷKuFܓUFGT/"v�3!5)YWâ0�Y(`WBY<EM(Ռ䣛$�dbiխ#u*x$^ [ǧ0\|9!0RT<.v)JĠXI;\V&fĀaVDOa�TiC(:[=2"*U) e )?(S�DRDG n=&8pE3a\|a�Tg%!un7:!P_JBWt!|7,21%js;1 {]9W#AMw0*0 !ɩW9UX{O `-L# os\`Ɋs1R5ߥP ذ|4zRh s1q0>S.2p0&jDc)5AXFon@S&%ZVܕ@s[@.+061.eBcm/�0<oDz  ۊA2&� OUJt4DP}%Z4VC㢽!f p/a4RB>5ʳap)^ \jnAN@lV&'\kf&>[|(P0Howad2b+0NU{ ꇌ1Mo5k` N} F (ZE{`0 fDDBkv6dz =pdb(߽ (8oMhad'U)+[8@jcٔ-د1UBa~dɇ)[pZXR6)d790 N̷e~kc- v+QGz ङb"JPhqpne$k)H ΁AV(c!EzVc`"c˿>aK_`Y,=NA(#<)' 0 .܌Xdj/rCzà~6!I&e8aapY0QR3oUaPюea|Ia\4-p V6XE# K1Q%gYzApuoH $#RW-P.B|�8�Њ5}֒r:W@1-ݎ>KX19_0<T'F@A)\@a>F]٘7Fwf% CTLR즨- \VIBȾ{  )~>0xxED+3 uʙIO) KFQB@RZ\/ NJv¼2褈nBЧ9*泽I�:~tAZI褈O*dHrzNƴB1}?.}7P7ҩrEV e"ze8=:)2"Yi& LuL-Kd;Q/9O a0gSrA9)'K=9@QǩT `"̬�פYZamPSN®a <!F,"hSaÔEP a;N.aA()bn F{h0 }pRBޢaAϰ#_Z '" !.BVbz:fw f 'CHN@vD-,"Ha, u=祀ȉ#QmdMn&) ݩ#029@2�23V(1R^S(n46R[`*e~ԶGާ*\s#A ɩ%Bo8>R}cl2#A*ީG`GuFDz7FA 0P!<)g{`0 i~lg]Zaht:>W}@+b~VhT"'ct0 6<FYf)Dz/+(w6#8`8k#Q2 bY]?xTZD>ks4rQ=ȿ&i;JɢMeB�Yk0 -u#M}A -5(adY3h_k .,alAFGbBޔx0R1udm2JКBX܅aL)Vc~jmxB4c J)(7JrZMŠ{ku}q3 )+* 3QUeiv6j *Ed_׷"! 5 M O߿ճ5 8zxסu؝ X#?XSù F@m/cu;gWUwm僨SпH29lF&@.%hQtZގVߦ HYia䜫> 0)|p&S!K'97Z_[�8vFx}k15GNSJ!h܀a��U@g3%] -rJBySk1luF9d*dR57z'{ (bך=seuRyzwGCBͰ7=gȲۙ= +g^K=xcYMH�T z!pс݆Q @h8o\Po0/`DA 3@H8AP-"4F 0fWU.ᬉ0 Dzu=o'ڨm DfM#܌FA Be{VpyàִT\󷺰 9075cK a=FopFw/f5o%00GIf }[zΠ9f*鷄} Cr]ױx|^oGXz .nt8:7@\Zf[ `_z`qDFtssSHg6:42U ,eR-Јn�4\=N$؈NЛc\8rѩ[�dTÈ˒ԛiV2с]|WP1%VOc0@C&mtX" `l Ͷzci0Ʀ c`t74׾{hg0ZJ>JP6sD{;``Y ]w; yTkџ&g旗ЁKaT ej0jX c0vbvUocjq㌊MUXN0X)XPgtw-!*SpFA-q "` Y-FcOM;�9 a<chJ?W}50X)[.*dA4S FksJ2ShF4Ta8`knRW|ڑAEݦcx{0 ڬFڝu~kkV ԛ)HV2s+rϰ|23! t|fȡ:^,U ! s7<F]> PaC }V̀4z 3-ak?$GY9 k1HC �ּҙF 0©1 "4+h )>YfJRC7=۫<KYv79턋VR H |1%Y ǔf 'ʻ[9`0ͱ彴"q,a V3|C�ުF)ߓjސsds0anQR\1kU}'I. F}Gt#gX w7"mAAom37r0l-|z"IY(n%{n[0  0\:"?ӹ(8l\H9#F1/ pJJFa(81}b9[0a=𗚐a 9#׃/J??[gdڕto-1CQ2wwICW.Dk8[V1p$`t>/ #upb- ;W։ag\ΈCиk~'Cr0N"-CU;aVx\EW a ԃYݟczFnFI(6ÉzWִL|d{0bI2%ˏQ QpiCIՖsA%5|ށ(Jk'0(ZƬabF^ Jⵘ# K0qBǭe8G` '$30D)ו [ԫ^3G5c`*'euFwVkL^iF  s0͚):{0B5!<xMl8  c0ֲyޜa܋Aި8(^9 H^YWkI?&_o�"m^ri@Y_W0P*; ߀=##^3-KUс� ]?G_g G)^ eDW@fFFtcUV3:0h#Sh]2|:әx;?C#67?( t0#׭m ݝYa <|dt om a>HcD# f+`\=Ў˜Do48zdCP]z􍠛wdb0ɀy;Jgxh]/"a!d_58enFvR s07RT�9wȖHMρshQPwg(LPhQ.kl1" 0l-18P*0xP降;aKJaD+ ޻4+A<~+Y) e8~>z^^ XV]yy![F"9_.(XKX B(ORX) ̭50=+.9RkKVR^0LKc+A4:Dxꗮќzv+Abmh KrLQ'[?qa ʨK%r^+!"nD>0"k$[+1˨ɸ<)]+8@2Am\JZH45WQhFa06b R"K P;a$˯=!AF ,M!,J_rY% tP&-P(S*"N˫QTQ:#!lT jؾ/,a6aFؚB!? ʒf‘p9묳I>cS};_@ҭbȴnAƧjuZGFkTekyjW#_ )yV c`mNynQU dᲄu |_ C,vBqFA A]Cw#jG&c7>½j& w ֫aptSܛOEK apooȔQ;o 0 iPX(8"apY,mh;F9HH2QQ2^</uOGEƷ [jZTjaTi: GW .u'4,(Ok5lj)ZgT=O8 LO]=J4lRce@!)W^ IˈjB۫!̚@Gn&,Xonzq@0d}#಴Yۿsș0K s+90z" _q;f#ReC*OG9�`PW %y3|F�V_gfw0d~�&9# 㷦#.Ju]=*a ܭcK d1P'NgMs@gpAp#~)a @)g2gd$I@Zr{EGF1QFOk_q'DgFt0 !-6G  ^^Jj El{ZV1ݤZSpEGFi~,Kӷⵟ֐vBXсE,AD!c`'lWt`D7@(`+c2ZсǞ/Vsj܆Aa̹Z(ī/ T\ `.F=n `g~gykAPժ !mmD#~] o#~ vm6<3bv3F(1IXsܬF YmO۾ uiLPk Wb0ҿGJFrQ</cskqP{[Z2kqPqgh0nJ4t*_hMa tearxл w `9U7m/NYŝ8z,ߺRxx02 ,㝯p~0֤l c%Na| !x''w `E@m?n `}OwyaB"qם(XS({Su)pä́DQ O9 ''FFQtp0 "ݺTuqq+?;;׿?oNW+5]?PQ?>5O2~LU(34'3ept.4š/-.G#Zw$o@C]/kZɺol6ϔl~Z"93OCCz\/<2_ E،Tׯn+1r ? cBw^ |yp W YdV?9ΙFSPď(h&X@0tD'G).1:DW[FEIg1q-U%'*z==_cHꯖlcBM/%f'{%?&>esϬG5VU<rϿ{&OݙhV  @O˧'/M)IPzۯz5vf]M&:}De h)j3(0\u?!CG* 1Rë~0;xr d :FPwyhu}^GuBolz_rzX zu?;|yBώ>G5r]UUFO1/G;*oC5\`p<dtMV<+sSS5GNcϓ,C}Zy;^+Ϸ0ϸcjj{2; 3[@TD4؟_A%yȔYEQϪUSBywrVRCUʑQ1ɕCyY DGy׹B_Oyȵ -I `C(Ӄ`Q82:5_= ,vfI;cVܟ" Z ;MOl ^ sp{>$tN޾JHl):-WأeY)<#ˉgv&G\8y;cB]:-z E<=^^7|/Q{8k}s X$m: `1;~QSڣjJ4,u=!n) ~o:'H#>tYУ:&πEkkC>.l㼨V47K[za6V4vxMggiV4䞷q޿~c;$i *mε j?W>~w]qΫS!N�.B}ޏϤ;~pEj9]Ѷ_:_6}ϦΈ1*35ecZ^16m<gQMG#CK#^DP&8,&osBf%6CIg&ΤfA:쯨u% $g|8\hhkK+D R w]~&(b@3M%C[ނ\gjpNJEƒ"=sPjz+%iQf|;9Dop_~%AϢ+=#lINp~R)�^]aÕ<y.yc+hG'd+J p)ڜxX]UUِlOM[ (dNC޻ XJ'};/!c4^~aArzj5Hu*F\[{]ՎIK\C'iސT/zb /Š|,i1](DqSJ=S^ |E]d׎.RŽ/�8km "BG4*q  IDbg-^'`8]3\0y!HWЋmcTxdhgrǯPXŒ!6$c?jxz<Qh׷QBdUS0;T/`0tW荒^:"ߵdzj̳M]%{,pF'5IsÒ% <�U7Rn'V/DT}HIWS^5gDFd燢N5A77NjgYk{%# vWl5 _ױ[j6MtmJۊ�w!QWXz !+mb< ^ wN0%W1lbZ[PA9$; άg3E+69 }ϛK$E:_oR nr hKa&ĂtѶ~[0nWx"{ӶIQ\)N(F[ U Dq|]ʾu8\[NW^V;C,hLZK;&lGlRrd=^I7}31PdTK[.wt'&B~sm'8NkP(:ΓXS(b[�&'& qv U-$>8CkDqvs3cB5>Rz%u&R)KZmbn罖/׆-U9X#\?rD}mWe0t'FhBAԾ3N!IJ7UǏxsé0=-zMׯ[h%Y~SKVSX7 E z ʾ]IMW$wd†*-"כּ"etC6 2(Qu +o`ԾBhq?PݢC qͻ!`H 773d$ fW5b@QwGB]!Նk~)R"Z>8 ]wOZWOj­(QdEOswwUЊ( 4 J]AK C;l-&<(v{Н[0Z\sd:2=Nd[tSY껠?o*"Z] g6:g˵޴i7(aoP$sÜ :4 |ǩv2;ly/"2L'G9)Gr-56ެϝ6~e} ͣ<k,uC5UZ}3^02gСHiIL"!)tꆴr#{)4ue3ZώgfnPi]'$KQXO$^Z8hOZWo_4�=F7f!ЧQ2ʑ]DYwĈ|d< (`̓b@lh1)}PR+陃 ~g5}eݧ/xt.jǹV{^)L` Q/0n'F\Mz:*Z4+ݕ)HL|>2hw=SjͫRUK\418(ptZX`p'xQ6>tt꼲S5_ xK>CIU:1;|%px]Hv[ BWZqV'13%~TdNThw {R ! }+ZHn+zQp-ڇ3f }N dS*7eFkY*:DN}A3y,}2�CXtho5%Y4"=ow71%L[6QU;zUK& Oʳ|"{AF]yw`衖7h?BЏxWv\|ENդ"QB*Wx`&XBqr.v& ʜwkW˩]= LKi "W1CC\iâلZoR@ c[y+�aQL1:m/'aapn7L`R)1( =BkV)k2'Q1uyդHI$gP/ZS׵� M-lҜ1�K"PI!Mibׯ;x%i]ާ=7<�<2=d? UO4oYQ g|5n="A/T[)*#g8"Qu]>9FWFrY΂* =;oiJEN#7+Bɉgby5z,wED p7,~]V~. R+eZ & ydBB?qIUjL4J/)Ay~B;wz43pOvwWLB^2~SaTMͩ #r]e|n:oz82N0}% |r-N*V b^]_E}wL4h]ɣbTF~>N'&S�P#;[8}=(҂`.oP:ƉȾM[I( ^ڱJVӕY9R삨xѭv?|G: %rq^lk;ϻSFhH_!'C[WJ2vE| r!/kavKǦ "IW)S EI6ih^"zOw7~OM\nxy$C&V$Cg8O(<&*$xUN53Y_a@!k`cfkR勬W7a>=)3$ ?+/s8WW+B {E^uxMAyGfzzR]Yo@8&!]ygwex"J No/ &W_~u2S o Bfԥ:Jy&2aڑ]eB`M4‰Tcu8@P̗96IfC`g̛O|M/1Q J=?OJ$ @!W׏SL=L|tn13~ J`LQ(cc\,"zQU@K0QiW7n89c7 >5Tux(<se]o;+7Wyk<3E '0BGgXcũ]UBzy)"lft%sfB^ &'$�,)bh#ruZ,Dw9`P*½'!~'`k{.xJyrBi֛bՔ8v}` XWظ5<zfBMЊ io0V믫`Ől>|Iڋ0<]2fхFCJ/ny p}7 v/f4EJ"VgDu<vW8ܧwwI:rW6z^ nNή8p6 vӠ_u\02틖+ȱ)jW>Q_~'fߑ7BWnjEktSO.Н?Nn47!UUVQʺ QB nR^3ۻһ!4PxSb0yʄB0?6ʲAޡ<+Ӈԫ}zLTp8775A5dp7E0~`ڠD+S2c׎ʼnD`|$ } (/~vf|tv.R8~Ei}=߳Ƥt=xO] ߻T1# ZU!~pm\?kRY,' q,}((4 c]_8`h(Wt_mq(%g7?=0a€ ʾB;Z< Ñ_S̹@)< jg)#Wu^4~rn{ [~3'&)fIs}I%0dhiOPyvx0`\#!oF|7.0scFXe<QHRbU`ZJ1ʐaܶlNW 3R&㨟׫FʢNat> vM)\w^~6;UHTNQPZbĆiiЯrH2ѕ"##g[WT+j9o^sk`匩9c7:f t-Se'W.G@~q}`>K?Fgz̔d>󋛡BV(_̙pXzo2(ֶ47(7\v!ςiJ0}!&$}i1lɋڕWą^??XH*寚6Z@C2(ȍ-H1΋gEJV҄.okl%67ӻzn'wJx}vy~Z<<�Mz;<mXAcTs ɅGd:,FX /I=-vۙ]e pZ\SL낼M"f%6S~( -bW|O雷>]'(Dt7tVSӿ:,1J`V5}~->P@#)b{<g2X$Y_;_ToV!H^Z2Z+ySi-j>_z4D)ob"$D2rvpq.ſnR\73ckBud:*= f yΎy^JYoWШ0JB`eڇ C(/0:@߅NuasډkC`9UU>Gf,r#R4"w h_QV`0kSғ@7pkPqQVf6cVgRFy{EGֿhb3o>q+I}󋔳 ~x!N9P�Bh]tzFTeHUh\% Fͽ~mjJm W_h{""w7`6Hs} Gd&:wVGT ~3&9Z> y Ex@Ƿ>_9[cw5L +W6:>މR+UbݜN3Jr=3`T>J$j{'St5K;ZB z;Auv0˝ayQ0`dytv{xzD=AQʇM|+L8,?e֡q|13 @AZWtXDǾ=}pI+`.#Prc2\`r:zmBґnGz\`y<98s^VP!$NePɯHOY= 5ް:/o$|h _f/iMC^by%45ȭss"ZaU>wF$_ϛ/vB!qkX5sR'Hx1q[QD5I/p]q ߃*zֿK}m6XkoNN2f]{S<9!Ζd=GNC;hZZ 9@ї:?X^t:r|,(JC2Յa1t6]e:npCAzxɗ[W^__Ij:#:K$Lhy.3>A%ک:-Ԅ^z):"֮ʾWPyQ`}׼ub@yt�3n^MmI>uHdNl874 P!< c(]7�jF3qy6U�T?꤬Ȓ_/ %uww&c9 8QAW,whRVo,{L qwcB1>l%7a?D*bo/NI ^E+{TӟJöqo.Y EЬrϚa`c:]3yKi)hI^y8֝D>_ʹÿs'߼[u'qW;^HRGXh;:pMt̛Pk{iW-dQ#FVo]c&-2ѐQוV߽t{ E͈%?ոP�5L']uh:^<!021vO}fY1{eͣfz3_ZW};}\TG IP|~)dgS8.:?m`: t߮q>6S=]ü%Ӭc!i!6}z:e<^[#*M:oJ;ANF:�gc1#tsTEV 5_mXS!]f[9f䴇 W^2:Gh^UĔ3@&zvW\s >_GՑqꖑoSN4 ޺s\N7A(#VP :;~ bk_#=.` E͡=+޳;Џ @jz P\A<ʁp*<kG,M\ڮpL fwp w'|7v]bA$CMgVݠF0nH P{>Nh.G wNz0nq;#ϝboh >$StYux_&O _rmVc~j5s(v}[ +譔;gKV\:$)$1UStuu^h~3Un׊#s_c*O-V/Kraf/icDm Fs=saDu?gZpIaZV:q=[s4fxH> B-'e2r]/FuUe>2n?mVһSEڮEΞzL^ ]zT^乬RAc3ykã{$dPnܟ!Fa~L'Tt:f ҅M%TGjpޙxݱ/ �.Ow r1w/O|<m}_@: y`" {_n8:Vb4F3*(O۹m0}n9~DH U]Q«ľ\X7 j2~X7w\gj}!D�0iIאe8n 3qy?Cg¼D]Aڸ� IJ>;<U~QxҠcnc$@o_/EswN]YQZQO'YV׃jԟ׍Eؾ~ +s^9{5;'ιc|p=k}o5 A B a< 72{Ab %hVAHGZW0"el覟ӋWp܊g`#m8EƨMz)U+[oސ =FCFCh!kX7(~W^f2i++iɠ5iRqH)<ӛ�ձ*?eOTm8C:306CLzmD@p'z?EVq=!ߋ/6Ok)N|.KL7ĞodxU#r6fN3)ϰ6k\:ԧJF|Ҁ_NϙZB#BVIJ3m<KTH*Q?XA؎~kR]S`3 c6=d|_D)~m:>s 3;0K!{`2fs8,[?G`%ͧ@"]>Yߞ%jH?u+4ӃyS08Ը03[_OuMĞ*]yS"wa.// |_.؉(FHӀua Sk8WG9�Z(4 V`ߦ ]72O0й!9+wU󸁢'zU5s LcKx]n{\8}l._C,.ת9$a@!5w91OÒxnuMJH@&7uzm:i[d Ox@6j՗C{PHR۱ezF;B(@THMQˏZN:s r_NG>xv5 @)bKT[χ{S;s1`h~AG'r,t[(SQSF g%BA_~Ew~~oԎ+x=)h*a[__ul5~|{6iy0#Lޣzʁ)MzgFN=Jxt2pR\V7>ST* 4Q&N6nk} AnAF;U{{)P<߯_L0:oQWp5V I Iwɡ*O;aeyx^F~B+l4;nj"ԷTtѻ<6,wZ?%V}*;$<(^â ƑۺIB]qNYX\%u^J fWLVгT�@ -w/ n|"t=@ʳqw$@BŁy.04sn ϋ8^@g�&™(@ _t-_||j~M"6om5bfazI˼~>"6 �Ѩo 9JLa]/Y9ϖi((a?;b'"_f7Nnj0!\(ބ u.@M5DwBٮ(_FRH"j/= <b$ga1tR^) 'ҼZɰ~  rF~ӮÊxeyAAi% &q⬣o8%;NgC%~髫/Kdk{ܯz[XJ?-EGt*ybzR PG'(|npB/=4VD⫚0{A>^;or~*:8FO5ʂ7vǐ<"x&IJ~{0a^Rg<ڿJp B<5~<v'GF 2[~SY= 6wKf7tswEB8TRFx֘)g{x> >0ʺ 3q@oJktNmG f=_`v2zfәmn+ʚ)m((jGD\,U4ƥyܳpX$2JBƷFM"כc O,Rq [o^+2bqO}T&)^xu(| ^K-ǡZw?>fQT"Cթ^9'G%ɘ" #I=Z<\ agCAMt4:&=sgksC^oJyƛH2.3{_E?%KwNŎwL_w{(]O r9̴BSx`^5:!N~x#B1sJ zb"-2~R9(vRt>QͺG~ qx}{`8wYG#PDu]?MjDLbF~NC_*a HQ.Xo% bwG+1&#'f("yʈk:Lt+T(F>`"�Q'f%3}'RU?u&�C<j.bFΙQ y&l{ߵ6*c�VyG喍T`CW$\9L| T&Uߵ~Osxd>[yo rr$iX[(@xsbzGmJl9CX �V`^[yu:M \+#Y{^sUj=2jN(FכI?Qi=~=Y:V {쌿wgKx2P!%̼Λz_x[lq EizY  0/+SX"gtڭ}Ҽ du`w/^/jߏ[ʙ v|Ze YꙜ?̶^3RbW)y?ΈI=+< |@/g_CgRyaV{#TF٠V9^`i;Q}k#ЖE~loIK{>[.͵VEA6 Q9&>ڐ/SKjwKACHlm1FG; V\;:U6fwGOS3߀YaߜfprYy Vz 7:ҫW2A$!<NZ5W+]0E:V#܃t,ivQo4kWyG%ǩ%{T,JPc,̍ϴOdzIN2_;},E3or6ϹRqwT?iH>DtyW n!)Z7 ;OcVc|N/ua *tet_:8IKQ_P>`>'HY1}C.#|MNq:~;°x2q ߶Î"dcnga*&9weɖTr]] ꫡ $:'M_Cwe'^ă‹$=gfVAݶ~V%k}!'agDi./s&i5ʴа8k~ ɹ JOt9�im6$ydʆnWI| Y+# ʈ"H4(B5%9zq CZQ ~~'Ua:5pgG9^я OJ@kg`R1MMy +3nd{3^h: WQŀ#+-0F!@(Yo6nve1vx /BRK2(#eG ,oPyL!lM q%>3z;;i\y8@AXgvO0I;=>Kb8xFsͿz$hZ GG"ɨW&{(e[s֯uqЛF(ԆYLA(_"u :$(I]%_ſMOeﰵR_TI)A~|GΎ2h$[*~+(k|_w1ğAs۰_mj=W +Š1EV/0y.e 46~^yHI;pRE 3!=Ld%ԻIbgJ0_eȷ2}+ēsr~Qg0`tOm񎎰0x#T !]N5'G$J` K24Ȃc;*{׌ D'W_$!_{27s?lM%7Xg%fTBqõp|ΛMlhȚ~=b8/gNr/|i"@҈k/Wv,y}`fg_d?I%Ɋ> ߔ$GV6ۿ-l <y 4Sg~WA?i?v[ K- Eڂ`IsC\TD(s(tF;5Q&a#K0 dˆcM_P_)?f=a\ 0,K*?SBchqbSZ#`M (-y}D4@xɂ&<*s$Ca%OGV<d%}pEM҆]SAu2u<j=*^T@D8'SK{VWpDNb|ux$,=~/$ªw嵱Zh0,mpԱQI|$3G _k_yI63�R'(>$2Ma)9У+#_(~8ZHv-pe|5w3hVf~AU'^!Vkk9=Ni͢xbܷ׿$ڎs T*9ct CJ��)92iqSȈRj/1;MAML8s&' Va>�=%$q~=O(E�忿𳌹Sz\LFk-7lb!6?;>d1*Ü#r 9dWWe39 YbܒKS.d{hlP剀_uLО.8˚Gl_ˎZ?�8k)\&<|$x>x?0;Tx3ܿO ""Wޚ g" C=jEBR8JY3WꩳP4T@ߟ$k2P3 eevBa3ϰ/(N~VHSHu>Ӕ2dodiĽ>Z9Y / EzMnioN|ڃ1`Kv'eN3~1aC ?Ú~T_rC|XA{~Kƈ]I;Hghq[ubHe=EcZJn9ƪ'(;5Idn#ǏpeYQC8xL9=.xpL!`>qn2|<pZ#o2|hI޹.&9I”~'?O2^>,3D<6 VG8.#2}{S<20{?pf1c$'JجQl N~gRΌ_8sICCnX2aG4!5IA\u'4JsP*dTT$0Qt#~ΞGбJa_,->ʧ,2:vT=LrW:GEg-NP紈wn8;o_هN]o{ $sQ7PF--}F `*eh3ge Kvs՟ |~DknLR[wIU$<5m߿)i 㴝qM.rB(T̓fV0n ǯ+$񋷯Q?-ԣ\Q/"/d(eBZceHY$J HJ6swCS~Ec)Oy ErIںd@O![S'!V n(fPSf6>=## $DkD' D)eԹbWel~ ʸ]~ll@N g=ϯ6< qxΏžNZbݨ7�GF?d2(,ҡt3,qux "�B|5I: ]#BGd:sP{"|WcԖXIE- AI[Hbޘ[A5~=H% 6%Ci\"z,<TvbC- %~- :G..89w"E p0=_s6f4K&UOC3d+7dCّQe:.OokIfowO A;V?%] :Fz\z~ϘXN�lZjLXH6SwN_{$`ĊHD)`yOQM}PoǾ(iA el7Zƃ&,,ʂ)5.KS5{l\[cSL0>ML56Cɼ;h җw8&~mc0toLM;%Pd#m$'WwRc?BE^Cl7FT/M".hf B݆(w+vYFr,x ⩜;3sY-ZApn(!}b*#_f2"xTnx1b~%Ɍ2!ɴo%¿'nX.+:jZR8ߣaetJyƤ{iCd`9pKj,ŞPԢ/jN.e, T¿Ad,{ـa I @0': 3181q븂f68X?^ +#8Ϟd\LkVI&T fq1"(g/>akDHq`a�{|sbRaCLT$F rj!@#8�~`|.w?Qt\_$&n[b"-c[RYXك!sX'N;/\EJ=_H &0u#{ ſ p窨uZ3&F [3Z:>ђ]ܛh4�qV+F"ޟ"dǡ=/@ΆEgsR2" Z7\NZ4yn.,Zۈ6@8=f eFIf4=LUOc.A[ZKAa@RϛhR !ozI�Nvq}әMhXa@̅ *긤'~Ja#(A8U2o./ex;5ID5]L\JvF3[N,WWdiY1&Y#ۓ;Q[�'GﯧqrSHACg6OrFTtäQi /d«U5!Hqլ9 +,'3{9xťg�ޏlC79R;ԙ, n8_.?Ld;'(aP]5L| 5Oҕ;UYG`Peݏ]jzwNNqFH8L�D,-tH7 Vfc҅\DC'CZBF>.P`@8Vэ;dʨXa}X2tx)(7â�7XYTϠ0>jh5 -BH=ԙˢb*NoZkhfAKvj)7v~Bʚ <:j&#Iaq>FbRŬz͞]o6q%+3NzS3_B1ߧgӬDIcl<LK6ggTn/[9J+=:BiObs)2@F-;O'vKSD芓� C˪&H RX9bVWE{`~3K8@O |B |tar0Mpo*9uЁ$(e"aD䘘B)5B~5N T�sqZnl"c2l@HUpXIԮj@@Uĩ;b]ђ#s:쬴DHǒ@(2VpW |Z%#q|6J$!+/؆*UǕ}-'hN='E~K�!ϳƁR1< \Z '+;jas  ԉk:\`�4F-5[ 30}V7 )� [%QaKښܢc<Q%[e_wOn% a ;Thfd}Qav�BcMlokB<)MBKS,'T]pM&sd&Q\]vj ũ>@x1ޅr4Nl9Wrд8YLzk84tALnUUg:a6g|c^n55烑D{!_qҥvyGMϸ ! :Ӣ@VR0<bl?S#㰞_=3^b=bIPYQ j3IV8eD | Ő,@T7K&ؙ$I)a,3>3Ȣ^uE#:^R1ApwqtJRq|-g`.amJؖ91Jo1 c")59.%] v)?T[b*ND\ncR#$|I.~PLُwmЙY5DB&U'u3,_R2,džIn9.{yki>P͞I{ Q3riI8%U( L92hZ�dcq�opEs?> ЭɆqfpvS {nL3Uc8!nTga\>f,4$; .N˰dnj+QYq]�j6ނ_sE).\=]N¸/ 1Π<-hTĎ죎bݒHq~9ge?^e9p[a\d 5w;#9Ճ 6ҿO&n(ںahxZ|2̩LbGwuT/>X>Lr3]kk va2OQmeNLѢ?I0曗O) G-OA})9V& 8 Ep͋$Aʫ!@67vN-'ӗPc `v'm<ױ.vyTƘb,{JvPgsMQ2̆,.ˋKLuVa60K<~'Ǐr?Fqܢc132ۺy; FDln:OLh;i$ނ'^w>r-?%[f?:XL~ԈpVRXA\Co쒏&8C~A}w2 J>cŽy9*Y#|ˇOSG rwY�&÷}|[rkHٝkdSFhP8Q7YXjQ|z9E%tƳCB]P6 ?}T6y0ca1XxATͳ:]'(St0Ec? wb`OP} j9D LU <9]s'?UWHjHPB'opNg^588g .']W~GE^2QnWp#q Ur f)Q9tGy8,sеa`W~ FgW <sC䏙<nǹbHm8s J7KATj "z՜RskJ,J+Yosqf\F\eMp<_QLFoMgtfp(G6W>;'t\zp ̟/-]^6"rfi䝙IQh8w>J@goIlj eûLxT3 PF il. 9#r+0y<l*T QpXQxw7[&P⒫å2d~6m0& J@ f-<6C h ;G&0 뇑h-1i4}DbȧlIDPز4d(fj񚩔o>z)�8%L:i Q a3R0Q"ETd,Nʄx~cʌB}O_ [覚,"`:mT!$ޡ/oz`2 !h2Sa!_@*Z#,�Γ̢ͼJtDN>2aws"~oށGc&x:�z'A!!4*=KC-<Q6ڰHueʊ NUDžw/%vxE]=e\ ͡L׮Z D 3`ŧx?F2iLטR[>53L^[:L!](hG.9]"g+!8R(_skޭqn_2aATrH TE\@x3NcwBΜS"~Gce2dLwB(gft{*K6/+GY|1G0?Z S[·ڴc6qNMP5z`sIj<t%4#:e>R I \Y"4D-[:)|ˣ꣎nSxl\q@zdt27j_'#*'NV"xmdv>JeP{Qb@L]/ b~2{>ff 0QCzVU7MkE 5pdq*|L&DG$04@e4χ& ܉IUU.xf7ԟ)ZΝ ~(!ʱYq1}t #z2u%(C%Fuٙp?@gmfw<XrO#^-nי[@Fh)?J8Zɝw\7TE> Xᇸ@>}A2]ܮAݱw(I }A>ȭ%֑ͫHT7&LY#㌜p_;S:ʚ?[NR1A:geF I$d,udPp>1=mtꕚm0qun޳&[:5l)o3{ӯڼbޓ! d|c2i#Fo`3Lf|܁K<tSd$jMJ0�R3;nlʙKx# s5I P2s3;L ,:T7jxeA<ޛ>bf yx$r`^zpXp}}`xJ԰�F}p4saħ&`Bۭh%a}R,zeƅ9ďRΛ|er~ZpƓK!!]ȾXh"( 9z"f7׋Tq4kR|l0p`kҸD䶬i|O(υB8Ȋ捭7nٱ2iх 䃘؁;X4|^Nd2Ȉ5BnE3Ÿ ȉU̘x1C=u,� c95ȋ7~G8YU!I-{.# 9 S^ yp_P/\)=.8ee{tXXEezSr'@s?)^`T3}ia$6~Z~ Y(NjUŗ^6󐕿D/Nx.v`A�mtzP�qa"hh0nMVX0&.-l9|- ⍸~??oCZT Fù-:Xorz~B- |S*<Qdr1{->9A<sP|G@X}dM-|$Bl}5n(4;-->:/>oX Oqny;Gv]Z7izr %$YSңo$]Z@e};#t<ͪ*G-GS!0i;E`,Q1؟az[d SG6{UhQOe!> ,\ɂ@Z21TAmVâUc#م$FTdK`ِ3Uq A돖DQh&\nGQ *N�x0S'㷮w\Akop.!7wpK<ۭ;o 9 I![8szx?Elw4?~7 ,C:7chq`j'm=:xxO/�@ff~}","*ykHonA~?ya﷋3@'jo4Eqֽ؉/2# zE-w.oH!4yT ЩŰ0hOGM$߱,wp\"~d&C{۝bBR#Z@  0g`GM?┮�u|gĭ4nug 3bv4xp8Hd vCvt WXxŰiX̫dQQO2w-.{yLpâԶ\)>벨[oPRJ%/nm B?Չٹ~8nLhjy>]}x0cgYT$z^KpqV{O1YoޠsٮdCWx-3W F=qa4s8Mꃃо{x0vUG=텇QyaA &W%m\J3U6-7B2}8ϥxˋ\gx.1_abZ2*+_U;L>@+B 7-Yԉϰ*`TDحGji#LKZ锅╣vԡD\{YQR0_yb�:]LCٖ ;Znˎ&Rj) +v\+K*oY"r0fU4d^oN#J,f6U<ǎEyU?VE ;W77&q 5x3塥Y7i:L/;<7j/PA�#!ޖwU(o #/)yڬjnX}i@{ *>Nz f0J*$(;reTT :&s1ZO2QLX(+79�eXJwIUkyLr\prTsFVٽ9{?xH3=F݋`}jJ t-]iNŖ8&9^fwϊJc*q3Obf# 뢦ݬ÷awG܃qVd[g(:ZJOvv$]: ~��< B:/팚 I~Cp^OJzt%iD敶@,俗$9=hڶ6ogc;˾+J5 Z LpPnXvuGĐ7MW:&rf�oCw}r9>!E#B*Ŏ{=x/G~gy_GcLYz?D%hve]pT1щdz֒cGЉ?Q Dϱ56W6a9F`jnzX":o}o=\ <4Dv"m`\gaU|{e8gɾ�$jxzd %y0+zt[ +tPw_p0y^Q m2@^A\,V#on Vxuhb<]ݥ /2gzڹOnoxo5 1Vaq꥕u@|aό,+xjJZ\H%8-)Sڕ5X jR0Wm_7l^>\s.v%1&V͏{,m>ծmK1xݏ:^:Zƿ!'5NL<\"~'Riqp jѽj"5n D&:nXQ&2U~а|˷ |'5a6nH+ٍ5݉Va1):&ҏEl[#eQyg;l:x\8ѵo%xA, dxltRK됌l,85s i6,Gb`Bv1,(WRsL�;C?(`?Ѕybtէ y( Ћ?7kco =yAj!s`Es7>J&AwQ+ԷP@tr~l7e-yԚhIb XtP~m*fc~/<M]"vRx@Y5qM=;A,vWtRAGn^U-p>y*H94=fH'A&ݣv=;_^Q&@<,hE'hcJ@G4=o)Ǚ)KBU@Tc 'ԕQswP ?,c2-ER>|Ìr{p{?E.6k;'> m)Pi[ `i)J V] q 6&aqi2)h^}S^%cj6mx�ΕnX̴4SgsՅ)Q}}}Sv*0aC>֝'IM邁b[I}*=h(]>d' C}O&J)l!"noQ^坪Jni=)<d$<%lt`=mצz C&Q<߮u&N >VF-kءA{9Ar2mGT{zmmCfҁ#!tQH֛ͣSV P>S]x<g:k9MMq];6,7T !˫mU%%<_Ya`Ƌ/ '.C=m0|z[S'}K0BUFY~Wg5oC2 ^0X W$mRSy]6!'"Ub7ڢ q|=&!�v E :VzY"$BU?ttP I gh<uۚA!==r@a0nO@I=q$r-eKV^qm^wb`%yҮunyҜ"l O ZnaӧlӃtf�ϊ` hټ("+g h/ȕӭ΀WUT E1Ťs&)`/%m* T=*▿`)''h|v% -mi*Y6x֬H4Ӹhd=ߗ1M!CۋY++ Yb+rdJ9l3U=5fzOԉ*G?Aȸ퓩[#8 EC9JN'|;H܊E, `vUӇ} l<=A N�u _!ip,`hqL7{_:{D />P;8 4 zJnm˩H5%l(; fw"&zζ猋 %}=UKf$ ,i)qljOM}_e$Fa&Z?bt*!{Ƶ-;WI]M]8%:}5&`'v' Q2G!v <-g:Kp2JX|j|~ƒEGbdzZ2n&/IEVmCRE#\tLqкbfw.O|]Te%wAIܗVҽxNzY ,iD_1Q!xEPRۜev]V:91w2'#o<^ `drFďmk!ͱ0zW/:ޠUv' Ј$U?^*FLXTKn}&A|SRla׎7 kmekCVjT_bdfOÌ+Vf&iUSS|vVMȹ+q[3J~f]b5iHn�YF{DXS{/m^lN�QtlѯĝKoZ_w>'l۶w `kIkt宂jWo34`S4w(w�"E**31%"EST+ǼyG8kdrQV>p`X׎=$dQ>%\MKA'*'t"$׋_HY]x aġ0hTuNKvQ}g|!_!8t҅?uu)K Zc&Eď%;&}rљ�D5IF -8$Ld>)"/E]wF"i0?ZԄds�;uF""9Og^Lxw „OAC?)Y@wp鬪 F�Xc I*ĩhy <)9]|8:y PLB+݌n>iROaEqϗA{Tb'!U?5kPؙy~0WH0ˌ]0x~݀,8e�GEɳ=caC밝Besio PfnBƨw"E D4&[AvI@Mi"c㊫Ecj'5g0.C\&\b_ 5X6vߣW03(oPwfI-e[Ó 69a?YMHNwiaPУ+_epƥbPa�Q(#i=Ĩ Jx:'třpxm@|=A~\H0̔I2vn8P0 q#��͉P�ۈK�9\I7* Z'Kk`{�ɽ Ocgx;_1GG)F-UK͐h8mg5[6 _"N)Ωֽ((\{i#g׸pXpS!ś{Ѣq[&(yFw ײSqoNȻQZo2HS)mfv'u=̇ƙcCN#fpX|QlQ�-HN~>7᫲JMmNdfp9ڙmw_ծ6LնxCD,VVI&*XyO*t%-Df-];m.,CU˪ZfqvGٺW]jc?u3@m} SGe<48 )T‘*=!Uˉ|x]:bRQ3E_E!&1Rm&A�Foi3U7:GJ:BG󒂳(5;BX7 %nocdA"~g4#oOO 9@i_Y}䕃;DU[z~ ,N N׃b/ NJ+HH<V"y[H ,&㮽dSe`" 'fnXH*hOVGDsvkUS =E]!a۠Zƺ./ÕjCtv=鄇dXO;LT9|w]9E-OY;®DaIp9|#?I)}s-0ba_?j17veЛ#{cR)^zĊ-X�uйoqԠ-}Pf|l�:TT"\{F_� NAL>|!t-C 2J|�I[yJn\Rk.ZK'}rP,9.dN+&XZшXęo8t1L3ޙɌHݝ.I&q!NS ~n4KDždZLB0"a4eXHV-2ZU#\ym̓I;Μw YCB.½;iGW$﷫5TVr([VO5tBrDvws+e*b{;LBsUQ<kC'�Tl~4F?tmCm${v@NT^@`v OvcieEӊD;e>O$ebcrƹ" `\4V5jLvfU]2mEH߄oCꛇ;vEtCr}IbͼgS<rֻrsKWM4Ӌ9tX}i2{4"nNU͸ӳ#cpPqH{d.B/0uߩ} zdzs U x,FtYq7hd 䠸R)).͙wE9!|OϞ\vdnU%No=: z Xs& hDq࿬(@<{U:N Dv|#tǨqh!vI vg$_!MNƩ< ro#2wuw@ pt8 JK`'(OܑQilPldM5ߋ_f @.c7lT]o(e bi=C B-JCҿ'la*rYs CGз%>=|GS6\ q7LY^,WYGPPJb[<X8 ܵ~P>uII[o!QA 蛌9-1/(~=!g/!!Ðd"U84 '$@EMEMۆM&ά!>_n Ra8PAV>)NPR DHゃIH&dqYFPIF*M!?ؙ5S:%O4cRM|$$\FsZ7#hiB(Wos$~ r3H7s7 ҴͷRQ8vX+ -NCNDJsb$`UHXRy:G;li.w>< UFl:e* oCJM"a(rE7&ņ\(xN:jO7VHzN>(Âyy)n2[{]YoFjO4r. :OcnZ] E'ҺNr<&'n'$+N.cm׹6A;c )}ܬ2r%".wGO$3 ̌%']cMl<țEi?G8_ &1Zmqp bE" Ֆ@ Zew£"@ם p1{Owd6$A8,T60BuIi(d;/R@\NA,.Gz;[ے!s3vc@ (.737$tav퀞gS 1iĆ}w�44XFއy{x]1`7}4 vf,h3` ?Z8ۋ")ýjc}`~4"x}4e[&0ƞފDZ]�f?{|Svi(Wi4xI~J5 Ep>|,'MM$ 3K /'bGVD [.a)r!yp7gGڍd/XI,Uޗab`s(~Efd$ Z~;q6` =ZI_-^']qaU'h)'}-Y]_ JCƀd\ R0HRҺF8$_0ΛBmbI$ :(w QdnJjzc'6*@&KoP;76`F۸'[ub|qawNd'9@6+-}䅾+rQmOӂ*<2疯>v>պ8ܸT ܖ 佳岗'd8(@~/~1IiP6@n^ѕ{xb]F~EA.V%T3yMAǧF $nFч tQp~ՠ`FeEVf.9ɰֹ 8N/* IY=l Y  υ|_fפ-XH�z^qK+(2D]1s U(n&6u�IZkk)+ϔD{Z#(1௩'f*~?Jj.S{qۉcMmfˁ˰ $W]VNKn).mBE]$\f-F{BPY\:4K5? L( mV /2`nyLs%>TzfED=y|eTxNlWyG2 Azb*@p!)K9}ö\ NnD`tvMDq7 =F =eMtp$7n`:]қ nM c.-)WN5r!ʠg}NXKq8!,[]qTkr(UȠAX*W5 0x뚶d]mpG< 4J-~ϊ $(c@wEg� )BrLNop-aH,ǺɌ|k@.wJ(pjUתRŦsN!*k3h+�V)Mn$Torw,b'H<�J6rP>XT;Ut82I2_WrX*HţajjdsE)~xwT}ӻ| KMqY-p Nw(xt=m[hZwNΐ1i>W]ųWƛH>_d3>y�dM|9TY,nof;!*lj q`ҽ2ad+1jm`'\ϭ}܂2U*]hcp<kiD@76@̀2H bx@OTL1)|܂kKHTo�0P[Yc@=.Q]'Gi�|PPT; *%Qsjvk•OyBܧv'Hod po([6TkZN%�"QC;"he-q9DS\,Ђ].{Iq;7 ShRQMW-A7|h !|s�@HO#*d Z ?/!t8_/(rнS{'oLn:9z-;0zEK"W:1|h1q>wРw(k%yj,-<<s,0Y+(ANaw<8'qXKj=s<1=u!\<)U|RKt ,ʚUq5sݒch:�q$s0|ĕ?LD7qH,S%FC CVԉN޳, ך~T}Em"ΗIDE9v-%h|R^-'Ctf h6Y߫+8d /& iNaSɼ]1"HBV%t{4](7R:rrt@];pP1W ^| k~9Ovn:Dc Øqe'*y *CscRr;$!99~Q_0=59Tnk0j,vc$) P(,W(4s;F(9]*ҠZ:H�LVKE H {&A| Z)�qͯͽL謑1 X Ȝ+'fSy']' -ԥrRxܩQ}-;fb C\o:9.9&Dp~7Ɋ[n?i Ž <kHb``sOp{үH޲] (g"yRr/ՁRrCTw]asQ&k<iwLqm8d{*ݖ�nW%uZLI]1E^t=JA *ߞ<E 0.܃ -9)\ <&�q|6kP,(+Ln&:/2iC"(9kstQ l)ݮ]! 0,X/9g<J́O _,C(#fKZ29 nG9Σ/du c7@ ѓ>@CժX]Xl7b ʥUhK8kAyw)ŒYpJa-xق tUjdb |-=Y\z 9ȼfрLěJIC1Bq]Lx2�:I|q BVϋ I6NC O2uJ1$1:3QLIq+J4'w2 M7`T9 [JЩA/)=]u[G;h4$蘙jVZޚ6 m�FFh^!{Nn5 7m]SaE}%x+$ޣ2#4j),3bk(`"ͷB7G&]%ϡi>x綤ͱzf:_&/Q<Ƈ%Sqǝد#6[ jK^Y6%>&3:bl>,' 9!NAJnLp|^֒C->#I m~>}aiqd˝דkAȕ,sC>\�޽?[IٱqLb)w[ʉ|V#q=�+[J)lҜx;0]h.\ z>cxPi+9iKTa�r0qcjDgFx0@ho )9Mq~o(GQ1/MG0aqa btq_Kr&'._q6Mn@qZ*!EdnB3B5!K1Rx–c)9Y`g :=Fu5=+7˙~nqZzӕ\Gd�RF6y=1hFbHdj[IM)֐^(e%bJ3mF{TNd;<' 2v?#M X>T0,?xhr*%,S WVra)s?nKOO'?=E±V-@d+O3Tg(eޣ-brx[QSB�9_S@N u KU #;cʌlS_\ B܉?bHڌ0?T@M˼S&yD%26^?^Hr0:-q$#JAsKB3i\4k'I<>ErAq憶~}L}B[߰)˖[ L8[4%ka%|+ iƽMDӝF+-8zW\gie$lpL҃2sQQ&�gJ1elX->I=UtZOmܫttÍ<[OǥI ,"fCM�T+nCV>ب) O=37Y[_Plh;JZ\!A_5\Hw:x6wxMycuݩP^픻P;'dNJxv=GX4YǏ[v$)a`h'�ZIR#nEXRhԂ@Z[6fwBC(}V7)M vS=WnZHsxD?)7}T�SıCOD1knUQmJj_3>~J*`y5AV<HP`LP~,A9yp=Wy" tq1v8m` QFq:҉YBHq>:?XČ75CB-?kgҒ6XmN~%&(|Hv^8?39`�m�N1Wm} j2,I\ۗOi oh&F+ X$>uQ`1~Ź =c/7M~F`N99wƍ O|'={G;! cn<9%rZNU$[nv0?$.fK?q-N:};o2$K re2{kH MuD-:qzg+]̆"cƒv vSsÅn~4n&٨[;8 d-9Ld \DG@u8|XeN-TwI"9Ţf/j=E_WT,^H1G8"D�$$o6x9 qEӔ$|pR㪋aBoGIB./g$gR^ <9r269V„F"eQ "xdٗPf,^KP.;YUPm$dm,] �dqnb!b>"SoqaɸGEfj7sDd)o;f}eVD w=ˠ ,<[" ݕf(_ q S&R=j� pd&}bTpvo7vbe*9ܠ�oy)>y;Il(�ݟO 2۫M6H(;iiZ bU9)._H0<\N?!2N(MSԿI/AwyS\ s%\j/&tՂ̭ +m##XRI�z\+3nh}pIUt!QwnfAmspX\c,12!HQk NG|UF`>'}%pyZl܉ څ905t'vE>~.l"0֪mJ;Ee.+3Y? -B,GױD1K%}./QpɪHT!s ; |٩[ل[˛|< /!#.c8Uq8 JE}m;g)wo3$n{5G[7(ιf:n}(r êb #"qFQSR@bwEiZ vc:fk <x?t|k6|ZMBZ}'*]cN{p;=+ �ݛ&R xnp.*:d s fǗc¯H_}19NqrC`}Dta0c=s5w9Lq?D9Ғ=4Q�Br|6[݃}҄6MaLr<~g5 a.!n3k+#y=e(IEk/@)F$%٫(Ԯo|C1P/1Ƌ~+KqWV2dh6\KP/"�:ypx"ا.դ &echs8Iѭi٦ILyI35(="c"ؐd 8 l:qFN zQDq;n6[_+tIf_>$[K'H34pC͍c9NGP9Qd癹"tV1Mqt.|0c$N( LEXLt~ŇX :!4}z� s3`ߩj$MM2$_Oa"WR t3q%Z}+Ot}3ERQU=dƛ1t'3\*7)y>8bG~:a)jiEh>D|g i k`q֏"[p2CrG"jżu/JevNJr=\)d+m\\hnƢl͍DIp`e~ tL)Vp0eSK;WJtswH*܁6FNqGC5D礘 H/U5;S]t-|t3Dn2h Bi(5ԕ/8 -cn↲؅'xS`쬗d8JzE2B!\u=.ůbPH\7yս $;i5 uꄴۛcyÓ yv4_1|\u#x 4QeH"Q_u%j=Ih@eI\9 jH=ke}VOx`Ք*[YX(? $P^= d`F7m C<3geGȃ Jʧߋ-K7?jo $kcfs$ԘUܕ >SGhq$'c؝`TPK |Pt%Qs!؛lƎ0q}qHٰ ہMr�7IB@.zϚ5[`ÃHf[͏u@;J:#\xFGSdČ) XF\<! `G9&8&dz'ȦMb$bG19YɯH%qS&i$N 0Hҵur:R`LWZ{vxc"{TGܰx<`z~ TapT<?fhҠ薷F<jr\ŷg"H"]_6-J7WG`K`a7d$Ug˞cO7g)祜VMҟAkJj pn)f>�2|cǏ.YIMKپmFNӏov*+ f\Bv҇E( \tCvx\&`EKH~$wm3=xJ1%n($x5;bMcI='5.=XzxDM=V{i:{=.Cea EOZXR['YAqW1uȎP{]=~఍ٲ#,@lKrqNNF9<URjJr_g%!T-Gg:ahǹ)H_wrgmQD]TA-#{Š"#UwhK'{XtG岐gs` nʛXjUrB3dv]F51+DwApf?eas 3$]Mf�X zlY"O0%~ v-45%Q+`8qQr!E('BL:bWQm9w+{8Fcdf5+HoHᅧ(h5ygBafĔ'nx0Q%U7>ܮc}>!Sd?9>q/"ɰKOE~A&#--uco$̅޹gNpxrw&3Ϩm-3*:EPjD OjbN: Еߕ#_\5p拥%\Io?_&XIӜYZR6b,d[" &[-帷pqg%PbdyMM_9$x˅ EjO埻ME:1!f<?'bmj{o+^p8.FVX\l}Fġv+|DKڋ鎰2֊?*HniՌW7eLRp~B,0^1\Cˋ'KK gbd][+~gJ$H7m\s09/*ԐrY<tUVOBlpE�g$H~-˩?[8*(7:qUKzI&'"<�TDeBm)b3={G0wJ7Yu=CQV]$v%ۡdu}{YLȎU\|9]+�eI0N ,UF>;",U<=IL n*؅<I|)Ar:<f:﵍Cc <pFu%.V/wSUq"Kd졉�5n3!x˴Ťv0k":{<7xZ$|F7jӨ @%O>w<Im|$v#F[EQ\ʞܞ�-TFqcX\@)1e%~l=- yOMc1E�Gl'8k@&�q:Ei՝odIC.?1Q$%}xPo"W<MPQ_~aA9)h7@'v5h|븖ɮOFt\K3ؔS&Amiq%6zRkj*^VLΜ{3lDsj~7Teǹ5greb Ici.)T%)9qai>܏~`eL%2z8~]<o7vG_ P־9L\[sC.ٺT0<4OA$׸ɗ|X/-4ٮZMƩťE) 6=p}dTC pn< br~= |0مe*Ό:=џd5wZ-veMx-$*w"3Yheή%Aj =g2>bT0Z|1 E@bz# &}8o'D/gDLFj7vO(K9 t7_OC!&舸ԥ6y٬WC="pUI?B(q1L]`\̵^E.s̝y/QGaS;]SQ!cZR;33=Yz@aTT_qq4ڒ&ў?J#x&ġā"<c[w3#|+X~OBSP^WQlk$ԡpVi^kYۿ~У3: z2WKU7 K?RVY͝+A[7.FP3qoХ}*NY>�CRAT0{2C?㒪xi9'>EEļ(?b4+[fuw;;ҝF֞([u(\st?C! Q+K{&;u0Cqw4[\Ջa#HkuSMu )!dٽkJL~*и ἓ"d`8hj{|2CͶkKYh}̋)z77`P|QD,dN�fUʠ]CB8~� 0U[oyH�Cux=~h#F^Ns.Ol  5Ģg#VYjy1ͻ4X=Iݦ'Yrڐx?)M"TۗP͵]~чOFo[`@q{2yc5sQ"th~RI;#S%4h PDC,ϣ@X]zYw7D U#\'rѹjWTC`(6ras}ZPXX`7B Aݖ ܄{]WvDŒqFWGK2P[xxZ>˧ǃ /9n, KV/_;(� vVOЬ K 'sV ֊xl!R� Ot8zxy[A #1x:hr;51P�~fs/@r|:{0#BiH8q |H~-~ L 'e:"dvW!97;ݹUM7.YIV^۞BI>'+zV<ٓm+㺧V҄($D#5(ܛrVA*btxoI节uWK,d-)*O8;B_7C6eڨ> ®|oYx8ev8 Ż]w%hfqA 61.֏ ES$t2 \`1KkIKS<Al>WZOy>[QE &uMt/ n19.ae0kcr]|;L=_au':rpUaNmQ!S RWgcKlQ7Om<� i'Q93 8lY8S'~!V* @P/Mq ]3B GE ]iٱv5A1ju#)})!dfwts)b/Wk.jzD}m~A87,u I{38-ڦd{H /"&zg )f">!gNX@k57<I({MySY8(ST ]l{+RoV5%a{M^&y}3(˻lX(cQ#~j`&)'7,{beԆzXx?w{kq%O!'SHJ = ,<J/J,d=$ޤVi.%C_7pӝ�G?G@!0a" |Ks:DiiYyU$FNz`V +H8[;Ps͹EY8.<))fu*q銹 eR&2h^Zs'$C6?ԅ"$ήxp +?hi ]ߊMo( LsJ]LQ6&i'Fqfz@H.9śT\PW^�.I8>�_<G_-T]8^q* 璵}G!z/Kd'c݁ K�'~i]*| M,5qrȘ/B3ϜX d"rvoxdnzZeG5!nV˄}BluF.::]x,r_, 6,‹<FxNKs8L$l,Z-$HRDX~n@~mBhHֻ>**/T;R=W\4Uq}2x9ɎH ȵv2vU#Ŧ,M }ZGXiEa;$WBӃ)^x.id8=r&:m)sXMfO- x1V% @Pk|ͨ4X \"㺥]JhG`*dMnI:H*Лpk']aVZ&3ɵ,[T4� �u(P�I_DflH6T'2޻][1xw-'rުly} П7WCSS:4q"?Kn<E.Ԏez6X߉EC09+3Inp)CaDrDZ-LHjSh};V2x]'p4՘,)0~݁6s`bkN~ L3tx-lHv5( i$/ 1%PfCo#%3A`p,o/iEU𣵼ky1\ӷ� +%%srSYFJq5E <2ZƝU6Ӝg=9fVWCp|ptǗʀ4~x$p?,ߓR$kĭFuAcA:\s|vE=Ȥs+-'eV&`B[( f=3$,Ppnۇ~ >H*QހЎC ;GfIS&e)iUYѨn"Tl5'oۦ=I%l^ ,^'mQʡX@pv܆N{%Ee+'D¾t ޢV9 ;Z<[IIVJIg΄e1#[H@ i6YK=J#U Q)E4hylrQ&7MʵhfzMSw(U\#ݮ,R0RP0%B c&y./n2eJl8U�_yR7\BHRCb(@q1kGnY/qPIT՛u1g~ArRM˾qAHleW` e'yN+L}[jQBC@w!.[K! ,vG?t0qq;#U^Wunr='NQPqlmӻ*'d[SN)n Xx- gRڟyMA}4㡴G ;a1 "Ĕn @C; hOn A *SEw؊_!0'reVx=nH@QvwՈΗ斩X9ezNJDxA\4 o>?`4&&(+H;@RffhW7rB?q{j�zCw~ `>]J ï�<Yn]XiҜ jc"]%#$l xʕuӕ3q,i@܌?SIϯ/w-ul-[<!>%"Τ;o<$!) Nn|GT5(޸'2A/\m\`}5Yo@ebfJs9 W6ov~H^VGi֩AuF=Gse.wtb) 9@I]z$Qȑ38\1%-u%ӽi<WƼ]-�_3{z6<qCUM쉿kr˰[wͭ))�3erGzw4o]hkNJ/|Wd!MR#Ƨ'yn{0%PCUwmpvF|+y:u@$F>[N_~+P-Av1_,)vDdJߓct-+ 瀂9FrB1 0u Dc/rIwTm(:-] %{^yE7vh˽!h<4P8D0كO峙xgS;?'-+UZ 0ԪlOyrNwwQS%KYdB!3c798(dE.E&#bĿ [pg7SyUS%TFI&i3v+gj)kr,VEOm7ҥTrL"v Ҥz ߖjv'jυ[L!'}wNosk�L3BC|q~@ DЇZH?㪋 a$"73 t-0qD <|զgܿL a]2zuX_I+YV`_2ga>3;DOQLX9(B9R- yf)DxmiLgV#%Lr^rgč 8l#E7kVedbl S)*6rC93YViYɛdE/e-Bi�men-;@hy;4iH9^;9-;iI�b(G_-vd oNf%ĺuw"%n 8~5)HWdruqѓ(UGd4DI\ ^94@M׊M>!qx>0|y{ͦM5H%*)8JenՅ z~G_@)TDsM 0oN1kqςt%J(w$|˨vl֮CB'#bћ&#kSdf댅 M'EM8'8<`l0eڢzz%p`ם 0Ɣw|0~b#.@P\Ͼ gٯ7E,oS$H7bQS͋(Ge=ȩQnZʋ>d6Q {[vLqk-z_!3ƈ"$4@=S?v?׷$4_õNTrNBFqH>χtbDSF~u0Np*) l䭙fqEova8n,9Cs.v\DL#)$s>7T718ph׽L)J.R|::7ŠkEglqyq4$-^t`k4spF$A5 #]gnɣH@V\6ײ^voE1 mb'ˆꉳ:I+@SSYKvCu@Ž-{d+pDDhTO"g8͙ܺ  L_;sL.8zu]̓ejF<Jk(,RnJc~@qq EMp[+٤^cX+V?7ZA#ܞ0kf3J>W3UZRx%撘Wc|5f)IQ1%zv}|43 �>uLSB"iz¦Z7M#-�qļA2a`8nhۙW#%Jc7}}3:vMWooⳭb'Uo:Jݜ3\*I>ue2)Q+b7�׃bKQr+3oNRv}K5A y~Ci%ܠ:e&׊GmrkԸ1$?S8r6w�NεG@VMv!�7 oKBM|fP]p�\pMQ~62,*9Ӵ]wмE0MG,$8qX4-DaUM'0�飋>s\/spyX~ 3zꂟrtI^ Bg_r y\vM rΎS~x:q*}FjuY^@c9EsՉߓHJʜcAL=UVdSeœaeg "*xY; A I>~;#P�<za4Sg3RGaɳ q/[.v< Ǜ6A#XPÔv@?UhIUmڝ}v�Ev?OpO 8;ڰ 㬾}m%@lR ÊMX[uy}Wpb}tn $0eո&CݍE FF*D zo8e /%e+%,B>ۋ9fM6l ̐ =:;v(}قˁyldD6D71Jt�ӫ&S#2ӔGX i P1F՜?K&T=s <krڿRTYo=ID`crC+ r^'MT;|ɿ@:HٺT=XlHpFT�I7j6s a5)+4T"\=,oSMtUSYgH"h:2^ˮ~).eˈhH h)f ɼ�jY8^59䯡 lrH%[<VpqB&J~ZJrx8Ȝ]qӸtů!܅v]# )$:h% -N:=%"qed2`ؒ\'6 |*&c"?,Y۬7<4(0q3/x9EX$dr �阭2$ǽT#uYpvyk,Mn/V3#;=%P,e=rB%c95L~{#AxMJOH&3@/熢]fDE^ɍ?5P8^ʃ3n<}6d2;+iJ%}.tc9@M]8l b9nDC5~ F^Ĕ' Ү߲:%it f,FK ]_KS%K*ӈ-H}^z�0`yz#PI$x*5)ēA3Zҷ cǥcn$4Mt uH`%S &%3Xe{q26&UU&KAXJMUh.}}=?'Μ^Wq) J]S^z`cB43DjպNxQoa!~}B]Hs.JLjrY?-BvXh}5GoC%_\ˏfPa83G9/LZZH磏CYiB�*5ٮ?O ՘<HtLIIQm a5)n1g&Cv]$9kf �K}K Ċ5 *xEZΓ+EpHFF0ISu{]鴣3eIArDcSI$Eט4H 4dp5\w :[|6V4a"\;#NUKVH769[9F��%#!8H�c_=]/:bOm(s*BHQ5$Ѱ֍>&�"YROY];, q{~a^%yh6N*XA&)d!Rp0*`ɢqV ϧXniÝ[/I,'[J= K!`[߹dTtuX I&Lz7g**OYi/0Oupu0-Lh:޿kOm/TU dAwò~+~%9qa0 Qvbs"OXB\p�o_VҺ%TpԕT]Qpj*Zta:˱P>lK5TGp̻g(W=?@:~ sRi1xto}.5aUQ67dÿ  TiG{N@k)nߨ  hܘE!X(ұGXJ9Y]"mr++ߢ&<1An1۰rs15gp[k^Qޚ߁fI3+ %ޜ)С%D. <4@d7]q1.g#\TGs2Z1 M!rkoRBB;xOMKHP'/  TY g*xXZO=Vդ+4)+ϔ(hpD1)[043B>6s6s<Ghd+M4d$O@>ųOcn3VE,"`DA7 hHx>4FyVk3d" 5NKjuNk@Cb+X2SHYeI?:'kٽĊbPpÉK $b]9d"+3Gb34C};󄉓 ԯfwi!lZ0 W1dj}\B?61J&R崚2 E$"Fo0|^/n3*_,I}u$nzU+D j+eq0]>Gn/'M EeKs'\-i)h!V@i<aTru41jk{d8\d MZ^RD~Q: ` F#wf$E(Y`l'mҁ~ @"/$-0?${XQj%LB!AGJZຯ+(7`F/QKRJ/D '~6d%Pd*<ّB*MqMG iKhxy>{zxe1'̒ddJ1Fh[KKH\-n@ކŐ@-I`3v35!E׸)mKxqi$+6e&q3!Vפ$0:?*9Cg{KOQ2Fn֠a"jȉ4t`="WԺ=(QD.�*a`cɥD!!j1#h䯔'$,^BS[bV8rM3)iO0�3@ }} Etׁfʮ I*"$>ɢFbdIDYnդO&;Nz<n'3.ET2)Gg=+ _ X,{w:߯X3V ر Mc ( 88?'R{&BIf4G�>ںaRsڐto3ueTBhawfkUp&W!ij:%2`ERؔ ĽE-"dfɣ=sqIQE[1dt@<[t!Z'9n1Dn)8~PJ22 UYb\gHI-G:R*lHK*IH.jbG͋ :Z.wjAH6*f~t\ .M; FG%A:l:,Pv_-eBE͌eM̨I/$&”YXg1j3kh SE;Z䯗'o"M5`*1UEUʛ#(Žāz Q]ii[in=$R�$|G}9)?94 ]YW`"Ze~p Br͢R^ux:L:Y/Y&v;'fb>!); !#e L|/EPfAd U+__ 6F}C/:&QG`i}<l 2IJmrC= ͤ̏VYe25c!Jq ŏ99chzMm^BZ+s5@ԏ+{ ѷ_ovFeB;N*TmWL02K(0*`%3tJ ##9E-s�u9tduV?,jhcGl u&HAY7+JJIN5Xjg2/'ZfpCDRI"V*+JcYVǸLpJrɽiX0|/$IXlvS ?])H({� q[{�)GB|F(B֤G @ANqV+d+L=zS\< b0~{UoyjU\̞! dgoZH7l `7)pLxgBz܉R/O{8{zn))Z AQgbzFmrG5d.)u׉ɡB{5X JgCYS, %{88iԻ̈0̔!0Ql\ SNV1xY[a�TQN^IA^~cRиab?hX=MQrR}?6##;e+t3Rq{pAU6K/*/쩪+4<IOµ_CH`-1yodM6 �{pwwĕwxY] Fl $o y2^)�௝P *QB@0+3>7[m6P`>8nk2A7&�SjHc)0kչwN*dHR8ҟ[!xyK呬X.J٢ԖWpm_ 4TX.[^$^]tA7q/"g$sEBM,@L-{ n 2 ě:Y_`v3?>l'dNLӏ$% .WeiGOW}ĩ"P$\CtzxCrLsn"stKiF+Q{BU@3/ ͘r$DW8Q=4"aUOB8 6x*(0I75tBЖvzQLJRN4Y#̎Gñ`詝o{*tcã7&CwԤR:O !Ӑ~ o*Yf)y7eK B8ş|a[:'ybvTLO2oIxy_-vDDSI(n /vI3ͩTl7qD=H8'|: |&IF-ts}jZd JzMȣI򸎺e}mꉣܛ|; )a#GzRHra!TNt[s~q`bukJⳤk<%/.Y41YRM_B 4и gbhtEq)x"( BӐB rX4T(%FAK U*;hXgn>!RvR�P`3{!&>y(ῗ, -댠[dxEO2~{x[ 32/PtkM 3 yrtPT3g|% (7:5L8w0F)J9 XKMdM& oqxvFO\o9eзZYzQ@3}K=OZrfb샶tSW"R)}<WN}._r0N??9 Њ6 y027ndCY|gCFۉ(x>`mx� �&cʌrƇ ,r&JxS'ƫJ!>dɊkV|DUc9cT)B^1 Hޯ}QKcfVG7-7IрRh^7G1FS)*b/UƜ_S%�EV}3fW\WAiuR_(_2@'7.nk�uenn~Z%Qu,rA�*@;E$H}("`#Op0&n@ݰ7fb{ITc~νd2QӿYx�\bf7zVU_K:^Mjla͗VgTTA@fgw !G`"#Zi9BV?Y|)Y<ęwԺ/K]kk`p0,"j%,7^k�{lEvյ&;`\E{Y8B7j.FM/~!DN \EUgCRIvbG!*3|}OBz~|b!Hc&K8#rO/aف(k(&y"ƒ&3(5zT_PQOv|7SgCc東lTmk@MD4n8U:qFWgU qHfg{!7aڙ*Mlq ($`vueTMxU:0XIPyaU{�/W%&sݠk[[-"X  ];=Si16vHRm_b WޥīNBp/i/?!/84􄫳_¾>UAY-MGI] 6=֧Llw4Dl`_^I# +R(j/[S3=vPp-';z l9Q/ P1m#XDȯ⧼�, kK;ïW%I =CLx&1INelH_p ftbP&Ng#>`/6 q(z1K6neӘxŵ2bh bvrEH2gl(0`Gm/f<-؍Վ.v73P8Np61+dDJV{UB[7T$8zo�fM9GnWUL0eķb1;Ń)b ?Z!ƢEݨ:TG9Et70]U A5 0|Iхq{s-%CjA|<SW.Sڭ8Fb2w(2KA3f@nP4ݎjCqլT@#T7OךdoC&x"KiלEuR( Ԫ\6ݻ.g+}.s`p2qnX9A<7-f1ͱHx#x4~ 0TIX.կCNp@,~BDDŽOoϥ7ˆPZ 9ys#j8!M*xC-x$ȹMQ$|S bb<OreIJ!D3IIk@H5g-!MŊyy y#>4xXS%!kZBQi< Ij`JV\U۬(nxI 0%~kwCy=/ܞs*f^q}KEx@Upf7QHlD9}+eL_RϦ=:I+{IgQa6\KJ*%=xx(ٗ:fIuH1m< xFyXp|h67f̷qA ;U+̶T,9CE{* +6kruO˙ W6H0U\�(Wu͝^)Yůp왱HWYznS G ržf btxBS=[GP< !I{9s!}qp}Gx=߼!0{a�bּFuQ8.XċO}&{䩱_Xac:cv"0JIhCGW�ZuGy>Khwx\87ў#蒃7Uļ[v}tcР'B x׎lZ^ bD‘wFФ.SwC_lT#Ci)l{;]#U%_ִ�.^9/jVg U 8V޿+1p|' |v|�Q0?qtxԓŧ�J$GgO~:JDYڑsHO! #Hŧ-54.$PRE7;# MCi4|Tlhu(~#?=i;߹QOax)ܼBi J(RieUS<r+xBω;ZU?V ʗ}Z,* o0HncU|Bd*+6F5S/`H1o\ LE~$ C(҆ 3ؓQef4+I34Vށg {S[YCVʹkERm61]3ךDBx˝NtqN*  Ƿ?81B^V1ʼnmp%ʀ("AzBpdsq?B �kw5ygS?g(=G<)&R, kGλ27fu^bT#u:E' i_ϭcNL\^!"G*~ra.]~L;((.+nP*lQ-^Ia~2P(⎪q-vaZ:(6 gJ*;>6XSK˖U H}R,ѩ w,_TAՎm;_G( 5kO;F Ni1u63oa~^CfUnto PqCL$R|=f襊_~;r *>KGAgcUDg6QTȔApl>3H fmЅpe/i}>^/WI$äug틦oN .n{oBsy-xkRij [7uNOi4ḵIA.Q̴\imff,-ꊊ'9֥c3P؄0cY${GޣQv*]Ȼ?`aiPD. z;bE`Q41$%nIb&>Z�ީXoS3'}-fг�"~s}x{!bDahߍP )jƚtnN2 & qDdMIÓhJ v9r=rbXU_`qyxX&3Ň1gi/.w;_h[ig❳ˑ^8T>tZ\I qJA-VMĮĩq?S ܮH~ tٙ-j"F Ϟv0?( ^VЃSsl g({ C2)w`?8AIdcN]:d XXJ1t5u ӽLIŗLP!eDD!f Doo-'Hj1pA`1{fXx1@:XvO1Wl/ oSg՚fbP;ʬuB2ʢ5^["}|{qn!zm9"CD& `4Ej)D*9 %rPc xLص7]}rrzs5UXR�S"ƄdˢA�*+Qp1_Ct)33ҍX~.陘#EΎk@c,xxP-:G:㽖(!7ewYhӘ+0{R.=h wӼdH�37vΣJ(u$8%OK $ȤX=A;_cX3YƩrPi؝:D&:2q!CXd:N4S i֐ vMq*"azuH"6{NqvQ593yjΩSp&q[\)gO9@2,^L0k[i gPb^2(_-~*GFϨqލƾa kG:~NprocM rZ)/ro+FXU$e;<@pXv,&\| X1ռXRo` $Z&}l8ylp(IcĸCM]ni `$L'3"FPl'[D2�R0bEMoТԙ ')ͱ<(|vzP.M"_ ̫zYF`U5.}B*]'1LZ!L<� tk50[}C �^*bc(jI_@,`�q< ;rM4%r8\HN&dcb=d}x 9i]NiY]NTN6Έ1͏zF/~1w3D洍!3dH0Y|ydvѱK$Z0@hǧxͼP Lc$u:"-vK|IniI̧̙Sp(@)"B9w]~vTq C ^9yv5<&x,1y)|N5u)>6^O;Zݘ-&~$I&-֛]SUXoҏ;>RN ŀ9=auQg CC]v>'8̎n SSmF++(-B45&6Y58ثezi|BpIQNZ; h'$ }9g׿0jM+ձZ@Z\sIg41) PbSs9+Ul<PBq|R8p" GWn[,d/A9mr(y~܊MyleLe–)]+|L贡4׮މÏQǙJQ.aes44vpʰ1S*P5\UѤHEؼ,/6p"| V @L1#Tǒ} /r%8sr%(g d[DQ-+[\37|kq|bKҚ#o@F Z8s *ŕԞ|*gw*70kPJF�_3o~͖cfoN�s#2itd*zo[dOx8O)�jBs I@Vu$*j6�h ċ0 2Fe4XѿGj, !^H;m9Oql#Yr� #*7qLqJm@gt$>ԧFe]2?Cޫz3ٌ6~`l4Yӻ*ƪ%k8~˂AIe7ΕӔZ{#isBX.fPTbʬ*^emx=tym 7CȦn'7AA`ξ u(QZΏ1.9ŒJ% wi+!pQ0ܣ8CHE? 2c? uԮvsL.:?'+x-u׎P#D*ɓW||e[ԓ$yXXE`"�Fx�<u 6}E&&?hCLl3t-Bu-Aҿӿ?JYJ痿ғZ@}ʴHnB2۶dE\Ɖ&ס;F�Tű͙dO"/(J35SMhzEb)>Qq7-~9iź}A�Da!Uu79�3㞄4@|pJFP|FMB$dhBb =ĩ(Ev]l<z_2]%N>գmnGƉ*7ȝ}unA<O{`AϗȏS,3"k;HZdA.cE0>O)_!zUFmOben@t|B,u׻Q/{@ȗq<G|&G#@i3b͟v)О8YI۔}x�Κ& d;/ׇE8j%]+>b\޸%V"Z$b"w+;-KRZq}uh%X-hʚ %7wC;=%8' U4 YtoB(lQ᱂T Mp@+=@|d{e%9iVo~~ >?ղ6ױZR&ۥ2|S1R~pg`ѽWQtݞ,u#)X.BfD|-|;n邩2x3!\ 2q!?Nxl_Dm\;8뇦|kN?Hpb59,!\?4Ѱ1jo'\a*K6lK;C, 1hcH@0ͩb2 p{glڦD㷳{k;] G]ԩ h*󽚖 &ܰHN6 7|{\!V54m">x D]c/)(׿ĢG�tz 0z:jM)Oߣ xz>=;AބQ>s 3aRm~vJcCKп|T3Y׾E۟Uc7iW!l� 5=-}~| iM0 JO%or2|]6R,&JJ9tYӚ�\? ΎZ1?}^bG)ކ8[$zD_U{�*8{|E!F-zQZ%B2̻+j-w~cDNaez;;È̪a IǵCgf㰽@fK89ڱ GT؍@:H /d5$ˏ $.R(x)m g'lYf4CuJi@QbOFo*%Iv/$2,ج¨r yQ!ZRI81:Y:�\_\l7do۴ˏ?^ήfU7/#Ɯ͌Mv \oD< ;ݙ{F \ޒ 9N9ҲNm"&W96wI(pӞ#Alϐ{[*(${ī4|ǚU߈4F) ,- FKGnnD [#i{3'lie %E)1I )q^UFSf_[B`EmW"CJ* +߉ hIΏux/ݾr˟hH}=~o |dMr)vB:O H/its@3pKv\Vf4VL`2z8D@V=S tfX4sB G:8l12KE;mSqiDqV:NI D';3q~M0Cƽ?UnB3j/hl11Gy20'3-q߾brYRqMO-hd" y(ѯsi *!I,R\(؏PKTʑV;\rQu+A0_;l&p^u<#Z$6A?":5Tt7az2)m%aa*ax=v 7#0Z?("q IIն♶ׄ6 xGy"'Bhyػ[gOnnO;qu5u˰K*zldǩ>ɫ/rL<.%]Pu 1RA50UtIEڹ0@S%] z@6Iڋ'UE_{Dp^"IØ{؎&�pÃ8 '8Vp#^7زz&xi>}Km^�Zy%I)Sм7(IlaC>ƵaFcg9=8y7v.O g>;lcEϖBpXc*ҩuK2t☿ڰ6)_E"`f7!ӑ4̉۰VQɹKMD9h\xE]G;E wM~ڴ ? &B*EoaƐfApӢ@yH⒚U:bD<k3\#Ka_'̏7@v`>*DN!}a,v B%Uɡ#} r +{vx)1Y9eupB i</5M6<n02'Sa48i7xP4’fE N0ENZ^e[Q~ wf_Ƨ':.WAq[*yQ1y*۩V:4 ?jlglx Q*KvȇLk42C�N&}tӠ!xkc!ioHtn Hky{pJ>lІ9}`gMfWuAy|gTѫBX_W&#o%&OܶNksRB8tMZڇ<i}u5Q5Lϖa'K3L͝\*3T QcJfK-u5s4 ol\P}M:I""M+\IF}XN<*bBR售pz |0QBs}4݃L[[!p;Sq(٩.!ʇĨ Zi} \U})t2zV@砿Zh_<9laLmV=>%dEc3rJE{|J8o[Q0ؾ~Ru ,@xNŀr 9BZBiF6 -HToIէ^Bhyo*Kc)Z+7^i01S띎ˢLf%BܢJ"B}[!+Ij,,hoq{J?ʶ{*ɚ9(E{c˖'SXW;'taLvT W*9ŵT|@Doݜ#[0>jTAӥL؄ klLѸ.8i3Do<nH#m-/{a_7yx+PL3H8/7vonݿ+j& %WFM{~޸INROtϥ5ܖTY )(c{& Iq_ƒrZO)Lj9IFU6PZ+Ώ!rQ T1@6]Ns|7۝ؾqkߝ"c-�Jþe|OIpnQnQa-<VӕM҉Pa;_Lwe%e&#*vqZS:2&VDj]Q4K#eGmw̺FLe%>v.46s*I{-i7UjuN )T:tcB>߿PoI8 H*II1!!/1X9ڋ)Q肞^?c d,cL3!)^!a"%4]·$~2m\AX[0T�K71|Nu�TD(f43A{hFLhAF"̥dM } UR-MNbipJMu.uimy*/ GUD�)pp0r5㏢2+GVЇєD(TC'{H ABH#?)ʛ)7p j .uuL%fuJZ[΅#2Zn`k2jdE.<%@SuoրT \e]{ԩTJ%`^^gt4-&̚ٽHk&8_kAABYQF-F'ǿ6PNWzk~-/ �XFլL�MHtޛ1|uoQ!ݵ6nqRd'4T d4}JHw'+0SKc~DOB%J3AKI˂TFt,8>4'q.w o̤hzL}cɓu?^9.KuϠ9d/#Y@bʷnDԂ$<8o&ucfY*xS? o reYXrR4"a\ a,>5f͕SI5B�KT43lmBHiҎqb75e<ZnF uԑote�)BQCj9Ak2M0 Dp�IW&;nr (oXeh; Ge?X\ni\WJ 6 Wۧ| (q$$̙!wdؚ_±o-094|"X' 6Vʄ+H3QS4�40e'֔zՌĭPqŋ{%RQl*gX])$ FE>i&Ag~6\nj;aGNrfȾ`GinMLJr'w HrNEQz{+)2{k*q!@௭Rylv%n�|=XC]QF!(hu?9uom{9OZG5p!awyiSʄ%vO0f%ӆ ~%MviqT}] /0:%wȑqK4 �8b^ܚGIQK3fv3~>A [/b`I_TU"M]Ui=ZX2).H#H́v'JQT(Ez\�?[t4`JR3A/l`i=EGOM/ H#sbNM'yd،]fLcȀ6 ,]2Ol2 D: r{jTR_C.T*F+IPpıaCPtZC}ѠW5Dc(}TA= }I8GϔZ6�N';VHJ?7:t~o&h cAr?Yy[ep R;J-d-q 1h:Iƛb"Nxtd53P]M?tf'ݢ%t [9Qkڄ*VZ0qc2c ֒Y D\ySA\'.BaZp ┼X.z{Tᩦۙ-!ER[Z@g0K*<IoǗސ{ɥ2L\HVM"a5M@.e:ߊ؆=I!]b$7�v5.4B5!zd:AsˢV<&՜e$8Qt%}c:O9ädܞN8O4-٢蕢ۭY8|T1+x6ϙ/wędɲJ|(w,|R2}Wr_0v`%'p4}/(8x7'j0*N?Ĺ-ޯ_??_ߖ]Yex7,=e l`=E?pU.}z#'R[4Ĕ9]H>w!$]{E+͑ f׋⍎W"x+SMcǂ+RI<QM^@Ø5砾 H C>o,zN֔p E)oG@*&'_5l8!*xaHD)Kko\htl~jC(;IE↑&}$^:PLn>۠Oc2{'s+4(Ql ~o"@-oSA@״WA‡輟lM}ȷ4&0('gSTKl"_e^}$Zk_74z8p+yO^ ey .L=pwrxAq()'*k7-ӌ}&ޜO\[4g/N@7'н%M~zO,Dޏx+L6!!;42 $Q˕u6;  G=%@wۂ*^߃ɒ<kUp{ zA&&^Ǜb �84pxUOb+G!`~s5Lɳ?`X.;aE;VCAU}cN>W_v1EIljJ THR+"(uч&8}!x\}ٞWjB2@S"[})7ъ{ y|p+v!&9,ڦ%dyQ ֢|M&dM#,d`y؞J\ܽfh4F_u noEOn!Bj^oh}5yutNlDD.ӾS< @kqX)T\n}?Zpv<0Ļ}h-)K*z?pN>+'&FY:H<X xdPF $|ÃL0WsݘBbcf :bn E<k @#]Q&beC)ɻihɯ7N\EyqC3Xdv!rG6ր>� yLI3Xz 2}!B3joozB> !ͅ H,WZfjxcֈBl(l˷-jU.Yb6!jK:骂D ԙKMc$H (1I(crlNǎ4' hO**,Zpp^vv[5qDu wX?"Q0#qxN8 L#⠘צ#?, l2#QI&Hslf8Ck[ WYPp6lAah.KW�|?wYKZ֔YMG#ehgT?ƕ 'YUC.8V'_G&hBbs.WxIv{W$OԹmm,6 :tC&v*E[Q]+O<jm[ieDŽ쐵d'ehG7{R ~P68w%~l-57}\Y7*bAE$N{upA{ADOUM](2|J:UTЁ z8@=q`,[+\XoafD8 ntV`Z~< \GoAѿZ+>lNg0Jdm-m uʛ88N=V@%.t!NW~0Fʹpjk0#ٻ! uȀM[$p!j-8n57~w񝋮0C-rFy8_F*HZww$ jmzaH;8 AY(Uz"7m>L67%*ݤ pcꯤcYx,^ Pa`_8)>1! X8%!CW/ƕ!T ͭ>hKkK;ۧbaCR^|'lpO�>vCneۀPjŽn  t%ۼuku0Q-}e-nEYo* [Xe-޷_P{JrT $ R`FMC9Lִ!< qoCBI?{g4f""fG§lĉW+`c2P91=o&#GgK"8^qo %#8LϋFհOt.�u>çNk.[EhJ`0:vZf+9V j:)GUmY/ZT>>'>ͶWx{U"`mCEэ*%7\nRP5V/ n0E`BUXxCB<ϗK7Ux %dbjoUaԙɓ"Ƣ̡{$ R2Ew\TPڵ8߫ oS h;B{XQ4i}ɀ96oӪB=~Cġd X/&!6sI TU�L=h#ضSviy7>AR'mTp wz#3w3m7=FqKr]\68Eԩ$̚>"}^éo2"𣤹 G34[g@QU7!٪WeaRAH6rJK_Ga QoRp"PXs+Ft"IWEzod[b-JP h*ey @q2=xÅ`y>s~8ѺsԴʐ E] 4@ZUr*刏z <<}sGbo:x<&ڭi<qݿ2kfMlpiuRrq xNԡ7eŇ)Y 䇂C8 Mvv�Wd�fZ +5>8ѡtSz϶5^SK"l!VZ> ؟8l}G'׆ЅbU÷Q0"Ջ iڗW^'H1-Y�MXBlo"zDE*yFyWIj)m.C ]FW}^8cMؑC1z0ޫNݨpN=!gU|̪k'X%&ad,' Љ&pX Bw3BUkPel|!r 86?N9in((0saO/6C&˫.Z*2#);q"g9v~�(;)Gh)|\(M8xU.G女l}GVBJ 0 k%AF<}v?RxfΏ 񜢳Ȩ'U(uKu}EME t2>;M'~PN8ܶK. 3 GwfŃ/zg BcPbS/&ujQDP&+VR<J\VR 41�чuEQPX2;K(8k:q"t `)x8_.B|$* 7zsQ.(wӱ'xiyC4o0% 4v2SE"̜*O7_j-M u`*Mn9~Ȱ4O<5QD*lE;LEVz/Ĝ,2ŜΪ:W̵X=SYjuL86n05'Xx[eA5JDp"o4>фp B_FQcS)ӈ~yǙH%K Xl}TY>Ǩ[đ]Vtv=u1�]J|z8t>L8LٝG8Ձm- !Vv y7bHi!-rJv}c[З9K9 bX LɬL�=ˌĈ.ޖ\VW,HD\ӈb@~6Uaz(q q+ӧӍԅ3 ]XaW$X0PmbU%o&FTS#yD kAkU}BZ(dJG ŏ"%@)?p4ur ]kUtWЉCBL$S]3C~I9!h8S}\ *:Vg1#w}Ih:H.N=ޒ1pуrG<8^,-/&- ( Nghz_cFnx8MP_9kaub1^ZckR[/JHhqu$Z\@$ zb8x"jnNhýj u�JOLlXĠN~I y{rlJ^b_91*bdo#')a�eq;y5m)]LUƕJ k7:vB&9Dő׸$6n<FB/<r=q, Y)3`a#:w\ua-\Մ/.⤥&2L@BID Czsu=,%YT@itؽo=ߩcq-]с�~gGO ]: ,Aᵛ@\v8B5�g(nd6+&ʚt Ou2 DAp;-dYH�d=` +ԏjz2 O@_^nQ {CBi6ֱrN+·u(U™vR#a 踢iZaUƂ6pV�M$\&>fp(YJ{$ _[7I 2 <ȱoGr5 h})bb<Y,=3rVpcp[b+/WB,)VJzJ:3T|`Eq$2݂1)w~F zxcI+>ۨ9o^q5&}q#B[Z~tķU'NčL.ٝ Ȟ*i DE]I056->Ċ+;L4&kʴ&&Eh*=YiR^D9SR 5  xYӋÌp^q2+s}qĸ~ns\vCw 8C|};^M|' >IGH{e1!m!`whx.&Vt`NS9ۯ)αF$!i` sl1aoJ_YXv^ :bV? Ϛ"3MAQJ>epɅ_L: lL@Hetr/|0YYCyv$} ʩvmXq؏#;5U#QgmQ'"6±eu�~&=mW/V3n/EAf֑UW%}DK4l^ЖA}zxTxS_} Lѻ(B^vWDM+K;A, *wARϕ-x;և)H1ՐSP'q- ,  >G/d" y9v-6˔p4#SиeD4Du iH%8Eed7K(/E].0!O*0/WB=. PJ5)NML yhą m)cp8В{drⴳ[j mEP"i7;8J*hqcrDk,v l{ 9I/?.֔~UʴJDpԏ4Sv!Gg (_Aũp "LBg wØ ZQk%s Vc]WyGoљrf$:E?b|Mk^ht sَ]ob,0fXZ mP,h` &%Ul"1jKa; |8:ȤO7*>ԭ>0$s5G8F�,W� N:NB9 ys7Z* ]z Χz!]QvvC ;N|is6bPMS> >A` E{dGW2:$&x[9(6D',J>m9D81\F8` n3=e [=;\vwqjjՊ-&K@Ry /HE#A(̦s2 OD:jLJ%rפ2wxk+U  VV^ʴ`;Sg({2}Z Xp.* 0 xk:M}l2@"Pvn^$3&NO1zͥς$nҌI8ǧU趖yAe*; Cz|G@pˆɦYHT =Q3tŒ{ǖdy:r9mK_ifd. sވ{<a>y>=SD Uw[XTBs)l[r$]t'[ص]w+w4g F3r/ǽ% CUEʸm1449Iu(6i&{okG.W}85Fe2( .pGPLý#ܿl{-]]9׈abz ]U]<ä]lkϿ he֜Dkg g@1eR 9H`]rUF `*>VxLwƳ>щ86k̢dK'A;<m ƆU֋oO{1c ,+i=/QˆyGJj:q/LB=4}iB3״2K2±z)W 2)IVg)1^8?fK gYXvXjW0} i0$ΑIR)AWaCɛ  "*r0~Ҙ2"%~Fa/&Cncű/E8H̀}pyxAԺ8>$.,PWfyW FuSD섯n{iYI/_�'nSζh ^isG^ߚOڅ=v̢id*ʘ؀ނ7X ,~1Ӟ`@ ?d;אr YY.k&MX-Av;wWs358 "$}5SI/2)`]yW0e~a <Ya "=0髒B~KE#<_du8?^(vuw.i:_==N-RCSǖ+lsHJ95Pp=tZ6LVQp$&@Ø\%"paB&. Lt|Vſaӆ^h!\$~u7?+spǫ,'~ڽ�a[hSЌ'dJi/. b"x-{ڽ9(+ލvd+C`,c1,˸PtfJ[!q![g)/xJ{ W~[Q)� %H‹%{nt Ҙ)B eu^IȐE6XtPP�M­ȀVt7%s &,$-[(no{r#0ihx$(gWw"D YTF^p׶".e#:"g :A&!!J'k͕+,`6Q:Yd%%geH;7;6u.gg)]<, 70Wǫ#V.,ͥp -Dp)MS}*i[g&0 vhpHJB_Br =z%[eNQ/ /&2Nv*|pqr 7~Lާo=eqcPc.5!y"JVC`څ<M+C~[Rw\4@\kL\ {w8D߫ ;mѰ"]u_ p2*7Dj1p!).#XĀ6FO$ "wxCa>tx]IzW!%a>jc_+>\=tO}q _'#GѶTa\\`dR-=إql$qF {.M@m]ȩU[x?R06:Wj<Xq&O:z Nǵ 2kzm#Xep{M e/p77"͔Q^4T7Kg`^2*XRE6,qkx/@hs% +�:'ȵ3GdTÐU )żXgH'p_6ͦɏ(}I\ǡW9yi]Ăw=k<>DDL!f0n\Ţ}u&i.WbK#x[ߣlu6}k4Jujs5(P.@]~lqj=KLkVhc+4"5]M"{TjL 8*qYM2@|"c͕|Fjxc@|]Ծ" . D1 %,γ]Rҫt1ˣ/ܦI.~ޡ,6 ;�oz򖳥L׸�txA:&y;PS29D(D|W\/}_X4\c̰@Sy/CxhZȋ* `a5x{y˾ЫnɥƼ/?fݮNP HN:\gn?Ŷ` ?;1lQ�]Cr�ELΔgli.gA˩3t&뚢("0!uZ<+vLߑ|2р&-k@]cUֿWD?17s:̡ G*<籶a)RI2-DNȹ>Bm84kL"i`%0Rt8|"-ԇu)'x?pc1z|=t %{ BCLsZk:'kxWQ8+_`6m@I6M #cVpvi+n (\�s~hqB< <Ġ8Úd@dZ>>hTSs1Bd[sPHfDv ٝL [~‚P@U<ft? ހrsyBtҼV_K 9k@G@zv/zRjthl[7K/^s,GW|>czحlش�,}ă ; P ("찿;|6lEiD�E*rōdW-At!BQuF0PTF+*P@Xξ>FsC^$ W ZZd{+6"-69{pY?_ΏGCƬ >;7CSJQMxU~% +<3SH7WG ؄c\g ֙ Qp//= C C:p 1l?R%u!4 ;ae<}& sk ҩEҿN;EowLw V}rsP:#JcsDy jD?NHbja}5اE{}8*WgBI9M_/FYon'n</XJi`TVPt?|GcgbC;� ɪo R&"ESM<|6!6{:Ċ\rgH %3GuRMcJ<P8Y \WYs4ނwΐ$'W尲�;R7_/Y%j8Az=Qx\pΫ=[|DhSIǘHjkazQ,|N\O.p[)>Ç?^L ;=N#4 * z7L( +[_1ƙFw1Bgߖf弬|Б%�B)D\% ]^<X.H}?+'*s,YZ1@j{@ШLQN:tߥʊղɲZdr@ T65. +(K .OŇ7G(4ߝCmg-x%7[-HC@O)DFWJ\ABA�W +T>V.[x|?K"Smf  ̛ L3v ^lc֗x`7QĞ+!iɅ!-"5Y:}`O qڡ^f˸C,LQpMq-U#*ԛJJuU: z2Hpw.cvfcfXetcToW bESl-BLZ[kn;jONBC_rK%þ΍/H] u{u%bo`(D*Oܳ+7fo? B7Ѐc2‰YÙ zW8;iy7px\FAB]{| �ȵ}ikl0?(W!3{x5?w�ja"cm9d## ,ZZ]q P}Xh2V]F#Դh=pR#Ā � ܃$^'ց<ϠЏkϲ) 䈹}aWDܑѢJ}NM@W'G8#�!Wl}/#S Q6IYs֯U'X:*{;[QZ@ Ġ�dGO1lnWn9c2ꊜ;ğÇlEYL=O#B8"ʀ Ѝ9HKZzïwϑV0"#9R}Y;3t .i,3U.Zgk`"FIӈ<roAC^,(2;DO~vpE*6~scP] @ 5& 'Ѱ^ít"0!HAQ+OiE.xAvC :rنrw"{f2 17p( ,] @Iy 2QɪQF,6 .nj@׺b%%J$9Jb*Г zoS&:0_1w_R̪ˁ v3h(]6R<ܩ# .+[IW>j ڝzY+< &)PaM)B*,(:U@+g hGO .+? SyڞPQxL6E7u)3jeK j܂cSѣOP%v"MQR%V`gaI< "* dC`(j -=lR2ZtM_5yȫ& yq}6U0RH߄$߲ҕ:E4-Zb2;]p[DʯS.~h09kEĸPU!8#;\bD3/`rY+_Y˲uy[@`U0Gw_\aj;]G ۠ф-` ]j7ܹz1yW˷jVCFC+,ȴf"+TRP% !~I_qDּ0bg(/y8˽\d@{_oq{WyC/n 7~6MƅXG KǖۡxMj س߶l/ IWnf/uAby)@qBD O!${Yf8Y?CߚPځri( Xtc�ݫ!%Or}YNDT:>YaK#7&V?n[?q2 K8 ѩ9QYWYeƺbz_4A r?LN.^h|SAnP)8ծ?}^)v.GX :D4d;L2 ^.+\[P5 sGBX|u G#r@ vmU`,{B\8QA"*)C,LejA*QP 93VtN=l[Ř-r Ro09nFX M{trUh~<ʶsGAz뫀VaG(ߘ8Ii_HuC|OP4|Ex٦7`E:̮ؠ (wmq-O^C#MQ)B,%"CL_Z/̼<Z{6WQv0 Dd j-]#C,Lj\6Za1.sͦ0˥*hr*4-hGb""f#ZB9蔁g,ȾHxPpt[V)GS{I{ݴ|D#,Yp-/%H\p[ .$1N"g&X>"-$=RB, c&)܌m.[) 5d ߵgU{,UܘPS FrWjj@]3q[7'Q o{Y%󈢀Gd%E`Ax?#`':V zWW(@1jL F^ũj@7w\x>bƉ69IeYS";y5Δ?B\I^1w|埈U0 o!e0pӊ|,UVg%[h'7TN!j?9`U9x:;$z-x%D!yS >҃vyM}חBiq]ADffq_Ђ\@o*у#y߽J숈&> 8avM~dHL:1a1^ĚQԎX-3ܝ3*~ bb $,DHc*у*(ƨƸ=3ʽSGv#HHtmخ:(1";vz91iaꆑtS2RD{D\C/0t D N8j}l~{uܦ}L$AMG+}#bhcU@23!?Cb OLd(׷?I辵ӮWfecg&&F'^K|}N) ?W¦8z[u5fzO�VDc&|,-rVX\ 4]SBJbESUbk-\l*+ˉZ忭_ Ja^C朸b.% P5r~Rgm P\?C> |ϝf;SIN]% !fiY;sft}'u']C A q!}D6,Ax=\mW%w+vp@ĉs[JAْ𢸉J!1<iY>;SN8`F l 1۰Ts�r5?nCDH&o&u:f>}dQvw0;-"RJw+䚛h9mG}߱;>ah$,DrAG{\O Y)%Tw87WӃg42$ 2Ġõ ,- `$v j\SZw�E|݈K\bB9+ݡ|܂CUɕ�KKGN]c rF♪DN֪i:t|K0= <`hRKF-ORs/dWT7#s/Wb}4kF{yɔ}th]¾}Ru$Y9_-奡X\< {}�z\ Rt* Axp l.S+iȗ "'1<mA<}wci雱m9ĥ#vh+6  \nv#< K|Z7ťlT%!+/ J:I }y}bG+6][-=CQ' 8}PH3 ˨9iH1/ ?_ZFX#ͨ{|_yk,"n#t&l5D?D9ƶt=CABaAr]%Nf.>#t% Pf;% q3`ǰWz( ő͝:V4v`+=lDRݳ%tՀlЯmϖR8—Xn8M P#K "Go&zc/P) u{.{uIH^&:x[{<ϘҵSh= uiGNWM_gQA0_ v3m谉aA׭(sa#jȵnP[Eeb#D ga.^>#iC;kR5  SӍwDچ:i}(; ƫS!?[]o0&H]{7*�au 9np!D{ԗqx kB&,ſ2|shoHJ7^Uػ{L`l(q~PvY䦶g08N+i7VZD ;eʼ-BӨ(.;db$P-Z*0f;c$+މ(cNA Jj~YsRT1k7lV`d) ex:#) V*q3>BL*X k?<:STA=mh|{yF: Mhʬuӳ顺0"z<7,;�@xOϋrzX9㝞H& 5t`n' G{>zuq(Nq7pV_8aM/ZI/G =hHbR' x;R?eb4\q+S$, [0DH NѭGN̔;r 'TsʨÞ-xtG!)3J@_^GKto|Hj\ƾ AJ�X<b$Ip�s. P Kt X)q%Zqma9mAhǹlef_b4-HM6(^~P{i_d- \u@B*]1B(.~Yb1#v `LhLt\pL/ũ?X {;�u\ۙ^н 5X \M[{/ ;49 o&;ĹTȄB/b`K'S>5_m8vqXlu.c=VXwȥrS\nK7# ( XGؽ6XO]Ӈm�=kP;:0{xAW't|.U=Zҽ-표dƍ BxdZj&T5YVQt 0ۘ�15=#LMf6'*z{&+Sn`#uTm)�~䏺ڤYs.@dMQZЭEA Ks8&"nxxK^�㱙Dww&xe*3>(Bఄț?әV�@F۷W-rXoq͟uk]t`PP nZ0@cj)ʑ44`/^ 0jy̶F6 _D6p@hN:O}/ e#m11ϯ ?|Q*VADSDIhӝfe#W`05#qثP"1r3lN0!^4_�\z{HA{ +s揄i f~#&:QYSH,qˀfxS7$sf F.B8Ol}) Fc \fE$ R DX~_;D@ "ծEPo*LUJ�Q,(j$xQh _w`PTPfPlhpި.]bY?vG"zplQc &s6(Ry3C)Elޟp^ˌk<6q'#Rl�}g$r"ԙJ&AdJAKS9U϶4CKc ^)3HInC0cgAv`*Q\~*c}R5Qe>@- ؾ|r +$ .Pkh2ѻ,X.ʅK}vR%QO+Fz"!'^Y/[Fw)L<�тzEcs<Q%68}h͏q& K$AR iV =gc*Yˑg*Slr{;"҈Iq>UkQK GP&MCBa]ʼ8A&BC-{-QĎ z{y\&ی2w:Udۗu)&b>{L22(W>r}39lf1;K&|F:րD&Ieks1u4\6ƭ&Nb"CQߣE݂dImCJ;'Vݟ" -t(읧Q <ǩ@QxH 9rA<JS͹7Z/#lQ鯑Aq/ߡHdu55whGi� t{]ʊ+jkskkaZPAsSAǦsnЉ RM٬va׽ث0d,fwt ,Ng=KW͋j*"`&E]qXQd_Lf4bgi^~'O;^pVqs.'�1Ê#,áxe6@#gf.9,1/ vҋ1BB=wWnWo"DKm HnE" BS~wPo~<U o&Ec wK gvrޥJbxRp.omu_<5a)`5{0.p7Pr,�_ao;Oe ~H!377?[@QY+mm|J K4qo<G6l0<mx4'2Z4M6V8E ^,*rxmؐw#ʫ q{(g7R/˵&`qs_�7㷾2fv– 33q �~~d<#ey"j^TEKA; i }SbpDO VT4ocLDAk?)*֯j ."-]C_.C2"%#יVy6[>|C)X&u(}RA#P}(!Jr }uLuKBb@,A|�ĺ?fK59m +ECı-E4`F%l̻&$w{y6ȬE n{^Q՝!Ha\C\]!H)3*k}S㨆+"_r}Bl"e\#R*B3h߻8|PO레P%<(^z|fqPCI ;|rS(РÛbgx�]@`'Siq^!~_ Ң$SFFR>F,-H!RS| #V 2|IBD-˔W^F*c6pG?<w"Gx$,S8g̪op4o]!gːدS EJ8LX� &}pũѩ5WR}(_!i}BMO]g<v#*wUM9~byUD5HG4iKx`va3 4_P^tīo~A*r_?_Uwܪ؄HcnFaz3|%Fӎr0߷D@KpSz%+E JLf/tSV:#O+hig)w\dzo#jN5l do}lѸŷ݊cCW]2Azt;:W--b|ຮS� MQgR17:S3]!&{fN"q-̠B%jם;)oI]00Z%8q@E+~aJ5̞"bi �)7�,^)|Y;D[�^:Ae9e {ʼn sץ*M/,m 1hPY+%!fX};3&mAv  ,䢣BwYT:w �7`wKR;FVʌ%XU%e>8o<'(iL-2ؘ‚~ѷp<&>MDw rD}9-x|<NY8x  ؾ.ń7BVLFw!Vt:k(GHC6XЉV::[!!Up)tg81$RB8|@e5-S3n'Ak:>9(4ӛ#/'rGsDfG {VTf HĘÕ6ֆt*u!I{]WJ3H/'36Ikʤ@CDL!A{&Z#cl, 8Y$}D@u2e&Ϊ"ŷcmu;h*oq4L#$񾻬3T*<c`:pa 3JIyoXNʁѩryF_MhQO5;@:6Jp΃F1Eg{I 6c>Y`Xh\{ĭ0F<CtMvP/u_ ʯuwYıl;#T&x0W芽|JKJc4ae/WaCX/^[:SwU`-qm4 _E VghM(gu"@$~ƭ 7ҿi玈w+JLgzH(܂M|Q\! GgSr=r<J}Y<Hxt?)F.cv0ţO.@<$A9\Q,]_0M55NW-:dp\3S/.QR8 "N>/^Ey 40-57 '֛$ Cf4Shʇqe 'wXbžomX%d_9|o:(}$}nvdU<%B l!>%QV*,oeF"i =k(Xؖ=@�Gp9cX RCk彯!ZBӻ`(~<AG> :"]v$[;iE)WCӜ }餕w;϶ߐgv,/ޡ1W t閮QX'\ Kkd*cEX0&F{uSЁi�d2pY`nÀFR�k/HVs�cۡt?㽞DFgQRX5EHd�8.bWV^5p-3)oLws^1v}vuQ)l+)HHw "kšGKpH{dh?L(4=B8q*Y' '9ށj|k?V1" xlG<~|7HS\]529a =ݟ=L@$EA抔V͗ )2N6%,VΣa/ACLR8UXp{Z!>Ԧkl2UDk BK)lPľlz>z{' 0T v�*&Cfέ`kd2EYNLPpPѧԋT8c09g ��GߵR6a*K{iԉɐ : w 0=#%@+7$gE0Hv7ou,jla@2{5^)NLW}o]Dr㛄w`ㇹ-Ԉٶ^[C]8.<[Dl9PrEQ1Y ͎*=- p{1Фa{y>l&68z:${<`!GD/7aˌA޶EK#+-PF\<$GgG'ƾ߯ \3;j[H_" �XhDO8!/f.H^HIݗU1Q<1��A:Q@%T**Ed(se| QDw"To}oJmַ�2=xI AU4s p~_@Sk2w;r9'�:bTH%X;_1VՔ72P%j!Ğ{�)I_QXQ 9"dgzdvVf9>$wH04Ȩ*ƈAYE{`n|O@|F0 Yg Bn R#XXRT=9B( (XKa =We)FNAFWK,/lj\/Hѥ P*(b{AdЭTT(44Edfqb=; N<}e`QW\26{;*u|izh;=P=5ݤ^>~t~nBWyj[u;91PցrxIq|R2PgN]^c`>|%5`!b2H ݧꖵ;qb'h슙|W8IbK i[Ȱ0oO�r{aw`vet.E^FZ#POQ`}g}__ő9P(Bz}l.2 /FaB`cL>dV) _{/"9ʫ)d("A~~Z�QC[a#ȶLru}8`\sRR0x6\",٤<}1Vz <+9?w00]پ) \̌068y"3hpNsr݋~ 8BXt"5a%΂8] LvbdrXʼnmx<NXC| ` stlxOC$J?s혡0ƾ>�]%(p>Y|O(8IJ:B4??jF*% z.;HĚH"26ց횼ք|P3�*#L+ /) NY͛Ѣһʙq|q}L"KSˆw&m.uL 7 <zY]9Gh?S;\s6[_ UR;Oq'ڑb$fXMHTb^2VY" |Ƽe .\ga'xŨ�e_!Ӈ!4 ,TD *̐_ӏ}ʴN41KErU\moxY0h9>+qzlѻsA.wfL@-:=$H~<-E@Aeii:bY@jL3YUC~By M^$im(Vr2O\FyLmO 27 r}M9L¥<<_?Z-f5kJ~o%Z@x0&K3Qߞ[…Ι*A1;swMĽ"1}Jq)ik8xpv^(WE{b8-P+ ~�C0yd ?V#p|R FÄ!2$|ruDX{efG_,0Z6!0vv hhĴ'iWCe�SB\ҿ ZOawE7DN/(D޽6%4߃@ýV-KDYƹbHcރsЩ얢v];)dϔybC˸GcL;zNB]z,rLbu�{:E8NPLH̴}B$V(!RXHQ/^qտҁFb5cC0FMV=~E.(Jór;tL(-5?.˹S_=/Š/"$8$W8/+/%C2O8HJkʿppڶ˲N,*`o3ZF)=W֨ӫHӐ#j󶎍عG^y>7*\Bzn5?o+,{_ѹ5ٻ@IrV�[˲[<:/bW ,EkGΊTUG_f cfPETe6飫%rLItu 1<u>u\"͎Qu`mЏ-)%c7]G`9K8} So1yLg!F u#-Thǐ69VbHCLyB%XWn4e[mq[s<f‘*ύ.+2hC* da8ysEc~@ۦBgrW•^a f=YEAvEp.ww 9p퓱x� KE-q{I1 DPױ#T_'(kSMQcrŬ8 Yژh5pPjF4j}ʐ�Hsjf6"=dXddsR 2YfyqL*=_5?0bbx;0̒7{fVy 1Eycow0' ˓c`R]P!:JC0(euY*Nm&>b{Ưq;#m(K91%*v!20R?%،aa:b?m`gP\8u� "Jj%BĀ3>x|Y G`Ƿ�'oTF u#FqG3s-ײR]E 08|hrHcKx#=W@2;]pm�끹K󊌟!F}ZWj�WC,h�)R7WeySRY!Xwd m[Z \)$!ybB.lIwԳP~.";/xO6p%@1 ė\N۽԰OZ~%fK#249_<%N_tneH%gl܋PVoYJ3:>H&xr&fn+]g"p(c�k]&69%s /Ηʬ75l&ULHx.믄cg{p@&c.xK. kf3|q udCu gqν~}g.A D|j s㬫f]籮<\){QZNPt6` Hw 5zdI#ePMxêPi' ,&n8oVٔZ ȆccNR_RX̲SQܒ04 ?M N1v=X@@G2_@CGX!w(-2qS i*'n\p: z{ zgOXz狝iKl>" Đ \֨:]6t;0uר7.I`%3"M4 ϊ{X-ѴDqہ7 W&T>Ť8f-')nep,QXL<1"7R8Ejʰ+EsF$@/?HpWX lrڦO"f[#'XB1->$i 0rįwr�gBRGmRS_'ǚ?T᪲rMzf|[!N 6٭vL<QEP?|QJ4 [NkA߀nhIntwHM<>?V?jx5to%^/�9|d~im.\B_FCIrc#c7A?}jqYQ ߮g Byż•M@`fKDxQX}1S,zdfJ)VR3_TH O D n pa>F Z,-r \(ыAPTH'aNEtŔ:I s �EF"(lԩ5T,%E +~?jl=../ $7%\{Oޒ8<rK^FkLvVJSȧegrq\P 2*U:#Yxv):g`ۏ ?mQg0j7C6}4>phABTgt8 [v:1!E;�+XLPE\ÆkG½u`!%񛟸_"kY"wIHajyCTA섐3]1UYnr"Bqg|$ȣa}„܇/9H: n7kc@{̈AߝAOh@4JN۶Al=,!+}>}(1&{ 3Z<ic~ԄM<-as8NU;߯Aˎ28깡|轊~)Rfsv;q2븼Z3])=kJEgǛ#Hx-$݀IT O!h@4ALxB7`8(l[?^NǬW W+w$_QQ Ba!Pm/-hZg+SS"%ZA"N-z{9eZ86*=~ gPZÉ̕T"3܀_6ީM}wbH)Axx q6�.FXTֹ |V$6h//aLnu!aVt"B:;!(s,QWUI5*2Tќx!k|s)1Ad=ؕd%08D̽V'p 6͌s5*pܔP11ŽJ=p=bu*Y0(N�Eo/⮪LrqK^_HΥ&R'i{1Nn֡Ҕ)bzTx:k%ڳ ߐE [)@~xUJEK(r/s#䧌;^#{"56a1nQd$dR'x|iĨM%t~|g`hR (`Uĝ7Tp ɐbW)9k%ڠe+wƿ P #^8d=r( M<q]֌.iH.̓Ʊzqyn2łߜ邮T+ꕊI6ڵ75S9W5.8CN{O , ,/r&><`q9.oufg#zmRd>6pOgL"'r-"^)&Ji:) T2E2PgE־f\kJf)W}ߋȊ;88SQ]3kwel^94:D `Rf'P~ؚLlZC2D00"<xla*Z<zM$Phr>ރ4D瀢ޛNB1 mlv맮3╫}ce2&@%K\.Jd>#(}|:-p RHDLM0I( vQ)$*` Gj\9Ü<op+4nA٧ /޴U4FTCx&w�#>$z6 {1L1`) JOGilDߊg�J{h; M;@篲!.g6'dE6}wi$u"d5O>`e$c`j`NjN�{^lO&L\IJr!lwT#kȸ0x@?fn}`7LK7gN>+ |pͺcE1׭ɳ5׋>54rdmֈ}S99}3&/ǟ$6D2Ԉ=`-~H@xW -a$gj1VbjFtH㢧zbx (c\$F?l"l Vkӯ:"8ZCvlJ)@|ʉ�ƦEkq.&$ lޣrXqȃsF'=V oxmDgK-CyT"�sz3穕EP:٢B~y; fr|~ ?X^%XV4B_&d:cOŌ]#hE|@.t h_[4YN{eqibf z#Ƀ  %,I VfLD}C43o(mDٙ97E ݢ}ۑ3J +ЯFvq8 fQP3Ap%D替i]&AvwѕMO 9ӭO27JǺюB]ibρ34kPTW:stν#�NR.^*}*MqELUd'b 1<tR }GQ8X.dh{c82mbN Mɴ=wPqb#'gfW(V<^bx0{7^)xiJQWRlS #!'i )!x{CY"çSwX 6bD4; s96cg+L?@$r o4q\ׯ}6y"y^E,쌗SP_M�u @,e}@&t9^S1#>JX!N0%"sda+*Xa\%i6!5~0c '-hC: uU#.!șٌAF2iaܸSqHm@U.a4E,Fv8^P6r5#$zijdW!rqz{tI$m9У^; i ," *c{ý%<`wOn(whh敘\U>d @26}4m i#h1%=j1~}.0@U!ނܑ ӻ~rq3v׺D>QZv"Yփ;_%FR^�lA@% "]3H ˟@.KI='ziAuPtpcƋhtinU1{||XKGJ!ۑ#53H="er,iD#h9~EѻCErJɇܼތנB:yy 2T4XؖjW+1IݘOTUܨY=1 �2!]iN0n΃"(|C,~W X7o=H%h= s5<0%CT*O:kD @xЂR<dv{bڃhH E"ԬaVF<aC1a(ȫ#Y (HOs b$̜jj 5u)($Xs,gy*1D͵-zHڥ0q֋O{J|WjrJ >nV>Iy:=H 43fj+CjV,�/=ZA @SKX|G3GBIa<c#{=N9 Ű˝ }yI] r+!{c%ip@-5 `}ky]Btj㕿k!Frs>b{W2 m>b{@J y&[N{:쬕j\jV F `5voȡc o٫x;v41tTI+ްC@73:+1%m-'xOkc90 w{C^^oĺOkqKBNƒC~^媎TCXֻ%7N1Ў5ϼ/D0SDž'5D�yWD1bD5P. i9] #>2WHBуx# t7.>D+֊̓!)) /(CB 7 ?[Tbenb; x'(" zE1+]h]zߘn^3|9URe j𗤒D~IFśҼ@#ͮ&ɫ^x@-zKGʤ)?T2.t'-P%F>4$*?OT<BxyI|*BonC+T=E9E/*F�B9-Z%X</W̼h1}eYh.A{A6(EzV1F=5r[3 %Rhg+U毣ƈs5<y@ʱ#~ !؀Tj,S]<e}yxw %e72j�(xӣD-z\.k u9H9As%et V4E)ub= �{h�wsIau;`C4n8 xڬ`I&{6=|EP ?6b(v)Mpx2~)o03TzUB&r:~0 3rvTC)Qb*N|!yDQ}g_)E/ӻZ`RX `"uNJTy]�(9-Whd)HPq$L)N:_ B%_,06KDE7bmcmyk7o4z(r/0}}@{ Ѝ芵sbwg0EGA:c?+|]<D}D۲RP=J%X0)[.! g,C$a>nnM+>"*bN6p�;a?eK[6dzEc@0FRxxp(òF,"0M `568m㔭˿)[YE~1&b7_xkŶVBE(TŸ ˅?}Hл'br(_9;_$dI~g|សr tٸU;ϯ?GA>6.jZaZj>HFS^Pܰl�%*i1~6dkT( s�AOiSfcikOl7촿L"_CA�}~FJ7'Cw~ &t{HW4W&h�:(�Ӿ6<(|Q+Z]ɤW`w�dOmʋbZI =O4T}AAhhiWXrٿ̫{uh_AM;ajq(aPC~| f'ċR�4Δ bİ`#4 ?S=9=2H6. 8$dꢳ~*SC 6Gt51YMTIJ~M0D@r,x@ߙBw\]j "W<Vɀ=EP܀%^x)DVҗ⠾# [:*<VK"\irc-)"A@P̳g2A'@֭+i|%8?hyӯ'Ac?8X+av7CT*L3?b OrڰbY)@OgIfD}//1a0ynEIŴOs7qh~SäﴎP- sCU[oH6�Y\$'@MPQ. Q]Џl;F$OːGA)_oȞKgU1b~5,2BnS ~e~!Q^ &_qZ~uzJ׷A!)^_/X X$VF0?ONAͰ{"[wTK!M~WשŪV8�@G 9o/X>hU|~K$:_kﲗSOF1LbK?snI 'y+]!N\j* �,~IQ� DPU$뫈Tͪi {I a̽n끁m6轩q%a'o)0hૅP4a=m?ddžؔW3`<ocj~4.>z<07kd1_)pSٺ_NO5@$wBź%an6LEiG&G^^껚~ܿFB2gj|Vnf%+""0+[d* V~HeJ|,G3惁i~d%Y¯i"C:[{Wî)]CsgbCc/,Z3@7K& rKWgŮߢԑK#JYn+2d`DZER Y (-G+ ;ޘ) 5Q{ҝM4QMLKmRnAW\bǓ7_j b_if$tW;RpEu\Xص7%D48Mr�JL T/ݒ_$D0|F |U(r(q47ܩl V|3rND=wm- ww^|X-I8|M=y 9YP#]$ o bξ^(Q 'XR聴$ʋai)E~�ݩ�{I\ �aä́~~:6R޺˚ƌdʱ!ͿQ2D[ py(N.t[>vg[[-,>n-.Zq.i~FxF|ɖGTK)&eH5Bq0Q>7)X q:W9zo8|;z:`*8c4bWu3`Zj.?a^ �%|S|20 x߱pgg�e|Ru{ Rb_+^y?4=X(d>fwx+ LDcYך6+waFi195k'ǍIUm^QrRzF̣RWY;9ۼ*8Uvwd8P~0WmDKq}*Bh>B ?`'nkp qNc8f$7D5%HNew04B͇;fʜ 'L]@ⵃ4[c-@&pF56?u`IfXXݿO$sG+elNYE]w[`ΈƺGaqxifH``fOP[ӉO,*E`&Kr {q#f )[BNCn{pU2/Nbd5g^hE,K1_qR{_υC╤Ox1}&HDiZj0/[o4C :JuBC_PZ�+HXj7jgQ"]t5wl|C>8o९]w{P]Izб#+w5$F˻\+N�]뛃A@nv[5ѝᐦC5:+EgT?;Sao?erdݯUr}rٗs,Ac޸o?~?+ My/-jo`C32i&4Tb3x 8ޓ6 ǫplGzx PQBmV'4 ulkՏVޝvj~lOt{fP#WOHj;0] )vbz@9&1^S?ڀ=bq�.qDNoz&6-O'Ub"Dp}ʌ!�eLC_\Їk:N9`;KvƷm Pp<QN5cnQ0w-W`NdJ0O+yj_⍫Lpw]Jg(Ĵy_ V&J\"X�m܌f} q>˧4̐V^п3Uaa η!˫iַזbaz!=W$uW9D%=<LA3R!ڬ-<M6X6~vMD~6e2X߯XW/WE@T4,}пpnюgwrԼ?/Pm?kH"gԐ+n|{~%,t06O1e(“<Ҏ8͇PK'gvd`y֎226gba#C*p/v^bEM ^9!So"lx�7abkh w/.+iuT'Ef 76r>X#e^|SwR\@Vl6PbrcXSُ,3~ݖF4>Ryt$ 'k~!(/ <AC8f. ‡YqZԳwoF@;<<i6W;;X^]L`HFX 2'{M$yX2˩B"&Q uIe9SR0WКxv}v)}я9bDv;th @\%?Uu%\g*gzy0jCB^ώ1/kw/zMIboGLg*]fd[R]*~Dž,nZ+~S9LeCD>˜o:)5)*"cn; -҃cr# Va;6` DǶ@WZ|H_F@A꧔ۡ�]IL$ UO>S{H TL]4_w _(qL"B�a#}j^FDG4m~r M+,<6=ӏ uj+ZgUpk0Z ZɀHޅfZS9#|5pð&?.8>~1挈(9X_an6 {[~g_&ĹB@ K5L}\^V\ץߧpS  L)+;&�qUv~Wyl<;R$fK;+fsSt>2Mo>zt$WA#uW\-;kWͱkoC7mk8HǝO�;QmK2*鄹Ty$9z%PCM@^ڌ" ]2yB̀"]&P]q!v 0L^n3)fw+ [ VMڶ|=!2~ϯ*Ȑߣ擿!sx޽~*)ru"c^bчJξ7}$ƅS4},qb?{6qȞ >?ȺW¤BDrd_C^EFtҨ1֝6t�[1uĽt+̸]]_SiDv=1uڗ8YV!(}Cs9{1LnW¡{h@졦78�)q]7YKhVMry[vwmT1 8@ÃM>%YWڌ _S~%Bf#2sA)03n-%qz*C@+(TZ13ܹ,\kĈb$ݧ8g1{=V `F_qE E`׊ IX9VU;ľECsXiJYJ*Ê"qML%%|/� WSs/C 7df2KYiCES)Vj:OD?ػ][n:WdQi@[6=BꞵB(@<|Ԫ7v7v򱝧Tయnvݳt'Hjۉ'147?m} PfoxXu`KbAEjZ}.v~~RjLF tnj񥮭{(;|I�}*-ס"K݊f*3U}+HU㘬iwKNj65rm1ݒsVXN=+L{\a|/I v6dо>o[62.=쎽 Ȗ`i> ׊s̅n!jJŌa焘DGϸz?; 3$1.᳛1OR #,vT@]B}@-f+W3:ǶA֋$0< K -q.lW۽ 0MiB 8dn/`_=Z0mr㳼fff\҄~쎗n;u<{$nֶU7vICՎ)Ťyζ IQ)ˎ0aG{FJ Z]cgᮓWbRݯ7jYy/&]hwpN | SvP!Y~hQ3zeQP;Ѡ vר#37NñʦP|nwm٩WfnS<[ϕq͸h$axi㗛<4C &tW0oXD۽4RVNJ0yB9mbf;o|_bgYŠZ8n Y^zK;aviRw,)fJf({mh߫%} whޕ2v|vAƛm/RN;�W,MN`A]gdQIůf#X^XgEm-)P:ޫx �dޛ?pK]lѕ>;>X}Z~P)ge(ʮhVnw]T=lӚRv3f . k[O\wW>qOy<S_Qi2a\vZIf 4F@Z="dtT`8cJfAc 6A,KY[^raz[LtLרּv/\m cȻ~mwͰE""A KկAvoc,6Ke;m0/[ 6_zJן~4oG7lօz3gy| gR|,3C={gx<|agx<{3gx=z_ei?e/żĿJ?;j1>_A?+&hxwy0UxsnO $+B?{&˻ ?/U ?힤옙Z:~r_8Ionƽo_[Ž3}w#R?ޏ({[O+x^6 ]j\"ϪዔfosS<&rQ\_DV[a8"8hR9歀Y8\[Y1O( 0hwœ!(߸I q5d+Z9X A)<y|-հ:'RGQɈڱ)Y$Td$wFcZUfB$ p )7)u>FRPQG^K]+`lD)zj ݻm ̎Cz9\tRVfmC'v}ʿ%|p2CR ( J-S ܠftp9ϩ@;^zRum4#s%fb' 岘[..5DU* Q, F0 ש7\94|"?Lo[VPsI\QvE)ꚛf+.*JN9Qͺh]pF=5W P@mRF?>8{(2Xi %ZOYQL,,&_e=dqW+!B"5ESJcV/0O6KCj 5A oJ iU1807TdM!RC!V*jy60D0+6&%xPyU (A m!l%&rJO t]ϏXj=aTJʠt1wQˢܓp ӐY.N+!h7CYY֊'5ThX`CGvweE#„B 7n,^Oe g =&_.P1s~pUP>a^2QsW_j75!"A#ÚяQw̎0 A؆I jS'{e#F`o:[TLk7|fD9SUaS*}=u gpQh0LBUEf9C;!)qXl+}X<(CD!I0<T5vETQ 7QlN}"PD;[1pcXMF|O߈Ck6)VTY$}BSB59)-XdؘbQSۊȁe ?]P,0WVI&;m"C9$VR@0486G.\2Tx5gQ>H9fCXZIZ:WJ!Dh9UTBf^fQ("k%iajjUMaCBDxQ5R.H|)+~":\苸¦(3\"5qZpYp?�p?E ԮK#n5 ܀12 qѽd&k %5lW n}(8|䰁vo?SǎO#7+ĞFcoKy6َ 0 lo&+0pͯN.mZ ~mݼ}(N� Ƈܠ/PbY_{?3o %fѲp6!:Wg軦٠>cvy䇇_v)ޓ}le ^ڻQ୲:Ò}`86V>4 g VWf|PA)*V+P '8RC> 6XWs0+LR]h!ȶY]0ӷrݘ 8< eg XѼȷ SgS fKI jJ)0 1kV澑bRLWצ"c%.�K'V[*čBTq_\ȵ3R [5 Nc-l *:",5tY =LUg`+W饱˖v� rກu5i )Tb#'J N$ީX^D%8 Oze5aOn@83azn zJ*gBzU"JABByI#a-*0k2z(bwX,`r*2P,^ɕ]X\Nei+?GX\ʢJnLnqBRLrW*zG6J6)kWU!S1 bV2[GT7@£%J !Pl ,yln囻CUit@eT!\qe3DpUO} <Q1 $b XS R8C*ЕQ^2xU( )z”*^imHZ9"0+\8L[L)XpVo,rgvDCLŠaxD`'#X:#H9ӍW}&*)"bK!SB{Lj9+s6x̜+ƒ+Mщ $Q.RoJs##|tp 8!bso!*(tyEEJ1jP+=TܦQZ7#AS)>�*zB %P (R\+)#8*iȕƋ{.mY0> rj1\=*6"! )BX h*I!1T&G�i Ƿ!ө7(fuf|4qΝ0 U! .8 J%?PbEl=̈ Osl4D&dW2&DjPn#`a:*(qm!LR5r'G)Ւb�6A` jܚEX]֢+#=BasPO$G^IweOJ"E Fe\~*]h-jr>ǥ':*VS5c2A6`!uNE=MS4Q# ɅPR@H10bhoQg@DJeD>qP#PZ{_TN&W%S*¯D-ËT吰_THDԂ*Z;A:ʊ&zRVO`LMٖb? QA.a�CBo)2-=~f7ï-A"P#U➸6cPB"pUEܮYn(LD޸\ CVU".UŊ=Qw\xƸý|*sъUtTDp!Sq 4)-h(NU$%Gm%`U}2FNyz<pyJUxB&Ty̝kzA0rYy^WATDDPeQ,p-hh)0´x6X,^zߐ<oQQaP%A,21m|/%ȄrtB�qY DJ"3$[iP .U5w&!aiJ8J=!Γ*%i\5(so cȬ(�4ߑVZE)zf'MB) tB`Wr{"F$ F^"<y$]悃�AB "W2u̚>Ox£8kZC^q yRN=<�ᰴ[a&R@rAb&;Cpp/eB>TwB/e+|-owK uAg Ȭ13?o<f(s^B|0+ss*EE~%%Z)5y5<kWwaHxEO]a^3|h_bM&@355 59&J?_W2EUzR,; KXkq�CcLRh6.q4'׫�t !gTK.x*Z7bS%�I{,)8\n"w'eVc(WB+AD`*SA"TT[=5/$zȑ3A�~P.jʡE|+i -xV zpG)Jm2Nm (X0*upa*]3FT^ WĢϻ@G?qs(Wj):eօscC#gʼ\Fm0ai=; k):/nQq(b-X9#1c{LPD*bvBA>c(PVt8ϙxR|Vpx*PA!D?TUiQ) IU':jD!&8~3WA:ȏ!ՄǘŴ4nM]b"%3>I<>=,'ծDK ^0\ANi"".w~aD%.bmPH3c_(h) $$f8@ }))ôn=lIɖD *3Q [zʐŌ$eQY eu"9DFh%,%Dd2׬)sWPx$Iq꾶qp2W]rыz:4Ub9"ް \.*z'[ÝkK9::DM=aXZB6e4xC:D*&baK+s9 !Q)sd94,0(.^p<fA03J;g܍"0)u)!7Obo!dpE["D:ĨޅH%$.J,iN3' Z|' w䙧΃^V0Aלz!7O| ! e<8MhNCӤ  m D}BχAXENPU&\9?WvĄJx7|p2QPRC(.^hd5I+87'tP*Ɛ8b(1T@ԍI$2 fb/ϥ&VfMW^\.ӱۧ˹%>[w|\R44z ї~:"b:O<P嶆Ňӱy*t{ŧɸ*X23g1s-_Oi?~Oi?~Oi?~Oi?~Oin[ 4߿OǯU889U{}Vk!OzH_S�M%}֯^~w(G[aQMFF7'ɵ7&F7&:# &7ƛ`!7L~Q߭n"K'xs~XH60lhHdrt<$īIHf'$&!Yda$tX$UF:IƫIH:TRc$tx$ǫ׃7ErTp"É8^MBѐ" ? $tLdD|ݛoHțؔDf$3#) DvLHFFvLdDde$tLdDndc$tLdīIH2dGHvdGȫIH2dKvdK$COvdGOvdГ=S=0GOqGOa) =S=S*C#Dͮ +e #)nMQP*#(nC 4FQP\37sz錈}qP`*e0"5C$$_MByduN8ԋۯ&!jfoۯ&!^kf$+|_ka$n.STF1Q&c:&jc$!!:B#vFR^:^`$=:z2TGOe詎 =Sz9zCOs4i=9z14GOcii =z9zCOs49W=9z14GOcii =z9zCOs4i=;z3tGOg鎞 =z;z:COwt鎞=;zփjOvKwt7z#4 [j\mNhp?;#{X;Y;wMEh'1LJhԸ>1uÙzxi$B}\< #Zgl;Up_z8|:|:O |:Op>Χbc݂i sp$pvtޞy{ޞ!>ѧ3$>!\?s$\?3!xI0+!HI2 R#e:R#eL#)sKALHH) e9R#e9RA"HYHYER#e9R#e,HYHY) e9R#e9RA"HYHYER#e9R#e,HYHY) e9R#e9RA"HY[&ϑA"HIמsXn^&T|ޕ6[JjbTޕ7[ʌjfTU6[&*jaTU7[2戴jeT6[>jjcT޵QjgT|ߵ%Q`Te�QdT6kU=Q6lİ Wa [akO [{<1l%=c6lYİyڰ'Vbi֞+O [akOa+1l%='ӆİ]OVbڳiVڰ֖pvukw2a+o2Vf{)ʆ0le-neBuVް7lḛ߭vڝLn̰,֮[ [1ukeMb=o[ۋ6Ŭ{ԭݷ@sy{PvNhIɌ-nm'jFh*:kK[ڠ%ޭ6�mhؒvBϗm�vBm<%6.[Nh8l%ܭ5ugWu-nm'qve]7ޒvBgWu-nm'qve]7vB{!Wn]7R&6ޒvBgWu-Unm'qve]7vBgWu--nm'qve]7ޒgU����pvig.�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_formatters.py������������������������������������������������������������0000664�0000000�0000000�00000005637�14670056262�0020507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # test_formatters.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 9 July 2019 # Copyright (c) 2019, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import os import shutil import tempfile import unittest import traceback from unittest.util import strclass from .test_helpers import get_test_data_files from flent import resultset, formatters, combiners from flent.settings import parser, Settings, DEFAULT_SETTINGS settings = parser.parse_args(args=[], namespace=Settings(DEFAULT_SETTINGS)) TEST_FORMATTERS = ['table', 'org_table', 'csv', 'summary', 'metadata'] if combiners.HAS_NUMPY: TEST_FORMATTERS.append('stats') class TestFormatters(unittest.TestCase): def __init__(self, filename): self.filename = filename unittest.TestCase.__init__(self) def setUp(self): self.output_dir = tempfile.mkdtemp() self.settings = settings.copy() def tearDown(self): shutil.rmtree(self.output_dir) def __str__(self): return "format %s (%s)" % (os.path.basename(self.filename), strclass(self.__class__)) def runTest(self): r = resultset.load(self.filename) self.settings.update(r.meta()) self.settings.load_test(informational=True) self.settings.compute_missing_results(r) self.settings.FORMAT = 'metadata' for f in TEST_FORMATTERS: try: self.settings.FORMAT = f self.settings.OUTPUT = os.path.join( self.output_dir, "%s.txt" % f) formatter = formatters.new(self.settings) formatter.format([r]) res, _ = formatter.verify() if not res: raise self.failureException( "Verification of formatter '%s' failed" % f) except self.failureException: raise except Exception: tb = traceback.format_exc() new_exc = Exception("Error creating formatter '%s'" % f) new_exc.orig_tb = tb raise new_exc test_suite = unittest.TestSuite() for fname in get_test_data_files(): test_suite.addTest(TestFormatters(fname)) �������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_gui.py�������������������������������������������������������������������0000664�0000000�0000000�00000003177�14670056262�0017102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # test_gui.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 4 July 2019 # Copyright (c) 2019, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import unittest import os import sys from .test_helpers import ForkingTestCase from flent.settings import parser, Settings, DEFAULT_SETTINGS settings = parser.parse_args(args=[], namespace=Settings(DEFAULT_SETTINGS)) class TestGui(ForkingTestCase): def setUp(self): self.settings = settings.copy() try: from qtpy import QtCore except ImportError: self.skipTest("No usable Qt module found") if (sys.platform == 'linux' and not os.getenv("DISPLAY")): self.skipTest("No DISPLAY variable set") def test_start_gui(self): from flent import gui gui.run_gui(self.settings, test_mode=True) test_suite = unittest.TestSuite( [unittest.TestLoader().loadTestsFromTestCase(TestGui)]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_helpers.py���������������������������������������������������������������0000664�0000000�0000000�00000011301�14670056262�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # test_helpers.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 9 July 2019 # Copyright (c) 2019, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. import io import os import sys import warnings import traceback import unittest from flent import resultset, loggers try: import cPickle as pickle except ImportError: import pickle try: from tblib import pickling_support from six import reraise pickling_support.install() HAS_TBLIB = True except ImportError: HAS_TBLIB = False def setup_warnings(): warnings.filterwarnings('ignore', message="Matplotlib is building the font cache") warnings.simplefilter('error', append=True) loggers.reset_to_null() def prefork(method): def new_method(*args, **kwargs): sys.stderr.flush() sys.stdout.flush() pipe_r, pipe_w = os.pipe() pid = os.fork() if pid: os.close(pipe_w) _, status = os.waitpid(pid, 0) if os.WIFSIGNALED(status): raise RuntimeError(f"Child terminated by signal {os.WTERMSIG(status)}") elif os.WIFSTOPPED(status): raise RuntimeError(f"Child stopped by signal {os.WSTOPSIG(status)}") elif not os.WIFEXITED(status): raise RuntimeError("Child did not exit correctly") ret = os.WEXITSTATUS(status) if ret != 0: raise RuntimeError(f"Child exited with status {ret}") res = pickle.loads(os.read(pipe_r, 65535)) if HAS_TBLIB and isinstance(res, tuple) and isinstance(res[1], Exception): reraise(*res) if isinstance(res, Exception): raise res return res else: os.close(pipe_r) try: setup_warnings() res = method(*args, **kwargs) os.write(pipe_w, pickle.dumps(res)) except Exception as e: if not hasattr(e, 'orig_tb'): e.orig_tb = traceback.format_exc() if HAS_TBLIB: os.write(pipe_w, pickle.dumps(sys.exc_info())) else: os.write(pipe_w, pickle.dumps(e)) finally: os.close(pipe_w) os._exit(0) return new_method class StreamProxy(io.StringIO): def writeln(self, line): super().write(line + "\n") class ProxyTestResult(unittest.TextTestResult): def __init__(self): super().__init__(stream=StreamProxy(), descriptions=True, verbosity=2) self.stream_output = "" def _exc_info_to_string(self, err, test): exctype, value, tb = err if hasattr(value, 'orig_tb'): return str(value) + ":\n\n" + value.orig_tb return super()._exc_info_to_string(err, test) def __getstate__(self): state = {} for k, v in self.__dict__.items(): if not k.startswith("_") and k != 'stream': state[k] = v state['stream_output'] = self.stream.getvalue() return state def copy_to_parent(self, parent): if parent is None: return parent.errors.extend(self.errors) parent.failures.extend(self.failures) parent.skipped.extend(self.skipped) parent.expectedFailures.extend(self.expectedFailures) parent.unexpectedSuccesses.extend(self.unexpectedSuccesses) parent.testsRun += self.testsRun parent.stream.write(self.stream_output) parent.stream.flush() class ForkingTestCase(unittest.TestCase): @prefork def _run(self): res = ProxyTestResult() super().run(res) return res def run(self, result): res = self._run() res.copy_to_parent(result) def get_test_data_files(): dirname = os.path.join(os.path.dirname(__file__), "test_data") for fname in os.listdir(dirname): if not fname.endswith(resultset.SUFFIX): continue yield os.path.join(dirname, fname) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_metadata.py��������������������������������������������������������������0000664�0000000�0000000�00000003504�14670056262�0020070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # test_metadata.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 16 July 2015 # Copyright (c) 2015-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import unittest import os from flent import metadata from flent import util class TestMetadataFunctions(unittest.TestCase): def setUp(self): sysctl = util.which("sysctl") if sysctl is None: self.skipTest("Could not find sysctl utility") def test_get_sysctls(self): sysctls = metadata.get_sysctls() for sysctl in metadata.INTERESTING_SYSCTLS: sysctl_path = os.path.join('/proc/sys', *sysctl.split('.')) if os.path.exists(sysctl_path): self.assertIn(sysctl, sysctls) with open(sysctl_path, 'r') as fp: sysctl_value = fp.read().strip() try: sysctl_value = int(sysctl_value) except ValueError: pass self.assertEqual(sysctl_value, sysctls[sysctl]) test_suite = unittest.TestLoader().loadTestsFromTestCase(TestMetadataFunctions) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_parsers.py���������������������������������������������������������������0000664�0000000�0000000�00000050736�14670056262�0020000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # test_parsers.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 1 October 2016 # Copyright (c) 2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import unittest from flent import runners CAKE_1TIN = """qdisc cake 800c: dev ifb4eth0.3 root refcnt 2 bandwidth 250Mbit besteffort flows rtt 100.0ms raw Sent 69962090646 bytes 73766402 pkt (dropped 95, overlimits 54359263 requeues 0) backlog 0b 0p requeues 0 memory used: 4148544b of 12500000b capacity estimate: 250Mbit Tin 0 thresh 250Mbit target 5.0ms interval 100.0ms pk_delay 3us av_delay 1us sp_delay 1us pkts 73766497 bytes 69962229397 way_inds 6061964 way_miss 4161033 way_cols 3 drops 95 marks 301 sp_flows 1 bk_flows 1 max_len 1518 Time: 1475345872.910729727 """ CAKE_4TINS = """qdisc cake 8011: dev eth0.3 root refcnt 2 bandwidth 100Mbit diffserv4 flows rtt 100.0ms raw Sent 1018642 bytes 1280 pkt (dropped 0, overlimits 268 requeues 0) backlog 0b 0p requeues 0 memory used: 16576b of 5000000b capacity estimate: 100Mbit Bulk Best Effort Video Voice thresh 100Mbit 93750Kbit 75Mbit 25Mbit target 5.0ms 5.0ms 5.0ms 5.0ms interval 100.0ms 100.0ms 100.0ms 100.0ms pk_delay 0us 144us 1us 0us av_delay 0us 23us 0us 0us sp_delay 0us 1us 0us 0us pkts 0 1275 5 0 bytes 0 1018166 476 0 way_inds 0 0 0 0 way_miss 0 65 2 0 way_cols 0 0 0 0 drops 0 0 0 0 marks 0 0 1 0 sp_flows 0 0 0 0 bk_flows 0 1 0 0 max_len 0 1518 172 0 Time: 1475345872.910729727 """ CAKE_LONG = """qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 259071458 bytes 1023518 pkt (dropped 29, overlimits 613436 requeues 0) backlog 9084b 6p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 29.2ms 901us av_delay 0us 8.8ms 39us sp_delay 0us 896us 29us pkts 0 1020694 2859 bytes 0 258722431 381549 way_inds 0 12787 0 way_miss 0 1668 46 way_cols 0 0 0 drops 0 29 0 marks 0 4091 0 sp_flows 0 0 0 bk_flows 0 6 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574788578 bytes 1836807 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778582.638085363 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 259208426 bytes 1023614 pkt (dropped 29, overlimits 613725 requeues 0) backlog 10598b 7p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 31.0ms 901us av_delay 0us 9.8ms 39us sp_delay 0us 2.1ms 29us pkts 0 1020791 2859 bytes 0 258860913 381549 way_inds 0 12787 0 way_miss 0 1668 46 way_cols 0 0 0 drops 0 29 0 marks 0 4094 0 sp_flows 0 0 0 bk_flows 0 6 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574793266 bytes 1836869 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778582.838003590 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 259337976 bytes 1023707 pkt (dropped 29, overlimits 613987 requeues 0) backlog 4542b 3p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 27.7ms 901us av_delay 0us 9.8ms 39us sp_delay 0us 671us 29us pkts 0 1020880 2859 bytes 0 258984407 381549 way_inds 0 12787 0 way_miss 0 1668 46 way_cols 0 0 0 drops 0 29 0 marks 0 4098 0 sp_flows 0 0 0 bk_flows 0 6 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574798798 bytes 1836943 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778583.038040365 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 259476458 bytes 1023804 pkt (dropped 29, overlimits 614269 requeues 0) backlog 4542b 3p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 24.2ms 901us av_delay 0us 9.2ms 39us sp_delay 0us 912us 29us pkts 0 1020977 2859 bytes 0 259122889 381549 way_inds 0 12787 0 way_miss 0 1668 46 way_cols 0 0 0 drops 0 29 0 marks 0 4101 0 sp_flows 0 2 0 bk_flows 0 4 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574804390 bytes 1837018 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778583.238006023 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 259608884 bytes 1023897 pkt (dropped 29, overlimits 614516 requeues 0) backlog 4542b 3p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 19.1ms 901us av_delay 0us 7.9ms 39us sp_delay 0us 952us 29us pkts 0 1021070 2859 bytes 0 259255315 381549 way_inds 0 12787 0 way_miss 0 1668 46 way_cols 0 0 0 drops 0 29 0 marks 0 4101 0 sp_flows 0 0 0 bk_flows 0 4 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574809262 bytes 1837083 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778583.438004751 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 259747686 bytes 1024000 pkt (dropped 29, overlimits 614830 requeues 0) backlog 16654b 11p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 45.0ms 901us av_delay 0us 9.8ms 39us sp_delay 0us 2.2ms 29us pkts 0 1021181 2859 bytes 0 259406229 381549 way_inds 0 12787 0 way_miss 0 1669 46 way_cols 0 0 0 drops 0 29 0 marks 0 4103 0 sp_flows 0 0 0 bk_flows 0 6 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574813935 bytes 1837140 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778583.638004248 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 259884526 bytes 1024114 pkt (dropped 29, overlimits 615158 requeues 0) backlog 1514b 1p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 43.0ms 901us av_delay 0us 10.8ms 39us sp_delay 0us 1.3ms 29us pkts 0 1021285 2859 bytes 0 259527929 381549 way_inds 0 12787 0 way_miss 0 1669 46 way_cols 0 0 0 drops 0 29 0 marks 0 4109 0 sp_flows 0 2 0 bk_flows 0 3 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574848921 bytes 1837227 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778583.838036153 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 260009480 bytes 1024203 pkt (dropped 29, overlimits 615373 requeues 0) backlog 10598b 7p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 32.3ms 901us av_delay 0us 9.6ms 39us sp_delay 0us 1.5ms 29us pkts 0 1021380 2859 bytes 0 259661967 381549 way_inds 0 12787 0 way_miss 0 1669 46 way_cols 0 0 0 drops 0 29 0 marks 0 4110 0 sp_flows 0 0 0 bk_flows 0 4 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574854021 bytes 1837295 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778584.038005470 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 260147962 bytes 1024300 pkt (dropped 29, overlimits 615660 requeues 0) backlog 7570b 5p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 31.0ms 901us av_delay 0us 9.4ms 39us sp_delay 0us 1.3ms 29us pkts 0 1021475 2859 bytes 0 259797421 381549 way_inds 0 12787 0 way_miss 0 1669 46 way_cols 0 0 0 drops 0 29 0 marks 0 4112 0 sp_flows 0 0 0 bk_flows 0 5 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574858677 bytes 1837357 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778584.238010022 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 260283470 bytes 1024396 pkt (dropped 29, overlimits 615928 requeues 0) backlog 6056b 4p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 31.4ms 901us av_delay 0us 10.2ms 39us sp_delay 0us 2.7ms 29us pkts 0 1021570 2859 bytes 0 259931415 381549 way_inds 0 12787 0 way_miss 0 1669 46 way_cols 0 0 0 drops 0 29 0 marks 0 4116 0 sp_flows 0 0 0 bk_flows 0 5 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574863501 bytes 1837421 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778584.438004833 --- qdisc cake 802b: root refcnt 2 bandwidth 5500Kbit diffserv3 dual-srchost nat wash rtt 100.0ms noatm overhead 14 Sent 260412986 bytes 1024488 pkt (dropped 29, overlimits 616172 requeues 0) backlog 3028b 2p requeues 0 memory used: 172480b of 4Mb capacity estimate: 5500Kbit Bulk Best Effort Voice thresh 343744bit 5500Kbit 1375Kbit target 52.9ms 5.0ms 13.2ms interval 147.9ms 100.0ms 26.4ms pk_delay 0us 28.4ms 901us av_delay 0us 9.6ms 39us sp_delay 0us 424us 29us pkts 0 1021660 2859 bytes 0 260057903 381549 way_inds 0 12787 0 way_miss 0 1669 46 way_cols 0 0 0 drops 0 29 0 marks 0 4121 0 sp_flows 0 2 0 bk_flows 0 3 0 un_flows 0 0 0 max_len 0 7420 907 qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 2574869093 bytes 1837496 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1484778584.638003530 """ INGRESS_OUTPUT = """qdisc htb 1: root refcnt 2 r2q 10 default 11 direct_packets_stat 0 direct_qlen 1000 Sent 13843 bytes 62 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 qdisc fq 8052: parent 1:11 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028 initial_quantum 15140 refill_delay 40.0ms Sent 13843 bytes 62 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 6 flows (5 inactive, 0 throttled) 0 gc, 0 highprio, 0 throttled qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 12815 bytes 65 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1508235458.602528897 --- qdisc htb 1: root refcnt 2 r2q 10 default 11 direct_packets_stat 0 direct_qlen 1000 Sent 13941 bytes 63 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 qdisc fq 8052: parent 1:11 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028 initial_quantum 15140 refill_delay 40.0ms Sent 13941 bytes 63 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 6 flows (5 inactive, 0 throttled) 0 gc, 0 highprio, 0 throttled qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 12899 bytes 66 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1508235458.802541376 --- qdisc htb 1: root refcnt 2 r2q 10 default 11 direct_packets_stat 0 direct_qlen 1000 Sent 14039 bytes 64 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 qdisc fq 8052: parent 1:11 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028 initial_quantum 15140 refill_delay 40.0ms Sent 14039 bytes 64 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 6 flows (5 inactive, 0 throttled) 0 gc, 0 highprio, 0 throttled qdisc ingress ffff: parent ffff:fff1 ---------------- Sent 12983 bytes 67 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Time: 1508235459.002541779 ---""" QDISC_KEYS = ['backlog_bytes', 'backlog_pkts', 'backlog_requeues', 'dropped', 'overlimits', 'requeues', 'sent_bytes', 'sent_pkts'] class TestParsers(unittest.TestCase): def check_res_keys(self, keys, res, raw_keys, raw): for k in keys: self.assertIn(k, res) self.assertIn(k, raw[0]) for k in raw_keys: self.assertIn(k, raw[0]) def check_vals(self, keys, res): for k in keys: vals = [i[1] > 0 for i in res[k]] self.assertTrue(any(vals)) def new_runner(self, name): r = runners.get(name) return r(name='test', settings=object(), command='test', delay=0, remote_host=None, interface=None, interval=0, length=0) def test_cake_parser(self): raw_keys = ["cake_%s" % k for k in runners.TcRunner.cake_keys] check_keys = ['sent_bytes', 'sent_pkts'] for data in (CAKE_1TIN, CAKE_4TINS, CAKE_LONG): r = self.new_runner("tc") res, raw_values, metadata = r.parse_string(data) self.check_res_keys( QDISC_KEYS + ['ecn_mark'], res, raw_keys, raw_values) if data == CAKE_LONG: self.check_vals(check_keys + ['ecn_mark'], res) else: self.check_vals(check_keys, res) def test_ingress_parser(self): r = self.new_runner("tc") res, raw_values, metadata = r.parse_string(INGRESS_OUTPUT) self.check_res_keys(QDISC_KEYS, res, [], raw_values) self.check_vals(['sent_bytes', 'sent_pkts'], res) test_suite = unittest.TestLoader().loadTestsFromTestCase(TestParsers) ����������������������������������flent-2.2.0/unittests/test_plotters.py��������������������������������������������������������������0000664�0000000�0000000�00000030361�14670056262�0020165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # test_plotters.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 24 July 2015 # Copyright (c) 2015-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import os import shutil import tempfile import unittest import traceback from multiprocessing import Pool from unittest.util import strclass from .test_helpers import ForkingTestCase, get_test_data_files from flent import resultset, formatters from flent.settings import parser, Settings, DEFAULT_SETTINGS settings = parser.parse_args(args=[], namespace=Settings(DEFAULT_SETTINGS)) MATPLOTLIB_RC_VALUES = { 'axes.axisbelow': True, 'axes.color_cycle': ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'], 'axes.edgecolor': 'white', 'axes.facecolor': '#EAEAF2', 'axes.grid': True, 'axes.labelcolor': '.15', 'axes.linewidth': 0, 'figure.edgecolor': 'white', 'figure.facecolor': 'white', 'figure.frameon': False, 'grid.color': 'white', 'grid.linestyle': '-', 'image.cmap': 'Greys', 'legend.frameon': False, 'legend.numpoints': 1, 'legend.scatterpoints': 1, 'lines.color': '.15', 'lines.solid_capstyle': 'round', 'pdf.fonttype': 42, 'text.color': '.15', 'xtick.color': '.15', 'xtick.direction': 'out', 'xtick.major.size': 0, 'xtick.minor.size': 0, 'ytick.color': '.15', 'ytick.direction': 'out', 'ytick.major.size': 0, 'ytick.minor.size': 0, } # Some flent test files intentionally lack plots. This list contains the empty # plots to ensure that they do not fail. The lack of data is either because the # test did not run with the required flag or because the file is simply older # than the feature. MISSING_PLOTS = { 'test-http-1up.flent.gz': set(( 'tcp_cwnd', 'tcp_delivery_rate', 'tcp_pacing', 'tcp_rtt', 'tcp_rtt_bar_combine', 'tcp_rtt_box_combine', 'tcp_rtt_cdf', )), 'test-http.flent.gz': set(( 'tcp_cwnd', 'tcp_delivery_rate', 'tcp_pacing', 'tcp_rtt', 'tcp_rtt_bar_combine', 'tcp_rtt_box_combine', 'tcp_rtt_cdf', )), 'test-rrul-icmp.flent.gz': set(( 'tcp_cwnd', 'tcp_delivery_rate', 'tcp_pacing', 'tcp_rtt', 'tcp_rtt_bar_combine', 'tcp_rtt_box_combine', 'tcp_rtt_cdf', )), 'test-rrul.flent.gz': set(( 'cpu_core', 'cpu_core_bar', 'cpu_core_box', 'tcp_delivery_rate', 'tcp_pacing', 'tcp_rtt_bar_combine', 'tcp_rtt_box_combine', 'tcp_rtt_cdf', )), 'test-rrul_be-socket_stats.flent.gz': set(( 'tcp_rtt_bar_combine', 'tcp_rtt_box_combine', 'tcp_rtt_cdf', )), 'test-rtt-fair.flent.gz': set(( 'tcp_cwnd', 'tcp_delivery_rate', 'tcp_pacing', 'tcp_rtt', 'tcp_rtt_bar_combine', 'tcp_rtt_box_combine', 'tcp_rtt_cdf', )), 'test-tcp_nup.flent.gz': set(( 'tcp_delivery_rate', 'tcp_pacing', 'tcp_rtt_bar_combine', 'tcp_rtt_box_combine', 'tcp_rtt_cdf', )), 'test-tcp_1up_noping-cpu_stats.flent.gz': set(( 'tcp_cwnd', 'tcp_pacing', 'tcp_rtt', 'tcp_rtt_cdf', 'tcp_rtt_box_combine', 'tcp_rtt_bar_combine', )), 'test-voip-1up.flent.gz': set(( 'tcp_cwnd', 'tcp_delivery_rate', 'tcp_pacing', 'tcp_rtt', 'tcp_rtt_bar_combine', 'tcp_rtt_box_combine', 'tcp_rtt_cdf', )), 'test-voip-rrul.flent.gz': set(( 'tcp_cwnd', 'tcp_delivery_rate', 'tcp_pacing', 'tcp_rtt', 'tcp_rtt_bar_combine', 'tcp_rtt_box_combine', 'tcp_rtt_cdf', )), } class PlottersTestCase(ForkingTestCase): def setUp(self): from flent import plotters if not plotters.HAS_MATPLOTLIB: self.skipTest('no matplotlib available') self.plotters = plotters def __getstate__(self): state = {} for k, v in self.__dict__.items(): if k != 'plotters': state[k] = v return state class TestPlottersInit(PlottersTestCase): def init_test_backend(self, filename): self.plotters.init_matplotlib(filename, False, False) return self.plotters.matplotlib.get_backend() def test_init_fail(self): self.plotters.HAS_MATPLOTLIB = False self.assertRaises( RuntimeError, self.plotters.init_matplotlib, None, None, None) def test_init_svg(self): self.assertEqual(self.init_test_backend('test.svg'), 'svg') def test_init_svgz(self): self.assertEqual(self.init_test_backend('test.svgz'), 'svg') def test_init_ps(self): self.assertEqual(self.init_test_backend('test.ps'), 'ps') def test_init_eps(self): self.assertEqual(self.init_test_backend('test.eps'), 'ps') def test_init_pdf(self): self.assertEqual(self.init_test_backend('test.pdf'), 'pdf') def test_init_png(self): self.assertEqual(self.init_test_backend('test.png'), 'agg') def test_init_styles(self): self.plotters.init_matplotlib('test.svg', True, False) self.assertEqual(len(self.plotters.STYLES), len(self.plotters.LINESTYLES) + len(self.plotters.DASHES) + len(self.plotters.MARKERS)) for ls in self.plotters.LINESTYLES: self.assertIn(dict(linestyle=ls), self.plotters.STYLES) for d in self.plotters.DASHES: self.assertIn(dict(dashes=d), self.plotters.STYLES) for m in self.plotters.MARKERS: self.assertIn(dict(marker=m, markevery=10), self.plotters.STYLES) def test_init_styles_nomarkers(self): self.plotters.init_matplotlib('test.svg', False, False) self.assertEqual(len(self.plotters.STYLES), len(self.plotters.LINESTYLES) + len(self.plotters.DASHES)) for ls in self.plotters.LINESTYLES: self.assertIn(dict(linestyle=ls), self.plotters.STYLES) for d in self.plotters.DASHES: self.assertIn(dict(dashes=d), self.plotters.STYLES) class TestPlotters(PlottersTestCase): def setUp(self): super().setUp() self.plot_config = {'series': [{'data': 'Test 1'}]} self.data_config = {'Test 1': {'units': 'ms'}} self.plotters.init_matplotlib('test.svg', True, True) def create_plotter(self, plotter_class_name, init=True): plotter_class = getattr(self.plotters, plotter_class_name) p = plotter_class(self.plot_config, self.data_config) self.assertIsInstance(p, plotter_class) if init: p.init() return p def test_create_timeseries(self): self.create_plotter("TimeseriesPlotter") def test_create_timeseries_combine(self): self.create_plotter("TimeseriesCombinePlotter") def test_create_box(self): self.create_plotter("BoxPlotter") def test_create_box_combine(self): self.create_plotter("BoxCombinePlotter") def test_create_bar(self): self.create_plotter("BarPlotter") def test_create_bar_combine(self): self.create_plotter("BarCombinePlotter") def test_create_cdf(self): self.create_plotter("CdfPlotter") def test_create_cdf_combine(self): self.create_plotter("CdfCombinePlotter") def test_create_qq(self): # QQ plots only work with only 1 data series p = self.create_plotter("QqPlotter") self.plot_config['series'].append({'data': 'Test 1'}) p = self.create_plotter("QqPlotter", init=False) self.assertRaises(RuntimeError, p.init) def test_create_ellipsis(self): # Ellipsis plots only work with >=2 data series p = self.create_plotter("EllipsisPlotter", init=False) self.assertRaises(RuntimeError, p.init) self.plot_config['series'].append({'data': 'Test 1'}) p = self.create_plotter("EllipsisPlotter") def test_create_subplot_combine(self): self.create_plotter("SubplotCombinePlotter") class TestPlotting(PlottersTestCase): def __init__(self, filename, fmt): self.filename = filename self.fmt = fmt unittest.TestCase.__init__(self) def setUp(self): super().setUp() self.output_dir = tempfile.mkdtemp() self.settings = settings.copy() def tearDown(self): shutil.rmtree(self.output_dir) def __str__(self): return "%s - %s (%s)" % (os.path.basename(self.filename), self.fmt, strclass(self.__class__)) def runTest(self): r = resultset.load(self.filename) self.settings.update(r.meta()) self.settings.load_test(informational=True) self.settings.compute_missing_results(r) self.settings.FORMAT = 'plot' for p in self.settings.PLOTS.keys(): try: self.settings.PLOT = p self.settings.OUTPUT = os.path.join( self.output_dir, "%s.%s" % (p, self.fmt)) formatter = formatters.new(self.settings) formatter.format([r]) res, plen = formatter.verify() filename = os.path.basename(self.filename) if filename in MISSING_PLOTS and p in MISSING_PLOTS[filename]: continue if not res: raise self.failureException( "Verification of plot '%s' failed: %s" % (p, plen)) except self.failureException: raise except Exception as e: tb = traceback.format_exc() new_exc = Exception("Error creating plot '%s'" % p) new_exc.orig_tb = tb raise new_exc def plot_one(settings, plot, results): from flent import plotters plotters.init_matplotlib("-", False, True) settings.PLOT = plot return plotters.draw_worker(settings, [results]) class TestGUIPlotting(PlottersTestCase): def __init__(self, filename): self.filename = filename unittest.TestCase.__init__(self) def setUp(self): super().setUp() self.output_dir = tempfile.mkdtemp() self.settings = settings.copy() def tearDown(self): shutil.rmtree(self.output_dir) def __str__(self): return "%s - GUI (%s)" % (os.path.basename(self.filename), strclass(self.__class__)) def runTest(self): results = resultset.load(self.filename) self.settings.update(results.meta()) self.settings.load_test(informational=True) with Pool() as pool: for p in self.settings.PLOTS.keys(): plot = pool.apply(plot_one, (self.settings, p, results)) res, plen = plot.verify() filename = os.path.basename(self.filename) if filename in MISSING_PLOTS and p in MISSING_PLOTS[filename]: continue if not res: raise self.failureException( "Verification of plot '%s' failed: %s" % (p, plen)) dirname = os.path.join(os.path.dirname(__file__), "test_data") output_formats = ['svg', 'pdf', 'png'] plot_suite = unittest.TestSuite() for fname in get_test_data_files(): plot_suite.addTest(TestGUIPlotting(fname)) for fmt in output_formats: plot_suite.addTest(TestPlotting(fname, fmt)) test_suite = unittest.TestSuite( [unittest.TestLoader().loadTestsFromTestCase(TestPlottersInit), unittest.TestLoader().loadTestsFromTestCase(TestPlotters)]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_tests.py�����������������������������������������������������������������0000664�0000000�0000000�00000003052�14670056262�0017450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # test_tests.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 25 July 2015 # Copyright (c) 2015-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import os import unittest from flent.testenv import TEST_PATH from flent.settings import parser, Settings, DEFAULT_SETTINGS settings = parser.parse_args(args=[], namespace=Settings(DEFAULT_SETTINGS)) class TestTests(unittest.TestCase): def setUp(self): self.tests = sorted([os.path.splitext(i)[0] for i in os.listdir(TEST_PATH) if i.endswith('.conf')]) self.settings = settings.copy() def test_load_tests(self): for t in self.tests: self.settings.load_test(t, informational=True) test_suite = unittest.TestSuite( [unittest.TestLoader().loadTestsFromTestCase(TestTests)]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������flent-2.2.0/unittests/test_util.py������������������������������������������������������������������0000664�0000000�0000000�00000002536�14670056262�0017271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # test_utils.py # # Author: Toke Høiland-Jørgensen (toke@toke.dk) # Date: 16 July 2015 # Copyright (c) 2015-2016, Toke Høiland-Jørgensen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. from __future__ import absolute_import, division, print_function, unicode_literals import unittest from flent import util class TestSmallUtilFunctions(unittest.TestCase): def test_uscore_to_camel(self): self.assertEqual(util.uscore_to_camel('test_name'), 'TestName') def test_classname(self): self.assertEqual(util.classname('test_class'), 'TestClass') self.assertEqual(util.classname( 'test_class', 'Suffix'), 'TestClassSuffix') test_suite = unittest.TestLoader().loadTestsFromTestCase(TestSmallUtilFunctions) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������