pax_global_header00006660000000000000000000000064123321356160014514gustar00rootroot0000000000000052 comment=df567bb1c77e5485e153f7e09c44e841a603de86 traits-4.5.0/000077500000000000000000000000001233213561600130305ustar00rootroot00000000000000traits-4.5.0/.coveragerc000066400000000000000000000006701233213561600151540ustar00rootroot00000000000000[run] branch = True source = traits omit = */tests/* [report] # Regexes for lines to exclude from consideration exclude_lines = # Have to re-enable the standard pragma pragma: no cover # Don't complain about missing debug-only code: def __repr__ # Don't complain if tests don't hit defensive assertion code: raise AssertionError raise NotImplementedError if __name__ == .__main__.: ignore_errors = True traits-4.5.0/.gitignore000066400000000000000000000002031233213561600150130ustar00rootroot00000000000000# file types to ignore *.pyc *.pyd *.so *.enamlc *~ .DS_Store # ignore the build directories *.egg-info/ build/ dist/ docs/build/ traits-4.5.0/.travis.yml000066400000000000000000000015251233213561600151440ustar00rootroot00000000000000language: python python: - 3.3 - 3.2 - 2.7 - 2.6 virtualenv: # This allows installing PyQt using apt-get and being able to import it. system_site_packages: true before_install: # On Python 2.7 we install PyQt4 and run the UI tests. - if [[ $TRAVIS_PYTHON_VERSION == '2.7' ]]; then source .travis_before_install; fi install: - pip install nose - if ! [[ $TRAVIS_PYTHON_VERSION > '2.6' ]]; then pip install unittest2 ; fi - if [[ $TRAVIS_PYTHON_VERSION > '3.' ]]; then pip install numpy ; fi - pip install cython - pip install coverage - pip install coveralls - python setup.py install before_script: - mkdir testrunner - cp .coveragerc testrunner/ - cd testrunner script: - coverage run -m nose.core traits --exe notifications: email: - travis-ci@enthought.com - hack@delley.net after_success: coveralls traits-4.5.0/.travis_before_install000066400000000000000000000003611233213561600174110ustar00rootroot00000000000000# Set up PyQt4 for UI tests. export DISPLAY=:99.0 sh -e /etc/init.d/xvfb start sudo apt-get install python-qt4 python-qt4-dev python -c 'import PyQt4' python -c 'import PyQt4.QtCore' python -c 'import PyQt4.QtGui' export ETS_TOOLKIT=qt4 traits-4.5.0/CHANGES.txt000066400000000000000000000071751233213561600146530ustar00rootroot00000000000000Traits CHANGELOG ================ Release 4.5.0 ------------- Traits is now compatible with Python 3! The library now supports Python 3.2 and 3.3 . The release also includes increased code coverage and automatic coverage report through coveralls.io . Change summary since 4.4.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~ Enhancements * Test files cleanups (#108, #111, #121) * Add automatic coverage reports (#110, #122) * Removed obsolete code (#109, #112, #113) * Increased test coverage (#114, #118) * Python 3 support (#115). Thanks Yves Delley. * Allow setting and resetting the global adaptation manager (#145) * Various documentation improvements (#132, #133, #148, #154). Changes * The Int trait type now accepts Python ints *and* Python longs, as well as instances of any Python type that implements the `__index__` method. Previously, long instances were not accepted. (#104, #123). Fixes * Fix crash when trying to validate a property that has been deleted. (#138) * Fix clearing exception when raising a TraitError (#119) * Fix automatic adaptation when assigning to List trait (#147) * Fix some ctraits refcounting and exception clearing bugs (#48). Thanks Yves Delley. Release 4.4.0 ------------- The major new feature in this release is a new adaptation mechanism in the ``traits.adaptation`` package. The new mechanism is intended to replace the older traits.protocols package. Code written against ``traits.protocols`` will continue to work, although the ``traits.protocols`` API has been deprecated, and a warning will be logged on first use of ``traits.protocols``. See the 'Advanced Topics' section of the user manual for more details. The release also includes improved support for using Cython with `HasTraits` classes, some new helper utilities for writing unit tests for Traits events, and a variety of bug fixes, stability enhancements, and internal code improvements. Change summary since 4.3.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~ New features * The adaptation mechanism in Traits, formerly based on the 'traits.protocols' package, has been replaced with the more robust 'traits.adaptation' package. (#51) * Added utility function for importing symbols (name, classes, functions) by name: 'traits.util.api.import_symbol'. (#51) * Users can set a global tracer, which receives all traits change events: `traits.trait_notifiers.set_change_event_tracers`. (#79) Enhancements * Update benchmark script. (#54) * traits.util.deprecated: use module logger instead of root logger. (#59) * Provide an informative message in AdaptationError. (#62) * Allow HasTraits classes to be cythonized. (#73) * Improve tests for cythonization support. (#75) * Extending various trait testing helpers (#53) Refactoring * The Traits notification code has been reworked to remove code duplication, and test coverage of that code has been significantly improved. (#79) Fixes * Fix race condition when removing a traits listener. (#57) * Fix ugly interaction between DelegatesTo change handlers, dynamic change handlers and two levels of dynamic intialization. (#63) * Use a NullHandler for all 'traits' loggers. (#64) * Fix race condition in TraitChangeNotifyWrapper.listener_deleted (#66) * Fix leaking notifiers. (#68) * Fix failing special instance trait events. (#78) * Fix hiding KeyError exception inside trait default initialize method. (#81) * Fix Adapter object initialization. (#93) * Fix cyclic garbage arising from use of the WeakRef trait type. (#95) * `TraitSetObject.copy` now returns a plain rather than an uninitialized `TraitSetObject` instance. (#97) * Fix cyclic garbage arising from dynamic trait change handlers. (#101) traits-4.5.0/LICENSE.txt000066400000000000000000000031251233213561600146540ustar00rootroot00000000000000This software is OSI Certified Open Source Software. OSI Certified is a certification mark of the Open Source Initiative. Copyright (c) 2006-2014, Enthought, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Enthought, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. traits-4.5.0/MANIFEST.in000066400000000000000000000002001233213561600145560ustar00rootroot00000000000000include MANIFEST.in include LICENSE.txt include CHANGES.txt include README.rst include traits/ctraits.c include traits/py2to3.h traits-4.5.0/README.rst000066400000000000000000000045441233213561600145260ustar00rootroot00000000000000============================================== traits: explicitly typed attributes for Python ============================================== http://github.enthought.com/traits .. image:: https://api.travis-ci.org/enthought/traits.png?branch=master :target: https://travis-ci.org/enthought/traits :alt: Build status .. image:: https://coveralls.io/repos/enthought/traits/badge.png :target: https://coveralls.io/r/enthought/traits :alt: Coverage status The Traits project is at the center of all Enthought Tool Suite development and has changed the mental model used at Enthought for programming in the already extremely efficient Python programming language. We encourage everyone to join us in enjoying the productivity gains from using such a powerful approach. The Traits project allows Python programmers to use a special kind of type definition called a *trait*, which gives object attributes some additional characteristics: - **Initialization**: A trait has a *default value*, which is automatically set as the initial value of an attribute before its first use in a program. - **Validation**: The type of a trait attribute is *explicitly declared*. The type is evident in the code, and only values that meet a programmer-specified set of criteria (i.e., the trait definition) can be assigned to that attribute. - **Delegation**: The value of a trait attribute can be contained either in the defining object or in another object *delegated* to by the trait. - **Notification**: Setting the value of a trait attribute can *notify* other parts of the program that the value has changed. - **Visualization**: User interfaces that allow a user to *interactively modify* the value of a trait attribute can be automatically constructed using the trait's definition. (This feature requires that a supported GUI toolkit be installed. If this feature is not used, the Traits project does not otherwise require GUI support.) A class can freely mix trait-based attributes with normal Python attributes, or can opt to allow the use of only a fixed or open set of trait attributes within the class. Trait attributes defined by a class are automatically inherited by any subclass derived from the class. Dependencies ------------ Traits has the following optional dependencies: * `Numpy `_ to support the trait types for arrays. traits-4.5.0/TODO.txt000066400000000000000000000001601233213561600143330ustar00rootroot00000000000000* Remove the dependency on AppTools project (caused by imports of pyface.resource in traits/ui/image.py.) traits-4.5.0/docs/000077500000000000000000000000001233213561600137605ustar00rootroot00000000000000traits-4.5.0/docs/CHANGES.txt000066400000000000000000000065171233213561600156020ustar00rootroot00000000000000Traits 3.5.1 (not yet released) =============================== Traits 3.5.0 (Oct 15, 2010) =========================== Enhancements ------------ * adding support for drop-down menu in Button traits, but only for qt backend * adding 'show_notebook_menu' option to ListEditor so that the user can right-click and show or hide the context menu (Qt) * added selection range traits to make it possible for users to replace selected text Fixes ----- * fixed null color editor to work with tuples * bug when opening a view with the ToolbarButton Traits 3.4.0 (May 26, 2010) =========================== Enhancements ------------ * adding new example to make testing rgb color editor easier Fixes ----- * fixed NumericColumn to not expect object to have model_selection attribute, and removed more dead theming code * fixed API bugs with the NumericColumn where its function signatures differed from its base class, but the calling code expected them to all be the same * fixed bug which was related to type name errors caused when running Sphinx * when using File(exists=True), be sure to validate the type of the value first before using os.path.isfile() Traits 3.3.0 (Feb 24, 2010) =========================== Enhancements ------------ The major enhancement this release is that the entire Traits package has been changed to use relative imports so that it can be installed as a sub-package inside another larger library or package. This was not previously possible, since the various modules inside Traits would import each other directly through "traits.[module]". Many thanks to Darren Dale for the patch. Fixes ----- There have been numerous minor bugfixes since the last release. The most notable ones are: * Many fixes involve making Traits UI more robust if wxPython is not installed on a system. In the past, we have been able to use Qt if it was also installed, but removing Wx would lead to a variety of little bugs in various places. We've squashed a number of these. We've also added better checks to make sure we're selecting the right toolkit at import and at runtime. * A nasty cyclic reference was discovered and eliminated in DelegatesTo traits. * The Undefined and Uninitialized Traits were made into true singletons. * Much of the inconsistent formatting across the entire Traits source has been eliminated and normalized (tabs/spaces, line endings). Traits 3.2.0 (July 15, 2009) ============================ Enhancements ------------ * Implemented editable_labels attribute in the TabularEditor for enabling editing of the labels (i.e. the first column) * Saving/restoring window positions works with multiple displays of different sizes * New ProgressEditor * Changed default colors for TableEditor * Added support for HTMLEditor for QT backend using QtWebKit * Improved support for opening links in external browser from HTMLEditor * Added support for TabularEditor for QT backend * Added support for marking up the CodeEditor, including adding squiggles and dimming lines * Added SearchEditor * Improved unicode support * Changed behavior of RangeEditor text box to not auto-set * Added support in RangeEditor for specifying the method to evaluate new values. * Add DefaultOverride editor factory courtesy Stéfan van der Walt * Removed sys.exit() call from SaveHandler.exit() Fixes ----- traits-4.5.0/docs/Makefile000066400000000000000000000072531233213561600154270ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source .PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest 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 " 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 " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." 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/traits.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/traits.qhc" latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ "run these through (pdf)latex." 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." 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." traits-4.5.0/docs/Pydoh_T3UMdoc_HOWTO.txt000066400000000000000000000035011233213561600200610ustar00rootroot00000000000000How to Use Pydoh to Generate HTML from Word for the Traits User Manual ====================================================================== 1. In MS Word, choose File > Save As. 2. In the file dialog, select "Web Page, Filtered" as the file type, and save the file. 3. Run Pydoh with the generated HTML file as the input file. Use the following options: --css Traits3_UM_add.css -h 3 4. Do the following additional clean-up steps: a. Replace non-ASCII characters with HTML entities or ASCII characters: ========= ======== Non-ASCII Entity ========= ======== © · “ ” ‘ ’ … ``-`` ========= ======== b. In Traits3_UM.css, comment out **margin-top** for h1, h2, and h3. c. Find the styles that correspond to code examples; then comment out **margin-left** for those styles. d. In all HTML files, replace:: with:: e. In Traits3_UM_1.html, delete the Word-generated table of contents, which includes everything between::

Table of Contents

and::

Index.......................................... 77

f. In the last HTML file (currently Traits3_UM_75.html), delete the Word-generated index, which means everything between::

Index

and::

@on_trait_change decorator, 29

(in other words, the end of the index) traits-4.5.0/docs/Traits3_UM.doc000066400000000000000000115674601233213561600164250ustar00rootroot00000000000000%PDF-1.4 % 4 0 obj << /S /GoTo /D (chapter.1) >> endobj 7 0 obj (Traits 3 User Manual) endobj 8 0 obj << /S /GoTo /D (section.1.1) >> endobj 11 0 obj (Traits 3 User Manual) endobj 12 0 obj << /S /GoTo /D (section.1.2) >> endobj 15 0 obj (Introduction) endobj 16 0 obj << /S /GoTo /D (section.1.3) >> endobj 19 0 obj (Defining Traits: Initialization and Validation) endobj 20 0 obj << /S /GoTo /D (section.1.4) >> endobj 23 0 obj (Trait Notification) endobj 24 0 obj << /S /GoTo /D (section.1.5) >> endobj 27 0 obj (Deferring Trait Definitions) endobj 28 0 obj << /S /GoTo /D (section.1.6) >> endobj 31 0 obj (Custom Traits) endobj 32 0 obj << /S /GoTo /D (section.1.7) >> endobj 35 0 obj (Advanced Topics) endobj 36 0 obj << /S /GoTo /D (chapter.2) >> endobj 39 0 obj (Indices and tables) endobj 40 0 obj << /S /GoTo /D (chapter.3) >> endobj 43 0 obj (Traits 3 Tutorials) endobj 44 0 obj << /S /GoTo /D (section.3.1) >> endobj 47 0 obj (Writing a graphical application for scientific programming using TraitsUI) endobj 48 0 obj << /S /GoTo /D (chapter.4) >> endobj 51 0 obj (Indices and tables) endobj 52 0 obj << /S /GoTo /D (chapter.5) >> endobj 55 0 obj (Traits UI User Guide) endobj 56 0 obj << /S /GoTo /D (section.5.1) >> endobj 59 0 obj (Traits UI User Guide) endobj 60 0 obj << /S /GoTo /D (section.5.2) >> endobj 63 0 obj (Introduction) endobj 64 0 obj << /S /GoTo /D (section.5.3) >> endobj 67 0 obj (The View and Its Building Blocks) endobj 68 0 obj << /S /GoTo /D (section.5.4) >> endobj 71 0 obj (Customizing a View) endobj 72 0 obj << /S /GoTo /D (section.5.5) >> endobj 75 0 obj (Advanced View Concepts) endobj 76 0 obj << /S /GoTo /D (section.5.6) >> endobj 79 0 obj (Controlling the Interface: the Handler) endobj 80 0 obj << /S /GoTo /D (section.5.7) >> endobj 83 0 obj (Traits UI Themes) endobj 84 0 obj << /S /GoTo /D (section.5.8) >> endobj 87 0 obj (Introduction to Trait Editor Factories) endobj 88 0 obj << /S /GoTo /D (section.5.9) >> endobj 91 0 obj (The Predefined Trait Editor Factories) endobj 92 0 obj << /S /GoTo /D (section.5.10) >> endobj 95 0 obj (Advanced Trait Editors) endobj 96 0 obj << /S /GoTo /D (section.5.11) >> endobj 99 0 obj (``Extra'' Trait Editor Factories) endobj 100 0 obj << /S /GoTo /D (section.5.12) >> endobj 103 0 obj (Tips, Tricks and Gotchas) endobj 104 0 obj << /S /GoTo /D (section.5.13) >> endobj 107 0 obj (Appendix I: Glossary of Terms) endobj 108 0 obj << /S /GoTo /D (section.5.14) >> endobj 111 0 obj (Appendix II: Editor Factories for Predefined Traits) endobj 112 0 obj << /S /GoTo /D (chapter.6) >> endobj 115 0 obj (Indices and tables) endobj 116 0 obj << /S /GoTo /D [117 0 R /Fit ] >> endobj 120 0 obj << /Length 311 /Filter /FlateDecode >> stream xڽQn0+HؾVHU '!P!_{$;c 14? a01 }XRaa陑;WYUY?7𒍯=^j%1 'uۀD!-/RR;+0uWgJk7`q bABY^Cec{z3LZLTXcݴͱM·%  IU;uiz>-DtK'5 P^Dϋnz^\cKх?aPgՋ[ endstream endobj 117 0 obj << /Type /Page /Contents 120 0 R /Resources 119 0 R /MediaBox [0 0 612 792] /Parent 126 0 R >> endobj 118 0 obj << /Type /XObject /Subtype /Image /Width 111 /Height 105 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 3803 /Filter/FlateDecode /DecodeParms<> >> stream x]ktT>z\$m ȥ!TD jV|_CWph PT\"B$$6aIf9qfB%= By}; vo`!4ChVv[12 !HGiyg):QVd8SmsQAj2~~AH3qU:?!4[a6SRu ǎ7H'1"_Qq!JbBwx$I-S^QO>AO~( HAPU)=Ojjm+ v$~ئ"33zviJn[*.\v(/E1U`Ycֿ&y3g>=x$;GS@]d1YÓo"۾X6n8o2 ,c_܊U?y" "cdL5HfFj~}Q]H錩/Oxcq'~lӕ_ ţeW\| &cLMhdȶ9-՗ $ Θڳ9i˗>xa6>#E _h2$}앿"a\l߰0/"ޑҦ.*:UQyٕ~`:oYfxu? b)<̜>җ'rYgԾ6ngeSMkm>uv" Snhj ̌ry_ݚLM01@$(]vƏ{_{#&>4l|c.8~rK05bjԈm;14*:Ο3yK|ީT\> 8nd٤B]j맻]8#&[5TEUlu#u\/kk^6t=Zo`Ӌ-,R'*EP1#EQ DfsnlOYYYҨ!${G2yZ~\pN|olӋnϯBu-\$5˘TYgNR^\8gF{@|4Ņ0ov2֊^:j)D"zM En1]WfN@wǛ뿨k B|c!>8T'JԉaZxubOW~;c%dLynظedNSt~WX\f-pO',9UI21`xĥd  ,{ER"Z G 4PLq@$#15! G}\.-2kEfV=G15Q&ph!9Ce Cvj(# 5#GX:InHJZmڞU__(h݆' H7cHκ})"Db-&`i\eU?*YJ05 D S[GabDěrqEʪ9կm"4LwtGTدr{OPۿhj?:}"i b:/7yA@eK#$t13mj51K &^w !%PSSSֆlr{s^#w4DmQI S#3a@57Q; S#:į v4yR+A&P0j/))-&Z4S.[Z2d^!j8J01-j(T!05Q)"jԌ+@vpd"'4LuyC͉cv,@A1i_qLq|s4bvGz!U !KIQD1E3[1vI $00h6FL̙dnu˞?SScw\LGaʃcf-N]y/4u: c c PM18_h>4~h޽f l%&N^>?2=iC)9v!˜j>hN'N~(aİ}Wx+' u0?1sL _/>_nH ! x9zq@bzlLؘO_6Ac6~t=F&מc2\汋rh3.婓Jx`x^_>_mqKkj+-++Y.zw3TU+qܹ~M\_:pBI" D5 JcTubd!P%+~fz*EP]6R2;/uz] g,'Nd=C^n188D,dZ}W/)~ǎ/z~*0P]g*ݐ[{s]b76 $?`[퍘JTDDKŽ t "((}qqwZΦO11fZ XSXk71E~;{GbN#"k" r@4˗mrN"srLڀ?Vh?݁nw'?0l۶`bF4]2UU ;llgL bkx'ۄ&%QU#c*B{awE|DǶBhZ-f endstream endobj 121 0 obj << /D [117 0 R /XYZ 71 757.862 null] >> endobj 122 0 obj << /D [117 0 R /XYZ 72 720 null] >> endobj 119 0 obj << /Font << /F28 123 0 R /F29 124 0 R /F31 125 0 R >> /XObject << /Im1 118 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 129 0 obj << /Length 19 /Filter /FlateDecode >> stream x3PHW0Pp2Ac( endstream endobj 128 0 obj << /Type /Page /Contents 129 0 R /Resources 127 0 R /MediaBox [0 0 612 792] /Parent 126 0 R >> endobj 130 0 obj << /D [128 0 R /XYZ 71 757.862 null] >> endobj 127 0 obj << /ProcSet [ /PDF ] >> endobj 161 0 obj << /Length 1084 /Filter /FlateDecode >> stream xMs6)t.ѻDnL6!ɁkkI+VWqg\ZTIi~ M`7֣-Dw-TzP0m!|AD {WK }sL?qmo ,:}0]H܂27QlxK\$iI|g*6 kwIPZ*Lp {0o.BWpj*H*j I/Z5w=3+0q#i&Jr,0sA[qo d[pC8 w>ÝuM>L(;:y?S<էD=R00n,VQR :#Mx)5-yck]#B/ΦKKA"Lt>鋰Klhu7*ҥ9[$|-ЪH%Y3E^!7D2b1?ܝ+&3:#9pFv"홑Š>ߨ8&fuRIxMf}:Y6(kenQI?}N'ƽ?IQ^(k;Ȥ5dtfQ_~qgrRX+c j1.H%35r} o_;'cR\5%msvNu.^ IB~RMHMD9Ws|5ɩ|(.촞Ū7.5j1r[S_$6-60 1!{?RiN{ILf"Cd~Ę}P%&Lp:f/yDؠrRE]l)wnPXK/i]hQ$YIXWUXcUX@')EEgōi :IõC.ܓ͌r|4߽lip QQ/{> -ޅD'b}mc/րrm9HůV3"> endobj 131 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 527.602 178.799 536.578] /A << /S /GoTo /D (chapter.1) >> >> endobj 132 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 515.666 198.435 524.513] /A << /S /GoTo /D (section.1.1) >> >> endobj 133 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 503.711 163.098 512.558] /A << /S /GoTo /D (section.1.2) >> >> endobj 134 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 489.699 291.196 500.603] /A << /S /GoTo /D (section.1.3) >> >> endobj 135 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 479.801 182.953 488.647] /A << /S /GoTo /D (section.1.4) >> >> endobj 136 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 465.788 220.851 476.692] /A << /S /GoTo /D (section.1.5) >> >> endobj 137 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 455.89 170.231 464.737] /A << /S /GoTo /D (section.1.6) >> >> endobj 138 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 441.878 182.794 452.782] /A << /S /GoTo /D (section.1.7) >> >> endobj 139 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 421.998 164.333 430.974] /A << /S /GoTo /D (chapter.2) >> >> endobj 140 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 400.08 161.563 409.056] /A << /S /GoTo /D (chapter.3) >> >> endobj 141 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 386.087 407.349 396.991] /A << /S /GoTo /D (section.3.1) >> >> endobj 142 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 366.207 164.333 375.183] /A << /S /GoTo /D (chapter.4) >> >> endobj 143 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 344.289 177.692 353.265] /A << /S /GoTo /D (chapter.5) >> >> endobj 144 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 332.354 197.877 341.2] /A << /S /GoTo /D (section.5.1) >> >> endobj 145 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 320.399 163.098 329.245] /A << /S /GoTo /D (section.5.2) >> >> endobj 146 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 306.386 249.423 317.29] /A << /S /GoTo /D (section.5.3) >> >> endobj 147 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 294.431 194.908 305.335] /A << /S /GoTo /D (section.5.4) >> >> endobj 148 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 282.476 216.776 293.38] /A << /S /GoTo /D (section.5.5) >> >> endobj 149 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 270.521 264.855 281.425] /A << /S /GoTo /D (section.5.6) >> >> endobj 150 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 260.623 183.77 269.469] /A << /S /GoTo /D (section.5.7) >> >> endobj 151 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 248.548 261.109 257.514] /A << /S /GoTo /D (section.5.8) >> >> endobj 152 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 236.593 262.205 245.559] /A << /S /GoTo /D (section.5.9) >> >> endobj 153 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 224.757 206.764 233.604] /A << /S /GoTo /D (section.5.10) >> >> endobj 154 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 212.802 232.038 221.649] /A << /S /GoTo /D (section.5.11) >> >> endobj 155 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 198.79 213.309 209.694] /A << /S /GoTo /D (section.5.12) >> >> endobj 156 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 186.834 237.658 197.738] /A << /S /GoTo /D (section.5.13) >> >> endobj 157 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 174.879 315.883 185.783] /A << /S /GoTo /D (section.5.14) >> >> endobj 158 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 154.999 164.333 163.975] /A << /S /GoTo /D (chapter.6) >> >> endobj 162 0 obj << /D [160 0 R /XYZ 72 550.325 null] >> endobj 159 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 166 0 obj << /Length 113 /Filter /FlateDecode >> stream x3PHW0Pp2@ Br.WtB PK@B(WH(sr9pY(XY)01344RIQԌ [. endstream endobj 165 0 obj << /Type /Page /Contents 166 0 R /Resources 164 0 R /MediaBox [0 0 612 792] /Parent 126 0 R >> endobj 164 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 172 0 obj << /Length 2044 /Filter /FlateDecode >> stream xڭۖF}GK̒eդ{x! /qL/#75"-Os0aS- ]eM=Tk#->TMn[\cp+vepvQӔƭïa˯aSRL6d-!8=@K`1CFGA JZb4q8aw69(6}:xٖ2* ^9,tEXԯtd<]M6K?LBt\C0M>m&C|`)Ls#Z^L ƅ|&yU.uHhrp8bj/0 PpLZeBY i}<7[.r3\#h.{w"H7 >C55-r/Y r0,֛h}4' /XSЂpHP0<(4ۖ㹷Xk+#y,لmY nP& {&| P-k/ś|0;ɥQ>\禽]v߳Tz&'}kH |i{6FpW-[7Wqʻ1V ʚ]Y<w!FS6DF<6>Mc 0l1dH؄;:Ht V t"sjZx%l*2lnlA6= IEњYݫ 08lccΩ&cqcб3swfgwg:FS7`a)Cc endstream endobj 171 0 obj << /Type /Page /Contents 172 0 R /Resources 170 0 R /MediaBox [0 0 612 792] /Parent 126 0 R /Annots [ 167 0 R 168 0 R ] >> endobj 167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [71.004 164.727 179.725 175.631] /Subtype/Link/A<> >> endobj 168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [71.004 152.772 157.718 163.676] /Subtype/Link/A<> >> endobj 173 0 obj << /D [171 0 R /XYZ 71 757.862 null] >> endobj 174 0 obj << /D [171 0 R /XYZ 72 720 null] >> endobj 175 0 obj << /D [171 0 R /XYZ 72 720 null] >> endobj 5 0 obj << /D [171 0 R /XYZ 72 720 null] >> endobj 176 0 obj << /D [171 0 R /XYZ 72 561.284 null] >> endobj 9 0 obj << /D [171 0 R /XYZ 72 561.284 null] >> endobj 177 0 obj << /D [171 0 R /XYZ 72 153.768 null] >> endobj 13 0 obj << /D [171 0 R /XYZ 72 138.759 null] >> endobj 170 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 181 0 obj << /Length 2993 /Filter /FlateDecode >> stream xڭk۸ 8sEr{hעM,k6l3,^'9,Fp3ڟ٫?.U,Yr3K, Sflt| S-y ^RB 9y_W\I՟I%̊۟|d8g9{s+Hq 'K_AB;W#uY)"T坩+D붚y‡}^|4f]}\Bh 9HYĞ_=SQ2/0[&uE]uKi<(u=Ww_uW xR,H^f|!#Um}h G׭aGɫ5}9wX?jtYw40ڠA><"߳"g>W>PsSZXw4"HUNLb6˱d ODd;Ѭoc5fp 9_ЎxK U'(G .?1``_Nz?r.)6CvR˩8@%=eIs ,#Ǯ~'okwoKBkV!`ckAą4&f`ai|_UE<4jKL.rxkm(t^Ფ?>t[^WyuY3: 읱@9Ngwϸq͛tc< R#&~rK?4l(/4H^0- r1r(~:k%}n[0A%oԻߚbK՘;q;HmkEPgvfi RHYۢ6mG/EEaM};1VFUy1~La 2TUTR=$TX|ڗ0U \%HR>UL2N2r+Z^;hᩝx옒q-zLÉl8\,[0#@Q٢s&hzV2S-B+iIhD*0C ;H)_SqJLLJ13D*<uS9LtA2;T ۼ*T]1bE(uD}_!HÉX9tW|Xajg"z"TStKwjP'0cI +M _WRP 43(@Q0dQ/:L bNwFFr0O, NnWx ur 6 E(;ߠ/CJ3rώL0 <إ+s']x?vRhFvoZ)f X&Ҿt6_B8/9$~95Ab3?pm>:q4DỴŧRRk"rl!P\4wDžk a=@gQٟE2z5ovlp: ?+GyNtOZ꽶Z pۊÂ:$TWHb-h4G8,q _;u! ЦaFao0 8gaaژom1o΂j|SP(YT#On_]X8"HBl1wa'bhY(4"Fy# `)dX|ޟefy9z9Q?'㘅&Y@DZ8ē"e>*p?,H :-ڵIp,rF(^[%:ăxe*1_Ʒ?.oozxI@`{_; Sa\ؚ/^~zPhU,C#Q^ư Z c8׋s3 '= @%&P"M_5Ņ"`q`>lpڻe9P%9(@~RLsҏ@)%|2M̒W$tz%MAgA!iPp/.C* hKl*WJ[J9mixy&b^2z1}lx/nn?Oo x?Z )5 j  jE&Bw[-:F=8=>!rs8w1]7 ݸvG%J[AU厦0'<}ymxT & 7g%*NM+ԛ Fçni[M)?!D9 endstream endobj 180 0 obj << /Type /Page /Contents 181 0 R /Resources 179 0 R /MediaBox [0 0 612 792] /Parent 126 0 R /Annots [ 169 0 R 178 0 R ] >> endobj 169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [300.652 706.884 366.835 717.788] /Subtype/Link/A<> >> endobj 178 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [165.693 313.912 171.671 326.404] /A << /S /GoTo /D (Hfootnote.1) >> >> endobj 182 0 obj << /D [180 0 R /XYZ 71 757.862 null] >> endobj 184 0 obj << /D [180 0 R /XYZ 72 618.292 null] >> endobj 188 0 obj << /D [180 0 R /XYZ 86.346 105.525 null] >> endobj 179 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 192 0 obj << /Length 2444 /Filter /FlateDecode >> stream xko8{~Ed QC/hwRw?\1mk+K^In3Җy{0)>͙H̙;y}䟯x^șN$^ g;$an#8q5ZP&>sײ<+U**?}03wbX/f-O>Μ8iUK'hKɿOw;Թz݃%^~%~r p}## " x~w)Kk1 ^'ȍrf;A[q0^'%+(tPtS~ 4?&coo/_\L/ dP)=-mGkEW٨LU*Sϴ-@B#9>0%6xn4K`1k ^XAsFbPd/^}z RJ.ZRɘN wv?F]G CaOZA?Iˎl>l@ych9h_.<]X.U3YV7 Uʹl!jf̲#Do}Cl bi! xDkQ[tUl=#enzgF_:OX3GpbГbV`d4y 7?r|KDl=Y?u yNw,Vj{`?s3z++RƬ7\ ljmQ 0U)1Mں:BPoy$M=_eOQuĬnk3GOljڬ+hQ99vbXn2V$8b/LA ᨁdyd\Má'0J{K{qxJtǑދu#bڂ ˴i`dg]GĞXc]p?+ދ]:>\$[y|biuMqTt i`]Դժn6Eז/E7 Sͥl&~KHEr4 _' Rԛ̡G'0wU npnynI@b"WגBy@ie,Byif|vHh+_uQQ uH#g-Yt]f:V6to hA:X[2B_G g@ox6pe Rf}N/~ߙNK$=`YGFgv41bVוqj Vpps+ezmn2E+ ,+eg4*)DR ApDS|-r5UzHJ=\@\U+RWIq ۛEAC9"BǦZ/f_eq1'0=<ۮ-d ,*E.!aَ3@UJk.I&z+{\J dNQ%["LRskH ci0 eK0fL-ڪnY오le V녡EmwucZaM  Cu*`4&U GCDV3ZԷnZN&X B4p+3IOSٲmF? sxZI @{0}Gw;ٷW|Z*#Ψv`:z.u{6њF}̽iΔˊC}3ūw&=Wkb`Uè/ӘSz tRюK'o|~ܵ`ƽ48m;,޶TIjV *AθqW56CE6n>wcv:uҘƬnGe7Oat-p{ȴ.:zSX\GMI+ endstream endobj 191 0 obj << /Type /Page /Contents 192 0 R /Resources 190 0 R /MediaBox [0 0 612 792] /Parent 195 0 R /Annots [ 189 0 R ] >> endobj 189 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.878 342.066 350.622 352.97] /A << /S /GoTo /D (type-checked-methods) >> >> endobj 193 0 obj << /D [191 0 R /XYZ 71 757.862 null] >> endobj 194 0 obj << /D [191 0 R /XYZ 72 329.125 null] >> endobj 190 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F67 187 0 R /F66 186 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 200 0 obj << /Length 3214 /Filter /FlateDecode >> stream xڥZ[o~ЇȀW%uW>IN.@iW\ݢKw3R''Mp4#e<"o7~AUy"-J:!-E8foqQ |?FߪVpUVY3{GonFª"J?7 Wy m?nk,|i^IRD")H83ׂκ=$E.g46BծÉ~evOo5:F4m ~S8 oe`Tᬗ7&q&'q@mA5;Up2DM˰.Db"TDaQ{+AO ;eu[6amk:-vB3h,1ujd™gV#>8fi3Yym򤵩ٻ{g/ji4(4^r`йpjdDcÿ1"~v(*Iȯ1&%ØoLVxenj1iv4TǣRɅԏ< 1"lxҹNqønf5/Ӱj$v3o g@N:|4N,@0]kusB(D|\ۅ1prg"=Vsyh5Ѵ2VÉ'=k%žGvqM 89Rk +5oHxp0Q. j}0B ^V2cxx9RIibe>57X&qiU811pt Ϧ]̈)H79__ 9@ .q" %* 09/a3JJ5.K3=y73Q,b 4AVyF -Y7 d8C}sY֣rd!:iba+b5u 2V\' +{>x1kMiŢĪ_oZDp\ ,DTCjak nI@cаfoQUI+3,ǴQ=  Pxx@_#_]U梖s>|2 Ug>Lc9!$ѵ[Zg#c x bK$n"x+{Gڗ}ɱ˺5jKquK] T+ FoR a߀e8 ~iVCSa Iŕ9|ry׊MQB^IIO68N,MiEx9׎EY.Lػ.w29D6E ݺw[FE?@|(I FH܇R(!CEHK^ReHH/HuVU/1 |S7< y_'eYDy%ASm4>p4A>`R/W_z5SS>)sQsC{:""%hSi?#6:DӏVe5$/6 ؆476Q^GnOX>?RD"J34Jцr/{fnILl'S4N[it'|dGYTX("y[ľb.ʻ>5Ơmo2_+s6%Q&$8vjng9E {6uV̦x ? rg;5+0nGgCAr I32^ C-\B a&1CF%ӥIQl`/mb=i;Bwhux(q+I/wd,2FCU@|VeԀM\ k0@$1O_,s34W +^T^kjLS05(`ϓr Q5q׶K(K8Zt8oR@7~vVbICq1!W: endstream endobj 199 0 obj << /Type /Page /Contents 200 0 R /Resources 198 0 R /MediaBox [0 0 612 792] /Parent 195 0 R /Annots [ 197 0 R ] >> endobj 197 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.873 262.405 344.856 273.309] /A << /S /GoTo /D (reusing-trait-definitions) >> >> endobj 201 0 obj << /D [199 0 R /XYZ 71 757.862 null] >> endobj 202 0 obj << /D [199 0 R /XYZ 72 438.889 null] >> endobj 203 0 obj << /D [199 0 R /XYZ 72 438.889 null] >> endobj 17 0 obj << /D [199 0 R /XYZ 72 423.88 null] >> endobj 204 0 obj << /D [199 0 R /XYZ 72 370.998 null] >> endobj 205 0 obj << /D [199 0 R /XYZ 72 353.065 null] >> endobj 206 0 obj << /D [199 0 R /XYZ 72 335.132 null] >> endobj 198 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 213 0 obj << /Length 2895 /Filter /FlateDecode >> stream xڵksܶ~'%>3iNVd(c#$Ϫ/HYd2x^}w?ԩYcz$0xץ~uNUWCI2Wo;Λ Vd[[ۼ׾ZtŷP@9hIxOW{/Mzwkq {wϋ`ʵQ $h ]}Xh}U>ؒwհ 5캪-Vrxfᢃ+`]؞烣[l./`ꇪln_@p+,7Qq&YЁ^uڎ'w>'(n=n.8ce8AkrH,8`wa)s Ax?KsgYNі_R8RP8ŋᶁ{*զkw<vy͓jool׷(Ě-AN y〔AS?Qc۶w Z(Yy<q'ԘRV)2(4]J2ag \Q~(Ac \GHeo6BʬnH'Lt7K/$9יf,3XɵΣɸ5(纴+eÔ?̽tH!OT88kܓDPMk !^O $ b 1cwkh}>:kM)=-U>W_q'WXI!ೢ}}N5 XxHO,g\% Q/槒L>X|ᶕI7A`1z# s cf(IvZQX[)*طM]\nyi,Du4v:2r;R2w̶ܴ+:R@A2tL]i'hV$L؜h<g[:W8dxfC2i;켝~@y*|T#AIj*M(ҫTC̼,4Di E~(PAJa/VG 3T.X VYYq:6qP7'rN6:`$uleL] a-hK`imW X:44gSdc S!Lt}e0`$hأp 7x)H3KQ'~wZn (]RX6YʳĥD!G%/gWj\_`c1S3kX`5%Dǟ!L-lTx endstream endobj 212 0 obj << /Type /Page /Contents 213 0 R /Resources 211 0 R /MediaBox [0 0 612 792] /Parent 195 0 R /Annots [ 208 0 R 209 0 R 210 0 R ] >> endobj 208 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.921 201.912 217.899 214.405] /A << /S /GoTo /D (Hfootnote.2) >> >> endobj 209 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [287.605 189.957 383.816 200.861] /A << /S /GoTo /D (other-predefined-traits) >> >> endobj 210 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.216 178.002 148.124 188.906] /A << /S /GoTo /D (trait-metadata) >> >> endobj 214 0 obj << /D [212 0 R /XYZ 71 757.862 null] >> endobj 215 0 obj << /D [212 0 R /XYZ 72 408.063 null] >> endobj 216 0 obj << /D [212 0 R /XYZ 72 394.126 null] >> endobj 217 0 obj << /D [212 0 R /XYZ 72 178.998 null] >> endobj 218 0 obj << /D [212 0 R /XYZ 72 165.061 null] >> endobj 219 0 obj << /D [212 0 R /XYZ 86.346 104.44 null] >> endobj 211 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 224 0 obj << /Length 2168 /Filter /FlateDecode >> stream xڭZ[~_[p%+Vl" Q91n~pD[*|j22$#sqM9/Q 7 *zūk|9ia, Tӥ\oUP,]ř@`B)kau%&Şl "P&_agP"$p?D}28֪lgNX੓ߨB s [ }E0n_;4 S"{Lgc"{ܲ]oim ES(b #.Y B"lC7MWμb:ބ7p-ab:\X_nǗ&B7B۬YzI2 kdt#MPO*LTϙmSw\JUc^R%(((cmDT P:D@T9uQ"!bK!B"-DD Q:D@D9FPO!pc1%7x,&"00jnW#Gpq$ȋl$I"?c%Q'ɶ3$~yY◂$jJZUuC_Ii8H­uPS4rG]d AGz_B0ϩ-JW*02*zo1͏/@ڢPbn2Nr kZ1TcqaQ _FxaœJmEԊmٚnqA$:ֽ X0 aDR?&o35΢Fhf1)3,̇3sXVѴ!V-3 mbqtIm4\;KU[JLr D.2(Cn Dh mt}`Ӈ+C#.Zt1`:udp^󜿤.#8w tOQ{azlʗ.Q%Jf IbsvXR.V҅ uߓEBebQd:iѐ%W.('-Fr 354 ٰ$-pch;Bu}PF$U^ @X07K0z1;E:oUa>ɳPlh>؈wtu{,0}2Sl*9d09ey{ؿjѼB0jgi_z74+sU_[۷OUT)ۆ̈/g6uW*r]LWH><ѝO$ 2+0 endstream endobj 223 0 obj << /Type /Page /Contents 224 0 R /Resources 222 0 R /MediaBox [0 0 612 792] /Parent 195 0 R >> endobj 225 0 obj << /D [223 0 R /XYZ 71 757.862 null] >> endobj 226 0 obj << /D [223 0 R /XYZ 257.95 698.082 null] >> endobj 227 0 obj << /D [223 0 R /XYZ 72 681.988 null] >> endobj 228 0 obj << /D [223 0 R /XYZ 72 546.264 null] >> endobj 229 0 obj << /D [223 0 R /XYZ 72 532.327 null] >> endobj 230 0 obj << /D [223 0 R /XYZ 145.623 439.876 null] >> endobj 231 0 obj << /D [223 0 R /XYZ 72 425.839 null] >> endobj 232 0 obj << /D [223 0 R /XYZ 72 323.924 null] >> endobj 233 0 obj << /D [223 0 R /XYZ 72 309.986 null] >> endobj 222 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 238 0 obj << /Length 3015 /Filter /FlateDecode >> stream x[۶~&pEp8:m׾qxu E$Atd|cB  g3<˳G/I$}.3xY.W˅ IYQΣIRG3F2*&ƠOƊĩCjAM%% zT]`jMT>֭7aJVh{'j UBFJæ E{sJ/ 14i/&{l\Xz69CaqZa6ʞWQ{ve^c~[ 9mn[I[EmhN:V~@)mWn 3T>>%]r"B'5R9&EיV0>S#|-q\}qbTkySU1hØ*FUEP.з1Iye>f^]6As q*7y cHw+-t)쪾 eUTTMK0_g+ 'SyJIy,xwmogM3]fM&wOB UXpj+i"- <ЙsvǒEY=˜~_gI-752{UAgB JSݙD:͒WPDyӳծfSK0DYqii ▔ omj:(eҜa &0ʖ cQI։Q/B *j*@; 7Q&^\Z"FIy'N$HVp摏ʖ*pkPB;c 0B%qe`s߯N )Ȏ\b01wC_6AQAHqXr#V[o=+a-,BQiX4H xiZh5<.a5"gsw֩8(s= qSY Ճ ɪ<*YJyRNbm I04cO6vﰭWzᶵ/v#(nB7E݇x< &VB!J4*6~+K= V(=rQ Vѐɢą 8: "Q[nBU]A؇{ʻI2GRTi)3RmYCvh֧]G1noUyajUX@A$p[oC=YאސR1ˎ~e 1 ){kuv\鉑SBt$JSM>⣕ַu>G֏"{$HK1)EFcr. L<~\(m#(~Ayo0h=- 1vukm.ۣ%^puJ$rUl]x1 ? 2b6Z8-]=IQ`.:䒜!ŏ.5Ѵ{4t -,lk6PUm]8,Bĸ7}dgѪP$4`*¼Oq]A<\ǃz2N~E_\F@Сݠc^l+*K$yƀQ8 ֨lr}O& 2Uσ 9gѓġSH Y:V7e^`yY{O]/Nۓ;)f^!7o3KTwbxc m?8E} -$>|+Ѳ򁽕)X>}d/ */|z,L]}("/A`y#)U_ עFiQqh!U﷦bZVⰼٗh64G} EX}4 ow&Fs &@41i 5Lkm5>_Bzd_P/ꀲC9#T]zAR[_߇ Bl:O[?OwLMԴtf)N,%AL3z}ӀĔQk[ i:um'|н{su^8W]h0ORDumE<k˻`Rޫă۱Ťuu79 LX |b5k7yW$x#ԇ[C U`x@1E{ (/<=Ze>!``P$&Au3hR>ouM@|o2NwIH)OV) 5 W:Sx֩N>>XZ\0GȒL2ߡ=N .|Uī& 0s*5 endstream endobj 237 0 obj << /Type /Page /Contents 238 0 R /Resources 236 0 R /MediaBox [0 0 612 792] /Parent 195 0 R >> endobj 239 0 obj << /D [237 0 R /XYZ 71 757.862 null] >> endobj 220 0 obj << /D [237 0 R /XYZ 72 497.28 null] >> endobj 240 0 obj << /D [237 0 R /XYZ 72 483.342 null] >> endobj 241 0 obj << /D [237 0 R /XYZ 294.244 393.224 null] >> endobj 242 0 obj << /D [237 0 R /XYZ 72 377.847 null] >> endobj 243 0 obj << /D [237 0 R /XYZ 72 333.261 null] >> endobj 236 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 246 0 obj << /Length 3606 /Filter /FlateDecode >> stream x]w۶ݿBarN$ai=>g{HsZ-.T]]|D2em=؂ ދ}v^<{YD˛'3b1].g"WI9ҭm?oT>iCscw1j #+pQم8 @7@FDV4.aba^S![$⢜P/; 9Y!,bPa AV| ~WMR,;/i8n&i\R1ɯ6Oe`iV0VfNЋKO CV7+,ׯaMJ_z2i3^Wk;]g~LUum*{=O˻"[1eCLz'_ʤ[CId!w'C%!ku} |7=Ο?;foh0O6K8 Fh82xG:L0AA 1i vD*[1&,X@!DGFl?ǣrjlRT2 ɖNp Pώ&1D3@7Nbe5k|PJi#?'ҿ:OTG` hh <-b \_kbUnҪ1PQ~Xh;Vϔ&Uӵ 40 (u+=//RRBk7h5:]%2O+qLOb$G6q9@DA ȩng7}ޤ Z5>gXCk!ܥUc 3y9,CX0/%6CB=c+)K]c$ng:2ԏ?"Q8[v H0O&so \cEdMR܎Z+# -lw/N[Ze+Ȁ~h:_^ez>Uӈ> [[QhraiV Tb^E>{lMʅHSvyK؀ȓFlx"OP3hǑBZ[Kջ# ntmge?Lmu}PZ0@}hUQlWe^V#(kŇ:J%^2f(fw&k lĀ]@o(49,gH[9O:䖀ELoK|ӕg!㋣an@Z5"(bȶcwٲY]m}D~A{Uݮ1! ݑS~ P / 6[4՚n7_: /(h`} I-Ӝ8v߼βx@0A4d sV.G5DO؁w _Ls"'嫬~R 3NaۭiVQȭhlLFx`1fw]C8b0/{ד T GTEQ{P r뽇Xߟϱz<>pb'S4&YާM=s|Qg1bu^!wus @R~|YIE1lŽBuKR,un}8x`Z O :_67oS]F~i;if4wVY;k'\MziGH*Ő.ɝfbpvUvZ?Pv/,}PkD#gEBjϚJMSerzۤnUʾg4ԫRFuqsNBuN|ݺȢH37T7jBy,5J::Et'fZ 0vfTo%u`ꠌj'aI_5}Q+i?e'KaMr%8Myr֬1MN7 }e=#y tvRҁ~}xH;q'Z$riͪPL ʧ8t@(Jm`~~R'ea, bWI+ /l+[椢[jf{XPPӦrLDQ!ܣF%h)5ı?kpeeZl&.JyyWv"ܔCFEG6rOe'LaI&lf +O*Pf[yd{A)TF1I?eS^/G_wn[zTX$,/jk 'ʩNfbRyJl?wV#Ăpcn6U{<U5R5ðW mΙ,Y]R: A!8+/!y-ʽ+OpG0J6M{-Vr u endstream endobj 245 0 obj << /Type /Page /Contents 246 0 R /Resources 244 0 R /MediaBox [0 0 612 792] /Parent 195 0 R /Annots [ 234 0 R 235 0 R ] >> endobj 234 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [1077.916 575.143 1140.481 589.091] /A << /S /GoTo /D (property-traits) >> >> endobj 235 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [104.767 371.905 110.745 385.853] /A << /S /GoTo /D (Hfootnote.3) >> >> endobj 247 0 obj << /D [245 0 R /XYZ 71 757.862 null] >> endobj 248 0 obj << /D [245 0 R /XYZ 72 348.194 null] >> endobj 249 0 obj << /D [245 0 R /XYZ 72 348.194 null] >> endobj 250 0 obj << /D [245 0 R /XYZ 86.346 83.914 null] >> endobj 244 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 254 0 obj << /Length 2338 /Filter /FlateDecode >> stream xk !A`8"59ErI$(.APYr$y7_Pmoo8H ys830ˋ?_^ʂ\JUXhQ&\r֔}74j-f ;S=#*LWvxˋ/$P D" `xc,u gݵ $ ^"sk%C8~T<-iN;~ XN_nUt-'jWUw[?%0~&d 2#T ' acjs lƱRmj@}3>0)fDFצ^Ve}혀}0#7yq 8%YAŋV{!p'[I7m6gAdN$Cg_7u/SvlQnM{At$^R}yJ9wqdzZۄe a] F)Bq^@dY<^/< |M< X_P %=p4pߣBӉ#U|-_ϞURrU pUḄ =^i>HAB=Az+(hj}:bav ~0.ǤKusU\{:hrX1/TxG}FW~ T]sh5aRxS %̲>G5Xyy5ބRT89U\DP$z2}tPoVY, KW\7_3 (aLdi le6BnMWtkxղ^T%/.nkZn[@|GiB]72ؤؐpg֌k >2;z(TL[ ɽ2?ThhH0ƅ^RK"9 }ovit%vh5͗g!Kx[lC2ove۾G#5.uczR3E!"D 6BF o \(hٸ3 /pqlEVs]0L}mSq 4ugU(ë, 0-m 7WrTqGYxmKCkw[p% 5eACnƾډusFʶvjɧ?M:H}FBL .j'bbӼq31q[dԽ)N^g -mvS;]S V[|B%ݶXP rGsںKؙפ,=˃15N0QvbDEUD'tdD(LF%dFwoܒ Noovplӯ ״w_5?ݴ:D\Em/{(nПCp~rq;' B 6(yT&<<滏?8QA'))AAyw߼_HC<7~e6SbGPϊ:,{̣7詃pŕq\6MTbQ8.ldQ@&>Wer|y/'u_E'fx[> endobj 255 0 obj << /D [253 0 R /XYZ 71 757.862 null] >> endobj 256 0 obj << /D [253 0 R /XYZ 72 496.653 null] >> endobj 257 0 obj << /D [253 0 R /XYZ 72 482.716 null] >> endobj 252 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 262 0 obj << /Length 2203 /Filter /FlateDecode >> stream xZY~_PU+/6صZ6 Hf4.(!Dl!>wwZ[+JhAJ4PbEÎ_,i\~EgWgQ K("e}8 KR8(`#ʂ'M$kp;<ObfxW*Y$ }[)i4,OZ ~e?I7R,§R̪|R*7fSбJٕ8@o6 K3RYkjآȲu1!Aʑ6+QŒ%Zsz̾j`CHJ%qlvv5D89f(geP I;E;u)K^77[f PcdF }-wB2 +Wjl+W? e P2Jk{0V.Fl@/y[b3v ˎ[%Yd!'(%SN}lxB:&FbDFB^-~d8/U.fhERa(Kl#n՜/SδRH^p'{`  !7%wΛZ>ve3[xU9q]'c#7])e)Z1 OS*ƧZ$;6O_;[uBN]C>⭲ݗ"o#v\mX6݅u""M ;^ǡBlx@UQd C6En 8 [ۣyGzlY$YyP=]k6U7~bT h??F-H(--X):0#ƈrIq-RD*aH7^kCm)j vK'C%V\:{O(.XrFŒC{h!=,lT.O+#(EKL]{7DPUZ'@,\;z8 5 1|Z-k`LH֓w?@q#|"N0LԀ.f@PsR9+㤄U[ ~KSWԕeDnt VI҃ؗה},Dkڝ|S$7}}8\EIݬC\\wٹ5 dE|zY5ȭx;ަ)A)HRjDz^7QA^Tۗ~i,}t}s6JUD?3J ;Bbbq+0aBh?#rMX؛bڕ.xwx\G_!nD,Dzl8׀ T:8ܬY9RS5 2^tk"EH2(yA'fٳË{Ľ:Yuju)HNsYѧ iCsq=qym;>Yә^oo+ʺW35j թO> endobj 259 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.372 203.878 478.601 214.891] /A << /S /GoTo /D (deferring-traits) >> >> endobj 263 0 obj << /D [261 0 R /XYZ 71 757.862 null] >> endobj 221 0 obj << /D [261 0 R /XYZ 521.35 686.127 null] >> endobj 264 0 obj << /D [261 0 R /XYZ 72 670.033 null] >> endobj 265 0 obj << /D [261 0 R /XYZ 72 530.101 null] >> endobj 266 0 obj << /D [261 0 R /XYZ 72 516.163 null] >> endobj 267 0 obj << /D [261 0 R /XYZ 72 81.347 null] >> endobj 260 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 272 0 obj << /Length 3066 /Filter /FlateDecode >> stream x]o6ݿB=.eER4n]w-pH@^qm]VƷ7k7>IP0!9|G{7}{WA"Ȼx*R^S]ޛ2MVtrBQSkUK/YyNW4Ykx\rً${ҋ8E؏/{*M;j(^[Be}D WGk`}xbY7Ur1]g]F]Lk q7Br[oȁ_l견A+m#`M Xûή1yAesَeR,T_ˬل,OFB[Xms0Q vqn5.1H& =[nE ,܁>nX-:I(T F[UzCmC2reQܾu8Zk늺r61%xH@V5֔;Fdi`j44l͂WɋnZ1̊t BC=MF;.P, L.쵃X4l2ky5].jܷdIw@ܳ7r&MXq"ubb'ze6N2V^˩(qJ" 2P^ܜz ]CLX)`ԡRRfצ<+ЉVX93!+)Qsf $gץ!XmmOdg;ΖA)і-ٲ]USK6c'KG{èHeÚBL`M} -YR0~kwM뺆\Ѡb `tiԽy묵2ujA~kF!S6㮞ͼ6UCmV݀4-뙜)B:91j 5C<`1s!!siIٶJ0% W] PR }KskHliŘ -@ 2B(mD0k0;f })Q@ l43 q $X%]=r>P[lhDkEj|S, =(c[.r%`u-CþCrĻVPUGB%ZC_Z' :[E[+N֊9c5f6--x=#h JY%+P28RJ#*S3ytlh ם.z A'*G0A(- 95beyu^lb]rs|ml~ IPP`,!9P`Bu"GD,4GHґ餜$it,.7zRjJBfۇJ6Z8$ゅqț"LC7]ݺw{aooW{eF uSUVh-3p@ D$}zTzYMq[4t6jЇO%!c6$Lα' q+*@g[vLs{B֩ zOP/&)^C1r0nk7?8>~N0O``c{VMu<͌efhIYl;5rO anw&̒+rc3gE[PB["b"\8'" `imE 6D'X1[CQ1i|92bS_b P[uf_R)s Q؋l*)m3.]BQ9͊q A%EK9$)mKjpߙOhJp3Nѻo>lMvS~ ';P'b٤!W&e(D{ji+ZqؗG'8Rv=8`5pJ@8/w /4) \Jqcn9[U"1UvA =\U PɘHVu^8%- {sjH^m!?n77vYyr {%Pzs 6lWAF̶Oe>>;6PX^E/-\˜\W#5V́gh]7iwu>biΤߴSp4`? }I<J7qEeTq=:} 6_n:lTϤl9R~a4"fa\֮LĐ=ec,4/6VȱFayJ9$L5sH2Z *o.Aߥ2ʹ ;7w_(mnEAv8PX)Ņ@)c/S)ؚ@(#Bm]1{WPU7ol4ZؒP込ѤjCzwM^Tm%7l"]o BW'9_M?bi5Sm &ϬO{A94s?Yrc V5Dǻ(q|La8e\e`" Bd*C6fEAvQ"D_:P{Q֙oz*yuEuؙ/qQ)' "gU9BU)sڟ\Ѯȁ<)Qv7\BAïjC9+ݯ℃t~^FQ$daz!D 5 endstream endobj 271 0 obj << /Type /Page /Contents 272 0 R /Resources 270 0 R /MediaBox [0 0 612 792] /Parent 258 0 R /Annots [ 269 0 R ] >> endobj 269 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.175 431.46 293.198 442.364] /A << /S /GoTo /D (persistence) >> >> endobj 273 0 obj << /D [271 0 R /XYZ 71 757.862 null] >> endobj 274 0 obj << /D [271 0 R /XYZ 72 720 null] >> endobj 275 0 obj << /D [271 0 R /XYZ 368.166 416.681 null] >> endobj 276 0 obj << /D [271 0 R /XYZ 72 400.586 null] >> endobj 270 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 280 0 obj << /Length 1758 /Filter /FlateDecode >> stream x[[o6~@̑Խ늵ҭ,4(ʒ+Mwx%:s$/~%`g`t1%! ܉1ϙΜSw:[L b5tWV v7,? 'p䤫vfKbBZ9~C;oF8Z8r%5QH<'"IxGA###&?d28/N׼,H-X[V\e +EqHAG{V迖]rJP@U&$'7a/-B/(`c *+nf>BF֤554wZvh<酭ϙh~\{ -|lem> Z>^јZ'|׋Y„]0IHw)}Vˋ,YQǦR{ QkjuDq_X3x=3,H/j.l$wphͳ8k_ ƗNx!fHXSS7 '^ _nGaFOοgጊSh3>9 _B{}}IgI."GcDyo>>gf="#`TvCjǭ]'=Tr:|º7i~)xaIjJoX2|1h~`l>* /0/e?'"q|K[R~VƁPFBRxK}#>(xpi]vȽitRobLS&,dV0"ڠ?O0pŒJ~UV\lL\!|LfRdłpN-AXY%SvB rQXe gƨRFMa/K%#x(Ei*>C0'TN D^=[{/UuvaacYZieFq"ncy&zrέ r+U&bYf`¦ZWݚK ^7n./dVek=bUθ5e;GJ9W Mm." '1KYΫwq-b\:HT#匧e,bYj}l-jR]U"^w=;4 PQ( Ӵ4Θr`!s ު9}^' endstream endobj 279 0 obj << /Type /Page /Contents 280 0 R /Resources 278 0 R /MediaBox [0 0 612 792] /Parent 258 0 R >> endobj 281 0 obj << /D [279 0 R /XYZ 71 757.862 null] >> endobj 282 0 obj << /D [279 0 R /XYZ 72 332.268 null] >> endobj 21 0 obj << /D [279 0 R /XYZ 72 317.259 null] >> endobj 283 0 obj << /D [279 0 R /XYZ 72 130.713 null] >> endobj 278 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 287 0 obj << /Length 2438 /Filter /FlateDecode >> stream xZo_AB~@ZwH}HV[TwfgH؎Epwvwv33kIړ_tykxH#ykġ0ƋD.W{rHu>mEbfۗD[Ֆ -Og?\LS^a@2O&M7kQ߭gBRHy /z*%0Ԩ(n&&%Xo㽟R-]$)z5yY6Q7 IJsqo[ue-}R34`vS`8>Bwb67J7DnAc՛\&.N僤^F)6rEݒXŠ^ZF O`OD3UqECq1`:Er8#+W,֜a}F<.NG'MN*0=p>)qCbsayS!p;H2߬U93BMCfthCANޙH)H$L*;m Gul*%8'T&˖bsBmfnԷEv/+B 8:a"pڻmIamֵcd.F!Fz")P4ن{[o1G*D#4B7iMIWx8D$TA$lR檵;T8R߶*1p&છk^CmY\[`ޝ"gL G΍)qc97 0ET~l<,)Uw#epl]m5qؔޖSI7<ͻ0GMzs|$Vo SdXJaqNd|KZH9iF41] ~a7]R7ǏAp p{w"a$5_Dg<ߍz;RFϔuLJZټز0UD$Hrqd=ώ"oN,-3̯v}J3T{#M^[1K*~~ ݻFmAQb"}ֽM-A~?p*AT9(?F?< SBRKFݨ?Ԙ'49q#y.6uT nwih!th_ŝ#8Vd$={녭msN֏6;4 PI'ϣD$0yx`~BG/4EREM4?C/#~hc??J endstream endobj 286 0 obj << /Type /Page /Contents 287 0 R /Resources 285 0 R /MediaBox [0 0 612 792] /Parent 258 0 R /Annots [ 284 0 R ] >> endobj 284 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [198.285 497.214 283.674 508.118] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 288 0 obj << /D [286 0 R /XYZ 71 757.862 null] >> endobj 289 0 obj << /D [286 0 R /XYZ 72 720 null] >> endobj 290 0 obj << /D [286 0 R /XYZ 72 623.739 null] >> endobj 291 0 obj << /D [286 0 R /XYZ 72 605.926 null] >> endobj 292 0 obj << /D [286 0 R /XYZ 72 438.554 null] >> endobj 293 0 obj << /D [286 0 R /XYZ 72 424.616 null] >> endobj 285 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 297 0 obj << /Length 1387 /Filter /FlateDecode >> stream xڭWnF}WMTkm«H4Hi`bJ - ٝDҔyΜ9su꼚+ zb,2g.fu$Wl5~K>).PN2iU'jfr18a: x$n'u2q(q<< "lQBE_: c0 $n=gwR{Zj4RY+>|d25c$T8twv]V*+ ZЉ5fiը+SB9c$} {+զ&piR63 =D14P8#˜֮Vx@AjNdnj z0b.q}#jAFCc3ğA2* ]`QʉobRL љX?MXy>ERjD9x՛d*JD n95W>DgmK%^$Z[!ۙjPUFq){1 Ha0~'Dt L,nklc3ͤZf)U_yWWZ~gRWC&+mS Mo"W%>L!/S 6DՏKF | ŢE7.jV(Nz٫6kQ(( jJv"7ZvYVwVv9*yӍƻ0 ʑ6Ĭ(.>F86)=Z&kڶcaqB]˵S]c`!xA4Η< *^OؓlQwgF̺*J$kReseZ̳pqŹW[}J?R2\ej{cO/uQPC5Fv,C˖:,0mqt.uzy[-˦ڿ>2V{v`4#l|-Oyd =[D}tDIK/bL oO3 v4eƐLoCʌ>> endobj 298 0 obj << /D [296 0 R /XYZ 71 757.862 null] >> endobj 294 0 obj << /D [296 0 R /XYZ 225.692 686.127 null] >> endobj 299 0 obj << /D [296 0 R /XYZ 72 670.033 null] >> endobj 300 0 obj << /D [296 0 R /XYZ 72 520.138 null] >> endobj 301 0 obj << /D [296 0 R /XYZ 72 506.201 null] >> endobj 302 0 obj << /D [296 0 R /XYZ 247.162 401.815 null] >> endobj 295 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F29 124 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 305 0 obj << /Length 3281 /Filter /FlateDecode >> stream x\[~_ģ}I9IxOHZ@˯O5ͥ Jk-o7~w_(D, *9t!X@i݊HI?3o{S7~R{f>p /$* IO.ևǷbXx}qa7J=YA/Rwfs7byTaGp: }E^dk>7jcPa%qOY!Z^B0@#Kx |nߵ<8&㾪1s,@tVa}b0N-yxe'QY ޺ ֥+Jˌru(L Ą{y.dhF*dXkWb[?v,櫶j6V|]'qFqfLsxKRzv_.um$}{N2$H-¨"o>QVҮn60(ߵ3b3@ |ߪ^AHr`՞h}E. gU'Sc`}BR"ȋdSK0q-.VY[ iҖ7FxYTlq@9?qH1C#iR\hW26S!35}3H~;ƍ)l|yAw7NEv(/JhJ/}9>M5&!B 3_~ֈz'Alk>Aa^ s7EQ[a:L꘤ڌO =qUEޱ CO.v{ `!j)!"ќqjSy㆕Tya?r!Wn%o!;ո@ȡ?vպ0C;OJg&Uw0﬐'CRK?w-*;ir1slmdN!<7]a=AL,p8+;8~d muU0.baj6 @d{a fȁY6űnxEtPy*SzH6aJ'vfໂN3&W܅wv{`Ė]KB _B2 >CWt (y9{5J,`PkS Jym;:wpd`x=W @"T]H1|37hY\5ېg7ڝ^^N. M KРe` ۝?U}{a9 !,otkU;rbtPaPQ֩ȁ7P 8"N.d~CFu򹒢-mQtx:} K&38( 5_abF"vYd0aXW1փYKxNr;*W!-olxx8w!ì'nj AU]݈1}Vs攩жZ(Sy^uWXO@ c UJ;Kf3j;tu~J+# j֩c=U4tK(b.MՇpܫǡ!ے 0*9<JڲÊ9dsB'MytJvLܖ:<'Jnr^)}M {W~Vu<*dNTS:*ݭȒ!WslJWDGZ<7C 3@|ݕv@gYаMJ N>orYdʥ: øWeX̾zw*C*>S}(5wf̻C]u}ldgQ\j%ATO6po̗Y5Nx) 7Y }Ql!Q53:n[[қ (n# bODގ:ܪ9s&v E5Z#I9 ZRlQ]G؍ r{j,>8M of_3bc>z o}Af3muaC.vև AܧݢlUlt,7l˲eEpq;6[,Y Ap b^/)Mf1k!`)trƒu0`*B,BoypT|3sϣcjbH hy_Ű>= 򊮌$^ ]gtB{̠:|):z*iǐPjV}f6/_uNG@Q}I oo2tGS.듹\ϛ+;4y\fL;_~3 EQ\-Rp }TŲb+%! ?Ţ(~^/ͻw(';dq;.lec5~w~a\!MD ި*2*4_k 8"uapk8QqQ:ɮޜg- {6zZ+|=-)sMQ~ л z¼#5v\% ;31bJAHwW ߴ^*Tt2@ . endstream endobj 304 0 obj << /Type /Page /Contents 305 0 R /Resources 303 0 R /MediaBox [0 0 612 792] /Parent 312 0 R >> endobj 306 0 obj << /D [304 0 R /XYZ 71 757.862 null] >> endobj 307 0 obj << /D [304 0 R /XYZ 72 720 null] >> endobj 308 0 obj << /D [304 0 R /XYZ 72 695.893 null] >> endobj 309 0 obj << /D [304 0 R /XYZ 72 695.893 null] >> endobj 310 0 obj << /D [304 0 R /XYZ 72 370.914 null] >> endobj 311 0 obj << /D [304 0 R /XYZ 72 356.977 null] >> endobj 303 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F62 183 0 R /F31 125 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 315 0 obj << /Length 2905 /Filter /FlateDecode >> stream xZY6~_7Kͼ&q֩l6J ѡHǎ'~!8[`l4s7_Aɽ< q4ʼ(7wnV} lδ4wzNMetgxxj77_v`WhKts8߼@f{am&J2xVn}O%Bb{~'; ']Nm6C_vRmˎԻwW<)hԼ7geF(da5fbmаEy˦.$A?ܣ}kt{A?Jyy"4.Y/UiŁhиoyb.̡Gޔ= M]Mk $D;&jӂɮt9;T^׾4ꂼhIqZCk:ږc4`x ɱ:Q(4ڏ}x],2@\IO"gxy^Lm 3jp7*0H<}|իw:pΖ?{GK[p@8YI^.ES/6@lV NklA 4ϟéqg cfz3RΜ?{]g ~L'g\ʇ{m_j+ .lo;`ڄm0M~kqK)N`P]0Ga}6=) $tV{.8x#7rҡAVۣ|D1DDlѴx.ae"/?;L.qj lC*~qV2̤ɐbqrL7 rώMu ~=i ymEU[q)kp r% kzAʸ2-Z|Ę8Z!f]-Ⱦ8c -^^pӪhnC#s~''zLx WL/SUNpqhPјpBH8cdhIIG.0Rl?%.OM)VfoZEq?,OzFIB6Jo`̽5b- tF$'qS D RX=PR!+$u:)L1dVSajvk(HGxWΗܸ/Pxi6C7BSS<+1/~\e_= n%*|U;SSoH%lTΠOvcyYn_>BN,k9/tQs$A#T%#=`ӥY x!R#^z03tCٝ7'ǒR]?%M@>ju`Q+0tt(fMg4eD55(lR cq3GbEy'v=oŬudx s^aY_ q~©g' sDaҳ]saH6\:hPV`/±.d,׏n@4]W+7cVp5:w0e"oO(ͱxA6d?$b~+13^S š`Li"u4!"mcAC&8pʼ^66Ox6w;_lำC3`_+*2JQWs9mB&_XH,0 W:t@4)ڜHI9&5$B/O=;nԞrRcڹ|u DQN 6̢|;ar/yS@"k$\m2^sFa_R}D:XL|>(qfx!|1,~\ zc:DF5"9x*ţ|[Ur|^ 8g;$PѲ@8n'Z=ߝ 7Kbr{(q]˚o gJ&!_/pF$Tt5 X`m(iI_GOoUQp892m;d_^$3BVG2y @A%<}>y*O?:>9ĐԴ-"KC8ˮ-&kRi_!Ɣ- ZFq` wMoKʏ4MZ*ܒ] V/\2U]b<߳zQO^u^a\ CgqX_ K{{3F-5ܞƖx9!9!'|%RͶRD1e.ڞ2Kv5i]E`N/$8dvm cO" ڶhx:K[G6u)|t~۪OLx淡QM03s|[(A\ZS9{KQCÖx^Z4  b UϟB+5`#", *aM5BT\kϹ=sEY8Q KZ7ǜ{)qYQm[#yC ڊ[_sav4ucw7+Ԉ^g*[p#*l' L%+ n\JCROd/Ε͂dEt.Î1,& ࿲Y{(⴨8K/!DR}s endstream endobj 314 0 obj << /Type /Page /Contents 315 0 R /Resources 313 0 R /MediaBox [0 0 612 792] /Parent 312 0 R >> endobj 316 0 obj << /D [314 0 R /XYZ 71 757.862 null] >> endobj 317 0 obj << /D [314 0 R /XYZ 299.783 698.082 null] >> endobj 318 0 obj << /D [314 0 R /XYZ 72 681.988 null] >> endobj 319 0 obj << /D [314 0 R /XYZ 386.567 384.811 null] >> endobj 320 0 obj << /D [314 0 R /XYZ 72 368.716 null] >> endobj 313 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 324 0 obj << /Length 2243 /Filter /FlateDecode >> stream xZm۸BH?DbVEP\^=EXpmz,$6 %q֎s@3ÙgCQx7?ُ%:#"Ʉp fA"¹qgs+6dG+_7OnT:Ӫv8ξz7劃dN䃔E^W7D;f ~3ǫ^yVk_P}k\G9G < aȢ0,;j<{bD%Q1<ȹ5/aMLz/)#ʵu{(vt=I.dzusMLu-QS}ALC骘Rk >R"UMO’54z 8Kd}7/Fy?X9Ōx-`P@)i$rY1K"nY)QGͪ<֘bLOVJeQ G=y1)`")UόWdv9&Ӗ,1Igϵ;U؊0Q]7j–Ky@O`̋ ; Ԭ",`ZGKyi0)caʲ,3J(;%4HIA~6'C.rlU4z`X},[k7ugh9Ơ|"[ULrA(zI.|G/Nf^r9^|n<-X$a2g2Ͼj<;<ž[^\deƵZULآsE;F-"vu;gޠmه>mџ.Go {lxlAfs8X (My%m3WYEٳKj)JN.35׋o^c|qRwp7<]1׭UGw39yb&<τ{n^=@Wi9<y~6z}_ 2:^v{iaNjccnnD9N6z{ۮ q)hu,vεl6؄}1>fs{2_xșHdCBې~ӾʹȁK My4GE`tcptŀ(r0``<ϸػNA\KpO~a/6 ׻K)XJ^O0[`p0ŀS%F5n~('@*ў IjwM{Eu HamUU+z²A'6frAsp<ŷ^܍I!ӼE#S[YugMAO[ `qkNAzdS~٤Y}N>HSCǡ)Ua q&v\T]9=lXnȏD7X!47v(Hkݬay#%f9I֛{3K05,* רlUzY?ė1ԯ"UsM*٤ 3o,I#8Vȡ5eU/=oXQ0 PcCmEްS#]AϞV, ji4I-FDJs2-= PsQgm8kuF, sT]BhzKP*&S=wxݽmb{߉^/d="+j[7#D3رK|4:ö[.xd,E YŠvt!BϋJ5*b44Gnn*ٝ {Uk;u@e7&8?Jp: + Z~7cںJpGEp /m}'5+fKh lh{5S`g4E.&p +apϛڮ w =p6gO7wlj섹SuQٝ`lYV܂5N6@Y/ZIfXjx1d2M 5MJIh! ^rII[(Sm@  ڗ66{1b:CHK;Vߝ`U>wێ|$&s䆸ύ+ygBS&?2|ᱤD5tCݷ3H6M֤L~L 1'z{YR_?`tNmN[V:J΀gK]'j0?+p8U7p"2#>v\p[h-Z endstream endobj 323 0 obj << /Type /Page /Contents 324 0 R /Resources 322 0 R /MediaBox [0 0 612 792] /Parent 312 0 R /Annots [ 321 0 R ] >> endobj 321 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [380.193 105.306 466.508 116.21] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 325 0 obj << /D [323 0 R /XYZ 71 757.862 null] >> endobj 326 0 obj << /D [323 0 R /XYZ 72 348.452 null] >> endobj 327 0 obj << /D [323 0 R /XYZ 72 334.515 null] >> endobj 328 0 obj << /D [323 0 R /XYZ 72 186.448 null] >> endobj 329 0 obj << /D [323 0 R /XYZ 72 172.511 null] >> endobj 330 0 obj << /D [323 0 R /XYZ 72 84.449 null] >> endobj 322 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 336 0 obj << /Length 2783 /Filter /FlateDecode >> stream xZms_1ϸ;LƮ~3%4 ewvHH(h<-v;1.g'/^)"U읭DyIhDjlf&\%6ohsVdo&e9 %엳N^v"AjI$H/@xזj텱{w򯓀5EbԱX8|MJFr@:!~uu5OV['+- < w~KoʲAV1XX?PG^D \DF =E ijtbic.n *i%6'&̬vLaT"qV7s-as%켨+hٖ[KI# |n׀xYBG%*4u00F͢c뙊?)Cf} lYIJX!5 *h6v@2G |7 `1<`$"ұ2k~I5b#N Pl$.@TV-rn'0wA) 7Mgvw]O'D}3U^A-L؈}ngt;; #2nQĪ  7LrLzѝ;!d69apƧl ŖvV p`v/N:POmi0%3ƔdX8|rWNe{Q?\Cwlռ a`h?[,Bm EliSot "R<㤭8ur P4crf;Iuj4۴J&gVyD@ uB7 ea-D'W+E SYF'Ae„MZa>p˦5<.i91fB) R1MF_}v>%Jiڿ[kJ([I;uARb-0} gKЇyJ2-4ϐt\R8ʱ'5p58Dc+)FCFhihYž)Gs5:j3l1(hg-)O2WG[u`*<J躰k8Uյ6mw}#OpƎ}']MQl#l@ 9qAez\Va\﫝q `=b A#h!hX`lyO,xض ͨwCm)n6fi;Nxqndk۽)r H d|[eI{)R'7eYe2},\ )#g{)Y[`p6qWq4vI>6 76mFbsCk/is^ [3/\WM@14! D:!X5zUKGh}o-@W ٦xz̫Xoۃѵ$t__g확w:cMH!t<9o֞Aq(\C8mCqNǛv_/ZVNoG2 KNx/+vhe:V[ym/ҫG0|ۃv= {+}uQ_qW"\Bg)\b=k7sڵnRU0@:!Ordf~>fm> ޓ} .V*Hac*Vtm?TXӷ{ ?V :g.-觞L{%£ . Vs2_{)<ÊAV_9k/'>YiU,L>m'WB2=L{&|F&,R4F4g-]iGcНs I<{l?r{`򘟸RP޿GlIc*txi+Վ /2wP endstream endobj 335 0 obj << /Type /Page /Contents 336 0 R /Resources 334 0 R /MediaBox [0 0 612 792] /Parent 312 0 R /Annots [ 331 0 R 339 0 R 332 0 R 333 0 R ] >> endobj 331 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [500.133 611.549 540.996 622.453] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 339 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 601.631 114.889 610.159] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 332 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.373 569.706 263.303 580.61] /A << /S /GoTo /D (notification-handler-signatures) >> >> endobj 333 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.53 314.231 350.811 325.135] /A << /S /GoTo /D (trait-events) >> >> endobj 337 0 obj << /D [335 0 R /XYZ 71 757.862 null] >> endobj 338 0 obj << /D [335 0 R /XYZ 72 720 null] >> endobj 340 0 obj << /D [335 0 R /XYZ 348.29 560.904 null] >> endobj 341 0 obj << /D [335 0 R /XYZ 72 544.81 null] >> endobj 342 0 obj << /D [335 0 R /XYZ 151.322 421.44 null] >> endobj 343 0 obj << /D [335 0 R /XYZ 72 405.346 null] >> endobj 334 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 348 0 obj << /Length 2618 /Filter /FlateDecode >> stream xYo]w:759<ف@j*IYֿAe+}(Ù)\%4| :9%"SD$9Hη|Ӵ-[y=~LV(Myx6ޙ);Nξ=?4aI$͒4O %ȓ[{Hz3f ^%nΉf@?S$gA }#g<\NC0hR0"qJ؃2} Rdyܚd9<)-lWVIjՌ§*o֚߮t?M5(pp()TqMu/dќ6Eѣf_Wf~SyAr&\:M)~1gHg0""qy>[Ռs;^z51J 3ID3b$`Qހ)Z ʬJ?냁,!3 {U}[]8ެk>P7mgW7/]xe1v_mp@3uS۽QQV [H2lY<$PJ3w'c1 D ߫7ˎJ΂캉dT2+Zq607MUzg]`Atmh(S Y߃{y>6[kqsB& qrSt烖jܵKXֽ6VBR1Є"2BDK_<9ȰeKȃxLLty8Ľ֡ٚkS{4f<Ӯ LD\+CAL6nܳ끘[Ч?,˅a< R&>hS|2W $My7I3!;4PzBYĘ6lL!5~\_7mokf rE]M:,fl0%2:$YԶ][PzEAϟLvsz%πPg3rb{x ;L k[CDz .έ. ӜQc@m'Ui8!,h@~_:93R8WPCV,4'9%¹ʆxEq]n;Hn@ Mj67<9MNp^mzSyuљ q8]d##Uos?ukZU0-[%SMX?_KKZPvk!9x.b @ei F|-h '44Pk(B{V1)AP'H`W}q:P}BˇWS;:5 Plwwu_~ PPʁPGqcAB[Fw>jF0pJSuZdJwu3.]qРRьJU  <7w` un^M[k?nuk~Pw TWsS4mٻ97J F6*Ng^[9˅jy7/9^)v `P.3pE21#'?::RY'X`i*/Ghx}F1Mvq9vI"xYxY=BDcc2/9xO=yo9p޸h^qǥ'ch6fy&#a;A9A^,,LkxV0OXslcI χG} zf+g|2~q3R__g Ob2b|9NpItY^1'·d.aLP tS&!{GP>w`{4G<#َ՗` L_P(=2\XCA2 •׊m\evvһfKcca/G@BcR p)Px Jsƅ-?? _g_k6LFi~ ~'YN2@.#?n6Dn0Wkmܲ:XQxޭJPWq*q>/r-Sv8B[]V!+GK @(ۦc7]Fy1xdu> endobj 345 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.06 283.47 453.037 295.963] /A << /S /GoTo /D (Hfootnote.4) >> >> endobj 349 0 obj << /D [347 0 R /XYZ 71 757.862 null] >> endobj 350 0 obj << /D [347 0 R /XYZ 253.298 528.164 null] >> endobj 351 0 obj << /D [347 0 R /XYZ 72 512.07 null] >> endobj 352 0 obj << /D [347 0 R /XYZ 72 469.772 null] >> endobj 353 0 obj << /D [347 0 R /XYZ 467.961 155.341 null] >> endobj 354 0 obj << /D [347 0 R /XYZ 86.346 146.816 null] >> endobj 346 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F31 125 0 R /F37 163 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 358 0 obj << /Length 2365 /Filter /FlateDecode >> stream xڽZ[o6~ϯ%) ,n:mݢiՕ%$O6~! %cO>Hs΅thջշ?p$$\@@FDI,rJ/T>~uesFg4w:ir vy+\i,H*4X%agjDB3>\vEĔ0.B\-XP]c$c*(U$,=hLV4UI,cmRG%Q,; K@HAbA2t齧(QB4`T?N'X8 wq™#oPl0"@,(ҭkL($#'v@hĺ+n[c¢g[>WgxI8+BY.s֐u p|5z"f;]HE<D)?#SCօr|[y$ΝQY4;0ׅܶwXw=itP ؒ15m_Vт>S(b6M=94g[U*D)_ƉV7r~+FiieӂI@i2,k[JPFK1+K0uI"մy(qFb9$tmhg VNWEZ 8UFq`|,XIxrXVJ"-`%U ;F 霂l3g8h B¸=kv?hBv%ƢXlpyٹX sc©U瘰~s>#@d2_0wێ[FuVgXi]L@YvhSl760Ip=1K|-#j;8gQyD#1:">=5.`D B&GE|xsE#C .55sl}2NN_[uT`biw^-tύ> Fٍ"H|϶6XhfĠ_z:§, +Pw=+nAr2XQyo T!mm`v;gEkS lZ&pc_/=\`P7e J"-+s1*Ո*~mX\gx=QfT_D"B5zyΣ|H'&F|t(uw#zVdX7+:i#Lk9vHիZ59wzZ'Q."o9Ɠ1Sf(VŒɐpB@ObTwՊz.MuCG%Kq@g;wTBg#P^SXS:D/8hkN"xj{U.`I"%l'14=oQv ܄+-6QmHĶ3Tv׸#\ Hמ!;u W/eÈH8c +$y t >+C8\!Ղݞq.qBOMPtQtC+blV`_F?"\ "I\ Hp`_>Q1ZS٦36 @gd<+<<鷻N{ L{}3PݾRmP46dbG¾ܶ.+鶍G#7s玾H)`=.`DҨ'*"›G #OlӦ!FȚll%m|O#3)Ivbs1F7%O=Z&VG`ʄveV4|Rbdsy^޿Y{%pe4t spP%{>qa;_|>}%+41b)hΗwsQHh5/6 nКo+9s*s{fw|1)8G$X|3Ir8o^C<ڴ.]9ɰ`N{1Ss6x0)ޕ7^zSroSc4vIħ|FƢ\$R(jbHLh&=$Y-~O#s\k)υ`7i?8E endstream endobj 357 0 obj << /Type /Page /Contents 358 0 R /Resources 356 0 R /MediaBox [0 0 612 792] /Parent 312 0 R /Annots [ 355 0 R ] >> endobj 355 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.42 309.683 332.65 320.587] /A << /S /GoTo /D (undefined-object) >> >> endobj 359 0 obj << /D [357 0 R /XYZ 71 757.862 null] >> endobj 360 0 obj << /D [357 0 R /XYZ 72 720 null] >> endobj 362 0 obj << /D [357 0 R /XYZ 72 639.903 null] >> endobj 363 0 obj << /D [357 0 R /XYZ 72 625.965 null] >> endobj 364 0 obj << /D [357 0 R /XYZ 72 584.101 null] >> endobj 344 0 obj << /D [357 0 R /XYZ 461.545 496.594 null] >> endobj 365 0 obj << /D [357 0 R /XYZ 72 480.5 null] >> endobj 356 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F81 361 0 R /F62 183 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 370 0 obj << /Length 3147 /Filter /FlateDecode >> stream xڭZQo6~ϯMgIloч+-Z6} V2si"=N%J(HjDQ}{߿yTą&Tc,Pm^n(iYSe~(kNe9֖鱌o_}}{+;'2 qdQuz[@>JbUѣuR÷~UR"j6j_8ElG.$|K(=,?O]mq*GiŮj~MYф[NMa} |hc3ޕ;N,Bg-G@M2O7Ҥ.Ѻb6oL jpenlr: N@طAyMUԝzFj|F.aL,DiU`U1Q K@:"wYM4KRArھJ IRmbzm ܀hM~^ɣY/]q %Xxl@._VzK5JnQGv'"VR.v SaH0jja( &]e+PnM[;4,B>,hT滪uw)KPCnPgO ZS `Ā%B5Ú"U璯2ݹ@^ݿm5-L;si;}dy2pBʢ H/i?igYtTœB馡OAwW(D]77P/Hl: ځ6C[3GlFAQQj@ԉxN08Qo14o_2k17N~xI0t=Y7yhMlcPJ@iܘϠ\<䃢5[\*nb '[rDž>%m٪0%~|gS8P -;xM yCgaeOmk7]ݜ1 +OMc[{5 " wɨJ^7:Ivo0RH+u꾥8P,PQDB):cIO(Dcy״Ea0p}yt.M 1coS"rAK1a0o z- p`Zv3"Aܝbg jՙv#U^~b%dz|%Y 0\3}r%l ۹! ԁP-2K~VGb+rP:K;hmMq6dxcvw+1 ۊs{PCu="N @T) tYHcdU湧5/2W| Yx>uSJ:SQ83yni`2{h]\HR6W%z8ٮk헷@)\g;BoDR≗NUPϥnOԛgwJ)|HU%}Ɖ;<gr:ZFҭV.-Ec{!oگ͍Vq&V Ad-Mëבx @n"`~fך?y_nV(KX)9Uo? 6 S֫{+ZT(84V}z|~V@NZ|!Gg4e)xMo\\gO62S|pʃ~I,o*"QO꥟EŠxל/,e<03Ewv_޸G` .R0Ff WӦa8=w:?D)`X/HɏJ;)v_ endstream endobj 369 0 obj << /Type /Page /Contents 370 0 R /Resources 368 0 R /MediaBox [0 0 612 792] /Parent 378 0 R /Annots [ 367 0 R ] >> endobj 367 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.153 250.458 242.131 262.951] /A << /S /GoTo /D (Hfootnote.5) >> >> endobj 371 0 obj << /D [369 0 R /XYZ 71 757.862 null] >> endobj 366 0 obj << /D [369 0 R /XYZ 72 604.886 null] >> endobj 372 0 obj << /D [369 0 R /XYZ 72 590.949 null] >> endobj 373 0 obj << /D [369 0 R /XYZ 72 468.785 null] >> endobj 268 0 obj << /D [369 0 R /XYZ 72 468.785 null] >> endobj 25 0 obj << /D [369 0 R /XYZ 72 453.776 null] >> endobj 374 0 obj << /D [369 0 R /XYZ 72 251.454 null] >> endobj 375 0 obj << /D [369 0 R /XYZ 72 237.517 null] >> endobj 376 0 obj << /D [369 0 R /XYZ 72 209.131 null] >> endobj 377 0 obj << /D [369 0 R /XYZ 86.346 103.173 null] >> endobj 368 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 381 0 obj << /Length 2223 /Filter /FlateDecode >> stream xnF_AxDt.t,Z'&D>$1([ԒT{Μ!ERt0̹͹wq狟߿DK^$(Y(o>idu5( ViI|*0g.ݦJ8LL?^_BU GrwVL%wov^c\.J 8q7ߥnp& пM]b*AAMe7B6ſe=_aj&"( aZvd /*ӏ/Ӈ [|5(FAͪ:b $S\C۔fi )M#*BigyVgf>>Ί@}0U?-|];s6PM1'0 2%LKBMlnyYhG+ɳDP/"pI4p^ne5X b/h4n`zȉZ(k8W}Vog.c0;8U$aOƜ3S ܡƈxj.ol/JGcho[ln&j/S|_d fTI!?a!NrgYYշ)Oo y 5n6vusdm5 Rg3x4?h.Ϸ=+.//Px™l?EY/W*_\66vƿ| cxU.qCNڈO6p5[W[7!bmՀ, D*ǞQ.JmMin VEuf{H[$h%HjsŎ]Y|kTTd_3f+dQt}hLf6:fD[ޏQoow&ooYXSlڳk K2}wdt`"KWl g[0 qgJqHh-|2 ļ(Shzin{(B7ۦf`M9Cg,B#۹ԏPY3զøSu%'hnƥ}1GBQ;k-ћ=P.ڠg3ѱنX r0 It}%IR;)bf!0٧͔;,~ا״ڍ+\af/La6w:6 u~RGy;i=&^הx]> endobj 382 0 obj << /D [380 0 R /XYZ 71 757.862 null] >> endobj 383 0 obj << /D [380 0 R /XYZ 438.97 236.259 null] >> endobj 384 0 obj << /D [380 0 R /XYZ 72 220.164 null] >> endobj 385 0 obj << /D [380 0 R /XYZ 72 191.779 null] >> endobj 386 0 obj << /D [380 0 R /XYZ 124.074 94.344 null] >> endobj 379 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R /F37 163 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 389 0 obj << /Length 2327 /Filter /FlateDecode >> stream xZmo_!\Xxy|%*݇ &..p]WVH|C׾4 %pn<}{˓\y1Cz+ODE"A,˥޿)IZW9/J>g$;ÎtJ6򻓷'0Xz̋8Fbs'-;+֎xAy?:'a4%<fVȼ~tFP<d\~.):cS(%jb&Fנ>S }y.XԛKg6_7EDcLD@)\D$_G0$R͘,j'י\ vF0 Zc }3~RB /qQuQm,6ؗi&Yb:V|QEVhWԽM%evf@o(%2аp@֯z $YRU"h?r$`D9t] rBϵ΁8]}/$`Q!"gz41Nϔ32c~fw/FvVxǸ(x tvƮ(~ﶎ+]z9 (57 кV XF zyicv$H o:_"tsdI~\~vƗξx\ Xs9p+ٌE0ka8f.^lb&+g8FHۡ(ӛ4Oc ~Yn;|5v%gZ RC"GG&OxU$aQ74V'2~ƷT}} fLsIԑȊz4uC56kp5T"C%Dvsp!쪆ǀ' hWH@aV,}>ه4AWMF}$1&_灯Yխ֠+ ˴``c'9bͳ6MG贻L؍*D +$$Jm>32$w>`sH. "š,7>|CGpmXO^Yf**SvfGLl[$c΍ޖem˼]>&m>nt3:aҥA-*21#䯑lk Ÿǔ$13Рј27XDlʥVTmA*"b9i? \cVVyHMLWG96ޢ*|31ϡwVEiUb\1f6nm9$O @%?豙6.25È \>svv7"6}4{Ve=è8""H(2ɡ9C%gER_rU ^aHd}c}:P9fhkPV>oPS0W*-`7ҹAOիӫ˻gXƹ~(ztO84Wj}hmNUʭ,e})EDS{P+ 0?"w .2).g=R;y_Wn[ ]D3^}15#X=pҦ|͘pf7eg,*TC;q'd_?$"> dlG#9v'rZxߴǛ/a=:xȥ$,taFtћ٘}hG/AՇf/^xeF"~ˊUipoGp@SW`ߊԌj '1Ni֜fߤh'8QiviGxV-OIf4Ǫ$!*57_Byl ۯzx^ejzr1F׮ǯwg4B4Z͝Y-{ԈI:#ǶZفmtl?HݺD>i==yq;op>)bJs8944@>搓?~GcadZIߵ6u;Lj *r(:stE'mKy_`лisj]7FN 8Qq{=Jf {a,j]ESP4V.-" o7P"k/Qvk%Px޶6~G$u9HvKQ2ϣV2-#5yM4jh~1xwCLDzk@͞Ad@xxe/ '0ؗ8ч.KT%}`>cv^ut endstream endobj 388 0 obj << /Type /Page /Contents 389 0 R /Resources 387 0 R /MediaBox [0 0 612 792] /Parent 378 0 R >> endobj 390 0 obj << /D [388 0 R /XYZ 71 757.862 null] >> endobj 391 0 obj << /D [388 0 R /XYZ 72 720 null] >> endobj 392 0 obj << /D [388 0 R /XYZ 72 673.617 null] >> endobj 393 0 obj << /D [388 0 R /XYZ 72 659.68 null] >> endobj 394 0 obj << /D [388 0 R /XYZ 72 111.658 null] >> endobj 387 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 397 0 obj << /Length 1789 /Filter /FlateDecode >> stream xڵXYo8~ϯXDj.HmmC[MGjeɕzw3%[=M $7?ε#_OO^ؙyP|Dʉgڙ/7| JLUjSQHn ^$Ӊ‘d"9ɛwYήZ;~C;N>Xx OWҩ`HKI oguc \nv%ܲKBᅖ=™*d]*Ny{Snij1N&M,Rj6%-5̒no]!mcj4!fmʤew2.[5ebQH!豔,`UYtYA-Ŏ^I XvfnHrUs} CS 5uYP["i{Zl"]k$YM-iEԁ[ȓj"cv}#sb Jd TĂ_}rx*ؒ0;X+4[M tXS7֦i^QK< MZ 93Tn/jw g{RvCPʊєltcZPܠ [㾟g-Rjx:^*&nmy3 pk]֤h+"-fxh ܴC %q{XTVV<+>ZKcjqXX)6$y+a2f[!zv)|*t*̪lXPH_U%.DqxL==xڰ^ئ%w=r̓(/ؙ<~ _^hx|Jk"YN[0c^ x(SLp`O1 >wq@г̉aDۻ y5l5M9ki{@ ;W|,|wNd+ 4\mש-]e ht=DSNX}MErVn7Qt1(^`Dl8( fѭO,>Wmq."3-iI7Kt *rޑ ē> endobj 398 0 obj << /D [396 0 R /XYZ 71 757.862 null] >> endobj 399 0 obj << /D [396 0 R /XYZ 72 720 null] >> endobj 400 0 obj << /D [396 0 R /XYZ 513.849 637.851 null] >> endobj 401 0 obj << /D [396 0 R /XYZ 72 621.757 null] >> endobj 395 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 406 0 obj << /Length 2771 /Filter /FlateDecode >> stream xڭk۸ EXg~]k(K(heV#K>=voo3ξ,Fpf8osvt_IEȹ:*RN$"Hsq>WsZƉV74gV|uVt!W]N,a@^䇋z?;PiܚY'x·_.)ʟP|Ox*&VEWdeyBi b7gծv "ڎFUvdE2xmxuSviyaqzcv;Mq/<")2:*F!\k{e uiFyS\:\Bz ?H"e 4JO @]R;'Np C J2زn *ou+#\QFNkxZj!1˿d;e[3M<>/Jp  ,ށcIF;17S_y#؋E8 ~2"e_`| qq^ } z(c@_&͌TXvhZTb/a4xR",8mfw1x`+p"]֐S\NZIj :w@M5NiYB8~mDL=|+@3tۗp0cl"p]il3xAD#B'Dw hb3gC0d[̽T@Uq:8.<]8_ջˮr5Ӥ$*-*o5-kʖe.besb۠3jt^ȢؑC67&5'8֙k.0>|X&NĬ ;VLY%"#dxCEC0Ñґy"|qJ)dO џq'F;۳O|$p%Bٜb yu*8( . i<>5=_#Pbuzy&v ʱ'"M4#v.9K.xBOح+45r='ӎeBFEohhS4<\+|Hᾓ_>W0MuU 9g:q&QP RYh>jny {JY@J@E*ZAӪ{/8$6"d8_&uklmjKFP[.pC2qb/&"#.~u*2:Hݷ+e'S %)T\=`(, ?W5Rcފ_#ӅYN,0{ے>vvNxe]T ֹZHLMc>:H;wi,&v_`ʳLEdu5*\#N2//%wοp^.EGzNoy9\`WE ` vI-n' wMV _ s4~<:B\/: p(gVt_pm _[S67vN,D&j0jaj8=ݨFY J^u4߁$(Hʵgw7iƑpQ4t+7<~;hie{!Ib1.x1t -(| 5pSd 94YW Z#2AuvY+PtN> endobj 402 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.293 603.127 345.1 614.031] /A << /S /GoTo /D (predefined-traits) >> >> endobj 403 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [494.392 197.261 500.37 209.754] /A << /S /GoTo /D (Hfootnote.6) >> >> endobj 407 0 obj << /D [405 0 R /XYZ 71 757.862 null] >> endobj 408 0 obj << /D [405 0 R /XYZ 72 672.015 null] >> endobj 409 0 obj << /D [405 0 R /XYZ 72 672.015 null] >> endobj 29 0 obj << /D [405 0 R /XYZ 72 657.006 null] >> endobj 410 0 obj << /D [405 0 R /XYZ 72 540.427 null] >> endobj 411 0 obj << /D [405 0 R /XYZ 72 526.49 null] >> endobj 412 0 obj << /D [405 0 R /XYZ 72 116.629 null] >> endobj 413 0 obj << /D [405 0 R /XYZ 86.346 110.261 null] >> endobj 404 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 416 0 obj << /Length 1779 /Filter /FlateDecode >> stream xے6_[B KIf:iS)dy3=BGdz%sȻ"ճqaAcm=aZ$f7<[^n,^53n4୨qH6W/6Vn⺬4\?FIR6LȈrq g?8ފ/^ؖ-4ȅZ*]gI=pIEV|]E3WKE1C#zj:K^O4^ f#Mk6zs%?+չc YjN(u +QMwB~=)MyQ1^a6ʛ ^QWj^p&mN^WžqǐQG)pHø~,0;q8;2vBXCIvsmוw!fBjud$˦(Pi'v:Ÿ{̃Ѭ'Doڣ ճm Gh^vVjz11X6 Ѭum2R8\[[J-^R:MzȽGt qЦ,cbbPiqcSl%G_Hdbt p E@ 4QBf\.8" UaVp88\< /CD,x æ1܎Lf!:QbjAEA-27#/ 3V,rm MN5V_(KzA ^g3NvLQV@&;"JniSnj^3AtR ߶hbICSwjU"_P KC͈͙4kCn_7D?wo`J8qjO\@J<׭ ($C|w7$m <*(ti[(QB\nLSms7jnہWϔ(V߸S V]H7: ,!OgmAZTqAps8ʲP4\1{p& #]632@Lr۷j /L;NJ7 {޺D{ɿ[C}ՙ[ ̟4*7'O_3a*S[` m,P<3A#,:wghOrlX- q8*MLIA?6WU#ϥNi|7{cw:c%`R) ʐm5don\$Mi7 kNj0Ea=}`0͓bcy-Jq18D$U}a7Ns0|DҒbtJIJGOUsXkiإifBP=! %o!`|g$1si]noHFH|+_L!Qȶbbϙ[NXK-bqq*BciM*70O41q4}N]#P.=YiZWIH:սNb˪zʬQ`,܌: Hw(MhehIюÈ8qxir Rh-h4 SRxPOUS~re endstream endobj 415 0 obj << /Type /Page /Contents 416 0 R /Resources 414 0 R /MediaBox [0 0 612 792] /Parent 378 0 R >> endobj 417 0 obj << /D [415 0 R /XYZ 71 757.862 null] >> endobj 418 0 obj << /D [415 0 R /XYZ 72 720 null] >> endobj 419 0 obj << /D [415 0 R /XYZ 72 563.963 null] >> endobj 420 0 obj << /D [415 0 R /XYZ 530.925 386.793 null] >> endobj 421 0 obj << /D [415 0 R /XYZ 72 370.699 null] >> endobj 422 0 obj << /D [415 0 R /XYZ 72 298.513 null] >> endobj 423 0 obj << /D [415 0 R /XYZ 72 280.699 null] >> endobj 424 0 obj << /D [415 0 R /XYZ 538.087 133.297 null] >> endobj 414 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 429 0 obj << /Length 2795 /Filter /FlateDecode >> stream xɎF_A`D 98xA29A-ZPb$&fbnV=VzRT]{oVg_ҩYcoLxIaf{X]΋X$]~ؚG? ,y捕ůξ[vS^O[xRV0NYzo}Ձױձjxq|3?0 Ss\tl.`qw#hWDEpT|ʨ[΍Df;mUՅA{d lhnxnbaEzeèwM]غ{1S[ό(єd/G Z\buO-d~yՅi'}_9Yj3&w iL޻e ʢ}e ֵ[{i7E[aT3|y4i  b4>Y~FOHۢ:dvDvf 2 /jw#j%/ЮEeWw=! W!dH|SʖVmy(rҞk[|XDž( mϘ)An1Dz7'aLگlW2o=FDjWs+x3h]6?٠&¢\U#t{>x 0j^18c ̢݁-Y5y\A l(%#@^/YƟdfyw"S-TObcGt ࠙r!f1œ]I`e㡒@9l(wDfZANec Qeڋޅ[QF&Ohaavd V3#4p!nhqWy![&?cYVE(Vc[|RYv./|;rj#|ZX}W  n)? >I;t7 5?9xl08 T"# zHs8!{rJ w>!ndimc}h&jqDC`O1kT`|#yf JcSi.PHb%bTa djXG) lulRʹĤ %փE!eʨ$65R˜ ʩk 9d¢'.M TT#3 \\β}F9M45OcQc_Q?)|xW5(NIuQa/[xP 9?ZV3!Iw<`u0ۀ15zZޑC`٣GDbB%V ;j†eXb.]Uc8= JBR)Pm2a貫Pbl ~h=8*ySʚعiCzCWIoxZ-:HHi; 43MrN#aa. \؏2厤; \޷Dz .l{ L˾Z}mR a B^0V}7r7zB5~l] E8+u j$)e;%\h1ajXЮ(h]:fYҭwcWC7CǓbOIғMAxd]i &=foK,MdN]֘?K;bD~җ {s0veAѰ pX%ݒkEkMԝ _R4Vz;R~ Sq +ȼ;B?a)hiq0ȓ:&"bjq:.7a42 XA7 Qj'K?ALΊi zW&ia_ +.> q) KV*A}[RH阢;n )j. V64<U6YePXlwsIto-`;2 .rlA9^X̒[3DDޡqz+ޱjip5_stqݡB@/`HʧQSpLsLWPnx~'{I݀pJ{*>xxLSN!c2?Pjx PJĵOڀRC*wսFљe79%?s Vm 2#!I !Pcy#yg&ɘ`$AhH4pDA׻֗<)M"iA WIGK $9q"7Jl-A~ >$$PcXdp;]#N1Sbߢqّ^C|K ./?@:52T(l!=65_9h,56-;b¯*N%v~,jKvW/IXI$6ŧ.ZS=RFt/NHDA{$|]C}Gh 4ܦρa ݌~~v1~UrgW* -~OqKw32w 5Xcj7<[\Wb`>3~v.Bcf޺ 6}ށI7PЖ>C ?]@AǦÏTzza4lb:R=3 endstream endobj 428 0 obj << /Type /Page /Contents 429 0 R /Resources 427 0 R /MediaBox [0 0 612 792] /Parent 436 0 R /Annots [ 425 0 R ] >> endobj 425 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.971 403.12 312.555 414.024] /A << /S /GoTo /D (predefined-traits-for-simple-types) >> >> endobj 430 0 obj << /D [428 0 R /XYZ 71 757.862 null] >> endobj 431 0 obj << /D [428 0 R /XYZ 72 720 null] >> endobj 432 0 obj << /D [428 0 R /XYZ 195.087 488.412 null] >> endobj 433 0 obj << /D [428 0 R /XYZ 72 474.375 null] >> endobj 434 0 obj << /D [428 0 R /XYZ 72 374.229 null] >> endobj 435 0 obj << /D [428 0 R /XYZ 72 131.593 null] >> endobj 427 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 442 0 obj << /Length 1450 /Filter /FlateDecode >> stream xڵXKs6WHT|ĭdL($ DA;.^,Iɱ[&[b],oI8mrxvI@EJ` 2dqM1\E9[^u*Z,DkGW E-NQDϫ׋_Wv(YP?`Fȃ;4:xcp#2C0&Y_?O"C Tʄxv44gyOpXub찮T'6v̝ ֵSOB'ݯ7Xb|x )J6i/Z ҂>CQlIQ`I2T0W(M&H P3iF?<M+= *.8Ǘ?S{SΔ%*miJ &/S<|)r4e?$ zᜰgD ;J }(/$WTFy{&)1FEؤ\_UE7Ғ&0{V\s4& Txn4F4nqCCTKr;1m]VAl&+b6BMGsxFz;(M`/GT\n d N eFjlixNi(\57Np٣թ/Lw][# <9QYXľf&Ż$.!J0"ZecD3C+mNۉl3,\VrX Iʝ~E=ՙL}[zRS.-#1 nlL8v &%=8~1R`LKՖ JXeP9%@D͏ܳ àH94)Fh67ACKn\<=h$Sc˭l}J-7k%v c9oV)i> endobj 426 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.242 664.706 155.865 675.49] /A << /S /GoTo /D (type) >> >> endobj 437 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.968 647.515 241.573 657.557] /A << /S /GoTo /D (constant-value) >> >> endobj 438 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.601 628.84 219.844 639.625] /A << /S /GoTo /D (mapped-traits) >> >> endobj 439 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.865 551.874 232.566 561.916] /A << /S /GoTo /D (trait-handlers) >> >> endobj 443 0 obj << /D [441 0 R /XYZ 71 757.862 null] >> endobj 444 0 obj << /D [441 0 R /XYZ 72 720 null] >> endobj 445 0 obj << /D [441 0 R /XYZ 72 522.12 null] >> endobj 446 0 obj << /D [441 0 R /XYZ 72 508.183 null] >> endobj 447 0 obj << /D [441 0 R /XYZ 466.377 157.665 null] >> endobj 448 0 obj << /D [441 0 R /XYZ 72 141.571 null] >> endobj 440 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 453 0 obj << /Length 2216 /Filter /FlateDecode >> stream xZ~~@?&@־~`ZP‡/B=3;KY`7#pޛ\{ KBz7OESʋn2JgM\(^(z6REk"5ѵqәdbwWo~3IgtwGǙJby~3];Pz% HpUD2w˼eafνX _^Y ?pJ}ަif)ůg){[YMuֺrm= Bw{fC\),4>BP ĝEM4[8h)@Ҷz)#ZLYkWǥZ^[Ö @Y.۽'[KMj|b.M[MV43 q|$%8x];+6AY3Pa«'ķo Q.Xycv<>vvs@0s^,fK4;ވ$iޮNOܠ箬etڦ,&Vn\tBg,!#Mjgm#%03_|[t Qj;owqCDL0^~xp MSedmcW'R C"o @(MN𬘨ܻH~PCT7lw(4 /l:Șav>x]QY;,gpt fG^pL8xUuVwY$A$P4ٶXC$H클ft@2I$阕$=4ppkJzBH8dF́0[,6= Ym`B]ٷp9xo։Qn:؊rWdYsGd q,O)NBW5HM,[ t:qَݹmg -s*Ēo.S9*c oA5dz$0E:HG#P"p܍j0fPJ8 78 w#*C<'!Hw[< fY5)(b$u}cw&tdH3W.bUZW( 0oD9wr<-<X&vzԢ\? )YDc<ijBu~H!FYn2ÀQ̉hpGhLsSm:&d,Y[SOdDu2[k9%R][zu z`a[| b1"R,{00Zny6`h4|L=+PƦS&|ҧMD|Q~iJ0?N!fa臟Ĭ9r,)ע5鯉P I?9J\# SB%Y lc; ]&` BZs`KY[$]SLhu2iB/0]Va?]/ʵ*cO۠us lS[MHi_z3>-X,ѣVBLR.Mko,=d2w> endstream endobj 452 0 obj << /Type /Page /Contents 453 0 R /Resources 451 0 R /MediaBox [0 0 612 792] /Parent 436 0 R >> endobj 454 0 obj << /D [452 0 R /XYZ 71 757.862 null] >> endobj 449 0 obj << /D [452 0 R /XYZ 329.92 554.62 null] >> endobj 455 0 obj << /D [452 0 R /XYZ 72 538.526 null] >> endobj 451 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 458 0 obj << /Length 2850 /Filter /FlateDecode >> stream xkoܸY'" NLQCIjw )WPY c|~{4S}ER4Lě dHb8~, ꦒ&e4?@Qss Mf.ؙQGՐ`(5Ad.veUɤ2*lTV媟%(cByu,L#gTq6 4DZ4B'6+C4p.ۢbe弇Ǟ5Mq]4*z*ChwLbaYʍh^5TjL(2/9I`L^S[Ֆ^ ׵P»2۪64ހʞ,L~,Ԅ(cx&4NS]e;LLJ1DׂU}-ٴR6 RDAD!fbCaSŧ#lfIcHD7^] J%^ܶ;da-=N82(N=Q&lYәD"Pڅ^Ƞ[egLKς!z?Lw8n7=mNJ&YSpќbG12:)U/Eeٌr*8*A>T.P< F#'mr'~ɷQޟ.~ V8?Á_@|' loU7 endstream endobj 457 0 obj << /Type /Page /Contents 458 0 R /Resources 456 0 R /MediaBox [0 0 612 792] /Parent 436 0 R >> endobj 459 0 obj << /D [457 0 R /XYZ 71 757.862 null] >> endobj 450 0 obj << /D [457 0 R /XYZ 287.221 400.41 null] >> endobj 460 0 obj << /D [457 0 R /XYZ 72 384.316 null] >> endobj 461 0 obj << /D [457 0 R /XYZ 72 214.496 null] >> endobj 462 0 obj << /D [457 0 R /XYZ 72 200.559 null] >> endobj 456 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 466 0 obj << /Length 2248 /Filter /FlateDecode >> stream x]o6=Bh,1+b`{mhq[u%W77!evN!9Lx7^}w<2cdި\_7ڈY׭\;qrU4*Uۡ^|,8_˶[DzJh!EEߗz-1B!~t v&R\ WnUooVn]T(uӲҀf1,GZ hsvQk}ޟtg7G5zfqB+es}Ah+ob}Bsƪ҆U sSUQzрKo)8BU>[P}7 a{_ÁΜ,xewq]3V nt^, `i;%򏞿H S^.3=  LJc<3ˀqs8b_J#>}F@齥h?QY\zS75$a}^sO]3>v}v$08zě&%lspldOG's=*.Ipq ½܇`!dgP='˿w$9_pSB?K|3^`F*QmAF(ɟTa=Ңg6,frlGS}G޿Aa^Sp4>Mq6}IfhAMn #ErX2M3c.mn2ޞ]K(%αw&AMmPok.-/}TBi (+,t5 fq_]U]]mY jU͗6J{P€s0Ʒ+}vbQ<&lQP:Ȕ<}[ii],%RLYh;SgNFltXftW'vȝdrGOGlwDk3Ff5Vw 1p̯+#,wv% 0R֯akD`k.Pk"6Ӗ6])Fu^[ssHvBI3'( Bo! 5dY:Tp~;U4I {zWUr[sωo!KFOFBdmpicxV6@h\bjހeѨ4*z)*'_R57 Uhoܿ}(>*ӄ=u)Y*rEVlǴ'BΏl?ڞu)SHĎʰ9a~D9p mW m@;CđN#zx7!"C<9}9ɸ~ `O˅;,H'ʜnY1;q j/\R endstream endobj 465 0 obj << /Type /Page /Contents 466 0 R /Resources 464 0 R /MediaBox [0 0 612 792] /Parent 436 0 R /Annots [ 463 0 R ] >> endobj 463 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.625 143.172 504.911 154.076] /A << /S /GoTo /D (defining-a-trait-type) >> >> endobj 467 0 obj << /D [465 0 R /XYZ 71 757.862 null] >> endobj 468 0 obj << /D [465 0 R /XYZ 72 523.794 null] >> endobj 469 0 obj << /D [465 0 R /XYZ 72 509.857 null] >> endobj 470 0 obj << /D [465 0 R /XYZ 72 326.542 null] >> endobj 471 0 obj << /D [465 0 R /XYZ 72 312.605 null] >> endobj 472 0 obj << /D [465 0 R /XYZ 72 202.461 null] >> endobj 473 0 obj << /D [465 0 R /XYZ 72 188.524 null] >> endobj 464 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F65 185 0 R /F66 186 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 476 0 obj << /Length 2348 /Filter /FlateDecode >> stream xZmBHPYr]^.o@t헻ࠕh[,|ͯCʢZ/@q晑]gw7,rb,pNȜЏ{]漟#wV'y,f^ՈG?%场]Rĉ[Qz9ao(:wINyd0/jA?n\1u_rpp]jzNH9hprnш(sJI)H!g'yKi9@1:ʵpGIuą? fnȁo ;6rZ$Mԣ !j_;sPb^'})e ^Զ\Oʬ5Wb dZĔ%E%jIf7XiA@)HC2al;qn][ m.`(6[zIۦ_h/+:Jep(nfz x=a?G| 15mخgl9K #0_5l2evuK3IGimU'quQji^t&JLNf)xdm=є#t坮ʓdDW.hԝl,4L,>)w*^C(C,wѽIt@ hO~(,P &خ? S}Ub: հSQSbNLEl BC0HƱpf# _id^e؀Cci%i(S1jfg2,KVoW'@-xEAfj>a޼y35{^-hw@$a6nJ ڋѩi6X:Г[T:+ȬO_15K{lŻZtE"^(H\oB/E^ ; by׿v @P"6:o_}P*/MKKW +[R?cSz@F93ت^Mn ?fa A/NJ4(_ /^wD6,d;hIKD{E zSMPy.כ"@ օ!l=\Pm]kwz_#ug1ab8S2іՋ78~HHe.2r^x$z% 4QG=¨FV:fNwZ4gX'W3 d2t3& <LL`֡ruFIhr.H&ȳ*TmtL <1lUH|%"nJJ{><ԎyWR-Kχvǭf-y2;Mӯ>p>ͪ%^Rq"] (@Wc?}8Wg|=}xOc*tvl[N a,`l@\솾: endstream endobj 475 0 obj << /Type /Page /Contents 476 0 R /Resources 474 0 R /MediaBox [0 0 612 792] /Parent 436 0 R >> endobj 477 0 obj << /D [475 0 R /XYZ 71 757.862 null] >> endobj 478 0 obj << /D [475 0 R /XYZ 72 299.103 null] >> endobj 479 0 obj << /D [475 0 R /XYZ 72 299.103 null] >> endobj 33 0 obj << /D [475 0 R /XYZ 72 284.411 null] >> endobj 480 0 obj << /D [475 0 R /XYZ 72 219.574 null] >> endobj 481 0 obj << /D [475 0 R /XYZ 72 205.954 null] >> endobj 482 0 obj << /D [475 0 R /XYZ 72 72 null] >> endobj 474 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 486 0 obj << /Length 2669 /Filter /FlateDecode >> stream xnF]_A`_8郧}"& 6٣!!$NJ뷪eɱ0<$n.`?q}ET" w̒H (.dp]M¡lqYJzkT\vSپUHD|OW>\qdQƲ:\5HypW8~bjq E":go/X9̈TD]35e$[߽ÂKBPWf+>'|aa~gLt'M44Hӧh8(v Y8pC% sھÃ(hU=+zx/UE`%Ǧ* sax< !rAMpMډ>nD 9q4 #@d MTMXَ= -į5N @5=C% ݈@tdV#a. ajjУfh fYЊf4+JQ\4UjC|p̑ ,XgNciriUl ι<ʹ7LRI7PwB˕9o< )uvճ=b[X#q6=}dhDE$caѫ<"WEjhdAM#OLG~ v(+ O`%ahj yᙺYŖ,Yvoj@9&k0xJ /M-xh3E.B~Bϼp-_jaE E# 3gU /b~wjq(n(DC mby$?: p RD\P4GI6/rXbB&B̿ս*k3VvȀV3r /Ȯ38;ɣܤ |Ň6)c]kgIw@:/Iux~S" qҼ4 p&e!/%rq>:v@CǁYa,fڷSvN 2 I& @6q5ބKo6v'3Wc&֠#>\D#ex=7(-Rǟ%@qT^@ \9ͣ aPhAJ%sȹd.\< ya@v>sAq&TyNHOQ'%FlV%IXc|AnHǾjRCRYͩemQX 'z!RSѳ4{ ji^l <'jnEJ*.zWٹ ;+_VQ41$B~Ujj3^GHY.Q9c`l 8br-źɧqUvjP[1dyt^=^FW~8[lB2[  Vs%$8F0'_`6g00B_W&y7?y)5d.`]_J@$4 PVcL\ˏH3=3:s݉jE/s&HBF!=%bP}c'#Afo.(ݙ-L(.Vׯ֋(7׊0E ,%@=QDY@!,9ClX@σ@u0cqV]8NGuQ zl_:W5Nf9Ji+'M ~N}K/'PFӅ,X} W`3k vJlk|H+J=MQ7Bj`QSGL Qrq~j1*)״B endstream endobj 485 0 obj << /Type /Page /Contents 486 0 R /Resources 484 0 R /MediaBox [0 0 612 792] /Parent 494 0 R /Annots [ 483 0 R ] >> endobj 483 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.308 293.264 327.917 304.049] /A << /S /GoTo /D (defining-traits-initialization-and-validation) >> >> endobj 487 0 obj << /D [485 0 R /XYZ 71 757.862 null] >> endobj 488 0 obj << /D [485 0 R /XYZ 72 720 null] >> endobj 489 0 obj << /D [485 0 R /XYZ 72 649.707 null] >> endobj 490 0 obj << /D [485 0 R /XYZ 100.542 578.075 null] >> endobj 491 0 obj << /D [485 0 R /XYZ 72 564.039 null] >> endobj 207 0 obj << /D [485 0 R /XYZ 520.762 352.533 null] >> endobj 492 0 obj << /D [485 0 R /XYZ 72 336.439 null] >> endobj 493 0 obj << /D [485 0 R /XYZ 352.963 103.081 null] >> endobj 484 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R /F65 185 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 497 0 obj << /Length 2430 /Filter /FlateDecode >> stream xZmo_A"w;͡ ڋCXSJR3;IN (.ggfZ/yVb'ZVǶx<>Nؙ2o̍G5џe9d'+" %m_?^/u!TtoGNd8V-zл6,pXb cCaհp@)݄c;^4ҍd}ӶuL>9[m^DֲU\5Z+#7o=;ɱft;|&Z`[Tey`l %oFΔ.'(!KC9HYOz沖MjWft$JrZ-ҧOh+^7*Lu BIf0&@4{:=1hwe5uCISbu=ضSI>-Ա6zA0NxmUm*Țk?4'򲪏o[ȈÁ Hd jG[R34U45,EU?Z3񦵇]^ʺ]!6bkJU!=w'!/TA_eX$a Q)#突4lXi\^K*&7:My c˦eq魙cw,V _Gdu] SI#6hZ1Y#-H߫voigA? "QЁX;v"s<+ 8šl11H#N0<ʹ8Nv?!blF"v"NMKGf3p(wkvn\t usiB| ;1;y|@)* {͘΅"N| QJHպu<4'Ǽ ŒQ "I7Y史Sޣ}If̅ #$RTg };b NV:AX'+ӎ̺Z3G 4v OdqrݐEAmCrmԈ:KS:uҝ! "8wXCᑢ4`xԨ5 k޶`LSZF1pKzkgv Bf+#uQ N&…o"@c'dxDiS5X ~⡱:exmjUˍ9AW  f>.qi4# [jTh.]fٰ!q`klڏm'{K2 (ukUbǎۻ4s'YXvxany'T}AU;mY&/Biש}e FBrO"&/pɍ$Ӈt Db>E!Z*u-G ) #ؗl6N>¦W= 3BrgZ sf͸|gl'awǭDC v1p2)iiID_Mp`>j鑩%:-]F@OKG<>Hڣ'Z2m%)~=k1#S86`ůA3ËlHzLH=$ }$ t*f 1P׻B5OB\+[}h- u1vEz}_^n_aN2}w|'U~YB]IfYQn0 Pj?R۴\'GdJ0tU&['?z&2`/Jp2iY-O%..TY89 YmnKSwxr67U$ F~+ώ;$:4*8fkhm HG%±ȡb-8d`nލj5*v^.+S!zc_`A{9 xݕ^}41_ˌ%ͧAB^jAv+/M2}5]v/-|`kmͯqvuO`YȰ endstream endobj 496 0 obj << /Type /Page /Contents 497 0 R /Resources 495 0 R /MediaBox [0 0 612 792] /Parent 494 0 R >> endobj 498 0 obj << /D [496 0 R /XYZ 71 757.862 null] >> endobj 499 0 obj << /D [496 0 R /XYZ 72 720 null] >> endobj 500 0 obj << /D [496 0 R /XYZ 72 635.694 null] >> endobj 501 0 obj << /D [496 0 R /XYZ 72 621.757 null] >> endobj 495 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 504 0 obj << /Length 2420 /Filter /FlateDecode >> stream xZݏ߿B> Yqm \\zэ>\,smHr;CeIzC,rDg3Pxk/E,D-<+& S-VG1KɊE>ƶɪ}VY½.uj㳟_|ʁǽX*!˷7 п&;Q[/x7 Hj_l(ab .raXG<.fQ \a,Y'q1&@I26GK`9L8ew~ͣ ojUjֶ=xv_lt^<zV_#7W(͜`J͛bڑ{P2$/gBJq`` >93=TCQm9wm|EvYkuM Nh:_U4(kJkQwwTc7%U_3Eʳܿߗń~Ro,}[Tk< 8 ?dMw`@ FVΪnM6HWPe= Vk 1Z.vhҦEQ3oN:9פ;ln`đpܿn_x; 5cJJ|UǹHp%ulK$۬7Cm}7z;.tU]0eO$BM⬢6D cťH9T zUSWuCof0/QK/؎tpi֐5'@ `A#'(9#XT>4vxŜX)@yt'z1A˲]qx Qt(8dHUw,PuwK݊sJ&bY/hL)c^=6F;S^+" zcQR}1EdE\ ^|b*$(v,:>YNF5n;Vt>hgғ VA̢D K4 @ NRcwNA9 MFS3# {OÅѩN6EnFT *Aamnq̋}3~OVZxg$,.X'Ḇ`Dj6h˜X* aaJ=3 HF=cN3QجX%{xTؼs}K?6fA#; Mϥcx^ u+sHZPԯ?꼳ݓcć?Q6#={̂in' Y`нL5w_Zr,<-peJ4qnC*P1[PTd~ߊl/[w#a*ӄ-`"}3"tkǴ*v'bn[peoyu͖axZ^*H|bU%Ue6 =lͫsqqTAzA (y ?.3%1'o8 %OWt$<8n7(2R\!JRcx_YlC׼LQ<}H*T .\sy%M >/ 9]}Ǹƫ ˌ>_U \TOr%I?[%Si>KG~9(Vn&Q]R'/NNp endstream endobj 503 0 obj << /Type /Page /Contents 504 0 R /Resources 502 0 R /MediaBox [0 0 612 792] /Parent 494 0 R >> endobj 505 0 obj << /D [503 0 R /XYZ 71 757.862 null] >> endobj 506 0 obj << /D [503 0 R /XYZ 72 669.469 null] >> endobj 507 0 obj << /D [503 0 R /XYZ 72 655.532 null] >> endobj 508 0 obj << /D [503 0 R /XYZ 72 625.644 null] >> endobj 509 0 obj << /D [503 0 R /XYZ 72 607.711 null] >> endobj 510 0 obj << /D [503 0 R /XYZ 347.135 371.819 null] >> endobj 511 0 obj << /D [503 0 R /XYZ 72 355.725 null] >> endobj 512 0 obj << /D [503 0 R /XYZ 245.647 110.072 null] >> endobj 502 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F31 125 0 R /F37 163 0 R /F67 187 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 515 0 obj << /Length 3063 /Filter /FlateDecode >> stream x]s]3}08#"8wറ4um/N=G 0(ݽEIqG3booooA߹u|w7W߼R'8N^RmTѵynHOnhwǗTyMԪՌr7W] wy8/Y)W>s9 |ڛYYC?r?yV%K ,2\8H[吸-6۲ȋTQ"b1 @zg+ yu<ڀ.CUք嶵T1&lQnk,YBwSaBE j HfU]EF[MP $}%8ux4!uSM 4׏!&}W˒s_sqR^,BG&F()}r4Qpd$y; <R6˒n:Iy/L 9c'7GIzȯ';]ɡ}=C.vWNۧU? jxI.8K@I|Pm?r`# kтѭ/hޝHGʱFBpƎx1Neȱ8 'ߎ[y991\NѬ] \@>osڲ DE3H=FO2(@!DO16CSg_}' ~hclr&&>tCQ$ t2Vz=Ɔ'dpʝ~@nOsU!輷UExg Pd{Ey4B=,,k˺5 3a2Ծ*Sjuj" =HPEmB&QAL_5ƝɠY4O0bIN&KGt9m_dD4{ OJvn|\uX,y$5 ĸ.|uP!ug%vMtG0 ]u`᷺ҍ1@N*c-?D̋u"kRRQ#"P3}ƏI˰eO+h|i&$OÊS%C겎6VFd gŦ(UC@sg0H*r$4e=91u[ҿ62 nXu< d2BUO^8@_ 7}SjM9U3&~D?k$?x`zSOƟf? {h0SxpR hĝ~jS;|0M!8(w}#,#̰o3r_ f r)S>%WH3DU!rNx$$KssNۭ *,3ہ*(iѮھ C\~2@?i^&k>3s/n9 s &\"0c܂~#HKq.!L)}Bk^s|okfƭn6Egb@hG?kݮ;_mq1{Ll;@%'þ'O$mދ289>Cn槷J͹3qw6'|yL80N\IeLwy/ÓڴK~`x.ZS ]tIh'9Ɩ1džR-tyAF}Āq;f88" E/_!Oގ؝ 5fSTϡ0@DaEU5~}tawiNp(zLQgяw%d9{WQ Hvڇ15vۓApoGbIn endstream endobj 514 0 obj << /Type /Page /Contents 515 0 R /Resources 513 0 R /MediaBox [0 0 612 792] /Parent 494 0 R >> endobj 516 0 obj << /D [514 0 R /XYZ 71 757.862 null] >> endobj 517 0 obj << /D [514 0 R /XYZ 72 720 null] >> endobj 518 0 obj << /D [514 0 R /XYZ 160.567 662.217 null] >> endobj 519 0 obj << /D [514 0 R /XYZ 72 648.18 null] >> endobj 520 0 obj << /D [514 0 R /XYZ 445.027 410.494 null] >> endobj 521 0 obj << /D [514 0 R /XYZ 72 394.4 null] >> endobj 522 0 obj << /D [514 0 R /XYZ 460.329 250.124 null] >> endobj 523 0 obj << /D [514 0 R /XYZ 72 234.03 null] >> endobj 524 0 obj << /D [514 0 R /XYZ 72 204.142 null] >> endobj 513 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F67 187 0 R /F66 186 0 R /F62 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 528 0 obj << /Length 2594 /Filter /FlateDecode >> stream xk۸ "k)J4k.\qM|(4X2VcK>I!KYa"Ȋ3y3Ի毳o^Bo c&ܛ-lSJL<~UeF?ńQo ZVv: |x<H*ls#ѣ'gmP\{oqC-սgtL,Z=1 ?&XXd5!D-JyˣiWBz1PB&8 #I hdtykJB %dK fBTD"1qƳx/%Rx6ӈ™@` (I";뇴?Cld;PѳDYQwٻ0"A4~yK$->Ov#^T IA]&/FTPeD 7oAd 9@YΒ7gf78пΝ}Hay*b's3c25Z!&$N`^#g0!BEgN ґb^ǭ"ϥ?"җ)v,xwYK{ui̺y|N;uYEu=J]epE'lT*vaZXYPTyqo@Z#vf00O߬ *ZBc% &6ȿڷRI.KPɔvi>a =IK[Q-,m<jvJV ]֨Y;Oke9r@;P(8 upFsp!? f%FKW|m@I@]~"H7vdSj@˥v"=[K M9RFw5h?eU ѬVJ)ؘA J6ZZ{}C(?9GL]oEYnMv\ ը ؛?gzm/BY ʉ;0o N0Ed#!GNܿ&Q *.yiVicF8 x턹]3^b,+#FW젫z0rFHjDQUf;ŹfʍPL{"#W0X+cPCbb͝-F8жhM"b_l/a (QйG2R27o!y.nn R.mUWƢL #c"x xGA7qmF"C߄ernVGXӄyuLv0S~_ ęjR? 42-#cH6+ >΅QDvhROsܰ1$ Dp mz+ g$3BjJe'\ICITAdk}H{\&gJa%إ6ڍMOng?yΛG -ͳUړ̘('z̖zy $c(|΁5x X!~J׫s;]pV*S!ɴyoCGM]mr+2CD[k"U x".hfK~b`74oRdN;0;y$DxA\fB޹fԩ. u,N[Z9> w+|4=뻸Uxp2 0d4h4tu, H>{}@!F$c+74dqII"vN63wK޾v+s˰0[\U #ҹUh.`4qUM&ُϟӵjuʨ @%qhS}oBܡ^c6#mvP#݀P<VX]a ˂cVZ:CG+=ڽH*┙qID33or]&څM҃FƹQOdmdr!'c: l9h:)hb^U)R/FeIfҼk~9`㯓`ۃѦ1Ev+n]]u\q +^;S?uPNCɫ HG0c$N+,% MN]եy tjG9o4Xc]N9jEc:zM le)8{_/5x]H+nUjC@pDz`l )a@ٞ$jN mҼՄn-)4/6jSW1c($xߪe ˜m2"AI"o\ _M3]DH$h\y/Q5 endstream endobj 527 0 obj << /Type /Page /Contents 528 0 R /Resources 526 0 R /MediaBox [0 0 612 792] /Parent 494 0 R /Annots [ 525 0 R ] >> endobj 525 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.681 469.037 179.425 479.941] /A << /S /GoTo /D (hasstricttraits) >> >> endobj 529 0 obj << /D [527 0 R /XYZ 71 757.862 null] >> endobj 196 0 obj << /D [527 0 R /XYZ 450.287 448.28 null] >> endobj 530 0 obj << /D [527 0 R /XYZ 72 432.186 null] >> endobj 526 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 533 0 obj << /Length 2890 /Filter /FlateDecode >> stream xZ_FOA=,S44{r.vb%ugoW30Oj`f{+%ILm۫oބLڻKTD J5U߭a?weKM4ܕ+y\}zw ]"/>~ yPYY{/))@I-MOC[eox4_z֠3/]o€ @WVM=}*Q 8"M:ߖ5iuCPKCdi5 ۗi3ծk kGrÌ b, &6)B#"?ߙ :vz.灍xmM]TLWZm޹9INN$w!+P:2Wq |UDoDwh0^aڙ^apWaO zQL/-qZI;؈wK' Y9g:MHB___Q|YW_rv>7w۪w_;H^]VP}{3۵q5,u68tnq#bF B0h0p{ (H)jŤHD8%-8qtM͂FCoZ6Xzj;k8DZC\89 ܚ;дn(C9j낷v%^E8<F#V̄۲ZM䛉2fj*o㓴+1ҰH>\黐d;#hxH)kY%Ȝc =Y4 ̮쩁~d 9L {uSq 4׿Tؚ'G[ZmOܦ:@>~P`9HS .9\'[[:j\7$@K AsU6H x.Zܝ =n.=Cr ̦JVioKV۱v^/cwcId_ B5`Q& 8 g2O'uG0aoCٳՁHEc|8RsgF,ha`#R<9$30d _py`<%MW3턉f`֦J٬pjcDӔ9mA< r@*@xAI6?l0Ofז*:< "`'MJ92f|#ƈUxwl[vU^9,t Qq ɝKͦ5=dheP%'$  1ȇRuv؇xUw[ӝPӫqSPꆃ%^2E2uB>c,&{3LoP xZNi$YtHUe|AZȱB5)8t4p-8;X삌c]~n mx5(9У<q,1Z䉀d>r4 'nCOl'2C`,"w "4< f+#;`pTj^Z@~j̓NʋApa%DCqeB#TJ?D#%缝D x%$uһY|L"&Ca Ǫ#\B_Vk'kQT]= | <9||41|CcЛe$EhӊXXz/vyF Z$.=':aՓcZ uNF$%1+bL,W*OX6{@rdm0 b`hzղH'!A%^}Qt=r_mz. h1k(w7 4%ZM|潭vHo-Fx ذNy"AA/Xc[7iWͭ bU$6d*౲=jɿAd+ sqsW# ~] ::}~W?ջ+ۓ\UacBY2 h$I,p1`"3ΐ{넡>-/#4F ȇ:K+Dr,ķq;zQ֑ܲnjb}ewys`wVgW Qy:+叻S?B'Y_ hD,d&܏y 4B7M89g2 G}-u|秘+U-{Ho:ypv=0W89Q0yBg5Rm͡w?rškɱ* (~ endstream endobj 532 0 obj << /Type /Page /Contents 533 0 R /Resources 531 0 R /MediaBox [0 0 612 792] /Parent 494 0 R >> endobj 534 0 obj << /D [532 0 R /XYZ 71 757.862 null] >> endobj 535 0 obj << /D [532 0 R /XYZ 438.751 632.329 null] >> endobj 536 0 obj << /D [532 0 R /XYZ 72 616.235 null] >> endobj 537 0 obj << /D [532 0 R /XYZ 72 476.303 null] >> endobj 538 0 obj << /D [532 0 R /XYZ 72 462.365 null] >> endobj 539 0 obj << /D [532 0 R /XYZ 388.52 255.906 null] >> endobj 540 0 obj << /D [532 0 R /XYZ 72 239.812 null] >> endobj 541 0 obj << /D [532 0 R /XYZ 72 197.514 null] >> endobj 531 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 545 0 obj << /Length 2885 /Filter /FlateDecode >> stream xk Epp%w4Pk'i{Vv`ub# IŽߙYt80p"gwgfg3mYŷ?ȗXY*RVXZfyh8 ™ܱgxsEtUӅśW_/l[Hd{gZe '=kk~ſ.lڱ_ygw~(|w<:A{GH˷f;q9;k$lA(aL$j#[ذN.ÔwQ6P=:dW>^$ ۅ^ݵo۳eU@.a3&j ^gֺvUd];f&ݦhoS\ֵtD4uU!Ċp@n/=.$㒞BAZ\)pX笻b+(O#k>x $r@4ouvaŊ~uJZw/%\Ilhs3Gt5Ĉ D *lMݥ] Ҝl*ݬ>w(ώVt|2;؜I-./lRsM@}7yu,ˌ"l]XlT'[)Ϡ2TW_Qd㘘pvxhCFc<&|w' ɬFpKxJgw^t^HPdd9=x_~EOE =ht " v췹 E hkם{C\XKluOO|]I#!tL} mV4^}vLoԁvGYMS⤆ 枡 fF=N>5^e+xЈ A dYxm7guf+L6%7_ۇn_Nߵg/_қe܀^+'gɚiu (xo>Ua_7K ݔfi."kjN_Ufvsl4i&(S={nm8=Ԕ=? (=Mv[w fiieNVӘ˹!Ҁθě.WeYsM2Mv{?L6zJH6ʪ,Qn]Z_N:>Ԧ]rpǑsCZ+##R#**J}1=..dtns;0q8ჼr½yJuɞbhVQ}|gV|=H-<;<6 =$^(xr(2 H~(!;QKT~#rN4T=^bô jҭmx\aNP{C@GbYҔ( U&57"pSyvGb-0q6'溺^obNmߖB:y`=Y!q-T4Qb d9kkSn,YM FJ#h ۝;CAYNFK>eMoDMh3$guFYV3"4~XI(g;__]<6]4d9ܘӰe$ugڕY^?)D9G-ɘe  OTt0m٦OP?t/B5 wC釟z6'_F1C}揔T4sӏg2fg~])q9aփ\GgT\ ̽Ό $Iw!6t%ֵ]:fݚ0K0^W:Y85OQoEy@99h-3$^6Y< .N~xV }]l!JtEbjU:W%سi~EN_SmTiTp-m4nh>8#ʎ0l\ dxAY(SeXaփ\.1A>w9էp2%nAZՉNveڠC? ѣeW(%ry}'GO񈁺lHc~~IxMNO>cWs~ +hOu(h`W(wO7g6*v*k$ R;ͪNrju줢ٽSU &-cVLǺD Դ@ 4=1i]p ; XH]?U=R ߥ=kD8BpK|I^ nA^*y Gt9?6%Y=3,Xbv? hy1ri4 `p/7C08CH~~g%S|B8RQ5~١LQ{?l]R8l:\ ЊG)Ub\?.K\l>*Uѐʤ{ endstream endobj 544 0 obj << /Type /Page /Contents 545 0 R /Resources 543 0 R /MediaBox [0 0 612 792] /Parent 552 0 R /Annots [ 542 0 R ] >> endobj 542 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.432 200.476 404.708 211.38] /A << /S /GoTo /D (adaptation) >> >> endobj 546 0 obj << /D [544 0 R /XYZ 71 757.862 null] >> endobj 547 0 obj << /D [544 0 R /XYZ 72 429.167 null] >> endobj 548 0 obj << /D [544 0 R /XYZ 72 415.23 null] >> endobj 549 0 obj << /D [544 0 R /XYZ 499.213 203.629 null] >> endobj 550 0 obj << /D [544 0 R /XYZ 72 187.535 null] >> endobj 551 0 obj << /D [544 0 R /XYZ 72 71.513 null] >> endobj 543 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 555 0 obj << /Length 2205 /Filter /FlateDecode >> stream xYmo_!8*?RDEܛ^ Nsn "L#읪#榤QFs^2l}[楒`tB1R,$ 'H*J&+;n2OSknB U冈[]˶iT]e^Rma7ցJERex=?aL\& Wc:S~dX^I&?(r$z{PUm<GpUJIe-ESF2(>cȧFoQf"nV!2U^ƒmt[iqL`ͺaQΰau43~ U l{؄&<-*2 EFձPg˶.Gt-踯ƎY֝m7B%05 ~ѾKҞ-HkB[Uzg]OZSV# 6WMb3̬MW#{Z_ٝRs&1Ċ+##DZon#sOlzWk7Voou\=h\]zN]Nz3\[4\T`NXHiv>D¿"z}pr؝׌hAeehA 9#w'u-oܬl$Fi &?zJaLǾPk _hpTB s<掮ơ rs>>4ьaeP]ucèd<@?I#޸41&ްxb,[`B3P=)%c‘)imS tE\}=xqfY gƕ)Fg7O}ʇ2谀CtWfәCk\uv#fol0!뤚㨋 B*@8i.RE"' B,buG ('yHCX,u;8b !r ="Qde`utz<y{ɀ@#ά_. B\Xį\cM?٠bqfDzp,BAn;gi& Pdzw3F [A1/Ylf*D13W\u3_ Ҋbh֫7 ñȿ$wx0 x+50eNJb@!2 Tjg$LTJk3k ^dٵ}B޲TekV/7ĺIxqjkXm::~~8nl b)ф`ILXl⇗L ya1q1(<(t*Q_ j Bgh1+ff~kc/1.Sv*x9GcE\0GhdS;yp)x̠7GxMs1ۧ3DsJ#h,cfm"٠]ʱB:y%WHE*ZapOX.NQ3 kg~l=DA6+#*B# fnfCɫ}[,wA.kɏ]:~Bp 8' KLΞd ^59, /~Mp#`nM%2~&QY4AI5-\/[G>9_u~RXښg;d'-oJE >Fƛ`w?jv'1xO>]!3T-[;MaG endstream endobj 554 0 obj << /Type /Page /Contents 555 0 R /Resources 553 0 R /MediaBox [0 0 612 792] /Parent 552 0 R >> endobj 556 0 obj << /D [554 0 R /XYZ 71 757.862 null] >> endobj 557 0 obj << /D [554 0 R /XYZ 72 720 null] >> endobj 558 0 obj << /D [554 0 R /XYZ 72 629.717 null] >> endobj 559 0 obj << /D [554 0 R /XYZ 72 615.78 null] >> endobj 560 0 obj << /D [554 0 R /XYZ 72 205.544 null] >> endobj 561 0 obj << /D [554 0 R /XYZ 72 191.607 null] >> endobj 562 0 obj << /D [554 0 R /XYZ 72 69.9 null] >> endobj 553 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 565 0 obj << /Length 2168 /Filter /FlateDecode >> stream xZmo6_!("1+R^v/KsE tB|4,Ɇ7f[t FppH>t{ۋ~4wX0b0{Βokgs'~?jW(ѥZMՙ`|7sq/Ћdq{ŻO^4mOF <`A2ۀ7TT,V5PUJqXUZeֶf**˵=BAش$0Qw?|P4r&jq5|I٪.z&;XW K?hc Oo¨P}΄Ǣ[[v훼ƪk=,ܼ(a(D͆1$Xq" Ӏ%:#"طm_2'e~\!ʤhouP4O&`TL_dL$7.+/IJ zE}1/&ymP> bRy>6ۼۧyY5èQvUǘ*%'$7oqڙo.KzBK9J@Z xXgjm#]uMXv8f*nG^kH$-;ŰWụ^UagH_"H!/ݴs!msHILW3A(M(aFIjLht4NP2{+ȱd{9ma+;/fj̫cNtbqyΥs >ffnel3 N)1Hώa$EHJF'#]MHl_ |Ll%)iJnRά wwuSbD?, ^'ϋ#M-{P:=SNK.'I,̀^gj[W*;I[( G̃!IroG_Q_$>agH}*1M bB,ع voHĉoD{V|3;(VYYZ k6D1 GLgÚ5t[ٌn;)Țc9 +5N 4-KZ@Wgj[HHОhgِx@f)1BG)JԦߋFAOV6z@TE)au ZlFY Q̖ α%@ 3-[נ,5e(:̏S8,>J, 84>e( zm!NQړ tp<ߍn26=Α%&'\{1$쉘o7:/ >z*MZITMcjfuhVJDo^l0xaXڿ1A9b)PC $\QEWt3܍aG{A xK[lL?>=Ss&,";W# p1!u>\IMi9m;|i SKV5{'ƒ_J%?9!?l>]z%/duEx6hor/B%Q_DL3Hԗ>oHԑ$ꟘD=9}kC6Lbg9힒LD AsIgp_CK%AoM# UR{R)> endstream endobj 564 0 obj << /Type /Page /Contents 565 0 R /Resources 563 0 R /MediaBox [0 0 612 792] /Parent 552 0 R >> endobj 566 0 obj << /D [564 0 R /XYZ 71 757.862 null] >> endobj 567 0 obj << /D [564 0 R /XYZ 72 390.497 null] >> endobj 568 0 obj << /D [564 0 R /XYZ 72 376.559 null] >> endobj 563 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R /F31 125 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 571 0 obj << /Length 2690 /Filter /FlateDecode >> stream xk۸ EX"pnݠ(CYrD9[p%;E5$͙ȁwޏ_d~Ļx( %I'q=q(N{p ]P2ͽxCƨI`F2`:F7~.2X^c-ߪW;T%M_:byJ 8 }e/w'QQDG^&sDo$ i󽮚;J=zB` @tI-cF[(%_`k4h^]uZ5Ҧ}J&UWm!P]JȤ=|n A2g_WeG*zehJ-_ H %(5C}Q~.x8諲Y@lGx&A4x/pS5CNwT `5GQ23W,0o@/'mqf@c +kK`b%mudz =8ycR,>x|2eLLfȑ)e2,mn=A&b|^Z[xk|;':aSE?,O9u H<+C(Ӆn1G)x ς?ՊƃJbR ]3y 8mg4F~`p_\RLb3z^;Ne&Na7H`]9(0AIDJ:ePni ¨9ruybv4tthwذE"\B(eMULwۢj x&DVe"?5C4;CFFFasJ s G-rZp"h]}FJꮲgbpҜѝ3]9w|nʶALzإw1Uy/94YL*#*(6rh손Be˜YO-WwReD9J8xdR&$u(X9 S%RZ-)ݖ&cP5&܉f[dU;¾`nM 먣0;%~*#`'*!^$$0ز|o% 80)f%rf$ 7>mXd~ woɧҲ-S8A1ySP)rЃF3xk)9 RF.Bn՘sS5B!N^ wJ̉)qa {?~gO?Y"@| $ epLBKൃ >z.j-`.e'rZ|T[%9k'du_5V喧wպse|_.D7L KXJQ q:?#8O]/f$IﷶkQ@|\ endstream endobj 570 0 obj << /Type /Page /Contents 571 0 R /Resources 569 0 R /MediaBox [0 0 612 792] /Parent 552 0 R >> endobj 572 0 obj << /D [570 0 R /XYZ 71 757.862 null] >> endobj 573 0 obj << /D [570 0 R /XYZ 72 666.26 null] >> endobj 574 0 obj << /D [570 0 R /XYZ 72 652.323 null] >> endobj 575 0 obj << /D [570 0 R /XYZ 277.617 496.451 null] >> endobj 576 0 obj << /D [570 0 R /XYZ 72 480.356 null] >> endobj 251 0 obj << /D [570 0 R /XYZ 101.369 219.103 null] >> endobj 577 0 obj << /D [570 0 R /XYZ 72 205.066 null] >> endobj 578 0 obj << /D [570 0 R /XYZ 72 122.852 null] >> endobj 569 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 582 0 obj << /Length 3204 /Filter /FlateDecode >> stream xڵks6܇h{1Cz3M;5{RCwW׵q @VvNo2 x%Wە\۫t,fH(JTZ]:^ˮ]_I)zܚFڗQ^..|,W* J(UWR,]U70N_t \KRձj`niH՗BYҫv+yWv*ʺqܼx Bv(H!$}>A7- :֦uye%P[n+rFO)IXVHT]`(Y57[TG]>gn'/ ݙ J|zD޷ٝi/uڇ 1:=4q6?P" "|8@4-֍A}@UđWVX`uz*X?D3'YZ9a x P[0 XR/|e䱈d!Kޛ A32i&/?Hr~"/L?uqp{%(Zf-ciT9|W4kkcgܜfz@=&tLSvd ~T}^[o( 9#NC%,rB : |%رCC =I#owYx'KYC!{s,Q"UJr<4{RY '?l4f4Hk;-a; E9 R7{Hm<$T9FQH6~Qf9 p0탻O#g=A1`nhJm7ꐿXz%jJeN Ep||kr}ČC>vXd~p2^cmr怩2қNЃM㩌[!c` q2W6F;氿#78`drɃjb (К' ]N2,YMR8VQD?%%QMp(ӇpUe┷SȈL& ^v(B?{L9E$D M\Bǁ/sx]G&vWfzmZlA$f r(:J'D23ͷ#`lRV`0AJtUӯF \`pHloiPW6 C?L<2N--pXKD^l|\ AgmXz|H(yo%2WKYqt9F[vX9")@'9DCEPQy~m8g#r 0U[.HWÜfAVga*hha " Fǹ WœH )Y~u卡r0Y9źcb5@&e#8'd%3n]ePlI3u-H8۹ %Rm 5mt2o%=uѤqvr7u%y F̃$&L$Uv7$msGY]…^K@~&4!a}D`B?穫 tpq &=3AEN bi`C8o9JUHEI2t7 /:AJChEjqGO~ۦnve?'9 ?T `NiO|EO?Ml2_Q2oυ44^Rpʰێȝz]ȴ5F4zjMC p4vQ|pgOxqǽlIm)~0H&h16o1>Sxa6s>a8Ɛw'X}^MDlwZ'חKV~y=zv|pF@:ou7S4 u17_i&rC.ggߕQX[V#cI3uƐ7̃,B 3yTߛjQyՁ/Uy|"{O*b!nU|rlgJ V4-пڻӾ1u۽]gM9TmIm:SU7hwU}Z[ygAzp aؘiLS'0μ#Ʈ]ߙ:e}&i/(vupye@ 662l2E#Lз;3 Ź]|po[P cW'^zxctw_ 4>2:ç!%}Ӫ׸ma+m9wZR_A8vۅKrp!g'+(A|GdNBE {U?O1YhIJ_և2* ,}9]7 endstream endobj 581 0 obj << /Type /Page /Contents 582 0 R /Resources 580 0 R /MediaBox [0 0 612 792] /Parent 552 0 R /Annots [ 579 0 R ] >> endobj 579 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.431 85.823 316.206 96.727] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 583 0 obj << /D [581 0 R /XYZ 71 757.862 null] >> endobj 584 0 obj << /D [581 0 R /XYZ 72 720 null] >> endobj 585 0 obj << /D [581 0 R /XYZ 72 683.515 null] >> endobj 586 0 obj << /D [581 0 R /XYZ 72 445.466 null] >> endobj 587 0 obj << /D [581 0 R /XYZ 72 431.529 null] >> endobj 277 0 obj << /D [581 0 R /XYZ 483.422 77.021 null] >> endobj 580 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 594 0 obj << /Length 2884 /Filter /FlateDecode >> stream xڭ]۸}>DbE}C.i{]}(k5J{EY^dI pf83rnoud^Y8v0,pV]-RywNR7_ik^/|%>䝑_ެ{îyKTlvW~WN_Y|Y;'Sh+?P<+O}#eQ-T0xQmOH)"P.ƏܮzSoo$n,u("&b 7mW6< AEٓ}m]Y^oMyo*R瑼.);/|w̒;AnXWfgGFўV,s$+OޢD7U)jiZyU$OG3KA[nTe};[z2Q]|3P%Z}YhmH\S{zw t$fn@PwtT{|--4u6築Ґpu3ژ\ ld:i6h|-Dz~YO8-Ǧ$PGFyiW@ѫCPb(=D Ժ Y3̫vd@lULI`?_B3@n K'#_i/ 2co+劜yPyG2{B}lt5:HÉ#J;An d7<@F~y̰$\f҄T֗8e_e|ѠH#/NAB䯲斴 ;S/Uh\6uE=cc.kE q5Ϗb/8 cc Ahe -C ZDzV<ؚjYZ6 KF1|]1F/(W"6v4Wh;M8 H^?$$ѐLPx{8`ʼ$BFd6˒"nssI3$=xb~'UAڒš$Uay|Mnmr>CБ&`ŀlBc@(`(H2*ʘ⛶QADҀ >$ ]{|{fdNMR8'uWxK -+#$5,etdeϕph?bqR0'n蕰tue29~QXrةL'{;^ {TMi͵ if"Ӑ?r_'P"mBpo6٫Ҝs9$rx>o+:ΐE;[- OgI'7#S-WW'AyѨ6|-a`џrM6GTLEb6`J Af`(!m8ť͛k5dۙҒZ9?- 腍Zs>6И0 3cF\MK1c9 ̸h0 ,5\Q6>ÇX>1'oq&pD"(;dYNJ)\{JA+&qGdB4b!ŵLiՒz-|ͦ$ަ\9$R ?zE1TW) a4a{)\j`-GPyYMS֦[vה\A8dЧ,-qD) F#u{.#}ȇ8+ϴ5< ipq7ɋeS[׶h}սu>!R) *W3 G+z\ȴՋ2oIL#Vt+Se^EA4Ȱ5_\r-_Z絧\LB?&m>BJ0VzoEL<zhyh1Sr"8G!PqG_*JGzRl*rN \ ?Pt~3V|,"Oհ% M&􀁁c`t@'Wing_jyd'fI8a~/+>N$*V $<F5!Z)l/~(F7P~P@V{C!ֱe\r#9V Wbwh> endobj 588 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.187 214.644 388.899 225.548] /A << /S /GoTo /D (property-factory-function) >> >> endobj 589 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.372 196.711 320.615 207.615] /A << /S /GoTo /D (mapped-traits) >> >> endobj 590 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.078 179.152 379.563 189.683] /A << /S /GoTo /D (hasprivatetraits) >> >> endobj 591 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.462 148.891 324.5 159.795] /A << /S /GoTo /D (delegatesto) >> >> endobj 595 0 obj << /D [593 0 R /XYZ 71 757.862 null] >> endobj 596 0 obj << /D [593 0 R /XYZ 72 720 null] >> endobj 597 0 obj << /D [593 0 R /XYZ 72 671.56 null] >> endobj 598 0 obj << /D [593 0 R /XYZ 72 657.725 null] >> endobj 599 0 obj << /D [593 0 R /XYZ 280.665 339.684 null] >> endobj 600 0 obj << /D [593 0 R /XYZ 72 323.692 null] >> endobj 601 0 obj << /D [593 0 R /XYZ 72 139.989 null] >> endobj 602 0 obj << /D [593 0 R /XYZ 72 126.154 null] >> endobj 592 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 606 0 obj << /Length 2677 /Filter /FlateDecode >> stream xڽZYo~ׯ9!yȃdw@`G!PMg9Br̿O]Z+)FXU}Tu_;w|?R'XIi$aꅙv {J}m׮*I]͟ix׼Z{K&\䭑_/r}8N$ ^'f@=;a·t~ ,FRY:aW*r "$ }:tm v7 b}ؙY!]wت=l/6ָpfv0&v8Oۺ,Y.[1>:ӈ8]9ԍ-d͝G>טh+*/"Vm UՇqU 4m;S&9$/JE"$,{^"wB8rH)[eЗ"v}”5xkOe9Κ 9ut̓Qj}X%_`9%ĂznșnJFwެ֡o=R&{,GU aaGWMF7RT[`u5Zg栨B  \xЮL}Z0fuq'k /'/dtWܒi3tnO\B44ךwEZSqrm%k nɴVITG5O<יߌptn}օR<$ݛvB^~re㬷kȰn]|qyn\CJBșOG Oҡ@/>o)m 6#V7_Qej+a42z endstream endobj 605 0 obj << /Type /Page /Contents 606 0 R /Resources 604 0 R /MediaBox [0 0 612 792] /Parent 618 0 R /Annots [ 603 0 R ] >> endobj 603 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.216 196.398 194.798 207.182] /A << /S /GoTo /D (per-object-trait-attributes) >> >> endobj 607 0 obj << /D [605 0 R /XYZ 71 757.862 null] >> endobj 608 0 obj << /D [605 0 R /XYZ 72 593.738 null] >> endobj 609 0 obj << /D [605 0 R /XYZ 72 579.801 null] >> endobj 610 0 obj << /D [605 0 R /XYZ 290.637 489.682 null] >> endobj 611 0 obj << /D [605 0 R /XYZ 72 473.588 null] >> endobj 612 0 obj << /D [605 0 R /XYZ 72 349.661 null] >> endobj 613 0 obj << /D [605 0 R /XYZ 72 335.723 null] >> endobj 614 0 obj << /D [605 0 R /XYZ 72 265.465 null] >> endobj 615 0 obj << /D [605 0 R /XYZ 72 251.528 null] >> endobj 616 0 obj << /D [605 0 R /XYZ 199.381 199.431 null] >> endobj 617 0 obj << /D [605 0 R /XYZ 72 183.456 null] >> endobj 604 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 621 0 obj << /Length 2654 /Filter /FlateDecode >> stream xZY~_A  q؀d<Ƅ[#z)R&ϿOUW5#Ab꫺Γ#??|zLK#9K'/Hʝ"n]X8q=Zg1+.ujI_vO^,bg'@Jٌ;At F'##i*Qv?(4M8K!KdW,T{] Š+GY-=iݗglMGMCYѴ LFnV+/̸Z[u nc塛it{x:^em:w9@|KC>6;^7pxeM%[=D{銨~$ah(<4#s%CwTYo:#rǞp@{7h{(E+rRY皻 +(*zf(:Xm@  2}~R?jO .JWN^.&k$t"<%/pD缝SFۤ6Hbqbn]'O IAb/J#σnZP 3F0ÛxT^_& 7?̤ &}uˤo3 D鮃CShO7( @y~ܠK^0.NB x.^W-u=XaOKn벬q3쫜@<8"!/ $+1fNF.% )w֛ͱ@"uTCu0Fh^ z`8D>r3hkM*%x`t*"ɞk^cqw;.iJUg4LRiA#ٯC(VCףJbQ=IsBs7Ƴ!Ǿ-NPCP79lNhIÛ9<{s7ycTpKCLk{xI4X?jłLT-}u{n^l-:W1hbQ8[(:B. a2*)z; Rt{.{uقqsK$`҆rU6E9~`vxrIn> Cˢ#:\1"} yD6ON–&|.VL(1=$N*ۦޟ.i'zB=:Ϙ|ejxb$T&ؚ]j4n.0dnΟv擮.#U=ŒP77p|#;:n1qeq A~!rfr.H7e(#/IOdY#o*AW{+ͪ0o c̠BĞQtqXp5]k+[Mv4_فؐ10&*i'"~CЁg(= Q) x2$A p҃tL A _* YMND'HےKm[=xCS3T:@QAO5+iGzJ1|^! ˟ mr9c$e|g_R(Kͤ+U'뒮0Η`نί>"_%wADI.;$P;J9(郦p%O.F݆%@8';pe\+o:Og\BMx>' OF_cُ|FRA>| QD % endstream endobj 620 0 obj << /Type /Page /Contents 621 0 R /Resources 619 0 R /MediaBox [0 0 612 792] /Parent 618 0 R >> endobj 622 0 obj << /D [620 0 R /XYZ 71 757.862 null] >> endobj 623 0 obj << /D [620 0 R /XYZ 72 720 null] >> endobj 624 0 obj << /D [620 0 R /XYZ 72 575.203 null] >> endobj 625 0 obj << /D [620 0 R /XYZ 72 561.266 null] >> endobj 619 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F65 185 0 R /F66 186 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 628 0 obj << /Length 2595 /Filter /FlateDecode >> stream xڥkol%Ҧp(r%md]wfgZR{I{/7>.*8v^RdAxEZixؔ?rԛ(i1uB[AD~MC/A^sy{ *Gy 7!Ky7=zy֡AQQ"L}Ab/ ϪhةJ&q)؋VAE.ETEi ]l!l dynsHynF(MWkm|Y 뽿n_l^ C)B/N,&#z{8ʪXAԣh?n~i9@ 4RTdwL{ {*Wm'P*v$akfq6bq6- r<BBy}M#TdZ*d$\EsVt]>OrN&آu9褖¡Xy*ufhaZ56?ߜY1jsF,Z')WɉaP()& MhZu -aqEsK(rgC303#fo ^8@q+M('S׸Tsbbv7Z0a MMۅ;kWUnN)L|N6r4`0=QXJ H27@AMkS"ZaZ*Wm<Ϳ5ך Յ2rܩ嘺+@b3<]dS m g!OB V! 'A+X멛IR"IbIۋif>wLҜgFM[ G7*覭go#';E8l=l\ЙE]v阏V!'a' Z 2M8!97$vVgth ^[|Ea#$s3C '-۫uѦc霫(A;4 "([E9]tmvZ}ZQﯨRHinuG[ٙhn8-cFϝ Udi)`㦡ڰxTg.!! FZWfAF|3%Ew+?S/|3)> endobj 629 0 obj << /D [627 0 R /XYZ 71 757.862 null] >> endobj 630 0 obj << /D [627 0 R /XYZ 72 666.26 null] >> endobj 631 0 obj << /D [627 0 R /XYZ 72 652.323 null] >> endobj 626 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 634 0 obj << /Length 199 /Filter /FlateDecode >> stream xڕP 1[&^Lr`Jz>`Bja"auG䠐!~ j'u{_ֈyeS]5 'CIļTo$D'lمR-lU"l"?yRA1|7në%ֱY;h}8ڥJr4T9 endstream endobj 633 0 obj << /Type /Page /Contents 634 0 R /Resources 632 0 R /MediaBox [0 0 612 792] /Parent 618 0 R >> endobj 635 0 obj << /D [633 0 R /XYZ 71 757.862 null] >> endobj 632 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 638 0 obj << /Length 306 /Filter /FlateDecode >> stream xڝRNBA ߯rfqKy/y* $.ąF?߹\¨i3=9).*:ƗK$` W%O0%o%>z$BC~cIAB/<<9٢^|IPR S UX 1p(!=*Opk Qu6:J75GBHx/Κ᯦֧Rhٟ74mK̷WmZkv8tf:Zi&kɰ;M 'r|t`9Pa endstream endobj 637 0 obj << /Type /Page /Contents 638 0 R /Resources 636 0 R /MediaBox [0 0 612 792] /Parent 618 0 R >> endobj 639 0 obj << /D [637 0 R /XYZ 71 757.862 null] >> endobj 37 0 obj << /D [637 0 R /XYZ 72 720 null] >> endobj 640 0 obj << /D [637 0 R /XYZ 72 523.691 null] >> endobj 636 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 643 0 obj << /Length 220 /Filter /FlateDecode >> stream xڍ?O1 | ĥ/͟D+*uTuH{*]Om_)ޓmg@Xf r7d %Ik lx%^TdR:vB!])6>㒤۰bWTE #l\_;:6.k x_Z?uΩ0QT2g< )IQ"5}!nhs;WB R& endstream endobj 642 0 obj << /Type /Page /Contents 643 0 R /Resources 641 0 R /MediaBox [0 0 612 792] /Parent 618 0 R >> endobj 644 0 obj << /D [642 0 R /XYZ 71 757.862 null] >> endobj 641 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 655 0 obj << /Length 2691 /Filter /FlateDecode >> stream xڭ]۶~"Dؙ)DBkIЊ뻋]N}X, A 7w'4RLp+yx'u$a~zQ.,^bo]zyo׏׿Xt2JB_~zP~5޽^ϹKOeROTuaA.$~1{WwUf Iz^$ 0_&` QCP.^J&,Ŝ> XL+F EîS}Uc +S-Ţm]hnL1‚ B}q \{a y+e,:ULe:q;~:^`}| Ui ǖy\(Y"cuw[!#Jq; {*]@AMWFan]l`??mu""cj_pBHb8@RUpP|MK'4H(/nY`z\SNgNjFfܘzxud౥c}(<_B0Ё  [&`!;պ1 fJRC>Ne UG扟2\ _$'Dp<Q9jD'OsMG24ǀxQ&gsH[@ںf&{/ Cjs,pTTFYAQL?rNZ@ :`` j5tb*;*xZ =U!(vwe!Hm$Acݚ|E :#3Y9:YrWgzD0G9=k(=FT4^*RfǍ Ttr;Nh\<Ƶ&x ݆ۤljrP?iͬ g>(%"Fog$0*cʢm?mo*Lr ia2Y]eӀLy}̃y=@\!9+rhtP U_'& #9no{["c9[) m ?[a51kZXoQN +PpQjqĴA q;mjRiu,M*?ڒtzXBm/A-^;vnJ}mc(LvjZd4tv/fW8R&ۈ<6>F6p/oރ[h zF5NcQÑAR=ja d+R1Ć,% /Zo AB/URvwL1Hxt AҴm͉QSo&V/4`8=EL=ȵ6-̬ FޡA~5GU]|?S6nz2ł*9c `Sdu&e첐ssۓ&hn̤qѢڵ`%ءoAdgT%WjӯdDPO՝ NC{FǗЫOB\tA{.خp+6V#/ n|4qFjEapUMsi3Qtg6r ҍk š~>/ySanL/){MQApڕ'׺E[y7qn0qrLׄuW^U2ՠx6 .oWCia Sxu63Ǝ-iͪ/TSWk>u;f$ lO A(QtK1,(K zzB {P,]uS몃!̮G#d&uBAk]v(YaT4@0ΟVIdʴWaf ZNO2v}e,p5w=$QFeĻq^\XxJ-ٺ+J1˜Y6U;@۟?zXq_!򣇀VcReqYa:-<4A@gE> endobj 645 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.168 350.032 408.146 362.525] /A << /S /GoTo /D (Hfootnote.7) >> >> endobj 647 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.303 338.077 164.28 350.57] /A << /S /GoTo /D (Hfootnote.8) >> >> endobj 649 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [214.624 326.122 220.602 338.615] /A << /S /GoTo /D (Hfootnote.9) >> >> endobj 651 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.793 314.167 188.771 326.66] /A << /S /GoTo /D (Hfootnote.10) >> >> endobj 646 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [139.108 140.078 249.158 151.776] /Subtype/Link/A<> >> endobj 648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [149.501 130.373 217.979 142.071] /Subtype/Link/A<> >> endobj 650 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [165.528 120.668 270.222 132.366] /Subtype/Link/A<> >> endobj 652 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [197.169 110.963 301.003 122.661] /Subtype/Link/A<> >> endobj 656 0 obj << /D [654 0 R /XYZ 71 757.862 null] >> endobj 41 0 obj << /D [654 0 R /XYZ 72 720 null] >> endobj 657 0 obj << /D [654 0 R /XYZ 72 561.284 null] >> endobj 658 0 obj << /D [654 0 R /XYZ 72 561.284 null] >> endobj 45 0 obj << /D [654 0 R /XYZ 72 561.284 null] >> endobj 659 0 obj << /D [654 0 R /XYZ 86.346 153.378 null] >> endobj 660 0 obj << /D [654 0 R /XYZ 86.346 143.673 null] >> endobj 661 0 obj << /D [654 0 R /XYZ 86.346 133.968 null] >> endobj 662 0 obj << /D [654 0 R /XYZ 86.346 124.264 null] >> endobj 653 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 667 0 obj << /Length 3060 /Filter /FlateDecode >> stream xZYܸ~_ؼFuƉ^`sسY"P݊bE]#g,ŪWEjim dnIMn]ymSik I??y=ϫLx+Z?}󗻛_n|XJ&^9\nm \{l8j7h<>(ApVoxD|;,Is=&닖_.D4ϩʏi~'Vÿs^;])nc8,kOH8gM S a0EcҴwr sykWɤ!mI`r+tXdTQq\Vڭ/`ީDGVmO[WqfepXIJypZ! 0+A`Eƒ'k`  J;ȱeAVV9űZEM,=gB耠}/̱_ξ 5 dΠh.5y{)[A4NJ; 9 )`&{%pE !T4ı$Rp]w}y{Kݝ;N-YJ Y=nY+(ZZ>O2S*R{L"9H:fXcBX x^^ʋ1M1i_0$+޾I=("T84ˌr4<[^Nf0ɜ;> 2IQBh{Hʭd[ 3쎤kH0<d *0Ȃ'c8C9 !tӝh{ݹ4옞kC7KC"P:k ghPX 7"YxkAսE l2Jw("oF>;i$ͩ)XLQ ׹ϭ 8In*%(vPf㕋!NQ8,$|J2M޺>R\ᯤ<騨꫎UrD+3d@C.Ef?5hpз~N$@[H&W!fLwaz9*sĩ`LHa Z( sLnaXKwDk3((4>@%hPvɖ!_L ':}v]w&+b6*Fւ+OY_FTr~0T)Wܜzx+(-W),(\ 2p(,/C* ^qÿk_._]9Y>(Y_8T4Bl b UP{e ͮlNR^$2 BR 8%"EJ9I-{TB"/{*ƀH"*8-4z+//x3u c{larfv|#S!&Xc{N1|& noZg%YAemhT'DrusE<,5oD4ɩù,"cves b!8gi+f7ySɂrsUn&Ni<ӽ7%_VK=RK>jW P<_Ȃb1fܜ4怦<0T󯭏^tNUֈr\)*.d3NRH1 ~kV:Y%E%QƐ PV@ ezSI&U:]ek+JW||hjFdǺd잸$㝛{@_:F`SGVU@t#Z31×iG8 X>L$Ye!W-(UF@>CN:lw MȲA2%ekV!pHS6("ɑG$PO.}S%Ad|Bd^U6];{Ow6a4 e,Cq"b~J&%1t&y%:(E& [:[e*af\~ࡣIrSb ^QU|s d%zerwx *=΀K/9"N8żӰCy  vE ɕ "+eDD}_xp]L,(UI(>-KcKaQ:.%qTHR> YԿ[ uHZ]2+.<gy& ORHHTKП5LA?Y*_(Z#Wٿb'Q6"J9~B endstream endobj 666 0 obj << /Type /Page /Contents 667 0 R /Resources 665 0 R /MediaBox [0 0 612 792] /Parent 663 0 R /Annots [ 664 0 R ] >> endobj 664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [208.111 598.833 340.174 609.737] /Subtype/Link/A<> >> endobj 668 0 obj << /D [666 0 R /XYZ 71 757.862 null] >> endobj 669 0 obj << /D [666 0 R /XYZ 72 720 null] >> endobj 670 0 obj << /D [666 0 R /XYZ 72 526.116 null] >> endobj 671 0 obj << /D [666 0 R /XYZ 72 374.239 null] >> endobj 665 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 674 0 obj << /Length 3026 /Filter /FlateDecode >> stream xZm ¸/mo\K-H6MiA&AkvxlnKַm`(J|Cځwg\]2R?e]=#_)Oʻʽ6WIi.R'E?tRSV&W4Ygx/}qׅOxZ*x9п_֎:zao}}񗋀75l5U~$ROOD|'0  <(-"88m4ɸRQ@ Ƕ5~;/V8dAUG^*CTP><AD:~6@uM]T=5>Uo訅PNRAOD4Jiw964ogw4@Ad} p"~j̏bW5? >5aҙrMn7{D^Ş Vny&g{I~:$_"(-'T+/ 8רiva6g,N"rUgt+p#=qh_ˢoޣE*,#X%վ=<ZNKf|? JÇu3> KcڋX>kr}[sG+Jff r8%R;Z(, c[NtX$k@@Q݁8Xi{F*O$M `vt@v‚3¹5~)=hG!Sŵ?ի  <|bPқL[?6_xӮG%13SE_~[89֚Ϩ}HSݰcow9xX[YBayQufG ˟G #ZCc݁Hǚh*r9Aj 9S!o[Ӱ !uVG`>n _3Pe:/gWZԺWBj$PCPjp,b[hcNC>0g#NYs_MUW\ m-Ǽb@/zۮRl`7zL':!NhI*_ f#$oݚ*_D d֘-N=GǗsӠgn)/*k -yot+5V2oS1令K$' "v.cpK]"␱!Ѣxt Yh3-ܞISL !QTf 2pRɼ>5MmO\wd%`~ =kUP|hY"U%-S `K-Czx;͸k,WAaZr]n2Ǡcso\Ds0%]]Acrt>ɺ- eD4zZ.ūX,χF!ุ4ׄSq~o2FLgIPI8?wk}`}c!7q_쯓m=9{lbv]L;:W@IKu7gAWV T/ ʥ]SjU2*q/m5Ԝ0qwE/_/o9%[&kƞY<&•P)_Lh!P/AB"lpظ3ym:9bcSqyZ (*`G:O.-zq_3.w Iz6e|Øؗs_ۻ1 2*B9nus KQu4$Nt:Ig-Nn/EB'Q W✊{{lE]t)j]C= >X41'") [P|vӫ~b꣱P}%I+Uyfk̮vS*;nf[n0ۂk%D5 ɬȜl xxq9ܣʹ8{ӤKLR j+ddʆmb }H %8bW*'*ؐ6}=xѲ UyTS.hL*;;0\/LR{@{7dRTpu5 '唓ڐRִ+!R4t_=Qȿ' a}>kFqriRU,v+AgS$>g7߮Rr4*z+ڪ7}=^cMD9di(AKC dZ S }arwg9, )TtCin|WGs(vnjMx&TCw"ɚ=zGbmI%亸Ō(@a^Vq34Yq`KDM/T"BxE-ufJ_-QA554؎nnoKrhC@^{찪a5T86ϰeEN%"7(bU.n⧾+2R_߅"H҄~yp8 \`gn9 Nn\3P0 Z󽡂h찬p@$ľ8 {**Xͷ`\I^ a{nxnyGcnh߫Clݦ脑Z?> endstream endobj 673 0 obj << /Type /Page /Contents 674 0 R /Resources 672 0 R /MediaBox [0 0 612 792] /Parent 663 0 R >> endobj 675 0 obj << /D [673 0 R /XYZ 71 757.862 null] >> endobj 676 0 obj << /D [673 0 R /XYZ 72 403.154 null] >> endobj 677 0 obj << /D [673 0 R /XYZ 72 184.051 null] >> endobj 672 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 684 0 obj << /Length 2281 /Filter /FlateDecode >> stream xZo6_a졨Q,{{v{)a[ΌfW4H؞I6dZ")'s|*qRF*r7N8HD^/mK'OϝnZHg%>BgB Nj_H9"bgU^|s@&ΝU:A@[8k˙;hLT>0c~ȺEBY1HQ[e dM0,U]}cW_Ѓ?yBXARˢ^~Իmjˊ4γZ{˂}soq^3߮ѫkYT _&Б" C/`t謊Z*c tʽ㖧SF*+y>G;Gٷy:+X n5=jƗl mw#ԼuAJ3c_h$߃Xzkvgx5uP^ȏl"H"?} G"Ld6(A9K_D2b,}v䠬ZS }ںꌽk6@iaf皟Nt-ԟcU5WM_(HݨLB (LxOc<Pbq1e"'5tˋ$1b" $}؄ck9 & 7) btBybo GLĬ`|^F`9SDs^_UyeSlv`fb6QV(X~`a[Vif5vr(_rM$9rQFJ@alOY%xHz}Do޼Y2}{a<,D}%M0s=ۄ?W;`Ly'̕3F3f׺[=V3;=s&WcIZ/ è1n75Ti_pcJx]e3]KSwV{ꟽü)x$<祾h/Q~EYd3_-|Q)9Y.6'xn{Fߎ2lˀӁǯjR1S nZL}6fPళM^ΫfˎrQfDS=&|pM~b=0_Qu<S'vRJxh>1?8¬48$k/I47}LysSAyvrF8psS/<̶sB1g/M <>[1Vuɷ⛾7 6mZ2Iι ;C*}΍ܣ?RBW iRs8^z bCeZlM*F~hr|Lc^؋UbWeQеl77e䍷H)u ; "?; NomEgTQHg\;386o}2<(KX*ͥ!ˑP~-QmfLe H ?k Ua'iM-:C9\l+=_X0./gu2ny.ozm 8~#uE7Q޼/˺Um#0e^j .zwk}&}[{e#, fAd5G.t)!}.ȕ.An*r8R93n5EXlgdd \e$ճWNlm1 LİDvPta~e)XAM1v }wMaj `-a#P*^]W8* 9_oPW& pu@2:rzqC;ML0zHDhELmb8kymEt * t#3.FˈWAwVu ojMMb"ɠoJ0`3gϱ4SE "b>ygߤ@2# Lb! N =BLYDIS Qu {!{DD)ty6 3"w}߼7.oġ,*_Zͻ+0JQ]>d0Lq|I(QQAbhNz׋}h endstream endobj 683 0 obj << /Type /Page /Contents 684 0 R /Resources 682 0 R /MediaBox [0 0 612 792] /Parent 663 0 R /Group 681 0 R /Annots [ 678 0 R 679 0 R ] >> endobj 680 0 obj << /Type /XObject /Subtype /Image /Width 560 /Height 142 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 688 0 R /Length 8236 /Filter /FlateDecode >> stream x PT׶ܪWu_O&Y^P4F("hggQ&A8Ę㬠8 32wx}#+8NJ_~f)S0#e#sJpNeX[LZIDQAU/4[=R7\>={ƹl8u(Qo}y]+nNpզtլqϝ* Ucu b6XŇ\>k Ũ\1.3U~o0:>c(֞x\'>}DpS$IxՌ.XzsdžoΘjtڃSBj[1w8Oɴ^\-: 㛥y9vKdzg5icmd̨Y9R ;s諭B$=k1BAޮ(ms{x\5׿llhXkh";[웊j62KMo;,Fptئ7"aG)mLul8J%~k$pI*I7e~2h?S-Mtj|kϴ=zsU^'^lN߽dLTsq YF_hȵ'IUo*ᱺZinn.}ˆkMά5rl9(&*CI]tئ7GWlN>MD⿬̗y%~)99OR&dFL=TW*`v";!Ud\Ѧfx+^o3{VFa.h8# V檮0xWmn+K^ɣ4XKM6Lp1 d*`oC=]x#3zvu{$.Oֽl}dڏrvQ4p[>JfKfz 2h ,s*qc\f&?QAMuK[NWqu/7Ӌsүv_M*BUzvX5)ψ%21WmWt''WYezb{LwLrl5$\6(`NN2<zJF:N"=sxX7?|L5v9=˺Nn}sssitڃG{Q*MMME9)Q頻JWqo+jij+8w~3磣\QSP\W.~|T+?(sEs>"=4=o|*-3F+zf$E7577 3_dQ??Nc.LI{s{z#QNSr~R棭tc#mlO8qe,3v"kk#*S,pϒs؉L{GӍ_+: ?52c:z휏h-SW ׷;ef:zZ]bڦ;?4#&Vzj왵& "1<[{ӍF05{[ %ϦC=2!< ۩c'2=td7ѣ7v =lU~|dMrjnx?;r>t萻; @;q[e,c*Ya|dſϲikJeܹ;1z[ft6S{`D;reriխч銸sұƎ_I':,7r_chdWm1\=&N_I_;Ғ[ۘW&HIgΜݱs'.^A#e=pED{\a6XeR 2\ވ`)}hw\x~y}:Z:V@l5q4OgDވP3tTeUi+4w3$p~$)1H&M~˯RbCIGGH s*#Ѐ3?٬RKbLΈЧyB iĨRusEEzpctD`TG g$ƪ`0[SS#a:9bU`0XaG# AG0 ;&=˸---۶mHkkkopa0 ֍zG2zt)ϝ;U`کG߭S v?0lЁ^B$a9߮Yo~ƍoh8G R!'mbQvC 0`R65zDb˴1qD" N=*~6cS?SU"l1<=%1-ٜm6[6fsfn77mf2 +Kb:'O2۷$r~D\t8mH-N>`0G+WX#\;Yp|ݪ_(?O}f5/>C7uLv@'܎*ӣ񠝡h}}}Huc:[ZZlll`oߎ`06Q/+`0 z=`0z`:G=U A`0X.g9FGaU`0-E:aCbLî$X0 N{CXCθӞf @% /_kzTU^R[S[" =@@==vƒ|:޶~u4\*T~G,q!&FT׽RKEz/%1k4_*#e4LvfFC} R&U[YTPMͥ" =beu% jsGQU |"#BzTSU@e)ңr*#գ&Z.ӣbգ2exOz$) B^ӣR~zYIΨY=6r=gm|Ç svg_X0o=7f'?y?8fh8Z__ЧmG(9tV=Rm͖M X"yzJy7]R̴M[-#_&?fIң~zYHUz4r 1ب0RR5d`y=LKf߿=Az~vQA+7>:b>cзo_y=(6^cCjs\FP?20y̴Ba~v G<~zY|K@s>@mꑟzuE e&-?]HCjeeCzQ(Yz 7VpQA^W˭ 0|0ǃvL~{'uAccS\HbDA?!QJ TAScS sW\ףgg%??bj#!yتG~=:vtСoW˄jգb &=Rm.~/GET㦦FBzTYV @eR?{Y\˶+K 4_*#W} ѡ%bʯDrp|]*Tx(К{a7}plC~vFJbH26GGGף@:x##@Mzu峞n(FE6 ;'O1R/l (;-YE HR5lt(q!&FT׽P)KQ#F=w-'y6\(^ZᏥ#Ȇl:KIՆ KQ#F={.; Ki=**XRS1\=0id] -ѣ=p߹B3w~uUWysn5j!{J ێ00y尺ws|lAO|?4^n*6ᅮvI6GgGj#I564&'zW~w=ӣ2;lذӧNy5:R >|S|n(Oeg("%K4CFod]NQIK`jNj$%x߿y~nv3H,ygBl;Xxm"24u}< "B!P,F> ‚nLZł܇w=\vKڣ,WYlA}h9jk;;q{pׯZjJܻ;bpaSI~ knƆOĉ!LYf!C;OzڳkСC|X͡eC! ol3@jrv3o ͚%[=ECK uT9ߧc"B>( dGSʊڗ,.Q07>:CA~IQC}}\td\tDikhݒ QG>MOM.-1b"Cc"־V+rXW[[_rl8=ׯ$I#U` D&Ra`ٴ20'*2ivRAjz# 50(RO# K iii򳩓L(821asSSW*OKp$ 瑤P,22ѓJZѡxȓz3r,'e}je!IQ:6l(Ӗ`uw}pw-^N[o1o߾la!(/S +s%P[e; ,M[ZG4ۓLoz$S<ΜT/R谫 iӖǛbܩ})yݺ+Уv4 76GJ`eIzV.q24H m8ђl(D᭲mH`%z'E='2Ӓ'F]4<$@-ΠgldH>=w?zAeg$S's[R1=j3|{i)O|5חPO\d2ܹ]UYn=*婕C;JuF1g0<wmtS"Q/R/P,r!sBz"uR=Yd15ې9ikc6sHf'oݼ鴷kanB{k[Y.VDKv#iӒh -#"%)j /oRBtcC}UEB߹#>:/woө'55U=]Ҟ'P(+NJyy{j_tW*4Gb#idղ/*,j:լGl[F :dO1buo爐E ?qoc]{p;F {(޸AKFCNL'7=Z_qYɆ< ol3@j8۵~oʯ9/46:G.ըA)1H e5onn({qE :쪛] K IQ]YN;GDJѡ맼0,e<JLgfCZs]#Z 0uS6Jz#dwd}]#ڜ ңЈ u lho6Z{I=**5x*0l(9eE"]#Ȇ:XkT`dPVs*J u l j#@T<@6Gzt‚iɾx!Y3/{wOB4.I uVg uiuGfsMrw #\;?g`)"10*S6C]kzC J uy+\Vn9r 1&ć endstream endobj 691 0 obj << /Type /Page /Contents 692 0 R /Resources 690 0 R /MediaBox [0 0 612 792] /Parent 663 0 R /Group 681 0 R >> endobj 689 0 obj << /Type /XObject /Subtype /Image /Width 559 /Height 247 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 694 0 R /Length 8841 /Filter /FlateDecode >> stream xpU޷;sy~A"zQ(UiKMФE){H $@HBH9 ғu>i'y{?;wIM""bxY%m:DDD+)A#q##c@tst5)OCDDC3%k$qn>"Fm)gtG~-ϥ5Fӟڎ J 6'>3Ɉ\2}^?Tk b"$1Z./qjy 1Mc^ ܧ?4Jwz\qFscvOnjMȸ/54Z]ǗZE=/ {?]hbޭCҙ5_olMȤ;buѽNfܫ b`?Fh_k 1ڱeC{ƍJM :J(UW8[K#.ψQKJJJKKQ]~M>yD[UΔmݸQֻ}NͭZ.hbBƖZ̎& 0;a*a/oz{ksL:uرȑ#3M#VG|1Q꼾-ї%l*"#8e%E9)U`r4⮢RCzK˿)>?KKuu¬dCT埤쫘luRӯrC %]ʍqC]mջZMv5Fߖ09UdOty+gtGbr(c ݷz]rFmzof j=.$-{~mC;B\[*; t|f8R'1Tq^ns=K9!cKhQ]mtTk =W]G}׾%atЗo+O>T{y8אG?|i_}y?4X~H9T$ㆿ1疍2c02V4*2[?n,PT77[D۬de\2BjU31l'%/#xW|-C+.*Z>1]vBm })g_V G[0WZMqz](|ÕU)q*Q<`U' 微”rש3M#VǪg$JKS KV'4^Ecat?0}؞enҲ7IwPJGcJKmL3R[49 _ZJKK3nŮz̎ bГל^ЫJwhw0uehŶF~s]Xeܼ_/w[~abٞA w,7ʷ,LR4X5gT.fAjuy{q]Y;X2;`0X_Cg7+ߝq:0 <ʃP׭I!niٿKl}<'W5T959qNg`C9U*_9Cɋ^nY`t}rҠ^N-! \v(! RddWc4Qh|UkIk|K_vIk[>n6Ydݷ -Zbe\\l:Pq%%%yᇝ x99&}+ʚed~NsKfQ_3SStY6wy /#}yAW|&T5|F$E|>e]r;3pׅvΨ:]hj-fG/.#au`AJ1?,X|G6] Wo8wEox8_e˖{&ioʡ~6%Yi2_}Y5=}Kkr3+a֯]ِ!&C)wc@Cv΋+'Pu.zu2^Y/RiRѯ=;ж뛶]Gv{p܋{ NǛG֜_dg̷;hhrtA4F>91赼 ׾f|9.wv.\ȡ_m9oo׮]uV9٤;b5uخ7D6~iI'ۭjG>:<8N3k|3O?36vݡ}MA浃}9N27oO.iݪ &n/_1*/䜪:ZS;Sܖʽ)vV MCں׍x23ˣCᇝ;w-X[\\\v%gtGl:'H 5[G\XlWkoik&^v_{F4VHTwCؤT?jRC!6sv>GZ.Xc4q!MckRM#6)ՏP |Zo+ sdEDDĆT3!""6z~/35Q C!""aa""F""FHFH5)IqIqшhUe% عq;LCDzTVY`eH+^,8-Ŗ0pצUWՈ)-aZM0Rzs?~'ۻVD$'>,2<4aC,砜0{>t;Q;<ԯ$(ie1&N;↲b 'ale;++KFh02=#I{nlWՓW Sݹs@?eg:+]vٴq$FQč]|mɸ;uxRe[6pk4'#Dnt^k|r.ANMo۶mp;|$_,q bgwF<40r{I;7:#riX* ,\[mfEDD*-aB #DDD #DDD Fmӧ̞f,2KixN59YUXYfe%4ܸzixh7 "eVۄ(¨*2/;_FDhLtTQa~-:2+DaTADDz_,--]_Yl #0e%,Qn6""ZECժ/ad1f!"E/yzH=O9b[UF>`(' -jƏۦM<Y ̪|O4ADl%zy^0ܾk6"fF(;C[CY:uF7_lKK1t 1Oj߾ӝ:Y~ xQ#{v<2l;7|L'_mԽ{7>{\Q'7;C[kDgEծos #3GᡣFPsGO?"Q1ƏF|pzPR\_JjQV0t"bC¨v}c=LgyR_1#w:iq8ADl=Y\TX1:w6dԥ3..:"#%)!&r2t9-^s ateOlKK1̚hn;j)O=c%&.A[kD!*E #6۷9Qr'Mh׮ӝ:ZFi?m۶=.FĪ|~4DDl;]\\dИFKɿUmg-c3HIDDD.).2{(16jwߪ605czLԭG1w,+Q""ZLEզo3 -.:uc81).ڪaCDDz0]_0HEDD^t?_RR\0LCDD߸^p/v} #mNDD)ˬ,W/ J#"ev%ᡄQUy\8+3-9* ,=\h6D_/ Nr4{DDGeiuv\vW # bCލ 5q+#DDl FH!""FH!""FH!""FH!""FH!""FH!""FH!""F،h.~èF@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@Fc!""ZI #DDD #DDD #DDD`]8"DDDkt #DD$ #DD$FQa'~;w=;[2G̗jPZTmӧ̞f߲9LeTjԢ гw߹JOie2_5ՠ5F9dke2_5ՠ5F-~1V+NTظzixhP_jʬըQ5jFj {MˬTjTsO̿zʬըQ5jFGJ׷6efH5FU՘=;U62kA5jTQfR Q傓Z~ X~Fcѽ֦K5H\~ըbnmj-TjweꚎhWX~[[)K5L0X~t|]:N^Q0Jn: ,oW\~[W)K5L0jmj-p:EWj40x'_F2Sy]pMݪ¨.ӯWaim|GX!!Yg@]#o5aF5/qR&FϚ-/+(.*u3\vFj ZOhQvU ֩S۷Eِ]iT֙ O}=[aBd _m;ְIUj8zF](=%^Te#,$ܩc'~ܩ(T}eϓG?shȵiޞ|NQcW1IZJL(Mx̉#u!%9KajTsĸ3ǏԎj%#_wQKzըXp2G[ڸEv'V3Oiiכ=v=h{ʃavyK>۽M>}|4ÜY:tx1=Ϣ;vؾ}I'kԪaV6Zl]J<ھ??`F#_T}QaI*W/]tϿrS=?@=dgߓA7R|/?S^^&^2Ԣ SkR4LYϥ[73RuJǐޥWJF"PiiV0JyqJ-~ޭ%Ok_[ǙFE4{ggOL'%̞9CVZuǍKINX|YW_Q/Z0t;n&FϚbCd]bԏ4j쥪'(F!i>b 7ؽ,¨P(ȗw2vđE~Q%2tIw+S=3Mܩwsc=yLf*T}rXi/wJa0bΟ9'1^|)++3n%H\l+E3XuWUR\,r~U[ZRR_KOS呔/y"s1pI7V)ZM^7B=KJ5Nv%N֫|%YՎ;nNmY^vlO>~WeX͐@\O>>COSw%u&HT/U DaV6Zl(R9F>;+˸NMygkF&˔׉yyJcl-eV#e[vӁ^t+*EQ5|-+=ĸ;XTqS?aoU'jrٝ8a]?.Zb5;ikW=g~;7Sb•YWUw|?/AA ,8&4j쥪'(W.+>J vo40s5v{#ϝ 'oq5V+|cc佱%2NBm {AW\LDݔFhgOFE_t;[TX,-A~>fO6ù99t]UءMdeCv}(gN}'ޱ#j,u6%y8|VhRmY(|0Z9$S۷g4z2~uC-17Bit\dİW@'cv&R T 31uЙG|di>}|1nF7BdL zĉϟ9yFHU #ׯɝYX~kdeH(JΣȆ쪇*ֹ֙ӫVXz4:|>ƦO^?}Ҿ//<\۶m{-.YOxW3cO><0:]4Sӊeݻuik۳5;HөFe^hqqyŏ۵}R7F)IqhnvFqqQY!!03{yr~iiI^v}wdCv"5FYgH@F^N<3Xv5j4}!]4^fO6YΑ4c5 >R&\ C*5R5N5 2F˨|e$65_є!aX X~(R[0jj%R[/ՠU-8֦K5FQ.R QՂX~ը0'6_A5Xpr2Z/ՠ/ X~F {w$Ƿad2keTj̝>%CԪ>ʬըQ5jF'I%e'ER Qjl\4$'+Mzn\jPUazOaYٲ9Lea|⢩ը~5W.㙖PfQf*J5FQ0Ov|ﮣ{vlenzEGܤTrx)ٷleΎNTըu 1QAAyR A5հ^5jF%a"""aM$ R DDl0jӦG(FK )at7' "bpG #7E&DPDDlg"QLb+¯ ""ZU%w _0TL endstream endobj 694 0 obj << /Type /XObject /Subtype /Image /Width 559 /Height 247 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 324 /Filter /FlateDecode >> stream xұ i@b" G8]r,x%aT4~O0_h:e@< endstream endobj 693 0 obj << /D [691 0 R /XYZ 71 757.862 null] >> endobj 690 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R >> /XObject << /Im3 689 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 697 0 obj << /Length 3050 /Filter /FlateDecode >> stream xڭZY~_A  mއ=(ȰDZ$=3q4&>U]ÕwqWW楟:b?vnvN;I0 y٦Um$ԼdKz빛!Yɼ\r7W_y@u<Mx)aA:wf y{+wq-8\ qNH>7;жGײ 77eOߺoeBq^[/HNuvzB2Aő=66yz~Gz|ߴP 6w9tJWzo̿r1|~oA[{sUuC4zG v73d.5Y`a]_R$}#zA \o|.׎KD/ϱv/x$K .;E lS4aiVUCz9Q^pA5luID,9 Ahag‹ҹ}ߪۭXK~[u2aVCG+$\w~9ìuĨ|/F0pSV5wu)bZ:;T0wӑ5Sa6ɩAA\7H7AL x`K@xŸhu7/[$}$1F/v6,)`LH&G/RPF9ȧ>R!nz'U0 wՀ(ݖjV*5 ƎAAh9VgAhsj*{,ht9OYI,7LhBdS^3&)`Oy< S+ębkDn=t 'ei [)NBaDZЪ[!-/Vj?FcxS?DPFa=cF%pjp x8(HM_jpr:OFѱ$ؼf)'"泭l7w ш!V-r 6?ϲϰ _OQ.=҄(ÌtgSɬ_;Ȇ&p dF+P3lvT0tRN$S,[X"s=`]fpCy0όIհJiQܭ[Sw쌲*Ǚ5)4ᮮNvyw:n6([Y ԎOmN %!uye7XOJFEJ{KX-ti]YƵU˸i,Ex6F qV+<GcEywVb@_ 1Ũ0Pjj(K?"Be!e0 H6pN4%"ԣ42U&X7niHD鲮Jf@uG6@đMt&J-y- A0rxyHi0D㌋ o]{j\^MC1ofLgY* S0xmWUfDU!.83&`05$T*0sb,t-=3S2٩xmy #TGΟp9eШ|9&Nbe[4\zJD˅c!^Ł"j8Y0ۄǷP2VL/9s?Hҩ%B/s4|H' G`Q GN K.GfT2/PadM<{n+e1" P-c6?ƱšAؼ"KXv>.c.D"YŐ΂f?>$Q˳M> m?{6b5q2$"2UEgtÿ>خS3P }n-&,x\**p_K05ZTf~_0ho9NLE衣X4j9z6=F_- ٓ$RǗ.| EY,A}%*> endobj 698 0 obj << /D [696 0 R /XYZ 71 757.862 null] >> endobj 699 0 obj << /D [696 0 R /XYZ 72 652.1 null] >> endobj 700 0 obj << /D [696 0 R /XYZ 72 508.846 null] >> endobj 701 0 obj << /D [696 0 R /XYZ 72 438.663 null] >> endobj 695 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 705 0 obj << /Length 2632 /Filter /FlateDecode >> stream xZY6~_!`u38ca{ZkTH֎ X,ӢJd.x^={uq0r'a]l=L/2»(* F]Zi |hUCdޫJV,d|ŏg/~;0sq/ aAmg ?zyݘ^{/J2Vg< R >y"N$ 3,Lt_ws}TщdUY`MdZF տզdV:4Uu'Rh,slRV7ev30 ~fVܯWkwPC]5K 㘴xWa( ţkfЪ#~nYQS櫽=rcC,C[v3aQi}m;tNtJY.l~h!"+OpO؁pOZ`CmT斞w$F LU­cjjت55:YV3Aّ[j8aYUԵrI";V7F)knq]"r6u߬DVr;{t12Hnu0&{½ yz`g]tn*qi>9fBfviC32C ٱ!,*h3v\kZȯL5-GWge rQvIȶ5\RLKqb"5vScN*]Aa\J.OLF/N0Mߺd0|x|oIHFu}S;vspi6FƱhXʸآ n9d:bG'T7bGm`5VI f~zY`:-eQBobXkg3|n 3AP%71^?XX7YdN 8hbn6Q 7eG e^YB\[zvi-!P f o-%o΅ UM BhPb`S,v} D}:rU)]&'LCm+]tk$J/ ]a xxՌvn 'Szdg]ʓe}7NOB%b$0<,pm@t0.J` >DU{uMi `Q$njgb p,p;^X`,ÁˤU$HfYb`/ID 7@gL%KHY4r ܠ; 3@ث4,!:Nab rKS®o;buv/C2ݕ aɽ1PՋTS}X,Jxmr)X,&fI:J8܉R#={ULi&]QJ9˔</a=K 8,9fvg,)Qxrg $ǩp<9  R>pn]d=7pe19qA5„$A\@ayODq`Lo,  Pqn4;_:FrbZ^uFG1'S"G y$2'9i43z hC$X˽$i 6Q%,R1>j= #+mq>2@@f;= 4Ur:c.AnAs_038qSNcaZr1wEEGJw߁dV7N8'>n}@x6C@d6 2]0{Tniѽ<w"-!yzY3wp|=._)le2a ltӨ7$`WI9G)2Av x]Y¸Ɔ[w^,19_]GCs3q NZGAjkN# (t`oNJz|, XHW&V42~7w(!O2e%T21%FVZ<.!-쳖?aE4xJG|7UtX@F6p3Ap>^%AE,Ta ;fR(ώ/Q+p6=ln Hՠ$s_×#ݵZgL>m-x2b%[(&Wdq;=Y߁l*;[nZ > endobj 706 0 obj << /D [704 0 R /XYZ 71 757.862 null] >> endobj 707 0 obj << /D [704 0 R /XYZ 72 652.22 null] >> endobj 703 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 713 0 obj << /Length 2622 /Filter /FlateDecode >> stream xڥ]o6ݿBZ +(J~).HVwuF Z6+ ԐpCޏ7oonR/ $JOG Τw_z]C^qtK~fȻ)oCTX n|@5Qjho>z%@fhw^06/7?߄C"DE܄rnUұX96 k{ _PҒb--UuQNq䟇8m[wGHS ]E4U!E r$a;*/Lrw{q 3-jc^oN]MMOX=ݱm^yz)\tTcS}yH FTѷ[P$IoS5 $bv@>_UL;:R3S>4<) 48A Nb?J:z 76gT#;PN])Z+s[Q,dW.q${QM]x71d\0|8 ] U[5O z@x͢:l::H@@Dst_W6 ɘ۰( tv=2H-v 0Y- } T WksX>za8\[ R"*}:kԍ~"!T6vFF x#eyW=ڣ tq.`g˙ #;N} \b4q,l ?l.R>]<"FП&YHWp١(|f 6,Zya &-`8LSw!20: b!&x쨙ȌCWBb^8xobl[q :x>e=bC]QΝ7o1\htgn+ xsz@d- π~80$Ri5 D ר4 ^,3YvNaBi]=almhLAr+^gSn 䂜nE*#p@Dy ɜzV#e>J㹳/U .Q>Zai(}ӐKgE]}>W>- GVy4"Q8P ri%] *$Z^ {by{YD$pd+!*a3aeB " $Ƞޗ(U9& sd/t^/$\X!u_K+ZUkI'pf< p.Ϯ5MD;N|ą]va lu@ p"-\g\6KzY gXp h/dJ4b&N_MXMLs?G7ڰc/'*yGcG= }ˋ4/EaE¡ 150>j$ĜGl*=4a*\?` *ŌQ,%ygؑ@L4Պ |Pv>K>JOnN|dҽ@&\dn-w5nMށncRL t :{7-}5L'pbP#?Dk{7!,EKvSL\>Ajpdx)m6P0h%V { vY~YT2qG 2!x_lySBK`K%k '_ aqQeU"NldEdWK\U>0NcKe<\z=Mxl#ZKc^lVV[HB0_>WjiO4O4E5ToF6g08hMKJhȪeU1ؾq_C\ %TDm[{s#y㗱{3;2q3y- ]A :.u%|CBFlIMNg ]|͙HSf :72T* wrփR)VS4i > F%0EIiBB~`@ejKdO(u\M I=4U-unC@|/?SPNR _s*1M>nڒ=؉*JB LluXˇKj4RT\)0ZޔP5i]?yEZ?_L[XŁs+)~v{Wn<|@ wm4"$mkw+3~M@aIZ(RL?{PW`~:TqoAMmB R%zwƲXf4{W@zBi9ޖ}1NTRp2m@Qԯ ?Poc_T}܍URGK?_2u?t endstream endobj 712 0 obj << /Type /Page /Contents 713 0 R /Resources 711 0 R /MediaBox [0 0 612 792] /Parent 708 0 R /Group 681 0 R /Annots [ 709 0 R 710 0 R ] >> endobj 702 0 obj << /Type /XObject /Subtype /Image /Width 560 /Height 145 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 719 0 R /Length 8181 /Filter /FlateDecode >> stream xyTW]w˻u8{DEp$ DhJ5"@ NAQQPPA@fnID6TJt@v7^:uv:On.]2)* [a%Wq*$HhHnHtHze]._YtIt~9$kHkHqn]z߯薻cRڇ(#8׸6$͙08t5y>7|pœC)2_H2DbH=-'4Ӹc}Y{Np h)Z^٧gfiq UG (Ms?/>cDшsH>L?g NpErۣ_?.ꫯfΜ@[JtV~uMcC]inA/3f E8o_Wу qMo~3" O[B=7C~UEab#U^6; 0M؜@gh 4(ٟϲp yާlUS['{*Gف[ʅ[]ήc˻ux~w߾}s-]!=}lff@[J)ὃt*#o1nGa*a!l45&<6={-g3o8Dw>2ˌQNU']dah8ygStKFn6bY(\85MLh j ]ڗSl:7ϹM~3ʅLO ȶ=yP`k[ÜGQWbf/jcۂβBյ<y/6n*/ E=5^~OUEٙ%NVM$ও1 $:('<ј?hJ"qWcFέvå'jJx#gӔ.Nņ;k.oZ>erЖAb8mKʹ~b4huHڳsmjS9ˢ1Rݴ?b; so]r_2aٙ+3")ħs̫lnPx-1{BdNQNSt/yhe4`NItѨ-q7x 1ri9kBϨ/} &nO-;{nsͥh Rl]644^rGywWWUIm*[7fi]<0]o\=ߺxHXW!snx#}#mP4_ՔGX5p_eK֌dACuŒvVG akrgFc.eL)H[c[{F#oQ'>d/au?2-mv卛m޽Yb8mGseb;PoWZ}z;il[c%Y[|n1k#˦FcM%B1\Xgxw9T~ڧ6F֚3ԕ ?`d!vS|ypWi}><ЉFC& e6tw_x/6A-~Lr&c.k љShk=)hDF_+.9ިw wCΡ.\mq{;v۷:K .1n4gBcׅF^sH yq[`-fv߱gqsF;l~1v󫋎vn ֙ v3qm5t_hoɭ_J}֗-GV;[_fⱨ;=wǡ?uS/{l604(#uzצ#=o䖽?έ+oHM:y6g^__SNeddPO\QP] la5+@eD#6'xM^zURRRUUEj=LBJ֙ 9-гp hDү&qiSZ~VP1?MXN6{!cF2Hƌj-BཐIb==GGmH+b#Atm `02Zie\ GOv튎`0LnZ}||h1t=:x@ h`0Zvv6-暮G#y݄`0͵Z5]iLJ `mC`0 k׮# A`0 }z+.ȑpqj/љ=tsBWAy;@==@c:3ǎ1Fan{p֢<~.ò[?- aba={02yQh h4ڡGeE4m#!F;X@=,-hUhGG ᗕveb!2N둏s D @Ceg$֣׍Ȱ|uNpZ fjQwwo4Z6ݽq%3-E"AzDgg&8Sh Y5Kh+##z@(-@QCk@:##@Izy6͑fJFFrlH٫nh4S/jl F[a=pۼ.).EUE]mvCs|iRtҩgIeŢ"H3ҬQ d@6ڒ y95)^sȅKCIJąK l ͆-NYsTP35PcG }=)g#!U{5nسVAzUFǖSլِW*Bs*loJ=jjׯ$߻{XHA%Q:z(%P ߚLJ=OTGP)1ǰ{!>{|RFrbzƎޝ/k$^P_zems13Gmj J/yO\r@D^pANf:O)6Ȃޒ?{!99?~ă0e_AHKzp[7T3k׬Ŗټ|g)Ia*S6R;'H vaijCS(7+i z~˴l!ӦEiܺvX\_+ׯ譝XCֵ@@0/գQKQA^W_=bnhJR9-.P=,z8zСTԦP;YRkO{4w'Hm$AThB{dBXxFHGg`Մǔ%Mѣ\:$'ӦpO DyT~NG9 EMuD=a~IJ\"3Kg3c[鰱AɣGr晹œب&~$ҭ>_ݺuc:[Lvc8yk)rR^m(Iŀ: :ߞ|%e_AJIz͠'۷o8->Hic٨smHT RCy'6֣yI07'#8A"HFkCꥲwN8eIe!Vѣ޺&}NPɜp;9|;2=%1i,aJ3-9|ՊN~HǏ= ΠNvF 9=/,. )gD:g? D=TH=Bm ȆfYS6ԣΆ*H#lhb6HW6#agzf=Bm ȆeEO6ԣbQgG :ΉȊq}KzjRl\;<5Xy l ͆> stream x !iO0SB̶\J0a4 "1v Pv1 iǐng}v endstream endobj 709 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.404 121.36 417.381 133.853] /A << /S /GoTo /D (Hfootnote.12) >> >> endobj 710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [122.132 78.778 280.432 90.476] /Subtype/Link/A<> >> endobj 714 0 obj << /D [712 0 R /XYZ 71 757.862 null] >> endobj 715 0 obj << /D [712 0 R /XYZ 72 448.831 null] >> endobj 716 0 obj << /D [712 0 R /XYZ 72 420.445 null] >> endobj 717 0 obj << /D [712 0 R /XYZ 72 164.654 null] >> endobj 718 0 obj << /D [712 0 R /XYZ 86.346 92.079 null] >> endobj 711 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /XObject << /Im4 702 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 722 0 obj << /Length 2644 /Filter /FlateDecode >> stream xk۸ pvV%Q#@\{ٴrWm]dIGw3%Yz7+rH{CҎշWދ؎/n7-º][YT*m ϻZWz,Z]FgZ՚۞.۫_\Xz@ŷC'k ,qd̬|3߮z5Rw E1 ]vDHR$΢Ӳ u~\ EcfcaK7BGQ˰Ô#!cat{v q9dD'v!#_N+mmfQNˠJc>s.@nA`E`X";mbot>,_2!0[W,]:ͷS_dj8p캑-dC"-x \13h '|ھ ;Lbs?Rf/qhy0}?:ҡ5r_\,Ѕq7SAc7@T1BnΘ`Vaf6!d4Lg$9Hh`ZG0ozu-4o&:d!`#ȹNg{a<,xݺ%XƤ{(ǟa~A#e&I^|/^okOLI*i {b[H0y䪰A9mv{!nQ)js/xʎԧ88A*|i Qr̄qgƖd)3d/Zhc7*֭8N]d9Ð'1*B JoڌBYMn :$URS Y liT cvL26@_t0[&-qGFPz8#0Hj91j(9]4i]MT{A}j*u %l,hNnإTg|M~P1*!4"v:窏tts jfuҚO=6 F`fЈ! d fKRB')5U/E%;ȎH`c n nN_mFqEQÿ"])18[@kã9hW;8%ɟDLV!?hP=MJɛ1GNC(v~^몙~t/Q٭} Pv*D ^ȅ|uߕP"{2ʅ3;'b ǂrϸVg?h&*0DB!O:E3RQd\WXw\8xA^ e3/&_U>z7Q%܅y9\ТG<_E U6t.`qsnLLnM-`P3;ZLd)&bC54;1B۴ѹ{[ril}k48Wt1?>ַ;*F b*V6Lxm"@(O|@G 5t fz.㵯t7 yIቈ46ʉ=Ҿ̡Cko냞iǭfw]tv6j}Wp[e9f) |='mݜ n$ŘxG ; gH.TeV?q8ܹs$@.{|} :vޠ҇3@8|1dUzzS&ы6"Y')NUf=*/Yb2Y/I+ endstream endobj 721 0 obj << /Type /Page /Contents 722 0 R /Resources 720 0 R /MediaBox [0 0 612 792] /Parent 708 0 R >> endobj 723 0 obj << /D [721 0 R /XYZ 71 757.862 null] >> endobj 724 0 obj << /D [721 0 R /XYZ 72 489.604 null] >> endobj 720 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 728 0 obj << /Length 1581 /Filter /FlateDecode >> stream xZo6_! (*5KR(Ú] a>4L,LI;a;$ "Ŝ;qc`t-u yumٞeLgs:va'f"UA<&\sE2_Go jq̍r 6@o`dyo- qG_zcŻg!F<\܉l{ȭ708`PF݉ 1v9q/9^Ral>UҢ\h#;pȎ]X`p)Kg"m?$v05&af(=1< cUJM8Z7 J5iYi0Yw8ux`ftiKbq̆1NZvzu+cB1`u r(Fx"jbRMĝ~#Pqaj 疾v2o8*IvE{MH%fg:U!׶G/ozGg]tw?ύ \WSԎaLaXd>8;m` n:f*_Ï(ܓPMC'-gPQMnA9,x=3& 6|lj0Y1պpj3_|d;e ejOtYNaFA}>e>FG@>{Me_):-Vp5_xaI_< FI-uxĈgXo*(CKkA|`~rTy;PlN_$`G.t+n(O{﹎dGW=62OJ,vF'Ni:e7HCd2&v3^;/hCCKNw}soX,,1o{|M߯(*pCYBS]P}ЌhۢvE;r!cw O҇᲻cI&zƐOMl:]!Oa-D@Eן瘗Z (tۊP)̔ "_&.hQx?|:)KHC8+A"_$zUŊ> endobj 725 0 obj << /Type /XObject /Subtype /Image /Width 560 /Height 216 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 730 0 R /Length 12140 /Filter /FlateDecode >> stream xXMA$&kT4*h[l ĮIƊأ(vKc4ֈһ.,Wy0sٝa)>g=s3|̮{ZxAst@ }gї)7@KѐݐPY%8ywgu -'BBҙoo_@S`ii)\:jZ(BrzSrHo-YdCdF_뮸_v}SY,Uu.qz߼ UF~k?Y&3"w$pš~ĭ @B턿P?6L,to UF~kDؑdF$3\G@ϩMœ[Qm]hhκ)*=O&So:5"9Ekk׶VdrHkDIdFDQG&qa琜軛c8g%ܩW9 C&tȔ4Ld{hr^o:5"V~B :Uغ9j[#3~r}[as.L KO~-8kc ZYY}'N fJ=k1<㗲<ųʊLM @<(/K;w6|eճL S̥5Ѥ'JsҪ++O~WQmvP5l*gɁW7FsVO4 ;lQo:5" jHkFQ-O˅i!a8N,n4ENÇO՜F{n~СLI^up-wJ |8bW|=0]Ιf ' xp={꥟=O~;gF(qh16q_N%/=*JL:tr5g76!>/{Ir`S#"mlLw`2 OMZ#|v}QC4rw/iSvJWUcUЛWgOQK=G-TiFXeF'#^AUzgzpeuSRIc{\&9iL1XZmrtԾ{G7U+>k1rWzeRɆBj9"MU-3v{&zw72(uS#"F7!֚IkTQm>񣨳v[ra)^幼*pGU*Rݫ|V/ ݜ@N=SMOw[iG"Waz_\9Ѫ xS2rS񦘊\=;jmnHSI~())ʬ__4"SNz˲œw\7PujDc:-Gfj:+vT[#l4a(϶Ϲ0T1ͪggFVFUXu~z՟Ӫ&Ve˘@$KʬDp`)UxMѢfxP}@*_`2lL3aBM瓾{}~PEPvxM1\\5hޘOh1_A=tyA6um%>3d<ܤ=ަE^E2"MmoʗFec^&{:G^yo)c;+Lթvd^oՊLiQBv7KDŜt<W._ȯv}{_~e׮]¼X`n26d<={Hka)..e6nmɮ9WKv7uUsUv )?,41Y&p!jm^mȢQ.4 Kz]thZo:5[#o܏{8y,%Y?\]vߎ;n:pS$::k"M)F_`i6ֈ'Cm 3OՕfdd[X>kRM(2vy; UF~kð~}Q\{9Xj ?7Қ6G/ǑBƏ~ dFVgleR "3##~~t̅_4ƅ~3T|:KeGUAA-]bn]>PȔ4U(R* ?Aiɏi|LZ'Be$~hA Hȏ>"2⭒$~? HK~ṯZ͈JX?lժoѷo .G5RޣW999eddx{{7G5)n]w.Hȏf̘o>!733{|QFS#G:vH)ccGݺuO?444)VQQv֭[6mZ^^[o Wt_}ǏgaŔ)..^`7|C^nΝ?Ν[kP9sp6mv ? HC?JO=~Ff?RG4JR!% pss+**Ylٙ|ҤI)))d%SLanjbbȑ#% M4/ZneeT*ů•KtԮPlmmǎP(r9]wl16k֬658nܸtBGiGޏY3bkV^^^kxkؙ<##RL2L|2>L&*\}ᇇ"3ybֶmۘ&bccttt4M B#4^W\\+C9#;xyy <_XyjBdLܧjBՅ•YvWTT0irXXk~A~iсMKs<{,//5#Tfy兮VFFFB#zG5jG|nsGA?j\?fGfff߯{w\BSNm߾}رqqq 6mBW:**Ņ};H+V5ѣWZ^n>Ϗ u{ԾR*T~AQDDĉ[loӇV+Lk:wkuȑ#u;vo_ݻՖ WgΜڵ+166uo勊͛j`brvbG7gΜZM?| ~2 AZ#́WAnqyYiYIqiqQIQAqa~QA^a~NAnv~NV^vFn2'S!#j  G#A~A?'| A׏"BCÃÂ}> {8#nHs?L(ATW?h)D렬 yj,Y.IHK&FK"c&F`}ː!C|VZM6MO2GGÇzjNNN^^G#G/y]QQ[o%2j{̙3U+Vlْ@Pd@սT#ގء .qܸq~N|B[N0AT* O mGAZtDYp1;A?ҙ1ZP[*MԚwV4Lex\j%**J(~ ;A?(/#?*+-!?,-) m,GB[ mi'WTWu[ЏءQEy9G#ƏJG~~o6܏k۶xtT3v ڃg4bҴ&v t?lxx8d+W:thHh=j‚̬֝ڰaèQ$ m׷o_{{{$ɓ' ;Au: .|ǴR044={6M #-h'c۱c믿 mUYYٲeZjEn.cڽx[Ӈ Ihء <{/)d"ZjAĵ|,\>~UV :K#'''CC÷~Ʀ~A5#?jٲ%~ я,# <; `n]\t8GAzG/y-[nOGAje=SMϙ=w_ۺukc?>ȞᰵKFFF ϓKyB}-'Ml۶mCCsqO)s<^."4k׮) 1Aj?At҅wSǎ'<$ۯg-&FD>57nY+$˖̰wBʔ4YU1~t#G[̙3e z5ױRh;ۣG!3 f^ݻ$.MHƤ2oPS-:QF/YdĈ#A:2w,'M$C!c:i,uI+$Z9b{~k⹳=g}h4k \??*,,T >~úٳl^׭Q:y"%!&+]ӡIk26VHSGε*~|5uiD/]Bv;K Oϱ줉qQaU??ر-djڊnStxaͿ󣠠Ν;PAy$m۶LM| sO?_W._d:n|n ]:'LztqqTIG>Сb?>AP,'MdPt9z/dFU؏A?ҀLi~N~o߾vEDDa?>Gel>C 7ЏA#_ j~4iOhWWgߓ ǁ>>vG؏ H{~T⢒|Z.Њ)?'MYJZ7egȱ>~|A#< GA#A~?ҪA\?A=?zrߣ~ۅ? ~G#A&G؏A?jj~AG؏A?j ~| a?>GG؏ !H!a?>ACG#qa?>G#A3?!?`"+?'#]Bf%JYJ4I!IHK G# ~T)G#A#=񣨨(KKVZ}p+Ahw[~ ?R8###''ooo&#ZMlɚ$ $~G3f`Id;MvƎ۝Uruu ۷?~xDz^Nڃ He/~Af4!Ix^֏hJjC*۝& mcN*\\t<"99yj,"^W {A?RD|Ϗ^SWHU4ٕOh;nwBW?2Lׯh??GG#&}7^:v:\xiy:l\WSRT@ДK/M4 Ï;n ƽ_SG r )-W:{&ar%ax׌G<z Pq <ْI(?.li$G\?*!(8L΀Gy9tI&Ѹ~i5mj [<ߚe-'1 Ҥ)+WCVVreNlٲ ֵV=ZD#QpO.]ؗ)&ݽE(7.&,]]DXhnVFrBܹ?Oszf{uUh PI4͞egS!&m۶ٸȧL>NЛOZO?ϧt8pGL y5v;ujӦt?zwD”̏d@ ;j:RnXsFFmfʹQ$*G]tQ{yjRJB̊eKmfX61}ڔР4I-G1j:su˦/~qOɉ̛߲g̈~ cFByJL&I]jfϚrgd(dQO}kVMhAmn6~5l16bukU߸aEG&'\nmCިSocҔ /?$&ш~d``LyMYHdy 66wb"c"Bkx@hԦqϞv+iޮYR2X|LΥg~8@f$2ԭ[hPGlL:$П&S&U,j܏{i2]4Hܽ5r{Y3T-BdLBՅe,sg7ɡ{[-Çqo?x\N8GI}]Ej"KO-6WN2E-t!ᰇ|?aQe9hϏ٥T:y"%!&+]~ԣG05Oy兮R?-&0 x&nͤk?'D*e)qQY^1ޡZpKjw5 [zLQm2jP6 ńIF>59lxH N#QW.]~9վ];?/wdΟ9%Ka5n9&Me5J$\:VIjS,'ZDĄ]^e&ljڙjZA^|I{&j$ד\n6qkӘD##'ӦNnCC֟@&??cz+ջW/G m=[nmҿUGDMpR \9ObI0W}ma!̩۶m[3V{O>~cلZ\~O?Zϫ-/K_85f*;kf46\|wڷXk6돻]K:Шi}'l`ҿߩ~T3G )͑i7KGYRb LGoZG2#5Ѥ@I-GJ9AatGt変L~ $ ~IJz,]<x+^uJK0a CbG yn[2=#-U#45hʥ'RG >mHkFsr:l!5).*,Έ c7h??G=w~TQ^h<Ϗ??Gqn.箟=~̱W#Ƌh MLcx DѨ%ńv>di4^5h)~Wi4^5h) #c#^ن Fv]D~QalÅKF4:E!~tq}x{'Lx"Xt~Anvqa@Q#F?zXNBߠQ$hEvphԈQh4Џ3 h sNA!6#30 W DC;~$7Dg`Dss @4GYJyE\EdַP4h ?*7Df8-[h% Mm_Et֯P4h 1?7ff8F(h"~T~^L#&5d ݏ MD mkD :dOTæ}wh C:t`hhŐ!C h6<4Ct9JacؤyWk(hefNʤDxhk.Wzp5%))TH}߸-Al y5g˃5V? ‹IFYQ^yrB^$/1ZWHSn]s\sbE-? z]1h/5sNV;g:7uk7w֕^A#ݿwSOLa6m&%Ű'elܺuAgg(VԩSv6mφuk;wldfLLaSZvͬuصsy蛯fh.~㕩T[ewsܜb'lx//7d*ӚRB|ܻUU4LeYiip_poV^J(tGqltdRT 񬬬 U+j9ϛn Sяs2 -b#9tHLf 4󱻶{"27pq1jOJL&I]&[v3bRo&ufEG&'\tjon6 ˥) _F`4ԢlfĤ ׯ[{Q)Л^+(IeeeD|M~:ggȥ;׋ ܾqFJERV34BL%E/+# w֍i%u^\T +jb%t5;?zwi:400`gJ%̌7@x#UK\J v)ql>ݻ^EZF4!s=Z  %2@Rs#4Q y7GDJ33L2{Ԫ(/))/OU.& ,UBBc=e7/+ZF_Iu@Owro'y*v^4/#-Et)<ğC]tfvhugmEdnH4@r1|{L;|n1L\.I5BnŝÅi"PڮD&M:7ܜnNbl$or LNVE5ޏ4-yAAkEU/eB~cC?tsSHJ}aI~$*63vlLk&]3HΟ}v0ov͌=v=N91&R)KIbF=~^Fh98& *Y)I{=(h"~nR| 'b] G4IG|?OʧvR y|GGn1OShtIqɜ})Й:|q1Q.+-LO`?/y-߼期m?ʔK{NatIܺqc?uv!x?% 0>:LOiSS4gNQ&'3fkƏdRl䪕˘LMfFt4hEmWZXń`*VgF#"*<)W.\Df\z-+!>l~x޼L|<*.,(m~JmnvFxh[..W/ݻu#:"eB~$>|i9 %#_y-EL-Q!57^(A쩚źu}#:7e_OS,۵аuן gOqo޽z:5wC$i:oOƽLZ[mߺŸg֭ L;/ji:PEmWZH5_3?w,9^gF(]҈f=%=Edi*_YYQB~a%谱:)27n4TGNMZ9VUUG)7+eBѨ,BŸLe(8FFb30фQmL/)Mʏ#DՈeK h ?zYрaF4tG2}CtF4n4jD~L"30h9J!2#6(Co!4f"30hhŏR}ClF4 9'/;C D~рaF4^I?~xzDxij#h BXt~BWdh4jDѨS4Gn7.G*|lThhCr2wMQh4ďbn]=6> stream xұ 40>!̱i.%@F0~F.~!b.!-_ڱǓ; endstream endobj 729 0 obj << /D [727 0 R /XYZ 71 757.862 null] >> endobj 726 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F65 185 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im5 725 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 735 0 obj << /Length 3354 /Filter /FlateDecode >> stream xڕZKϯPU.Tܛc]qqfǕHJ" |ٽ @n_7&؝v>=Nb;D1$L03bOuz}q'Ul~)L?pvjhIo3ͺ8\XϤFZ*MOgnm"Ψٺ8uѪ g[T͉?k?FQ?9p& jy^y톞?-υ:IS"842n6^_C\m?vi<*U(5vנ5J@n UgY̙};,$^=]ṻrWk-yƋh_=r[63(~{;T^VOj"dfK/2]Ł# Y?rcUDz8=^ah|‰^U, USuوnbFn 'TPvG:МՕz窖[e$ԕVө n43e/)}R~$-]-k]]7be$+z;sr26܆حNYskrL L궽.}^wcr(\ IV m[։2a~vɵkOLzZBQ!c7R\I3JI<L%6(` R HqںF8~xij̶5 =PThRaɅn3XMw} R\w0lnι-ԥg\X1]5<-.W;o ?rĤWKYk982MvoF}] GK61xn8iw'Gg뙫7ʭagDN_JR`724Ѫw2\ܭdmg4o$6v„KcUíŁg^VnbC%&% eOd ߕ+r;ڑPfT,~,64!tmP2#Oψ._G49[W>ۂj3G\8u|n&i~XNgaxI9|2[Cmapl Vb{4y!V_ SbF8;+3u.V@fxS (Ƒr"0+J| v{6 v,=µh'nzs ¢g}T=8ta"D{H_RdzLaKH[@~t- Ib Yl  V>ۮE~qm|U 6ίuwaKp_,|c_읉k؍pIY~{PK#L57Z4r>ZC }#;ς/:ShPp _% Qs-є4R]qO(qsxk9Ǭj/$9HeQG67Ρ~%eg l+,,-\4r% ae^=3PH O*^Ja~9yL3Ȱq K\K DF2Mrλdt=73JO=u@fRljd(gƽbi gy4z|rcMۧGxg?J=ae4fa OUJUX5N4V?V?oyr=w~VCZ|:b~^[.޿]uIҁIބ5TI4o N0y&ʒ0|`h|f `T HBq"c zh2d?∪8۷kCa򖨾ݮkr Q)BU@~oǺ}ISY'ypї׫1ӡb endstream endobj 734 0 obj << /Type /Page /Contents 735 0 R /Resources 733 0 R /MediaBox [0 0 612 792] /Parent 708 0 R /Annots [ 731 0 R 732 0 R ] >> endobj 731 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.895 316.557 190.873 328.861] /A << /S /GoTo /D (Hfootnote.13) >> >> endobj 732 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [110.615 112.461 219.31 123.997] /Subtype/Link/A<> >> endobj 736 0 obj << /D [734 0 R /XYZ 71 757.862 null] >> endobj 737 0 obj << /D [734 0 R /XYZ 72 451.507 null] >> endobj 738 0 obj << /D [734 0 R /XYZ 72 303.616 null] >> endobj 739 0 obj << /D [734 0 R /XYZ 86.346 125.762 null] >> endobj 733 0 obj << /Font << /F28 123 0 R /F62 183 0 R /F31 125 0 R /F29 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 742 0 obj << /Length 1722 /Filter /FlateDecode >> stream xZn8}Wه@uW>ӦHڬm t i[,;%EIVdV  ;oΟ!$M. bŔk"|Z=Cȉ^_ҍ8`o7AB9kaρ`3::* ]ԅ(LHGAihy—_#2zj@CP+Y1S'B4\D&4 mDnXJN(Fsc'&@~f@eZbN 3i Uˈ9)V&U:}t|GLB5,<4- pɋޠd|&s ):PtAY\:U{@fKsuv7d=}R}Ymi =@ 6g U&O={Hw$%YЛ=Wy8hh1Tyk19W^!ozYO'N-[c.\Z۬ܣی{Go،u1. út7-v_2Ih~:;XAКdqQqEQ߾GvA R'Yueen|>-Qln/>{[4Mگ[7G#N4Յ.Z; UooJcӀIS֪*$`RU .[Azh kCS^dkE%`3=t$?mm-mW՛GlVlѶY d4SʵMu6֬ͷwZ[W>b7W^J2-%_N"O {2bbI;tdO7%*&sD .Y8;9UicS!tIU cPr~Ig3ԍӹo1ɓ M,w[JoԻr^5KVT a?N(B-aj:''K䆸, e DMdଢ଼I4oXs|0cxG 0:V<gJ1w3?Uih5Yo{J왿5*@ҎZzV!I=yMh%fez InZ=SuȂɰNXOU endstream endobj 741 0 obj << /Type /Page /Contents 742 0 R /Resources 740 0 R /MediaBox [0 0 612 792] /Parent 708 0 R >> endobj 743 0 obj << /D [741 0 R /XYZ 71 757.862 null] >> endobj 740 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F65 185 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 748 0 obj << /Length 2010 /Filter /FlateDecode >> stream xn6=_mRDIؗb{9 )lѱ"4;!mIs &5ƹH!&z8 6b>ϟKpSw8ng "PJVLrWf}2bgIx[zso0lP3zFt`]"wsP  iTCq0MǯG$xo]Y=#"rVHdq^}V6# ה|Jέ 'C Dw4s1.8% ғj4߇lKagҨ[UAw-U]6if4,HW~ѳO?n֏`+`p I݃E~U?{''Ph&Pvx1qwTBy@8]?6hUJku{oZ-8'zԻ}]nx \4%k{< #Yu{NcMep|{C{,)'Jν9 ϼ䍞,)/F$>VLL1k}ʼְ4C[UBi(_ØCNN1H`d`rX'$ڲV%ӘYNއ6ʇGj⥀7AI a+}P)Ec P9Ui[֍`)iLQAilY |}!VRct6T ΋r1QB^</(BѱK `b&@` X/I\Ѐ%B+Ob㔫~Rӌ'"\TQb존nPO)NGX2^&R|MIP p"λt>PO"!H%!쇾ThؕKdicL3z]IUcS>6cc*:;s#':1b3PK]v|*<9ퟝ]cxf̸;ݝJvI>e|ꡞ8!:j͌rR]G72pفO8;;¹Anu6uz2\jVw6)7z%s.];+"hm0}kO{ FE 9+:yi00KC.몬ۥdP.̼e` . TYt`e^M;VO4ux i6[_ysC"cᴭ?$E'H r V: Ca LЛjY`E%"'xU}w}<^ Np޶(1D 8Uq|4ӌA ĶP/CHI% xb:<yr=_̮F A[u(u(, K0c endstream endobj 747 0 obj << /Type /Page /Contents 748 0 R /Resources 746 0 R /MediaBox [0 0 612 792] /Parent 751 0 R /Group 681 0 R /Annots [ 745 0 R ] >> endobj 744 0 obj << /Type /XObject /Subtype /Image /Width 410 /Height 329 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 752 0 R /Length 21577 /Filter /FlateDecode >> stream x TOފo{oIL~ը3jF3ʤ<(FqBdQPddCm4MS{zUWWs9ɬ? %%% 5hG1~-syu&)))*0XYA,7Щ:r_-JOYjyF+)Tz~i RRR5ӆuQ?2UOmWU*>k]pl))~?>ѝs*+nG Z @ (e;V!Q"}/))6$x[v:(lsTvf 9MEH$]ձ Ohh}W|qKցIYNX;賷+=:}#OràJ"k5i徇]y%Y~,m-P j=mƏ`Ę+@2(?dWw*+nG B[i4 >e?$H۠dB8~,ܪDoҎN/+9no/%ӂNb|zUA1ԯSEʥ1rcAP 6gخ,{TЭ 7N7|p?c{Ζ 2Ev>4VqPKٯLqqQɟ$nKdKQTs'OgM4|ݴO}4w/Cũ=]2_N1F(IeB]"miƦxX~4E-x W\"r7LpcҼ>2*<,`ɟ " jTSS#^<\r)?֨3^V#Gsb0A7J˳Fm-'ɖ> ;q*?pWaTS$l v 4g' Mv mh<2N.0RZpjk븣_qpӟq}#WιyO+W]_)s;bUnPU[Aze{&*C3OnkFƇeaaOm6擁ZoG>O:6ɖ> (\i'س<:n)%j]_TväpP2xtxR$H۠dB^Y5Y؍I+|ζʷxovn;qܦu^ s;b2? ŷPm76ǪiC D:vm]j öi(3Z78>o'l3u/Ϧ_9}2;+X&[A!ҫ{n;j]VRwFRqjO}/gK0i ^Ÿt>e+I#UAhPd[iv6sie}L[b?v.'aGhԺ[֭a}g._v|\,s;b[$ގ /^ϦhVF޶lYk[iSÃ3[q?o52&gEy)\euj/({j'M uUY7.2$ ұM5RICqv)ߍ8ːS{~>[.E ?\CРW׎i}.~hi[Ѱj;5o~Ŷ+/-ݼqݻw8qNڡm4?َ2T1US> ǒ[a+'ß>q1=tLP^2jɠޙ:mFuQ p_n ]7cWrcilki'2p7&#9é,?v~KajC?*s1nG j mߜmo'A#},}Ҋ4as+;fs_3{y.]V...XvyfP v;|ӌafn3lۜ*Ǿ`8m>L^?Qb2Bn8kعed %~˗gr2dTs0M3 ]L\n,m-sM{Ab37,lTN?a*+nG چ[ivvŭ_IkkwҳgU n7Tsɇruu_knggg//l\)s;64'(Rq3o _9Le`AoxJ)߯=VID%VE]2~ 3}hhǴgUoen'xpZt7ovQu%hѳy)))j %%%-i&sT(lY]QBJJJ~PF4#%%%HIIIF3DDeEEEEhH* hHD3e ьhFBBBB4#!!!HHHf$$$$D3 ьhFBBB4#!!!!HHHfZE3#G ]`HBB4{׬`FBB4 U, NЬCd'CC_|qРA?./^`&!!quu%uʝ`g@o`g-:_/R,Yhmlmm=` jXXXr7U<}͈fzK3lښEL%ẊwN@C3M,)ذ ooLiƣ, @Oqɪڵ\V=#@8W-Y-\3cLns bHZÇxLh=ʍp?aayXE_֮ex6)+ccTO{fD3Y}=la7ҮOqTv`G=l/把TҒ!ͤ#ރY0my"a*j8VVD3l.:Z=U4K%ge>q@4#͞+b1̈f22r^xAaaa'NիWϞ=U/g6ݸ,4$!'g  T.e.5\EL?ikYYYٳg?Csss}ud w`s+Wr8rDuܸTu? ])B.6vB%ѬG=z+8 {M K{@mh*UV,aa܅ jJc#m0dҲv,LL#̝+< ~~TOh}[OKb"krħ­[͔Y>}cWWW8YXX,gSV-q:h& K"WNN*c~u5PMP$ܜh$LLL{LMM}78{{lGmDVbЬuj'EEL9f"dpLZpfС}FFF=[d„ |ޯ}"VBfx^Dz,\2D3= {7'\Spx8pyٰ|Y)ьhڲULEf6b-"aZXooaQ,*.B4#`01f=ߟMM'hVT$t` ьh$<-r{4ew"K4#- &>^6nTڊAtn~|9oȉpcfD#MM9^BBXs2."FF:8۫lLʵgŶض6woƶV||:N)(^hUqwgE>Z[Hܺ7o&X$|[ŦסClεNz eee>~y9tbXl~=J`e%KT 'OvnPhKŅU1%$w%=kgg%&rZh&%AbbxOIa F.]8RE=iƾx"I7A'p |I+Fg~fVePډfZE e[leKzz,{dF•(3f8UyV4': + F*NPr"/Ɠ^μAO^Ǐ33 ƘcE!fx1 >WKݹ5hj^gDCYYOXifuh( "x!nۦ.0Y|ZY\r[X(fM8W^={422׶״S4,QFĕg?~~uZm8 (wMA3&&K0/wxeoZ~Wf*OUM zMx133]\.ͺ 3XMʕ2",`5IR'9;;qgTV2/]Ycf4 g~O^b "gBC/8-iB4o߾[~Ġײ1yҫ^\zKQQt?^Ć7Y$K/$U\iMΉ>5iL<7mB1X͎׆}Xz'ңG888_ ۋ/8h OOOǛo+oZKh0@CX}f`0y\yAJFFf{~0K.OrnB:9Zv&)j;%DNlAAA ,߿G&$0[qWΝ3q"3̫fQoYL[}X|Q`̈́2\/_f y kH= e*آD3^Tp1 MfGtQ11aoI)(99lA93ݹZJ:$4ә!zsjd.û_Xׯ T?{Vm<2@;5uMR͉f^SSS,7kk8 f%+Ejp?aYv >oF.O+64 cc6SC4ʹs ŧN1ץGۻMXow`HFe{_vJLwٻ|9M-rK5z4(/D3-_-`nέ] &H׻DnVlm&CŞԩ;1\)k÷fb4`^jC)Ŋh+sv2nfesZ+}1{ewv=h(۶55Tpm2ΎYҟb;ۛhs50x5M3)ɬJsˆv!d,kDK IKc QD~W"4$O33FoxX:@63'񾧍MWVjdaW@mmY+?"9l@ -)@4}zxxnnnS=Ql@3=loeZ"kKI1έ5.2ոR!<~60)[8ՕgehK=BBB`|U^55H5O3@?ՁPT ֘HhҡM2l @ #Y?iCD֭iD3๹4LdV2ʕ bxhTe% i` N㙡/~N4*ݝ?vuu_<,,,I*M6kQֹعFI'DinfKJbNk[ /P[+ꚤޙ &&&ҍJ^ ,(z=fQdYq1h^S? û=qx 522"&LW:t Ġكl@|Iae dddasq< iŁ+dLgaYBKKx9v D 98pWK>X+3Gfj\¬,صbER*$WYgϲ#|ذ-WTԉ:L=4`[̟Fņ>x[RVڊ7ofodz!f,3XX7Nt4Փ" l+:2D3i)ggsv$$zdz|T.m))D3ai͘&UUQ#!QY_lLX55|GGWOB>aO FYLFɓh&otʔձ~p6V+?rRKV~AvMKYSI67&ˑիQf]YUùs#ܹsl&|(ƲC>xq1Erɉ %Z_g@۹x֭Yq NPfrST3VZ5SHxv~Dwﲮv|#iOiSIϞp(ulh=l`~xݰ@NfY^/S(aJG4Of>£(eq2W[%ML.\<=YE+fmcz:ktUYRRXά_V $QF=_Y\*˕lQp0w먒fJog$ڂ'B**XqU d5ʧh&Y@_(*’v-{7kGBɁ)BpCu̝V Tf6|>KחnnUHl{ 3he C3t\ICh54R(36t.Ni6ьh&j[իl lEZDTsd S͈f |'8ccT-)6y# 2ZhF4԰&;%P'Oؚxҝ'fD3uYb"E+|PZ˥{͈f*HRPh;m|2 6q^z_^ctOi?>2oo6xF^,gzf݇ffffһ˙˥Yw͞>e%X "=s ]۷3Fg^gfJJpFiTjͺ׏h&9$D3610ulZ[wT̬uj}=U< X>]D3H=BBB`|K3o/A<==#GX L`"0lNrߺ&H?ɓܜ9l~CfCŋ-XM3{UbH"AA HLd#tE,,duwg.fI6)ch&,dTp/ MfGG\OO1 6\کSrV™Y,ia>,528,6ëtvfKOXCc,uikzgnnNt/\:88r0`fkL4%qqh9xݎOXild(Cb>ysf̶MlkM{;`Z[l3YhhQ0aСCݻ7!C:tHh T{?q..fEq ӿWqs(EΜhѧ*Kjlx7ihFgi:}5O4SҘEtn…d//gtFn^b1ֈffjt4ьhc59sr{JuP^ H,^3Pp͒%lJv1X7 uCb4j [O?fmz<ɦ&$:)ݻڸTBjmmٸ_]hF47kd2aiDJJd+:s[lζ0\XÔlm۞ۼIqD3 ѣPz=A;wcn.kPX3ňq֬NIIl #KF$$%[.fD3#Q5"lիUlÇ3X]-|ÙԞGmݪʍ\F3F5oWWGdg͈fk]10qa܅ѫ~aCfD35R,,Ϟr`Ş;6gbPС%v xI?ԶO %QƢfwS6rl6R\ܸV%eF:gLaB fqH|ьh&TTsiM siQgi)֨x{{eUٔ1pv@\r0Ofm ۾Mh.]D3م l|:ŤFiXP;;ϭ &TUaI47Y fflx:73MJbjN7D3="RR%ϟgލXpe1Z!lkvΰ#ܽ'/\EEH8\ >hmiZԳ OשD3ݥYx8[K9t 4[0:۳G,[TAV3#zE)-e9sE-355BK4#))!!RU†e#"Ժd!R\rzyz͖P}Ǯp##-2aˀh&n3ʂ>=I Nww'YZQGEu#8ʓhF4#-BE~e9K.mtE4#4"6 <- Lٳvi}})$D3n aʊwOPZ*D3LXp!-D3Llrw^Q 55ܴiB6vf4NhF4!9sM~3hp,9+T fhF4#uEϓ')^㓹"#A$"B^D3L$ oU'Ypm@B4#<}ʦ' iB:[o4͈f:!4wLm(o+IIZa͈fD35Hn.[+%‰]FSG b͈fD35Huu6*a}j]姛>K)͈fD3]f7gZ>/K4#tHTOдjCQ%͈fD3iyspP D3ьh Jsse|Rd%ьhCjԕQ=;[l;u;y ьh3R_o].1|fHfD3ݒ$U\c놁cghH j^s = !,...#G|ڻ6(ZN35'Hvf[[ OԹ߇: c3Vqׯ""t$i^{5++v os:"mmGI*rd$w(~=k^Lݴ0nfle&;:D]fC3~S9YMeL_4h'ьhF #./^`Kο+\w5J΄QvAP !6wH3h$_+;wm֡mlmm=`˗/hJvs1tP lmm{ݣG!C۫6CTQ<$,,lĉzٳ'Uī0IWRTXEg>C2333449{~hnnT)$Q^JҒ4Sy8Sշo_ͭ_~I29:L啮.-z0IL|䐐888_ՓeUsvu$+])]ZRfrsګ.]L ٥C4p8SէOwwwzS] UWUO^i[Rٝ56;C211n555UOzWa(ttiIMiuj8ǡC!UFFF=[d„ |DnͮDy+KKjެoFBBͅhFBBB4#HHHHf$$$$D3ьhFBBBB4#!!!!͔YTTT v2HHHHGJHIIfD3RRRR))))ьh&2q=|]ԶԩIf7b/FTKH{p8R^^ua~{YYUUU]/T\.JKKb5UV ~hF4ofrfxF\_F#~mɱ1fWtt{S?ԩS'qk fY|\OuY6PM5:?rԌm?窍f&D3RRD#?^ ]5!)g?wM{ 6ҸK~S愆`gpp?'XKOOuی uҥֈ]K11(4M袂kLv_pYC 9rf@_'D3RiV}ݓ|>d{GF*Zg%x[]r+cyCBB̶pkr5}]H5%6~jq=ZeϿO[~_9~wׄw7$l45m͇ (kZ&.ٓ󭕕$E6m)͈f*,i(U?1P#4mh`)}4 xbbbojy _K\EDDH[M5%"##xxsq)Yi+%`0z4/,]v/űfTkLGYՆM,8Np1֭[ׂц#2.nff|]jdy;g#F,G[)WuE}/yslyQY7Yyw0זls@O}FRuuϟ?Ǝ޲#%%.v5PC(Cdp% _%mh*5M\WoWrr򁃂Ih&xQ|VYLzwcIq8(NeL{nsԆ;aǮ2VY뤬?Wf NÇ;~ڿdذa}ƛZ)mŎw[t`=os.;NX%G,2cπ)Kfݙffo/~6owݟ]PPz0˩ug4uK `3// aGm8 7@@浩fΝ3~fr{.Cq!F>~ƋTsRLX$(K9w%+7,#'$-+$-tRVh!dg3v;R>M d_oNsYI3TR~\,Yz4Vcׅ~Y X" {9۴ΆNc`rYwYjuW_2otqڵZ[h}h) 4%%)߻9Nz HW&ll-m3r,.Y_qG\N?䄸=wmu̙NťXygSX<{-$:4_<>&Ir7B0::9fI. @ٷK=?e-)>zwJUw_4Z{J_mhߖ$uO%-7X[suݶHIMM}Y]]c]j*Θ}hJK(̇Hb/VP99&mצ|e@~q}4L᪍'7f?qy&⪨Lʶm30Mfˉ]2 5)6PJޱ4仮I. [6^jKtRG7 rv:~h'8p>bk⠯?lۓ۞K{8~S@3엍P {YN_Јfݙf<m߰Uͳy1̘\78o2#P^\=o1w|m(т2'iii۲`/E+K;Xmv,v6ىG>7# .H*++m4I0>ߡzÕPtvT-|̘80@536*{qiդ\}D=h+||8_gz6n+w޼yV&nnn=.d֎3k߯ *4٥ĀxwH{O9= D44ˈZFD8t`ٳׯ_9~*py'gKA^^zzzlll ̀Om7o~Ne8X$̀eɓ'(m3 PB\2_[=2eqzl\hKi=PAg0jJ܇bVoZziG37>?ré8}vbOm\HmbZVVü$2wu۬7?DžR6K1!d|&osN%!\nI6oʺZLjV4@ @qwܮ8c堽_;9e j٫; I,{ooҁ5~ Wo}5Sa<;wa~XhPlmo8{5Pˈfݓf^^(ϸx՚#Gz9q[S_c+hV1G0kAU64bͺmٲ?x!c6ưʞofǝix3--$6 :cg/;}$[˩o|kL4l츍qCNf Ώmk~Ci8TVVi! `hKI2 \?忾U2.X.\q1x}]Kgv3fF޼QP k ބn !8rSG}pi˜('mQfDӽN#U (y}ύȃ>]yfD3'8e7=򔚠oάY mȤ>0dOf 3ˀ|"Ʒb[aGgqqqO6L$^eO<٩:/xIY'W__ : /|&{Ӯ{PפN{yyt;=h_4sk{UWW@f;9pځW| ;r?wYT%q}=x4˸7bNV/gR(2 >f?ͺ3͖]J%s"E1MzC_CAl3s|XM.OI"~xW7C\2<4T9NYYJ IРIG&ed6E4{WA/Md?N;?(]ݶvpT߷b%muY;YνG44w撹ԆOqFWw6??a\o%/o{FFFמK1޵Sq)3MHm)kfmC3p֭[-f4l|YYlٲܼ":hfÆdԄ& bm`N7 clĄ8!dd$.&OWRf؆+i?1$=&޾={pl^aÈfr:??u_a:)/<σwp^Bٴ;8LO%>>~=لx W@3D(}H5E97quVyO6vOmKJ;͈fD3RRRR))))ьhFAJJJ4#%%%r] "%%%%ی 49ks B 4[b~Z* Urp3vmw*vz.xԩS/' fK c"/@nDVᤀf] |8Ӧ'ˊnݸ_oD_;_V/gg^, έ@_ǫxRbDٳfnݲY ΙoKA 0?>N ot6?ܹ=7?Δ<>>d^ziȑq1QeK,ׯo! /voVޯ̘>@:-7ܤJNv8p‷᫽{̫,/Q[PLبkWBkV?qv|eyYyq~b|LxE{x*+46ގ (ƵRƤĄض!'E?hn~($FbЬA s%+#U $y䟃y'Z)'Lӧ|PQV\\gcUULR^Ra_|Ο_n3Ғ ]lmşܸ~OҢys./ D sCMd wݬ_~VmeC1͂|++ʟ46T߇WVWh& eMMOB/T螛VQ/;jKT݈ HJb|eђܐr*9 >:|5ʆbEEDE*+ˉs]l3W/d޾}=%(/; '%dg_ ~XYΞv ˄tFlUq7"evb(HWObo>}#vz oW \s9$phǽpV܍?L<@櫽~drտ4>!6 iS' DKrCMd~935136]jf%7c_^8sjGufI )I.]=z1 #5#;Z޻Pϟ^,2J>'EY \4W[*o޴^(] 96*bx/ÏxO8޻C 2dvSK?҂E dur̟]iK0Crўhr*9a㺖NƳgQ[P@|hEI EpyATͺ8E'8yi=kjzUI%bq 2G椀JlYQwSErCsaMC!DUQisfUEM_ m LSA4w7UX)777ZhP@38b!vmS4(nRnPntfK V4SCڦ hKAih&~ڦ hVS}KAA4#Q4ٱ*/)P~VnXfi\UVܭ\ <=(7(7: PZ(']JO;0~;Z rc5I7/>ᰚrrS>Ͳ[ISmz2+)kan܎`8FBxW.QnPnt*7H *Ȼi%);%I\)^2DɍȰVߊgtڸ", 0 Q rC~D3RRR))))ьT$5? %%u9TG5;& f"8xT򄔔T紼0Wf\ICJJCV2x^7h|dpbt8PRRRR-WZ/@JJJ* endstream endobj 752 0 obj << /Type /XObject /Subtype /Image /Width 410 /Height 329 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 321 /Filter /FlateDecode >> stream xA 7 <уDB;s,RR"Fk41dXScMv7/ ~ endstream endobj 745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [171.158 79.208 238.464 90.112] /Subtype/Link/A<> >> endobj 749 0 obj << /D [747 0 R /XYZ 71 757.862 null] >> endobj 750 0 obj << /D [747 0 R /XYZ 72 190.248 null] >> endobj 746 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im6 744 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 755 0 obj << /Length 2018 /Filter /FlateDecode >> stream x[o6B/+\RԳ}inhﮩ¶(hy%U俿C$;^N]#@DO1\}>zez & / $LQQo2Q %G I}j/?H^ַ7,e 7}ݿ7$%WngF0D0 b2&^ o Șǔ yA<ԁ83A#[ɿKpP[\`9kl]Ηxh0^(HE:Ȑ` 3vWG<4Cax% q,veۥHFӵX8:5{9CW!P,QPr\XP9a= Xdp4!Qv@\[֣ǻ? M ۾!K(7 iOx APS9i OEUbrb,@C VͨG1 y 7^xaȿs-`˖]9رס.|3W{,6A4˹X 4`(=A:r@Eoت%4fz1sޑLixUǿHm`R 7+m9r d:j`Nvm;9ϩZ0Bo?2=eϟMxiO#N}S?y_1~4eG!Ln}`|xN >]sD}NNl11$d! szLvd<&K/..qمV ~$@79%:|fIsId Est?/j;Gmcn|rNK)=%[pI3@%[MQn3XY.K2b/djmPRsH3(sΔkIU733]DCAW?֚U*')6ȸfKGNg26)6*źM)2Cbie/7>Br4wgQ;US gg?Ϟe;s$ESi}aЉN>ˉE>t`fÃJ,]sZ'[ޢݿ[q ݸzdl.ͨo6:fzNjp2֮pqRnv6sx ?wEGl m"Fz;x8,;]{?%BGdm$HD8/ CT[(I5 ~3eϜ` endstream endobj 754 0 obj << /Type /Page /Contents 755 0 R /Resources 753 0 R /MediaBox [0 0 612 792] /Parent 751 0 R >> endobj 756 0 obj << /D [754 0 R /XYZ 71 757.862 null] >> endobj 757 0 obj << /D [754 0 R /XYZ 72 634.732 null] >> endobj 758 0 obj << /D [754 0 R /XYZ 72 475.673 null] >> endobj 753 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F66 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 761 0 obj << /Length 2358 /Filter /FlateDecode >> stream xk6 !_,ܡ Zt͵Ȓ#C6E^=dC5"yqfHckaa?n~xDV { }VEȋ]vnٷ T #ەJV/4&ܰђAW?^}"03:0BZlGVZY^3~VT+lܼӰ.IlG Nbbi8B"I؊<ᐮ'(I*`}+b 0x\azb})A.{!8;b v&63d9ⱟ(En%,3~OɼZPo Tk98W&f<a7>!w HNAWmyR'xF*!oL2\@р앥d}A-~$/7<"">vc}Bø`S_$(ŁM+_;(ց=-h)\Nk*;+iz.z,@tԦ) 9OEvv7d _u5' zSrge2M2r}qjdV1_1 MɋO|X(m$sJ$X!ӊBVIR;(KV=gaWp]}k>kQP+b*[nОrQ\!/3' 6MJ졓k%Ֆ<^+ V>"[zKdu䪼)] 8eՖm/{lfA@î rv>e` p#A>2 FБ`ZöZ0&'܈R87Bb(B,&ҧuX 'BDYգDB"9`j _qɋjrsF:;u4>&UO! c׋Բ9m"/^n8宄Ϲz ];u"x6fXU\cW咮ٱ${6YiE(ND}+yʈVxlu  6*nZo%2v[~.*׉n:m}PYyΈx>8my~wvzɈbNDf_ 0֦{>qX,F< hxT˃f*[l@$'sy*$%ln|h]9hT=ٟgEotx ɦ4m^|♰,SyR*S^j "5bL/Aʮ ҂]DY"5屓__E"ʷ4-Y&ii@<{H.kgk[HĠ*O쎑^ "sh̛YIWSv=?G[I&M0SS_g[rutp^=ޝoCL!^YBˑj'YMCÌN~`Ϝn*cQɉva%^x~r)-lǃ]8+Z,XkeWŢN+vv"&{=h/MYcGe Lb]"Hs9xwp=_ykUz; ql6~{ :L B.X$wc(}5XtTQ8tD˫rJ6~;kC)w;h^jn endstream endobj 760 0 obj << /Type /Page /Contents 761 0 R /Resources 759 0 R /MediaBox [0 0 612 792] /Parent 751 0 R >> endobj 762 0 obj << /D [760 0 R /XYZ 71 757.862 null] >> endobj 763 0 obj << /D [760 0 R /XYZ 72 619.841 null] >> endobj 759 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F31 125 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 766 0 obj << /Length 2145 /Filter /FlateDecode >> stream xn=_!Xb`fE&a0hՑ%Do&CHh㋜AH9"ύJ2`XƧWo>ڡoxnF1ah r8pǯ%+4kܱђp6OWW_jDQq xy7˘'2(4娥!2ӂ(<щW.7!0 kXS `燙LlY'—, an1]u'%6f &-ǭ(#ޅ^jiR.GG3w)\yRi\تaD'0;DjA-:r9lbz$zݮxФt :˙\9 F~tU5q;N'!$78TkڒED>m(N0id1h֟2fEcFoIxAb}F+#wuL,J<X<|hb!{VUwTE%D$fB)U8^ )܃e(ǡ@5`eև%jٺ6m݆XRŋL}P ?@1Bj-׵Gt}r|}stZm✴ֵ4bof5;"JtqŚ:s)kpe&c)6e> endobj 767 0 obj << /D [765 0 R /XYZ 71 757.862 null] >> endobj 768 0 obj << /D [765 0 R /XYZ 72 631.091 null] >> endobj 764 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 771 0 obj << /Length 1875 /Filter /FlateDecode >> stream x[o6Oݛ /24ȗ4)qrۧ;mzMrpB~j3 j?M?4<c8d LSs-XM"|8yp!p)~>P7(pXhxc(裋@g#CM\bZ_@-b5LVS r<kZlw?P}غ <ىl70\5wa@CSb%CV_v.t5rVj9 ,a(-濫W+Z7-[s!BRSlD؍F'ր$'i H<.0'\^'h6!m)^,p{jmpBh:OWߞZZ?d1KߜN?e'hCW{v, ;$QV2\ ݄1T \6OtF˦byH$Q%QZ]&pu}ŕ){ՓbYN^"qJO"4.iǯD?2ݩV]+zkzOǐׂXm@5ߵחuUJ̇J4&WxͩTQa0 ن[e}9j}~GZIwB}}Jz6lœhmeVYMp&]`FS Eݒ.pu?K=VbI]9n:^رm{PXXZh3Le~IB&92'qEH:#FAeLBAhQyD,+6,a:574a } Ě q~|8Omc!QpBӍaS"h<=m\3O44=C>]!fe"^vPkf6W$d"xuP* ,Yo_xQ3qud'eE#Y/D~QbU1 Kn0U0'kQiI^,gP|4 8ZtMOC:ESUKӓȗ(nҨ\JnW%[K|2d6&hεo1= ŸWFdED3&+#^y7}F=}&PzrHwH A9?9Ýq}%fϐ,6fP.:]ȍf^ }o}-w IaV~kh:d=C9NFcGb^w4][D$Y$$co!M|+_J.l_fiT;IJ荸1CTPJP"({#CU~<˖g,;aC+Ls#ڒK1sTy&Pӂԃ/ gs/S: 2Xa)ĬU11͔3r=eh9/:Ѻ!Dtdȣ<4$8'P,>CY,]_nN}x5e W endstream endobj 770 0 obj << /Type /Page /Contents 771 0 R /Resources 769 0 R /MediaBox [0 0 612 792] /Parent 751 0 R >> endobj 772 0 obj << /D [770 0 R /XYZ 71 757.862 null] >> endobj 769 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F65 185 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 778 0 obj << /Length 357 /Filter /FlateDecode >> stream xڵSN0+H/TP&4RڴIc8r4ΰ`.­z(RGO)BaV0;j{NqDĉR|mw}8vADq~Wq~BߴwoR endstream endobj 777 0 obj << /Type /Page /Contents 778 0 R /Resources 776 0 R /MediaBox [0 0 612 792] /Parent 751 0 R /Group 681 0 R >> endobj 773 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 780 0 R /Length 423573 /Filter /FlateDecode >> stream xT]CDTDAr3 DPAI%* I@EA,*Y2" Ir90_˟kZ׽v驮z{~g?Q a*.}J %d/:;^{Mez ^F@@@@@@@@@i`ݲOxy,p`e_ g$lCvg[x'7k>MipX8afʺҾ3Rgƶ?)χL9!tӰv fxv>m?5ύmqr AFIOzc 9 c X;9XRyIwRlVN6uX;az_5od1]ڔ}aspuul|Wcݵ>yk5o,\)@@@VhM~9;n!꧳`>(gK卬e+) ޖbqfxzzZ___SSSLLLMMjg~56gk –űLז;<ՕaxXl@^|*2Txkq$ .T*KΌ =KW7{}~oL1?ЈYYĮ,v}Jv@N$_jr>4ps8w9by«L6xS%fɎYP% Y_d[v@@ɳ.S>HI[TTtg~56gsëZ?S=_y^s2PW?V6~qR"y=K3b4e9_<}/$npi]3r܏TE@{r7wR̎O\S=j~Luin(r.! RX%$fqjX+~_,Lm5HZ̻/v@ P_+ˈ}AnPԛfB[=(S"'qg~5u' YWIq![1*SyC/כj_/rW,pcXbLjb0,;˗;:| 3]_ar%>tB@u0eƆIXg-lǗy֖w S&j~W;y..ɵwG;|K[?;'R^fwoZmpSa/7{cwR53:"7\gzr1r.! R,͆o#}*fw{mMG,LY6\;5l~nF>}}9c06vM9`3sg6&!)%UrM7-7>kѵ>[ՕvG/o_&gܒ<6>Kb>t:{l3x9 7e eZ ;` g[܍6Ȗo}E/&I[Cfn8JJ 4v퀀g~A|.}y'cw/9zy dk!/]>mm7Ms~|i>Ǘp]mXoR!g)s ۢ Սc|ng?5t 0Oj/_ngu*^$O[ϗ K>>?nmmk~`.}R! 4<4Mn?LӶSj#KKKӰ_bR! JL w6'{4ps8?L3Ѯ[z#Ϛ# EJ\'d{_Lr+Q.ae[VM$@ $["'y湾՚H H4OD>~IƷH H3OD>D $@<|{ǁ\D $@od?&}"y"H 2I(~~M>;{'bH q"y"H ?cqBj9y"H ?`y"G1 DPevvHII544*D $@G Ƃ'b?n&&&б>Z&&&spp\t[H Hyv"托'bc晕sϞ=aaak!!!*D $@'ǵG.K nB@ax_ᐈy"所>ύ扏?V!H ͬx[iXWE.6MLpVqj~U]h.JuMjJ8b*(>5TN9U|] @ @JȪy5 ק #!,OQ;T)*(+KlP:<.v F>M% f%@ (5\>e|iE614;+zMy9v ګ*@nQ 'C'N(-B.N. 7e6.E:yRu9/F(&Cʣ  TL,(P(ER q<X8TДbeԈcJ$FyD}# g;Z w'LEУAQnU!VA)',fF%ePlA:?y5 " ѣ9p)6ɫ+UE5<9uBi41!*6!:PC )(Tإ(р р9v64 A4C|4 Db6*LU$dHwOc'0;M} MYM&&{Ao ѻYLЇ᭥FlFВ2 *FPoݡdJiʲGڅ܎T-gEsE>D/ĺd;?"XPȁʟfF'Evj w ) ޤhxvP߬,N Sݬ(KE/Mk2/,*<|@Sbh RJ,“'8,D# wED[Bo⒤<"(FnpGG?PPݤ'Līs O*R}:")w?|4Q\UuU$(ԅwޏfлK G`.xJJ|@455yRQR6V~ueC)Iڦ1QWMIEIC_W%QT~F)>hv^ })me瞯(yU]RTϸP/CetcWM.cyՖN-}_R?i~z"r4ׄ%Wq܆@^I c, vc/I`fHa5V{,_B$MnmP>ؽ866 NWOn`)Qxf:xɲE&Hv%ɳY ܗ8Ed2DuuߓJ|ʼ54]d͓C'/27|Ӹ^/0$D2HV.>#Z6;^mRD.S_ eKƪsA[hg|Xf)-X[YϘ(5 pb7O%Ϲ C|W+Moy!ЧqQ=Tt:"sp2<׊mqj1M,M;gZG(zZ(-Xþ>6S_S]p }jGf޳/cObZ`oc/a_If rrqqc+=,{ƀ] {6nܖGMgAEi4Dn1Eps eŻBpzXvRh^D= .g|~vq²&UA9+#iQMM VuغbߩH֬#9 Gx>MӞǔQKKh:O=O6Urw`J#Su1cyfG;٦I'Y 5Z8U y/]/f'G t&"a*pz(-*͑NmQS".M=^}dĹ@h7GGJj%Rug!`Y;K΋f#mr)y8KJit4dƲغK5|HcٰCZQ Oh$c5Sj(q0ܛ']vmy{oTc~68bti){3~sYz)ɭDpQq2HܭNi8Dj>ߟjD%}5{g?*/P};h=pw0hJ歞+g1c:lI'ݕCu`Oaśh{7 Lnyi4O<<./-ZX^7%s 2ƏU?e] UvI};11^S۷m#""RWUhlY\; JI o/#M#s<3e]YNVF@\L_o'_g}YYYWZ'6Y8iqa ~Q4回Oj9<0!:^+{oeE:3@c(9 g6΂BvЅ MδHMr̙pݚ%q6N4C>L{Rp8!ңľmk]Pg%92ҹbXB.²̸ߠ pc. 1  B! >&j\Hp4 2ijumhcxGO1B1JcQ.ۡD*8ؗq5m§I&[9J^i>kHzOcX, @HK5l:^5{nFvY>\=uoBϵU-WdzWamO3J=\_ɗ+"E><'~  .ͼJn ܃ox8uhx{w.O K.n שK 6mts D3y WROƙW,[=jq>3*^9zӓQC~|࿕'&P:4zGMϖ=͍jO[)fEJ;q{$-ҍh+@up o;GorN /މ+5К?ppub ]>=NUx:p<[vknB'`}IH-BCSck:wD6TrVȶ$k>0sqfp0?4]%\6cF+aܭyk矟ŅcmP?c݂rXH U^n356ZH]XN:_nA%EUoް/gJkOT\Gy~gʔĸ&C}u5^l|q b_͓PKs@/Ew?y(iܗKD~S&۔yT2Ko:1C4bqg 0,ݫK+#fiSqٯE뉾(ܽ uI-[nwpfyZo<#fH4]0Aٓ2un'CwIq5S(VΔ|\:X7@=B1s[mƕDR @@ehc 8b? ') t1>-crJ>&hj|{v):#F+F>OcP-xq4qo,=X"ޖ3eWI׶aR@mz@_O%F2nrARa1-cS'#mV-3ɳQc҈EzrbW2&h +/(~־[6eKq+ aoa,fNEudVL*'&7>oݩ3Oe?$ ~\7TUo{r&RHcfHBgȽ&7ۏSl8 "*n2~"ygs"Ug­\VN\ >`L' ϗ[===UWaZw&u˺Yj||4B<5xSߛ+7]̼/y"z4oHO'[޻X#<9abUt4/:7vus8mvSI-WU懇v7,.pzvL#>c!JoÌf=ˉgTKhbl`\"S{~=Bĺe(уF7Mߘ-=ضU yٔݻ>)N>S@.%7/saܶAփcܘ<ɩDt^'އ d.h{ BW"tS䜽>/O(y_t#U bi{@fW&KwV\VV֐IANnƚ~lܯe,\3꿣k1͉MR㌗eS4*#%^rظfx Yˀ"Py{YO\R0ws%yLQWX}t:D0%YVjM /\q}jQs+MlT;]f8N\X; 8Jmc.IIe-o~sbѥUOI+ ARVLT\C QbG.q{9B8ݹs7EN05ύ'󸆺˭oyV/^[.{WY4'anc#^yc״4ktt-R [Wgk7o~'!ΔFQP[oU6'5ܺX=5>>\>7tS0ԗnm(EkKxO ȋ(R٥VSx'}14hlaNҹkLkݥUjEp2BΙ[i-LN}:NNnwӉ`2?tVݹ2Ե|텧[8Ǟ.C&9(H;;'wwH=(ދ@ǂWX!k\qA4.AnC>$C'GM-W+5v[2[|8xDi|ltb..^ף"/g$e!XX6 MҶNYw ɴA,5*v鬄.8O 4qT}[ypBiKJRqV+h9X[ߝ~QT }\,GهTqŊz;"viȭ#OUP;Wa"d]$'\[]QY8|xp}v9~KRI{ꘗ>-g-? 1I[rmzOܙ#~29{aAp*#eWO噻)LƓ`>DM,>pG5˴p׼dbӕ fZ:!-G't9y=pat\]Ϋ խZZ ۷tvu1r*?SPѰxM+ #O5nDG;H)fm{;޻,[peֺP"Gu'PH,Tx8c]c3xųJc< BQr:J֓.(9hG߽vztP2[}9^牆+ =eu*P!\=Z'?/qR13'ێIT }y$&'z– ;&+ᅳj(\/+;7nJt Ogvy֢a~n6 тL _puZWoi]:}5čbųSys$5V_,3cDP8^{t!MNWJJfJ2~rѾ+M?*ru۰yPyS sq&B_b%!'XXeMtB S29hl{!NN2pX^,Z x@`G#x_妜|p{Qu[o.\ 72737vٿ|ب&X>˰WHYʌ7aVbwm{Vs9>Kg|0J4=P3^i9I bNݱ+0 oj=,tCO/i޶Տnky~tM/cUa/ Qy!/oi@݋.e׵&p"Ơciڈ~Ͻ-Qg'(_QAnM? p|iMB`o]))鷄I,ϡx@CC]Y9Oش,><̴6"$ kDzRfxf+h_tMx̑=ߚ?esʣƝuFq %JEfIGdʅg*geTmi5@q%Vn5^$})--}JNæt凯 F >*zgݥ2m{ nUhe|F(%lIS ,`Šܣœf!s:/W>@AXaaF*E\EG]B] -mǩ]D_Ab@*"OX8~3AX6l|n6q&v^) #ծp+Yɻaܒy$J&Ir 4Ovq9$It:X.ͼh¸tX奉ѼطMi\q\>JwH54 ʼS{80YQGWy&{Dʾm^pA+ّ|G*7&GGM9'hiPf^"nzn]~#ߐ2#4g\[{\g1绌ҡDěrP4PDi[˷ƾcݖM u'ZVvԒ ~$I<~F{ܸB[CF4rJM'4񱙴3n3f?<Uj;2)^dg;peiV)I BP,zx .R|Ѿњm[agCb_P 3BYBL8_%csF(WkJ,s9%rwblll٪c]SIn^8 Ħ`p7&K@e ͝p Sfy7Vαʕ%ỏ&d /W/o]Z_2J6JXaߝ9&T(D|\ߏxSDu3$U$%sĩ󄑋wqWWBWbVSX*5mm,eS3s*5G{oI  ޼,{5>|= g"$Ɂ!vX!U; T~yd)(,8t]L3ZET4jl\5xL>6t6p..'hcBTZ%qm!њEk/^\ 6##'|D1pcS23 ܯ_*X p>Jjjƽ81!?=Tyew(_irc/]x% : f/uo{~:n ƚfeE\ |B½]nD2& mfY(;` ni7qKŦvby7yPw֜;T`c\]Y㹊AcB/eoP`@2\oWA⧙pޤkI#CƦ6#K.7Q, V֢Z WUM"AFA9=FmP`6Zy^888Q8/xț9_6œ3YvO`#i&s 1@>WG2AQ$|RۊI2V2 <㞅 <5O\tZeG{۵ﶟ>ur}ulڗYOM\=oMY"Ss&FܴeROt<4k;sc ]!}W ւ"C枉tr{UNA7Y(<1¶CPr\wGF'^| v7Ým2ry yL4Q$.=2Ày N9 nb+b?5=9pnm5`{-Gij9/,ܽk<ޙʲMqrxuýܧJPլq9Y]#.Qr'w(Z\!ƄzB)U/y2Jv=Knhc(he,o.kHn 7}ƻWc޶P:|k M*>,wY;.?4"]2C# *H%ko68P~c{:jP*⽤=WZ pσ` Hcm+՛fF*w|ӹbi|蟵m;vAZ|Ű$|XZsOυeD;)[Y+ jxNo:XD!,}o(S Rv1q=+|{Zdo5(\=BmwؽJ,"'bv_%tȦH\dLid4fun{*}:+FÝcJPɤKJɥI%EՀk!'n_d|K v:hl=Nh ߾Y/Era\E+*+_{ FyJ玾]H]*z7;cB`Z`gr&#)8D?gc%)i,%$Q8#hT~Dkɵ57knLLaT.R%e˳ dlk',iuD4s@npkĮd.MTXxkV7:)/g ?!1O'ƛxw^L_aHm>o$o]wP8*w]h|VM@DB|B½++X RgeÙ9`7 >FG)T{ݚYrǞ]|>[`݁ K/rtΦxRk:fv wǼQ5}ujsάR <="'辰oޗQžPtdeÁ}{Z[khw>[Tg\r`|ѝc g|lsyҫ׀czlDLy@-;|e;+dVSۯ ܥF)Iڋkl{'9 !?5|?fVJFdq8o1Y=ܯ >w6Ir.2y2 Eo6۹ݩ\>S5QI|a|Ob۬})Q}>2MPS SWR\qxkl#U*jwtlM%|kVXpWA x @\˟~!&FxbOWNbÞm4 5ѱ`pV<$^s~vwn'ۋr4Uh]0'U|{Zo ( +I+&cwLޘt7 rgZ;Qx]?^nΣ~Խvpk`w |8E˨E9)F̓KX';Ț]_J1O<D@s"&i6soP(5sJ|YKZ-y"nOJ#dzA;6dۇTV'av4g"[ tDlqxIqPaPtX"COҺuHɗ\LX~tad8X|ۭ[}QYEr1o @~zy({=[ȝkȽ+uˡ\zNW'P)s'$fofo<2&1Ď&ٍ{F<yZ$j\'H~gP'#bZUr82ABL9_. @w:a[/˵U^d{2 ) ]0UJH%[9Ej#,tIoMumdXYW?H3dA+jW+TwnArAMWFXwmDbh3GƆ}PZJuJ>Z rqʤ/Y#u?*?LdA%<3U(3tQ`_7Rso-V8l2 f>B es9._ v #$]cW.Ү2s'+*eq̤Mn$ojP`gHC&{sͧ~EԞwKzMK%Ƌp'H,Mx V * nticK@,Za3t9{_FPcfSsK|gVI"Ne´1Nj֦JƖm]:Az'F戧W7g2O-` ОQ9 t?t0tVճMt3n ~8%ZfUMssȽ)wPN՞e5lw$[{.?Tg G3a }=H.w >0u`dPq$Hr2~uJv`O g0=%z1g{ovGssuQ_ Pbglqd\WM3ןn&+'v3 .ku_[8XhFȤ'Ị}[!ЛY(6Uqhtnuo|s}}2j)b%\-#0_͇@&xwA(6٬Иf}v}ᦗTmkP(z4j}fƲXoٹhΡlҶzqqg a:a M }}'e r7\dׁfQ¢ Ĕ+ؔ{C/=,L!CF#?Hu&q怜 w"o ""qjc}렒\?gl|A_WuxT;'u8N#;d|=+gȟ\} uyEqʹ^j ,(ccu2k r37):VzF7ۻyZfE-gV$ڂ$~F>yD2wY/R\籑ia$+@N6vTLY<(Ya%GGpV__nS?!SO SgYS; ! ^r5C)AłL!OìaeŢMe;*8c;=LGLw. QN-2\ʃ3 zLr4dZBq8>!nJVɜ z |[E DT0Vm\af ޭF?U+EwjOB r7uA&R% _9 _xk.f\6-h֢'}V*'P 1\Ys@GC_~@\l@VCa"g*[=Y)#yVqe᎟fnQA ފQ*j^ڞUSȉyאРG̉#ҹ%aƮ>Sx @m-+e p3 ~IDfS޼Ⱥ~2~Iȩ1ڍE]oWw&pZMRǪZNjU0n/r\t3y1? TO-vЋ >бU:(ؠ7RDRhxd @'#"]l?@o "VYE@侢S/_G?(VȴLbH=&YQb=9}I܉ect #= : k'*g]$SKۨ'#PvD/CF3 d &k\} ?5 $3ۜ)36#K!Ni"՞\@LMOh A;6p[n:R>W䲊}z~`h}vx:s2q z=%&[GbݮDIKkrE8WZ V;= =9L< |Y&.&UcoAfz8m`3 Qgb%Dϩ2`=?^Ji g2GR{[Y^jm{WÓFs;p(z~(y6}]]&YoY-ސLXѰ)r-1 I.yL;+|YRI8Lr?;543E YMTۍ[9 Nӄ=( (((( SMiIQsŸu-ҿ"εk =[~~{r59^mR7P_V0qvyJ\. . [ q`ѥ {Z꧷X)ye|R'@Pgx 0P &Yn0܉{cy+_q.~8EڷI]/|jdq w;z#pzTxލk7TN0h<&,e1]o7˸@qh9!vQq SlX,y)wCjl|ywuo o]oKtx4R7&!tD L  J1!>,.".*..އ]R%Z1.:.P5]b5A5s f"urqƪ~6nCj  7Ukg,:ȸ<71@,D% 1:ď[o]cNt· jC*Tg 6Au3֣"" nto$zס8n.QbJo2t0w U21|uRm0%}$$Ay?9S9A}{~t QBؾ3ޮvU}b薦P4ppW/"o-rUuG[Uf N{cĔlU˴Ky=˂@ gzu"ڶ8Zw؃jL~ˏB+ZcyMv%gΧkutqxrt s9?4ǘqr0*r?o=@}oz,ƴ²vy}CX,Re*?.r2Q%,b#q;CG!W?G^'gtcU~B BaJfUnԣ8ni<!TI>IJw=ts Mw,$dkt:Sk GoBC\V>A>AP@=A<Xm$it$Z{0X ٮ4Ui`&lSOke>1!pZ7XPn̞ITA׏cFtCһ-ѥBh@2j\yUw1Flsv䖥Ow&6- vR;& @khяdIrUE~ -sk5{D+Kcgwk)b>3:FQ Cͽgєipfxs!#_ qQLె㲕8Q*~&^&, VJR,>F?;{٥#j P,D 5F !'&~- ,}]9m_+jnX溨'q6]/1 WBDBAԁS#d/΍"v)jVnLbl-<7%]!HGD1CgȪ60  ҞK:f9;$/ܮ4˟DNjW8F|,! C:ǎX a+f (Ŋ[L*{ 3v.-7 N;QLR]*N$yGaʵ5MV@23E6"\0پo,v]d]gmyjdeidhaSdG*{_1X+mUm4]?Fz=7 c$-E jrq"y\u iMs~:>qnʱD%hXl9U\CBTEK+Y{ 0"_C|zF$T1)csR!?+U,xXϼG1q| |I{I+5)_ag1Rmg;zG9x[('X[KySREvJ?bVt<*C2 cRCS|M5D* 9;F>q6,I7ucjb&avq@>8 P%&GF oqa%#+N3>0}6XlNfwRm(KKW qQVO"l5mSyzs6_]FjP2M:ShGZhra.XKdy㟈;]?j+)b\t$Ek=y9n~VM&zX͑$t"ʏ Jmc/PbIkV>QҲUooADÔ0M/]+)ˤ?XTGREksGH+<3 `0/d:Ͳ) 8k0p HWX[™U6r}͏ܕO"/)/W֎nSAm4X{DU+tCwF:07aW]'@&@w|?t#؃wٓ_*DڳUGr3$` yju"~ݛ9lF(g TqVuХ/"L_#i[$[$>[[ŜA<$^qO6KW2!՛D@fBfXGfXAfX߮dPVJעbXan(ˢ UСufd~-2 6xeG,/ﶞIgt6w"f:j^7bUn$cdxtE67#Uepdxcqhoz-fm6]m6]Y-p*ysZlx,NjT uL|\#ƾBz\`,ޖ ;34B=ɯӹ *(J)gb+_YVg[ sCX}{(GH'/08Xd ]CmlLQF_]=#TY2-þt K^B#\ m1hƆ

~ld/?+lخG-.UȱAXQ65_)v[m&Exvj k}۠#:N8_1C4 7a.bXa3Krqb%<̘؞ 3έV0uXuT N.g&Mwf6#]c@9 tMEevt\t%KGO3X cR3y&A>?Bcr0k 0™,"bЏ~yj_D nWSOA_۪MVYs ]%Z\nH>>z)0TxjʘxQp)o8 TiˠV{|"YiROryt2)f% ( 92SJe:;P `('D wCć u^pR7P8EzD,6PJzô8BpDI:Ĭě^dn2> JRyƜJ`7BԳA>- -פDqL`8(PbgꆥϪo)H`k|stRqa: 4&> ҟ W-Sg\iW`ʢ; 3/q[Πanћ V)'nE*LBLCp;w.<*ξ=㖭vJdWoѤO.E(dVP#j\cDɷ{xjKcj1\FP3,X^ku50R.,]E;0KY~KץFvPaw^8Nh[I,7x37OtZYZ1.T.Kq~GVP2Dkl9=R#wN.MR^G雷TI0" qy֬nɖL8@? {]lLip6y'SNOlW<,u[eSxdQ! Ss) 3 0d4i|g<a@Q>2&r[!X,٘3>[.]+C.%K>Gv"On#O ["C~G] .5L%\99999O%cI=uҮjLC5Õu2͊Drb|}y}j <=@u :A 2a)ySOG`;!^@J<`~8x/1m +v/dTzٌ B"p}(1M ^G[>*frvd/@߼O_o\sۀ=8p+]Y%FC{O?(ao>b!?J*sUS7cB\v',":#*#2#",34.R/5JL\5=y̺woYZ% 2b|,__N?d]F:9kW%083&$jۍ9zhO'*;ְ#P,`Y?):s0 Q S;fwsc9׉5x&` h}7JG5wRbhA|I[0*[d{GS>u sPEn@A (cXBh& wT4 *$u$I2v.b\%W]ߴm)!'<)MԔC+'OqD o15idKUgȭ|-֫9grT"f,~Vw$[NzE=:ojfJD9qgQtRz.V.Z>(L\~=W\J j7qmum,g /v -)b-i!EPBHC]ABwCCCOC#^Ɯ`쿓g] Q#HݷUniJl[~ |;d?ѷ1dyc[6-u.>! =3;EXԯSxF>ML LHkh9S8TNUHz.cL)ph?A' lNW(e8mvϰFT&t+xWv.e9O49{qgoEpYY(YoUOsG2H?_.W+ǨNmHzI II_33*Uh[@)O# v0$H 46 Vu~*W;=96ͼefdwIӸ46"[uC.s͂p6H>M/j@/~^3y_%^!B {{`  ®WmG]y*gptYC`ȟi0Xrt1 ԎΠD9QZ-?Awv ;&S4 A檋tC S!|SmOɔLN F zqe6!f|_ֹFT\G?zkra^6j92"'.wτKucov4<394I%LvNZF:W"N5^obt}#73*D:v, 0FqTv:mV+v N. LH{ W;_i3v Z(>}*>U^29y~k]Bue}ouflP K( :79K>C>_>:/1P.#0roc~ߧ1 S/Lvud忇ylߎV?7+.o'n>VaIťyc~|gT 6i"N=,8K3ޓ??q5Ln^REbnPaѬ*';/8{h5دjyVdطu, V~rk !R*hb*`Mvegi> KL@WnP0o!Risdj8,J UUlyŕPŽT0_gf>r)Gv/// 8.9M-M7L6^tPp0X{xOOOO#$=  "<,&8?-1}@P\?wp|_umCsc`{- 2Gi [;8F\.vv/YԸ͗u-plaP)TG.Ct'{ rt~xt{yr ~vv ~Ko=bң:yB1CݤB?/z :fA<0mI9L6LB ?U(>[UЌM"v\M.u.!_ံ&Y;PO`[:&zWul]^ |n㨻Z XY<(Lxdv qmGu91BHxA333;(}l`-[+ Z]k_#&$Պ6+[dR4.D{ʙVENg$>%wqI4#_n{ }XW =7z`n_c 1W4ɦ`X>y z2ܯp`YvNNN^i=~펠Ljxm%v^.w[\v+>S z3qUOs/Sbѿ}xۀ% -KYڡ 1H"ziA],7]D=QaV0h&\ݲI;cGBMp4yoƿx >VZ?<Iu{.Xƞ_1̏*g4MxypHa!1goɎL ,%$]hs,MT-gc+PްB>D)&besOon'W%Y=O?XQzqrƉE\Ŷϰ?7&I[ei3!C/ؗh <-ȩNDqSdO :Ć 7C%r 荻hW` X fKJ;gGQ0d3TGi)rX".%à+3/~,CXU*~_<*Lu5utvaX6 l)^:Y|rVB)< p3Q%@v \Dg ,yj!ο-R әjOQZj*IƙC~N.g}N,3jVL./\@Q?s h&ɼޥo/cRmOY[{9#:Ӳ]\3~]w+W;Ŧ 872h.!ҞЩ ;# SU o$LuwWߋ$5ےٲP/v(g2(pwoP)Z3IO-?G)TM_ɤ*Ǭp5OW-o;>?vqH\}t+xHhB$hb.EsxC{*NYA¨a_c&uLbVS/tn;ϹRxۛIJ.HX';FI1{L@!g2/1 j2榔b߇.~p\g>(3C]Z.=Qmc!ج?H"Zc~' iHGϼiN'F0P=N? M 6y{c32 6uvWa*BM='(7_N8R6HI@#_/9h~ vf 7%Q}Q,3v -J˜)d*?gtLlðAМ",_L6H(UMAʠĭ^MZ=-%Qwz ey3Ѹ瑢ý:pookMx ԇZ9ƍ+HG}ܳkݢ7-W/TRC@?¶ ^ ~;*c\fgr_+)yY~L$T;)تI0B(pg KskZC1ꏓCbWj|Kd+u 0Tn{Xn(KdC-% 6Ɋ"8g_-ǐ!JR>35?v`7/2lf4aі;ktfr6М%Y\UN]?۶ sK0e$[tm2'})jI?g=O wɮxڜRDsW RK0'xR+4#<RKz۱a7F9`;Ѧ,㛴 v)BM20?.d6U71u/- oM7QtG1՚pT+Mza! *7ucU7SrT 'i$ۖ IMPPZ˖/Q󵲕-sU Q2vZ*ilI gXI0ƯIwT 5Rf+~vw{ajsM 9 Ҩ%t#h;Ol4 "y4mH tm ).J/e6׀#`v ϐ(y{j~?:ɨU5suߍj:g %x=π W۬?tnrel/7VEV2Gдݿ2}tnp3|m577M [ZxFtV@f1-;=eK%">kCؙ-xN$YT Ae.sf `7ߜ{kooJWO2OP5 tm/M?#]/G Qx/@x`%a! }?` .*g8߸zi:Z0P0ɰŇ M6ݏKҷyO> m;w+^T"i Щcp0DF/kuո}!R]t<%BdPq'`ৠF!a `>}3ʴJ^KT7 ]:YR3 H}`ʶ1turtq6tdv}C$%_mgvWjxu̝ٮf{+xkj~jlm5Mu|Ut;WvA1F>͏2}H}|^@ Ƚ/ )jզęUǢfA 65yre=~Ԕ_ň;8*VyI~1z }oy'1EԶQLֹ(0ݠd$I7Q5A>gdѳDhՋP3o#[C*wo9 ! &iܤvE2W! |{ir,#  I \ÐX%@D 5&:fr-U\hqȻGG''= tv5X;3̶wk$sMch \ vMUͬg-_ƺɢ~[EZ 1 `],;v{x}28G8:>q_S sw;tUD?z_.fRm^<to.(OPτ/K6PG `o!^zۨR~XyywWxz`-҅F$!!BB -X.>sNMܙݿ9V~{IXf=lZJKdddddddo# pPݙ> & 猭Pmu-tj܇hݕ} :A:[+Hެ1O>B;C!]So_\cf'QÂzZbL F_x)u m%;rEZu:J ϶}N^xj$up,OuP;$le*.BŚNǐQͼ%=c Ѹ^(JBU kҖiwB+W[4MeˉF{nf7ںfᜠXkq|9U!^Վ6z.z[z>Aڡj+U?kDtzl?H9G_bXhqa_toSm-o`w/ux|  `aq=G5o>OZ#%lSt-"Zb)14G6~sY-M=[*T"m k_,% t17SSRPtQ@:>tbyt?{ҋº|νtJ᷀Rƚ*:F&fƶ֯I#s6FGς_b̿=39yjJR<`K0 eg?u}/UMyi0qi0h'l=ZfGyB|aG|I0uI)Zī!¸nZ:N")Lm$t>3ER-)ңkIId1Hm.MITƱ7+O~ c mFA%eC v*Fއir~quek=?$`^ajch?q u:Zlik९ ]seFS$d T̡콵brK1O0wV p؇T3r GT1rp g(E(^%J\U@.iiB.U n$bq~^z3z)oLԺҝ+-9[(Jw}f x؂^!"Na.y1M%#X\(7`e5tD B"Z1 5hA`4$8hHt\.H u[{ߞgp//,ݛlS J6KWhȣ:l:,H֟0Ni('/_ l2u媚P']$V76X;'T1Ri,Vn+Qa'^u=Zs1Lo:Hw*X}&Rq.^z!Ut!wyfA(H1E]+JH+F3WYU>oN_yX\YC3;oI웄;M=AkG#^u;BpaU)W9Ĺ֡ަżøW'Vh~pzhhGJbzVCՕ@{4unƧ|M2591E?yB /~+ n0m<Ws5*]O?-o}csovDY{L1EMT*iff౦忦ɗWH<o6P0_X d"PeT/YSH`I? ߒq^0ϣM]y_:mX;Zn I>B0MkܞLEڧ5/-ky[ܾ~w]v&1g7PQӏ_D.w wh.9*GqE~g@*5ۼx7"\I@-ϣ(' ,/&=~sQ!j5B|%PzXo9țwT"zen^Ra4ʅD=:v(vmYBr=/>d|+9JZ{]sp10v*@vY3TMb@u{"e.[b蔻4QU+Rx"|}{ S N g8%o?ؕVoW6nM,]:./җC]:s>lm,f XqI~Qԟ dnmB/٤/ ~cFl1&W`u/}{)F^!cqjvi?'<ļFz9a){MijT)5ξ[Eibîii YeSO,UUdnf]k \糉3ɵ?qmV rU/0 ~@J ή]%ɥ6$Ix +I](zZ8*9 -ef@;{;[ђ ^asټ2!UG)ш|IYEw(#3إ ԂL W.(w-n<Y_CZ4B8l?v/AYMgh kG }?dB8uv6@Mc3no~wawqwi {zEd ^7[6O&uQ@t&qIT4! 7H@8Z.P@,@ M:- |%Y|f5~7h2ɂ'8 Mϛx1G^.;LK| hajϑ=M0>7Nڔ\Yge/?*IwʷSvg^O0ϹBxEkha_’l9c?F=A&EZ{L= :@8Y:†6.^>Nj\ŕ8ʦ_l53m(ƚA} 2e g豦R8@+z rՓכ+Wvq[^Ǭ>3EEc_A&FBk.ުy.tcuM%HSȅVΩpιHʕdB(T\oGb)erd煾k#}KŊV#>Cs[:JbU4]Ŧ>}jo4 hAyS%/[,2}5!AweD7CTġu;k*&^.[V;Q gBa:(@{<( jf&7R;)̳fѫ=0B={x Tұۨ~[ޤU2l dm \y~spFG+ê%hR+bL!~D>@R-8UYWDQ+Rf&^c 50ה .}.JwKRp4R 4uj(pU.ڡi]/lV 47tΧ2{*W!q&\ɸ[бc@>^qTf#1f@:u])x:B0G~#Ag!r}"L3 "n,ROPً55za81/I=P&-X5Dq5LXh:asxg 17[:J$ӗ^ŌX/mJsʡ8z}2C8>F9HUTT!Җ'әj4lr(Y{T~ |W3l"L=mQჄ'{jszzZ>wiR*Ւ=f=asm`8/ј)T^ȕWɔ3+ӣƪ}6<0mM'%g'wqG/A'ހh RFN| OF>YȐK!bww0O =|)unqy RpRCQO:L2$omw& ~M-ptˠcoPUK(:.Dorgeq7l+"*3}UBRڋ6k~[S'kOAP)o֝3Un NX˴R=L:ů(ST50L vJ;ڣY>1)\M9:~.Y _Srh_.MNkMd ә- ,H$7ss,#]XŹΎ?Ŭq?xՀhTP  @.(T7bv. M N /b>}׋f3xI?U+nqy}8fLpRm~zSлB)&ֵG$1ǹUl~Y܉qAҒ>|[΋&9Z֢M%j[q8V4E߇S5}쇍 ʭE43^rTpժHl(5TOĎ]T4F1S)a^5{a脴{`2C8IOd'4ۭ }M޸>TFkTb[]ƹ9rsL<:tp}hrSpbϾQޭ`O|k۸|ѤPM7QڮTjPIWșc86f.W§dEJO #*P 0Dd=!!8[Yr}uY+,ái{0öĬ%.Ux&Iߐu S ,jjƃF!-@1t.S!DOHhJ9ʗ)Q7[wX^bX%9N{!] !] L+Ih gXio#>yOH&d{UXUlcvu} 12c[B;C1:C<}x6xѱn d]N*fÇ)I[q ,=ߗŶ9Fi IFkZJ%'RM8  Cх/}LwM[=D30,t~&߁NSnkj7d j^N 섄jU˘,L^l963(>,e}7ymٍ^ƥxNN$b,a =Voڞ(p-͐hWᛟGD4!>FGI.Q7_M|:b dk{y\tyja1`8.~1rCo]״9ı{{|yVh%ө͇pWS=fKn23fiV_ [_j=uF8xbc]+OU`)Ń% w KC>M&Yoޥ?fSC }BIfżwi՟@q 8Hfh.O^|kѪ jc_bZ [Rt\2[sލ>-i% mfV,TKL>1BnP4/Ѹ)t%*~Ԯ3l.o`mF8dHqCyQ.Qy,  ?C+CkGRZ} (Ciz BVX==_څ#GA @9A?A@˂ݣ]}ۼmYf+[g3Xm1Z7A(%"6Z/S#}WNj4긁f61yg<ЫʾŤO33ҹ.Zd: @mc4 ]ϊg{ɢiʈL;H}~NefPwNQas4od>]A yy/Mj#cP}y"wt*O]&b.LTp؉ 5AԽ1JA:*Q9]sy- ;1aSymq1`| bG3N#_Z$+3"M#lmCl BCCy#kGkㄔI&oT ߁˹GK>c֯7L66Y?%$]}iڀ #\luDG'/mq=&_) >aD~ø+m(pb1 zMv5=P& CyK! ^"v^"4\×?ȼ_(மoa#ǭ]|\sH;4W/kp⧻50/$y uJ89h?>c/L :-r6K|K[:-Mja+ӟ]ZNC?e,3OSSźgo08uK|43AP&TodmM8]>~Mz{.N"藡6RT6N`x ~Bi,oZIYR虜)`hCY#; |űh]Xn{:L| o\Σ |[~t OֈVq)ns,YHҮwwi'Q⇶ UYV.mRt$y*dI+vDޡ@[לCӅ3X91:.o 44h7Y5X 1ϗ=G>AμDt@A AҶT-[Ϊ[+3cѨMEYcA7ptXڄoUy#{bhd)QB\B2*Xd;|2%jXF  :ps,5d^^ʛRzu*2 <=ڀJ@BH~eO o{:2DStE[衦Ѡs$#-xezMbn6|!_\jU.1Ǫ4٫XN<. 6zhJUz's28ҤuPv\nPu36 +l^xI$҅`M]t {Y#M[Tbcsم9k8KH9s>r&exV.~17}1Gqs۷GԯBf )z_%o{cDg͓U3w+jlA11>K|tnţR$w˘yS]ՍD^XRM?6#TKKk[mGifnP9k"ћʎ6a|ah$.Z=J>Fjkp-VBkVv u#O'[vpGy>J|8Ի KhEy1+'~`[~ϙ|уVWƆ`d:=9RUUAۢ~vzG;˗hhhJJ=F/^< gJPTT }~Dii1111^dDg + V @﯑?9T%y|3+ihN|E[vˑy/y`Rk -!@@{B[`h<AM@9Pno/U!k< R" ܻEq?top &bRPI 7S xܛ8B ^g4{Vkx[wȄ7RMf9{;, 6fד|n f%4qI}шbqTĥNf߹]]pvFh)3p>|EV(~u\Nҋ;vp_ +jbl\<ՍS6v&9D{X{v % 5Q{W[6Ӄ{{5EU/HZ0vWhZbZ{s6pio=NL6﶐`g sfQ \-_s<"nUqhusgÛ>)=Ss!KgΛrI̼ tqdqi"<"kvHy ^FG3*5=~U"zaFK,,۰bxNGV?@驣 )5MZA;~ڲ|j`W2)\&}MAև#hX{ƾJ4g}i`8֣O >z܂Fۃ78yD9(<{ѳIq$rcikAE[M UUMP9Q[ٔFXK?w~]2 #쥹nvS{W( ׿qZ)X2 u@YCY+e[gz)1`@+!G(QQ[PBGQ:מmr(F Qtހ7 T`9?k8U84:sBa-ra£J;E6XKQ[A_WDN_I_?gbCn=}ě;z0HƇy*7c4Äi[q3^gϐДu344UtHeM9'ɵ}ݼ{qkoha:Yǜ*ο_$\"^[e [ԛ䜭ě[tRv %\ά H7H/\\xp郹S} _ƥkObдWV៯Q.=Y֟;%RlV;Һ4\S+.me(#h+++a3C*:U!'ޠϱ.pB/~M!vW)D9Z5TOYӺJ?:~-GѹA6{m#Wq[jZJusMdl˾hw+M~6qma O+-i)./'.'''&hIY:njP0ӾE]1+S;N,(p'cm'3HhJw,(tC5m^ʳB;>LC3Oaě%eڹ]&F[Ŷ3NqVNr l?Xκl*~Xrs7Q *nB A7QW*I.r^_}1k[>pS@ PQQqqq `stS?VC|օ51>{zlt͛7MNv‚aEC? 7Ov7\͈F?愿yq~,Lf0O_e!2-~ ~x0  A<z [@PM03 -&xg4/x/"!N} `;6 qg>C4y< n9aM%.-cv5pP7SI^r^wc_* k$,$)+S?19ճJ񒴎IT02r1q JfdgjYeiɹ]I~usq uU™IO8O )8% NExY-h-JorL\i"Y@DP fh׽qJ#ʑϳ&dLXjV?*8AɸDL"@ σVtڝ2eVR-gO.^]?<{^0(^H* ,3mhL՝ tܴ =2rӉ SVJPE$]OR"bhb`%k¦^ǠئdaW"G]1͓!g:xޚ]K n/ ̊e6֬d˩NJ]}⷏kDl0B΢Xd5&"Ծvg^~mol9!9\9j;ӥ8G34m+~c8]O'6}. AG$P*Z~N(·ywƠMieZKT=J5:?}Y}oDo= \'ZtE7cY?R>b v{kD6N i}u a[NlNyawY 9Od6_+.Nᘭ _?(`xAowZ"Nn=[Dq@{ \!da³v!h!?2?S~+ZCJzLo nkKǁ- E2w lRHd..?Z9y8鼟Z.b K;-ЄtM &I` gs{Ûe¢!Shbꋶ'w6ϐ/&on| pP7$#߃ }nD.\$pc )*@ P,@@PFT-;i\61qQӲl!N{ (/WNA$EF!3εwkBIggDQsJmBpP@ @)nՖ"z o#U"T!jajP,Ƃ3NYOwЧ}RKPjZMRKL1"u2NQ}s%0J 08A-}Rn^}?B)ד 6^y A CzqWz<7r9.GiZG 3{gNMs갏 . :6{o׶.!$X @w%Kpwwiܡqƻ/kvwν]j֘cgu>)Xo;5;HʌP_mrq=;ě;y 5\E0k"x nAڷHD[_ZB"~dJ8^ɜC_G>F!e^^-\7=fhV0˻JLr'aΐHΑ)_ ߂4oAnp dGkE(@Rm׎_1L|0Gط}O5-(rF6zui<3ZS wH:BrEkbV1C0^u]]_]q\I\0 Sm#!O# g# nF "^!w(2_?G`k< !QE @~~ni~Z4(agr_mPel`G@D,37v>_D4co`Y# Չ(6 Ѯyĵt%`⛛!3IW'?d==])\$pi}3y3gEһGqgT#YOlr-llEl lu-_*x4J>*x;Yd|okamTP]×Q#?`f+wt߲No`kf3QH4 9:锇KGes4Uq˱rOSv⚧.<_UXn)-aׂzm"8ȍ饗$,Qz:Bt@peXOaxUi垧纥mlp\+! |`{u,5|Qs$x6[;J?8v nq [țC/ w~{OO ש6&ߞr\|M7\tXjLy.Z9m:FiT8<ѥ]\s?^4B@u{ y h{tt¯53tôU͓Tݳ-0@O 8 %) Iw0րWSk0@|hGJ1J'QM;-+)&\ձ86["M(PϠ!tz>_<wg6ԔĹɃ1}=Ohuٓ ;ĝQg__4wXwM sS<.WJU-MQSSC;m؛ֹft܏#OkqR2erl<cJ\{åW2.,.<{ߞG!/*ML5|buÌOܯNԊw:>4~NTso=4Q ĦqY3"y@j댮~%ZQFms0W{+ a02>t^)glzWxI Ws&${NSjS+".S.= ptW Kgs6ӨO)c0)zY9b[_ESy}&0J;X#v[-qU9lBϦS,;)SBgZovP~xNLV4Pk۲m0R7Z+G4BmJk4\.e"xuEl+ִ/iM V*Fk>hXoPڪ5=V"}M>zWSo#Te:A?7ܽ `,X(D-\ T}ac 9$eԐuG II2YK7O`M_&^2HVyVC&Y@>*:f cBV٬˷T<%K*A/Re(Q!6ϷX\}>KUnՅ{Z2ģ:`9} ,D囹4v}h<}7G0?<]j"N[4y'+Gm{Z¼Unc$ED"^yd5:W8L+vW >JAWC(!t9,]@=(nk L\}[[xXg(ט0I8w/iSX>+pW,P2:9nj%OBu%7j9 B߷S>ܙwl_澓I*joVE[#kw?6?fH\\ 42[zBY:UeY {o٘{kG~MWn++7(\֍:02c9GEwڢl3C5Η;<;hkn4noC(W>\j v=/;!](0y @)E?HhDC ';zAgsP%R9jݶ9WZZ˃5 ڃ6(a:&я-Bq;ăb%>c6-Iԩ>'f1|Ge K= g йa(oiMUDDu[&)zZ\ `9,K27ȦWhg58; {GY0P} ]@0 @5Puz]s,*dNxw{{<$&'#]&fve}{~&W1ϓ_u5?_u?< HggY9ltp{De>~:qg;~ܯ|%7He_,M"B+T uu ?_I:T8gtO /io}=^\ܺiBħbo( ٖNVޚoE{:.EeDGX[9=l5w"6?vlA(c VHJX(/(0L6cW^DNR.%ma#gm1 ,L 7#]l00f~1É#Y)lp?fUu%R>f6={Ş/AuM 0_-̹MCeUnaOGP`@ )Z-@A'^OH[&:4EnzX:8ZxyLpWp`4ձXɑ/Cf,cOTlyxrZ|j EFmDo圣:_"Q^p=\~5!#R5_'6r~P;vz@08mު/9P=3vsZB #742dT罅FvN5n~i5OT{_8#o-Yɘt>ӏnДgpk Kk$hg{kz+[7Q{Yʔ \fSЈoGibi3y:Z]kE(N'KTְtpj6ɹ%z' o*ĝ*(foIO 4wr1սm}C3D@Ybw QmP=y? ['3&̓ +D#Ql%Xh4K"[tSk*gO !^vFl$r5S;SqPvBr~tA|ȷ,stz\8/ II).i*pc=_BB1,4*'8mٹX؂ 4}LlۼG|5%& grf7I^I>/IvpigwsMcj"E /Z@nF?!Y} e}_"r=5;$D6 IS/F?uTI55Ƌ~,_D/)=~\H_ 檯nx[8(c+aҜ.7{85_=a9O/Y6ZD& Իb+=-r}L BtujC' a~>3^`Pܼ1D (A;8[ydtuCM m ^P$[BWac?et"Fi mo?Ә_z0453vx>vO|JmM\r Chz/ c5!7^ctaC𚷱ѵaȬ71-7 prO]hE?P-<A)9}KUb N>󖁋&a+kƎc.!ͩj} Z#*I|oֱ^F޹QۂeID/zTӾU8#Iהi3Ig ~\5 B If~.iNNnNyNyɾ: >bΙbYYsY7Y*X#.q#4V 5u pq7rW 3\1tصy8evՎs,ݤo=`q$+h-F|lb-oeIkg z³GG;gNvKT=Ze[I*]`HP8Ķ|@u.Ms1ad4ftr8+GyG~/⮯gh.TO0i-{c>+tpNbPHP*5,4W#GxK̊m|i*[l sc^<H'fQ-0}ֱ6``Vf_ .hІD/Y7Fh$GxZxjHs0ztp s]u9@v!< ?<%D :߶̛j۝88lLN^'Y'_'[XǼͲLo5Fr0]dpE!s>{fSIL=NP+/pɷ 6mQٶ< : آut "YZެߧYZ@%!܅ZѩJC&^C q^ZS}ORPWN=+%_|ܡm٬63dQ.:YMS(aԟ8)6nWp$8{M{&PSm=(Ԅd}H?ѷ#o{{>$ISЏitE v]%~}Ʊ5.3fd v#2moMYk8!|7%_6jYZ{揈5 , ] o. NԷbVRd&2GG+ߍ4S=XLt6?_w(2+5"T@: ƛ;heMj3ge&=o :Z:zڏ5_%6bL}\֗:Gr[1B‹b)RI}_~V09vB.Y'l ?И&g <I Wjp0ϐn@(W瘕g$댃"K:!f{r!̑H h,os;g8,HvVa%"_#ݠ\b4=똑movZr|}O=3F4KB)])k"B8B2Pkj]e2\e d:G %/Y$^}\U 6\ru)~8}xy߂|n #rjeɦe~3Qae%6Ejqt{o^,NV .jK> s<8̅B%_gSLd|ZǶX*tJkQaUq:-TIW;xx d@>Η`fTvօqكvvxqSאtAG1+Ӗ)(RVqў^nQ1=7n. L۵İ? ] 弬L;vJޑk2U,͙M'2Cz?Mv,%m*#_o#,`58J|:F_=ocQEՕύI\9@vKobb&“9ђ~ZPV e 0 ]-ϊfytόïoR6现A^F)&Jdp]T~i S0;eU St$ @ց´Mj9pǹZ)EG#ˢ"iyO~Q:rjQ/^uȘ3۰jpI&,;lz`oiJ&O?;:8= [:';^{Ӵr5{߱Z*(Vwg@*@A/Ǹ߈C܍xl8mtxhrm494=(S;E5N.R5J1)]D=n׫!IR" ^C# g.ϻK[6~4{U/yPiqbYbÅ|ӕL TsH8vG$Ч3tCTZSb+di:9*eߗ>N^ :C v@RN10+gwnvaD²A7F?P ur)}{־ɒ"?oj<$3Yc3º']oFهe3B],S΋rQw3 N?/R1uiiTbm6U'>}tA;>=B;-33Wi`kZ/V݋:s5  +71NS/=:L"cs7M,q Y1w$AP@A&kF~5Mo7vS5bIoĢ[9$ϨAL= q ʃ*n/Q`hC&{4#7ThGf_t 7U~**HYL:ɄUWE95ڄ7hfI6ֲּn~I&[&}glIh amaiTY>[8,1(7him#30{b H=fϨqu.9+ŜNx*&!X,P֯2=*]/RWP"&!W AS]_`U_:*W|UzSΫX"\(ܖ'v-P_YPQR4((ؤhDy}S1Sۡǫ{OWֈ ۻktZ¸ku/я -hG:B]u2\=R-kgIW u#^ b}mN7w?T_`@`8%٦,X\lJ7=1Uڈd"ƷTY342P=+EM+}Hd{[yceϫd3*q W36A(~+M>xSg(!jX>Wk#{4|{ qRmD-{S^!l爵"8 jqvdۋq`( ]XchɺݶMbhO$T1z pʻi7\IBK/,Y'_5a_cM9 ǭ=`K-Xy_X-q5PT,!%B(x*l[ wFJ2D}مZ(n !zMg#9pZ-)sD"]$KGzfWEvuM=NT< 8XZ-~?}b#$f!z<20CAEqʊD9䖯Z(J4~]ٲK̦8.CD;.cJbVoFS!笙Җ)ܺ;O,g;5LD7!57(F,c9A;F3{#G8k{ػ؝猡 [)ϗ!䫋L۝"ZWaA"99oc3 0oP_nD[8?If9m"9]߹p&8x ɯH{VXլpL)o^v^7^|*rA':Bywl|upw9q|42tq%%U HuNчnDsCt˕SpNrOʰOv;m::Äb^#_n`'G0+[q28O譶e^#6R 5%`MoqV.q/(g)3i,|Z(6!j I O]4Ts}_zkDrj޺u=^xkRr#2' ӓ)a{DϺn[Wӷ[ ̝{[8}eA1WޮjݳS-2FqgD[vuU:G@1p#5I:xqy #MtYA^6lCdi3fqaccb-a!anKN a1Ѭᚸ;t]&lC`hSg(3gHgH`z {B"E@B@@ՠ,`ۓvy S~jYsh`3*d+kdSlKһGko&zoP3xok&N=V1bOW^*<}AW02pGg'B[V4yR4T1Q|(խl"ne#JosOͯŰ 8iXqem![4l ^)VS>F)!X'EjXN@c*H>iPޗ(^W!C+'0/5+[t*6rE%8Gn]}aԏOIQ<9:Z:#|xZ g&m[AHBoUzO`dRVqj9@)r#nII*~Y z9T|=&<ă;/'?et@Jf*&hj¥2* dxh^D>[|ٕnmLS*It#7җ[;t!GwɮdTӻԑ t }U%-On!4B.B54RY;RZ(cwl^1ieo̒,lmQu 6pVտx\pȇ 2Tjy6^,JXzqG?4 4oſr>dmYc~l]MLqݷ&n4in.bێ,.?]i, ̗9~II^DS#BR(O4x*_-]`]ܢ 73M05scyp9'^XٻbLC xo 8F[g\ޟYo)| ɽYΑoP.<05GgIdg}lHhdOoV S9㙬|8G'Y\R&8'B*[rbiz{DVŦu{"aEr{v }g<ѓ;oWjyB t[{s4 =˅VJEG%[ ejitNl<}6H6Z=_]Wb<LgMRvIsQ.HeilZTok#ojYI2I* E}Lp݄Tթ駻ӗp xY<%Ro(嘧`RfdᦺϿUvnm~y=\%>sßSJg&`]GNG::f}kP$R{ 9oS_5>2=s1 PNJp@4)2Do=;C& ˫uk1)%E1vqNˤ_ˤ]Ȧʥ*Xľ~0OrG3(3z^5wW4wT4Z4/I4_[С$vtpo|mf~sQxT42THRUG3q}ɍ 1Fz9t 2k)^?=oKx\cw!/ @/`ѺlDOӝU;g'/~wkp>%D,yId k$}%q#č^gu'GX]L }@ Vih iڋօ֎ފ|d.oP^_MحfƵD{m%}NJ믅0Cf-⥕[͊ljNvG㉟[W¶x 2W[OÖti7HN [8@ ^.[nyu?WN3]qSs <ź"qckrOR.f82pB 2 5+4K ִN"z^>MU;e3tOZ0IۃյY;z(txxN7ͣ`>+Wiy>͓]Ic?Ev,9ę~r:UǭyN_OfE"CY/deUuÛ>Ij x74!,n$ Ž?&ڠ}q8|<~6z9dhQpY_qb.[T@DR i$kiXv|~\u]\7~5˙c9MR]"%K$ܧ_eYC%Qer\ $[RdI$@/NLW̫+Tuo}7mdq_dŪ#tݼӭsDA/v0H`q^koFWS\4+1P ׭؈ܝ>Vۺ%]9r< $ Z_zA sN~OO_|$C=hF ?JP\(X/>ϼ˟maq}:?}lגPml7}̕ΖB꟣;׆ePq}o~?gF5kX00|z;G qTDY>r` ȓa53( ;43pC2eh  9Fbw_4_ tMn{]i{Mje' u8 < bp_o5`e"`HCW@%0~_s큲D8"]-\^\D6qg֭kaAb0=;"4 `TpEi;;֩՝ ǟ|5M6v <и$ wYC>0vmO7twoZ= Vh!k@9 Y")j1'"vO!9iq/:Hs@u ( :KF2]#Dۏūkԋ"c{v[,*W:M}wZН]q88w|8VF9Dc2~9a}G˾0CBvf_{qRZ+f I)i˒ZΖ=$WاC4Â#:c ヤ]YT^4_xŌR"4(t=FVJ5櫬 d(})yW޲cdBܯ'v瞁kf6kd ?t˭ɣ%F612=͸3gs|X&I>,>7)-kIWjZ.g8 U^7g 6}8-D%؃QhJ(,(a)hb_="tuF]) Duk&s‰+t99G]yiY6oUKs 3uw6= RG%I?f,^"= Eǝ B5S\-åDeԻfN(;B7-ƳFe%eZWTgĩJQʚ@1&;ާXg{5Ѥ 1e"!_j +vI%ˢ9gy)d*}d?qa0\7}D͎Z+LPKGZڣųt2fVh?M y>5>Sg@qWչNLMN![ҟUtn' ܄.*|6Ҭ7RnҬ w; oJy os@xr0{dR^c-=/Аr Mbu _juW[WNUq h g/ =|[uX="Z *._$R( "!V.>HIsj3', pAvxqͺϼ[ J]Wxy *Yk: ߧ"zkKZd.ckY{23ؿL)Ceia,s\1C"-V1]"B-#l~%{:YDDDUD7|h^b;"؜c[yV0mE|(&v?y#~X(U>88#59Molx&otފf6.~]b|4~K\W+9P*B.C;yd K6΅_"r ҵۓGr_O5p-V^O7'y@"8zZ'|*A+s#=։W i?|qhbL+-R ? >ב"Jqסc76K٧37sm8n __/SRMV A6ـ2lMt]$C8sp{_߅.F b$뙛qKg82k3v_nb9n*t$,"j:*21oj28Xg3Ebe+T<9Vuաs| 1oU>X1(Zk~5DgDyHBu 58ޯ*ZҲ'@$G0uJtn|YZ}VOlNU2<]t!t;皰센qs~,wۀhclUWM\CU$7;)>\;:٠8ڬ_+7Ý#|)Ks|]m㩆}1F1cbttRA 0bL)w,vJ-WoZ"PS.*VbG'pH"vD}\ҾF/<,5D>,_Уz [}Kn h N@P{==f=zYw.zK#qZ]Ab5\}̐ 3k5RFhETgݏ))V\Mv.?2Ϫ!n?_w?w\>H1w`]`_PIؼ[a= ,kwhwH\`R#x0ˁx'`> DTN5(Υ,B2[͑T(R=fȼeUei!a)%& SWd{0 m/u.e?&&0$EUۉ%i;DHrlN1,.ݙ$<$8k(Bcsy\s"2y8=[JTm6-x_\{>¶L@2C6I>"Gc-tnʄnӅ9eH[|5Vk=^r%ML뷟c>a9suOGȚ* "RYG FQEM1GIG}DsN}A;XS/ҍm?,sU+d-OwK 66%!))!%1 %_p74v-9[ܫJM _MtFT.'(Gcfb؁WśE{]Fɠ 5oY Je V=[`*T*e%Izjb|bS׼hA9P烏5 PFb}F9#Q;ڣVپ+Ebh2DvH"[t8Un]IǍ<3őXDܓDʍx,.2-0,//ͮڤڦޥO.w@OGKcuoAG vGЃ)F%- b5+t\b?ӔL};~Vd p,dx<%4Nl0A:4ű1QHLkLkLe$ `C=!!>.}bc< ,n$ wz٫B I=+ȸB>zr] ~+6>[;F=qg~fpt%bn]w*n:K4Ӣ~~^>pl#@':xV_I\WH\V7\ Lv5G[ H =PkEw$@:@!Yױ,4ݦm ؂jP .]/{{,Aus!0wL0dj=sd# ȹlnZ/r`nqẐžyWg4{>E`PD,-в;=~b2x;S_NjsF\<:69y/cjP8 4:öĵwxfa7hSjvO{!8lG/%mv`oF r)dhN|Pjkruw 666AxN+y]fF- 7 Kx|n=e: cA.ˮ wGBCՊq=]ms"7V0y.`&:c}:2(QRcZ.$uB`s̺犣b\hag̏Rj˒CcW`} {۽ގPO!y˘mS͸1 og 0eWnvω'#]߇I?B~F}1&^e\RRZZ穑.eXFߏY|0ŵctvUYFtrobgǞbJ:aA~.bŰ4 (/0_^|L5+>@g:AXJgX g &r >NcX@meT~.G /\kx+ eKEEEEIG2߽kw7+z&. Vh5.Iҿq m49 &ß%.nN.:^1?]cKZVHv7|$X'gȓq.~JX4'jA/vy)q & 6<ƔEhݳ^ N W@ZbN1e.[/Yq6MT]N9z*.y1ӏ#OF^h_@ Qכum˭"MK5RKeo긋-< xWWkyGq6G>e MlvrWeSQng#ܼ##3^R%xJa:_)Zvba-jD߲2H:"RG( ߟ=ՄZ؄'|Hm.+kG׊G])kZFO'I:p!$Yަ)pu`䲁IGhA3y>9 )c[Ӟ~yމ:mm"!)?43mg}CRƒG`c>`HG1{q:Z9r4e? _7]tz!9A~6Yd K߁r;N[D!ry|X.VI\V;̗LJMn{6xz-t|Iq& 1+KhfV2nBvQw^c[=p:G3HBźq~JUGʠJ BZ ׁ~ނF նqb3cR$>ʭº<؊q^"2)]A&%ZPelik1;{/ WoЎlnn<};Uu`}8Q*rs-my{MF^i2M>tzy{`F#!{ou{crBa! 矮 0MKܴ^h| 3{Ocs~,$S,M:1G{co bƢ(`Y3JyEn%e UCӢ%;H5[HJ1F?9J{STm:+ ;);d𻉛J;%dG[$'+38\*NǿPyb %ìJso֩DvNy1DXjH+ܐK߅C&8S4H0XtPXa/[{e9miztu 7' +Qٖꭶ[>Rl< 0ϊt$ӄ)K]`^]͍g>R_b5URP,ϧryKmmri`~0~ fjռ},^,[Ͻ̳ķ(r* 2}E.QQ揵ڛqhg ʎr#gq#Uo4H&PmȎRd]?Tz.x*s3Xw^a^*C4_} Z4_өN|vϝ;jooSH᫞a_2,?ځ,ە.CWJMCĖ‘_c"fide)cd_nњ4Pcs| 22 sfC >Ûb]}h9_,:Wrl@*(UJ5FB:`Uê=(Hα˯ jZ~B'X'] Gf)!;xՇ=؏Ύg͐[nH;~?Gpt\?Z7+u^^8t'p{[w97in0n(ObB8]& (wW<[yy9rԿ0U@``?+ܪc|jA(#ܿgQ(l <#B]bKnLME%a)Q_b^=Km]Lb^O`܍c0Fl1[*9^yP~@a)_q!Oi>G})]{%Io-p5xIgiMYAFsh A罵"ѩjtO``9Oa{L\NKv GzVǞR= ZZ ^i_ÓbLZ-zҫ8FIA@3du^ nUKα* qLs`7GpeEu~jҘ"yI>MƃWM6~~6b-TҲ bݚZ7+uFRnؤ)֯QC6 MXMww$&jT^JD,Xw*EvN;28SA`\v4缯ׅ3Wp\^/[CPûjٍR\1?C~DXXۆ؇9ENgmjaijl`k{e;nN3l}魲&LT13,,:w>QksO_MxWKMC $yG DZ*L#ì;YAŲjXlV|rRZq叓{~q;w| ȵ (JjOJu ؓ_֟a'_`y^b];w)/dyVvۭ<O'B-M:T6>;?fL򍷿zYQF[p<-( D.ٵ'< ]J?tXJ9+a2Cbd1xgw*VWpV㗸sj<; '>yJucͫrJX̀E p X g}dÚG}# Tg(;=L볏#O2rHwkk'5}OR,mUs(}X`2A@^'š1Q ;몥Hl3*ьN5 ;AXGg*UKyOz,~~׶+]ixU11rnWe!jV572J}ӹHәMg"ɗz( Mo}c+,%\htp!}ǹx+@%TL#B*ƿeK4N~hiaLsFFٖ&gVp.Fv_-BLv":0;@Ձ4:a-s$5:nU; *:͢H2@oHޓ1ge dKVk/إ757@k+$?gv(6+~*i{[U)ӫxj:Yt0KY)phknq|ridk_"^&Y].F"A<bTd] bHtX i{:NÏ8Pz;9 ]6cdXR~A{͂ݤcSo(ٞbc+;S;ӻsz;Fw$=;%ߣiX39>y iC<@t c *_74 UtiM9Ȫ,(ϴ@kQ=d?pKuSGlWl{`;ou{<'I3W;xŇ =k9@HeZ!}.m~ȍҤnb#)YLx|hұHq H,oUg-lG,2$WZ7ӥ@ 9}ȕ^J ׃. Σsl_cF g$Hlf~K/ԚOVvۭ<@$AXI1Eu~W3.0椂,rd(,KN萜եif s sx8_XE(kc򭝻g+T{$ '8b#v^Epu4eZ$iu|2MLI>0ahnɇ%eג_6=>MNdoیkͦqk̗S#A_JH IHIsHs HH H H闳%L5𝷱ό5cN(;cLStswjq 09xݏ>dm=Z R=)019.'^hi/tل 1%+VEN (3*ߐgtꃴF(t=>>!`zZ=}6Ǻҵl$h; bZ#}>hP7zAJP"._h nƳ6#6i_p{Ճ̿e&PAp求v/u GiZa?\2ADP#h<\1b Ca\G3{_lQ,Cڔm^2H;(Cy׾n649F%5"s m]Z9vG~tr(:[#]!8©B}*Ik}|r?_!vmOOgHHȓ'OpNNΰMMMDDDJJJ7?ol," wf,WL=\g k%2oU똍Tc䔘k.As40|AY*<|qPL4jplsyT~ sšV'/.:m3 peݙB׽cE\_mUu] LB$\kU\Js\p!behBlǂc}/_ # Ş8歿_CA DΠ>a zMP@ՁDĤ_.ef+}dź';|]YMRU_~TϽEsftD[^g5T)(RWְPPi!}Uwɼ5Ot|gaF5OB(S@PezTX/D"]йOGg׀D &3jW Yg_tCvT) j7 ,*BjTok}1:hzyI+8_=[\hYnX{]!ot{TJ>O?69 >utA B0#[.]Yq.M3ο _61[QOҟXR:OUVbnEsޗ<`JȢHޜ|Դ_ùo_4E3-ѩX1v1Z:qQ/'|'?乜8#>N;ϳvU~J,fHTdxnEH GW)t*[#hf6vץNP̒lɜu9 T  @_G sX_jMuJhqt PK |nΫGnN[ԴP3#֥U1Uzfcs es|'@c[\_e \BÆFH0 Qw6{j MCl|W۹pyT;7o6 򚘘oZ2fla=e,{w)W2p9ư8VO?^If9jV㾧Gh&%I<&WT;>$)ݡZX9'#űT څH0|yv[8Sh?ᗸ-vЭ~x{ QfȫADG*1,a]fpǵG0$N\WI*ʋx.mc#G{/0#(C"e6֋&0΄׃u n9a_t}Zlj_롢~;=1}K^hhe"k.Pn]";^ٜ A)\'gm2JF^}()B>jM\/Yz/'Tt45/-wD5]R hfz|c7 AOG+Dx/؏xF~{̺9δ5#:Өޛ^aѩ\1#ٶ? >9|akb7So=;J=%C'b{׏?WIoo..m~,s;t.GHA"L6nGw<,& t5RTS3~,lbpZqNvF9$$.*;S=!uqʹ)*IZ15ߢ9/uP>(Q:ʠ,VELo8a|쪺?Mx@ ?_n_x[ de'JŻsAi O@Dף?t.0'8V{Q˼u]Q r)R- sjy =`B٥<5;ZDX@B@Kwt3=k(Ml>T/4ʭ6RX7 کƭ86$V&Ͽuըyc0x/o dO4Ɨ`uoRN~CEh!T%N vcU\'= !+y+۹۹|葫kͿs#'OldaaILL'űo>2f9 QP@oXy6}۱C萱QbI ̒sQqٟQ"w,a;S? ڡ9\ #t!r2o5 {YFyʓ6h^30gmʷs}p]{~Aa2Mo$2wbq֣y3(Ty7h}s(dm0 rl BDP)HPIA%<ná{kIi4 ؃~ZEŢ~j[b9 ^ *^[\lQ-+nhC@a"@,%5(j+@ُYUB8zWXߐ( 4%EG T,B/:*J$EIIPiCcfs:w=?揽?g_ךugXmH5s!ܡdP{|x@0d!{#!HhQt`n=Q= y˪cbP1e[k8{wVΉgHCiC`u_".Bq.Q.Q/P#ȇm9gޥ[\y?6~{om9 q-6,9#ыA)}[rM̊3 yȋ.DGʕ9݅Sp~8}잚bp'Z PBT.؋#Бg-^D*~$rJGメ+\k])P(TI*$o⇕I\g+^J.UP5+aU2sˤ/:9ր+Ϧ +Ľ/,d0Ɵc)h֩:.lAnrGՇ_c0)ܰFg\=Lvgyzq}9'BR5-kۯoBH NUmqDhtz 4H9@C,Tj7knff8xWw_^;"4xx82"}mvqIy:>1Jz0i%'kj)j`R+,Q%,_/k?C`j:FU0+FhZ\Tj6l9nk(njÚ%^~Y~$955z$ NWnhzW"T^!SUe^Xlhd멓ڤ5+ub_&xY"lXc+WS?|e2:]/^Pk͝w`rlM8/ʺ2vbrn EIfSceΔurTIVlLML^(to-bo/l(Ğ]&dW :5>4s?q9sp9Y_/xeGYDYEYG*T20Y~O5]믓UG8X U@5 h*N'h~T@鴊jr[w!dyVR[28i{nvj l l5lecTuL\V[F}jrYpppp5 76P/7C[Xg^wwliW)1Y u*tױɧ{@1?ÿl}bd-Yg JT?- RĊJab6 b-&e1mrPM+?|g7HSL?;:"Z|03N=4оz'qW u̜|~Y~`*qy :9Zm_}]n)jqi `Xe>G+$[ ;4Sjߓm]xԻ :9wܠoӀEzZ|\|~:~iGD D E^TBk6F7G@CRejOo[svvP(⢫ I7yC7ѿ9C @] SҊu C "@  _s$:K4~}l%՜E OHfW);7k͂Kefs'M|FG,in-U ol~Y^uY#GnW W G:K!Ss޵X0\ C'7P󺺛&"XQ`~"Sp"Vz(T_])ѿ< ]ȯggϞ!###`0[[{aaa.HFFU@111V[kkk!d/ἽIHHkf#7yB /_T%dEeddpЗ/_a#QΔ9DXslbeKX(pY`6treA2:_(]@ ~j)RE5lm4}{x:ȷ!Tgd;6SjhG_msXw[_PMvYO\-_?&w 0'ș6Y8G)gJ:N~gsoBfso~59򃣷LnͤϹݥa*QS;;OqK;Xv٪s$bf5hۥC\-&ǟt.vkuLj4U265Q5/wdtMPqHE 8О*z}NP/Ot 3E2¹=ؕ\ҬқM]j,kl{~88Z{͒_4cBiSq52y z 歯iN;H !hiW_2{X[ͻ 5Q\9d)dF xWfG8ĺ;DxIfsW>m'ǵXeC8,+VN<x8,VTl0d0ku?Bhi/,lIh0|}Ҳc,@4f *}M`Fs+gRb .rhʪgӴ'TOViFiF*z8b۸?TId)'iuFzZ:ؙ[|7focmkfL3  F[[-t$ @ $;YkVߧu$9U Qkkk al/驇eee̺qppL l#_W#oii ;haa!**kmmǏ666OFV(&&,,xC7!Iw>y3I|7`m~qFX/%m(wFm6qlDXh m Y@{ sy䃞EŒ-Clc=sG\:VehyхbA #^&^$na)2HvHnGziגiWIL3#c4#l##CI?0+jvv<]EN1( $F@k@#`(4jF{~k5s&W(ˆ_{>MTs յbco[IMSG[_wΌP6O_Gh%V&Az2٧S":d^32Х1D?c b{c$&=sD؇#"MK}mM5{co#"d3'::  ,?ӔtD(99yhh(;|Ç\}o?SSSdddOFV咪{넿͢@7P$L.bFg^% #O<'XsƐ; ̔S%}.s&{"pdy -LtE1'bRb7q*6-E%|]~=Ke%N{nu/{AXBΰrėt2ƙN6Js0)oRX`7F95ov KjeROxsZVM{tRa6v)ږkm3>+yE魥4|/^u4S/8Z%s}vLZ*g;R :2HS*i/~yV$"-&8 FV .yWzqу0(gApda畹ѾVŦgĖN$Y[picaW'(tn!hJPZ՛>-fՏV>)yY6a6Rx/ lW0O.b'_{<[2{0}6vtc,jz] \ Czq0NQYaH5Cme<B )i̛tӤ+nPVŶζ?,hh9[nXQU'4|h~[ޛPw{;p%TQΐW] )FNSN*.n.~~_dѴo;EmWϿ 육kkXT;;rB;uFx`Y \0m *&TI6xZ'C#M©EnfVGhvg(NxއYM&0yɀf#4o9 P$mtVUCs ;.i&CSRSML҅+_Gv=.N|p9Mtd swv\ V:z1[e$hPMWK4EW7)tj*k>IÜ<\-U F1!lD؋+9H:BV><ӣm|ıvJ>;)oSyJddd7k?$O$%򷪬|?yu o!P2`>w3KCiVG{ w3&z%R{t:8ʨrс$Ah̆1B_4x*`-CH'gEސT˕IҡƆe BH!96 wNՄ`AHZ.Ƕ+iBmiU™ n7֪Ilz]$J̙oY뺘kW W|mVu3+w/=[1$iO9|}ۍ3ZTwCXfVvcۇW=Li0iG,"Z ̘>D9O2S\/= > [ck!- ۿey*w'~k`6)ۏo_ _`QW+[/üF$'I8am8WMTOtX}ĮGh0z ylTFwuoR̬E3H)QI71wpw)[3gLڶء Q*F/ ԵK杈 ^_H'\*E^j Sa8n ~ /QeyVun7aYPߏyh&qt,>85;IT\OR n 0DcFiso/MOH7ȃhǘ{8uJ :!Wqaˆ"uX+{$2侵V;)abZ\P2'EKL}Îm\_,wcR,N o?} ,-=lw]b5kJO==?=)9>^YZ4T{&ްnn*:֙;ֱ=n%[I#EH{VەUʞx8 SɆH.Ń0I%n&8{%z9;x|F~)j|1{tIvJ}t28@E!0@1 .sвapt+Ls7xGLn;Gwk|};bSBo_n:پ}s~LPw|}2DV4s]a{owügGU,#t+G* f>i]ZxW8y5dsjw5xT/~&z[ߝ?}?hea[;!"Y? 򳵱73.1 kk QD ] H" Yo23X &D j-IZFnjeȉXPYumg+E9_۩I2d= &tNOOznY.Ǡh2P7}[˂O2 sMֿC*?H^ȔMQpU/ٜ 'l|ִV-NUMJU HUuHU4|o8JⱅdiҘWY=ZmR 9o[(sg0S-t~<5fs쪽e5d^kSkXQFR~ޗrh$w§񯞽`f&FƃFj:pgQDp 2'Y:EH偻(XpGis q'+%IE5psu@z3+\s#}= *JTq8 Σ]S Zq3}?|URHUuIUMLUmLiPWV,k>mH R%;*#8Y|HkMeYI5ͅJڍG D[8.Ǩ0,-/w^/Lzx ww0 qd];4 b4t䵆7 c=-U7 *sɴ㏺N1vpVI;d;ߦTSq^_ gQh yu#P xa S׾xa &C" %k! I}*lj6ij&z*dw3:j/Jљ g5po>-%~Z@NJxݲ[j Y`9&]!]`d5no>^$Z3:A! ;#Xx_DM/*M>_*Y<8Ij;N]0m3o3w|gm~+{Ykmc6CK(Gv˻&ǡG8Ǹot"G4jyI%Qzܢr~ez^/ɒo}Wz3IJbz6ic{\əɷeޡƻ'X} d eedݔ=`'"5R=T5@)qO9Hvp_0LbpI-w |[Մ;TwڄJ3?g~ː/B}<Νf]a[jcXZ"YXamWLuNqIWɋ˖ɫh54M ({ 'XqYKIҴ04ij*eJCܺۤAwTm>?Ugϓ)M} KEAÖ#@K5胲c,CRm!_4YL((а!EWȞnJ'xدUQ i_r>5N!"'U7mpHJ$.vX3/mhmů:'s"{i%o֚M>ώ0QNx-*m8$p*;,;~>H.Vk5)]NVm׸R)emccC>2*a}?7ݗ-G%Y y]xo+q'S!uS'IPBLD- ևkq#$mB|th 5C)Clh/{lC"U;1YF*0 XE8FTsJ׷r[T*H5{}ulE8KyN@֠z[", 6L } eB @;SZ'xeꌲr4CD B-^čzQЯlrœêHA`G]/QEI!s5nz|5 ۰^0l 3>Ea?1[/aIagñJ5HF>Obv?1qLc6,0Ǟ{xэBO/{FI xU{gTGzk7%\#YPa((Ϩ1d:2 v[c%p5K3G8OH,*7nWo^鞇9m$l9[{x1>tqa"> ۗ= tqg.vg.Э\qc1@mAI?07K^ZA_'m(Z}J=%W. @΃7PuK4a\`@=_}e&,DH__ j>ސ yF7Hz |2W,KAxBM6F#&h') h,[N8գMۗ DWaYDdS'<ǟ:>ӛ𹱆;Qc΋kt(>ʴW8?Eviugc~g8x6X*}D-}8Opl Bc= MYNqI*jD=BPwUB-H1gUxKYdO ݢgg#ǘ{l#BUjcNI`uΫ/qaM6Vܭy,o#e#GFLhܰ+Г!^;d|3zѵ#.#)o:(v,pː$4v~ahsWCoPfgjqJ 9^&ig>p3=DGD-r1l$(,R3 !rdh3m(@ޗɾBR'SA'1Ӓ5%jK6Ҫ=nJᙊWKwv7p'ϰ:.1XǃSV:?T'j&yVW6WVWēR}}0)LRJn2~x"fPnPf mP%T)_}GӻV>qڄ%rEܾOM㙊 sf_>nWI|uE^9hokн3V㑠u &o R ]Jp^SNM\cp[9Ow)ݯZx>{fO}iǴI4eK] Xi Ȃ(¶f9[?lpw=3] ?e\gP !:ƞ":qbE_bXOY:4V{'Jo>h(D&J1>MұzzK~$)1ʑsa-}w_`@34 <5@Z^*+:[]@$pC7эn?J漵cOR`rXFHrTAbmwܔ7R?pVK՛Ru6.ʚL_@ !O>lW۠]п?bihyC[۵;TIq&3._vv<%ODwǞ։qSJjZ~axP"cҐ/>%f!.Nr^@r@(=.v\TuGȶq.JS01ǜ8\Ɓ5?;$_Nt t5(gZF96 1gc%ʸ}BλƠ?""5mqCyr ׇ8J'D+/?Wgh%(wL]2q`3z@au^FLegwVtC/0DPD2T&O&3*rreGFwG `i&;Ǫrq2@"]fbWB>U Fa%ϓ٢ ҹ-ܵ&y hz)hɴ\j|:FrYkɈe0!X?Atr3c6"O)Fvh6&WɧI_wKiu%TdĪ9Iz<zMi'8:x6[9N:Xýם=+Mc JL[y:9·Ɏw507mSͰ aQ/Sa2E6193*`I4{ C}uCL+^6o+ݗ/`*^"RޭڷIl+>XE|e) hlR>$S pt9g_6qS=`U"L.|zlxyu`\˶+N$B½eʦ5;Q;d{$MUƖE%suͮ|UG >& GTFhĚygZeoy`dRAiCTk aeTJ㏹/H}[&:ZXjxؾ 1QH,S"GKDzLScG/ {)2J!E(El+[dqn5{!SL9UHzң] cO|xE],5;/KĞi8oڨWg 8y~/{DlsDwpymf+ haTh %//8v!eCT2$d**^+r z;Q7CIGZ|Dup]uTG/X\+scauPRh֭KTw }DWw*3ĝ>G޺u@p~S~5!|?}qdojw\Eo6H~6qȟ3~#?omQ_h 7V,sI:}$\_YeCAwOf^Rޞ7n*l[ax^v,=h3LHHPP E߶Z2kZ/z"0yefS!pDc-B# >z0f7y<ɓëYo$;(f 3IfW*=~"1A/ x\#;dj{mX/*% W[`]H<:fHU6XXş>z8>>+8P)ۗf6n{,Ձ[0j Mo't?s$s8r`p{3,~yuCD]S0 @?NK T)p@ۡ!0G [SIqr `E2|rg ~";}2%נ8j+eXM.5T]I*5[Bla{ ӌG@`ޏ]Kv$B. w\*BS>f-ZCOtϧ/MJz[RUm4_iN9߲: ڹGR!h9_M~>\F}Տ?{8J_4 i<:hXp<4^#%?qY1 .4%KU~MQ72OF^ -FOJL 1-Os- n} ^a1nC}I{r[`LHW G _gl}92UhD}Zj=/H'wnlSmQ.n[޼O4w3s1wyb;5w&  9!94ߤ _bb_mzUsi@?u&zKwx6r^R 6׶ fYq8+%98%w+Ops/ Xр-0Ah@Q9 GH|C|h۰KjPY@Wc3ËȒsm3(Mxv)ߙW/g ο*$o)%$o)'++)~X4jsښR-k Մ(R`lNԋKހc٤!ܺs+ [O$IUqh˪lMd9שǯ-_<4jc3ق8,| 0 hI)T~_ 헎T2;g'|teR$|}V420]aq79C;=W!ݐyrq=uuѵt-L鷎qudxP` <[j1I%R2#PgϠz)'5["[% KނZ^<f\o; ?5hupO&vԜnQ>-)ͬ3h)K!+z9`?I./G&'W(;][sxxsl.qE*eI`U1o H͜a~zۘXy* 5<r/C WڌR̨^ܣ)5S!V)\E3`5{|Ab$WHXtSKyv罝17{6za&~  <<=RsENTvLwwz܏P rb1z7H?4{wbpBɹ#y\` 9l!{YwZ'C[ ^-#ME>2xGMhCCd&V41IUɞ5@qHU7ûʺ5Ltks3A+'-0T4P3C۱9ԧ>c\ ?gMnS.S ֈL 5il!7p| 4pPNPJ V&lnyK'_D>4P@HCp B(=Z{ק{Q娿JntqDz֪~*|CJF5AkYW"\'mM;5k4;47 #MB틽]]=~?C"1g HD刧XY },/zQ0꒕=+Z(Cx) fv0[i,Qν3qڴэBt ]<̜\="ռ%J^>Ɵ֠?gRr!RB~KD)uBJ,nFF7 7vX}ߨ]5eδ>NNA5~EWBJ#] % :;(IC2 i =j!? "r(o~I-(rdRt]9\QX*7ɶh;I*1"?+n6kst͙M4beO3'cǼYBXbYRMLg3e2.d{Dxqԛ6"]ЫݎG;[+۾A>6.m nI^|8 ^/Q;4AQ|5\iQ=sUo'@h {mHH^zvS,ςƙhV] R帠/4 G*뎊YCe.ZzcGdtr|veuHhVR}hlH1go?E.PZ@7GcžLMU. -d;#lsMuEE'p罩T){K]Mt/vAGnPgl 07 Sc%l?}Q7͎bz+ҭŧ ZZ vD'"xjڿ\$ WPo`.\2*Lxli(hL6~ aF`Qܝ=BycfOXN` R7%ϖ^CKqfPk,֗cMŊEDEIAj3ȃU9 @1kGmp2"d`{kjQxN9gwM=9զqjҞ3VZqiM s s ssSsOfVLdL hv$/9G]iVA?usO1Y=P #{5L/_Md4xlL`Vq;#aҌGgfgEEޝ;wDž#oBzU1a X>P3Scam 1B(# 8 Y5M$zXqF/ǣ޺lO(ݼXw:UަtiW]}VF]ݚ'}&*Z+4K^ %_佅Ց2Bd)Poܯ 9 PXT^E`gg?\bL:L M"@a|~>AdVwXrGu6Jm^ne'ۼ;ʱ#Ysi"UUG#|Ec*KrPm%cg˼scZy"Ӓkpړ$Ho!4օ?"o,10Tvǃ}RF;LztcehzrLAJdƲ5c~جydaB+-Ĥ3m췔a&I$_oWHQ뉎GusDIۢ{Rck<EjXYճ­˺?/¨ZZKS\Vkr诏zcB@gi6i&h:ԭWW]H +` 蠱W='TO_o C>mT =ʞg.1 >o"\XM‹ )9&o߻?I޹w0 'Yވ|{˂]K%Ӎ{۸[;oRΜT?TZ~{‘{A+N^Rɰ^h웹lج~ =U'ؼ%u^XnzRBC;}/68% = SgLg/ o[O[fFGU)޾hHVZ1@DB>}@͍M|RY6. eW@bPa^aF\bA#}Ihlf3*LZGߜlO]Ɯnh ġl$ffثlIeWw9 y.U*gxusKm@* -ʠ,˒vǠ)=k6HS 2l-v 5*s7f=#\5 )667kflZj\n shr 3KR]qv/aŴGi_ D_ z8Roߝ|{D{FkVo%<4Y%?f> Yy2# Y}#Sk=Nu,Y-C+R>ӿejMdX8Aq/^73ƫLXrk8&>-y +3[hhaӂ*D7,-Yџ**B S]я=}YkkkZZ.''_-,,HIIቈlmmݿ!!%{.5s`0YPPпt1.//*GVyn555;7 y'yX& b?A]&Bn 9[zHgX0} $Tw\o_Sp<|$)߽ĶlYS܏,w.e"f  Q@_uiFu_nm~{gtmaݮfF+ Bb"0WD;)[TEQu۳tKz۰}7]mDYbuP u7 ̙,Feu,#J8|"ZR< [U"Ӿ|o|0Oqo9k27K{vk YX>[vwVEF YFeUq1/ 4F'iP%&u@zWmeڶEʆ[GK<3HǀMA*jE5򓃓̛BonRM2w׼ɯw(J. ]Ckכ6?4@=|%0h?^$rI ~W[2!="vjulz^lK-7EFYѱ-x_ml=-/:^ Zp,>S cϪ=vVH omPIu8fRbZdFxVvC(sjpnkKBZ~o_نZXQ_G^;:hMss٘hI^ǹe:V!d sc],= truM\\>CY ƕ:kN%іWW6LSCðEA\˩egt$Áj$\Pc9[wj69fX;FAFa~5~nMctP}+ 6#OCw۩D7] wɎ`; fsA|cVwNpp_^>_{7\#}+Wο=6:Z94v4,,u܃ڹ};!WVPk`ѩ=N$_[qI[u2$>[~@q TEѬh&4O Z -Q<|||$$$=yȬ{zz^#_<<<v MMMל @̮*ّkkkPwrFFF{{{!!X>еgqq(ۢ6665u;}󬭭kww:u ywdUDbR 1HHAǑAH:wɎ׈+'mk<,2<:B[)>:~z"1_145RƘ8 CNo8ǓE0øUzCbڵcLǴvȎ6I!keR"iWtFJ*W[{It@U°4ٮsoо#][c7D,,mT8=;6ٌo7;rIwtCm-Xw.Hl1xOrv~x1@s{ b:B'ZQN\=|s|liqv{ 6\$1R(5ǹ|{pyʶ鑿yږ{؞0LC$+—$T':#H@ [Έ{Nn ߝ~ /4{,2[Gyh٘!Ŵ/qcIt¼ąLv$UkƳǍ@ CΉCNIBI!rHHo7. ^. /2Q ˡ^^g.Q|h}z_x.we;8v.Y.-? ֪5p(䰓`pMp8Cp\FpÿT}ǁBJbLh$:h%=bL0<\swjfJsowyA]ˀh$0 qY`/Uk@"C #e4~ DqʬM]ɬr OaRH/)RO m(Y}N>KݨTYn@O=K(.˜jrjt<%me9G86f\XX˾wtttSSS׬x޽CMM===oN;233s]-ynnn_5;2;;{C7! ~N!T^A1݈iyM3,Se➋6Wǹ@*AA1m 殷 GA'"k2!?mTkŪ2-[:׸(g$=';dl~3&y^ }yC4ܶ=Ofz 8N (zVS9+qo9e~`sYG+0>h-Ҟ ijMư4FƶB(e6OoRݹDndžb<[tmť:3QƋ!f&{ǁF+wAځrƶbrJʼfm_VE"S]CL@Tbh!Cu͋>y?s`"a8V! oes9^8]E#2Prחy4Sa,ΥƉ/#8,3yV>z=\7lZe&4&̰od6% -VnÃߓrCDDuZXXX/kd[?u]Q]H<_5_uF7!dV[N~r@t vїU򀅇= T5 FS/&e~+2Q+QGdLe-x'H#>GNTbP"5piR&L}FWIu5bu5eU%2E22*F֭^NÎ1"}eϺ-0LOlru_Ԉ@ʤv e/&ͩNmݫj,Z}BtzI4WfWy/k42eu`a8v޽ ζ~2XJݸaʓ|PV1=2Ue3">TRӪ"+$A_튿x-Xޱ:i]S8e"HKWwC`TavvJupVY|hlAzjpCTb5˯2)[+?I.J%vH+de+>ųAaܙjej+Ric5E FO&Q1IrEy3&|Zt JTǴ M3OOOp7)K*Ց43l&Pb-7@&,_2T39X/H)!M4J+n%qUwM9|Ժ֧X%3xloyPʦROq]2E_+ԔJ6dZMVD{ >%n.0ˉTIVPMT)^oLl=rvF,VatMzCɊMYU}y6pr`$ZJEe~rxp@Ը^չ9y͙=@&?QC`Mз=o[B˿dG:?W+[p7(q~ (66I廎 gH-5- o6hq`儰9`n'?'Ar/v^-xWGoCf7cH`I6Xle"۟vUn&d3" w59W=JTJ_ȒϕWվHu]!;'k ˵+״rUI}8Ke~[_ |Ccpݡ'/z<lvˏE%3;F) &k!RC=?%s;0Uz1X7xsxt`}^9ߛU 'Ojj\B<pe"kpc}C}]wڈ7uoC, ITL`~UoMPu*ޝ&aU_gu\ B*KxLzy4 JD`% px8v4; 3_uPу/ @$@ $$H%H%; %{w[.pki9q Uc!X]L(75f=_pM36nm/VM84}Gvg~֫'t ]Sc0QwIG7Bhp >vP{Qie½CP߻T஁q [eHi]/wa'CbkמMoP'&nW@ y1x*kFNHΤvƠE9,^- ,e?o.QYL6G79=1Oy0y_3\=W8&[Ƽ̕h>kƪL *9϶[mC.^#V0pj~4~PA^N4gGs}tdemi G >cn#QZhI| >:d> udZy 5(QQ>_d%fq~o{'^99ǚ `0F9v 2&t hs\s6Mߣ"Tcv=j tN礍 ݵ(ib8%^\6=G; ط`ENَ swv -r`k-Dc }P`Wڲ<>|XZZ@ .)++DDDY-$$@.1>>.''( ~LKKzC+y޿/~KXJKKgϚgccsًt_z\}TPoP]P~PBrb1HY ޗ Gi m2?D {]7P`gK`R/*i͔Iyäavɚ$ROB.gC_&,x>f (%/V~?s@>PcmKw<޹߷aa[jU{D&IaQޡSr+ gύ-<.[䟩Z>e* wPnadX~ʔUR*y;StI 3P ngiwTԧY5u%ŒSEڳ~oKb /N%;Y;r;ۚAfn`g=XCHӐ?b*'ZFV}J~`hYA@|F`Ѡxv|JZ\n\nln̠nnZڮBTNwL%>U61)>B=xNVgL| U%Lb-1,V,_&5/C]@:X%Q3O9{F.C"@fnz'I}\$ٓndiR;7zB}J~:G=G>Xy p'6eQ2L ]l-`- k;?A|鵼i~91rAt?±6 pc5gzlb6jfU 0i&q{Y2J<"eD!ߦ+BgNTjЖ;4H.XYz@UvTo hBxӾ[PڌM//&!tfz9g/m/z@KIrSts~Wp6tq+)YO{MA4:&i,6.QSV+_%8QR2d>5j;Wf]j0j de :A(c͏>2>Ƣ&Ձ ^]st!}]؇[.3Tcci[#]'ٞҝ?n54wz(r=+^OD*5 DE s^gMKE[wF,{5Ƞ3[sd%$^D:akn<4M(hs憰o-;M8+v~j#Y'{?E._1]sʌm!fu~V#..h;W5_ղ\a^jatprb 8Q#]b.W,(\VI.2L "R]4:=$Xhht WG(W WgיG_!*W$y3e'S/'o._&Z=G^/E )#AHpbc(yOVu^,d{sH\u˼%6/+s/֘坊'"R/Ry'b{.F2.􀘦@k #PoUk Ad;n,M3K$21!A{ckЅHw7T '8YRqG%6X eޢ]x9$DN3y~IV&'մ;>^;Nv㭁ǛS7>8z gDf$mBSxBfA7͸Mϼ Gi\E]3ѝLeFpJtLD>S򦹋;{^&-dõ9i<[{% ob 'ع ^@ TUp=LCl陸ʻs[ǦȆ%>ƫjk'09Pz,+:fG[~875Dn.fόmrDx0a/7T8D̾ҝS@0.P#& >CraJ?q A8 d%;5(9ۜ"'xd55: ?aA ! `P-9ygّĵz̬ܚ{s>ʄeCrckq? ߮ΎՕwNҭ?=^nݟ9:T 6Te~91I.yYe')Vp HBsFv:m PwV,)qT5254Ճk݊a}tf򓦒om:&O+k斨ޤL2pvz8ͳMO~v{~myEҷUkURdB t4ݨ*KhsQ2:[3\#}3Cz_^L-wmPBgߜ|u3"z YUTkW|DŽ%+It_؏7Y pݵ ?@Hrab1}oöG5k_ 1&>Bjc _궲בE"&I 0YR ]p /` _FWw3G~;{PsS}ěo%-:Iq敶B# 44TYedHhF[༂asl+/gbߌ:1g&+w]BTw7#jVWUeՍ -eELL,-;6DFǬiUNtv,Cxp; p^l7DsDՏ}:!oͨD:;NT?rG 6L=#tZsFNo9}#C>!:;*C*^p*-ܗh98B%E4dBV~WX'?!͡ݡӡ˩3Vw1y}tv{*R.y$)vK'h8jy躻x;K[n[>y򻄹*=h~6H3Έ}{0D3;E yTdSb#l,mKל5ce7hBj\5Hɑ!h0K@!{^Dt粕'b .󣇫ye:O{/mFD!Q.{K ŀ`3r )q\@0P&,"2&@,Re0I7I2$-&?ߺ V?u촑x]yPxMF6,Bp >2ؑ]Q-\jln'۝kZ}kwOOufJYd `L: ;=PʣiGJ Yr9O#Wn7ʿa9Q ȖO Gt֧fٷڅ/blWo`( D|Zi'٫乛whJgˍ{B' K" }GLiϡr֥|3UiGA`0hH#PS K{?Ӏ@%,M]/ y2 NT)’NU_;YkPߋ6PŵT/=m\Mxݳ\:İ9v!wX~1W#x=gnb T[ϑ_KWOT`,1H 4b6\ ͕Re/Y @Hd7okq>GVxby[s&6rTc--U)Β;',J}))} azqZѹ׼o>Oebr.S.I4_6/O{No4;p<8in9ۥm܆9a.CL)b gAJ'IJIj:K3AioxW=C?x+Iv"r[.gv03^$Z34H|BLhxK`Yw Ոw1vtIصUQoBjo6)ORE~M<˅[M#NWonE͢YMzAO -{OKifK|㔆\?Y x;=U߼3^wF o,iʞj`jly\%Xmo!;fp֏lPCcmS@ :QN ?.t.GvB(&sDMh &> Ms>/~՛Um4S Md[|B~w碃`QiSc5C(KmFAX[gλ$@o2U u@a^)ږ9C3I$q9ݏ+O,;z+IJUk͐pNLi2i%=l<5||džjD(aq\J t)b'KwuM' w3L=ظ^rkvʭ0 \ѮrOjeǰt!1?y|W,27b^'bYDzW#YouqNP،^ V15Wu\KnS [exͱX/%niJɨRR2?o[UbVЉdRP%>x0 e/`S{i{t,j a$gvlݒ&]vM.`dK[/?OCl1ĉ{`eɊ|`2'|*l(8 _KkT;"G:6^Ä՜ >=[*b:0tz?T,}\}l} MCBCtazKa5&!!6:^V$>HZ[y;z nXVEig%).*dwգ*BLm"c ?% K>~Z!Z0V'uߤѣQ]0 e|; o;9au\TKՁ,I- ١0 \A ٧ukp,_0Ntvo<M,$"*ض۹ckb0򫸌kPLbİdd[Dav\0O$oZ_Ypo[}|j:7nvklutXRNacs1D*#/r62e;djz+2/2nSBwUK檮nM دu(pS^W[..ʕ<%XS [k[{ҹFTtz?P4Ųb{N [Vтjڤy]0Y.WuXtaT#} ܋uJ[jJDiOG4K3ȗ#^S>idSQ:N٘NS=W2B輈 þפ0n#"bd/ҐE[7JTrt'zzT~^Ѻ߸B] LdJOV<2A3˽$+S]r%1򼡬xIuoa0nu"N^n+m/Nk' 3= zc5V0 }a J:<ݠ[v 5ngY: 8=dh<\xf g;o}pA2{(Fwq{y랱;Gf7-:sFC_`o!hB-LzS=7CU}%sJW$MY<4c&o & ټA{]j?cߣjHf9oq~G^W#'7o~0s}/나~5gtr`ypV>|46q3;:!#kp\~u❼t8a~$0霤xxj{%Ҥ'wՎ? HeͻԬ=sBIʏHHHL8m:-} #n {3QΎ v$ijQzנc#ՍDG5~Ym΄[I ],Hޖ/u  8ͬ$;lӘAԔR4g?F\| I|"{XY"tii3`'q.3rxSuQb$$$E2GI@ٶoQNT+1=8_<'U>l2-bt D:s(}n%Xj+_~i옞=C%i'(oGku}):#.]?$>_A?ABPPzfv˼MiC 0 ~V\7PS|fs-RRtHiUkUTsm;mCf7= bxyW% BWR.2sMXצpaə'ի$1Л4$^=$ Ԁa@X+ܽwG5G%LGx!-3dalkGQ.fzojZ[FMsb藇^4,A[tcOJ*5kNۛdpIbdAvA:A3cb<}~ei}6F%Hmxk}xN=H?4n<8y [CwHhΌĻce=z@ozvUv̓u$~Y푳QQ+/*򬫫yÇpx%ϫ\<񹕈SvdSL}lS'9PSgbm%*Vus ĀcA:),vYR95;;݃uSŃS}Ҵ]̬rU#o7"^-O{0&iUJ/uZ]nSI3wk#[Sʿ7vAvX-.Z;#"0Nq44=4ʻ= W .]#˕ϓXezvqJ\c0(+ b%$">~&@<9=>GJ15f`C~Sx^MӀ5R2 FѶ.zVV`{&<7)߀:j˵]5#<̫ړ:\--Olwo<Z}6LѰHY@86zZe ~%ie7aTꝦ꘦jfmRT(2;L6`l䘢c? wffy୺(k5ٮWQ)8n~d cr0L%/}Ge v^ǣK9!&ݦlK/~If(V2OY,;4WgTM+}OQHSOS KSKSHW*KWhɐPO2- rr41̒W*Si6hau_bsZNVChV#l]xһS;YI~I3Q3!II^qOFmܥc:f^A{  m A|rNx~v &&]ʶ^'hˣ/V D>&jg8^baT7zic9]-͟ZeݎCIBH*yՆg5? VP/k8 du[j^A^̼Ñon8ޅUb@QX5$ )_-V[M_6/_#Xx2y\J9+9k?4cZy6gKE }n%yeV S`<9hn1YwKlqLJjd߄Uֆlҗչ)eڊ].D4V)\ꊅ1[w7Y3qkU<*9.^,~K7Pͣ(OSWǬПiޫeo//Yo﫝eon!,*T]ٽ6qY֑/Ser+չRi`$[O`Ybؒ_|!|ߋ ȓU-rG*d6B`΁X9*լpy$Xl* 6[I%YbQHuƕ秫DGwGe(mW',f~3'nֻizΓA"%@7%L^&#ϭo:]PG*Yr>`XŢ,&ߨaeCYy1^?PcQ捚 JÁp ? u/IM׾V>^[CLnʋI[~8_)et_.}ءacg/62qkIMrtku1C-[V2Cm/Ar+_zj( Ye3ڵo6Z}3uui7ģemʲA?t+~j.笪c]jeO_y qѽ jr?K~|+H%B>ųggg.WbbbnܸAOO֖˗>|EDDn߾}YۥlQ~~~LDDnّݺuKNN6P(sssRRRzC5cLuuuk_~ϟ_vhejjj;Wʕ<;tMB"qɝm:\lޅOpx 32H{EC$(("`@AT" (HdIs9s9ǁa99 00 9jש{{׽ջuNzjuW^kY<]rY^zaeϔ?oL ;  o|^(PaB;|$k){+$L#- 7CA"onZVɊ5l?rJ^4:ᔻml)f o~iK0H?[$FblxX7@.zd;S|XJRE@QJG{hzu`ڱܹX5U!|z=,wd\cP"2A=3QPt,:& cq3+߰44 *7K7|ƒ~.gE=Yu5$ P4\/c=qzZΙ0#B}&D)~ s|GğUn<9X@չpnqD6rV}ڈ}Sèa6. `NL1'gD7xN|!5!J@$meN(n? C&F#^Cfmv]Uʧ>սݽHQ3 yk4Ȅ%@nR.n?^2wOKk'Sum;x+SP??[PP#WūW`h*+8uun6n.k"}1'! rwx|!a;=5H%ȝ\ԗ@L+sd G/{U=NRӶ+W݇$W{{DW #pp*Ob c{l%=^ >$ /%!vaS3sxWIɳDXXSVV|qJqypp`bbnaa˗-II?ŕ]YYA >|{G%$$p^677lll5=Ls_58G8wyK O2~9Q_SQ?_aUQ1cqtkhzs"1O+  z,EB29CWțt{>63`NxJsޒb6Vn;J WB)bi6?ԛի~șqdaq B7D{^} 6{}?JΕZ,/+z:AcADyd.ƊKAN0@'+݂0n tSˏ7N3ΜapZ f2홳:'Yy%7DjZy~[actv V4K֤n t ՏJWKUZ_*Id_?&?zfM%6 č:r8Yi4}+n>{dsaz@V'co|in-mEl +8* =s]yJ!ڬ=ph{cd:HXk$ {hUԈ>Ќ.Kfs/{C$dA@0 DX)o/Z-ZXUhIa.x3< o0>]zwFn/z۸UbJ_bL~9yk'$|.4i ֯"hVvnXl[ 5VN{012V2„L!b-\e$>T>I\yB9n m)[!Z"T=on2CanўwmeCi0~zrJii/zmlԝ j{1)jD x\G%-\jLu}9[RT3Gw2!:VᎵ .xhC(gEKXeqce~cYh]Y_FZ_e-R]\G1"VfQ*uP9+F>qG:Uk ͫ$u988'?'HCBB/SSS{?e``#cE޽{SSS38#\͸"•?%?<\8z$K] y*~!O7OVq UoDz 3a)""݈_!>sfvVnFhIB1,ʃ Blޓ DZ$nTɋ/jڥ6|@GnQFis0}M.sJ¶u;}Iҏ) D8/9oH?GKfKBDjzhKlqm?(,rC^ѹsp[g5X>1˦-~Mn^AS0ԭ[ ֆn]]^PO `y#zg8*g^6w7s,t 75 ֚~@\y_\:u%fγJQ9 9M,>XiRO3Jh[#[U5mG_Ow_0'ԇm4T{RLʃhS?b\Sig+ţ{#9Bp1uO mwr$ݞZ,'.16lRMM<-L͝pfP, w;x0|H?Q/R/0` nᆵ ?IQX17l)~cJ @;JAkӕJs 5zmmWwFQɇߓWR&S Ery2E_sRe+V*wGix#M]vmm{2 \"]\ 3KZ v6IU>=+ i1=ԽUq.Rjþ}L h3u#_/GyZQhWC+.g8_#_c,]t2JW;OXWo;\߫2柔iŦUC{Տxr_umlgCǡ>:4qQ3N;dpҘn8y5FAOdq .:s;o'Cя3 rfQ~j-d@.@A pcP [̝g\Ge } .`u}sJD\;Z< <%N ثNGNvYz}k8Yu)U"O$'U*K]nTPµ[P# W-A>y_V,nܛ:zʓq.61Ȍg} %_n @w 3|3"I޵Mڍ9ZHsK. HEX腶ٱ~*V3NG# ;Tdm7[gض?U\hE̢֡b?lP 4*]0CXfTV g᪤}ۧ[axX Gg /d.f36)Xb $Fv\C֐R ~ X=`@@<( NV^)^;<ٸ_v.ZCKeaeHϹÉ]q3{R#Өi s?t B꧞+T`Dr)UdpF0 d*Y-xx# C9 tkMEVmq>WRi^HDi%*x ; tb_c]68IT: &+6K O3 BCf:t-sE@хD6賕ړLxha`̑3I=wJZ ݾ9EIq&; ׫ &"M{{6X'WDh]5'F*Vy0Wߜ^Bٽao NtHtwlygnŝR]{zrv z@GubBTNS,mЎO&+/Qb]nWvBm8in4R'Z1a[9yлQ7#3̈{AiG|Arpmnea8֮w'p!m-Ylt]]Gꕺ;K)]欙f< x_9 ׿|N%*`,5X>YCܖ}&6^yJwܔM$A& lJ0F? euOoKHDLÂOo;4|\(X5-_y}IMHyz|K{8*T(iG. L;Dg9E+ ֿ|<&Pc Ȥ#^3`c8GkV׉LDüiR l0^(3M#]hpe#mIA[Hf6oi2C1 omώ ].9~j au9/iXPE >n]j|Uk-4)+FM qZv]^(H l郚ԏaRne4wmV?U:{UvQd6spcem$>zJᔻebAX]uF4b>pM|lpX"<7DRS,>Cn @DglʞIees"t;N1)=V`Sz'iPfb_*ڑ[_-T6)wKOΕ lh ͽ{1 O ܘV*|6Vfv4#7ZI̗m#3/dP͸~։JG˹be/-O:5G 6aΟu_CY_4 VICjXC{OѮ׬ݿbboƝSyfii3uggg{{[JJO QTT6888|qeeǙs<)))\7lj 80yָ(_^RMd*$/kn)UXT͒o˒/VHԭzxXDkx4O22s6qԌSNC~/"^f g@ft"*oc6X8VBX֧Jw떨 Vo$] X'q r! :$H8C_?Xy4Y U0S}#A.PJsJ&ZJ]$5tT̴1%[dke[a3fsbuxa~}M>os%n P\L{a<NjibXab᫇+F طQPg7cRԘ)co߇2M3O>F*,W}X5K$C524fP7uB5oA6sA1fF'`yվ˱͹-Kw߷;|$ɣu.tʤjEʤ#>8!!%^0/P2*Yv͟2 ;suM]-||CL=)%ٟ>Z1fUeqnjbfzb5K^.dA0{37٥*IFHml<&#G;k:(X7Ggٿ!ٳ3Sٱyrge}͇[SM3[!SJ]pH~CvNoqY罃l+P0naF>d; L৓Of LKPN]#H0EҢ4mh0ot 5,!9Mw'Sq4iiɎW"!zBŬܝOy1L06߉]0'<#乸2GZDl,'Kj\k_":8zYGgfh/iҙjX PGxÍO1'݅`G/0]Mek@x%W _~=599*K]<FLjr{74=ȳǔ /.o{ċ#Q[zzS|'a.0s.>O>kpSi)XK[-,l_W:- hnq/ JEcB1x+jĢ[$l05"]BcpiC."] ,U727@g ?_4}r~:^niBݼpaر}l[3J$WU[ul{~OUNNOgyz8 _W@?-tHslRrWFɳG#y3Iat}dB}bUR^v:z$͒?}W6o~א OeF; ?]|ihgΝU uezьaq>\Ѯ #v lf޿ y[,Cߏ7=pt-ۜ8֗^ߓ̳xgϙؔBIpHM +|8̴X˰\N+ȗ'3m ;)Bթ/7 HW_LNYLx~%5w\6)Vdߒ2}%w/0ujZc^s46(EnUnѐ!+aQ8@?ڳAaDy66\,(xbn~$_w.0e/om_Y9fib%ŽuW}qw1W222GͲN?cmsbޢD˥O$%M\,3/$׳Ch.ƅP5x;RWoR'W_UW}E{q+\L{skA巩G}\?pEo"s~ շBs/(h<=Csv|v||֊|֑||ƹ|:Z!o<|`]0E+#7".Q+*A/<0$4$$D/U=kX!kl\&D!G)xaA<6~@7F+o|>-yRɮYO Hfϲphx(&秊W<Hdw bV3ceB%K>Uh-Q[ISHl}Z9|rvֽ+];suz['Q'f\ߠ_fe${?uuۇ/Aj_ nOtϾE>sKymrrrUUKԥ.2y2&)I[} e-~?|1dhobct {@,ݹ&s1 |\k#T2ȼ1`ufN*c'5[:2BsD\qr% i焵H"(bhn㞁L>ZB/I^¯P?toI Ht2?Ű )fgWu}5ZwxPQO1 SMtv!Ocǃ?ɤ[LzZW?(ŋw,h^)M:}TkMwԩ,,yW=>dx`kU&ǔ-5#eg@eUMɝG]<O߃&p?CdEG׋vv~Hz$i[aTntT9dŵR~fZBFfƶ-ޙÛ3' ;OG/*/؎%ը'p9h O3֮Io`9dcΚ )ϡ5!N&n3yѕ,;iR_d<[uczmja1-/!m%PY- wtYD,yxioLFu>*zSL sjGl1g 3j%ɼ,Kmt ԛ[k!%0-hud׳[} ʬ۬B[RkDKG$vdeJw慺x UW]4j${˘ia0mmv;ŁV2o,"֍^ys_ǎXwsv f(ȭegJF% DL /wʗ(4 .nqmT/=›ekE#"vu $7w5yY"~% ԳmHULhnL=^s@^@"o,hX>U2e)o>dfQDǣr-dưP( *dϻE!_ ^e 癛àOcLs +Tn;!(<ŷ>FH0s 2#'&.X_EtE3((y*os}#X뽶eP1@rArJb$;"F\<kgitOjc;)HvAhFpM®z\+9no46a(ꗰwTAɰRªؼ;nSA`* 6<Gs}I폙8 T3WOʚlz=J׏o3DC0>.'a lࢃ0cWՎH R"X0A^x UmCSU76Y}uhz4qbvjeys,pܠ ,[uY%e#J90;| zEb;J7Ց9ىQ&aב#Df|l-i11䨂~#zǝ~(g5m}۠_ɧߋQb_ݤY$wG①n?\ *Jr Z6C->{آf~zfc6N~"zؓWI= s76ki'>l'hDi J}g#Ak ]:o % z3d7*LdxX$b4އT?5¡W:=ohX{~~ss3_)~) ac.^RqT--Ǥq@`o|vyuڡ',T|Glxpܙay28Ew˺nV=GD몴܆S&iF"` M|qStn__3i]*eZeX%5 haa+{,-lJ~E}*I\7CFxRU&O%ި'rq9dܰKRŹuz'հbB|͜Ǭu DKK1Xʓ\ ~vrtFd8Y$n:bі=M`>~TJjRjbj\j淤M(@#}nd`5Dg7q :r=Dͅw % ٴ-cgDJ؎y,:X/L==R9Z!{Z6%]ľ<ɘۇOg%'3cb5a!&ʅ.21⍥mBEɝ!V&Uک%?R+SRUS;T G|.c[dq#;_>JT7m|\jt3cuc]k5*E{[/&+wtQN;IqN]VxU=!tM PmT5EANlMQ;7p$ Q}K xJBݳpm,@.3`#`g0lQ+1N3?B)PJ+LӃ85=6wg~ (UڌKEjkH5W uNJY-Q(jۨ^[fQ6:gJڽ{]ˏǹ{UL|Pza#9͍*>4IUr'ӻ4 DާGCJөwk$Oeӻ ɨȟJʙ@?j5!q;Ot~DNJf淯d# .l11ǧ!nIɨ<_eRv.2VE ?,TL.^>fb;._9sZ// l.zUu?y86}Cv:gi{3{pp,IzKy3C 2ŚK ۾ǖQ 3{%x2Z;BF2jF>ÐieuDj|Th1Qa]F5y= HƸE*ˤҬ/ݭ-O֚iM )5=eqjhK@SP}׻Hh XŧҴ9{]iNH|N=]*)l(SW)Oދs?㕡)V%na!ZE&ڕ =D U&, #sV;ګ-c7o&zwQo7M#diT\]η|Yע)?u# 16XOy |@[ƾ>jPM4$wV)9gZNYzjd}JS!]T*[Y$X(Q ۟';e&_rH|#BD$O"C dpgZ3]Mç /=f:ݘU3w—uݦl-=vBy?.bnAq?]R;O{h3a$tfk#lENⓕ֖wgn( i|: ΀9੿*kW% aN?HJ`u#5BjF$+\,]l(n@u,k $BB Bp 8wwwwwwwwwww/k'u=>}uVk z~fgtS7T.A"?+*ee2H=yYgT|?M .z.:Z r *TKu9k}uStlznݱmdΏFE0sU-_of5a# @$% H ١7Di*Z|("Y n}:[ۗKouKI, 2 [F@3(X9QΙO+,O-]D8* > DŽM\T!2E|h;e6BU |yKߨϢH'yJut }J i?_aIWv=2K:͑ >/&JvW!#(2@EZW'j s!` 8pSq]*p#ycJk.L*@˶BDfg ] \n \.y{pw?L#Q,u9WǕggs7Ȫ.6x_QOSN_:.$289eF%9F@*dJ~fR˳ptH ڬpMs<a ިw.,^5i+aL*{kH3,Sjٵ/uu4MMM Ow./^=X:@NFY|5`GL.2MY? ?g-!Nlsnϲ.W4ٮچ44~Pz(|oƎ*v5ОfaV~H2Y`(I0,x< S񸾇5`^O0\{w`svS»`6oZk_E@jDξB ݏ8$.6"#v2P>gY%% e e`{a'YM$¹e qj ~mŹEGnDnABݝxl오JE ӕmMz3~??3ʪ-qnu)"O뒲Xv,m'R~sq1ˇ4w. `/XlC\~x"<5@|krEZG1OgC4Gِ} #zqx g5mLov(8\$#K`rAdA$V/;5[tɦ4>FҀO"[nuK1IZU}9x~ WyFdSD:"|g5z&*CnzPHfȄa@M´/Yy EaZ)ZܓIMQ5 ͅ+IVLJɓkמ8ur;5 J,bln#'ZEA}> :MBfטn!} e]~NJX7`.7q%g\]ǟZwi-&݄;j zhV"g<r՛R#44*myj71 NOǹ7oSOK=S9짐0R6ΜU[DL|3ebY kZk>S!1R )F>*- ;Ə6XS $ Libת7~pmoh كV֠4lI#uHY0N_2$o'>չ,N,q4ru iT9/`5(}\NϽ^}Y7򦿛id;SJ75T48O#"BǺTNk0ޓBKrJ;Q {(ϻD!s.q͌b.;tWBYγVezp\?TD>-;S\UUkH+cW h6f+~MКbiϲ2F!hMσ> z?3:3S4F9I1_*/F4'O sQ$D2f W>+b)7H* zwdV^n,Y~'F2T A4* <Ȣ#~~d,dXm,fQ,ٱՏG`}kC3Yh݇!5T yKy[O Oh'w_rrň>>umƖ׵XMp2.,M92isI"[E<f}!8tJ ů8sɲ[Uuȶthaɞ&}qAPP=G߰.|D^xg&l:QEq-{3(>EhY3ë?{ҵE2:,`Rtq,OV ۏ[&BeXwxez {Xy'KI=1CUgBԡ 1!Dqvrѳ43?K\͇Q#Y'uvƮe, v.-ZF[MX-Xǭ'c Zn:}jkbKxzW>O `Wt6U6]jhн9g;SihzyROvGӡL_I4Xb륆M܃G>mF]䙒N%'O3bs9Ep=!L_eTrnPeWo@Pqp XwS N><|I[xվ >+ebd}zvn7ܼNfn#ʖ^4)Ǹe9~g ^C#}|+i!ޞ&YSӏ  =*. LTW7G259Fxk넅&4emY&՛9DK!NJ3FN^}Tղ{}^40&I;/X.Ǭ(TN^+<09N;m \Qr>)G+Q1')ۨQ5 9'kO:Y[Hvv˖El޶@辺Ucu[n'oILm^[ÀMbe?xIR۫abgZ_w"v{DfU~:?J@JN߷qVH+;0K-$P7z0A\ǐ,q$ZxWek9Q2r[6KlkV"յ˒oZt@hd,`KsaC!= ٝx, &$.g.e6dUyGG$PmVoG#LUrbȖ 5qCJ#w x'^IiR;cmױ QR/HUwU[9Okg51S.-y|Uvw%EI]kHzJGٖAֶHz'iFe)msV R*uHkssEGU>^cnoTq3s갖HjM}D=̗X9rj6Q$Qf˜%kY*VJUbN H(^)~:ίM_[,;>rKW&DJu 4Utϟ L[s }uB?eR;I^& 4kozc_6qF/I`_mXLӁ馛B`y>_2  OfmLa9cMmN\1* 2`܏o`@Z&"v5 ϸݪM~%|dEB:Ce:´yTrt4ulST]YY9==ussC ]::߇!vSSS!!m?"rqq"r\NNND}Ǐ([[[5Q]< ~~~wK%R+@uh`</ބ̲Olu.%@Khh6[GzHBL1堯gi+~L%/}@n"rK$)0vA`ީa% J3BLєOz S(^^ARGsB%.bŚ8|COk 4Mkh맮V’YWSi\˽@=ykG\ȤwSzDXf6{u UO7WQLDmYJlmѩw$ݣTu,5-o7ou>.qX)$ٚKho˧F^J!lˣϪm2MU2";8DY%'H(hR6qt6 Ԛ V_UF1e!д.:Y?]9[GK4XJTH/nOuVgeeUucmPVʄd.g3HRu HgC|P PHj6=s?w\8D6L4H?I2H_Y^ݕC3fZk$dQ HX+O{PiyfL!J쒣傶 鿩96\KڬZY8b֎!^"IS$#Ԟ:Z_6)Ve^FS^ކ[^&^V1?G)> D$kZ;O[88_X,KЯ=;M¨LMpcoA+˵ZsNI.$RwcU.UU:TIYz?}ѴY-="`R'3n@.(GRK R<׮k+ Ň׀?؂)k,gV E}+Ġ2YI@.HN'Uwh/l[X:b9v{oҧhڸϊk?d >ZE9f8~ܼ_rM<\>";#Q_c )zzsxwI`k,}/j(L 6pvAs74=Moi!H85=ժ+!f@Bxny] y~qL)=gTFٽs?Eqqq?>??;=;;W^MNNN#Xɓ'쇐pjj_wzzz<766]3-y<=*r.S@>r̓}k_a52ޫYbgiRIq{YoTf0?cL2eԋϧJoF|ώ)@);'M`~$ Zb,mOpԺ8ȧ_$ZVz`tfml)\Q *~dk gkDso2gHI7F_OM?Zį\3zAgҮ =Jqh9.{g2)]š@3FҍXr\ &lPA/SKE\UzAZdS VAp#v3[z 7>/HjvaVC> ]N9Yn>fZXsɟ?ri{zdk\IO~凜QlPklzGQɏ"o, \xQ=t~ӂ|:ro}۶--eCr@Vl|,OAKܵ8;0 ]B9F`<~p: oz)$X&u96ĺ{)eM1$ci_VU;QW c \tU2Y-"z4#⣢SI=CR,>zH*!!GSb|*9> hH6AŽSj胂a:ַOr+? g`n[$ciQY7vX UK3$Yg[̻{zplI(M"Ԏ㹕Cܴ|C=rF/msp RSAbW\N=!H^o9i~ѻI섨xCBdh -Nc_tCSMYzMC{ ٗKO9q!0NP/D\S6v[t)m]I6{{jUY=4m Z"\~*3rLWUcC{, y9\_'r=ZBM p@h_8/KǤGi_,=Sѵb;GhR4k!~Fb%oz"9xd۴QD o,,EO?MBPUs8Fm¶Q1I7is/B]S<}k4)جӲM3'1^+h,E=IWW&yd̉wnT?Itv(ķO0+ZdY6;M1XC>n>ɜ B[KȻƔ|ttn~ 5ݐa(w0wy<7|3>%[0vO.TfulNnekOYM:R[ v JmfI  6DA@>C;$z[vH8~?~ϡ~1)+k|.Wqq r0NQaGX;ɏjv=_!Ç >|xXC;D0,p;l13MaFdn+^$B1uX1FB:^@^~(dq91W_ -%Hw Ph`B(`YUbaI:3ܢ;TsWiCD n2NT/𲶱Ҡwa)y9MdYMVu|%3$y3$3 3orM=uzG ۝}s '0{>C`骱7_R7Drp*9Ҟ/qCEroQoоr6#iĴoVSfMpUpf:N yRy%333fHfW b* ܠ_<4=xjx֣[0P#a6tK=sP} shcu]0FV"9|G%BS )!:$= y>\gl Et3`a3%\2~Eµu '9&5^LMhnuD7_0,M^T"]?#+gI9s>2W(d/uYG<sJ\2[k5YO1ݷӷkxBm Xi{-+/wE%''!!aVV!Bڟ={|ڿ!|NOO}333@ݿ}έnuKO^njfI=]@>]$m,ד7G=ֺ:iz;ַ40&ְUpytɒKVV_Ė_SRYPk s 2Y7SFbcK=\y1JWFO:snՃֽ̩A^F1.6inޅ.IvΞf†4:'$iC0sQpUZStM2Wa^E~I#rh=Vy9Zx*G?E5F*Ĭעrz=ыے˟a*ReRkf>z?%^B;\!%Q,R]_$V?,\+P5Y5^߽ʮŲ+:JƉkN.3F9 Abcti)dȍ utʷp29pw޷LȧÃcQ hiT)EjNVx98JsLR9"D=cA:3D>Ks6rwkgm)c浐?\%tQndZ ⽵M׽@7SOz0'igw52 gΉ T,r5,1w SNq%(x:JZY+8jx$yVclwE$L :vUgDyXGh'HVsG9u`|2ҳvyg9x5E>&IM3uV8WhmM.'cyz!- +[8#<|u%Eq^U2f)J) γh'OKȺh9*2U*r˺Kױ[;e6ez -]U=/B) cgt$'Ǐ...)))DXXxgg iwww 2rss"8_B$|<=zsshhhKqqQk-yw&OefXѽt5!`tl+TG_ER0Po$j!Z#\}jLa9XiecTBDip|esW1$ٽ*Zx:R{L9Myf oPi.81ϐ[oJN=7%򑧖J֠'R#>=2L#K ]u.w|ɡ_2>ݡ6c^4bYlMd2H7djkZąEj.uH=۶5Kl7k]4*j_iY4P `PW7Ty;6JY^R$U۶R P;S~)ֲ5V'7[-qCpazheI }t |~F5WTs(oF ÜkϮαS pY+e:ȍDZT԰t361Gj~a|yH|hp0`}EcuRez$x ʩp\& ]UK/03o#Gs5YΊQE9]3]=rn`2̼bHMӃljUsΎ>Ůd3J%/0n*ToHdNIcLhJ8yYziIˮEiоOA)SOJW1 oq[NΊͿo`խb^aMugfesdUտ|7)y߹s(""O;deeݻw v_zPPPdggs qpp!޿Ƕ+)){zzbaay"/W<[չ~[w!/jN鹛Z*P+~*vXB2(w7k#}S9?|1N׭eXb+)qj0nmNVxUٙs T=u[ضV2 5hA7r@"HwPIGrOx!۲xroa׵mnMk0q_a٣լܻ1B܋}y$v*|)pwY ~a;!N܎QtB8%O/M9٣;V)׫$NS~:WpvY.*\Z&tn0jSN>^c)kc}i-T]9=:WvK VM.i+br{*( ;J'Q!ċ3wƮ&ng`(wZO0"غGY>j*GŻ*e|XjzQ42mo7#Zg?zHv#`A_ < Vo[vε͖fyaRR Kƫ]6pƩ9Y'|l G~x636tc\CU*iki}ic[՛½ƌsNIיi{q!u$pX =i?9i2ji?dgj^&+'E,U>M3]e0w̤l›Kk#6VB.br& q֥9ZJ>jJ-:ۘ6b9뫔b嚊o,wO{v}-NM( m1vh hਭi,Hp3J.ar"#QRw bqB' $[3Ҭ%:?|Q?k`/yZ*WݯSg/&/HWp S, %P^QSPZGڐdԴrмDzպvnaJMYt`5i7yiR]-$;r1Β"nbB5ڠ @[#@g<(WNmpЎM4anmlq fىCWw.0g}-n eocTS2;`]gPt$f9eUu[0{I@vdR_uzGtrˆM|![ywR}XRwK-k5ށ?ڀ `-36ˌ$[:[o:4IGyepY0h|,"h o{ȓYQf_odF]E*UnsewYxa[^şcV@ lh]$-1zI2dYd;wӠct uyJ^}8.[I&}I'.љ ?ӎݒhkkK@@xncXv^Xc*p0#mMtP5ߛڣڲ[*[&vtRQ }{;ACU[Ț3nRgТU#J)W9޶9K/{HmJi>q~Iu4ؿCKz.e17xNROP_(e(- n{3(buV,WC<@lP鏹>CAd@g8qc)]9>XK[VcWV5׻&Gߺֻ0U5W*oL4cIb-n~H[P-5*m"@qwwwwwww$x@$>sϼsYo7R' (M]d,WCD kOhdƏv.y|z}*0063j;FL7f(N?]r'22ɟHZif 6ubEWANNNHHpxxxEWy$Ϗ?ӧO1,=66<2G@I8Vk5ܸxĻٽU9Kg 8Ah8D#Q(uUG4.;#%Bv0 ̀ fvQZLb``"A@Կo~I ?,nwi65$2-02Gu1m슶t`@; -QBeDQ檨HvTfӉiҦ ܼ3aU/$ՕYS@hx%ZC`(g[׀u0FAn,t# ܝ-) M_f+ENkd}3o$cRCcA5ieZ"6 ؀Εp{ Uu'Y.. LXkX!NrݲɅ=EbsЩX@,wc!T0X'j];v6Z 튅Bc4] Yic-=gJFؐDg쨫2G iyHo~on}D1S, ?{خ:D */t۱:a|p&{D uٳP4Yd t]P- t hy怔ɒ/q3Фx'@7ri1a9KJMl3#vGg%D8‹6TmUP;4g,ⶇοWo d}:YЯ6H ?hcڿmo W.);w5FbZၷqr,ioj@wLcaGܬ;Kq۶2@2]"io>?zQ1|3QBX^ʜ%=ڟ7'rujxɼ LO0#|'&)k4*beRB8@.~1B0B>J,4J.>@vJy&!SyƟ}ky 53d<ÔkTBC5õF{~(K=3Ui!58AtnbP@SRYuwHqNtrwý7` y&핟 Gn ] |:\rr-x;~S f ~1J~6}K[(@&s6yA yFaЍC^,= ] vq+sHuFx} |g2QG!MU CC&}[ 4&99cKOxZ6n:́_$kʹCڌ4Gc&S;kލWQu}諮s)ؗ8Gh ^M#?#dn60R@(ER,EĜ+hJ"3!9coQؐW9.R<_!]4PB̀s}=S݂WEvD'zN8sc=sk񻊍gl!zjS]=׫N?y>(9mU9Ȼ~wœ.g{z)?(Ր)V(V3_`dPxqZph^E3Y5a=CK?$oUhͻZ83k C=&aypa>ס( D џy:-m}ʊo]aa,>hQN*S}WOjN&V1n 2`ke9tKn6}#y^ή*tU o 7幫qA42E>e&M#J"Jݫ̦E2X+uygT:_ |Vy^JW"*//444<eD\sYm_uրT`Fx;7cv-fZmJK%Tlkm#CsM3T=lCr 5bԣ#սw~deҸhO[=p~<,]rۧJWw .,}׮ъ446tHdZXΜ[}^|%Kg+nѠ7P(X V#1!*J> By.ZFNhw[GIz}k}!KuMȵ'~O]2.~&.+Vp>vfG= t;ih iLZjoU "mtznZ^h^;'j~ڳN[z5VtZŁ?ujg到F iTU@^_}S&nγZƶ;R.֘bfsap{_Qҁ0=#S8V)Okiotṟ5J) :/t˖oRr F-ar*h;XzfGhx[8;A6dhm /X  @@' |#X(@j+sګ9ݭȈc ȇ3W'D*%٩sV=meҀD/i!gϭ?ZX\>zP;6F0|־#^"S,_^{ӴR|ğIdS @,(X,P=(opZdSK\FQHk:DƫL*~e=S?hH\Stvbz^iuGeVd Og!_[!x>?ֽ@fNsoߒ*kkK'g猋9 8,oz]8,m0yf z 眴d:1K3_4wq2x6Y͚Os'B&rlih B鄝kF(Gt|7fof jRui fātI ZLSAK0AB a6^d<,>TdG$C@?Up($[2Zf 6iʤ*'ٿ}uzT$^1mUvZ+5bZucdz` x9!n͹!9+Oy]࠹N>w*.h@^(Ze|=>I6;ŀ/W"Ym.:I-Н`$]tB[ӹI%)ݮCQJ3/.~ٰh?",x#`hpgtcrexx$UJ3>~}L@B $^-d7)l=>wqE .|LFc4P…˼ln(݂PUmpğ)_8]&^DHL= @W.38vkN-{ڶ ~9=JiB`m#]r/kzF?udwfN:K7H0[ʠ7C!dռgy};{+3Wi/e\@j{vh_7AßTkcN2ri0Hޖqw~>O3~ >@^8 f @FvYoa |ɵ[R[ ;$$%"ƍkSkfmԑ{o|t yv6pndvA~'S8B9'32uFp#MHbv=Z go9b,xl끉($WW"gS^^^EE }㩥;화 ~'*q9xQ<&>b|qrlbgLg#(@2b^F5\K1*$W}!oGD4D\]C}G>ظSrPY~fJl])}LCe\RVv?~:;E?Sk;{#|?U$w]jGyLe׌Fi|)MRs&fGyy b>-Ѽe,I,,,B"evjY2c^o w##o# o_t@g8כX=۬JCPlN%=|X{`U֊\ëIٴYæYVhvwf}CdlNM?ɩ޶Yu Wɯh41gf;L[{nj_f 8*1@Z@\jW)Qt 1^bN'sW_MHD9؋vj161N)T-UlCzF>vfrAB:5:\乳ŏA˾;xftӽ))1^6s/k~ůƯ5g%6I~k`OVͅ”s)LA8k"T WlN^f~ۆ'nzgrKq=,5EC,{ ϊp/#pv 09ӴoeMFm=Cl#kd;CD2e"o |-oXj^{ZAO[}x*[߸24z|pݡL 3)/eG"YB WMQ-Yc{Թփ %a{f~+yD DIwC֔sAl"_0_O :Mޞevr£硸hg5\aZG~j@6dbS?7{m/{S?[1SʼnITwGI:w>|U4a/T_ zyh|d{.jxbwbct>x_՚7OBНvs^T3`G6PrBq~N'v1*eGWh4,ia!|Nz\# b Z=aG'_7j_-`: vXrc{~pj˹GD߻PY֜BqjtX JェQnŕD2 NJڽs͏z7'.6&*qqN2}D;Z!6/}ċKu̲_ji~nx16sx7H +9)!X Z׵BmF m|0/,QjH4-uLv1 62ȳ7t1X2@YjfW%rDI(eq5 b"AoE՘P2W,^[KD)_k6%Ƴ\arf>u^65"32I3uV䄯/oWdrBJ|vxQ` O$W"_B0H$P*x@%[DKC)#nA9EJxRZNl,bkRpuS*>r%VJvwmltu$(ENBhx@qqc%{y#Z;%3?:JMfKLP NgP ID͒{ҥ J7fg t eFiYǛC> *,[bA1-3sO]OU/o`kxg,1!ɵ1!;&@Eb/YxSꄬÆNPȰ^E)Lس; H %?zf(qG#fVo?hw䈩 ރ2NdiҎ>FH#d*<)dQ%5UX*OyÖ9!JѼ`,8]7Yks$E1)"&Gv[z0|($7X @5`n|yxND`g&hz-n_5#?^ZJ\~VJH弄A}e'F5C\a0-S?i Ic*޷%4/'^N莾}6EJ=APj@e_:&BRf/Ȟfn[v; a$2{C!׋Hk[TߗZ\x(PIɌOMgOis/s_96z⇙__A^ ܈*hSvw*<_$L2!e y1>ZB!ҽ~w4q%C辶V,؜8oHeT>J\EZ; =ΆH3:u=r8p1EyrI?6K:^LLUc|%{%_ԙ*f!ͽYɴze6eIx'_0r8"7ճF n^{5:2_Ԫʓ'4{qA߅<aw377'$$DHHxu^^0,**ӧxxxo߾miiIMM}%Ç?]^^ܽ{͛EHII/r[UVVb2ť7~+***W7c^Jiɤ0Kr$䷒֬#֫Ԥ4shS00a~*}l},u|Ds8zX@ ^h6eWobe#W@ۉͰIO@h7 =hM)"J!,;mu_^v6A q)? πF~ubՌ7×߭If;8/T@yk&؛;تW湚ԶwG۪Xz(Tr [#ySQhf#}Iux[Gue;O{/SDf'# 1| 7!i$!+t"Y`mm}]?5kU,D+dO3sBm(E [p[h7|Fa=>t_+{Ma>.nځ#&W3J;be9n;jf0-y*d]Q( >y0%2x$uUؗ`IG#sO 3'3S+ccc}W+ 7`iD<[vn䑪]aqձQk4\d.uzo &48zV3S뛾sTzk)֢7]qU'ٱca}"-&^a@`zoK[=i,J潃k䝹Y2^E>nޑ6n1?,1@aaeYWCtl?:J%+3-Ӽ;>oiݯr5/KiSNҁ덅**b齧wbaT82C:Z%ܠ6 0LnV1,x}2D gmlҋS v/q`>1vV%( I8ٹO٦wWvi[,x m-VFY[Z5z 2eN4` g]| a3Q>^?[*OTE!RقEߗ*ꩳH}{,z9"̳ͫf(&xZ|KL K >{.!``xww[crbbbGGGؓg0gees+: ߊCKKK=(fwY!677766~yEW"d<oSjy&'RcF.h3*ѵuMYسs=ߎl:g=W4?wuy^tc{u#bd/=C7ݷaQ A2 =P< L߳؟3wӳ >Y65t6)u%5eeju!*J`F,pKh~qזnÉ7܇Vn~H 5I}/T/zQAZ,+jþ8ii|oյJidFڜ#-~Ò,o])QB55C4)\h⑸.掰P݉vXCh׮KRV}u Y}8=H5XƓ'҉9SgGn؇$SWu#fDWqi!vѹJ,dKMA55I & 6O ܏,"ճk*7mp޶6P!gT3,[#SQ7)#&`gϑXu{Q.UNXbLXoblƬ ;seVY$.R/P=;õ*@s5u9'E%y3Bu%,^/,Xo(@=16y\xY|DY1&D{ w=N>|ljgc0{{qӴ 3ǵd|>N%G|K-?wx;߈"dKjaQ$[}x[K&^|*o/40 )`hMWO32z}VAݙCjq*qƸJX;fI McOŢUwIbe)r%%6ٯ%'>K5y& m5hp):fgI)2&= 1v̉* r˴lz9>xt|rF4и^9{wz7"V uD|ҞlL J*\F(KR‰do`8orYW91p'B83(ubq~Qz[rėw*y!3՚+Y=vHsj&xzu&()d<׿:k׮]\\]*1!ȿΉIO;1W6գG08w.?+Çggg\畮?lGi ˪ o50~/ · -6J;'k׏oOLB߁C[sO̕.c0b 8 K۸Z%}`6 )V!40 b+ay Ay8x|GDOnl&YM2sd.]36*LM%Y>~!Ġ-ÖuQt@DL9tEYᱟR8E)")"_`b ړҝ] WmE_a(lJGUKK[۪=ƴJ!ijz)tpƴt]jXn =P9u;JF89v#i[ e )h 4G|ތ.?{`Nh=Y}F!W+ Tӣa}eLq7:>%H'P.~Ko)̽]~gj+~U>nEbH͛ '-E"T 3L<9~~{^P?ꗽ4PO$-2|wi3THW"L^Nh-rrӤe:Ц @t Mz]%0l#]|3~DOP&]R}K.KRUYk;}wډq.؉n'VA.P/9h rvۉfA 7r~U}:|5ڝ܁ {y2j]+}qBwNsɀu.u}TsssNtkruRvJA"׽{i0VJ/P'>ހQ tf#HDܻNA bV2PKTԦcn~BZJd b~kWvF!2/sΓ߼˭en䰌Y*TGYך/y I@W [ {B]<#sGˏ/x% r]gYKx3Ecw\,NݴCdϒ~|9<4A&-)@>lUCRiA_3`iSGo+N8RwM%>׶?^y7&ݐ1lQSbM'ٺٺ5$ZAn"=wYNFWj]'YY$ۚ%?_9= n,Uoo&1Z\\ο.?+$v _畮?<5@!cY :1toSj^PO=|7`%#޴?mPn I3Z]2+;(*_To?਻,un7"!#NZy\ j6$П3EbY]6yf8I:XX5GD5MT5AT5J"\&.\9\e-\p+XIXU98/Ì u;!g,h*y'EE?ECEk>Q9)m zX"+x]Ɣ2uTfy.h&&&Ū&FzFZ8d9W[5VVq60QbgD?>*GsJA2򬧎=kI"rS a@Y]^8z_ǣ|c/MOۮw[#TeO&)ڝ;頂[vsr-,u>eHx[XE;fXZ~ڵH0']yWp|ʽrʻ5/똪9>э"_\P]G$1r` ?_5E{3C7+hU- 6UAfKwQ͵H Ht/U]P޼=d@*е`)TQVj#K-6->T[:%6+]~}{"%g[?Tԛb+:[~L"x- t~v<1?v RB*N+%(&*E'D{[i8ĸi'EfKè0DŽ ZDTU>-?`R(>=*H7*Nǯilq1iMearef3xQWP{6G4ݨU7';k&{GZZVn湞ε}1PՐ=EO3S3ٶP9ŪEhI 'Һ q8SO8(%IeHVg7զhC-\MMk};2x:?4?[Ss̲ileŻB,NID0E4L4@o38DIIFCP" ]?Tee{ץgwy^sK/AhvxMbiWIΫGdsHlbߌU|3BCÊËjt=t}:bN+sLnyc6DH2]e0gm|4@=,lmꛡr"u)|9mqj3>瞦&(/c-1B3W1yE}AEDT@AdEP$Yr9s9sCÐCq^|W[[OO]޾3t>}&HV𷳰+`]X,0#y-1Ü2bǔ9%fd&ii]@hy\qD~HNf_je]>JR8o H%\H>ْ'XV"5kVrB^gh {So0ŝݥqwWuP~jJCn9R5v`0|cuKՑ~ZB",AihWy6FN4J1#>CguTT];JN a|ɕ56-#_60:f$Ʋ"p{e[6yNOO_\ttyOOj KJJ7IIIߚ訴$O?/{W1n4 tQf@42t m쀶5EkA`(]B.U#AP.Գ8nu -r+~H6Z {Oȃ hv(Emn|=H`fqaa4(8%M9@TXPT` vFTV' &s%+6 ]0P̾$Xla!4#][X.>SPU:8sOdehn_*: h|}+4+C% ,GV@K`1@n`Sq+[\yőa;cLpy}/nt)/X_mNVNS.͋мu\P0629G]Al=;|ӌd+K@rԁ_{zB)7d Qׁ&p - t$6.eo?(nP n&&\;d!`{)2+$P&T u=A@^ޅy.p\-IkZ,+0c]@ FF;}Njm??i!2_@2zN94%AOmzI9Cd))jc.b˺E0DRs$@bJ\ng&XF_)偂 j^=hoF+c!6~J >7XS1`~"@̗ 8>-n'l1R ڀN`4쀲Kx{}|v>t]Oj)tzdnQmTFCv`{){{˝`w Us(_wZa|etc8GtIP튘[GۧV/ fA dskfbŶ^M1A_TlǍ@>d SҗMh1MT+4ʥJ"yڤ gp~ߍ?`, &^O e1y;!Ƿt׿`)!ez3^I*ITCdOGey"Fh[Eͼ?ޓ:屭uOom^zv+D}7(X=C󜘘{33sNN^VVի۷ox"**Y`]ۋ'4B.QSMN 5ȥV/f[f֢ޥٯ5>kznitU^,a@hjK C ˢ2eb덝 v=şz[Gzic/6'ɗfϓ,>ˀ? EǠVjZΟyٳ"'_l]((j%*ص慁 4@#@tRƚ 嵋yT*姨%%X MZPؾȊ4m:_Ot4O0R =K+<*BJٖ;pd+b&ٚ]Q[Hb"π]V>u0q6sW-CJK r.IS-75TݤudTۇ~zD]!U5?rVDj*O*cvbOc4uAf6{Nv&:*ҹ".7 -Ӈ50 ufx=R4ONqOfψH6gUWLmm}/M K'fΊ.=U|:m%Ů&X*l7oY,_+gag&UIT1ڶiGU%g8C&M6%E&"M* C=K.W9W?OLDFDedO\aQ&H cq/y5Z11"u4Ia"J&ְnQgKe+OO'Whu3 yb-%rNf g),c_nb를 Z|Ty/ S4 >.ω2MY&Z r鼎լsd Kэ׵\2^HuZ άIYX$ש=kjqf|mre4C{f#HwSw/pdj|٥d#r^GvVOwscp~r\ioG+̙bnݭfܵ%# :gq@`H֞X(y&6`~m7Hm)Xke/ $~v~|cd 3+=`C~ZPP sL5^*JPB1=I%)Φ5xD7{K{ƊxĠ{EGUDVFtE ozlpnqCoZTmsJ|g᧭r¥|ymZ LN[$4#Pbaao!1=:^ZLr H2J,SXr1wA6Qw̪,.OK`N_L2rWWJV)aSҘڹ'ųq ƫE6ȍyp 7o4O L ps4O( Z0U)|3*UC3S̲A[gJm[BWPhlӧ (lX` zFM繫g{wx'P^ۼQ+ytEщݾ疙 G".q8||'d Tз[/`D+.>=DyPq@~C8rNα̐w3/n7] QN2/wܩ䞯`.} }RD޷;~OPMбI]'XCoO9c~A@%x)'&O46n*m?tlj=ƪ>81ݬtV|ɗAkU5#oM9Eh[0HLsde0J Ytot>(ӚY{GכPE{=Tčk'8gҌ׼ m>:ϻ׊${6nB F)膝kD_)'rj __>D β,̺<{ɽ{.zo0A*W: ( /kH;'fɦ*^N|6Jx4#.1q XE!:Tcsʠ/vk$(+&RA|Vؓc&Lԋҥ{^x\XĜ(swono&2O6$(Џ+%hgF2<\ A<9XܛH7kko#jTDf]ZUϷ }4GY'E꾂i2E3 wv)d?fW+{}Uq}eKu^ K/5o'?Jy7'+w5pYYJ*gP[3ch~P4.egkO`p1UP]. vj+jkV;xY_>2!Oqtzj> 䔱 9eQ<ߋǺ/dLi=?'*7?S[೵b~g$GwIn\b>xqAޞOnn1ycO}]v<g^F>4ȷ,X3Y8mD&jEqA)7ms'k~=y>YX/=f|}b컢<EҴͰ. Go[^h^)0 f<{_OSMǷjmܩaix[=H満+xP3|^ $A0՗ q S6/M~^I37R/ZQ^oMp'wqWwp_L1V{%9CN@c0~_S l3@Y |}1l4.9d.>9Tq99 qmT-Kbnc+KIhy8mZκZ8 {/nE |c~51AԱ|e@T."Dg.whtj~å]Աj2(^ y3Gޚ`T T9d^agc}ꀴwBqgJ;?zֿ$5ǚ5sw g#n&W}L@k.1U3G1[cgdwebaf feaV`0gkcf}ufpw=po=nz)zŵXim*nv/sn/EIEܬRA _K?YBl8~\R'\foA@ PAB+?|o.wsds{fwxo者ÿU,KqIQlah.ё6quqa"4ޫƼ$^pҙUN3_dqfpd^]Z_>uO7m[,ٍq;ך${* x3m{Ý&h;;; ;M;Ǭ1WH: >eKyLYJBӹj_6^玽frhPό4Cw K`mCo_#s{i$V'1 [JjwǾYL:w h۔EP6Î'lvɸWuݰ!4Yy1;C^^'@JGXREͧw-S;ϘV=,>C(uf& {XgZYKkX|Y2>RS Xm‹{'x l=}e@}XR-Yksq.1n{i< 8+E_ ՜xTt Ƭ?u<;$KZC iRiH4DDƾDD֊DުX!B|rWsZi5PG"OD7?H{ؤ{{-z|3L( 0OZ;e@@A@>{j!cH&H3UI5Z8}#6G< 'X\{wf Pbo-][.fd+ަPgoՒ?YpٍO ,PV,.j-Ep`Q6-nF^mvNk~@>G ,WOR_ꠟq<)Cvڨ?\#s*}qn=]2}#>+&a:1W%]sG}O-L=Yc*?>)Pј-DޭFc*oL z$B3X7`w$fBg[X(|(t>صQ-n 0 ?N1W106Rt 2H( 0. rbxjH4NӺ͝~)T>5v_3K)lG9L3^?snh_}?B,:nޮQ&QVacZZ^[n\dY駖+jW(oPzFccTfQ hٛnrzR>ֲ>֊>*>>Ѻ:&|VX33l2 Xi$NpJǙm1y.v=yB@AM?HzW1ŝR%njc`i~IX)4;0H:-\zۥjQ%ϒM #_)=ªAҶBMxwTfۙ:Zz%UڦfIJ;69$HXGng/HTt50c&nqpQjμ~e>J"=exPJtsh9$O6WNV.V'n:KW-Ig(ǯQ4sܾ5J/5$|ӭ N1/8WwܳShNLe?nvSd~'-N~|g<ȗ]g\3=G\OE1rʑ}Z]8,Aϫ(ŋSݑV.1kpOPAAho_^n&K?ǂ@y_«˶ÚA!{RWSӽuB[E*XP-ܒd?-q>[E$ZR!{WW5/ִpG ^e5sYӝ/aPq]#9SajrNx6qpDS͕x.z'Ғs^R'+vqHso mڜ9ǠPnB Eɧ+` }ڦklctKͤG8`: _|0 I'. )xV%0F:swИ`Kscyѱ۽LnM"S.xՒ s]ҟTuնql"ņcşhcNbˏ]JI\-FX+St _.E=7a?:_U^uM{y:bk4h,$nJ2{CHȼŢٜW w@mi[\$@jtv a0 _p׀DW3f ']8-|I"˵$/aPz{[#Kڧ9*m >7`oaoaoDao$`r AmFŹhy%{긎@9aUG*D 8xzA9 NPr |5pE9!K[q '!G5 <2(Kq̹R`pÚRL.h3M~έ˧k/MGyZ;kы*%Ӽ2b, mr9$3dIk.K6ޢ %aDCY$h;/uY ?*>ּo}sh}c7pÍy ڨ+#Un*\"zD](q*6!sށXX˲ߐR9#S]j9q9XrȈ~WߧWU#3r Jg0ӷֶgFPˢ 5.S :L =,eW VqMVy=$a4 n\9Ƕ>}mz%yA~̳nLm)m:cY 2a1qя'# D\!=4cd[KGK-ƋAi t_2+0`~Qp K}9O ſ H<];zą}b~_z:0!(-q癶Kel{M =/Qg+s\ ̅8I!؉PNHrxI^cg?fg4U-d{;cxk;˻O6Hf&ɧggs$9EKOґ\Zvxm܏^swYa%E`S5*qqh?ŕ "(MB8өY|rK:R,Drgw7l)Fu[m9&"O '>]z_yo Wf\p{|VڦIọTkW:ãp5N`icD~on2Պ=ɒc4wc?~q{]J8ָ6Owel*;k=񫷆mvqno-hvm4f`Ruȩjk̳Un=cŋ8MYw]4i֚em=ŀC}c;3[E^JiN:oIQx dC#oW>*^.%ϧW27q5b'C<)W)"H9.Ӳϱ jה".Cu }6`i-eax sX#GE]) -m 3%T]l}^7F%n nnF$_iMODՓG%Ϡ#o&{)HV V_74pd' O1rp0?pw[ Nk)fkPz Q'0瓱94մwZ 13%e)XZU􇫮DˣUbV# 'C{MDG,H+༞Rߗz9 Ͱl!/UPy5mM}sWmd^#\p V\jr.uK5rTpu.Jfl:%o(7=^1}O8,)H7]C"6 =tjN ]DÓdp(ظ7n<Fre1,CN4sgڱd螶Ӫrmo;yG>YՉdkWHGXK'Oj/9bnG+x];D=_`*+qAzNv(?EtOT#vlpC '$3Ӡb$<4(yAR4f|Wb8sϗ(u'NP;~+vQ|5*WQjReP.ٮW[=}X1҅.۶"9k48w;YW-jkfȧ^Kxl|% FS 0Sٍ|sTgfۧ)YIXX$@LO5Wͩ/\=M w c&YA_|m7![`S:%?/T<_>z{OHJLtjJlMu㳹;wN7|nN݈H I4ØV8q*zJ34A?rdln|urc6eo0=q_~ wrvKlmQrʆXُ?Nviۻ_5M1 ~k1_-w`{zjZ![3$=G}gn wVt0rkM 7pcFĖ}_n%pɻ]kaޥ`̙Y`|k .4ZuPi~eG{8=X$f'e߬dZ؊vuqHE 'x3]/fڷ,Ye个la< ܇>!.?Yhk}t/+yc1E Su(o${WpXc+嬼dzT06sK ۡA Y^ [ zA3-=_7/RV+i6ƽn$jZ 2b mdܝܻY?ԥOw] ,U=`{ 1x">fa(>dYж{y#ihJG]/ϖDM[[`̎rΆhױ)ymxBEbƭd$6/sqfzislx~.{(ZagDž>1VgL O#/UC5u vloOaWaG>7sfuuTww2i!~As2bw9bxaprfn Ad=[c'ܪ'X&N=i mAU˭VöYӒN"g9@ LQ#,O]caʍߖwN2Tmu=ut_,!XaR܏=65;A _Zzį.|]h׾f_i_CZhǾt{Gۓ{' s: vU#΂ .} Ob?j1q:˵fKX =ačyp 7/4_uf'zCuM7v X!32Wu"q¤7 zI3hd<@'wLi%jE%Sx#%;~RIy՚~c)[M MdAfWpHt!Wy1$?>gV~E MOͬqU=F:jĺ :RDۋ?C^t8y5؛=1/޴v19"mlS%Txei,ianN~NAIi9b5e?*~B Gsgj~1aS$1%89\{#4f2G%zBtK d}F[2Ʃzɧ/Puj{j ڷ۰Ong.?[H$[|9hqA6C\(`h_=H6L(R-#(!/$&[-"V)[BAMR+Q>C>jK>\&kChFrgM?vI*I~)! yyٻAw_Fn4L6U|.Z: Uc0ILU9[0.-zqw{%?P \ͶS.A 15=2;DH(Y5gRodEbef=埊20BФyb نz v'qO'v_^0_o=Լވ gY[\!_=F)_ 5ց(mI \ 6{v!+Q&8hjB 4үueSԭtCou /jD9i@ ݖlw4ajpPdΑ:z(^>V8x(sB;WFxCXՖ빹jW\J Wmzg:f歞byŔ\7y 7ܘ<Iwt*B=zm<  Sw/(*[˲tK$KӾЗ ~TLuvȮ 7jҁ߾K:ҐP+9*xbt0Y(T\|>MڠY:c(n]24/hȅf d+Hk%gX,Lб>\73NǠλ}Kw&^C^/<#8K{$ӧL_UU-)V,? "VʇwҚ--@ʻ\o-ز!_&[aNyUS3ﭣF0w"}aKf Si+}蛞e* %lr2դ#ռȘ'w Oּmg èpOvVg;k>UgTV9 V4pvj~Se.3 qV3 vJW 4Ypv;6D7[*bmgpf?w@*v^Ey(;Y +'EsEPC _N7Zrq 6lW̬Rrp ap~b4o}*$p?OOr z&֫V67e; >l[83*>BP9f0*,y.L*I8taɻܿ3{{-%˯󗕋3*jhvj > c^uB%cT-V{ EܰX&g>3D4哴oR6j$-Drۅr6yq?y:L`/y2PY'x}hm{Rts@(ƣsg7$uIyn0pe*O!B*_y~k3#0d{؛fUxibm0o/@=ݟEnWď,3 ݣ|F WGHuPRGH*( 3 '[^; OES{/#b55cNxF+L#SDFP-i<\HƟ'Y8}9Coƹ@GCVoRruǘp2cNyb j@f£@|^3V u^3͜=FnȡW @A  A @L$IAёO}0Mz2z,ya|_c q׉`G^$ S6x>wXtdWss|q 总al Y1y$$* `pPtP9zVU ^:!|ϯ m@$ qA `2;FW;H>2d}ly7]vP̠fg qD:3 Tp5hmť8v` ̃&lVAh7fI:d0a]  ` nv(8'+լ~o|Z-iп:*AFBZ$ q`!csЂro0$`}]g3#e_Aazsv2 YF!HSmҹy L,1}#/HF!{{qϓUY菔ߖn߭^.C0.=%X'lY'['\_{̹nh GK1e$}3߶+R.ŒlF]]lj\IP$oO=!YTWkt '?ctK)ͥ9O1[Ϡ%i.IhmSkiߏS %;TM笥bu*C DpcGN|bK`X4ϩ%YV~D9Mo%K}5Eh%#$Cձn <4+Ѵ#2qr)t]%k>(HtEesl<rԛ#З&Y{+&{$tjwsNF穇zeqxh0!!Šls`ttGI۩+"Xnf1>&bJωT#P/i>·!'yB9+ͿJk xƖzy+v1^/q3,6w3ҊJ-_^]vҵanz9/֍>B*Y9O5BH+e|~d9oC{ e,%mk8G}:O}׺κO*zld-`ZאHE)PJV 7 *k"_>+S;h`ɠaNP7)VWO>iMR4ۨ=g,m]ႳnnqS'wxFQ^!Qh^1O7h3m.bY'gAbJ$kN~쏄rN&|K=2~7KfȤOlh(`y3.BnEl3.fa|XĹびz|l5t#Tۧ١ zҗOg Ҷ_0׃W]i6\keqГzʪ&f-V/͂ɨo.u?0t~InYZh3e'[sm}`qbjctoZcji2BA D-zz~eyAFяB*Nq5-RrQZ^6ZYװY,㴣TU1)'d ed%Ꜹ"B?}I&&KposϽy/|ͥ+Q^2W$!-NQn(U92 f@rn!]GAS;=|_=;^-wЗ"-^g]1Mԡ'k/+shZ^eCW1JN1O=҃Z7 TT!US|zC}$waeb+=faۉ\u=OK Y]&&Y|5ͩf~~ɖ*QaպF^WQǒ<[ y6%{ig+Gl5m-Ogdb4]M\{ 5m$;!2K*RTS=S뻸'׃UсB` F#ǜ'k$i8u&6}+3mHR_gDeA5tD{#b/ Nvfȶt3 UG$e$)6 6osL+W. m}o1v4|)\$\H>  6 bD]=,:%ZZ<,}cwunk?53|X[KRdX58{쩦"d]M@ Q515W5kvqYfvlށKJ=7{<C.Gp]AEWM3pq^s5ÛXZh+:^:<65@!QZ*ARLG'!gM+'$k t<;ҹw*zob`T{I^`|–9{lswsY|RvBoxiȏD xl'=Do2܆N@2xsLк8:,mr!_*毺⭽se^'ru_{Tq(T3sֿ 3(>KA?Y|ۦnC0L  _#ޑܾyEP7^r䞋GgkL&Sm>+*_E#Taبw.kFv`1mC T:1ZFy.<)nWm<. f^_na t}ouXI6(@P9UFba{uVA|n9Co_Nyp|g 7SOi&^Q:LvBZ:#lNҶg׆_uatſr50H-ezFY@G-'ՍwLh,%WsZcNkȿޗhF`&Va9ojqN1PZn43S[DC{ Bǿ=N-ΝL.|/ô>ywYvr$ƩYy_jE::Dߨ9Q`a\-x7GmnG i2-5.wsW@w18e˻[<]7KK4,ljE{ 4Y EP S [%D] 8 6H`;2\zF;KĥU(NUH 5sv]~Rz+H#@MTaحV­r)BNe/sIr݆0uhc3mRM+\H{"[}e ^.7DmhA Rexnv|s6D9-g. /r y v> ׎D3fw}nyi鸕ly4+C!7;),Kmb7Th {cΛ!*E =X?J:xD} (kVgY'ge'gM'g}'Wk۷Jb2.Y9-I~f^5Vi ^`^H^ZjQN>qP>f0ПA\K}*.W>>#A@P?Du}narpٺn6ѓṢ~rB|‘plww:_*GvѓYX1hiyLێFyYM.Ě_~:C;v'8=ӗe6Ν}&Aϓj/ч)2$l]Df*~ 8tZwju:tVli\Q;PWQՑC(t ,^^ۢ^+\sB_Clta $z~][{.x tj}kfl$B4C;e'FtR$SrD<cy#~q4𶐪ܩ,6Qc&\/u !pwܕc]=l C!F`[O#;CE냤O~\>z`& v̖vbYW rcɓ_Zy!b"@~.NΕwP|bmYR!Yw;Ku| 1:~Lt0m˯ږRWL/j\>@[I+y#>`$1p3ȒPa(^';֡%|X'qN9uC.H2!w#}.~(%wj솰vo>h ҂N ,h?U)uijbfdnhc.~.vpK(n{brmzF`lb6 PFef8uZ_tYtEIq56I')q9q-sO/W. 25 ōT*)~ڛ*F~}cX`HayD$͵ ƹ?vӹ6\(00'4R?/CQ31qGR1 _2u$BB ܷOAcbVV:2Etust5we3ȿ4]:Z-tPňҧ6qT$3HG?zzWWw>:3Azh˦}/t |q6u-?sYhlfj\nH:ۏּ!r6ֆj62!ű#"GyrGIc5y`D'Xw:%ob5mF=5Y:f(&WYW:xO7|.'گgI]T;qVc$)0'5\ 7)Hd._OTU .%w?/vn,qB[FS\c4+A>~ֳ>mOw6k-׽s֤ɻ&XDR,yn1F#%Ru4~O%TS<{4O^{_ƻY3vFբA)gC(&(f 9A]K2;^L @u Ab]>#)]~1N~5Nd~ s.z7(\d#5bUӰ*(N)FY2ۄFJ#|-?OMLLLд֙0$ڜbj\Ev~F"e~4| _B|#X]kuenмDfVW ͒mG?;EOEy&2dAAcog/V.Ξ4OrBJ n܎Bnaaa"ߗ69Ɍ Owc(۳OW[9 bͳ]JnPoP/1Ospw/ٿէw4p Afqo QΜ72H+zgGr!f#+َ``?Y|>vݟRe$g4BhH|i&M~UnEM9G5CV9 ʁ:d1[ㆹ-MiQKܹq_6.rjA@8χ}ft{`x{{͚R tH]WW. }Iﻮ[ @#G-łmm䇵`!F뿬"z=kDjc;CtA~fR?Y2eLxqU_a?`X纫=O5=0N_)]nMbGj"nb.J{Wh7SM{7q`%S?-fX{N;w#ϙ{? n1Oд,~Xٳ0<49s> >K>T(:t>tnAzG8s?T_rNjTDzEu>sLlIzۤh*)UׁͤrڷiEpP̼Yn%%ZH{SU/9oatҪ\p۵v>stA؀flg_F0OF^πyX6w7r~DdwQ| ġ5Rc J[aGW7>ߛ=so &`K60Џ(8Rf"iEYY/\z߲Ǵ#o  DyNXA5O#<^}tday]|e j8v:`/0H2tWiB}<Xڄ'K}'?MQOCy dȽf@@x{a  ݡ`H^ar\P)M U.ڮ+Wzj؊:#`~o"ISֈ^, WFjVq5"[,kډ3C'\~s_,-B $׻InFQ#gsoS{U:޷?n=d=?!3@ ݠ;~rM-A-@8:O ~j΄b؞!7C"j[#Y}0aǜ)2<~LVEZsZz? ]+t̖ͅK{;WI>M>V;E/O3)_={Bh& 5NY&jynjG[V-j>ez\[SC;:Ps12qI[`8UDCvA„<ؖZŞ~DMWK"0gDi*zk0B;wtAjo x[&gO!> $L"v}[Z>iw*%%N궨9;X!n%8yJ\]+ 5NzUgr䟺4Dw3Ui*C4ϩ֦|Pr%tտqjykȎ:UT*yϚPzEwB]?qo>4c}/aZd;˟^J71E_fjJ4}0%0As{7E4c՛ֵJ"_h,;Tvz=>zzw B@@`]?X!۟|s1lswr}sjD^>(*:٭t*Ge㫰iTS=bIYrYaN~u~~~v9Omwy>肀hgcw$W]שY:}tb",FG }:\k LB+zja sGA6W.N;[ ;c>ռ19@CJepbrv_yM, e嗝3!FJ5T9X5Py-IB%`am^rfR4#x;jQ/#>45{uqԝUlPѠ9#Ӳ1& nr݈9݈jDHxYJ%"lXl2 fhqc|mUW$2J^۰+pRaA 8$\x+MNVxaP 8U.U${?wp9x:9eBkkq]k]7q7gP%E-b_kR)griCyT^O0. Lj<&v_*>:%<[}q5Kq7ʀ@6`hU_W]h~tFDzX0Uߞz΃;VhǀjHevLYoa/Ve,~be Fm]&a^zMb#u{tbaAv>^aym#SWv.Fַf'a+:e#°wKϗ`$KϖNM\7rfIwI#޻Jٌ%# T}k_a핲ȭ""˚o)pq9~<~zlxmΰ͜V9Flܟ!m7x%mA{srlFMdѹ˹Y؁랽^<^ۃ)rËE/22L A ifBf Lqt24U`]|/.ת Qƛesex}{5/Hi2yH/hlzʗ y=ܛy([Of>wU*^N(/P/Е/0.ЍQunPjJ+ 8x/F`sx;E9-u&~ sT pݳNC@5ClO8M˜ O ܷ_d.PuRRRk JVņjs4~l^/>0gj's./9f;k⽬~](q&tK8 ƚ#*k5 pqJ^Vlb8$88~rL<~LshC̥W~!y< ~ԥ0%+IG.MҩR69bh̫% %vg/CM˵i%9bndWo yTu~!wß;l4._*Y/-Ii,N8:V}mvPݒ,HQ\aЧIYuۉu&YۤJП'=ě*&XΓKa(jhg;M%ЯpkiHEșn"rr4u.O6guvݯ<,Ҍo'"˙jyi{uO rJ5 hy.έnV[pwȡ.vQ-pZ.Wk=Wm066I1OF̞ 7kF,%rAPNj!͈ u4emO4Co..#J\\J~-&݄;,ACu>:SGᎷԏl(z]YXݺ܅* E?%K/p7+ϧt\2%m(Yzj-d,%z|f?F側эT<*95@86%Xb{Zz#x{0EѻδI(32ltWsqXdӨR^eݗzޫj2BOd[OV_.)p;-h3t+ǧ3ǒ`w+ 2!ewhGB'_Γ<.8|PurpFP:y}(yL{5,w8Ɵ~jxŚN5d!N/ CRMoxk 0b[+ߛ=soU ^,.ZXpOfi}ο ;`AX*Տ ڝax\C)U[/fV^OW& W$*1w_2 "haw02Z`w uA ο}WؖE?<{q~xvasixn@D!U+!G>?^1!#}0'j6M{XwZsՍy;z3NU˓|vfy!xRJs2wl$5b]liMIbLaR3Vm|犱;J\?9<8؇QC)D Ϣl\vKD>9Lg%vUSw/Qg&:m}xVNx%8U'S+pU#yGXct|N]Ɗ C;V;LQtrfmIlcyX@PA ݂drj)bvݿO:dgeǓN.~XqsO(U Ǽ셽kUw%yW?9*=DnPnLOuԉ]1zzv~qcaeb>SUܤie%uIJҳ? oKu|N%w>o~_gYܹĒ9'g9#%~ 6"X_g$d<-G-1b&3yBiqa|`gl=a9mkg\`PoRg61/]=q1IοT@}[Bon'VjR͂ ml5 Qoj,%1Sd&r6K)MHO|넱[ '=1ùUB$/jd+D~@#9nk2j?Gs|*~;(s/5uH~p-[3Ɣh#?z}@5Ju ~Fv!+`QaqSet 9W yf{M̨4+`)8΅k.MLT+M%]|ְ)^[YmWW7WB֖?A$lt}H9T9 606Ȩ/MbΧ.!-,.жHԌK NLpNRɐ*+X]+X͓[IWYI-7џ}<׊*n镬 /[*XشRIݪ$hZ88X{9⽪fDPߌߌ!]zq=Ks:tų]kP?Ϊ'7G YKls^Fϒv QuJmGZ<[gݬZn!ZN=E ~ '|=O {gFkVFFCf]F30n_,rg4&$9ؔ(.'^%x{7AU}s$$XfF-R@ho 0ՅNi& \ \Jec-4Tzqpb` <kz^N^%3W;Cv!pLqխK&'r|Gu.AdeX;p3[Gm>4|.BƻImE?s2zU 33~&Dd6n74W=.zj(CAOvߏs^4Н:yzjC WaXLj~YǢuԥzеNJLSK7ݳu EF3b;tź>fgRջKlбoxl~u?^ִ%WkfާD $3O ꈥ(D+mJjSkB], tTS5y+>ד=/>zQm ~ |,`,ccONLxcDCRjC-t1R:B9?i'Ng)5z#rKګVVke"ɌD~E"_w_o{hg2ZU_Ky؀bPmJjL( f>E `X6t5WOMs_u췍lwMw-," d=IZO+֦x D_-ş|ݷCWw{]n3sM1<4AiS}_pE  LTH%+Z|Z#Rk1*2Q4"ЫfRoZR̵ N+p:g}_;5{}-2 eb8^mRGn+-QHҿR)Zbxjh8]?oh/bFދj&֥O}#6^Y}rc;'X2e<C4FbKReBsŭʾU  4pn59lzZsY|!ɯǹ.N}l kBt~~>@&w-x&W\Wé :Ü58#l1>Ck{ V'FK ~]gk4ͣ-m-erj~V, ,ϧ&\'Io< x,*~$Jdɝ$+ y=ܛyiBoѧWX{g6g ABT@T@P@ NFfeays?yΞeΙkom}E7N$x7 |wA Z/5?Χ؂%KH8'EQEDŬ+`#LCb_CӲUKibL)"ϝFRE/ XO:K` ABn hzHw•A̧vAr@ֳ{3Gtݸ.fD͝nk"7W%ڨpW&H; oulRC泶%sY kvFlP@ 0GEFHGF/l5ࡳ ^P@m z,@BvD; X E)) @wmABn1C+ g^!G7zF`* 4)*1/W h'9-?CG # C*甜Pvq(kq$- 3uE]vxcC&)un-Sj-'\{<%a{;41u5h/cTA !技B` XFil66K;@v8.큛"9i땜ޤieѬTfպNw@Zc N:Tqt0>cA1US,Gf;O}k)UH5J 7oirhgwDy螄/ (+rt٨+0+pLؓ–تj-|Spxk X"ݥ0Y6sQq-l2@Zd@.@)]E&0}`,]@eZvkˤy7ʌ%[D Sµpo>3MM*A 4¸zY&G_Q;Pd@? q=nTVݠ+J2y#M/`Q e ZB@*an?bhw* OJP5vϒz Oڷb7WwLd)/'jG_t ]jzӞV'Y*]18J~~q9[ȱJ˷H!77N*|:q 5͉BSft+T>$7)Oۻ>e{Yo۸mڹshpfKңr9C u`ps!t&Sx`Q]dACgvhػk_6n (4W5~Iy{T}Z$m~2Wԅf o\*}O08("yY/=Yf;U؝g%3gb[y^j*5?z,9f"^T^Ab08N--E(sm=}W*ĮsULQ-M? oa-ciWS)Y=w ℾsLYJ?4aKhTu#rgcfp!Du>Am!^)|ڿ qu;D&xp_oI{ۙw|Duat;"n*<18=uwqa~nkmϷ٠y#-xQHbϣH7VL @Z`T2aFƖ|j? T(?@Ga`/7-YczeiNrځ\dHm:օl"td.UEhP^c{Sn˹.t!^_G)B%QYSM5BBA !,D7N}SoA F:lukYr)Wj;G(O^Uyu(y:f: UdmD-˾4d3AF~zR-opihohQ$$լ!՝BD@*3G,"Ӽx'8>ŤЏdok!^^'zNˡ9R5M?\ӭo(S,Uhl26.Q2hǤvz߁)V>e~}+FA`PM?&!qnmN J-,d^ tE"GU#Wkm>ivlWToE2mb,рS_ΛڂzZբlw2GzjD|`J׋i2mKo(j0bGy N_J^`\a&`0LH,'(Tl ~>J{pDxt|(h }TzN)5.\5k\z8A9K>aOzG&3j e}؉~xh:<{ӞuEg W>(\ 5ƾa:RWNo ~u6q ]P3^eR@O 3o[_4OaG͍ŝM]fƐQ4d}pmS "l>cOJ9YǦ̢J5,D,MYJu8xNk\ݜ2o7$Xqc[|0&z/pZʺw; YSm>h;$[ڑ) l.N'_ ~Y3Qsn|TzqKg, J,0ܓ®q5ZF+kx[?wj,&XLhoׯHw.C_)XV3|3jnbysPdTw;}6nO5XӍdAy/Xk $r5tpw}fЛaQs!a;z5Q8ꓽazݢETKL<{l T9mj%}(7jUa*iu!;p<@9Tݓ׽ 6Fܑ؋d5?YiGstE$j!`^©<H5SkT٪}?dӮdΕa["e}[GckԳF]⺏X 0l wڽ.(X1;3 7 Y3()}{HpPDpmrl7Cue ¡-M:~H4I/cXjυ}Ƈ~+<^45rRh.jc_ xtpQC:HwrV_ @ P:)]3<͸^{ZTvxQS)oDAmoC\ZwNyLGTCN@DIo ˭Kպ?l/?ûFԗ;eƷ`s6X[EfuN"t/ô"nb bu!:e_@56Aj,1 pw3K4reoVa-Ew>D8\5TW(Cu۰@ϋ+s, \1̥ry+,e .0M1g s~Y#ݩMSI+9=_kc[Իs-ɨ9-kfwy-ܚy22[GhS&d)#AA@^l|u#F;_L8bJ<\ԮRRfkj $f.'#cD:f`~/oY*v]3aQ_` 2w!sNlhn>AKy-o(Q .)ʶOu< lK B5'b6R4FBsͳ0LSCOOY˷~$ϩYylFIdG) f~N;'1jmc*h|E =xoPͿܘx gj.R7Ey1k ڿfLzii9a/v%4Gd#xF٫h\[ԉx c7~)0䎏SõlF@~ xJ ުߓeB%BE"7"'[zߎ'?]e <+Qqr O+ b6ƒjS, G_ֶq\jo-_`tםmm G7S4. X Tu|ݢ_Zܙ ^y=f[t쨖ߘGg[M_@k8OH0`eH߅NR `gw/{\w`"3 ޘ C#\bjfwﮙo_y\v>2=3&1123/?qլm| ?f*' mҪsYqw7#(:C?g*:FĉfX!~61flcR8 4T)*D.D2XϦR rNljˉQ~nb`Y}kKN\ϨA_#S*ܽ-#Ქh E.+`i\̷Yn[_4{d_a\ @vGW( A'U':0.*w׌j!{+89dM>3p xDz4ke6R* sZuDG ֞%0a]H G uĢpeńwR肮^n0E52ՏZM*!VaVΚ^ hi4bpD;0MH8fuNomlP><"߃vіOj"5kzWbge>fBK^սx5;H72Խsk;mr˱;ǣ+SP{*!azy+mC^Uv@6DkaOvgWjcl/ih+ 3sK}kK[ǞUvLO]S}-*_AB,g=9R/P^̳ %*8 #Ddh~0M dXkn(0NL6f)A-nF~X:d}RZ~O ) Zヱ7 ډŬR@. bexg%ؗ@wKԀ64n|{EyZX\FHmx5&w&V?=Pn!'V+c;Oja<٧p-s3?Ӥ'S^eyAC&_"u~gU}=400F?e2mj7L%t8]qOa 6`"wtw縀 =\7i5kWA)z|2 /fϞ?>~z^ (;haߢ/UM{<(hYcmn<ʹd׳E)iuc}_ $nأZX1=22l/Ŧ8edVL2 v5Up%gM%氌Pqs335 I-e3JܤV`V9wgXBb^6\O;zW6,ۛ~)f)dOu#d]`jϬc@=mKFĦӊMBC9-,G5k ?,ό4uvpfL(iŨܷlfz{?4PT=].}l)B1 \˫1yM#ݴ_U+FW(WW)VɗgoZR`|5$lxb [Q(lD˹M|zYp֜0ZkorӚO;m';v]6'Jk<㓴;3]T_GtTtMfqg*­k#tTm6č¸Rx㉔ypǻh%\ )>MH=\5FkPe(dC-@.xձ?:8[A@l}r{QנQc~ 弰Wy'ńdTS]U߳RgR_&vOu?WfW(EGuֺ*[~ 5Ukg]"?["=ڸyB1.P΃݄r͚r͉r͓r55+]u^2Ʀ>O'S'Xp 1϶[G. fD3^N]SCTPUk*J6˽o-n?\zXaӽ̹RUdGѵ ֹ,і}?hR_͕Z}Υ5#ax8YXEאj4M˂H_ոw҂R j %rUYZ"ϒ*}2~Xxj,Ċq51LI9\}ڜk/RF泇}EP #ߤ<^<' ;N$ :䏪O*ʒ,ypV,v_m}Zg clj'uUe- V4E @z)BMv0|)4vi`*X<Ͳoc[[n<>F)%},}-N}dUL?{[ˏ ]}#~Z#5" 8Oƹר'8X{JIJ>B"SC4Ci3Ez,G[n-_Jdmhٮ#EQ-,ѣuٷ_jR}|{}AY>M>rɖ}a{:6 Y,1sekf #^a >qUMMI-j&!yDɇ8yD{ONG_<'NƱ-`!W[m=O:K^>J7yaݷ 5U+R{_fe~i;^Leqkd$7J>9u3 ܚ-rk糼. S8*Z\>ZZl(3PaD6UAϷ컄3 1|#\Ss@gVF,̕(NLGhFjG_(,ݔ[gdtc-"E{*:a(?Ë@(9h``64v(Ƞ+T0 ګ]<̵σ4 l(BS MOc&:>M}m_ȷZj:Xp$qE0L{?Rc/Fu'^q3Y +ۦp拏C{]YO0޼I#6cd'nU/|ф-CoOTlp1qXL׼Dl=!;Qu' rs#5%ڔdc+P}(U-E_åA] Vj)\"͵8}O3 *N)q)egDXn-zFKAJ$UDMoؙnu/aHDH\O|u9eM4abk_ڛ+E7 7Y߯?^0"ޜqKlh-EYz[@|̖|W|V6m2U?_q1[B@zrr<.^m'7QBn,l3D/ @MAWWاI3%}#Y̋4zW?싓ZȊukUJ)Qg8j-y!H}Fs+o&Jl)zsWTjk qbw*GUgŐ$KF)7FTG Bi2Y>tp6|-mPsXtbmWurpd uE#?HXg>+ݢo?%/P9 ioǡ|JVϗ= c CKf[!)G[azS>KtQWf>"Eů|04 }`V_LL2_|:oU):W 7ЛB-rk)NwT;GMܝS5i2Q61h ˛T8Mym p/߻ALKPssx^A tJk;$H"N:;Uq;'K{*N`riG g*x T.*tvWQGrMAQC2q=㻟82lk$f PzQ[x=9fYّ籍iYwǽG# Oɛ7HKpr7.]hP2)G|_=<;8YNo7IdI!guBM¢jUh=w}}O/&q.?h"kdLQ6ȸӯxsnZu={Avq{Éqn{wolA9KIa3ZDDw`L'5x֐Z<_,S~8! D8_7/q˔cΫ;MAC*gtô4Xߥ?h#9<"[l"^gX۬lިS?-6_PM%%q?]s bE0%AU4M_{vOұ!qn}![zkplkIeJy՜`X-.DgˡSЙb\@]d}ꑶkʄƺ],p:= <,'{4C5bM5kW%\,Xu4U$]ʏ#?$^7öc;6}iW) PLྪe=~>!y}[C'E %le+. RO͓>]1> pAMNtTbNC/t\lt"R˘F[$molվ0 z-vkr˭yVBVKE$y;-[ĢUsxX;4^_ >'}1 %tiϮ1%G+H5PsԠq+/)טrId6  }EW^tMlnb-‰v ͿjjR3#kaTG|ՙtWw0\6I(h0#R~ى>>MJ:;H E4蚢i}V*Z|.c7Q*P3!gfGq7M{~fr\.tST+$wB +uV=n !CIͅZ2na 1Ə h.^Vk"^G:Q1{D}Dٰ]2ɪG?R dvb rrqg3%s$ٱȱ8C,b[8]6"@J%DPEoKotw$32Tt%~yv{l1KFӼ3lEk?#h+ŊKt7$ʲqOif\ٷ<:.l-5W/-W,[-pu叩Ͳ5GR8'  -f*) 36w]daqLpC4YPÛ+~Yo'T"oO"mfG:gF,=Tj*),=Fx#dk~է5247nlf0n44` o PIVvrޔ`.4|Դ[qsvY]F4l9uef<{Y4yY(K4keȋ)tU?ZKFMW܏#byˢ?v({7q?Z9anMs-Vt}uیf?ACmPG6+Fc{3Y fIw)ר{iHDo[n5AhCwORV6di;?(VJD+$.9o-G|G|P0 ).ܟ#SMyAA<H$w}WL@P@>9ȁ/ )uWT7TKBX94gZ =6d①+hm ,g|nlDZF`\#=Y>__: 1DCdX<TQQ!5Ҟ#H`!(6W6x^[o6pO)G A_Ystp݀q9ywMPz*dess ~qgvqŪ۫Dt/t&.JCu vu_QDQ A EDR@n)Ρ'ﺯ?uYf̓s`0 X}6`H#^FWx+2Hzi;^Lq.CM2`'pq5 OKDLO{rkvϪx&P!l>4EG Cʥu ?{$H Y}䧠W̸sRjR8*bhx}*ORV+R~~1]ʹ-I lUo"Qa捹8K7%7_$S_NѬj-͏.w̄Dp!+ 5f`7Ak^q8~ʨefs$^M#igMT=rCY0Q̐APRa9.}Q!6ˆ}>Qb~ᄱQDDz]ּ&ݼ]3G +IBN,$ & ҁUoU[3FO=tN`7Ss~=04点bU·{:{v q7W*lB.yv+hLl㏜,z a A_3GıF;ȍ&7 {3byN'V|e[WlB'>%b J1=@ܵ"U4G'Re8JvJJUpz{c =HsR1L|giahgj=Cr`z3Hxl/hO,w$}gۉF'1J9PþFbb⿫b~qjUrxb{U\*.I}JӢy9'JCw+LcJ~* ^&ǝ}[_ ZW0Ig+8|Q~JH*ABgbV}$yah܍O7;ŊySRkkCAXapBЊ㙭ͥۂלߪQж^ؑfݱAncUk߹{G,."͙8d̟eowBw_gdim+} UIL*-[Wyaf~Q.V(tCK7GI(}֛<'%{pw[Z٫J{|&M˗~ѭNq;,D̋=UD2ٶD[V~~}+:bO*|9Xt<$* S؞|4c_3@ \Z׹u(o"ۍ\l#c=XNP|҇1hBYYmb2ْK˻(H KJtBFdp-sn>՞ `hjYV;L$#_&ԭ; ?ԲsNaݨ7@n= ՛u2kIP#7.#(E#$Ыav5bM &ؽyy|τ`Ǯ>6jIv3N~G :ޒ[tY:y[{hWn _JMRlBMTe&e3Zp@L{[ҷp oS@(W]r[dlҾ#ME Uy=d~yaK zfTLo]wV@UWuvҚB䶦ߑ˅5|aslT(',*%)z:ʾ'zN'+jHuvpTplP@+!sϙp$نg̳N|.&˚d(g ;(c5ף#Y%7#79t[JbjxjqvsI+26@<|; @0Z߷#4;|m9٦۾cGKw\N=hÊucC2NV#f[&p`P;TϣA ,b@@A7us-EyS,yPKrO3wO3fwlD1 xa bqJw-P-~R{xqFO= |-#P|az=s[bhbz,SoDH|Qi-rǹյ]͎KGZ kVz,_uN 3ޛhYSlFwQ/t#%݇^'ޞ#:GWu~ʟ0t\M*β,m8r6?Aѫo:.^X<=pt鄷m~Ds{{o6E_p~a .;OnїnUs4˹I: A3KMޅX8Pn7cҲUdFqW+v }cHlRŐr="?$ ޼h{fB"Yq#wqgnwJ=tAewo]vࡇpn!_|?~} Cۂx.p06kKFv82ůUfU SXTH@@x@=y\ZA0 i١Olk.fY[S e]tq]o)!z6nhHhcEO[w>UV!2#5~n@\~9|U 2o+Ir񷞍 ƍ`B tl[B ?<0Ǭ0K}s딮cK0cks#TӬ"@mԷ6<`79xNuzwx":U](u1/sTSj162?>^'`>]b,kѽ C@((nǻ YT@iX"LlsGSjyb4l{pōe1 yi;8Z%r銷yҠ|M Xlgi 6QRhlp#Y;PχQQ3PQân6ܝn…#4m[Y[XZ"[}~S;e"7սOL7]BS䚒\,=t7\ߖqE)9`)?P=&`Sb8e:lϸCIA4e'SŷU Q/.wc3$ /H3ɢ&&mus-Eyk<YkЬǬ۬u+,.8y) OA$Yiu&  8p/.n8&=ytK9DGO1cw_۹+ lcul.Eu.NhJ"2Iddd7%-F˰0;Δҡ[ߩ;KJ\ i#mC%8l*-VhM03<=Bcvhi׵QA)ofo>Wed_;XO j: j~m/m?/J+s^}i0Yetp`mw0Q4a Rۅwӯ&#Tt>&]#_|t7ѵ.}m`DS#!V] t|БL%]PI 2nT㘓 [ypLZ \)5ёݳ[d\tNGcDjgn\pAG@=z!Q̉w1ӤaVx $XTx%#&;?LSh~ldh`wg}$iNb.nKޕ32 %^{џ}n:kG0 R&S3UjsbCe>V sits/ǖum6,='/Q*J/RQ_n!||l}<}[`r*޾4vT2-۩>T$w`凝)[q8!蛱wReu:%sXI3R t/q!w|uf}sjw 6]@o"tAb$p/pODE%^A<{7&f]3~tEґ)K o3$"y\Z|R 4Lm ]/H= ާPs5(yQGZy6#,1AX17_˗4`Vmc"i#+eUB .̰6#h'l#wKO"/p8.;3W/}ֶzyo\=L~(r(r? ' >hL5&B~Q5iM$w`t82Ӯ9R;~Ѫ'ɂicԓ3sI%^x̫$yRϴ} ̻ܸd60G /\bFղZҿ.@@/9Pw @#>X8t_x2u Vx3 );+>),#v&O|(X#>5B_֕0'H{ ' N`0ZսA_[:gjGn#֩rMѬޔݙ[˗] R~]>BQ`뉾UcGF!JS\=ޜKݼ` ?7Un>{E6 `^k*;3gIHF(T_p41wTLYUe WdS8r'Go{n>4zMw^$3˰3Vo ]6u^s5reΉaA |,_]h]/&]*|l#2pNIшUu674fO %N\2CI,ډʖ7K7Eݎ=E]NgDZ7_p/Q0&qWs%02dyl e :y@+9{YԺWT#{V{ #jDs=owGCC=ctiW#%bTA49t-_Zc.5173#H_:׹<4w4=>j߶} QNt5%F@aXEo]L\~HxP|JwݭQ".G 14nNݨc]#ET~oh4K5?yL3T5H7X;[.,bwy!piw CQXXwwwwuL~qwÎh\\mlT8EHp0BR<[abP6.2)L:l-D]]A~RT<';ky{npӌԎjU LX I~R!yBҡ\ J*+L%2@ u]?+錓}3OWwoL?}]:&PːXhPI8ۿ_ oWGSGo`I2~&+rQJfgOeȁ[@= lsʄ磌X$FGUFB#B#y;EF\??[Mb욭',e\||m^)rcuo2`7 - n21EM+ DZ~ aIk _ 5tisu-1OϑOa%}gNx=RiMb&t5n[Z^-O?˔4\*Z4o4^T_BJ@ 2woQaeQɞ%5pQ/O]HUCknH䒚+c<` J+>Y9$Mϩ>oO@@WG9gK 1K|'[t~zH\jg#n/A]֚ǡ*i0=S? \3VJTu P>bilQizu[wVtj`mniҳwW+K%-.ˑLM 劫h]ا^ZziKwcn]< Bal)%6:M;^ }1FޠqJ< cꢔYϐjb-Coe0t@ U٨!z#"G7r/J0$qt9uybalnXjusky/SZ4b |9 ECbMh3QfrxkGF˸\ \Q=v2=_:4>l%ٙe8gAg/_f ÷=Ա,֭69YE'm)^ʒʒ5"yiS< b 2 :&^P}&Ӧ E\R 9;.>]z[1!i+V<5W*ִǠ?P2KR# BoJu iv.ʣzWn-˘h/C]lPSbwb?bAB4๮^VgKwztuΦ8!;V=}Ki Y/=U wJOgiǤ/z^|!m nV?}*zNeVg L3V*Օm<+ӖV@Vhgmz5B ~uvS~iV|*AoɣC%OXp6T>Rciv= Rڊ\ϗ@f%Ekc-ܗ CGTlmՑ"9j1} ʵ?;2{J>ӌtSL_F>3$dR8DWE:0FTArI}L퐳w=+?*Ζ^IQgjG;! G[?C#4sCu,C0a.Hk| ի+Z0L/x/)0/w{ScaںBH8d $ ?+t{tyBƠ)frvt@F(z@?vljf冻׺Y4R5aI޹N:'&l=A4Oe5Y!CN=H;Rv.ːƬ6O}oP&,Rw;fKլs|j;a?g@q|2 Y F~uUh[cC `>oڻZMW'Ǘ{4ǧؕvT.pKi9cS9&u^?at\ZTSSpݻws_yJ>y;xN1pIՇnd ]VahWG:1Q'fIg0g6|5%Th]2'j+8WL95A55?_ [ Qz_cT>iQ Du'e ̖+'k,b!M3KOOs@|@zp{6 =N{O^;&xC n %+w^31}/{ [|b ieZZ,engXT{ݼSq@@;IYT7(Kj)F#d/"91ԛ>ugR?nR%u\ߤJn5eVD`Ѣ]:)ݦ5Lc\}&MsnIzpfLDeTM-J5NPrH23Z19L^2B13ˆluXƍKRtI;1c̪t/%UF 3Ή;Ҽ{t ]U#`Ǜy{Yp~aF;/o>¯%&hyp>q=ug\Ji>w~t 7:rяu-}sҐ/'f7~Yؕ0A@P75jz$f3M`7X+]D{m:ZƲ>Gp"l{]K#&t~Z8^Nl_EY,%<igl=dn1>GA1X;Xez|UÜ-۹x8U|es(H ـNWӣ`AW%0,}tLgՌkg+a%[t-=c:!V.fgF>zcwZ7Rɣ#C}=]o`h$sմ}$7}qIg%mGW.L|vt5 L:as<6|:CTxEѨQG{A|c b,>uD6)ǻm[zꌆW]`okOZt=>cz|\6GpH,X  a&O'ŅGYX%f x`U\?ԥ$9wNP,/sc"ڣ_̻KT ܃:-]L4fcxL%ԩ#,&T x8U]"kf,"F j. K):)]fR`N'B0X6|W{jCu>FxXӗ=mR BMsKP#'sZ ^9m;h~+]43=THq0CKȌ^:+'!Xǫo.7X {Z7\\~]n";i: b+B0kVE=Z=v@-krdcqᮍ V:^Mm+cij~4|eۈӧ]Hbg}S(gWA>EP 0X|G2ɺNAb mZQ~kiR*ѕ%7yj,Y5*q0Ƥ7TjŎD9w%{:PNw\`4ODBhVXm{`al)J1hp%ϥUBm VZ׹u#πOWdddP(ccc3J˴krI۲u =@uJo-l4Ym+ p%1Rng/H6MmȰtS+,Vp)#@?<ۂ@0@>(5h .qɿߦB;[5)ޠ"غvzbt[m2c Oo a{F)gnLu$,S43O0Qh]g,4>;PRE08+uH;mᇟO u/ JvPgpb%)4۴ ˦gh5FO{Zٞ9l.򎗳5n롬{Y@/1 NӪHm >ElOgLjPP/x8{s뷎O-K_YkˬJc*~UqH9gS-ݛ|<1O^1)O4) \WTVW]:gSkcRMo:qqL[7YX2E9YJ^oxc[3CA[5-Eci%vN3`B)^k<kjY'S疤%Y(Z%=k ,Tͷ|^-_y!\sJsxUXH^X֬DH;ZZnC Wb!nXH*R4p.qq. I(#%J*jwOޗ)sXTl:U 2s4Ypi{Jy30QZK4}CnW&~oU)O&:Fi.!@ Bذ ,NqxxaY9A"X.?Gs}EU36?;}]m{=6wQ.5p?AOW!+, Tn0Zùg3`DǞ8{:)l>#mL0/5pI0_st#nUk+`= Jzh-4UrdgXgZb=90A&vtɡoں<58 {ਡF+7QCنF~Ȟ&[Ɨ(58|zX,#b-v)o[ܾ5 \[GDӧ.?VcؓnXsM0fB`-7`,U {9ș yfJ`^\Lզ[:r13UP[)-P(mARҖR8]wwwwww`!KpwC}^$3볳Ҵf)smd>pIbs6A31cgN] yHpHcE GLskm%e}{47 GU .".8kO=Z6P{XP_ą!Hco/D `MVTo,գ Oy@f⭹k8]>9HhV\I9sRcE$9sǬ6qTto@F !VHl@@Xmf\K 6CWaENݓű{$uL[F3Tcw2j2^rd8s%=@>ABPB׀C2zA@J G9ۃ]g!_]&!!)(8DC+k47d3/`YH\lk=Oڲ(]"^x!+]QbK\󉇃 49[.'6rDUd2t{fR7`>y {yw} O<+odLrfhxM*NOIܓJeAP R_ⷲQ $O/{,y1vud'H,N|Rپ2l]%C\bKm2F^/ЦMy#Lzm`%şzj4c4`7>nhmZ.Ւ 26}N'+rnN Pe mF\ v9O3*$C 4 $#,]uUX5?lj l%aTreqw:rF$bK&vi59fͦ9ҍ,p9zKPIh`BoV<\K Ο7 kDd^H /g@5s_z3񩰗Lj2Ku9p?@'%vÿx =F{. 0U3K/>7oaY*E)Y8iH`驕_ p;Ut1 &^ib`w111$$$#O1'DYI1 T#db O5[Z0|p`>^$gϖVaӯx$z2=J.=E'7T2YunMd@g!}6qUkZ$D;gFd:Wy+GW9R<.ˢ޸ڿunֳ׳sc4I_zvg2U4ԩFVlr͟h]( xe@H mvRp{}쐦cQ]FeY+>(XյQ!mFi%!F/"z,H'Ǫ3y1h~YDhQ'ߜ1ʶ)'igBfQ k՜=Qٶwg 9oKD\SR:)SGdP5vDkq뽻E,M h1 7s.v 67ȱ)k.`o qhLE35Z؆I^^Zʶ 140]@CfH8̯A7s-]5O¤ҹ7*X7kYkXOYo`;6B:N0{v6urĚ'GwȆ(.(G&H:_/Vl ]a)8,:oXaozpjqe, e{C }S6`QzSfoO1IUvUO.C^9^F w5|)J-5÷֘R }|3fZ@}o^xzBzBAXw.5`@9{VA:c\:ɭ6 !=g=7]arkg[eHzbhDLKnӇQžuWʞѯ]-:h+z> |gN%THG媅&9$:yIR~(uk-<'RlêN'1C_v}g+榫WtM uH5ډkN1O0v??z8|>t,^“OC!:>@\Pvy:k!1,.$ej}Fk>ɿv^OImpB0ICh-t] p?vg-ZA/ _53߱Μpۦz~lӍp1x:E1S@bzGGJG\+*{]x:`O1NA%=I;;ƀ\ !ywK7 {(G 70ϰ=OpqCǬ 'Cݲ++ *mܸb1?A?n k-j 4!WfZ)yY5i'|gqeikpv]m{殨bU^[t9YַW1gPIl  *z4^73}{7[_f/["zwy|p{뽏kHvaT "|'X1%Vѵ/Z KSdG/IKz5xpV@3Fw߽<^WW'%%$$$yk0QruITi)!s\&#oUd.Y f}zqjq~)ysn ȓ-%Zكc5ڕDᴿ˄ьBJz_ҲR" ud:c'WOͯ.د_-̅ AUtµd/fpq_l"Gh//F~5¹`BbɉL ?}u dpaa`h 5-$+L7_L,Oi4w$sY~Le'~!zM}Ri0g[g:Ā@ ryLPjhffH963%oKMWY)_ApD\߰I!è1@K:43Mri:߮J^R5ð17_* XL6M),Vbkyss*4#<.SNd`ClV^W2p+ E!Kvty"AW:~~~~ ΋&k>[Y|%gW?nym{]rgHPqKH[?4|l^r zJEh^\$_砜5=89>8/{pr9I\ϔ3&j"K{X Is` e}Ws_Ѱnjp9o N&MyY¢]p(.3FM%B +DϗsFh8j\ȨnIq3]oaD[9xGX[Cf_u|Q2) M84IO|,k*̩ ɝRzl<}~84Ȣk'rYG5yOL6A_ڡVdT6@TYg+TZ}Wy[]E,]ro{M۲GGOwxK`5=_컝%tJfٴy$46V7On]n5BER&WB 55OCENrXWYˋX=YRcttzC2%a˟g^5ԳF%hڇpW'ў%Fw|[H J5Z1c Le_`Xd ^]/c(ڻhnBeRӝKRT㐵1py}p%yF pPXzBE,9'<\8XOolͤ(MM)M,ZzN>Aq |M,#W-vqz=woK}/GaPF1gaϪOM}z: |j~ %%s$s%ꢵr̓u JZNTqH4D2Rr!S=¶?±Ÿ+@e9Z6]z/U~&I3^"Z8Q0S(;R0X9$=1:ۨ$D$2ZVkR-G8<.@9?@כŹÌ}m"Bx | ~o,bLZT;>Y+/דVnfT^!㎣"5J+Q|+E}ηr 66 l7 \ӏT/]& F}4#|bdk^ejTlݮ:/w&tfz͵]ɺ]+y{tmqVyV8.4ksJ%h ѿw O+;9( &1O7.wne:n`I[B^9laLtX>ټ{%mA~ؙJEj9b9wUoPюN1w1/nB [Qӹ=56Jڑط+~϶Ա/_ p?A mewd^FuIG`X4ɫtmۼYpvuΑjٶt <ۨ dS 7p ,Td0e#±s>!#HbCieܺJԠf8L/8(8$D81oA%NٞtdbZu 1 Krt!1iŲyޮ#.-ve)tid/^cX?zk5Om5Dm?kiøYte].Qc` -濅vT*9Yz[U 69u[RJonehGLC~ $ 95P5blZ9$w`vw`+] h*N07 *;~Cޙ5KX0.&#LF$ن4 P#P? *;x13Q3K*PB;O)@; s <{ySX f<TYҚR[ Tڋ;Hm)`@J ` +tRq|Bеnpd/eq0W}K [H-fɓ}B&ΛA;we^0F6Afϥְym`[¦$ؤJXvה)Xx J>9J)2ש䙄ST - YWtD 4(OYg owgs4 eh\;+bY9p\"Q:n N!~6Q9;XM'7\k㛃̏>DԖ#"͏< JwP)gǛes@vv|Ln*Z2Dj40/Ց\yPI\"^m_3HSϑ%ye,ǰTIL/ Z_e{jo/Iz'#nM</d.RԮ" olN޻F)5t7^{\p ]ҧen B+ ~3eUdO=]Zai(8Я^Lyu 0DDkaB/Um$~3$g.( VѧsC7csm<[?ȭ=ʅ7q^ʓ 'V8'^ <@@p+܈Wj(T۾ 궵o lߩg2^z"9By6N[4;^faQWݹl_x#km, ė5-1wW=]|>bpog隠{ƁǖZV~qyӨ}B@q6a\yuOC3֦izV=Rs Z5RNw[wJ~ߠq_@`PġÎzb`UQz%  !)% f)i SoRv@g1]Vkw)E2!R0ϔ?'`lg&Brօ+k;/]Q .v(7IU-n(}4~Rxkw}y$ݰ3G#jSΓTI EMD=E>zX'6='4ƐSE֋a?A={Tdej+w4/3#x6Q$32_(O~5,wAʁL㵭 *q`EPUI[!BU.J5fM,E1_L) Bվķޢ⬭M@x|HV3  -als `{=5 Y-n}w[ -Hl8bqI"/bT]83B T`@jy ;# Ɓ>Qҹ|* t` ukmzruB98zt=h+`@}';Jkϗ _1&01V r _j6L_-os$yhV\q]~>Uq8W?,ǵUΰqM,^5٤vf)\eTP@ >j I2|rpGکۡ~qyu 2m*F-~ݒ΋3VVB4;jcknu[BrK0S=Ce(Y@Ԡ$(O?](cW2X>R%v<5_OG34}zQYruoJr4٧\+rgG&4H/G |M!X _p>e~ɴªՠئ_~•:qb9*8L=oS/?~koSٌѽO3-6ms7Htnc6wRԡI$v'v;~o62Ÿp <GD%Kcn7 >wA`;#TA J{yw}/g::/?`pe0w "}4UdibǦ#՞xwzG['Yx^翎JsuHc"fa^.cbx>I{VkU( 5+[U!k?֫yA3fӎijG v|}|6M|}Z-lZdG2Xk(^N,caK@PG27 ‹UqVpO?Ihwcy,OK@_)Dיnj\k3 fykt]b5 !!$grxP,uXIFyNfradeP.;]=:;726S#F6UX$kdjh1=0"2_w0Ĵ*gٜB}݇h,gondbJXw{s}d,8v2JAϵ絩ѩ~F F^sj._c!{%'; V[d* Y5[BM "t2\$d-r=lC#;M6rP+unөVκJhNqf;yV% O.(\sڿCrثLxz{B.= BzX;W3+p‡`t I,i= FuyrlhZמ.NFv9,{wD?GevQT8Q,S_ ௯}g?sd_kU/`} ((Y[_.#WHӂm%S;-ڳ_ey+i2S}g_.;鯛YW\e<ttהYਁEbA2WL~l8gkb 2goPmz ?vnw~l|gW54E[QAX4ѧyU zEii$Ѻ ސα)&8t9{h/$䈃`6)S.\&SީG|h}}V8hˇW'h?/9҈7ͬ9a u ٻjg*~uL'Z>DcĔ;1;&H|UrV}ЀBپGR K[5 !M@(OVCb=Y`ި El)0MLPرȚ߬y Su䤃b>\G([k+a5]ADfىD Gm͇kfhG[jZ{fB"vyd"J6&yڈjS*+%EVk=9XH2^Pc K]oX)e.7eUd" ߢ^a7^!jG|z#e:Hܴ,RQX̿IT) Ïծ_ԣ02O1FQ-k)ֲ0nr2V$%g ٌEFQñ=v 1as(ѮxV0fK%~Zk؝zOBӣ8",)Dߑ5ς6cvSpQy =y\pK:Re!Cn+ulpSߐxR~ܳg-z[&a[{>.Yco$vI~ "8(:PBC顦'&S;FB{+7Z|qE"AzV'RİJX ]%{S%] ʩ÷+8hGPȲdDBߠqbLj,kldIw۵2FzX_gWp&y_xJ+rtANiQlԪOxJ|VwXѬyYiI׃vҡIbt0y0`v&ޣㇹ[45fٓm jx=@nkKCqY,~OmݰKѦHRՀ@0h 9 ` ְL_:ޟ#hoH9w$X'n眩Cfr THn4βF(ANPteq ?"&^VC(Mia,Ok<ٞPp:TQ)%[+2Ogl0,dJ1 75J%z1vޓэs+xOlqxqx8#~5<ꬠ4T !l-QcGz& N7^E&oQ (ƅNk|y^sf3a[i䤕#XRU S&[{9)%Zvz&/+e, osq0 4 kJ5EQ/_bUQS͗Z&/o.`k&ԧilnZĺL sތ݋0N":W?)4:H#<^2-{cɯ=uՅ$awU }[E/pn&݊Jޱ¡@z;<%m+ W XL?1#k KN"/XTk GݎQ_/ժqX! C[7I m\_/ԍEBK ) Ջ#T;KO&(<^G d jZAz>Gƾ7F+L}G$<-U>/ C05O6NT+ ̒IQ 25sqvj0SUIV.NR KTJА5-&y߶M]=UPn:epdtslmmd:w4^{Kpu HхԌQs zpG;Md swdaM}o ;W>6AUcMa>FzaZiQIkHSq{BO#`?: R ;ڃrۥVډEoR4D#(IgoVnhYEj8*C6ÙSr08h!EhX14R Y|{\ P{зFB e07]? s,N3ާ&N6RəvI g70m7nprD6=,^_՛Y;0n)6V LL(OaUHjd-0Dxjnw|%AK*wxM(h'+'9OXz/x9W[),ŊdgyY%+H)ںPaM>C9a?х\}oZg 'VǏߍ,ĕʨP|]"d$ciem>jÐ-| Aw;yd0I&f15 ]ChZ.*5Nm*o蒢9g_,bCmƤzJBe9"E9yBa%Pn_M?:? |ȮoSY5u볍(ɊS!X +if q5T崫4մ,Tȴ s3;'ʇwq/@Xݷmqe&Q^#k0̶V#H 5,K ̈l_Jf\JN vp ~eFبech*XQ^&؞8CGpr\H',!ʄ3Km {Vt`傻Izaק1H*~E8K PO60j FMVp-ؙ. F҇=+bKh Yvض>N*_n率_| -t*x;6|jm̕}?CimVռiur!Mz-NapfFPxsc*km"Ge O \0oL,sU*A FLLH(@L/{dxFԺ;^U$oL"cM&L>BfEu&FHtRѦqƅdЂyj}5K܍í2sv _`V 8XGD1kC]dE4K:|ܕ0j"B0H55 zsڀ^Qxvr+md %CLKz6%V~oGj Q$X#0oqw\-G<{y7SAeǃ"0 M)u[C}6Ihz@TPHy)m4"kL0H\A U0ฬ̜%?*󦳒Wd艂Zm|ZQxDkp8FB-o\sE/_MOWU9@P0oQޢEqEɸ-/‡4:Ə #;~5AԷtA%-D D˯+F߷n$A\S&,)tӕv޾.0vå3سjɬ&1x-! "!Hts\ WFY|2a2Sqd^t~)_县R.rE%bǫJD{̙*-KΨQ-˺܈tsS4&])7CBi&$Y%2]'TPZ)$8;dl}=ޛ|2kWǥL PmJAtn=8 GI^-ِ}#@A$#A*@nQnQ3+N+ɮ%{ZX 3=~ݫH)ors`Z,4>NqۅxWV>*9m_U$_ytZ&6-[^)jj`k/Zof~Kg.TNh=Z5%)6Regqf*!"M \uF8K$uΦCp5a rzR?uh$ -C姟pq-`>$wVzm C+SmEI:dS h j'r@- ճËWo˯9n5LA;|JkvMa  QCޝx"%~9?ËX 2Qy `g BB-j1"׈wiJqTT(n{w8p|P 001PAE@ZF[sss~3d9{̼ݹwqcq~c+ԁ(ˀyA3[#J^hfqұ8Xz n #pљ3 ;!l=Xx{vq$91&)$W}V*E/_^uqRJ+WTslib/maMkc`tbIhck5]u=*-*++ቮf3J~) |MOߜ vήok_V,[JM3 rLUPʜK^~E& pP{̉bځy)&Eemt6mĈ[ew7w bjLUUė;rDu|3JǪcFIZzCe:G>Nɐ2S@|dRnE͢qюz>7VgUXL>*49 ;խ@~&[L{iOp1$FG*;녹G+ƅw7tX= ի\yz?vWPQ7NGnn ,A^Lžr) .TƳ6 omlmWl (miDHMȕ-)k*mjElQ#/g/ޠ-|O}0Hbh~2y@Wan% /|M}Io Go9T@$D"&X1]-&'V.7ۭڱ[ 6I9>@YT(`nȥXO3=ctA@@犫tPb TB>c]śC3zkxkYݖ=8@-/5r)W4qv0FNYw;;FUk4 v[&a([L\`4h^#W.Y'_—]ɑYϖ”IW9m; < H2ǀ"_rQ[Hn_&N/$v"K,Nh1]"Od{&z_j{+O\tiFwoSk_4  A(zιd1Gʇ5>!fԩ[ {#o7&Q}rHwMډbw B1B=gࠐb.:6E7)dC(_,3V[9q>ú=htN*,nw :tCSeKtky-q)щ?_x6 ߄'@b^/ʴe!&R~7u%uAXoViScVȖ(bp; mWNYNxP0[3) թvM6/l^Ժ̜:22$X›]#Meh`zFeˀpHp:gS碶' c*`h'DmwUbPn-@NC AKړ(m~+iqpB6Oվ꒣!u*9S A`mBQ:#Qc9Ϝ*\[/)w}3$_b-# Z,J5'T_rϢcqukZH[ZVDe/Wc?zɠOiWZsЙi $exǬu^H0 C3L ΋o=g4s^KdJP;#~+tYsY`2$F#^xW N3]6˂)nXBp8&>w>b'2bLu̸ָ[$9PH8Ur;68}xS<;m2Of:?0$ {x"tQu͈2`by*3B6 M"S~߸ WuS7lUΞ?xp>c/o/+N=F2/,$ >O ,oٜ_Zz,<0XmF0=mPeP  ݏ;#^Ҵ<9uq9F0V&_%L?`l}dn=tV);34/.L$ 1JtN==z|ghc{pXF]E?żo~/ A,bVՍʃkI?))^aav@t^Bj9D#k|uRZhQ.mڀL]øsھl9w5ތd<;"ӄ`.EDk#49WNM ^Y( HaO ?v齞wEyu](On- $8#.u HdSX0m7%px%A?kv0&.:b Փ34NemՃl w>(GZ{5MU'_W{(h70j]yukS #_'~b:WiaX|}&ǭ^p YE: 3(S\TdIVj,f^ʃ3F(_팒 P8{n*oz Kž<(pnds 6*V Q({S׿ކ0oj8 n]f՚ >ѿO  mq\q<Α?Kռ4Aa@o50J+ l[M?z[$Jr"{\`6Ij:Q_32hs6d=^ĿI4}1wV2ho4xC?H+jVDt)\U[0^qt}sFhqpUrBk9 ŗ$Z6 "u"Q '۲IcM>Byo"q\&D*$ϹVYl\cP6.RY4}hYzM4LoTOyS=dX;|Jx|+"IZ/8vbPeWЂT`Ew xhb]&fep|.T`pX*ZvUbfFH#AW xl 'f[7H56Oхpd։4'yd5u0m$m0[O5yGkהrCJ :ų VP-ƿJ.-m6;o1ѦWQ)0KJ:7[c4I2$'+3#qP˂fQ*ѮfaQ iy|l]H3/֌Ioͳ=URΙ!Yn;\E08iXhtxS:{ޥXl҉r܎zԊNLC`lܛ$҃ٷﵴوgɻ;@B[+K"dEkyjm`8f87`etv% T j?)ɑ.ᮩm?  :`-di_2msƤK`Xs=" R 5.ɷˢ̙A  dcd/m;3ṾV)=U$K;^o>j`Yǿ܋`=sH!@V~MQɯA =B܂,u2dSfUNc΢5&d|Ny~~2tS(SHl~U{Բܣ] Zv5 'SEZ*o|s W j߲;A 3$~ N=)ƺRհĄ?Ɋu=C?a ߧ:zGJHv.n1`2+5r4tJ"^Yd4R$} 1޶=}*h"fM]<@uĵ![(sE! |AܗR )ۦd˜qsye*# @7C0 cVA꿤.B MPc_J7zj3 TM/'O]L@Io;Dh;@`iEhfپU8B+RunKH=R(@R4cqQcDMTk#H*N/p1xTh|s"ѓ*% lwX';ޫiq,yuo lz$}-ֲq 5,*K i!g'x4b\vl4 %Z ~~}#7yzlщOoM,-vnᄐ= NY^m81Qqd^@M[S}aݥ磓s/c˟'/g={th|rS{2LeHc~-:bñZWcu^'hOi&l{b yn-vt-'XgTer|DeM+F|chk2ڮKs4}Wa6I?~#X<|d6^K^8$kyYһ9nԈCJ[hWy6%FomQ~EC`-X. kEyNZe7@3S 'U 5+A B?#!ѣ&r{06&BW-8 mNzBr2k;'w5%5n NR/v<̾9%cTvUomTV <L q7ͦ's\ O9X>N9M$x^ѭȧUkCjfXyk!x28+""n0Qj}IRiQ8td4 tM~nҌHyu](O* I`s<|S#4R+xk!R"p@-~2%Ӥrme5:Y&t,]l DOi-YokG8l8/dNI.hGlꭅ̛LJve%!G9+nҲ&֠(LjnuZ#["g>z-@7\d_Aq Ξ/yЈ¨Gb4F.vzᒓ=}ғy}9X8WftPI0Y=u)N/uCM\gPBE68tzq*yL!njͻ [@e[ĝ\emT$sCΎ[;-}oawafB>R]FP戟'wMּd@pWr5oA'Fzh&+)g/xY1yiLO|uzlp|SŴ@،͜IҚR@^@v1$1,a7\#HeRJJ(bɶܟ;Ѽl,{2O#- ;)xVF[)zm}2QIS4*I=!$ڼA'Z>і7cfd\\dks?||0M6b{p(zq:rHj,pe?b>USG=*qam37,Cp~BTRH $S?R:Q޲#AXa3Ev9]5ZNO?ˡ%uV޾;@;RO +Tĕ2liphګP1,DٝߤmgLlK Lt94#\'(B'?Nξo:»V!ue9-B T扎zы&ˏ Pvt8RX~6ٗOy6\ՐTfJb82o?ғ\rC-7;>m5b4hn-&BI _Wtv`nRsvȞ e_sUKᵂ~Ү) 1ܺe4r}gEKOa@aYp+ɩW|L|!❬(Tk^H95Y/(B1>U$'V&3K?*Y BPz<3Ӎ[*<`oPΟ * .Cv[M s'H;~΁Zd0;4ӨnR4PǵY%Rb:o^amvO ,Qz\+o[y}|rTTԟy#z;N:`*#&Kق`EǣGkx+[s'w'w{ڰL}; y^?=6Zglg2ane{䮦ܟUʺ:\ŕ Uk90j+N]]{{gYwKF֝>≮7yI[3ə%qvjmr髄8(嚪eigfff1 ի|;Wj9٦mQMl3͜a0W7G5X('ʣR wtLtwx+M9RL _雠9%l-a 4вgRpqKQ=i$scلXw͢[*B}hzeY!у8MErB:fdv#`Owʗa$n#f۩ЀŸڧ&ir>m() 11&ٗ+kB tWV gC +';?p&qX0v-ǝYJ.̲,/WLSZQVU6*"f3!; %ڠBg fp7hBޖM? w,G;W662_!/ymܻ/?HO[H6{XYȧz[$!j^`=b6?&ҟ5otyyx^ȲŇ5!sJtj8iW&duF@{-뮻ZAyJ>|{a'ko-à:Br_X8;͌BrclAII:I:H;r8+KANA;8vgw wމ㛞qW %`Q;xAm,p~^\5ŮlXy/vdzn. K!T-9>`ȸl+Ge._xvrfQ:Qፘw!sJQz#_fSTcco&!n蟆FY71l4DՓ!".-ǝLu4}o7&w;ŎN=., KӔ+ MD-N| :ӥ[OWIIz= ⮸Lm7W\KUG?MY1FDEEE:wI~5wY7|JчuAv=)grFe|ACM^4-?xScLIyXȚA(b3:ッr T#GܙXƑޝxz>nN5q&C Yƌn$e|-iP⽱{ vw;<}r;8 䳟siuA8 x`wjew^\D⣢{'MDCf,<~n}ޢX}@z:Mx4uncF|Lv+wڼk>Mqu쳎Շ}z1 _I3l>i|dyƛH8pT6>KR3=T}r. ^:NR̗ao5$8~6.:Se["ΪD2fu?$6(ic򝇟vi3~Q ̷YWf˨]+( }kLYsn"aux~o~ũxM`|@u<1},` ʶnvSLQP:u(be %9SR^'̲j>"_\ܫrww'|Okox|raS}HqRFVBQDe ipHTzIYEkom;j[!SU\5e̍{9o#E!NEu╕#g C=/,-v4b$s9jRl="3tbrRGڙvv%s4~25I 魄ZG4dl̊W AfTcpW_җDMhGFCubZtju ;Y!^eHUuA躡zbt8888ĘAM6A=~fޓ 6fGz5tqb`vczKhjY2m&Y|ir̓{$toDEO5}axhe\oFoe<ٯ=fi3㩷95=w0(״KnbŬ/ɺB1j.X? [N- }&AkSӦ9,;Ig !l9p)-a!NfL^x!T;H haiIsӨSQ…RƥtΑdXɜH`@䘷,la/uKKOV/n/o]ۧʵpOU)mg^VϗڠXhg_-E9dt>@Kepa0 00 7N~l, o4 ws s4IpJUO)ޣ3|CIS*ӯT骓We0jx%OM0JB`[ Sͅ؎VVΞw=׭k~ _~,YՈ$LV&c+jYP-_"R.+F_-O ܮQ6ѫ ^3w _$,C ^H`Cq#mcB['/F~j#LCF K¹^ټ cF5N~Djv AD1wk5D;8w4keV˗$d[P2h[`<,/C5+Bm{FNp{mGͱ/Y?&NpתBM | tK d˲a)aps0c*m[?K]%wyhZR萁ˆ)Ga6ѣۿ".Þ-,ڿ|eMb{Ų6&kdHLYD7d*Tdd+DV[5W* 3GuPٍt1"me UNdkj~r+aƢ.,QiѠS$VѵK7v~ A Yp/%襮yu]?(O M>a$퇧K{CK2%phwH˯QKfv{5hc,pOF͌hE3e x6VRmZ.'|,v-_ƀE;8P88RXk,N"Ha  .p |xK|sa\%PۇzuGv1GZhg:y:ޭY5@0PtR=';r|lhgpV/nEj wɼe|:RA|H CޣW\`\Ls03ЃO%܃Uj1|4}vpt8"X\z 3;pgW#ĭ S8^6ςX t }~-뮻Z9y2JQ $Wy s^rQ98[F;[b>yа|}Na-C<}{/xJ)%%q9P_+R P[(J( (-% ) kQm?#س=|]u%YW+rh! ##>OsNuJNEֺ^/ xg~BM {t7_ɜ Vh/tyf`T.G76n!\!~25$I0Ik\Y|P|nluDUͷʆ-5]}G!L?ʬ.uP+"5U2!r)N~FU% EU!+Hv^v} .YZ3W}_sE\.A2'GɻL[t=\SgFgȔ,ROCŘ\[:︅Y%rkTsdMT:D%=~T؆sxI:_ZGrVʇK طr)Ƌ>K8KE2]LRUI֊֋L6CC֭$gN7)'Hnq`4}_[>4щ!hF Pb*-;\j,aP8F%|̥˨,^)&:,9^+V9}zC;T'V^"_&_._)_⪘Ug;k#Sñݣ O[3¸Η_9#]X=udƌF0~_/`(x<|.j9ȵ30>4CO`J!-pLS5.9cdxhX}o|}˘`.X9|mihUҮ;l>oiY#6üKq2It^Mx‚:)Yvpnv1 flѢӧ`Ƅ(qckYT3#o,k#br9]5_'@{}$-D*l, ]`,,,," zV>Iωq b9GNvD9C :g=2uoMX[-Pn]W6W`|T6j2i ,o}_|r}@>vTw)8q3h]\yso6Psa3\z>zq]gYσ"^νnd$LBN`gmu"6!/kKƴ?ӡm[ &/8C0f)ߥ){Oz#,WrKնi&}|]{X(k<;$L6X)G% SYf{GdWdf7fn˒c~\%]1y'ϻN9y}z~J jc[4rQXXֱb !S6Mў>z6~_v3?SPX,h\|{.E 񨮱n$!̛'j4UO3e͟M=v]^Pѭ;ޘ^Z!YFܗ\ -㋌']{Lo3ݵ5K7a+8`l4sT*V &05F۾?.78GMm`QJRB׾\Q,_"9 :$ƹ2㈯םgE5R,ښU{/fpX'Gİ3ځsK_( kC5[5Sn bJ nQ.JiJpӢ׫=eSÇ`MS=D:2 ԩF5#&"Jݰ$n4)| F7yf<=&ZCubкX]ia'HI|[Rdf;rF㞁GU={<][}KzwgŅ㗙O,[(iiiiiqD}{=]xW.]GmC!4cQB 7ڎۍ_/>JZj:rZ|`bM*O̵^$(4"HcrpdUŗ[cC``vSw8͊ALp1IÝQ(q4n~8a*CKodo *r~51I?|G{W:7X_OnKZx΋~=cĔYbc1% uq}x|=sP1}}-p*wu};FQoK9Uy97,M_YV /|'Z[zqx{ Q#J?m2 5 1 ru7Ch0iƘpG_ca~y2)x%SOCz;Ác-! Vɶ6.EL9gmcW{Cˆz]m :$\+LwHzDsD|Du^^5 JQX<:qWg+蛇ztһW}6 MWq!YY‹'s/&2gLcsL7y>.NN> 49@1h3 } a q.)[/hV)%Wl5%͇GH1<%bűD˚@~dU[PAގDoԊ"Ak8RyzXJǪ}WbV4ˈFۻ]:z[mɏq5d޼S+stѶ6@ߛU0,;,#Stt tIK47,g'v|\ۄ=:;;0^^ !eOr2_gz*tvOX+lۭͫ[/mDSoS,弜h)[XX,ܭ9wpK0vw1___]Rp@>_~;!N);{[p bqSOZY&Ȃ8N ޱh\y=8 m 464ufiJq8ُ;hr`SP8zӋDpX%pL u䅏1a}b^`a,u~m.}C#쓣SGgF~.7p2ݖ)WY–Cc(}PݧqCg߅M"Թ Yzy9;K^Pw(|co;#S¹^Ʋ/6,ٶ\[yBnUD%]t&#Sʜ 3F$HKd0EluLLYzdV^D(gA ZۙU6&cGn맾yԒњ,&tfDHMV07ӏBݏ)9MzQF3tpy mu4P.^om a޶5CkbϒK Wƞ7޶;@wSif>D46z~h{jlg"ŇxqH8enuvPQnxC{pzv4 wXR/~ brraTZNwuם<đ"l?_@N@9D;LW~?zvbQc_A# b1J\BA6WncQz6(9@ [#@ Ѝ ix:Y]*u,=~XGs~-BDOK 1fL1u= yyZX*nJ>JA6f!&FQK(c93 E2wjWT[#UJZ Y"|?`BmV%a֡a6a6aVjy"cFE5c'D+vw ӹoE䯆>Oo63)1# jXCK-b/aVʨGX f| g[YFFY&EwӭWӆujE= `%wН;d[{kT /{1'TeGh<5xޛ]hkg^k<%x&8٠9X~}7wksbP,11tR^E] 򳯔S.0$e[m NM Yv1&cIP vѢK1;V&I祩ddk%DY֘6շ~`. 6jhQe/z9Šr j~=œrn`d7p1GXacVvJSϱ"qxmRSěۭxLxu9;;WEiV/ԨjKO2Yp9ud`T7C?+h YAB<Ê@ms*H4F,yC&aHwY'?fdSt,A%l- M[Ś-IΩwe!]Hw GO6_CiV)v #O5 蟉8^7_}ym yӥ;2ԙf? +X7 nΜ9U< zub,4Yc,a Y҅iN0A<bl}=iXS,>x`߁t=jvP.Ӏd Ӂam$5G CRD tb`de =EWbg!9L0[Niی[q\۝@oq_ן6=MxGg̍^ŕɲx#_r5(ctaT:[3Mk{i3f^vd.=wQ3N 4rb~i U݊oNv]+{!bi!}yi44444{ٷ /iV&E_0 cXD| ]w3G&OUYƒE"L aQ ߗrT'HRl:SBiSĭy:h4 0h=Xsg3ܲZL'>"h$+;|6i-}DMTs>ԡӞ% /hk%"'M,NCl2M0Oݻ< gezv)\,n`~>`\8-pԦDHslIa/bY4).[ DY&h\ɴ"!F\]]gGl+r`_jV%S77f86ũNIo' ; oȎҘf-$5!)N^* EEr~]!!<%[{ f毜\V _6 V/{//V Z B,+w% \Ly3U _D( d+L^B9~h' ֲPn`})ܢ;ɞ9ymΊON֒Nt0 ~OqVټ~0 sqĨTwP(31;WSsKԐ%j2ˡŷfJKa'f9*Xk8y݁,H%b|t;ⅽ^}[!<}btycPQj 6Ft_r LdddO0uqǦEH5?a^&"g3hz RVmxHw)",kl oxɄV?|/,ׁęK%\ p4V9-wC$=#=zʘ;=%W%sQRNwuםqW0l~q|Hh ,c-pOWMIYYgTfuYfbhv[iaCWɗO]|S]3uI?MAh8(WdXo;y\y]߁VC2%!&N L cYKof?q .0tɕr޿+wGb4{`#YrN7 y]{Xt@cq_}b~^R D|߰f{tNZ|Q/E...V.nvIq b쵃tĹ' SI18.0`=P,U<[c#h8ʶ:#+ųգ}#p.mRjX n0U\*\Y*ݥ;gXJ+,lPZZN) 5w.K8';` 1r0K)SXБ?nRpszU[Bbb$ng0B6zGؙ$hw&+ogƅ5d>л7!P2>ĵϧ%d*f ;J?y}w1:$4|"nh;a6ץ\S.1|u$JrMQ8gR髆n4W ݡ$"& LHO;+jw6xxR:v#.wDLՊ2.#^/ҍ17/ \酜XCʝTJ8@O}QwHճ*ypG!wm?_^쒻:%e^{vONّ*bh)Tř|HyDPx7ݡm&?ZQ:&PZ%8i&i6i˪Ebhq5tzgF#לv W##Rt-At35.\-? +dFfAĚEМ_oO[Ypo iT $X<+\1lQ8p F@ X|AJ{Rm6if4AێƆ²iuX=s m%`a֭!J9;yu]w/$A>0-ahu9.)1yOMNWRИUx%\@\%-ur;lkb"$ZJdBnPAd{>aZAw!TeJeMS5.嘿#J [}ޏsZ~[UTCHtYowp5/5CG&{M3:M ƶ)W Fx:Njw >]} b_csх(;[Ĉ?<عWtAZp$RXX&?ŒRkXȞ6 _6\9ǥ >wPUҔ:)8 n "$øBV6UC8!1}RrokMt0O@HŅd F #Y^as8v͐7C蚉oR!;ʪqGR8Z!Vmou}sL`đ }q9hU'wGK% c=EȎih:o+F58;HฟknPVCƆ ^jŧiYC#+y`ŐZd+6^7:;fnrxnXn]wu'<pw'jkb,`3JEa]~"غO6 VIG CTRLl2bs">fTqF4yռ>[+$Nq~7mxđgZHypŶ7ԭB1FFgQ?JgG)vԎR"Ů+yQ-̐Am,K^̠&qfROnR6I:R:Ih49&e&0obQhCKTm݁_ѯԇg%D$,twV@RrT'GF)w_L/۷~=9_CPLw!9+#ML2L^sC{LBb6ZL>ms0Cڸ\Y7Qz[4RZŕri,g푄߷Ek\1ig%h葝?@`tuF 5pqKTa[/O&,m0nTYP/pu*.Mg$_fǦkZ4~ R &ՃaoS@Nmʸ/y_lvi8#^`L-<_M@~7g%̈́G:)<~k510rBQCݻN;fc1ư=jfE7i&g]`L1)sܚd}nsbrk|%.-ax_WkDPk)Uē#-c cH+\4ylneh󤑸Fҩ,/"*C>inh)UY/!?~L"DE`< T"P|%Q;tpS}K <^X}{8 =;hM dVL}j!?KAV?5#_{ kH&\5Xx%[z#Uu+ւ;c;d|UP/+!W冸L{]GwO~dy?cvmwu]e{a_h,ь|yp֯TMTRւزp.z`b!≊fOoR~jԡO&=1B-ϬI7-ż/uv^ZSV]pj4<{G}; u 6JͲ4Ŧj6nѲߠ!`ŧ3+obZNs9M'24}- !N۞>vVv>x9pᷞe=ɉK)GX"6,wQSRUaFUq`Nǫ;b T %\{Ol]#C6^G&irCMB1<|uu%?2UN+%Fr?.ƽZ~zPAl%Dc]ou؋BL+\>! ԆsOB[{*y tCMʪ&>n.V!)2b<ŜcY?&gXgF~tWj5f infv+iMЌ>_q4 S)m}2u_g~>i操7Sm &[P__ْռi]4V+$0V_e/ÍO~f˯ˮy]w?9È7qOrju7|dJ7ˣsK T4Du~ggMX d(}!!0xhq?fVg5Apz;Q/. 1ƯaeGVBw+P2Aeu˽\XA4 G ꕽUYXj6ukg L86f+I.{ۚTc)&+\Ȥ$?2pm*<$HX#?fNRFRLpnwm(m{ ײe!KI&_AƷ[$wb= L}:x; 5jۥP'1P9_MS| ϛI{d$F峋{Y)&7 Y+v_@I"^:铥q^(OxҤ=8Hnyp8Pphmo`rNgM*5c 0Q߿,E3NThֹ <{aMxGzƈZ⏺-s SGe}o!p[}wDpso#LXxƭ$lrCkԣ* i.wvwqzʟ% ,p3-eo\:XE^rOGWAׯ>A lhxi.lƹja^2 "Q8;c\TQLEXԡaE(0@(\9ezaD2Jڪ)iG˓D=gmF)J&}Ɯ`)"q?%.q^&Q&]i3O p rs8gU.pYHr]plLDo;-]\%f]Nj> Y R<mEY{}`o-]Iz}kK[t =bQfN:f^މqE2}<3\Mn3iB? 3MZ6M"6+YZF/7'v[#ʿ4v&[ޢ#R̗̐lgY~rS$<}0OEyr{ 2/8.5VO4m(9@;3,J4&x(vX*z|)%dN4;z8^a$_~c]Բ((uE=ZWz7hvPΙr3?XW]Å\'j$ W>\ROAN?BJ}k}['=fV+tXIS!1 fP QY,t&N 5X¾ ǹuŹ Ĺiǽ]{ٮFo_8Wn 4(`3 iw/l>?>žƹN=eüy{x=nίVDF`VXhS,1QKהnܒvzVnfp<@Ϩڐ<)׿Qh_m7 ,x %8$9Zl E(ovf> U^ v4O!6rA,6fYНXlTm ZXUS8S0PDM}Pc ^R 67bBGKLĨnTB#,Qv~ߚϱd O]7eeb~iT,!D1 M۳rffffwd=rJag).8jya40ގ^l^&}w f9t|7B.?nZzoiޭHW9xl;m\Wִs|p_\F:OT{DޓO_+ ,3ZA%&˯%Ҫzwr͜|ufTFmB  H7^N `iVWS;B DD@DD:;$]0/{8g{wwuEK$fDO7}Ϊ J/F$L'"69 N@ B9:ERf̬},|+tg|T& 7}[ʿ'/X 9qRҩ|Җ||ʨBYhO\jd­5,5Bʮp$6u&+XWL,( m5*6vs\Cr`IxHd~}8 tvhY*"G)]1N29-De{z>F( Z+ ?HIe4?^Ӫ<^H76,{}sO ѴoҜj@\}K&VU$nj÷Gj?Ìbyj;eՍ|И֜){Q9|?}7};AU6kz-5i@sg~ B!kD4ÜEBUuK}tY-;wGwlS-Alw=[W=wiA%v 4.#!Xl{3 世u]w-Qy> : ц/(֙0"U_WYØ:A %_C`qL,fC~hsr]yiOm|V@~Uhw%$)t&(nΓA pV6Stjm8C11QaR"^<.y D<}.pMs(YR1mQίҤ"X66߼E>m/!a'$c˼$4i3{kϿ)DU/ /I63MT|7hf]Hed,ɧM(wiTYdDs|j4}_m F_#o4!(^֌7e+eʄ}.jSk̦;JJxoC{ܷSֶUpUTBԋ1!Ľ9%O+R1~C&Ca1瓤 y;s#n=HYg-":Z;t5>뚑L7X›=-1יW[Z0NΘ3%R3slt!/Q5jtjj) .x|PK[< 0 fLϑ7k mbh)N pp0D?A?S@?A?>T-So!3Ņ Pu=b)n7/eGgEh3e;ܧUs3OxR"b:ޏ>ل?>M1^;9S!OtB&ض~`W2qW%h4|\7M5T4G9P h5O$_;?er`m3A+dr{B|dfپ} g̺|)'Zkڋ9ӭ@ þIeeʥf+f5L;YhQH+R)7<ƶL9I_Οbk3aP)ҟzvc0[ٟGá476M ɑêCп&kP[n^@oͳ{w_o(4[;1w_sp1 kp Z5><3vC[{JpgA  梩]')B  sB+É~ NpNŎo<&T9~Ch iB}ZyY 5F޼v^ f^És2J [#_Yezs·U$8bJ O)r-뮻ZP2z~LeYl{{Y#|TN ?\Îy.S1`/ϾYϮw3=BMrhFnL.on[vx7H1[gr(} Ϥ &=vG~ <7@jVN#!KGd%g"1(U7Ey۳g#t۳+;#GM8qH8/fa)q!ƓF8;[c?*rSg,^c4 Qa?gx?Ӳ-w=m g<H!i$~pE?瞂cl`k^ mkݱpv6A]nn#,cD{o*Gq>f(ُ5/`&$(z[Ĝ.g&۝pu |wbA W'Us="G4D}q4ڂÀyW?,EqA_.%g(tH/;;hwnQE-.UbRQAHCSO.6:U袜Is:M:rr csvN HE=3đ È@>a@C^!B!A BBnAzUL1 Aҭ54S,8{ذE7>˾+tYb@5]U@w1EyDC?b1!z _;JDZ]wݵ<FF f.Pٌ1WFI\78cx9eU~\еV1;r;0H5sWxc`~L@aXهctód+O|q!:inTo 5?1aO)Nb#+#*qu ,rHLuޓK..ruY>_|5S6uіj@7Z5Yoo|Ag(RZc=RhiklVyF*^n$9ԖnMbO!IUdtW0 jy::K]H~?`^| Z Јh=tENwFK}Qfx\V;-H!oNV?vB:XN,g3PeYq!Hncomvl(,*nc 4[sa+ԃ;/N>/pOiӔ8rG&s \.eCuWx^ϣ iT4nڥПˉ `` 6`V`%UKZ%1f/)vP[Х~7`t:SI߀Rӊs\"!핝+2_HROzٶgys/3Lu2qjGu4,>d.ɕN{H K[gz==S̛EQ$JF<:Yc?xnսֲGk P2զ׻l>yY=G=ﻯp=l9AAk>-e4|& w۫@*U&>Clbo#t@>6v;ㄡagj_Π}0_b1*^(Ksdd[d:B}?S&Zş]뮻<ɝXJ{ꄐ\M/{N<ٙ1= YR`QoZp)+W;&&SGߔäRk*Oa˓EKdӅ U> j" d˯Ζ[1B+VxSRнL=)ƷƼhLlbaᄪ{uX FPYPAPVj\JDI@s!VCrY5CAkN(# 7J%ZyޜD]_d1'޶ f?+ C=r W*yn7JpLd[\XLdo`3 mS&FTPTҏ- ƭ-GlaN{hk3ۻȊVk!_ߢߚР2ToTjmhmg-#s4wEѰPYbUY]rgH!ҍNj0ݭ_˵"L*DWivO1t __~$ P4sj|6)6b.[ڤ( uB?r?OU`k3 JT5eh n:,EQ r^(m7Ϯk-8KH#!Nx0X^<)zs%,T#kM?{M)\,qY=poګ޵ɱծ:"42'6QrTdpe>G Wչ@F,) ^m`e;:L?R+9F4ڢkSРIܔzؒǩ1zwt+YM0s0 [g`9z^g;8Fk]kAS_ 5`&՞Ġ1{{GNXj02ޗZ'BUt보yR !1 r1KV>rnEMv+,'ڠ4V#*S' ]Q _35S3&@<>1HI>?dtyTR]]½-݊)1j8yz Aa:;n:mR,%d҄0e),UMPo2 j06>X3NQhfD-5jqK?w߬?<<{o}li:M@̕<ielX);8ϖ8vg^ iɴ|vBzXa=4.#.jW{I- HIrs s3s [ R^Bww)y 5# (4ҩ,h}e#s+[G.r cN6_Q2g `$` pEPF9hK,+VW Sfy❶0tvqXJP$5txI>Z8lBqܱWdW¾2p `|\J+>@ϑӉW)nnq.ثӎO+͓7m/7Gݴ:'C0zʅeY5 =o+]#^$هGweTO'[ 'RhW%r k;񭪈!v.c?m"FQ>jۺWw; K||VǷOlS,LBÏxWM]LaI T1 t=% <$}EQFѰJѵL9D9 {^ȴy.j/}k]0tvJ';/3Ʀ(_L0Xb ڀ u-KQ),lV4P,\8aaoatyirS#X,~u'yC߬S.̳ iYr<!bp!,zʅe8'M[߇8o9w9ų 3+yܾX?^ <4G<;{qXJ;4 A醡1ZX]rW^B*/ FHtw6g A֚(8KawulQ-ݸCt ]O!_IZ}M`yMVڱ Nu__~ -Ɉ}9#Щ5*=`Brf\R2ZiNg}a,0^grGb;|u;ϑ 1_;x/zMS5. n߱<"2<*s-뮻ZtQ¿R þb' j0 0?``ooO47Bj'@鴂Wv+s0!Awvp6ËyjY;IC,zLuk(ZjlefS!S=c}@ʅ :W\Hk}0Hw:_ۢ|ͽ0P [̽l"! F9a:m8|&Q_EgF51#;X{Jgxٔ|.Aƿmd,/,-HoKSNSXHJT3bt2j]a'oz. ;9D{֞,1!F?`~2NZTNSMUrvVH*m*^bhnhyQ=H? i3W957ò,[xؓp8&: K*W¶ݱ믋ԏ`hujbEP"矫τ '%S#4mt=̜BcUjMz]Cv kքf_.RW>NW 1lIUKߐzF[ɠ },d``P]/79UB%l"b3mW"w%mD 5$*G 1Zp=lUCCo~Z,ݢl4jL2TZInKXYLl*&9qM]U[s󚤪[:ލNt2w~(ҭխ]*Wj[Y,m5ͯ:O+{YSOak(a?Ї>7n#. +eM]5O{&fg(/l})Lz#@}bś{$<˜M?~řQɨ/[=;#TOEY"1>]^jTM^h~:S@1b ->0G` f^26M=.=ؼ}x.#Sz#cWa8V&2p6>-PQtu#;|Jkb[{n>װM^B9ǐ6GZ]wݵ<*ƨ`[o_{I :e0뢑xȳI/ؿ JD&6 ~ˏIaOO\x}+ HD[ u8a6u #_! h)gl Pz&9^OL-wϻ=/,oi?dz"Wq$}zn~{A /w +2o&p*t*ml 42ʽ(~y%O0x_Y<@xscVw=_+MmvBDX: Okf/G}Y/ZjZ] u]Y ; FDw 2OS9?ټW'!mPn.M`05W?ՏuvÌ6Vė `sշ-v|rk}'9~hG'>_&[$[$] ]=&]z {x8?JW ED"%0Z^FQ7}(20m|`|6vFا=mʵGsOJ_|'̕;G~,dNCM<6rƄ K_s] >]Z~ St$uv]/6}x6~s.{rRLKm^bn#IBv)VQw6LǕzf.J]dx[[j$fgMrڧߍu>[.p+u̓9i?5|\45"]qb/ =c|s:A4izH¤#4˸Wo(e0|@3 0\J oo#wI'q[/tR,3nm|-뮻ZPziw:v7;1R9~-Svt" %UX|"s"oTq!eRA cK/DUGx(;ގ=UğE̡ Pb0 ˜_~5ΓT)v,Qjq޴Iڔo^x~/osQnfQ (nhI\pqapdpPMzkmm/Eyy@kJꗥRK7NxjbNTm]e)<0=p%= #tOQ"}y]f3 k[BH+pezKT7q 櫅lkJ!Xu @P|W2a@&2)Cs\b6msmE(\/C鴸ﺥI/X,f* `eR>ebkLƳ5wՏn`ͫ'%UO3\Y?{8ƼC*UE ߘdrvr4iGW ;SX+g2~02HPie{V9%bIrh+ xŰt^lluslf]0u_Tw L8,,=M*2<$0(} RzNz[ϗrEhŅwĹf'GGkyRiن(nT3~>8t;1F+"EK~fڗTKh_|d;QBn/ŦJ̸[3ͱ?B}ujW7`ddmu.enyiwH"RG/)*TED|E_< 3%`NK 3 Y~U#:_HyW/g)v)]<ᤑp-w=)ê{$0MO{m\厓 >Gv)ξ]-{]wݵ<I%#5{eDo@dwMc~qH ¿sDr$4uBf)z^0}UGű]$;@~XxNɜ3CxKcעrRRޜ&~Gkwo/ݘAB&.Yƕ璃ږjFM4c9t2N1Я[ g6Y3A*8V.!Ľذz wM̒64L7C4E*q!n$~.k\i*"Zx*bHYM_-^ vVr bR_7 #\tylKʰp_z{`@@dOV'q5^[B@=hO4MmPIDNί՘ݘxݘ$ݘTݘ ?i6Z QұY_C*>}j~eT{TuG})Quy>_e:)5qjJ$}0#4HBv\Ƭ k}Sbs7?Q ^Ϸe"WU<식uj4bբ=BMRJZҤkK>WT7g ƥ$oMU9]O/)avl'<Bۀ1`s|I'V~u#-|mbŒ;#~}w2ٗ{~/'Tҫ_<*d*$($K;4U~Vݯnnvd0RwmuY'eF<~ܹiVk#$The:_PLK2,s%,@ PV6O԰viĻ/eI6-cTs}xٵ4!I\(Z؀Wռ W9=I:ўpnpJ-t60pkoG UJԜXg`-UCDh@ 6J)TOm5$ݘ7j31l<ߧکW"sN=wd Ox|ͩ(oE[ZG[țVwlCrřir}vg~VӖ5i"M%:^M.@ilM,T jSޠQm( 3x@0N ;.7Gf )?T)E*Bfd>L c}秤qeՈNg|]XqXnXFXRXl_u;F߳c*jsՊbS?3M[ءo%>X__j>_#9%d:xa *{͛Jo6HsXaOP<!O'룛,NC<-_#K~UP q6,y/Xϻ4F'q0˕rh牅h6:oY;l9)ſ'Uu|Ģ*.)^ Uɂ)7֧cP/{%Ṧ~!SzSrKūy[RRWuZ\$8l.O&: >F 2M +J? KZ]wݵ<gU @:m  4ah@xyG@K> pH#G7m ~oooq?{d;~ `$0XZ,o='d:ɃG4+7;պ;a(@Pt0x 0L dUMY8n*򻽚rqFEF$ SmG^2Ag"E3Vm66ERcgL>J90- /pt>8XM{ko!^炲sQ;GTSO-|E؟;%A P TՖy#zvy~k/"/w dMuN:r-yerxŭG#nn}qhr&YKi|]0-T ϳc!.te'5GKe㛡UP((|F% b|A?9^sI1Ies55zc/v K\PmdY#DTq01H^8ǿ|bW^5#u؟UFq3N!I3Elԩ˫E {9R8{VŨ`Te8<#@ AXG +ոs KF|;0},7vHkB XXVi\>|: UÓe"z1K ;~_i-`(_@S_}xx\T4àfgb7F<R^5 Jd6:Zf%E;6'UiT6`?%? *_-)m^"3>aHTGa:yr5]wl;|Ǵз]b%m\mOf 3(^mkϱԩ){OvSUd[i'*eDY98yX͙l#u0g666DNʸ.nILe@8\*vŌ`Xfk{6aISJ)S0l} qDҼ)0wFtzcɡDP%o[÷PeIO֬XlR/خۯ59;\)+M.'B. 48X:0ݟ\m-<ƏlpsȱB_۲{~gߜB %!:M*tF|8 3>Uw\TWXk]Z'̈́c9Qiru.&+\򳶚s+{|jY((ة)W?cFz/YK/ \- :@Ns@N%~i@k;Gm5_;sk<.NyMBs#SƓcREھQ?LbņjX؞jWΔ/Jke~5pu$uW'C][a]AGywrڌW)W//oFؓ\{4~fijU%Q?gVS0 = Dw?o(V'm= |BaJ1l7,y5\d$y!@s HH S!D.o/LJKty6F9| wz /`ʧ.1XY\P^9ȽGlUz1 TOju,pl=}w؀^ν8r;~G=@- TLeX`% [( %?_ܹ. RcqW1ۨ*WPz}ǖ˔IjQQ"gcb3u1^ȏZթttնt ㏜ctVܢ: V+" @1*;!`=/KRXDO~H@m&6#IdXA'-#A%XM|Bvwy~(tl,4CD7hq/c+ԍ3r>Va,`U]\zF߳4U"[˿O$R ,a\BpQsg[ר?sGM}ꈸ?3\ϕ0L (Ὺ`G5s uKg(fT9_m '9]d+vs vKҮ(n.T TuMWMJM)mPS\N>AP@z;a"c?P WsCIgpnAY+_;\3&~G{69ZidTśجy"bN5>@HJ )C~6zwFGy]GsDqzjzjzjzjv.-o̐TN1QQQqE5#E;=HxQKdky^,ݽHb֞kQW}ǩBbtC ]TUrT#]"w9̇B$PNNR3 d?MCЯj օK]ǰ 4g `<&x5ճ^&3[1 8=m3f«[`OmI6GV)&>A~D(::iu^:͔;O7X ut3+uhTO\o{EQʭjD+J_ fiAy]2kO7OF[.]Fmش(ƹ~ z|l?)5g&wbS*QXW]N7KI(_Yk6E$(6X [uN:ypc9tt E2E#u,::+6Gz_lj?Ui /oF#mKZv}G,݀>on]DDm\͠^^}|+#̣En _UlUKY6?c[C㗨qp۽")mn!$UK4h?\0/c3;N&^l.?\#AI[P<؝W@ȑeUXR"[xca܏J> [TpXBbgԧN Kj'_]Tx \v~p1yY&,75NWm:~`@NŐk%E.B_ЭT-b1mљ凉 )ɲ l.z^ʌy2"[6+WCtyKA}J3&c?δL^)ikeF+We74G9룃V.,|y1C6pf! co_ 0 NJ&`mxz7ilU {:;M(:Ǟ"$j\= =Qe5|Tsq;W};>y~G\Oޟ^zӹ\vynȡc=H^d\^h O|µ4|Z|#Ʀ;MRAdYjȇ㾏L#M,54q=gIp_p*Gx[x9KO8:JF;L;A\X-$ E.WP /QkjNy\(.4S{κDgwqdjZxI3Wi)-P+V3J0^2Y^TDPqɌphYH~'A*mX挽Z%M1 zf6kpb:Ȧm_ _!Z߬;|ھvڌ11 s+s*;m9^RR뗸'iH7/ri8q/Cܽd k 2 CQZMP/4>kQqnpTRg׎UYNr'u3i-Dzi5KOɝ a.reNo>feQ`UP]0Dm5N9K4׮լ#=BKM|W,4_"^+Q?}cʰ|kۊ]VT#kJ#Ldneo"o5HbI|On;x\m4d@@AAx{Wͳ -5<*N: MҐ"H5EɺQtUgGpBs|.9d2vzt;2 Q!m^AjEWRzXdOG,bmC xG;%1VbuHLeR7 b q ")^c3/י+X^͞IR}!(| `xW-@?~_⪢i.mb4J2sPFd W|]iay$,tm\s͵yöu a-_;HiìW\5L o+~uE<]7P0h:z -FejB\*lzjF&8B,v"/IL7~:r)scr-NAʛb >Dv^nR+JttHYP)Vzu,fxFAA" 9񽊽KckC6 yi)jQѬ8؛Ȼq'Yۯ˖)֞i hܲs튇!,3 ލ WMiۯioED" ua`Cl C^"Fh)v `w".JH ].WVXv' uD9`¥WߑgN> 310v3!>a ?agf'%'B g*ho7SF>$jbGhc&)0K v@J9 5!wC۪G{ LK WD&gWl[}ܵK|Atih@u9)ؤc]hz󸩒ۯRf>h ȧ.ƹ>ه;7̪?sN {^KH _MtV]}tQ=S"[. l]wI#NA4Vp= <Q͍h@6 ʥնVVEVK?v^]ٯt.F^ z`ooޜt!pp w[_L.ci(`ȃ>t:o::;;889:9 PhDRV6J>xU;TQ]WYR/g^z~Ճ?Zh&X X@p :AKW|1F9'/fլP;`8"k?׍vT{O]Q9W2U Vv){^1eAS$j3(*G]XB`ؑR͒_5\ ùB0ki检{FG2G%րK`x> Э0$ dA4߃;tA4zM{ĵ0"\s͵y/!}{H8vgts i7eEow>kd{@HN|&> [Y7Y Zqd d6HsVfNyÔ@Q}o)SUb@^ mꔚxh/0x liQ;u:v=~/ub^ἷ OH㙬-}kI)6UrhK @w7.pMpD0(b瓇ś/XP{=Lǵw[3̕2^,<$ ; 8!3ۡP]֩ άYY;x@17f@-sCotܶߩU2D$ KsQYrtExQ]ĢNΤty`cwW֗(Ʊ4ڑ)!v kF4:>6߂hZ؃&&%_ ?j`d:b8;p1rrz(2D{OMNL5"-d:/g0/1?`*:TwM2ϔ x?>P#iZqpp8a [yx`"r^۹m*(_;8EF~Q@0^>c@lŏ묎 餋yynj_(GYL#z^L&_4tGu3|s zQHskX1SYn%N#sUʣiƹic!|͵#jq0ssss yR'PJ0ByW♗ 9HbpqzQW{pLuӂ[wΈm`' 1aAWfHѳꓑ;ĝ0Oz}ҨEnLc6i^P&&ŖSڬ HP ^1_ݢ{Td ն_OW[ѝ4qQ|7O=z>Me6J T3>r,sP@san|#֥g$k6A r`.Pfh4fi?"##E#M 5!{Dd䶥7ܖqtQKpk*[Y 7ilFyKXn- VmlC>|:ftbamAMT1B/]=\f5M /y#ʔǤH皮P50bKn隧(bƢRO!8A| qT($n%6]Qae]c j_6NR!``_ᥔWr_uyS_oev\ӕu$# ҋJzKEt]U?e*.X/C55ʩ)zfA6N1N>v~ˀӠS@7 k:Y1j`  &(a#W=]l=vQ/D/ 8u=a'Xk7䖲'8!M1_uXt_8G4o-.~ 'F[GG=e^^& AH!1Jݩ-qcz7_U?5Ѹ֋c1W^(K+G3&7zg;t6ضǯ:mRv.sĉ4+ߘ9D\b /Ԟ;7)u:WLUHeN|>2cQ) }r3B W"y5\yrhSE^p ͕XgNZxjUm0vP' ;i+>37Sv[>^~l*~^}WnE?/RѤ6Q\'W6 Fǡ+ƿN|Y&k)^(A.?#'0z n[i[\_09x Y+Ηm|_; v="_9@#!} `?Ñ@\cp40"o#nQLa/}Z07c;4Ck}L]3T{}+A;F-T+khT5<9J16zgUiouf! ^ڝ3]&E7̴N;ïm?/Z{Ns÷ zQFO U""Yl_4@+)?o`?X!԰PuIѾn1#饯y61:åg3G̿_z^F:yAc4m6M\A;9LlWhhh+1eg<>*P>7in rqɝ㛉g6H\)->8`J`[2R,7AŞ|#^;z4|Jӈ6ɛ^erVƩ˥$X QW":o79 \ZO2v`泖7tc,\ B9js :#d_F;=wMb5KDzXV'Lo_f090!W9H Q:T,ٯ' k4542vS=?X?.}I(y' tɍs  ƠSQ7izKL'Ö[]SY[aW9m>&_z:H4rnrjjC=prmŇsd3'I-o<3r&ybxʸK5ʴñ;S{.m.gGf~*!ct, mݩ_)PM[K=ȔgK`sw}x,O{`#TP|;RES1L K@ ǐ(C};ˣC.}-&=ryb4TiB嗪'btn&p  0C[P'8% .$`'eo( 1(ְ_~$bFŁñ y^s5_0OGGG |||jjꘘlnnѝ;wdee^yҫ2[A=u7DKD͘iS]H;s@X_ǡU3@YM_}KF#.n=z?͸Ki~Y\1%TZ%^`bglr[9C8IуM% }L( <r/qΓ'!O\ﰹt&DjM~`SN~3~{d$}~+TO{Ehtr[zm!G >;g8!=)$PēC`oj"oҔOJ}:ԓ0ʹKks :鈉S.`dP&ٻE;DA=pHCJ"ݧTKryVm\y5-aSo'MLk&f! >n"q1ޮL3b0)&h/ H |4uo5TOȾAѢxdzo!K/`{oקm>k*@ b@ ʘmSM9qÜNb4W[V;I$Oe׬Jfh}ܻp|.۶7u\#/$9`B 8M?Zϙ8bU-TJ?Ik*2[i)scp]d l*ToLi.ʏL7H(q2lWK6DLt% ϰr 20 .}9v JHX%EZcW /kP.Z= [*n36oиŹ|`#'[0:T[VY]<޹$jJ'uF`Njg/2?Q?j236 1vJ1lq\sxLDAbrcc bDce$8~wYi$g/j6aԳ%0bX\K*-SA&XM6W2䳧Vԃ l0f@ÝPHl.H U,q) |^mrV47IJB zruƢ&=gRUr~ thi,M3/]W@:kN݂Q.m?Eekm_Xn.hj'JQAӆ֎y~qQYQq͉<۩ONӈG>JU7FtKBJBAI)sfxAĵʴxLTl}\}7ޗWVXkg_6Y 4؇6F5x [.jD\s(uYIs1Qݔa!1Ye-X7 诤~O0R~8X>:ѱ|ZND& ̣sb7zIfۨ[s+5 zk P! SO=;,[]!kl_ ۬=^C)i'\qB٠C=Q1)^R%,oz9[6sOC@0ܯG-v& LRM5ˑ3X+-CK,ȍg5~I'сTD2[fH$& U1X ?V8j 76on^ _!3=SIm/LjOHX#?2)Q]dn;eo 魅쨢ʜ!$Z+Q)kk^WWGDDׯS?$a.rUR-B\#"F/?K5M)v z5_»n!ԯn("HTen K(p)rRIaUE^y3/' )xHȳ12w:JM &ATldb[>\ ߿}RcKRpkDܟۢ[Xk\Be;rCziQv.7%?7T3J&1qLm);YĪ'VVkZW;WWK4$9:8Xy˄JX*TKi:'x'c2Od ֤&j B5B5B5B5BFq2]?/TVEۡ86spZ1JTίMNѰH ̨Z{he‡O=LL=C}2˹{>:  ـn`RxMoڄ+U-3}[һ*OH-43+8;{&kWLu٪֦1݊?cVt2w,֖wќkK gH|F ac,7ZQUAZLr@0[LqC#$Ga.+O';h+?W6(OY{Zxٜ;#.L#QZ)xypT9 qj]E1қ䍩NB4& %ť;>C9f0~>`Rգ"Foj9kVn6*I$vp\V4>+ ss<. 0~_imhqtyw1@>) ~A5pF$q}nxu+us\`&6k]7W$d={zcU,_x}HB Z D`Y`UO#& K!(;O}ZuݨڻǤy'msL&&gq-f~ijCD}ʡڡ3~:zDxӍiE]U⣊ B>YH>اfOHIQD .V . o~,= E;8z_!nv-&}@RaF#pD~`_*3xCBZT[{A EP"B$ 2ø4h\j4.Yţ"Vke?GzQYJ/ƨZԋS$.%p4&*Ճ@P -^h+?TǕe"wgIӬ=T+C3b$uT,lik,6[ FVD?bZ9,FE(b1 EFtO5h~m}2~<ƷW"G|G\^Q^={G:w0!7J"pt }o TI8S5V"g+G{ j[/zR#néz=p!2>X`5ng]ݨv'%LkɞGbwp~v[w~>qpt}i~CF?\.5:b4-5uÓ_tnZ fܟ]6~c㵿Oe|4K!vMѨy}69{Wt5,ob5!5^nzԴEִGѹD?i)vM#vT$#H&=F~JЭJ7?g2yTrg̳l(;kuT6^gt FNQzyUŲeeg,+duGKI%ƪ:v-kl x1UL Az| x+@54YBـBB٢BيBBٰBYBIon4A,4~ōP/V d&fݧ*&ObzuXzBd^φf֕OKm|rMzM1 m>].&cRW3<5Z2&Yfpl}*2u-4 AOO[G b?CŦ!=&yǝ~wd0Ay22Ve`gqU%Τryѕaozx:)ZWf:5X8%[2,U-V"\S#XnW)[XpppKatQaQwEHUot.& j)*w3ogB:S"nYHĖ>|$VVf핽(bicֆnGvqj hڙ:0Xdɶ]>.^(-RJK[qwwwww4 >3g7dJv*.jtrS/EŅ6b|U7OԘ69N)Z$BXj*Gu>R !ṁW'96/>@Gunc<-2y=Imf%M,:4jTe Y?dcBd3} \ܯl"GG>8UJ{G[q,9$P)}! bbCgbmmw)/IXb$-DduIɟSO=F]CLL $$$'gob"L߅ E,$+Ǎ܇{CSśJXھYLFrbGC0CH>\9G2D>HT/غ'XzfztnwA?ѯ!N=4) V1'39.Y8O"@ߺ_\@]4@9R/~t> iԫ4P"LtrίSov*z!@߿)qWztdӘHc3H~"utf^FqوaS>? ;8p˙@Ŀ6'0XQUx:G:Nˢ$^! rK%e`Ѳ2 *fn!^vKRCܖ=ApJʖׅ'ZgOcw3_WaS`j:Vr~n28 ;-QG$&+T}qYz %]Zer Nc؜HWJ=6LnaE#=]c'}R3gǻϰ)-GUR`4xp.ZBt,S@-pZAr^BNlbpV} ؆=$?*b 74s]!cLyKµ3ԹIma2ޅf-?'x~q~|.S=GXc.{aqOVm=q5cUɬ/E%U q FоFFFFFA+A/zq5ujgŌe-"qP˸u;؋\#G1>]l0h%[Z@1aW|X .Nsy9mE٨7'눦qHb 8 \d}E峔[0(;Wf4&Dljq O]Azx8bQ>Mmc49 e&*XgS i:ֳr )DXtn^ڜ1ԥy/؂a~Veo4\=cECD%t߅TzY(;d8(]IŶuSi*!ބMMGN@wUMB 'x\Rb 0^ѻz)-hG| d˲zUTHJԙ좜&KI|{(YqX*Z֛W WYɻHw$:͈au+m#CcҩFd3e$xEihȪEiæ{SX;;oO7/W>.H^Yp\>VA?6As_S{SfN\TMȊ3]%vP1Ԏ)> Щvi愴?ojw)?~Ӷqb qU>"a!aANQ^:y!(xFO-k 0CƒLˏgɠ;(!k+%؋ko>P$YZG+A/عFV! dJ9@P$pWgOx. G$k0\27ۥcr68;U<97ұ e{mi@D865Y-j=?  ?"}]7 븇{X66ZO<Ӯ7h~c.m.8 44t0 V/*IO=ԓ<kV677>7iiW+Oaq~Q% };Px+߭e"D-TsAu,m+*4h[KDSߗw{X[;z /n.]n] `=p3--9g" YC2#vPUYW΂f6 lXN_~1Y)ծ4ª5AL0v0Suǂ 8R"%YK aZL|vօ=H$zb=1m~1Wh[DF굖p;dft=M.7&W̿/\yA<X#f))WF¶L {-|BF8;C$߸?{&ӆbW&CNkߣWv'o 7eW>o` _" PD/i|2Zb4 ˎR$ a6P`SSLr5sMhN⩬+`Vx[1e%Ѽirښ ھ/|8@"c{Gopdn!-X~=)U诎NގZ4"tk-j߂Q5 97vvg 1.f)i&r43Tܔ[3W;j% URC|Z2*y3EdRwC Hж/q˜܋$I/^=l#M'6fe97ZلU&qjJyrډޖNYa1IQ菢ѭ99W4+@<P[¥a̓_hpn`;0<~~yC`'N%yEũO^kH;g?KMa&pD핧힗qcJnhxs~5AW+``4b#\L2#X٠__*_VM))fq4#YV:ByB8*ZVn8eCogmﳆ݁tz@X8FM/Cط!sfxPzz4 fL?]="0 &A!^ p%_D.]==}u~`xsa<'_?pr <7AXEdrMnGY?ӊ/IK5.]lmT\!w]|/VQUCQxPM9GRKxsx+Cx+]x+w γW$ DŽ«?۴F.LurUcsKhHp8(V黡O37'V[Q% AFn֦~IBS%LFF>Ͻ@V:h8%Shq$W X vfck!q@nSrj:[gafoɓX6g_gۚv3 .\Lr\5t=Cd«$Ċw (ŧa jɌT3'u VZǍ5vX)}v\D3#\e[-R&,VR5 KG }`h״HU1׆,dhwkl7$J'h\3#ٶ[:ʷǩZZw!WFsQY4 QϬ?wW%@[8(R$wUCGj#s~a|bW8GVL|>&[4H~Pzr|q@HIEX~-3nB0ř]?5M;_'m=k~|\>oy-S`wi"X.Y;#5:+yebZ~9_*^NVF`<_aͷ),F'!ҥ}oU-;og;tzW~_nl ر(DFmsJg^G'9LḿxEŇϥwwVd;Xg9/s˴Em}Jr3;hfe 5*=-NQҏQaE܉=k g w3WDgЯ~|k*#bB25`n0>9X<]NvH+5̬nk#TSg=jr2uv}4 kcPl͍'zd)#0 dG 6i Gg([78O|7s/aRjɯFM}- T}=Ai%M~%Cz%[b%o6r9G/蟯_^W,s?i Q2Kk Q Gf0ޣ#I5֏Apk̮뻟.r{w߭tN}ѵBjȳYb% dl40L ]"W|ǜ[5 VJY?&A >Dɯr5i{؄A nuc+6jy),:q~3_7ݠa_j?fy %-je=(YpB3 Oop4+{Ef4+ vjvޑ?rj/#6]}|o^c)楸2||g~Ts 7\~z$ϧzIb S 'Z>uq^8Dug2oGHġe?3)Z12Itvm*XUvJХؙ:d1(o\%X`,&>ޯ)V BrρDM'KmjGB[  !c]OnmxsA'[='X%zWIg~zr!E1Cd9zC?CHFEh(z6b f ^'%JI(cWn(]w;3M @KBe~APW9M< ="[dn`\dA5Gѭ_Gõsk[6h8P8h'Lg2V>'wտS9'ө#iUPqkP#t句O_b͚Q׎J%17}mSSm\\=7 6 2V,a]cULi/zἩ:$]}vƴ׭qpcQ>aϤ߃Iw1!)ҖY]́3;VAQ_&"?I&R,1쾒8yyf4`GdvWkM~j IaElcNa=>[9X gGɶ&`%80hHZ}䀦bT-CԳ?Sk2z'`W)=\@l.-GA9(Sԗj 3:[pq[4 ?׀yL{ȔBw*9#is{A{EέdY"huT0?my91y{md{J#žl:kAÖbŔ#T34݇t I*ѓ{3x* g)R Y VG#Zu;kX=z d >"= `Ė˜ ׶~<(Iajuo ?(/R%qV 0~d,B*2OR]ш ={_Yڮ[ة gd3yZIlu,ؖJԻI<dĚ&ߛc.5H1_{" -xҿB;EGDVIO=ԓ8Hd~ry@Qߖ N1A+6*˫kزZz~V|m:J.Zj*IFu*r:ͪ$`HpU֚vLk=y]{8x9IR2?;}?1bJA(-&#B|m=R\ܜNۮ&}IRI%"%³%BއJ~ƍnJLk`%/γoT4W? 7~ePIPAPHtGyl y6V33k0L!q3m$(CF^^L|F_ϴ% WK[[TCW$ ź/c% (E? 'A_UN=t@drbftW2D6Jطi.z)n>.̿9D憠]bE717e4EjQUzY/)EuokWKS8]o@ꏶE+}{'0l:𹷪߯X<6;sh&DWc< ɀr`2@6nvQ^4&q9-6VKx:+p淙ׄwM!X' ۠ۡ?ykwqht{C"U[o6%o8lzlH^V2߷R}t݌dm6x=&[r]T#>WNNB!:^g C 0}.-N$}NNgkLHj-OUoTi1czr|dx-p$@8!v 68}@iN-XFڙr`dxhqbA( -{3qsl-QJ_ AIp{_*%:yXiTGT|@|whǟ3d\ y*ќaTVAD\R^nֽ.&+Lkg&SR "?<}R>am̀@bq\SK`  Dd]==|O|ꩧ?(OvgDN;}+0 ?6ٕqmt=t!2*ʇ)wHof^.#l ! jAPN瑨;!I}W5//8։O@ 8>ċ`rjxω~Y-ԯ4'LVڥs<WIw߀U(K1^NpXt?!lN\$*;6'~l|ּ/rkb qRW,;A&!IfķJ/|t`e Y`C:-ŒB|nHYί3#﷛'(tR~Mkr[]~nscѻwgO?,.ߺ=`]?ۺφS<)= ?Mdp]W*ߤX[@vFI39Zm1kQ+iՂZkq<54KXgGC`|G;;t;z2X$jv:žBŸ,j'LRѡjZ`Jy͗'i[eftV͊9 qL] ٞ %mɆh:XRzq%?#eck&c;]rTt xƞq`iѼ6Poy7raiia nvOn!-^%~fb0^#A XV'!$ tu}C9zˁ1=FaN^71wy:\ݑhVOlk?G3C{#1Ks(V#53+$ڎXQTmV3ICVkH'4ד@s(k}@62*v <^#nزL7;Q%ٟ+ԻS}$CHR]]n[ WxGuDg7IUчuT6qW}"MLմ,4üt3#=#uÃ$"D}4ľ4 y{7L7q5 uVts$G"C@9"3ٯOCbܷPP-ΰ?-wh% nUj@Z [Q[E‰ft-.F]*;d&"ΰ枫ힹJR"L(olUp^ֲ7@7`HԹ`DjD+פ3quPf냷;Y} GVBWktj?0}m;sYF'RLBY6Wy6;!\5d$_3d k{gcH0-A U AH$e?UI!rŨ}wLعc*r%UE')٠,2)}ʾSkF[ޅ밳\~.sgF(wHpD;8I2g}B뽓z@g~X!vHʖOL(Y~v*vCz4A7wr& x8[Zd]hb ?C9.-NKu 1Uvc1lQb+a0TNO,h1VJ_blbj.&O&r[~\ _fٯU!HIO=ԓ<K,NT }0AE \(AK6}w @@D€#?~LBQ5뤕۪]g6GǙZY7~W}4~AWDNmdb=U - Å#zV>Y@Cu *-sk lX/dL!D(3"s/n 纯1Dĝt1C1Fȁ7+=sϤ:; n.k2Y kz?\nai[ᥲ[[+k-U^RX=h,硂azxu/C c#X +O ڨ>BU׈dJaz}qx|= CU᛾eܑ'h7XG8ۯW']p IP_M=d0E9}t֦r MYm"gøJZ]:oHF$h2euά9m7rg^WXe8d1՛ cm^AoV4;(*Y$f9-k_v)X( w҅EB1pSX, Ԁ*ާ@c Lx4rTvM|ke߉f1pͰ}Xoh<,7Z?70 ȩ䶄yQyzn-t-7~ LWK(c0-/Q(PX_ͫfDeP_Slꪎmé9, Xb>o8u?q;¼^={7yFq˔{(X!SIj DL@ʄSOȍ::"c씒,UNK0Ѻ_?Y6x+G,ԱHDuTpa[KSÀݨBNV4p۫K7Dirpt_yUO& @*h㬠>wQڎ[.%Ž}V5;;o{f[K JZ.XĞie]˕Qag/>ΝlCųK[;E"{BeE 2émbU)}5? P_ӝ1}, )RK2} \n=AaEr6Aɿ@=L Z0C7¬ ]ԛ TWA2~5bW[Xz7Of8_@6boᣔ l!Zs^}}a}!W{e?1}SyԳxFreh~M[?[UPlʢZāu^D+&nC8|Kluc{p`?9` NְG2LkRh2ؙnLhjih(*.*)R5n(uM3* OMՈ(6jvup1IYP-ZԴ8>+!r;)~Yh♹X"7T롖S˜-wde)ff+ʁdO jY;Gm<.:JUw?DtCnt3.W捊t}9y2͏FB6i9ܙϭkۚ g?af)ًjzv\şc[nw<I3n~^a^:(5G:.wIset&ND"By>C˜^jiSZW6-piL)VrWr,"; CL&h97L\KήL0koieXnj{2.>;bݣ.ޑrRa\Ru8T=e=Mݰ7_ 3ڌ1: 4~P;NoΞEw|xƙңݞe~vba:5e>24l8oeڞ:qt-:T^C4usw&p6d:l2rE##GY}ohT_zzAG[N`AսLګqڛ1u˖!~mN[X:JyĿW4 SK?+rLG|B 3|~:Nbnun 6_0ۧ-YJN)Lmb3N6%40úlDзLu0cZlm֤ZdG2frAԪvMϑ]2^uzRug(OH+%m5yj:&]tK[@t I:woV͋-f﴿uwmӸۂ\ώR1s}NƖٟI:]- U³h4')<>,~_{r٧pgs{o.5|&ǀ6oMMsE':F7O/A $+Љ֏P/'*6] gMOg7y[oʓـ bgwڝ=:ځouEPzGĺvg*c(+WRMYhy-c+̽wϬwfJL9q8&X\OI_#3%[i& tv9n~ )  ~٦_hTbϡ&+anZ ߶4!]B7 xn%B4!Ib@=OQvNO\NDa \4/Tn=|yOG*й7ժxek,_CV|ѷɥ{u y avjx{CU Jd)%{j d-dmܐW'} rYG9rSgg=K[7`,VT+0 Pd ,j *i5CS=$!~|b5#ᩔC_s{Y1V]F?P~]# Y߲ZD+ΕӤi-0b&inO197;ci5 IbTfxAP?NT~z(8_6k!H>n%1# ͈rNkܳEN+ eۥD7+Wg7 ]ΑdnY@T0 Pp$=j}qC&gIzN&~s3Qv@MGACDG݆AfzϿP-j.ҍ>/|.FJuz6yt@{eѷ ש=?9F=*sYs/Ė`#ku[5.?tjfd11V5UNfd#}W%B}/2s p|^g a rsp6$vUgzn&;V@CI<x//?mnQ[o?(O*}.X &w\ 85oYCPޯ)VEJ[6 zFj%gL$ ٖmjQJi3E2curP{(vt=U-iq~*jIlÐ/C~c'"Qz<;h%.4}_@`<`9z\ .e*ߩ- mƌrV4(N'Y ^ ОJ,\7TYXR`Ж#V%.6*ж,л1zuDzOrM2J1C7X=\Z1]r }z~qQa3h7vOe<$s*8gSu91L!Q>[jXt+åìCSZX>O5;2kJghqa|oy7zm@'#ؘWBb(<}[g!_AA,t RGzQҟ@5_= M?Z;s{&*V2]]%?.sMv(.ZnDJT0Ď=ö8 l7͊o1(&TBYX|'6Ѱ&@ܡ)[ 0PjiN6FPxAoAK?W;2\bw'bm(1*yEG6"ZnnQ ']YN>0O>4/]W;2F:OE]jM}`ޡy\`l2ˬFd-.Q\w!}olwPKోbxf T^OQ59,c27A57qvfwfkcuc,w>hO7Vr L&-VQCdՓ~iB!V:J\$bcN@hQGNKMGYgt*i #u ȁK(]05l-|-N֧zL8PMoSǀQ/5*8  y6Ygftk. 6 מVމȹNC>aJ.3 o4 ׉VWJε| A} }@ʹAm^"oˮ֘~LWf NmV_$c{&]֙<;V>^G({[o&<8v:hk& P~^ap_ it*{"\R3kdKe5NL4`l[bi NRr247.q=#ېZ׋UfRiQ׋ߏo:H3:B_9?6_]1!F"Z|U*HfC!!?!Ryr.Krͅ4)Ӏy]dG6 ]vu祝咇L^4N\Vv|(F@$"RYg L׷R,cdgned+(A%1E8K@r\jB@&8;<&F-,O4kuskU?H~/6Q/)d*|3:5k ,b"_Qj/ٵ$J$V3ƍ>Dmwk]fJ+Բ mbꣵh5k5ab{ovzbɁO(gX;y9Z-c$bہ{%e-h) lmf3B[1CԬk''wBԪAWoac|#~q_ UyD0EaĞ1ԍΕJhhĜ8 61Y͕݇q(H7xq61UZ3 y ,P0;p٧(ʗ?USZ3fqd IΗɮʯ)櫭Hu%vYΣ ҘM 6jeZ 9S&2܀b[ 7 ݴr_O\dYZ >5}D an~=@?s5vBN;R3H=!j {pxLRVNUYgӬ$ӛzmZljc\ FacW_*}X B;^#TϣlZF0[Hꄰp7[( 2j>z,R e*h)e;v}}={0gTgG8{D[++wyGHV1\Ϡ^8S5֤=ܥG{vQJ`^ﰂkh&6?`;o}{8_7 Կ`D[XG("Mn\CSz@ ҇7y[oFFypy5e-QJhZ!:1q_퇠T_?d7DY 9%F2|k%+s ֯y-:*tP툔[$OhUNj*:rDAca~,gɬa)IAI@#)rb5C[Ó@GG{;[S&?>lM)@|8cdmEdot R2A*)YyXt[TFZ6-;˸!&~٠B(J+2YgA>v|JԘYwwPŠCvVv^&1Z9ulD (Xk@0J3 Wꖩ/CC ?6,cMO<18fB=D5uI=O3B;5e`[k'qGլlFQD4RoRg4뵾=c?.Lݶ |49ج<;{Qv @UB* 3LL#t3 B;m+Qe/p#IJ'SwGS fµ?"qܤrYdUNt+UbԱЎfEDX0} ;ױ%IhgJg)I6lmT*mDŽfWh T#}L?n9:GןP ,p.ȜP KeWG}Vyh}}/O}T+&Sg* /ix_y\&P)`ƴ4J&jrv2dQ)=߯ҮGi/yCU>E伊)ufDy!%=Y|lZל9;/[_Y[ U]MSzT=D,G`7aiN@gT9FUIFH?~"O'e%KPAM3qd`d{mT w9<"p3 {oަ[~"P&T5iJh{W^X'snӯah`4/- /z[9&]PDPԯ0Bp.H@ПO#BiV\Ӌ0{ՖGO2*o|뭷'4,00qJƾƶ *\zE3+i\RfA9",A3;]_¯#-52T 9HP8FpH-&LjQd:eJ7W4״Wu KѾ3ֹcC܃we8D3Qo[vrqBzS1}H[6E_LXHAMwI5}˚0ѠbmL !ft~_UMXɇuGǨ' Mn>VS&00ˁ`ۜ'w_+PyoyyPpֈ+Y:ܚ$ʕrtfL6;~.cӶ٧J ?j e4l]o,T62z 1N>Ku>:.y*19*e9y?Z^jVr,voƂ6Z?!  > e  k^t [e/p1M4$Z+0M =>qY~}1qy J^f"0Le{[~DL|rrTCIB=gv[jH7jФ/y ]'>(He:vfh;R[KM}iqlw~c;~ZeMg*Advrz6ffNq*>V !iuNtd&"t¬hBywd~ sk`iĚFIlCpЅ@,^WI&ݠzS=0-TW0KZgǶcʓhHm=mϼrҀZΜnu@:wm6 2Lj#_FF?~{ĺL &򷷒nB>R.qs55~jgig0F1E7dkf wIiz S7*/GonYyKÓHRuPٞYبr̬RšRrJwRŌS'&ep@fN;A`Q'.I6X64St$K_꿝Pu _(gX'8GOP$<gv_u:OVLݞgF>!>"4UBC2<܇T$ 4Ʈw\" ^{'XIJDXߓmy嶒rQarcI 7m ѺIf~ @!$u}Xԛ\ZqN)[k"3r%~,Õ dnӺI2u L:*>n><=IGrԌA3^(kd{h{A q# hzvafHtBpNs1q!vW.[%C^2ݭ P gpRUPipqH7 ,S%Iq"M\#~S0ZʶyfN'zq7YivRˋw͍"|0Oh l3!@~WNXI9L:˗cuz.+yP"sPhqziVr#-AM) qQ^F !]ɇ i͛$ C]gW_if_>-IWI6W&HlBy|LW@y8{(Y)ڌ/x5gpwxoΔnT-_.nz2 Bwj\}j:?5 zO9,n;}@G$MNZisu@)42FWy5mb{-~B'7 /OZ*c-#^GP{DcV_&^$L%4QOO^̾:Aް$THU!O ' c \3ǤǐRG[o&< Cj:G\Ly`egB,'⿓f[&?p,-6 M4 m ~|#*@ AyGvB9 8F3@czp `ĦTVBF_9QAuƍ|+ws}'lmЮ'[꘼S$qM ) Y  | 54󯀉7B[Փiݳ$( Zx$b!\#t9C]}8LR $ ]$ܣ׬'+8ڼWztahkLV5u ,4y(Z/bLxzWamU~KG` 6an&OxՒ 4$ zڎ[g=e]sXՇ S[a`9XCy-\le=9]z !"sG.祤%%ʴ92<}4=9m@wI18b)Ⱥ׾-)2z D=A!sM5K+9W?.1Bw ^!@vD)'1MRr YI\)m_ӆ[sgӏTxvLfQ-t'Rėm )\}=wsuHu-vX DŽ&A&>&n&nBߣ(a4t0FYCTsJꯄ۬>n8n%`Hݗr/gD)]Nl#߅Aʺ,9ū!nY"*&n&p+3ISj4 ѫ_'{HZ| ;o֛<tIgcD+3lJpY^ h^-tc 7t5m\Zo/Ak/Ujbzq`k]\-|Sü2@ڽ^x suc2^) @ j:m4B_'׮Htwr}戶\$J7ƴ\fp2RkȠrg(eCKz{mkDIjX U q_B"X]KKx6ˆ]d*ӥ_ˍ?0H*$'$ @jC'q~b"co]n4 ZYɰP0H BBF}~䀰gyS UiFQVnnYu.+n6sZ)&tiUhe:)l'c6kQA_G^qO6~?Qߢ˓G̺;WJdF/$TM#O_jr4Bw9qz)<~U+e=dOʚvl.պDj̔߰CIH/H$!=ڮ@`qCtāqk~TA JOѯհƃQ%?8(ViO^[x`",c2MP}QeqLjon-]M8is/ޑL .t 44{y%IIp)!] [tMV/V 1[p=q\t, r WI793dLAE2tE/s挨٤ i佀y{3Gp% X JKR,Ku)lch Y&!_Z`wV WWwᔯ3ӌ-+WdGۛhK& gqFȍA"={>zUKþ;QueZLTZA e*pXnGc:+#b-J0#7q(gSYmCz\vhI nR*&LA1Dog[ooʓPS(xcT#sԽP-@p2!@)@Nֆ@xaGlWo"ϐH*ט'EN%zg0aч/V(g#71Oa\;x[5uozra_ܹu]|0زT|y=ls ҥIu8* 2 ~0@X _ec |s^odțQ֘Ek!ZDCH$m чĨCR _#QO/$+?5 ]%s?~0 {_W **Z f[\`k0- coF .z+(Res҄VXGN~F)&Cy{pIHm # G;LU۲WkΩ-E C!ӿL=~ _ˍ70w?ww{wBiT@Y|-v{q*{xk^U$DRVk@P[MQISI!'%/($g^<װ _dA!30]—%`\A0A x0B ;orI}ա#{qA?p JԵ/-1| D=w5`Bwߥ*]]"R3@:K8+Ԭޜi{c_1A楐`sevsx3vP 2|*in=F`NbBta޷c.@DE)IAi~/x p>g޳_]|(:޴:׾ k*x4T#@OrFqKne.u2etWϾT'q-66y ڴ!B_X0O~nnRXNO3Vh5\kC?/ܼwk6e[C1iluvbZxVw-yE3L8#νSƴkVxK_YQϘ;+ g`\񒼏yELEy"jsA'.FA3=U EpY&Ј@\y.IꑳF+5Bӄ>u׋kT 6S^{xQ9r7~2͒rirN==EyB{E:e5@{ ?_x k}Qò.6x+>oׂ[` Wd+ώqϻ0o;P:7'2M%^͡Jc{/,-su_^9޸jNjAIhOЭPg钪 *(5T@:A1 yia j`]7y 7Qںs}+ ط;UH5>_ 0;6: 0[z6HY5/c~"#ԆyʱyV9+Z*TBCUI$C2{@i9zqc8ڥ5Yt}}Y}YHR'<.YEp;svDA0O#ӰY@tnj֫A5P)N|\wYSE/vj4y ~.z|D˴. $.K.sU//#~] &}{7zAq[WaVdaYI g_9{gW pᛶӏ>?ܹ%bV"u!+NbU3NKJYם>`X{a`1G|&"׶nN%KP u^v|D?&yTbzׇj%޽TN7 jZ6>=0^h3`lo;1jUqbL@ƯeLVP^W{-Pp/p2񩽝<1Y꛱ .J8GS,D+FƥV=I {c u8 \9fyk=")QPaߢb`]Sޠ #i= C88mo5CY`d"p{˯Bz  ДSO=QKk-sx{{@>s ]D"z> {ޣzܒǬ/7[M7| zbsy=zW)ػ³eksc ꥭ±Zn>v}}>Aպ{L`0ɡ?Y˵uyͱñ9ߣ꒳4g]yCffvi6~fSWJ*?Vqwe}П>NIM' Mx$^ }}`~|pa{r.[$Ѱ ;55v}l}|n[t]nbV>oBs?8Qqq=c= 3#;CL7<Ux%VM^oB@;Nu{w01g^s.~/TaR.'9Zş9CGs]3ם9e޼9m@۳U/1EԳQ3'!gMx^B`IObZzu݌80aU{׎R !vZM?g}P֜5'=t\_:o9Į;~]3'[7ǾPDN>F?`֎xY{Wytp $Q^Ya^!_#0ڤ \Xؤ$<0˺ GI䷲Ko:EMͯR|j_P4x(gײ }TLȱ ?0 =3lrOQ%fop$W$w5{}tJ(|Y*$Q&O4d}B`p#6|ϼTy]0\78N?ԚueBXbϺE2;ulVq P@wk7$kf:6 o{:6-"788W`h%"9FQ]sFDWR%b&Va5C[=[ [MZ|4d|-\&0yNJ^r;GSj]9f@xTCؚFP(N7c8i 01`}>o0c\SY3mcy{!鶨OD 8p$ϧzI$>ϴ)V&XC0@q ^Rphn7GtM\}Makk[```cT<{vOg:IyTHu,KK++ڕslV#NLV}s v^/|Lnkh53T5X-pı/@1<۩!`,|~R-W)Ѹ.ԱlJ*O׻yYZn? -|M#͜3Cs|=\|u3c),&DS_Xvg$ZxڹYi{&)I=V_zʙ};r oTgXfuPayA A!ZDh~~~lgwp倢O*6K;%V&h nY/ Q6FrUǖc롿{~Xzz:9yZ)(Onfw)$$.-h%&۠pXykJ8N=i5rld0>X:A*G-&y8t f`LLN[(gӢL>nݟE.9KL<^NA^p}),Yįh:h6IVHO%@5Q}+䳘we * i0]:9nX'ÉLakdݢ_]Nn~V IC&){9*zJf3~zn;TYAi!d2(%oi xh$Y_8ݘL+7eg7 4VhwEr l8a B iΫ9AF:zF&zɔr|5 %&IԞk)JHOlPY.D>z~-ܾZZ$[)%8λXoD'Sa~pːkQDz׼ %1x _C7wc[W3S kGW;owc,c(OߏL, :Ȯj -$l5TV}%C+U$?'4&r>1_+4"\xSO=$EyRjp4ۗA,##sDJ  B8ʗ;,s}u {yxXz{;$[H!!y$3 7"1boĜ;ϐV`WѶ댫RZ$vOt2\E?|m}F[*2;ow7OJ/b]ɒY~e.W7 ';\ˤ95N˗lK^=8(Ot.cc3HqN˙6e~;{DI@;Ct0hΦOҙ|&sG=4t}9Ç82B-'>0'Uij ~ DDT;L+3|cRׁͣ,KԹ3DXOyiVx%fXz\'Eؽ6@e[8yu]DxXF_AYE[#\{۲)M&fSE}wsݯNAAPg5C[dW]`M_IռP5O\ȃ-'< dr;;_;צ96S.|4/^t Qɠc$cjT2%S6O\ewv`>g mNA!Qc+L6]"I*~38ay>SOߔ3Nyf Cy-_y1&!zގwzxqDDE;#-wdvY}@0|0`([0{%LZ%Ac<PYu#ju/9zٚo?V^/E/H:ni 2RjO p~\~9&k&wTFeMd1T"xueO+qX]m7!īG/(ifh'i' nKRʶ9>Uo}D WVV4(9͓8g"QWM[@6Ok=Fq9rULc+tCqFBx_h>ʬ@̡0W_UD?Gx~Ǝ1Y-UyCl=Lm㍴կ>I%n:srӞOi-mg|LXz0 7O4lIQ Vv`$GF)kchߊ 4lK px3Oj<~pxV>[ƒYApO-[uw7  zq|d̤~W~[wVϥivOT(CӤNjS9Lhyɘ6 b\!RAWPx0OYHطEIm7s7g7^>. Znɻ6*1YN I<pJU.D{9XF@ 0pQ(Qc/wR9rJj5f%ڐIceջNq5ylQT&O%\iQ-v?g,dT4.OUUifa휧(\#uB?EBҽBq>PLD~kNnI_j) UqxUi;y$T;0&C#RKtbּX{pXߊu5k}!v|` {9\Nη:Uڣ/zcy&5&~Hc30K[wmsڸRҐ]K1 M9takގk9%8uzupO3G>j ;:0jl :ab)3I$\\5O !:Q\z׌)7!..fcaJuX/|c [j>KY'Ϗ1Y,_'_yUNk~,:)P.SA`,e9N?lj}!<0*&3MIBRƹO{`ܙ ɴ=ݸ- Von ׾U'kU\%k*4*Ӭʂ],ZCzu~|3-QO8B7M6ҡse<]Ѕυu:};v\lJdCmE~ImEm]MSGgW_~l^˴5C3Fb\NuP#U@|VhCi 9(` w8pu,t V->@(|A8 H^53Q~0 [qS<] &(V5?:8@]Ix̧vƅΘ_4 +c*klUIlt(f.O} MM0`ra}Bn8 Z'TΗO3Mz/P؟mX-w?&Ua&"ӝP{We,D/ X~'aM(U81z!v>~.6Uȫ9 #L=4 $% 0NF1r JwI㴹oRD heZ"Qҟ';Xxy~޳g+xW;3^w e()4Fv 6Lj&3h:g*P k޲+f9e> سtYq^$( -խ[7[{}R#VGNpgwooͿglaٔ,R%B%t9Q#\.yu%KJ^QAQjfƷbw.t:$CcYhηHV>׵jfz9w;iz*pssqt+%cxSO=$AyJ)t.X{߼\,\ ܰm'.퇮cš@$Am@(!Vc)OS]N[l{]4sxWy |[>h {fAVe"5bs)Ė=5ݮl|4S{+c&IlFqȹK"ҭ;ٱf ]'a.S:t$xhkom^ǹK GghIWAwR%~o1on|nmuo4nTnr{#:I&PhQ>mZ,P-Lӟpu7TH, wԭ9:P%sK)kG?riJBYPGh0&c^4/lY֞O\c`r_uFkpp6}igefd `cLk2fgMd*biy?9>:ۤ}oyқiƱZs41 xAbFeCb,ޯD0졀 0'8,="9Zz!?hpd'0KRsǪC>L:n~#8\?JUA pV8q?}Iʀ(]yi-'|*Y=h|wKpXt5puk0 (ǭci*2=V;gfC)^` \P>d.m3$Mַ^8C]5W%znqt}HX[Id 3gdK$'89(wȚ7WSd#l=-O|$R/j~$l3M0:yh/ZG9?r}`r]SO(TOȵ#ڟp@|\p,+V)0-cW9oթHήL슪ѐPסljjB 6XPi?w>p@y((  9982u >^kBk9@/;|Eo3x@0ID;]5C gbk|8鏨~n[fci`l~[875dkh( דp3.M^*j^X4l 'JJ.0>мH^{;]q{ȿ9w7(ʗ٧[է\4K G^\|Y֘ot?HS2~X]߷*O])Kj8B݄m</{ kBua7瑦G6;g^V>DZ)܆3RZ-N9A!]rgNU.-I=_샎OV ofG)'t1ְs7_/1]e.s&ޖODzwŇU=4=~pC;%,$ѱ:{0I^ԐSضSlt۵nyljfp]o{6d$Cs ? B,MoSM9.y56U/ke%c/^n\l.P7z:73& x30 B0ؿ#CUnqe DEvIvI5wHMIw q0"18+}nﴽ!4j~+$0;$G pps8*8-E~z={D+\e}-7p@zDžUz6Y; ڵISzpQroα(vwwwY]%>Tp4P<7:–DU&p/#nw'u[ 4C,[V-ϼjx5F6O9{0q\vra|-~)w{dVp@[`@0@ȂOG 7#`j]-_>r[lS|! Y%£;Xh7A&Өmh hLEh-#nP,< PAp.$|J;$paC5s*Tbi ҿq%zZ3\͖XJgOɕE˞ȫkkxls~yll`޺h7.ŏ>4ӭ /L쁚NAiW {@5aDx?q|{wlKM{d+0b#6x'0nP)}H~B|N9wzQ< 3[r0=󩧞ziQzAY&>n펶}>eI ύp1v%3 DK+k ʄ& I\E̖-tcCR!Fqޥα&LbMbM]-M-bĵ%dE = 6#ցAI {AѻK֫H+U'Y/00^?,Y67bykHtFm"r>r#Qu4H,Utmh~/ia>>`>!JWt>3"+ хc?jkݫѪ7KRNh AO!ܦخ+mQNJ֯71? |3 6 7l+Hpzi <=! ,EXU@޷I*q:i~*Za_B8K_r"bs [u3׽?"A~*y|AKHAg㦇AcBtg*VNjN7X E[\h eY b|N`9U7K֜k=++D5Ma@و*ݍ4<tvq2~ L'QvLWyΉl¥rPoq.~ OS`uڮjOK+;WߣeңFɃDw=] ?_`cln៪*R) )><_0,ObX]j7ވ389ƪmt,ۡOs5.S5bU^XcXhVTg :y]E}t#jI"g.^m#~Es5uD9;= ݝC1R)SRsEpahVxl[alȧ&N,+N |A#5"O]!_#v!`~%J()^.߅1fjs|BI6Ǵ0̾1WRZoBpo)q\oJz'{O940fZ<| 1>K8쥙lZ"x;"f^%+3XYʚW9BMdQs^2!Co'_5ϓ>3[CB)~/u>$SQdd;]od~U"~"jbxinjL瑦[ngNяzIpu'y>SO'1dL8O0E{{8F^k]#DGH!"d5 Bץc}+ Pk@z `k?*EYe]|wquy? B;PV@(~1]#/7r/#95"ҪCv\DVA^gS_oPTS`8wR=`~X,-Jf<bnR%/׈sK<&jFB8D;GE ?&ZYb{]?L2yazxoov+1(f7Y|`r>MƟSL $"2  dHwWg(ȳ7C`P;{du٧ INfaSDnp8n)B6nNbl=4lg*x2vS%wjucRw !3# "]߾H{4Dz2uvne7`{HdF!M3Rz 5=(|[i1qE%+QK)i)l(G 0[kI^_6D0B&\u12l2|H1>B+Fu;zc9wjZ_P30kޭiq"Ao͢p 0A AJ|DN@YBA-CA@FFDC@+(RP fWc[·ό)[>}W<=K@JМwrxZXL?DmzH="#]]l\ M tEr=DF.\W+[}-M JbM7fMɧF> 1ׅC4>v(9a0ԍozީd2 JI`;ge]DQ{o8 D-Dx e8#٠2NKMs6 F ENDʺF̻C(yU^TTvW{;%VjiThk25"XE0+s79\LKT;DG7;8gz{:npg⟥!f.. Y\ϊOk:?gs+G9yLxдeGE1F pc|#Wi ơEB _%=ȝKtcw1K>.oWqp jIٔ܂TsDSY["!- sy 1T]MM^$*YʅKllz0 0]-F݈C3rprZ>"ư}_HUyMw=;3s=5ʝuѮ%^ٖ yJKH&-(W}b3gO3 ׉𪲲lL)+dnS’Fĵq\!_!I^(;N]r.~C9OɆ[2ʐ52p@.άO:D?'V*WKMD yDG~ 90+5v!Q:%h 1] ?(: nc &Ȁ!cp0A4MsҤck|DZba$dZb`޼[į^2}sO|+ Fxߛijʤզ*:[*򚵒]]Rmpԡ,"lY$b kQI6N qͰ1u(pY"EP9%_50O>W0WشrvD"R`ei0i:՝9U&Z40S7W1(Eй e["8n7 z P](G8dcdNa9 <bZ oP]6m(摥e+MU*mپA)e,dȒIѮU͋ cu'gQGP@ضvhxntkxf'y,izE~$Qj{dVO &f<^x 4 N,Q].Z%VE<ho &}Bv).Dnu>7.r>7 @/p<@n1,&tL3SWΐ%,ṇ3da89hمKڀX-R FOd5^K/P8 oS"D 3 ?Xpͻw8{:?Y=̾PY#>ZӼ\Vk@X/zfI䳞l^W]HIpW 9,>9x9X%*F=G˛\84(`ǒWCQ*i$%=B ]OUWQ=_b@"`n4ch9ՆK m r2z5{p uÏFİ zPd@c_[cj`'Z *]Օ_.fzzjj jjiw rIuY演~ wwkru1jхHMCOyus{=ۙjIヌM" +8Fsz錠3J!K*1Fȫa< 6 <O00hϴ<ӟӃJ~s>]`,She$wcpBnl'>YD},xPGߓ{g' & AZIf噜WbL#8o(Gg9E8{#𴷐E<|r^p#S})Xr)w&@}#I8?μ W2A#JDP~ˍrHg=e<47wN@In+^w G8l5X]8P+UŸ"DzeCIcD֬!KKK  Dk#` |/d*;t_pP-"\%Y1`h#+\ĬgVb4>A-r`]R_q@enea OmirNZRK[kw:AuXG˯+&H 9oP2CC^S0;Ohāi Ӱ'ppUwpݷp3pg[9!Z'\?n<ڛH|P%X1.$7]y] dEsnJ"7{Yfl;;8tw|O YL: 30?l\O/b_u3y]APs bup.Y 10XyLl3JEpT4P^K/P<2}Matwq+O0{:j=Ei:G =~߄\IDzu;}nN,9o=< 4ƺH$+Y{:O:C଑x!1J J = +U2wRkRk9YEdk: @pzzHGeD?eT>/{%d2MsX^ߗk XTl5BV_KsZPن@, NU51%%=5,}MdQ)6$Gw;O[PShShShShULL )+$KYǀ3cȤfLo}UlaJt{I{ZipX er>9_ߕk Z^]~MPR  ttwHe 2mtcDKaغCL['G/6V`7'v~2dE>'ߢu7oP ,ja4ϽDqJqtŵ/d xjr_:dGxVL`l}8EqGd%={k@~ }RDUQD3$??SMhfW&]4;8=Q*:ιf(E5axoDeW9[X4KS(o0%D<*3\&{#Ʒuqp\nw~0]'kEZn/6~f+\sw=G7 >k{R36PӫxԛɄhZZ g"Hc7zuQg0Wkn0R˗_E;N:ҰO=Azכqȶ+ܻE$q4,&̈́v$QCԥ4 c>ttfS43ԩ3K{LZ#SF'VW'ޥz4Ye8Zd}jhƧcŬ5H8a }Al t8zyg+ϷSذUTVD6GD2a nP& Lq$q1j b'>Q yK/'U\Y2.nESبGԼ3E …ܹ ̬yT1fLZr~Bl؊w}$A>W=`XVxCtuK:6p'.PN:0+УwQl`xNS~]3d 52d0NHs@,ZgtW?NNb{A4 y2W0vnK!(JW1tpk8P+KA2P?gI%Ez(8ƚjM] q=g6 2r0 7nfnf44"ܤ.x9T!Bv{F@kG21zF rdl*Z8=ژ}iHCkiRK3&c=k_+8g_÷G]Aᘣ'Q+]ÑC?Ǖ*$Oc~d rvi5L?juS#7.7$)87JEfUm O"mCWhΰ s3)WC4٣_k9VgEs^F"㈏f֖V6fy<;3tc,M}rym:5f!d.@ H2 s#*.S[szvŖUUF軂my@;ǘ_Y%ݟYHEr<B <"Ҟclg01Lb!2hyH]Ct._㕯M1> fmڝ<\g&=u1FE| nurUnVc=i6eCzCxѹLB&'hP'c8r~0ȒèmjO?¿o("\#^#X#a^[j{Нq_d\|LZ/o;hrEifOLnt8HW?4Q>HÇx;:J ˒N{Ժ3uڭ,SdIcXz;8kxè ya_,[MV2tx:j짿m::*Q\M+gE-/t <b|{yZR{c[R@ٗT1H& j-i71e6`bl۾]_ w b)˪~3?r(daK` X0hybk<|B":)T )_w|,g]]s-T5hJ+fJIyٛNJ.RRM1-nq'* `e H -Xwsfvmxepioq gzn+@V)ZݷPv fl먕l$}K/"Ayh/ۨ ·ҬOr?4pv aض# ֠waOa[؝Cn`] 7k+ظ3Cm[3S t4cϣTk3dK:bG(4ȏ7o3ih6,cZ pxh-Y&bx '^6CW@^M WIEY$'_\@{0FaA-(4 Ҷ+@lP)ԊAo=Un[g*Yg\*tR7zvd[YE}4="5*yVa oyI3[e:a}<8B:~ ))) )!&Ae8۳E5'7h':;,ÒUZ=瞺Ǒ[yl\zcc-B3tD}w]~9;WT7cYn=Q?قif|L0UHg2`?BaQs%M@ֽJzS46IHw^5)8+D*m{xc'B%]k'9՟\EE?c<<~%hNK rӌ6 w 2̰W\9߆cY2WVX KcoG1_K/Q_qq*wiFĞ*xZfȺ˷}WP@G`z^wncjOh#*XF/:@| 5Zy2E^5Ⱥ!x]+Ps7ZBfQU30QlTgJix@-[ 7PڛGkkkGPX,I~VzfvδnzA/ܳoɸ;mvr@ U3U [-4- w1(jޠ `z~{9]xZZwd,ĭf.RN3414ҔMRfϒ&,REN$ 6) };Z1Ne=[-)hwku ,< N^:Nƛ-̿;藻G[CTU,I<)"5U2[ec5̵$͂Y_솼'L*GOз}gRMx9Z}3'vYL&501#ٻ"l%`L]`qW^'[}e q^fašxyE@vө@┪CFkN}@F45%9%U{PީbnjY_fiR:VLQ(, K7beaXVRjnleه:Ɇ* &<96DDEW[{=ߖ>.c%sتk{1=EWg|ءm^V 0)UŚPC diamSC^ *U=!~'FʣMCs_Zy"eub{k>zr 0Hcn"d_CU]_Erj@xK̓u|UC%xꙗ(fѻEMZiή^F.5t^3>W|ɼ9=4]|ͭ{ع'::n:::wcs(~ \1GA$!,!aaAƎ>nfwnbQr r2y^Ś16!>9}ꄑ6oM5k3<zeox?[ZO` xeJҩ/\9/{I7P'7u;YwO `8+lF[ =PbOo {whj3֍ن&"ϗ^zE@hA@@x{]I6 ΥN)-D+)!r_femWW_lį A&HLߥNe>Dݺ\g]ԜD^[?Ӄ7u'if>V]GQ.io_"^'ޝǩD oa@8G2^-__o/T(,S)eٔIⱠ3F~#=Z~nyQA:ÿ OnKEkOtMR;Etjr#'}leqxX`dSIc_lVz*|JzV6R6L6x6^?4:19J jѫ̓׻o7q׉.6 &ˍ L0M̬UcL @;_)uP *{M;WMnOln*Y\MPyw3)׳1VP~44n[8!\#'t9rGk$A=:ڗT3dKk/{uGm[\)KS欣75+OIWi B/bN'| 3IpՋ%b, t OZwHǕkmiL7Us/گ[E]Ю氫R.J\tzt6{}V3$K6ҭLM ͔] 5\4qu ldONCi v az`hK{'Հ_A l{ֽfE[e)0J !\!8CO8|quKwv oN(W&_bXY1Q302_6:" 'pz_)b4PWѰ4222qY)f|M4phӰcF;*BQ>>.Z6&z?\hxu&oX2X*0XbBbV"IbU ZFqfQrY\U]%Z,LՇL,%0[䰂ej1n>-`weްI9Uݑ]$])]ӺO9:ߢ> xg疭fK0B-)x!(oG2އyK/_'D@!OT<Ǹ;d> 9{[֪Yfwn\É]A. Kv튥9;aYuCCؿ{[Yj BRU[#M=$nv1Ÿ CzP펟Ҹ0 lPMnRvN'nY@.w`a0Q[ȤK|4;íL uF˶ &R_R ͩg[ 7<٠R0hd ـFѓL#EÓ@ڳϳcњ`2)\I8am9 =%1I*U,cbA߰sӒk;?E+ivK dC0T6^MH|n'NrPY<;%Μ.ni}hÞ׫;(Y[&*@ n O<=a9EM3}=Ӝ뢹NJٳtr2I)eBL?FᙿcqjQ:࿙P^,cjʥg&iXN`))>/}|m.YN5 )."2"6?Y3_jx~^NVV7,EMӃS%^ZuU1PK.m9OmDbl(WmOl5߃|#Wulln n*-HxSh<|]ᖰl%,KE ;g`jph?a d gp  w@ٻT6We3vn/<b4 V`~ݡ ]`}<"L=>A@@GZCcݦ5J*W}z`p(jSSoT;*D b~x}p5 xW%3ʙFB g@pPBW`șXu{D#[Gg\7OvRLalAs.aC/_baR@dNA#.AF[28lQ6gT,g3Qׅ~ Z F|"ϗ^zEDނtׄzMQ%"Qk88 mO{4SzIZpvk{xG8e%6/ w ;0p{pu (?S9/H֚fDU5Zy8ul]/հXvy JFx$yO)<=} #] LBEUKB<>f>3ś<qxrug>ej`"&MX @Z1{ >exЙz6= R$*[O]& &r!衴`iUɖǘ:B?I?O]}~nTlR"sw*̮I'!@;"O*S`ˠ@ WO{ ]ms^?=F9GiYEEY~ wsHak]8c m4C|%}9])m:Dma&҇xK[WH׮'ԅ0 qCgتѻ}L}v?I,V69|5\|V<`)MXC*,(t7V}dRdkf}VHl]lF)Od'760?ܢb 9 Cs \5]B=V"?sv@7@Ac ]7bOG7 5[)FmvP,vfB{DSj% 8~ǽ" C AgI~RDkĕ2~#nG ^4Щ B0] 4?"\K/RX&rl8\dQe LiYhMy E ^ƫ;K#-Ef٣bͻdoۑ_"4UJ"#$1([DQ_7o`^4lmRUib?4Ĝ:\1(U}:s&F5NFw-T-m0Q0"2jdMjǡkOv9% [ḨkZQ-"]id<ɵN\`ũ9|H;:iH LDʻ mcĞ ['UJBZ͌I|h-H&8;{x69;ٯn1 t "rٝ>nG9@>ǀ9“ LkV41>K?3<~;vqD{W}]/5 3p خGKB-FIA6Qy o`]!J0T90{?3_re!Ffvn~֐aF1:IjYy\E4exU9Jn~J4aN!_ą>D&ъeHZeHMUӻ >S8XZ"n9Oh-"&TL\KT & `^4Vo ϓŵd*Ɖ.ΖMu%͌)T.K書z{??Ev@Bʹ|ۼ29 zP';X"YQ% R%S,U#S*]!/Y&aVlUh^Q㇍DD{P68R lAmD-caNp_YT2D7|OۗTbJ;i!6y|7+hHɧwYG'@2_P)qM(VM5wR͵{k{qfm珱OR%|׍c,t^&\`3.1 W(/'hF> ZPeh"&Yb6^Ӏ?yz>@mn.Qѻf\;/}ʏ尭}-6%9΢N5.ɦáZ#О[C(j%e,j,B I0Fx'y@e i_K/PDH2ׄ6E}~ۑs.dHQA qoenli` \h;?=Cʞ`+jpw8 ~ߺ8ܻ8>:;=;Y칩pYEOI(kUC{=<@_K8~Nu;mmډ,p)Q SӐ O?>?e?*<9>epuKƹy5q]THעA8 DqP(&*Kih잺瑵{ahs{táy *͐uu(ūz!܋U=h5LcͤQklN8r yF7C8)7P;8H%2Z1VO>Qwt`9$қ+88{x{x;TAJjA$-.pi8Kü'o1QJvA{@0p ?C9b^"]!A ñ+CBnbo-oae`{{ Vtg |$?EAon䮑X\#"C`7`YT(F[.@[ ECDABv+,y{׹s:ױœRdz6ˏ\>Dq( 3 =z4~=Q `.?dBj>ҀEoLwo`0g:m ػq58{Le#U.sJ[)̡i.ifF AE*G*MC`$ ܇tp](X|6쥥"{e3c6RN 28/9* .i070WS+{ A @bFz@SuwO wc7xXquiNp0000pPw$?H-֋7P;8@ ΨU9 ~1 sTħIHvNH_֔11&aG|E)<^7QI¯SGωK>5V)E'4."rh^zץڭ\Xx8Fhqv?b_mW7rt˦1AP~cϜ4,S{cyra=`1O3;Y6JFW]IGV=#}֝Muu?k_W rݓԾD)QQգ 7gi/MHD<ڂn:`4Xvr`$Xf+f.)-lfT'F!hzAPNߌm/R݌]ªCqx~|B>$ -`?U0gO纽ۊV}@d[z$nl2<&z$:=.0ߚ|/cH`7Mg)fKg릫#I]Aq8sXiPHi>ebsMͷ<9LuTCh /O/p}e⪭K ";q>&Xna z!_E0[DnXPŷ@͠@ذd tbZ1(=]{$Qtl0iίMn|!+w61E**Z4-'KE/_d njӹ7'BMOY6 C P10HX2LZB8L2TyƱB!J_ W<N rܾz*s֏c]gyā/|饗^(OA)/QeIFJ6:uLeDyhi0pP6 Im #Ts-3Z I2k:Za>6 N=Mu#!;[Z8e۫g3 5F9m{i/i!.]N&adž]T5 0o!xwNmCA|wO>r8QM/蜧u[u֩vp&ڻK+ M~DW4lTC_5ckd$j?h*LI ׋W})hM3dk_aelh)UG51+1(}KNtAhO2Z w a-p#$5fbcc ݓ" r+& 8̸;L{h֧$wxlOg3  }of>/e]"S~(9$06\(/vBl;Kg4ơeS!'mi)RCu%M]֩CDm{Q?&"zڸ; 2l<"ubxHH3 79ޜS+ Jv>ڃ8Qb{ UtndbN Q/>n@%L=tucwl cjpx|_Eޱ=&Zڜ=Cu Gi@~Dl@ ec/v8FmFPfz;Ţ(c-ZӆT EZ@T R:nF߻;3̞=3߮u'⺟%uL% WسD?'=Jep5M27.c0qڷ2鎚KBܫDj;+Lb@S_{%(z'rC y:B ·_uW%Y,0ݵj,-|EbPS(Q} E*M5iD[8: ٍrZ}H$0Ok[r@Ѓ7f9j1iMG]9m[{>D$Qѷ埫:ޏcUޣVk/PeY'czE-wua,!⇝&ܙ դop =L~A&=2"K`Tgv|$1ɄZ aށ6?y)-v^ OW5 dlŸN؅z6= ;!E"DE},tI2Zg |%UL}m2}\DSOG/=4v͵w\t\t\u]^pR? ?s.~+4p<3,b:iiAôl Q,mmԞm=$ xLstF~qiNj8#ÇCUΊ\pe ԠbvbL`]=J:1htF&-Q3w0/\>F";A&>@!A=ϓom`*#l *- /n[]ݘե5$ YO"I5!3G_|KU$v8Q0^Nڎ݇=#}}}YQƑOhnSLЭf_YÝY'޼ܵ}~9MI55ͩU[r @+a ֐֍u-!( S0[up{q*^d]"mf3 o0*i7KynyvcИhؕ.-T]4}\+k57=f2v4oU``c6cc 8FyH*f5`:4}jҐBFtpZGH.eF{ 6TY:Z18r{cE3R RB=P+T* Az." XDh@6'hևgvw1lQ펐NQdm--_8rQltb$;I{>/N\ϑ C<#_d'CL?=9 T9TLIvNؿDH*R&^~"j&V/عy Z9m_N'Gd{έ`- ͠YDSYpCGG=9PjPfc7`ČcvVM$,="Λ7ИeCyG4Ox9QqV:  +S8q"D*Fvj!"9כ'Ktq]|_$bRk(n_[Q=Ѱ~xNs[?\r Vi*݊݁r8d\@^E`{D2śU!a3nn2b'[XN?J?GU8xkHݢB"AbWltdqr*T%}}*cz' e Up_vδ/D"'^*#ϮV<$8 w?Dzx8v_`vk-_(;o}>TU ӛ(|[8yqH:_Gޜc{̰+ub (VBS@*3LtN݉䮽vMw}Qj.*f)n!g ;s#k=8a:vחdoAu9̷ Ч=sz{7+?ϐ͖9daCJZݾr )ƀ@o!$Svl|np}gla5g^$bYeZ_E':IR)%-dR0ߜf⫼ Qb~É!d}wOsEN3NR?iyZZxhNi/0p(Rв $! gd!"9#`,v񝧮6Kȕ Om/gofkZ;H}npQv+VV[FvJɨ;65U\m<39w 9ܽkuW殠=G~1;!Iofjd(mVK;L9羀eg@2~5Sk};kk=ZNߊIKxQ Sidt&\4nޥ3oke"mbw|M$% z{ŽIS6 xY@L4 $x Gɰ@vgMU}^W좕{sQ3JnwR\@0fxxd|ƲټM+[&_.1dNy!|L(hXT&bYT-ҘTvl000y͓k  PoaJT`˽(:>wMFR)Tѣ:k, ܽ0!&gm\(+C8)ui5U}N> OK%l\&V˝{HskWsDf5l|'Kq,bc^۳S۫T;Q_Om q1v**vG6J!O4c!6uc(c9-.\uipSUV",pn , =_EFrCR[Gi_?E!դz\,kUf5vfPԩ穦֢,n}Wypm3e)̫m l Sw.j>>ݭ)q3rЂ|Jc&^qhhO=bv^H8|,ei拘%i^Uoݲ ­4s%cNڮ`dq^=~^hn""i[`p~_>'>sz34[M#0 wp,aڣVR е02k07;ux jB*7Pi䣓yG圇ewDw>ož oQ,tVRaZMv i#;B68D69@68BzhB@IoZokܱ)()ʐXIPq90q87vPY _H7]x{v:rfMĩLȚא}YR'v7)O=5g.#B<<VF=oEpW*vQ;x4Fm\OS%&'hLzޜ$3e=i鳤qFӴA!)BȵôF*8(1W5cC{PKIg&f"X1c6GNq>ŋax:LR/J< GQh[VwcN歶3?|v NJ/'lbinmb"@l̓mj!.)Y⭬B4\<$My&(0~E߉rȁ\Yaʁ>¾Czvfʫz|ddOTŋD 1ZЈHx۹CMFllLlLͬ-\ucV,Zi.ZOpsjw.G&۶js1B9ҟ&JFʟ?n d $CE#&"!a%V!8|rxfewHh3٫FilsJN嘅ɇ)c)CI唞'\}uW+Sxl $$S(__eS K{Xz46۷.ʑHv0H{^'$ La|WLIy`@,s.C)B޹w+DSUdyCi,c nr<>D~sdsb{fwawcnr:iv׊n7梜Ŧ(4@}úwkW izXz8*KD,{)𵁾뵆:+A  yi\K8h'kLmdgg.hdhaRlAy e7{yEթv|F,ί _e=yQ#n>)Šye ]M9ځNJB"'Y2Qj!I,b(m :Y}^Ꝧ2hד}E 6+v#3Ɏ`9O,^;V綫s"ᱫelX:`MOׅ=l>ưscS= sӘg<̼ <}c}bv {Fq3Lg{޻l!AijχI-HMGp Wᄌ߅>IqfZF_WWl׌׷]o*ݖr|V?|S#|N'sQIJͻ,ŏ>uL&&&M[J~^;^zj(C~;:zcNd0O7.N['X"^!_g[ kt4ww\5>Z^ڻ½tt=oz赻鍻i5گl`"ai"`?2ɲEd߶D9;y}ԩgH⫁nqy P2CH%CBj .?vz?&52hӬǤvĠtzpyt_jYj|54=>}_B);P4-EbーWտM^zf\<*]鈍ٜšӡ^댅< nF&]= {6rۢQbrꠧƔ=7ՃrG'P*O[*o% X2?m.}[8+'Fz:{zHGfq_aQk_s2^2265p뒋?re?[}BN)*9&ޭQ *+x أ LETLw# vr'mp I 6@D *nkՋ@@SRѭw}N/݅Nqx%u 3xlqmخcm9#;#{`F.5~Z5 <|_WzdE2n72QN&ʼU:?~5j=' vYƾFVZVVO-i[(ZYyX.&n?/)kO+xh,Z*=a i%0sdy4W mF V>>y)||T]_y==F<1>,Zttli }tmݟY'޶&1G16l!.(5rRH?UT)tMn!0ld+ˎLOr=n@m~jɚ;NazӮKFvƐδנ1Hm!+X0<{ms\töAdeAyʖ!6jN~5}}#ubޥxG{ (lxUvZ߮IV+/N fO/8gQH@|]{Npݱ߱D!Q3J!0\)*X-_9#H!7UaxI˼hx_zZ-ͭ-Mlu{xu~Dp?|v؅^:FraNsn_-#D'!Epʳ}c7v\"v;/G0q5Ty'(ID__3]׼רkC+[Oe[׷6v6ֶ:^JÕ,MX Y9<ڬPפx㛰yG4Otyp~P.{+@},'A P DM=hxcpZ >OَP(`=F5F/$A%\ulu\KWcjN͡Hss|޷O&smMjn{»K0UMv 0<@kl(lZIhN\ì'"{\}y#F˸&Xhf.Y ss-J,zC'$3Vжзo_o_g^RvɡChSl\=pIt'V+y YŤ9ByByByvï~ Ycm q"ϟ%l` d9üt:]tfux'/LP)˰ׅ oFQ*^vNmGjYJAf>-_*Jr/9k) 䮬bn'6yJJJ`ccKHH ?x 7cJ-_Z dXj[s*z+C!WHGlZ^4h0I/ ΑФw1M507Q^HAM:verak^ˣ(C7Cj59ojDvM^k\b)<>bbh0_4,M;%Uaxnr]鐸*_]֟[i0 CB˾bV)$^0LmGoIsK B3m!zD}g '.N͜2FACyP-U`+:%/&{˗Bi:Y++z2f,gql}a9m%o$H;cm.3վ_$V TOᷙ;@j(G'u\(c`s{XT;2mS Z}OU4׵]9NWκ߁޳ x8O1Dwq$2Fh'i7'g+612;,̟>swn[ YO")h-Ua{pֽ:>q|lM =4c$S@j0A}PG2kiN;./_?S3ݏS0;nJg>,nfz9mգ싥s%Li: e"Y1c=ܹ @0BiW)P7㪵h4reAR 'C]ZW!+5=hO+5%YTw],>Lt^tetTeeme=GO dFU?@k< MBֹryކ5NrN}2\5Ds2W> %KhO{Iw&=-My(^A!VwrT֐;/]33 /dˉ[@u̟Wk-z,*iI+O9Y.fJ*b]bVz2}R~$4 VNv.X,}U\ϟV"%EIX捔(bj2pf#}vjBLOR>fDL]uoY\ *&n\84>]-cgkf(9S"~EƳqC(=4c="ޮ::t1Xabgom^T7=/v5piۀ/}ړ*C^G 1}j"@M>G@Hm $=GI&Ɖf&骺؋j3 b28]Ji5KO_{UT7o;,';e$sFMFHT&/\D;`wd)>OO_w^"qZ~}rq͹:d uZK<6`pJ$ /Tc`fWg&͏/̬]c$s4<ϻ?:Y;Gdk!WTL2D=Au6O<[IEEc?$$WW s17>J؛6m3ܱW8yp > t<}z"~B9m'O@9U*[_ss[mUrf&KM؉f^AjG}&rbܝRy/ǢT,c+4.~unNޤL{7%:9u~^dZ޵H&H(Vj g(oƚ@}qC(T#s @E=C5JAm#GHSIR*.R)lmgGxƫda+n}SJ{; PܵtU*pYPS_)i1o/4fY2bL6K{!3ϝ<~ 2r9N2z'5ԫ?T\ ++a)XqDu\n|`Qiׇ+DR1_w -bF'x@ߖK1?{ xepTqq/H Hsn4AǎYMJ@D6@g:"t* [WWQ:ͪ>Z/^Xqܠ%#] ZA@7]b(1t=9D%lT,_Uz 6\zabjJUӼm {,ֆGSSwgedljҮdQ;ZY/FZ>N:~<8yg9v 2),>|/$]|])cOxvb]qʋZG@7$ic.S}; q5;%>wxS<9U mI彽 Cԧ} %suUP7aWbn;좨k0O@Z ~ ?L <\{6 Ctfu@9T|o2O0aK:_Ta 6 ofpޭ#[w'nA!ȢȷbEn4]&%dk̕ 3k7V ˧Ћv~/qy1OCbYyښN֒7>P]^B@BVE?N)J!amk\Ó4$xd"zFھr>YB\M߆=/Ɨ4b.KKa=U~煜3S8S犦K +.7\>:^Z_$!|/AM:[knVڥ̫y2O44EEEȃ@jMV6@ s}jij\+aD7VEvֵ>ن(1!" S^#mzy̔I4a^:@X:#ufxv>~T!+ =^:(FQ#E!ĖLr[A雷K;J@2!PRTCmH^ .@ :dCcګuLַkaboS!81tW4'@6P0EO7M0v}ۣx '26o={tce-Kp;J;r{Wjz dګ^982M˷Y(b \+:ۏ>1s~ix{+\zTZ0fJ)˙Y0RA.x}Uk8j:U"e(}4Sb)\P$n/͏@PlY w'.Oaw`n:#!Ldr rG;N?w o'BM8+]ı_~Y%|cϾw c}ez>"~;/Tl!H"@qP&zr x}B:ۻN19̺Z/x˷\B5vW };~+B<"b^hΕ>WduIÖC_5N> /=s& 04R j>F֙Uܝ !++3;`$!D}YXl×hқn.WCشy /y 'lyN <)))~SQQ'!!0000F`󄁁ejjjH]]ZZZ0000:a󄁁b%%%ya9 l000yV[|) ##CEE G@II SDGGNBBbiiMOO__?}~~~<<+}Cw)C[Glukffj~bks&n#:^[ߋ߷m9,w,lp <3$ˍ۞| #gGg,%_&kꐙF/?V?A!!D˜ߐvhjjC#~y>ױeh*=M݈ٞo9<,uh]Ef$Xj(zflw7O...go?prrR FFF _100[@TZZ^uu5W>4>>.fXUQQ'BH"NXj~~y\lkkCBdZ}^^oL}srzq`!'{|xbht`oo8s>r?VtGӵD=bԜ{7KwVJM25ϙ)򭞏m]i]^^g<&[@3cw &d.h*g'yG6ުZ?jTW"jjj022O*N|8kQ---I _UĤUmCī$8jrr? K Be'W"\J*B=\?E GGϟ?S~8gBt}GX\b[5n'B;'$333?떼/8477#r---He4C_X߆ϿxW\Ȟ񸎾Oݣ~nM}m֕~%I$ _"^Eۡ,,,\/d;QPP011_W^6Mx,FFF7'B;9!-=dyc7L&@'lp <hg]rQ%̞v kii9X[[y5w₣Pqy5B;kw|"B\s/T/?@y"reddά^Z>~J?uDȕK_ڛ 9O{eϳ[u:GeDK$MP0  7QI4A.^˸ ( Ý $.u@`d*`\Egkh3"og ~:a1>RPQYK&yv}w劶7|Ze 'w^I=1$O<'L47ERDDDoFY?Ebv-0QSs&y>t<+'xAq~?$ <I'y"4ϊKvS3,f$파xbnHxKsGԔGGϘ4_>OLd{MMMKuy<ڣAR;$P뾡oA*ʊ $<]@RoI߱޿{`0Y4ez}NZx_KvIz_;;u氼< ӧyVwh֯riq~T [sPy%%%G>;m/NOHt4=Nv9{/aE󖱕X> 9i'2ePJz2ɖ%OQ0tE]v/Xj'LU I8I> ˎ..D㌚GCbӾ/j3J9[k{}I/=$K^-7=N圕v<3OwykYߗ 񸚃|p#iD=['y"4ϔ%+H;K/ػ/00휝b߻U}dM1OZnjoo/**=,gnHLyν|Mbb"ۯ_NRA>϶0,,LZ*.ΆjINb*%LA9I<@=-*HȿRVzA7~ΪkP]zJF<7R6NnzTӕVWI&A_Jmgȭm_sRM-<H;a@ `c:Oc/M2eʲef;Ϟ[^ݣ(/ҰӐc\?FIڹ.50رf=;dS'y"31sAf!֦wJ N)ɱɸ#YsI"I!LNNf)@3|u +KפaRjkkg)&&z؊jlz'N}$Fs<3"F t,Ȯo"|.^>U^@fH<29w܄[~a0q";@'_<%c飖U/im?0bbccY-6 P֔-ӛΗTO͓$z\?`<@<ܱvytW;`%y=y^,O[sa8ɅoNRkL0C-} o,' OPZ|L$rx_%n:ok^ j}tяSUgfM9{sninZeޯ<-MԳ@(~n˜J2ONߜ v'zg Ϣy[\'ۦ NvG#4OEm[TP2oN"فdکT=WT R\9j=9mx:<02|At[. EW*"JCK kT9 +GQlJU9 T> J޻z?~uvYͳZ͂XƠԕ; S.>Ǚyg= J #alN'ic֝aޝ_;St$kvp='\.Id.g*ƒ@rԊWf,3Z)_iK #y6^ +I>Sy%9y%UW O<'NH晔ȺZtJuv7koWݮ( y2s=MVn[f({6=_Y] 0Ov ]i;uīފv '\.wq']W,9k"drjEEE4K?/bP ˇ=O y/8tKg>8Å2s;aѶvx,=OX5<0Oxyiy yx* O '< xSrы0O`'' 3Ͼ|!<=xp4T Q)( t3 ՒIXN$QsxNT %9iEfs endstream endobj 780 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 804 /Filter /FlateDecode >> stream x1 o@DB:s,ૹ? O$~ }g?d`9 endstream endobj 774 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 781 0 R /Length 427552 /Filter /FlateDecode >> stream xT]CT@TDAr9`@Q$(QQɢ%#sfm{pw9UOUOT?St8/|'ո9S%ae~R_-uv( N %îmO 6.~nV}NjCiU!gIIw =O;8hKi__9R6fʾʡ3Jw7ƺ\_ %4puX䯯v3|qf<7E@@@1獿L[8&><5i__ SIvr0{ou# M3^xfؿw?HIT{@jN_W\ˁw@ &P056~.krl~0޹`6^_6UG@@6.:ZI8?z3 97~5uaS@Y»~Zm9T諲<_ldMas|NI v3ZZZk%7UG@@Ln;X<=Ŭ.uen,^OZ`0ۓ\?ZWM1/C)8s4w7Zs~ Y_Y^|gy,59Hr@N'ʇ:x4puXjjL_z|Llz[`#k:KnPtr , *^CYIk%7UG@@<]X*Kx9 V֥H(yi^N'*ӿes ݦ./kc(0F+_w{c: 3]_ize>tB@`*)-OWE~f"35j:_]sMϭ\7333 EKBZ;3% U^bNAա# }}kux5la? KSCk.gy{yJp3{4da1Rp/ fƒK(L,ݖo# Xm_^wS|-I &Ϟoy6*/OcX{%lGx&&gݺ )Brif%zhSu֦]]kwTHVo\]]"[$W]ޯ_Ή{p:"O^e29=-gwLZkJaM[_kno,). ~Cr,ol ៃ<$ό|1[ xצpuX?=jٴ5kgMF<߳ '#&HvwNEkַntwwÅ7UG@@r}oJlVWWgGܾ<{rg7O'`ûpKJ}jZ OȑA 89"XE_m}{RpݸS#%>llno*=)xm\Y^o5ג8|(8Xw@xx;w›# M0k{Sm]ws{+!o=>Wu7NMk|_txK!U*=㭄\u{{a)TyG?J)g~KE7]@C {ou7The~s_߀/Q99X(hL̵i__ E_3V]ɍL,{[ٳRѽ36~zPۛONa/<12'XU Ny" q'[C7W $@?)= !8O$@, eMy" $@<<XNo2D'H y?[^wz7D'<@ $WNy"?y P2''ĉddd2@ $im'<osPCuR\c: 4v5QbY*|2ɑjHmEoLIHB_ eQJ*xJF8>ĉ+A)EAPC(kʠi P W4:JDG^GVŧX @4h@_1 v !wPb:*E*''O"U|ch>40zzLM .gYLGR~yODdh)bY^E\fU@(ЀPh|2 4\|XAsD })hG1 d$( `ʗهhdh@AmCR%eۋ愻D}|V BEV%=*\,x4h>^ YQq9u\!5BI2yix@}PhIRxxelU@)SKR[&*NĭpIщpeQ7_ިlwImQQSP!Uٽ_uؗ,*D_F/GGce@ 'jJɓKRhBG}{O0`.xJJ|E@eP` ZZZ ÿfSʣ5[>oj N(+)|niCJJ KqqrGYUe%8ڊ8_qpD.]^&Fސ1?z ~N1 ]<_({_Vp\ϤH?SU23d<Ɗm%dv~K۶F$o5K5A"(\oA*?h.3uQÎ/=nVK(?.y)frK;!a|qvpom$F)/?&?>R6lwUzmܱ* dx,9pitN끧UUjkhȚ';)'.17U~۸~/$D2H.>+F.'A}R"DS_-eKaۻhg}\f)/\_]Ϝ ,3|&iՇ'U_H 3$|&6?9Ztt@9OOxxXL]]x3d#]={Z-XǾ/d˭`p(3í5,UG+|`_*<^()+k((,*r=;a_jwy4ǝ{)?l9#:{u^.J!r)[K(;,3rSBt$e>jtrs~D%H)@XLu9bxwe|S-B*;=gi@BRX6[wڽM6X5R;d\-!Ym:V6pj- 9Gғ9a{xΚ8ZD.I0͑7%th_p.{Oo3eB71*^VO:FC3({,ֶbx`vgFOG* EF2F_M;[1 Ҷ}sL2{`xHBeɥ:\ǃM"[&qyV7KrT #W83+.%oh3)JL ;07g[ B ;HSVID'`[j7FFxxŝ"E:%}s]jM#}Wsv(b$LcT{tx.EpqhV|-'>2Dvߝ4O)2Hj'H'Gfr4,)UFs>~MkYmލ.潐6 3wzx㭃MI_x2ʄ>&XjɺCًBɫOyOʲrW!aQ5£t/޶rpYt+4[YUR -{޷`LodNe-x)m|QEq]e>w)N$lνx}~]a{ѐ)K~+7`uS҅+2QZَn7=Z=}B߭um'JTem@3J=\_ŗ'2U!"'A @ 6] ͼnE=Bnz:st땋./ߋKG.KiЭ O1c|KIg w|xET|ZOƙ_"9Yg(rv8L5sV͖[;_< ]&%U:^m"Fq%h.sGͮڞm9J$gԗʥv!J6| 7\UE=eL=Gb. Yv˙&,zܬ+׽LΛZ-[ . cN@kYO*ЅOOY͏԰|z5O%z];,#jEJhi9\K5XYY*ג3bqm5KW.\ od\#Z-`#:Yk]Wøtn;}QC]7w_1Z_*5v7mZ9{M^ >j-=2гnך8vI=]mMFja^+Dk<< v Rt7/Z}D?En:C~7^e Q'e*x?N2-e@ 谴"=&YFW{.Y6e۝nBAN/M_bSfd q?5zGDRx\JGlЩ lj}͜.tIt88P:`NXh▔Iʷ{s39 agec>u^DcF bӢT3| P8Z7.%L]ٲkG0 ΥU> [=+]P#k7 0IQĶΩQ+Λ*z3iơ~zޫ׍bI'h/z 8a֡[.UۓK"+[Xx:V_%)[^uΦMF}>zSgW4}Ly%nl3ҡƷNNΐ͐{Onu0qix |EԃUeE§EE,9Xܝ3<|٨SO/T^,_===UWcZw'w˹[izr<巉:Ƴ^s XK$61y50_"[wA}B{Ļe(уGOߜ+;ĮUMys!9{>-I9[Ps(+Z~,Ad-|SW-ME ¤EtǪ1RSIHfoN~,͢/l{ V"{9{?(,H,}ÝP|(u Ïy'zB~7՛˦~KwW]W-6¥IANn~lܯ%.\79[ ɞ-㌗} R5$_qԸvxˋ Yˀ"P}yo|rٚp eL'V\}| 6T0yv- b^u{fI k-'lu uေJx%3ے\RGKZT)˫^6"ˤ2Ǐ],<|7JzHW2DMpumtM7wQSSWLHCC6@t4Qa_y}X_ܽ?V;e̹2RM]Y/9ib摞"V9JSxBD}d,~v&F-`_})Fx>XO)sR1½ X+v SvRjm2A4Kx)į淼BnSJGN@KBBMɛsZHt,)Xdګ#wwy"%egK鋄DmsSFvQ-Y-X4toii>Qs2l YٵgItR۪y LubQ8|-5 MrfL$M=dv~wh &rXE g^E`k,łP܅ .A!p!pw |e٭a;UǙw{//k=|2W!K&KUhz`fQW3I˲);,G,sgiGr{;Ť^ZuWB͖\]MCFHwk8)>g:/<&BX*w%z0sw֜A.͗ݼWf 2+bM[X:/~̕oLmKJ/wyĖuotC-N /J{w㤅ِ{nkZ/̵oX˩dH`Dez l*(F3hx*g8Pцu e2`9HNQT>Oӭxxc|Lh G_:{_h3A\Qsi歀[hhSoQl& ݱZ}A!reVUm<@(ġ|mjB:ASz}z^QpJ`>SI5J׳WTXeP{>؍Y۬8JapǛ|aMOXi8Fz(&z\0NfkCArtwŦ0&SHv-q׵drvRYSyD d ~ަ?[ӝ'!y8E>x{PkcXaFB.y\vA5kyt#q9i\ RK)+O.bLљ!|{Q8elE?>X`g2ϫeN'G}{bH?XKU2NRk>lq^? scr`Zw!IWXH)V!V;or BZ-(^ cS8S*ZAc@˱GjVH۔Ί:YT%FejPv[aW.ݒlGmLu1 6ciceVϞ݄serlc;5 _)ol7ex^&D]xs$ ̣;K NB$gfRn4ڢK(9ܣXa{ tATk\R|l+T4b|ه KijI-ZQg{ H|<,Qkn< Mlj\[tSlfa,c{_~0‡iu ;[0j]mm-dguO11X$03%3}vs$$*9F<(6DSamL(-Qo^Z$u4b-%c^a@ \Mysw =כ,wT[9#n=ODoG':k;}RJc+~}ZOxqsq>{FkڳgNZ0cC}lnXe9|8<MRRҟ{GKKAW[pOG˟rVu8w5 w0 kֵxp9hXLꕭ]J–კ-+Nx\#pɶvbnJfF:6cU^"0 Np&:@&71Wm 5sbşgq2m3HC'S%7o8[,XX/8iWB[07[''!A<"n+ ,7kuwq_uщg܌TygJd+\0F.^'Uh6g6e' ٳڻz[::Q1W2g8rJT|t;l,,,SkL:='*ɯ&`%D߲ecp(&VirfJ%yO s<)?Urv6z+1md_+w4ܹf6V0qEYi9ݗJ9!J0lccG)G^M*@]F]-mǩ[D}XAa@~14ŘyB B=2Χֽ+g1튷S.؈)-GT8m W"/3 ax΋%?@w X]6Ë}ٔ*fTkxiөhk<G.s8 u|gXL~z£_N$ʍ$%*t$*6%JK(8\yqu79:~i8Cy,oxfArKd"QM+iY8%?yB8NnR;Cu"sY208+ʴZ{O}Q%_lLJ>X߈_ " [HQ=Nۙ߷'VΏOB ]vjCabi)lSz-Lf6drOѷ윕5OWs̥Pgȶ][' n.ᚬMo;=KsRNYд WA<cԣɷTVIjM_V >eHӖ^3ޢif]z#&ܔ6OϑO{@>^=B\=F0\;#B9`go}-$ɟUoST!{lRwd^(&7vQƷ\SNEN:73:yVSQQ0וf+Fr2kK׮^MkwJ?ë ~'b'̪*ZA'_yU}4U}MɎ=RǤXu/Z'SNpSmZ[TȞ>/0+Uo&kbc}xR(%`^XȚ^ l8ғIUY/攝NCHVCTeR96AུU${Æ!s/-]p?Cmz~W-NqUS)tē 'ae'-t¹JɋTתW1+> Y2(KJ8 =:PXy)>_|`vw]v3G͡0/g(Jh{O, l&[Ҋap܎y%,}:XecxbU-Y֙ U=8[skkZ7ɭ|@ 8t NAPt!pr .x0"ֺ%_jt9Y٬yE+]+ۆW&V ?(vҔ6Ŕ] dcy I,Iq;i(Fn9~:[~U/<`ɾDs!61=d{ǂ?L3:Ego. T1 G=6ri7p'\&|^a΅DLj }n-$ڳU|eK s$sDH2gvWtm(<%;~%#jv'O yX˓ S C]ms-MCʓ/U?zy⫭,ـ 8{ M/3Մ<7*ޞXیWk>/5@HAPj`}\:c.yEش3ܾP<fܞ+qꉄ] xxb++VqVq|1,'*]<_v y t,n$}Y M.^\22cljk<ax#eNJ^`MIg#}zQ%K.,dT_&ț#j$a/^ s_1MJBRZg?y”()oݺ˳t=EK^_*kwJ5yQ><< JOe?H0[ޫ9$.^`Q4s%iu^B7,F4(ŭjeŻ0O|ntZGm?3z}s戽qnmf3reK3S5J|@o 8H1:9gz}]+B!dC~v30^Ur5tmi(XyhgGyށ4O)v{xn[vY+:>HX]Kr߭c \Y,BF- 7phvP+#&)&<ĵаWv0)6 -,p=엵G9vX :͖Q=eO{v)6ΎozY^ 1=.T5ܳ3[wJdVcҁ5B5ĘXϓ]!UtqOf)s=/:e12V4s7Eܹx njk.qX*_fJ= > M>j>l [ͻ-Y^x i<4S=6/@AJu3*I궟h68X~k[{&zP:}W[,pσ` Hc]+ӍLl3'Z T=o~odםþuJɪ$22WT) %Л όaw%[V@ `;]peG\ 93JmL$H]$Nەy1wлC$kF 8FjӾ'<<]]?n*y#S/8eq&TJ/6sgnw99g#of95r L>Xt0ڹ\T1MUR nizNի^/.T`ߺǿY1ďp,pz%pb.%;%P^ W_HѨxlE8O)0}a]SJ]t6g.Z=$;^1y[k/) hI"ǣz%\AMU+nV"V*ˍgK='.;/[| jNF~ ;;,\ )pgطZ|rb~꣧iP ϠDgf(,w{5xRɗZm}~fQ)H ?'XM'o:>V]⭄s xH>.]65s2|eeu+t] ;%z"1()v \E\Uj;UXܣEzh: 'V C1:Xt$ywҭ28X+}~&ӭ:5Ԇq'ܗe` _< ET_ 9”E#))y !iRo%3Er$-3d}_+HQ-J0 輔6&U,`SHtdP 8;/t 4)2l> ź$"wB9""Y9µD^y)y+J\\3g5]6!q9hQ|Q :fjWg._£s3d ] ۶؞Hew j"iy^ٹJ:a&SwMU]Fda23(qr^ X&>;۸C箂yʅ&^U\tyП5hz~V'7X3NЏAuT3ͻmZv;wpwW]ɬv^ڣ۹GR9Os@lGC~zjׅ~ƫͬVU-qa{'E_{b|)[}ȉOOd?d0}ޥݹB!K-IiBQBOb"n(Q};>1 %kDF+{!$Y"PfwqLus;'>^UǀU^,%P:A_ɢQ%<фeaxtm(iڨhs Ψ=R?KB48])F(Y-g>;u{i wdfͤ6Q"\=yG/8S˜My܏n7@wn7.YPZml:iulصٿ|"o<G9ϝJ\_|59fC;Ʋ ,uO <N5N\_o鎏iTڋ~܇@Da]A/]'YݶCAłzֽPF Hb㋫Xg!_Dg;n6*7JX{)òV@B"6^j%bs1|H-d>N% B3҂͏7E)I )G j{/Jz[»a'wNJ{!Oe*ڡCuc9+zm7,:wwp_|޾6ŠixlӸēģ8(nYyp L , ` ;XV1\[J} ӁlOgP9XUe%"BBEBEEBE3 D DxrK/>?a5SflW2Z=Nxxװ*PeސPȄ+4W^^ Nh|<a'pR"UxQv]}8C%i;~&r5 J @ 0< O<*0=TbuvTK[; bo:#R?"b_J1[swĠ[SnSsG =ҋIۑO_n{o;xJ2_b2V> ̠W/@3=m@#|~P<`--- 5\zP$R)st|5W|+4O*=n-HܯL&j)Ld/)vz6޿96Ҧ{Ծ6r Qf9Z@ꤎ QVJ%^_.o%[5IβoM|I\=Z£܋vQ/H^eΈWF[ /Ų/9ϩR Mda(zK_l% m4AZ{Z1g:v \ mM5eum{ @&Kaϥ{oy"wh@1C)U km&g)dru Vh,X8QvJ޷+|_ԁD[B| ֗r}uI+8C:9[hX 'W}~N[AJ'Zcmc/vOWU fq̢Mi"on:BͿh 9 @0{ _4{R"Vy2v>|_n13 Q,o6 Zm坩 v7f~j ZB=}W!ٴ_"@̷ )"%_xO`|ۆ?Ij|B#]^9*;Q`ojlsnqIhs*MmyBJ?N[\W\SC<*>F)53:̇NJ6Os+L}wy`K-}i_V!+Dzu N%j|F <x%l|/>UU<=tsO`O_dX k\} \9 }+ sntnr5%(veʖHƗz ڴpa}`7K(n^)V5өEiVnLz*~β&Rl$;cWϐ;`'`h9*ecPb- M֗׿Cb%UFC"gg_"x[~!{$2oj\"YJk|A=K7ngw1\ӝ SηO|lk#,DNOcu|ce` 71N38>.y+PPP;XMTcۍ?'<5g|5/K«_Wo=WGw4O=DZFgwl/^ev^/zGQ?7 :Y뫘s['XƇ>+d1,D79`C_`2oVOs2ow) ҋa[8D M!}ouAॖScR;eQ+@N6vTLy<(Ea5GgxnHf`nS?!SO SgYS; !TJ> uêoGRCY$N˟\Ys@GC_~@\\@v3C%q"w*[Yyv ΟMfynA QފѮ*1j^ڞQդӨIHg57НGceN~ܑoM?-ڿ[V*Zxrw0}ELfS޼Ⱥ~ ~&I2eqQҲ%\=dk(g{x &i ìvtNĎ+m,q\v7y5? THϫvԋh6sslH2Q?o^% ) 0BN AyM~/?D*x}Mps.)! ZFv6&Qh ~cextp!s)%mw~ƺ>2Ea<{ N;2.Ex/_k+k%6eR?fH.0}{gyy!MϽI@FoABCTۃW5ӌ=((((( K CiSLiGƅbEYs:طm_=?C?\nv TK$[xj0̗'yNs$TBJ% EkV(tiVauVJ^G@ zTa @Hzg woͲ+/;ǶI DCΌ,nNsy'Z?`NO P ~>ɟ< }lo%Nj%ibR}Yjg)7 2!P3:t:A DBAVC@!iƒk'!k9>s>p۔_"_[|v]_#KLD r%T -%)Z <2:6{˴l\b ZDVQUxST "uڢQVƦRE S|t(^*D֫IL4,w {e,)&tXzRUEHN}}}}]Fuvn8[Br 0AH:LghLĊV}V=zm}wqMR_ _R? c~Q7\[MUc FXFdyu-=K@\%3ֆ~tY;fہR[ӓ˸;igy͉;?];]K_~9$ߝ[EgaQ&`:Wv1 03=?kSL/-!~!@3HcuI!^ nI#UC=m3j?u$I*n+?h: kX" rE ιv#422z,8  iؿ`4gC tVc mޛ/xX_7~ܑ$XtǞDlՅTQm;dmDGG܅FK0Gjo0> p"]aIo12ttװ13|uRm8-s,$Ay?>AP9E}{q|UBر3ѡvU}bH4ppW?" #r]uWG]fA{cluˌKϘ=@ gt#ڷ9vكjM~ˏA#*[myM#g.uty4pxzrwz5?<Ϙqrj?O?E@shz*Ʋvy}KDr>*QX>rmc|>!}~f{~'IlLv?;2 +deա<]e`ͦ,}cSଞo;(=o* 馤w[KEXWkdRXCۺ];~ٸCÎt I ڟ"cT<%U.xn\.I ǃWϡѓQ~ft$|KYJvw,ppXdL\B˒Wm G&HIZ˶&oa̡Hh"shs79 ]"_+L:F wCqs's[ڡm`}tutbkYJ* CP@^LS،J񱨋ayȫy+/hLQzq걩rsk;*+A\u,d-5b qxA,zms}|MbDei9Is)r *Hx\ k|~ 0Q+JicM=xerlbsfxur{Va`Gn@9@n0U@sJ}àآ>#j]0,D KFaaGơ&֓~uI aC,qiܹ_+[{U UwS5M%o!^azQ|х(}'H=IݧH'HGA_Rլj)8[[{oFHg0T"C4%^/*:BʹJ~SvB99)yPvpY$\|*4m\$ųܿ/t)6FW3%";~ :펲fFbj?A3laC$ABοE0HcR+#V=N=N3&Y8 P%6Gf)oIeck.Ís~}DbIatQyF?&ɳvthH<5rvCQ>ėnk.daǭL"ͳg0CX:N$\Z.o}REJW7YB뵌~w[dU c\-ta_sc\}̛D< P[M#iXySqHXQ+_hVi_gbMVPȕ)ίވ0! uc)4SSe/^|5W^y<K# HwïlƢ:&TG7J_լ=c QHhC }!V.'әPLZ毃 /]C@пUm靳!]$\"y{`f1؞_D3~OTJ95Cw9qws3e Pk$@@ߏc*]ԗfLf&"i8B>:(A`3S7HljN1Rwۄ$KdkwS oװfvQFAS-%5u zSo7QQ6PVQ>w(G:sǷXD*?̏ec[#q5@D%th.me'jX:}OG<!^]f9=ϳ {2 3v nDS!ڬF^ޓU6(%Xʍ&q6‚gmWGѹVkpXpF6V׶f1MrEN0pb~- S9v8/oh}\4iK>*y\9X%߯d'X[Q km11hP2GY@^DZB\ṍ`H/wpU3u}(!LY:ADeR_o)WW|W^?U!WV?7z!kBV;z*`8bw,w.w-}MQ ;3߰V+%9%/Xd~?9\;Jy Se ݆܅ (tm3{U^b( Jzn"OBj^wnV`?0͗xC>" `p~$E/`K<$; B|.}LWeJӔ1&e˧Ε홭S>x4gҞIW0q oU{|"YmVHvyt2-a# ( =6SNc>!;P 'dK̘wkGx[^'R08~EF,5RVIyDz8FrBK>jz;ľl|r؍f7J*d6[IYԨb[ЭdZl,@҈wOSߡ>v}ja1ۚ 'J4 "'^WIII;I(}EvJɦ 9rvr^rr r9 Y2$ 9[)&1n` ¯///.6/v.p&ww,}*gM v-Tl(e%hV,jgkSG9 8yl ey[ys`8jyEZ}Sy{?)E8{Z{T>Xl4= V/{{c쫰F>cAs)bo4hB #BO2T| MSe<9%dH,SJފ3z>su[2244NhKHRJTNZҌы.5w1WE#[bQk0Զ0uwhYx;*sH$IR"wmsk8]$\Z Yb7=( &^ljGA% nVyf<' T/5 J4!Wc}Ŗ[Q/zW|4P'3uXvIoc /3S'Sj@[}36>E3I1Ez~Un>4BY#2$UO7zs ]x 4mV2I4Rc:Q9S&@$9}poz-0\n♪H$rȲ'gezgL׾]!t \^,c7=pv|<6$A 놯9yJsp(1Qv)ݏ`+#c\r*Z<;KE1z٘tr!(x}7{{9p uCGZvh~xa%WW|W^_<ąZʕ3ܓԛ{/Z 5S~M@3sVj9#}lwg<{m|k-B-B-B-BV-*>) s#]\_n:)"-kK&L6153v{!G4D` SM?ʕبmk)k/k+]񵿎w{smyy<qi\dz=o9 vA͔ BaJ'! *!@_SL ]{* drvYo@`ʟi2 Xqt3M4bB9QF-?Qov!P 4AK)t 3a3mQO,.8MFF ]ž ߲Vf|_ֹVT\O+Ӽ&4}AyNy;THl »\C<m~[7? JphP !\ykw}z5ex\s+s"duPy-̖d9$PԌ|Qխ2z[ĝ&-w"u!vgbdSqrPpkшSЊFɉ3U鍸Z֗ c\g ' /6`;ucOݠ~#r?6)0 $9U̳mv븀kk]5f3ҡn2Bfrc: ! b%r B\t3Gv/P/P/ Ȃxŭny-S--7,6>Pt0g[soVa^B>A?AQ?A?t`8{h׈[0ȋPH4 p'9{0Hr!i7:w1 ϩYu >C$bg]jub=/m ZXqH1 SiǽxVfwrS_|AuS=Aia~!Az 9&Wubx.Y_#"ZQ w΂y&`d[0sld`T"lix!^I3>y{N6Ⱥ#vZ&z\G:q z ڡZb9>k"YF7>[9&yWm_] ~n~,)~309YO2ތE}7Z^7 0CuiBGhԁ # I^60(N/)~x;Id5p djM\ ŲөWFkog&=ӥqI a_-0=S,(e]v?0w+P0,s ?C~JzAnfXN 8,^v/Zz/Vr/V &VuNuU8ios;4瓼/m|7 x]#I~EňǪĩiiCb!f_?/=w\iDo92="S{ϋ x'P(Ѳ pSq$rAMFdumc !5ФKs[|9;2ɫy+/h_s%z]-2n~DIxU0 p! _{{tyhXa11gđYo,ڒN¸Ile=X l-֐N4mg+0"~di&esOoXn'W%Y=O?aX*[ps'D]7*vqNnP?7&K[ekQ`?F|\ica ӉANS~}Di2ɸϩQXD'TLυbz[aشG_A##8G&ŌsM@PR~FzbNԲaе|S.K-˯*<&: :rvXMi^^zYa 6B) pP@v\D)< ÜER 3YjGIOZ )j*9Y~N7.7_9[kg֩' 酯]Z9^ꁢrMy-|vtOF3Cb`mTLqiv͚E}ʒ1^&Ġ=L"FL{J/<6LP)0=rW^/> XlOaG DyK0ǔ9=H1p >AFUCӏ㿈x k9r\*mʥZ&H9v]7xs!d;D8EI@A0<#0Ԩ>jm7m;!aW_MYܨsbC.S0zAַŐKcS/JDt|>) 3懞hn!GmhKҮ[0 -} cJQymSI&OwǤvLQ$iNrCpd@QgN*6fnz-$<$F +w1O5^5^'b'<48P@P(8TaM0q {WjCr|w tdMxch[=ntC ^Dr8f/y߄]~*f6CiΠM;6:ՏRO.wv@`ڪo /N>xaX2zaõg3Hv\,P0u]nd+R%2ieɖ|h:_^cek܄Oy(=۹-fKr-X|jvjf0us(Sq[QvA?3G!,#T jq2B'Hv)BqlQ$agk?NIj^鶪 ,Qmh9`v`,w- *62$w@debcERN~bJvX [:{uDhd(j܇nǨ'+dKrUuP7Lo|Y )]fh$ĘL rq^?i.OW0t.uUJTjyy*(OerN{Q.D^k!mA]j}382 [X:G(Ww[hcXj͸oLzN 7*tq[y?˿%k&7ؖKMRR Zϑ(ZƖbaco#e " @6"z3Hxi$zܻ,Z4U?{p4f\icX75˟F.;h@Dn vQ.0PNvMU 4)#D;5`}M=[k/!y%pw|Nfrh㜻^].pӧѷ[0 / |u-1AfƖkrCludk8;h3(˧6~qqm_۾&&& 6׉gVIg d|'FH')][^t%Yz#n<@_W60J#Q?He,@ ?m }$/T߸dnQ..3npv|7p4ҭ.g/47*Mƻ&=zYOJf0 .)k)n?M@ĕq'5^5^)4O(0u8ꍤ-t3/?WGSx/Bym|dwӎD~MA}\R؇*GX2o]̴x-,h X4xDOհ&[@vI|'Gv0UG'57(7ԱAr%WCLj܌0%:^`+A :FtI8iX1hA(nO"VYV)r[>ƕ$k'?kB\js.V_`ۗhǘWh'(fHܷD2u9~fR E cLΘuü;;S󻀿vN]L\W sXZkpnbp-9^0yT /PdO0؏ȸWN zإݪ6Rݬ"|>16{k!l\'DqGm59.Xǰ`k?\n g%Fx'g'GOe//Bϼl} 5kٿR)hsX+OSb;U~ˬ_mG<䷳!+d 434443 ~AqmBQ@5@cBwAP/S7Ǹ[D/o7Q#XJeF߁WaovOoQW{$/=2k:cQ3ϱ߭5c ~BlDj$kna=o2C=k ".1jM%JEM%#\,~ S7IT_R-7)ټx< M_Rל ]8_\o"yAri;dJq[)C}=]Ǜ1-#3K[x}0! o 7[##8{ac2^*WWZ^Xb B9𷧰zѭ2,ʭm DPi)AS?TD{?5wuy]t<8g)DLx=VYåN$d,VM a',N-pdKJ* ak`gC7/.-_fY߱L8i_9Tnl4y-k c5Xp=cO"nM7xE1Ekr ?awS]{܉9I Pv~cL*ޞ0C?%wA+)|,>Y41<)>|-Ti_oܳtx|}IhQL s6lllnEn)]4Bߏс:!"90Cc c !tʌx<ͩl[j~5q KY!/ieA)!O?6*\XGJx p1 ļcg c eevw*1]PX6/q#1}FpOvcz ~y/&kQ=Yx+nY;r{6ސ@ G4o'v]" ,NWw33V\䟋+}݁zþd=@]R0\R:s@ApgpcWMф-~-bxsz_bi{h"?zsn MƤ=+B EA]ĂvKXmZ[ qu,9b+6:P%awܧaHn3$!IiR^J溅zFuVv NjpC%y=Y)urEy;\[<Rr:A=Vq=Ntr%o6.^YZ`g̩{y Jwx{ vC\|9C-G-/{_Ltu=; ZIߤսeeT/1B48keQ!y>}4Bd *AV}ծE7L<=.K]<˓,+BfܐF2*FbJz<Á[_TzOBy2RD#Ef"Dv#8dVhƻ=bs~1@B]ַڿ2"UTdzX+*js\[}{,' V\D [)T/&yg⬘սW4dS6u<(~hK'PGit 3nl\p-Nx;a<FV !u*EɒD$E_ g{lqW"K=OA.Q v|81Ng;Y\?8͂BOJ,ג9gӚ~B81e#ӭ``g_v? U<P~ HIǞQ\)#jqM밪tđe#_̥v'6hP[vdEt6~n.|~ւ~"~~~lNEwlFB83$bc08Iy"܆>W+kH[9(x(d|J`Nx$ 3)n&i1\M76TOOOO8NY\OmJ~Mx+]w񋜞kmzN kNΐ* 𾭐(Gz%">QvZ_l-j9*?ʿ!}^p AZ]O J2'fB/yLh7hdH+YFJWyKMS>Qonx> <8Af] (zGWWhTk~V%#@n[ t,;`,Y3@6)9l6>.]uSm8U4Q&`U*aj(p!0?>y)D\@N%Q%EŃ] CKj[^pOcqq|1i!O"Ʈ$nW3,QzG־r۬k/Rz mmbXb:].qW_zUhXӉ̒>-'f2@ibanUf Z=2q㟲38bÔz+EC x#!1"(/>&8˵ "){tMy Lӱ9+$):e})kH 9"sjn:=ae-ةc=UC ?L 6Jf{*%y˕K^X TQP2*276C_F@BU!f%ENA*srKnH [EtKF :hM+x"SACs9b*9FRl"Y˲جԨJNY)= w9cTP2o~G sԘ3Gm Yr܋T\/6yM.&V(AV,%hzgCwo[-.WsVWg O1iG!W1.cwYPWf,-|0JXOjQZQ)U,ju3H.z_ynj4 }돐C|uAǪ$Ǯs.Z+r6cGO=|QlxpA .4E{:dEveE ~̫u%=4⃆'K0Zvޓ fRD=x&di9QAWCVӥG/JЈ)7`/Fl\mZ>9{~R:94J 9n?|Yu:k׽'u2y͂UslՍ{ }ȥұ =FWk གྷ G?/~nqlnzb e\XvO; Ǭ:hUA]|,GpqEw?)_ pDW\}ЅAY3eQ-RVm.?z4Θix ]yP P5Prk#aם! ؑfi#Mrp\Պ͟b,/Xfdg H52 e.%~4qg]rEuwFK؄X.kyc"_?@:z2YudE8dɏyR> ,-km hm"jm&mmg+I2"=ݝFU],gf"^Y/Mw|ڗ`\#!2yo*(LҴUcn\]3?djN˘t\"Z%~WlphM4IX၅מb6O.oD(P!gU]q&|_rL\ DA?.cms]gI?w*GnӪfML u-5ϻ{'69He 4aۭ-wR7,f)x]8q9(^P߇,ձ÷a,A'!TV~80pElg{f uq^!Rkx@|p]Jv#  @~F߿FDM_5uvoQr5]U!@:SI]6o)ƽcY8o*'.+nHH  ϳth ZUvl׶4˲-nhX"J Nw0s3L}rCmf()#]I"GN \AD{i 'VM$Vyﬢج-,2+;HM)t0U\QE_VFSYIYSCV@\ӛ4md+I ¸@ ّ˹[J W:VLO=z>ybS{WEοDC'n^"T?K,le `'υ)yOڮy(D=V4[,yB qtM]8yl ?&$Khj/>?ɦ/!arUvF;fG0]{3Bp\+*N-Y*ю3Gʑ+7$dé!ׅy5)њΎZQBG%'v ~ %A-B9N[,!hz=ph +raЄ"@8&HP2 /|ܼ*o%C©R_=ڛ4S͋8)?eG{xI9ZXkѥ%4$joe/.Q֍-\R4TU,6߱%a;WWp3W&}nhʤizYvUMUU1Jm>C6sA[2nffn_BrәSi?%61r0>GIBJV܁•-98}B6mn9wC6,>ػ^UG~l~/R?mvõ{ "{1?;ڙv%'{ߛ8SW?? {T7tQLЭ濇佇Qo͕WtW/ToŌ,l^Щ9%6tF 4 $~Fր_D5(h3#-2l ,.MwpF%:xzi\rYxPZ$1jm*iRNZ }SKɐcg(ZMr1ba(Y{=\gx$ ɂ>A̶P !RaxM+e'\Zɓϟӄ}(R<-?faԓEi}Mb︱9|aHۍ$y 8_ `3o |E  N ,_U?ыч>6:~7eqEf;ʳl_1F4xX,OZvj|IͩtГ nL7OLy0ys|02՘?8~ƪəE1T :U;[ztrwFw:vjyV1㓌b^ SY6g\t0ep=C+q+vrk:k)3kAuSB4ޙzⰍh|feB=Rsl^ƅ9L=Ytvq϶{pg{{_41u*:jrI50y^~<ͫS7%{3>'SMg zs0]1q M\b.=ICH!A/Dg똢xsD'e>);ֆ1/va^Yrg^ NQ\6V(A+_&Dz IA`*=RDSDVN0sr&}uxN"X)].]Kڶ߾B1s(ˆC9*%?N?C.e.ehmӆv2W>{'gPƺ8{{z< tt[ױ<{< qV╘QXkN?#no*L?_Hd.$/mM$L)bo8ys}rnA~mxigSj>qR\ C_|(N{Us_q~ہ3Kƞԍ^g)ݓsr>+Wq9IP?v7̿wqs5y3 ZN;g{[Ͽ? T?LSOP/RmQVPT`9 XJ Gl.M|v'k9Gtp_`]xa٪߮t"W؛wN`?lY&]2540)]D9\~+ΟGSݞ>}<pހ>>H[.Ķp7YL[ց5pJ؛}Q]HGct%e#0SM4O( +ྮV~aV#^Pic+³vqZv{򽾜>-Mp%ջLhIeY3[L+~U?4`|ѩG#*H¸ՔHimo"Up\r' 9 0" d@+e8c[hv+z+ϴ[0ɋ<̿]pA!b|l60P^m?PPہX2J:8.X#Ϩ͡,*s|8G! Dtt_Ɖ%-gj~:"5caF<0+D5n_SR9ԄIM>ijG@_E@ ۾/3i[^Ni{]{5.S.u.Yv{l>ry1mWJ.P֢(; As")YzWBÊwv<<7o/#Qġ{皶΍nA`!pf捐;W061P}o/6fe[*/z5M[[3,ord+QnlUCҬ5 O:x1YلW!̤Y2s :ɬ^T:o것 D)ϭmr|aR0?)GSTM5oY=G*4=8k,+xFe3Sޚ fj.^^=Ke< T"k=X\$l>ҩ(V _[l/C00`>)3K^#Th2hȟ =TSsJ&]m^I3]HY^~N)&c3~cbĈ恣ʌ|TQx|hPG{>os'Wj "'TV 4mt4<;4<4Y|1K'SĐSz%z-r`3## i_W?Q8HA#_P$W6NݭXjЕ˨KHj7mH˸ܵl545Lm,S)Ӫsɣi^'Qlk+3D_Jڀ֎}׵*9Mb)Hf@ qqͭQr7 i37a%9Bqr)ڑ~^^R^6^~4E]%O۟BɎj`91" s]7J"wwzj7HR#5VҝA OFPƠ$<*V\3g&d#}eq֍J$q@bp@0mqÒ/ֳ?ŀ\]j-ȱfeA}˒T0rF@F馃WqF떜8TS !k-;*?*@P1""c0R`d5%n$˨`/OdNOYNSMWQUQ)ZTncPW.A7x*Fֹ}#@L@A $틶_=d*8| aIL b9n#X+\॓f+V61#v?w5u@I0 ̱>]pܒX}Nkf\`qϻW3 ]l8k潤e>9{һcwSwܕnX{]%s4[ײmna^jo'^u?mROWkYܓ#1>U.}!JodE܁  ?L:툣J޶I?lb{fQu)GJV:Z bх;`:*K *YnL O7^&Ux+h;sgxvE@X@f/v߶n{H2^1R̞[(c`&{e[kVt} g|Vq5vUɷɨRLmVMSGHBJL4DH\9*砽i#XNStWx -ob]A RH(  W\|^r Ǭ0r ?8&*ңÇܣ 6Eڭ|>)Dbo$.8 99)v?6'ظMjN:M&51CP#o㍐ Gl.L 2_3ဥ af&raqoÑX}͑?#BEsz6$*'鎉Ƃh@g4Bǜ2h+j,"X_[i\?acc#nnn~ 11Sw3˵wZ}}mw{OwE_]o w? T%qXuM0]?uBsH|-V43 %@ڀ@T`@!{c_;p[u@.6/U(V (Z8p> bғqfTQ(nx \ظ7@+'m?w$S5GjvWoOO=HPdCdsP: Gb%zi==sDCiôfB\ Z؄HG yן {ds TLêd"Ed|"%{̛$S=jvQʎap\rI_m#)[޽Dy1=Ѓ 1{v/04d,~X^]c,1g aT8=v:.N`l3D (zB/ ԼT oU ҹ7rkiVEh Q ].}K&h.B>LsdZҝqdT e&6EF1!}{vr. >oeZ>@6g >-NVڇvG0CwrB4آ~9{g+[C81;b 3ej[kSf8=]رFqf< t]S`e@m۠gC/Q,\z1|^U(UEMoϷ)N{njLca5͓mZA5op,__a&Рw.&HPgnc7W/ m^Y=35tFL~PZv. U;# t$ 3:9c@@ByTo`\/hצ#F!p{ :ꥡs/ebgBF6?C̲e;Py՝9,η]<۱tEgQi_:D;i%[ގ\]:NĴ˾Dw݊ERy+욱9G/a0ձfo&QU?R 8 #QѲ7ʖZKG݂WG8TT:`8p4Z uJ*ܥ#k1.ۧٓUu))Iܱ5Ssq-$STj`-av}IWrqC(Y!&kV"Q8)H2/)ϕo86~_|psswuuNMM.>333 322jhvr\^>m3dvk|ƿzyw8{IT>5-7i3gwu {՟}[˿? U0q*C@]Q%YءRʦ_bUL܍6 3 */5!gy @af@d0 ߾lx TGeDA4"0;p.s$pw87pIKFUʓ._4 S-s"w/m`,Q2,0zk^d?\vo]HKɀe7GWXc'- ~16MAc#àme)'xS%|&TGݙqFn^XCGJD<c/PvUM*(ann ř<{u}mUA9g3Wf.(MRN#_@:qw3LBN~J֌d_o%0w($v$Nd^ddA݄OqI.&}3˒[R~2ޠ\ާiÛXVpg-|Yuvj?+Q%kkq+Ƈ/[Wo(/&Y2g!6OKN/7N{ Mubw_m'M\淃h {KP TÎDMMD{é*eL0Vxx)CŌ ۗ)pf5$qj9q7uxiC.jx-{۶r3KTc6ed%$E$E$G -2$} TܸRZ),$nyUȗS㣋7aW|TZ]/11b>uDڏb&-jCWAHR 1OzH;ZX;:#5;M̥YGr'ۮ3.I7K5s)P,5fKOO[:6]lg_ˇ`D.w?\ğGX}`-U{"U HGYj|Nwx%W&Ruٿ=ϥocx,-߿͎KǓɉ TTc{CCb]]{w|XZ~~?#c+|gԯ]-btS_qNO "&,mLO_a?N+vc_eW?XK\v&3?ήsDFEB]njp5#` .=op/<hM@ @@t8 p.~!4bTFP8^:[:&g:r4=g'Dꇗ,6ny>l'Ρ bSӑ4( V5W_Haȥ#'Igmu4uV5l2Rr2 Pwдj'^Ȑ\.j:~ݼ܂?b>|[3Û7 Mnhox}%Ôa5\i2C#>c1B,k}{Oe8N$-S@pPXف_Zqs7H_w>kċZB_\~5oRz>j!bٯ=3T #og],\5Nս|x gf'ǢWׇb&&&2&ʓO_2VG {(8 h(q+&()%QuspRqu3z/WBF( %,o5jNu[4?')‘>Ǚ:ɓ4̟ɥQK}R+.ئ]_Ji˨+WVx6Tj~)A&MIH7N8ɉ?ɍ;CkB3`!) W[Sx4 AcyM{L2bH19Ƶ n>k'$eSZeof.G:7$F}\":c!\:SLVm見=7e%U+ep=jo dhL{z̡@07ONoB[;K:9 (ٯõ\T{*$R\J,e}yiJVL'n!yl M :ٌMiS59,K_4ܮк}+sax%l fn &|rJ\[nu*,'/\3eCޓ7Ԧ/͞{|C; z.rƩ/޳cEƟoʓQP][g!ikA)A]+UpM@^0v,vo.p78\-j5pAp=BU?uzs}b8u*{+ҕ@ n6Tkɫ? em;&97G]S]y2LD_H\:&[eTZz|q#W_{Ϫ O%`O^ں0p}n+-P(fg'j{Dm[ ~ȃ[KW.B'q3Jf<꿼66Ak8!!"0vq{i4:{)&@y+ T{60Eѕ9$@PP,eA!KϾzRqm#jN"~up=ADR@|ÄQk%-!k;x#25SH@ #PIe'_5p4KK|e>oʧCνF#^BřDxHX%Lruwհ$7/pit'L]ՕA7]Buxgfs?Ww}Opw0#K8["[ >,Rf_L{ (o D,DDA@iA;;al9~Z:gy{_ۿ5,.`f< r$,x: މFO(D;~]m0%:SAQE=)ೣa0@h!侼mmu[T*~﫭]J06`;ԕpΏlWAdg S))aҋJ!ߠIVpsh=(HIGŌkk5P9#;fpAQh[> A6o2$S) =.#Q!ad(6o/!ڀ]n \ ~1)( vwLJѳDS'cC&8mѳδ Sz98^cر+"NRȳ s3J6;Gꦱ- Mc,n& Fu8B=F:AJ;} ʳcT#TC4C4C4CT= HHH)jrHjGH; U2&ޱU]YA曞EI̎5ɕPܭ91P"E9sm};󢱡aի_>#߲A |Z[/n= wBn{4#9~V?W ?yO>~ ȯ}8W=7{{Pfg0 K;O1@W@]HLo[3JGs6?"5P _?[/&mӶ_Tͻ*AAM$_SRVZ+ks79tRuS'A!|H8]+h^&_Hm>\3pkYAՠS7lG)RzhE:|S{JXQWA/}n-hf[[{A*b]xZL0Y'[Hf6ֱY0dXfp~@I5olnKޙ|*k6[({ .'¯x.3x*+Z$l. =q?R?CY3tyjpldEeCMSհqIoCa]ueޕ5E"!]iI 8[1W+15<_.l`iN/{/̬ _>=Q;tO|UVR_]*%Ք8ꥲ !vI,C(Ai7hiȬOMjMSgPS l=oɿq;C;A?B1;DGltY PO>@a0A?$0#W~*ɢn] _`g"SY^F<˗hhh TW]NO,3}oss_ ӿ CGO鿔7?VR9 ˟E?_0_0i)  (NP/un?8N}n.ݣ@^"_~n#R$ԣк\2"0_c; k s ZhVwIJu,2ƻ $._ "aA^6R*qOy-&Ue9d;8!^6Q12WѤmAʓGnZN>2pHxi ʚY;oddn>!qu;OM\yͫoaFgiIu"pKqH^tq(L_V{a٦Z)8!Au*kyջœL,Vvg'BHdAe>h"ooKS;97G8jJA. Ba|'=Kc v ;,b:)lj5 x; v2q&`N&!Ŕ5=5>]ʑ܉[YmXO:zjgy&G8Eg3_t)ZX+{:Yٚ$zkj;x[:8tznkm+-G6:pƖ2+ǿǿZlǿ/.])&&_XXddWLnbbm;įoO_wPnO923~G70iAWwPl6WǞ͔*h%E-ES B@2p"ft}DT"5@%DmTkOCae2}䚴ӫl;~k+rN:n\g Muw\/#ROTd/MY4XuЈy_ո;2;LR=6`8,2ĖS,ƝGo;-L&_tj(rEv%rZ GN8A+㶭O܁#&$JXűPCyw=F"]@=ceq⥐UܸM]q֮jh=ke$K+DvKaym0ʄK\7ǻkW<݁52yK%ݺ;Ķ8Ob5*_=:5pm"GBC1SJÚuVo=h'Ư-0Z%ױ9.cK Fz.raID4"R,T8@[wM{Cj3o-JRx]#vu;!k0VCo247Á3H?⏑z;o ,.n`czSr6O8H żrݽ]^8tueb~L8Y bwS-zM*yY$gt=kaH|9jՕ1 zͤ/^1Ss=M iVZuRէ5gOO}LvfHqpU7ֈ昢',ۭo(;M; W?6>C+ 1/TR䉣ŖK \' ~pqI#l>|Յ*cPiꚍg<#^oap#(, נ p9O8qp (>ũ~ޠ 挽tz+kkIb wO1,2C;FJ8duc1 66e|~}]}/NoQ_c?"S|;;g {Uo)W!?@sOc [(?O5v'Ob~wiUK:F>\ȕ |IrrJ}؁rg2U1:=R@| i6-b9|*/`|pS;S -s97Ca,Z,X;it[y3r WƵ{b3:K9z`ҎfJ+A| 9Oo[ "RphF|0(}LԅiA~ MQ/4m^.͍̍BƯO_ɝ븊" zq"F@6}3v7hZ!c#εJSĵep e&fQu^wmƌSTZX9^g$~\6Yw3 ZPZI\ _3s;4WL#K8kߤ"ȶz< [bk ;ϨRM ʙ[;ufl`" Z蓧n멮BWoAPp1y>G;QLu0g7nCv^ p@opA[cHU -Tn)gnсy -sNU=jol'"ZC{}rli@(24rP2;zGmYhQƗEWG=̿qn#vB…%5m}C#Pj~YUQ ;1 ϔSvRz%AàOs!2<..!F`0J:ϑ2:::}:_\\~rYwWߕ~N >=Ϙ_pFG6pџo00eIOKggim栙+%4ƽߗ0]H]S>k]n:6Ъi)UN&sj&P'8g9u)R1q!~rٚ+H';Y+d…`/*c)l]3OB7[%idbhtVQpWv7w6uSdﺙ:JdpAdt)jFqKx:jRQT8}B||rr1zMY{>wzj\EzrAdtSRAPJwkقi[<}kXk輚)]CI%6G(}߆˛ =c= |^2v&>2G[^hZ';hD%r[4Sht]b ,s nyr١Pk1# ]iY%1+ftM$8Hh¢Q]X[x>F.F^CP>%:;^#/cK +E;DIms,27wVFg[%ZۧX;[ۥƸHF $ $J~K~s,F[#̽psGe# Ai.f6&:.ʶ.^JɞjMZz'.Ο;s+Z$9;'ii6OWL's7U31706?rj|ݱбأ=5J{N!ɻ8jv. -/g1b6FՑzN~6r;qa+G킫^bOl`6d^ĦGn6YȸGX;i$g'sVѶt0w d}4tS zР"pb_b\XN|ㆿHU GyߓxTQR 3&1q8De"@mWss룰,-:'efSzZe0O-f///m=P4W~LHu; g A{$80Ec;/T>ԅ=:!Wְc1QggOVZn6(`."E/ǯ;:@]-(uhpmLY#X (!D[vtE/tݝ #daV=tJwPs.Į] Ǐ^JEI?Z0&5;psjsKG Q 0uCujw/_TrVcI\xT릞ձ|,PS[ U=~~~j 5g-a=hw!U*:rQ&7*q8WtAW\\WmMwf=N0.>%yDo xq/0c3MVd,JPCx!4뚾P4CC"8Ny% tR& +bKkL/U5 fZ)1oDPz,e8ǐP( r˻LO>5qXq#ECFI T|0G94 6j7`5J ik}/o6Z%UKQWl:aYf(#r`-% RO]QCo]z*RvhI2fHCMMFPenfW'igBQ'RpM+ oPH X@@_k_ѣޚ' 2TҪ~^2UHy [/qTQY_:H{Rwsbdj,DɊCۼ.,Fwہ)@ h~vE|K^/ s)tm1+I&INE|W8xԊL|56.5WYzT^.0i@d`;Єf.XOeLO]ؼzLĝ]j8|-EE;ɇDZJ"蘦mT"V{?SFpoIshƇ6?<7 ؝3؟s/MQd [ٿ??:gG! +;OhxMUqcUOFIܹ7oS:=+}1Y""wjwfbrh!?;$0 4+:-؞S!U{uIYȅK +xkx+xK{ {38e=U(/P5 j&#cyѮ]u ZAʉ0]#"*ܽ۸U} J8C;FciHma-=F= CG &f˖p+70kO@u(UGeE{W*^Ofn9-xb pܷg g.^'o'YNھQ5㧯aE"#bfTnnyߘ`\L yk=i%`bB^=J0}eYBÇ(Q @\$xSyxAn0\rh yttF>7H>J;A2su#\( 4)jf%V p><@. S.͔Բ$ŷ*23|~  :΅xw'4'[Z) 0Iw;g]>3BOON/l:ᝢ`:n^Z&ڜ1H Qפ6~X,vom"Q?P8ӓb=lҜ^ޤEB=XG>^FǪfuD~ B{wUV"05)"E\ }Sɖ1gc6YsH^^0̳k홿2zqsUw"ZyA^q z%(Q(q8 n fΓ8t^ ۱sٳu7rlI7$erLppReވ-}3 Ko` Rz~[|A~~t+Gܷ c5+-GG;t>|ԹFj?e +; DuO WC?WIy1^,PEYKRF_&٣~hWnчpic%-.7I4~~RY\b%Ũ킥ʲ_ T06边=H?3wò = @ 3;I,F=EGgIKo? %  d 1T݌:m"o]q5B}ӪHy[h d~*&"W sۮL`z^߸R0OH\r?TԬrJ! FaZ QFvfʞYYF˖m\ݰȔ<-13-֝vmK7GuTh$;ix25-(G tv:tHμ"8X"?uxo^L};ك[f>)ˍEHcW$JNSHP  x|-l)u|-Pk9C^Q*maa!ʥU@_kM ~E{N3 ~^AUzQro^Nݩx([knel9lkandiSgb_Oyog/Ia0{_),MgZz$ث\#ꊧ+{nhj+)[(R8T$P)5u#ў˔+H'o6fo=ʗM0qvװu4J=^Mիpddf]hkwW_>_Y_B^iJpTuNJ-d|X 3s<_VV/ Չ P5D9zq$)VLU+$8 ==h &p6Jīn; N? TFF{UAb2H.[Gk[w Q-g;]RIol6[  1Qr%2۪{^ѕd 0+'ub9qQv掦"a"` }_}G/U{hpDŽpƴV)ëU]uR1#N9)Rkx"t.qn9):ZơZ>:"%$3oȹ8fe=1-}|z9bbV6ZRɥ*5]A~+Ѣ(GF_zWGX:w̪+8f>r #0n:OHu}|P}C߯+ ;7Ba 9_E!wȯ(-7$]<Yb7` s8۠3P r!J>ZV *iNڊwYNb'1(\م UJ)"Ue}kL4̓ʹ gưUe2ׯ0լ?+e/y%>gBa`U/j | p zfM,L)a'fd/*GD*K.2ֿC-vX*mn&ܷ6N9PH/-oi~_e@KBҹ|>YB)3y8=K?Vhdy{f̳7>kfhtP]9vpa{}zL_P]ZPze*Wi=lN!@">϶X13Ψg~xJ"ju` ~#Зe74aee ~JmWm]Gļf鸙iők%xU~Iߵ/oܥY}FRI\Cƚ:@BXZ&hfݭq5ӷt`6aoB'Ot?[fgC}]HqB{լE#t"`8WhB;`yȮ/F[-r41NAJy/,{WTP,AIgetT-'T8{{%Y$R)uIj^fI4^Cj,uy6&?)=ߧo_soo7q=szzsYz~ zV 6=){~V{0ΓZAoEi,?)FeΖf+&&nuHd'n5{Oc:t5%W~Jp8 <{}az A &;6;1LWv'.6-cyn 8xpb>&9-Th\:6pFur鈶 ,kߡT!ZY)s` {zo}qn߾J5)!!<{^Ȍ4ynIodˆA목SE׶cqvҰww*/6_ح+K܏MYm`R4R<Ћسdl4M/rD ?M?tPY3"!Zv| }~pv }- )) se6:A+ ws ^QZ$CS\UEp 7("#*aTC#1T| f-)1F1&o\2(2 !F;CӥagVj'G1<'su})3{KEMv  jrMQ3-ٛgwɖ'pRMFQ8@x걕[/%tL@ILJ|>559B4O$2xϳT4U%Dcf٢xe2:tmhedil :g_+#xPAAWA%m(`N@ p+_R*s4{`r #cd;C,5oWd"gt-/P:Oc&u: (';nb~uJ 櫊`+~[ҝ"-ю_Nؚϟ33EK;M$ZUњ6ArG6]gGluڼCbEMU x>r-+k6o$vztP8>â&iOwBM0ŭ_n [eȓLB'5 u;IF%2Fee AFނ|hR7rø}On.]ZU8_Ox=ΔZ}[pc9Ou>J u$pL>٭I×]A<Q! Ky demSVf D˺w8ʧE2XP:LE㗮`mNS1sm$(-;: NǮJ$ lkyqMfnWT{G6L1U(}SLJxz۬7C0wywf60vQXǸg7w#6WLTxg & }ԍYmv61Ҋ D˷;̲ܚ\: oC,mbwPwK+bz2^X'GT-Ie'LN"jO QG Jr0荭m=UňuggTω#E̦בErn. B]ٯ'2ӹg ;kw܉dLlH쵏^3p(ji^U<6bAU1oC\zr`Ybkh$HS7K"j(I^*3u'Ȭ>cQoHM,:Zc]D꙯"]b<\|y YѬ<mlQ# [WBfmg,5fM'h2DX6 ?' |98B[EGAiAQ"΀`,Xuqq]wu,Bil:o؎N.ත@;`ԍ]̕4 /mg 0/3]ê%N9sio?G:O\F1JWma@~Oo"DR&r$>Tw5yd򻔾oV740YMۄ#NfVvS5S /U.+Y-+*%@;mI sEѫ櫘@n¸|Kv4,m޷&ҧon~U':9;3NW)@+;z{ItI A:[s:)&n1Mkx+CwtD|Y+,r?m%ҘƤ0cP<Y^4\"QR~cx*S 8n,O_]L5It$C4=̔u#M3 {:ub)/*"XUUU.RMm WT ˲߁&"Tv¹T'%ֿUVZb.&]:/A!Ru P{p|ne0rZh{jiw}g};w;WL3qMi-U(6ZoUlO fdpz>Rl!eD#XV3)ExgbdހvP1y+<;!X6V63vevRTqF R 5,]d>EF}z=|HrL[xƙ|w - Ji6]OA=I keodpM^QW Mͣ0_X{$6$ѴVܛ϶06iFל˖ٞ桧Yz*a,iRE =dcB%b6E}F>u}(Gԁ=b%)#6 gb bqR&a+/RJ׎w *'^"-!c2 hbyI 6vH@g4Uf,Fy.X{Kj Eq9E- w _{NN'h cXIS+HA{/[@6}=%CaPfL{C+Ue*Vʁ>i7,`sx@)` I v{Kz/*q#7@?3?D, ) p8#)pLø؂w% 8ona5/2x"h_Ug  H((`46tf4T: eDҸ>"LOKXT GO _fRXy:W;D49tFz;fB?yI-I wfqsۺ]FIUb0r )H @rN?nx_`堼 +j`nn1O j!:;DBjsTOD@.6sby5q%/P0=pO\̈\[˩et[5 Y}S/6[ ͐-k~`~!|HC㡈e-gt,'cЎ/TaE]{ˇ(=%-r)aWRm0nβ q; YX9,  &8@īGsH[Cui1O6sXC-RRD!"~۹E ǨoPLl F ^f՛/YV6\`"QMw~̽AyeybMnE8m}>!9A%eDJJԙZy #?mE!d"K>ې|W}F f84IHʼVsqhc r0!x&_.WV.o|f};Ob~GJ[hޟ!K ú(1:&ET_щ×QHYd;eu&%o8-#)w%Jk= v] he9M`CڭI B@D =+HX^'%kO.=;>>XVE(u:CabA_Lz'jyh :DH^8ƯkS}mܩCsl(2@-w,]ҁi_zm<0W;H4wV0MlK0Te8ٿ~ay`P8cT.ÄgZ N.$ăy>{&> X" 8` @(Q$f)&^"KLBBK˿g$K&9g ix=nOxTF\)ן9ߪ2ƓLl@1]*A?}V +Y{Ow_ԌVŨDė!6_7 PJwu83M)eJsc:U!;J~5+ܪKMwmEFIZ~VF%=5[Eu$l$}$cr," zޝ_ CF){ƍ'ئF{svɼ)u 4,g %_k>裸}n⋮h.TLWR((SYELtb牶WAP;żo!3֍juRE_Je G5<]Z_7 |n,kqw.O.e`f[z765"Xf蘑,I+E%#-{ GbU_ AhW^n|(ր'!c  ij~īv$o ,E/EyC[?~..~wwe^La6@; } <=ԭ`۩VYX*,h-`,6Ц#X l]<ߗ u_#|d0/R: aY'{܆nӈus}>K/)~$6\~lJ|cܿWerudRW̿iR_Lv>quEr lOrfȍ6َ(d8: zg0Pp :\S* ѕ_1¡ Wxg4]i.cnSF5Ocq|9㆔ ]]䊷T?F-虔~lT<9'PfSRKBh9V;}?]|/Zu)pt%k7҇v d[5 tA(ͤ>g)Xᒩcb`ioJ1Nte*V/emQqN6srKG/3d/rIר-fjϧ(wȖH׊5HHWF|+RϟV0X:ϑ5$*R+Pڲ$ƏM&o. 3+ 3h,<E(*. |׏DA˜; @<iMUrEY z{1JǙBs-p+Ή({ ,pt 5JT|+/~_^=JSFP{xHϩZ}n "eƋiV2+{%;5  ~ikK5 j $ tn\imumKEޫp#%rH0䯘K#](7՘x$;'d{'$gURNKM8W@ +8C~IzBy@Hr6K*ɈP*HzD:W|f{*Vqo"T4h2y2a)$5ChpeڵU ꅭG9d$?eHI4) v=-eem}3KgJ)C g|B.\/5Cin>K٩X*Μ>z%BvÐAjhי~8Gly4U"dSOjEV%A)F7hjuie{qdj*LKCڲC2MMڽMMH{q&6>19eU -Z0u Z LLżM#BH`: ?7z;O(vK!+r@x@~8)"j@?s^!C֦< 5rl 2z@mpY0y=%W޷6$rμ&nwhQU6Q<QJGNu7̋.Y|xqrܴ"XGbIYfylB|?<1Hz̎><9Ac>d;<<2z3/tQ;u*-}/pO7, .S @pS  ǀ t p6- 944E },䧵4u s]' eo/GЃ}ؠkj8@IPPP`(pSeX1 ϱ=qG+_XgeqMyAZcn|9\R+R/sfem-":4 TLMuJ΅.n>naᡷ+R,03ɴ6*Ԥ9Ot}`f &3B8|[||| FnU3eD&yDGL ZR3lFBn!;zT#Z[8Xg` T<*q Ψ3,Is\1C Vn<\=/m},|w\wmMBl!q3?zDjoWS.73Ntti[ JVOR؝[Z:W<Fa_Әsd}-懴?!i9(K7N 4?;;;̛ZW)8My6mc,c RlkTU8-ƪ9W%CC\f_8?}adk,.mﱍYەnxB'¿L2ת'{7{;Xfvl`#M?U3E^͎RMgXWƅ@_m t18?1AsZp |uO {De0t \o}w zW%zS#|nwe'f|Wb#\K  d"<$PD?^T5A =HWՈż!=II|? Q8`4X nЫ^ WF]Eee{:ہE.Ƽ0p%vJ++xªeMbG&2]1%0i 9oӏ}&^4۵=s "TS0m{س ƉiGpDPIl|?<5vXW-@~]`k;i|J:gfgYBpPr(vu%6< JFoko?=EZ}'x5p 9|~+( 6  ?=h0a<_&4R՗F3U:jseJx<|{kO1Z(p;+Kt4ͻ{⾡S[qήI2 vYs <4j^W_uN *&tv 4ʋMV|Z,\S>GrGhy(ظj|DQ!Ϥ$5ӿ68}Z-nKs|%Du1Ks"ݠ'wSCoxEYׇD`7ErAvvv]v힞!Kq zUAQJy@,/}yz?7 i|0{=jR:ƨ"Υ˥õݵ͡S=3S(.j %$nCf4׺^sz1jʗJLlRj"1!^&R s////G/H 2u|s$c[ L3ԍĩ^7DN'S@! ۄ^ #L) < gpVlUƆLlȭ-Z ZT}ouD@a`\ba~,pd Fz_։dkLG\:99pvwuLrpqj֤̐p@éҶ^%V*` ?h!Qϒ(nhJ{7;;2fuڠP%sOBRSv ?vs Id*Aizӫ<\`=dɐ8bM$1ɴB@=M2@;%(ZN{k$6QK۵FUNAAIƕ`ظ <yJ]W 6z\vJspu(,m*y6!7K `ĠH CfA1ˏq!8ۘ'NPTC-2B!Gei/'uݽ nȇ9: 9.k Ⱥ/sv9zgoX)du< ZfΟa}k{+\>*襟YB郣`_̜`_;ݠ*D`xds<}uy:X[GyjT,qB1S1_Mk' 4cdix'肷(ߡ8i$ TU'%+f~gUH2+e͖xڞz-G{&Y[Kk6:l[/ J63>ѧ]o]yi~yfT3xGi7fqBͯYǞ92PɂIe/?a(ӺmD ukפtɵͼ k2H~;jLm1)ޔ۷ҽ7q΍O3.g>.X)ۤL dXl~lWuL[¡;J}W2$XH(i烲 <kk-"u8Jᙝ?k^WXkID@?Rau}888db8/H xz7*U/= vk?c,%jV] C өFudrLRᢆq]?FZz~74mSp))N%&Z#;0{)(X/zM߸;B8G CWXr.xhUNǷ5 nj,6ECSC~8F} AaX'P)F0{;XU4>\ tq9g9F9ƚ9@y"~F9ϥ7H!Qe;/r&@w2B)dRY#zS#vT%Z*+k|=7bn2U;+'R dZ$Gߧhׁ {ҷ7:>ɼhU>HdLnm/Ï:F #.8]fs:X6G *@)` (g91?fgfxrrt'1W0@-.4*]R)oJ$@4F-WI㿭d@RPJmyƞ:L7 %=\aΘemX<.I\:7}v og ) =¶<ҹ0ߡxQ#` }KMr׹.Z4cS>n~*X}sI e1`?5tIzHfəW,((q+[ah*ۓNznFKMUvM6L)0>͙U1d%o(qlZ=:&:!8_ǽǾ[bVv<+ /^j)fcR\E&u"@SabPB>WW:-:<͖֤n/WGk9>'[yzb M]# [<J1nWbv;TB0lX/'ϭHO[]B>Ҁ(1qrR~ȗ=)_|?E sIvUH2= QoJdZa4_yDl *=wtk OV&Zeꋵ,~H(^R>Ba]Y</(ս 4ƨWLtuOo^|-l?>~ָwN~qЂNzvT|Y᦬vmN=?{䪻w)^b\歽kW9Y^k[/IV3e(Zp4%- >&*&$c/>c)c=cc𗨟N~:%gkTk'# ٙ1_QX\ׄN[E+b=jUhVnavIhm,  F*f~:ydyt RO{`ΐ,Sᴜ۔dUmXnH~Pa@q)Om5Sk=Ew3`#TqOI]iQzkD;Vכzbt^u.=v(vhγӘ8A$ѫbH"0 p’cu7nFR,ͨxx̀$ Tu)zqm 5lG I!$2ar^PMͳ,sHsfo;"h<j}ebm9w5aMzWbu䘭z]2q{qSJSxs=Ws<煿Y;c'lsO׶iw6zw3U\Ui;Yꃩ% £՜2?4?W%| 8u}UZ~u_SEbnjrF^QeM[[PŲkgdX%UoW\o/ݑIUJmDV);3senʲղB2E2@"Ѫniow]@ULAAB (vjKi [ߛo$kesEyC+_?lg]^(\'_kEA <6Wǩ_wKޯp 5b&A_|2ppkg9 Ωc ²^'eo(9ք$vTH r 2poXdڮQ9#s9gI=P3] y;Ёxzybx|=՜ٺR֮po[|<ZØ'6 H,ه BF<n<˚pS󺧊!X (8  ްh(zxM}KѶJ pQDvfzCB/I!kDU븅艫u1=2!c&iO[(+gqPO(Jxە3lw=}YZZ[@UV?5L)OOzOdd ;ӌ:4ʔP/#yۈ 𶣼mChCnÒm'Mn8]2Y.N%jB9b|eKV>JM_i SM"9EjhͶZ "wH|sn#縘$j:iZd 4bӍz"l<|V1gz95[zz ~uuݹ߾&:jL&zvWy9FNձoEƭJ+WgOZ.Sou1?eu-BD](uv0~B}i X8zBE囔rLݪ#~wD(7䊖5 RIhSzO0N̯O`ސ_ED_O=A* Ec;@\iVlCH?&6ӼT^Z\XeoO^Ƕ]1#}&׉wIfHfH9Gt~p.Ky;N *hR\y$5ؕ\6yQ<6߱#CO~fb~" #ç.pDf/kK70ىbm!2/-iazMSb1պFJ-wU~ VQ/bRF?~g@weL`|n*&Rf#VFjp Ʒj4[q?H_@o&!y}Ņ8W* ֣Qb_=Mw~9FDžxWɱ ! 3ѼK|g8_&^:bYYg?XKɊ;_gK\|m޵n[tlYqDeExy8888E/J*8g:Y'[6PB=;O]䲫D<[L> ANGC/Ҫu~Ŀ#0;Q䇢>SˊTY%ߴ`"E|kIIͿhk*0 YB.작_߾j 5 \?`S7vS.ܵFwV0gO,R')ۀ@W#EH[#d )]=ꇼ4LKcv#t:I]gz=`aH!C|&ƣ駸/4/ߞRRo3YxU<sr2hrIt i5<1*Dʤ"U#ͳK85[qx [ [x&&D{Zѫ^6BZ0.1Pkt&{R]ܠ:^39%<;>Ǽ@;CIa3't[ė8;[l3,a>D3$|6nv)PF ¿vtebB"2*eN:&&ק O| o0 *UtwIUIUM'C5o4=n9BsBt6vG7mc߱FB tD#3(v‹NDx77A#)Z(v3'c\c8ܢSX Ƕ4EƝ\f[k7%ku޾iW4uI!a.޼1ΜT_ZxA0t{WTTHF]NEVEp4;Pl+|3 6UR-\޶:É([JL4ZjO>xZ2̡N]ߠpGV5YS40[7 M=SkS2EcKO&!wx<6kˋ<^|EDDܟliiQRRSTTSrJ6 +S[l/=-}?ζ2XKсgH4405vjܨg☜o6ULS9J{09jhhbwfta y3uwZ +wc?{yݏJ$k@nǓstK"׌MT2m.*LS`h-\="=$*_"X(3g>h:j4A,}Q f^鹤mݎw SkJ^Iyt^}twQ˹s!TfAs&woaUJ~>_+2'/&#tuF}/,Nb- N;M{]EoF=LY@6o@!Ӻ)6I!;G!(#[ޤX"K0oǐ᳍44e"͢x_ e-yBn/yg[_ȄVUBVme# NIZ |3Li(XvXǝw8JR)(z) egwWr_R)de4x[#c0[臑Dfksd񯼈 9:>m6}u1~CM?~d6j$XIӳ3WgQwM5~,JRLԎ0ٰvs@؄ Sajŷ_J`҅p|l*B5*8{.iBSuHqCrD%R)Zx/]H -2za_Ō+=}ekqOoV[wR=# z;x&>yClLVl}|b~ƨei;WMxbgp J8Y+LnN{V[~3F}1%9i*YE5sx:nbq`k@Kߖ^(*AZrb T:EeUHB_t¸k HT>S*ݗi\;35bt~E4sO9nzmxXRy(Uu.^ T0 Y-~9=8hݸpL4~ ܖRM\ 3 k0I(JTʏJSN)Ҍn]tsY2R"^MBw, 5v>sUY#n>"٨׸Hu=u 6KXΚSPI;PMRGPY!Ym H?WZmT$bi AƵyMu< oTsj0ޟs K5˥Zx$4y ֙)r1D9 FQV. ]0/;fr$۔T~&7Onx[M򗟢 9i:0,7^Ѥ#pq^) ȅ@ -w \آ2n7BGiTREwk_SuoUѤli0[y|y>յ_7ϗ/_ޟdddLNN7$$$0117A,>JNHheAe#J8J54&BC͗Q#ha62zUQF߾ tRc\E}|vG2&?Y&uhpҏl~1xW։}1bV7E;1`eĽyux^uCՆBQ|~0UYhGT"?M#^<%=^ƿܝ!Zcn/΄Dܹ+mte|WtW};;sMA!ecCsoOb^zّFD&"oʏ~$lG #8vIDzjA6} - @[Ga.m3Ӯ<v?HPQ$R?s/lHpo7dkD>NBd;ϻoZH{,EJiu{o׷6H`!!A!x!@ kp wݡqwkܛ^׮랳yzꢾ9z^TW_5ǜ@k@aB; 3< pPl{s^[ι ||F1 H{j<9pzxӮ #whI>N? xy]z;ȬuL@*оDr*B. . SQ\}:M GAܳK#i_aZ?ExS͡Ry ]3.mϘf{O{oYp =/^z߀wҀ8LڿTmjjwjõK9-| uܰoȐ+ N)1!zrtf.Fiמ\L`,l!lƠÜ m ¾-ק="k{*Tvv8 .@`9} <үzlu1d c4u,ǫHȴp~ " I,ò<"J[r)hMF7FDX A6=bnlz@^"zVV0Hw`Pn%o`.&V]T <()lCA{ E{ EQ!‘jO@^H¸EavE(aAAw.t|a|"Pٮ.'7]ăoF>&O*-Zz~F}ǜk=8޻!\';;an;稿橀(}>h8mjx߰Wu"X|9KѪXIhyHUHB{~|xbRZINkcxsRV[BnSڥ7>J>ce >TI'5*Ej[tJ0 /Jl[xG5/-1͂7Tx},"f @L[~7}@qȂ'[穁NQ"wplzڹaqQ,!.*~Œy**xTr.i 7MrYvoY?;3Hx1ꄿHaO)~[,ѴNXZXsF#O_3d _S@Vڏ>5Y\M뭬6O_7r%f?Lpv0idjQѩIywy;ݑ,444xxxcdzehUWۉ5YKŬ˝+sWҖm^ΥJe GOҥpN4_o`ꦮ}1(unS`!ܢ6שռeyZ Ɲ!VC>`iѱye̩@)UO:^| O0K~ l!(@pNY)KSucə|4EU-։=uk3=&^Y.ƃڛ*@uޒ0u3L۲̓ 1 =:?T},8nR{Mdzv2m$˗SB-s1Nve#B ,U%R?T׳ uNuwqtpnsmr/77Oտme,&_3ߣ5 GYGdDi#sх6j6ٗ_\ԻW / vP`g'Vxmt%&ϣ)+uc<C~`K =/ScièlDڬ#%j O:/8LA(Y@|Tגf>u546/oTQ)[]mTbl8[7)M3Y9{^.PU,,]Ta9Ũ;ة)$(#O^`hⓅUMW=y>X޽y9Z:1*z)9bA%qY_S_\fdɒsvRMQjJUON])n=Y~?MWwvwUK)ߒU\9Z+lsfchnm_lUgoib*lXlGf|!M6Vi/0H?P7_IE][`l۲^9{S'Wyڈ;KЩqBզ`ryfk#ߨ +[@ `{H*@ )ͦjyVlhtE;v%;Y_/2fkh06i z]6Fvvrqz5fNnC?kS""ŒtZ.9l9z5ԘYyiLjr[!ms,]̵\mħ W2D ;;4a+yW xJH9K=Ev0Mv6M&EL?~r22C>KпHPJE۩^=frsjTI%9IcL!1`M\5LQ bdfTa4% }>q\aPXZ\1&s5p-D yۮAT'X`ܽ's#s+,5[I ާ@)kVvu=h#y߃mA ٔU urU,)dP7ϠQ;l|M3Ji0GnH~u]uvw=z3s3upaöC#L3tKT!(*#CGOI6_L0^G=fW,8 Eie喠gtn"n8d"U{^v{qE  ;P`&" Ѫ+|̠(#Xu0vnƀ(X,fQ-q := ƼA̼dL߰ǝr;SYMfwu<=|wp&iP*u!{KaE@d;N#$ˬ93/!h9=b@*Īyjbixku5tr|":V:glEC=BխO1m +Q̨Hu{u)(\i.aY|>_un'5|uޘoF ++0n7/IXM \^.(Vr̵j|4mC,©Mji\ 9X'W_&^-mG0!l'O?$'b^{ķC}0~wr)t6I ztBjo\"uV/WP!%ƿ"yRxP^N/Hj?'ϊ ^^_AAa}}O@~>&Nwӿ4yR֟%zzzay }%)NQi)'_xN?4&Tl|腰л |]D1u7MuBqcM|=l'膧gHYgM#;VWHf(o&OIg.-.͑O?SVfVC8ãu\L^?_>!;[m}"@FUmAJJvhleٚz&8U:?+vOX5 <ԉi۩$pͷtM5gzX LQ.u<$ܝ_\!x[ =Rq\S+3ƹ׌A{`QTbvE{ʦv{mʪp@AᗧcP0e" |=ãhH߇^4 ` \>j}^l9uwLrck?%Nsy&g݇Lǻ.QQG+[kbA{zشu|f6(DXңx }nk|p!zɎ\hswة~4e?|eq{l_LxPݍpo;iu߮xV&zqmz~J@E Xh}/ B{g/+y[BKR CtBD#ߘ5L!3ma[#X$|n5KDT7E>=j{A Rxwfy鎰{S:! ~D bYqLXI:5G }~ޑV-;]i;V1R( ) g$?G;']`+,flZ ޙ?\'L3lhZ):43lqwGvڎ|XȇR7 ,My]ܹsoL7bp=k ,^b#:uZZ/{:LLSվ@O6E򔓕HKWfoIonj0=%<KKKNNN999cbbnmƻwqgrt;Kgbb7otknYYY̿IZZvy3q;iz~`ٻsE2vGD$x]欇hrD<Ň 1&ʛ5 t[D/dK8M} dlF^W6MvY8N58А@ibdH2tlէyP8f}`|>SLxkU~ċq!v'X*&0v E˒BWvi8$Y'pL2ry]g1Fl弓6M:I;N[<5`+' /@K~T8B/N3y%: cgpyU_U~Ry[G0OOm{+i?Y-1M fuV>v}NsNoyʑb2TaM>C1=y| M ,qdӤ,m"p/}OEOaJUB}o Zu}k䃳 E:y:xƋ8T$ܸgG4"'QI:|D4*V\b4b4g0T}v1(Y ' ol(:0CUY[SH\c}䡖B(WNJ%r82D4H@UZ{li|dmj$hOgkEҥi'};.OIT ,TI!2D O*!*+*pFzCvM2Wl,Ln@~ӫVϊY7#wdƹ&10X7XXHPN2{"RӷL*a"A?[\N-BW]2^YTP͓ab>.Q}{%7t  ϥhy=ͥZlUֶ˖&9fޖtin!ZyςjgZLspetfe̻5mH0E 1b|ikAxN=PSM׫6'Zo{lGoil~+|=HEtϱ,\W0h(%QsN=~k(za.{ݬE15x{yLh>6G昿c1T$D綹ŒDhy\gm0SMhV"y\Nij5L- iΣqe_CMо\F~x͕5-cf ;I^jƬ=ed T=j(0Hi{Awf=R goa5$ݣ$~|o ^m`8xj(S__̍7=x{o !T%E̲Llp!ߪ/g}E(jO[.d+2u%MY />_y>ʘ7$>砸vwY#-eqg^.Lao@""h5gbw+'> `g8rz`5Դ󴠜44(Qw_g ǒgk8:GXǘtC#}66S$v)~^w`ke=9  `ORwJ rLp\xUqNܓ.1lÝ=¥3mlfjk/k.>U]%6?#lJ. dh8!:@7k ~91ܒ{IAp~P2 R~a#{ȽWjưV vj`ZM&zt\sUvo%UNGiGP@Cjfߞid)[釜ӯ'!' e"%c_V:i~xDG~_;ñ'x±H<$c3Q邽S-!0'G h{C-]5vb,#wtv?MA^v&*%>Ef>FV8Cre:[BNԛ"M?<\Rcm*p`lXwB$Npi}~9j V)35 EJEJ /.EE+B{V/WARVmtqxù{C]'%Ο/;uY"A1!(0,  \R6ݕH ]C3k8!%ryPSHzUUކz݉CT\fױ!8L9s^_  ]9{?|E!dT'7ah4ƶwɥ"V~!$RJC?:fJ'DxV&M@ydnYͅH rvul7\Aóܽ̃fc]bbnuevk _Jeܩb_#_G RϪ$wWNS73e΍[h@#لHYًYs7X*+Mկ´

3#Gi(= 2IGB#J&7.db3,CЇ40lxl5_aTY]iv?zwኞD}JZz +RgM&t&TǓ"-]=\, eQo0\αcwHk_gHd9zY'*\/_=ق>Wf=a1 Hp ~.DbXE:trvqs⺉?uj ) fisgՀ_ Xu`mD繵bV?{!C.3A:i*il6(Wp R )&88[kcOxEc9͡///[uN\[XJБ#h2v|$jb M_ C2 *峟ڙV $>\$,`k(iOTէ3l%ȵPNCA/ A`[hKeL5LSy.bȟ#o֦GxV%ԋ "ml0I8E3=!hڙ)QL+^Zß$ehoxWX i̦CInH45vU]%u0M?l'/K +O?#{^h8EDӳoN~4l~;Fb]`Cna2N9 Uh]G+C"]8oIP$TZ>+kd~=sd/|9~Sr#)y=KE75@7&hʼn=°@=`_gۤY5&X3[Z$ R5] n}Fב\pMD <^*yy:lwS-|@o~\/[( {49ܵ͒}:b ,I=VQ`t 9i_xԿKL4v$&F&Fsb+imA~83pδcfPC+rg>0z c)LK c B]sѾz>^#:}_ ?O)Twz%: E(&0Ԡk<(J J 9 EW|Gs* 0qI' ӇLJ;8[v117OϹB/u9oiGHqQUo0MOno|3!^G6qۜBNT#҇u uE%nM?Yqx>8E-n&0 =%+]k 3o[-.x> i%Vߢ,DR.y=LN)ķDG;+i i)ɿd] yd X9 ~Nl]BpPwg6wSq(8Ѵ̓xxoe]M 0VuUiU_ ދ06m,rͱ*aO7ba(7肗4N0uEP_]!݀(a 8Hr珫QLNԍ 4VWʡ"P@Ղ/h gQӲǺۦrXd/l!ghPlG[dvf 6qX]` 5Oj]m[!*)#Q/Mj?E^c܈jnRPnv0{ӶIu#~BQv>ުRJ+a짭>H-e離@<[WmOwOlղU+ISKNS JSsLS2`4Nsı}%Q*SO/v}[>7n{꦳Kz=[j*Ws[DqfrAtEh@O؉oV>a-"#M GMX5DR| T!"S/y땦<`Ɖ*E{bͫ݋l}iar8sس_1OXVڕ*9s\j5>[^oҀzYE]jƞ'&*/TT-!?09{gkq^.ViujijijIijMikJ^fG3TsJLR[*F>LPlԮ KO9j- Ul?]"t=EV7=#x6fhbD_쁟,C7Ĕ=ew* 1)2Q7~NWѧvw:Vޅ..Nzhj|_Ǐ}oEO>gJ$y~HCCcggO@X[[飷:" NwL|Y0;~D}Kp&NV/$,8O@A:^39U5Ӛ~<P$ 7 CU$-\D-Y,tkmXxAMN/AjHnrjisYk* ?k Yh-TJgX/4,Dob:C"H z`]oRJNP.UwPHv"|9 q@fĨ=^Kˮۿ'+!s{ _&x}_8GNfzgX8:##*W>D6XH徒`P1xZؗu gubkeQqaA $rVi\0yo{VkV:藇(g;\R]U#esded#ۍCDʩtm>WaRj0+2 NQ81eg.YW ZbpS{ I nzmjt 9,/Ɵ=uzUdGպW 7 ?O<)78 >6<8wLxv`ic^ړ^:Z1Q=]'kKTr[Foz]}b\Km [C$Dz9֚Φ/G_A{a-|jv "{rWu= d7,Ntܤ hyz9 c\,!YRAz}L"3QRx=L3JSʏ$ji6sI'EjUEۗS"!RsZje0,њRJWst; y"FA5Aс!+$n Gf0P^\װXmnY:6E!v1[I!oď+~d|(UFw[),\=nB !̔i'g1v-S B;]1zi忷hs7-d ]+z+[y]<ӓb~Û Wr\Es{BLtpDtpHDwD{r=ǩJGFoePBzNTjJ{ݾ~R.>ƃ/Mu&h|tMġD 9HvuBYJLq8HzV;1Ƙx7 ǔ[00`>LU 0Y+YBq;bBNƈNZM.BoPlhHotWtTo D^:Ղ)l Ѝ\ߥ?ctp^z;~A6Fb^c>?)/?~j=-_`WCkF3=O#͟JQ!fC\ݧS.52E mB[^"p=TOd4V^[5<'@|;/@$U>Rۡ\dRrvS7@5P KO˫:6?D/ҟIcZxں ?XHi֛eޚ.U4j$j+w$ߚF x^6CSAgWODINWvUzVxA+S%"3[~e΅)|nd'M&t@% yMȏ\DT5j h z˫3eM&qP6)[ m*W|ath[I{=dTVc e5)袎 ފĺ߮*dN(q]= Da#oH"NPmQR8Z >5WZ:/oLCR1pʦ=9~O"9_$UjSm}2ϕj:38e|csk\|.{ÆloҐ ުӔ{XN33~I0kdN]}Ynphln{{;'S8XUHgCoW{ּsAuhͥ:+tJִHIր$S3td-ʙNQIo1}T.aTeTi遰^5Y+Z#VTcw뇑NK]2e.]WKkDbB|Շc:onp i6V(6vt44cc+/m)|V%2dWؒ%Yuuz[v^Oeza>yӲ]7p@<r*at-N'+dd"l~cWtۧFvޗWP櫑gcLS Y{'7ĵwc6dG٭S$i  Q&I.e44\܋gH7߽6:q ] BÜSI]Dș7ca0 *BykͭyO4ϻ*|<΁p< O r,ߊX%z6r=ZHîfƗz.U %֌!E͍K f3a@G`?i'c=1!_Lb;h݆]5!&ݢDYw%G^rP/%#2~ 8jL' ն.\8%I y!Gwx70 GT!s[O16c+f$(<0RBViHDXonHHٛ>fP?~&a<-| ߚvPq,( ^G 6^e=Kx@s+l+< BS"ו_ԋu+U{3g%K%KDctl#t0¸. ;Ico˙ݵ{{I0+,14)>|Vׂ>Q1 тsVK:T0ondDL!m CwlvU+qzlnΫ"jYomET~Cd@c aw AQ=\e^٨i-~~S}-~V~>Z|8Bպ~?w^.E>Ypjl}ui*})z+Q7&a)ruşSDkbu,rlr~t_ytpM6 gBģ.]R]Z酖,4LJUnjHMI{kyܚDUH&s r]\2GOju\T >XE%XBl}jA_)P/Ghʗscw` CKIz; soo0N5)dyc0~ Goh臊vҸk3r=_e$VyAO Xz1+T@+Nv?Z*0XIhl9W=:+Vc%t%.С4&pNgȝ'6ҺްɳXʘb"DmUy1In N[!n /\O8F4A:-,܃AHnpdK%{~۾{H|uU׸y-zzbqyvkM|1*L 5x@Vgz{ vmq~OGqDrp}{IXxJ4xL g8o-ڊl}z臲^ј>ufiJq]9] [7ot=B Z؇W/ Ja(c &Eݭyq0Xu9H$o7?})P(M1Gd#bʙnRHQŇ1501o8(H:ݴ\ POYXzɶ2?{5}˜jɹO8sxbc_xFi1aRp"ӍN\2" pp>qdt?2i󪮛19HbPhVM@xIOH XdV`{Y7Ğ>7|JҮ+4!̰=ciQb3G_nHϞO 6+gX,IѨ}Ȉr5R{o3!۸t`tEQPZ0Բ^CRWvn߱6i{ι7ILe,`;Zǻ<..9;6 ɪaD sDqFч٦W-c sR(5h򳇑L6?Uo o!<_cj;4KjZZK2픣YB 1@+yw[~; ~(vXG3W698˪.+[6^& tzot Pz1ׂ6%AE +icVo]Yҟ f^l\.˸9sR#*6@T! !1<}2͹fM& G_IĩOj=R}n7#SwgwoS-m=\ٺx@27{59yܶR=Sa+-Z(>)E!HO),hj٦?ԙ&]"f#Ѡzݾj \WU 4C ]¹`_ZG2TY״nURrQkpf@hUz4`Ѐ 0F?`¼>ZnѲ$Tt-*+|糜a*E޽ ,k#M?2~mmd+}^: }W;5s]%f0BEh#U&E[u5_\ 0~)nN 7,reod LjU,̗/I z9yyyJ Av>RTSh͸YwQMv~AB?-,|BM"TC2=_O g}ޭS'sV%~ jeq> w#P(%;,W^U#pw~}ukH@d7+|Ll|\|}ӝB DWJjQurWr}:@Xj)nb{0I<\KC/gSD[83ta3/r&+>~f ~\ΗݭgX2ȴ9¤9ʼ2̺ >*&L!]`?61bR,Փ%>H5};d9 ѝJ6q ҋ?g7pe e.e4c~ kFwz`uuXHhr+ֳ1*2J6|K2T&-FB~v|,japc?[~;ʓ?l Mqulvj"Ugl ?eJoU7peԮ2C&|l#O֗,a"uS=c݌#X¦ C/)XزFK'g! ! lS?뼤˸ܥsXaq~ϭVi4 3-߾4a Ї0c3b5+QCJ!dظ;p0GW:-}}y_%hOc}Ä;0|k<˛G!"=5Js Ɨ#TX'9ȣ{˸Esq2Dʸ(lm}i[+.{4;A1`bs,Uwc.S[Yy+=^M!YؼxVUSp¸NGpb>ca`;A'7:x`W &sGc' *:l+[w&=)~cD#o.d55kO&zl}o'->ASVƸ\FrDU}!K~]C,f4ޟ0τ+# m{5w/[w$7u7{WZv~cǥEErM}|H>u j#Vf `tR1YF y9^]r-{`g?U,>njm,C~%I1%.Чoa>οM|u-N):US} q|gGRk'$:;704y~V1.;ڬc1S0U#CĊ~k,oJ)c\iKLOU?Zͻz5cQ&kl/BTsJr~%iŹXZʄ Ylj^|7ah"[l/WE{grCqJGS >Qg/B/Zl7DtJz԰]k]:m R"}l<L*$&L.׌4X՘J3L0뎴l 3o02E:zC,R5 V\cưPs@uEPD® EvكǯN%fhu$w15|eGJT3 cgckfs#pyW(lV8ɑ;,|?#>ؒ)-m}8fjnggXzhM1GXWjh_q q`7CھnTџ%i`Yp@1CЀ2nI $˅aAY軉OCR 6[#<@k=_}>ɽ jܪ>3[T ^1+}f.hSlL$Yy?I?+ַ°Tz{64!Ʌ&ˏV,?X]#jQ~hBtF|||5[n='#)/m½npcLS`wQ ?Nj7/z&1P*`lLosὼ~*ݵȫܡrEK_e}=V`bnH\da;]ٻ-myǦno={VaRdPC:(,c$$v/}1 I3Ͽoݝ;^s4" bvTZF62~$\jm|j":3gGz}ldTb0ݢҞac)k\Y $6 }L9;3WpjJH!*l쬏?.$"NԳ::$3Gs ݇2Kf,6h&9\R4KkZ>eeix薦|j*J Kl>{@@3]WQɹG&>b埭?b$4Pe-[ʻGNvkƇlC|Ͻw*gY"=(6ɍKH1jOU71a_d\.;,M*=Do[s4g̹pGħ)Y9Oݓc,[xpX6 ~i!Na׆$t遲n4]Ef/'V?+Yw% O s.7UEgc% $w݋:`ky!+`׆BVaHE*bqx/+ӑ%4\ŵ͸;b{&"KV جnӏEi/:&--S:/8rWi' ~i$w #vnV4M:[d22p2hܪ>P9%[ȳn>`~Q%A יh3;"'+N[%{rGG'G$GC]Ɯ5ePkQ{&xoJ;+ۯ\oce0yIsr.`IW>ɹbpK;0W']{Ⱦu1P4 S[0=_yxjM?ҏabz0\zP-Fʓ[[nbW%B=l*}9 ࢰ(x2D0=uҚIB^\zΝD⾸fuIJ*[bf2PdJ AÉ.Ix Cy]} 'tw)ar w\VzK49%5:O5ǼJ3`J_lJ`}- 1;*}G8H ]ݬ}\81 _靧'$Ή/ /IwFN^\w:Py<ٖ? d *wkMrž,&:$cM1(HH# $ ?# ?!?&k<&:v ZԲ"|B0~UjOoB7KdJ,3°BH}4ahE1(8#\|縀쨇pCt4KtRItBxi@xƚbMqML}Q;730i4u~wg1%ýgD"cDS-Wgw`!hCFJBQ&.p_!*_y';^LPnݏۓέvn!:aMj/^.1uwO6 O7!tz}/'2wҜS֎: 5Xӄ)Jj԰ Pq )9]3wYAEKj_ NRNR>/֜h@aEߌu،Y̤qҘ^V&T3٭١l^fZ(O$'9aaE>Mӡi!t|meUuͷc/rgI )Kw8vV $jMVs PϯS0L@_&׉5a6gW{ BZXտSeyviB.!Dmnn㌲UٲD?:,(@7>2*\¿uSTsw +ltr~K҈kvkҗi .e|/Iy}½-RUJMMi&֋.h]Ή+bgUR!VNޙY`'w梟w TrըT_M"Z1H#3K:W@nXzn;cOuK0;TU&nelo`hYSm`n]hbnS\*3vrq Cp0V25ɲJDyO4*_MRY1Ǫ%$&K3K?gvջ+"J /9+Xұs|pLJx S]"CE9=P8.pϛdi}9gsx#f[_2!q`an[Ӝ"fd+PE^{R.hnVli4` lN)JU̬UK 1DwMt?AMw0wBe_9_lF=jcfZXZԒc(Gc24п.VB1S-i\'r8<\kDŋP/ =#F/mBv2##+ }=ܒL LT"=̜< *bf9N`FN;6yA_3!归=]v;(V4W5 "[*]'~FeW~.nw2C_YG~=TO +ȏQOYܤ OR+[lNn?A*zb5}KS6k3aqZ}iʭ % - ] "O}-#4xpts"|U'y]*wP:f>;a4qmj@L0n0tO0 W T!n{!T,V'Q#=װ)v*Br] :ʹFYEqVO @DLIeTD X>qE:ƈMWO]`Os1Xm5<$TcpL^DIU;U3JN. oQ !&5sTfln}3"T|F3?P~=xwDӅ[O.C1'kO{J+ *EsgnYn" bܻO 2UOm05ugp8\$3[r#i8]ګ8![B߆%Z}.{021m05yz0|oxjkܥNq,fAmEw*(UЖ-"-] "y8wsʚٳ{wWҹT֯+2x\x )~3B^ < χW٤j~л~p`+e%9˾r>Ld<գYr"T ѹF#@&~"ȩ.L:LcUA>'Jpy3Q8?v5ZC,Ϛ `F9Xv% UEyӦrٴYGE?I*V.]{<:|G=/s;i}- ņ-VPD.icSP '0=4༂D$<'].a)Ao j"՜uFψO PWZjz0,"(6xVEpB{ }K&zFg SMRSFkA%iU~VhNpZt, Lhd~Ƀx! UbWួ&()|0F etcu{IxLyS0! IS-+cD- sThQKrWa]b)Bhۣ]L<lts=eLÅJ3E(/ /G:`4wWOZDkOkC~Y Tr&ú kγV]|`4^=/+q5mpqs:HGGG4{6dN7ͦ֞oԉ0^̻Ju<^vzj|pр`egoHvMC ؝q{ I>ivmgoZG l=@<гT8_qFѴb;BY1> l#Gn#oK{M&RY{fuw}i=Y!̯L/i/H(@9}9% {[52^wsֺ gfUCM2f"܅p?WT$Uv,LI0 p3LRooQ;oQ"P!LO&E~d%*bW j3M$m~ֶxyn;w%wI%oRj9OW&?|l*h1ZUr`_<%?$ۣje]멝)˥A'i7_LdcZ.2L'E$ݢM˶/FDr+nR`C"vOeQ`$|e>AԢT Yo (RCw-ߛݸ}b'HjDAϐd@AYu]7ݣo~UV'jf*Ūk7@Ft;?S&1^An'ߋn~4S:bɩ"YB,ó Cdrɦpd֖\rfP*,@2%4$2Ϯåɧ&4U߫A#%_=܅B 5*ijSjttc;tct'uҶ ¾#f*Z]7!n)._ ;J=:P-_^/PR\Ol|b5m?˅*3I^#v:quqY:qa:q:aaޥ6H llWG!ܰ!ڷa{q/p_m{cшpct92.}MË+r*s1 -ϓlWNqvq^utۻ^˩=mOW1*'K6C:sʉ~F(vhI"ͤ[ѻ1cG_u~M+2Vzl8ѮL_l.iD!mNP6{0%}qg/Um9k;/'H+4fTս)EqJ19M2#03Ĭj~cgjk2Z"+]cZkZ-VNLV'wK PŒKJ=%QISD;GTMwt1J N[bsrc&!M4p-F*.YMN3yy Uam݃_g27|;OD+eKTɸ2 1O$VA(,(φ񠮱xzOLM3K$3!AG;£KvVo(66U '8Y>^4jWJm(^lҿ<_]9$DN3e㢬LNiw>^x罝[mm~ʍI%ʵm񃗝ǬhlBh*t7֩{cƨ_#Kt|#wW~VҌ@@W!h۽v.3ѝD܌ĕ |;bUswL㡆[_жMQEC҉䄤wtsm]CcWEuc=lCla-L ѩuCU<- ߟ]o Ti"7Nc9@9/U;F}"6 l W "f_?_9(wݳHGʂOm8ܯdBp<.;5(Yۜ"~7pXl1v`y.puTtuR/|Zxlt6K48FyB@!vQ˺vd*8$->f6QXy8HP:@;CʚDm\mv5K^P10z|0MMeIn}O q/,! `ٚ{u:/Z s,M!)94ɜlWO./k/c'3!uaE ǭ %PEkG nh$>^f3>ҡ82:﬜evaucReCŷ3\O?E6 Tۣg[k!5oݘGO9Mdh&O솓~}d鐨diWv9i!cG:@X _e2$]ISpKrtWԬ3?j4cmF90op"dp( &8,;cnW#6L+7_ (~0> ^\ HU ob\~2rw&l= m8cof6%212@S20v}wCUm!%D 2s\wm5l7V˴#=g& GD~@~4uryNY}k ˷ Wݱdɇj7N,ϵ=tK9Q@}j;gk74q5e#-PʬG^k-1)St*@bA* cOga89};xzڶWÓCO߱5"ELyy9Kegv}ߞQ"/߽ٸGڅxQ9ϙ&knlj,QP^Y+Y^dXe غ6XkYSj}HMoseoOMxRs.;eo2ɢAN89M&wZ\)mpRg0`<=[аʔ-RhHWM&jOE)MZڠ`Y8&ֲ KvvKRky1FL1}@݇{:.oͨ֗}B⧤:țNs?r܇ 6z{>Dꨵ$2-jAd}!e[/0ؗt)8B%E4dFYR .)ɏrqs(vwthrLl,]HFnb]KF)dmH" !fn.Z^..^ƎfER}6u.a<)u w[7L,o1 ig&uBs'5؈nj>Dߚoi*0_rk.䫩Uƙ;a  DBKDwiz.Ya|rQ?cm^/ 9V[qwMC( ixr1 |d\;e $Ey;;;[E $Bt+MBm beXw57)o 023\FFѶgn[?Œ UC͜-ͼC4d3Êyߗk&9z[zJG}R@Xk[9*e-2uF_ooQY*~)(o+d,Htkd$rwU#?~8u_ [ynxa{nmfq.|P~c,{k+EI&teMz({"wnm@cqOHxQay E=y]p5Xu}tZA!4X;L4B;!Z/4/-4 P'?B kSS׋F$*'+EUdCDJa$c)k"@(T={zopOb,Aa_1l%/z(yn}ȄuO\js9ʻ1:0K:L/X1XeV0.uz]̾)u`@yZdo3֮ط_fx}檂ݲR!GkKak[ןD-hϿfbf$W"7.7!XVQsolybuqV6VF;H;K?<0&gAjܗn(>e &Mc߳jL8G_if*J>-Z~߈°TI}MgG352Oҵ̽la~S;07R)9yp sVOgn(e_9k&Fnm^/w,p\E.GKFb^dES4wXXl6b&p}i`=9|YA`<]uZOuӏ`!zIy򳟱N8# " 32?дe4vYa2-!Qv@c[MNt̪۪@x5=?.ѷ Ef1]@ponon[ BJL9 dhۣOG%3_7JL-{؃Prٍ7$<٠_fY֜kX{6C{;;~"e ,ixԛb]7.)aT};kI6A2DUo.}vH9ƄRK ǂY-۴Н=,e_Ix@#$H0Ii7Im#Vg1p:H1T42 O#ƪ{s8t\iMgerq=FZ"1xxُ^ǹ}ڥbRw.[8zRyY`{a/ ј}okX2qݵ 9O(EGsu|/ "MCco5 Hk qdGZzOUC@!VPyOo tc3`β/+gG4I 8ȻyAX)]r]ȧsȒ[gλce~EqzQh[&P'rʂur9aF DC\W V WVy"7>bȼwg}i~n[&Q4M˜ʦAu[Tq: LBdEe%7\vkx|-o ISs3tSt/g({WkvgSnԘM$+\u8:,Wɫ9uݍ{ݻl;ۮ2[\= o^:÷l3(Sl0j~xsTɈr4Gs_Q:QMVc2-]v_Ѵ 9rN% pyxjיfANݫhӻi_G@X8kyD *>t.uFǍiDwGPP-“c9(u}3Obi:r+GY \t*+7NE-@@_@/~>[c,7 ktx'Xzɸ|cO`%?#KDß.WwHV9$Hv쯒Ϗr Ns+rtsj & LK+DyV8&ׁy (WJS ʲvpq576 1*՟ -քh;xx;Z%k:` =F8.۹գw2p4(2U/O+>K-M9uA!\&yK1~H=B/4&_:cdurIѮ}Κ6BD$dޔ.P\p:Ң/%O_xJ6ABᄲGTA: \St{*?g9m5CtL^"@%huѢ!9ȼ'bbOk.FxSӎg݋S- 6xcs ;C'Kz$Ѝ'#oڶT b`ڶ^/um OCko~oϋO*YH#3V>ny0 FiY\%-:/VZb7z6CX=N ٷ/y^[hf+)JT:GGLﻐ,mxS8GצYii֙snPG >jn*,E\iޯ fV.OgEWgiF%q=^y|~(М#J"FQ%.T2 3.rsq-2~r.ppnDOsiaz9W*T,/S/A6&>Hk<-bF4),9Y&%X7ً4d׍܌߱޹/Esrc{N_ zlYaTύ}Y^煵4 ucyv<occCNN~;;2sK]y^UV ߄ݞ߾5~~MȿӺ½MQ#bZDz=FU)w@?M% ?[v 5n`|s!Bi|vzd|lfi DӜŗ=:/i[EsNHrQDy+xU34MZ$cp H q;Y5 1v7M0œd~ǃRta1SU m7WB0DŽ67o_%߻J~xZd+#Y;C"]2!z}@Lj#9ܧzDr~qzwgcH:r9Un^8+_/K,O 6u-;:!#kp\~MͼCc3sSj8 4I7o!>Ke͹լk9,} prrNNKߠ8hz| xz2}Y0R]Od{8)^Se}LKjTmY2Tb^Gu1&TM)5̇hF/׎BF8I$EU 5}Y=aK2G7]':*sȓ#G.qgmKr΋"n#o3~vAQ(^3ihXlt?[f[ȡ:6mǐ`lBczt q.t#}$؟-9ֵ@;dtkm2qr$80WKWp3W_mH[}=kÎ۸D׫sk`b-^=Ҟ+֪籂ϵSwo]<%AaJ)ytǥ]Ms_32XsMd KW&dPu!G+1kľ(44AsP@tojN.әB[fȴ#V(Ϸ@!kw[[FMns7, 1GuchKIO*H5D+D76?b-?ZA=X=?0=}gl}6F%@cxĆlF K7n<@|?椬sk(n}jT6 w։NNUIvI3qVmclG\e}]6ʘ0:aUR?] &!UŽihu;yDDI7N~b^:"_~#zl/O@H s%v$yk$^:#A0_~1BuFuVuNuA`xNMǢu^݂e\PmށBڹlrUN)jW"ڄF4K)j$Xx9DĺY[ߙ 6{A <1 X[]ld^֞$jiay\zvA {ʓg TԉJUa.8m +pT4U4U4U4+hB Hۧ!G{ ։;סg=0IXE3=oՍD\avJ7#o 2O~-+4QwT6`;p\ 46e[4}>hM2;@*wg՗>U9Lo\,hSُ_0c~GGjXj\JFRYBK`r_ia{caRH޷/k4rRGMaV5cIof,_&9k%GLGM$%j̸Dy=36qb駃C 82ޭ{p) ! Mepȋ/ǭ}l|p,L9^(/RLLʃRn4vAXPdJݖ>dU$//B_?dfwExXx㣄,E=Oݗe*^r%_cZFn-ܛݡ=cjsT NDUS2Ϥ0b8!^cP&2w=>uYHٳTW÷6,p7(7ŹxM|n9CQrtymgOs킐<Lk4gմ`iE_ʞp|$Un}=99 y^ eSSӿm_lprrs}.uK"O*{՗>yIgX zA\BUts952pb:}łq yqI›/}erչRi`$[O`Ybآ_|>\q#ʃ&y9nʅ7mSzH@avRjV3Ex$HGhۨ\v<]+0㘩W;-i,oOmRM[KGp9gUb5x|k'D_Yܞ{}K.d{גԒ%{$wZKHKy{.11˗/}||X쿵ߺu߶e?R(]QRRWXnQX|4\P0v*>EW!.l$6K⌳W_k~:ucxaiX(>-mǖ~> W}-z ) +T-^G5mIᄚR\a0zDʾcBHr5w|t xss"BDIbkQ)㌳O,nR/vg[űuCPfs/($1,#}npr2rW74#_y.KΥ]ظ ={Q2$P V^IhFmeken!=ylAԃ@#HP'V++8uW ܦlئcn;Hb~کf^?xqb:eT bpFy~%눴{bcC%E]G\ Q,H ?xGvkKzSYHJ!  wDW' gg (.[aLp }_W q8ܿ ""0R] ڍ;#~XF9dHס }г-uTyU}VFPy$Us-XHLSA{;pe _Ng^. -S#N_ c8^T~+],FB*VHgoEpXԭO)irV4=,pAGHuў7C-^?Rer-v= eN\c7Y]?Rav.^;cR/!'7Fm<@1Mܛ3^ h-( ʄڶj8g3\#=J ^2`[o54UERkkZ)0W 5}AuDHW K_ˬFjXz-dsmrx:+% UkR]v!#zQ _JK`~ZZ`lv;q-ZMrōT}L|MR~TO臾oe{9zct|}qzb=X9U4Oд(Yɭufɨ}&SA*ŚqVO}XZ#=bdo6]bPP`(VM+EBMSE >6w 6)fmx'TrWkRs?o4rS/n/m?謌LVH3m4WUj(=|ecՀD AA½iU9ܣq<,v& ˅{4}3x-\'RVTY:䯓VBײJ!Z >bյKm3FJSi'`Mi?RR(檘:x vOVgn0GpxۄBE k?VH/qu?Ӳym[C[3g4e5?@nplxQA{rZ˼겍w:![-8ޘ?d:t;@;eKZƣ%ͻ}UOU2YS֖q*wpHv#bMrԕq{/a|{B*DJEՋE UW-6[?U~6,+Qie1s^BH\WMtj㷿AO1d䲗oN©I oyyR$y* Q)#r{"^択O=V2L.gfȮ͎vfZJ){Ҽ{a!g0l9M:\,V_ՠp>X޽2cuZ͋וHe5/sA#>s׍e ]|MBkYJ'D]~8ѿ^7]!*cA=g[ӂM*c6C} mskd>fH ~a :p..f&^?RlsiWa+ԯ9*qUNcRQޡʧKN47׳ Mhrǝ#4OV]qaXjٻig6* ~_<}>2tqZk*AQrيGZ$)_<; #;Ϡګ~ۗ WhgdsL8'T,F̼;s/㇚st &Upў~`X<}7B{? 'ںi NIזntr|u)g"6;gBpV(Er9b*okrX.&nuGY6>uڲm4 06lMyuP--&"PW¤ UU V^gq/_CWd /C{:?~<\4!ܼu%y'S H2Q,ڗpm y2ND@2' 齻[Ox2d}&w1UVp 9XO NIѻT 볂g9t.-,%@s-CwYT*fǨGN&7( I Nn2MoA?VŜn`abm04W;+sTx9/jU;)<޹4x3՛[kZʳ+G仫X*Hm|>ݔ3\??f]UǷr]&Dg3,A7[qQԕ3 umwe!IE"52ԗMDVݾ5Z <$ŵwǶG78''eo2OMZ`YefZ&4|s;9љʕ[j d$sED뮷Z|}lKKowӌ"/ک}g;^yB&Qemk\@ ʠxQrpmꨆⴐJ@g@]4@/b[MtRE_I]N\{g1dUٙhF<- /*Db5|L.8/W׍{QU11g}Ǡ#3 H.JuN"Ud?s@vr{ռ7L+Dj$q`Uȿ-Njꭾ% BPY;q X5L$6Om/OUX#E&վ鷦jY/W%F^,70gųGF˾`VNJVaY]2zO`M ڝAt^H(J)6Yg^AWj}wJV?vsG$|$5Kȃ#{wB%.s&-%;ylygnǷۥp1XW9+x1'#چ1i! ΠWvhF57+?U#|6D2&/ u24RI\^v? Ϙ{g%'m2Owr#o>E4<(l4- - M15XGp}c;ۢ5/q1A!w3?^,6 X1zYjCa,{n"M5^;g1 Rl"MfYqr?m<-#s 0eO"s :rw{}A:gݴ`>\ʯT##]`.9eu9nddpZDTm|yÖt7<,O@WMdlP_{ہkTVD176Yf^eåJ<2o\[_rwΏi΅y֚yg2ΉMX> LIͭA_}6*CT{זS@H⌘D3ɻ̼lKDqJS9$q_$Ll=BE;x뫅.KG/i|qd'dhލ ƵrWq&<`Qʾox+qZQR#s2hEc_tbұn?Xl#-fE0Lou4 VIjV'aXH(.Ú,MSc#- - &&s玙x++kͿ߫RINzVRLő,,lL+ײEFG_$C3gH=JQ#.pK2!Jv[]yJ4l^UOТdž٩_|axѬ/|Z-\KX X#wX'q&'J8&Ò3/?[zw,)T[OЛ 3 ٜ;oci `whk8N+l?biSmghbk橝+SP_Ƭ/ Ϲ>RT#{ 6T_ TnZ}0s/I۟UT.fa?2awdƞ+h]4@ lup59!Y/ƟaQ> 3ق]-OJ&hP$JWm6Ɨ5pt?C1OvI斩%Yxz X]-pf8/c m >Bj8*aO2Ffyy;d:z5xduh0{qva`5:mt?w8L$<ǘ(7fg6#gL1M<(|̫G?~Q%ޡnk3:7/930a_FJav9 >KSq[UnP?Sn4e|wQ/9jzxy 5;G%wy/5WG뱵,uGL7i9P[ TKu6ygbJGYȔcͽmk"!.L`f`O'cf<^(]UiBu0ɥ!#HmgklOƕaMK뷖UVX~3AK\ !Z (!#[^ŏ1OZzx@i>R sE+vu?˽un<흷 VVd k-;NI"w1.,Bk 2@" O#Y\G*IΎ [%Q!<$P<}%6\$5jZ:q ؟h5H}|yӛy^n)Bp!?}K%U7kaw@ӊ"XV9;U}:P4!_PDZ?YCW;Z[w"8M>F)g/Y(7O ˜[vh"o-o2oy遵ie*@=mwvKJTVq>LsIg+t5 ȚW 6p8tAZ{Fhcs *DYkzV!6mqcJdۻδX CGhzD齙Gs !v6e)Lm&ȢĎK0uj A5FM/~P`(ocѫ/G,&Oe"͵ ۮtz4˲Wޓϰ~:L7Wp{~~Քǰ A_YilP6E\[+/ugZp ]M/QBݙu wo {cCveW;1_ca)aIaazZ1> }zm=+:SO4qBY_ f7IBOs꟟n-0 ajTqvx']'4ޤ[VtZR^~V]=oQƙ~cVibׂJɢ}\ /EwlZxN[{d& Nf譍h4p(gDݰ'}w |8 kFqr1~+;E@?{|c1gD,=fE a;92cw(XTF=H@ 8XZY1 {KiMz ~ę؄kg]ĭNF j1e҅՗[=zAX^4΍M]=C/Rd}DÌbMFnF\Ӯ|MΒNII)D1DgD'kg57^jKwFjxLoUU pJuZ|mNvdĨv٩BV5D1*aj: 42y=:x:Ŝ*U\2 #Cm"RG~,HU}jy CkvBvBBֲBցBBƙB:V1膲QI}g(XïMKԌJ 73 I6)MnUR̟;!=$ SLQ3pXvO5twkh s.m[ k/)J~oJ}O>ڒ Qk٫LS`nvIb5CGM=c5;?G|=mF$XWo,@@sP;NsG|X̑ S//X9CuGxdίĿȰw*Wܬ_jݽut{`IxNw34o1FC65j~תJ (muۧjI{X[n .l e kk_|"MҺy~zO})Vw~0qVe1v-F== 64#ahHt`A  dJap_A6l vΊggܞJ{ܗ'obݮk(8𣶱wyScf3d[z_XJ"a3 29l,d)7&AYBF@xdsjEalqާ ӿJ%:y'Yg2W70ԛ8 o^gO+Y]ykY>a eV۬B[RkDK%򶥳2;b sB<찪W7]o4j${X&[[h9>~#3eÛY iQ"֍^yGXf_@_u f( ȯf! KF$alu}"}&j勴~|7>z{uf+zlZkEON;څ;(c;PZ־\):&aH Dݓۇ k\d8\ÑSom/n^#=>RuvGqO48\Wz2S4r$aP$}&}GSToڬ]ء(9YcZ=mVV/R/ȾɓCt1QL\%^ǓaU4 b ωN O19g*y8Z豎﹉ 醙M>yv g9?Ǥm]~m۶D+!.'&G~h=Eԍ'-bOSm%렞bI9R<{פu]`wndyH҉J yiyU]޸?=lw2acuZ*aaF7G5Gǩd'G9<1zsO_lO]!cIN)!4{ K! )0"{;nˣ5>c[EX{'UF908%5k UDgeWNI*(kP4kW%S_#VPAO~cĚAx5U~3T xLXdvZgY}u[3'MwcěeȶO"5ih7FVqx%Ef(7Qħx *BR|~342 hERZd9-ZCgd_9 F ~ )I 6܍Z5ܺ3}UaY`WKڒ'iʂ/rAWqqPlHP^-BSNR5']q8'Px+^~Nj}BxD_3b΋j}xGQ<Î ĀK]Xs33CҨ8igWqҨRK^xUhʲ_rª8-hUj7 qt3(UκN-Inm5䣰>o8l31c,hn)My j.k Y.[λtNqINPvYowDO<* ڢZ/)Ԡ?\LWBw"&XλǗjs]EJSN2u)H$ B۞9{98E릙GdV+fObbxV'b4ܨXMAxXIJLexcpcPQTrjHgU@ID~|VjJԺ_ͪ}"N/<_Dqu6}?Vr# T]ƪ){$ uN]0|8N݅A{]!qMؗ[ҵa&p@prUŬͨ4_foT󟁾.Iʻ%!EsӫT}lԋwl_)8V{k\ZOTɩAw=Lv8GE_eק:ޢ_iu܉{.3"#, Eu9tPy*wݴ uC^dTtrYɡ x*}F'ac=/;lg]COo|zIa{CfƱX% \R5w;/2."''Zo5DRnT4Uyq9-jUG 7]" )(nNpr.2T"E V,^1fr?6ɯa#1:I6)T AsSo#X3F5-U)O!':J6bROJx2Jaxګc\S#Z)VY@&K5:CǯibG1Y(O4U:~EQdޯ^B,T#3Y'Y2\<||HAH^L޷wb>J+vgWc7FV{v %"Z~;DZi K㳬g@ l@tng/3& 7y/O56Jҗ׾ȵȻ<)y>PcrޣY7Ư-6

iyrxBx+ 'pbxlozlIJ8L9nOٶ#Җ)JY| }KO 'tffF۠ݒqJ>8cۇ\."ňQd[t;۬m78`M nv;M"pE_{湗w[;d~4QZfaÉqDTB\>!M = VWIiD;pHŖHGj3h,"OAq-W:˂i%#LQkTǭ)yz& ܫԤ#;?ૌ6F~69ʥyS2Gxv< [M[-S'8_I*s }rNA wdP꟎c?ֻꄮ dTU0Z ݽOxöZ{ruÃFh'&bUf|D QN1ڥ:b5 J w[GL>E~/ 87:6Ϝ/ڌ|VލǸ:4UJ EpRj>WfeמW5ũz1m=?8L’"qrCznhk:Y],"3[Dj+I 's2*S~o%8{?$1/z1azGsFP$=WCd3Z?"Lc|UaZR_3r;#ԝ"J|YS hWn4LKu%m3دœr@,u_+#8-ުxPv Θ7)gs~4$W)P(dT+4^<cҨj4 __]y2[ySHQ5S4dun0T*yc8s`PX%{yxhsvVɖ_azrbڶ\֢tBN,K6s8O;)+l[BRaZGQ*ODszZHr'7km :~LjBTIs~VQhKC Õ@dRFD3eM?QܣW̑PD"*c*,~"\LZ->WedE.w_pBh@j>j 9:7 fTb`_0&l>kQi"QIz c:Xf ` Fb?}!wן~nb~+6Xj z#+&њcp ?VH6#}8n[n?G)Cb"x=k EdC#LD)۷n0d{u5gPiaihQg~Fͮ0f=%dCWk$Iۆ=+5R*N+?mݡZ0DܰȞ:oo5ݯY3^KU򤡜#T.q1 T-,`^3 YMU/؋EE3s-Y6E_xjU:\VܑvKA is0D/b+]YE#1M~LsުVnW)hP(TO#OJTYLPNlWȐ.d釨$C8vʞ2Xm}B4[V_]-!jY?bm٢Z?I1G12Tesg]]$OdZJv\aXE6y apμDڑl8ZI<樂kZ,y^C WpΛil@3%78W݂'Ŏ뎥ӂH˽c93R1KꑛaAG]:1&1B>2ٴ7WY zaё0k\?I<{ī㔳_#c%:aۖg'Rv"mEE}t,1vw+ aڇ٬ͩՏqwu'UAFanQ:ck+˟_N :翏ù52*DZټ3U m,MK2jQuu#v)&5'('v$Ԩ%iħhEOvU S|CU=4_>Lν]~ZxsOEYd`xNXKHShPK***Ek̗Tk=l :A@ H^Wb+5f%>)@P42=U(]0]6f~ aZq> 2E9b?i5#4FV$ѽ\Fx#ic[}e#.JI.OgτWIF~5 7R "r4΋[[n<ᐝ#9n:bxA}9cSn]/D [#=Ïz4A? * I0mj |㷼Vb.>:DyJT|ػZ btޥH9 G&4#Qw mjOٓ%24 +G'gI] b!h[ui׊eɐ$^=ӹρ{ gs,% zX'v#p^|@u=}YisZ^$\xrpU.6Wh6Ŝ{7֞>lCZO_ѵb4:5_6ė\gU''Bk ٗ58JnwPG!̈)%AѱY͞[r ! w29IM3Fx3A>q1T|cepCСك =lqEr#*@a/k>v-tpJiB$^W',?I' ri{^aCzU}W_ӨK5j1c {x%zs Gޚ-rk3 5bN |>^m:Pasәti$DŽ4_ǜyެ,\%Yyď_wQU}g:QˣpcGc  h~YݖskK`_; ]߆pB!~y2}/ ;%[S¥v.J7l,8^0}KcoRrp1?Q1 sֈzP߫9 jZbX.~zo 'Dt0 +iA<~L$|Z|d~-t9mFma)~I>ayjgL0Eg;,fIsifoe`f?f='WlX<="/,VJ(s_NZW,ղ;rVGroT440t W)4; G{ɏzpޗԋ; s%5Exڋ;CRتZxnԱ]Ԁ4c/z ;6X׺n(ew*Uu]?s_gTƚV=]>~ D{(fFߖIއ-9]D~ SD}TVcXtseݎKؤ^^TK)`|ɇw ߖ':I8sx4IdwX{]nHtLЭt>p(dm@W[q =S{~:$k{@猥kRt n>>ޠ`JXUVvLmo9sThM_x[5zN%  c__E6m\,?`|J=1r-%\]_ƈ2c}C07,֌ᇬabh>]1Kdv\=}6|N uS$Ot]-ꕗ'2FYrwu~kr˭y;'|^G.@[C@i ANRhWga-,=M4e]Nq>Mմ^.]Kg+ 3xlp1x‡9O[Mz&)hqjuiE`Bv*t?fRi}e0~aqj07)Ml`^J}H}KC3EE"GomHCy+[;F%3ѿƬ77G7zw‰R_kVtTNW]=uO7oiBtCezbC-yaNz*:Qȧ+]&JHG҂[ڊ/0҉ sej A<RNem>[p  "H.ɆJGhM莇iDD3e.Ģ1.(K-O,wkH³Mn)N V:Rw7\f1يm e?H~gsWBd?Ǿ0BKbk_!, E?ud|jxb1NXSʧ,)h0xt]QB@|`ߠ!K s35FXFidpNGL' c;WoG7wW7g7{o7TņTa ahƫŏÓJIʼnW95$3m||,*}M'|L}}}l|˒DҾdf?^!U`4dvf(ø\8AMC'kR+F"sxo--Re8B~xH\3'VSX_#)g-^k٢E3+:x\?@4O)4FW8F*KF=I.f 8 `>%emKZ7n ttrq1V UOm[U/gHb4%qcm_IdEn+{`E\ۿ rYym}‘ҎK+ΘRlOf-P ><${@0X*Q.7fu ںVhp0J [M@wn]0c9 c^ӝ/}<-Y.?Pݚ-rk[hc@ s>~c3q.b RX+/%:%ᡙ/jo#KU7 #3,D9a`C? %aH쾳u jW&7>o6 Qڇw0 aCoLƕ'ey˝JH׳&]C2 EvRGzwko徨Ir ,0ʚ #MdK^n$ԎeB|&ËdW< U{ R {Vsdë7+=w:$;:.tKEZ;h5'Sy^j ]*%3dq8r qLQyΕx~d)9!XEf'aU+Om۹|(k06_oIMr@!iށp?Ѳ"AǓy>kA``v;#Oۧ<}F5G|n1NUSaj8E]=6}I`?SK[JB nzH|PQ,;E'g]%WN7E&?E&0E0EF>Eĸ\xWWf鼻EK:W"ֵrkt32Pd3HXIk$@ys^ìy&t՜ǡ<Ȯ+@0x X]i Ap,!WW7_l,^揊@y>2×\{4OJW=/]LlGF ޠ)UxaaXvMLudEKem> Ɖ Iڝφ>AsĂzƗb9?:nDiv-QGO}~m{|\xC5=8(9>|R0"3#]<+\=۴1H_D6rA+ )ٝZiYOyB\yswE[ cym6PKo+Du.Nn0oKCc\bs#eNoPfŐotf}&\[*Sd5_)Y[;eg mO#c?d:Q} Fиa)䱿AƎ.&݁f9с>^vQ:YɲY~})"$Ҽ/Af+bzSȌei.Ęo*p5O ֭0ŷ):d8)ظ89XxeG!yì,#,,,U,(簚 xN+Wji[8b߹It[boej^:U)G*]#t3%|+UnO2hB1!N)e nQ}OgzqMd\z*%Hd4~~ Mc zXVzv~)\$a+3ox&h26.IT!}oǏ?@aa.^=Z)Q<$SDشmx©:]+?z|c2L&ZBg^kY)[Qd=Rw9Q:yv! qȞ^T>M;^ΰ8׌>StɠGQ:=һB{*'rW$BA cf䖦udX>z/RI&j>Ji:J49Hv]HAx5I0|]yy g)mO6^L1ƵߘJf: b0R-3\$}\ ܉vj9Jl׵lKl(khYLnO(zLT<3K'6:T:x?uVap{a5IUuS-@;){\w}{_=i Ez[5ڒyLPKp\an?%i_[iIퟣDUS<j_7αEmkj\EoY!f Tw+lDlke-IՌs 7y[hpz5HX 1 +jszd=iэ/4^ 5y ْ56'ʕdzC-'/%.)9-;(I/g ./@h?ώ,<ھ3yqU/.1RKӒ ,FESm/MibXk#kkkkk/k5kvx}jN)yLC'ԡC8KƣA+KQRܒdd:d%OطCa)!+_d8/#s4Ѩ)Zb8 0|Mzgz 7b.;A63,(6k-jJKOdN=L>s[qkz2s:{($}e򃶽<#U6#_c,jZQUGyPŗroommCI Z[zJ#3`e VLa|nrfFhekOےy=`zzWq_A4k2O JgD?D qR)l !,+ Ё7ϟA R@ H:c-C6s}PDi&_ȝEm6  x"yO]ъmQ~m8g:S39<-=.=J=G9l)N#Ik[3#{ ƨVW w(Xs.îѦP@r9AsM^=91/}Q*ҙswϟm}`;7OWN݀K3Kc:xsD#L5SuM3c};-s6%³g')>^f|Sed)7 '~72Cؼ`˻FͥoΆ%Z riK!3#P |b U1N3=`yӢ0Q97OV&_l=M8Wp(Tտ Gچɲ`g$}5ʋ=gt-oFsSoJ\b63BQ~UsD0 3A .yK@"PE@ P2Z쒷挽!bEKk8AeȀ~t "#G%D7TZt#_~޳^w@uq%y)vBn8cF+_Ʈa9"g);CdJF]lKR*3 AգX:;#cטSXgwOD?aޯ6M}[mVb+`/(aSh!~*nT^bцk,C0Eu"u\k.Q2PU -Djˑ]䁆q][9XA@A|Զnl:弞~H4~Gyf|ã$P{ ͼY?7[m$GpE3 9a\X'opqœ=l4F)N{g8'8VaX[X 3Z["o>f,{ [)d>yo0[o 52FHmwoɾgllׯ_;::l@ 222>ŕyɮIʄ41Xe,BPNh,:U|'Gp)n5-K4Jwkh.!Ucib8o[*'jT%:K%36b>>(%?X0]7UF֮ο.UX1+Xi91!h.[C:N茤+4M8 8Zw{7jUE-H.W!ɔR1=;z sohhK꯺m3xϢy$ I|](UhE=E+MVV \ vP50 MEµ;Moye9)osoG=?[؛X`5 U[iIY݀ycE %[7`x)TR}e\HBqǚ*L\U_{;X+j󋭪N^`\':ˀ9臒!aW z`/hփ̍ S o3 DeHV>eȚušp?M F%اGi }mO\\m "Vy㾭b=ޣuo٣Be3=JUjXh`E MYluI܅nZfƪjnv!3zҍ!?hw¿Vizݑ3wo. *kcmdoZ_> g ʵvK_3r7eɦUxjuHLk/Fڧlm@qdY53=@E薛Oww;6l(7 |Հ ` E.2W( ٢̆#|ymt%n"j̟S]iԨ0us6 PcP5#KyR>\xXWNq͓Un%|FNq 1{qq@YwƖJ,Rfvy&וł mM3π?&&&׻pQWWϟzzziš/ZAMF=`C?ex<}7ӣEZ8 ELv4hDJH/O)T/n43L:>nCjmJ )D70^jg*.6 2 >%aHKUPnTmR wڰ8IrfȀԬG\MmoRnLv.)IQnd4If6r ~Z}^8]ٛ~>8f|vHWw͚NS D:58zG(%ˈTC^ 8z^l[Єu|z|tgʝ.;\\(YǗY-R\"טk88o!_,TcnehU_̞^(F\X4Xt H};a%SJ9}0rمΆ<(@(oWlT%=-eumW2m2uoJO$= %0q%kFG8@%ɡ-K.7 9n:ȼ e\j uD)vx*N'uTH#R<8w}W u3%lxO9*M04RA<@5k5Au.m5w?Z;˃*Mba9pmSk-S[#Tfl[c9c_ oXYWuEorMu`tKVJ>;dg`kg%'_&F?~A P/T5?])21|~~)7J7ƭ!-o~tF|Rr炥6"ak䯞(_l\4a ; ?֎+ A)e5~~Fh >h7#h::hj4G'{ֵǵuunwϿ'FEʮx4(”JaWVwe83٣;w5!݅n8Fl>Yy9q܆ـf. ghzvEEUفI%L4wiFC w3OS\GTTGw6?=ŝSr$+Z{.)4sM&8Btێmތu&:=05]h :rppK>S)o{/D:ɖkq){L~MsO4 d~1UA^dnTYRZ_24ŠzM){y⹼I௃g[H4s#ZL; \-%BȚ.1@fe0 4+;qHpCydK%=AcG|2-`9p?WdZÝzC*_@ ( ,C`rjj QK8Od9{v0h"|yfxɴޙw"y/PNRWILM$Ejdl5y^絮uMgΝ;xxx888JllڿԠA(d4t]8IyOC_ױvqNH>epI@J%v| z}zji!qfU>c;bgB릊c,͕󇟄؏? S|1Tod}ý xiKɧ**wi!B }-Nv.W^ƾ3CP?XT.^R!P1SbiUWpQvTR('WãwOhs|+v>AbY5 e{\q[ k=|YeGqՎOekkכ $-*Ub.}(h.Uq'_>Wt>,|݌XHkMQ3Y7Oo<l3e8-Jw~.#I[ی7AyGn̉ q5Ε!CRqk9؇dIֹq z^ ; {u?!-sw ̀;Me*wR7Cs9X1N4>MuXvsWD!4q]9WphdӀmjXg͇񪧅]?T6¸J튝5KM\XC)SO˰kqMm;UuYfI0trABg Ur/OB$NS٭bcﯢ0e8I֦s 4NuQ- s[zdJN\#Z>Sl{J/3z[Ug~}C}>Gمm8d-;ʹLBIƂrQR8j_y8ìm<ͳĻ}`Ļ 9|b$3>C2.q{ 1]=7plξ]򘱬l})iCQ(Bn&A!C$@ WR_~oMw[oU_^R`XQjPHnE30ym6Tw@Wf%Qg>jAznV: ˤ5\cXae.  @ia]Zȿr Ÿ`^ab>i;l.=޻z' E-ֳkK* ,:ͦlM.=e+>k@Y/$rtU 4w2p> =B$-;XWGTyVZW:Tt%Ml6rȏSDE9ttMyk],///++SQQɓgKukS {8GKo[0t3AEeZkN>tP(z!e#5=C>ߟT-ZcO\ Ɛ=/9C{ }sZښQ&~Ffβ! &L9_ڛ֋fjo؟\خ8(%%VdK\%h[]=,"& ]k,r}t"%4xnrɂg[~Z`hj7h?NXm*ÄNNwMUɍ㨪{6G?إ>g~xtitpcD;Ç?jxaЪk$#C50%^I'2ɠD:( ;(X/UWW1E N0AeOXGJߵBG/2%Mj[oeb߭; z41Rg^{V3QcʪͺǨEh^xu|\w>uanQyUn-.Lx[8?>m[YTeۅYʱT i-H&]8Q)SU%QWNW(W ck1X]+AMd xN313/ XVﰷG 44W#tRIeo}ܿvLtF<|2 >Ϙ3t[l>U>3^ X(.397bs RY8Qi{| .}DLͪ&T#;#r^@&[6?U D+*FvX1o [(1[й@w/@i {'VJ1 >6Jwyiuzk`#&⛛ ݑ Pch`@M1]{du4UqvH{xT==K: a`e:^ǵ]2AoCXɸ4XsxzY E?ʄRTϊg,Z SvfwK}:bl\[xpk'\ 2Id(Pr6L=ojm&>܋w{Vsٌh#,.2yv/µܮaxV6uO0QX97ʑM jB%׋%{jPws2d }t֮sv+Qh; 0!ZӸ 18wq@v>MXn,< .5gz@ <0L} Z`7Oqvnm©ç4(& 77Vaxkn̟a onNjPسq೓o}Bt_Bj.(} {%_tv0urj"Xٗ]-W/w^?\R#|I_dcc bcIܷϯZc]oQ.7? ȟnt\ZOMrrreeejjj߿GWjjj #--{Su!'%,*yֺ@W2=cnO8q Gᠪ FsP>HܙW6|KET䐹G3}9Αv" ti~Цp0hأIvc4dR+\6#PH]QK|ػ[xkYd>q|4-I4CfFU̖1(vn)z;0~6O7>ؠI[9K}·nN4&_Heks21p;0;3G.0P'*5j51/9y^}\)CeMR6WDhNR,<?[|1(;N30|kTRۦUyֱʍʇT ~Us3= õ3?u0&"z DL=n[|l1)٧Yi$ *zTygWkSSY.?,ID9-ont?OٔZͷx>]ˣ4CN_~8E6 c1yMg脦*>ht?ҋ]{S?kЗ1$;1tz9cޓCoKvy'닞a\ެ;&܁>Z&>Y![%\}4loRGZz g!`Ϗfiκ9t-0 r@`쥂ݙmr1чU^afx;װMP0V֨jP [SjcI,`77ߴ=nM!@J(稘fh7tusRT}M⁼璅`X]6KnX/Ia}!Ey6ѦF^6" 6pIܡT,-<,a-^dϐ~9] =swr\prqpʳr210t.|tlbh%$9,3.8*3zv_5Te3dOV /3!E)Qc-TF|gVK-&->]1,(\+,V%P9]=Yě:N: Pr2q1TpWLiYlM=AEb$>m,ۤj5[\cۿLk]Zw%yF~NoȲuC;HZ9(;)WBAϘQ9gāΪ?xͽvÞEqh鑇ٹI#DKP-쾝k\C%63N[rŭK9B(8tuKޭ?HGϓ7ͼZgEԋ̌Od֪? NT uLVSMfSMFQMzQMRQ4z׷ciKתuOsy pS$Z8{\4gT/ _/cզ ZR&d7twu+JxfC_LŽ猄XlCW5rۊ@OlnA]5dzU+Yy S%.XkξnO$Rn}kЅGՃ, gȟ ǂŇ?{6hgbބ,?yUww`{ RDZ=#n=|S_xWr%A()͂?uG6L fse"tľ"lDXC,6cpl뿭&7ϗ75e6mlz dxe`?X[#96A;sHw9 `Gی`;EFٕ$KW`$B{q^nG 5Qo-"{? {o\$\.cz14w(q[ֳO)7а{ 092kyg蚦~+֏kGMa}5Hq4C` @ J<ƿyBx:kUt [w%} #>AWC Yx׿M>_] "sw#7B5&'&ጟQAD7.huAk]Qvk).x~?\[Y4c1nǯ&FiSbPc%N{ЍtMIQ^MUYYI_0B5WWW,,F6׺ֵk': ڡM픨JPx> TA;H?ԥtĜy"g-DIm]tmt3?Ke9'۟"]d{ 1E#1mY2$0>9[^/ɠK>D/?k+ihRHu,(gw/1L{k7qGP:97&oRߌPeJWQH %CGID:Z/Ǚaظqᑏ=$҉2UPv2Nd B 6J<}]yg Q̕Ovssn֤HK1wi.#yB5 *Ɍtɜ VF*`9 ǀ 2ql- e3ǩz`T[S$%<Xsrgv3G+k38ܽ{۵wZ{c)k\ v`4yί !jq20wKnwϑ_x5_|-M {Xxfy%]ȁ", $f%F' {xK7}B%6.#ԟ*el1 6乮▾>a 1IFu\ QYw_60OoɖG _ep_ NcLIuS~oul>h\&g;Z>[ileu[؊n}J~-k_';?NWlR8 9 =`={}5te,o쫯3g*/=[Ab/bMb!zՊv[_MR,gsu@JюXsu별%m*ѵGۋ/QWuTs3K ;Kɕ>'{si47Jo#՗ߋ.y#U7,";Y\[TklMByGWҹe=Y9Z',G 0›~** 865y{G˹xnyZ׺&<wwѷX7H2Ѕ=!*fhCvz^W;8@̾捉RwtUKT1}fuZ-۽ݪ1uJiFa?Vx7ˡ>7Zd/L1XUcלeM=S8\PAVµCI)SmʜrF*6SuPv!YP>.nځ#o'q!6/ll` XO(C$R T˕E̕|)yij)"xEU([lzbW<^k-P'XkL϶ EW(ݲšAs4LͲ@?y\2ri|bvsc3[>D }45,h-%e1p0Yޙ+"X ] Y3Xu^I@ Aq^l+?o?C^1uӲ1 344t6)v%6fIrLp yۂ 畛ܞ{& r+Y" 7#z5)NlFͺNa ̫YOjC;jjEkձLndAۂ.t}fNK*(&X_)0_uOXuF~;kՇ* |Da+" WrHg)fˡܩAWhdZܽX{ r{{JfEWزj /P9nq̛: T֨$574#6z>m;w;6XRX-]$|Fi tɸiD~:'{>Y~à ?XV%]{$.{Ї=~wyeOCyXYw>{;CB7MU?rhspPE8~|ꓚES%:`$Kd9ff~l-EKsl:]d܊%ܲ(%&q>l(Ij%jkb0**OsqʔHTSe,;΀HcCvdIkDCQ̥c3 PGa{z_Ct-6"6r2IWjNzɵԟJv:̓ME= '_FdsCc3 hJsDs!M!|ym#mWtƥ3 Fz,Of8̘þo2E֫'sцRf=o'Z_N}‘4/ڨSXgD.32$7H*WyCr -˷{7hvN"i߃}xedyr_E !,WolpqڃF9MyoA bppp;>UMk<J!aqbr!xKy4lsF.%4@Od XgN8)N]bOܑu@dd>Wdn?FW^.=Xg[E6=NkG# V^it2o,M-*û8Kh+N9h;U8gܺ\|w'[zd- G*j=9}{~s%0fpb Ỵ>r\&&]D{GCgW%b`*ntDYnk ~f'!Vh-PF)퇭E6}ιGQ/I*n=+-<-+፟SUkJ>Mx!E[7PAX_QIW#yP&]矺OhXJy2vDbvt]-\.e糝qW}>mp_/._W_3tXu0Z[3ʂ~>8cF5Ёm`;X<-,5_?Ts\>趠Aek 9Wt q:SjteMG̢FbJbJbJJO}Qe_arLeWIOc%H vlOW:w¹=utS?2#ݏMMPW6H/Qܕ\!E|ߕc)mu8[qo֌Hߩ텣U*a6 "ϼR+!+ZR2%\ׂaށiOe)ߺ3?=/s^QpM{cU3GЗ(,i+B$P*zN6L.WGU@7U1j>qY2M*^l{p|!UAb0!lJ)`G}Rb'lYnn"7C&Q!O*?F$$7/W`pXDLf$ SG`GXye!`K84.݀Wi %lU]%{Pyű$5AK:PO=^sw0><\'y;MwڵɃ\)l-ӴLw5p3W ^5]d2̶SOf̻&B`jV{R?=aTe:\f`7aP/]*U.Q)֐-[Ubffl[`R)ۗYI2~毎b1eYfvsq;1[wcO%%e&=uk< ԁ .MH2wCۦ2Gš-q6=c/@UT8/S/rxΊ//Q_[jVي2~gT w֍~\C|< GL#Osv~ׯ Bw6GVsn1z)^l߽9dd${uv =EI:rV<Ɇ v6)[UʔgHVe+7v[ {gUuC=nNIWtL*kdAEP7xɱt,ќ(}T3sGa0PQ>FfY}@c0@.`KA koH#Yw;(qAadEvا9=O.T /XD4V1w'gɮHBo-Ț DPޗ"]; 5l(x쀲霹+yzzifB7eo\a E8 lX). T22X0&@0P f`<{k`3\z~ꉠtx&W]'^ r @MWA #@?Љ4c`b`0`݇ ԝyl -?YYQ IUž>ӑgjl zg~ӪY+,30#JB=Bl.XF9Dw].(P}!v C +P 79al9r\юPP=T}@kQ lS/Ż/wnb`ca~J.gή>qA |cj{oG5$$HD @5> .3TpSUǩZ޻^_ZI /eooNLNJ4G1A8PpBk#ol+6]-8Oz})% H< Rv@C!.Yo`bZ?.*lŎ@?g?x/ɒExQMKT Byhqg5>o0U L/ ey+8ݶ;ǷZpyR i6?*$#<j#4xEiu{KԸ%ص|G/CCtP#Ï;a{ߘyMܘy>W\=fJ;Zn%)#.5NôBtlO/"&[ LWp@#;xIlr,\}2kIlɏ]a^ǒE/5V'jSjڬ֩ѧ96krnatQ^(RWd'F eD9Bm {XzZwNP#F_nN.N{^,Aym l#F^tCöAY=b N8]<䊌~\/I]TKTQTBP|v2pΠZRaU8A-9{0Q8`fczYk!Db3\~f{e֌Amv@Y% Vorg^U^2A89oX{醣Rser~i8(C7.j1:mȮL{CxKijqd~= MP<Ak0z r%#'4ulQͨ);ğ5#R$оibbgV] ] `N|}-@#4@@;ݭAe̩ЇmbU6Jyj >ŮBT6/3$MQ3}H tv3Wiq(nr!dW$3`I:cNgղ֟C Kƺ qv2N -W5TUDT>i~=`J3Σ݁*11ʈh0]d酻㒭ۄOqHNLJJtNH;Ktp=gOv7 u m1IbZ#R8^#%hl`()̚ 7ldh㩫 4)QϝMN͘[Ur7d@,S)MUD.!Y1vɫ4B;5IG$VrWFQ\W+`\byh[dU3t#_Ds4m֝ '~6 /Ï_hSJ6%:Kut9\X;~)R\ޙFq4P̯k$[b|KSL"9ꞕ?҃cr BCpxnJɾLRFqɅ՛!h@_?+POpi50ЊPKubJ!k%\,_r[x]ˑt,46!CՒ\±^3&GF^W&(Sf`v3t@YxꬄO& sW.&i,kgFhx{:9E'%ɕ36Mbj^[|pDBd]]G)vuS9Uug/:ML!%:ò5zRrߧ71]0v *OP Su̳Wo.ƶiI\2X!ڟ$'8g6H 0c ;d2,?9y6fkLlXu69J rf~ {+w%GP|t|Vzv]uwB[pd>"tzhO.\1-Q%1ֺ%hX7kKGx[y{exVzty3oZlPnQ}OZdMSr|GVbizC48'q[5K0"!! џ;QOt O4L(U)j>3/d `ṬwTa*A9/oxQK$O])^XURc}L[ːW {ODnҍM/u orRn߹~*;t- A/uTiX$N3 e}%zIOk {r=m[BWQR=SUtLozDʍ٫g+{;'{=ˢ80o}-ScDlg眈'w)߻O7pw>Ñ=;ptiㇼqq̇. %]d384"}mM\:*þw!h A(.>T>~jxSM اe82E5bhz9yA,ϓǪkc9nrυETOX[ w1L=~xl]l⣻g/1^\B^^@sM91=]7p7 o<ekO&?W.D9Z^kϱ^F>,Ч4H#I8uX&rYa^17m k8 {vc/O5::1NBT]^ ЎPN, Gm[\h\)psOЇ^қbrckZm}mm<@ @;ݽHoaݗ 7-ю^N53T/ZINo,AN>N.6aE$ge(L[W#HLOi7M`qO PͯKAoMsEч*·:G61 )ZcYKR!'ZƎ63.>=>VNރFc&f n[§_/k6^/S6O|o] VF❨2;U)hiyZ3$Iy}VN*@J{hRy5Kcwm; W=#?Auf|it3M0T3z1*e0|N&"[0xO]L#y 򰛙 rξ~󤕀=KhMYr8]6GI\ XKEc@ݠp84tɆߵY<%LP)E:Ayu}Td*J"L"}_"cS"sY"wE`UxW_Cs)5ݼoMEvn~ʶNrw6]= ߍ㪫x=' oZ;e@@A@db\O> 4\5KM- 22rQwvN*bngf 8+w7Ga޹ֽx:g1퀻vĭhRhz|7`@k1Q'싴nv0l5s4XUEl:*f{Ur$W n:hsVOeSuIIU 7[6։>VN.>\g";}p{~EC)w֙HEW}I|ۥI'~N ͠c]]uq&֬7s!ҟ+^ b'guw @ÿe>Ox̔y M-<<5C<$y{ :tjuo9peS ;R<ujf\$Yoy^-vv~`-oIG?=?3X^o 9yw6[pd};tul!jvf>y߯~"K$WtLLhGթ+e+Gjw{ ZN+zYiJi[TVŪWFVUZT' V:zGg5XPYYX!b)}S#UOJJJJJ;JWʘo5sUQ[ti:G~-SBuA0ٯU4:W7#Ĺ6[=wFie4ۮwɕa&^ &iͯf0ѫ:$`dK6x;`_c:UͫJy,i7?oooDo$r &N-۽uP7JDcG y~RXT* t|$+sʌi/<>HCWo JU"-P.^FJy'9akv"9l#M]Ovn^tG4 j8D-OFɘ)zge㠖Sm A<}HҰ͖&h)d.f(k W,` Hq~¼C3,\Pڮ0po֯ssvrt 7s}#Pa5PqMi_^dm!*^V@ASNzjslV/R΍;{Y&_Usk{HO'ȭ)(EiC}N^_L:B_›9&FQe-Z4sWlS9O*&D L1ov0])X*w~Kj|nkק$~>-;:Nx39ŔAbPy6-FY/IA?n#ߥ@Hg|MU.ܫDb=_1(܁-1_륬{3V.fBgwvqKMcnf+[Ttٱ n=*2Qчk;xK3K$sS3s3$YY¹UƲ#MVX3awvnŅܓ*+vh_+׿BHM*u4XdWWL F/ Ѳ6ڥ^lN|0֠Br{{nn/V󤑀v}Jȓo pY1Rq77^VS9k .4Q@ uLf(gδfGͬ HsyrXJΘoApLƗ*6" ^"+!NYzCmu"j];^`R6;;E{8O{V[@췉iiiҍft uCY;`5|5F^esz𒶁xH]yOopVAik5)iOQ ps wM(uhuYn5 c= Prj3wiMKJQ=#GMЦnlI?}3{Uo 3$}U\~'sc}nݗDIu'jb̭ `ETUo&zfWqWΟ M;C/Эnu2tP;A$ڋ^M'Ž݄wpF^LļeST @woy_K]/1S'<ϰn^qVP{i }CSH:Ry@$ &%Ah"2rYr#r`͸H89}$z^8&.! *I+h#Fu%u(V>fms KzH\x=.R"@>@)_+O}}-y%$oC ,}m ]=ݝ'Rnok1ŷv:վ'LEeȦ{77pÍygVa֎eZd v?#R%CWlkUg!р,pDiW@~9׭_|{~-l~h1ZwR*]VwŲV$#M{HA~?}yxxBN[s--zd!s{ Ie9"B嫈uDzB9XK 2xp^MoprX*4@#[l&dՓ/d/H5mJ}ͦܓ% JC͜-ƥo#344U j nimA_ry:Deîwk~@>v4F4-$MnQ/w{ha5o8ek s5207pT5@Y XհpϹyyyݡ}ҦL;y}Y/QDmǛ[Y8[kX+/U#ϯ#eS5Mܫe҈d)'qP7=h%ŝCIkM_g#]9li,̿VDeUKL]G/I;?tGb"FIJ9oۈgωejPkxZHLukʤLޜPϪe<9"}2Qɝ}Côp;KwN7<~rubxÃ.|HbvVH$Qa ls*jF=8N7A1<[xԭÂ;_G'iև rqWILIlƭh(6 'sqjra}dp~&{ Znkۙ.3׳0wQ'!皁Ǻ+w PooaOB+1o93< ~;buh~obzv ^d=Kc'̲;H&V-y1M~K.gZ$wҹt܉BҚLY;OW m5mkp;M:TuS%gGj}U󭳖{8mOF2$6Eβ`[j/ƒ wN2T>įu_(XөslPq7K7UEwwVeP(3_3_K$ ¹QXwo[\z ,GqX+<%[y1tFyy=wN4rIىf"FI6'`X'3w{{X _ȟ$П .F^^^\M m9`At:_33=v|qS2fsai5D2=n]e:>Kݴ5P,J:ZhhT,[{9'dr;q*ZgA.} NcXl 2p:ɵ0IX ~P#8W(:ksX_tLfn}ֽ|IY4u:&t#,b]JɢmE۠/VI] O\]q]6Vgϖ|_gb]k+%h4Gʗ'gĕ~Mo =ع;{rg쯂>cM +R LTKT&.%I_&&) aj ^Gϥ~( ЉSqד*iVž. _ 3c@aycm&-wP C RVEq%K ~>)WmEZY')+b2ڹ:*Z;:%&eTrV, ̈V,pP,HRJx/7^C`ӌ׾qتf\ƈdb|TZp_x0(jS<_e }<^|@ۅgNobg-=O Y x`o>!?ah8SYmgin`&h! .%x.!V8-PUY/;K>V5I%C9W19X!7Wg[;+<ë[;4?eku=,ݵNB90^LST"}:f _^^N~ޗTQ PfS!YЋӲjGDwM1 .5n=>~hn)孬$*Y!-x+kWwMKQ'e$^$<Cl>T/Son{ gw D0炾풹嘥ia{ mxva Qěy]I/DVqU>@QL0ugJ@']3Ukm]y$Uл^Q^`뢍َ2T2\qu,>\K]{}JƑ^*^1lrn#<\0J7,]#LcԬC=)J!WЬ_\(\!cjė$wDs ʅr57B.C4GNcX,}+$Ǧ]iV$T_[W3Uʍ,E&xlf-JNیKg|~nP& Cm$Zr'T]U̱fK(+ *]a)PHqϪ 3jmeZ>1J ^J}T`l X?^ *n. }֢SeV-[(PҬma0/>iC̉3'ͻ_sڴâC -|L ~B6K-y~p"ҼudL ϣdx?3@9>pw<^I8uadHn3åhW^ W֌X \o.L7#Vƕs@ݴ ŪѾKw,ʑ+i^~{< AܫOW!ΞOUE-1F4?O&KQ'%Vie"C W@򏖑}M #Iz?t0[{|,c.He(f(ikyӽD ;!ϐ(&^M8Pْ o]+~8Z\$>\!f⩈-/u(6ӨޡWC!OaPr`yRwIġj΄H}ӷtEaz!"aŢbybe9}1SʵfOmbE@+ |3,㓥ԛ'}mA[}O ~!lל%w Ӳl=J%Əŭ`Ɯ2t熤N5Pld@?U.B!E*$cmܠͧ9k+fa=FR2*ZOZwȻJ6Ɲx`DwHnZgzq˴Y$RdWvS/Djq.sDAPM$n,<DXWnl-⍏vk*֧-.(ŔilTW6, P4p}Hl"r5dʧ)v9 jW!x}XɆ\U)p 00@WC:0,a⎣R>.B!m-v51<'pkIᴍ hYKY̦pVp6M$YJ wz>߉klAt'gɴujAѩ0@AM p %OiT̍}1A.i8Cd*\U\@s :]bUxLj* JM!O@7 u㟐E&sZoM]r5:jp;.:T]5c81IZ`"y5D٣gx{iwоA @0OlXrqIt||HL4׿S@;{?yPUmG2O^W @@A A_!hf_@߅[i&NaOnH_ׁ_@Y'R S=4,_睛't*c`v{:JܱV:*A>~ |  A:kq`m|sdvfOq#`F*[,@ iFCА 6#G8'w00VO sȾBЀ% >X=jՀ !iɺq#{#ܺ3<`VED3ޘ 7pcsYu!B @% www' 6 MrsϹ>w~=]%kS=Uo1?/ OЪ"5ۅ V VcV-Ve[yh J ÐapJzizl]$iZVפԷ5\Jܼ6PXB=)l-4 ,܈i U )mN= MUMׄ[\{6l3QM*UtGy2wxL[(T&Ӆ _Q:LJ:$g}oPwnwV8v9g5@,?+.g)kҲ} Ix!oy!]D: XoҖvq0w2) 5@U0\2U zl`MG\jc!b]V/DA?vf\?2Y[͑߾δ#A D+¬|z nyi^Z׹|ޑ vQ b9Ra ղqE.!p Iס#(&HL#ܠ5I>Φ,#Sl9, yF7!~/Ifr6VSGC<*Y}96Eu0D93D ('@ZKN̢`.m+0OƬ;LRލIu+ඪ~2sng7 )M3!r1oх=\ǟPX&UtrMu(g,|AVb𔵵U"(n{5]$DM+= CHui7{MVw4h٪MZpCCnDpenESS،VL{tnvPj>ܧ4P2wi t咱,2@[4B9L5P3dG'lU;vJ%uP.]N8J,\2X6@1P߭޼(@8;ަ[w?OeC;O!4MSlysb#=Mzy6^fb ܐPPܮIlNT50rm@ 1O0'iVp9idEf}RjSV[[xj*Z~3 tn") 'D \ mOE[X/Gsw!jՎ^#1ipu|{UxZr}u\Xqׅ7opٌ#gw|Rj]aݍ:o}7<(3it_zSqU}9kOy[W ܭ5Z~{FDRI_:%8M8l]ݤl3 $"L_O!M^=)YOE#Ue@?'R<. "[(yKgC6ζ)>4KҮ략TW3tQuH^z{`ѷ6՞_+!bVI0 ~pc?m|7!?T£)H[Tw"ՏTN䎒x>BHfsy |Se@GugFcNwCMubZI'G8V/=n '݅eʆ\4̎e]7`XF"Ñj)}y R[hH|$4]K' LS;I`nQ] R5PPh`[Ri2en1VjsB ?6Lh`t?y&,Ի,'XO66wlp};'bSC^ۄyU{z{h&tlĀVO3B~Q;y4g}J \5K3چzq:7?G;_KP n*c\=XF|DuR`?U偬nO?r.rᏩ(%@ w:?^~*Fe %A0P4p-~+mЌC(:.\ow8;WQkԅxD~ WpQ-nV<ݢjgJj}}x-?U@@v8K&_ 9/B_![N7hI 4r֫n°O'uG:@=]C՘ W񗊖PwJqoH~ * a#G^~ t9 эntC<XǸzv4(w+>v}m_i?lf[:'E%[1qWk]pP`em;~:qۃ/r|׳j8W&z*Dn<”VVVV򥧎\xP`x^VǬ^qm*K:AW\gw&.SO/4)l&[^i#hO90׷n;djP3,篇u8eI6LX[%~m|zic1g9hԮ"H^^iqsК vNLV MFR\*mwР#[Vn`Iޮ428H@-<)bU72Tq?E8Fܿ`]/O?|o]Ύ TCnCV陲DY9RPckwWU Rvh}>A6n(l|ۨMIBˋ&!i7:£[ 65آ bø|{iҠSZ,,S0YQ1oy$~݁6w0F:O$Kz'M~9Iu&s"gAb`p1B81۫^4X#3ھ9tP;~F)yM.@2.s%y*/-vM9tWn Z&^^O\=]g{ ۔H@yWk)NȆvi6ߵmROBO-OWPqLNMw.OQG@zZٮd_N.(Rq]3Se@OH͝@9/AGnK 5cKawќ|Jqy$m)GQSj.@qP^T8"'D.+Ì- VaE[AG9}"ǹgEܗëFxaw-7;,r{Y+aPn:]t["rߔA^&na[b_x,$K3Zw=XF} ~c5̕]m&Mu7Z0[{9D+ט&XZXE7s7nf=d/A|Puf~x o.PK1Vke[yx~KKg++x}V֒V*,'2z5Q_UOST A Js©.1O7 4ױgD|q7 q4Lq^+i v*t5 I2|jvxJЌۆձ.ψQnH%>߭o&uvus6Sp1+4 vc4x}Q ԃ(i4t%#3w/?Xz-~c 84 R.M)XdF3t/"m%7cIptzr\vPV\AVrV*n2AѢCB9r f#.Uj9~o~wt@ jhNjc+խ=&bDf IWVi8kL5},}[񠣗1y^I`(<`߯8D-/wQ4\wS|yIng~$^'Z`4)'ۏDC ={JZM{.^XZ\$c,JjP (1i.QNq ^k=cAV!92a+hW PW)Q>"ߠjga7PgKe^tJl~n{Ur o9KKs[S}Glűg \h ӕSN)6.kq, ;>/MjcݗxYZ\8^ۚxJe0Ft<^CzcZ+!ۜ&7m3I:A @P3hWjR`e\9f`}hh5dY%3sF]yj7W<*1ݭ'#TN >Y_µ\Mbwc!!F7/I\8YOګQ=zJ<^1Z6O(jw9FKY6C:/+Dbr߷!*^|6Jz1J=wvkN6ja啫*"B:YO z90dmDWl[&|&s&&?NSMRM SM Q5uq%% m}vGei2Y4q]S"K9npm# 3 :"\γ_2L[1@3MsAcd<WKoڞL?H[#WK6N7,5Dc屬 ,["B (!T QTbx ČxZ^ȇ釣K͛y0iEb1hXǩaYV,ؽ#v2qt @;*bH]8CM5v)*̊6`9]劵)DM]O,$}^_i[.]`ަ<Ή1: {oՓh֓dل<ؗ4xn::ro_w n˟l|6F[z&[H.G1:t_Ӟ5˜hdtEm4W|Y`7X e=M6]3J)^hbL>oυ 4mN*WQgtݏvg~7qv= ޻bMO3v,imG4ZO?oAߌOQ5N[cnp`|thx/_p p2pzN|M0u$VsUF3G?vX㋫N6xN52B5D5GU#k`N akLҭc>"zLh.eE-_nuӹ]΁f] @##kQYt#عpwfh[R]MrMeW/YLUIpY1\*1MCʥFU7B .}!F7H\L|8Cw4)}AcI :YL9\ W4m,PD`x b]qToglnc.ޟ`Xo%8]؄j6$fi:{OS\G3fR&G('!=\~19^sar ~DWXge~C>s&6+κ[\*v0(y܍U3ל5Hf$czd~hc~}?o&'V m"~A(7+`8.pmzevq3 { g"^zWM(n."ʼn(egmS3K{)+`/ph){e&\v UkGۏ^]fkD\E0VwٳVFi~[O4B l} AW0ǏɸL(-o6oy uͶZ u߿Âݯnjʧm͵HXQj1ގ(ga/W΅CZHW+SKP^Ag 0S"eSiQ NtlO"fkU#F!a&>Z><Ť(&ȧ,-Ơ&I`6< yF7!E:jYU]}W5cafe.B6餟z[oؾs;)%I=|^%gocvn 7j,B Z"kb 6TJȚN<*7h XohGHa<}t+CDWMgMvZ,?ld(HKQ 3ut4Ve "C5v N qFhʢEB~z{DJԳMM\of8K9Z!~ #MBK ,@/?$gK_22b$_EqɱqMD~;Zuip&[ʺڃ7 z$cR)~1Xa`rD뫬A)7R~;D'h9u^[SRtZUxᩯեϡiȞˎN,N ԫ R3+=:O![Lz?c *A_w''L>[)al')L9K٥,,, ^led}mcx?r\䉓B %Ƴp5tW5"nF7 y+'"q`c[TfUž C M Uǧo؀=vWtxJ~CCk"W^&/-~.R^J0:s79ffHCw槞/ծq$/ȻCmڣ*>նr 4p-V[e̺\cMPvڱ>;f7?Z+\(Z-.H廊-98Wd|n~oCسNxp>G#ei+Ҟ`Uk\,ٛE{pk+o}i+gr.w7g]Oat%}>IV ('x OH!=oZw0d1y0;|fd ~Wj,•'#^ÒE-}?(%_ǘn%o᝭=\"B̑\FGv JRlHt`G*;Ƽ\)TP:E@kƺxC.vn.{]l/:ɻ,"麫?utw},o)rp.O$ FuŸ7 (u@N;FmJZS0Di_#<~"g{ O&^')Z {7' &ڸt.xEf=œ^pG]Ĝ+I jͅNzE_*_՟vӍluEjүLe _נ4x7EGw|^q2iYw| C9]?zMS/N/H!ճWc$].8/D~s4+,sYG[F?6"#<ͳa}`֗ ^7坉GʹCwnAM/}]qhqIt|uk(MNǬuU;E۳7TCd{dP]^aIͅsȖVQ@)XCouM3F/섰kO66dpl?Oz_nsξhOLĻP䷢Њ:]q v=ƒu;s|,֥BZ|w)(E;C3pU"9s^*?s!JS„A?TE9tĝL!kjgؐZ6xA:`%@09[mUGŧ׿| {?m mw@ ❢Z?!C~0Y7u H_d*B\|-ld-ztсT`8άd`PKm7FeQh{mM9vÙ᷍lEW=/gSkjb9b`}>ķ4%u7Q jo쇱OJ|3ƥ$V.݅Sp[8mwp+1bQ(H4 S-iϋXЕP7DdP->h\q9&ybv΁[y]?y"M̃ UIacW y&:]  8髻^W ?R4oyI˨Yе{0, A@w>Q#ネ 6ٗz?w]9qo^H5aNۖ!b`ӴR f r"C/dgN{vkNV#^f=>&;F:jI~ٮ5f!}iҕS{ӀdɁEL"^NSupn֊XV{zgDiGq?S^‘=岯M(jYY#,\[u[-[ĝܿӷineQN*z!%c;G~/f)]m[MKhtSh4HJyݎYrYi *q ŮA y`sy#ono?<_fH,|sbΡJ)L{y0SƤ3\rew8Be=\#XڭSzhghxGpU1ov@j^mp԰`KH k:]TMf6{XaɵC&+bl[y&Nhqd߇.Fh+`#s[ u.8t?(H|mqAx~L|wrER^·4BLz«FÊ;ӟdͫlvVGs`Ƌ鷭M"QʹI~V?/¥r*M̭z_ &]&i3) 61 ʧ ^{fHUn-0CFvl,|ҹa/|wIY븽RJtsFny2` Xt Z35,z&Fd @ n: Rk%3Ex+vjQO?rŁc,?ѳESs}zMn=mE>48NΞ~]c1>pALǨ%?mNkg-Vm1qK.Wl*d_yem#W.}螡gjV ~ Uޭ-Q7|z#?֥q|I H*)}4󭟶*9Nض> [{fȍt^!lcL_صRR*J , )-ch_ @r)6 U*qR:9_? >;խqTSsŭ9Ax!Uὑ]ofxVʕv, E xX'WYZxJDCŊJs: W ~KwRe_%2x2y#DîD?;C,=kן\875|SN5?5PD # UnMP F/Mņrߖ ܍> VOT+& 091 焥Fڛ>"P*a_vsg:B[.E"IټrhJƤ8#VL@Aq!g$ (q2wqP_Q(GsMag`-`f`?E"P(C`2] 8Dl-dz˲.H#0sJҤjQøۤLM_rtN*sy<_ugH?O):^\+U^q_..IJx:@Kb IBuٔ0k}W:$)`pUɚrصD` #]APdN#ZTIO  "؞z0mC3Ti(W]sK}8 ob 9dv$OSSL&I/լ9@/Ao0pOm|`%$ rه0`\i^"Gz5̪ͣCpYɃTC==kT cV(c;gKj5P =$~6zeד\65 +RJ4&NK:_tL3 j ('uA #PP. 6֨9ϪeSDsYTA‹חt[c*R&eI*CH9"POUzٴn@mjtop䭯Ū{7dg0Xy٠h\.HwY%`.k=8q/e"J3% DaFuMȰެGPc7oD{݈mG;!{?#$?ALw?˿k? .:OG!M ] $O5c8ңl.Mcjhx;#z@C.i!.N-2j ]wnqV~M`R 4JMa opoG˻2;[b|y!O QѱGx22qL b *1n{6WbLg-ow>v252P'@p]-M6ص[4ݓ \|gL<̝llO̯ݵCR{KK \ʪWk2L8rӕ߬l%g>m"y,\MnNuW ;E]q |(1j/ lX9BT{ڵ. ME bD^wTz*{{I$*q9;7|2|>pb=o&257K0t}q{#Ilm;_))k[l]#^!)U;ϛdDSR )S5v44G2k}w݉ rP)ܔ84-KIaWxlqs90,Bؔ<1b.MOt 9x-\U^6z1>`֧wkT[[_.{홫S+Fj,Xi;}T%Z,~e0cfԫ.trڡ u(̥^Z.EW1w ) 1 ʕ;kgYqhRS.^݊ɢj,; 9ڳZp@}ar7wt:oe,S9 ꖮ'5\2SA:vcZV#Vjn2CAÁ_F=LuA>51j*nJ!"I{gm žj˪,+M+ g pd*}p^3X4Y1>;|zgq{=Yi&L;R"F #^ ' $"'61C=PNTHZѪ)ƐNῨkx{uܶk}v<;^AW_?_xX㤷_{ߐ6?*_Yy08$ne={2[XÁ( vNd; o|k}~LRohg5q<#MkX_ ;vDRZٶä"`焠f3L~Mp*1 gfo"a$ZˑZ g_vfzfpuX{o|iKc!tȺ۫ݗ/#^K<ŰMɳƵc.Zkp!ib`n,[darypZ̰Vk[^:I-P㕚7˩ je3Ts|t-L&4BG t@.,{|#d!誕|P%hC*a/wM0Sm:MOF MO0& >`'󶭚u,Fc@df,^ă$}A[/C'#_o8'"VɐƸýF 8;x*YR@p_gUU-5%QOq \ lFI Knu\;?<[~%ٕs}̭FIRɁo3<^;~UZUrh2-RJN歈|wѕeD8vQq߫nMoƴ }ӝZ TkwpOx~dXdM ǃf,TMuӖ%Lujuvr- v7nwq'0ƖZuMXjx""EG۹+60 ݄Cf%h[&{ү>3f|53˶^$k64Q'FkzzOG=ąAX7f 4ۊ- ;E.fm+$pÒߣҞ߫l' m|]9\Z(Y8B G'FSj]䶓g=a(IZDU٬J\pQ’Y%SJbKD}JU*LTy &OKMJ`ʽWM̕nz_"Z˚جMk wZx &m"%~PHf-_q%wtکuʲQ=5e|e rIeIHgόav N\/4ss:{j&` Ġz͓03+gW-&/,[9~2 &˝zQSm;ͦ]]!ȋMS7N^GPoa3γpdT<82[)~OHZwsqwWL&ڙoV]$OAqk>J'oq'LQgZs-zC|Cέ4gG6LX P1<~ M_bW˦߆Ŕsœ0NR,R3+pdˌWвt+f`֕q) Q3l~3Tbp4P>3zwr"X-X A0#X]w"sTQћ7(F.Md7)4xT@F֯  qKIxX=Ig% q4F8lߔE$VLr&N5;N0 >/Ξ %s`RX;0*Et@Y0@,+NihCc3K{N꧳r6UqX_ `-uo̲TW(ZgKfkh+n:N%ɩK''Rn'b1[gO5b>",!sPGkVa0Z5ӋL`t h''aV VVB3B1z6| Yhfl*V$PMI>~ @_ON8 k{+2w#͉`Y¢1T#.Zw"Ό^m^x ܖF+"RA5#סgaxہm fqO&Oz[dj`+a%̶tהx;TUMEnc_]0jl,r?QWn`^퇺:ZS&9j3ڴaKj5' ~ ] L$trهg l#OlئiM2X Ϛk2qa5Jȹ0¦>Ѫrqaz3'*k:O: Fz2Ƒ9[V[*Ճ]fjTWx3v:LjD!5 $ qJ$mC˹H:SN]f o|X"\1Aݰliu2;-{&~_Ty"G8}W >!_ሿԿ<#[9}|c G? +xZ}P+mwmu;{C79<[;jdJ/ěO,ĜXKBY98+B[[u0<O2(Kp%o::}Zlq)Zbi!ҴF70Lޒ~Қ8ӹ,3mqGH'H=uVQemԨƸfѽSjg1# l,8sn75<*yEE E֥|fȺɳ-9ԵUU>׊?<)i~`~w^R2׸ͶÚ7IU>uǃ)`+)%'[GW,R@QzǺ$ȯnVߔC?fxZ(Rώzƍlnyw=S@zgHǂu ߘ4uv @ld֑hX{XaƼI|Em ̽j _:8N#IT敭VT*ohe\.O3D#\ͬ{l\cE<_3u]ek:L͑,_8EXaS^Hom?)t( -rc;҃N}U$_)yM"Փ睠F59g#D{Y;*O6!i;;"&4*YxAFя[o6Ŵ2{?w~VŒQRY񴺂9ɴQZR1,2Qic:(}QE&=:c:Gsc6~5oc} :O@Wх%m$; Z/+7M(G}++OZZ&mM}2I-"Szc, vx|{r5fc{^b 2FƂfbRv~14Jzޭ;扴 )Pq`r*8=0@ /M3UEX}uX0-%BֱR!ә+ Ez6m(eDaG*zhld`ka攦ע( X0f~S]1ABЈ\n#GGb<8fe. N:mCq3¹oQ !(<ĩg *%~,UR:?V4 ѷDSԮ2dμql3QƲrx0a_19cGw-Onۓf%[]l3`Y"M~J|QudM:]Fk1hmMXP-)767f9YQ A ܖ/n& p֋Te:z} a0[^H'(ڢJJYNNrfϼ+z]Z3uZFK:iS/\y.4Nr,,m _1'&)f/O}ޘAדug<|hI䫴1a1~%Mz-|Mx u{wM g]C ovnZ6v?M#ܞO^ٽ٫<հȚr|,ej2:1`v:>s~brf̽ } i.U*a.+}׶>k}&߮Сc<@\YO+Z1[$C8\O]UJ[k`u0pѵvS[U'%{g_#|ܱ-mSɲ;K}C;1x&R{0Cޟ&n6?4\%"[sY&*^J6ȕjgRCٜ&KwU47m`nx| ^tR;uSi7b]Ϻ +gk6跋O1xəѪt[DY&TNQMM]뿸B\ynVfӄҲe{^=Dv3 1$1nL6vI yM%{ExɕvA򱧙`i UUqgEYsDi4$2܍qYv(:B嫋^ Zr1@[uc+k,(s's>ϲ 0=s3Mr*[.uތ5^ˍIFT?QeYQ:o"9+4(t]/ \"F`ag0O!@L.t.Vp\H(gi#Y>qz-  4)( z=z=~~p_`X83Xtq2goa˦GþIgB/.w Q4.<_~* S .o"ԢJWQk[E{--4Mԍ=,5<"\{ui0FyDJד*5]ܒ~pFS l8K&0=mzÖM.kC++W.g,qY:gxl #5s;DJ+=tmD a[ Q7q Ol`˱x즑l^e(\+Iukq|/+qL5J>18:=aZksaIgR7tN~ȰIQv-ד&YZymIc@$`i i29zoV2vrH!5?/{qں01=xſ &SE@L}ǔyY=!MCO:JX-A k~>'E9Wү%^>zs0@ݾ:!ΨiQO爹O9oLOL\_"C\G_kB/C3gaަ8 ^T0= ˹zoD_\p6FL 5[-&#? Qp%uCq"  ڏT<ޢ2_=+fx]1!>m̝|}kd_ efvϳ+f[k 'ڨj#)+?bW n4 &*5peѓfr =z  hrˊz'lӬb>mJ6lQ(QZ5QA۟E5\tk|RQŪ#3ٖ#pgH'){kr_tP}8K1'ɺAvj }'DmH8ג -%T u:kȖ2jFI S W@Eia? Az䓦.q#Frp?j#ᔏOOI` ت6N͜ZX9$cvanb4;=[77)utoQ"x8_2,| ApjOG̟f2s<8qy,H]B9˭w͖]]Xj[,݂32u8NV.f0wCnmȰd~榇e䰬ScI#d9cSr;K64h-?הZTA#l`q,ji[IL9M2L""( ]} BlRbWH_Fk+-z̸]ׁ=]@3~}f V23lGȌt𫡮Qږί˨{m,ҌPW̺2 Uද}5'`2QqNbԩDİx࿨\^YY^9{ŝĄ Gn+++~u" VvVV0V +Gɏ7#vpx:;"h㿶qp,~_[?+ZG>Fy?TzLGR3B=Jwݸ죤w*Oe)ϛ.@Zz=.#QPv>Γd&gZ@՟^-ײ&UFIN uqV( 9og!ɿ9ӏ3qrtAU뛖|0;M ޗfBPKPe }|=JX>ML/Nל;j'8*NM0ӷҳoյoqlvtRw[ V lo m VRPoZm]-ͬcH-zT,{ ;8E2MفS>K-V'F%F2ěz]@?0xc. ).+cMOkP4vcN+j1uNriTE`5 \Mvm+Rb,>M˳A9$͙di4jnJTdq/]}g.U^C|%ԣdD}]8e.Wc#2MPl{@(G`kkցQF_scGww)uZOJoX%K*y/6U0@)ZI%} 4B_UY&/u+{@U;X 94x-Y MK6g8{H[ΎLĿJ}@& G+d[XyvDY~]o !ޚVpMş/,!+S-)2.Q/X`r}`IXw d7٩Eҝ sC݀WvoL,_^ mZyݔ3A$ G^4@LPO5wJ3oWxpn̨Y.CBd}fhhEVIp4 Lh1.꺚2J:w} '#V.LP?H(ǐ c#e샨L wZdhظ;y HV(k *snjlcglT"PR2LV=ۍ-0t /NX ~wz(hOg boz?<#VGţy͇E  eSu?(YbmL(JwBy7¾סU?Ӎ}?Fif87kD̉oq؀%Cf4_ʘml~ يI{[ԮѴ_Ty. KK;åٓ'O `& >>NQg_JHHťtuuݏ:@@B~!6?.ه奿zC 9V<>/oa?(_Yyx-/KZјC.)T+XZ5+eYIʤzFƞ:M@wb'fF:7;HGO_٩ n=o{1\=&8-+'@ӯ֒/άN;X˸SD+Qjrs>a< JsߜVָsf#M ~\Uj*."#i>چgϺT6āM[ O. ΓwcTc0LEŨgMOAG fiSj0n_29{3"qWCbQ73Ѝ\P!A?G\$&@gNwɖPEo+[ufO "`}דy 7Nl _'-$l12J߃$qy7o>m+Un9{'zwMOjXޤWtN0T6ˁ*]l=Caqt{.1Cߵ )%$^lP 4dztUE/WsËh&:n&i8-A$g&PY9 '< zV.ɍ۳]sA ]2 +bLkWBn ^m!+"I[|&q /q"z|.jȃf֍"-{z&ƕu|کӋ3}7"Kԃ\T_2ĭcnaO-2`K+kEE;Ő K ]g KSKK-K;iꤾw9?+kۭk _QHYU΁HW.]̼FOxL+Ɂ = UE0gqԥ=6;y V#[Vp@hlGt\WUͱ 'N, lyL^z͟jVg`%GD N,f}1hzhlftPbg>;z||xVX"f{T&chNI6߄}r2 xJ6)HOiыs>LY"bGh*EsvGŲsY0%1\Tt(:\͋$qSV"f>5>Dl[łYS_q:I8pigv-"$k=ƛ[>wb!*sۢ7zB@}ГYփ SO+P؛p.',z|UyzjRQ? 9`O1X<Y jMX0<o=Jm3D<}eJh69]ʹo|vfWn xF~HL:G0C>ugf 2^ 饆t'/Q]Ǜ]ͿobXZ@9[i ߸0 )lm, X5LيG6PQ0aml|P+/FZLLڟ_#Ifs8*Uie"fA =>ޔ~ޒqbc^Awɹ`>x&c(0m^kWUf*g cF G9bTix4|^^a>M}ssм6Ff+@ٶsD~e"NЛ䄳jf ~bڌݗ(UlH\p{5L 5'gjlPm+_j"r {.#dL*F&$Q6M>XW!Ìi"*" |j6Ҁ&lN,% a[iRxIb#*3^V6pmwg#B/wu꓌Zf*M.L6_j1ƼHLD_(^eY+'G&^נ֑O<~)}B@بϒWE{ޮ䇅Cj9W/>w _ ?[a7.~-Q쇅tQu ,lER&DFb$>'x}r,r2\032Q+wS f̭aL6?A5Tf3nNfuOA۲5S%,9 k|ov+N+ONjѭ .bZ̾0O[][3X%C=&B,)L3QWd5x8O~%]^{Ёޝ:eVd g?\/yΒP©KQl` 18ه^rBT05Sn@N`{Z^ {oגFp-'pĽi~nꤚ_bE筂W!vZ>uri/Jxi[oH^ZT V)81?  ~^k+ɏxa1o[4=]w{=k2hqb`K>an54Chjp;J¬^>ƔɏKJ&cF(R" ^{RCbL#Kh'Ic-XYI.Z]Kn˨n%[ų|UF`Cx^LZ0-=໖m]KzwP84<ȲO΍ߌT܅7"w("a+eop:[VAyYt>Wt&iؼcby|*x]OSFTswjfǮq]eI'{H\iOI4{U講+5HT2讏;PdRo&MH0BзB9yFЭbQ @Sݶ~wDJJ׷S677M9E|{QQ;{A2uphhjk/n`2uxAQ Sݑyu?н'0`K# St9o wL: /eIQ'p_ ; "laeatg!-- F?aČͅ"负|x"ۤi疚.0@y/x@,?g0ۻ/x(08$k_4\еU1+ <W0z]9W31p\:pJZ+݁8s% C*1*`^b1 {ᱨe78vӉ[$P LL%::r[sMbN͉F0=i }5qKv[W=H9( ŞD\T,g9%Ry4Z cXst U <6"H_2[(?ѿ}btqr~yHnMz؟/*(G^)DNRp~;sS ISLFhXJ$6&8 A?V}%Kp" >mnXh,t8*k э1$ۺֈ-A\*=Z瀩r !\ ȹFUCkQka^ĝ#B[gl(4!|yo+o HPx۹αJSr.Z{Yuwқ Ha0t0W5sgOO4aRjnK`Y?-R{xA5+5zhrdџ7ySkW"F[f"[F}=3yrar\Mh52xoW԰X5P=El?. rj5=yK@B]ބ]ZKOE(!RFkf'L&Fd1bb1%(2u}}*Xۊ\ޙ5N^Jf(CBr𩜕Jۀ<@cXIh,W49'rpկc*inq~*)06:!L,_Іv̓K!Ar:7 ?W^*h75[EյE E QTDR@.infaB|s?u.kZ{=l.Agߖ\<Þ3M6z\BWHVyS-rM mY`yw꧀$0.{gƽB%Z RAf x%khƖ~|P_d@*A'1ooU81s=fgogpjdd󻚛pTdk׾G %%onn>v?83/_$ ?K7|?\nωf'NgωĩOGVdL{Cy: O2ϻ4̟B Kh)J?Jةd멖[wk ѤV<`ܫS,-ʵIt! gfl{KrEl;!Q#\  <ٗNOT1ܷ^d|3~3g #%}b-m PirPIrOf5TBWT- pN_x19ԓOWSFU2"s(Mh#Jx=o,#\hՎ>>xcd& U1F]C4{(0mrfg}`Q롺҇zΈȣ>,eϑ71KfLrTuӎ(62[?f))6`\Cu={aJ:UU~Q+/b9 ̍Lg \5:*hamI<{H @jdjVv 惭";$2ڹӆS縓ӎ y xR3E$R_$Z?ǥoYBJ}tǬ~Vne%{\6_O$m^5<.&_L_t'PN4KOɨR156:0]773pLkx,l{*l˯$̔?/x ,Ka\/gc]ě*ZҹsZMĊD"|1%@JgUAn4\.  V_Y+Ƌ?yju.!!!9&w=s !!w//DGGٳc!Io6 .O:{#@O~opq a G1?s¿ '4^Vok'[gV i~Ad- HUȇQɺSӸ%DWc.Vw@rǼ]4z̄c#T]eǠ_8B ySPGRPY!SrW|RMaؤx6R4|IiUe~LtSTsgȥyiZy;A,gff[g^N~rz񦹁)Kc2deN=tSsRIʑ/"ikftu oG=_;55E_f֢$gn}1M*_(R"8R$Rd0R (AZ-L:-Z6]C_>G-mSw-#krI{{熊Ut :{n-(EKۏz%Ul$[E&'5!V (XWNO- ɡ9#$ﲩaohZZ:miy*/HJMIKD%8ގc;c ?~Y%գlo`0dko,Y^B7zo'}~]כ9?1kz=t!vhٌrsi!ɑ/2ÎL;= 9&? Y ^yB1ݩ\Fi6B<϶#π@Il%VO#G|/RoS,K:RSE; $L]HTe%xΜ7_/nO_o4`glͼIW¼;"0h}ыZw4EKzޗ/0mU";qe[agqOwW6qjjF-R9vU5jH,M!v3d5H#Ne  xmq]M;4Kr4TwqOhBd"Nr0Ys-QGp\bb\t3Y.ER4S*&WU ":u+ HZ^SV_)f(z \2,*6WU/`zgr5E+*їF팦%+[@ZN\Ʋ['qbV75)0YL@c *zv}ĵg3/* Aڏ#f#OoF?#?=4c}tÏÿg #?e'GN;qdžFN _5vxoVO$䕺ԹEP2F뒣)bM$s&1<^;yocaabzm`%^*_ܳpeazZ潬/pXd-|Ԏ9up nQ?K`X\ $JOSky;x h>kv-lnNFzSKYLrk[[_li}E#! \-CIrI2W(7X/ɬc.= f,-2}`z##X)gbsY&F[8vm#z>݊ZD6 2Yiw~]ަ;"U("`_:gn x(ݭ.2vo\Z E<4 ԓwJ|֔RV e)*o)@]MDm'w:.wwGDﻌ1xqכ;cSs KG`o\@ 3~v[y%`qZ*E1ܯ ]k}<> [o}9yDXzDͩcn} xMw~7Bh7' k{:8$Z^_l8,A[+L62n>mږjγ4v\yK/Hl#/hl ~\bq/O \ _Vb*g(qBf PKLU{hꇨ -]jnb櫊VɮPiղ=t՞vzzp]ڶC}J݀~z=WAzE MǔdU=> 5of&ۉx+1..,]_ ^k*܏Ҹ~ڝev\;%rƭ h0AZǕ}%tqV{6 L;Gu}K4s]aEtTywm^;Bԝ GD6 L =W$9x܆?f'oD]MÉIޡ_N;}7;~%<>#Љ/8C1 om i) ~@=foV$Ä"襽akZ2p x pJ[h.,c.ކ=yD+#/&p)2t{0RzdP_MB5y~Ya.WֆL˒_*h(jh(jiki8jijijijijik92r|ݓu2yҩ)aoZv^4MjWSVg>.|=isvkq"?0FVT# ⅏ %"n1fDؓ(7:dBE[1=;za0nק!]?eȠG/I[HڟAȠmrA jl(s!._'jt/7ai㚔M7:e`g`/!.@W6@ILZ )D4r@h$ŵ([L0p PB}Jڷ#kk?ZV6u@/ k%-fz玿z Ɏ&|yBT]/[F+owH߲l6s2M MUMM.MQƧR1&]g[zGYћeb A4rʍoԛ_R:2FgKjM;Zy(%@M?''=E/.}T::eXM=剫܋w'^wRyB' "׿xl(y2- vHI?n{1;+o7'ZSA8s=+0Ƒ6$"^>ZOrY 8sql gbW s8ELqKH%ed~RA@E#,ꍧL9J# ĜMeU-t MB?(=!o>Kd.܏#߶%,}z8#ts?މE^*ei)˜SH߻:l=t{8gceu-~i2EESU!OMf[p\);1eteڕ.q"} S w:_%1' D3tL:pA -Ϥ6r2s0,3J1W]d.+$l%Tyw*v3ѲTaGBh"s2gUv`Y*y+Y'OaN9ɧ9X%.&0V6`AU)ďp~<Κ 7vεF-,:Ƅ :f>^9e[GVXTJ7O<}Yk.w~A,8. 5"Ga@O6qDb﫹#-ٲ)VA 9/go]:sGG2h#3aGRƐpidkd d#$mD| F=AS%9G*'tXoޔELɞEQ`!5YzR.\rƖ&>6zI1Ar5RACR[>.P-"0;eN,237tqe'x;j%zGӇt)L(th625sSNx?R֍1Gl nj'^mmDR@\LWFIIt|xS4;$ :~"prdumօ粷?!n"h)5{l}OlF9j^ޣ ~ ΓZæz0pƐ㾋›Evn'4pu؇ITmP w!Ikl3O>7$A6tߩǍz0ӏM'}suJO'SOO H_[Loy= RI*w.APnQ.QMQeAlBDI=xlp \Gy2B>qM]ly-L $wr~Cf[F^0^cr>RؓoK$irF];A3@&@@ @%@-@@@+AmMpzcL9Etr~@hl4vqGG#AdB~Jzlpm=wC/Y$ !X{zfJ(A@GC3X6nn5MhA~0[W&iYVVU%W sYcyA0J0@clyIlKWEu3X7qǞ=p5{`eZN nAÚQi%̀c&v-xfܝ)z C{ =)s7K|եcmڌ2r9Qw1V-.ϙޜ07~cUҎ#. Azzvte u-?93t.;H {ur3ι;xQtVH<χ aIV(%j1j%F;b!O[֞WoA0 f4t@h˅m Hgn&v{"a^U(+$1e䃸טgD L`W 12Ӏ8'FչP[vE?k~Q?jn3˥6L$ H?DId wb"Y%ChF]s=mژ6.;BC6U)J7?rW$[% v3x%5QNVM@; K` Op}FMtuE8D7eu>%%?otSY@]g,oiL|@<$mD\I"伪u\6 apʹ/ ͝R}`ę\.~dFz<ݣ$ylNb{[*e KdFffdN;|i!TҝG]OGJiܛT%cLb,MvB@Q3D ~>[n.;8w!fRՋv^"%rRUTrl}ގى R81ܳv K[gSP񨺪O['A}}U%}x=u==}z/ǰC|qwq{O:϶M4};\b===oG /_~oK37؉+,gg=Ӹ; ~s:z~+l'" e7KAJ|kl2|Q+¯yW(Gg?c4>}Mc [W%o \`Ym}t["^Zq5yPQ1:mT`6b,7]j;؂}p.2HMy 18.,(H^N7L_zݑ.N {?Iff zVj"ѱ@G,<̮ \[gh-+ڹ3LuIMqtn@ET%d*^ TR;pA栱 oNGTܯ@B\ݺtxa+5+;@)x6g3yZ퀙 0vQz*Z鉎+>սU^.9;`iS(Iz}g^=UaY<25?s}WFpfGV{6rucׅzֈV/m&\;`D;x,=x@PK|&_^47LR[]1׻5a`h@s`ؒ61&o4>_$+:X;<; 4˝r^?都 z+ˡֵȺF ~t\jC]xދJn26=1"Ձ} /('?e6P>/|PJ-z?4ezBuײVF[ =9`GC~BAٓ:v~ ~:" QVHM8N -(t ")pc3,OÁm$ 9۸14Jɑ0_؜@6b&5aӓHyUOW l*$"R0|Q].:; MWQ$F<5ū2K_FԛCdk{/hh{h#[_~X8l`-ֱ 4|P>R&y3 ˲Gq'2ΤޞO>|Z&yoZ֠F(>Ҿfޠvx|bX^RXιpqH< (^%  A oP>d_&Mr~ (p`(Xd>Bu@*-߽@=N"H-OT:Gqr׋c+URTݭ&ߪ!ߪBVSov߄o6Пﺟ?@?0uA'SS~~7rapEtF+Vy]i !ć66 IFX覠c}iW/"3W#{sqwP֦sH2[T6yxnBŀ-\~-B>!n'iy7\0Xܓ6k5E$xc~F9\խ֒7y<>FFyFEFNBiIoco,\$qt԰r62 *åuxEf| :4ڱZX+ܝPgoma!ƛYҵ(e5zrx/|e\C_JuP %Xr5R=|BF"7Db|H8sP1|fR䝳q;r5 ɡ0漗Q|WÖd5},)*ys+ul^E8qSfw9,-u׈'WSd& (:{E&yنyzhZ"QdF殣f`-dx$wA{l !_EZL˗1t/:\Eh #@ Pt:#ρ%:`ZIqu/0ހbf0Z?/J4&fn/~R,Q/toO35ZD<&5KQezִίӢJJHIj&%/xm(XOXA]ʵsU<U\՝j>C⡥q!SYC}F4LJmst㒅+i杯bma~DC0m]\0;;tk%n9D2jsvy!Ur֙&beuWkQQPr@*3i >KfzF氳֪J\#Y:mae:uJ#݂[_BhWEZǗ(nH*[[Ǧ|JʜW4q^!9Ud+혭/gx6tAntl_ȻKE@7YEE:0VvVUM5 kyU *l%KCEXr83x}D#yRB_5>}KNQXG_\J_A;q1x-٧.=T5YbUCfjG( LU y̸NblEL͍GCoj%@= E9e+4ҍ,3Mrl4 ]|D#y{Yk/`\һ]' c|_@~Ni(Nk _NŅX2/<휊-wt]߄̐/ WI)(wa;q{@.zgxﳰ4~0,pgvd'1X%8i@-^74_\V9Qb&򡣈jƹjo%\Z0dTF _@AJI=oO=Up=Ud=U|6[sw]`nxS.(UB na=534ܱ; Evqnfp+I. pRt.L{rqjmDDYn쒠Ig $ UA?(8PUwӮy=HM}OYmӕc5\=hmą Md#&aˢmviiDn0U=wU:#R!ڊ*.n?MU {0n?OP3mV28}CtgA \ڪX ӜJ][Ґ+/ qj)|=|6q^8}KܨF0BiIܑʊ00D 4ybt &ez#?ی,[H82y<4$wN長Nq߃ pR~:F1Y;ea$7ΙĚ#yd}QX 曌M</!_Pj`sH zsm$LYvK}h'oy i*0sU>%a܎"7= 8 GAYcDGmw3Y73GB9(k]DICH ^BۿW>ekNI^Q܆լaذhazP~Ç(}'w1Ah'W,'ac'<~Sy=1Ίty\kM6iZǵ}ҋCL[ͽ`%s  o* 2@lcXҕTacbn.eפ.(nVA3[!)hjc*ZGkW-mc,U8F7罪`kt؊-~66wiOmob222ǀ011/^3%AiכE@[ك^-a IGU]9\rZv)h+j3f#|=pD@ \@~Z.1傰GK&^׿ۙ*gj]GHyM I|Nڊ{^aG ,ZJ=Q_kɋqSvгQ pjy'u7`8Gv~s%cJ% F0!:^4RVm@oLY|Qޛ4eekqr䦉t@(>ܾްI龦⨴)(ɳ^LRӁ?yi ݰt6xR۽cd~ڇvF!rI|nͽ h-HрniTpإ?e[16KJ0֢ܧa=hҪEc mw6x+Vi{ހ/?$lQ|WrߵW].;ƵeU܀-SEBQb!a"n$oEYF<J+ zgn :?ym0O###||橤DAA+eeI̽E"0W8O߼Cz,aՄ(,?Cl:\u4 /(DW;=ڢ5N5V;R=QS;H+XO)K%M:ȏ+ԩ<`N   H  !أQ!^!zQNYLYE (ra8"o$`{L[x+^鶰:HzT:4vZiɍ Bk (rbzuQUӅ^ YNP_"W1LIs. $bG@rtxb:#w)m=rKwEq^`Nz4s(]om _cʼ\ys^ߩ1bD}KvxhǸy>veK??'Ռ$Wt"U1u0ܖm ) _2%4ݍml;jn,Z(F\XIwj} yki؇%a} U=txW\sFCiW t`VF>t߬{F/̞LjD(I)B݃CNVH^vGq2U.H>N}ϔNb̳j>"Ej$#PTؕ)Lx/oZ8irΠ1g#t`rM#EHn#{VǢ|J:Ⲯ6KgW g%+LymS}`(x(YPP00 Xkb+ݚ{1; qX!oGЕ\5ǴL۬ eCeB$;ä5{,z,ܺCf6ܑ*drȨJI =%<aXcNxS!rTM,#91=0/Y;F'8ֽY=jJ8p@ PyN1Uf760Hyݺu+%%y>z(,,<883߳|.LM0Ra.mĺʌΒ4ܐK܋i1D(HΛ),(jo(o"1{- ,Ƿ<'ā@=J@5jⓈ FVA$PO~K!{1G@ŐI@(|:3ƻ8!R cRóX$# :Ԓ'B&-Fd!9Tao$Z*WV>fs< U}ZP؟5 +T9XZ(-y O0SuԼlh#W0ǞP\@4i5&u&5Gr_ښM;u++KB rX >u0 -yFǻ/,܀L߭+$MM׶pUVf/XG_BݰJ2+2KY{v[>?8"C/` %-wg]z] mB*Z&!Alx&(-^ ]je߅D**:p;ųgp& BW5g3 Z߁_`27f D&{^d>n%ϞcN_cOLJ@r1Pk*Õȓ89fPhRl&P)sMn_jVWV;OV:YAnKo.x ` "p*J'yRG9 Y_S4ЕT~,),iMNZ= 埉co`(%o|LDߥG;3%YG1Fʩe]$:(鵬j?79~r|J&2^L ?sw>ee0pll젠 DGG/))>/..>^0O1qNHwhЭ;ю|ZI]wJ\}6up$ysq}XG΢2x 6 ʵCc "DA QPQ!{((1$GdAmԚP:ȚGF m*o*əA I'E &3<(R5ƻd6p.]޼侯*fxVPb" Q䐨nG7x}3muZt70 YLxXBG6(:HKE’rޝ zb' b~sF=EˑA?}+| IP(;bgW<1gjwnO__̺etח&~ӑ'3"re}Qy&br3Aw P QuTN9WzVj;3}RCoܪʦHډ`2OV"6caD [ w0uGo*10}<뽩0K®]ܰJ~Dx'`:4GҜfgZ۴; EvytTR楡-ϋh#6H]yq)j;R9Z(CR }2aH\ Kif e'Z !]Pfګv-g כ_%8!4-Ac6 ޙ sȚdOBrF [sU9#*,K ϮB/(hQ  $$,@'kpw 20Kݺu}z{.SQ{S s/ۣa8RgqaĹ\bjrɮ_]" !E #ƈY|g|E y&N7ф'EjaO ~3ܳGi.'s4U+$؜9M)ױ“ѫMy8P译nlb3{qm =Eo4ԝ'c/.gR){ǰd[ea,BtpJ{{d}$q1+BAsUFW7]sGov6 Jԇ|sz#ebMtΌ,[|췇~ay2qm~YϽ<䉋/!"Nq$gvfWJR9wRҌHT Hw,Lu@W Ч=,y<=bL~B^N>X"M}?EY%oC\bKm3F^/ЦOyښA]Jyˋ?V֮=h8Gk|m k\% a*lO5+Wl[ܡ̀Kی | ux. +O\iu5!6 1j⑾N.:.E_zH sTIU8zh/Py> cjՊ I4)d6%SxJ?] 6$zUymDۻLK>- LI%J} u9~* 4p'B[K7f;CeRsCCS*ygH [Feҹ+xOK/ DoUb|MfFPRA@}Hos)R':p? _ЌO}]`ݫMs+<ڠʗ{׫C=p=ɐ!6AYgǸ /6ތ,MQZ9Աvp{e"a"q̇~wW@~}[]\fdAZf3( H ?Iy[C;蠝\9#1p5%S WP4ٚ9ҍ,09zKPIH`BOV<\78K _4 kDd^H /g@6}&fCa/ss3__dr~lO:KZ#C*Oݷ zF6($;\ )jf^|yDoaY*E)Y8jH`驕0X p;Ut1 "^Y4&x/>Onko߾k9&&oz"#-/ IT-bW V T,0k/>~QѠ51{?ab?^ gϖVa3x$z"=J.=E77T2YunMd@w!}6qUk`$D;{Fd:Wy+`W9R<.ˢޤʿuv׳s$dc!4Izvg2U4i FUlr͟l], xeH)w4*!-n3gHrW}pqRkFC,O{U TJC썒oxCo?PyG'3vA "BmQUUڪlJ"A+0!3n$yQW怛 عV׮Z'a{5լ7P FyݷRc|=:vakbMKpw;GCۤSs+ &HhkWX Vi^_w,$)>_y\%5KC}ňv$?f, R}ͩ#|ۂ4 wޮ 6eȯ ۨUa#E9*iQ_zn8|\jM/Q=c5:`gՊ*'+TUp72@Yf Ucfu3fzm2s:3|'G>wU6(I6YzEC~T_BtTzh $5['/).<y2b+Vu!c#&C 2=Yzm P &q1AfJc|KTل( ҨQ0ʼn$C[}KKWex\3z,!%-7RfCߘ3+iG+wnzx<.㳭u利E:!@l7 +%2CG؏RkZwr+T+zC恄լώJ?wSPy"ݢ^b@Ot˗gF$z|1C^ %(Z8({lznisd0*Z>ÜH,VWL0=}h~޷dWuTM/pM/k&\S,Y]K+2z+>4|O9\][c^hRىs?H;gi."@P -xM@MUGly=;Ci݆D*_J_V"*-=m]#5Ҥ yݟϓdmll*LP4R7niieCl;r kk '}hjygN@mSwg|醷A8vh)H1=nOj(2|N.<'mu Ǐs&=I;;F\cywK7 {(G7Н0=OC_Ĭ 'Cܲ++q+mܸb0 ȓ x)OZ*ϧh#j ,Rc=jLxO23~Oeikovmm{殨bU^[t9YַW1gY&cuUh+og_0?G7]_f/[L@EֿAF @8=Ƕx$;02~\VQNG,:-F%c$%=v<*@f4}s/Ly:)))̿$$$&&O2MfU Jn;.10R9L 6D%a$V5qWhO9կP%#kDCsdkTstɣG{th'^]܀)n.QtlѮt]&lgV 8֫LVio#3T,G3( j'[IV O/D3n4ޙY.3lbIQsYzLu'~!zM}Ri0{[bP ry[jhffH963%Hَ&O8sS"yE.v^%lR;`(jL#cF иƒ9˲·' ﳁfwvzΪkRzEaT$0f ro ej$SiWnRe}°e & ^8[1 ʻJǨJHXFof;x nc* mx4$v!_&5ݹ:I/E]H:i+E?6lY s倴i6ia j>VK>GуؙHE9b9UoQQNwюQ/QnB[Qӹ$=56Jڑ7+~Ϸi`^?@7L  =hGuCkw>򱴑?Gq`9Xu;V(M@*i6oVd >GC0sZ-ݰ*56*A7Mnnlaq~`h~E*Tz2FbMӍk#8+˸KGxc+|~Cƚ %ņ߽ӖqQZP_sDu(FKW3= .Ŵty0/A[C _C>>cfIӊe]K3G]ZRI'^Y?zc5Oe5De?L5,da.t~1Mv_tܖq_By}*R,­*ԊϿ-Y)%7j#M {?O~i{{wfky8.s ;O0;;0JߕbLeDhz' r?!̉}Rq+~AQNGjŗldQ? (;x1=Q3K*PB'W)@; 2v}Hv-^ 2,9a*WI>btraaX8Ͻ< ɯf@r |xmk h@!pQ0T}OcO 鶋~^u|'73TCÄI[ϐ.tO"p`φCOQ,dޗhqg +Ljy:)hf|#f§"\ByFSZ/7S~{1ߴLsI5#EQNv 5\=E>Kf{QW54S=DeOu.qb8kf-a}5=9_:MÃj(h z`p(^){O CV [A^f V{SKL6E?E\3kˁ$s.S\2z#!fK^*B%LQ]}-y_,̨NpRV*zkDL,ώO.~k4* ͈|w1JZ6+6a<@/-LGfBdߎ`RgiWn덥ѥyyeٵ *dG3Dv:62yS7cT|QcZV2S)Mm_v0{iB 'D/r"Fj+v!g*G:CED9 % xoo=[ ݵ}zHѾ̓%M-5KFΘNPŠ9 xkm\-Kܖ9vJ oBo*8.CF:kEO*gXo#}rMa6)&2~(jwC!^,\?ov*vh}y~rʨi_įLaژ8&mPngihf@a=.1, 3_ؕLvn]08N=6MM#{g3Z>h|Ŧ{̱J֑x>O6smCHQ!q,V>fFq۱/sm\eaOw4n,}z4}Q8/@ 5B^}O(Ϗtu-^#~@;/2@UHvaz&Dg) V.tpdESu d#ϻ 1#t= #H]t;F2E>}bM,C]DQajWB7O~WdޞL;)4647i*5n `]!?x;is)K`d,o`~0f=zsG*o]h4R3ݜRٹ1f> I(/J*j B CT$grx, hiFynfradeP.;]#:;726S3F:UX$kdjh130"2_2_*gٜBu,{ondbjXw{s}d,8v2JAϵoS_4jŽSk]oC$K\Ov^? fKTkEfHT0ɾ]zQW,==M6rP+u{+S>uŁJujАx747S ɳ`/xr3套 Jt0ҌҪ'Ҿ'tᏺ?VHRmj2u}Nx?L2AKאRƓ$dn`MuZ0(C$ށ3U%/A(Z,ho:{ ᮾ)>C9dn cz>Cܽ@/\O>RHTco0D f$4XWkxѦEеD.)U.b3U Jc+¸;&#ϯyu}kҭV:3.lkLjqlPa[olDwb}o].qt8N!nijwe+q˅Y_=<( 5.$u R'66k}s{y_3!t ̕C;@$~Ny A&v)OR=.]]W7A cC6(`=,Er ّ*g!.7_V.}ZEWIh.ežl[f19ۤbOǴ3-򧟤36댆h\-wy˔f3w|,'k'{ո@LvStOU,]3Ŋ +KF9S )t?զA Q^Qz!].(se<%ޤ y=c7}%Ì_5]ܕuA%2bYbF$Ӭ,*xsbT[4, b4*8j;8rF$#\w}gMsĻnވ#bO4xZ+'0OEWa[QviuVy5Ea/}tzԈrmޅP;!:L1YW;7iM4=>DOvd8%kd Prˁ{']ڦ;bѐyֺiEɳv4cg$K/_!BAIcp7? <%0Nb0Njȫ[8&|MbUf$ǸJyFeǵ'-U[E,0f΁2`^Uׂy[$^?z 7E yBWyl_g;K26pbaşd^/Bɝ:V)%Y{l$A(ڊtAa0XGl+1Ql֞([N] )>8tÎ渪:,(CDԦͧ<G -< b?3f8[ewz[CR  Es>2ϫZhX\'3%N[39mIu-N4|Cg9D A&G$:@BLqs)H#Wwzo m;[F`- ^y(|`VvIw56Fq$1djdឩ]OOh)|~.wev㿍$gA<}(9A#c"1Dn@RڻgJdY_Oښc/fPЎЯP>v 6 ɎiLbr*[PWK]=PM$Mf/1%Oծ7RJ2g0 v4yT|r,~LLyq ߢ^a6^jG|z#{ΗiY-ϱ2#,R1ҍ7=ݠ:$Gad|hf%}[0dW7wSean8EFiJRyPK+c{yb^jQ]y,i Զ/U-s"eg5mV<+?TU5N'}˃tn|q~MȚA81z)8F<DŽ<.8KۢT];w4?Ja'7<u]D0.ε2tTb#FJ*lY79T"K2Bn4=By ݂o@Ha9ǘ {OF7ͭCRWHF /(u]~Zh[w_3)(זw+|l:cM\%G$}ncuo2Ғ+o.#!__PCEBϟ?'&~<7=իf9Z֚7ol-&uU6/M+)ȿ|_lb#~'8#M D+~,$J@uLewe8{jC$J߂xaBMl3ĒRd[6b΢5c4b8s$ıF#ȌK,|:U-4 bb iûJ#v7ɣ[#ɬ{15̺֨\ ✔bY"+'ހӮٗ('}1m>D3`}vA~t(;yh@5.tZ͋#Mus  L(-$'nJ"$ٲ+(пԾٰ$H,Q6ֲowR¯V}>^VrM ?ƲKKL+"8jR}M5d}"u3d;Ml[]Fk4:i8SB7#nb,OpJt/UZ]:B5HQcͰǪen뎭բXED^E%XJ P U[dS XL?1ck KN!h JPjQ=>xo^]CxAYOb _a]6יVR9F)w췡ǣMy܏4IK=3$b}L|o W'z>fHxL[.17|\%ON?;y5gk5n9m^&V&%Xѯ8e=j6`daؓ\n)/{`Q>mzN!9 'ܪu60Zu~hp_!s{ז.EA ;VvZPA (* @/q:W>6ATcC}KsôӢ4b +-==- =݂Jz4Oƭ_k0nmZi':iFP?] 19(!ϳhYm3>vcax/ B8 'oX24R ,9a]HNA  :˯7ntqg3{6iw&$AG:UKƅY¼fOM6mZ3j?o۞P-(( o*G Jd d]u2 PqWjc TL!_QRi#_'SG)",XR4]#C!ALHݿ k]a!ScClёa z43wd\LW^Cwœx(b OߡW q*׏*kgZk;i/  6ZZ{3]e^.=m|v%UO7}I)t*x36bjm}_CimVռiur!M-Na0ݬfFoXsc*km"Ge O L0oL,sU*A FLLH(@L/sxxFԺ;^U$oL"cM&L>BfEm&FHtRIƅdЂyr]5K܍í2su @V XG1kB>ߝdECJ:!|ܕPj"B0X55 7zcڀ~Qxvr+8Md CLK*CM|U߼ߙ>{|>U| _v7m}IΓ=܆ x.kX"(' ]*|Kb' ~+v#-A na:E][:636pV U Cx!?NCtB% 4c{7"\>񇿶jVg y-ֈ-1$Gl8[`SOa{_QYb-NDY{ŵxg/^xyuxW cfbhmwt}Dٛ;vV@Z+pqr}= S-ᓛouPSo,[U{>?$OU'[=|Ea"R㶆-t~F@; 4WPHy)m4"kLPH\ 5 ฬ̜%;(󦳒WdDB.c7[ F9fuS80| FלkWcӯ4<)A90h C!"}Eu|q'j[ ̇@7>Ɖ #=~5߷tA%-X D(+zƭ_n1A\S$,)vӕv!޾,0vä3LسjI&xt!"Tsl VFY|22Sqz:?r_)XzfP:"InUw9L%g㨖ten;bXe^ %Jsҕb??D8*6aqʁ`rOu["u"HU^۪MñCƆL!̽'oi+9j/R/mс6 @3ho :# Tۖl_d$0#F0 Pߚ##-gV0Q<]K((g~sW6#Rڱ^6w8m Yg_Y䘶_k8*~Uyl}^ϣ‡7H7iZMS[K~תu}4կc_:ֆp9pBQZQ.QgN0,{=+7SD%0!i,,9@ _"ԢϣoMzn 9d^G70/ffiw:Nsn^w:Y=6 wiFF.x)&CF6FDLQ#D}"R2}Sgϳ< DKF#k)Whh|[B7Rc`|sEE%~C]ioPA^HW3tf3Iݢ{+ Of|^XS/ʬ6hmUT.l^CDVY^i8t&M4$O+[):ǭ2bN5oD~:͑^2s {G%':Vmnܬ P)uz5;|gyLPtHvKcc+sLr0ͽ!K+:f'h'p~ZrhQ>{)Ac zkzE+% 9m}='DL||W]2\+c-uRKx&w⚡)P6$߄tSe̊O,Zm:!ufJs?Q;q:ʙWYUJWJ0NZS΍UxLkh!gSy E'BhO"w. =R>^1@y jYZ3`q[ g[_\S"T#Tdd݄~||~`}\RZxX(p+CůC'zgthdx)+īDիF̪ 62ϾݙŞyEQ5T8BAߡΰGodj*`K+A+r]oWAg@^h- ZtjrRc~V\[IOLjK8Ӗ#ÞϹmBK'qǿ(V,V{ߝ9IsN Zm&Kzf1|qqY5 }3 Wm$tk PuP @]fbLZ&\ȞT.Ң:daஶqk~foo릾&ƵR3VTohie禐V_M12H9E¼V˶Sy|JuqgTB@@P V]֤Cil>٥WIvյK aΣXØ^}U9rMڹA j1ae1ET]KUCY.Vq_K sMͩF2_8L;#T\ఫщ .3TʉcNl ]OC@|`+3odF6id!;cïSB1+$^p`}dJqN/^3k@e;Y_rJYcEހ`@yOb8`$6saxR;RyĸHKKEvP .r y>+ˊ?PP47Cjrajl*e?[qf&G${hݻ320׹ε<OKGGk|8rәB"gw3ĮR%ϓdNƸNYdf8 Oo |pB_`jm;yqhd6#Ω.ǃ63EaOLL `皥ד,\\/M]Hu:[긠J' d%U$b=bMl(JanCr# N(vgpASCj3oӌd |ҡXGwN`lop_ރ_=BkB\ *y o> W+gwz&모pYX˖7?nH9^Tߗ*tv͛ ޤLꕨNqHږ,<.9c`di`h;>0OҼDЮ+ ! A'0K 4sb}ÅZgl9&G! Db}TH.K7ϰH<|Xbyqb։g ~{OU (өbv]5s/~mt :nɃ' '\Ij.'*[?+ތi ރWgww=۽' {U%&FP 5UT[KCŤ߯yo GBڪ?%Yryv\ܿUlus-+Ov5 ]rLn+Ic)!5ĥ_n\ρ  =h+@Ė?$]"{%T TK(D^>}mCd.ٳA,P׾ ϷV-lgܛ8zZ%ru K钩,M[8 T5gVD#Ͷ$whoBYdPe P#!S|~J5yLؾHѪAh Wqo7 ݃kmጬ~M; ]/OmFb=DZOzþflOup4W04Yg :nf P_ zU%rn5m;&T4G6ZL !n%%}lf(goL5W1"I6tp<>%׫ٌ:̈́ .m5th# ӏ ኪ̬͗HQZu;T-:G.V2lާqErw oN:yOz~ަ_j<ñGm+[3h,DEנi\@K'p9)/a:2seP%s[[k F&Hgg^n t`]VmEݚ'q1YV"KBp(BZw5Pr2V"`sigwicqd㡻g 0IV(di/i=? JчZ(2%E3!gaH{#C X2Zz]"I:h`dJQS"@uW@Z@ŸK<*9)QQ]iÀ=KwRQ c,"Rަ[i8y'X7.:n(!pY}w.}5[PPLRNYgINvfЅFإJu_|YůCg lpFf$^KEG( Tʟ4*$ү~i#~$@ @ ނh$HL]ܦ /gMs P:,*Dzռm|yoK {^wkFB;ƛ O=\IZ9d5"oD\`9Ñܺ}bZt,+O_o$ŠڐgϞzY\Vfb301QzEgIN_S.f ~v5oP~7Wߍ [[JOE9bۯskyɢDS_wRU-7p0?M v-6f#n+ Q`h u c>ȓJԇ\H&,>0T<;i88r09WkmkaejV5ΤNL3, j ,rUn}?f@Z@x_%k9}WqheCf!Ż8+]ƶO.-@'sţtV'Fk7.㫬 dM.Qh3wLkj/_ޫ/k$Sd5ޢ^Y^ZUXϟ&󳸙i |.E??A׸Ǵ+Yg8M|ו.[v[Bs:?~}[%/OA:ܓJ}I2[<%4:;9,G#KmK/ +K w?| hhq4YG/q\hO7-ɯm{\~)Aa ҡC.ȗ f!3Bs#[5?yp5Y0N: s + K")xò]O4lz d S A~|-xPaHLUsҬtB+auNC6/O&D&2]JxV{?Yo8 |%*ņ0ѷuGkO1O|KtR(S0) kdbc\e)q*Y5'BQ+)!7s _N}]R$Iugŝ^aBWruyW٩Dj=N`ėyNh6˹Ѻ4g 2Bh7K4F1qn'`IQ{ 7//Q9bVt1$N2u&;MIQk(x4&NM&7/9<˂7]¨5|ڝ+0 RS~W:A\7N2SϽ]cpˆ;9GGw̧p[1e 6+I S@B>!t2VKUQO݆'} j {ۯs\?Q*A o0{zM{WtS~b RcB2i_k7,.c__a^>vv:Pg^< ˻Ĥ~if諉6R<&e}X'SBN 6)^z(y#vsvPCHl'Gr=w7klw ˢc}.;C5&o&2%#?&j%S 2i_'-ߞ *ww$m,}Α@XA!w5K;JtUQpC? ن/d0 oNwע*ߵє50Ch;?MſxhbU(EӍ#cK&x',} xZh{g?o~Q&~DdՃfuSB|k(̏EK%G<ӻzl8d#eg螚oyhOstWb.tsϪX>{+ m5'>dyK8&9JVe~${;;A4|}lN,[ig<*^K8|ՋeVqF74}e£;>hH.,򏥩>fJtfݬ2 iŎ)Cy^ Xz~9393Hlm8(P۠G~ѳ08YL|-}K UFGNAcĐ ©w{z9JҌ=O5.yA8;vLJus/KEFv)L3]Pݢ&c/S D~" 'Q_NkF<$A?T6"Q𭴎GIDjvxN(/_ 9ݻ(yJ%7ӡ `ޏ]_ڠ4ymj*b֤A6|?5%JXUGh^^Ƙ9yUrs[Fڈf~AzTϡ4eQN9Za"# 덤kc>me\E|yy)ұIJ1Vqyq\e[VbwM)&F^?>}9NZQm1n+s08D n V"noQ}- K:K +g5+[QGm`T VΉrLy߀aՂGCdeCˊvg6V{NvN=v5~&ٚIrE l=ٔs7Z$T̖+ZT[q x*o\ pIhS2 %(V_|LkBk kÌ2#'sq'!a}5 ߲F#֕]fqsuFbܚ x^U5bHYwdbOΌoCS+/g%R{>Dݚ#sbM2бvOujr5T)ct`cTe32@rH^ܛM30 #U)e>sfߟ ym/ѢDS\͡FF)N6FNu3!Z֥.z F>FimSLks,ycq} P^!ո1Eȴ,dT.WB||}4$*:]tdAE[s}MEqnUzg,N|$gpplặߡnRwAKћMPj3/?`Tw[Ŷ8|g9ղQ*]:Ӧ ˿ۀhFH|ՏtQd}Ϟ tT$Dx(ž_}11NVAuʵTg8Y^.-hrȗLY҃Iݾ$5@;HIa.͛o&"OyZ)@mПy?s2r,W~_ظj5R0,_jſ!U*Gc4&T-k]aelxPnu#[VxȠ톽FJ "`:/G@7xrk&駵 8Yw0/:II"_$(OLII젭hB+Dyw*k #d Q7m,dcgoh/::7B ϑO ^%a<\('i_0C2zzn amD#:X/~M1;nr;qݙ\,n Ԧ]C'^, ^֪8ѸеiN<=f%lSUЇ벐ii!-V<[%ʬw KzUQMGϧd\vxh7L6ʱkbjG^rtޕB*J!c}o_.?[unh$9sR81 TH rsPM/sveÞuȆϚf0v۽׻2Yя{] BtlbUeSl3c;k6F̨v}M$)ȵsH/P,޾B?ܝ^_Y<~=N]R5;d$ߑf(q귈z'h۸6JT`U6xzg./՟F>3T X?,LX!c \ N򎵑HwQY4uaFKuK)ҝOݙO ͧo-ana+XTqOi◯PC“9[H#Cg\oSzn.ci-x,M;ff"/^Hw@8y bqF ݺEsKi+y+ޘbN&9z2 FS.ܽpa=3:;4g=R[мĩ|ME>Inc /wU@3>&m{9wbb_/A . @` L} GuJ.*gMц;xpCFۯ_h麑W)n2G{Z־Dw VgkO/%:M?J݉~%)ګs'Fd!S%$BFgSsff_,L.Yk]߽y6pZ.$%"\k0T $ZA=*"rf}j=?"G"]4I(N ҹ2%O݇nMq }Hbulj7+kԛ5B{YZGgfW2-Cd;O.o ۀӁ[ث˸s{O緞מ.:; BX/ ;MR̚0.gnshgqdrfx੸ͷ^@ x53drĨ\u*T3r“]'rX9#nPD78ަ ؕZJl&!bmcjY}#hO?u)FD+omavez2xah]}lIw.m]j וJ! KP0.:8Z# \~ ~5ps݃;LJ;wJWlYn:7ps+Ҭ#P|:v^z;;g `pb5QY{\-sN%R&Lٶkq,!#ڪ ;$W#SZ6sR"bUB?E௧h=.P<6tA9o[XM;u{kքJW~z2(u~'E3yeenV?C\OǏknFdTU&Z廆hEe@~jTY* 7eV}7 di-:Y^ɧHL pA;h ; zG4#UmL3oO|oK.sj/ꀲ%Op֌4)qq03utZt2: TP܏RVVVnJgK]@-G`$O"1 n\q#H FCI;+s넃t=U":=&Pua3I7Pՙ>.v&sҞż !lϣɇE•SeCD;fSiRE tR~֌|j!lL]Oȳ:q8Y.3dLj`\y9;@O0Ƞ~oY/L.\y"{˜4*uVPTCQsU, R"Zrx?lv1A,m٢9IΪT%R P+S,I])F^3IB?SЬӶB@"6]!7N.D*3{;; ;[FeNeMVyaZ&|I2MqK*tѯ P؎8ϫlB? [pOz M`uskyʓ8D)X!@&-g^pNπ0##7qlFJnWISOJDe+zV5Ք $h𖈊gF+zk(@92ȥ;n`SsGwK2<H@X@8 <]p;ˡ #%ravPBocH::+Yj?i U^v;y~x=ъϴ>ÇgoZ(~ZV} /kUۍ;تE.}Z%\.588SG0.Tupiن+,1ؿsqpwXDaࠎvA[@ ElCffܐ!ڃSꆭ~X'6borw,.=#V8(4uZ}+묈*-~Oy}N'eg8d],5J>'@|b[;* V6 Z:GIm='<{3P󾭓:/bIqRioxU~oES-ƞ%oV##^Uozh]sl/cYtz2ִa]&;Wranz'rO.iz\;]Y؟[8[nX;9Y{_fb0hlG}ق._<"Z+R6s\2POUe b+g'ipr+sloQieΆPUw' .ۖAOI[&fE7mw +\wct#-<>1Jm{ ǼȢ'gL3yy&!:|bj:  &m!E\v:PIdͅ{:619owԄ{}igp0Q"h*&ߵ ]'=YW b?9م5r_֨%p·svv oΞ_pG_@zd">DgD=?JY&,TB$\XlRE kQ-D{pkf 6p,}MՏe#n7hh)D\ fLx~eF*$`bWG8*C1[OH MhLԊ.vpbh 5޳1]"q.N1̫T;]ㆿ?{T^vRNoDx+G$]/d|&~;_!@n2uP͊gQLGgK/Dïu-Qr&p/ Yc8en廪?+?J0ΓHc8qHʼ.ShyJ0zN[wɛ2F]Pv('DެX_/^i,ow>YeXg]~7`E۴XDzuűe^2DJAjB#Jid/P0A⤀QGh|χ~&D-7YC}Dd"ej/y藎NLT Ĝh؞)ARx^D_bǞI>u@\ }:<T ui#["YhEAF@<)5L?gT&g\&wR:wZ:oVgZe4`c@ߒnu[#gyeҥjPWm4Ί+g1yh=w!''ˏZ 1c0B/DCIf-ybqH#wi>T+k>{$Sc30R#S&-X>-F1-U%"2O1A 1^ֲV⟧:W^H[[@^Ez|QHgec kc;~' QӬq@|\ t[qQ&?2 C;۾v~y>@t:9pC(IͿcaiu3_L[yktG鏆-9ZG0 `Yʥw.PJ9/:^i23<5:a7sD>xiŻ&$V'T-Y+r@?xg2qSzKhx~ch" aI3m`]oPNBX#'_@Oc NqhVWH_ZV8 k2UJs%*>5]%zp؀+ùH'jOJLѴNWKHSISLS MS ː̓.idb+i gpvW^Q2TIk󽶐ټ$(Hq&gxHle0nT-okcnU $ T\~iΛM*.L*qGog/^]ҵ\"~+}aap}/euA^)(>/دYkkgl|>O 'aې0,Nip=t(r!JsZ1. ԂweOҾRȦvW4Wz  k#Hfm.@)6A}&u3=UylӁy(@aJ' + Xzfn=90حfZy91C\Ǭ;ê?׺{ҳ#3ԣS#4CԃSDtm~&;f+++U+զ+7V1w <.PoyKխn?<>w>& ybhbZ=d"\~}FwGxmnhIģѻ脽CسwW>>&?|yF@c@b_a=C{v5 Ez[!5 r}\nqE띉S] =kd]8gfp!,,L.^bD zO[[Ńt&Sf_?8zpD0G5MPACI-D"2I UʱnbyQwVUf`~<$;=BƤL &PRV?0] ,1b]xpԂwsq]9$ 4dvbMa7ю7!G$'= I?}&ޗ+\ S7H*&D\ $%&Ճ8UTo_y;Ǻ\a!G֖C `QJD;k\.T W3Nk ]iR >M%)5& DC sC?_]K]e\"FNhA0;H':<d{v`AANӣ+ѓeN;WK9.?<"|RWk>8m;n9jnnwhm>n:xgDڦ|SR=wU8Kݬ0zQܨ@@0"_ZpSC].5s/:>\l#xӛ8C),s"bo .f"iFC7("h0BO*u,"'2Ym|Գ[xsqIySԬ%˱rVpI}e E|#Q(Y~utS`!]-] DGQg>MƏ +s˳㛼x(o8tG֮۳`tڣ= #Eo~HQaЕϕ"@JGۢ\o4+ysV56|Y>|t5loIG7ڏ C_,êMՁO`Ғ^ rOz"a s-ߏ>v<53De9-8e eKEVx'?Nt͎W4 lwz^N1'Ķ]cwkW"G SH%}r,Z)VHksGcw] <.%L+Zy|//J/TusÐ/M%vb߬ zdbyՏUIKExi1X_͌ӠT;~~jdk,xXyɟ>ؑK^i MZy߇wco>?P}׼1:vY,r0E~Y|0[*,mUQ֠NwϒVЊ! ţU^M]Co'h'_u },ձsTnJ*-JWn蛞ҟμC_CνvÆS rLz )=umӭgsT˳&@cEq`$+4clۭ~>z]5UJcB  bI>(˻-D$sRy[<CT nރU9Rar^/J郞XֱE<BHK+k$cZJ&v. ,޽D~pCVJ;Ƞ,yyڑ&k;K_LVʭGÛvp=1Хpw l?u>41v\pNCɧ)S\ms?}S)>igڭ1FZICO"X($ R/lA'{1+Z,f[T~Y~PRP.ZM&M@VlדQ-w/I%7ݬ <00B<Ȍ9TQ߮^!S2"^ Ըӳ.c.~m6%^Fyaj?3ҕ RU*SԚ4 B-V}P)(:$8.nwʜy^>PY~I et^ 21W8WnguִL5EWUSX& \d]HÀP@&_)Oemk+Sv!-=c~Ʀ>rb^2YJi)%qe̽=O'gwɶiGXۘނ͑>,غcwvy@ b_>MW (q3032ѕv f|3Db~NuFm2ȼC*}[V-yG+*߇n\k5GpV C_;Aޡ |- nރM³UuCW?C;9[;xڬZ M(@ PT*z5`@ǀFqHBfBW8`Y&\n< >FW=D{Ft!p%qyy1ͱ&~]x^ZaRl"R-2dBA5E|bђL0i -`j)\˸gh]'+ 6oåО+P{iAQ&M$U@,{2Q;D9X>(9^8[[}txΜ$36e? }SgVqӔS~L-_waOuh[kĕVɅH/a1BIkpLnsGm)/$:y(s }VN`4rg+EPs+z;O9ebV&}{ p]t$j仾E -1X6ҠuNE`ÒKR`(J-E KgR4Yu'޽.;G7K [bII`^1xEt{e;]ҫٷ 3.xP5B9T:*-zY|Dtq}S7oT4Hu^{ JC MΌpsd \ȷ'8-{F?iv†{<^|ز}0sCՠl/x sG+LAm'{c>^Mі Ek#.>_x~`{#(MJc7_.Z"En0!B%(;B[n]fmtO:rcj=E{ ˴E?ɚ"1 ^!w4IdbU͆D+ Xle,KGNysϷy#-_l1;}iii2#!.Fqsrs^ANN/[eWݨURBɓ'7o%-11TUo:9?:)) !&TQR-yOɓH]B竌>ݑ0<xdlg~_>6fqMĻa>&xnّ]K>GEW5p7}nn*j\<{{@4E \yxO} c1 Zz^wC88x'hz(9'H!wO=Ke5] @]BҿlW~nib dR8F`tuˮ 2Uz1E,_=jk1?܏5PkMξI+EOkBLU2>0OMҽc㜤|1|"EғX裨]K `*0þrqTRD`l~`C6G ѵh䚖U|BM7Kz73Wh pG7Λ,ݙerE_\H4?[]x*^蝆Xlu/B>U,&y[yMYegu۰ ů"kLl2N_Y 44^K~ʲ΋^z/3 ܽYO_0NrΊ.*/T˳%樀 m6h~T9uYhB}G-+仢9R+^up(A,]v Tw*rI<Pwo~nP hF8O$O4OlOܢ6+ǁtGU+ ZLjM+tfUvdM>errJE(E~mE #hҲ!-+饬d3 d2" ׍oˀrݹ AGF(2P mvZEy\ZiDս2}zLlp~OVh -G 1 2;kbLԵ '_$` cIJȻ'S7(:@4k{-bDžfHuh@{5m%cY|-E{I_ jT~ۖ- udz<E#@ ( kJw|XEQEVo $Q4]e-Ao ̲%-ѥyw*i\l@ 2P,M!rZk)Yɲ@ٕÚ[#45 o sJ7*YafbP+D%{ʃv\crYS\|| djc 3 C-Y::xXDokGդ ,;iݙyS+oX0eR81u߷twrܱ 7;47 6 Z.[D'gWtt_>8f$cc=EgiL~QFWufJeJRsq\k^@4It vp2k ˭x:Gam>]f_hW^Hq[t\8;IZ,w3%':A(.T,52yANdˏts'2ֈ\0U.@ 26 swVTZF&ÔrPKP5(D15jQ(K ;ywwYvȕdZlx]]i#UU#tBVLfl< <B]$\>־z Ɓ|)ے[‰˙ץ?%Uً/.vpxW{bo'F7u6P_KP:,{ P>{lQ,W0B<~dqyqDJXƕj6E6DHq7hэ H2+C\eB 'Z* D>nƱfJ& ,ZBes>{7(@*Fa_2'5Mr7#4-~)Tn,3 ԯdh^\W&, Q\0r[u:X=,^0mŊ%92 ־Š'P|CL+JͥoZZn? {7F rfd_.s*yňF*}e AEFv/[4/U)&]*Yg 1 i[1yzsrd]+psŖts%u[z❺ڽZ! 7^ ^*jK*QJ`xSl*_apuhs7\4RÚi V! Ky7ktLlKK~ɉ.].2M*?чq|k7$_ml8Z%8RMx\󑉷+L;;>Y,EPSa`WU ⒭;yg9 UMm UyI0F5Vnݎ`~wTRϯ-d;'xW˾v2|M` |C KBn~T*Cڌʤ3u؜Q{8V4w p4To ċP%(*_?Po/iZ=Y1.mjx3/e"ܑf{ Wx[Y;zY2{Yz?i+v VKG娕i1>[E{`RJ h4;⮽)GHd"efUX[n?]#) Km6ŝ{lҨg8 zm)h5t3Y-|FOiɿ=QFZ߄(?x\d͠ q\ֿCEEIDD}ws+W7f7hMJJSaia!d $ӂEhE8y-=UyJj0a΃û0l 3Ji1jz{Zqu0P% @`_j~88zstP؍xvޮ_M*z|>AH!\ .v{I]I`+ :U:& A;]|K:"/Zp^p6VJٽ$WKL‘Woۼ ~#; %ǔhQT`R;b5bjTl_n]m篑#xXs@m |!9Kn:C_k1ϩMD<*bCB tGåVr` ~ncQ]e2}h[쪦ע倧F}T^`JXmHDUDױBƜ'P6jk|~FOIm|k̊]f_+^wUfV{h/5&%;c4{iKJ>FݑyMi#O"Wi&"L"cʢā GV(OYLF_͛+6(_9onr`t.U/RWUU%X0-uGڱ|Hs3`OJns Iݽv&Zr+â(r:深]:KF ]y T~_:\yhI' dqz|pڷb&ӣ\mKjS<~5O'6hUu& ;h3&ZeU t r 'M{E [*S~I4oq/Ro>MR4^jZX ^o;8X'Z]˷2L%cV E`aѦjdP2,xX8$("Gz㦷S|)+CZxT"bbab!b6&CĂKX/3͚G{AӺc~ 4b1s"_AdRJHWeV]APSs]%6?CMk| t5OcW`fgT R˹hbF.R.! πSEgܙjqGЏ Ww5v1MO-:,0wO|*z-ٵL hWOdKF7l9{cE'뤌P>V̉\`k yߜ->$}9Gpl B5ƺ.Y!0 9Pt/k&X{2}ݠmծy_D÷"T0'KؐQfRMHO%l9Vb{;c$#)9봿ү>=&ss/PhͰʼبw4)촭 /QBu9jƵG ) Yvk}^ EP6 ՘8xNHqNҁoS_Z8`:?֬OKWJT̟Vvhais4s7p CVGs/ҰpN"Ea\3enуRʲ1Il;oFW:N{k&w?Z<{JFR~y8FGIxFG%]M%~țb'TEerʐ6$۞{8Z%rã]2@+=ҾI+&LȼVl.3iB,ٛ试_JLBƴV6j:’"5ct$9h7Ϸ7&낢?L 4ʭg譇24 f`'֮n +T~! ;2xzHOi#Kd1G1[X yp{S;$'K7g#&yņ~djI~J![("!\-J).6^~fAGFdޒ?4EMM=6?:ws2v!vbb?du''{S}_?w|bG|?g%PKo]c\=$wZz[> mci'Zow>i[[ɚ+V${b BJ_:vǬaA0N0/_,2|R8 S]=_[`iy%b*N >JհFhڍe\C[\;sxx%qܭIt'a c&X֦SضU|CF\9_ek"#RD.:" BC d@i i>X"$   B@$mY\gew!kCQ:pt/|( c1`ݩkͻ/itt|z=\NU|6q!NN|%Gyi]paV/ z_A ,=)JUoIAL'wxS-R3_BK- Y0ܙ=φ^qha-%c|ϳwSG՛mt^G45'8z|N]c' wz;eK=6f51 N[4cUب2lp9VaB=?敾WQ1Qoz9L?sOxG݊ߙa+*cq\$Q$A[?3CL^A}Ez&(R_)xy ǹƹ, 61X@ҶEֳ7]|r,0WK޿ۅ|0}~0zIW1@b3v Bq2O[ltU+|^ES]MYI_033N*JWVԘ\Z[y xe4j0&w*bvLn&o=z\FH7O25e!d\]XܺL ǰ:N9nnMV7uѢHW6mA/uk#-B~+¡8n+ XV]kdz|XA")UEL<|m{ψRUNoi%&aζ{@k55Ĵ'z[5#hvC}*Av0G/ּߥR*R&m+'F ~]9y*9%R~y J v?Dꔝ Z \m/ikH[kq>m\"eub%}ERѓFaɃjeڈD}DHHC9s(Q L<īٺylo{*CW)T"lt2HыaƱwRTCE^ё ͌G;){1LTj;5b#K_$@VOKz-X*$I7X rW*Q$R]/TW6Y˰\Ky4K>PYņwŖ> J@S@`6!-CѠ6c /|`u!,< YO;%zL"Ȭ/_;w{ -yo5sKb}qSHHQ,#B=y>a넼NQ26 ЮJys$Lrk%OV s@Ť-Q7T O0 &.+WH' y "T@*3`aT#80հdډq J!Yz+;ㄐA>fɈ=07M8EtPפauڴyÀ]د/FR:LOyc' |yLs>}*Une+9^Gc?ѤOҜJ\]s&V$>}. i rv<'eW>1%Sra:'u'(}"J5My{֧5 ǷI0g~mױ)?f/j_c_ꣁNoO߻? 8M5 օ!vmR^m8{i_FaB0f}v-EC+FW0ɾ|!!!!&&"gςy=z`afww:;F0elULCεM&gދ؅%<zn">~*pI/YR1mQַ¸"Wl&Y)HC۷,Dh2ӤMܹѯ&[lXğnU)hb[o)'X#B2sgƒ\ڄb|wyVrTO;gUi$9^&Yګl̟y߽Z6RVB<Ҿ­p s*`d*TzNppă}Klu|+1j6CCzaZ1瓤 ;s"o9'KYg."2Z3t>隑L7X>+ 1ӞWS\0NN3%R=}dt!'^5zt bj)γ*x|PK\5Oϑ3m mbh.Np0H;A;S@;A;>P-Sos jz 14Œݮb_ezgE(3ae[gUsw2S"b5;ޏ~ }xtrcylpvsV|N߯ Z@ևzD"\9nf>ЦU4G9PKHO(WH β2Y0Y p۶] ֕v2q9^d!ifپg} g;:)7ǹ֪rS(~kʔMWHWj͙/&5+E>HB2&m:o{}PIlV|Mp6QlIK'h6?mZ]l RԶM6c*q 5ϳxݵ?z?tmaŲ87}&h0L=agy{*=F@"H76wkb̞$ ]mG9y|C%ؽp|=\C11ѭGoIn.pLa1 ~KSw;m;)B9Hn5`;<2Ak]|k /Q@[hdͽu;~;9 @o.PX(4nVٝe)P 05riG|lm%,Va +xʉ~@%4@_`9IuPऑ~ *QV!v-egE+=#yz7 ·p.`'K _z2e\$䁲0BBc|͋M0{N{x B:~Ly*m}**~=X7`7XڤϳcGtz4aa.qϻov=KQјe֮|}nm8XMo`"y] ׹yMyaG;$SqʦHoad)^ɸR`<㘻YxF/&_[2aI- ua./Y{ԥs#_씾z kx"j~@`:Utjrz+D馃 A ^v>=&YyPvm6F^ ;@"n^bKM!C]bӡޠ[hh,Z4C4~p=F*(WufsJ9*gf٣-Y^ ]Tp Z#YĐ4STJ,<9 ]ѭ?Iy\ZDyr^wC *7c /q /X^dpepUN 87=T\)kloaa.>Va0, @@ˀ]HQks;͔f5)Cy?PY,>yEnܭ'$fdSkU/Agٺ,ތF^r^\ޯ_>*źHl'.udԝ,Wj5zvb)8YkwHdXg+,u ][;F!)l[8{'Orx›yJZiR DQ;7]Nßh/3OP0xh2 oVj< L^UD!~c Yd>3/=?iνm | %IJ/OI.诐S׼@%W^=( 1_w#/ 64kdh~YL7y gTuvL'kL2Dq ϖQQoIo1 кЖҶzi%#gk5İw!d7ҿ4FdG՚\=vlya# ˆ(K`v-$%NAɌ:H$W,K2uA.h~Es7aƏ id4n%ߟˎ l:J`K}Nr1)_[Х^\rL0t:CIRSl"ꝕ+2_BK:#dRY{Yfys,=dc/T xoޅ's8+3m&\4x]W+3?AN_3fk'_ wpVXWF*Y}/hvŭƢ[s Bf(hl jx eUg?k^?~fQ*n7\S@x`Vx-e4|w; uu|ӾMQ} L蝌cYɦ}a8vNVDZ˟&9-}{Fw6Axt0uPo8|\ky^:׹?QTJkSL=\su'MzLP̿ QR`^oRp)!ѫock;ee?ؚ]BH,pC`X`ɯtAςHB:YeWb ~2\>)Ԣ7PQTV %ԘN)7ޔΊ& 5EhXʦ7,n50-UI4 rXs @lʵp,Q{4('}P&n60G)ߟYm:ɾݠ` 4404 ԿǫXT G;ύ\eFf6ӻޱ=aiTJH5 UM-8º1 1Qҟhb2 >h~A BXCGPyPyPyPO~|ķEÂeu UuJiB#5懈7֞,BG>t~/j 3_}pꐮM P*A,Vԍfmmi(n0̸E[xR Z?*y]OS(g^qTP¬ =Z=?R@*U FOYvlk\D d* <kX'EClDsNhg);9Jaj#Vv..V&A96*ƒZ9 Т!:d_/k{}OVa1~.AqSjaK'hiV``> Lr6quy EWL}kÔb U%ը47$7,no>}8rT{) \8B^E>K -NRT>&?=}A6fIr{}>KЭ#ڢizDkjP[%cmq&Uk׌r8D7 K wy.şZ^2G.(P-=n9ɼ@|S_[_Sd9؂hS@!/8+ SϏQ.QK]x[a:e.T 5~/$ D;z_=qGk/~M%(Kz\لg\y\ZDy8 b ă䇐{˄ۛw7v_K--kn*taT0/Qj#Φ4̯dS>aׯB?VsO1.eJ[U1څ~{FSNwhFZkUs#tz36~9Vچ?X YZLB!O!Us%#] ke'B?sp9u;DMK ~ n^k`qW=a]͛&6_yOxjn$;7@77N;3G7L7E(i)P}NνI^#>ҷcJ*+ u'1+$ś;3D;e˴uEQΚk_^ 8!}ԿN }{ڮa 兌A 9tpw$W5}w=7m?IZ[i<P.C(N ,~Jdm_M}P{s0÷E_@E?tu*FfE4xTsț a%۔qޑL!P䫲f-u3;?2{|5_;\ ,6\Ʃ}Ւ'~a ;Y cT>k=H4/WDg $Tc+,?S_vjgeՄ| 4,=RBu K!k`򧃉I޿MM7~(/P@-2zOJ(]l~ѺY':|:G>yeH @$BE[ї]P6?2c-8Vgg@t~Y:oQuWs&$g J cuE֯%+`D:W]`vQj~ƎuD^Vũ;p%'|誷+͓7l.:-niyow Ol(o{0Ɨ"tl`u/QJsc~C1{MʩN6Gx#-:  ;Q|"@P.٩ ^    v "_e#;OXz~vό1wjԦ@tTιHty<-@5LmʾB&"eͺfm}G[dk%y\Z@yJtQL-=Y'!y'qgtt}-,V9ߨb&VGظOpdNoE,{I§K54"O Ʒ<&&mZYz qi{IQ{}R^-Y3`]/@pCnk`ph;X d3\dz^!qM9(B0Fp9v5{lʵE1OEH؜smKt/qoUEtsw} $^O4xϹه.O_<]<#ΝuͰOr)χoܱ=aj#|LC:a(pfF= ._4"P;S0B<tvmïO7,*>^c8 SD7^ ֱFutbэPKSp+x=t%b)B3Y0^͓-c"f 9935&\[;#MTncK6DzuʞcRm.hٛM w+V= }e: =L)Qfqo9kTX~eiG0[8rKn>6C%ϛ;ޗ ;ҶmsWHYsJ, #~%!\{%ِk =N;YH^aY`.J&4! z]hL ^6?q/A7Oq/p$.PXk^|N<; ֲ_0Р>B٠?4 vv .@=]7tȚAx?Kꈒdǹۋ{='!Gw-ey-\:ʓ_!7?3wYٗ}E OU!1ZaAaV!^!^1i΅nՎfiC\wK3007\oݏ?]a4 +e*$5_x#-ֵټhArF8E&:[7*6N+gݛow؆YFkNS.|Q&~BdPm%g^˄A?]ש@ukF胁/b.xË'>=Rwn2UX): 7Tyq}V:+ǽϺls BgTe4ms'] {yoYDi\E\[pBVץR旣CO -v7rw1fNeٿWx`ri1itwb6&+VѹI"xzExe uQ&{RRjOEYHO6ƅ1ʭ"pylvfte3a[E"#X+&ZaB1Z(2p3Ib_=_ GwS tD@9}5W˃dÕ/*sU-r"FU7^-Vdwuofo'_]/7> u Yu_{tpbv{\"u3Xϔ6z K5$ʇ 1p]LѦe}}O~ڟY:E%.MټKiTd쩂ŵj._lW̑N3ti\*,$Y"nyCYהnnVUd.)V}Ug|?<+bjX oz >}R'qM7u2֌?뙤͑_@X.xP5,u0Be?Bڷm#$o r/4IęY+G̨+[=- Q41m6^6B?p٣ +XW-חj4POgh%2#5qnx|dN3$v^!i]A'Gwny0;Qe$J[{dsl}<:[<:'T+քNXgW?P A]a^{:ªdzA&Vgɭ ۤ+4sti3Dus-<%8 {e~Fljn8;yA\b~ G֒(3mj-^NPtZF z>޹'vx)OŃ8E"y8U$u08gcji5~bҌ0>ׅӡ5xO)O9r]Fh^=jbl(:zq|vv|i;2C_3.#9APؓeh{ՙ2,J:JU6D9B 3~qx0<_v3!E-ۅ_-R<ظWprm z4^=$VaeT+71y5 c<roޠ:.xYƷRU>9u`ANeƱ휳⟯y\Z@y)rܴr9Zy_)}?ةx|y2z { A` WݚaycM<>VŅ1k@w@.U+/Gܫ:|P ~kxPiNS Y$ arKT#կuTRçBܥ;<99WKHAQ28' /V8?:cg?}$qzbmW8M>/gڕTCbNCoEݏzp'̛xӍt3t3t3ttUyH̔㪃zWht ^)][xohliMWݢ݇ O'WIH6l7-0O7@O,I@ʅ# \`VY,  Mpk9QL*Gkut J>IOF^Z'\*WNAC h*zSP0i'T땖g$C ~ Oq/)B_W̗(1`O98DYzuQ#cq$8{n]GAoxʰ,2brwz/z;Q2~㋱A (A_c@ b^e˩NU6kD::lgDx&Zk&JV">zK/\F8#[Y#h?@mMʰuw[r{ե;`@@dVGq5c^Bw@]y+&`dK_ԐWT90 `XqՈsmo`ǿ"V[h`%cg] D≯Շ|Hޒ}u9ieCwͩ1k`lyzftl2aQego)cѸr[A0ߨ> ?<_<`Ed$Uͬ\^g]諕)NUSWL$AWP?t2Kg7k/g=׿d슝j5cUU}CMlStK[ҤjK>WT*nW˛YƟ/.5lQԯ$ޒFB* (l=}BkWL{Lz1j6>-\#+_T-Qc0b?`<}An]4,آPbbQ>w2Jm||{Ԓx@ C7A<6%&׵]!]'/|'t%8`4@*ư#@RYrab|(Gh|9fJ艶pqZtt2 Y٪?AnOa_ҍIڭeLݒ \B:+(@*NG46WE O0͌)j!~ҹ7Y{f]L(& %WGa&p ]裂7hj(-`װCT~]C2$i?M38l[y3Z# $P6ͭA+j\+:N<њpjpJ)twdzө1;?t\~94L |/m+PK m'fkn pԋSulv֭Q9+}dt;{eTnJ·颏-,-sMpKlq{CAtvlD۲ə徇ϴElzAtMpS _GgiӭG=o CZWW{s[}_e< S^gs )7D)e˞*B|Nq%w刷vg\]hqhnhFhRhloU;zclʽ|ṪErũ|ض[ 'ZDk4_J{2dW5A{45cA%y?q4vo?f 7pU3;MarNn)YնBnywi,T5dQknh&@1R,>.QM+O44Fi~Q.=< t! [qIֽjnP`")@>#B:ꕀ,L&N)BċW$32)ڎ-ZQE\Zml6 SOboxk !FO *I? OZ׹uOU 1@ n@T.WgXx,% w ."ұpp7qOpWNq:ΰ -_|MsEhr`-Q`+D㰛g4ϐj0a  `:Z?,aTLܘi*8,X\#+ ]iG^2@gdH[y>Q_ȊH7igEN!xZn>_cbp0ظh\K<\*8x( "`aW ]VoKf?J8컉?oO@l2 1 c+6]61 X:,`+2#K۠+ww=VxUoU/L dž"@03 p `,l zr؏;Wmޅݻ? ߇p+9#m]/UϣxTGӤ _v玹(AOyU?.>>;{8_oQ'hȟ=H3m&tA(5Og``r0: ]өo=?P\ݶﻰ(! !@HH=[pwwwwwwwhݽniy|{}{V=5`VW\sOT)ɭ׊/{AxLF;4~UwʝGc<΂bVҤ TL!VQXpfFcя(`%_KɘF=gi"$Lpon\w.q jfq,u}s?|LzISEѵςgh  d d d jd~9yHiv)bAOoņI?ݸև3* cE[6Gom[-y$O)N/9lg2Be09fg/.6'*YYzvõXiyc+E;-&8A>C)_5z\#jB+C-B1;gnπ0 ~]Y>#%P9Z{S艮ӪB_:[yϝ?&9HLIj P&x|E]I̙ZW6bhíՖ'2C2#c9#MFN1r_(Qmh!&4"43_M*hiULq-Ѷyɶfljcu>vMwx\F Cu8ךP,-CA3I5F59T57L)=N!1U.:G2{MXA'T1?uk0T}yPHAaccH^\&_d'b5 0_5U0<{7gD;Of㷪o5Um40r~-1svmEP ^v4Ir/qЈf#&Drx,@"WT_)wj s'c/:;j u9m5L[9uFrN92 jHrUrXzXmQM 5ڡL!t6+2=Nk;KL tS3AS𧲁hYJWy_YI^8^ HFԡ *්9{iiKi3ii4\㸏'qxqVv)wAuNCg#r ~xAc%Wl( nB}ss|z-s.~#WܶZj"D)JaĊ1hJ4o)F#W1)nm5|Woǰە=n4{EYI .*r. <!!s͡Ou2Y ?Ag) Q3`^ >ͷr)ۂ:vHxvs}![dCaf߯h 4Z26TF]4uO] =PG|M#450Sfu:UBh䆲uBgꙏN^=c ${E0-Z1-E wm{;Km/i!?]翕`Xpߛ"B,-[k'OX]6u<Ҹl/.OAN)⯙ѿW_EBL qR߯t+ɓHAP qj3}9:(#\&xTi5 G+<%Xʮ6*%-&KT;;Vu\ xyp 7_#AQM o;?'.s#ݶ)o:Nzǟl,-LIz$`r0q.vs ˙iP\,SF16HkJ [oŻ^*P'<,us-$ ,UXwxwz퀳TZ A)}΍#Sq&6BMŤK`rռoI#u'=i #Dcp0B_gTF ,6n%g +ɴs;S!PAAקIow(!ql0V`T?8\n4qN:5bZ {Ų~nSW[ɪ%tM< JI6箑ǚG[9kT?MBYGHII@`0eŖdEOmS/\N$WkH# SAh,] JքzΘ_,oQ-_^?5r{3&!\a 5Oץ1a ˾O{,ޅi(p={ET@p&jU8O캆ũ"2`Ÿ[py&˯nW޾sc[Uq4ˋ#Ib{k$ 8MT8Ŝ$j74,}>Vqd9U~>:qvć F&M-vlGA=$γ\wo-0RU};0S&~8iz]WER|{6I*>I  .;we`IʽME-!61Xp|Mz['N([Y6?I<#PR36>q: f|UCKErdN!Qp:٫yj^o_{[kvKc__g?dxׯ89.έ,:~ YkKs+ n.NuAr2חGtkoJW"Ͽ O2Z1v霧)c6K pC5ꓙGo 7T~d6C" U>s^|X^k ~"f^_h$! p [w}Dܛ[{_}[n:lCuBdIDytyE467qt~ɚߔjm:" ?[3Ս 1*)70 +x/Vk4]o$puɱ;GikG&fo/PlҷϰV}m=JBRoF -}Z;DrE4~j(( l9խz`lpkc1Cx셪4Hng|Q= yᵋlز>S{%gGgfO.GZi_Y StMnSriB"[kΙ1A,'6EDPlJ\Sh|)m#i5k`l'rM!~qbar~y/ݦ o~d.bS?Oԃ=7-CEVK/ͦ3|q-dzKB XA$e6ޞڟGif+~cf 5uuҠBiUnT-}G%gP|Sm<>yt4twt u}^h.mVZjUG(+~*}E YK#1.懬%Vi_|_)w6Ww7W}Y_YI+]<';dgLlG˷fdԇ3,og^U>l6kzkM]p}WtWĢƳ-L0H ŦZ}/@7p.{6,Zm573E_ fhlqt 7 AxDH8eəF6q0v0s25􄙛,jKϩ⍫H)TJɏɈMЍ /UKC3sk52u -g@r=9V5~~: 4Q8!G=EFI)\͌:T-}c=|2} m-s/?J$ DJĹvmujv,O=w\K˽=7,K8Wǀ%9ڹ,4r׹ۖ82<-B"Yd ,N$zfvݮM(B~%3Vi1=cFcR0/::{> cM@(Er-l9kdSknldf/cRl=L+ krr^YxAKEAz@q(kۢ "P&P9!P-_Wo"{lshtjӶ9-bcCOu,c̳kS4nu(0)uvn 3鑫lq:[z?5 pW'(Y V=.ZU}^;k,tzq}g{s}urwKBaHlpfX]PzAϡEαL7a@Oj͒^{\*J1>ܬէ8iZ1{K&W̩zR7Qޔ.0ĝ#6U=$;޲ Gr@)KHw}}@ "N8*YӯxEP#nwdSݎ*~ "yNU-4"x?TOJ&ھlm-ٕ̚YE6xaMD@A(r:i"TsZ69H~ /,!Vm='ב#XVőKG1pl1<e@r~*Ȼ t M]"ĪdqҰ,OLBWl`gk8|;foMϑǏחז<ӾdcwWK✫ȳ.%)j~/LGGE+yY{ѺۦՏ׻ /aClm:5Qȷݢhp (pr n 4Q"Z"3]&ލ<>. s_uwG0A8gȔlۍχ"Т_$l7]٦L>LFMSsYfӂ? Pi#Al.C~눱gNz| JK ş*{>ahJ># 6Ja3AXXr޼x]^YujU!7gJr] b^\NݻBѹCt~~_e)1ȸӱ6<0l;ǷBf.pˣ̳453dQ7,a&U?'4x֋/t?+t+tN.|6/Va_%?1ð2dna'l%"1;q;$ A]q+FP5M Z|s› eY[+q"+%V:̿SOXEJPK9H룁[[7&!0 |ԝ'{&A;h]29&۾v;Nvvvp;_I8J;MWH8SlƬE/>g )0N(a- 8QwA ũ+>hsɳl'3ի${UO>_ K%; t\Ub_(}+P#V#%ޢĪd~T LcKn{vy0N ST0PjVq1Dkhz{ ,ds-4\yA{H槽kϷq6U"@< ܟO> qA |S1S)M˟_u`?_F7@ym_ nPwsSsy޽?Ke`xKcvrO}NK;qz |/n2d`Ϳ݌/4#E N,OU%]<%gbDJ'_-sƦR&U "GzPDG+6Gۘ@=ς'Ih߹p/2[)yY]|u!j_'jFȂwp/'EjRS(#z%_ .B򤘮x9[L7G3P\'yfats&M0SBEguɚp/m,:Ŋm/:^t:O0j#djYfu"gV2 QnSzzox 4Mg~ ѣy |չX5/=8jҙbԙfЙי7,/@T`BٔslT\{<|cd#L*ä́۾Dcy* SiD$\ȵMxt|}S__'<¸K~Nb&{v3ۜ XX#Bֲ3`:f;n:;\A74ycSIG.0wcpx4&E&զM'Wre~+p =<8eQ]>+&'qrgCTBCq ".~;M i[ QvKە{*&%rV>WY=b(oU"2pyqW퇢DW?{Hݴ"nMm#x7L)/Ryz;`duRJ__uc{w/$ c1sXcn&X}l66L Q)a1 ZgF{V+SK_DQD>dhuoZz=Wn1S|P` Q1fQJc=vNQC}O!aD(+17?rfl2.Sί%@EA xH{5Ge&c@z^$Z<2svKH͹K<ʇ񢳅-JGӇyc僳=l|Lcu#{u@Qf- 5NZuqUG_Mj':;Z&k'č,{[؟;5R4c=zlFtϳm<-wb䪡/<(omt/lY >o> 嚥o;:7]?>}-I\+8]src|xg $P!_.S+V!$PlRީW5'жѸUW"X.TWՌhð!>>v0lؤޠu|r#t}SkO*if^&qe6i6U`F(GG4/A#L%} j\x}tLW o555Ribŝ)_+zu=@ B c&-f{⮢ݔ|G{iگ iQC ^'(r*//Or`7NɝpBc>mN'zY!1l^ ɯ"j8[,5}6S-4Y.zH]2𺣞[jj< %9BO ![>M6 \m"m\\/*;%8&L:#0<ǑVw)*/՘ l;{ ׈d\3 j6[:?ӳSяR-`G}QG @ {] Nz}M gj@x&hG_]x9!P /jd A;GX&FG@Fn/?-p5t/T-8S#stBoT$Sv=labtqSE:ן߈0`q5~[b/!ouO=l<6;3[.MU؁#״K&D{XGy &,#>֣g#sOR&okQ`mN;Bow[7/17q?srVm6@{Oo n;pJ` ǕB䃾4Ls;6{i""dQ߰eHߘ3{DC'/rQ~[ƿ;"x8/[8y:I9kK$SfClg5E*4<~я_LBi珨Wn-S,͒L= ٚ'_Z:'-%[K??Gü4칪R7r.747.j^祴4ԕJW@EEŋ?MMM?~ $$}eF졳*[\?|7yZxSweB/upћxZSMھ)敞7IYCuy˗y4&>w1@ݠX$^'ۻa"NoMݧ~ xmv.މ,atch'8jR>u$"I:Gpgh>5ޓrJp GsCoeT$; ]A>Y\\%+-&D@U|d&!:,нr8mMcs,[riB' ş߭эP((M(()'ܰ&oVA6/O;EWʣQ~( _1:]ުs=m3CA'V(ݪkSd[$#7.r,/>}Vu&bq?qtsX$ctW&T|еWqaNu2m(`KUyogfzGvxAoaf{ޖœ'T76/RH;99%^^6aߞjjLuRΎ4Ϟ'镮gݽÇ:uuuKJJ޿wm/毮zE6C{@v!jAj0O.c*DlښȒw+"x:j>g m&QNMU\`m-hM[MB+Ks@`fZCv}VYf^Fj~Zu{}pGZoFʕ%⽝wǝt } ᩒWJ) /z*R?*\vHMa4`6@ IqQ*}$gW9M uYQ!r^궎6JznZfvN~Ƒ)ӊRs~Zf[YAq]^`Gêh5H<\+##Q S8޻~ˮ[tSNCD bP]KOTTo 3NPH[XϜ5%kvjmv3=1l.EȏeqfrNd,bk1 ƼFBIPTO`h{irAoM\u fe*2ߴ wnn9?ry^,ͭh݃P3k5jc# f7ʎQh|!i}R˓]T-] b^ 30fd\ZeXb:b醽:rrny;T/Q`<|`?[+:Y?B(S8gsYj#[$k:tL=A?pU({ܖ5Bb1X^RXXST67H"@ A rBaLE@g/B}2*`P,R7 #Tq7㡯'ü -}&|L.O!հRϵW-ܡI?cL>2^畮t+^[[KHHٳ?8'1gsWHd7q2o=_x3&Քg;ЅeW׭yvq]~[DZqͪA$4I=UQ1.D;eGm+2뷅O> 7$w k_9qY7/ee\r G$ʦJ'DEAʞֆy1ot96&\(֢4#9֚nSPcTLo3|]|a6NI 0Jp"s=}iŢc(ܽ*ؐ&z6bԼ-c4*+$Tgv-gBT~ɄHXʗKj8{L%3eWJŪABBBaB.Bf:2$OWD}*ݳeZO8zߏ3l?f(?8}7(g}jcEu G(D4)D&_k{[4'ЯiR—H`X>3x(¤'t!1S/R^Np5̗kGm.Ekv(UȖg&% WSe9_M]6z}Cw}̃,2K9geXd?몎*^-V! $ fӴ.Fǹ$ |V_Z<|;mTjRYr{oƝ2)dz9iI9~kJsc1WəHp+`#HnJ*j5/)ɒYjz$w}0&gb{+SOt~ni-*噬 Bʟ{Θk6r%Pm_?2[7~c:L2O.}xdmSJɜ;Q21`i! T!KW ^s1 h,|_GG4boT\0\4TO`q~SlHWB~B.Wwۯt+](yii]6N84jOqpvpOuaϾd.ˏM~ro3l~oQ͎s_t]V.Kpi'yeA㲡/ِ@p qpN+_e7nOp!뇈=̡?3l. & {9^gf O {1v[Ƙ|T@IY=|UMsN J?eP॥ZJ)VZHq)w;">3gw9/|'L&Mk@H mD""8ۦ.Y׌!i'wcFQ顈Ä'}Գ7_:{aiZhSXjG"ѡ>Zaldܰf'ql}l mDT#KØB $yk&-L;BEz@z\B:[z;w+)PucuEψe#Փr lio]c͆,lyRzLWe$G0R0)TF#%l `Dm9  <|z4(V܎1HSRIѢp7G&X۸_V1FѺy&׼Ow!`4K4>1i ] L̻$X]nW;yM}~"k9S(ZwDgb2U=l7[]"m .W~DP@*9i GXV}! ` ) Oe6גgTw/HN$p "$q.4Mvއ nc7q`TbaP?SH8 b S=LJ%yj5%?sN$!']ys }sVwzex]83?/)ĚK-VBgaB&wiWꀣ`)|Jjh' * y2j~bkdPhE j@H`D" #k&ܯlQvf*%O"OL0}]YQmwҵb`G ~(pOpOw6ECE6Q~p᱆Q_|>os=,;yrss744ʓW6Xܿ˩ΤwFrT CѰzSȜw_P7$ ys=`Ai<]i2"ysjfm7mI NrdW"pfV ƥ{'oO}oYU8'>dl [ϜK9T5 Ypaxiog|"wԊH58QJjyL^53U*U0[kK޿hG.,zԝ}  \ey -LcU ~_p|hl9^%\wYuԌ2 xAuG0+Q_7f:Z=%84K9;O:P؜[#`:rO%2&۠FRTfA5Ŝ>2X"x2s^7PxL"XeZHMVJZf`M`cclPlrlIlUlflD{M/.9CPyv]Xݾ_M\^RFmDFRdA`SH+z/jTh_|KAKSWpyjJT_ӰdПtZO&n"FAgWml_/ Џc}% KF%K <\teWe\d4fz4d \gv0@]lj^3q) DcF} Z~{=}F|*80~G'u]=gIxVlLOMN Zá[,dxxxI$˸$ȷ*&O`&c 4,7J9al/B2$1BOV**|rW2Uk?eׯaT`Wn1TJU{WxkesSĵ Zc.7os)X޸0qdA_PX~$p>y% BgzOk A#Oi"Su#Y"N)J"Ez;Odz8c3rHS6{L2R"eM9( y t'@/,".mli`e)٦j5<+`[^mXcլOionQ0* q@j<+YiXk7/{H_6&S[Adn8ؔ%KݳT\TT]R4$"l|tȐrq^dUSms5g1v "Βz62r8I-1G$ZfϫqYz]+#' Zr N5d\GtзJgx d pnOA ǟ727O2Ms7UZjHa3Ge%Mk>x"ܱ+6P?#]="#2?P(^ Z9/L!'P6WOm$@{;1lÞ bw{ QƪU WWi_+girؒjd 9Z)y~@1|&`bb%,{Y̤-))FYa_y ]Πo7FꟄ^e]'ܪ6%XS2ltjw,s@} zy ӾEEEnC)C-yy>}vUõ[εt c5ƕ\ĕۅ~MbcqD6Dz\ ɻ9+٠Ԑiݕ%g(w$i:s7 r )Oñ>!A_ܽ9gSO^-Yi'w8z="9 3 #*5#^Q6ʎ6I?ìvvRp确x#LS!wv~/aK즾(SM=Ok;of9kM~~~~~Y~Y~Y~Y_Aʺ7ev~õB`[,3]Y`opAꓺIə:ST 3zTCSĺ:9WG:z7\ 5;+yW9cdVuJ\xL9UJ|6QLY+fbz${4!MUEc]ΛWXha$WK&${kjBVLh,J(qvI4kAoolW-| .5՘'&׾nRM}[{z  }W.Q) Wk^{Z^^]_VwB-$VK1Q/?l~q9D{RqZr׵N8 p^) dJ9@oX𡜹g[d(G͟$[0\R֗g;cr7 Տ9wұn+ɿ?mPDm0rË{GD% ?!A}я0?l.q6ѷ>on﷩%yا*m<9[$mUp$yreeuirik}apyRҴ ߋ]X'Q6(A:ܶF=xrL{rJeL=M2LOg n[|]x A:  yĸsQR:$2RS&nV*I`~{qS§O4ɣ y1%>2nrDktw"ZT";eKBmR8m*vg2=~kwW}PvO|KM Q$ ~#Qc2]OXv|&M˾x+mz5$W3T_$ު߹C 61o/JG"5Z1MδT[!|pB9^'Ld+fjNқ[m>-aOn-Rw묓,ә&ZRK`*wۧƱ`Ll]}MjoT"zEc7P'ܗ'*)e@)zML7U47 Nn:BV Jo&wLѼn]M8I5%6.lYƽ\br l~~,YO5+ p߾&z65W PRkNtPn I24Ώn"_:AiFS>H9/{{#6<T3D@+DL#g?o:=K WJ6< mI2.Se\!_,ѝp!8ZJY ~@`@9͹Ҧpw/3=wJFRO;hW\Pn17I~2Ni}al!_;|[~J3,Thy`7$X]ؚ󽮙|P8 M~ `8X@*tx!?e<d\%4D2IإJ;muMqk<1H I$6uEm||?8<EuYshzU.,R6Z4Fg7Nk5Qn)OhLӯ_,cэR+o'\[;n{.:(ew}ZYܭ9|ky`M^UqtA9o;hN} {Vf2vvvǸ)P%7B4<)>C?E..A3/F*Osxw px[{6VVQwp0KCM%ҩ+#4 _݃T! K:HbhO8,knqtTlfI)m0zInb}!F˿d{ј<0 JĨeV3fu-ӎ IZČtGz;D$6jm@E<.drɖ&!7^lp<6އ_M]m~>=z G$KS"@W.7+֢&i$hhfaghf\6X6I*a}E\&Kr$=+\[FFK7% " /v4 ״q_% U:VvyN_\_x"x<ߢ^u9~z!F88eoG4j?jɠtBi*hŧ`v)y'3+P[Ò-ZeQ7Ӻ޲iq ?rGlX TE81a![ sd ,=JA>b0 _2Jgy>skv/3Eg1`LzQ5)~frz6,^QTCtBpݯk>M{"C&[ޠ!s͌D 0]"<}b4Hlv ^MXW5ݪz=vZsx _Zc6^7ѿ@Wםpl.Y)dQdMR@ _k֪޵ 6׍k&>zڨyrt2gcIഈ.#\8[T"F3zH.sg /ހ+h.^_I{hN*ȩ={W.HʩC,toEr-Kq+ub|g~d׊;>SY=ܳ< bү6.pL(fjAc~_.l&ZYf.z2*>w b5sjehFtO)LVNqN 986Um14v+v%F z |1X=}sLk`'A2c$fU;yUƢЖ:G#$wx2G]+WOd)"Q`p=s,ȷOoƎ[r `$;4 T$)3DLPCwNv.SOD9z-N x'k黳Цf$*TEh wWЦ n~}D Cp"٣ePY|/PmV@;'^P$h7Lg*V!7wͿK9'ө#iMHi{pLrϗoN_͙ԍI%?mvت8TzonEEXEu^9sC\)뮞lo9~yREvJ<~/ {̟'dRӤqĭs{ W1ϑ0O%+BڬPFۛhNA4IBHͻVg-er< oumÔoKR'\Nf9#j=9U3p9O6H!8{{w4TvcrL-CԳ ?Sk2 D` 79DJf(:K QR i6+Lo}6 ySxkX,Nh/N0Yqm}T8~hA y|Wp߻B9~٤4bY$6UB5A=8KsDĘb}#zZu{lmj9-:GQHti _yBU_UY+fGO8'85,^Bh•ڨ9ykB ƩVpuB?\qcy7L(R^YӪQ:aAO޷f.ǖfvjA"ޭtC2= v$\$JTV_ZfKi1<[kǩ=zp ҿ;=݂@ ,{YDMܸA3=wZ#+k9$_ڦ;(6xuB# FA=I*®/n`mi!C܏vvI<X ˂-ҩ/p'3 ?<;;dgוQ(ǐRn2?9\<JHY:U5YLŽ?jFIZgIFfHȎ' cD{73olP/NxβJYj0!U Iq HT-0լrd Wqv0vNpu:s4 T\L* Y{oXxӽU:f64uL E 乨]o,S,)7/ (wm+jgbnYiTbۢ9keyn[2_ⴶˈgiކlѯ[vmb|R*揵M6J Ylc-\u\O?n(/Hg.jto}VORK*i?2(5׍t UL-uBy9L8հrr*Xo=TiC\ϗl"m'kQL1)_bfZ)>2}-(#@]:+k2Yz$`O;P5Lk= ynO'$hޚTUѤ,&#Cz|*l=R\ܜݛ콗N;&IRIJEJK`U,7L=½U*f֎JN9Nߜ{LROv>SmeVl BNEhIEĹLп>p0d --{h~Í۠gOo來߁>P&^"k*,{y&#@4 N3 n8ZA?PC0=r-Nu Jc p @>tAO7)]=keR2xݓUi4e1q[E˅ 4|bu":B^;j҅n~!Q‘is=&w;B,oBH4 \rF&*z#0$NdNԎ wv^RI>{<iOXZ!=TC$߮6}I.1n?2)  iHk3VQ2V0S7`*o]#^V @-WøR1_//&TGZYdma*UhERq=P5(EokNpI&aݼ291Vs~:Kъ7K9v:h/(I` 7lyM7:ԛL3y#l5(|nxA3"[n:?Խq~5AWO=J^X)vdp&͵RO5H>Au{c5wvrXt\ >PL7] Rث9AY8Fާl[2!;0>N4eR#qYwBAW~ymxz:ƛ ܙMM]ʅ/[gwϰ6ɻhgVnanz߾3yKaCe'E8慠屍觇0A:Y1MT]sG_|u^s*ursn/qR<8o+XG°8d_f$· y1ZDO'7dvpL'Qndb>"ek|3^B4u<E4G1A /Ɉrre57I2Iy:b餚'_L;Byg@f&YH.XU tպѾVyR]-l5<%"9OӖQV5sɂ(iOz@HnΖwIWdƋ<:݊kdZKj Z{Z?Plʟf>9X.igOz( cS(G969 ȶ3TbcsΆ$FYJ0 mګxW%@l" /f1&(4w#m2C#;C.an0ND BlQRQ1gw=@wwKZNEN\.!~J&å3$W[X$+x?fI;j$T%fè})<ݬ\BL V{6f'RR 3^{~?{vPpFy)$@95@adsQ%lve+~gy>s'ڛsCqƳ_@Ozz Osd\\sh!3?Q"!!}F8~c &<>)5M'bWi,U/u{D/IM8.q_]wRn>$U $G>봑fkp~fڳE.0;>o.#@ 8>ċEO<X#+Q62%*G5Ҽqcǒ5 ⽆EAB*Te/L rXt1<nbM^@$.:7Y&)6{f,rȅ;\LT$<:Bd)( . q}nZ|7P+OgV*j>l[,+熴\:_[9ig*)OW;-"nu_^Kwe콕;p6>mnllܺqvi)٧KkXݏ `ٿc X,U䩄 h+OFh+J.2k5SD•fX#EFXS#JWLNXOX+S3S28%Z+S:\T.a>kumeޟ+(첽mN3{VR(+&ӡ G8,#XǓm2fET?A;Be auYy֓lL^:㴑xuS;pPo}N7o\½^ƹ\xt|HD&i^!5Q~zFߢQIcw- 92AClMxFӘ⢿`121NU-_ꙣ[Ǜh M c#;ΗS=5ZKqn<Ă=HoV6,0 W>m/]z'/,{YWG;O\nM9rr@Pm.֨L0Iv)уϻH AyɽVz( 5={6q0[ːr9ȭ s7tyVN *O~Q WF].],uwVʹƚ)ǨFv\2]2@5 D +hJrq4ӷ c|uժ+͚C ّ -/V|ͻr&4lZ^ٞxo9.XEL[]'*<˃3rOM#薧P2!efd'6m% Up`=O ׈C y1v3XfI@a92l2 #R+6 Z͇ :5NfY.qe5mu:UUTeą 89[oOqҶe #Fm[x9L q%U uٞ- k]x3=lE}Rmzuq| ?F)k'ɚ5l`: sTv 9tΑqhI^p5 |8z qyyqn_n1-Q%φR^vR3 ^2"QѭNB7rbW=\C,cz¦,l=ntb8(+m.~fFb6:Qm:jVSIluУ. $Kf=48[{x57<Μܮ\\OnѼ%$kD'K Ö n`B2n[F{3D/ò>$Mfj-:Y'hk]䛬SXΒ[OݏNk1F>u.L=; O}Z~N֪fZAHj|ZfZznfugnxDQQ{!_tc~y$CK?g{pWLO>gr=[/cmebD |?(,;nNWF)` @>0Ԁߏ%c՜YM d[o^c^0^c|#)R01f}#x/os KzwdaPz#S k{;[w|qGG;+sw{Dฒ몎hb<@$ = BP'ܸ&k4NWrG`Z~pejO=Jɗ= ܰ ]PGVyS d8Tqe}N]R3e;naogjYm\[gla:9g⾯(ÒUDK~ζL4ct ##Ap6in+U  @tmg n>oQLwl oVnI3;/:Gb2ڦNSʔΓ)r,(:ϓ..HHI )lh=S*&pTIq1yS/e z$/P a7 u8MhMw[c@]`}@_OƘSlj>.V7mcˊQSFӴSȣ-tjAŽuNtN#$\8"[ ";{6krvvmֽ #̧I-, Vr4P t,:Aο.orihBݘ4MSu! U C}#d/8ȷG߯lc/nQ/ T%.Ĉvѕ~LA -ܠݬ;|ЇEuycwm("tRHkI0ڴ64z]/\o|*T'Wl("h:K7* E}kX_wVwyW^hʄBԥ`&SA/v>i텄U_2a>O+Uԕ~ʧ_te˭;nY y#r^^"> X@D+\ jIN:т]U9C>wL|.]yv6vSz,A/Wr;xg=Y>OtPx!-DHӤ򹄘*;DZӪu3˕r{ʊZy*HVIF xN,Ws 537%y%xOy#&טas uQ,{YC h'0(G?zBY 8:"TgzmbGt\QN-*svScCPsm-Cj8RVPϹ+{oVd!5 -5%ˣk4}B7ez09H/6{yjikot V+T.T$X%]T?O0x%\["ݣ\<:}tubrRmO(wpOƏW]ǘg;[N^%]S8$ed/S[񍻔BB-+Pkk;p.Ξ\e&d泳SG9g\x1n{xC&.Q﮿x9UA/ |2xa9b^-{W?0x]* dj$V̘0eu nPPP/0wph;'U+w+ɻZwTk)N4Ijo6w/Xe=%}HeVOb7~篍S yN/R5Ә}TAzOΏpQpE5O0u /PMߦ$wJ,jcȦ7dK 9A:q /圯OwƝW?1ƇL0?+YE \c12Y1H.*ei [&G}D!bq2@$!}}mov\J37W& /} SlgR`U܅nBPۨl~"ލ[oKwu鼴ϊfN^AqQ~nVRhtGDupM*@jea!C#_F9ZůJ_t%k9CiqA9P0ŷp =5R9:16^>&ɜ2,D*|]h,9b|BbݐT L_Ub;HXmH?|h!{s[leܫtNzm<c WMH|f䑱_ b?Fן#VY{$֋uc@G6[zJQC.MʼnRqu"YBy[Z-nLPoMolЬ)Rɰ .t4 Y0.k#H ?,htX=A?Ak>Ş;XX`^\UZ3Yg#Wa#SLU4I>% LWѧJr=X%nj=(WP9rpCO?ST. W턅:Dpqvrֶ6q4W!bswNG+Zڴd ׈TfV敋qL1n\ݔO(/pm–>~o9N9E'3h R1ZSN>MG('(@J|w+3UYkěDl=B͚{Ѕ@76/!%#+׫S#O_h3O| wf+_}:*2,H?%#?6!)%=?GN( & TN?L{ClM ar2<ޡޣxZnY $-<>iU= vNqtnFإܩe(Hԗ/#4tqNC,~i])XSLH8ԋ<3[]lje/)r)SMmkS}M>8Nv ARcpϋBjWXI9GF'M4~.b-3-%:0o||iAKGHejv᰼GcWirk ˘sUݴ!z 1:~Q&ˡ7 3ɾ#=-'!\]CSC]M ?+a1GQFHt&Ytwg)=Z[*a'\ o-߿݁}~N^n s! c5n ; -+<ųI]- ³y욨5&=>,}8~'wgs{oV>at=`F\:ItH$U2&SKy.z l-t=# @ Alӆΰpuv ~[o&< vvY mJ_VmbX7LeH) -9p~zqx9LIr608KLQ5[d`AGs+M$2 -a6]B}Tk|z{L1lB d۶! W!7@!W$O'(;H'.'p0XG|m.a u_+][݅kqAY<'#vpOm^YX א"'76tq.A=/<,.#]-o<&"}2yC|yw|s@1Y嵓f}S 5#{Sqj`T޳b(Q'O!FL T+kd$[VAhTr>MzՐVLڄ|;m# ?&}gL1!I *c/(:`+T/FOA%bk_&>vbM5'5ԧ͡_#=B]1ڌ(κ=X]TP/@ "`l~8!Yxϕfzov}9 w,. 0qJACYdҶӁw?L`!nàC3@m!C㷴/z=)_JnaM^ J n]zsKcԃaέ?75:X{}rj?n+UN ߬ :_10Ǹ㿆u-ٸ&8Yꑸ+2zPKi\@q_ yzA!aП _U>پz+ߧsINA7PO. bR-O7y[oʓRC9V0&x%Cm?JZ6l5ʖ2`U^4uH?@3J[Ŕ/=cj$v^ȲTO_gSSRJ'S 3Vw>+ߚPG 3E kEun's/@ ~ 0Tl2viRQ뺆UA?*ߩ, lČW4ȏL'[,ZhM%Kqw2Ս(T9U-n}Q\ϟOЎ.3T4 ""Eu'[Ym3܍Sh"܀ zѩiic(-W,8TSfƦ.^[6O5;2kJkhaaloy7zm_p c^ M:/3gct,Q >.Z?%jZ=U,f=O#L3'*{$Z ;sY{'*UV2]] E駆\_ʵ2g{;4+*EpDڭMbmԣat0C] 2bnЖ%Vm d +zFQ/A`zHĥ=%WO0VS3AtU _ga)lD*/<ݼA"G!Ol`lh^!/;B+p6K[k~x;4#Lk%6Y{mKȯwET;8j{ig =vQ Q߃U3W_|mM#%7˾}4735}1}:}ݱGD4a͡ƠB)L(؄+B`1jznpTС/R9?5DJ[GÕk"q{ISTC|5)~rH>N:?yA;+`h2`@J mw | ~EZ6XWݖ)55jqp7OԅQׂze[p{ڻMYZ|k+nd\\e 0ŏ?.3 l4ޯ<9;-5n v.){./"jZcRZ曪oۄFI>yH`M"B=y1v|mz[o&]rh^Jhb5C؇CĨ߹n-C<+݌iV!|MLV}4Vß&q0PlANO;A) hBέ.&8[]"#: 5{gvr?Be:.& 9B%C"ق'Ye݆Q<{ 0c1Z8Zљޯy骎Nu7`R] !sے =6tSD;8?ѤA&<&A=b$j;LwQQ*nnC_aT`lnC/Np;;[k$J?mGXQ4-_r uF$_hvBXZ^~6v `y9(Q8De-}Y4.T TtRL S:vpw?az"PR*a5n|ٝb:ko![p=VxasݮEY&1.1ZEгRz~k%u|vfmvcS{oOvj@ FT}y!dV(˵Z ٱ=;9[o?(OI%uMԔ]4tB-AJhZ/!1q쇠_IVCme# Q~ȸxUUsW: ( vC'4+'}R5Mhآ1KI-˿gVO0甐[`s%àD}ꤧ39C~ir灥ቷI:Q+2*^-)nA|@~ |<p]i 8cXmEdįrd$!J*¢$XZӲ)ݗmA?㻌b.;4#Әn4nnjo`7nhϧDulOXѳ?ۮjeuea#X(~|kuFW]`F:Ƒ:Q}4de00fQp XkB;PO@&(.gVhlh?欽]$9`;(|bL=%=pЪ7uF"%G.O.dmKH/S8Geװ PBPB^=aʞ``C__fjJ{q1 ~cal@8GĎ.=FUC݊s3͵"p,>OEhghKgɓ6qml*mgWh ꔜ#}MIW?b#]M8zdN(Xk*^BѼB@+=X<"ZbjI\g7ՌIԞ jB(OVˡ&5[9DU|!ʬ%Ԃ(޹4ڕ:Q]Z#T Ý&m DWDPy`s0MԝS ce+AP%+ߤxJ$G*C<onvK~AH@KAYIǔCcXEN:6B0iS\gL$2di=sFGvߏJA.gbP}^q x۴k-eKMIߜ'B Ӽ*T:rVv%м@8GOy~N[5A຅"zz@pEFJC9][sM/m2[I%0[o?(OhF)xada,QBqo| ƾƶrJEegW/aӼ5-J}LDsDn=s=4tl|e ,tK[:$(5CȎ}6 $1EʃF'4딥* _1L_SO_ ^1u9@u}gs8ʊy:Z f, 'd"#"V>czꑶ,xd|b'U,k>jmcJ^7ۧˎeYW%6xc%bO/67i;{{E;TXMLN,ms}Cer~CZXD9>G<=#׭I,\!G{6jyh2?ma}P <^KGlx8xY>(mdr4QNc|*`P8&‘?dSrw~T?M٭d[!(Fn6Zc{v 5y|6ӏ-V$+ hL L hfK'Z$+X,5NwKvOLJtNpsHB ?WuiXcenM]netq)w^+OQzKwaޡBgEvzXXhϐNI/!Ze# Zt BK> "qLD5+YGV .ΠOiI(3rՈv$XxBX MghUtItrԞL;6f%XktƓB&mZ:LyĚ5FZg'% LnG ӯ?n_),- <"XOjN*u7 QO .h`QMN0 ͊/b mFZCRZMBAc?}um  &!OJ}^ō  1>6:(Ju;u6?p^~H/>Qo[0K^;8zѴ`E?HrQlc,31__jEܺ9Aiى kwk4rL܏TD8ۘ)HG7Òa) 2w:m٭_՚M4 s^p ڶH<,|lj2]/Tx'ˆgA2! /Z\-?/[ٯYo;/(WpW&8[@ϱr?:H× nd ^,y64/E@,ZK {TF?y1qy  䴙yla^ I#v&*3"˝S%rمnI!?F  v1.?O t @~u+nPw0RYKM0:4 v?s رZ6qrӞJ!]SGW>8ʏ ةn&5@?OıxC/ӪK#%c1B*{y]L3j凖SKc [!0ieh un{UǸwo|뭷_' H9?Df2dӸ*SmRH7X{FhGF$^1(|Pqsx%XR㼇k/v @ >Ê=?p>A=Cx? x︳ӹRfƺţlWKuuJҨ]_;h% 3RrBQ 1#O$pW-{ydvpxatY|(Ѳ94=IG|ԌA3Z(kd{h{A q# hzva<1x|dbCB9]jW €mҰ֢^2sPu}ճ]F)ЇWGt)AI$8Y&NCtZD|-E[gބ|誙ӾIeMm]Ŷ"(bsk7wd[4 {3S!@c|SNS[$:˝my|.{+vP"yPh~ziVr##AM)5lT^"-+Bݻ -7IY ]gWg_HW7W>nM+ؤrvÙ>3 ?L@P"1?,oO/uQeiʹN5, YK=8>dA $KD+Njy3.LoC^ W+s+i+>3WԽFA]{[!±dLxdq`_6x[ ߚSMڑj>D: 1u8ކJl0 cXG?ě;;e8A^B@lcNQ1)$*PV([7=0YqgLԾA*dOL͙0j~ڋpe@?zRc{vO=@"2>H-' O1Lnn_d>.SL9,g"ê>*5 8v*VIJT5V W VΗH^\,/b?cS-1ɶiEڝ$*ǔ+dz:;Dy8GddV{-9EH m2,!6ytmD.}L.e$ pF:-quWØPޯ.ꄐ^y#YSwϠKd is^3$+fh 'LsFtcpRu}[S@e~j\rZfr^\cQ 0_t!@rD)&QLB`RGJ۷aA#1OxX08SH?Ԃj wŌ kdاɥ tײu2?wI_joG/&|%߃ x%Zl7[2s+dpC~FE a-3Ʒ zdut4/0jpәHYT'wwnݾ!ٶͺ|5t$X۫˺sFRhF`UrL(>˕F~!*ߦg[oo)'qDkVf۔07 h\to[ڸpW^^L9GWM e<0ZM Kw[zqv0-OripыS G{ys}ʊw'p/wght"nL%>,#uN1 (vR4dGvFdN)W wN=P]rohk22wĚݘ\ZMl#E͘m2]ۺܸ}3yӆ+CҤ!yR4M:-uzq%*I^FÀJ%%~ s92n(-_ۨV2?7oVP/|fpe)-bTeZf3٘*R}lVgFFBv}r98~+IfO.i#jH<9zĬg1gծhֺr눛^KHI1EʆYɉG#k<yJZ5R]C-RִJZwyEc mMBԌ#%~rU*0ƦԫP*32ϸLFCh^s^œ?1ի:1-Xe܃foM ֢+8qC;q[~G%{q.c^p_sKnkB[uO6ifXGz~wrtR 7DGi:EEp+5HU5HNS">Dθx ysXV5xeLY rJ;ؓZxf m}[?'w p54yy&p(!]HFU:&+vۘ-EHJ8.:wz/ r UI79gLAE2kwE/猨ؤZazy3Gp%XJK/Kq(lo Y![ZawVWsWsհiZw{]XŀtӖ {E˹#~ۛh|$H@.,"3gx {v}rm$}wEw#  MTAd e*,݌h]姄u(WXGĀ[`0F)N*QiYMC٧zvhI Ͽ3x"y>M|뭷ߔ'+&Q=)fSm@YȄNٓb fK W"ϐ+ט&NEXzf0aч/Wg"71UO($a\;x[Uozr-s``eh3l}ҥIu8  ~0@J=[>r?~}y;w+#kZF[cZ8QdjB Q [$D IV(?p&ZҭNH^ړ/t(q _@P PqP^%aaўXmY*Oy7U @b}CCalCn>C'|;Js܃KEjn!^="1&6eږt\On."o_>$}k~⌟V3V<  MB&go:a~n |wo#T@Y{-v{q*{xmlժ=HMqw.b\R ΫdTXrm䚩R}?+! J "HHw7%ݽtwww7K-^s?pvwe^3PP/2E ~l9s'?Dx`u1уލڏ2 M ! ,}xkC< ?s+Dh7(7Ȑ Y$Rg&_uxT Pn(@d3e;!Hcv}nK4\.Vczf뜠Gseh@]?YԭG0 9 Ǿ=ra_Dk92=wPȢ0@N៝Gqo[&=g HD gP PMK#m'?60HJdٗ(7 ٗhζ2c>h*yNMN]4VkVJjx cpaXam1^~^ޚe)I4wq -V#0zua j"lF#lEFoEFmCBn:SQ=أ<')͘ r浟+k8i5oۀx@Þ@Am%Ѩ3:cE+}f YΫީmo&)7\@I:87{@kD竾UWHFI𻶾'Bmrsݡv,6O 4Jp3lP.R_k0e:JqRf u 7_C,wPX۹RXosOm`lYpuewt_N7pwD4"'"[Hrbut Y, y>EI9B+ s@P:L. KK 0q;ա3;>4_4|ZGѣPѪPQPgloZIyQISa&ZJi2yb=dx߰6CŬ}0SfD^[Ǹ6# &ӴKԊ+TkTs4t-4_wҍ.c,23pJ6}֪- ,O^ke:+}Ȳ?9bBQHl)^a_AlrDK_G\%ΨF}r?TH -供Dr|ڐ`#dJʜvT'Lj[XLhtVU /tUrcMFXW7^LŰ6VB:8ƚi顪$,L{Wj}yOuҹzBŸqfMLK?/&hr4d$uh^ַBo<;)YV&^[tWodohO&uUD[ۺPMz #&!P/>:E+KϣW/.@2$Lcb~c=(Iy*"*"R9Yzn+ۘ@y$YP̿_"I&=/L@Q&'fw-k S'TmDhR MւaZ%XaWPUbCln!sfuW6}vβŢōb^M3:M %TAvK~6w ?`zA >1ktН FmE.|Nhu*YY?lh rJ L*6|YLmWV'Yb_`nv} kX^T3A%3r}ʹ]nV*?)F“4{kL{~DEʇD 9'ev QYYRnlbVFiA]_J|U'[I0_~O{-y$lJnȹ{IH Mh]5ڶ!0%L 57)nh,i'u(e2QSim(>eH_c3LL %niu`|IoV)䞪iPk:da{6p mN/TTȒ_\/ґ6bs}gg< ۻJuTd u,H"&-yC=jرW#c.@! MwE*xz`@ Z8PwKAc"Qg;w^2o12+_{tktry成͚zizN7=EJyf`2NNҚX`8`oA[`r.D'ÆcA !  <"zaL}@Bx<ޅ n{rݎuׁq߉LX$%9dpr `CbwevC&*(].AZ>L|exwqv |s9PNssκWh{0clIU".G{_=.pN.i8a"Q i:OבP"hhƇ'WnsM.\')*bcv\#u͌X膅I Y!ڵAoA;6ꗩbG ,mx79a;UbBb^c(ݡCdX`#m.RRjyy봧f5&v9Z-@ #{?:CѬ9\̓bTWikk#LMMn#vLk;V ^yʘ)c|6B+A@2I2eΏoey)._M?axi[(;*b(fA6b8!>|vRʯ@=ȓGi2c*N1\r幗ٙ&LΤ~T7sbE݂|Uېa(>X8Go$JBkI4۷PR}S.(ֺe=SXG$ɇvkú[Vu ?whDû)A굻|uWwPHӹ|v ?ǔWc]*xgK܃V޵N3Yw{ c eF9r-6KQ5:&  6565=' GqF#0> Flk! 7E\/0Tzc=(Eyb/09opEωb{E@) 5' *vCI\wrNOhRQ\Cdkt S#*H=?@a:@}&<+P^'g25fث^*W\䡑&)cAwu~ U#tz)([IA~Ϊ^n.γn^LUu-?늮+^ E3/m9ez%Kt@`斝U_I%uOl]h" 7WPK s#]łuo \Ss(ǩGuUV)0 Q.Mlcq2ļ.~ yiێQŎl0xFWW;3c{􌾝abA"R]n)/}rF| J2 r[cx{} }lUgr+}AZfFQ3GD{8=ghwnkS,7+REA.~A)֦=R%jk63b;ä<]w1Mqvtӛߴs&c]pQ9>Ku,`$~!n92X\_Now cT=ܩ!XHHkUهpŠdXt6Q)CJE}bF\ĞEéH`dnh{k6uVZ C}sؔƑ" y|mLП_UQrYmgY<~DZF4 \Ě;ѧr}csƤ[K+Y*facgxwCiVsBcR_shzZ QvEF#Ӯ8g, Ѳ71 |W6wT,I7g4yL[1`s8׀=z )kRq7L=x~AgO-sB24 T|c=(EyhbBNo'2\M@q \T{L' G M\}M<=F),b"qhc_`"3΢<8Fn03}+TI4 r)tjqust[ЙN5+ ڮFگ+rIwh3>L3st YEO&::i;GX9muS.52ղwUe6ֿt~*Lmr(XϤ|_Ӳ~Ũs,_p\rF{&ݬ8 )֯S3rMYfvn =^ϽWhsg_"@L+D@<&0v6 yY/|~xpe~nnlowtE2Gidd]vj|mRF^m0Z=MڧnpǩzLjBx;oogsok@]xBfQn>ٍAge%2^d6/Vh_L gk'tŽ|5$*V~je/O}yFbb8&Z#I! լ8K{h5[נ8#j(:wagpgPSCvb5zJ)2MLfCLCM2z*) ?Z& cޗ7 &:U\Q#=]A?Έ!a+Є Kb^e[pdyr 3匈BieItz ?|G~ӂ-Kh0J;KJfA t8GFt_rBٛo>U]H.E5.H:mm 2VN`N p" ZVlfx=g;W*ҶR-|uuO8!벸~{]͸ճգ[KKt 3 scuI6ߧtw+Mf6Ҧ--x4xtN$ Yu}a(^`=`3Jqէ9*U'`,Cqu/"I7|=`pT*Ro ví36[?3uqfyVD$VŚz&>01׼gjh\'<1g fs=,Zʗ3ILZy5oؓi8ƕlc$~HzP N)WQ;(E4QQ} G0!P><<7L)+O{w*Ux{egqt)S?DiDd iNLb'Ki%:w{->Q K/Lq 0S2o>|BFyhaxܢ2ۢYxA:$pӠ{ph%.l5 x#|Ph!n9*07?z\;k%.-vu\w1:t_RM 4B/v2n/Ub( i"\e.ae?k0#RͻĻ7[?U7Va`SC5Ҩ=|3 L0V#Sx0 OTݏd /'q :##hKx[,5Jyۙ^%tQ+N7덫NwxT5S}n^>D˄BFu_=w4}`̠hLR4 Tl5!YG½|%4* VHV 7s[v3TTځ>\[?.ب/$v)0K60+OUӟZ'_*D{j*e Ǣݶ\oC!f6*{+ ڂDŽjE>e{k =- CV_ٸ\Vnl<͗խ%R'kռ\%j+5ҭC=,[Ì{ct b@4N7M6ܩ$2.uPQN_}ҝfڽjփb.\6N&eA%Q'0).۲ ش.Ҳ.̾6ȥ׫;'_^V_; ^?.ޱ7*}M=P>uA;j<TZ[IUT ZHh 6tJ7eԚ’;!60vp"r+;PybD@ |3/ZRk8 D.u⥦Jx:xJy 0"J `9dЩ>cN&pʤ3B"-rQ^mLP1'W/M{?0Eoq8 hB[l*%6/!|}t;Ӕl u9F?ʸ)7?>˜QZe,n(֘J5 ws[=eC+n+8 zHӆzc%-nX_b؛b>w]{VA|$p~Uw IfW~FH̭[`@d^qWï{^2}J+Vҟ/3Xd8urope;sUrs Ò?%ՙzEgtS PE*@ߥX7Je9s.YP ݠ=+wPPo>A4}n8W 7~j|1CAWއ i gJ>_HErB>Og''~{k3qMID{tH঵ayk-2 %~/&(d{槱*[r.vv_vLI':Jaqm"7WŞU&x7Rۀ_yeWf%k'GmY]:=x݄xٿDx[x F % ڗ+ Xp|d%FN&^:Y:]*['SI6ΰyr,wfaQ7>HlBpg_qO!9gl2Urg~LTW3;l~ { QԠ-ቫ÷Ll]0Ά+.u(79TF̶o&OEL h2yǖUnCׄAMڹWSLc#=Qu:c@0dǷ7?g)u6~A79DFaEjUbSC,4kʨRsתS\*4DD<hdiH" 8PE 0#g-s3C.|OVރ;XJDEϨQC:O?|q/s8w {R]aA9udfus1M4S'`WpKb# ɓ ҳXW["DFtf`]LGI* <*:Q.^1-5!pݕ[Q1t6V>7T]SQa.#.Si臰FX#10=s[mh,td]xy>Z fV!qUi&R L׿ 3@ Pֻ}}& uͱM05 .25k<+ף<{GySQ{bb AzNי&_t%|w ,O9 +:Q,8H"Ixu4n}EFWv?9<خ>쒰iS+R(>Luӻ?/Ŋ`65P˸$HU8/T7}:@m{HZWo_'GxxٜXY>jD O7=`2V)wO[vWnAw|q:RBax'D3;1J=>I4M;Ŵ)z 7o`~?AG2ou$I)OF^[ByHsimN7koIX8hh=8D 򧵔 /iJi?7Gv_^Ze8y_+_m rIЂP$4cL'"*jpizq^-+Ev4oO={=|bCNEL{A近1 XЇ#2aHi07-(X*7$Dvew)4w(̶vI<ΰ93싯%n}-"{5_<AP!?!H0yP(e# nջg)4ryǽ;+/LR)3 t^v6s)f%=.Y+Y;h?e|Qyp5 |*ӅoCc4cTcvc/G{9v:?^5~ֈEn>l[}V4uJk)'ԨBcBV&o+-o)I?:r:v>/f-@~閑z!٦~6v}~ ozMֱw$3d Kx0FQu_%u'd.bFwCaieq5qLLBM#ܭ,cŵ 9tRA."%?ap\ zO]2>Ś>i:~)IF Sdx:TNQ4ow ֪MdX͇Xm: 1T R4l$8c(#s D 7#RYhw++PqRǽඏVѽJ\՘t&ykkmiέnz2\d0 +hndQK^aDtsmdiϜ T_@&g*ɣJ5Iڿ<~:&X0X t "']ǍLj:G ?Yg :IeN`xLx#ZH#$=X irVqZqqlqqm$Dkx$dM[mUiTAŴtY t ~['nI)f{w9C{`/Ygup^ɗ,|Zf*>}U|j~Eod)?DF}^h~V3P8L17:6d 5BKvl.UgӄSGɃ7\'B2VMK-%F홄o[lZ ;3}c 3Dryc=(AyR B!GTg ((kX:vsVTQ\!*nGSd;-|ph@o %v9ozc̪D;;!@h_%g}奟lܗ FA;S`>XGMb4 J,53 @j0& aHu㺌QnPhm;c|:,rOd/,þ6>%*>iL \IU>6vu} Z%C5J￵s@<,7oގ1pvO|*g)gI=*.zF藧igXG9xM6bb ;NyNp=|D$J vdl #2\ +jH W ƴ|,cd'!4[[CF{3uD=;=(՝e nih UE=čeD>7qr d]!d$!7Tk֫sEvj'o0OqN 4~T~vki4l-M۔Lqfl}px{ݦJ >)qڥoeoeek%Ӓ>-NyP&!?WJyK6M'Mkv.w r{=wۨm4>7YLC'i)SHv ͗p0dEvg x#[&ǒB} XnM:G}+A^Z!}Y6r`j`=0AY' hq싟εn2.0Um@mK`"G?KX+^k#$sd+>ҪSN|DVI~/)Ђ\ZSl4o;pX[̣ A<bΒ ֞mI6zM:{]x/`OGҠ*,;;Ψ;}8f;CE Q4DD:l:8ix>b;!™2]+z~s>D~cc#o }s[hhV7 )WX}/&pf0P?`ڬlm3 }AC&#/ O#{TC~ٿ@@BC{xZӭt⦒ٸ99մRWM͈ |B}GwCwEP"_цA΂<5ctq +/UNC|ܟ;9|ŵm>,{@kt OxW?fHnlPÁp$& 5 |f.كPYYr 4#ӎpl S,|>TWA+=J `.e&0Yj%*M,{YAyJ(䯋D&:&H˖v0N_o!G4}X͔((gk'NZI}:W?kCK."Ja7|m?覒8DYρFnF/nyo tH0W0xV^Z/qy RM3$#cgIqhKх*xw1.R7):[mMSrNO!v,Ռrt kl}&3@wvؼ0a%fqWVrpvyanV1b|k֬Vd{ˏ_BC"-U渚bޖDI'+$)I s'01 Q#ҙE^nCvZNh)G5#*y7ڹOi w:7_> tFp@H{3'$fuLS dvCFL8GȸހAO{坟RKǗk76j1$;_A8I=5K>HڳJԺ4&ZפRװ,V5Dv]FBClDin+vVQY1ڌ~Ƃ֒a~.6&jRe2ʸ4^"}?|E1*۠֔>Cjڟw߲T =Z,c tk>'}vX9pLS#7Qy6f6w.yV7K)V[$V@/S_a2ZV!R9[)`Ho{k_ia'>ƹPZ% x?.2ZrעX7-9f"`!tm|BӰ #S/w $:Gr=`gDY[4sC41D&s+`-rށ7օAΧZs؅G@%` D5/2_}k8^熧P6kM/Z.6t IS(w2i7ȷ bO# -)L28j}S\&+(U $y2\RbᏀ5|Yr&d|ϡ:_)=N`к)b=Ez.¬~IoaW&Mb'];Rr+kYﲚ׺T.-W3]UZk"]-ۣסTQVRThMٵM)"hp@sOgο(+ZѿעTc"k (zB˼ XѴ2t,\14Z3ߺ9F'ؖ9sxz^YvI)gzlusɱֹ}IV}|GHs=WfK&"&FjRYr- CTyM:Iɮ.):v_bk1%6(&YDMSC\3}su^rp<@n_&1O WLS%,cϡ!T`!YhAHZ,r3,t#?vOj>{PF p}ezeBj >pp.5"_BN.#ouoC 5?#M@%` /x?kGE>Z?Q>GI:E>!{d/fQg!H`I?K#\2:(-# %)  .U0Ȥz4x08<}f@$ao34޶p]0joBMFnr`5nTsNWGpN'] T*X f4]͕_!f zz j jjjegbQuYἄ~pgwbEzDuӯv!95}sŨ{C^%KT T fҎluIWtGNn\Q,H3<{Pu)V|)w&zl&M|e=9G@ ` |42Jd%NX=k=9@E_ɫ%:^?\j).fل'4ΡR ͒0^"r,}a4d[k0yba12CӬ"=s-u߶Wڲ^5sneo͒LaV e#*&!%$ !:}$OMRޙn19a:b2!*175m;,5*DZoSϴ\H/犮k`GcW.R p赏~ԷZSl/aȞx̊۾LOԼq7G_&y7l0 ئQ`S>PϰŇ$?G_hO땐iV_±8;gTj ~Ϻfݨ|3knSJ5t)m\,.c>H1CR5q[NdD*9')9x.%xX`/Th7'x{Z@wUY]Ud9cm>ufE aZƩBV3dʰH:3٫Fx[ŧ )eϦ5)SGމW?"n~QcD]@ƕh$DNCS6H_203d=d1::M:۬%2eDw|zqna7GM/C ,)Zb_Z u PLYDB5_"anxm"\#6GB62Cs{/IqP@|6!EfE2 0aI-gy>sʓo[R~.SH#zA684<2:N(h7 ALĬ@-,[!7"h p=t f(z]hFnc`ay~b+z~y<Ng9pƸGj<ǒ/Z/VÒBu@EcAbf9]d,_h`s $.-x@^!a-5x锓|}8SZuD`TJlI|S_uԸa"| \.])\lKLSPk[$5Ut5>wI~pGwuŏp p faKFo'xzI7@:O$:[J14-rŜT*Opf{it7M(ծ\{KtL%@s7 yODo=٥[lQ6@&zM?{e!ll (r[UE6|Xw(Ƕk{MU/RT֝a4k52?m<ýgIvo$k})y3V+T ujSke d$5Dh=Ci?MxjjvAfel\D9ے34݃ Ʌ2?-عZ8rchag984Xji( ~&i2#[˄8;h燨gH۴#:Ƶlh>ƗRW`ktCaF/–s=aI ueV|ڽs4hmppĶ{ V2zN!iAl6J!"a5w'qo6XvGh_7; t;C);"X]~y:G9C;7841<>ƴ6p:J4B:N2M:GH#up A}Db6İ:ʰ>> @0<n+a$ l~vb$x dKyM`J5 Bஔ)KwԃH+eap. WDfpkWCQZ5e? gS9zgyD*^Or}T;!xK&J'9ǩ8$K^?6F9*cb8:Ac9E;E8"`loQO<[ ]Źzq~4qZt{w@z|H6R;S(R~3kxlp44|ԤyL|zi}G\8s[䪁fTm-moջtįQ\CinrT,EPo"x/B@a;u:4Ip^Nboנ`{;D[D;{#H KAX1#9 frcb6^@oܩ9хf9v%MX';|R~it 6v.WL; 4jU 'H@'ˁEK~VU ׼jfꡲ%,Ҍi:bs/ o31baxR`U V.63H9_廌e= BƠx)j, ?Jw p%)&2^$u|uqN(@DB&Ƨ!.љ2<NH/n7/3VWVr7#|e\ >іObu#Mm|i]̮dưf xKTle(Up_ux:<34rIp`7fC{pa+E"I*e]K(KCm e]`Xۻbf_" uײzD ؂}G&i\g^~}7= !C`G}eLJTFлsuuuuG:BW9ő4 .$Q]'3TY*:Z^DځO$SmàwYŨ0 qᒊ힏uPZ^/g/bu.?O>3{{d;{/Zߘy[,|HV-+jgNM&[$Ylj%MX. H\m<MUc!PU1%tAusw}p~A4yIs]w#wa1h]Ƴ} sK@R:$,R')Y#7mEzZjJrF~"YL_zϹ^?|\NpUUFx H&rVfl\^z:פ^[\qgBO7s]ED8r0H5#|Th70 0YW˓( St 1No$eb]BWgG9(nP0#*Ї5`=ɡ2YBu싃$kXІK¹ɍ:iή^\bݫQ}0|=]~Zzsn_(%;rP*a4^u$bb^`mebuq˖rRTp虨ΫH780:4.䏦si1fHf޲^!6բ+r$k?5wu la&}FNejyőSlC͜>x8ur 6vqvj 5Z)3MB ϑ7&ܺ=[1s=(Op#ሖQ; +R|MWPS066®(?q{I^to/#ς'P)̛xNf?D;ܺ\f]WJD^Y{g~8IYWr-dAǽ@d0>&$_#ߙ#=FԼݘ]H(Z«$ ?\8La>]íDyFlT!ӽԮxW . u2G#=?[Fp$+N4MSLCE:0T;iz9zԦ+nMlΑl ^7ՎywqӾ&ҜCq $Ft6 6.ߖͿ{t1zGg8A;t3Hjvߺ{:In,j8OZ} rЮ8} [| ]'glx~P {4sb9l,E0 ԅNG4D)4nBȶ]>L9fxtcONU"*֗e02CZaӣ_)Z!{_,pC29I08->]m?аJBLD?yxټ\DJe\,EbHIH ϴw9~CW/a>[ڏa۶G%4ۢO`M} *3}u:{+ eBJR&4‰R}y gEBM;C$KǸudQ \rLrdXO cK pW2p4qHYժd<1iɦϷYO>w^JR0‡=- Yֵ>ّ"Ldt2a<<<-d<|+4"Ӭ c*#Z3z+hv@'5Y252`YlrN)Ġ̀-BUJaf*6NQoaܪz|jVu>)znkep!EނO!_UBH@oig;fn fUnvpF!L1HSM{diևGkÓOܰ u}ԔS7 a=%6E ] k0B~qXy\ӝ`ԃ@ɧ *7S ^M: E7khT.a n0 K7ffOh')fo(og/N*>oG( ok`@P;A@}h:;r:-{y⦌W_lem"C8Wfx}| v[&j/5RO2vOլI$?kdRf;%CFyu!tF.jZ'ءLbeu/}^kh#׾cQ֍JHunQ>fL?W1Ǻ;cMP1gFe^N 4%j c<w1ga!8EAYBchN-ST-ܮlbܟ!<\%8YhѾIvzpJʿW>:";DS!c`W]DՑ"l(W]CMn Vjm v ΒשAJdhgAO ',wKXpoo؎˿ ~2q*&.& 8~/"e z wdMFƛJ9C3hD`rݡ_*|"T[Y@`Ǒ0pWw8M&;d&42>&G8 lj#7_K&H ([GgK,Wbw,T4J 4,(V-r8g@w_w# Gͼ%^c=>iwNO7oBs.!qwȡ>8.8UTR y1_H`ouOz13*dgy>sOx Gf&`7y6X"L031.*i<^,_i^IozV/чoBM-~LCM#>$gITRY3ze7ef672dNbΡO DFoyfvoi=+|Wb^p;}pj zk׼;k+QV0_Ux:<=lC xL< |<~? v{xG6JG:A ?Brfv]p ܁LBk3"ê,l<6n-OPMȗSiEv }ʴzFs˲{gOO?5@cQšz=~>d>h޼i nFUH7'Ykhk~:AVLD6E>LaMk*+5u>~*~4{|E>VEÓoU{q b'9xN<1TM0?AVV<t-e3o{((oQ֟]~6] i6Ot^![#M!M^ah-7)~[Gى<Q&an}ȜGQ9۱4~Xzr6{dU9 Gj ?:)ӉN3B9O7"% X)T.R&Q*{_"Y0\mF`di<}W[SdNy=|7&T-8[ŔPGӈL9; zH= C#n0bOqwXֳµ6ZhQѬݦB%SjdH C@ H~^ȟЩY8[  ^0֫ D2_,j 2  1@2Mw#~trHTIձ>6,H.Y:Vph~xOI,1zVQozL2p^u/ ^5 U*pdOd/6ܶ˸ȸ<_y3Y0D050)"leڬ4x͜.:p|> )gD2>аo} No+/LVhq\Z!!DE_fڻq-# [P2rE1WONvFIT} mw)X:zD[7:]R2Mxwx+x2B1۩Hi>Tq=d΁77ݎMMl`ZӗI)ӹc/*cwI~S.~R,w9}@6$.In*NknYywXpq^.s ` 'lcj%A&Ѽ6.>ΐ!VQ& z 9BL%D4Yw]"Ҍ#>'i8$:HMdTL!MT8p;3=5MCO.MvSsċh jP1H94gG9?0[kGR<ͯkyXSz]I,7 vqP:0:E}vsic_rJ)]e3@lyD|TJLN\IBM |YR5_%zE_٪h 咉`,=&E^JrHp&8WUyn`Z iTV᠓#WM0v>@[S#3^AI>A W)vM(HҷtTϿB`s[!_G5R΋F;83yϑm@nQ]>cv{]b>re࠙c_BjWvתV#.ɮWV3!Ӈu0MLfd5pa=$/l$@hWmpAY=ܳ<(\~ِQ3g\]2/ [½Q}rb\*| m4a4>i87OF )BL35^0|[f%~lzly`Y:8Z!.Ru!q^Mx|3(z]rcpr#zY|9Hx6uUX'jo.5Sg}1cQD~s5C XS/^]7)<<}ߺB˘'PUMHbtrfiq&lk九Za|(mȉv77H,7P;0& @| .xvŹD&B~yDv %CGGTZ!""ZBށ{`V=O@0 |'? DAonP](^p^]##C! yLO*QCn?u|&P!4!"7@kQ*%*]j$/˾_v bn-o tq]MZM܋4EF@{^kߡZYj(o x -@b2`1T<&ؿt'ܣ]ˌv1U̘']a/ %-f1NԃUmKm~zoFÝ BTCPQh$m)>H80 t" PەpH M71gm K_ݐs*+c^-Xyr_y vf9cyNAZW { Á`8 \YZs/G9#5m^*l쉺E'?[q_t2/~GaFEipS516nXC( n =T$-Dh?< Dw$; tdfdXPNU.Sd.C4@L%f8``fJEKõeԽ~ƣz)LƯCOω] $D)#h?{P> fIa?s}l< W'AKѸku[)zjF(K0#MywekSLCV}.OͻGrhqv3;[$Y-l5{ҐAqu!!@@E$A"$ www.MVo׭g~{c5UP=FOXsZntfch67g4!ľ_d8speR9 ׆YgCg[mB>gqT<k~ mW(K;Z?\GlҼTxXf8$w=X$SOszXfT䈷}MT\gi'MG <5Ф0=h~aUېh}lޭO0 k/+qGPeէ`r4>?գ1Z!:ב̑lM<65,5l#5}⍭[$3s>u+|_$Dhy- :8{lcg) ?Y[  ѻw6Uռ !5' خ/=@@hnElQJv$³$22e2E?0!ԅiqrv1_SD赲(s^}N*"!oonmVgnZ!ҵJtp6{뼹\Oi)cB?Fʠz 0' i;1 `pV9 C&&xC[{E K9j ~=:_^WLQ <ƭXyguG>g93N";]5yaLҗ+$J4|2r2OUp-Pp,fRDKdpeh-']E`5^9$04YK*›;xUw,䃯8: [' Hdq_L_zH4e6~ៅ&&/EABgyr?dKxdIgj=opCJ_%W22e<>rn=.V{]iNy"_"Hf0`翣yr =Q)Znk"nťT] ]=8Gy\_`[oc";ùދ#˟oz3[_QPҤò^GYKкzW-neTj̽{4̄mYT&z/V+GxZN;j%p6Ծ"[^fȹDI*=_%U*dag{DEg`:4VLV Zf2a<98fMMfK8/5hɯټ ϕ-janWZ Q"oUVa:Ž\!-ɫCvD9.&NixrymC3g~l`*EKؕ;nkhSޏ| ٌ4񮮀'R cYL]r{V{~qeyw??Mo_$[[h% +zk X?VDx{ ^>%; {Ɉc8DEDh:jJP#_o5h52-ih[ w $!@` \r#킛~4''eɥG|׌(~12Kj>FZŬӽ7"]JX7oTg7oJ[mZbZޢ%_g hglJ2u S $.E`JK;K3ZW"BEP7 UPi(A$Lwtվ$Y2Q `ME.{1&wVc!Gݢb,S4Nҵ7ֿ+IҐ$ٙ&>a:6~rx4 Pe}̅"9 i!/</G⤬coP5fpisx!M"B7ye`+]j!E} ?;eg+Q"6G4٫4ą-=땢P'(]J+^F-y:w[j%)ظJ<F຦М /i?ֲ7e J]G^ckl 6(.z"黔TިO!m c:YAB%Tщq+ղ|f B3FjR'#"kļwweo}*a툪W@d{R5uAl50Y,w̚վŗo\f̥Zө @4< `|ܛ( nhy >ڦ y)y/m?xr!J#"bPzlA\P#hejDly({L A8*ޤ9 vh\/!#ml! !^g>5bê n-cwFѧ1nNqU(;F[}9c9%8}} vuk8)3αٝ{?pWpF':<=NZj)J|2*"âS--[pQ yz x$K;v'h(Wpw 6CC,PE8n .RbXp#_>-ӫ>H5V>.CR|1F8Y)G t\좏^_la.L]PǶ*4#?A$B&@%>CG}qr`p'wYh spbw$ͣrN-zmMڏ[ uce*¡~S'ݴe|Y{"@~`)]w6,y l8_3b,O/ܾx@>>k^=fN6M5jVY&2Q,u«MܓOHz/io oeR{=/<^c\1QoYAo syṰ! U;z[RA6ЇofXu_] QSS6&l٭}]J(˭ɭV-]X!],:"h#p]'oC8$4IC`ܶ粱Bwu|2L3l]>P 68KOûߦȕljq=慄_dۭ;)rrM(Qӣ^ק-faے~TB*C_3k~#[_=A J1Wy wy7o9s}#åSDrQ4a>)qTTcTicϊ[ZLTΕ8JXIKܞ&[o;fg|2N2MȠfxv >E 6L Bd^?M s\ {h/b&m-+,ӼEBbu_-Yn=Q ٲ^L]xӽI7IܺƘ$2k2m AJPm7ץ,WuoJENr$F+*Wx%)$l_7pp߯M.-.M o6T. ?.~Venr勫.ʗIS97:pp46=vU H\J2`u }uvaCܭlԞKUIAYΞ鐙}gg??!?Q߀>\ۈ1{=򞢍xY_+0TʔHՏ:-1OiY*[-M=sgxw@ބmnebFW9etdY[بzHAnJd9_ s>Aϥ1~N|)[QuOb.sֽ! ?de|S%%$JŦHG'+E{{Z9k[Xjű|mݸBgͭI<1K0(.JWQH~cU҄5m$\%Mm5]ǍL^z3O0`4&~/dpgy"gzvQiNV#c,ݭcѾKo} mY?>dX§ߺKC^' Rq!s]4h_BV3djx.}yUEq1Lx6Ct4M?M=tKd-S{kQ3_I'ً߬ x| ho-`c|@Hs<]PWЉ1IɸgYM22g.-CT3?U߰\h6na!N\>[N=Ms)w"T'Xɟ-z9L6F5B>{_foѩ#ӄm4 Zm[Lp$nO9Ib('A"\"g3*Iqpܳpس߷۷7Hڕfhi]lUH;ޫWb߻}< ,5v֒vӥOn"?3I "ţcb51Oo"\kCO{p;X\VK=1u)22YO92ۿ}ρ9=ϐmbk'zYN)IϰS 'bgQ-LMB}j 1Iˉ_d &"UG9ׇ!  2W'$~qZ>q49i;~58ғ &~~ZK;>gW7"P6G_6mP4d tݶV",$(Eq o{(g_ͷ,-' ߗp,v7`nd]lЫ!Y"PQΜ`ns%]͋^>YY"Hd_f0`翣y";} =`0t7l|.-! H͠}`2 4{߶qVpW16:lqGq>Fr=A ?IZ>Sa:n*q{/$JU. %k|Nu?~_BG 3;[[e;;O6VumTl-E9S^Vc /!x VGhmx ǩh{ƺKcA#fЕ!XHgM^ 0lW69?=׺FPL@?}?|ۯ[&~<;zNy͢x cϣDݬ#"+ q5$Ʌ{63';F薻ʤ/L/UVC3xj~ePd-c%_3z{/& 4R7 v3+4 W*O9W 8qشU*)~ՋﴂezGIe#>2EX@'9 [+[󚙓%3\JD|'POG>ɦjzǶȾ1?OgJ1R0`VY-(niːrѢd Ɇ4ܟOg4f ͠<jr/)1Z209p5;w6}"d'㊬yCR;sw`wzjiuNd?G8$D锩wYRU( 0MP--` @ݸdY~JANL?89P dڥ|*˿}7/heȂ@~=wx6V-.痠X"I:Kirj^oԗO ű~V+Z荒;-0-9 j.#Q&3pvg:i;lV-b@b  <.2!Fe_̎]/bzT'ՀL @/Sp {qz|wnf&N}E]{ XՓXӨ k$k߽]rXbu)]cJTO[`z ΁)A,UulI۳B<祽38fw-,.~)ˎ ߫mG4w6_P]?޴b0#8RL6Bc lUt <`x 8Df^$I5 |u|u|uf6BGe)bi&W<@|ByXUoPKgR.CZ.:qLopHhzzz^wvRC]@OCO_JPZoq+S-@H`Lmw佻>[xƫDODcۿmm ?{/I]m ‘eg[}OJ1(U 6 ="jQ$ HP[P -u+_#]z8}@vI]1,sWt3Iu*# gftx!aMMZo8-Hg-Ρ-/XJ],ރh3 }I=1";V͸ct3AWgp7Wŗ- ~FÜg % f'Gƨg v0֞\~6=(FGcy9wډX؁Ñe2mukBs]ΑHๆ鵳EBVi]C4$ xk8B%se]}'՟ab Yo m 88etԌef#oM> #j^k x 13.~8fwyfy1{٢D6f5TNiu2=I˾b١L1D.;mheiYnJǩs?TCu|}4Fdyʪ:I'1PѶp}ȗ5pVr yiw{m]`WJƇO5٢? U-),g,dJfJ}OڭV#38hO+$8i'ns .]R4dw䟩jbCۿT5[>iI:n_fQf1yAN"2 YB;@=h'614?^WV&Jz;{K*Iq$49pw 6° k—*xW:JAk$*!έSM;Ig{&n3_W鼗2R0rN97"Yuu7+R^@< %^Iϒosҥc4BCM} #{Z6; :lHVtCOB4uћ5yI+0 oKW3ukI3n#.3 7Pɓd|ݢ eCUute=ix'Hgo uE y8ϙ[ڛ̸w|J ds {M DOb0v&j p/x{k{ @1*,= 삹|e #UU/2 5` G"cw ^kK<ɘ&0Vu6Aoq2[=L&TGg[nV$D95ܟ4klt3{0kM欫ek`mbix{V,~m3Js9Hl*mk q5Al i; Kv*7HvDtoK%.{*MiILWZo{A%tKE_ctcn/-ϓM>[_,Q1pv7W. )#s>_yl2i lxNFf2N2~ΙCcOVk9B+yަ*zW24=@}f0`y"!!UUUu]YY1O'>Ydw )ANP +Tqzxø\ƾӖ-?kESLYÕeʱtuٕG +T˃`T_k|avYc;yN&ZHA7bTCm 7Z-Z"7&Za..|xTј? z*= =B4- jaLHi|= [ @_{0_qBTBY@E!P +4"MҼR#TiBv4u}zUɘ\GBV D4A}u-ϕEi;:j"4(a c8uX#>{A^ZS Co395D.ug xt\ܠ:]>XXjB?B2 Pr@ @~.%hL2#7LK)F﷭)8}& ;1&hDl~72.1vP]~6u9 =O~/N?O{ӮkȆ^lu=yh7}w _+y*g%s_/9& y?'T9BId۬Ls!?^ 9! '[fm,ޮ|C\r{ܕcAXˍ.uty744555g%zBo yyo 0$Uݘd`zIzɲuYVXXxIAyɎ *'CSഺbS` <{o~ײynvFSM\ȧ}Fe3KR͏5Y?V])hqqIz)''7w\̫ `0O̳+H;&Wh}|JڇWP׍jn,c7tL9pk5zٚ4yh9,O,DYUzok=vw7zJ.?ڑY4p5MnmmmNW|~S/U_vrٶm:xD 0OGg֣?"L\A|q""`ϗ1 fff콇\t2..C򙒒"ލ.K;k#,+55e1e*ukME=Ov d?YUSw!t,h N~9GQp3gNnn._s lKl76k˓j^.HRX|s`o I){ i!mjz5 `0ͳ&gN6n;_|2s Ls_*}C677oq R:|pQ7ؑ2!$$!!gң5RdRs~iu"\aCfquh֝|"8GǙ{]Y~P'Y;iy VZ0HjLr"M+,MZ{nwrAw}Y `0ͳ(%b2_ףiiideeetlN9a'v>!|\uIIIӭ-w󨩩Y|=~>Il'=J*(ffu=Owu:/)kӅ :S֑3ɲ.]$Qak yq%iUu4%3Q<>gxՒO2m;Ī s*)**fdd3>|N-sk̾Rݪil_IaЂ'ҙwvU{ZĐy&s؟ezC$d9<`x'/>#ٮK Opr$+**zYGGGyy>!I6N1!Yt?HIa1REʕ+G}RXǁVy8ymʺ>OY J>H|p>ߥ/$҆Ь; =yV< +#l^iq<$|g; 6l_qqq!455=%6oL"@]){lj#FLޤB:yg\}pW8'O~?߷b,[I) cd]D=fE3^\$Z=3|>z %KM1Bu={$OI|Yiֵus}<3ow뮲ߓ "-];M398Y׎s+'y4τekH;oܱgSSykyEw<<;R {z\g_h'x8& FkkkI*rٖTCCC%yȂTqvH,v$6άR|TF'Hޢ"A%0{Ӫ*YLVgFYXoךLk::58nߗz2o}T Q8Nn$2O [N'y]it\'} N_; Nu~kym<{˱Z"!gVUU%.6{WY$ ^pa <{ϓ"""ijVXHiu;Oy2df~ѫ$NjQ㭼Qp&uU'ˎD%g<ǍOaƒuG8U7{Xz;6w͉lжv\kDkv2}'yp6OQr83BiNT\|:3|%$$1IQ8**e5,ɴmOVۡky x|۷ ;rNܸM8&:z0!-xh/r?)fY=魝tñR~;t.)4 ֍|Q('7۹p3'6y'IϤOn{tkg{F[K{HrrryQ^GGBF)$L'i=$lWjn?pT0bY,ݚ@i>d/hHv ȯ L.FVRE5bQpܖH>?omu(=#\מ8Y^EM{ߛ0O6k7Y~stt&S `w1:3w?β#ʹ-Q-vy[v͓}*I/H=њ]I[H>󎉉&$TPe}4hHDt}VxRe eϳXuwI>m28rbgxqc mNܸ-ﹱ}h;F]rY[jeͪG53jd{Qy[Y+2Oӡ6XѰ%d7N̓! {7_y `w1 G7|tkgG6Ϊy4OEq~OHVA C$Nk%yXHYCqzs.dOd7]䖑͋(F #°Bl삜ʖKsoԉk¶6+̚?}bƜsxS^ISP^9Vߒp:Bo|G7:<yZ{n; :R ;R3Q5~Ek<ٸD,22I(]Tp5<OkȊ̦ȄĵSWVϻ-аϓn{f9_JI O?}vy5իuuulI+W'o:Jqqqk>0O&*h,1ڭs,bi]'yp6۾Ӡ=IʭJ͗&F|.=O6.6p8#tm@b#UWITS$lz(ukqcm㭼5<%Jk;G^* yJ7M/'y<<0O' `O_bW'<<oyOܿ~?FA xz<<U~zך̒E `(&.:xւkƚ qZtQw ` ՔcŹ'0e^Qlj: endstream endobj 781 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 804 /Filter /FlateDecode >> stream x1 o@DB:s,ૹ? O$~ }g?d`9 endstream endobj 775 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 782 0 R /Length 419063 /Filter /FlateDecode >> stream x 8k'@gSk^\7c20" 7Npxm􇁛I`>/գ9z~ynhFյ}" |cEmg0ps8w7[ WKUSk'L[ YpLt4f86sX+\YY`0/# j_E~Z^^+k;:1n'N5s~Yl0}TVͳK]zV3 twgG0=455e``%..^YYZsCs_2x@~ 0՛᳾Z|845k/MCX{EOV#IU:8`c䫽|uvfs L$GDB@ո~7;Sn'N6Ǔ2Ox՟/oxl0e^ ّT㫰 in5N%pOLf8cu5AJZz11՚# j rZ>UF1U~iy'}2|w;gF\*p$'Z 9~)v}$fyj lk 7ė6d)-jU^2YMq?ꍃ*ݡIgd{=D%## j|ʼn>x))V'm3U Tݝ+uG ˧W.j)KLά_g;s qWo8t+ohrmmR7U+++3Ý n2驩 mɦ01Q;ZC"-6|xh,L feW`[V*mLKksXsqv6P[౷|eyRm%'pY^tB@u0S`Kȸηo'jCe9俟m%_$j-/m7?y-o.wM4Cuw7"W{rN*7]c⇥y;lǏK{=2o\;l 7ײ~p^l0«{mf)ѰQ f7c[ }v@@\yCs_|_ 6Vy~7]>]^O=>Ov!d#÷im.ϐs6g m؆&VB^|=*-S.kwni"_P[2D/;~|Yȹ`!#ێ7TZmdmۈ4Tۛך=ҠP'<>|={|ɓ 4`Eu &5 *u~ hsNRVTL%xЀ㷆ph`5A>%j!EC;wGc+!jаƳN iR*A-Ϡƾ E!I]@MWAG\ŧ4)J!/CHk9u$Ձaܲ;D>N/C\m 22&uwS0n(@6+J5bQSQ"@oC 3Y{Tl*{ȳSH≨>4D#hp˪F'IBb UIU,GA OY@]PC_^WLū^ @Jw">Yr> %hQr   |,q)U ՐJ8Jꄲh"y4@/B¼RR">_CuR\c: |lՈ)haDA@oG RDh:=h6j ޭj*(eUd R#Րڌ_>2 >:'磠RRUQSW"֐_7:4ANnA J M j*@U GIO^PM'Os@M 88Q"8*8*(>5viJ4A:4`|h H  рJaA.jUI<9yA>v ̎fCS 7Kdp-p!;ʹ}Zj4of9Z -E,#Kˬ h4 OAo~]hhѲpZ4^jLtBۙ9I <ةy/`=>-PS[и;TIe)Ev9MGûF>CJ^m..h4a>>|4*$r8Bj dN%I+Og OZ7 Qq"npKN,:BgïCRm ν[T>J @|>Fh@3y sg֚5[k bM444\e .|6O9 s3Sd]C{[?gVGW5޲~{E-X*yvX`F-c4vnͼAEǒ~t0 1~i)}cX:~KϾXV2z#zI_«Dt3DƲ-Ed}[Rz~CӺZӅ$o54 j$.,Юj"l]xܤR.P]6W#Y$g@ p_ֳ$ }O+8+rTWu5M/Pҏ7^(Yan,aӽ`1AGna:]}*[\V3xj g[B ʻGv4R=™ē=ϟ>%g.}%=Ot#<7ϙOky.kqA=Ll*%>p1Shtu9lxge|C5L";=gq x|bh&[Wݹ;6XP9`\)!Qm*Z:`r59f{ғīY! {Nx̘8XƘ/J0ő3)tohOp6sWOe\ $,Q*O:mF({,mvW7`oz\-\̧Ce\c"J#/&9]6 Զ}sLGv3{ncxHBʦ:"=&py7Kr`';f=sgt`/]swޅpAnֆIȯN}'_e]{KpeG۷kk\џ-wpGLMMMBCCc+H_-OQ,g4wpd|tmާ5G} ]^}a^5%[~IEK!4\*+@-ƘkŽ3a8x4|}{[%9ަR@Su)tǭ 1+J]Zņni<{4pX)C@G=Cf݁ e qŤs }:U1I a&4p `ǀ ,(Gi+,PU|>,膃5E?qpHNqGm;~Z#0`_՜Ƿ% "ɝ+k/|5X>#' r}@_~ӱU]K"zoqN`:KcRy$״(٦BshS{W:9_Qje/em̎vJ햬8P<Ñ "`פ1,W=.y!\#4B'#ШMI'vN72L3џVj)fnW_Pټ}vjR>vlJM] ʜ&(Qs+Gq<s3g{ 9!5AmF'}.,/3u^{MJ/s&Dhg:]b8hq}%7^|*QD H+s]_Nd$"͛q0>[Hr&E}Jc0@n}%ۂp/;pe-9"m'{̛ީ:TRV{4冗?8=P{" ~λ:.[{B-iGMF ҿb~j-vKK~JW's6Stl8\&)6|*Gٻ)g>gӢzk|sΜռ뙅`O;u}t ˧|]^^-ڭ׉r9Z(=^TXz)¿5wHS顏rI:-f]_Hp99sFG5B]b9'㎛Xx뺆Iإ@|y~;vIΤ%#i)ɦXynx#FqwS"Ts2|Q 8Z .MmYѼs[4΅>{[+Y@kI(Q~ɂsϚ*z1iƠv~zCWEbzd+?Yּ5`~J~Z.WVynO/.+¶52:1)ޞqBSzsW?:62֛ 81Lcȫ,Π,A5{Hn0){,y4z$dkb C8N{-.G,>#~>˘$Zq7fuάsNGx:~1bIЕSسA31X, %yigb['GC%Rҏ=3|m{"'[vшTŪ "Zֵ'K" zqcV6fu2pUh}|d_~qىRΨtM7N>s-Q~Sj8!D8>Yf @f$tԿ@2/E w\O40?ybcV/.Y6v]pZ@~b&TZ;? q3sոڛ\nE4ǻ7I1^lΓKլ|Y]SöM/If/VX`Bid癮<>EIBͦ-0Z+D[yr| LSWLy[7s:}q'ś/i|gZڭ!u&=i)}L1Ld"os.sQ MRMBkAD/xLXlP /~n̬_;r>{K"^J1B!\kOw&ͨJ ,ٗ^/KzzK#VCrBZZ5[7 Ͱ:[dž`^?b;wUWGV/y"m͓H$b'T.nn 20>ᐴhMk w=xBTliݬm5Ϙ ܑyM*@<= Hs8hņ8[FCRY%G>}^||i@2SK>tXIydK; q\E{5m2tyٿF2nW%t ] ta̟w0t:y׭JLbUf¡-4=Ju]Ư^V~vB`v grS%[^HYJ[χ^!&IJ.nvr)eM://;ћޛ.>3Xk4aHőOLZ/y֍|b̑ <$#UFqk=Lgo\Y85*9fˋQiڔµI!:]:/uŶ0;qȦu ʳN)8\ר{}Î~B?<7h矟֤..@2l1Qns ^vs}vzdekSQQT?ۙf6] Ϟ< +ޫ޽a#-%~ 5TZ[ 5O|ӛzY:*Ek_h<{sHtv"!I$;eUG&i𿁶>h &m{;);$WpEaP2"FMPD,Tp$cSmչ?kxgho8S\#|ݻ*XOd_Vv ։{僋ݨͲ٩ $>q Sr} 0U(E붿Ilgk=ZR*Y*Ց$Dk[︒HήJ2}2ODH~l_dWj1Isy-tzCnTN =kѳy;:~a٢rݓw?_A&G.ֻBݴ#/Uش979>gf9vv D+⠟uȼ+d$շjD.Z( c?S*XFb@:7R졪)R673">hRy1]miȥso?xxa&ͣV(zQŔQI+glĹBb9ͱ}b_ʿgd;ix^*H]x $ ̡;Mkܿ!\S3[ G{vYQvn!Gq R,K԰wF;:/D%{6{1W`.Kl&UzT\k1[̃4!դ-=V$}Sevs=7LdR7/KlMC71zT/ݟVeǖ!G]NW:܇yj ٙwy(U AFQta%q~!Fa׏* a^lm| YC+?9Ȥx(R,v1k͞rGu>$czK<{I=u Iյ&+K[Q\ zHތle~$ C+f~^|ɻ6KXFf&VW hD7>߼'?&ͨO~kI&"!v/>jy{` {bt],6V/y"mGA܎^l!MO\.0W IuKʐT=?Yq1l/=c#FLE)Ĩ[Tz$bϋD@,.D:tդ퀣aMfV [ŌzD[qw Pqr+>zz5>Ky yS"{Jiu fgd9d?<]`kzAi{5f,,8jQj](oi]λ]{lE3KGIĊv' ͤ2WTҾ 5L1Kllk.CsĘtxz~PN*͓z')!q^sIC8L$[w [*P8TV);|H0]2)7~.daKwlk8NjEf3Wec9_ap!W*Ai!%?B0Ѩ 27 yd /i < 6n1zCC޻=w[IOJm/͝x AvjC!bK)IlQ|-Tz&D/RO7윕5U}ĥ@H-CxM&/⚬Mm99CcRvni3q䯀X 'Żģ箉7sTVHjM]R:aHÖ^S^Snu w]=G>i>X[!=0gr\]2ʄEoNN|P쾨SvVL|GZ2ӟ':Cʭ73< w@.. M5xmWmTi ;c&>Fww&.47|jr]e˖k2Yl=*1^`g;2ӱZYVFzki)ɵ<pZ'~uCb?<>·^Dɣ%-} S)'[;E6.Xd*X`O,7vьޱ1u3^< "0O,x ldzp:~DH*c}N>T$#! 2Z@)N ^*b! ?Z:Cmj7>WN1S1tē '`eoMXvrLVڣ.!#]: B%PwztRx1}pHΚ֭3G̢|1/)iO,2l&S²ߢap9Eez,} _e.òbxT.Yԙ V?S}ssJɍn|n@$83tNPtAp|.m{0,ֺ%Obx)G;^Q?~$aQ4I I,qa%\ez2S^U|aOɾD!"(H=Eǂ/L3:Egw'.4T{Q=6t)pZ'\F|vұ!z\Wrk4 + Ji9y~gҬ)-B}Ǡ~~0۟Sqoϵ:n.pV~䉵pZ'~uC1ϟ ۚEK2u2ֵ ˫jeku^w[ޜ+F6z]5pg~"E` Vs,= hfKk\فO{қh3;g~"u*3zl Wģ KeId%V!o_l\ދ -iuo5Fx2߾Y-r`\ k_{ GxJf[HY*y705dAg#{uOB#Ν { ~42egڑZQbjSh%\{&wcՙ;[K[q*Pz@:pf%@ 1+8xeSDc+_ Nh0 ȋ_?1OOt월O.q6|>[1gA|( ]d1c6~e˘˴UWmt>t. h+ljOH qpW̩T%^s计mb(U7w^]1 Dbq|+S'KJ_b^dΓuO6l!<сً6<f?_.*ܱ1,T *x- g hz%U '(&H90NʒLy"I δӿBʨT2CJcCv2 щE) ᨎo?!|3 wYxٛ7 k+$pU7jIin.{'xKg˅1sQen@+SPujbɮ}~y.|tnB֐1t~tKYfcniZD:mۯ3ܭ:A03[2^rHӨzlDDi@&zΝ\?e|%2wvRk g,[QqrU{>)wn7 W^&:_}tُI<n5B\&搡䖠4A ^;Nv!]>J ( sC5 Tm#ミ{(F(=0H[G},+2x2A"XKT &8"GZOЏO`NÞk0 1ѵ`pmu5P:P }N2T5(=Pg5G|Y{n ( A+:>:motx3wO/}7nq^ζ6@0g@basxnAp6ba:Ui|"托'/yynWuIfα4^Q7/^nR(MdI!~:GE{@#y9)1J],iW=`A<[(%%|%-8Tn, 'houHΓZH\z|~l4TlabF}Fq+o0b<%X2[H$Bb 7RV+#KȆc5ۋqp?PMtk'8Jsx)[z^X߂%r8AQBP( B-s\%R7!sna_">Fn!Az)Yb(-RxmOi(>jY,8!Xdt.\~=4aefK.F7snOfmٙ1'peK+^6[XX t ; v>jCmƁ : pZ\%]ٴں\{wG(qwIР $C ,2;ͳߪ]=Vݽ=B?ajg̬_Ou&z?/@@È=‰< ޣI\P:-ptIiuV ق"xƽ_g {G@ ><`Z[[k ګc9CH?U|}.(Oj=n-HܯL&),d/)vz6޿96Ӧ{Ծ1r Qf9Z@꤉ QVJ%\_.K@M$gYp}_R;k([]TK(t3U!HKKsf>GCy(&FxB6MfVV̙囹>FoF{FFFv]^{PdRXsG[]}0:*M{A*~Z Y/٣E]U?K*;>Ne$>aR-0W*@2u і_7r2s_N| 4ND4hD+>~AJ'Zcmc/vOWU fq̢Mih$i:BͿsh = @0{ _4{R"Vy2v>> ؊߯6%$-cf`X(mf5$7ǵ;S**ibo>@ܵ{h}P/iD@o%_xO`o˟]$C5>!Lߑ-plu(le}`ojlsnqIhs*MmyBJ?N[\W\S}<*>F)53:NJ6OsD+L}wy`K-}i_V!+Dzu N%j|F d:9'0ܧԲ |ZG~b~=>C(.W9'{A}ڝa͖έ]FŮLْrQZA?=LVOSf@Í+꿦r:u( ʍKOXJ7)IlTa;[0""z!X3+;G` Z- {c%kmE~bNi?oXWzx[Dj5o"^çqʏ;WLT0'әwA ruMy¿;<3W>o;o'K6u?I?Qz4c;$_7_Fe "_ ~nru7W13(y5N}W$fXos1.dެX5dbRiöYqkC2} UK-sק&v>|oSH BZ:RQ2Q~̦ܦ~BβvB>QL}!UGRCYäN˟nCFUP3M;bB+ATi7Gʖ]C<#~Wh%1g H^fs v\p4hdmCQ@x^w7C^||XEÜ%!ɤF-?Q"zTBc0k (^pBkbݍ|AA 5TKdk: )2˸`?AqB剪|wj~umB("KOwD|N&Ԝߙa~yV.&EQY5MC=<풕e!)ߓʘ;NK̛P>N8*ۨ3yv|஼ɾM:?>y ?q =G@0 h}8@m 5xxYC >gA23Ѽ-ɟrh3&C~y8߹XGt򁠈fqh۸;y"W]4 u+%4YTI1[`ˏ:t|,'LZ#nL7UV#hCi@iOczw34 _CJȔ__W^{w^;\uY8x?|M뿮ѷlJ&jؔJ&~”"}|)5D26ff۾F^}݉-#K؁đ[ԉKS#Dx=d=t=7Ȥi*7@5tI5$5̵d4 짨R.E󭂧5Mdr34.,8@C"@>A&)ÄHvHDhagQ#¶}R5 b[*|EpSl5Vn,qLt#Z)!|Y[J{;3ܽKg 鞳;?w̷z'I*vFuw>Oʻwt*r>H;>"5[  HhGu1`?7?!{yf{y'IlLv?;2 +deա<]e`.l@ke> 1)pV7TɝXn̞o* 馤w[KEXWkdRXC];~ٸCÎt I ޟ"cT<'UE.xn\.I ǃVϡѓQ~ft|CUJfw,ppXdL\B˒Wm G&I[ʶ$oa̡Ho"shs79 ]"_/J:F wCqw'w[ڡm`}tutbkYJ& CX@Q_ԣCQtf[o|^o(O&NC(=8_9ҵbm$^:nt1q8@ AہV>^&12Cd9`9f$}~ 0Q+J icM=xejlrsfdur{Va`hFn@9@n0U@sJ}àĢ>#wj]X0, KFaaGơ&֓~uI aC,qiܹ_+[{넏Y滩]רCgD@4cTddSdd/M"vjVnLl-=7#$3]*ވu@!L`O͒W/ob!\C?cPwqtJ_F8&kV<~ 6tYJߍ:} ƍ\e+a (É_N. 7v.I-0N?ULV]*A, yOaڵ5]NP2+U62B0پo,nCtCwmeztmytxqKtW*@1D+mUm,m?Fz=K(m<%RIA b| ,#E~17:>SnqXĥ8UlU\CCU3D˪Xzfbֱ!@}zF"RhR+#V=N=N3&Yėnk.daǭL*ͳo0CX:N$\pG-GaWyp_rUMz-#~mymkG/Wk ]X=F%b(\j1W?>7,VSŦ::HV0+9 { -s <+CLz"@q* R#Uq>$nlv"fJz6~1wK|^o(O l 3B MEu4M>o,aY{8s>B\ N3Jٙ,k&z '-Um靳!]$R"y{`f1؞_1f7fzjjr(q'ߣW쐬.ʞY=T;yH`q7)mVa#/ ɫyZ,\F8FHGfaAOG_g@MoWw͖|AE6s="I;\O`Bk~ͦ˲IfLPqa1Eƒs+ oG,+A6JYT>3||?鶰݆Ǫ[?PMLM-6n$i'y]ŕ}%.&,^xBҫA.p= AFK@nH؏4~ .i_}I\$\,ߎ8;>׎'-q^REwCC!#waa};HL5'}}Oظ4+S0!PIML7Id@ȱR4v g/sJ7az y2zvvv~vqvyvuHz@ϿW'+XHCI3NB4M@O ibcck;4# C%qsvxh~ AHo(F"i8^HWhG [ofwRG?lC $a*pO`; tkJb60b`q(PF; W}o\>bTO ?j Kw|) >qk 0ZqBU|/untec~6j9L#|fmyavJt1 ~jxӺGgu1.WJBSmKխ 7,1m6޶Y WVTi.Yx*~ C#dWt1 閭><?9ݻ#dsy?>4 4"֛ FY{%[KZtZ,jTv_-}V2-6vO҈wOSߡ>v}ja1ۚ 'Z4 2'^WIII[I(}EʊvJɦ 9rvr^rr r9 Y2$ 9[)&1n` ¯///.6/v.p'wu,}*gM v-Tl(e%hV,jgkSG9 8y| eyGys`$jyEZ}Sy{?)E$TؽQg *~,4= V/{{c쫰F.cAs)bo4hB #BO2T| MSe<dH,SJފ3z>su[2244NhKHRJTNZҌы.5w1&PE#[bQk0Զ0uwhYxU5H8D!K*wqY&H4>ѵ@41I6niC{&QTE5LTfy/}`\!6ϭ9g܂gY\mN`ŸR_q+M[kd..R\ Awl|Y){GU143䢨~kLXmbbRGJA&V.V:Vf,}fnK@ܬM_yN@ _jn}Z3?fL \I[nG^\@8gaP%fx1L!,b xNmsm@}g&c4}7m9!|,8}Wi`GeI2rM~d,G\Y;{jyʳ4>\󬷑INعI>γv6V!lz9W܀]WQ75%ggUNDط53v{!G4D` SM?ʕبmk)k/k+]񵿎w{smyE<qi\dz=E|t^^‚fʁJX!B0{w D@P¯iJ ]{* drv[o@`ɟk2 Xqt3} 'lNj3sFZdr:B<A>6>. :Ƈ |b^-G=%S>uqo254HLg* DGwGD{i[yjE@5U &\5 ;%c!P+~ rrL4)\o~wšC&d !kx52LV(D.v[w:jK?XZ-}Or H;?z[eGނA^Be~;`E"XO3 ׹xHP~Nc"[EŸ?#RSyikqׂĊCY 7%N;ų2K}x3voN, )7ȭ(GǧH{[wnww֣1Sût14w`Xǿ,gM6i?I^^lAp@O5//ʾϖǧ;o{ɧY{ND+XVƖQ;.[@;ԋS,܇tC$1ƧmI='ghۗxsC[9_˟?G o֓έ# "v78^ /}xRy'$ ]7c㠷#F`ߎ Po]eǁ/u`*)t;tGCß ;Ž3>|kCZZkXkCWZM@8id &bTD 5L3?mYcCt)=*A\-H';@ D?}ϔ+ J{Yal!&9 E~?C% ] h,Z/-++׃zL+`]AQ'*ܴ7{Iޗ6VL$XbcUo44!Tr3K/|W&}k*Cy|M(v];W˸3jcX%U7i(| 3аbۡcψ#߳ޒY%Dq8({8[!J i'VZaEZL%>jNJz~DðT (N /.VnUܠ.=~n|M^f`CL㏋^/@:rE>!'[,L':_SǺv˶%JIm~NER|">ywگ`/~..;7 -7ơ]8"_b5( *= е0p,f+l3u lwrYBpn$רeX~U1 YǐEށc7q?*W0ȴIMs_7@|S@c<*ZT!Q0v5Q暡"mli=tW!~FeӚ{eJvfz^ߥ㥫(gn!{G)rŷmKثk;3 ֶ>nNf׬_Wݧ,5NjqiM äKhȴtj "Ncô [S#g=sɀk~K$7T sLك){ m4Y51H#ܦ\ e2cu-<BST˶O8kNEv]u6|_::2/8sHc,Y$F,k %>5O=Nw5~|(z8)At UG+CMsy75P*oG i2B%i"T׏"ݻh|fV"IẉBFyk.nJY,=up2e+wsqu*qJn9Z<B$Kh4i.@x^H~;nz?vrRHg[%yP@}݀|l|\]}A6#fq= Li[] !qډ =)^T6Z|2S #4g=]!Bȏ,]і]`NZŻ!:ɣ|,TٓLIXVHUK)0$^5*Ԫm j4kܓ\@W|HDUګ< F!DX('2M1N{3!d7`2J-N8[v }0A&L$Kv5!H}9{M>}H[]&1-NkuxV{"h9E3[ZqM(Xnjܳb-ׂg&^`o.QJOR>9jeGs=s<.`J¶=Bտ ,N*t(/.`/m."Ep޳P䐔nՆfW- xN0r00^rlJ/Ԛh,Z~uv HOTL)7\wxA|!csKy \4ݹ8pdlɒRI;/K : ̓D߽A#N?<ͷܥ{JΥ*^J-o?/ÑZ>S&\x~k mw2E[Х` dߌ)s'GPa@u [ t Mw [OӤi.:jihP|B*?\8^;7ٿtXjjfvP(X6XGw/zDɷگUml}+Ff;Vp1R֐,‰c(R>T}ݟIG~M]aЭH3[0WO,hhfE/czc,a"v[ށFdܡ4fKiR>Fhs?fwkk*{^CK:>39w(\Oio,`'@0_Zc.B-rK pvfQOm}Ly_ھƷ}MlMjMnHm^'Y%]*9s0c!tGo{ѕd鍈Ϻp}]!nV뛰BRljDA rgyDz>DaP)pnF@Pt;!ܢ]]g8 ni[%G/]F^binTw;MzRس֟ h`,)W)]SlעS0.ݴ P+^{翡<` "R7%ʹs4|r_.^RA>'(x?1 #a#}T<.)d:ߺzi9Z20Yаpi))aŇMܽ-wO>`{UۖG'57쨏ј4xXAr"%$WCLj܌0%:^`+A :FtI8iX1hA(nO "RV2ms}č+IiװpNDָ ->\(CM./юv1ВOP.oe68r,̎@؁X^'Y1ywRwwvNSL\W sXZkpnbp-9^0yT |{x_蟡ɟ`p> xKUm>ߥYEP}"qclW!l\'DqGm59.Xǰ`k?\n g%Fx'g'GOe//Bϼl} 5kٿR)hsX+OSb;U~ˬ_mG<!+pd 434443 ~AqmBь@7@BwAP/S7x[/o7Q#XJeF߂WaovOoQW z$/=2k:HbQ3ϱ߮7c wB!6r55T~!5 v zTĘ&Zuo> % c A@:>AsF.? my)};IF?(xA[nR>OyyЩ<8E9rp*ŽD;D.܌\/\m!!_" `xS097 B^0bzeyDwAql DD $N ݆}zϗO=UyvCwW ^տ5z}y^'i cޣ "*~F2 W= ID,DOpdJ gj҇˙ǫvvoXdCE/pA[}@Bͫ+mW w0 'XFஂ/Deo]!^-L SdX 4Rm'Hc[UQ>?H,97Ż'Z9_v>Y.֗T^~ kp8rOI8dkcՊ|$iB>~!"$|dK[ennO7E&ea=P;!xҁ] F['f o⮲ƦjK}5]cp~Ze&I 9*@u*T:?S"DTvl An&[λ6 u,7~3VL7Ϙ`ɷTyyhrmҋ5m) A&j~lb_aL%ĞCOLPD /:\iod-4|"P `n")D#'^κIz8iS^&!};.oh?nij#mBGD;jr/oaF( W?dڼy_Yo>0"ɜo/[N2q4ћ o8xF#[RSmTdQci[cԩ:﹥{m ]kF^U{JfԨ%z7 ya!pew,ڳM#NȠ2 ;&&9:*?p\Tk0IcZ\9}_?^|7iz{v'vIQNo~99lW9A;A*Xv)Y:B=KM Ƴ`/SCv Ȼr!jѣUM5yyy[YEQ&ѳW%x#O&?}IQ|-"kQ5P uQ@FgJ%73 <,JֈVvƘNCsgVq>LwTFk,\%3u}y%O;4h\l3RBIkF9Br#K4#Yq8@ be4N}h<Ȕ>M\,'~Q3S:YlH@H7H'H;H+H+h*sHN3Bu%f31ʩ?p,X6\r"9HD]VBrzv~Vqdlڄ"* ޲k%|?IC ^ꮑjΑjvMӮ'')?F>aGN,>qbymo<͠N00G8l"J玝0_){W% _1Wހ{KmE~q}+A~L21@{_nZ/n5^4.X^`! `P0H8$? L_Y|хmS(yWボR`[ĥF)11*Zl#T+(9~[X(}v xԊU12Nay M Hn9Q8Сѯ$zL-sOٮ@`ƅdRL aaptdťx HTFi_3qx^MSov +WY'ۘg8(6FLS_uly)$5VP,4}|he\$ٛ\<'?714 &?[}~^(],甪-JOUɺ/Z7Ϳ"[<>2p &Cl")*1f۞N f|kmw堶)4[HqM9O%ԥαբӤO7NxidzthwjRFvcɤ͑ʂ`G ]^PMr591{/w&)/ye"Bk%L $dcR+]rN1zq_j'xpM@5r Cѵ'oz˄4l, =״THB&-a_Ç+ Yj@lP4 0G'wjj:aԕ[. ZB 4eӟuЭSRt}#A 7;uߓؠ[ܳFֱu*PGŸ꺛xgwvQrq"f l[Pk9jTQf)䎟ʂi|O\F5x, {`u(w:vC3tk4++K=xsĝ%qۆv6q*E81s0ڀW8!Q.>"(y@s[u.<0{10*AλV3RKfmyA@EP|c.Wj䜷"IM;Fx |wo)6~~3ҷ<%)*k-}$[+gw/D-v@ekpD\5nG`2{[3V1z× s/6X-wxZA*vciq 'so=SΤYk S/"j޷&60fC$`'Xy'UvD4$DhҰ$ `+%d T3 ;4 ;FeܹB{NR(.!CW֗I2gzzw>frlxᕟӉMvʺTҶlJ虖AЍnZ¥|dTJץűJ*h''~/4v_|K` /AWV;)wldC3_nN=ML <:Yx>(TB(sh_x QvK:&ʶ71(=;ze~.uteicĻkdc"-1JpK=#/tJXSkջO 9!6ύl9k^=fiReBJɣ2T|>W?&S- q6[ϺJ|´xTxٷfL*6>J%\ ,޽<5sgyaB ];xu`OK%& !ٽKݱD:-L6@GBӃG21!Fk3MR]|/cJ-WwO{n{+OBQ},-uMT5XP]82@: Uj)G(~܆PA yG 2#G`$S x ꚛaK- KKxk/Zv䜠ߠܐ&Ol._ @t!FܤkV7S$k 45"y59Ey9"πK``KzN+rtyLwBH5G~wJ§m.hfzplF^@39N%6@=R#W4g$ySjvz☧/qN^1W9;"{2WO~5'.՟(:%Rr  kTt] ڵ'tW|'il'&1 uNԈ)ī-djkX>2wqeUxP g%!dAc-67W&w Z^Ǯ>3Œ}ȹN5B8OG^ֹD5MBeX͵svHhTT1 ze+>ZF3uBߧ>ޥH;!-93-'s?exhWV5C'/fc_hۻ[Į0bڵ󯥼cFgv=. p-X0m9Yz,Ս(Mo-3EPY 炿@P47I>D7U}(-@ HYQhb[ƺӳI?lęH?N>TwukvbˆDڠ@ʠ딞RV1Q~_Іn-3aMsX79a{/v۔jݧ,#v5lwvbw*h~nlXomlɕnlaܻKWÕ#8\TOl8he]%8~{yED{zw^ L6X :3ݥSUp'hz,h2J~翱RhW`OMoyoqw?O7g:{k( gO/Sl;.@]D"Rc`2MU'6EZjF_жL/F9*wjA9ku@gdӦ]̕R( ]Rr˗|$0"ݛ]CGоitj騉 QLA0P# &^w}lU*Uzs4UQOt=u84:F+9pM ڧˇOU_8RVpMJ\Bɻ#:O6;ּۮC9\)M%2^cpz%}#Q.y碙z:T_=Bt9Ar:ifS觜o-eg{0]-0%^k>mWV:l漪9UH]Zس =JIi&PzAGdϼYk\ +e,$"TYVU*WHȉo 2=stqYxM6N2#)LcVq#יZem}Fzrϻ_-[!akhkmϗJ3Y6I=eYN|P( *{&֠6,s,tZ}z^ N` dOmbx9J/jT#2vL9Zț[VȔK%z/cZmnn>RBp-D r*JX%I-Fl hBն]L -qRήE=VA_FNMzdoiʡѯd- ӒaRT+]%"V>lrmϘ9VI?HϾYij]6P8`s$Nr3o[mF=Qy.yx2 F` :T{~g uDRIeQb}yݯ6эoH'~V-OѤ|h]tyܛC/gn?x1$鷈 c` S  s]ܮ%q¡ i97F @P_ɳ_G=+yԺmϜwVl\-=Mbǔ&ڧHʻ|-czECr] 爷_.LR ؉EwYtC(OzXdu}k߸9Ԯ{sU"׎y b8 }|PAMJ/`mb=8ƶ[y<񁹊N;1p9c|gb1$-ZvpRPuDj9-dI9keBgmjo]#LZ&ʘJY!A\;=@3SS 5ZZ&!'@ )@|H-٢֤qN3pA6G>uxV!]P5*cxWL u~,'aL%a%-yЍ dMȅ>R9ޕ5|߂b 9000N4<<~]t8o?g7siSܤ-U~ކ_ [9\5 =$#,eRifs^q *m//0OW%u:$i[;0cȤRI$V7:YWHڎ=~@w ĝDy/^+eyy鴑63M,`Xǁ5?r R\s*7NCƓXelQItܷHhPg-;t-"@lPdimpطKNIST$ s v0c*,R6B<:Р~ckw46ME!Hz:ghYɒxPE1Mx;o 5LTJx"Hfc}M5J&_z0~~DaU6IOU ÐSHp PO6.|cc:o%w'9\g XuOU ~_C𶎌_3Q=y,TkpPBgꛧY!h̴!vLq}_n7n.ϐg4+GfvqMf~6~ι #O>Ku^)M4ϼVM֍"VJF(/*bK([V&"j\xkbss+ ]('Y'WX]V_L}w!/X*fHf5~?7r u-­p^)x=k)lJ|=\6rFc{EY%P?C3=AP䭹ao:cnߧݤ,:տ +_m\6TGdiEx1mր o-(CS젃 ;a}ڍs, K,KKJNK&k217mp7D N°<I=@ɹEк|sN/Xen~ ]Y,|5$^*-5%&T HQ;l`\!12D :tn͘rfA&UaKj1R ۂ&/u;)PwCiVVK}Vt_;b-mc?AϊrfHR 1 f]oef|G"AIs4ƹنhgHUlu,+.TpgMa1ic`e$U^W&-wxSo/XMU];nxN3wťfuHvL~[y=Xi,g }lrns+l]o=do1I{?4` gCF9&`])ۡ.ٌx'Od[ԲKԮKk[x/98 ok"MRQۺ@; -nܔc ~_~|ьQy)a{"YLȴҡwy7I-!mCwy ə)ʰSo%Be? .-W@2(J$,ƚ"͕?ZkU -%ͱ:M֍mCKvcg]x ` % EDזY슷L(X,zSeDo]-B:Լ&8C%?.+D0cO<TAwe0Z'xT$R;Z}2|3%~ |]|{1fuX:~+f}›7^CoT_su<1*: 23V}@501ڠmupjbuț.vQ4\>R>Q" 8ͥ0ͭ00밻3& Zx+qC?pL1qi`kem'[`~%N!Zͣg[)^a0 BvJm*8g1?}ȶlu;2U\H2azz"̵ M?}6𡤇z]p@ϿQ O8/FͮQy2VNqAnjÁK`> &U^!)\zu̎mԐ>~ml/u_3Yh@q+]51&nݱD ~[5.V"S;w |W뒞sxs]|п=q&8[Dylj9x=OY)c'f,4n}uv.+ќ7~^n}̟ifi"nz#S ʓVVBVa|E,}w9kk<-})$$a89 9T JϨCrW}Ŗshp%/q7 '2sDc6Ul5.a"\MX#>Z#J!Fagx#^`^a s_{N/hWe>Zb8§Z:[ @݆9yb7'?"++n?tV%};/edUNrPʂF]) 9:}BBIP:y 0= Ư{6oZQj8A*d q <Zt%@K a#=@"^X@ ?.ãפSlꕪa^Ƒj0]O-qIjuFʺA"E'.l['Sjk̐zߑq G,c C8|?&s R-n¯/;w)tU= 狦tOH9^-=l?GiE!WÑ*#NnU̯=D/rOpv7Fa?ƈLxXxfڽx sxP6 Klcoφ-mRUrJߚkACE7)ܙǐ:MWxd12ģ>)d tiMͥ M$n8:86z| 5E}{Uϓy yó3 y5M=rאk zq^[<<Ǩ i| &"d @//;1zBˌsrW[Om_A/3/e3~f:f61V:ɖTݣ@lF3OO3l=<'z1'SWQ'6Weg pz72$]o\ݸ&T+&9*W yQ;Ԕo]H?w~]B2s%H`uBX+۔|m7Uc c ws]eڥ瀹bX"tLJgwb<.$+PjZ{F =,U:@6 \2:R'r񽫖,f:* 츬w_quAWW)[ '{*vrI-*_4DH D?N|[RO(ߺPѤP,H nB@ ЧHsɷ.nxYB]|W:^U"ܠ?<±}dS+lX$Tk4odqli`#W=<80&"!Rq-jqҳ'U.D[IG@OT@ оwrS~=sۑ;!hW8}{| *Z"c m%X{sV fȋG{65WveO$ɷ}ۼހ, ތ#@:5 5@;[S]yE%KZAܳUSs}O0/rDY YպaER.66{=Nz •T}ϴv^/wPRub-=N&Hȯ/cH"etfTHY]QM#MT|Ce*wPoINj븑|7Z4ևyӉ՘-Çׯ_kmoƊ&K _|INNz3)bW^)˭//;^[`ee}oCPKN?\PK/wy|uwk!?97@p@ 7@.56oǹVe;T@@  A 0.'Qg4x,>L_YDӛCF:p!NP+m;UV'{gӯBōx ?3_W^ȆG!SgJʿ{:Ikj+F*WfLKŬj;lDos.U0 WRVUuǫ8XjzKD &)zFʅ$pugk]eiŽ]Eauwq sUI^EAO+92& 7MŘxY/h/JUlvO\߱szAԀP(}'4Onuy∧uwfd0Dizi?{]vKD( x|e)[iiV'ݺ4zip3;jSw=*:>FS=Ff9F!>x.Ll6JV-57iv=efS!gKC^TNT*^;( <[&CY]63:Tr/uC&Tt􂚆_hK m,Ίg1ѪmxapQ]ͬ٫[\ }F+uHCiOBP[O\__?s#yrյZ8fۍVs$W'7D|/l@kdP:Za^8T3΢'sPjc&]ϸ^:+_AVʛO4E,1!0^x{`* TޏtrdzY,/Ƌԓu .^!- 50J45y8ke")|gHp m,㱗MRyo jp=Oboe.~fɭV˦J0&x# B4~Z+zn8PkSݮ=o7 ׌nVN̗o0qQیԓMi^9A >B\GvL:|*2_+BUy WOqK6?DP )pW/SZEoBӇ+?BjTTT_G':!{dk1DJP8d͉Y%~9M!U~>Ļ䄻_|Ԙ/a[k˿47l,NLDzщ;/婨 0;ݡƆ̩7} #>SzPPkz%Y1庁 l>@~c*A qA@x'5`=Pף܀?00UAɣ}íGnHOz@*7e?Q4Pm9Sqnp'֐KJfL(~e U}[KX'AL&FbřTsO6i W xw8F6fO?+܌=!ca,8yt}fmzxGT6ZBwd j5YD|{A.9+Ш/V;Fi)on pw] u%ș 'rѠr8U8B=˹mZg%%@>o:,$;?Xߒ?㴴ݻwDDGx#y,Lgc !4L%ә WɼB)np?BGkӬcEzeK(Yʩj9[}oSfUobwo_{;5A~5EGEB~ڍAހC_F=|[2zzt9ߠ]-].??{I V^QDN|\MA;쳰fXV^=þ(6}Kܥ W,w"煪q^v#5$\(dt?eSS!]5͂]jÎZ31kM:?Pm^EDͼzEm1ɦ%(]%钯 2 .|{qE02M5A2[!~J-b[;0^7Z- *{*+;?d`_ܨ"_.PXi.aU滟ƒ*IzIpld)\Yt)a{[ dHWg}/eTOPL{ku.rz1o͠Jg #axh]+5l3h!N{*Or<mzSI\reHtac8OʓCLq:O7gC5}||xkSԛׯ4/;y>Qאl[kKHVsXQtu"4-?+;xW 0#dm'Q&6`ҹ^!!ٲWOwO(g{(ўzHY^ꟵYZm颐":NʎѧSX dD;hU},Z?8:g$WӰ=nTӦ["%SkYROvm<=  R| #s9 ߖaԜt\Ll,cj/h[d76:2G+8?+|?R5 @Η5W@y؝FGXz 9MseMrZ4&q1ϘӼmyhw7TSBh[F> ^d;h<)Q8K1;]999Y/{GD[f'[xV%4b#"M|-=\m2}} =r=<mOotN5vՓT'm;TSxSkbz$s7ԈIfg+IWH4 {C®"n"JRB ܶ0-Otnwxb̚nM~vnCA 1im*Crs 1&.^[a39 }/柼</]m @" phe.hahj{ӏ>rGZADM:~Đ'\,]$]i!o-u?rJdr$ 4 U .UZ,3oQH^q_mIfg >Ϣ|$Q`6o+HVNRN+X`~<~ ydrtVpqthsR?@iP BKHXae$nGmª&.,ӯ2mi!JjFEE9:y 7{v/{Ңwu)֖g=|Fuz5A.Dΐ\PfjD]e^I;6;K{28@ ;Ҩ{BR87B'DohZ"$ˣ̲j{.c⁒ʼny1Yqǁuבɹu20"">6kAzH=W#_'|̐5g3$ q+RKY\%%]|Hw(I[3h]ʗTsk'=qRqݷO ||n}(o7bM5HEit,|8xym}csEΡfd g],^|="Ѹ2R>y_;|G.&B͗lgWHmA&rYoS Nv VZ_y$7pLH 7 Di/u&t6(ՂsZb쓸yleQ(5Xmu),@8Y蠄eN߯ts~8]?փH沮uO,v_ 0ȿoΰe Yvwp0T.nуSKg)ߚ(ҧ1|ϟ$`Va<[8cvqIfk_F89%(fJl nrmxlY~{ P>b_.\CV<լ#SdV9Z="j[Z`lw7zWnjBe}VX'غG8fv^]?-G|BlO}4/~ga0w7ՍyAV#L9ﴃ*{I(YkY擾R* >mINr[MD} U/ƳA]JgpOx$@\Gr6TXHэBƩNPxxx*d/F=жHm+j yz]ɮ}I9r/Zta(*ƫubI*h3=sK;!4Hj05iQ%ka 9 |nk QP (N;ƣCuKɨ8iaSTUD$+DL;8?0l.n295ssu/ʱ󏦡R3 I yZHKacew\UE׽Z\뿃\_],=t{x VQRXHllcoyK~f`Y S};6Au<ȻU0n$[+C\}|]"-_,L#CS*!#އӄK9VdȖL ,l?ߔ޻؝kmKLqs>$ד r,#b0~4,(؉r޳[4H*eoʘW\ڋ*a)|4+@tO;)dRbңfQ*M5~̠08W)Rc|"gI؞HRoHrh>G8D[qc)w03Nswć u'EJ>fm o1{̉{TiѶRS+cRz$3_iּ\0wy{Q+Qo{Kdm3o!!-%Sd+{ ]+ZȀ-#=+#'3/)*961+5m~`lGܙj##7;%|ߨ{7=u#v"_AQr/]ނ`onx^jzOrWWHfsD 8.;S){86yw~ʞe{lmEmi%*gZ,iQg>?hV"lrA_Wcb+GL{R[hrn%ݯm/6*;3ژ{>[ |v1#X\b 1܈y.+ 4{=˝yILdeX-a'V[yO@Ayms;).rzڹk${x+$ c;%EOIpM8q3M"-Bm|5lIL>4Ƨߊ?Z$ 4p7ފz8ʾ"W(`x:yi=Rxjzctĺ߆~Dpᬛivy#.3VJz.ɐQ |j&N~ <(_Xi{9x+mvM=!qBE am$Ɠ"{vR4o=iA?@8E)"^#e ݁`i7d +4}/㝲\ɠiqyBUm/-aeLTL! H60Q̯A@0Y_S?[,(OGKžޞk= H!=S J v5syPG{yNKOzy{`_yz$Udgpstv0UL_?*˖L%"UA fcm1l IPXճx)q7~)i)ULI3 3LYH=?FzDw: mSO̘֘JB g2 aôI ycdRlVom39 9U9L71:wi T'Nc[:w3r_-N/ZGlE>8#]'1}n覌yn|Olu^{#-d8}E1 cO: +w/S@{h Gx CP7Kw䗌_mVnpfq#T@78xtu9x iŌ8FՁ"=tArYQDsAb\X&O5C7s%A1WZ q] Z2 _5Y Z0qw5 UjIՔԙޟ=:,PY!i{:rL聍}欂M!1cZmn%)\)fZ6zgHM]&_(2/v 4&;e:8{;XFF(&ddK4eKgKep ~V 9FT~pOkkOVv^ѺٝCvط{:x7gM.ۦo;br%]*j/EL~jfhcM` Cҳг8;7I5xC#4~9xb>rD#/0A=ObA,Ģ)o+LJ 2䊳y{[F&-t[?Xb=>,ҳr 4L-nPJRGxID9d%TutMm̒ݧ{GUg9WwX Bm:hEw!_`H͔hX/0sS5KO1MCi\FnJIUl#D[F=?g=Q`i 3GRMI?)\Oɫx#?\b2O~:LRVa&韇hE+&Kof /ekS)O->sd`wxrUEw#YT oPV@WM |vT"[8|l|L;H2LW9B;8N}ٿo 3 x |03XI"؁9ẍp o0=b-R5JN۾)v"?YTfxDKx"7n U߷L,TF2:Ԟ!<9K'x|ybWKnpt:V.We*M?c.w.xT(R(ڳ&mH.yV1bC"Pq3UhB޾@ؾѾt\rquz+ߔ4᜸b (-@Cul>ZEL:Ay-bҔ?OB 4S >:3qb_Ϳ͟~[4G{Eb# _ifnQ,*kRHfu޴/<%uH0F5=);6P4cqpǑя},2%dt=1u=7\&qp3ɚun3jT+f+*䷁7|JfMܐ o[umL-} FKLC KN. D`IwWgNG;k󩲓ccUF[^\Jr޵(_$t*1+7!P7yx iqu,~Ƕziu =,LGU;~.@<ȇA=l}DoT>RL Z|P;җ;cQǟ5.c%h[E,gK@&#JkS"}.C#bDW//ˣHi Gx ʻ.^ DFx7H"y`pf`qi>z9b-aqUojq1Aw7e]eh&k6q0CnPRы.Ovnq^v>Ȣ'o#X%ѡ֜=gYp%u%}ca: n:A>Ƈln̓oLϑ.Ĭ]I׮g-K;9V&!ް܃|飇 s"s~T i\Gv&+wgO>P.L*wrTHg蜅;;D^hAZ/Y6= h&(J?t1/t~=Xody6Z{Qie]6]GE9<HMt Hs47IFE9iHR{hZ\*}iڋ՗+dֻX(oA8"OvK %"^u-q_W^۟:ɷo0U.ϛ$1CLu.'o Ӝ _""-b4s:I!3NSIUi1rbtE R2P T??ZW^=}'a}wy;Zlv|!0 "ml#p(B=UBOFIA"%$?֟ mZ8 lRh^\ž3-Ta#I7!HhOzp_@ͧG ְ ȓ8vSs;GN(zմSc> *\8hDGju}.L8Q47ZZ&lM (<Gߑ<h]UNotS"Z"㙮lcml.>vJ/a9VsHU"9>cX>}X<\,QTx(}h o L_NC6Ԍ96!qHn!`Yn? :j:yz+8X&J8)bj{6u`vesM,]k "iL* .*ٞlᎊϥ}/SЃ/î=$gX7 4?4l{Fb"Ol,T98&@UNMf^ X03vI)jAΫcC#M9an!^f)ARcd[T ~6|$PKwM?Mp|y"fڠQ5t(fɻ⩯Ͳk4U2e+id$&EƆJu[E%#"d \WuD(.!oLUrppP5355G1zfNm2ŤA2[-(2÷,iR5Fn{ ƻ/6EA6ގ3G;6Þ&UQQa.9`_eS-pMam@uӺ1غ&E#NP:CE؏xW_O[pOPDUձF5Z՟G0%_OӞ 'x{z*$ ^HgOĚ5̲st1vZ.?._=ۂaIfeVηlY_xWŚū5Mv=]!J5ڃJM{5Qb$[:VRlY`'=Uf{}eu;C/fK8J~nf<]ʼnݖ˼ۈVM`j1_%4$94EkuP%Er#Y)csrdM$"VA= WsQ xߙ}v*ϒN/]œKV\zi}Mq1rK$ѻWGpP'2Ϸ=1:V(D3ٶpPB{X/hŊ8Xlki=_@֟`\"q4Nh䝋9O8IWQFO!9޼ܠUe?hyi3!]s G{/NN|ԣHqjF^tTJ3=9R634TO>S_|ͮC5#k*G،aK+lB"g<<%xd%TV$w{OYlA.r4&FC"W.,8efPw\` _0'bsNcS ]+Uw/~7n~oQ5SF-!(H,1h ]w;g҇-wvANU4 Ξʀ5O'(yn[@¤:9*zi iůZ*ZC%#[AT{Uq}pʦmϬ@{0+ײ~k'y1scm\cdgs\GEsnDkF 3qJ Y~4ey|Y>UHsxɦӮàM)Y,/BXtp*YMX&WWVBa*\=K$kİ[P < kuqeHVr|ip]C=.=nT;f^v8mScFHegzn2_<4̠>Z "Y?wS;ԭS( n0L &t)cԨ=dDI |A lU o@ѭHލX¦Umͷ lwr3lb]ױBӥ 5$k6tAKIT^:=LWVsL]B+%H/E\q:nX] -YkYxypq,( :!5f%cرNn׏pS+0zn&~mFj؜ȝ7?;_zڵx" = 8@ ^(JxUZ׮rMȇn蛮xyd҉" ""D!4#_O`n2> 4__&[&ڼ>YT$StOc.'Y\hZ:<@R4,yfJ|the!e+6zxEݿܼǙ)K\r4QLCvo'oglJ$v|lŸH߲ȚgmpN^^}vjyYqfn\*j.8k?w<\'hJj+a Kj)mÄdr);V8 ~l })!^銰øw Nᛞ9V,xqcؖGTvS 4ӳ)4rBLv=J9)SV)P9fw *q slrp4jQ=I.X&E઄e{8g sG0ʾ˭`KsjW]((YvB4z}6blwpi k#wfwӎLݎ݋1L!]yg_<&: :&u`/{O}OĝVSqm.*2}4{pAa Jp-z«}d&ZR =n !JvWN&e=7Hڷww&9[dTN׫>Lfw-l~@hj8M DE5!@G{H3z2_)NCrbooxKToh4jfoyn"FBaἅYzj?W"GV&1jN6luUMunn?jU*m'[&]!𧒯\C]9\}{J) %=h6\L,M[:0?I>F3~6KY'10.kB`EjUU_@eZZeH›o*W 'Ôf^egm~k0a  ׀-zqGg6?Z|j2xKY[ E!Q݀(`\wdEv`ל=ɦ}фEa3OR&ǞWz+Dɛ{csTc|GZ[֋ޓa3zPɘu ҪU#fiֆo2Rsd$JE+Džjߛ[z>ON[_%:9B;"\alb'__3$zlE U,c?pʫyI}n .)JLDo?ɚ{լsM\Y~?}Շr\ݛĚﭠ%Z$V2]Y'R"=QVY!o@GF@+9<=7TLSZ W'$C٫`̃0\!ڦi(X`aћ >TcXlHlP4}S)LQ-U!ʗ‹GrP5F_Q )}bKfHϵ,D{?-hN&|PE3`'nwG ʮǽ`[)lZO..aE s[R.,T*J$Я,zzR.Ta>jo 7"#¢TtdD9*xpIfzN:Eo뻮9\0gn5  ,  $}DE$d$}g9qI#V(+9-}y!Vꆏ/+0P?w5U޾qKu޼u8Go8#ygPo#Hٹ>FݽZ_=}5vF9gv/lPw#k`pIijhTklIo`'R)72^9&wK${8W(Uhk/23U\]U 8j[k%XJD hUQNm~98GĻ4[/1)Mmz%5y-}%.7|aKCk LイcMK]֍mնw?Э2Ot[xG%Rt5csxO(>d>|o 냅\+΀aogm Ã6}N,.\ Uaq⇹\M`EaGhA;v}mP1}dڀ1$ٚY lƭlկscEV߸b |Z^1 jybycb5bb>Žů,@VPETK3}Me\h oOlN@:w= $pA_NQ,B0PSW.P8~D1;@^ksS;dƒM}Tcdkċ+K/s^νr' =DM@v4 <psho`Lߑ3VՈxDX?{ZBݭ ?b5̲CD({q}<`-!2ʛ1=XB`\QIҫ9 3mE3"]  k 40FACEFA@FmCBmyBXG-n~y+YswEqMxVy^8jqöтCʶӢt|kr2$a0|ƺ;kM9|YW} ~|R<8)*sǯ  qSiV\#x@Lw|i8\1 A0Dnߠ8\F\w5o:[Pf)@C֟f"](0 `Bp@;CF|6{3S|mչt _N-C-ka˪7Q'|Yկ]1/Ȃ*] 6~'⾯фE?"u%M; [ds#F:[yI'Vb_|ZU]"=5 9x[ewwQw8V7q`Ϧ/oWVp!{#u>[V2gYa/&!X,U&6{I9J9#].ixlʵo/Fp/P`v>v)@K<BV.o-a*lc{(pJiuĄ ŷ[wo[`0 gii$6G~10H PqN-.iUm])}=rmE :*}!9`o H>ǚ7s g~]ǨZհofpoqxΗfkN k vm,JHC`j݅`$Dd%u7Aa+$`-w H; < g!"N!9iqNK@e]H>|`^̠$my$W3]x֗4?N~zQ*|V,6#zj+wV VDE=&X7 iWHuq ;;eɇK[_+mu_w%ʹV+/q+.h6:^y9$4je*Z (v lm7ʪ, 5n}}Gp3~>{8L5B=1f3>9LسOKME+u[kPĨM¢VȠF#j'C yy}J>U},R_(}ow3KU9,P`G!*b}m _5 yy+eyC;7~.7.~VF?dKOb[% }<:ҫO)KU,+S$ќ!^'=߼&xJ=j3!=ws(m*-NUSMpǻqzUPf9ಟqK_cg~ 8y;2T7Bb{5>Ƕ7MߡkE:gAN.MDcWgm<q3qE-ܒC= m4Mpp3`2?y3J5Vnip#.6˸[)7p}ѭMnI\BV8ژhꈤ^ؤ}I 1rmh[a(EE^zͯt/v])lă@(p].3 @wbI,{MB6,PfhSZQu[ 81 jQ?1o*DŽS>)8)x|IiL8W*8 b\S9.XW|+aQny3%>j+YTy;Kc#Ug5`1Lb_h}틂I XهGVM4b`Vir5 .f~A6I~=SҬM"L"KLMM [vu.0]c]lOQ-0(X6"Z\>{LaL^`j +0p5sp&]2gGJ;?!﯋U̟qmt3UKN>_ଃɟM jtr3Y MD^ha~LhwHgf9ڬCʤs׈Ղt$ܷ3 4uMImnUr\c= >Wrl z V%^ QKԛ7~>8V1Rۅ|ـ*?䂲:Aamw>k ɺw͗a& qýXW@:psBmf)~2l t]$C8sp{_߅.Ƭv b6-c>K9L?/~I'Z{h73D.=\R[HיKRȒ-. -(S>V =ox3cP(E*B#c }_\N/-a\Y#4+dG~VY떖} %91oS$s+ T34unB³Mf snqΈ(79;[ʾ)oZ%>I쮏Zf=:޸ˌvѦVi: r=Bl+T @r/X=j9@Uv@N1sHBrt[>_f;He}?ً L]d3;Ǹ1NרTKL=%Q~LAT!TQ,i|%K"-ڻ%]:EHm1-oNc_ޢ!QR9< %G/%uBBo}to_cY^]]]ݘLQ^ a#Q'wyKϥBwMDiB6qӥqW\5ҬYz-]L>2ᅺ =KDMG=f\GFUEK@Ms@{BwI{E9#YR,L>.~sMx-WoS.: 5.9!1) ) _P74N5Ņ۶7Scl6Abh\#0a@+RDBoE[-D{]Fɠ5Y Jdf=[p2D*u%Ybldxb[עxN%P烏5P}a P=&_X[]]Zߤ٦%'vH,{DpH|@OioQ 0n[ȣzJ-| Gk(4"?Ӕf'쳖]ԅGߨe0^$`?&$;o3 0D%^kxژ)@>Wv=)b/]dsmx!Y65Nu#?^YgޟfgXPe6LooovmglSxlSl3z/>ni6<̽s{ʇle颏 Cg ey}<1H̏BQXN0ONN7GMs 5rV0ΓCŹc)* * OڇTak(gإ 5<;dT<"3%s`~@q_b ()upnk"6<N LLQN34ͰN_\K] X>*yzv5hD!'=nBD9Hxj0U "XxϸTswr媡bgc'Ltmʃu4R/TBjт>e=SksHlKW 5ekdnlHPJÚAkѲ˅,ݳ̪#"MsK8Vɮ0/!X;9gmmmq]({W!jt[:R/]&DԤ_BwĬ0ƱI-9ͮ|8swыa#w5viE\CSGm᧝E A)M5a;j}Abgr뭓煝/:`wuv n;f[]b5i!v%R#xG_?___o_O7_w_R`H% Ei>q!11!>C|S,+4N8gB$M7)}Fq1ƽ=}+Vh}:8F=F5A1EC9MWj7ê;@sT[ UoBT1>sTZ: *Ækm|=Ww?0X#U'ODpQ,N"{6bbR * ,G͓1<gbJ#9#J.cAyk(N>X" E;ւ;Bh}W/0ϲLO?X&>Ba- ԑFۘsn^vP/1a~8~84ȷw$b$ǁÀAG3 "{m0wmm2[i@s/Y}1Um$]=S:[|~/.ι:8HֿCEVޢ\c\b_;_i^m׭O:L;b"e5"}%_yD`䈽eRZ!:qNVOV*>e<3OVTQcb]u9EY"LR4 l{9Z,.dhvhq, ,22pB2`F.pʾ۾۾۾۱s1x2f \#nB?,0.L)[331^ACĂ_=^u >መN2.qrp-ww-vsTOONhXE F2,Mo.Lqe1v|4ԟН'W,9T):Z'7V8:;ȽC PPf+뗿ibFEL_Z3\7 99gyO&=VHc}Ƒ`r[x]& _|3DQgY~cצiKEEEEIm~ -e+CkFk8Gɿh!/ mntVzd;G{89:y븇*xv-Qm9X#\{`#Y<=GSA|uMMREKpf3Uܾ݂|G0s<)4@{`z`EO{ѡ'˓r+ XXżms@D9b_c_`=Ŵ=BWC}n`^đ"&sy]#V1n{z۞ug1j/~9L{hoAADuGPlhX.ׂiwiqw)gH5r>fy5"e@cw|bƻgW [|qs MHgFm|ݣGxpCl sdҩJik~`w7`d3[!ow#hKgQד̏%ox;VۅVDWj$V q >Z3?3>{:Zg5|cmJysqN1cc|csޮ}xNb:[-^zbqe-jL߲2H2e@ǐa"fam(XsLȏi%'}G)FϧG Op/0a5pM?Sjm&]a-ġ'87(LH7GV;A+,wڿٯz'tt vT dA$:MMb "@8J1FߏҍΦ?,*St%~{5ml Q7z"5 W:D* wy5!4,{'KrQJQLjDjTblll=lNjKm[DPk fb^^EvnEc {$42q&9{paV@-_ 14M;96==b<9Fg8E+l<{yw}/(*oD ^1G@o{ CMf)x-U1ts I'Ul6"&+:'zm'*0>ʚQ h~J!O#R%n.+vjX;^a_c.rdn+;E,6t{2+.о$8CEF1lo0C>V;.<4ŞҠnGܯrc`COvkGuY,+$G87h9pB$EͮDݲwBPȐ~V,[7O [ ]4^ JWhkCb5U.R ,/繲y+Or' ~A `tj&e&eFeˌVxV^\c\}((̡6."S[g yv~(~8.[Y8r; [NDP1F[(չJ.)Mϥ}'\S|G tM ЈWoACv:ՉS;RۥxK{H ~rn|CsLwL`M8gծ|Lz~>+Q?n0QhJpt k }LL ,|VRZj2zƥ%҉K[ ֟mYJ3Srn cs{ǨXǤ}[XOFϏf[a RI;b^)F 5AX[cٜx v oKghFjj'h&{i'Ř[IW; (er$ܮcU1oY뾋d׸U]Sa({d7N7hZƾ-ÊC93vT{.xFgnAU\/U);zEqC#~3m|>C 9CG-o*rm"l~Ÿ[%)eZUnW,O뢎X'%ئ,PoP4o545ݒwM L:WX1/eu 0;{NL v=Ee t~.z]p5on)/lm};aZzTq*W3{Ȅ!!!!&FNQ.9EEXZZ[ yف :[_{+o 0-䜒&҆1ͱ MNN(ۦX=&ѱ&иxG&uW-|㪇poS/i"@ ~z8`mtFFUQaIzily5U.m~W([ KצoجϫNL=eI.1HgDGb8p vI=W]f(퇩جDlMm-]G<~snj4Shz3޷lu KAI*?٢A|˟>Noc`蟤[Zt+eA} "`H[o˿ϻEoV8FV N0`Oc?FUFYy9vhQmNɪaIJY#m=܊k/Ok|ӹs@E|`@UrFD(5@l!U;fz55 F,Hs{GrYBooltvrdn^nv&6[A*+fy'z'&b'UO]46 юfu9Q)!yU𵡼jElEiŒm#Ef}Y.Njoas 8tlY3~6^QrM8$)# sY7 k_LP9&*Cbow]MF%ѩav>0S}ŪM;޴ t^t^t L4U^|^l LQ)t)4p|B(ZAev=p@&R2.X̵Rw.oupsvoI|uiD[sw0lFޘ~Vo|o6(?O?R5[9Yeo|06?!7Yd?'GMEYQ^IS^\fRnBI2ƼUR9q+.%G|OvhWw9{%;ī+?Ո%64&YW6K/0,h8z~u Ko>P]x}߱G°j|ѽ:%IOQ Ή(6-&ZODSB_OGKCCCCX@F%k粃uni/%wFڽC`蜡_ ]!"}ӢXaZsv>{٢:Y"|R=)()% *+Zhi/p݄.cKZXjG\CE:&{rdxy=BVNӺ#tx5k qF:?A\P9*AxP3 %"՛VT}[/":4SRXg AiX'_nuU?@!CdvyDp\v;jHPma _{} /L0>ݿ\渃h|=nB_g>em`j? _!(TwZN˘KJjL=qcqwOaem[/˅N.'r%QWo2?yvs!_"<mx?¢ )R4 Tl}XxAa+bbsc;@r2l)$$LeTLY30"ZZa yƝuͷ+LP!T07 Xh:a< >9zT$K6er{~%la.R3hY>~uh-pgu%G;rp|enį.6pN0jP zJl|y2ooRz%7xOlx7;wt. yvvMMMJJJxxxw?y@6^B~r9uG3Oؗj{(̛:bu/~տ Wȱ NrJLpնK`PR, 5SzB4GN}H:߸<;%)sEzA_z)~ <;2;7-X3b8kfUoSc00[Kuɗ֫hV}.ָWT/pPvP$&Vfff]Q|%ܛMgLY[gpbȆr f+$ Nvq 85g{C<=]YMU_~T/|GgCVtFZZf5IT(RSVPPz!ySspgo|iV5OL|U J*;xٙ"fҶWQ<}?+2C\]3::eΞ&O(=[) H^⓵+ٛCwCH٫!ȋ [FNn L՛hPs_k ɏ?S9|m]TEUnn} •Y&f!_s?7KVJW|)TTLPSMVȔwg_i٧ܼ, 5k>d6p!VI2+,Y%Qף/Gy.g0Y$}7eW{ωLߗqe 叟YOVT[U8H|Q3&;R` 7rT/ |H6rllhyo\]M,Y/i/48&&7.}=%S|9ū-nT#1C5-𕻳;J1^aBP["WTvMJ o8ė:sImq/ww2J7BrZ*))4m is/c6Wvnɓť_ bb⻕%%%EEE&&&ARPA@$B%lvyA*U&I:^ f@%VZgiS4>\+I,G*[#[x$1gJ{dK=xmRUv&?F> f}]ﭢ5O%3t+ѺBغU$EpT[:)4aCfhǭG0$JTN*ȋx.'ec#G_ʽa9',tMˤAhnL #o!s¾e\պCDYt{f8^hhe")SF / t-@̠RMֱ+HPL. 7Yqu@چ"j7Jn\l2Rשּ/@s_UqA巕D9ݡ+T @m0{GtbڥrĞp䗙+-ۓ ;ssjFJs˷Gj[!vC>>9߳R2tBqG&IӝIU(2cr/?$i}evqzb:ȸ7̠>J(^#+E%5k|"FN: 8n4l#B{MR"}!uqJr)I15ߢ sھֵ q-=j 2(.hn,s8f76CNj'Z8n-d*&]"=v3yWɦvEWvSTF#O;7ȅ$Y9ʼn(qcq]Q|yl234 A*w]ǥb-DnTDkƛrfGInrƎ.恻F!?;h6dq5S*bpm?|T/4ʭ6RX71ߜZ6VM&_~~^δ3`A*^ FH@ -w6/ߤ2j1FЄǩ&V?D9Mx>)Kȧ[^^y^w:n^|䉫kͿ;y>{n%Sbb8ff O9T` o10DvZ@D :gUtu,:bl)bJw "\oTwnr~=ճgXjGQ{$c%\z \ h W}/Om<[aK:"Ϲ҆ksU669b㌴ҙyйnѵnnko;o:H4[O'^wȀPа|?2SmB0wI'WYZ .a][w%D*?`d㲀o|G)20̬d[z||wpe즾q x/ 5[7h24Ub8x'Bem{M _G]Cb.n35CER.C"dc;vVN7i!77\$k4 ;y?:`xd@PKIH4R6B.{~c31ECUbt&Iбdwl5 ?PTfF%\sn}FcO@s'!YzdUzxoy~`E͙h)\of:" oh|g . ovr 5q|@vL;~_>]ݠ^NaBv)OL_1n ³ZxG9Kxr&4$]Zpꩤ,$fZ<,{(_==ݺ&^C!iFùGWb9NשƉ/۱R8M>d?ZG!B>EޢߢQe(Hp|cMƉ6p" |Kɔ- ڟ3D46>a/0NT^uuA V\wpcOPpa՛F=OC~IG<@ghN@J&z{v{H HEJ$dQD$gIss9 Cq9g!3Y|i׮_)y± t_$ZiY i70>E"0*| {I0AhqV=-uat}Fy?6o~_6/̳rS)))iª뀺?Ї8ny_{>|hY] yݡ̑3".`G?ʙ%!=[񱦐#\{.qŕs=I-q?3%| 4*wG}(iѨM2oMuŇEP3c3)pt3<Ԛc]D]#{5UӦ؛8똲ЎdvWWVo%lٺF@u3a2'oNENT|`G~kI %Ƶ9ʐDT߱YɆkaz]ȎiYQ~vJMȧ'35ORuX x'|톙1}=y7ubR,f~m%'kbtNÍ,}6"f xnTsif1U?g%-D4C<m].\,}փgu#7-?_Lwno+sYu]@( @4ο,}(}WfYfmY;JQצNf_: UZ3z G?OMҴ>ơ~f6^f#TgVy\EmĿJɦ檂St֢ .:mdibOʗ܏eU6I ;%X:`5'oϤUύMUu"\" J%Dxlp \"^=6eRojK4={~ ݻ ']8h;mD)G9i<lkxݸ'T},ZrSDiNJձ]b%ʕҳLrC]ëKӹ{o'P-=@/RL7|LZdVKdMnRk[vJb,JmX{ 5 ? -B7Vx},&1@R~%@HV$[遑W@$D:9 LsÔu㤡x#BCb]tJ3T:T ** 2GiLQ]$8+RP tM;سJysx򤖼ni,i n|kV/.Y#Pֹ^8IUI$mp[Zfu0Ma\Ņ7lo<:Q6yvrW=0˧웷]~qp9uDFnGsV/>ܟx5{B=DXCF,F0\*P"C1θ3z'bT6qldT+M|UOUw:~ O4Ky j.(HpNy)kkѺ W\%;!K3J.[\ =\k"ERi31=5&^6 .ƃڛ*@'&IzlkxԺ,5hJVzX&Dp"Q&fϣ+cL-C~+ ՠ{^.'>0iV$#OH;p)zWW-}Tגfߌ u5 4h{WY%[]cTjllﭛޢ3/U92 Ed]),u;;e5 <][|J5I?+8ף`JY\-*zAI%)Ӟ\dbd=͖sqRKUjNSONE])ns/]%f?N?UH%!o*}rf MƢ>bpW [; ;x{ZG^'Yg!iQFaA}:m\]=g~[5Ԛyi~"[y۸:8{^򵵼*_6c>W=ʄ[yBHHdGe~'wT@ ֭[7ndbccThhhKKKyJ)*~Z^IHV{g\ݮ[ŹY]{D{"ώnӞ"BFa0]<sD0Kqos|sbsz{pt >M~t9x ,I"I*Io\zUu6(dasrT=E+j4Yb*?b "yj2 tLa,%V>IP>0 d8;eʎt?o<}4uwwm?hB#z~Z?{ަMesőLk=g}.8cGi _nFCaxm}0QݑлmP;bpL6mGHwRlP-> baC1SG=N@P<8 Ui䄡jKԳ׼|E}ҍG#4).H$}- ;W p`&*َ 37et52͍?_w扰NW-Й;G@vEx|*"zK6Ne5Eu@X{x7z7 yBuCΖt<$i%j+v&Iҩ-C9S/1x j@2غx&2,r84uWWrh ZDA{[YU'X^!5&M$ X_EL2!Pek+jɼɝN Ϳ1{#.@,N/BD:O,=ŀ2 80.juuB10î@ї?/LqdN:&}Cc;B"q0 >$^Y&mph~a{`e-P>c@! 4nbjra`劷0ijft!*yj ulI cwUnzy5"W1$T7 mqcC6V{P\V\u 埌o촷ܘ߶FG?yX_<555N==ay}(OQZAհt24&Tb|腲Ի}Ur>wK4MuFq}Mb=|ޣ O0}OѲO1a#;VW(Ogh')g.-.RQL?>!ƨVfȻVHC^뷇G/~✼z|LGt3 ~"@ŜimA컚׾MJJv,1XܽDdKl*o\ 3̺'{Bugvj;|k]r-YeebCeSKIwW(9jqG*vjSB}FQZ^tzE3 NQ}\wrnKOԏM=Ue/Å\gY6Nhʑه9d2{GgX Wh_^4 \k}\|E )Zywˏެ lܺ'}d^Yyɧ#\/Xf*BdzpAKѹ7t8L;Oz~*d^4t*Ey21T@ GqO$:xxzʻ Qwh˄[g8Duu")3V:oZhѲQ 3ry5iJk/F[sssreqUp7ӵ\)u'3 ;Uvoc],bёWhƷX*$-'c 7rWrpkus~8=ms5NVecYd]\s 6Hwi.X N+6'.q{hKz%{e~R[H_]x3Y1441zi낷1--N8Kl7ӏW|cQK*e4ԇ|ynBa } "FֳKdkD[3O7%a)zgaVW(CFBAvH  zuׯwti&0 xGZu@@˲vZ(- gc  p O6- CשY^nT|SL4ss#_$Q5Uw{gΊf.a9ަMn[Z"grWA$Hm qҧMUE{/dJU44n~}<{2z㜞٩ϒ'<՘K;yƁ۸Moc\晔tSilllכ?̓)H3]T%[qޭKeRdUy#ea&waZ zϐ-9nat?ܼ׽D;Ms>I8kd8}~qlN'|cmޒ{rCLG+7O=Cl)ABd"6y.1 *YgRNSu =h=X=ܞ2]:ƺNY]_90 )FE{~KRZ.51q]s"8lM(`t Or͵.hx;Y6$ߣR o:i]R 4^IG:,JpuR"iW'{ǙJF٢7!A unxO(:#),6D+*A&,}ph@oO;o/Su[F\G0OOm{~\|}w xx{]}2l2[c]|ܝx#-RfG_bO2f)} hfz*, Y?L;M=͙Pc=euii;a4`6T.([fGԋgFF9{:z&H 8T?1gqziǻU*(_+*^"'&tNKDIIKHЈYмϦ+ ne ? @H/ cd Abnt?8@x2Xo&Ⱦ@ @(_$V ZkGhl+2v.ӜL>Y3vTw5u.IQL16Kw36ndjm``k#W۽[ЦVB+ E! ܡ?lV< CUl=æ Wvd)[udDOG?ÇȤ$%?7PVV{~/Woޛ'Myiyb\]OǞN`W]`@ vVN"i'cӮL -թ;8ZLTL)oc&Y|o~prihA2qm}" _P/ E+6U-K.gPT(U5i_WGr$򋯼4#}V#YKm5AǺƊeFrSxݓrı}tbcT~(>m{:4e7ER5yR תAHC {P@]ܵ/cvm)/˺fn@{T;c ,';ݤ+3c 3/ִMkQ gc{|3e%kz[[MzM}D+H 53lⴟ.0IH r(rebªV& SX~P${^p]j:L5O=}qaq»&_vo}xnq%[u$ڹ=1.$5NM@Q:Je2ߎU/@ Av5@Nd]>_jze5+vKz:66V,a/+R@x6ܴjKͶϖE̖f wyRirq(s=WUXl:J Unߏ$$qؾ{GdǼU1-xq%St@۸W 8{[xsrGm"d4"gXsU]03MNQ0weO}ԝ2P@*H  a>ekQHp'B0@`ha3 &|o]`mH@^ Ԓ7Ҧ0?anqjT}9#U*%ڟt3 ѣL6,ll,LiL, l!,/mBr"dfcQN(HԷBC J$T2-ݼ?ƴr*@&en'K&ozzi?檮(^_^]07SUQ[TVT\]twu_2ϣ/Wc~?/m7ym=^|bXa+oli:p=B?Kq{ j.69o`zv$[ŽɳwGg8b2[#9Sݑ=8Ynٴ m,FAZ3!-  Os ;P&HqB zhmqꠓt 1(!}:w\yZ; Ԛ˔UoL󏒟ͥ"烸@'  e 4P͢ZCwD2U;×Q-טOW- ,SAaø'{/Ռ@~39Q~(}5r'JeW;QzgCA"Ryƛ~{f9P7'UC S˻?tcrM=46$$|vJ`u@"wŐ~UWF=B 1[BCݙ@ѶT ;s5jZm{GVロgM1T2Oz,8pr Du[B՛/MZ>]Rcc*rVp{|ﲥqnT?E2nf5^ #5EZEZǎ O<'ʇ{{yr[VP RXB*Pd/[ zb7znbjJN0v7(m,y>> W t漼+{v&nqd'& {xeXX*BXZOk΃"_-"24n%.Űϱ> *%kaWm@JJouoGn-=[\cWVo~oMP"EU-GmW)"U dI+ {3,Br_TӁU-$m4C-7}Ggql`a<;'Tޡ^`.iZ(]rp 5Ĝj^iģT#wT|*\b C$â#HV3Vt'"i(+3c/!$L%}~H0MBWhrtHՋL`z>M7?eJ{(iPyU?ooH4RzЊw>, "|<͒k?,B^u1w@nb7^s)8{Yw,bmKܺ]6ݭ}˸/G9owyV;X(0t*U\Mu3#7Ǎ|ވw u|CyY 7K\]WJ_YEl~Ϋg cO¦⻔RFrvd|xH4Q/E02.OqJoXJzEֹ6=,[L@Ì/,N}-kߌ̰L ry3L4M9ʾ?Fk')Dd},OU*clA@/AO7e, 5lK=jVzf ݓ\C<=֙e}%0ibB]+5k ?'YoQ23\,R!O_X*4`g)o hd(dW=+kʅ 0 k3X(qeⳬ~/.Yz6u3Bc3˗w8#H2X8JЅ+ΧJ 4H5yHWZ1P{L`[`c؟9_rZ̺וRAƖ>YY)C/';lְP.'w1L5*''$E(%d(iTMs1!]]G~haHZ 4| /Q>~9ɪo"főTTO20f-|fP@f|@*(/{y&ւ͘I(*'4Bw [y7Έ:f} qKV\& i`7J0Gm@GGseKC[Qrr(ߚn{sks97TWu 6O~ 52`a҇Rc23&}.u{Dc+B^㾞'oe ~,LaXM:L|z~y{ẉ?y;n|)#|}mU~Ձ9Ijg6F@/\}=>[J92'Pn}Yމ-Yj#Fr5779И6^\P[|FR}wra"=f^-G:\ ˛B'=24_sZ†R ?! OU&;bņcܔ[VӼj=R--"-|-j Ezf˵u.H;/ogS/{)m.hdTm[)ungi\5 pef0.$7Xg_W40y,HP#gbY (G.wȄ8pE ^pL+ k`Z4 -ES 4ب~v'+|i|/l_b_*Pz>\&J=R1}a,BJVN>]a.& x>&"A/pAlYc ͳ(L8 PsЪ`DzpkӒ@tz6.oIӂCIFڮ'v&kAJ:jU:3g%iֈ&{Y_JyGPsI!SޤZd `|^7f ,fG+NAV.~z{&;dӳKݟL;Mڿ Ns̭9:ǁ22N(9 Mle5s{9l\Qf(`?T)Vi+ō޲>Crh˘D17*Y{:k#}#KT^gZ#c]#s Y}7fAq͚coEڄk>$Xi&hw}ڧ|y$O:\LCI_g Cj >4_#@ zȪ'W?˲V,Z0Iqc]t_lDc gr#U -դwCEݧf&׵ /Ҥ-l>fSocK>n[ 3?kj QU3~&\Sb#j C*<@?2O&&Ԥyns~yiedoZ6?y~"m.Zwʹ6L}utKZ7lձt^44۸ExQwrq0Ul/~%/hp<҂N[ c'ZaZ\zĎG_$n ǔ^*_%^^ Q% Ӛ7kd돲!\U}0P||[  bȞZf6qc{*lN㟱(05nXl̋$Y;+?5gڬ&a^Gc\:=q0S0ˡ4Z!v:Tw'nv^y1@F#(w=[]aiG8fҮ߇\m:9:wyBpzs꺉izdS_{^ .#:AcLA8>ݱjE_ƐOfcF29|'!w,O f{V[Tv lpBo]Dm}n{Sm[!&%/WSIP^~9=ռZӦnvOʢӶqU5#~bv>ު_ ޕUO5@t7LW/+-OH8Pܞ$$n~QV昮dƦikƥ_}*n{YF?vdIbߵ퉛^/SyΥnIYQʅ_+DZv >M||if=j۬%1 J2%CLLSB>$U'L=əliPN> @'Iw/rhgTpgb1D{at,H4`nYc?:B3T=X5oR"RC y8`QʮDmxGK~oMs4\Ւ՚e; 6ru1@3FDUslJMZ*GpNls֭K'L9j-ʼnU3n?]"ܹz5;%x6ņcF>ك4mY^z) 3TOlMrw-Td wձwXA9g2 ,+h]=dHi3%Oiڝ 9{2o}ˍmßգjeg_g8I?p_moLjORRye?)Xo湳 埌o4\_n܍v\Qn|(^4?~B}Ot&sWz`O@AfܯMճ_%j7gL@Q( 1 UIrOm9}"dcOZf͎۾}K"I^ń| K}>1P2aMŽ *TʴVE-Q"+e 616pOJv$f)%D@([GTrVzn2upGk@i`OOgÐTKl#e|v-|YW<]\=YcTK:XWg7}ys^絰8!v~Tlo4j klr Ѱ/ob`Q=(K$F9n/1 p655555F(#@WGB<DsUbtj@v!6\@CK셺Uk>&9:uݹ7[Uv=3 Z.=)7|(KCn(wܩUPt~8f`~PDZMbd ,,DGa\waX,x:4"m/_@@sE@"}=hQ 6Djc]uNI1ªF ~os=T*hܡn똊ׯ\;d _OOU⭈+e+ ՙ(dw ck??;=ށZabT] 0#W8z{ޯ"$n,sͶvA7 >‚/aMuhip &ݧPN^ Qkm5O%LUXpkz-1կ1̮b$mπW@[~E'݂ ((  (tH#]Cw900ד뾯5k5sk|Yr0@%|7+Рv 9cuONƈNZ/BPl5h/tt8Dg @8~~:^1};K+c;5zoϚɠ;w\=E@->Z<ռ {)wטvntKT~ #SXαOCˏm_D@䂱{.h%tc޽OC1?2tm2L# +oev^;颢 Ӥu|1ynp3-u?<M) yTJuAcY}NBILUoC-?.o|So&gQ5hV7qFnzr(Mio8W Qؗ HO;qr\ƈqnWgd ,F'W$>5_,H:Ie?&)&f;31a41dǔY[{LrCY{/km8@H@b\Uy5( O{;%}i gҜf>dm'Q'2wi m}sq^^aFYZ F롺[Qbe/L)9n=y4d.T&CTm2W'x`XB'w7Fg%eW9Cכ_%`WHzRޚ|LET/齒烏F HNՐكGk]R m_QXW4S]J<]GEM+aT[>NPBG bb}GF՚tݍM?ݐ n5ezqǾ/՚n)|M3ȈO*zq~Xn׫ݟOB8 S{|ks)>}յ tm[2STR[L_g9+V*eD.y#~[ʑH-\H;wG?K}2.}W~ZʼnltمBs/OSm\lpT:V :L][rn2c꒱2G}}:YSIo խPhz22GNGR]P"iN̫k_f\b2J!t Nk]"E݈Ƃ9A֏[ m'=/!̗#Oǘ''AfiWO^ߎޤeO)juvc"b3K?j4jL1B`yW߼6ڰX4cqmxkcbr%1EokЃnoykm2pos5 qy Xe-Ctmbd{5PC]su\MDʖ4Zғt77MgB<@GO?Ԫ'a<01?0E#{7kCBٍ): nP+%h^2g{$\9O' 4,10Ca2sp73Ooyx%5NBL-+l$bgqladY@z9,<91jк_]1R#&{{JcB\b|C,|^Sq,B) ^F Է:_e =Ix`@cKlK< BSB՗_Jk t*Tz2f$K%Y#tF`Qm~V\u񇞖3#4kwHXh3ZgS<ٽ Uy-.,{cPE笆teAwG蚗qC4I@*4tfE aQ,Mt嵒y%>U~ofa v4u*Tg7x O+< .404kyh!B~4Oim}R}]wl~DO@— W&_X oBi6&pd 1na_vX}[_\Z!}D|MRjW}-*QJӚK0U`jV9,W:w onnp9]m}>2D׺>eRw>mw%vV~OsH=Bղ~7gN.E>YpjlmeI燤JҼɺ+W~jɲEEjct-|m]޹'fD ǡa.j)- KCeɧ|L8U¤>Q1yp3-MH$_kn $po`U8 9jJT3kR2/ adۻZ t!P z%Y|nВtz!u7ӝ Éwg WY0^DZFÑ 򾼍4NvF=YFB<,c&2{U35~;]:׀r V"cUB3qʌQ-bnc(-UAŲ <h`B?7_i^ymY,aV6W c ,T^~ܲi}-}^3GvuIsM-;8~Zi,#GǤv GטZlȅα]b}c_#हgˏw<ӽ_6+TStQQjDEt &_z7Y?0Ku7v  '^bpWDd.'#oiw@IqTgI&y| ݾsHtyUӰy%r8ytvo|e.Hq.i8+AcNT ƉG_3"N)2k|D}~|z0|-bl'(cNebukzq~|Eʼnra&333bsbs¯xW8H@ sIqXl!Zu'sjzQ&W n(n#sk`3ě&$ :p͗dw:hihChMheWttEYXyo~:ٴlx]gڸR#sͫۻ( 4c+# 3p=B1 Ϋ[<f+A1~775noffj;gݻ_|W(E>Gd%dʞjTH1Vƅ2dw76쒫?Wz!xim2*Pñ0Dɶ27}1}˜bG8s`bcOhZ?|'x8D ͝iIyA p:udt7=\SY: {h/2YgY'ԆR  }z(ە 4uӯ SpM$Vp7N=υ2-cQ5<^t_qp9ωܲ9ٽSOV%j;Dž\QL }9£ g_ ?k{T2w?e2lV1q9^Ї&);f>̭ yeym%F()iNdIzHY>]4 V)*%x brVyGsMQj sKz4k2-kþd4mxLL)HO<՘*0@`.nSX/CW*P!2VAqy`J)1aQΆoK?"?%69bi tz  w(IŮ )uS4n߫W6`>EBocJ_K 9m?~C_Oޞݹ;MEu{do5uj'-p $;=آ\ffxPkvSAp"@G"kt'cws]Vpw C'~ڭkʼn#JUSg]RJWKz$Fb GрpD( |C ۈ[zHy`s˰/WO x/ \4B*d\|O?zv~TjK0Mԗu/{SN3G碾v_6vMRANq/pBؿPdaǴkO&&8a5_Z ՙն՜ՠf}HV%{=:OUyAAͺ}k j!BCAæWܤO̪So鵙Egt?}ҋ,C~Gicl0./n߈ͨ 7 Ο'73w7=k ^6´>{Щyf 90ԘJb~0,`k fE"ZS*wB?!KФ@bBA\^pb5OH3чNn98-8S:MiVQ?u2U3r^ 9#R[n0Ns6@ ݛ$Rnq킥NC/fE+93 3ϲ'ˇ4a$<eu)&Z;ǸƸzĺx9:{[U47EUZڥYFʇ <0o V2jRfwR}Vm<^&CTbH_M@QxZ|״OY\dWc& Їz PJ h 4[n!?z6&"" Dr@0BJh_<@gwkl5GTZ+kB"rEmOٛuk'iu'i$j/$l&D4:;zoC"]G 52/_-E%CUG+E]x_a#slWbT:jA{8b}t;#g{ y?NJ12Y8(G{Wob@dP`@K'S>M-1eHԷdJ$F7 czcFB{7p_d'u~f?<Rη\,)k'ApL3Ƹ7+tI_W.[8Dz{B16jb3~,QΝ~xUh(>h؛4w9#޿%~k&4>HՂlM1BˇNku}]zޛ5=H,xHs@ාWWKMfI!gNԠ2'WU`x֦B²{AD'&-d $zOÆh-rFn%e݃*9^%E wOIrWh-C26hfi7>j]˟eNzj7$dz?gcefZzT1~ s 'o:$JD@MnS>1Gt 6=6%{L{E`gf X;sݢ]x1 nɏ#88Er3ޥv2'؍g8m-sіt̾yEH.OC/C2u-?(-~:gpw\6[xE#<{0A`RF;ѥgMII,$y:eT/SO966ozzˣt^8X Y:#s;O\⬁|h?nSP( .v]p*9hF4(RnW8EKTa{5Ω4(,RMSB]HV𯵲o_#]b(]+D(@Clsq7lhw{Zq @xLH}J)֬/0aO=B{F9A01|1kzwizi쳪i֬Iq:$eט+<}M .eZ.;)4XH,]Bنd-Q:h`?ci:'oYGI=˘8Jcdy9z)cO%WM1 .+Zz#cZh4\72r8o;n?ƭTT'`jn2W*~8"( 8y5M0Gw#yų<.i _"M {\1cX^ngOfm+ Ne{+6h d|j[>s$6%l+l]/}Nh쫃r&sq#5U]ӟzQDU˪/˵<<\ʍ9[Ga)DD;?ﷴ+^6kfٵ7+L[&8[a5܁T;x"Wt6+zƋPV>u׽*:/Ym?~;tua5w1 MR`L;C U|r1 pH;whxv_Ɋv㤠g{c(\#a aƊ`cd'ϕ~b nI9euY6'߿`?>mVq,)e[5<$ߵ {Y"ib}>"[U=Ĕ8rSmrmƋN.jG֋Xb(@Cj/ ̓ËwpO+F׎u 2HMa9d}yxQܷ[u/O'U{2Lz6 ׂR8>͜k ͓<.~3a$*eGq̽h_M|Wt넒FOmEkڂ~mw/i7yzU`¿arc1t9E 딵{'xp 50~k  x] ?|J;lqvf5H{Q2SpHܯ0Ze,4A%Y e>ecs9n068ٳ#]÷'*N.j ɟj,n;bF)^HNYe ?1;0w۶[sӨz>@ʹuKb|riQҏxpi',ccaӜ2㿺 mOhx5]Nc̢1)< #RQ.m,~b~ d  kFӯkG?s[irW]hZ#0L&qٜ.Faa2@Le,SA`ȟpoW;=TZl$($̷ ,p)oX܇9˴uï[{8 LTd9 ZGGR޵*d,ʃ-cC~g8]<zujD& XIvɼ9*^y9)5/G#8A h ]hoX?<&kySd'[Isg|E~JG[6o}1 _%ld_Pݦʱ. rt6MWFޝ6&l kJMc/OƛvEX4ՇTG"Z܃͓5W\{]KأǰQ7U 2b<0K~י"p⾳V퉼y>Ou2#*1ֳ1u5O8oKUAo>+l?ɖ=,x;#: ߒ.)귫8q!#G :gyЋ=(EECz !c/~UMQP?,)Y~٨1/CE#Km 2k@( B{kWg&YǞ/ s rBLt}j+v5i&ThֲgRf\SWlu LJo 6s0t-PMFŮu:{=<"]}X-iny53\уgm`& j?:@i%{)mVK:DKUO|( H Gp'ɦ nI,5^ {a"<F6/HcD@J*j 7?g~fOp?j4%? OIqŋ3$N޻sF; P<ۇė)ﳸ0˵XjKg}Ŋh?81q{DV`$JG'86ˠ M_ցücˏ -7W h mxE M ZbmO3Ͽۻ=ws4EE >j)̸4 4@ӻEyf\VP;J`}Tr[;Q[jtQ'WL wqIl\zFis{f.zP*{WA'zIc3cE<35kнXW1CcI,S# &ߡ:$V;Ǘev|/tlciV1>N|=q^0eٰ-Cg_M! d;M%sOr],ӂF4Fӽǜ ƿ7O|+,5;<>1̒ޣ9珉VۗCŶ6T' E:H4JIk=Nxksaqu{`n۔prQmtVo>N;,Bc?Ns>ɟ!=!Ya޵ʳX8 g Wr-t1N޻"lhٴHj8eQw#剱V$ƴFvó-|Î"f |v|(? .+ Ԣ$4[] Ca~(n_hsdhckLbd<d8afY%f;t7qFtLV癭Qn!FÕE -=####C]5%Mk{Ƨx_H=ݯXoee?iIcÌ/{% v$5* ,&S9~pByH}KqE]'Cck5YI ap\5<䐶fqyS"&s:ON;9h~}kF2{L(Y04 \w+N`ztNx@6ph6;;یSݟyzEZ#8!bS_#Ь?SrfV$+TW/VwfB*L#_@!y-Ck/v̎// ҷ-6B\ =T( FX#n;'97r "}Pl A[f(-7ѣrx²,gY~HoP>_/n.ez"Q? |:~AБ^hLB2JY29i0iٛ|L*A Lg\lʜᎠkM$rwy~ 7ܘZ}A %V:!xz}'ҞS֌:t 6XerS>**HhWИq):]2v'Z<]'r1 듊T\o>/月AyuiQnڐfD#ѥѮdVjR0W8'9~:r"nb4,(:kYlUa]gE>&҂cʒ/ cɢU34+;+'SW^Iub (kRc ƺAnNϖuozf{tqB6>Xun~㌲oExԤ_uhiLarN\Ed_ -cdSWu6 s->ϕ)Pf JyҎw@zz%* S9oWPE%O*+$k,˽22@}OnE=J{WR$]ӡG2ce㫊>V*BL|"}=.SeDHE3Px/B{^v-nNmn&I:^QiJU-'w0˛ԳGc,\,K!;g~DsQ+Ă,t&GC=b4f c 翶 ͰL?^˲1=/T,Ru϶ ΊSiLk?:]KhoV*^[!TۤԐmfѩѩjjunJ// :f.tH]ɞ}l-˫,藛Y`j@CL70f @Oa{DTRz3:[^YEp`Ey|Oeq5m}[`RR"nn^ݬi; E4ޯMֻGFzKBuЏ fYbUo_rÅd{s <RC1&KaA&'PCt ;0P%kG)sC%}E5mAwV>?n>9 X¡S\PtrX1cmG) s`p6aoK;8_:\" V˾iNVrNW:QϽ<͝di}>jU'[Hsfq?<֍Iɵ,Q+gVE=`r{'P'P%UW![S&WU"W^,W\,_,]Ze\m=`23'_wA"$y/e(Bzz{ʼz48uMH@9Pd$6F\!C5q\;b(,\)݉g!@?ue L> J((7swM45Vp7u/ѓ0ᖼr·9enMW*|N{Q eWOZm\yתRr&\{@@Ĕ1hU @68I|N"hEI1)ea([9WwUd&T8V7U%GXHHP~coGm&^5Y5ȹ/tY+/=WXRH5 o65x&@:`'zkh+e]I8V<{ZAci/3 uQ(F+f%]P.TjbV-5'>%^nVj:{-:]6A\xA>,u]~Y+z]Lv87sXpi.D9bc>&?Pn]a6t+2#aviozvc;Sq1G~"_R$RS2i}XRgߡS;<1 2R1]5.}@+mCBU c| #J<%<|ѧ2h_'[y"Vz!Yp%51 Ift2]gs+%"ǹpWE=ƫ!r/\3@v9ֈ69A/q(͛J7pÍy5OR]Ẽՙ9sdF xqn/3]?Aj{fi_TqD{"Z:5-=A]÷>BFluNVh>X}IY+kk 1XhlN'MF&!pn0?/W]9jWq$R E avT7v gw7E+=Yo}KUK@4:$$8;h =΁Ŵ~T}6Os]Ec9F3|AWS1|nd luʋk6EIa38H#2W wza0[ګ8&MVUzopebZ41sP}ʝ/0SQ0f\cKU ϼ]soVQ5ب,".|zل.fS"uӘpHK~swfy\ S,??~ڋE?]@=BR@gx \x.B!AƙeNіKy9G-c2"̹'~B:ޟd^Չw.,͓ G"r_;ԛkK(y?Zr $i[yP=P&Z!mvGGZ7s,U2}Z7s@•;.xN)+]s%E/WbWZR#eϚp ׸]WK0)86 ԠIhי_;E0 %tOt >:؟Č^ `*L? @aO;9sM+ld\vA_ML=h %fL?a;)]T?Ӭ*$c$q7e%sZ1 chq/;Y:L[vEMsD<{;sXoeUsH@;ۖnZ8?l.8@q Pw;P,oN]5\!]PXh-5_\{3[~GFr bDa^'!WNwJ|pwoMG(((-)ft膱ȱ8}_uk=ٞ-j#Ý'ιr2I\M3򭧽=m4m(W_YoʲFϭҡ6OzvX1殀'%ky^wuʓFSHeswT2Ķ?1-p}`Kڙ{7AG*tβ̝N_U6[!be`5_7?OkkkP wIJV>=CҧA%!ŷc]ML0Z2]ԮJ2,[؛i0k\\*pEiqX,gVG{ GG$ǰ'> 9%>,?汌4a r~v|. ʼn6꓉<8s+&43 2wKgyB~8t`ֽ]$ 1nYGs8Cؽjڽ'&$NJWR[oyd``x ~6)͚yj>mcQbk & <[f<@'.c?-L Wv}e9{JR%P%\X-T#RX)Y*-:SRuHKs"tˎ^ =zQ&8ͦ9}ML3ny`*۪R;zi%Y6yL9-vJ7],~va`8P:is֠jGjy W) HqƿRRv,?l{йw~΃).CjbZ>>*unx82ݫxt'[,/>`U|k5C???]#590 i/0LVi(]7gF1w'gQZr$}U>vzohAoF,|q4TO&V^N6:2|pM5-C-3kK1^Z]wݵ<СKԂOL]9:(fUB{VoܻS{{Pf DX`ѨC L*բ3k1v^/S6fMr.Hl}։ Uq~)ڹJQe_yP٘1=`o.j@ # wo6pGA9â*+,.֙#S(19MJ*&h Xx]m" ݢ¬Jj\Bc }Ғ~4^PxEQPbVPɐdnbZFB~B~|~ܐ~~FƞRLNB-1E#rޝObņaRߗکCV:jk25ʪJG(' {yƚs]sG.l'?6$ dՒ3Usg 7t|,M(_oBQc5yR8<c@҅ZTn[T`V_:ʡ:VB22ym3fB/>uIy&b#M87Ǫǘgc|Nm;W6Q mRMvu>)UjU5y=23!ƞaW1d@=[޶Ʌ@<鿉ܼ5R2] >r J?3e1*XfrhѿG?Y Ka/DfS^Nr~HeGKLJ1j:gd.Y D.YG!gtneFގzJh\TϘC^BnB^B^^DoӸ9/{p 2.>@~O:_OT<*Ԭ6b_yMP:VJ ŸTxDřY;f6HwFڌ̺;=..=W:&VO lLTe KCxVg(fdy2yodUyt/|Rܶ\7Jhf>ms4*2&`3K;SCmCIW5ydYo ~TI7*5g4/{Ku*k[VtVqvECͨ㖛zl2̠;N"M>9_ԷǼ׼V ,NVʔF.KWrURubSՖru0 sʹH,o& BO#5Qq*$% VZ]wݵ<;ܞ^uc$^1=uPzgcA9 1DNIȜ`ѻ<9Ͷ5=oa i jr#:{ο^gj.8LF_(KUȹ3<1MAP Aպ߆\d=~_[~fI/fbBNLKE`VmSl4M[Xv<%ò\^yo!a}XN'ۃOl<{2x}RIy)3>A|d`qjb;q>"nc"8_M=Ńn@P$i{fHreAtN%K-{Õ rdbċ`Yqoc43b i,z9NH.vo60k2hqP  w^|9N#taEsaq@K%ky^wuSQh> dȽZjanq:yie}ԫrϽ[ڧ7nx]E]f>Ng4xɃ >3*U:6Huv.#@- P̺h*jTRː12l!H>n-jsTͥc KEWm<߃5 .R yk8Ӫ)iZcIz92S5I05diL?Hߧ^!g;eY8u*oȈfL<۟p/$jGd!{'>. o T(ٜz_]U\ x7"LcAf^>W(![O[ʸc;&y<˵_V{g/S5ͿM1nޥߡؿ:3ns1.oee2w⡺-&uSag~f&~̉qPk`^yuE@!1I?g`[Ǜ`soF?z/!Cowh~Tӥ5ho6 TF!b6#փ".eqHxF/i駇 .,qf<%=WFC;2q/}GagpI⢌p!րR p ?` D1fgo+{a'[Hs S(CY6 j{QO("[#;xjl rf6LiZ|BF[CKgߎ0hg*v\ u1{[Qu|TOj|UYy ,SDKJE,Q1ϸui~z!\7Ǟ^- [%),怵0>Xfffqjrs,`m.{ykc˪tsF a&ptnǎ9=! hyی)1!:ȯn Tg{E!;/H=Δ.v\Zߛ# cTm'9[O}6鬾[~/2cVkUdWqCi!χ4c}O-ӱ p͕DF #`W?1ub"etUU{ky^wuSF@~\4Wl*kE4^sE]ʃ;͇$=G9R;--B5Ry:x+43R,œ|K<]\v{75TI4*q0l]Q>{4^/@O0npe*.c}QVIjG;alϣG 'tT < CZ 99JM4dx(P?+;›'$V8sZCi==?_c&H7V)fT铊fA&w دnH!~5j6&y:&-imI4ON>Gi%3iA~Jڥc_(4ԟd%Ui[x6KQ?}j裆'ѲR<ROZoVnzޥtjL4n1XCtBR6B`K M* tsq4r1u7(bٱ~rjGΓp}#pfnl+>ЯN|Gݹxy2GF+:|u3D )d8GH)gATl/j `8U#ӣa-Rhw]r1>֋ 2w8Z-?_2P-Zo2n* ԋBR,BL]]= *ՆR!)ձfv!AEr9,NI'[W GvXNo"4X Pq֮|ꯒ^bp WkO 0ۥ꟫"}~  Ѝ9V1z B[`tJRΆBޒlPVV2gCgk #?vpܘZ&6Tۗ1ڍ9NQDEn#,Y\G6C4w"A.MPsi_XxYi4sI5~_l_487[a1FG&G{X;FAv37˾YcrLvwdwFt|քZE2t],D"u`^\s:8[~f6 y%:G :ű:qpZy9"Uh䇳tPy!u2b"l@mOy hUN(psҧZ h0-Y fotH/J[΢B7=\Xbj8N;R>1 40qW~vz ڭ YU}GfhJ^-<_>][yBAɠ;l2l:QmOʶk θI}Ɨ<<3 Vl8mgƍ܍}o/b=r*!WGܬF>hS t''R~q:^f T-~mU뗻a;]D}K\b=k?Ǝ},,No]x5`:] }P94~S[#c]wXj哢 y&{W튇o:֬DX$/3 =xw)v(cZV9WUCxk(2w_ů&d%&&ң M$aƀ7X+ KWx#T Y*fmO]]z8V-:٠djـlp6P?z/>]@|{{.!qM|LvâyF'~'<' ' ԧS#WB2L)õ"yCie^@_A e 4~ޓU.a^&8pt킢|GdMp~YwHn+rJ_'7ծDc/VX9 rֹQ zQ+z2^2|"y!eXoG{OOIghV8S=Nv0gSK%kZa} l~e)Dszٟ#5 Kqp?Ͽ@/v4y$=#i{G8HR!p*!eⶁ5VYO #F ^AYz\KulucKxrj%Rc3uCc=B[*6[GhB}8Ů?$:8_'yE-TNe%en='2u.(wh 1Uz1-6rm=[_v'R!ΥCl/HEXzُVanƃ(;/gEAC[8ByC+CKb 9[&Lh~A/g PVLmg5L^淢sO ((8&U% W1 ̐ŭ|Y@@@n~>w`..4 uhv:Yȹ}o Ƿ^&#a/Wj M+B*\,4ے{ ks cCl}6ZN^ Ad{CdmMCB|]Kܽ7kM ts4R:Tӗ2RwG4c e㊿$ K=zV)^4Q/gn)/.IMkKO<1R/Ņ'_nBǫ DḶ蠯hv+vMxwU5$+1Zo6Ohfk5B8H:}O9qC3y_5X)R.'P Y6urj h Z Y,:kwcMi+3g{eq|sKҬY⟘^}>c{R(n[~G>wE}C"-cÝ-Q}Pe + YdyӶOH8 |sQ+bEF0&d~!Ag sCvEvFvt/>~B0ߣɹxXr`= LBsPR_W׆mh.wi#R#U nQAƹ% #ޝ#?އcy={{g{{V+pqˡK5M|.toB9Q;==X>W\|sRR`wwp$BV&nmz,2@q_o`f tkIP[QkYƙɑ=-W.%3Tit'HcK8GdywcRj|M:y.YUQkdT 9 Ѣ-0 eԃd[7~srrq(\:+d1 Pm~>9QƦH"8w[9WM&"z^ܘonN~ᨻ-"h1eؚtJ_CSHcդ`º뱣UiѷyuQ^LmCM3 %^xW(" br:qp'O7w }nM[w`姄M]fzAdzEk(c[^ }4l՛NʥƖ>Nph~T OƗIՓYKz%Sٷ~YTsq z<$ nǐw*J Ƕߢ4a'&f(֔C0FRoOD`zKkAW{|QJ&ՂL,>\뮻P7Töv-Dhܐi+ mpRƉp4H@.AР8#15Js]Я`siעg⛔_MRAߊDV6&# .[~7i֍%[yghB~D TY 7 vIzw5L ⏬1eXjq%4=L핗AL }$^@NDCDul ԰+^XJ 3s$! N9G&.{o7e`P Rӻ|j d[|hf׏C(&E^=mgIoe>gPX@]t$808圬ddjgvoE2ymGe+ra{m Jz7(7OICz>K&!>&mY߶<)x, blQYr'oKݧ%K_U#Rd@NMJvwE1#{H;L_n|'mRvvI~ cX*1? mu.:9@djp銪sfRli>l3]ϔ?Ag&R= ,πN81l*%٭K$ ìa_lZ~\4b&?bXp\@OLQۭg OG%}ʝ3d/}kWotQ3Mn[>'C`h5iŚ$=4- ?|1؟;/VqPW NFf֮nڟ_f@MhP$G|Z7僲>D#\]An"HaE~LEr`V_6-%l3T IΪQuFnBG S8y ӵG(>4S#G1Vث@ϗwѝ?J BzhGVdC lR0#nڌ`:}r}wcNlvJ¿kmzP Uh~qSqē{@{"F L+Z]wݵ<$R!M{A]6W_`^cSGxqD[1g K+7V봮EY巬%g&Ӭj.엡aa-2^Jw9fm]8C)i.Vf֖޷7qAqJ]WRLO$+*ƸAy{xiybvr}ᾔ.S '̗:((g~~9pkj1qZɏF‘zuQ^˶)8e0wm fMyp>}5c e\j% Jhti*\+dkkof`$ih1z֫i!JݒLXTB˚.0g[Cس{ڶ)z7=\lZzUH<.vVm0q-e0eRnakVR,:7B>p&rs?pfa}諾,o3iPU-4Q~atǡco|f*>ΪYl2gkeE0k^seöL-NJ $:^%?yp vIz|N|~Fp~LpvHxwtxr>mG`? 1]2r 0iM,I, s2HWOLԎ^ ?7ڲӭOORnnsJ61X Ns}scT GtfdGz~ ay (U:b f(Y/D MVBDD{0CK-Tq̞tSk޷~hPX͒͗̕(kŧ؃;-g# -_NBBlU^z8_%?it GԨD*ͤ`si4F(Α6~ m08Y#Al1TE]콯l-B& ;y2 Ѧ9nҗ7O{زJT܂=Ty?ݸrA& p tU+ Kr[cF *V{Hɠs3to+I]8*%E`[ip48O:B˵S*l{N7ObHxb`E\h`ufb]ï2ʜIb.{ %TWZ $y35ct2MZǶwv)R^͂j^4?8 f׈ć$[GKKB8S̾v* ~ 2$J\lAU4S(H.&- ;^l8j&߆*[3+86g2cꇩ"8jT,~ŃWx&r޵N+sR]gwYlu];&lݨq ( nҴ-oWПaʟsR]Jߎ;̌BUOiX=D,I-^/򭵝gGQ9X ##/$BCXc,J'1nN$}dYAO'4Ǔ+${3;*?tү)ZQqB\%zwMc|ĽgM7I9I~'L%R>A?!a7!042'}! .[ )vrQ߇P}.KU7*m}wM9<7>`*VG̜a8Z#3;e+DOY럽U{ų@_T,%ݿWJJ?$ut :( mPbncgqp;^~^uqzv8-\46~ɫ"Tz#Ep  ˻RpMʾNL4&u\k}>sKqyD%]J͏x}9}Xw3V+0[tXg =S_eְ|[Ԝ ZD6 DnE=\:!MT=ܡ?Z [~н-H ĺ)rs^MĪbMsd:ߗw^]wZI=2'blq WYPYͰo־|J BN|q`p5B&Ls/a?c Я Z`Bt5b;mzV^yX,A CXӈ48$gHBT 4|ZO|~H4ǔVj:uYRi W`HbɸϸoP᧲@ ppx8]<>6 `@} M[=ld :4]/]}:)Vj}z`qɹ/Z>9DW=mN5k8(r(YBI{1ib.RZ B H Wv WFA1'{j9q@L4Ff?}uf9(c P#jpx8*m¨j&d~>y' F-tLִ 7SO* !y~wk!a7V1CONH:ο%B0F|Z ( 6D}a[wPf!2F\n!`7ć#ckC!-Sy!Ve}V3wX@Hз3%^2ozoNp{pppGtDZ]wݵ<)@ۏO):LJ4 8kLSpBaM[ȾFȷF0F VNDi2C{; >_Mj"b uR`gXZܩSʭS cz5Ƽs8{&`\]bE&mAnPQAD蟌^ e${6o]+Gԭ=,VqCڅMr%*CS ԭ_53_oZ_u}YZ. Y烯.m<<ظ54[hoiofuf}6*}Y?KF⭑^~q8؋1{;%}9Gꄠ, ?~@1406@ LuDj5v 5)eozY$bUVkySYdT Zv{7kʼnr6F &TurQF(n5GYd)h5{=U8XzP{grUy4Q 4Hv!@Oc+1s#ẃ`MPuj;2eXډUmuHك'ȽV#(fӟMLK~ϧ2ޚ.Z g,:T>I\uB5 i}[)\~?ym[K[3{t$i?7C/$."̸0R#A9=m~YƧNdhV ;__x_GSjD/VhGH.v#H6W_|M8S@jϘZ&Ǫ"=pV#aB9zV 6 Bv+7&(7ϼن5 |)/(S"_[Udzu%QH1J+(vN䆺mRRIs߸I"{-뮻ZIy*,þ2̢RG*,2^I `,_lUY/W?twezkjq{HhwPySoMqWe\,AgN}5+lFݐ7A_2s6 ':ͅ3{X+Ɏdh&$ćT;_Ǵ]mcUQtrL40 O]zܠاxU]+jÙ(BmGf[{,F @{ gMQ8#mJďI7KQXQS P  8h3]?@)_pwӔ݊ǶMQF W >Fb0˜iriU jc+>f;vv=YFYJpzqAeMcUgM ݫB86܇ i;3LO],}umqطvr32 'kaQ.lX<}=H2|qVg:i1 :dմR|#Efз #r5ߌ&aS*V>y)W|`A'.9"uQJ:st?6Lc^fͣ<]O(a%o^`zb 5Ľ3Cq!FiB h${}\26I?-F'9gMyL3)cre9j141ɍe|܅EF阺1\d刭gvx4LHHnܼp-뮻ZIy V_Fbn-vr/T&?iX\ZYܠۡ{4u+\cj [LNx Bc $fNnaϹY.(JEX1(vm~!Nl~=p$"i>aqM-跳Js؋\8_K7tw;}OWs!u7cZ='V$z ³ ~q킬~Wuݔ,Uu7IvWI71w g sަ=M6df1y' 3uQ]e)fn:;7=~N|y\wZn64㈨BC9&,)v+j΁I%Hw,)Vu<bXۨ:HuƟ{Ql2}̣EZUV߉mfuk3ɏ\~"8WqjG|{lsjy-f5fAotYM:ȷgNq =G^/O;W 塥݆+3E 0*[/xlJ!JMWe }o=oz[:#u.E[@a>U,Kcs%Zޅ?טyʻ$XeX'`W|!}H{E<c+..U_f54zsbmzf)Ѽ?+Ü ìѳ#rM l|@IǢX2$ qZKVyg+tDKMP5#\!j%_{< ecWo{X$,S¨u!_zVI,k,Ut4<:. yQZ4t +'Bv yY.Vg o:?6-)?^e2RjAo]5k&N̉>m^4ƗOp׳ejӾ{;I?Xh"\UX'_-Ub3G}wg1 fJ9oWzbYS8H뷮z|ͥ8s'&fC)<'X'od*_N(:-c)ߜSJ)(٦k$\:Š4Re{~ rSO0ty1M.U rG `VjV|J9O!F(Z6_͗mg]Ȗ_ 7_ 0M'##~i~'{cu}S{(<ŞѬh"CZCl@oi/uX*@u뮻ZIy_z=>ULq5Kq4[-[4G1#K.lu4 ldb[5~,n_ *QjtT@l~uo熍Þ?\QTU<̭뗨 W(W8n$cn6,3/ :l,R[Oԟ 7 ݜ3sy:lT"{̪TjW(w\.I+(.G=2Y$A&"$jݲ3&Yc`^km[~}M.>%<[?hÒ"i򹩧v: y99 C  X!:ڋ#o4ԧ^#T\}"ezBIt7Ob 1n;WZ&\e]GxV;@?h(`ԯ·777!K'%N[{yJL@+[K2DagK*9p\:`ag4UXҰC{(ʁL ٠6KAO9' kc 4-@gI hxExOH(|ã\*jX?KB8T0t<Mul6i;㰛5̰>%WlgmWi;n{jszcM0~_3 0<TZLWV{9& ejTib i})9QޡPAyUK5-Ud Y7柠fNӟO *}5cz wiP l 5MP_ZP tssz;5';{+du\8@(\=[I-0.&V#g|߄$`dWHgO'K-so ݾCiBYoFJlp\]0qYW H`$+ƻ)VO? v}\$*hŨfDx1 , n$JmGOf'ZivzjrdOw'YMiȐGۅw{Iгd# cW4]V֋ ޶knN(Goyin FX\ԀFiHw,I.m0p<\  .orGȚ?Lȟ tᷭJաdR`.zl{eD̞P5-" 4jd/C+V-1` 8Mp}X5%R.UVI9yT}Yn81 @}0X tuAmb~up|b됣#wnTXy?dp>d`F9Arͩk,`[O.b9eq شe-Wڑe ph'Ձ$Bx@cWa]vS\_ tT3+٪fٽ)c?cFo` T{%2R,5󱫑z"k<.[h=xEar{n~]ܘzewx+f L!1e z:#ۿ(Q?3M=ox}{pp1.pYM9;:+ws'w>^ޕ.ϱFCf[+1ȴ4VMpT &,pR6*mBsK_wwZf*N0 '*s@X| A%a9A%~$h s5}A;2dNTSao&|,`uKo)ovhqy!r5*;쫽ϖǩċ{woz$ /0y2;7ZvB~˔7R NK?r?n7=}BSI>1 Z?/Θհ(hŷ|~oz( "IYE$h>OS nP[2s72X_46u4P{i'i]/E1(8.(8ϨNr{3kmnVf_e|Vt^DahYhil^JZbϼIٜa,bzrȸP\::d!ibm(+Dl>^5o1(-JyoFvb@2Ԓ(YkkЧ֯zeάnv b ͼm▴j:2 VwMvM*ӨocXZy4O'qoژJBLؐaC*2[FDN%1{`iy=^+1Rmt/¢`@[/}视/"ߚK<" +_f˂m -H*_Bv*r?TodhV'UV:Dm+<0 M^'oXj'R|i X-F:KrC[itMJYP_뮻P2|JsE_>;Xwo`ׅï^XL҇#W׷Hvnڣ0qȘg숗")PP 1 ?EAǞL|ݨ܎DYGtV%g_9$DZ|HVnS^"ۓ+YZ#k]Eppl^S헙ӍSLy/ҙK$͵֢hB3@ ?} w 6ץ:TQZ.,#ҍk-b3!^C6WbNeײmp Y4S8&YϤNџ'gRÓ. 4O?cg5e+_[zKBZ G2G9r{ ,3_lF5*$߽3,+sjG_a]|gB:S'}fV7.6w޾ǚSIk֒mmmm-ie#byfVX]Y5%zi[H ;GW# f|73N(BI 6cLsoKys ZMGWA!3FC0~~Sķ}4K<8upg-(znhGJ4b#wtV%26cv4&އaԲ%+Eߚj&_55>wU0 g1G%=㎦jXۼG${ wJ!~ٛrSاP1ʕO7NYXo]!9w tƗc$_xM|-;oyk9rfҩ@ymg9c٥p(Vzbз&a .:Z:{8R,Hkۍ׺ηB5n_(Tg>U}J7+voAlßSc0mg}GC{SLw}|G۩>0bDђvͭûOgYV-"g>jQ-HO|IH[sd#{:2̹quTlfK8{t}rjN>I <ó`S0+fT{Rt{,;g;ۻkwPsdcY*w@#:pB>3 bScM7pntcCEky^wu61诋 W:8y>AׁLݹx# 2'tA',p*s֚5_Ck|+o6xh/9h·ܞ^6 MhÎ߹!X-3dT-=2;r{vq}/yĩNŶ;C7:B3;0:jp:}}`dQ}ʗ%#Z]Nꉫ1:aqfcPΝzš:CQA 1 dbrª z8ZFj_ln˅ʅO;M% Ag Ψ v_L T*k$[ :MtImg=H[ΕzWa1Gc!h>vs&U$R; \)X"].[Aq,x'jh sogS@ehT>wZrZRZ|Z\rRˆJZ4xj聶_s5]7X ىT?IZH(ʽ.M&LP';|[e1<&D/\-#J%F1gZ6R'RڀmR~>>a056U)r BۥR:UC [M# JUIkVMP7)>]κ4z}yq :co©ռ6P7+N7%έ)~XrK޹mkBVկ˟d8l!'>~ [7 (g]c]'uB'n8zPs/dDu9~QY]v h _:xZFVK,o2TκJ;,-m,їgfBZ3ڌBGik%Kj^-V'V3QWnQ򹠓:wF9E.qd3?KGpّ\fțao2F8]D"[id!4u/׭\UM_3%M2DJ+w5ۧ[~> g~5ro2|/S*M2_3 >P(즋wsTtCeuWOA`_4 *P0I[QO:Qz:b%V#ީݿ9HVZFY־%9i4|v4uhr d!hd{>*#P5H` Gk#DfDs)r*t栌JZm[e)xd+W'C":CF CzQkIHլɪIocBB #_ûk{n%/%V[%jeKWU C ݭ-Vin/vMqJ&e"%k[ U 2kUcyWlCWWx6SטǹREݪ]GTz{ímzjcer ՈVJVBd; ey3bJR|Le\Y׮U2Bv[;KmJJ隞M3|(n꣯Y]);+vQ$.Eͱ{a֖B끝i$6v3sm|U-/*p$uAؽYtN$3ǫ1N@tP!ACUMOSpvLɯYb5_2:rՌL 5/s*1Vo7w^tՇF( g7ˀ?IA\ ح̣'5о,ll˜\<|ݑ(!(~!LޯoR~Rj6iǖ8V{vҝ/ "[:FYk Kj`A lA@Ako]`"SC9 pD$uz]wݵ<|ͧ &|̴1A7p@ $Xvd?{Jd)@tGvwJhB!)L ED ꩔?%@QMs[<2 |3Kd<)Ti 00(e%=}jRܷJ;Uj{$/gH-$@Nom(D7Υ*'牳#3n TJ` iqs=er5@ Qz~i L qH/.Bn2gZgW 7,Uٛ{sdk/т){jWT,`GY(e-}/K %0ώ\+=pO*bM4/"Ni8]= KONonUP-l3a?aBpz8wm\)3j,p".Z;+>fۉU F*a 0xl>["͝;+gw/Pnc {%+bQ[2lM۹CF vĩo KƆǹ6-{6rrCGt|Uo&mpwku&LJa;nY[m3 bpix|횻M!F{ΚXSd\hϑl/`;!ůwHw&Z/".bWL Kng Flc0 A``yDvI_lM@?KSt_"10ʾAm6cZ0gD;K+tc]lPg HpD 0jSgu6FɃ+M^yt JyQ#TI@nXs!\c P NO-ASw4k!~yV/ 3ݑ`,f_<7ή3lUAxbдz3 ŋ! YKpNC K8Ϋ ,+zF“c/κ?$YKVPO(F>qfϕWus?f#Z³+:F@bEi&k8/ `3}CX\ "`zz E#9EʢJgD}E4ޫMP{.Z X%U=F:H9Y:*|_ԟ>܊_!֖ru !oJwF"iwBE0M1@oyCI?6^Ұ &A1{ӟbg|% uZ]2ctk4}i9apqӔ"T๑E֜|G;72v+WI,[*MtJn1Om%f%d%@w*/4A9ì8 >^ӶS)mYrPnNgVΠ=lsF[F-f)WIF@kE+~8gWm'RF$<Lx۔"z(SmZJKCiK+-wR 5e~y{N0N>GG1z,ν9 !ހ;J覄3%v*{TdDjy:[[K ~k`VwS?}\}BbU\XF*6'f }`RO,YV͌{bJK s\}Fi;Y mڶ sB֯08cޤX躞͉iPLIX@Q%GH#mYP ֍zxyV3F܍%gCwUC=5sIVHwc'71+\<63 U44v~$ؚi2 2VVNQHۑZCՉe צ񷔲›~~'#Z4qxs_-kNzAdy*L2\8Je/Vi#Qq;Q0Q4A:N.CO q$!mW~DG]NON}2UDǞUJ-J#T;k`(,0[ʈh'H{w9RdPelZ/]\BY/ZVd^kP)[窼yYce P Eڢ)A=,#A5gVV`(@Qn:[ϺyԀvF\ypTEBX|ؾo4F`< F"|q'oԟ%jb~/6Tb ~'@ k18 La+j vĒ<@w뮻(O )b㉏S瞪.aʯ[ |\a'6`-h%ז3p,Q> P`Ih/˗nh-gioCފFZdSƤZD!\ \ #{`BM%M ޾pKi'-/݋`p(8HtpO`GS]pn>cC7 4BV4Q,!Z#C~ pH\fN+?ۺK?ijȞ:oo5ݯY3^K] RPe*_F0wR`OtpM0U Ru/ثE]s mYOkW 6E_xjU:\VW쌗x%9an1^V;tgE_1Wy^D[]_d @hPF<*Q Qe1A}8A=^#CQ'1Ÿcz>,%)I6:/!D%mEauc֖m}䃰C_tE'۫dƋTd ̋K4T/bNKLީ2_@bXDsNe.Θ,l}8-vp,XAy<>@<Ɯ3# :ҍLԉ1юԵϦix2ШW fs.9H6N1+Y رL=8un+"ʟ~ywHܱ7NGA0L/Qz7f=nN~mck>AgϬ H0 2 sKwj_X^2H4tJeI>cεR#u{r+;S02$T*v%QWGmBB[}rbJBZBF|VTNX~/h7Pe%Al*okQ$A$ 1 XK䋴{*uZZ%ZVМ.:\^|@{e 4Q y'\cV2/[r2 F&5ꄲu7k3HӲSIO*Φ)mk\Dh[ʁIs $9OWoViDo(V&4|3Z#kj}Z2@2oI^<1a= >ajx;>?zΦlw @zœ}!G( 3p>)fq!c)L-,~R{=gJC1ηP]Y:^UUM?V%YY={/\f`ܱR UԜvs$}JqJ=0tw@ ٺ=;q7iJsEFGjɶ^yc:rGA?C>GE{7Uv azZከx+˼sE$^n NnhȞn '}eơ BwY1<>2BKQ,O WU7[|z֬:vO36H'if:y֫$n ôOfI2  S"zzG(Oi?QKS<'TH̻.95D][S$m %MqQIrYbE79HJzpjY2$8 %>-Pts{;Kqg=9}Q|$Bp_Uڜ-moҥ oYexriqE5 I~\PZӇsሩjSw'^urM-(e;yii`A q5vUMm0q;;̣RJp fĔ${b:ĸ EB>>acTS$'zFSOsFBTcTwK?W'p;=8j0K?fZ7 fkC/jCEVuB4"ʿY fG'-:;a1K{{$(tst4䧆6p=f8yx+lLOijZa(YpHg3}:iCpS(bOY2UʽY>aina(]^%I3l vWAp`/},u*s)JEx ;7U- ұSԀ(ޕoSOe/b0/}]`袁rhҖECCZ$G]3pO(~[ws2s@ ʰR*^UCF$:C˹A*n%lR/MurNK9<IJ ;b,7<.s7:&hW;OjTv(dmE@}W[q3S{aɛfxK;F6\MC A2P!R 6s|_*%x[U#m+ bA 'xăc?:閡tE6m\,?a|rb=12B-%\ ]_2}C0_4P/Ԍᆬc"(>_0KdvZ;{1|A$Ou]-=…h;41p׿{W*Of˿n)&9)uO>G2Bacѡ;:%|u沎hh,vϫW_#? Of|xNwuם<I8_1@mVgrE>QQHprп=MGѬ[Xz˺H'p7Ha+"?MִY.ΘW@jT@o1wBGO[Mz&߲$Pr mi\T̤Va:1`*o=3.2D"H39d dq:u{-;F%3ѿƬ77G3~@zJWx'T1|\ǯ5O+:N"'Z>:!CSUI^2=VR9&]ҶT] %ny67vm12?1JDdq/go# dSĈq~ƚ.F|=g`1LAFiՒu1F >NrJACH+K sJ$OкL ֢QSNIt2L_W697DÓJIʼn79)53JF>a>F~&V>I>aeIҾ#pdN*skuptwv;N_ia\|{&C'kR+Z"Kho[ʕǁ\ 5qa͜HMck~Xfz;Ε\-Yyȿ}6::12VY+<`ރ]Nq Y([/Dj?]k#ܸ!&MUX1TQ?mWxHflugfT[ 3] 62Iyng `E\7{<}!)IU5g?KH)'7R >ñt ck+~ڣ5"u|lchhOlp*~iT͊wutNwuם<Gh/@s>~R'%zӪ=ו~k(U=U2G *qݹQ-DS?phHY%g3֣9ȍ2_(0@|?X/W ` .0W@FSl]tC{ 9W7c=Rd8Fn>ۜ-,7v @\?:~a0b(gadptm仮y;/w^ymZnX7o7 Im^&Y;IVw͚ 854kHgOnIE,HNX@԰4Ox ]FE3Nר0*4QnN1 (#v+A Y҃U0oӻBީ-ךǶ_-f}|- ZG\aa/ C5\Q!>.f5@aVhhvsȐ~vT ǰI3"D Vni:xruӊ~2pu !Ep*&-ݺS,fğ_/KǯV_nnrڵ,ƙ2n{}8ld=賭Wk9q;/L_߿첣Jv[Ęi "H~l"%"zESwZzT5NNI7POH$R $縺;H R0Z"x|gxx>l!qiAqMF5a?Kn%l~aoW_v^ ̅P{:Ԅގ~u_ltI0Mټ`춺˙ݩsRS#b*ah%+C%`A蓖/yɱI/e;mR9+RwAqp`{*uV ǝQLw[)_>zo4kI|*[8 3@*HiAR@2 ⌰d \> +vx˶`0]ܷ:*ܦނi,D2 v{'ϻNĔSx;e@p!c-A!b~V.d^VjBLLC hqm֨;Z #>–NaZ !Y_ /X{~_y)#u@_o' r@륖VKOc16xNLILnfރIP5 !yõ\bK B= 9zI6G:?L:I@OGM$|{=H F$3ijsџ3ȳdja]#y)]7Q:hמW-*w^x5!wјV-z"S>KWt;UMo(ǿe_FYs:\v ڱL%[z 6AG@?\{1s@0pT(`gJb/zDsqt5ޭB^{ J vțw=x[/w;=F&>88.u+/p)p[N4*բ!<@T{k)f` m;h}qB^yx#~l^AQ3=_9!XEz~U+Om|(F3Ne:IEL=,]S2 ps7g"\/KT[dPi/*)))qriށpeEуX? ]#|׃8:vGO'-*[{hL?sqHzT S-\am:$O 3YEiDɷvUβ#d IHHO2LM0.V9F7y`ub,wpvVGCĆVND} W_n83-Hf~!ӌpKt=%#p{^53<)@z^W[JF<*֫̓gGE}YR<Ϟ㊯g'!O=Jp[x,fbAb;S$*nOt?oou!a V q$+Qv90P9+R\g[3wi[26> Ki|JD' 9-׷{cucdPRz d\+[;0xAhl1pd,}n"a3/;/v?W fTIEiƻg:yX:8YXwZALn/B^.6kBcxKf g"dƭ8N[jqrtuXameyuͤݎplX4+8[يzYpB(#4İvkS[DNyQdnlFlFHWcMo\v+1J 4(T'Qk SADOk]۞M&Bv3i3hJYb(cfnh]:p3fQob!'6NEtHyʆvj~vt拡ύ'9"A(=+_{Twb5N}k{FW'^q!˰31Ocm.'kH U6-v R^~!I6pevo6#9}Ze+Sܥi׽-@;C[^kۢ:23?QPjIr(rUbpȉ2 *hgr;2MV0qSv42O#I?+4u kL %) ;tGZxEEd%KWghһv`0tW?LL`3ǿ\1Ҽ/YGZWWhz;\1U\KᘃO` ׭2ŷ)8d8)Jٸ89XxeGǟ(yì,#,,,U,EdsXMZ ]]ڠ+5H4 ѭRWOUO2x{:xYiJz :*X9[ՑNcl$M_;iLy35 p9^2z֫G lHB8V--o̾wth(+][+onnD6 QڙvjXf? .U԰N4yu"XBV& 7aKz gxw뮻_(O5V,Ҷs8Щi iel''l]Y~c3VyT"&%B9^ݢ[4)2]Q<(#];̲ū\+%Ǣ ('XU谛Vޙ mo5nfrkNʵɬNuϤD@ XԎ~8#gţ-gVrEjxzZ#uRfl&ȁ%^`G 8unз_LRWܭCċ/1NT3"n6̱Eh_j\Go[M+e Tw +lDhe-IԌs ~7x[hpzA,U}t~+jsze?FMu6M_FeJ2Ճܓ W$i溿̎,<ڹ7yM1:.RKӒ ,S/-ibHkkkkkk/k5kvx}jVY$P!%ܕsOikm,TnI2j lԎ#^ gvh(}y>ƋFW=.+@a3Mu1V g"ugy>qF̥'2HgfM%ZM)qɑɰGs.+Cw^#>t͓TORdQEEOX~Զ|pgf³`Zld+tolgVa$oTg'cs lniWe><iRg+0e DVta\n2fFh e[OyGևd1n?zAN%oeP;Zj.A2v q3tJ';F2-)P aM6y Z֍s#@ hI1WHg~zHPtdZn@ lneeQM'G[!)&=_:=Zѱ-jo s53_"ޓrT]dͦt ;yvN53נozcm opr̚s%xv2u4~'SߢNQڧO I{s/3lIpqnyb;W@0 9"e]]6eeǦ>ɹ BYsrSG=]f|Wed)3 '02߼`˻Fͥgަ%z 󾛯W~F:'g9BŒ'kvccd' gz> roANGnIt,Tտ_ -Ͳ`g}1ʋ9gp=glշSGKc67BQ~5sD)0 3A .yK@"Pfx`o9{)CĪp}Kc5^!gk"yeQjI/ZR~muN/2=P@)]K_ܻ.(o.Qpκ5,_v!I>2zu1{~oQ4O~$l?n3b-UGGLJu8O"קz;^gYL,J.o  eZs *Ozh&\"unĿ  c7,-F>5Nfo>zg j߇n:٠.Z~=;xH}?l9jc8ƆuBl+eJQ7m W/c9b9<;_}1rj}Il97hθgjc}wx1l%ӮK,OlN[XA4B/NwuםfM>JI* u\T]4UXZ7폾$4֪;;+BKYC nѷ_NvUe')F4vkEJA!͕2}c~ir\=jax-w0\&TVx4,G451NS6-ՇxMD]S IHV`k5ol6'W;7}ngs SUw=VYEV's@:vR-tV7`{mv`3Xe'^ [~)Ѿ2.QΎՍ&w&\vdvÂGibnteSɐ=04փ S VܷL"QjH5piVXv᧢)b3W8=D3tW( DtنˍYAġVҚbu3o sO?r=}[K#teղF&a^IYU-}&,ݍ=Cnr ArP^tjJ`]VGdb}ʶ#kVƪɗ/m\(@2NaGچAD2`w  A"sEP큛ݺٰ~sz~\\o6m>n/ֵdMQm_Қsu+-sF`c܁j&Y^uWD!3jӁ]ܡyҪ߲&^mn-mwҜ`.n#ulYˢ,Wf'I]xpЩ^,p'ϻN+  ""JLLwqqv.==}IIIQQѯ_GBZA-=`B :[ob`"-PCEiFh鮄Lv4hDf ėYz{[m%sVQQijmJE ɹ4O6ޠ*g*.6 R >#aKKUPDEF댆Yϻ{mZDksmY͐=?Y<4gSC3Rܐl_]S'(onϡh 1. 7Xq }^{ZE;[ڟ~18n| vD[wÚ 00t8zG(%K RC|^8~^l[l\g1ɕ)wxru~krmxq_fpqLCzOxSHAz\ez6hsk-C[ ]}1{rQVb?"hIN* 0e{^OG`߲u-Lqm5L--̭mt4]T+G?OzSAJ aGL$6.r@ހ縭l"2q1ԡ^[ Q5KlSa:ɭ6B8iJV \C*,flxO9*M04R A2t+(P4y]fB߱΅q.|gk`}vy]_I,L#.S8" #pvrfkt"=VX/>FbF;TYvz3DDUƛܩp;:@x {X%N+&N)ٻ@cM,5dl4MǝA_[ AUsբ_ͮܘ"G"W4zcܪҒ%3*:g4<,|JQjlo[R}ּ_=3Q̿X%-ٸ.i)p(@/ ~y4$WA\tW[qz'2BfF`Ɋ" XW,s UBɇ:{dDr.%Pmz%Ab ɬ&̅yWI yBi1 ]X73ycv{Zl(Gl0uuyl}$ AkdPAv!ve+_pp?R7Tb#]wu'yRQQ? o-ni?| D *[} @ | bl ZtQŠTn"n4WdZi:_w\I-roof +pm0а^NHٿ@@~&VTzռ1nPA(|P&n(+GtuQ(Nԏ1 ([݄/7_H0 ^x;i9QJC)o+ZI +7/ϟ /v8 C Մvڞ}zc b. ghzžvBEE5遼I%ʛtT#* .w{S鍆0^7R#>4Kq涱7vIO`gi{U|og-tq-awwdyȁ`Nu# ږ0Xm9>J(%HEI'`I2xQeYnŶ%6BߞA5X"t4#o,&A:(p$mdp֫: )MF^ S⦒A*Ksga" yWQJ~Ae,ax]Jk4Fhv\YRAio`k"QpzPg'.9mpbƓRMh9 \b6:}z3~3~ӊ~SSbAQ`%x֋2yr.?g gbT"(*[GP*=$9b;}adlc$SGEZ\d/N!'Y&M[ (v$R}*M uyʫ׹oJ(*&2qvF*\<ü;+ӁG[Kϖp{O)*xW#r*(j<*.1f07/xg'u4?[̨m27ҁPi0tUAbwSrxc/]OmuaR;.㎹Å71)dbem,__xW*G6W^2}^ЖBP TEHwwwwwwwwwww@{ٗy>=s L3smdu nw\v%c&Wc0?=ڦc֊s

!\7E(co<tvkr˭y/'veeeEE<)EXlk>҄8~c|el˔X+5E"Um¸L2C` / j6U;gf$+ zϛ9"̮=rjog1x{l{p6C[!!RH)gƄm_rC4-=r"5|}܇f>o"\.7Q;fA52m`Z?h 5 Ow387iccz+0a$_kxRݓ8kthBb"Vu:L^-\Yx1<5>ybz& >X>!F'س套O-{%ײI\*( 'EkKF7 4qЬ$> %wwM&^/rr.\;y*m6V~/ረg:X]gIVӝV1ƴuYS{sMWq,ońtO~!Q SjJ /Uc! -29JIe!6-VY3Rs<= }stу:M4%#23L>~5[1v@WNϿ˝wr.mx]08}/e~N.f9Vt")K+ wI deɯ:/-yt]B7!zf}7T ׺H3c-53\7}0T ܿ kY ZY[ʛ~N5BWobF̐(Xo[n5|ٍ[d޹s99yBB166͛7cw_*#׹KIC@#+> Jv<vƠύz^y>}gKm2 ʞz yi(TNgWsIBVrO{ )aڦ C* 9W!HSEOa|{XW/TͿ\`\b1@Nk341PCX=k!F-YdEKGsΰ/1_vzZqtG!ף~vSLKg5>|qJrAz>Κ0r_?2/.pwx 8_kq(% W̟'2)旞AWz7"wmlt'blU_hHg9x0%&_S#4* htI4G9(~`s.2bɯ1BMFA'羦(osg0%\ZiDP:(e+{Eİ[6q7?ܝT"~4P󅚪Dz5ʽdNY+?\$oHTt@9_%6^TL@O}0PPů29n Y#;T5l6j Y}hq-HLl(E`۲m)lspoEnaķܑ&%M%ij';KwnRWr']ɥy`%2SON~X{ I&E9U+D2w#*Jqӽ{ ]:\~5܏=HFc]ݩDa\~o6 ϭ,y%\r=E9GhTBy'>*7HGգ,VxnQ4}a:7uuftgu愰Vr|>z {x!lhH|0iO'ȤcW&%8>sxqoN VH,/:x'"ZZ#ol[9p1g>2"gï o/'?~>+? 0(sS)Jb RrFY*c!;!ޣo_K/ՉeӗX6~n*Fj*Eb*yr-` ?٨g3_jI!,i]%G;=(de۩irckiu,fr|wb=Nѡyڝo':ayLu& )uB#QGѪ;*q e}/װTf2 rp勡-yn^!nDzi8>o᳸R!?[L<1j"⾣:m1^FRBٖޟ#"!bф.w@]lxn"W`~a޿ A 7m:C_d+MӃZY Ov_f,I96:IeSیz+Kr ]ٓ Px6A1eqxcz';N^+a: YB%u>s\!Wy4zn|6i ^ TacMْCwZ/iCMZ~[4&TMt]47"b6`;{FG(wx<:vȐfgw/"ĝ23\,=Wy ocqGPTV8KWYòC4CFοCW^%9[#=X'^bs,EOuD>D^\rљ:`hjByh+%Å}j)ɗuEMj̇x/H(W0~c7iO ;u;8]qm|eHDGjڏ Zr$2Jdͳw6Xu6~6Tju^ rdᠦ+hm LvQ݅Ց~/oY#w ژ; *7%98[ۚY;v{]6Z9 I1RaAn~&!9\gɚ3J ׄ*~ח1Qde 4ꙏ{Ay֪-[7}DU(fiѢ6/]zWz̗*5*ҬZ*Q#X=S;UW9M9Rq1s3VTY⠣1֒_6Ƿیx:;7LLQF:x|2a^Ue|{zbq[dHw!"Ť$3]Uc!gqJs=]e37$rE*yy$0Hb)A!w/h҇e\r}溫|rʡqAV Z4]?BD(Q_ m׮9jzǴ?D1!G٦064^i|aus\Ga.羮k _6{~ S)_GjF5:Yksc}&2ƚ> C> lڦmQf|nhGUC.@x\jIԄT"6)9m'Q2޹8w5\ыjh {CuюgvnO[YjUM7|R Hֺ_[ƊSԝ;C5AJJƃ}[s// 7Ok8bK8Q?u rND F#b!Ӎ?fjZ!Vh0vQP_.;h%r?rQz)?u~#*֣M5u:Oؐ+X(h@Af/mn/NLQO闠ZL*?Q,&\y-#6<[\~9{z‼}T>%BX;#`,rD(5!E8V7A8k>YoGHe|@n|;D9qqyZ}vMf+wPb&bŃ#ˤ:Vxy&FHd Ʃ]/׉CΰՑ*uGk4f«Bu#\چ2`_0ۿn.r 0eJos0uW73$+ @ ~Q6eYv\s.P]Ia3n .\|=vU/SHPޏV X Ԛdjy593yA8!ts% Dl %NvC!7  @NoX2Rܶ?%3M2 s=I]驪v-V9Dy\H^6B7<] C@WSfF'>*0a87xcWJ Eݺ&89<̤3>:L=>&G<$\9lC䇱7B:T?vFdn/|՜OG k|]x'x#De{7S4oκH>Th[ [19 h1ИWX;H]ҒWykUbm]L|%'k_%$o<]~dnD_]X;"Qf^`I2Nrb/⋾ThFpT3nuQORmLmD.^OLFfXH>CgT{ЏKrŬkx2jCX~t2y-ܚy2j~ !tGR:UA;q:($ znhdr.e}`Ԇ㒳ӪIZƅd JE<鬅dqq>"|۾#F(Gn s g%#oYw;y[Y+Gpǔ~NH)]a`fTAG_Gh6S7Fީy[5"&[[78Z;F6.,׿4A} R,N#@2S6{d ܧZM'kwu$ꯙ#Du36՝< ;xX1ч?0S(憟ybYےir hCea&vɟٛڡZYS#)#)3%*\D:{dNaG9PY!򾿩=J!])*C>Nn.>bL=qFݸjnfp&H#u& f顃ܮQܭL#TK/ '(jC-,ͬ͝MMLL ܬ53ݕ{Bd `޲N|& ˬ-|L=+ܜz#DsY('N+ n ڂfܠXi~bh뗁~:Rh4ގ֊*4;k_8Ka$CExA8F.k֚WIf_uCM$QRNSLsưӅgk~hZA;Ƅ_׳g݃t1ez:fz'9DٺG:i)8o#Qu^_f}<ej*βJN VEƝ/BR#Ҥ\aZeӠҪ%6kw|6*Y!QȐlhk # 2P8U!{dS Ur:^@zxK[ۗOc#kNh{s̏#Z0=M{P10K"E0^ ip`pXpn3U> 0_& KRC$9;ſW:);-9R,j,rf._O&+~/'V>5[n<͓Ix<4oėZD#2Dgw!e} kĠ[K_g6};ЂdC*Y =Jed1/fl +]O0HY@v?@0vHBI6eE'ɽ>B;@Ɖy ]8; -A_WoxZId;t2}Rt`}y`0֍MXy'q4DDkw&1<dS].*:EepghlKw,sFM߮R9kEI[pK_'uN`Qh6SU\'Zދa9J(Otȵn|ns}ֆ`?Y]Ym,9gUBӂAtG”r{+v㮢 fuju!MM!oQ+9uտK~uEjXzYWbͨKW+O&Hf*^S4*+@) #7X9ZI0]0\ACV`$E U&,M?s2e]FϚ$QiW}⃠HucsB ̃ a+0f^b}+֒)6,<.z*#\J߃ |<3A7~vkv ~$M:JY㣍G[p܅#K+f'szsr/8aW_l8clQdh([ɐKS3H56F5{R81TDI?=\^L2"h[jTNMg!e%yT<Ϯ-u^tIV#Rj%tWYN;qG k\Ie(wIba[SNPƷ2.SG$Dz+rc˂ܳ쥚?Lcb\` k@}  |% ϴH+$ʥ˦^KG"5\m A륜j&:d'UQx~2Ǣua/YY*#L옷/B( %>4^P;~Ddl/bW;Df]f+qӱ%⾥mK,YJ~StaJ({mX?eb& _v-rkw1ϰWq}>_=ɻ[w.p/-wQXP?l|*C?Y|p4?D['܀R y[(_x *6G "yDh:iMs5bWYNY;#[|pkɣL]-[1{g4׽,щhP32j!b%81BT$Լϛ8AV %]eQ9bhwhh7>]Cg2N%evvufv%tOy2j{V!-q*(|ipL]%"&2ji)OP |5ѰN0oV1=5Qkx£7OvBbv͑UZ~TUzR3# }OR5 amuTo;"vSrԛeo~K}Q"tp5j]jv啈{FxRvț'tvjmyᮃ LsYvyZm K^U|{\>Io~ \@؞AG}:H=800[Q"gSLSeOB .d"A./3o>`>?hcs/ ;q=MؾExwyr-h-B8ZJ6n,gԺ }3= "Bp7O &)`,ܥeT VBSo0Ϭ31BgmH1|.:wOZ,!0Q,3kT努%EKZFG(FB# RPM cu'5 Diye>{艞e3`8j^X`Bߑ5ȜUw||3XൄżbH7һe▵ՒՒԒ]բ<,]Lj<Sk˚}LUv)&Dj y}Dxͧk^<44C{Y^[_ڡ|P& hvsOnǯm洵l5|9bJFHg`tӮ}ʢ| Zó|Xi_k]g LK~+GN}^~Y7B[O>t60ִr[GCxROeb#*ԕ̍cc yN/%P׉Pk+TL.wK`9G- d=9`TyCDewRj ū EgCU6_\RvLahY@Y._Aԟ,w8Ue %o9Ot߭V_I!) ,"pl\yAQwMel5=e S@ PtCSNwX7[zd:Tm hPO!>b`9`cbeO\Uuuh+bfok.Cd+ `vBZy+#f:cB#mC|Ccu cuŲ ܋K*t2ņ ZF2S1\V_iJZ7 بVG3Hv;ѓMOAL}EMq mLwoX%U5aղz6i)TR8 n/~/q?y?yE~^rV~cWc'L~E ^Ķyi6T1GE폐v!vFt* c#\ P44=X*.EJOx>)UclW]kLƒ/ FN<'zW yr-h&>|q@#;$g66qDۙ=t`%0V`DRxe` h" -u+"q9?"s_+[wPA6Yo>httӧW>XQߧMR `?FShQN4m ^nJ V0Z`!*4.ٙ7=;߫9AD 14`χKp tPW9:U,qρ/~hC5t3k""k ƐAc|E2Gn]%Z-n%‹yVݐ%/.o)k 2>/X 戃u4 KޑS[%34Nd!< ~R$wċ&\@))WZbҬW^g+hgR%O^<[:>ݐӥ90XP%td'vv``)]b|QpH -ܦkgN6WM~n%ɸo|x6$C;A]GC[/F>PO<8Ap}ǥF{n[n5F|{E .O_v =@skE PAG"5"tC\|Lb*9h33J6TE5Y#=lv$.K'[ q{B%#O9GVH~Ei 9!ֵ0zSi_ixvDVԠfFĜVІϞۅե ,{Oχ 2d {$6O&̼^5vyIu2Om@&3ө)ꄰW?;/zv B:Wy xgO)Wd_Wث-R4T˵ʕ% eJ+8)2u|QJ Z5n H;:ʂ'F0QKiW0ɝ'+PV  xNӵm~Bɾ`w.L"nnms`|VOVLϗs(m#0"eZb5G0fl=;8wG׫-&M|\;1OgV ;\ o-*OY8e,?* Rsqvwp=\R:س7 4@4@=t~Q<!Yc\jU.4c~MvY/Rһol5U2#]=,5y[~3i{rXOS~h態{[l S.9;Q y"ݪn3fpwbRwACݡ[jr7%"t\' UTTwTb5/".~HO}u{+!Ӱ!ݸAմAA_sWמ` d?o lإi*2o3\)a:AHF(Bw@ZfXf9*xsł' |Z:x#g͊k2)#rY e<%g|a:9R.,JRC]|ͣtSJD5 TRěE?)a"("!HH Hw#ݹұ,{=z<3ߗ 9\wP|R4EݰXۮ[kfF9כ$#]׌ D`wWh&>Zw h֨ǻ٦ȶ}(sM~fz^Wgfl ok<{6%x?9f:<% O*/ P F}HQ9udKΔMOML ̔Ȗϓrɓ ++]-ӛ%3.{*y3R2hbj˦UҮX!Q5]+W̿X0+5!byܓ%rI*ʱ9:۞7/bgHqOϟ ߇ |/1Yαfrljaݘc5Po?;Ё2M|k72MIRJВJPTtaM{9t~Atq٥`U|tn'Xmu^ ͪM+*R5jZϡ<4\ d` x#.l4Խ'q˯FĵGdxyٖ[R]k@,q|o" (K(gJ&i#UMI}6z#aZSQ`MCWMwHdxZ-o(HGegudNfVB(cGw=MxM8 XTlŮ[DKN :XjW%l-ӍX k4} 2LمkpDm9)^lT+^z)o]I샷աRٖ^3Vj!yτ:o`e/TIS+eњ"ٹ{ƭ(E#ytM7_hjsQs7"0jƠuyd# MϱjڃS\nk]yBe9}lJ g @PdzG$8a ^$1 'N^[P_l6N ^䣯;$wiZ?-Z`{Q Aݗ>.)_$D[;w×?S8trmuq`hjjrN|瞳 <le=1ۄuµUsԃ;A , wl8lnhmol?pNj;Ʈ905b|^r#w(F JU|mJt0M=;P"儱t107 FA$` ߝ/>}\ {Y(cu1^^$Y}Pt5EBρƷyoN=mF矊臟k\& Qz0>Dk Ͳ,Sg]x;Ā3ezw/iF싾SX K+6?*H|(OP YS;`;%V"Z3$] y:UbtaVù޼skL^A2 iC\;i&Ǿ&)2U_dwwpÿ$kV,齃GmD(1LIa 2 4?!6=  }--Amsݤ7{MF)JjLJIjYQ{vo,QM f7q4yJ?5E ;U7؅?g0KȦ@aY_c Դڌpmuiwι'7YiIݓ{KO{YJ'bwU,~W6ڙ:`ԉSd6+F"eމK Z޲%?Z&9`L󕔻[ydT_Ϳ ,կ1@J7ÿ zi/eSf*2M@1Xj׷]/濫 U96W? r4qi¡;{/:<:M;lxz-uEw*r廜OM{&*E7r؊Kh-kApz=~H$y}#[X.!/. th9tnFUa`bӡ_m+%7v%pE45cs^ح}p،w։s d@IԻ5(1Ypx==;{{{?ϻ9;-Cb2(f5ohM/lŪ?1fl+o7 pWo㹨>0@YϪhtd|6K <4 9V3;OOha*U?phr14PHл p;3?V:4wSۉ*E׺&*rtY({HwOZd~C]kQ :B[&a/gGTIVHTA}@Fejo=&96"K{`ʠ#Ik:.]..#.S. 1%=XhϙSVA2 Zu#>ou0gfVwEXdkŏ;غ|9u ̢8t)l_S{b=SNfֽNMUnIv^̋էuFa)-w9nz{ L<T*k?7mz۱댹xEȫR9: JopuŷE%-}5Mtq>!{,o G.̍{ 37#Ml 9"`7Mg]MPJ,pqegn F;;36[;ܱmm콾ac!,3rZ`pQpgp|`#{B,R!ZO9*J6UhUQvJ*|iw,")fÏ__IXUxlSkxeX7u¦JEk:+$q>Q[8A>bve;S AOoM`?rbUk'(φSO9}HUqB=}'@vo-^|D&kITrњ0)lP-i'^Diw}Z;*Z>}r9\F:rbtbϕoUg," V)=lOVEIԞΞ h\ Q>>Zl]8*.c9s5ku$}]6OҹBءV^xk&‰vIicP{%9ž.f{Q6tWE iDoT,LO>FM#(WZ؇Z( ht@ i4 + /xR 8mko~hL%ϩ"\x͞b@ϛMbP[ws.x5͒+<4ֺ*hsO§׳I7WU,ݛ5 ,T yv`:Ɇw9/%65Q5/+/'^N_n>x5bijbh҄NX8':o`i>7(><5)suezjphfcjj<x9"dn@%Š[i"Lf[צUֵusպ?t^ ^ !^"^I ^I#ڍN8wN|0i6.3!rx4lg;+4H1 RA1C/|_yƟ.8l=ʸ&x3,W;v0=W)8;r\s^ mxԲsqbsY(_g'e.fQtZ0BDRKF^ 4|i6G뒭"RC#iiZրAa.$#y7a,̣;zӬPJZzBwHGq\<ytM7_'(@qָ'3Ma*B"z6D#c(Y }CIqhwb~(f 9jf~\:bye 䈖ل$8-L߉Iɶ|bӑkڜe OZBmZ)头F=46eK`•ہjO^ ]~:9O9=K9?9G:G:wb{BԦFNT]4" ]~^:K(h1}g1ok`܈FUdߢYŜ4`nrmSלziN5X վni, ġ!vX OF^st> 0!*S)ƫz޷[*uJ%D8DڧyY;xí7I)B3X/pw<_NG[5*g⌶ O/jl宩5BEbYҁn& NLE}+L֗ϻQų[˽[ϵۤJvVbo>\,}/y5G5?GOrhx+'W^@GÄŁunz\YP{ʫO]ؽw`J$gq/t5 0moV(je`\7QNP;Y4 1+|w8D zZʢD. MrZ_F;>A=,-pyߑ^'n(d"vs,K~H^}V#_*/̐]C Uqm5}z6H?#FR/#^ ~by | d\=uU&P3,mo3A.TD Vl]/;Z%]ס&N_a/<»wH{9-jxC K{keLy6ɇͻ@_Jg49ӝ#ʸƯ: nۤD~h5 JE)lZ!`-XԳPJ7 O>%D@N1 ur7U j`my1gy<}s1cu j^Lgc⾲ՊLѫa8 \ SOH22e+ ,4=NYԔF>^' o-%YaȺKI>F/y3ALzd Y&g.>RϘ/zhY/Z(fQ#P;oKyktalKʳ^9?7I#>#1#\#KM.%+3oݍ ϪM KDS~{s[UiOm]|6BP> fpw,K#gubZ{9?9{Cچ|9pfN;D,<[&G.?[Yژ~ 7|e?k潬 <ONSՍq u; ̨nHfr^MyM/X;||@ 'S oYT_[ I& 9`ZaMzUnFU'YE_#kTw89{g*ޢ  ~ x^9@%X>""}Fqv:9D$EQ&C(D^zoq%}*DWfC۶ibɎtyS @K } vB(}t::Z,qZZ![1hl_? 9G1ZsPy 5bzÁ=cl(뚺Va2=۷vY9W[ߝB`g3deH{mbou^B!#(`h{9+,}%Z[.{ߗތ wm gWy867,BػBi+`78jFf BUZvS<}$iLv~X53 \b]F99{}&>>[rۚuDvE!;1χTi1+ EnħA.ŠQ:oMŞQu~߷&ګًFDcwTs7$M1<^[N& V( Nl@*E"O(B0Ij#MS1vȓOFŨKsc}?{ջFv趷OAΫ#o93>>_Y&*@[Jeҝ؝x:C@4D6hDXws>-LQlP9)ϸr;D)eM{OڇYD#/pOH1ˎWpw;0eO8l8~kBY0U:uC6}]\D9ɺwPMM\=$2(XJzӭwlTu;04]|#gL)~?CRs@λX ,' *^E&rp]&!?,xȁo3hDPh/51?JRD 2rsj"l-)Q Lpb++o/d*ٯ"8,ߗΒ.l`i._+YV$\[[(P*˛ʯ(r_*0Q}pˬ㥃ϾiĪvB֨LrbLFh~@韐D?wi/s J?V|V9WGS%bӓv{xDK OT=ބ=[}?3p`W]kmi䨡l蝤ܩ|.!Y<#\5W[V(+G1^=E-K5_95T)?_Sy-|%rloN#D-Cs巜Rz}A%O0e0NLe4h/.oR)Y*4쪽dsvXPq͞i!&ҭGqwOmu4e}UURe*$sE/E7 EDzK*>tdNoAB1O] 9F~ Lx/.t\~h;ܲѴ 1̸_3|U#lV|G/}!|Uk{vm#4v nþM}_F[H)e*u}oaQOѶ3 %\;6߯ 7r_Bk\Fj#tNBSGرg vC:)}vRžP;<Ʃ;5ϫ+ڤʳKeҿ2W>Wv)U8ʅ54qv>إiQkLN@U[o$z>:l.]ZԴY %Aq4j,JrK&({ZJM|Zؚܹt=yzԺ%C7"68J?O}l'tnŲoOɀDG8 WڷVBtafaԛ0sBUZvi<}$iLX~+X~*$_άdB5`ȩ!B?+^ΝvFzUl_R4GK O':K϶ qS^LURܩ l\4$K # }'mhCس e}, Br$Yt5kPV'3 נ 03RqicećtR6W4*,z2ͼ=`|t "},ڥ%'+>59߫+ʝKMEk|ofW_n=E8gjheJo邋Yԡzޤxc pHps(RbɊ<,iu'k[sOp 5TUYV9S~N! &Dk.Rv2"\%Lo2v1iaM[m;tBVk4=4̍k~-e]˜l٢\=f4Fcx{[f ׏k'x7k䮒f~@Yv+ˆO[J.~ʅm[}||1w{cxCmnY SkDZN -ۋ1DE#߆ӍPA.Sa0v*E 7ٰw.Vۄ!$yk+Of>hr zӦ-[?}`Z&*I8sqv>LaNWP4m"f6!C{<Ô;\&w}f0l_gF7tӍ<% ` ˝Os " fH5$Ls | @N \+b1>} =|wU.I1=@eB.({@%HÐ[Q]Gɛ}/N'D߷&&{ӟ,>_T*ΈAԼڨ}\X˸<} sXr2z=Z-SP<~;-jPsp?2MӚ%is`8`\ua,_9$~v,kq |hs(~uo?= #o t0 6KU٤H7{J< ]ƫ-J-Oq\ t!`* #8 ,Q5hGMyy1,=v@57+Iǔ GA?3w4:;JC ` jpc oBfV^ly/y*Ͽ i ha:0tN-< d™Y'SD{3`!+F \}aLYos_ɵ`'})81`T @0 Co#mtS)&)?4K3} ?ә76 2 eI\c5\83{tw{oi߮\0l+EfGx+ G#4@EA?^'#'=j=&A1o ؂ѡ'4R|'I/½u{'ؗ6 H|ei  J6a؂O Twޣf_lOt]W hvD&l7I hF^FW /< kL* k ck)A1wNT@|^ڡ8kxXbnxIR-e"4]@Z1 s;vxd q\W@~=|Aa}?]gd^'B1w)ffi.F%FoF,(Oz#ϛnFsle?S,(,B6WP-(822=;!H+%]|3ǻ^Оkq~.a:i)cMBSKsfBtaK$OM I&yHmSkiϖ~SWܒS֎^Dmӿ>TN}1xqR21#B.IӥEc A`p%Yf5 UOj&zo{>3.\St5%7hڑy{wbxs>(jك` :]r?jl ,Ƕ3!G9P$R}vodSWMBFYXg>Ds# /t?a,m\Ճ?Zͭҕ }mJN'Q㎷W "@735t`~pQ"5^}Zj&gN3~0ݷN#tl 4-MGclgB*3Zμ:U@X?Y~~Fڱ~qׯr}Bja/?%:{ip{.yKgoO1BpŧsG+6?`-MR X2sԧg++ak)gY!=\@?t@.$2UyU¡FAQ\eM(JԴF^pرnX_GP4cBIqo]M0ڶRF>cfi(نSNU91ҦNJ[V mXyl-E,T z\uc&svBo2-qT(.oI?*_<C5Ð]!m7"U 3A0P+#q㬍-ldG6e VIaT0$cRPx{jk t{Qݳ; UMږ^1RQ.u},]!_[K ;C|[5m+Sp]T]5c: LV%v9n ^|nqvYŏbbscUz:KS(-G{je,J\æ5.$'U2AL1.CVR&KyZrdL%M7t#;kc4yvCDH–2]Mq<!!@` wmqwXgY`|_ݯVMUvWgb׍#z:"T.C'i:rc>nIxVccK:Ħ**ڵ5rV/!YIRsp::,OWx{TM<BdyAlP*TV9׌< 5\OR*nHUd*,v* .MK/wSR3X-C4'd^2fTף٤%mk%;KRނQN=)uKM@_!+e\S)gf‹duP=|=>-;f_+ԻmK8wE`v\HT6TJsEV@@eϸhj evΑLO&S]@I-q.A)Eᡯ R\Pq|v㚻fӤomxqR]btp;1.C(|Z~fiFE4 ÆF&ՆfNq=?O>!D tcпb44״f\5:Rxj) gי7v 1OSoAWr@P4ݬў(s ȱDW6*;m񅚦<$"䓳& 9S*z7?m~XcmZ twN)A|;pqwv,2n :ur9 1\O YB$aO>8ks@y\vNfMizJa]>`C}B=z_-<:]tz6⑌[[nĺRu7ZgU@_5KxRuŇu†&$f5]פ,)iZkrns.SP/+3s?p]D_e~LI6^yZ7QN1WWN!<(s+ խ[3 уz̋/$\gB6'{xwpqk ?~qI.qqޣ= "koόys{UT"M 58 6ȂF`':Lzʸ3Sԭ](1V 3iTZ0-Dځ'h]TЍqnZ)J,b田5YȬHxACߚy WBX)O1>b꣱m&Wlࡉx)K/8S@|SEʳ 밠%h!& )|!kJnS QA8ou3J9R%WD>B`-b a6pXXf}ۚ$V&5[n<y*sScc>t~nyywu?3@I> .}C*b溎WA32węԻ{Ϛ*Eo 7$ǫ?O޿Ps2@[v7gYgegMg}W+{oH\lKg'ŨDĝϹ}-;>56*LRCϮy=KYZlQJ=IDƜ ^4ܗNZyrԜ7)Eߗu ˴zugoC9\8~WƴB27l~ _ I9ON B&jZ)/cp٣ !*5RƒM:9uN'nod+vt,MN (vWTDoo{cƒ˺naÙ,FxG3Mi"m&_7]!5s0ԨŬƨ^WjL[hko* 1 F01E(֥=֥ %'3`!@.1|`n<+K]Ky3!BHo3FT1g@yEv![o*a9_?S&5W4[0N7WOy߾V5Qޑ~*L$"/Աm||mg7{b`'͇}mu&w.MA?C6Qra]S&`͗ ][xymC׃υ$G;O;lsmr ٞce}bЗ-D3[ +? &7pB"y24ϡK/g*&T5jy/XKu+t Ƌ@$Osv3WR5gc}VXRB|%"Jur"fePW9gJ {z'([&Fk݊6A0o?[pPJ%V '? oD뮾u^~?9cо!q~t O(> Z4!0?%}fBm56T2y % @#yom_넓5mNh\rq4Y׉?QKT/PF&"ZM#$*Bw. ɭyr-?iuJ0O!:Q4F:=;gK.nw~'ӄZK@{ !SrUM( nNVD{x'"gV@u-u3tI56[d΋+fe{tnhٖ|wW)s$g8ދ_R;d G"$ Y `>&yg;›W4nrdymv꧿KPl)/c-=9 m5lԁ\ o)(P4]p "-lQ,o [%JRrkZ87f_`e| gujYJe=Mpf7OiUT#mUpx)<8ɸ<_l< ,+l 04O<=gII񖰯ьӱTkIwO w2u&4Bg{nڞxdؼ=CqxdA@_q bŽֶbNR*n :&ar1Ie`U0{b9=2>yH!XP&&gǝ|3yȰv\B{OgSV3)>ŕie*E~cjhgka)*S'1&zxl9R H8NW@CZ ku}_\݈dl1b4r;R~ӆ[Ou-8`,̗@ɴ'Wp ,Id\۪\k2;9HF6(9a-#iNqڕ0a^/~ߣ3~+Ї[;|krSKT形MeVu B3#Cva;m,h4w6Z:@٘’ʿBuCk)j;2U[ǸEh$$.jMU/;hҲ:Ν5jl}e2*;?>ƯwiơDINH85dOc4+S{c3[K{ClN2ul+_0ވzyHBkXVMf zzn螡ҽ!!ǭg:vQWO4oGUتfʥݨd!wC}p(k(ZOݟ'JԷy-ܚy@Y dovܴI%d]&6IE%z6Oo{0_W5 watr|g&Sk:G6W7yF:w`9y$F0š.՛ʟ<9A?9F?9B?9LVgIeJ~qO5Sbg+3x0ѯ*vL}(/(tAŗVƪA?"Ɵड@}g œӇM~2m|J %׻ɯG0ØCCEpiрPYՉ̨qO7[3ǖZ8 Α7%OⱮ.RN2"r$?]t|5cD` amp:]\c?Z$6ًBDDU>\z:z-RyWdzzPzr)R^PuL>k#_ r` Zol{mbocei$GڱhqV_ 2N+jA {O2`K q慿MC>C9c|R|"vOŠw%=o:L4l*_$7ͫ@D},SP`!F"2N#[dzc7kg}_ΛJu"{ʘvIZ$\ s+f˗ 7ms#^# P׺hWXR'{oׇTR5sPm! {c%VAs='_v:mg,6K&[e)Z9(4|x3"_!yG/'أ;Ȝҧo-xq{,F}#T7=:۰~kfzR+fޓWU!dn\/Ƕ/q\yq)gyٔ u^U5ʒqC4aTuM:`?GsMܗғUQޫV;Nvh7;]6B:22>x qj[lV{ȥb?Rw*-E?vx4Rv4Qu!Js3\0hzNyr-hbDnߙFqҐ23hZ 9\yBGdKZ6 xh;p q$<$UsY{[;G7Y6ڔɮH(PtCT#CWtDy5*EB*O0-c'sO`cpQqy)+9xM^fռ_f{7\NrDCd?aC7_lK!cL_݄wZ~A7xvH>pTr!ҳA{\9DiAbm̰)ċSWOg]7lRq4P5J&Ljߺ?..([pEJPȥtYSOSlH#Y*m}C֙m,2\bwrx+R2qj@R\ڜRNKMG\};'WhWnk">u^¹jSѾ{"C2ݺAxMQ硚G1{"%]/R=Ϟ eTY5M)g$ĿzL@: R)ҼLSџ?*`,bKTa2 UDi0[̣T5[n<͓V"PpϢ fݾs΃ݻ1wϰ /1dрȀ\ {d˔{'6Lvmq4DbIJX\(LqT629!%^ x<]6.u (uUeyl3@tA@? 5#A޵="r%u_ci+WH׏.ht3l2ln^1լHm*7H'CoL9@ycb~ý TupRZNj@eM/̓eKOwLdN᧜-4n لΙFmǝJ+KLW--wv:Mtv5T gDD$8Tٌz&j4s:R\ibo\a䬘`,"NhԢ7@ -ۈt~ݨG Z rz{2$C^]@^I&eD i%Dep$J7d!YYOrƃYA.ʷ 0GtdX0K3#}C]G:BAWI*V >esw.z~%%W<W(;*\-jej!.M Jc).׭6 Q8gmr,x4>4)SMefsQ(- Rn"ϕyo[n5EQ27MnSwD8"¾;U0ߝc㨝ڜ^b_ajJՔ6Wp"/w,iNF(f:Έswx[&R[A; ȿk0Ջ]yvLx`Gxy}-33339g~ p9~J[Z?Ah{n=˚+6Z5~S/K}@ƈjЬ՚n~(縚JP:KLr_,x?OUo20rvIYRid[? ?|D:vD}h]ܭY*xQp#%ɦn]j,jpEuEe/^GHM6&ޥZJtے\9Jo Iꮻgyf*p烎 "%kŢ;b"tPqg>joNt?li.zem;mJerϒlgMSv~,oI+ qfZ5Ҍ,jlAtdmqꄿDtb 6E;Cc'K~.[7o>E%_F̑R=-ey+dmHwsa|򠛃eM&f]?ʥ%Un%R )Wa{ Ɣ0./03kEZGySU|V6מ7a12𻺄1~ EW몶#R gHm7瞧b\QMghâVWYDz%"z\c $k %{qWg=L=Lkz ١C&7uMO{Z?Gu뺌8,fs]}EV ". N?Pn<\{2/ 8/G !XB;Rߘ˟q0Ǐ?ю 7io:鷆_&^Αo߇ܩ:lk8%.~2. :L7Xj}>ǟ^e| &SH߃ 0δ%+޿3wFUl`Se[[nE6l-yg6֧+vyGCS]S\K?hԳGUi_MVCE HmN.@a`p=myҨ?bؔͽd!@oi"Ԟ܉* \(z蠛I;87rOGh;ПZA/S0̚&D;*26<8&Ƒ T:uKgLbl>O < (#*Hpĸt<8!+.ֈ+QO|2>,;>tËM\%>p(y dn@sT\ #7sTzՉ>nys3*&CM0SATќFپ@ѲX{8 T1#H=+W,t l Uu@ĒeuU *K Ub\,jj lyͯcZX {IwIwIvITw~k?(3 3ut4T8Kc;m&?}2wVuyi9HOk/f7ȫݡ'lMΒ+k#ի'׋'estӓJAfM b49qXdOM(s.m]C3?(;EgG GOp/0]1 X8(\1;,3o:_q` cl) SِF{RQ{BB2] + ܚ-rkIj\rb}\h/94Dk<_@2M&OoFPW)cK%<=$)Әi9mo ;ߗ|mo,QoMo9a鋮DNEX4$[U>Y~O5Q.YVUڗ!7c"x] ;?8oCE֬YE ?X-i.{xcQME&K)E-qaW5) ~h3sk}uW9/Q_^ߥAAYAZ&ynuڙsr}-_K.+qfj뛾'B9wZE4&Ukll06D".-VHę,>?.S>)Z?6Zf5؂Zs˛du-RGs0^33e~d7 bzanqg5[ڠ㚻Gv97R]~_'Æ1P?|F{>Lm00T14%:]քe\OY?=_Q?bδϳTQD`2YF:zF @5@;| xoϔI\VfRqDm_{6PT H)}eP D>W;3I;>I;$I;I5Y56S4_D`JlDz%_q9rzNI'7V|Pe3b- lհdYth"-dUkFu;wV aV/.)T;"봓͑YE6/jj4aNzBxZKhKX^ gN%mbknkD[S/'[cݨZjdZ&H;xw֢0A7Ҷ_u|٤dWa,%/yn[n5AU{(\3܊ȃN"h1P?>& ` MˁAK㬴v>8Y'DYֳkVDWXTgXM@^pFQ}X0ܤh[dκ G" ~O@lytXZ&Ζδ4 ojfo-SD:: ߧv!MlC<6AIf*W%A2Rb c#sxIm=^z1 73 {;yIߋ{/'g޷ pǖZtz-F_h4rkoΠ5*V&d:D|'rYlpwfs*[߾}7󪩓ǷNiYӦ`~Ul`K[ G9Fl֓8!Bh BbQ_^WW_&P&Xf%1VLM4 };GVO~_|أXGsqqyr#j \#\jy3HcO`uezjG(.fDlx{Ĭj|rzr@SxJ4 w0zڽK_0Oy{rvw_-A:iŀDŽrj,h+f>j`X UwOaMz_Qu_onZXѭ""-t#$)e䄉C8NZ= @Dᬔ>xٻPwwSq#sļ' X@(>vfBi52(Wo e(Lp '@*U[_If;}˟zf;'aUCBCJaCFd6Bh,ǂNj-Gi꾘 |EGdaL`AS`g 41>S;ܧ5;Ml{+|{Gެvf-{j ǪɇIؔW 7pn6=hvRsQuu_|Z㺨Wb-$ ?)4iQdj_j*GM4zE^HF:"@? +b t<:]6v  /7ﲆyQJ43.x_1x?&bF;))=G} , W"ԅ`8*j|: Y.KQwQ~]?#6\bxxa˱hlf(\3N]U:԰v|̤`d ns7I"wBW%:7mj d'ix۸*}Ն%ʊD ))+VA=Ř&ĀǂH`]ahgpt6ƿDZ@ o6x/0Ā#{X E ) @Otw/mqmQa6LIt4/FiUSvY!١:c;kqop2lT] 0 e=JP-iZ>Fg,64@أSNTY7V)Ӗյi6#~~0YPa= 3{N2L 0O , _`hCAD%[8(p\8;ӏf6_wd0mhvuotW^Y9 0f\h4b(3wvE94AS3OL;^Jw`V @b0У~ !WEN|L oY 4?Z _{пsT mr~LϋڂY{T@念Q&nݡިqZN9:K~ngUFbd!Y|3=?BٕT.*8k+KC<77׍!RATõKZ>}Y6[T% <ѡﲞ(U:ڷ'}ilijrhkD;#~j#}@ъƈDc1Xo0ܐl|-) 7*VU[n<0NPXORxu߲͌$ A@d9\@̜k6qГZαKf'||wD`RG2j$UhPlFT~>gT+C{Ǽ~6~=TS,‘ͪ.e¾TP+N~AR| jhܷq׿ D汝Cbolhf@&)B ݏHͷo-UJ3N slr5Yr۷w8s; W+gi*+t[+0㿈;pz;%UbWfxI4>#Q1YqŗP3mo )A  Aĩ|4rqḟ=y{.4?[Mjk&vDG[#}gt 5|Ly)AŖ5QBgx3O[y"%Ӓ`"%hFמŏc0e(jUkwY1f 5ӔbpZJ!9mĻg lf!p *֦q7m_KH&' ʳpk)ȖE3ysT_ 'qdՆrjI:&.a y2-_ڒX33EJe!NZ,ɑ5kcino"82PխF3p W!Uaӽ'3sNJׅKC2saLWlPikJxq'zoϩdM3s`1-:T[\ f{E5]/}Жoc%6.q^4{NɞdIlՆۥibݪ||:pbþc"G{\Zr.5 TH\T|}^r$b7wdTtQA\|}nyXVǘ~2 CeQNRDe_E y[9/PDp%ǕU4:ƞ>bYv.TE{*M'fKgd`izPd\4KxH"7>ݼ9>1~_4)UoKݗ=u w.{\d("WA-OºE"a毩RKPN(c>ܛ&^yV"nnh$^*1fD7Y3'X8Q"-_&l~]*V"Q}/^s%Vg2 6öN/Q}nSi1Q]LpM}lU$;*m̞ͬ:܂{J2zuaJQDLRWFyaUusвYʂZ]њ7;=T,teC,=flBjXJx<}Oq SWnXzIpǛ^`/XtFoW`8qT!2ZA>1QAr ~0/u7K'5ZGf8 F!%?džWF: 0\L^H~8OD}kx6Z}6Ƚҧ!oŒ},SݧxUwwOQ R* "Jw# Kw.]tw7잯<ߘ98u=/1҄GKb EEbmSqB(o:6NsB&F~ x*$Ei(!XS) @^=<.[6RpJ Bփa Nh{8 D34y,{n;6IUNߓ[,k_O?WJvLFXY$\mQ)u;}"CЧAfDs|tQFhiYhߧg0 ̛! MU\- fɅ<\|"D)fUL ,Srs8uCc]UO劣TI|V#QS*W{ C]6#`zC2V&&&&f=6gHJRB\|❸4cO'R|l;ҿ!P[<{yv^}.[NSJtc)\>{fq飼3Җ޿8ᇖsA=tDb< 5t#ʍ|R}- B@}F{yw}:py/g:hFHsGOa{8{E{{8GOd^#j~t5jNF{j&FrտfXx+t[Tzבj]gOq+_%ـ;[+ uHGxS dw__T0 hG,3͟on1 KKl|[ 6?pwɯ';+ɂv"ϥ/+Si񛥚ME4!<Vg,Ky\'I0pxG%ܽRxKo G7HKuPe;e+OÞe5QN o5 =.CjTܸ?<{cnmFh~1 <.W}tiwŭÉǖMF|{>ˊ? hy]?8/yt҉u҂uR}\}\Sѧ Kdh -IJ l}9oGxŢ]`\cb>?6z&DL}M ?Yhx7FW+Z"V.N9 s^*e{{}*]¿I,2yE$k<1g;v%9*_~:s_UL$vӿ,9/^nn`]a\A6T:{p"^,w(ͧ8;[xiE}sK]Se.Q!^aɝ>S;S&~yMs5ZZBݾGB&_7xݻg'GOSpRq sS?OT0wI噬\2" r O;9#|,;h-c\Pgށ=W A㩈K{VMgXeר̀ >(V=ASuG<D\Lݫv;VaF)viZWs] g eRAyV3{y/SHEs#[Asi;uA ߪ11udb~[)q:e4SU_c\snmejxy>xU/r׺gl6&۳ hCD N^Wa$]x魐PLmpaKb8ղ;2(g%t"sKYhb״iݕ{iʱRف@Ώ5ډA׻ǁ]k!|Kkf!SlcI[V%wD[8'OO q|v5](݌زQ?;쾡FPh $C:_w? ~: 1 ҫ9_~Żlx]HҲ0䈴}fjsN@zy #A1oM\yJdFY d فS9^5V2?i~1OLY=RO+#}ø821HߐF5NVPQC? _M#&: |l|}a'M9H'y6+Unvi!R.bRaʾrٜfMʓX<'\Va9ӟ ,#@P/m֙S;e{<6E hp췰 w[N96I{(G$ 1w|MۙUgD 53"JQC"yu|]K-ct2JD7~v-2|ms/Jŭj&ΫRe]ceˆutZ ur7djN~u"G(Ǥ'ˏ'IzX3{Yi)jYuCYt#[TSg`W')C6:9\ޫ Ud*ENYw79W;\#L55dD-x]\X0p0r$+tfe_4x{' //@8` a`*clp‡6-KUFrK5$[ xcPoE9Is^:<8S0s k;{3o'c_WPo_4XPu?y{ &UV $@Ec^~ 81]p`gy k׀wF6(HFG2B KǍhZyqMtutsq ʍ IuU5 Q6R3*rLb9:|t?yfzrŶ pR_,~f_k+R;I0@mZYwc# 8s/7w vcX _eYnk/NQ̣?IƖ/SPKN4!2xGPT`^@CC}}ϪUԞvƹl/yMѫ8;D'Oة-T^|T29"֍gJ z ̸-z\/d"ZBzK;fj[\.lF=#S'γзB++˭DquNjLn1Wಉh"m[Zu |9/TUn9t6aYCȾ}VJhgu8\zS~7ŀVlܬ]#Zo.stS*޸GSG~!めfڇQ1p^WwyhOv V^Jg?v|^tV~8q}胣IUuޜɄ# %!YN%v7 owr|ֻ%M޸- 9d:",T)L9Rc&mی`W ڏߵQyӯf_HH.tW]7*xK3XtwhnQ(YΜaPW~+CقM(R:~ǨmOFC_Sz=F?2Oi&}j䏙 82ZOS'2cb$z^ȽYmoaE;Ocx 30V.P9;5 -Y钼way|dm͌%cʾ溇|goޭ{x*%n~_j\\88,ꔍ2vG;Ш[e_gQ则Ӱ\_ͧ+beӰ0. V#1uosc=M, jvrߖ Kկ^/Yy;WB%m8C=\\8M];07nydyxih s UvjcΥN0 }?W+gvqΗ1`aM2g⺚ÎuܙZѵP+s#qzfdQ/d0 Q_ pE&+լpM?z0EZ13hDOg2Xe>Zw3^޹#  %.(>[7"sz7J[3V{Pn']rxޱ?N?F=SI1yfudsdg4aS3bXusq\]I\G:A5TΓ}.u*8cb'}?ghb_՞ ,yhY,Qމ?-d@t/y)06X 3SkJ_":] 8X}~L<*)JSɻjJbCLELښ˞֮6~k/S,JӇ'Pn<=zzC0̀A2(H1E|}!]VLCȆzy퇌.ч$5hF3GzTT oG?{/rIt[xٴel8y?Y̍?'qK[$Y˜p_OR4r y·鹪ڙ3{9u^cM_~eN\1Ҙ(fQNJy;.nNs -'ƪ:['9#9La`$_F;${gKM~nQ4#ދW?%\z5f$p[*{r'yCq>N6JhĩB0)VP@|N8Q aa87kUNN!YV=ܫx{O_J<)hXu좕̓i}n] 4"V픰Q}Pg yHtVE(ERK ΰQ SyR+X*=+T+;A._}$| G"렎lc}{*Y̗ϡ:T]_3`lf&> U9l^yu9}! g^k-sMA-ak;ZI+jpŬ !>nNv V[N7(Pipaւ|_+;Qǿj:a-JR6 KR*XFp"kPv &)[Z %J {t7TGu[ŋYcr)*%ZaIf~5>#;n6nKv.E.N~}:ɫ 6 #xO^ܡ ~GFgZypvʅ"X޴ָ=%uYszD~qXO J(4d(n}Pn~6KRϑ3 7p`ymi&1´Dr\hhFռRrǟě+:;()SZq>T@z;Kk(ƪ3)͠6\n4^շvI3|U!e&yER5RٝrcKyMތp럁}E,k'0r|)@NA/8sn.M9̍3hx01;}UkُBUאHRGͯBOO,hc JOT.)7P] +wr̡.^ Hzvx5*Sa);pl1mz_" 11r3ﰀ`$"tbntbzhg]o]|vadS7GriU(W~3nKW'#w_u7Z>Q:5.3 pH7JhH_CY5Daf*F(&z]48pڨ_ʹ]Y{g0͝ҡ^栓;&Ӽo,}K{R?|-E u jmz`W)wNwvF."Z{yw}O7]ⱕ*f|Lu}8smN= w%6VH Kl9<žš&~>Ffg{QB̬K:ʀ 6M4cExTq*Ug*Rk9Jc7F"VwUFwM7qJJ>ʲ"^,rsn7Rߊ Kfi"\. *ͦdV>L0ttq j0"O)ӦXG;Y;X'XgZ }6wHDwލ؉UJP\O W섰w1@(*Z+ҍC|N,Ϥ;V/m!d9yqZHC"tVDzzVKQ(јkDD2xۅWK/W. 7gHz:ӻ{҅ af9[;203 S}#N'?r1bv25U7}/gFHB\mϡ/DǪl1B0vrPWB'VV=3fЯ7 e`@Gj4[)C#w8Ciq_AmU9kTvqXJߩyfNL#˘} [}Uw4=`dDիx;S]ۋ8͇,yQ7QQIQ__2;Țv[k˟Uhon䝪Y/>ϔ湭~B}5lcAb=Wk!rc1kglPktzNjMQ'_ @Tv $z/ } g_`{o7K. AuAq'Xk9ӥ}uLٴ>dzv{me˺鏅) jjkԁ¬7%:ezjnp5,wD _HQX>.n\T b1mI" ;酯r# ̢:æ|܉>z6.>!f1z eG<8M.Ukm\Kf +]8#c78S: VnEu,Ge0lnbz$Ћ@wa+j[ۚ;ޔ{ʟ32t~=>~?7zhytYᓂӇWhYw85,_@nM+x/0N<;~2.Y41ծX[hhM\ۭmju H]O]/=o=_guOƟc=ڟkmNQ6b[lWaMx=ܯD۟ĭo[ܥZ^bѨS; H?PN͎y D" e 2psϔ;ae1LI20P⿿ `)jɿ]ic{upcnG2/e%9\DH"siR,1d0X(,9L=,pMrɉ~y_batr|s-=䚽7\,Huu qocjbI t* f ٛm߳'%m(2ԛpK2deAB>uu'VIWg!!gŠ`iavMkg/1oPQH̨i@m 2Ʌ; |HVu;am4eó'GOj)\)k7:'KTOOtL,Q_4XRi.>EC{Ѩcы\T6\K_M _,;7sMN]uTRb.tnݮmu"i,wS6>܎4_i_G^g}w/Ay~m訙 @k]ѤWdzeR5ZES#nC8_;fkGu#[I3Kn+sjϢZ-xٲ`r]xV!khi\}tTEl"gުr`6"&ϭ]"2Io)וe?m݅`$ R™-;!S \eۡ|\拟Vw:uz&h4s.'FV %/*'w&%j$Yk2-*}x^h3l4?]U4t݈TRbB,HCOK0Îtpgɷnƌ.v6V:rN]O^-tX;j9$ii :oXDڮ;?[M X2uA1z_3|Ol~w 0R&[]4.s7Vs_܇% ۼc4?2'B iYk9$)졯einOU ϕ./Jg+Cu#2C!. ކq U5d36w)6ƿv\_|-}/^$fXϑ^Þ[R\&O/x,Tɸ-i:cӊ`j~HCsDL5{VbTabg\3aJ@uq|8Sil# 6 fNčHM_/H- DefRNZ.;bz^<X8]yce?8,\VB5"n=-A#ɟ5W1Wv6:3Ux;~{?5: Pf3lײJ p. HҮ|aou}`sp{vW8)F>8@=_Hz}dɕtk/weH}>5ۯsf&ae%RyCֽImgu5&:Q*cI6m򅩒51'ikr=}tM=,#0rމe%lE*AZ5,8Spײ^g؋= }r㍎vWonY2ҁHɎyA; @wK>sK x|ܟYa΁6fT_)`NLS=QH+$F=$n^Ş&֝_p;(8 }N4I$S,rG(C̱#A*%$xǩ3as>?Z)8eH' )JE7`IDͰsBL ʮ=~Q)D! uXBDIEnuN2yu6~v(/a4eba&RFŖa̧)XTZA.z[a2D:<@'խl"_m%mt? 0WD&;G6wC:7 2׸IX1aɻϢB } %OE +XJ d =?'4ܝ7/ 6\亲z? :P<6,y-u>i'c#y:E8su@kHْǑMR#iM>_,<5_ŗײorzs㒋JiSؗaZA~ߥz0[ہmq̨fZo^yhd?klxp]},>Ƚ<{yb|t*u}{Z G ʉH$B w*(0*j7sВ2YɱO 9+قpo.<+_b} }o7Qe=.P! `r _@$+:5 K* k*e|կQ(rH?HT䣖snذ#zG(j6&b&[c˻xC+t'8w7Y0k`9Q (2H>_{;p PBkgL_>=9F]"^_ߨ~uk& xDAv5Gf1-[A˭h3wh 7O0ϷXw{LR$Vk$_076ayqe/L+YӕC(\|/uc~ptzAk2\8.5lG  2LCAܶ\M^l\M߾GP7!Y?Ϗ7 Pjr X;"j=gKVG*#Jn^](j9ѦCGkxo[/)ǜH`ث(;p20#R08?/Ry:̕DF@$86q%X d@Z@2$7ῡO_Tʆ<J&VHORլğ!unDz/Nc}MsuMmvq<}; fŃ#;KC铌WO[C+s SoV{_)~v7ړT( Hcd3jk"M# F~K2w`LfYeS0\ HJ`# *4ߡ ej[riܽucm0"ɵf*L#/]*w7 $pGG.P pQґ(H>$J!% OUEl+ClsYntI jA? oy/{J.)GUZ$DO3{oﴋi!# u]3H~;[a-&_N¹Хұx[(\vS`k GQ!1/$`rw_ _6ge\G ͂J@P}w/Ay%$rg7(nbnemh-U2,61r36vd6yt%lX(-Ɲ7.mW]Bm]qwsdvTMRŹzSvnDZ[ߖz^O/< :Թ@D HAħۥ)1 1,WOS(Q=сZ@O> nLTs72uҦ 0vɟ>N^7W W GU U3{!-TI G͡F""ЦlM#`k4KYN0 ٪vlr?2CZu~swOo3wo4H=Uޱ1Z)Yg^7tgv3Wz|sQ_N{ZCMO`eJ|xSd^鑿u܍j>(yt䬳-\,\"oRbb2 Ga>Ulܕ\Brƶ:某.Zx۝>!e ƧSއ<=(:{thq((kOMCmiTL#k3GnYH Y~unpTjɐx\pK<\!\{qmj}dJ(W5,-RU2q~Sѱ@ܝ絕ɹInh^4_ovv-q*g2HUR| m&Uˏx ?i (]4q/pu*.(iMSY3ttqqèKŅH,UW%B- sġb,#a%P  nԊ^w߽<$9ԭA(J8λ y'Q7$V`6x-t+(F* ̜&~g|l^y71t[M'G?WU _~Xv~C.iU\ D^:v35du>=f=#\0V&T]'+4M;,ħia=jClCx`vuzoJi4K?[_7wohobOH9-SU}V_&.> b_H/ccH~ԋ/nI WۧƧ*7*RnRE7 g#?7jLƃ4;Jw2DJ[8ۇƸ4\zu^y=c[azj2ho&qx&qc햲5ks3{E`Nl\`/C(ݠ8,?]^rN۵zmwfvhZ6([ŴK(eT)ls0اX"cs[HRzVH4n]P/31N0_SeJA8I"iD"Q4F/~zuBuT;2 f<]$>G٦?@7W{"6J2r>wA" ͣv&eRM$B -ʼGR6mg[Zؖˈ,/n|{+}Ks?.qW!\4a2lXwكqrr^w0 lh1O3fU1ݷQ?C;tLNL|8^E^jH.Ύ?komc5 UlJ)3 `Ko)3uTAz!bu4黗AE&As.G6qk92MBq.t6#$syQCߍÉrמ9cJ\SW+ƿw -&Zy^۟(/jg67w̭}U&*-+Ɗ jk~@](H)B Zݝ!/?'0IousV_m!ќk Ѥ_dO83_)y6cǹI!v&jfĮoZ.َqier}4c$#opQh]0\KВ8Gq:Բ95R:sYzzyH0$^ spopu34A[|:PrSt<6|. b}]wu'Fy.yIާ9"{HmWشؒءG8Y OFn:^# q5D},`.R:S;< 1 .{ =&SJH7N[z5@5BS^| ;Clo,8|P?W[[|H8_9q`Pru}mMhq*1'9Y`]o/)z"?(^09|欫N4eQ7 7 kVeY|˾&ISܔ~ 4 H'IԩmEq ʖǞ<ś8kKs_i=_ R&8yFDM(䤇ԛ 2-/?սK uKG/v6vf>9I}|~F}'&NwW{^Fl\0D~i9GTWStIoHd1t͊q~$k{i;:`0ߒiy.tkp~i2b%|S,&Lj!^@!J ]d_b+> z>9kv9-_5oWl6<2w$wgoD?B /J.09?Oy TV)",!nHnP6ޮsGtاy_b e>'*H&i _0 ]/ɟ$^^] ݎN=' E&1S3xrkR7F!ڭ׿rBYD븻;[vwzO*/6a_~vWS׾!yル.L08t4XTsh wqUrԲ72ӷ2Ø9aB0f. c΀ Gf0w"~uoQ}Zmoah)fiW Ԕ}wNn_[Bo+ه.Ǥj(2; ᨵ L5Sqkc##M`ҭ<cmmyxU&&BE,nTi'}:J|Ji&)v/v3<<(%D.iNgoPLpYvJQjcIPpWc][*VZ7[ZHR-$9Y4"mLAP+BjF);{ u&FE#p]8QmLmEmQ 펿|يSe4|Nlt¤GRZ\Ӭu1>qD);CRئ-10?Łu zkͅEYzzG]E(geT,MNo #%`mOAOS_˼ɳ}_sk.8{4Ot;uܤ3jG|sEz(Fgc^k=>v \F 'ά+ 15$j\:F͌`/"1xD;}~ĜwNll8U]S޺])2?u]~#eFBCV^+r)i+24:uӘ|`5EjS1>.W#Kan 9_*0 릾3UO[z&Nguda0dt(|w½SN1Iޯַmu{{@ĺUҸBMh#f)~qM 3"gP-1hޠ! qFJޤ|:xasljI?B[?}sf}rhbdJV:#0hTJxLs#:lשB }e[ Y#w _"R.JdWu-V|>}{wdž9҃G8zb{OpIgL0'4h8l^/jU l2`VK%,{PImfH}eW܂r$3jU-ёC]C^?u{[9iI !1dіF;$qG_N#D4}9l @>((lcrw_%Z+X "-odGUp&HQ~ܽ)h\*69!GAm C)-ۗ~6_:6pߜ@Rewbl?rT|dP3WS%SgCsg!oi-a[$=}c@\:hէ{q%8m|"2ȋD[̴"fgc|, ņ)|Ҿ [i:_vAT8\_1VLvU|4~V&J۩:¡uA]*Pj{dvi}g"q#hBoCSxC!ROpd?v>~ s:ccqiYEUͅI܉b@NYsp3]C &LM}Ske5)11FO//N|\S/uʹṓ]wu'Jy@{H?cj݌)"ޕbT=$!nyr!"&>?8/6.1Z}n#g*4HTŽ0֓$m \yWELe*=ؿJ8z'a>{T)>B= ZޅSÇv.0y:N&sۋ,#uUPaW@^t;7{S k̛{q8G/7|穂¼R/$+83gpߌft \61tUQO|Ni X0XJaml;"fk3yYPo_g%ھOH;l;I-4j8v?U9U>: .sΗ,[{rkc7sΤh䪆uLF/n\A#I[P,&^O^Dl>9tqq.&wp T s%n2dP xU0t@vGMOt%}QvXfeb 1"Y۝Rqm ~4_5ӝОҞHݭ~]wQbO y/$Gǔ2*nb}8o4mJ* o"ꍱ7K$&t=9y}B53OdH\>WAV>=gZ9jxGۿL&a[>J69;3I;n8c%!ز;BǴ`I1y`CX#Շ5gHS}Y`!@`aVUpT3IG#ģkx, ݢk򑗪9}| ?,^d 1VdzKD`7)ԵTKsBt\ V]LC:  wJuq,vY)yq ځ&CVu~9),M8X<Hc[6xf V_e?9~Aէ>Muŵ\<SVdXH_u  䡰Ir R{LfL}݂;% XF#I r;Eݮ<, #UBK {Ezy*jJ[ii⻙c CJպS߳=,(sץ\-D$hDc!d:à0+ !G|ٷ}K+% OUV$l%v*'L[H7䒩 ШQ?µb!1jឯCS_7.Hnv(QԭB$Ѕq~ύv׈GegS ֽd4{i0 YoՉ8jGe_tcC=?.z}Ȏ6I +X?Q6񘴎Ss c5uIdŘ t17Ϻx_S9wb A*%^˥^Ke]-9c `7mk/~5^iI7h{4 I?j0.l` X~ L[Lʑp_0޲sU S$bC)>ra*$a-YK\'>?٥'?.(\ß{,=SuD+oC.gKg'B=F;Um4Drԗc]jTҹ2h{K 6‰>F7½Ƽbx>L_M>kda&M,@1ejռyqNJlp>}'Sc|$Z PAmF}xXԘVp膮ՁP(u:P5q{nu.p/x/)8/ٟ񧳜kE sWH\r\d_DH}dgNL@3Ս㕣z ģS  a'{>#f[Vs4"6=7c\kbӫGXR4`#ZAl: CDe_?q{@!Xo-0$aZ!˘?8xTyQ< g5Z2B+럫<9yyNU x"@&?ųE!>ž ҭZ7l_ uʾ^mrEn> NTWW RRR؏?yU=lMGc$Wsד}vDv!w$!ng)BJ9u5e? ҩqRuM ʏ5 ,,Ro?@̿Ky=аlٹ KlBY\CCc3Lz t xr1֗C6 ia˪|簝'Xg㛔jΓ 6Jp(SeǐŽRۚ&%_&Ѿ;sR?lV-⭞=CMqOą幇Y*qϝvաsSN+y[B[ɭqz: QeXuxmϞ=k&K5Jם TY 60z(D5PܴR$ص[ Z _N)-8Ay0@ P/ nh ٴ`p*~0_2{(nKqFx^z}ڮϭ\`;,krgrh_#NjV5L0^r7oM+6E5T&U쵓h~0 MpϲE1#$lAۇG pe*`̭b@Ke0,'ɐ߯:ϛYOjh`#[Wno+>q5?4տ 4A#ߖO;sM|tBTbdO2j(Zd,Db%uE|^飻h}7HkOcg?eCl7~EwW#N < axHFJ+ux+C3]D8uWǰTE3#}/v?v_~oDA_r>1#͒h怦ڛO g~4T ]扟f&+),BoqKF9dY8عʱho ,DN^ d%Iâc *{'ϻNk򴵵%&&zX!vknY~FZl$oh o&  ( S qqɾjBy՜5uul de79N0t t\ :~Rո8nKWӱ@X,^X%}i;Y7#?T&>U*>54ni.)U82VR>RvE":)SnR!Y0'TvƝ)t"ia6+<]{fNP%հ>Կ,Bfmsc[?,K'}oXS~tuoxAaHO)MC k@\s*isgG/cF/W1S(E%9A32֤ Ȯc&x=PQL*9ZPMk5hRU,p%^[C T3˜;?=E ? (lVȞ! cγ*%R!Kc R0 5X Ywӌ5c/['NWK1wİ+$=s߹}`}$[_ 1< 0񿥾!Dv;Yr1C'UjI!6v.6^f >1|e5ϲwx|N{vo\253E3"˕3mjB s-9:j25Ca:#xXO@ %QBdG%}ڿ=h(<b߶Qngvκ;K?:zIW. 旚eƤiW&Fx-;7YP0$N\SZ!댪mgS#Smg@`E,_e9Ou?gڌݜ|6٭`DSTYf΁ze<-=LqLǰa HbxdQ]?|bgtko8`hߦg]zꁳL(صG %PyFKT'FxfEeI&+ALֽ mXloGdHqxUN#ZrBil#}iӖl g_dDcA%/VBS#m@@P?A[Π|OFu`Eu@(A^;suәmNɀQ{OGjvٓ.ecϕ3%J4u2lf\b/:͸շmvWO+1J ,6υٴ\%r,~iude3.0QB92ƟJ-3:)T7xbbpa `;X ݲ,ųVJ:;-]ξM+lz9²)q>:h+UAzǍqAfr.i$cDS!-xⴏzuApO501^T$S,kV"H2ZEq-mz.њgQmP  M56 +. ~>K7h ZS qcVo9,T'R,wG`^xX8KƷZ%Gm}mkmOmp]<_r&Kf'E&^r-]!FIMU^5?jV8!\+caj!6*6 L4(쒎R MoMnSn7 G^},;3Ԧ~ĝ<;y/3!!/66vybbbϸ |׼U5}(,P4M*f%#ow x_ʇ&HVG+=PtLaT Qpxxs#phj(4wZ* } }- "J*H>)sP(#7@d{4_pesZe btTOӻ/x2s;@ ?Y Iy114Q7/ҷ# <{,h5d;^`iƃ<'e[=Kp/Unrb^{KDF=.oGgCK9+*@׳.};}犲% %펲nm&A(X T9'h Z_]I*F*5 kl96ft.`Ibs6~!MΙ/,Tݼ@|?%Nqi'ICr6dUr_[зGQd9@䋼0 \}=rbkd?Bf@T0 jxy}zA0O,fKB~Yc{dƒ[muac:_b@8kWg.q I<֘qRtoGw.pBF `  B`_)ƴ z >/R?YD#d 2N!EY툛pG>MNXgXn7Z/Se\f U urqw,i|vsVVn:ǡK߆qG YSt$.4,N)3?کgo v|oA\Ҍ\}2&+9(Rt{ڷmK8Uy?GV`(mKsp"4fHδ|kuc7#}3Cu 6̒Us\ǁ ŧeESd-9rXA CG T X.~ɓݜacKۉz6FIE[BI EF(#%̵.2~\ۇyK*J%/d~ψ#k]ͅH]3p:\8ٽl"JTD,O`}`X =Koߥ-&NSm;o7EM F\U+ S$b r=l3;UwqeHΫ-ڏ)f7eI5u5XW-xΡШ!pymAs%*0F:oXpڢmpZg gKL--|}ej@xKj*}qll,!!#&D^+~D4l&azjsXdi_ B2aX..JgI)dԓ9 ,?Y%gOKK Ln]XKXU1 ɡone׊L(oA/} [R, Lz>dM>m<;x:rj,8qk0Eޟ.6ƊfX`tQ&ٛ_Zѿ:-klbczƶGөQ 1wjVF:'U:i4BtTM*98BJGf*q{ajv< aaN"0q߬ э)/.MeWa@ƨD†|ԵZhLlL4'_])>!+akN3FisE&- L7#L]BLM4#Z)81-}RGizWn֩2+o\@74PhD5W-ڻVnZ'R{iu5jt&ۢH9Odi|p]Mݜ5%yϣ;_H.HGLLv}X|;H=n%Lqb|Ç~҅?#4Vs+j?a;Ɖ^6QSf*&+4hO:aOh].Mֻv^U+n)$KVMbD#9]]L/{|;cYkAz]RͭOKQHKRȯn]}8cىΐ٪Tk9/3k37Uub V(V*ϒv|yR(uW7g} 8eUV?SJ+B*:G=,,$5%$41@[4R}?Wb+ m1u$ix^{c[HIBzLv `{"p$;Wh4ϳ2NqF@*D><~Ъ8rhx~iesft<)ϧkW&` -r OZP,XP O~zrO넥?{x2kdٴK8?M-e0V0Mo3dܰ'(|YM'gX Nwuם:7غg `C{w~" --- ŋwkqwwwwwwwn]do?{ |yOfpw69͞FGxyfփg+pz}#Ec33/xѫ|3$J>QCځ=M$K@*W6K&4W^A,5\ -܁GOgtz_ vq{z+.q*Hڥ_6>E1o~#!EY, [y2Vk>+|e޽l{:JqISlB1e#l~wC+wI-S{A>Pd8}%Gpđݭ'ʸHdttw*TC#:qkt'އ ݊mp#_cw|nu1XͤzsHw+݊W^˽ܺ3 zKp2&r~UƥLx'^1!l8SM7WP@'O WVM+fGѡ:9V]޹2sv7'>+x٠gw }-c3ҳI7OY<,ӥ[SO.&=~.s3TEjo{ۿ̅K9&$Z '!}FsČy+6!lsrrLX<"pƸA`.cZG'cܡ>7'G؍*N#Rd p N*.1o:c.2"V ml \3cq[=(4V΃o9XL5i4|7{Yx Pi#%-%#C\#, O TH4kȋۛtb@i{D"Ӎ5;8Ւ$BF98lVQK0#Q*;6M[: jSϝD7L`Q~80Lv"lj[:1m iU4cyF]bHI}70 +^¥2)}j7M_k7OW{K|ws6#3cԬR4ް-~Gl_mUҤ p$4x(RQ<\,c+]&1^F/H/թ2V'Tvk`&$]c0^ C DV{n׀ Dޡbb;<y*LR}Q/$ !L2Vр4 5ϟbx;CX?8<U$pg;m&)U`mun1aVaah!L|psDInPi : @hܡEݠw\."^.}m**.YucrJĐAϻ1oqښ_Oy4ަζǹgnDHj.5cU7Pl(b+R7 X)da|JOfuJilqHA oT8T%,396פ,L"6QıY㸃g*ݙYoR&TcleD`Bg I[ā7_w6 r|asAbP?S,0:?025G^w{W9GŒ땃םbhc3ч?Bd| m|-r͂7 5K`6sIhoal) g6v65>V!F]Kr".X=(^4"["> Q.eAWZ%̦n [3 ;r Z0L듯KWptRIak[c`9mu[+{9f]^! mki݋2XûE~mLw$[dZ{{Yrt t. r텹C4ϣ^lφDJdX+&8f1u=g3Ykfoi&\A[0SsA4jcOc[jRFm[[SCw^-2-G&-R*{We˺;(Tgt~%Q12a{. +{2݆c&lf2巿NXUvIMV/nd;XQMbl E͙Vl 6 903R7Qu35tў L8 @g6rTL duŔi&YG~<=hmZ*:$ҝ,c ]d}J۬-9Z6RɅX灟X/y}PZ ]-shȎݲ΢faeU{khWw_ NAmgD[oGhgGIC~^, D!!Hlٓ#bfĮ;! +*}jZo;1z XH=;eK &flg!6!g)X_NVlrfWb|W37P=*or *Xc?.hS{QX{\ͤgD^ih.OOmS0Fi6je_) ȼVHkqFz H6_g i=C`=k#˓| Uh/D4Y~Ow;bXW)7_,?h&-[,u  Pȕ+}c&>ȴ %Ee@j/ݠg]Hn nd%|Lo4nP.&iUNcϷ_<pj #3y u6Cz EB"YC䫳)fOlP/3 \jFL4򮤽lMJc`V}nPo&#EQg>( 6ީwe}K̓=~4dvy{d/0ɱ ޙ*ΥkBH!4P@H1NM7‰f Ntn~oc;Uq;B6H ',t>ۣ</sd}yU5y`gSl$Ezj}xsk[Y)] `P( Ǥ2պ`)Rv<O`ssB%6]^ A_Glě|T8cV+L 1-E  ^Dk9;jmE 1R7lb\a\ሞ#q$1|AYڤWsbzJs_{±5I~Q+NkwW䅦WdP~;s˶xC|z&ٓ7ה#˔}UoDz)s$E'gPx +Ɋ f7!B/oM@?m0\ L`A54}$o5J8@˼Ů9'7s4CFHS w0_\cE#a{OW #1n!j(tX ~d**vqP.4H4KBGhݗY8lM,srm9_+QCƸ Tx&iKV-4cXo?U^ďr7/Z"JEw'1&jESGL3w¸L9t76!gfV%aie,e,yޕ3/7^WK\6K4_'XQI)-c>h]˷Y|-f^475TE D,}q9ґosOM 2V tAr>}޾tbq-(<c8\dXxDԣPw riZ^n(}2f+Ig[hk̈LT LjL{ͦY'g*tzl u{4^UI@Ԅvߦ8 +N TcAp<{ȆPY 'J~IʥBᯙXӐ)4$^" tA :yt+d7Dёܓ}emMƯLΛ6 0׌p ןu}Y1$)؝Hd %FȀ;c՜N5OV1m5U/$RY(f($'t>F 7l'Q䋨HgmW 2VzG:ZQjzX-kF.T{2MWKGnaI%*,]L vZF,l*BB DObBA]K{@dAx)xǞke1gV(Ͻn~:ydv|`]b~wϞ6O}KV;q9'G|{t3N.b% xG* xpNJ-hwHVMM~hy9G P@ <{yuexZi 90M&]y|ӻ!URhedig쫮WMm])Cȼ_X&E7Yx k4Â[c[ss_uJIѷ%-U Vy~0&WZߨm@UpYhQD^T!+<[~u֓z _9Ύh4?hXwzy" q˶6vԏ򄂜e _>(Z1im UpX Y@ EAF;\{WI$ML]Ά펧oNa+HLSδhwsp:w <6ʞnd)y7R1S}V8,G%#MGn>[fzjj6qw1fTJW^.Q"ƿ^05 (jl ͜]r5U Jb+#kM|,Pђ#u_)'_-7nu-3tKzG+D)*O(Xy1li(Rq$`2l.^&a5~e:X`edakkstvtרήt;ץVe԰r?sOTƼ_){})L8a6/(vMm~iuzi1GOZ2J-W-)_@ P P(y}QO$ 'B[G`4 `]KvT+>SCO/IMV)n1Nzz?Gb4$ށѧa{nw^@WߏN~K_l%ƙb_Oi}JXnSy=t¹'G me7|rL_J(ۧH 6Zv# qLv˚Z3$4_dj"$>k8F?gwmYnHRfsLNXAH?dVm\xgqS%ڹfLVr楪&y[G3&"=g,|jKًa m|WE[a0eWKdU)0Sխ8^U**AګapeI&q6aޓC܈ H 'y&5*)]A{)BP@}kb4 li|W1'Yf9뛸h`<-X͘m ҞR]|amcGqTWnW+ b-g}f-'ZRy 1¸;jDV P|&5mw ww?/ (TVJ8:x}_1ĹQ{lVj0F$^')/ݵ0D]$LQcuPhLa_b-L<]?պ]{*:t0'??Q:yŪ3w ˔qDWEp%52ewմpW5Ѧ ,cp^c˟Y Rwcԝ?h?8:,\`qR9yC1q8a`9^w߽< i(,yk4=ìۍ`+fȃI(}y~ƝgB?=:u=/>$HŷX~*joq-?P1uyۜyavz~ҌnUyOXnxٛ_>vڥ$[TJS)uZ[ǴSJ Ӧc8Ma3 lACJ5F[%RqB9G+=Es;ADSqCK$F n1!l"AIdԥFݷ7Y2C-kbeThhhZ˜9]ua)KF7?ogHo2-jP4K eno1`nmmt;ZgR(F=~&jC`^RŶ] qjs5%n)8Qtg);0 &C27hH$![srZiWK@çf>pz}w/IyrhBRoqߴOwSdt)0K̑՘nMNpԲQqL|0O;N!V.Z,](o+d%=Iy;N"Fc)V+N$^=)I21;1{b)E<Էz[s"4 ,.KQm,g.O<*qXyrdClJr4&E[~hSr\*{L Yϕ!!wH5FC#\ v̎^@\}n\[?4MkɆHRqڲB ꓣṊD dQr/,fS;DRp4q)9k֭/kYg&,m2},#ktS #$#IJsUtg}',<\lz"4SUJS"5l~w1{. ;hyS "m|gNBnNMlW]U'EYZ*#Fm(z$[o"RQ`!7XVc'XxJ7H4G8EܳB)޼Ϥ< ?B'#F+%j52wr.6/W1}iۤ+$Kf^B"%EE>hg_ X׈*cwƋ w< k5&b<%wspxz-k{ MK7'5`Bbu^~/m+&]SLӭdYY+4APP'X`iaa uw=7sٱIth;xr$qoEe2- fa/=a]-F^w߽<)|ԿO9;αU7*`T%^m1A+:ZǫU캩*־f]uMbg!ޣ6M*yRJ "xB3^6mwm_xr/}d,-SoW܂>|[%fyk]KEG?$az= 'L[Q@\$m;İ48g2'hйmE0z5H"j[cάDb+EJ %Ļ DE"ʄl+x,[lz> ʭ*P[7*ˉ[% -oh3* ያ~Рmm](m-kV`: )evt,r[9owg1N*1HLvJJ,.ԷkROYi56`\ *-ە̼κ?,^/m/1JkIAܢcgl.\UU)ܕ<G@tF3v`V"uڐƙS'$j~ٽvxu%mO < #&a#gF!Uɶmú% ½_ 64sWU U VW\9 _qqk*eKk1u8/ GH'6L"by%ZdɍL}c`r(OE5'۴~+C-cCӜ!v8 (9 @dJ+[P (Z JeA+u0 溆Zzg P"q*}miЋ!mI.Թč9""9_3o) pUa}w+>wjrub:X!  DB7 MN Iߟٝ&\{\~  QFAQۺ~~`I]$?|.Q÷TIz}h}0,[_ũ$Μ63X|M!B8P.% 2IŤ_vl/{Vm&(ZxQ;OI#d( NRgț 4_xٸi|Ijh5N@R&cN48 !Zbۙr1^MS0(axtꔵ-7lpڛ#:-W51s86 QoIsz~jt,6T.+@Y@P3A)Bh@,RhoiS?^VeBKoN)p貢eՐ1~5^4ݻA }TvJ2=2vMCp](Kyxmt --ޥ-/nο@,?~qXr#vk_SrF>kQ ڄɠ|(ԄdZyv|`M-wROig=K6B.[bh bey]C 7 -w{ҍuY.ߋ>LʾrmR76.Da5m֟jigH ",@@xA4z3MaξZ // $)A5 2 7+ Qdsv%~J)%^<1L=Jtӆqًy0xmYS5+%Է:Y6,Y]xޘO#`&۞M"b3Yt+SKWt.;Mu͕gIߪ442+/ &⢩`)VwNhmf+keI1w0w1'~q_UFT̗ wzw>v58JvoS^UMX*wWw>p?i3_\I>-{P _쇀)sd g"#.Q4vq{YC$ayٰ~ 2NV-6Ͱd5%ri"% UJiVP{5W{DΉn|5g*D hE& e KNȥ(Gh*W $@n7;4,-CRM%`'aT˰W{0 Q9fʳŀ7t?AeFuVm-vjM^k/Y:b~_ "|w,V{:%CM-d S,mc ?|q6SE&'gG>NwӉw41h@c&?΍YZ Z8ا>ѭ>)Q1jؗ'NrLaE>Vj= ,k-;F![F•[i7`T<bb¿ih@ K+kʣ7wLHtO}0Xfhy:Һ$\1£ި`_R >Oys@0}J}\]#PV(R*̛T'/ǽƩ[jrzbH7Z0[Ng91  ?A4JKa=B]%QbKc,8 (B3{k%u,pSqȖQ|㯐3v P4qu4@E텘tz8U8Ehu!Y|=G_$dy `[{"5`GoUj,&"8o%K͋EG{iz.I{[kDyY Ī>hu]w]ccUsUӤzQRbdͅh6mqh2D ^z)Kp4,>U'k;tJ0Lzc+4bF>(6p)̷ ͗*Υͅ8:'(T6IEV85zhw$$-%ǩD!]n/XVNIf0.2/Ю!'$t11 *%;'$k5k,i-–f.=Zx1G^X%Xbd:`4dcw|mW"IKt$щ7Rz$ qQ[NLV|fzZkq~bgEK@Bf{4˾+@עNuc s%) e%sMiž[QbE?W.cϞ)NQN_qley|#3P M@An Ю;/0W_~iIh\BDFZx9;[yiGdmBm|B]b-TRi'FWYc` 78[rDP1 uAC?jS!>|FSBcx1N7 }aM[~ż_(R=,E+6A?'ʤ:IJs&aF|Y{{:]g~d|GjL{p ` ]h@4kq8,,G~*eSLuש .:ķV05(rp Niv)WN^*i<b2T%LoE5oNk_EQǶy 'd95!- ],V0ѠbxoA!O`?#\aǁ5nFҗPoMbz{ {yw}_Ѐ†-үu Heq4|t%Nts yp'3s(ܠk\a\`=2;yP)6X}:l 2ېmw W??.Y %(p㜫Z>|u4G}1D)&^XT ,￞9:40 ].`lО~L}HhG[m#^ӥ*55g%_Hds+][SWmحNh'G3#W87 YEHoWӘW?J1W7jqHPaE!.nmkXo=Tk;RpK~8&( JH7Jtwwwwstwwytwqp?33Ϲ}vi 1YAzcoN<+YzH2 9t"2"c:]z$Y1t!?YgddHLfG<íV?6<XbgG7ˁ)n8pM0"8a;xHqͭ-.C9>kut2-ہfYGS^U!yN܎A?_ N)TɹO0V'@1N{x"Hضp̓piYE[mz|>V/r4yfq?md>fj|A=? G_"X6ß뽅(Czp呗zaU6TWwDžgY(4ƼE ?y. ag`Ջߣ4,6'..([s`뫄Ms)^Bg2½^d6c˂4H'G76vV89!/nbb_>ep(װ,{C7%-;,} dbkCK;r'Η;׵==/ gOU0/W,?^}[w|щb;y3k[c 2Pʃ0N& 8@)H@y?V|n9#N{T[/.%Hmch|_uԯ>s-'?!wB ۲~Ugȯ&$G R +鎴RߋR|j o d^@  1gדOnݞ<)&{%ϫJEy~@Sj\QA&Oi=%&p EP]$Gɔ `>]|ubuE&UcLA/_!Rr@\D={|^VR9O}QRYHC9^©JAFHH]O,>Z.tt(Oi\`mY.rւ@x:({iPP; Xv.Ѕb9ZݡtRu10ۦ/ 3Q/ eo{2WXg/9gW0D'M.+/l0-"=3[[k-3V$[}/jw4aDSkannt2Q=oGxVCmuwGrmipT|Z>^KLsc~T䫚QF15?rj%c"g?˫w7rnY!( ns]x:X'o5^eѼĵ5C>LӴÙu"s8 $sSV= >[` 7,u|IęWfcߴ~A, WTx_t)ܽxDb$P6 NVE3% 9-Wk/=HRZ`9@ɶ\;(5 xsps pa.Un?"gv{qO`T6 Z_z g(_g9:3S IJ![ѡnVb|\3FQp ?n!B0^X@צSKy^5\e ( *d 1"h9^_\Vn8;r/ܣmse!eAW}tIAV9G{}}-B"T/X{x3$KU<m2廊7!T 7*ʯ2{6saQZ5%+JD;% Vr g3.?06 [ FW ЯB&R^&hL*YjҖ>qegH72Y2;grJNiQtNB߹]W_<^38`!>"~ԫ[zgVk*#5_V_7% h?q;V`*eSgh֓Roen(oijZDjVX70kNc!ڈ;sBfM웱ZRX .'17 PS8!#9@"9'kBTȊ;go"p"p,`RASrj|HpWjK|h N`{ >4ik Ű.CٷyjDP?i`$- %8>jCHrQDC>y @d,yJm<*;nLt*(UJgv·zk 2 -Ye^X(m#%伊p.uFjCWхxX;YkGE+ĥTh(&ĪF/GiFiE)$gռ܉%< ]z<.n^ V ,j~yAR[ Z 5U!4>9p;&`ߴ;a5sF=)հu4f&ve JB'u%ϫJEy~|Q'J? v:|-|ms<@p&!$tUk1.;QmR-a__J?_ y\tk&g*`]OH2xWiY-yMᝨ(TSTԉ0RգI$k'鉗wB]Gybɠ6͏0YPG}8Nr,и=˰YrM0:x^B[]EЖ}3E:UF,'F^`u\p;Sĵ_ZHKs$mWalC&o.\2BVm:`~֣5-s ݆˿&[WϾ6wGoPo@`-?X& EyNZe5f0B>w~-[T1i,{?$@4'shCGMI1:jnɯMi=fg~=,ZR }2CݯM!j܃LOog6MUrw拎3Uz*d1jS;.ЦN2t300 ҕFNS{-޺sDA_;P>ulŚgf)*[,D!{cϼ{SM*4 ].x~_ `yc! װ\ɴĬ㨣*4[SˊWSxKmV{ڼt= ,BC7C$TΞv+Ditn>g.l`n뼫G<<#UW]u%<sG዗pޞ¯Y^Kv=cbmD ȃ%O R]f`g[Ycsb:SyTf:Nl iGO-Ym(!yN SszK.bk>ٓҝ#,9?-|RR` H3nYb' ֠8ˆizR#[,<`zo?B 8b|܇fCKlEhFiD!գ#aZ(C;p|֞>\u0N6({ˌ6* f~>gN0uW!&;#A_?ds͛&7N<)u rVb&ϵپ,]xa2㢣ڇP]lbmKdM8vN:ґI%(\R]zPYsėcw'k^vN~,G~ބ"426&>9L2Ȭb}wH=u]_ʐײq%wC%Uiq uӓ K ,ٽ́#]'C'_AiKf_LjV.siA^iR扎us~cѳMJS` L3TqM{.=?!^iHxW5SB!3z.*=Iߚ_VNo13Xk|*hNѷ&O"IVQw;%8U;qT7‡uȡ B},A%Ot@/ Е<+yH?&?P_{b;<š%Vد@5E:N)|:>_Wα46(Mne:Z194U,Kx[bJ񪡉ٹMU+=_ū @u"~CIJT4oV^+#S/*YW?BXi ĥ<2ӌZ.*`kBN/ * .Cv[ M G'~|=>-֬n48mEk$eJE' Z =+އ>-* B62[_'?փ")G%rܿn}LdX.(ff4,u?6},-vwmnGnLGtTWW Jg+$ED&z& 4U2 ul$xZEL4UNI܉sltS/D8Z7_x^0K{[4!uݱqmq uӴuvѳ ௭f1]%;w!t) x([ehCuU3{#Wg~Gz<Ԍ?)ҵώnۈj KMZ9<j-tpJ,dMG"R>gbM;\sK켫BM+C/&>2^ 17뎳L\]e<ő=lڒѣV7_31 ?{60Ύ[x 7֨ןK4Hʛjoja2$0^v~|nMRN[Vyc Gx_A+Ӷ9OVbqYzmæ 6~^.)6Z ^=Vv! %Zfy 'UF1ߐ ?=Im*Ne >2{lqrY6nN.IfAZ=*Dlc:M8e]Ja#ջ1ۏWh fȎ|az3Jlriض钔 ?<Yz`LuAҨ$0rJiYAF|Z5VKǑ!Y=ሰ@inK50,LUҍ3AX[ _rkeGtvU0FLBfѻk+H㛓wG=hXݾuLvyZlx*ZΣ,!LLOMݬ,;],"8MO%?%E"QS|xL [J&8ZwZ%!h\x;"*&0|zoehfq<bۂ`ʿEA'`3;~@S Q/G dzբ{e姍K}5SaZ9zގ[xRa(ollk(kh 5igݮ)?vg%çvBߚxf[֖Lġۉ1W /u%Q7U1-8\c41[;mr\备^G7UsHF`5%R>(> qkPOTH18 t> 2 _hpJq7|KZiϩ+!-G~sAoFʌ] E7Rghiei)C|8MErL5O3]P0jܝ~()h?u 씫bj!IMn> ׽e}>Q3W0&V8&zF8Gb@tc@(@7O Gk诨,J/fߕ +A"VH]v $R(>Oe(Ҁx3{tVk[-- Vצ YNE!FIꙵR5% !FSb녬ǝ§ŪgqV8C}k9W>?_|E5rzظ{=NX.(rv.̰G>K|4.X7yfi㥾#=^Tb[]+ Y^kgڕ ٚP&5vbqp!?+Y5,8⠒[Z_,jB+rX'ӢW]P$ۙ5@0]ʮ]/Z'(M#N/N;$N;*N'1,'Ⱦݳ&o{cuvWV]jے8.#|Z$q۷["c0X:#[&&"{Y %C[ ,{{c,{|qP~-1KOݕxxͩxx^.VNj%3/?*XYUs*WV;Qd|g2N>mTaI!r^htF^l Xpv`F4;$Ue@O( -64( 5nru \7L8SJGfIoHω T!EP߂|Y^{2`n͵}Z&ޮq%߁Ɓy=]n@7YXzIg{lX'̫V Ah'?t5 V(4dd;9'h&M)UN=lC}9sɪPLSvjnMPF<5KyZ\Wl5E)7qulQךsݺ0.Sf_Z#T7G2UK-^Y'Qej1_ Y*:9q_^_@kQMb"0Y̍}RY!qֶ%F .QKP) "o^ibWꪫ'r2b̂y?#MM=d8;ч=K_J[9smH}XZWNplI?,{c6B2V֘`LVo嶗`gyU 2;@w9d@pc1`++#Z\aH|6<D.x@2i!^)""ȿ>{!M허j 5hP㤓bJ۵y c賿MX5>ު¡QFT*׍DǏGj5#LBF cF5?Gjt VDϱui6D;8w4kfT+%d.fp=e/h zXyX{X{89&inE06#mXCpyHnhrXdQDxlN{S51[gבF\p'CfR\޼LɈD%;HRAL37tA6ى5su.o Sf{ hF2gCR'q䱴6qՌo-L vtWOdѯ>`p֢I赿.p\I>Llq.^͹'}+oPޔ&0Z~%/T mgէYلu# 3Wdsfnwq;7Ft|Z?89$i?8Uߏ_{@9M2rhtGhTu&bg,~GP4soatyAKSambj_ܙ3NNێc1B eo3o%NժB|d $tJdJ3Rt<|9]~κe5JC.v&XĊiwxbpa>a3Q˚He{ C݄ؑ_1r鳈n,Q,S.ktի UKN)`4!T^k2Sme猰30c(ETl*հuuh_e\BRU,:u[ P{$2WꪫE9%ҽ;RvA%H4Nȣw.&vgvH{5 hNpFhESe xnV*Mr.6͌ 3Yu|I 1 #YĻw OgK ` j `78MbNiɱYrK!]1]mVbZeُ^=:'_' %' ; Bu?ͳBqڅQX@|_qw:;%\8@5E-?{{Mh$J?&<:Zp)׺ gRܠۓ0.O0fCWpwL` }Y26.*6Vf?J5gG=Fr2̧բ`# ~Ǖ =2G\~Oh 8Ïc0&〰[TS*C}<2b]t&_pxXW|J{ώm A"Rb͘Cj {h{;dז֞I ܾ_TpZ`hr,RmVS8$6#G[-[g)e4;͡rg+ڳ;;;?=G' .0uT/ƔM`y'댳ƅHⲬn';$cB. x 2܀`߀?]axDže\>Y՜ݔ7x9_~k&7bE@msǵ/Qq*`O\3[!++aŧ3pZqŅ X~jvwhbv' |pF8Mqn?|K=',`NrJ5tÝ Zv_0sSt%|T0tvS=vEɋfŗ{F=m R7ĭݻry)cfiv?::hUЏ -S&*?aZ_P(OvHgDHڋ'u+2yKMǜ!TĚ8ap; t[.{.XMfar胀)XvUc˙ipX7?j]!'Nl> cŔ=$wJW]uՕpwmGIӘN24ɰ\R_ ֖M?jE+-5;Ӹk_d)Wvjdkdnߛˤyә^#)S3^?>R&P"D\Fk6մdWvr}FRL.bunŌ磺\?Π2sd~-`]` sUB>hоU WXyX`\VK{'$eDkn(\۳z֚ x BP8HeqH%#>!}%?nsꪴp8?(IqxxUPjJ#Or7<&?|W5r s +ɞəRN%_󪫮NO~窶&988p>ZVD37To9'OiZJQBH,4O1CJzER| 6$G}-:٩Oݟ ު Q-=yʟv |FEv}M.ibif~>3ptiF sCI3')BoxڢPocg:,8~yެOPazS8-n?>zrkb@:C$ IQO2IsxP4E,gcf[bdhem~sA$t.r=S&)8-/"=W.o4i;.*5;X.yg^GXHae dˍ{C[Lm ~m&ckN'w]UYdߐUzGvopd鼯COUA2#g!aq'r!uCrA#^PfjmHj|fD^ДE–J6=Rt(!oYV/V>L'ּcbÝS=ޑXnԻ~jTlɖ#+PݎGu7NJYZ!< VI~hjD5&#YY$];Y1O7])n=$[rH5u zb{|0U>Z:kiYQ`F\|I H%wQӄNVg׶ 3UcvbTRǤ j=R;GxSGOΙ0/B#s6w[Q""k\ӭiflp86 R?ϝ?n`q`%8AxO>(o;AWEwRVGOj]]-*ٺ'8mUfzzGϰM]CGPUT*_z:4G34C;4I7 c뇽ꅽ-)LIhfTTT"\sz[JW]uՕ {<p)v L))|A~@w{ [$o#AfoS ЬLЮ>XH!@Ef89dd 0n@c959n6 h2 C>vDJ_d:clqC>;'8e{ 1DtxBrvpa nݕEÕ;^Kϲ #j#Z>*Pb-Nqw)mqwwwwww A;!G bO.gL?JrLuLxL~Lw_v {ks_CYӋ';g=[ں;k wuKĩoCUC bCL&Bo#1JKՍ2 0 <7>Vn;켻P}C2MHEۨfK.1oܡ"_HXV,L ?z`DI@@ dE}2va|OH.(yaUa1ֿS8c@nE "BlGұҳЩ~Q`*{Yٲ+{A}>כgw6g V{JF"͂LCMB,L@x#hٌ+iO:]S̕s4 kh{#b^}>y~F2Z^`Dԙ'¿mH|}B 2Ϟ^bݢ A#<{Gy/z v9q.M!o^voS^ D:%3?u-);4t|fI㭶0Ě-Vhe;兴sv?:7+h!XEW-upֱ2 ?Iw@l~fu=],%`o$UQF=1)9XoǏoW}YZ!>?ؿ["f,;WJAZyg+;MZ)~:)]N]6BOEr삿nKW\FV^8Kט;ݴ{0ہF4jUpBެYyrD [?#vM%]J|?aU$^e:I5oX}?@7٩7}yl~t-hU]sݝ@>Fͫ0%ˤ0^̍I_'Cz>GOM];E)CQ0M|/ԩ;(NM̌|3dL:zBi`(F!WQ*3!% +]k(u+P-sET̄m:iPj@]O`=_\{$tkg!T'mQmdS\4)X&Rq*V Ux.+1bf륃DK@:OQȗj)fK`7j2(RlQ6bW;0q=w1 }<@ɴį(ps!ާ0rǷvgڝxKN34㧝`⻝XmS-$D6qR&kɋ`zV%5ݢ }Ban,ͺhɑtέbbltxϔ+Ͱ#;k/]+HEۀcȘIҬvDߍ,aecs~@Ezvkbcrm4y# +ARN=6ɱ.u[d?g#V_T%a% @`#ڎ^L,nJ={<$~al))1aQ^ ՗1<[&qqoN_p)Pvg}-wFR넇gKQrSuixqDa$T?A7D'u]3{V`@ѣM9 6rR/Lay?i c)`A UeYjjmj-j.+>F%wTN5n/zư&6M{x iEp/m}V3{J>le q." ukY$/J,czʄ(aIoaoV_3VuH& z%*N N02N,jY^xmG$udժv)KBE[vwYwi`ovŽ.VV,em;N%,WFt#$iWJT΂ [װ_y7r M始Z*ѧUⓃuOd5ޭβ=%mr%V޾]X QLZhiQan7S8)?Ze% 4b4K[oETnJz֯RjӜFVo %2AmVM1fK!z e["i|9͕tv pq  sqvh  vXspG8b,Ƞ!WVJcXNUt f jŇԬR.;wm05:T A. Чy(}d ƑTPvYx ]8mfz ʗCCT4s K?7oQޣ"LD+6;A<{}[+O#D\{_2&'ˌC+zNfaڟ<2ɑvYJ$Eاh6JLKu`3\a\Rz FNe]?T@y{hp¿}N8{N}dq{Ļl>֤5( k6^,bdu5eP]$6Eww`ODB1 ؐ_ՂdSmThءႵK^F-(eB) aqO%6/7V^OR^*x%|vggm9+pu-jOKE֦w\Lc_HÃGny%S֍2G*:z߰m̳mKc w#5ޚC+=&0{OA mZ49ypsfW8t\)'4t[7y=^fGdhi&VBY#QHOt+PcwH5/,};l*U餏$7[@W38?J, 3nMj\bi_4!7+R\2B?/Zk4o<#HWXm!*iStQ~sDm{yD9̵#rŖsa9Mg7ԋ7ͷ<ngοe[Uh e?zTLFc4=Ο[~#:Z& {~rN^b#f;L FB' 9>˜=u8֫?}zTC8F_;#~㴗jw6GMINSxkRю{=VzʯRMC P22:"ǖY^+hPi6X # `/$_޷=0p^ZmR1lJ J̮"n l,# 触''{8cR؆sI6dX& a\48n3ɻ ԛmg%IHxpgM4)ʟ[TKt3GDkĚ~u!qNVs,[.{{ks]g~e;|?(O_^N ~JlM/̠>Xf {wGZ:˸4Ҵ=l:l+6ю1KPJ)cb|!9i` W*l!6%6ް{ϸ?`ť\v*'?/(Wd=]+%닄 M~W,,E!ղ˅*+Y۹RWEb2n8adBǙڣkZ( :&Db_pIkVtQVAfA|pe F ~l6cٮQS,9>>>PD*vԱ_P ?ũo/Ae C:)C Xֶr_;+%ߕI?˸5;VZ5vϰu-r.6 Tn)&@M=pg#w+oko"mOzU9BcE7}}UO*] =!ocVSg=i ^T֯t .dpLJtXfa[+^<ì~t(oIi7t7' SC?'Z%e]bbely]Zyq&BFbpv^uw^@L!KaD\+y]|F=أ<婡37)1FGG?cD 20=92{;"SV4G4w_z, GU%Rq|+H1ȷP(Bw'*ٮ0S0Qw?0^]pJuXx*.lSS5T'$銚ivZzY˚@yUyqXHYDmC3di0a#.#Qd`KdѫW[/hw8p_<}Jƥ'HHC}oQ6b,Ld" 2`xzƗm#2]qpi)a13 =3uċɋOW7b鑢&9!<ݶ! ͯOC>nf*#|o]- awzבhhgkԕ^LGR@ eY>A SZe^[#3C]3=+={}4/ @[[ŏ'T `\Mnm 4 2`r+#x2ݷ]]R{4[Slɯto<1P+(;/ oJݠ?'+(VEFďf 7+ͦl`+{s=cE}0![cjϋ!/jwɺ7(6gc;T o;W^oF@1ĮkMG/}{t[uN 9a7I{e}{WYo2M__C;f6X5v~Vu|r SRl;P~ڀ_[-XS 0 npKDG/v[ kT??;zzNY`jw@=lq43+p[',G%I$A9%)#;j~)y:K=ͮ|*9θP͹R,)m9g;٢ʯw}nSLۭAdwኢZ8&BQijJ>Iyris*u#W?pSOqj%灢ްuf7*-\O~Z=U֊MdJHlyC}˝kJߨFiKSSe5%RzLN2e^ģ<{Gy/ʓER([ N)OysF,vK=+QZa6 =6\lwrmts+* /Zl%_8*7z'Ê AfByKhןgŽM#JLZ] &y CQKj{7 j"b?vsnLlg3)J0S$X!O~o͍ǧchז:BAMv~PQ^A2yb(%Ǵ_}bÍ,koS1r/j<Ui*6KtW񏁹:E'FK5{*Fi/fW^ͮ~3w4rWqb?!ޟy;ɑ18;g v= /7^6/ߗn9?`T(XfA9-Si`X+q:AOEBHӏ' 1"1Tw&z9s)8Z#KbH\3-VxgƑJrłxk+HΗXWW->^.g`֢*[Xr*ZfD#L+]BpΛշ+=!V]\ ʡFse8coWgˢ`didYVRXɲ`a% 2\>[`oS״gFud|lW*֗L2t3.2 @.K 0/ R-Tߩ]JrM-ڞ ɜUX F mwcV_Jz (X5rT  fIlpʵO2*IPN&Gžʴ뫡+ds%8Lv>Dk%e(KWJIqheG_bpQ)YXe-H8MzYMB2 ǂ}g25Z&ޖ6a> _NpfO>;yHo[-\3S6pؖqPΖNDX}S)oXʵ'R;Doiì+T4{Li?8m[/7W?\Os#`>cjmYeUܩ 䖫j !r[ZpuMi^Fj;<{Gy/-GIa!1+f ֧7Az=ИIǿ7#s~nW zup;tqw~ccJRK]4&B之er1nTzZ<`E2jqo m}#c=D!8 ghd0eU3bLP־o݂9>Azx=*SLg<~ nAȷN?ś,<"e 7EDƟ-׿[#H9kߕD2ݨ[!EjvWhv'w:EwsV<-C:i O@Zӿxq7䛊`جx}9>GV/*STUإڞm7ssbӓW ~PRP 8{ =$q5̉%Nٍʍ3 NpuWft$iO&@  nYdRmv4+Ծݻuk@ϴ!ۂlW̝lm0v 6W^oUUELG/b$_^aoۙmT;`4)S_-,pdǬԵi,;ݸ{^^X~S{c=(AyP@h xU(*NA(XO;H`ij؁2hhѩq]`wwROnb56O,r o~Wn3I P2Q(X L!Q( Tzzvvv~׊~Ѫ7'S"`^UoP6\|6eU8at+V<"xqq{rzvG٥9V~D0B09>[NU)C#Qv(HK Y9ȗ7NսΫEat7]`+[M77S r~K,["r`A(As3;)eT1 9YD'qQu>~GȱRvPB%vWWw6k F-K[wӔ(bw-,Z.iPLAfkd;C3C=}5zۂUXFq"#͗?Fӊ}E#9_E[zjO%svo(DYαzI^-uBWXwhwhw{hw#k $];-[QWF;KMd}3oa4''kGHx@h0,~Su=sT{{;;k,8 !)%Z^j˩[o@ъOu(H:HfU+~ɣ<{Gy/Co/c WFTwYe(|B 97#b$BʾZ01v|E^ɋmΖNT?f+~b}T;DpuzkU}9fUR)۳`U|ݰ.P3.Vm!) 4`olVWd7VR̼^iͽTvK⩕ {rnŽL}̥%Y{u 6^DIA+lF<>2L*:7dk4 *f1&= ;0(Z4irbXj7ݗ wCCm,]U\MyBu%b͒C?f Z["]3쉟-3!ޛzqbgR%~ӼW[{pO=\Uыa#Sl+UJY+t۹3Op 9aM=*oR1YB]9館[OS1Y sLףXME{iZKERX[B;fwI 8b\ cLasIYنIl S?ʭbe9玨nq n-mf5P( f ef.hYN[ק,|u}V&(ZO@&$ՌeI֕"TF5M]gt.H,wd/TљA= |Iفϥar9~GcEeC}2[-Zӗ[v{8eqtj{䎨|9h;x$\}(3In!?&*>PBU ] ' p:pͧ qnzx3;"Γ#=e!XnT؅qסr&rd -uP. /d>Q=أVz~%t6.QRvh̅n밥|V4C-4s))I#O5PD'Pa(o@X40Rl-!<>*ZVbA!~t{3t1ȻlyK'on]j  9N?J>NHXb*殪fh;Zjg԰9~0'E5A ȹlxպqBZ^S,W.n_k` ͋{?kʖt]GBEY0%9)1¥%UmuDYk1oPhDHTwkǢ%SWpiZ/ԻќiEΛU%؇d؂\PoK']4IcHGbejɑT:_;́/:G3]a)=v%QtwH{ wG|)T ]lc\O+֏RqXrZZ(Z衚T/ؠRࣝRb8pP ߕUȺ{JT86:2)^s.PwΝmۓ>QE؆!0^.36M )WH5v8ZL; ;0 ޴6HίR*l/+gV_ I@]%L@0Pd!^{:`ɾokoo0.밷_.}a)[q_tY({ytĹ٩{yeP{+X/S Q)nO)vekʵuF6M^wns˵H wWk.a]ܚ|YV k̭؍J1'<)K)oYζ[06]ҘPWAa`#M4ٗqprp๕׊ˈmyQ#{!l4O蕙煓홟I<*$Iiuܷ>>WQp LksCbݧ O$NAhg g8ZrBh_P>mqU vsӀfpvobSKʇ9nMH }/!tc_R].H`}c=(My ]2v [^Y[]k'v6 ]!>De|x+Zd|tdYзʶj`-rBebbs g dMkރ\)gpPʳ66rύ`c&z"Z4*^;{ \YV+϶mZk> i)':5^B#{!-PZXa[wAf̯l}SO4nL%t#Lg}77ҭ+ק^:dXqI=E`~D#߂XPTQ\Q2 oKp+')'.'OO8p"E0TnQH=KSaėKk˿us'TG($+[m[ȟE߮:i&-m?O]`ޠ&? ﰊpj'/GB?N3^9Xz>4??d۱ͧ8+t;*7Bv_Mz|rs~M` AkYoZDBg~k'<$!|~JO%J|c]].\`]b\\#VN LwrU\%kۘ+g:H tOM o %>w)o)v_XL}X.nYo5:Ͱ-wٵ'm} هr׏~ݏydiCƄ$ZӵoZז%EFXLMs@ƂߵuNͶ(q{`x{> UK孿mQtpzh I0y"e:'?\,|;P?|U4 NPWSKق 4 -! ]0bl_|*$mXSr6(qd!4r9j A׀;!g7馛n(ك]JXede7̃_1)L)Xz^UVdFě d;"$?Ov#Z#p6ƻ :vꚤGR-/BnQ˒Z7 וLa ϻF9渕BckԻl}'o3W\\y2x|*xxDS?+[ĹI )򍶑wbПۢPf3vqj z=7,2W}nTΆIm6Ax}_Lc@S}r rs6q+4q6sEp QBp/o=ʠ8M8\cc}f1yuuGȟX+-C2dc?_6fmBvXelX˓ʓʓʓU}ix~n\br< vXi?fXp,{>Q.ie"oTiiPgtȩA [ \Q aD 5q!v |sJY\í/(ꗟe@OHTԚcDBCʩFK{wi&4gEćj8~DAhkfΤecW[=[°u#a.J£zM1yv9Qrޟۣ9۲Ts5 1-NQn?YZ{x%t<5KWpo *ju 9u)̔37ӺX X5XlWux;\%vT[Ayd  AK5e6kw\FtE:ȟ1)&w4WpX,obgM(4dٍ'{<"1lWp! BCjws|nJioiʮ.Q@hFOytYhFgr7dF3``;5Fz=/+ 6`mKoIYi  @In'4M#ۄLE-ְ1CL's_ #0tAP8iezx"|V~N{>Ixe n,6$F7tӍ<I HVx7X9_/pVq%l|o wGdijbeUjXƦldwmmsgߴﶴ/Eq˄A/f>ueW n& b.ɑ_5FvErRzXMߣ\#9ַ֢x\lrvy9!&D+]p0Ƌ%=m :QAB {ᴝg+eRIb Fqr{-Ҿ4D#+ö1RoME}@XBF޷ꏽ c^Jsfthm30;D+خ;,rʿ.Q#Ro!PQXM$e) ;ֽF6gcE3wAP#4g7j٩;&2),*'.IjLh-w&#3oX*^1*EzM~@vJvYe[siF~穵#)f_fF`6 yXms0ӀG}3G 1u"/#P;2JZ5fޤqEݭG[GO.2W'92I B3?2cW4|~40 ߉>)iP\MEkG W1MsC\(2YrE3+]<2='=u/BbS~%H|.)f]Q׮&8ݡ oA%] @xgO)2@AtA@򿉂@9@z@Uƞ)?_GO[|wڣ4v FZC h1 4 ?Ս9LSuw;xwE"]YbiJϓO|F7tӍ<yWxò|WkQ,xh yzJ`kky:ir%Gg0 ^ev#|!asgxKdrh$.KJHl]%PP6,|V&` ;EykOͫȟ<,}43Ė{w ϸx,͂ri'hfigVii~P!`'mؠ7`5fVc 5jk$%[gldA>wIkB\7";_{ 3rQb˭#ۖ930'|[oICx`r^30 08XN5^-sG.:NV[dL`uusZI&Cyl;%aO/Ț(y5YEJYLM~}7u>q2Gj"$ >nQ/Oߟ'YYwɋf_kzgwkq m닻:9tr׍Yk'F6* BoI>o>y,O sPc;Aa$iK)IFF{jg6@^^SA @ @ @@DaB H:e30 ɎY!ORK)l wV{$@|PZV&>Hm2yO;Vݻ#G%{OBIM7ky#ϛnFK(_0YÕ{P=ͽ{|+c]قUY&Uy,v^!Zӿ!Qz<žَ?=(VhDTk}Byzef-xjo_tV-Ar~?PT|ѦxOػ~nVΗ+}g[ [mOUW(DRF rt;q1 RH㍩g0|}@,/^VncRaYT3$ūV{?yxib:>fjaJ;@ +quԭ|aJ|^µȾ-k[:Hn{u1m?8> 5J%%%%%ۏSUCۻGJbs9h{ 9}TK:B}4ՠqrvMn4Pƴ P{n`qOI+6HIWFWA,Öu V-Y~yDp-ϥMp,tW&bw`%oMэbD dCP*E;<#j]&CRMm:{j]DD./': &:.L3M2%-,Pn=Y E.<z IF7tӍ<I×UYʳVd%|h qIi$V#ܸ 2:&6>19ݵգ٢"H:] ` V `f ŽcyPY־~F/u%]ġ㸖/~ǹX/U ehXyx8y:y9;qp pɭֹg S_ꥂ>PZL9/XWő&qSw(_{qpA!Ɣp7.~a䒎c^P^'ޫ)4nL#sC\$pX6STKtvgmѷRﺹX{Km,[E?OydYBeB{HbvJٗ7cÔ֩C2>dt3dM==zXstp|e1 erj>)Z۵E2y ]kKV*75CTD[l}iɾV9"&ɷ׈vvWHckni_:E0)BDʑBj$SK# <͝b3TLB 3j7ޮ?z]+akը8P3/08vw-;SLeIfbM`nػfG%_9|!b[M2k1}6S8oIUXmd>&d+1[1^ҷsT'kfL^^qs[RZsJ::{UI_dۜS֒:+|gS=;H7il84E[4G)GMS\HՒ˛Waӯ*]}ΛkF2?9pg;!g/VXv* sw9gYj'^NQ͒̓]BP?ٚ`QbBOI $˷4Kƛk۪d6/ yƤʴì}[frS.cR/QO3ܱT 3)Ƞl#2Ǘuvx |>dO $v aYm웁!eKO29eqru(orOȵovtumpntHT+[ΚM%"q#ϛnFd`p[>@gI *V*KYqrt< 6L0kuaC%Q)u-Em?- RkYGhI=RA -uG޲;kyt$gmlbwn.v!smV{xܠ뾶) 6~b윽?~dE<"% `,D.s~fw!!끴S$6 zQ->[}|yb^EԵ\}9Q3q\[s[v] 5bt3LR.<7^#q>zTpxpilk>ɄiF^pwZ >D2T/Ib]=߄==|Uǝ#iuq 7>L#YNͤdZJ܉zu cn$?z_S1&NdY#V~Cqg82(^= yʖ7 Q qD8ۜD A XF(ʇNb6@iC$`n׍}Ts'7MJ8$> 4= T>wݏ;S{7};ĞGbA"eap.fur$AlMMXC|Js6ˉnk`':N ^`G;F8ΡŔdN!] иDBք KS4S4ːhf}V'\`0X"f):`U\CQ~9&sO5wαU/4"4fh/p@ϟ,Ɵ69ݮ~ٜbb8j֞ 6ZrX(jd)}66LmcU5'kmfT 6>Ŵ5N2yS O;T;1 ̪z2-eqq?dx9drk>p5B2FS6KD&A-WB lyyUs;N~ ǁO9M"z^:$+/Z4060|s3Dt$tQ*>PZ#H B; s(A';>[϶m>|UlmEH촦fwXL)A/L'wXؑ_Ҩ7OTlooR/7LH9`"MD*D 4vl;B[,p{ YTnm3ֳ%z;YYkx~i&QaC|E⇒."ե(HxY7Z˜N,$@|p Y(Uc%C8LYy $uSmF}#LsKϧXjxcS8^W.G7DnS>l<${3ŵ^ʿO.unM7t#EyR}ᐎJQ$ї%)Vp5|hx7@;AyyV& '(9Ss-;)uh a'ICN* 22fѹV/o͞aM^1NO(ϧ,rԎWj}tb0`gPCP(C.E+gH|bGQa4-joC슎$lm i:~6 ' 8keF4I'.1QZD{0u9vK3 *٪'.@K>Qg3-+/}Dnm#%rc=\/$֧nL  ލ#kzLF7tӍ<I@.JA޹.e8SumuY:~>n#jX$3ϩ0]:B>_cw*E0G6] "r{>" QOtjOdEGTKl! y2٬&1t|G'{ϻϔ _RZE**EJED2#,C=|jBLfU9rXub}]m>4^pPW=oTALt˫q">ɝN,G@IíKl v%;vEq?+:\ 3\a4C!;ux|*1{y߯o:p1X8l\4..z{ zJ?8^ؤb.Ճ'"<5צmjE7ac0X`0\^l"OI[e9ze`~`ԼA LwL>+ `&k|U`)2 ~vEtvp[0#ȗxWE4x|QQpᜇ+ADP{U׋c;_l;wß 'ؤ[T*N~təpr29Ы\h9X)ǠW 4{vdE/0NY##^9ϊ6}j r&$2١J;~ΰ6N6Ui@ ,N:6Wen6/Ћ;SX` czبn.\dr9\;Z~T!a؁gSA#>#萸W82(, Gm!KJ+]V͈ysH=1iQe&q-.v ;xؒW8o.xeРb4Q,dv<a6+̰e\C}tL0;J9VE88ȅijI7>x9`\0Xh1( G 7 7E34rdjpb1J#  _ GeŮ(ZtWPY.i qݮpQ؍hiaDzq) @JcG0{WQc Oڹ\epWc7Vq%Mj@d ҈UA`/4cQT|%E&̣^oz?!"i]7͵ĝ?##w uҳfn.eFVv1_k҆ϋdWׅL d)9{I[1Lcq`p1~.],_Ejg|>0pSAúJ% 9b_#ImkWȵҭ6@k2_<0Z3#wN^ieK߼YQș^0iWm+^ [褜㲙D_"M.~{[Y%}^h=>ڠ;o<;uZqV&Q?-bBsfQs7N|əv%덶QBm^SkqJVcE|HޢTbڠԡ7=5СV;;]>7R>0,$D:/KM_?P9ڗc}UgtG .3oNrJ@W3EQ!ixԶ N1:/0[-a8Q`ߡ{fs^.8>kG4[m|W'T0`WLLΨBxK~lOcif\BqRM#Wl"WOc#ۤ4[xm7Λ(XU#XSFi9\UN WFA%٫ G\icRzھ.B11!->;vG1JQ?KyR[XkF OW ], ҙzspԶ OҬ\.SLю"8z5܅>UQێTSiB-AlCs3=K9!F Z9eDI2fr\*p*ǴnyM7r&ydxu8΁dV^ ?g(m4m2m>m9m}Dm),lUm<򻣮|PHܲ7v#>]>Uy5>Ob80nR}JWLAey @%#T%cT͊-G?ZwoztvW)ރ׸% OPz]'uƴU5G/qW!kBC0cاN|թ444ժ4o oljwlVҲ& N+2 @127%`p-Ƌ[o/'Zy5ɔ4NDm=VN{zJN\aϲ њMs}Dٌ-YyrF. QҡRZ56|#TS֕f2F} ۡWIa#"}%*wI|ͼolw;0bo˝?P=zETggHTi ^F' d8^nǚB}LJ: !?44dڿ.Y&i iѪiaii>6 9lwf2up 1rVʥhG@{B;% ?DP{ͿOV]-7!9Y"o7gQġo^oH^o٪I]N!2miNr~FV!_T⽣l ~3|wvT d^"W'3`=| RkWݯ,HN!Wi+1 ĿzTl=xxK_m\6m/m[xW)Ycl\-u!wf6Yk[<ʽH3&ʽB5Jc˷~~v4O Kx6z|R"rCŶT1U(F S-;l@k%pH0wZʏ|O-m}Coז.ʌI yF7tӍ<P Al(qjSɽ/`t1XgX3?]K)"e(9ohZ;J%zCø:XLqKty'YtuaPUw ܳ۰{{G+ $% mk>Fj|A/!hn45>@=;ՒVM?'Q\%}_*j-| }RhaoNՂ)Y[뷽Li;rG7Atq` F#hssNog]f\ gvu~`qvha)EX >r,  Oy6G Ņ!jW{un8\$٠o,8,ڔRJǹȸȼ{cbN>x+Y)p|KoJV=IQgY}:ݻw6yIx~o{dtn`@v,/j0yqӀngTyp \y|ׅ'Z`*&``rj޵Ҥy=?k{gĶ`~_ޕ<{{7&ml0 &-igcJd+Wi?wpnt1@_?yǃΗ3D{N!0+0,%A㰣8.?J}:Ny9k?gź~ϷgU Y iwAdwyU1#<A[.oa``F#YQ[nT+#* `UOc|r8-u{Cɚh)&eڭoƈ BV';OYlrmGsKڨB{ǚCZ"F!B3gp+Btnm&^AN \e< Q!H>Oiz`ФeXWVwnS@K p4s)aCpYa2@]`ؚs x >} ޠ|zҽzYYFͪRv,b1었*1l޵MR>Y߀z7.ߢd M-uGTWO$QyⷅbbQHqa;;yu]wx=ONF47 ϪUPU~y +d t#_>%N Cݰhu9 X 20Zn&!8y6rx]ۊe]B3~j -F?&S靴1b\mf_^:h8/_+akhKV j}]JѰg2b9nekogkcfO=F$S4\$BLrXf@8:L aMhCB..lV܋c{߾dZPC'gxu!lI4Ҧ?_-[ݻ,[16V9)ʲÿ,uN9oW6Of8 iQۑZliVfdS/5YM{ݎ;\l!W!@p3 6?In+h[/P[L,M}¨ܡkf/K Բնvϴss;3=Mcɩ%y<9]Td3l׏Ah郝 8b% eK+ediԤǙ-G$w U~x6=q"g $;)\`!h-oa0Ip RI VqOMAy*ulnxˤ9!<>xYvr]1v7Q(v>se,}@cQbU"GSxl}/AA#ok 1#sq$o1)Y +_GBKR%8>f}A>|5y[? ,}]NW.!*E<]_zh'߻pǶ$w;-)G] uzCP'*O IՄF]mtmFQL,k ;~0qiUn{ϴ J"e9I#kt#nኹPk}g.*R- od99;|8H?@paBzgRegIזH_3?[E?oAG~ZC MT $ 1/hR֩ {{ aI![y몭$=:^0 cK-HZzeN_l9_>c:aX 'ݻoiY9!|͎žM}V|F4~_iMq(8qQٷVobȺiT2j`T&Cxaܰ&vxR8W}7d=X}-Qtz%A m)\F j#ɤ9~{|ì,B>n?~3Bw8J2Bִ8EWv |/qqiii 0B&r p+sc=MyI捑׷}M2ɥC@h$#쳺2]Q&ARWygo66SI';# c=>QU|(tNW=[IYPJiBs QY2jc!LM_ 8ѰqP^ Y 4][q^㕰ymKso{_l<19!=8ĥ$am@gAgAt # -nBg! ?CBdBa! iG'Cym뮻QR:GO ȟAPڽG/zynj$xz YK?iVRCD &vml{Tx9Ypڰ'1vqdH8k3}`L"e};vO@KMrPAmd x?(` NzpgJ8=rn*JVlADpE_[O3d>*\pkr(lE7#VjY7P,jOʂaw_a7Ab1o1DQb37+ ,ny>mܡY* YC'އ-oGcFBΞY쑩R͊Vۅf7ȏmRo,- }i4TS8'pau7 SB<D<9s(:VC;!\UPir=I16 ^/#w@h /-e1Qxݧ$C淪6i$z\٧ u<37;Hp&>e )Zp]60B{z{7㽌5 #_\,>yRFH_+q+niaJ6*s/Μ3[_mw^(TH>\P3(semz09g>yT:gЮ|Sd%3YȃG*Ӵ@.;|N~2K>=G޼>k}2m[!^bH}1z*z{ze{e#QoJV"F.Z1.] 6C 0nSl/L |m-zY|0H|I ְ5"d8V'vYDu6pQSCb=ƠApAP@h=©' #Tfm?*d3Wr[t=dѯd@砄'u|˞%UpsoL8`9O);(ꏣ3aMh,fKSx z =9=Hgμ՘~~)Q3s;x$d"fw+7JAy뼪n=ŗJ>~&uυėŜSiWa2jόHI,*k4=cqꡒ. WUwHlLs OF;)Wfcb!4^wuye|,v3Mz1T#cgko+,OH qhu,"[:kf(j Mj t/P `Qm$e>@1`08f -$ƕ~srfmYg \1I7R%dX壜Pz[meKQ@un|˵׽ _KS=lcc 2K$ʗEcvtO x a뷭.:"4(p8OdRuВyȅq0m遶s\lOs"58u ^HT:WѦn.v&{1nRn8 W}!OX{xwd Wr$Kk8-GN׮p?08t~܉}K̋搜/4o~ dխ駋]%Fχ fL֯ӁOF髟'~N]`w1n1Ѹ/wPOukd 3+Œ+z k:7lpoV Un 6]p|Dv|b:g:wE}))g_ikNxJd(<;y'e Zo~U}g^8p4k2`V+C ya&ʒWph눿q+EtY[6A~i,E9:U|{ ?r C}[}i9_e7wШbNIK0^Y({9~y@2%[/`" |LCЇsK I8-! CRB{p)Nqt_ T=sabzd2cU=Oh'"=M=[/ WޕGKzI hKgX1-e}˅g}H2dGySFYٛ\-59t_dA_|@ Phā@::-fS|ZlexM"D5ab~/sr &>|uDjn҇w+7HӶߧ.kO8ODFz;`\jW |9|~N-IAbL}I4V/xYن_|0z~%S J6jD!J3D@z f8GR"pL;'K[Y48,k05$ZZ9mbhʳWm 'X8ۅt !a&𠿀Ez@Nm6VDX֧_M=\piv( onzEbSdPp\Llikfܜx}t~cp֫ngZP3Wǫm/3 X5pnwSILaF|252-]}nwd{ts0ۅ 8ja5eÅgsON.n;0v"}ftpO3θǾ3Wg!c!oOve.L&zSL{=gVbHq>C~#S([+@0D"MyΰAo'\Tr3VC]5Jr,o@: wneE+Db&/GȄ;~y!Ds3Y|C&q\J7 QH YA4+bBJE"f5'G#> &٢]nPJ:s:ue]wu'<Ȱ]o||]}:VE诫L4rE^ Ц#kM b(TU㬅qc<)x4i|ot#BY}{8f2 J;~w?۠ߗ?W|z9~?X`D F;S[!}j&Q?T: t_4b󂔶k^!XNGD/'^/o|7zzjxd2M vލA>QLٷnP4nH ,W6=\zolzbcކq>E78?頣#n+n:#Iw>B^3TkƩ^& WkZ}uL F^2X ˥9w |pXR M4|CG^n[^x9qom"isGfg]cE! 3ϹjZ3{Eá6/% ȋmk3ў,Tw뮻?'jllz+ KKK +O21>2Z޷z8ʐk##F޻*5OКzG s={G$aoc(#>3;䰛FX{xGg8fʇ9P@ Gv;cԖI[r5ut* 22ʜj̼[5~̴3AoCnBEf?uO<8'M_gs0RA%&f;?yGb.xM*Gɫ ʲvEΕCS-yB~.&FV*:nn Uցf13sE 5Kÿ+lbb~6.05tu1 InspFy[nME  e%K]oxX8$1Xy^E /AJ!PdBd >4V\W^QYPȝOZ=0AyZ\F+Nr(k /@i(%OҌmqΪb)ptHDôWEڲjVΊF:-jʰ?9MLj{v=.:zK~)z^n$W{782pH@' P9 5nu.pJ0LHHV1N0jM"`,KIdPEFYaIUasnw<c?KˬL{>u$}dw|HرIjҸJB4hLlmya.Me>IǽCT%SB'hǘ|   dW's[˿e?x-WXeK' Dی(8 лГaf3F2ϾM?kd `asr")mɒ6/4iYUy%6~V3w!H9g>ڹ"R9+[|Fw'ϻN_>%%qbb"99I/a2Kl Zɟn-tL?P4 ꢾE7ciS?x$zVyնY4"UCE91\/ߦ.K٭" ^4&?[+/tk}eZ.O5=߸h\rNbZlRtL,Scg!StMm:3h@r3P(fӅ%ZYa|ec4Z ^7ZC;Cb{_ )'(gbD1oB>QQRR07s .gZo9MigtVU別iZeeՑ_>/{[DS7702<5 o}u[ A (dH6V HlUjnឩ:+xt97ZY+JsswRNՔx@Z}s^%}Ȩ{st kگ=Z8˯D3P:0;P_M\mM•=R Eǹ@¾&59>_#9E[I8O%pv pmNC)&ZvT.80{Kd+Iy|]kHiNy(m&mjM/n 58?+n`2*s3KJ@a4MShxku: ̠&UEJyW `lz*!5=~B Ua гك7+F~4 +g1{9oҭBL歴8I=wnYܢl1FD,D9́A ,z)R)QƓ;Ρ)7E0#uC{ӁPɖAhV| Inuɋhdf{x;E{߈|v'~{k]wu'R~"3tE8.p7dzBDSǨI =kօfHfhuc2(\p8TNB'("o1Qh?sh9b#zM(V܎FXQjkR-G]*ߠg?hF3//<9or\*?޹}x3igD}I}wQֱлܮfwruax^"ߦRQOޟVڃ966 {sGcܲ8z _ 3+ V}>U&N"+@c!^l2N T|m/O?#fp8x\߶s>|Ü.6D Q'ȶG",G4 ~HL*$&% # #WW?,o05ZҺ AL|N蛅 ʔvmR&SDXVhsm":k.KjxLsIBN䛵YqRj>0w0~boMo.X E WFa\=.AD)RPޗed߷(mԌh Ph̥H]Ab[bkH p~"Ynioo^b=z4 7#Jü,L-ҁ:||2z߃fEJTXy @6*4hI/\C(ꓰTmx|^46Nwu]wɳׯ_ |+Z,_dE6L4ɬջWBxqZ}98})bЬ6D,$.   b>90SҠ44S@[Ẕu`R Ã0 5 =;㳐LnV^< vGe0"q# ?~[>8A@zQyAZ՝}  Z ^p7JȀ9ٞQ*}8/M4Q7L_QZPꖲ.UvRqRqRqwOvIӬoZ%ed&liY,2leuztg"]!S%-K?vAt;=!M,'TX@\vjŷ.ʉ)*^nN|?S|u j9~Qɦ1f>ota<{f "MԻ34RL&-g5;ژɯ3Ī$soTz՚+uB$Ӌ$ˋKE*˪j[TC,!MeO1/ƈLT}n{RxmJ`F4p7p5 A6CdٷZǻ\0a%ZiQ>:Q>Eø,ecyn-r \N5ԪcON<6h Xf^nFcO^o|3C>;nozv*tT-[5o<Pg_ebUV(X6hxlxyahdrR8w%jX**~30Y5AvYB.VZI=/g_b^ӈ~[K;yu]w333߳]a_y@ 4F]d]'@U?&Jf}!IxvWXP( ňbA&=Pؽb^s©;BKK+֊Kn{ܫg1GY{Cd-{? E%VJDz풯o'i+F_+e16 IN Eg*:&/qXH K4kqh%"_B8dTRO]C>×$9| uc1ʻ:+f> ԫe’{04Oos D0XBH\:G6g_zUӼlnf494^cb1_p?}^ Ceehod棼gN X!/HA vV `v9-TyEՄ8X*_$&.u]ڲ/;6y7T?8&j'XؚQN[}zxExExExMCw!㓇OΟ~V艷5 0 ѿ >38٧B nYH>]<[o _Zx޳W%ZcZ82 _(.gkk"}^`G͟$;pD.lw4^9]HL쥆۲jvL[&;[v}zih,;$/7aoo 7O_olkS?MO*n0<9:@վP:B7 b0ˢ4- nkt"Z딎";eJBmR6]3s;`|E$E|[S Y"}-whͮ',;Jy>:/)J@1^M!5W%J4wHIP@ʤqL+RLKu;'_pD,ξbj_=ԉZzStK{3mE1.:"4R^BUtYOcolٺX)q껎Sۦ1.fB_)is52Tܔ2:y$ US̖B|Z2*6UduK* OVv.NN+G._wgT7p훬lBCXZBlvSrKWLq~ou~ I/;e|s@z*.<6kt3d;4/"Ic!+Q7z){s2U}u<5l]jP OvV?>,DNf}h6=K WJ6< mI2.d2/Ε?-Kj?FF(09͹ҦpO S |䙞cVtN%'̈+P.߯Hjv_7Q2NiὫal<׷4f)?\* 3JTfl!kf(,<dRX@3LkSoR2&'—~LmJI%CqI%obl/gV0$$lmE1RD:6>gy>s\IB٢:ܬ9d4p=B*B 9ٍZM]3F=1-}ts]6V6wl|2d[XWU:ݔ2B:(<l'_-"o{.L5]1n Tɍ gwJgOK̋ѭUj.n``koSƑJ>J6!t{etjjeqfak҇C4[* qZ/$A6SͲANQ0MGh\nD z[sʔò tuDj9& !>oS=nfrfk{ꥰ6FPBR>O]0̖.TLNNU)uXy|Am&?k?yX 2hL?yt"||'ad/7Qf'Z7Zh=3ҡcdoogiبY)^ q K40 C]~wb#l6,f 8|zһHo[d521- /?6ii*m'J%t|cB؝:. yܣC0]/޸v=yy{Ū87Kw4j?jɠtBB#(-4O%IxQ'Ȋ'_ c m:3e2@HAbBMsl"|sX?'n2@tm+E/Wm!Yg;< QKb0 _2 gy>s+v? f%狴b3yFF~M1s4 ]ֆ׋>JHc_|h/n>ڴ+"^:^h2 IV kf$2?~ųδB2Jr M!. ڨoMI7wTz>-|_+n_-=eH'_|/}~a A|5_FWN~;!_zu#j~"V@oFA8 &( =]'ǝ!u&asuPIgԷHm$*~Ԛ!tEvw_DbF S_6D:XCӸ~2w +omj ֒Lc\5: WV`=[1#2Ossw4q9./K8-嫓w ݊47cLcL}ww6?FEäcߢ#Ul(03\ISJ~{ kD8"2;I`>{jFv;ƺg w`f̯UڄuU@ޭZWc5({5s"@{AevǿJ&W( 5(B5nfx]0aԭn,T3Q{F-/Ţ=:'MQ&" z¡d?T,b4$kR@8h7ހ+h.^_I{hN*ȩ={W6Hʩo|9 ~s  0/L/xG5R=k|?(O(xָ1"#zQJӏ1&^Y%.d2U|@~?S+C3ק0~J!gJruhTȹYKVCcBWiĐq``WYLib6 B2ocjUhE-uGF$wp2EN/W..8Q\E9h[S ҃}k$G_MX=vzCݡd=0K@N"Pd =t13'h2tTcWڂRpR;Y[Mߝ6Y0C%Q*J D0^6evC,٣eP,{z?`n x@oZ/.T9I6 әnMkbRtHZS<lZbnuk-F>[؜z_MݘDo͜_zsіozj*sMgV8V4~QUD0kXmIrz!{4Γn,*' Sb_}rBI&5t4nuhox9JݻSꊐ6!ƻ1lh{ t*8{o$N?h~" X<#]Z'rPB᭮m]r SYNhZ>שּׂBOϪGOcSw°R8{{4 )AD9Fi+{yV)&w?NLJ"f(8Σdl)VO5B}6rwezlЈeeߩYڞ#GƤ{kiɷY7Uq爎7nLֈ 8oiq^܅{:ߕQ$jaʗvTv7v4C.=(xw`[,S5$p'3 ?<;;dgJݻ'|:;u1Tȍ@W (j=ҡi~h%f@@E b-{V+Sq/U#3Sdd1Y cdw % WYVfq:vVjF2!uJPڍqy֪8VX o wjV9D=u-l.y;( G}0wJt}K"ު\a|uitg &@T\ 7,S()7/ (wm+jgbnQ4 *mQJx}:~/qZe3|4oC,|F$]ۭ50ߪTzv3nmbC[k;X F#ec-}u؏Y]H/*QwZ"w2!?RsKPޒ?-D3 )w!!C6o|&:.Rq2͔c1Z))Qi9TXk)Ֆ^ɜf5,zK ~}Ax ^c퐟ϴz?;]\=;O׵DDyMs-*yR`JIr+ [T@g7Dg&{ek W`$BRцRRap)㮑biGJ0,41X)ө=.4i3Y=V[hI ChV 1i8 a1ȫFkcݜ]=k\|r}|'m,͜`Φ\\fQw?3F6ɶQv H=P 6đB` Ȏ Ajԧ+ @.tAO7)]+eR2xݓPѪ4m[ʅ 4|bu":B w<  D G&{69eM(tXf )x:߅Qh3 M1TDL7_G8E>ER;B6GE|s=,Yya7LӞ>z(~@&nl۷}I61Jb . 1Cr* J_썄b#7ЌȦWj%K3{ὃeˋ/详JkU4ly|M}2,p]${Tgt܂⡠h8rM :$=\-}c5秳!Yʱv|`qC&2 'zq@zsiy&osCr9w yfrCvq538k z_Ka.Na2{\+]$U^#{H;9,ZwOMX:( LjWTs|mK&3ZӁHRV#],_Pn^ޣ>>E]G`H^#ј('[Vxs%cF$k[>Z*K踊urr~}'29@qǎ? Z߬]od)9y?m%hUC=GH4E^Y@!8ʱfG%r}cِ՚[5=@?< B{d0[罭hHBOf w\͂ey` hgOD%[;̽w"`(h`;_z iVzz%-k'Q&{K0H\.k?}jQRo%/TLc 5y*3\aVAܾR^|n}. &z6}$KI6L&gCăsZA:]@RIlsk`-0MD]d=}}΃s=P(jϱ  ;V~Ώ3uXVF{+0 ?1ٓvmr ϥC} x 4 $҇YwW7ENQzg" H4^2Wa^kݓ+ph]]w]~xac$U4,G6봑fkh~7g._]84At*W1Pu ^ (|pYZ&ޫmD=5Y#gZwqX&4A(H\ř wAW<&!Y[LBsyrfaEΜِ[c'ccuXGS5@ $GzDMoZ_&jOt`e Ypvs-Ų||nHY.9O;-xSIyi)f^\54x /nm}:ݺݸ[;ry`%!b!*4S"%l@<Xw *;{׮XO}I WBm\`QzjQMPzZ-mQ29鱤kYhp*c]>U OR5QM{n<E3PZB5#=*5sχ u61E|!ub121NU-_ꙣ[2@dw'.6[WΗX?Kzj.5#yЃDB].],uwWΕs53SQ΍PS.i tX@p9 &7!WzB?1??WWsҬ9 *oH݂A*7Ѽ+׆-ޘ#]K퉷SUaȴ˪A8Q.]!!!~Y>DQ8ﻎey2 -4#^^oV';O~:ڊ@B%mg 4[} ׈C y1v3X/67.{*)Zq1Mzq#: ZG:Q=Fi*cGo?6sꀣoJ$`9l2nM߄]CE~'L2ڶ:Z`*ʲQxi2f# mH[_s*$ c$ J~Wue{6:/u}!d+ h֫+m*(Y;I4a?g]5-g@}Oe뙃oM7~pK+m$㬑fg,f3 i^N1wX'tَnI*PŌlt 5aAg8Af˃NC6rbW=\C,cz¦,l= ^718(VruG<] X꘻F[iL%u~L<.l/ rИKnҾ\wGҳ3ըqvrutS.aыξIl۹Ԡ(8l0J."Ut .}+4X߃6%4mu/먞fxp]A:,Ɂs'FN۱SQ T9 Ll/5 A3աAlcv D F;s? coZ D90[G BrdaPz#Su`[yGuO8uMD؝a=w=s WŵPDҹ(金Wr]ձ7 @7`H4`DjDkפsC uPև]wٲ4|re-lC=jd1+|mrYƦSLCَ[ٷyVj7[:i]ܷex]~ li^}́s[96ѐRHP'vUɃu6Шn_]6ޢHdتެ(X//g!q^|-udM87P')3'YS"W)P'U%VY&1Q$u'](6\*\]%\Rb·3=W*&pTb^.!S$rx yWqȧhJc?F;hsx2j=dR)}pMjbrj%J a&N>ܧm ;G6B2臕m-!*$݅2A܄P~uf?Tcnl,t&t! &Z 6 ^K=W۰5 Uɕj+5ߒk<<74 ~]"Y=F_0%cU]ƕW.2!u|0TЋw|OZ4sjr`|keaO{!!rըcOt؅c*Jue/"Wi,ri3s=RuY6?k #q WCb뽓F`WϜW~gX!gi+?;H[g>MA ;yI[o,A/Or; x{Zd}@R)?C(-D++IKs 1Uvc5lU-[7SFT_S9=EJ2n[u:E`cwSMY 흗'x+~m6'^4 T|?(Oh@;P-7.xcc$OJ~5ODR8"! ,< ݢ\a\:FϺ@3FaCǐzrt{tU) #=zVkX-'/.o9$ed/~[!S4X~w] MY+#mCΆq{5v ? ?7ndwlRX>(">*?yC WI:r.jC3Cс"BeaH3y^}WB%"1p-']X*4Q c 7`!H X}/dows\pc}gjmN,A6A9A3 Km$_ ,/ sj-c_UݠH<?fkJ)c1-Pd(PX?Tt32 ViF 1[?מHvY.3^6:_Tc^\##̇-,+/-!=*ٞ*Q:y i?A 0ȟ1p]cZxMџඟړk^]"gCJnP/r1SvqV:R2x6g*ejn%W҆ i 2ߩeio{^o/Oz$_@&H+8./sSǖhgɬ2ܷqN!%C{+@"ڸw&'D+i^Z'mj/G:7z%H<=mL}T~c\iY 7`; 4*&:*2R zjrb\H24pTGa_IYE-MCRSW UBqC:NujY1u)=乓k뎾L-H5&˹ӚxkUJ +[xx8FO/q~yv&]w,X0mӐ2yzQx{E2!_RӦѡfaٜ(VXt Sb1zك󌋽K5KY&E,AqF)BE9S^\!<%k'-bmӖlYH0z(8 =|X2 8Gsiiid&oEϿ.>֡7k}$^F&fΌFZJahLh_y}{kdn8@:PuLOLTC T1C%}#u+q=XCkW}׵&#Ory˻A,5~6E${wLFmrDno]ID0q p¯%U-S+s} Ř-|[Vr_U͍[ܰ:"eHUQV˯qܩmoө|Rghqkzy^΋D$ dWk-e;W7h ɸg:PHL!x ^ hm4>MXJTϪSMH3Е SUԭ3\ x_2mKyn:ʯgӬn8(0ۙ,mDF_EҸIf.:$w%oZ(lEd G:yY& jY:t{tD*e* g*-%Cd~vNuYg,`iJYeٵ - u 1rȨaZКy40Y kYXronI BwV`ܘ-ߋD0ao&8t@}G`4ю߹}_V,. .B ujN-Uhևn_L1 >8<)6S2&Q]̓On6Eq,<»Eޥӂ[1 6jZf*"R,2 }w0w )Is3ߗ*DlT{ث)'lҼI@ 䯱tofZým.7},lz}<]]g%KhFĜUvxT̋l4/sH&hwZɇeq6N|%^[xI+ εz8*f0 ?)CAZW #a^k'_FALC"A_L+|ݭ!,||?(O:*OK+O|;>Oey`ڒR9|H#&{5׺4Kp&݇AƲWħhcۨ c(ڍT9_(PGsd6Nilc0C!t ~e(|]d*)ULCnD:tLTD2nㅗ'eh(GHiyZuCkU)*\Z܄j>X"Ña w%7ۜ-[q`[M j$`QOs "":x hdkBt@{6f[)Y:I3l@ccM L$PlldJ6͖-ES]R6Sn^ Z}MzO[tiG/5c/B'{;Uq“wT zu?kg_]Eч" 1yr9.3._B^o|< Yrt;> ]Jc osb,m[Zs 'ok\ ؜_c|Yss "-AnUTun~\[NU2pC4z=(D8N.e(ZC1< y}#4`V5޳wrz|kp=l)ŖMPAяn_hD3FFF.FZtJP=cb@0{v%)6\ kp~D|2w\AtCpD 8$ E-zK6gy>smVtFʧX6y~sROJ\keDzdN +<_›'YI'5m(zVXGWk]U$?#FkG%'1TݗJ{ol>DfjNɉ WsLlmg(~*L@6uW?Lo$[U݃!  G6ե.B"rMK2ͷ<yKEPwpTb岿d@韶aيB|lJ6%-C+w NMnY)ot7+wKtmjrakAz#Wo'fW~, c!Kk{Rݍ5v s%[$0XUlʬ"V/W%+Qs9ʾvHYogutEJfF|:r~ww ?'/R@RZHP܊H)-9wr $Lټf>35Vaz0Zbibg]6Ņ\ Hr׶'xG|YQM!9N7byԢ&aAև9ɐ!s, Vmt3{@8 Y{q^.پZ~!VY%90$/v;̳ ɆYGW9Hgh:$IWQRJז9deGhvM|X%[ؠȮQ5 bWX`Ȫ7gxC묳2+Ŧ6Y;- #4h-oZ[tL~뱍nt e W^OR59Y/e`{?3nzhj`jwr{cm2w1hί-ˀߊ65XvE PV3+*B! zJ2$R#c|'\+5^f<c3VO^P| ׀<:Ӄ]"_#_mPdLZ{{;Y:5Y܉gFw[ȳ*+4SyQa[TF,JޥU޿$!AFZ* Rޙ&1-x'лW9W`F(r| ri KoߏJl:ƾ!uĪKS<}ߛKt ,e}u=$/gK/_']=V}8s NY^e3 jf  }pϬÆU ㆃg[4')Y:*q=#[Zߍ闯]bQiQ G؍KdO3jԍp.أέiz q% m"hjCo9rrjvb0@0塟t+ ϰwrwrh [)OʱDrâO!м>hlef)!jV5;&jYdԐ$2@=DTR `*(fޞٙɠvzO }izZu_{"0C \} a?2nU#ƞ'N{3Փ12в r(d߳[2Sx"j߇w #Y! 8,_m']#M⯮`=M-2"10arj픏m$/c7U~J:1lc@m8U-$=ceDɽhҙ %gKeK Ֆs:8;)-fE1? 6hdZ.[oۜX])puq>/ԙń[:oz&I.Uv̑dma{"#c@HNaƟ"9]#ܾv;"Z;VO=6j gpxLRVneY{Ӵ$ˋ<_zyMWn9j=R\& f-BûLB's'mERR~y~dI u ,?up/$w[,ut-ޑ9gu2a Ģq.*_I)FRp=(CV-O)L< 3v9œca%0.]x!@`N~k]@UyT*GR;W4EC#;:9:~.OH'O\-oKs]u>4oQNIJ)BLYD9(U\{o BYu!xes(8W9h5 5zVn1~!v%@"yq_`|:6o-;\[=++sӸieq(]Zi`^wGⓚtG/B-|a74Hwuv]v֝M0n1f<A”YjDc_,g\#:%16},s[T0wk[ c?|O&wO"-l ʝWȔ+ʇvpq@ fBx(iWQ[#1͐ XKFİCwJu>H(<*6em"4K?Nn|;Ĕ 'Ly!) Ɍg5URv>Af" N^AQV9na۞P{s_UAɛ*$h YwĔzom"V63vGӷ{IY[ ֨A4KD{xGY̬q%eEXr֒NY\CTk,s÷5@b+Ev8PX*j g$#YIh>.`|G8O@0G<$;껈ŪP*GM-hKxӶEؿKԿKܿCҿdcM ~iҧ 7oF]ODgjo\q$F/@ As|HVB2qm]>!߽Ҹ°`aXCQծH׹:Js-|lc  MP!/|饗^?(OU4:F6[ Q hȧ ]8f8g*%zsgH_͔bn^U|P1yǟmgIҶD,[CǴ+Ƅ|RM蹢 qJ,2+ƫXOF@b`p20LJY=|7s~뎣AA.^'"2V51aA_F ;wm!(#X&,Ru<7:F)82DEOXtSGTfZ{,[ȷE3vK4VAT+k++ĵ+!ٔΞo #B Kފwق<͜,R#3_WPT-/Q33 `@0 ȄZPM-ImITK1LM0qh3Aش !y;/[7_?˃T]M&ST-=D>8{A9'}_ȚC6jdn]_J t PJT*rNwCCxCGCW%dDC8]`;L/;k͏+c"~kGK. p -Z|HdY3biˡCKL)',v\=q:L4LgGLl_ԫ0Ř9aU,HోS{5~qtL37-nJOwvtw4Y8Z*K4>}`?h| #x-kT[dRR}t)44fae6v(XN~]ʦhFlx9_yYeu5ҁ&qŽ>JuY 3u\T*cq!PQru~ 8--=3+;!UXs.n4dcEnMm~E\Q _^3!X)q;vW޾R'ovfXdhAByÚ" 㕼R_z%z /hz{*J)e? gbRS!:Cs<5P O(NwA0֫ p9qXMܬ3t;;tRSe/c&A8kzFB6"^g+gk;=="ܽ~'m`6wmrF%PTؕ';)gLYIJ:xB ;' ^ОDfPpSڵ4 n: ?Sw. %=((a^z<𬵯kk#jjzy33}؝YSYZ0WW?_;oSu/v7l 䝾ZoR]Kurs}t6=q}ZahaLere#YAYQar~ɼ !s?j7WP3#C̓W Uv&_W%N@8oﯙc \$ }MǤ!kd#R0>!Ij__*yQIYEuMYzqAe0ǨY+j}<6fJr4L`D\Qʐϭ`r\Dӡ09Ϳڠ{35ѯ=ݜM3|?@7290,R&L9I2B y3E+uۗ;K xvd! ؟kۨ_][&w,ܞ,n64O@, YK{ =»;D8WsO _'6>MQ3Qj+ "/O,OLN$Wӏ~8EL A@px@B<gDL"B dsC'8; Tӟ8JM@2~= T`h WoVE4Rܒt͇D I70\ljY)[N "5uirye%5=M9"c3ildXԆk?m?tIBJ b]|&[kኞr oSb†9RzZ66 T~mie av1A7xczw4.aoe^RNYY HuHَYذr̴RŠRrJ傶Ӎ VB&Ed=ᵬ2һ}`K^?Դ%rXdeVJG랋չ i'ov(&/tY֢qiȜc$skbn;{R{7 h/|饗^(O@ ^'WaP8M^&K`#.ߋf a(-轗Xcsklkb{Z)z7Y%Ou];bЌ/Q#=<#3 pi `=+Tݎgf.>. <$EJ}2W1?w:M '9ޫ]|o"Fa9UWrDt_[5R݇R6jVDF֚KVqD[=B KQJ:O*23"Xh_iourJ`kx^&zwg{~]}/a .drznj:OzD|lM\1]v!m&UgaTOF9$em壿MZ K=gWWX\c-o>΍R͑hp:D0жt).9)_e_ەoJ-S D\s"\P\cjAγa}8@%??g7PNӘY$kKZӵ?>KT=IW8̕+_Iuݱߩ9ݻ)>d3?юMe[a@Pt̟Qo^^=ؤuq搵8wsjom^ҩ՚arѕ񭠓4tK*5ߧZa~@{Ifdsu=bRMrU}OEwqWyc}$;GP[&yqTxV6UjKY* =Z0&<\wO;Pχ%B`0PbAS O{}T5 ^2IȤHBfm1@%Sޘͩa|9qyK/'d͢TMKJR;MHd ](75w?}[E=ŵͻʷ$0(4V/Y|s{j}Xz|#,jg03Vc'<˛<085;C*!ۢfVdftr.}ZBY]Ѧ|𚢴]"4ԇ =X'O t6C} <2,' Ss~fuh'Z:FH2(|\>@1u*ߍR YI_SZYsTm1q4ɊM 7uSN-`9 m1 p6ԳOZ(YySV bmc<k<;I-o$~.:kIl.2aG1qCA5z(t%U#K\'<,SXBfA\g}OQwZWTg"7.oLhdcfbe&656U!W5"}"NFB8R; U-55 Xn``?̂)aZ~Vz -$O.q kȚH Inń&K1lې<6y ds Pd{=^z%_O=)[5¶5$sBbUs}9OΨVЗBXm+s xފm4𢡊S͕ P[+7;?0]X*,MA`5ԡrǨdd t: bB*+Ī|2&P@İ~fhkFUhSg/}ߤ:WgF,k7T}47HC/NIj;V}> a^{гYk,bLEwG %Gu|k?ܖZU:fД ^\Ŝ2B>~~|`EWqHw.s!SVtJ6d+W%Uc&~ 8hGʈ$ q}^. 2¥ҭP,?42HJDAi^q[ę=`VNsT IO´?![ɩk?ؔV0@FAbEMh?_ cەu Ρ.ΚvEnն#t] % T} 5*RLì}haY£?|Ȯ#; C=M2F?Ɲٮ&6Aߐ}ck^_/jWTWz"TK% xd"NiH/[ls_Gԇs\}R zJ2&࢟?FuҢ̺Nsl҂}B@u|M"Vn㕖X&!aQw-lQ/1 qAۄfxܪLc:,c iʠn&:.d$  Y)#q`]\o[c*%G_1!(#@M?*̷bn `0RX%L8 d7#Q[.a5=~LL3BUB__.]^p{'o% _ ;җ3_zyo;('FǨFD0Ծ|d€v ak`.G*e#OТ/+VXE$nK9v;Nψ7hN{fH"qԏQ I"s7@=:7::}u. =S#``Eձ5d'j{Ps?3 <3=3X`lgG+X:JÇ(GgkE /REJ軞օ~jeX6,e yB `1TyXpsd'$ >   2n~Uz@V֎=UO;a> /;=pqp1p9ilf9*:Ŏk+ɼ/8pp؛{'H8VAY*Ct~g|C6u nc]@R?1+wyH!r܁DJ~X?:9@>C.BGaIRo]-}o8 uO9a?Oj{iP " !##_Rjٛ1 N!ݬ ]#A|~6rE"'G†=~q'Y'o8zT.=NQqumEQEvB}KPGy}W7h/Fݐ˸LÛ]ƃaH]dvyls:Yu-_[6CrMRF1HH?E ~l>bv=D@y'{s )nx~8n~aiǢ\o5 5F>ۀ{o$.VEA}@x{T>YOO.Z\_  ;cp+tSúnfL2v,Z͟Ǯ=rFu_/gXq !"·Gx'@pM/;%pno[ɼ&szB(|Dz@nCb-oެu`lo~镶β+uK;Pm|DqGiJ $W9]tѧ:NXJbZz7B3(;{({h{X{tQRӫА[[[[C;% ^c`:옢zias#s72 Ou+c|(5+ui9Nx ^ C0"P'-(wꄁ׀xɆrZ8) %@DS!֬xgQq-6A9txW z'[P5]ۢ?jV jr5cF쟣ک( ~²Ua隰-(W IϐWRVU^ 䫟/Tr͠Xs@0 R<%/obE}C/WfǷf^HaUmYYJ`SP8< b*ym QFhM)))*(o)Q(R+)WP~ĤC|nMN5MoJdymu\!.2$x=sfg!Y}RaWb QpLuTԥoZ`BQzʚ~IЅX.geaLbeH@'$ ,o!bN̩7kG=zԾO#.ϡdBoOY\]?7dtiuRq#Ks;Ew2Ѡ#wEyQ][kzJwd.{h@o1-^GYVs;xIFE|K/"Iy*"""&9 Yǹ+=Q}y $Y@ waRwWMz"!&[ &'f8$-kSt'dm˸WHw$ΛLaZ߇]zE> cɗ@=p]6,mɯre?;E9c>N9N $KWvַ 2O ^X]x̅Q}cbl୥sFw0SnbBtQ-UH:aGg0@ sja5BjaX4P K2EY:ukǫe5g ձ,R 2$3(^@DLv^bUN pvJTi姨eIoֳv2]01N1MU7KQ9C^2MZ0MS4T4i`vQs)4|qXnчeīnA 9\2'j ս߄A0BJ!O_ >\Ww,ȭM}hrL H*6.QYz%EDΌԎm^pt=r:s6ǜIj9O?#~ G 52{痃uIoK\:3.$7J#7T#7P#G#_;2ܣb(D{-Ets0Q\j5N q6eOBFDsOQFN|QؘߙߙUؘi|AFfI2^0ew'gl+.'+Kn7Kn?gn*| fI=O=~(G 8%1bPQ̽@}Apru2J L7/QO5QKQp~O{.'l*?.Pp +_> IhYF7{۴=X|JhnRZNO2UJwCLgC9 ¼w}6u[p1alevbZhN-eU3\(3Σ]ƬR-U'"5ƿOȐqĆQ^؅h~sbeޏ҂E Is'^2,z27cLDSp`  ͨYc*tAƯ|-B ?j͇9azC-~0)wRa+p`f9.dgD}TTyK/>!!P!1!!=' ?@9 Hɗ2nE$ά?< gN2ӧWAUv֛ 4k"2-e?G;k7esM3 >OHwUhaWnй/טfeAbe°J!Xu@ک 6S걶eS;I*2-qrb==]Ws; c |5@: X?Gsz͹pA}x m}'f3i~IJC$`Cj gEbgefC:20M6A0$(uUe =tC*)^sabYu/r,r^s'xXv^( =<;ZRݲV? G-ЬýWD@ C/4 m"u:JU:ow Ε:  0781>0]\|W=/c M{}@9K9sv?<up&08DSBQET|Fs*ow|tZd)4 „bB1w}."Ǜ3hmH  du<'0&/N}5rfGĚeuXĎiԏNUy7 c *w(}vBTXkղuS܅Iǝvȫ_u7|Z,Hu ).嚵. oR"=36pI&>ow]Ti^;9=]ɺm=D1ЖQ&`=}^ /Q ȩQ1_a]a_\zwwsÀ.{a(q\=&Q)COUB wZnQEK("ϗ^zED3>S=]c)űECS ǜO^H^(d%] ݠ?ˡz= "IU棘"W6S#Tzbx sHhS/_yZ\mbfYP\SVV@B״..PGu~ U#d-rn1_l!lU 7]lgݬ{=kl=jK*[l.+ E43M S 6lrRVAuz ΪY>NISMg3h6,A1A.Q:Q2";7H=U˕-7.γO}X#]'if, V$1ic 1#om$omhP6]}?jd|9N3N73ggȧ!AnX:,h>~|;y|p6X"^GYiۉ@VAm`z)N!A.I~9 3ꒂQGBaRPiaD]DCiiDPuaRiA4" g'`̓TүS?+~A"=CU#X~ }TN̵8?)٥nII$%AJiFK{a٫s;3zΞs莁qدj2ԒCbrvwv&wH 3u aSL|XPBC<"x9*lӢ@~IG~p&2+8$SKo`)']Zɞ7*.ݖQ!lH\a+TC4=L|u#֤,x^^+Z$>X|JLkpAD 4+83t">Z:6"x_'mk9JZcGT8. 6;p90TkQ_'L>(4E䰘̠p~/^$6{T #\)t=.=&P@#?ϱbJvɪ$ZꄲHA؀#W7l"[2M"a ~dͮ}kd`c먷݌x*qܒcc_5R>gUg>\ڛC;KY;O{Y]F}S_Lvuڔg M1Y!.V5uufbysp!e}5ҕK- ϊZ}ZרZòhݜnrs4oPL_"{:(r*Qj|aakchDPY3x;YV?C(u4~hƺm8$i}pO(m)0Xrvsw0n-߉ۉdm!T)<%'Ṡz95uua}mo}믋yٛA9^/W(&Pv~зcf!uib\?3 Z" {(V!wksՓSOb{$k]$%bkŲ$s_%K͔c}Xq4>&Zjtyk?](q@t +d"Kl[$K$Dk7  6֡jjjMC] qMya CM dbZxxG~hZl;k<>/;40 h׶heqWIZk9C+G'?0\(j$g^̕?롌_p]řN 7z}sxxuSCjGsvp%?Ղ!I`hlX째94VNsveM[.c?#YCT 2?awƹ m0ޅ+ Ճ)u g \{fvg,6|5zH4ܰ(sW /N '@*HViff<'T2T p~AE5Cj G6*0uO$.Y/01pď,gSZ 6yDgllZm؎[̗Ic7 vtuH/׬=Fwl#Hb7$fkR)2 \~}d(0׸ȶ)W(hilP<$\Xb_$DLPB0+Qbq{.>m,YX+ݑ8 g_eEy3g XA:J6V~棖 eޡW %z7n#wO -d!eHR#4}<a,o>,^4Mq/Z|D+@?S$uq!K 5A D;E<lj7%ݡNPISM.p`T"ZzwR~Eٵ~. <!zwhΗQDŽ;d}#Ny8Lqh1!5vyw}ߔ^=Rժ};Q&ǁ^` |LILЌ9 % ~q?DKDy8VH\kk s{BPO, r> zOR//+m=.N?"*?tp_<+=W cn.UM@<*'׵өpEÉPgNPҏAp=twSLx1}kE Cimɫ|kC wݓ3|hq/?3q+X%\:#Y%[3M?3A?=05R!Wʭ  BZ[펷͞hHu#m,}Ԍrv{{^RP\UK˪r 6ӌSϦ(9ױHx;4lm̕Taㄟ1%_l38=kTxmts󽳎5L=|[,0.2[;)R:/{UtA~ZcDp{}eaqW[upn|v/^;6~zYsDśXknV&DM7ո̛72dE)3ɽ_rg)P#!ޒ,&t=aAxYilJuTrGQ|Z?@f_T$&aknII֝ ;NSYr#%dL_%|#B+S4"~u-~_*?-c!k111ͿYRLDÙhuMLcK6tm>?]Ǚ?Bh1>}}Fg[t!xZo FasۨcM+y7OyA*1/$>ur/gtorgiCkk]Gg7Wo#{miW.eb%Z )fs!n7NaM:0\ݦ8CZ^$E|&&_2ߵc'\&xgZMbYN=v%UsxQQKJvṾV6ßD'%t?GIm{Q( 5 "42-efʙ8s*'=@| ('I}tTMUQV˽3o[wgS-gǟ"]> ؒ*kiYxw{}sa<^ jWR?a>6sBנdK/\yhؽP>t,.^|둇QSj9{$ZUK1_uøgmv*<5/9u:mYFٿpE =k3/SN|ɗ*(6$na+:B;58664!^i1;;v83j`QeXsڧ+4o9F9_c1N!!+NH G Y}l4K8"#3OPв]/3:V=~Kw.XBv-i ]ifoFΕ&zՏ[ yWx՛= my=!_=>vy 4]$SK8#m,S5 .kHudOk^Ņ)Kܓmh&.d-lU iY{Ǩڗ(:HFP#bG{P~BxRtT~f{x;x:xo{I%D-R|zLҏz8H,TQOO/͒n,<-=Xn=@K;z‘1p e*7aL#9'G<o Q`k;;);P;a0`S/u_h_@y9_oTn(!PW Hϑݚק4dxHl1mUʟ~=)u Z)ꍩ_z.Cy \.A Z`Wpţe'mSM#lu̿DԼ̿y fyw/^T9wE6}M5typ'T{#ڱ76;xwk/R2)xXh5H1_ uB8*qc}n=j`e 6k%9,x+82 Bl}S4Ts+Y`#X57:iʨvZD,M0@/6!gDKņT/2 vm==l/|,ouO㤗*Yj o .pv4[3ǭk7/HkD`orʞ!LAQq|) t9,Ee5YjE/,ё:QxB)M1 e0[[q8mFK+?kїqح((ؘkIUPTS5wӮ ?> o矛[h/ސ- bc*vQ<7| FݢxLcI1Qtb`2>0aR#6F6DGI!#W"2߭72 DduICݿB bh])Ho*o鬓:l~ 8 ?J8-yߝhw.s D$Ko?*NJ'pEymlibz%C5\2\3aū~/^g%VͧPIНyeEXyDYDsħ,JO𨪠u* E :(蠮L?~0`|^n%4)Ageu/GK[s5Ru3b "~Q !w/UI2? ^`>i(-OS?vv /X>55%`h}V*[[>>M+'ʤi)Us!b|i]Bk~_uᇜ70n؍%_.]+~i~2vns>gUQF\^$}Qtr$oE_lWāqB95qAW_[c9Y^ETqh祖S=^qDEOtSf'.xbVNY\%LuW;@%a2ulOu3x><&'.}!% ]M~FřFYYӫS忍&Ðj97[r{LwWWGC8 Jq"Y-,%cdm}2GRZÃ&̗qU/oa;n݂n]} /[,S& JX[jk23eC-͂͂Mw2%*1 A"чNccĝ1󮶋U *djf&GV} 6 3n4ȍ{QGnUo0A,Y[c2vh?[囫X!r_)BH ~.DnA~\-1tRZ- kC@'+ Lt2$)?=QzQ_¸{,m?(& [%kZ(H ͣϣ Kke+!YWGc;"ߧ}Xy+2~xA~˓vۅiftӞVܖQJ^u- ul\Ծ{k%y9*ZiJFF<߭l*e'KDNAVC@g+_&l=dTM%{ i mckkbGL@AԶQIEЊU֗C&??FZ,?(Oj7YSPߥdI)xe_&V`Qꗡ[EH2^!9_#2 _u;Ga^1u%ӀU=EHQkӊQmZds2.V:VlZ3XStժH(b&^Luzܥ6ԙgiWq^ Եh 89Sd˔1cb jW=ѵ !)x/T׮ۛ&y]'kK7[o0T29,G,=]l  bc/WNnsebwU7O;6i'8yfzDfM#naWK{;H*_SKv3 :圯iflmlhn%.U" my]ŽLä`.Bhא^l~ۥQhO2T6\.MTyIj9j9j9ji:^ǜ^ EJF@;E>CjV@r7Ŋ?UE4Yd6R.*R(~YRnm!7Zƺ0>1_l [{+?U,C5SSؚSLSln# 2lIuR ,Sz\`~@R8(s HeVj5*Mn keoj+7B{]K Di=2rC4XN0AHZ$",2 6cWlOI3W蚦g̶v54=.+/j`4X8F}pM0/آڑe 3˽SBp#4}?7;餟%K[~;lEzgfZmxj Mk4>ƹQiE"׍غChmPJ :xrP~[bIjõOlZ~G1^gHv"JƟ 7([(z>P:c~ycb}w/Aybh.QLƘw(+0ΐo>yQ~9\'^sozq^ e]+`zW/xXOL= &t}Ss&X?.\ҞǨXzv )`T|v!GP3$kZq#uM١}bN" f!c&# UB v_JG@d `/1p6hn˺O;7,dx:VlI^1|nmtbE6pRoeeuMm],Xjpa{.J.[uNbO ^JNֻ,xVncJx8~Sd@qHAf7%B 1C|MvEyy_8ʡW %GʿE] NEf,iP EG)NϘNitL Ѽ fOg<8gQ^n|WxM3Z:$DG@}X p9%vU== =A/9@!H]<0٣#]DDV,{S@{uK$r.C]yA!D>gȭi5qӎJh n :pFiݰr?Lcc 2z_Yc T8*ӝ`6H:(\,>N?D;aߥ"j@-8p?o4 ӂ%ޭeo17P+3Ԯc}csh5}x,{yw}'xˋ' mc% 8Qޒ8np$ =oQ_ʐ+o%EX!gn*,x%bȟ.m\f],>eGna(AcMtyԵ]tC]̫WݒrݛX7KnV䙑ˑݡb/Du+z ,\֟ ijS87 wZYVVa#- *f4>״n])*!~TZ.!ǿ{ L /B7P5w]vYsV<.So5u"/mh<+j#_@dM愒X)Y^kt1kM_9!_nn!('gHٗQٶPivIGs\ޯZҖ=uCQcF_B1̍?#Z"i^cmiPmP9F{,Qc#U:jƫi1d"o͌aÏG{sX ؋8Kyz;ZD'*+_F+Z澕ϐU(yAqlm!bX8N$tϙ?S=,c&Zt f(%F!縏|z lj<&\+l#1yE_{n0$pUs&A>9X #P=)c4^Սềjf.a>"VlgѪ{BۏK5I@jk@f’ɊNA:V|L~#WqpkɺtNILh  oi*Y$\ үb^aD9b/KԊ% l cm#[fpԚ ^B=yDz];3{{hNo?_<7n8?}ڸ)Z"]|^^P^q|¿Aΰ h۠jӨ+ٹ/>FF8䜀Ӿ$}w/Ay4$Cz-xw"@'l3 >k.'!s3 Q?1s:ӄ?G k1%ģ}zy;K L T6L~ܒIEz#=ʫMeY a!AaⲹWN`sě+c[x N~%og:w N &&z2'0г~68wLr\1j[u"MTWtDyQf*Ed7P[H A \s9"1# ^By Czym@0V &9L\]45F<;&؛+ڃ" ؅;tD*.Ix)9\~q7 sv5gHէIէH'I5r~,z[ùG2ؿiEOq,yWUaQb(NG2u&Jwve&IKErq0+;`͔煅lv !343Ϧ)U-&?͓[WG920S߿ʱvhotfiu"Mô,3c+,p}merpvv_ afj$[T+l#[KDk{gHHAΗئ0~XnMuvU0Uմq>(yP!fYmmuBPpe֞ZٵLHgiʱ'Qz8l{8 T#v;D~Z o-bʚyL ~|gzbR?@p8~3<%{'&2!|X{;Χ-):/P8cܔRu{ϟ#sqEg} X(.k1EV?GP(xx\jP|Wx .Kpgm 2 ,~_`?:gx!~7>Z1s()@{;/Kd}B/49$7ZFa:U4}0cs?tϧΧVFZJROŴE\)*9MB̓4KWDk7x ״:j&޹b*-!Ь!a/|R 7-xXqPoϢ<HR?hS%4 ߿ p h˥Q+"55$qX7cM=sꉪ]LD2^|ܷ KKpw_QR5sO[l=+ytD*ʩ}5w>oD~6Գt p5OSؙel@oI97 ![w =d[@P8[~o5-Wb^>j\q(viwϲއ8}_y dX, b3JWXF%`ضPE7(dLYNN؄h]`U3G/-خ ŬQ N FboLbQGTE@E8k5Kj7K(F15O0]*S%[7X߼M!BuJCYsom[7sG?6A!V~v^N.9na!fitҕ(4=hݴ5 _͗zxV,&鐯My%A變{SrucwJi3&<_{Wy~VG:E )y}< _g>iig$lhB+Bʆ.G؆!6c⏛4N=uɼD;BX;]~3} w w1J?߳tQGB6&ϘaXcX%ϙ6]C`8Pk^+_% B?~8΁MP,fioM(mZz m# {LP9 TK5@P7sa%ml/b/?#o*}"_#\#a]#aX{1'Q;5a#Ԥ/L"h bh6>"yP7V.ƇTSDk#/ͮyn!dBε&;[yl닂+uv%r3xO.^ %?f Lu⳵49"bQ}ΐla _,h#'Uf3J>G :\#\$l֌sO r2]> Ӿ >6_G[ՇƑ+!HeOR-nn`^ _!] \P}LC@0Pޠ4$ h=&B)-gb.s4RY{Pc4 3[-ڧ&7;+.M~Tx 9$ w %؛ZG/בVjXtf?ԝl?3Nu%a/@! 6`1U Qj4Y[sIc?]VDq'[s5Y(_} @X xXG#^YM"*5GcsT1H#* n+i71e6`bl}ɷ O Ug ~ڋ:RH@@A P4<|B":ڐoS(L|Sܿj$:Xy8ȺRnX#?CjdqՔRr%͔vϏYlзҺř*o`&IK-}Ȭ^}U)a1¥ )9u5+;".B%KC%VPSUګ<P ۨn ¶?ROr6u aص# B! taMa[#_9BCn!~7P}8k+If)gh>tNMӮSZh!O's["=BFz0l]"l\O"_b 0 K$T$]xGIm1/6OpꏅE ̌n awmnSZrt(IgN2 ({Kc!eE V׾E !+ԙSLu\m-LsԳD3 su/cu:-"="pӥu\C5XQA)1!! ^kޯ0f|ut]xc$=/I^y3'U=$$l2䏊6~I\6 \W>m"bZ8-g6u-_փrȳͱZS$g@z*GnG 9q !1111!J>o -dDu5ppS5~8KNv'h[_?*\((g+fK2PWRcD؂@{<|1{(?Aq]3vTP&FjR%\-$%uP?')ȴ+BӶ4P=dSSvZOM݂% iW6J^t"b@!ʁ{  9UWWԲO|%(Vn6j2j8jo?<:n>V5)8UڍA<]66P~bn|C)s G3_ܜ +~0L"l"q:^}RV4 %9{کG;ȇF{fX*DBA'DrX8k}%αwRR|^_' SK=2Ź&\uqvk|oY{e y;6zFN1eČC]ȏ-8㕷SUL 7'i?֢-t6di^f%;˕KktqnܢgMoO㗯IO5`ځ]2$Ogk|ߩmkgKs$G眅~L!gXl+*f栟2 f؁v#=RŠd2- |ufphe=֑SFDFHU:qC(u$e,i"U4Wx\Hn`⯰Ӣ߷ct׳%{y#?Q{OQ;3ÒCfƝ^@[BY_ë^xy~~~~tO8JU5͘.>vK!v+_S8:3Q&/n`&W[&}k:KRq5HtMrӨZ߾ڽܿ8@߸ěf;S4q0 ,M*UmŤC%aTR0 INQ͑,jinkhj &4,lN{W*Nb:0sP$)wC eհS^Q%YLո=T. 96Fn?U=r◨{D*7Rm2^2{ HP.Q+'A-P0Y~ N5M %- ꜜo[T"DI9%L*{airj`hh^0I'$5Nʣ{18wW[/O{W$VgM'; >'1%-`mz7(31DT=L}0L:H1[-{GWWWw_aPUXmun"N( qQ{FQg?®M8>/Vֽ?W1c0HQ$_w0Sgw5O{/ CxklWF; ː=HPr_ NFlv ݽë YUګ<6Ah@@TAX]I6 S[pzg0"v(^dlP̗@\#\YFBNX7L"r 5J+{s1ɺT92{̧oNw|W-+>}E{cxE6O;Sw~{0 @ k~/TծՎ6EK*{`I)3=lK$A8 F}j> oѠ?:U??Iޕ ԰OtMQ=CRD1=Gs=ň8I%*[ljԞLrpN* Y18Sxi廬ٯZ)ʗ(nFjۆ)ahr{}ufff&:AFBbɖS#$3x(po;z(f]e 7nZpV&|?*3WP ϣ:x=&Ťrvp5NVH%?| 08tI,` guqzt'QR7,qDضwIePM̦f##M#_RQyؕq䃯"qDn~aRq:Inr͖tptj֜~%\5tUD[aV*$u/'0C⡄v`j ghF`x= HZᒯ霧#K,^g&/6`6ݿBjxxV e6,[6bӫm^'u]% =ҏs MC$Kh7x+佤ei,2yEϋv 6VNwWg%Gh%g7п?j_Q\&j`flWԲN!lgAF[s^F3?9WB>è#lcnoѯs5JUgr0'a#f-$fm%b$f[]gP%ט]E6ޅ:ʼn\URTyTzR+GwaQqH]G茪?*eaeqbgQfm`Sɷ YY"eٟX2 urcVa OUګ< CpwC {o Z5cW7y v- 5{'j߮PcdtTG2D1_8[@hJkٶWAѹ-F3OċKXctvsݭKxǷPNm7(6{{);6PO/axwCa ¢IivFؼx?^Dȴ &R[#Su-lAt=yE}όO |i/j/1hJ`K%s' Աgnxa0MwHbWgFX{D*N/Jn$﹢| y$Y.Q$a:w *҇ł[,>oanz$oa QOp6fޟS\L^ΓͲ\uVD.tlBjs@o`:!@y:):4;s»,z9X bX{VwM7VUb<o!N\A=I9EM3}4=l" I'_#Yl9 DH-h3.qaeAd|}N,hR'ľ\xu m-}A{`3! Vᅷu~jI*ߙPbOʦře&qXN)(,}zm!YN5.26o?y3Ojx~^NVV7,ems" [ws4}L^*b$KSʕ}hlho,̕,5߃"Wupll2n n/ShA1P]ីlȡ߁q,sxM0B8gõE;KJ\S*R!]ŸK?|x|z 01ߣ\b}>"~} 0:ǴMc4ő)>U."QzSwt;*Dbqx}zN9Kz.-1T'4  &`>s{ 2/Fo wsܶ=:餜nق˹Gz{ziF~; >Iv7GEtq _ȞX,k]|q,~VUګuKLUJoJ^U =VUqfy}pLNI +7M\>B+y}21̄uDGdְY.xMg7)g\*e4QgNa# L¾B@igQ riL{P?ZJjc#7ޅ}5wjH϶]~c (*?_~=ʷsސ/_ F?[>)Y`*j)ϥlO[(sG!PFϘߒ2S? 4|N^ww1:TyhyF90O( W6'y<>0[) yF6)U;hdzJ;M:5O9Y!YOu|)pm_G\=nntWH'DScXCȇ}f W= ˂dXYFTxEpg}ǟ_=!-*43ET3uL#3l\PdSk(_-4^5"@8:I$̸ywأQJݭ +{]g_V-n6Y&~r KH+<`g(tEbl̎r9:VS çA71'{+Gx[d #2GŚ)nb"5"K""c8h?:XFw2 CH*lcZ&]f0<Đ:P1(U}:k6V%^Vo-Vhq(pKcz W"6 ]Ƣ}\N y"uT"!Ha$ e['hvNwNpj.Do4`X D mcK;gҨUJBߜZ͌NhH?Mu.qmwt3ݢ`:'NE8}BG>=|>d @}Ɠ Jk.RvQɥ@D:Ǝ#p .{ ||/Cz @HNk@ YPf^vO_f$t-xEu \?χx0?!^fM-m.nkf:L0F?^~ibglRסR5+͠!kRsV`0P4H2hxuPj`]mJ>:qoʕ듓nfCl_~fbJ \Z7Mt': m,O"q1m,o|nV1, O 0vv7ձ4 v]"Ô;@| >1]*AKV`DEpB*bT | 2qZ%B#HDLjRbM?lm4=CØ#?œT` "m< 6 HX,˷VO UlmK(6ߘZiӊOu.vuɉ副"oꮾUǗyk깋r] ytA*Ej,= @aJle4΍_{d< L2Cڼ~EJ^4u2 zOPnb>BtAȸl'_~}<Q KЙ#]yF(2L. @ V@aY֩'۶z:h9pjRy¡ 0YGg&iX/욧_Ղ#ެ 1(v=jWykHQP{SķWiHYŸATn V&ECHT  }uO~iÝルӓ垻rQ u4{*&Ng; oIfH|o|l?;##m볣s~ uQ'E?22JDQ]%r[x@-9 5 1_8G4物s!&*~gCOU!z7 9|WtWC{ӧp7PU5ƭq9}-FVn a!Ӈ֗houc|A 0rZIķ0D0 &pp_d$M}\ Ұ g@lAHAEp GvA}`@PWp=AüBFxw OtG|C+gqzwku-sE >O3`@@{B'H#L=\- "  8h (TAF aߊ~'p 6"4!! W Ww`+*yw߹u6ױŕzRDz6\>q8Ag:@sHi2'Pc0le z~\^ោjqL,ިf# \D>㿃xyLӑ~L_ OhWh6>=wP/ԭƞB~ X6"6Q}SJgU\oQ9$Omp&_;K&bvy% @@XϠ4\ H;9p,+*EcshSTM;Ml}>Vu$P3#mrE6N ̏G3Ԟ SozhgyOy?F|;7D} 7 S  灈)Af!F 23yUNZ*9xbi).IҶٚҦ&$ o)WkGi7/^1pq6.R-෩ЅG?LH/(Y`h+VЗ5++%."Ք9 K銆9 ZEʥ{sgudJ?5%L$uj/͓MkJ4ٮ+2e \U9}a%W[Tҷ0oݹ8"NJYJYZI~N?mr?c~鄤Z;V$+}[*S.MRr 0O]>IE /_,Y*ȡ`jw3KI1ffUz3 Ȁs.3T}\1%ʱ*fj2ed(sHsd}>urIy)2|9LTjE,JirR~jz~:ٶ:9K0lLY";X(䑬-/͒GEU7omҞ,3 |2uX)d: DV<<\(]Z&^kLO:ϋu~Dn8{;CHu;nv n)-$w}H`Ap=9p7U0gO׺N}0_T;zDnl2jt$:vQ^…BeBBK\LSK'Dm{?'xz8; 2l=Btcu=%?;9ޞBW ,0{2rݴxb{y] =ǭ&K!L[^}++c5=S[(c-6Jl хO-Ec4jY~?ry˨jћ)jF˫sS ;IBv0Js#:\~}TH$*AiE" aȜM@I=A W:h/C9H&=u0}c0^ X(*`CզאCLqF_ETȍcM{BC]lsE68d'vӃ[$ r:o(l^_Ufa?2 2(p(QsO!-!.KMqfq5$Շ,;1FW\&drF]ޞ5Fy2N9f9 ̹ȹ@.*^{UEy~Ձ=8{3>9O6Qx)$ j .BeBChV!PJPz/%P:,1V{>&@c:纄Eu_&7N?n̞LZ¹cɥ2i`%FBykC-!_ k+++5$~P="icF ,S+=g??H-vp;A+@w L#bc6Ͱ]rvRgBʷsw Kp X{efG_ j}+7{(ki:?z>4LPnPjjtLl<\L/I?xyچ'ߩʕ߈iإzQLqhE]5'$آۥwW}q c>?ҧ nmb7ְ [i"\"i^Oqn@g%be w ct~Bc;U;"(xǴt^j| fv tu{ghDuUd2oQ4=x riFqG1 .cn,V'=GE LHijp l V/>O5wB)r^@b p*N-9)%L-$^ `5skٟ[gun!M_!/l?Y9>uwU:v]:׵_Oq|7p&H稍[ۘ3 )o  ˠapjTqtT^T.vwaB%Q?'qu{wCrFtzT~1{FNr`os_}(6A}:^%d#@?)5Ƭ'}\:\k8Y%C߯썳S~ ¨,'Ar`m}wx:ψpN.8{3 #=-<%, 4>664)||-= y \/LXC]h9TXįtsh<j@Wyk/S\>-KLZ%C !oGKĐ%PAo0F}WoD&kQ2Cf=To JP&E[/sɪ7c͏n\ݣȅ 0Uq 0 m)kN^_xZWw> q- - [5j6  jjiUM26sěRB2 ʹ #|u@0ۤRVUG:N^- %pT!05}3K3jKnَwNd.S>$vYXD錿뜣zWgR,"paS4U-f>HVGÍ݃)*nB尿msW/fVllϿK|3l[ǸoFh۞˟|׬t2d?ρn;DA[ jnX!T^,֥~i:{6A!WS"Uu$1ӿkkB`h)2 szEe w1>LRO]=[BY]%dO9߲+ZԬ4"(w~ZA2rehL]R)v>yTpQ?VA/IJLPcsieFnR&lI} Rz]qS} } }}ApxLM!*dޱV1)6B71W/}.SD..G0YoU3mb@=M_i|!]\m<ە|YB_ { L,ad<~j ?u#h 9>eߙ33g~g=*VVQQҖ<Bv̪qdf^@mJ~[~nS\K=a-$E_k?(OZZJcӯߌE%?0oaAPiCk@/LΕIO(V0@ #jvJ/x^=L8@qDtE$l1$_'[^*VRWVQܥڑm=~ds٭駊hNhOhAi U=}R#,}Խ Cz.{?C&~6D[ji * A"`` -(ݍ"%HHIwwww}NG'<}͵X{ógزo53KIV:*r\ݤơnGR%b)iuS50~i5\*S n*Qf jeI9~E UU #!ޏC\8,ork=PqzsA)LOepD,Λ +867Go5ĝ̫ÊY@aKibotSPUS3U7Fikm+mp|}=?wA+P@tQ'ͫo(:hpxuào[y0bAQ>vI96V~r |%׻/qOp5r M^6B9rŐ^>mM~MΚV&zfEQ&Z.*bxRh8Gw\X㔈4p0qW6-5Vݰxz%D<7]ĸʹu}1{`J'Tk@CsNs:y/z:* 2*Ƌu +@h<Gq=i$8?+#5w꼵ŊƜ;p荾K(Lю΄,oyO8ʛi&gZ)W(,:OZkjJ{loށ 'Ayv 6d6~bX?fq&]= _~^#y >. {T&T`c4/B$̟U N>[dK;-y#Ӹ]L+V3YRԻlu'ϼaܗO5]/bBҋq:,ƴ*LTbm]݄^  y}'XS襶?`>>s̖y#\TC e_ڛܒָ"D9a*:we y-x5D 2d,T/<8 @'..#)x{؟s30|)QWcO"_zsrԒL˻j<7UL]_Aն%;..:1zzbd^I"[AZo{xJxgJ]uKC,PXfq~I#=e-T-մC\q/mg3gɚF5km;VSAHNS`c;o8zCS; *0bQẵ)W8>}\EهCԁcc`L`~p|/k1\+S?i=t7z@Qfrsq7/FkEa1&\|}W_h$8:fIjCEQL8yQL 4ŇNdSSs@؍4<<76̅^=نY^'xGY*ԤG.ah=y=h͑ĎF;nr`G @a3翈{ےtt|#Ɋzv o?\m:QwDM+UyٌV~!WƱ샓'f?Z\zl,UL5mڣ[FYXIǮEĵb>L>%M7M<"Q'Yn7}΢s4Qe24CilXS,-϶O.3.US|+қ4:`g-)pzua!=2t[zðpvGU3W/;MJ 3wl84ӴyLO5;y߯܉7ɕ0=v;dߢ뺄ȩ[+Ț 5o#*s([wv3KE2SHo'%fbVMn7661554!azF0q9]w;EK5] [~8z1C^ΙY)FJ TwEꨵ(eN<)tb.1])>]tGw_5ɐS bGZe+tM(( VbU*.u^ߴ tt?u쓳PQo.=_THUXtS MA}Zsu L"]6tʝo?!Sb{5*i74қ6_ѷZQy3|/%GS;J'I_Ͻ*Qe/b/k0nbFj٪zT$Ke$saw8n߲m΃Y<}m=D$-5 GBv?a[Phaz6i5fݫӢW-kS,nre_9qq2?sKv (-8!CXKt'iҩν9{ƒ½"f<{dM_=@''#W*p`)v&L$,?*BNz[=k'b%ߴ{G~NY N@QnK==Sj)*Ov=ɋiJGf5VՄ]@QND/d#xX,YpcP9Bƙ^8CfSp GK"#zWbh00LUds?C'S"M\s)!!:!8'4md2Q+|t!WrN2dߙz/1j1<ϗpbLBM$ ocisw+7Wv.rN J2Bvn<ơ?07t}_a28mJ{]ߕgjw( [A2 D? 8o='>mY{2"}xtDH`jOF蓤@gEwS- U}y}}C-=#msE+q;'.|"u7e;nfDPck&39*%~{wog%\G5:^Tif{3jb]9py5JUP?Wdc*'Ssϖ}ol$L?ϗM@ qpu".{}F8;dڃowbp>QR3 97;nڊZ[MM.ZYmC5:ֆ::fz҆/ Kzalcdfldedh n.h'o.dahq_sTecsC@ <- 1pcȌۉm>v4ԟ+aDeq"EP^(K T+mɇ 1m;.ݪc{=d42>廊彊5qe$t貧K`&lV̋ 4|! e9ͬ]𹏉L+k. 8W'kb*n>$v'F֨\n ݇bxOF7O?WIҼcw5#m7ۇ#Ti Yk…]Mݚ4G>@у5tnۡ=2Z6y6M2›dcqRFc߇(.\'cT3<[@y /'8QБsm>b"JܭhXIn4vkOԙۮb k: i/>P0LWNYL]5wjle^q6[z׍5wpxs՟8W{U wסA7CCC ʮ:+Ɇ+rYi=z|1f]34h{pJv'>G/a禣[ zϼVxRw\; WH\J^AS^ISYN[UJWS|c!c!HN",\%)B+i*9;VzzZk$$U+Vac3Ӗ[L\%/-9stx` !"kMD!7JM/GPRVwèJ?cOW 9|֫!7h Bҕ Kk=;Gv.`pfz/㹛ZO$pO(J.SW8kNӈv{r }uv% 8vd|l Ad/QU'qU瑪#UGH^&&a:gMor%v> SS9:ʼ0a@q!Ci<+ŗ8JJljԍ4r*zSZF:MiѨd6ty,94yU\wyB hyfff"_y<f0OMm6v0nh充+ JQc<%veCk/ =:y}NZSd--p緅0ydlŘ'b+nwJޟ'md@) YC-UcϩQY5^9Iq  ;o/*$#):HD@|#w}Rmu-JO4 ,5X6:`X;n*lߨv'~"dWoT._ WUQ@Zi۩"2Gط0. ΑXk7 P 5y[(ULe\I|>▓GG6vˆ؄v) kGI",aMdTCLX%D F]TX4;i*x|^}LgѤ&9webg,а@@ <.󔕕edd:綇|'E1 GW)\я{ùG9fٖXPNRQ-5}CUski$"TLf9"ǜvDVL[afoAv?YA K]&O괕ՊT+ǟ~{㯐䨑oKݠH(>>PvpqwA }v#.3"i NO'yo}3ThČª┭thPPCȫ4%$C-F{wvocFF]p^-sWZCJH h®  3Cʹ)WR.] 9r6%tOַH4TBGWBC$ZN\6I{.#jOIUⵜCWٳ^~)aa Õ{Apkp΂KgGH};>^H/"abcbRΊBKH ca$ _ڴ X{_ tyl q鼺x0g:Q\-n>< EIu2˻BIٖyۊ9Utk$^vՆbݝX*:E,U=eGZxk/jkadNQضM٧rY|P%Zً=uUV3VN'oD;}rE[-ێg.ѽFc'}XRՆL5XYQrs˖NVJXׇC~'w'99ۛF`{^Ҡ.|N:63J"޷֢/2oxXnDsW|""՞=w^ r ¹z- Ctk(Ya'jnכC>W3%+m#<<{/ ?gu9{ vGn')X %*ܳJj&[zˤY餩JI˼Y3y-veP^m/W*x.N±dV^0)aDZi&Kq#f"sך >|c᩠L"ݗ"F9uWif jӖBonԤɭf)jz?d҃1>Χ^/TdZnǞ34}/J'֥VLƽ5$TgX_=koֱ9zYXR60Ro*}l~\؇?y iKuĭFv+Cmn'ڼ5|܎5up+e(v{o$\$E]+8ߎ43tg~ Ծ'f- 9;Ljtʤe?6`czyڇ=n&^Apyn輋@djF=d񟥐>i(lťkn,g ^q`w/PӽIs\DT t2&aI nf(uSY 8 w~BizF(;ۑw's_Wd{5>K쓏yV=|yQ>z=KaȻ=YͪK5tA4fGB3Xs.N]ZϹho>燭̵)Jqs'v`[,`IyvH8]8^jo0/s]Wve7=4n$.f HO}O!~<)LUy [bYüb9}c}][ s$ wj5Ui%y\M>fڀ!7sEqZEzN΄֒duǯ"-k̯(<̣0x(+1"ho ii(a!,AT59qҾ›QOd4٬?}ȢK-"O9ж+/woZ߁>ޣ%kOU2d沸]Sh4M}b 'ȠyB hyn߾===}|? .1;oH-[&%2}z˄ʔpt[]8{ݨĀ#.m6ݳG᪍V(#u֡(P;PPd( z!IKE߭e 8G~;&`XP@U@ dlٚ6jf7Q@P Vw/.%۫:Zi |cB >F̞Jl|Z)iE܈"EQT(7XmWipvDlWnú@ jC`C=hݑC!!aDD?{0e+󤦦w=}K~ @@ E%$$Μ9t*111tl_/'s?}:v]888 ?Hiiiѻ*!ȗ|>/' 0`@@ 944D' tFIǏjH#yBJ-==LL)>>|;?TDJHH8E[NʨEz5pSyfכgǐsE˵K/'?5hV"<뭦[m7n*++7''+ͳ6D;3Ly!2"8###eDTغТ]LIIAy"_V#-٭\,ййТK",͹~<|y5h=}UmÕ96X 9>)f %H5˕o-xrezquiEh lšCQ5N+Q 1v`k![mU Ի*&􌼵c04O4Og_(_d/)"d,(999T"66Βk/\CB"ډh "3!D<rYkFl}cypqSoxIے:丸ys?;jk=K >L~jo}g͓݅7Ⱦgʚ|_[J%POW3 !0U!I7AFK5AIǠSԲE4-^'\1@+_)KOqsw;?vMgѹ}C//05O?r~ȷvGm8.ݮM}u^5mM6F9%E5aC>sᯪy"?gD|=}MQum݈IvL--#mlDqr>mSG}Tfs66>dϧ?{sZD)-,,޿/%%lϿY7-98o1OSRn*6zhዴZ+_4;L''3Sܹ|̯^}xZ/+au %5,9.Hqsqսx= 9| @a??b>dbJSs'ډdmllG^Wl(K_n^u1ϜNFD8anx^B᥿QBn:gyرwҙҝ}q`I*670dàl&m1-Na5~iu!%қW<7LjBS7(A#&C)2M1%u 4s>5goh`hhpxptF8S#QA]GJy4^U-lnoZES͓1ANn>}|uu\KIIr7'Z> V!\p:Ul @ dYH;vw:{* ?XDl"2鄼z$=s ښOrUp/-d\O6V.W?MajB"s;Dήe+Z[[eepOUәSKKk+ @yS}s3gRX?wy[auݸ8FauM?G#70 Nܢs\k_u2+n9MxO2͞|I` ''4O#iBB)Lh0 ]Su 5,򩫫PHJJAZD~V yH.D>cO1 b_{}%;@Osq3kc/?46R~ߥm?-_ɏl_> stream x1 o@DB:s,ૹ? O$~ }g?d`9 endstream endobj 779 0 obj << /D [777 0 R /XYZ 71 757.862 null] >> endobj 776 0 obj << /Font << /F28 123 0 R /F31 125 0 R >> /XObject << /Im7 773 0 R /Im8 774 0 R /Im9 775 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 785 0 obj << /Length 1200 /Filter /FlateDecode >> stream xڥV[6 ~ϯl`ku[vb]d[#Yl #EŹ,64IXpXnfm *2lSYlmWYk.ڲr9:lÌ>FaI(axJQx8inu@d$&(yaѫ_XЂ)`qVmA^n᫂V:ls5e5+gM\e)YRFI Ҍoz Wc'46RpĂ=&C_(Iklj%n-ĭWc޳T}l a%ٓ*J:} **ũlq!6팹8C_`_giw;vmңGISF_gAiD;[Nlr9zAGT|{n]^[G} w a]s m}K 9/pMEz$#&*S)%BXzyb6QV(DP/ 7:+ݶlҠ$ V4yOX؄3#?N΁l;>z#鬲oheNsǮ[f+|LTsrrhbTDYQKX ,#W*Z  D{ſZ^w3\#m3` nȀB*^ ɉof]p)$b"ǣ;G$;Z2* j}]y+3`,TI&Yx dE/'{.N  hfp4 ʞ{-q }K?k2Fe]#e&%GǃsLx+rpeWGjw dJhtb4C5i .O$ܤZC )RWU($ Yo8-{<;14&ă;}!G~M eq/]|iXV z endstream endobj 784 0 obj << /Type /Page /Contents 785 0 R /Resources 783 0 R /MediaBox [0 0 612 792] /Parent 787 0 R >> endobj 786 0 obj << /D [784 0 R /XYZ 71 757.862 null] >> endobj 783 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 790 0 obj << /Length 214 /Filter /FlateDecode >> stream xڍOk1sL'?זV<Ɠxmvۺůo0Pü@Xf/!`B|G&h(<>5 *r"˴J_B!MC1^NC}]$%{TNEP%H_J<.[볶 'skn$ٻO mrOE١4kg'R-Een$0~Mj 5tR endstream endobj 789 0 obj << /Type /Page /Contents 790 0 R /Resources 788 0 R /MediaBox [0 0 612 792] /Parent 787 0 R >> endobj 791 0 obj << /D [789 0 R /XYZ 71 757.862 null] >> endobj 788 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 794 0 obj << /Length 304 /Filter /FlateDecode >> stream xڝRNA +\w'$B! )$ A^ 4=X&8EAm|)8G cZr~)yx;`} M1D"$L^ 29vRu5;٢^j|@GJ1-չ8c*N,fBOֶt8^RBTT:r7%GBYKx/:MWSDS.4ϻR?4-%LFo^ j٩БZHjԡ~gúwŇM '|:ܥ endstream endobj 793 0 obj << /Type /Page /Contents 794 0 R /Resources 792 0 R /MediaBox [0 0 612 792] /Parent 787 0 R >> endobj 795 0 obj << /D [793 0 R /XYZ 71 757.862 null] >> endobj 49 0 obj << /D [793 0 R /XYZ 72 720 null] >> endobj 796 0 obj << /D [793 0 R /XYZ 72 523.691 null] >> endobj 792 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 799 0 obj << /Length 220 /Filter /FlateDecode >> stream xڍ?O1 | g:TuH{*]Om*>)ޓmg@xfɁސj'!4A8xzQu.֧Kq ۻRxIm}%I%afWTE #l\_;:6.k lpL<]Z?uΩ0[U'OD _taĮ)fܸN937CR, endstream endobj 798 0 obj << /Type /Page /Contents 799 0 R /Resources 797 0 R /MediaBox [0 0 612 792] /Parent 787 0 R >> endobj 800 0 obj << /D [798 0 R /XYZ 71 757.862 null] >> endobj 797 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 807 0 obj << /Length 2134 /Filter /FlateDecode >> stream xڭ]w=6')\c6Ϳ3`B}|i<=i62+1Lñ\mY3 plׇq%W^ݤWF#p0w`k>4{%: v93eHE{]\3ge4y)ϠSmyF`)z ̐*?T3Xj4Vm^*!Y jZOG*ؾA4e4JQ^bn6Q^sps|mhYvq.M]<8zOr-=+8>'HHd}4 EE}L/zѕNd\)g%]Tj]|3MPKEJ.E_< dFਔ Ѿ&4YrDA阏̶ \}QMQ\ߢW#>arY⥶nN7l7zO)]a ]MVgF3Pw *8?m7 Xmb ! zߞouCjJ"LlfRK,m&3YM$=oуVB+M%dZ1h5c[5 aP8f)D~(i ՘*HdJuN}ND`yRZE܃3t!B]vID|qDQOa+l"X`t.ya6LHb_I*W"$tH@q -,:p(&T1LC1_Vܜ)LŭH[fAsVJGF1tu`1=!Hd$ҙ<%rEJy\PY 0&2^̓Hj2`hh]RL N<=)Avy= ĹxĸQ\"Fd8=֯ fmcA>UvJ'h *wh J~&t$o|Zӓƍ wbu "/4ۃ'!bI\b>L= bMBRCZS|i8W#RIʩ2?6ddM*rN `wr-Dfx*lǖ5I: c/,لymY4 iP2QYO ;& ʀ#MDeTRL.&r'#ɏش7uηV,lczvشv#.-߸B]Q wuxpX90'T $<C(nj#ǶiLn&T02w* e0^! ddp o۶m ~+ f5V:u_WEX\,xL?Y l<pS8)R:$_2` PZ⩔7%b l Sh-^m1R|G=]3g@i80c w Ϸ}Ƽ?xp#һ$ l\h. Ŧi9p^UZen7:˃i09Skߚzk . Ѱ;0E˷5`l\~RK0L^Srڻ&5UQ"ޜO4BNX^KGmVG?$ N> endobj 801 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [71.004 164.727 179.725 175.631] /Subtype/Link/A<> >> endobj 802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [71.004 152.772 157.718 163.676] /Subtype/Link/A<> >> endobj 803 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [296.787 84.88 336.432 95.784] /A << /S /GoTo /D (term-traits-ui) >> >> endobj 804 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [513.4 72.925 538.506 83.829] /A << /S /GoTo /D (term-traits) >> >> endobj 808 0 obj << /D [806 0 R /XYZ 71 757.862 null] >> endobj 53 0 obj << /D [806 0 R /XYZ 72 720 null] >> endobj 809 0 obj << /D [806 0 R /XYZ 72 561.284 null] >> endobj 57 0 obj << /D [806 0 R /XYZ 72 561.284 null] >> endobj 810 0 obj << /D [806 0 R /XYZ 72 153.768 null] >> endobj 61 0 obj << /D [806 0 R /XYZ 72 138.759 null] >> endobj 805 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 834 0 obj << /Length 3463 /Filter /FlateDecode >> stream xڵZI6Q^! O'tK&trs`S'pqOmfl?e.b)T*3f͟J>bu{r'KG|pxJi78଎[& *ORYr0($b)Bܖc50;1KkJt AJQ~l,hDɃ P,`tn M´l`ϰ5HJJ65fU`Q] +m`,xpo'k4Cი*u5 &Re 0Ae[Ekaʢ{؏Jw~@Wim_C0 VԶ+xpy(X&XC6mz"Z>#[D-}KX2* X-rQ}iQ4B=fE%Ta( Zr"K9S%(@9#$+yljR;v,HWL-T1sӾ(%`nb/ r`e/W_]sϬ[3a3e[MBƎHyLP/S9miԅ"q=f0g2ċ腣ŇzBL2ogsPy,Pkxd$Ka!9UK6q'›E0($Pu2p{bſ>'dGN uN@\IneTJ0ڝ~*P-Y[Ś` 6{\ :TE `Qu%#H.35ƽ#™'ʰ\D:?)%KO; ζxvWpiS0bXE]4>\W-\#Ð6;rX\$$|E>8ɉ6Q1R]h9"02KTUu[mj>b_B׾T/had= =u%W }8.0^e/@Zeʇ^-yl&};'h[^Gk-SHU6D@QqD7&.?t>'5Ny }841ĄS~NL2A3p`n^w \:P-ubf. iNƒ€|3MC;L v3}< .waTu`vq߫>T?dXhwcf *|Sr Wop!C*Q}:[fֹsdۮC=8YӳAQy9{&ЎP#Mʄ>=~AnaC4s4!iP{<ʞsU'FͰ۸[Q HsDͭ*y(8S`Sw||] qC M1LQACa2Ո >(Ur7mfǣ߽,@=2t#%z:GE?rJ")a`Q I KHˇc\plH?G%N-l^p nJ%ތBC2Aof׊ ^ng xy)~1T){1 FojνCN&J7O=YE'` lLJ8:qI.>nx,Jlm8!xDT{I:$xьF̯HI(_x#'G |ŞI /|J$?֫`ގrx!1'&A 1WYG+L8tdB;jhtODO>f 5 ~%!:k {V ?zJw-=[{ endstream endobj 833 0 obj << /Type /Page /Contents 834 0 R /Resources 832 0 R /MediaBox [0 0 612 792] /Parent 787 0 R /Annots [ 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 825 0 R ] >> endobj 813 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.969 612.791 400.212 623.695] /A << /S /GoTo /D (term-mvc) >> >> endobj 814 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [512.155 600.836 538.506 611.739] /A << /S /GoTo /D (term-model) >> >> endobj 815 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [443.984 588.88 464.089 599.784] /A << /S /GoTo /D (term-29) >> >> endobj 816 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [385.326 576.925 426.949 587.829] /A << /S /GoTo /D (term-controller) >> >> endobj 817 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.78 505.194 168.936 516.098] /A << /S /GoTo /D (term-hastraits) >> >> endobj 818 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.724 469.329 178.151 480.233] /A << /S /GoTo /D (term-handler) >> >> endobj 819 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [385.166 395.16 420.364 406.064] /A << /S /GoTo /D (term-instance) >> >> endobj 820 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 383.205 126.736 394.109] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 821 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [298.686 303.059 322.825 313.963] /A << /S /GoTo /D (term-panel) >> >> endobj 822 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.438 291.224 148.134 303.597] /A << /S /GoTo /D (term-item) >> >> endobj 823 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [166.14 291.224 193.697 303.597] /A << /S /GoTo /D (term-group) >> >> endobj 824 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [198.23 291.224 204.208 303.597] /A << /S /GoTo /D (Hfootnote.14) >> >> endobj 826 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.052 291.224 523.646 303.597] /A << /S /GoTo /D (the-view-and-its-building-blocks) >> >> endobj 827 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.092 261.216 170.196 272.12] /A << /S /GoTo /D (term-29) >> >> endobj 828 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.822 261.216 208.853 272.12] /A << /S /GoTo /D (term-29) >> >> endobj 829 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.792 193.026 390.218 205.519] /A << /S /GoTo /D (term-handler) >> >> endobj 830 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [417.039 193.026 423.017 205.519] /A << /S /GoTo /D (Hfootnote.15) >> >> endobj 831 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [277.596 121.295 433.27 132.199] /A << /S /GoTo /D (controlling-the-interface-the-handler) >> >> endobj 825 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [284.139 102.623 336.374 114.321] /A << /S /GoTo /D (include-objects) >> >> endobj 835 0 obj << /D [833 0 R /XYZ 71 757.862 null] >> endobj 836 0 obj << /D [833 0 R /XYZ 72 672.015 null] >> endobj 837 0 obj << /D [833 0 R /XYZ 72 658.078 null] >> endobj 838 0 obj << /D [833 0 R /XYZ 72 452.392 null] >> endobj 839 0 obj << /D [833 0 R /XYZ 72 438.455 null] >> endobj 840 0 obj << /D [833 0 R /XYZ 454.581 374.403 null] >> endobj 841 0 obj << /D [833 0 R /XYZ 72 358.309 null] >> endobj 842 0 obj << /D [833 0 R /XYZ 318.233 252.414 null] >> endobj 843 0 obj << /D [833 0 R /XYZ 72 236.32 null] >> endobj 844 0 obj << /D [833 0 R /XYZ 437.853 124.448 null] >> endobj 845 0 obj << /D [833 0 R /XYZ 86.346 115.924 null] >> endobj 846 0 obj << /D [833 0 R /XYZ 86.346 106.219 null] >> endobj 832 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 881 0 obj << /Length 3238 /Filter /FlateDecode >> stream xZKs6W- M|lGMʼn!Ie!p!'$Dzh/eA"F_7'n͋.<&D$Lc_Me~Uջfשj;fϽjaT%~ҵV}߯xvuEMIv4H7߃M wy3(7.~,tD[I0t08tP> @|\ ou˫mxqC6)"&c'}|ϣ*^[;FZ~^Y6|Gowˮ.4SFJK7f@o{{{o[mGb%"PuүػgQuCUj bQmujjv^+ŖQ.Q]Wu59!vqb"rew0R ±ki7Uɛٓ*by߶[{w`nQ}Iz ,A#QGkU {ld{P}{m~ qKcpggQAwѼݾ*<,1 tFFpQ m4ZX9>=X9x&^ ywLz8]yV-A*3ƨe u&[H. !m5O0z}z֙ԑ"Mi-أN j;c( _p֢`8>ӑ"fЍEzíq}eW(~ E0Px9c?~a dÂ5a/jYsGq0 3žiP;rce|JU g6+;XKwN9D+?oz d{ͻ,#؜REO0 v5ƑPޒ ^}K~"f+'!c1NcviB-؉Y1(#Hi1eSwl-H΃tuM0΁_zSh0f.0#\g eSjumœyvԅqw؝ D~",VJ BTS2ܩ:v^6,g %hS>Ƞ8-g Eu9mkIjcm]UjZ4[oN0>g?f1#u[kw lݴui$xF0f#'tkurQYnpruZsqR"LTB]gzea;ZkV@\='[,9to֞d Dslr4Z1_*,ZlYԧwGws1ŕwvGnKZuo`;z>,lԜ м<{y/_`dgBi@"vyMMյ/UƖ}xc]`91UY穲VU٨'rNPqI`$#Ca1D5DK2eaz J<ċJ7eUZ)x90ESJ4wWIMg#PTG2stѥ=!j@.q#Y\88f+gO{u0;W܆q Ye 2R' ,nE4 8H_)lc HץT֟u^^(?fy{7ȑ:sGXK3D6 0$EoiF!2a"D 1{c (x 7{&Pƹ\d Ɋ}]щp A`V-ՠ8ͭK@Ֆ-{^_٭9M۪&$w& ilz\w6liܙ83qn!k \"NKa8[B 5CwLq:Vj^ex6XRn+C-jF$~d|q:!坭sZs0XYzzIA8+NZuËk$dc+~,GFr_tյ3Ha=^u<"#mM)HQO)[O|)s~y~錧 7= "CưDH?H}W|Q}{qLOwE,n%7rh- W W8A Y'bPuN<9N3 .V.aEUӒb$QI^J1'LNe/N:DcPJAS8+t5;0)1x LQڽfg׽0%ɜS1<Ƥ(kif"R8U <"H-m "3ev0k5fOg+K; _)Agiد,E*T274bH/8' Xr@3yiҼ ١ ((ѰlAH0ڮYN 7\*y:+֝V=wCM6X"'G [ZK\)N{.-%rfneVYgT.Ɣ)@S396:R\rFN1N N\f^?3[ endstream endobj 880 0 obj << /Type /Page /Contents 881 0 R /Resources 879 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R ] >> endobj 861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [120.578 586.878 162.978 597.781] /Subtype/Link/A<> >> endobj 862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [325.767 586.878 372.74 597.781] /Subtype/Link/A<> >> endobj 863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [121.135 568.945 143.611 579.849] /Subtype/Link/A<> >> endobj 864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [306.399 568.945 318.354 579.849] /Subtype/Link/A<> >> endobj 865 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 343.464 228.789 354.248] /A << /S /GoTo /D (the-view-and-its-building-blocks) >> >> endobj 866 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.596 343.464 311.957 354.248] /A << /S /GoTo /D (customizing-a-view) >> >> endobj 867 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [331.413 343.464 433.333 354.248] /A << /S /GoTo /D (advanced-view-concepts) >> >> endobj 868 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 301.501 251.919 312.405] /A << /S /GoTo /D (controlling-the-interface-the-handler) >> >> endobj 869 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 271.613 166.943 282.517] /A << /S /GoTo /D (traits-ui-themes) >> >> endobj 870 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 253.681 244.932 264.585] /A << /S /GoTo /D (introduction-to-trait-editor-factories) >> >> endobj 871 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.212 253.681 410.852 264.585] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 872 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.545 241.725 229.567 252.629] /A << /S /GoTo /D (term-editor) >> >> endobj 873 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 223.793 196.642 234.697] /A << /S /GoTo /D (tips-tricks-and-gotchas) >> >> endobj 874 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [258.011 205.86 383.615 216.764] /A << /S /GoTo /D (glossary-of-terms) >> >> endobj 875 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.008 126.013 384.163 136.917] /A << /S /GoTo /D (term-hastraits) >> >> endobj 876 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.749 114.058 181.727 126.551] /A << /S /GoTo /D (Hfootnote.16) >> >> endobj 882 0 obj << /D [880 0 R /XYZ 71 757.862 null] >> endobj 883 0 obj << /D [880 0 R /XYZ 72 720 null] >> endobj 884 0 obj << /D [880 0 R /XYZ 72 498.21 null] >> endobj 885 0 obj << /D [880 0 R /XYZ 72 468.322 null] >> endobj 886 0 obj << /D [880 0 R /XYZ 72 450.389 null] >> endobj 887 0 obj << /D [880 0 R /XYZ 72 433.433 null] >> endobj 888 0 obj << /D [880 0 R /XYZ 72 419.495 null] >> endobj 889 0 obj << /D [880 0 R /XYZ 72 194.901 null] >> endobj 858 0 obj << /D [880 0 R /XYZ 72 194.901 null] >> endobj 65 0 obj << /D [880 0 R /XYZ 72 179.892 null] >> endobj 890 0 obj << /D [880 0 R /XYZ 86.346 108.687 null] >> endobj 879 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 903 0 obj << /Length 2087 /Filter /FlateDecode >> stream xڵk۸ P8sEJc~IEp-zV\I=p$;lbEjHE: (xs* Q* A,ER}| WyvZeyn£#;[[[._yu T@DdQl7?sOOJg5Ne;`[33&Ab 4%gRa Bhn,Q467U+qHb 1iӰ3Q|s^ȓ*d]2 M|7?@S4 AuX39;6XSFB? XTvF5nӱ>[(P< {^."%ط25j&v=nOvɃ cˀ>Zdc޹o;g0Af#`Ѧ'A{}k_hYgIQ+݉.{ ^ٍȡc|y&d͔/ZYzN8 8n6 5#yBw,n5]=&aęFV9m>ݶM}X AdD}CF2Um7LYΊgI(/UCAedѭ\Q ]PVN!j0]h8^|z~6~Z"89nqN،x4Wz~ʣ8MK:^F z;tcgxiqt76g$ 4N F@ Tq{6K.u]m ~oWH>V/ 3TRiPѝE"k4 endstream endobj 902 0 obj << /Type /Page /Contents 903 0 R /Resources 901 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 877 0 R 878 0 R ] >> endobj 900 0 obj << /Type /XObject /Subtype /Image /Width 204 /Height 196 /BitsPerComponent 8 /Length 10279 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*.X-|)aԗk7*Lr7~#88֣_[pOes?ϬQ+CMc}w ť}oml8<5g:ybFk_+|ya3 gx;T#&aj4F7X?أϬT:vu^EgcyQC8 ZÚV[zr8m9uN.i=3Tdo}`bB/? ꒹TyĮnb #EF-%H8Rx#֒Ú^b[/~ˉ"f`;[ڧQ?cSk1ϭhE>Sޭ:+-VvcGTC#G|uӢQ߱Z];SluZXQ36Bszr37h24k$QR{dx"*Xz1ϭϭGGY++*XnRFA#T[GJ883{JVy<{H3INv>y` ww>wڭ95Mws!$59MqZ%G\)C6Dt)۴ǀ 2OL` Slt8!hTq8HdIU, oqW*IԅhӖYziCui.2yBH@3k<%iw5]<.pq%Ӥ>>o$mr?xbg%{5TXji2tRb; x[; 1. *25+x}Ho5ZZ-ȃBÂ`b26Ardqsڵ^~t'H~k^tE:p4Ɵ܊N&RLɠ$F06ppr26i\SU, U7 ԯz޿?:"Wz|veZ##Z{q'ڍĖV>1g+$4%?RqF.ZUӀ~?ʪ59N1SX["i-!(nB*w2'Z u>(k>̳(OӚ޿?:"8Yie*`$[Ԩ,RVp/?n漘%Vfrl1jV-WZ$RbJ키.{[»OUӫSq[~^ld՜}[Vcڟ$&33J~..et_lI";xU<8+HFӅ} ](wΟn>>E/ٮ]̭~TKK7WA!hK\/'e5»OQ k;JsbjK [WKmx0Y·ZmԓH 䏜w51L!I7H=Ր/Ի1䯉Tj䎚T)8 :yL]&0|/]Jd}7gPDYTV Eu[*EdLO23֮Xȵ'|4-K_M+ xoD(7 Ȗ+ދ"JHє¦ ( ( ("f5"99`sXSZKKSlҖhD!QU}cq_GS_}cq?7.iOUY_!n/]hj=W >ҞecG>At{_(Jzn/]!S_)꿯VW>AtcGrNdt>J7/k{}:_2R["ۈ\/V3^S~itzmr5HћH`29 WGqM6Y[nfx泂U2c+) N(jVq-IJ(o-pG\YZ"ӭ!mGXf%$OԬ7s'G\'ؖ-"渌Y%݆Ŏal5ch-ZS^_N n~E!ÈOC}gZ;jTK#/ +ӌ-!$Vd4ɤItIFhݛs2pKrHkž-FI%ӖT{uBmnpY$`MI8LC4Ѥ8Hmd1 $d\8&3LvAv=дx$ҬV%۠ێJ?!@k:"^{X>%Df! ;C$4n_v-ݠYE mHRhrTⶅ[D g6WL H/x4Ky@ A i^&5X]_OCn;ynkrx7x# 8 E^K;!%F i\wvFxӬm,t  08!>_*t-/ ҬB$nv \Z -o mgH&6dvqo62v[Ks׷O.&" Uᘩ'jo$7'Gi4i֑ċ,̰(2:f8<Ձ K3N#A+Fps($O,Zm#r׃ĭƷk-E ,OLֵ|&IEG'?Ə9=5WB$G.Oor{ChJ*?9=4y} ('?Ƌ |oC5+!5Goտ_ ׯ|sEiu4j_i]upf?u=K !EW QEq.RX-/7ؖieIO-Kx`>\qi\VwtRjJ AV;+G÷oz($Y2̩<.@-EsV~, {S{`o-.P`#ť$XxcvX&WH$K-^5f%f\28f]Er~0?^f:KM4(U Lgpvdkm)PBݺ6NTϻc`#UK홚)3(0xyO&oF%o֑hMf?Mf?MoOxyO&xyO&裕xyO&xyO&裕xyO&xyO&裕xyO&xyO&裕kk}Ye٬AOvbqP8_#~_f~̾/V3^R)j]i"ԿҺ~ȵ/|43῅+*VK Z^L{s^qj&IeidJ-m#GH]CbA#5fiWCp<)$N$N2NNMX364lPcB B;6fYEEpYDH:sZPu΁]K$,cđ9;U܌F\՛}>c5Dp4,QBonP{h%nVͣ/7R l|,l^F˅WQG51Ui=4o|F@&/*kb>cxoѼz7ke>Ѭ_ ǣ&ѿXh?/Qc2L_UϰX=4o|F@&/*kb}ɣxo51T}X G37%;57oտ_ v.۝1c NL)5oտ_ ׳z#C~ȵ/|4-K_M+ XoD(7 ˲MQDk! ) AHX;NzL )&C"+[M[5X eYgWCr~n+mj:wF]O KRWA-gp8rB[[Nɼ۴ ʊch5Mjɧq)iQm+3rfbNIl)mԖ7v%^.P!\oOW{Wǚ\Ьq** E"$B2̮C<*xVŬ-ۀ4Qmnres r8^ۙo61ǮsF2n2tdhi`H#?,'cbSQ+A%WNc*,<p}j樂Bh|@duazg#"-DɎU[$$}(nOX6K&b[]p3uvE7z}:7)ѽ?:ntoO@?OFtپ|oC5̬8`x=_#~_F|߆-K_M+GRJzB(p(׵o m_;q󯮾)k|9 BEhmWe\F]BHOJ7:f-x5 Xf,yQ0UIc dIڢiz 8\F6vn :+ &ﱸ1:ܭY<8?$ WwMKt%U0 dFqmWMkza{  \,p$ ZЮRܓ|5_z?$ W){rOܓ|5_zh.sےφG#CEsܓ|5_z?$ W( #'jG(\ĵԤ-oI-<,|oC5sFe~KriOszOWMyrGTNW[qI(I " z>wx'd#R[>oo&0XԢoo&[,jQYko7Gx5([m_,0 mnO(O)PKsMjUg qgjǗedg5g#\OZT<= <= eWNkUTT@7;Ef$$io?_?_լ#۴X-6N"S1PuPJs[JV,˙.#Gyv^XXe$\[_?ʙTn-YfgS$.p;sEfX_?>Ǭ^/U\{; 2Fa29ՋxnWRuec#-ž,pğŸenws@Z[J΀X20FC(8 9qU~Ǭ^/Uc?/**^躞d`oȲ$e>`2eS1U,M#SdCBsm;<Dc?/*NQ̷6Wzlv3\Jf~=v*q<M*{D1246ko2UKX[Ax T}X_?.=cAx T,`_#~_f{[u@Jųs}J?߫o(9".ais9 zg1'W8ŻrX?1'wƊ)rG&>$onE ?7}hğ4QG${cO ?1'QwƏL|IAE#n ?7}hHğ4cO (wƏL|IAErG&>$onE ?7}hğ4QG${cO ?1'S`L|IAY7N#I,''֊(Kd4 endstream endobj 877 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.348 706.884 187.437 719.377] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 878 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.662 706.884 367.64 719.377] /A << /S /GoTo /D (Hfootnote.17) >> >> endobj 904 0 obj << /D [902 0 R /XYZ 71 757.862 null] >> endobj 905 0 obj << /D [902 0 R /XYZ 361.182 698.082 null] >> endobj 906 0 obj << /D [902 0 R /XYZ 72 681.988 null] >> endobj 907 0 obj << /D [902 0 R /XYZ 251.968 271.039 null] >> endobj 908 0 obj << /D [902 0 R /XYZ 72 244.972 null] >> endobj 909 0 obj << /D [902 0 R /XYZ 72 231.035 null] >> endobj 910 0 obj << /D [902 0 R /XYZ 179.406 111.192 null] >> endobj 911 0 obj << /D [902 0 R /XYZ 86.346 102.668 null] >> endobj 901 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R >> /XObject << /Im10 900 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 920 0 obj << /Length 1992 /Filter /FlateDecode >> stream xn6_!`2,IS!ݦX`L-qM^$:QU/NWZ ھ$w?_]y%2H'^^_}{8 Ի3o^pW\q5gL 3໓|B,$ dgݖuQػk`| --jI#0D@L@O^4,JIl, G#nC{9Xd+̞U]/Of$aQag&{{x#ɳX~e5A^IMm^F]b,څb.peyZ;lWj>%Fki~P$16' }m &IVTQ%B#1- '_px{CkF@ _H;ՏPc}IjPMB;#-.,d00&%X̊6~iY)CO0n# ҥA>jYi]N.Ϡ>y[+1yrˢ۶t>[tEk(7Mcti9و8 2 Fgp`pñiǻ)ڍ jm(PuZ˅&A)N „%F')4i`\߾av~u8'J1^ #32BG 0ϡfgwͨ=*/[vq2NGmEN2cij++& کn6j686kzM-T}{{>}yCw2?kBJK H%`zr,`@UEB.ro'iĉ]#@^Z8h9mlxKb0`ԍ+ urq3lpa;XvJC9z꿌K4*n1Š lHnbRp`t( GVˣSwPj,\u꺬zXSne*L%N]TсK*a%}t2ID# [!ATnQ-N#gSjB,2#<í f(Kc2DM;⅍" ) y"8hpBt k 3dbn0 /; DԌMQSl,91:Վ7ZUל).R)/" `UGdf^j{>oPP֙"b9y<" .!{~xhE M+2RfNOU]$Y ?Q%T endstream endobj 919 0 obj << /Type /Page /Contents 920 0 R /Resources 918 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 913 0 R 914 0 R 915 0 R ] >> endobj 912 0 obj << /Type /XObject /Subtype /Image /Width 176 /Height 111 /BitsPerComponent 8 /Length 6094 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;o" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*.X-|)aԗk7*Lr7~#88֣_[pOes?ϬQ+CMc}w ť}oml8<5g:ybFk_+|ya3 gx;T#&aj4F7X?أϬT:vu^EgcyQC8 ZÚV[zr8m9uN.i=3Tc?"[(Ћ}mة#ީ+HǙJ ;tTbrT'=i-9]E%"츞x&o%}_}56߱G_o~R)!6Db0TƙƇo~n`Αm:9!C϶kwh^KJQqQN2Mm*5{wY3٣!=U9<CE̹?1[NQ)Ny۹О0<ۍ- <[A D\Ktnt0ijG45o`n<jFl\XON+ZŜLv 9"L!2=*rhs3v6 .V:˪FrJ`r ~F?#}G̳LFiӶzy~WB9T{''EA&Ho5UIjd d7"+| f|ʅ95EWmdtE!NJ)FQXo\X%&fdxBF7JFVrK-yb(uB 6;NwW :T䵾<$QSڀr ņ4}{WWn$gJ81Kn_r3)N$DlAھo;I1ƌVd!A=:Zq\UǶ_EmUq2#7QO[TUo:O"F3+j,o:O"F3+j,o:O"F3+j,o:O"F3+j,o:O" [Ber$ץל|eR_%u` RJ뫑i"ԿҺˆQEnQEQEG_JW$6-淝&U-ۡhUNT)鎔&a&dr-nrW' ⹹[Tl:{HdM&FNެLʊQ\ܪH$J~Ҫ6dڪt- ʅ8@=1Ҁ97ĶWbuXt%nA.pPĐw/ҼKIuqiieΜr]2F)϶<,NDT[+uUX@@ `qO#Gi}ӭVyw}p%ʭh_/*4ƃ,qkM_v2!@8&]GQQ}Oo@IEG'?Ə9=4]%<tT~r{ChEW|eR_%zό A-z^Ou~MEiu>NzE$3mՇT^շq⻭6M/쯨^A3%&$E܆)!ːj‰\(W&;{gif+p2T``̠cד+"]12F-piޡYY]okV-嵴I$m\iY{m|f<:n .#-0 <iPĮNpE[xTDDfwsKnc1rrʷ^ 4mRSUKET7G)fE@%Xc4XC(J~ӂMȡ ޭǍroV/@g_L4}_L5E_*xyO&xyO&裕xyO&xyO&裕xyO&xyO&裕xyO&xyO&裕xyO&i*x.NS7Ifvgzmy_!RW^ %_K|.K66w\BFa׽u2htKv!)>c̊drFk<1&ú[Y9XK*:ֿ.{?5׌b*'8GF2V1ggik mFehdt Ɗ< 0tzxWGIao)1edID-h@P:q\O.{?4#Oc\٘Wzg6aqt2Bݣw +3++i`Q>b38\5q d9z9R1\.?4#OcGf/aIac2O/"J;)s1%d䀠 *֓:[kI"Y ݂@]{ o] ho@GƏ_+="YDRѰ qVGd4upBG ?5Wgo|7FMy.?4#OcU_>={xoѼz7ks'=?mO^=4o|\ ho@GƏ_+S3׷FMǣ&=?s'?0 ѿFɯ!o@GƏ\ h/=>={xoם|eN_Jo@Gư|c/˧f2tapXV%̊a(& endstream endobj 913 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.778 274.839 214.189 285.743] /A << /S /GoTo /D (contents-of-a-view) >> >> endobj 914 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [248.67 274.839 351.545 285.743] /A << /S /GoTo /D (advanced-view-concepts) >> >> endobj 915 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.177 232.996 362.896 243.899] /A << /S /GoTo /D (displaying-a-view) >> >> endobj 921 0 obj << /D [919 0 R /XYZ 71 757.862 null] >> endobj 922 0 obj << /D [919 0 R /XYZ 72 720 null] >> endobj 923 0 obj << /D [919 0 R /XYZ 251.968 337.768 null] >> endobj 924 0 obj << /D [919 0 R /XYZ 367.479 236.149 null] >> endobj 925 0 obj << /D [919 0 R /XYZ 72 220.054 null] >> endobj 926 0 obj << /D [919 0 R /XYZ 72 121.965 null] >> endobj 918 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im11 912 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 938 0 obj << /Length 1223 /Filter /FlateDecode >> stream xڥVK6WV *'zJ$EۭK-6=p]z)r8o>GGoW?W/du$MzUYTu7"ZwkfﲪfF4Yq"z%I*evoZi`u~#IʺғKG4;ʖZ'ːqѪy lQvW}^YGa'PNC/O,uTiݥi AW'!N[lk b$:ccDH NѢy,VƎv6j/\ mPRL<C˸%GtI-,B໸(HA˚}L ?OȄ>jiNGNsivvZHUΙw+EJ)8k`+E›Qd.'{^9m%B{Z#U҈o(٬iX*7.= FiAEE'm^\!ir2`ɶҺ"Y_*vKCYEr w."gdD9y0u(,ц3[8`p,՜gvV1jdbr^@3!Ǡ6zݚH+Yzi\ޟe}uөϋ `2LƟ<,a2 aM rA I5=²k:o]'s{O(4V[^-N4nv2ire<}ni Ib& d=y T)澟%KpkVÉg5'<#,4H".#\%HDW{ϟS(z}P[hl"[vn1\*gTGW*x=X@YNPc{&s͂~+RYP 周1/ Zb/Лưk{y\@f,{~~N]{/ J endstream endobj 937 0 obj << /Type /Page /Contents 938 0 R /Resources 936 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 916 0 R 917 0 R ] >> endobj 916 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.998 682.519 264.693 693.423] /A << /S /GoTo /D (term-item) >> >> endobj 917 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [434.071 682.519 462.713 693.423] /A << /S /GoTo /D (term-widget) >> >> endobj 939 0 obj << /D [937 0 R /XYZ 71 757.862 null] >> endobj 940 0 obj << /D [937 0 R /XYZ 72 720 null] >> endobj 941 0 obj << /D [937 0 R /XYZ 229.378 566.12 null] >> endobj 936 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 945 0 obj << /Length 2500 /Filter /FlateDecode >> stream xZ[6~_۶ZI󶓝$Te'LK t<~@"0{} H|:[ [?޽YX! =Ye.mw䄶E b~po7ͯ_X bCsO9\("?V?߽]yG@2S VbKrݿ#bD=[:ARiK0¶,K ;eQơor[0i.!pD<13S`($jd0 iQ H@Z=[K &ֲqQ;F^C#B!N7TH< }zocQO."ٗIev\,{ 0!벁x0:4d`QK.o'5U^RpFcjk>2=Q>4[fTh~Ǭdq\[q");X>L0i%-67b+8UcWCךXJYR]705S.ZlUZv'MS-\~Ⱦe( sL(77)eǫ;㓚 :L";gҾ68+=jْCrjH)pqslGy 2%!]#=~Gؐ ar0V9A-<\ᰞ:ԃN|ߣ-vUB #+ɶH^ 7x/fP?qCf j&k?,|W-"QgXG8l)nCV:r ۇ#gM4z-X}@0&sXxqRɉ)<yI(^DQ';$M#=x2K8^lHBdW2_⧗-n ܿ-O w+dm}/:C{eQ[2yvoKI4?|JXڑ-b\\zpG=&jY:dSli{"Y֭6X̷LsqDkɝ&مbPwNYbea gvXE C I޵d`\U-z\[-O3bmNR22|&$A+dA a-TI̲wyW 9_y?F7 ׃mߌ9Ѻ=ae+C3^:0n `I'֫J3r1=dPQWx*U=Rp uV2ŪjKfD6$t I}{>K&Bq/W4,9 kUӋ@ P1^@0> endobj 932 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [302.749 347.066 453.961 357.85] /A << /S /GoTo /D (introduction-to-trait-editor-factories) >> >> endobj 933 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.335 347.066 534.623 357.85] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 948 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [302.749 333.562 391.864 345.895] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 934 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [484.895 287.171 520.321 298.075] /A << /S /GoTo /D (term-handler) >> >> endobj 935 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [317.962 273.786 473.636 286.119] /A << /S /GoTo /D (controlling-the-interface-the-handler) >> >> endobj 946 0 obj << /D [944 0 R /XYZ 71 757.862 null] >> endobj 947 0 obj << /D [944 0 R /XYZ 72 720 null] >> endobj 949 0 obj << /D [944 0 R /XYZ 72 171.878 null] >> endobj 950 0 obj << /D [944 0 R /XYZ 72 157.941 null] >> endobj 943 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 956 0 obj << /Length 2371 /Filter /FlateDecode >> stream x]o6=B=T,I}z\ f}-Ʀcɒ+Io3%I7"I3"9 : Q: .VA,E\D2^r6ul<چz?jd3Қ2B~' @Xd2 Ͽ` )"n=&2xˉdXH$A(2%2։O >)ÏU%ϛLU- Eiֶ40 (BWuZ%ڵ-ԻuݚPi]Gӣb%q_g $IM|+KPLymfZ73v£C ]!ޮڶ^8=Tu(Q$)V@)@0T):.Q+Dؕ`?Qܮ,ՂIM-$Hꆦ-mg\ 2P,N#T XZd98@D '=mPMnK_.G 1JƄ~.iWW-} !VF4 5EG[W- eOKnh`lKKŔ#tWbߵ}kv ̚&'C㧳na}- ?dwnj۵kQlt\YaF2 vzwFNv|Z5dAmI đ@tz 7J!t[]奁y5tWKބ޸5w,7y{ALG!X{Aj{cUiJs.K,mtM+k&G aѲ7c:"h:K 0"f1݂Z[ZC zbɟ *coG0"6tҒ%}[a<%'kt'Lϑq3E 5 XS1ΐb!ic*b!gI6V/} '!CLBbxJ3-S2r{&ށy6{}gU%AZc~`NJ0o' ;8 zk\%?zKhʿ3wo\ψ ! x8;S4xEyDS^xzBN[#ˣUCP"2g׃`MԁuLNri.Rq=v%ÉnB#W:Q&rGhPE4 w2SԘ,E>ġV%?}D!|\CA|Ў3-<{Wndgo/};™ϩȞBXvi7|[4BZ$8j1<"{SIŘ5< S:RUSoIz5daȹ?!ݾ$0[df#s!gs}&ULʙL^OG;j*"f 'zwOaGzDIG$65=]Ex!rȟk+Gf?*\@2oi#S!\vG/x^^9ш vkΟ3^ؤqY6WyM4݋p䗒b$uԋPG xlo`KNC{{hcPMAI-:^B" 9L3?V϶i;56ʕ/(GUҮK*U|bs1aԬݛ& n8\Ա> O!zZ;\&$\]ZF '\Z~~/H=F]Ie.˴8C]?Ŵ3n,>$0Z\h_,pbg^֭<<.57u8X e_>YGqb@%O7֚W Gg"z8kryc96H %P!ZtJ_G[G%]OmgZpm$x^c طHz7no{X+m7[| to9| V*I[3Hِ 3z%"OTdrlCT`!|Ȋ+8 IѾ~[NTnb6; W-oAw[ˢ \ .ƿRC+$1$~?1췊7\rlpT{Xo,8ݹ=ew endstream endobj 955 0 obj << /Type /Page /Contents 956 0 R /Resources 954 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 951 0 R 953 0 R ] >> endobj 951 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.484 572.94 290.04 583.844] /A << /S /GoTo /D (term-group) >> >> endobj 953 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.228 130.683 488.205 143.176] /A << /S /GoTo /D (Hfootnote.18) >> >> endobj 957 0 obj << /D [955 0 R /XYZ 71 757.862 null] >> endobj 958 0 obj << /D [955 0 R /XYZ 280.486 680.149 null] >> endobj 959 0 obj << /D [955 0 R /XYZ 72 664.175 null] >> endobj 960 0 obj << /D [955 0 R /XYZ 72 538.071 null] >> endobj 961 0 obj << /D [955 0 R /XYZ 72 524.134 null] >> endobj 962 0 obj << /D [955 0 R /XYZ 72 207.447 null] >> endobj 963 0 obj << /D [955 0 R /XYZ 72 193.51 null] >> endobj 964 0 obj << /D [955 0 R /XYZ 450.029 121.881 null] >> endobj 965 0 obj << /D [955 0 R /XYZ 86.346 113.357 null] >> endobj 954 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 968 0 obj << /Length 730 /Filter /FlateDecode >> stream xڍTn0+x"j-A K-QZr$MC x"RoǙadKY̮W[HjCd$Kr*E}EGiE1gѠݙNnvq'( XF ;¨,r:jHp:06c!< RH*?GE@TEA35 .;.;;G$? L0EJ*r N cv;|"S> endobj 952 0 obj << /Type /XObject /Subtype /Image /Width 186 /Height 133 /BitsPerComponent 8 /Length 7476 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*.X-|)aԗk7*Lr7~#88֣_[pOes?ϬQ+CMc}w ť}oml8<5g:ybFk_+|ya3 gx;T#&aj4F7X?أϬT:vu^EgcyQC8 ZÚV[zr8m9uN.i=3Tc?"X?أB/bzU"dq+HQaRuy㈙m~eg_o~ϭ|7NfUX$>p3F%i+Hpe;Z~Җ˶Eً߱Go~gV6f.Xep U#'THEyw՛ BPno-P' kJ;}5d mƥ([h$oEsShịO(eYbrO V̗[K'}.h ͬ7h[RHpH[Un9jΝm| t^PyU[kg&,yW23ze<I?G?rN($.Ԋ&D]DJ[ont͒7x#VG1F}Qí?j.wsU,c{4m9o5[qZE dd6{奟c5q左߉j\~{hqxqQ Ek}Tvq|lЅB!ƛ7ۗ3f o~mO^ >cqױBK0µehy'FvVlw_CeD0 N;y#=?JDwĺd1ʉgPS\w<:om'DFDh=zW^tMtIFumѣͥB-x(m,Z^9YpL̊.J;ϴi>6Ardqsڵ^~t'H~k^tE:p4Ɵ܊N&RLɠ$F06ppr26i\SU, U7 ԯz޿?:"Wz|veZ##Z{q'ڍĖV>1g+$4%?RqF.~2ǘ/4EbI\T# UUQu4?ъ?6-~^G̼>aS»OUӫSq[~^ld՜r.(ulf& 9*5ۥ6y ysWE _??G+~tEt,~[b؇ [ڮ.Դ2*Y~.@+OV<%>*i]ynp93= o-X,<^pRz|g??K)p2[uFUWi 5fE9dy+^=FWArα>(@֪O[('M®0 aJF Ա?1‘Y1dW<^m5L(Յ+fdPDZ{+G4 "\F}{/Ի1^'n4x$Kx!靑ވ\Ni*S[E_2+ _j_gHf) moJ{x;si,<zz ¾hUV%dbLDIM)k䥖^:VJNTe{.OMN^|7 oz$ǘS^x;ćML=o1eGQMgN$)2Ē?VG`$am3NJݷ|vF>{|s:w< ?w]c+1{xoD!,5m&MVū[۬sˉoSbyy^[;>a PSX6Y%D#&Ԃ9Ia#n#ṹ"m`%ӣhdgF۷xR%O.5Xk4\\G{/G]pT|y# Ȗ+ދ"JHє‹隞[hua Q>25KN^inZ[Evqp#/r|?l\=ooRLIHʈݽݝnPm-.r=–ޫ9Љ/V`71RʹAuE.acG>AuE.acG>AuE.acG>AuE.acOKԢUI 7F ~;?*٦GgĿk%|xk ?D}{(C{]X a K]yYM0‰ 6[h"6Kdt9$Q\e尶ӭ'HeK$#%'֭\&?co~ڼ+7v󎙡lfh#JAnН͓>(Z>촫+V0ۢя>M#LIZ< DbhD9E1$: Vb򭢏ȏʋj*x|ҚKX\Hϖ ?UswݥB\( 0n}Oob}_L4}_L5w6'?Ʊ>/?>/?/ G7瞙dh7瞙dhCoOor{Ck"zg"zg 9=4y}OxyO&xyO&46UCk"zg R,9NEK +W-־/?DI_8?ZK9kg|0%u@θφוO (v:}\k˄K{υX3q!\v@aPJ]ҹB7yg9- t SPԵ GYG$b)a߂BW.999d&_Z[Iuqkڋ0hLgRv;8#VJ32ǀn@U3clZ$$e/ pyJ>n 4 77ǣ2 I4s8mB8Lr>n -buXeY #}̭ʪo$W^ze$w\#+,39v<,t5cm11AG 7u&Hq'Wd@7`7hj-nYb+HvFgdqrj>0eVV-!yY \+NrBrF]j\p<:Ko$A}ݳ B#6#0nzcˏ4/je>Ѭ_ D+51T}X ] r }X G51UG" 51T}X ] r }X G51UG" 51U%M=lp4_Mn_#ʂ3_^׵qo~wy^"Jž׿ ^_=nIeK붶Iqe&RS߂ryH8 ? w]c++1zQ9O qjvp]%[sypf7sq.{%d1޷$(pPIJTjṹg[[{%ohnL̠ȭ$7 Lc,dn.'(_PH>1^.K{ ! %.^䌙 &SFWn`9άu% p#' ~5v3/b>z?6OG'ѽ?Qd~ty}:9ޟ_Ψ}:loΏ6OG8X?#:`NGzd~ts ?D}K +W-־(Co54_Z5MێtrN((RTNRo-C?祧C _hE/w/iP4((E/ a _h/iP4QG_}?祧C _hcGܿ.,KO?祧CEƏ/]{X"G,KO=_r E=-? &X"E{?ȾAw?czZ?ME=-? &(4}(?czZ?MQh"w/iP4((E/ c& 4m촉IV\991VKX endstream endobj 969 0 obj << /D [967 0 R /XYZ 71 757.862 null] >> endobj 970 0 obj << /D [967 0 R /XYZ 251.968 610.288 null] >> endobj 971 0 obj << /D [967 0 R /XYZ 72 576.25 null] >> endobj 972 0 obj << /D [967 0 R /XYZ 310.035 496.552 null] >> endobj 966 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im12 952 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 976 0 obj << /Length 212 /Filter /FlateDecode >> stream xڍ1o1 K_H|k+@bh bE:PˁDZ:tz֓>#|D<B n9 emB +> endobj 977 0 obj << /D [975 0 R /XYZ 71 757.862 null] >> endobj 978 0 obj << /D [975 0 R /XYZ 72 720 null] >> endobj 974 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 981 0 obj << /Length 1935 /Filter /FlateDecode >> stream xڽ˲6v»1UAdǤS5dlҩums ȥW:y${]<{ KBzgOE)EÂDy_bi6b_Kcj3mZ|E ?¤qۙdbǧ.~@{‹$P X#o~7eǙJbogw a,?ל `3* g?%ZK θHoڶΗ3 X=jqbm{Wik^*P%co(e KBƒi=9IQt/NHJ2-spBUߑsH%Y"ބ р@gUX(߄~%Yͫv0K׉dA,.'8?B/ #UٚtiJїZ,Q1AJ݋2|ZϬSs?wָjJ!*IQWD18Q15k)<ڔ+l8o7ׂ=92 ZaFuvK/,oMf>%Dk^M0"+x!~=+~g(h9`S2_boUN gUm- -e1-D8:^qaktj}f&Gf$Vg64' 0V`yd #5n_O<IjU?L;YSB" r!e1L.ͦH$sUvS5&|SleМUO@x'HkP9~lg"N ӗSh RKS<,/"~&4meUCrNMl,H #Za|@:]e*c] hߤwsC=VAWjh-38ݡS͡Lݦ 3Aݡ+2 Z4IB=e̋umTZf4t?u3G)(&]-B. }ܽǦϨWlB$S#WRMx.< eA)&E)@#& lN8p!]%']Gv?h$D endstream endobj 980 0 obj << /Type /Page /Contents 981 0 R /Resources 979 0 R /MediaBox [0 0 612 792] /Parent 973 0 R >> endobj 982 0 obj << /D [980 0 R /XYZ 71 757.862 null] >> endobj 983 0 obj << /D [980 0 R /XYZ 72 64.281 null] >> endobj 979 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 987 0 obj << /Length 2578 /Filter /FlateDecode >> stream xZI۸୩ |LOUi9SZ)RCRִ}Gjѓ@a{ `ΓCw7ܼy౓$3;w"?&~9ɝbBḥl񡒥Gkي_d&E%;ᄍ~|T,D4rͧ_3J$v6y E)a(% шx 1q*-ժVEOc(rgħaOo_d^[tMF w}v/!` =u؈9Qp\ٮ>ċB* n|q @1`q=oc?7DT\0OdBSqoE^,{KNi9<0}9~Cg2L ڄF8Խ p =_FxۣX}п,^`w`cz-ĺwQB}۔b'Bq϶#r:|J&"؜EO(1v6on.}\ɨIUK}ΥpWU ^}D CPBEv<@K߄t<$ݱT`󴟲brY&VUv E$DDi]9SEQ3y*@O-;znw nT5*!s2 unߥz*h sPX/@^]G#h ΂R WVУ7`}ZГ·ˋ{b;y@]dsuлУ#_2x~ c™o ߻i\WuTlbs`Ge͹c@CǴBA &U)S9; 3tj˜=kxGUlVNf4͕Lب|#݋m__l9rS,RX-(dgb_4T4GCVe*5(W`9Vdr\NqY 93dTsOÒa }ȧie.fnv+,iC*m enx%+/%{K1\.Jmh2wPZv*;Z̬,FJ,ۺRIlg3B>a& ]oUiE=aa WU?wYV=qW_؃3頾o_z{_{ahV *Rh'2 ̲Pf>;DS[XCNk4'' #iҼ^=P%-K *<5uwG_Zv20T}_[kMLL<;|hhl,m`,o]^rfTlgI慖uyGӄ!Рbmwzxa˙B^B$ XM>+R,?kAu^6YCݴ(h='0Lhs4# !w?0J#/ønҶ×!靸`<#fv n0jdHBM+ aO{4h1EWvɃ:AͦB=qHYn@1G;]& :Y :N&4'ٺqpA,٢,!^rCKi eI0ygoƬnM3c<2wX97O^ j0>wůx9a %}&b? 'r?zϑ߭Lr? endstream endobj 986 0 obj << /Type /Page /Contents 987 0 R /Resources 985 0 R /MediaBox [0 0 612 792] /Parent 973 0 R /Annots [ 984 0 R ] >> endobj 984 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [98.401 288.268 166.884 299.172] /A << /S /GoTo /D (term-command-button) >> >> endobj 988 0 obj << /D [986 0 R /XYZ 71 757.862 null] >> endobj 989 0 obj << /D [986 0 R /XYZ 72 720 null] >> endobj 990 0 obj << /D [986 0 R /XYZ 319.768 673.717 null] >> endobj 991 0 obj << /D [986 0 R /XYZ 72 657.824 null] >> endobj 992 0 obj << /D [986 0 R /XYZ 72 402.549 null] >> endobj 892 0 obj << /D [986 0 R /XYZ 72 402.549 null] >> endobj 69 0 obj << /D [986 0 R /XYZ 72 387.741 null] >> endobj 993 0 obj << /D [986 0 R /XYZ 72 289.265 null] >> endobj 994 0 obj << /D [986 0 R /XYZ 72 275.529 null] >> endobj 985 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1018 0 obj << /Length 3160 /Filter /FlateDecode >> stream xڽr6-TU%攤6dw*ٌ'9̤jhHFq~${h*l4F`u V^}usotTľ댱SP8:ۣbU=/6pkD :PiQ@RB#&,>RSY*qK\M!G!XxofA3Y^ߛBkAǟ~jS[lm`Λ*M_Վ(eԭ5b꼵W=Cx#-lX0Fg%;a@8jx=؂*۷ ҡlڦ+Y D$⫫)kRpr5)= kya@o ΈaЁvox ܖef_XGh!uA5?ȢFPq}9M8 2;@5G_rdFR@xւ Vo+̆uc:VFvڴ;RRs:DpH*WQl ꄄR/*cv!iHr "?R"3JP!c65J_٧a 3YW2"ᥚ>OtzR0g|!hB 8x1w7+(t7Iys{&03N{17V'1_Yv?]]meĒŋ;Tm 69!+lD'z Z튮r߶=w;}uwOm=h>+En\Wﺦ'qbR @`pg}W7ƯOSrrI5Ya]NjKcQN*c|t!_%mv0wڻ9N~Sg5͙Q>!3'19?l`IÌCWA/{;0!HMgK,û4BA$pwJGhe^ Rcn7x+bWa}>9)KAx)NaqַEgBEɆE4^j-^<\ܱWAE_(aR$a}P^xG U$8L@-q-+q* jYxt̜Tޜq8u:THNgY`Pp]-dk:дBLdV&JYE:c.zYm3?#5Pg4iE`HmJ[< 3._uD:0 #w yH,/($Q-d0:BV .?3G7;pn)c/nNeBǝ OE;i(^p~4М +zWr< u3 OLa|/~kC Ye=_0\xaCh0Qpu=95ϊ-NH竾?[((FO_ h]st"!e7DxfA?W  kF{_,Ofk~\ڎ(N|l8fm,Fh endstream endobj 1017 0 obj << /Type /Page /Contents 1018 0 R /Resources 1016 0 R /MediaBox [0 0 612 792] /Parent 973 0 R /Annots [ 996 0 R 997 0 R 998 0 R 1022 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R ] >> endobj 996 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 626.738 97.913 637.642] /A << /S /GoTo /D (term-modal) >> >> endobj 997 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 602.828 87.382 613.732] /A << /S /GoTo /D (term-live) >> >> endobj 998 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [445.088 578.918 540.996 589.931] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1022 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 566.963 139.945 577.867] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1003 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.205 477.476 163.058 489.81] /A << /S /GoTo /D (term-nonmodal) >> >> endobj 1004 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.439 477.476 208.348 489.81] /A << /S /GoTo /D (term-modal) >> >> endobj 1005 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.205 465.521 137.583 477.854] /A << /S /GoTo /D (term-live) >> >> endobj 1006 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.439 465.521 222.733 477.854] /A << /S /GoTo /D (term-livemodal) >> >> endobj 1007 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [81.245 437.172 245.059 448.076] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1008 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [461.177 437.172 505.44 448.076] /A << /S /GoTo /D (term-dialog-box) >> >> endobj 1009 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [441.243 380.937 470.263 391.841] /A << /S /GoTo /D (term-wizard) >> >> endobj 1010 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [82.049 229.06 106.188 239.964] /A << /S /GoTo /D (term-panel) >> >> endobj 1011 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.436 205.149 271.809 216.053] /A << /S /GoTo /D (menus-and-menu-bars) >> >> endobj 1012 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.742 187.217 118.72 198.121] /A << /S /GoTo /D (term-subpanel) >> >> endobj 1013 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.626 187.217 516.164 198.121] /A << /S /GoTo /D (term-command-button) >> >> endobj 1019 0 obj << /D [1017 0 R /XYZ 71 757.862 null] >> endobj 1020 0 obj << /D [1017 0 R /XYZ 72 697.983 null] >> endobj 1021 0 obj << /D [1017 0 R /XYZ 72 684.045 null] >> endobj 1023 0 obj << /D [1017 0 R /XYZ 344.714 558.16 null] >> endobj 1024 0 obj << /D [1017 0 R /XYZ 72 542.066 null] >> endobj 1025 0 obj << /D [1017 0 R /XYZ 510.023 440.325 null] >> endobj 1026 0 obj << /D [1017 0 R /XYZ 72 424.231 null] >> endobj 1027 0 obj << /D [1017 0 R /XYZ 329.003 330.291 null] >> endobj 1028 0 obj << /D [1017 0 R /XYZ 72 314.197 null] >> endobj 1029 0 obj << /D [1017 0 R /XYZ 180.771 178.415 null] >> endobj 1030 0 obj << /D [1017 0 R /XYZ 72 162.32 null] >> endobj 1016 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1042 0 obj << /Length 1815 /Filter /FlateDecode >> stream xY[o6~@"RT=]֥0u i(6kœ;dI6&M &}D9"?6ɫo\1W&xri:gs6Lm LRpfo'gɿRiPJH"|r+ (ܪ<1 >LMh_cF3JPD4_Ye36M~q0ioJ*zc'JY!$>f/,3)u l\JԙW kRXKc5[_I椭}o0JT0gR",X%)=@hJWiɒSM چ3 3* ~{o0đ(F2D:N }'4nkP.] P̲"-n.ҤIdzIVqMb lPڠ4&:Г*9gT: ZqTt'$sg29l>[r~qFepJ8;(*1K"̀btvYuCPElyQPQOqED'I=!j*?;/<;g I}MM14بs/1)KRWڽw^'dH/A-^'5NvCm+ -]wmnbϷT Kp 8z3R溄]&{u@ \܁:l31!u%NDi#!9gۅ~"Ap$јȖ?wzz/[0b9ҍE]7jP8\jN4(z0[::I"_˲&YDN=ˆE56w "<" (Z Mh > endobj 1039 0 obj << /Type /XObject /Subtype /Image /Width 176 /Height 146 /BitsPerComponent 8 /Length 7322 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*.X-|)aԗk7*Lr7~#88֣_[pOes?ϬQ+CMc}w ť}oml8<5g:ybFk_+|ya3 gx;T#&aj4F7X?أϬT:vu^EgcyQC8 ZÚV[zr8m9uN.i=3Tc?"[(Ћ}mة#ީ+HǙJ ;tTbrT'=i-9]E%"츞x&o%}_}56߱G_o~R)!6Db0TƙƇo~n`Αm:9!C϶kwh^KJQqQN2Mm*5{wY3٣!=U9<CE̹?1[NQ)Ny۹О0<ۍ- <[A D\Ktnt0ijG45o`n<jFl\XON+ZŜLv 9"L!2=*rhs3v6 .V:˪FrJ`r ~F?#}G̳LFiӶzy~WB9T{''EA&Ho5UIjd d7"+| f|ʅ95EWmdtE!NJ)FQXo\X%&fdxBF7JFVrK-yb(uB 6;NwW :T䵾<$QSڀr ņ4}{WWn$gJ81Kn_r3)N$DlAn]ԚƢhRF "`|j2ȩ}򒺰I,D RJi"ԿҺˆQEnQEQEGW"X`gNLpʌA8v6mwy,~܀qQ@fS_)꿯VW>AtcU CW)꿯Q_++X_?? C _GS_}cq?7.x45~ҞiOU² CX_?=Jz}=W ?7.}cqCW)꿯W|c`^}cqh͐]&۷qu\ί ?Z?V֯4jZG#~ V :c2X ?Z?WM}Xp5 +{%C`'' (/m51\AkvR.IY@̀%#`s'nsj=Zvo9Ap; vRm Gy}*ɥUKw6ZS qzc hXIǥY%KuA ~BnV.?-;N>yKv4J<_{u{ieoGvO8Fx鑓0,42W*7* h5Y4n BrN>PLtsM>-؝eyV( [\ o7Zwz r-:2rEZWz]#b0HP?* h'?ƮDT~r{ChEQQ}Oo@IEG'?Ə9=4]%<tTI^'?Ƽ!pAK^h_|4j_i]uyτӭmoe^I,*E>amxMK+LvIc07!~ Hc-N`ڧ,7utW9.fm+ɱY+̱-3(?>F5HL{̆Ѡg phDD'Fe<W(VmGb_%Λm+KHKw d2ET1+),QEsV'/.dYۦ\hw>pׂM_ԵTom,U$Yb#n s8'm,(}R߼8F(iddgwq\U E;b8f?Mf?MoWʅs"zg"zg(As"zg"zg(As"zg"zg(As"zg"zg(As"zgGJ Moٝ~^^qEHׂIb`eWd>5_ ͍do%W!јu]L%0yR ݲHn$O"c'qyID}܃=[ENa?Qa&ڍ$A#yA a+>4𮎓Rc#\[jѡ€0to['ܫ6aqt2Bݣw +3++i`Q>b38\5q d9z9R1Wo['gX̓ ȮlnIc9 (<5k%vΖHy<{Br7`8(Io"@KgK3F2I[c{mde+x U_(Io"vWxoѼz7k+'?o[bz7h=5E?ݷQƮɣxoWOmvG3 ǣ&ѿY_?ݷQE,j|7FMevGOms0z7kξ2ȧ}v\Gů3̞X?lLbW^:.4j_i]*ų3q ?Z?WeԜ71u1+_Fbc)u%.o{-[[;ƺ;[3e z?\0q<%A+_.xKV2?]¯9}Mt>ȈC 1J$< ^s F<%A+_.aW_ttW9 JG Gx4|G"sdYJjA '~jɛW(NHKЙisZ1/ Ztc_{ sVF& ԰3($6]q'MVy,Oo+ <.eX"9  g,OS JG OW0sVEQ|xB۵20HbGi;8k][ `[^xDŽ%k#я JGW<;XYAgl\Q&Iڪ0O'ަs F<%A+_.x4|G"s|]B/OXYJjA '~z{Xⴿ]+ecفQb _eVqpvg>tQ_Xq:7SEn>Eq4Q@:7SEn>E}OEn>q?P΍tQ@h}OEn>q4Q@ endstream endobj 1014 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.054 694.929 178.031 707.422] /A << /S /GoTo /D (Hfootnote.19) >> >> endobj 1015 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.525 146.74 162.428 156.975] /A << /S /GoTo /D (actions) >> >> endobj 1043 0 obj << /D [1041 0 R /XYZ 71 757.862 null] >> endobj 1044 0 obj << /D [1041 0 R /XYZ 373.098 698.082 null] >> endobj 1045 0 obj << /D [1041 0 R /XYZ 72 681.988 null] >> endobj 1046 0 obj << /D [1041 0 R /XYZ 251.968 233.864 null] >> endobj 1047 0 obj << /D [1041 0 R /XYZ 341.088 178.029 null] >> endobj 1048 0 obj << /D [1041 0 R /XYZ 86.346 169.504 null] >> endobj 1040 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /XObject << /Im13 1039 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1059 0 obj << /Length 1643 /Filter /FlateDecode >> stream xڭX[o6~Оj5˻ }hv[Xnal: K$'~/ٮo~tHw"n"Ak($*aaxGJ@+`Y{U:_xU'̨":K)H5B*qv#$%Rぃ 3 L0R2mkeczm@DRE" r ^X0UP?0tg`z2 CQ9>" ]A4ۑ}e?9ɂaTȳAx;/6! ŭ/=1N<ΐRfBvBؔC(AžWC5Ay PR'lc!>{3nK/_sR2yiN{y)Js=_ydöIrxp7H cV2'RX2Lڿؐ%'&AK1s="0.M<ȹ#y :lv%+Dʣ%Ra}'QH?x_7b=G!5юhwSbò`2t BŻ |t endstream endobj 1058 0 obj << /Type /Page /Contents 1059 0 R /Resources 1057 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1050 0 R ] >> endobj 1050 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.776 382.229 496.247 393.243] /A << /S /GoTo /D (custom-command-buttons) >> >> endobj 1060 0 obj << /D [1058 0 R /XYZ 71 757.862 null] >> endobj 1061 0 obj << /D [1058 0 R /XYZ 72 720 null] >> endobj 1062 0 obj << /D [1058 0 R /XYZ 72 373.427 null] >> endobj 1057 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1067 0 obj << /Length 1950 /Filter /FlateDecode >> stream xZ[4~_dX O@levXNslIN8׮Gu߹[z{}B *G/^K̻wēBU9@Nx[\)J^7:Ѫv;LP1T|[0b]k>׻_Dƈ V?%W7; A! I0,0Br#py;݌cJUrQ}#QZJ㨧oWR&R !+4E@\Udl.>%4:/\UhOqzބZ'/֢iՖS>QEw-W:}br ɹn*[kFk9_cL 78"J`wjWD5N:݌ ,!O*ϓ#˒ku MJGAYpE?KR W&raQvS]$Z\ T[i-YHMh$!ݔU6e-h_ 3/ 2 L~?Č!&ʰRji|P1_cjf&hKa:zz p(v4b}p+'%ٶ>煂!!)hmHuӅKʕ B%vds ;u^|k+ONd CSsG@`t(76[̜ΌRޒM4*^F*McvMb\1zQO06tyuH=fda`=|4 mumr 4FҀ޵eUNOi@O͏{WH\KŐdO4 0ΑE˚ HH(u{Zj_dG6`xkGRTmzIݪ5WGA?D@F80o$|D3@yI~Q^?u,us 9aKOj//BUS]Kz@PYOؔKv ⋎.vlm*e=_rNgu"7q'!=d X'(`gl$ߍRM7zpū=vÐ}5!HpLn)YO3ՂiG`0 vCNTUdjwyCUҮVXu:TfoS%!=6_z8eb(27WIǽ\"ϓlfWR*kc5JãܾM5Eak6}'>qvr}pw[gu>W_n;%t2V*l&(=xv|h/bs endstream endobj 1066 0 obj << /Type /Page /Contents 1067 0 R /Resources 1065 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1054 0 R 1055 0 R 1072 0 R 1056 0 R ] >> endobj 1054 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.464 428.185 424.891 439.089] /A << /S /GoTo /D (term-handler) >> >> endobj 1055 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.247 428.185 534.605 439.089] /A << /S /GoTo /D (menus-and-menu-bars) >> >> endobj 1072 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.454 416.364 309.166 427.244] /A << /S /GoTo /D (menus-and-menu-bars) >> >> endobj 1056 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.984 223.951 470.798 234.481] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1068 0 obj << /D [1066 0 R /XYZ 71 757.862 null] >> endobj 1069 0 obj << /D [1066 0 R /XYZ 72 720 null] >> endobj 1070 0 obj << /D [1066 0 R /XYZ 72 699.42 null] >> endobj 1071 0 obj << /D [1066 0 R /XYZ 72 699.42 null] >> endobj 1073 0 obj << /D [1066 0 R /XYZ 72 127.104 null] >> endobj 893 0 obj << /D [1066 0 R /XYZ 72 127.104 null] >> endobj 1065 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1078 0 obj << /Length 2647 /Filter /FlateDecode >> stream xڵk6 !2HR܇^)M9"'ZWYrf8ClA,jH =΍;\A^ssdzR:JI {=6 nώnZwC~鋭&M 3qhJ(h>tD}={MՖ#||w+YEwyj;戠mq8ŃrKÐp[T[KvdhA2Y{lvTo[H ,Ez1x,F3U"ab*K:MU Ϫ$qE7COn¶4`YWEw"q{15DGD { 6…# "Ja,~Q02r'da4L!GCj^e ˺)6z}fssiMG+Pk'@2Pg:B}ǒ߬`_F3M1 j!0ذjӬ k7Q.T&}<\>*/Pa.m#IY SFCg8> )MM lg*t-f%?c|vـbs}Z_sGH^'b*(e,/B2\7#CH n솥'|U P"-c(!ԓXP*=6F1AK̢%lN:r2Mwq~7 fg;_#ݺQ c3S,HD كzD 62%U)*G ;ZzL {"N ա"v_{*lN0 ͐i*6dI>[$ !l{Qc+ ʁ1[p`ċ@><+^PWɎ0jN7LZ"_Zq5'{Ra2bx.+f'p0o^Tyo4>4`.` TYuUκB>iW1ZI]υu4FsY0C h/IQ7ih>@EV}X'0 ʰnnT#rf|=ZEX,4,9t5H1UZ]1h,,5s-$(4EeR!2NkM6;;8䀘Ujir6 vNp 4)򂚦l慃@жE1CWkXYA&´]fbUb2L2 5g1-b/I&m3!g9Tb˚1}U&|:P]6H/V.jA<. dtQ]c"dФFe񓗀Bw}IcRNC8"i+hREKeiB,07]A0pFigYwǧ& u#dGYs 6( ;ޝKkk^EcF} μn5m]c$5mF.)وm="'/xǁ'p0Ա`VUM Z,Jz?6M}H1dl$KuhLq2OYb(Ӄ"[z-;V|5;R±fvy}1T8x3V@sNQPJ|(䲱 D,(^tYK#. z2H /ǟI5s2xwT?<Ֆݓ' zϋYInqhkq$0SrTA(i8͙v7*g6 /+>3y?BG(+"D 7{"H#oUnbDs5=_98<@4a8`?o>|t`WDz4`  B`4%;7a"F9PgU}^v,むW7ݲs'pj>fu po-";)1A蹵r4u|LH8:1_DX0@lT=W3OZwJ\"+q,!PfLta²Uxʜ 3?WQo %̈́ b#'oMeS y.ǁTx-(؈%tC%=$g~pag*O0P 4A}7>@MҙApy endstream endobj 1077 0 obj << /Type /Page /Contents 1078 0 R /Resources 1076 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1074 0 R 1075 0 R ] >> endobj 1074 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.11 593.674 184.537 602.54] /A << /S /GoTo /D (term-handler) >> >> endobj 1075 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.456 419.834 202.699 430.738] /A << /S /GoTo /D (term-mvc) >> >> endobj 1079 0 obj << /D [1077 0 R /XYZ 71 757.862 null] >> endobj 73 0 obj << /D [1077 0 R /XYZ 72 720 null] >> endobj 1080 0 obj << /D [1077 0 R /XYZ 72 502.969 null] >> endobj 1081 0 obj << /D [1077 0 R /XYZ 72 489.031 null] >> endobj 1082 0 obj << /D [1077 0 R /XYZ 72 367.032 null] >> endobj 1083 0 obj << /D [1077 0 R /XYZ 72 353.095 null] >> endobj 1084 0 obj << /D [1077 0 R /XYZ 264.974 283.065 null] >> endobj 1085 0 obj << /D [1077 0 R /XYZ 72 266.971 null] >> endobj 1076 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1088 0 obj << /Length 1952 /Filter /FlateDecode >> stream xk+br.\}q?6PpHiw%}wvaq8$gy{QpD]]|ȂHm 32«E.niJj~LK?tQ89!^θL0NjW]p,`]]9 61̳Ϊ8ɠ-7<M@W#I.+^)0OՁFE)Xp(3̑8^QsXli &؞/I /rρ<"](̭=tg`[&Q8nTm=ue!bB~I 'gXn믏r>l6B4Ȁ\& 9uCm7X ܚ߆5F%B>#I.@L+`{K'"]bIe"x 7J(ؔq=)UJ0:%WL@\amwݛ4v{INÞw%JPlƉ(b[7&/ڬMuڵ.KN5 m1S :M m)s0ȓrKB8/>ӄ6=F.iдtw݂ tZ_Ca41GxLXoiK<\5N<#ϢilBnd4 h@VE8 5QГ竑N&ZGuKkdc%#{ݭa`יu_`Z 0U,@_g7̯uT 'plpsmtR.3 uCN9{ ;B%g*r;Ux>޺.)MkI4\l|B倣A14ʞ^I1غ>(a;0pɮhjZgѱor샀p]~e`1ިe*m'ڽC-< j.<(ΙwiNRP pP~|}~G=aUk5ր 9RUk'P^5qVR}3QmeFi|:/\^ޡ}2lv ơcދ$s'CwX|ι׬ 9w2Mw5any]m,p·'ZXy )ZG6,OZ'-#^jT2YzkF`P 8ceK\Rk0Oc1USCd9`1̭^;K1([|$#Xmۦmγ&-.f(({2/{Ѵ,M4y Kr}έotkgt4_XMdIzP>z@e@hx%9%ijz".c>{5&^XtY+rҙe^Է&ef܁\CztE~$O2O2~xI}=zvM]?c,8^y}^q?]6PlSՏ endstream endobj 1087 0 obj << /Type /Page /Contents 1088 0 R /Resources 1086 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R >> endobj 1089 0 obj << /D [1087 0 R /XYZ 71 757.862 null] >> endobj 1090 0 obj << /D [1087 0 R /XYZ 251.968 464.33 null] >> endobj 1091 0 obj << /D [1087 0 R /XYZ 540 399.419 null] >> endobj 1092 0 obj << /D [1087 0 R /XYZ 72 383.688 null] >> endobj 1093 0 obj << /D [1087 0 R /XYZ 288.496 319.636 null] >> endobj 1094 0 obj << /D [1087 0 R /XYZ 72 303.904 null] >> endobj 1086 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R >> /XObject << /Im12 952 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1106 0 obj << /Length 3078 /Filter /FlateDecode >> stream xZoF_7ShI<$E@w(qe**I7Kcrv8;;:닗FeFz&ͤ%*e*bst=Oˮ/DF~޴y5qtȷψڼ \w +3>KX'_Yf1Y:u\2)ng?]"ZhT2AYY ,^HFL+8dɘq_f,uɲ$%7v>):^If)\QxB YϒDŚnq/]C,2'>ya8zN/b&4r(HzqD9x/FM[Wdz]nH/gHY3:vS߾_MȃZ(*.w:.T{fe<%U>NOO| `uS8|g&.{fNyʤ6cre1R}t;[u?ړnɏ%Ҏͷysɗ{˗=<|E%Y,TYYf֤#c)dãwOoTW$B4%{ВjUWXk=0G,'<gOt)Ϩ`+\l5ھЉ}MTs#Ί㋢)FoP~E,!Jt=`g-KG98׼ky1˕? "ZE+a SS} i{4Msqu(v >?#DeR*d/A5x!ŽʽCE(? W7( v|(k/^OX^br1yHnاDgFZ,p秙fb,K@iOH̽.0$ǁ[O_a*W}8<=Pw+:d eo#GiRV * Tts( W<ш}8Kt؜dP]^RDۺ0"P<7 Dxx/44 1? ;JcN(z4ŪWUj޾\."VNjv ),{tR堼ry=%>z7b(Nk)&a dmގ+ $P~K „Kp;H81AQW%"*6: @` rEd@#Pgc9w)4-`WL py<,olC4KR:Z2<#$F؉H \08-s`pzFT 9'"&nQ YufX2c25SRW` 4h¥'!o޼ij?t=؞ T2uf>P{Us&2> &3$݃m. z,ŶOևj=?$blge~yH)f<ryI_.xݳ !|F~<8P\!ʩGGjk_-ׇ6tѪ.l o'Ӗq/ΨC|QAF)  Xq`Ǔ rtU PCN"ahi# TtQb.IUS* Ma܅!Zy"Cke-Q(4󶄷mًx'*Z)K)RI:e;cSz8jS<QRgE|N5M(NPb;FYD׏ ?HQ] D%=lЀ p5Va>y/Jb>(B WBBEtBROa&i*ewWS&r,Hj_mW54$39at_gBk*vP& V,2L9TS(mvc450G[U5_!MTMu[ *O ? /8 endstream endobj 1105 0 obj << /Type /Page /Contents 1106 0 R /Resources 1104 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R ] >> endobj 1095 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.269 418.085 503.261 428.988] /A << /S /GoTo /D (the-view-and-its-building-blocks) >> >> endobj 1096 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.052 323.991 360.849 334.895] /A << /S /GoTo /D (internal-views) >> >> endobj 1097 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [517.754 288.125 540.996 299.029] /A << /S /GoTo /D (term-mvc) >> >> endobj 1098 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [247.675 246.282 253.653 258.587] /A << /S /GoTo /D (Hfootnote.20) >> >> endobj 1099 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 148.105 115.66 159.009] /A << /S /GoTo /D (example-2-using-configure-traits-with-a-view-object) >> >> endobj 1100 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.309 148.105 194.966 159.009] /A << /S /GoTo /D (example-4-using-a-view-object-with-buttons) >> >> endobj 1107 0 obj << /D [1105 0 R /XYZ 71 757.862 null] >> endobj 1108 0 obj << /D [1105 0 R /XYZ 522.228 397.327 null] >> endobj 1109 0 obj << /D [1105 0 R /XYZ 72 381.233 null] >> endobj 1110 0 obj << /D [1105 0 R /XYZ 86.346 118.985 null] >> endobj 1104 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1118 0 obj << /Length 2623 /Filter /FlateDecode >> stream xڵYY6~_G?yשJ%LbR 1H=E͋pG5$@/oy{"(EEYp(ȓB$eak;lQ^15ޏ(yFMc`xvw7o*E$"yPo&HEV$+m_ns#jEB9Qnm4|0~lp&ucMj[vgIM&ڸCi桶E`RD@6~" z/,qRDI <:&&Iîi@hDLuMUDhatj˓xCx38w_w.$l΁Ly\ (UBq\5s!8"S05աߏ~zg̎ۯSH;]LYu{ϔW-^W6Vk,H,J`ЛHo#|\iD"/"6ESxygݦRS7 I  45orZ%P^8bPwxԇK3CݣndЩz@د?4|F{Vwa*+@I Fɔ`0>`0Vf:!~{u;Hk$,4ڮiW:0ѵ4Ɨ ” |áϚa<ͪ){^4|RpvNt1 C!}{0 %)mgq ò# DW=I)hue5Ng9hG---ą?2mUNEԻ>7J]<o}(J4;Ǻ=ø&6w# s? U2s;I׀43Y l}ќ ][c$DvT;tjJ#! c^z"!l #MNI/$RkSEGjc5yͼNҖYJrhw4JLАqS^b##=,! V 0LUW̔g);(vagjFES3|W ?B\v7"(YߛE͒߯/ٌVācͮй#K J@o4׎=.@l";@BmieQ73_H0v -\/*gE =z&#(2`x4Xp2 D ~|P^s߰?MڑKm3~8Gţ$keot* @](]QHg?J|S2hٿ~9Y}?/+9wӘ#\6\ZK_Y:^H 6=MSځ$BixW_AI̯! sKzr<|z"+gp_%a?{¶V"Pkz8&L+L%jdV7WAj5 ) :ڧxz X9j {v"8}pg:@Xѽ`k19!@2gyVjxܖ?S>mWw7_^w*S jK̮ݥ2PS vlIQeVGTz0\KE^Oj,Eùw|XSsY j=I*v"+đfW;[TĤBj_"Jj&OB6>Ί %`fOm8S4#~!5&,'㈟CID\N.YN`V,t$afRE.TOvR-9EHiJxW)R9قƀEQ(Nz/`+ѯp+|_R~]EºjRJ럍VlmLS0sSP_8ZT4_$]ǵv55K3g{;0 }'Р 3Hэvpծ:Ȥᳱ7Z*W\KjHS^Ą8STEjmWi՟8=g-ccSc;_SG?=k?GvӬ朇3#%eM{{!XAS_C=[F. AOBdϢ裿]M制7L endstream endobj 1117 0 obj << /Type /Page /Contents 1118 0 R /Resources 1116 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1101 0 R 1102 0 R 1103 0 R 1111 0 R 1112 0 R 1114 0 R 1113 0 R ] >> endobj 1101 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.248 706.884 321.872 717.788] /A << /S /GoTo /D (term-controller) >> >> endobj 1102 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 694.929 76.981 707.422] /A << /S /GoTo /D (Hfootnote.21) >> >> endobj 1103 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.55 694.929 355.225 707.422] /A << /S /GoTo /D (controlling-the-interface-the-handler) >> >> endobj 1111 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [323.068 514.712 378.765 525.616] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1112 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.568 342.465 344.546 354.958] /A << /S /GoTo /D (Hfootnote.22) >> >> endobj 1114 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.255 163.138 304.113 174.042] /A << /S /GoTo /D (term-viewelement) >> >> endobj 1113 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [277.762 113.715 341.251 123.951] /A << /S /GoTo /D (multi-object-views) >> >> endobj 1119 0 obj << /D [1117 0 R /XYZ 71 757.862 null] >> endobj 927 0 obj << /D [1117 0 R /XYZ 359.807 698.082 null] >> endobj 1120 0 obj << /D [1117 0 R /XYZ 72 681.988 null] >> endobj 1121 0 obj << /D [1117 0 R /XYZ 72 614.161 null] >> endobj 1122 0 obj << /D [1117 0 R /XYZ 72 600.223 null] >> endobj 1123 0 obj << /D [1117 0 R /XYZ 252.76 505.91 null] >> endobj 1124 0 obj << /D [1117 0 R /XYZ 72 489.935 null] >> endobj 1125 0 obj << /D [1117 0 R /XYZ 507.023 425.764 null] >> endobj 1126 0 obj << /D [1117 0 R /XYZ 72 409.67 null] >> endobj 1127 0 obj << /D [1117 0 R /XYZ 206.414 154.336 null] >> endobj 1128 0 obj << /D [1117 0 R /XYZ 86.346 146.185 null] >> endobj 1129 0 obj << /D [1117 0 R /XYZ 86.346 136.48 null] >> endobj 1116 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1134 0 obj << /Length 2438 /Filter /FlateDecode >> stream xkܶ `-pKEQ$m;@>[nh%Ez{ጞw> (p31+G:ߝ}sqD$kNjyNO<"s^XMwjhx՚f?JIwxa хjg^vtiHFfwdޑKb`v0˳IzСB4q|1꩔H@^I! D |+凳q^)݋-ksnV*p{UvvnSOM< b@r}]i6дQ;mEfM_yI܄1׏Cb |z" 0eGEz7D=U份(E"Llt)ӓ tg6֊pi!ǭ&@+VmvwrAl'Wfr[е0 BgHĥt,=jhLiMWek:͛/0 ɝ M49U)s@+3GD+с,LfT>/ xcJӤ-Rhm [b3Y|Һ7EvE3',N- @q;U+ռ53d+i7-|G) /+?0hW8}X+q8od ២5Us kfy8>Fd.ԃ*,&koSHyJ<֐[m?A8.+sf48buڲs%(M^Iy˺CֵqS9M{:B,/}XD"4)3a7slhjMZaMchURsI)<x'| |+\# kj4f"GƞFȎ%hr}nt1kS'`})U7B94sT%J+4h,+fW:޲z};^ Lw7mV*vo;S6P۪(+_\,we bQD BgzśY= ؠͥ`!. ^C I1%6ڠ@Mb ˱}ȡP6nߞF+ICkNK^V;m pw[En ~ҮLz0AA2葶^C],7@rGDtM[s-@l2Ʈ3M+.˼$<8GͥEFXD9'<lΞw+n8f[)зçxmqE썕"X܉_^dԗ pLҎyۍu]ەs*5?} -W0z՗uSY%xKP^Ti:*3ChWsHȹ [)7Jn]7Vx֤5!>YͶ&d&;囵/~/|7J(H|HnO1@Zہ dtW- i"w١@`W0_*IޗQ =3N?: ılǐ DH&lGHx $WR)G)'PiC_ j%K%8 [Yi|M ;!J_拄xL9U I)$ ÒA*X|#Y ie' A}%kb[!&"i建jya4\E:o!5<{n?cqMU\N/\3[,=9&6wM{suf׿l3NYb)Tm Bwꋓ4g՞^R2^Ž"'^2+21Y2[h%LBTŕɚ}/3zLgR 7>![r21ah6i>7Y࡚kyq=;}d}q zh.+# bh[e[(f]KX_zC6Cobv@uh,}\.@/ozUO.^4{K_Zu^m>Ҭɵ6c!\j2|> endobj 1115 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.954 682.519 303.303 693.423] /A << /S /GoTo /D (displaying-a-view) >> >> endobj 1135 0 obj << /D [1133 0 R /XYZ 71 757.862 null] >> endobj 1136 0 obj << /D [1133 0 R /XYZ 72 720 null] >> endobj 1131 0 obj << /D [1133 0 R /XYZ 72 542.09 null] >> endobj 1137 0 obj << /D [1133 0 R /XYZ 72 528.75 null] >> endobj 1138 0 obj << /D [1133 0 R /XYZ 256.167 450.706 null] >> endobj 1139 0 obj << /D [1133 0 R /XYZ 72 435.21 null] >> endobj 1132 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1145 0 obj << /Length 2381 /Filter /FlateDecode >> stream xko6-eEGR.ܗ\+wZiG_qf8]IvN5 g8/Fu/ξ<*Rʂm O qpYUCZczMGtQ8/Mmto](!W\xٯgF$.ȣ<^ "EpA,beu@/&TBd2rBf<=R( R Q")ʢ`w%AxǢ̋#{IGSfyP (aQ\y(hX(Ӓ&ΚfЃmgH$ X. ;x΢( P)b$Ŵp9-|$o Y=gk*P?r~hGt8\m?ޞד,*(4 3΅jB2?AێF햞;WO㡥gemxÎf&3q82Lz1i껱-된2gM+SumZ %-AhQ|L ڶ~(Q!Y=3-z|8ݘ/Frm!O!RfQ1i}C㗶b>Ry}H.Cѫ %=!ijZ0DgC9Jo^LoXn}6[{=v:߷$K8rw (M E"N~JV9xyU 4 -ϸ_|L3k$Xwz=SzY?}2 )%$p埠n' %5ΥȊt!~:R0*y_]e|ׂҦ 8-^3](2R.rR=]c͠ %-4 #m[jjčc'Z($+L"<ݡuik R! Qځ0?('՛] 06q ´ ,];hb%5zcmejf3+ ).ĸAZzO-#;%E=Ժpޑ{|3&QxNˇ1vbGg~N 4 /U^ fO JH55olɉN9#ڮ:A~0M3.WҤ^Tu O=v'=m(tsiVugnInJ7OTԆlo][2` .U z>uYd"0>8 jf!Q|Dig5tٰxјxXN2ta۵{j|T"\aN84 &r!A 3lK\9Uȷ #hжŚHjsW1y1sj&a{2,sJVi,J?UŐSwJȆP>ufvJu{V2wT^U2j#R7͸2g_~7 䟭TPQ1ߘ\cƃ 1X[Է4rY>0 +FL#yzQYv |ǞIR3s&As=E+`ZTFfKMA o  fѳo\I $:ڊU r6f.qܛbmunO5Ov~g }A\PV˫;8op  %]ėr: 碌kl ܷKpS{JSqXhZ0fe!H$"ڗO8qj[ڽm@_IZk: KCn2j\enNw46'k[\cbk]Omyh۱86@űCq&v msw͂((w[5D_ʞE+&*Jci" } )Dr. Y[^)> endobj 1142 0 obj << /Type /XObject /Subtype /Image /Width 354 /Height 146 /BitsPerComponent 8 /Length 14500 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;b" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*w*X˓ qkV=/⭃: [o}`b>߱V<1~oc/ \Cl$(y/ 9߱NU61^-R)r`;bFjmDe<3@(I1RvU)7dIta(|_m4:JӯEjR*yQFB1e;$aF oj,vL}exYr#K:RR%+OAo}`b>߱RW8@ K>dVn$l[$`ÚܽMmxf?xҼ{Z?̾{do}`b>߱I.yȂqo heynbH0傰9OCV!=ͲمDeTk9 =1zZ)]}3̃ϬRhE>߱VK[Ju(Q5V~(_*&Ƈ_o~ϭ1G* ϭhE>V~(,hhE>Q߱Yr߱Go~gQʂ?#[*(,_Џ}mأB?bbQʂ?#[*(,_Џ}mح}?K]qFOgX\:uk^ލ8Ot^PyWctۗKQ"2Hފ'8us.NVdrܟ]<}?ҧ{i紎Q 29b~TldsjJ?.h ͬ7h[RHpH[Un94ǃW7W+T浛_SrWmlD}ŏ0CCFzQW?Ntg#B}#>٨8ĐDR(g8Qu.wsU,c{,2=oDS/ib%.{?7G(@3ϼ}CÌg.[pʤ8 JUEP FCgo~mO\8,_ RV=NQzNWVou4!kHAy1B@|㹢}TGzwq6QhTI3C3tK gyKK#uqu9xsڮ{DDmJvOe~xO八RQ[thB-x(m,Z^9YpL̊ƹ-nnitdM莲qYn9>'+~tE^_ik򯌽?Km3JI4oG;3F`B Tzh-ݔ 0Y r8C޿?:"Wzˣ55SU-c\yw3wZw:G5#pa {7ֶ awEn yPHHV»OQ _??URiSGw:1pQԫ*}#+sZV7ڣ,Vx`ZJ)Ww# HϵWwΟUYOP]+K/qjY|ה??k R(⿲Ɵkeoy_~cuz%!58OEql18jWz?]*?չ-ҬD,/!H[e*"E[y>»OQ _??G~ #N[޿?:"Wz?rOMu?»OQ>Shkwӿ4»?rMMu?A?:w&W~ ;?G~ #N[ɣɮ߈?N hS)y5uoj R |ȪyeD8A?:w&A[!*i]ynp93=$j̊r>uWK]2OxH16 Ûx%)${W-Ygk^!f>kbO(p2HU@3_d+Tn׿wc3T΍:M^ݭcoB }Ixc>HSllDRC܎]oGW!@Q8ξK1zنH>7>7#7#7#J(=Ϭ?*Ϭ?*#7#7#⪮5Bo4墠P[0~Cq<-eoNIn͝Ϭ?*Ϭ?*'V]m+.sǹoGQoGV7$x[q<-eo97#7#q<-eo 82SVl}dTo}dU 82 o[t{)+x6w>7> o[u-q{!OV+NktÚ=MϬ?*+@%Ob{PɪK:$C #O$z +y4* 3u#ѾoGP?7)OFORQ@}dTo}dU%OFORQ@}dTo}dUQ M{vYQq8z_kb [Y?UY?UUF@&/*kb⨷>7>c2L_Uh?/Qo -o}dTo}dUWe>Ѭ_ @Z7#7#⪯51T}X EoGQoGU_kbF@&/*yk|'zBգh,$1SQПCWZ]FWtd֨k2ִWcꉟϜ[7?Z+O<Ivu|7N+ާu῅/_ )mΡy7lny!o8؍wl^kw$}]Dc7p[O:6]9#HdO-#`Yx&XegwwarC:[x}d!Bdn$cCr-cŦ{y⵻φn.&gE>vpFe|qRD, $~s,MEW(0T}ođIzӸCyEv|5  _ђG{whFN-W΍KRJV0h9|]aW-c%}w0pstH#OyB$D{YFdfmLb +3 W!opxa>9f4;m"+Xl8m@] `0 hm~/Ok^dw+F®`q{ ll7p -myv.@QA5jm{el E'F.B'"' <^E#n>}ץ q|ҷS9]/Nn%0y!%H""?"$JC@~lGt4S(,6eFv'[^-yU2`~VR}BjgĖٵـ5:)}ۈ`z $>oc;|?[̺MI&3F3:FF9ND0h/sz֑λ%RˀL Ǜמ9xlk + ުI$ݻqr:rx*;%WڤA zsLqpnN-^{)amaf#CCFW*fG }]lW;Czt_kk_XAXHP6o6-v[xuٱFW8SzUO"V]cbh q$vlF8$u-]apd_gz_xKI,<}B;x<=l/.RFl[zS5魯4B%;xvDdo1ldjwǩ\YKqhi7sfyjA@ ͿcTSoncd*yJT@"=A4o^$ɲ)$$XfmYA?w*fvn/5ܴѪ.# 8ݸqMkqKq,~D=.*=͌OYKa-W5o/Sǰkj &[\ՉH ]Nw|յMRFjWƅ[]] f<2xzey#Z]E nFxew)px5>]>4koJlmasr xX&sW^.V[,#u!*|ɐ@y 3Z5-M3^jEn\Ii4S8bn ͂RInyC$""J+0f ?1vc.7qr@ђ@bqɪe⏳4Jj'<:]@0r1EVߊ.MV\]@ٽ$Sn &1<'9Ȯt5tm1bQii1Z>ssLѴ3ƾtsn ASTCr8xR[n;(d,d{)3{n:z.شk->5ɉ>ucwlsb hYKNYK3#v c4ZxoG[r^;"]M'>leCKƲJ5&[ey42U0c&յPyf Ћ_,;>ߗ'+J5֓CnQGccI',zzo/m7ݜg͎q@xM;K[/,Rtv"hGޅ %DI$gs\֭Qsiuem-cKh;;9%b#9*wt]"姸VvJ;ym,II#Ϲmn>4M[[I ]~A [5)u]$n$i)CG3FHbJgY? iq,v ;NP#Igy 8$${@zxZ)>R}E}{G_m:> ?o'b^Ľ>yfA;8S_'O &%{x\A,)- c(|6YqhM=:-Ri<$SA"!>d)G +!NXdcix,nttVpsUy6 Tv+s1 /*'Kv"Se@bz 2 /%dI\k_P˰b!H qVmKK %rKs@1TeV%X9u#"w.!Iy!f$ $ W|e]gK0"<1Uf{ Z+ۛg|v-ّ٘ ;[q2?UGrO롢(\翷$ W?UG9B='jnI>=t4Q9?UGrO롢PnI>=ےφ] r+}V[l˜nݑGԞLo跭Wuo跤՘'|J?#oX͞$Imɸ yވ#ةĺL# KA" WP6nuQk Om,rʢ8Y3FVĺL# KA" WP6nucxGO+̸ m*mds0=hVY&!Y |R'tAw:xfp\KqOJ0F*@KRZ<@B=:tRnI>=WY/b,Zuy%ءd$i qWzDWS :6@m˻iBv|IS5ЮgnI>=ےφ] r{rOܓ|5_zh.sےφG#CEsܓ|5_z?$ W( #'jG(\Ƶ@ 7T5kEs? t?8?Z(o~WIoZmƧii,$Ol++g1^@Q8ξK1z׆N^v7G I-1""#i9,ABuRj5pڢڐh$y q\Q'[YuExL$e۵aWITH#/e 4ZjKr"Ia㽈 &😀y֓co>&pݘ-3LӢ)n#9\ك`P ' 2I:4Qp3Y..FIG(pAEjiH{onoTb*EU.88ui$8d+:?B%$u;؝؀O2GCEP28$O5E>pEg(_Q΂ƅ?ȣG: V"5E,hQYk|<gsy?e?|[-5ǧ*EKwc܏cKu+!cuy -Ϛ!$ߌf' ?7)YxɁ0bXl$c"9s9n2T36ܚWXmK󭺌x;c(xF_A&t)V܂E"1`;vdn鑴2݋n5770Lە@Ҥ(T *rI9+j>{뫙(M0eW N9vIn[5$4I/Tm|'SQH k&uDD[vISFX`ruZe3n݋`d1 :f{^5;KibҭJV7(5Ek||,hQYk|<gsEg(_Q΂ƅ?ȣG: V"5E,YEs? db8j;Տ& >qo~Pxh8po (Wg\gG_m:,~^Q (M̿M-; +؂Ayu[ ආ-Bd5I"4Hq+ {!x'%E(YHeݝ^[EstS ulL]Qc=Ҵl~ղY!>ago{sJ -Ou;#1YTtm=kVM#Lfhbw@1ҥ)Dʀ??0@?`뤿)}շTm ?$Lm#`x8Oշ?'d+K4ʉYy9X)>i?PP2j*?QO }~&mCm ~i?PGm?(joHv&f88$WE?#oRTi3z (9<(8fYI ɂIA3cvߥQm[Znfod&yqo AK3$e)^74vYA(##&Ӭof{+{m|,Jd#:z w&}/5'[occa$msa˴cx篵Yn/I-b$b&%|8ѲIt11g}:ѧ<-*V8 0xU(G4FU@.'9[]棪im o]Σ<;O9 Iz߈~߷`Jmn3>ͥ6#Lyq}T q)iamCm5m?(mCMECO >i?P@QP~?PT?m5ek2֌s3drHVkZŏ& >qo~Pxh<> ?o'@Q8ξK1z׆B(riCY՞4Yت qYzՁw[Gs˳c sO^x(mnIngEnF9zZWm%12mwc'Ms-0:+\ɡ[ٶ,WԥmYBa+'{tM2KӒK9IDNVb*/ mO/h$`[oI$6]"S= AɧYZxh۹m!lR1 H=8nF KCx}5'Ej kiaeGB3nvs{٣5υLF>xܛ8r;Dnq@$ڏ-W#61|ֱxC*Q8'+zip&bl +(B2*,,b% L[CeGt+5λLXAy؉ mP,[ۙe  "W:u-:E&FC+ A͛D֮utפ;!;Dp2`?i'hvo;!I渐!%U* @/gah t ?Y:_(ah t ?Y:_(ah t ?Y:_)G,}R)^8UXvU}[֫:}[r Gޤ>gr?%@Š( ԟOieG"m)U2 ,R^2a!2!+@9l`F9<ZKVc);\Gp`somlh4T̵gpےv$.)Q\.ᩯKm&[mƟb{rH+v;|#!EuPWZnf?Qۏ3ސ lO>ڤ`XHQ$9< Ո ᥅_,oK|V%Wtb#v)GÌrMqP^N8Ip1l "bvV^x{U]:5=5t٢YBg7!Nr5bͨb{8likG9B/IPÂr mP,[ۙe  "W1GPm%d/>;fyYub/;viMjWMzHlc٭ӴN / q-_ ,/2ydKx[ⶰ*J?wg+ GUW6VQjH.٥e&g Z??-V_W Z??-V_W Z??-V_W ?aG%Fvq5[] ?O+׿ׁeOBϜ[7?Z+> ?o' BSnKאbUXzʺ3 7_9_-RXӇU(J+/wKLQK+UWHw5(/ 3_9GC}/UWsR`?n0i=_p{Hw4|ZV2Adž:ߘ `?n0ije_.xw7>}Gڏ~c+wKLQK(Uڏ~c(Qoan0i?t4ʷ9Qoj>?/ 3_9GC}/VW<;j>Gѿ1K(`?{*ssGѿ1}7?°t4ۺ_ gre[_mT}[C}/u#G_Ә!$$wZ=npsù?7+,zGΚA *7L?GC}/*+=J+/wKLQK(jQYۺ_ gr/ 3_9GiK(`?{ iϴ;n8ǹڏ~c+wKLQK)sùߘ >}Xۺ_ gr/ 3_9Gxw7>}Gڏ~c+wKLQK(Uڏ~c(Qoan0i?t4ʷ9Qoj>?/ 3_9GC}/VW<;j>Gѿ1K(`?{*siޤy?j׿ׁe`?GZ45`5U%A+ե5}[t&s+C} ѸΊ*!΍tQ@:7SEq4Q@h}MP7SEn>tQ@:7SEn>q?P΍Eq4Q@h}MP΍tQ@:7SE}OEn>q?P΍tQ@:7SE}MP΍tQ@:7SE}OEQEAg endstream endobj 1141 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.044 492.144 282.509 504.637] /A << /S /GoTo /D (Hfootnote.23) >> >> endobj 1146 0 obj << /D [1144 0 R /XYZ 71 757.862 null] >> endobj 1147 0 obj << /D [1144 0 R /XYZ 251.968 361.723 null] >> endobj 860 0 obj << /D [1144 0 R /XYZ 523.611 171.495 null] >> endobj 1148 0 obj << /D [1144 0 R /XYZ 86.346 162.971 null] >> endobj 1143 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /XObject << /Im14 1142 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1157 0 obj << /Length 2710 /Filter /FlateDecode >> stream xˎ6>_! #zCb0}q-VKmQ뷊EݞRX*[Q͏7߿yP"ip d0),Y\ ކ< {Ufs+<螞^vãpTwU7ZЙ`|/7?߼pr pJ̲( ?/AdiMͿn"801Jܕ򠇅 ௳"I E2#!/?&x{DQxזX9 so]Կ!BQp+b7wV)UUPw&":MAb[eߍ'2nDr*GPnDZnwu=l(F$!$6T;72ȼ{v|[jUADxgXDAwhr-Axj[MVbCH15񀴵!m_)4̬#.{i>3zPQ{}U;c=so(DJH@ov=]۸aEN =Xwɒq[퉷tO<[gPhv2cTnK)NI`Nô`SJ}"Xs] hys vi"4']ֿG Z@`PE& '\ڥ_%@&U^~Kx }aa5 t#JG/F9ZV2t{ V7ٙ~?:ׁaC3yAϣ4OJf~")P k={.08|Ҝ\IYO XLijE#"ERd΁WFAҫ7ϟR,GfCOpً-ZQ(r5Dq'/Vd|PT3eW2^Zo>m`~Vp5VXP;Xߥo=VwQ_'[ƙSAI ӽW*Y@:M&G! X) [bVi ![)/-ߒդ?@ԂTa,ľSnJ8q{n+4M]*7H_ۃl[X lmy"th4;&4sӎ5"\FDV{}-u{E^pbpmsQo @4hg}]b)8g 2{,{G"Fp/֭/\eW1ǢS=[]QEn+5(|Դp*<ΘN*VvG֧q hK"RAЍÛR[u~3coC ᴼFx)u>(u#nrpffe'}ltqcGU[?BhHfh=C!iь!zAFnfb1gwbXi|]֔~ҵJ`FpZ묡5@5lw2ΰu_/#׈-n%sDdHu =whM#jb|7 7iA]O+ֽJSg4s($aóGB ,-EqM`LR`(Yž tK6e_\yp2L >J X. eSF3OY ]-cه/o]vhù$1'$b83# $OHmc# endstream endobj 1156 0 obj << /Type /Page /Contents 1157 0 R /Resources 1155 0 R /MediaBox [0 0 612 792] /Parent 1140 0 R /Annots [ 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R ] >> endobj 1149 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.363 270.386 108.606 281.29] /A << /S /GoTo /D (term-mvc) >> >> endobj 1150 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [442.612 270.386 484.235 281.29] /A << /S /GoTo /D (term-controller) >> >> endobj 1151 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.315 260.468 177.513 270.923] /A << /S /GoTo /D (term-instance) >> >> endobj 1152 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.466 260.468 238.892 270.923] /A << /S /GoTo /D (term-handler) >> >> endobj 1153 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [264.336 260.468 273.801 270.923] /A << /S /GoTo /D (Hfootnote.24) >> >> endobj 1154 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.417 162.789 473.231 173.693] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1158 0 obj << /D [1156 0 R /XYZ 71 757.862 null] >> endobj 1159 0 obj << /D [1156 0 R /XYZ 72 720 null] >> endobj 1160 0 obj << /D [1156 0 R /XYZ 520.075 631.874 null] >> endobj 1161 0 obj << /D [1156 0 R /XYZ 72 615.78 null] >> endobj 1162 0 obj << /D [1156 0 R /XYZ 72 351.348 null] >> endobj 859 0 obj << /D [1156 0 R /XYZ 72 351.348 null] >> endobj 77 0 obj << /D [1156 0 R /XYZ 72 336.339 null] >> endobj 1163 0 obj << /D [1156 0 R /XYZ 72 121.942 null] >> endobj 1164 0 obj << /D [1156 0 R /XYZ 86.346 115.575 null] >> endobj 1155 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1176 0 obj << /Length 3361 /Filter /FlateDecode >> stream xڭZݓ4.]`م (Νxæ&;%'N:3Lܲ#˲,$'ݗW\}Zdnnwإ2en/> NUCiEQ> Q/𽮵5՟W!BEi/_?ʳݽu$gWK<=|DV: ~?1 <]dA"c?a)4_ >W^~P5ן#)7ao[Eܑ#7o[M=a!'٬`w-$۽iҳ綳T/Ho~zIR]C=Oj#]fC齫^>=&ֵX^U榛*3x L[k.> <;+,ZҙiAsuI!mh߸5z"ܶ5Nc=TU_Y[uyô͐2\AJ/a6lXۇ1* KPt[ҏfY[" 2n#3 45+&5-=҇v]5ouý PljX0k-sϬv?tcz%z_xGm^>ܫP,Ff^4i`41<3 ڼ|+Pk?yY= Gj10:ݟۦ݌Z71 4NA+蛆 |ñb}hOꏚh־-Ci+?-*HТ~>fEBȥtɪ{H& 8tD!S 1̾wT5bi2Wr?f^!Y1C9Mt l؈!kPI#YYdOulаfc0#XXt$hJJ#K8l$~&"=&rǮ%s$6%Il/TiA)ϧl3S,j`tJۋsSXPjS`%j^p\_λثHpvaHECF2ѣH&&Hg+/< )XvxkF@;ؖa~̸Ӽ V2 W.'Ϊ&`d2w6s6&*m+yw s7Ҽsz8 $N~lf.t߫y,Ti`DsEA* OMfϟZQ20 JX~c&ii1 db//§r l #rQTA]\2̕C{jQFk rv].mQN (7OܵwU(zAԺ$8SH;s)Ɉur?!ȴjXؾoʦn4rl耤2G y#Esc!&UUw ]eD!dl 06>s(⽁4pJ퓛%od02BUVL]aD$74I?0U$NŌӍ]-;jI$ż' _0X09Y.Ŏ8.њ3Cp )'@Weŭ?Xxϊ(Ue>wyH<"p@{  @Z˚0Ў,r %8L0=f+p2Op\Ӊl@[w9?t}0>{eO<19*n*qml746#o.+#Vy|_ G Rj ;l> <8[@2Mm&"׸r518!>T"_Rx!c gA&xEnbB%.k^ܒr?MU᛼2%Ep BqEN0ChRUa\=iBݒvFryrw|7( +Fr4cFǣx9\K)([*(OWE%3z$Jh 4k3O4H {h_bZý/@X5_k@}bD ^MA<]?{ ٿ 71)jË$F]U|̦W0jQᎧzˢ iMC bFԄ{` 7!0V`YQ8-5KԷ>]*F=ӨnTW#lY$Lt|\_n3¢{Ǫ&] vij2m`E0SBDXO cO;NN&@BqשQ䗉;My`Bes%ʗY!D Z3+u>pE͂kq(#Zur彺Xsnr 8_8K}kV-R?t*> t|4~04rtaY7|f\ 徔 LƗߢkmM(>>@g$ڜUScɃ5&8]8,!Rs_h aAd'E U5"̼hñγ!A6 dl*RQgK3Z.-24`웍q*QL6)WwXWAޥCu?-O.օ$^i ;up>U1䃿_R V|J`c/<4qIb~9bqz endstream endobj 1175 0 obj << /Type /Page /Contents 1176 0 R /Resources 1174 0 R /MediaBox [0 0 612 792] /Parent 1140 0 R /Annots [ 1165 0 R 1166 0 R 1179 0 R 1167 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1168 0 R 1189 0 R 1169 0 R ] >> endobj 1165 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.704 604.81 290.479 615.714] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1166 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [524.06 604.81 540.996 615.714] /A << /S /GoTo /D (the-view-context) >> >> endobj 1179 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 592.855 125.653 605.348] /A << /S /GoTo /D (the-view-context) >> >> endobj 1167 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.728 592.855 310.193 605.348] /A << /S /GoTo /D (Hfootnote.25) >> >> endobj 1170 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.226 592.855 525.072 605.348] /A << /S /GoTo /D (example-7-using-a-multi-object-view-with-a-context) >> >> endobj 1171 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.123 580.9 459.583 591.914] /A << /S /GoTo /D (example-1-using-configure-traits) >> >> endobj 1172 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [493.837 580.9 538.506 591.914] /A << /S /GoTo /D (example-6-defining-multiple-view-objects-in-a-hastraits-class) >> >> endobj 1173 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [417.185 334.93 463.631 345.943] /A << /S /GoTo /D (example-9-using-a-handler-that-reacts-to-trait-changes) >> >> endobj 1168 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.641 98.281 540.996 108.864] /A << /S /GoTo /D (introduction-to-trait-editor-factories) >> >> endobj 1189 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 87.702 102.948 97.938] /A << /S /GoTo /D (introduction-to-trait-editor-factories) >> >> endobj 1169 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.449 87.702 238.311 97.938] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 1177 0 obj << /D [1175 0 R /XYZ 71 757.862 null] >> endobj 1178 0 obj << /D [1175 0 R /XYZ 72 720 null] >> endobj 1180 0 obj << /D [1175 0 R /XYZ 473.829 542.21 null] >> endobj 1181 0 obj << /D [1175 0 R /XYZ 72 526.116 null] >> endobj 1182 0 obj << /D [1175 0 R /XYZ 72 404.116 null] >> endobj 1183 0 obj << /D [1175 0 R /XYZ 72 390.179 null] >> endobj 1184 0 obj << /D [1175 0 R /XYZ 424.803 326.127 null] >> endobj 1185 0 obj << /D [1175 0 R /XYZ 72 310.033 null] >> endobj 1186 0 obj << /D [1175 0 R /XYZ 277.407 222.071 null] >> endobj 1187 0 obj << /D [1175 0 R /XYZ 72 205.977 null] >> endobj 1188 0 obj << /D [1175 0 R /XYZ 86.346 110.467 null] >> endobj 1174 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1193 0 obj << /Length 2485 /Filter /FlateDecode >> stream xZ_6O1oז,iq/ m @M_hv}籧~#Eɖ=np-#ID{oHY>lx&B7YI7ͻzGA'^ow,NZu4z#m_WU+eYo?\t?b9ě.IE٦<^m@i7I淫_"_j{RZqF< ҏF̨ZjypWwSiHo&znc|TU{e?aw\(bC՛eG"nXFs8oі`]1mSjKU)k-ǵڮYk+\Rz'[mn>7 >Є* @ZxĿ^PVd(xph;0֪%ٷ[pKx}c\,,6Âm˴>xĝB_2ϗ(s&@M â௞g0M4-Z asÝd'A c)aMӠ=C.0C57L6d(+UD|ؼۉȏr ^: @,9߰PCF48u6ғe'DoYi} S2~G|0x޵5. D>ɓ(h8XC]Tm]b{%vtu<|VJ? YvJڰ(.=jwPWJtp0 nA83;O(,Z19UJ7X~Ó}Wݠ =B8 ϵzϘX:Z9ҴpAzDWBa3Džu$@EW.FG~e$=>[\8&߰Apv `_.KfxushޖWeҚp#v@JucYOqG0x>EKXS:!}yɣ^R@y6r<Lr88k*H)K rԏ4>8lsdgQ0BaHcH6>LofTq[JD_дY/ ,n()T3Ƿ*ι Yb@[װ <50KS'Өd.3Pּ;pC]iD6O!+ԀDp ˈRFǦp3yja LmCiOqO;9Q~Xh3WGIZ9we 6>b@̉cit5JE$٣!;՜sIԅUC !ŝa;iѭUnXA^ҥz:T[TSђ$09NQ&ڍĺ;R ,,$ܫa$$qrDډT3J:>B{^k(u؅B< NՖ`0k86GO 1nYQujNA2nfcH~ R2nXԞϘy<'PyX9E5.*r7TNowY)5\hOsl&,,Y,y}F%zgO.?'da">O/V8橸Խy'k|/nH3 9@[{Il.[mg l9CDX㋅Ld`nN7ׯ)Ĥ{,:#2D2f6S4y) %M swIQ=6601,'rQE@ endstream endobj 1192 0 obj << /Type /Page /Contents 1193 0 R /Resources 1191 0 R /MediaBox [0 0 612 792] /Parent 1140 0 R >> endobj 1194 0 obj << /D [1192 0 R /XYZ 71 757.862 null] >> endobj 1195 0 obj << /D [1192 0 R /XYZ 176.915 674.172 null] >> endobj 1196 0 obj << /D [1192 0 R /XYZ 72 658.078 null] >> endobj 1197 0 obj << /D [1192 0 R /XYZ 72 458.37 null] >> endobj 1198 0 obj << /D [1192 0 R /XYZ 72 441.025 null] >> endobj 1199 0 obj << /D [1192 0 R /XYZ 72 392.616 null] >> endobj 1200 0 obj << /D [1192 0 R /XYZ 72 378.679 null] >> endobj 1201 0 obj << /D [1192 0 R /XYZ 334.592 218.986 null] >> endobj 1202 0 obj << /D [1192 0 R /XYZ 72 202.892 null] >> endobj 1191 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1205 0 obj << /Length 2491 /Filter /FlateDecode >> stream xڭZߓ8~o:$M.n]v!J `p_j ƞq/B[b̟yswx$n=[2Y]6c߫U6Xƞo*Ъv:w7n8Hgl/g,f>I<{4 Z~Xg\BN[PL.FӓU#5yaUdWMV75=\W5iJ^Z+X[hX\dU'8c9KD}BUUQ~8zPeFCw S?U4~WkNmZv:j_vν|=mT=%"FjX=P ')  ]wiP)WvogzC/0:\ B@s+zk]Nꉮ%=*-#M8 ӸR#8Pg"Ȭjxp4%ZT @,lYĂ}Z^f?.vSe@̈ꠖ`Ak{@HM襵VAEtߴՖ`xZ d~^2#)rxw7 W@jQʖ&"q4 ektӷRoGuYQ'޴1m!^'5]I:gmrF)nvUiE*u3lv:5N8 B2h 9˃\_I(,^XQZ<0`[v&p13>S]IPRUO4D>dvbK M)(.Zd!HSBǏyU'sGW(@ {DOF`6!@L8ź 'I6vq*\NҚ;nXNWvf@3=츋 <݌Θi S 0L3.XJziS1͡+p7}g1)sgKW"a(%)`a2NSAn{jm:R̾T7%>ʉ9zU8A"*!4LGc7UcJ +zk'c-z- tXc-:zglL}?(.uZ=J=vS~F:&!(H༆:NtuPԌn\"оO+,%ns‹ ?Kn2\&oAalIx:v2b:ry2UK! LT|bwЩ.&![W~Hz;N BQLD);Gٱn`dux8H7wu$b{ޗZwn(ڲiNQXr[.4 _rXы9j߸) vv;4!EB4/w{> endobj 1206 0 obj << /D [1204 0 R /XYZ 71 757.862 null] >> endobj 1207 0 obj << /D [1204 0 R /XYZ 115.775 674.172 null] >> endobj 1208 0 obj << /D [1204 0 R /XYZ 72 660.135 null] >> endobj 1209 0 obj << /D [1204 0 R /XYZ 72 601.832 null] >> endobj 1210 0 obj << /D [1204 0 R /XYZ 72 587.894 null] >> endobj 1211 0 obj << /D [1204 0 R /XYZ 72 521.686 null] >> endobj 1212 0 obj << /D [1204 0 R /XYZ 72 503.753 null] >> endobj 1213 0 obj << /D [1204 0 R /XYZ 72 473.865 null] >> endobj 1214 0 obj << /D [1204 0 R /XYZ 72 455.933 null] >> endobj 1215 0 obj << /D [1204 0 R /XYZ 72 438 null] >> endobj 1216 0 obj << /D [1204 0 R /XYZ 72 408.112 null] >> endobj 1217 0 obj << /D [1204 0 R /XYZ 72 390.179 null] >> endobj 1218 0 obj << /D [1204 0 R /XYZ 72 376.242 null] >> endobj 1219 0 obj << /D [1204 0 R /XYZ 72 132.922 null] >> endobj 1203 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1224 0 obj << /Length 2755 /Filter /FlateDecode >> stream xn_A {C.}IpE]'}H|(qG"U^@3;b\[I r;;{=˻ee"eݭ0DzJB/.Se^^$]xVo2}"ռ]H\zOwf D-J$~vx;];O)]Mρcz}q[È0!kA ]u?@6uAB\j~͗e->_-}ZۭvJ_J}'ܙo{i@Ye6|Ak<~pS+W 0-۶Fd@dKf%0;xcFȰMZ2Pr|h4/]Hu ݫ3tFp1{2p<^kPXHdI\wyۼPtj#ʄ]AcSn/=-VyEOmҺj"-5ijJ?筣Lܳ^uW*vMGgy1n;mK/:$bcuM[]F^pUVnKdqSѷBE@~E`P-Y&whg(W ]iۯ6r8osqd gzI`\>tbÛ>HBoah}!b;A* ,;H=e{6&m. Kî3H 23VW's&)QCvbېmʻa(s+,&J'P$DZ̃Dd!'AU{U6tR@HFg(*Hc 4R,&QPcf1.mBr a9=]:4 M+t{x{2-̈%DQH+`&HH$ֱd#~:xeQl *`Lw )hEQ.V;?-14VkR~MJcz[ccy8}o&[rd7`\I nKQSlR6&'S`5 @R늴 TaƘF~dh]MBldQ-m}c0, #)!*;Zz-/T5D6JˌLH-6'f}U6uKA:ЕxRDJxoM@[iPx/EoJfc$em,2 /Mb%L:r[M-eMEɷ8/HZeDDȓ|J%wTY@4s2!j67~ߔ+=6|G'ɅTrB3uX*Vzՠ'ծ)a! 1yP~fV_j`hV {0C9e8dPnu!cV܏e<ݔ0+4D:F1mEe~52+MARw+EZq] +됴B:)pa˪K:T͔3޼mAŬ{D,Ep[ “Rbnfz>%X~%ϺۛG|KB*Ci AcKJ iĩSzx(NF: Q>vqw ݓA9AJBS Zֳ̍i&MP XIA"ISum]p6{2QY*i'12Q n⃛0 3wzݸ"2'6nwt81mH- _5YZvM4CX&d44E ]9f]" MEa⯎n~ʓ硫ܛR >l+0hi$ie-ڕݖlAe;}Gն"V{;(.OzeŒg yVwuB!v $cӋh4eQ|v:Sع-cgfNYrA""Ɓz0z1TfO]X58o!}wЯ $$/[J`I@]5NbON]GID> bGnzCl`J'É׸{&oə(3Pθ.+% >R؋ݚ-29uM4$B*pD,VA=4¸_+}dº3q G)rzY[ROɵ⻊/tP w>\tlS Lܽw(8cs>tlEa'+J]nDTxǐj*S<(_`01j kl|#x 3|l:&ʵ'erB靣%9yVla8=WO@bӹfN{{"V>_@e?c@M:gtjp~O LHHϚ~E-a"Hxh^m.Ŵ+Ґۜñ([d ^P endstream endobj 1223 0 obj << /Type /Page /Contents 1224 0 R /Resources 1222 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R /Annots [ 1220 0 R 1221 0 R ] >> endobj 1220 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.052 575.042 311.835 585.826] /A << /S /GoTo /D (multi-object-views) >> >> endobj 1221 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.655 533.079 277.441 543.983] /A << /S /GoTo /D (example-7-using-a-multi-object-view-with-a-context) >> >> endobj 1225 0 obj << /D [1223 0 R /XYZ 71 757.862 null] >> endobj 1226 0 obj << /D [1223 0 R /XYZ 72 720 null] >> endobj 1227 0 obj << /D [1223 0 R /XYZ 72 623.739 null] >> endobj 1190 0 obj << /D [1223 0 R /XYZ 489.45 302.266 null] >> endobj 1228 0 obj << /D [1223 0 R /XYZ 72 286.172 null] >> endobj 1222 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1234 0 obj << /Length 2162 /Filter /FlateDecode >> stream xZo6_!{1DZiwEq[oaX(H%mC)SpEp8Z4 h߯ <@@FDI|dm3q&!>5[ՔI6/t ~t Ҁ.T4X@O%a{3.b2?r G5V$fa )K\b<QLch8!Ɩ.gyM>?!I)o`4 @H1B)*ЊE(`mOp:mіf1 +[v]2tޭ0  ; 3hf+ĹU[TX{^uM[aE c3ŁxvANX?SxDFO+|5>ʮ,{}_L٤KM-,֡UZ(M[od 7S`m:]߹zӟZJVI=R|g?$̭bÐ^1D)d I鹂3 r"ā{cnT~Ϝ[jg̈QTM}5^ ؁,[:c6^vcW,}Lz:G*}ԉT,\eXZjЖ.}vO ZnCa^Uox4(ڹ5  %a (o,-2NH\!>*~-ozDDF 5LE5=4O?ȁ߲v͐Nt) E3ogz"|&|Xΰz7d-&8xyj¹"#*<(Z}i ^PDRe*+;C0LǢ=#>{q`sq@_-'@.>tχ| .OFx>H|,b/taQ%E_fur_R=C-j`FC>y3fK|KAt p0|""@ew3z&F)g|rJ׭ZF{w>yw=MkxdȿE  endstream endobj 1233 0 obj << /Type /Page /Contents 1234 0 R /Resources 1232 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R /Annots [ 1230 0 R 1240 0 R 1231 0 R ] >> endobj 1230 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [500.269 375.806 540.996 386.71] /A << /S /GoTo /D (term-command-button) >> >> endobj 1240 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 364.568 98.261 374.755] /A << /S /GoTo /D (term-command-button) >> >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [312.277 155.626 344.157 165.812] /A << /S /GoTo /D (actions) >> >> endobj 1235 0 obj << /D [1233 0 R /XYZ 71 757.862 null] >> endobj 1236 0 obj << /D [1233 0 R /XYZ 236.546 528.995 null] >> endobj 1237 0 obj << /D [1233 0 R /XYZ 72 508.905 null] >> endobj 1238 0 obj << /D [1233 0 R /XYZ 72 494.968 null] >> endobj 1049 0 obj << /D [1233 0 R /XYZ 72 440.615 null] >> endobj 1239 0 obj << /D [1233 0 R /XYZ 72 426.678 null] >> endobj 1241 0 obj << /D [1233 0 R /XYZ 72 334.959 null] >> endobj 1242 0 obj << /D [1233 0 R /XYZ 72 305.071 null] >> endobj 1064 0 obj << /D [1233 0 R /XYZ 72 249.705 null] >> endobj 1243 0 obj << /D [1233 0 R /XYZ 72 235.768 null] >> endobj 1244 0 obj << /D [1233 0 R /XYZ 72 173.837 null] >> endobj 1245 0 obj << /D [1233 0 R /XYZ 72 156.622 null] >> endobj 1037 0 obj << /D [1233 0 R /XYZ 72 89.772 null] >> endobj 1232 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1253 0 obj << /Length 2111 /Filter /FlateDecode >> stream xY[~_!lv^Dj]SlډMh$"K.ݺ7Y=)"IQ\>R8E87TF)Jf#Ƣ$(NY)/ZUC~ObW}51فUWn:|?p \b$W_~QGTF_ͬC mp+ƈQlA^ ޜ#SfK0,}VVv[VN'7n>fݚUor|st8Hz}ao,ꫦض!*&4|(|01$"u)06 ABRyVn\8,OzGIWE4ys8XCh)PCVFſw4miF(0]$)JrŬ/9ƫ1F=Xy԰o oJ1|7дU^ڲDK8I ֧7z3Rvu")_4 BB:8Wi0OkFrZ3:3TʊW>B?jwY.m8]z]sI f{L7[ܙc(3BjiOH=왵m״]9)y =*Q:S :Y(00Blj_g0g MQY~PA׭@6:;S|ݫAoXu$mfV?+HAuPDK-P ԰OE*! 84B##nĎ¹h#3.)„̸8a(M۩h{TQ"$]PLuJ"~ f@?#6yU@p>hԃ]ҏ`C%zʁ~~Uz{k51|@= 6", 9fYq8K^(bAˤsuit29-|GˬZOx j#~ yB<@AkAXr 7Mu QHȝeHgU7vV+!-Zխ%NGftjE>g gFMAsk6U=\>':LJM:u0{`-חʺf%<|+[*s&$`Y "3_4Se:^Xd7_rƅ3rq~a@O0uLRS9h!?;q,66hDuæ e(M8ΛmQmHk Ƣ R&KC1&~=Rn&~knTߌ2'O_1UÎ@ {Ks* 뽯g0f:Nzi8|Ep'(hrWB|k=霋7KxPsoa̱Wţb'iay fDӠa_$s"I1X _+8B u,Xo~@q NoCt[< {ဍilke՛3}Ƣ*8IBT|ejyu U;㋺ө~2)\3Jbo(wo^<}/:Qel4AڴܲUY / 6v^y7Ѿ cixpuY/e{UKЁ58(=\UM7'驮\ #)cmX9{og' ΪgzTz}apG5N=ry+P2z. 8-.iCGh>,("N)EPbN#,E/e endstream endobj 1252 0 obj << /Type /Page /Contents 1253 0 R /Resources 1251 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R /Annots [ 1246 0 R 1247 0 R ] >> endobj 1246 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [312.277 661.776 344.157 671.962] /A << /S /GoTo /D (actions) >> >> endobj 1247 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [296.024 425.015 327.904 435.919] /A << /S /GoTo /D (actions) >> >> endobj 1254 0 obj << /D [1252 0 R /XYZ 71 757.862 null] >> endobj 1255 0 obj << /D [1252 0 R /XYZ 72 720 null] >> endobj 1256 0 obj << /D [1252 0 R /XYZ 72 679.988 null] >> endobj 1257 0 obj << /D [1252 0 R /XYZ 72 662.772 null] >> endobj 1258 0 obj << /D [1252 0 R /XYZ 72 644.122 null] >> endobj 1259 0 obj << /D [1252 0 R /XYZ 72 626.189 null] >> endobj 1260 0 obj << /D [1252 0 R /XYZ 72 519.812 null] >> endobj 1261 0 obj << /D [1252 0 R /XYZ 72 505.874 null] >> endobj 1262 0 obj << /D [1252 0 R /XYZ 72 443.944 null] >> endobj 1263 0 obj << /D [1252 0 R /XYZ 72 320.63 null] >> endobj 1264 0 obj << /D [1252 0 R /XYZ 72 300.541 null] >> endobj 1265 0 obj << /D [1252 0 R /XYZ 72 216.081 null] >> endobj 894 0 obj << /D [1252 0 R /XYZ 72 216.081 null] >> endobj 81 0 obj << /D [1252 0 R /XYZ 72 201.071 null] >> endobj 1251 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1268 0 obj << /Length 448 /Filter /FlateDecode >> stream xڵMo0 <̒ԧwGءs*z0 d[eNtSz%$X$xS]\ ++GpN{ԕz wy]xͼ8&vWߚUoŇ(|omiQ&Zg3Y 8f2'Uṿm} f8$B [}DU(K6g=1.s9y)bTXpv9ڮw ǢTPMde;j](sH9櫮]?@7m%W@YFr? M!{N.ct :-TjNdcP sll|{N4/p8SJhc4 t,E8\5b NKIBk$VϳWf"'hrr]mBp endstream endobj 1267 0 obj << /Type /Page /Contents 1268 0 R /Resources 1266 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R >> endobj 1248 0 obj << /Type /XObject /Subtype /Image /Width 227 /Height 160 /BitsPerComponent 8 /Length 11010 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?YEղE>W?7<|tZE?UMm@]1ʆ8zDψ'xgl'9_G#XXZ׹2.yeB{hm5@O'#E>vW+cPom..Zoǵqڋ? ˾m,0… W"kI[;tjʚ{"_m~Qϝ~WGƆ,b(˺rK[ M  [50*>lq]ki>exJN6z_)iE>vQߡZ~%N-60tSA9**xOZVDiR4ewUu kCBpSRV~dO R-?QϝiE>vUtkHs#}T7Uޭsj.#Y]TY$ !!Wԗރ+FiE>vQߡZz-.<[T\F0BK$uۏz-ouk[+{¯ lAFqN&䣯.}^i)=bi>vQߡWnkfa96-/%6Fۻ/zU8<=ut}[8%% ~?QQyKK<-H˖Ӹqϝi>vVΗ`e{=ēBLp~c8wP4#YKvUw0C8vXw'eum~ho V7N/BN/B5(gcӥ!.pA|+a<.AY: ە=ssE\M*WMIu-0K_+cHӧ {ᰂg4LC0FxSw>6ˑAO'' QNn315^(k5Q6.HeVϠ=4˩rv4iZ_aon^_mis(&OحN噡r\@En2 T͢"G\˫YrNc0A֛\:GOzznpMXJ424QC"2Hފ'8<9ywc܃KYT:,b~Dldr3jf*ω}6yb%Cػsykr tӖ6Y#V#?p晥l%ʞ}*(I5_oot1nlh[Qv ?(?2'ןHB[@I#9sIQFP`gּ'c*bѫi;m i֤x_FJO=ZbV61eQxqEx}?hn=?TpO65gʵ=[ZI{uޡRYN+vFsǵv6ZDұʉnA9x_ƽ#GșV·ᇉޗ$+\`TjVFy==pgr!f͕J"HPlpOGlV ,4Hat]Zn%Vp%vdnV+/֗d)zEV_JwOOɴEXc*Uu7V7V{YMmIaKs;Tڿ,m;Rx/GlQ9B_2 F[aOEU6I}yy >rįi[HdYn qp}Ky[ݭr fLn9 >٩?Xx~'G+֗d)9eMmv~j;"_qlI8$)E`"1Fߓ\"iͅ䡚;{`8V$/Q ğ?襋˩rkjPTI8I~ȋYoIv-b<.28#w͌5h61zo M8 JD.I *OV$/Q ğ?'GSM? B1|ݿr;Y}ťM:KpL$SK43JDu 9<,- _wLly]cV$/Q ğ?kYWov/6: dv<rZJa A' pH֦[=>B^=gQe*_kZٞQJ5T7)GrIlnKKNp\:tEC6?WWU|_b'o.o@-'2B p Cڧ~o:gBK2lu(|14Hz.'_9ԯ ?ixB ŕ.b“nZԫ\nw(_Pȣ(?}PЮ<@ȡXt2WּVl g ?*Y xLJY5Xu)${t2z }f*=xۥyhchj?/>ǥמ :m&zk%AY.1z|׌`cD ,Pc88_ /1U>{ !-# 㞵ӯW'5<5J49+t@ Qvsu!ogGџ ?SuW E9iG]|ViS!EWQE2z 6^YKms ΋uo`UnfO)&㴷QN3+Q[MRK4 bʄf䌄< sҽX}α~f!@܊_3F<$*IZ[ڍ~tV3OQNp>@8YYQ2ZݼnJs 2&EtZk#NX@rJ&7cq߽]ןj> 4(-m`*b lLTT.@rq&- ɇ\4^&M &mY&iubi q3WkkjGCt-Ӵ& *eҷ>7n/#Ջ\cBfSV+l-se.:J-e*11R">hOqî|~e]BKx"+fb|`>BѨh~Oe5\W[V $xÜ?5b[Y4twAfb+FQEQEQEQE|osRh>x_gG|'NoQu\/wUyOS oϫ%o3)ϨltV,>+gm.h$!APy+ jHIngRXe >WP$61מ `iO7䲠UIb@h.︿e܇`ѫ\)E~s+G01zׅ IFJweFo?s}׏K!s1j8X/{w6>%̻P>`7 1SqR9*I{&o?s}ћ\quS+hMͤW\hR6MSݜ:UW·nwvr\ VBI%vaвODS_g{&o?s}ћ\quMYU+"s")7OsD; b`o𞧞f}j{r?e.︿3y@˟/.3={eFo?s}rǰk.︿3y@˟/.裖=^&o?s}ћ\quE13y@˟/.2(`׹\qtf?_]mG,{L2 d! 2 BGQ[ui&kT)+M>xE}K_<(;?sҎ~ȧ7}(뺯?*zO4hΎU  zpǧZʸ..6qr@OȉWV^!%-,yIi$Uz}k"{ =?._*gk~L9I|nn}Y4W~z%RhyE J\q]w{\Ud_yrT,K}YL[>%RSB4EKi$eM cv0q7|Uqt2i/(XK,O8Һ/>ȿ,K}YLޢ~ȿ"{ NxٛV{\Ud_yrTs,+=?._*/9fPcQuVpGẛ;y(_w_;si?G4 O E`}ɿWw_ջQ_x$0}$Nrsj&>xE}K_<(;?sҎ~ȧ7}(뺯?*zO+>X%Y e1q<օr׆5 R-Z[y?tm`@S B';HGGCokJ:?ɵNzt4f,YM,W2IuW6j7pZn{*tZwF2)!'n}km9O2Ios߫">Iꂌb͌Iip:`XgU]3QU[ubfuhmSQޯ^ gF'ЏB sUI./oeo?,(ڹ#][d}|Vhr,RKPBgH?TuoyiZ y"y^7Y]@x_{/d~}E9iG]p SuKwm\E@?Y(""E*nDӶ[ ]Կ(4WKgG|'NoQεe$Ų%L!U: 9=Xz7wUyOS }oeF"-n$KYCH$L28 Qk7Zn![[]A1Lπ-0K'נk>T6څݹ "Y+8+ ;QX6MN̓O6NAWl[T,yYY2%  uAoE j#B oz%Aw!?j]v=V}p%$qGT:GɃ=G[I$|Hᱜtܿa^4 }Y-0MWWvṼA O]Uu9egGfHRe.Pų#[S?ն6\HlEW"I6 7~Q5>Vn+t67wsZҿ+o o7G[S.Edi_ϕ7J|)]֢>VnkQY?WmMҿ+o o7Ep5+ti_ϕ7VO[S?u j+'J|)WmM`}ɿcJ|)AjGyCHBc8Q6An|{uRh>x_}/d~}E9iG]p SugU^V}VAH;}>cz w}ffwawO+4m:(8hYŎYpWR7u8ɻ6e"%29۹f\<>P6ˈ$6ycM 38#5o!%yEUK|V.gS]բk`)9e oAS'O뚸;w j鿲W_E A+/"C$Hn@7,"V3O0/A Ӭl4;M ,#gV\)˯._y?a(o ^~QENgCJ!%yEVi,fd7?(?W_EiFgCJ!%yEVi,fd7?(?W_EiFgCJ!%yEVi,fd7?(?W_EiFgCJD;(l2LCϩMDɝkr>iS'=~;QdDMb镔uux\.bp%70gW+RM}4b 2>LzUi&kQErRoSE_/ƊY|Lȧ7}(뭽ѴJxgl']9H:zWVEJy^rGu5uS97M8z%3A{4J[ 2F8T^E$W61HB)ʂ=+oߔoߔ77LJ[GH 02NIPG Q) Q)Gc}'U,p$Rx\MONC!HS+n92~^Ny. -GG. -GWKNy7ycE&m꫍f@Dxf[k4xUmm-Fٕ:W Q) Q)+}?yI?%k̿u[yj???u[yj??>oA=7j_&?yI/]~ZO.]~ZO.b{hwMڳj_&_疣~S_疣~S%hڳ2oߔoߔ+}?yI?%k̿u[yj???u[yj??>oA=7j_&?yI/]~ZO.]~ZO.b{hwMڳj_&_疣~S_疣~S%kgFXf`y9q-<]-<]\0mO&U)u ϴEhٝYC+Tpyu[yj??O]~:O.\2(|uRh:Ȣ_9# endstream endobj 1249 0 obj << /Type /XObject /Subtype /Image /Width 291 /Height 218 /BitsPerComponent 8 /Length 16426 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222#" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?YEղE>W?7<|tZE?UMm@]1ʆ8zDψ'xgl'9_G#XXZ׹2.yeB{hm5@O'#E>vW+cPom..ZoǵrZv]xsTԦ2U/D#m'N>j0x,Dv}8+`]:zQϝiE>vV{GҢ&{o-[v vN ̷uh.b]TY$Tr(I7t}W%VniE>vQߡVG5n'6,~RK\ĻcnAlh9J_W["02<Ƒ`vx柷>§giE>vQߡSx_R[E N̐.@f8L,l' *Hp>m١Vwk1]&MSx̷UCw/Z̹ж6PKdK}ۀCSx3Wr]o=ҋ|УN/B'Ze1"R276Jx+ ӵ'[hn"cRg?7/2TTfgi>vQߡM<ZWGn˅8##VټQ.J|ٛxTRIءݗ{|QӋ|УN/BFoOiZ(Ba`XEcZiNQ8"t$-?8 ?;o+3bii>vQߡYr4Χ[ߡIZߡYrQϥiE>Vf(rQϥi=pAn͚&!HU#<`dz)|9pm-oח#.P6N215^(k5Q6.HeVϠ=4˩rv4iZ_aon^_t{\?I6+xcӭ|fh\[2q>3hoQnj2~#qn<s+*ޯd۩0olnl(%h&Ү Pȯ 72qj{O^]w VU<.XZٯxMXrIP.~oZܰ4廍vHհH<}?\9i[ F2c,ʨJ3{>w9 ۼju;m..>drB̪pIFz%Ь$mVPh@y99xz~9}+/eD-T' ʘtjNtzw=|FAu9^*jҢVkMsq`:Q^rOE{27;͍YOVd^GwAcED z]My'V4r[qpNEyfY+$FO>ND27+lJ%mѫ}oO߄/|Q K5l]QBc2;b[-B+/kkE+~[ Wc%A I?24ž ??kL5\ gVܖe;saᆐfip qRtno!1ZZ!dBlg"~ a|?G"~ a|?DMSO68,t4Ql_^".Щ,~o{&#IEo)Ta'4'5-^_pEch-U/4Zb(wa.PcP@U}O&t}GGs;ȩ.7O#_}M}MoGQ4*ttDUYG?eyA:Ŧ[.se8u[MC[h-~=ܼ2TH`GcU?_.qwg{~ |UgAVm"S6TbI?5%-Ib[H%CP+u G??5eEYTU%h}O[k-] q3d b[kpi޳Ӭ5F <1rO!xڠO???O&'/-|6^iќic#'% }^#[ ޡrQW<=g?ϰ$hO??ږaN5L&.Y{{"~ a|I?5~">SDA>?ϰ$hQ)`kk?ϸ$i?'G~!G7G[?}?Ϻ4jk~ {uޡO?ğM[1ʓQM.ߞ(Pj')u~z~ѨF?9iѨZO{W_o/ѨF?9iѨZO{W_o/ѨF?9i-ӓtw@y>HMp1q=u/x7@#;H;ѿ:bf^^]u|d~byeϋ,"k22w T/W[>g?G"/UqNڳXM 6*H纙k;Vۏ+\MP}Q;y!e)v(L63 >Rk)ϙQ>g?[4RÖ=oE4_??f=cM|*E4_?٢i>9cSE3M|*hOX1SE3(Ö=oE4_??f=cM|*_ϥ^^ak"XJR;ߙ-%%c??dc?J4< >xE}K_<(_2@J'/k/^1 w&r22GEpͦ܍sfY} q/k~+XZ:q7< ߹< ߹â*/k~(?/k~+>T=M߷Xr>V4>LX#f9$&EaR;ɖwǧxWhBO1c >Uȿem\Ґ7I%YrsMO ׭]JrK=ٝ&o+Q >UW' \J{1}}7}?M{+?O ע{0&o+Q >UW' \Eai;MW}7}?⫏O ף?/^vy|G&o+W \G%rG_م?7_*MW??/^J>z/G OoϽUy|\%rG_@}^fsM{?7_*J>z?+?->a >ToϽUq@}W'z=Z}}7}?⫖Zu%rG_C{[ l) ;K`gZJj1OPQwM2앙Z,Xx}K񢋯E}ܾ&yQez?-EO_ף Rf_u=N/bQEpX$-ooׇ!#!bYTlwGh"X"6a {1]Xz s؇eu?QǩXY4??}qBXXP, $2z=kNY*͜v|i 5G͜v|i fϩQ)c(Ku)kKNKKt%֟Vei̱o%ruRh>x_w/d~{/?^%KQxATYOS Q\'Aj^ ,Sz)e'2>zkym˙ 3G=ǽcmV!sf1$Eu@]1ЉØLQY8wJђ`Adcް}F!gYc3m2+N8gS}NG:_Mnpn#پ5T{wpyIn{ֵrmsʪ˴.to_ӯNN8EY tZk$,Q}Ou+&T$P_ .+ <PAt`UZ]~EB-!I䁞( NFF~'N s, $&;G{}^RůhL$}*/i6A{7L4. <yYpA!%fnf=$W7i{?*b ip1ӿj_;L,@?g Q!b~]NHVT18Fn"<ſv65`bO < ~>2U6W~{?sHȬp]?ehCsk3iTNJm4y`bO < ~>as>[*C*m#PYw%NFw dӵ`b/'$[{Ӿѧq0}{G繹'!W0۟-z@ZiyMspUFI铓kw /;ۏi?Ù;-%wLe4*pG..Zy#k0n$RXG˵]Ce!$~=k^%Jk}6kcV#ҭW}0z>=Ο /.ǧ^a_? /`{:_0c-R>e ssYPԍF -6l5_9%+nhOe|+2X4QuRh2? = G *Z,ׅ Bh*s2JA ~dOBF@\RX[+u)'(z7?]-e#/#&FI5n#Yϔeu?Qǩ&KuٕO,qAu8H dp$j;v׊.{-?,_z/=P.f0vCh*GSx̀Emi6ȯk* 3 TWP瑡Ǩ?,_z.m%1Η H7qc^+|Rtlzpi%'i!h$yAfD $TZ9)RDb2Y!%Tp ֹq+5p66.dh{I 3z?8wk/! F!l+0G# 9cr)>ߥs쎋?8'u*-|H#2*D֣sB=wt9hڈ4p&3[b9=k E$t_d𿮱G[h`FV:0[[|n4 Ionܜ+?h⢢ĺnLDzHWS8 dBs3^I fmđ;O ף?/^/fZY..pO!FpU]@}W'б]2s?/^J>z^a{&SW' \Gף=)W?+?O ףɔ諟@}W'dtUJ>z?+?{e:*%rG_@}}z=2s?/^J>z>NTC?+?^XKfv6LTm[#EwuİD l?04%+cγU.Ɠ.;-?,_z/=LbYe ʲHQdM1hi|+t^Ugf "=ZwSX-?,_z]sNiZ?ۿ.ѲgpF܌3*Am$'XQc Gfݜ!]0zR"O ˴-^yv~ʑ9Vmbdi!h$yAfD $TZ9)RDb2Y!%Tp ֹ1+5p6iz~!L$@QA<ύ=AH_O+%UVl33;~Q'TʔVˠ(wq4gƞ ֖kog[xXs$22,B?Xj Ӯu#,pYCyLe+`C688?_p<كzF|i v4QgzF|i v4QgzF|i v4QgzF|i v4QgzF|i v4QgzF|i v4QgzF|i v4QgzP׋ᦌwk2ZFInٔb1铞3)%Ցߊ݂ѳ<֩ϩQ)c(KsGխK[;H*='E-soՊ䖋O1A֧3Z,Y2nx}K񢋯E}ܾ&yQez?-Eh2O D(S29V2{,ׅ K6NbI[l\Ub=A=j1"+ Ɔ!L,q̊#=qd# M62iDs7SӞz/&u8~R}h=4(y\?8qU.;52^\N e0 xsC>}NG:_MMoCMm65MyQB;\XyU@yv{u8?j^ɖ-$$(7K+}_SyJou @U JBO9d!PVu_p)J@/,_axg1a˶McjpE}It!”&cӧzɾ-U8|+$$obnn<1[a$G]1rYWpPWtMN(wVYV|>q#gogɾ-P%zM v1j<b{:g +by75Ũ1tϱW75ŨokQc9c(?okQgs>ǠQ^gɾ-G}@ɾ-G}C] ZcAEy}C] Z&??΃=[]SOk;ʑdazP75ŨokVay;ˡwLk;kXDQGAaȥ}-:g[:\Dio6N tVVejN y3sn_]Կ+3̏Oi8p*KWth׀6щ }Asz΍כ֫*ORՕ8hx_~_GE5sxu-/Xx>ާ?>?#??#??#??#?> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222'" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?YEղE>W?7<|tZE?UMm@]1ʆ8zDψ'xgl'9_G#XXZ׹2.yeB{hm5@O'#E>vW+cPom..ZoǵrZv]xsTԦ2U/D#m'N>j0x,Dv}8+`]:zQϝiE>vV{GҢ&{o-[v vN ̷uh.b]TY$Tr(I7t}W%VniE>vQߡVG5n'6,~RK\ĻcnAlh9J_W["02<Ƒ`vx柷>§giE>vQߡSx_R[E N̐.@f8L,l' *Hp>m١Vwk1]&MSx̷UCw/Z̹ж6PKdK}ۀCSx3Wr]o=ҋ|УN/B'Ze1"R276Jx+ ӵ'[hn"cRg?7/2TTfgi>vQߡM<ZWGn˅8##VټQ.J|ٛxTRIءݗ{|QӋ|УN/BFoOiZ(Ba`XEcZiNQ8"t$-?8 ?;o+3bii>vQߡYr4;o)?K_+7)ZߡG_k~fbQʻ)ZߡRAy౷i\""2Ndb*?5=9[dT 7dGsFǪ6?*&AG\-i KAceQ{mokv%sB!2]8_$є}5FbIuSqUgEγgqr#U?0aWR-$k_BiǾ c/hv5Z-2T[+{k E狅O~qgc9⺭Zچei^A$/[Pȟqbb-a}WĐezlrΤZ[jqG|zĸǛݷS|mgHׂuԒG~8\d+H}I)B㬢ÅS6ZI{uޡRYN+vFsǵv6ZDұʉnA9u-GOYTS{z_J?ofOZV/FqPUӧ~E`rYez|jYxsXZ)^[ڻ-O@j":G[Xo9m M^sO2O:ے̱x 30 1U_{2ܜu*Y<\Nb-խ2B+KW6v,cqPs횥~=h?Y?4NS7yT]ʄqGY^".Щ,~o{&#IEo)Td{?罏MK{}㣴[[j65e^h,Qh]Ơ;Mj5}rP)"wR\n3GZ?&Cc}[Qg k[O/$EZ8ڑ:6>}n}w@NiK.\b)4fP+y/߳lg/!l$罏M?&n<ף_{n챷/oYϊ(5> JfJ,C0=4\xMy.nPKA"Rgqy~UTs*ol?fGf(VWNKȯqZiڂ[]5 -bDrI7dRilѢFӑ#G~lf`]16mێ6Ն'mzݽZdkZVooG~ݳ=4V*3fb2'{3G -bfdӦLpHwiҼN63_'<6#4TRxJԴI;F$1Z+i8{ jWm?Co)Nrmzw_+go%t_S Q^qQEQEʊYijXFgi<6=I'2ǿBKj?=֪Qp/i/{G2ǿB./e_ZUkea=Аd=Nc6?=֣Kj+qmsi,.ж7Ώ3RB.^^Ha1=ܲ y I}.v_QLqa;$q T!UӞ$դ KX IlK7$!pr0>NWki/{G2ǿ[kZ~EkevnEbwa:ĺu֧isq-YH( '\ |\?=֣KjHti/"G2eTc#=P=fwX3VC=?`v_QLqީpJEbwa:Ɠ {/ŭ_Z/e72ǿi/{T(__Z/e\  =\E!Ȭ:yی4gQc=thiyտ/:j| @J꾧N ((()FFEg6]HΗMWkpA/4gKM1xQ?y?3GtO1xQC/4@L#zU(ыŽP+ )P" _3ttHrՆ0zu~UkF/ ?bP o+,alc<40"P*qqҮhG_Yy,X@bqj|6Ҽ[#]@I(ы‹03?&6;JJ@NHcr}i¶i Tӎ:V_hOP(KyRk[I'%xe2*t4TO-UFXы)X~fbF/ 9@:_'hΗF/ ?b~fbB/ 9@igP=0 L$EO֋??LzO>,Ǯ-9O?:%tGAouWM\ρ ]5|oW#Y'*?)?KLZP6Zu$0pqWtG24}K|C 2I"tdev%[1IG$F쇷YʁI,J1\e/hG25M8B$N;'Ҵg(pqz C"YӞ49GPz΂R}n?Wo-E44Ԍ7r ys*çl"ǿZ9: CՊOppvMg~uj#JԮ=6ovwdoe^:ZũuuK{b/%Vr;)gL[o΍g~u0?cg'вo;8ʯ~TV$Үm\g,ȳ3=285NU}IۦϭF3}m:4cr\A-n\@J|O-7ͮiw1pnq*<WpgL[o΍g~ug\Eő,ݼ~l}<ȓ9%+ik 6,uSp}=g~tm?Ra-ۦϭF3}m:*(ݺg~tm?Ra-ۦϭF3}m:*(ݺg~tm?Ra-ۦϭF3}m:*(кi8zq#a/Z+Ps S5ܰ2Jӱτ5U?JM }*:q?LzO>,Ǯ-O?:%tGAouWM\ρ ]5|oW$I}k ]<7c8qEŜW#3TlɌW=KY|܌w)A FyUmfOE U p>L=տG,瘣/* / ɹ&I<`bxeE?.s GR0kZkfU FBrW@#olU/G,瘣/(7TV/?پ=>%KRܮX{T4]_Xm;ѱjFF|{kIiVLjgmJRXnR>~H_0Xڱ0ۏ2عf?*ӽTCy0G^o.!V*)\ϱڮ++{+`ܴ1$0t‡:ǧؽMkq-vIաHhM0cb0q }] :mv B->(\6u$~'Ԯ.j4.MF6c9AQ8R<_c|7G%?t{hwߨ+/|!6f]$W$f46vOT-u{KbדL k⏵Utqf.l~_}6vqjT2P0Szʋ*H>Ss6&uevvڋh.uk܄>ii鏸Q]b6VG|hE|?-WKGjlZKnOZchثPm^p?(ȵ]G 祇sȵGE|^]>Ms GzKk"{XfoF"Bɕ$g{9 M7cȵGE|<zX~iGK(r?"gE?+tan=,?4.q?(ȵ]Z2-XeHA=i c0ۉ Ur@N=?1K#"gE?+MOrjiOe leq6p#*[ffKwH) 2STn%k?"_m$1GOvȋ-IqEi,GzqjO>CkO`E|?-W3ϳ???UfyE|?-W3ϳ???UfyE|C[sC촉n-tY0kt5Vu Ԥb\<]¬&8WֵmFUtRX'ңq?LzO>,Ǯ-O?:%tGAouWM\ρ ]5|oW!PE3OU2䤏=J6+: .Dk(*&(De^÷:uK1nKbpb$# :Dc7cA T`b&h" s{qk+ݼ"X sY=pQ)FgTdc<}j<4cA M,m# ? oCeVggi$n$MX]0{@1Wf^x]3C_dm&k!Ԣ#K0جWuYd`vH=A 3S٣d$oAWߐ2J6ZGT PNƗa35yKKeQ0kXxٽλW zu4mc*cIXp tpH liI.L^h#62#vwo9!5 oqe<(6@HUkKuM( i䌞Ubp8kۍ;ReԚK{43KhJ l!Trv_'"L%rA+U8:xv1 h@py>_L%rA(_'"x%Ua/G&9? sǸ?ȿq1kKRjVjl0N;v0=+;X~!4߅7BA$,`ҹ*-@>(>,Ǯ-|X]3?Z+?)u_K莃o?j|ӄB(8 ( ( B21KEd_ik1Ycz-ĸWSSwRد_ꏱ_̿u;֍G0X?2T}~e޾o_Z9-+W/]Nz9o_̿bw֎`}~e}WS}h޾s[W/Gد_꺝F,rb>?2U_Z7c}Q+zѽ}h د_ꏱ_̿u;֍G0X?2T}~e޾o_Z9-+70ne_Z7cɽX'!DE<ii7p籉c>l ;<; &y/GM_ʕd.y,l6ۇS~Q޴m{RkjR:R)6=em,oVȫՃug=}~Z꺢pR2}qN/TbiI Ba$.7Fc?5OGƩZADŏ?ޓe'E}SO3ΫI]x@-]GW3ouWM_/U:pQEEPEPEBFj3o ꂢ+@Y@4ǏSW?Oҏ/T9?Jh瘣1U|S|(O _fy>W?Oҏ/T9?Jh瘣1U|S|(O _fy>W?Oҏ/T9?Jh瘣1U|S|(O _fy>W?Oҏ/T9?Jh瘣1U|S|(O _fy>W?Oҏ/T9?Jh瘣1U|S|(O _fy>UO)g&? "Y?1 80Eh\'E?LzOʟJgW#7[+%Uڹo}N'"T?zO*o?3S[}.xfdwr#J秽]ZKEhQ{$3t]ʭ App6dqt'7^*o?aAxfX- JI)L+c;^]NSl#yonG8s~(/7^*o?sVzslMav/&G w2~OӞ: yn~O=6"0URNci8 fɌcndDVm?_Oj{7ҕAt]@{dԍ4.j 3Vi=ʶ$#qWտ筯&wiF{n#3AjGWp$~"ZRuy Ա̨"d,?5pWD6տ筯&F5okj+&6?ہ G^EL MP$ -fl;ל :f;~bf1[_Mj?];~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awzjYWjүͿ']l\+Ura=OtǿX oK JjrQ]Ao$XUw݂xʎU_1ߝ_]h2,l9zt҅)%JRrZ!]ϨLJ?п}+wŏ?ޓe'E}SO3ΫI]x@-]G$fGhcOR+o꾧N2λ8URmpbvDmh=Csu=k-?+Ϻ: +[.Yn8ƃg iҍwDo:5}=ʠs[ZtQE;~9n$B)}vv\i5_~}^v+=?/oQe>| =;3(߲F_ڮf{e_~}{U,lO~}oϣjWoϣ/oQW`=?/oQe>| =gQ^'e>| ?ѿG]MM>UK7@tu$ϧ@fO+߲F_g*|q{o$2"AR9Rkk`-ȧ-'ωJ.9|FtiA=HCJĻY@*I@ڹފƇ c=thzI_oL_Dt Q%t6t_K&rs$ __;VbgV2*uNOOO=_X#G?Qߔ W5{UG?Qߔ ?cx~)؏ȇ3ڨ?Q O^<D>Ex,o?X##!+?Y IG" JOX#G?Qߔ ?GCQW_GDWG~S(?SW?G_gdAE^K O7?Gx?}j?=k"(ȃ_X#G?Qߔ ?OCQW_GDWG~S(?Q?"ZZȃ? "7?G,o?zDQG?Qߔ ?cx~)ȇ֣3ֿ "?ȯ%?Q O_<D>dAEy/,o?X#'!+??ȣ"+cx~)G~S(W?G_gdAE^K O7?Gx?}j?=k"(Ƀ_X#G?Qߔ ?OCQW1YGU0+ſcx~)G~S)ȇ3gWR$dSzaE} xғWտ朹 endstream endobj 1269 0 obj << /D [1267 0 R /XYZ 71 757.862 null] >> endobj 1270 0 obj << /D [1267 0 R /XYZ 248.128 575.606 null] >> endobj 1271 0 obj << /D [1267 0 R /XYZ 252.556 351.2 null] >> endobj 1272 0 obj << /D [1267 0 R /XYZ 213.13 100.543 null] >> endobj 1266 0 obj << /Font << /F28 123 0 R /F31 125 0 R >> /XObject << /Im15 1248 0 R /Im16 1249 0 R /Im17 1250 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1280 0 obj << /Length 3142 /Filter /FlateDecode >> stream xZ[~_!BR);El7E-jdɑ䝺禫d[Cx98ʹL^y;~zA<܇UmZ8q}~|d5j˕V/.+2d23^OwVVvb^bg{Q&#:9Ap۝AhYvj!KРVcV2b/|rItm|=2r&! EQ4p=>}=fL!#"]lǴ͕)+?o^3}_LhQ 0$^g0V߫PWtsi|[a׸KmKaU\\6$<ɶ8/1rK96p%ä85SU?Vsm^@R9ENi.]Bv SQܺiGCY2αHZOƌs*fA )[ Rl. 9B>6mVZE ummyeW+ᡶUW}wnH_[۲ge+vU)n Z Xhv׹m]]ʝJ?vyv i$,m>avdAG/ ZGdq2" [+sgbǶQzU(ވCa&{Svw70jYё 8;R_1oF%h8AQD[dFC r^t̎ku~c"} TaX&3F>€4D aCxd 0G6LЉ^z DZnLa7Ya~X۶u.I-iGsζ~a@ ҖBہc"ohp/(^tXgfvd?p཯1ԩIVf x 7좱FQgC n[,`b+ D^h9y6wTY͏"LrM&ҩTgh8G3#2ĴtL{Hd. (!$68nٹ1#tˌ',H|{}[{X]Tz+JޤuSn c :.0B\AR%hVOhr l]Jv6.@r{P .$y"hNd@Dn{rEqRŝlt؛:f#+ 7 bHq:'?/xa)[T[۲t>ߎƪ5`I{LV|ųPB O'XXG.n1O=X;iDO, r-j%lHzU$r3qCG!/c=+?~]xɱ%^t8@">RpvƠygruco34-[nr+}됝(ϯtIR3qo4p0Hzt^SA38 "?z&e*sVLpgfƞ,Ғ@U gU,5/+@!Q8slfdVx`-cg!6!k7@ s)tZc/ 5lYz&d ;Ns%0p4\c%߽twPN1p52t$=j! 5?{ &Έ?.Amt>>{GJ-9ZY PTPsf&V-jYZiDpS8ypm=.Myyt+?Wx,w {m2ΖLگʶ~Y^N=[7=L{NwoQ,/Ϳ>](\ة>1iiLʵ_h-O,*ִ6~ GzN*$0=$ &`$y E3yNbOqϯ!pPz bF*+=|Y"@)%6)#5)oWQm;/=*8bC?>c&-׵lW*^2KR3Ql^5ErdAlhE|NkkH,!QHe;Z掿=_ԄbCf49\x\7=FK&41h!EljI`7Y,8T_>vB1]ҭb{-ؖ&zϵn\,`8@^1`NjjRZM/B Jo endstream endobj 1279 0 obj << /Type /Page /Contents 1280 0 R /Resources 1278 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R /Annots [ 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R ] >> endobj 1273 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 503.917 123.467 514.702] /A << /S /GoTo /D (term-group) >> >> endobj 1274 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 487.902 115.606 496.43] /A << /S /GoTo /D (term-item) >> >> endobj 1275 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 469.97 116.941 478.498] /A << /S /GoTo /D (term-29) >> >> endobj 1276 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.275 390.224 213.739 402.717] /A << /S /GoTo /D (Hfootnote.26) >> >> endobj 1277 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.096 378.269 372.56 390.762] /A << /S /GoTo /D (Hfootnote.27) >> >> endobj 1281 0 obj << /D [1279 0 R /XYZ 71 757.862 null] >> endobj 1282 0 obj << /D [1279 0 R /XYZ 72 720 null] >> endobj 1283 0 obj << /D [1279 0 R /XYZ 280.546 654.843 null] >> endobj 1284 0 obj << /D [1279 0 R /XYZ 72 567.018 null] >> endobj 1285 0 obj << /D [1279 0 R /XYZ 72 269.686 null] >> endobj 1286 0 obj << /D [1279 0 R /XYZ 389.915 215.597 null] >> endobj 1287 0 obj << /D [1279 0 R /XYZ 72 199.503 null] >> endobj 1288 0 obj << /D [1279 0 R /XYZ 86.346 104.091 null] >> endobj 1289 0 obj << /D [1279 0 R /XYZ 86.346 94.386 null] >> endobj 1278 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R /F65 185 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1292 0 obj << /Length 1585 /Filter /FlateDecode >> stream xZmo6_A`*17Tk$k}XKWj,DJ1ْu!I1x{(Fyi@2CRBcpO^q7EK 'g:D"cis}CaTE`Ev>}&h@+3Fr]vimҍ@x4NwJnr2Ӷ Jl9][CgHn9-^9ug7&9tO oNtm:Cii4^ OTF+Yn>DFUU2_mi_ueBx-e~&G3ෳn,Gh`rj&guىFޥv};"e=Ib= uZXFZ(tmoq:y +zMrnG62w9A0Zw`uQJpU ҏi!Z.3φhD7i#M伾jAeTSj"P` ⋯n%Rd'\]{3 物qoiHhgi 3 \ S^怛A(H4 ZXD4'oΠ 7 ΋E|3/]Fe [-f0 M- .2?=.&-fDsu4`B< a`gUj ǀZČId&՞O~URNrj8TaAA5K{΢%_Wn<ZC6}3)5CSc<v5߫tƚo2ڧ{6Qv|гGa|ldgayojmN.q?`7[2NMfn@я.JlȮv\0L)+Fq$~wiŸ*xym2I/'E/ endstream endobj 1291 0 obj << /Type /Page /Contents 1292 0 R /Resources 1290 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R >> endobj 1293 0 obj << /D [1291 0 R /XYZ 71 757.862 null] >> endobj 1294 0 obj << /D [1291 0 R /XYZ 182.525 485.304 null] >> endobj 1295 0 obj << /D [1291 0 R /XYZ 72 471.267 null] >> endobj 1290 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F65 185 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1305 0 obj << /Length 3222 /Filter /FlateDecode >> stream x]}>ΊHJtE\ۻ-^6C\hk%GP+ɾZ !9盎Ex}ۛ/_|QDzq{PY)Ȓ D?+) xi"rh,aA9m Pqg(KS!DX-=G"=m} }nW* B߿,]ޡMAt[,ثviW:E V0:z][\/ዌS2%,Sո=\ZtєtyhZ9܄cwCT$YgsT,A5 +-ǎ.-"=)HzK": mrJ%]O 6dqLjiH/ĺ 9!>QvB%Ë[2-mds3* Ȟ523 7h|Ѓu ~F`x8uFT 'MfynO^!vgmg\_>3Gsf#=:$,@?(jha!s|bj-٪i+p M_Ɔ Ss%ٵZiPhъ ]VųGHfn?x<}8v${5}9Í4OjSzW4 4\SPK~53J1ajʞ"Q!t7hԷMzٓlOA)" yI2^\ U4s[*1ȓдL__aSDpjf(" "-Lu0Դ㩂2 iB7Zɵhd[Fs.0:rg{"t&ioW* U Ϲ+x|q$ 0&~ }v!N;(CT"޼m~ߍ Wo3^\(!)L¶ϋ,=~?I|Ydt(ܙp75` Bh wT\y_1e^9 -uir弙d$6=IY{)#uÓ54Ѹ7􆩈TbX'U1'WX{+L{WOz{,%0vOٰM2 !e=/}>蘪oK U 0`4%Q8桁VvSۻ+R AXvx dJ DG}2 (]w=Xcu !t:pI*N-2F\y0uݵ;[ji-NaW.-X}u<zYa`g!|Ʋ`coZȏ:BлS^_ʱ{1tJ`^k7Mqei ohFD};ݶE>=K.웰ʩL^/~\u.xL[NV>MD*︜@)M!$:xVOzbh=yD:0@gy9 J+ewa ^?U:Yh5QmOz-`~\@\zYC.%>y,R ,`eH)ȉ3uOp\pҗIL[*NfNfr읃,2,M4HqGr'א?z Fi^g4K6EnidJAzJl?3ly|sQ OB[Y؋]:V +c[yˎc=rx^}خǟ׺mbh~yևx ?LO(LˇJe9U^XA"It |ib)P({>d4(."I&*y+-cOoE"p_z\%XdOӗ.;o endstream endobj 1304 0 obj << /Type /Page /Contents 1305 0 R /Resources 1303 0 R /MediaBox [0 0 612 792] /Parent 1311 0 R /Annots [ 1296 0 R 1297 0 R 1307 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R ] >> endobj 1296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [419.05 671.019 451.249 681.923] /Subtype/Link/A<> >> endobj 1297 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [455.541 629.176 540.996 640.08] /A << /S /GoTo /D (extra-trait-editor-factories) >> >> endobj 1307 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 617.34 135.342 628.124] /A << /S /GoTo /D (extra-trait-editor-factories) >> >> endobj 1298 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [143.935 587.333 177.788 598.346] /Subtype/Link/A<> >> endobj 1299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [226.983 575.377 260.836 586.391] /Subtype/Link/A<> >> endobj 1300 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [481.321 346.091 538.506 356.995] /A << /S /GoTo /D (term-editor-factory) >> >> endobj 1301 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.205 334.136 405.457 345.04] /A << /S /GoTo /D (term-trait-type) >> >> endobj 1302 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.548 322.181 490.174 333.085] /A << /S /GoTo /D (term-predefined-trait-type) >> >> endobj 1306 0 obj << /D [1304 0 R /XYZ 71 757.862 null] >> endobj 1308 0 obj << /D [1304 0 R /XYZ 72 534.531 null] >> endobj 895 0 obj << /D [1304 0 R /XYZ 72 534.531 null] >> endobj 85 0 obj << /D [1304 0 R /XYZ 72 519.521 null] >> endobj 1309 0 obj << /D [1304 0 R /XYZ 298.169 283.491 null] >> endobj 1310 0 obj << /D [1304 0 R /XYZ 72 267.397 null] >> endobj 1303 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1325 0 obj << /Length 2180 /Filter /FlateDecode >> stream xYs۸_R3ILuٺ!dcB*I],@sdb|._xpɻs Hd,A*4X*.gtl., ~Ϋ./ą.ujI&f-:9[DWA9V0SYȂ;kIm\r"u@IP,ɓS`F&d2PI$ -KRG`O`\!ӈ-nt>JDEb<!B#oρb82lc [:[,X OxOf@<<3pO\`['D9 WcDth4CCkӴ|a pY=e=-#b5Xz54__ttkvѫϷ5Lp+.i8a( KSorOWC{CpWtI# $?B1bߛ.7)邔9UZ^.`Ι-C:˯] ]s}Сeͳ42&dS1Z]?SƋwPqD~P#4NQDQ‹$$X_XdvPh퇍Ȃ@4Ht>ëK,Rd^<tuU67W;SW4_GYjrw<4+(bpۡCFuISVThmt$ޫ;LMq/ #+>d n࠿ŀ赮t? Ib@g" ߍt!`- ;c[IagthYt|APͨ۹_YEuIq.D(Կ#Ԍ(ĽZh"w?0&x ')58FzD<mK  ˝Ɂ7ii.ǽ4e?g`x읺5> ( A>ZòԌɷ_PoL۞m۴}.ʺϟ%jRb`7` VQkɤa%E,KQ(|ǐK3Br0Ӱz?GGX̠d O9 C sSL*`K`15u.ctHE6/SN(w+䎞 BػEn?fh?q.+[Ш/y36Gc %8N+=?g .ֲ#1uM0} ˙MPgz̢0KU"b ʿ1 J^;]U5Ġ'eWTT1q87+ Y%/}n{وTjsGk1 _X=%F(ۗJOU9˒Gnr,(>!cTײaw/JI1Wb5quD!:cm7P?zP!hZiS)0HL]]ؗc@G)e܋l?MQ?9r e wMعAUJvcTo|"_,t8ѐaLsW]XQ &V+́V1O ;9BĽGH}wvv> endobj 1316 0 obj << /Type /XObject /Subtype /Image /Width 264 /Height 127 /BitsPerComponent 8 /Length 9506 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Wpm`V/oel8!Yr7any8ش mydU&CJc p3:5CNe=tODs־G-sɣFy.YSOews/J/B( Ҽ(iڕ 6m&ߺ3̀hcv6*.7'|,GoǎFzeFN-gY$ҋ|УJ/Bze޵ l:ǒ@ ]ڽ啭s[<7r+r3U)EM';*3j2/( ?;o*h+!DlP*I"DG-ة$ZKO jG@\\G Ok/z+H;o(ҋ|Щ`qXwiV8d#Ś#b \: YI.bL1c'  =ij?̻oװ1qϝi>vVKAc#~4rm4bH6q}ӏg* kV=gFd9Ib2 5%mr@Y]?八"Ӌ|УN/BhzI#,"U$eXFr;~+x8MsGTc(8=ߡG_m~fbUrrqϝi>vVf(9M/8 ?K_+7vSOJ/B( vSr8]6k'E$!;##>m5(k5[zi1s}'8:WnwRoYVmlrpq<o6FU&l~+$S|8w\ۚn=t54uibb& k:؊Z۵g,j[Z Kۨ,bȨvXC3=_鶏$*&TKp.: Ȯ 5'VWI?Dje? 'ZKZR5cϡӅ;|Q K5l]QBc2;bNMމa,wjnx9G 3Hqsk?KᏉiO"[/J4o?÷!GSub ObS7xlqc 7bB@pr26hYtko'WEET, E 0JoV$/Q ğ?~+S(k_OE'*ޗ$(P)y4y5¯'O"U$/IQ>Rj5u-Ÿ*DpCy8{^&Լ7tv[y͝6oN< $ó2]+:eO&BXUt_bbњZyΕYǑ;~q-m+viGy/,R+EC,;cVbHzT7`g^*x3Ť29Kݘ0s\Y]HnK| ӕw1BiY "5(%d>a^}r8s/1PIIs 4",|UϠiM^5w**FjF}bmĖUEQX|H uMEI`R2dcg>o_ďt_b>Y;q-OwEO{ ^}y+Es>3Z>=𦻣gT.Y`QnH]zʊ"0J\^G՛^F۷ SuW E9iG]|iS!EWWoź-ILjV?k- pLsU4u(i&խ-#LI"JÒ!B隷,Ʀl./@薚IsYk%{e12ȅf ω6Uy"fvGT1X1}J@vt 5  |c2:)Fi&kbMgndIa,cڀ@,.I "b<^}ZԮ5-nn-ǔE̚\a_/n_1;\@urhjyνwh#ZXyUD2F3e2yCs⋛@xuYY[B2W>N3Fj̺LMX\_Y#D8\+ 7dcQ[ m`h^n WpaN2>jhJ1n3ΩVn5 }i?~5o}^ZEs}f >X3WzR,O9I 6ϹPǗ,p7<R>6*v䍷m9_`WO"E9+9QsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T ʓzԿ6vke1gA۹Aw֬a[RљGc?ZooP8j+m+V@$.삂TrKH'AtKqlm=W?G3~]z_kOUV'AtaGkOUQ_baGAt{_kOUV'AtaGkOUQ_baGAt{_kOUV'AtaGkOUQ_baGAt{_kOUV'AtaGG7 Od 9eeiMwsOE}VSY[E9iG]p SuW=N'bQEp6wD}=TKi Br2t#}od0隡S%R7`6˅>_ @)GIj~Y[IulhTD|sU;E˦ǣa3omD%1~U^0D p!d*7*=@%W#EcU6ExZq吾iIڳDxdKv-sy"Ms*Cn񒷲yJL  &7;Iqkp>Z*%lT9PP@:T芉aj*TXTv騣g'ZG'ZG9\Qm7dt8ќ랧֭OW6[D*92<GjU#0L@x_Z\ZCi\KHKw(lFzVEmoI1(HB(vפThZ4kQmݖ;p0:ҮZFi!nFc`Hy16T`V#Fb9Z]ss [N"8Lh2CanC0EY;fm<WYm1f m'JKSW[WheYZgllT qoq2zm\,i}=G?Ə'ms>ОYQǞt!s2QQ|lO诬u¯VpV#3j~Ҿq5[<'ؙ2:C#KTqcZZ]]h?hKUs ܃L23\x |UƎ-p/XLWtw_6^~?.Up}RQYGcijܗloq F \nw,!َ2 ^.j-kIam~PKi7YJ|O (m@ ?+Og~13oS?65o Ϩ\Ii^ZQأI Y[FQS>ME,$142Iqne1*2G&s/oI_m'"o~10>#CSx~]mYOI䶑KrwHY!Vѐ[sk_'Rujئ¹#[1מQ P)d?)3x^KMUa]Z5"XCfFjόAl2Aawogl@\1 Ͷ_pjm@ ?+ͷ$ŸN7?}biL_iϨ %,(,ፗ8]у>-I KE,do_6 ?|O E/g~11f\|-կ~ݭ^ŠCo. Kq iQQpOc -H`l4M1_6 ?|O *Ujܟ_X{m'?g~11fWQ P('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?6>6ȏ'W㟉AM54Ƶ+:ͼͿ8VҊ,Ju ^9jIJm endstream endobj 1317 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [521.988 377.407 540.996 388.31] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1328 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 367.489 107.118 376.355] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1318 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [112.154 241.47 225.365 252.374] /A << /S /GoTo /D (basic-trait-editor-factories) >> >> endobj 1319 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.386 241.47 336.767 252.374] /A << /S /GoTo /D (advanced-trait-editors) >> >> endobj 1320 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.273 159.821 349.944 168.688] /A << /S /GoTo /D (extra-trait-editor-factories) >> >> endobj 1326 0 obj << /D [1324 0 R /XYZ 71 757.862 null] >> endobj 1327 0 obj << /D [1324 0 R /XYZ 249.478 472.38 null] >> endobj 1329 0 obj << /D [1324 0 R /XYZ 72 312.649 null] >> endobj 1330 0 obj << /D [1324 0 R /XYZ 72 298.712 null] >> endobj 1323 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R >> /XObject << /Im18 1316 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1342 0 obj << /Length 3346 /Filter /FlateDecode >> stream xk۶ ~4C_CyLisf:I&I;Tlw J'۹SfN X,>/|s* Q*n"%B(30nOu򕦟7]٬e:3ֶ- %o^\Jq$L*FdqmvW?G[&.蝃E&᷎~UrQd:RIBm~_Ǫ'94l5Q(3jnSs{-'ݗ̍%z,/p)"'n)h'Li?2$ &g7$7'CV!^VgݾnR*i!čD c7q6@~=(S)ܬ^Lr!]ݮ؉ 7`6hfݏ,5vk_y.7Œ[kmB^@5Br"3nԷeӻshdu7D HTg Nn).;۸C/44*NF s{vvF ?!t黶L2RtfIz5Gl2ж57IA̮-[ b@tQ͖qZ]%z ~E /ʉ"KGϚt{ԚwrlF|>hXނuo6yS8OeFV&B&A"\,r1efWS5|ai7X8S/dD> iUKVƾ ,UtF6TEL*ӑiW] ; /V Kibcœ2"vӭ稟v/crXzґ) Jf \\ Yp;@dx\P9tW>h)| K5˯5/Q q]z{3QU]0m]$W8}΅;DyHn\dIO9–b~W({D-c$JT֕_}äOsZ19au^7= zZU}zwQ/J䫉PFd{|qHF;W|H9)/FM{zǼ<'CۆaLvʻ5n%Η~9DZC(kRbmvܶO_3Q{f*Z^#hH |cJ1Ӄ0aX>̥Hm w2τ,p v(̿7K=etA0)d5}f[j;צrL1x5RXpQ'.c W|m#[T--J?RW-RrT U )aAGoi ]5Κ 8[2 endstream endobj 1341 0 obj << /Type /Page /Contents 1342 0 R /Resources 1340 0 R /MediaBox [0 0 612 792] /Parent 1311 0 R /Annots [ 1321 0 R 1322 0 R 1333 0 R 1334 0 R 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R ] >> endobj 1321 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [108.372 706.884 189.965 717.788] /A << /S /GoTo /D (term-predefined-trait-type) >> >> endobj 1322 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [313.978 694.929 323.443 707.422] /A << /S /GoTo /D (Hfootnote.28) >> >> endobj 1333 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.07 605.265 327.529 616.169] /A << /S /GoTo /D (initializing-editors) >> >> endobj 1334 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.695 309.434 343.282 320.338] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 1335 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [483.961 249.659 504.065 260.563] /A << /S /GoTo /D (term-29) >> >> endobj 1336 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.019 239.741 154.37 248.607] /A << /S /GoTo /D (term-model) >> >> endobj 1337 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [464.906 219.771 485.011 230.784] /A << /S /GoTo /D (term-29) >> >> endobj 1338 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.815 209.853 149.439 218.719] /A << /S /GoTo /D (term-controller) >> >> endobj 1339 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.572 189.883 352.814 200.787] /A << /S /GoTo /D (term-mvc) >> >> endobj 1343 0 obj << /D [1341 0 R /XYZ 71 757.862 null] >> endobj 1344 0 obj << /D [1341 0 R /XYZ 255.141 513.596 null] >> endobj 1345 0 obj << /D [1341 0 R /XYZ 239.321 407.524 null] >> endobj 1346 0 obj << /D [1341 0 R /XYZ 72 190.879 null] >> endobj 1347 0 obj << /D [1341 0 R /XYZ 72 177.245 null] >> endobj 1348 0 obj << /D [1341 0 R /XYZ 86.346 81.465 null] >> endobj 1340 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1357 0 obj << /Length 2535 /Filter /FlateDecode >> stream x]oܸݿB^HtE_rMRZwqڇ$hi-F+RlwCj:( 93or6JϮ/~x˨J6z}q^+4Vjhjk5ydۍlQu;©~,̂KZ?N4a4C~J`Jhn矢S^4Pb2eRi?!E%a!h)tmpn&4/dK ,N:ng0X (83§3#d>-M&["d{}聡 R<1*zy9*S-swAШ msxaQRGOg<&M׽'tݡW y yKL0niI(eSwTcHz1oEqp&g8pp j\YwF8 ꡊJ#pߵGcC]zS "^;6WH\7dooymdURN9ﵥtsW11H_TgAxϒrѢAՁ￰l#ɘA/ ܺөM[SԹ=j-i5t4޸U,V~vlk,?t֚@RyREf=4RTvay<;1'is V,CМRW>x%߇IhK\O߯h ؀r}nاЃ~y`S.@-ᤋ4qz>JFo )*杘R,Ua=q|rڱ b rjh)kj"r@g?VhJ Xr.) ~`eH@B AB^۱B!s|/˧qʏmR8iIY$Ǜ^gnO 4ԍ-ew΂ٝ 7:6!2U J4!O62apk)\*eqք9gLd,`+.!Ol\5j%| ^+9/oAjr4RCXC\ ;7zFti[kkc7GOzsb=WC~og%ιb!KK|oک~h@w/Gs 4 endstream endobj 1356 0 obj << /Type /Page /Contents 1357 0 R /Resources 1355 0 R /MediaBox [0 0 612 792] /Parent 1311 0 R /Annots [ 1349 0 R 1350 0 R 1351 0 R ] >> endobj 1352 0 obj << /Type /XObject /Subtype /Image /Width 296 /Height 43 /BitsPerComponent 8 /Length 4466 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222+(" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??/·^džiLy$&gcI+I5ŏ/m~A|lXe M4̑X/j $_ KTtx18ڦNh_Kzo:>Qc_Kzo9X;D$=G䞛ǫy8̒:(f8zNG?ÿIOMԟKzo5a"n^,56݄ÿIOMԿKzo:.-=Y Z2DpH?43?Ձĵu4$'?;D$=Y. :?|EOHusm P(}fsK?ÿIOMgw/IzbiX4b>K$'?;D$=Y4Xw?G1?Y_KzoXw?G,M;xk?hgw/Iz%=7Vw,M;xk?&<5Q Oiw4;D$=G䞛ǫ;&<5Q N('C4?Kzo?ÿIOM՝ N( cG}C]%=7Q$' cGӿ熱 >P.䞛Ǩ_gӿ熱 ?biXP(}fsG?ÿIOMgw/IzbiX4b>K$'?:䞛Ǫ 3ƶ:kajĂ0,xx|Em895.Y+2V2WG9$'u,lnAboehb{ MɃ>X۵m#2s8w)ݤ<Ř2eSuֳ' s; ?~&V4ŕc 4XC:y8*ǎxW_)0' *E-r &Kd]_?xkV)j#'Tat-|HZL03HygcR]WX4$Z } qʂr19=sڴڃze%RZ\\Q r++gG\JYv9ݑ?^3^s.x$Fި''C{OWeG'9ivi3y(eV9vxb:@MQ!5l`̃s?} p\̗B)W>W(G}Vx~RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RxKG #WzWQL,Ld| rҨx7Mu/`<HQۚ9${n+qUj)'4e٘?lXȦ;@8cޭ!FO$o2ʲYk99S|s.wUňەҋW'%Uj(*E5xI熿kΞ/`Ik`E1D6_6|_ޙ[XY]I )HPXtHj'k_(?Nֿ$W~!Vn]a+7Sȇs]ckYEں o?J  ?%oAs]ckYEں o?J  ?%oAs]ckYEں o?J  ?%o Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"WC'5 (,yبSm4cf$־utCI[9P\ğ>7i= H9=x4W3[|GM_Vծ>}>d7m(pQT# endstream endobj 1353 0 obj << /Type /XObject /Subtype /Image /Width 296 /Height 95 /BitsPerComponent 8 /Length 5823 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222_(" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??/·^džiLy$&gcI+I5ŏ/m~A|lXe M4̑X/j $_ KT4|VI N<ڦN$'?;D$=]jV =A.@:⣝c_Kzo9X;D$=G䞛ǫhybfw8UŽv9%=7Rgw/Ize #$jYzXSSmOEsO'䞛ǫʈlaˌMfUgw/Iz%=7WbtUxDR:m89Ta)hcO:Rj67_ 71M=&f,mڶ2q`8*j~gbu>cup- I^.mEm LY_P0cKh^1h瓂xIuC<R+-Ν bid{U@gk5xI熿k_1xӏsG;Yjz HFm6'UYI^OLOcBWc[# zz(r}O50sڴwojmgI-D~XrTrq¹ɼAHkL"GhMHҠy5~Hޕ=pkC-ڝnܬo% [\>\ftF#`;HTߍsuB㞔9iI;W/?.8&fDvXx/ՌV/av}K7Dm )Y!Kfb\ɭKo\Con$ ozs=*jO2#JQ `g𸯁zU:=>kڅ޷-$s姻EBbId0kwj/ 쪱b44FL @S\.;Ȱq _\wȯϽQJz/WG.K/QJ=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=n\av`c"$8=+B '饕o 8f;5֖]YgQA%9Oq") >I!FO$1>%Ȳ+ *AW+3i65.2\MNgE'%Uj(*E5nyZ襨4Kq.ݏF:ӕOO'UZ<=!V?"CzʮQKbT}CU(Ar؇?bUr9P\!=\_/"K~1]s697J횺`nc5PJ2Lڱ%p.,g ː (qAKDn{i#L[9gMb륚yS/ Zx]PҘ8ʉYLcm̛~E#;g<5:,cǾG'K*9` ”ef)a՛.? c~VZR?Ox?hէ>.? c~VZR?Ox?hէ>.? c~VZR?Ox?hէ>.? c~VZR?Ox?hէ>.ujW+\tA@^vc n.8[-t:Ww$Ŀ ME;y_]覢N' *E-?+ZO'UZ<=!V?"(((\־|+=wem'4.#-2OzF=urZXO(/W{M2{tny+1pUֹ",^7XHhˀZI6y ay#Yy׏5x=G뢴 X涒9 u AR#OEPEPEPEPEPEPEPEPEPEP^{ ~WWw_wTxIu9 J{ NoϨ+QvWws:G' ?k?cTWws:G' ?k?cTWws:G' ?k?cT/'LU(\T.;=uki1uGF-;%eG G G X*>VaӌIuη|@G$mefmNO> >> endobj 1350 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [110.844 542.234 190.325 553.018] /A << /S /GoTo /D (using-editor-styles) >> >> endobj 1351 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.48 444.036 442.451 454.94] /A << /S /GoTo /D (basic-trait-editor-factories) >> >> endobj 1358 0 obj << /D [1356 0 R /XYZ 71 757.862 null] >> endobj 1359 0 obj << /D [1356 0 R /XYZ 228.86 663.271 null] >> endobj 1360 0 obj << /D [1356 0 R /XYZ 72 647.177 null] >> endobj 1361 0 obj << /D [1356 0 R /XYZ 72 543.23 null] >> endobj 1362 0 obj << /D [1356 0 R /XYZ 72 529.293 null] >> endobj 1363 0 obj << /D [1356 0 R /XYZ 240.556 354.999 null] >> endobj 1364 0 obj << /D [1356 0 R /XYZ 218.908 217.831 null] >> endobj 1365 0 obj << /D [1356 0 R /XYZ 72 159.894 null] >> endobj 1355 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im19 1352 0 R /Im20 1353 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1375 0 obj << /Length 2149 /Filter /FlateDecode >> stream xڭY[6~?UFH`7ɤNvs;n9,O.­םJ9bQ>Kӝgba&xN=Z q&R3 o%#).cϐK̿'4, 1HFF՛T2%r僡󔪘疖v!~vAoe 7l'I؄D[#y?n4bUti7f,-`=KcT{T8Cӳbqk>0*@OǾ[0Wtf|=5;T oDGz5;fna箜լvy;aR١G*%g*W {V=ixxFC*A dY9P/kzDԐ2`ɔs% \̰v.xYó mP| AtGm@|_`+9{5u5TƤo D'(ơgk٢s\ ] #h$?7Ď Hh +:On[$T۝% +Ezђ[!sW=M_R phSP J^gT5-RӜυ˔k`jxc :z@s XxN J2.n5+ffIkS +9iK}iuFH8sFl6l硯Ct{B\Iӕ0K5E?6<=Am ;]zbP-NkF G ;X,+K1Yzo>Q4V,ړ1Ûq^7 fْil> 7KKhOK³[x~Ru6$>{$6*7a֛=BĀ_{)2> endobj 1354 0 obj << /Type /XObject /Subtype /Image /Width 297 /Height 70 /BitsPerComponent 8 /Length 5415 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222F)" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Aloou;ޱwKQ@T(T :TZD\K3%qRLldu5WR٪Ccn7ep1 OZo种j+>rr~o种j7ֵ]esOQOzx֫p6< OZuQ9?7ֵG?oZ=r~o种j7ֵ]es'Ozx֨|'=¤6O֪jVy!;qԒ)^2bmcPTMB+7t7Ҵ5L{Їpwc'|zΛ֊kkF'Ӹ>[^ͫ$p ̪as֎VœΗJԭ*Q,($NJ?t$yfhXB^@J"b8]FmB{}9Zy:JUv2;M.dk2 Űʮ|ܶ{TY\O4pk\щ`g0vɏC+LWDFGטޓ]6$-B t3*.TH7^+ӎ2vI(3;Uibo.I\|f[vK fgxS{TΖz[۴pAR}35?fWM]L_9ezJOΕ*] ^a02tR*槩h-y}' “f =I&-VPk7FG:4w6r],4ʈz?_I[`5_G4d vr[׶=+#Cj_F1>B"bUߠ'qP[K|ƖbhJP+F:cHG^R^ 1 bL21`0`Eg$sw ^DDV8TO$+ny>="qsk9c(`!G\zԕ.%Р{OA gx7)<)sZ }k K73}v9T[IfmeśrpB9ִՓ-!Pw8IWR=k>i6Mu)#k&J;/V۵zb'Kz D"Xq\ͷGZP?wm 'PH ph\hۮu9[ehƠd^`T.|QZY\x[`,cAzsTuff-Au`zÚ#_Cy@Jϖql5)"L2R A"2B#PʽdjaY^GsZO w4㸙{OU'}(IZip@K)-#ZIlq3:E{{A1m9eF0G{A?&dmOQy N}GQJ@d_-|jNI\FZm  o,GFьSp84"sE>RnREӮn~5}x}+ uJ1}k,B~h-<ر}JQNkD}™`2KVLZ>pjmc/krH\]=:UkivdƥYU@ 55O'=i+W &L] qx96:J٠(c&;W jc{[`˒XdE_j`;TY jzlBhgq#ѹ8#8CjH iT9 GXמ'f"宖lyam]=ԺvSٴЂ$l3Nv(qǧj7;w&l!1yaY" #goNZfXk->r*OD˸dp@4j9'QEƩiV:[ ǦGQjka4!;x(DFJ1֛E }M.nF4PEP0WF/ NO#zb;qL'%Uj*E5|A[}WR٪Ccn߃sa]KKf]S[tzecV^_ڮ-8Fql4ttV&E?6 /V6(ݢ6 /Q ?g>/*EamO_o Ϣ|_UvjwHy!e\u+7o Ϣ|_UxS}⩫q=Q]q,y yd }1\%υ#ۗVHmќ ̫ۓO _ѷ9u(݆֊HS*_鏽ZJDgBcADί]V&B1ƴЯti fEy6 ҏ3_6q݇@1]o&E?6 /Vwe$wκ%MoQ]Iyʕyǘy5- ?g>/*M)C>T;7h/M)C>TmO_!Xy?*1;~XtѧuHO*7_:UNj|w Aq=X}=UJ=˂dnO8Oa[Fi%u3qw2|_-CuX:5ķ\XO\il#$Vn;Jg~譯M)_‡f};ַ@"g4wˌ̭!c`*8?hdk?(0y@v961 >TmO_V&E?6 /R+ o Ϣ|_UxS}⨰V&E?6 /Q`7h/M)C>TmO_nX_xS}Ÿ3EݬWF/ NO#6 /U9{υMJ}Mཞ2jN]3(` ~c 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQEtO oj<3nONQ@ endstream endobj 1367 0 obj << /Type /XObject /Subtype /Image /Width 294 /Height 33 /BitsPerComponent 8 /Length 2733 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222!&" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?+7%5}:jN ƥe-D#x R{J$-nZOBj+u PEF>EmQG,{_#R{Oo"#R{Oo"=^/Ͻ7GϽ7[TQsԿԿ(`׹j_i Qj_i Vrǰk5/(5/+j9c5bCyCE1|K}?!ڟ٢b8uF=륪ٖm~+jJ\܊ՙ|+kL#,NISS'{>Ҿ _%s`RoQn:Ia>6K Z17n?ZTGU9ʫܪrroSA7JZmۿb݌gMQ̰oGeߥ Ʀ&U~7/> fXύ_2|mgΆ翳,?/Qa>6Žx\eߥ ?,?/Q:+̰oGeߥ 9gCEsٖm~(̰oG6Ks,Ά翳,?/Qa>6Žx\eߥ ?,?/Qg_F$qG b8QE_ŠkMC袊c ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (? endstream endobj 1368 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [374.286 325.997 441.789 337.01] /A << /S /GoTo /D (the-item-object) >> >> endobj 1369 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.977 266.221 540.996 277.235] /A << /S /GoTo /D (the-item-object) >> >> endobj 1383 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 254.266 124.642 265.17] /A << /S /GoTo /D (the-item-object) >> >> endobj 1376 0 obj << /D [1374 0 R /XYZ 71 757.862 null] >> endobj 1377 0 obj << /D [1374 0 R /XYZ 239.171 657.537 null] >> endobj 1378 0 obj << /D [1374 0 R /XYZ 72 543.645 null] >> endobj 1379 0 obj << /D [1374 0 R /XYZ 245.966 442.724 null] >> endobj 1380 0 obj << /D [1374 0 R /XYZ 72 344.926 null] >> endobj 1381 0 obj << /D [1374 0 R /XYZ 72 317.095 null] >> endobj 1382 0 obj << /D [1374 0 R /XYZ 72 287.207 null] >> endobj 1384 0 obj << /D [1374 0 R /XYZ 72 255.262 null] >> endobj 1385 0 obj << /D [1374 0 R /XYZ 72 227.432 null] >> endobj 1386 0 obj << /D [1374 0 R /XYZ 72 193.504 null] >> endobj 1366 0 obj << /D [1374 0 R /XYZ 427.682 123.475 null] >> endobj 1373 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im21 1354 0 R /Im22 1367 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1389 0 obj << /Length 2246 /Filter /FlateDecode >> stream xZ[۶~_i",\I3}HRuf6k9/vƥ%-E*$spMJպs//_\| AID`q4DIymmT6YYU֔r6`D#HP{W/ BF:ΊV)FF TEVw2"zkYae ,edW#o8xfP*ʢReYD>ex#Ab/2-VDP,Møa̼4"2kJyը{YSQk%T+}ZZ̙h{9y-9ų[m^`jeQ@,aM춭Q-MSe]&:A<5s³O6O]j VmV}qpUmkH]ui_?/1 $F s(A6oCwp /(-S[wi3ll [%m[8w5D@Vg8:γZf0K+2nuvc9Z}j(c$J`$moա7봱%*iVCGhڐPƟ):7dԺ i 42_FJ1|<P`AK"IEPL3b^bܶ41hd9OTSq.iZ 8K)QL)]XjNKI^?ug2r aFd.)z$Lc]d5ZZƐ\[clHwa襔R64eMQrȍ*D'J[+H3sCBiv1! KwM"C~+b߶HrV&3xlNXĬ.z>Kr aRTɪy_ c|tmB:OtlKH ׋G.S"dbxild=t'ӈ&_c2I}g/{(4;kܼWVi\E&-ګGLv[֙ޟ}|ڪ/vy.2?Fwr Nl4 8Ͼ,S/I$z8+<i.< <|k[%c9λ' ݪ?l$㦒gI4YT3 ~Cjoց2H);^ҕr.OeTL(afѦ>Kۨѽv`^31nOM֬SCE%l|“Nf3Dǡa1^"IpgdKw.݁joժg45]]~D39R1>KģW -qҎ ȴX<`OU{mBdϟRNZ:y SD?$%X_MN* |ݑ5d_'A endstream endobj 1388 0 obj << /Type /Page /Contents 1389 0 R /Resources 1387 0 R /MediaBox [0 0 612 792] /Parent 1311 0 R /Annots [ 1371 0 R 1372 0 R ] >> endobj 1370 0 obj << /Type /XObject /Subtype /Image /Width 296 /Height 49 /BitsPerComponent 8 /Length 3116 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222221(" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??/·^džiLy$&gcI+I5͏/m~A|lXe M4̑[ȼ?<RDWf;+oo$Roɥ'd4Q_IzoMխuX^Ks*mf)lo/-q A4g.{dY?;D$=K$'h,r`_/䞛ǫ5&QLDe+[%F~e9X;D$=I$'HPI8d9X?;D$=K$'4}^^`4K9cr3Ty*+L nTgI5E8Q#g(b߅lJrZ6(8nnAKgo9+F<ΘH)sa}F{UxK5/"9=`76jfMf(7\F kb!K&Ѽ/@Cw) (((((((((+#UŸHk^5_)a9?w/xIuF;4Vw7=_IO/$h'h__4r0Egcx/ ?WAM.hY+y&o{E;y_]覢~Ѿt<((((((((((((((((((qyVOQ@ endstream endobj 1371 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.749 601.769 212.679 612.673] /A << /S /GoTo /D (contents-of-a-view) >> >> endobj 1372 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.233 601.769 311.228 612.673] /A << /S /GoTo /D (customizing-a-view) >> >> endobj 1390 0 obj << /D [1388 0 R /XYZ 71 757.862 null] >> endobj 1391 0 obj << /D [1388 0 R /XYZ 233.921 673.287 null] >> endobj 1392 0 obj << /D [1388 0 R /XYZ 72 639.25 null] >> endobj 1393 0 obj << /D [1388 0 R /XYZ 72 590.81 null] >> endobj 1394 0 obj << /D [1388 0 R /XYZ 72 560.922 null] >> endobj 1395 0 obj << /D [1388 0 R /XYZ 72 531.034 null] >> endobj 1396 0 obj << /D [1388 0 R /XYZ 376.893 485.37 null] >> endobj 1397 0 obj << /D [1388 0 R /XYZ 72 469.276 null] >> endobj 1387 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /XObject << /Im23 1370 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1401 0 obj << /Length 1970 /Filter /FlateDecode >> stream xڭX[6~?B2P"km.Hޒ-(h%D; eVCoN}D~|(Uȣ]$IiJFu>~\I+cZe,n=S'Y5_n43o^<>IģB*)+"D5ȿ&2zZ(K6ۇ:z/eT%@"i0ai^*'{M,jkR9AQa,cy6,VUFD??Vɤ%wȅ&nu~-?p4j J6)٪`du\s(U *nk!A;,ټ8Ň߬XkHR΀)'T!tL2 OrR%4v13 oȀS\M gIۛ W  &}.w '5 (HnX| ~$W̞c"|<W6b9S){4LkmGJ g)|,~'9Iې|e7>Z$WB'),$w?W}htDx^}_~.+xl:v>,e9tn^Vy_o!'Ƈٍ^whyl~T5Xۙdjx !˥z#M'|y5k [<-P`|sAC@c{KQ8 ^}bLj=̭v9|WJ%g(\7|@Ym]s}P nn ,?_ `K1e_nisGظ^G;*^^P,G)rw |Oh]V( zG_#$'`y!U]^N7Y5 xsI4gv7H;_T0'vee9žW endstream endobj 1400 0 obj << /Type /Page /Contents 1401 0 R /Resources 1399 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R >> endobj 1398 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 129 /BitsPerComponent 8 /Length 10498 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Wpm`V/oel8!Yr7any8ش mydU&CJc p3:5CNe=tODs־G-sɣvQߡZ3xr%O 34DY[n`DAM`<~Kmƛ +*ZB2r~on%r&wKTc,5Hg;o(ҋ|Ч uco kIcá+vQߡZ_ ƤCvyx YNX! g[ZK:4K$1ȒKf0,nZ̮TEߡG_m~3T[qxFYE%X Hʰ wVp推Pqvz3ON/B8 B4;o(Ӌ|ЬQ9Prqϝi>vVf(9M?8 ?;o+3bT_m~QϥLQʻ)ZߡG_k~fbQʻ)Zߡ]7#鴫Y?) bC\=F0varbe81[N$4kQnjYfǧ eX$o:8' R4[T^m~lE9T{'IҠ[j>iCiIb3 )8 kV.-.ݧ֦*%uznO h39^oז\u|6qm^_y-$P),'`;y#9ڻehOk"iXD/mc^~eqddLvvS[Ċ?KKZR5c¡Ӆ;|Q K5l]QBc2;b0mgecv N+٣u OU%GI ğ?Cć^'SI呢ʭw)}yu,[T~|S6WVݛŲ+J$sO8h[xKGQtIOEdfkgcf$ ۸moU_?K°'iO"sڳ%۲'u_VӋۛ].9T-Txo*(Awejw:8 Q\#sGaVGk{?K°'iO"J3U5_|ɜ1M8omM/Zi;_٘q[pN0;v@è^%ږV1Zlʱ\!2sS°'iO"x\EHI0o]UWwmU*2.yoDW!"RL+oY4;$1B2|߼ÐY!N|`%c^Y2 *[((I&9K ğ?2+u5I~#Vו1|Kae`" ME%,H_[+?K°'iO"h8 0PEcR\'{{g ğ??Xx~'Zk3+N3?K°'iO"|A WgG]+֗d(aOE8#ޏ#޻?V$/Q ğ???1_q~EMvI?z__OE8&&?U$/IQ ğ???1_qMwɪ1Ʒp ~ު¯'O"aDvfU %rLBI&+0KծlXl5zw2Mxnm&+;mj\Kq zo?? aW>-Xկ4X6ީn s׊87N{"凫]Y/umpA|~TЬi⽽Co4Hj xOp>l5 i$̎yg7f>9'IW_E]v-Ш^_L?> 9{ u\uxJhݪ7ς)?}AOKnDc?*`}X79ϛ+ͰcVxZ߫oMuMbu䍿) PȰ1Y֌I+晔q8eF'}Ck{oxO.WW;QaBN'zWacZju;~Nd=]8X>QKG\<1&@n $uo>iO{u+zjMw1.<8ʣu293K}rɅ N꠲l-$-bY|#:'xl=)/ϊޤS[j:KFJstZyKKngU,RD_ko܍a>a~S=C@:ޓe ާe|yndqڤ;/]6ȏ'ݖCƿw?sҎ~ȧ7}(뺧T' Q\@QEQEQEWO}TC-d,QY NFP__(N/YEem'W ? `jQY EV_Buo:QfP__(N/YEem'W ? `jQY EV_Buo:QfP__(N/YEem'W ? `jQYG\dZ/fO3^g][ZRM Id9CrLJzv[Seτ)__J:um[P6k&TX%Iv+O"Vu ^Romfhnmuul!s֫4}F1#_LrK$1!]@G؅; SxKk(%i-e72CHmnc½ycqrإgʞMB.9IHHNU;p. e]J"ԯmŪZG33Ϊv䙘W' ht(湚yD+ ŤJ̠F.Te-k427ȗXGebv qٲ8x*U5oReOM.aQZF? ZHwDrKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rK+xB0z֏:y\U##dzewwڵōZf\:WA_G]K]VK+UcwrOA$WfNcjM}h>i,Z_[M$oeA9Ț zf|K/myXMO_J-zk_lE9iG]yu tޥnZ$ƲT[pAGoi/fyaiuZϣO+ drLQqOzwgiu=܊^xUVUbn L{.#ƷZZ8G lv+vQ\7vŚGqXEy#:~.$p88Č5+{WKf)1ʱyUxldX—C;_ij.V_,6]G!pAF:*M,b弳[VUFG2Tv~FTd/ pFy\ޏ];[vieXcde}wM O͐1lʊY I') G"%0Eco6W!..9fz[iyQe H;I:~B%Q??Ȭ]#zv ֍$O n*NrsF M9Kl1 fha$o`M@Q??Ȭ_]PIX"46r7`qp3V.㼌̪64Cц}A -(TtQvs|<g_4bn&qP!IKzwҒ#rp3F_Q??ȬSX ߿ɉ gẁzv- D|O AV`AHA.??ȣU./-fi6u)w8Fr8}>Yv}~f[dI ,<Z.Q??Ȫ:o.mYa8%GPs<ۋ Ǹ -w2+5|gy* -a0_|ҩj펙pI1pʤ ՊA8ppj"9EGP\^[k mS #pqF<}(ߜ"9EGE`I??ȯ4Kx""z'z +}FO2%' 8#yrzWOVyi7m$4d 2vpMm=tmd$ *<<;qN8%i(qx5w25ՙa1Ԕ ڿfcҊm\|!ffy"\!؜#*۴Yi+Hm [X d"I-[$c;\'5[o7o7/ܾFڗ/Qm/e[(ݐ X9DjBL1\ax NhVRCC2Z6l ) PFPwIo7o78/{j_̾B]I􇻹lV>l= I S`BTiഖɯ-; ʰ'yFC*,E!|A̟M|A̟MQϹ}Re$.:̭,Ry"#Ä *0Կ}KGm;UԦK2\DETc'߁\޹=JZ/cWh/$ӥfMpI '( 6##;|A̟M|A̟M R{j_̾Wui6ԆOKFQ|:p J8fBGƻ.[M"Gh`Hy&20P .B9, \,n?'G,n?'Gq__smKtZ Qe-AVR0;מ-…\,n?'G,n?'M`i[Kڗ/yhc4y{O̙@Wºحiut,w-3[6 pM.˨ܬlU72Kc! *hw24w24}K>0Կ})3so%@!i-IJD#!Ѷ/l籓XЦ#vb;nf`n SyXڢ?f;qߙ??f;qߙ?>R{j_̾fM:bXlEEVl$u`@cg[|A̟Mq> endobj 1403 0 obj << /D [1400 0 R /XYZ 249.478 571.28 null] >> endobj 1404 0 obj << /D [1400 0 R /XYZ 72 545.213 null] >> endobj 896 0 obj << /D [1400 0 R /XYZ 72 545.213 null] >> endobj 89 0 obj << /D [1400 0 R /XYZ 72 530.204 null] >> endobj 1331 0 obj << /D [1400 0 R /XYZ 72 363.747 null] >> endobj 1405 0 obj << /D [1400 0 R /XYZ 72 349.81 null] >> endobj 1406 0 obj << /D [1400 0 R /XYZ 72 293.564 null] >> endobj 1407 0 obj << /D [1400 0 R /XYZ 72 279.627 null] >> endobj 1408 0 obj << /D [1400 0 R /XYZ 283.315 142.903 null] >> endobj 1409 0 obj << /D [1400 0 R /XYZ 319.191 101.06 null] >> endobj 1399 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /XObject << /Im24 1398 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1413 0 obj << /Length 1479 /Filter /FlateDecode >> stream xڵXYo8~)a{{26%$_C eViEP7g8k-z3{=dH0avVGZ"tBUpXKU2]P׮eą*QTF0B_VfWgX]" 'X;%^Z"1>~FcPP%LxZZPg;(%8 иw'FU/ǹJ YY(䂹jWY]66JRKb !ԳDApQ|0@)<l! w ƹj+=y:@ "B$PaڜC%YMpp"?M";䴺uE&Kc|~+ߊFVjH-qFoï3x i4>fJg aU*%{QW$&6,3]V4?;{z1PH&J:dFZ=<2)U3_#}.+5UpR =؈Zm^ew\`6:2, +JDpF;Z&©,Q ,gu)*MerL_Gpjir>]Lr ƾޤ,E|S.)JrQy՜4w=i^W< idz1( z- 3VK8Hl'ĆO҇GZCAѧG'[RqJB!#}/_?c?~L~.Ã2&ZB"g|H>ٯ8X?㼩/| endstream endobj 1412 0 obj << /Type /Page /Contents 1413 0 R /Resources 1411 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R >> endobj 1414 0 obj << /D [1412 0 R /XYZ 71 757.862 null] >> endobj 1415 0 obj << /D [1412 0 R /XYZ 72 720 null] >> endobj 1416 0 obj << /D [1412 0 R /XYZ 72 317.58 null] >> endobj 1411 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1423 0 obj << /Length 2476 /Filter /FlateDecode >> stream xڽYmo _aܧ ՛mmkQ ǣɸlO\^Rk.ygIҫ{}JON7|]]QWY+ K, CZ(o)LK/Yc  ,dJ,m ~.1>+x@ρHQJ$DM_`*S84nh|T9x8zLVzez,̢ร=` 9@:~=z%C譓CnIbs_f9$$GK [??vn_L^id:C.,h#ccK]4z4-Bk[J\7Eܙ rUjQ/ vݶf`.>ؓAmoLBY׆?3wH RC~qC |"2xgxⓇcq*)eMʸmc8lf9Of;!+ELjA\ӰgO(CpLVAza# f߰웩­Qh /Puq6uM=/sI`[[U `3 | ^-0FAk⮢+cU(KcJX^_vө?ퟂd]rs #hW^1̭o[DH]!/s;xtd5Ӄ]8qHǡj:/q`5={EgYb6qU bbGe\;xΙxb`)8qk"=l|KoZg2kJ0G?,Zg^hgJzuF0_)kO넵Zd8,ǵk7yyx3ZPQrB0{SP} jz *q=̇d~ΡpX}"xH*L&s ڝT Jqj3 ]o: i5Y=1IY2W8>7Nа9'~h;He7v 땀v]'~kra-_[@^2'V$8~N#Rq'eLwx50呝:\YIu5wќe42fec״-oVӻE%/^>L3mNg 2~Q7$8x$^ 8˖:Z$C9d8~^tM]FpȻ"a.m*Nc -v[+aCoDlvRΡG J549d'>tXM`ǜ~? MEpJʮ;꺾6^Zch08N{2\Gf)4BcxzT8C&ѫ3>Xhi;D1x&S$&N0xԣ^/}5 +~t!T>r)鿥Pe endstream endobj 1422 0 obj << /Type /Page /Contents 1423 0 R /Resources 1421 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R /Annots [ 1418 0 R 1419 0 R 1420 0 R ] >> endobj 1417 0 obj << /Type /XObject /Subtype /Image /Width 186 /Height 125 /BitsPerComponent 8 /Length 4820 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222}" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(A{}i=|',x?Uӵ4ߧݦYYA23v5Cĩk;i$! ϧڵıHQ0QIe#pkHu[^4A'|J5 2g/T^;^ɨMbfirNzrcWAMf]y-oVak5^Eu hM4-dXKoq,dY@fgwA/K굟2OioofS\*"Ȩrtexy.]%og'ZbI!1DS͏gmٽ7?l.5+K[m%;@-(1aG8愵Ե8)V' VlNqZ6_C|+?\ojQ]j1mj؆Ǜ'0UkjEQEQEQEQEQEQES$)qc}|MEC;O+}|:H!y"Gx[|l F\Caؑޤ~i>vϝ_ԡ~5[㶁teACaLtށ_1ߝ4vm~W(ߕ `MEC;O+}| &ߕ >i>v€&ߕ >i>v€&ߕ >i>v€&ߕ >i>v€&ߕ >i>v€&0Ic$`T }as}w'mmM+p9<ҧ/+ kS$nF|^8ei$R4tX%$;{T^%&y'_)᷵yG'b)bd,u\h6B,J%D66 U3qָTUNv/ QbA1hl\6pTAzg n[Y32I"+ DeMFsК{CIV? NIfY++Frn7qP7.u_y%|&|>{۰%s u O-onY*$% ]gO+{\$Fll `GΪUA%KIlDX㉜`} ZVqo&$ 4j$lU.-FKB%*nYUСR:c sz2u],KڭFvthmWvT`ÃH1#k#¾<cskZ+s+I,ݲN,Fv8Ndb:jn6(((((((;6BzeyϜ?.!g9]l/|_G?#j(4y]ki#gB 뵔c"U/K-1QnrB /?#g9]fWN ^A8?3L /6G>rB p~f4_G?#7 p~fJ/ g9]l/J/ ?+п'hK͟|tyϜ?.+п'hB /6G>rB p~f4_G?#7 p~fJ/ Սrw3d9>XjH,nR,3LH(5`hD]n$lcܑg;A3Ztڿ5m2ݑf6 p O YĖk:iwWR KY]+br)?xwO^Ӵ"S$Դ:.HNqX^%Ư=jyfS$Hw8"S1O9"MKzČPjc!T,FUeSl&A dzjvN43+V+HHKT3.q8yi#Vo% HCRGygu{g/#JШG(! K!:43ho-O[y {M69/e\D(R l%H;o .'H !F(S|yoᏳfnw?'^69gCj@Mƺ)ԋ1β4r~PsN:M3ZjӬ`76[Ƞ EVp60J B xe<=Qq2jDž cl` w((((((~U:qYOq#2cK?g~PT?goEgoEMECvQvP*#s>s.i,9528d4d`ہŠ}&Eq0[L 6'n18-ڀ;pLߍ5-/6Z:P9yqȥG %KQ\~4V+'%mհ3H5hlcw%ǜD'nd8yxV[Ѡr$yьr202TB vxO"&:GsJP,M.-r/'X X ޥ[3骵Ԡ J.prp 1| &:Go玑*/ jfʄfW.9' 1a$z:\ &:Go玑+z,o?6xO" &:Go玑+z,o?6xO" &:Go玑+z,̱MS2ElBݙ9;mTEARՀ!hs O o9B91k2O $QWX_/ʎDG$Cl bH)/Y5wHCHm:9 yy`O$ ]u1XWge6d*X [TQp3- 6[p=$gC)ijW'}ъ~岿_ha.,lFgX?.:a<̏ޢ[ɨC|'r:rcOkY48VE2"(rZ%y@lnq wOSMWl}ݿzqSQON۵[Y@]FHPp>­u#U 8?oуV`,u#F[5Z9?oj([4`u#U 8?oуV`,8;8=WM endstream endobj 1418 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.123 318.686 378.588 331.179] /A << /S /GoTo /D (Hfootnote.29) >> >> endobj 1419 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [451.4 234.059 460.865 246.551] /A << /S /GoTo /D (Hfootnote.30) >> >> endobj 1420 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.916 80.58 174.471 90.816] /A << /S /GoTo /D (the-view-object) >> >> endobj 1424 0 obj << /D [1422 0 R /XYZ 71 757.862 null] >> endobj 1425 0 obj << /D [1422 0 R /XYZ 267.674 455.783 null] >> endobj 1426 0 obj << /D [1422 0 R /XYZ 72 415.779 null] >> endobj 1427 0 obj << /D [1422 0 R /XYZ 270.713 279.055 null] >> endobj 1428 0 obj << /D [1422 0 R /XYZ 72 179.274 null] >> endobj 1429 0 obj << /D [1422 0 R /XYZ 86.346 113.05 null] >> endobj 1430 0 obj << /D [1422 0 R /XYZ 86.346 103.345 null] >> endobj 1421 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im25 1417 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1435 0 obj << /Length 2542 /Filter /FlateDecode >> stream xڵYݓ6߿L>ۧ&dڹ5ۧӡ-ZY#[?eʫn{)A~&ڼy}{[oHedryjs[n>< z]v'/pulg†"R; ;oxx|8$hQcS3QI`6ߥm]|&a(vBuqK"G^dxI:=ܕniTKf]۟`E_$K$oI[f{2Xx񧅎SW[iGs DьoQȷȳ{SEI0p"(ΗB/Oi27~o'( ;څ e?%)X[79 diQSY͠S|Hx@J]9:58*MWRRbaD0k& Fai~G(SLּu@ wk?̔IYfih*o0$y9WHr<0[Vp|SI[Cө#}0ψ PFX eQ<#itbig-$.X^۝#8hlocrFaf%^ڎUnHaIt_c:qQޖlG86Κ0O3#G0b0h aHMٷݮ$h7XPY7mi,U{8ǣS5r x|>Y/\@ ~*}1|JKZ䂿; /F@]|~Ib_\ IOcz :WQ, LQSsތ4cˠ) a)1AW&T,Y-ΞŌM,pp]:{(,N^KPX"(-C`P&ܓtfHd+ȋd…A%$`M 315w]9.J|(1f5 d @}W5TTBǶrзucC?E 8󻇦b -HcEf\=+ПQ#[xt8:ثE%59d|X(FfVZUF72wnΥdQtӍq 3}-Dp@x!CB;?& :֗ڋKмnR>|@V=h-rcٹ^1KX2եcvJ=39 ث:6 u{y/pU7aXȏ6\U;\/\SVz??,"6Ba0}Kz] j 9#CeWDg.mNNi< yv 9a\98##*) Ū-kj2WҎ.؅mCV$5tvx~G?BmQ:]ѽrሷ գwN[ͅc⁡[SЯ]+tfQ ^p|c(A!b|?+u7|Ր_xYBT/o endstream endobj 1434 0 obj << /Type /Page /Contents 1435 0 R /Resources 1433 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R >> endobj 1436 0 obj << /D [1434 0 R /XYZ 71 757.862 null] >> endobj 1437 0 obj << /D [1434 0 R /XYZ 265.458 436.184 null] >> endobj 1438 0 obj << /D [1434 0 R /XYZ 72 396.18 null] >> endobj 1439 0 obj << /D [1434 0 R /XYZ 280.127 210.519 null] >> endobj 1440 0 obj << /D [1434 0 R /XYZ 72 194.425 null] >> endobj 1433 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F62 183 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1443 0 obj << /Length 392 /Filter /FlateDecode >> stream xڕ[O@+MD>! ]@l! D_:=_g̀}pp`b(%XP%a9|]E.My|t2,dU#> endobj 1431 0 obj << /Type /XObject /Subtype /Image /Width 346 /Height 379 /BitsPerComponent 8 /Length 24508 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222{Z" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?}/M}&ٝBbRI9|S/O _G^>­Gvυ_z]d.ՎON1ZZ EO} .?G@[𥢴Yv_B- Q)h˰n?\œ١\:M'V]%XgCڷD"9w\Vί]NV5R:\ƌUx@*slʴ%?whia ?tK M:]BkAwm<ɷsa!G' 0H⑵_-$" -BŔlVS̀@b qZڟ]?whia ?.~ooom߿?÷87}Mb[1NmZY.9=FWժwb@ CH V~?Ie k:@QUYi~6pepN]%wq̨8\;O 4Wp24]G.X´5 JKfwb$Q4H' 1'O@Mg7tE:>YX)U130qX 䊏dM4]G.Xœ)U#2]yi#Siݵfd;Fv[{=b9|R{y!t}+"YON{':kW@ CH VfOTbhia ?4]mGA*1?4]G.X¶?aG.X #,?[tQ0ʌO #,?G@ (Oh?F'@ CH V{'?CH Q+n=fQ(?wE3~_a >ߣпuE3amj<*$<3zQ=^BUFbo)5_F2몲w;\V'@?*S c^"WS~Tv (aEPX^+u~VaxAֿMnZ(QEizŞinr&iK9GC$^6xr:K2Y[m~Y%2:G QRaA$-wDK#y`͒2T6;nRFuiH8cw}m[]3OʰdfY`w120x<:ígMӥeΟ$DQG$"/,:m,$)R3{}Dr$?W]=K\5swc/>u WD$ڶחe%w3oFQ:wJ*~Sr~?]%։ޠ@khJ(epB37 yR`o]ۋG0 b@-ڵv?A\k k Khl3  Yz6=4xti/rgmv;@6#툩Q&KsHTT{_"n ) ApQ_]J.8o)e%#pʣw$ Vo;!;2yvyEb-xFNY(ڮjۢ#7߇ۢmٿ?V{o Ģyo&%E?1((A EmG~LJ+n=f{bQ[tQ7߇2o)5_Fk _ğެߑ({:qcX׼OI5{^EOQ(Q@axAֿ[Z5hAEPծ&)-R inPJXL./rrVq.B'16Hc’ ܸ0YyZܢ((yI9Hлѝ<*XI@QQ2[: "Q"20g` bꦵig5KA̗c>p4v[~yᵷX$/$0UE$xsUSYA]mgΜ֢Mm߻n3y3Hz:֗1^x6 UVHvTiمQ@)JA$jXB@@$`2hU]?P,ѝfth2VXe#ڈu i gMʭ( A# <ӳE*jK\&|Z[ytN1s3Y-jq4ȎǔI (v+7m(!EPk5_Fk _ğC,$ kK c^"U='@?*yU>7mݞ<0yӮ `/Tؼݣ+O=ɿexZii(6$FI6nʰ<7Z<0Og#c/=9X'V2\wqy{=&wd 3- F> psXdo8,n3nA:[Ȋ|ȨŊK/5Rjv'ap \1A<Ϙm_Iuk e~Q-WR 1a2SeOy{5t́B2BMXp;~el>z bU{)*3&]fMv7.prAֿV[5MBX3ʣ&6MBAڡF rrM_:`Ш[V(QE`kڍ1Mn";p ќI`KX/IV ;v5; 5=L#{Եx7"r72'|#> :zֿګo,#T7!gBDcl4}O¯Z2\^p"!(L%Jp>$G^BPM"^MgKk'0C,"E 'fd v-n1b)4oPZꍫ[Hx#h22/L)WSOY.`.Hh$K 0XOp`cרsVZ;~ʎN|$HƐM%C6Õ B`ۆH@QLI @M눔6Eb~7 H V4k+]??aq.ѵGfEk(`-$ڎȍƅ|׭3>ddvRef]:nZV> hM͞y1y|Y&G;A ",8zxLSç&k:Ʊle-Fpƹ?»Rsm5Nit4ET!BU/AټpH^KOPXfաxMwcg"QY5e򣌛L5t}\kn7 &fKy1eRU9U[VOqx_Qgd9owX}_ Y( k֗vjh[Y“P¿6^wV*5::hWhe270`C0Y$Mb+kO;Q-HO$kjd-p;ꨨ3rlЭo,|=Y7h(&_̑PmǓ օRQEZk _ğ`Z_CW'k?/C#X׼OI5{^UOG`*QEZnk_TU+qQ@nw^?ְwÿEPEPEPEPEPEPEPEPEPEPEPEPEPEPk5_Fk _ğC,$ kK c^"U='@?*yU>7m(QEVEfwܬ{тݿ1Aү@ɷoV_miߖ9eF'}?N@::nv+,/vv8C`ʾvWߘwZBT#P4ϕ_iaW:"ʾvjh=.Ju?:!7c 쿑#U02Zy#{3槩jz+ GӖal%4I$x'gbIvϝ_S4}:_&Y|c;o\?3jզsq~$O&&숩R4-vm~W(ߕ ƟO"i9*CMϝ_vm~W+j??T6>i>vϝ_i9(ƟO"aP>Dߕ >i>v±j?=@cvm~W(ߕ ƟO"i9(Mϝ_vm~W+j??T6>i>vϝ_i9(ƟO"aP>Dߕ >i>v±j?=@cvm~W(ߕ ƟO"i9(Mϝ_vm~W+j??T6>i>vϝ_i9(ƟO"aP>Dߕ >i>v±j?=@cvm~W(ߕ ƟO"i9(Mϝ_vm~W+j??T7#(ACa?ּW|I6Z勏v Wj?#^WOIIlK c^"U='@?*yU>7tG`*QEZnk_TU+qQ@otx~{NyG5X2GB{gj;/j>, ,8nD%eV t }kZ[?>(MI"M'3Kz'aD[{Da ;2 .5E~ x;;fs;\ i,w %Z(fU` I%H?z|e,t>\EF|ñ2qc|hTO<s}O)?~<|&}AxYᶳǬl՞NNH<(fϰäG LcP.Y$I?;ר+=^O.ZՓ{8Z[2[GCEbFH6' Cl\6nOUe6˶a9;Q@dV?;פ,-fhMWs?W_hM=UE*5g_wGpQFM#>_Qg_wG5{HW_hM=UE*5g_wGpQFM#>_Qg_wG5{HW_U:O׭>Dewn8ǭy&!B5ї;֛]ME”c-K c^"U='@?*y>7u`*QEZnk_TU+qQ@=K {)*>X!I3_3vGN] HPV2^Wn@ˍv3LWYyZܢ((((((((((((((O׏?#^sOס^5G?xW* kAr6'['RK|Оw3ӧ5~xL B?.,"hXؙE/.>6 Tu+OP]j =b_(/IrL6!f;W#m*%}Nbz +AJzYGq<궂;TE%Z`e?|vzpN/'ӎ,l4p$iV;S\hڒg(X^+u~U=:]I:Z,ػ F1drYLN` +u~PQ[(&lu[\E GΉs)v,Bƒp1=Bj:Fwui{ x](9FvH ]m@^NeܮTJ7uh0b Wܳl;՟THkCuu@zjU%kzE-쑬q0L_3sp_%Jľ*RX- ;~J&eBY08 \j>uik so7s(6 :*>oiz]%>[I$^bѰmϾB1shO :v1Y]$qeYI\xW#/*9 6F9$i'ѮZ^#ϛU߽Ԇ#k:qƮt.9i=E,K{q G j_մOH,dlrb@C(q}-sot sg" @g# `Ns gŦhtĭ52M#1pFWF`+x~^@C!?1$yb#%r[@3+uk M _kcdK-#n`>[to<'nBkKe+1/&θ] ӰNwQĉ5ǖ#\''k{ӳi'MdYX$ e%vzoQP#g+s糙/`M@H!Zzi[-IJ,E;w)ʜ_LoK>.1-0ڸы^5^E]X {+:TPe@0 3De#$l*2$$3$%Ey4~k])ۃ<7,k]QO™771 $&|7[q5VdT'V\.С o&Ыj[`__5LC& p;GB xn sWtJ{#b G.*vclc[xNS>6Hcۍm #i<՛>NW{42ij9' $bddVu+*;[Xn]aFBFe3郒4=\NqQqko w :Uk;tfFhbdw]M-"&Hfq}0lAc"mV-J_jQHdI8Z>Z130T ~`C rZd\tܛiXs| 0Č:`vyn+387ݷ<47 i~ ;h5{ gG 6}HcbʡBIpʆ$6ywjzA e|1Q P<> ӣ[DK$.m6 `МvZE4"ImKvCI'nPreTY}AUIQ,YF`2E rOS?t_ QXI,-ͤMbWJ^_?y-䖉xe$y7p &7g5b9jۖ4JgF-E;@u #8>TpA VG  HB(q(O׏?#^sOס^5G?xW* kAr6ET (+ ?*ݬ/:`ЩEV ( aVhr(((((((((((((( =?/^?j$Ѝ{O׏?#^YIzE\zO?U|o;QP0(/:`ЫvD,:|l2[P_K{ .v˯,NH.k؎xVQJȶɘm[qG`FMnw^?֫A G6?W4s̐(yRˎ}Ԝڔ*zU} 7+;XQ!EEW?{|Bb!F_{|B .*\ U} 7((oQp,QU(?XQ!EEW?{|Bb!F_{|B .*M 8OjͶ,BRPFG_ ֑9j.Ink\x!B5^p6a \Z]_CW'k,, lK c^"U='@?*y5>7m(QEVNt [ZZ;#:N6u%N@kp8XGg{;C1Շn&7bX!ʵY\'=E՘B@( tpUBQ*e(ھz7(oW/26-m_AFW?ѿG"d(ھz7(oQ̀}WU_<FEy|9j ȣ?ѿG2m_AU|=yz7(@Zھ*"<FE [WQ}UoQȣkj 6y|<=s -m_AFW?ѿG"d(ھz7(oQ̀}WU_<FEy|9j ȣ?ѿG2?Upxǔk,n]՚a Sf 9?hfy(V+X ?V}QmV@c$ ,m77Y@c$ ?ZIYC77Fn睷o"ZIo/(n睷o";oEgo/(_k'Qg ;oEv_k'Q ?Oϰv3w< ?OyE`43w<fy+?yG+X ?‹>hfy(V+X ?V}QmV@c$ ,m77Y@c$ ?ZIYC77Fn睷o"ZIo/(n睷o";oEgo/(_k'Qg ;oEv_k'Q ?Oϰv3w< ?OyE`5#p|0gQ^Uj$Ѝz}ٽP*\Dc'805_Fl㗡}zO?UʧE\.MTwOr191!眰V# =93ŢmOKOIDZn*%~o _iR:w#D_0nFL wTrOº$3 6u6g4:.au+fWK9҃ò]\CbK[d:* |') \=4/YZ6|k _UF )X׾a+o*='FҴ;OMIh -Q#rXb;qjM{т_ZJYI"y. h1*DL\;F1k:5[x!:D ߛψ} s i> thR{WG:Y@qgdA&w&[<$o#ya6 M;u(9lB^XFx ? H \SZ4᳕&cb|HI[0OZx5o[ݣ(Q@,NIطRX  =cyB y]"mX񝓝BX䰰54F(*Hy&̠F`HIu;(/K`Z%GҴm$32/<,UHRkKeԢȎ7;Y,!%,?kMyvliX!ft(ۘs#KjzֵZZ],|f,XNczs6y]֎?2 :sǭjKቿlE}Uh`KfM4#̅|zKWԢk_$, e0|(]WBD^ 4ٴ˻%@&V8?(W-<[k,V^ϦE,]M_>dr:ÞV)rK ME-ְlimwuo3[p,d|S/ /iug|ݬsJ`3^GF| 9|[TKF:\ݬr:r|qsԼ/mj [SPL~p Քh.i|Khzw62.)# \i%GxZIAwwq X%*LQ7,>Y7tN6qDXMpV HKJAt- s.Nϖn yۋ0F@8ZR]e-0a37?@3maEΨ [H/X'4#P#ʗPa9]`ڮ޳y͑RK R5A;w$\𽵶b[, o$R9'͗by]+bՎ!'Ȗc JvfX?HNVV0Y_}+ݲ gX(oXUon/)ĂH羷XLm )Ț3XEQX-x%͆wӡ,!MwXUe_݌<~'P2j*A/IQH=%?7ڤB#3G[{Ʋ.v3PEK7?ȣoU'G $Ϙ"1EV$DUd_|gy* $$DU}7?ȣoU'G $⨻1Ec|H=%?>'Ep,(UoA/IQH=%?.goG"}I"O*A/IQw >c|<g[zKT}I"O*YQ7?Ȫd_zKT]Ϙ"1EV$DUd_|gy* $$DU}7?ȣoU'G $⨻1Ec|H=%?>'Ep,(UoA/IQH=%?.goG"}I"O*A/IQw >c|<g[zKT}I"O*YQ7?Ȫd_zKT]va{+ɵ _ğU$wH_CW'k~9zWE\zO?U|o;QP0(^=q[wkk_TPNAH?T}]?ו _i)*RG* }]?mq&.˘?5`j/h2}pKtjDo;n/cߗٵ A#'vu{/-.Rx72XF6!7c oVNcUb;YN `t2^.E_kGGٵ A#f$2^K(4if،l)8޸'nϝ{IJgӯnDm}"z>I*bBS8W~ͮj]f5._Z F[S֚z;dP3yH6q:^u-Bua ]]y&82Ev+SJߗ>ͮj]f5.()3f5.kGZQ)omwP6A?uEŸ`f5.kGZQ)omwP6A?uEŸ`f5.kGZQ)omwP6A?uEŸ`f5.kGZQ)omwP6A?uEŸ` Cwnd#c2y!B5ǻ?yN!B5Ֆ.ǦJ2?xW* kAr:QE ( _ k ?*kp*E( ̳_V7rqn0\$umK(;  ޹׿1jYIp+_qÄ >RڻFN.芐S+)]/Y %UV/B wvJծ.TӮ,IbQ@`U ^2;+U`tӾyK(HwT)@Aݒ2[I.]:-:M+M{|vn4ny ǟs]T/:;8Jdʶw c'#M>DOK[(-;""'){i4P妭Y^BcHFp}42DҢ_f8Ws=){ITcfc]Z[_Eq-k/]+ Yp։kcomkmvCEO[Q$IO`('LKQ  Ѣk ;y?3}_'´h>DO`(Q3/?G%~g+F=LKQ  Ѣk ;y?3}_'´h>DO`(Q3/?G%~g+F=JKCV ג?#^sOnZVO֤ E\zO?Uj|oEKvάaH @@,=ZQEFgnݥA3:FXneR: .Omր$/:`ЫvW _BQ[(ɛzeƠ%ǚGprm"m0 ]k-FSsi4 f ʥl!)azTm;ݤx ȃ'?yeD fP@; +ǖ؃GԦd?UU[&T%X[]-ZK6.GGes(T]2Q;h7(ik}uNk#mV s%yFo=->+z"]nB>Ǒ G23++g"~T UwsL[9$֟]Evӯ~q.-Y[~ ܲ =I4.@5^P,j!1Qq'5jU/ شFxnzؤj\o]ŧFu=,2n2U `s > g!M87`0T3N[._M+ F- M6DΩLR2opn;d>y}I4z\ۉW[al޼pkq88kQX^AUn l]mʹaA$jy峹Q 1`f\1ūV~.My%eTu)I:s$JeTL4[ yfJ w InY1kј/{(EĖo,ۃq mv. (IjUK0a%YHa ÑMj+ N:In=GkS;,+1!2rHPHIn_Pk pVJw"s0ڌ mH!jF[ FLvY689$`]/BsgҢXy$ʇ0Gg&^Sӭ-nI}nFd֬TQEVZ_CW'k.z~_ּW|I2Kƾ۴gYj;cGyQ>iz6eoZ)ݵ[-գIIHPoH kAr~jByko3563L!KLH`xA 0Ѱ*v0l5MKMZSm-R$ծ,JX'1i2)9*.3nldukkJ[MM M%ݼhT`ym>p Ή.ulֶOy}v<t:spQpH$5A}eoX\[\ʙ#r0 G`麥iڄm߻Y[!k]>ѓ3嚱Znk_T-EV (3.dY0y3ZnSHnTજ+%y-LSRNRQ-L뵃+/͜)*nw^?ր#OK(ZRq}r,M (؃Ge᫴֙e&wc@OdHJ3tP<H4FB5 :b0QB**GrO=/jƍ7N.KiﯤiJT24'{dxh7 ) jl/|uto)a6ybcPj' v/IrMZJL* f{@c*9띪){1X}?BX'.G1#V+%TNx44s^e]=3f Z2C,>A'=mNdsτ!<hWF뫒 ,*lPao#R} 3bͻ3?X҆f$f n zv5ir}.o,y݌Aˏ峳E5&JrJ5Ёk̤m(_/`$q'=[ Kj6 1m+rF(cf5!z3_] >_C1ڀXicHuu.<ۙv 2p$IEMͽZ`ld!F:G*9>k>ZUqek³MB7DS*Sz͝(SVL䕓»w]՜x;yG9M1U^rzk.^G6c۷{Ӣv>yVGScbw-y0ɵV?19OІ5|_0䕑$zv@⵨Ͱu$±U^k~tk荳K:TFX!b nxlQRA^Lӭ,mbHaME(֬QEQEVZ_CW'k.z~_ּW|I2Kƾ'@?*S c^"WS~(Q@axAֿ[Z5hAEP[*nQEQEQEQEQEQEQEQEQEQEQEQEQEQEZk _ğ`Z_CW'k?/C#X׼OI5{^UOG`*QE8@}BI+fuﻦJF kp5m$αJBZXp)l\p3ڹֶm&"F{=rԢDI1nnݣ8Sg?w/Kag \-3_/ik_sQqŽvw#Gpۚnj?/QhAsQqG~? 9h?ߏ5nj?/Q8G;AFOG~? ?5(`wh?ߏ4}~? 8G?F?5(_𣝁~?#\'?ۚs;>k_sQqŽvw#Gpۚnj?/QhAsQqG~? 9m幺8 caU\+_sQq´XY2\"GbQK1:z`^Qj$Ѝtۚk@ {QB5Mom endstream endobj 1432 0 obj << /Type /XObject /Subtype /Image /Width 387 /Height 189 /BitsPerComponent 8 /Length 19095 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ooBZTt=,K$rkG LHt@U^_k/yӄyO"ZgG>di3y^o`\];Qsj88b("_O,2 CfF^PA3۟+?E?@-3# ?*xCHdg ~_M:ǵf]*QV xږȲmk[&"N۪G3y.͹6=o{Hv//i U=OIj..4 ѼЙ(A"mVSI,p#v/#)UYXǼs'3es,+{Tu8?wvw?TMYK&l1y<_COp($^ kPUeKO2%acVT]}M Eݿ [gcR4yf?/Y:ݵ5Ig$EJ,O9R[5ZMWɽi([dthY~G8SgR_y>%R<m 1<г CJRŕZJi[m$b8`A6e0 ~i I}ߚtӯ= YK?TMEEWԥ?1%B*_&?,j*(/cR4yf?/QQGԥ??I|г  1>/o>bK?TMYKTQ)}O_?,hB*_&K~0[Ϙf?/GcR5}J_S|ė 1<г R?$YK?TMEERa1%B*_&?,j*(/cR4yf?/QQGԥ??I|г  1>/o>bK?TMYKTQ)}O_?,hB*_&K~0[Ϙf?/GcR5}J_S|ė 1t j<>H~cOK]Q\OM穓U SIYň/aV(QmUO5C4Wo>5"^P+/_*+RR^2]Ü)tdv> ]pEh}I"O*kE]jW/VzTCH=%?>'SQY\A/IQH=%?.Km :d!niȸ}~WeA%Ο-] qҚM"e%Kdi}I"O*A/IWֳ#H3F\-%N8 jkG]Q/&VK/:A/IQH=%??5S] ?>__.W?YI"O*A/IW!FUښ`QQGA% $$DUqkZ*]V-l @FUQ/e{__ud_zKUjkGGA?T}G\~#$DUd_CS] ?Q֥95o"mprhxBWqejGSH=%?>'PjoڬḒMrRDR6GUɿzxg{&lA/IQH=%?]U5 Xk`*p/P!<.*:DžGLaf̖gۊsL0kMd_zKU:J|.5 XlzdV߉~+7IFiݼif#hR:O)TWs'G $?U%(HmY16{wҖ?+U1QO?ɲ]jj.MzKT}I"O*м'\- Yj֛Mn5m i<3*eE#CuSR*O%W~'G $⫏:է23ſ$nH6Ңg2B2#HC@'hvdc9y4udiy9gGkH=%?>'\[Hku-Ō7',ÞQ?Y@Uׇ'G $⫞|W&u4b 91oSqt _ºhMW:Q;)jtd_zKUͧ侹m̗0?2(#Z my=j#&8=+8ZXqK6ƒd߲A/IQH=%??5vǀLĀ~Cmika<3ɿnYZʆ*xS%`'YONW6~'G $r%#KTq򑱞N.a8;5'RGD@;fЉcL%-ƱAi9,?ҷN[iæ `FEjYȽsa'#Avq=)DdIvgaURեBH>hF׮Zȟ/KOivF׋rZSҽLf&5)rIWUeRVz&?xo G?xo _aKqGПMkE]jV_UV~{_gO^EqwCI 9`X̙mܰ'޹u 8<֊+y #,1LiYQhq,3gKEqv^)j2eudVF7EbnK`Eߎ.f \O%R8R Lcb 1Fq%s/LSio&qmy[*|p JUK%Ac.L>/LUO^OF-Q_V~&QEQEQEQEbBbB3 xz#ukĖhZ4Io2 |Cǫ*BR1ThJߙG(>DUK8k?j;RoN̆hc $?zr~\~<&XC˖/\I7۹c>h3^YR4o45J|4y{N!]O mUO$+o"A@!Nztmkڧ#o!(`ra;̀wt#+fzX՜\UV/3+[oIRTݗI\xiXgR!+.y{\>*aUO .gF41uKmumS_J6>pʿh=͋XK$63@f?1d|_Je8$֎!?G%^?X?r-"{)v d9c~WٕڷoOhuwb{W͑o Nq"F*|ęWha/6zJ?ѿoukjVdyic jX~psG@?r,eo2'JNMKi"!*[ԟML;hpE=*__BO*j3Bw?B JUxKUX.!˝ {x SSjΖiԋi6*ׄ1(5KPU>*վ UiQ'zPbUl:xGwxGwDn}7t@Y~WG(Z՞?z'ZY9Y_>Cwwn$y$WO1_TM̗Z!7]fs88Eer̖ΐ|TrDl۱) ,P"z)yMm+q#$rvbH1I@ڢCOo>}~[qӾ3gxA0?tA0?]?zb?GQE}YQEQEQEQEU[UbՋ[UbΌ/3W f? k1,qw H 3޾u{RpT_U|V&2mY=JIVCg&X3Z^ JA>d@# bhLsPkmu+s5ԲFheK gO*j|zkC'ά⵺f#Ѕu9_f ;ISO!cdf?ht^+AI5H!62+$FU46SV_2W uL?"?*hnmdn`+xcW8"צxgb0\d;G6e7OIFmoxo`a|Z奫^M3Uǁׯ5WB1ZV{pbPktVZo,K΃~ 5b-Fu '\%RI[֩4 gЍWE%e-ĉwGO9"#*_S^n뱏V e?p_fXLDu%m3(rM;@)ESմ贛|]Wx_)~>w}SE:g%tuj56-ZY25cwK?F'c)Io?ιcM{;E$aW; B >jn0S{k_-;nozg@><*IRVl|CCɨ@$uݜ#^fMO R3MhE5cn{TEAxHM@ͨ@m|%|u{d% XB\ӡV3щG%zUԬ?%sHP>bWVIFgK|O5C4QO5C4WR}߆UVekE]jW/VzTQEdXQEW?_pUW?_pUt5abEgaEPEPEPEPV,!m]WV,!m]W:0LJΣ\Cd$ovϽx,a_M{?X׿͵ʓ+E˜L=z5X)Y}XfT/K+'&ߘtkQ߭}{$ ق3^e]IҳT`yEVl :*һv,Q oIկ9'g>s~hNֶWТMzY͵gga’qZ ?|/Sysc ,rWgYXZ8JNKR1t)FOֳGw2%Yp3$#8=A{տ_Si+ ^nƵծ @q`l_~C*^`?LdzLn&ʑI$FpQn+/hdf ǜ:w=6'EGVkjUm'sѧuՋmw<(S$4J֟?V5NsQNZ(GZu*k3ѥb[dg`kUom`gXS_-8xStdwѵȞXaw e9YAS&a, }-Wʧ^ؼELYNmIjfu"ߝfxqKd,{Gho?@+Rsӫ2=[5^4MTi $dL!WG\5b׵=?xo G?xo _}MkE]jVOcY<'ݏB~WeZd_k^ КzKT}I"O*,zKT}I"O*&*r2DУ&A񬋇݌v_@(UoA/IQH=%?w}7?ȣoU'G $⨻1Ec|H=%?>'Ep,(UoA/IQH=%?.goG"}I"O*A/IQw >c|<g[zKT}I"O*%:&0m$>HE?V $$DUf !3V rrG"OKzKT}I"O*3/G"Ny3T(K/A/IQH=%?[I3\UH]-ˌ H=%?>'@i? x_I qw/# tH=%?>'@i? x_I !2e?k G$DUd_ E?QBx`$DUd_ E?P_d_#" nq3D>R(+j_Ï< ȫה?J?yC ԯk^ (i7L/0VE^sjŇӨho(qʪ _Ň˚?KFUښ`QTTQ ?,?\~"_Mw0(#*aa%jkGGA?U}C4,ȗS] ??5XcDښ`QQFUEEP/e?K%#*Mw0(*(.i?X/A?TjkGQQG0YsO5S] ?>_Ň˚?KFUښ`QTTQ ?,?\~"_Mw0(#*aa%jkGGA?U}C4,ȗS] ? n4eYRc=+ 좹qZ4sAYov/Wg/#?菦>?yC Ԭz9+#B0XZi_s5՞?zQPI7? 'YX։Caw\YAʷ8 F cXkG7Zl4.ݮ}XlLhi_s4}IҴw/Ngk 30*p>H$UmwMUܠeI vNM_Yú$f#\ M6d*qq{33ZK[ C#(q@2y8I=I$3Eq556e$sN$$+ҿhЬ_kY#wnzn}I7? 'OF\?F?筷QjJ+ҿhJFwg[o֣m?չ7? 'GWx4M5U˻?nz[o֭ϴi?>ҿhѮ]#wnzn}I7? 'GpUr0G#ws+ҿhJFwg[o֣m?չ7? 'GWx4M5U˻?nz[o֭ϴi?>ҿhѮ]#wnzn}I7? 'GpUr0[e/3IllTi_s5$oBJceWVyeׂȰx*ڊw>R(+)>o_*+Rrm1 v!PBDfw7$ƫK/lTn.eG4P{/VzTvW57hoc.c"[iؗp? g0̸U嶰uݛĩxOk tOdP@Hŝ]xó%pN.LC! oukx`,eIiݕX @RIp S$8Wt*.q8 ц kP^5# e6~ Oi\Si?P\eeU~?WEpfvmQG\?_}/m?(mCqQaWKggO >i?P\eeU~?WEpfvmQG\?_}/m?(mCqQaWKggO >i?P\eeU~?WEpfvmQG\?_}/m?(mCqQaWKggO >i?P\eeU~?WEpfvmQG\?_}/m?)A3mhݱ+ko1YVNf_5XP4gΞ4]3E4]3E}/@}!3+‘ݣ$n W)BA巑- &Հ *-[՝xWGe)`$wZa?ux՞?Z-GPϷdIya1gy"8$c o/nmmZV@іDY7)=Xsta?t}~s|,>u ^ܬȗ3ac%T)xv-^^ujv&tX/pGa F#?o??]a?td] kK.[X+>r˓\\Ibp'O>y?p9JNT榖.3 U P}ff]ϬiGo??]zU?-G+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+XdE)7.ή:H88u`^kƣn.#o;j|_kKqG endstream endobj 1444 0 obj << /D [1442 0 R /XYZ 71 757.862 null] >> endobj 1445 0 obj << /D [1442 0 R /XYZ 273.761 384.318 null] >> endobj 1446 0 obj << /D [1442 0 R /XYZ 272.93 127.582 null] >> endobj 1441 0 obj << /Font << /F28 123 0 R /F31 125 0 R >> /XObject << /Im26 1431 0 R /Im27 1432 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1450 0 obj << /Length 2169 /Filter /FlateDecode >> stream xڥXݏܶBoD}oqb)-W ֊>| WZYpf87^}̽BLˤŹ;Tޯa~qe ?'GTH ?FA3"vÿBx!iEd^y}`/Q{OicC8 W,~ׂ$Nj&b]я+]գV]U?čAt1K:7S[Ѽ0sZYQN}۱yf^pc9jT,L_Q^PIBg_X~H* ]_]TWRfV]y[aqJW!H՛T.LFVrwȳ1GayYXk-qiDp3-d@^dA?ahkH@6~qwv6fIӠYq;V.U<фS2MOX5q+$˖9 HZ`lH{8-IܲċfJx O;ZU)yM]~3oI4jU=tzfL:ZT-@e6 aR"OS[{2<^\7(h(HnH۲* (H0ب#ۊ7R4}t#6GR>X98b ;MoED&k`۵ ~W[T^ć`sJwluf..m*g>_FL<_/"ffŎϴ8J1KfR՞IB}X`ZT. /7$֧R\W@\:d,w}C4!EKWӳExR.!sFl{c % qJJ}3~y֔+͗UPժ1g!]99&T\ W^ڛ/^[ +'c]f0bteEeOow^tO=gSDzKo=Ja%3P1@MqoG,'3G9 ~\q/It䆊J؉dg"fI!pӃO:Vsߚ l уH%e{]@s5@=]m\8:p# w!dM`<r1>UM),3l]9h=b5 v,F-Y%֊SS+()l׺i1OqKbz(nQf_otV FR}-RE+7W"K~d3bk"3^.)B3%S:qWMS|o+^G|CRτ[cZ,a1JEX /Ny Ha(wཌ"P싸hW7;"rgn[-DܛR}$Y z=q n(Uͦ(pqk""Gx֭1~iO (a֭Dyz^:A?,Cg&ki(MFE&ȽZb a;9rl a/?ؗ0r5A?jx$p%fgi(-vfj)VV`묤E~l]࠶iAwX6qRLK]] -, 8bZ\ ZG"'KYxwC:?5ۦohxP!zXD^hşޮ,tt\㪢:-y1hfO7 R'VjZ㮛|O!_5q~탔Qn:NG?)$L$:qkAw ܚFA~ʛ?R![)%JEu;RJ?[@v+6" endstream endobj 1449 0 obj << /Type /Page /Contents 1450 0 R /Resources 1448 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R >> endobj 1447 0 obj << /Type /XObject /Subtype /Image /Width 453 /Height 331 /BitsPerComponent 8 /Length 32421 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222K" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S<;X ?ѭEJ'' H?V&8+ITFB4dIʣm@ǥéD? DsZ#4/(?;o+3cڎD>SOJ/b(ǵ)߱G_m~fcڌ{Qȃҋ|أJ/b1F=AiiE>vQ߱Yr 4;o(ҋ|ج{Qj9rQϝiE>vVf=ǵ9M?(?;o+3bD_m~qϝ1G"SON/B8 )ߡG_m~fbQȃӋ|УN/B1F(Aii>vQߡYr 4;o(Ӌ|ЬQ9rqϝi>vVf(9M?8 ?;o+3bD_k~Qϥ1G" QϥiE>Vf(,iiE>QZߡYr ZߡG_k~fbQȂƟ_k~Qϥ1G" QϥiE>Vf(,iiE>QZߡYr k-((qK,Gh'8($&Ђ5k5PxBcmj.CXXJRCDF}:+իGeBK8var}2>LӴKHڭ7( r23w[ZC$YWlr(+n;o>?Mp |'-Wkw;09},F%Q2/ ywUR)ΑZ54uK[hW~m2[=>{ |_ hmµ>* kOڬH,n+}~xG}O"*'4<`T|Z3hjvI?Z_? S==aOES==aOES==_OEI?Z__?}G{{g ğ??W~'G ~ 'N3?K¯'iO"|AO_G]*ޗ$(_OE/88""?U$/IQ ğ??_q?qEEvI?z_?Kk<<W~'G*ޗ$(Q)yy¯'O"U$/IQ>S(+_OEI?z__?}GQWg ğ??W~'G ~ 'L}5'wpKy(KwkI9f aW'ǁV>ɜyvKDqQV oJ/W_g/e*]+1ɵ35jir@ jFxX2INUⲍOaA|_h,w3$L[^23qf(cΒ-m6;2<"5\Jxl܇e|׌2$ӯP;+ĵFT}'倔0 (Q@Q@Q@Q@Q@Q@Q@Q@K[.7yh[p3\_:?5uŌ:I8A1v׽|s c ?¯366Zu;** _q'*SodW!4q[h QX>n^_ǎ|. DmnDjWy}l)NV]]<-X_h؛ŊzY֮M+f5zqOt>a-Үn|~v=sp4[-r5mS6sW.{؎i-̺-[(7dqXtzW:ig.IZltrCGFOr>/,03?+-#WJd('d&o$я!0i❀u*f/GKlRZd1e–`3q_?d[1k &>s=`B4vkľEwg5/ukOmnkc.S<$ADC>ʛS]?KUsϋQubIE'(褢 6__ ?SuK<0c͖8{~ȧ7|(CH>e|pfʏCdt_o?KWuD^{+_խ~!hXTט&{2n[+E DIYg?pY#%DWGYXd0.2:?l?°#i5{jW4iFԱ hTr,HC+, Ѓ?bV"-kV.}~W=υ_+N _Yv='VtG6ݞ19~g?pRju\^giilp3[II%߱^d(+:8 U{W0Lb9!^(,g V/ L@&x :V8ugx4\*wXw:oSGqʸ/k[x5)(cF00 zWULTp26::( C?ξurk,>םuW.ѭnKc*l3c*Obt$t'c4&Cq^/'|?c>s^ՙpz59ۃQ>#)75*T-J#5#,}ꪚM}KZU^?A를Jr>t'-){.*jq_!u=8ȻnC*ы^_; A^`MERHrMGXgE7x&|wJ._)(]CؿRQ_q?G'3־ȧ7|(sZmޡ5@ 㿹?)_?J:vB9o$$Q}3[}r(*XsV6jlV5''p8ƪ׫zo}[PW{NpAz#_F{UqxAPk2m=ؤwvUl oʲ B6fdegbOA ?? FFK<:Ė&Dj#]?R (j2}I}M_.mf>\\ѓxJTŪR6Oߘ2x7*%V_+Q U Տ?'? _mjHmp ($m5i 5 ֻ) i]Hq xAg3ak/44?u<6VHtUЊMWi"զm"5±UV&7 ʩ32f9fYR7&ֺ"}LңX|v#"y5p-I(%1 r3nsx)v6ݟ;޸զsI!%7)Tշ hˆkچywk!*r>ZZڅ"ZuXRPʷDF~СNߺ^$׼񦑧Kkp1V3O aJ koZMOo@a x'O7#XdbI<1qcniu`00*sӕߪ1mB^ٚ&H_ dsqI>}/G~z֗5'd{J u~MyҲGQԥO빣]Xtn"ےp}^koxأ6@?CWjY3}f h?P#&+"JGZQU$e:+>} NI(пn9JG>RU>Q3-9{*e@W|6?ѿuVhZ#>WJOMj\'Fp*φ m#wm(??W=OE/]CؿRQG(褢 )|Og|(NoQk]O>ȧ7|(s>+cz[y'1޾K8M⪥GT*jM&L@Ҿ觮ĿtkdO>WيnʕWO V3Mc쾮8Tqii-7E+J,B+ Ӝ~5wOɯV2%B7I;4 _Z?E/]bRe]g+p)Ƽl]S&[_+?~+?~xXcg}N(Ǖp? yy\Wf$e9v⹸Biءsp>3|](Fnjjv2fvL3S7k'֨x)[am.['1SGN8oM~G~[Vq0Q&yv_ ?c)?%UASVφԥ EBS9Jik# [ :pZh袊Ox%}{urkqcV,5~_g}O3 NnٟWъfC'#mC&#y}汛f#Bc*ǯ]|1O5"TGzWZ?8XJM@S__s$}O*~a]?O_Kgn'=|>f= 0}Mo^zĸS-+XXAhB*+_S#0EqȫTr*^uyhϪ"zN¡a_1;"Uz?C޼'Ã*ы^^wgqHz~{\'FS:?5GqC>;/g6OiO,?떯___(褢QubIE}ZQ"_ Aq (X ?Stϊ_W=NN3kO@5Mkg#N.2p=+s#EyzEzƿͤqi#V=Hڰ?+?V |떮 f"tM%*n} _7@j$Pf8q޺n2%Ќn4 YtЅu~.{Sp:ZUb܌s4(N*Nw O| ?0o:+q^_qŎӮepC/a75i,8V8bFI8 c^C]¿O +`>0Ȱ0shϊ+:?5}?{#^mLZG;*/ڵCKnlZW"ojpf=)ǁjlǧ5r{b*JxRjԇNSןZ1H~?xԊkDK RjU>XN Su?m\ŹWvaa^zŸQqsX;(OCp`F*J3Ubv!EIG-9o(Uh5kGҸ+KF}.^ N [|8? k+|8?? WWgg!Wurk/w_j_:?5{ש|S$/͔ԕ ͅdMSWoK.ZoG>.E?݋E%oS $sK~=k?sҎSEӵ=FݧMڏGooG'~"6ϵoϨ+xUGFQa`XNrO@y6Sdӓϯx5J5 0)QS.z KT[ pvpɯ gdy=#[Hv'$ nr܌-\4gcҚYss ,}p´_u%58/u]'ϭfO/ƾfiF7=$UFimAi hKByMUi$Y#v30>ÊsNodu9<퐨Ӏ+|ŷV67{`0VIsӊiaq?Z?}]={o⢟Cؿ]l.[c| kş{~ĞԤ\- c[0xT(7x7йlao=J _o O/ GF \ҸX&rלѣMZ't{m\nۜ}qԼ=2,\2 @+YK#XmJs)XD| ųuKC:}$\0ɥ 5ib3ZЯk}dsDn^O0y)$ OOG?aڦ+{(TƽNKJU*5eMi\6zuQ^s\a^ ׆[? ĭeʧ55lz~oksM6mI)Smێ{Dž+HF*Vd`ٺYS/9kף-w 0qW#Z59?>^!Vq-B&T*6|8?? W׈xtS?o!u<,ޤ} Osϵt7Oszb7?6r{m:.w #/QubIE\7)?1_zQ"?^O"KmZI!!Lg?JL_QyBf|]o)?_WIJsn T}̍+;97V?G_1:Ӥ(6+ƀԶo+nJ\ַTeV.PH{ujic28]_9mXz CJKo/!v TkĿY*>[Lg<ywEWʜE{\'F6{#^+_okR+.i[y5iZFRHM21RHEpjxUI Xr*D"xXSgSVگ!^l[G1_(褢QubIE}K~=kGsҎ4$Hxed$E9iGKGگ<=f7 b_+T;Vp?_ƻoOѣD&lܿloS=T]u x@jzCAg ̓ω'Q±=H\ ;ISv pG^#紟ѯxyxzK;kaxyw+o_UqbQs<+O>)7?.{Sp: (uqC RHtgjA^Kit{kx̓H 5xU5F)r*hoF.?uo@6?Sxm0t?3ٟEju\_,^ݥ‹VV d3\")ghH I;zb[9og4V*3)D\ޯBubW)~3;Af%I'` Qo׽vxkG˸)S eP㨧ZЌ*5<]G qxTA ^_3E{{g<8dcq0;~"?Nx PujUF N7էs$ ti%Bn2ēk>,_ $* X*3Vۛ{LdeVaʒ:޼/ox:^ڲ\g ݙ+ߡ_}O7ƾs=׀yƦ4XG5|BT]{_? mݎdmndeC">Pƀ#*naF8W''-s5ӿ^C#. Α1V5/M3W o 8*j= N;7)?>ye-c=hv#?M7Ed׵<+Jnz_+gz\K"6R#;T9L?]w? ? W ! S^.xwF\_i7Wc( ׈@0? \'FJeUhzY{/1Vt=j'^mHYp‘ȦBƹ95Q%54k٠d2~gM+BcgҽZLތLہɬkNqɪ(סNGEqVPT** rPdъ MڹjKC֣-ȦRagJw*}'!{UxTW~Cf.^A?1_ߥzu#^EOz,ۛ_zI>'эZus9_h\5/S0 JK>k%Pv/QwJ._)(c#__ ?Su!Ӽ9l(\y'\d|uUЖ[3W: [_G;jiuMw9!#V\I W4/"JF>;}"W;[H&{K#ENޡuk5嶌пa/ WEOL%׋mZ’ ֍q~h޷ךG_`I@Һ7#\ΎFGɮU+'Wtb7=ɮu&A"=+iQIfFFpH#iߟי_uoj 4W<\&{}{nA!` 8*Λp'(8 ~%Ya?#+X;#.hw5?)MCZmx4WIx#AoM%q|idn 2gW_2#=r?k뢖N W:AJ7}/Ħ.q0 e .p:Z{x́m2|~u?mT?IMF|5#& Sj)l/–/qnѯ翵t 'gs:(+:?5q \'FR1DۃvRb؏N}*}j} 2G}鱑HW7.TϽ@b*cͪZp]TH 8Sz-Q֩I^6mN%'wQm9{SR=D*^&8'-JiTSH>{*m+!{5xހ?ҿ/ WW k^A?׶:?5~{z s|ϡ>`ӈ5n|ż?kq$Og|wJ._)(]CؿRQ_m?G,'3־ȧ7|(K> F]0 by#)A܏C޳~ȧ7|(뺯=N/bx3޿-?rYYj_ L&߳i]6eauf. 3jtӤ`wg ?2 ?\'W]>ߘ 0Hsr Blh++9⫭m,mmVO3ȅc33}968y>y_XTgbE 3o+)⫺UV1xjmݢ[iK0!\lj> 5vL gJ֢)+#;?٫ֶgh,>#)Pp^5dH_%tWgV#濋QubIEl7)?8?WE9iG]p ?SuouORMO:u٧o*9r$W0D~OS sxBn$P 0d|y ~u kp]! eh#la(1F6޵fntVxHHՙGFq1boDom7<k6/w)]nFlJ_^"Jt#]o"԰PavKysQ]gl&6a,$*=~Y7ۓoQfIEc'vxMNy)"MR$'zQMb\GQL.k"cQ5oTbW~ eDW27P8 T9R}&+Lb#_qb~AQ+kf5]+:?5_U_:?5?ނû\ [wý ,>J꫒`žvo%uOy5]J(%Pv/W῁O1/)_?J:ޗFbofuHm`fZy2c}Wq rуE9iG]m#q+HD2H<z*\ׅ LSK[ZAioyqyQۯu9glU%>Pნ0:mn tˎ;y!RSi gnP P_d T77 u(oՑܱWd^[5 Bo! 4vb7Kg*I/Lϑ|O:vSӿN%%p,j&,z;U KVd>FJmY J]&&B J,_J_KsxڅΤ٦vج^p{f.HAH.[samdPiZ,@@jQ鶳\ϟ..[hw`axbx5IuY?YF[tWXݫl6'KmKȤw*+sG ]")-R) GB( J)I@Һ7#Yq)IbӵY#e NCЃE+05謿j'VLd9LoAv>Y+"?E2oOL;Ge$B(RsslBt(w*yg4Qd1Aj(a#؏Εբ Wl//n`U`8fVmƳ-@g:ʛP_d ,Ԣ^&, &9=z7Vwijm2vp=ҰV_B*{-@O-8R-5f(OxwOx諊vqLC$ A4h.RXIIO͠$O(њmh\L4Hj iQRLJ"SsE74RQRL1^^KŦ_Z&Kw+:?5M?"A?|ZN0kX);h9g$ƸMNq(j4H]CؿRQG(褢 :__ ?Su\͠YKW/E9iG]ٕQmYi,Y ۩?|gS'AL~u_𦛔8rK[0blZ5c9$8zV_Ij6K']"uе2YjX]Y1?˼v);:*_i꿯VV35_AkJ8Pf$e9vӂXi{ EnڠgD^fg\CYZzVwWpTSD"XDi:LVo"#;rv? ZzIB<-1h\: Ԟ3OEӅyOې9jS\mUKϻOZz,򑜎}Ɯ#+C[VJ+욥J],J=ZzEmwĭGFq}GgAi]@[c',9ܦ0t7o_GB7CTJ((B0](^K{ږLurk&<<99ֵsԷ?-/?Ƹ+/\Mڝo?5G_!ӏ;KRkCq7jvp t7FV46OѪZ_mo -[Qʳw[ݷlzk˩I_f} ַ2Nު旛'=5kwZt"H LX0{0<:7S9D."m!5-pȅb$kB?Ơ)tE#EVl݃pp{{իn{{JN3+E1qY6;b/}nmg!h׳?RY>]j_~a+$bI1*$.T ۡjwzޛCk{mW[\h2*̈wf'یm\.#3F$}z2AilUl_3֩9h)jGlLwSI\LqI)KK*F `@lG'%(Xk8#2!s ] ` &jRk|vN8'n}( FdB1UQK`T?m#b a>u.E?݋E%8oS $yZQ"Q;wG̪6n=\u?3h?o򹚾6׆ G}H-Ԛj[2HϏ`T󮊘?듕\{ۋ+x DMq %$.\Gf??EG361M KobiK~bFO)izeJ 5IȽI f??Ef??EtU tok+wLv秥fٷmJXePI3洵_AkJ8Q̿xyi_"sG Bড়W/h9< lVu?ӔRBG? RnNΫK o_f??EYwYs5`ov $c!Yvޡqx1iUAub@8a] Sfx[c:?f??E[PHX lnVݙpmy\AmY[3F 1Som 򑶻++Ɗ IH,Kab8l $gTӧ4;,oPĂTS8ky>n/m:8DV"Nɽе]}F8E[E|R<$ 2~B0E]}"Rٽ8-縷mi,M+o.ȇ$Fݼm'8 8J\ì_3֩굆>n$ݻ{n:Y'2VW$XHIRqx9HUHբg#}1jVlV6-_>G'ap"O1rh8;@1sTҮl-Āy]݀Q0eE;96JDzm̳<20`<x{RԧR55tۇVFU3~+ '?))|_7w6q{_+Z'ftW?8J\ì_3֩굆>n$ݻ{n:Y'2_(褢QubIE}t'3־ȧ7|(6нӫ4Xl,0Oq_ ?SuW=N/bYao'ڏuc*E5&:Y̼j~c*h,Y7dlqF B `B~u h,Yaol>Saa.nсTupy1R۲Zm $ =*:)]?l>e`q_ze6X,:-mі%NI$&7?«QO%`}*+()B[;g? Z)]?l>#~96k 6W(OHۺhu?[aoV&O zc8=pB۶8 )9#@J( ~}H;Cz}*X(s\䫭urk_*/2QEzÅQ@Q@^ o[CjUtU|Gr*?qTb\gƮD۾q +>MQ-sgk-G$2E#2lIJf ’@ q?PuY5`68Qs*;Fvl*Ff%]z/&Y^;TgMk&DvIcc_3eѥ3Or+/hT9f#Gu? ^jKZ,[bc2@m $Z4aOw5ꑽЌ7 .qkT=c?;:ݣiֶ&64,E$ "+0ji%{;v4AJ$S~ ,9b]Č_ug-[Oeq!26s? \C|ZL.E@I?g c+K iW[ VkyNW@ {]˖?Xk7JlܾNn;XV mv!qBc#WG"Hil6LI//J|(==f8౱[hIʨ$w$=ӹoe̋m(;$0:\9RjvO$.>8Qs*;Fvl*FfS%Ѽ t.RtX#uJ!rFHc0'SQ엺pkZn-۬w$ brHݱ3ĽFV-,31qkFDg'ˌ8-z7M{syi}u5IS[Pºa(6tlᨮ5>PԦZI i¬:23@rw> 6{'Tna,Qp s$ W/|Z,_3֩Lq]CؿRQG(褢 :__ ?SuL~P@{zȧ7|(뽴?tV[3}uῃ'7 >M¬Q\66+dV(W'7 >M¬VDQGBxVwy0>nO3ڀ/dYZقv̈ nAݒr6ẕMpg[G9qH?{Ls ~My07 ncV^ Xt8s~,<s%Qʩ eD),zg7?鼿QOo/;[8#FʷC,[zC瓆'>{U"Rg 9Cw=Py_w*ny9ExC]O~,Z]%O,`=rN}sր&'7 >M«Zn2baq Qǧ^[1LT͏rsӧ<hdTNu+݂M¬QEC?K d*OU?tc #*,,PDBE2yq dzZ_n&I์HHWhIB*9 [k7 K]2(6 uB8>e$#/.D׶XAgmv/fyUyEǙ%73 >X —*qo1{䓁Am6S>縙<kg!s@:fc$sIEcym^7:F*JJÎ  lQT%ԼzKY<3,Z[xKfR\>w^ mdf=XI?g'tLjj_=^4Q,gb@Sv˷wuM&䳎IdyD.p0Hŋ,m pwBU8wV* ?r5zJf`ճMfht`hQiHBfUU,_XlCՓbI@+?nI?g#}aZG_hR0iSENe"|HbT8%z #Y7uͼG7=f72miUy=nj;Фtb8zU\?j]CؿRQG(褢 6__ ?Su* 6BJȧ7}(렗U&.m4'6Vvn**98 :_/RQtF774m}i~+'6>i7_cSL\?Qox(G?dbcS=M?De,p瓓G?dbxwM(5;~+L-ddy rМr)kU=XB(%8(䟶KЌY2A(Yr88e#>Q-YAF 'k+|]7[{^[VV-ʆ6j_/ c/BA΍Ѥ-8#z@Cg9;zywLuzPd.A'Ny)~&h(䟗ރ*HRxrj<], cN9ze,R1GF*e#u )j/k{[=r1&ok߶ >4ms'M?GEIo#Hf$衰 )IKwRN2o^7t<*09l'$6(/ c/Gt*΍ +?Gt(Q@2=V1Q? e{)M:4*-gxг#V#RH`C(9E? ey~(n_AΊm%q{< 39-m\ICi^4K[O-mYc u<tM? ey~(nBDM>GKx$m+8EX(Ž|sui,׶%h2x<0CGt(Q@2IZߊEX&ow$+m&+e,d !.q m$Cq5Ĭvh, 6x7 elO)Ps/2ŋH&*rVk;g_1F?GbTTRKT5="W~_:'H]k.CF~ޛ?c/g_1Kh9oIbkL1.E?݋E%|]J+H?WE9iG[}* ʟa|(NoQ;Q#ivDf*#yv+ו̗ZD[:wn٣UX DU2h# h5!,2jڂX,1yi$ʒ8c|>FbnRicnۍ;Ps {&YFG]Xe8,F%-Agv'72U9GR$܌B5 SmMomıO Bb12VRJJp#`3Q>jdYSYԢʓ. 1RS$ǔc PƟ/oɦ̑/ahH%Dz*9浙SdYvopKNeipzէ!&@\,dsArKZՏD?V= EO ((((7ҪI -j}VO/ tVP?u +X|//|CFz砣ANbz7?C=lz ..oSd?T ͯhw${0AhX<]:lXKXFM|1Q E{kuj1ojzs},nYYd(s8Vp2F/ 8kdE:İ}'r6d|ʧ7vmRQדxX 9[Aܭa!FKxuv3Ä7 xC2N-5D[[[m``TG|joyR8'+hI{AkA(gp2$;۷# -k}rq-lSʆi7>l3X][W=Ӯ#'OE.C)s9cpm1]lBG&.vI)iK{sqoQݸ{{fVv IbD%W(ˍ6I5{_ W\CmǗO2ȲTYX?p% [),n.eU)@FR^*8b_,Ge&,X!VI]_w" Gݕ&ΐmWW7&Du_:;<*e˜sЬԭR VE)IUdT"4U>)nrHQp]xGqyIʙpN6a9QxnZ9_^Zoh m=73AC >?\L]a U"Y:mRIm"EE l܊0J݉XQ,V(Cp_rf5̊13|x1mϤ6-dK*R!]^>#4'|KFV$#FDH(2-Yǩ[7Zs=|دm|4п _M|۟mOG_x{'bhc/?_&{I۟{o/}gLJ4qEQQPUQtvq=]dkm>ҴE; n I 7U4q=>s=tU_ }e _M{OkT߶w/_п _Mx{'bk߶w~q=/_п _MxxI7?:>s=#?m|EDUE@UFږ8mΗwO?_Y>Ƣ7mΗ?:_ؐ2_=nt}{G$?`̿}E|q۟/?缟ؐR_5?缟7?:?!?eθ4[{NW9i%?m{}SY,Vac/?G#I7?:Owq_#?F<=B141q=>s=#?l_#/F<=B141~s=?:??`_п _Mx{'bk߶wmΏ|=>c/?ZP Q c hT{s=?:O'Oz톱+v^GؓE{8F%+^ endstream endobj 1451 0 obj << /D [1449 0 R /XYZ 71 757.862 null] >> endobj 1452 0 obj << /D [1449 0 R /XYZ 185.812 336.094 null] >> endobj 1453 0 obj << /D [1449 0 R /XYZ 72 160.663 null] >> endobj 1448 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im28 1447 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1456 0 obj << /Length 2636 /Filter /FlateDecode >> stream xZ[۶~?of,K:~H;̤i}p26DAPxbs۝db pw˷;}0w HY(K(r8"r[絻^ۊ0݈dKE |w3"^_?ܽX~d ,)S^;[^TY::qóv~ok+=?H㯛* SWn^8Nܽld+zͅQǓ ?>)UUnW==JuTef?H[HFcr<D?>N^y` $-7,Jr-Wik-jZ`Ḕ`FAa O~P[]u<憮WGt8se_zx&/h{nlƩlxnhj-sz "0RHkS5{C˲&>UR ĨH/z_kg)Y5X!Ej5Q&Ià}/9XV S$q_h ;4x4>KI+ d <4N,z4}' =?)}S,1-qyEƭtvMZ}4fNi&9ͤ~67hTߋAȹ@*}9}ҘFN N6 ۄrpsyJ4{>C:Ad)L&1FiBrZL8}؇Gvyu|A_/HW$j5_GqJ TX$QhŘӠGgN@k1(ɉ_lGQQx ±ePWAk%kxY^0'X .ͽ0;F zɞN6^Zfo5ιqZ1KݓhQ(nSOhFTV%k|ulD8q-ZF zks8mŸ\VIL0Ddl׷_a*аv$6~SM}u]O3pk v 0ʓ޳ Ԏd/6@-V~ת#siѮ2q@D lmtʝ>=C؊%J23rL#J !BҸnA(VPɶr Y! ",JSbPI6ÈV7W LMv/S[ziD;,hd$ ebRX%xT/(:3!XB3SK3%KhuGYXiBO^&-Ό>y(HKs Cq7D3mV(h ?l$. u45e9lQ7"z{(Nn/X@5Z4kXÙIFTq҃X#xʲ ;p{ףQ'#}|>C D|1Sn"cw}sA⛫"X{ "}AceW$y-6IJ/+֮Wb>+S:,GuQx1[b>[sg%YpwM~|ч|džxvw"|ŃxelyYloѭcrs8$بx?މܛ^B \pf$Z5TktSǷSbM3WU͍**EGZwd+ěN\N XiJ4Y1bM~N›o8SI6v\cg̍1Iym PqD o*2ˡm.Ü͜?д=^" 殎Ez Zz[A$j$TaQКNCo|O$awcwÁ-^-kU7gbrU rD)OmT'oTyrWRbJqE0ąZ#5P>)aA$ɦc83^$t8j&ju_> endobj 1457 0 obj << /D [1455 0 R /XYZ 71 757.862 null] >> endobj 1458 0 obj << /D [1455 0 R /XYZ 244.292 629.899 null] >> endobj 1459 0 obj << /D [1455 0 R /XYZ 72 553.7 null] >> endobj 1460 0 obj << /D [1455 0 R /XYZ 72 381.675 null] >> endobj 1461 0 obj << /D [1455 0 R /XYZ 265.189 273.96 null] >> endobj 1462 0 obj << /D [1455 0 R /XYZ 132.373 72 null] >> endobj 1454 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1466 0 obj << /Length 2170 /Filter /FlateDecode >> stream xڝkܶ ]VI=& :EwOV g( L ﮾zN^g۽H/ S?̔w[xnij+EN4)"X yuM tN3/}W\ x~$xoW^, WK |+ƃM~:[(D#GDY~g∨2}PQگejZ83"Q`ׄ73Zs6)}>T~sfIl"]6?^S,}r# b9COC? G}ΫAwp iY0RƂG :"*AϧlzFL)X5%E(Si4 *#jJq^LS_-,^k݂,l3x $zr(R-w,+VN6GvW5*~'İ06*0k< -|ܬ7 |y\ģJ\bys˜7#ki.ޕǓU!lΥms eʎmM {7tEyQmn.ntCeԏB 3zkHIyappC[ i&ñ^vԗE/QZSŊ)*Gȱfċ#x)— 1Dj0 37!w`%aE1B+8njif"Y#~qdYCkڽ.42*:m 6E+ |e̹e6P&l4*jfd7)D9 Mx2U`K3,zhƨB!XebbQwm|%E&:KU8Gb*bb8ab0-Y1=)ajR+LMm4jb*^JWgcu:1J*11Sڄt!{J%ӂ3ċtD4daBq&`~+dX/Tg.ʠT/ 0˜CqQfhAngl5~-0G47iIMmWȩp3:!@`|aLuЂlҶTan-m6jKi)cqjIQE'n\$ț L]UB<3u1A0›g:şx/' FE1A(EH"ƂP$ΒN *ly AN44R>IY瑱$hƺ1@Bvܡ,drUlqD.86deVft%j)Z u3BcL#4J-SNP `bIi@AIS!^ Aۦc 9r6/}!6Wcٌ2vJpDŽPBp"D*\}{zHC) e"_ endstream endobj 1465 0 obj << /Type /Page /Contents 1466 0 R /Resources 1464 0 R /MediaBox [0 0 612 792] /Parent 1463 0 R >> endobj 1467 0 obj << /D [1465 0 R /XYZ 71 757.862 null] >> endobj 1468 0 obj << /D [1465 0 R /XYZ 72 720 null] >> endobj 1469 0 obj << /D [1465 0 R /XYZ 258.544 595.067 null] >> endobj 1470 0 obj << /D [1465 0 R /XYZ 240.287 403.784 null] >> endobj 1471 0 obj << /D [1465 0 R /XYZ 72 387.69 null] >> endobj 1472 0 obj << /D [1465 0 R /XYZ 145.593 103.378 null] >> endobj 1464 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1476 0 obj << /Length 2951 /Filter /FlateDecode >> stream xZ_ Oȝ">̥&M6ddUO\I= @=tc Vhͫd*"~RY*< Vou}Yz#[ү-fA\ vk9y eX؟]9_ZFqAFpꒂ7Kҋ.iMŀS`|dsVpl3=c^TAD+xLVMEPeMh0|<@Ze{\'y&Aި( kxvVfmB |",>eϧvx=X]p,Jc%`S30)̕=aӋB`6w5nJYys~<\=fiN@IG/G; pl] )TXdWLY]aîHilRR@`);MX!pA}&I2CCPqo`fڠ!k[׮;l;X4S@Dn-lJIO e QѮduK*ҸhE͗v.L0܅&k1pگđzQV|G^`Ǻ; $܅&L3"we!`dⷽ :ƩHéXaԇ)njf0v*2b'*ǣ6eV+͗DsH\ _MT+h iDl&`W^r{=VWzِjBy UxK鱆Lszc ԨƗLz)Ak"L;?@l3wl Qx^`JfWlo/x`d2|%uG&яVTGپޠŕq5/Ks1+ͅ-UN7~hd.8O(fw1'w#}AGCk^)1dwx 伹a=[hܥϵ"wBCb 5WH#H" hI9,@x WyteE9E,Vw%$=y fY-;j%z_kHr6<![% wRom+wa/X1L7Ш\B?%X?+,YP++43 W9vݡ;;ͻ|W(L 6<ޒlF29H <; VȢL%9"}T7 QiyZBXG#,XHP^6'LŅs/}s΃5Y`P 11M\d4Ǘ(8ƅLU$@8c, pѤΏ܂KmNZۊ{.d-5䘲RƏY:/"eKUS+vkG#{{fҋK/gÖڽrN|V˗-7cd̮[fN SvDiޚOy8 .ke^eX1ft6?F`cZ_lE&)M2oM::~{', J$5NdVV4ͩ|aξ20 7{w ,P #>^ /%B?e@>~U@ qRg4"I籍)d# ~4L&䅍h15B^InZCniI'$CH$Ŧ," 0|Ǻ4u?lOX0ZkͲ*|*WPoRMcnP> endobj 1477 0 obj << /D [1475 0 R /XYZ 71 757.862 null] >> endobj 1478 0 obj << /D [1475 0 R /XYZ 72 720 null] >> endobj 1479 0 obj << /D [1475 0 R /XYZ 276.526 601.044 null] >> endobj 1480 0 obj << /D [1475 0 R /XYZ 72 309.981 null] >> endobj 1481 0 obj << /D [1475 0 R /XYZ 275.216 203.145 null] >> endobj 1474 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1485 0 obj << /Length 1424 /Filter /FlateDecode >> stream xڵXKs6WV!$1:SGL1ET_b:Jgr.oA 7w8 T8[/^(."o]yz~Kr?2gA[%2 _)Բ#z"-1ʂ+/WȽ'u4>->.k[08$EY*q_"~)ؔ7\xo9hx&{儯uȢp0 Pg^(lޱݩUAH?AQt\E!#^?ñ-oU|geZ?q೦KOB|I!4Z88#޽*ϵ NoC+l Ǩ*XVdDy^O2@1ʼ+dBix"fhY*\"-9r[BЖViG*8JRGҒڞ⁠"B9Ѫ*9KR81s9xyWA/R㈚b+ZhC["ieX6/fRGTLkb`c( 0 8޻4t>X]91 .PƧ߹W3 }Tu@ gUDg$ A7 1YX+8c>pzo;,)ٓt<$l)g?Q|F*:5_[h endstream endobj 1484 0 obj << /Type /Page /Contents 1485 0 R /Resources 1483 0 R /MediaBox [0 0 612 792] /Parent 1463 0 R /Annots [ 1482 0 R ] >> endobj 1473 0 obj << /Type /XObject /Subtype /Image /Width 437 /Height 351 /BitsPerComponent 8 /Length 28592 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222_" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S<;X ?ѭEJ'' H?V&8+WF\Xh, * ˀAW (QK}V3*ue)cz[ߡL:C\Ыwg͕&EQH$)pqRu,m.E*?ppx rjJdT(?;o* V/XӼЗFR^ QT[CqR̙AiiE>vQ߱Y\\_m~Qϝj1G"SOJ/b(ǵ)߱G_m~fcڌ{Qȃҋ|أJ/b1F=AiiE>vQ߱Yr 4;o(Ӌ|Ь{Q9rqϝi>vVf(9M?8 ?;o+3bD_m~qϝ1G"SON/B8 )ߡG_m~fbQȃӋ|УN/B1F(Aii>vQߡYr 4ΧߡIZߡY,iiE>QZߡYr ZߡG_k~fbQȂƟ_k~Qϥ1G" QϥiE>Vf(,iiE>QZߡYr ZߡG_k~fbQȂKZͬ8Ǚ,|NҴBp׺(#?A 8?k[}ac [ *+JYn!;k̯Vj5ks ros}..©eD3N/#scj\D*dzEmkI f^hQG̣ 7k5Ï*a]F^{?#o ȼ5?UKK:D(G)hggd!R+.m^/#lSsI%~jH-@ZF._Yqђ-MO`gt]t(xO"hCK ;$tSW_)=heyUmS==aOES(+_OEI?z__?}GQWg ğ??W~'G ~ 'N3ȣȮ?K¯'O"|AOk×N3}k+_EᲖQx֒"1Fr@®OZ|=]9G+"ttZ2>_>7 Q)_}T+B)8jW*cknfk'\?Y jd1e:P* odXfIs™dgZ*Pa%V1z[w>lvex,Dj6uMw4$}E-3QۏdI^xHL{h彶/ 1wm: xz_c#EX%߇, ﷴH0paǡB] Y(EQk}߹⺜af_ƊEd.'7D;0@=kR掩zi)Ksܾȧ7}(뺮?Ҏ_OxOYʸhu u?jz15hbV6~quingזQJ80x#xOS0Z X>xEX.۰J4.]źp fOEch֫{Eyw̥|X1 zQ٤EP0((((((}iڦkza=X*ڬ1M" J!ːNBăS֊$6GksjP*F{#Fޒ6QEaGVlu9KPMO?rAT[ K0: +|Z] :im-x,7UĠ6C.ɨ_gw2)"`y?{8烊,YEs/^=yvc ,,dz !(z|$:zMX(aEPEPEPEqVzն]jڦ:t7vmb+2*ȈI&Ps[ҿ񍮓u{Gkq$;7|M đttV6K?ۙcv㙖HXBXp`0A!+fQ@Š((((((>.E?݋E%7)?<|Og|'NoQ[Yj-+k d $<ȧ7|(볼W|V[2WT^gVڄ} Pip-΂ cd$ *ˡh eZij6f{sL ٮ$'(K\[[-od#"?W$g/;w&3XPҼ?%~$ioSΑ&ԗI݈t$5TXYf92`Aスa([vmWk u=CPMfATAym6 !#zw]rU?፩s29;4i_񮆊ϒ%ݜ[??CE ӰoG[h!vsvmWhӰo] rD.{NvmWkHi_Nt4Q9;4i_񮆊9"f:2F 29V*[hkir]5\4,'ww\ cZ:o"ljVB:k=E\ $a P̓JңmvK%WY%V9QPU]ϔݖ-IRO2o3 :aM,c?ͻiˢ&m\*cpp Q [tF >Uom5$n;WjjP]Nssw4Č1'xmQ&^U@Ve5,}:cuuu=wIߙI#bbI"RŹP^"X.~-0rFU#;|9iĚ%㶵*X8K7H*N~BXF(Avsmq[© <; YO_w>8`I'kNt4QȂ翴?a?ƺ(][??CE ӰoG[h!vsY;Kvf8J՚XFEQ8let{knٮ{9b3\Z@rOBylG<]-EtX&PYvRVɦtwV郴Ӯ|M5rc3li $N9Q) ieLwx;pp *Ă5Nt4RC9;4i_񮆊9"fw֓H# U ҟ+#ėxcUK#`Ը{.m[zx~ue\ZG$M9,d)$Ԓj!5C֎9޿Q#?H/ؿ-yG3;vyWwɍ(T:o1?b}:CTC:uI4B,S%b6p˴rTg,#?H=??4~? b}:f_ΨX$?MUwm4%`0-F8ePA9QvR?ֶ_J+7u&f/,p{@IiVVm'us濋QubIE7)?<|Og|(NoQgy/Fq ?Su>oWylߝq5uaCՅ-§&4i|̅0/&GB"Y|=o}&`("O `O 3]05M$?MF>"BpF~.0CwNj(yu0T$_̗˧B({F+,@U;Aģ\1޼ WI{&X+A]'婇9sr5*ӊB WI{&X+A]'̿oOTW_ ?s +=G++{z}B WI{&X+A]'>__zWO4_ ?sJޟsШ= WI{&WW0Ey,?MXe>}-ę؞MP:I᪥wjguEss!M D .v|*'*#zԬloltc0D%בj ?txŴaL__zWO4_ ?sJޟsШ= WI{&WW0Ey,?MWO4}R򿹇*+`th=>a?Vb/OUE)‰Pdu"z AJҜE)O p@ѫ$7 mha&v,s8I{O3] I5m$upx;wogzK?imsˍU/_F<}j}?ɍއ=]oc3[_+n#?*n7f/?E=??;-CZf;zmЅs_羋5^4<7HC|yC?8I=NmYCD}Z֪uiendKXb0X*VknmEZ)5]J(%Pv/WaO1K~=kGsҎ;q5kQ"\_Z|~V>xmVBX*sِXmP0= x5(_-cR|p6{ }O^xk>/[]jjy"]rst$d HY99>pCA [i7#L;jQm*d ?l,˄FP][CήNYGR;s\y~bƛ ?9ozkۥZe=rpMz6 ?jºEԺ\w:OVmPH 0#;q͏XS:ДNK;]N, q1)$hrH,*/LB҅.s}voXq\~`r?mxEcVIk2L~@T㏼jdž=5/+Īd9Ul62:C2BX/caި8G&1-~I^t|9gx3EvL/4j削YAڧlޅy;}>YGQŬk*UP ̠@= eZ2ķ@"ہnך:@x3+2jn vdS+T(Sޣُ*=E{*~Et?wUT+T(SޣJpSQ z`[+NkI(Ԍ=s߯09߆m#n?^DdҎȬDFWgVw[K EfiwsK?$/z6UдHƙO΢-&5.#mQN27HW GgR݂ ppTTR{t9K-N?zO"U:??ҡLNQ3[õF~i]\O%H9q n3d0$6/#M68m+(c8ܭ |$!27rW;oF?g+o3L×2eDnS>D>VlQ>_Nxڎa|m㘨] ȡ>EkV3VH3濋QubIE7)?<|Og|(NoQgy/Fq ?Su`ѫ_/O>č\Zۛ,5{ "[.Kmndh^B,Q iaQ v"M(}nƯ&Ӎ6,+&GZAq&{srm R&̹6!YXjMN_-WRL]{-#!B\3n0nJPzeψ4u[X-nq_ YQ+%H:UoxKMoI_}Ķy>eXa"rrx^ѼQmos. Ȋ"iw1'h'$ Żƶ,5p6-VЛ!xOΡv7}/ZЍWxIN"vW.9p|xi}OV>vuK5>|aReA^58H8&ŅY\qwHdNX[* 8z&s\][swy}=IJќ hmV/X[etzg]*^S'{*+aJC1̐;"#ޟ+r6. Ayy~]j[de2 oheXWqK_7T*0T_—^/.nl WROJڠ(((( cAK?Vl&}ݕm"ϧLF@Ge\Vs\It.>fB0L~p?UBi) kQK=_yZvZڅgEΒIm"5~y0} ѝYA!}s]MsǷ-.srhSo$KiZh9ɊFmL_+ZGФwMswf/4dQ.w=v"PAN~ea[#AҷHmo|<~V׌4ҷMq,gY؀dCϡU[I[6uHDWA5R3x;I7(BqY РKN{]۴qqAk ۄ'90CY}LvI-bp TУ$pR9[kZ<{uiwi)ei XML8gI`s+Rhtzǂۋ[{_[iKܼ+ -4Rohˎ&g* -'Y}^Omus+"D@lA:75E>f}:{fD" Vi\pSxE]6q{fJYsǎx]/]F eZȝĬȎ![>n[3> xR{WG2Z @qsڣXV:Z\9]%̬Zgr ,[xT]=#si]aj&$G<齺7˻p7ѭ^Hc6v!0l"%X ;Wr jAsEsy$̑Gf%@Yc("^!t;[}_KoFfm<Ď. Lf.yiw.I4JGZdt A$Y!DaNzoy$.(,G=H,5ۉP+aV$)#{>Zw|pkvWi>N$KvKiP'@Ǖ2=dko  i7Mt#*vH#,8zo}֩#Ȉ]GvFdU#Չu]:K]R}B-P.RQGRR ?:zo#ޣaΆ?]6YNQߌgo"Iy #?V:vJ]Ǜ+ 80䎽~]?ƼKծtY^=BաYK+ё#|`ڹYԮ.-CHhȁ<$Gn1Tk=/L[.w.s& HKDZVA$Upg:\Ij{*{s8|ca3:wv\+fzvwj-ⷲRgU+%=+^EgwmsSx^У#D.an%@AU0H4e5hw ,Y([Y,Vp$_99̎Ta^M׶w-fff {L"] `kѴKiL/ܧpK+1 r;o)4袊((?mѫQT?5j*Φ"VkkK i^`ZE}s"Iƹ?uUSHˢeڐAo3H݃sOyI*-F~jVB - BX;G$S5X+,y. bZ mwnZQ4RXjv\6%w0ɺ]~faJ`S8]Fo&êEKZ%ɾ+FD/?2rG܁V[xHoEtKĥdI cp缳hwDakuyQ˂dCo͗753NRGho%Y.sZȥZg(_#v@:Nè[Zr_-X2:-kfj2`20WEgGkO4A{8^t\UsJ [_vGշnE2ɓ$# }[}&si2\Q*%Bʰ8R ~MAz]褎vA3 Rk.-!s]ZoGtRQGRH -7AV?Zz?,??Vf ?=@([Q.(aEPEPEPEPEPn oZ?mѫQVu6A6miMDdgIDTx ;tjzƵukiG-[]JnvLȒe#+,I.I4SVI,n r@Ày*|tY~Uqm+vu2J۬k|R|gN>m^[QHei֏ӥ2o4Rv_iE|Y-5(((((.E?݋E%|]J+H%?WE9iG]|(NoQgy/F|c?SĘltdu+xH% B{p%oK0nJN )<r5ίe:87!$rEq: ""0[d)%#2 zM(4mKmv[߿6l {nR>+-ۿ?h*O_i.ifgXa"ky⻫,u Ì<]yssjmwWIrDhһwʥ @$|DrZqo T)<\F"yq.k gb.p8ۢk+M 1b>[=kxMҥy wٌpI#DN/pjv<ƊݳxYI:РQ?KL?ΓVmb)n/ 1#IJ{?#R_ψ:!bA{v, a^"4YEih\wR^*QEQEQEQEQEfը]cAgSd0w4mFGuBP,W%Kc#^'.YoGtmmq$p#:?v/f{*i6O.xY-G [jLmP~.<)u. K4 d#!_H (uQE!Z>ONORA nb@bI=W;7-+ ҐC+I8_8)s)ne]U6!ؒ$$هՅXRQEaEPEPEPEP>.E?݋E%XoS $yZQ"\_Z>ȧ7|(붞:=epˌWfN>+_L4i۾d2CsҴe#vJq4PAϮG^F/?'s|EW2]M'effx9MO7Ħuݳ˓̪ISuKu-ژ!"Ii2Clȭ*6pE%BؼF/?'s|ER]ʳ8 K×" nmBn&dO1NwJmgW\ao_\Mxi_dijMFg$a eWzĦ8:.d1yA;/"e,SKAt._B-6ݬ%y*{[&_,faPj6Ƒy$ZE}pZ}/lhEzk-le:p~|цcnćO4s~|e債+h|1(AB˞.-5lG qyA;/"-JN bw?_E˸ɵew5.mQ0?\t^U7\lS+,qH~l}1Mm5Yⅇ_/zXYLEG[1"!}vq*C74q1ddhQVtie`+"Š((((.E?݋E%|]J+H%?WE9iG]p ?SuW=N/bQY\Q[}yeJcwDvl㞝k4%tlVn5Tx6,gI|U2iTV0DdNЩ- 4;QHaEPEPEPEPEPEPEgo{T#uYU))xe9 @8Ъ\mq&E^;i!pŮ1&!o`nŊ(Š(((((((((((((.E?݋E%|]J+H%?WE9iG]|3铊>ȧ7|(뷗\ׅ EXt,N;5i>Jf ܚaH#۵$Q0+iV4^3YAIrvogVKeE@ ,~G8<%Lg}_WyK<>g}_WyKCΧMIE5jǩ"]Ȳ31f$t?#t*!QP#%Hu!dwr0ˇhYΗtH2,kXop$p륋6Kkk3-k#iqA yLAWml|olwn4+ܶdr#tqRy(fd,C#z` (NTF9 i'NXMb0X$(@ݒ 4+GRno"yK<>̡RƏ)}_?O/gh4(RƏ)}_?O/gh4(RƏ)}_?O/gh4(-9k15-1_COAEP0((((濋QubIE7)?<|Og|(NoQo//|(NoQo//OS %GkmP: lͯi[1# /+I(eT!l8<.e{$sk%Pv/QwJ._)(c#̗_zv1\Gv1_+T:ۛ&}$v'Ljl{E/yM׷88F.7f,K[e=dU&dQvOJTvu _q\"_cN)= 4y!f*m嶋/̀Fm+UUjePj7O,Z#IpϚ~Uz=o+m9+Cbtew T&](獋mյku[Eo.] rBNP;+֧yiYBȄfW.9& pņIj@(QEQEQE2?DD?#t*=YSVdj?묿)^ ( (f]%Dr P2€4C ( oB&Y(LQEQEQEQEQE_(褢QubIE}d'3־ȧ7|(뷗>ȧ7|(뷗\ׅ H#4)K,w4NP~jj |EemƫFmgQգʆ=.!4GwTF]d;YFXpI- S4-4綼k뛹"-8mT,@GWnmILmmVI09 TxONmͮ Z4 $01<> nm cO'2dF8.GcI-Ι`nlmL1v,hvJLJ-3~oGq('9IaC$l]H #ISp*Oi"Aqak0$[{NG$gt<+M#dsF;'ަ,4?Ik}:m+!@ EQEQEQEQEGTC?G?$P0G.,>ըܙ՝A%)\{u&O近 I?G(ڟ#&jETtPSz/=?Q@mO近 6_GEI?G(ڟ#&jETtPSz/=?Q@mO近 6_GEI?G)% ™E1_CO܏65rN=jJQEQEQEQEQE|wJ._)(]CؿRQ_u?G/)_?J:b)_?J:bW5|uCkrxXZc`si$ye|UB~v çeC&e8@8/x>#lcۚ5c ;%#ceU[#8C/14EL_?OfR̟:2x dpz24L_?GORCgOQ<(L_?GOSy14EL_?O<y14E>jPAuPEPEPEPEPEP>.E?݋E%XoS $yZQ"_?_+Q"_?_+s_ʞ^1 Կy\A5?w+Gf/ynwFqAax^f˻f@JV?rϏ(?Ux˿?G*ЙwSoOP\Akև{:G]zqogS:~i2t܌^Ún->K BS3' rG[@/.;:_=7>%6+--o "H_"8/*F֞Ieۡooi`7zK=*F-7̣nӽUQko?8?_]wR~qtko?84 ~qti J+/]y Ӹ׈#fm2˸B0Ќ$jsI6;B&Ef:D;ǰ^DAmxض6qQy=/9]M/e}~\?j!s$e #b   O^T&ta7~$[M|'~/u ޥ__͇2vI>#Yd>ett#R{Oo"#R{Oo")F>EF>E/g CyCyC{92E3ԿԿ9)F>EF>EȦL5/(5/(rd>gϽ7GϽ7Gs!Sb~tt_?^y>gOQE=)t_?GOPyDt_?@E=yD>gOQE=)t_?GOPyDt_?@E=xՏ@ ʳ$[|3|&Za,q̪#} W,5#bE< =#o IVM#ֵdIٙ>&Lk˨I<20DזּAגVwRb^>'B֟kaH\- p؄͐q EQ/-G "*1pdVdzOYYHZ+3 u ,eB{pQƖb3e֑dmCvgXQhь>(\FYO7YI4<Ws4 DBʹeL|nݭ y>H)f[0;0lL,& ߳,svrH0@@b04tbQErL$Ԧ@ (ܣ;gƎEQ/-G "*1pdU36Ƌ0/QT4?4,EQ?#ih?#ih GcL_cL_.U36Ə36Ƌ0/QT4?4,EQ?#ih?#ih lOkϮ|O{ ͧɧ0ՌmBZ9۝X[f̮ zCn$3ٗPT7#?!]t,M%.M=w9R8blqnec<+f1m:B(cP((((濋QubIE7)?<|Og|(NoQu\/wUOS Q^yQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|wJ._)(]CؿRQ_u?G/)__J:Q"W5|u+:(((((((((((((((((((((((((.E?݋E%|]J+H%?WE9iG]x)_Hkҥv,&ʫn ? W:}PSQ+|+ͯ_ /M6>#(k@_6 (/MS?=_6 (k@g0>#( m@ ?(??1G +|+ͯ_ ?1G`ŷ$R WaGF3h}bEy/oICŷ$Q_?XzmQ /_ɣa}GQ^? /_//oIC#4>O+|+ͯ_ ?1G`ͯ_ ?|+#4>O +?|[O E-'"g0>=~_6 (k@g0>#( m@ ?(mQ_?XgQ^? /_mQ_?X{mQ /_ɣa}GQ^? /_mQ_?X{mQ /_ɣa}GQ^? /_mQ_?X{mQ /_ɣa}GQ^? /_mQ_?X{mQ /_ɣa}GQ^A P)?|+#4>O`ͯ_ ?|+#4>O +|+ͯ_ ?1G`ͯ_ ?|+#4>O.E?݋E%_\jVv^WJ;48l endstream endobj 1482 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [340.689 206.956 449.371 217.86] /Subtype/Link/A<> >> endobj 1486 0 obj << /D [1484 0 R /XYZ 71 757.862 null] >> endobj 1487 0 obj << /D [1484 0 R /XYZ 212.382 446.788 null] >> endobj 1488 0 obj << /D [1484 0 R /XYZ 72 412.751 null] >> endobj 1489 0 obj << /D [1484 0 R /XYZ 185.752 281.84 null] >> endobj 1483 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /XObject << /Im29 1473 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1494 0 obj << /Length 1699 /Filter /FlateDecode >> stream xڝXK6WX1"EITzjMEۍm %GnwCJ8ndI8yЁ Hdz\TlkWH2V74-V/׋ {-%Am/{/`a'XXz.k5_hv"5V,`?U (OA ŅE\!ɀ1OVƥeWmMYTe4QF{Y磹8\j,RqT$B\eK7f4l\챬7_^ycIm&(Y3(Bx>XY Ǧ:8^ŗ! 33W4U9-ˢH5YY) i/~} SIm^7S &[WO71ۙ4ڨ 'qO]2a_By!L!rK\"D8"o;dv+pRS;EW7}qҍ/߄D,:]K̟JD OD)!?/Gsީe9dЦzewI;U] \&k_4+%5AwiB3a[7 vZu)&J2)niۉm#I@R!~C cWUV'zӐ)@{̺$1f<*6|)v Ic7 ^8y_9A)?0 ,͇xY7gR8EmE~ mF/ E|0 NWrZ>>biY!0ԞZ3$4Бm:iEvf)eh `pjST3IhP*F6u&F4{ vk(%pdv HX !D05Cxk(ޑx}'ٟ6UY*fKJҡCݎ^<ʈvϥL^$Zi!lRS,%rӷ]}EzK}v-/c=, a@4W{9eBPAY$%3zS/vS׮UQbɡpu3Ys6T-p,:.MN +Ld7U[G+1fUm r%-{GRDotugȚ.\Ŕe)bVPaƳX7y~>3GM sgvKcfLV@=I׍,ePNwRMƫRqIr ]ڔ d4Yӧg'%~WPO+D$d>:> "I/hd[kmJo}[(PJ$ņ<Ήg=qAtd)Mx" FӾ']ڦ8s)>+rP>6_'?C2ɭB>%Qp2!VT-6o0#eX-D4g endstream endobj 1493 0 obj << /Type /Page /Contents 1494 0 R /Resources 1492 0 R /MediaBox [0 0 612 792] /Parent 1463 0 R /Annots [ 1491 0 R ] >> endobj 1490 0 obj << /Type /XObject /Subtype /Image /Width 363 /Height 180 /BitsPerComponent 8 /Length 11713 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222k" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Aloou;ޱwKQ@T(T :TZD\K3%qRLldu5WR٪Ccn7ep1 OZo种j+>rr~o种j7ֵ]esOQOzx֫p6< OZu w$2qNo;;QOzx֫o捰Vhac|'=.v9XԳ%ҼUi=ړepR|𘰲`z˿M3Q|Y^쓝 J+C/nkV>o+lQ ѷuoUF*FaRPY N26?)ՉFmc|@.P=BT1ZvXaָ G[~- oSvn*<'uij2ZX@h~ɰ m ;Yԭ⿲-6R -CZՔ y5[eIE`̟T6|x{"t m2+PxP8IUn_-U2O@ ; {T}5j]QEQEQEQEQEQE[QVe_*m{ẞhE!P8Fv/ŋ;JᑚC&mVU8hWUxJ֬FOQxf}*k+3.=~,jx¶r9 X69`#GJ$亝lҒIAYYo~5R?U/"*QEAEPEPEPEPEP>L|E^\>#1x^MnW;_ ֯C/nkV_7@w?ԿjP_XۺWR٪BտcngѫECc/0Ko ĢZ ƢUj hm?0J;Yf=pID*B$CV2I®I,qdt@zn sM]>Uڰ~(ڰ~*(]!?߶ ??߶  >o?0@?߶ ??߶  >o?0@?߶ ??߶  >o?0@?߶ ??߶  >o?0@?߶ ??߶  >o?0@C Aq¥|7Q >o?0TЬ/$oI?'(] #\>[ɸ$7LZ/iı`0 w(] |7TSxm; g*_?Q  ?߶ ??߶  >o?0R2ՇoGՇoVo?0G(ՇoGՇoVo?0G(ՇoGՇoVo?0G(ՇoGՇoVo?0G(ՇoGՇoVo?0G(֬2?z°u!|3ȩ>/ G0|3Ȧۺ]&'|sFjf}gOJ_΋1IeE9x :Vf o`#ϲ">|!SȂLF_S_>|3ȫ%a)<2`AeE_SmnxI3X W늴!Y+F}c_U).Qufo,X{ΓM.}gBf 5'ȣ>| [S2sa)8ʋ0>|3ȩ>/Gȣ>|p%QY/(ϲ"ڹ-@L/(ϲ"y癣ȗy;0eE_SUKk b8$ʁdl _QeE?3G/j,f}cxLjxYHD/2E5Ҿ ?VF}_xJ+uZ$UF*FտºUJ`wS=J˹/^N$qƷ[uazM?rsrGҺtaMjR_k/@Xt^xda{f&AB*(N"xSvEDqLsjZ(1)^jK߾CQ_ d!/G~MZ:[ x*OiIk{`ѝa|G'j.|m&%qx^@4%O3=M1Ӻ<+|@vlbp{g~5Ϗ|LnldgHr@)g#E{8YӧqӌUUf?*諞Fc^B{ȿ|'ִ6OiS0= y-Imy-.|lޭ(q1s^zq^ƻ=tE˕ByԓҔFtU*N*=g{▼wඖU*Pxž-n֑S~/S'Je }*ݗW+(S-QKT]I46H.'HWq=7{ė0+>0{id|mdG22.3)tz- %ΉUR׎S66q%lF1LwR44&.o< =P/b4[;I)*9iٕ/?կxD/2E5u7m"s5W;_ ֯C/nkV_7@w?ԿjP_XۺWR٪CcngѩE>JUg~tg~tQF}IjX%ڡ}yu>󦝀=YЫG) *=GG󣙊Vbj͜=lj}G󣙅lhdZǨ~ts0%i,ǥ4 Y 3ʃ$)3?:3?:.u.@˻cNݸe?Ʀ~tg~ts0.4ۗaw_>>󣙅DI|cqqǨmdU?:8 y&:-sWoo@\aΌΆQ~Wkfgo cgAN+-g4Ύ=GG3&ŏIդke*BPq?:3?:9X*HhI>}Gp,}_E\ZǨ~tXlI;YDžlV%}c>~t7}PŲ٧ڥjJ}z96$vB8m"ss?:^"\ME+C/nkW·_5rO ; _[5S~~!jU u/-7=WV?6{ ly4h-A~*Z+__"C#FYَ'ҫXjvg^7yM靹CQ}}k-!B#'=9E,s“C"AV\h_(oM%~*Z|@9f*s\sZ1izTG,p$2Bl__CFI [#MiqImmJS8'S-G-QOmYIo3*h2rsjk{=(Ѧp&S4ry؟dXdXZӿM4b?9p*}aK}}aKkNQ}7Ϩh]K/QK/U];}GG.>ow -G-VtغwƎE.ʿdXdXZӿM4b?9p*}aK}}aKkNQ}7Ϩh]K/QK/U];}GG.>ow -G-VtغwƎE.ʿdXdXZӿM4b?9p*}aK}}aKkNQ}7Ϩh]K/QK/U];}GG.>ow -G-VtغwƎE.ʿdXdXZӿM4b?9p*}aK}}aKkNQ}7Ϩh]K/V/'cmPIߴrsRxgOMҴ{'#ey[|ǘv8.vf c*Ksks 3t'9~ _0hQ[-% :ew-8=r7jI' jO߳oVjs^u{aS^} {W >n:߅-6k=׳Wpf9H&@2Oukg~zT{B?Z$02FpNqJY;=v!yMt[kg~zT]w M+zT}S*ᩳEc}S*߳oQu56ho߳oQO.O>ש~Ep٢ש~G?߷⨺4V7?߷^?U]Sf^?Ukg~jlXkg~zT]w M+zT}S*ᩳEc}S*߳oQu56ho߳oQO.O>ש~Ep٢ש~G?߷⨺4V7?߷^?U]SfȭMթ~\a;!ytۂD`1 擒kso+lJF Wf *6D nsa]KKf2x]FK越qdE/[5-^%0=G6O\xo_CYdҡI֡ 06 ϡMtgw(3@\.Dj'H= !6b3[W9v5 jWS[Y^G<}L## =G\P'Yo1[`Sn,;kO\}kBK״DF&c !yݖq@uCo}ig.=А6v(f;OR - %Tl d@wT:gKx5 y%7s6նڸv2(*FQEQEQEQEQEQE[j}ڶĽʷ=c,Q]>S̅7lmqsm-pVq@[j Wwɯ`{Ǎ4^j[ݰBٖ'JL3q^U_SOZv>jfS\`;t^ҳ>I9_suS"QDjj{T9R(J ( ( ( ( ( ^"ejݬ/ȅ/\覦o+lQ ѷuoU M5K/]hWƟm .׎I$I{] J+#WX;Z_GBv"cEdj'k_(?Nֿ$Q~NՑН/HWX;Z_G+ VGBv"]ckYE.kYں ?uerEdj'k_(?Nֿ$QН/HWX;Z_G+ VGBv"]ckYE.kYں ?uerEdj'k_(?Nֿ$QCeIS}ߝsں ?ueKG~t}ߝsں ?ue!h?>> >> endobj 1495 0 obj << /D [1493 0 R /XYZ 71 757.862 null] >> endobj 1496 0 obj << /D [1493 0 R /XYZ 72 537.998 null] >> endobj 1497 0 obj << /D [1493 0 R /XYZ 238.071 252.939 null] >> endobj 1492 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im30 1490 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1504 0 obj << /Length 2976 /Filter /FlateDecode >> stream xڭZKϯRSb{Uv90K It|lr"F?n4W_nF%TVwUVII._}\m`dEn*N֚ZPYR;[ڬ<\(!7xͿo$$bDīo*Wizt+%,Wo~9c:;G\8 @č=fcmu>&늺⎼ꦥgUw8<ϑxgW[^d+cjEK}Xk]Rn^ Uc=|¶=r*Mag]N <͓%_v5q_Sld?8 ikNoJx!h NN$GŕtjaF0rBWMܜf At,`hnXQMF8e4H!.,Q$A %Gܢh*HMrtPc }}}aoǣ][g?fV["~F%BdzhtQ8qX/K1g)R_ xүW$bJFWkU' CҒJqd"Is06TDM$3x&x%c[dZPʼksCg:FSر9djXRS#NdL;YywgeОwy=t^N$dYv$,KXfhS8H^kH tsi烽IGw^wxuwAR<dBaaP%s %JFS/A60uÍ6MĂ}R2 z;{,@&ZHӯV4 6&o$i(,. F ]^Xp;!cGϞkkUTSua"Dŵ3CaB1! w;g"8t "x\ՇA/B`$4sXJD,{=|@&^n*@r](L=Nĥ $MΥ16l\̉?x}c{7;r6Z:79Px) $r>Nt!΅xBJ ǂ^} Ƞr$C@W#Ht[Χi33p?D\=G\»U # vAЃOޢ9I4u[J7T-3sCS9=,usŪp"?HE绷BD"d #}2@Qj4xߟ.lAc3ń83A>٦֖n=w RS5!; 6bO鄦ޝ9X McIG}G|p:Yp Vd > A/FI M_ԧ*E@BP&x$ur`CE*e+ qL0~Tݿ<nLjnk Y)Wi 6&4fsJ["Ә4;1* (ck\ 3ΌN(nj )+Np*x$C1 YZ/R@n ag-!?Bp+aTiFe%ԗu]Spy;aPa#hޕC͚i_e1[(zg!zc\;LoV\h۹{*;/S=уZE~p3NYeKjR$)Q"K~adZ6r=4ve/xbܾ%򱛄`zа6'(uD4řT!q$q8}.ߔEɻ;k9DOZreG 2 /w}oҥ/ӑ9DIb'Ћgvŕ*`:[_XPrh=HlD8;y)&JXICNpNJ]oan*j$" ^TiiT&T1m aW F7B 귥>F#&Q?a5;)u+phE>~24s:?y4{:eD.OĀyJ(z WuMx]%4ۚnvKmFlNtMK-&S$v׳~UX>V !wZT9ΔIFLنeNC(?GJ`.yp~v=\ʩMjJ.x @򴋫sI85uWrd=k%{ 0Jջ6qyQ1^g?\F )ϤRΊ"?BW/"sE# endstream endobj 1503 0 obj << /Type /Page /Contents 1504 0 R /Resources 1502 0 R /MediaBox [0 0 612 792] /Parent 1463 0 R /Annots [ 1499 0 R 1500 0 R ] >> endobj 1499 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.501 164.485 295.814 175.389] /A << /S /GoTo /D (stand-alone-windows) >> >> endobj 1500 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [290.06 140.574 387.743 151.478] /A << /S /GoTo /D (defining-a-default-view) >> >> endobj 1505 0 obj << /D [1503 0 R /XYZ 71 757.862 null] >> endobj 1506 0 obj << /D [1503 0 R /XYZ 72 660.06 null] >> endobj 1507 0 obj << /D [1503 0 R /XYZ 72 642.127 null] >> endobj 1508 0 obj << /D [1503 0 R /XYZ 72 588.952 null] >> endobj 1509 0 obj << /D [1503 0 R /XYZ 72 558.441 null] >> endobj 1510 0 obj << /D [1503 0 R /XYZ 72 528.553 null] >> endobj 1511 0 obj << /D [1503 0 R /XYZ 72 510.62 null] >> endobj 1512 0 obj << /D [1503 0 R /XYZ 72 492.688 null] >> endobj 1513 0 obj << /D [1503 0 R /XYZ 72 450.844 null] >> endobj 1514 0 obj << /D [1503 0 R /XYZ 72 420.956 null] >> endobj 1515 0 obj << /D [1503 0 R /XYZ 72 377.131 null] >> endobj 1516 0 obj << /D [1503 0 R /XYZ 72 267.097 null] >> endobj 1502 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1519 0 obj << /Length 1764 /Filter /FlateDecode >> stream xڭXo6~_!`%):a[ W`HX,yx,َ-}Ew;/ލǽ_g2h "ł˜Iޥ?ܯLԓb?ǟuZ)&[ 4OM:u&\ޏfG wZxL?P $" ЧdF iMTX HSJ!&yIƚu_hu ,B6ke~f|G`)vߜJک38 6G%sP &֓ u`b28&=>!LE]4U6oj̜;CL93F ^{vMLa~ &wִ*8]vkZO28EH&u]@C+g5Lg/=XNf2S&nF\lk01װRj&Ʌz)0s`Ye5:wC-^c2 R˗jynjw)2BYc5bIwM㨤Kc meSю&M.ү^ =fY;mg@#V rD r Tem-m2vk~V ± ECڢbmunOUd[x@4m:Jj]j2(4bm 'm:uwYˠ+Q` EPx}%)"hlkEF,߃zS&p4OCl.us$;U-Z>hM@iO,#3?>~a-Ɯi8B՞w,~bRLAux퐏 v1t6iBjf#t);>o̭ab#ԛ 0$c]Ǣ4!4F!/-[=HO#I<\?@"@OhtDD=寧,yC  OGI| Y/6$xHA%>Jq?ڢ L&.gaNL]+"%Y~KkJbA+#v_`|59gqL2wV endstream endobj 1518 0 obj << /Type /Page /Contents 1519 0 R /Resources 1517 0 R /MediaBox [0 0 612 792] /Parent 1524 0 R /Annots [ 1501 0 R ] >> endobj 1498 0 obj << /Type /XObject /Subtype /Image /Width 302 /Height 213 /BitsPerComponent 8 /Length 16079 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222." }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ooBZTt=,K$rkG LHt@U^_k/yӄyO"ZgGkTԢt/&I$U*@wf 2@f<93o.ſ&0A g{/i Q$N_/.qB[s=z+待-,{YZ;1 H$qy'gD_h;VLzw6LzwƊ>Sñ}N}NG*3rC}N}N]J4.HDde('ߊ"OcTݬsag/ӿag/ӿhi#m-+8~L2SI,$6A^xñjײDWs2l'ŕi1M֪%5{>gD_>gD_;(cy1_,Jsē'e`wc9Ge;gRtgD4Wa!>8oCUU 9ޝ 9ޝkVu w$QIpvlD* Apy"xAH|qs!c9=/e9`9^Ocpg}N}N~rjp!-ygFVfг.0#Q{$;ag/ӿag/ӿlK")bioH{ R lxxni[֏!7Iaxp2y=?9!gD_>gD_hqag/ӿag/ӿv4Qqag/ӿag/ӿv4Qqag/ӿag/ӿv4Qq7QV|68bR-8os?tIƕ[Z-ʅ-7;mFHȯD_ڏrſD#\ʫTxiRit@Y~WG(ZW,Y?z5Yotᳲg |p 88<\`>5ݬ=pE0uL&}̠.@€X03^EfoUc͵oVYOkmks$Wn,y̥C qǡڝ,v7DJ]^ܢUaoˀ,09j(NtArVwdn7{V*¯u4QCwA?,Gk[u_[kޗ-&Y͹2qqHȈTxxXz-c?౿EcC_,o=G"1/7vWwǨ[?;Xڡimi?o QwǨ w[n.׺'1"l>ndlr_(652v5_*6;c<[?;-cw_ԁ<^;"ц`."#M$g9M\zW?wǨ[?;ԺX,vWwǨ[?;Xڊ౿xxXzQ\O"1/7o Q`;j+[?;-c,V-'g]4e3Hmem1#V?č7ᖇwإ6߲\'q^SOCqPɻl/?]Q?yC Ԯ*ŗ4/B.~bs_Ȳ.~bs_Rp^2$}w;.#P&"EC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]&?q뜕UPrW0G_t@Y~WG(Z_fQEdXQEQEQEQEQEm*E J^I$`I$wm#ĉqf8' jOqL4}O C*VCՁ6\Kk46sHk 8.ʾҚZh^,+ٔ'V*!'suGY .bg"gO08xhc#t/ xMJT{O ^Dp@FÕF8$ݍ!o5Honگ"F~a+XCDmqǥfRUy43Py3-MiqU &}APQʯ͌笾[Z<:yLkhs O+1`ܦ.=+΍6Xi AU3`UFqOzU/!'stϼ7[T~>\]?Y~>\]?Y~>\]?Y~>\]?YgBYȮt{'?"2k1ȡi_̯+2: ȫה?J?yC Ԯŗ4/@+"Š(((((((4Ն]ŀ0X1?^MYM->;U6;3$GJk}>?H+׬3pĖwR o#qRckWWGG_a7W[>$X͐T ~p ]?=6>?H+׬mw?.x z>?]??c#^z?.mwH+ף#^]?=6>?H+׬mw?.x z>?]??RYDx_7"k;H\^ޭԅXDaGéYO$HJX0x:VŠ(0w^޿S^\[Yq#yDٵU#LZ <&M$j0qš{Wy$|O{iivqi "'<`qT-|{^>w  p t}Au t/Wn.^ n6i%Zx[ ݥܓIw2H%Eڐ Hed|}̆~rqXo uv\F0\^8iJH99 9_kDҲ}/XZrCxg0H$[Yaaw92xV_jZf8[mu@ӇгngQUps^rGҾ7侹{^p,P8yݨ,?Ə9䛸$IEG/a4yX+$<,?Ƌ$<,?Ƌ$<,?Ƌ$<,?Ƌ"Z?(Z+pːGQ{ך|cBE]_?SWduWG(Zt@\5/ViO^p5 5X}@C3U(((()HQ1hn:C{}E$x& wؐ_Tq KЖMJ9FYj$l[tv>jt˳tF浵)IGJd_jk ^};kXa)ެqݸ vX_lԓ6SO‘a $|1y Ki7d~,S.eu@,kIf k3;[T+9P+ҋEdgkʏoQ`5VVz3բ)ikؓY,ԯ,lcnL Fv*$eMPq'8= `7ꎩ6on, Fc+յFonGe䍔~]v1/s]&W.Z`sE T?Ul\|fڭnyox-8y|fNc|cZFXIrsm&'a Ёi7@`ݵ5٭й?CQo**j(AsfBG5'騣k7{`*4_ ~ucBE^sPrWnVa _*+R5"^P+e) (Ȱ(((((na78lsEm/9ĒieFa|ݘ+Z@d!G:yP?w>~a{r0M[tMV `RFчFWRO պ( oClbVMw*$7'vI9jk5"]0_ElZ4SjJ_GrPV;YWT`}5rk;I洖HI{G2@@`8?+ϭAE_CxoѼz7k>=ǣ&ѿYQprGQZ?(Z+>1ȡi_OUVekE]jW՚SQEaEPEPia(5 VSytYU`]K0&5*|A.=0rOEEgȑ @9;Y-iU$&'FB~ok}zlMeqlPj^@7ZdyUyv7|ٓM֠կ6m;VT+ԫ @F9LӴ]*hzw%I<: JJ?g:޹]XGẺTin 5er2Qq'zR7|DcԴ=TeS9!p1 =>M<s 5-֔wQ媯5V_c^[K k}uuaό`myF+hn$y׏ Y}U|[6[fϾZ @Utxfrrt@\u/ViO^>l/͟|u5d>l/͟|u53:A8,^<~ʹHCT2)^Oϻb!w7L_G?#7 p~fJ/ `iyϜ?.6Go%z_4>r<_Y_4WN?#g9]fWN ^A8?3@^l/͟|u ^A8?3G%ziyϜ?.6Go%z_4>r<_Y_4WN?#g9]fWN ^A8?3@^l/͟|u ^A8?3G%ziyϜ?.6Go%z_4>r<_Y_4WN?#g9]fWN ^A8?3@^l/͟|u ^A8?3G%ziyϜ?.6Go%z_4>r2 xJd_O%uEE=B'UU,O@+=E+ib#?yC Ԭ ȫה?JYzJ tVRGi= ɀvoe^:GO^*2T2B1Rkt4[axOHTUk9$ԧ10e6푻v8>զڶPڅ12$~F|l d`wrw~'4 bShZTi"7.I/̓^_K 8N`;Pr@GZ̽Y-ɹӧSt wPTvt8zP:Xkk¥7y8c#ΉE-ɐ䘖 D Fz Tz[\yk մ, 7^dW)`]$>~VǑp&~^۴gWR8ݻZKWX~#UNK\$SFZ4b; I"w 9,!>jQKgi3LIRݰpv-|5jޥj\u}"L$sax]PM=η3]۴%AY's 2 FW=GWhA(UL <()`Rp@5a_ݾcC ;˖˾i ds8f~ MK.IX!AnB~9ӤQ#%Adj>dkZO+͊}8 +<рX Ae{` l2Xg<4t׌=~GQxM Og-];Y i.Gbj>?ͧ\'[}I̱G'7 #63y `)moRmBC=p]D*L`Ar+>W$yR c\UbO? oo:ıJeenxc[/[YX角A#IR1)"R?հo)  /g#KQKrLLdwQs ˪Mmj)k˧(EXveb8;2q4wm5{m?Ғ i9& Sd#,n<sE{z!tX1r酯Fyg#͍#ۛy?pAܸ5'IJfv3Bo $?62wqlkK/ Hn2c 2g1rw |/  4e4rAE+ +L /?_֥{?[Iu{>d"l|rqq;+-kC&q{O=)&K=f8In-\Y)&V ]2 ڀ?\Y[̿ k8K)HoQ#K_0fޕj\ua^Z5C04>XX1 Je`f*A +Ҵ6+n/akƭPR"@r^0GYt@Y>BHС1=A?"ŗ5/Bj*?"?",?w??w? Ṟ,[@ݘt?QMXJ`J>%=кI$|LgoOT;C(;C)ߞޟs>s.ooO{z~j~G~Ep-oOT;C(;C(=?S4ygoEgoE}緧Ə=?S5S?w??w?O緧ƪ}!}!]ߞޟs>s.ooO{z~j~G~Ep-oOT;C(;C(=a8wxJԞ}!dӏg%zSma Nh2^5F[;y[5cX[6ڝ]IB*A   F s ^j~\jh.@0<0u vZuwq\-5W`V(2w\'^^fzuf:e෼>%LAs+ k2kz}Z}ؖKEŞ!BV!GNavաV,Dj <2X #w VI+XдiڵĖNM,AU頒u`Шʤs\nj+EsX2#(MNԻrC!rC3񏝹OT[yÕE,DhEPI>fڅz}\SFIp6 XO#5M~TIt]E,-PD ?|,0aY=?#GO沷{t -+sx끃[OT#jy⵷D9ªI1TnXE Veg IqwPiPvZ̓=2` 8,ztv[3h,@Y;Yi]ЍX3wWi$:Py"kX2dn2/B䲂Aj<1+A鸼,g<4&'eJ; =WMa- Y!ÀQBxʜ{U6ׯhM$FY#0"DnG GQ+ZuMJ!yF9?,4l+XђK,w,GqMrd .0A0yZEŪiv )20VaQuK1&_yys=u NKFYy.ep,pyjl<;.cQ6b92pr|'֓^:P^[?oV֚y!SlC|W3칚[ S77|.@절'מ h$pꑢgcu$W#/SVRYVكI%EexGPP*uw1A[4[M#,3e >zD~/e'lnbk9ĸ툦)q@EWTgiwH*#Nq}?Zb ֯n `άq$!c,sMp[%"8M%gi+Koe%[oα;DUZ@ +7`H'#-c]Z5m|M.q:I#rNx bZ=dV ȍ۵zͨ!qg[{x#R$R w1k6`Yj>B+bѮ5in+;y<#kFT8?0=*]GzV,1\T8) ȨA?yy5ˠ,[E%(/1SQrI☺Ѯ4tLGXc8/`T(I^ZE#ȑȌ6X~WcBE[woZyU_5rndQUٓ]3V>#<=CM]K3ZӟEQEq,Y?z%QNEa G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_q?/DO9}+2? endstream endobj 1501 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [467.773 463.66 540.996 474.191] /A << /S /GoTo /D (the-view-context) >> >> endobj 1520 0 obj << /D [1518 0 R /XYZ 71 757.862 null] >> endobj 1521 0 obj << /D [1518 0 R /XYZ 258.13 550.288 null] >> endobj 1522 0 obj << /D [1518 0 R /XYZ 72 516.25 null] >> endobj 1523 0 obj << /D [1518 0 R /XYZ 449.299 400.686 null] >> endobj 1517 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R >> /XObject << /Im31 1498 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1530 0 obj << /Length 2368 /Filter /FlateDecode >> stream xڝ]sݿoflLi:it7J-6}I>%ニ~/A|/Ed,B A,d*jFa]IJ~mMCՒG)_G7yk8/~zQJ̒( _, -!u >tqk|0S X GEp@]PWyXljdY͢ IuH( W&??hc~rۭgς3*?vc 'ˊ`mvy5gi΄05uۡqqsv2dW\?qoqtۙx⺶x0%1^ '{BpRYL$>ߘގLЛ_hN,R@ j%sf?>jN,lɩvQL#B4js꺺jG8?/~Ko`3:XzXz}y׋7/ 3'ݩ1+s{9r}#Љm]ݕ@{Mlzy\FZŒ43!YhF|f馣|RS j{+PB0FBn.VY0[uWo+o\pm:eNYfl#N$|O8%Qu mܪigchM~;% [HێJ-bW:Eyԓ,Lٳqx8rw4#–fJj8&XȑZdb\3\5 T)W &@WĿB㚦uQEN4%\!aLtكe~2WsT*ծt1jDfq fV&0FiM'%(ǧv~C9ZgscdݴfB6'fznB" MJrBwu ;,?[]]n V=Uٰm9 cqxo*䝡,3-M,҈>T {0‡1aCIArMi6)md64TEX)sJ5v#Y45Dqq7M!keӰ7)BWajRP$>b@9p%`p_Tc f2Tv 0JO/1EЫb -BI8&]Pd^N8I2(BXN7?:|:T(ӱJlnP9)tV@C]'3uwFΙAEDFh9]8*5v r|sr];hB@o1ֻ*fJ&.G rll7"R,VPCmņn , Q}3轞ǓAAoSw*6\qUNڇ*ԵB&JCEotE"Kڎ!(y1>ؾ릛3dlk@ڧI>0 r]lBQ@ߣ.P[Ι!PbA goi+'g=(RˈIVʶ3lV6"qmSګ'jR.oa|1YzAJ <wؕ+J|yjٴABEu&:u[cÔn֗xE9#-LsJ"֮OvG3g8{g@iʊ%wdXLgZƯ=4$CRP%[MmC˂&GX   ?# GgOBi_Hý\K`;dcpM )tޠWL7W3zvM(΅b8Z1"|ˏMMk!&G'?IJE endstream endobj 1529 0 obj << /Type /Page /Contents 1530 0 R /Resources 1528 0 R /MediaBox [0 0 612 792] /Parent 1524 0 R /Annots [ 1525 0 R 1526 0 R ] >> endobj 1525 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [165.389 228.404 174.854 238.859] /A << /S /GoTo /D (Hfootnote.31) >> >> endobj 1526 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.463 88.143 370.557 99.841] /A << /S /GoTo /D (tableeditor) >> >> endobj 1531 0 obj << /D [1529 0 R /XYZ 71 757.862 null] >> endobj 1532 0 obj << /D [1529 0 R /XYZ 249.478 463.242 null] >> endobj 1533 0 obj << /D [1529 0 R /XYZ 72 397.17 null] >> endobj 1534 0 obj << /D [1529 0 R /XYZ 72 287.594 null] >> endobj 1535 0 obj << /D [1529 0 R /XYZ 86.346 101.444 null] >> endobj 1528 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1540 0 obj << /Length 1511 /Filter /FlateDecode >> stream xڍۮ6}"Y_r-ojۇ 8g-I pcMrBՇ݌_l<4x}xy:E= n; {bYvUʹ 赅x\pM)]ZCߝtN^> )P}4% Ҭɻ*E7rdn\1VQhi*0W!U; )e_"*GH\>jOP(x7;; ء +qRM|3-#T;3!Ҵoۯ;yII$a?ai$Օ-".t$R|\x%qK, GyJ;S\Wb]fgk-A^U1#;u8grØBb*<]! T#lDrG_gZs9(=nLgf=7`M+ޙIYN FlpM&]%ЭG6wO"&{[3 x@`nfa|1m,pI]/ݻ8fXg՚ob 1$˙ҸݱNHNWYގ۵S> endobj 1527 0 obj << /Type /XObject /Subtype /Image /Width 290 /Height 283 /BitsPerComponent 8 /Length 13679 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Aloou;ޱwKQ@T(T :TZD\K3%qRLldu5WR٪Ccn7ep1 OZo种jʬWKa  cy6< OZu8s銊 㺇́ǹpIR?_QOzx֫ G#rqrUl OZw种jEG(^D]@,~* +;RcӀD7Rx~tWsw种j;ֵ]]ʹVvqu7I/2p2H Q w 2 rɍqN.rw种j;ֵ]\l#3jS E2Կْ4Y?QxOzx֫K1GJkGP2@2۶0(3Efہ'80y6< OZu K) AE/zbћ f:gzQf9;ֵG?oZ2OO&.OO&0y6< OZv?r4e?)f8;ֵG?oZ.OO&??,xOzx֨'='kLg0c pO qgþmJmFa&Rmn?r7N9[TG_QȂtYywk|<"DfzӿgV_QG<r 0|;n?r"*?ȣك޳(tY㕽G<TG" MWi\gUPΚV(>o+lQ ѷuoUF*FaR(J ( 5- Qvӯ;F$Oj2^ɗ$rOb}{NUTWyUb6gigk%"xI@aV%݄2a竫Cuk$8',;;O m!D:&AG8^Iqӭ('ػm+[7F"Wp sܚ]\&  pxCqgt$*U3gTn3KKH7DiV/x<3f1Lܪ7$WP݀eA xʌ*#ZO7'}?hx~cvW QWp3'Ԛϵe5ϳ?ٿp\QjkIf45ϳ->Օ֓>hkIf4Z=5sF}+'}?֓>h{jڌVW#ZO7'}?hxϵFoG#ZO7j3Y_i?ƏFoE=W>gڲٿi?ƕ=Žt+*Ei G sSՔ>)sa]KKf%UU~ u/-7=WV?6{ RHꑢfcu$vw̳ĀPj{`DWWIU_G kUӵNg1;-"[is s!R:$xl:8?n>SN+O 1:HQX1b26= 銒º< u d},+a,1 >keE[v5ʯs:RJ{KWm]ILsǧ }:[h Yfu T-?:n$H1He@mi9 bFG҈do#?6DyR3a,~z{ 7 ڶ#hrY r8-EvF2}9QKIEZ1?Uq]6W-cGeKI+ x "rO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.woAa]/JʸoE46'7kig(w5YH( u/-7=WV?67@w?ԿjP_Xۺ4jQEAEP\Fqkky$):|6pۚN$f ($} tq k~3Hd'= .?t7Pr:/uM[8 ̴ُBbb.N紙|lマq~}UKj vUջ"}ʻ,rç0w4|=.?} O.5 /mn9Z BX.Iiughg6|(c'`r?>O0??4yz\U|;,-=@JnMYhP+pF#Ew/xFn9n{ Khlt;.52?7B BkStmi&9-<ar?4yz\MI$hВ+$셎Ő-8M E+8>YvgcT ŗ'p#-&]`etH?:~;|^V]wʋ[xqwd0|ۢ W!su5FΚڄSCix,F3Z?\ߘ—/Q(} Igjgڢd!Q y~UUIiY/HgǵP*䟗Y9s~c ?\ߘ‹.w}Emݫx٤HR` <1VA.mum5EH$@HGne?1z.EpSφLJRiU 7e\f?7';p=ture?1]ﱯEde?1z.EpkYz.G^A˟Qe.VG^A˟QrYw ƽre?1]ﱯEde?1z.EpkYz.G^A˟Qe.VG^A˟Re?1]ﱋރº_]p"[{ekm,8棫)QEUF*FտºUJ`wS=J(* 8ʰ!+AVFkDvo,8[v`q#$zU_VmCwsj184XUlCnu1+##VSPgͼJ9!s]!\ȬGF#$WF[mo3O$I: rNѯύ7G5hc^F>6?Mh׿9z+#C4}^o&P5謏kc {|l!9Cע>ѯύ7G5hc^F>6?Mh׿9z+#C4}^o&P5謏kc {|l!9Cע>ѯύ7G5hc^F>6?Mh׿9O쫆 ]=_m/ }r@棫)l|ESºUJ`wV ; _[5To(zmL5(Ġ(?ROuMu|ja>p:}Gvy麅\@$gu%hғr1M$H2O)"[MG:= 45e -y@d:r+D(H8t_ګ>ӻZjV3ϵ/jZ6# ,KpUp9e&|;e~ .E "w+_w|3%w{.mo$!Q*SphFq7UGϭ?ƀEfjh_4U[ګ>w|U@\ҢW}n4jh TVoϭ?ƏU[sJ_w|.iQYګ>?W}n4*+7UGϭ?ƀEfjh_4U[ګ>?΃º_]q^&m\j`Pqw vπ(`}WR٪Ccn߃sa]KKf%UUFQXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEbAӿkG-?+d5ְؖ|EUU7,[idkwW< ; _[5To(zmL46O=Gd/d{'ߣQ?UIE5Or˜?UT5'Vݒ{:u)VcN8ϥS^uGu-p7Qx=ف?U'ߣV&&hnX6"_1#ocjd(5(7e7~Q#O`^?*h*e"}f(tخX :R\xE)EG);X_:*Q O Y v56>*}WR٪Ccn߃sa]KKf%UUFQXQEU+1N 223;fpd<"HRUdpxV*S0\\[Q\UlU{W04O%LQ%خB$HǴ\nQQR]Ơ)3Ư yGzg:%X)xT' >c5E㹹2 p6Jq:YYټRDF#eM#AOP3`*]xkڵ d3%U`]}0)su,p^خW`bjMaݦX&TQM'zKԧqkILԑQWhs9X>|R<&Pp9a偓4Iyl{ƒ/ Km Kg#?wtQv@U :KEQEQEQEQEQEQEQEQEbAӿkG-?+d5ְؖ|EUUF*FտºX%$wIѬJ2X=wS-]ݤ4sq,4h$d Ps:9e]I0[CqngD*'x5++[}K0I'8X#D6DGriGnfXC>77bjϵ+ RQғK;X\KҰl|e{VRSIד0@%C;9ن ]CEDm-Y5vbRJtڄ(NeuvdI$3-`189h|G|jD2Il\XŁc vc"}l\>:dc{1f1Gf2Sߠ# 1QR0((((((((((( c\w?ia];K!Ƶij (G u/-Ȫue`NcFGۺWR٪CcngѠ`YZ̪IY H FImzbXpxxV%$f.c,x$&UH6vN1׽OEQEQEQEQEQEQEQEQEQEQEQEQEQEQEbAӿkG-?+d5ְؖ|EUUF*FտºUJ`wS=J(((((((((((((((((G-?+d5ZWNka,(sa]KKfG⫝SKn`ex76%C\=|=UYVeh5[EynD~fxNaC^M\6 j6 j/׮o*NaC^\w>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAs3ZkxI#ԥ:J@SnGZ/Em_yxs=w?; z f>jږ.T.]DY.iX/,II84Ka|aA-ƨ endstream endobj 1537 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 141 /BitsPerComponent 8 /Length 11325 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{-T4mpI?ٿZ8ȑ3FjڴY1ވ%X&0Gx=qkJw,?߶ ?,?߶ a7o\)kW&n 8%93F@G?* dfbUz!?,?߶ ?,?߶ Ҙ٦ב ~bQ e춱%Ķ6FtPTێ8UEM}iӧQ^)"cltH*tL>P+t-6+Xn|gNK~po_/Fudž[x!w7f̘Uu=ZLg erGi!޿_΍n-oR$i7wӒ7d.eVNt4T̖F=sFuU!fcSj\BGxmR be%[7m8'Kegnդ"[hXc1]OڣoʏGߕW29[Y ʠ:ҲeuK BۇF* )T~Rf Ue/ͣXVA2_BKJe0DlI2Y8 7P<2 6]O~ddp?/QaisushUsyyOﭼSui(`kͩna<^Yr 9]ty)?7 h,3W头rY“es{ub֪fPF0JGy}+tWMfo"5K\Z^xDX-WuisFWn87'=;VKw摂qS~o?F CuMV#k.8r7+dg(O >}S5@D39Zoy}u3AIt2.oʒ$Ica#\)*ϒy}SX[\mem+k*4JOD*TsIZ>mOJ6h8Y r:-ORhwoB&(br13slaty)?7o̿<t}}oDCcظ@U: 繭M/cak2YsTJGy}UEZyN~WJm&կ/ne5 $9JƣgO(m[y>P(}Bvs~֯/+I/eK9g|e]Fqx}Nh9~В]%H 1cfp:S~o?<RD ZOⴒd[݃qkigF a~zz{Vגy}u͈Mh֖mJ@t :C݃L0CtL U ]V{kYB(P1 ty)?7cZ4>Fݯr {- Ȉ9#LzAu6Vn1ӂbNo isomokifbfX̛>QaA]3:Πb6 c)GU"M~Q7.8+S~o?<V=nS՞?7gD(*0u;9ncM2IWb:O<%?+UZwjݭ]*5kܫmk5 *&ݜg'j :][7z|%DK$X#W䶊X7o $V9Fp֔aV&Rrs:8jKu!2񝛛vA9j%Ruّ$9y``oVn2?<%?D7KI֬.eE-Jy0T͂;fV;wisml-Ep'ۊOS~o?δUhroӛlWk_]Y5a (lsJ}]7y}bkrS *iTʝ*ME7{=?v$u߲=?>XGaS~,?:oae{tXQMϻ^ٝo/`232(B'A<`,C׿j;k?+7H!losG!?f5#j+ vMХי) /0 M$qȐ"#s9è>*dҼ^*xM녹xnmUAŒV~ xL^-vHY }ŸqU?bmɥr<։G=|=ԦyK7+|ҩ01]k{;t <>Z,:i+ ӣ V,sKT֒wKt޺./zǼοB`KAs3,Rc qڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|QaeTARBuOUm+{XRUTA*?Oٍ:^1T!eך/=,/p+3gLW'x-nַ5/)"F#tIM_iv6ӤIoIgp'pVcY}$oӃZݭ,r¼zʹmwm}{cqqpw6)'v}WEiiUm&%7u sY_iiiζ&?)i}?&?)i}9t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,k? ̓BuOU[R9eӡ皯uOn oe^t\lǜGN?LUԦ)."XV+斜ԭcMJ[cm$[gFܸy5e8C8rGZѤ҂_!80rh Q􋋣X3m;f Uug}gOxt_d۲ͼm1ީvȨߘ֖/ XD*a E8sI=pOjXL.EK6Z_Z}! pOljgqHln!U( r;pkGT6"ZL'E(qeO굟bxYԘ^g$lUٜ )=WNu(kxo>iyPm9\>M:HP5>D9"6{8z鷯TJ>})zx~tg1"ѽ?:g1"ѽ?:g1"ѽ?:g1"ѽ?:g1"ѽ?:g1"SE`*ki/o[KZ4d.W[K_K~[*O'u _K~[(_V}M>U_G?ߖ h4]v?ߖ ?USFOQĿ­d2}M]Ŀm/~%-k'ѓh_m/~%-ki/oY>SE`*ki/o[KZ4d.W[K_K~[*O'u _K~[(_V}M>U_G?ߖ h4]v?ߖ ?USFOQĿ­d2}M]Ŀm/~%-k'ѓh_m/~%-ki/oY>SE`*ki/o[KZ4d.W[K_K~[*O'u _K~[(_V}M>U_G?ߖ h4]v?ߖ ?USFOQĿ­d2}M]Ŀm/~%-k'ѓh_m/~%-ki/oY>SE`*ki/o[KZ4d.TjX`~'?*+Q"Lo"m%Hˎ'd endstream endobj 1541 0 obj << /D [1539 0 R /XYZ 71 757.862 null] >> endobj 1542 0 obj << /D [1539 0 R /XYZ 276.526 497.788 null] >> endobj 1543 0 obj << /D [1539 0 R /XYZ 242.967 367.126 null] >> endobj 1544 0 obj << /D [1539 0 R /XYZ 269.886 150.266 null] >> endobj 1545 0 obj << /D [1539 0 R /XYZ 72 112.141 null] >> endobj 1538 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im32 1527 0 R /Im33 1537 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1550 0 obj << /Length 1822 /Filter /FlateDecode >> stream xڭr6_Gj&B@[Lij[$ӣ`׭A`):Q b68=.G s7jXw}'TsC3D(i}UlLyl !G{gƠ^ ?Qph3=v'L$#"8C`}̉jRi$fw$HVV}A+"huS v#8>hiRM\1=&[/#8ܳ pM /~Q@nPC|>e`o@n7˃K !jgf2$< ‰)n{]֮:VS[%jP]|R_"2;|w]NP$V &*Ƞq7?9_fB%9 ⭳8DtNusw}s:@]"\b"IU6( iGYTX;%@046͢W=t=@8 18: d)$!7o0%Otx={9[}[N͙(Rli$iX8]@AdIzt) päC>A@}}b]?٧{%pTpMe} JE=M_3X;ֺj@~3R۝۝SSz$wKkOmBvQ~#Gz`rUm]Q6hЏh\_}—Cj fEHFIW,3lܸTpDd$nWf\a0) ;\&h*j͠`$'ЁPpzU^̹LQ|2B}VTwbAÝKᣛjY}P0 `w놸:w@ *AS퍲^`;;X)O/HSjny4}wDG95pIRׯcltGcս c<ףnU0V/׾Q< 8ޜ9#Sn~Dz/PV83Dg8W%$A9FBĿn0d~)xOӿ2NU* th endstream endobj 1549 0 obj << /Type /Page /Contents 1550 0 R /Resources 1548 0 R /MediaBox [0 0 612 792] /Parent 1524 0 R >> endobj 1546 0 obj << /Type /XObject /Subtype /Image /Width 255 /Height 180 /BitsPerComponent 8 /Length 9807 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?M_VU2YDGwv2@3( @ɬ)|qh;)f wkO[o t17iJt i7>kl\ZOϳacT&s!ukvjQijV2էQ+R/s\]:Kkm|yH. Zi][l.n.KdRp|Ŕ;~lm5I|%˙NnLZ;s0|X ,nNibyEp~m@  dLZlZXL#k;s|c\]LJuf[.ĀTnY ˁMM@G y-d)bbF5nqaF6LGK C6sJpFz2Ķ" F('KYjb"d,$gY[u+?s-Q+"cQe4weyX2_h!v37:pSm^gf?fx܎G8.7ǚv.6w^K;\/7䒒HV`NO˷5gC%ݍWVgdJ 8_ߝS}o? |ѿ:<~uO}~.yF?Q? .=ϗz7Tg?pG(/oΏ>_ߝS}o? |ѿ:<~uO}~.yF?Q? .=ϗz7Tg?pG(/oγn摼IHL>KoU.!,rbYntuI$i$pY$pJg:%FN\`:;zpk6:奬{Y-"dYehz!ISI\'9PKkZ%Νok{GQ3;b9 pÐɹOde=3?2?´ GtO G#'O*(7'Q@}?+JwD>;Od Ң3?2?´ GtO G#'O*(7'Q@}?+JwD>;Od Ң3?2?´ GtO G#'O*(7'Q@}?+JwD>;Od Ң3?2?´ =cXԭu/Kӭ.纷TX%Iv GFbx>2){w)U9$PcIt޸̚Dž{Y-m/`%YT7dDt3^\j-i0re3Cl&?qAF' ;=K¶:Q%G]>X30 EtˋV62,^=1E$\# GU`fw ϛKikipima4q**#i&ø7piMц@mjK}`X߇ǔEfџBm*Syd_~}ΐ r[xY8] }^mHvglB5C#U*5v ={i'SG^g¦y#gؑ";6 (/ouoƺT[Z\\[+wZ2?2@랖?5}cWD:v[VO*#dt$f6H^JToy|9 >6QqqHњ D$994AM5ВŽ6)U # q )4ߋXDM!$U~fmpyg`{N mu B r,̌@Ar KE|1m>j{%VIa97՗:}4mA}$b_%Oy|nȜ`8e=f9|_q"I $iJJQKoB0`N=fqwyOpG{qF`2e]V7\fhZkyiNTo82e- ?|4=Jk{4k[ 98G&ܶI%MjV?n-⾽ʻԮXC"V8׌8݂~(((((((((.nlt;K,MռR]Ĩ*. `K F2?P߇RdiVCPnH0K-cc0||$R5ku$!u|ȌrFsIQ nl}K~nixx<`^o1dɷ<WR Z9d#&0 $lt_fo]{,ۯ97p#4uKi$yfIED(T( ' J( *9[cHU I9I@Q@^X⹻%VH̩=~gETO XBꁝTsܱ@QEQEQEQEQEQEQEQE_hگ}fws^_|W?'5#KIis(,xDN>0=x{j:,ip6/ yqnDwDT # |&[KwvOGc;)P C"Y@á5;oHM/ wk-y6JdbW3cxFH_  4Ʃmo[;f1 tFy.`xEi4}X.$wZF  =[F'<eݧ5s/T_5MMH뗰ME-K{}5Z3jp6UfX&PPa'8k HݒV3p+dۂ66#|[ee㝮%HHFM1]A8R)?'. Yç$hκbc jEfDb'Y(zͬ3"̲l{Mf*1#~-ťnݒi-I)MH# +Miʉ\ZJ<׫ÕǸ|g8IDnfwRE2Ck +/ZυtRcYlc(g@ qkR ( ( ( ( ( ( ( ( (1Ii6IC1ʜyc9ς-'Hɏt;nc" V3٬֗[B&R`Y[ .X2-T4nB6vGj$ -yw麜O+.m Ѭo2Yͪۀm<~Yđ%>w{hNT2fOU!ao"׭4MKL@Mٚ5umٵpWh2ǐ3ǷYѠk")n/dkҲyq\|f"՛ez|'gxzG 0)jmU ȟ(w@*1^kɪC>MA61N y-=nv?n0׵-CZ 84.m ٚ(. f8!׵-?Z9-ZX-QU")f}8'sKMya+_iirѣM8w6#q,mC |5Uե&{$b>42Pܗ ~QD^vm5%[@[Y"[9̒8W&*Ep]:/vٳƟin.-OmD&$Uf[#6rXtjK)E rl"*(N>@xU g˻缕'+sl ev*ڠ brIs5e:z(`Y%vT*sJ)[QQaHI;|U0͍rP zKm:k8$aAnorLغ}Up0JɤCK6Jie!!ҊZ$r$ ʰͲ6_s~mytwt{K5c(AS$s~a?~dѢEN S,$0Hbx{L|;6[yv؁wc'qZ4>%t%h!1E1s@x]' PA[QEQEQEQEQEQEQEQEQEOR5ku$!nqpO=]{YѴG#ڽeĮ+,[%~n yu<1iux=fL}BI tZKulQ [Bf[Ab}C>*X$O'(9Un.ccSG 0"׵;y/56I,RksFhD|1Pq]Ujo ![p@BTNvN4H~-n7}{c8ǚlg&3\3%n5I*@ *s^ ttXɚbDH\2i QNrx_Iɞm3Isw,đ1ضq.v1co>Pp5cy$(8 Т(((((((((-#M;I.JCmm%Č2#Vm* crFnA2: HI#FyV ްOle'Du xYŵ q.f $d-sqxs\7IXy)-QIYT9D|qXXu~]I )<:ՊgIԠ?exzymtK]6rn޹cS&J'dg{D4 *+۬x""Ƞ$O3њ8nbgw iJ!,B qzߊ4U܉{nL2#d)wq%'\No>DadO-13*sy QEy?<+ KU-twxd p͸9(I*<4AZVgu7>a Y !X) ԡTӶȗ N~i=ϛO 9ϝ獽{i:\1_M=٢yIm%XU Md`jV8X+fTKImeiV6ȄaS\WVșL-{Cr\%Fyےj~(tgw4鼽i,ĥp:l3W%vRCZM(0pe;` <)K{}wTխ'v- HtrM9` sNWcXk0AŽOderMq*`HY~ $ p t)ѯo>myM'A!hcu`zp&M,R "Hb(o@89ǿ^,ϺP{e_fux,V߇徍de #0:> endobj 1552 0 obj << /D [1549 0 R /XYZ 276.526 443.367 null] >> endobj 1553 0 obj << /D [1549 0 R /XYZ 72 403.362 null] >> endobj 1554 0 obj << /D [1549 0 R /XYZ 72 287.351 null] >> endobj 1555 0 obj << /D [1549 0 R /XYZ 413.984 157.546 null] >> endobj 1548 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im34 1546 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1559 0 obj << /Length 1852 /Filter /FlateDecode >> stream xڵZs6_[Y7ޥN;msw*$`p7]!!v#G_bJ8pŷ+Œ`uH Ƃ+c]Z(V:kŒF*d{V.;i:uEda4-E8 ֛wp@F,Vc;jp7]`#`1ђ<8G@`Y3N^/Z%̀ai| SL cWy ]12+ H3O_Zf@ 3 2Oy*J3`Txi&8MP cxlxґYwI!"B"Xj(+0m]qǮ ]Z˞#NXLq!Uv\@ ĩcjw۔܏+Q)n$a`IO]s[ɺ$UU.k{_:y)THsRH[$ܔ&h1?h1R殻e7T7H;k]R-]n{rSvV:E;ѰuVǸEyѾ 0F_UY)Izg.olq۾k^?ؖ9"Zϛg]A6 W`c$-MQ`戫nVWz6>X`>>d1썼+Ɣg|R8"9_">=b8R`wMj?}?{f7ӽn»Z;Yjz;W~8P}%OD {Vo6+UI2I]Ydi|ggsSd}a[bFmҁi|2<۴LۤC7 <za%/]^:$Bq,c4P?!xVYL3[HwO|M,]j 2?H- NqrwZh Fޥ~pXƘ6 ~Li^tHS_s}G\b{W:"L ɂ%+I( t<"/Fb_BlMK#1 &(#,IidɟzG߱_]۶BmR%G1f"fW0@;e5>^cʐzuo.+,&WOQKij+l,;s(hU1C G~49p?aN\(Fԭ" d-`o>_p٬! 66 endstream endobj 1558 0 obj << /Type /Page /Contents 1559 0 R /Resources 1557 0 R /MediaBox [0 0 612 792] /Parent 1524 0 R >> endobj 1547 0 obj << /Type /XObject /Subtype /Image /Width 396 /Height 263 /BitsPerComponent 8 /Length 19571 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ooBZTt=,K$rkG LH±th2X7I rLmdXsd3 'AI-5Ru Rۤ};`噔$ea^2\֭WI=S8S*ӡ/i Q$\ܾ>n}&iwco[ kK,wOqqKiw2BY'YY ;an ^ڷ?Hv//i Q$QO mS>d%H,TmbsN\x sq;YsфҦK* Ͼ2C tMnSuK6X"򢘔 8rw|wȥ3Ò(_??;Mŭ֍ l"\ _pl $U܇% ųJk%F)],jI@s gkI8+tZgG/i Vn+˫4'S,qcjB>d1sry`> e4G,腑%Ƭ} b?#Iתܟb"ZgG6.7PQegTYA g4 393vyb;dGTVNAZgG/i Q&:??KVgDzE=@-3# ?(lj玏яVgd{ZgG/i Q&:??Gg?(_??&:??F#{o@|Ѣ|98ӵ? =F1aB6*H@q֏mVx"&ff%W] S$/cWu4/hMo{GpǸ ]hqGAߍOG]Etycx`H#rY kERO.#OЙ' >$/c]{Jc'Ld =OxrCi>_ {-c^=+Yi)3dR;gu~U4sF 2J2xԜ91tN,%<:݄[RYH@=};kɋ w43(?h0 ȫה?JIy\x&#;]ɭjx/,8@!dpASZv,/&hcIg`"GN:tVweX'jwS<5Ͳۖن r!y9LOO Ly"2 r )t̫ii16Qo`w!qc^*߄`-KPKO%S]zCey5N`sQX \lZ)7nT*^AAu-!,u;خa$*ǵhEV{;Xa)* Mಐi:}`-aI%yس3`I88?S=Kѽ?Q? ѽ?Q? r?7ׂ+LF ^FOO%{Y9z3|;rOGYcE';O+G_*+Rjŗ:i Їvm~W(ߕ |c;oSQEvm~W(ߕ .?c;oG?TQp!ߕ >i>v¦[#!PArcEp~(|c;oUt}yힽ:V;!ߕ >i>v¦vm~W(ߕ .?c;oG?TQp!ߕ >i>v¦?Q;O+5#2b@$Evm~W(ߕ \ݵ7мH(5~|c;oSQJC;O+}|MEϝ_vm~W*j(|c;oSQEvm~W(ߕ $uf8?Q;O+^Yudf^j;!ߕ >i>v¦vm~W(ߕ .?c;oG?TQp!ߕ >i>v¦[㶁teAoђW׈|cFI^Fq㿂z߆UVekE]jW_gM?zQYQEQEQEQE Lօ{ 7+8"6$|c*9u\= %2:v3xj҂A$jh 7KK|e2:%'&km+wƷ/l&Y|ʂNݸJ]x6zAun F<iݠ2<q=φ 7RJ,R d ˰;nI Kx#PTpKI ) ((+>1i^ $o#}x'}^ ȫה?J?yC ԯ"eΚ (,(fCqgu{qeo,we/,ј*tfGEfڼ-Ͳqqg4E@<Ϙg%)ӰtW!cIo5!xG̰MUa&I-6l/K"Z0╶\DtY{pqc#PKhn%[F!XqFq򺃂7CUgZqCu:KĞt68 e¡ﻜI-N<}\7-qk%)3Dl Tvœ Z4<#kAZY-HE1DvXfMn S~GOw)"BƳQf7ѤM1ZqJ>IP`*GcGn9A6-ڧ 9xi|sFp$Xm*4#*]Ԁӊ39Gh0v8 N N[It>8o*GaH J׮wV:լSv-͵ɸ] '$z*LQE!Q@Q@R/ZbYݖ(c'c]I} FѲJFR 34_!ҭA^Y2#d0)?6Ox6ojvS]B2$MCcK֯2 KPg@w?srymxry<^+Boabg_$uXg9sךe*yj|OMCOk#,SDIvw8 Hr hAERQEQER3*)f!T N]9#(n-ʨh ON}(h52aRA@8yfKKF3o H Pb6tت7Euo44 E+D{2y@nRKײuwWr϶U/ס_J)5` (Q@Q@6I$/#(p:kuҡαk]G\n{c=.gy̽UO=qoo$M,1gvPYl#fߤXN\Io!ChC7?0ir+^OŻS{_[:\y8%a>c5IPH#NQ&ET((+>1i^ $o#}x'}^ ȫה?J?yC ԯ"eΚ (,(((((GOw)"Bƀ-yϯΘʮXR0AVlv>$xlbѝ} g֣."Ot#Lx:7;mXR Y:gl}JL!i1 q֤(((("(F#:R/ ѤH]AV=E>7ƐđD @)Q@Q@Q@Q@($A]x.mmm)^)P2 jZ( փ["hj-m\K')#VPEPEPEP^!FOO%{}x???dpg;'kE]jVO\G=СD,~i?+^/Bj*i?>ҿk+MEC7? 'GWx4Mj*i?>ҿhQPI7? 'E+ҿi;+ҿhQPI7? 'E+ҿhQPI7? 'E+1i^ $kIE8> x???dpg;'kE]jV_UVy/VtQEaEPEPE^->Kcx!~N8D^Î(kvZl>a y%8# cȭf ,3QYd#g?p5cQ@m?S(`W}??GtOi G?ƏXwD6;OT =g?p4}~j#'OQ?V?? *?fo?@m?S(wD6{0+~h}ՏGtOi G#'Oف_G?Ƭ;OT ?? * o?>g?p5cQ@m?S(`W}??GtOi G?ƏXwD6;OT =wm3'sU&[2J:Ō*^U :p+þ1i^ $kձќxt@Y~WG(ZW,YO^EVEQ@Q@2e/$IvwWG(ZW,YO^>]˹u5d>]˹u5s?19/?]WYJ+1I:RrzʭC<7J]A |Gs?19_ZC+E- "@v@=*C_<Nxn# %M̻ AqRPJR @A#뾞q=Y7~g?2 RT˹0$A0YIss4pAYX*I')]˹tZ_Zuiqż),.z8550!/?]]>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@L'a*O*O7ׂ+>1i^ $sW8=o_*+R5"^P+ȯYz( (8-gt7wyn6s=,sUGc$O}2rw$;u>cR(!oݷ )@V+ie>",=dU FCձS7?1 g8++FvgY&elw9JR+(X \nMau<}W-Pɚi~dBvxJ褝anp~]8[ڴ^!t. 4 PrTT2kk=Նѵs\5 4[k,lc<)#+?djkHԼ1@i>v¨kE]jW_gM?z|c;oSQY\ϝ_vm~W*j(|c;oSQEvm~W(ߕ .?c;oG?STTvH(qRS%GWK[ue9BS8]0iՓ8g50pYqߕ >i>v²5;M'E|euaU1o33ίw(erd4x#>i>vϝ_?o?"E@O;O+}|AwX.?Eϝ_vm~W*Evc(|c;oP.?EuG,vm~W(ߕ vc(];9dc;oG?TuG"AcQ 'ߕ >i>v ];?o?"Y??Q;O+"AcQwXr i>vϝ_?o?"E@O;O+}|AwX.?Eϝ_vm~W*Evc(|c;oP.?EuG,vm~W(ߕ vc(];9dc;oG?TuG"AcQ 'ߕ >i>v ];?o?"Y??Q;O+%41 @灀? C۽y)=\}rs랁M4m0?+>1i^ $\׮e>YbT?7ׂ+V)ɪXUOTIDL4PrqQQxQ$ 1Ӎ6Ķ:`]1,.vprkӨ_oos5˻%5Ca{6O &>28Mn ׾a+o+Z_؛h<ՌCsNv)Q$e ͵1Ζf\E+1CLlD?0=$m|Th_UQ_j`h 꿙 >о53}}W?G2j*/g(BŽdT?h_UQ_ ~о 꿙 9QP}W?G3s &B/g(@MEC_h_UQ̀ 꿙 >о53}}W?G2j*/g(BŽdT?h_UQ_ ~о 꿙 9QP}W?G3s &B/g(@C@01, @,n^2+TVEM q"H[uV.n!%3Z$7BM\dTn TMtJ?7ׂ+o_UԚ&ѥcV gy???dpg;'u|'?b*?zZl/>WG(Z,YO^>l/͟|u5d>l/͟|u5?#g9]MEC>r<_SQ@Ϝ?.6GPK$Ex=j{*"iz)QȧQ@Ϝ?.6GP>l/͟|u5?#g9]MEC>r<_SQ@Ϝ?.6GP>l/͟|u5?#g9]MEC>r<_SQ@Ϝ?.6GP>l/͟|u5?#g9]MEC>r<_SQ@Ϝ?.6GP>l/͟|u5Ess \8$f=yϜ?.6Go%z_4>r<_Y_4WN?#g9]fWN ^A8?3@F?΄ɉ#}x'VAcr`ٜ.zd׎cFI^Fq㿂z߆UTڇخ|l0gv6b)$Nu<5"^P[/5cyŝϞ=n9^M[{i_:!+vwXXgrncBd6D۰I|k=q\>@wy@TY2m9/>wa$|[N-2"vqXiuMU4-퍓X3#txʦIW=(0C69ʤ,vHBBX5<mŕӍiR;s9ƨ|A2O|V{[Z+m*+s I{ g *nMB M[  t{,淹{7lo" [arӂ3+Jl-h԰"n ~dV}w5;H?iE9?'8lzнyXЪI,fEST2wW9yk0ӠҖXNR s!s|ksX%[KtAoжrY*1wu<~\V'Z+ئvdA 2pXwؙ-$2R Ҫ\fKsi$ bѮvdxG08|O-Ư &NOib 4{@U>\ĝ(?A MqZG829q~oѴ{-DuPۋIQH@98բ77;6#s` ʭxK}OúrZ5qKYUi(ٷԓ׿7Mʹfɷ nqr7#8eV\>\j~"4m$(³@Yͼ>m͝+QW,;uud0WP3Q\jQ:[hDī*(p9=$ G5¬0+,%َxU=Ozw_-L_Uoֿ[֨/*d,RU؂)ho&/*_-L_UiG<2 lU( pp{{'eC2*nUbB:J}ҍ~BQk #<+p* Y2s*ԀYr{nI<1߭зs1Us:[ufh,N9*8Mj5Ϸ[4vABys/6IcJր)$;0P|sq`H\CMFvpcːp3:w}VZvw[G6Ȯ{oz[[Z儫qb ]cax礮oBE socjv-bApx玒K_ԆoђW}2JLwOLat|2¤lnAZۚwQ^-՝4ۚwni7QEdXni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7U{CFi%hN\!<~WaϯҊ(4kVwƲ0\|fU?4_j6ascw/msC*mqF@Q@?4*XBK6I;1x- klr;\p8QGZPѣ&Yqs4I D.TcPѤ!iss O oG(XcƟPѮiwIi)(Os/ R̶6܌# dpOJ8E^PѴ kI|khk2FOuPѬ!hmK$msy٘ ###_fSDۣ{qA(}^ endstream endobj 1560 0 obj << /D [1558 0 R /XYZ 71 757.862 null] >> endobj 1561 0 obj << /D [1558 0 R /XYZ 72 720 null] >> endobj 1562 0 obj << /D [1558 0 R /XYZ 267.4 396.825 null] >> endobj 1563 0 obj << /D [1558 0 R /XYZ 72 157.688 null] >> endobj 1557 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im35 1547 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1568 0 obj << /Length 1754 /Filter /FlateDecode >> stream xX[o6~У ԬHݨ(ނ+%-ƦcmJTË,J"ðD4yxn΅ /f/o2%,/e^qe\{~-r,~h>Y{Qi෢xb&.d!E#-9aο,,g_g5R">} 5̿f;h%w9}5Hc LoֹjnRBɵy}ȿ8{*~4|-KDav}J^2j[5?!R, \,9rNcj $cchhqo ]FRj&Gi,L5F60bQlV tiNEHt&~xnJڬQZy02`U䫿;Ja Y^~m)5]߈0 A} B.Q;'4N&BU ȣ~R/ @ABCq,/k^<X eĵ{ s>u^*h,qn~6HMHaZ pR}ZAo7]yFK9F*7VS}s.\v(?v6mi[D5~byVB0YF:>w Q9$KQ\.4'Ë)4Sh8?iD! ~ tR`Dy jI9,}0rpG!!MyB}oKb\ xguh|~w.6mƅ_XyYȎiLC cAQ Jbr1W^w7c;co_O ]x+on^^)$3Wt7ya:+ms8V5U-کkd!ɨ9ߎjH|s{YiG OSnjv *ǔkBto݈#mUU溄vľtǸ=schՆU_1No";vGJ+h \E8;T[\JQUU*}SE O"Ta~E|&[? !CLpe^V?Z)/5.MD j+\0ڹ> endobj 1564 0 obj << /Type /XObject /Subtype /Image /Width 363 /Height 270 /BitsPerComponent 8 /Length 10341 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222k" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?1ߝc}:%j)o4ծe6s) |\Ώ˝6rE˧_G<>[OLf1۩`M]?L1ߝc}:k(K"6\7Ac$3BP$Q Q zfP*=ĝ=y$٧f~`i? ԼS:.ow|/bY+ 6`RH96_n.dKC`0]R0F5]vMgזh-&7-&fWE< A biɨ|e47PHV-z~h?x4cl:Iy1ߝc}:y|G KY:ï ?hUNFsߚ:$wV60mYd$6ZO@c}:<~u|+3ý6{d!i$#ddO9999'vt[@;GoΛEMwoΏ1ߝ6.~tyQp?M1ߝc}:m\yh;GoΛEc}:<~t(?7ӓPyini֬Z~hǖozu|G KY:ï ?hUNFsߚvyבS>$16j 1̄F[_p9+X^iu*;$*$`$ddpq\ľ6KeM~>lvJ4gMf=~ɝ'MMN{7cWR2#^ J79{g%z4o1Nbq r2$9<{ӣ"fð'F>ݻ]gӊ͗úM孻ʉ@l etiKwͥԏ1"bNٮtj/ЋĞ#eloVZxZ7 Eʳ2i\9`zvqGi洵2܅ Wo: Jo % =!ȅ#p:}$ ng_O$ٜ6Oo~&N{5QO}~]nL6% [t[9So^g=?_ :+RT8.u9I80k\ ɹ 0e2qVSF" k!c11R͠YKWMEӄyb S8s*K&IVd)ZT$t)=H譾Z'S >ىqkbd$j A۞ +E둴;R`oVy?Z먥ƟcpϪj! RMCwP_ZٝuʾWhbj7Th_(QޣꊯWf/SQޣF?zO"(az_p4/¨пQWuE\>KNF?zO"U??)i?TQy'jT9ŽƶAY^4aZ(|_i$;;kXHR`A[X햲[8h?yϷ}o^zlvQƟcگ=?O@O}Sފ>[U@Y ~U>ߩ>h?yϷ}G+;{ʾ 4jg>cگ=?O;z(o{cOWqf1mW~Y ~U>ߩoEXai*{F𽏆[.Nᱷ0n_n>QNPv4I%ds3hoW3y#6]f-]5L6 (AEPEPEPEPEPEP_uZG:Ϭ ((((( 7:rRWC\#N\L( ( ( ( ( ( (!E:B?ΛquO@薮7jCa*QEQEQEQEQEQE5Yt}GΠ/8>z5T7޿3Fke\_濙z5s:wkqo,Z+f"ƽ}gPdS$+]B1A}~j@OGMTcG?ƫ` t ?t: %K:7^V#+.pO?Ut::?l?€,}~h}6?G@O o?"׫:?l?®A66GKR5 PMFo[)+{F[VJkh&QEPQ@Q@Q@Q@Q@Q@}oME:B?Χ͠YKWM\uDtԡQEb ( ( ( ( ( (t}G>}gPdd`pE7>|%ZSLoPEEa_S(G}zzK=Ǹ½rx1ӎQwk0/("E`?>|ķZ2M<$,c]Xb+^gF[VJkѿi땷; QTEPEPEPEPEPEP7p?[_n>QNP@s3hoW3y#6]f-]5(l6QEX((((((Q>uY7!;Ks#!?1LB+01+п'hB( p~fJ/ آ1+п'hB( p~f¬вT1^h 7:rRWC\#N\L( ( ( ( ( ( (!E:B?ΛquO@薮7jCa*QEQEQEQEQEQE5Yt}GЊwoʏ-ߕg`E;7Goʋ)[q*<~TXNQ6woʣGI(1RA8## Z7:rRWC\#N\L( ( ( ( ( ( (!E:B?ΛquO@薮7jCa*QEQEQEQEQEQE5Yt}GΠzSLP'֊{oܖHYr~8i*QC2H8?OLЉTʊ7Gsnwo^ib8}7 x.ߛ,bBy[^ҭ洚 9atO~\?/|\'֊)d?uFlV?uFYѿi땷oumaEUQEQEQEQEQEQE ?O)tۏ~S/~uDt͠YKWMJ QV ((((((G:ϭ?gud˪W) TM[&/*(տ^bտ^bbտ^bտ^bbտ^bտ^bbտ^b_OgE F)C 3A#EPѿi땷oumaEUQEQEQEQEQEQE ?O)tۏ~S/~uDt͠YKWMJ QV ((((((G:ϭ?guQEfEPEPEPEP Fo[)+{F[VJkh&QEPQ@Q@Q@Q@Q@Q@}oME:B?Χ͠YKWM\uDtԡQEb ( ( ( ( ( (t}G>}gPaEHȊ91XQOoF#?z,(?ף}Sш^)|ꎛ|D($<\g`#ѿi땷oumaEUQEQEQEQEQEQE ?O)tۏ~S/~uDt͠YKWMJ QV ((((((G:ϭ?gu>_4|_ip3⼸+l 29SڬcuFP)7u *U5(8猝~h%_!S=\@#(NePppXqϥIn62 Lzc0B@EYchԮ#q 2N)D$ Jes FB._ϒ! H (T$wzd$Cu <옙Y'~W]Ħ?zaUQmDP30(vk^+^toumFo[)+QE@QEQEQEQEQEQECqu6 :;y#6]f-]5s73hoRaEU((((((kγAYAM#N$%' տ5bn:3[T/5oE2sVVc~j3[P' տ`A[[yo@2sVQ/5oEm?֣1u?b`A[WuRͺLn%IWs[Vv|NB]~8F[VJkѿi땷; QTEPEPEPEPEPEP7p?[_n>QNP@s3hoW3y#6]f-]5(l6QEX((((((Q>uYֿה^xV^ni.nl 2:0H(g'^/:.t0yl{󜌖=~*6c0?12[O-ŵ4І$2l!ne g_xb9,t.c @GwH񴬥cm)Vm&UmJ f[cVomǻ _3a8ES]]He<qӊ4m/a[& w # :DЌY@uWFdЋlе &>Q U2w>as.?ڤVW&2V~A@|'5kyNeԦ0 ywN:qE־?U-Ē\GgA 0?8Sm-WZ!$]$HߏzD+hdHa˱*c~I=LCxgKwgxw1$Ti? *@[I3\Ui? (m'xrT-._*( E?Qt*"1E U1Ec|9c|<gs/T<gy(@_y(Q΀EPQ7?ȣf :db oBw endstream endobj 1556 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.911 695.338 251.256 705.833] /A << /S /GoTo /D (coloreditor) >> >> endobj 1569 0 obj << /D [1567 0 R /XYZ 71 757.862 null] >> endobj 1570 0 obj << /D [1567 0 R /XYZ 298.448 698.082 null] >> endobj 1571 0 obj << /D [1567 0 R /XYZ 72 682.396 null] >> endobj 1572 0 obj << /D [1567 0 R /XYZ 232.885 241.923 null] >> endobj 1573 0 obj << /D [1567 0 R /XYZ 72 154.097 null] >> endobj 1566 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im36 1564 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1576 0 obj << /Length 1800 /Filter /FlateDecode >> stream xɎ6>_ QZ&3YYE %WK&=e&qҠ&H}hp/W\)IcM IH(* ކaY,yB7W]. ;]AXIKE; ׅ|26Q A'cKz <6TS|֋J*/o*J7-zxUgUf*_u?}tJ:/3*G2%2NAx7\&sBHOԟ<,۾ͫR{7ZLkf(#D &+LB$;q O)}b"WB}E[3XLo ͠!Q~n:8M9"J"fj'0p@;1A[[^ܸZ$%/Wa7BwZ<TL =b5ms=6J!vs??EnշwrSd?%nzuD_-8襧q;ГV{)63 K) ;K5DdO%0"߃u;9йAh.WgFfRIFSA:[\!cW:^` ȦcfN"=EI,ܣ3b-J) àR9[fݎ5kNE[DXϴ iWe |A*0н`1N1i~;I-]Ic|$ gh[#) 2A;RgbtQi&^]4X sU1xu=^9ZIF曶$w}XAەo6nLKd=[}܈h7n苵= إIyp#F ֥` 35:ݩl̘LR8{P ۹!ybxhĩE6]ƖˡW}.pceo2C>wj ٘ڔksJr_xz¸DJqn?(Jj=?3MSS $79D/)duYh0떗Wh(u*d<p endstream endobj 1575 0 obj << /Type /Page /Contents 1576 0 R /Resources 1574 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R >> endobj 1565 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 196 /BitsPerComponent 8 /Length 12101 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? ԯ"XZ5H>]_Q(S_-YIXeo]_Q(5?¬:BQb֯NxIMokbdzf "hvpO"ȲȊP19'&]^ZA[[ U8!c$j9Uqn)cY#WGH Z3/\޻keZUF}Jt׉d7kx+<=uf;ny`8=b+y_M[]Kojr)B/j"A[\֣\ꩤjxp}0&o]V5F<<>R7 Fӓ߽(4ެ_ ?_ -5u }WYWȐ˕9P2ci;Lҽzʭp9 ;mP&EP̉.TѩhWZr[g1JHV$`p{Amy{yw˧g$LpWP9}#+uέڟu+Xm\ 3znVzH5 T mcŰzG!mafo{* 4HhKӴjٮtW0ْxaAx<ή :֪2p3p_YI]r*M,j4mqGN*|=lz4zv~zCas|FO\p{O]i_HD7ωFhAs]3h]3k;[( Ɠj2\m"E8\6PHK `2x5Gkm:7֭uоݭw-$*R7كlF[r7?_ ?_ 12:&nb/۾ ?x~l9zV|Ϥº^mr}K7rKקUu!7lO-yuHK;€u$tk=N;/js2%ݿ[Ωc3=(\C3HO ]dUI#ܪ.cq֕薚uw ෈ny$P4m;}wTT2:) Cjs\\^_h7IpO%NHžǭA][GKHHlW C$ZߠXH:&2psiz%iݦo(H A.׷:~9TkT!IR}{U \AO%/\Ip>7Dr=hQZ@"o FYT*g^TӬ![͏-`[ DŽuhx+Uk:6&[mF cOOv-kdcJH7~ :چ{-.-1EnwޗWncWkF @FkmlU/>5;l8mLI FF]uέ{7E<}b5POOZes[&Ę\NzwuέVqi؍1v@9'#n8=tVO.nbda099k5'Mh !$ gVuέdv>$XyI-ȗxz*fFwgV+=?M OsKw8}k=MsZ5ԃPo3%Ԫ䜏/ϧJœjŏE:_&E:_&E?uoM2_,H\I] V8##ME67˦?u?lʹYL%76`rچj7sɩa? ܷC]Ne)&w;W8!61ܬa[_ko?՚ES]VZm\UL(5v;.E(e1Ψm-j7F槦Z' 6'vsR6VKo+Xٕ2p70\vc~ܥ"'c _#g=)/K{Eý| O4u?sOӺխm.ټ'q.B[h8W)W o)=kf 빵ۛOs9$:`&"3MUNTf ~®V$4hKWEOynHcA5+I57Ӓ]12pצyu欇RXPJltK?h,+ Ao_JojgAVIB>q8Le&Z(Wu Z~o6py,dzgK6]q0'|- FneFP~uZ=(X8wk(`F)gjQWD)Kk`yQ)g+ҫGZ xY~4], I@ǩn]cixCi2Fw8ڟ4ܮi]hiEYi5e! JU# UCA<\ŵ.٘VH3>J府8[l[iJۤ%V>Spmo$#K1<j\Y@,r^hXY7cpq4`^ >SpOJŻ[0#Y5KDx?)JJV^_ CzsAFʦVDp;3 =G-`VA8&4g pN24bx}$gVt0bAZjpXIX`vW<Z)I>߃6`-RuF:Y~IdoWߞriNFYclx|_]x-\ q$c$䖈ɨjo+e ЃUSMM4]$x;leyHF9gR:i|1c'sH}3Cn┚^zm~#ɿ!YLQ 'ԑꖲRin#]6vv1G*I)IA!#Su#8fM7u#DfBo^1ҥJW׿o/.ypk6GPy<7ymv3~1W[SDPO;׌AN vT[mϷ֬nʹo&kLzb0{zQg]5/'e p RFgl <@$&5p0*玝Oc%YJYգsTSIϱwu3nR͵K;fMʌdU}^4k-M,,䑎aƉml"1k8m[ dg d4&b۳Hسl :4vЪ4"pֹۍ6Dhe{y#e`G,9ϥDt9V)4{W6׭,6c9azݤ?2U'myKO #tb^jVpL$ +V&esVo/$6( iQU2FYJ5ŎM6IJ2yjY6p[җ<-tt]EVؒPJ pqן^j;-F\qy6q? pUH#p~4Zdq'{s?/ȹMٳ[9LZXEVnN /70ҡiWo( o<֜sGIy~jo6J/Kԯvǘol*uÕ=mE j]Ry 2_~1v[ėW#E {$ɒA?1sz9;]VTo!%F dTup@,2ԫǵaz5͍hi#s8GVm#z@vǵJNfe w$L8ܹ#V`Qu=ίi:L3T@=kz-˧&Aw@ʼnIJ_ǜj觱#cd;`QT߅M%^͘=mڧ~ZUTKVk;QL z͎q$3Hw(aeI03]׋?dծ*"Ko{n–u$Z7W:4FHE@k4fMm9l 6?dubvHhX5&[H\:]s),q0TQt8 ~uh K{飶-эf6]ĖZMvwF@U!$tzkP;i5*-It5+DlmiHssW뀸L[_Zp n"ua('mkHhAݰl,y=1W4OԤ##ZTW>l&;qpwcϮ8ϥs zzy7pJFGZ.Gu66 }[Oi3.89ݼzd,l䪀1 F+EVjom*Z\3圠$uRMr-f{{9#hnٴ 曌/$/d56/ tUv Q|UeZ;H.+NLO<𶟨=-Vv$DF$C+] ie:ŀ`^?AJjܙ(+nZz #CnGX _òjhVk jG/$bx)Y#qGzQ-]_c/Mmyq-˕pNEX[ҥ=JUJմue;tg['#*JKŹY$V܅+2O9`U]T`4^)TXe cΡ\/\um9ٖ퀉F%>W#jvig=H"UFNѥ3Iɹlai'ޫMw)Ҏ{:i#]eQSetᶕo n$;&OǵdhEer|<_ޠ׶b%3[A۵z9Ywe>Ta-;G33rSSzZ#<4R+"# r Ma>6.bq7NA<~mkqg{e3NWl麴Q_ b]4nYG8ǿ Fњ6:ޗ[=ŕwI1}?qm*-*Q;m|FcT5I&` XaU<9<<Cmj+#Τ(- scMWw-5vF-kxN%P>l vn"9i%pRiA=($V Yw<<ڙ ?osnןj-wn(H=={С9)sE|[b@m7yqjߨE7n#Ϯ8T՜Rq 9o"m[lS 8p 4!ԭ%2$0:XN[:^.#= Phԭ/4aw&4Oj\evQH.z~$kvt~ ѵ UԺ @@k%ЭM2ԗ1n b\Fvh r՚rGtcgZgZ6a筿TKVjjjy (jԓza{|b$/!!psHZW%ɽMN8fбO+'3cNA3A0yFH¡BݱKLhuC#Sppwd[x;TY\ܙ,KPx6Fyj} TMrR-;N:󣨺eV,bʅ1eeԼO6ga#A幔I]njs݆,xF.^"0Ӏz$a5WNеkkBKR{KI!ͣpJo0QڙcJk?jAa%%FSj;@l}/<4*D*)/u*y8Ma-S$HRLBTsqbCet-KLXqx$"iHN P]x*Y:qK1Z jБK.џIԣM(H!P-t*mF<#/UnJ.4 Bxl~l{֥[DݴU!ceQԕ߹/2xCcZ 0%$c>1С?duy7+ɷp'dsTm<-áAa6m$֓,֓-P ?:E:_ sjnY,X*<̏2I4u;MZ]YJd\2AXUF`xcg ?ܰeY|`zVʹrksL˴.'})-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V9ojV9oit'jm3l-BxmuHTKVjjjy (6ZզtRZEb@8r]ho'KӔoGNz}+R7{qq FF'',/`8m 5ah/d&lTw| d{Q:nOmcwڢtӦU0HCI}ߩQs{[ 'PPh$X}ԗ~).&{(@0_ HOo5${h`8X# u*{lPV 29Rp(((((((((((((((((((((((_ǜjV9oit''*m7l-B8.t_[l_ko?՚QE0Ynjq?*(((((((((((((((((((((((((_ǜ5f_ǜit'LF9qЇ_Ǵ ,0qSickjjVS_-Y>;!ES]x\Wڻ+? 袊((((((((((((((((((((((((*yFkFwB{/~6?kn6?k G9o?՚mڧ~Z^|v:(ڻ+?7vVs_@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUkFk89SS%a__l?9o?՚mڧ~Z^|v:(ڻ+?7vVs_@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUkY6ԩzq `ToZ|NFY#ܤ= G9o?՚mڧ~Z^|v:(ڻ+?7vVs_@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET71uʓȩ9/֓zUg17E6nAI'X~SrmjĒ8;o?՚mڧ~ZJ; (`?*{Weg05T=Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@G7EԕICMEgCtS_-Y%4QLvVs_\ojʀ'(((((((((((((((((((((((((n_˄A?MU6劐5œY&; +!p Y{дE`\c{}k<#nab ݼjBG#>JbE"Sn00qn0-%{ŗbH&ko΀5|ko>m>5:UB@(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh941JS(96pRVVR0({$ endstream endobj 1577 0 obj << /D [1575 0 R /XYZ 71 757.862 null] >> endobj 1578 0 obj << /D [1575 0 R /XYZ 272.098 563.038 null] >> endobj 1579 0 obj << /D [1575 0 R /XYZ 72 529 null] >> endobj 1580 0 obj << /D [1575 0 R /XYZ 251.575 398.09 null] >> endobj 1581 0 obj << /D [1575 0 R /XYZ 253.986 355.305 null] >> endobj 1582 0 obj << /D [1575 0 R /XYZ 72 231.615 null] >> endobj 1583 0 obj << /D [1575 0 R /XYZ 72 115.603 null] >> endobj 1574 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R >> /XObject << /Im37 1565 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1587 0 obj << /Length 2112 /Filter /FlateDecode >> stream xYK6ϯm) S]NU*Y{rQ"$1HOC<;=B wY2qR/UR9;'N&^m|toW6Yѵ7LJV74)Vw|I tV3'=|ͫۛ?oHARB/cg{wrX M;CutBtg/Ƃ@L,)0'Axf.}:Eyajav^W:/q۝KxgOYޡ&o ei%J9@z~һ/Yn%#`;czaq$0QO,T-3g-b/ I?dG馽`Qx "֥<ƥ%Q؄^HKw.11fF/*%Qsd>]aZ)$#*uaY q}GZ$[u9M7g!G> ":55ȭz^wDmXYw4wDY~Pyj?*s,pZ/Ye*|23\'|g]F+%1*8_ 1!it, @kE.PάzD8*"`΂L XeS`yٔTyI?Gn'Sc@򳲭ii4 ŪM*0Yk09r0 =X4:n)ؕV,r-4 &maXl .xIq0#{MO< t"£B,ڎ!&& ">N8UjFрk෷,arB p4`Eۂ6xkT2_.PvJ8 7 =/Ɇ_W dePzO )=$s/lc)k1ы_iuYo3Jҏz/IWKJ'¹Ήӄ(VCOPPYG#x/` ,Cӄ{[HU,gQcњMxtfG]Zvdx.z0f2L3z _7Rl9 M=+G N_ M7!( ~2xza02.! xv#(ه --6"tǺ=YN&vI-o7ӤuD~2v>꥔:T$[ҟ}th,dy^X$αq dlCx5Spd*MHU\aF[6WzoU0obbagm=ٻj˷BXK>T˄1*I[H`O?<+w*H@@^}9QHA^Aϰ)/>2:x@*N)XbWq;OcPB)bJ?Sg 0W|x{͛?_U endstream endobj 1586 0 obj << /Type /Page /Contents 1587 0 R /Resources 1585 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R >> endobj 1588 0 obj << /D [1586 0 R /XYZ 71 757.862 null] >> endobj 1589 0 obj << /D [1586 0 R /XYZ 246.569 715.238 null] >> endobj 1590 0 obj << /D [1586 0 R /XYZ 272.88 604.543 null] >> endobj 1591 0 obj << /D [1586 0 R /XYZ 72 480.853 null] >> endobj 1592 0 obj << /D [1586 0 R /XYZ 245.418 356.084 null] >> endobj 1593 0 obj << /D [1586 0 R /XYZ 72 330.017 null] >> endobj 1332 0 obj << /D [1586 0 R /XYZ 72 330.017 null] >> endobj 93 0 obj << /D [1586 0 R /XYZ 72 315.007 null] >> endobj 1594 0 obj << /D [1586 0 R /XYZ 72 224.277 null] >> endobj 1585 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1598 0 obj << /Length 2645 /Filter /FlateDecode >> stream xr-T%$䐚g6Tf̖ Y1^}h[-x4Ѝ~7(QW߽c2H$< A*$nv%ɋ]Y*C[`맼Z(>R孲ǫW]Q4H`$`p(ADx&GD· >]*TG>zK xa,6ݲ%_CD~,mxw̛OCUuzIB?~{Чemv[8|n9M]uM] iDXk?p -:5 92Ӯ6Fb ۮ~xk|5NVl`*}jq9Ц8|Z%qhg60.#(o?N6q8v@ьH>)Ǩ D3b;}Flx2=}[T{Ys]Ls9:}94zʷ˺QM ;UU ڜ/Q+ɺCyл 3;s@lT9S(J+~{Ww*ՀzN, pt\ &97+"p401PJ:&xW>( o;n :=A^l _X}.wֳӞ o qg﫶˫Fj]>{9 84GR3P}5y{f] ^pG =Qƾ um]O 3tin~C`hƪ,> w8)EL[!0/*onۮulT0C+Qs7Eﵥ*CKWOyك9{9`6! ۈv' UOGTᐉ6~Հ" a4 QCjc9,u<.a/) _p8o,5nISlWv'rdꌓ~`Z=O;{8e/#- s Ҥ[9+ AL4ф:͖Cʴ:Vum !sKWS/랎Bo25@{O250XPwA^Oxjqo ~=%] ۣS>#je̅ JiK-c?>yCJ( f~Fٙ{,r}*IC9X?džw1=cb|weP%+0v L`6:{c~w҈xךŒJR1aL)<0<*I9 E9v<, 'pn pꄷǺ頼^1bnD+T{8Qqjg00 \Fwy5R,nԽfIPد WQG:FT?M| ,]lM*F@-6l!v?1h0X̋>:!>[ ۸rhI"' ccv-I#!siBPAcSēcUjW.kˡ: Vpk{ü^O"y"iPc`e뭽CjhW 7  (I#zu<_Oh(g_h"{t>^F4Jj0z2dN7{E(`),pj ОĿQYE`,6nBmn}-#3²?BX9`9?ʑfo$# #}^z.) 1+Y `. a_`[@=G'NXF:<:|C__qhxFMa+le 3no _~RW Pihaa m S{t! -=ݹ%^V{U&oR`ޭiB鴕͝c[]c` }._ i!.^FV}IK<9@)sn7?7A?^,I_4ܿ7-Յ\7syg,@^O` 2OW넱VS)0[L'aצ> endobj 1595 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.506 505.194 236.942 516.098] /A << /S /GoTo /D (treeeditor) >> >> endobj 1599 0 obj << /D [1597 0 R /XYZ 71 757.862 null] >> endobj 1600 0 obj << /D [1597 0 R /XYZ 72 628.19 null] >> endobj 1601 0 obj << /D [1597 0 R /XYZ 72 380.736 null] >> endobj 1602 0 obj << /D [1597 0 R /XYZ 181.708 246.881 null] >> endobj 1603 0 obj << /D [1597 0 R /XYZ 72 230.787 null] >> endobj 1604 0 obj << /D [1597 0 R /XYZ 72 128.947 null] >> endobj 1596 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1610 0 obj << /Length 1536 /Filter /FlateDecode >> stream xڝXߏ6 ~_a`u*ɿ7a۵]C[ :[hMvz~(%ھD4-<=Y?yP"i\ 8gq*x.9[enYF4tK爵 zUt&_=[>x /1x<@",*qø ^ađD,8QF4qhؘG) inL]M5=|H{RM;Ztk6}|~T/.¿ 4{X9Nfu?\&ՓA@Ϳ\gH}knkL+d!+6o o)FWw4 !4ÿv0_k(ZuvG;$Yx6+Y+gԻ}O)%ʓsMvT^vZsXsnմ>39nY`Q$M+S;tn i5uef?E0J*l^:YۗUvԍk ~FM=:-Ź\[xZk:s",A4 _ mi+(]C,iVΛuw˶s/Cwmqmrp fVʽ  =Igd[v֖( [Xv"r Ld(U]2rNTgI#Cf1y@'K TRD Kd٠*6 F4ɾc M']twSv0d (Vcj4tUo,RAew,O-4`%..[0 s& '(=WplV TD(¥HDd Zac$*gz':%nE_<O6/f 0C *7L)w_hl\ BL>kQ̸W>Fyk hr1yz"gcQӦ}@D:cW]vm,swװȁ᳁B$RK=Q"펎",[ 譢HCڲGrv.vPi*=/3GQcIwH3ob$HDu4BnKQTin{*l|.*2DFO`@u@Ȯ)@p"?0>/74g)%U~8K7ޑ\-`i~L%KVM&Nc;  1p8XíVg-OftaO NcwaA.i~SHsv|Glos~zuew( gǴ}GC|c/_L8['>Y'!,>zڷEȿ3G<y$pE`".oiO>( ([DXõ |Vϐoy?{SU?.D endstream endobj 1609 0 obj << /Type /Page /Contents 1610 0 R /Resources 1608 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R /Annots [ 1606 0 R ] >> endobj 1607 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 360 /BitsPerComponent 8 /Length 16668 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222h" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?oE}]U r+ԯ!\\Oo 2s*f1ڼŧ?U'*ͱX_$.qVSRMuv}E=[V*KƠz+M|+⥅]'TX9I ϶k|e~<[xZH_kfX ^sE׈58 `Se-滱XW.H3ǡ()4cž'+Ec zpjfΏ4KձIZ_-ce #+d/?_bo&@?Amk޹W?iv$?ƽx-{6ZڤꭵZ0b,W?'5~5ƷE }A8|=h[UgA>T6pH#GʼnX?4;Ŀ'4#O_kVƲc>m;B WIp9GʼnX?4;'4#O_kVFຎ]{VIQpH3Qb?MD|I@+W\Gnְ&Y`p6 uim+ݴhX?&vx">$?ƏD|I@+{"[Z*ŭk>v6b,_W?'5?AmkޘwdMkWfOQbWGʼnX?4;O|K@I|r^ k_/z?,O1d KĿ|r^ k_/z?,O0ɡݞ|/^?ֿ=^ k_XaC<7/G"^%?ƽx-{?ֿ=X?&vxo"^%?ƏDK@ {"[Zx-{b?MDK@ x/EG"[Zb,x?//5_AmkޏEGʼnX?4;//5D`"X(5AmkޏEY>OxG2҃l jOD͌,lՆ|ErmƁA*i`;n#'X^ k_/zY~?_ihf9)c5CkUKt1v)Qx95?AmkޏEYVZR\_M֎Uiɩ.zv<:b~" NK93?SҢ7:=卜[$,8W/zf_W/9WgUUTSGNSwWO6UDqmY?U 1ԯM<_-j)‘'wi m K܏˻ ICUG;5G#??ttXDSӧ$I Je"1ұmmsqrC+ڨ -U~V7+zAT=sAc 9XAqeysKl9dn,'vT vY6Io%l GsoWDs ?\wX?jtɧntY@-+.n'P;1yMbX"xrZR!ci\wX?jt9ul] .Pq :4: *` WojRͮZh׍a,rA?$2:nd`?\wX?jt9u{ ;mIWyo8! 8PvkcOR,^-o$XMvF%h%#??Q΂p6p_O7" @~rv:Vo&mZ(ngs 9C`Oo,Rming&h4H6TH`sTluh- JJ^P"* eI$ǧJzAT=sAc 9XK^ZE)KVE`xn##4R=~o ZYK!M$dSϖ79;և#??Q΂! Iwf.k F20k|:H5=M]g{EvA3v윎yu\wX?jG;5G: tk6KeVV{nfLԡӬlm`K{-UAFcyn\wX?jt9\N̻8I~2]s9sdGI78ʪ Ns=sAc ?,VԡԦxqI%X<;v*F7d="H#e$r# _G;5G#??Z֮|= Qn.p.gww%vl!IFBTpF*#??1_ 9Xm&Y.<˪2qv]IK8+!r8[?8^29ϡ_?~p?gAbzz3bpOA]t ݳK_?"֭>w֗WW(<+4`'|Zvq[Ke]ܼRa,7K'Xo֞eWԌ7bK i'xdE.W(ÐNbzSX_۵^ƏIw.r^VF[u9eC)1R8? [=0s,mP#ʒ A#qnt?'Qv>rLU;#.(H ?4h?'Qv>rLU;#.(H ?4h?'Qv>rLU;#.(H ?4h?'Qv>rLU;#.(H ?4h?'Qv>rLU;#.(H ?4h?'P<<w%G]qP<[g@96_Uo'3yݝwuϿZtǜ/X?g|콾Vÿ;:mn/*!mFϜ/G!2TKt#.*Ce;A9?&_* n\[~ECe;A9?&_* n\[~ECe;A9?&_* n\[~ECe;A9?&_* n\[~ECe;A9?&_* n\[~ECe3^旦ikygGuṁ9H ?׵OLvky$\ەSc: $ ZڌD`vT)e zVBOb n hmH* <[zb+Xb $:q{[}1l=\\執j-Mڿ wo+D9Ϸj-Mڿ wo+D9Ϸj-Mڿ wo+D9Ϸj-Mڿ wo+D9Ϸj-Mڿ wo+D9Ϸj-Mڿ wo+E.s_P9K}>^c88vBQp51clݫз}6rj-MD+۵&Q_ G" ۵&Q_ G" ۵&Q_ G" ۵&Q_ G" ۵&Q_ G" ۵&TWk-}D3@K@HW'aWQX-}J#ŻIyue@@OzqsWZ؋[jM#ʃ° >o?I`4@o[RW8㯨30sFǭsW-八L2ZGc]%AЊ/ y ,^8 ʤy ,SG夞br 6z`oZuyݟcD7?hGBi{ס(0(h) (((((((((+ξ4ȏ}_GAj??q-tNeg Y$XͤM{#$dƹ'|[VVOBW{H&fp[afUr0]sY *Ok2KQU[x<;q >4r!*?҈4WM2FcMBqI(Uo¸.ɭ/G5%"?*EVUpЫMoI*>ɭ/V[sT-c?Z ⨴_k2K1QMoI*j3kտg?E4*[_k2K1UEVUX֭9-.W T}[_-c?Z Z~oQiw ddb Ukkտg?@V]pЩ#?~|W~`o13җ UVkLj;lۺ޷lsZ bA5%&C$ZZ~oQj3B5%&C$ZZ~oQj3~ɭ/G5%"?*EVUpЫMoI*>ɭ/V[sT-c?Z ⨴_k2K1QMoI*j3kտg?E4*[_k2K1UEVUX֭9-.W UƓ^ưkM91inX֭94Xt0^Zjk2\ہgRdR ҴY!.d64W,M#>B~5x}6x;@!)a<ɴQpGYg_E`[&,֭ex}^PN9'\TV521+t}h-`ܡ(/WT?p;. +?t_y_ QEظNaOU|/<⨢\'gN _*]>WTQG.}bp}|/G. +( >SOUQX?t_y_ Q _*(v{T|/<}|/Eb;?*w]>WT?p;. +?t_y_ QEظNaOU|/<⨢\'gN _*]>WTQG.}bp}|/G. +( >SOUQX?t_y_ Q _*(v{T|/<}|/Eb;?*w]>WT?p;. +?t_y_ QEظNaOU|/<⨢\'gN _*]>WTQG.}bp}|/G. +( >SOUQX?t_y_ Q _*(v{T|/<}|/Eb;?*w]>WUDxKa` 2$#> >> endobj 1611 0 obj << /D [1609 0 R /XYZ 71 757.862 null] >> endobj 1612 0 obj << /D [1609 0 R /XYZ 249.886 326.3 null] >> endobj 1613 0 obj << /D [1609 0 R /XYZ 242.48 272.501 null] >> endobj 1614 0 obj << /D [1609 0 R /XYZ 72 256.407 null] >> endobj 1608 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /XObject << /Im38 1607 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1617 0 obj << /Length 1197 /Filter /FlateDecode >> stream xڵWs6~_Il:I CsMr3mk9poAp΍$ oh%t19]Nޝ3<9A \- geng˹ ,T>_0W,|ewɜYZ2e:f?/?NΖ&4D@]vr?"-O-kn&OH͚!:;Su^DvA[tCP({/A{ 5ZsE IE&:.B.CHuKpP,zTQ!Lo[5&YP=`YamOC? ˯_Ss8&Ε|>0JEEVB*YMg ]~J"kb[L: #Бa$[ NG)`{V^e Tq7i}J$[4QG}Ju1z&PnhҶxsQI@I| Z\ m+i?8 ?ȉeU9?{MFXhIኢҲnD'ǮN,;7>CE@n¿nk/S*?bF-]EP*MJqIT\5ⴹj]$ ,-;4V|]*KMKd1\osftӺỤؙ/*6 2+NkMuV,N 4{jWE2ALE ' D@8vUMF6SC`TREiնoe+|<o_>tz?p)+ : +O6ߟhJoul"#Ldnu*A^BX}M4)t*D!3 &b8g-o׃nLr VK}5 wۙ֘ >thZNWqh3CQ2v@Z(WM]u^\5/^&P;\]{(̰%Z䁑=c6 >'Eb[8$I9E 9xaØ c>g26)S>꡸ߺJ‹P{-|F-+. endstream endobj 1616 0 obj << /Type /Page /Contents 1617 0 R /Resources 1615 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R >> endobj 1618 0 obj << /D [1616 0 R /XYZ 71 757.862 null] >> endobj 1536 0 obj << /D [1616 0 R /XYZ 72 151.192 null] >> endobj 1619 0 obj << /D [1616 0 R /XYZ 72 137.254 null] >> endobj 1615 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1629 0 obj << /Length 1846 /Filter /FlateDecode >> stream x˒4_ᣧ*%n@j) JiYfn@f,ZݭV?Ńc﮾]]Y<I Rq\"x6[]f+,yיF?zp 5ѝqLhW?"ʃ,ip8]8y!o] [&len"f @GPaw6ǂjOz 7EsnT7,ʚ+>:fkgXQͩ{Ac];  >$$Hmiz5MHvY`$d{. G:HsLJkb:]p9S|}syp;\uD3/d"\4uuyZ'b* LkA |o~Fi"gYlU2ȑqԚn0!&Z.l8VXE"`b퍋-$dL)|,̩a 2rUcO9H29Fi$]\fN8PiƤLnЯo!<-"8KyNݰ/PekR:"` 8Q#:Jpw_vѠw֧si zly4v$xD ف9l n^btX@M3yl0e|]t|ǚ#sl<) J O 1х[GȅEִƘrTloOI&7e=>/A.Q,4njZ9c<W?4-bh& ͼDl Tr oڵ(&~\U>%zSĞ'\ [`_zЭ0YuɋgHCWȋ1tKՑ1BDs_I6rf݀Yk%_B endstream endobj 1628 0 obj << /Type /Page /Contents 1629 0 R /Resources 1627 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R /Annots [ 1621 0 R 1622 0 R 1623 0 R 1624 0 R 1625 0 R 1626 0 R ] >> endobj 1620 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 266 /BitsPerComponent 8 /Length 19971 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?x"kX4JI27$R}o\SA-`Q٠g?h?5-2/A<3jq=JGf]n`3Ʀ5*&'٠g?h?5:h庢Y(uY$O16Zܟ~G>Yk3h4Y??? CCAtIh?4}GjU!Q $4>?ƣ5*}gP]}fyQc?G>ATr.>?ƏA< CCY??9dDfyG٠g?!QjU OA<3j?}gP5*Y'٠g?h?5>ATc?G,3h4Y??? CCAtIh?4}GjU!Q $4>?ƣ5*M#lj חeIŠ-} 1?PV$:"끟U9^EIqH %2?xG٠g?Ss_S/A<3jZht24aԺJBG*WϳA<3jZ(}fyNxewHQ*rG8?⋁٠g?h?5-\?ƏA<hEh?4}KE/A<3jZ( c'4Y~v_\㵼_;󘙸]$uI6ݕ·3h4[xƳ~,EçnTOKu%I'rHA'NpqQ٠g?h?5oV⳺x#[)%f rXH;*kKF?GE%xYJ.>glTlfyX(n/kK[E+$P2YwIilʃ/<˫4)^(?ƏA<ۛ.6я3ݜ}{VkI<7xgtKo dqz$ٙ}2XcUJ9_[)u9簖UZяZgV? Rmv?X*ԳΒi,R-B տmv?K_أ'SgtGc/ b.х Abswcwy:F !v搤;ڻC=h{}.fŴ{fvc=-"bw,;Qڹi-"P&Vbȶ)I?1v%܏0PզkpQ'KfF1nXԩ\;2ֽxKآs6>5ULoeTeW0qs$Uey}s4 rF ?xW]أxE4=:|V'MB7>K`w=j[%aQ~,zyk0rTxG!b硼EiVvWWqc?."ۀxHxG!b[+Y M'Ъp7rM K0=AfmuGk,WF0 ʯ~}+)Ǚ}.i)_ce%嵕гvafSz@~r:KXAj4ALW N.r?uS{t{f!)k KIB1DD?/Q?_ثqVFSjrr96X6v[m,20j'V? R'h?Kk]#$H[!?Ȥ3(# Dk?"2?_I}&K{ )4Cݶ$hgOo?Ə=?ٿc \P7 J"1RK=*;K,f cx+]:o=?ٿCr?$xM{L+"*4 *7mqn\A < Њ.zϳ 5u=@@˜xM2:]w78.8Q{(/ F,kdo7q@|\ ns[hX}OOo?ưu4KyU\I88X"k\kkGmH|~Gy>|'7\j,2kI'w!imztW \H2yo~gEXUG}Ϣ(UGEacCVQ+>.Ƈڭ?أVV}][t߱Gڭ?ج( jb[t߱YQv4>o~jb,h}>o~gEXUG}Ϣ(UGEacCVQ+>.Ƈڭ?أVV}][t߱Gڭ?ج( jb[t߱YQv4>o~jb,h}>o~gEXUG}Ϣ(UGEacCVQ+>.ƇPscS$ӛJ) OG^VVcC8U~ @?.֩icui\\ *r[TK&RQWc6%5 kǃ1*3;[n u$MAc?@N#~Ι'm տ_K oD^ ?t[ JjAZEivviʹػW% 2ORO5?¯x sCot-.4QGWN@53\ӅMUbϊY|'|$m>_Si"ʸXQo/$F )VVX6Bz=QD}+x#pIJ=pMt7doᘭ@t?(L6vиEϽoAZ?Z>$ր;b'عrvŠ%ۚ@X=Pl'.ah܌gg>weiUC<0*`F@z~O$ǦxH1(HOGbdh9`Ғ^׏Y:ͨͨZܼ%(x& 8L֙/*+دd˹2qo? 5⇍Uh Nx 7Jlɝm pjw~gEh'!Vmq,GP>Q[x,}y0up=3KCl7ZaZ{DS6Q}.['آoμϢ>~t}/V>^([ +CQzGآo΀3Eߝbտ:Ϣ>~t}/V>^([ +CQzGآo΀3Eߝbտ:Ϣ>~t}/V>^([ +CQzGآo΀3Eߝbտ:Ϣ>~t}/V>^([ +CQzGآo΀3Eߝbտ:Ϣ>~t}/V>^([ +CQzGآo΀3Eߝbտ:ϭ9ԧB^ԓi)b2?_-U`Ygm6Ɇo@K`{^ @<|_sg}dŒi)Gp3z̰J|Ϊc7Jv:qePicY gm' `](}7Tu{Xu,$~8aNiʽϳҨO%ғNsb.v||qU5+{k?w2iv1@ڥU2pGC[|GfO—oiYM?m|Ky rӁz+{Ux >\p=N)5;д 8`6~^Ž'I?wZoN:޼YnI,-:k?Gxn)G+7v7QO3Cjd}/Gx/SǼ_OL((((((((((((((((((((*)կtC-E?b'#e+7U/4sB "f55erp^$W_ @&4Fsd֧>~(pݒrZْG%=# 6L#$7O5Yqp2]4IrCC:q[GA>Гl壢Q kjms@R|2?}iq-b-wJKP*x w+%X}8=[R?!Piahܗ ^Y$ԚuFx?)67quo ^ynR1ocgAFh0YfjηɎ= H r{*u4uݲ͊=[ؑ&f5ӡTYD[T `>r&SʃMP&{`G (&OA=eZZFd{me \yl>P#p9GծI ߈ѭ-}x$2?Ҥ =;0kR7Ė8^>|R8Q1I.V 4Kvv\d`͸LՋ}MԖѳ<1Mt^8YКw=ɒLf[cq0W{2pv>t}zuxed|Rvv}}qoK"^B 5Q<%gwh5LtJP9%,s'}(k+ٮ%0As(-ܐ3jkjSER_l3! W3\:Zkimw:K!l~v(*r# ){vmYTi1F򴗶~8a |+Ӧt˼KXH2juaQC2]Y|=*O*4#c(RSϿE蚍춶mi(hVi" Xco%H`08Jz](cp\p;ې 'IcI#YS9nsiSi |@ U=p*=p* ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( k]#KQO  зbA<.pgγAײBRҼSϨ^Aki3;'pݒΛț~(&? WԤؼgPtCC=W~S#O,07vgҭ%MI2 899'Wa77|/T7P"\9 x{UڂJDЅ M@_ |dsQO UK۾}2Z?}ĺ֕XM Lʦ5x#k;8<;5߉55šD܃qn22,AM?r JILzD(2JQ%F9#\`fi[]:+dl? $g4X wI:T6flU;gմ %n~Qz,(??*8??+Š((((((((((((((((((((ZH1RS_)b2?_qi8+ǹdE{yr6dYFw-1Ɉ 5pݒؤ:ٮ^T)ʣ<F~wϗ}%kY-y57ibdXXUᶷa,> j6Km@acd0LcIwyϤCu4%ͬ՗ޙɬصoi!h29SU+]B0>__Δt_7UV[+}>u!|]ĤW=Cu|/y-W_jD8 "zlϤCy?z\ O*9o^*-Ʊ<0 gh^=h~.~5¾x\K{ղ{fҬqk qjV4nby]R$ _Ə>__F}~y|I,RѢh#k{xf`%[z ͏ZM.lm,專Ƞ2(]cW]ۏ@IF]/O/63ZZ]G,`3.ٱs\@5i]iܵRBg` `(TTaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQOj)կtC1?{/SO[6nf ȠAo)OyѬ00#ӳ-I`fG-+HvsܐYEi'u1t'#9A W`ݳYڗ4}0[;M<X'I [=-3;Us°xcN}F=ĉ _icgi]HR;*?أQ+??u- 1Ik*Key>oKҭoOus>$2+9U~o~gbp'˻4 /me J 4gbp߱G8Xm|q.w\Ջ6v~b- 5%Fq0xfg0 >o~gbpg}v$[Gk5y,ASd`8:u#VVMWPP#u$'ݜsskQ{( V-gRG5\//@aoT (k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??gmOS@$CFy$UU#>Q?b<"?#mImv?J?6n4qpdpQSM[cm;HOh[ֻ_,: @G bc,-x.[mHw,Bd98HFţ TkYndxy $`b֗5KXaS~֬y c`ņ, Q`53#6{Xd7aW>Tvd>"Ԧ(`Tr)A~=wK{xD*R"7`.'sc2UAuF. b*Fҽx5pI3rOj_49'5/?cv"7<YFHH[h8~sNJ,n^+2Bhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sSbӍ>˛+btLќ7sOO?oͨZH1Y-)S>gr?Ԗo\SA3j:%U[Vlw.,I>O` He*z|wqZ=CEwB9#Җ F4dw1G*g;AN(V[u@lAfqV>޿?`1E.,m@&?g/:[M7Xd) ޿?3VQ·@O(}޿?o_·@O(gCUrqo_򏷯OLgCU3* 9_pOGz3* ?i~\z=SS?i~ BW.?=SQ) BFt?ZߡG+(zTFt?ZߡG#:?У zT}g#:?УVQ>޿?3VQ·@O(}޿?o_·@O(gCUrqo_򏷯OLgCU3* 9_pOGz3* ?i~\z=SS?i~ BW.?=SQ) BFt?ZߡG+(zTFt?ZߡG#:?У zT}g#:?УVQ>޿?3VQ·@O(}޿?o_·@O(gCUrqo_򏷯OLgCU3* 9_pOM7"`@ec R3* QYiekXFgIť'}M\_(Oj'V? T -)S>gr?Ԗo\SA3j:%ck͙egg]A)cj٢?GiEŜW]Ja q<4C-djI&UcdZF, QN2y.(xp%@2g^x7Kqz-u4o! tR@Ԟ]vkG糆!F\rx:mps?Y?G$s Mz΍~uIgOMY?G?XQѸzιI,K?{Gh 6?:7Q3 %=#4IgOMAc=GF?:$&I,,tۇ=G\$ %=#4sp?$& nps?Y?G$:m~tngK?{Gh9Mz΍~uIgOMY?G?XQѸzιI,K?{Gh 6?:7Q3 %=#4IgOMAc=GF?:$&I,,tۇ=G\$ %=#4sp?$& nps?Y?G$:m~tngK?{Gh9Mz΍~uIgOMY?G?XQѸzιI,K?{Gh 6?:7Q3 %=#4IgOMAc=GF?:$&I,,tۇ=G\$ %=#4sp?$& nps?Y?G$:m~uZ8> %=#5jQPI >v#wNO r Oj'V? P7sOO[ǝqOR|ͩ-)S>gr?u|U>ϧGM#}_3p/B`igl~ez5+"mV%6,Z?~W}F],Aio=*'=ymj#\aNNN'3ޗ/Mк]] @7 1 s]ȵ׵9 ݲgSd[), +ߵiiZֱZ\vsƐy`FgIMOfD:kzyG9}./Z1@8⋠4(yQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>t5}*t#=ғhOj'V? P7sOOo\SA3jKo)C$0YTzޤz:5'KG'KJ%$i4$i4⨰QyϴTyϴTX h?_?iQI>iQ`%$i4$i4⨰QyϴTyϴTX h?_?iQI>iQ`%$i4$i4⨰QyϴTyϴTX h?_?iQI>iQ`%$i4$i4⨰QyϴTyϴTX h?_?`Q;_>k>߱G(\0}(v}}bP`QG(C~pҏϴ?Q;_9BFchأvrҌJ>k>߱G( >}}bϴ?Q J0}(C~chأ.>`Q;_>k>߱G(\0}(v}}bP`QG(C~pҏϴ?Q;_9BFchأvrҌJ>k>߱G( >}}bϴ?Q J0}(C~chأ.>`Q;_>k>߱G(\0}(v}}bP`QG(C~pҏϴ?Q;_9BFchأvrҌJ>k>߱G( >}}bϴ?Q J0}(C~chأ.>`Q;_>k>߱G(\0}(v}}bP`QG(C~pGv턨E B endstream endobj 1621 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 310.08 177.324 320.864] /A << /S /GoTo /D (specifying-columns) >> >> endobj 1622 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 292.147 162.829 302.593] /A << /S /GoTo /D (managing-items) >> >> endobj 1623 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 274.214 166.176 284.999] /A << /S /GoTo /D (editing-the-table) >> >> endobj 1624 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 256.281 177.225 267.066] /A << /S /GoTo /D (defining-the-layout) >> >> endobj 1625 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 238.349 178.39 249.133] /A << /S /GoTo /D (table-defining-the-format) >> >> endobj 1626 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 222.334 193.493 231.2] /A << /S /GoTo /D (other-user-interactions) >> >> endobj 1630 0 obj << /D [1628 0 R /XYZ 71 757.862 null] >> endobj 1631 0 obj << /D [1628 0 R /XYZ 285.926 414.732 null] >> endobj 1632 0 obj << /D [1628 0 R /XYZ 72 223.33 null] >> endobj 1633 0 obj << /D [1628 0 R /XYZ 72 209.393 null] >> endobj 1627 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F62 183 0 R /F31 125 0 R /F67 187 0 R >> /XObject << /Im39 1620 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1643 0 obj << /Length 1934 /Filter /FlateDecode >> stream xڕۮ_@/ҧt 6@4qPIPȴF]];ád 6!g8w'DŽ'lۼIJdwHdI J/n[oH% ?#;nOG|A\l"9˘vn<Ir'yo<ۄ3YK:'06ɏlRj)RY3.sx@i~f zF]߮"niNұÎ->IY?oݏDpȸ>^ ``ԭ=Ge ODTpr\'OԚ|X *}5\ڪns1@p4)])=zYL9+eF}*pU(L׾M :ɺ脭}i94i:tpȪxd 4ݿ&֏3brZJJJ3ciYTS,\QpSvchh^Eʤ4 Z]= yd9>O2'ja\|7L*$ uU'bNi8.6SS1o%<~nyz"%nP ?OI9+n:|RJRciWRA8Nۨd|S)Gq yvwP(hSgANe;77WE M=+#5+/|@l~@JhEګx5䌧T19h4cFߒĽ<ǒ _Lms P:> endobj 1640 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 360 /BitsPerComponent 8 /Length 18303 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222h" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?.UM<;iOkVFv s'1XZz1P Oju .Jͣ{#W^:R=.Kۥ?)ৌ䥪2 `ǥéE>vT +a\Z]yyn!֪xj-V5 m3dKF(|+K@ p qGB([KE_<XTt̡ߡG_m~V^hԆwL #돽uic&a $Ʋ1pG^:դMHFm]&Uҋ|УJ/Bu[ɧL[v2E3Fy`Ճ@x`x?b7Gm>Ll˜)%JOdiE>vQߡU촭GS>auw I9p8EwcɅ;qsz7{6?;o(ҋ|Хд+{R &8(Lc͎䎆o|Y/Ye.Yf Ǯr~UiFN-ߡJRKG_m~Qϝbm}V/-lX Cc9;FqW.g4闐KpaI`ei :z!VmBT'/_m~QϝsQagt$`:u9 ⳓEd4ƻw=ErW!V_ P]dQϝiE>vStU"eMl+۳#3-ͦ"4mFin^'qV<[5%|Q2_( ?;o*KG%Or! ͝im=u m|{Z\ܷekٖ;o(Ӌ|ШuYa/-Ȼ+TgNǮ)JV]&[z .W,z|{7XӋ|УN/BMUK/5q\dG*)WӋ|УN/B1F)rqϝi>vVf(9M?8 ?;o+3bT_m~qϝ1G*SON/B8 )ߡG_m~fbQʃӋ|УN/B1F(Aii>QZߡYrQϥiE>Vf=ǵ9M?( ?K_+3cڎT_k~Qϥj1G*SOJ/B( ǵ)ZߡG_k~fcڌ{Qʃ]A18D2Mn TP7\gsn=.>Ʊ*?x?b[==] +Ij0HBrl:=k}Nk{/ :e?%RUH<*k *@Ҵ&ښ{]P:Uy%M+۲oTz-!}G^(_9]ŢW:hogfD*=zO IMjw7vyr&iPXcj9r]<41&nDn J;gns8MeO:~[$~㶈q5ћ!iϧd!Kj@'b?,[.b){Zi^ߖy?Umƺ,G6!B@߀0x8Ȯ:|:U6;g0 Bp 'v?o\- X겼ڮe:zVQ[4p0^ۻߙ[2pA]_ay <\gZ'K@TQ1WB j_Uzy^5Z3Jۯ|4tڸxPuaW9C#I=qOso:ƙA5ƝvJkI4LPecxb@SxLqnB/Ű݇9^? yB<[@s1T T:_ p4"&uimo6 B0n r9#]~ INu* 3G# s=8#ſ?G!-9t_o&K4v՝ROt>r@e(8cFYW rwz/t[khM)'c7[G0F$ g#ſ?G!-9$ەdM=WTsbJ4kt}k&3FkZ-Q͵$t +;Xwv6|2U٬f3&2@ݍN!-9?oV*^~k~1{=[Um\ew˱p'篨W/._i#V!HᲑ"b9%OL_Uxb⫮\ F|՝koc1PZn}K<kh] `c1͎I{KsFS wƈ͋YckڲoQG&/*eK/Uכf-;?-t嵓O&LP|=Gq ,2 /{w!-9OA[@c1T,+{e!nE=(IZ|:V mk>$3`ARzp7SڌrT s> L_Uta`hI5h²Պ AL_Ub⫳C?c긟qy G? &/*A[@c1Th`~U#s4y?A[@c1T C?c'sA5 L_U?q? AL_Ub>Gh tbſ?G~A\O?y'ҺOA[@o&b>Gߒ}(Ot3G -7LQ}W9$QJ?of/*A[@oC?c's~I>_U3G~A\O?xn}/ы]'vҍrkm|([|y-$tauA |5b}9YOp=T-UnuVV4z$4[nm@0C}1۽7B}e}[HGu. "xwQIw|Kn'=5T^'2[{+ 5{ic̲,`OMVnUI(%>lmH0KƽxjE#xW]n%䊘0Z˝*_irmb#]Xi:_ڭKU>[e鑞X+%ȺB _>?+v}?6sRx̑|_;`^'Նdwo>*)a΍zsY-~oVk>VWlqOlۀnW}Xox>?"izNhrk h N@ø aq5*U%vƞ&:Tc$.xCR-/:9+ԫ;˃ l(򎠢(((((((((((((((((((((((((((#ZOu?INLlWE󒻝 GVcYwA9T( #(TwxjCMwrT~H'Wc?S_j?(;9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T2~-bIp^CnO$ԁ Ib9_ܠOSy| W`I(OSEpT"y|' ׵`YOSy| 7 :qå>$OSy| .͖fL6ؤ}0 oA4\ZJ( iq"U5yNg.$9.VF<;[w^8V8J vA:ҋYV-< g2Aǀ;qy|}iY*wLᧅ Q>+w3~t]Foε^8|G!q+|~bFO߮H%u#rNwJK-p\XV?.#7G%f8FY%f]ߝbGpȃ5]ߝkZ(}f_kw3~uEQ"ckw3~t]Foαh8Am]FoΏK-}G>WK vA:Ţj1 vA:?.#7XQ? _6.#7G%f>DYoj,-.ef,8BGQ:Ou?x~趩>:ǎmsҥ Y8YYR:<;rw~h_<5!rצ;E?z/7,[Ykq# /O௟(((((((((((ϺX>;t9c(dbX#q8ZW_3PVrJt? C NA(Zע̏Jt? Cׇ|t':?xwOӮY'O~h_<5!rצ;E?z/7,[Ykg0_?͛QEy@QEQEQEQEQEQEQEQEQEQEu}4 Gz}:`i=b(<~tyF:)]'/oΏ>_ߝGY:k&p]ns0RW Qž~R o>_ߝ|ѿ:VH^I9/3>,g˴.FңZ$= e_(O?~T?%ocF%?[g1BA_ UOl'[tT@̭˷1'zMOVԴma{Ζj)nZu^XT* !V]EnIz3z6oma|kHJVHlPĮѵv2Z\؈~s ohB9|<{RI@ ( ( ( ( ( ( ( ( (t}G:Ou/G:o^SI,'4Y/9k|"ſuFy?܇^-50_?͛QEy@QEQEQEQEQEQEQEQEQEQEu}5}bד1~ݜӒ;+J`j Q   H#nOE!G@W(?ZPG$7U' ? ?V   H#nOE`\5m.,2ַ0 [b+/[g1Mn#+rB((((((((((Qþ:ǎm{μ;x?iס_K0 ~ dž?Zȱo]gѯ^e_<5!rצ;E?zy*|$,'WfQ^qQEQEQEQEQEQEQEQEQEQEgCASCAX= (Š(((JCYz?%okq]Q[QEQEQEQEQEQEQEQEQEQE5^4Jua] zqK3I$ @OJZ#?oa1q3VnWEVQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@ >ׇ|t':?xwOӮY'O~h_<5!rצ;E?z/7,[Ykg0_?͛QEy@QEQEQEQEQEQEQEQEQEQEu}5}9AgkC[Zw_3Q.skF/u C:!ؿ?z6=:!spol_ѿb|:!spol_ѿb|:!spol_ѿb|KTחrBa+ U/c]^==T~⦷0 [b]Q[QEQEQEQEQEQEQEQEQEQE5^`i=>`i=b(A ^aX:lM5ƭ arV=xfNmQcm$_5C#V ]-ޑi}y-f0 )e#j=0NsT'/j6<[H.Dzg#"xMΓ͖ @yuVIQIR y28ѼK%.Fxϛl#'_@tzÚmޟ=_}`N !$UުsO4 4} ˷c TU:4*^Ֆ6ԯZM594&(ː0\˵Ɩ.wEy5ErKBEUhA{O kr&{sk.㲛c2nP3a.Z5^ZK ̀JSEY˰19ɠ1"gH%ȚWa'7Dkignje9WFB_2\6āQ?"EvnVXmiesq9{#i1MMq3V?0=bSJC-袊ܐ((((((((((G:o^t}G:Oue?1?~E7,[Ykי| Cb^q# / ٻEWtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@_3Yw^o-G܁A>*OzԺX>{daIAWGE!RoUQ'_Ek@RoUQ'_Ek@RoUQ'_Ek@z2_}neCe8RASuJCYz?%okq]Q[QEQEQEQEQEQEQEQEQEQE5^`j `j PQEQEQEQE3VJa+ S[袊ܐ((((((((((G:o^t}G:Oue?1?~E7,[Ykי| Cb^q# / ٻEWtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@_3PT_3PVr(0(((oajV^0 [bGWEVQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@ >ׇ|t':?xwOӯC)}a_, Cb^xjCMwT~HXO௟(((((((((((ϺX>X>{QE!Q@Q@Q@e +RJC:($((((((((((kμ;x?i׸Qþ:ǎmzO=% OgxjCMw_Pr-zoXק§B|6nEEPEPEPEPEPEPEPEPEPEP}?=?ܠ) (((+/[g1Z3VE!EPEPEPEPEPEPEPEPEPEP_u?IN^5*ףּV-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d,Qþ:ǎm{AS:ǎmz9K6Yω_'5Iao pleDUy?܇^K;>_ Wd_eDUeDUKEyW:e>e._eDUeDUKE/"_*"_*`/G`/REv_v_hEX?/KQX?/KTQp",ݗ%,ݗ%Z(}T}U-K2I#BWv_v_>|ѿ:<~t\ eDUeDUX7R  p%$he>e]-#rGԜӼ~t[v_v_>|ѿ:<~t\ eDUeDUP {k_ۂ3oVl $U,ݗ%,ݗ%ϟ/oΏ>_ߝ`/G`/SKyinjN2́r;e# _v_v_7,}IM;ϗz7@e>e=ϗz7EX?/KQX?/KU)_1#=Fyl̰RA_"_*"_*Fp+}T}Ugϗz7U.K k{JkoӪ4͐0Q@,ݗ%,ݗ%[T<ױ.UL>In>wSz= eDUeDUY=V,ݗ%,ݗ%⪇gدZxe:u6zUMjW~t[v_v_>|ѿ:{as}w;GmmM+p9<Ҁv_v_>|ѿ:<~t\ eDUy?H%P39ُפyM7+:ǎmz7=%'4Y/9k> dž?Z:3/ QEAEPEPEPEPEPEPEPR/Q{F;.iamiRp8)(H#nOAu_3FlImX򌣁䊊8[ie^<@j$7U' ? ?SB,Gs4w9WګH(^xT&P0?i7`ɕ?x*$7U' ? ?Qp5謏H#nOAu_0[bCG_PPa+-2B$ܼcnfu'VG$7U' ? ?R2X+,K,ym$!VP Rnl lAu_1 ,s$hH;[hPPB^SL"a|n+<U/H#nOAu_kYG@W(?Ha6m\IPV[d-%2Iya# - !NE1(H#nOAu_3^ytSY]GMMQ[mZu!cąSt ?Q   ˜[HgZIee˸̊(_m??G$7U' 5謏H#nOAu_0[bCG_PPa+-2B$ܼcnfu'VG$7U' ? ?RKJ5ƟozחWL."hI$>YiUH]3?'c MW+Ɖm>l ;V7nbRq{H#nOAu_qZߝu?o< [=ԓ1[4yxs]rIPx= b7#HK;)7(2yyC]$7U' ? ?Qp5謏H#nOAu_0[bx?iqjRk(a IjCqp?INLlWx' m'FSN6mXt;Jy& (WTqBS匴 _- V_٘/^֯~_- - Qkߗ/K_aG/K_aEf`aj7A 5Q 5QE٘/{Z^ɯ^ɿŠ(ϵook?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (3>/kW/^ɿ^ɿŠ(ϵokk?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (/>/kW/^ɯ^ɯŠ(ϵoko?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (/>/kW/^ɿ^ɿŠ(ϵooo?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (3>/kW/^ɿ^ɿŠ(ϵooo?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (3>/kW/^ɿ^ɯŠ(ϵooo?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (/>/kW/^ɿ¸Z$vf6۶1Z()`g)yY2)]| endstream endobj 1639 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.369 641.131 459.635 652.035] /A << /S /GoTo /D (seteditor) >> >> endobj 1644 0 obj << /D [1642 0 R /XYZ 71 757.862 null] >> endobj 1634 0 obj << /D [1642 0 R /XYZ 216.367 620.374 null] >> endobj 1645 0 obj << /D [1642 0 R /XYZ 218.006 326.3 null] >> endobj 1646 0 obj << /D [1642 0 R /XYZ 72 286.295 null] >> endobj 1647 0 obj << /D [1642 0 R /XYZ 72 243.997 null] >> endobj 1648 0 obj << /D [1642 0 R /XYZ 72 230.06 null] >> endobj 1641 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im40 1640 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1652 0 obj << /Length 3189 /Filter /FlateDecode >> stream xڽkܶV-SER4qAZ@+nUk;R}BԈya͟_lzwwK.0ڽ YE=[fσicE\ޘ nύSS0]yyK. U.<ۛDq4\`]*0R)a^Ğ&Qox*HHв@R)`=@aC׏"`[Ciڪn+T6iwXE9~@tF"bʖo9szE&tS=k.'Mŭa$c TňLSFT=Cp}DLv v8P8ǭ<] !fjhk'G2tL_Hu^~cY!#1(#ɰ \mOz}񀁘dI^B:w SQ#%\!hNWBVTI W>Pcz˸=p_5f`c08AE?jr  @ajŮv|=eDD(fU݀ݐUS([0Ce8& Sa2,.aҖ羳 VWЇ4c )VD|nx z`݌WYژbQr\ f#U=EhCw!7_ AAГހKCS)!2ECe<&4}qb4c`.f"/l7H<@LmU}UC|=tyOI* RT* שZOyŁf.PX-'v}RgAx /[e"q|IOO6EFG~lf@wJgq "EefŖ(1qSiGk\ Tv+e_$9LG;:1h6Ja:_[ i+IϠ.ʮ), i JfFP[>투Or,D`{sY ux\SM`,y\2ߊ^"{kW&xD$ 3M1O+^jSA Sܶ`X=p_a[qtg+dw9mz2bG/eq+ [c|ZeDU8C Vѳl)r9 l 2ݎTy q7[Ym$L6,n`T 8u4"j;R Amu3-t'σ̻X詮9p+Lg9E@E3BGYEUߝoΊ%W0:tagbQNaTܛSq9֚}f̵++5sq&V¡4_j~ǹt)K>W*p4@x.Góefv3/cwXi:,{R: NP S!!iO֎ul;/\ߙ?<d j OtELXȼ])xHhlњ"6iWV=C*M^hl|mi 1_$inzO=c]<4_Νv۽1BXp}[(Gn^6]_/ sD컣 Ḽ$Ʀ^=9RSws8\|4I:!&xN{㴡<ζ$ZUx*-V pX|}]}" e.l6SSfMpb(h$=`k*f*+PD6՗쏗fs<5>YC7웗N{+ RwX}N x)!?MhgM9~[/b :-孆{,Σ Z{)վr1 endstream endobj 1651 0 obj << /Type /Page /Contents 1652 0 R /Resources 1650 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R >> endobj 1653 0 obj << /D [1651 0 R /XYZ 71 757.862 null] >> endobj 1654 0 obj << /D [1651 0 R /XYZ 354.866 560.598 null] >> endobj 1655 0 obj << /D [1651 0 R /XYZ 72 544.504 null] >> endobj 1656 0 obj << /D [1651 0 R /XYZ 151.192 241.806 null] >> endobj 1657 0 obj << /D [1651 0 R /XYZ 72 225.712 null] >> endobj 1650 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1660 0 obj << /Length 3207 /Filter /FlateDecode >> stream xڽn_o‹(J9OI{IAQ$#dz+i:_Pd9BN쾹UQ_㰿R645? UOv/Et.Kjb>2u讧IGqnY8> L[6|_Wփ4ѩjyM=Va 9v]s[G |Y=TmYGLJ=,YC(P&j=/kG d1_Q%+Op ӄ)h3Y C}uW yiCT1}Cd5 Lp;JzKό,M p-] @e RDա* $]Z,l214E\@T"*$금E,c!ƽ:j'IBL9&aΕ_>-`oqR]Ո;ػPwv+׶[V,&JD?Z{^v%#KBڂ0(>eW!8(2:prXJpkPT@t2N]\P5k. wMR%կ7DH9gܰ"c ;+L[yh_oPϋ3H #`h-w-0"ztqr[ZH43G 4`ٝa+[xˇ@z`m*LC8b&NU 2;fUZ I5v! R-@]?# R{r9M69儣;pRL2ளsnfSJOR d! ^ V7KÓ+jB.dyOe`1Y9zι69@6lJ5dS=uY`g\}} >]J!t\EEYnweuiNY*뚪h$r \a3"du} F?Fh`,Jv#T-ßFp |+ic.ͨB/SU7iP g4Zazt&2Nׯ]_I@ z̻8 Fk2kGv#51쒃ҍ$~,PWp;p$KkWሱA8S L >3Waz'pag a-5?i-p>3Ud{lXJ.fcER) ߋ[?~d$-Sk5 endstream endobj 1659 0 obj << /Type /Page /Contents 1660 0 R /Resources 1658 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R >> endobj 1661 0 obj << /D [1659 0 R /XYZ 71 757.862 null] >> endobj 1635 0 obj << /D [1659 0 R /XYZ 388.092 399.203 null] >> endobj 1662 0 obj << /D [1659 0 R /XYZ 72 383.109 null] >> endobj 1663 0 obj << /D [1659 0 R /XYZ 72 316.9 null] >> endobj 1664 0 obj << /D [1659 0 R /XYZ 72 302.963 null] >> endobj 1665 0 obj << /D [1659 0 R /XYZ 72 163.499 null] >> endobj 1666 0 obj << /D [1659 0 R /XYZ 200.735 81.972 null] >> endobj 1658 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F66 186 0 R /F37 163 0 R /F81 361 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1670 0 obj << /Length 2541 /Filter /FlateDecode >> stream xڥYے6}[MSbǩIm*dTҳo743vEA}Aw۫WoE^Ĺ9p(@17sS 015x8As;To%f#+~G4)J}鑷\7g#ueh٨NՅ}S/ fg}bzYUU,`GVV[Gg]`h5$#ƚ_Z.@%ZG^{M#OdoU }Cf`Ժٖn$Ŀt #>$)ó~'yٜo xA_p\()WeqJ]"Ks͇y 1{ooU*%2/# 2EII$Lg[(BE84aBj ]ړdZńq|a +6t5U6lF&31c.D$@\+F)FHyA-8c606c8@":0ɭay0ĺ騃cDBkj @asWHcCBΣW=M{0m" QmFj%$c3T oѺƎ(.Dy0 8Zc"㓤?:QCw'/d11=jK{x5]qlo8/8+邡iȘ\j,hH-m'JW OI9A'.RNݪE1mZ,dw;h ×PSإXU)#`IȹgI{}=3By`ϲr)1[3)Sl\CYӈh a e[5(5\Ej@ 3؟~aFXɛ,n&MԘDU SjAzVY B PV#],ۜe1 n_s-ZyA-"<_`?[s`aW7AF56;;e(y^vW?M9S=gK5!) ,Jf iٛ3M67gБhDA hP dNςc o2kAHpsq6NJSN7 xqK7z`8bNߦ[p۶z .D_zdxGX~ Ej6fx(nX# P§. !3P*M)' c\b r&/i&ѥ ,uW[I<]{=*M,z]os x'L,N\ mbA-"qTգi|Aha'S䚑 _fp5>1?liؘď?&dnWּ70}%|$v"U.*.XEyIi5WdMT#/ضp^ݞZ XQeu_6?]B!kVbon<|!_k@3ߞi3,)mt''y fw~2zu?*R endstream endobj 1669 0 obj << /Type /Page /Contents 1670 0 R /Resources 1668 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R /Annots [ 1667 0 R ] >> endobj 1667 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.579 619.215 223.556 630.119] /A << /S /GoTo /D (term-subpanel) >> >> endobj 1671 0 obj << /D [1669 0 R /XYZ 71 757.862 null] >> endobj 1672 0 obj << /D [1669 0 R /XYZ 72 720 null] >> endobj 1636 0 obj << /D [1669 0 R /XYZ 72 596.421 null] >> endobj 1673 0 obj << /D [1669 0 R /XYZ 72 582.484 null] >> endobj 1637 0 obj << /D [1669 0 R /XYZ 72 428.549 null] >> endobj 1674 0 obj << /D [1669 0 R /XYZ 72 414.612 null] >> endobj 1638 0 obj << /D [1669 0 R /XYZ 441.77 330.57 null] >> endobj 1675 0 obj << /D [1669 0 R /XYZ 72 314.476 null] >> endobj 1676 0 obj << /D [1669 0 R /XYZ 72 156.621 null] >> endobj 1668 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1679 0 obj << /Length 2828 /Filter /FlateDecode >> stream xZK-p%~Y)#vtk(f~QnaiJQ?֪LHS 1SmǴ7<%Irz:{ WL=b=u>I|'!B~8vGLmE{ڨ΁CgM2e0{eN;T 47A_C2!wBsg۳c&AVrfּ-A >PidM{(=? hZUuKwQF[~l Q'hեpL{- QDn-;IrZ [= |` O1@fK[O(7A˷j =t I:o0~6dZ:c#z#|23i˦9 B|8*kh .X'Ҹtm?Y!R1@j@%6s^@7^4 D ^^zC `i."@@hv<F1ٞbF9[h!~ږ tM?fpz};0,cv_*Wd v̏Jl=km!Hνk 4_)"E4v< @3fWv}N3z;)&9&2<"+$]?/xz("diH+(]\$ބvl%C爃$6fu ͢tn r!: !bVtfI+wlw6qp|Ss` G{pVkS~w.ICRrTv@ǓlA5S#j ܟ)e}ܮ3bHT4ZU,gߵFwڥa\+qHPuw QlWW=/|DsFbJV|k\ VQC5ŘHBo~eqwr:-I肶,U`2KSr9t F05贇?nbjUyϗwpw$!z{œ}Xnfy/xgmN=J^fvM7F蝂fr6b )L2& +,jl۰g/K^u>q ]bbwp#`Y Ҡ.3U."|~Հ7A(9):@^bjAsgIRr-"Zm c-"0g/8P5 c>Sk!.v66˸8Q4 ogUIjъZI20AUML9p3"z#4恂 "Yqrdz8ZG<5Ƥmc-+qv? gB%{b`i# yi>,<94:u|E_OP/\79C!cŽ`KL ZؘU6+.&%( #Eb4+!b|8hˎpEF[ddzav c>+sqޅ߅PB27?J:XͲA  #a}t,ށ DA.`4dnY8c5$CWfV8er~erҜ^*FF{']qV- e@a4ߪkb+ ݅<}XrJr2_#M b\lX$\H0qysoOJ蕾}@SggA  endstream endobj 1678 0 obj << /Type /Page /Contents 1679 0 R /Resources 1677 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R >> endobj 1680 0 obj << /D [1678 0 R /XYZ 71 757.862 null] >> endobj 1681 0 obj << /D [1678 0 R /XYZ 72 642.127 null] >> endobj 1682 0 obj << /D [1678 0 R /XYZ 72 628.19 null] >> endobj 1683 0 obj << /D [1678 0 R /XYZ 72 340.811 null] >> endobj 1684 0 obj << /D [1678 0 R /XYZ 72 326.873 null] >> endobj 1685 0 obj << /D [1678 0 R /XYZ 72 230.777 null] >> endobj 1686 0 obj << /D [1678 0 R /XYZ 72 216.84 null] >> endobj 1677 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F62 183 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1690 0 obj << /Length 2021 /Filter /FlateDecode >> stream xڭے۶}BogbF"E]\f;6:4=E5EWݿ/@${7 ( VW_<(X4XmY ~W< [Ubɳ<FoUgxk:gՏWVW^5 b⒰,ʂ?ADk$i:*K,q"/ 2JoJQXE=$ 7[SbUVj6nnPzstAon +" ~7'qiEїq )(^,ÇRn `K\a!;2 Qhuw07-[uwW5w4Ȕ9K)FiD`tSh̀ܭ\8ww\ojա(յ(u6kUpw YUV~@!GDXV{$s"<q< 靯ﮉYю, q{RUU#ZsD Ժv'Y-.,(3cp"5GؗdD<塪;C j@w8""qqc k%1q3;-U!3J1Y4y4TeGh[)-GMlNZ@j9 Gf zBI]ݤ|x$M]S𰞎F1DE֯2Gj>Oȴn) ,3kgvG=Ho2vr/. sM̿'':kx7L9k4kE&"&Wzn yGD2A^]$IRv{Zr3r1UGwl{K[|rWWw;{dj1dwIO|#/&C`J;o'7k?x|;lOpKՓtѩ2MBhʦH$3&,P^Yx(M}݂(rʞi[\llfDVfKZ/ $C¤ oc\]{tSM<wX+b,N:X8o )"B"Ku`pʪnġ5]OM Ό (gpժ{L?Qr]‹/qGRĠ-lkʘcW?Њ0%KE@bؖFo=aԘ ٦`V(֟?(`Q^܏t:u볊En"#C5NjDJD\GmiMg=ME1DK)PJU5~{x ǵ9: 9'&Zw~ӣ&BHծrm>ggmnf֫=''Z{RER]P-$j5栽Y̠y3[H#I~~Oॹe.rD'.$*%@tɤt<{๹xC }g4PӀ<'^EZ+lM<1MA²mM7*m,Glȱ1kڒH^zZiwәCw=٠pI>ؗ쏶V&>q\^Hqf9'L2|ykG@ endstream endobj 1689 0 obj << /Type /Page /Contents 1690 0 R /Resources 1688 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R >> endobj 1687 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 218 /BitsPerComponent 8 /Length 32469 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??xm h ew BJmowpqF,ۀ߷=l]C\H b nR#Md潞h1]M! d3/^xmtSv$~@1FxWOimlrO ։t!QKs:TZEk[WQ7۞Oe_D` /%X(]猖 Y?hZI.b`DrG Gkrom!$8e# 5/n$f%SbǨ d,팂92G z \)8+04?~tyF?ֿ iG&ҋH44]E^i6LS8͟ÓKq&)X'"@ڻ1~5emy ࣒Fl֮,WĻZÎz|Y0hvkDG2]drZZj77GGɖ( ic4Y=͓z7Yf@OJi7n1xJk- `kLjKD2y $rh}w)O\NU2)*GUvbvrI=yt4!ȟW$~bqI>2OjiOeZurQat\0F~wVMǎ"V?WVrKVF/ŋ;tbNavQӻ#ڎW9rU#hݓKoG+˹roG_s.*_v~Tr̻:֡i* D叛|"Mtx{ xZIZ"24#7=7(Ƕ3֯<\ye;xCovܭ6wPj {k{w>U+eO%[CdeI1咬UPno'/T'i '=Ji欟 Pc8nQCXd[,XRHPǒ9_`]<76e'4whZ-!vqY(5;MoO wKK}рy0&Dvfgf=Y'ۈNR9ݲGPH8GaG+˹CEnObL yyʹOסCzJ.o%fYM `b`:Q2]iQoG+˹roG_s.|M_ZOikc:dHdI#X!3StQR6lp:*IiwZbHە\/ʃFAlUخaȆ?. 4z2gz0%ws&! qytJt1-n/ ˍYe譁]/Aqo^iwH9#<ջ1[(+Yc2ryeܩk6rsnn*(,wUTxTuXKUgԓGNkNHR9*x2`dEQ-H|䜕 @G+.egSby-o6R.py8O \_^h"q?K/~B@$sb*;{ +V!U,͔'*'V#@cjqC>eܻP^ǜԸo~"cdfX`RN(N_KIH)XDsK>}cYc,M6Rx"]+NҴ!vX¤j9?Aֶˑχ(/cy#"bYP#6OJ׵?\=M Qb. 6C4vnOEYW`!T+k iw>:=8{q@N"p- &wϠ=륭(+(fh ,]@=tD/f̊+_.?G\?ΏjȢte=+_.?G\?ΏjȢte=+_.?G\?ΏjȢte=XQM=k\鐠9G\?Ώj͙V\?Ώ\Nj2M*][+0Rv'һTԎ5AeBrT`C*rG%w^N ,ws"r9YY\x[o.4eFIG*#F3]]e7D񧘶b xEu%F1q1V KD|9Or)z t5yL21]dOҮiK#w0*=2XZmk6>Gpy:~\^͙V\?ΏEkeˇP{9{2 |7MKkx;DEY[)A2d$9#/Һ.A4'aÑ!l`1^q< ]jwzd7M%ݒ+RqK7$sItw/$,cN P 3Z]Yys9&B|w"e}9 DXvIgwcU@5BmWD ZLlNi.K\w{tϵrz,Vm (X%H@d-V$o=z8 e;yeys-W3 J8rF)$t&h|-7Ĥp"kP11?P-*!0I3N*m.0~2}kRǖI eBǽSԯ,4ȬQiiU-\ AY1GWvi/dN[&&q,s ^sq?tUocC*'=GC[ٰf^IV\?ΏWBr2(py:=g#"KkH<{ \@\kˇ N};FXķԅ 6gD SPƚ,w G m`8z֔kqypnn<{XyPd9ԓQ"S7RѨ=qg[XoK{ VMHѺMר*Gl-mSaop9۵4l 9:DŽ#8X&I0P`qV2᷎g,8;#ӱ#l㻴2 ;X پou#¯yN[}ǭY c] 3*l}o{O" c#̃}y-TuXqg 5%}I{7,NQl`s=֡.a5Գ!]QYpQ\@E(_$̰/m"fTB >sNՓTYaY CPho{O#:_t:~ɋڣ:_t:=j|tyGL=:}&#u3KNhwΗz?G/Οb論χiQuwee[ d":_f뚵`p4%#3 *Lx){&?hk f춑T@ݏ ׶:󢥽].Nۃln##jǺյu-w$h#t_U};ė;"Lb;_ GahZ%Fd$QG=I\?b+>V$aܹsz܌V vF>*mFW>]Aϭ7Ηz?Gwh|tyG&/j|tyGL="o|W!sJD#ٷݞ3jsGqcwre2v|{tzQ{O"Ƌkigf2Iq -2w,TTqy]6;+ّ-^if6._seci,w9ΰ;*o&(o")-rX 9J,<@Pj0a1 cGaYW:iio6h; zJ_]h77)(rYFҸ드tNWmE%tiL͂| ^#mYt_-* b{`(l=ho;ڋlmHYd0v9:tҴыcI'3O׵}FE;Qt]a%' $pxZ:{-ь34%Hg/f#=5^EEbqOEBqcLH|IuDG~K 8ޢH^Wg4q7*1P 8&⃧j1`ڕQ\%By`dqE[E8r+\gyc#W]xI-[Y#a9VA y۞>DCd4On|0%z|3MZLfa} -q}=A |gV-,~}@\+ln @́x/a{;5o^xo^`dX:1?#Lq[j2uk#sr{Q  5ԚK1$2*@#nۿ۱ۧoAu-PpݡEyV<b{}*!Y7qڭ[yVrnEӠ{c/Rы٣ńyKwtyW@#f rsڇLܤQDQY(>uq8\y E-VݕN_}e].$IigEW [IuQ{4jy>sRsV?OWv1FxKVd?k h+h4#֮[lċIu!T@C{+oj;[ܳCr\OLdbF\#[QyJy<ݣ~ϻ3ڟG{4a°&#ri>sF7җ/i+Fخ瑣W?٣ W?=GAQy.B!p2:gu˭Gƺܗ1hP<[2[ f7Zז#\Q4sP8N_%6.H(2!"6A'>V]3Ov!{[yJ-?U2A_:t>>mw"c$ X#i ,h=:ѧܬʮWhAF?SYxB(}IKm%; yvu#aRhxrxNN ,V+n.èO,29uI"F)< n)F~.071S$2mG(AVDqIn6PA`yڽV|%}x\Jn q]}Xݕ~@+;m3xIwyg-ma[[aӿ/h٢;B[ƞdxg!Y0+z[F<ݧ.nztw'*ʀ0* a[(~bF\#[SFخ瑣W?{YFخ瑪:_SD2FVHYA0@WW\.y-s#4s"((7R~\qGa "RxEZqA [ O#gjP@,XbOS~m_Q}WK/w2C`<4?t8pu Nͷs `d+\7#A܎8꽣fK? Oegunhdy:9;)UO8 Mihcq̏$l]]07P n{ ׇ5$$b&J 搠.G`tZ4-be}G̋+-/un1Ga\xr}Z-En/!4ql+RFz$~X;eBXyh ;3=I?TvSӬ#f:nŧFb( 9ڝ+bf!!*"/ |h٢կmq ov|HdA @۸y&-c(UUGTpahw"N[^[.u;ip|"Ft>@ w%<,w241ʡf19{Ga4l% 8-A{rP7m3Okgi#G35RVQ ޥGKH걨 g#"-fY+=3؀Č`3ۊIk}j9cC`Tp>Ăc nH2s"բ Gev*}Po 3%ьvtO'rFhki+6b@dGKyZ-Xڄ&_נ=$E#⼸N7/!`tP N&!4` deUڹk}DR ] LIf'}GSq#0F-NVPyR`sK0E$6V?tʊӝMѩۓ8Q{ֳA$f 4[2$$r;QCqm-ZD3sή%\a9#967I3X:7F8q2 CcqG&#m+YWbF}%oyyr0;F9xGnԞ-CU&M\;\siELxXC$*r#uAQtI:1jBxËs%MpxlpK+80wL )8uSj`: eymbOoE"[Ewe+iƮU7*8asRI%sghKAX;q=CHtk:̢g4QxγbE4qIxΐꠓi`F2.Ӕ0x9O^EëXv{P]Z* )y^V%!x I gzVjp悻:qZ%e`Ӆ嬋,Ќ ?`xOB4ۛ{G6ϔqr5f,Z*txΏaOf>9=1֡T{f fSj]n)+*km)dH$]?nq +#QЍLJᶰKymAcUe9;9K o=)hݝM ͸?*miMyx-~C t.}Ҫb &03}YOtTU>@V;pA$ jvr;^"*r/N:lwqy5XgPVtlCWIlkkb1F{bk{i7ɦj5"HrXb Q uto!{x.&yY +G'ȃ ֱlqY5ǿT}Z-sLmZh[chRf:JoZ3f<Ș%_(, szzulww>y#c,ɵ@;yzȻ;:XIGeys]i髑o$X`s#+#`u..>m $`7icqU5wEЭIYܡL+0\zJŭ :[{׾mIS#Fc2z!wQ['wݻ 0m ϵ #NlmTyr3>V4ZƞcΤ*䌞}A M_J)hf|c` @A/'+mvK}FKn# C/w p݁3ދ{B4~+motD:zv9/5/i׋i{}eorE,Xp Lt=5T<:lT;qy⳵}/T70zڥ_ O%m,AyEv8,Etv,C[bzz>Ǣ70;5  $n9おG]=i64 $jc Bj?[%aOZw4C+o}y-Mct\VD?bKGحl_Ώ6?Efլ?Ξ:Za̞`]HG>T뺞/2R>Fgn8M$ޢroʑchc9ڣ5 FQT;0F[qcn1hYu+++(g[A#x-5q{t[]T.Xl?VΧgn([7.qu'ӭ-PO,nD>kngAOZ.GD!gHк<?:õ饜dpͻzB%%G+F:WBASsڹ|+0Ϩy[DZ4ɖr8\,M,Y f1ؾ`rW%x۵fzҵ;[(t 2J$aQ#V?šp>V1.jpN2Ny4[CV/fKkX䍭-D$-}hY9l$MĖmuܬ{.|q]m1W7{F%SFk&m5M*WS'N=hYy-bKSy}:< "[%Vjo6?GdC+o䵑 qiI Opn}:4<|BGRc#x4\,xN[HwtRJ#n~>{/aL8J&ܚʓ–xEm4Br#f8ⶬvIˉؼAg=p:0dfjZ=DXk#*d}yp*M:O$'mRt{Tz֢?O}fI'yT 0*\RN1q<ӴZm^z+"P1 ddGwhQ^W!2F䜐H@-nM]Ou̖7H\mW/ۛv=J`@[l̤8 dqh7z]6K4Y%|y z.D6Zon`PfRB6Ÿ;-[N>$[|8ʰ}7@}:US;Yeo*a ;$[tVvV(cvN{~6E<vj;yxI8]J[l6XA2#2Gl`9eIqO"B'$8Һ)<3 mvBn3$`ˌ m0B6{9$۝w0}&!P]'?pUxNT7^1ڮjv#Y-gS Sƒ8=@zU|Ib֒mò4a$$}ZOr"aIۏsנQλ#a/Kk_ͧM5U~I;U_P:Nqg$p pOp; ۟|u7V462 v7@:/Z\L$SnMVdb0vִԴk׵Λ20,r9ieemg$6ҺN06Hʘ%5Շ#Re.%WqrKF?{HIv(WQ?i.*\J?Q#9%أE^˟G\J={$bE4MHbɁsy?:\b{.%sy)H$t;3ĭ"[;x%6ܩbl'={walVy5VXVgN8GڞŸʻ79p1C trMB!7hCqjoxݯL>CI?tϵcF{Jy&6ǖ5G;=zuCkiIoo76GAZv Hӵ_Ӯ4+WݬvAҫԌb*Ҝ1|9kևv,qܶs(bGh֥EQy$ۜGZ.% TS8ӌd[hsy(˟KG%أE^˟G\J={$Ta0lY^08ݸ1ڏItkvM kA&7F2tMfh^'vL3E-n+xs„83Sίbйm%d< ?)bZ禽n7e{oܻH6.U7nBcxxzlMDmݵ9{`-6-E8X` h]Ñ!Ĩ2~i8^y?s=ޠWj7WQݺ<v,rGӣeYrJ8I<-c췶/p.$V1iǸr>v%ܱ\4Ͷ[#TiW1€6ӎGZ]j6ZO,3[Rd;9+Ӽ;oa%Ƒ1 #8&u95 {FPNH8snL߈"fGqdOy8 <ܟ*?4eݦycG20̉ t۹3λ(QWQ?GW})[yTgX#sm<[ pĢ1iFޤgX:m# D<R ež`}52yI"i`9?esj9iua4׏!V?.QFT>!WG㵪s Au|{*P;r87de/3hq o<_\y"ʬѡq>G{H v3-J1a!#kKYWY"T&EQQ~XxHh7=~ϤOIl-Gl8C=ri2;-~_qoC=f6BvտkW7)g$JVL^BB=2 B=ɭiB&-:1 =Lm|WL^ʷQy;XO`;v/xixZhL4)T trH9OS_m52 ffE#vپ~XLjKl$R[ ˒Y%&d\FsV!o)]2V G@<[@i$I*Op3G#tE>k)u'_؜Ė[(v1'$-t*-uF'D)$̮Oul֦⁩ x3p=\rH9Ѿ19nA^Kc9>r֐[^n,[Kg), #lRv6=:O$Q];eTmPG$D_D>%e$m۵{Bv܂:G*c~Ck:/4ֺe  xr >j1ZHX)d*N*xU 6NGMrH92B^coy$WarȠyBdTOW<mIIq)f29 ҶΣ8:Ra΍z+RDԟ?*~A"lQXړ'GQ&s56e $}VXB2JQc2kcֵ]76No* Co&`H̶̜mu23Z{O#/gqgyYO30;:cPҧtP[]J %TONGC|YϠVгAO)aO{{Gg $O)I<Ǵny0#LJQ¼֥cYKPMCZv '+œ67+'x-mJ]؎@5_?ke_jdi3!VF0O9_Ϗ]#M-TI D$=r=NpGG+i4R y$eJ#N5A.;Kv|P_?36R\\Wׯ\(Up8ZiSArTyi_ ^g9Et~Zq*/a9>r*7 r2pFI@y0n"MJ;ylc0C.y'jS_z-q,rCm:HС@rrF:cW>%Vy :}|Ќ8îZ<qEm-6Yʗ$g=){O ~f?<)|  0A:M&%e8^07v~r Ȯe&u MkEJ 3Jsz"M<6r(*Hɑ@xWU5*ZV pz3?-?Zq*kirTyiAuD;SbnIߙ W{ڍ2QMFRKV S?**ry$w^!6oll;O]o8gǾ{T>Z-[;5ɜ2+v&gcjWw^9"c@.{럭S4GQ6_Xc:,rvЁVin=! THzdu]CY]%I$sFa#D6.ɻhAo.6 _0ӁC{ 4{ ԕ+02e|| 7g9Y Ɔ }r^C\&h4Oo F IF1Z={/2/tϳ_e#8!ݟU}_ET,D"+뀝 }-n|y Cw\ 6uj6c0J糖v܅~{Ngr~P[X*qjّQ 0Lg95؟*ڌZ:\Lq\Kfr 1˯w#jf~Hl m<دtqsp .2*WryϠPu;6JgtFy]m0Ej+֌/mm7T"*Ib gy1'Rӡڋk1S#%Qc}.4KkHeYcI'[T#NK,gFJ[qP@9 ֥vIRAE0pF~l~T*lI<vJf=ڜu)iuXsKe̲fB=SGUV ?fi2;W>\D^} TvUʂgryϢԷ-Ƒo% /wy_0 >nX~+=i6 mO͈$p-H6(e''8[n=sh(hpIB~d'TFۭuaQG]Yo?*>m=GXTQpM7IXM/e1>[Jh C5ۭ^r*(T :I'k7qGNu¸x:䌟ΙkwaUd6Y7s*򣁜>whβPKY&9̯8 HҩMhs"C$ Ȏqb2z~[.QΰHqo('=qu5XnƮ%C rAOyH=;sj%GY*!@F?SYP$2\KrEi!̊c~BvyzsW-35MNPoKRP@Ym|'-Av~&14Ӱi&;`q(m5?]G-4j,c_W-y{KA'PGxQJv;@&6j9$y5)-C#g,ylqK٫\~ꮴ*PVI!*CEp1[mݻ:W\j!Q^izZm$>C^u0un**/j߷[QQo?*¢dfۭ7Vuq4rE,1V :~RLf\4˳ L@ʨ cp#} 'M UIhw¼+QA[}mOh-c$םޝLϢܬehFvH{y@aRr[q5ܙ"N0ӞA<3rh+ #OnS$[ G'qe N}?*ŅM2MvJK9g9v=\W^`n;.nW ̿A*LJbwwqiKoEОekum})@t ߞpۥ%Q"*FO[gmsw"\i~lʹQ5xn[]27,o*Y!DybOI4{5`~UDі0@hL$egQ p}WDQv*QGz˃GZ賞huvTR9 `?t'\O]/2Ycr.NrO]cHܼ1(;?T aFGG\w"֦-J/K6i"L0;ᱪi7Zc;RF11[ vN8#s˸rG/49~' 2s0 1V>;G[kY5"AŚ,{{- ~fM'H-E}9_6l<8^Nrhr#:PFTtS P- ޡ%t\ݽqƑ",R;̀H| 99"ugj=\F/13 @a8ݟ &2[X'̹VŒ\AM-5]4I `:}zB6_imjF*񛴌K/da)#'qҎywH: Xߛo0[J&rT+riY. /o(r3B ddsxfGȼ;Z?H\. I |t_Z֑[',C1HI2Ǟ%_*?Wzʹ(ŚvO,$\5 x68pzd\r5k[ <2˖. PBgpt?+=OGJSVs˸rGTd?hG<${j7N9GJSVR]Ò=򦾙hQA,̀5L>Y?z99#2+6ukqܙ~l"*^$r~b7|ߠlOMBnd7+ we 35kQ%&zA pL<${$:LZr_/$_.8=0{gP^hw:&=Pgke<xj7e_O(p.ߗxIetھOnʌcR73g,EywH#Lwӯ#4l7{j"NMQ 1>rh7Xl&. FUrMgD/|0 /$ۖ I 2=jʵZp՛ҩUFf^ܙ">pAjU7w y溺tTSX4VQ3Wzʏ+Nyw1c;%_*ѢywH0YݻjkFx=~ui7^@~}3Cxĺ[ۍBh9nJh>I!&kf7m=cZكy8Im4oesbg)% dGG<$J+=OGJSVs˸rGTd?hG<${+=OUomA ^C"ͷr@ArGJ۬Cu=^ʗpM4jQRTv9v Q.=58}"HIaA*y4cǛrq݁F+<[^CL=x[q 8MOx.novvLvAqaS]Ò=P>57=21Ϸjaie{fܣ۷*cP{6]v챴8O1hG#Yt N )lgdyn.əv#ܠ ֎ywHcGym o9P󎽹z>3IKeFPLQvj6ZtZDF"vkvAe|f*`7x4`е!awwt. ) gvFy ]Ò=Kwu8bw 89w5;_X^V+F05ڦo4K&?}$>a '@+NV6r ˏ7,ߟOAڇ9wHWYGBCK}jE^XV1 RŊR=qhvQK-orghq\MW|^Pe.['=~B \&5Zve*,YAԓ[F<izFGVrqp~Iitsv pv0}x BҭZΑq2s Uj\7w?j+m’Qy_NӰUg Yn % #z|wG8Wѡ2q-m3L5otQJ~o0h_5\=Gz/Ki\xO[n];]F2kM奩Q5&4fe:qOj>.d[_,Nc39j}ݾlI{es+ec<j= b1sKY%%An@c#i!$S[]] o!H#zs֙yw}F#Clanv7n՟/ԡ{.6EQov4{A+IrTn=zt-'}^ A'#8s+# )eh [@W>rO\qV_ \s:\ʛZDݕI'|/)NJA#ֲc4Cow.pONF}+F;[Z2쑠P,F0r:ts\֗}U4W r$6HAdNTCa.cףhoQ*T$dg㚵ˏՙzv5܇̞V%6PZgy?Mry?٨ejgOQyT!{ċwpX+O4lH%ϥ7ț?h_lG.?S>7ʏV5Nju$Sī)̺(pi߸iuZ4̋yR8"-PܻH-Y$5nv vRj#|G4ig,x) *s0Pk˘'Eo-efVfXNݟzc۟ iu)/' faUn\M&#xQ E|g,>06qJ I4mzU[#Gt'#8$(UK[*y$~b  $w:^6234V^3V/X²1teԃ~Tzؚӗ\%:L*Rt*OPj.?RhֶW!+z;S~7ʉRNjT~\f٩gy?GOQhyˏ}{53'<*- ab&Id&6>w'R/0}H@u+`{{MCP[ $pц(|, їH\)끌1Y𖓨j֪.ii]; J(Fs*8W d}#ONB\Ef,ʧyr=K1)A4oͫ%*8>e0qcP(5 [D[fI ml* 'Y4FӖvd"# @ŽQ^^w˶6Z$?(Jѷ@eyA:\Ijczι nnG=Eu}s9w;^]ClL1>@ .yO(zzˏ}{53'<*Cȟx.?Qˏϳ<'<ˏGT׮ʚu8P<-yU跺Pr&I}IQE'?xm.l#l#y"Pjs:[N i%O-u;qzt5BÒ_PC, g=*:@ 3Hܻ1QhSEmXNEqBpC(% bvX\OD70C"ߔH96wZ'D՗W w+`dݍQōkw;Ji 0N:3 ճ *8Ѱ+%QX-fKK[g961ߓt5Z65Ǝ*l! 䏗O<3{ej-1u2lgϥei^u x-R;%Bsc9Y5φfԣӮ! ou-d/5ZmV5M, lhGNrn45? HјT 7$c,m&[Xbxh 򞞝lHYcb%TdgrI4FݬM:3m' `r@18eʆX 0 ⹝/H"Dbh~X~q;z}@ p>U`Ozڤ4hUt Y-Ӯ8ϥEy4δگ". OR:ҳ -"E#M97m;}~^GaГ"kiqf H< &h“" ^3KӬOuqS$J#@ɪV_:2a@wysZL!RJNpsGC} }c}JKtҵЏ 1*-]6Fީqֲ|Skow9.`e2$@~=hJfEh?3ۏF3h|{kcK1"tQEQEKHq(+IJAFO0ۼ)IOCj'7e$7 F3H i~{籭AwK1 E oԳkHׁLoր)jx_&U"bg#<`kNVU +99?)$lHT7ʪsrZYZ>5-2d1oo 5c_6Ra@vp(דZ=Ȏ yU Ň#3kO>KkK)V(CLĈ.*O>??Ju5S((T{2*@"c3ңd[%FnX9w<㞠E5x;ƴ 9ooMi4 ;=n 옣 OAZ%ƥI y%V%h'8OzFjmnuTxmV?!rNE\,n|8-XNbx)cDuF:VHQcގI\v)Fs>?ϵr^/7ѩHZ4lIJB&7@ ʊ;m㴁^HvX, 4/徟ϹOɰ&t ,ڊkuگ5$:(р:|p}8;KhmɸQ2p)u;;Y|Gm EN@=Er~)\Mǖ s<`~j'ˌ3mrp_z/?J寴:]Vi,-^WFvK3(;XujP(+sZYet!9dGyUei}onv*eQ%/ҠKf3@!uҖ}Z$ӄfp"GպqqFN^n$yHr4JY{dWNG(Lch~T֛w7r\\*_4^*ދ+ѶΓO5IK G*e@0Ӝ gagG #R0 wlZ[ 10@ھPjuϨD%w~X .~qnkwwm]*GݑIxZV2Z@Jт$sׂOjm`C2㞼 MQ,}bhenvG!r.602 <^ˠ n%,-2D~m Ȧuv)enK4",Jrkmh endstream endobj 1691 0 obj << /D [1689 0 R /XYZ 71 757.862 null] >> endobj 1692 0 obj << /D [1689 0 R /XYZ 72 642.127 null] >> endobj 1693 0 obj << /D [1689 0 R /XYZ 72 625.056 null] >> endobj 1694 0 obj << /D [1689 0 R /XYZ 72 607.123 null] >> endobj 1695 0 obj << /D [1689 0 R /XYZ 72 589.191 null] >> endobj 1696 0 obj << /D [1689 0 R /XYZ 72 540.508 null] >> endobj 1697 0 obj << /D [1689 0 R /XYZ 72 522.71 null] >> endobj 1698 0 obj << /D [1689 0 R /XYZ 72 505.519 null] >> endobj 1699 0 obj << /D [1689 0 R /XYZ 72 486.844 null] >> endobj 1700 0 obj << /D [1689 0 R /XYZ 113.902 417.136 null] >> endobj 1701 0 obj << /D [1689 0 R /XYZ 72 401.415 null] >> endobj 1702 0 obj << /D [1689 0 R /XYZ 247.191 161.371 null] >> endobj 1688 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R >> /XObject << /Im41 1687 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1706 0 obj << /Length 2471 /Filter /FlateDecode >> stream xڵYmo6_!>D xYkSzqz)pH ^]v%UҞZl 93Ty7^Xl=DLJ/ Sf;JUe߭"I}I??wZ?%^N[v&_jsɁǽD%A凋w^＀, ~ۋ.u0^)h-S/ dBڿ"2ݴ^x ^W}ZA૶qLD$׫߂' ~i+pǁ)?=vf%]LW#MlqDzkLgOu>cdI,}4*~*=2XL47i>yaݪ+x(&DBA>ƆPx9;j5pp#a$Ih}9h\wG,?$dB?7*5*ח+gg1fEeևOO1d'y8`#| #)pLirUr9K@7UٗjEXݹRqS,NcƓϥ SA뿶֎ 9KCYs1o#nW< 1 J#l'; xy2ɧ8mPKϰ!4 #Ca73zis] _`0o~+)_fH-b.0pN`8) 0XE3({i ݺ%&G8ԭ^I'i+ZϬg 3 fP׎Z֮y>._n<54֍;|>J*vN)vst:Y0`%[Am-͠4lN%;V Cv}̦v@+a&ܛ팕LDҠ%"PZxZPKC;@i}}…ȣ%CJwǦM7u8DZ Đc\郪2VzuEKXȣh*L#Mo0t1%#2eLi2BeirzlAl0;+f eՃ55-K3o %9j?r<(}4,Z*o1lʒBjZfơИK^R@͚/XTKW!ҙIӎ+Etq3՘^79>8;٬Li'si¬m+4 u0[~S2RMO vc{H ڸuA2 `bE@][KL 1n6Z#k!>$uqT(Ѵ[K5MWٺJ۔$E 2˂oPN$2ZCg)g8X]"(ס զ"u-aKLbQD AVU|;@7#f'>š1$C.+ 0;$! f 50xAXU.~؁J_LUCk{gCÄ#lH] Ah@"i eSv6Da']䲚Xѱ3ޞقE/fQ ۘc#sjZ3k#ED&gm9镬`ꎷ^uc/= Ch@! );>4bQhN&dGtruXJ9иv ״uqw#ijz7guW=IQ72H[,ε36[%?Ћ+OK~CO{v3Y"K"f~+  {$ K͖ 9L$˒ԭjo{vO8R842d1lٙ)Bl<mn/b{ŃG p:ǻ]z97A)3&F[|)‗ wm\{wNfCuZg剀>N91Է;tJ;YO򡉿Gd> endobj 1703 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.011 391.62 439.269 402.634] /A << /S /GoTo /D (editing-objects) >> >> endobj 1707 0 obj << /D [1705 0 R /XYZ 71 757.862 null] >> endobj 1605 0 obj << /D [1705 0 R /XYZ 365.785 488.867 null] >> endobj 1708 0 obj << /D [1705 0 R /XYZ 72 472.773 null] >> endobj 1709 0 obj << /D [1705 0 R /XYZ 287.918 244.766 null] >> endobj 1710 0 obj << /D [1705 0 R /XYZ 409.003 202.549 null] >> endobj 1711 0 obj << /D [1705 0 R /XYZ 72 186.455 null] >> endobj 1704 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F66 186 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1716 0 obj << /Length 924 /Filter /FlateDecode >> stream xW]o6} @̑5$K4iO]Qp6h(ߏ(KI< ,<<+]h@4>C hDPX1Ю/r.[&F <,G_e46zWp}i:*G521(rGmcRD澻AaPm@sw]ba٦v|>K{QW>T9|ki(Yx 11K4IAr ܠ^9YZrb񠠪N,brQOĶS ]AtIU%fTř0/d*5}0_,.Qꎯzlγ?Qxls?\N{.XjdP?hbeX@Ɩֶӄymu.l͹!\hG&˓*Ƙh7F$%[,B> endobj 1717 0 obj << /D [1715 0 R /XYZ 71 757.862 null] >> endobj 1714 0 obj << /Font << /F28 123 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1720 0 obj << /Length 1112 /Filter /FlateDecode >> stream xW[o6~ 0#%Q~,mX% Fm52It"%f- 0A}ws p;u=7;! =-p|n׋ rqeяJV͏4]ꍏ,edF/g73,-#oK+.X:aN^ )4s k ԯxBa`oٗ}Ҡw0,R>@sw80CbTC0nQۮ(2jA S* $":T6\ŕ')ITy8WZ89ߵ *Cbwմu;Ӈrx,80 sXnu44b}!xd"q&쐧wrz*QWg^@Q}8 FeTyp@ec +DѴr}D)-M3M6^bpdv.e{Y8aMF8냎3^,^[0Eh v܋=gU/,OB"ﱡ~F Bڴ{SmqP1 ˊBCTʛ}35q/?j(M3ޣd_$ %ݶiwQJXrPK=z:cSzkJ#%~(+Y3TOoGmIVڨ?tKM!-Ϻt.aD^3p3r[4DU_agnH\h{Ͼ/•=22\=̟:-WݥJP6=̱TA@zϸ endstream endobj 1719 0 obj << /Type /Page /Contents 1720 0 R /Resources 1718 0 R /MediaBox [0 0 612 792] /Parent 1712 0 R >> endobj 1721 0 obj << /D [1719 0 R /XYZ 71 757.862 null] >> endobj 1718 0 obj << /Font << /F28 123 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1724 0 obj << /Length 872 /Filter /FlateDecode >> stream xW[o0~WX ya]JCKL8EݯV|>7|x\>O{xs L5khy&a04HiȳpT}R+] 14:S,b4c84 Φ׽iW `eł.r<=5@lb`9D}1>`؆;Ȯ0{!.KM3rrMd2"j>ǒÒ (dΗal5ax8rؚ2[Ll›T9&ެ^_B=]rJlĢSLrpS˾vXdƮk剄P M@#C{"ڞ{pه" E4,nuV6b/cwY\ ~5+kFsZCB!]Qj_,M#֪Vu׭:cZ qdK5|av|hIGk-֘9C61cn߭ȶ=i'7K0֓زd'7c0Y5k64`w՜.0`[/ OTI& endstream endobj 1723 0 obj << /Type /Page /Contents 1724 0 R /Resources 1722 0 R /MediaBox [0 0 612 792] /Parent 1712 0 R >> endobj 1725 0 obj << /D [1723 0 R /XYZ 71 757.862 null] >> endobj 1722 0 obj << /Font << /F28 123 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1728 0 obj << /Length 2188 /Filter /FlateDecode >> stream xْ}o V-ǘ]~PtYέЩJI*K H@@_Vr4>WA=7" flf @ƚI*aj&y|$ 4oTI(SckZ1-'< wiqAic=:O><{=?QX( A, &P&ggך_}W0AY͝cGE͒;li3X;uXYkNA4q\QD$: XEg{z|RaPwLyfzFljݲօrmmfy[ _8c&YH_M OPv,Ҧ6sIuZf#?~r׶U9+SU&eZ.mqNoNm^@'~gziSm!9)FOg3%+Z,tc ϢbIr8ֱJgcuikU~킶:x|H=SAgc 'SQ>@1zD>W8ƈ #8OeSqZsWc2/(5lIL+̺: 3ۦyKUҳ][Zm[iGZ 'R~AumWj=% F jƸOtBWT |wx8pDH%+FZJ(!32f3)?&NL̈́fk_ YPglZ<~@7[K"1+6ja)ӒM񰨊ΔBDP{@qgGő`QqH!/(-1$)4" Sz9 WnoIUmm:>oë!.Ui=/I 澤%-)Z%MU{va)*GkW}E?BknӺ͗"ifk ;`d -m\Ӫ]~Hvn:@y.om-,t>]RNY(> ߡeIq& e:חf=o>:c66@P%{ˍJ+l H/_Y 5ev`$x7:Fr*|.%w/)Va[vcu^d-K1KFM7f] ӻtʟ R:llKHsO =ԥ"$$13VQ(vPaP[o@m{CW.*|sxs4M`U|ȰTky?հ쫠(V]=:0̛m41BZ|qPu =׷K52B[l\ѽM|uu(}OeoϻytpԲ 8R_*fоhŌߟݼK1l6-GwW ];u 0 Zx)j d ?SL-|”Է^3D!:f۠N hef3r/f8z'[Dͼ@F^~u-ݓSzt.vwtsLyF|p1CNm"St[!=pAp?`\Ƴʉi\b1\b.L \nV !j 9!Nl@bkp%Xpw='Pcޣ+C{>zOM> endobj 1729 0 obj << /D [1727 0 R /XYZ 71 757.862 null] >> endobj 1730 0 obj << /D [1727 0 R /XYZ 72 578.589 null] >> endobj 1731 0 obj << /D [1727 0 R /XYZ 72 564.652 null] >> endobj 1732 0 obj << /D [1727 0 R /XYZ 72 454.443 null] >> endobj 1733 0 obj << /D [1727 0 R /XYZ 72 440.506 null] >> endobj 1734 0 obj << /D [1727 0 R /XYZ 72 288.504 null] >> endobj 1735 0 obj << /D [1727 0 R /XYZ 72 274.567 null] >> endobj 1736 0 obj << /D [1727 0 R /XYZ 72 107.255 null] >> endobj 1726 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1742 0 obj << /Length 2833 /Filter /FlateDecode >> stream xkoF,vg9)-,^hR%)ٙH,_[Lpv^;;C\9ys~^srb߉ R\,,nm3q*z|jtMeL w 5=ߓ/?8Lª‘J"vgg 4qn ֵD < Og9FG #0MJ/ C ''TL}mWjf]~V+zf eh{_-k%{yIɵ$c/M|58Y|Kbem[3"/ Fy1S!s#á+hF:!P{ew\ᯆ0d2L_䭮 (<Ԃ3/r&oQIl73?tbkg4lMDjH^ lj%.g2tku$ ()+ѨcTUHWӋ3-ɘ-*vDjYrᲦoUmκ6F5h)GXͦLE~Mo6̮|vE$<~}͠&4}b:\/yg*vuy֕(KXg B/V7ͨ+"~"##ҸU^2mݮ͒dɯ/?ӫ((MK՘;ɒ S6w$;c!o+2H|DG Q( dGߙxd0)fnY.1a_gԦp;ڀNy@ۨ&S:Zѳteހ,0̪s1 o׺Ib~gHA_V03X&E)pƂ$"~050ق_g`fQm󶁙g t;E\_gA$ے^q82WUQT(->yi7p{ ([Cz͹=Pvم@=È:DߞN"&<1Dq=?L8h4!>s:'쭃 VP$Z;I]6zZ 6o6o{af%m(vQ` .]I +_ ?`N.tzp򧲝A_6?$,$e<)8dݶ'U5;OT v{M]m7zqu6Tn8i?ߓig!1 J~8Yjdwet\w~-4Tk*6=/˖S[p,}绣0"bPd<`+FxZGu|rgXJV-j|X`_wS99zyuiyȔ~qSqueޙK+K+|400ITnqs?+Bb%>5ҿ— I.DRp& d!n Zgm\j[M9[K25IG{c?Nl.ɻTN%GM?i ssA9>!HE3t^ wN2NOR,b^Р\^ʒBKR]qL֖Sb'i ya0M@(=A1:vY۽[ks?ۚLYlV uIt![UU3bf 5&K ӣ*{-Ǜ 쐊fOLB&ҭ''bYQ~<K>;{! XX endstream endobj 1741 0 obj << /Type /Page /Contents 1742 0 R /Resources 1740 0 R /MediaBox [0 0 612 792] /Parent 1712 0 R /Annots [ 1737 0 R 1738 0 R 1739 0 R ] >> endobj 1737 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [396.072 649.103 518.73 660.007] /A << /S /GoTo /D (a-node-type-without-children) >> >> endobj 1738 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [227.615 619.215 337.542 630.119] /A << /S /GoTo /D (a-node-type-with-children) >> >> endobj 1739 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.675 85.853 535.188 96.757] /A << /S /GoTo /D (shortcut-menus-on-nodes) >> >> endobj 1743 0 obj << /D [1741 0 R /XYZ 71 757.862 null] >> endobj 1744 0 obj << /D [1741 0 R /XYZ 72 720 null] >> endobj 1745 0 obj << /D [1741 0 R /XYZ 496.494 604.436 null] >> endobj 1746 0 obj << /D [1741 0 R /XYZ 72 588.342 null] >> endobj 1747 0 obj << /D [1741 0 R /XYZ 72 546.043 null] >> endobj 1748 0 obj << /D [1741 0 R /XYZ 72 532.106 null] >> endobj 1749 0 obj << /D [1741 0 R /XYZ 72 258.359 null] >> endobj 1750 0 obj << /D [1741 0 R /XYZ 72 244.421 null] >> endobj 1740 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1753 0 obj << /Length 3184 /Filter /FlateDecode >> stream xڭk  ͌Z4]q lIpmZ,|חrow 9|#WܽkD*Z? +"H~ٻ_ǾWy۬7ĞǿZ9-B?dE6/J}J,0Yw?0:WOvqD1<ՏwTk9aI_ߖ:V^{%[#= hMׁ! .e@:K[PfkzO@VxKs=~8_Gj@-0EāXb1H=9}67nw疶Loy4SV, ՉF*ޞ-0M(vU]gͩ*8Tmv q#2{v1S#Y$iE҈Dg-u9eB6+X\YJD2V" T)W` (HH{VB,!{;iT^NL:2hZ'Z 5#""GHuf"ZY)ZHrx+j -A/i Wi#1z aW %N_~r Ok>U;:7p"s,a,dxmh2bk, PcY~ /0sNdVtʼnƞUdI$@Ȫr?Ẵ83Ns,\%޷L$ƠI¤B=P>튴ihXyC1/!x?o Y}ˌ`'(B0bUtuʳ=JO# @N%;7/U܃̘R:QnW1djRd⃊.#2IV!&`j"@P27Ttl*Dw)ލgFԁMЃ Z3o5r^}-t/B9ULMRJ0" oe&ү `r{\(:?ȚV!J%:`2#)}C!t- RfƂ}\|AIܛH"N^vQ|Cߟ'ޜ7Rs;M6[|%EqsAxU\o7bs)%bT$VeeR"W^k h8bbbs)BHQ"0r*ۦJNhs^h/F=Nt`{/It[ZQsj!8gl8kdvl=`1Wl"B'cP 4&<ټpP@0 iT_|_]We3U}Ԯ' BPN#W5Mٞj5 \)=,y dRPK~cmݟӍ.wt^Na5>cbzqrjcF:o ޺j,uXGñ@Cw~  ly/-("ۮ]l_و֝R f]ѳ2>x ]CV OIo#8ps]۞1u蹔C] IЕIF%1/(.H3!c#W2m~i?a-H\g8'۷ϛ~{l ؚV۔;2=2nR#Fw=CMM:s1 q5 =U7lԄ3.Oh$yVwȀѻlOvkl|¢fۂ]SB 9V*bV:짇&c8}g#Xit/vQE=z*dK{=[Q~E n/%)Cn`M_ }uާj⭲4&(m `"{bⲎG#ˇ?N3/'t/Axixm 8kh ȇ'szBwg )-CXU` G)a`鹭>B/t0[ *Ē*U״`hC~tۆ*w- GƫN;Ud ihTZS۬a9u񺲭j'؀U{ 0 ` $x3 tKdSzDL5yx3" YqUƱވ:F[FE'>l;Yv -xe-h. 8bZ B*@^>X!/%c(a: >&̃8{>K˅> Ag@㠋HU9<8bFօ+dnLq']C8Mq-= w4ϡ$ꏽM l0Gk FEM Ƴӂ0h^p(7FH6,w>*'70abGiUU,oǺ$ gEv殓?ހ^4HtΒTKs#@S.!Jʛ#E*q,%Dpxukwe TOeN(_)vP'RBV/~;R endstream endobj 1752 0 obj << /Type /Page /Contents 1753 0 R /Resources 1751 0 R /MediaBox [0 0 612 792] /Parent 1759 0 R >> endobj 1754 0 obj << /D [1752 0 R /XYZ 71 757.862 null] >> endobj 1755 0 obj << /D [1752 0 R /XYZ 509.754 496.648 null] >> endobj 1756 0 obj << /D [1752 0 R /XYZ 72 480.554 null] >> endobj 1757 0 obj << /D [1752 0 R /XYZ 99.228 351.206 null] >> endobj 1758 0 obj << /D [1752 0 R /XYZ 72 335.112 null] >> endobj 1713 0 obj << /D [1752 0 R /XYZ 437.626 140.011 null] >> endobj 1751 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1762 0 obj << /Length 2547 /Filter /FlateDecode >> stream xZmo_!ΊDzI.MڻM+WVHZ;3ApY pлB?/|2/%zK,s ^eʲV,|??t_dB(W8^UJvDo/ެ/~@jE(%06Co0y'Vއ]qDhk$Zxq2~\[.. 7Eٗ Ҿ|ˣqB(Z244-;zշ^)ִ8[ݡ>I$8Ma{nYlͧuivRH[\Uaۙ'UR#H"jSnmФhX;E[!w+ok@&OorbBޘ2Exnєc1q0i sTЫn4phUG&c&uk9[")J]E—U~1~eV!OV% 0h(CUT rD/l0dK> 0jDɺ#mIb횶{K[Ih˺! @l袴*i塚!2+vU#.jшz6R f?IB"G4`y{t9aHğja[ՂqpF&4mC˄&mD%=h}Tƫ<ɇØ塐"Ld(JڅqAaĆiN~wmS1@PN۲!)*ٗMk,dlBY^ĂXyFCki(~]p䆣(gaFjSp|30D?-*w4P Os$5 xH3H˙6F' O,JxddqZۚ\e3[Nb !al B@Wg@gFJ+@95r؁I4z q3'=l"'1z^ĸUy(;&JbRyP qFQBOP$^00Ġ?Sfޛ$I I=L/xCelƺl?ZC*,tML(Q=#N1) *ؠ?9lQmVb)IX  &ZT? :EO),'' <D0kE)Q-y 3V0ݳ[SN*Ыp9LN+57Ny|p9,`{ NLr~B ANԄB#Hxzo2p ʯmvIƸB.he4iMOy/]M:wE*&xh5t<ڿė ` 4@Ow6^711La;iibtna&@  ?".~! R[~̈f,9s;}RFxFѲc +L&9ș"`LJ9/g%'Gsx҄{?Mifi?w9}0m[]-VVsVRlӟtrJt0jb^iw-=I eRTCG[>wswUq؀Sa AA_av~'AI]X( ZJ6p V3,/)_3+ldפ˝^qs[:`n챧?b,(7rx01YZb8<UYjH X. %X0Ue <}3Bj&Yx"ǦBKa)·.H5~\7!N}8|򣄰y$!Q6],!|k49 taW]iӻr)Fag-imc`D02 Ѯm7ti[,Mm?F&<ީK&-DA+eB rdޖ7Gh/R ת~_q}oz,MֻzRCc" ª@1V$}._y^zeU{Tʎmpv۹;< Uל ǻm}S?~9f%N/o{[ywʄ4#!p32.; ' nx[}6ETsviB}~> endobj 1763 0 obj << /D [1761 0 R /XYZ 71 757.862 null] >> endobj 1764 0 obj << /D [1761 0 R /XYZ 72 720 null] >> endobj 1765 0 obj << /D [1761 0 R /XYZ 72 602.279 null] >> endobj 1766 0 obj << /D [1761 0 R /XYZ 72 545.715 null] >> endobj 1767 0 obj << /D [1761 0 R /XYZ 72 324.997 null] >> endobj 1768 0 obj << /D [1761 0 R /XYZ 72 311.06 null] >> endobj 1760 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1772 0 obj << /Length 1296 /Filter /FlateDecode >> stream xWK6W(Ç%bEMz#ӶItE:^9-I6[ =$y'FF7w׼*R<(2"DT%I+-n^x5e,pxkԀW3oe UQp^ήfh ZRR"-2DTe\]%mfNlb(ƻ)JytVu6GZmGBYUg(cc;RpzyԺ'jJK υ1g7yGDb:N%c }Q\\=A$dr˫EcuCjX7ʜp I22vj"ۆpo#Or=W,Yan0OkwxBFՍ[* ytPTVH7eTYMAV7iى~X@GůzF/-ј~VZWw,…E< SzmQ]je_bjĀ/m{ Th'zh~K7Vu8}2/CR/:Y@ϫ5{Q}E}RLK`ymc6fRRr0_7p{2 +H%B^ܶU2E׽…jO_6*^J"q?)o=%oGi.>0_،Ln6 )d|$eE,/\=C e5ҟv)^hx,dLD_g8$<2S1~W!, tB9ܛKxzdu+bc7^ml2|veUƒ7ȗzI2IwW ,΍o. endstream endobj 1771 0 obj << /Type /Page /Contents 1772 0 R /Resources 1770 0 R /MediaBox [0 0 612 792] /Parent 1759 0 R >> endobj 1769 0 obj << /Type /XObject /Subtype /Image /Width 339 /Height 252 /BitsPerComponent 8 /Length 28539 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222S" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ߑcBc H$Zfnm͝*KiĊ$gqV\_Cy֋g.wi V"]Zi769wG6b3pqG{wZXB\m,pGVe5cz%וjkpO֕4)W fȱ%XH. a ZCp-jx/7-呣l6M=3z%ѽ?gkk>w~տ>_m8߼ZԮy/ƍQ$e/Ow_GC`I?ghޟ35\ 7_y/ƣ&Kz%tQp$ޟ34oO俙.y/ƳЯnmh%=34C;8EcŹ28,TܩƱxIDEYn >i7w @ ,LUQ2잠_zmmX^)J<Ou9MWgfQs| {gɤjnwi*40%b܀?R}8Q%s9k\#q$HhƬΕ6Nu]FtU_IgnquoeۙepB d8 9R0}tֿ쟏Sqq+x%YIk0f@#Qk`kTtsWQG5EtSB+Q_G"QG* "+Q_]r\B9emgU6RZX# $HVirSqlڤ\^,}B-BeEM^H=k;'MKYcmBz͠`en:711NT+'"_G;}CWoEyyۿn۬0rU=J5^Z}6[f<)mte\D`* ð[A;:Fgs*$ z<; \=T3+bx*!I2*OrG/+9 qeGUD&9ߔ Je/7o;^Ӯ-m< %ї*`qhArHbnuCyD iC.w s0kDxMΩF=Hmܧeh~!÷,u.[$hCecBCyb ?ҕ`+Q_G"QO ?G5ESԴ7F[Sŗ03Y.!K`p DZ}rH񖏨WpYX>ss 1#Ilʛq+z9P\G5EG7a@T yPY*SbK<د$Oݕ BF,BN:_Y[=*UM-N$dYESn@ ۯr&gWl<k-qFqUY7g0d `,cF:ՍzNIԵ/M6d%E'!R3.@( >д- ڽiE".`ylvsG* tax V.."E(L)!w|!6) ,d|Vgu//\XD͵i"0kn3ko&t+;ۋI,縶Id;fPJr AӠʇs=0HN$%7_j?(ʅsWO"E9+T9E9*i5j,"uy J[P3N=uzG}GRiqKfTG u![ʂE9*i5j,"uy J[P3N=\K<د$Oݕ BF,BN:Ԟ"Ԭty7KdhwDMېex'npB.Wð yED<,G)ԱU-3MѭTe KbR'qkiaylaMI\[oT|]fvvVҬf-N?2 QC@w(qn!ʂ~gWl<k-qFqT{]KM޺uique7ILF"]F}խ<:9v"1 W_o&t+;ۋI,縶Id;fPJr AӠʇs6WtP3zz֠e\JZQ玢0"+@ؙ\#oՔ֤J5͎q?PTjF.2.CFPTcF(Q\sth[:s{ ^ׅZ%b Wyi&B> H:߶ еds}Kk^Bnym`A[HV!|[-:l?ч?zun|y:n|y:m^^?z$VCNp_Xv'TKAmrMq-M<{.)pNWvqvFZIa"Aa^Mzd*M6+ʣ|`vX/׬;s%H& D=djyR8'+hH0QXJJbIʎsN@0 wtV۵H!ܯz|5N wnfRR۔C^޸C48/w7w/{x%y]#! i"$i$??l/J@/ף)?^qoi Ρyp"[ZyhT;#AFsW!u]:}B8-.m^ gdW~v%\2@Zmg2kuM #r0N# OU[MPG-Da*ɑp s !ƃ-M?\Y[0UUm(p8T~%M6\_5Dr^UuqUwxSC?WmhdX+Α158b^WbX NkVnܬnv5woڝ;R_KLp6 Ǜ(X$$$ 7W𮛣_w$Vd1&r!S˂n፸^N .icZ;Vd"@q,ѴcEŝC eUQ[N!kG_ģOӡ!rCa8l ߧX7w *CW/N㓀B |AN,o5X-"U-+_'lQ{]FZ^qO2ZE=:HDd}R>Qv׹^Ӽ=i Othj3i ,ȃAyU\(Rz WNmȱW"c>jqדmG$YD3 HIV##Bktf.#ݡLE4dpUv}g4s lu,c p8-} AVVEUAhJ/ 6r{>Mg7hDYxuUGfco[ly_n[,O Z&.dXZyg@(]kektFտG_Ώ1?=FտG_Ώ1?l}6Vb}:SbQı4M8oq1?sv{}RFԢ}>PADyɼOˀH2q&Ѯ.ҿ-7cKcYYgr_GX!qv4Fd%ہNxϓN{nȤ28(Qqv(CMPADyɼOˀH2vskp^E%Vǰ!B(@r*h~85z KO j@t&I崯 .ӐQ DPyW;k᷷-mJ'/n5 hM7|d,pwtEz=hVF1?b}:4=[5^j?6:F565O:]䙁ݻ`#sOXsujZnmk}mgݘv1A4-@k~5o)uW>W[f Сnr+oi:[Zfڛ7ps6Ѡalt"G^EEQIbmwef.e4+;Il縶IY r tYƕ_oZ~xiaaF` XmF,n&I`Hf$)$84hFտG_Ώ1?l}6Vb}:O{ٮ`)Q$N6 rq{L7Vrꐬ#]EeRRzO:#&}Kx I0:¿0Duٌam;u{Ѡ*h ٘z(=MF{'bM Iie{0ZD',@j_b-' \ssj&o'FvX؄y|ʡI75xm|Q:[Mjo Ϳ '9`tU7?ښVo.{vtkh}UG̪͞F .EB 0?1'v_NDڼ;{!|[.>iEo‚|@0tE5Fyk%ܖ#q"yi&O3B=$Ch5VI u >3DzS"EJ-<5zkhWtd/y(V6mPO?9+-oQ:.-ZPvF7eFՌt+a-(>ݤzzλx2pcP+ :k?ao|b^d4zOw@9C^{.60|{RJ)774uszGQVqwWw.2[I۪\ ?ưJ u]8l,2PHh%s|xNSny'uu3sjXp2IY~+yt%RK{^L6ӻ+BO3̌lP ȧkmB( xvぼ*i^Ў Y~%]m׮ODsWGP6M($WS>Qvd5m;—G3]/6w$$\۾ i4ۯ kVzŪZ*[\[}1G9b3<-/kӬέ4ZM-Kc](ƄeZqᰕ #HŠ9 (M:sswڝ1SQ '}q7C̺5,p8$oⷉEvznyo;pҪ2Inf13d- K8m"`86  _\ W ki&c9d3@>$St{;mWSrGŶs ޻D=zsV/It3DaXf@c,C€YYo^56]Mrp]q@NHIh:,b1di[V"Ȣ1:Yc}@3uy}sZ-AaKg4\[H&I¨=:-6m;B{{dK3fU'$=z~VegwJ[n+أD ;J˖'%#t>AVVEUAhJ4-?^sKoèYk][]^F9FY& F$,O 23.7c޲<=)CohźCsumXy؃zn|y0E7a^E7a^ ?տӪ7Yzzv|2x_TѴ6-S`b#pFj_Yg_*O  dDgj $bp~8 >,4ۇ&E*J| %$-¨2gi=J02 dU͋ F=5[\\Ki"ySO25˂zA hۛ[vF81'Am`Sp_F|=#Z>]eb4 ̂8č%*nl #:kyei\%7C2:.t~a@$UK<د$Oݕ BF,BN:Ԟ"Ԭty7KdhwDMېex'npBiX^ũs,Q$о7#T2T]eۋ{Hlu ˄yFBܙ g?0 9]>@.Ro?-:< Gߌv1~8Ol;_##[yw >|t<&MMQ7vZ#4&d>kyppMxM.ms>nnDFhL|@#'w8fOZk6Y71ܤlh$PnXE i l/#t!75 288 <&MMQ7vZ#4&d>kypqi{Ai2ku +rGQH Sp_F|)/ף=#Z>]eb4 ̂8č%*nl #:kyei\%7C2:.t~a@$UK<د$Oݕ BF,BN:7o]@KyeY)LA6/bk9K[h_a*pyuzmŽ6W:ta{WD,U1F 3\8Ol;_##[yw >|t\*Ͱ~|&3y< Uz[?BeM0".噤XS") 0|Syz燵(5*M62%mHOy [vv]Vy6YZIg=ŲK% 2PN:g,7fgź\# _S,cҹܪ>G?.`o'g3jrKoNMGyi7(Eǘ>c`uBF7@RWkNTsr =b>]ޛpo=*2qg*.QK3/uzkmSQe<|v+}Vܷ(Z0 ͷ6x y/$NErs+39U; z&i!p_E.n^}JG&C@DII~}7Qn6Ʋ+xG." of4?n lށ8Sڥ4>ifPmD8$'xP Ѽ/m5igخI4n@eGw *v]NTؾvlV6QʹTSHCx}+N-uk3F C4_E`ۤT83n;BkRP.PN:fYJdc{f7H=T t]1,+>;(k R"uRʻ vQLΟwlv߱N3&sƲ|45ZI3 a30-BF7ف»'@#n[#H (}6V0E7`oѰzh1^xMmtഹx-5^ E<YpFGfH涷{P4K"0;qMXh>ѴcEŝC eUQ[NWbisj[LW\jiZi Ѯ0E-V"v!D_2cw6XgCM@`;l6`c1In5h{XEIU<<bA-\Si3ҌwuĂi.KʾT- G]ۄk1 jJ`mֱ.ks[X6Ğq1ۃԍkvWS\=ͬ"$@YxL "{Y".ťڛIi8/+Ƌ qgAmOHvkh&p,yLmP.ِyIn5h{XEIU<<bA-]7;F$V#hTM/-xnUFT768Syvm6QԴB)mG!WC1&cw =*]?~jkkQyD&ĉ(CerqT|U4iZVnu - wQu KO`cXԱ6z}%e@deb@ `gw(o k^Iɬ-&Y"(X"9#  V]* i'Yy ~vfcI<='/H'Kkv(3Qs,]˵}g4s lu,c p8-} .yӨ|tyP|ui7ZַKn x9 l*ى0wc9mW7uiZLqewrks%4/+` _A 0&iV*#tyѦ9_#=9lTorow2Ō^Y9q :xcPNSny'uu3sjXp2I\o6Y5HBwTeHslݍc;gaUMSQʭq3yyd\Ă7iWմۛFRu k[hh6pbP*A٪mm {mE]2I':םŷ_ 4M~5}OJ3EXC$ݢ v(+;p!ҒxnXX$l]H # Z.$6fSEbQ~و_T4{7Eʹmq#C $n%Irw+B=utH>~%ĚnM.NO&bFߧѸqOQL?ohߧӨ?ohߧӨݏ#t>Rm6(-xwNB\|ҋ}cf˅Uzd𾩣ik,mZxR m#UFb&>y˽P!+$.pr@96_ Qolp1~s<-p,ftEw0ܪą$u`}Ҹ][A|YockiWLqquTYAJI#s[Pdҵt&; AqJ-.6Os%iȖbSś2ɳp d^XFqi{(Xn[6ݯ< b,|oݓ(cVcOj/,n|gX\Z8Y"-1\g>S1sJ#~RߧѸqOQL?okīZcɲ%pvW8;1\gxGu+,F{GeḾrR o HHh-# axoB8 EgM9|Guw ןfg)# _,bD=>IvVB= 8U=#Z>]eb4 ̂8č%*nl #:hoi:<\DjC.ƑăsT!rj`iu6'iu-dt;7Ui>d' 2y>kBEDd]ba˷U\#609`lj;;RwRië4vȦ<NX!~S m;KԵ=MbɳْI{?y[ǡ隭>E. d/崐w);3{:,fӠO"Hp0x 6774n?oiS774(*+oֽvz#:lA"qoW/_2J +nnd$i-Ss`n!ԅoC@( xvぼ*i^Ў U]?PmupɦMn F9mά\pFA5G_,bD=>IvVB= 8\6uI.mU$ 꿸Vped|I1qy쵩#Xgd()p<׭?kYx u7yEv 9 -YTήXIeq2j[y`S(mes1Ikpìg^ {/dH֮!fm~8'cqSxjMmu*$gDG#r2@d d3W[٤0d` rIcI'y?"X]ӋD78R !GF*.[1խ/PҠb;Ur>d%O^H=l]YZAVV3SE(l1QY?.!;kK2&۸\ț\78ᱱk:to Sk(`Ym(C(U]T[uX/ף)?ч?zu?ч?zu,o;IH^O Ψ [H/Yʚx\K(S4N=SNDXԚT;QmW;G'_XGa5s[sʪʣ8If@&A a# EEa)+'*9F9|nk]F-OnRd{X||ef̈Kyj@.\o vX[<*<̪7d Bd 8kx෻%XUF0ṕHLA]fo_arde,KY-ˑWˏvVlȄ"e+4|,e7nР I)45}GY4RgHVV(ٻbo#"2=ؾ s.}Ťv۔/pňT˟P?Ґ|y:`7-[Ces^\#Ȗ֢0Zc9\tfNP KWY`߼t]`~la{[_̲ZDB܌S#W+?[}6QL.mQ: 7n9$cqKFevy 1UF`[o9o\8xA}o/>[NT/AO emuGmݴV dc^+473 Jc~r Oyj0[)ç[[",20xq(Lga ɪk д5w{0Eyaw*@ڮmŽ6W:6Ʋ+xG. Z-ONd&GZzuż6f4pO7s,ȥGs\9:ZϨ%-Ա+oaOAt]YZAVV3SE(l۩GuGRXT[Z2d,s!s{gQnޱ4+U5=NW㿔\cLhx s^RZ7g袯O0Q=[4l}gJ [0,U('@/l}6Vb}:n.DUUgx9 SZ&VGO`B$GʯߘSq^F }[Pµ-.Qa}<ДݙH6ƶ kZv4?m lށ8f62蚔POY>' w*g~aNAy,m} K;d`X(PN03FIAVVEUAhJ4-?X>q^xR E76U@I'vو_Y.iWz .>#z#x$gn;lAW#ԮoG5MMUP2ǀxͶΡv-.fKIy^4XVf F wc=-] \)$as~cO0m6(-xwNB\|ҋ}cf˅QI;MGUHF}=%`:n#Jf[+[[-٤ x[J.pr q~X~%]m׮ODsWGP6M($WS>Q '}q7C̺5,p8$oⷉEvznyo;pҪ2Inf13d- K8m"`86  eKk;Kd)=3(:9z sVZ=3ZRk[ŝFb=I3kn[!KK6;KHx-"[#A${ %亝Y6Km_P=$gR1Ю@}~cg9Ԛ65i@Ƴlǚ *`nn|Io5+˽ܛ[i'Qj|qE{O:-e֝>7;F$WA[x. eJ pvcZ8Kk{ujQ@(?ohߧSw74n?ohqGZV5vr]ܺn$onKWsH$ t[*+oֽvz#:lA"qM;Oe֟o4ϴ ѩc'sH/g#u yQ"Mͳv7;10n񝆻!iYi ;qP@Q/mGH^x{-_Y_#!IF7ԑhRGZ[-vK3FV'hxgזͪV/ٵ?!!>Q)eS] tN!aa{k2tf%s+7Ϲd#,NwgQt^]=q]@6Xd]NJ`8F3|ȵ7}w4M.wk0+~ T Y^M -RhX 7p[' <3koaqNLmmdQkE` r #)+z8Ž@)HI ,Ė>{8 Z.$6fSEbQk:|_ޕh,XI/Ϊÿp$q=뱶 u.o ִKťVL|0ul؃-f +PDvVR[Xi!m٢$ T*>#+O۵e%唒~ CLyoqy0E7a^E7a^ ?տӪ7Yzzv|2x_TѴ6-Vu[mUf"\]m%>VryHT;,?[\\Ki"ySO25˂}2n |1S#5I_nvg]Q]Z[yynK.Uyinտ[\\Ki"ySO25˂e{}=%?ч?z`:}rH񖏨WpYX>ss 1#Ilʛq+z_YzmŽ6W:HH'Y " b.:S\:^u7Gx-< #W-)#SӭY-nI}nFd֩l.\GoUDqˏFyOZxWWri/FHmA>^,LQkpìg^ {/dH֮!fm~8'cq֭Kj6iR̩i 1&YuzgIy]ڴz6uq:o6Ь[ vF,y+ <>5Ʒ,zdxrKYda 1FŰ tk_h6I iv$r)VF( &<&MMQ7vZ#4&d>kypqi{Ai2ku +rGQH.V+I XhZDz~?ι >I{_XC}vP<0 -G+ٍLcxS߹:.mmo=T]dv XC#;*閺NjNsObi$}ΒHZ- JGw|e$|Es:|UB-ŧbG)#B alºMտLQM=[4l}u݃տFѠOo4ۖӶV \]Ǫi֒XHXk^#1J}j xJr-տ\ͪY/ٿ;6(KAC;|`ߙ [`8'x_+ }ڛB3VZEsyo@sqgmRY}ko4]Kp(R6Hm<(tۋGO[Xb9"nw1a'wJh+Ƈ2xWEӤ-m/]zeUR#;@_zy*ma UFwNvV;SQo iO -Oxq],X`Nh8o[{{HeO5P3"aNӜIHl4 WuogSt u@b\+>[Z:MgWSY%/]e lvWKLPЬ-%&F;fPJ'ӥ 4(}6V0E7`oѰzh1^xMmtഹx-5^ E<YpFGfH涷{P4K"0;qMXh>ѴcEŝC eUQ[NS&ӭ-"P9HT"q2E䪰#u- P߇[h~iϕٽmq 1qiqyntN@U$` vTl?u 4-VdХ[7bTG\\$F%%{p֙,1]UAT=طμRRKpi$g CqflAqyPADyɼOˀH2wM\ssj&o'FvX؄y|ʡI`v4Fd%ہNxi`ƣIrwFm~X;cҮ>=$Ch5VI u >3DzS"EJ-<4MƷkuyE=-J , anV{;+[]k Y\O $nNcԿӮ$Oqr^Uan:F#\g.Yjz$Oak6W:شSi-'xaY. P6u݌iZmKyRKۍB%M&?.E#t޽p=1.ԷjwIvnKoO,Q>g,#RLoķt/J@b}:ܪw̱c>wEA\H#|6>I]]iL@8 zU?Z\\Y4vڕ枉(L,RS}dy@PW%8ʀMwńZڹx*crD9B 2Ccr/!䷵6zhg2ٙ 2A|s2Hu?u+JkæBVK%D1 1#K:+/iVMo[*ܼ_6QÖ!\ 3>Nд'VIcڛ dɴw GE8E)'#ƻ{d/%ޣZm*y^Ko63lQOr I]]iM3sjXp2IH 1?b}:uo_Ώ1?:o_αm6QԴB)mG!WC1&cw +I;9l]mndf7T%el+$44; *DvQCn8Z4ڧ8+g'8 `ZSZsmF 1 'aƧO2OghԱdҲW}wWvVǦ\$)UcIT̤oFF]R #}^#W)8/##ҥ=FE4Bi H~^B81VPG(Gˍ TuGEi w͙0.ٖ"F'gG#eM@6vygxɠ -_Oi>eYؽ*Ol}FFHv5mg*GI,tI& 8^zԓV+4TMזȱ̦THȁ*csq~Y1gLI$fcI$$I$V>7AO775CS}ot/?ohߧMQ 9X|n?ok—SXqO~khWtd/y(V6mPO?9Ώڦ+>=:/lf/KonΓ|,mk-D}'̐7*[b3'̜`δ>?w۷;~9},tF k/T p[.n<.Cͷk2H#؋)[d ''Xnڰӭ"6ȱkob4f|8< i9RAcCq~F?ƨ}oMSAb?ưJ u]8l,2PHh%s|~7AU5QnHc,1ӓ~^t/HHh-# axoB8 Eeo;kH%rY2#eNFAl#]3N]I )j(FO'!m p$(7*8;sz3YYW6gjbRчݸ)e g OEuCs_ ɹ$Mi֖iC#"lбaF,0aY5of79B91hAbo]:ư]˩S+X( -"GqUE:; ʲӭ젵4K+qklJhN>D<O46O]+Q;Q@P2y<: 775CS}o: 74n?ojڦ(T,_ߧWA[x. eJ pvbڦ*Ʋj0߰1I or:rcO΂iYi ;qP@Q/mGHuB-:O[ڑ]]X%s$d aumbHaNQ@ 2y8uY5of79B91hAb+;AѭnmioڬPm'\ET;~U?1&Dnk]>"kk<@ JDžRW;~E$|kzuyZ/XϷ̋qMX0H#oN>En)kr΂mtIZ2e+I\iGVimonb8B(V6ZxGIբE|ȷݵT9j }.t9pj> endobj 1312 0 obj << /D [1771 0 R /XYZ 411.443 710.037 null] >> endobj 97 0 obj << /D [1771 0 R /XYZ 72 692.871 null] >> endobj 1774 0 obj << /D [1771 0 R /XYZ 72 602.141 null] >> endobj 1775 0 obj << /D [1771 0 R /XYZ 72 478.16 null] >> endobj 1776 0 obj << /D [1771 0 R /XYZ 274.449 157.198 null] >> endobj 1777 0 obj << /D [1771 0 R /XYZ 72 117.194 null] >> endobj 1770 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /XObject << /Im42 1769 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1781 0 obj << /Length 2346 /Filter /FlateDecode >> stream xYm >`{(pmgpCwg-v+ߗ)v,; y0*'S·] X%Ye/'`HWSDzY"V2rHc#0aĬ,"Q79Nb0p~eYoJooZ\`&?uu[ݡT'4;͜ofdRU," u? !K =vE}?fnʏ\mmJ!o Fru׫ԹoFN{YS 5-l}H̬Φb9 pՠD-Y09?;].2=O+3z);)4SuLm7H2(^B,#twmSMK8sc(3h]yZL7q$cb acB|6@KF̦?'n;~a^ y%F96,npx ӠEa[!̃ -Ľ4Pܨ1- mXũ5NcNq8c?]8աmT2h> <)R$_Zs ߜYٛ ~9g&گֆ)9 너ۛ!5un#&ybĐ/f *  TjG 1x!9D-DQ텯Wl~c93 7ϕրR.#ig vP@eGYLaN Sqg~²ewVz+fiL` +>$f0j9ԭY{66g=.Ym`?5壦̲?Cs(dԱ`8趩*t]Pn;S:bpl_ QoBd> endobj 1778 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 505.603 120.697 516.098] /A << /S /GoTo /D (fileeditor) >> >> endobj 1782 0 obj << /D [1780 0 R /XYZ 71 757.862 null] >> endobj 1783 0 obj << /D [1780 0 R /XYZ 72 640.145 null] >> endobj 1784 0 obj << /D [1780 0 R /XYZ 72 492.662 null] >> endobj 1785 0 obj << /D [1780 0 R /XYZ 72 188.944 null] >> endobj 1779 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1788 0 obj << /Length 1702 /Filter /FlateDecode >> stream xXK6WX1|[ ZMS$EBeɕ Iɔ iE6_rGz;z/V7<25f*1Unߑ#~ǂ$L@5ՂõL`bgmw+ -nK5.cb[W"sa EH"LJ%܉vX3"Q#91:&d1䤕lz4Zhة䮪/Ĵ(aJx, X| GQ/PEۈZ2mxoRU;i!ɨ>I mߜNK-: rU>I T)6Nt j+Oe0qtHp 汑_]QW4\aTNhX` `[7}žsRn .Pf4XȀ^Zu0q.b.h8 w:]7E%I@](}El}P-<9 :[r,K5C&i5 3(}cnHq*UcL㺖iЋO@ -ΪטwVdogHa Rc$pHJ4Hǜd,;U\'a}`qJb'$ufSDh73&Mća;F$eppAN]WW%_y.Z3 񨗺t&u^,+y}W}NBj&+ C_<2u[=M`0 K+p[( ^K x~.> endobj 1789 0 obj << /D [1787 0 R /XYZ 71 757.862 null] >> endobj 1790 0 obj << /D [1787 0 R /XYZ 72 658.078 null] >> endobj 1791 0 obj << /D [1787 0 R /XYZ 244.427 501.428 null] >> endobj 1792 0 obj << /D [1787 0 R /XYZ 72 461.424 null] >> endobj 1793 0 obj << /D [1787 0 R /XYZ 244.377 322.707 null] >> endobj 1794 0 obj << /D [1787 0 R /XYZ 72 254.872 null] >> endobj 1795 0 obj << /D [1787 0 R /XYZ 239.859 114.098 null] >> endobj 1786 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1798 0 obj << /Length 2113 /Filter /FlateDecode >> stream x]۸}*kDo^ds@DDdѕ%K69h>g8C:^轹,HYyYqmo2f˲ɖF& ^Էx'k):D_~_7p Af^yKU ^ޣ:yq÷&GGa̝7GyVȊ@gъDmGJ&YvS7 GY~_iذҽc8GHq[p)LP 6"IHη{~:eeAQi;YLcKo4,ߝe>!Zni@Y)3%̟6i Cݻ7eȢ'Br, 2}d3YM6e;h'6G-8޲GA?'$}+՝k$[=}- 6 8Iu  dc?@D mcm:8C(O.֢pNxIb؝dVl)LB/`lj8( 9lS2bW;-ѸS oH g|w9%o,(џ yFAOTAy+ִmogt#kPykNh`^Лc/juhN1)wR @E膪) |9RM2Ǵx`C ޡtהܰVlPeQ2z`iMOpl14AI 1ibF'RI]H,u[QA|(>H͓|JRSp1bB8SpM 6X4vt)gpe%qrT1{"IWjd%Ⴅ, wV[ف ta189Q~ޮC":..ibY3o qrYirBdh3^kS$\4un`ÚHOtJuX9\mHR -/ɟ(L50e$|h xxRYKގxB<ڱXHhCpc2#h Q龯աoWUj4frrH6.i8*VIt6 啙UQ˾s"dw/,˧=noe]oMln|hT!^1_WG}&]SgzJBtmC G?4z;iV7tY:Zvς!`&j# cEjԉZVT, v`a&Bدtڽ/kUbT`lp'Ʃw:0%յE~A {͚'5ÕdJ|<ҢϊˤxẠ'x8&Y"jҍw)stᨄ`;IHf Yo%S9C)y٠3u-DbUTX.X@q:Z6ò-lv> {ugG<` pAngCar'8ػ ,XOc9-( XЫYj(Z|RFxJ%9U)Z"WvYKgrvN1K|$Oף߹b(awl_w`.{ӫj G73 endstream endobj 1797 0 obj << /Type /Page /Contents 1798 0 R /Resources 1796 0 R /MediaBox [0 0 612 792] /Parent 1759 0 R >> endobj 1799 0 obj << /D [1797 0 R /XYZ 71 757.862 null] >> endobj 1800 0 obj << /D [1797 0 R /XYZ 72 670.033 null] >> endobj 1801 0 obj << /D [1797 0 R /XYZ 220.775 497.389 null] >> endobj 1802 0 obj << /D [1797 0 R /XYZ 72 463.362 null] >> endobj 1803 0 obj << /D [1797 0 R /XYZ 211.779 310.752 null] >> endobj 1804 0 obj << /D [1797 0 R /XYZ 72 276.725 null] >> endobj 1805 0 obj << /D [1797 0 R /XYZ 181.563 126.054 null] >> endobj 1806 0 obj << /D [1797 0 R /XYZ 72 99.986 null] >> endobj 898 0 obj << /D [1797 0 R /XYZ 72 99.986 null] >> endobj 1796 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1814 0 obj << /Length 2234 /Filter /FlateDecode >> stream xY[o~)}Ⱦ@v]7/IRbC*I9ë('v@l wCD۫]-O>F!"#"S*qmZsWf7-l8ᄭ>r?W (ӈEI 5pvKDH?uN෈]^ FR0m6*2'Aév<)+Wk\ͻ=n~]1ۺͷY;eMU}Ǽ*Ëlv_bW󧺇eT@M,qpRps oNй3gujFVX?<1@թ.yNl{g6TbqQz Xgpr`St!В2Zov8D8w4@f(%4@SlCxhlƦILHg)sR{wc 3}]ĸ#@_&!6??0%F 9hIA(e9lpR8bX{kjb OJ$=B@i* Aℇ9iB}A sާ%ښA!7xW8SfH*B𗢵u !zwJH)Ak:E ~tY@@g%C  d<VݍK;\efֆQca8 W3wam"pl{S{~]M)lW~A NjH2csL1s5-[^P#~edU&KUь5FmOǪ=4b,w͈ Dd |']XsiH@w[\4ngOW+^ejs8El̫0aw.3IE!\/ʼmvj _BB=Ю2チ1a-f.vٮ3Q]<Ͳ :pUYq:1%RHmuJqsL哪z &}^؋:21k㾛b{@`cp iv u7Awg %׀sp4Xݸy_pztw '$PO 7 N6]c9yo4kX'^}rnU˽"mxԖv7:lվp#l2;{av*s+&'`V)'guܸTdo8Ēc5t)h"F97dX c89 2`1)l׫OT;f 5wg 53;PswUOF,/ljb\%I-5:bum|v. LAYbw(Or.&M'  hE@BzѭNeq ]݄)eD2>- ˣJ.Df4/ .̫8Tv 1F}r32260@_JhE}t2Up 'D!T/%I<$뙃ehh'B{73zzcKrM1j>quQ8}lT6[({}CkgEsrB3k DәsZ\e7+[5bNsOrY-4ϵ p#|{ ё%2U۫:G[Kqj7Y%VO`W}PPM3%L,\ endstream endobj 1813 0 obj << /Type /Page /Contents 1814 0 R /Resources 1812 0 R /MediaBox [0 0 612 792] /Parent 1821 0 R /Annots [ 1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R ] >> endobj 1807 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [424.774 529.003 469.769 539.907] /A << /S /GoTo /D (example-6-defining-multiple-view-objects-in-a-hastraits-class) >> >> endobj 1808 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 471.265 116.941 479.792] /A << /S /GoTo /D (term-29) >> >> endobj 1809 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 451.414 123.467 462.198] /A << /S /GoTo /D (term-group) >> >> endobj 1810 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 435.399 115.606 443.927] /A << /S /GoTo /D (term-item) >> >> endobj 1811 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 417.466 149.768 426.333] /A << /S /GoTo /D (term-viewelement) >> >> endobj 1815 0 obj << /D [1813 0 R /XYZ 71 757.862 null] >> endobj 1816 0 obj << /D [1813 0 R /XYZ 219.47 715.238 null] >> endobj 101 0 obj << /D [1813 0 R /XYZ 72 681.201 null] >> endobj 1817 0 obj << /D [1813 0 R /XYZ 72 653.405 null] >> endobj 1818 0 obj << /D [1813 0 R /XYZ 72 598.19 null] >> endobj 1819 0 obj << /D [1813 0 R /XYZ 72 584.253 null] >> endobj 1820 0 obj << /D [1813 0 R /XYZ 72 300.869 null] >> endobj 1812 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1839 0 obj << /Length 3454 /Filter /FlateDecode >> stream xڭZY6~_GB߼)glLRJh%)_(̾ *XoTJEhuw*60^_w$XYwOm`}Wޖ6,Jowݼύ]]xn~-X*:MVܨjeǛSPF"ub@DukS[|Zwgox2ͤ"CXMXOap6#H8OmCnTg'c-$ T݅B) kE}*EMw Sݿ/$a=Q$?qD W[ tR;7Ua&} $ 'u/@H3*(HZQ[Gi6p rV'"Ug(/۬~نA~s<:/>{M۲ }枞w(X۶. :S$-v`L(pޛ 5Ue; 9E@D#n*/y(6*\5p}ŊX {yZ@MҎ˖'B J'6k|ϬuBȄmC5Js%$S5RAul 3yl- vH -}`=f`N<ӿ ە4K 0">/Ib|)kșQZH3[k67xtE|ȝGSU2ƆN6=.sy'Dmx;֙ZNMdR(Dlu~9[`?fQW E kCyaZN*G|iPı@L޻ѻmK '"z_NEl֖?rTKn$`y "Ly1q!;ZTE6Cc ((&fMUr Ʉ-jI̥"N \l[CDNshfuwoɋ`mɋH x"rld-7|R/^ 3W f0 QK( ĿW)A 7OJ^t)/y T us3ȋl,5C%'U'@ WԁC8Oqh8̞pƎ'mp➗r8-hQV2tX70MH-A+S͵C˗$|ssh@: GķIGQHs+{` Fp4)J f 3 [bԇ[T#i@ GKc `E~nN00<=@ r(@hiv#!J#f}Bct}thνAױ%*`&Ξnáf'F+Ĉx`~让r]vxag25;VīJ8Ep_O\?{Y}ez-6t?_Mp"#=+DjB N:c*$l^ߺL4nu4ZA'狠B D.=)L@#sI6~L٧hi5R^ }Ye66HE#),Tbd$C)Z^#8q6+~ւrަb󓲏e~Zj ނb`gUw <5_]'|΢;-gʙˁ6 >j-pv5aAX+W)Բ5lָ+1Yzl` f4)%; Rpq _ISC)ގ>C?]&W]"˹}6f^'9F7V,'/o80eC^g~ '|L0U l['fV`Eڷ~8`bOrZq gp^~֬jб cѴ;(B H/I[ 5SGt.]cx;87h'j}Y.3THw퐝(5D&|F@v^P,|q~jx)D>*5f)DhiV%tXiU로Qej, & ڌyTC!'0+/=-~%Hrr8DB>, csNɗjE*XDȋ*J**@Y\kOZ1<ܻ޷1[ֺ/3q#T$ lA4.Qu !]3:CFB:m) :5V"ԋn 5̈́1pYY6{.CxH`r'~ZnR4Ec@g[XűmX.W$ApVPQB3crBpB^ I.0D[͋gU "j]Fe,b4t Ps?A4Xq+O2U&X;^+ r7OlkR4z(/GeܦKWdVX'Лf.){8ތ.=v},<ˢͧ[0ŋ _wV4\D] <4njS7%yFj)EK$Y]*ہZt;S z\"hpAY3k^1$wWྒZ3!(Ic7KR&rYLІjC2?I/S^ *zb'` TӞ %2VGv }矄B,>^5Md]_;.Mn"> endobj 1822 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 614.973 105.375 627.466] /A << /S /GoTo /D (Hfootnote.32) >> >> endobj 1823 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [519.079 614.973 540.996 627.466] /A << /S /GoTo /D (term-class-attribute) >> >> endobj 1843 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 603.018 132.024 613.922] /A << /S /GoTo /D (term-class-attribute) >> >> endobj 1824 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [439.061 573.847 475.175 584.034] /A << /S /GoTo /D (term-attribute) >> >> endobj 1825 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.034 513.354 222.277 524.367] /A << /S /GoTo /D (term-mvc) >> >> endobj 1826 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.342 503.436 209.692 512.303] /A << /S /GoTo /D (term-model) >> >> endobj 1827 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.732 503.436 261.836 512.303] /A << /S /GoTo /D (term-29) >> >> endobj 1828 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [370.945 298.161 412.568 309.065] /A << /S /GoTo /D (term-controller) >> >> endobj 1829 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [216.746 288.243 252.172 297.11] /A << /S /GoTo /D (term-handler) >> >> endobj 1830 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.314 258.355 280.934 267.222] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1831 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.864 214.475 230.384 225.379] /A << /S /GoTo /D (term-object) >> >> endobj 1832 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.934 126.848 321.312 135.824] /A << /S /GoTo /D (term-live) >> >> endobj 1833 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.687 126.848 365.596 135.824] /A << /S /GoTo /D (term-modal) >> >> endobj 1840 0 obj << /D [1838 0 R /XYZ 71 757.862 null] >> endobj 1841 0 obj << /D [1838 0 R /XYZ 72 697.983 null] >> endobj 899 0 obj << /D [1838 0 R /XYZ 72 697.983 null] >> endobj 105 0 obj << /D [1838 0 R /XYZ 72 682.973 null] >> endobj 1842 0 obj << /D [1838 0 R /XYZ 114.411 630.081 null] >> endobj 1844 0 obj << /D [1838 0 R /XYZ 136.826 588.238 null] >> endobj 995 0 obj << /D [1838 0 R /XYZ 149.569 546.395 null] >> endobj 850 0 obj << /D [1838 0 R /XYZ 118.854 516.507 null] >> endobj 1035 0 obj << /D [1838 0 R /XYZ 120.996 486.619 null] >> endobj 897 0 obj << /D [1838 0 R /XYZ 102.436 456.731 null] >> endobj 1313 0 obj << /D [1838 0 R /XYZ 135.352 414.888 null] >> endobj 1845 0 obj << /D [1838 0 R /XYZ 107.407 385 null] >> endobj 857 0 obj << /D [1838 0 R /XYZ 105.036 355.112 null] >> endobj 852 0 obj << /D [1838 0 R /XYZ 112.408 313.269 null] >> endobj 851 0 obj << /D [1838 0 R /XYZ 118.864 271.426 null] >> endobj 853 0 obj << /D [1838 0 R /XYZ 111.85 241.538 null] >> endobj 856 0 obj << /D [1838 0 R /XYZ 96.896 199.695 null] >> endobj 1032 0 obj << /D [1838 0 R /XYZ 91.726 169.807 null] >> endobj 1034 0 obj << /D [1838 0 R /XYZ 118.296 127.964 null] >> endobj 1846 0 obj << /D [1838 0 R /XYZ 86.346 121.477 null] >> endobj 1837 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1864 0 obj << /Length 3200 /Filter /FlateDecode >> stream xڵZKϯ-T !uM\q` YdHjǓ_n<(P3+2Cя`.w<#1O|DD)_<Kʻvb K*4 xg~҅Vv #t?><pA *Id~=\aT.̬"%/?.t\Cy2! apço aa1/Wx𰿪xOOyOiZ]uۃ5~jm[8'I dվJb4H$ތ%'ѓ/7'O|YycƩSXKEm|g%P쾺A cӳBn a P=Gg]wD[ç- Y$XxlN}6!$Pʓ.ܹT Jy R)9!*Wr2 mt:6blu]v[9 (_x_PLoo`"0pL&uXX zhi-/z6D&P $P.ڔ&}\@)IH} .SgP1Z Tw%i M%E.UyC">HhCILu+>/oZZCN' 9".#u;Ö.Ig0sz 1VHB"蹜iq(Mκ` ^:R &HDXolj0=zǢ=>׳ZO./E $xXra\YmicӶNjF 'r_Pa]4Dju1T}q;a{i'aBخA%oB=c*ҜȽzΤ>21PWL'Dr"#$ W{D=ZU7b)s/pgY'1j2"X:k(X: )8BKL2iWzPrEoKd;}8<> O FAQ"ԫl0|]hur;NEB!bqIaDnW%#\AuJMG8IۼԺC Ia +'z㙍X Th#Sgش7ړ$/ݪZ聸4 ZlE:|p3=>-yz#$dx20 F e 7oXv!(iIdV¸}~n:z+;[+#gW"iCǓ7Ω}6ΆK$cD޶R=B}Tz ڿDȒ1 `\yz\޸6vd[L2+k+HK\+ܺۡ'1Vybr$VdLB.8EC );Ž~l܎ZET:ZZgNstr"QOaw3k$8|}w **^]h]C>w"Y#aNѓ;P_zO=# ](I oQo|lmi:lm'N[ckԺ,^K!wh}ƪVg)<~F_Iy/-e)DqbN:ُzFAnr8!‚y)fsi:I!a&;yn`jp8I>L.GRа-9Acc~Tpx5Uw`ɗO֗ny5)(97Pb'& 4لqXq!)"bOTT4 ,Z<f ٫Ux!ˮֹ**dk1BWGdE l:p î_hN0 v(@c!7݂Qש%ʗ!com|CU?+'4j vAv$Y8 +֓jT' 0-;ِ_Hs(>Jȹ١ilՌ?*" hS45)M~je\8I}2g GW_z3pn;4$vox.74.Ic4dDkl/rf>@Ux>"0T?`hCͨ=#fp(1ĝi O|UU'tQf-ykZ*\8arR=ZaVCg)NkU urYOhaQY7m ^뺩jl;LJ~J >v[mP4L`cIg2MrYwzv"oy*LO⌁]7ad?mnLe6AN5)` >EDq73,Ql #38Dve4%`)  |ؔ1<cZzW[}ͧ%E@*%彙C6c"+7-z}0Ac| go<*-RJ8GH7b×s N9SZԽCoʘ f;0ʈH)nA締 [XWIaӅ"yy=jzKS=i0vN[$"NogEtчߵ~[D(rcONWTR!F9= endstream endobj 1863 0 obj << /Type /Page /Contents 1864 0 R /Resources 1862 0 R /MediaBox [0 0 612 792] /Parent 1821 0 R /Annots [ 1834 0 R 1835 0 R 1836 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R ] >> endobj 1834 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.721 694.929 498.072 705.833] /A << /S /GoTo /D (term-model) >> >> endobj 1835 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [501.293 694.929 521.397 705.833] /A << /S /GoTo /D (term-29) >> >> endobj 1836 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 683.348 137.534 693.878] /A << /S /GoTo /D (term-controller) >> >> endobj 1848 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.863 635.153 211.106 646.167] /A << /S /GoTo /D (term-mvc) >> >> endobj 1849 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [316.202 595.348 332.58 604.324] /A << /S /GoTo /D (term-live) >> >> endobj 1850 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.849 595.348 375.758 604.324] /A << /S /GoTo /D (term-modal) >> >> endobj 1851 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.123 575.377 194.32 586.391] /A << /S /GoTo /D (term-instance) >> >> endobj 1852 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.391 509.624 207.53 520.638] /A << /S /GoTo /D (term-panel) >> >> endobj 1853 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [253.607 491.691 291.703 502.705] /A << /S /GoTo /D (term-trait-type) >> >> endobj 1854 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.905 491.691 365.526 502.705] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1855 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.87 473.758 187.984 484.772] /A << /S /GoTo /D (term-attribute) >> >> endobj 1856 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.261 348.229 206.504 359.243] /A << /S /GoTo /D (term-mvc) >> >> endobj 1857 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.447 336.274 451.798 347.178] /A << /S /GoTo /D (term-model) >> >> endobj 1858 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.043 324.692 192.666 335.223] /A << /S /GoTo /D (term-controller) >> >> endobj 1859 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.135 270.521 299.257 281.534] /A << /S /GoTo /D (term-dialog-box) >> >> endobj 1860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [490.705 240.633 537.679 251.537] /Subtype/Link/A<> >> endobj 1861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [193.862 228.678 236.263 239.581] /Subtype/Link/A<> >> endobj 1865 0 obj << /D [1863 0 R /XYZ 71 757.862 null] >> endobj 847 0 obj << /D [1863 0 R /XYZ 100.772 710.037 null] >> endobj 1031 0 obj << /D [1863 0 R /XYZ 103.551 668.194 null] >> endobj 848 0 obj << /D [1863 0 R /XYZ 102.993 638.306 null] >> endobj 1033 0 obj << /D [1863 0 R /XYZ 119.611 596.463 null] >> endobj 1847 0 obj << /D [1863 0 R /XYZ 102.984 578.531 null] >> endobj 855 0 obj << /D [1863 0 R /XYZ 100.234 560.598 null] >> endobj 1315 0 obj << /D [1863 0 R /XYZ 164.243 530.71 null] >> endobj 1038 0 obj << /D [1863 0 R /XYZ 115.188 512.777 null] >> endobj 1866 0 obj << /D [1863 0 R /XYZ 95.791 494.844 null] >> endobj 854 0 obj << /D [1863 0 R /XYZ 135.71 476.912 null] >> endobj 1314 0 obj << /D [1863 0 R /XYZ 116.543 458.979 null] >> endobj 812 0 obj << /D [1863 0 R /XYZ 102.256 441.046 null] >> endobj 811 0 obj << /D [1863 0 R /XYZ 115.815 423.113 null] >> endobj 1867 0 obj << /D [1863 0 R /XYZ 98.192 405.181 null] >> endobj 849 0 obj << /D [1863 0 R /XYZ 96.348 351.382 null] >> endobj 1130 0 obj << /D [1863 0 R /XYZ 133.608 309.539 null] >> endobj 942 0 obj << /D [1863 0 R /XYZ 105.205 291.606 null] >> endobj 1036 0 obj << /D [1863 0 R /XYZ 106.311 273.674 null] >> endobj 1868 0 obj << /D [1863 0 R /XYZ 89.156 243.786 null] >> endobj 1869 0 obj << /D [1863 0 R /XYZ 72 229.674 null] >> endobj 1870 0 obj << /D [1863 0 R /XYZ 72 229.674 null] >> endobj 109 0 obj << /D [1863 0 R /XYZ 72 214.664 null] >> endobj 1871 0 obj << /D [1863 0 R /XYZ 72 139.929 null] >> endobj 1862 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1874 0 obj << /Length 1985 /Filter /FlateDecode >> stream xڭr6~ .tHl'u'ɴ.Lh[ E2(cI|8Nn>y8IRIeIM׈,Y,\&[s􌵿>lMmV Yȳmn/Go'狓NQ iU8RX%듏p4`R|_Nw\q}Ly)H+!H2lt] g˜ؿRپzUef3'zVwwٗUOcw_|ȁm &(r@{~rhv|fR+rdw& *}@7_cDPMrժXÀ:eGk@ꋿ(WΗ/^k d::j3 Q AxI#3]58B(;v=ʣآOԸ0XOʂ2@J]]HOͤQ%p$걼s.Z˙+6-FwPA䝧anBx!mG%ۗ/p7|ߝ65F<:9ڍثm=@աU 摻{PXO1zucoQdvAmsiGo(] ]]}z_>˼_B._|S]UWUy/F7.R#pMHcD]WDlrA-v_4uТChB"aQv]~mSm8a;+o2 2Ȏe@|v,V|3:EQ (7{\{ۣOByЗ,t$}C;!A0G(bU;x^hO查ͷFa*7z .hd-w]I:BfoH1ZCZC$C/v|nb*6?kv-c>nQ|Oİ7KKOX@Xp | h SbX fNo;S=ĠʃdjF!s)w "v6S-Q䃟GTڮ+!NLh\R`pOίK™ endstream endobj 1873 0 obj << /Type /Page /Contents 1874 0 R /Resources 1872 0 R /MediaBox [0 0 612 792] /Parent 1821 0 R >> endobj 1875 0 obj << /D [1873 0 R /XYZ 71 757.862 null] >> endobj 1872 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1878 0 obj << /Length 323 /Filter /FlateDecode >> stream x͓=O0!{' HCՄ2 |Ȁϲ}FYQ*lrPAB;(lPf *:vPށ%pZANFiѳUr*bzHqݜ^ymjӁpHʘ|4 ?RFEh|VoK9L{-$b?2.PՒQiSr*j>rXTbQb#ɊZm3@ݬQ|t 6 &:>Yewľ endstream endobj 1877 0 obj << /Type /Page /Contents 1878 0 R /Resources 1876 0 R /MediaBox [0 0 612 792] /Parent 1821 0 R >> endobj 1879 0 obj << /D [1877 0 R /XYZ 71 757.862 null] >> endobj 113 0 obj << /D [1877 0 R /XYZ 72 720 null] >> endobj 1876 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1881 0 obj [500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556] endobj 1882 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 1883 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 1884 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 1885 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 0 0 0 333 500 556 889 500 500 333 1000 500 333 944 0 0 0 0 0 0 556 556] endobj 1886 0 obj [556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 0 0 0 333 500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500 350 500] endobj 1887 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350] endobj 1888 0 obj [278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333] endobj 1889 0 obj [611 611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 0 0 0 278 556 500 1000 556 556 333 1000 667 333 1000 0 0 0 0 0 0 500 500] endobj 1890 0 obj << /Length1 1606 /Length2 15084 /Length3 0 /Length 15910 /Filter /FlateDecode >> stream xڭzctfݖul۶YmmۮbN%ض~1^kZs=)( rF.Nv@:a;#Pٔnj5503"vJU%u*Y yg9@Qla 01+hJI(%T@SGC1@dJ0sc0XU,!'!6SwcS\{SG[K'?K'!O@cMO0;'g'cGK{g laWn'?nٟH;cJp6uw+)O?`pq-쿺:zC{{w,Lmᘘ4vנHLjw(?$ M6S389;?)3D?DywFoC\0?7@Zx7n6HHOMLm,:&FXX[j:?\@gGy3ȫJmw՝U<:dLs;@ `dpr07aZdF _+ۙ5%Ά@?.)Gn1OUzfs-vЄv_P}iJQ]_zW[M}G‰4H EwE> Uo:y;~ ^)bƩz&;^T;##?k?=qZ]fJZm)y`5dMN,!o Q]+ .uW7M,q-,UiF4EgxrA#vpz9h|PE}dFP,nHie5+F +l2uط^a#vB7\k"mHǝ#w;C]RDM-. N:>ߍ`čXM45#1.@l8fl/oEz&Aȏ.40K&5j73zX y 6 ^`Zk[Ւ* V)Dd>{zޫ AoG@ʖ=(@[GYdu({>3/\KA̓$þJ(oEbJL"pzVri{\Q ^?X`0\r-u:qΠt(K%|l"WAK&ysB w3澋x KfN?L dަԅl)~R' ׻?T!na"Ap\w%_ls00 OWHF.!n8@;hOr?"9Vm 3.hHX!|=77CfX4R=\ 疮nS\̕5r<{/s2U&amJ,& ;$}x q^·@LD[j&l2߱1|åS>b2h85 ׵ 8;iu\F*Uw"<jHԪKr!OmH_OY<Z_O1AA+{d!YG֓+t@y0EB6ݜK8?j 6n4`X/??YP5vwpuɬ>G"z*UELێ)=9&frkE|)VʡQEB4$t-IHW3uYS (*B%xPh#?&DT7x-֯FG6ANlBNj/(n-IDg +~^%)j棯ōqޘ"iZQ(WqcWVDW$D>*p?qMs !.6S<#vJЩ'=Wgm^;x)d6Q+ґ+2zfixWR9<0LO V#,r>"OeE2<x9w)^`a,xrjBB PGZ{rRT 1phS*lFXɨ"D<2gaa]1lFN#0v}@tH&kUVmg`>!PO,̼<}"7]6FKsV)n2DaU7%+_LwpBEBoyk T+'" * N֣ilӁYM_5V^)u-bqk^UE_)OlK-g,z\GR'rT=#Y,g1U˯ˍc9ܫY@"''(pw@yzc%V+G)j9B˲8d`JVjh>CNeQYaJJx4TNij*FO sA$ BnY PseŸ8vk A T$`j"iHDzW m{p6jzZy vjO*ka6˵9 +tTWXk[|uWqI.Ċؠb* 2|NkͷT֙o 랗EUKb Aܗůn^p@\فi Jڷ-BE>aUC:h:ޮ1%IhD z]T_[~ɟA_įv_,[uH6>R9x6pԶw532{xk͚Rl0?KӌuY ɉ wFCY}$v)M;)ϙ>X6KF:K7Nuj0Χj `-gNgc^U!٬bho  U%9%D%3k'Ҍ2̹wp~l7t,be s2=A)`$y"0C Ea|"[dHݷT(2Ҧ&oA+_5dv%r<~g !rGj%;>d.*AbTiϞTg,L{BlGFSil&ԿgLbaW J(vIKn8<)FިR!-+rs`ݼ~FMe" {7L]^UwyecO^#mռ)fRdwW8?i B"Q~!]4i1v sŵ ¡yޡN1G3o5KoIpq |jgE&z,lƕ22;*3~UIVNo"E\cIuZS$h).k>%,ߪ#PE`?2\|dS֚Y1$8fF+to.Tg:717C0sor嶇̹T5',,k:vTsT "ACYv%)F)qt{] 0_V\d#K|Qdzi:RGY"mw)< ܵ`k.V'N:ّu^0A*4}]dpMm <:ׁi7vL NHď@Whqe!j4"2ؐ|S".qVuO ֢loJ;Zt=d;}b EK.[̇\ڡ,ZGqSGnE$0~™BYI(8j<ͳ1|0VG G?1G0]hY@Ǘ]ccHlYhO՝ Em9CKp{nKRltƣx5frܸ#LzLͽ8qmY|*0Xh,iWnt?-Id 6@uNmyB[7'G6<gi`=~+$ k${[qk{8"B7aќpp&͙c>!S 2"9ii"'(ֳV\>6Pd;,.^2$߷4 "5$,5&ܣ vJCF##j,'qGx~.uvۻb+$` l^yvn76MZI33\m)tz568n Ϣ?zi@'\gƬP:{mz>O T,\924Mq7Q4C.v,Tи;G_&#w=Á@0~yiPݴQl vEСڲ /@G1/Š|FcY4īnE,``qnP8YICϔ~Rj5Ɵ1Qۥl|dc[qf2Ib3k j{d&/W۩,#x9yr,"LS99≋XTbxX} :<..Q&).?G;|aNP-!@q4}¾,o> A̤(:!]hj-^9 |-DKPhCzd#uA"xVDG;}L(`Ud^t%cmi=zWyn"Ϧ>䀭ʤ࿷F|Cm7G(TNFhDP S9tXӊbda X?.-;!j]Rf*ݺC#Ph?Gs~\^z/lC.^N |q+6o2XN:l/CV0 4kYAWT8ID>(6cdq]╅`ʺW1N-9Ѣ̳,l$&/Q"+5 gsF'&ܡƜ?=~M3d$\l UkҲGB//:g$¿9KAC:@I+O wDd|b(`r @FFBubu_47uD,J ~Z>RUfSr᰺\{ o쑡U{^u&5LK&4$@ r0ſX:4 ; K/A6ϖ?wK*z;13I_^j,yQ*f+eB+iGo_[TINxҀ|.=iB>%m$)Vl ޛ8Sw&'WImYfiTC}6!ҪI =_6ֻ53|3^SCbdOlz5 yomYt+OjiəU'Q8 -gY CgDFXŌ$JZFб-:%K~Ƿ&Uq|sh{"FuRBhkل2UVz_Z>,noi7[T-o/ׄ>@L-0㬁UJG6WGڜ9ߟ- Å +׻hv,DqRruF[Di!|vҵqOQQZtGtr5u9yYnj~]jcq7WJLSH^ۙ|@ٷҥi|.3%GNۈ8- 䇜Xn#jW]v[~le`gJ)6)TB g07n|Bg2D2nK%[QIUᛸvqCe,*&_X*7$zeFBztDo$::;ɚWEŨ9K! y:AU' nIo#L4Ftz6/CTC2$5 ǝd.N+|`ohDm L,a]t'Ȼ{tqhSjXyYNjQKT0&B ?5Y- 2x߿gw5 ?@}%elE0e1jd_0L;.w 湎eK gȭGWnVInf .A5=wk Vָ&)aܼOe6:<7XXL5 JC ~Ԑul˴Tb #G,U?=}6A45sOF-.ew rkoP@@#( o%rwHQ ʅQ6_H$a2TsG9 wcJ}|T:(vsj' r6r˯oپopDR _l!zC)M@@6~} V; ]4C@+#2 rI=tr6 տPo4~y9L-6!ѻ*FA;T#Orh_YXk>޽g`br%4I@ jB^ٍ<7%O[L7Dɕ\,*n6V3 lVn+fB9 8Yjj'Rk. T1`*jAfzyԟ9'le{ Z1|3lRB Se[Yͦ!jpV{u,1? j|*\ ~\SP}V*Cթ}\2*insJ}$hUKa}@JT]QKaD}``y}3iFHB߉ MAē}EC*g5r>g3]J:ߧs͚?B;&ɝρH6-1 YJA0)_ߓEհ<2S6q{q;wt/j/Gi_Ae "K |&fjЏ 8QV" 25J会{o8$H:@w dMljw)ȊXF&¨47V['YMȽv[Hgx1qQ.3oվ\@^>XD8 ҁ 6Չ}%Efcg~j~ jʏ@| wյ z t=^% EwE!# 2/4Ր355,o譄 ?YXKC^/ q N-$om'XrRag^K=w3v3F/^!17~2:@SکuԴ8JRNIo"DV\3O3r7Yz^Zm/H.alBN]#T#dY1 ێ1~2')0,,PQ+״s1$.I$P;PNm[ŅJA߾7N[iϛ,d֠M=B;:׋{6D)]بY绊vEqs#YC:\C?jLeq⋐}^4%l_B6Yw>,I BMҰaoENRϰ2ZbC~z(Y!a}%`72+j2ۢOdMըXf~5(?޹!z-m rL8ї3(4Z!H˂NEa]LYaש !$Ի? 9O")_gOb.zZ?=_ICsr&oq ?g(Y츊Zt?axUz3ImP`oY|,όcr3$=b|hIWa8 my0)3< =M|u u9SA *\qXVDq%+?cN-Fi(?Vsߎy[aC\O`j~,vA. A9\}J$1OZou: )ma{bvy~3Xm\ߘ1j^K&N7ǛX`c\֟@ BݬmjvO$g)j\2R h Ѿ%!IWP [miŅۀ>2Apvń<)@q J|KnເaOS@V0/ԤY%/e ->O 9c7Ʊɲ^[uU"h qJ@8CgK),}B0au*F}o,~š* v>[87'ʓ2Q4G26M> r &Fzp~μc!"KF1u Y*R@N;gֺ<~˽w-x!“sדgjhN ^[L54{C3>'W_J=3r}HB*\"BU=(#d1ZEceiqN\Q?H-mG}h(Bl[0e4c4ءrbP97͘{Uk߂QYlJO3_UX#|K$Cy@5%z䒋PoݑKE(k E$R7=\0d) CDh%O⶟H U\#8^mTU+HRUi8T5m!-ص*o*͐ҏkHaso%1M1FN6#CVR2h\H8\.|W1JI¯@5?kW+9hN\e}wjg\~)f8)Wv⡯fw==nAFE_(U?NF:xG*h(>g䓕v`^H[ĆMjIPM^ND*lu|/͸In.8l6Iqxu$wYc+0ȅ8X2mDHsv+;$#. =8ES=WnJXKO$/ tjYb; d-A_K9Knxx1~WŠm w%_5'kD(L!maL4U3Y `pw Ap vYP^󑣈 q5 U1:_Õ?Q?H-?JI,<33D?x~pk$+liMD`lxIycdrڪ?V<5IYY=3P9!1Pw-ZiQų PG ,c>:]R/DŽRg 2h~ASWqMޚE .2HSvP ޷kk* j@QkE')~h-c`{W*<7'dѻ\\.mbeIHUU`/D]ʎ-R8QSEE-&Ot@xຏiڵxWW:nlDlYyeK/L)SA'- /hՋ7=[[6WmNѝzyYuoJ`2!%7/ܗ, endstream endobj 1891 0 obj << /Type /FontDescriptor /FontName /OUFMHC+NimbusMonL-Bold /Flags 4 /FontBBox [-43 -278 681 871] /Ascent 623 /CapHeight 552 /Descent -126 /ItalicAngle 0 /StemV 101 /XHeight 439 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/a/at/b/backslash/c/colon/comma/d/e/f/g/greater/h/i/j/k/l/m/n/o/p/parenleft/period/q/r/s/t/three/two/u/underscore/v/w/x/y) /FontFile 1890 0 R >> endobj 1892 0 obj << /Length1 1612 /Length2 18193 /Length3 0 /Length 19032 /Filter /FlateDecode >> stream xڬc%Yii۶m۶UmUڶmҶ[98ߏ=Ƴ"b͘3bI iML\hrFβv2J殀FVhRRa'SCK{;CS. @`&;x:Y[(T)iOzt4p3w5s }Qba 01+hJʉ(TvN6W#Kc)% `Ҝb : Ɩz:8:Z:;X:̝ \`igljv3rpaL7ؿyX`o7 bhi p1p')o`Nlig_ hNN&6abӝUo`_,]Mm4vA302n?}nNj?3C' ^oJt}"7H"O% -jc#ghw0?o+p?MMGo3 @ooeW31u3迚 ed`?g?_44ԨMW_]T<ڛ?BBoڿH`_0u5tqh-_tFYQv13;^鯪zmޘ;*-3ݥ#wxRDd8ءAg}ZgGM0]4Wҙh/ yOU>/1e_&Y;a^ \z6^8t3Ob$O~Ʃh@ȵgd'Oc#C=`}89P܆~gI.N _`on܊ tIQ.ךCMޠaVs9.eʹLc,5QN72NHY)wZPuh [y6cǞDA-hr:;˵R4aKwm8%fy-ME\4+n:jDbėה/1V~KSu8]E&{ OA, rIeڇp,9B//' LOk8Vc T؃ЏQ6!+GC y~VYvs7I& ո+_@j5tLKTyo$u?4u`T9ԛz ҁqVUxS dp1kj#b1/ P R{x eր@nz5UFK8wH`FY)=+K."bd v>0[OռUzu`KthNYW!%՛T aTozP+$ytт;|ezE=IYGDV΢Ɉr3{t7i=$ |F B>>i6!Jka?YpqW~hNNw+72x,ko8O.gǫe52gE(&ȡ{nӯS=mc5Ap[^^=:1#z> j`~+y.w]`!=hp*/_v>ώu+.%|l?ZĶت U:7l|a?5(ߦ3XI1zz]' xߙP2}+ ΢ܚ(cfpCVhGoZ(YPA⅏4۔*#ۡT\>T(@$&HDK{&vcG?Xg UqoBե[WJI?@q(5CKOXf 2pcEnjo޺5@3 #(s^A!D9ԀtH]q[w~[(֗a՝>{#Hi=HW1~ҽ)FM $ZJC=2\q_ YLP7 $i{ /W7bCU]JEu~Z/>3>D_Vk0NBHYiWoNgU5`dk6`RX+}sCj>~*4^{_-<'>)kt]8[,M;As 2!+i!}T(2tHItzTuDR^s 96V!>K&^K~oa*K 'Ùf`=)-\BS蘅YCE?+T3i#p Z l8q|߭^X/_%gL ߙ}ڪ=x ] ݳ洰K?e]!\匡% `̋@WtA9I !بMv<wZ|7] wئݜk;l۲[rsg0 KPeKpm)G8ŚKAͮ?5<+Ϊ6K^ S77=|x a|<vdQRXlj!<4yo՟i4Wx [BIE>}Ш| UH:=F,O^{t]SS@'RJΩ7K u@ 0MxP79 R uVM!yKbfYf(^x뇖*F4S5p ٕ\ݲu"zY,-Ѿ }ZvbwiZbeiBRS/O0oxi?_V CbD@*?Q({s7vbO [iAlo2B^,v u!i=N;?JY) 1DCgv Y˽C GMfeB*t [)NJ`"E,ֽ1B.@!BfZ<`r0p.Jn'bMw"]ib*ǐG%2T=c!RخJ^iǖLȃ ~DVv[ؖ(_,:.. Ȍ7&3 w_r6~63;Di%t DJ+], h!O\z岀hnLIzױaKNԶQZ}ru%t>rHtÉc"hN0^掾/|(`b (YvD'/dxpݮ[Ō 3@M1o-\k0$%pg 0A?=Sxn'/7ݢLi6C}NOw>#oK* Ѡ)h"#6F7[ (G('o85ژlǎ:XWm*'q@^:hl_{^ܿHڜ)Z+!ߌ``eѡgF!VA0²  vX,1wK".czYⴧwg_ok[-˙JS Vs:"rdNdqW|n7-(hOj(hwV84¢nOPP#:>&b(Ʃ֑I `]`u R&ivQKDWȰ{糖K"5)2JA2'-=nj="A~nYd`iV`µwiBl Gs_X/2Уtby:R}]]Tm€GVdT^F\|N~)E#VGUƎH>k!F%yY6"_QKLeÿ} b%E+b"qd1#c%Sgm6W춽 KE=GĘ7r6*~ŵ|ԤU!rwZ89wJI 2qZYZͯ* 0lzXX5iMڭJo& ^|h}i?Q->{P2ޫHS%o:L#걃*NAiJԒtN4[.])-^'4 @1¸Z1ؑuʏݿ C`ݥ\P4+L)#tGL"jN< ͋wL,ǯw7!kz25eT\9rش ){23!x+72=1*qվT_2w7L5=H=s{sY[ABs"ڢZqHlT[οDPPWb 땋a(G~-GD<_=^ly6Q#QRWvkA{P4x]b©UΟ48W,RA~ü'E^@) B K+l1fMuhUq9 *WY_oAiX1{e1:"Ĕ3BW n"3feu4蛒 ,Ó_Fbӧ7bĥ;/]3tyw=!,Pmβ(u1 L%7y½J8N*4)p .V!!a"e;&tWisŏ+nlm--.C >k TY2 / B }rv.hw6i YFuB{d;v;hFŧCbWkJf7S]ak}d]G1wbꉐ П 5<1o*ACCYBFfW-.VKռ  -4TJBF0i (BO ThXy˖?.L! Hq[zGӜTtfQ[a*v[:~bཚ'1Z$'-?S&l.!%D:Q';ve{Q4ݍ~bj Ԇol~Tރy 􉩒{}>q%JlR9M3 5-8=v~xRX8J'U-0瘄&핀Q[ͅsv\/1nyp]=ZGXTM)M8[2&!-SZ3VqU)@Zik ,rJPWKvw%v7^3/džA]N$ëHD(PJ]xӨ|%,ٟ&,[=+*d;Ilha{Y5pz݃o7L0Km~yooMPxזE]PqTJF"ǩd;Nxx 1~ dBo{Z+5CI,i|U__=nPp6᳼M1^]KM K$>TS~E}W|>z5e?*8{V]H?i@ޒ?-xkpWkq_F IF&;i0!h4I7\3B{g8;vH23;~gOH7X֧7/k-6~=X:FF3y=:a=<8Z闎6yB~62NfÕpf4)ᬂ0k]{c)ߚ+`y"}w?3? B$m@j::K*R+"VMw}E=%i,zgᖴb]5)9C8t]ff@r Uī(|F]W04ohRtF) _g=4ROD/hϲFq}w6DyDJ&օ!k H 69,99 AOWlJivEeJm:SOuU,g[KuQ$]nx&q 9K;ȝ佨Kd蟧}0|* o[ֿe|mZ']!55 n* XϫFVW<{ޗ%L;u"\4ofXxrڳ,h a{nu1 Q.# 0hM/,h٠8ݍ}6U9S$~a~1mL)ͥ"ΗSvm`x!}sq f n٢mN@@2v]( ?7绞p.= W!_GBED;ʭ 1yo; N:($]&R)96K7g=V%E鱂be.k N#n5AOBckmҰ IgmχDZwN~HQjCvԍIw(鬆_Z*c%?{T$&77ޛmԑ_tz3r/a7y&mDzl_ƴᛴ9FigzWN/1l܍Y'ΰ,i44s6pø|kI'MYБ WY/)N$+nNUsb&hvڭ$p|[5P5S~Lu9[/Aڃ/{Xwu(g;CpgPsiI-[]^ըq;o Y5Iʏl|rd6:Ucɏ0l[IĽl!7 8#߱fwCz<$ܔ߅~&7r@E.pS[xu6^L]#2ķ7j̲%oU@Ea{ k둯VH8SdKiPPnHK{'vrH Ģ\t)B.@9|j2oeĒa1Ws?9ۄn|m8U9]VdͽSJiI۶B^.VEJ&Q1՛յ\z~.Hj,. nمTßrFnvhcQ'ى8][kF0(~JJ$wyj J;2_&z|jXtX싦W)a'|!%9}|*&IFdt+H*ӕay*ߨGQA<.L3*y<-aKg[U(4 @Pted-F q%%ZOwsCUSw Gp+ F7 ̫S"|~+{ۢ@nf h{XځKFxZHYVN8c9zby# %svش,a29-a wlq[HGٸ14wj~OvLz0Π4`yV5V:-fL?uFzEJ~m*SY11@NG"@,~,5"Pʡ0AFZx>:xk\`Q>q8ӭjKkӅF+̋x+xv$?Ѭ6P<9~.խlWzڴfxHsRǒBH)M mZ} Qζ2pK_dS 2xXs;^Ẹqyܶ21y#%U@Um!S4p@j[*|hnsxQ?;yἍjy-<&VURo H+%z<.n-',2B*LCTi΀ "1WgxeֹbW5Bwzh]UKcz-KM-8T3Ť!q$k_}8[oY1>7LsCJsVCL>d1W C"dVd$7f( ŽA1a5c!ƘE>^~ҏ0xB_*bܕ>*;5`˅J_.[ 1NXTAc;<>w[QPa~U2%/ZzaJZ񽚤e)4Ȓ9˒Gy]{V=l5r})\n(-«{#ִ/T+7r*:v4 8^WAܦOZq Y,2L2/iA3h"Q/4Ot&gUtlkMRRbkߪש^X`)A܏wԁ>b,-_@GA'f(~w-G9ؑƀ*3 t eёHqcg?-#-nF^|rv(/]~5=_uGϯ>L:X,a(#I^F&jaYJ{?p'N ݠҽ@`WX{ڽIyTN^mk~sylJf:-m"%vF y8ÈG"8K"|0oH,tg[kBAC{2ł4QO:$EB>71*! hyS!i;KXW *7XU+>0Z&reK6 oTC $X"s7"]|*凴#'T^ N}K_;l ٕFH'wbȂY^K?j45O62F#K\8 ¥2{tL8A%d+tkr!)nf\M'rƭZz?7LHۅnC%vcy8߷Xc}PwtAXEP[aGsl34}8 IEh#0O H0_̞_y@%0"a.޽IеU:3D;/V,t]xaf 9N5 dSȋ*7$:_ +쌂Xݔ1%\(G@T8+i%l9* /n~I_=a8ڧDu n PG+ v+V'F6V1:yx?$jmKߗSPO/,oFh"ya [y7uizOs=x G>E*$!]^\V|LV~tOWO!% U_+۹s[ԷZ<ݐTՕ'{?8PV^Ot*- tIHcl44TX܀[z|3 S{#8 O][0ɳyg]ڢ$֝>h 43l: tI3%Y&#jf/fާ՘OD>_ 5]Zp?te,3!= uC#tkzgL,|cI69 UO_0U 7QVhc! 6ÝIʍ@V:]atnx*XNMdd+U?<9mc̶χF.6tNS6L`Ceؒ !~R`RRFM/~0 O~c!Rv R=q]gd5g~P&37ȁ.I0 ԮV)ضR:Vnan Z:8 7O)Kkhν(RYkݴ ~[ QUTTA$^O jF!7+)s35᭮lee})l찫׿܋ʷFk'm枑+fͨXRź^ _A9< J=,LE^Gsz(O;@Zf5#-Z<͞ N:7 몒_gkҞ$GB'Gֱ8AYR#V[B2Ùrݩjc?>Z)@ΓѲ)r]#dK/ǽE}<r=0a$0{AU7"+7p{EcKLoFȊ^Xs2 Y7+R*PVvMl%KBYa<(m.n7bnĐy: R׺`@xGBO[* *( 8>AmvJ ;85 tLʦO\orvQ }Nƣxcjd1^ ^Nϗ+ Z֋$lkA*;XiBfet )k컗=n}=RԐc@m༖i ǾS^#_1L@>G_KדrظdJߟ|X4^ZhLWHQy[k"I$p8KDeڪg9cP6@fQ>&rqsE8{=_ld2w9ltE`Kr=؟Q|>癗K=N{YK% vikZ}[ku惘ApOf L#磇ĥ/]\!˫}QfcpRzNN HwiJO7&&jqK?GT 1‚g8l9&8c[sdf9=)+uoJi~맑Y3#TjE.Ѧnx2=*A7q_/݌2sBbO=F.C0Nc$`v0cT0|?ϣO?=~LLf73Hi*Q1Rˎ" ͭ߆mJυ D GbNaXifWSw\AXt<֭>5 ^-.5hhvɢXcGj_zr",fp{tbXwRe6ɰ1XomGR2 ]ֺ>[,yHW /"T%t͞Dr(N1[6^ʭⓎq>'Z?f0b2*(vA~cǶȨ}r P_j(u}ޏх3.8t=2; qݫar47zO 8`1c4J+HTM;S }`)XnjD}rrp9 IğAb)iko)[&DЌDJ";<Kks)RɅ7ҲL( f`:RW]Uܚ=46< وuA5O+HjO1LQ2I\\/FyH'wڜgPp+4pwWu@KuS *:^[/kKOWdPYY fU<~Xs}wxm_{ސy[rmd`cտӒLED7cJW_n/sAnqTcD 1Jhpc|꯴|#j2 `qLOu •R۞f *(ơwfv]t#ס GI^t9?Ʉ9 >Ru3\+/;!lLZg bE.勇sպXO,Z9"{[BU`CL'6 Xۯ $"`js~]̋)jY5,?ܣ3 _$}ԇh'dsN!x4$_8q3 0~.h >T"!fg 94ߝհP+.XԠΊnϤU@M'VУ<Jr8)_8y.1FmJS쥕rz] Y ^pFU `Z蘆-* -R0n& [K̞C;SDvd&3+ 6%qTЦ3x4IoH{BoN4 1 >sŊxed EQr+1qo_>{Pav0lǃm >:؊l.tvCÿyYyo1H6P0U\p *̄؂c@ 3]g,I[B≎{rdn$Qō.?Bᚕ%"W![ha! y!1Exn閥8:~6sV_$#-G>AEgͻNYD2cQ-UY l50&Qs$0 x,A'و:*: 5VgReNdh(־N(:24M&GIm]g쨔皍v B{CD$ݟRպllt;!$3 ?- 4Кu(WWZE1QF)[%VuP( ՎP> gA0?:&(vPR[bh:̧vw1MϟPeIjkIYЧVGs`f\fIg24\ t<д@`E;E8G1HB&P\)έPɽ&͉$ct~,,yCME*=3槝@Jr#IkW SM\77 +5u Ry8}a6Qg]3x6r`xLS]X^`>cS+g+%a*%%c*WH.OqisNyz kȳ9wGFbIWcilVqdYYC*7\ieX$)>#ՀqIq(9Fd]te<>^-{b_V@z}'3fuPԻyǛ40*q?Ia QRȎNI{KFGK.[1'XmqmM~պ_T6 G󦨵`@S`)5PGq0*\`"i$0- ){mQuB <ن\]ƱUwna|+ebԊD%-BѺl4KJsIOe0]2b}v9x»w|5>sAUST$sJY=OSWO,,_BعEߣcLCP.ΐE!ɟe !9Hn:(W5u/gz`])Qa^%^$0eJ!8Ck3HwSpWILsF;=tqXW u6?h=@\R9W^c-y*Y0g'/9K Z*АZ2yN٢(#i^*L3&b. Z$jQ?%ʭb6 \~XJ8eO5MxBz&\:z>utMXȚž;TҦ/}wڠB&7)JxSNqpԆ5X^XXg4RRvfqYP_zl+ɽ'\[b y΄Jli #b5@o۰ sV7 1 -)QE]p+ ErBXF,iSͦ &t1.rGA9 ì0%~{Z n^`d=ݍfTp팒bڨLQ40mzMoHd@avC B*qӶ!ЩK g6ދ-|G(,Mew ig'WS'p6u2 ՘L ?8g6ŗ\9rF}ťnLt/.@MAoS̮U@Veu] k 8~Js_-`V4 endstream endobj 1893 0 obj << /Type /FontDescriptor /FontName /PYQRXV+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteleft/quoteright/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 1892 0 R >> endobj 1894 0 obj << /Length1 1630 /Length2 15763 /Length3 0 /Length 16605 /Filter /FlateDecode >> stream xڭcem&m۶m:iۨ4*J۶m;ҶyYͯqw\W79* @ޕHE^^`hbkE`!'uZ9؋x4fDbS""fnnnr"QG/g+ KW"*uMjZZBd_K+ {"[G;_kCU@dne UTҖV$TP'mbJ$ge wP;8@d`ofOj. ]\V :"Gg"+" gc{׿5pu 7u3'rsW/LѕW%1jio0_M3SR/jleB tǗ dV "#rX;\\:'׿1Xl`Y4ua7w bf?0w DP ֋ `è%]?G%ZV{2DrD[cgvgflge0;,j(Co'LԒo%W78Z_ek05K+So`oۮ(!.$JڰT; j^FS?8xs0ѳrqrq13<ƮVDL LLD_'F#no`䨺ۛ9;ߤ<0+!u#Sb}̠#jE5ܕF M3<_^玟24Gc}|7Kr;`:LG{S*%3P7ԁhdOi q]HM@(uIOC#ýw9qƘ)ɮ^FΏ_o{HU m1~c7>`#?8 Z3r\Us1XƋ W$gI^,Z9 o)9-k%u[ʑ% #4Ԥ<گJr2M5CLWqy9i”E ehP؃j"h|$YPw|\Rvg !!#fțhS#WO7U,~ȆKNL ~3^j؂"R{mk־xF2'ņhB0^f'K^W?66!ZKɇJCP;=R%KI%t$ B] 98SMM[Vy ;eNn<tt{÷;`2?p#F_j+KȪ WEE4#*;Mb2kiޮRv0$Dƴ>Yu{>:BF V&?vy/GHK00 .,dX|vuv;eA>LxQiKfhndN mׯXF+?MIk2MvWg+H4R}P{MEF5/-J ^29UoTc5B^@x|D guǂ{]C+e=(ci<Q-^%w|ݜQtfVy' 8}PV.WI%vAup-}/%FcRDDV!XO@/pGJ\%3[cT9u$`(B5cSMI /n6,(t;a#z WFEjM$ E~?Œ5ٌ-*3s\Q#MEF֬1Jt/, kWXDNY2 $Yq^@ګؙHkOtŤ<B3vAY//?KS3tCM\gb Y-:l0JjVW{>.+U|XB>±_5y1YPuʅnTȽp~GtCJ}Att0t{LZ8gK/uBdͿ| m"{*q0G ;8[,W7<ӫz!nWrnM{zZq.¦F`Xc }z|UG1ʦF7>҆9)=q9l1fte&>8~/wo}+O]_,qO&3DFWpce\Ex^7o޼Wm|ݎk [P+o0-&hǧc$~P XY>td @Dvg(R[9i/Aڵn殪b~kpHUwAW RV/6ٷZzRLbBZJ}9'clNʦXőy1WFya;&H Ys5 j>xq o1rȐs3 0!63ґ7`{9K `E` F7D|8ZAL'Ŷ34zZ,Z^GMfݵ/OF)dII G]D^e dҀdM&32S2bC-KVHC^/31:PF ,(:>TlW3 8?{" 1Y.EdzB cX #C,IL5qη^ܽ UxNmIgvKKcw'i]~xD|G5cJ(8υH"e?]ZQMw:`Pz6d0Ȭih?hܹ:9".gm,S}DWVy4/k*)Ѥ;]YjLMF$ag]ErוyRC}e%c/ͧ4 ŹKw 8ݺdUlj9:`@<71J= 3?`<5, elG:R]\{eF[o<2>总òY˺ʹ1v=ڐ]Pl;6 %`$>@(.b`\{L4CWJ !6.T5m34((Ŀǡ@v5ӌW75ݒu5y(I`6H%!<=5%T?Ci>XdpS[QRPzkģE;z|jĚv1fM˜!STƈ>>wWJV̐[ J/IF i$[>Y%s^gjmml;I6G `1\Z>{ Xbs(Ȭ(iD"0BQQèMD4Lņlx*/vGe+%icNcc\KZ׈@1Tx=zt%UTjt 7=Zk>a&kOhf;O^PZ#+$%Y->D*M a1]}Vݺ{-v*+S =Cf/c6.9W!Cו`x3[Hnۢz2:Au@p%b{D[vi==ݖvv_wS +zO?[J@re]ɿ:u \ăW x`uA pL|(er!fIG La+9(и)+K~Zzh`ʯұOPyd+{SBx8mV6& 4XNH]4,jscɐY׮lҷSo!`PZa+0搮XLpGUq%V21TwN.դ!:NgŊKeϰ%BA=Jpktx,ϐ.>z3d ņRk-8up&aHDn #C3H irqP|ݏ̔PykK1+PW9[gfo7=/3QHDK~(f.:<,͎6A99\Ue1:-ZCjN6~XSkj:2bb%5#xgϔϟ_yg@~!'FLꤋ"o} aUw%^ 20mŞkY ) hk2 .mC، 82#-4U}2S/BL,γőc\0PbOOFA4 , @@}m@~ÿ;qAḄzbgېdFDc2tI>$UֲaFZP{M- ېB*Ⱦ.|^J~Y ыQ1 ͂eQ݋wmq;tERLf1'l9Z>:%KZVE BNOǏ,y!k*9{h73`5v6?&zA! ><C5h $k HوHf̋u" -Q,^~g"ޙrQ",h*<X:wopOuAY'L<V]whOL MNvZڃeJHBv ud%~-JKvX>e]6B.nia;Zd=E{5iؽ捌Ѥm,$Q'-U%uB/b@ospBp`VZǜGPzmw$={iy2 FDUft.4ޜ(XU!52 IÁ2<9lwa@/1z&:qCϮPIw٧#F1:B=L} G1 Ք[̻DiĮ)BSE{V#m&QgQW>83ۄp(i5{5s&`[["K53EOKPӄ+> 'NYHjd-;1gm+W9*Vԟ0'HƲ#\c4a@ϖt[klXvSi--;3ͫBsG}$$Ne?g6 ͊F : &zKV>`G.\"}R\jJQ%{*vZ$3#a? x(oIjg#%τT[]/ۀ(##v chp=PE:ҝ>8=T6s#ha}xBӣZC6N t(zNE SݾLl!nM׊w_$Gf~2C87ᚃw!E7E;C{` 4v0:iע'c,]'mmdcUER-ISytQqVf2\WK>uHRH*u :{t*.r2WBz?|á-M,^Id0,2?' E1ziX,O^r-h@w+C`/=I#AȢ>sIl*z+6-ޖ̷ d(Ž@/VǺy [AO9- +*VD~pi>ЗvR9K1șUzrr ȌI(L^USl`1C?ڣ^jFζ" it^,.^iR1dG$ۓv'eno6K+X.w|_SBt~ =ܢzFkNj&FW v4΅zG혷N4#\a>9oJh(eͺ$AH$D6g^h,|{[!~JZ IXţ[h4 A% Y:t_>c D$y睱m|_v2/*.CP#Sw3R$kʍrݕ~zEuS1\Y0HJhl|x u K:о\b&~AokG֣ٷ+E賋9hK⡊lep1cO*@bE|l/J#|x,U3>>iA>pY\8M6+^1/#{^6 <uY)$%GUCVpY^{W,gPȿ^rIKH%h-&cw:I xg]ӂq|q< u8 0Ͳ|zGʊ{g1m-D5jrߕP#:3I6VdUrwkWivvvxVWStýJ+55fJ1] fHg 3n((ݹxGjEm17yb ;_W[y6plQ F8r$ą0ACtdڒ٨{kMKϒ 0蕲]z>3ߒ'QW1gv[;5tub\9۹'3d:fKUf]N@ߎǭ Ut;"o!VYn?ͦ~\tR16Po!,yaտTh+X>C>u)v㞎\9_၍pIo7ae]:|bG4'[60b]I*89Q'4Db<<ؘl5 I&C^ "䴩(5 -2*r@gP֠J'Tѐ>yx\.$ETiXro%E(q+7J!y4lA.ofNzNf Wj~ aњ("X̹1,b+w=?>piȘ#k!qe5\:zD)(xP}<^'I` 7O5i:)LޮK.̶bS4pMd_]4YLM2t>V3: %lbt{ix 73 g5K{' ݦAh1-z(l:">5$yy"O}Rх<c|,?ݢ לƹ5 Gt( 2B„tA%w 1R A7]I*.,ɪ.K= dm9Ϊ*~B$]<iXRmoI8u}ϓ7| ͍ ofmZcv.`^z<_! ҥ P3TiIO~"U:ǿ(!׵Á?c0s.Iti`;#EQ  !Mw ^l[E'M:6a A4.}/܏;[t5 }Ti1ߊ. 0rC\+/X2Y6׺џ 0yލ[%]J]2i_ux}_+pS-SʺoYPf8fZC2A7鴔.]J *Ir7thɌ,tT =Rl[ ǁ'DR}[*V 6(*`G;zv"ٹِ]&oj2WXO0ݰ=*h` sι=}$-k~iJ)*'OQT̾r$N)=gnݕv :0"=/.')%5`2coXyH *9R˲r(N>1;篨WGR@I`Dxô= y6\ ?`L8̀dpլslv A*YqaozQ*]pGԙB̖deH& [:o͜a.s@*揾vD[Vm 5HGXyi&IJSyj u*0W /Xuܙ߯=Eg* Fsf.nieTIBK]K ~xN1r"v^->CWjYںNV[Gr0Q{ FxTIƃΈcmhMb -V,&b٣9a OU I3{+8D!k.So^5 PqS ZԊywc@{χ3[.bOBKڶ.ωeSgL}*1dM7kL{T] ܑMtZ#u4zs2|x ` 7hhfG*a.AFlae_Dd=wjlwgx $Te5}6S&g58[_fH#Id7":^KrpV8E 'W^(4GXWDu= 81r4Xq,*g0ˍ^ >c@12W {?)Xk VH4;v~w³ݴ1??oguq˔paDNBi>QBbSUjh f]&φ`ΏgomQR1,.o*Ib,ӭ:O\Xٺk;? ]f܅jfBJ5QȒhwCJܟ} q6-3)"0廷hru!dd(gy0\QVRF#P3̕9dN3\\Q;s-3ZgFTEB*Zḛá$^Hv!Y(xK~j&y FI(ӈtwIє`t8\("W#t|Y,$3 qMVPn (=>Y)糁ڰ8Qp>s͆~Qr"ˆHp7sB\JD+#S5=Ʉ:]M %d1=*؎OrrA|iCYtjs3~=c/c=Ïw\D,KIʤ+G8 n+Ẑncji2鿼ܲJۗh"aRiɨUd6.Q.mF'{$ WWGxqUXQ $xrԢِS j *[ 7x]qpI\ʇc%ceĀAKac<~hPX`,0qPI:ž9h{SݼWD{GEX 'hU*2ʫtqVN.M,aPox_/ UU <#,iQЧ8Ճ@[HmcgHo4#Dx3~yC^TbHПP!-}T^%rgA6׷Qs)>IMk[Zo؏EY(@[IF?_a$?z}bΆ{w?֏Ybi8wXVl V񿲿Mw O6*CvB#~Hv_®ył QR| 01j|=IF9a[)[&($S6hb פX[Ҿqast41%M }bwcI)7D1="wF x`S>-kr˥hEǗy~;R(5D5osS 7a `%9j Dc/(WN9f#?$w!j< x|A}Nc ` T(m{XdlQޅGgPcfyŁ0qL ̭_Ú`j${tݼ4frX?SA>Dd 4eDMF,(pWh$xv@ҩWL++HKUSBư}<0!%n}镚*uۼ>z{j2UO郼T`iMld9:mqfċ+cҼqʯRީDe.|^kCi&&fW1YmbyԳbjK/Fᮥ5rp&grFf8n&a/ GSԙ\됏N@IZ^=nqpuE/TfOgעjǜy*μY^NȒج9`2b. Zξ.'&V)SщB,ZHL:w L}%Ofgx}HⴅmțiyRV 2:ZwːgDe!4(@$oH“/ˏHDD;Xh~AS<,띀Um0m')a2SÁ޼v|*Dmz$--s'o1[܏s n̷np.9ﶿ\YD:zЫ d )Lgp{ojxypWnkAwfƍKf ̀ >:{B|m(^^W 29mJ0Lry(#hBo5W^.pWO 8 j @beALm9PWBpt!zfmHzQ pƣgiP,jMIn+Wʞ qd7 J-ŀ;1EtJoSyd2DLא=$HEn 8;ޞ,\xÆ6 k|2n0@XP!=Dظ!󐅈46hKQkW3 2B$h% H&,AH:ɔf?ڈ-G,zqVVzn(&ƍE dƈ1\aq~+ mp li7,rLdgw62rRsYl꾘p>-i/4ߊA,R0!o|5Z6J(d{mÌje%[M~vzGd@л]6-vvdSYT~yu3Њr :TXQ#TZ2RWv[ T*өhTH1nhH.i~CD,Q`7mIrR1 /+1x:d$TrFx7Ŗ]*6f9h*{# )n0 oy-2^oY}~U <9 ( ݷ3Fa9Zin߯!G$.$  ⪍ڢC9:hĔ Q% j|m"9ό^>ud7Lvl k({EO*,f3#! #&ܟ&[/] vqEЎoágk(+Jtr(?2W¡5Aӻ'{#8B;V7e>?x bKz 2})޾>EZѢm2/5=^֧b>_G:7C' 3(KM=sj#w|ݧnr@7BOs"H)2& EjJ)"y Au(C~4;=ѲJ/' ) dĄ*taXgV\3\YJ?5 7,pgf"!Z['5GuZ!ۑSpk,s+85G΅>RGHnm;(m_o߉9s>hZe2 QF h<۸C*ug d ޾,܎%%蓸kmz[OH( v;yQo:&agï*!]9zG$=v`^!rk\XyhBp"AfHj$dk܁IE!(Lpd>4q^ǝ)lCIOxm&!4J @ nh,zpo[Cܫgd؆Od&k2V[Jҭ,V~)./8LM+/- )/%\huQS;^$Kac9$$B}%a$7,JQCBY`+εDT:n2B/$EF\X j0 , "P=F H B%_[J;޷Bj}>Lo hޒXՃz/)`g񯛣lW*eõj+*>L[X,濈eUg=1v\ ' ȣ/ I\vwګMQj wFCh6rɵ2O:E/z?}62(vj̘~qsJq 3,&X ^&֢qw]=`١B*&Dzp*o$bx5\6 9Ȳ~PnskBigKMgo^H_K MtWb^q ӂm]+`h׀C\)8cs;I,.tBq4;x1tf{D1X J'[͏7M-}쇞s=/6G endstream endobj 1895 0 obj << /Type /FontDescriptor /FontName /MVEJPC+NimbusMonL-ReguObli /Flags 4 /FontBBox [-61 -237 774 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle -12 /StemV 43 /XHeight 426 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/Z/a/at/b/backslash/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/q/quotedbl/quoteright/r/s/seven/six/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 1894 0 R >> endobj 1896 0 obj << /Length1 1608 /Length2 11957 /Length3 0 /Length 12779 /Filter /FlateDecode >> stream xڭtctvlu`Gtl۶8;m۶mt}̜Y_3dzsW}Uu] ʴF@1k-#@^Y$C+dmi0" ̬A"@.: 4019996vf&JU%uohi+`f& ׏'񿾨 Lc3K @X^ASRN@). vGK3C!d[,qZ*͞K}\mrlvVf3{>3_>})X;ڙ8>*_>kH#kCǿJu7.2m,]?rؙM dO4;%N^G3{1#GNC&f Edl `d?}N@DP}7Yr);}"$o&j=+c>6=@׎b,] T"Aɇ t 0ً M=ۮ 2YZF-#+TL -@5od?7ڷݦG)|jA?ꐵ6_BB.wZFvf-3cc`ppzbYVQ4ߥϓ e}h/݇.@CEkCT Fȡ@z<*nmr@)Vׅ})ꃑlK$E.')Uoާ#G_lAi1L(*}/z!jg|!u$me\Ձ^r57`5toY8^' zvwδU\Ć}#0td=dP_L/tSx VK1M:b4t4t>O<w=$7[5a| 52ߜ4Cxe!J2`Je&=zAw7QըG殓{M6ZW'?"-H>ƥܠ("c ]hbS:ޡ`EM\yx^:e @]3 P/>8?#3kV4h}d )yT>qpmC8&@ƍw]s(2!gsܚ&h%| B֝b.. 1à}֡kH#houa%_ꜦfI ы eM 4B0d?%<jv f)ww1||Ƀ?v^]Nǵ|iFi3CŸoHs/a}-d, d ]؂=[oPGQ<ŵݵ2S(c@(gRXOYasf& >8_crLZxwE Zl` ȪSԑh:x^zbgjIu_>…)1.4{_,MsvgӠlW`mf=|7lI*Um]:1K]0М (E<{C`Y`جw)g7{sZvֳSJ0pU a١K1|C pk!mTMRi',.p}TK'\:46*U5Q܇zP!,W&XiyC=I 686Z 6XN%}uŀ[q}=osH\09}>/1X*j|V8~&Z>ZxufWș]]+,m*)\FõhMc=/vy:vH@iYaO,n pjx E| x| O euÆ\ iE@t:BGNΘsgʔ+!^Q)}g;gE:tMCp}/BO팯. ݙ@4zJw̒3&+'??ta)B:M/$ϪvrFIz;ջ; V()pqߗg>eN99f<;(F;tvӦ=~bHpcw`n @87/ә.ԗAg\@^$JJoqZBiڝ[0 nϿd(Ս{@%XۊYӻԣ-bQrq=1 BHHq+?֑"o~l[FzƜZ)wȭe0(t^ȳȃX%gBxLja 8N2mٻ0臭Ȣ|=j >%.HXXKaiɳrw #TPf{*)2(raIsXj+LRuRKĔڞEI_}glr4}]˰N[p,XMFmu> TEE5VyQCzpUu)9P 紥וmՁXXx<(Yc1Z 9wkTvA|7=_amiV́<\(|)TNnjW K?b﹡g{=] `8DT$S126Q2(;6cRM3(Fyw/$3ҤW.nq*a#`~wޑ-D{Z4!Y6leR)2t[v„Dlb(u^%ɔmFĈP. - I%]ЖQ\Y@l[ܪu/`Ԩ!I]oXj!ps>”JAo48%G1STϷJ+'ԖR1&g*El3^X"#ߕnڥҩyso,y\pfjrSR{od$jڻԃF~/` OjIC~ #bt[: 9x#>+ԒSBwxK/@ Ba;' :l:h*YQ̖bB#dюV;d5>,Dx/pn~ 9<ЪbȢx ;TzѼ@ឪ \Ƃb$BeDD/qgq_v0[ZPK8+ ?giaw5]rNmF2_8Zt4/Z:r|v`Ȟ0IA:?#bH@*?ޏ]r5txK!m8 ^2aOHRˀKǴ#Ye<6bV˝oor4 Uʗ)_7~b@4$yGgT" $^ yr#ǀ)RI&b?OrRydsU@z_NKŐJbH.,^)pR ړƒxhFKUFa{9o6rduҵ?iQ5xRF^ C8OǺs|oo|إKdMοo\$34H#=^a|bؠf(JdJT³ˣn'ٺ^[ܮs] _Jr(h.[|!a#g=j"J,d/h6M6l.l PUsH{75WXM|fK0jC6&WSI|BRQ9rcK5ˬ5 ]t.[Pa+8(EMM#=Z^bsMXWOv pS%5:ud͹xR꥛v]gҟrL}zHb`ZR.iɧ 趤=li0LQG$^G ppah[EC[w16C:CIRvw?HT=I%GJ辇nظj̨NX]m^YW(=.*v((Gc?l´e~HÓ0;wO-9#j6]Rgv85KQW'fdkKc}p6^)/jfXV3Yվ-Ze&/, ~A`Ö)N!&aHF'2|-lIsWhg)(w\oMjF3Mj r`IdS&j<ݟyL$Yda䍼/4u9R^LGLRŌ fv*Xܚ((qs®s},% wԍyaTe3X6KjP ^s<5 xpzixB.ԊjD!Uk#Kr3"o|Z'X@Op 8#Ӽ~L- 酒5Ԅ kc%Ae!ju0+-K.;ΞpߏuC A6_-Т8 Ƥ ۠'JkW?qzğ+rƽ(ճBF!u8wUX bqjm:Ɇ]Nz Vl펚Cu"*u>G,bO.|\f)j)xkɯu=q~j&F2%%XšWl&g_dڄTw%8 Rvgp:,1| }O9- ,'5W:k0)<æ1A33Aj,+M"3tj_s|Q ;2P(z*I׌8JRDQAjVGɚ L tS%AiNN3Х1Ll}Iu[2]CylL56n#OחԪIMzi'420G`yYYFt ފ)]UIQ wӴƁq Y+[Eq"S-vI>> bERW bLTN9fH.8.nq8u3}~PVBs)׳`ϗġLS*u y &;. 'jRpr2/FbXWD=nUů% *T N卙ӶX ͛`Xa4j^5eO+q<Ѭ_N3ykgl1ڠ @U3O(өׅm'R4z(+2 /lNo4%E,{9kn 2</[*%n~"f9КF)Ia-vN%aS@C`/ok^X=])&&b<Ή 272ޡfp OK3c"ŜQQh}z=C+)}[' sE]p7lPe̶t<dݝyq0:Wgw/UID  Y pEor D/-&Zm ۶6?{PoϤ&L+H1܃T, d'JDOIzˉA7YgZz~SyV Yr,WVqN7$GǡBDƥ>4! d3zR1kK¿.)3 CCr۰?4JS*t R*I0[< >o]1|Nn1 (9";*#{CDl1O_'ӪM|$R4ԻJQ@X B5HcNЯwvkKY"(i*e Ve` /2nxtk@Oǔ0 rOip3ID^;~Ikq[n` y'U~zRd1܏vw4y "ķ W՝ֽI"͘l?)c{Ap`sܸsANYyS:sR Gp1wSKc~ 6C5 5>\޹>fZZ Gɯװ?jVP\nPá4+9F|l5g[sGlj3W9">ZMx!xlR~h;h(*Vj5rUeֹ؇=H7JBB٘۰sBbepM`?^S%6" "z E&#*i=HVCDFBu҉bqU1XJ8+at+W,.G+^WrmPu$KF ֳ:=OKa ,FD3 ;6ӢcOGf!Tu"f×z%@p^I^Vk8a*fRIao9`+׌o.{˒!.[&F EΉhVy@fy6Ew=w8AاB*٩HJ̧#'ײϪp WSWv;pjbiC_N.˘`2$> eA囑~NS>a*F Oqʲ(G<lRh!ZɔUt soV9sJ+kS {2Oi2UqGq,IdYXKÕJ*hF8^W]|3¢ 5 'r$Lz &|+]/b27+j-Xd><L AєLaologiS#[Tq;&M,QUВ8ޒ!nO2~y>B]q!yzmB)x@'1Y}+SEqMâ)t'"M Hfdr@h3#T@2N׼|+ӿ .SLf<2skSO\')^qAw%匳%_s"H[ gvs5LN9ت`Lwq :0Xz}&5 ck )ʺ^1-(_H殭XO^9#Y`"~A8+|AH2m(O ̘Y ],-OvDv_qQn3n|nK~*?,]5SM7'22:w }M}$,WV' ؈ o`uM+a'Hljٕ39Yݓ+,CւV7Gk|~ ~E JZ~JF3@uK_Oja$MMn_/Aضhh %.FD2y_WR B$%<,rwD^DNg_2Rz_6m]@Ojq;!xHם:*ؒ[rIw٩B2'i"`!t7.Sw6 R}L.Lݤ3*ljS64B_͉/=W;ެk<4\YLQ Ȩ*ٷ݊O|oWǾ퐁gk?TU1mb AD:X5?)$P@#z1Z[`{*e:q(hWUC՜ģAX~ouم0^E=}E*M&j\n;t4ބP5աr-58qN򇟾46o0da\82s. "4|;~ףW|^Bqo}kEZiWG΋ OD4ws*xsN׈cýUtj&\}2Fztf3 WwvhWˮ4cl ÖyGLf'R?ulIMBtw]?|?SoU֐ZJ/eOW4&:V2_+^hmM?'R?*{X0:`ɾu4IO*EkC<{ESjwt-è뽮 Eq5YiYQ_QGa 'οxP6I 4Jm:N##)_7Oe|$L| K"ڍL3Hu*xATMԝP[RgTjOӍ#\FE|$kv)ύ[vS H{"C)!ޮ+ı.90CÜvD_WͦRchF&ȨSlmbLeotPKŝ=($g~6pg Lv9My9O?#Qx,G#=ȦB* 3P6$!7Dd\a"Fn꽯 GSi P_r'P?4(xD}x|` E_ *b [6̤6X'(Elv҆ՇMQ"jNrҋ A\~Ș ^VnkB4扙l~OTʿ1Pc X^ VĝZvSo4^Dq"pݦҾ"F3ۈ^5Rmg.V}jBI2$DPjQŸV(ueM{OAۨv ۼ-qF 1U7B}˒m$`:ǯٳ@ݺU6&!ˠ+[S HJNeO"R,T< t43JQ}ǑZt!јEgp\9A^#vd֊Yk=P5Ɍ0Ɓ֊u% ᷒y#;Na*R$m܋y4֝7> endobj 1898 0 obj << /Length1 1625 /Length2 6604 /Length3 0 /Length 7430 /Filter /FlateDecode >> stream xڭTeXKc蒖4F```b.NN.iA:1??@LHC0Qj$jkmTK۬vE;&7$WN~hVZ$\>k+ޡSMjh,g~E Ν\<=>x=sSɌ%E-Ik{dB[8~oFfjOY`5>mI`ä]G@VLk[a# #}R+LRG㘏$NK~ }dL}mgFmH4/uHh:olgS AOqSRXQꪮՄVF4}$ uq;ͦ[ >׈l\qzWF>']~ @EMq-IZI㴡e::gpwˡ!! mծ)[M@=5#S)ޏ:m^S6$pրL|+o(H&+*FЭXŲf"dDCƅhȇ+k(؃a\1rˀ4xQKJ.sySXkK U M7 Ev &CvD3*?Z,e/"W6Mi N}O@es9L::&VYw'l pN+'IC=1U6@ a{/"<1jQĨ3&ޢT+Jn2 u+pְ[b uVMEqDT7閠!tU£ž)CH*_6cV_98ut߯2jJ+Ktյ N9__YU_ O3ͷ{ɵU>ׅMf ݣڏ@ʯqE**+>2lf㾈|jOKނY*u]o*,RRpHZp(?hKb#Q$eF!UĚҙ>QT4*-\f[2,wFyz =;]8ʗ&kVuVOOqӾwH)Z^8=( 9w*Z`|oMh9N5d;"RJ4:4)?zWC6Ƒ0I@n|~Ǭ/nE.tuH*>R sC i".Rv[C^23:RD\DEm_DLU|kB8VAbmd ݾKI u"QSnZ:*y8# (./>ţ)IR)fx*C,4I%v G]~+e #SI-8fs,5q^^Y*rz!w\lޚ!}q#*sߐڸDZCe,'M\%Hn"oH{?{R9,Vw[Llۅ"z{Ǥ87fƬE$]2ȆnMڡe{;I(J^|X&)ӯOd6UL}t1Qd&SYBkϒJC"ZĠi c'=д`%F0]) -M`ڛa{Vh?s.P7ݱU"4M䯧o5qHŨ>}U[_}},+yJgO$ |c^:nZr0+6Z9O$F_1Q=XyMdoWN{y2J̴ ]|L_"K ljȦe t&'xuKrũQ>1z?l{&L'q~ ?ta^ g݃?*rK 9I@X|`iP<){qs}8vHYp]2&t |khOYt'L0;PoJ*T[f3|$tT$Zǜ D!^4ڦ/jȑC#oXtbR(`ҵg摘bR½-_ǘ<̽IẌ?Eq:>z !0P)IǭUW/jƮ"7G)W3Ǟ^a^|DN{_=Jnxk z[ 44 >f>`FRl'iPQ!Y:90*Y7e rirN\_M@cQD<.q!q85P _6/F'$kcۥ;!'Kn~%jbb4D$4:#fhGg_Ye zj0G|{J =ܴ雒Wǵ؊V\Ƅ\Nԏ"_3[X|x,6%y;wڬ hv4SǗEa{A )I ϖG5Xmk~ g 4T.V5[KQ~B%E)Ug{1|ӌQV2*sósWq!0F曘s㑳tC"t7Z8K{D&핟 |WaOokB? h~9^ipeh_rCړ3oL ,e={T(};,Qc8Гj- |;4GqF3}LMtJ1&ÜU_ neeN" 'g[H8ƃpDX\FhX5EJL7XH>J\O+z~ *8G9%T!w֨ԻIIKijщ|a0yWWgoFG>.%,*:Dޟ c?eH"uYck!IH~o8&?L)x)<.طЬ}=>^d;TC/Q:E.fPS>}Coɐ[@F`乮9mi?}EjU(9[D~}ܔOcf >;j&s 9Q̓]&X4cc?toJ8^/-Yo/A1Up~ra I4>7 54T:ˇI޷AC2InnYJ -ͳNi9-2Ɗ^"ljSGONk&+\S~+t1RlwV-~nUc&2%=Fbk3s'_9್$ڏQU2E[8!^] j XˇnYR~fnczn1بLZO#j(-V ޺Ĝ$.)r5?e-^r. %azтʞL3=a8ȩE[ujDի .#ꈃpy䝢Iw̳सS7wu>yۄkbxL[R !$#kIh6K Š[84"p1U2\arv)/{AFdr !l=U<`ܪJ]?2Tԏrf0+taV4ρ|{%<9?ҦG .VGu>xbDkӾDݺ}?4xDnX50ücBԈu#5v&9u"u{r:̃d"Osf1⼶g(L;օPş4=ej<=ooJ̥פϳdm3K^M:E Z :ceq6ooxW`i$>g9?TZ+rnBR0T#9',:qdB{{O0_ ~˰ -U3Od@>a+9RЭS/I8EW=҇]Y舞_:ĉLXp`lRx-"y; ,ll0\"v%$!$GzOƝ:9] g97&u[mjN.R 0ۓIp^`eTUj: G9)k&UA; p#?w#Ui˲$*ҭ@: \β%$,40-[q׌e yfZk^8*ԩ:?? |!+GEKQ"qG#_bصBM`ڑ">%XknbLY,^0u$Ma`rxWAnkw[m`<ڜE'I2jM?Oؾ:{}Z&m) HQS!Ć#H~ $U_TЮcxrxn4/&N%@zTUPLo%*Gds)zx eRϺsb@'abi~Ҫʞ{5)Vzw0xNK{8Anc<._u}>6f2CT$0qCSUyi?mbjۭF"$LRS6j>eG~pGwƄ T4#g{=ڽj6 4^uJO~-Fb>2ap37"p&_;OV`; HiF3ψ@YISjJE[KQZ7?qxF?]ܾY.i(53¬Jx#Nb= {9YHi3 1ƨqj>ŐX/G1ZA0aܥ¨' D 0B N<[V홙ךYM:~U|}5>r/? 5#'-UR绉QY 4% ohS"CE<|EO$w9\@<Vy,W4 )藓r=A ?[wG&}UKٟp0ci Prw S$y~x/CF N PU@%ҧꊿ>ߢv&S`Sc-%ybAqEH͗jpouN@̋a$|G 9./_b endstream endobj 1899 0 obj << /Type /FontDescriptor /FontName /UHZORO+NimbusSanL-BoldItal /Flags 4 /FontBBox [-177 -309 1107 953] /Ascent 722 /CapHeight 722 /Descent -217 /ItalicAngle -12 /StemV 145 /XHeight 532 /CharSet (/R/a/e/i/l/m/n/one/period/r/s/t/three/two) /FontFile 1898 0 R >> endobj 1900 0 obj << /Length1 1626 /Length2 16283 /Length3 0 /Length 17119 /Filter /FlateDecode >> stream xڬct&Wm۶m;NvXI*6*m۶m;os~~c39&'VR6$. Lͬi͙/31odgʙ \DVfk7o__0% ߪJbbiOmgn"H3?-ޙO-E9,lab3_E/V.[sXf5M]ֶegẂDL:OӿDP%al 22*]$SO[ovpU0~c>2D"9WWWFkVhk>i#+ ӿVV3%+SK"scۿ] dkeFJD>5K+S` `oJ/ _JE/ъ<y3spѳ1{ qs0yJ .NVDfbW_'76.f7q:9_o@S Ԍ4Z̜I1^f`|j`ojw{M0C4gҙǁ h/-eO2*ϛ/y0Ѡ!\3zQnBIpwRYŠ  ڏGٓiJ} zFڂs'ᡞ[Ⱦ\r^cL3D#O c:2 qfMU4UZ K5OvI"vObʮ5'u-K e걽QM.cGOL쌵2T lc?Yؓf L|LNAyDB/!E2Z+*烾%oXqŚ M^Iu5j2 %O=]cƒ9ZDRC_={f 9mv`QIŏ0ohNSIP`&Ώ_DPvXg'FI0pmnݵ(IIͽLI=%XdCqygSZFI=^W wRp-qjTtό8aj"hsE WdӚLjWb51،Mӗh 䍵^x0bА64қwTOzz} \g|ao3)h[m) 7S(V8$Xqz˒&Ӽg!r.Qv^yfZ养Dfeݍ֍[3s).@q,~e)[5. MPksCo7(!*L (~33@[ˆXcH+lg=M>yEK SU/,_dgYd+$>D"kǡ; tJЮA:0ПB&6Idr΅ANm5g͊/!Z>#Dk#yM߆,DzDkadN M- UhS w[:{@g(y 11SE=IK0*2/s Mwu+{ʂ6>-Sn\rN6(Rv&̃/)*S1ύMv̢P8ɊU+xnݺY(F[=yDږ3Y?4v|_jH[Ǐ]LB5fOBzH|㎯]m`ftK-΍C*\n^1}%?] ]O7rĐ+AR&޲aDlwpjb,]ϗtR?ѠpKgNAƶlC]0v$?<8ƤA9Q Sֳno4VN Ưٶx 'jvϬ"Іiyh; uLE=NL&o?wmߜ2SK[!Fz{M$ـ8c~KJ\uqbT3LJZ@]J A7nfGE4]0{Rm0)y9,yN"`t8ب{G4xI[ao:HT]\1>Յ}-G &}l{k{(}> Dyվ2@By )%IfºP#vFQ.2~,#OrH,uBiLj0yfC U]ɅfneGwG(vO WVu5);_[]9Zf62"+{C8Am{Z,>a'xHG=4XDpo' ʌW1RUjg{Qo*&m1 U*ѦMa&@;`}[^uI%̜ɅKZK71I]K~Ot}krZ|ZN)drẐ)?l[a; eizH0R,\"Z[uX5eCTrgeD 酹:cL}g(Xm댏*)R\WF{L]7Q"%MA=T$K/5u% Ӌ|nyA`nt4zY8=_6 qsaAsXIg$3ڪKߢ `3-R {X=:l!aX34Y~uPҐEzw %Yf"K7{"q,0E^זGbl[#֘lMnRʥ]ߢ;j܂{5; (VgyHYT,nB >X0?Lbúq,.R ҵj2 Zb`OJ~4aŨa1+kQtɤ@W Dq12fWwұ$^6POJoc6x@`%kM%[J LGvcp ɗ 6ffA\dѨ>U.)0'D:JtI(f18I&\Ѻ螆3*$Wai sm'm;-Kɛ._ݎ~trq") p2JVo%} Vnʰ+֎_[ Tߞǎ!0O8/>9瘄,W4m9~E(& qS7=UeH`HƔT̝끁aO}{=f`WMLI@2{|w9i!d1m}M=QӤmvhu?;q i)mPLmGxȻ zz_~j9xa@+4v)(%acڙF)E.elpx Ѣ?o UiʃB;gzzk2m [CƎ{ A(Qh{QUx_t؝+돶@`/WG(>|\vs aƲ  t"yDS2hHǖшm<BZ?Y ,soc+f\h*3)&ն8C" exP6^ɩQ8+K.E 3DQUs &ĝj-̸j!‹hi iܟ;~ {?9iuuD7iXC{G?$.BIMvC+E5Z޽(EKN&L E*XM9<>ؚǂOuf;L 8^AC[#ޢF}=MEPpŒi1yt\k~zc D7&ħO1 p:qj|5@'y|zIB$BN$־\ /ZZC/^z]GF |.\)Z:vzΘmv͜pzϹEtŴxYZGT%@oYzUԆ)ҙNPdXif&æi*;x&* /`) 2ܦS*"G0{!'nՓ:"ͮό5-1q Q4V uJ_uQ!_#λjxK(1?i6V&g/Mﻱx)CU>@z2+߮t[H ZԶ27Llmkr Nܯ<0hi\!-VY- BG)II[9䝼.eׄq[g*M)-yhm y.|tT1 \^9h$G6ܑ-d2Y-/7S-һQC"}5:~ Fv//Пt<Fe{ELq7[Jy~sg%A qxcb2XG"Ҭ JVEP> MV)c Kp\,~; fM םL34ng=HQZE)qŊ.,62U/l+{}CHa-LJ_}j!bʾhiwi/9Fg*lA ?hgJ]+Qk,K֥ZFe6eK4l"%_Q(1$F::ffhmsFdHרzq Ι7-N20X[lK7|ޱS @Ly3ăc垌.4ľɖ*2܂ޙfG*`6[et9 0L!oJ`Kۨ%G E)Kҏ,ȴ҆Ͳ6 5HEJ&"HX >IT:%Q5F{ 7 Qn}܇Ųއʪ%O %))JǔWvG &f9_:> nzW\`"ٲm/\WDe%8$/Xt-jѻ [z|\Ae(dDhhA7\8JpЭ,uȾ؍ .lS.6j:ϰM7trE!?oI_k芇o dzMWblbw0,C: \fQREz+Ll8pn(LRci`h~bXg"B ybƸ}] vvݦ Έ/LIFl5(t+Z͒"(>8]S86kV~9ҿz6dh 叿u:r^GU5ZP}A nj[p¨8[>[aKB#LWۚ)obNw|\_68I(F[s.S'-t%Af霦*=*ȃ啭[GpP*>n2:m@;>e:+"74mE (qm0*3Ygw@X¸( A8)1Tc6:#nzY2ek\e3 ^}wc1$;ŸAёC3}p~Iyj6\k簢t"ν᭠H]Yh,=ވ-Mr1pI 0>gQ{0!p~;h6FsNlʟh?Dm 'SX7t* PY̨-1P6sui|f }_r5.~PU(¡ۡ&N̦Vsɮm,ь0?GArx4idf7qGK>/Qo\M^xw>A9eGN>RJ7*D|yG^{kN<,Yv ,f:oɣmJZ"z8K{0#Z| hL3̄KwZB9 Ed\;#D:O{fף$,ca5YQĀ:v8?4Q`}t'H%D #NE_ 0Dl(}KB!tv8`I9Krlqk|XtB>^ۆ@l{{݂Hd3Sځn/r6Β9ĘaR9iX&noP +ElkD号uiBm^f1遱7@& )w髺'KAr31XOfɫǙtK/_忮3ɇQlڤ♎b^߿^g51UL Ι\AV- 7 N!w @礛?<孵jPkَ#$lj(2+iN{Tp2$o4wHm{J*Zn-sss)(y@ ڶ36K5c#IEm ҥ_A%JT1cl {fjZ }U=R*%aCcS~jb4we,`䄞q?q>xq8漟մ奆C_V]wZyaԚp1؏DiqK^q1ԧ4?3/8:/A3&y|8.X  >W"9`AEu `=K rbs0Fɍ ȑJL@Ű7^l#ksFjK{IL9'^Y Coi%+ ߉),9[aQ_ !K<StRGQW>˻s-ItR-N6W éV [dR5ej s#RKRpxmٍ6v ˬ6oO6hp vE;UGL>m3G }$ ASKRغoOf˅~u^~;FZӄTq]jJLrӫ87T1%.DDэL?1s81}p%r?!P!PbǮYCB@(tޓ=vd#PVk7!mQTW:% -%di 힯w;9؇mPg_AGóQ }[J(F eD)'[Z8 (װںDMcbP(f5ݽGTt(!s+.t.l, 7%]@ |DmD ߚc8V3siOdQDo&8+?!@ *{E2B*Kq7"ф7z{iURi:JR-rg1~|GO+*uk<|]+F IK!C@˜tt .d_[qF+~J[G:]eST-1;hT}A^  Gо94Ǭys4yV<,e:Џ怕cmBB4lշBUǘSJ0t貴K'q+9WQHann! vn Ks_W֏*M?=yZY>ɝ\zNŘS~%gD7Yo ՘<8Uo[9v 98uKS}\1X#<âQ] P;9^ٓEVs8bnzGS(*IɈAEJЄG*.2lLxFLx0׌8TrvrIvFW@cu>E[8gB$o3--+FL[Ul)[?L7>(SWK 1LgAg^rT$s.rAM̵VͰ:Ǟ)s 0{SV4,T6P$㓇PIOp#đh􁑻Id6V4 3e 'mLԜtfpM3 ]*iG%(bTUYNLMO%jp@UnӛՔQmS];Sѭ:. #FXB)JJ ,"g,OV|6 ݾ;9 Cb2ATuV2QWwJF`[1[9.GN7Jadl%slclb%M$b{nǸeXE~,D-E\6SUpCcthhZNVF?Z8Nپ( 8uHgћXk/ln;"-aҠ%0D$5>߯ޛod&^7A Fc0$Z %5B/g@4;"k286Elvw#:lO_Zgv(Ɉe Sx.{Sra̸aֲT`P+ $dv6!%;Ք!ǂ''/ڙa?Ъ&p3kð!Jc=8?39 sqΗ7(#/ ;je,w"O,cH1Tmw Ֆ+? x™~+ڗgvQm>QkAZދr~lcֱĬLd=+i@J⛤1Hz+Lj>5+#=| e,O/ ;: hE>9 xaW& 6>5J{qK30@$啸7'EIh*!/m2mpJ<Y/0Cb?D|mr>8(h1 I(0pչ4Ojjiu,Fw-s4ڬmp-&~%Y.ڡS8MUn O MY>cv4xȰi* ˊl.iC/;bjk]\T.csܐ9CsTEYlTeJ@t?zXV)-(\Tqe+y(me S) ^$Me(LPRbhANLN֙U=x76݁2n͕R7Aiq^W x|onKd3[]ѭV7/c!4Tvo-{p?0Ĭ0R5a MD-eI2J8 X5k(1#ɯ hJl>ƛ?$*/ZY 1G0# @fn 3? 3 yR-gMzz%UVz;O |d9vCPdU%B~E9o[+ M3 ;[Mm{Zr ZA68bee`-|VM/;Dʹvi 9^RczOt!Ax!?>e~Ѯ5&o533]T?z"MZNa9>( sź Z">c} 'KNᆘ=IB驾L{oC˱A̠0\l0dv&k `!"E(HPc|,tyDp(i8@MX"?@F}:_rEa'NPq<.ؒ`u}\?Q=FObKӌBʋ)O \KlM#.3lL agDh^4 SH3Y.f^3.(3өR!1hqw]/e;a?e!#Ʋ$Upv3xa^+E%@oXD.*Qw\!R>H&Dmq ^*R .$"ˉp`*b { 4$$&#(&~WF<&UOVqt w1p\9X&,N'z$τzPXW5Ti}Tif/٬jmHF:b:,-㴨1U1y."k9mcwș- 7$)E~#Koyo-Dzw;WwCن&],oXtc}j>߉X`T"fScR#k*jyBdF\"Jޑ qCkm"#0؊_ۘ;Te~ỹ'4NX0?uASB H9$,Ѣ{qdfP_Ȕ;u'V ޳~^E6 )W#`3!U.Y4vئ[tRFMFċ rF{̒'b[)m;fk|d0k4CDqRʻ gdƁE8b6i9e$Xn\A\jboYFEcWиPQv5jO78)y/ױ$j,hxѝ+: :ea^9~0yEICOcR$!\^M 27l7lDZH20$Y !f\iJ I #JOu6Vd~sK qQqFΥޡ}TpclKDX5[<3ӥeU.~PGc^k$&ֺ{{ `࡫M*u4\2ظL6-)e-W+(tRC^a]䥀Š/>\ʼnm@ޣMYDz|)qJhC}z 1c`:Y6B-Zȯ WC<@ `ժ1b== Rj]|[[+UQ \Xb<{s}K{tm%e8-/xE$XcN)k' /y[G bGbBv/2/qu1b_ɩ͂g4'ijD\ݳ < jk倾Cc6gC=սVO ,"^ hʶJ9kC7p'%.{D uYt?mrSž5\&<='8!hA= ْ\Xqmkʔh:/邵JBLzL{&b剬 #'cȲPBー.zk+Ŕd|~ A`_c$ʕ M+!wŌi(όr, GZlqPg #yo HX!{sf]YLy$*8~~i&ldW^0aẶGn.>Tj^Th^69\wQIf3I^,,0-=S|5T:$mdQZH hLmGeQ٨6hX㭴]32EZagkRN_atI,!0rf a-ֲīYB~(*]$]K:M-p[~'!$ybj ~VmL, [~54I_.brX7CWT!A'8Dy;x;2E[b$7Ymx[x endstream endobj 1901 0 obj << /Type /FontDescriptor /FontName /UKVNVK+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/a/at/b/c/colon/comma/d/e/endash/f/fi/five/fl/four/g/greater/h/hyphen/i/j/k/l/less/m/n/o/one/p/parenleft/parenright/period/q/question/quoteleft/quoteright/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 1900 0 R >> endobj 1902 0 obj << /Length1 1642 /Length2 6168 /Length3 0 /Length 7004 /Filter /FlateDecode >> stream xڭveXm6-!H*) 3PJ"-H#tHwwt7ﳏ3}ssu^D% [AH.>n^q&E SҀ*H „!@$(DB0@rp3 `6``/q0 08DQu  ZF*JV%M=jB ԡ ` w:@pG0wk.(.Y0 qg u8;@PG 3PdZp @PYi DE5 nAH x 粂P ʍ"C8CuN3 A\\P4(߷w=yw P f͍Ǐ Br@y~ϋ5qsAg U wyk|M8?S?'@ywSoR+`@gEtv @{ٸ:~(:@a]? __f"ւ"Ak uqz`3 A nQAtm {JAlٟy tՍ59MY 5H]O3h>zG%/ D:C=&ܼ|~AFMݿ a3J? @OI ^yf> DNnfƛ"xObA5c[UUfrKGn:[K9:5„_^{ X¼kK/ͳqhq0e!e;}c r1 ͓iՒVJ5j3u<;했#Nաgr>=8J_x=֚<ԦGՎe*l9ȍ +(Lfڇ3Z8Mܴv( R܇u)SO33sU-Gv~hn3pN^`;\W$H*a]c9Q_P7,y~Gޮ(蒄v]~tjUw ˿xf; +q~:m軲€Iciy9H^9/Zor3:UdM<.ش7uqie*0:vt(q9v'JQBZtQ!~,&u@q{J츗KqzLu Fl|&9]/tM)Z%}Ͼ 9('trSy$y}S&}uo7fe.`b&ҸUyd+y&YHGfJc[θIB9uq";%n:A+jwH"4:OF^ŵ'KN:::\%UׁykS8-FZڟ+G<9w*cP^5$&<-XXNLqJW~XxHC!1 ],Wڎ%(\7 ' }#?G'Y&BL-7 {GUGd`e"CYVص=>GN-܏+SyW]dGoyrϸǑ1=[pbY~|KSBdKG򼥰Kc`|FK{yy&uW?F76VqTRVRSJO؍no ƋXuq&v+QBn^{)^1S=DzZ"ŕ7Qg-C4' 3l3y>3iWxA;Ɖ(w'?ݹď@҂b3C6lpaFjY}ǨNTNVe/0OUbM+ū&A7Y؜Ÿ _ gr?b;q>*1rD/5g5W)snl{ .`~MBDHUcx&XͬڊYAIx,{7bl ? :ƒh"FIEnL>7o+`_? ~@߭LES̨G/B#EþQF$Xs8.Ĵ3߭('GxON߀'cz-aDEHnG\1>z3fanfK#wO;zyHR#^mzz9?. Ȇ0 ]vK/>Yrc*4~-{D@9U!1FYWzYS,,SnaO,Mk>KhB&6v*q=y_6"\(TM609:7./@w'iwEug #i [}{SnN^DQ@50Ne=-_sցIBcԮR{sv4Мz N\_[KLxMd¢$!B0*@X~ONNsLO&jxeA'T|t(sՌy"؄Fkjc/fR25R0+ՋҔO,YYk^[T/l ̠̅OVz} kuqf*B@Yέ6] !|khZv~ܢ w:c$+34l, 엄׬P/<z\hiIzFt{]S%b݋NaX)М0>M-zqū~T B 쾢4#tTZ%۝pvrcdWg4v'&վεZӺ3'xۉ >퍬r!xzV71A;->ޜnz>88(ђ(w/+VdIbp_޸aU%7L k_9(T lHiRЈ%_ћ0غl ?vF(f{ )s=ӲȽl-8)Κ_g]`,c S %H&)d9jtF#ۄU/nvH΍؋c ؃H;@ȥz:XKCUSTrAVE bJ , gv5&/zs$&m%uH5MLp8rVXap٧ MrCrKzT)p!^Y%B0}WzX%h+`m]|otF.'Q]kNY79&+Ϊ;VTm5~`0bpo?Ōbm]28"`2X >(ԷM}JwԘ4j3E\-b< }-dmUIby3g{ DYKTSTsc4^`pHҦ8ձ&qX}PP5l_; <3fg{أ>Ⱦ;BP\)'J6ոOz;lx夂+WOE鰭'hދ9iU/^i kh'^L£Z O'U)`S4WSwYGuv:E򎁉 bR]5?+e͞x֚hCI_O1j#if;ՐSȦ6(vsWl>a68$lAME*DDBa}0+fk9 R_c˃z%5r<}0)31/y#*"k.e: pΫL[$Ua7Wiqr`-(`G}=RJPC^B!ӥ};3V@уI<3mϩgkuXwItGj?i7ʏmՊ7Pz^"}+ed nSH|ӣU;} }܋Ы!Dod@ynӘni~0SCxg:iRHںVwXY170}s,4s!߁ 9 7 \%c PiXL8iiҞNk}8\i}WOv8@7N7ZO?mKa9H/ 'SPxNrV$F>Jb-#8G/IvfOxGVCD 5\@|!{d6}\E(*Dӳ.v8.5=YbMZ!t뽷ϷID-ʲ\yz˞Qk܍u/|9;u@ $fEhWy1AEn5_8|>:b s@aٕ%ܔVxy:+khK3dsw{t<Ӓy-~I^y"nV˗kA8+"gR)Y>5_d[WFg@[#љh_H~0z 8׿x.œzO[4+Mۿކ|)&m-7*`UXKN&LS%ǪV]YN'[U# aKGv#E2Ohe=D'zDD~{, ]VKGϨʬ9(I^Yi]r-rb{(&Z]5aǭZ=bh{xbnuづhP=cR(/'1Y抾t&x?$l`vХ8/;a)Y$A#mۭVEb? 2X4ҮW%m,]Fq# @[fI.6ho`=e"D\WbƻIyrHhۀ\+LOsI/ܲ>J[#Є1G ]WIGXlC^aPs[b_\{! yU v7aHkz.b)Y:n Z-> k7?]:A#8ҁD>MAco~% 2/Exu56.{0I[k15C; (8wfI} fRvr C2#XsV~&fa7&gR)?H5k!X4~Z?mCeD60}ǵT#ZY|  26\N@ج:sC|.  kcI ryS~4O;eR"X#$>_tΔTN&DQ(ucjy?ans!x"!Ss ~֏gLp 3JC5>9RHW+S1+!在QÀ6]ݵ)bϱV˫S vdYCne΋v r3S>dP#^U#neN {Z%My+v잗怋_Βi[Ҝ|pjSuJnPtȸqLлՎ2WzźYb;|7v]gBaךО$F endstream endobj 1903 0 obj << /Type /FontDescriptor /FontName /WTLZRN+NimbusRomNo9L-MediItal /Flags 4 /FontBBox [-200 -324 996 964] /Ascent 688 /CapHeight 688 /Descent -209 /ItalicAngle -15 /StemV 120 /XHeight 462 /CharSet (/a/b/c/e/j/l/m/n/o/t/u/underscore) /FontFile 1902 0 R >> endobj 1904 0 obj << /Length1 1630 /Length2 19477 /Length3 0 /Length 20327 /Filter /FlateDecode >> stream xڬct]&vv*mTXUl۶m۶JŶz޷O}~15qM\sͱ92PƉ gamdk-g^ h +g#'u:Yڈ:y@`#ڹ;X;TԩiiS ?4=-l?\Vv@׎@ 0D4$Tr ldea aa qRLmV>mmL,)͑/#h4t3-~,f6N{d 1r6'rS%d`/oT1dnOlGj_K[cJ/_# O,# o`vJ?38 LabӝTohgg/oY,V p,c;mfaϬH٘-7q _ gf&ahbkc01: c῏[or_w3;1Kw~Y4V?Ck +V;߶ۘB Gq 79o%W1:XYr虙N?$[1_3I((jo G5& @M_@y5trph_t wc[FGO?jcg$k?{ h {֘72-3ݩ;wdJL{|$خQƶ7-l6i}@pˊ7xOMJ_II{W~ycBIpwJQIpڏԥ8! "rh|td6''$ crVz jۊ31c:s%+ٗ0>ЊQUh| KQ謊^}׊*EOU 4"OT5*!ɡLxI5&.tEMHYNz]X͢[p!'yf34(5~#+&ƙwÏ ppK9\Hֹ:vZv4߆YzB\I\L}QLSZ.'6ndḄ.~ۍOOXp Mc$g~S`!M2l`P*?f(_(d>7cBk‰>KhMG`y<8p>uu`6 owEM{ [\w FOhH:e`T!+9ҪRZfQ*2XlՕIJk *&g;pu x[^:/[vA!C;AaI`Dd3h'cڂ򜆆P0Oi*Y~aL\k#?iZoH7/(|A84\B= #"y^A Q."/ ʼxa-_|[IYMϿ ;*#~i0~L8TrVedW⭇?pcfDhW<75}}NLAܣd !t[UcS!by`A JaNJ>GH/ho(0~xaJ|9[=(ዂw?lDK޹Cۆ댃%̮э%}]8e<Oॸi =tZAWrns÷CRA#;W\a tw+3r,O[>R MZ,/M"X%Q&]#CkTIP94&rAwHIQw3Rh <L~LNfǎ&ȴeP9lގr{\hJB;_UYdIpY]XHث"\#c?F՟Z,羉>@OS_9MHFEi zF|wjȫ5^O%axģ# PKLsb$ Ra)ת!IO4܌@Uکyy' ɥ)+NЬ]-j*$Uolᚍ9G"mʔP,TIy)"F ,]$ =HdP 5[t5]EOSZ?Id{񓔽(C8"!ʟ#rv[t]w|q/P[D#$٨[CVv2Y5#L 3k"|4L]ؒ_gs,Ǹf]7vc{!ڪ?84rF\ F ف\ .u1%tTzg,5ԧb qTa(|d@h74yh8{HgnIU7o&x|9hR˼%#d-ul )Wf܅קGϺsƇn-WqBZN/5uB"[]3=VQZF_`>',uDr՘7c!hq 0Uw]M> @6)@w?dW}X+7Fl^AdR$2 Dʚ-߽j->]T>w ̲mݪ{SCB{ S@H];4?0HɶrjiR2VaɥaR}kA*^߭jM@KY%>e聇Ғ[5ŵ}5x8 mV=M7y'(5,qPU{y(TCpLS͡ΰ(qDINnzzwCZY|򽙧[_dsA(:csIydU'#w! KDMȲ_ K#.dV:ͻL<(--t˯%$_CaWyQ>Xpdi|_ѓՇ(72)4s<}2"yw/Q?u5Ռ_da׉0v>MzF[KG}s\^G4%5Yns+Ӯsu$W=5Hщ ZZ(Oq*\,<mh߹6Uӗmg/`Z5o<'Y7 ɯnUK YHxbQC@wN;(Eh{hs,C̱oZ;W(QhXW!'mx`r{g9dA=$5F3 ̍\FsGOm3K/|V" : OA%$8rW˜ ӆ9MOcf95;04P|[0Kx/'8RԏVw55+Zˤtr#8)ͱI>IfTA2%m3B7=cp恬X}"7& -~jg ("pD([ fG?9>ѽw!x'ʣXAކxYZޓz&- @Q {0xv0ֆ%|qQ83$&`4$U`wa*Fr͚גH"?[{twi R"4f L41&gzw:n4t 7$k9Z$&10 bAH'. v^c#Y0;x-}vO]]7B+34%'s[L{{/9jD䅱 NOjfZB\ݖ~>'ޭE;kTJnꌾ)KUIv[h?*Ig'~ތx-m$T;jTs*-0?8EAb b{^SEНHgH\˳`@0K'!^H_6\ITi~qI1N"y"8q_< hrD ÔhA=`__ + ̛R'pt S@;:z(oi b*MD1oV,Š s 3I4e7ѿOSMgPcOux5aO8y !$VEc/2EDzX&; ~VHR -jC G/5!BBb/8!dElebHZԻ'*V]Vj$6Kʼn.} {Cvw&Pc~ G% k\OmuoV͠i F^)~7e fvu !1pϜ졿XlSyDmrT1ND'yրa>ZYVqqsF.*Rgj/Zt$:w|"s@,Qb`9@IYK? dO|fMT gb$ShY)rb'b;Ԫ'D\܍d4v*rL_ {uRXzd3;9*:PK<$0 kSK2|I@_XVJ6©L+Jsg9! EM)nQE 'SXE-Lvߚߙ~T7M:ĔQ}ƺN9Oc&f#g$|^Y?QQ:%+6k1c j`MyLtcxCL+B͕ׄ $ft ( 73xQ؟(X#pq@c&\sYӾ`?0m1w³_Cj$w7c ɢSW@x XUFMp5>8:sLsD|~PՈ0.9QԨW$5mQ! ??ġ' ~IvΣө~~,L~E(~19 ^b، _FOgÀ9nb=-r=eR;pekG7Ĵqdؠr%cVdQo8?ݞS4]j>ĭYΆ?,znG[26 m=RixPV7"!?&s3SdR`OXw":բשdi_W]T4+] Z\_ɕr7*kP^LdH-.!DkCՁS2)F]AY: )}90'LVDpWA2L'޶cXmc8ѴfӲA:d X|dIHZn=ZDlH#  oAlHK=17dCN(t]Q `+' 'InuLMXѷ흢'9y-H1<Ǧ[(%Ԏ\TfKl#C A_~=pChϰ-886g[1F"vBi~+jM_YMi4~!DC+2AC 1,?y2?̚4kkrDYg:UKK|UXq:=jJdGBxU$a5<50&KU868B+e%Xh^msXj<",]N*)-[(f͐}7"7:+\n.!ď}q%9е/&%#LkI9oҭ:Ì@]wi (Z=u^q\I`59퓹X4ͷO*8ҽoT沽](dqiIqnVFSF%dɉC $GB-}+$Kd/<Ɋ1-{@Ƶx l1Fy ANnZAȤ0dlȾک-izݱvvR6o!rdz| ԟ!Y^Ky 6Q@B`6㴵4XH[2 5i@V}#Ľ7PE펶iT;i\ϑ㳶'i& S0OT|^3 >*J56rM)Oc%;Doܞ$|{1{gddT;Zwȧ[< o}s7rSEՇ6]r)Frx,Yh~"ʳ{/Ekd 3)4<=A @7{pR-Q|Vk/K4 E :dg~D|D׺@n,b´ b"XԊdk1?MM<_܂65IuTvfnؤ=dR6_,#-~F*[H[Nk%t^ 4UZlQnOW %ew)Cw;¦{+HJ4dG/5DM` ϖo!Q*EnLsl5u F[D*zG9"XepȶU:uh$z nOkṎ)|ran:3&EbME?Ulx0fV#b7Jr+ߘSc\$i Z`?XBi/?TM%j ei@i%ո[o:W['#y mn wN7D%1(&6g=pԂnSG6Tu9J[D)S k!7(7wN+ѫa'P[ oCmwJ {x`NM$Q(`U5GQ5> ~j#0cet )'YH-b& X2Vߔ)+{=_b¨] ̓ 6=[uDW岭ONn 8c20-e3 }4@p0#_GS>N:&VzTUNۏ^Tߙib%=N׵Ŀ] ɧw1.{8( {HWE5o$ۆ9_ LɉA7oT#$#f nS|Z*!yBJnĠ20'S_>pJ e/ɣ*^ڞEvK+ |-+c#acZ>a%iᑰ7huQ\8+Yd6~ -_헲[ 珳;b3&Լ 3߷ C3BƉ3'qjҙJrà j4? ۆ7̿`+%`;ɽfJ,")=_'_pc%J6B=4F=BV u<nh8mCu ,\++ n}ɓy*+ jб;"LTkjj߄S4HBhHFn7 ӍKB}Q{(1~[1$M>fѧV0#ZfKT1ZAݍP.l> KWBlQAgj+)>]AyaUvu\nLw0EAy 2t'(5ߑр1VJ#x;J,ڃ>U(eCY~o[\|{d${roBZ3,P3p. S >amksɠJqMetc(݅vr(OOl'Qo(,&k@2`6O)<}oFyR{na xD`Z}⮓8E܇롑t1).,y%Jsߋ O.q&dr\ H.2iܤߺ̇ / 45)'knnj1bD"N<O#֓,5f tHR~8եBiBlp̧<~_yO1 +7ENB1(;BwO՗բ/W{WB&X 辸dیǢ;LhCoL42 CA2WȠ(}#D^N(>s [>RړE,{5Zv:tu1ԭuyK6s`9 EQ]@0r*zϔOwMF]K[ ۄsw  %Z) `/"(ig)c$QʘzU/w&gD;~DV2-JŜY|gP7f䴪7ĵU]y5Hɣ9{zKݓ ^ *(cWWsԹkחL&$vD3>?44 տ&U9Mr:M0At5`;kQ< O>/#2 =ݡ.ȝ_citN%gPM#ļhqDmәϛ.4uZYA'ޤu=v.\j08P󾜡݈Jd\(;2ً{W fd9S7e,$PWT6YRu$^~xڻ䯡 vJ%r KQ&A#|:zJ@yk_ޘ獧=fA <, X,?Q\$ؒ--j|J 4[H,jᖽY,񎁲tؖh"wrͻУv/Gq~ÐC+#, g 3U YI=@.-|ɭ BsigM):lLRԊt<]WH2K!znu[0[wF6EHLtaJQ"&~%cB8 k?`&?>({=w;oL760ag7mY}}[؅ŷ)q0cHn5'K!*7Z*&ܱïGMEY&|Af!A8<)8-Tf PqQv+aN $&ʹM!πW _SXڶ/i# {@IuSz4Oƒʓy (U8ӅT}&׾񅣘U#L-5W%I\؇x #UGV0)# h@Nd^ PCv7Iʰ0Lɲ~6CK74IU-\5hH:|p*ITYmDvwWъآMRx˟I$z"j|t~BB3(>24pôYoQ hv_ g4u>*s1a M5k{X LEoe׺\")Mж{zK$0s*s {-ƑP\@W=iMC%;סas+Vq,uoFWB)±9^{s{v`5@tebY4N U ,Z^ qp>NDB( rshᇶ?N 1ͻ6CtVs:fQo!C?+,5~_ϒR}+wH~ bt '?cz7QHN7L2_Qx!\ ܧYvg(3gcWL%w]@U[,`=uw`ԲHzӡiۃ\|6$* _%>X~D D1¾+DoJ!Go$au|4ۼ^HEw wӶ&@PORiU(4X| HnFFk3'?VJzi Ti9q_q>-Uk.V,tok}쏁!F4m)(6UE"(_fb7lbTnbzPL_azIFnp\N㪔/S$;0Oy\ D-RG0>8Fݼ=]%e؛@ }K)wL4Q _"ocKst>Ahjd1iK &WorځTRE^,yխ|^~;Uv`s .`s8ڈo5<";jnLʗ}T! A"ÛOuSX g5~fh[L LbgT _U7>FڑE-i1SWf(.#D/ ?LLUm__Fʢ>%^U6dQ镘Z}CҸPOEiߠuէMˡX!z|΍,Xb?%]g~~+\hzH|Si]G.cgHa*yQ[||͚f_Z$^PM%\Ce# LEu>]{a9`wRrn_v6>4n{aȂi,)xW$}!`}PC& z0Ͱ(gN:kEXZep̎Ɗ8Xgv :$qo_›gښdSꃱ;yOgk:X;ܼd׶UaF()h~!9R؟-˘].)4+pMnPZ 'eʝ{n٣;mk1Y#E>K6F٩F/?GSh7l^šo&m++ÁܫJdA K$ճ; pbSfTݽ|anE}0J'X(?)]khv@NAHъ]'$ VrZ#X(]y CQ65I S$Bw|ЪL~Φe|XV`Rjx[)ZTTkY< cM&_,@i[e^Ml4=[Aʳ*~ f!F56OWCE[H`ۑ雰Bb J;L%֤Ix%Br;n oMBZw%y(Z]^v+w'X׿VV|QnnҐ[;#nmELAFK/dΊȏl R΂?;706#0xt'.Б#G] :rE00 XF\ /NR{D9 *fAREYp<^rZ%#d 翗[ ki51ڜ!㴾XZbh s}{w=g=C R:eU3}P5q5[5qxb sZN\hJ_\+"Wm;:t)vT(4<[qhכf[ D_j%G,ֻ@·(?ߎyaGCCÆ-eԟ'QQ[&tE%zVr!kRwxQLY[!A37Gnd fo{v na da8affG0z)>CQZ{Rq2fjt&ʴ ->C!P 6d-zOnl ~s"t]4 9}_k?p]y)'ք5{}r^Tl~S#FXO7%2Glȁ8BAԝ=? iĢ:3;-,ާf"UBs ;#DgܾS|BʬxOHkyR6 R`4x_s+oα lRW\:>gYhJau/!5 h">V -^Y˦o&R}6H;VVĒwĊCF8 ޮ,xhO!srlz1I&ta(WiU*]MR`` ah;['e^IVȞZMcM5=/  ўm6vIk"df,M+6S'OOGh*Xי0x5_հ&a? i}jKms󚲉 QFتT=o(~ "MH2$<,:zLԻDx=.;&¤u2XDžd/xƸ1;%!l M_VmcY9guk|tePSnrhi]A&Z)CL/zd|rÚy#ե-@6")pn%D *~(nЀcaJ9GcRܻWS {u@IҬ UbūƋV5*O.D1 'h}N[&@1g*ҕ{U&)~jY0j~ ]1aꦹCk Mft[ߟ$Xn%ώ9%y'u,Y[\9_ u%M,<;N{b%{ؘM_ahqrߪ 8s*jD/c sA,'&w X!0ǃZ;~xe˸}c1Ģkm W{8KN]h'pN}\:xmؔ,!Pƈ,.?̃&lj3u(6O OlpTf ĭ3B-!~pSy>^S&~l]U}6P&S$ ̾_)7Kŵx5ϫĦ7) 5thj <lQNʶvL{Ze% **g̢ JjS/#Fb^8hu?DD^ΆYA^pvܕ=>gp,S@9Gі!\TX>T*,ƞS7,C7F"4˻%N̾M+uwQ5;s" es:n9>kGSCg;jvy1ЄWی!i^ ? e>SD0YU{M,; > endobj 1906 0 obj << /Length1 1647 /Length2 16403 /Length3 0 /Length 17262 /Filter /FlateDecode >> stream xڬcxem.tlt'۶5c۶mul;c۶N[k}s}֏9T=uWsWs 2"eZAc[C-#@QZΖSV h,d`ұ’ ; mmD \u1@h`b0rrr’mM͜JT4%g ?5_6 5 P8&V@OI9q*@htJB cnqRLlV^lmI͑ K`p݌vhv@ksGǯk# l6FV%7W@v_;t_` NFvN/ "bߎ_jNc[#R Kd`np906w2pf`0mL+ W-{;;+YkheB˷ ,?"icb `d?u.@?5C;hK/g@2?B?r;G[-le%g`U3Ac`5?17X[nu࿣ A/hYX-6w3w+;L _rUc өYU@oʀ^DLBHR0mY*T퀀.kk@ ٺoFڂSģk=\X2nL$'w}vg8WOwg4[:g&?ʎ)mTdžeFˡ;3a^@(^[X-IQ^=^jF}R =%sƙۍAY *~&򃐳b/z¯E_3ф5ҽ E6G G^*(VAd/gBJ&|'u Q7of>SJ]hu$+A[E o7:rVf.sx~&+S.ކA^h{ɔaV4`b6L/Ω@˔MŎ3 WDih#cS8Y䋡Ղe$s_w>.|Zn#CDI u5{PCl^p0ԥNz%Z[ILx 6AcM9ꅦ#λ^ )ah;E:1[V@v{lk2!ȶ3[fB u#nZYCKw(Uf>AB= g~b{C.Z6Ƞz%*7P'!Fu~h Cs]{m>8RyOBKJ%M)8jgFi+>_75g_g'gtoώy<B&UXt}BX<eb܈'$g ӎo$>IJ*{vzҨܡF Fs$ PŨn^/d~Rj?@(,Ϻz\ NΥO"xM<2ܠm'Jg 0< VYPDY!,E)"Vz1R>Cr~Ƌ<8q 4hFr>tT̫8 潚GNj&:ІBon&QBa Fw". ZI@'m*aXwlg?ԄƬU'DbvQ"Mf0+;wj}13? y57uv0:005`N Ҙ.),ZK@5aنZJL'gPޜC"my2sCQV*CFP?(U26VDjDYS+u26g#&VgN =@-62`*93OUihwr"X=?\ׯobl,ب˥P>4d!.s⬊]X9o"bskgmg6P\/Σo#f'$}CkrŔ$`%^Q q8 p['ځ9M-H=QƗUGwU$!AT<g_\R#ƥ5'>x:dlގ7qĉ<,^w֊< B(ia TA64w?K5?_{]wU[cU`_&a!b^bW[ǩ) A`y EIT=nO[ 蔒FE#!Huvh;q4zJ'V66{'%j_)ɋyb!Da>3HB4y$|H]6͞k`7=~Xut֔%;sGne৵Ж*(b.Jv/bL&)]kO应4&9){ҏ#hV&nS U?6cs^0ݓ8P_ EC˽YhFunq҂*/a 5%-\;KKKɸb ,~Z,;zOtWi&7%\M Ud@hPВNf ·wu7ɲ&ʬBU1T~!V.X{T)a'X˜e/'AkDvr ~J dA8ξ/YBtֈ폋ϸ-MJzEGJi'lEzƸ Mc2L?.RދBܱco7 h.ׄaZp(.E~ ǐና__yS!["{%g8 dDDy.:[kAEޫ+ƿ$|Ÿ:N7?'i<rB:L fswժ`tt]蓿0KP$LԱO~z`FH\^/GQ+ZUF8,"0"A"2S 7RW4P,vvo|&67lrCFO܃Z<:6L`#MZ`)Tejؑ cm?lO24X+Yvh1J7 !Et7^=9'&'k`[L~\_65kuZ_)Uv-&Rifb݀[E4X6﵅ -(Ӱp,1Dg^G]\W"1Vr"*U@"η{*zrJM~uq ߡOP(uzhݎ0e?iazWwmZuInc,;㳘Y*JJZ`6 ;咺JE8']<^k!~1b.hǕ?j^.2oAwv"c ˖͉Z;F:AI(7#(Ƶ2ssFS-rg_+Xq25MD4DieΔ’>S)Z,m!0?ɇH>;{O8'6T|`_z\tt  cD=֢<&o7T'xnYxQ.]QPh- xk v}ĖF1]eI% Ж (&hg(к>,J&uTk>h4t +![TS5[n?t)d\$]{x墯uߎg3]#u #y v]T,3QұD-m:k5gehT =N^}a$B~yi|hJ1>R+:G6>ט<߭9yT"t4#]LjVp@r]oC2M/Kz؏5sPD:+T@9*??Uԉ8gj>*NbS) qn0S[sHdnXDygl ryHTn5eVt>h]=.Keq Xf%X+T~GyN/I@b.U+zwWE/YsBxM% nڏVTI7Of[11G,gjj+& E)*l%}xEﻻgD9 ?k+-/}݄jfB9)lb-ENLb XQTp*rIJ7*k[-E_vђ[<2%gwShuHhqf7pv` joCPC^M GOFUK5y(8!UVw>8*Do{.0W}#ޡǠQV42Mn^>\D7ʲsǖ-β[ΉKG7,h#dɝM8t)eӳXqEJ٫y)YXY fֶDCRi& 121`Q:J$Z2{ URXs@cPttv&ƈFPQ ;NGN~O ޠJr]粘]n;&fE+%R?y,z\?6(1q)e.r]}H.1gDߪw+B١Cۥ!f` )އSue aL~+ mDn*`KRTc76E.TM1ij6ȜүMh+uqQ|Qwpf,Ʊ#3?W\;V-@-ws"yQްN19s]CUM=G։ ‰ֽJ/YkF8gQWDfli"3' o"h8CJ2Q+lj6fG$p{@mE3.ewR͗ZyQ'_VF$KbR,i~fHQ AѦ'ZߺM%^st v2d y1>ƨLa- Q޴B jQ!DHLw` 4ˋ%J ~S$zC?aQɤ"5,ƿXCM=Geܽ"B2[n,)^Oc_#: _ܙ-5ΉzkUXu>lSx/]r v5D>'oi ,-hv 5\ IZ谈BC#ZsUKߡOIjnEQltnv1\,"|PF b"%Ao'BnкYϓT(k$v趯.v?pm'x` g3XOo)xk2J̇bJ]drtC`ʨB{Դ?3+]IkEj\6us$ EES1 YEeR2w ¡kj$7iwQ,`fƘodZLi&Y݂OPh!}i "'Og{~XH8%.*t lъ1͹ZjFnD} 6*Zߔ7& >gPBU^&vlA|Ch Kruty!GEAp_+[՘Ғr˹@ F錮װ)$KJy{X,QNY-M*i*(%+iDa+M8!Ѧ#+,%MG3z`ZqJAq>_!?4],x[oWHE:ץyBvC$(lδ&Yc,)s~y}C0b&Ne1x/> CUj]?w>- y ?blP<Q{|vI/Y<x!pf%=[tUDZK5$H{3c-q|˂WPydX2#Lcf@y@`IdpbMfB,9}"C>1XoLv'婸vOp," mѡuq+4Tvnj\4;R< A: 3Os9]؎w==O>[LO);-̤?F2|lm"AmS,k!푏*z]jO?3eP^ʠVC- \ &Tĥp'RKbC#YzxҺpnu\*mPڟHdͨ˺|CnB ͵WsDpE?*)T"a['V"rŎ{[n)ٮlYsE˺WyJ.^|JWI$X;,mP`k>|8rT͊9VvFUB#Hr1U_R*+'ۧx&xLoŵA$u KC`rk/3̕x2țl -a,:I )IscGʝ%YrF!=i"4yX r;_GKk(SV8O(s$i!qK܎U%g3JKtѥb[ۭ.{MrG}Ny )rt"Gn0G6};g9h1:'v_y<;9r60m掑Zr խBsnT@P#ifi@}*"uh`B>CH|7\?ny2qʎ $.Exo2gzFyg}*9K6 *pkfvAQt s@T}QSퟆ6jXԒS8hґ@hZE`1}w+{ PHha߆ w )ٳknwȽ3OzK#%1bѼ jW)y*O%vyFZj!.:,41NTHS ~`˛Mq\gmq)>`;],\ 09)nx3']~bcȍuxѶ?@w0y@Ēa21"T.)3{& %vooY Ant " OYlԘ5 P"H(9[˼pfx8sf]feIM 7;{aIm돚\⻔|]{͊j%dHh*TZ QRf-jށ4Emj7V|Iͪ؇y0gy؟&N@| 8o)NH![-&%Ԝ)X2֪e5d 8#Uۥ:tЍ }y az_,ki5-MU4qmEOil!3,8e~duAc+>ړbS+ vzxpl/Oݑd=XB>x}pRQ,7Ip:[}+St`Y=|N=4Mf(i֢^gebU<<[y>׳UcK&St34Kv V\kĖENj|Qqm~cʃlzrˋ!/;zZpmZK{ě4q?N}ˤӋ H3oB T@#x7^Z |Zʝe\T_GAg[TC_@I|2)rx̣Sq-n!CKOZChُ'L’ݚ2x}ql]ky=RMz$1nDlizFOhncO 2G0iBUɆ䦥v*H糱O6-D7ali&!>NFt7{^`Hf`w7C-?wЬq#ڙw/\kϝӂP 2?hQT8vwӊ޽(bץ@nG_*3h٤ Q Fzf)krI9rG*"Q fm"Ag OQҰh'.[ ڰl<_zZŌB~T"y7flM]rZlkSpcΝ@]lȉE i3Ŀ<#< Y:ТZsP;BѝeCg/~rd @2(# "i޹`6 eX}|:<(a[ I%tEy)A w{ =Y[MX¦hPRus$-_MIQéFV1 j{_unV uMXR[GD;Omޫ3gtwS|-B]DgA$Ϗ-?4 Hu-R|E=U@w"VJH}9 0}n8Y\Ǖm8 2R)ȝ){g!iyַvY,i"vɅI xbZYaX#B).P{ι;L434?MٮQD[Qb<gW^W_1AX/E:I4Vsm$: it9PPjH ^F-zΗd.F{9 iGa]ң~(H._R֜IQvQ C6h+5<QK %9:+<yENN6 ጴ2zÜFJf)ugDtt#)pV`.`wΑ&;H"JNև _K_lg$T~{PǷ vuJRc7 hח3]M@FX=ed'pF:[YK!"D9_9VrkWIhbzK%!n"[bw E$'ώ l%r^Nb,h1"oDx VYD̼ٛhDPU 0/:"w/qټ~P@pߟf"-wN2UD>&$G: K`w֋MWW2,~_*B9ʿ#**wS'0Ұl3hϐ]}J5)(9`+-"a=x|%l?;E.^WZP ޳e+Ô 93KM(O7KQ2,nٮLuV)+·5ߺ47fX2WK3G@}MϰaC;"2{hc*yy΍:\W᪹ÇB 锦'ʨRڡH!ņVR(ZeE9>&8!<+or߳Y=}]:.(,Hu$JѽTkk_$|\׆= ?i-wD= ~ICaky2,Lyno+ `̠'ŠI*RZjFKn݄\okV"ض5tK eiŮ2F2 Qk{z>!OM܎#&.=Ԁ@Dl2A9 ۴c!j cYGaS.W&ePB YdɃϣu Ko~GІ>7Y9LuT!}SxVzVn3W{ĸVqr7^A=XͶ2;>17{CJyRA‘f^l@G&IU]_-b}d}-`hBVǕaB~ߤ#WA/ц4.Z .ڲf} =!:-'  S&ORf%?',j<;rĦܺ.p!L֑L xw_&k[=PQL s FMG8X{LoE|6y-YJ]!cf%9-/69ACG0[4ȵKH>\~۴.nչ.Yi =ߖP:A~NWyyJ\w}:9W+Ն)"Vb1':W spǼ2aOؓP Q tul+Y4zL O*B9VJH́V<޵`g7 6ȩN|WGS,wٴtׄ{8LZ3B30׫a"h2RF<\X dޟ4!QDaG>/$JDfQJ(!nҢ)fap%0{jUY֖23."*G3 =u'md֦ =ĵJ@n-1BVUkXqZØMr 6Ks1]tltO#맭 \nj$drN)7obHd?-5[|uZ 恋8}L ƦjJc dYq/Rx 5=V}P=qf5TNқ$4%7qVX AtʶaJ*Mrn7@A{e8Y8x6\S!dJKZ[яΌG(Ze]q)ptM="mWGǡp>y@8  n}RUb.NNY1BCYT$pZ$'^kXT/$@&,fAZn~rFyN)rB@#T?g|Z͝ؤdIjײHE9>$j%xaEk˕Aűklڶ9 i3Z ?"c?C\P/~14u.ϑTZUYA\apSj ` 0ŋ!;Tf 5Yg|NSt!>E#ϧwCK#"͋E*h*)C*,ݴ`W_Mn_4֥Dd:}h,2# 1 Y<$:DbU;櫤 L4~#3`=Cڤ# kYk]rc'wQdyۙ /ߚk4 +U /i+SL!朓֬= &ɏ]Ok8lE6'Ϧ c_hX1 u* 'TXwjBa/o!%qT$R*kPD3IϺN2 3KB%aA? S€'~S_#ЉF$Gb :!w)$>Sc@y)&Uy5eS)_Pa.1nʪS`۾@W5e e uoZڳגjM'̴. ~V@nzPl$5gM[:k_Ս=gy 8Q}(DG4 !cUw 8da_)1.0Yg5B 9ѕ!ݾJ.89^hz_EP^y_>53a cv JPVOuUPB+dղ'["*>ã+r&=rT䕈wrc%po EUe`M |W炮G>W΀O:ꚹFS*j9&fs]f\[T-]5ÃVkf:1irjI?9w0!iďtf;Q2߬w+zazrKvK9pY%ۯI|ݳ3%ُJTdN?kt>-#H]wwc&ѻ$|,8#&ƘaċD  j9VA(izeO9/J~G'M|w;78_O} Arvnaˇީgm% 齜QxϨ/,a (|1I**}W<:c~H|^ xH&\-"R&,[y+N@Kp8EbHf)v[gT-[9dACVHKeQ*;^wEp)u6dT#UUsOX<6s"ژ,:;.6R`8_glCqkùP8wU%QFfZ|#7Sf\Vh˜i,hFl)9`O8|*2T>Xi%pD8 wT1r]ݻDk"BL@~c_R5>nxlY5Zoz˽{8U(%~kp7ˑ2n T)\wjI%nr6`b@|6(Z`k.A>}5-Rf_WلnS.a!#X#I4Q}7}lEᕵ߂[AH@ endstream endobj 1907 0 obj << /Type /FontDescriptor /FontName /DFHBIG+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 669 /CapHeight 669 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/a/asterisk/b/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/equal/f/fi/four/g/greater/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/quotedblleft/quotedblright/quoteleft/quoteright/r/s/seven/six/t/three/two/u/underscore/v/w/x/y/z) /FontFile 1906 0 R >> endobj 1880 0 obj << /Type /Encoding /Differences [2/fi/fl 33/exclam/quotedbl/numbersign/dollar/percent 39/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright 95/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright 147/quotedblleft/quotedblright/bullet/endash] >> endobj 186 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OUFMHC+NimbusMonL-Bold /FontDescriptor 1891 0 R /FirstChar 40 /LastChar 121 /Widths 1883 0 R /Encoding 1880 0 R >> endobj 187 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PYQRXV+NimbusMonL-Regu /FontDescriptor 1893 0 R /FirstChar 33 /LastChar 125 /Widths 1882 0 R /Encoding 1880 0 R >> endobj 185 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MVEJPC+NimbusMonL-ReguObli /FontDescriptor 1895 0 R /FirstChar 34 /LastChar 122 /Widths 1884 0 R /Encoding 1880 0 R >> endobj 123 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OGLCXV+NimbusSanL-Bold /FontDescriptor 1897 0 R /FirstChar 2 /LastChar 148 /Widths 1889 0 R /Encoding 1880 0 R >> endobj 124 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UHZORO+NimbusSanL-BoldItal /FontDescriptor 1899 0 R /FirstChar 46 /LastChar 116 /Widths 1888 0 R /Encoding 1880 0 R >> endobj 163 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UKVNVK+NimbusRomNo9L-Medi /FontDescriptor 1901 0 R /FirstChar 2 /LastChar 150 /Widths 1886 0 R /Encoding 1880 0 R >> endobj 361 0 obj << /Type /Font /Subtype /Type1 /BaseFont /WTLZRN+NimbusRomNo9L-MediItal /FontDescriptor 1903 0 R /FirstChar 95 /LastChar 117 /Widths 1881 0 R /Encoding 1880 0 R >> endobj 125 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DNGPQX+NimbusRomNo9L-Regu /FontDescriptor 1905 0 R /FirstChar 2 /LastChar 149 /Widths 1887 0 R /Encoding 1880 0 R >> endobj 183 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DFHBIG+NimbusRomNo9L-ReguItal /FontDescriptor 1907 0 R /FirstChar 2 /LastChar 148 /Widths 1885 0 R /Encoding 1880 0 R >> endobj 126 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [117 0 R 128 0 R 160 0 R 165 0 R 171 0 R 180 0 R] >> endobj 195 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [191 0 R 199 0 R 212 0 R 223 0 R 237 0 R 245 0 R] >> endobj 258 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [253 0 R 261 0 R 271 0 R 279 0 R 286 0 R 296 0 R] >> endobj 312 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [304 0 R 314 0 R 323 0 R 335 0 R 347 0 R 357 0 R] >> endobj 378 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [369 0 R 380 0 R 388 0 R 396 0 R 405 0 R 415 0 R] >> endobj 436 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [428 0 R 441 0 R 452 0 R 457 0 R 465 0 R 475 0 R] >> endobj 494 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [485 0 R 496 0 R 503 0 R 514 0 R 527 0 R 532 0 R] >> endobj 552 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [544 0 R 554 0 R 564 0 R 570 0 R 581 0 R 593 0 R] >> endobj 618 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [605 0 R 620 0 R 627 0 R 633 0 R 637 0 R 642 0 R] >> endobj 663 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [654 0 R 666 0 R 673 0 R 683 0 R 691 0 R 696 0 R] >> endobj 708 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [704 0 R 712 0 R 721 0 R 727 0 R 734 0 R 741 0 R] >> endobj 751 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [747 0 R 754 0 R 760 0 R 765 0 R 770 0 R 777 0 R] >> endobj 787 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [784 0 R 789 0 R 793 0 R 798 0 R 806 0 R 833 0 R] >> endobj 891 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [880 0 R 902 0 R 919 0 R 937 0 R 944 0 R 955 0 R] >> endobj 973 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [967 0 R 975 0 R 980 0 R 986 0 R 1017 0 R 1041 0 R] >> endobj 1063 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [1058 0 R 1066 0 R 1077 0 R 1087 0 R 1105 0 R 1117 0 R] >> endobj 1140 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [1133 0 R 1144 0 R 1156 0 R 1175 0 R 1192 0 R 1204 0 R] >> endobj 1229 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [1223 0 R 1233 0 R 1252 0 R 1267 0 R 1279 0 R 1291 0 R] >> endobj 1311 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1304 0 R 1324 0 R 1341 0 R 1356 0 R 1374 0 R 1388 0 R] >> endobj 1410 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1400 0 R 1412 0 R 1422 0 R 1434 0 R 1442 0 R 1449 0 R] >> endobj 1463 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1455 0 R 1465 0 R 1475 0 R 1484 0 R 1493 0 R 1503 0 R] >> endobj 1524 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1518 0 R 1529 0 R 1539 0 R 1549 0 R 1558 0 R 1567 0 R] >> endobj 1584 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1575 0 R 1586 0 R 1597 0 R 1609 0 R 1616 0 R 1628 0 R] >> endobj 1649 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1642 0 R 1651 0 R 1659 0 R 1669 0 R 1678 0 R 1689 0 R] >> endobj 1712 0 obj << /Type /Pages /Count 6 /Parent 1912 0 R /Kids [1705 0 R 1715 0 R 1719 0 R 1723 0 R 1727 0 R 1741 0 R] >> endobj 1759 0 obj << /Type /Pages /Count 6 /Parent 1912 0 R /Kids [1752 0 R 1761 0 R 1771 0 R 1780 0 R 1787 0 R 1797 0 R] >> endobj 1821 0 obj << /Type /Pages /Count 5 /Parent 1912 0 R /Kids [1813 0 R 1838 0 R 1863 0 R 1873 0 R 1877 0 R] >> endobj 1908 0 obj << /Type /Pages /Count 36 /Parent 1913 0 R /Kids [126 0 R 195 0 R 258 0 R 312 0 R 378 0 R 436 0 R] >> endobj 1909 0 obj << /Type /Pages /Count 36 /Parent 1913 0 R /Kids [494 0 R 552 0 R 618 0 R 663 0 R 708 0 R 751 0 R] >> endobj 1910 0 obj << /Type /Pages /Count 36 /Parent 1913 0 R /Kids [787 0 R 891 0 R 973 0 R 1063 0 R 1140 0 R 1229 0 R] >> endobj 1911 0 obj << /Type /Pages /Count 36 /Parent 1913 0 R /Kids [1311 0 R 1410 0 R 1463 0 R 1524 0 R 1584 0 R 1649 0 R] >> endobj 1912 0 obj << /Type /Pages /Count 17 /Parent 1913 0 R /Kids [1712 0 R 1759 0 R 1821 0 R] >> endobj 1913 0 obj << /Type /Pages /Count 161 /Kids [1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R] >> endobj 1914 0 obj << /Type /Outlines /First 6 0 R /Last 114 0 R /Count 6 >> endobj 114 0 obj << /Title 115 0 R /A 112 0 R /Parent 1914 0 R /Prev 54 0 R >> endobj 110 0 obj << /Title 111 0 R /A 108 0 R /Parent 54 0 R /Prev 106 0 R >> endobj 106 0 obj << /Title 107 0 R /A 104 0 R /Parent 54 0 R /Prev 102 0 R /Next 110 0 R >> endobj 102 0 obj << /Title 103 0 R /A 100 0 R /Parent 54 0 R /Prev 98 0 R /Next 106 0 R >> endobj 98 0 obj << /Title 99 0 R /A 96 0 R /Parent 54 0 R /Prev 94 0 R /Next 102 0 R >> endobj 94 0 obj << /Title 95 0 R /A 92 0 R /Parent 54 0 R /Prev 90 0 R /Next 98 0 R >> endobj 90 0 obj << /Title 91 0 R /A 88 0 R /Parent 54 0 R /Prev 86 0 R /Next 94 0 R >> endobj 86 0 obj << /Title 87 0 R /A 84 0 R /Parent 54 0 R /Prev 82 0 R /Next 90 0 R >> endobj 82 0 obj << /Title 83 0 R /A 80 0 R /Parent 54 0 R /Prev 78 0 R /Next 86 0 R >> endobj 78 0 obj << /Title 79 0 R /A 76 0 R /Parent 54 0 R /Prev 74 0 R /Next 82 0 R >> endobj 74 0 obj << /Title 75 0 R /A 72 0 R /Parent 54 0 R /Prev 70 0 R /Next 78 0 R >> endobj 70 0 obj << /Title 71 0 R /A 68 0 R /Parent 54 0 R /Prev 66 0 R /Next 74 0 R >> endobj 66 0 obj << /Title 67 0 R /A 64 0 R /Parent 54 0 R /Prev 62 0 R /Next 70 0 R >> endobj 62 0 obj << /Title 63 0 R /A 60 0 R /Parent 54 0 R /Prev 58 0 R /Next 66 0 R >> endobj 58 0 obj << /Title 59 0 R /A 56 0 R /Parent 54 0 R /Next 62 0 R >> endobj 54 0 obj << /Title 55 0 R /A 52 0 R /Parent 1914 0 R /Prev 50 0 R /Next 114 0 R /First 58 0 R /Last 110 0 R /Count -14 >> endobj 50 0 obj << /Title 51 0 R /A 48 0 R /Parent 1914 0 R /Prev 42 0 R /Next 54 0 R >> endobj 46 0 obj << /Title 47 0 R /A 44 0 R /Parent 42 0 R >> endobj 42 0 obj << /Title 43 0 R /A 40 0 R /Parent 1914 0 R /Prev 38 0 R /Next 50 0 R /First 46 0 R /Last 46 0 R /Count -1 >> endobj 38 0 obj << /Title 39 0 R /A 36 0 R /Parent 1914 0 R /Prev 6 0 R /Next 42 0 R >> endobj 34 0 obj << /Title 35 0 R /A 32 0 R /Parent 6 0 R /Prev 30 0 R >> endobj 30 0 obj << /Title 31 0 R /A 28 0 R /Parent 6 0 R /Prev 26 0 R /Next 34 0 R >> endobj 26 0 obj << /Title 27 0 R /A 24 0 R /Parent 6 0 R /Prev 22 0 R /Next 30 0 R >> endobj 22 0 obj << /Title 23 0 R /A 20 0 R /Parent 6 0 R /Prev 18 0 R /Next 26 0 R >> endobj 18 0 obj << /Title 19 0 R /A 16 0 R /Parent 6 0 R /Prev 14 0 R /Next 22 0 R >> endobj 14 0 obj << /Title 15 0 R /A 12 0 R /Parent 6 0 R /Prev 10 0 R /Next 18 0 R >> endobj 10 0 obj << /Title 11 0 R /A 8 0 R /Parent 6 0 R /Next 14 0 R >> endobj 6 0 obj << /Title 7 0 R /A 4 0 R /Parent 1914 0 R /Next 38 0 R /First 10 0 R /Last 34 0 R /Count -7 >> endobj 1915 0 obj << /Names [(--doc-TUIUG/advanced_view) 1073 0 R (--doc-TUIUG/custom_view) 992 0 R (--doc-TUIUG/factories_advanced_extra) 1593 0 R (--doc-TUIUG/factories_basic) 1404 0 R (--doc-TUIUG/factory_intro) 1308 0 R (--doc-TUIUG/front) 809 0 R] /Limits [(--doc-TUIUG/advanced_view) (--doc-TUIUG/front)] >> endobj 1916 0 obj << /Names [(--doc-TUIUG/glossary) 1841 0 R (--doc-TUIUG/handler) 1162 0 R (--doc-TUIUG/index) 796 0 R (--doc-TUIUG/intro) 810 0 R (--doc-TUIUG/predefined_traits) 1869 0 R (--doc-TUIUG/themes) 1265 0 R] /Limits [(--doc-TUIUG/glossary) (--doc-TUIUG/themes)] >> endobj 1917 0 obj << /Names [(--doc-TUIUG/tips) 1806 0 R (--doc-TUIUG/view) 889 0 R (--doc-index) 174 0 R (--doc-traits_user_manual/advanced) 478 0 R (--doc-traits_user_manual/custom) 408 0 R (--doc-traits_user_manual/deferring) 373 0 R] /Limits [(--doc-TUIUG/tips) (--doc-traits_user_manual/deferring)] >> endobj 1918 0 obj << /Names [(--doc-traits_user_manual/defining) 202 0 R (--doc-traits_user_manual/front) 176 0 R (--doc-traits_user_manual/index) 175 0 R (--doc-traits_user_manual/intro) 177 0 R (--doc-traits_user_manual/notification) 282 0 R (--doc-tutorials/index) 640 0 R] /Limits [(--doc-traits_user_manual/defining) (--doc-tutorials/index)] >> endobj 1919 0 obj << /Names [(--doc-tutorials/traits_ui_scientific_app) 657 0 R (Controller) 1198 0 R (DelegatesTo) 376 0 R (Doc-Start) 122 0 R (Hfootnote.1) 188 0 R (Hfootnote.10) 662 0 R] /Limits [(--doc-tutorials/traits_ui_scientific_app) (Hfootnote.10)] >> endobj 1920 0 obj << /Names [(Hfootnote.11) 687 0 R (Hfootnote.12) 718 0 R (Hfootnote.13) 739 0 R (Hfootnote.14) 845 0 R (Hfootnote.15) 846 0 R (Hfootnote.16) 890 0 R] /Limits [(Hfootnote.11) (Hfootnote.16)] >> endobj 1921 0 obj << /Names [(Hfootnote.17) 911 0 R (Hfootnote.18) 965 0 R (Hfootnote.19) 1048 0 R (Hfootnote.2) 219 0 R (Hfootnote.20) 1110 0 R (Hfootnote.21) 1128 0 R] /Limits [(Hfootnote.17) (Hfootnote.21)] >> endobj 1922 0 obj << /Names [(Hfootnote.22) 1129 0 R (Hfootnote.23) 1148 0 R (Hfootnote.24) 1164 0 R (Hfootnote.25) 1188 0 R (Hfootnote.26) 1288 0 R (Hfootnote.27) 1289 0 R] /Limits [(Hfootnote.22) (Hfootnote.27)] >> endobj 1923 0 obj << /Names [(Hfootnote.28) 1348 0 R (Hfootnote.29) 1429 0 R (Hfootnote.3) 250 0 R (Hfootnote.30) 1430 0 R (Hfootnote.31) 1535 0 R (Hfootnote.32) 1846 0 R] /Limits [(Hfootnote.28) (Hfootnote.32)] >> endobj 1924 0 obj << /Names [(Hfootnote.4) 354 0 R (Hfootnote.5) 377 0 R (Hfootnote.6) 413 0 R (Hfootnote.7) 659 0 R (Hfootnote.8) 660 0 R (Hfootnote.9) 661 0 R] /Limits [(Hfootnote.4) (Hfootnote.9)] >> endobj 1925 0 obj << /Names [(Item.1) 204 0 R (Item.10) 1212 0 R (Item.11) 1213 0 R (Item.12) 1214 0 R (Item.13) 1215 0 R (Item.14) 1216 0 R] /Limits [(Item.1) (Item.14)] >> endobj 1926 0 obj << /Names [(Item.15) 1241 0 R (Item.16) 1242 0 R (Item.17) 1244 0 R (Item.18) 1245 0 R (Item.19) 1256 0 R (Item.2) 205 0 R] /Limits [(Item.15) (Item.2)] >> endobj 1927 0 obj << /Names [(Item.20) 1257 0 R (Item.21) 1258 0 R (Item.22) 1259 0 R (Item.23) 1262 0 R (Item.24) 1263 0 R (Item.25) 1264 0 R] /Limits [(Item.20) (Item.25)] >> endobj 1928 0 obj << /Names [(Item.26) 1380 0 R (Item.27) 1381 0 R (Item.28) 1382 0 R (Item.29) 1384 0 R (Item.3) 206 0 R (Item.30) 1385 0 R] /Limits [(Item.26) (Item.30)] >> endobj 1929 0 obj << /Names [(Item.31) 1393 0 R (Item.32) 1394 0 R (Item.33) 1395 0 R (Item.34) 1506 0 R (Item.35) 1507 0 R (Item.36) 1508 0 R] /Limits [(Item.31) (Item.36)] >> endobj 1930 0 obj << /Names [(Item.37) 1509 0 R (Item.38) 1510 0 R (Item.39) 1511 0 R (Item.4) 508 0 R (Item.40) 1512 0 R (Item.41) 1513 0 R] /Limits [(Item.37) (Item.41)] >> endobj 1931 0 obj << /Names [(Item.42) 1514 0 R (Item.43) 1692 0 R (Item.44) 1693 0 R (Item.45) 1694 0 R (Item.46) 1695 0 R (Item.47) 1696 0 R] /Limits [(Item.42) (Item.47)] >> endobj 1932 0 obj << /Names [(Item.48) 1697 0 R (Item.49) 1698 0 R (Item.5) 509 0 R (Item.50) 1699 0 R (Item.51) 1765 0 R (Item.52) 1766 0 R] /Limits [(Item.48) (Item.52)] >> endobj 1933 0 obj << /Names [(Item.6) 884 0 R (Item.7) 885 0 R (Item.8) 886 0 R (Item.9) 1211 0 R (ModelView) 1197 0 R (PrototypedFrom) 385 0 R] /Limits [(Item.6) (PrototypedFrom)] >> endobj 1934 0 obj << /Names [(_anytrait_changed) 364 0 R (_name_changed) 352 0 R (_name_default) 489 0 R (a-node-type-with-children) 1734 0 R (a-node-type-without-children) 1732 0 R (accessing-metadata-attributes) 275 0 R] /Limits [(_anytrait_changed) (accessing-metadata-attributes)] >> endobj 1935 0 obj << /Names [(actions) 1049 0 R (adaptation) 549 0 R (add-class-trait) 624 0 R (add-trait) 614 0 R (add_trait) 524 0 R (adding-items) 1663 0 R] /Limits [(actions) (adding-items)] >> endobj 1936 0 obj << /Names [(advanced-topics) 479 0 R (advanced-trait-editors) 1332 0 R (advanced-view-concepts) 893 0 R (allowing-the-hierarchy-to-be-modified) 1749 0 R (arrayeditor) 1406 0 R (assigning-handlers-to-views) 1180 0 R] /Limits [(advanced-topics) (assigning-handlers-to-views)] >> endobj 1937 0 obj << /Names [(attribute-specific-handler-signatures) 350 0 R (attributes-of-group-by-category-table) 972 0 R (attributes-of-item-by-category-table) 941 0 R (attributes-of-view-by-category-table) 1070 0 R (backstage-introducing-the-uiinfo-object) 1163 0 R (basic-trait-editor-factories) 1331 0 R] /Limits [(attribute-specific-handler-signatures) (basic-trait-editor-factories)] >> endobj 1938 0 obj << /Names [(behavior-on-nodes) 1755 0 R (binding-a-singleton-handler-to-a-view) 1182 0 R (caching-a-property-value) 586 0 R (chapter*.1) 162 0 R (chapter.1) 5 0 R (chapter.2) 37 0 R] /Limits [(behavior-on-nodes) (chapter.2)] >> endobj 1939 0 obj << /Names [(chapter.3) 41 0 R (chapter.4) 49 0 R (chapter.5) 53 0 R (chapter.6) 113 0 R (clone-traits) 616 0 R (coloreditor) 1439 0 R] /Limits [(chapter.3) (coloreditor)] >> endobj 1940 0 obj << /Names [(command-button-aliases-table) 1047 0 R (command-buttons-the-buttons-attribute) 1029 0 R (configure-traits) 1121 0 R (constant-value) 447 0 R (content-of-a-group) 962 0 R (contents-of-a-view) 924 0 R] /Limits [(command-button-aliases-table) (contents-of-a-view)] >> endobj 1941 0 obj << /Names [(controller-class) 1199 0 R (controlling-adaptation) 575 0 R (controlling-the-interface-the-handler) 859 0 R (creating-a-default-view-within-a-handler) 1186 0 R (creating-an-adapter-from-scratch) 560 0 R (custom-command-buttons) 1064 0 R] /Limits [(controller-class) (custom-command-buttons)] >> endobj 1942 0 obj << /Names [(custom-trait-handlers) 470 0 R (custom-traits) 409 0 R (customizing-a-view) 892 0 R (declaring-a-class-as-an-adapter-externally) 567 0 R (decorator-semantics) 340 0 R (decorator-syntax) 330 0 R] /Limits [(custom-trait-handlers) (decorator-syntax)] >> endobj 1943 0 obj << /Names [(deferring-traits) 268 0 R (defining-a-default-view) 1082 0 R (defining-a-trait-property) 420 0 R (defining-a-trait-type) 412 0 R (defining-adapters) 551 0 R (defining-an-interface) 537 0 R] /Limits [(deferring-traits) (defining-an-interface)] >> endobj 1944 0 obj << /Names [(defining-multiple-views-within-the-model) 1091 0 R (defining-nodes) 1730 0 R (defining-operations-on-nodes) 1745 0 R (defining-the-layout) 1636 0 R (defining-traits-initialization-and-validation) 203 0 R (delegatesto) 374 0 R] /Limits [(defining-multiple-views-within-the-model) (delegatesto)] >> endobj 1945 0 obj << /Names [(disallow-object) 510 0 R (displaying-a-view) 927 0 R (drag-and-drop-editor-style-variations-table) 1602 0 R (dynamic-handler-special-cases) 319 0 R (dynamic-initialization) 482 0 R (dynamic-notification) 283 0 R] /Limits [(disallow-object) (dynamic-notification)] >> endobj 1946 0 obj << /Names [(edit-traits) 1123 0 R (editing-objects) 1713 0 R (editing-the-table) 1635 0 R (editor-factories-for-predefined-traits) 1870 0 R (enthought.traits.adapter.adapts) 562 0 R (enthought.traits.has_traits.implements) 541 0 R] /Limits [(edit-traits) (enthought.traits.has_traits.implements)] >> endobj 1947 0 obj << /Names [(enthought.traits.traits.Property) 585 0 R (enthought.traits.traits.Trait) 434 0 R (enumeditor) 1462 0 R (example-1-using-configure-traits) 905 0 R (example-10-traits-ui-without-themes) 1286 0 R (example-11-traits-ui-with-themese) 1294 0 R] /Limits [(enthought.traits.traits.Property) (example-11-traits-ui-with-themese)] >> endobj 1948 0 obj << /Names [(example-12-using-default-trait-editors) 1309 0 R (example-13-using-editor-styles-at-various-levels) 1396 0 R (example-14-demonstration-of-array-editors) 1409 0 R (example-15-enumeration-editor-with-mapped-values) 1470 0 R (example-16-instance-editor-with-instance-selection) 1523 0 R (example-17-code-editor-with-key-binding-editor) 1613 0 R] /Limits [(example-12-using-default-trait-editors) (example-17-code-editor-with-key-binding-editor)] >> endobj 1949 0 obj << /Names [(example-18-code-for-example-tree-editor) 1710 0 R (example-2-using-configure-traits-with-a-view-object) 910 0 R (example-3-using-configure-traits-with-a-view-and-a-group-object) 960 0 R (example-4-using-a-view-object-with-buttons) 1044 0 R (example-5-using-configure-traits-with-a-default-view-object) 1084 0 R (example-6-defining-multiple-view-objects-in-a-hastraits-class) 1093 0 R] /Limits [(example-18-code-for-example-tree-editor) (example-6-defining-multiple-view-objects-in-a-hastraits-class)] >> endobj 1950 0 obj << /Names [(example-7-using-a-multi-object-view-with-a-context) 1138 0 R (example-8-using-an-include-object) 1160 0 R (example-9-using-a-handler-that-reacts-to-trait-changes) 1190 0 R (example-custom-trait-handler) 472 0 R (example-of-a-dynamic-notification-handler) 292 0 R (examples-of-extended-name-notation-table) 310 0 R] /Limits [(example-7-using-a-multi-object-view-with-a-context) (examples-of-extended-name-notation-table)] >> endobj 1951 0 obj << /Names [(expanding-and-collapsing-nodes) 1757 0 R (extended_traitname_changed) 1227 0 R (extra-trait-editor-factories) 1312 0 R (figure.5.1) 907 0 R (figure.5.10) 1272 0 R (figure.5.11) 1283 0 R] /Limits [(expanding-and-collapsing-nodes) (figure.5.11)] >> endobj 1952 0 obj << /Names [(figure.5.12) 1327 0 R (figure.5.13) 1344 0 R (figure.5.14) 1345 0 R (figure.5.15) 1363 0 R (figure.5.16) 1364 0 R (figure.5.17) 1377 0 R] /Limits [(figure.5.12) (figure.5.17)] >> endobj 1953 0 obj << /Names [(figure.5.18) 1379 0 R (figure.5.19) 1391 0 R (figure.5.2) 923 0 R (figure.5.20) 1403 0 R (figure.5.21) 1408 0 R (figure.5.22) 1425 0 R] /Limits [(figure.5.18) (figure.5.22)] >> endobj 1954 0 obj << /Names [(figure.5.23) 1427 0 R (figure.5.24) 1437 0 R (figure.5.25) 1445 0 R (figure.5.26) 1446 0 R (figure.5.27) 1452 0 R (figure.5.28) 1458 0 R] /Limits [(figure.5.23) (figure.5.28)] >> endobj 1955 0 obj << /Names [(figure.5.29) 1461 0 R (figure.5.3) 970 0 R (figure.5.30) 1469 0 R (figure.5.31) 1479 0 R (figure.5.32) 1481 0 R (figure.5.33) 1487 0 R] /Limits [(figure.5.29) (figure.5.33)] >> endobj 1956 0 obj << /Names [(figure.5.34) 1489 0 R (figure.5.35) 1497 0 R (figure.5.36) 1521 0 R (figure.5.37) 1532 0 R (figure.5.38) 1542 0 R (figure.5.39) 1543 0 R] /Limits [(figure.5.34) (figure.5.39)] >> endobj 1957 0 obj << /Names [(figure.5.4) 1046 0 R (figure.5.40) 1544 0 R (figure.5.41) 1552 0 R (figure.5.42) 1562 0 R (figure.5.43) 1572 0 R (figure.5.44) 1578 0 R] /Limits [(figure.5.4) (figure.5.44)] >> endobj 1958 0 obj << /Names [(figure.5.45) 1580 0 R (figure.5.46) 1581 0 R (figure.5.47) 1589 0 R (figure.5.48) 1590 0 R (figure.5.49) 1592 0 R (figure.5.5) 1090 0 R] /Limits [(figure.5.45) (figure.5.5)] >> endobj 1959 0 obj << /Names [(figure.5.50) 1612 0 R (figure.5.51) 1631 0 R (figure.5.52) 1645 0 R (figure.5.53) 1702 0 R (figure.5.54) 1709 0 R (figure.5.55) 1776 0 R] /Limits [(figure.5.50) (figure.5.55)] >> endobj 1960 0 obj << /Names [(figure.5.56) 1791 0 R (figure.5.57) 1793 0 R (figure.5.58) 1795 0 R (figure.5.59) 1801 0 R (figure.5.6) 1147 0 R (figure.5.60) 1803 0 R] /Limits [(figure.5.56) (figure.5.60)] >> endobj 1961 0 obj << /Names [(figure.5.61) 1805 0 R (figure.5.62) 1816 0 R (figure.5.7) 1236 0 R (figure.5.8) 1270 0 R (figure.5.9) 1271 0 R (fileeditor) 1472 0 R] /Limits [(figure.5.61) (fileeditor)] >> endobj 1962 0 obj << /Names [(filtering-and-searching) 1654 0 R (general-static-handler-signatures) 362 0 R (get) 422 0 R (glossary-of-terms) 899 0 R (group-attributes) 964 0 R (handler-argument-interpretation-table) 353 0 R] /Limits [(filtering-and-searching) (handler-argument-interpretation-table)] >> endobj 1963 0 obj << /Names [(handler-decorator) 328 0 R (handler-subclasses) 1195 0 R (hasprivatetraits) 520 0 R (hasstricttraits) 518 0 R (hastraits-subclasses) 512 0 R (implementing-an-interface) 539 0 R] /Limits [(handler-decorator) (implementing-an-interface)] >> endobj 1964 0 obj << /Names [(implementing-custom-window-commands) 1237 0 R (include-objects) 860 0 R (initialization-and-validation-revisited) 480 0 R (initializing-editors) 1346 0 R (interacting-with-items) 1656 0 R (interfaces) 535 0 R] /Limits [(implementing-custom-window-commands) (interfaces)] >> endobj 1965 0 obj << /Names [(internal-metadata-attributes) 265 0 R (internal-views) 1080 0 R (introduction-to-trait-editor-factories) 895 0 R (keyword-parameters) 386 0 R (linking-handler-and-view-at-edit-time) 1184 0 R (list-of-possibl-values) 256 0 R] /Limits [(internal-metadata-attributes) (list-of-possibl-values)] >> endobj 1966 0 obj << /Names [(listenable-keyword) 394 0 R (managing-items) 1634 0 R (mapped-traits) 449 0 R (matrix-of-traits-ui-windows-table) 1023 0 R (menus-and-menu-bars) 1037 0 R (modelview-class) 1201 0 R] /Limits [(listenable-keyword) (modelview-class)] >> endobj 1967 0 obj << /Names [(modifying-items) 1666 0 R (multi-object-views) 1131 0 R (notification-handler-signatures) 317 0 R (notification-with-deferring) 400 0 R (on_trait_change) 290 0 R (on_trait_event) 291 0 R] /Limits [(modifying-items) (on_trait_event)] >> endobj 1968 0 obj << /Names [(organizing-items) 1647 0 R (other-predefined-traits) 220 0 R (other-traittype-members) 424 0 R (other-user-interactions) 1638 0 R (other-view-attributes) 1062 0 R (overriding-default-values-in-a-subclass) 490 0 R] /Limits [(organizing-items) (overriding-default-values-in-a-subclass)] >> endobj 1969 0 obj << /Names [(overriding-getstate) 601 0 R (overriding-setstate) 610 0 R (overriding-standard-methods) 1209 0 R (page.1) 173 0 R (page.10) 263 0 R (page.100) 1235 0 R] /Limits [(overriding-getstate) (page.100)] >> endobj 1970 0 obj << /Names [(page.101) 1254 0 R (page.102) 1269 0 R (page.103) 1281 0 R (page.104) 1293 0 R (page.105) 1306 0 R (page.106) 1326 0 R] /Limits [(page.101) (page.106)] >> endobj 1971 0 obj << /Names [(page.107) 1343 0 R (page.108) 1358 0 R (page.109) 1376 0 R (page.11) 273 0 R (page.110) 1390 0 R (page.111) 1402 0 R] /Limits [(page.107) (page.111)] >> endobj 1972 0 obj << /Names [(page.112) 1414 0 R (page.113) 1424 0 R (page.114) 1436 0 R (page.115) 1444 0 R (page.116) 1451 0 R (page.117) 1457 0 R] /Limits [(page.112) (page.117)] >> endobj 1973 0 obj << /Names [(page.118) 1467 0 R (page.119) 1477 0 R (page.12) 281 0 R (page.120) 1486 0 R (page.121) 1495 0 R (page.122) 1505 0 R] /Limits [(page.118) (page.122)] >> endobj 1974 0 obj << /Names [(page.123) 1520 0 R (page.124) 1531 0 R (page.125) 1541 0 R (page.126) 1551 0 R (page.127) 1560 0 R (page.128) 1569 0 R] /Limits [(page.123) (page.128)] >> endobj 1975 0 obj << /Names [(page.129) 1577 0 R (page.13) 288 0 R (page.130) 1588 0 R (page.131) 1599 0 R (page.132) 1611 0 R (page.133) 1618 0 R] /Limits [(page.129) (page.133)] >> endobj 1976 0 obj << /Names [(page.134) 1630 0 R (page.135) 1644 0 R (page.136) 1653 0 R (page.137) 1661 0 R (page.138) 1671 0 R (page.139) 1680 0 R] /Limits [(page.134) (page.139)] >> endobj 1977 0 obj << /Names [(page.14) 298 0 R (page.140) 1691 0 R (page.141) 1707 0 R (page.142) 1717 0 R (page.143) 1721 0 R (page.144) 1725 0 R] /Limits [(page.14) (page.144)] >> endobj 1978 0 obj << /Names [(page.145) 1729 0 R (page.146) 1743 0 R (page.147) 1754 0 R (page.148) 1763 0 R (page.149) 1773 0 R (page.15) 306 0 R] /Limits [(page.145) (page.15)] >> endobj 1979 0 obj << /Names [(page.150) 1782 0 R (page.151) 1789 0 R (page.152) 1799 0 R (page.153) 1815 0 R (page.154) 1840 0 R (page.155) 1865 0 R] /Limits [(page.150) (page.155)] >> endobj 1980 0 obj << /Names [(page.156) 1875 0 R (page.157) 1879 0 R (page.16) 316 0 R (page.17) 325 0 R (page.18) 337 0 R (page.19) 349 0 R] /Limits [(page.156) (page.19)] >> endobj 1981 0 obj << /Names [(page.2) 182 0 R (page.20) 359 0 R (page.21) 371 0 R (page.22) 382 0 R (page.23) 390 0 R (page.24) 398 0 R] /Limits [(page.2) (page.24)] >> endobj 1982 0 obj << /Names [(page.25) 407 0 R (page.26) 417 0 R (page.27) 430 0 R (page.28) 443 0 R (page.29) 454 0 R (page.3) 193 0 R] /Limits [(page.25) (page.3)] >> endobj 1983 0 obj << /Names [(page.30) 459 0 R (page.31) 467 0 R (page.32) 477 0 R (page.33) 487 0 R (page.34) 498 0 R (page.35) 505 0 R] /Limits [(page.30) (page.35)] >> endobj 1984 0 obj << /Names [(page.36) 516 0 R (page.37) 529 0 R (page.38) 534 0 R (page.39) 546 0 R (page.4) 201 0 R (page.40) 556 0 R] /Limits [(page.36) (page.40)] >> endobj 1985 0 obj << /Names [(page.41) 566 0 R (page.42) 572 0 R (page.43) 583 0 R (page.44) 595 0 R (page.45) 607 0 R (page.46) 622 0 R] /Limits [(page.41) (page.46)] >> endobj 1986 0 obj << /Names [(page.47) 629 0 R (page.48) 635 0 R (page.49) 639 0 R (page.5) 214 0 R (page.50) 644 0 R (page.51) 656 0 R] /Limits [(page.47) (page.51)] >> endobj 1987 0 obj << /Names [(page.52) 668 0 R (page.53) 675 0 R (page.54) 685 0 R (page.55) 693 0 R (page.56) 698 0 R (page.57) 706 0 R] /Limits [(page.52) (page.57)] >> endobj 1988 0 obj << /Names [(page.58) 714 0 R (page.59) 723 0 R (page.6) 225 0 R (page.60) 729 0 R (page.61) 736 0 R (page.62) 743 0 R] /Limits [(page.58) (page.62)] >> endobj 1989 0 obj << /Names [(page.63) 749 0 R (page.64) 756 0 R (page.65) 762 0 R (page.66) 767 0 R (page.67) 772 0 R (page.68) 779 0 R] /Limits [(page.63) (page.68)] >> endobj 1990 0 obj << /Names [(page.69) 786 0 R (page.7) 239 0 R (page.70) 791 0 R (page.71) 795 0 R (page.72) 800 0 R (page.73) 808 0 R] /Limits [(page.69) (page.73)] >> endobj 1991 0 obj << /Names [(page.74) 835 0 R (page.75) 882 0 R (page.76) 904 0 R (page.77) 921 0 R (page.78) 939 0 R (page.79) 946 0 R] /Limits [(page.74) (page.79)] >> endobj 1992 0 obj << /Names [(page.8) 247 0 R (page.80) 957 0 R (page.81) 969 0 R (page.82) 977 0 R (page.83) 982 0 R (page.84) 988 0 R] /Limits [(page.8) (page.84)] >> endobj 1993 0 obj << /Names [(page.85) 1019 0 R (page.86) 1043 0 R (page.87) 1060 0 R (page.88) 1068 0 R (page.89) 1079 0 R (page.9) 255 0 R] /Limits [(page.85) (page.9)] >> endobj 1994 0 obj << /Names [(page.90) 1089 0 R (page.91) 1107 0 R (page.92) 1119 0 R (page.93) 1135 0 R (page.94) 1146 0 R (page.95) 1158 0 R] /Limits [(page.90) (page.95)] >> endobj 1995 0 obj << /Names [(page.96) 1177 0 R (page.97) 1194 0 R (page.98) 1206 0 R (page.99) 1225 0 R (page.i) 121 0 R (page.ii) 130 0 R] /Limits [(page.96) (page.ii)] >> endobj 1996 0 obj << /Names [(panels-and-subpanels) 1027 0 R (paragraph*.10) 257 0 R (paragraph*.100) 963 0 R (paragraph*.101) 971 0 R (paragraph*.102) 978 0 R (paragraph*.104) 991 0 R] /Limits [(panels-and-subpanels) (paragraph*.104)] >> endobj 1997 0 obj << /Names [(paragraph*.106) 1024 0 R (paragraph*.109) 1045 0 R (paragraph*.110) 1061 0 R (paragraph*.111) 1071 0 R (paragraph*.113) 1085 0 R (paragraph*.115) 1094 0 R] /Limits [(paragraph*.106) (paragraph*.115)] >> endobj 1998 0 obj << /Names [(paragraph*.120) 1139 0 R (paragraph*.121) 1161 0 R (paragraph*.128) 1218 0 R (paragraph*.130) 1228 0 R (paragraph*.132) 1239 0 R (paragraph*.133) 1243 0 R] /Limits [(paragraph*.120) (paragraph*.133)] >> endobj 1999 0 obj << /Names [(paragraph*.134) 1255 0 R (paragraph*.135) 1261 0 R (paragraph*.136) 1287 0 R (paragraph*.137) 1295 0 R (paragraph*.138) 1310 0 R (paragraph*.145) 1397 0 R] /Limits [(paragraph*.134) (paragraph*.145)] >> endobj 2000 0 obj << /Names [(paragraph*.147) 1415 0 R (paragraph*.157) 1471 0 R (paragraph*.16) 301 0 R (paragraph*.163) 1516 0 R (paragraph*.164) 1522 0 R (paragraph*.165) 1533 0 R] /Limits [(paragraph*.147) (paragraph*.165)] >> endobj 2001 0 obj << /Names [(paragraph*.17) 307 0 R (paragraph*.170) 1561 0 R (paragraph*.178) 1603 0 R (paragraph*.179) 1614 0 R (paragraph*.18) 309 0 R (paragraph*.182) 1648 0 R] /Limits [(paragraph*.17) (paragraph*.182)] >> endobj 2002 0 obj << /Names [(paragraph*.183) 1655 0 R (paragraph*.184) 1657 0 R (paragraph*.186) 1664 0 R (paragraph*.187) 1665 0 R (paragraph*.188) 1672 0 R (paragraph*.19) 311 0 R] /Limits [(paragraph*.183) (paragraph*.19)] >> endobj 2003 0 obj << /Names [(paragraph*.196) 1711 0 R (paragraph*.198) 1733 0 R (paragraph*.199) 1735 0 R (paragraph*.200) 1744 0 R (paragraph*.202) 1748 0 R (paragraph*.203) 1750 0 R] /Limits [(paragraph*.196) (paragraph*.203)] >> endobj 2004 0 obj << /Names [(paragraph*.204) 1756 0 R (paragraph*.205) 1758 0 R (paragraph*.206) 1764 0 R (paragraph*.23) 338 0 R (paragraph*.24) 341 0 R (paragraph*.27) 360 0 R] /Limits [(paragraph*.204) (paragraph*.27)] >> endobj 2005 0 obj << /Names [(paragraph*.3) 227 0 R (paragraph*.36) 446 0 R (paragraph*.37) 448 0 R (paragraph*.4) 229 0 R (paragraph*.46) 501 0 R (paragraph*.5) 231 0 R] /Limits [(paragraph*.3) (paragraph*.5)] >> endobj 2006 0 obj << /Names [(paragraph*.58) 559 0 R (paragraph*.59) 561 0 R (paragraph*.6) 233 0 R (paragraph*.60) 568 0 R (paragraph*.75) 671 0 R (paragraph*.76) 676 0 R] /Limits [(paragraph*.58) (paragraph*.76)] >> endobj 2007 0 obj << /Names [(paragraph*.8) 242 0 R (paragraph*.9) 249 0 R (paragraph*.93) 906 0 R (paragraph*.94) 922 0 R (paragraph*.96) 947 0 R (paragraph*.99) 961 0 R] /Limits [(paragraph*.8) (paragraph*.99)] >> endobj 2008 0 obj << /Names [(per-object-trait-attributes) 522 0 R (performance-considerations-of-traits) 630 0 R (persistence) 277 0 R (pickling-hastraits-objects) 597 0 R (predefined-defaults-for-simple-types-table) 226 0 R (predefined-traits) 215 0 R] /Limits [(per-object-trait-attributes) (predefined-traits)] >> endobj 2009 0 obj << /Names [(predefined-traits-beyond-simple-types-table) 241 0 R (predefined-traits-for-simple-types) 217 0 R (predefined-transient-traits) 599 0 R (prefix-keyword) 392 0 R (property-factory-function) 578 0 R (property-traits) 251 0 R] /Limits [(predefined-traits-beyond-simple-types-table) (property-traits)] >> endobj 2010 0 obj << /Names [(prototypedfrom) 383 0 R (range-editor-widgets-table) 1555 0 R (reacting-to-trait-changes) 1219 0 R (recognized-metadata-attributes) 267 0 R (reusing-trait-definitions) 207 0 R (section.1.1) 9 0 R] /Limits [(prototypedfrom) (section.1.1)] >> endobj 2011 0 obj << /Names [(section.1.2) 13 0 R (section.1.3) 17 0 R (section.1.4) 21 0 R (section.1.5) 25 0 R (section.1.6) 29 0 R (section.1.7) 33 0 R] /Limits [(section.1.2) (section.1.7)] >> endobj 2012 0 obj << /Names [(section.3.1) 45 0 R (section.5.1) 57 0 R (section.5.10) 93 0 R (section.5.11) 97 0 R (section.5.12) 101 0 R (section.5.13) 105 0 R] /Limits [(section.3.1) (section.5.13)] >> endobj 2013 0 obj << /Names [(section.5.14) 109 0 R (section.5.2) 61 0 R (section.5.3) 65 0 R (section.5.4) 69 0 R (section.5.5) 73 0 R (section.5.6) 77 0 R] /Limits [(section.5.14) (section.5.6)] >> endobj 2014 0 obj << /Names [(section.5.7) 81 0 R (section.5.8) 85 0 R (section.5.9) 89 0 R (semantics) 302 0 R (semantics-of-extended-name-notation-table) 308 0 R (separating-model-and-view-external-views) 1108 0 R] /Limits [(section.5.7) (separating-model-and-view-external-views)] >> endobj 2015 0 obj << /Names [(set) 423 0 R (seteditor) 1570 0 R (setting-the-label-of-a-tree-node) 1736 0 R (shortcut-menus-on-nodes) 1747 0 R (specially-named-notification-handlers) 342 0 R (specifying-an-alternate-trait-editor-factory) 1329 0 R] /Limits [(set) (specifying-an-alternate-trait-editor-factory)] >> endobj 2016 0 obj << /Names [(specifying-an-editor-style) 1359 0 R (specifying-columns) 1632 0 R (specifying-window-type-the-kind-attribute) 993 0 R (stand-alone-windows) 1020 0 R (static-notification) 326 0 R (structure-of-this-guide) 887 0 R] /Limits [(specifying-an-editor-style) (structure-of-this-guide)] >> endobj 2017 0 obj << /Names [(subclasses-of-group) 983 0 R (subclasses-of-group-table) 990 0 R (subclasses-of-item) 949 0 R (subclassing-adapter) 558 0 R (subparagraph*.47) 507 0 R (subparagraph*.48) 511 0 R] /Limits [(subclasses-of-group) (subparagraph*.48)] >> endobj 2018 0 obj << /Names [(subparagraph*.49) 517 0 R (subparagraph*.50) 519 0 R (subparagraph*.51) 521 0 R (subparagraph*.52) 523 0 R (subsection.1.2.1) 184 0 R (subsection.1.2.2) 194 0 R] /Limits [(subparagraph*.49) (subsection.1.2.2)] >> endobj 2019 0 obj << /Names [(subsection.1.3.1) 216 0 R (subsection.1.3.2) 264 0 R (subsection.1.4.1) 289 0 R (subsection.1.4.2) 327 0 R (subsection.1.4.3) 365 0 R (subsection.1.5.1) 375 0 R] /Limits [(subsection.1.3.1) (subsection.1.5.1)] >> endobj 2020 0 obj << /Names [(subsection.1.5.2) 384 0 R (subsection.1.5.3) 391 0 R (subsection.1.5.4) 401 0 R (subsection.1.6.1) 411 0 R (subsection.1.6.2) 433 0 R (subsection.1.6.3) 460 0 R] /Limits [(subsection.1.5.2) (subsection.1.6.3)] >> endobj 2021 0 obj << /Names [(subsection.1.6.4) 471 0 R (subsection.1.7.1) 481 0 R (subsection.1.7.2) 536 0 R (subsection.1.7.3) 550 0 R (subsection.1.7.4) 577 0 R (subsection.1.7.5) 596 0 R] /Limits [(subsection.1.6.4) (subsection.1.7.5)] >> endobj 2022 0 obj << /Names [(subsection.1.7.6) 613 0 R (subsection.1.7.7) 631 0 R (subsection.3.1.1) 669 0 R (subsection.3.1.2) 700 0 R (subsection.3.1.3) 715 0 R (subsection.3.1.4) 737 0 R] /Limits [(subsection.1.7.6) (subsection.3.1.4)] >> endobj 2023 0 obj << /Names [(subsection.3.1.5) 750 0 R (subsection.5.10.1) 1594 0 R (subsection.5.10.2) 1600 0 R (subsection.5.10.3) 1601 0 R (subsection.5.10.4) 1604 0 R (subsection.5.10.5) 1619 0 R] /Limits [(subsection.3.1.5) (subsection.5.10.5)] >> endobj 2024 0 obj << /Names [(subsection.5.10.6) 1676 0 R (subsection.5.10.7) 1708 0 R (subsection.5.11.1) 1774 0 R (subsection.5.11.10) 1800 0 R (subsection.5.11.11) 1802 0 R (subsection.5.11.12) 1804 0 R] /Limits [(subsection.5.10.6) (subsection.5.11.12)] >> endobj 2025 0 obj << /Names [(subsection.5.11.2) 1775 0 R (subsection.5.11.3) 1777 0 R (subsection.5.11.4) 1783 0 R (subsection.5.11.5) 1784 0 R (subsection.5.11.6) 1785 0 R (subsection.5.11.7) 1790 0 R] /Limits [(subsection.5.11.2) (subsection.5.11.7)] >> endobj 2026 0 obj << /Names [(subsection.5.11.8) 1792 0 R (subsection.5.11.9) 1794 0 R (subsection.5.12.1) 1817 0 R (subsection.5.2.1) 837 0 R (subsection.5.2.2) 883 0 R (subsection.5.2.3) 888 0 R] /Limits [(subsection.5.11.8) (subsection.5.2.3)] >> endobj 2027 0 obj << /Names [(subsection.5.3.1) 909 0 R (subsection.5.3.2) 925 0 R (subsection.5.4.1) 994 0 R (subsection.5.4.2) 1030 0 R (subsection.5.4.3) 1069 0 R (subsection.5.5.1) 1081 0 R] /Limits [(subsection.5.3.1) (subsection.5.5.1)] >> endobj 2028 0 obj << /Names [(subsection.5.5.2) 1109 0 R (subsection.5.5.3) 1120 0 R (subsection.5.5.4) 1136 0 R (subsection.5.5.5) 1159 0 R (subsection.5.6.1) 1178 0 R (subsection.5.6.2) 1181 0 R] /Limits [(subsection.5.5.2) (subsection.5.6.2)] >> endobj 2029 0 obj << /Names [(subsection.5.6.3) 1196 0 R (subsection.5.6.4) 1208 0 R (subsection.5.7.1) 1282 0 R (subsection.5.7.2) 1284 0 R (subsection.5.7.3) 1285 0 R (subsection.5.8.1) 1330 0 R] /Limits [(subsection.5.6.3) (subsection.5.8.1)] >> endobj 2030 0 obj << /Names [(subsection.5.8.2) 1360 0 R (subsection.5.9.1) 1405 0 R (subsubsection*.103) 989 0 R (subsubsection*.105) 1021 0 R (subsubsection*.107) 1026 0 R (subsubsection*.108) 1028 0 R] /Limits [(subsection.5.8.2) (subsubsection*.108)] >> endobj 2031 0 obj << /Names [(subsubsection*.11) 266 0 R (subsubsection*.112) 1083 0 R (subsubsection*.114) 1092 0 R (subsubsection*.116) 1122 0 R (subsubsection*.117) 1124 0 R (subsubsection*.118) 1126 0 R] /Limits [(subsubsection*.11) (subsubsection*.118)] >> endobj 2032 0 obj << /Names [(subsubsection*.119) 1137 0 R (subsubsection*.12) 274 0 R (subsubsection*.122) 1183 0 R (subsubsection*.123) 1185 0 R (subsubsection*.124) 1187 0 R (subsubsection*.125) 1200 0 R] /Limits [(subsubsection*.119) (subsubsection*.125)] >> endobj 2033 0 obj << /Names [(subsubsection*.126) 1202 0 R (subsubsection*.127) 1210 0 R (subsubsection*.129) 1226 0 R (subsubsection*.13) 276 0 R (subsubsection*.131) 1238 0 R (subsubsection*.139) 1347 0 R] /Limits [(subsubsection*.126) (subsubsection*.139)] >> endobj 2034 0 obj << /Names [(subsubsection*.14) 293 0 R (subsubsection*.140) 1362 0 R (subsubsection*.141) 1365 0 R (subsubsection*.142) 1378 0 R (subsubsection*.143) 1386 0 R (subsubsection*.144) 1392 0 R] /Limits [(subsubsection*.14) (subsubsection*.144)] >> endobj 2035 0 obj << /Names [(subsubsection*.146) 1407 0 R (subsubsection*.148) 1416 0 R (subsubsection*.149) 1426 0 R (subsubsection*.15) 299 0 R (subsubsection*.150) 1428 0 R (subsubsection*.151) 1438 0 R] /Limits [(subsubsection*.146) (subsubsection*.151)] >> endobj 2036 0 obj << /Names [(subsubsection*.152) 1440 0 R (subsubsection*.153) 1453 0 R (subsubsection*.154) 1459 0 R (subsubsection*.155) 1460 0 R (subsubsection*.156) 1468 0 R (subsubsection*.158) 1478 0 R] /Limits [(subsubsection*.152) (subsubsection*.158)] >> endobj 2037 0 obj << /Names [(subsubsection*.159) 1480 0 R (subsubsection*.160) 1488 0 R (subsubsection*.161) 1496 0 R (subsubsection*.162) 1515 0 R (subsubsection*.166) 1534 0 R (subsubsection*.167) 1545 0 R] /Limits [(subsubsection*.159) (subsubsection*.167)] >> endobj 2038 0 obj << /Names [(subsubsection*.168) 1553 0 R (subsubsection*.169) 1554 0 R (subsubsection*.171) 1563 0 R (subsubsection*.172) 1571 0 R (subsubsection*.173) 1573 0 R (subsubsection*.174) 1579 0 R] /Limits [(subsubsection*.168) (subsubsection*.174)] >> endobj 2039 0 obj << /Names [(subsubsection*.175) 1582 0 R (subsubsection*.176) 1583 0 R (subsubsection*.177) 1591 0 R (subsubsection*.180) 1633 0 R (subsubsection*.181) 1646 0 R (subsubsection*.185) 1662 0 R] /Limits [(subsubsection*.175) (subsubsection*.185)] >> endobj 2040 0 obj << /Names [(subsubsection*.189) 1673 0 R (subsubsection*.190) 1674 0 R (subsubsection*.191) 1675 0 R (subsubsection*.192) 1682 0 R (subsubsection*.193) 1684 0 R (subsubsection*.194) 1686 0 R] /Limits [(subsubsection*.189) (subsubsection*.194)] >> endobj 2041 0 obj << /Names [(subsubsection*.195) 1701 0 R (subsubsection*.197) 1731 0 R (subsubsection*.2) 218 0 R (subsubsection*.20) 318 0 R (subsubsection*.201) 1746 0 R (subsubsection*.207) 1768 0 R] /Limits [(subsubsection*.195) (subsubsection*.207)] >> endobj 2042 0 obj << /Names [(subsubsection*.208) 1819 0 R (subsubsection*.209) 1820 0 R (subsubsection*.21) 320 0 R (subsubsection*.22) 329 0 R (subsubsection*.25) 343 0 R (subsubsection*.26) 351 0 R] /Limits [(subsubsection*.208) (subsubsection*.26)] >> endobj 2043 0 obj << /Names [(subsubsection*.28) 363 0 R (subsubsection*.29) 372 0 R (subsubsection*.30) 393 0 R (subsubsection*.31) 399 0 R (subsubsection*.32) 418 0 R (subsubsection*.33) 421 0 R] /Limits [(subsubsection*.28) (subsubsection*.33)] >> endobj 2044 0 obj << /Names [(subsubsection*.34) 431 0 R (subsubsection*.35) 444 0 R (subsubsection*.38) 455 0 R (subsubsection*.39) 462 0 R (subsubsection*.40) 469 0 R (subsubsection*.41) 473 0 R] /Limits [(subsubsection*.34) (subsubsection*.41)] >> endobj 2045 0 obj << /Names [(subsubsection*.42) 488 0 R (subsubsection*.43) 491 0 R (subsubsection*.44) 492 0 R (subsubsection*.45) 499 0 R (subsubsection*.53) 530 0 R (subsubsection*.54) 538 0 R] /Limits [(subsubsection*.42) (subsubsection*.54)] >> endobj 2046 0 obj << /Names [(subsubsection*.55) 540 0 R (subsubsection*.56) 548 0 R (subsubsection*.57) 557 0 R (subsubsection*.61) 574 0 R (subsubsection*.62) 576 0 R (subsubsection*.63) 584 0 R] /Limits [(subsubsection*.55) (subsubsection*.63)] >> endobj 2047 0 obj << /Names [(subsubsection*.64) 587 0 R (subsubsection*.65) 598 0 R (subsubsection*.66) 600 0 R (subsubsection*.67) 602 0 R (subsubsection*.68) 609 0 R (subsubsection*.69) 611 0 R] /Limits [(subsubsection*.64) (subsubsection*.69)] >> endobj 2048 0 obj << /Names [(subsubsection*.7) 240 0 R (subsubsection*.70) 615 0 R (subsubsection*.71) 617 0 R (subsubsection*.72) 623 0 R (subsubsection*.73) 625 0 R (subsubsection*.74) 670 0 R] /Limits [(subsubsection*.7) (subsubsection*.74)] >> endobj 2049 0 obj << /Names [(subsubsection*.77) 677 0 R (subsubsection*.78) 686 0 R (subsubsection*.79) 699 0 R (subsubsection*.80) 701 0 R (subsubsection*.81) 707 0 R (subsubsection*.82) 716 0 R] /Limits [(subsubsection*.77) (subsubsection*.82)] >> endobj 2050 0 obj << /Names [(subsubsection*.83) 717 0 R (subsubsection*.84) 724 0 R (subsubsection*.85) 738 0 R (subsubsection*.86) 757 0 R (subsubsection*.87) 758 0 R (subsubsection*.88) 763 0 R] /Limits [(subsubsection*.83) (subsubsection*.88)] >> endobj 2051 0 obj << /Names [(subsubsection*.89) 768 0 R (subsubsection*.90) 839 0 R (subsubsection*.91) 841 0 R (subsubsection*.92) 843 0 R (subsubsection*.95) 940 0 R (subsubsection*.97) 950 0 R] /Limits [(subsubsection*.89) (subsubsection*.97)] >> endobj 2052 0 obj << /Names [(subsubsection*.98) 959 0 R (syntax) 300 0 R (table-defining-the-format) 1637 0 R (table.1.1) 243 0 R (table.5.1) 1871 0 R (tableeditor) 1536 0 R] /Limits [(subsubsection*.98) (tableeditor)] >> endobj 2053 0 obj << /Names [(tabular-advantages) 1681 0 R (tabular-disadvantages) 1683 0 R (tabularadapter) 1685 0 R (term-29) 849 0 R (term-attribute) 1842 0 R (term-class-attribute) 1844 0 R] /Limits [(tabular-advantages) (term-class-attribute)] >> endobj 2054 0 obj << /Names [(term-command-button) 995 0 R (term-controller) 850 0 R (term-dialog-box) 1035 0 R (term-editor) 897 0 R (term-editor-factory) 1313 0 R (term-factory) 1845 0 R] /Limits [(term-command-button) (term-factory)] >> endobj 2055 0 obj << /Names [(term-group) 857 0 R (term-handler) 852 0 R (term-hastraits) 851 0 R (term-instance) 853 0 R (term-item) 856 0 R (term-live) 1032 0 R] /Limits [(term-group) (term-live)] >> endobj 2056 0 obj << /Names [(term-livemodal) 1034 0 R (term-modal) 1031 0 R (term-model) 848 0 R (term-mvc) 847 0 R (term-nonmodal) 1033 0 R (term-object) 1847 0 R] /Limits [(term-livemodal) (term-object)] >> endobj 2057 0 obj << /Names [(term-panel) 855 0 R (term-predefined-trait-type) 1315 0 R (term-subpanel) 1038 0 R (term-trait) 1866 0 R (term-trait-attribute) 854 0 R (term-trait-type) 1314 0 R] /Limits [(term-panel) (term-trait-type)] >> endobj 2058 0 obj << /Names [(term-traits) 812 0 R (term-traits-ui) 811 0 R (term-view) 1867 0 R (term-viewelement) 1130 0 R (term-widget) 942 0 R (term-wizard) 1036 0 R] /Limits [(term-traits) (term-wizard)] >> endobj 2059 0 obj << /Names [(term-wx) 1868 0 R (the-controller-handler-subclasses-and-objects) 842 0 R (the-group-object) 958 0 R (the-item-object) 926 0 R (the-model-hastraits-subclasses-and-objects) 838 0 R (the-model-view-controller-mvc-design-pattern) 836 0 R] /Limits [(term-wx) (the-model-view-controller-mvc-design-pattern)] >> endobj 2060 0 obj << /Names [(the-name-parameter) 294 0 R (the-predefined-trait-editor-factories) 896 0 R (the-simple-style) 1361 0 R (the-tabular-editor-user-interface) 1700 0 R (the-trait-factory-function) 432 0 R (the-view-and-its-building-blocks) 858 0 R] /Limits [(the-name-parameter) (the-view-and-its-building-blocks)] >> endobj 2061 0 obj << /Names [(the-view-context) 1127 0 R (the-view-object) 908 0 R (the-view-view-objects) 840 0 R (this-and-self) 248 0 R (tips-tricks-and-gotchas) 898 0 R (toolbars) 1260 0 R] /Limits [(the-view-context) (toolbars)] >> endobj 2062 0 obj << /Names [(toolkit-selection) 844 0 R (trait-attribute-definition-strategies) 493 0 R (trait-attribute-name-wildcard) 500 0 R (trait-events) 344 0 R (trait-handlers) 450 0 R (trait-metadata) 221 0 R] /Limits [(toolkit-selection) (trait-metadata)] >> endobj 2063 0 obj << /Names [(trait-parameters) 435 0 R (trait-subclassing) 410 0 R (trait-type-casting) 232 0 R (trait-type-coercion) 228 0 R (trait-views) 1818 0 R (traitprefixlist) 461 0 R] /Limits [(trait-parameters) (traitprefixlist)] >> endobj 2064 0 obj << /Names [(traitprefixmap) 468 0 R (traits-ui-themes) 894 0 R (tree-defining-the-format) 1767 0 R (treeeditor) 1605 0 R (type) 445 0 R (type-checked-methods) 196 0 R] /Limits [(traitprefixmap) (type-checked-methods)] >> endobj 2065 0 obj << /Names [(type-coercions-permitted-for-coercing-traits-table) 230 0 R (ui) 1125 0 R (undefined-object) 366 0 R (unpicking-hastraits-objects) 608 0 R (useful-methods-on-hastraits) 612 0 R (using-adapters) 573 0 R] /Limits [(type-coercions-permitted-for-coercing-traits-table) (using-adapters)] >> endobj 2066 0 obj << /Names [(using-editor-styles) 1366 0 R (using-interfaces) 547 0 R (validate) 419 0 R (when-handler-methods-are-called-and-when-to-override-them-table) 1217 0 R (wildcard-rules) 506 0 R (wizards) 1025 0 R] /Limits [(using-editor-styles) (wizards)] >> endobj 2067 0 obj << /Names [(writing-a-graphical-application-for-scientific-programming-using-traitsui) 658 0 R (writing-handler-methods) 1207 0 R] /Limits [(writing-a-graphical-application-for-scientific-programming-using-traitsui) (writing-handler-methods)] >> endobj 2068 0 obj << /Kids [1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R] /Limits [(--doc-TUIUG/advanced_view) (Hfootnote.16)] >> endobj 2069 0 obj << /Kids [1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R] /Limits [(Hfootnote.17) (Item.2)] >> endobj 2070 0 obj << /Kids [1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R] /Limits [(Item.20) (Item.52)] >> endobj 2071 0 obj << /Kids [1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R] /Limits [(Item.6) (chapter.2)] >> endobj 2072 0 obj << /Kids [1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R] /Limits [(chapter.3) (delegatesto)] >> endobj 2073 0 obj << /Kids [1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R 1950 0 R] /Limits [(disallow-object) (examples-of-extended-name-notation-table)] >> endobj 2074 0 obj << /Kids [1951 0 R 1952 0 R 1953 0 R 1954 0 R 1955 0 R 1956 0 R] /Limits [(expanding-and-collapsing-nodes) (figure.5.39)] >> endobj 2075 0 obj << /Kids [1957 0 R 1958 0 R 1959 0 R 1960 0 R 1961 0 R 1962 0 R] /Limits [(figure.5.4) (handler-argument-interpretation-table)] >> endobj 2076 0 obj << /Kids [1963 0 R 1964 0 R 1965 0 R 1966 0 R 1967 0 R 1968 0 R] /Limits [(handler-decorator) (overriding-default-values-in-a-subclass)] >> endobj 2077 0 obj << /Kids [1969 0 R 1970 0 R 1971 0 R 1972 0 R 1973 0 R 1974 0 R] /Limits [(overriding-getstate) (page.128)] >> endobj 2078 0 obj << /Kids [1975 0 R 1976 0 R 1977 0 R 1978 0 R 1979 0 R 1980 0 R] /Limits [(page.129) (page.19)] >> endobj 2079 0 obj << /Kids [1981 0 R 1982 0 R 1983 0 R 1984 0 R 1985 0 R 1986 0 R] /Limits [(page.2) (page.51)] >> endobj 2080 0 obj << /Kids [1987 0 R 1988 0 R 1989 0 R 1990 0 R 1991 0 R 1992 0 R] /Limits [(page.52) (page.84)] >> endobj 2081 0 obj << /Kids [1993 0 R 1994 0 R 1995 0 R 1996 0 R 1997 0 R 1998 0 R] /Limits [(page.85) (paragraph*.133)] >> endobj 2082 0 obj << /Kids [1999 0 R 2000 0 R 2001 0 R 2002 0 R 2003 0 R 2004 0 R] /Limits [(paragraph*.134) (paragraph*.27)] >> endobj 2083 0 obj << /Kids [2005 0 R 2006 0 R 2007 0 R 2008 0 R 2009 0 R 2010 0 R] /Limits [(paragraph*.3) (section.1.1)] >> endobj 2084 0 obj << /Kids [2011 0 R 2012 0 R 2013 0 R 2014 0 R 2015 0 R 2016 0 R] /Limits [(section.1.2) (structure-of-this-guide)] >> endobj 2085 0 obj << /Kids [2017 0 R 2018 0 R 2019 0 R 2020 0 R 2021 0 R 2022 0 R] /Limits [(subclasses-of-group) (subsection.3.1.4)] >> endobj 2086 0 obj << /Kids [2023 0 R 2024 0 R 2025 0 R 2026 0 R 2027 0 R 2028 0 R] /Limits [(subsection.3.1.5) (subsection.5.6.2)] >> endobj 2087 0 obj << /Kids [2029 0 R 2030 0 R 2031 0 R 2032 0 R 2033 0 R 2034 0 R] /Limits [(subsection.5.6.3) (subsubsection*.144)] >> endobj 2088 0 obj << /Kids [2035 0 R 2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 0 R] /Limits [(subsubsection*.146) (subsubsection*.194)] >> endobj 2089 0 obj << /Kids [2041 0 R 2042 0 R 2043 0 R 2044 0 R 2045 0 R 2046 0 R] /Limits [(subsubsection*.195) (subsubsection*.63)] >> endobj 2090 0 obj << /Kids [2047 0 R 2048 0 R 2049 0 R 2050 0 R 2051 0 R 2052 0 R] /Limits [(subsubsection*.64) (tableeditor)] >> endobj 2091 0 obj << /Kids [2053 0 R 2054 0 R 2055 0 R 2056 0 R 2057 0 R 2058 0 R] /Limits [(tabular-advantages) (term-wizard)] >> endobj 2092 0 obj << /Kids [2059 0 R 2060 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R] /Limits [(term-wx) (type-checked-methods)] >> endobj 2093 0 obj << /Kids [2065 0 R 2066 0 R 2067 0 R] /Limits [(type-coercions-permitted-for-coercing-traits-table) (writing-handler-methods)] >> endobj 2094 0 obj << /Kids [2068 0 R 2069 0 R 2070 0 R 2071 0 R 2072 0 R 2073 0 R] /Limits [(--doc-TUIUG/advanced_view) (examples-of-extended-name-notation-table)] >> endobj 2095 0 obj << /Kids [2074 0 R 2075 0 R 2076 0 R 2077 0 R 2078 0 R 2079 0 R] /Limits [(expanding-and-collapsing-nodes) (page.51)] >> endobj 2096 0 obj << /Kids [2080 0 R 2081 0 R 2082 0 R 2083 0 R 2084 0 R 2085 0 R] /Limits [(page.52) (subsection.3.1.4)] >> endobj 2097 0 obj << /Kids [2086 0 R 2087 0 R 2088 0 R 2089 0 R 2090 0 R 2091 0 R] /Limits [(subsection.3.1.5) (term-wizard)] >> endobj 2098 0 obj << /Kids [2092 0 R 2093 0 R] /Limits [(term-wx) (writing-handler-methods)] >> endobj 2099 0 obj << /Kids [2094 0 R 2095 0 R 2096 0 R 2097 0 R 2098 0 R] /Limits [(--doc-TUIUG/advanced_view) (writing-handler-methods)] >> endobj 2100 0 obj << /Dests 2099 0 R >> endobj 2101 0 obj << /Type /Catalog /Pages 1913 0 R /Outlines 1914 0 R /Names 2100 0 R /PageMode/UseOutlines/PageLabels<>2<>4<>]>> /OpenAction 116 0 R >> endobj 2102 0 obj << /Author (Enthought, Inc.) /Title (Traits 3 User Manual) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.9)/Keywords() /CreationDate (D:20091021144116-05'00') /ModDate (D:20091021144116-05'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.9-2.2 (Web2C 7.5.7) kpathsea version 3.5.7) >> endobj xref 0 2103 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000928 00000 f 0000000015 00000 n 0000016856 00000 n 0002467356 00000 n 0000000060 00000 n 0000000098 00000 n 0000016964 00000 n 0002467284 00000 n 0000000145 00000 n 0000000184 00000 n 0000017076 00000 n 0002467198 00000 n 0000000232 00000 n 0000000263 00000 n 0000027948 00000 n 0002467112 00000 n 0000000311 00000 n 0000000376 00000 n 0000055333 00000 n 0002467026 00000 n 0000000424 00000 n 0000000461 00000 n 0000086206 00000 n 0002466940 00000 n 0000000509 00000 n 0000000555 00000 n 0000098210 00000 n 0002466854 00000 n 0000000603 00000 n 0000000635 00000 n 0000119699 00000 n 0002466781 00000 n 0000000683 00000 n 0000000717 00000 n 0000173262 00000 n 0002466693 00000 n 0000000763 00000 n 0000000800 00000 n 0000178354 00000 n 0002466567 00000 n 0000000846 00000 n 0000000883 00000 n 0000178520 00000 n 0002466506 00000 n 0000000931 00000 n 0000001023 00000 n 0001565874 00000 n 0002466417 00000 n 0000001069 00000 n 0000001106 00000 n 0001569698 00000 n 0002466288 00000 n 0000001152 00000 n 0000001191 00000 n 0001569807 00000 n 0002466214 00000 n 0000001239 00000 n 0000001278 00000 n 0001569920 00000 n 0002466127 00000 n 0000001326 00000 n 0000001357 00000 n 0001584445 00000 n 0002466040 00000 n 0000001405 00000 n 0000001456 00000 n 0001632611 00000 n 0002465953 00000 n 0000001504 00000 n 0000001541 00000 n 0001658879 00000 n 0002465866 00000 n 0000001589 00000 n 0000001630 00000 n 0001697184 00000 n 0002465779 00000 n 0000001678 00000 n 0000001735 00000 n 0001721834 00000 n 0002465692 00000 n 0000001783 00000 n 0000001818 00000 n 0001778572 00000 n 0002465605 00000 n 0000001866 00000 n 0000001923 00000 n 0001844374 00000 n 0002465518 00000 n 0000001971 00000 n 0000002027 00000 n 0002113410 00000 n 0002465431 00000 n 0000002076 00000 n 0000002117 00000 n 0002285406 00000 n 0002465343 00000 n 0000002166 00000 n 0000002217 00000 n 0002297751 00000 n 0002465252 00000 n 0000002267 00000 n 0000002311 00000 n 0002304161 00000 n 0002465160 00000 n 0000002361 00000 n 0000002410 00000 n 0002312968 00000 n 0002465082 00000 n 0000002460 00000 n 0000002531 00000 n 0002316118 00000 n 0002465003 00000 n 0000002578 00000 n 0000002616 00000 n 0000003060 00000 n 0000003172 00000 n 0000007326 00000 n 0000002668 00000 n 0000007216 00000 n 0000007273 00000 n 0002459911 00000 n 0002460084 00000 n 0002460619 00000 n 0002460975 00000 n 0000007729 00000 n 0000007560 00000 n 0000007460 00000 n 0000007672 00000 n 0000009283 00000 n 0000009434 00000 n 0000009587 00000 n 0000009740 00000 n 0000009893 00000 n 0000010046 00000 n 0000010199 00000 n 0000010351 00000 n 0000010504 00000 n 0000010655 00000 n 0000010805 00000 n 0000010958 00000 n 0000011109 00000 n 0000011260 00000 n 0000011411 00000 n 0000011564 00000 n 0000011716 00000 n 0000011869 00000 n 0000012021 00000 n 0000012174 00000 n 0000012326 00000 n 0000012479 00000 n 0000012632 00000 n 0000012786 00000 n 0000012940 00000 n 0000013093 00000 n 0000013247 00000 n 0000013401 00000 n 0000013609 00000 n 0000008935 00000 n 0000007770 00000 n 0000013552 00000 n 0002460262 00000 n 0000014013 00000 n 0000013901 00000 n 0000013707 00000 n 0000016350 00000 n 0000016521 00000 n 0000020444 00000 n 0000017132 00000 n 0000016210 00000 n 0000014085 00000 n 0000016693 00000 n 0000016750 00000 n 0000016803 00000 n 0000016907 00000 n 0000017019 00000 n 0000020633 00000 n 0000020962 00000 n 0000020304 00000 n 0000017230 00000 n 0000020787 00000 n 0002460795 00000 n 0000020844 00000 n 0002459733 00000 n 0002459385 00000 n 0002459559 00000 n 0000020901 00000 n 0000023769 00000 n 0000024045 00000 n 0000023637 00000 n 0000021112 00000 n 0000023931 00000 n 0000023988 00000 n 0002461093 00000 n 0000136880 00000 n 0000027609 00000 n 0000028174 00000 n 0000027477 00000 n 0000024182 00000 n 0000027777 00000 n 0000027834 00000 n 0000027891 00000 n 0000028003 00000 n 0000028060 00000 n 0000028117 00000 n 0000123401 00000 n 0000031448 00000 n 0000031602 00000 n 0000031768 00000 n 0000032269 00000 n 0000031300 00000 n 0000028324 00000 n 0000031924 00000 n 0000031981 00000 n 0000032038 00000 n 0000032095 00000 n 0000032152 00000 n 0000032209 00000 n 0000038639 00000 n 0000049045 00000 n 0000035276 00000 n 0000034642 00000 n 0000032393 00000 n 0000034754 00000 n 0000034811 00000 n 0000034872 00000 n 0000034929 00000 n 0000034986 00000 n 0000035043 00000 n 0000035105 00000 n 0000035162 00000 n 0000035219 00000 n 0000042879 00000 n 0000043039 00000 n 0000038928 00000 n 0000038470 00000 n 0000035374 00000 n 0000038582 00000 n 0000038695 00000 n 0000038752 00000 n 0000038814 00000 n 0000038871 00000 n 0000043424 00000 n 0000042739 00000 n 0000039052 00000 n 0000043193 00000 n 0000043250 00000 n 0000043307 00000 n 0000043364 00000 n 0000153332 00000 n 0000046276 00000 n 0000045993 00000 n 0000043574 00000 n 0000046105 00000 n 0000046162 00000 n 0000046219 00000 n 0002461211 00000 n 0000048829 00000 n 0000049333 00000 n 0000048697 00000 n 0000046413 00000 n 0000048988 00000 n 0000049106 00000 n 0000049163 00000 n 0000049220 00000 n 0000049277 00000 n 0000086149 00000 n 0000052736 00000 n 0000053118 00000 n 0000052604 00000 n 0000049457 00000 n 0000052889 00000 n 0000052946 00000 n 0000052999 00000 n 0000053061 00000 n 0000157502 00000 n 0000055446 00000 n 0000055107 00000 n 0000053268 00000 n 0000055219 00000 n 0000055276 00000 n 0000055389 00000 n 0000058221 00000 n 0000058720 00000 n 0000058089 00000 n 0000055570 00000 n 0000058382 00000 n 0000058439 00000 n 0000058492 00000 n 0000058549 00000 n 0000058606 00000 n 0000058663 00000 n 0000060494 00000 n 0000060789 00000 n 0000060325 00000 n 0000058857 00000 n 0000060437 00000 n 0000060556 00000 n 0000060613 00000 n 0000060670 00000 n 0000060727 00000 n 0000064738 00000 n 0000064288 00000 n 0000060926 00000 n 0000064400 00000 n 0000064457 00000 n 0000064510 00000 n 0000064567 00000 n 0000064624 00000 n 0000064681 00000 n 0002461329 00000 n 0000068255 00000 n 0000067848 00000 n 0000064862 00000 n 0000067960 00000 n 0000068017 00000 n 0000068079 00000 n 0000068136 00000 n 0000068198 00000 n 0000070835 00000 n 0000071336 00000 n 0000070703 00000 n 0000068379 00000 n 0000070995 00000 n 0000071052 00000 n 0000071109 00000 n 0000071166 00000 n 0000071223 00000 n 0000071280 00000 n 0000074493 00000 n 0000074814 00000 n 0000074987 00000 n 0000075486 00000 n 0000074337 00000 n 0000071473 00000 n 0000075141 00000 n 0000075198 00000 n 0000074654 00000 n 0000075251 00000 n 0000075312 00000 n 0000075368 00000 n 0000075429 00000 n 0000082127 00000 n 0000078454 00000 n 0000078961 00000 n 0000078322 00000 n 0000075623 00000 n 0000078606 00000 n 0000078663 00000 n 0000078725 00000 n 0000078781 00000 n 0000078838 00000 n 0000078900 00000 n 0000081689 00000 n 0000082244 00000 n 0000081557 00000 n 0000079111 00000 n 0000081846 00000 n 0000081903 00000 n 0002460438 00000 n 0000081956 00000 n 0000082013 00000 n 0000082070 00000 n 0000082189 00000 n 0000085978 00000 n 0000085767 00000 n 0000086494 00000 n 0000085635 00000 n 0000082407 00000 n 0000085921 00000 n 0000086035 00000 n 0000086092 00000 n 0000086262 00000 n 0000086319 00000 n 0000086376 00000 n 0000086433 00000 n 0002461447 00000 n 0000089340 00000 n 0000088935 00000 n 0000086631 00000 n 0000089047 00000 n 0000089104 00000 n 0000089165 00000 n 0000089222 00000 n 0000089279 00000 n 0000092277 00000 n 0000091885 00000 n 0000089477 00000 n 0000091997 00000 n 0000092054 00000 n 0000092107 00000 n 0000092164 00000 n 0000092220 00000 n 0000094638 00000 n 0000094297 00000 n 0000092427 00000 n 0000094409 00000 n 0000094466 00000 n 0000094519 00000 n 0000094581 00000 n 0000097728 00000 n 0000097886 00000 n 0000098497 00000 n 0000097588 00000 n 0000094736 00000 n 0000098039 00000 n 0000098096 00000 n 0000098153 00000 n 0000098266 00000 n 0000098323 00000 n 0000098379 00000 n 0000098436 00000 n 0000101081 00000 n 0000100507 00000 n 0000098647 00000 n 0000100619 00000 n 0000100676 00000 n 0000100729 00000 n 0000100786 00000 n 0000100848 00000 n 0000100905 00000 n 0000100962 00000 n 0000101019 00000 n 0000104226 00000 n 0000106582 00000 n 0000104745 00000 n 0000104094 00000 n 0000101218 00000 n 0000104402 00000 n 0000104459 00000 n 0000104512 00000 n 0000104574 00000 n 0000104631 00000 n 0000104688 00000 n 0002461565 00000 n 0000106728 00000 n 0000106885 00000 n 0000107040 00000 n 0000107539 00000 n 0000106426 00000 n 0000104895 00000 n 0000107197 00000 n 0000107254 00000 n 0000107307 00000 n 0000107363 00000 n 0000107420 00000 n 0000107482 00000 n 0000110103 00000 n 0000113457 00000 n 0000110220 00000 n 0000109934 00000 n 0000107637 00000 n 0000110046 00000 n 0000110163 00000 n 0000113689 00000 n 0000113288 00000 n 0000110357 00000 n 0000113400 00000 n 0000113518 00000 n 0000113575 00000 n 0000113632 00000 n 0000116287 00000 n 0000116850 00000 n 0000116155 00000 n 0000113826 00000 n 0000116451 00000 n 0000116508 00000 n 0000116565 00000 n 0000116622 00000 n 0000116679 00000 n 0000116736 00000 n 0000116793 00000 n 0000119921 00000 n 0000119416 00000 n 0000116987 00000 n 0000119528 00000 n 0000119585 00000 n 0000119642 00000 n 0000119755 00000 n 0000119812 00000 n 0000119869 00000 n 0000122927 00000 n 0000123582 00000 n 0000122795 00000 n 0000120045 00000 n 0000123115 00000 n 0000123172 00000 n 0000123225 00000 n 0000123282 00000 n 0000123344 00000 n 0000123463 00000 n 0000123520 00000 n 0002461683 00000 n 0000126579 00000 n 0000126243 00000 n 0000123732 00000 n 0000126355 00000 n 0000126412 00000 n 0000126465 00000 n 0000126522 00000 n 0000129795 00000 n 0000129217 00000 n 0000126716 00000 n 0000129329 00000 n 0000129386 00000 n 0000129443 00000 n 0000129500 00000 n 0000129557 00000 n 0000129614 00000 n 0000129676 00000 n 0000129733 00000 n 0000133708 00000 n 0000133076 00000 n 0000129932 00000 n 0000133188 00000 n 0000133245 00000 n 0000133298 00000 n 0000133360 00000 n 0000133416 00000 n 0000133478 00000 n 0000133533 00000 n 0000133595 00000 n 0000133651 00000 n 0000136665 00000 n 0000136998 00000 n 0000136533 00000 n 0000133858 00000 n 0000136823 00000 n 0000136941 00000 n 0000140696 00000 n 0000140119 00000 n 0000137148 00000 n 0000140231 00000 n 0000140288 00000 n 0000140350 00000 n 0000140407 00000 n 0000140464 00000 n 0000140521 00000 n 0000140582 00000 n 0000140639 00000 n 0000143931 00000 n 0000144428 00000 n 0000143799 00000 n 0000140833 00000 n 0000144083 00000 n 0000144140 00000 n 0000144197 00000 n 0000144253 00000 n 0000144315 00000 n 0000144372 00000 n 0002461801 00000 n 0000147354 00000 n 0000146851 00000 n 0000144565 00000 n 0000146963 00000 n 0000147020 00000 n 0000147073 00000 n 0000147130 00000 n 0000147186 00000 n 0000147243 00000 n 0000147300 00000 n 0000150023 00000 n 0000149740 00000 n 0000147491 00000 n 0000149852 00000 n 0000149909 00000 n 0000149966 00000 n 0000153508 00000 n 0000152931 00000 n 0000150160 00000 n 0000153043 00000 n 0000153100 00000 n 0000153156 00000 n 0000153213 00000 n 0000153275 00000 n 0000153394 00000 n 0000153451 00000 n 0000157062 00000 n 0000157563 00000 n 0000156930 00000 n 0000153645 00000 n 0000157221 00000 n 0000157278 00000 n 0000157331 00000 n 0000157388 00000 n 0000157445 00000 n 0000160834 00000 n 0000161002 00000 n 0000161158 00000 n 0000161317 00000 n 0000161925 00000 n 0000160678 00000 n 0000157713 00000 n 0000161469 00000 n 0000161526 00000 n 0000161579 00000 n 0000161635 00000 n 0000161692 00000 n 0000161754 00000 n 0000161811 00000 n 0000161868 00000 n 0000164965 00000 n 0000165771 00000 n 0000164833 00000 n 0000162075 00000 n 0000165134 00000 n 0000165191 00000 n 0000165248 00000 n 0000165305 00000 n 0000165367 00000 n 0000165424 00000 n 0000165481 00000 n 0000165538 00000 n 0000165595 00000 n 0000165652 00000 n 0000165714 00000 n 0002461919 00000 n 0000168979 00000 n 0000168643 00000 n 0000165908 00000 n 0000168755 00000 n 0000168812 00000 n 0000168865 00000 n 0000168922 00000 n 0000172074 00000 n 0000171792 00000 n 0000169116 00000 n 0000171904 00000 n 0000171961 00000 n 0000172017 00000 n 0000172634 00000 n 0000172465 00000 n 0000172185 00000 n 0000172577 00000 n 0000173371 00000 n 0000173093 00000 n 0000172706 00000 n 0000173205 00000 n 0000173314 00000 n 0000173939 00000 n 0000173770 00000 n 0000173469 00000 n 0000173882 00000 n 0000176971 00000 n 0000177585 00000 n 0000177125 00000 n 0000177768 00000 n 0000177277 00000 n 0000177936 00000 n 0000177431 00000 n 0000178117 00000 n 0000178820 00000 n 0000176783 00000 n 0000174011 00000 n 0000178297 00000 n 0000178406 00000 n 0000178463 00000 n 0000178576 00000 n 0000178637 00000 n 0000178698 00000 n 0000178759 00000 n 0002462037 00000 n 0000182191 00000 n 0000182596 00000 n 0000182059 00000 n 0000178918 00000 n 0000182372 00000 n 0000182429 00000 n 0000182482 00000 n 0000182539 00000 n 0000186123 00000 n 0000185840 00000 n 0000182733 00000 n 0000185952 00000 n 0000186009 00000 n 0000186066 00000 n 0000197686 00000 n 0000197839 00000 n 0000188790 00000 n 0000197615 00000 n 0000198206 00000 n 0000188635 00000 n 0000186273 00000 n 0000198032 00000 n 0000198089 00000 n 0000198146 00000 n 0000197219 00000 n 0000200558 00000 n 0000210152 00000 n 0000200431 00000 n 0000198379 00000 n 0000210095 00000 n 0000209592 00000 n 0000213781 00000 n 0000213443 00000 n 0000210312 00000 n 0000213555 00000 n 0000213612 00000 n 0000213667 00000 n 0000213724 00000 n 0000219840 00000 n 0000216858 00000 n 0000216618 00000 n 0000213905 00000 n 0000216745 00000 n 0000216802 00000 n 0002462155 00000 n 0000228612 00000 n 0000228766 00000 n 0000229248 00000 n 0000219685 00000 n 0000216982 00000 n 0000228960 00000 n 0000229017 00000 n 0000229074 00000 n 0000229131 00000 n 0000229188 00000 n 0000228214 00000 n 0000232346 00000 n 0000232120 00000 n 0000229395 00000 n 0000232232 00000 n 0000232289 00000 n 0000234259 00000 n 0000247123 00000 n 0000234132 00000 n 0000232470 00000 n 0000247066 00000 n 0000246592 00000 n 0000250871 00000 n 0000251026 00000 n 0000251437 00000 n 0000250731 00000 n 0000247296 00000 n 0000251205 00000 n 0000251262 00000 n 0000251319 00000 n 0000251376 00000 n 0000253520 00000 n 0000253351 00000 n 0000251548 00000 n 0000253463 00000 n 0000255869 00000 n 0000278139 00000 n 0000278471 00000 n 0000255722 00000 n 0000253631 00000 n 0000278357 00000 n 0000278414 00000 n 0002462273 00000 n 0000277639 00000 n 0000281013 00000 n 0000280730 00000 n 0000278631 00000 n 0000280842 00000 n 0000280899 00000 n 0000280956 00000 n 0000283802 00000 n 0000283576 00000 n 0000281137 00000 n 0000283688 00000 n 0000283745 00000 n 0000286378 00000 n 0000286152 00000 n 0000283926 00000 n 0000286264 00000 n 0000286321 00000 n 0000288627 00000 n 0000288458 00000 n 0000286502 00000 n 0000288570 00000 n 0000289316 00000 n 0000714065 00000 n 0001142793 00000 n 0001563089 00000 n 0000289189 00000 n 0000288751 00000 n 0001563032 00000 n 0000713082 00000 n 0001141810 00000 n 0001562049 00000 n 0001564686 00000 n 0001564517 00000 n 0001563236 00000 n 0001564629 00000 n 0002462391 00000 n 0001565248 00000 n 0001565079 00000 n 0001564784 00000 n 0001565191 00000 n 0001565983 00000 n 0001565705 00000 n 0001565320 00000 n 0001565817 00000 n 0001565926 00000 n 0001566551 00000 n 0001566382 00000 n 0001566081 00000 n 0001566494 00000 n 0001568994 00000 n 0001569165 00000 n 0001569337 00000 n 0001569491 00000 n 0001569976 00000 n 0001568838 00000 n 0001566623 00000 n 0001569641 00000 n 0001569750 00000 n 0001569863 00000 n 0002312408 00000 n 0002312345 00000 n 0001573907 00000 n 0001574058 00000 n 0001574211 00000 n 0001574360 00000 n 0001574518 00000 n 0001574674 00000 n 0001574829 00000 n 0001574984 00000 n 0001575146 00000 n 0001575299 00000 n 0001575451 00000 n 0001575603 00000 n 0001576719 00000 n 0001575757 00000 n 0001575932 00000 n 0001576081 00000 n 0001576230 00000 n 0001576385 00000 n 0001576540 00000 n 0001577583 00000 n 0001573631 00000 n 0001570087 00000 n 0001576877 00000 n 0001576934 00000 n 0001576991 00000 n 0001577048 00000 n 0001577105 00000 n 0001577162 00000 n 0001577224 00000 n 0001577281 00000 n 0001577343 00000 n 0001577399 00000 n 0001577461 00000 n 0001577522 00000 n 0002311648 00000 n 0002311775 00000 n 0002312534 00000 n 0002304410 00000 n 0002304850 00000 n 0002304787 00000 n 0002304913 00000 n 0002312219 00000 n 0002311966 00000 n 0002304975 00000 n 0002304724 00000 n 0001584388 00000 n 0001697126 00000 n 0001692597 00000 n 0001581252 00000 n 0001581423 00000 n 0001581590 00000 n 0001581775 00000 n 0001581955 00000 n 0001582128 00000 n 0001582289 00000 n 0001582454 00000 n 0001582632 00000 n 0001582789 00000 n 0001582968 00000 n 0001583148 00000 n 0001583302 00000 n 0001583466 00000 n 0001583625 00000 n 0001583782 00000 n 0001597431 00000 n 0001597594 00000 n 0001584562 00000 n 0001581000 00000 n 0001577681 00000 n 0001583937 00000 n 0001583994 00000 n 0001584047 00000 n 0001584103 00000 n 0001584160 00000 n 0001584217 00000 n 0001584274 00000 n 0001584331 00000 n 0001584501 00000 n 0002462509 00000 n 0001632554 00000 n 0001655469 00000 n 0001721776 00000 n 0001778514 00000 n 0001844316 00000 n 0002304537 00000 n 0002294156 00000 n 0002304103 00000 n 0001586981 00000 n 0001598223 00000 n 0001586841 00000 n 0001584673 00000 n 0001597748 00000 n 0001597805 00000 n 0001597867 00000 n 0001597924 00000 n 0001597986 00000 n 0001598043 00000 n 0001598100 00000 n 0001598162 00000 n 0001600631 00000 n 0001606895 00000 n 0001607056 00000 n 0001607220 00000 n 0001609346 00000 n 0001609498 00000 n 0001607728 00000 n 0001600483 00000 n 0001598410 00000 n 0001607380 00000 n 0001607437 00000 n 0001607490 00000 n 0001607552 00000 n 0001607614 00000 n 0001607671 00000 n 0001670967 00000 n 0000000929 00000 f 0000000930 00000 f 0000000931 00000 f 0000000999 00000 f 0001612666 00000 n 0001612846 00000 n 0001613205 00000 n 0001613360 00000 n 0001609823 00000 n 0001609206 00000 n 0001607902 00000 n 0001609652 00000 n 0001609709 00000 n 0001609762 00000 n 0002312660 00000 n 0001613764 00000 n 0001612502 00000 n 0001609921 00000 n 0001613540 00000 n 0001613597 00000 n 0001613025 00000 n 0001613650 00000 n 0001613707 00000 n 0001616467 00000 n 0001618359 00000 n 0001616618 00000 n 0001617299 00000 n 0001616327 00000 n 0001613875 00000 n 0001616773 00000 n 0001616830 00000 n 0001616892 00000 n 0001616949 00000 n 0001617006 00000 n 0001617063 00000 n 0001617120 00000 n 0001617176 00000 n 0001617238 00000 n 0001626242 00000 n 0001618247 00000 n 0001617436 00000 n 0001626005 00000 n 0001626062 00000 n 0001626124 00000 n 0001626180 00000 n 0002462627 00000 n 0001626892 00000 n 0001626670 00000 n 0001626377 00000 n 0001626782 00000 n 0001626839 00000 n 0001629205 00000 n 0001628980 00000 n 0001626964 00000 n 0001629092 00000 n 0001629149 00000 n 0001632107 00000 n 0001632781 00000 n 0001631975 00000 n 0001629316 00000 n 0001632268 00000 n 0001632325 00000 n 0001632378 00000 n 0001632440 00000 n 0001632497 00000 n 0001632667 00000 n 0001632724 00000 n 0002304347 00000 n 0001636406 00000 n 0001636557 00000 n 0001636707 00000 n 0000001000 00000 f 0000001001 00000 f 0000001002 00000 f 0000001051 00000 f 0001637067 00000 n 0001637223 00000 n 0001637376 00000 n 0001637529 00000 n 0001637687 00000 n 0001637867 00000 n 0001638025 00000 n 0001638180 00000 n 0001638332 00000 n 0001638495 00000 n 0001638650 00000 n 0001649127 00000 n 0001649283 00000 n 0001639480 00000 n 0001636147 00000 n 0001632905 00000 n 0001638813 00000 n 0001638872 00000 n 0001638931 00000 n 0001636887 00000 n 0001638990 00000 n 0001639053 00000 n 0001639112 00000 n 0001639176 00000 n 0001639235 00000 n 0001639299 00000 n 0001639358 00000 n 0001639422 00000 n 0002311711 00000 n 0002305037 00000 n 0002311838 00000 n 0002305100 00000 n 0002304473 00000 n 0002312723 00000 n 0001718223 00000 n 0002312092 00000 n 0001641634 00000 n 0001649806 00000 n 0001641489 00000 n 0001639592 00000 n 0001649433 00000 n 0001649492 00000 n 0001649556 00000 n 0001649615 00000 n 0001649679 00000 n 0001649743 00000 n 0001717751 00000 n 0001651857 00000 n 0000001052 00000 f 0000001053 00000 f 0000000000 00000 f 0001654517 00000 n 0001654673 00000 n 0001654999 00000 n 0001652196 00000 n 0001651720 00000 n 0001649995 00000 n 0001652023 00000 n 0001652082 00000 n 0001652137 00000 n 0002462747 00000 n 0001717987 00000 n 0001655527 00000 n 0001654353 00000 n 0001652321 00000 n 0001655180 00000 n 0001655239 00000 n 0001655294 00000 n 0001655352 00000 n 0001654836 00000 n 0001655410 00000 n 0001658514 00000 n 0001658668 00000 n 0001659291 00000 n 0001658368 00000 n 0001655639 00000 n 0001658820 00000 n 0001658932 00000 n 0001658991 00000 n 0001659050 00000 n 0001659109 00000 n 0001659168 00000 n 0001659232 00000 n 0001661956 00000 n 0001661476 00000 n 0001659442 00000 n 0001661592 00000 n 0001661651 00000 n 0001661714 00000 n 0001661774 00000 n 0001661833 00000 n 0001661897 00000 n 0001665486 00000 n 0001665662 00000 n 0001665820 00000 n 0001665972 00000 n 0001666128 00000 n 0001666321 00000 n 0001669773 00000 n 0001669932 00000 n 0001670086 00000 n 0001666752 00000 n 0001665304 00000 n 0001662144 00000 n 0001666507 00000 n 0001666566 00000 n 0001666630 00000 n 0001666689 00000 n 0001670266 00000 n 0001670430 00000 n 0001670746 00000 n 0001670586 00000 n 0001674395 00000 n 0001671639 00000 n 0001669582 00000 n 0001666877 00000 n 0001670908 00000 n 0001671030 00000 n 0001671089 00000 n 0001671148 00000 n 0001671207 00000 n 0001671269 00000 n 0001671328 00000 n 0001671392 00000 n 0001671450 00000 n 0001671514 00000 n 0001671577 00000 n 0002312596 00000 n 0001674670 00000 n 0001674908 00000 n 0001674258 00000 n 0001671738 00000 n 0001674556 00000 n 0001674615 00000 n 0001674728 00000 n 0001674786 00000 n 0001674850 00000 n 0002462872 00000 n 0001692318 00000 n 0001677646 00000 n 0001692723 00000 n 0001677509 00000 n 0001675046 00000 n 0001692474 00000 n 0001692533 00000 n 0001692660 00000 n 0001695873 00000 n 0001696023 00000 n 0001696181 00000 n 0001696338 00000 n 0001696494 00000 n 0001696650 00000 n 0001697363 00000 n 0001695691 00000 n 0001692899 00000 n 0001696831 00000 n 0001696890 00000 n 0001696945 00000 n 0001697009 00000 n 0001697067 00000 n 0001697241 00000 n 0001697300 00000 n 0001701158 00000 n 0001701321 00000 n 0001701638 00000 n 0001702562 00000 n 0001702922 00000 n 0001701794 00000 n 0001701988 00000 n 0001702162 00000 n 0001702365 00000 n 0001703764 00000 n 0001700931 00000 n 0001697488 00000 n 0001703101 00000 n 0001703160 00000 n 0001701479 00000 n 0001703215 00000 n 0001703278 00000 n 0001703337 00000 n 0001703396 00000 n 0001703455 00000 n 0001703519 00000 n 0001703578 00000 n 0001703642 00000 n 0001703701 00000 n 0001702743 00000 n 0001714364 00000 n 0001707099 00000 n 0001706443 00000 n 0001703876 00000 n 0001706559 00000 n 0001706618 00000 n 0001706682 00000 n 0001706741 00000 n 0001706799 00000 n 0001706858 00000 n 0001706917 00000 n 0001706976 00000 n 0001707040 00000 n 0001710753 00000 n 0001709810 00000 n 0001707237 00000 n 0001709926 00000 n 0001709985 00000 n 0001710049 00000 n 0001710108 00000 n 0001710167 00000 n 0001710226 00000 n 0001710285 00000 n 0001710344 00000 n 0001710403 00000 n 0001710462 00000 n 0001710517 00000 n 0001710576 00000 n 0001710635 00000 n 0001710694 00000 n 0001713835 00000 n 0001713997 00000 n 0001714486 00000 n 0001713689 00000 n 0001710852 00000 n 0001714191 00000 n 0001714250 00000 n 0001714305 00000 n 0001714427 00000 n 0002462997 00000 n 0001717036 00000 n 0001717359 00000 n 0001718281 00000 n 0001716881 00000 n 0001714637 00000 n 0001717510 00000 n 0001717569 00000 n 0001717633 00000 n 0001717692 00000 n 0001717810 00000 n 0001717198 00000 n 0001717869 00000 n 0001717928 00000 n 0001718046 00000 n 0001718105 00000 n 0001718164 00000 n 0001720771 00000 n 0001720922 00000 n 0001722675 00000 n 0001733857 00000 n 0001750455 00000 n 0001721891 00000 n 0001720625 00000 n 0001718432 00000 n 0001721073 00000 n 0001721132 00000 n 0001721187 00000 n 0001721246 00000 n 0001721305 00000 n 0001721364 00000 n 0001721423 00000 n 0001721482 00000 n 0001721541 00000 n 0001721600 00000 n 0001721658 00000 n 0001721717 00000 n 0001766482 00000 n 0001722559 00000 n 0001722029 00000 n 0001766234 00000 n 0001766293 00000 n 0001766357 00000 n 0001766419 00000 n 0001770033 00000 n 0001770185 00000 n 0001770335 00000 n 0001770483 00000 n 0001770639 00000 n 0001771338 00000 n 0001769860 00000 n 0001766636 00000 n 0001770794 00000 n 0001770853 00000 n 0001770908 00000 n 0001770972 00000 n 0001771031 00000 n 0001771090 00000 n 0001771154 00000 n 0001771213 00000 n 0001771276 00000 n 0001773454 00000 n 0001773156 00000 n 0001771489 00000 n 0001773272 00000 n 0001773331 00000 n 0001773395 00000 n 0001777083 00000 n 0001777243 00000 n 0001777583 00000 n 0001777744 00000 n 0001777905 00000 n 0001778068 00000 n 0001778226 00000 n 0001778752 00000 n 0001776883 00000 n 0001773579 00000 n 0001778396 00000 n 0001777414 00000 n 0001778455 00000 n 0001778629 00000 n 0001778693 00000 n 0002463122 00000 n 0002285342 00000 n 0002304600 00000 n 0002312281 00000 n 0002312029 00000 n 0001781338 00000 n 0001791015 00000 n 0001791341 00000 n 0001791512 00000 n 0001791677 00000 n 0001795876 00000 n 0001796046 00000 n 0001792089 00000 n 0001781165 00000 n 0001778903 00000 n 0001791849 00000 n 0001791908 00000 n 0001791178 00000 n 0001791971 00000 n 0001792030 00000 n 0001844431 00000 n 0002113351 00000 n 0001796202 00000 n 0001796365 00000 n 0001796546 00000 n 0001796697 00000 n 0001796850 00000 n 0001797001 00000 n 0001797160 00000 n 0001797679 00000 n 0001795667 00000 n 0001792239 00000 n 0001797312 00000 n 0001797371 00000 n 0001797435 00000 n 0001797499 00000 n 0001797558 00000 n 0001797617 00000 n 0001811205 00000 n 0001811386 00000 n 0001811549 00000 n 0001800576 00000 n 0001805212 00000 n 0001814755 00000 n 0001812204 00000 n 0001800421 00000 n 0001797804 00000 n 0001811719 00000 n 0001811778 00000 n 0001811841 00000 n 0001811900 00000 n 0001811958 00000 n 0001812017 00000 n 0001812081 00000 n 0001812145 00000 n 0001824316 00000 n 0001820340 00000 n 0001823243 00000 n 0001823401 00000 n 0001827019 00000 n 0001830305 00000 n 0001830467 00000 n 0001824380 00000 n 0001814600 00000 n 0001812369 00000 n 0001823716 00000 n 0001823775 00000 n 0001823839 00000 n 0001823898 00000 n 0001823962 00000 n 0001824021 00000 n 0001824080 00000 n 0001823560 00000 n 0001824139 00000 n 0001824198 00000 n 0001824257 00000 n 0001831108 00000 n 0001826873 00000 n 0001824545 00000 n 0001830629 00000 n 0001830688 00000 n 0001830752 00000 n 0001830810 00000 n 0001830868 00000 n 0001830927 00000 n 0001830986 00000 n 0001831049 00000 n 0001833465 00000 n 0001844793 00000 n 0001833349 00000 n 0001831297 00000 n 0001844135 00000 n 0001844194 00000 n 0001844257 00000 n 0001844490 00000 n 0001844548 00000 n 0001844607 00000 n 0001844666 00000 n 0001844730 00000 n 0002463247 00000 n 0001846792 00000 n 0001846504 00000 n 0001844943 00000 n 0001846620 00000 n 0001846679 00000 n 0001846734 00000 n 0001849630 00000 n 0001854621 00000 n 0001854777 00000 n 0001854931 00000 n 0001855517 00000 n 0001849475 00000 n 0001846917 00000 n 0001855087 00000 n 0001855146 00000 n 0001855210 00000 n 0001855269 00000 n 0001855333 00000 n 0001855392 00000 n 0001855454 00000 n 0001859426 00000 n 0001884106 00000 n 0001858724 00000 n 0001858304 00000 n 0001855680 00000 n 0001858420 00000 n 0001858479 00000 n 0001858543 00000 n 0001858601 00000 n 0001858665 00000 n 0001903559 00000 n 0001859310 00000 n 0001858836 00000 n 0001903373 00000 n 0001903432 00000 n 0001903496 00000 n 0001906065 00000 n 0001938840 00000 n 0001905949 00000 n 0001903698 00000 n 0001938658 00000 n 0001938717 00000 n 0001938781 00000 n 0001942185 00000 n 0001941708 00000 n 0001938990 00000 n 0001941824 00000 n 0001941883 00000 n 0001941947 00000 n 0001942004 00000 n 0001942063 00000 n 0001942126 00000 n 0002463372 00000 n 0001945042 00000 n 0001944562 00000 n 0001942310 00000 n 0001944678 00000 n 0001944737 00000 n 0001944792 00000 n 0001944856 00000 n 0001944920 00000 n 0001944978 00000 n 0001950385 00000 n 0001948617 00000 n 0001948200 00000 n 0001945167 00000 n 0001948316 00000 n 0001948375 00000 n 0001948430 00000 n 0001948494 00000 n 0001948553 00000 n 0001979149 00000 n 0001979611 00000 n 0001950248 00000 n 0001948742 00000 n 0001979366 00000 n 0001979425 00000 n 0001979489 00000 n 0001979548 00000 n 0001981679 00000 n 0001993564 00000 n 0001993897 00000 n 0001981542 00000 n 0001979761 00000 n 0001993715 00000 n 0001993774 00000 n 0001993833 00000 n 0002000407 00000 n 0001997264 00000 n 0001997427 00000 n 0002016658 00000 n 0001998299 00000 n 0001997118 00000 n 0001994060 00000 n 0001997593 00000 n 0001997652 00000 n 0001997710 00000 n 0001997769 00000 n 0001997828 00000 n 0001997887 00000 n 0001997946 00000 n 0001998004 00000 n 0001998063 00000 n 0001998122 00000 n 0001998181 00000 n 0001998240 00000 n 0002017061 00000 n 0002000270 00000 n 0001998424 00000 n 0002016817 00000 n 0002016876 00000 n 0002016939 00000 n 0002016997 00000 n 0002463497 00000 n 0002019820 00000 n 0002019976 00000 n 0002022266 00000 n 0002020432 00000 n 0002019674 00000 n 0002017224 00000 n 0002020129 00000 n 0002020188 00000 n 0002020252 00000 n 0002020310 00000 n 0002020369 00000 n 0002137727 00000 n 0002036117 00000 n 0002047924 00000 n 0002022150 00000 n 0002020557 00000 n 0002047614 00000 n 0002047673 00000 n 0002047737 00000 n 0002047801 00000 n 0002047865 00000 n 0002050109 00000 n 0002062592 00000 n 0002060392 00000 n 0002049993 00000 n 0002048089 00000 n 0002060087 00000 n 0002060146 00000 n 0002060210 00000 n 0002060269 00000 n 0002060328 00000 n 0002095206 00000 n 0002082570 00000 n 0002062476 00000 n 0002060542 00000 n 0002082335 00000 n 0002082394 00000 n 0002082449 00000 n 0002082511 00000 n 0002084693 00000 n 0002097814 00000 n 0002095666 00000 n 0002084556 00000 n 0002082720 00000 n 0002095361 00000 n 0002095420 00000 n 0002095484 00000 n 0002095543 00000 n 0002095607 00000 n 0002110510 00000 n 0002097698 00000 n 0002095816 00000 n 0002110087 00000 n 0002110146 00000 n 0002110210 00000 n 0002110265 00000 n 0002110328 00000 n 0002110392 00000 n 0002110451 00000 n 0002463622 00000 n 0002113526 00000 n 0002112867 00000 n 0002110673 00000 n 0002112983 00000 n 0002113042 00000 n 0002113106 00000 n 0002113169 00000 n 0002113228 00000 n 0002113292 00000 n 0002113467 00000 n 0002116502 00000 n 0002117014 00000 n 0002116365 00000 n 0002113638 00000 n 0002116656 00000 n 0002116715 00000 n 0002116773 00000 n 0002116832 00000 n 0002116896 00000 n 0002116955 00000 n 0002236430 00000 n 0002135721 00000 n 0002118881 00000 n 0002136123 00000 n 0002118744 00000 n 0002117126 00000 n 0002135880 00000 n 0002135939 00000 n 0002136001 00000 n 0002136064 00000 n 0002137845 00000 n 0002137552 00000 n 0002136273 00000 n 0002137668 00000 n 0002137786 00000 n 0002140080 00000 n 0002160223 00000 n 0002160382 00000 n 0002160538 00000 n 0002160697 00000 n 0002160858 00000 n 0002161024 00000 n 0002161427 00000 n 0002139898 00000 n 0002137970 00000 n 0002161187 00000 n 0002161246 00000 n 0002161310 00000 n 0002161368 00000 n 0002182430 00000 n 0002190163 00000 n 0002193706 00000 n 0002193824 00000 n 0002193942 00000 n 0002182218 00000 n 0002163743 00000 n 0002182732 00000 n 0002163606 00000 n 0002161590 00000 n 0002182371 00000 n 0002182494 00000 n 0002182556 00000 n 0002182615 00000 n 0002182674 00000 n 0002463747 00000 n 0002186574 00000 n 0002186153 00000 n 0002182882 00000 n 0002186269 00000 n 0002186328 00000 n 0002186392 00000 n 0002186451 00000 n 0002186515 00000 n 0002190524 00000 n 0002189988 00000 n 0002186699 00000 n 0002190104 00000 n 0002190227 00000 n 0002190286 00000 n 0002190343 00000 n 0002190402 00000 n 0002190461 00000 n 0002193435 00000 n 0002194122 00000 n 0002193298 00000 n 0002190675 00000 n 0002193592 00000 n 0002193651 00000 n 0002193765 00000 n 0002193883 00000 n 0002194004 00000 n 0002194063 00000 n 0002197671 00000 n 0002197144 00000 n 0002194234 00000 n 0002197260 00000 n 0002197319 00000 n 0002197378 00000 n 0002197436 00000 n 0002197495 00000 n 0002197554 00000 n 0002197613 00000 n 0002200002 00000 n 0002233360 00000 n 0002199886 00000 n 0002197783 00000 n 0002232643 00000 n 0002232702 00000 n 0002232761 00000 n 0002232820 00000 n 0002232879 00000 n 0002232938 00000 n 0002232997 00000 n 0002233055 00000 n 0002233114 00000 n 0002233173 00000 n 0002233237 00000 n 0002233296 00000 n 0002236213 00000 n 0002236740 00000 n 0002236076 00000 n 0002233523 00000 n 0002236371 00000 n 0002236494 00000 n 0002236553 00000 n 0002236617 00000 n 0002236681 00000 n 0002463872 00000 n 0002251657 00000 n 0002238059 00000 n 0002237884 00000 n 0002236878 00000 n 0002238000 00000 n 0002239514 00000 n 0002239339 00000 n 0002238145 00000 n 0002239455 00000 n 0002240729 00000 n 0002240554 00000 n 0002239600 00000 n 0002240670 00000 n 0002243673 00000 n 0002243085 00000 n 0002240815 00000 n 0002243201 00000 n 0002243260 00000 n 0002243319 00000 n 0002243378 00000 n 0002243437 00000 n 0002243496 00000 n 0002243555 00000 n 0002243614 00000 n 0002246868 00000 n 0002247039 00000 n 0002247208 00000 n 0002247846 00000 n 0002246713 00000 n 0002243798 00000 n 0002247373 00000 n 0002247432 00000 n 0002247487 00000 n 0002247551 00000 n 0002247610 00000 n 0002247669 00000 n 0002247728 00000 n 0002247787 00000 n 0002251721 00000 n 0002251237 00000 n 0002247971 00000 n 0002251353 00000 n 0002251412 00000 n 0002251476 00000 n 0002251535 00000 n 0002251598 00000 n 0002463997 00000 n 0002254940 00000 n 0002254475 00000 n 0002251846 00000 n 0002254591 00000 n 0002254650 00000 n 0002254705 00000 n 0002254764 00000 n 0002254823 00000 n 0002254882 00000 n 0002256572 00000 n 0002285703 00000 n 0002256456 00000 n 0002255078 00000 n 0002285283 00000 n 0002285463 00000 n 0002285522 00000 n 0002285580 00000 n 0002285644 00000 n 0002288418 00000 n 0002288807 00000 n 0002288281 00000 n 0002285853 00000 n 0002288571 00000 n 0002288630 00000 n 0002288689 00000 n 0002288748 00000 n 0002291247 00000 n 0002290703 00000 n 0002288919 00000 n 0002290819 00000 n 0002290878 00000 n 0002290937 00000 n 0002291001 00000 n 0002291060 00000 n 0002291124 00000 n 0002291183 00000 n 0002294213 00000 n 0002293554 00000 n 0002291359 00000 n 0002293670 00000 n 0002293729 00000 n 0002293788 00000 n 0002293852 00000 n 0002293911 00000 n 0002293975 00000 n 0002294034 00000 n 0002294098 00000 n 0002296814 00000 n 0002297019 00000 n 0002297168 00000 n 0002297320 00000 n 0002297471 00000 n 0002298044 00000 n 0002296641 00000 n 0002294325 00000 n 0002297629 00000 n 0002297688 00000 n 0002297809 00000 n 0002297868 00000 n 0002297926 00000 n 0002297985 00000 n 0002464122 00000 n 0002301950 00000 n 0002302104 00000 n 0002302430 00000 n 0002302588 00000 n 0002302740 00000 n 0002302894 00000 n 0002303045 00000 n 0002303204 00000 n 0002303359 00000 n 0002303523 00000 n 0002303678 00000 n 0002303831 00000 n 0002308915 00000 n 0002309069 00000 n 0002309220 00000 n 0002305227 00000 n 0002301705 00000 n 0002298169 00000 n 0002303985 00000 n 0002304044 00000 n 0002304219 00000 n 0002302268 00000 n 0002304283 00000 n 0002304664 00000 n 0002305164 00000 n 0002311902 00000 n 0002309377 00000 n 0002309529 00000 n 0002309681 00000 n 0002309835 00000 n 0002309991 00000 n 0002310144 00000 n 0002310303 00000 n 0002310467 00000 n 0002310624 00000 n 0002310776 00000 n 0002310930 00000 n 0002311089 00000 n 0002311248 00000 n 0002311417 00000 n 0002313085 00000 n 0002308634 00000 n 0002305352 00000 n 0002311589 00000 n 0002312156 00000 n 0002312471 00000 n 0002312787 00000 n 0002312850 00000 n 0002312909 00000 n 0002313026 00000 n 0002315439 00000 n 0002315264 00000 n 0002313197 00000 n 0002315380 00000 n 0002316172 00000 n 0002315943 00000 n 0002315538 00000 n 0002316059 00000 n 0002458872 00000 n 0002316271 00000 n 0002316383 00000 n 0002316775 00000 n 0002317123 00000 n 0002317499 00000 n 0002318062 00000 n 0002318637 00000 n 0002319205 00000 n 0002319509 00000 n 0002320074 00000 n 0002336106 00000 n 0002336496 00000 n 0002355650 00000 n 0002356255 00000 n 0002372982 00000 n 0002373525 00000 n 0002386426 00000 n 0002386922 00000 n 0002394473 00000 n 0002394751 00000 n 0002411992 00000 n 0002412482 00000 n 0002419607 00000 n 0002419879 00000 n 0002440328 00000 n 0002440938 00000 n 0002458322 00000 n 0002464238 00000 n 0002464358 00000 n 0002464478 00000 n 0002464601 00000 n 0002464727 00000 n 0002464826 00000 n 0002464927 00000 n 0002467466 00000 n 0002467780 00000 n 0002468057 00000 n 0002468364 00000 n 0002468714 00000 n 0002468975 00000 n 0002469186 00000 n 0002469399 00000 n 0002469616 00000 n 0002469831 00000 n 0002470034 00000 n 0002470208 00000 n 0002470382 00000 n 0002470559 00000 n 0002470734 00000 n 0002470911 00000 n 0002471086 00000 n 0002471263 00000 n 0002471438 00000 n 0002471622 00000 n 0002471910 00000 n 0002472108 00000 n 0002472403 00000 n 0002472799 00000 n 0002473045 00000 n 0002473237 00000 n 0002473532 00000 n 0002473857 00000 n 0002474138 00000 n 0002474414 00000 n 0002474741 00000 n 0002475038 00000 n 0002475356 00000 n 0002475710 00000 n 0002476186 00000 n 0002476720 00000 n 0002477174 00000 n 0002477451 00000 n 0002477660 00000 n 0002477867 00000 n 0002478076 00000 n 0002478283 00000 n 0002478492 00000 n 0002478699 00000 n 0002478906 00000 n 0002479115 00000 n 0002479323 00000 n 0002479527 00000 n 0002479832 00000 n 0002480101 00000 n 0002480405 00000 n 0002480729 00000 n 0002480993 00000 n 0002481259 00000 n 0002481577 00000 n 0002481807 00000 n 0002481992 00000 n 0002482175 00000 n 0002482360 00000 n 0002482543 00000 n 0002482728 00000 n 0002482911 00000 n 0002483096 00000 n 0002483278 00000 n 0002483460 00000 n 0002483645 00000 n 0002483821 00000 n 0002483990 00000 n 0002484159 00000 n 0002484330 00000 n 0002484500 00000 n 0002484671 00000 n 0002484841 00000 n 0002485012 00000 n 0002485182 00000 n 0002485353 00000 n 0002485523 00000 n 0002485694 00000 n 0002485863 00000 n 0002486037 00000 n 0002486214 00000 n 0002486388 00000 n 0002486627 00000 n 0002486860 00000 n 0002487093 00000 n 0002487326 00000 n 0002487557 00000 n 0002487785 00000 n 0002488015 00000 n 0002488248 00000 n 0002488474 00000 n 0002488688 00000 n 0002488906 00000 n 0002489122 00000 n 0002489440 00000 n 0002489771 00000 n 0002490042 00000 n 0002490239 00000 n 0002490443 00000 n 0002490643 00000 n 0002490930 00000 n 0002491244 00000 n 0002491557 00000 n 0002491820 00000 n 0002492063 00000 n 0002492306 00000 n 0002492549 00000 n 0002492792 00000 n 0002493035 00000 n 0002493289 00000 n 0002493550 00000 n 0002493807 00000 n 0002494057 00000 n 0002494303 00000 n 0002494552 00000 n 0002494801 00000 n 0002495059 00000 n 0002495321 00000 n 0002495584 00000 n 0002495847 00000 n 0002496109 00000 n 0002496372 00000 n 0002496637 00000 n 0002496902 00000 n 0002497167 00000 n 0002497432 00000 n 0002497697 00000 n 0002497957 00000 n 0002498213 00000 n 0002498464 00000 n 0002498715 00000 n 0002498966 00000 n 0002499217 00000 n 0002499468 00000 n 0002499717 00000 n 0002499968 00000 n 0002500219 00000 n 0002500470 00000 n 0002500693 00000 n 0002500945 00000 n 0002501185 00000 n 0002501387 00000 n 0002501597 00000 n 0002501835 00000 n 0002502047 00000 n 0002502383 00000 n 0002502712 00000 n 0002502949 00000 n 0002503218 00000 n 0002503461 00000 n 0002503700 00000 n 0002504016 00000 n 0002504287 00000 n 0002504551 00000 n 0002504690 00000 n 0002504810 00000 n 0002504926 00000 n 0002505043 00000 n 0002505165 00000 n 0002505322 00000 n 0002505465 00000 n 0002505614 00000 n 0002505772 00000 n 0002505901 00000 n 0002506018 00000 n 0002506133 00000 n 0002506249 00000 n 0002506372 00000 n 0002506501 00000 n 0002506626 00000 n 0002506762 00000 n 0002506899 00000 n 0002507033 00000 n 0002507169 00000 n 0002507307 00000 n 0002507444 00000 n 0002507574 00000 n 0002507705 00000 n 0002507834 00000 n 0002507982 00000 n 0002508149 00000 n 0002508288 00000 n 0002508413 00000 n 0002508542 00000 n 0002508638 00000 n 0002508779 00000 n 0002508819 00000 n 0002509000 00000 n trailer << /Size 2103 /Root 2101 0 R /Info 2102 0 R /ID [ ] >> startxref 2509373 %%EOF traits-4.5.0/docs/Traits3_UM.pdf000066400000000000000000115674601233213561600164310ustar00rootroot00000000000000%PDF-1.4 % 4 0 obj << /S /GoTo /D (chapter.1) >> endobj 7 0 obj (Traits 3 User Manual) endobj 8 0 obj << /S /GoTo /D (section.1.1) >> endobj 11 0 obj (Traits 3 User Manual) endobj 12 0 obj << /S /GoTo /D (section.1.2) >> endobj 15 0 obj (Introduction) endobj 16 0 obj << /S /GoTo /D (section.1.3) >> endobj 19 0 obj (Defining Traits: Initialization and Validation) endobj 20 0 obj << /S /GoTo /D (section.1.4) >> endobj 23 0 obj (Trait Notification) endobj 24 0 obj << /S /GoTo /D (section.1.5) >> endobj 27 0 obj (Deferring Trait Definitions) endobj 28 0 obj << /S /GoTo /D (section.1.6) >> endobj 31 0 obj (Custom Traits) endobj 32 0 obj << /S /GoTo /D (section.1.7) >> endobj 35 0 obj (Advanced Topics) endobj 36 0 obj << /S /GoTo /D (chapter.2) >> endobj 39 0 obj (Indices and tables) endobj 40 0 obj << /S /GoTo /D (chapter.3) >> endobj 43 0 obj (Traits 3 Tutorials) endobj 44 0 obj << /S /GoTo /D (section.3.1) >> endobj 47 0 obj (Writing a graphical application for scientific programming using TraitsUI) endobj 48 0 obj << /S /GoTo /D (chapter.4) >> endobj 51 0 obj (Indices and tables) endobj 52 0 obj << /S /GoTo /D (chapter.5) >> endobj 55 0 obj (Traits UI User Guide) endobj 56 0 obj << /S /GoTo /D (section.5.1) >> endobj 59 0 obj (Traits UI User Guide) endobj 60 0 obj << /S /GoTo /D (section.5.2) >> endobj 63 0 obj (Introduction) endobj 64 0 obj << /S /GoTo /D (section.5.3) >> endobj 67 0 obj (The View and Its Building Blocks) endobj 68 0 obj << /S /GoTo /D (section.5.4) >> endobj 71 0 obj (Customizing a View) endobj 72 0 obj << /S /GoTo /D (section.5.5) >> endobj 75 0 obj (Advanced View Concepts) endobj 76 0 obj << /S /GoTo /D (section.5.6) >> endobj 79 0 obj (Controlling the Interface: the Handler) endobj 80 0 obj << /S /GoTo /D (section.5.7) >> endobj 83 0 obj (Traits UI Themes) endobj 84 0 obj << /S /GoTo /D (section.5.8) >> endobj 87 0 obj (Introduction to Trait Editor Factories) endobj 88 0 obj << /S /GoTo /D (section.5.9) >> endobj 91 0 obj (The Predefined Trait Editor Factories) endobj 92 0 obj << /S /GoTo /D (section.5.10) >> endobj 95 0 obj (Advanced Trait Editors) endobj 96 0 obj << /S /GoTo /D (section.5.11) >> endobj 99 0 obj (``Extra'' Trait Editor Factories) endobj 100 0 obj << /S /GoTo /D (section.5.12) >> endobj 103 0 obj (Tips, Tricks and Gotchas) endobj 104 0 obj << /S /GoTo /D (section.5.13) >> endobj 107 0 obj (Appendix I: Glossary of Terms) endobj 108 0 obj << /S /GoTo /D (section.5.14) >> endobj 111 0 obj (Appendix II: Editor Factories for Predefined Traits) endobj 112 0 obj << /S /GoTo /D (chapter.6) >> endobj 115 0 obj (Indices and tables) endobj 116 0 obj << /S /GoTo /D [117 0 R /Fit ] >> endobj 120 0 obj << /Length 311 /Filter /FlateDecode >> stream xڽQn0+HؾVHU '!P!_{$;c 14? a01 }XRaa陑;WYUY?7𒍯=^j%1 'uۀD!-/RR;+0uWgJk7`q bABY^Cec{z3LZLTXcݴͱM·%  IU;uiz>-DtK'5 P^Dϋnz^\cKх?aPgՋ[ endstream endobj 117 0 obj << /Type /Page /Contents 120 0 R /Resources 119 0 R /MediaBox [0 0 612 792] /Parent 126 0 R >> endobj 118 0 obj << /Type /XObject /Subtype /Image /Width 111 /Height 105 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 3803 /Filter/FlateDecode /DecodeParms<> >> stream x]ktT>z\$m ȥ!TD jV|_CWph PT\"B$$6aIf9qfB%= By}; vo`!4ChVv[12 !HGiyg):QVd8SmsQAj2~~AH3qU:?!4[a6SRu ǎ7H'1"_Qq!JbBwx$I-S^QO>AO~( HAPU)=Ojjm+ v$~ئ"33zviJn[*.\v(/E1U`Ycֿ&y3g>=x$;GS@]d1YÓo"۾X6n8o2 ,c_܊U?y" "cdL5HfFj~}Q]H錩/Oxcq'~lӕ_ ţeW\| &cLMhdȶ9-՗ $ Θڳ9i˗>xa6>#E _h2$}앿"a\l߰0/"ޑҦ.*:UQyٕ~`:oYfxu? b)<̜>җ'rYgԾ6ngeSMkm>uv" Snhj ̌ry_ݚLM01@$(]vƏ{_{#&>4l|c.8~rK05bjԈm;14*:Ο3yK|ީT\> 8nd٤B]j맻]8#&[5TEUlu#u\/kk^6t=Zo`Ӌ-,R'*EP1#EQ DfsnlOYYYҨ!${G2yZ~\pN|olӋnϯBu-\$5˘TYgNR^\8gF{@|4Ņ0ov2֊^:j)D"zM En1]WfN@wǛ뿨k B|c!>8T'JԉaZxubOW~;c%dLynظedNSt~WX\f-pO',9UI21`xĥd  ,{ER"Z G 4PLq@$#15! G}\.-2kEfV=G15Q&ph!9Ce Cvj(# 5#GX:InHJZmڞU__(h݆' H7cHκ})"Db-&`i\eU?*YJ05 D S[GabDěrqEʪ9կm"4LwtGTدr{OPۿhj?:}"i b:/7yA@eK#$t13mj51K &^w !%PSSSֆlr{s^#w4DmQI S#3a@57Q; S#:į v4yR+A&P0j/))-&Z4S.[Z2d^!j8J01-j(T!05Q)"jԌ+@vpd"'4LuyC͉cv,@A1i_qLq|s4bvGz!U !KIQD1E3[1vI $00h6FL̙dnu˞?SScw\LGaʃcf-N]y/4u: c c PM18_h>4~h޽f l%&N^>?2=iC)9v!˜j>hN'N~(aİ}Wx+' u0?1sL _/>_nH ! x9zq@bzlLؘO_6Ac6~t=F&מc2\汋rh3.婓Jx`x^_>_mqKkj+-++Y.zw3TU+qܹ~M\_:pBI" D5 JcTubd!P%+~fz*EP]6R2;/uz] g,'Nd=C^n188D,dZ}W/)~ǎ/z~*0P]g*ݐ[{s]b76 $?`[퍘JTDDKŽ t "((}qqwZΦO11fZ XSXk71E~;{GbN#"k" r@4˗mrN"srLڀ?Vh?݁nw'?0l۶`bF4]2UU ;llgL bkx'ۄ&%QU#c*B{awE|DǶBhZ-f endstream endobj 121 0 obj << /D [117 0 R /XYZ 71 757.862 null] >> endobj 122 0 obj << /D [117 0 R /XYZ 72 720 null] >> endobj 119 0 obj << /Font << /F28 123 0 R /F29 124 0 R /F31 125 0 R >> /XObject << /Im1 118 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 129 0 obj << /Length 19 /Filter /FlateDecode >> stream x3PHW0Pp2Ac( endstream endobj 128 0 obj << /Type /Page /Contents 129 0 R /Resources 127 0 R /MediaBox [0 0 612 792] /Parent 126 0 R >> endobj 130 0 obj << /D [128 0 R /XYZ 71 757.862 null] >> endobj 127 0 obj << /ProcSet [ /PDF ] >> endobj 161 0 obj << /Length 1084 /Filter /FlateDecode >> stream xMs6)t.ѻDnL6!ɁkkI+VWqg\ZTIi~ M`7֣-Dw-TzP0m!|AD {WK }sL?qmo ,:}0]H܂27QlxK\$iI|g*6 kwIPZ*Lp {0o.BWpj*H*j I/Z5w=3+0q#i&Jr,0sA[qo d[pC8 w>ÝuM>L(;:y?S<էD=R00n,VQR :#Mx)5-yck]#B/ΦKKA"Lt>鋰Klhu7*ҥ9[$|-ЪH%Y3E^!7D2b1?ܝ+&3:#9pFv"홑Š>ߨ8&fuRIxMf}:Y6(kenQI?}N'ƽ?IQ^(k;Ȥ5dtfQ_~qgrRX+c j1.H%35r} o_;'cR\5%msvNu.^ IB~RMHMD9Ws|5ɩ|(.촞Ū7.5j1r[S_$6-60 1!{?RiN{ILf"Cd~Ę}P%&Lp:f/yDؠrRE]l)wnPXK/i]hQ$YIXWUXcUX@')EEgōi :IõC.ܓ͌r|4߽lip QQ/{> -ޅD'b}mc/րrm9HůV3"> endobj 131 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 527.602 178.799 536.578] /A << /S /GoTo /D (chapter.1) >> >> endobj 132 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 515.666 198.435 524.513] /A << /S /GoTo /D (section.1.1) >> >> endobj 133 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 503.711 163.098 512.558] /A << /S /GoTo /D (section.1.2) >> >> endobj 134 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 489.699 291.196 500.603] /A << /S /GoTo /D (section.1.3) >> >> endobj 135 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 479.801 182.953 488.647] /A << /S /GoTo /D (section.1.4) >> >> endobj 136 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 465.788 220.851 476.692] /A << /S /GoTo /D (section.1.5) >> >> endobj 137 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 455.89 170.231 464.737] /A << /S /GoTo /D (section.1.6) >> >> endobj 138 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 441.878 182.794 452.782] /A << /S /GoTo /D (section.1.7) >> >> endobj 139 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 421.998 164.333 430.974] /A << /S /GoTo /D (chapter.2) >> >> endobj 140 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 400.08 161.563 409.056] /A << /S /GoTo /D (chapter.3) >> >> endobj 141 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 386.087 407.349 396.991] /A << /S /GoTo /D (section.3.1) >> >> endobj 142 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 366.207 164.333 375.183] /A << /S /GoTo /D (chapter.4) >> >> endobj 143 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 344.289 177.692 353.265] /A << /S /GoTo /D (chapter.5) >> >> endobj 144 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 332.354 197.877 341.2] /A << /S /GoTo /D (section.5.1) >> >> endobj 145 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 320.399 163.098 329.245] /A << /S /GoTo /D (section.5.2) >> >> endobj 146 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 306.386 249.423 317.29] /A << /S /GoTo /D (section.5.3) >> >> endobj 147 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 294.431 194.908 305.335] /A << /S /GoTo /D (section.5.4) >> >> endobj 148 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 282.476 216.776 293.38] /A << /S /GoTo /D (section.5.5) >> >> endobj 149 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 270.521 264.855 281.425] /A << /S /GoTo /D (section.5.6) >> >> endobj 150 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 260.623 183.77 269.469] /A << /S /GoTo /D (section.5.7) >> >> endobj 151 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 248.548 261.109 257.514] /A << /S /GoTo /D (section.5.8) >> >> endobj 152 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 236.593 262.205 245.559] /A << /S /GoTo /D (section.5.9) >> >> endobj 153 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 224.757 206.764 233.604] /A << /S /GoTo /D (section.5.10) >> >> endobj 154 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 212.802 232.038 221.649] /A << /S /GoTo /D (section.5.11) >> >> endobj 155 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 198.79 213.309 209.694] /A << /S /GoTo /D (section.5.12) >> >> endobj 156 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 186.834 237.658 197.738] /A << /S /GoTo /D (section.5.13) >> >> endobj 157 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.948 174.879 315.883 185.783] /A << /S /GoTo /D (section.5.14) >> >> endobj 158 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 154.999 164.333 163.975] /A << /S /GoTo /D (chapter.6) >> >> endobj 162 0 obj << /D [160 0 R /XYZ 72 550.325 null] >> endobj 159 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 166 0 obj << /Length 113 /Filter /FlateDecode >> stream x3PHW0Pp2@ Br.WtB PK@B(WH(sr9pY(XY)01344RIQԌ [. endstream endobj 165 0 obj << /Type /Page /Contents 166 0 R /Resources 164 0 R /MediaBox [0 0 612 792] /Parent 126 0 R >> endobj 164 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 172 0 obj << /Length 2044 /Filter /FlateDecode >> stream xڭۖF}GK̒eդ{x! /qL/#75"-Os0aS- ]eM=Tk#->TMn[\cp+vepvQӔƭïa˯aSRL6d-!8=@K`1CFGA JZb4q8aw69(6}:xٖ2* ^9,tEXԯtd<]M6K?LBt\C0M>m&C|`)Ls#Z^L ƅ|&yU.uHhrp8bj/0 PpLZeBY i}<7[.r3\#h.{w"H7 >C55-r/Y r0,֛h}4' /XSЂpHP0<(4ۖ㹷Xk+#y,لmY nP& {&| P-k/ś|0;ɥQ>\禽]v߳Tz&'}kH |i{6FpW-[7Wqʻ1V ʚ]Y<w!FS6DF<6>Mc 0l1dH؄;:Ht V t"sjZx%l*2lnlA6= IEњYݫ 08lccΩ&cqcб3swfgwg:FS7`a)Cc endstream endobj 171 0 obj << /Type /Page /Contents 172 0 R /Resources 170 0 R /MediaBox [0 0 612 792] /Parent 126 0 R /Annots [ 167 0 R 168 0 R ] >> endobj 167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [71.004 164.727 179.725 175.631] /Subtype/Link/A<> >> endobj 168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [71.004 152.772 157.718 163.676] /Subtype/Link/A<> >> endobj 173 0 obj << /D [171 0 R /XYZ 71 757.862 null] >> endobj 174 0 obj << /D [171 0 R /XYZ 72 720 null] >> endobj 175 0 obj << /D [171 0 R /XYZ 72 720 null] >> endobj 5 0 obj << /D [171 0 R /XYZ 72 720 null] >> endobj 176 0 obj << /D [171 0 R /XYZ 72 561.284 null] >> endobj 9 0 obj << /D [171 0 R /XYZ 72 561.284 null] >> endobj 177 0 obj << /D [171 0 R /XYZ 72 153.768 null] >> endobj 13 0 obj << /D [171 0 R /XYZ 72 138.759 null] >> endobj 170 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 181 0 obj << /Length 2993 /Filter /FlateDecode >> stream xڭk۸ 8sEr{hעM,k6l3,^'9,Fp3ڟ٫?.U,Yr3K, Sflt| S-y ^RB 9y_W\I՟I%̊۟|d8g9{s+Hq 'K_AB;W#uY)"T坩+D붚y‡}^|4f]}\Bh 9HYĞ_=SQ2/0[&uE]uKi<(u=Ww_uW xR,H^f|!#Um}h G׭aGɫ5}9wX?jtYw40ڠA><"߳"g>W>PsSZXw4"HUNLb6˱d ODd;Ѭoc5fp 9_ЎxK U'(G .?1``_Nz?r.)6CvR˩8@%=eIs ,#Ǯ~'okwoKBkV!`ckAą4&f`ai|_UE<4jKL.rxkm(t^Ფ?>t[^WyuY3: 읱@9Ngwϸq͛tc< R#&~rK?4l(/4H^0- r1r(~:k%}n[0A%oԻߚbK՘;q;HmkEPgvfi RHYۢ6mG/EEaM};1VFUy1~La 2TUTR=$TX|ڗ0U \%HR>UL2N2r+Z^;hᩝx옒q-zLÉl8\,[0#@Q٢s&hzV2S-B+iIhD*0C ;H)_SqJLLJ13D*<uS9LtA2;T ۼ*T]1bE(uD}_!HÉX9tW|Xajg"z"TStKwjP'0cI +M _WRP 43(@Q0dQ/:L bNwFFr0O, NnWx ur 6 E(;ߠ/CJ3rώL0 <إ+s']x?vRhFvoZ)f X&Ҿt6_B8/9$~95Ab3?pm>:q4DỴŧRRk"rl!P\4wDžk a=@gQٟE2z5ovlp: ?+GyNtOZ꽶Z pۊÂ:$TWHb-h4G8,q _;u! ЦaFao0 8gaaژom1o΂j|SP(YT#On_]X8"HBl1wa'bhY(4"Fy# `)dX|ޟefy9z9Q?'㘅&Y@DZ8ē"e>*p?,H :-ڵIp,rF(^[%:ăxe*1_Ʒ?.oozxI@`{_; Sa\ؚ/^~zPhU,C#Q^ư Z c8׋s3 '= @%&P"M_5Ņ"`q`>lpڻe9P%9(@~RLsҏ@)%|2M̒W$tz%MAgA!iPp/.C* hKl*WJ[J9mixy&b^2z1}lx/nn?Oo x?Z )5 j  jE&Bw[-:F=8=>!rs8w1]7 ݸvG%J[AU厦0'<}ymxT & 7g%*NM+ԛ Fçni[M)?!D9 endstream endobj 180 0 obj << /Type /Page /Contents 181 0 R /Resources 179 0 R /MediaBox [0 0 612 792] /Parent 126 0 R /Annots [ 169 0 R 178 0 R ] >> endobj 169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [300.652 706.884 366.835 717.788] /Subtype/Link/A<> >> endobj 178 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [165.693 313.912 171.671 326.404] /A << /S /GoTo /D (Hfootnote.1) >> >> endobj 182 0 obj << /D [180 0 R /XYZ 71 757.862 null] >> endobj 184 0 obj << /D [180 0 R /XYZ 72 618.292 null] >> endobj 188 0 obj << /D [180 0 R /XYZ 86.346 105.525 null] >> endobj 179 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 192 0 obj << /Length 2444 /Filter /FlateDecode >> stream xko8{~Ed QC/hwRw?\1mk+K^In3Җy{0)>͙H̙;y}䟯x^șN$^ g;$an#8q5ZP&>sײ<+U**?}03wbX/f-O>Μ8iUK'hKɿOw;Թz݃%^~%~r p}## " x~w)Kk1 ^'ȍrf;A[q0^'%+(tPtS~ 4?&coo/_\L/ dP)=-mGkEW٨LU*Sϴ-@B#9>0%6xn4K`1k ^XAsFbPd/^}z RJ.ZRɘN wv?F]G CaOZA?Iˎl>l@ych9h_.<]X.U3YV7 Uʹl!jf̲#Do}Cl bi! xDkQ[tUl=#enzgF_:OX3GpbГbV`d4y 7?r|KDl=Y?u yNw,Vj{`?s3z++RƬ7\ ljmQ 0U)1Mں:BPoy$M=_eOQuĬnk3GOljڬ+hQ99vbXn2V$8b/LA ᨁdyd\Má'0J{K{qxJtǑދu#bڂ ˴i`dg]GĞXc]p?+ދ]:>\$[y|biuMqTt i`]Դժn6Eז/E7 Sͥl&~KHEr4 _' Rԛ̡G'0wU npnynI@b"WגBy@ie,Byif|vHh+_uQQ uH#g-Yt]f:V6to hA:X[2B_G g@ox6pe Rf}N/~ߙNK$=`YGFgv41bVוqj Vpps+ezmn2E+ ,+eg4*)DR ApDS|-r5UzHJ=\@\U+RWIq ۛEAC9"BǦZ/f_eq1'0=<ۮ-d ,*E.!aَ3@UJk.I&z+{\J dNQ%["LRskH ci0 eK0fL-ڪnY오le V녡EmwucZaM  Cu*`4&U GCDV3ZԷnZN&X B4p+3IOSٲmF? sxZI @{0}Gw;ٷW|Z*#Ψv`:z.u{6њF}̽iΔˊC}3ūw&=Wkb`Uè/ӘSz tRюK'o|~ܵ`ƽ48m;,޶TIjV *AθqW56CE6n>wcv:uҘƬnGe7Oat-p{ȴ.:zSX\GMI+ endstream endobj 191 0 obj << /Type /Page /Contents 192 0 R /Resources 190 0 R /MediaBox [0 0 612 792] /Parent 195 0 R /Annots [ 189 0 R ] >> endobj 189 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.878 342.066 350.622 352.97] /A << /S /GoTo /D (type-checked-methods) >> >> endobj 193 0 obj << /D [191 0 R /XYZ 71 757.862 null] >> endobj 194 0 obj << /D [191 0 R /XYZ 72 329.125 null] >> endobj 190 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F67 187 0 R /F66 186 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 200 0 obj << /Length 3214 /Filter /FlateDecode >> stream xڥZ[o~ЇȀW%uW>IN.@iW\ݢKw3R''Mp4#e<"o7~AUy"-J:!-E8foqQ |?FߪVpUVY3{GonFª"J?7 Wy m?nk,|i^IRD")H83ׂκ=$E.g46BծÉ~evOo5:F4m ~S8 oe`Tᬗ7&q&'q@mA5;Up2DM˰.Db"TDaQ{+AO ;eu[6amk:-vB3h,1ujd™gV#>8fi3Yym򤵩ٻ{g/ji4(4^r`йpjdDcÿ1"~v(*Iȯ1&%ØoLVxenj1iv4TǣRɅԏ< 1"lxҹNqønf5/Ӱj$v3o g@N:|4N,@0]kusB(D|\ۅ1prg"=Vsyh5Ѵ2VÉ'=k%žGvqM 89Rk +5oHxp0Q. j}0B ^V2cxx9RIibe>57X&qiU811pt Ϧ]̈)H79__ 9@ .q" %* 09/a3JJ5.K3=y73Q,b 4AVyF -Y7 d8C}sY֣rd!:iba+b5u 2V\' +{>x1kMiŢĪ_oZDp\ ,DTCjak nI@cаfoQUI+3,ǴQ=  Pxx@_#_]U梖s>|2 Ug>Lc9!$ѵ[Zg#c x bK$n"x+{Gڗ}ɱ˺5jKquK] T+ FoR a߀e8 ~iVCSa Iŕ9|ry׊MQB^IIO68N,MiEx9׎EY.Lػ.w29D6E ݺw[FE?@|(I FH܇R(!CEHK^ReHH/HuVU/1 |S7< y_'eYDy%ASm4>p4A>`R/W_z5SS>)sQsC{:""%hSi?#6:DӏVe5$/6 ؆476Q^GnOX>?RD"J34Jцr/{fnILl'S4N[it'|dGYTX("y[ľb.ʻ>5Ơmo2_+s6%Q&$8vjng9E {6uV̦x ? rg;5+0nGgCAr I32^ C-\B a&1CF%ӥIQl`/mb=i;Bwhux(q+I/wd,2FCU@|VeԀM\ k0@$1O_,s34W +^T^kjLS05(`ϓr Q5q׶K(K8Zt8oR@7~vVbICq1!W: endstream endobj 199 0 obj << /Type /Page /Contents 200 0 R /Resources 198 0 R /MediaBox [0 0 612 792] /Parent 195 0 R /Annots [ 197 0 R ] >> endobj 197 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.873 262.405 344.856 273.309] /A << /S /GoTo /D (reusing-trait-definitions) >> >> endobj 201 0 obj << /D [199 0 R /XYZ 71 757.862 null] >> endobj 202 0 obj << /D [199 0 R /XYZ 72 438.889 null] >> endobj 203 0 obj << /D [199 0 R /XYZ 72 438.889 null] >> endobj 17 0 obj << /D [199 0 R /XYZ 72 423.88 null] >> endobj 204 0 obj << /D [199 0 R /XYZ 72 370.998 null] >> endobj 205 0 obj << /D [199 0 R /XYZ 72 353.065 null] >> endobj 206 0 obj << /D [199 0 R /XYZ 72 335.132 null] >> endobj 198 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 213 0 obj << /Length 2895 /Filter /FlateDecode >> stream xڵksܶ~'%>3iNVd(c#$Ϫ/HYd2x^}w?ԩYcz$0xץ~uNUWCI2Wo;Λ Vd[[ۼ׾ZtŷP@9hIxOW{/Mzwkq {wϋ`ʵQ $h ]}Xh}U>ؒwհ 5캪-Vrxfᢃ+`]؞烣[l./`ꇪln_@p+,7Qq&YЁ^uڎ'w>'(n=n.8ce8AkrH,8`wa)s Ax?KsgYNі_R8RP8ŋᶁ{*զkw<vy͓jool׷(Ě-AN y〔AS?Qc۶w Z(Yy<q'ԘRV)2(4]J2ag \Q~(Ac \GHeo6BʬnH'Lt7K/$9יf,3XɵΣɸ5(纴+eÔ?̽tH!OT88kܓDPMk !^O $ b 1cwkh}>:kM)=-U>W_q'WXI!ೢ}}N5 XxHO,g\% Q/槒L>X|ᶕI7A`1z# s cf(IvZQX[)*طM]\nyi,Du4v:2r;R2w̶ܴ+:R@A2tL]i'hV$L؜h<g[:W8dxfC2i;켝~@y*|T#AIj*M(ҫTC̼,4Di E~(PAJa/VG 3T.X VYYq:6qP7'rN6:`$uleL] a-hK`imW X:44gSdc S!Lt}e0`$hأp 7x)H3KQ'~wZn (]RX6YʳĥD!G%/gWj\_`c1S3kX`5%Dǟ!L-lTx endstream endobj 212 0 obj << /Type /Page /Contents 213 0 R /Resources 211 0 R /MediaBox [0 0 612 792] /Parent 195 0 R /Annots [ 208 0 R 209 0 R 210 0 R ] >> endobj 208 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.921 201.912 217.899 214.405] /A << /S /GoTo /D (Hfootnote.2) >> >> endobj 209 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [287.605 189.957 383.816 200.861] /A << /S /GoTo /D (other-predefined-traits) >> >> endobj 210 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.216 178.002 148.124 188.906] /A << /S /GoTo /D (trait-metadata) >> >> endobj 214 0 obj << /D [212 0 R /XYZ 71 757.862 null] >> endobj 215 0 obj << /D [212 0 R /XYZ 72 408.063 null] >> endobj 216 0 obj << /D [212 0 R /XYZ 72 394.126 null] >> endobj 217 0 obj << /D [212 0 R /XYZ 72 178.998 null] >> endobj 218 0 obj << /D [212 0 R /XYZ 72 165.061 null] >> endobj 219 0 obj << /D [212 0 R /XYZ 86.346 104.44 null] >> endobj 211 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 224 0 obj << /Length 2168 /Filter /FlateDecode >> stream xڭZ[~_[p%+Vl" Q91n~pD[*|j22$#sqM9/Q 7 *zūk|9ia, Tӥ\oUP,]ř@`B)kau%&Şl "P&_agP"$p?D}28֪lgNX੓ߨB s [ }E0n_;4 S"{Lgc"{ܲ]oim ES(b #.Y B"lC7MWμb:ބ7p-ab:\X_nǗ&B7B۬YzI2 kdt#MPO*LTϙmSw\JUc^R%(((cmDT P:D@T9uQ"!bK!B"-DD Q:D@D9FPO!pc1%7x,&"00jnW#Gpq$ȋl$I"?c%Q'ɶ3$~yY◂$jJZUuC_Ii8H­uPS4rG]d AGz_B0ϩ-JW*02*zo1͏/@ڢPbn2Nr kZ1TcqaQ _FxaœJmEԊmٚnqA$:ֽ X0 aDR?&o35΢Fhf1)3,̇3sXVѴ!V-3 mbqtIm4\;KU[JLr D.2(Cn Dh mt}`Ӈ+C#.Zt1`:udp^󜿤.#8w tOQ{azlʗ.Q%Jf IbsvXR.V҅ uߓEBebQd:iѐ%W.('-Fr 354 ٰ$-pch;Bu}PF$U^ @X07K0z1;E:oUa>ɳPlh>؈wtu{,0}2Sl*9d09ey{ؿjѼB0jgi_z74+sU_[۷OUT)ۆ̈/g6uW*r]LWH><ѝO$ 2+0 endstream endobj 223 0 obj << /Type /Page /Contents 224 0 R /Resources 222 0 R /MediaBox [0 0 612 792] /Parent 195 0 R >> endobj 225 0 obj << /D [223 0 R /XYZ 71 757.862 null] >> endobj 226 0 obj << /D [223 0 R /XYZ 257.95 698.082 null] >> endobj 227 0 obj << /D [223 0 R /XYZ 72 681.988 null] >> endobj 228 0 obj << /D [223 0 R /XYZ 72 546.264 null] >> endobj 229 0 obj << /D [223 0 R /XYZ 72 532.327 null] >> endobj 230 0 obj << /D [223 0 R /XYZ 145.623 439.876 null] >> endobj 231 0 obj << /D [223 0 R /XYZ 72 425.839 null] >> endobj 232 0 obj << /D [223 0 R /XYZ 72 323.924 null] >> endobj 233 0 obj << /D [223 0 R /XYZ 72 309.986 null] >> endobj 222 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 238 0 obj << /Length 3015 /Filter /FlateDecode >> stream x[۶~&pEp8:m׾qxu E$Atd|cB  g3<˳G/I$}.3xY.W˅ IYQΣIRG3F2*&ƠOƊĩCjAM%% zT]`jMT>֭7aJVh{'j UBFJæ E{sJ/ 14i/&{l\Xz69CaqZa6ʞWQ{ve^c~[ 9mn[I[EmhN:V~@)mWn 3T>>%]r"B'5R9&EיV0>S#|-q\}qbTkySU1hØ*FUEP.з1Iye>f^]6As q*7y cHw+-t)쪾 eUTTMK0_g+ 'SyJIy,xwmogM3]fM&wOB UXpj+i"- <ЙsvǒEY=˜~_gI-752{UAgB JSݙD:͒WPDyӳծfSK0DYqii ▔ omj:(eҜa &0ʖ cQI։Q/B *j*@; 7Q&^\Z"FIy'N$HVp摏ʖ*pkPB;c 0B%qe`s߯N )Ȏ\b01wC_6AQAHqXr#V[o=+a-,BQiX4H xiZh5<.a5"gsw֩8(s= qSY Ճ ɪ<*YJyRNbm I04cO6vﰭWzᶵ/v#(nB7E݇x< &VB!J4*6~+K= V(=rQ Vѐɢą 8: "Q[nBU]A؇{ʻI2GRTi)3RmYCvh֧]G1noUyajUX@A$p[oC=YאސR1ˎ~e 1 ){kuv\鉑SBt$JSM>⣕ַu>G֏"{$HK1)EFcr. L<~\(m#(~Ayo0h=- 1vukm.ۣ%^puJ$rUl]x1 ? 2b6Z8-]=IQ`.:䒜!ŏ.5Ѵ{4t -,lk6PUm]8,Bĸ7}dgѪP$4`*¼Oq]A<\ǃz2N~E_\F@Сݠc^l+*K$yƀQ8 ֨lr}O& 2Uσ 9gѓġSH Y:V7e^`yY{O]/Nۓ;)f^!7o3KTwbxc m?8E} -$>|+Ѳ򁽕)X>}d/ */|z,L]}("/A`y#)U_ עFiQqh!U﷦bZVⰼٗh64G} EX}4 ow&Fs &@41i 5Lkm5>_Bzd_P/ꀲC9#T]zAR[_߇ Bl:O[?OwLMԴtf)N,%AL3z}ӀĔQk[ i:um'|н{su^8W]h0ORDumE<k˻`Rޫă۱Ťuu79 LX |b5k7yW$x#ԇ[C U`x@1E{ (/<=Ze>!``P$&Au3hR>ouM@|o2NwIH)OV) 5 W:Sx֩N>>XZ\0GȒL2ߡ=N .|Uī& 0s*5 endstream endobj 237 0 obj << /Type /Page /Contents 238 0 R /Resources 236 0 R /MediaBox [0 0 612 792] /Parent 195 0 R >> endobj 239 0 obj << /D [237 0 R /XYZ 71 757.862 null] >> endobj 220 0 obj << /D [237 0 R /XYZ 72 497.28 null] >> endobj 240 0 obj << /D [237 0 R /XYZ 72 483.342 null] >> endobj 241 0 obj << /D [237 0 R /XYZ 294.244 393.224 null] >> endobj 242 0 obj << /D [237 0 R /XYZ 72 377.847 null] >> endobj 243 0 obj << /D [237 0 R /XYZ 72 333.261 null] >> endobj 236 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 246 0 obj << /Length 3606 /Filter /FlateDecode >> stream x]w۶ݿBarN$ai=>g{HsZ-.T]]|D2em=؂ ދ}v^<{YD˛'3b1].g"WI9ҭm?oT>iCscw1j #+pQم8 @7@FDV4.aba^S![$⢜P/; 9Y!,bPa AV| ~WMR,;/i8n&i\R1ɯ6Oe`iV0VfNЋKO CV7+,ׯaMJ_z2i3^Wk;]g~LUum*{=O˻"[1eCLz'_ʤ[CId!w'C%!ku} |7=Ο?;foh0O6K8 Fh82xG:L0AA 1i vD*[1&,X@!DGFl?ǣrjlRT2 ɖNp Pώ&1D3@7Nbe5k|PJi#?'ҿ:OTG` hh <-b \_kbUnҪ1PQ~Xh;Vϔ&Uӵ 40 (u+=//RRBk7h5:]%2O+qLOb$G6q9@DA ȩng7}ޤ Z5>gXCk!ܥUc 3y9,CX0/%6CB=c+)K]c$ng:2ԏ?"Q8[v H0O&so \cEdMR܎Z+# -lw/N[Ze+Ȁ~h:_^ez>Uӈ> [[QhraiV Tb^E>{lMʅHSvyK؀ȓFlx"OP3hǑBZ[Kջ# ntmge?Lmu}PZ0@}hUQlWe^V#(kŇ:J%^2f(fw&k lĀ]@o(49,gH[9O:䖀ELoK|ӕg!㋣an@Z5"(bȶcwٲY]m}D~A{Uݮ1! ݑS~ P / 6[4՚n7_: /(h`} I-Ӝ8v߼βx@0A4d sV.G5DO؁w _Ls"'嫬~R 3NaۭiVQȭhlLFx`1fw]C8b0/{ד T GTEQ{P r뽇Xߟϱz<>pb'S4&YާM=s|Qg1bu^!wus @R~|YIE1lŽBuKR,un}8x`Z O :_67oS]F~i;if4wVY;k'\MziGH*Ő.ɝfbpvUvZ?Pv/,}PkD#gEBjϚJMSerzۤnUʾg4ԫRFuqsNBuN|ݺȢH37T7jBy,5J::Et'fZ 0vfTo%u`ꠌj'aI_5}Q+i?e'KaMr%8Myr֬1MN7 }e=#y tvRҁ~}xH;q'Z$riͪPL ʧ8t@(Jm`~~R'ea, bWI+ /l+[椢[jf{XPPӦrLDQ!ܣF%h)5ı?kpeeZl&.JyyWv"ܔCFEG6rOe'LaI&lf +O*Pf[yd{A)TF1I?eS^/G_wn[zTX$,/jk 'ʩNfbRyJl?wV#Ăpcn6U{<U5R5ðW mΙ,Y]R: A!8+/!y-ʽ+OpG0J6M{-Vr u endstream endobj 245 0 obj << /Type /Page /Contents 246 0 R /Resources 244 0 R /MediaBox [0 0 612 792] /Parent 195 0 R /Annots [ 234 0 R 235 0 R ] >> endobj 234 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [1077.916 575.143 1140.481 589.091] /A << /S /GoTo /D (property-traits) >> >> endobj 235 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [104.767 371.905 110.745 385.853] /A << /S /GoTo /D (Hfootnote.3) >> >> endobj 247 0 obj << /D [245 0 R /XYZ 71 757.862 null] >> endobj 248 0 obj << /D [245 0 R /XYZ 72 348.194 null] >> endobj 249 0 obj << /D [245 0 R /XYZ 72 348.194 null] >> endobj 250 0 obj << /D [245 0 R /XYZ 86.346 83.914 null] >> endobj 244 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 254 0 obj << /Length 2338 /Filter /FlateDecode >> stream xk !A`8"59ErI$(.APYr$y7_Pmoo8H ys830ˋ?_^ʂ\JUXhQ&\r֔}74j-f ;S=#*LWvxˋ/$P D" `xc,u gݵ $ ^"sk%C8~T<-iN;~ XN_nUt-'jWUw[?%0~&d 2#T ' acjs lƱRmj@}3>0)fDFצ^Ve}혀}0#7yq 8%YAŋV{!p'[I7m6gAdN$Cg_7u/SvlQnM{At$^R}yJ9wqdzZۄe a] F)Bq^@dY<^/< |M< X_P %=p4pߣBӉ#U|-_ϞURrU pUḄ =^i>HAB=Az+(hj}:bav ~0.ǤKusU\{:hrX1/TxG}FW~ T]sh5aRxS %̲>G5Xyy5ބRT89U\DP$z2}tPoVY, KW\7_3 (aLdi le6BnMWtkxղ^T%/.nkZn[@|GiB]72ؤؐpg֌k >2;z(TL[ ɽ2?ThhH0ƅ^RK"9 }ovit%vh5͗g!Kx[lC2ove۾G#5.uczR3E!"D 6BF o \(hٸ3 /pqlEVs]0L}mSq 4ugU(ë, 0-m 7WrTqGYxmKCkw[p% 5eACnƾډusFʶvjɧ?M:H}FBL .j'bbӼq31q[dԽ)N^g -mvS;]S V[|B%ݶXP rGsںKؙפ,=˃15N0QvbDEUD'tdD(LF%dFwoܒ Noovplӯ ״w_5?ݴ:D\Em/{(nПCp~rq;' B 6(yT&<<滏?8QA'))AAyw߼_HC<7~e6SbGPϊ:,{̣7詃pŕq\6MTbQ8.ldQ@&>Wer|y/'u_E'fx[> endobj 255 0 obj << /D [253 0 R /XYZ 71 757.862 null] >> endobj 256 0 obj << /D [253 0 R /XYZ 72 496.653 null] >> endobj 257 0 obj << /D [253 0 R /XYZ 72 482.716 null] >> endobj 252 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 262 0 obj << /Length 2203 /Filter /FlateDecode >> stream xZY~_PU+/6صZ6 Hf4.(!Dl!>wwZ[+JhAJ4PbEÎ_,i\~EgWgQ K("e}8 KR8(`#ʂ'M$kp;<ObfxW*Y$ }[)i4,OZ ~e?I7R,§R̪|R*7fSбJٕ8@o6 K3RYkjآȲu1!Aʑ6+QŒ%Zsz̾j`CHJ%qlvv5D89f(geP I;E;u)K^77[f PcdF }-wB2 +Wjl+W? e P2Jk{0V.Fl@/y[b3v ˎ[%Yd!'(%SN}lxB:&FbDFB^-~d8/U.fhERa(Kl#n՜/SδRH^p'{`  !7%wΛZ>ve3[xU9q]'c#7])e)Z1 OS*ƧZ$;6O_;[uBN]C>⭲ݗ"o#v\mX6݅u""M ;^ǡBlx@UQd C6En 8 [ۣyGzlY$YyP=]k6U7~bT h??F-H(--X):0#ƈrIq-RD*aH7^kCm)j vK'C%V\:{O(.XrFŒC{h!=,lT.O+#(EKL]{7DPUZ'@,\;z8 5 1|Z-k`LH֓w?@q#|"N0LԀ.f@PsR9+㤄U[ ~KSWԕeDnt VI҃ؗה},Dkڝ|S$7}}8\EIݬC\\wٹ5 dE|zY5ȭx;ަ)A)HRjDz^7QA^Tۗ~i,}t}s6JUD?3J ;Bbbq+0aBh?#rMX؛bڕ.xwx\G_!nD,Dzl8׀ T:8ܬY9RS5 2^tk"EH2(yA'fٳË{Ľ:Yuju)HNsYѧ iCsq=qym;>Yә^oo+ʺW35j թO> endobj 259 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.372 203.878 478.601 214.891] /A << /S /GoTo /D (deferring-traits) >> >> endobj 263 0 obj << /D [261 0 R /XYZ 71 757.862 null] >> endobj 221 0 obj << /D [261 0 R /XYZ 521.35 686.127 null] >> endobj 264 0 obj << /D [261 0 R /XYZ 72 670.033 null] >> endobj 265 0 obj << /D [261 0 R /XYZ 72 530.101 null] >> endobj 266 0 obj << /D [261 0 R /XYZ 72 516.163 null] >> endobj 267 0 obj << /D [261 0 R /XYZ 72 81.347 null] >> endobj 260 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 272 0 obj << /Length 3066 /Filter /FlateDecode >> stream x]o6ݿB=.eER4n]w-pH@^qm]VƷ7k7>IP0!9|G{7}{WA"Ȼx*R^S]ޛ2MVtrBQSkUK/YyNW4Ykx\rً${ҋ8E؏/{*M;j(^[Be}D WGk`}xbY7Ur1]g]F]Lk q7Br[oȁ_l견A+m#`M Xûή1yAesَeR,T_ˬل,OFB[Xms0Q vqn5.1H& =[nE ,܁>nX-:I(T F[UzCmC2reQܾu8Zk늺r61%xH@V5֔;Fdi`j44l͂WɋnZ1̊t BC=MF;.P, L.쵃X4l2ky5].jܷdIw@ܳ7r&MXq"ubb'ze6N2V^˩(qJ" 2P^ܜz ]CLX)`ԡRRfצ<+ЉVX93!+)Qsf $gץ!XmmOdg;ΖA)і-ٲ]USK6c'KG{èHeÚBL`M} -YR0~kwM뺆\Ѡb `tiԽy묵2ujA~kF!S6㮞ͼ6UCmV݀4-뙜)B:91j 5C<`1s!!siIٶJ0% W] PR }KskHliŘ -@ 2B(mD0k0;f })Q@ l43 q $X%]=r>P[lhDkEj|S, =(c[.r%`u-CþCrĻVPUGB%ZC_Z' :[E[+N֊9c5f6--x=#h JY%+P28RJ#*S3ytlh ם.z A'*G0A(- 95beyu^lb]rs|ml~ IPP`,!9P`Bu"GD,4GHґ餜$it,.7zRjJBfۇJ6Z8$ゅqț"LC7]ݺw{aooW{eF uSUVh-3p@ D$}zTzYMq[4t6jЇO%!c6$Lα' q+*@g[vLs{B֩ zOP/&)^C1r0nk7?8>~N0O``c{VMu<͌efhIYl;5rO anw&̒+rc3gE[PB["b"\8'" `imE 6D'X1[CQ1i|92bS_b P[uf_R)s Q؋l*)m3.]BQ9͊q A%EK9$)mKjpߙOhJp3Nѻo>lMvS~ ';P'b٤!W&e(D{ji+ZqؗG'8Rv=8`5pJ@8/w /4) \Jqcn9[U"1UvA =\U PɘHVu^8%- {sjH^m!?n77vYyr {%Pzs 6lWAF̶Oe>>;6PX^E/-\˜\W#5V́gh]7iwu>biΤߴSp4`? }I<J7qEeTq=:} 6_n:lTϤl9R~a4"fa\֮LĐ=ec,4/6VȱFayJ9$L5sH2Z *o.Aߥ2ʹ ;7w_(mnEAv8PX)Ņ@)c/S)ؚ@(#Bm]1{WPU7ol4ZؒP込ѤjCzwM^Tm%7l"]o BW'9_M?bi5Sm &ϬO{A94s?Yrc V5Dǻ(q|La8e\e`" Bd*C6fEAvQ"D_:P{Q֙oz*yuEuؙ/qQ)' "gU9BU)sڟ\Ѯȁ<)Qv7\BAïjC9+ݯ℃t~^FQ$daz!D 5 endstream endobj 271 0 obj << /Type /Page /Contents 272 0 R /Resources 270 0 R /MediaBox [0 0 612 792] /Parent 258 0 R /Annots [ 269 0 R ] >> endobj 269 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.175 431.46 293.198 442.364] /A << /S /GoTo /D (persistence) >> >> endobj 273 0 obj << /D [271 0 R /XYZ 71 757.862 null] >> endobj 274 0 obj << /D [271 0 R /XYZ 72 720 null] >> endobj 275 0 obj << /D [271 0 R /XYZ 368.166 416.681 null] >> endobj 276 0 obj << /D [271 0 R /XYZ 72 400.586 null] >> endobj 270 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 280 0 obj << /Length 1758 /Filter /FlateDecode >> stream x[[o6~@̑Խ늵ҭ,4(ʒ+Mwx%:s$/~%`g`t1%! ܉1ϙΜSw:[L b5tWV v7,? 'p䤫vfKbBZ9~C;oF8Z8r%5QH<'"IxGA###&?d28/N׼,H-X[V\e +EqHAG{V迖]rJP@U&$'7a/-B/(`c *+nf>BF֤554wZvh<酭ϙh~\{ -|lem> Z>^јZ'|׋Y„]0IHw)}Vˋ,YQǦR{ QkjuDq_X3x=3,H/j.l$wphͳ8k_ ƗNx!fHXSS7 '^ _nGaFOοgጊSh3>9 _B{}}IgI."GcDyo>>gf="#`TvCjǭ]'=Tr:|º7i~)xaIjJoX2|1h~`l>* /0/e?'"q|K[R~VƁPFBRxK}#>(xpi]vȽitRobLS&,dV0"ڠ?O0pŒJ~UV\lL\!|LfRdłpN-AXY%SvB rQXe gƨRFMa/K%#x(Ei*>C0'TN D^=[{/UuvaacYZieFq"ncy&zrέ r+U&bYf`¦ZWݚK ^7n./dVek=bUθ5e;GJ9W Mm." '1KYΫwq-b\:HT#匧e,bYj}l-jR]U"^w=;4 PQ( Ӵ4Θr`!s ު9}^' endstream endobj 279 0 obj << /Type /Page /Contents 280 0 R /Resources 278 0 R /MediaBox [0 0 612 792] /Parent 258 0 R >> endobj 281 0 obj << /D [279 0 R /XYZ 71 757.862 null] >> endobj 282 0 obj << /D [279 0 R /XYZ 72 332.268 null] >> endobj 21 0 obj << /D [279 0 R /XYZ 72 317.259 null] >> endobj 283 0 obj << /D [279 0 R /XYZ 72 130.713 null] >> endobj 278 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 287 0 obj << /Length 2438 /Filter /FlateDecode >> stream xZo_AB~@ZwH}HV[TwfgH؎Epwvwv33kIړ_tykxH#ykġ0ƋD.W{rHu>mEbfۗD[Ֆ -Og?\LS^a@2O&M7kQ߭gBRHy /z*%0Ԩ(n&&%Xo㽟R-]$)z5yY6Q7 IJsqo[ue-}R34`vS`8>Bwb67J7DnAc՛\&.N僤^F)6rEݒXŠ^ZF O`OD3UqECq1`:Er8#+W,֜a}F<.NG'MN*0=p>)qCbsayS!p;H2߬U93BMCfthCANޙH)H$L*;m Gul*%8'T&˖bsBmfnԷEv/+B 8:a"pڻmIamֵcd.F!Fz")P4ن{[o1G*D#4B7iMIWx8D$TA$lR檵;T8R߶*1p&છk^CmY\[`ޝ"gL G΍)qc97 0ET~l<,)Uw#epl]m5qؔޖSI7<ͻ0GMzs|$Vo SdXJaqNd|KZH9iF41] ~a7]R7ǏAp p{w"a$5_Dg<ߍz;RFϔuLJZټز0UD$Hrqd=ώ"oN,-3̯v}J3T{#M^[1K*~~ ݻFmAQb"}ֽM-A~?p*AT9(?F?< SBRKFݨ?Ԙ'49q#y.6uT nwih!th_ŝ#8Vd$={녭msN֏6;4 PI'ϣD$0yx`~BG/4EREM4?C/#~hc??J endstream endobj 286 0 obj << /Type /Page /Contents 287 0 R /Resources 285 0 R /MediaBox [0 0 612 792] /Parent 258 0 R /Annots [ 284 0 R ] >> endobj 284 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [198.285 497.214 283.674 508.118] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 288 0 obj << /D [286 0 R /XYZ 71 757.862 null] >> endobj 289 0 obj << /D [286 0 R /XYZ 72 720 null] >> endobj 290 0 obj << /D [286 0 R /XYZ 72 623.739 null] >> endobj 291 0 obj << /D [286 0 R /XYZ 72 605.926 null] >> endobj 292 0 obj << /D [286 0 R /XYZ 72 438.554 null] >> endobj 293 0 obj << /D [286 0 R /XYZ 72 424.616 null] >> endobj 285 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 297 0 obj << /Length 1387 /Filter /FlateDecode >> stream xڭWnF}WMTkm«H4Hi`bJ - ٝDҔyΜ9su꼚+ zb,2g.fu$Wl5~K>).PN2iU'jfr18a: x$n'u2q(q<< "lQBE_: c0 $n=gwR{Zj4RY+>|d25c$T8twv]V*+ ZЉ5fiը+SB9c$} {+զ&piR63 =D14P8#˜֮Vx@AjNdnj z0b.q}#jAFCc3ğA2* ]`QʉobRL љX?MXy>ERjD9x՛d*JD n95W>DgmK%^$Z[!ۙjPUFq){1 Ha0~'Dt L,nklc3ͤZf)U_yWWZ~gRWC&+mS Mo"W%>L!/S 6DՏKF | ŢE7.jV(Nz٫6kQ(( jJv"7ZvYVwVv9*yӍƻ0 ʑ6Ĭ(.>F86)=Z&kڶcaqB]˵S]c`!xA4Η< *^OؓlQwgF̺*J$kReseZ̳pqŹW[}J?R2\ej{cO/uQPC5Fv,C˖:,0mqt.uzy[-˦ڿ>2V{v`4#l|-Oyd =[D}tDIK/bL oO3 v4eƐLoCʌ>> endobj 298 0 obj << /D [296 0 R /XYZ 71 757.862 null] >> endobj 294 0 obj << /D [296 0 R /XYZ 225.692 686.127 null] >> endobj 299 0 obj << /D [296 0 R /XYZ 72 670.033 null] >> endobj 300 0 obj << /D [296 0 R /XYZ 72 520.138 null] >> endobj 301 0 obj << /D [296 0 R /XYZ 72 506.201 null] >> endobj 302 0 obj << /D [296 0 R /XYZ 247.162 401.815 null] >> endobj 295 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F29 124 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 305 0 obj << /Length 3281 /Filter /FlateDecode >> stream x\[~_ģ}I9IxOHZ@˯O5ͥ Jk-o7~w_(D, *9t!X@i݊HI?3o{S7~R{f>p /$* IO.ևǷbXx}qa7J=YA/Rwfs7byTaGp: }E^dk>7jcPa%qOY!Z^B0@#Kx |nߵ<8&㾪1s,@tVa}b0N-yxe'QY ޺ ֥+Jˌru(L Ą{y.dhF*dXkWb[?v,櫶j6V|]'qFqfLsxKRzv_.um$}{N2$H-¨"o>QVҮn60(ߵ3b3@ |ߪ^AHr`՞h}E. gU'Sc`}BR"ȋdSK0q-.VY[ iҖ7FxYTlq@9?qH1C#iR\hW26S!35}3H~;ƍ)l|yAw7NEv(/JhJ/}9>M5&!B 3_~ֈz'Alk>Aa^ s7EQ[a:L꘤ڌO =qUEޱ CO.v{ `!j)!"ќqjSy㆕Tya?r!Wn%o!;ո@ȡ?vպ0C;OJg&Uw0﬐'CRK?w-*;ir1slmdN!<7]a=AL,p8+;8~d muU0.baj6 @d{a fȁY6űnxEtPy*SzH6aJ'vfໂN3&W܅wv{`Ė]KB _B2 >CWt (y9{5J,`PkS Jym;:wpd`x=W @"T]H1|37hY\5ېg7ڝ^^N. M KРe` ۝?U}{a9 !,otkU;rbtPaPQ֩ȁ7P 8"N.d~CFu򹒢-mQtx:} K&38( 5_abF"vYd0aXW1փYKxNr;*W!-olxx8w!ì'nj AU]݈1}Vs攩жZ(Sy^uWXO@ c UJ;Kf3j;tu~J+# j֩c=U4tK(b.MՇpܫǡ!ے 0*9<JڲÊ9dsB'MytJvLܖ:<'Jnr^)}M {W~Vu<*dNTS:*ݭȒ!WslJWDGZ<7C 3@|ݕv@gYаMJ N>orYdʥ: øWeX̾zw*C*>S}(5wf̻C]u}ldgQ\j%ATO6po̗Y5Nx) 7Y }Ql!Q53:n[[қ (n# bODގ:ܪ9s&v E5Z#I9 ZRlQ]G؍ r{j,>8M of_3bc>z o}Af3muaC.vև AܧݢlUlt,7l˲eEpq;6[,Y Ap b^/)Mf1k!`)trƒu0`*B,BoypT|3sϣcjbH hy_Ű>= 򊮌$^ ]gtB{̠:|):z*iǐPjV}f6/_uNG@Q}I oo2tGS.듹\ϛ+;4y\fL;_~3 EQ\-Rp }TŲb+%! ?Ţ(~^/ͻw(';dq;.lec5~w~a\!MD ި*2*4_k 8"uapk8QqQ:ɮޜg- {6zZ+|=-)sMQ~ л z¼#5v\% ;31bJAHwW ߴ^*Tt2@ . endstream endobj 304 0 obj << /Type /Page /Contents 305 0 R /Resources 303 0 R /MediaBox [0 0 612 792] /Parent 312 0 R >> endobj 306 0 obj << /D [304 0 R /XYZ 71 757.862 null] >> endobj 307 0 obj << /D [304 0 R /XYZ 72 720 null] >> endobj 308 0 obj << /D [304 0 R /XYZ 72 695.893 null] >> endobj 309 0 obj << /D [304 0 R /XYZ 72 695.893 null] >> endobj 310 0 obj << /D [304 0 R /XYZ 72 370.914 null] >> endobj 311 0 obj << /D [304 0 R /XYZ 72 356.977 null] >> endobj 303 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F62 183 0 R /F31 125 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 315 0 obj << /Length 2905 /Filter /FlateDecode >> stream xZY6~_7Kͼ&q֩l6J ѡHǎ'~!8[`l4s7_Aɽ< q4ʼ(7wnV} lδ4wzNMetgxxj77_v`WhKts8߼@f{am&J2xVn}O%Bb{~'; ']Nm6C_vRmˎԻwW<)hԼ7geF(da5fbmаEy˦.$A?ܣ}kt{A?Jyy"4.Y/UiŁhиoyb.̡Gޔ= M]Mk $D;&jӂɮt9;T^׾4ꂼhIqZCk:ږc4`x ɱ:Q(4ڏ}x],2@\IO"gxy^Lm 3jp7*0H<}|իw:pΖ?{GK[p@8YI^.ES/6@lV NklA 4ϟéqg cfz3RΜ?{]g ~L'g\ʇ{m_j+ .lo;`ڄm0M~kqK)N`P]0Ga}6=) $tV{.8x#7rҡAVۣ|D1DDlѴx.ae"/?;L.qj lC*~qV2̤ɐbqrL7 rώMu ~=i ymEU[q)kp r% kzAʸ2-Z|Ę8Z!f]-Ⱦ8c -^^pӪhnC#s~''zLx WL/SUNpqhPјpBH8cdhIIG.0Rl?%.OM)VfoZEq?,OzFIB6Jo`̽5b- tF$'qS D RX=PR!+$u:)L1dVSajvk(HGxWΗܸ/Pxi6C7BSS<+1/~\e_= n%*|U;SSoH%lTΠOvcyYn_>BN,k9/tQs$A#T%#=`ӥY x!R#^z03tCٝ7'ǒR]?%M@>ju`Q+0tt(fMg4eD55(lR cq3GbEy'v=oŬudx s^aY_ q~©g' sDaҳ]saH6\:hPV`/±.d,׏n@4]W+7cVp5:w0e"oO(ͱxA6d?$b~+13^S š`Li"u4!"mcAC&8pʼ^66Ox6w;_lำC3`_+*2JQWs9mB&_XH,0 W:t@4)ڜHI9&5$B/O=;nԞrRcڹ|u DQN 6̢|;ar/yS@"k$\m2^sFa_R}D:XL|>(qfx!|1,~\ zc:DF5"9x*ţ|[Ur|^ 8g;$PѲ@8n'Z=ߝ 7Kbr{(q]˚o gJ&!_/pF$Tt5 X`m(iI_GOoUQp892m;d_^$3BVG2y @A%<}>y*O?:>9ĐԴ-"KC8ˮ-&kRi_!Ɣ- ZFq` wMoKʏ4MZ*ܒ] V/\2U]b<߳zQO^u^a\ CgqX_ K{{3F-5ܞƖx9!9!'|%RͶRD1e.ڞ2Kv5i]E`N/$8dvm cO" ڶhx:K[G6u)|t~۪OLx淡QM03s|[(A\ZS9{KQCÖx^Z4  b UϟB+5`#", *aM5BT\kϹ=sEY8Q KZ7ǜ{)qYQm[#yC ڊ[_sav4ucw7+Ԉ^g*[p#*l' L%+ n\JCROd/Ε͂dEt.Î1,& ࿲Y{(⴨8K/!DR}s endstream endobj 314 0 obj << /Type /Page /Contents 315 0 R /Resources 313 0 R /MediaBox [0 0 612 792] /Parent 312 0 R >> endobj 316 0 obj << /D [314 0 R /XYZ 71 757.862 null] >> endobj 317 0 obj << /D [314 0 R /XYZ 299.783 698.082 null] >> endobj 318 0 obj << /D [314 0 R /XYZ 72 681.988 null] >> endobj 319 0 obj << /D [314 0 R /XYZ 386.567 384.811 null] >> endobj 320 0 obj << /D [314 0 R /XYZ 72 368.716 null] >> endobj 313 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 324 0 obj << /Length 2243 /Filter /FlateDecode >> stream xZm۸BH?DbVEP\^=EXpmz,$6 %q֎s@3ÙgCQx7?ُ%:#"Ʉp fA"¹qgs+6dG+_7OnT:Ӫv8ξz7劃dN䃔E^W7D;f ~3ǫ^yVk_P}k\G9G < aȢ0,;j<{bD%Q1<ȹ5/aMLz/)#ʵu{(vt=I.dzusMLu-QS}ALC骘Rk >R"UMO’54z 8Kd}7/Fy?X9Ōx-`P@)i$rY1K"nY)QGͪ<֘bLOVJeQ G=y1)`")UόWdv9&Ӗ,1Igϵ;U؊0Q]7j–Ky@O`̋ ; Ԭ",`ZGKyi0)caʲ,3J(;%4HIA~6'C.rlU4z`X},[k7ugh9Ơ|"[ULrA(zI.|G/Nf^r9^|n<-X$a2g2Ͼj<;<ž[^\deƵZULآsE;F-"vu;gޠmه>mџ.Go {lxlAfs8X (My%m3WYEٳKj)JN.35׋o^c|qRwp7<]1׭UGw39yb&<τ{n^=@Wi9<y~6z}_ 2:^v{iaNjccnnD9N6z{ۮ q)hu,vεl6؄}1>fs{2_xșHdCBې~ӾʹȁK My4GE`tcptŀ(r0``<ϸػNA\KpO~a/6 ׻K)XJ^O0[`p0ŀS%F5n~('@*ў IjwM{Eu HamUU+z²A'6frAsp<ŷ^܍I!ӼE#S[YugMAO[ `qkNAzdS~٤Y}N>HSCǡ)Ua q&v\T]9=lXnȏD7X!47v(Hkݬay#%f9I֛{3K05,* רlUzY?ė1ԯ"UsM*٤ 3o,I#8Vȡ5eU/=oXQ0 PcCmEްS#]AϞV, ji4I-FDJs2-= PsQgm8kuF, sT]BhzKP*&S=wxݽmb{߉^/d="+j[7#D3رK|4:ö[.xd,E YŠvt!BϋJ5*b44Gnn*ٝ {Uk;u@e7&8?Jp: + Z~7cںJpGEp /m}'5+fKh lh{5S`g4E.&p +apϛڮ w =p6gO7wlj섹SuQٝ`lYV܂5N6@Y/ZIfXjx1d2M 5MJIh! ^rII[(Sm@  ڗ66{1b:CHK;Vߝ`U>wێ|$&s䆸ύ+ygBS&?2|ᱤD5tCݷ3H6M֤L~L 1'z{YR_?`tNmN[V:J΀gK]'j0?+p8U7p"2#>v\p[h-Z endstream endobj 323 0 obj << /Type /Page /Contents 324 0 R /Resources 322 0 R /MediaBox [0 0 612 792] /Parent 312 0 R /Annots [ 321 0 R ] >> endobj 321 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [380.193 105.306 466.508 116.21] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 325 0 obj << /D [323 0 R /XYZ 71 757.862 null] >> endobj 326 0 obj << /D [323 0 R /XYZ 72 348.452 null] >> endobj 327 0 obj << /D [323 0 R /XYZ 72 334.515 null] >> endobj 328 0 obj << /D [323 0 R /XYZ 72 186.448 null] >> endobj 329 0 obj << /D [323 0 R /XYZ 72 172.511 null] >> endobj 330 0 obj << /D [323 0 R /XYZ 72 84.449 null] >> endobj 322 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 336 0 obj << /Length 2783 /Filter /FlateDecode >> stream xZms_1ϸ;LƮ~3%4 ewvHH(h<-v;1.g'/^)"U읭DyIhDjlf&\%6ohsVdo&e9 %엳N^v"AjI$H/@xזj텱{w򯓀5EbԱX8|MJFr@:!~uu5OV['+- < w~KoʲAV1XX?PG^D \DF =E ijtbic.n *i%6'&̬vLaT"qV7s-as%켨+hٖ[KI# |n׀xYBG%*4u00F͢c뙊?)Cf} lYIJX!5 *h6v@2G |7 `1<`$"ұ2k~I5b#N Pl$.@TV-rn'0wA) 7Mgvw]O'D}3U^A-L؈}ngt;; #2nQĪ  7LrLzѝ;!d69apƧl ŖvV p`v/N:POmi0%3ƔdX8|rWNe{Q?\Cwlռ a`h?[,Bm EliSot "R<㤭8ur P4crf;Iuj4۴J&gVyD@ uB7 ea-D'W+E SYF'Ae„MZa>p˦5<.i91fB) R1MF_}v>%Jiڿ[kJ([I;uARb-0} gKЇyJ2-4ϐt\R8ʱ'5p58Dc+)FCFhihYž)Gs5:j3l1(hg-)O2WG[u`*<J躰k8Uյ6mw}#OpƎ}']MQl#l@ 9qAez\Va\﫝q `=b A#h!hX`lyO,xض ͨwCm)n6fi;Nxqndk۽)r H d|[eI{)R'7eYe2},\ )#g{)Y[`p6qWq4vI>6 76mFbsCk/is^ [3/\WM@14! D:!X5zUKGh}o-@W ٦xz̫Xoۃѵ$t__g확w:cMH!t<9o֞Aq(\C8mCqNǛv_/ZVNoG2 KNx/+vhe:V[ym/ҫG0|ۃv= {+}uQ_qW"\Bg)\b=k7sڵnRU0@:!Ordf~>fm> ޓ} .V*Hac*Vtm?TXӷ{ ?V :g.-觞L{%£ . Vs2_{)<ÊAV_9k/'>YiU,L>m'WB2=L{&|F&,R4F4g-]iGcНs I<{l?r{`򘟸RP޿GlIc*txi+Վ /2wP endstream endobj 335 0 obj << /Type /Page /Contents 336 0 R /Resources 334 0 R /MediaBox [0 0 612 792] /Parent 312 0 R /Annots [ 331 0 R 339 0 R 332 0 R 333 0 R ] >> endobj 331 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [500.133 611.549 540.996 622.453] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 339 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 601.631 114.889 610.159] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 332 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.373 569.706 263.303 580.61] /A << /S /GoTo /D (notification-handler-signatures) >> >> endobj 333 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.53 314.231 350.811 325.135] /A << /S /GoTo /D (trait-events) >> >> endobj 337 0 obj << /D [335 0 R /XYZ 71 757.862 null] >> endobj 338 0 obj << /D [335 0 R /XYZ 72 720 null] >> endobj 340 0 obj << /D [335 0 R /XYZ 348.29 560.904 null] >> endobj 341 0 obj << /D [335 0 R /XYZ 72 544.81 null] >> endobj 342 0 obj << /D [335 0 R /XYZ 151.322 421.44 null] >> endobj 343 0 obj << /D [335 0 R /XYZ 72 405.346 null] >> endobj 334 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 348 0 obj << /Length 2618 /Filter /FlateDecode >> stream xYo]w:759<ف@j*IYֿAe+}(Ù)\%4| :9%"SD$9Hη|Ӵ-[y=~LV(Myx6ޙ);Nξ=?4aI$͒4O %ȓ[{Hz3f ^%nΉf@?S$gA }#g<\NC0hR0"qJ؃2} Rdyܚd9<)-lWVIjՌ§*o֚߮t?M5(pp()TqMu/dќ6Eѣf_Wf~SyAr&\:M)~1gHg0""qy>[Ռs;^z51J 3ID3b$`Qހ)Z ʬJ?냁,!3 {U}[]8ެk>P7mgW7/]xe1v_mp@3uS۽QQV [H2lY<$PJ3w'c1 D ߫7ˎJ΂캉dT2+Zq607MUzg]`Atmh(S Y߃{y>6[kqsB& qrSt烖jܵKXֽ6VBR1Є"2BDK_<9ȰeKȃxLLty8Ľ֡ٚkS{4f<Ӯ LD\+CAL6nܳ끘[Ч?,˅a< R&>hS|2W $My7I3!;4PzBYĘ6lL!5~\_7mokf rE]M:,fl0%2:$YԶ][PzEAϟLvsz%πPg3rb{x ;L k[CDz .έ. ӜQc@m'Ui8!,h@~_:93R8WPCV,4'9%¹ʆxEq]n;Hn@ Mj67<9MNp^mzSyuљ q8]d##Uos?ukZU0-[%SMX?_KKZPvk!9x.b @ei F|-h '44Pk(B{V1)AP'H`W}q:P}BˇWS;:5 Plwwu_~ PPʁPGqcAB[Fw>jF0pJSuZdJwu3.]qРRьJU  <7w` un^M[k?nuk~Pw TWsS4mٻ97J F6*Ng^[9˅jy7/9^)v `P.3pE21#'?::RY'X`i*/Ghx}F1Mvq9vI"xYxY=BDcc2/9xO=yo9p޸h^qǥ'ch6fy&#a;A9A^,,LkxV0OXslcI χG} zf+g|2~q3R__g Ob2b|9NpItY^1'·d.aLP tS&!{GP>w`{4G<#َ՗` L_P(=2\XCA2 •׊m\evvһfKcca/G@BcR p)Px Jsƅ-?? _g_k6LFi~ ~'YN2@.#?n6Dn0Wkmܲ:XQxޭJPWq*q>/r-Sv8B[]V!+GK @(ۦc7]Fy1xdu> endobj 345 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.06 283.47 453.037 295.963] /A << /S /GoTo /D (Hfootnote.4) >> >> endobj 349 0 obj << /D [347 0 R /XYZ 71 757.862 null] >> endobj 350 0 obj << /D [347 0 R /XYZ 253.298 528.164 null] >> endobj 351 0 obj << /D [347 0 R /XYZ 72 512.07 null] >> endobj 352 0 obj << /D [347 0 R /XYZ 72 469.772 null] >> endobj 353 0 obj << /D [347 0 R /XYZ 467.961 155.341 null] >> endobj 354 0 obj << /D [347 0 R /XYZ 86.346 146.816 null] >> endobj 346 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F31 125 0 R /F37 163 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 358 0 obj << /Length 2365 /Filter /FlateDecode >> stream xڽZ[o6~ϯ%) ,n:mݢiՕ%$O6~! %cO>Hs΅thջշ?p$$\@@FDI,rJ/T>~uesFg4w:ir vy+\i,H*4X%agjDB3>\vEĔ0.B\-XP]c$c*(U$,=hLV4UI,cmRG%Q,; K@HAbA2t齧(QB4`T?N'X8 wq™#oPl0"@,(ҭkL($#'v@hĺ+n[c¢g[>WgxI8+BY.s֐u p|5z"f;]HE<D)?#SCօr|[y$ΝQY4;0ׅܶwXw=itP ؒ15m_Vт>S(b6M=94g[U*D)_ƉV7r~+FiieӂI@i2,k[JPFK1+K0uI"մy(qFb9$tmhg VNWEZ 8UFq`|,XIxrXVJ"-`%U ;F 霂l3g8h B¸=kv?hBv%ƢXlpyٹX sc©U瘰~s>#@d2_0wێ[FuVgXi]L@YvhSl760Ip=1K|-#j;8gQyD#1:">=5.`D B&GE|xsE#C .55sl}2NN_[uT`biw^-tύ> Fٍ"H|϶6XhfĠ_z:§, +Pw=+nAr2XQyo T!mm`v;gEkS lZ&pc_/=\`P7e J"-+s1*Ո*~mX\gx=QfT_D"B5zyΣ|H'&F|t(uw#zVdX7+:i#Lk9vHիZ59wzZ'Q."o9Ɠ1Sf(VŒɐpB@ObTwՊz.MuCG%Kq@g;wTBg#P^SXS:D/8hkN"xj{U.`I"%l'14=oQv ܄+-6QmHĶ3Tv׸#\ Hמ!;u W/eÈH8c +$y t >+C8\!Ղݞq.qBOMPtQtC+blV`_F?"\ "I\ Hp`_>Q1ZS٦36 @gd<+<<鷻N{ L{}3PݾRmP46dbG¾ܶ.+鶍G#7s玾H)`=.`DҨ'*"›G #OlӦ!FȚll%m|O#3)Ivbs1F7%O=Z&VG`ʄveV4|Rbdsy^޿Y{%pe4t spP%{>qa;_|>}%+41b)hΗwsQHh5/6 nКo+9s*s{fw|1)8G$X|3Ir8o^C<ڴ.]9ɰ`N{1Ss6x0)ޕ7^zSroSc4vIħ|FƢ\$R(jbHLh&=$Y-~O#s\k)υ`7i?8E endstream endobj 357 0 obj << /Type /Page /Contents 358 0 R /Resources 356 0 R /MediaBox [0 0 612 792] /Parent 312 0 R /Annots [ 355 0 R ] >> endobj 355 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.42 309.683 332.65 320.587] /A << /S /GoTo /D (undefined-object) >> >> endobj 359 0 obj << /D [357 0 R /XYZ 71 757.862 null] >> endobj 360 0 obj << /D [357 0 R /XYZ 72 720 null] >> endobj 362 0 obj << /D [357 0 R /XYZ 72 639.903 null] >> endobj 363 0 obj << /D [357 0 R /XYZ 72 625.965 null] >> endobj 364 0 obj << /D [357 0 R /XYZ 72 584.101 null] >> endobj 344 0 obj << /D [357 0 R /XYZ 461.545 496.594 null] >> endobj 365 0 obj << /D [357 0 R /XYZ 72 480.5 null] >> endobj 356 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F81 361 0 R /F62 183 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 370 0 obj << /Length 3147 /Filter /FlateDecode >> stream xڭZQo6~ϯMgIloч+-Z6} V2si"=N%J(HjDQ}{߿yTą&Tc,Pm^n(iYSe~(kNe9֖鱌o_}}{+;'2 qdQuz[@>JbUѣuR÷~UR"j6j_8ElG.$|K(=,?O]mq*GiŮj~MYф[NMa} |hc3ޕ;N,Bg-G@M2O7Ҥ.Ѻb6oL jpenlr: N@طAyMUԝzFj|F.aL,DiU`U1Q K@:"wYM4KRArھJ IRmbzm ܀hM~^ɣY/]q %Xxl@._VzK5JnQGv'"VR.v SaH0jja( &]e+PnM[;4,B>,hT滪uw)KPCnPgO ZS `Ā%B5Ú"U璯2ݹ@^ݿm5-L;si;}dy2pBʢ H/i?igYtTœB馡OAwW(D]77P/Hl: ځ6C[3GlFAQQj@ԉxN08Qo14o_2k17N~xI0t=Y7yhMlcPJ@iܘϠ\<䃢5[\*nb '[rDž>%m٪0%~|gS8P -;xM yCgaeOmk7]ݜ1 +OMc[{5 " wɨJ^7:Ivo0RH+u꾥8P,PQDB):cIO(Dcy״Ea0p}yt.M 1coS"rAK1a0o z- p`Zv3"Aܝbg jՙv#U^~b%dz|%Y 0\3}r%l ۹! ԁP-2K~VGb+rP:K;hmMq6dxcvw+1 ۊs{PCu="N @T) tYHcdU湧5/2W| Yx>uSJ:SQ83yni`2{h]\HR6W%z8ٮk헷@)\g;BoDR≗NUPϥnOԛgwJ)|HU%}Ɖ;<gr:ZFҭV.-Ec{!oگ͍Vq&V Ad-Mëבx @n"`~fך?y_nV(KX)9Uo? 6 S֫{+ZT(84V}z|~V@NZ|!Gg4e)xMo\\gO62S|pʃ~I,o*"QO꥟EŠxל/,e<03Ewv_޸G` .R0Ff WӦa8=w:?D)`X/HɏJ;)v_ endstream endobj 369 0 obj << /Type /Page /Contents 370 0 R /Resources 368 0 R /MediaBox [0 0 612 792] /Parent 378 0 R /Annots [ 367 0 R ] >> endobj 367 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.153 250.458 242.131 262.951] /A << /S /GoTo /D (Hfootnote.5) >> >> endobj 371 0 obj << /D [369 0 R /XYZ 71 757.862 null] >> endobj 366 0 obj << /D [369 0 R /XYZ 72 604.886 null] >> endobj 372 0 obj << /D [369 0 R /XYZ 72 590.949 null] >> endobj 373 0 obj << /D [369 0 R /XYZ 72 468.785 null] >> endobj 268 0 obj << /D [369 0 R /XYZ 72 468.785 null] >> endobj 25 0 obj << /D [369 0 R /XYZ 72 453.776 null] >> endobj 374 0 obj << /D [369 0 R /XYZ 72 251.454 null] >> endobj 375 0 obj << /D [369 0 R /XYZ 72 237.517 null] >> endobj 376 0 obj << /D [369 0 R /XYZ 72 209.131 null] >> endobj 377 0 obj << /D [369 0 R /XYZ 86.346 103.173 null] >> endobj 368 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 381 0 obj << /Length 2223 /Filter /FlateDecode >> stream xnF_AxDt.t,Z'&D>$1([ԒT{Μ!ERt0̹͹wq狟߿DK^$(Y(o>idu5( ViI|*0g.ݦJ8LL?^_BU GrwVL%wov^c\.J 8q7ߥnp& пM]b*AAMe7B6ſe=_aj&"( aZvd /*ӏ/Ӈ [|5(FAͪ:b $S\C۔fi )M#*BigyVgf>>Ί@}0U?-|];s6PM1'0 2%LKBMlnyYhG+ɳDP/"pI4p^ne5X b/h4n`zȉZ(k8W}Vog.c0;8U$aOƜ3S ܡƈxj.ol/JGcho[ln&j/S|_d fTI!?a!NrgYYշ)Oo y 5n6vusdm5 Rg3x4?h.Ϸ=+.//Px™l?EY/W*_\66vƿ| cxU.qCNڈO6p5[W[7!bmՀ, D*ǞQ.JmMin VEuf{H[$h%HjsŎ]Y|kTTd_3f+dQt}hLf6:fD[ޏQoow&ooYXSlڳk K2}wdt`"KWl g[0 qgJqHh-|2 ļ(Shzin{(B7ۦf`M9Cg,B#۹ԏPY3զøSu%'hnƥ}1GBQ;k-ћ=P.ڠg3ѱنX r0 It}%IR;)bf!0٧͔;,~ا״ڍ+\af/La6w:6 u~RGy;i=&^הx]> endobj 382 0 obj << /D [380 0 R /XYZ 71 757.862 null] >> endobj 383 0 obj << /D [380 0 R /XYZ 438.97 236.259 null] >> endobj 384 0 obj << /D [380 0 R /XYZ 72 220.164 null] >> endobj 385 0 obj << /D [380 0 R /XYZ 72 191.779 null] >> endobj 386 0 obj << /D [380 0 R /XYZ 124.074 94.344 null] >> endobj 379 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R /F37 163 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 389 0 obj << /Length 2327 /Filter /FlateDecode >> stream xZmo_!\Xxy|%*݇ &..p]WVH|C׾4 %pn<}{˓\y1Cz+ODE"A,˥޿)IZW9/J>g$;ÎtJ6򻓷'0Xz̋8Fbs'-;+֎xAy?:'a4%<fVȼ~tFP<d\~.):cS(%jb&Fנ>S }y.XԛKg6_7EDcLD@)\D$_G0$R͘,j'י\ vF0 Zc }3~RB /qQuQm,6ؗi&Yb:V|QEVhWԽM%evf@o(%2аp@֯z $YRU"h?r$`D9t] rBϵ΁8]}/$`Q!"gz41Nϔ32c~fw/FvVxǸ(x tvƮ(~ﶎ+]z9 (57 кV XF zyicv$H o:_"tsdI~\~vƗξx\ Xs9p+ٌE0ka8f.^lb&+g8FHۡ(ӛ4Oc ~Yn;|5v%gZ RC"GG&OxU$aQ74V'2~ƷT}} fLsIԑȊz4uC56kp5T"C%Dvsp!쪆ǀ' hWH@aV,}>ه4AWMF}$1&_灯Yխ֠+ ˴``c'9bͳ6MG贻L؍*D +$$Jm>32$w>`sH. "š,7>|CGpmXO^Yf**SvfGLl[$c΍ޖem˼]>&m>nt3:aҥA-*21#䯑lk Ÿǔ$13Рј27XDlʥVTmA*"b9i? \cVVyHMLWG96ޢ*|31ϡwVEiUb\1f6nm9$O @%?豙6.25È \>svv7"6}4{Ve=è8""H(2ɡ9C%gER_rU ^aHd}c}:P9fhkPV>oPS0W*-`7ҹAOիӫ˻gXƹ~(ztO84Wj}hmNUʭ,e})EDS{P+ 0?"w .2).g=R;y_Wn[ ]D3^}15#X=pҦ|͘pf7eg,*TC;q'd_?$"> dlG#9v'rZxߴǛ/a=:xȥ$,taFtћ٘}hG/AՇf/^xeF"~ˊUipoGp@SW`ߊԌj '1Ni֜fߤh'8QiviGxV-OIf4Ǫ$!*57_Byl ۯzx^ejzr1F׮ǯwg4B4Z͝Y-{ԈI:#ǶZفmtl?HݺD>i==yq;op>)bJs8944@>搓?~GcadZIߵ6u;Lj *r(:stE'mKy_`лisj]7FN 8Qq{=Jf {a,j]ESP4V.-" o7P"k/Qvk%Px޶6~G$u9HvKQ2ϣV2-#5yM4jh~1xwCLDzk@͞Ad@xxe/ '0ؗ8ч.KT%}`>cv^ut endstream endobj 388 0 obj << /Type /Page /Contents 389 0 R /Resources 387 0 R /MediaBox [0 0 612 792] /Parent 378 0 R >> endobj 390 0 obj << /D [388 0 R /XYZ 71 757.862 null] >> endobj 391 0 obj << /D [388 0 R /XYZ 72 720 null] >> endobj 392 0 obj << /D [388 0 R /XYZ 72 673.617 null] >> endobj 393 0 obj << /D [388 0 R /XYZ 72 659.68 null] >> endobj 394 0 obj << /D [388 0 R /XYZ 72 111.658 null] >> endobj 387 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 397 0 obj << /Length 1789 /Filter /FlateDecode >> stream xڵXYo8~ϯXDj.HmmC[MGjeɕzw3%[=M $7?ε#_OO^ؙyP|Dʉgڙ/7| JLUjSQHn ^$Ӊ‘d"9ɛwYήZ;~C;N>Xx OWҩ`HKI oguc \nv%ܲKBᅖ=™*d]*Ny{Snij1N&M,Rj6%-5̒no]!mcj4!fmʤew2.[5ebQH!豔,`UYtYA-Ŏ^I XvfnHrUs} CS 5uYP["i{Zl"]k$YM-iEԁ[ȓj"cv}#sb Jd TĂ_}rx*ؒ0;X+4[M tXS7֦i^QK< MZ 93Tn/jw g{RvCPʊєltcZPܠ [㾟g-Rjx:^*&nmy3 pk]֤h+"-fxh ܴC %q{XTVV<+>ZKcjqXX)6$y+a2f[!zv)|*t*̪lXPH_U%.DqxL==xڰ^ئ%w=r̓(/ؙ<~ _^hx|Jk"YN[0c^ x(SLp`O1 >wq@г̉aDۻ y5l5M9ki{@ ;W|,|wNd+ 4\mש-]e ht=DSNX}MErVn7Qt1(^`Dl8( fѭO,>Wmq."3-iI7Kt *rޑ ē> endobj 398 0 obj << /D [396 0 R /XYZ 71 757.862 null] >> endobj 399 0 obj << /D [396 0 R /XYZ 72 720 null] >> endobj 400 0 obj << /D [396 0 R /XYZ 513.849 637.851 null] >> endobj 401 0 obj << /D [396 0 R /XYZ 72 621.757 null] >> endobj 395 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 406 0 obj << /Length 2771 /Filter /FlateDecode >> stream xڭk۸ EXg~]k(K(heV#K>=voo3ξ,Fpf8osvt_IEȹ:*RN$"Hsq>WsZƉV74gV|uVt!W]N,a@^䇋z?;PiܚY'x·_.)ʟP|Ox*&VEWdeyBi b7gծv "ڎFUvdE2xmxuSviyaqzcv;Mq/<")2:*F!\k{e uiFyS\:\Bz ?H"e 4JO @]R;'Np C J2زn *ou+#\QFNkxZj!1˿d;e[3M<>/Jp  ,ށcIF;17S_y#؋E8 ~2"e_`| qq^ } z(c@_&͌TXvhZTb/a4xR",8mfw1x`+p"]֐S\NZIj :w@M5NiYB8~mDL=|+@3tۗp0cl"p]il3xAD#B'Dw hb3gC0d[̽T@Uq:8.<]8_ջˮr5Ӥ$*-*o5-kʖe.besb۠3jt^ȢؑC67&5'8֙k.0>|X&NĬ ;VLY%"#dxCEC0Ñґy"|qJ)dO џq'F;۳O|$p%Bٜb yu*8( . i<>5=_#Pbuzy&v ʱ'"M4#v.9K.xBOح+45r='ӎeBFEohhS4<\+|Hᾓ_>W0MuU 9g:q&QP RYh>jny {JY@J@E*ZAӪ{/8$6"d8_&uklmjKFP[.pC2qb/&"#.~u*2:Hݷ+e'S %)T\=`(, ?W5Rcފ_#ӅYN,0{ے>vvNxe]T ֹZHLMc>:H;wi,&v_`ʳLEdu5*\#N2//%wοp^.EGzNoy9\`WE ` vI-n' wMV _ s4~<:B\/: p(gVt_pm _[S67vN,D&j0jaj8=ݨFY J^u4߁$(Hʵgw7iƑpQ4t+7<~;hie{!Ib1.x1t -(| 5pSd 94YW Z#2AuvY+PtN> endobj 402 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.293 603.127 345.1 614.031] /A << /S /GoTo /D (predefined-traits) >> >> endobj 403 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [494.392 197.261 500.37 209.754] /A << /S /GoTo /D (Hfootnote.6) >> >> endobj 407 0 obj << /D [405 0 R /XYZ 71 757.862 null] >> endobj 408 0 obj << /D [405 0 R /XYZ 72 672.015 null] >> endobj 409 0 obj << /D [405 0 R /XYZ 72 672.015 null] >> endobj 29 0 obj << /D [405 0 R /XYZ 72 657.006 null] >> endobj 410 0 obj << /D [405 0 R /XYZ 72 540.427 null] >> endobj 411 0 obj << /D [405 0 R /XYZ 72 526.49 null] >> endobj 412 0 obj << /D [405 0 R /XYZ 72 116.629 null] >> endobj 413 0 obj << /D [405 0 R /XYZ 86.346 110.261 null] >> endobj 404 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 416 0 obj << /Length 1779 /Filter /FlateDecode >> stream xے6_[B KIf:iS)dy3=BGdz%sȻ"ճqaAcm=aZ$f7<[^n,^53n4୨qH6W/6Vn⺬4\?FIR6LȈrq g?8ފ/^ؖ-4ȅZ*]gI=pIEV|]E3WKE1C#zj:K^O4^ f#Mk6zs%?+չc YjN(u +QMwB~=)MyQ1^a6ʛ ^QWj^p&mN^WžqǐQG)pHø~,0;q8;2vBXCIvsmוw!fBjud$˦(Pi'v:Ÿ{̃Ѭ'Doڣ ճm Gh^vVjz11X6 Ѭum2R8\[[J-^R:MzȽGt qЦ,cbbPiqcSl%G_Hdbt p E@ 4QBf\.8" UaVp88\< /CD,x æ1܎Lf!:QbjAEA-27#/ 3V,rm MN5V_(KzA ^g3NvLQV@&;"JniSnj^3AtR ߶hbICSwjU"_P KC͈͙4kCn_7D?wo`J8qjO\@J<׭ ($C|w7$m <*(ti[(QB\nLSms7jnہWϔ(V߸S V]H7: ,!OgmAZTqAps8ʲP4\1{p& #]632@Lr۷j /L;NJ7 {޺D{ɿ[C}ՙ[ ̟4*7'O_3a*S[` m,P<3A#,:wghOrlX- q8*MLIA?6WU#ϥNi|7{cw:c%`R) ʐm5don\$Mi7 kNj0Ea=}`0͓bcy-Jq18D$U}a7Ns0|DҒbtJIJGOUsXkiإifBP=! %o!`|g$1si]noHFH|+_L!Qȶbbϙ[NXK-bqq*BciM*70O41q4}N]#P.=YiZWIH:սNb˪zʬQ`,܌: Hw(MhehIюÈ8qxir Rh-h4 SRxPOUS~re endstream endobj 415 0 obj << /Type /Page /Contents 416 0 R /Resources 414 0 R /MediaBox [0 0 612 792] /Parent 378 0 R >> endobj 417 0 obj << /D [415 0 R /XYZ 71 757.862 null] >> endobj 418 0 obj << /D [415 0 R /XYZ 72 720 null] >> endobj 419 0 obj << /D [415 0 R /XYZ 72 563.963 null] >> endobj 420 0 obj << /D [415 0 R /XYZ 530.925 386.793 null] >> endobj 421 0 obj << /D [415 0 R /XYZ 72 370.699 null] >> endobj 422 0 obj << /D [415 0 R /XYZ 72 298.513 null] >> endobj 423 0 obj << /D [415 0 R /XYZ 72 280.699 null] >> endobj 424 0 obj << /D [415 0 R /XYZ 538.087 133.297 null] >> endobj 414 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 429 0 obj << /Length 2795 /Filter /FlateDecode >> stream xɎF_A`D 98xA29A-ZPb$&fbnV=VzRT]{oVg_ҩYcoLxIaf{X]΋X$]~ؚG? ,y捕ůξ[vS^O[xRV0NYzo}Ձױձjxq|3?0 Ss\tl.`qw#hWDEpT|ʨ[΍Df;mUՅA{d lhnxnbaEzeèwM]غ{1S[ό(єd/G Z\buO-d~yՅi'}_9Yj3&w iL޻e ʢ}e ֵ[{i7E[aT3|y4i  b4>Y~FOHۢ:dvDvf 2 /jw#j%/ЮEeWw=! W!dH|SʖVmy(rҞk[|XDž( mϘ)An1Dz7'aLگlW2o=FDjWs+x3h]6?٠&¢\U#t{>x 0j^18c ̢݁-Y5y\A l(%#@^/YƟdfyw"S-TObcGt ࠙r!f1œ]I`e㡒@9l(wDfZANec Qeڋޅ[QF&Ohaavd V3#4p!nhqWy![&?cYVE(Vc[|RYv./|;rj#|ZX}W  n)? >I;t7 5?9xl08 T"# zHs8!{rJ w>!ndimc}h&jqDC`O1kT`|#yf JcSi.PHb%bTa djXG) lulRʹĤ %փE!eʨ$65R˜ ʩk 9d¢'.M TT#3 \\β}F9M45OcQc_Q?)|xW5(NIuQa/[xP 9?ZV3!Iw<`u0ۀ15zZޑC`٣GDbB%V ;j†eXb.]Uc8= JBR)Pm2a貫Pbl ~h=8*ySʚعiCzCWIoxZ-:HHi; 43MrN#aa. \؏2厤; \޷Dz .l{ L˾Z}mR a B^0V}7r7zB5~l] E8+u j$)e;%\h1ajXЮ(h]:fYҭwcWC7CǓbOIғMAxd]i &=foK,MdN]֘?K;bD~җ {s0veAѰ pX%ݒkEkMԝ _R4Vz;R~ Sq +ȼ;B?a)hiq0ȓ:&"bjq:.7a42 XA7 Qj'K?ALΊi zW&ia_ +.> q) KV*A}[RH阢;n )j. V64<U6YePXlwsIto-`;2 .rlA9^X̒[3DDޡqz+ޱjip5_stqݡB@/`HʧQSpLsLWPnx~'{I݀pJ{*>xxLSN!c2?Pjx PJĵOڀRC*wսFљe79%?s Vm 2#!I !Pcy#yg&ɘ`$AhH4pDA׻֗<)M"iA WIGK $9q"7Jl-A~ >$$PcXdp;]#N1Sbߢqّ^C|K ./?@:52T(l!=65_9h,56-;b¯*N%v~,jKvW/IXI$6ŧ.ZS=RFt/NHDA{$|]C}Gh 4ܦρa ݌~~v1~UrgW* -~OqKw32w 5Xcj7<[\Wb`>3~v.Bcf޺ 6}ށI7PЖ>C ?]@AǦÏTzza4lb:R=3 endstream endobj 428 0 obj << /Type /Page /Contents 429 0 R /Resources 427 0 R /MediaBox [0 0 612 792] /Parent 436 0 R /Annots [ 425 0 R ] >> endobj 425 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.971 403.12 312.555 414.024] /A << /S /GoTo /D (predefined-traits-for-simple-types) >> >> endobj 430 0 obj << /D [428 0 R /XYZ 71 757.862 null] >> endobj 431 0 obj << /D [428 0 R /XYZ 72 720 null] >> endobj 432 0 obj << /D [428 0 R /XYZ 195.087 488.412 null] >> endobj 433 0 obj << /D [428 0 R /XYZ 72 474.375 null] >> endobj 434 0 obj << /D [428 0 R /XYZ 72 374.229 null] >> endobj 435 0 obj << /D [428 0 R /XYZ 72 131.593 null] >> endobj 427 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 442 0 obj << /Length 1450 /Filter /FlateDecode >> stream xڵXKs6WHT|ĭdL($ DA;.^,Iɱ[&[b],oI8mrxvI@EJ` 2dqM1\E9[^u*Z,DkGW E-NQDϫ׋_Wv(YP?`Fȃ;4:xcp#2C0&Y_?O"C Tʄxv44gyOpXub찮T'6v̝ ֵSOB'ݯ7Xb|x )J6i/Z ҂>CQlIQ`I2T0W(M&H P3iF?<M+= *.8Ǘ?S{SΔ%*miJ &/S<|)r4e?$ zᜰgD ;J }(/$WTFy{&)1FEؤ\_UE7Ғ&0{V\s4& Txn4F4nqCCTKr;1m]VAl&+b6BMGsxFz;(M`/GT\n d N eFjlixNi(\57Np٣թ/Lw][# <9QYXľf&Ż$.!J0"ZecD3C+mNۉl3,\VrX Iʝ~E=ՙL}[zRS.-#1 nlL8v &%=8~1R`LKՖ JXeP9%@D͏ܳ àH94)Fh67ACKn\<=h$Sc˭l}J-7k%v c9oV)i> endobj 426 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.242 664.706 155.865 675.49] /A << /S /GoTo /D (type) >> >> endobj 437 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.968 647.515 241.573 657.557] /A << /S /GoTo /D (constant-value) >> >> endobj 438 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.601 628.84 219.844 639.625] /A << /S /GoTo /D (mapped-traits) >> >> endobj 439 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.865 551.874 232.566 561.916] /A << /S /GoTo /D (trait-handlers) >> >> endobj 443 0 obj << /D [441 0 R /XYZ 71 757.862 null] >> endobj 444 0 obj << /D [441 0 R /XYZ 72 720 null] >> endobj 445 0 obj << /D [441 0 R /XYZ 72 522.12 null] >> endobj 446 0 obj << /D [441 0 R /XYZ 72 508.183 null] >> endobj 447 0 obj << /D [441 0 R /XYZ 466.377 157.665 null] >> endobj 448 0 obj << /D [441 0 R /XYZ 72 141.571 null] >> endobj 440 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 453 0 obj << /Length 2216 /Filter /FlateDecode >> stream xZ~~@?&@־~`ZP‡/B=3;KY`7#pޛ\{ KBz7OESʋn2JgM\(^(z6REk"5ѵqәdbwWo~3IgtwGǙJby~3];Pz% HpUD2w˼eafνX _^Y ?pJ}ަif)ůg){[YMuֺrm= Bw{fC\),4>BP ĝEM4[8h)@Ҷz)#ZLYkWǥZ^[Ö @Y.۽'[KMj|b.M[MV43 q|$%8x];+6AY3Pa«'ķo Q.Xycv<>vvs@0s^,fK4;ވ$iޮNOܠ箬etڦ,&Vn\tBg,!#Mjgm#%03_|[t Qj;owqCDL0^~xp MSedmcW'R C"o @(MN𬘨ܻH~PCT7lw(4 /l:Șav>x]QY;,gpt fG^pL8xUuVwY$A$P4ٶXC$H클ft@2I$阕$=4ppkJzBH8dF́0[,6= Ym`B]ٷp9xo։Qn:؊rWdYsGd q,O)NBW5HM,[ t:qَݹmg -s*Ēo.S9*c oA5dz$0E:HG#P"p܍j0fPJ8 78 w#*C<'!Hw[< fY5)(b$u}cw&tdH3W.bUZW( 0oD9wr<-<X&vzԢ\? )YDc<ijBu~H!FYn2ÀQ̉hpGhLsSm:&d,Y[SOdDu2[k9%R][zu z`a[| b1"R,{00Zny6`h4|L=+PƦS&|ҧMD|Q~iJ0?N!fa臟Ĭ9r,)ע5鯉P I?9J\# SB%Y lc; ]&` BZs`KY[$]SLhu2iB/0]Va?]/ʵ*cO۠us lS[MHi_z3>-X,ѣVBLR.Mko,=d2w> endstream endobj 452 0 obj << /Type /Page /Contents 453 0 R /Resources 451 0 R /MediaBox [0 0 612 792] /Parent 436 0 R >> endobj 454 0 obj << /D [452 0 R /XYZ 71 757.862 null] >> endobj 449 0 obj << /D [452 0 R /XYZ 329.92 554.62 null] >> endobj 455 0 obj << /D [452 0 R /XYZ 72 538.526 null] >> endobj 451 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 458 0 obj << /Length 2850 /Filter /FlateDecode >> stream xkoܸY'" NLQCIjw )WPY c|~{4S}ER4Lě dHb8~, ꦒ&e4?@Qss Mf.ؙQGՐ`(5Ad.veUɤ2*lTV媟%(cByu,L#gTq6 4DZ4B'6+C4p.ۢbe弇Ǟ5Mq]4*z*ChwLbaYʍh^5TjL(2/9I`L^S[Ֆ^ ׵P»2۪64ހʞ,L~,Ԅ(cx&4NS]e;LLJ1DׂU}-ٴR6 RDAD!fbCaSŧ#lfIcHD7^] J%^ܶ;da-=N82(N=Q&lYәD"Pڅ^Ƞ[egLKς!z?Lw8n7=mNJ&YSpќbG12:)U/Eeٌr*8*A>T.P< F#'mr'~ɷQޟ.~ V8?Á_@|' loU7 endstream endobj 457 0 obj << /Type /Page /Contents 458 0 R /Resources 456 0 R /MediaBox [0 0 612 792] /Parent 436 0 R >> endobj 459 0 obj << /D [457 0 R /XYZ 71 757.862 null] >> endobj 450 0 obj << /D [457 0 R /XYZ 287.221 400.41 null] >> endobj 460 0 obj << /D [457 0 R /XYZ 72 384.316 null] >> endobj 461 0 obj << /D [457 0 R /XYZ 72 214.496 null] >> endobj 462 0 obj << /D [457 0 R /XYZ 72 200.559 null] >> endobj 456 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 466 0 obj << /Length 2248 /Filter /FlateDecode >> stream x]o6=Bh,1+b`{mhq[u%W77!evN!9Lx7^}w<2cdި\_7ڈY׭\;qrU4*Uۡ^|,8_˶[DzJh!EEߗz-1B!~t v&R\ WnUooVn]T(uӲҀf1,GZ hsvQk}ޟtg7G5zfqB+es}Ah+ob}Bsƪ҆U sSUQzрKo)8BU>[P}7 a{_ÁΜ,xewq]3V nt^, `i;%򏞿H S^.3=  LJc<3ˀqs8b_J#>}F@齥h?QY\zS75$a}^sO]3>v}v$08zě&%lspldOG's=*.Ipq ½܇`!dgP='˿w$9_pSB?K|3^`F*QmAF(ɟTa=Ңg6,frlGS}G޿Aa^Sp4>Mq6}IfhAMn #ErX2M3c.mn2ޞ]K(%αw&AMmPok.-/}TBi (+,t5 fq_]U]]mY jU͗6J{P€s0Ʒ+}vbQ<&lQP:Ȕ<}[ii],%RLYh;SgNFltXftW'vȝdrGOGlwDk3Ff5Vw 1p̯+#,wv% 0R֯akD`k.Pk"6Ӗ6])Fu^[ssHvBI3'( Bo! 5dY:Tp~;U4I {zWUr[sωo!KFOFBdmpicxV6@h\bjހeѨ4*z)*'_R57 Uhoܿ}(>*ӄ=u)Y*rEVlǴ'BΏl?ڞu)SHĎʰ9a~D9p mW m@;CđN#zx7!"C<9}9ɸ~ `O˅;,H'ʜnY1;q j/\R endstream endobj 465 0 obj << /Type /Page /Contents 466 0 R /Resources 464 0 R /MediaBox [0 0 612 792] /Parent 436 0 R /Annots [ 463 0 R ] >> endobj 463 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.625 143.172 504.911 154.076] /A << /S /GoTo /D (defining-a-trait-type) >> >> endobj 467 0 obj << /D [465 0 R /XYZ 71 757.862 null] >> endobj 468 0 obj << /D [465 0 R /XYZ 72 523.794 null] >> endobj 469 0 obj << /D [465 0 R /XYZ 72 509.857 null] >> endobj 470 0 obj << /D [465 0 R /XYZ 72 326.542 null] >> endobj 471 0 obj << /D [465 0 R /XYZ 72 312.605 null] >> endobj 472 0 obj << /D [465 0 R /XYZ 72 202.461 null] >> endobj 473 0 obj << /D [465 0 R /XYZ 72 188.524 null] >> endobj 464 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F65 185 0 R /F66 186 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 476 0 obj << /Length 2348 /Filter /FlateDecode >> stream xZmBHPYr]^.o@t헻ࠕh[,|ͯCʢZ/@q晑]gw7,rb,pNȜЏ{]漟#wV'y,f^ՈG?%场]Rĉ[Qz9ao(:wINyd0/jA?n\1u_rpp]jzNH9hprnш(sJI)H!g'yKi9@1:ʵpGIuą? fnȁo ;6rZ$Mԣ !j_;sPb^'})e ^Զ\Oʬ5Wb dZĔ%E%jIf7XiA@)HC2al;qn][ m.`(6[zIۦ_h/+:Jep(nfz x=a?G| 15mخgl9K #0_5l2evuK3IGimU'quQji^t&JLNf)xdm=є#t坮ʓdDW.hԝl,4L,>)w*^C(C,wѽIt@ hO~(,P &خ? S}Ub: հSQSbNLEl BC0HƱpf# _id^e؀Cci%i(S1jfg2,KVoW'@-xEAfj>a޼y35{^-hw@$a6nJ ڋѩi6X:Г[T:+ȬO_15K{lŻZtE"^(H\oB/E^ ; by׿v @P"6:o_}P*/MKKW +[R?cSz@F93ت^Mn ?fa A/NJ4(_ /^wD6,d;hIKD{E zSMPy.כ"@ օ!l=\Pm]kwz_#ug1ab8S2іՋ78~HHe.2r^x$z% 4QG=¨FV:fNwZ4gX'W3 d2t3& <LL`֡ruFIhr.H&ȳ*TmtL <1lUH|%"nJJ{><ԎyWR-Kχvǭf-y2;Mӯ>p>ͪ%^Rq"] (@Wc?}8Wg|=}xOc*tvl[N a,`l@\솾: endstream endobj 475 0 obj << /Type /Page /Contents 476 0 R /Resources 474 0 R /MediaBox [0 0 612 792] /Parent 436 0 R >> endobj 477 0 obj << /D [475 0 R /XYZ 71 757.862 null] >> endobj 478 0 obj << /D [475 0 R /XYZ 72 299.103 null] >> endobj 479 0 obj << /D [475 0 R /XYZ 72 299.103 null] >> endobj 33 0 obj << /D [475 0 R /XYZ 72 284.411 null] >> endobj 480 0 obj << /D [475 0 R /XYZ 72 219.574 null] >> endobj 481 0 obj << /D [475 0 R /XYZ 72 205.954 null] >> endobj 482 0 obj << /D [475 0 R /XYZ 72 72 null] >> endobj 474 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 486 0 obj << /Length 2669 /Filter /FlateDecode >> stream xnF]_A`_8郧}"& 6٣!!$NJ뷪eɱ0<$n.`?q}ET" w̒H (.dp]M¡lqYJzkT\vSپUHD|OW>\qdQƲ:\5HypW8~bjq E":go/X9̈TD]35e$[߽ÂKBPWf+>'|aa~gLt'M44Hӧh8(v Y8pC% sھÃ(hU=+zx/UE`%Ǧ* sax< !rAMpMډ>nD 9q4 #@d MTMXَ= -į5N @5=C% ݈@tdV#a. ajjУfh fYЊf4+JQ\4UjC|p̑ ,XgNciriUl ι<ʹ7LRI7PwB˕9o< )uvճ=b[X#q6=}dhDE$caѫ<"WEjhdAM#OLG~ v(+ O`%ahj yᙺYŖ,Yvoj@9&k0xJ /M-xh3E.B~Bϼp-_jaE E# 3gU /b~wjq(n(DC mby$?: p RD\P4GI6/rXbB&B̿ս*k3VvȀV3r /Ȯ38;ɣܤ |Ň6)c]kgIw@:/Iux~S" qҼ4 p&e!/%rq>:v@CǁYa,fڷSvN 2 I& @6q5ބKo6v'3Wc&֠#>\D#ex=7(-Rǟ%@qT^@ \9ͣ aPhAJ%sȹd.\< ya@v>sAq&TyNHOQ'%FlV%IXc|AnHǾjRCRYͩemQX 'z!RSѳ4{ ji^l <'jnEJ*.zWٹ ;+_VQ41$B~Ujj3^GHY.Q9c`l 8br-źɧqUvjP[1dyt^=^FW~8[lB2[  Vs%$8F0'_`6g00B_W&y7?y)5d.`]_J@$4 PVcL\ˏH3=3:s݉jE/s&HBF!=%bP}c'#Afo.(ݙ-L(.Vׯ֋(7׊0E ,%@=QDY@!,9ClX@σ@u0cqV]8NGuQ zl_:W5Nf9Ji+'M ~N}K/'PFӅ,X} W`3k vJlk|H+J=MQ7Bj`QSGL Qrq~j1*)״B endstream endobj 485 0 obj << /Type /Page /Contents 486 0 R /Resources 484 0 R /MediaBox [0 0 612 792] /Parent 494 0 R /Annots [ 483 0 R ] >> endobj 483 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.308 293.264 327.917 304.049] /A << /S /GoTo /D (defining-traits-initialization-and-validation) >> >> endobj 487 0 obj << /D [485 0 R /XYZ 71 757.862 null] >> endobj 488 0 obj << /D [485 0 R /XYZ 72 720 null] >> endobj 489 0 obj << /D [485 0 R /XYZ 72 649.707 null] >> endobj 490 0 obj << /D [485 0 R /XYZ 100.542 578.075 null] >> endobj 491 0 obj << /D [485 0 R /XYZ 72 564.039 null] >> endobj 207 0 obj << /D [485 0 R /XYZ 520.762 352.533 null] >> endobj 492 0 obj << /D [485 0 R /XYZ 72 336.439 null] >> endobj 493 0 obj << /D [485 0 R /XYZ 352.963 103.081 null] >> endobj 484 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R /F65 185 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 497 0 obj << /Length 2430 /Filter /FlateDecode >> stream xZmo_A"w;͡ ڋCXSJR3;IN (.ggfZ/yVb'ZVǶx<>Nؙ2o̍G5џe9d'+" %m_?^/u!TtoGNd8V-zл6,pXb cCaհp@)݄c;^4ҍd}ӶuL>9[m^DֲU\5Z+#7o=;ɱft;|&Z`[Tey`l %oFΔ.'(!KC9HYOz沖MjWft$JrZ-ҧOh+^7*Lu BIf0&@4{:=1hwe5uCISbu=ضSI>-Ա6zA0NxmUm*Țk?4'򲪏o[ȈÁ Hd jG[R34U45,EU?Z3񦵇]^ʺ]!6bkJU!=w'!/TA_eX$a Q)#突4lXi\^K*&7:My c˦eq魙cw,V _Gdu] SI#6hZ1Y#-H߫voigA? "QЁX;v"s<+ 8šl11H#N0<ʹ8Nv?!blF"v"NMKGf3p(wkvn\t usiB| ;1;y|@)* {͘΅"N| QJHպu<4'Ǽ ŒQ "I7Y史Sޣ}If̅ #$RTg };b NV:AX'+ӎ̺Z3G 4v OdqrݐEAmCrmԈ:KS:uҝ! "8wXCᑢ4`xԨ5 k޶`LSZF1pKzkgv Bf+#uQ N&…o"@c'dxDiS5X ~⡱:exmjUˍ9AW  f>.qi4# [jTh.]fٰ!q`klڏm'{K2 (ukUbǎۻ4s'YXvxany'T}AU;mY&/Biש}e FBrO"&/pɍ$Ӈt Db>E!Z*u-G ) #ؗl6N>¦W= 3BrgZ sf͸|gl'awǭDC v1p2)iiID_Mp`>j鑩%:-]F@OKG<>Hڣ'Z2m%)~=k1#S86`ůA3ËlHzLH=$ }$ t*f 1P׻B5OB\+[}h- u1vEz}_^n_aN2}w|'U~YB]IfYQn0 Pj?R۴\'GdJ0tU&['?z&2`/Jp2iY-O%..TY89 YmnKSwxr67U$ F~+ώ;$:4*8fkhm HG%±ȡb-8d`nލj5*v^.+S!zc_`A{9 xݕ^}41_ˌ%ͧAB^jAv+/M2}5]v/-|`kmͯqvuO`YȰ endstream endobj 496 0 obj << /Type /Page /Contents 497 0 R /Resources 495 0 R /MediaBox [0 0 612 792] /Parent 494 0 R >> endobj 498 0 obj << /D [496 0 R /XYZ 71 757.862 null] >> endobj 499 0 obj << /D [496 0 R /XYZ 72 720 null] >> endobj 500 0 obj << /D [496 0 R /XYZ 72 635.694 null] >> endobj 501 0 obj << /D [496 0 R /XYZ 72 621.757 null] >> endobj 495 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 504 0 obj << /Length 2420 /Filter /FlateDecode >> stream xZݏ߿B> Yqm \\zэ>\,smHr;CeIzC,rDg3Pxk/E,D-<+& S-VG1KɊE>ƶɪ}VY½.uj㳟_|ʁǽX*!˷7 п&;Q[/x7 Hj_l(ab .raXG<.fQ \a,Y'q1&@I26GK`9L8ew~ͣ ojUjֶ=xv_lt^<zV_#7W(͜`J͛bڑ{P2$/gBJq`` >93=TCQm9wm|EvYkuM Nh:_U4(kJkQwwTc7%U_3Eʳܿߗń~Ro,}[Tk< 8 ?dMw`@ FVΪnM6HWPe= Vk 1Z.vhҦEQ3oN:9פ;ln`đpܿn_x; 5cJJ|UǹHp%ulK$۬7Cm}7z;.tU]0eO$BM⬢6D cťH9T zUSWuCof0/QK/؎tpi֐5'@ `A#'(9#XT>4vxŜX)@yt'z1A˲]qx Qt(8dHUw,PuwK݊sJ&bY/hL)c^=6F;S^+" zcQR}1EdE\ ^|b*$(v,:>YNF5n;Vt>hgғ VA̢D K4 @ NRcwNA9 MFS3# {OÅѩN6EnFT *Aamnq̋}3~OVZxg$,.X'Ḇ`Dj6h˜X* aaJ=3 HF=cN3QجX%{xTؼs}K?6fA#; Mϥcx^ u+sHZPԯ?꼳ݓcć?Q6#={̂in' Y`нL5w_Zr,<-peJ4qnC*P1[PTd~ߊl/[w#a*ӄ-`"}3"tkǴ*v'bn[peoyu͖axZ^*H|bU%Ue6 =lͫsqqTAzA (y ?.3%1'o8 %OWt$<8n7(2R\!JRcx_YlC׼LQ<}H*T .\sy%M >/ 9]}Ǹƫ ˌ>_U \TOr%I?[%Si>KG~9(Vn&Q]R'/NNp endstream endobj 503 0 obj << /Type /Page /Contents 504 0 R /Resources 502 0 R /MediaBox [0 0 612 792] /Parent 494 0 R >> endobj 505 0 obj << /D [503 0 R /XYZ 71 757.862 null] >> endobj 506 0 obj << /D [503 0 R /XYZ 72 669.469 null] >> endobj 507 0 obj << /D [503 0 R /XYZ 72 655.532 null] >> endobj 508 0 obj << /D [503 0 R /XYZ 72 625.644 null] >> endobj 509 0 obj << /D [503 0 R /XYZ 72 607.711 null] >> endobj 510 0 obj << /D [503 0 R /XYZ 347.135 371.819 null] >> endobj 511 0 obj << /D [503 0 R /XYZ 72 355.725 null] >> endobj 512 0 obj << /D [503 0 R /XYZ 245.647 110.072 null] >> endobj 502 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F31 125 0 R /F37 163 0 R /F67 187 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 515 0 obj << /Length 3063 /Filter /FlateDecode >> stream x]s]3}08#"8wറ4um/N=G 0(ݽEIqG3booooA߹u|w7W߼R'8N^RmTѵynHOnhwǗTyMԪՌr7W] wy8/Y)W>s9 |ڛYYC?r?yV%K ,2\8H[吸-6۲ȋTQ"b1 @zg+ yu<ڀ.CUք嶵T1&lQnk,YBwSaBE j HfU]EF[MP $}%8ux4!uSM 4׏!&}W˒s_sqR^,BG&F()}r4Qpd$y; <R6˒n:Iy/L 9c'7GIzȯ';]ɡ}=C.vWNۧU? jxI.8K@I|Pm?r`# kтѭ/hޝHGʱFBpƎx1Neȱ8 'ߎ[y991\NѬ] \@>osڲ DE3H=FO2(@!DO16CSg_}' ~hclr&&>tCQ$ t2Vz=Ɔ'dpʝ~@nOsU!輷UExg Pd{Ey4B=,,k˺5 3a2Ծ*Sjuj" =HPEmB&QAL_5ƝɠY4O0bIN&KGt9m_dD4{ OJvn|\uX,y$5 ĸ.|uP!ug%vMtG0 ]u`᷺ҍ1@N*c-?D̋u"kRRQ#"P3}ƏI˰eO+h|i&$OÊS%C겎6VFd gŦ(UC@sg0H*r$4e=91u[ҿ62 nXu< d2BUO^8@_ 7}SjM9U3&~D?k$?x`zSOƟf? {h0SxpR hĝ~jS;|0M!8(w}#,#̰o3r_ f r)S>%WH3DU!rNx$$KssNۭ *,3ہ*(iѮھ C\~2@?i^&k>3s/n9 s &\"0c܂~#HKq.!L)}Bk^s|okfƭn6Egb@hG?kݮ;_mq1{Ll;@%'þ'O$mދ289>Cn槷J͹3qw6'|yL80N\IeLwy/ÓڴK~`x.ZS ]tIh'9Ɩ1džR-tyAF}Āq;f88" E/_!Oގ؝ 5fSTϡ0@DaEU5~}tawiNp(zLQgяw%d9{WQ Hvڇ15vۓApoGbIn endstream endobj 514 0 obj << /Type /Page /Contents 515 0 R /Resources 513 0 R /MediaBox [0 0 612 792] /Parent 494 0 R >> endobj 516 0 obj << /D [514 0 R /XYZ 71 757.862 null] >> endobj 517 0 obj << /D [514 0 R /XYZ 72 720 null] >> endobj 518 0 obj << /D [514 0 R /XYZ 160.567 662.217 null] >> endobj 519 0 obj << /D [514 0 R /XYZ 72 648.18 null] >> endobj 520 0 obj << /D [514 0 R /XYZ 445.027 410.494 null] >> endobj 521 0 obj << /D [514 0 R /XYZ 72 394.4 null] >> endobj 522 0 obj << /D [514 0 R /XYZ 460.329 250.124 null] >> endobj 523 0 obj << /D [514 0 R /XYZ 72 234.03 null] >> endobj 524 0 obj << /D [514 0 R /XYZ 72 204.142 null] >> endobj 513 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F67 187 0 R /F66 186 0 R /F62 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 528 0 obj << /Length 2594 /Filter /FlateDecode >> stream xk۸ "k)J4k.\qM|(4X2VcK>I!KYa"Ȋ3y3Ի毳o^Bo c&ܛ-lSJL<~UeF?ńQo ZVv: |x<H*ls#ѣ'gmP\{oqC-սgtL,Z=1 ?&XXd5!D-JyˣiWBz1PB&8 #I hdtykJB %dK fBTD"1qƳx/%Rx6ӈ™@` (I";뇴?Cld;PѳDYQwٻ0"A4~yK$->Ov#^T IA]&/FTPeD 7oAd 9@YΒ7gf78пΝ}Hay*b's3c25Z!&$N`^#g0!BEgN ґb^ǭ"ϥ?"җ)v,xwYK{ui̺y|N;uYEu=J]epE'lT*vaZXYPTyqo@Z#vf00O߬ *ZBc% &6ȿڷRI.KPɔvi>a =IK[Q-,m<jvJV ]֨Y;Oke9r@;P(8 upFsp!? f%FKW|m@I@]~"H7vdSj@˥v"=[K M9RFw5h?eU ѬVJ)ؘA J6ZZ{}C(?9GL]oEYnMv\ ը ؛?gzm/BY ʉ;0o N0Ed#!GNܿ&Q *.yiVicF8 x턹]3^b,+#FW젫z0rFHjDQUf;ŹfʍPL{"#W0X+cPCbb͝-F8жhM"b_l/a (QйG2R27o!y.nn R.mUWƢL #c"x xGA7qmF"C߄ernVGXӄyuLv0S~_ ęjR? 42-#cH6+ >΅QDvhROsܰ1$ Dp mz+ g$3BjJe'\ICITAdk}H{\&gJa%إ6ڍMOng?yΛG -ͳUړ̘('z̖zy $c(|΁5x X!~J׫s;]pV*S!ɴyoCGM]mr+2CD[k"U x".hfK~b`74oRdN;0;y$DxA\fB޹fԩ. u,N[Z9> w+|4=뻸Uxp2 0d4h4tu, H>{}@!F$c+74dqII"vN63wK޾v+s˰0[\U #ҹUh.`4qUM&ُϟӵjuʨ @%qhS}oBܡ^c6#mvP#݀P<VX]a ˂cVZ:CG+=ڽH*┙qID33or]&څM҃FƹQOdmdr!'c: l9h:)hb^U)R/FeIfҼk~9`㯓`ۃѦ1Ev+n]]u\q +^;S?uPNCɫ HG0c$N+,% MN]եy tjG9o4Xc]N9jEc:zM le)8{_/5x]H+nUjC@pDz`l )a@ٞ$jN mҼՄn-)4/6jSW1c($xߪe ˜m2"AI"o\ _M3]DH$h\y/Q5 endstream endobj 527 0 obj << /Type /Page /Contents 528 0 R /Resources 526 0 R /MediaBox [0 0 612 792] /Parent 494 0 R /Annots [ 525 0 R ] >> endobj 525 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.681 469.037 179.425 479.941] /A << /S /GoTo /D (hasstricttraits) >> >> endobj 529 0 obj << /D [527 0 R /XYZ 71 757.862 null] >> endobj 196 0 obj << /D [527 0 R /XYZ 450.287 448.28 null] >> endobj 530 0 obj << /D [527 0 R /XYZ 72 432.186 null] >> endobj 526 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 533 0 obj << /Length 2890 /Filter /FlateDecode >> stream xZ_FOA=,S44{r.vb%ugoW30Oj`f{+%ILm۫oބLڻKTD J5U߭a?weKM4ܕ+y\}zw ]"/>~ yPYY{/))@I-MOC[eox4_z֠3/]o€ @WVM=}*Q 8"M:ߖ5iuCPKCdi5 ۗi3ծk kGrÌ b, &6)B#"?ߙ :vz.灍xmM]TLWZm޹9INN$w!+P:2Wq |UDoDwh0^aڙ^apWaO zQL/-qZI;؈wK' Y9g:MHB___Q|YW_rv>7w۪w_;H^]VP}{3۵q5,u68tnq#bF B0h0p{ (H)jŤHD8%-8qtM͂FCoZ6Xzj;k8DZC\89 ܚ;дn(C9j낷v%^E8<F#V̄۲ZM䛉2fj*o㓴+1ҰH>\黐d;#hxH)kY%Ȝc =Y4 ̮쩁~d 9L {uSq 4׿Tؚ'G[ZmOܦ:@>~P`9HS .9\'[[:j\7$@K AsU6H x.Zܝ =n.=Cr ̦JVioKV۱v^/cwcId_ B5`Q& 8 g2O'uG0aoCٳՁHEc|8RsgF,ha`#R<9$30d _py`<%MW3턉f`֦J٬pjcDӔ9mA< r@*@xAI6?l0Ofז*:< "`'MJ92f|#ƈUxwl[vU^9,t Qq ɝKͦ5=dheP%'$  1ȇRuv؇xUw[ӝPӫqSPꆃ%^2E2uB>c,&{3LoP xZNi$YtHUe|AZȱB5)8t4p-8;X삌c]~n mx5(9У<q,1Z䉀d>r4 'nCOl'2C`,"w "4< f+#;`pTj^Z@~j̓NʋApa%DCqeB#TJ?D#%缝D x%$uһY|L"&Ca Ǫ#\B_Vk'kQT]= | <9||41|CcЛe$EhӊXXz/vyF Z$.=':aՓcZ uNF$%1+bL,W*OX6{@rdm0 b`hzղH'!A%^}Qt=r_mz. h1k(w7 4%ZM|潭vHo-Fx ذNy"AA/Xc[7iWͭ bU$6d*౲=jɿAd+ sqsW# ~] ::}~W?ջ+ۓ\UacBY2 h$I,p1`"3ΐ{넡>-/#4F ȇ:K+Dr,ķq;zQ֑ܲnjb}ewys`wVgW Qy:+叻S?B'Y_ hD,d&܏y 4B7M89g2 G}-u|秘+U-{Ho:ypv=0W89Q0yBg5Rm͡w?rškɱ* (~ endstream endobj 532 0 obj << /Type /Page /Contents 533 0 R /Resources 531 0 R /MediaBox [0 0 612 792] /Parent 494 0 R >> endobj 534 0 obj << /D [532 0 R /XYZ 71 757.862 null] >> endobj 535 0 obj << /D [532 0 R /XYZ 438.751 632.329 null] >> endobj 536 0 obj << /D [532 0 R /XYZ 72 616.235 null] >> endobj 537 0 obj << /D [532 0 R /XYZ 72 476.303 null] >> endobj 538 0 obj << /D [532 0 R /XYZ 72 462.365 null] >> endobj 539 0 obj << /D [532 0 R /XYZ 388.52 255.906 null] >> endobj 540 0 obj << /D [532 0 R /XYZ 72 239.812 null] >> endobj 541 0 obj << /D [532 0 R /XYZ 72 197.514 null] >> endobj 531 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 545 0 obj << /Length 2885 /Filter /FlateDecode >> stream xk Epp%w4Pk'i{Vv`ub# IŽߙYt80p"gwgfg3mYŷ?ȗXY*RVXZfyh8 ™ܱgxsEtUӅśW_/l[Hd{gZe '=kk~ſ.lڱ_ygw~(|w<:A{GH˷f;q9;k$lA(aL$j#[ذN.ÔwQ6P=:dW>^$ ۅ^ݵo۳eU@.a3&j ^gֺvUd];f&ݦhoS\ֵtD4uU!Ċp@n/=.$㒞BAZ\)pX笻b+(O#k>x $r@4ouvaŊ~uJZw/%\Ilhs3Gt5Ĉ D *lMݥ] Ҝl*ݬ>w(ώVt|2;؜I-./lRsM@}7yu,ˌ"l]XlT'[)Ϡ2TW_Qd㘘pvxhCFc<&|w' ɬFpKxJgw^t^HPdd9=x_~EOE =ht " v췹 E hkם{C\XKluOO|]I#!tL} mV4^}vLoԁvGYMS⤆ 枡 fF=N>5^e+xЈ A dYxm7guf+L6%7_ۇn_Nߵg/_қe܀^+'gɚiu (xo>Ua_7K ݔfi."kjN_Ufvsl4i&(S={nm8=Ԕ=? (=Mv[w fiieNVӘ˹!Ҁθě.WeYsM2Mv{?L6zJH6ʪ,Qn]Z_N:>Ԧ]rpǑsCZ+##R#**J}1=..dtns;0q8ჼr½yJuɞbhVQ}|gV|=H-<;<6 =$^(xr(2 H~(!;QKT~#rN4T=^bô jҭmx\aNP{C@GbYҔ( U&57"pSyvGb-0q6'溺^obNmߖB:y`=Y!q-T4Qb d9kkSn,YM FJ#h ۝;CAYNFK>eMoDMh3$guFYV3"4~XI(g;__]<6]4d9ܘӰe$ugڕY^?)D9G-ɘe  OTt0m٦OP?t/B5 wC釟z6'_F1C}揔T4sӏg2fg~])q9aփ\GgT\ ̽Ό $Iw!6t%ֵ]:fݚ0K0^W:Y85OQoEy@99h-3$^6Y< .N~xV }]l!JtEbjU:W%سi~EN_SmTiTp-m4nh>8#ʎ0l\ dxAY(SeXaփ\.1A>w9էp2%nAZՉNveڠC? ѣeW(%ry}'GO񈁺lHc~~IxMNO>cWs~ +hOu(h`W(wO7g6*v*k$ R;ͪNrju줢ٽSU &-cVLǺD Դ@ 4=1i]p ; XH]?U=R ߥ=kD8BpK|I^ nA^*y Gt9?6%Y=3,Xbv? hy1ri4 `p/7C08CH~~g%S|B8RQ5~١LQ{?l]R8l:\ ЊG)Ub\?.K\l>*Uѐʤ{ endstream endobj 544 0 obj << /Type /Page /Contents 545 0 R /Resources 543 0 R /MediaBox [0 0 612 792] /Parent 552 0 R /Annots [ 542 0 R ] >> endobj 542 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.432 200.476 404.708 211.38] /A << /S /GoTo /D (adaptation) >> >> endobj 546 0 obj << /D [544 0 R /XYZ 71 757.862 null] >> endobj 547 0 obj << /D [544 0 R /XYZ 72 429.167 null] >> endobj 548 0 obj << /D [544 0 R /XYZ 72 415.23 null] >> endobj 549 0 obj << /D [544 0 R /XYZ 499.213 203.629 null] >> endobj 550 0 obj << /D [544 0 R /XYZ 72 187.535 null] >> endobj 551 0 obj << /D [544 0 R /XYZ 72 71.513 null] >> endobj 543 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 555 0 obj << /Length 2205 /Filter /FlateDecode >> stream xYmo_!8*?RDEܛ^ Nsn "L#읪#榤QFs^2l}[楒`tB1R,$ 'H*J&+;n2OSknB U冈[]˶iT]e^Rma7ցJERex=?aL\& Wc:S~dX^I&?(r$z{PUm<GpUJIe-ESF2(>cȧFoQf"nV!2U^ƒmt[iqL`ͺaQΰau43~ U l{؄&<-*2 EFձPg˶.Gt-踯ƎY֝m7B%05 ~ѾKҞ-HkB[Uzg]OZSV# 6WMb3̬MW#{Z_ٝRs&1Ċ+##DZon#sOlzWk7Voou\=h\]zN]Nz3\[4\T`NXHiv>D¿"z}pr؝׌hAeehA 9#w'u-oܬl$Fi &?zJaLǾPk _hpTB s<掮ơ rs>>4ьaeP]ucèd<@?I#޸41&ްxb,[`B3P=)%c‘)imS tE\}=xqfY gƕ)Fg7O}ʇ2谀CtWfәCk\uv#fol0!뤚㨋 B*@8i.RE"' B,buG ('yHCX,u;8b !r ="Qde`utz<y{ɀ@#ά_. B\Xį\cM?٠bqfDzp,BAn;gi& Pdzw3F [A1/Ylf*D13W\u3_ Ҋbh֫7 ñȿ$wx0 x+50eNJb@!2 Tjg$LTJk3k ^dٵ}B޲TekV/7ĺIxqjkXm::~~8nl b)ф`ILXl⇗L ya1q1(<(t*Q_ j Bgh1+ff~kc/1.Sv*x9GcE\0GhdS;yp)x̠7GxMs1ۧ3DsJ#h,cfm"٠]ʱB:y%WHE*ZapOX.NQ3 kg~l=DA6+#*B# fnfCɫ}[,wA.kɏ]:~Bp 8' KLΞd ^59, /~Mp#`nM%2~&QY4AI5-\/[G>9_u~RXښg;d'-oJE >Fƛ`w?jv'1xO>]!3T-[;MaG endstream endobj 554 0 obj << /Type /Page /Contents 555 0 R /Resources 553 0 R /MediaBox [0 0 612 792] /Parent 552 0 R >> endobj 556 0 obj << /D [554 0 R /XYZ 71 757.862 null] >> endobj 557 0 obj << /D [554 0 R /XYZ 72 720 null] >> endobj 558 0 obj << /D [554 0 R /XYZ 72 629.717 null] >> endobj 559 0 obj << /D [554 0 R /XYZ 72 615.78 null] >> endobj 560 0 obj << /D [554 0 R /XYZ 72 205.544 null] >> endobj 561 0 obj << /D [554 0 R /XYZ 72 191.607 null] >> endobj 562 0 obj << /D [554 0 R /XYZ 72 69.9 null] >> endobj 553 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 565 0 obj << /Length 2168 /Filter /FlateDecode >> stream xZmo6_!("1+R^v/KsE tB|4,Ɇ7f[t FppH>t{ۋ~4wX0b0{Βokgs'~?jW(ѥZMՙ`|7sq/Ћdq{ŻO^4mOF <`A2ۀ7TT,V5PUJqXUZeֶf**˵=BAش$0Qw?|P4r&jq5|I٪.z&;XW K?hc Oo¨P}΄Ǣ[[v훼ƪk=,ܼ(a(D͆1$Xq" Ӏ%:#"طm_2'e~\!ʤhouP4O&`TL_dL$7.+/IJ zE}1/&ymP> bRy>6ۼۧyY5èQvUǘ*%'$7oqڙo.KzBK9J@Z xXgjm#]uMXv8f*nG^kH$-;ŰWụ^UagH_"H!/ݴs!msHILW3A(M(aFIjLht4NP2{+ȱd{9ma+;/fj̫cNtbqyΥs >ffnel3 N)1Hώa$EHJF'#]MHl_ |Ll%)iJnRά wwuSbD?, ^'ϋ#M-{P:=SNK.'I,̀^gj[W*;I[( G̃!IroG_Q_$>agH}*1M bB,ع voHĉoD{V|3;(VYYZ k6D1 GLgÚ5t[ٌn;)Țc9 +5N 4-KZ@Wgj[HHОhgِx@f)1BG)JԦߋFAOV6z@TE)au ZlFY Q̖ α%@ 3-[נ,5e(:̏S8,>J, 84>e( zm!NQړ tp<ߍn26=Α%&'\{1$쉘o7:/ >z*MZITMcjfuhVJDo^l0xaXڿ1A9b)PC $\QEWt3܍aG{A xK[lL?>=Ss&,";W# p1!u>\IMi9m;|i SKV5{'ƒ_J%?9!?l>]z%/duEx6hor/B%Q_DL3Hԗ>oHԑ$ꟘD=9}kC6Lbg9힒LD AsIgp_CK%AoM# UR{R)> endstream endobj 564 0 obj << /Type /Page /Contents 565 0 R /Resources 563 0 R /MediaBox [0 0 612 792] /Parent 552 0 R >> endobj 566 0 obj << /D [564 0 R /XYZ 71 757.862 null] >> endobj 567 0 obj << /D [564 0 R /XYZ 72 390.497 null] >> endobj 568 0 obj << /D [564 0 R /XYZ 72 376.559 null] >> endobj 563 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R /F31 125 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 571 0 obj << /Length 2690 /Filter /FlateDecode >> stream xk۸ EX"pnݠ(CYrD9[p%;E5$͙ȁwޏ_d~Ļx( %I'q=q(N{p ]P2ͽxCƨI`F2`:F7~.2X^c-ߪW;T%M_:byJ 8 }e/w'QQDG^&sDo$ i󽮚;J=zB` @tI-cF[(%_`k4h^]uZ5Ҧ}J&UWm!P]JȤ=|n A2g_WeG*zehJ-_ H %(5C}Q~.x8諲Y@lGx&A4x/pS5CNwT `5GQ23W,0o@/'mqf@c +kK`b%mudz =8ycR,>x|2eLLfȑ)e2,mn=A&b|^Z[xk|;':aSE?,O9u H<+C(Ӆn1G)x ς?ՊƃJbR ]3y 8mg4F~`p_\RLb3z^;Ne&Na7H`]9(0AIDJ:ePni ¨9ruybv4tthwذE"\B(eMULwۢj x&DVe"?5C4;CFFFasJ s G-rZp"h]}FJꮲgbpҜѝ3]9w|nʶALzإw1Uy/94YL*#*(6rh손Be˜YO-WwReD9J8xdR&$u(X9 S%RZ-)ݖ&cP5&܉f[dU;¾`nM 먣0;%~*#`'*!^$$0ز|o% 80)f%rf$ 7>mXd~ woɧҲ-S8A1ySP)rЃF3xk)9 RF.Bn՘sS5B!N^ wJ̉)qa {?~gO?Y"@| $ epLBKൃ >z.j-`.e'rZ|T[%9k'du_5V喧wպse|_.D7L KXJQ q:?#8O]/f$IﷶkQ@|\ endstream endobj 570 0 obj << /Type /Page /Contents 571 0 R /Resources 569 0 R /MediaBox [0 0 612 792] /Parent 552 0 R >> endobj 572 0 obj << /D [570 0 R /XYZ 71 757.862 null] >> endobj 573 0 obj << /D [570 0 R /XYZ 72 666.26 null] >> endobj 574 0 obj << /D [570 0 R /XYZ 72 652.323 null] >> endobj 575 0 obj << /D [570 0 R /XYZ 277.617 496.451 null] >> endobj 576 0 obj << /D [570 0 R /XYZ 72 480.356 null] >> endobj 251 0 obj << /D [570 0 R /XYZ 101.369 219.103 null] >> endobj 577 0 obj << /D [570 0 R /XYZ 72 205.066 null] >> endobj 578 0 obj << /D [570 0 R /XYZ 72 122.852 null] >> endobj 569 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 582 0 obj << /Length 3204 /Filter /FlateDecode >> stream xڵks6܇h{1Cz3M;5{RCwW׵q @VvNo2 x%Wە\۫t,fH(JTZ]:^ˮ]_I)zܚFڗQ^..|,W* J(UWR,]U70N_t \KRձj`niH՗BYҫv+yWv*ʺqܼx Bv(H!$}>A7- :֦uye%P[n+rFO)IXVHT]`(Y57[TG]>gn'/ ݙ J|zD޷ٝi/uڇ 1:=4q6?P" "|8@4-֍A}@UđWVX`uz*X?D3'YZ9a x P[0 XR/|e䱈d!Kޛ A32i&/?Hr~"/L?uqp{%(Zf-ciT9|W4kkcgܜfz@=&tLSvd ~T}^[o( 9#NC%,rB : |%رCC =I#owYx'KYC!{s,Q"UJr<4{RY '?l4f4Hk;-a; E9 R7{Hm<$T9FQH6~Qf9 p0탻O#g=A1`nhJm7ꐿXz%jJeN Ep||kr}ČC>vXd~p2^cmr怩2қNЃM㩌[!c` q2W6F;氿#78`drɃjb (К' ]N2,YMR8VQD?%%QMp(ӇpUe┷SȈL& ^v(B?{L9E$D M\Bǁ/sx]G&vWfzmZlA$f r(:J'D23ͷ#`lRV`0AJtUӯF \`pHloiPW6 C?L<2N--pXKD^l|\ AgmXz|H(yo%2WKYqt9F[vX9")@'9DCEPQy~m8g#r 0U[.HWÜfAVga*hha " Fǹ WœH )Y~u卡r0Y9źcb5@&e#8'd%3n]ePlI3u-H8۹ %Rm 5mt2o%=uѤqvr7u%y F̃$&L$Uv7$msGY]…^K@~&4!a}D`B?穫 tpq &=3AEN bi`C8o9JUHEI2t7 /:AJChEjqGO~ۦnve?'9 ?T `NiO|EO?Ml2_Q2oυ44^Rpʰێȝz]ȴ5F4zjMC p4vQ|pgOxqǽlIm)~0H&h16o1>Sxa6s>a8Ɛw'X}^MDlwZ'חKV~y=zv|pF@:ou7S4 u17_i&rC.ggߕQX[V#cI3uƐ7̃,B 3yTߛjQyՁ/Uy|"{O*b!nU|rlgJ V4-пڻӾ1u۽]gM9TmIm:SU7hwU}Z[ygAzp aؘiLS'0μ#Ʈ]ߙ:e}&i/(vupye@ 662l2E#Lз;3 Ź]|po[P cW'^zxctw_ 4>2:ç!%}Ӫ׸ma+m9wZR_A8vۅKrp!g'+(A|GdNBE {U?O1YhIJ_և2* ,}9]7 endstream endobj 581 0 obj << /Type /Page /Contents 582 0 R /Resources 580 0 R /MediaBox [0 0 612 792] /Parent 552 0 R /Annots [ 579 0 R ] >> endobj 579 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.431 85.823 316.206 96.727] /A << /S /GoTo /D (the-name-parameter) >> >> endobj 583 0 obj << /D [581 0 R /XYZ 71 757.862 null] >> endobj 584 0 obj << /D [581 0 R /XYZ 72 720 null] >> endobj 585 0 obj << /D [581 0 R /XYZ 72 683.515 null] >> endobj 586 0 obj << /D [581 0 R /XYZ 72 445.466 null] >> endobj 587 0 obj << /D [581 0 R /XYZ 72 431.529 null] >> endobj 277 0 obj << /D [581 0 R /XYZ 483.422 77.021 null] >> endobj 580 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 594 0 obj << /Length 2884 /Filter /FlateDecode >> stream xڭ]۸}>DbE}C.i{]}(k5J{EY^dI pf83rnoud^Y8v0,pV]-RywNR7_ik^/|%>䝑_ެ{îyKTlvW~WN_Y|Y;'Sh+?P<+O}#eQ-T0xQmOH)"P.ƏܮzSoo$n,u("&b 7mW6< AEٓ}m]Y^oMyo*R瑼.);/|w̒;AnXWfgGFўV,s$+OޢD7U)jiZyU$OG3KA[nTe};[z2Q]|3P%Z}YhmH\S{zw t$fn@PwtT{|--4u6築Ґpu3ژ\ ld:i6h|-Dz~YO8-Ǧ$PGFyiW@ѫCPb(=D Ժ Y3̫vd@lULI`?_B3@n K'#_i/ 2co+劜yPyG2{B}lt5:HÉ#J;An d7<@F~y̰$\f҄T֗8e_e|ѠH#/NAB䯲斴 ;S/Uh\6uE=cc.kE q5Ϗb/8 cc Ahe -C ZDzV<ؚjYZ6 KF1|]1F/(W"6v4Wh;M8 H^?$$ѐLPx{8`ʼ$BFd6˒"nssI3$=xb~'UAڒš$Uay|Mnmr>CБ&`ŀlBc@(`(H2*ʘ⛶QADҀ >$ ]{|{fdNMR8'uWxK -+#$5,etdeϕph?bqR0'n蕰tue29~QXrةL'{;^ {TMi͵ if"Ӑ?r_'P"mBpo6٫Ҝs9$rx>o+:ΐE;[- OgI'7#S-WW'AyѨ6|-a`џrM6GTLEb6`J Af`(!m8ť͛k5dۙҒZ9?- 腍Zs>6И0 3cF\MK1c9 ̸h0 ,5\Q6>ÇX>1'oq&pD"(;dYNJ)\{JA+&qGdB4b!ŵLiՒz-|ͦ$ަ\9$R ?zE1TW) a4a{)\j`-GPyYMS֦[vה\A8dЧ,-qD) F#u{.#}ȇ8+ϴ5< ipq7ɋeS[׶h}սu>!R) *W3 G+z\ȴՋ2oIL#Vt+Se^EA4Ȱ5_\r-_Z絧\LB?&m>BJ0VzoEL<zhyh1Sr"8G!PqG_*JGzRl*rN \ ?Pt~3V|,"Oհ% M&􀁁c`t@'Wing_jyd'fI8a~/+>N$*V $<F5!Z)l/~(F7P~P@V{C!ֱe\r#9V Wbwh> endobj 588 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.187 214.644 388.899 225.548] /A << /S /GoTo /D (property-factory-function) >> >> endobj 589 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.372 196.711 320.615 207.615] /A << /S /GoTo /D (mapped-traits) >> >> endobj 590 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.078 179.152 379.563 189.683] /A << /S /GoTo /D (hasprivatetraits) >> >> endobj 591 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.462 148.891 324.5 159.795] /A << /S /GoTo /D (delegatesto) >> >> endobj 595 0 obj << /D [593 0 R /XYZ 71 757.862 null] >> endobj 596 0 obj << /D [593 0 R /XYZ 72 720 null] >> endobj 597 0 obj << /D [593 0 R /XYZ 72 671.56 null] >> endobj 598 0 obj << /D [593 0 R /XYZ 72 657.725 null] >> endobj 599 0 obj << /D [593 0 R /XYZ 280.665 339.684 null] >> endobj 600 0 obj << /D [593 0 R /XYZ 72 323.692 null] >> endobj 601 0 obj << /D [593 0 R /XYZ 72 139.989 null] >> endobj 602 0 obj << /D [593 0 R /XYZ 72 126.154 null] >> endobj 592 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 606 0 obj << /Length 2677 /Filter /FlateDecode >> stream xڽZYo~ׯ9!yȃdw@`G!PMg9Br̿O]Z+)FXU}Tu_;w|?R'XIi$aꅙv {J}m׮*I]͟ix׼Z{K&\䭑_/r}8N$ ^'f@=;a·t~ ,FRY:aW*r "$ }:tm v7 b}ؙY!]wت=l/6ָpfv0&v8Oۺ,Y.[1>:ӈ8]9ԍ-d͝G>טh+*/"Vm UՇqU 4m;S&9$/JE"$,{^"wB8rH)[eЗ"v}”5xkOe9Κ 9ut̓Qj}X%_`9%ĂznșnJFwެ֡o=R&{,GU aaGWMF7RT[`u5Zg栨B  \xЮL}Z0fuq'k /'/dtWܒi3tnO\B44ךwEZSqrm%k nɴVITG5O<יߌptn}օR<$ݛvB^~re㬷kȰn]|qyn\CJBșOG Oҡ@/>o)m 6#V7_Qej+a42z endstream endobj 605 0 obj << /Type /Page /Contents 606 0 R /Resources 604 0 R /MediaBox [0 0 612 792] /Parent 618 0 R /Annots [ 603 0 R ] >> endobj 603 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [86.216 196.398 194.798 207.182] /A << /S /GoTo /D (per-object-trait-attributes) >> >> endobj 607 0 obj << /D [605 0 R /XYZ 71 757.862 null] >> endobj 608 0 obj << /D [605 0 R /XYZ 72 593.738 null] >> endobj 609 0 obj << /D [605 0 R /XYZ 72 579.801 null] >> endobj 610 0 obj << /D [605 0 R /XYZ 290.637 489.682 null] >> endobj 611 0 obj << /D [605 0 R /XYZ 72 473.588 null] >> endobj 612 0 obj << /D [605 0 R /XYZ 72 349.661 null] >> endobj 613 0 obj << /D [605 0 R /XYZ 72 335.723 null] >> endobj 614 0 obj << /D [605 0 R /XYZ 72 265.465 null] >> endobj 615 0 obj << /D [605 0 R /XYZ 72 251.528 null] >> endobj 616 0 obj << /D [605 0 R /XYZ 199.381 199.431 null] >> endobj 617 0 obj << /D [605 0 R /XYZ 72 183.456 null] >> endobj 604 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 621 0 obj << /Length 2654 /Filter /FlateDecode >> stream xZY~_A  q؀d<Ƅ[#z)R&ϿOUW5#Ab꫺Γ#??|zLK#9K'/Hʝ"n]X8q=Zg1+.ujI_vO^,bg'@Jٌ;At F'##i*Qv?(4M8K!KdW,T{] Š+GY-=iݗglMGMCYѴ LFnV+/̸Z[u nc塛it{x:^em:w9@|KC>6;^7pxeM%[=D{銨~$ah(<4#s%CwTYo:#rǞp@{7h{(E+rRY皻 +(*zf(:Xm@  2}~R?jO .JWN^.&k$t"<%/pD缝SFۤ6Hbqbn]'O IAb/J#σnZP 3F0ÛxT^_& 7?̤ &}uˤo3 D鮃CShO7( @y~ܠK^0.NB x.^W-u=XaOKn벬q3쫜@<8"!/ $+1fNF.% )w֛ͱ@"uTCu0Fh^ z`8D>r3hkM*%x`t*"ɞk^cqw;.iJUg4LRiA#ٯC(VCףJbQ=IsBs7Ƴ!Ǿ-NPCP79lNhIÛ9<{s7ycTpKCLk{xI4X?jłLT-}u{n^l-:W1hbQ8[(:B. a2*)z; Rt{.{uقqsK$`҆rU6E9~`vxrIn> Cˢ#:\1"} yD6ON–&|.VL(1=$N*ۦޟ.i'zB=:Ϙ|ejxb$T&ؚ]j4n.0dnΟv擮.#U=ŒP77p|#;:n1qeq A~!rfr.H7e(#/IOdY#o*AW{+ͪ0o c̠BĞQtqXp5]k+[Mv4_فؐ10&*i'"~CЁg(= Q) x2$A p҃tL A _* YMND'HےKm[=xCS3T:@QAO5+iGzJ1|^! ˟ mr9c$e|g_R(Kͤ+U'뒮0Η`نί>"_%wADI.;$P;J9(郦p%O.F݆%@8';pe\+o:Og\BMx>' OF_cُ|FRA>| QD % endstream endobj 620 0 obj << /Type /Page /Contents 621 0 R /Resources 619 0 R /MediaBox [0 0 612 792] /Parent 618 0 R >> endobj 622 0 obj << /D [620 0 R /XYZ 71 757.862 null] >> endobj 623 0 obj << /D [620 0 R /XYZ 72 720 null] >> endobj 624 0 obj << /D [620 0 R /XYZ 72 575.203 null] >> endobj 625 0 obj << /D [620 0 R /XYZ 72 561.266 null] >> endobj 619 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F65 185 0 R /F66 186 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 628 0 obj << /Length 2595 /Filter /FlateDecode >> stream xڥkol%Ҧp(r%md]wfgZR{I{/7>.*8v^RdAxEZixؔ?rԛ(i1uB[AD~MC/A^sy{ *Gy 7!Ky7=zy֡AQQ"L}Ab/ ϪhةJ&q)؋VAE.ETEi ]l!l dynsHynF(MWkm|Y 뽿n_l^ C)B/N,&#z{8ʪXAԣh?n~i9@ 4RTdwL{ {*Wm'P*v$akfq6bq6- r<BBy}M#TdZ*d$\EsVt]>OrN&آu9褖¡Xy*ufhaZ56?ߜY1jsF,Z')WɉaP()& MhZu -aqEsK(rgC303#fo ^8@q+M('S׸Tsbbv7Z0a MMۅ;kWUnN)L|N6r4`0=QXJ H27@AMkS"ZaZ*Wm<Ϳ5ך Յ2rܩ嘺+@b3<]dS m g!OB V! 'A+X멛IR"IbIۋif>wLҜgFM[ G7*覭go#';E8l=l\ЙE]v阏V!'a' Z 2M8!97$vVgth ^[|Ea#$s3C '-۫uѦc霫(A;4 "([E9]tmvZ}ZQﯨRHinuG[ٙhn8-cFϝ Udi)`㦡ڰxTg.!! FZWfAF|3%Ew+?S/|3)> endobj 629 0 obj << /D [627 0 R /XYZ 71 757.862 null] >> endobj 630 0 obj << /D [627 0 R /XYZ 72 666.26 null] >> endobj 631 0 obj << /D [627 0 R /XYZ 72 652.323 null] >> endobj 626 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 634 0 obj << /Length 199 /Filter /FlateDecode >> stream xڕP 1[&^Lr`Jz>`Bja"auG䠐!~ j'u{_ֈyeS]5 'CIļTo$D'lمR-lU"l"?yRA1|7në%ֱY;h}8ڥJr4T9 endstream endobj 633 0 obj << /Type /Page /Contents 634 0 R /Resources 632 0 R /MediaBox [0 0 612 792] /Parent 618 0 R >> endobj 635 0 obj << /D [633 0 R /XYZ 71 757.862 null] >> endobj 632 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 638 0 obj << /Length 306 /Filter /FlateDecode >> stream xڝRNBA ߯rfqKy/y* $.ąF?߹\¨i3=9).*:ƗK$` W%O0%o%>z$BC~cIAB/<<9٢^|IPR S UX 1p(!=*Opk Qu6:J75GBHx/Κ᯦֧Rhٟ74mK̷WmZkv8tf:Zi&kɰ;M 'r|t`9Pa endstream endobj 637 0 obj << /Type /Page /Contents 638 0 R /Resources 636 0 R /MediaBox [0 0 612 792] /Parent 618 0 R >> endobj 639 0 obj << /D [637 0 R /XYZ 71 757.862 null] >> endobj 37 0 obj << /D [637 0 R /XYZ 72 720 null] >> endobj 640 0 obj << /D [637 0 R /XYZ 72 523.691 null] >> endobj 636 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 643 0 obj << /Length 220 /Filter /FlateDecode >> stream xڍ?O1 | ĥ/͟D+*uTuH{*]Om_)ޓmg@Xf r7d %Ik lx%^TdR:vB!])6>㒤۰bWTE #l\_;:6.k x_Z?uΩ0QT2g< )IQ"5}!nhs;WB R& endstream endobj 642 0 obj << /Type /Page /Contents 643 0 R /Resources 641 0 R /MediaBox [0 0 612 792] /Parent 618 0 R >> endobj 644 0 obj << /D [642 0 R /XYZ 71 757.862 null] >> endobj 641 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 655 0 obj << /Length 2691 /Filter /FlateDecode >> stream xڭ]۶~"Dؙ)DBkIЊ뻋]N}X, A 7w'4RLp+yx'u$a~zQ.,^bo]zyo׏׿Xt2JB_~zP~5޽^ϹKOeROTuaA.$~1{WwUf Iz^$ 0_&` QCP.^J&,Ŝ> XL+F EîS}Uc +S-Ţm]hnL1‚ B}q \{a y+e,:ULe:q;~:^`}| Ui ǖy\(Y"cuw[!#Jq; {*]@AMWFan]l`??mu""cj_pBHb8@RUpP|MK'4H(/nY`z\SNgNjFfܘzxud౥c}(<_B0Ё  [&`!;պ1 fJRC>Ne UG扟2\ _$'Dp<Q9jD'OsMG24ǀxQ&gsH[@ںf&{/ Cjs,pTTFYAQL?rNZ@ :`` j5tb*;*xZ =U!(vwe!Hm$Acݚ|E :#3Y9:YrWgzD0G9=k(=FT4^*RfǍ Ttr;Nh\<Ƶ&x ݆ۤljrP?iͬ g>(%"Fog$0*cʢm?mo*Lr ia2Y]eӀLy}̃y=@\!9+rhtP U_'& #9no{["c9[) m ?[a51kZXoQN +PpQjqĴA q;mjRiu,M*?ڒtzXBm/A-^;vnJ}mc(LvjZd4tv/fW8R&ۈ<6>F6p/oރ[h zF5NcQÑAR=ja d+R1Ć,% /Zo AB/URvwL1Hxt AҴm͉QSo&V/4`8=EL=ȵ6-̬ FޡA~5GU]|?S6nz2ł*9c `Sdu&e첐ssۓ&hn̤qѢڵ`%ءoAdgT%WjӯdDPO՝ NC{FǗЫOB\tA{.خp+6V#/ n|4qFjEapUMsi3Qtg6r ҍk š~>/ySanL/){MQApڕ'׺E[y7qn0qrLׄuW^U2ՠx6 .oWCia Sxu63Ǝ-iͪ/TSWk>u;f$ lO A(QtK1,(K zzB {P,]uS몃!̮G#d&uBAk]v(YaT4@0ΟVIdʴWaf ZNO2v}e,p5w=$QFeĻq^\XxJ-ٺ+J1˜Y6U;@۟?zXq_!򣇀VcReqYa:-<4A@gE> endobj 645 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.168 350.032 408.146 362.525] /A << /S /GoTo /D (Hfootnote.7) >> >> endobj 647 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.303 338.077 164.28 350.57] /A << /S /GoTo /D (Hfootnote.8) >> >> endobj 649 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [214.624 326.122 220.602 338.615] /A << /S /GoTo /D (Hfootnote.9) >> >> endobj 651 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.793 314.167 188.771 326.66] /A << /S /GoTo /D (Hfootnote.10) >> >> endobj 646 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [139.108 140.078 249.158 151.776] /Subtype/Link/A<> >> endobj 648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [149.501 130.373 217.979 142.071] /Subtype/Link/A<> >> endobj 650 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [165.528 120.668 270.222 132.366] /Subtype/Link/A<> >> endobj 652 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [197.169 110.963 301.003 122.661] /Subtype/Link/A<> >> endobj 656 0 obj << /D [654 0 R /XYZ 71 757.862 null] >> endobj 41 0 obj << /D [654 0 R /XYZ 72 720 null] >> endobj 657 0 obj << /D [654 0 R /XYZ 72 561.284 null] >> endobj 658 0 obj << /D [654 0 R /XYZ 72 561.284 null] >> endobj 45 0 obj << /D [654 0 R /XYZ 72 561.284 null] >> endobj 659 0 obj << /D [654 0 R /XYZ 86.346 153.378 null] >> endobj 660 0 obj << /D [654 0 R /XYZ 86.346 143.673 null] >> endobj 661 0 obj << /D [654 0 R /XYZ 86.346 133.968 null] >> endobj 662 0 obj << /D [654 0 R /XYZ 86.346 124.264 null] >> endobj 653 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 667 0 obj << /Length 3060 /Filter /FlateDecode >> stream xZYܸ~_ؼFuƉ^`sسY"P݊bE]#g,ŪWEjim dnIMn]ymSik I??y=ϫLx+Z?}󗻛_n|XJ&^9\nm \{l8j7h<>(ApVoxD|;,Is=&닖_.D4ϩʏi~'Vÿs^;])nc8,kOH8gM S a0EcҴwr sykWɤ!mI`r+tXdTQq\Vڭ/`ީDGVmO[WqfepXIJypZ! 0+A`Eƒ'k`  J;ȱeAVV9űZEM,=gB耠}/̱_ξ 5 dΠh.5y{)[A4NJ; 9 )`&{%pE !T4ı$Rp]w}y{Kݝ;N-YJ Y=nY+(ZZ>O2S*R{L"9H:fXcBX x^^ʋ1M1i_0$+޾I=("T84ˌr4<[^Nf0ɜ;> 2IQBh{Hʭd[ 3쎤kH0<d *0Ȃ'c8C9 !tӝh{ݹ4옞kC7KC"P:k ghPX 7"YxkAսE l2Jw("oF>;i$ͩ)XLQ ׹ϭ 8In*%(vPf㕋!NQ8,$|J2M޺>R\ᯤ<騨꫎UrD+3d@C.Ef?5hpз~N$@[H&W!fLwaz9*sĩ`LHa Z( sLnaXKwDk3((4>@%hPvɖ!_L ':}v]w&+b6*Fւ+OY_FTr~0T)Wܜzx+(-W),(\ 2p(,/C* ^qÿk_._]9Y>(Y_8T4Bl b UP{e ͮlNR^$2 BR 8%"EJ9I-{TB"/{*ƀH"*8-4z+//x3u c{larfv|#S!&Xc{N1|& noZg%YAemhT'DrusE<,5oD4ɩù,"cves b!8gi+f7ySɂrsUn&Ni<ӽ7%_VK=RK>jW P<_Ȃb1fܜ4怦<0T󯭏^tNUֈr\)*.d3NRH1 ~kV:Y%E%QƐ PV@ ezSI&U:]ek+JW||hjFdǺd잸$㝛{@_:F`SGVU@t#Z31×iG8 X>L$Ye!W-(UF@>CN:lw MȲA2%ekV!pHS6("ɑG$PO.}S%Ad|Bd^U6];{Ow6a4 e,Cq"b~J&%1t&y%:(E& [:[e*af\~ࡣIrSb ^QU|s d%zerwx *=΀K/9"N8żӰCy  vE ɕ "+eDD}_xp]L,(UI(>-KcKaQ:.%qTHR> YԿ[ uHZ]2+.<gy& ORHHTKП5LA?Y*_(Z#Wٿb'Q6"J9~B endstream endobj 666 0 obj << /Type /Page /Contents 667 0 R /Resources 665 0 R /MediaBox [0 0 612 792] /Parent 663 0 R /Annots [ 664 0 R ] >> endobj 664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [208.111 598.833 340.174 609.737] /Subtype/Link/A<> >> endobj 668 0 obj << /D [666 0 R /XYZ 71 757.862 null] >> endobj 669 0 obj << /D [666 0 R /XYZ 72 720 null] >> endobj 670 0 obj << /D [666 0 R /XYZ 72 526.116 null] >> endobj 671 0 obj << /D [666 0 R /XYZ 72 374.239 null] >> endobj 665 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 674 0 obj << /Length 3026 /Filter /FlateDecode >> stream xZm ¸/mo\K-H6MiA&AkvxlnKַm`(J|Cځwg\]2R?e]=#_)Oʻʽ6WIi.R'E?tRSV&W4Ygx/}qׅOxZ*x9п_֎:zao}}񗋀75l5U~$ROOD|'0  <(-"88m4ɸRQ@ Ƕ5~;/V8dAUG^*CTP><AD:~6@uM]T=5>Uo訅PNRAOD4Jiw964ogw4@Ad} p"~j̏bW5? >5aҙrMn7{D^Ş Vny&g{I~:$_"(-'T+/ 8רiva6g,N"rUgt+p#=qh_ˢoޣE*,#X%վ=<ZNKf|? JÇu3> KcڋX>kr}[sG+Jff r8%R;Z(, c[NtX$k@@Q݁8Xi{F*O$M `vt@v‚3¹5~)=hG!Sŵ?ի  <|bPқL[?6_xӮG%13SE_~[89֚Ϩ}HSݰcow9xX[YBayQufG ˟G #ZCc݁Hǚh*r9Aj 9S!o[Ӱ !uVG`>n _3Pe:/gWZԺWBj$PCPjp,b[hcNC>0g#NYs_MUW\ m-Ǽb@/zۮRl`7zL':!NhI*_ f#$oݚ*_D d֘-N=GǗsӠgn)/*k -yot+5V2oS1令K$' "v.cpK]"␱!Ѣxt Yh3-ܞISL !QTf 2pRɼ>5MmO\wd%`~ =kUP|hY"U%-S `K-Czx;͸k,WAaZr]n2Ǡcso\Ds0%]]Acrt>ɺ- eD4zZ.ūX,χF!ุ4ׄSq~o2FLgIPI8?wk}`}c!7q_쯓m=9{lbv]L;:W@IKu7gAWV T/ ʥ]SjU2*q/m5Ԝ0qwE/_/o9%[&kƞY<&•P)_Lh!P/AB"lpظ3ym:9bcSqyZ (*`G:O.-zq_3.w Iz6e|Øؗs_ۻ1 2*B9nus KQu4$Nt:Ig-Nn/EB'Q W✊{{lE]t)j]C= >X41'") [P|vӫ~b꣱P}%I+Uyfk̮vS*;nf[n0ۂk%D5 ɬȜl xxq9ܣʹ8{ӤKLR j+ddʆmb }H %8bW*'*ؐ6}=xѲ UyTS.hL*;;0\/LR{@{7dRTpu5 '唓ڐRִ+!R4t_=Qȿ' a}>kFqriRU,v+AgS$>g7߮Rr4*z+ڪ7}=^cMD9di(AKC dZ S }arwg9, )TtCin|WGs(vnjMx&TCw"ɚ=zGbmI%亸Ō(@a^Vq34Yq`KDM/T"BxE-ufJ_-QA554؎nnoKrhC@^{찪a5T86ϰeEN%"7(bU.n⧾+2R_߅"H҄~yp8 \`gn9 Nn\3P0 Z󽡂h찬p@$ľ8 {**Xͷ`\I^ a{nxnyGcnh߫Clݦ脑Z?> endstream endobj 673 0 obj << /Type /Page /Contents 674 0 R /Resources 672 0 R /MediaBox [0 0 612 792] /Parent 663 0 R >> endobj 675 0 obj << /D [673 0 R /XYZ 71 757.862 null] >> endobj 676 0 obj << /D [673 0 R /XYZ 72 403.154 null] >> endobj 677 0 obj << /D [673 0 R /XYZ 72 184.051 null] >> endobj 672 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 684 0 obj << /Length 2281 /Filter /FlateDecode >> stream xZo6_a졨Q,{{v{)a[ΌfW4H؞I6dZ")'s|*qRF*r7N8HD^/mK'OϝnZHg%>BgB Nj_H9"bgU^|s@&ΝU:A@[8k˙;hLT>0c~ȺEBY1HQ[e dM0,U]}cW_Ѓ?yBXARˢ^~Իmjˊ4γZ{˂}soq^3߮ѫkYT _&Б" C/`t謊Z*c tʽ㖧SF*+y>G;Gٷy:+X n5=jƗl mw#ԼuAJ3c_h$߃Xzkvgx5uP^ȏl"H"?} G"Ld6(A9K_D2b,}v䠬ZS }ںꌽk6@iaf皟Nt-ԟcU5WM_(HݨLB (LxOc<Pbq1e"'5tˋ$1b" $}؄ck9 & 7) btBybo GLĬ`|^F`9SDs^_UyeSlv`fb6QV(X~`a[Vif5vr(_rM$9rQFJ@alOY%xHz}Do޼Y2}{a<,D}%M0s=ۄ?W;`Ly'̕3F3f׺[=V3;=s&WcIZ/ è1n75Ti_pcJx]e3]KSwV{ꟽü)x$<祾h/Q~EYd3_-|Q)9Y.6'xn{Fߎ2lˀӁǯjR1S nZL}6fPళM^ΫfˎrQfDS=&|pM~b=0_Qu<S'vRJxh>1?8¬48$k/I47}LysSAyvrF8psS/<̶sB1g/M <>[1Vuɷ⛾7 6mZ2Iι ;C*}΍ܣ?RBW iRs8^z bCeZlM*F~hr|Lc^؋UbWeQеl77e䍷H)u ; "?; NomEgTQHg\;386o}2<(KX*ͥ!ˑP~-QmfLe H ?k Ua'iM-:C9\l+=_X0./gu2ny.ozm 8~#uE7Q޼/˺Um#0e^j .zwk}&}[{e#, fAd5G.t)!}.ȕ.An*r8R93n5EXlgdd \e$ճWNlm1 LİDvPta~e)XAM1v }wMaj `-a#P*^]W8* 9_oPW& pu@2:rzqC;ML0zHDhELmb8kymEt * t#3.FˈWAwVu ojMMb"ɠoJ0`3gϱ4SE "b>ygߤ@2# Lb! N =BLYDIS Qu {!{DD)ty6 3"w}߼7.oġ,*_Zͻ+0JQ]>d0Lq|I(QQAbhNz׋}h endstream endobj 683 0 obj << /Type /Page /Contents 684 0 R /Resources 682 0 R /MediaBox [0 0 612 792] /Parent 663 0 R /Group 681 0 R /Annots [ 678 0 R 679 0 R ] >> endobj 680 0 obj << /Type /XObject /Subtype /Image /Width 560 /Height 142 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 688 0 R /Length 8236 /Filter /FlateDecode >> stream x PT׶ܪWu_O&Y^P4F("hggQ&A8Ę㬠8 32wx}#+8NJ_~f)S0#e#sJpNeX[LZIDQAU/4[=R7\>={ƹl8u(Qo}y]+nNpզtլqϝ* Ucu b6XŇ\>k Ũ\1.3U~o0:>c(֞x\'>}DpS$IxՌ.XzsdžoΘjtڃSBj[1w8Oɴ^\-: 㛥y9vKdzg5icmd̨Y9R ;s諭B$=k1BAޮ(ms{x\5׿llhXkh";[웊j62KMo;,Fptئ7"aG)mLul8J%~k$pI*I7e~2h?S-Mtj|kϴ=zsU^'^lN߽dLTsq YF_hȵ'IUo*ᱺZinn.}ˆkMά5rl9(&*CI]tئ7GWlN>MD⿬̗y%~)99OR&dFL=TW*`v";!Ud\Ѧfx+^o3{VFa.h8# V檮0xWmn+K^ɣ4XKM6Lp1 d*`oC=]x#3zvu{$.Oֽl}dڏrvQ4p[>JfKfz 2h ,s*qc\f&?QAMuK[NWqu/7Ӌsүv_M*BUzvX5)ψ%21WmWt''WYezb{LwLrl5$\6(`NN2<zJF:N"=sxX7?|L5v9=˺Nn}sssitڃG{Q*MMME9)Q頻JWqo+jij+8w~3磣\QSP\W.~|T+?(sEs>"=4=o|*-3F+zf$E7577 3_dQ??Nc.LI{s{z#QNSr~R棭tc#mlO8qe,3v"kk#*S,pϒs؉L{GӍ_+: ?52c:z휏h-SW ׷;ef:zZ]bڦ;?4#&Vzj왵& "1<[{ӍF05{[ %ϦC=2!< ۩c'2=td7ѣ7v =lU~|dMrjnx?;r>t萻; @;q[e,c*Ya|dſϲikJeܹ;1z[ft6S{`D;reriխч銸sұƎ_I':,7r_chdWm1\=&N_I_;Ғ[ۘW&HIgΜݱs'.^A#e=pED{\a6XeR 2\ވ`)}hw\x~y}:Z:V@l5q4OgDވP3tTeUi+4w3$p~$)1H&M~˯RbCIGGH s*#Ѐ3?٬RKbLΈЧyB iĨRusEEzpctD`TG g$ƪ`0[SS#a:9bU`0XaG# AG0 ;&=˸---۶mHkkkopa0 ֍zG2zt)ϝ;U`کG߭S v?0lЁ^B$a9߮Yo~ƍoh8G R!'mbQvC 0`R65zDb˴1qD" N=*~6cS?SU"l1<=%1-ٜm6[6fsfn77mf2 +Kb:'O2۷$r~D\t8mH-N>`0G+WX#\;Yp|ݪ_(?O}f5/>C7uLv@'܎*ӣ񠝡h}}}Huc:[ZZlll`oߎ`06Q/+`0 z=`0z`:G=U A`0X.g9FGaU`0-E:aCbLî$X0 N{CXCθӞf @% /_kzTU^R[S[" =@@==vƒ|:޶~u4\*T~G,q!&FT׽RKEz/%1k4_*#e4LvfFC} R&U[YTPMͥ" =beu% jsGQU |"#BzTSU@e)ңr*#գ&Z.ӣbգ2exOz$) B^ӣR~zYIΨY=6r=gm|Ç svg_X0o=7f'?y?8fh8Z__ЧmG(9tV=Rm͖M X"yzJy7]R̴M[-#_&?fIң~zYHUz4r 1ب0RR5d`y=LKf߿=Az~vQA+7>:b>cзo_y=(6^cCjs\FP?20y̴Ba~v G<~zY|K@s>@mꑟzuE e&-?]HCjeeCzQ(Yz 7VpQA^W˭ 0|0ǃvL~{'uAccS\HbDA?!QJ TAScS sW\ףgg%??bj#!yتG~=:vtСoW˄jգb &=Rm.~/GET㦦FBzTYV @eR?{Y\˶+K 4_*#W} ѡ%bʯDrp|]*Tx(К{a7}plC~vFJbH26GGGף@:x##@Mzu峞n(FE6 ;'O1R/l (;-YE HR5lt(q!&FT׽P)KQ#F=w-'y6\(^ZᏥ#Ȇl:KIՆ KQ#F={.; Ki=**XRS1\=0id] -ѣ=p߹B3w~uUWysn5j!{J ێ00y尺ws|lAO|?4^n*6ᅮvI6GgGj#I564&'zW~w=ӣ2;lذӧNy5:R >|S|n(Oeg("%K4CFod]NQIK`jNj$%x߿y~nv3H,ygBl;Xxm"24u}< "B!P,F> ‚nLZł܇w=\vKڣ,WYlA}h9jk;;q{pׯZjJܻ;bpaSI~ knƆOĉ!LYf!C;OzڳkСC|X͡eC! ol3@jrv3o ͚%[=ECK uT9ߧc"B>( dGSʊڗ,.Q07>:CA~IQC}}\td\tDikhݒ QG>MOM.-1b"Cc"־V+rXW[[_rl8=ׯ$I#U` D&Ra`ٴ20'*2ivRAjz# 50(RO# K iii򳩓L(821asSSW*OKp$ 瑤P,22ѓJZѡxȓz3r,'e}je!IQ:6l(Ӗ`uw}pw-^N[o1o߾la!(/S +s%P[e; ,M[ZG4ۓLoz$S<ΜT/R谫 iӖǛbܩ})yݺ+Уv4 76GJ`eIzV.q24H m8ђl(D᭲mH`%z'E='2Ӓ'F]4<$@-ΠgldH>=w?zAeg$S's[R1=j3|{i)O|5חPO\d2ܹ]UYn=*婕C;JuF1g0<wmtS"Q/R/P,r!sBz"uR=Yd15ې9ikc6sHf'oݼ鴷kanB{k[Y.VDKv#iӒh -#"%)j /oRBtcC}UEB߹#>:/woө'55U=]Ҟ'P(+NJyy{j_tW*4Gb#idղ/*,j:լGl[F :dO1buo爐E ?qoc]{p;F {(޸AKFCNL'7=Z_qYɆ< ol3@j8۵~oʯ9/46:G.ըA)1H e5onn({qE :쪛] K IQ]YN;GDJѡ맼0,e<JLgfCZs]#Z 0uS6Jz#dwd}]#ڜ ңЈ u lho6Z{I=**5x*0l(9eE"]#Ȇ:XkT`dPVs*J u l j#@T<@6Gzt‚iɾx!Y3/{wOB4.I uVg uiuGfsMrw #\;?g`)"10*S6C]kzC J uy+\Vn9r 1&ć endstream endobj 691 0 obj << /Type /Page /Contents 692 0 R /Resources 690 0 R /MediaBox [0 0 612 792] /Parent 663 0 R /Group 681 0 R >> endobj 689 0 obj << /Type /XObject /Subtype /Image /Width 559 /Height 247 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 694 0 R /Length 8841 /Filter /FlateDecode >> stream xpU޷;sy~A"zQ(UiKMФE){H $@HBH9 ғu>i'y{?;wIM""bxY%m:DDD+)A#q##c@tst5)OCDDC3%k$qn>"Fm)gtG~-ϥ5Fӟڎ J 6'>3Ɉ\2}^?Tk b"$1Z./qjy 1Mc^ ܧ?4Jwz\qFscvOnjMȸ/54Z]ǗZE=/ {?]hbޭCҙ5_olMȤ;buѽNfܫ b`?Fh_k 1ڱeC{ƍJM :J(UW8[K#.ψQKJJJKKQ]~M>yD[UΔmݸQֻ}NͭZ.hbBƖZ̎& 0;a*a/oz{ksL:uرȑ#3M#VG|1Q꼾-ї%l*"#8e%E9)U`r4⮢RCzK˿)>?KKuu¬dCT埤쫘luRӯrC %]ʍqC]mջZMv5Fߖ09UdOty+gtGbr(c ݷz]rFmzof j=.$-{~mC;B\[*; t|f8R'1Tq^ns=K9!cKhQ]mtTk =W]G}׾%atЗo+O>T{y8אG?|i_}y?4X~H9T$ㆿ1疍2c02V4*2[?n,PT77[D۬de\2BjU31l'%/#xW|-C+.*Z>1]vBm })g_V G[0WZMqz](|ÕU)q*Q<`U' 微”rש3M#VǪg$JKS KV'4^Ecat?0}؞enҲ7IwPJGcJKmL3R[49 _ZJKK3nŮz̎ bГל^ЫJwhw0uehŶF~s]Xeܼ_/w[~abٞA w,7ʷ,LR4X5gT.fAjuy{q]Y;X2;`0X_Cg7+ߝq:0 <ʃP׭I!niٿKl}<'W5T959qNg`C9U*_9Cɋ^nY`t}rҠ^N-! \v(! RddWc4Qh|UkIk|K_vIk[>n6Ydݷ -Zbe\\l:Pq%%%yᇝ x99&}+ʚed~NsKfQ_3SStY6wy /#}yAW|&T5|F$E|>e]r;3pׅvΨ:]hj-fG/.#au`AJ1?,X|G6] Wo8wEox8_e˖{&ioʡ~6%Yi2_}Y5=}Kkr3+a֯]ِ!&C)wc@Cv΋+'Pu.zu2^Y/RiRѯ=;ж뛶]Gv{p܋{ NǛG֜_dg̷;hhrtA4F>91赼 ׾f|9.wv.\ȡ_m9oo׮]uV9٤;b5uخ7D6~iI'ۭjG>:<8N3k|3O?36vݡ}MA浃}9N27oO.iݪ &n/_1*/䜪:ZS;Sܖʽ)vV MCں׍x23ˣCᇝ;w-X[\\\v%gtGl:'H 5[G\XlWkoik&^v_{F4VHTwCؤT?jRC!6sv>GZ.Xc4q!MckRM#6)ՏP |Zo+ sdEDDĆT3!""6z~/35Q C!""aa""F""FHFH5)IqIqшhUe% عq;LCDzTVY`eH+^,8-Ŗ0pצUWՈ)-aZM0Rzs?~'ۻVD$'>,2<4aC,砜0{>t;Q;<ԯ$(ie1&N;↲b 'ale;++KFh02=#I{nlWՓW Sݹs@?eg:+]vٴq$FQč]|mɸ;uxRe[6pk4'#Dnt^k|r.ANMo۶mp;|$_,q bgwF<40r{I;7:#riX* ,\[mfEDD*-aB #DDD #DDD Fmӧ̞f,2KixN59YUXYfe%4ܸzixh7 "eVۄ(¨*2/;_FDhLtTQa~-:2+DaTADDz_,--]_Yl #0e%,Qn6""ZECժ/ad1f!"E/yzH=O9b[UF>`(' -jƏۦM<Y ̪|O4ADl%zy^0ܾk6"fF(;C[CY:uF7_lKK1t 1Oj߾ӝ:Y~ xQ#{v<2l;7|L'_mԽ{7>{\Q'7;C[kDgEծos #3GᡣFPsGO?"Q1ƏF|pzPR\_JjQV0t"bC¨v}c=LgyR_1#w:iq8ADl=Y\TX1:w6dԥ3..:"#%)!&r2t9-^s ateOlKK1̚hn;j)O=c%&.A[kD!*E #6۷9Qr'Mh׮ӝ:ZFi?m۶=.FĪ|~4DDl;]\\dИFKɿUmg-c3HIDDD.).2{(16jwߪ605czLԭG1w,+Q""ZLEզo3 -.:uc81).ڪaCDDz0]_0HEDD^t?_RR\0LCDD߸^p/v} #mNDD)ˬ,W/ J#"ev%ᡄQUy\8+3-9* ,=\h6D_/ Nr4{DDGeiuv\vW # bCލ 5q+#DDl FH!""FH!""FH!""FH!""FH!""FH!""FH!""F،h.~èF@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@F@Fc!""ZI #DDD #DDD #DDD`]8"DDDkt #DD$ #DD$FQa'~;w=;[2G̗jPZTmӧ̞f߲9LeTjԢ гw߹JOie2_5ՠ5F9dke2_5ՠ5F-~1V+NTظzixhP_jʬըQ5jFj {MˬTjTsO̿zʬըQ5jFGJ׷6efH5FU՘=;U62kA5jTQfR Q傓Z~ X~Fcѽ֦K5H\~ըbnmj-TjweꚎhWX~[[)K5L0X~t|]:N^Q0Jn: ,oW\~[W)K5L0jmj-p:EWj40x'_F2Sy]pMݪ¨.ӯWaim|GX!!Yg@]#o5aF5/qR&FϚ-/+(.*u3\vFj ZOhQvU ֩S۷Eِ]iT֙ O}=[aBd _m;ְIUj8zF](=%^Te#,$ܩc'~ܩ(T}eϓG?shȵiޞ|NQcW1IZJL(Mx̉#u!%9KajTsĸ3ǏԎj%#_wQKzըXp2G[ڸEv'V3Oiiכ=v=h{ʃavyK>۽M>}|4ÜY:tx1=Ϣ;vؾ}I'kԪaV6Zl]J<ھ??`F#_T}QaI*W/]tϿrS=?@=dgߓA7R|/?S^^&^2Ԣ SkR4LYϥ[73RuJǐޥWJF"PiiV0JyqJ-~ޭ%Ok_[ǙFE4{ggOL'%̞9CVZuǍKINX|YW_Q/Z0t;n&FϚbCd]bԏ4j쥪'(F!i>b 7ؽ,¨P(ȗw2vđE~Q%2tIw+S=3Mܩwsc=yLf*T}rXi/wJa0bΟ9'1^|)++3n%H\l+E3XuWUR\,r~U[ZRR_KOS呔/y"s1pI7V)ZM^7B=KJ5Nv%N֫|%YՎ;nNmY^vlO>~WeX͐@\O>>COSw%u&HT/U DaV6Zl(R9F>;+˸NMygkF&˔׉yyJcl-eV#e[vӁ^t+*EQ5|-+=ĸ;XTqS?aoU'jrٝ8a]?.Zb5;ikW=g~;7Sb•YWUw|?/AA ,8&4j쥪'(W.+>J vo40s5v{#ϝ 'oq5V+|cc佱%2NBm {AW\LDݔFhgOFE_t;[TX,-A~>fO6ù99t]UءMdeCv}(gN}'ޱ#j,u6%y8|VhRmY(|0Z9$S۷g4z2~uC-17Bit\dİW@'cv&R T 31uЙG|di>}|1nF7BdL zĉϟ9yFHU #ׯɝYX~kdeH(JΣȆ쪇*ֹ֙ӫVXz4:|>ƦO^?}Ҿ//<\۶m{-.YOxW3cO><0:]4Sӊeݻuik۳5;HөFe^hqqyŏ۵}R7F)IqhnvFqqQY!!03{yr~iiI^v}wdCv"5FYgH@F^N<3Xv5j4}!]4^fO6YΑ4c5 >R&\ C*5R5N5 2F˨|e$65_є!aX X~(R[0jj%R[/ՠU-8֦K5FQ.R QՂX~ը0'6_A5Xpr2Z/ՠ/ X~F {w$Ƿad2keTj̝>%CԪ>ʬըQ5jF'I%e'ER Qjl\4$'+Mzn\jPUazOaYٲ9Lea|⢩ը~5W.㙖PfQf*J5FQ0Ov|ﮣ{vlenzEGܤTrx)ٷleΎNTըu 1QAAyR A5հ^5jF%a"""aM$ R DDl0jӦG(FK )at7' "bpG #7E&DPDDlg"QLb+¯ ""ZU%w _0TL endstream endobj 694 0 obj << /Type /XObject /Subtype /Image /Width 559 /Height 247 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 324 /Filter /FlateDecode >> stream xұ i@b" G8]r,x%aT4~O0_h:e@< endstream endobj 693 0 obj << /D [691 0 R /XYZ 71 757.862 null] >> endobj 690 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R >> /XObject << /Im3 689 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 697 0 obj << /Length 3050 /Filter /FlateDecode >> stream xڭZY~_A  mއ=(ȰDZ$=3q4&>U]ÕwqWW楟:b?vnvN;I0 y٦Um$ԼdKz빛!Yɼ\r7W_y@u<Mx)aA:wf y{+wq-8\ qNH>7;жGײ 77eOߺoeBq^[/HNuvzB2Aő=66yz~Gz|ߴP 6w9tJWzo̿r1|~oA[{sUuC4zG v73d.5Y`a]_R$}#zA \o|.׎KD/ϱv/x$K .;E lS4aiVUCz9Q^pA5luID,9 Ahag‹ҹ}ߪۭXK~[u2aVCG+$\w~9ìuĨ|/F0pSV5wu)bZ:;T0wӑ5Sa6ɩAA\7H7AL x`K@xŸhu7/[$}$1F/v6,)`LH&G/RPF9ȧ>R!nz'U0 wՀ(ݖjV*5 ƎAAh9VgAhsj*{,ht9OYI,7LhBdS^3&)`Oy< S+ębkDn=t 'ei [)NBaDZЪ[!-/Vj?FcxS?DPFa=cF%pjp x8(HM_jpr:OFѱ$ؼf)'"泭l7w ш!V-r 6?ϲϰ _OQ.=҄(ÌtgSɬ_;Ȇ&p dF+P3lvT0tRN$S,[X"s=`]fpCy0όIհJiQܭ[Sw쌲*Ǚ5)4ᮮNvyw:n6([Y ԎOmN %!uye7XOJFEJ{KX-ti]YƵU˸i,Ex6F qV+<GcEywVb@_ 1Ũ0Pjj(K?"Be!e0 H6pN4%"ԣ42U&X7niHD鲮Jf@uG6@đMt&J-y- A0rxyHi0D㌋ o]{j\^MC1ofLgY* S0xmWUfDU!.83&`05$T*0sb,t-=3S2٩xmy #TGΟp9eШ|9&Nbe[4\zJD˅c!^Ł"j8Y0ۄǷP2VL/9s?Hҩ%B/s4|H' G`Q GN K.GfT2/PadM<{n+e1" P-c6?ƱšAؼ"KXv>.c.D"YŐ΂f?>$Q˳M> m?{6b5q2$"2UEgtÿ>خS3P }n-&,x\**p_K05ZTf~_0ho9NLE衣X4j9z6=F_- ٓ$RǗ.| EY,A}%*> endobj 698 0 obj << /D [696 0 R /XYZ 71 757.862 null] >> endobj 699 0 obj << /D [696 0 R /XYZ 72 652.1 null] >> endobj 700 0 obj << /D [696 0 R /XYZ 72 508.846 null] >> endobj 701 0 obj << /D [696 0 R /XYZ 72 438.663 null] >> endobj 695 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 705 0 obj << /Length 2632 /Filter /FlateDecode >> stream xZY6~_!`u38ca{ZkTH֎ X,ӢJd.x^={uq0r'a]l=L/2»(* F]Zi |hUCdޫJV,d|ŏg/~;0sq/ aAmg ?zyݘ^{/J2Vg< R >y"N$ 3,Lt_ws}TщdUY`MdZF տզdV:4Uu'Rh,slRV7ev30 ~fVܯWkwPC]5K 㘴xWa( ţkfЪ#~nYQS櫽=rcC,C[v3aQi}m;tNtJY.l~h!"+OpO؁pOZ`CmT斞w$F LU­cjjت55:YV3Aّ[j8aYUԵrI";V7F)knq]"r6u߬DVr;{t12Hnu0&{½ yz`g]tn*qi>9fBfviC32C ٱ!,*h3v\kZȯL5-GWge rQvIȶ5\RLKqb"5vScN*]Aa\J.OLF/N0Mߺd0|x|oIHFu}S;vspi6FƱhXʸآ n9d:bG'T7bGm`5VI f~zY`:-eQBobXkg3|n 3AP%71^?XX7YdN 8hbn6Q 7eG e^YB\[zvi-!P f o-%o΅ UM BhPb`S,v} D}:rU)]&'LCm+]tk$J/ ]a xxՌvn 'Szdg]ʓe}7NOB%b$0<,pm@t0.J` >DU{uMi `Q$njgb p,p;^X`,ÁˤU$HfYb`/ID 7@gL%KHY4r ܠ; 3@ث4,!:Nab rKS®o;buv/C2ݕ aɽ1PՋTS}X,Jxmr)X,&fI:J8܉R#={ULi&]QJ9˔</a=K 8,9fvg,)Qxrg $ǩp<9  R>pn]d=7pe19qA5„$A\@ayODq`Lo,  Pqn4;_:FrbZ^uFG1'S"G y$2'9i43z hC$X˽$i 6Q%,R1>j= #+mq>2@@f;= 4Ur:c.AnAs_038qSNcaZr1wEEGJw߁dV7N8'>n}@x6C@d6 2]0{Tniѽ<w"-!yzY3wp|=._)le2a ltӨ7$`WI9G)2Av x]Y¸Ɔ[w^,19_]GCs3q NZGAjkN# (t`oNJz|, XHW&V42~7w(!O2e%T21%FVZ<.!-쳖?aE4xJG|7UtX@F6p3Ap>^%AE,Ta ;fR(ώ/Q+p6=ln Hՠ$s_×#ݵZgL>m-x2b%[(&Wdq;=Y߁l*;[nZ > endobj 706 0 obj << /D [704 0 R /XYZ 71 757.862 null] >> endobj 707 0 obj << /D [704 0 R /XYZ 72 652.22 null] >> endobj 703 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 713 0 obj << /Length 2622 /Filter /FlateDecode >> stream xڥ]o6ݿBZ +(J~).HVwuF Z6+ ԐpCޏ7oonR/ $JOG Τw_z]C^qtK~fȻ)oCTX n|@5Qjho>z%@fhw^06/7?߄C"DE܄rnUұX96 k{ _PҒb--UuQNq䟇8m[wGHS ]E4U!E r$a;*/Lrw{q 3-jc^oN]MMOX=ݱm^yz)\tTcS}yH FTѷ[P$IoS5 $bv@>_UL;:R3S>4<) 48A Nb?J:z 76gT#;PN])Z+s[Q,dW.q${QM]x71d\0|8 ] U[5O z@x͢:l::H@@Dst_W6 ɘ۰( tv=2H-v 0Y- } T WksX>za8\[ R"*}:kԍ~"!T6vFF x#eyW=ڣ tq.`g˙ #;N} \b4q,l ?l.R>]<"FП&YHWp١(|f 6,Zya &-`8LSw!20: b!&x쨙ȌCWBb^8xobl[q :x>e=bC]QΝ7o1\htgn+ xsz@d- π~80$Ri5 D ר4 ^,3YvNaBi]=almhLAr+^gSn 䂜nE*#p@Dy ɜzV#e>J㹳/U .Q>Zai(}ӐKgE]}>W>- GVy4"Q8P ri%] *$Z^ {by{YD$pd+!*a3aeB " $Ƞޗ(U9& sd/t^/$\X!u_K+ZUkI'pf< p.Ϯ5MD;N|ą]va lu@ p"-\g\6KzY gXp h/dJ4b&N_MXMLs?G7ڰc/'*yGcG= }ˋ4/EaE¡ 150>j$ĜGl*=4a*\?` *ŌQ,%ygؑ@L4Պ |Pv>K>JOnN|dҽ@&\dn-w5nMށncRL t :{7-}5L'pbP#?Dk{7!,EKvSL\>Ajpdx)m6P0h%V { vY~YT2qG 2!x_lySBK`K%k '_ aqQeU"NldEdWK\U>0NcKe<\z=Mxl#ZKc^lVV[HB0_>WjiO4O4E5ToF6g08hMKJhȪeU1ؾq_C\ %TDm[{s#y㗱{3;2q3y- ]A :.u%|CBFlIMNg ]|͙HSf :72T* wrփR)VS4i > F%0EIiBB~`@ejKdO(u\M I=4U-unC@|/?SPNR _s*1M>nڒ=؉*JB LluXˇKj4RT\)0ZޔP5i]?yEZ?_L[XŁs+)~v{Wn<|@ wm4"$mkw+3~M@aIZ(RL?{PW`~:TqoAMmB R%zwƲXf4{W@zBi9ޖ}1NTRp2m@Qԯ ?Poc_T}܍URGK?_2u?t endstream endobj 712 0 obj << /Type /Page /Contents 713 0 R /Resources 711 0 R /MediaBox [0 0 612 792] /Parent 708 0 R /Group 681 0 R /Annots [ 709 0 R 710 0 R ] >> endobj 702 0 obj << /Type /XObject /Subtype /Image /Width 560 /Height 145 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 719 0 R /Length 8181 /Filter /FlateDecode >> stream xyTW]w˻u8{DEp$ DhJ5"@ NAQQPPA@fnID6TJt@v7^:uv:On.]2)* [a%Wq*$HhHnHtHze]._YtIt~9$kHkHqn]z߯薻cRڇ(#8׸6$͙08t5y>7|pœC)2_H2DbH=-'4Ӹc}Y{Np h)Z^٧gfiq UG (Ms?/>cDшsH>L?g NpErۣ_?.ꫯfΜ@[JtV~uMcC]inA/3f E8o_Wу qMo~3" O[B=7C~UEab#U^6; 0M؜@gh 4(ٟϲp yާlUS['{*Gف[ʅ[]ήc˻ux~w߾}s-]!=}lff@[J)ὃt*#o1nGa*a!l45&<6={-g3o8Dw>2ˌQNU']dah8ygStKFn6bY(\85MLh j ]ڗSl:7ϹM~3ʅLO ȶ=yP`k[ÜGQWbf/jcۂβBյ<y/6n*/ E=5^~OUEٙ%NVM$ও1 $:('<ј?hJ"qWcFέvå'jJx#gӔ.Nņ;k.oZ>erЖAb8mKʹ~b4huHڳsmjS9ˢ1Rݴ?b; so]r_2aٙ+3")ħs̫lnPx-1{BdNQNSt/yhe4`NItѨ-q7x 1ri9kBϨ/} &nO-;{nsͥh Rl]644^rGywWWUIm*[7fi]<0]o\=ߺxHXW!snx#}#mP4_ՔGX5p_eK֌dACuŒvVG akrgFc.eL)H[c[{F#oQ'>d/au?2-mv卛m޽Yb8mGseb;PoWZ}z;il[c%Y[|n1k#˦FcM%B1\Xgxw9T~ڧ6F֚3ԕ ?`d!vS|ypWi}><ЉFC& e6tw_x/6A-~Lr&c.k љShk=)hDF_+.9ިw wCΡ.\mq{;v۷:K .1n4gBcׅF^sH yq[`-fv߱gqsF;l~1v󫋎vn ֙ v3qm5t_hoɭ_J}֗-GV;[_fⱨ;=wǡ?uS/{l604(#uzצ#=o䖽?έ+oHM:y6g^__SNeddPO\QP] la5+@eD#6'xM^zURRRUUEj=LBJ֙ 9-гp hDү&qiSZ~VP1?MXN6{!cF2Hƌj-BཐIb==GGmH+b#Atm `02Zie\ GOv튎`0LnZ}||h1t=:x@ h`0Zvv6-暮G#y݄`0͵Z5]iLJ `mC`0 k׮# A`0 }z+.ȑpqj/љ=tsBWAy;@==@c:3ǎ1Fan{p֢<~.ò[?- aba={02yQh h4ڡGeE4m#!F;X@=,-hUhGG ᗕveb!2N둏s D @Ceg$֣׍Ȱ|uNpZ fjQwwo4Z6ݽq%3-E"AzDgg&8Sh Y5Kh+##z@(-@QCk@:##@Izy6͑fJFFrlH٫nh4S/jl F[a=pۼ.).EUE]mvCs|iRtҩgIeŢ"H3ҬQ d@6ڒ y95)^sȅKCIJąK l ͆-NYsTP35PcG }=)g#!U{5nسVAzUFǖSլِW*Bs*loJ=jjׯ$߻{XHA%Q:z(%P ߚLJ=OTGP)1ǰ{!>{|RFrbzƎޝ/k$^P_zems13Gmj J/yO\r@D^pANf:O)6Ȃޒ?{!99?~ă0e_AHKzp[7T3k׬Ŗټ|g)Ia*S6R;'H vaijCS(7+i z~˴l!ӦEiܺvX\_+ׯ譝XCֵ@@0/գQKQA^W_=bnhJR9-.P=,z8zСTԦP;YRkO{4w'Hm$AThB{dBXxFHGg`Մǔ%Mѣ\:$'ӦpO DyT~NG9 EMuD=a~IJ\"3Kg3c[鰱AɣGr晹œب&~$ҭ>_ݺuc:[Lvc8yk)rR^m(Iŀ: :ߞ|%e_AJIz͠'۷o8->Hic٨smHT RCy'6֣yI07'#8A"HFkCꥲwN8eIe!Vѣ޺&}NPɜp;9|;2=%1i,aJ3-9|ՊN~HǏ= ΠNvF 9=/,. )gD:g? D=TH=Bm ȆfYS6ԣΆ*H#lhb6HW6#agzf=Bm ȆeEO6ԣbQgG :ΉȊq}KzjRl\;<5Xy l ͆> stream x !iO0SB̶\J0a4 "1v Pv1 iǐng}v endstream endobj 709 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.404 121.36 417.381 133.853] /A << /S /GoTo /D (Hfootnote.12) >> >> endobj 710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [122.132 78.778 280.432 90.476] /Subtype/Link/A<> >> endobj 714 0 obj << /D [712 0 R /XYZ 71 757.862 null] >> endobj 715 0 obj << /D [712 0 R /XYZ 72 448.831 null] >> endobj 716 0 obj << /D [712 0 R /XYZ 72 420.445 null] >> endobj 717 0 obj << /D [712 0 R /XYZ 72 164.654 null] >> endobj 718 0 obj << /D [712 0 R /XYZ 86.346 92.079 null] >> endobj 711 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /XObject << /Im4 702 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 722 0 obj << /Length 2644 /Filter /FlateDecode >> stream xk۸ pvV%Q#@\{ٴrWm]dIGw3%Yz7+rH{CҎշWދ؎/n7-º][YT*m ϻZWz,Z]FgZ՚۞.۫_\Xz@ŷC'k ,qd̬|3߮z5Rw E1 ]vDHR$΢Ӳ u~\ EcfcaK7BGQ˰Ô#!cat{v q9dD'v!#_N+mmfQNˠJc>s.@nA`E`X";mbot>,_2!0[W,]:ͷS_dj8p캑-dC"-x \13h '|ھ ;Lbs?Rf/qhy0}?:ҡ5r_\,Ѕq7SAc7@T1BnΘ`Vaf6!d4Lg$9Hh`ZG0ozu-4o&:d!`#ȹNg{a<,xݺ%XƤ{(ǟa~A#e&I^|/^okOLI*i {b[H0y䪰A9mv{!nQ)js/xʎԧ88A*|i Qr̄qgƖd)3d/Zhc7*֭8N]d9Ð'1*B JoڌBYMn :$URS Y liT cvL26@_t0[&-qGFPz8#0Hj91j(9]4i]MT{A}j*u %l,hNnإTg|M~P1*!4"v:窏tts jfuҚO=6 F`fЈ! d fKRB')5U/E%;ȎH`c n nN_mFqEQÿ"])18[@kã9hW;8%ɟDLV!?hP=MJɛ1GNC(v~^몙~t/Q٭} Pv*D ^ȅ|uߕP"{2ʅ3;'b ǂrϸVg?h&*0DB!O:E3RQd\WXw\8xA^ e3/&_U>z7Q%܅y9\ТG<_E U6t.`qsnLLnM-`P3;ZLd)&bC54;1B۴ѹ{[ril}k48Wt1?>ַ;*F b*V6Lxm"@(O|@G 5t fz.㵯t7 yIቈ46ʉ=Ҿ̡Cko냞iǭfw]tv6j}Wp[e9f) |='mݜ n$ŘxG ; gH.TeV?q8ܹs$@.{|} :vޠ҇3@8|1dUzzS&ы6"Y')NUf=*/Yb2Y/I+ endstream endobj 721 0 obj << /Type /Page /Contents 722 0 R /Resources 720 0 R /MediaBox [0 0 612 792] /Parent 708 0 R >> endobj 723 0 obj << /D [721 0 R /XYZ 71 757.862 null] >> endobj 724 0 obj << /D [721 0 R /XYZ 72 489.604 null] >> endobj 720 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 728 0 obj << /Length 1581 /Filter /FlateDecode >> stream xZo6_! (*5KR(Ú] a>4L,LI;a;$ "Ŝ;qc`t-u yumٞeLgs:va'f"UA<&\sE2_Go jq̍r 6@o`dyo- qG_zcŻg!F<\܉l{ȭ708`PF݉ 1v9q/9^Ral>UҢ\h#;pȎ]X`p)Kg"m?$v05&af(=1< cUJM8Z7 J5iYi0Yw8ux`ftiKbq̆1NZvzu+cB1`u r(Fx"jbRMĝ~#Pqaj 疾v2o8*IvE{MH%fg:U!׶G/ozGg]tw?ύ \WSԎaLaXd>8;m` n:f*_Ï(ܓPMC'-gPQMnA9,x=3& 6|lj0Y1պpj3_|d;e ejOtYNaFA}>e>FG@>{Me_):-Vp5_xaI_< FI-uxĈgXo*(CKkA|`~rTy;PlN_$`G.t+n(O{﹎dGW=62OJ,vF'Ni:e7HCd2&v3^;/hCCKNw}soX,,1o{|M߯(*pCYBS]P}ЌhۢvE;r!cw O҇᲻cI&zƐOMl:]!Oa-D@Eן瘗Z (tۊP)̔ "_&.hQx?|:)KHC8+A"_$zUŊ> endobj 725 0 obj << /Type /XObject /Subtype /Image /Width 560 /Height 216 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 730 0 R /Length 12140 /Filter /FlateDecode >> stream xXMA$&kT4*h[l ĮIƊأ(vKc4ֈһ.,Wy0sٝa)>g=s3|̮{ZxAst@ }gї)7@KѐݐPY%8ywgu -'BBҙoo_@S`ii)\:jZ(BrzSrHo-YdCdF_뮸_v}SY,Uu.qz߼ UF~k?Y&3"w$pš~ĭ @B턿P?6L,to UF~kDؑdF$3\G@ϩMœ[Qm]hhκ)*=O&So:5"9Ekk׶VdrHkDIdFDQG&qa琜軛c8g%ܩW9 C&tȔ4Ld{hr^o:5"V~B :Uغ9j[#3~r}[as.L KO~-8kc ZYY}'N fJ=k1<㗲<ųʊLM @<(/K;w6|eճL S̥5Ѥ'JsҪ++O~WQmvP5l*gɁW7FsVO4 ;lQo:5" jHkFQ-O˅i!a8N,n4ENÇO՜F{n~СLI^up-wJ |8bW|=0]Ιf ' xp={꥟=O~;gF(qh16q_N%/=*JL:tr5g76!>/{Ir`S#"mlLw`2 OMZ#|v}QC4rw/iSvJWUcUЛWgOQK=G-TiFXeF'#^AUzgzpeuSRIc{\&9iL1XZmrtԾ{G7U+>k1rWzeRɆBj9"MU-3v{&zw72(uS#"F7!֚IkTQm>񣨳v[ra)^幼*pGU*Rݫ|V/ ݜ@N=SMOw[iG"Waz_\9Ѫ xS2rS񦘊\=;jmnHSI~())ʬ__4"SNz˲œw\7PujDc:-Gfj:+vT[#l4a(϶Ϲ0T1ͪggFVFUXu~z՟Ӫ&Ve˘@$KʬDp`)UxMѢfxP}@*_`2lL3aBM瓾{}~PEPvxM1\\5hޘOh1_A=tyA6um%>3d<ܤ=ަE^E2"MmoʗFec^&{:G^yo)c;+Lթvd^oՊLiQBv7KDŜt<W._ȯv}{_~e׮]¼X`n26d<={Hka)..e6nmɮ9WKv7uUsUv )?,41Y&p!jm^mȢQ.4 Kz]thZo:5[#o܏{8y,%Y?\]vߎ;n:pS$::k"M)F_`i6ֈ'Cm 3OՕfdd[X>kRM(2vy; UF~kð~}Q\{9Xj ?7Қ6G/ǑBƏ~ dFVgleR "3##~~t̅_4ƅ~3T|:KeGUAA-]bn]>PȔ4U(R* ?Aiɏi|LZ'Be$~hA Hȏ>"2⭒$~? HK~ṯZ͈JX?lժoѷo .G5RޣW999eddx{{7G5)n]w.Hȏf̘o>!733{|QFS#G:vH)ccGݺuO?444)VQQv֭[6mZ^^[o Wt_}ǏgaŔ)..^`7|C^nΝ?Ν[kP9sp6mv ? HC?JO=~Ff?RG4JR!% pss+**Ylٙ|ҤI)))d%SLanjbbȑ#% M4/ZneeT*ů•KtԮPlmmǎP(r9]wl16k֬658nܸtBGiGޏY3bkV^^^kxkؙ<##RL2L|2>L&*\}ᇇ"3ybֶmۘ&bccttt4M B#4^W\\+C9#;xyy <_XyjBdLܧjBՅ•YvWTT0irXXk~A~iсMKs<{,//5#Tfy兮VFFFB#zG5jG|nsGA?j\?fGfff߯{w\BSNm߾}رqqq 6mBW:**Ņ};H+V5ѣWZ^n>Ϗ u{ԾR*T~AQDDĉ[loӇV+Lk:wkuȑ#u;vo_ݻՖ WgΜڵ+166uo勊͛j`brvbG7gΜZM?| ~2 AZ#́WAnqyYiYIqiqQIQAqa~QA^a~NAnv~NV^vFn2'S!#j  G#A~A?'| A׏"BCÃÂ}> {8#nHs?L(ATW?h)D렬 yj,Y.IHK&FK"c&F`}ː!C|VZM6MO2GGÇzjNNN^^G#G/y]QQ[o%2j{̙3U+Vlْ@Pd@սT#ގء .qܸq~N|B[N0AT* O mGAZtDYp1;A?ҙ1ZP[*MԚwV4Lex\j%**J(~ ;A?(/#?*+-!?,-) m,GB[ mi'WTWu[ЏءQEy9G#ƏJG~~o6܏k۶xtT3v ڃg4bҴ&v t?lxx8d+W:thHh=j‚̬֝ڰaèQ$ m׷o_{{{$ɓ' ;Au: .|ǴR044={6M #-h'c۱c믿 mUYYٲeZjEn.cڽx[Ӈ Ihء <{/)d"ZjAĵ|,\>~UV :K#'''CC÷~Ʀ~A5#?jٲ%~ я,# <; `n]\t8GAzG/y-[nOGAje=SMϙ=w_ۺukc?>ȞᰵKFFF ϓKyB}-'Ml۶mCCsqO)s<^."4k׮) 1Aj?At҅wSǎ'<$ۯg-&FD>57nY+$˖̰wBʔ4YU1~t#G[̙3e z5ױRh;ۣG!3 f^ݻ$.MHƤ2oPS-:QF/YdĈ#A:2w,'M$C!c:i,uI+$Z9b{~k⹳=g}h4k \??*,,T >~úٳl^׭Q:y"%!&+]ӡIk26VHSGε*~|5uiD/]Bv;K Oϱ줉qQaU??ر-djڊnStxaͿ󣠠Ν;PAy$m۶LM| sO?_W._d:n|n ]:'LztqqTIG>Сb?>AP,'MdPt9z/dFU؏A?ҀLi~N~o߾vEDDa?>Gel>C 7ЏA#_ j~4iOhWWgߓ ǁ>>vG؏ H{~T⢒|Z.Њ)?'MYJZ7egȱ>~|A#< GA#A~?ҪA\?A=?zrߣ~ۅ? ~G#A&G؏A?jj~AG؏A?j ~| a?>GG؏ !H!a?>ACG#qa?>G#A3?!?`"+?'#]Bf%JYJ4I!IHK G# ~T)G#A#=񣨨(KKVZ}p+Ahw[~ ?R8###''ooo&#ZMlɚ$ $~G3f`Id;MvƎ۝Uruu ۷?~xDz^Nڃ He/~Af4!Ix^֏hJjC*۝& mcN*\\t<"99yj,"^W {A?RD|Ϗ^SWHU4ٕOh;nwBW?2Lׯh??GG#&}7^:v:\xiy:l\WSRT@ДK/M4 Ï;n ƽ_SG r )-W:{&ar%ax׌G<z Pq <ْI(?.li$G\?*!(8L΀Gy9tI&Ѹ~i5mj [<ߚe-'1 Ҥ)+WCVVreNlٲ ֵV=ZD#QpO.]ؗ)&ݽE(7.&,]]DXhnVFrBܹ?Oszf{uUh PI4͞egS!&m۶ٸȧL>NЛOZO?ϧt8pGL y5v;ujӦt?zwD”̏d@ ;j:RnXsFFmfʹQ$*G]tQ{yjRJB̊eKmfX61}ڔР4I-G1j:su˦/~qOɉ̛߲g̈~ cFByJL&I]jfϚrgd(dQO}kVMhAmn6~5l16bukU߸aEG&'\nmCިSocҔ /?$&ш~d``LyMYHdy 66wb"c"Bkx@hԦqϞv+iޮYR2X|LΥg~8@f$2ԭ[hPGlL:$П&S&U,j܏{i2]4Hܽ5r{Y3T-BdLBՅe,sg7ɡ{[-Çqo?x\N8GI}]Ej"KO-6WN2E-t!ᰇ|?aQe9hϏ٥T:y"%!&+]~ԣG05Oy兮R?-&0 x&nͤk?'D*e)qQY^1ޡZpKjw5 [zLQm2jP6 ńIF>59lxH N#QW.]~9վ];?/wdΟ9%Ka5n9&Me5J$\:VIjS,'ZDĄ]^e&ljڙjZA^|I{&j$ד\n6qkӘD##'ӦNnCC֟@&??cz+ջW/G m=[nmҿUGDMpR \9ObI0W}ma!̩۶m[3V{O>~cلZ\~O?Zϫ-/K_85f*;kf46\|wڷXk6돻]K:Шi}'l`ҿߩ~T3G )͑i7KGYRb LGoZG2#5Ѥ@I-GJ9AatGt変L~ $ ~IJz,]<x+^uJK0a CbG yn[2=#-U#45hʥ'RG >mHkFsr:l!5).*,Έ c7h??G=w~TQ^h<Ϗ??Gqn.箟=~̱W#Ƌh MLcx DѨ%ńv>di4^5h)~Wi4^5h) #c#^ن Fv]D~QalÅKF4:E!~tq}x{'Lx"Xt~Anvqa@Q#F?zXNBߠQ$hEvphԈQh4Џ3 h sNA!6#30 W DC;~$7Dg`Dss @4GYJyE\EdַP4h ?*7Df8-[h% Mm_Et֯P4h 1?7ff8F(h"~T~^L#&5d ݏ MD mkD :dOTæ}wh C:t`hhŐ!C h6<4Ct9JacؤyWk(hefNʤDxhk.Wzp5%))TH}߸-Al y5g˃5V? ‹IFYQ^yrB^$/1ZWHSn]s\sbE-? z]1h/5sNV;g:7uk7w֕^A#ݿwSOLa6m&%Ű'elܺuAgg(VԩSv6mφuk;wldfLLaSZvͬuصsy蛯fh.~㕩T[ewsܜb'lx//7d*ӚRB|ܻUU4LeYiip_poV^J(tGqltdRT 񬬬 U+j9ϛn Sяs2 -b#9tHLf 4󱻶{"27pq1jOJL&I]&[v3bRo&ufEG&'\tjon6 ˥) _F`4ԢlfĤ ׯ[{Q)Л^+(IeeeD|M~:ggȥ;׋ ܾqFJERV34BL%E/+# w֍i%u^\T +jb%t5;?zwi:400`gJ%̌7@x#UK\J v)ql>ݻ^EZF4!s=Z  %2@Rs#4Q y7GDJ33L2{Ԫ(/))/OU.& ,UBBc=e7/+ZF_Iu@Owro'y*v^4/#-Et)<ğC]tfvhugmEdnH4@r1|{L;|n1L\.I5BnŝÅi"PڮD&M:7ܜnNbl$or LNVE5ޏ4-yAAkEU/eB~cC?tsSHJ}aI~$*63vlLk&]3HΟ}v0ov͌=v=N91&R)KIbF=~^Fh98& *Y)I{=(h"~nR| 'b] G4IG|?OʧvR y|GGn1OShtIqɜ})Й:|q1Q.+-LO`?/y-߼期m?ʔK{NatIܺqc?uv!x?% 0>:LOiSS4gNQ&'3fkƏdRl䪕˘LMfFt4hEmWZXń`*VgF#"*<)W.\Df\z-+!>l~x޼L|<*.,(m~JmnvFxh[..W/ݻu#:"eB~$>|i9 %#_y-EL-Q!57^(A쩚źu}#:7e_OS,۵аuן gOqo޽z:5wC$i:oOƽLZ[mߺŸg֭ L;/ji:PEmWZH5_3?w,9^gF(]҈f=%=Edi*_YYQB~a%谱:)27n4TGNMZ9VUUG)7+eBѨ,BŸLe(8FFb30фQmL/)Mʏ#DՈeK h ?zYрaF4tG2}CtF4n4jD~L"30h9J!2#6(Co!4f"30hhŏR}ClF4 9'/;C D~рaF4^I?~xzDxij#h BXt~BWdh4jDѨS4Gn7.G*|lThhCr2wMQh4ďbn]=6> stream xұ 40>!̱i.%@F0~F.~!b.!-_ڱǓ; endstream endobj 729 0 obj << /D [727 0 R /XYZ 71 757.862 null] >> endobj 726 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F65 185 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im5 725 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 735 0 obj << /Length 3354 /Filter /FlateDecode >> stream xڕZKϯPU.Tܛc]qqfǕHJ" |ٽ @n_7&؝v>=Nb;D1$L03bOuz}q'Ul~)L?pvjhIo3ͺ8\XϤFZ*MOgnm"Ψٺ8uѪ g[T͉?k?FQ?9p& jy^y톞?-υ:IS"842n6^_C\m?vi<*U(5vנ5J@n UgY̙};,$^=]ṻrWk-yƋh_=r[63(~{;T^VOj"dfK/2]Ł# Y?rcUDz8=^ah|‰^U, USuوnbFn 'TPvG:МՕz窖[e$ԕVө n43e/)}R~$-]-k]]7be$+z;sr26܆حNYskrL L궽.}^wcr(\ IV m[։2a~vɵkOLzZBQ!c7R\I3JI<L%6(` R HqںF8~xij̶5 =PThRaɅn3XMw} R\w0lnι-ԥg\X1]5<-.W;o ?rĤWKYk982MvoF}] GK61xn8iw'Gg뙫7ʭagDN_JR`724Ѫw2\ܭdmg4o$6v„KcUíŁg^VnbC%&% eOd ߕ+r;ڑPfT,~,64!tmP2#Oψ._G49[W>ۂj3G\8u|n&i~XNgaxI9|2[Cmapl Vb{4y!V_ SbF8;+3u.V@fxS (Ƒr"0+J| v{6 v,=µh'nzs ¢g}T=8ta"D{H_RdzLaKH[@~t- Ib Yl  V>ۮE~qm|U 6ίuwaKp_,|c_읉k؍pIY~{PK#L57Z4r>ZC }#;ς/:ShPp _% Qs-є4R]qO(qsxk9Ǭj/$9HeQG67Ρ~%eg l+,,-\4r% ae^=3PH O*^Ja~9yL3Ȱq K\K DF2Mrλdt=73JO=u@fRljd(gƽbi gy4z|rcMۧGxg?J=ae4fa OUJUX5N4V?V?oyr=w~VCZ|:b~^[.޿]uIҁIބ5TI4o N0y&ʒ0|`h|f `T HBq"c zh2d?∪8۷kCa򖨾ݮkr Q)BU@~oǺ}ISY'ypї׫1ӡb endstream endobj 734 0 obj << /Type /Page /Contents 735 0 R /Resources 733 0 R /MediaBox [0 0 612 792] /Parent 708 0 R /Annots [ 731 0 R 732 0 R ] >> endobj 731 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.895 316.557 190.873 328.861] /A << /S /GoTo /D (Hfootnote.13) >> >> endobj 732 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [110.615 112.461 219.31 123.997] /Subtype/Link/A<> >> endobj 736 0 obj << /D [734 0 R /XYZ 71 757.862 null] >> endobj 737 0 obj << /D [734 0 R /XYZ 72 451.507 null] >> endobj 738 0 obj << /D [734 0 R /XYZ 72 303.616 null] >> endobj 739 0 obj << /D [734 0 R /XYZ 86.346 125.762 null] >> endobj 733 0 obj << /Font << /F28 123 0 R /F62 183 0 R /F31 125 0 R /F29 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 742 0 obj << /Length 1722 /Filter /FlateDecode >> stream xZn8}Wه@uW>ӦHڬm t i[,;%EIVdV  ;oΟ!$M. bŔk"|Z=Cȉ^_ҍ8`o7AB9kaρ`3::* ]ԅ(LHGAihy—_#2zj@CP+Y1S'B4\D&4 mDnXJN(Fsc'&@~f@eZbN 3i Uˈ9)V&U:}t|GLB5,<4- pɋޠd|&s ):PtAY\:U{@fKsuv7d=}R}Ymi =@ 6g U&O={Hw$%YЛ=Wy8hh1Tyk19W^!ozYO'N-[c.\Z۬ܣی{Go،u1. út7-v_2Ih~:;XAКdqQqEQ߾GvA R'Yueen|>-Qln/>{[4Mگ[7G#N4Յ.Z; UooJcӀIS֪*$`RU .[Azh kCS^dkE%`3=t$?mm-mW՛GlVlѶY d4SʵMu6֬ͷwZ[W>b7W^J2-%_N"O {2bbI;tdO7%*&sD .Y8;9UicS!tIU cPr~Ig3ԍӹo1ɓ M,w[JoԻr^5KVT a?N(B-aj:''K䆸, e DMdଢ଼I4oXs|0cxG 0:V<gJ1w3?Uih5Yo{J왿5*@ҎZzV!I=yMh%fez InZ=SuȂɰNXOU endstream endobj 741 0 obj << /Type /Page /Contents 742 0 R /Resources 740 0 R /MediaBox [0 0 612 792] /Parent 708 0 R >> endobj 743 0 obj << /D [741 0 R /XYZ 71 757.862 null] >> endobj 740 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F65 185 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 748 0 obj << /Length 2010 /Filter /FlateDecode >> stream xn6=_mRDIؗb{9 )lѱ"4;!mIs &5ƹH!&z8 6b>ϟKpSw8ng "PJVLrWf}2bgIx[zso0lP3zFt`]"wsP  iTCq0MǯG$xo]Y=#"rVHdq^}V6# ה|Jέ 'C Dw4s1.8% ғj4߇lKagҨ[UAw-U]6if4,HW~ѳO?n֏`+`p I݃E~U?{''Ph&Pvx1qwTBy@8]?6hUJku{oZ-8'zԻ}]nx \4%k{< #Yu{NcMep|{C{,)'Jν9 ϼ䍞,)/F$>VLL1k}ʼְ4C[UBi(_ØCNN1H`d`rX'$ڲV%ӘYNއ6ʇGj⥀7AI a+}P)Ec P9Ui[֍`)iLQAilY |}!VRct6T ΋r1QB^</(BѱK `b&@` X/I\Ѐ%B+Ob㔫~Rӌ'"\TQb존nPO)NGX2^&R|MIP p"λt>PO"!H%!쇾ThؕKdicL3z]IUcS>6cc*:;s#':1b3PK]v|*<9ퟝ]cxf̸;ݝJvI>e|ꡞ8!:j͌rR]G72pفO8;;¹Anu6uz2\jVw6)7z%s.];+"hm0}kO{ FE 9+:yi00KC.몬ۥdP.̼e` . TYt`e^M;VO4ux i6[_ysC"cᴭ?$E'H r V: Ca LЛjY`E%"'xU}w}<^ Np޶(1D 8Uq|4ӌA ĶP/CHI% xb:<yr=_̮F A[u(u(, K0c endstream endobj 747 0 obj << /Type /Page /Contents 748 0 R /Resources 746 0 R /MediaBox [0 0 612 792] /Parent 751 0 R /Group 681 0 R /Annots [ 745 0 R ] >> endobj 744 0 obj << /Type /XObject /Subtype /Image /Width 410 /Height 329 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 752 0 R /Length 21577 /Filter /FlateDecode >> stream x TOފo{oIL~ը3jF3ʤ<(FqBdQPddCm4MS{zUWWs9ɬ? %%% 5hG1~-syu&)))*0XYA,7Щ:r_-JOYjyF+)Tz~i RRR5ӆuQ?2UOmWU*>k]pl))~?>ѝs*+nG Z @ (e;V!Q"}/))6$x[v:(lsTvf 9MEH$]ձ Ohh}W|qKցIYNX;賷+=:}#OràJ"k5i徇]y%Y~,m-P j=mƏ`Ę+@2(?dWw*+nG B[i4 >e?$H۠dB8~,ܪDoҎN/+9no/%ӂNb|zUA1ԯSEʥ1rcAP 6gخ,{TЭ 7N7|p?c{Ζ 2Ev>4VqPKٯLqqQɟ$nKdKQTs'OgM4|ݴO}4w/Cũ=]2_N1F(IeB]"miƦxX~4E-x W\"r7LpcҼ>2*<,`ɟ " jTSS#^<\r)?֨3^V#Gsb0A7J˳Fm-'ɖ> ;q*?pWaTS$l v 4g' Mv mh<2N.0RZpjk븣_qpӟq}#WιyO+W]_)s;bUnPU[Aze{&*C3OnkFƇeaaOm6擁ZoG>O:6ɖ> (\i'س<:n)%j]_TväpP2xtxR$H۠dB^Y5Y؍I+|ζʷxovn;qܦu^ s;b2? ŷPm76ǪiC D:vm]j öi(3Z78>o'l3u/Ϧ_9}2;+X&[A!ҫ{n;j]VRwFRqjO}/gK0i ^Ÿt>e+I#UAhPd[iv6sie}L[b?v.'aGhԺ[֭a}g._v|\,s;b[$ގ /^ϦhVF޶lYk[iSÃ3[q?o52&gEy)\euj/({j'M uUY7.2$ ұM5RICqv)ߍ8ːS{~>[.E ?\CРW׎i}.~hi[Ѱj;5o~Ŷ+/-ݼqݻw8qNڡm4?َ2T1US> ǒ[a+'ß>q1=tLP^2jɠޙ:mFuQ p_n ]7cWrcilki'2p7&#9é,?v~KajC?*s1nG j mߜmo'A#},}Ҋ4as+;fs_3{y.]V...XvyfP v;|ӌafn3lۜ*Ǿ`8m>L^?Qb2Bn8kعed %~˗gr2dTs0M3 ]L\n,m-sM{Ab37,lTN?a*+nG چ[ivvŭ_IkkwҳgU n7Tsɇruu_knggg//l\)s;64'(Rq3o _9Le`AoxJ)߯=VID%VE]2~ 3}hhǴgUoen'xpZt7ovQu%hѳy)))j %%%-i&sT(lY]QBJJJ~PF4#%%%HIIIF3DDeEEEEhH* hHD3e ьhFBBBB4#!!!HHHf$$$$D3 ьhFBBB4#!!!!HHHfZE3#G ]`HBB4{׬`FBB4 U, NЬCd'CC_|qРA?./^`&!!quu%uʝ`g@o`g-:_/R,Yhmlmm=` jXXXr7U<}͈fzK3lښEL%ẊwN@C3M,)ذ ooLiƣ, @Oqɪڵ\V=#@8W-Y-\3cLns bHZÇxLh=ʍp?aayXE_֮ex6)+ccTO{fD3Y}=la7ҮOqTv`G=l/把TҒ!ͤ#ރY0my"a*j8VVD3l.:Z=U4K%ge>q@4#͞+b1̈f22r^xAaaa'NիWϞ=U/g6ݸ,4$!'g  T.e.5\EL?ikYYYٳg?Csss}ud w`s+Wr8rDuܸTu? ])B.6vB%ѬG=z+8 {M K{@mh*UV,aa܅ jJc#m0dҲv,LL#̝+< ~~TOh}[OKb"krħ­[͔Y>}cWWW8YXX,gSV-q:h& K"WNN*c~u5PMP$ܜh$LLL{LMM}78{{lGmDVbЬuj'EEL9f"dpLZpfС}FFF=[d„ |ޯ}"VBfx^Dz,\2D3= {7'\Spx8pyٰ|Y)ьhڲULEf6b-"aZXooaQ,*.B4#`01f=ߟMM'hVT$t` ьh$<-r{4ew"K4#- &>^6nTڊAtn~|9oȉpcfD#MM9^BBXs2."FF:8۫lLʵgŶض6woƶV||:N)(^hUqwgE>Z[Hܺ7o&X$|[ŦסClεNz eee>~y9tbXl~=J`e%KT 'OvnPhKŅU1%$w%=kgg%&rZh&%AbbxOIa F.]8RE=iƾx"I7A'p |I+Fg~fVePډfZE e[leKzz,{dF•(3f8UyV4': + F*NPr"/Ɠ^μAO^Ǐ33 ƘcE!fx1 >WKݹ5hj^gDCYYOXifuh( "x!nۦ.0Y|ZY\r[X(fM8W^={422׶״S4,QFĕg?~~uZm8 (wMA3&&K0/wxeoZ~Wf*OUM zMx133]\.ͺ 3XMʕ2",`5IR'9;;qgTV2/]Ycf4 g~O^b "gBC/8-iB4o߾[~Ġײ1yҫ^\zKQQt?^Ć7Y$K/$U\iMΉ>5iL<7mB1X͎׆}Xz'ңG888_ ۋ/8h OOOǛo+oZKh0@CX}f`0y\yAJFFf{~0K.OrnB:9Zv&)j;%DNlAAA ,߿G&$0[qWΝ3q"3̫fQoYL[}X|Q`̈́2\/_f y kH= e*آD3^Tp1 MfGtQ11aoI)(99lA93ݹZJ:$4ә!zsjd.û_Xׯ T?{Vm<2@;5uMR͉f^SSS,7kk8 f%+Ejp?aYv >oF.O+64 cc6SC4ʹs ŧN1ץGۻMXow`HFe{_vJLwٻ|9M-rK5z4(/D3-_-`nέ] &H׻DnVlm&CŞԩ;1\)k÷fb4`^jC)Ŋh+sv2nfesZ+}1{ewv=h(۶55Tpm2ΎYҟb;ۛhs50x5M3)ɬJsˆv!d,kDK IKc QD~W"4$O33FoxX:@63'񾧍MWVjdaW@mmY+?"9l@ -)@4}zxxnnnS=Ql@3=loeZ"kKI1έ5.2ոR!<~60)[8ՕgehK=BBB`|U^55H5O3@?ՁPT ֘HhҡM2l @ #Y?iCD֭iD3๹4LdV2ʕ bxhTe% i` N㙡/~N4*ݝ?vuu_<,,,I*M6kQֹعFI'DinfKJbNk[ /P[+ꚤޙ &&&ҍJ^ ,(z=fQdYq1h^S? û=qx 522"&LW:t Ġكl@|Iae dddasq< iŁ+dLgaYBKKx9v D 98pWK>X+3Gfj\¬,صbER*$WYgϲ#|ذ-WTԉ:L=4`[̟Fņ>x[RVڊ7ofodz!f,3XX7Nt4Փ" l+:2D3i)ggsv$$zdz|T.m))D3ai͘&UUQ#!QY_lLX55|GGWOB>aO FYLFɓh&otʔձ~p6V+?rRKV~AvMKYSI67&ˑիQf]YUùs#ܹsl&|(ƲC>xq1Erɉ %Z_g@۹x֭Yq NPfrST3VZ5SHxv~Dwﲮv|#iOiSIϞp(ulh=l`~xݰ@NfY^/S(aJG4Of>£(eq2W[%ML.\<=YE+fmcz:ktUYRRXά_V $QF=_Y\*˕lQp0w먒fJog$ڂ'B**XqU d5ʧh&Y@_(*’v-{7kGBɁ)BpCu̝V Tf6|>KחnnUHl{ 3he C3t\ICh54R(36t.Ni6ьh&j[իl lEZDTsd S͈f |'8ccT-)6y# 2ZhF4԰&;%P'Oؚxҝ'fD3uYb"E+|PZ˥{͈f*HRPh;m|2 6q^z_^ctOi?>2oo6xF^,gzf݇ffffһ˙˥Yw͞>e%X "=s ]۷3Fg^gfJJpFiTjͺ׏h&9$D3610ulZ[wT̬uj}=U< X>]D3H=BBB`|K3o/A<==#GX L`"0lNrߺ&H?ɓܜ9l~CfCŋ-XM3{UbH"AA HLd#tE,,duwg.fI6)ch&,dTp/ MfGG\OO1 6\کSrV™Y,ia>,528,6ëtvfKOXCc,uikzgnnNt/\:88r0`fkL4%qqh9xݎOXild(Cb>ysf̶MlkM{;`Z[l3YhhQ0aСCݻ7!C:tHh T{?q..fEq ӿWqs(EΜhѧ*Kjlx7ihFgi:}5O4SҘEtn…d//gtFn^b1ֈffjt4ьhc59sr{JuP^ H,^3Pp͒%lJv1X7 uCb4j [O?fmz<ɦ&$:)ݻڸTBjmmٸ_]hF47kd2aiDJJd+:s[lζ0\XÔlm۞ۼIqD3 ѣPz=A;wcn.kPX3ňq֬NIIl #KF$$%[.fD3#Q5"lիUlÇ3X]-|ÙԞGmݪʍ\F3F5oWWGdg͈fk]10qa܅ѫ~aCfD35R,,Ϟr`Ş;6gbPС%v xI?ԶO %QƢfwS6rl6R\ܸV%eF:gLaB fqH|ьh&TTsiM siQgi)֨x{{eUٔ1pv@\r0Ofm ۾Mh.]D3م l|:ŤFiXP;;ϭ &TUaI47Y fflx:73MJbjN7D3="RR%ϟgލXpe1Z!lkvΰ#ܽ'/\EEH8\ >hmiZԳ OשD3ݥYx8[K9t 4[0:۳G,[TAV3#zE)-e9sE-355BK4#))!!RU†e#"Ժd!R\rzyz͖P}Ǯp##-2aˀh&n3ʂ>=I Nww'YZQGEu#8ʓhF4#-BE~e9K.mtE4#4"6 <- Lٳvi}})$D3n aʊwOPZ*D3LXp!-D3Llrw^Q 55ܴiB6vf4NhF4!9sM~3hp,9+T fhF4#uEϓ')^㓹"#A$"B^D3L$ oU'Ypm@B4#<}ʦ' iB:[o4͈f:!4wLm(o+IIZa͈fD35Hn.[+%‰]FSG b͈fD35Huu6*a}j]姛>K)͈fD3]f7gZ>/K4#tHTOдjCQ%͈fD3iyspP D3ьh Jsse|Rd%ьhCjԕQ=;[l;u;y ьh3R_o].1|fHfD3ݒ$U\c놁cghH j^s = !,...#G|ڻ6(ZN35'Hvf[[ OԹ߇: c3Vqׯ""t$i^{5++v os:"mmGI*rd$w(~=k^Lݴ0nfle&;:D]fC3~S9YMeL_4h'ьhF #./^`Kο+\w5J΄QvAP !6wH3h$_+;wm֡mlmm=`˗/hJvs1tP lmm{ݣG!C۫6CTQ<$,,lĉzٳ'Uī0IWRTXEg>C2333449{~hnnT)$Q^JҒ4Sy8Sշo_ͭ_~I29:L啮.-z0IL|䐐888_ՓeUsvu$+])]ZRfrsګ.]L ٥C4p8SէOwwwzS] UWUO^i[Rٝ56;C211n555UOzWa(ttiIMiuj8ǡC!UFFF=[d„ |DnͮDy+KKjެoFBBͅhFBBB4#HHHHf$$$$D3ьhFBBBB4#!!!!͔YTTT v2HHHHGJHIIfD3RRRR))))ьh&2q=|]ԶԩIf7b/FTKH{p8R^^ua~{YYUUU]/T\.JKKb5UV ~hF4ofrfxF\_F#~mɱ1fWtt{S?ԩS'qk fY|\OuY6PM5:?rԌm?窍f&D3RRD#?^ ]5!)g?wM{ 6ҸK~S愆`gpp?'XKOOuی uҥֈ]K11(4M袂kLv_pYC 9rf@_'D3RiV}ݓ|>d{GF*Zg%x[]r+cyCBB̶pkr5}]H5%6~jq=ZeϿO[~_9~wׄw7$l45m͇ (kZ&.ٓ󭕕$E6m)͈f*,i(U?1P#4mh`)}4 xbbbojy _K\EDDH[M5%"##xxsq)Yi+%`0z4/,]v/űfTkLGYՆM,8Np1֭[ׂц#2.nff|]jdy;g#F,G[)WuE}/yslyQY7Yyw0זls@O}FRuuϟ?Ǝ޲#%%.v5PC(Cdp% _%mh*5M\WoWrr򁃂Ih&xQ|VYLzwcIq8(NeL{nsԆ;aǮ2VY뤬?Wf NÇ;~ڿdذa}ƛZ)mŎw[t`=os.;NX%G,2cπ)Kfݙffo/~6owݟ]PPz0˩ug4uK `3// aGm8 7@@浩fΝ3~fr{.Cq!F>~ƋTsRLX$(K9w%+7,#'$-+$-tRVh!dg3v;R>M d_oNsYI3TR~\,Yz4Vcׅ~Y X" {9۴ΆNc`rYwYjuW_2otqڵZ[h}h) 4%%)߻9Nz HW&ll-m3r,.Y_qG\N?䄸=wmu̙NťXygSX<{-$:4_<>&Ir7B0::9fI. @ٷK=?e-)>zwJUw_4Z{J_mhߖ$uO%-7X[suݶHIMM}Y]]c]j*Θ}hJK(̇Hb/VP99&mצ|e@~q}4L᪍'7f?qy&⪨Lʶm30Mfˉ]2 5)6PJޱ4仮I. [6^jKtRG7 rv:~h'8p>bk⠯?lۓ۞K{8~S@3엍P {YN_Јfݙf<m߰Uͳy1̘\78o2#P^\=o1w|m(т2'iii۲`/E+K;Xmv,v6ىG>7# .H*++m4I0>ߡzÕPtvT-|̘80@536*{qiդ\}D=h+||8_gz6n+w޼yV&nnn=.d֎3k߯ *4٥ĀxwH{O9= D44ˈZFD8t`ٳׯ_9~*py'gKA^^zzzlll ̀Om7o~Ne8X$̀eɓ'(m3 PB\2_[=2eqzl\hKi=PAg0jJ܇bVoZziG37>?ré8}vbOm\HmbZVVü$2wu۬7?DžR6K1!d|&osN%!\nI6oʺZLjV4@ @qwܮ8c堽_;9e j٫; I,{ooҁ5~ Wo}5Sa<;wa~XhPlmo8{5Pˈfݓf^^(ϸx՚#Gz9q[S_c+hV1G0kAU64bͺmٲ?x!c6ưʞofǝix3--$6 :cg/;}$[˩o|kL4l츍qCNf Ώmk~Ci8TVVi! `hKI2 \?忾U2.X.\q1x}]Kgv3fF޼QP k ބn !8rSG}pi˜('mQfDӽN#U (y}ύȃ>]yfD3'8e7=򔚠oάY mȤ>0dOf 3ˀ|"Ʒb[aGgqqqO6L$^eO<٩:/xIY'W__ : /|&{Ӯ{PפN{yyt;=h_4sk{UWW@f;9pځW| ;r?wYT%q}=x4˸7bNV/gR(2 >f?ͺ3͖]J%s"E1MzC_CAl3s|XM.OI"~xW7C\2<4T9NYYJ IРIG&ed6E4{WA/Md?N;?(]ݶvpT߷b%muY;YνG44w撹ԆOqFWw6??a\o%/o{FFFמK1޵Sq)3MHm)kfmC3p֭[-f4l|YYlٲܼ":hfÆdԄ& bm`N7 clĄ8!dd$.&OWRf؆+i?1$=&޾={pl^aÈfr:??u_a:)/<σwp^Bٴ;8LO%>>~=لx W@3D(}H5E97quVyO6vOmKJ;͈fD3RRRR))))ьhFAJJJ4#%%%r] "%%%%ی 49ks B 4[b~Z* Urp3vmw*vz.xԩS/' fK c"/@nDVᤀf] |8Ӧ'ˊnݸ_oD_;_V/gg^, έ@_ǫxRbDٳfnݲY ΙoKA 0?>N ot6?ܹ=7?Δ<>>d^ziȑq1QeK,ׯo! /voVޯ̘>@:-7ܤJNv8p‷᫽{̫,/Q[PLبkWBkV?qv|eyYyq~b|LxE{x*+46ގ (ƵRƤĄض!'E?hn~($FbЬA s%+#U $y䟃y'Z)'Lӧ|PQV\\gcUULR^Ra_|Ο_n3Ғ ]lmşܸ~OҢys./ D sCMd wݬ_~VmeC1͂|++ʟ46T߇WVWh& eMMOB/T螛VQ/;jKT݈ HJb|eђܐr*9 >:|5ʆbEEDE*+ˉs]l3W/d޾}=%(/; '%dg_ ~XYΞv ˄tFlUq7"evb(HWObo>}#vz oW \s9$phǽpV܍?L<@櫽~drտ4>!6 iS' DKrCMd~935136]jf%7c_^8sjGufI )I.]=z1 #5#;Z޻Pϟ^,2J>'EY \4W[*o޴^(] 96*bx/ÏxO8޻C 2dvSK?҂E dur̟]iK0Crўhr*9a㺖NƳgQ[P@|hEI EpyATͺ8E'8yi=kjzUI%bq 2G椀JlYQwSErCsaMC!DUQisfUEM_ m LSA4w7UX)777ZhP@38b!vmS4(nRnPntfK V4SCڦ hKAih&~ڦ hVS}KAA4#Q4ٱ*/)P~VnXfi\UVܭ\ <=(7(7: PZ(']JO;0~;Z rc5I7/>ᰚrrS>Ͳ[ISmz2+)kan܎`8FBxW.QnPnt*7H *Ȼi%);%I\)^2DɍȰVߊgtڸ", 0 Q rC~D3RRR))))ьT$5? %%u9TG5;& f"8xT򄔔T紼0Wf\ICJJCV2x^7h|dpbt8PRRRR-WZ/@JJJ* endstream endobj 752 0 obj << /Type /XObject /Subtype /Image /Width 410 /Height 329 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 321 /Filter /FlateDecode >> stream xA 7 <уDB;s,RR"Fk41dXScMv7/ ~ endstream endobj 745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [171.158 79.208 238.464 90.112] /Subtype/Link/A<> >> endobj 749 0 obj << /D [747 0 R /XYZ 71 757.862 null] >> endobj 750 0 obj << /D [747 0 R /XYZ 72 190.248 null] >> endobj 746 0 obj << /Font << /F28 123 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im6 744 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 755 0 obj << /Length 2018 /Filter /FlateDecode >> stream x[o6B/+\RԳ}inhﮩ¶(hy%U俿C$;^N]#@DO1\}>zez & / $LQQo2Q %G I}j/?H^ַ7,e 7}ݿ7$%WngF0D0 b2&^ o Șǔ yA<ԁ83A#[ɿKpP[\`9kl]Ηxh0^(HE:Ȑ` 3vWG<4Cax% q,veۥHFӵX8:5{9CW!P,QPr\XP9a= Xdp4!Qv@\[֣ǻ? M ۾!K(7 iOx APS9i OEUbrb,@C VͨG1 y 7^xaȿs-`˖]9رס.|3W{,6A4˹X 4`(=A:r@Eoت%4fz1sޑLixUǿHm`R 7+m9r d:j`Nvm;9ϩZ0Bo?2=eϟMxiO#N}S?y_1~4eG!Ln}`|xN >]sD}NNl11$d! szLvd<&K/..qمV ~$@79%:|fIsId Est?/j;Gmcn|rNK)=%[pI3@%[MQn3XY.K2b/djmPRsH3(sΔkIU733]DCAW?֚U*')6ȸfKGNg26)6*źM)2Cbie/7>Br4wgQ;US gg?Ϟe;s$ESi}aЉN>ˉE>t`fÃJ,]sZ'[ޢݿ[q ݸzdl.ͨo6:fzNjp2֮pqRnv6sx ?wEGl m"Fz;x8,;]{?%BGdm$HD8/ CT[(I5 ~3eϜ` endstream endobj 754 0 obj << /Type /Page /Contents 755 0 R /Resources 753 0 R /MediaBox [0 0 612 792] /Parent 751 0 R >> endobj 756 0 obj << /D [754 0 R /XYZ 71 757.862 null] >> endobj 757 0 obj << /D [754 0 R /XYZ 72 634.732 null] >> endobj 758 0 obj << /D [754 0 R /XYZ 72 475.673 null] >> endobj 753 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F66 186 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 761 0 obj << /Length 2358 /Filter /FlateDecode >> stream xk6 !_,ܡ Zt͵Ȓ#C6E^=dC5"yqfHckaa?n~xDV { }VEȋ]vnٷ T #ەJV/4&ܰђAW?^}"03:0BZlGVZY^3~VT+lܼӰ.IlG Nbbi8B"I؊<ᐮ'(I*`}+b 0x\azb})A.{!8;b v&63d9ⱟ(En%,3~OɼZPo Tk98W&f<a7>!w HNAWmyR'xF*!oL2\@р앥d}A-~$/7<"">vc}Bø`S_$(ŁM+_;(ց=-h)\Nk*;+iz.z,@tԦ) 9OEvv7d _u5' zSrge2M2r}qjdV1_1 MɋO|X(m$sJ$X!ӊBVIR;(KV=gaWp]}k>kQP+b*[nОrQ\!/3' 6MJ졓k%Ֆ<^+ V>"[zKdu䪼)] 8eՖm/{lfA@î rv>e` p#A>2 FБ`ZöZ0&'܈R87Bb(B,&ҧuX 'BDYգDB"9`j _qɋjrsF:;u4>&UO! c׋Բ9m"/^n8宄Ϲz ];u"x6fXU\cW咮ٱ${6YiE(ND}+yʈVxlu  6*nZo%2v[~.*׉n:m}PYyΈx>8my~wvzɈbNDf_ 0֦{>qX,F< hxT˃f*[l@$'sy*$%ln|h]9hT=ٟgEotx ɦ4m^|♰,SyR*S^j "5bL/Aʮ ҂]DY"5屓__E"ʷ4-Y&ii@<{H.kgk[HĠ*O쎑^ "sh̛YIWSv=?G[I&M0SS_g[rutp^=ޝoCL!^YBˑj'YMCÌN~`Ϝn*cQɉva%^x~r)-lǃ]8+Z,XkeWŢN+vv"&{=h/MYcGe Lb]"Hs9xwp=_ykUz; ql6~{ :L B.X$wc(}5XtTQ8tD˫rJ6~;kC)w;h^jn endstream endobj 760 0 obj << /Type /Page /Contents 761 0 R /Resources 759 0 R /MediaBox [0 0 612 792] /Parent 751 0 R >> endobj 762 0 obj << /D [760 0 R /XYZ 71 757.862 null] >> endobj 763 0 obj << /D [760 0 R /XYZ 72 619.841 null] >> endobj 759 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F31 125 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 766 0 obj << /Length 2145 /Filter /FlateDecode >> stream xn=_!Xb`fE&a0hՑ%Do&CHh㋜AH9"ύJ2`XƧWo>ڡoxnF1ah r8pǯ%+4kܱђp6OWW_jDQq xy7˘'2(4娥!2ӂ(<щW.7!0 kXS `燙LlY'—, an1]u'%6f &-ǭ(#ޅ^jiR.GG3w)\yRi\تaD'0;DjA-:r9lbz$zݮxФt :˙\9 F~tU5q;N'!$78TkڒED>m(N0id1h֟2fEcFoIxAb}F+#wuL,J<X<|hb!{VUwTE%D$fB)U8^ )܃e(ǡ@5`eև%jٺ6m݆XRŋL}P ?@1Bj-׵Gt}r|}stZm✴ֵ4bof5;"JtqŚ:s)kpe&c)6e> endobj 767 0 obj << /D [765 0 R /XYZ 71 757.862 null] >> endobj 768 0 obj << /D [765 0 R /XYZ 72 631.091 null] >> endobj 764 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 771 0 obj << /Length 1875 /Filter /FlateDecode >> stream x[o6Oݛ /24ȗ4)qrۧ;mzMrpB~j3 j?M?4<c8d LSs-XM"|8yp!p)~>P7(pXhxc(裋@g#CM\bZ_@-b5LVS r<kZlw?P}غ <ىl70\5wa@CSb%CV_v.t5rVj9 ,a(-濫W+Z7-[s!BRSlD؍F'ր$'i H<.0'\^'h6!m)^,p{jmpBh:OWߞZZ?d1KߜN?e'hCW{v, ;$QV2\ ݄1T \6OtF˦byH$Q%QZ]&pu}ŕ){ՓbYN^"qJO"4.iǯD?2ݩV]+zkzOǐׂXm@5ߵחuUJ̇J4&WxͩTQa0 ن[e}9j}~GZIwB}}Jz6lœhmeVYMp&]`FS Eݒ.pu?K=VbI]9n:^رm{PXXZh3Le~IB&92'qEH:#FAeLBAhQyD,+6,a:574a } Ě q~|8Omc!QpBӍaS"h<=m\3O44=C>]!fe"^vPkf6W$d"xuP* ,Yo_xQ3qud'eE#Y/D~QbU1 Kn0U0'kQiI^,gP|4 8ZtMOC:ESUKӓȗ(nҨ\JnW%[K|2d6&hεo1= ŸWFdED3&+#^y7}F=}&PzrHwH A9?9Ýq}%fϐ,6fP.:]ȍf^ }o}-w IaV~kh:d=C9NFcGb^w4][D$Y$$co!M|+_J.l_fiT;IJ荸1CTPJP"({#CU~<˖g,;aC+Ls#ڒK1sTy&Pӂԃ/ gs/S: 2Xa)ĬU11͔3r=eh9/:Ѻ!Dtdȣ<4$8'P,>CY,]_nN}x5e W endstream endobj 770 0 obj << /Type /Page /Contents 771 0 R /Resources 769 0 R /MediaBox [0 0 612 792] /Parent 751 0 R >> endobj 772 0 obj << /D [770 0 R /XYZ 71 757.862 null] >> endobj 769 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F65 185 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 778 0 obj << /Length 357 /Filter /FlateDecode >> stream xڵSN0+H/TP&4RڴIc8r4ΰ`.­z(RGO)BaV0;j{NqDĉR|mw}8vADq~Wq~BߴwoR endstream endobj 777 0 obj << /Type /Page /Contents 778 0 R /Resources 776 0 R /MediaBox [0 0 612 792] /Parent 751 0 R /Group 681 0 R >> endobj 773 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 780 0 R /Length 423573 /Filter /FlateDecode >> stream xT]CDTDAr3 DPAI%* I@EA,*Y2" Ir90_˟kZ׽v驮z{~g?Q a*.}J %d/:;^{Mez ^F@@@@@@@@@i`ݲOxy,p`e_ g$lCvg[x'7k>MipX8afʺҾ3Rgƶ?)χL9!tӰv fxv>m?5ύmqr AFIOzc 9 c X;9XRyIwRlVN6uX;az_5od1]ڔ}aspuul|Wcݵ>yk5o,\)@@@VhM~9;n!꧳`>(gK卬e+) ޖbqfxzzZ___SSSLLLMMjg~56gk –űLז;<ՕaxXl@^|*2Txkq$ .T*KΌ =KW7{}~oL1?ЈYYĮ,v}Jv@N$_jr>4ps8w9by«L6xS%fɎYP% Y_d[v@@ɳ.S>HI[TTtg~56gsëZ?S=_y^s2PW?V6~qR"y=K3b4e9_<}/$npi]3r܏TE@{r7wR̎O\S=j~Luin(r.! RX%$fqjX+~_,Lm5HZ̻/v@ P_+ˈ}AnPԛfB[=(S"'qg~5u' YWIq![1*SyC/כj_/rW,pcXbLjb0,;˗;:| 3]_ar%>tB@u0eƆIXg-lǗy֖w S&j~W;y..ɵwG;|K[?;'R^fwoZmpSa/7{cwR53:"7\gzr1r.! R,͆o#}*fw{mMG,LY6\;5l~nF>}}9c06vM9`3sg6&!)%UrM7-7>kѵ>[ՕvG/o_&gܒ<6>Kb>t:{l3x9 7e eZ ;` g[܍6Ȗo}E/&I[Cfn8JJ 4v퀀g~A|.}y'cw/9zy dk!/]>mm7Ms~|i>Ǘp]mXoR!g)s ۢ Սc|ng?5t 0Oj/_ngu*^$O[ϗ K>>?nmmk~`.}R! 4<4Mn?LӶSj#KKKӰ_bR! JL w6'{4ps8?L3Ѯ[z#Ϛ# EJ\'d{_Lr+Q.ae[VM$@ $["'y湾՚H H4OD>~IƷH H3OD>D $@<|{ǁ\D $@od?&}"y"H 2I(~~M>;{'bH q"y"H ?cqBj9y"H ?`y"G1 DPevvHII544*D $@G Ƃ'b?n&&&б>Z&&&spp\t[H Hyv"托'bc晕sϞ=aaak!!!*D $@'ǵG.K nB@ax_ᐈy"所>ύ扏?V!H ͬx[iXWE.6MLpVqj~U]h.JuMjJ8b*(>5TN9U|] @ @JȪy5 ק #!,OQ;T)*(+KlP:<.v F>M% f%@ (5\>e|iE614;+zMy9v ګ*@nQ 'C'N(-B.N. 7e6.E:yRu9/F(&Cʣ  TL,(P(ER q<X8TДbeԈcJ$FyD}# g;Z w'LEУAQnU!VA)',fF%ePlA:?y5 " ѣ9p)6ɫ+UE5<9uBi41!*6!:PC )(Tإ(р р9v64 A4C|4 Db6*LU$dHwOc'0;M} MYM&&{Ao ѻYLЇ᭥FlFВ2 *FPoݡdJiʲGڅ܎T-gEsE>D/ĺd;?"XPȁʟfF'Evj w ) ޤhxvP߬,N Sݬ(KE/Mk2/,*<|@Sbh RJ,“'8,D# wED[Bo⒤<"(FnpGG?PPݤ'Līs O*R}:")w?|4Q\UuU$(ԅwޏfлK G`.xJJ|@455yRQR6V~ueC)Iڦ1QWMIEIC_W%QT~F)>hv^ })me瞯(yU]RTϸP/CetcWM.cyՖN-}_R?i~z"r4ׄ%Wq܆@^I c, vc/I`fHa5V{,_B$MnmP>ؽ866 NWOn`)Qxf:xɲE&Hv%ɳY ܗ8Ed2DuuߓJ|ʼ54]d͓C'/27|Ӹ^/0$D2HV.>#Z6;^mRD.S_ eKƪsA[hg|Xf)-X[YϘ(5 pb7O%Ϲ C|W+Moy!ЧqQ=Tt:"sp2<׊mqj1M,M;gZG(zZ(-Xþ>6S_S]p }jGf޳/cObZ`oc/a_If rrqqc+=,{ƀ] {6nܖGMgAEi4Dn1Eps eŻBpzXvRh^D= .g|~vq²&UA9+#iQMM VuغbߩH֬#9 Gx>MӞǔQKKh:O=O6Urw`J#Su1cyfG;٦I'Y 5Z8U y/]/f'G t&"a*pz(-*͑NmQS".M=^}dĹ@h7GGJj%Rug!`Y;K΋f#mr)y8KJit4dƲغK5|HcٰCZQ Oh$c5Sj(q0ܛ']vmy{oTc~68bti){3~sYz)ɭDpQq2HܭNi8Dj>ߟjD%}5{g?*/P};h=pw0hJ歞+g1c:lI'ݕCu`Oaśh{7 Lnyi4O<<./-ZX^7%s 2ƏU?e] UvI};11^S۷m#""RWUhlY\; JI o/#M#s<3e]YNVF@\L_o'_g}YYYWZ'6Y8iqa ~Q4回Oj9<0!:^+{oeE:3@c(9 g6΂BvЅ MδHMr̙pݚ%q6N4C>L{Rp8!ңľmk]Pg%92ҹbXB.²̸ߠ pc. 1  B! >&j\Hp4 2ijumhcxGO1B1JcQ.ۡD*8ؗq5m§I&[9J^i>kHzOcX, @HK5l:^5{nFvY>\=uoBϵU-WdzWamO3J=\_ɗ+"E><'~  .ͼJn ܃ox8uhx{w.O K.n שK 6mts D3y WROƙW,[=jq>3*^9zӓQC~|࿕'&P:4zGMϖ=͍jO[)fEJ;q{$-ҍh+@up o;GorN /މ+5К?ppub ]>=NUx:p<[vknB'`}IH-BCSck:wD6TrVȶ$k>0sqfp0?4]%\6cF+aܭyk矟ŅcmP?c݂rXH U^n356ZH]XN:_nA%EUoް/gJkOT\Gy~gʔĸ&C}u5^l|q b_͓PKs@/Ew?y(iܗKD~S&۔yT2Ko:1C4bqg 0,ݫK+#fiSqٯE뉾(ܽ uI-[nwpfyZo<#fH4]0Aٓ2un'CwIq5S(VΔ|\:X7@=B1s[mƕDR @@ehc 8b? ') t1>-crJ>&hj|{v):#F+F>OcP-xq4qo,=X"ޖ3eWI׶aR@mz@_O%F2nrARa1-cS'#mV-3ɳQc҈EzrbW2&h +/(~־[6eKq+ aoa,fNEudVL*'&7>oݩ3Oe?$ ~\7TUo{r&RHcfHBgȽ&7ۏSl8 "*n2~"ygs"Ug­\VN\ >`L' ϗ[===UWaZw&u˺Yj||4B<5xSߛ+7]̼/y"z4oHO'[޻X#<9abUt4/:7vus8mvSI-WU懇v7,.pzvL#>c!JoÌf=ˉgTKhbl`\"S{~=Bĺe(уF7Mߘ-=ضU yٔݻ>)N>S@.%7/saܶAփcܘ<ɩDt^'އ d.h{ BW"tS䜽>/O(y_t#U bi{@fW&KwV\VV֐IANnƚ~lܯe,\3꿣k1͉MR㌗eS4*#%^rظfx Yˀ"Py{YO\R0ws%yLQWX}t:D0%YVjM /\q}jQs+MlT;]f8N\X; 8Jmc.IIe-o~sbѥUOI+ ARVLT\C QbG.q{9B8ݹs7EN05ύ'󸆺˭oyV/^[.{WY4'anc#^yc״4ktt-R [Wgk7o~'!ΔFQP[oU6'5ܺX=5>>\>7tS0ԗnm(EkKxO ȋ(R٥VSx'}14hlaNҹkLkݥUjEp2BΙ[i-LN}:NNnwӉ`2?tVݹ2Ե|텧[8Ǟ.C&9(H;;'wwH=(ދ@ǂWX!k\qA4.AnC>$C'GM-W+5v[2[|8xDi|ltb..^ף"/g$e!XX6 MҶNYw ɴA,5*v鬄.8O 4qT}[ypBiKJRqV+h9X[ߝ~QT }\,GهTqŊz;"viȭ#OUP;Wa"d]$'\[]QY8|xp}v9~KRI{ꘗ>-g-? 1I[rmzOܙ#~29{aAp*#eWO噻)LƓ`>DM,>pG5˴p׼dbӕ fZ:!-G't9y=pat\]Ϋ խZZ ۷tvu1r*?SPѰxM+ #O5nDG;H)fm{;޻,[peֺP"Gu'PH,Tx8c]c3xųJc< BQr:J֓.(9hG߽vztP2[}9^牆+ =eu*P!\=Z'?/qR13'ێIT }y$&'z– ;&+ᅳj(\/+;7nJt Ogvy֢a~n6 тL _puZWoi]:}5čbųSys$5V_,3cDP8^{t!MNWJJfJ2~rѾ+M?*ru۰yPyS sq&B_b%!'XXeMtB S29hl{!NN2pX^,Z x@`G#x_妜|p{Qu[o.\ 72737vٿ|ب&X>˰WHYʌ7aVbwm{Vs9>Kg|0J4=P3^i9I bNݱ+0 oj=,tCO/i޶Տnky~tM/cUa/ Qy!/oi@݋.e׵&p"Ơciڈ~Ͻ-Qg'(_QAnM? p|iMB`o]))鷄I,ϡx@CC]Y9Oش,><̴6"$ kDzRfxf+h_tMx̑=ߚ?esʣƝuFq %JEfIGdʅg*geTmi5@q%Vn5^$})--}JNæt凯 F >*zgݥ2m{ nUhe|F(%lIS ,`Šܣœf!s:/W>@AXaaF*E\EG]B] -mǩ]D_Ab@*"OX8~3AX6l|n6q&v^) #ծp+Yɻaܒy$J&Ir 4Ovq9$It:X.ͼh¸tX奉ѼطMi\q\>JwH54 ʼS{80YQGWy&{Dʾm^pA+ّ|G*7&GGM9'hiPf^"nzn]~#ߐ2#4g\[{\g1绌ҡDěrP4PDi[˷ƾcݖM u'ZVvԒ ~$I<~F{ܸB[CF4rJM'4񱙴3n3f?<Uj;2)^dg;peiV)I BP,zx .R|Ѿњm[agCb_P 3BYBL8_%csF(WkJ,s9%rwblll٪c]SIn^8 Ħ`p7&K@e ͝p Sfy7Vαʕ%ỏ&d /W/o]Z_2J6JXaߝ9&T(D|\ߏxSDu3$U$%sĩ󄑋wqWWBWbVSX*5mm,eS3s*5G{oI  ޼,{5>|= g"$Ɂ!vX!U; T~yd)(,8t]L3ZET4jl\5xL>6t6p..'hcBTZ%qm!њEk/^\ 6##'|D1pcS23 ܯ_*X p>Jjjƽ81!?=Tyew(_irc/]x% : f/uo{~:n ƚfeE\ |B½]nD2& mfY(;` ni7qKŦvby7yPw֜;T`c\]Y㹊AcB/eoP`@2\oWA⧙pޤkI#CƦ6#K.7Q, V֢Z WUM"AFA9=FmP`6Zy^888Q8/xț9_6œ3YvO`#i&s 1@>WG2AQ$|RۊI2V2 <㞅 <5O\tZeG{۵ﶟ>ur}ulڗYOM\=oMY"Ss&FܴeROt<4k;sc ]!}W ւ"C枉tr{UNA7Y(<1¶CPr\wGF'^| v7Ým2ry yL4Q$.=2Ày N9 nb+b?5=9pnm5`{-Gij9/,ܽk<ޙʲMqrxuýܧJPլq9Y]#.Qr'w(Z\!ƄzB)U/y2Jv=Knhc(he,o.kHn 7}ƻWc޶P:|k M*>,wY;.?4"]2C# *H%ko68P~c{:jP*⽤=WZ pσ` Hcm+՛fF*w|ӹbi|蟵m;vAZ|Ű$|XZsOυeD;)[Y+ jxNo:XD!,}o(S Rv1q=+|{Zdo5(\=BmwؽJ,"'bv_%tȦH\dLid4fun{*}:+FÝcJPɤKJɥI%EՀk!'n_d|K v:hl=Nh ߾Y/Era\E+*+_{ FyJ玾]H]*z7;cB`Z`gr&#)8D?gc%)i,%$Q8#hT~Dkɵ57knLLaT.R%e˳ dlk',iuD4s@npkĮd.MTXxkV7:)/g ?!1O'ƛxw^L_aHm>o$o]wP8*w]h|VM@DB|B½++X RgeÙ9`7 >FG)T{ݚYrǞ]|>[`݁ K/rtΦxRk:fv wǼQ5}ujsάR <="'辰oޗQžPtdeÁ}{Z[khw>[Tg\r`|ѝc g|lsyҫ׀czlDLy@-;|e;+dVSۯ ܥF)Iڋkl{'9 !?5|?fVJFdq8o1Y=ܯ >w6Ir.2y2 Eo6۹ݩ\>S5QI|a|Ob۬})Q}>2MPS SWR\qxkl#U*jwtlM%|kVXpWA x @\˟~!&FxbOWNbÞm4 5ѱ`pV<$^s~vwn'ۋr4Uh]0'U|{Zo ( +I+&cwLޘt7 rgZ;Qx]?^nΣ~Խvpk`w |8E˨E9)F̓KX';Ț]_J1O<D@s"&i6soP(5sJ|YKZ-y"nOJ#dzA;6dۇTV'av4g"[ tDlqxIqPaPtX"COҺuHɗ\LX~tad8X|ۭ[}QYEr1o @~zy({=[ȝkȽ+uˡ\zNW'P)s'$fofo<2&1Ď&ٍ{F<yZ$j\'H~gP'#bZUr82ABL9_. @w:a[/˵U^d{2 ) ]0UJH%[9Ej#,tIoMumdXYW?H3dA+jW+TwnArAMWFXwmDbh3GƆ}PZJuJ>Z rqʤ/Y#u?*?LdA%<3U(3tQ`_7Rso-V8l2 f>B es9._ v #$]cW.Ү2s'+*eq̤Mn$ojP`gHC&{sͧ~EԞwKzMK%Ƌp'H,Mx V * nticK@,Za3t9{_FPcfSsK|gVI"Ne´1Nj֦JƖm]:Az'F戧W7g2O-` ОQ9 t?t0tVճMt3n ~8%ZfUMssȽ)wPN՞e5lw$[{.?Tg G3a }=H.w >0u`dPq$Hr2~uJv`O g0=%z1g{ovGssuQ_ Pbglqd\WM3ןn&+'v3 .ku_[8XhFȤ'Ị}[!ЛY(6Uqhtnuo|s}}2j)b%\-#0_͇@&xwA(6٬Иf}v}ᦗTmkP(z4j}fƲXoٹhΡlҶzqqg a:a M }}'e r7\dׁfQ¢ Ĕ+ؔ{C/=,L!CF#?Hu&q怜 w"o ""qjc}렒\?gl|A_WuxT;'u8N#;d|=+gȟ\} uyEqʹ^j ,(ccu2k r37):VzF7ۻyZfE-gV$ڂ$~F>yD2wY/R\籑ia$+@N6vTLY<(Ya%GGpV__nS?!SO SgYS; ! ^r5C)AłL!OìaeŢMe;*8c;=LGLw. QN-2\ʃ3 zLr4dZBq8>!nJVɜ z |[E DT0Vm\af ޭF?U+EwjOB r7uA&R% _9 _xk.f\6-h֢'}V*'P 1\Ys@GC_~@\l@VCa"g*[=Y)#yVqe᎟fnQA ފQ*j^ڞUSȉyאРG̉#ҹ%aƮ>Sx @m-+e p3 ~IDfS޼Ⱥ~2~Iȩ1ڍE]oWw&pZMRǪZNjU0n/r\t3y1? TO-vЋ >бU:(ؠ7RDRhxd @'#"]l?@o "VYE@侢S/_G?(VȴLbH=&YQb=9}I܉ect #= : k'*g]$SKۨ'#PvD/CF3 d &k\} ?5 $3ۜ)36#K!Ni"՞\@LMOh A;6p[n:R>W䲊}z~`h}vx:s2q z=%&[GbݮDIKkrE8WZ V;= =9L< |Y&.&UcoAfz8m`3 Qgb%Dϩ2`=?^Ji g2GR{[Y^jm{WÓFs;p(z~(y6}]]&YoY-ސLXѰ)r-1 I.yL;+|YRI8Lr?;543E YMTۍ[9 Nӄ=( (((( SMiIQsŸu-ҿ"εk =[~~{r59^mR7P_V0qvyJ\. . [ q`ѥ {Z꧷X)ye|R'@Pgx 0P &Yn0܉{cy+_q.~8EڷI]/|jdq w;z#pzTxލk7TN0h<&,e1]o7˸@qh9!vQq SlX,y)wCjl|ywuo o]oKtx4R7&!tD L  J1!>,.".*..އ]R%Z1.:.P5]b5A5s f"urqƪ~6nCj  7Ukg,:ȸ<71@,D% 1:ď[o]cNt· jC*Tg 6Au3֣"" nto$zס8n.QbJo2t0w U21|uRm0%}$$Ay?9S9A}{~t QBؾ3ޮvU}b薦P4ppW/"o-rUuG[Uf N{cĔlU˴Ky=˂@ gzu"ڶ8Zw؃jL~ˏB+ZcyMv%gΧkutqxrt s9?4ǘqr0*r?o=@}oz,ƴ²vy}CX,Re*?.r2Q%,b#q;CG!W?G^'gtcU~B BaJfUnԣ8ni<!TI>IJw=ts Mw,$dkt:Sk GoBC\V>A>AP@=A<Xm$it$Z{0X ٮ4Ui`&lSOke>1!pZ7XPn̞ITA׏cFtCһ-ѥBh@2j\yUw1Flsv䖥Ow&6- vR;& @khяdIrUE~ -sk5{D+Kcgwk)b>3:FQ Cͽgєipfxs!#_ qQLె㲕8Q*~&^&, VJR,>F?;{٥#j P,D 5F !'&~- ,}]9m_+jnX溨'q6]/1 WBDBAԁS#d/΍"v)jVnLbl-<7%]!HGD1CgȪ60  ҞK:f9;$/ܮ4˟DNjW8F|,! C:ǎX a+f (Ŋ[L*{ 3v.-7 N;QLR]*N$yGaʵ5MV@23E6"\0پo,v]d]gmyjdeidhaSdG*{_1X+mUm4]?Fz=7 c$-E jrq"y\u iMs~:>qnʱD%hXl9U\CBTEK+Y{ 0"_C|zF$T1)csR!?+U,xXϼG1q| |I{I+5)_ag1Rmg;zG9x[('X[KySREvJ?bVt<*C2 cRCS|M5D* 9;F>q6,I7ucjb&avq@>8 P%&GF oqa%#+N3>0}6XlNfwRm(KKW qQVO"l5mSyzs6_]FjP2M:ShGZhra.XKdy㟈;]?j+)b\t$Ek=y9n~VM&zX͑$t"ʏ Jmc/PbIkV>QҲUooADÔ0M/]+)ˤ?XTGREksGH+<3 `0/d:Ͳ) 8k0p HWX[™U6r}͏ܕO"/)/W֎nSAm4X{DU+tCwF:07aW]'@&@w|?t#؃wٓ_*DڳUGr3$` yju"~ݛ9lF(g TqVuХ/"L_#i[$[$>[[ŜA<$^qO6KW2!՛D@fBfXGfXAfX߮dPVJעbXan(ˢ UСufd~-2 6xeG,/ﶞIgt6w"f:j^7bUn$cdxtE67#Uepdxcqhoz-fm6]m6]Y-p*ysZlx,NjT uL|\#ƾBz\`,ޖ ;34B=ɯӹ *(J)gb+_YVg[ sCX}{(GH'/08Xd ]CmlLQF_]=#TY2-þt K^B#\ m1hƆ

~ld/?+lخG-.UȱAXQ65_)v[m&Exvj k}۠#:N8_1C4 7a.bXa3Krqb%<̘؞ 3έV0uXuT N.g&Mwf6#]c@9 tMEevt\t%KGO3X cR3y&A>?Bcr0k 0™,"bЏ~yj_D nWSOA_۪MVYs ]%Z\nH>>z)0TxjʘxQp)o8 TiˠV{|"YiROryt2)f% ( 92SJe:;P `('D wCć u^pR7P8EzD,6PJzô8BpDI:Ĭě^dn2> JRyƜJ`7BԳA>- -פDqL`8(PbgꆥϪo)H`k|stRqa: 4&> ҟ W-Sg\iW`ʢ; 3/q[Πanћ V)'nE*LBLCp;w.<*ξ=㖭vJdWoѤO.E(dVP#j\cDɷ{xjKcj1\FP3,X^ku50R.,]E;0KY~KץFvPaw^8Nh[I,7x37OtZYZ1.T.Kq~GVP2Dkl9=R#wN.MR^G雷TI0" qy֬nɖL8@? {]lLip6y'SNOlW<,u[eSxdQ! Ss) 3 0d4i|g<a@Q>2&r[!X,٘3>[.]+C.%K>Gv"On#O ["C~G] .5L%\99999O%cI=uҮjLC5Õu2͊Drb|}y}j <=@u :A 2a)ySOG`;!^@J<`~8x/1m +v/dTzٌ B"p}(1M ^G[>*frvd/@߼O_o\sۀ=8p+]Y%FC{O?(ao>b!?J*sUS7cB\v',":#*#2#",34.R/5JL\5=y̺woYZ% 2b|,__N?d]F:9kW%083&$jۍ9zhO'*;ְ#P,`Y?):s0 Q S;fwsc9׉5x&` h}7JG5wRbhA|I[0*[d{GS>u sPEn@A (cXBh& wT4 *$u$I2v.b\%W]ߴm)!'<)MԔC+'OqD o15idKUgȭ|-֫9grT"f,~Vw$[NzE=:ojfJD9qgQtRz.V.Z>(L\~=W\J j7qmum,g /v -)b-i!EPBHC]ABwCCCOC#^Ɯ`쿓g] Q#HݷUniJl[~ |;d?ѷ1dyc[6-u.>! =3;EXԯSxF>ML LHkh9S8TNUHz.cL)ph?A' lNW(e8mvϰFT&t+xWv.e9O49{qgoEpYY(YoUOsG2H?_.W+ǨNmHzI II_33*Uh[@)O# v0$H 46 Vu~*W;=96ͼefdwIӸ46"[uC.s͂p6H>M/j@/~^3y_%^!B {{`  ®WmG]y*gptYC`ȟi0Xrt1 ԎΠD9QZ-?Awv ;&S4 A檋tC S!|SmOɔLN F zqe6!f|_ֹFT\G?zkra^6j92"'.wτKucov4<394I%LvNZF:W"N5^obt}#73*D:v, 0FqTv:mV+v N. LH{ W;_i3v Z(>}*>U^29y~k]Bue}ouflP K( :79K>C>_>:/1P.#0roc~ߧ1 S/Lvud忇ylߎV?7+.o'n>VaIťyc~|gT 6i"N=,8K3ޓ??q5Ln^REbnPaѬ*';/8{h5دjyVdطu, V~rk !R*hb*`Mvegi> KL@WnP0o!Risdj8,J UUlyŕPŽT0_gf>r)Gv/// 8.9M-M7L6^tPp0X{xOOOO#$=  "<,&8?-1}@P\?wp|_umCsc`{- 2Gi [;8F\.vv/YԸ͗u-plaP)TG.Ct'{ rt~xt{yr ~vv ~Ko=bң:yB1CݤB?/z :fA<0mI9L6LB ?U(>[UЌM"v\M.u.!_ံ&Y;PO`[:&zWul]^ |n㨻Z XY<(Lxdv qmGu91BHxA333;(}l`-[+ Z]k_#&$Պ6+[dR4.D{ʙVENg$>%wqI4#_n{ }XW =7z`n_c 1W4ɦ`X>y z2ܯp`YvNNN^i=~펠Ljxm%v^.w[\v+>S z3qUOs/Sbѿ}xۀ% -KYڡ 1H"ziA],7]D=QaV0h&\ݲI;cGBMp4yoƿx >VZ?<Iu{.Xƞ_1̏*g4MxypHa!1goɎL ,%$]hs,MT-gc+PްB>D)&besOon'W%Y=O?XQzqrƉE\Ŷϰ?7&I[ei3!C/ؗh <-ȩNDqSdO :Ć 7C%r 荻hW` X fKJ;gGQ0d3TGi)rX".%à+3/~,CXU*~_<*Lu5utvaX6 l)^:Y|rVB)< p3Q%@v \Dg ,yj!ο-R әjOQZj*IƙC~N.g}N,3jVL./\@Q?s h&ɼޥo/cRmOY[{9#:Ӳ]\3~]w+W;Ŧ 872h.!ҞЩ ;# SU o$LuwWߋ$5ےٲP/v(g2(pwoP)Z3IO-?G)TM_ɤ*Ǭp5OW-o;>?vqH\}t+xHhB$hb.EsxC{*NYA¨a_c&uLbVS/tn;ϹRxۛIJ.HX';FI1{L@!g2/1 j2榔b߇.~p\g>(3C]Z.=Qmc!ج?H"Zc~' iHGϼiN'F0P=N? M 6y{c32 6uvWa*BM='(7_N8R6HI@#_/9h~ vf 7%Q}Q,3v -J˜)d*?gtLlðAМ",_L6H(UMAʠĭ^MZ=-%Qwz ey3Ѹ瑢ý:pookMx ԇZ9ƍ+HG}ܳkݢ7-W/TRC@?¶ ^ ~;*c\fgr_+)yY~L$T;)تI0B(pg KskZC1ꏓCbWj|Kd+u 0Tn{Xn(KdC-% 6Ɋ"8g_-ǐ!JR>35?v`7/2lf4aі;ktfr6М%Y\UN]?۶ sK0e$[tm2'})jI?g=O wɮxڜRDsW RK0'xR+4#<RKz۱a7F9`;Ѧ,㛴 v)BM20?.d6U71u/- oM7QtG1՚pT+Mza! *7ucU7SrT 'i$ۖ IMPPZ˖/Q󵲕-sU Q2vZ*ilI gXI0ƯIwT 5Rf+~vw{ajsM 9 Ҩ%t#h;Ol4 "y4mH tm ).J/e6׀#`v ϐ(y{j~?:ɨU5suߍj:g %x=π W۬?tnrel/7VEV2Gдݿ2}tnp3|m577M [ZxFtV@f1-;=eK%">kCؙ-xN$YT Ae.sf `7ߜ{kooJWO2OP5 tm/M?#]/G Qx/@x`%a! }?` .*g8߸zi:Z0P0ɰŇ M6ݏKҷyO> m;w+^T"i Щcp0DF/kuո}!R]t<%BdPq'`ৠF!a `>}3ʴJ^KT7 ]:YR3 H}`ʶ1turtq6tdv}C$%_mgvWjxu̝ٮf{+xkj~jlm5Mu|Ut;WvA1F>͏2}H}|^@ Ƚ/ )jզęUǢfA 65yre=~Ԕ_ň;8*VyI~1z }oy'1EԶQLֹ(0ݠd$I7Q5A>gdѳDhՋP3o#[C*wo9 ! &iܤvE2W! |{ir,#  I \ÐX%@D 5&:fr-U\hqȻGG''= tv5X;3̶wk$sMch \ vMUͬg-_ƺɢ~[EZ 1 `],;v{x}28G8:>q_S sw;tUD?z_.fRm^<to.(OPτ/K6PG `o!^zۨR~XyywWxz`-҅F$!!BB -X.>sNMܙݿ9V~{IXf=lZJKdddddddo# pPݙ> & 猭Pmu-tj܇hݕ} :A:[+Hެ1O>B;C!]So_\cf'QÂzZbL F_x)u m%;rEZu:J ϶}N^xj$up,OuP;$le*.BŚNǐQͼ%=c Ѹ^(JBU kҖiwB+W[4MeˉF{nf7ںfᜠXkq|9U!^Վ6z.z[z>Aڡj+U?kDtzl?H9G_bXhqa_toSm-o`w/ux|  `aq=G5o>OZ#%lSt-"Zb)14G6~sY-M=[*T"m k_,% t17SSRPtQ@:>tbyt?{ҋº|νtJ᷀Rƚ*:F&fƶ֯I#s6FGς_b̿=39yjJR<`K0 eg?u}/UMyi0qi0h'l=ZfGyB|aG|I0uI)Zī!¸nZ:N")Lm$t>3ER-)ңkIId1Hm.MITƱ7+O~ c mFA%eC v*Fއir~quek=?$`^ajch?q u:Zlik९ ]seFS$d T̡콵brK1O0wV p؇T3r GT1rp g(E(^%J\U@.iiB.U n$bq~^z3z)oLԺҝ+-9[(Jw}f x؂^!"Na.y1M%#X\(7`e5tD B"Z1 5hA`4$8hHt\.H u[{ߞgp//,ݛlS J6KWhȣ:l:,H֟0Ni('/_ l2u媚P']$V76X;'T1Ri,Vn+Qa'^u=Zs1Lo:Hw*X}&Rq.^z!Ut!wyfA(H1E]+JH+F3WYU>oN_yX\YC3;oI웄;M=AkG#^u;BpaU)W9Ĺ֡ަżøW'Vh~pzhhGJbzVCՕ@{4unƧ|M2591E?yB /~+ n0m<Ws5*]O?-o}csovDY{L1EMT*iff౦忦ɗWH<o6P0_X d"PeT/YSH`I? ߒq^0ϣM]y_:mX;Zn I>B0MkܞLEڧ5/-ky[ܾ~w]v&1g7PQӏ_D.w wh.9*GqE~g@*5ۼx7"\I@-ϣ(' ,/&=~sQ!j5B|%PzXo9țwT"zen^Ra4ʅD=:v(vmYBr=/>d|+9JZ{]sp10v*@vY3TMb@u{"e.[b蔻4QU+Rx"|}{ S N g8%o?ؕVoW6nM,]:./җC]:s>lm,f XqI~Qԟ dnmB/٤/ ~cFl1&W`u/}{)F^!cqjvi?'<ļFz9a){MijT)5ξ[Eibîii YeSO,UUdnf]k \糉3ɵ?qmV rU/0 ~@J ή]%ɥ6$Ix +I](zZ8*9 -ef@;{;[ђ ^asټ2!UG)ш|IYEw(#3إ ԂL W.(w-n<Y_CZ4B8l?v/AYMgh kG }?dB8uv6@Mc3no~wawqwi {zEd ^7[6O&uQ@t&qIT4! 7H@8Z.P@,@ M:- |%Y|f5~7h2ɂ'8 Mϛx1G^.;LK| hajϑ=M0>7Nڔ\Yge/?*IwʷSvg^O0ϹBxEkha_’l9c?F=A&EZ{L= :@8Y:†6.^>Nj\ŕ8ʦ_l53m(ƚA} 2e g豦R8@+z rՓכ+Wvq[^Ǭ>3EEc_A&FBk.ުy.tcuM%HSȅVΩpιHʕdB(T\oGb)erd煾k#}KŊV#>Cs[:JbU4]Ŧ>}jo4 hAyS%/[,2}5!AweD7CTġu;k*&^.[V;Q gBa:(@{<( jf&7R;)̳fѫ=0B={x Tұۨ~[ޤU2l dm \y~spFG+ê%hR+bL!~D>@R-8UYWDQ+Rf&^c 50ה .}.JwKRp4R 4uj(pU.ڡi]/lV 47tΧ2{*W!q&\ɸ[бc@>^qTf#1f@:u])x:B0G~#Ag!r}"L3 "n,ROPً55za81/I=P&-X5Dq5LXh:asxg 17[:J$ӗ^ŌX/mJsʡ8z}2C8>F9HUTT!Җ'әj4lr(Y{T~ |W3l"L=mQჄ'{jszzZ>wiR*Ւ=f=asm`8/ј)T^ȕWɔ3+ӣƪ}6<0mM'%g'wqG/A'ހh RFN| OF>YȐK!bww0O =|)unqy RpRCQO:L2$omw& ~M-ptˠcoPUK(:.Dorgeq7l+"*3}UBRڋ6k~[S'kOAP)o֝3Un NX˴R=L:ů(ST50L vJ;ڣY>1)\M9:~.Y _Srh_.MNkMd ә- ,H$7ss,#]XŹΎ?Ŭq?xՀhTP  @.(T7bv. M N /b>}׋f3xI?U+nqy}8fLpRm~zSлB)&ֵG$1ǹUl~Y܉qAҒ>|[΋&9Z֢M%j[q8V4E߇S5}쇍 ʭE43^rTpժHl(5TOĎ]T4F1S)a^5{a脴{`2C8IOd'4ۭ }M޸>TFkTb[]ƹ9rsL<:tp}hrSpbϾQޭ`O|k۸|ѤPM7QڮTjPIWșc86f.W§dEJO #*P 0Dd=!!8[Yr}uY+,ái{0öĬ%.Ux&Iߐu S ,jjƃF!-@1t.S!DOHhJ9ʗ)Q7[wX^bX%9N{!] !] L+Ih gXio#>yOH&d{UXUlcvu} 12c[B;C1:C<}x6xѱn d]N*fÇ)I[q ,=ߗŶ9Fi IFkZJ%'RM8  Cх/}LwM[=D30,t~&߁NSnkj7d j^N 섄jU˘,L^l963(>,e}7ymٍ^ƥxNN$b,a =Voڞ(p-͐hWᛟGD4!>FGI.Q7_M|:b dk{y\tyja1`8.~1rCo]״9ı{{|yVh%ө͇pWS=fKn23fiV_ [_j=uF8xbc]+OU`)Ń% w KC>M&Yoޥ?fSC }BIfżwi՟@q 8Hfh.O^|kѪ jc_bZ [Rt\2[sލ>-i% mfV,TKL>1BnP4/Ѹ)t%*~Ԯ3l.o`mF8dHqCyQ.Qy,  ?C+CkGRZ} (Ciz BVX==_څ#GA @9A?A@˂ݣ]}ۼmYf+[g3Xm1Z7A(%"6Z/S#}WNj4긁f61yg<ЫʾŤO33ҹ.Zd: @mc4 ]ϊg{ɢiʈL;H}~NefPwNQas4od>]A yy/Mj#cP}y"wt*O]&b.LTp؉ 5AԽ1JA:*Q9]sy- ;1aSymq1`| bG3N#_Z$+3"M#lmCl BCCy#kGkㄔI&oT ߁˹GK>c֯7L66Y?%$]}iڀ #\luDG'/mq=&_) >aD~ø+m(pb1 zMv5=P& CyK! ^"v^"4\×?ȼ_(மoa#ǭ]|\sH;4W/kp⧻50/$y uJ89h?>c/L :-r6K|K[:-Mja+ӟ]ZNC?e,3OSSźgo08uK|43AP&TodmM8]>~Mz{.N"藡6RT6N`x ~Bi,oZIYR虜)`hCY#; |űh]Xn{:L| o\Σ |[~t OֈVq)ns,YHҮwwi'Q⇶ UYV.mRt$y*dI+vDޡ@[לCӅ3X91:.o 44h7Y5X 1ϗ=G>AμDt@A AҶT-[Ϊ[+3cѨMEYcA7ptXڄoUy#{bhd)QB\B2*Xd;|2%jXF  :ps,5d^^ʛRzu*2 <=ڀJ@BH~eO o{:2DStE[衦Ѡs$#-xezMbn6|!_\jU.1Ǫ4٫XN<. 6zhJUz's28ҤuPv\nPu36 +l^xI$҅`M]t {Y#M[Tbcsم9k8KH9s>r&exV.~17}1Gqs۷GԯBf )z_%o{cDg͓U3w+jlA11>K|tnţR$w˘yS]ՍD^XRM?6#TKKk[mGifnP9k"ћʎ6a|ah$.Z=J>Fjkp-VBkVv u#O'[vpGy>J|8Ի KhEy1+'~`[~ϙ|уVWƆ`d:=9RUUAۢ~vzG;˗hhhJJ=F/^< gJPTT }~Dii1111^dDg + V @﯑?9T%y|3+ihN|E[vˑy/y`Rk -!@@{B[`h<AM@9Pno/U!k< R" ܻEq?top &bRPI 7S xܛ8B ^g4{Vkx[wȄ7RMf9{;, 6fד|n f%4qI}шbqTĥNf߹]]pvFh)3p>|EV(~u\Nҋ;vp_ +jbl\<ՍS6v&9D{X{v % 5Q{W[6Ӄ{{5EU/HZ0vWhZbZ{s6pio=NL6﶐`g sfQ \-_s<"nUqhusgÛ>)=Ss!KgΛrI̼ tqdqi"<"kvHy ^FG3*5=~U"zaFK,,۰bxNGV?@驣 )5MZA;~ڲ|j`W2)\&}MAև#hX{ƾJ4g}i`8֣O >z܂Fۃ78yD9(<{ѳIq$rcikAE[M UUMP9Q[ٔFXK?w~]2 #쥹nvS{W( ׿qZ)X2 u@YCY+e[gz)1`@+!G(QQ[PBGQ:מmr(F Qtހ7 T`9?k8U84:sBa-ra£J;E6XKQ[A_WDN_I_?gbCn=}ě;z0HƇy*7c4Äi[q3^gϐДu344UtHeM9'ɵ}ݼ{qkoha:Yǜ*ο_$\"^[e [ԛ䜭ě[tRv %\ά H7H/\\xp郹S} _ƥkObдWV៯Q.=Y֟;%RlV;Һ4\S+.me(#h+++a3C*:U!'ޠϱ.pB/~M!vW)D9Z5TOYӺJ?:~-GѹA6{m#Wq[jZJusMdl˾hw+M~6qma O+-i)./'.'''&hIY:njP0ӾE]1+S;N,(p'cm'3HhJw,(tC5m^ʳB;>LC3Oaě%eڹ]&F[Ŷ3NqVNr l?Xκl*~Xrs7Q *nB A7QW*I.r^_}1k[>pS@ PQQqqq `stS?VC|օ51>{zlt͛7MNv‚aEC? 7Ov7\͈F?愿yq~,Lf0O_e!2-~ ~x0  A<z [@PM03 -&xg4/x/"!N} `;6 qg>C4y< n9aM%.-cv5pP7SI^r^wc_* k$,$)+S?19ճJ񒴎IT02r1q JfdgjYeiɹ]I~usq uU™IO8O )8% NExY-h-JorL\i"Y@DP fh׽qJ#ʑϳ&dLXjV?*8AɸDL"@ σVtڝ2eVR-gO.^]?<{^0(^H* ,3mhL՝ tܴ =2rӉ SVJPE$]OR"bhb`%k¦^ǠئdaW"G]1͓!g:xޚ]K n/ ̊e6֬d˩NJ]}⷏kDl0B΢Xd5&"Ծvg^~mol9!9\9j;ӥ8G34m+~c8]O'6}. AG$P*Z~N(·ywƠMieZKT=J5:?}Y}oDo= \'ZtE7cY?R>b v{kD6N i}u a[NlNyawY 9Od6_+.Nᘭ _?(`xAowZ"Nn=[Dq@{ \!da³v!h!?2?S~+ZCJzLo nkKǁ- E2w lRHd..?Z9y8鼟Z.b K;-ЄtM &I` gs{Ûe¢!Shbꋶ'w6ϐ/&on| pP7$#߃ }nD.\$pc )*@ P,@@PFT-;i\61qQӲl!N{ (/WNA$EF!3εwkBIggDQsJmBpP@ @)nՖ"z o#U"T!jajP,Ƃ3NYOwЧ}RKPjZMRKL1"u2NQ}s%0J 08A-}Rn^}?B)ד 6^y A CzqWz<7r9.GiZG 3{gNMs갏 . :6{o׶.!$X @w%Kpwwiܡqƻ/kvwν]j֘cgu>)Xo;5;HʌP_mrq=;ě;y 5\E0k"x nAڷHD[_ZB"~dJ8^ɜC_G>F!e^^-\7=fhV0˻JLr'aΐHΑ)_ ߂4oAnp dGkE(@Rm׎_1L|0Gط}O5-(rF6zui<3ZS wH:BrEkbV1C0^u]]_]q\I\0 Sm#!O# g# nF "^!w(2_?G`k< !QE @~~ni~Z4(agr_mPel`G@D,37v>_D4co`Y# Չ(6 Ѯyĵt%`⛛!3IW'?d==])\$pi}3y3gEһGqgT#YOlr-llEl lu-_*x4J>*x;Yd|okamTP]×Q#?`f+wt߲No`kf3QH4 9:锇KGes4Uq˱rOSv⚧.<_UXn)-aׂzm"8ȍ饗$,Qz:Bt@peXOaxUi垧纥mlp\+! |`{u,5|Qs$x6[;J?8v nq [țC/ w~{OO ש6&ߞr\|M7\tXjLy.Z9m:FiT8<ѥ]\s?^4B@u{ y h{tt¯53tôU͓Tݳ-0@O 8 %) Iw0րWSk0@|hGJ1J'QM;-+)&\ձ86["M(PϠ!tz>_<wg6ԔĹɃ1}=Ohuٓ ;ĝQg__4wXwM sS<.WJU-MQSSC;m؛ֹft܏#OkqR2erl<cJ\{åW2.,.<{ߞG!/*ML5|buÌOܯNԊw:>4~NTso=4Q ĦqY3"y@j댮~%ZQFms0W{+ a02>t^)glzWxI Ws&${NSjS+".S.= ptW Kgs6ӨO)c0)zY9b[_ESy}&0J;X#v[-qU9lBϦS,;)SBgZovP~xNLV4Pk۲m0R7Z+G4BmJk4\.e"xuEl+ִ/iM V*Fk>hXoPڪ5=V"}M>zWSo#Te:A?7ܽ `,X(D-\ T}ac 9$eԐuG II2YK7O`M_&^2HVyVC&Y@>*:f cBV٬˷T<%K*A/Re(Q!6ϷX\}>KUnՅ{Z2ģ:`9} ,D囹4v}h<}7G0?<]j"N[4y'+Gm{Z¼Unc$ED"^yd5:W8L+vW >JAWC(!t9,]@=(nk L\}[[xXg(ט0I8w/iSX>+pW,P2:9nj%OBu%7j9 B߷S>ܙwl_澓I*joVE[#kw?6?fH\\ 42[zBY:UeY {o٘{kG~MWn++7(\֍:02c9GEwڢl3C5Η;<;hkn4noC(W>\j v=/;!](0y @)E?HhDC ';zAgsP%R9jݶ9WZZ˃5 ڃ6(a:&я-Bq;ăb%>c6-Iԩ>'f1|Ge K= g йa(oiMUDDu[&)zZ\ `9,K27ȦWhg58; {GY0P} ]@0 @5Puz]s,*dNxw{{<$&'#]&fve}{~&W1ϓ_u5?_u?< HggY9ltp{De>~:qg;~ܯ|%7He_,M"B+T uu ?_I:T8gtO /io}=^\ܺiBħbo( ٖNVޚoE{:.EeDGX[9=l5w"6?vlA(c VHJX(/(0L6cW^DNR.%ma#gm1 ,L 7#]l00f~1É#Y)lp?fUu%R>f6={Ş/AuM 0_-̹MCeUnaOGP`@ )Z-@A'^OH[&:4EnzX:8ZxyLpWp`4ձXɑ/Cf,cOTlyxrZ|j EFmDo圣:_"Q^p=\~5!#R5_'6r~P;vz@08mު/9P=3vsZB #742dT罅FvN5n~i5OT{_8#o-Yɘt>ӏnДgpk Kk$hg{kz+[7Q{Yʔ \fSЈoGibi3y:Z]kE(N'KTְtpj6ɹ%z' o*ĝ*(foIO 4wr1սm}C3D@Ybw QmP=y? ['3&̓ +D#Ql%Xh4K"[tSk*gO !^vFl$r5S;SqPvBr~tA|ȷ,stz\8/ II).i*pc=_BB1,4*'8mٹX؂ 4}LlۼG|5%& grf7I^I>/IvpigwsMcj"E /Z@nF?!Y} e}_"r=5;$D6 IS/F?uTI55Ƌ~,_D/)=~\H_ 檯nx[8(c+aҜ.7{85_=a9O/Y6ZD& Իb+=-r}L BtujC' a~>3^`Pܼ1D (A;8[ydtuCM m ^P$[BWac?et"Fi mo?Ә_z0453vx>vO|JmM\r Chz/ c5!7^ctaC𚷱ѵaȬ71-7 prO]hE?P-<A)9}KUb N>󖁋&a+kƎc.!ͩj} Z#*I|oֱ^F޹QۂeID/zTӾU8#Iהi3Ig ~\5 B If~.iNNnNyNyɾ: >bΙbYYsY7Y*X#.q#4V 5u pq7rW 3\1tصy8evՎs,ݤo=`q$+h-F|lb-oeIkg z³GG;gNvKT=Ze[I*]`HP8Ķ|@u.Ms1ad4ftr8+GyG~/⮯gh.TO0i-{c>+tpNbPHP*5,4W#GxK̊m|i*[l sc^<H'fQ-0}ֱ6``Vf_ .hІD/Y7Fh$GxZxjHs0ztp s]u9@v!< ?<%D :߶̛j۝88lLN^'Y'_'[XǼͲLo5Fr0]dpE!s>{fSIL=NP+/pɷ 6mQٶ< : آut "YZެߧYZ@%!܅ZѩJC&^C q^ZS}ORPWN=+%_|ܡm٬63dQ.:YMS(aԟ8)6nWp$8{M{&PSm=(Ԅd}H?ѷ#o{{>$ISЏitE v]%~}Ʊ5.3fd v#2moMYk8!|7%_6jYZ{揈5 , ] o. NԷbVRd&2GG+ߍ4S=XLt6?_w(2+5"T@: ƛ;heMj3ge&=o :Z:zڏ5_%6bL}\֗:Gr[1B‹b)RI}_~V09vB.Y'l ?И&g <I Wjp0ϐn@(W瘕g$댃"K:!f{r!̑H h,os;g8,HvVa%"_#ݠ\b4=똑movZr|}O=3F4KB)])k"B8B2Pkj]e2\e d:G %/Y$^}\U 6\ru)~8}xy߂|n #rjeɦe~3Qae%6Ejqt{o^,NV .jK> s<8̅B%_gSLd|ZǶX*tJkQaUq:-TIW;xx d@>Η`fTvօqكvvxqSאtAG1+Ӗ)(RVqў^nQ1=7n. L۵İ? ] 弬L;vJޑk2U,͙M'2Cz?Mv,%m*#_o#,`58J|:F_=ocQEՕύI\9@vKobb&“9ђ~ZPV e 0 ]-ϊfytόïoR6现A^F)&Jdp]T~i S0;eU St$ @ց´Mj9pǹZ)EG#ˢ"iyO~Q:rjQ/^uȘ3۰jpI&,;lz`oiJ&O?;:8= [:';^{Ӵr5{߱Z*(Vwg@*@A/Ǹ߈C܍xl8mtxhrm494=(S;E5N.R5J1)]D=n׫!IR" ^C# g.ϻK[6~4{U/yPiqbYbÅ|ӕL TsH8vG$Ч3tCTZSb+di:9*eߗ>N^ :C v@RN10+gwnvaD²A7F?P ur)}{־ɒ"?oj<$3Yc3º']oFهe3B],S΋rQw3 N?/R1uiiTbm6U'>}tA;>=B;-33Wi`kZ/V݋:s5  +71NS/=:L"cs7M,q Y1w$AP@A&kF~5Mo7vS5bIoĢ[9$ϨAL= q ʃ*n/Q`hC&{4#7ThGf_t 7U~**HYL:ɄUWE95ڄ7hfI6ֲּn~I&[&}glIh amaiTY>[8,1(7him#30{b H=fϨqu.9+ŜNx*&!X,P֯2=*]/RWP"&!W AS]_`U_:*W|UzSΫX"\(ܖ'v-P_YPQR4((ؤhDy}S1Sۡǫ{OWֈ ۻktZ¸ku/я -hG:B]u2\=R-kgIW u#^ b}mN7w?T_`@`8%٦,X\lJ7=1Uڈd"ƷTY342P=+EM+}Hd{[yceϫd3*q W36A(~+M>xSg(!jX>Wk#{4|{ qRmD-{S^!l爵"8 jqvdۋq`( ]XchɺݶMbhO$T1z pʻi7\IBK/,Y'_5a_cM9 ǭ=`K-Xy_X-q5PT,!%B(x*l[ wFJ2D}مZ(n !zMg#9pZ-)sD"]$KGzfWEvuM=NT< 8XZ-~?}b#$f!z<20CAEqʊD9䖯Z(J4~]ٲK̦8.CD;.cJbVoFS!笙Җ)ܺ;O,g;5LD7!57(F,c9A;F3{#G8k{ػ؝猡 [)ϗ!䫋L۝"ZWaA"99oc3 0oP_nD[8?If9m"9]߹p&8x ɯH{VXլpL)o^v^7^|*rA':Bywl|upw9q|42tq%%U HuNчnDsCt˕SpNrOʰOv;m::Äb^#_n`'G0+[q28O譶e^#6R 5%`MoqV.q/(g)3i,|Z(6!j I O]4Ts}_zkDrj޺u=^xkRr#2' ӓ)a{DϺn[Wӷ[ ̝{[8}eA1WޮjݳS-2FqgD[vuU:G@1p#5I:xqy #MtYA^6lCdi3fqaccb-a!anKN a1Ѭᚸ;t]&lC`hSg(3gHgH`z {B"E@B@@ՠ,`ۓvy S~jYsh`3*d+kdSlKһGko&zoP3xok&N=V1bOW^*<}AW02pGg'B[V4yR4T1Q|(խl"ne#JosOͯŰ 8iXqem![4l ^)VS>F)!X'EjXN@c*H>iPޗ(^W!C+'0/5+[t*6rE%8Gn]}aԏOIQ<9:Z:#|xZ g&m[AHBoUzO`dRVqj9@)r#nII*~Y z9T|=&<ă;/'?et@Jf*&hj¥2* dxh^D>[|ٕnmLS*It#7җ[;t!GwɮdTӻԑ t }U%-On!4B.B54RY;RZ(cwl^1ieo̒,lmQu 6pVտx\pȇ 2Tjy6^,JXzqG?4 4oſr>dmYc~l]MLqݷ&n4in.bێ,.?]i, ̗9~II^DS#BR(O4x*_-]`]ܢ 73M05scyp9'^XٻbLC xo 8F[g\ޟYo)| ɽYΑoP.<05GgIdg}lHhdOoV S9㙬|8G'Y\R&8'B*[rbiz{DVŦu{"aEr{v }g<ѓ;oWjyB t[{s4 =˅VJEG%[ ejitNl<}6H6Z=_]Wb<LgMRvIsQ.HeilZTok#ojYI2I* E}Lp݄Tթ駻ӗp xY<%Ro(嘧`RfdᦺϿUvnm~y=\%>sßSJg&`]GNG::f}kP$R{ 9oS_5>2=s1 PNJp@4)2Do=;C& ˫uk1)%E1vqNˤ_ˤ]Ȧʥ*Xľ~0OrG3(3z^5wW4wT4Z4/I4_[С$vtpo|mf~sQxT42THRUG3q}ɍ 1Fz9t 2k)^?=oKx\cw!/ @/`ѺlDOӝU;g'/~wkp>%D,yId k$}%q#č^gu'GX]L }@ Vih iڋօ֎ފ|d.oP^_MحfƵD{m%}NJ믅0Cf-⥕[͊ljNvG㉟[W¶x 2W[OÖti7HN [8@ ^.[nyu?WN3]qSs <ź"qckrOR.f82pB 2 5+4K ִN"z^>MU;e3tOZ0IۃյY;z(txxN7ͣ`>+Wiy>͓]Ic?Ev,9ę~r:UǭyN_OfE"CY/deUuÛ>Ij x74!,n$ Ž?&ڠ}q8|<~6z9dhQpY_qb.[T@DR i$kiXv|~\u]\7~5˙c9MR]"%K$ܧ_eYC%Qer\ $[RdI$@/NLW̫+Tuo}7mdq_dŪ#tݼӭsDA/v0H`q^koFWS\4+1P ׭؈ܝ>Vۺ%]9r< $ Z_zA sN~OO_|$C=hF ?JP\(X/>ϼ˟maq}:?}lגPml7}̕ΖB꟣;׆ePq}o~?gF5kX00|z;G qTDY>r` ȓa53( ;43pC2eh  9Fbw_4_ tMn{]i{Mje' u8 < bp_o5`e"`HCW@%0~_s큲D8"]-\^\D6qg֭kaAb0=;"4 `TpEi;;֩՝ ǟ|5M6v <и$ wYC>0vmO7twoZ= Vh!k@9 Y")j1'"vO!9iq/:Hs@u ( :KF2]#Dۏūkԋ"c{v[,*W:M}wZН]q88w|8VF9Dc2~9a}G˾0CBvf_{qRZ+f I)i˒ZΖ=$WاC4Â#:c ヤ]YT^4_xŌR"4(t=FVJ5櫬 d(})yW޲cdBܯ'v瞁kf6kd ?t˭ɣ%F612=͸3gs|X&I>,>7)-kIWjZ.g8 U^7g 6}8-D%؃QhJ(,(a)hb_="tuF]) Duk&s‰+t99G]yiY6oUKs 3uw6= RG%I?f,^"= Eǝ B5S\-åDeԻfN(;B7-ƳFe%eZWTgĩJQʚ@1&;ާXg{5Ѥ 1e"!_j +vI%ˢ9gy)d*}d?qa0\7}D͎Z+LPKGZڣųt2fVh?M y>5>Sg@qWչNLMN![ҟUtn' ܄.*|6Ҭ7RnҬ w; oJy os@xr0{dR^c-=/Аr Mbu _juW[WNUq h g/ =|[uX="Z *._$R( "!V.>HIsj3', pAvxqͺϼ[ J]Wxy *Yk: ߧ"zkKZd.ckY{23ؿL)Ceia,s\1C"-V1]"B-#l~%{:YDDDUD7|h^b;"؜c[yV0mE|(&v?y#~X(U>88#59Molx&otފf6.~]b|4~K\W+9P*B.C;yd K6΅_"r ҵۓGr_O5p-V^O7'y@"8zZ'|*A+s#=։W i?|qhbL+-R ? >ב"Jqסc76K٧37sm8n __/SRMV A6ـ2lMt]$C8sp{_߅.F b$뙛qKg82k3v_nb9n*t$,"j:*21oj28Xg3Ebe+T<9Vuաs| 1oU>X1(Zk~5DgDyHBu 58ޯ*ZҲ'@$G0uJtn|YZ}VOlNU2<]t!t;皰센qs~,wۀhclUWM\CU$7;)>\;:٠8ڬ_+7Ý#|)Ks|]m㩆}1F1cbttRA 0bL)w,vJ-WoZ"PS.*VbG'pH"vD}\ҾF/<,5D>,_Уz [}Kn h N@P{==f=zYw.zK#qZ]Ab5\}̐ 3k5RFhETgݏ))V\Mv.?2Ϫ!n?_w?w\>H1w`]`_PIؼ[a= ,kwhwH\`R#x0ˁx'`> DTN5(Υ,B2[͑T(R=fȼeUei!a)%& SWd{0 m/u.e?&&0$EUۉ%i;DHrlN1,.ݙ$<$8k(Bcsy\s"2y8=[JTm6-x_\{>¶L@2C6I>"Gc-tnʄnӅ9eH[|5Vk=^r%ML뷟c>a9suOGȚ* "RYG FQEM1GIG}DsN}A;XS/ҍm?,sU+d-OwK 66%!))!%1 %_p74v-9[ܫJM _MtFT.'(Gcfb؁WśE{]Fɠ 5oY Je V=[`*T*e%Izjb|bS׼hA9P烏5 PFb}F9#Q;ڣVپ+Ebh2DvH"[t8Un]IǍ<3őXDܓDʍx,.2-0,//ͮڤڦޥO.w@OGKcuoAG vGЃ)F%- b5+t\b?ӔL};~Vd p,dx<%4Nl0A:4ű1QHLkLkLe$ `C=!!>.}bc< ,n$ wz٫B I=+ȸB>zr] ~+6>[;F=qg~fpt%bn]w*n:K4Ӣ~~^>pl#@':xV_I\WH\V7\ Lv5G[ H =PkEw$@:@!Yױ,4ݦm ؂jP .]/{{,Aus!0wL0dj=sd# ȹlnZ/r`nqẐžyWg4{>E`PD,-в;=~b2x;S_NjsF\<:69y/cjP8 4:öĵwxfa7hSjvO{!8lG/%mv`oF r)dhN|Pjkruw 666AxN+y]fF- 7 Kx|n=e: cA.ˮ wGBCՊq=]ms"7V0y.`&:c}:2(QRcZ.$uB`s̺犣b\hag̏Rj˒CcW`} {۽ގPO!y˘mS͸1 og 0eWnvω'#]߇I?B~F}1&^e\RRZZ穑.eXFߏY|0ŵctvUYFtrobgǞbJ:aA~.bŰ4 (/0_^|L5+>@g:AXJgX g &r >NcX@meT~.G /\kx+ eKEEEEIG2߽kw7+z&. Vh5.Iҿq m49 &ß%.nN.:^1?]cKZVHv7|$X'gȓq.~JX4'jA/vy)q & 6<ƔEhݳ^ N W@ZbN1e.[/Yq6MT]N9z*.y1ӏ#OF^h_@ Qכum˭"MK5RKeo긋-< xWWkyGq6G>e MlvrWeSQng#ܼ##3^R%xJa:_)Zvba-jD߲2H:"RG( ߟ=ՄZ؄'|Hm.+kG׊G])kZFO'I:p!$Yަ)pu`䲁IGhA3y>9 )c[Ӟ~yމ:mm"!)?43mg}CRƒG`c>`HG1{q:Z9r4e? _7]tz!9A~6Yd K߁r;N[D!ry|X.VI\V;̗LJMn{6xz-t|Iq& 1+KhfV2nBvQw^c[=p:G3HBźq~JUGʠJ BZ ׁ~ނF նqb3cR$>ʭº<؊q^"2)]A&%ZPelik1;{/ WoЎlnn<};Uu`}8Q*rs-my{MF^i2M>tzy{`F#!{ou{crBa! 矮 0MKܴ^h| 3{Ocs~,$S,M:1G{co bƢ(`Y3JyEn%e UCӢ%;H5[HJ1F?9J{STm:+ ;);d𻉛J;%dG[$'+38\*NǿPyb %ìJso֩DvNy1DXjH+ܐK߅C&8S4H0XtPXa/[{e9miztu 7' +Qٖꭶ[>Rl< 0ϊt$ӄ)K]`^]͍g>R_b5URP,ϧryKmmri`~0~ fjռ},^,[Ͻ̳ķ(r* 2}E.QQ揵ڛqhg ʎr#gq#Uo4H&PmȎRd]?Tz.x*s3Xw^a^*C4_} Z4_өN|vϝ;jooSH᫞a_2,?ځ,ە.CWJMCĖ‘_c"fide)cd_nњ4Pcs| 22 sfC >Ûb]}h9_,:Wrl@*(UJ5FB:`Uê=(Hα˯ jZ~B'X'] Gf)!;xՇ=؏Ύg͐[nH;~?Gpt\?Z7+u^^8t'p{[w97in0n(ObB8]& (wW<[yy9rԿ0U@``?+ܪc|jA(#ܿgQ(l <#B]bKnLME%a)Q_b^=Km]Lb^O`܍c0Fl1[*9^yP~@a)_q!Oi>G})]{%Io-p5xIgiMYAFsh A罵"ѩjtO``9Oa{L\NKv GzVǞR= ZZ ^i_ÓbLZ-zҫ8FIA@3du^ nUKα* qLs`7GpeEu~jҘ"yI>MƃWM6~~6b-TҲ bݚZ7+uFRnؤ)֯QC6 MXMww$&jT^JD,Xw*EvN;28SA`\v4缯ׅ3Wp\^/[CPûjٍR\1?C~DXXۆ؇9ENgmjaijl`k{e;nN3l}魲&LT13,,:w>QksO_MxWKMC $yG DZ*L#ì;YAŲjXlV|rRZq叓{~q;w| ȵ (JjOJu ؓ_֟a'_`y^b];w)/dyVvۭ<O'B-M:T6>;?fL򍷿zYQF[p<-( D.ٵ'< ]J?tXJ9+a2Cbd1xgw*VWpV㗸sj<; '>yJucͫrJX̀E p X g}dÚG}# Tg(;=L볏#O2rHwkk'5}OR,mUs(}X`2A@^'š1Q ;몥Hl3*ьN5 ;AXGg*UKyOz,~~׶+]ixU11rnWe!jV572J}ӹHәMg"ɗz( Mo}c+,%\htp!}ǹx+@%TL#B*ƿeK4N~hiaLsFFٖ&gVp.Fv_-BLv":0;@Ձ4:a-s$5:nU; *:͢H2@oHޓ1ge dKVk/إ757@k+$?gv(6+~*i{[U)ӫxj:Yt0KY)phknq|ridk_"^&Y].F"A<bTd] bHtX i{:NÏ8Pz;9 ]6cdXR~A{͂ݤcSo(ٞbc+;S;ӻsz;Fw$=;%ߣiX39>y iC<@t c *_74 UtiM9Ȫ,(ϴ@kQ=d?pKuSGlWl{`;ou{<'I3W;xŇ =k9@HeZ!}.m~ȍҤnb#)YLx|hұHq H,oUg-lG,2$WZ7ӥ@ 9}ȕ^J ׃. Σsl_cF g$Hlf~K/ԚOVvۭ<@$AXI1Eu~W3.0椂,rd(,KN萜եif s sx8_XE(kc򭝻g+T{$ '8b#v^Epu4eZ$iu|2MLI>0ahnɇ%eג_6=>MNdoیkͦqk̗S#A_JH IHIsHs HH H H闳%L5𝷱ό5cN(;cLStswjq 09xݏ>dm=Z R=)019.'^hi/tل 1%+VEN (3*ߐgtꃴF(t=>>!`zZ=}6Ǻҵl$h; bZ#}>hP7zAJP"._h nƳ6#6i_p{Ճ̿e&PAp求v/u GiZa?\2ADP#h<\1b Ca\G3{_lQ,Cڔm^2H;(Cy׾n649F%5"s m]Z9vG~tr(:[#]!8©B}*Ik}|r?_!vmOOgHHȓ'OpNNΰMMMDDDJJJ7?ol," wf,WL=\g k%2oU똍Tc䔘k.As40|AY*<|qPL4jplsyT~ sšV'/.:m3 peݙB׽cE\_mUu] LB$\kU\Js\p!behBlǂc}/_ # Ş8歿_CA DΠ>a zMP@ՁDĤ_.ef+}dź';|]YMRU_~TϽEsftD[^g5T)(RWְPPi!}Uwɼ5Ot|gaF5OB(S@PezTX/D"]йOGg׀D &3jW Yg_tCvT) j7 ,*BjTok}1:hzyI+8_=[\hYnX{]!ot{TJ>O?69 >utA B0#[.]Yq.M3ο _61[QOҟXR:OUVbnEsޗ<`JȢHޜ|Դ_ùo_4E3-ѩX1v1Z:qQ/'|'?乜8#>N;ϳvU~J,fHTdxnEH GW)t*[#hf6vץNP̒lɜu9 T  @_G sX_jMuJhqt PK |nΫGnN[ԴP3#֥U1Uzfcs es|'@c[\_e \BÆFH0 Qw6{j MCl|W۹pyT;7o6 򚘘oZ2fla=e,{w)W2p9ư8VO?^If9jV㾧Gh&%I<&WT;>$)ݡZX9'#űT څH0|yv[8Sh?ᗸ-vЭ~x{ QfȫADG*1,a]fpǵG0$N\WI*ʋx.mc#G{/0#(C"e6֋&0΄׃u n9a_t}Zlj_롢~;=1}K^hhe"k.Pn]";^ٜ A)\'gm2JF^}()B>jM\/Yz/'Tt45/-wD5]R hfz|c7 AOG+Dx/؏xF~{̺9δ5#:Өޛ^aѩ\1#ٶ? >9|akb7So=;J=%C'b{׏?WIoo..m~,s;t.GHA"L6nGw<,& t5RTS3~,lbpZqNvF9$$.*;S=!uqʹ)*IZ15ߢ9/uP>(Q:ʠ,VELo8a|쪺?Mx@ ?_n_x[ de'JŻsAi O@Dף?t.0'8V{Q˼u]Q r)R- sjy =`B٥<5;ZDX@B@Kwt3=k(Ml>T/4ʭ6RX7 کƭ86$V&Ͽuըyc0x/o dO4Ɨ`uoRN~CEh!T%N vcU\'= !+y+۹۹|葫kͿs#'OldaaILL'űo>2f9 QP@oXy6}۱C萱QbI ̒sQqٟQ"w,a;S? ڡ9\ #t!r2o5 {YFyʓ6h^30gmʷs}p]{~Aa2Mo$2wbq֣y3(Ty7h}s(dm0 rl BDP)HPIA%<ná{kIi4 ؃~ZEŢ~j[b9 ^ *^[\lQ-+nhC@a"@,%5(j+@ُYUB8zWXߐ( 4%EG T,B/:*J$EIIPiCcfs:w=?揽?g_ךugXmH5s!ܡdP{|x@0d!{#!HhQt`n=Q= y˪cbP1e[k8{wVΉgHCiC`u_".Bq.Q.Q/P#ȇm9gޥ[\y?6~{om9 q-6,9#ыA)}[rM̊3 yȋ.DGʕ9݅Sp~8}잚bp'Z PBT.؋#Бg-^D*~$rJGメ+\k])P(TI*$o⇕I\g+^J.UP5+aU2sˤ/:9ր+Ϧ +Ľ/,d0Ɵc)h֩:.lAnrGՇ_c0)ܰFg\=Lvgyzq}9'BR5-kۯoBH NUmqDhtz 4H9@C,Tj7knff8xWw_^;"4xx82"}mvqIy:>1Jz0i%'kj)j`R+,Q%,_/k?C`j:FU0+FhZ\Tj6l9nk(njÚ%^~Y~$955z$ NWnhzW"T^!SUe^Xlhd멓ڤ5+ub_&xY"lXc+WS?|e2:]/^Pk͝w`rlM8/ʺ2vbrn EIfSceΔurTIVlLML^(to-bo/l(Ğ]&dW :5>4s?q9sp9Y_/xeGYDYEYG*T20Y~O5]믓UG8X U@5 h*N'h~T@鴊jr[w!dyVR[28i{nvj l l5lecTuL\V[F}jrYpppp5 76P/7C[Xg^wwliW)1Y u*tױɧ{@1?ÿl}bd-Yg JT?- RĊJab6 b-&e1mrPM+?|g7HSL?;:"Z|03N=4оz'qW u̜|~Y~`*qy :9Zm_}]n)jqi `Xe>G+$[ ;4Sjߓm]xԻ :9wܠoӀEzZ|\|~:~iGD D E^TBk6F7G@CRejOo[svvP(⢫ I7yC7ѿ9C @] SҊu C "@  _s$:K4~}l%՜E OHfW);7k͂Kefs'M|FG,in-U ol~Y^uY#GnW W G:K!Ss޵X0\ C'7P󺺛&"XQ`~"Sp"Vz(T_])ѿ< ]ȯggϞ!###`0[[{aaa.HFFU@111V[kkk!d/ἽIHHkf#7yB /_T%dEeddpЗ/_a#QΔ9DXslbeKX(pY`6treA2:_(]@ ~j)RE5lm4}{x:ȷ!Tgd;6SjhG_msXw[_PMvYO\-_?&w 0'ș6Y8G)gJ:N~gsoBfso~59򃣷LnͤϹݥa*QS;;OqK;Xv٪s$bf5hۥC\-&ǟt.vkuLj4U265Q5/wdtMPqHE 8О*z}NP/Ot 3E2¹=ؕ\ҬқM]j,kl{~88Z{͒_4cBiSq52y z 歯iN;H !hiW_2{X[ͻ 5Q\9d)dF xWfG8ĺ;DxIfsW>m'ǵXeC8,+VN<x8,VTl0d0ku?Bhi/,lIh0|}Ҳc,@4f *}M`Fs+gRb .rhʪgӴ'TOViFiF*z8b۸?TId)'iuFzZ:ؙ[|7focmkfL3  F[[-t$ @ $;YkVߧu$9U Qkkk al/驇eee̺qppL l#_W#oii ;haa!**kmmǏ666OFV(&&,,xC7!Iw>y3I|7`m~qFX/%m(wFm6qlDXh m Y@{ sy䃞EŒ-Clc=sG\:VehyхbA #^&^$na)2HvHnGziגiWIL3#c4#l##CI?0+jvv<]EN1( $F@k@#`(4jF{~k5s&W(ˆ_{>MTs յbco[IMSG[_wΌP6O_Gh%V&Az2٧S":d^32Х1D?c b{c$&=sD؇#"MK}mM5{co#"d3'::  ,?ӔtD(99yhh(;|Ç\}o?SSSdddOFV咪{넿͢@7P$L.bFg^% #O<'XsƐ; ̔S%}.s&{"pdy -LtE1'bRb7q*6-E%|]~=Ke%N{nu/{AXBΰrėt2ƙN6Js0)oRX`7F95ov KjeROxsZVM{tRa6v)ږkm3>+yE魥4|/^u4S/8Z%s}vLZ*g;R :2HS*i/~yV$"-&8 FV .yWzqу0(gApda畹ѾVŦgĖN$Y[picaW'(tn!hJPZ՛>-fՏV>)yY6a6Rx/ lW0O.b'_{<[2{0}6vtc,jz] \ Czq0NQYaH5Cme<B )i̛tӤ+nPVŶζ?,hh9[nXQU'4|h~[ޛPw{;p%TQΐW] )FNSN*.n.~~_dѴo;EmWϿ 육kkXT;;rB;uFx`Y \0m *&TI6xZ'C#M©EnfVGhvg(NxއYM&0yɀf#4o9 P$mtVUCs ;.i&CSRSML҅+_Gv=.N|p9Mtd swv\ V:z1[e$hPMWK4EW7)tj*k>IÜ<\-U F1!lD؋+9H:BV><ӣm|ıvJ>;)oSyJddd7k?$O$%򷪬|?yu o!P2`>w3KCiVG{ w3&z%R{t:8ʨrс$Ah̆1B_4x*`-CH'gEސT˕IҡƆe BH!96 wNՄ`AHZ.Ƕ+iBmiU™ n7֪Ilz]$J̙oY뺘kW W|mVu3+w/=[1$iO9|}ۍ3ZTwCXfVvcۇW=Li0iG,"Z ̘>D9O2S\/= > [ck!- ۿey*w'~k`6)ۏo_ _`QW+[/üF$'I8am8WMTOtX}ĮGh0z ylTFwuoR̬E3H)QI71wpw)[3gLڶء Q*F/ ԵK杈 ^_H'\*E^j Sa8n ~ /QeyVun7aYPߏyh&qt,>85;IT\OR n 0DcFiso/MOH7ȃhǘ{8uJ :!Wqaˆ"uX+{$2侵V;)abZ\P2'EKL}Îm\_,wcR,N o?} ,-=lw]b5kJO==?=)9>^YZ4T{&ްnn*:֙;ֱ=n%[I#EH{VەUʞx8 SɆH.Ń0I%n&8{%z9;x|F~)j|1{tIvJ}t28@E!0@1 .sвapt+Ls7xGLn;Gwk|};bSBo_n:پ}s~LPw|}2DV4s]a{owügGU,#t+G* f>i]ZxW8y5dsjw5xT/~&z[ߝ?}?hea[;!"Y? 򳵱73.1 kk QD ] H" Yo23X &D j-IZFnjeȉXPYumg+E9_۩I2d= &tNOOznY.Ǡh2P7}[˂O2 sMֿC*?H^ȔMQpU/ٜ 'l|ִV-NUMJU HUuHU4|o8JⱅdiҘWY=ZmR 9o[(sg0S-t~<5fs쪽e5d^kSkXQFR~ޗrh$w§񯞽`f&FƃFj:pgQDp 2'Y:EH偻(XpGis q'+%IE5psu@z3+\s#}= *JTq8 Σ]S Zq3}?|URHUuIUMLUmLiPWV,k>mH R%;*#8Y|HkMeYI5ͅJڍG D[8.Ǩ0,-/w^/Lzx ww0 qd];4 b4t䵆7 c=-U7 *sɴ㏺N1vpVI;d;ߦTSq^_ gQh yu#P xa S׾xa &C" %k! I}*lj6ij&z*dw3:j/Jљ g5po>-%~Z@NJxݲ[j Y`9&]!]`d5no>^$Z3:A! ;#Xx_DM/*M>_*Y<8Ij;N]0m3o3w|gm~+{Ykmc6CK(Gv˻&ǡG8Ǹot"G4jyI%Qzܢr~ez^/ɒo}Wz3IJbz6ic{\əɷeޡƻ'X} d eedݔ=`'"5R=T5@)qO9Hvp_0LbpI-w |[Մ;TwڄJ3?g~ː/B}<Νf]a[jcXZ"YXamWLuNqIWɋ˖ɫh54M ({ 'XqYKIҴ04ij*eJCܺۤAwTm>?Ugϓ)M} KEAÖ#@K5胲c,CRm!_4YL((а!EWȞnJ'xدUQ i_r>5N!"'U7mpHJ$.vX3/mhmů:'s"{i%o֚M>ώ0QNx-*m8$p*;,;~>H.Vk5)]NVm׸R)emccC>2*a}?7ݗ-G%Y y]xo+q'S!uS'IPBLD- ևkq#$mB|th 5C)Clh/{lC"U;1YF*0 XE8FTsJ׷r[T*H5{}ulE8KyN@֠z[", 6L } eB @;SZ'xeꌲr4CD B-^čzQЯlrœêHA`G]/QEI!s5nz|5 ۰^0l 3>Ea?1[/aIagñJ5HF>Obv?1qLc6,0Ǟ{xэBO/{FI xU{gTGzk7%\#YPa((Ϩ1d:2 v[c%p5K3G8OH,*7nWo^鞇9m$l9[{x1>tqa"> ۗ= tqg.vg.Э\qc1@mAI?07K^ZA_'m(Z}J=%W. @΃7PuK4a\`@=_}e&,DH__ j>ސ yF7Hz |2W,KAxBM6F#&h') h,[N8գMۗ DWaYDdS'<ǟ:>ӛ𹱆;Qc΋kt(>ʴW8?Eviugc~g8x6X*}D-}8Opl Bc= MYNqI*jD=BPwUB-H1gUxKYdO ݢgg#ǘ{l#BUjcNI`uΫ/qaM6Vܭy,o#e#GFLhܰ+Г!^;d|3zѵ#.#)o:(v,pː$4v~ahsWCoPfgjqJ 9^&ig>p3=DGD-r1l$(,R3 !rdh3m(@ޗɾBR'SA'1Ӓ5%jK6Ҫ=nJᙊWKwv7p'ϰ:.1XǃSV:?T'j&yVW6WVWēR}}0)LRJn2~x"fPnPf mP%T)_}GӻV>qڄ%rEܾOM㙊 sf_>nWI|uE^9hokн3V㑠u &o R ]Jp^SNM\cp[9Ow)ݯZx>{fO}iǴI4eK] Xi Ȃ(¶f9[?lpw=3] ?e\gP !:ƞ":qbE_bXOY:4V{'Jo>h(D&J1>MұzzK~$)1ʑsa-}w_`@34 <5@Z^*+:[]@$pC7эn?J漵cOR`rXFHrTAbmwܔ7R?pVK՛Ru6.ʚL_@ !O>lW۠]п?bihyC[۵;TIq&3._vv<%ODwǞ։qSJjZ~axP"cҐ/>%f!.Nr^@r@(=.v\TuGȶq.JS01ǜ8\Ɓ5?;$_Nt t5(gZF96 1gc%ʸ}BλƠ?""5mqCyr ׇ8J'D+/?Wgh%(wL]2q`3z@au^FLegwVtC/0DPD2T&O&3*rreGFwG `i&;Ǫrq2@"]fbWB>U Fa%ϓ٢ ҹ-ܵ&y hz)hɴ\j|:FrYkɈe0!X?Atr3c6"O)Fvh6&WɧI_wKiu%TdĪ9Iz<zMi'8:x6[9N:Xýם=+Mc JL[y:9·Ɏw507mSͰ aQ/Sa2E6193*`I4{ C}uCL+^6o+ݗ/`*^"RޭڷIl+>XE|e) hlR>$S pt9g_6qS=`U"L.|zlxyu`\˶+N$B½eʦ5;Q;d{$MUƖE%suͮ|UG >& GTFhĚygZeoy`dRAiCTk aeTJ㏹/H}[&:ZXjxؾ 1QH,S"GKDzLScG/ {)2J!E(El+[dqn5{!SL9UHzң] cO|xE],5;/KĞi8oڨWg 8y~/{DlsDwpymf+ haTh %//8v!eCT2$d**^+r z;Q7CIGZ|Dup]uTG/X\+scauPRh֭KTw }DWw*3ĝ>G޺u@p~S~5!|?}qdojw\Eo6H~6qȟ3~#?omQ_h 7V,sI:}$\_YeCAwOf^Rޞ7n*l[ax^v,=h3LHHPP E߶Z2kZ/z"0yefS!pDc-B# >z0f7y<ɓëYo$;(f 3IfW*=~"1A/ x\#;dj{mX/*% W[`]H<:fHU6XXş>z8>>+8P)ۗf6n{,Ձ[0j Mo't?s$s8r`p{3,~yuCD]S0 @?NK T)p@ۡ!0G [SIqr `E2|rg ~";}2%נ8j+eXM.5T]I*5[Bla{ ӌG@`ޏ]Kv$B. w\*BS>f-ZCOtϧ/MJz[RUm4_iN9߲: ڹGR!h9_M~>\F}Տ?{8J_4 i<:hXp<4^#%?qY1 .4%KU~MQ72OF^ -FOJL 1-Os- n} ^a1nC}I{r[`LHW G _gl}92UhD}Zj=/H'wnlSmQ.n[޼O4w3s1wyb;5w&  9!94ߤ _bb_mzUsi@?u&zKwx6r^R 6׶ fYq8+%98%w+Ops/ Xр-0Ah@Q9 GH|C|h۰KjPY@Wc3ËȒsm3(Mxv)ߙW/g ο*$o)%$o)'++)~X4jsښR-k Մ(R`lNԋKހc٤!ܺs+ [O$IUqh˪lMd9שǯ-_<4jc3ق8,| 0 hI)T~_ 헎T2;g'|teR$|}V420]aq79C;=W!ݐyrq=uuѵt-L鷎qudxP` <[j1I%R2#PgϠz)'5["[% KނZ^<f\o; ?5hupO&vԜnQ>-)ͬ3h)K!+z9`?I./G&'W(;][sxxsl.qE*eI`U1o H͜a~zۘXy* 5<r/C WڌR̨^ܣ)5S!V)\E3`5{|Ab$WHXtSKyv罝17{6za&~  <<=RsENTvLwwz܏P rb1z7H?4{wbpBɹ#y\` 9l!{YwZ'C[ ^-#ME>2xGMhCCd&V41IUɞ5@qHU7ûʺ5Ltks3A+'-0T4P3C۱9ԧ>c\ ?gMnS.S ֈL 5il!7p| 4pPNPJ V&lnyK'_D>4P@HCp B(=Z{ק{Q娿JntqDz֪~*|CJF5AkYW"\'mM;5k4;47 #MB틽]]=~?C"1g HD刧XY },/zQ0꒕=+Z(Cx) fv0[i,Qν3qڴэBt ]<̜\="ռ%J^>Ɵ֠?gRr!RB~KD)uBJ,nFF7 7vX}ߨ]5eδ>NNA5~EWBJ#] % :;(IC2 i =j!? "r(o~I-(rdRt]9\QX*7ɶh;I*1"?+n6kst͙M4beO3'cǼYBXbYRMLg3e2.d{Dxqԛ6"]ЫݎG;[+۾A>6.m nI^|8 ^/Q;4AQ|5\iQ=sUo'@h {mHH^zvS,ςƙhV] R帠/4 G*뎊YCe.ZzcGdtr|veuHhVR}hlH1go?E.PZ@7GcžLMU. -d;#lsMuEE'p罩T){K]Mt/vAGnPgl 07 Sc%l?}Q7͎bz+ҭŧ ZZ vD'"xjڿ\$ WPo`.\2*Lxli(hL6~ aF`Qܝ=BycfOXN` R7%ϖ^CKqfPk,֗cMŊEDEIAj3ȃU9 @1kGmp2"d`{kjQxN9gwM=9զqjҞ3VZqiM s s ssSsOfVLdL hv$/9G]iVA?usO1Y=P #{5L/_Md4xlL`Vq;#aҌGgfgEEޝ;wDž#oBzU1a X>P3Scam 1B(# 8 Y5M$zXqF/ǣ޺lO(ݼXw:UަtiW]}VF]ݚ'}&*Z+4K^ %_佅Ց2Bd)Poܯ 9 PXT^E`gg?\bL:L M"@a|~>AdVwXrGu6Jm^ne'ۼ;ʱ#Ysi"UUG#|Ec*KrPm%cg˼scZy"Ӓkpړ$Ho!4օ?"o,10Tvǃ}RF;LztcehzrLAJdƲ5c~جydaB+-Ĥ3m췔a&I$_oWHQ뉎GusDIۢ{Rck<EjXYճ­˺?/¨ZZKS\Vkr诏zcB@gi6i&h:ԭWW]H +` 蠱W='TO_o C>mT =ʞg.1 >o"\XM‹ )9&o߻?I޹w0 'Yވ|{˂]K%Ӎ{۸[;oRΜT?TZ~{‘{A+N^Rɰ^h웹lج~ =U'ؼ%u^XnzRBC;}/68% = SgLg/ o[O[fFGU)޾hHVZ1@DB>}@͍M|RY6. eW@bPa^aF\bA#}Ihlf3*LZGߜlO]Ɯnh ġl$ffثlIeWw9 y.U*gxusKm@* -ʠ,˒vǠ)=k6HS 2l-v 5*s7f=#\5 )667kflZj\n shr 3KR]qv/aŴGi_ D_ z8Roߝ|{D{FkVo%<4Y%?f> Yy2# Y}#Sk=Nu,Y-C+R>ӿejMdX8Aq/^73ƫLXrk8&>-y +3[hhaӂ*D7,-Yџ**B S]я=}YkkkZZ.''_-,,HIIቈlmmݿ!!%{.5s`0YPPпt1.//*GVyn555;7 y'yX& b?A]&Bn 9[zHgX0} $Tw\o_Sp<|$)߽ĶlYS܏,w.e"f  Q@_uiFu_nm~{gtmaݮfF+ Bb"0WD;)[TEQu۳tKz۰}7]mDYbuP u7 ̙,Feu,#J8|"ZR< [U"Ӿ|o|0Oqo9k27K{vk YX>[vwVEF YFeUq1/ 4F'iP%&u@zWmeڶEʆ[GK<3HǀMA*jE5򓃓̛BonRM2w׼ɯw(J. ]Ckכ6?4@=|%0h?^$rI ~W[2!="vjulz^lK-7EFYѱ-x_ml=-/:^ Zp,>S cϪ=vVH omPIu8fRbZdFxVvC(sjpnkKBZ~o_نZXQ_G^;:hMss٘hI^ǹe:V!d sc],= truM\\>CY ƕ:kN%іWW6LSCðEA\˩egt$Áj$\Pc9[wj69fX;FAFa~5~nMctP}+ 6#OCw۩D7] wɎ`; fsA|cVwNpp_^>_{7\#}+Wο=6:Z94v4,,u܃ڹ};!WVPk`ѩ=N$_[qI[u2$>[~@q TEѬh&4O Z -Q<|||$$$=yȬ{zz^#_<<<v MMMל @̮*ّkkkPwrFFF{{{!!X>еgqq(ۢ6665u;}󬭭kww:u ywdUDbR 1HHAǑAH:wɎ׈+'mk<,2<:B[)>:~z"1_145RƘ8 CNo8ǓE0øUzCbڵcLǴvȎ6I!keR"iWtFJ*W[{It@U°4ٮsoо#][c7D,,mT8=;6ٌo7;rIwtCm-Xw.Hl1xOrv~x1@s{ b:B'ZQN\=|s|liqv{ 6\$1R(5ǹ|{pyʶ鑿yږ{؞0LC$+—$T':#H@ [Έ{Nn ߝ~ /4{,2[Gyh٘!Ŵ/qcIt¼ąLv$UkƳǍ@ CΉCNIBI!rHHo7. ^. /2Q ˡ^^g.Q|h}z_x.we;8v.Y.-? ֪5p(䰓`pMp8Cp\FpÿT}ǁBJbLh$:h%=bL0<\swjfJsowyA]ˀh$0 qY`/Uk@"C #e4~ DqʬM]ɬr OaRH/)RO m(Y}N>KݨTYn@O=K(.˜jrjt<%me9G86f\XX˾wtttSSS׬x޽CMM===oN;233s]-ynnn_5;2;;{C7! ~N!T^A1݈iyM3,Se➋6Wǹ@*AA1m 殷 GA'"k2!?mTkŪ2-[:׸(g$=';dl~3&y^ }yC4ܶ=Ofz 8N (zVS9+qo9e~`sYG+0>h-Ҟ ijMư4FƶB(e6OoRݹDndžb<[tmť:3QƋ!f&{ǁF+wAځrƶbrJʼfm_VE"S]CL@Tbh!Cu͋>y?s`"a8V! oes9^8]E#2Prחy4Sa,ΥƉ/#8,3yV>z=\7lZe&4&̰od6% -VnÃߓrCDDuZXXX/kd[?u]Q]H<_5_uF7!dV[N~r@t vїU򀅇= T5 FS/&e~+2Q+QGdLe-x'H#>GNTbP"5piR&L}FWIu5bu5eU%2E22*F֭^NÎ1"}eϺ-0LOlru_Ԉ@ʤv e/&ͩNmݫj,Z}BtzI4WfWy/k42eu`a8v޽ ζ~2XJݸaʓ|PV1=2Ue3">TRӪ"+$A_튿x-Xޱ:i]S8e"HKWwC`TavvJupVY|hlAzjpCTb5˯2)[+?I.J%vH+de+>ųAaܙjej+Ric5E FO&Q1IrEy3&|Zt JTǴ M3OOOp7)K*Ց43l&Pb-7@&,_2T39X/H)!M4J+n%qUwM9|Ժ֧X%3xloyPʦROq]2E_+ԔJ6dZMVD{ >%n.0ˉTIVPMT)^oLl=rvF,VatMzCɊMYU}y6pr`$ZJEe~rxp@Ը^չ9y͙=@&?QC`Mз=o[B˿dG:?W+[p7(q~ (66I廎 gH-5- o6hq`儰9`n'?'Ar/v^-xWGoCf7cH`I6Xle"۟vUn&d3" w59W=JTJ_ȒϕWվHu]!;'k ˵+״rUI}8Ke~[_ |Ccpݡ'/z<lvˏE%3;F) &k!RC=?%s;0Uz1X7xsxt`}^9ߛU 'Ojj\B<pe"kpc}C}]wڈ7uoC, ITL`~UoMPu*ޝ&aU_gu\ B*KxLzy4 JD`% px8v4; 3_uPу/ @$@ $$H%H%; %{w[.pki9q Uc!X]L(75f=_pM36nm/VM84}Gvg~֫'t ]Sc0QwIG7Bhp >vP{Qie½CP߻T஁q [eHi]/wa'CbkמMoP'&nW@ y1x*kFNHΤvƠE9,^- ,e?o.QYL6G79=1Oy0y_3\=W8&[Ƽ̕h>kƪL *9϶[mC.^#V0pj~4~PA^N4gGs}tdemi G >cn#QZhI| >:d> udZy 5(QQ>_d%fq~o{'^99ǚ `0F9v 2&t hs\s6Mߣ"Tcv=j tN礍 ݵ(ib8%^\6=G; ط`ENَ swv -r`k-Dc }P`Wڲ<>|XZZ@ .)++DDDY-$$@.1>>.''( ~LKKzC+y޿/~KXJKKgϚgccsًt_z\}TPoP]P~PBrb1HY ޗ Gi m2?D {]7P`gK`R/*i͔Iyäavɚ$ROB.gC_&,x>f (%/V~?s@>PcmKw<޹߷aa[jU{D&IaQޡSr+ gύ-<.[䟩Z>e* wPnadX~ʔUR*y;StI 3P ngiwTԧY5u%ŒSEڳ~oKb /N%;Y;r;ۚAfn`g=XCHӐ?b*'ZFV}J~`hYA@|F`Ѡxv|JZ\n\nln̠nnZڮBTNwL%>U61)>B=xNVgL| U%Lb-1,V,_&5/C]@:X%Q3O9{F.C"@fnz'I}\$ٓndiR;7zB}J~:G=G>Xy p'6eQ2L ]l-`- k;?A|鵼i~91rAt?±6 pc5gzlb6jfU 0i&q{Y2J<"eD!ߦ+BgNTjЖ;4H.XYz@UvTo hBxӾ[PڌM//&!tfz9g/m/z@KIrSts~Wp6tq+)YO{MA4:&i,6.QSV+_%8QR2d>5j;Wf]j0j de :A(c͏>2>Ƣ&Ձ ^]st!}]؇[.3Tcci[#]'ٞҝ?n54wz(r=+^OD*5 DE s^gMKE[wF,{5Ƞ3[sd%$^D:akn<4M(hs憰o-;M8+v~j#Y'{?E._1]sʌm!fu~V#..h;W5_ղ\a^jatprb 8Q#]b.W,(\VI.2L "R]4:=$Xhht WG(W WgיG_!*W$y3e'S/'o._&Z=G^/E )#AHpbc(yOVu^,d{sH\u˼%6/+s/֘坊'"R/Ry'b{.F2.􀘦@k #PoUk Ad;n,M3K$21!A{ckЅHw7T '8YRqG%6X eޢ]x9$DN3y~IV&'մ;>^;Nv㭁ǛS7>8z gDf$mBSxBfA7͸Mϼ Gi\E]3ѝLeFpJtLD>S򦹋;{^&-dõ9i<[{% ob 'ع ^@ TUp=LCl陸ʻs[ǦȆ%>ƫjk'09Pz,+:fG[~875Dn.fόmrDx0a/7T8D̾ҝS@0.P#& >CraJ?q A8 d%;5(9ۜ"'xd55: ?aA ! `P-9ygّĵz̬ܚ{s>ʄeCrckq? ߮ΎՕwNҭ?=^nݟ9:T 6Te~91I.yYe')Vp HBsFv:m PwV,)qT5254Ճk݊a}tf򓦒om:&O+k斨ޤL2pvz8ͳMO~v{~myEҷUkURdB t4ݨ*KhsQ2:[3\#}3Cz_^L-wmPBgߜ|u3"z YUTkW|DŽ%+It_؏7Y pݵ ?@Hrab1}oöG5k_ 1&>Bjc _궲בE"&I 0YR ]p /` _FWw3G~;{PsS}ěo%-:Iq敶B# 44TYedHhF[༂asl+/gbߌ:1g&+w]BTw7#jVWUeՍ -eELL,-;6DFǬiUNtv,Cxp; p^l7DsDՏ}:!oͨD:;NT?rG 6L=#tZsFNo9}#C>!:;*C*^p*-ܗh98B%E4dBV~WX'?!͡ݡӡ˩3Vw1y}tv{*R.y$)vK'h8jy躻x;K[n[>y򻄹*=h~6H3Έ}{0D3;E yTdSb#l,mKל5ce7hBj\5Hɑ!h0K@!{^Dt粕'b .󣇫ye:O{/mFD!Q.{K ŀ`3r )q\@0P&,"2&@,Re0I7I2$-&?ߺ V?u촑x]yPxMF6,Bp >2ؑ]Q-\jln'۝kZ}kwOOufJYd `L: ;=PʣiGJ Yr9O#Wn7ʿa9Q ȖO Gt֧fٷڅ/blWo`( D|Zi'٫乛whJgˍ{B' K" }GLiϡr֥|3UiGA`0hH#PS K{?Ӏ@%,M]/ y2 NT)’NU_;YkPߋ6PŵT/=m\Mxݳ\:İ9v!wX~1W#x=gnb T[ϑ_KWOT`,1H 4b6\ ͕Re/Y @Hd7okq>GVxby[s&6rTc--U)Β;',J}))} azqZѹ׼o>Oebr.S.I4_6/O{No4;p<8in9ۥm܆9a.CL)b gAJ'IJIj:K3AioxW=C?x+Iv"r[.gv03^$Z34H|BLhxK`Yw Ոw1vtIصUQoBjo6)ORE~M<˅[M#NWonE͢YMzAO -{OKifK|㔆\?Y x;=U߼3^wF o,iʞj`jly\%Xmo!;fp֏lPCcmS@ :QN ?.t.GvB(&sDMh &> Ms>/~՛Um4S Md[|B~w碃`QiSc5C(KmFAX[gλ$@o2U u@a^)ږ9C3I$q9ݏ+O,;z+IJUk͐pNLi2i%=l<5||džjD(aq\J t)b'KwuM' w3L=ظ^rkvʭ0 \ѮrOjeǰt!1?y|W,27b^'bYDzW#YouqNP،^ V15Wu\KnS [exͱX/%niJɨRR2?o[UbVЉdRP%>x0 e/`S{i{t,j a$gvlݒ&]vM.`dK[/?OCl1ĉ{`eɊ|`2'|*l(8 _KkT;"G:6^Ä՜ >=[*b:0tz?T,}\}l} MCBCtazKa5&!!6:^V$>HZ[y;z nXVEig%).*dwգ*BLm"c ?% K>~Z!Z0V'uߤѣQ]0 e|; o;9au\TKՁ,I- ١0 \A ٧ukp,_0Ntvo<M,$"*ض۹ckb0򫸌kPLbİdd[Dav\0O$oZ_Ypo[}|j:7nvklutXRNacs1D*#/r62e;djz+2/2nSBwUK檮nM دu(pS^W[..ʕ<%XS [k[{ҹFTtz?P4Ųb{N [Vтjڤy]0Y.WuXtaT#} ܋uJ[jJDiOG4K3ȗ#^S>idSQ:N٘NS=W2B輈 þפ0n#"bd/ҐE[7JTrt'zzT~^Ѻ߸B] LdJOV<2A3˽$+S]r%1򼡬xIuoa0nu"N^n+m/Nk' 3= zc5V0 }a J:<ݠ[v 5ngY: 8=dh<\xf g;o}pA2{(Fwq{y랱;Gf7-:sFC_`o!hB-LzS=7CU}%sJW$MY<4c&o & ټA{]j?cߣjHf9oq~G^W#'7o~0s}/나~5gtr`ypV>|46q3;:!#kp\~u❼t8a~$0霤xxj{%Ҥ'wՎ? HeͻԬ=sBIʏHHHL8m:-} #n {3QΎ v$ijQzנc#ՍDG5~Ym΄[I ],Hޖ/u  8ͬ$;lӘAԔR4g?F\| I|"{XY"tii3`'q.3rxSuQb$$$E2GI@ٶoQNT+1=8_<'U>l2-bt D:s(}n%Xj+_~i옞=C%i'(oGku}):#.]?$>_A?ABPPzfv˼MiC 0 ~V\7PS|fs-RRtHiUkUTsm;mCf7= bxyW% BWR.2sMXצpaə'ի$1Л4$^=$ Ԁa@X+ܽwG5G%LGx!-3dalkGQ.fzojZ[FMsb藇^4,A[tcOJ*5kNۛdpIbdAvA:A3cb<}~ei}6F%Hmxk}xN=H?4n<8y [CwHhΌĻce=z@ozvUv̓u$~Y푳QQ+/*򬫫yÇpx%ϫ\<񹕈SvdSL}lS'9PSgbm%*Vus ĀcA:),vYR95;;݃uSŃS}Ҵ]̬rU#o7"^-O{0&iUJ/uZ]nSI3wk#[Sʿ7vAvX-.Z;#"0Nq44=4ʻ= W .]#˕ϓXezvqJ\c0(+ b%$">~&@<9=>GJ15f`C~Sx^MӀ5R2 FѶ.zVV`{&<7)߀:j˵]5#<̫ړ:\--Olwo<Z}6LѰHY@86zZe ~%ie7aTꝦ꘦jfmRT(2;L6`l䘢c? wffy୺(k5ٮWQ)8n~d cr0L%/}Ge v^ǣK9!&ݦlK/~If(V2OY,;4WgTM+}OQHSOS KSKSHW*KWhɐPO2- rr41̒W*Si6hau_bsZNVChV#l]xһS;YI~I3Q3!II^qOFmܥc:f^A{  m A|rNx~v &&]ʶ^'hˣ/V D>&jg8^baT7zic9]-͟ZeݎCIBH*yՆg5? VP/k8 du[j^A^̼Ñon8ޅUb@QX5$ )_-V[M_6/_#Xx2y\J9+9k?4cZy6gKE }n%yeV S`<9hn1YwKlqLJjd߄Uֆlҗչ)eڊ].D4V)\ꊅ1[w7Y3qkU<*9.^,~K7Pͣ(OSWǬПiޫeo//Yo﫝eon!,*T]ٽ6qY֑/Ser+չRi`$[O`Ybؒ_|!|ߋ ȓU-rG*d6B`΁X9*լpy$Xl* 6[I%YbQHuƕ秫DGwGe(mW',f~3'nֻizΓA"%@7%L^&#ϭo:]PG*Yr>`XŢ,&ߨaeCYy1^?PcQ捚 JÁp ? u/IM׾V>^[CLnʋI[~8_)et_.}ءacg/62qkIMrtku1C-[V2Cm/Ar+_zj( Ye3ڵo6Z}3uui7ģemʲA?t+~j.笪c]jeO_y qѽ jr?K~|+H%B>ųggg.WbbbnܸAOO֖˗>|EDDn߾}YۥlQ~~~LDDnّݺuKNN6P(sssRRRzC5cLuuuk_~ϟ_vhejjj;Wʕ<;tMB"qɝm:\lޅOpx 32H{EC$(("`@AT" (HdIs9s9ǁa99 00 9jש{{׽ջuNzjuW^kY<]rY^zaeϔ?oL ;  o|^(PaB;|$k){+$L#- 7CA"onZVɊ5l?rJ^4:ᔻml)f o~iK0H?[$FblxX7@.zd;S|XJRE@QJG{hzu`ڱܹX5U!|z=,wd\cP"2A=3QPt,:& cq3+߰44 *7K7|ƒ~.gE=Yu5$ P4\/c=qzZΙ0#B}&D)~ s|GğUn<9X@չpnqD6rV}ڈ}Sèa6. `NL1'gD7xN|!5!J@$meN(n? C&F#^Cfmv]Uʧ>սݽHQ3 yk4Ȅ%@nR.n?^2wOKk'Sum;x+SP??[PP#WūW`h*+8uun6n.k"}1'! rwx|!a;=5H%ȝ\ԗ@L+sd G/{U=NRӶ+W݇$W{{DW #pp*Ob c{l%=^ >$ /%!vaS3sxWIɳDXXSVV|qJqypp`bbnaa˗-II?ŕ]YYA >|{G%$$p^677lll5=Ls_58G8wyK O2~9Q_SQ?_aUQ1cqtkhzs"1O+  z,EB29CWțt{>63`NxJsޒb6Vn;J WB)bi6?ԛի~șqdaq B7D{^} 6{}?JΕZ,/+z:AcADyd.ƊKAN0@'+݂0n tSˏ7N3ΜapZ f2홳:'Yy%7DjZy~[actv V4K֤n t ՏJWKUZ_*Id_?&?zfM%6 č:r8Yi4}+n>{dsaz@V'co|in-mEl +8* =s]yJ!ڬ=ph{cd:HXk$ {hUԈ>Ќ.Kfs/{C$dA@0 DX)o/Z-ZXUhIa.x3< o0>]zwFn/z۸UbJ_bL~9yk'$|.4i ֯"hVvnXl[ 5VN{012V2„L!b-\e$>T>I\yB9n m)[!Z"T=on2CanўwmeCi0~zrJii/zmlԝ j{1)jD x\G%-\jLu}9[RT3Gw2!:VᎵ .xhC(gEKXeqce~cYh]Y_FZ_e-R]\G1"VfQ*uP9+F>qG:Uk ͫ$u988'?'HCBB/SSS{?e``#cE޽{SSS38#\͸"•?%?<\8z$K] y*~!O7OVq UoDz 3a)""݈_!>sfvVnFhIB1,ʃ Blޓ DZ$nTɋ/jڥ6|@GnQFis0}M.sJ¶u;}Iҏ) D8/9oH?GKfKBDjzhKlqm?(,rC^ѹsp[g5X>1˦-~Mn^AS0ԭ[ ֆn]]^PO `y#zg8*g^6w7s,t 75 ֚~@\y_\:u%fγJQ9 9M,>XiRO3Jh[#[U5mG_Ow_0'ԇm4T{RLʃhS?b\Sig+ţ{#9Bp1uO mwr$ݞZ,'.16lRMM<-L͝pfP, w;x0|H?Q/R/0` nᆵ ?IQX17l)~cJ @;JAkӕJs 5zmmWwFQɇߓWR&S Ery2E_sRe+V*wGix#M]vmm{2 \"]\ 3KZ v6IU>=+ i1=ԽUq.Rjþ}L h3u#_/GyZQhWC+.g8_#_c,]t2JW;OXWo;\߫2柔iŦUC{Տxr_umlgCǡ>:4qQ3N;dpҘn8y5FAOdq .:s;o'Cя3 rfQ~j-d@.@A pcP [̝g\Ge } .`u}sJD\;Z< <%N ثNGNvYz}k8Yu)U"O$'U*K]nTPµ[P# W-A>y_V,nܛ:zʓq.61Ȍg} %_n @w 3|3"I޵Mڍ9ZHsK. HEX腶ٱ~*V3NG# ;Tdm7[gض?U\hE̢֡b?lP 4*]0CXfTV g᪤}ۧ[axX Gg /d.f36)Xb $Fv\C֐R ~ X=`@@<( NV^)^;<ٸ_v.ZCKeaeHϹÉ]q3{R#Өi s?t B꧞+T`Dr)UdpF0 d*Y-xx# C9 tkMEVmq>WRi^HDi%*x ; tb_c]68IT: &+6K O3 BCf:t-sE@хD6賕ړLxha`̑3I=wJZ ݾ9EIq&; ׫ &"M{{6X'WDh]5'F*Vy0Wߜ^Bٽao NtHtwlygnŝR]{zrv z@GubBTNS,mЎO&+/Qb]nWvBm8in4R'Z1a[9yлQ7#3̈{AiG|Arpmnea8֮w'p!m-Ylt]]Gꕺ;K)]欙f< x_9 ׿|N%*`,5X>YCܖ}&6^yJwܔM$A& lJ0F? euOoKHDLÂOo;4|\(X5-_y}IMHyz|K{8*T(iG. L;Dg9E+ ֿ|<&Pc Ȥ#^3`c8GkV׉LDüiR l0^(3M#]hpe#mIA[Hf6oi2C1 omώ ].9~j au9/iXPE >n]j|Uk-4)+FM qZv]^(H l郚ԏaRne4wmV?U:{UvQd6spcem$>zJᔻebAX]uF4b>pM|lpX"<7DRS,>Cn @DglʞIees"t;N1)=V`Sz'iPfb_*ڑ[_-T6)wKOΕ lh ͽ{1 O ܘV*|6Vfv4#7ZI̗m#3/dP͸~։JG˹be/-O:5G 6aΟu_CY_4 VICjXC{OѮ׬ݿbboƝSyfii3uggg{{[JJO QTT6888|qeeǙs<)))\7lj 80yָ(_^RMd*$/kn)UXT͒o˒/VHԭzxXDkx4O22s6qԌSNC~/"^f g@ft"*oc6X8VBX֧Jw떨 Vo$] X'q r! :$H8C_?Xy4Y U0S}#A.PJsJ&ZJ]$5tT̴1%[dke[a3fsbuxa~}M>os%n P\L{a<NjibXab᫇+F طQPg7cRԘ)co߇2M3O>F*,W}X5K$C524fP7uB5oA6sA1fF'`yվ˱͹-Kw߷;|$ɣu.tʤjEʤ#>8!!%^0/P2*Yv͟2 ;suM]-||CL=)%ٟ>Z1fUeqnjbfzb5K^.dA0{37٥*IFHml<&#G;k:(X7Ggٿ!ٳ3Sٱyrge}͇[SM3[!SJ]pH~CvNoqY罃l+P0naF>d; L৓Of LKPN]#H0EҢ4mh0ot 5,!9Mw'Sq4iiɎW"!zBŬܝOy1L06߉]0'<#乸2GZDl,'Kj\k_":8zYGgfh/iҙjX PGxÍO1'݅`G/0]Mek@x%W _~=599*K]<FLjr{74=ȳǔ /.o{ċ#Q[zzS|'a.0s.>O>kpSi)XK[-,l_W:- hnq/ JEcB1x+jĢ[$l05"]BcpiC."] ,U727@g ?_4}r~:^niBݼpaر}l[3J$WU[ul{~OUNNOgyz8 _W@?-tHslRrWFɳG#y3Iat}dB}bUR^v:z$͒?}W6o~א OeF; ?]|ihgΝU uezьaq>\Ѯ #v lf޿ y[,Cߏ7=pt-ۜ8֗^ߓ̳xgϙؔBIpHM +|8̴X˰\N+ȗ'3m ;)Bթ/7 HW_LNYLx~%5w\6)Vdߒ2}%w/0ujZc^s46(EnUnѐ!+aQ8@?ڳAaDy66\,(xbn~$_w.0e/om_Y9fib%ŽuW}qw1W222GͲN?cmsbޢD˥O$%M\,3/$׳Ch.ƅP5x;RWoR'W_UW}E{q+\L{skA巩G}\?pEo"s~ շBs/(h<=Csv|v||֊|֑||ƹ|:Z!o<|`]0E+#7".Q+*A/<0$4$$D/U=kX!kl\&D!G)xaA<6~@7F+o|>-yRɮYO Hfϲphx(&秊W<Hdw bV3ceB%K>Uh-Q[ISHl}Z9|rvֽ+];suz['Q'f\ߠ_fe${?uuۇ/Aj_ nOtϾE>sKymrrrUUKԥ.2y2&)I[} e-~?|1dhobct {@,ݹ&s1 |\k#T2ȼ1`ufN*c'5[:2BsD\qr% i焵H"(bhn㞁L>ZB/I^¯P?toI Ht2?Ű )fgWu}5ZwxPQO1 SMtv!Ocǃ?ɤ[LzZW?(ŋw,h^)M:}TkMwԩ,,yW=>dx`kU&ǔ-5#eg@eUMɝG]<O߃&p?CdEG׋vv~Hz$i[aTntT9dŵR~fZBFfƶ-ޙÛ3' ;OG/*/؎%ը'p9h O3֮Io`9dcΚ )ϡ5!N&n3yѕ,;iR_d<[uczmja1-/!m%PY- wtYD,yxioLFu>*zSL sjGl1g 3j%ɼ,Kmt ԛ[k!%0-hud׳[} ʬ۬B[RkDKG$vdeJw慺x UW]4j${˘ia0mmv;ŁV2o,"֍^ys_ǎXwsv f(ȭegJF% DL /wʗ(4 .nqmT/=›ekE#"vu $7w5yY"~% ԳmHULhnL=^s@^@"o,hX>U2e)o>dfQDǣr-dưP( *dϻE!_ ^e 癛àOcLs +Tn;!(<ŷ>FH0s 2#'&.X_EtE3((y*os}#X뽶eP1@rArJb$;"F\<kgitOjc;)HvAhFpM®z\+9no46a(ꗰwTAɰRªؼ;nSA`* 6<Gs}I폙8 T3WOʚlz=J׏o3DC0>.'a lࢃ0cWՎH R"X0A^x UmCSU76Y}uhz4qbvjeys,pܠ ,[uY%e#J90;| zEb;J7Ց9ىQ&aב#Df|l-i11䨂~#zǝ~(g5m}۠_ɧߋQb_ݤY$wG①n?\ *Jr Z6C->{آf~zfc6N~"zؓWI= s76ki'>l'hDi J}g#Ak ]:o % z3d7*LdxX$b4އT?5¡W:=ohX{~~ss3_)~) ac.^RqT--Ǥq@`o|vyuڡ',T|Glxpܙay28Ew˺nV=GD몴܆S&iF"` M|qStn__3i]*eZeX%5 haa+{,-lJ~E}*I\7CFxRU&O%ި'rq9dܰKRŹuz'հbB|͜Ǭu DKK1Xʓ\ ~vrtFd8Y$n:bі=M`>~TJjRjbj\j淤M(@#}nd`5Dg7q :r=Dͅw % ٴ-cgDJ؎y,:X/L==R9Z!{Z6%]ľ<ɘۇOg%'3cb5a!&ʅ.21⍥mBEɝ!V&Uک%?R+SRUS;T G|.c[dq#;_>JT7m|\jt3cuc]k5*E{[/&+wtQN;IqN]VxU=!tM PmT5EANlMQ;7p$ Q}K xJBݳpm,@.3`#`g0lQ+1N3?B)PJ+LӃ85=6wg~ (UڌKEjkH5W uNJY-Q(jۨ^[fQ6:gJڽ{]ˏǹ{UL|Pza#9͍*>4IUr'ӻ4 DާGCJөwk$Oeӻ ɨȟJʙ@?j5!q;Ot~DNJf淯d# .l11ǧ!nIɨ<_eRv.2VE ?,TL.^>fb;._9sZ// l.zUu?y86}Cv:gi{3{pp,IzKy3C 2ŚK ۾ǖQ 3{%x2Z;BF2jF>ÐieuDj|Th1Qa]F5y= HƸE*ˤҬ/ݭ-O֚iM )5=eqjhK@SP}׻Hh XŧҴ9{]iNH|N=]*)l(SW)Oދs?㕡)V%na!ZE&ڕ =D U&, #sV;ګ-c7o&zwQo7M#diT\]η|Yע)?u# 16XOy |@[ƾ>jPM4$wV)9gZNYzjd}JS!]T*[Y$X(Q ۟';e&_rH|#BD$O"C dpgZ3]Mç /=f:ݘU3w—uݦl-=vBy?.bnAq?]R;O{h3a$tfk#lENⓕ֖wgn( i|: ΀9੿*kW% aN?HJ`u#5BjF$+\,]l(n@u,k $BB Bp 8wwwwwwwwwww/k'u=>}uVk z~fgtS7T.A"?+*ee2H=yYgT|?M .z.:Z r *TKu9k}uStlznݱmdΏFE0sU-_of5a# @$% H ١7Di*Z|("Y n}:[ۗKouKI, 2 [F@3(X9QΙO+,O-]D8* > DŽM\T!2E|h;e6BU |yKߨϢH'yJut }J i?_aIWv=2K:͑ >/&JvW!#(2@EZW'j s!` 8pSq]*p#ycJk.L*@˶BDfg ] \n \.y{pw?L#Q,u9WǕggs7Ȫ.6x_QOSN_:.$289eF%9F@*dJ~fR˳ptH ڬpMs<a ިw.,^5i+aL*{kH3,Sjٵ/uu4MMM Ow./^=X:@NFY|5`GL.2MY? ?g-!Nlsnϲ.W4ٮچ44~Pz(|oƎ*v5ОfaV~H2Y`(I0,x< S񸾇5`^O0\{w`svS»`6oZk_E@jDξB ݏ8$.6"#v2P>gY%% e e`{a'YM$¹e qj ~mŹEGnDnABݝxl오JE ӕmMz3~??3ʪ-qnu)"O뒲Xv,m'R~sq1ˇ4w. `/XlC\~x"<5@|krEZG1OgC4Gِ} #zqx g5mLov(8\$#K`rAdA$V/;5[tɦ4>FҀO"[nuK1IZU}9x~ WyFdSD:"|g5z&*CnzPHfȄa@M´/Yy EaZ)ZܓIMQ5 ͅ+IVLJɓkמ8ur;5 J,bln#'ZEA}> :MBfטn!} e]~NJX7`.7q%g\]ǟZwi-&݄;j zhV"g<r՛R#44*myj71 NOǹ7oSOK=S9짐0R6ΜU[DL|3ebY kZk>S!1R )F>*- ;Ə6XS $ Libת7~pmoh كV֠4lI#uHY0N_2$o'>չ,N,q4ru iT9/`5(}\NϽ^}Y7򦿛id;SJ75T48O#"BǺTNk0ޓBKrJ;Q {(ϻD!s.q͌b.;tWBYγVezp\?TD>-;S\UUkH+cW h6f+~MКbiϲ2F!hMσ> z?3:3S4F9I1_*/F4'O sQ$D2f W>+b)7H* zwdV^n,Y~'F2T A4* <Ȣ#~~d,dXm,fQ,ٱՏG`}kC3Yh݇!5T yKy[O Oh'w_rrň>>umƖ׵XMp2.,M92isI"[E<f}!8tJ ů8sɲ[Uuȶthaɞ&}qAPP=G߰.|D^xg&l:QEq-{3(>EhY3ë?{ҵE2:,`Rtq,OV ۏ[&BeXwxez {Xy'KI=1CUgBԡ 1!Dqvrѳ43?K\͇Q#Y'uvƮe, v.-ZF[MX-Xǭ'c Zn:}jkbKxzW>O `Wt6U6]jhн9g;SihzyROvGӡL_I4Xb륆M܃G>mF]䙒N%'O3bs9Ep=!L_eTrnPeWo@Pqp XwS N><|I[xվ >+ebd}zvn7ܼNfn#ʖ^4)Ǹe9~g ^C#}|+i!ޞ&YSӏ  =*. LTW7G259Fxk넅&4emY&՛9DK!NJ3FN^}Tղ{}^40&I;/X.Ǭ(TN^+<09N;m \Qr>)G+Q1')ۨQ5 9'kO:Y[Hvv˖El޶@辺Ucu[n'oILm^[ÀMbe?xIR۫abgZ_w"v{DfU~:?J@JN߷qVH+;0K-$P7z0A\ǐ,q$ZxWek9Q2r[6KlkV"յ˒oZt@hd,`KsaC!= ٝx, &$.g.e6dUyGG$PmVoG#LUrbȖ 5qCJ#w x'^IiR;cmױ QR/HUwU[9Okg51S.-y|Uvw%EI]kHzJGٖAֶHz'iFe)msV R*uHkssEGU>^cnoTq3s갖HjM}D=̗X9rj6Q$Qf˜%kY*VJUbN H(^)~:ίM_[,;>rKW&DJu 4Utϟ L[s }uB?eR;I^& 4kozc_6qF/I`_mXLӁ馛B`y>_2  OfmLa9cMmN\1* 2`܏o`@Z&"v5 ϸݪM~%|dEB:Ce:´yTrt4ulST]YY9==ussC ]::߇!vSSS!!m?"rqq"r\NNND}Ǐ([[[5Q]< ~~~wK%R+@uh`</ބ̲Olu.%@Khh6[GzHBL1堯gi+~L%/}@n"rK$)0vA`ީa% J3BLєOz S(^^ARGsB%.bŚ8|COk 4Mkh맮V’YWSi\˽@=ykG\ȤwSzDXf6{u UO7WQLDmYJlmѩw$ݣTu,5-o7ou>.qX)$ٚKho˧F^J!lˣϪm2MU2";8DY%'H(hR6qt6 Ԛ V_UF1e!д.:Y?]9[GK4XJTH/nOuVgeeUucmPVʄd.g3HRu HgC|P PHj6=s?w\8D6L4H?I2H_Y^ݕC3fZk$dQ HX+O{PiyfL!J쒣傶 鿩96\KڬZY8b֎!^"IS$#Ԟ:Z_6)Ve^FS^ކ[^&^V1?G)> D$kZ;O[88_X,KЯ=;M¨LMpcoA+˵ZsNI.$RwcU.UU:TIYz?}ѴY-="`R'3n@.(GRK R<׮k+ Ň׀?؂)k,gV E}+Ġ2YI@.HN'Uwh/l[X:b9v{oҧhڸϊk?d >ZE9f8~ܼ_rM<\>";#Q_c )zzsxwI`k,}/j(L 6pvAs74=Moi!H85=ժ+!f@Bxny] y~qL)=gTFٽs?Eqqq?>??;=;;W^MNNN#Xɓ'쇐pjj_wzzz<766]3-y<=*r.S@>r̓}k_a52ޫYbgiRIq{YoTf0?cL2eԋϧJoF|ώ)@);'M`~$ Zb,mOpԺ8ȧ_$ZVz`tfml)\Q *~dk gkDso2gHI7F_OM?Zį\3zAgҮ =Jqh9.{g2)]š@3FҍXr\ &lPA/SKE\UzAZdS VAp#v3[z 7>/HjvaVC> ]N9Yn>fZXsɟ?ri{zdk\IO~凜QlPklzGQɏ"o, \xQ=t~ӂ|:ro}۶--eCr@Vl|,OAKܵ8;0 ]B9F`<~p: oz)$X&u96ĺ{)eM1$ci_VU;QW c \tU2Y-"z4#⣢SI=CR,>zH*!!GSb|*9> hH6AŽSj胂a:ַOr+? g`n[$ciQY7vX UK3$Yg[̻{zplI(M"Ԏ㹕Cܴ|C=rF/msp RSAbW\N=!H^o9i~ѻI섨xCBdh -Nc_tCSMYzMC{ ٗKO9q!0NP/D\S6v[t)m]I6{{jUY=4m Z"\~*3rLWUcC{, y9\_'r=ZBM p@h_8/KǤGi_,=Sѵb;GhR4k!~Fb%oz"9xd۴QD o,,EO?MBPUs8Fm¶Q1I7is/B]S<}k4)جӲM3'1^+h,E=IWW&yd̉wnT?Itv(ķO0+ZdY6;M1XC>n>ɜ B[KȻƔ|ttn~ 5ݐa(w0wy<7|3>%[0vO.TfulNnekOYM:R[ v JmfI  6DA@>C;$z[vH8~?~ϡ~1)+k|.Wqq r0NQaGX;ɏjv=_!Ç >|xXC;D0,p;l13MaFdn+^$B1uX1FB:^@^~(dq91W_ -%Hw Ph`B(`YUbaI:3ܢ;TsWiCD n2NT/𲶱Ҡwa)y9MdYMVu|%3$y3$3 3orM=uzG ۝}s '0{>C`骱7_R7Drp*9Ҟ/qCEroQoоr6#iĴoVSfMpUpf:N yRy%333fHfW b* ܠ_<4=xjx֣[0P#a6tK=sP} shcu]0FV"9|G%BS )!:$= y>\gl Et3`a3%\2~Eµu '9&5^LMhnuD7_0,M^T"]?#+gI9s>2W(d/uYG<sJ\2[k5YO1ݷӷkxBm Xi{-+/wE%''!!aVV!Bڟ={|ڿ!|NOO}333@ݿ}έnuKO^njfI=]@>]$m,ד7G=ֺ:iz;ַ40&ְUpytɒKVV_Ė_SRYPk s 2Y7SFbcK=\y1JWFO:snՃֽ̩A^F1.6inޅ.IvΞf†4:'$iC0sQpUZStM2Wa^E~I#rh=Vy9Zx*G?E5F*Ĭעrz=ыے˟a*ReRkf>z?%^B;\!%Q,R]_$V?,\+P5Y5^߽ʮŲ+:JƉkN.3F9 Abcti)dȍ utʷp29pw޷LȧÃcQ hiT)EjNVx98JsLR9"D=cA:3D>Ks6rwkgm)c浐?\%tQndZ ⽵M׽@7SOz0'igw52 gΉ T,r5,1w SNq%(x:JZY+8jx$yVclwE$L :vUgDyXGh'HVsG9u`|2ҳvyg9x5E>&IM3uV8WhmM.'cyz!- +[8#<|u%Eq^U2f)J) γh'OKȺh9*2U*r˺Kױ[;e6ez -]U=/B) cgt$'Ǐ...)))DXXxgg iwww 2rss"8_B$|<=zsshhhKqqQk-yw&OefXѽt5!`tl+TG_ER0Po$j!Z#\}jLa9XiecTBDip|esW1$ٽ*Zx:R{L9Myf oPi.81ϐ[oJN=7%򑧖J֠'R#>=2L#K ]u.w|ɡ_2>ݡ6c^4bYlMd2H7djkZąEj.uH=۶5Kl7k]4*j_iY4P `PW7Ty;6JY^R$U۶R P;S~)ֲ5V'7[-qCpazheI }t |~F5WTs(oF ÜkϮαS pY+e:ȍDZT԰t361Gj~a|yH|hp0`}EcuRez$x ʩp\& ]UK/03o#Gs5YΊQE9]3]=rn`2̼bHMӃljUsΎ>Ůd3J%/0n*ToHdNIcLhJ8yYziIˮEiоOA)SOJW1 oq[NΊͿo`խb^aMugfesdUտ|7)y߹s(""O;deeݻw v_zPPPdggs qpp!޿Ƕ+)){zzbaay"/W<[չ~[w!/jN鹛Z*P+~*vXB2(w7k#}S9?|1N׭eXb+)qj0nmNVxUٙs T=u[ضV2 5hA7r@"HwPIGrOx!۲xroa׵mnMk0q_a٣լܻ1B܋}y$v*|)pwY ~a;!N܎QtB8%O/M9٣;V)׫$NS~:WpvY.*\Z&tn0jSN>^c)kc}i-T]9=:WvK VM.i+br{*( ;J'Q!ċ3wƮ&ng`(wZO0"غGY>j*GŻ*e|XjzQ42mo7#Zg?zHv#`A_ < Vo[vε͖fyaRR Kƫ]6pƩ9Y'|l G~x636tc\CU*iki}ic[՛½ƌsNIיi{q!u$pX =i?9i2ji?dgj^&+'E,U>M3]e0w̤l›Kk#6VB.br& q֥9ZJ>jJ-:ۘ6b9뫔b嚊o,wO{v}-NM( m1vh hਭi,Hp3J.ar"#QRw bqB' $[3Ҭ%:?|Q?k`/yZ*WݯSg/&/HWp S, %P^QSPZGڐdԴrмDzպvnaJMYt`5i7yiR]-$;r1Β"nbB5ڠ @[#@g<(WNmpЎM4anmlq fىCWw.0g}-n eocTS2;`]gPt$f9eUu[0{I@vdR_uzGtrˆM|![ywR}XRwK-k5ށ?ڀ `-36ˌ$[:[o:4IGyepY0h|,"h o{ȓYQf_odF]E*UnsewYxa[^şcV@ lh]$-1zI2dYd;wӠct uyJ^}8.[I&}I'.љ ?ӎݒhkkK@@xncXv^Xc*p0#mMtP5ߛڣڲ[*[&vtRQ }{;ACU[Ț3nRgТU#J)W9޶9K/{HmJi>q~Iu4ؿCKz.e17xNROP_(e(- n{3(buV,WC<@lP鏹>CAd@g8qc)]9>XK[VcWV5׻&Gߺֻ0U5W*oL4cIb-n~H[P-5*m"@qwwwwwww$x@$>sϼsYo7R' (M]d,WCD kOhdƏv.y|z}*0063j;FL7f(N?]r'22ɟHZif 6ubEWANNNHHpxxxEWy$Ϗ?ӧO1,=66<2G@I8Vk5ܸxĻٽU9Kg 8Ah8D#Q(uUG4.;#%Bv0 ̀ fvQZLb``"A@Կo~I ?,nwi65$2-02Gu1m슶t`@; -QBeDQ檨HvTfӉiҦ ܼ3aU/$ՕYS@hx%ZC`(g[׀u0FAn,t# ܝ-) M_f+ENkd}3o$cRCcA5ieZ"6 ؀Εp{ Uu'Y.. LXkX!NrݲɅ=EbsЩX@,wc!T0X'j];v6Z 튅Bc4] Yic-=gJFؐDg쨫2G iyHo~on}D1S, ?{خ:D */t۱:a|p&{D uٳP4Yd t]P- t hy怔ɒ/q3Фx'@7ri1a9KJMl3#vGg%D8‹6TmUP;4g,ⶇοWo d}:YЯ6H ?hcڿmo W.);w5FbZၷqr,ioj@wLcaGܬ;Kq۶2@2]"io>?zQ1|3QBX^ʜ%=ڟ7'rujxɼ LO0#|'&)k4*beRB8@.~1B0B>J,4J.>@vJy&!SyƟ}ky 53d<ÔkTBC5õF{~(K=3Ui!58AtnbP@SRYuwHqNtrwý7` y&핟 Gn ] |:\rr-x;~S f ~1J~6}K[(@&s6yA yFaЍC^,= ] vq+sHuFx} |g2QG!MU CC&}[ 4&99cKOxZ6n:́_$kʹCڌ4Gc&S;kލWQu}諮s)ؗ8Gh ^M#?#dn60R@(ER,EĜ+hJ"3!9coQؐW9.R<_!]4PB̀s}=S݂WEvD'zN8sc=sk񻊍gl!zjS]=׫N?y>(9mU9Ȼ~wœ.g{z)?(Ր)V(V3_`dPxqZph^E3Y5a=CK?$oUhͻZ83k C=&aypa>ס( D џy:-m}ʊo]aa,>hQN*S}WOjN&V1n 2`ke9tKn6}#y^ή*tU o 7幫qA42E>e&M#J"Jݫ̦E2X+uygT:_ |Vy^JW"*//444<eD\sYm_uրT`Fx;7cv-fZmJK%Tlkm#CsM3T=lCr 5bԣ#սw~deҸhO[=p~<,]rۧJWw .,}׮ъ446tHdZXΜ[}^|%Kg+nѠ7P(X V#1!*J> By.ZFNhw[GIz}k}!KuMȵ'~O]2.~&.+Vp>vfG= t;ih iLZjoU "mtznZ^h^;'j~ڳN[z5VtZŁ?ujg到F iTU@^_}S&nγZƶ;R.֘bfsap{_Qҁ0=#S8V)Okiotṟ5J) :/t˖oRr F-ar*h;XzfGhx[8;A6dhm /X  @@' |#X(@j+sګ9ݭȈc ȇ3W'D*%٩sV=meҀD/i!gϭ?ZX\>zP;6F0|־#^"S,_^{ӴR|ğIdS @,(X,P=(opZdSK\FQHk:DƫL*~e=S?hH\Stvbz^iuGeVd Og!_[!x>?ֽ@fNsoߒ*kkK'g猋9 8,oz]8,m0yf z 眴d:1K3_4wq2x6Y͚Os'B&rlih B鄝kF(Gt|7fof jRui fātI ZLSAK0AB a6^d<,>TdG$C@?Up($[2Zf 6iʤ*'ٿ}uzT$^1mUvZ+5bZucdz` x9!n͹!9+Oy]࠹N>w*.h@^(Ze|=>I6;ŀ/W"Ym.:I-Н`$]tB[ӹI%)ݮCQJ3/.~ٰh?",x#`hpgtcrexx$UJ3>~}L@B $^-d7)l=>wqE .|LFc4P…˼ln(݂PUmpğ)_8]&^DHL= @W.38vkN-{ڶ ~9=JiB`m#]r/kzF?udwfN:K7H0[ʠ7C!dռgy};{+3Wi/e\@j{vh_7AßTkcN2ri0Hޖqw~>O3~ >@^8 f @FvYoa |ɵ[R[ ;$$%"ƍkSkfmԑ{o|t yv6pndvA~'S8B9'32uFp#MHbv=Z go9b,xl끉($WW"gS^^^EE }㩥;화 ~'*q9xQ<&>b|qrlbgLg#(@2b^F5\K1*$W}!oGD4D\]C}G>ظSrPY~fJl])}LCe\RVv?~:;E?Sk;{#|?U$w]jGyLe׌Fi|)MRs&fGyy b>-Ѽe,I,,,B"evjY2c^o w##o# o_t@g8כX=۬JCPlN%=|X{`U֊\ëIٴYæYVhvwf}CdlNM?ɩ޶Yu Wɯh41gf;L[{nj_f 8*1@Z@\jW)Qt 1^bN'sW_MHD9؋vj161N)T-UlCzF>vfrAB:5:\乳ŏA˾;xftӽ))1^6s/k~ůƯ5g%6I~k`OVͅ”s)LA8k"T WlN^f~ۆ'nzgrKq=,5EC,{ ϊp/#pv 09ӴoeMFm=Cl#kd;CD2e"o |-oXj^{ZAO[}x*[߸24z|pݡL 3)/eG"YB WMQ-Yc{Թփ %a{f~+yD DIwC֔sAl"_0_O :Mޞevr£硸hg5\aZG~j@6dbS?7{m/{S?[1SʼnITwGI:w>|U4a/T_ zyh|d{.jxbwbct>x_՚7OBНvs^T3`G6PrBq~N'v1*eGWh4,ia!|Nz\# b Z=aG'_7j_-`: vXrc{~pj˹GD߻PY֜BqjtX JェQnŕD2 NJڽs͏z7'.6&*qqN2}D;Z!6/}ċKu̲_ji~nx16sx7H +9)!X Z׵BmF m|0/,QjH4-uLv1 62ȳ7t1X2@YjfW%rDI(eq5 b"AoE՘P2W,^[KD)_k6%Ƴ\arf>u^65"32I3uV䄯/oWdrBJ|vxQ` O$W"_B0H$P*x@%[DKC)#nA9EJxRZNl,bkRpuS*>r%VJvwmltu$(ENBhx@qqc%{y#Z;%3?:JMfKLP NgP ID͒{ҥ J7fg t eFiYǛC> *,[bA1-3sO]OU/o`kxg,1!ɵ1!;&@Eb/YxSꄬÆNPȰ^E)Lس; H %?zf(qG#fVo?hw䈩 ރ2NdiҎ>FH#d*<)dQ%5UX*OyÖ9!JѼ`,8]7Yks$E1)"&Gv[z0|($7X @5`n|yxND`g&hz-n_5#?^ZJ\~VJH弄A}e'F5C\a0-S?i Ic*޷%4/'^N莾}6EJ=APj@e_:&BRf/Ȟfn[v; a$2{C!׋Hk[TߗZ\x(PIɌOMgOis/s_96z⇙__A^ ܈*hSvw*<_$L2!e y1>ZB!ҽ~w4q%C辶V,؜8oHeT>J\EZ; =ΆH3:u=r8p1EyrI?6K:^LLUc|%{%_ԙ*f!ͽYɴze6eIx'_0r8"7ճF n^{5:2_Ԫʓ'4{qA߅<aw377'$$DHHxu^^0,**ӧxxxo߾miiIMM}%Ç?]^^ܽ{͛EHII/r[UVVb2ť7~+***W7c^Jiɤ0Kr$䷒֬#֫Ԥ4shS00a~*}l},u|Ds8zX@ ^h6eWobe#W@ۉͰIO@h7 =hM)"J!,;mu_^v6A q)? πF~ubՌ7×߭If;8/T@yk&؛;تW湚ԶwG۪Xz(Tr [#ySQhf#}Iux[Gue;O{/SDf'# 1| 7!i$!+t"Y`mm}]?5kU,D+dO3sBm(E [p[h7|Fa=>t_+{Ma>.nځ#&W3J;be9n;jf0-y*d]Q( >y0%2x$uUؗ`IG#sO 3'3S+ccc}W+ 7`iD<[vn䑪]aqձQk4\d.uzo &48zV3S뛾sTzk)֢7]qU'ٱca}"-&^a@`zoK[=i,J潃k䝹Y2^E>nޑ6n1?,1@aaeYWCtl?:J%+3-Ӽ;>oiݯr5/KiSNҁ덅**b齧wbaT82C:Z%ܠ6 0LnV1,x}2D gmlҋS v/q`>1vV%( I8ٹO٦wWvi[,x m-VFY[Z5z 2eN4` g]| a3Q>^?[*OTE!RقEߗ*ꩳH}{,z9"̳ͫf(&xZ|KL K >{.!``xww[crbbbGGGؓg0gees+: ߊCKKK=(fwY!677766~yEW"d<oSjy&'RcF.h3*ѵuMYسs=ߎl:g=W4?wuy^tc{u#bd/=C7ݷaQ A2 =P< L߳؟3wӳ >Y65t6)u%5eeju!*J`F,pKh~qזnÉ7܇Vn~H 5I}/T/zQAZ,+jþ8ii|oյJidFڜ#-~Ò,o])QB55C4)\h⑸.掰P݉vXCh׮KRV}u Y}8=H5XƓ'҉9SgGn؇$SWu#fDWqi!vѹJ,dKMA55I & 6O ܏,"ճk*7mp޶6P!gT3,[#SQ7)#&`gϑXu{Q.UNXbLXoblƬ ;seVY$.R/P=;õ*@s5u9'E%y3Bu%,^/,Xo(@=16y\xY|DY1&D{ w=N>|ljgc0{{qӴ 3ǵd|>N%G|K-?wx;߈"dKjaQ$[}x[K&^|*o/40 )`hMWO32z}VAݙCjq*qƸJX;fI McOŢUwIbe)r%%6ٯ%'>K5y& m5hp):fgI)2&= 1v̉* r˴lz9>xt|rF4и^9{wz7"V uD|ҞlL J*\F(KR‰do`8orYW91p'B83(ubq~Qz[rėw*y!3՚+Y=vHsj&xzu&()d<׿:k׮]\\]*1!ȿΉIO;1W6գG08w.?+Çggg\畮?lGi ˪ o50~/ · -6J;'k׏oOLB߁C[sO̕.c0b 8 K۸Z%}`6 )V!40 b+ay Ay8x|GDOnl&YM2sd.]36*LM%Y>~!Ġ-ÖuQt@DL9tEYᱟR8E)")"_`b ړҝ] WmE_a(lJGUKK[۪=ƴJ!ijz)tpƴt]jXn =P9u;JF89v#i[ e )h 4G|ތ.?{`Nh=Y}F!W+ Tӣa}eLq7:>%H'P.~Ko)̽]~gj+~U>nEbH͛ '-E"T 3L<9~~{^P?ꗽ4PO$-2|wi3THW"L^Nh-rrӤe:Ц @t Mz]%0l#]|3~DOP&]R}K.KRUYk;}wډq.؉n'VA.P/9h rvۉfA 7r~U}:|5ڝ܁ {y2j]+}qBwNsɀu.u}TsssNtkruRvJA"׽{i0VJ/P'>ހQ tf#HDܻNA bV2PKTԦcn~BZJd b~kWvF!2/sΓ߼˭en䰌Y*TGYך/y I@W [ {B]<#sGˏ/x% r]gYKx3Ecw\,NݴCdϒ~|9<4A&-)@>lUCRiA_3`iSGo+N8RwM%>׶?^y7&ݐ1lQSbM'ٺٺ5$ZAn"=wYNFWj]'YY$ۚ%?_9= n,Uoo&1Z\\ο.?+$v _畮?<5@!cY :1toSj^PO=|7`%#޴?mPn I3Z]2+;(*_To?਻,un7"!#NZy\ j6$П3EbY]6yf8I:XX5GD5MT5AT5J"\&.\9\e-\p+XIXU98/Ì u;!g,h*y'EE?ECEk>Q9)m zX"+x]Ɣ2uTfy.h&&&Ū&FzFZ8d9W[5VVq60QbgD?>*GsJA2򬧎=kI"rS a@Y]^8z_ǣ|c/MOۮw[#TeO&)ڝ;頂[vsr-,u>eHx[XE;fXZ~ڵH0']yWp|ʽrʻ5/똪9>э"_\P]G$1r` ?_5E{3C7+hU- 6UAfKwQ͵H Ht/U]P޼=d@*е`)TQVj#K-6->T[:%6+]~}{"%g[?Tԛb+:[~L"x- t~v<1?v RB*N+%(&*E'D{[i8ĸi'EfKè0DŽ ZDTU>-?`R(>=*H7*Nǯilq1iMearef3xQWP{6G4ݨU7';k&{GZZVn湞ε}1PՐ=EO3S3ٶP9ŪEhI 'Һ q8SO8(%IeHVg7զhC-\MMk};2x:?4?[Ss̲ileŻB,NID0E4L4@o38DIIFCP" ]?Tee{ץgwy^sK/AhvxMbiWIΫGdsHlbߌU|3BCÊËjt=t}:bN+sLnyc6DH2]e0gm|4@=,lmꛡr"u)|9mqj3>瞦&(/c-1B3W1yE}AEDT@AdEP$Yr9s9sCÐCq^|W[[OO]޾3t>}&HV𷳰+`]X,0#y-1Ü2bǔ9%fd&ii]@hy\qD~HNf_je]>JR8o H%\H>ْ'XV"5kVrB^gh {So0ŝݥqwWuP~jJCn9R5v`0|cuKՑ~ZB",AihWy6FN4J1#>CguTT];JN a|ɕ56-#_60:f$Ʋ"p{e[6yNOO_\ttyOOj KJJ7IIIߚ訴$O?/{W1n4 tQf@42t m쀶5EkA`(]B.U#AP.Գ8nu -r+~H6Z {Oȃ hv(Emn|=H`fqaa4(8%M9@TXPT` vFTV' &s%+6 ]0P̾$Xla!4#][X.>SPU:8sOdehn_*: h|}+4+C% ,GV@K`1@n`Sq+[\yőa;cLpy}/nt)/X_mNVNS.͋мu\P0629G]Al=;|ӌd+K@rԁ_{zB)7d Qׁ&p - t$6.eo?(nP n&&\;d!`{)2+$P&T u=A@^ޅy.p\-IkZ,+0c]@ FF;}Njm??i!2_@2zN94%AOmzI9Cd))jc.b˺E0DRs$@bJ\ng&XF_)偂 j^=hoF+c!6~J >7XS1`~"@̗ 8>-n'l1R ڀN`4쀲Kx{}|v>t]Oj)tzdnQmTFCv`{){{˝`w Us(_wZa|etc8GtIP튘[GۧV/ fA dskfbŶ^M1A_TlǍ@>d SҗMh1MT+4ʥJ"yڤ gp~ߍ?`, &^O e1y;!Ƿt׿`)!ez3^I*ITCdOGey"Fh[Eͼ?ޓ:屭uOom^zv+D}7(X=C󜘘{33sNN^VVի۷ox"**Y`]ۋ'4B.QSMN 5ȥV/f[f֢ޥٯ5>kznitU^,a@hjK C ˢ2eb덝 v=şz[Gzic/6'ɗfϓ,>ˀ? EǠVjZΟyٳ"'_l]((j%*ص慁 4@#@tRƚ 嵋yT*姨%%X MZPؾȊ4m:_Ot4O0R =K+<*BJٖ;pd+b&ٚ]Q[Hb"π]V>u0q6sW-CJK r.IS-75TݤudTۇ~zD]!U5?rVDj*O*cvbOc4uAf6{Nv&:*ҹ".7 -Ӈ50 ufx=R4ONqOfψH6gUWLmm}/M K'fΊ.=U|:m%Ů&X*l7oY,_+gag&UIT1ڶiGU%g8C&M6%E&"M* C=K.W9W?OLDFDedO\aQ&H cq/y5Z11"u4Ia"J&ְnQgKe+OO'Whu3 yb-%rNf g),c_nb를 Z|Ty/ S4 >.ω2MY&Z r鼎լsd Kэ׵\2^HuZ άIYX$ש=kjqf|mre4C{f#HwSw/pdj|٥d#r^GvVOwscp~r\ioG+̙bnݭfܵ%# :gq@`H֞X(y&6`~m7Hm)Xke/ $~v~|cd 3+=`C~ZPP sL5^*JPB1=I%)Φ5xD7{K{ƊxĠ{EGUDVFtE ozlpnqCoZTmsJ|g᧭r¥|ymZ LN[$4#Pbaao!1=:^ZLr H2J,SXr1wA6Qw̪,.OK`N_L2rWWJV)aSҘڹ'ųq ƫE6ȍyp 7o4O L ps4O( Z0U)|3*UC3S̲A[gJm[BWPhlӧ (lX` zFM繫g{wx'P^ۼQ+ytEщݾ疙 G".q8||'d Tз[/`D+.>=DyPq@~C8rNα̐w3/n7] QN2/wܩ䞯`.} }RD޷;~OPMбI]'XCoO9c~A@%x)'&O46n*m?tlj=ƪ>81ݬtV|ɗAkU5#oM9Eh[0HLsde0J Ytot>(ӚY{GכPE{=Tčk'8gҌ׼ m>:ϻ׊${6nB F)膝kD_)'rj __>D β,̺<{ɽ{.zo0A*W: ( /kH;'fɦ*^N|6Jx4#.1q XE!:Tcsʠ/vk$(+&RA|Vؓc&Lԋҥ{^x\XĜ(swono&2O6$(Џ+%hgF2<\ A<9XܛH7kko#jTDf]ZUϷ }4GY'E꾂i2E3 wv)d?fW+{}Uq}eKu^ K/5o'?Jy7'+w5pYYJ*gP[3ch~P4.egkO`p1UP]. vj+jkV;xY_>2!Oqtzj> 䔱 9eQ<ߋǺ/dLi=?'*7?S[೵b~g$GwIn\b>xqAޞOnn1ycO}]v<g^F>4ȷ,X3Y8mD&jEqA)7ms'k~=y>YX/=f|}b컢<EҴͰ. Go[^h^)0 f<{_OSMǷjmܩaix[=H満+xP3|^ $A0՗ q S6/M~^I37R/ZQ^oMp'wqWwp_L1V{%9CN@c0~_S l3@Y |}1l4.9d.>9Tq99 qmT-Kbnc+KIhy8mZκZ8 {/nE |c~51AԱ|e@T."Dg.whtj~å]Աj2(^ y3Gޚ`T T9d^agc}ꀴwBqgJ;?zֿ$5ǚ5sw g#n&W}L@k.1U3G1[cgdwebaf feaV`0gkcf}ufpw=po=nz)zŵXim*nv/sn/EIEܬRA _K?YBl8~\R'\foA@ PAB+?|o.wsds{fwxo者ÿU,KqIQlah.ё6quqa"4ޫƼ$^pҙUN3_dqfpd^]Z_>uO7m[,ٍq;ך${* x3m{Ý&h;;; ;M;Ǭ1WH: >eKyLYJBӹj_6^玽frhPό4Cw K`mCo_#s{i$V'1 [JjwǾYL:w h۔EP6Î'lvɸWuݰ!4Yy1;C^^'@JGXREͧw-S;ϘV=,>C(uf& {XgZYKkX|Y2>RS Xm‹{'x l=}e@}XR-Yksq.1n{i< 8+E_ ՜xTt Ƭ?u<;$KZC iRiH4DDƾDD֊DުX!B|rWsZi5PG"OD7?H{ؤ{{-z|3L( 0OZ;e@@A@>{j!cH&H3UI5Z8}#6G< 'X\{wf Pbo-][.fd+ަPgoՒ?YpٍO ,PV,.j-Ep`Q6-nF^mvNk~@>G ,WOR_ꠟq<)Cvڨ?\#s*}qn=]2}#>+&a:1W%]sG}O-L=Yc*?>)Pј-DޭFc*oL z$B3X7`w$fBg[X(|(t>صQ-n 0 ?N1W106Rt 2H( 0. rbxjH4NӺ͝~)T>5v_3K)lG9L3^?snh_}?B,:nޮQ&QVacZZ^[n\dY駖+jW(oPzFccTfQ hٛnrzR>ֲ>֊>*>>Ѻ:&|VX33l2 Xi$NpJǙm1y.v=yB@AM?HzW1ŝR%njc`i~IX)4;0H:-\zۥjQ%ϒM #_)=ªAҶBMxwTfۙ:Zz%UڦfIJ;69$HXGng/HTt50c&nqpQjμ~e>J"=exPJtsh9$O6WNV.V'n:KW-Ig(ǯQ4sܾ5J/5$|ӭ N1/8WwܳShNLe?nvSd~'-N~|g<ȗ]g\3=G\OE1rʑ}Z]8,Aϫ(ŋSݑV.1kpOPAAho_^n&K?ǂ@y_«˶ÚA!{RWSӽuB[E*XP-ܒd?-q>[E$ZR!{WW5/ִpG ^e5sYӝ/aPq]#9SajrNx6qpDS͕x.z'Ғs^R'+vqHso mڜ9ǠPnB Eɧ+` }ڦklctKͤG8`: _|0 I'. )xV%0F:swИ`Kscyѱ۽LnM"S.xՒ s]ҟTuնql"ņcşhcNbˏ]JI\-FX+St _.E=7a?:_U^uM{y:bk4h,$nJ2{CHȼŢٜW w@mi[\$@jtv a0 _p׀DW3f ']8-|I"˵$/aPz{[#Kڧ9*m >7`oaoaoDao$`r AmFŹhy%{긎@9aUG*D 8xzA9 NPr |5pE9!K[q '!G5 <2(Kq̹R`pÚRL.h3M~έ˧k/MGyZ;kы*%Ӽ2b, mr9$3dIk.K6ޢ %aDCY$h;/uY ?*>ּo}sh}c7pÍy ڨ+#Un*\"zD](q*6!sށXX˲ߐR9#S]j9q9XrȈ~WߧWU#3r Jg0ӷֶgFPˢ 5.S :L =,eW VqMVy=$a4 n\9Ƕ>}mz%yA~̳nLm)m:cY 2a1qя'# D\!=4cd[KGK-ƋAi t_2+0`~Qp K}9O ſ H<];zą}b~_z:0!(-q癶Kel{M =/Qg+s\ ̅8I!؉PNHrxI^cg?fg4U-d{;cxk;˻O6Hf&ɧggs$9EKOґ\Zvxm܏^swYa%E`S5*qqh?ŕ "(MB8өY|rK:R,Drgw7l)Fu[m9&"O '>]z_yo Wf\p{|VڦIọTkW:ãp5N`icD~on2Պ=ɒc4wc?~q{]J8ָ6Owel*;k=񫷆mvqno-hvm4f`Ruȩjk̳Un=cŋ8MYw]4i֚em=ŀC}c;3[E^JiN:oIQx dC#oW>*^.%ϧW27q5b'C<)W)"H9.Ӳϱ jה".Cu }6`i-eax sX#GE]) -m 3%T]l}^7F%n nnF$_iMODՓG%Ϡ#o&{)HV V_74pd' O1rp0?pw[ Nk)fkPz Q'0瓱94մwZ 13%e)XZU􇫮DˣUbV# 'C{MDG,H+༞Rߗz9 Ͱl!/UPy5mM}sWmd^#\p V\jr.uK5rTpu.Jfl:%o(7=^1}O8,)H7]C"6 =tjN ]DÓdp(ظ7n<Fre1,CN4sgڱd螶Ӫrmo;yG>YՉdkWHGXK'Oj/9bnG+x];D=_`*+qAzNv(?EtOT#vlpC '$3Ӡb$<4(yAR4f|Wb8sϗ(u'NP;~+vQ|5*WQjReP.ٮW[=}X1҅.۶"9k48w;YW-jkfȧ^Kxl|% FS 0Sٍ|sTgfۧ)YIXX$@LO5Wͩ/\=M w c&YA_|m7![`S:%?/T<_>z{OHJLtjJlMu㳹;wN7|nN݈H I4ØV8q*zJ34A?rdln|urc6eo0=q_~ wrvKlmQrʆXُ?Nviۻ_5M1 ~k1_-w`{zjZ![3$=G}gn wVt0rkM 7pcFĖ}_n%pɻ]kaޥ`̙Y`|k .4ZuPi~eG{8=X$f'e߬dZ؊vuqHE 'x3]/fڷ,Ye个la< ܇>!.?Yhk}t/+yc1E Su(o${WpXc+嬼dzT06sK ۡA Y^ [ zA3-=_7/RV+i6ƽn$jZ 2b mdܝܻY?ԥOw] ,U=`{ 1x">fa(>dYж{y#ihJG]/ϖDM[[`̎rΆhױ)ymxBEbƭd$6/sqfzislx~.{(ZagDž>1VgL O#/UC5u vloOaWaG>7sfuuTww2i!~As2bw9bxaprfn Ad=[c'ܪ'X&N=i mAU˭VöYӒN"g9@ LQ#,O]caʍߖwN2Tmu=ut_,!XaR܏=65;A _Zzį.|]h׾f_i_CZhǾt{Gۓ{' s: vU#΂ .} Ob?j1q:˵fKX =ačyp 7/4_uf'zCuM7v X!32Wu"q¤7 zI3hd<@'wLi%jE%Sx#%;~RIy՚~c)[M MdAfWpHt!Wy1$?>gV~E MOͬqU=F:jĺ :RDۋ?C^t8y5؛=1/޴v19"mlS%Txei,ianN~NAIi9b5e?*~B Gsgj~1aS$1%89\{#4f2G%zBtK d}F[2Ʃzɧ/Puj{j ڷ۰Ong.?[H$[|9hqA6C\(`h_=H6L(R-#(!/$&[-"V)[BAMR+Q>C>jK>\&kChFrgM?vI*I~)! yyٻAw_Fn4L6U|.Z: Uc0ILU9[0.-zqw{%?P \ͶS.A 15=2;DH(Y5gRodEbef=埊20BФyb نz v'qO'v_^0_o=Լވ gY[\!_=F)_ 5ց(mI \ 6{v!+Q&8hjB 4үueSԭtCou /jD9i@ ݖlw4ajpPdΑ:z(^>V8x(sB;WFxCXՖ빹jW\J Wmzg:f歞byŔ\7y 7ܘ<Iwt*B=zm<  Sw/(*[˲tK$KӾЗ ~TLuvȮ 7jҁ߾K:ҐP+9*xbt0Y(T\|>MڠY:c(n]24/hȅf d+Hk%gX,Lб>\73NǠλ}Kw&^C^/<#8K{$ӧL_UU-)V,? "VʇwҚ--@ʻ\o-ز!_&[aNyUS3ﭣF0w"}aKf Si+}蛞e* %lr2դ#ռȘ'w Oּmg èpOvVg;k>UgTV9 V4pvj~Se.3 qV3 vJW 4Ypv;6D7[*bmgpf?w@*v^Ey(;Y +'EsEPC _N7Zrq 6lW̬Rrp ap~b4o}*$p?OOr z&֫V67e; >l[83*>BP9f0*,y.L*I8taɻܿ3{{-%˯󗕋3*jhvj > c^uB%cT-V{ EܰX&g>3D4哴oR6j$-Drۅr6yq?y:L`/y2PY'x}hm{Rts@(ƣsg7$uIyn0pe*O!B*_y~k3#0d{؛fUxibm0o/@=ݟEnWď,3 ݣ|F WGHuPRGH*( 3 '[^; OES{/#b55cNxF+L#SDFP-i<\HƟ'Y8}9Coƹ@GCVoRruǘp2cNyb j@f£@|^3V u^3͜=FnȡW @A  A @L$IAёO}0Mz2z,ya|_c q׉`G^$ S6x>wXtdWss|q 总al Y1y$$* `pPtP9zVU ^:!|ϯ m@$ qA `2;FW;H>2d}ly7]vP̠fg qD:3 Tp5hmť8v` ̃&lVAh7fI:d0a]  ` nv(8'+լ~o|Z-iп:*AFBZ$ q`!csЂro0$`}]g3#e_Aazsv2 YF!HSmҹy L,1}#/HF!{{qϓUY菔ߖn߭^.C0.=%X'lY'['\_{̹nh GK1e$}3߶+R.ŒlF]]lj\IP$oO=!YTWkt '?ctK)ͥ9O1[Ϡ%i.IhmSkiߏS %;TM笥bu*C DpcGN|bK`X4ϩ%YV~D9Mo%K}5Eh%#$Cձn <4+Ѵ#2qr)t]%k>(HtEesl<rԛ#З&Y{+&{$tjwsNF穇zeqxh0!!Šls`ttGI۩+"Xnf1>&bJωT#P/i>·!'yB9+ͿJk xƖzy+v1^/q3,6w3ҊJ-_^]vҵanz9/֍>B*Y9O5BH+e|~d9oC{ e,%mk8G}:O}׺κO*zld-`ZאHE)PJV 7 *k"_>+S;h`ɠaNP7)VWO>iMR4ۨ=g,m]ႳnnqS'wxFQ^!Qh^1O7h3m.bY'gAbJ$kN~쏄rN&|K=2~7KfȤOlh(`y3.BnEl3.fa|XĹびz|l5t#Tۧ١ zҗOg Ҷ_0׃W]i6\keqГzʪ&f-V/͂ɨo.u?0t~InYZh3e'[sm}`qbjctoZcji2BA D-zz~eyAFяB*Nq5-RrQZ^6ZYװY,㴣TU1)'d ed%Ꜹ"B?}I&&KposϽy/|ͥ+Q^2W$!-NQn(U92 f@rn!]GAS;=|_=;^-wЗ"-^g]1Mԡ'k/+shZ^eCW1JN1O=҃Z7 TT!US|zC}$waeb+=faۉ\u=OK Y]&&Y|5ͩf~~ɖ*QaպF^WQǒ<[ y6%{ig+Gl5m-Ogdb4]M\{ 5m$;!2K*RTS=S뻸'׃UсB` F#ǜ'k$i8u&6}+3mHR_gDeA5tD{#b/ Nvfȶt3 UG$e$)6 6osL+W. m}o1v4|)\$\H>  6 bD]=,:%ZZ<,}cwunk?53|X[KRdX58{쩦"d]M@ Q515W5kvqYfvlށKJ=7{<C.Gp]AEWM3pq^s5ÛXZh+:^:<65@!QZ*ARLG'!gM+'$k t<;ҹw*zob`T{I^`|–9{lswsY|RvBoxiȏD xl'=Do2܆N@2xsLк8:,mr!_*毺⭽se^'ru_{Tq(T3sֿ 3(>KA?Y|ۦnC0L  _#ޑܾyEP7^r䞋GgkL&Sm>+*_E#Taبw.kFv`1mC T:1ZFy.<)nWm<. f^_na t}ouXI6(@P9UFba{uVA|n9Co_Nyp|g 7SOi&^Q:LvBZ:#lNҶg׆_uatſr50H-ezFY@G-'ՍwLh,%WsZcNkȿޗhF`&Va9ojqN1PZn43S[DC{ Bǿ=N-ΝL.|/ô>ywYvr$ƩYy_jE::Dߨ9Q`a\-x7GmnG i2-5.wsW@w18e˻[<]7KK4,ljE{ 4Y EP S [%D] 8 6H`;2\zF;KĥU(NUH 5sv]~Rz+H#@MTaحV­r)BNe/sIr݆0uhc3mRM+\H{"[}e ^.7DmhA Rexnv|s6D9-g. /r y v> ׎D3fw}nyi鸕ly4+C!7;),Kmb7Th {cΛ!*E =X?J:xD} (kVgY'ge'gM'g}'Wk۷Jb2.Y9-I~f^5Vi ^`^H^ZjQN>qP>f0ПA\K}*.W>>#A@P?Du}narpٺn6ѓṢ~rB|‘plww:_*GvѓYX1hiyLێFyYM.Ě_~:C;v'8=ӗe6Ν}&Aϓj/ч)2$l]Df*~ 8tZwju:tVli\Q;PWQՑC(t ,^^ۢ^+\sB_Clta $z~][{.x tj}kfl$B4C;e'FtR$SrD<cy#~q4𶐪ܩ,6Qc&\/u !pwܕc]=l C!F`[O#;CE냤O~\>z`& v̖vbYW rcɓ_Zy!b"@~.NΕwP|bmYR!Yw;Ku| 1:~Lt0m˯ږRWL/j\>@[I+y#>`$1p3ȒPa(^';֡%|X'qN9uC.H2!w#}.~(%wj솰vo>h ҂N ,h?U)uijbfdnhc.~.vpK(n{brmzF`lb6 PFef8uZ_tYtEIq56I')q9q-sO/W. 25 ōT*)~ڛ*F~}cX`HayD$͵ ƹ?vӹ6\(00'4R?/CQ31qGR1 _2u$BB ܷOAcbVV:2Etust5we3ȿ4]:Z-tPňҧ6qT$3HG?zzWWw>:3Azh˦}/t |q6u-?sYhlfj\nH:ۏּ!r6ֆj62!ű#"GyrGIc5y`D'Xw:%ob5mF=5Y:f(&WYW:xO7|.'گgI]T;qVc$)0'5\ 7)Hd._OTU .%w?/vn,qB[FS\c4+A>~ֳ>mOw6k-׽s֤ɻ&XDR,yn1F#%Ru4~O%TS<{4O^{_ƻY3vFբA)gC(&(f 9A]K2;^L @u Ab]>#)]~1N~5Nd~ s.z7(\d#5bUӰ*(N)FY2ۄFJ#|-?OMLLLд֙0$ڜbj\Ev~F"e~4| _B|#X]kuenмDfVW ͒mG?;EOEy&2dAAcog/V.Ξ4OrBJ n܎Bnaaa"ߗ69Ɍ Owc(۳OW[9 bͳ]JnPoP/1Ospw/ٿէw4p Afqo QΜ72H+zgGr!f#+َ``?Y|>vݟRe$g4BhH|i&M~UnEM9G5CV9 ʁ:d1[ㆹ-MiQKܹq_6.rjA@8χ}ft{`x{{͚R tH]WW. }Iﻮ[ @#G-łmm䇵`!F뿬"z=kDjc;CtA~fR?Y2eLxqU_a?`X纫=O5=0N_)]nMbGj"nb.J{Wh7SM{7q`%S?-fX{N;w#ϙ{? n1Oд,~Xٳ0<49s> >K>T(:t>tnAzG8s?T_rNjTDzEu>sLlIzۤh*)UׁͤrڷiEpP̼Yn%%ZH{SU/9oatҪ\p۵v>stA؀flg_F0OF^πyX6w7r~DdwQ| ġ5Rc J[aGW7>ߛ=so &`K60Џ(8Rf"iEYY/\z߲Ǵ#o  DyNXA5O#<^}tday]|e j8v:`/0H2tWiB}<Xڄ'K}'?MQOCy dȽf@@x{a  ݡ`H^ar\P)M U.ڮ+Wzj؊:#`~o"ISֈ^, WFjVq5"[,kډ3C'\~s_,-B $׻InFQ#gsoS{U:޷?n=d=?!3@ ݠ;~rM-A-@8:O ~j΄b؞!7C"j[#Y}0aǜ)2<~LVEZsZz? ]+t̖ͅK{;WI>M>V;E/O3)_={Bh& 5NY&jynjG[V-j>ez\[SC;:Ps12qI[`8UDCvA„<ؖZŞ~DMWK"0gDi*zk0B;wtAjo x[&gO!> $L"v}[Z>iw*%%N궨9;X!n%8yJ\]+ 5NzUgr䟺4Dw3Ui*C4ϩ֦|Pr%tտqjykȎ:UT*yϚPzEwB]?qo>4c}/aZd;˟^J71E_fjJ4}0%0As{7E4c՛ֵJ"_h,;Tvz=>zzw B@@`]?X!۟|s1lswr}sjD^>(*:٭t*Ge㫰iTS=bIYrYaN~u~~~v9Omwy>肀hgcw$W]שY:}tb",FG }:\k LB+zja sGA6W.N;[ ;c>ռ19@CJepbrv_yM, e嗝3!FJ5T9X5Py-IB%`am^rfR4#x;jQ/#>45{uqԝUlPѠ9#Ӳ1& nr݈9݈jDHxYJ%"lXl2 fhqc|mUW$2J^۰+pRaA 8$\x+MNVxaP 8U.U${?wp9x:9eBkkq]k]7q7gP%E-b_kR)griCyT^O0. Lj<&v_*>:%<[}q5Kq7ʀ@6`hU_W]h~tFDzX0Uߞz΃;VhǀjHevLYoa/Ve,~be Fm]&a^zMb#u{tbaAv>^aym#SWv.Fַf'a+:e#°wKϗ`$KϖNM\7rfIwI#޻Jٌ%# T}k_a핲ȭ""˚o)pq9~<~zlxmΰ͜V9Flܟ!m7x%mA{srlFMdѹ˹Y؁랽^<^ۃ)rËE/22L A ifBf Lqt24U`]|/.ת Qƛesex}{5/Hi2yH/hlzʗ y=ܛy([Of>wU*^N(/P/Е/0.ЍQunPjJ+ 8x/F`sx;E9-u&~ sT pݳNC@5ClO8M˜ O ܷ_d.PuRRRk JVņjs4~l^/>0gj's./9f;k⽬~](q&tK8 ƚ#*k5 pqJ^Vlb8$88~rL<~LshC̥W~!y< ~ԥ0%+IG.MҩR69bh̫% %vg/CM˵i%9bndWo yTu~!wß;l4._*Y/-Ii,N8:V}mvPݒ,HQ\aЧIYuۉu&YۤJП'=ě*&XΓKa(jhg;M%ЯpkiHEșn"rr4u.O6guvݯ<,Ҍo'"˙jyi{uO rJ5 hy.έnV[pwȡ.vQ-pZ.Wk=Wm066I1OF̞ 7kF,%rAPNj!͈ u4emO4Co..#J\\J~-&݄;,ACu>:SGᎷԏl(z]YXݺ܅* E?%K/p7+ϧt\2%m(Yzj-d,%z|f?F側эT<*95@86%Xb{Zz#x{0EѻδI(32ltWsqXdӨR^eݗzޫj2BOd[OV_.)p;-h3t+ǧ3ǒ`w+ 2!ewhGB'_Γ<.8|PurpFP:y}(yL{5,w8Ɵ~jxŚN5d!N/ CRMoxk 0b[+ߛ=soU ^,.ZXpOfi}ο ;`AX*Տ ڝax\C)U[/fV^OW& W$*1w_2 "haw02Z`w uA ο}WؖE?<{q~xvasixn@D!U+!G>?^1!#}0'j6M{XwZsՍy;z3NU˓|vfy!xRJs2wl$5b]liMIbLaR3Vm|犱;J\?9<8؇QC)D Ϣl\vKD>9Lg%vUSw/Qg&:m}xVNx%8U'S+pU#yGXct|N]Ɗ C;V;LQtrfmIlcyX@PA ݂drj)bvݿO:dgeǓN.~XqsO(U Ǽ셽kUw%yW?9*=DnPnLOuԉ]1zzv~qcaeb>SUܤie%uIJҳ? oKu|N%w>o~_gYܹĒ9'g9#%~ 6"X_g$d<-G-1b&3yBiqa|`gl=a9mkg\`PoRg61/]=q1IοT@}[Bon'VjR͂ ml5 Qoj,%1Sd&r6K)MHO|넱[ '=1ùUB$/jd+D~@#9nk2j?Gs|*~;(s/5uH~p-[3Ɣh#?z}@5Ju ~Fv!+`QaqSet 9W yf{M̨4+`)8΅k.MLT+M%]|ְ)^[YmWW7WB֖?A$lt}H9T9 606Ȩ/MbΧ.!-,.жHԌK NLpNRɐ*+X]+X͓[IWYI-7џ}<׊*n镬 /[*XشRIݪ$hZ88X{9⽪fDPߌߌ!]zq=Ks:tų]kP?Ϊ'7G YKls^Fϒv QuJmGZ<[gݬZn!ZN=E ~ '|=O {gFkVFFCf]F30n_,rg4&$9ؔ(.'^%x{7AU}s$$XfF-R@ho 0ՅNi& \ \Jec-4Tzqpb` <kz^N^%3W;Cv!pLqխK&'r|Gu.AdeX;p3[Gm>4|.BƻImE?s2zU 33~&Dd6n74W=.zj(CAOvߏs^4Н:yzjC WaXLj~YǢuԥzеNJLSK7ݳu EF3b;tź>fgRջKlбoxl~u?^ִ%WkfާD $3O ꈥ(D+mJjSkB], tTS5y+>ד=/>zQm ~ |,`,ccONLxcDCRjC-t1R:B9?i'Ng)5z#rKګVVke"ɌD~E"_w_o{hg2ZU_Ky؀bPmJjL( f>E `X6t5WOMs_u췍lwMw-," d=IZO+֦x D_-ş|ݷCWw{]n3sM1<4AiS}_pE  LTH%+Z|Z#Rk1*2Q4"ЫfRoZR̵ N+p:g}_;5{}-2 eb8^mRGn+-QHҿR)Zbxjh8]?oh/bFދj&֥O}#6^Y}rc;'X2e<C4FbKReBsŭʾU  4pn59lzZsY|!ɯǹ.N}l kBt~~>@&w-x&W\Wé :Ü58#l1>Ck{ V'FK ~]gk4ͣ-m-erj~V, ,ϧ&\'Io< x,*~$Jdɝ$+ y=ܛyiBoѧWX{g6g ABT@T@P@ NFfeays?yΞeΙkom}E7N$x7 |wA Z/5?Χ؂%KH8'EQEDŬ+`#LCb_CӲUKibL)"ϝFRE/ XO:K` ABn hzHw•A̧vAr@ֳ{3Gtݸ.fD͝nk"7W%ڨpW&H; oulRC泶%sY kvFlP@ 0GEFHGF/l5ࡳ ^P@m z,@BvD; X E)) @wmABn1C+ g^!G7zF`* 4)*1/W h'9-?CG # C*甜Pvq(kq$- 3uE]vxcC&)un-Sj-'\{<%a{;41u5h/cTA !技B` XFil66K;@v8.큛"9i땜ޤieѬTfպNw@Zc N:Tqt0>cA1US,Gf;O}k)UH5J 7oirhgwDy螄/ (+rt٨+0+pLؓ–تj-|Spxk X"ݥ0Y6sQq-l2@Zd@.@)]E&0}`,]@eZvkˤy7ʌ%[D Sµpo>3MM*A 4¸zY&G_Q;Pd@? q=nTVݠ+J2y#M/`Q e ZB@*an?bhw* OJP5vϒz Oڷb7WwLd)/'jG_t ]jzӞV'Y*]18J~~q9[ȱJ˷H!77N*|:q 5͉BSft+T>$7)Oۻ>e{Yo۸mڹshpfKңr9C u`ps!t&Sx`Q]dACgvhػk_6n (4W5~Iy{T}Z$m~2Wԅf o\*}O08("yY/=Yf;U؝g%3gb[y^j*5?z,9f"^T^Ab08N--E(sm=}W*ĮsULQ-M? oa-ciWS)Y=w ℾsLYJ?4aKhTu#rgcfp!Du>Am!^)|ڿ qu;D&xp_oI{ۙw|Duat;"n*<18=uwqa~nkmϷ٠y#-xQHbϣH7VL @Z`T2aFƖ|j? T(?@Ga`/7-YczeiNrځ\dHm:օl"td.UEhP^c{Sn˹.t!^_G)B%QYSM5BBA !,D7N}SoA F:lukYr)Wj;G(O^Uyu(y:f: UdmD-˾4d3AF~zR-opihohQ$$լ!՝BD@*3G,"Ӽx'8>ŤЏdok!^^'zNˡ9R5M?\ӭo(S,Uhl26.Q2hǤvz߁)V>e~}+FA`PM?&!qnmN J-,d^ tE"GU#Wkm>ivlWToE2mb,рS_ΛڂzZբlw2GzjD|`J׋i2mKo(j0bGy N_J^`\a&`0LH,'(Tl ~>J{pDxt|(h }TzN)5.\5k\z8A9K>aOzG&3j e}؉~xh:<{ӞuEg W>(\ 5ƾa:RWNo ~u6q ]P3^eR@O 3o[_4OaG͍ŝM]fƐQ4d}pmS "l>cOJ9YǦ̢J5,D,MYJu8xNk\ݜ2o7$Xqc[|0&z/pZʺw; YSm>h;$[ڑ) l.N'_ ~Y3Qsn|TzqKg, J,0ܓ®q5ZF+kx[?wj,&XLhoׯHw.C_)XV3|3jnbysPdTw;}6nO5XӍdAy/Xk $r5tpw}fЛaQs!a;z5Q8ꓽazݢETKL<{l T9mj%}(7jUa*iu!;p<@9Tݓ׽ 6Fܑ؋d5?YiGstE$j!`^©<H5SkT٪}?dӮdΕa["e}[GckԳF]⺏X 0l wڽ.(X1;3 7 Y3()}{HpPDpmrl7Cue ¡-M:~H4I/cXjυ}Ƈ~+<^45rRh.jc_ xtpQC:HwrV_ @ P:)]3<͸^{ZTvxQS)oDAmoC\ZwNyLGTCN@DIo ˭Kպ?l/?ûFԗ;eƷ`s6X[EfuN"t/ô"nb bu!:e_@56Aj,1 pw3K4reoVa-Ew>D8\5TW(Cu۰@ϋ+s, \1̥ry+,e .0M1g s~Y#ݩMSI+9=_kc[Իs-ɨ9-kfwy-ܚy22[GhS&d)#AA@^l|u#F;_L8bJ<\ԮRRfkj $f.'#cD:f`~/oY*v]3aQ_` 2w!sNlhn>AKy-o(Q .)ʶOu< lK B5'b6R4FBsͳ0LSCOOY˷~$ϩYylFIdG) f~N;'1jmc*h|E =xoPͿܘx gj.R7Ey1k ڿfLzii9a/v%4Gd#xF٫h\[ԉx c7~)0䎏SõlF@~ xJ ުߓeB%BE"7"'[zߎ'?]e <+Qqr O+ b6ƒjS, G_ֶq\jo-_`tםmm G7S4. X Tu|ݢ_Zܙ ^y=f[t쨖ߘGg[M_@k8OH0`eH߅NR `gw/{\w`"3 ޘ C#\bjfwﮙo_y\v>2=3&1123/?qլm| ?f*' mҪsYqw7#(:C?g*:FĉfX!~61flcR8 4T)*D.D2XϦR rNljˉQ~nb`Y}kKN\ϨA_#S*ܽ-#Ქh E.+`i\̷Yn[_4{d_a\ @vGW( A'U':0.*w׌j!{+89dM>3p xDz4ke6R* sZuDG ֞%0a]H G uĢpeńwR肮^n0E52ՏZM*!VaVΚ^ hi4bpD;0MH8fuNomlP><"߃vіOj"5kzWbge>fBK^սx5;H72Խsk;mr˱;ǣ+SP{*!azy+mC^Uv@6DkaOvgWjcl/ih+ 3sK}kK[ǞUvLO]S}-*_AB,g=9R/P^̳ %*8 #Ddh~0M dXkn(0NL6f)A-nF~X:d}RZ~O ) Zヱ7 ډŬR@. bexg%ؗ@wKԀ64n|{EyZX\FHmx5&w&V?=Pn!'V+c;Oja<٧p-s3?Ӥ'S^eyAC&_"u~gU}=400F?e2mj7L%t8]qOa 6`"wtw縀 =\7i5kWA)z|2 /fϞ?>~z^ (;haߢ/UM{<(hYcmn<ʹd׳E)iuc}_ $nأZX1=22l/Ŧ8edVL2 v5Up%gM%氌Pqs335 I-e3JܤV`V9wgXBb^6\O;zW6,ۛ~)f)dOu#d]`jϬc@=mKFĦӊMBC9-,G5k ?,ό4uvpfL(iŨܷlfz{?4PT=].}l)B1 \˫1yM#ݴ_U+FW(WW)VɗgoZR`|5$lxb [Q(lD˹M|zYp֜0ZkorӚO;m';v]6'Jk<㓴;3]T_GtTtMfqg*­k#tTm6č¸Rx㉔ypǻh%\ )>MH=\5FkPe(dC-@.xձ?:8[A@l}r{QנQc~ 弰Wy'ńdTS]U߳RgR_&vOu?WfW(EGuֺ*[~ 5Ukg]"?["=ڸyB1.P΃݄r͚r͉r͓r55+]u^2Ʀ>O'S'Xp 1϶[G. fD3^N]SCTPUk*J6˽o-n?\zXaӽ̹RUdGѵ ֹ,і}?hR_͕Z}Υ5#ax8YXEאj4M˂H_ոw҂R j %rUYZ"ϒ*}2~Xxj,Ċq51LI9\}ڜk/RF泇}EP #ߤ<^<' ;N$ :䏪O*ʒ,ypV,v_m}Zg clj'uUe- V4E @z)BMv0|)4vi`*X<Ͳoc[[n<>F)%},}-N}dUL?{[ˏ ]}#~Z#5" 8Oƹר'8X{JIJ>B"SC4Ci3Ez,G[n-_Jdmhٮ#EQ-,ѣuٷ_jR}|{}AY>M>rɖ}a{:6 Y,1sekf #^a >qUMMI-j&!yDɇ8yD{ONG_<'NƱ-`!W[m=O:K^>J7yaݷ 5U+R{_fe~i;^Leqkd$7J>9u3 ܚ-rk糼. S8*Z\>ZZl(3PaD6UAϷ컄3 1|#\Ss@gVF,̕(NLGhFjG_(,ݔ[gdtc-"E{*:a(?Ë@(9h``64v(Ƞ+T0 ګ]<̵σ4 l(BS MOc&:>M}m_ȷZj:Xp$qE0L{?Rc/Fu'^q3Y +ۦp拏C{]YO0޼I#6cd'nU/|ф-CoOTlp1qXL׼Dl=!;Qu' rs#5%ڔdc+P}(U-E_åA] Vj)\"͵8}O3 *N)q)egDXn-zFKAJ$UDMoؙnu/aHDH\O|u9eM4abk_ڛ+E7 7Y߯?^0"ޜqKlh-EYz[@|̖|W|V6m2U?_q1[B@zrr<.^m'7QBn,l3D/ @MAWWاI3%}#Y̋4zW?싓ZȊukUJ)Qg8j-y!H}Fs+o&Jl)zsWTjk qbw*GUgŐ$KF)7FTG Bi2Y>tp6|-mPsXtbmWurpd uE#?HXg>+ݢo?%/P9 ioǡ|JVϗ= c CKf[!)G[azS>KtQWf>"Eů|04 }`V_LL2_|:oU):W 7ЛB-rk)NwT;GMܝS5i2Q61h ˛T8Mym p/߻ALKPssx^A tJk;$H"N:;Uq;'K{*N`riG g*x T.*tvWQGrMAQC2q=㻟82lk$f PzQ[x=9fYّ籍iYwǽG# Oɛ7HKpr7.]hP2)G|_=<;8YNo7IdI!guBM¢jUh=w}}O/&q.?h"kdLQ6ȸӯxsnZu={Avq{Éqn{wolA9KIa3ZDDw`L'5x֐Z<_,S~8! D8_7/q˔cΫ;MAC*gtô4Xߥ?h#9<"[l"^gX۬lިS?-6_PM%%q?]s bE0%AU4M_{vOұ!qn}![zkplkIeJy՜`X-.DgˡSЙb\@]d}ꑶkʄƺ],p:= <,'{4C5bM5kW%\,Xu4U$]ʏ#?$^7öc;6}iW) PLྪe=~>!y}[C'E %le+. RO͓>]1> pAMNtTbNC/t\lt"R˘F[$molվ0 z-vkr˭yVBVKE$y;-[ĢUsxX;4^_ >'}1 %tiϮ1%G+H5PsԠq+/)טrId6  }EW^tMlnb-‰v ͿjjR3#kaTG|ՙtWw0\6I(h0#R~ى>>MJ:;H E4蚢i}V*Z|.c7Q*P3!gfGq7M{~fr\.tST+$wB +uV=n !CIͅZ2na 1Ə h.^Vk"^G:Q1{D}Dٰ]2ɪG?R dvb rrqg3%s$ٱȱ8C,b[8]6"@J%DPEoKotw$32Tt%~yv{l1KFӼ3lEk?#h+ŊKt7$ʲqOif\ٷ<:.l-5W/-W,[-pu叩Ͳ5GR8'  -f*) 36w]daqLpC4YPÛ+~Yo'T"oO"mfG:gF,=Tj*),=Fx#dk~է5247nlf0n44` o PIVvrޔ`.4|Դ[qsvY]F4l9uef<{Y4yY(K4keȋ)tU?ZKFMW܏#byˢ?v({7q?Z9anMs-Vt}uیf?ACmPG6+Fc{3Y fIw)ר{iHDo[n5AhCwORV6di;?(VJD+$.9o-G|G|P0 ).ܟ#SMyAA<H$w}WL@P@>9ȁ/ )uWT7TKBX94gZ =6d①+hm ,g|nlDZF`\#=Y>__: 1DCdX<TQQ!5Ҟ#H`!(6W6x^[o6pO)G A_Ystp݀q9ywMPz*dess ~qgvqŪ۫Dt/t&.JCu vu_QDQ A EDR@n)Ρ'ﺯ?uYf̓s`0 X}6`H#^FWx+2Hzi;^Lq.CM2`'pq5 OKDLO{rkvϪx&P!l>4EG Cʥu ?{$H Y}䧠W̸sRjR8*bhx}*ORV+R~~1]ʹ-I lUo"Qa捹8K7%7_$S_NѬj-͏.w̄Dp!+ 5f`7Ak^q8~ʨefs$^M#igMT=rCY0Q̐APRa9.}Q!6ˆ}>Qb~ᄱQDDz]ּ&ݼ]3G +IBN,$ & ҁUoU[3FO=tN`7Ss~=04点bU·{:{v q7W*lB.yv+hLl㏜,z a A_3GıF;ȍ&7 {3byN'V|e[WlB'>%b J1=@ܵ"U4G'Re8JvJJUpz{c =HsR1L|giahgj=Cr`z3Hxl/hO,w$}gۉF'1J9PþFbb⿫b~qjUrxb{U\*.I}JӢy9'JCw+LcJ~* ^&ǝ}[_ ZW0Ig+8|Q~JH*ABgbV}$yah܍O7;ŊySRkkCAXapBЊ㙭ͥۂלߪQж^ؑfݱAncUk߹{G,."͙8d̟eowBw_gdim+} UIL*-[Wyaf~Q.V(tCK7GI(}֛<'%{pw[Z٫J{|&M˗~ѭNq;,D̋=UD2ٶD[V~~}+:bO*|9Xt<$* S؞|4c_3@ \Z׹u(o"ۍ\l#c=XNP|҇1hBYYmb2ْK˻(H KJtBFdp-sn>՞ `hjYV;L$#_&ԭ; ?ԲsNaݨ7@n= ՛u2kIP#7.#(E#$Ыav5bM &ؽyy|τ`Ǯ>6jIv3N~G :ޒ[tY:y[{hWn _JMRlBMTe&e3Zp@L{[ҷp oS@(W]r[dlҾ#ME Uy=d~yaK zfTLo]wV@UWuvҚB䶦ߑ˅5|aslT(',*%)z:ʾ'zN'+jHuvpTplP@+!sϙp$نg̳N|.&˚d(g ;(c5ף#Y%7#79t[JbjxjqvsI+26@<|; @0Z߷#4;|m9٦۾cGKw\N=hÊucC2NV#f[&p`P;TϣA ,b@@A7us-EyS,yPKrO3wO3fwlD1 xa bqJw-P-~R{xqFO= |-#P|az=s[bhbz,SoDH|Qi-rǹյ]͎KGZ kVz,_uN 3ޛhYSlFwQ/t#%݇^'ޞ#:GWu~ʟ0t\M*β,m8r6?Aѫo:.^X<=pt鄷m~Ds{{o6E_p~a .;OnїnUs4˹I: A3KMޅX8Pn7cҲUdFqW+v }cHlRŐr="?$ ޼h{fB"Yq#wqgnwJ=tAewo]vࡇpn!_|?~} Cۂx.p06kKFv82ůUfU SXTH@@x@=y\ZA0 i١Olk.fY[S e]tq]o)!z6nhHhcEO[w>UV!2#5~n@\~9|U 2o+Ir񷞍 ƍ`B tl[B ?<0Ǭ0K}s딮cK0cks#TӬ"@mԷ6<`79xNuzwx":U](u1/sTSj162?>^'`>]b,kѽ C@((nǻ YT@iX"LlsGSjyb4l{pōe1 yi;8Z%r銷yҠ|M Xlgi 6QRhlp#Y;PχQQ3PQân6ܝn…#4m[Y[XZ"[}~S;e"7սOL7]BS䚒\,=t7\ߖqE)9`)?P=&`Sb8e:lϸCIA4e'SŷU Q/.wc3$ /H3ɢ&&mus-Eyk<YkЬǬ۬u+,.8y) OA$Yiu&  8p/.n8&=ytK9DGO1cw_۹+ lcul.Eu.NhJ"2Iddd7%-F˰0;Δҡ[ߩ;KJ\ i#mC%8l*-VhM03<=Bcvhi׵QA)ofo>Wed_;XO j: j~m/m?/J+s^}i0Yetp`mw0Q4a Rۅwӯ&#Tt>&]#_|t7ѵ.}m`DS#!V] t|БL%]PI 2nT㘓 [ypLZ \)5ёݳ[d\tNGcDjgn\pAG@=z!Q̉w1ӤaVx $XTx%#&;?LSh~ldh`wg}$iNb.nKޕ32 %^{џ}n:kG0 R&S3UjsbCe>V sits/ǖum6,='/Q*J/RQ_n!||l}<}[`r*޾4vT2-۩>T$w`凝)[q8!蛱wReu:%sXI3R t/q!w|uf}sjw 6]@o"tAb$p/pODE%^A<{7&f]3~tEґ)K o3$"y\Z|R 4Lm ]/H= ާPs5(yQGZy6#,1AX17_˗4`Vmc"i#+eUB .̰6#h'l#wKO"/p8.;3W/}ֶzyo\=L~(r(r? ' >hL5&B~Q5iM$w`t82Ӯ9R;~Ѫ'ɂicԓ3sI%^x̫$yRϴ} ̻ܸd60G /\bFղZҿ.@@/9Pw @#>X8t_x2u Vx3 );+>),#v&O|(X#>5B_֕0'H{ ' N`0ZսA_[:gjGn#֩rMѬޔݙ[˗] R~]>BQ`뉾UcGF!JS\=ޜKݼ` ?7Un>{E6 `^k*;3gIHF(T_p41wTLYUe WdS8r'Go{n>4zMw^$3˰3Vo ]6u^s5reΉaA |,_]h]/&]*|l#2pNIшUu674fO %N\2CI,ډʖ7K7Eݎ=E]NgDZ7_p/Q0&qWs%02dyl e :y@+9{YԺWT#{V{ #jDs=owGCC=ctiW#%bTA49t-_Zc.5173#H_:׹<4w4=>j߶} QNt5%F@aXEo]L\~HxP|JwݭQ".G 14nNݨc]#ET~oh4K5?yL3T5H7X;[.,bwy!piw CQXXwwwwuL~qwÎh\\mlT8EHp0BR<[abP6.2)L:l-D]]A~RT<';ky{npӌԎjU LX I~R!yBҡ\ J*+L%2@ u]?+錓}3OWwoL?}]:&PːXhPI8ۿ_ oWGSGo`I2~&+rQJfgOeȁ[@= lsʄ磌X$FGUFB#B#y;EF\??[Mb욭',e\||m^)rcuo2`7 - n21EM+ DZ~ aIk _ 5tisu-1OϑOa%}gNx=RiMb&t5n[Z^-O?˔4\*Z4o4^T_BJ@ 2woQaeQɞ%5pQ/O]HUCknH䒚+c<` J+>Y9$Mϩ>oO@@WG9gK 1K|'[t~zH\jg#n/A]֚ǡ*i0=S? \3VJTu P>bilQizu[wVtj`mniҳwW+K%-.ˑLM 劫h]ا^ZziKwcn]< Bal)%6:M;^ }1FޠqJ< cꢔYϐjb-Coe0t@ U٨!z#"G7r/J0$qt9uybalnXjusky/SZ4b |9 ECbMh3QfrxkGF˸\ \Q=v2=_:4>l%ٙe8gAg/_f ÷=Ա,֭69YE'm)^ʒʒ5"yiS< b 2 :&^P}&Ӧ E\R 9;.>]z[1!i+V<5W*ִǠ?P2KR# BoJu iv.ʣzWn-˘h/C]lPSbwb?bAB4๮^VgKwztuΦ8!;V=}Ki Y/=U wJOgiǤ/z^|!m nV?}*zNeVg L3V*Օm<+ӖV@Vhgmz5B ~uvS~iV|*AoɣC%OXp6T>Rciv= Rڊ\ϗ@f%Ekc-ܗ CGTlmՑ"9j1} ʵ?;2{J>ӌtSL_F>3$dR8DWE:0FTArI}L퐳w=+?*Ζ^IQgjG;! G[?C#4sCu,C0a.Hk| ի+Z0L/x/)0/w{ScaںBH8d $ ?+t{tyBƠ)frvt@F(z@?vljf冻׺Y4R5aI޹N:'&l=A4Oe5Y!CN=H;Rv.ːƬ6O}oP&,Rw;fKլs|j;a?g@q|2 Y F~uUh[cC `>oڻZMW'Ǘ{4ǧؕvT.pKi9cS9&u^?at\ZTSSpݻws_yJ>y;xN1pIՇnd ]VahWG:1Q'fIg0g6|5%Th]2'j+8WL95A55?_ [ Qz_cT>iQ Du'e ̖+'k,b!M3KOOs@|@zp{6 =N{O^;&xC n %+w^31}/{ [|b ieZZ,engXT{ݼSq@@;IYT7(Kj)F#d/"91ԛ>ugR?nR%u\ߤJn5eVD`Ѣ]:)ݦ5Lc\}&MsnIzpfLDeTM-J5NPrH23Z19L^2B13ˆluXƍKRtI;1c̪t/%UF 3Ή;Ҽ{t ]U#`Ǜy{Yp~aF;/o>¯%&hyp>q=ug\Ji>w~t 7:rяu-}sҐ/'f7~Yؕ0A@P75jz$f3M`7X+]D{m:ZƲ>Gp"l{]K#&t~Z8^Nl_EY,%<igl=dn1>GA1X;Xez|UÜ-۹x8U|es(H ـNWӣ`AW%0,}tLgՌkg+a%[t-=c:!V.fgF>zcwZ7Rɣ#C}=]o`h$sմ}$7}qIg%mGW.L|vt5 L:as<6|:CTxEѨQG{A|c b,>uD6)ǻm[zꌆW]`okOZt=>cz|\6GpH,X  a&O'ŅGYX%f x`U\?ԥ$9wNP,/sc"ڣ_̻KT ܃:-]L4fcxL%ԩ#,&T x8U]"kf,"F j. K):)]fR`N'B0X6|W{jCu>FxXӗ=mR BMsKP#'sZ ^9m;h~+]43=THq0CKȌ^:+'!Xǫo.7X {Z7\\~]n";i: b+B0kVE=Z=v@-krdcqᮍ V:^Mm+cij~4|eۈӧ]Hbg}S(gWA>EP 0X|G2ɺNAb mZQ~kiR*ѕ%7yj,Y5*q0Ƥ7TjŎD9w%{:PNw\`4ODBhVXm{`al)J1hp%ϥUBm VZ׹u#πOWdddP(ccc3J˴krI۲u =@uJo-l4Ym+ p%1Rng/H6MmȰtS+,Vp)#@?<ۂ@0@>(5h .qɿߦB;[5)ޠ"غvzbt[m2c Oo a{F)gnLu$,S43O0Qh]g,4>;PRE08+uH;mᇟO u/ JvPgpb%)4۴ ˦gh5FO{Zٞ9l.򎗳5n롬{Y@/1 NӪHm >ElOgLjPP/x8{s뷎O-K_YkˬJc*~UqH9gS-ݛ|<1O^1)O4) \WTVW]:gSkcRMo:qqL[7YX2E9YJ^oxc[3CA[5-Eci%vN3`B)^k<kjY'S疤%Y(Z%=k ,Tͷ|^-_y!\sJsxUXH^X֬DH;ZZnC Wb!nXH*R4p.qq. I(#%J*jwOޗ)sXTl:U 2s4Ypi{Jy30QZK4}CnW&~oU)O&:Fi.!@ Bذ ,NqxxaY9A"X.?Gs}EU36?;}]m{=6wQ.5p?AOW!+, Tn0Zùg3`DǞ8{:)l>#mL0/5pI0_st#nUk+`= Jzh-4UrdgXgZb=90A&vtɡoں<58 {ਡF+7QCنF~Ȟ&[Ɨ(58|zX,#b-v)o[ܾ5 \[GDӧ.?VcؓnXsM0fB`-7`,U {9ș yfJ`^\Lզ[:r13UP[)-P(mARҖR8]wwwwww`!KpwC}^$3볳Ҵf)smd>pIbs6A31cgN] yHpHcE GLskm%e}{47 GU .".8kO=Z6P{XP_ą!Hco/D `MVTo,գ Oy@f⭹k8]>9HhV\I9sRcE$9sǬ6qTto@F !VHl@@Xmf\K 6CWaENݓű{$uL[F3Tcw2j2^rd8s%=@>ABPB׀C2zA@J G9ۃ]g!_]&!!)(8DC+k47d3/`YH\lk=Oڲ(]"^x!+]QbK\󉇃 49[.'6rDUd2t{fR7`>y {yw} O<+odLrfhxM*NOIܓJeAP R_ⷲQ $O/{,y1vud'H,N|Rپ2l]%C\bKm2F^/ЦMy#Lzm`%şzj4c4`7>nhmZ.Ւ 26}N'+rnN Pe mF\ v9O3*$C 4 $#,]uUX5?lj l%aTreqw:rF$bK&vi59fͦ9ҍ,p9zKPIh`BoV<\K Ο7 kDd^H /g@5s_z3񩰗Lj2Ku9p?@'%vÿx =F{. 0U3K/>7oaY*E)Y8iH`驕_ p;Ut1 &^ib`w111$$$#O1'DYI1 T#db O5[Z0|p`>^$gϖVaӯx$z2=J.=E'7T2YunMd@g!}6qUkZ$D;gFd:Wy+GW9R<.ˢ޸ڿunֳ׳sc4I_zvg2U4ԩFVlr͟h]( xe@H mvRp{}쐦cQ]FeY+>(XյQ!mFi%!F/"z,H'Ǫ3y1h~YDhQ'ߜ1ʶ)'igBfQ k՜=Qٶwg 9oKD\SR:)SGdP5vDkq뽻E,M h1 7s.v 67ȱ)k.`o qhLE35Z؆I^^Zʶ 140]@CfH8̯A7s-]5O¤ҹ7*X7kYkXOYo`;6B:N0{v6urĚ'GwȆ(.(G&H:_/Vl ]a)8,:oXaozpjqe, e{C }S6`QzSfoO1IUvUO.C^9^F w5|)J-5÷֘R }|3fZ@}o^xzBzBAXw.5`@9{VA:c\:ɭ6 !=g=7]arkg[eHzbhDLKnӇQžuWʞѯ]-:h+z> |gN%THG媅&9$:yIR~(uk-<'RlêN'1C_v}g+榫WtM uH5ډkN1O0v??z8|>t,^“OC!:>@\Pvy:k!1,.$ej}Fk>ɿv^OImpB0ICh-t] p?vg-ZA/ _53߱Μpۦz~lӍp1x:E1S@bzGGJG\+*{]x:`O1NA%=I;;ƀ\ !ywK7 {(G 70ϰ=OpqCǬ 'Cݲ++ *mܸb1?A?n k-j 4!WfZ)yY5i'|gqeikpv]m{殨bU^[t9YַW1gPIl  *z4^73}{7[_f/["zwy|p{뽏kHvaT "|'X1%Vѵ/Z KSdG/IKz5xpV@3Fw߽<^WW'%%$$$yk0QruITi)!s\&#oUd.Y f}zqjq~)ysn ȓ-%Zكc5ڕDᴿ˄ьBJz_ҲR" ud:c'WOͯ.د_-̅ AUtµd/fpq_l"Gh//F~5¹`BbɉL ?}u dpaa`h 5-$+L7_L,Oi4w$sY~Le'~!zM}Ri0g[g:Ā@ ryLPjhffH963%oKMWY)_ApD\߰I!è1@K:43Mri:߮J^R5ð17_* XL6M),Vbkyss*4#<.SNd`ClV^W2p+ E!Kvty"AW:~~~~ ΋&k>[Y|%gW?nym{]rgHPqKH[?4|l^r zJEh^\$_砜5=89>8/{pr9I\ϔ3&j"K{X Is` e}Ws_Ѱnjp9o N&MyY¢]p(.3FM%B +DϗsFh8j\ȨnIq3]oaD[9xGX[Cf_u|Q2) M84IO|,k*̩ ɝRzl<}~84Ȣk'rYG5yOL6A_ڡVdT6@TYg+TZ}Wy[]E,]ro{M۲GGOwxK`5=_컝%tJfٴy$46V7On]n5BER&WB 55OCENrXWYˋX=YRcttzC2%a˟g^5ԳF%hڇpW'ў%Fw|[H J5Z1c Le_`Xd ^]/c(ڻhnBeRӝKRT㐵1py}p%yF pPXzBE,9'<\8XOolͤ(MM)M,ZzN>Aq |M,#W-vqz=woK}/GaPF1gaϪOM}z: |j~ %%s$s%ꢵr̓u JZNTqH4D2Rr!S=¶?±Ÿ+@e9Z6]z/U~&I3^"Z8Q0S(;R0X9$=1:ۨ$D$2ZVkR-G8<.@9?@כŹÌ}m"Bx | ~o,bLZT;>Y+/דVnfT^!㎣"5J+Q|+E}ηr 66 l7 \ӏT/]& F}4#|bdk^ejTlݮ:/w&tfz͵]ɺ]+y{tmqVyV8.4ksJ%h ѿw O+;9( &1O7.wne:n`I[B^9laLtX>ټ{%mA~ؙJEj9b9wUoPюN1w1/nB [Qӹ=56Jڑط+~϶Ա/_ p?A mewd^FuIG`X4ɫtmۼYpvuΑjٶt <ۨ dS 7p ,Td0e#±s>!#HbCieܺJԠf8L/8(8$D81oA%NٞtdbZu 1 Krt!1iŲyޮ#.-ve)tid/^cX?zk5Om5Dm?kiøYte].Qc` -濅vT*9Yz[U 69u[RJonehGLC~ $ 95P5blZ9$w`vw`+] h*N07 *;~Cޙ5KX0.&#LF$ن4 P#P? *;x13Q3K*PB;O)@; s <{ySX f<TYҚR[ Tڋ;Hm)`@J ` +tRq|Bеnpd/eq0W}K [H-fɓ}B&ΛA;we^0F6Afϥְym`[¦$ؤJXvה)Xx J>9J)2ש䙄ST - YWtD 4(OYg owgs4 eh\;+bY9p\"Q:n N!~6Q9;XM'7\k㛃̏>DԖ#"͏< JwP)gǛes@vv|Ln*Z2Dj40/Ց\yPI\"^m_3HSϑ%ye,ǰTIL/ Z_e{jo/Iz'#nM</d.RԮ" olN޻F)5t7^{\p ]ҧen B+ ~3eUdO=]Zai(8Я^Lyu 0DDkaB/Um$~3$g.( VѧsC7csm<[?ȭ=ʅ7q^ʓ 'V8'^ <@@p+܈Wj(T۾ 궵o lߩg2^z"9By6N[4;^faQWݹl_x#km, ė5-1wW=]|>bpog隠{ƁǖZV~qyӨ}B@q6a\yuOC3֦izV=Rs Z5RNw[wJ~ߠq_@`PġÎzb`UQz%  !)% f)i SoRv@g1]Vkw)E2!R0ϔ?'`lg&Brօ+k;/]Q .v(7IU-n(}4~Rxkw}y$ݰ3G#jSΓTI EMD=E>zX'6='4ƐSE֋a?A={Tdej+w4/3#x6Q$32_(O~5,wAʁL㵭 *q`EPUI[!BU.J5fM,E1_L) Bվķޢ⬭M@x|HV3  -als `{=5 Y-n}w[ -Hl8bqI"/bT]83B T`@jy ;# Ɓ>Qҹ|* t` ukmzruB98zt=h+`@}';Jkϗ _1&01V r _j6L_-os$yhV\q]~>Uq8W?,ǵUΰqM,^5٤vf)\eTP@ >j I2|rpGکۡ~qyu 2m*F-~ݒ΋3VVB4;jcknu[BrK0S=Ce(Y@Ԡ$(O?](cW2X>R%v<5_OG34}zQYruoJr4٧\+rgG&4H/G |M!X _p>e~ɴªՠئ_~•:qb9*8L=oS/?~koSٌѽO3-6ms7Htnc6wRԡI$v'v;~o62Ÿp <GD%Kcn7 >wA`;#TA J{yw}/g::/?`pe0w "}4UdibǦ#՞xwzG['Yx^翎JsuHc"fa^.cbx>I{VkU( 5+[U!k?֫yA3fӎijG v|}|6M|}Z-lZdG2Xk(^N,caK@PG27 ‹UqVpO?Ihwcy,OK@_)Dיnj\k3 fykt]b5 !!$grxP,uXIFyNfradeP.;]=:;726S#F6UX$kdjh1=0"2_w0Ĵ*gٜB}݇h,gondbJXw{s}d,8v2JAϵ絩ѩ~F F^sj._c!{%'; V[d* Y5[BM "t2\$d-r=lC#;M6rP+unөVκJhNqf;yV% O.(\sڿCrثLxz{B.= BzX;W3+p‡`t I,i= FuyrlhZמ.NFv9,{wD?GevQT8Q,S_ ௯}g?sd_kU/`} ((Y[_.#WHӂm%S;-ڳ_ey+i2S}g_.;鯛YW\e<ttהYਁEbA2WL~l8gkb 2goPmz ?vnw~l|gW54E[QAX4ѧyU zEii$Ѻ ސα)&8t9{h/$䈃`6)S.\&SީG|h}}V8hˇW'h?/9҈7ͬ9a u ٻjg*~uL'Z>DcĔ;1;&H|UrV}ЀBپGR K[5 !M@(OVCb=Y`ި El)0MLPرȚ߬y Su䤃b>\G([k+a5]ADfىD Gm͇kfhG[jZ{fB"vyd"J6&yڈjS*+%EVk=9XH2^Pc K]oX)e.7eUd" ߢ^a7^!jG|z#e:Hܴ,RQX̿IT) Ïծ_ԣ02O1FQ-k)ֲ0nr2V$%g ٌEFQñ=v 1as(ѮxV0fK%~Zk؝zOBӣ8",)Dߑ5ς6cvSpQy =y\pK:Re!Cn+ulpSߐxR~ܳg-z[&a[{>.Yco$vI~ "8(:PBC顦'&S;FB{+7Z|qE"AzV'RİJX ]%{S%] ʩ÷+8hGPȲdDBߠqbLj,kldIw۵2FzX_gWp&y_xJ+rtANiQlԪOxJ|VwXѬyYiI׃vҡIbt0y0`v&ޣㇹ[45fٓm jx=@nkKCqY,~OmݰKѦHRՀ@0h 9 ` ְL_:ޟ#hoH9w$X'n眩Cfr THn4βF(ANPteq ?"&^VC(Mia,Ok<ٞPp:TQ)%[+2Ogl0,dJ1 75J%z1vޓэs+xOlqxqx8#~5<ꬠ4T !l-QcGz& N7^E&oQ (ƅNk|y^sf3a[i䤕#XRU S&[{9)%Zvz&/+e, osq0 4 kJ5EQ/_bUQS͗Z&/o.`k&ԧilnZĺL sތ݋0N":W?)4:H#<^2-{cɯ=uՅ$awU }[E/pn&݊Jޱ¡@z;<%m+ W XL?1#k KN"/XTk GݎQ_/ժqX! C[7I m\_/ԍEBK ) Ջ#T;KO&(<^G d jZAz>Gƾ7F+L}G$<-U>/ C05O6NT+ ̒IQ 25sqvj0SUIV.NR KTJА5-&y߶M]=UPn:epdtslmmd:w4^{Kpu HхԌQs zpG;Md swdaM}o ;W>6AUcMa>FzaZiQIkHSq{BO#`?: R ;ڃrۥVډEoR4D#(IgoVnhYEj8*C6ÙSr08h!EhX14R Y|{\ P{зFB e07]? s,N3ާ&N6RəvI g70m7nprD6=,^_՛Y;0n)6V LL(OaUHjd-0Dxjnw|%AK*wxM(h'+'9OXz/x9W[),ŊdgyY%+H)ںPaM>C9a?х\}oZg 'VǏߍ,ĕʨP|]"d$ciem>jÐ-| Aw;yd0I&f15 ]ChZ.*5Nm*o蒢9g_,bCmƤzJBe9"E9yBa%Pn_M?:? |ȮoSY5u볍(ɊS!X +if q5T崫4մ,Tȴ s3;'ʇwq/@Xݷmqe&Q^#k0̶V#H 5,K ̈l_Jf\JN vp ~eFبech*XQ^&؞8CGpr\H',!ʄ3Km {Vt`傻Izaק1H*~E8K PO60j FMVp-ؙ. F҇=+bKh Yvض>N*_n率_| -t*x;6|jm̕}?CimVռiur!Mz-NapfFPxsc*km"Ge O \0oL,sU*A FLLH(@L/{dxFԺ;^U$oL"cM&L>BfEu&FHtRѦqƅdЂyj}5K܍í2sv _`V 8XGD1kC]dE4K:|ܕ0j"B0H55 zsڀ^Qxvr+md %CLKz6%V~oGj Q$X#0oqw\-G<{y7SAeǃ"0 M)u[C}6Ihz@TPHy)m4"kL0H\A U0ฬ̜%?*󦳒Wd艂Zm|ZQxDkp8FB-o\sE/_MOWU9@P0oQޢEqEɸ-/‡4:Ə #;~5AԷtA%-D D˯+F߷n$A\S&,)tӕv޾.0vå3سjɬ&1x-! "!Hts\ WFY|2a2Sqd^t~)_县R.rE%bǫJD{̙*-KΨQ-˺܈tsS4&])7CBi&$Y%2]'TPZ)$8;dl}=ޛ|2kWǥL PmJAtn=8 GI^-ِ}#@A$#A*@nQnQ3+N+ɮ%{ZX 3=~ݫH)ors`Z,4>NqۅxWV>*9m_U$_ytZ&6-[^)jj`k/Zof~Kg.TNh=Z5%)6Regqf*!"M \uF8K$uΦCp5a rzR?uh$ -C姟pq-`>$wVzm C+SmEI:dS h j'r@- ճËWo˯9n5LA;|JkvMa  QCޝx"%~9?ËX 2Qy `g BB-j1"׈wiJqTT(n{w8p|P 001PAE@ZF[sss~3d9{̼ݹwqcq~c+ԁ(ˀyA3[#J^hfqұ8Xz n #pљ3 ;!l=Xx{vq$91&)$W}V*E/_^uqRJ+WTslib/maMkc`tbIhck5]u=*-*++ቮf3J~) |MOߜ vήok_V,[JM3 rLUPʜK^~E& pP{̉bځy)&Eemt6mĈ[ew7w bjLUUė;rDu|3JǪcFIZzCe:G>Nɐ2S@|dRnE͢qюz>7VgUXL>*49 ;խ@~&[L{iOp1$FG*;녹G+ƅw7tX= ի\yz?vWPQ7NGnn ,A^Lžr) .TƳ6 omlmWl (miDHMȕ-)k*mjElQ#/g/ޠ-|O}0Hbh~2y@Wan% /|M}Io Go9T@$D"&X1]-&'V.7ۭڱ[ 6I9>@YT(`nȥXO3=ctA@@犫tPb TB>c]śC3zkxkYݖ=8@-/5r)W4qv0FNYw;;FUk4 v[&a([L\`4h^#W.Y'_—]ɑYϖ”IW9m; < H2ǀ"_rQ[Hn_&N/$v"K,Nh1]"Od{&z_j{+O\tiFwoSk_4  A(zιd1Gʇ5>!fԩ[ {#o7&Q}rHwMډbw B1B=gࠐb.:6E7)dC(_,3V[9q>ú=htN*,nw :tCSeKtky-q)щ?_x6 ߄'@b^/ʴe!&R~7u%uAXoViScVȖ(bp; mWNYNxP0[3) թvM6/l^Ժ̜:22$X›]#Meh`zFeˀpHp:gS碶' c*`h'DmwUbPn-@NC AKړ(m~+iqpB6Oվ꒣!u*9S A`mBQ:#Qc9Ϝ*\[/)w}3$_b-# Z,J5'T_rϢcqukZH[ZVDe/Wc?zɠOiWZsЙi $exǬu^H0 C3L ΋o=g4s^KdJP;#~+tYsY`2$F#^xW N3]6˂)nXBp8&>w>b'2bLu̸ָ[$9PH8Ur;68}xS<;m2Of:?0$ {x"tQu͈2`by*3B6 M"S~߸ WuS7lUΞ?xp>c/o/+N=F2/,$ >O ,oٜ_Zz,<0XmF0=mPeP  ݏ;#^Ҵ<9uq9F0V&_%L?`l}dn=tV);34/.L$ 1JtN==z|ghc{pXF]E?żo~/ A,bVՍʃkI?))^aav@t^Bj9D#k|uRZhQ.mڀL]øsھl9w5ތd<;"ӄ`.EDk#49WNM ^Y( HaO ?v齞wEyu](On- $8#.u HdSX0m7%px%A?kv0&.:b Փ34NemՃl w>(GZ{5MU'_W{(h70j]yukS #_'~b:WiaX|}&ǭ^p YE: 3(S\TdIVj,f^ʃ3F(_팒 P8{n*oz Kž<(pnds 6*V Q({S׿ކ0oj8 n]f՚ >ѿO  mq\q<Α?Kռ4Aa@o50J+ l[M?z[$Jr"{\`6Ij:Q_32hs6d=^ĿI4}1wV2ho4xC?H+jVDt)\U[0^qt}sFhqpUrBk9 ŗ$Z6 "u"Q '۲IcM>Byo"q\&D*$ϹVYl\cP6.RY4}hYzM4LoTOyS=dX;|Jx|+"IZ/8vbPeWЂT`Ew xhb]&fep|.T`pX*ZvUbfFH#AW xl 'f[7H56Oхpd։4'yd5u0m$m0[O5yGkהrCJ :ų VP-ƿJ.-m6;o1ѦWQ)0KJ:7[c4I2$'+3#qP˂fQ*ѮfaQ iy|l]H3/֌Ioͳ=URΙ!Yn;\E08iXhtxS:{ޥXl҉r܎zԊNLC`lܛ$҃ٷﵴوgɻ;@B[+K"dEkyjm`8f87`etv% T j?)ɑ.ᮩm?  :`-di_2msƤK`Xs=" R 5.ɷˢ̙A  dcd/m;3ṾV)=U$K;^o>j`Yǿ܋`=sH!@V~MQɯA =B܂,u2dSfUNc΢5&d|Ny~~2tS(SHl~U{Բܣ] Zv5 'SEZ*o|s W j߲;A 3$~ N=)ƺRհĄ?Ɋu=C?a ߧ:zGJHv.n1`2+5r4tJ"^Yd4R$} 1޶=}*h"fM]<@uĵ![(sE! |AܗR )ۦd˜qsye*# @7C0 cVA꿤.B MPc_J7zj3 TM/'O]L@Io;Dh;@`iEhfپU8B+RunKH=R(@R4cqQcDMTk#H*N/p1xTh|s"ѓ*% lwX';ޫiq,yuo lz$}-ֲq 5,*K i!g'x4b\vl4 %Z ~~}#7yzlщOoM,-vnᄐ= NY^m81Qqd^@M[S}aݥ磓s/c˟'/g={th|rS{2LeHc~-:bñZWcu^'hOi&l{b yn-vt-'XgTer|DeM+F|chk2ڮKs4}Wa6I?~#X<|d6^K^8$kyYһ9nԈCJ[hWy6%FomQ~EC`-X. kEyNZe7@3S 'U 5+A B?#!ѣ&r{06&BW-8 mNzBr2k;'w5%5n NR/v<̾9%cTvUomTV <L q7ͦ's\ O9X>N9M$x^ѭȧUkCjfXyk!x28+""n0Qj}IRiQ8td4 tM~nҌHyu](O* I`s<|S#4R+xk!R"p@-~2%Ӥrme5:Y&t,]l DOi-YokG8l8/dNI.hGlꭅ̛LJve%!G9+nҲ&֠(LjnuZ#["g>z-@7\d_Aq Ξ/yЈ¨Gb4F.vzᒓ=}ғy}9X8WftPI0Y=u)N/uCM\gPBE68tzq*yL!njͻ [@e[ĝ\emT$sCΎ[;-}oawafB>R]FP戟'wMּd@pWr5oA'Fzh&+)g/xY1yiLO|uzlp|SŴ@،͜IҚR@^@v1$1,a7\#HeRJJ(bɶܟ;Ѽl,{2O#- ;)xVF[)zm}2QIS4*I=!$ڼA'Z>і7cfd\\dks?||0M6b{p(zq:rHj,pe?b>USG=*qam37,Cp~BTRH $S?R:Q޲#AXa3Ev9]5ZNO?ˡ%uV޾;@;RO +Tĕ2liphګP1,DٝߤmgLlK Lt94#\'(B'?Nξo:»V!ue9-B T扎zы&ˏ Pvt8RX~6ٗOy6\ՐTfJb82o?ғ\rC-7;>m5b4hn-&BI _Wtv`nRsvȞ e_sUKᵂ~Ү) 1ܺe4r}gEKOa@aYp+ɩW|L|!❬(Tk^H95Y/(B1>U$'V&3K?*Y BPz<3Ӎ[*<`oPΟ * .Cv[M s'H;~΁Zd0;4ӨnR4PǵY%Rb:o^amvO ,Qz\+o[y}|rTTԟy#z;N:`*#&Kق`EǣGkx+[s'w'w{ڰL}; y^?=6Zglg2ane{䮦ܟUʺ:\ŕ Uk90j+N]]{{gYwKF֝>≮7yI[3ə%qvjmr髄8(嚪eigfff1 ի|;Wj9٦mQMl3͜a0W7G5X('ʣR wtLtwx+M9RL _雠9%l-a 4вgRpqKQ=i$scلXw͢[*B}hzeY!у8MErB:fdv#`Owʗa$n#f۩ЀŸڧ&ir>m() 11&ٗ+kB tWV gC +';?p&qX0v-ǝYJ.̲,/WLSZQVU6*"f3!; %ڠBg fp7hBޖM? w,G;W662_!/ymܻ/?HO[H6{XYȧz[$!j^`=b6?&ҟ5otyyx^ȲŇ5!sJtj8iW&duF@{-뮻ZAyJ>|{a'ko-à:Br_X8;͌BrclAII:I:H;r8+KANA;8vgw wމ㛞qW %`Q;xAm,p~^\5ŮlXy/vdzn. K!T-9>`ȸl+Ge._xvrfQ:Qፘw!sJQz#_fSTcco&!n蟆FY71l4DՓ!".-ǝLu4}o7&w;ŎN=., KӔ+ MD-N| :ӥ[OWIIz= ⮸Lm7W\KUG?MY1FDEEE:wI~5wY7|JчuAv=)grFe|ACM^4-?xScLIyXȚA(b3:ッr T#GܙXƑޝxz>nN5q&C Yƌn$e|-iP⽱{ vw;<}r;8 䳟siuA8 x`wjew^\D⣢{'MDCf,<~n}ޢX}@z:Mx4uncF|Lv+wڼk>Mqu쳎Շ}z1 _I3l>i|dyƛH8pT6>KR3=T}r. ^:NR̗ao5$8~6.:Se["ΪD2fu?$6(ic򝇟vi3~Q ̷YWf˨]+( }kLYsn"aux~o~ũxM`|@u<1},` ʶnvSLQP:u(be %9SR^'̲j>"_\ܫrww'|Okox|raS}HqRFVBQDe ipHTzIYEkom;j[!SU\5e̍{9o#E!NEu╕#g C=/,-v4b$s9jRl="3tbrRGڙvv%s4~25I 魄ZG4dl̊W AfTcpW_җDMhGFCubZtju ;Y!^eHUuA躡zbt8888ĘAM6A=~fޓ 6fGz5tqb`vczKhjY2m&Y|ir̓{$toDEO5}axhe\oFoe<ٯ=fi3㩷95=w0(״KnbŬ/ɺB1j.X? [N- }&AkSӦ9,;Ig !l9p)-a!NfL^x!T;H haiIsӨSQ…RƥtΑdXɜH`@䘷,la/uKKOV/n/o]ۧʵpOU)mg^VϗڠXhg_-E9dt>@Kepa0 00 7N~l, o4 ws s4IpJUO)ޣ3|CIS*ӯT骓We0jx%OM0JB`[ Sͅ؎VVΞw=׭k~ _~,YՈ$LV&c+jYP-_"R.+F_-O ܮQ6ѫ ^3w _$,C ^H`Cq#mcB['/F~j#LCF K¹^ټ cF5N~Djv AD1wk5D;8w4keV˗$d[P2h[`<,/C5+Bm{FNp{mGͱ/Y?&NpתBM | tK d˲a)aps0c*m[?K]%wyhZR萁ˆ)Ga6ѣۿ".Þ-,ڿ|eMb{Ų6&kdHLYD7d*Tdd+DV[5W* 3GuPٍt1"me UNdkj~r+aƢ.,QiѠS$VѵK7v~ A Yp/%襮yu]?(O M>a$퇧K{CK2%phwH˯QKfv{5hc,pOF͌hE3e x6VRmZ.'|,v-_ƀE;8P88RXk,N"Ha  .p |xK|sa\%PۇzuGv1GZhg:y:ޭY5@0PtR=';r|lhgpV/nEj wɼe|:RA|H CޣW\`\Ls03ЃO%܃Uj1|4}vpt8"X\z 3;pgW#ĭ S8^6ςX t }~-뮻Z9y2JQ $Wy s^rQ98[F;[b>yа|}Na-C<}{/xJ)%%q9P_+R P[(J( (-% ) kQm?#س=|]u%YW+rh! ##>OsNuJNEֺ^/ xg~BM {t7_ɜ Vh/tyf`T.G76n!\!~25$I0Ik\Y|P|nluDUͷʆ-5]}G!L?ʬ.uP+"5U2!r)N~FU% EU!+Hv^v} .YZ3W}_sE\.A2'GɻL[t=\SgFgȔ,ROCŘ\[:︅Y%rkTsdMT:D%=~T؆sxI:_ZGrVʇK طr)Ƌ>K8KE2]LRUI֊֋L6CC֭$gN7)'Hnq`4}_[>4щ!hF Pb*-;\j,aP8F%|̥˨,^)&:,9^+V9}zC;T'V^"_&_._)_⪘Ug;k#Sñݣ O[3¸Η_9#]X=udƌF0~_/`(x<|.j9ȵ30>4CO`J!-pLS5.9cdxhX}o|}˘`.X9|mihUҮ;l>oiY#6üKq2It^Mx‚:)Yvpnv1 flѢӧ`Ƅ(qckYT3#o,k#br9]5_'@{}$-D*l, ]`,,,," zV>Iωq b9GNvD9C :g=2uoMX[-Pn]W6W`|T6j2i ,o}_|r}@>vTw)8q3h]\yso6Psa3\z>zq]gYσ"^νnd$LBN`gmu"6!/kKƴ?ӡm[ &/8C0f)ߥ){Oz#,WrKնi&}|]{X(k<;$L6X)G% SYf{GdWdf7fn˒c~\%]1y'ϻN9y}z~J jc[4rQXXֱb !S6Mў>z6~_v3?SPX,h\|{.E 񨮱n$!̛'j4UO3e͟M=v]^Pѭ;ޘ^Z!YFܗ\ -㋌']{Lo3ݵ5K7a+8`l4sT*V &05F۾?.78GMm`QJRB׾\Q,_"9 :$ƹ2㈯םgE5R,ښU{/fpX'Gİ3ځsK_( kC5[5Sn bJ nQ.JiJpӢ׫=eSÇ`MS=D:2 ԩF5#&"Jݰ$n4)| F7yf<=&ZCubкX]ia'HI|[Rdf;rF㞁GU={<][}KzwgŅ㗙O,[(iiiiiqD}{=]xW.]GmC!4cQB 7ڎۍ_/>JZj:rZ|`bM*O̵^$(4"HcrpdUŗ[cC``vSw8͊ALp1IÝQ(q4n~8a*CKodo *r~51I?|G{W:7X_OnKZx΋~=cĔYbc1% uq}x|=sP1}}-p*wu};FQoK9Uy97,M_YV /|'Z[zqx{ Q#J?m2 5 1 ru7Ch0iƘpG_ca~y2)x%SOCz;Ác-! Vɶ6.EL9gmcW{Cˆz]m :$\+LwHzDsD|Du^^5 JQX<:qWg+蛇ztһW}6 MWq!YY‹'s/&2gLcsL7y>.NN> 49@1h3 } a q.)[/hV)%Wl5%͇GH1<%bűD˚@~dU[PAގDoԊ"Ak8RyzXJǪ}WbV4ˈFۻ]:z[mɏq5d޼S+stѶ6@ߛU0,;,#Stt tIK47,g'v|\ۄ=:;;0^^ !eOr2_gz*tvOX+lۭͫ[/mDSoS,弜h)[XX,ܭ9wpK0vw1___]Rp@>_~;!N);{[p bqSOZY&Ȃ8N ޱh\y=8 m 464ufiJq8ُ;hr`SP8zӋDpX%pL u䅏1a}b^`a,u~m.}C#쓣SGgF~.7p2ݖ)WY–Cc(}PݧqCg߅M"Թ Yzy9;K^Pw(|co;#S¹^Ʋ/6,ٶ\[yBnUD%]t&#Sʜ 3F$HKd0EluLLYzdV^D(gA ZۙU6&cGn맾yԒњ,&tfDHMV07ӏBݏ)9MzQF3tpy mu4P.^om a޶5CkbϒK Wƞ7޶;@wSif>D46z~h{jlg"ŇxqH8enuvPQnxC{pzv4 wXR/~ brraTZNwuם<đ"l?_@N@9D;LW~?zvbQc_A# b1J\BA6WncQz6(9@ [#@ Ѝ ix:Y]*u,=~XGs~-BDOK 1fL1u= yyZX*nJ>JA6f!&FQK(c93 E2wjWT[#UJZ Y"|?`BmV%a֡a6a6aVjy"cFE5c'D+vw ӹoE䯆>Oo63)1# jXCK-b/aVʨGX f| g[YFFY&EwӭWӆujE= `%wН;d[{kT /{1'TeGh<5xޛ]hkg^k<%x&8٠9X~}7wksbP,11tR^E] 򳯔S.0$e[m NM Yv1&cIP vѢK1;V&I祩ddk%DY֘6շ~`. 6jhQe/z9Šr j~=œrn`d7p1GXacVvJSϱ"qxmRSěۭxLxu9;;WEiV/ԨjKO2Yp9ud`T7C?+h YAB<Ê@ms*H4F,yC&aHwY'?fdSt,A%l- M[Ś-IΩwe!]Hw GO6_CiV)v #O5 蟉8^7_}ym yӥ;2ԙf? +X7 nΜ9U< zub,4Yc,a Y҅iN0A<bl}=iXS,>x`߁t=jvP.Ӏd Ӂam$5G CRD tb`de =EWbg!9L0[Niی[q\۝@oq_ן6=MxGg̍^ŕɲx#_r5(ctaT:[3Mk{i3f^vd.=wQ3N 4rb~i U݊oNv]+{!bi!}yi44444{ٷ /iV&E_0 cXD| ]w3G&OUYƒE"L aQ ߗrT'HRl:SBiSĭy:h4 0h=Xsg3ܲZL'>"h$+;|6i-}DMTs>ԡӞ% /hk%"'M,NCl2M0Oݻ< gezv)\,n`~>`\8-pԦDHslIa/bY4).[ DY&h\ɴ"!F\]]gGl+r`_jV%S77f86ũNIo' ; oȎҘf-$5!)N^* EEr~]!!<%[{ f毜\V _6 V/{//V Z B,+w% \Ly3U _D( d+L^B9~h' ֲPn`})ܢ;ɞ9ymΊON֒Nt0 ~OqVټ~0 sqĨTwP(31;WSsKԐ%j2ˡŷfJKa'f9*Xk8y݁,H%b|t;ⅽ^}[!<}btycPQj 6Ft_r LdddO0uqǦEH5?a^&"g3hz RVmxHw)",kl oxɄV?|/,ׁęK%\ p4V9-wC$=#=zʘ;=%W%sQRNwuםqW0l~q|Hh ,c-pOWMIYYgTfuYfbhv[iaCWɗO]|S]3uI?MAh8(WdXo;y\y]߁VC2%!&N L cYKof?q .0tɕr޿+wGb4{`#YrN7 y]{Xt@cq_}b~^R D|߰f{tNZ|Q/E...V.nvIq b쵃tĹ' SI18.0`=P,U<[c#h8ʶ:#+ųգ}#p.mRjX n0U\*\Y*ݥ;gXJ+,lPZZN) 5w.K8';` 1r0K)SXБ?nRpszU[Bbb$ng0B6zGؙ$hw&+ogƅ5d>л7!P2>ĵϧ%d*f ;J?y}w1:$4|"nh;a6ץ\S.1|u$JrMQ8gR髆n4W ݡ$"& LHO;+jw6xxR:v#.wDLՊ2.#^/ҍ17/ \酜XCʝTJ8@O}QwHճ*ypG!wm?_^쒻:%e^{vONّ*bh)Tř|HyDPx7ݡm&?ZQ:&PZ%8i&i6i˪Ebhq5tzgF#לv W##Rt-At35.\-? +dFfAĚEМ_oO[Ypo iT $X<+\1lQ8p F@ X|AJ{Rm6if4AێƆ²iuX=s m%`a֭!J9;yu]w/$A>0-ahu9.)1yOMNWRИUx%\@\%-ur;lkb"$ZJdBnPAd{>aZAw!TeJeMS5.嘿#J [}ޏsZ~[UTCHtYowp5/5CG&{M3:M ƶ)W Fx:Njw >]} b_csх(;[Ĉ?<عWtAZp$RXX&?ŒRkXȞ6 _6\9ǥ >wPUҔ:)8 n "$øBV6UC8!1}RrokMt0O@HŅd F #Y^as8v͐7C蚉oR!;ʪqGR8Z!Vmou}sL`đ }q9hU'wGK% c=EȎih:o+F58;HฟknPVCƆ ^jŧiYC#+y`ŐZd+6^7:;fnrxnXn]wu'<pw'jkb,`3JEa]~"غO6 VIG CTRLl2bs">fTqF4yռ>[+$Nq~7mxđgZHypŶ7ԭB1FFgQ?JgG)vԎR"Ů+yQ-̐Am,K^̠&qfROnR6I:R:Ih49&e&0obQhCKTm݁_ѯԇg%D$,twV@RrT'GF)w_L/۷~=9_CPLw!9+#ML2L^sC{LBb6ZL>ms0Cڸ\Y7Qz[4RZŕri,g푄߷Ek\1ig%h葝?@`tuF 5pqKTa[/O&,m0nTYP/pu*.Mg$_fǦkZ4~ R &ՃaoS@Nmʸ/y_lvi8#^`L-<_M@~7g%̈́G:)<~k510rBQCݻN;fc1ư=jfE7i&g]`L1)sܚd}nsbrk|%.-ax_WkDPk)Uē#-c cH+\4ylneh󤑸Fҩ,/"*C>inh)UY/!?~L"DE`< T"P|%Q;tpS}K <^X}{8 =;hM dVL}j!?KAV?5#_{ kH&\5Xx%[z#Uu+ւ;c;d|UP/+!W冸L{]GwO~dy?cvmwu]e{a_h,ь|yp֯TMTRւزp.z`b!≊fOoR~jԡO&=1B-ϬI7-ż/uv^ZSV]pj4<{G}; u 6JͲ4Ŧj6nѲߠ!`ŧ3+obZNs9M'24}- !N۞>vVv>x9pᷞe=ɉK)GX"6,wQSRUaFUq`Nǫ;b T %\{Ol]#C6^G&irCMB1<|uu%?2UN+%Fr?.ƽZ~zPAl%Dc]ou؋BL+\>! ԆsOB[{*y tCMʪ&>n.V!)2b<ŜcY?&gXgF~tWj5f infv+iMЌ>_q4 S)m}2u_g~>i操7Sm &[P__ْռi]4V+$0V_e/ÍO~f˯ˮy]w?9È7qOrju7|dJ7ˣsK T4Du~ggMX d(}!!0xhq?fVg5Apz;Q/. 1ƯaeGVBw+P2Aeu˽\XA4 G ꕽUYXj6ukg L86f+I.{ۚTc)&+\Ȥ$?2pm*<$HX#?fNRFRLpnwm(m{ ײe!KI&_AƷ[$wb= L}:x; 5jۥP'1P9_MS| ϛI{d$F峋{Y)&7 Y+v_@I"^:铥q^(OxҤ=8Hnyp8Pphmo`rNgM*5c 0Q߿,E3NThֹ <{aMxGzƈZ⏺-s SGe}o!p[}wDpso#LXxƭ$lrCkԣ* i.wvwqzʟ% ,p3-eo\:XE^rOGWAׯ>A lhxi.lƹja^2 "Q8;c\TQLEXԡaE(0@(\9ezaD2Jڪ)iG˓D=gmF)J&}Ɯ`)"q?%.q^&Q&]i3O p rs8gU.pYHr]plLDo;-]\%f]Nj> Y R<mEY{}`o-]Iz}kK[t =bQfN:f^މqE2}<3\Mn3iB? 3MZ6M"6+YZF/7'v[#ʿ4v&[ޢ#R̗̐lgY~rS$<}0OEyr{ 2/8.5VO4m(9@;3,J4&x(vX*z|)%dN4;z8^a$_~c]Բ((uE=ZWz7hvPΙr3?XW]Å\'j$ W>\ROAN?BJ}k}['=fV+tXIS!1 fP QY,t&N 5X¾ ǹuŹ Ĺiǽ]{ٮFo_8Wn 4(`3 iw/l>?>žƹN=eüy{x=nίVDF`VXhS,1QKהnܒvzVnfp<@Ϩڐ<)׿Qh_m7 ,x %8$9Zl E(ovf> U^ v4O!6rA,6fYНXlTm ZXUS8S0PDM}Pc ^R 67bBGKLĨnTB#,Qv~ߚϱd O]7eeb~iT,!D1 M۳rffffwd=rJag).8jya40ގ^l^&}w f9t|7B.?nZzoiޭHW9xl;m\Wִs|p_\F:OT{DޓO_+ ,3ZA%&˯%Ҫzwr͜|ufTFmB  H7^N `iVWS;B DD@DD:;$]0/{8g{wwuEK$fDO7}Ϊ J/F$L'"69 N@ B9:ERf̬},|+tg|T& 7}[ʿ'/X 9qRҩ|Җ||ʨBYhO\jd­5,5Bʮp$6u&+XWL,( m5*6vs\Cr`IxHd~}8 tvhY*"G)]1N29-De{z>F( Z+ ?HIe4?^Ӫ<^H76,{}sO ѴoҜj@\}K&VU$nj÷Gj?Ìbyj;eՍ|И֜){Q9|?}7};AU6kz-5i@sg~ B!kD4ÜEBUuK}tY-;wGwlS-Alw=[W=wiA%v 4.#!Xl{3 世u]w-Qy> : ц/(֙0"U_WYØ:A %_C`qL,fC~hsr]yiOm|V@~Uhw%$)t&(nΓA pV6Stjm8C11QaR"^<.y D<}.pMs(YR1mQίҤ"X66߼E>m/!a'$c˼$4i3{kϿ)DU/ /I63MT|7hf]Hed,ɧM(wiTYdDs|j4}_m F_#o4!(^֌7e+eʄ}.jSk̦;JJxoC{ܷSֶUpUTBԋ1!Ľ9%O+R1~C&Ca1瓤 y;s#n=HYg-":Z;t5>뚑L7X›=-1יW[Z0NΘ3%R3slt!/Q5jtjj) .x|PK[< 0 fLϑ7k mbh)N pp0D?A?S@?A?>T-So!3Ņ Pu=b)n7/eGgEh3e;ܧUs3OxR"b:ޏ>ل?>M1^;9S!OtB&ض~`W2qW%h4|\7M5T4G9P h5O$_;?er`m3A+dr{B|dfپ} g̺|)'Zkڋ9ӭ@ þIeeʥf+f5L;YhQH+R)7<ƶL9I_Οbk3aP)ҟzvc0[ٟGá476M ɑêCп&kP[n^@oͳ{w_o(4[;1w_sp1 kp Z5><3vC[{JpgA  梩]')B  sB+É~ NpNŎo<&T9~Ch iB}ZyY 5F޼v^ f^És2J [#_Yezs·U$8bJ O)r-뮻ZP2z~LeYl{{Y#|TN ?\Îy.S1`/ϾYϮw3=BMrhFnL.on[vx7H1[gr(} Ϥ &=vG~ <7@jVN#!KGd%g"1(U7Ey۳g#t۳+;#GM8qH8/fa)q!ƓF8;[c?*rSg,^c4 Qa?gx?Ӳ-w=m g<H!i$~pE?瞂cl`k^ mkݱpv6A]nn#,cD{o*Gq>f(ُ5/`&$(z[Ĝ.g&۝pu |wbA W'Us="G4D}q4ڂÀyW?,EqA_.%g(tH/;;hwnQE-.UbRQAHCSO.6:U袜Is:M:rr csvN HE=3đ È@>a@C^!B!A BBnAzUL1 Aҭ54S,8{ذE7>˾+tYb@5]U@w1EyDC?b1!z _;JDZ]wݵ<FF f.Pٌ1WFI\78cx9eU~\еV1;r;0H5sWxc`~L@aXهctód+O|q!:inTo 5?1aO)Nb#+#*qu ,rHLuޓK..ruY>_|5S6uіj@7Z5Yoo|Ag(RZc=RhiklVyF*^n$9ԖnMbO!IUdtW0 jy::K]H~?`^| Z Јh=tENwFK}Qfx\V;-H!oNV?vB:XN,g3PeYq!Hncomvl(,*nc 4[sa+ԃ;/N>/pOiӔ8rG&s \.eCuWx^ϣ iT4nڥПˉ `` 6`V`%UKZ%1f/)vP[Х~7`t:SI߀Rӊs\"!핝+2_HROzٶgys/3Lu2qjGu4,>d.ɕN{H K[gz==S̛EQ$JF<:Yc?xnսֲGk P2զ׻l>yY=G=ﻯp=l9AAk>-e4|& w۫@*U&>Clbo#t@>6v;ㄡagj_Π}0_b1*^(Ksdd[d:B}?S&Zş]뮻<ɝXJ{ꄐ\M/{N<ٙ1= YR`QoZp)+W;&&SGߔäRk*Oa˓EKdӅ U> j" d˯Ζ[1B+VxSRнL=)ƷƼhLlbaᄪ{uX FPYPAPVj\JDI@s!VCrY5CAkN(# 7J%ZyޜD]_d1'޶ f?+ C=r W*yn7JpLd[\XLdo`3 mS&FTPTҏ- ƭ-GlaN{hk3ۻȊVk!_ߢߚР2ToTjmhmg-#s4wEѰPYbUY]rgH!ҍNj0ݭ_˵"L*DWivO1t __~$ P4sj|6)6b.[ڤ( uB?r?OU`k3 JT5eh n:,EQ r^(m7Ϯk-8KH#!Nx0X^<)zs%,T#kM?{M)\,qY=poګ޵ɱծ:"42'6QrTdpe>G Wչ@F,) ^m`e;:L?R+9F4ڢkSРIܔzؒǩ1zwt+YM0s0 [g`9z^g;8Fk]kAS_ 5`&՞Ġ1{{GNXj02ޗZ'BUt보yR !1 r1KV>rnEMv+,'ڠ4V#*S' ]Q _35S3&@<>1HI>?dtyTR]]½-݊)1j8yz Aa:;n:mR,%d҄0e),UMPo2 j06>X3NQhfD-5jqK?w߬?<<{o}li:M@̕<ielX);8ϖ8vg^ iɴ|vBzXa=4.#.jW{I- HIrs s3s [ R^Bww)y 5# (4ҩ,h}e#s+[G.r cN6_Q2g `$` pEPF9hK,+VW Sfy❶0tvqXJP$5txI>Z8lBqܱWdW¾2p `|\J+>@ϑӉW)nnq.ثӎO+͓7m/7Gݴ:'C0zʅeY5 =o+]#^$هGweTO'[ 'RhW%r k;񭪈!v.c?m"FQ>jۺWw; K||VǷOlS,LBÏxWM]LaI T1 t=% <$}EQFѰJѵL9D9 {^ȴy.j/}k]0tvJ';/3Ʀ(_L0Xb ڀ u-KQ),lV4P,\8aaoatyirS#X,~u'yC߬S.̳ iYr<!bp!,zʅe8'M[߇8o9w9ų 3+yܾX?^ <4G<;{qXJ;4 A醡1ZX]rW^B*/ FHtw6g A֚(8KawulQ-ݸCt ]O!_IZ}M`yMVڱ Nu__~ -Ɉ}9#Щ5*=`Brf\R2ZiNg}a,0^grGb;|u;ϑ 1_;x/zMS5. n߱<"2<*s-뮻ZtQ¿R þb' j0 0?``ooO47Bj'@鴂Wv+s0!Awvp6ËyjY;IC,zLuk(ZjlefS!S=c}@ʅ :W\Hk}0Hw:_ۢ|ͽ0P [̽l"! F9a:m8|&Q_EgF51#;X{Jgxٔ|.Aƿmd,/,-HoKSNSXHJT3bt2j]a'oz. ;9D{֞,1!F?`~2NZTNSMUrvVH*m*^bhnhyQ=H? i3W957ò,[xؓp8&: K*W¶ݱ믋ԏ`hujbEP"矫τ '%S#4mt=̜BcUjMz]Cv kքf_.RW>NW 1lIUKߐzF[ɠ },d``P]/79UB%l"b3mW"w%mD 5$*G 1Zp=lUCCo~Z,ݢl4jL2TZInKXYLl*&9qM]U[s󚤪[:ލNt2w~(ҭխ]*Wj[Y,m5ͯ:O+{YSOak(a?Ї>7n#. +eM]5O{&fg(/l})Lz#@}bś{$<˜M?~řQɨ/[=;#TOEY"1>]^jTM^h~:S@1b ->0G` f^26M=.=ؼ}x.#Sz#cWa8V&2p6>-PQtu#;|Jkb[{n>װM^B9ǐ6GZ]wݵ<*ƨ`[o_{I :e0뢑xȳI/ؿ JD&6 ~ˏIaOO\x}+ HD[ u8a6u #_! h)gl Pz&9^OL-wϻ=/,oi?dz"Wq$}zn~{A /w +2o&p*t*ml 42ʽ(~y%O0x_Y<@xscVw=_+MmvBDX: Okf/G}Y/ZjZ] u]Y ; FDw 2OS9?ټW'!mPn.M`05W?ՏuvÌ6Vė `sշ-v|rk}'9~hG'>_&[$[$] ]=&]z {x8?JW ED"%0Z^FQ7}(20m|`|6vFا=mʵGsOJ_|'̕;G~,dNCM<6rƄ K_s] >]Z~ St$uv]/6}x6~s.{rRLKm^bn#IBv)VQw6LǕzf.J]dx[[j$fgMrڧߍu>[.p+u̓9i?5|\45"]qb/ =c|s:A4izH¤#4˸Wo(e0|@3 0\J oo#wI'q[/tR,3nm|-뮻ZPziw:v7;1R9~-Svt" %UX|"s"oTq!eRA cK/DUGx(;ގ=UğE̡ Pb0 ˜_~5ΓT)v,Qjq޴Iڔo^x~/osQnfQ (nhI\pqapdpPMzkmm/Eyy@kJꗥRK7NxjbNTm]e)<0=p%= #tOQ"}y]f3 k[BH+pezKT7q 櫅lkJ!Xu @P|W2a@&2)Cs\b6msmE(\/C鴸ﺥI/X,f* `eR>ebkLƳ5wՏn`ͫ'%UO3\Y?{8ƼC*UE ߘdrvr4iGW ;SX+g2~02HPie{V9%bIrh+ xŰt^lluslf]0u_Tw L8,,=M*2<$0(} RzNz[ϗrEhŅwĹf'GGkyRiن(nT3~>8t;1F+"EK~fڗTKh_|d;QBn/ŦJ̸[3ͱ?B}ujW7`ddmu.enyiwH"RG/)*TED|E_< 3%`NK 3 Y~U#:_HyW/g)v)]<ᤑp-w=)ê{$0MO{m\厓 >Gv)ξ]-{]wݵ<I%#5{eDo@dwMc~qH ¿sDr$4uBf)z^0}UGű]$;@~XxNɜ3CxKcעrRRޜ&~Gkwo/ݘAB&.Yƕ璃ږjFM4c9t2N1Я[ g6Y3A*8V.!Ľذz wM̒64L7C4E*q!n$~.k\i*"Zx*bHYM_-^ vVr bR_7 #\tylKʰp_z{`@@dOV'q5^[B@=hO4MmPIDNί՘ݘxݘ$ݘTݘ ?i6Z QұY_C*>}j~eT{TuG})Quy>_e:)5qjJ$}0#4HBv\Ƭ k}Sbs7?Q ^Ϸe"WU<식uj4bբ=BMRJZҤkK>WT7g ƥ$oMU9]O/)avl'<Bۀ1`s|I'V~u#-|mbŒ;#~}w2ٗ{~/'Tҫ_<*d*$($K;4U~Vݯnnvd0RwmuY'eF<~ܹiVk#$The:_PLK2,s%,@ PV6O԰viĻ/eI6-cTs}xٵ4!I\(Z؀Wռ W9=I:ўpnpJ-t60pkoG UJԜXg`-UCDh@ 6J)TOm5$ݘ7j31l<ߧکW"sN=wd Ox|ͩ(oE[ZG[țVwlCrřir}vg~VӖ5i"M%:^M.@ilM,T jSޠQm( 3x@0N ;.7Gf )?T)E*Bfd>L c}秤qeՈNg|]XqXnXFXRXl_u;F߳c*jsՊbS?3M[ءo%>X__j>_#9%d:xa *{͛Jo6HsXaOP<!O'룛,NC<-_#K~UP q6,y/Xϻ4F'q0˕rh牅h6:oY;l9)ſ'Uu|Ģ*.)^ Uɂ)7֧cP/{%Ṧ~!SzSrKūy[RRWuZ\$8l.O&: >F 2M +J? KZ]wݵ<gU @:m  4ah@xyG@K> pH#G7m ~oooq?{d;~ `$0XZ,o='d:ɃG4+7;պ;a(@Pt0x 0L dUMY8n*򻽚rqFEF$ SmG^2Ag"E3Vm66ERcgL>J90- /pt>8XM{ko!^炲sQ;GTSO-|E؟;%A P TՖy#zvy~k/"/w dMuN:r-yerxŭG#nn}qhr&YKi|]0-T ϳc!.te'5GKe㛡UP((|F% b|A?9^sI1Ies55zc/v K\PmdY#DTq01H^8ǿ|bW^5#u؟UFq3N!I3Elԩ˫E {9R8{VŨ`Te8<#@ AXG +ոs KF|;0},7vHkB XXVi\>|: UÓe"z1K ;~_i-`(_@S_}xx\T4àfgb7F<R^5 Jd6:Zf%E;6'UiT6`?%? *_-)m^"3>aHTGa:yr5]wl;|Ǵз]b%m\mOf 3(^mkϱԩ){OvSUd[i'*eDY98yX͙l#u0g666DNʸ.nILe@8\*vŌ`Xfk{6aISJ)S0l} qDҼ)0wFtzcɡDP%o[÷PeIO֬XlR/خۯ59;\)+M.'B. 48X:0ݟ\m-<ƏlpsȱB_۲{~gߜB %!:M*tF|8 3>Uw\TWXk]Z'̈́c9Qiru.&+\򳶚s+{|jY((ة)W?cFz/YK/ \- :@Ns@N%~i@k;Gm5_;sk<.NyMBs#SƓcREھQ?LbņjX؞jWΔ/Jke~5pu$uW'C][a]AGywrڌW)W//oFؓ\{4~fijU%Q?gVS0 = Dw?o(V'm= |BaJ1l7,y5\d$y!@s HH S!D.o/LJKty6F9| wz /`ʧ.1XY\P^9ȽGlUz1 TOju,pl=}w؀^ν8r;~G=@- TLeX`% [( %?_ܹ. RcqW1ۨ*WPz}ǖ˔IjQQ"gcb3u1^ȏZթttնt ㏜ctVܢ: V+" @1*;!`=/KRXDO~H@m&6#IdXA'-#A%XM|Bvwy~(tl,4CD7hq/c+ԍ3r>Va,`U]\zF߳4U"[˿O$R ,a\BpQsg[ר?sGM}ꈸ?3\ϕ0L (Ὺ`G5s uKg(fT9_m '9]d+vs vKҮ(n.T TuMWMJM)mPS\N>AP@z;a"c?P WsCIgpnAY+_;\3&~G{69ZidTśجy"bN5>@HJ )C~6zwFGy]GsDqzjzjzjzjv.-o̐TN1QQQqE5#E;=HxQKdky^,ݽHb֞kQW}ǩBbtC ]TUrT#]"w9̇B$PNNR3 d?MCЯj օK]ǰ 4g `<&x5ճ^&3[1 8=m3f«[`OmI6GV)&>A~D(::iu^:͔;O7X ut3+uhTO\o{EQʭjD+J_ fiAy]2kO7OF[.]Fmش(ƹ~ z|l?)5g&wbS*QXW]N7KI(_Yk6E$(6X [uN:ypc9tt E2E#u,::+6Gz_lj?Ui /oF#mKZv}G,݀>on]DDm\͠^^}|+#̣En _UlUKY6?c[C㗨qp۽")mn!$UK4h?\0/c3;N&^l.?\#AI[P<؝W@ȑeUXR"[xca܏J> [TpXBbgԧN Kj'_]Tx \v~p1yY&,75NWm:~`@NŐk%E.B_ЭT-b1mљ凉 )ɲ l.z^ʌy2"[6+WCtyKA}J3&c?δL^)ikeF+We74G9룃V.,|y1C6pf! co_ 0 NJ&`mxz7ilU {:;M(:Ǟ"$j\= =Qe5|Tsq;W};>y~G\Oޟ^zӹ\vynȡc=H^d\^h O|µ4|Z|#Ʀ;MRAdYjȇ㾏L#M,54q=gIp_p*Gx[x9KO8:JF;L;A\X-$ E.WP /QkjNy\(.4S{κDgwqdjZxI3Wi)-P+V3J0^2Y^TDPqɌphYH~'A*mX挽Z%M1 zf6kpb:Ȧm_ _!Z߬;|ھvڌ11 s+s*;m9^RR뗸'iH7/ri8q/Cܽd k 2 CQZMP/4>kQqnpTRg׎UYNr'u3i-Dzi5KOɝ a.reNo>feQ`UP]0Dm5N9K4׮լ#=BKM|W,4_"^+Q?}cʰ|kۊ]VT#kJ#Ldneo"o5HbI|On;x\m4d@@AAx{Wͳ -5<*N: MҐ"H5EɺQtUgGpBs|.9d2vzt;2 Q!m^AjEWRzXdOG,bmC xG;%1VbuHLeR7 b q ")^c3/י+X^͞IR}!(| `xW-@?~_⪢i.mb4J2sPFd W|]iay$,tm\s͵yöu a-_;HiìW\5L o+~uE<]7P0h:z -FejB\*lzjF&8B,v"/IL7~:r)scr-NAʛb >Dv^nR+JttHYP)Vzu,fxFAA" 9񽊽KckC6 yi)jQѬ8؛Ȼq'Yۯ˖)֞i hܲs튇!,3 ލ WMiۯioED" ua`Cl C^"Fh)v `w".JH ].WVXv' uD9`¥WߑgN> 310v3!>a ?agf'%'B g*ho7SF>$jbGhc&)0K v@J9 5!wC۪G{ LK WD&gWl[}ܵK|Atih@u9)ؤc]hz󸩒ۯRf>h ȧ.ƹ>ه;7̪?sN {^KH _MtV]}tQ=S"[. l]wI#NA4Vp= <Q͍h@6 ʥնVVEVK?v^]ٯt.F^ z`ooޜt!pp w[_L.ci(`ȃ>t:o::;;889:9 PhDRV6J>xU;TQ]WYR/g^z~Ճ?Zh&X X@p :AKW|1F9'/fլP;`8"k?׍vT{O]Q9W2U Vv){^1eAS$j3(*G]XB`ؑR͒_5\ ùB0ki检{FG2G%րK`x> Э0$ dA4߃;tA4zM{ĵ0"\s͵y/!}{H8vgts i7eEow>kd{@HN|&> [Y7Y Zqd d6HsVfNyÔ@Q}o)SUb@^ mꔚxh/0x liQ;u:v=~/ub^ἷ OH㙬-}kI)6UrhK @w7.pMpD0(b瓇ś/XP{=Lǵw[3̕2^,<$ ; 8!3ۡP]֩ άYY;x@17f@-sCotܶߩU2D$ KsQYrtExQ]ĢNΤty`cwW֗(Ʊ4ڑ)!v kF4:>6߂hZ؃&&%_ ?j`d:b8;p1rrz(2D{OMNL5"-d:/g0/1?`*:TwM2ϔ x?>P#iZqpp8a [yx`"r^۹m*(_;8EF~Q@0^>c@lŏ묎 餋yynj_(GYL#z^L&_4tGu3|s zQHskX1SYn%N#sUʣiƹic!|͵#jq0ssss yR'PJ0ByW♗ 9HbpqzQW{pLuӂ[wΈm`' 1aAWfHѳꓑ;ĝ0Oz}ҨEnLc6i^P&&ŖSڬ HP ^1_ݢ{Td ն_OW[ѝ4qQ|7O=z>Me6J T3>r,sP@san|#֥g$k6A r`.Pfh4fi?"##E#M 5!{Dd䶥7ܖqtQKpk*[Y 7ilFyKXn- VmlC>|:ftbamAMT1B/]=\f5M /y#ʔǤH皮P50bKn隧(bƢRO!8A| qT($n%6]Qae]c j_6NR!``_ᥔWr_uyS_oev\ӕu$# ҋJzKEt]U?e*.X/C55ʩ)zfA6N1N>v~ˀӠS@7 k:Y1j`  &(a#W=]l=vQ/D/ 8u=a'Xk7䖲'8!M1_uXt_8G4o-.~ 'F[GG=e^^& AH!1Jݩ-qcz7_U?5Ѹ֋c1W^(K+G3&7zg;t6ضǯ:mRv.sĉ4+ߘ9D\b /Ԟ;7)u:WLUHeN|>2cQ) }r3B W"y5\yrhSE^p ͕XgNZxjUm0vP' ;i+>37Sv[>^~l*~^}WnE?/RѤ6Q\'W6 Fǡ+ƿN|Y&k)^(A.?#'0z n[i[\_09x Y+Ηm|_; v="_9@#!} `?Ñ@\cp40"o#nQLa/}Z07c;4Ck}L]3T{}+A;F-T+khT5<9J16zgUiouf! ^ڝ3]&E7̴N;ïm?/Z{Ns÷ zQFO U""Yl_4@+)?o`?X!԰PuIѾn1#饯y61:åg3G̿_z^F:yAc4m6M\A;9LlWhhh+1eg<>*P>7in rqɝ㛉g6H\)->8`J`[2R,7AŞ|#^;z4|Jӈ6ɛ^erVƩ˥$X QW":o79 \ZO2v`泖7tc,\ B9js :#d_F;=wMb5KDzXV'Lo_f090!W9H Q:T,ٯ' k4542vS=?X?.}I(y' tɍs  ƠSQ7izKL'Ö[]SY[aW9m>&_z:H4rnrjjC=prmŇsd3'I-o<3r&ybxʸK5ʴñ;S{.m.gGf~*!ct, mݩ_)PM[K=ȔgK`sw}x,O{`#TP|;RES1L K@ ǐ(C};ˣC.}-&=ryb4TiB嗪'btn&p  0C[P'8% .$`'eo( 1(ְ_~$bFŁñ y^s5_0OGGG |||jjꘘlnnѝ;wdee^yҫ2[A=u7DKD͘iS]H;s@X_ǡU3@YM_}KF#.n=z?͸Ki~Y\1%TZ%^`bglr[9C8IуM% }L( <r/qΓ'!O\ﰹt&DjM~`SN~3~{d$}~+TO{Ehtr[zm!G >;g8!=)$PēC`oj"oҔOJ}:ԓ0ʹKks :鈉S.`dP&ٻE;DA=pHCJ"ݧTKryVm\y5-aSo'MLk&f! >n"q1ޮL3b0)&h/ H |4uo5TOȾAѢxdzo!K/`{oקm>k*@ b@ ʘmSM9qÜNb4W[V;I$Oe׬Jfh}ܻp|.۶7u\#/$9`B 8M?Zϙ8bU-TJ?Ik*2[i)scp]d l*ToLi.ʏL7H(q2lWK6DLt% ϰr 20 .}9v JHX%EZcW /kP.Z= [*n36oиŹ|`#'[0:T[VY]<޹$jJ'uF`Njg/2?Q?j236 1vJ1lq\sxLDAbrcc bDce$8~wYi$g/j6aԳ%0bX\K*-SA&XM6W2䳧Vԃ l0f@ÝPHl.H U,q) |^mrV47IJB zruƢ&=gRUr~ thi,M3/]W@:kN݂Q.m?Eekm_Xn.hj'JQAӆ֎y~qQYQq͉<۩ONӈG>JU7FtKBJBAI)sfxAĵʴxLTl}\}7ޗWVXkg_6Y 4؇6F5x [.jD\s(uYIs1Qݔa!1Ye-X7 诤~O0R~8X>:ѱ|ZND& ̣sb7zIfۨ[s+5 zk P! SO=;,[]!kl_ ۬=^C)i'\qB٠C=Q1)^R%,oz9[6sOC@0ܯG-v& LRM5ˑ3X+-CK,ȍg5~I'сTD2[fH$& U1X ?V8j 76on^ _!3=SIm/LjOHX#?2)Q]dn;eo 魅쨢ʜ!$Z+Q)kk^WWGDDׯS?$a.rUR-B\#"F/?K5M)v z5_»n!ԯn("HTen K(p)rRIaUE^y3/' )xHȳ12w:JM &ATldb[>\ ߿}RcKRpkDܟۢ[Xk\Be;rCziQv.7%?7T3J&1qLm);YĪ'VVkZW;WWK4$9:8Xy˄JX*TKi:'x'c2Od ֤&j B5B5B5B5BFq2]?/TVEۡ86spZ1JTίMNѰH ̨Z{he‡O=LL=C}2˹{>:  ـn`RxMoڄ+U-3}[һ*OH-43+8;{&kWLu٪֦1݊?cVt2w,֖wќkK gH|F ac,7ZQUAZLr@0[LqC#$Ga.+O';h+?W6(OY{Zxٜ;#.L#QZ)xypT9 qj]E1қ䍩NB4& %ť;>C9f0~>`Rգ"Foj9kVn6*I$vp\V4>+ ss<. 0~_imhqtyw1@>) ~A5pF$q}nxu+us\`&6k]7W$d={zcU,_x}HB Z D`Y`UO#& K!(;O}ZuݨڻǤy'msL&&gq-f~ijCD}ʡڡ3~:zDxӍiE]U⣊ B>YH>اfOHIQD .V . o~,= E;8z_!nv-&}@RaF#pD~`_*3xCBZT[{A EP"B$ 2ø4h\j4.Yţ"Vke?GzQYJ/ƨZԋS$.%p4&*Ճ@P -^h+?TǕe"wgIӬ=T+C3b$uT,lik,6[ FVD?bZ9,FE(b1 EFtO5h~m}2~<ƷW"G|G\^Q^={G:w0!7J"pt }o TI8S5V"g+G{ j[/zR#néz=p!2>X`5ng]ݨv'%LkɞGbwp~v[w~>qpt}i~CF?\.5:b4-5uÓ_tnZ fܟ]6~c㵿Oe|4K!vMѨy}69{Wt5,ob5!5^nzԴEִGѹD?i)vM#vT$#H&=F~JЭJ7?g2yTrg̳l(;kuT6^gt FNQzyUŲeeg,+duGKI%ƪ:v-kl x1UL Az| x+@54YBـBB٢BيBBٰBYBIon4A,4~ōP/V d&fݧ*&ObzuXzBd^φf֕OKm|rMzM1 m>].&cRW3<5Z2&Yfpl}*2u-4 AOO[G b?CŦ!=&yǝ~wd0Ay22Ve`gqU%Τryѕaozx:)ZWf:5X8%[2,U-V"\S#XnW)[XpppKatQaQwEHUot.& j)*w3ogB:S"nYHĖ>|$VVf핽(bicֆnGvqj hڙ:0Xdɶ]>.^(-RJK[qwwwww4 >3g7dJv*.jtrS/EŅ6b|U7OԘ69N)Z$BXj*Gu>R !ṁW'96/>@Gunc<-2y=Imf%M,:4jTe Y?dcBd3} \ܯl"GG>8UJ{G[q,9$P)}! bbCgbmmw)/IXb$-DduIɟSO=F]CLL $$$'gob"L߅ E,$+Ǎ܇{CSśJXھYLFrbGC0CH>\9G2D>HT/غ'XzfztnwA?ѯ!N=4) V1'39.Y8O"@ߺ_\@]4@9R/~t> iԫ4P"LtrίSov*z!@߿)qWztdӘHc3H~"utf^FqوaS>? ;8p˙@Ŀ6'0XQUx:G:Nˢ$^! rK%e`Ѳ2 *fn!^vKRCܖ=ApJʖׅ'ZgOcw3_WaS`j:Vr~n28 ;-QG$&+T}qYz %]Zer Nc؜HWJ=6LnaE#=]c'}R3gǻϰ)-GUR`4xp.ZBt,S@-pZAr^BNlbpV} ؆=$?*b 74s]!cLyKµ3ԹIma2ޅf-?'x~q~|.S=GXc.{aqOVm=q5cUɬ/E%U q FоFFFFFA+A/zq5ujgŌe-"qP˸u;؋\#G1>]l0h%[Z@1aW|X .Nsy9mE٨7'눦qHb 8 \d}E峔[0(;Wf4&Dljq O]Azx8bQ>Mmc49 e&*XgS i:ֳr )DXtn^ڜ1ԥy/؂a~Veo4\=cECD%t߅TzY(;d8(]IŶuSi*!ބMMGN@wUMB 'x\Rb 0^ѻz)-hG| d˲zUTHJԙ좜&KI|{(YqX*Z֛W WYɻHw$:͈au+m#CcҩFd3e$xEihȪEiæ{SX;;oO7/W>.H^Yp\>VA?6As_S{SfN\TMȊ3]%vP1Ԏ)> Щvi愴?ojw)?~Ӷqb qU>"a!aANQ^:y!(xFO-k 0CƒLˏgɠ;(!k+%؋ko>P$YZG+A/عFV! dJ9@P$pWgOx. G$k0\27ۥcr68;U<97ұ e{mi@D865Y-j=?  ?"}]7 븇{X66ZO<Ӯ7h~c.m.8 44t0 V/*IO=ԓ<kV677>7iiW+Oaq~Q% };Px+߭e"D-TsAu,m+*4h[KDSߗw{X[;z /n.]n] `=p3--9g" YC2#vPUYW΂f6 lXN_~1Y)ծ4ª5AL0v0Suǂ 8R"%YK aZL|vօ=H$zb=1m~1Wh[DF굖p;dft=M.7&W̿/\yA<X#f))WF¶L {-|BF8;C$߸?{&ӆbW&CNkߣWv'o 7eW>o` _" PD/i|2Zb4 ˎR$ a6P`SSLr5sMhN⩬+`Vx[1e%Ѽirښ ھ/|8@"c{Gopdn!-X~=)U诎NގZ4"tk-j߂Q5 97vvg 1.f)i&r43Tܔ[3W;j% URC|Z2*y3EdRwC Hж/q˜܋$I/^=l#M'6fe97ZلU&qjJyrډޖNYa1IQ菢ѭ99W4+@<P[¥a̓_hpn`;0<~~yC`'N%yEũO^kH;g?KMa&pD핧힗qcJnhxs~5AW+``4b#\L2#X٠__*_VM))fq4#YV:ByB8*ZVn8eCogmﳆ݁tz@X8FM/Cط!sfxPzz4 fL?]="0 &A!^ p%_D.]==}u~`xsa<'_?pr <7AXEdrMnGY?ӊ/IK5.]lmT\!w]|/VQUCQxPM9GRKxsx+Cx+]x+w γW$ DŽ«?۴F.LurUcsKhHp8(V黡O37'V[Q% AFn֦~IBS%LFF>Ͻ@V:h8%Shq$W X vfck!q@nSrj:[gafoɓX6g_gۚv3 .\Lr\5t=Cd«$Ċw (ŧa jɌT3'u VZǍ5vX)}v\D3#\e[-R&,VR5 KG }`h״HU1׆,dhwkl7$J'h\3#ٶ[:ʷǩZZw!WFsQY4 QϬ?wW%@[8(R$wUCGj#s~a|bW8GVL|>&[4H~Pzr|q@HIEX~-3nB0ř]?5M;_'m=k~|\>oy-S`wi"X.Y;#5:+yebZ~9_*^NVF`<_aͷ),F'!ҥ}oU-;og;tzW~_nl ر(DFmsJg^G'9LḿxEŇϥwwVd;Xg9/s˴Em}Jr3;hfe 5*=-NQҏQaE܉=k g w3WDgЯ~|k*#bB25`n0>9X<]NvH+5̬nk#TSg=jr2uv}4 kcPl͍'zd)#0 dG 6i Gg([78O|7s/aRjɯFM}- T}=Ai%M~%Cz%[b%o6r9G/蟯_^W,s?i Q2Kk Q Gf0ޣ#I5֏Apk̮뻟.r{w߭tN}ѵBjȳYb% dl40L ]"W|ǜ[5 VJY?&A >Dɯr5i{؄A nuc+6jy),:q~3_7ݠa_j?fy %-je=(YpB3 Oop4+{Ef4+ vjvޑ?rj/#6]}|o^c)楸2||g~Ts 7\~z$ϧzIb S 'Z>uq^8Dug2oGHġe?3)Z12Itvm*XUvJХؙ:d1(o\%X`,&>ޯ)V BrρDM'KmjGB[  !c]OnmxsA'[='X%zWIg~zr!E1Cd9zC?CHFEh(z6b f ^'%JI(cWn(]w;3M @KBe~APW9M< ="[dn`\dA5Gѭ_Gõsk[6h8P8h'Lg2V>'wտS9'ө#iUPqkP#t句O_b͚Q׎J%17}mSSm\\=7 6 2V,a]cULi/zἩ:$]}vƴ׭qpcQ>aϤ߃Iw1!)ҖY]́3;VAQ_&"?I&R,1쾒8yyf4`GdvWkM~j IaElcNa=>[9X gGɶ&`%80hHZ}䀦bT-CԳ?Sk2z'`W)=\@l.-GA9(Sԗj 3:[pq[4 ?׀yL{ȔBw*9#is{A{EέdY"huT0?my91y{md{J#žl:kAÖbŔ#T34݇t I*ѓ{3x* g)R Y VG#Zu;kX=z d >"= `Ė˜ ׶~<(Iajuo ?(/R%qV 0~d,B*2OR]ш ={_Yڮ[ة gd3yZIlu,ؖJԻI<dĚ&ߛc.5H1_{" -xҿB;EGDVIO=ԓ8Hd~ry@Qߖ N1A+6*˫kزZz~V|m:J.Zj*IFu*r:ͪ$`HpU֚vLk=y]{8x9IR2?;}?1bJA(-&#B|m=R\ܜNۮ&}IRI%"%³%BއJ~ƍnJLk`%/γoT4W? 7~ePIPAPHtGyl y6V33k0L!q3m$(CF^^L|F_ϴ% WK[[TCW$ ź/c% (E? 'A_UN=t@drbftW2D6Jطi.z)n>.̿9D憠]bE717e4EjQUzY/)EuokWKS8]o@ꏶE+}{'0l:𹷪߯X<6;sh&DWc< ɀr`2@6nvQ^4&q9-6VKx:+p淙ׄwM!X' ۠ۡ?ykwqht{C"U[o6%o8lzlH^V2߷R}t݌dm6x=&[r]T#>WNNB!:^g C 0}.-N$}NNgkLHj-OUoTi1czr|dx-p$@8!v 68}@iN-XFڙr`dxhqbA( -{3qsl-QJ_ AIp{_*%:yXiTGT|@|whǟ3d\ y*ќaTVAD\R^nֽ.&+Lkg&SR "?<}R>am̀@bq\SK`  Dd]==|O|ꩧ?(OvgDN;}+0 ?6ٕqmt=t!2*ʇ)wHof^.#l ! jAPN瑨;!I}W5//8։O@ 8>ċ`rjxω~Y-ԯ4'LVڥs<WIw߀U(K1^NpXt?!lN\$*;6'~l|ּ/rkb qRW,;A&!IfķJ/|t`e Y`C:-ŒB|nHYί3#﷛'(tR~Mkr[]~nscѻwgO?,.ߺ=`]?ۺφS<)= ?Mdp]W*ߤX[@vFI39Zm1kQ+iՂZkq<54KXgGC`|G;;t;z2X$jv:žBŸ,j'LRѡjZ`Jy͗'i[eftV͊9 qL] ٞ %mɆh:XRzq%?#eck&c;]rTt xƞq`iѼ6Poy7raiia nvOn!-^%~fb0^#A XV'!$ tu}C9zˁ1=FaN^71wy:\ݑhVOlk?G3C{#1Ks(V#53+$ڎXQTmV3ICVkH'4ד@s(k}@62*v <^#nزL7;Q%ٟ+ԻS}$CHR]]n[ WxGuDg7IUчuT6qW}"MLմ,4üt3#=#uÃ$"D}4ľ4 y{7L7q5 uVts$G"C@9"3ٯOCbܷPP-ΰ?-wh% nUj@Z [Q[E‰ft-.F]*;d&"ΰ枫ힹJR"L(olUp^ֲ7@7`HԹ`DjD+פ3quPf냷;Y} GVBWktj?0}m;sYF'RLBY6Wy6;!\5d$_3d k{gcH0-A U AH$e?UI!rŨ}wLعc*r%UE')٠,2)}ʾSkF[ޅ밳\~.sgF(wHpD;8I2g}B뽓z@g~X!vHʖOL(Y~v*vCz4A7wr& x8[Zd]hb ?C9.-NKu 1Uvc1lQb+a0TNO,h1VJ_blbj.&O&r[~\ _fٯU!HIO=ԓ<K,NT }0AE \(AK6}w @@D€#?~LBQ5뤕۪]g6GǙZY7~W}4~AWDNmdb=U - Å#zV>Y@Cu *-sk lX/dL!D(3"s/n 纯1Dĝt1C1Fȁ7+=sϤ:; n.k2Y kz?\nai[ᥲ[[+k-U^RX=h,硂azxu/C c#X +O ڨ>BU׈dJaz}qx|= CU᛾eܑ'h7XG8ۯW']p IP_M=d0E9}t֦r MYm"gøJZ]:oHF$h2euά9m7rg^WXe8d1՛ cm^AoV4;(*Y$f9-k_v)X( w҅EB1pSX, Ԁ*ާ@c Lx4rTvM|ke߉f1pͰ}Xoh<,7Z?70 ȩ䶄yQyzn-t-7~ LWK(c0-/Q(PX_ͫfDeP_Slꪎmé9, Xb>o8u?q;¼^={7yFq˔{(X!SIj DL@ʄSOȍ::"c씒,UNK0Ѻ_?Y6x+G,ԱHDuTpa[KSÀݨBNV4p۫K7Dirpt_yUO& @*h㬠>wQڎ[.%Ž}V5;;o{f[K JZ.XĞie]˕Qag/>ΝlCųK[;E"{BeE 2émbU)}5? P_ӝ1}, )RK2} \n=AaEr6Aɿ@=L Z0C7¬ ]ԛ TWA2~5bW[Xz7Of8_@6boᣔ l!Zs^}}a}!W{e?1}SyԳxFreh~M[?[UPlʢZāu^D+&nC8|Kluc{p`?9` NְG2LkRh2ؙnLhjih(*.*)R5n(uM3* OMՈ(6jvup1IYP-ZԴ8>+!r;)~Yh♹X"7T롖S˜-wde)ff+ʁdO jY;Gm<.:JUw?DtCnt3.W捊t}9y2͏FB6i9ܙϭkۚ g?af)ًjzv\şc[nw<I3n~^a^:(5G:.wIset&ND"By>C˜^jiSZW6-piL)VrWr,"; CL&h97L\KήL0koieXnj{2.>;bݣ.ޑrRa\Ru8T=e=Mݰ7_ 3ڌ1: 4~P;NoΞEw|xƙңݞe~vba:5e>24l8oeڞ:qt-:T^C4usw&p6d:l2rE##GY}ohT_zzAG[N`AսLګqڛ1u˖!~mN[X:JyĿW4 SK?+rLG|B 3|~:Nbnun 6_0ۧ-YJN)Lmb3N6%40úlDзLu0cZlm֤ZdG2frAԪvMϑ]2^uzRug(OH+%m5yj:&]tK[@t I:woV͋-f﴿uwmӸۂ\ώR1s}NƖٟI:]- U³h4')<>,~_{r٧pgs{o.5|&ǀ6oMMsE':F7O/A $+Љ֏P/'*6] gMOg7y[oʓـ bgwڝ=:ځouEPzGĺvg*c(+WRMYhy-c+̽wϬwfJL9q8&X\OI_#3%[i& tv9n~ )  ~٦_hTbϡ&+anZ ߶4!]B7 xn%B4!Ib@=OQvNO\NDa \4/Tn=|yOG*й7ժxek,_CV|ѷɥ{u y avjx{CU Jd)%{j d-dmܐW'} rYG9rSgg=K[7`,VT+0 Pd ,j *i5CS=$!~|b5#ᩔC_s{Y1V]F?P~]# Y߲ZD+ΕӤi-0b&inO197;ci5 IbTfxAP?NT~z(8_6k!H>n%1# ͈rNkܳEN+ eۥD7+Wg7 ]ΑdnY@T0 Pp$=j}qC&gIzN&~s3Qv@MGACDG݆AfzϿP-j.ҍ>/|.FJuz6yt@{eѷ ש=?9F=*sYs/Ė`#ku[5.?tjfd11V5UNfd#}W%B}/2s p|^g a rsp6$vUgzn&;V@CI<x//?mnQ[o?(O*}.X &w\ 85oYCPޯ)VEJ[6 zFj%gL$ ٖmjQJi3E2curP{(vt=U-iq~*jIlÐ/C~c'"Qz<;h%.4}_@`<`9z\ .e*ߩ- mƌrV4(N'Y ^ ОJ,\7TYXR`Ж#V%.6*ж,л1zuDzOrM2J1C7X=\Z1]r }z~qQa3h7vOe<$s*8gSu91L!Q>[jXt+åìCSZX>O5;2kJghqa|oy7zm@'#ؘWBb(<}[g!_AA,t RGzQҟ@5_= M?Z;s{&*V2]]%?.sMv(.ZnDJT0Ď=ö8 l7͊o1(&TBYX|'6Ѱ&@ܡ)[ 0PjiN6FPxAoAK?W;2\bw'bm(1*yEG6"ZnnQ ']YN>0O>4/]W;2F:OE]jM}`ޡy\`l2ˬFd-.Q\w!}olwPKోbxf T^OQ59,c27A57qvfwfkcuc,w>hO7Vr L&-VQCdՓ~iB!V:J\$bcN@hQGNKMGYgt*i #u ȁK(]05l-|-N֧zL8PMoSǀQ/5*8  y6Ygftk. 6 מVމȹNC>aJ.3 o4 ׉VWJε| A} }@ʹAm^"oˮ֘~LWf NmV_$c{&]֙<;V>^G({[o&<8v:hk& P~^ap_ it*{"\R3kdKe5NL4`l[bi NRr247.q=#ېZ׋UfRiQ׋ߏo:H3:B_9?6_]1!F"Z|U*HfC!!?!Ryr.Krͅ4)Ӏy]dG6 ]vu祝咇L^4N\Vv|(F@$"RYg L׷R,cdgned+(A%1E8K@r\jB@&8;<&F-,O4kuskU?H~/6Q/)d*|3:5k ,b"_Qj/ٵ$J$V3ƍ>Dmwk]fJ+Բ mbꣵh5k5ab{ovzbɁO(gX;y9Z-c$bہ{%e-h) lmf3B[1CԬk''wBԪAWoac|#~q_ UyD0EaĞ1ԍΕJhhĜ8 61Y͕݇q(H7xq61UZ3 y ,P0;p٧(ʗ?USZ3fqd IΗɮʯ)櫭Hu%vYΣ ҘM 6jeZ 9S&2܀b[ 7 ݴr_O\dYZ >5}D an~=@?s5vBN;R3H=!j {pxLRVNUYgӬ$ӛzmZljc\ FacW_*}X B;^#TϣlZF0[Hꄰp7[( 2j>z,R e*h)e;v}}={0gTgG8{D[++wyGHV1\Ϡ^8S5֤=ܥG{vQJ`^ﰂkh&6?`;o}{8_7 Կ`D[XG("Mn\CSz@ ҇7y[oFFypy5e-QJhZ!:1q_퇠T_?d7DY 9%F2|k%+s ֯y-:*tP툔[$OhUNj*:rDAca~,gɬa)IAI@#)rb5C[Ó@GG{;[S&?>lM)@|8cdmEdot R2A*)YyXt[TFZ6-;˸!&~٠B(J+2YgA>v|JԘYwwPŠCvVv^&1Z9ulD (Xk@0J3 Wꖩ/CC ?6,cMO<18fB=D5uI=O3B;5e`[k'qGլlFQD4RoRg4뵾=c?.Lݶ |49ج<;{Qv @UB* 3LL#t3 B;m+Qe/p#IJ'SwGS fµ?"qܤrYdUNt+UbԱЎfEDX0} ;ױ%IhgJg)I6lmT*mDŽfWh T#}L?n9:GןP ,p.ȜP KeWG}Vyh}}/O}T+&Sg* /ix_y\&P)`ƴ4J&jrv2dQ)=߯ҮGi/yCU>E伊)ufDy!%=Y|lZל9;/[_Y[ U]MSzT=D,G`7aiN@gT9FUIFH?~"O'e%KPAM3qd`d{mT w9<"p3 {oަ[~"P&T5iJh{W^X'snӯah`4/- /z[9&]PDPԯ0Bp.H@ПO#BiV\Ӌ0{ՖGO2*o|뭷'4,00qJƾƶ *\zE3+i\RfA9",A3;]_¯#-52T 9HP8FpH-&LjQd:eJ7W4״Wu KѾ3ֹcC܃we8D3Qo[vrqBzS1}H[6E_LXHAMwI5}˚0ѠbmL !ft~_UMXɇuGǨ' Mn>VS&00ˁ`ۜ'w_+PyoyyPpֈ+Y:ܚ$ʕrtfL6;~.cӶ٧J ?j e4l]o,T62z 1N>Ku>:.y*19*e9y?Z^jVr,voƂ6Z?!  > e  k^t [e/p1M4$Z+0M =>qY~}1qy J^f"0Le{[~DL|rrTCIB=gv[jH7jФ/y ]'>(He:vfh;R[KM}iqlw~c;~ZeMg*Advrz6ffNq*>V !iuNtd&"t¬hBywd~ sk`iĚFIlCpЅ@,^WI&ݠzS=0-TW0KZgǶcʓhHm=mϼrҀZΜnu@:wm6 2Lj#_FF?~{ĺL &򷷒nB>R.qs55~jgig0F1E7dkf wIiz S7*/GonYyKÓHRuPٞYبr̬RšRrJwRŌS'&ep@fN;A`Q'.I6X64St$K_꿝Pu _(gX'8GOP$<gv_u:OVLݞgF>!>"4UBC2<܇T$ 4Ʈw\" ^{'XIJDXߓmy嶒rQarcI 7m ѺIf~ @!$u}Xԛ\ZqN)[k"3r%~,Õ dnӺI2u L:*>n><=IGrԌA3^(kd{h{A q# hzvafHtBpNs1q!vW.[%C^2ݭ P gpRUPipqH7 ,S%Iq"M\#~S0ZʶyfN'zq7YivRˋw͍"|0Oh l3!@~WNXI9L:˗cuz.+yP"sPhqziVr#-AM) qQ^F !]ɇ i͛$ C]gW_if_>-IWI6W&HlBy|LW@y8{(Y)ڌ/x5gpwxoΔnT-_.nz2 Bwj\}j:?5 zO9,n;}@G$MNZisu@)42FWy5mb{-~B'7 /OZ*c-#^GP{DcV_&^$L%4QOO^̾:Aް$THU!O ' c \3ǤǐRG[o&< Cj:G\Ly`egB,'⿓f[&?p,-6 M4 m ~|#*@ AyGvB9 8F3@czp `ĦTVBF_9QAuƍ|+ws}'lmЮ'[꘼S$qM ) Y  | 54󯀉7B[Փiݳ$( Zx$b!\#t9C]}8LR $ ]$ܣ׬'+8ڼWztahkLV5u ,4y(Z/bLxzWamU~KG` 6an&OxՒ 4$ zڎ[g=e]sXՇ S[a`9XCy-\le=9]z !"sG.祤%%ʴ92<}4=9m@wI18b)Ⱥ׾-)2z D=A!sM5K+9W?.1Bw ^!@vD)'1MRr YI\)m_ӆ[sgӏTxvLfQ-t'Rėm )\}=wsuHu-vX DŽ&A&>&n&nBߣ(a4t0FYCTsJꯄ۬>n8n%`Hݗr/gD)]Nl#߅Aʺ,9ū!nY"*&n&p+3ISj4 ѫ_'{HZ| ;o֛<tIgcD+3lJpY^ h^-tc 7t5m\Zo/Ak/Ujbzq`k]\-|Sü2@ڽ^x suc2^) @ j:m4B_'׮Htwr}戶\$J7ƴ\fp2RkȠrg(eCKz{mkDIjX U q_B"X]KKx6ˆ]d*ӥ_ˍ?0H*$'$ @jC'q~b"co]n4 ZYɰP0H BBF}~䀰gyS UiFQVnnYu.+n6sZ)&tiUhe:)l'c6kQA_G^qO6~?Qߢ˓G̺;WJdF/$TM#O_jr4Bw9qz)<~U+e=dOʚvl.պDj̔߰CIH/H$!=ڮ@`qCtāqk~TA JOѯհƃQ%?8(ViO^[x`",c2MP}QeqLjon-]M8is/ޑL .t 44{y%IIp)!] [tMV/V 1[p=q\t, r WI793dLAE2tE/s挨٤ i佀y{3Gp% X JKR,Ku)lch Y&!_Z`wV WWwᔯ3ӌ-+WdGۛhK& gqFȍA"={>zUKþ;QueZLTZA e*pXnGc:+#b-J0#7q(gSYmCz\vhI nR*&LA1Dog[ooʓPS(xcT#sԽP-@p2!@)@Nֆ@xaGlWo"ϐH*ט'EN%zg0aч/V(g#71Oa\;x[5uozra_ܹu]|0زT|y=ls ҥIu8* 2 ~0@X _ec |s^odțQ֘Ek!ZDCH$m чĨCR _#QO/$+?5 ]%s?~0 {_W **Z f[\`k0- coF .z+(Res҄VXGN~F)&Cy{pIHm # G;LU۲WkΩ-E C!ӿL=~ _ˍ70w?ww{wBiT@Y|-v{q*{xk^U$DRVk@P[MQISI!'%/($g^<װ _dA!30]—%`\A0A x0B ;orI}ա#{qA?p JԵ/-1| D=w5`Bwߥ*]]"R3@:K8+Ԭޜi{c_1A楐`sevsx3vP 2|*in=F`NbBta޷c.@DE)IAi~/x p>g޳_]|(:޴:׾ k*x4T#@OrFqKne.u2etWϾT'q-66y ڴ!B_X0O~nnRXNO3Vh5\kC?/ܼwk6e[C1iluvbZxVw-yE3L8#νSƴkVxK_YQϘ;+ g`\񒼏yELEy"jsA'.FA3=U EpY&Ј@\y.IꑳF+5Bӄ>u׋kT 6S^{xQ9r7~2͒rirN==EyB{E:e5@{ ?_x k}Qò.6x+>oׂ[` Wd+ώqϻ0o;P:7'2M%^͡Jc{/,-su_^9޸jNjAIhOЭPg钪 *(5T@:A1 yia j`]7y 7Qںs}+ ط;UH5>_ 0;6: 0[z6HY5/c~"#ԆyʱyV9+Z*TBCUI$C2{@i9zqc8ڥ5Yt}}Y}YHR'<.YEp;svDA0O#ӰY@tnj֫A5P)N|\wYSE/vj4y ~.z|D˴. $.K.sU//#~] &}{7zAq[WaVdaYI g_9{gW pᛶӏ>?ܹ%bV"u!+NbU3NKJYם>`X{a`1G|&"׶nN%KP u^v|D?&yTbzׇj%޽TN7 jZ6>=0^h3`lo;1jUqbL@ƯeLVP^W{-Pp/p2񩽝<1Y꛱ .J8GS,D+FƥV=I {c u8 \9fyk=")QPaߢb`]Sޠ #i= C88mo5CY`d"p{˯Bz  ДSO=QKk-sx{{@>s ]D"z> {ޣzܒǬ/7[M7| zbsy=zW)ػ³eksc ꥭ±Zn>v}}>Aպ{L`0ɡ?Y˵uyͱñ9ߣ꒳4g]yCffvi6~fSWJ*?Vqwe}П>NIM' Mx$^ }}`~|pa{r.[$Ѱ ;55v}l}|n[t]nbV>oBs?8Qqq=c= 3#;CL7<Ux%VM^oB@;Nu{w01g^s.~/TaR.'9Zş9CGs]3ם9e޼9m@۳U/1EԳQ3'!gMx^B`IObZzu݌80aU{׎R !vZM?g}P֜5'=t\_:o9Į;~]3'[7ǾPDN>F?`֎xY{Wytp $Q^Ya^!_#0ڤ \Xؤ$<0˺ GI䷲Ko:EMͯR|j_P4x(gײ }TLȱ ?0 =3lrOQ%fop$W$w5{}tJ(|Y*$Q&O4d}B`p#6|ϼTy]0\78N?ԚueBXbϺE2;ulVq P@wk7$kf:6 o{:6-"788W`h%"9FQ]sFDWR%b&Va5C[=[ [MZ|4d|-\&0yNJ^r;GSj]9f@xTCؚFP(N7c8i 01`}>o0c\SY3mcy{!鶨OD 8p$ϧzI$>ϴ)V&XC0@q ^Rphn7GtM\}Makk[```cT<{vOg:IyTHu,KK++ڕslV#NLV}s v^/|Lnkh53T5X-pı/@1<۩!`,|~R-W)Ѹ.ԱlJ*O׻yYZn? -|M#͜3Cs|=\|u3c),&DS_Xvg$ZxڹYi{&)I=V_zʙ};r oTgXfuPayA A!ZDh~~~lgwp倢O*6K;%V&h nY/ Q6FrUǖc롿{~Xzz:9yZ)(Onfw)$$.-h%&۠pXykJ8N=i5rld0>X:A*G-&y8t f`LLN[(gӢL>nݟE.9KL<^NA^p}),Yįh:h6IVHO%@5Q}+䳘we * i0]:9nX'ÉLakdݢ_]Nn~V IC&){9*zJf3~zn;TYAi!d2(%oi xh$Y_8ݘL+7eg7 4VhwEr l8a B iΫ9AF:zF&zɔr|5 %&IԞk)JHOlPY.D>z~-ܾZZ$[)%8λXoD'Sa~pːkQDz׼ %1x _C7wc[W3S kGW;owc,c(OߏL, :Ȯj -$l5TV}%C+U$?'4&r>1_+4"\xSO=$EyRjp4ۗA,##sDJ  B8ʗ;,s}u {yxXz{;$[H!!y$3 7"1boĜ;ϐV`WѶ댫RZ$vOt2\E?|m}F[*2;ow7OJ/b]ɒY~e.W7 ';\ˤ95N˗lK^=8(Ot.cc3HqN˙6e~;{DI@;Ct0hΦOҙ|&sG=4t}9Ç82B-'>0'Uij ~ DDT;L+3|cRׁͣ,KԹ3DXOyiVx%fXz\'Eؽ6@e[8yu]DxXF_AYE[#\{۲)M&fSE}wsݯNAAPg5C[dW]`M_IռP5O\ȃ-'< dr;;_;צ96S.|4/^t Qɠc$cjT2%S6O\ewv`>g mNA!Qc+L6]"I*~38ay>SOߔ3Nyf Cy-_y1&!zގwzxqDDE;#-wdvY}@0|0`([0{%LZ%Ac<PYu#ju/9zٚo?V^/E/H:ni 2RjO p~\~9&k&wTFeMd1T"xueO+qX]m7!īG/(ifh'i' nKRʶ9>Uo}D WVV4(9͓8g"QWM[@6Ok=Fq9rULc+tCqFBx_h>ʬ@̡0W_UD?Gx~Ǝ1Y-UyCl=Lm㍴կ>I%n:srӞOi-mg|LXz0 7O4lIQ Vv`$GF)kchߊ 4lK px3Oj<~pxV>[ƒYApO-[uw7  zq|d̤~W~[wVϥivOT(CӤNjS9Lhyɘ6 b\!RAWPx0OYHطEIm7s7g7^>. Znɻ6*1YN I<pJU.D{9XF@ 0pQ(Qc/wR9rJj5f%ڐIceջNq5ylQT&O%\iQ-v?g,dT4.OUUifa휧(\#uB?EBҽBq>PLD~kNnI_j) UqxUi;y$T;0&C#RKtbּX{pXߊu5k}!v|` {9\Nη:Uڣ/zcy&5&~Hc30K[wmsڸRҐ]K1 M9takގk9%8uzupO3G>j ;:0jl :ab)3I$\\5O !:Q\z׌)7!..fcaJuX/|c [j>KY'Ϗ1Y,_'_yUNk~,:)P.SA`,e9N?lj}!<0*&3MIBRƹO{`ܙ ɴ=ݸ- Von ׾U'kU\%k*4*Ӭʂ],ZCzu~|3-QO8B7M6ҡse<]Ѕυu:};v\lJdCmE~ImEm]MSGgW_~l^˴5C3Fb\NuP#U@|VhCi 9(` w8pu,t V->@(|A8 H^53Q~0 [qS<] &(V5?:8@]Ix̧vƅΘ_4 +c*klUIlt(f.O} MM0`ra}Bn8 Z'TΗO3Mz/P؟mX-w?&Ua&"ӝP{We,D/ X~'aM(U81z!v>~.6Uȫ9 #L=4 $% 0NF1r JwI㴹oRD heZ"Qҟ';Xxy~޳g+xW;3^w e()4Fv 6Lj&3h:g*P k޲+f9e> سtYq^$( -խ[7[{}R#VGNpgwooͿglaٔ,R%B%t9Q#\.yu%KJ^QAQjfƷbw.t:$CcYhηHV>׵jfz9w;iz*pssqt+%cxSO=$AyJ)t.X{߼\,\ ܰm'.퇮cš@$Am@(!Vc)OS]N[l{]4sxWy |[>h {fAVe"5bs)Ė=5ݮl|4S{+c&IlFqȹK"ҭ;ٱf ]'a.S:t$xhkom^ǹK GghIWAwR%~o1on|nmuo4nTnr{#:I&PhQ>mZ,P-Lӟpu7TH, wԭ9:P%sK)kG?riJBYPGh0&c^4/lY֞O\c`r_uFkpp6}igefd `cLk2fgMd*biy?9>:ۤ}oyқiƱZs41 xAbFeCb,ޯD0졀 0'8,="9Zz!?hpd'0KRsǪC>L:n~#8\?JUA pV8q?}Iʀ(]yi-'|*Y=h|wKpXt5puk0 (ǭci*2=V;gfC)^` \P>d.m3$Mַ^8C]5W%znqt}HX[Id 3gdK$'89(wȚ7WSd#l=-O|$R/j~$l3M0:yh/ZG9?r}`r]SO(TOȵ#ڟp@|\p,+V)0-cW9oթHήL슪ѐPסljjB 6XPi?w>p@y((  9982u >^kBk9@/;|Eo3x@0ID;]5C gbk|8鏨~n[fci`l~[875dkh( דp3.M^*j^X4l 'JJ.0>мH^{;]q{ȿ9w7(ʗ٧[է\4K G^\|Y֘ot?HS2~X]߷*O])Kj8B݄m</{ kBua7瑦G6;g^V>DZ)܆3RZ-N9A!]rgNU.-I=_샎OV ofG)'t1ְs7_/1]e.s&ޖODzwŇU=4=~pC;%,$ѱ:{0I^ԐSضSlt۵nyljfp]o{6d$Cs ? B,MoSM9.y56U/ke%c/^n\l.P7z:73& x30 B0ؿ#CUnqe DEvIvI5wHMIw q0"18+}nﴽ!4j~+$0;$G pps8*8-E~z={D+\e}-7p@zDžUz6Y; ڵISzpQroα(vwwwY]%>Tp4P<7:–DU&p/#nw'u[ 4C,[V-ϼjx5F6O9{0q\vra|-~)w{dVp@[`@0@ȂOG 7#`j]-_>r[lS|! Y%£;Xh7A&Өmh hLEh-#nP,< PAp.$|J;$paC5s*Tbi ҿq%zZ3\͖XJgOɕE˞ȫkkxls~yll`޺h7.ŏ>4ӭ /L쁚NAiW {@5aDx?q|{wlKM{d+0b#6x'0nP)}H~B|N9wzQ< 3[r0=󩧞ziQzAY&>n펶}>eI ύp1v%3 DK+k ʄ& I\E̖-tcCR!Fqޥα&LbMbM]-M-bĵ%dE = 6#ցAI {AѻK֫H+U'Y/00^?,Y67bykHtFm"r>r#Qu4H,Utmh~/ia>>`>!JWt>3"+ хc?jkݫѪ7KRNh AO!ܦخ+mQNJ֯71? |3 6 7l+Hpzi <=! ,EXU@޷I*q:i~*Za_B8K_r"bs [u3׽?"A~*y|AKHAg㦇AcBtg*VNjN7X E[\h eY b|N`9U7K֜k=++D5Ma@و*ݍ4<tvq2~ L'QvLWyΉl¥rPoq.~ OS`uڮjOK+;WߣeңFɃDw=] ?_`cln៪*R) )><_0,ObX]j7ވ389ƪmt,ۡOs5.S5bU^XcXhVTg :y]E}t#jI"g.^m#~Es5uD9;= ݝC1R)SRsEpahVxl[alȧ&N,+N |A#5"O]!_#v!`~%J()^.߅1fjs|BI6Ǵ0̾1WRZoBpo)q\oJz'{O940fZ<| 1>K8쥙lZ"x;"f^%+3XYʚW9BMdQs^2!Co'_5ϓ>3[CB)~/u>$SQdd;]od~U"~"jbxinjL瑦[ngNяzIpu'y>SO'1dL8O0E{{8F^k]#DGH!"d5 Bץc}+ Pk@z `k?*EYe]|wquy? B;PV@(~1]#/7r/#95"ҪCv\DVA^gS_oPTS`8wR=`~X,-Jf<bnR%/׈sK<&jFB8D;GE ?&ZYb{]?L2yazxoov+1(f7Y|`r>MƟSL $"2  dHwWg(ȳ7C`P;{du٧ INfaSDnp8n)B6nNbl=4lg*x2vS%wjucRw !3# "]߾H{4Dz2uvne7`{HdF!M3Rz 5=(|[i1qE%+QK)i)l(G 0[kI^_6D0B&\u12l2|H1>B+Fu;zc9wjZ_P30kޭiq"Ao͢p 0A AJ|DN@YBA-CA@FFDC@+(RP fWc[·ό)[>}W<=K@JМwrxZXL?DmzH="#]]l\ M tEr=DF.\W+[}-M JbM7fMɧF> 1ׅC4>v(9a0ԍozީd2 JI`;ge]DQ{o8 D-Dx e8#٠2NKMs6 F ENDʺF̻C(yU^TTvW{;%VjiThk25"XE0+s79\LKT;DG7;8gz{:npg⟥!f.. Y\ϊOk:?gs+G9yLxдeGE1F pc|#Wi ơEB _%=ȝKtcw1K>.oWqp jIٔ܂TsDSY["!- sy 1T]MM^$*YʅKllz0 0]-F݈C3rprZ>"ư}_HUyMw=;3s=5ʝuѮ%^ٖ yJKH&-(W}b3gO3 ׉𪲲lL)+dnS’Fĵq\!_!I^(;N]r.~C9OɆ[2ʐ52p@.άO:D?'V*WKMD yDG~ 90+5v!Q:%h 1] ?(: nc &Ȁ!cp0A4MsҤck|DZba$dZb`޼[į^2}sO|+ Fxߛijʤզ*:[*򚵒]]Rmpԡ,"lY$b kQI6N qͰ1u(pY"EP9%_50O>W0WشrvD"R`ei0i:՝9U&Z40S7W1(Eй e["8n7 z P](G8dcdNa9 <bZ oP]6m(摥e+MU*mپA)e,dȒIѮU͋ cu'gQGP@ضvhxntkxf'y,izE~$Qj{dVO &f<^x 4 N,Q].Z%VE<ho &}Bv).Dnu>7.r>7 @/p<@n1,&tL3SWΐ%,ṇ3da89hمKڀX-R FOd5^K/P8 oS"D 3 ?Xpͻw8{:?Y=̾PY#>ZӼ\Vk@X/zfI䳞l^W]HIpW 9,>9x9X%*F=G˛\84(`ǒWCQ*i$%=B ]OUWQ=_b@"`n4ch9ՆK m r2z5{p uÏFİ zPd@c_[cj`'Z *]Օ_.fzzjj jjiw rIuY演~ wwkru1jхHMCOyus{=ۙjIヌM" +8Fsz錠3J!K*1Fȫa< 6 <O00hϴ<ӟӃJ~s>]`,She$wcpBnl'>YD},xPGߓ{g' & AZIf噜WbL#8o(Gg9E8{#𴷐E<|r^p#S})Xr)w&@}#I8?μ W2A#JDP~ˍrHg=e<47wN@In+^w G8l5X]8P+UŸ"DzeCIcD֬!KKK  Dk#` |/d*;t_pP-"\%Y1`h#+\ĬgVb4>A-r`]R_q@enea OmirNZRK[kw:AuXG˯+&H 9oP2CC^S0;Ohāi Ӱ'ppUwpݷp3pg[9!Z'\?n<ڛH|P%X1.$7]y] dEsnJ"7{Yfl;;8tw|O YL: 30?l\O/b_u3y]APs bup.Y 10XyLl3JEpT4P^K/P<2}Matwq+O0{:j=Ei:G =~߄\IDzu;}nN,9o=< 4ƺH$+Y{:O:C଑x!1J J = +U2wRkRk9YEdk: @pzzHGeD?eT>/{%d2MsX^ߗk XTl5BV_KsZPن@, NU51%%=5,}MdQ)6$Gw;O[PShShShShULL )+$KYǀ3cȤfLo}UlaJt{I{ZipX er>9_ߕk Z^]~MPR  ttwHe 2mtcDKaغCL['G/6V`7'v~2dE>'ߢu7oP ,ja4ϽDqJqtŵ/d xjr_:dGxVL`l}8EqGd%={k@~ }RDUQD3$??SMhfW&]4;8=Q*:ιf(E5axoDeW9[X4KS(o0%D<*3\&{#Ʒuqp\nw~0]'kEZn/6~f+\sw=G7 >k{R36PӫxԛɄhZZ g"Hc7zuQg0Wkn0R˗_E;N:ҰO=Azכqȶ+ܻE$q4,&̈́v$QCԥ4 c>ttfS43ԩ3K{LZ#SF'VW'ޥz4Ye8Zd}jhƧcŬ5H8a }Al t8zyg+ϷSذUTVD6GD2a nP& Lq$q1j b'>Q yK/'U\Y2.nESبGԼ3E …ܹ ̬yT1fLZr~Bl؊w}$A>W=`XVxCtuK:6p'.PN:0+УwQl`xNS~]3d 52d0NHs@,ZgtW?NNb{A4 y2W0vnK!(JW1tpk8P+KA2P?gI%Ez(8ƚjM] q=g6 2r0 7nfnf44"ܤ.x9T!Bv{F@kG21zF rdl*Z8=ژ}iHCkiRK3&c=k_+8g_÷G]Aᘣ'Q+]ÑC?Ǖ*$Oc~d rvi5L?juS#7.7$)87JEfUm O"mCWhΰ s3)WC4٣_k9VgEs^F"㈏f֖V6fy<;3tc,M}rym:5f!d.@ H2 s#*.S[szvŖUUF軂my@;ǘ_Y%ݟYHEr<B <"Ҟclg01Lb!2hyH]Ct._㕯M1> fmڝ<\g&=u1FE| nurUnVc=i6eCzCxѹLB&'hP'c8r~0ȒèmjO?¿o("\#^#X#a^[j{Нq_d\|LZ/o;hrEifOLnt8HW?4Q>HÇx;:J ˒N{Ժ3uڭ,SdIcXz;8kxè ya_,[MV2tx:j짿m::*Q\M+gE-/t <b|{yZR{c[R@ٗT1H& j-i71e6`bl۾]_ w b)˪~3?r(daK` X0hybk<|B":)T )_w|,g]]s-T5hJ+fJIyٛNJ.RRM1-nq'* `e H -Xwsfvmxepioq gzn+@V)ZݷPv fl먕l$}K/"Ayh/ۨ ·ҬOr?4pv aض# ֠waOa[؝Cn`] 7k+ظ3Cm[3S t4cϣTk3dK:bG(4ȏ7o3ih6,cZ pxh-Y&bx '^6CW@^M WIEY$'_\@{0FaA-(4 Ҷ+@lP)ԊAo=Un[g*Yg\*tR7zvd[YE}4="5*yVa oyI3[e:a}<8B:~ ))) )!&Ae8۳E5'7h':;,ÒUZ=瞺Ǒ[yl\zcc-B3tD}w]~9;WT7cYn=Q?قif|L0UHg2`?BaQs%M@ֽJzS46IHw^5)8+D*m{xc'B%]k'9՟\EE?c<<~%hNK rӌ6 w 2̰W\9߆cY2WVX KcoG1_K/Q_qq*wiFĞ*xZfȺ˷}WP@G`z^wncjOh#*XF/:@| 5Zy2E^5Ⱥ!x]+Ps7ZBfQU30QlTgJix@-[ 7PڛGkkkGPX,I~VzfvδnzA/ܳoɸ;mvr@ U3U [-4- w1(jޠ `z~{9]xZZwd,ĭf.RN3414ҔMRfϒ&,REN$ 6) };Z1Ne=[-)hwku ,< N^:Nƛ-̿;藻G[CTU,I<)"5U2[ec5̵$͂Y_솼'L*GOз}gRMx9Z}3'vYL&501#ٻ"l%`L]`qW^'[}e q^fašxyE@vө@┪CFkN}@F45%9%U{PީbnjY_fiR:VLQ(, K7beaXVRjnleه:Ɇ* &<96DDEW[{=ߖ>.c%sتk{1=EWg|ءm^V 0)UŚPC diamSC^ *U=!~'FʣMCs_Zy"eub{k>zr 0Hcn"d_CU]_Erj@xK̓u|UC%xꙗ(fѻEMZiή^F.5t^3>W|ɼ9=4]|ͭ{ع'::n:::wcs(~ \1GA$!,!aaAƎ>nfwnbQr r2y^Ś16!>9}ꄑ6oM5k3<zeox?[ZO` xeJҩ/\9/{I7P'7u;YwO `8+lF[ =PbOo {whj3֍ن&"ϗ^zE@hA@@x{]I6 ΥN)-D+)!r_femWW_lį A&HLߥNe>Dݺ\g]ԜD^[?Ӄ7u'if>V]GQ.io_"^'ޝǩD oa@8G2^-__o/T(,S)eٔIⱠ3F~#=Z~nyQA:ÿ OnKEkOtMR;Etjr#'}leqxX`dSIc_lVz*|JzV6R6L6x6^?4:19J jѫ̓׻o7q׉.6 &ˍ L0M̬UcL @;_)uP *{M;WMnOln*Y\MPyw3)׳1VP~44n[8!\#'t9rGk$A=:ڗT3dKk/{uGm[\)KS欣75+OIWi B/bN'| 3IpՋ%b, t OZwHǕkmiL7Us/گ[E]Ю氫R.J\tzt6{}V3$K6ҭLM ͔] 5\4qu ldONCi v az`hK{'Հ_A l{ֽfE[e)0J !\!8CO8|quKwv oN(W&_bXY1Q302_6:" 'pz_)b4PWѰ4222qY)f|M4phӰcF;*BQ>>.Z6&z?\hxu&oX2X*0XbBbV"IbU ZFqfQrY\U]%Z,LՇL,%0[䰂ej1n>-`weްI9Uݑ]$])]ӺO9:ߢ> xg疭fK0B-)x!(oG2އyK/_'D@!OT<Ǹ;d> 9{[֪Yfwn\É]A. Kv튥9;aYuCCؿ{[Yj BRU[#M=$nv1Ÿ CzP펟Ҹ0 lPMnRvN'nY@.w`a0Q[ȤK|4;íL uF˶ &R_R ͩg[ 7<٠R0hd ـFѓL#EÓ@ڳϳcњ`2)\I8am9 =%1I*U,cbA߰sӒk;?E+ivK dC0T6^MH|n'NrPY<;%Μ.ni}hÞ׫;(Y[&*@ n O<=a9EM3}=Ӝ뢹NJٳtr2I)eBL?FᙿcqjQ:࿙P^,cjʥg&iXN`))>/}|m.YN5 )."2"6?Y3_jx~^NVV7,EMӃS%^ZuU1PK.m9OmDbl(WmOl5߃|#Wulln n*-HxSh<|]ᖰl%,KE ;g`jph?a d gp  w@ٻT6We3vn/<b4 V`~ݡ ]`}<"L=>A@@GZCcݦ5J*W}z`p(jSSoT;*D b~x}p5 xW%3ʙFB g@pPBW`șXu{D#[Gg\7OvRLalAs.aC/_baR@dNA#.AF[28lQ6gT,g3Qׅ~ Z F|"ϗ^zEDނtׄzMQ%"Qk88 mO{4SzIZpvk{xG8e%6/ w ;0p{pu (?S9/H֚fDU5Zy8ul]/հXvy JFx$yO)<=} #] LBEUKB<>f>3ś<qxrug>ej`"&MX @Z1{ >exЙz6= R$*[O]& &r!衴`iUɖǘ:B?I?O]}~nTlR"sw*̮I'!@;"O*S`ˠ@ WO{ ]ms^?=F9GiYEEY~ wsHak]8c m4C|%}9])m:Dma&҇xK[WH׮'ԅ0 qCgتѻ}L}v?I,V69|5\|V<`)MXC*,(t7V}dRdkf}VHl]lF)Od'760?ܢb 9 Cs \5]B=V"?sv@7@Ac ]7bOG7 5[)FmvP,vfB{DSj% 8~ǽ" C AgI~RDkĕ2~#nG ^4Щ B0] 4?"\K/RX&rl8\dQe LiYhMy E ^ƫ;K#-Ef٣bͻdoۑ_"4UJ"#$1([DQ_7o`^4lmRUib?4Ĝ:\1(U}:s&F5NFw-T-m0Q0"2jdMjǡkOv9% [ḨkZQ-"]id<ɵN\`ũ9|H;:iH LDʻ mcĞ ['UJBZ͌I|h-H&8;{x69;ٯn1 t "rٝ>nG9@>ǀ9“ LkV41>K?3<~;vqD{W}]/5 3p خGKB-FIA6Qy o`]!J0T90{?3_re!Ffvn~֐aF1:IjYy\E4exU9Jn~J4aN!_ą>D&ъeHZeHMUӻ >S8XZ"n9Oh-"&TL\KT & `^4Vo ϓŵd*Ɖ.ΖMu%͌)T.K書z{??Ev@Bʹ|ۼ29 zP';X"YQ% R%S,U#S*]!/Y&aVlUh^Q㇍DD{P68R lAmD-caNp_YT2D7|OۗTbJ;i!6y|7+hHɧwYG'@2_P)qM(VM5wR͵{k{qfm珱OR%|׍c,t^&\`3.1 W(/'hF> ZPeh"&Yb6^Ӏ?yz>@mn.Qѻf\;/}ʏ尭}-6%9΢N5.ɦáZ#О[C(j%e,j,B I0Fx'y@e i_K/PDH2ׄ6E}~ۑs.dHQA qoenli` \h;?=Cʞ`+jpw8 ~ߺ8ܻ8>:;=;Y칩pYEOI(kUC{=<@_K8~Nu;mmډ,p)Q SӐ O?>?e?*<9>epuKƹy5q]THעA8 DqP(&*Kih잺瑵{ahs{táy *͐uu(ūz!܋U=h5LcͤQklN8r yF7C8)7P;8H%2Z1VO>Qwt`9$қ+88{x{x;TAJjA$-.pi8Kü'o1QJvA{@0p ?C9b^"]!A ñ+CBnbo-oae`{{ Vtg |$?EAon䮑X\#"C`7`YT(F[.@[ ECDABv+,y{׹s:ױœRdz6ˏ\>Dq( 3 =z4~=Q `.?dBj>ҀEoLwo`0g:m ػq58{Le#U.sJ[)̡i.ifF AE*G*MC`$ ܇tp](X|6쥥"{e3c6RN 28/9* .i070WS+{ A @bFz@SuwO wc7xXquiNp0000pPw$?H-֋7P;8@ ΨU9 ~1 sTħIHvNH_֔11&aG|E)<^7QI¯SGωK>5V)E'4."rh^zץڭ\Xx8Fhqv?b_mW7rt˦1AP~cϜ4,S{cyra=`1O3;Y6JFW]IGV=#}֝Muu?k_W rݓԾD)QQգ 7gi/MHD<ڂn:`4Xvr`$Xf+f.)-lfT'F!hzAPNߌm/R݌]ªCqx~|B>$ -`?U0gO纽ۊV}@d[z$nl2<&z$:=.0ߚ|/cH`7Mg)fKg릫#I]Aq8sXiPHi>ebsMͷ<9LuTCh /O/p}e⪭K ";q>&Xna z!_E0[DnXPŷ@͠@ذd tbZ1(=]{$Qtl0iίMn|!+w61E**Z4-'KE/_d njӹ7'BMOY6 C P10HX2LZB8L2TyƱB!J_ W<N rܾz*s֏c]gyā/|饗^(OA)/QeIFJ6:uLeDyhi0pP6 Im #Ts-3Z I2k:Za>6 N=Mu#!;[Z8e۫g3 5F9m{i/i!.]N&adž]T5 0o!xwNmCA|wO>r8QM/蜧u[u֩vp&ڻK+ M~DW4lTC_5ckd$j?h*LI ׋W})hM3dk_aelh)UG51+1(}KNtAhO2Z w a-p#$5fbcc ݓ" r+& 8̸;L{h֧$wxlOg3  }of>/e]"S~(9$06\(/vBl;Kg4ơeS!'mi)RCu%M]֩CDm{Q?&"zڸ; 2l<"ubxHH3 79ޜS+ Jv>ڃ8Qb{ UtndbN Q/>n@%L=tucwl cjpx|_Eޱ=&Zڜ=Cu Gi@~Dl@ ec/v8FmFPfz;Ţ(c-ZӆT EZ@T R:nF߻;3̞=3߮u'⺟%uL% WسD?'=Jep5M27.c0qڷ2鎚KBܫDj;+Lb@S_{%(z'rC y:B ·_uW%Y,0ݵj,-|EbPS(Q} E*M5iD[8: ٍrZ}H$0Ok[r@Ѓ7f9j1iMG]9m[{>D$Qѷ埫:ޏcUޣVk/PeY'czE-wua,!⇝&ܙ դop =L~A&=2"K`Tgv|$1ɄZ aށ6?y)-v^ OW5 dlŸN؅z6= ;!E"DE},tI2Zg |%UL}m2}\DSOG/=4v͵w\t\t\u]^pR? ?s.~+4p<3,b:iiAôl Q,mmԞm=$ xLstF~qiNj8#ÇCUΊ\pe ԠbvbL`]=J:1htF&-Q3w0/\>F";A&>@!A=ϓom`*#l *- /n[]ݘե5$ YO"I5!3G_|KU$v8Q0^Nڎ݇=#}}}YQƑOhnSLЭf_YÝY'޼ܵ}~9MI55ͩU[r @+a ֐֍u-!( S0[up{q*^d]"mf3 o0*i7KynyvcИhؕ.-T]4}\+k57=f2v4oU``c6cc 8FyH*f5`:4}jҐBFtpZGH.eF{ 6TY:Z18r{cE3R RB=P+T* Az." XDh@6'hևgvw1lQ펐NQdm--_8rQltb$;I{>/N\ϑ C<#_d'CL?=9 T9TLIvNؿDH*R&^~"j&V/عy Z9m_N'Gd{έ`- ͠YDSYpCGG=9PjPfc7`ČcvVM$,="Λ7ИeCyG4Ox9QqV:  +S8q"D*Fvj!"9כ'Ktq]|_$bRk(n_[Q=Ѱ~xNs[?\r Vi*݊݁r8d\@^E`{D2śU!a3nn2b'[XN?J?GU8xkHݢB"AbWltdqr*T%}}*cz' e Up_vδ/D"'^*#ϮV<$8 w?Dzx8v_`vk-_(;o}>TU ӛ(|[8yqH:_Gޜc{̰+ub (VBS@*3LtN݉䮽vMw}Qj.*f)n!g ;s#k=8a:vחdoAu9̷ Ч=sz{7+?ϐ͖9daCJZݾr )ƀ@o!$Svl|np}gla5g^$bYeZ_E':IR)%-dR0ߜf⫼ Qb~É!d}wOsEN3NR?iyZZxhNi/0p(Rв $! gd!"9#`,v񝧮6Kȕ Om/gofkZ;H}npQv+VV[FvJɨ;65U\m<39w 9ܽkuW殠=G~1;!Iofjd(mVK;L9羀eg@2~5Sk};kk=ZNߊIKxQ Sidt&\4nޥ3oke"mbw|M$% z{ŽIS6 xY@L4 $x Gɰ@vgMU}^W좕{sQ3JnwR\@0fxxd|ƲټM+[&_.1dNy!|L(hXT&bYT-ҘTvl000y͓k  PoaJT`˽(:>wMFR)Tѣ:k, ܽ0!&gm\(+C8)ui5U}N> OK%l\&V˝{HskWsDf5l|'Kq,bc^۳S۫T;Q_Om q1v**vG6J!O4c!6uc(c9-.\uipSUV",pn , =_EFrCR[Gi_?E!դz\,kUf5vfPԩ穦֢,n}Wypm3e)̫m l Sw.j>>ݭ)q3rЂ|Jc&^qhhO=bv^H8|,ei拘%i^Uoݲ ­4s%cNڮ`dq^=~^hn""i[`p~_>'>sz34[M#0 wp,aڣVR е02k07;ux jB*7Pi䣓yG圇ewDw>ož oQ,tVRaZMv i#;B68D69@68BzhB@IoZokܱ)()ʐXIPq90q87vPY _H7]x{v:rfMĩLȚא}YR'v7)O=5g.#B<<VF=oEpW*vQ;x4Fm\OS%&'hLzޜ$3e=i鳤qFӴA!)BȵôF*8(1W5cC{PKIg&f"X1c6GNq>ŋax:LR/J< GQh[VwcN歶3?|v NJ/'lbinmb"@l̓mj!.)Y⭬B4\<$My&(0~E߉rȁ\Yaʁ>¾Czvfʫz|ddOTŋD 1ZЈHx۹CMFllLlLͬ-\ucV,Zi.ZOpsjw.G&۶js1B9ҟ&JFʟ?n d $CE#&"!a%V!8|rxfewHh3٫FilsJN嘅ɇ)c)CI唞'\}uW+Sxl $$S(__eS K{Xz46۷.ʑHv0H{^'$ La|WLIy`@,s.C)B޹w+DSUdyCi,c nr<>D~sdsb{fwawcnr:iv׊n7梜Ŧ(4@}úwkW izXz8*KD,{)𵁾뵆:+A  yi\K8h'kLmdgg.hdhaRlAy e7{yEթv|F,ί _e=yQ#n>)Šye ]M9ځNJB"'Y2Qj!I,b(m :Y}^Ꝧ2hד}E 6+v#3Ɏ`9O,^;V綫s"ᱫelX:`MOׅ=l>ưscS= sӘg<̼ <}c}bv {Fq3Lg{޻l!AijχI-HMGp Wᄌ߅>IqfZF_WWl׌׷]o*ݖr|V?|S#|N'sQIJͻ,ŏ>uL&&&M[J~^;^zj(C~;:zcNd0O7.N['X"^!_g[ kt4ww\5>Z^ڻ½tt=oz赻鍻i5گl`"ai"`?2ɲEd߶D9;y}ԩgH⫁nqy P2CH%CBj .?vz?&52hӬǤvĠtzpyt_jYj|54=>}_B);P4-EbーWտM^zf\<*]鈍ٜšӡ^댅< nF&]= {6rۢQbrꠧƔ=7ՃrG'P*O[*o% X2?m.}[8+'Fz:{zHGfq_aQk_s2^2265p뒋?re?[}BN)*9&ޭQ *+x أ LETLw# vr'mp I 6@D *nkՋ@@SRѭw}N/݅Nqx%u 3xlqmخcm9#;#{`F.5~Z5 <|_WzdE2n72QN&ʼU:?~5j=' vYƾFVZVVO-i[(ZYyX.&n?/)kO+xh,Z*=a i%0sdy4W mF V>>y)||T]_y==F<1>,Zttli }tmݟY'޶&1G16l!.(5rRH?UT)tMn!0ld+ˎLOr=n@m~jɚ;NazӮKFvƐδנ1Hm!+X0<{ms\töAdeAyʖ!6jN~5}}#ubޥxG{ (lxUvZ߮IV+/N fO/8gQH@|]{Npݱ߱D!Q3J!0\)*X-_9#H!7UaxI˼hx_zZ-ͭ-Mlu{xu~Dp?|v؅^:FraNsn_-#D'!Epʳ}c7v\"v;/G0q5Ty'(ID__3]׼רkC+[Oe[׷6v6ֶ:^JÕ,MX Y9<ڬPפx㛰yG4Otyp~P.{+@},'A P DM=hxcpZ >OَP(`=F5F/$A%\ulu\KWcjN͡Hss|޷O&smMjn{»K0UMv 0<@kl(lZIhN\ì'"{\}y#F˸&Xhf.Y ss-J,zC'$3Vжзo_o_g^RvɡChSl\=pIt'V+y YŤ9ByByByvï~ Ycm q"ϟ%l` d9üt:]tfux'/LP)˰ׅ oFQ*^vNmGjYJAf>-_*Jr/9k) 䮬bn'6yJJJ`ccKHH ?x 7cJ-_Z dXj[s*z+C!WHGlZ^4h0I/ ΑФw1M507Q^HAM:verak^ˣ(C7Cj59ojDvM^k\b)<>bbh0_4,M;%Uaxnr]鐸*_]֟[i0 CB˾bV)$^0LmGoIsK B3m!zD}g '.N͜2FACyP-U`+:%/&{˗Bi:Y++z2f,gql}a9m%o$H;cm.3վ_$V TOᷙ;@j(G'u\(c`s{XT;2mS Z}OU4׵]9NWκ߁޳ x8O1Dwq$2Fh'i7'g+612;,̟>swn[ YO")h-Ua{pֽ:>q|lM =4c$S@j0A}PG2kiN;./_?S3ݏS0;nJg>,nfz9mգ싥s%Li: e"Y1c=ܹ @0BiW)P7㪵h4reAR 'C]ZW!+5=hO+5%YTw],>Lt^tetTeeme=GO dFU?@k< MBֹryކ5NrN}2\5Ds2W> %KhO{Iw&=-My(^A!VwrT֐;/]33 /dˉ[@u̟Wk-z,*iI+O9Y.fJ*b]bVz2}R~$4 VNv.X,}U\ϟV"%EIX捔(bj2pf#}vjBLOR>fDL]uoY\ *&n\84>]-cgkf(9S"~EƳqC(=4c="ޮ::t1Xabgom^T7=/v5piۀ/}ړ*C^G 1}j"@M>G@Hm $=GI&Ɖf&骺؋j3 b28]Ji5KO_{UT7o;,';e$sFMFHT&/\D;`wd)>OO_w^"qZ~}rq͹:d uZK<6`pJ$ /Tc`fWg&͏/̬]c$s4<ϻ?:Y;Gdk!WTL2D=Au6O<[IEEc?$$WW s17>J؛6m3ܱW8yp > t<}z"~B9m'O@9U*[_ss[mUrf&KM؉f^AjG}&rbܝRy/ǢT,c+4.~unNޤL{7%:9u~^dZ޵H&H(Vj g(oƚ@}qC(T#s @E=C5JAm#GHSIR*.R)lmgGxƫda+n}SJ{; PܵtU*pYPS_)i1o/4fY2bL6K{!3ϝ<~ 2r9N2z'5ԫ?T\ ++a)XqDu\n|`Qiׇ+DR1_w -bF'x@ߖK1?{ xepTqq/H Hsn4AǎYMJ@D6@g:"t* [WWQ:ͪ>Z/^Xqܠ%#] ZA@7]b(1t=9D%lT,_Uz 6\zabjJUӼm {,ֆGSSwgedljҮdQ;ZY/FZ>N:~<8yg9v 2),>|/$]|])cOxvb]qʋZG@7$ic.S}; q5;%>wxS<9U mI彽 Cԧ} %suUP7aWbn;좨k0O@Z ~ ?L <\{6 Ctfu@9T|o2O0aK:_Ta 6 ofpޭ#[w'nA!ȢȷbEn4]&%dk̕ 3k7V ˧Ћv~/qy1OCbYyښN֒7>P]^B@BVE?N)J!amk\Ó4$xd"zFھr>YB\M߆=/Ɨ4b.KKa=U~煜3S8S犦K +.7\>:^Z_$!|/AM:[knVڥ̫y2O44EEEȃ@jMV6@ s}jij\+aD7VEvֵ>ن(1!" S^#mzy̔I4a^:@X:#ufxv>~T!+ =^:(FQ#E!ĖLr[A雷K;J@2!PRTCmH^ .@ :dCcګuLַkaboS!81tW4'@6P0EO7M0v}ۣx '26o={tce-Kp;J;r{Wjz dګ^982M˷Y(b \+:ۏ>1s~ix{+\zTZ0fJ)˙Y0RA.x}Uk8j:U"e(}4Sb)\P$n/͏@PlY w'.Oaw`n:#!Ldr rG;N?w o'BM8+]ı_~Y%|cϾw c}ez>"~;/Tl!H"@qP&zr x}B:ۻN19̺Z/x˷\B5vW };~+B<"b^hΕ>WduIÖC_5N> /=s& 04R j>F֙Uܝ !++3;`$!D}YXl×hқn.WCشy /y 'lyN <)))~SQQ'!!0000F`󄁁ejjjH]]ZZZ0000:a󄁁b%%%ya9 l000yV[|) ##CEE G@II SDGGNBBbiiMOO__?}~~~<<+}Cw)C[Glukffj~bks&n#:^[ߋ߷m9,w,lp <3$ˍ۞| #gGg,%_&kꐙF/?V?A!!D˜ߐvhjjC#~y>ױeh*=M݈ٞo9<,uh]Ef$Xj(zflw7O...go?prrR FFF _100[@TZZ^uu5W>4>>.fXUQQ'BH"NXj~~y\lkkCBdZ}^^oL}srzq`!'{|xbht`oo8s>r?VtGӵD=bԜ{7KwVJM25ϙ)򭞏m]i]^^g<&[@3cw &d.h*g'yG6ުZ?jTW"jjj022O*N|8kQ---I _UĤUmCī$8jrr? K Be'W"\J*B=\?E GGϟ?S~8gBt}GX\b[5n'B;'$333?떼/8477#r---He4C_X߆ϿxW\Ȟ񸎾Oݣ~nM}m֕~%I$ _"^Eۡ,,,\/d;QPP011_W^6Mx,FFF7'B;9!-=dyc7L&@'lp <hg]rQ%̞v kii9X[[y5w₣Pqy5B;kw|"B\s/T/?@y"reddά^Z>~J?uDȕK_ڛ 9O{eϳ[u:GeDK$MP0  7QI4A.^˸ ( Ý $.u@`d*`\Egkh3"og ~:a1>RPQYK&yv}w劶7|Ze 'w^I=1$O<'L47ERDDDoFY?Ebv-0QSs&y>t<+'xAq~?$ <I'y"4ϊKvS3,f$파xbnHxKsGԔGGϘ4_>OLd{MMMKuy<ڣAR;$P뾡oA*ʊ $<]@RoI߱޿{`0Y4ez}NZx_KvIz_;;u氼< ӧyVwh֯riq~T [sPy%%%G>;m/NOHt4=Nv9{/aE󖱕X> 9i'2ePJz2ɖ%OQ0tE]v/Xj'LU I8I> ˎ..D㌚GCbӾ/j3J9[k{}I/=$K^-7=N圕v<3OwykYߗ 񸚃|p#iD=['y"4ϔ%+H;K/ػ/00휝b߻U}dM1OZnjoo/**=,gnHLyν|Mbb"ۯ_NRA>϶0,,LZ*.ΆjINb*%LA9I<@=-*HȿRVzA7~ΪkP]zJF<7R6NnzTӕVWI&A_Jmgȭm_sRM-<H;a@ `c:Oc/M2eʲef;Ϟ[^ݣ(/ҰӐc\?FIڹ.50رf=;dS'y"31sAf!֦wJ N)ɱɸ#YsI"I!LNNf)@3|u +KפaRjkkg)&&z؊jlz'N}$Fs<3"F t,Ȯo"|.^>U^@fH<29w܄[~a0q";@'_<%c飖U/im?0bbccY-6 P֔-ӛΗTO͓$z\?`<@<ܱvytW;`%y=y^,O[sa8ɅoNRkL0C-} o,' OPZ|L$rx_%n:ok^ j}tяSUgfM9{sninZeޯ<-MԳ@(~n˜J2ONߜ v'zg Ϣy[\'ۦ NvG#4OEm[TP2oN"فdکT=WT R\9j=9mx:<02|At[. EW*"JCK kT9 +GQlJU9 T> J޻z?~uvYͳZ͂XƠԕ; S.>Ǚyg= J #alN'ic֝aޝ_;St$kvp='\.Id.g*ƒ@rԊWf,3Z)_iK #y6^ +I>Sy%9y%UW O<'NH晔ȺZtJuv7koWݮ( y2s=MVn[f({6=_Y] 0Ov ]i;uīފv '\.wq']W,9k"drjEEE4K?/bP ˇ=O y/8tKg>8Å2s;aѶvx,=OX5<0Oxyiy yx* O '< xSrы0O`'' 3Ͼ|!<=xp4T Q)( t3 ՒIXN$QsxNT %9iEfs endstream endobj 780 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 804 /Filter /FlateDecode >> stream x1 o@DB:s,ૹ? O$~ }g?d`9 endstream endobj 774 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 781 0 R /Length 427552 /Filter /FlateDecode >> stream xT]CT@TDAr9`@Q$(QQɢ%#sfm{pw9UOUOT?St8/|'ո9S%ae~R_-uv( N %îmO 6.~nV}NjCiU!gIIw =O;8hKi__9R6fʾʡ3Jw7ƺ\_ %4puX䯯v3|qf<7E@@@1獿L[8&><5i__ SIvr0{ou# M3^xfؿw?HIT{@jN_W\ˁw@ &P056~.krl~0޹`6^_6UG@@6.:ZI8?z3 97~5uaS@Y»~Zm9T諲<_ldMas|NI v3ZZZk%7UG@@Ln;X<=Ŭ.uen,^OZ`0ۓ\?ZWM1/C)8s4w7Zs~ Y_Y^|gy,59Hr@N'ʇ:x4puXjjL_z|Llz[`#k:KnPtr , *^CYIk%7UG@@<]X*Kx9 V֥H(yi^N'*ӿes ݦ./kc(0F+_w{c: 3]_ize>tB@`*)-OWE~f"35j:_]sMϭ\7333 EKBZ;3% U^bNAա# }}kux5la? KSCk.gy{yJp3{4da1Rp/ fƒK(L,ݖo# Xm_^wS|-I &Ϟoy6*/OcX{%lGx&&gݺ )Brif%zhSu֦]]kwTHVo\]]"[$W]ޯ_Ή{p:"O^e29=-gwLZkJaM[_kno,). ~Cr,ol ៃ<$ό|1[ xצpuX?=jٴ5kgMF<߳ '#&HvwNEkַntwwÅ7UG@@r}oJlVWWgGܾ<{rg7O'`ûpKJ}jZ OȑA 89"XE_m}{RpݸS#%>llno*=)xm\Y^o5ג8|(8Xw@xx;w›# M0k{Sm]ws{+!o=>Wu7NMk|_txK!U*=㭄\u{{a)TyG?J)g~KE7]@C {ou7The~s_߀/Q99X(hL̵i__ E_3V]ɍL,{[ٳRѽ36~zPۛONa/<12'XU Ny" q'[C7W $@?)= !8O$@, eMy" $@<<XNo2D'H y?[^wz7D'<@ $WNy"?y P2''ĉddd2@ $im'<osPCuR\c: 4v5QbY*|2ɑjHmEoLIHB_ eQJ*xJF8>ĉ+A)EAPC(kʠi P W4:JDG^GVŧX @4h@_1 v !wPb:*E*''O"U|ch>40zzLM .gYLGR~yODdh)bY^E\fU@(ЀPh|2 4\|XAsD })hG1 d$( `ʗهhdh@AmCR%eۋ愻D}|V BEV%=*\,x4h>^ YQq9u\!5BI2yix@}PhIRxxelU@)SKR[&*NĭpIщpeQ7_ިlwImQQSP!Uٽ_uؗ,*D_F/GGce@ 'jJɓKRhBG}{O0`.xJJ|E@eP` ZZZ ÿfSʣ5[>oj N(+)|niCJJ KqqrGYUe%8ڊ8_qpD.]^&Fސ1?z ~N1 ]<_({_Vp\ϤH?SU23d<Ɗm%dv~K۶F$o5K5A"(\oA*?h.3uQÎ/=nVK(?.y)frK;!a|qvpom$F)/?&?>R6lwUzmܱ* dx,9pitN끧UUjkhȚ';)'.17U~۸~/$D2H.>+F.'A}R"DS_-eKaۻhg}\f)/\_]Ϝ ,3|&iՇ'U_H 3$|&6?9Ztt@9OOxxXL]]x3d#]={Z-XǾ/d˭`p(3í5,UG+|`_*<^()+k((,*r=;a_jwy4ǝ{)?l9#:{u^.J!r)[K(;,3rSBt$e>jtrs~D%H)@XLu9bxwe|S-B*;=gi@BRX6[wڽM6X5R;d\-!Ym:V6pj- 9Gғ9a{xΚ8ZD.I0͑7%th_p.{Oo3eB71*^VO:FC3({,ֶbx`vgFOG* EF2F_M;[1 Ҷ}sL2{`xHBeɥ:\ǃM"[&qyV7KrT #W83+.%oh3)JL ;07g[ B ;HSVID'`[j7FFxxŝ"E:%}s]jM#}Wsv(b$LcT{tx.EpqhV|-'>2Dvߝ4O)2Hj'H'Gfr4,)UFs>~MkYmލ.潐6 3wzx㭃MI_x2ʄ>&XjɺCًBɫOyOʲrW!aQ5£t/޶rpYt+4[YUR -{޷`LodNe-x)m|QEq]e>w)N$lνx}~]a{ѐ)K~+7`uS҅+2QZَn7=Z=}B߭um'JTem@3J=\_ŗ'2U!"'A @ 6] ͼnE=Bnz:st땋./ߋKG.KiЭ O1c|KIg w|xET|ZOƙ_"9Yg(rv8L5sV͖[;_< ]&%U:^m"Fq%h.sGͮڞm9J$gԗʥv!J6| 7\UE=eL=Gb. Yv˙&,zܬ+׽LΛZ-[ . cN@kYO*ЅOOY͏԰|z5O%z];,#jEJhi9\K5XYY*ג3bqm5KW.\ od\#Z-`#:Yk]Wøtn;}QC]7w_1Z_*5v7mZ9{M^ >j-=2гnך8vI=]mMFja^+Dk<< v Rt7/Z}D?En:C~7^e Q'e*x?N2-e@ 谴"=&YFW{.Y6e۝nBAN/M_bSfd q?5zGDRx\JGlЩ lj}͜.tIt88P:`NXh▔Iʷ{s39 agec>u^DcF bӢT3| P8Z7.%L]ٲkG0 ΥU> [=+]P#k7 0IQĶΩQ+Λ*z3iơ~zޫ׍bI'h/z 8a֡[.UۓK"+[Xx:V_%)[^uΦMF}>zSgW4}Ly%nl3ҡƷNNΐ͐{Onu0qix |EԃUeE§EE,9Xܝ3<|٨SO/T^,_===UWcZw'w˹[izr<巉:Ƴ^s XK$61y50_"[wA}B{Ļe(уGOߜ+;ĮUMys!9{>-I9[Ps(+Z~,Ad-|SW-ME ¤EtǪ1RSIHfoN~,͢/l{ V"{9{?(,H,}ÝP|(u Ïy'zB~7՛˦~KwW]W-6¥IANn~lܯ%.\79[ ɞ-㌗} R5$_qԸvxˋ Yˀ"P}yo|rٚp eL'V\}| 6T0yv- b^u{fI k-'lu uေJx%3ے\RGKZT)˫^6"ˤ2Ǐ],<|7JzHW2DMpumtM7wQSSWLHCC6@t4Qa_y}X_ܽ?V;e̹2RM]Y/9ib摞"V9JSxBD}d,~v&F-`_})Fx>XO)sR1½ X+v SvRjm2A4Kx)į淼BnSJGN@KBBMɛsZHt,)Xdګ#wwy"%egK鋄DmsSFvQ-Y-X4toii>Qs2l YٵgItR۪y LubQ8|-5 MrfL$M=dv~wh &rXE g^E`k,łP܅ .A!p!pw |e٭a;UǙw{//k=|2W!K&KUhz`fQW3I˲);,G,sgiGr{;Ť^ZuWB͖\]MCFHwk8)>g:/<&BX*w%z0sw֜A.͗ݼWf 2+bM[X:/~̕oLmKJ/wyĖuotC-N /J{w㤅ِ{nkZ/̵oX˩dH`Dez l*(F3hx*g8Pцu e2`9HNQT>Oӭxxc|Lh G_:{_h3A\Qsi歀[hhSoQl& ݱZ}A!reVUm<@(ġ|mjB:ASz}z^QpJ`>SI5J׳WTXeP{>؍Y۬8JapǛ|aMOXi8Fz(&z\0NfkCArtwŦ0&SHv-q׵drvRYSyD d ~ަ?[ӝ'!y8E>x{PkcXaFB.y\vA5kyt#q9i\ RK)+O.bLљ!|{Q8elE?>X`g2ϫeN'G}{bH?XKU2NRk>lq^? scr`Zw!IWXH)V!V;or BZ-(^ cS8S*ZAc@˱GjVH۔Ί:YT%FejPv[aW.ݒlGmLu1 6ciceVϞ݄serlc;5 _)ol7ex^&D]xs$ ̣;K NB$gfRn4ڢK(9ܣXa{ tATk\R|l+T4b|ه KijI-ZQg{ H|<,Qkn< Mlj\[tSlfa,c{_~0‡iu ;[0j]mm-dguO11X$03%3}vs$$*9F<(6DSamL(-Qo^Z$u4b-%c^a@ \Mysw =כ,wT[9#n=ODoG':k;}RJc+~}ZOxqsq>{FkڳgNZ0cC}lnXe9|8<MRRҟ{GKKAW[pOG˟rVu8w5 w0 kֵxp9hXLꕭ]J–კ-+Nx\#pɶvbnJfF:6cU^"0 Np&:@&71Wm 5sbşgq2m3HC'S%7o8[,XX/8iWB[07[''!A<"n+ ,7kuwq_uщg܌TygJd+\0F.^'Uh6g6e' ٳڻz[::Q1W2g8rJT|t;l,,,SkL:='*ɯ&`%D߲ecp(&VirfJ%yO s<)?Urv6z+1md_+w4ܹf6V0qEYi9ݗJ9!J0lccG)G^M*@]F]-mǩ[D}XAa@~14ŘyB B=2Χֽ+g1튷S.؈)-GT8m W"/3 ax΋%?@w X]6Ë}ٔ*fTkxiөhk<G.s8 u|gXL~z£_N$ʍ$%*t$*6%JK(8\yqu79:~i8Cy,oxfArKd"QM+iY8%?yB8NnR;Cu"sY208+ʴZ{O}Q%_lLJ>X߈_ " [HQ=Nۙ߷'VΏOB ]vjCabi)lSz-Lf6drOѷ윕5OWs̥Pgȶ][' n.ᚬMo;=KsRNYд WA<cԣɷTVIjM_V >eHӖ^3ޢif]z#&ܔ6OϑO{@>^=B\=F0\;#B9`go}-$ɟUoST!{lRwd^(&7vQƷ\SNEN:73:yVSQQ0וf+Fr2kK׮^MkwJ?ë ~'b'̪*ZA'_yU}4U}MɎ=RǤXu/Z'SNpSmZ[TȞ>/0+Uo&kbc}xR(%`^XȚ^ l8ғIUY/攝NCHVCTeR96AུU${Æ!s/-]p?Cmz~W-NqUS)tē 'ae'-t¹JɋTתW1+> Y2(KJ8 =:PXy)>_|`vw]v3G͡0/g(Jh{O, l&[Ҋap܎y%,}:XecxbU-Y֙ U=8[skkZ7ɭ|@ 8t NAPt!pr .x0"ֺ%_jt9Y٬yE+]+ۆW&V ?(vҔ6Ŕ] dcy I,Iq;i(Fn9~:[~U/<`ɾDs!61=d{ǂ?L3:Ego. T1 G=6ri7p'\&|^a΅DLj }n-$ڳU|eK s$sDH2gvWtm(<%;~%#jv'O yX˓ S C]ms-MCʓ/U?zy⫭,ـ 8{ M/3Մ<7*ޞXیWk>/5@HAPj`}\:c.yEش3ܾP<fܞ+qꉄ] xxb++VqVq|1,'*]<_v y t,n$}Y M.^\22cljk<ax#eNJ^`MIg#}zQ%K.,dT_&ț#j$a/^ s_1MJBRZg?y”()oݺ˳t=EK^_*kwJ5yQ><< JOe?H0[ޫ9$.^`Q4s%iu^B7,F4(ŭjeŻ0O|ntZGm?3z}s戽qnmf3reK3S5J|@o 8H1:9gz}]+B!dC~v30^Ur5tmi(XyhgGyށ4O)v{xn[vY+:>HX]Kr߭c \Y,BF- 7phvP+#&)&<ĵаWv0)6 -,p=엵G9vX :͖Q=eO{v)6ΎozY^ 1=.T5ܳ3[wJdVcҁ5B5ĘXϓ]!UtqOf)s=/:e12V4s7Eܹx njk.qX*_fJ= > M>j>l [ͻ-Y^x i<4S=6/@AJu3*I궟h68X~k[{&zP:}W[,pσ` Hc]+ӍLl3'Z T=o~odםþuJɪ$22WT) %Л όaw%[V@ `;]peG\ 93JmL$H]$Nەy1wлC$kF 8FjӾ'<<]]?n*y#S/8eq&TJ/6sgnw99g#of95r L>Xt0ڹ\T1MUR nizNի^/.T`ߺǿY1ďp,pz%pb.%;%P^ W_HѨxlE8O)0}a]SJ]t6g.Z=$;^1y[k/) hI"ǣz%\AMU+nV"V*ˍgK='.;/[| jNF~ ;;,\ )pgطZ|rb~꣧iP ϠDgf(,w{5xRɗZm}~fQ)H ?'XM'o:>V]⭄s xH>.]65s2|eeu+t] ;%z"1()v \E\Uj;UXܣEzh: 'V C1:Xt$ywҭ28X+}~&ӭ:5Ԇq'ܗe` _< ET_ 9”E#))y !iRo%3Er$-3d}_+HQ-J0 輔6&U,`SHtdP 8;/t 4)2l> ź$"wB9""Y9µD^y)y+J\\3g5]6!q9hQ|Q :fjWg._£s3d ] ۶؞Hew j"iy^ٹJ:a&SwMU]Fda23(qr^ X&>;۸C箂yʅ&^U\tyП5hz~V'7X3NЏAuT3ͻmZv;wpwW]ɬv^ڣ۹GR9Os@lGC~zjׅ~ƫͬVU-qa{'E_{b|)[}ȉOOd?d0}ޥݹB!K-IiBQBOb"n(Q};>1 %kDF+{!$Y"PfwqLus;'>^UǀU^,%P:A_ɢQ%<фeaxtm(iڨhs Ψ=R?KB48])F(Y-g>;u{i wdfͤ6Q"\=yG/8S˜My܏n7@wn7.YPZml:iulصٿ|"o<G9ϝJ\_|59fC;Ʋ ,uO <N5N\_o鎏iTڋ~܇@Da]A/]'YݶCAłzֽPF Hb㋫Xg!_Dg;n6*7JX{)òV@B"6^j%bs1|H-d>N% B3҂͏7E)I )G j{/Jz[»a'wNJ{!Oe*ڡCuc9+zm7,:wwp_|޾6ŠixlӸēģ8(nYyp L , ` ;XV1\[J} ӁlOgP9XUe%"BBEBEEBE3 D DxrK/>?a5SflW2Z=Nxxװ*PeސPȄ+4W^^ Nh|<a'pR"UxQv]}8C%i;~&r5 J @ 0< O<*0=TbuvTK[; bo:#R?"b_J1[swĠ[SnSsG =ҋIۑO_n{o;xJ2_b2V> ̠W/@3=m@#|~P<`--- 5\zP$R)st|5W|+4O*=n-HܯL&j)Ld/)vz6޿96Ҧ{Ծ6r Qf9Z@ꤎ QVJ%^_.o%[5IβoM|I\=Z£܋vQ/H^eΈWF[ /Ų/9ϩR Mda(zK_l% m4AZ{Z1g:v \ mM5eum{ @&Kaϥ{oy"wh@1C)U km&g)dru Vh,X8QvJ޷+|_ԁD[B| ֗r}uI+8C:9[hX 'W}~N[AJ'Zcmc/vOWU fq̢Mi"on:BͿh 9 @0{ _4{R"Vy2v>|_n13 Q,o6 Zm坩 v7f~j ZB=}W!ٴ_"@̷ )"%_xO`|ۆ?Ij|B#]^9*;Q`ojlsnqIhs*MmyBJ?N[\W\SC<*>F)53:̇NJ6Os+L}wy`K-}i_V!+Dzu N%j|F <x%l|/>UU<=tsO`O_dX k\} \9 }+ sntnr5%(veʖHƗz ڴpa}`7K(n^)V5өEiVnLz*~β&Rl$;cWϐ;`'`h9*ecPb- M֗׿Cb%UFC"gg_"x[~!{$2oj\"YJk|A=K7ngw1\ӝ SηO|lk#,DNOcu|ce` 71N38>.y+PPP;XMTcۍ?'<5g|5/K«_Wo=WGw4O=DZFgwl/^ev^/zGQ?7 :Y뫘s['XƇ>+d1,D79`C_`2oVOs2ow) ҋa[8D M!}ouAॖScR;eQ+@N6vTLy<(Ea5GgxnHf`nS?!SO SgYS; !TJ> uêoGRCY$N˟\Ys@GC_~@\\@v3C%q"w*[Yyv ΟMfynA QފѮ*1j^ڞQդӨIHg57НGceN~ܑoM?-ڿ[V*Zxrw0}ELfS޼Ⱥ~ ~&I2eqQҲ%\=dk(g{x &i ìvtNĎ+m,q\v7y5? THϫvԋh6sslH2Q?o^% ) 0BN AyM~/?D*x}Mps.)! ZFv6&Qh ~cextp!s)%mw~ƺ>2Ea<{ N;2.Ex/_k+k%6eR?fH.0}{gyy!MϽI@FoABCTۃW5ӌ=((((( K CiSLiGƅbEYs:طm_=?C?\nv TK$[xj0̗'yNs$TBJ% EkV(tiVauVJ^G@ zTa @Hzg woͲ+/;ǶI DCΌ,nNsy'Z?`NO P ~>ɟ< }lo%Nj%ibR}Yjg)7 2!P3:t:A DBAVC@!iƒk'!k9>s>p۔_"_[|v]_#KLD r%T -%)Z <2:6{˴l\b ZDVQUxST "uڢQVƦRE S|t(^*D֫IL4,w {e,)&tXzRUEHN}}}}]Fuvn8[Br 0AH:LghLĊV}V=zm}wqMR_ _R? c~Q7\[MUc FXFdyu-=K@\%3ֆ~tY;fہR[ӓ˸;igy͉;?];]K_~9$ߝ[EgaQ&`:Wv1 03=?kSL/-!~!@3HcuI!^ nI#UC=m3j?u$I*n+?h: kX" rE ιv#422z,8  iؿ`4gC tVc mޛ/xX_7~ܑ$XtǞDlՅTQm;dmDGG܅FK0Gjo0> p"]aIo12ttװ13|uRm8-s,$Ay?>AP9E}{q|UBر3ѡvU}bH4ppW?" #r]uWG]fA{cluˌKϘ=@ gt#ڷ9vكjM~ˏA#*[myM#g.uty4pxzrwz5?<Ϙqrj?O?E@shz*Ʋvy}KDr>*QX>rmc|>!}~f{~'IlLv?;2 +deա<]e`ͦ,}cSଞo;(=o* 馤w[KEXWkdRXCۺ];~ٸCÎt I ڟ"cT<%U.xn\.I ǃWϡѓQ~ft$|KYJvw,ppXdL\B˒Wm G&HIZ˶&oa̡Hh"shs79 ]"_+L:F wCqs's[ڡm`}tutbkYJ* CP@^LS،J񱨋ayȫy+/hLQzq걩rsk;*+A\u,d-5b qxA,zms}|MbDei9Is)r *Hx\ k|~ 0Q+JicM=xerlbsfxur{Va`Gn@9@n0U@sJ}àآ>#j]0,D KFaaGơ&֓~uI aC,qiܹ_+[{U UwS5M%o!^azQ|х(}'H=IݧH'HGA_Rլj)8[[{oFHg0T"C4%^/*:BʹJ~SvB99)yPvpY$\|*4m\$ųܿ/t)6FW3%";~ :펲fFbj?A3laC$ABοE0HcR+#V=N=N3&Y8 P%6Gf)oIeck.Ís~}DbIatQyF?&ɳvthH<5rvCQ>ėnk.daǭL"ͳg0CX:N$\Z.o}REJW7YB뵌~w[dU c\-ta_sc\}̛D< P[M#iXySqHXQ+_hVi_gbMVPȕ)ίވ0! uc)4SSe/^|5W^y<K# HwïlƢ:&TG7J_լ=c QHhC }!V.'әPLZ毃 /]C@пUm靳!]$\"y{`f1؞_D3~OTJ95Cw9qws3e Pk$@@ߏc*]ԗfLf&"i8B>:(A`3S7HljN1Rwۄ$KdkwS oװfvQFAS-%5u zSo7QQ6PVQ>w(G:sǷXD*?̏ec[#q5@D%th.me'jX:}OG<!^]f9=ϳ {2 3v nDS!ڬF^ޓU6(%Xʍ&q6‚gmWGѹVkpXpF6V׶f1MrEN0pb~- S9v8/oh}\4iK>*y\9X%߯d'X[Q km11hP2GY@^DZB\ṍ`H/wpU3u}(!LY:ADeR_o)WW|W^?U!WV?7z!kBV;z*`8bw,w.w-}MQ ;3߰V+%9%/Xd~?9\;Jy Se ݆܅ (tm3{U^b( Jzn"OBj^wnV`?0͗xC>" `p~$E/`K<$; B|.}LWeJӔ1&e˧Ε홭S>x4gҞIW0q oU{|"YmVHvyt2-a# ( =6SNc>!;P 'dK̘wkGx[^'R08~EF,5RVIyDz8FrBK>jz;ľl|r؍f7J*d6[IYԨb[ЭdZl,@҈wOSߡ>v}ja1ۚ 'J4 "'^WIII;I(}EvJɦ 9rvr^rr r9 Y2$ 9[)&1n` ¯///.6/v.p&ww,}*gM v-Tl(e%hV,jgkSG9 8yl ey[ys`8jyEZ}Sy{?)E8{Z{T>Xl4= V/{{c쫰F>cAs)bo4hB #BO2T| MSe<9%dH,SJފ3z>su[2244NhKHRJTNZҌы.5w1WE#[bQk0Զ0uwhYx;*sH$IR"wmsk8]$\Z Yb7=( &^ljGA% nVyf<' T/5 J4!Wc}Ŗ[Q/zW|4P'3uXvIoc /3S'Sj@[}36>E3I1Ez~Un>4BY#2$UO7zs ]x 4mV2I4Rc:Q9S&@$9}poz-0\n♪H$rȲ'gezgL׾]!t \^,c7=pv|<6$A 놯9yJsp(1Qv)ݏ`+#c\r*Z<;KE1z٘tr!(x}7{{9p uCGZvh~xa%WW|W^_<ąZʕ3ܓԛ{/Z 5S~M@3sVj9#}lwg<{m|k-B-B-B-BV-*>) s#]\_n:)"-kK&L6153v{!G4D` SM?ʕبmk)k/k+]񵿎w{smyy<qi\dz=o9 vA͔ BaJ'! *!@_SL ]{* drvYo@`ʟi2 Xqt3M4bB9QF-?Qov!P 4AK)t 3a3mQO,.8MFF ]ž ߲Vf|_ֹVT\O+Ӽ&4}AyNy;THl »\C<m~[7? JphP !\ykw}z5ex\s+s"duPy-̖d9$PԌ|Qխ2z[ĝ&-w"u!vgbdSqrPpkшSЊFɉ3U鍸Z֗ c\g ' /6`;ucOݠ~#r?6)0 $9U̳mv븀kk]5f3ҡn2Bfrc: ! b%r B\t3Gv/P/P/ Ȃxŭny-S--7,6>Pt0g[soVa^B>A?AQ?A?t`8{h׈[0ȋPH4 p'9{0Hr!i7:w1 ϩYu >C$bg]jub=/m ZXqH1 SiǽxVfwrS_|AuS=Aia~!Az 9&Wubx.Y_#"ZQ w΂y&`d[0sld`T"lix!^I3>y{N6Ⱥ#vZ&z\G:q z ڡZb9>k"YF7>[9&yWm_] ~n~,)~309YO2ތE}7Z^7 0CuiBGhԁ # I^60(N/)~x;Id5p djM\ ŲөWFkog&=ӥqI a_-0=S,(e]v?0w+P0,s ?C~JzAnfXN 8,^v/Zz/Vr/V &VuNuU8ios;4瓼/m|7 x]#I~EňǪĩiiCb!f_?/=w\iDo92="S{ϋ x'P(Ѳ pSq$rAMFdumc !5ФKs[|9;2ɫy+/h_s%z]-2n~DIxU0 p! _{{tyhXa11gđYo,ڒN¸Ile=X l-֐N4mg+0"~di&esOoXn'W%Y=O?aX*[ps'D]7*vqNnP?7&K[ekQ`?F|\ica ӉANS~}Di2ɸϩQXD'TLυbz[aشG_A##8G&ŌsM@PR~FzbNԲaе|S.K-˯*<&: :rvXMi^^zYa 6B) pP@v\D)< ÜER 3YjGIOZ )j*9Y~N7.7_9[kg֩' 酯]Z9^ꁢrMy-|vtOF3Cb`mTLqiv͚E}ʒ1^&Ġ=L"FL{J/<6LP)0=rW^/> XlOaG DyK0ǔ9=H1p >AFUCӏ㿈x k9r\*mʥZ&H9v]7xs!d;D8EI@A0<#0Ԩ>jm7m;!aW_MYܨsbC.S0zAַŐKcS/JDt|>) 3懞hn!GmhKҮ[0 -} cJQymSI&OwǤvLQ$iNrCpd@QgN*6fnz-$<$F +w1O5^5^'b'<48P@P(8TaM0q {WjCr|w tdMxch[=ntC ^Dr8f/y߄]~*f6CiΠM;6:ՏRO.wv@`ڪo /N>xaX2zaõg3Hv\,P0u]nd+R%2ieɖ|h:_^cek܄Oy(=۹-fKr-X|jvjf0us(Sq[QvA?3G!,#T jq2B'Hv)BqlQ$agk?NIj^鶪 ,Qmh9`v`,w- *62$w@debcERN~bJvX [:{uDhd(j܇nǨ'+dKrUuP7Lo|Y )]fh$ĘL rq^?i.OW0t.uUJTjyy*(OerN{Q.D^k!mA]j}382 [X:G(Ww[hcXj͸oLzN 7*tq[y?˿%k&7ؖKMRR Zϑ(ZƖbaco#e " @6"z3Hxi$zܻ,Z4U?{p4f\icX75˟F.;h@Dn vQ.0PNvMU 4)#D;5`}M=[k/!y%pw|Nfrh㜻^].pӧѷ[0 / |u-1AfƖkrCludk8;h3(˧6~qqm_۾&&& 6׉gVIg d|'FH')][^t%Yz#n<@_W60J#Q?He,@ ?m }$/T߸dnQ..3npv|7p4ҭ.g/47*Mƻ&=zYOJf0 .)k)n?M@ĕq'5^5^)4O(0u8ꍤ-t3/?WGSx/Bym|dwӎD~MA}\R؇*GX2o]̴x-,h X4xDOհ&[@vI|'Gv0UG'57(7ԱAr%WCLj܌0%:^`+A :FtI8iX1hA(nO"VYV)r[>ƕ$k'?kB\js.V_`ۗhǘWh'(fHܷD2u9~fR E cLΘuü;;S󻀿vN]L\W sXZkpnbp-9^0yT /PdO0؏ȸWN zإݪ6Rݬ"|>16{k!l\'DqGm59.Xǰ`k?\n g%Fx'g'GOe//Bϼl} 5kٿR)hsX+OSb;U~ˬ_mG<䷳!+d 434443 ~AqmBQ@5@cBwAP/S7Ǹ[D/o7Q#XJeF߁WaovOoQW{$/=2k:cQ3ϱ߭5c ~BlDj$kna=o2C=k ".1jM%JEM%#\,~ S7IT_R-7)ټx< M_Rל ]8_\o"yAri;dJq[)C}=]Ǜ1-#3K[x}0! o 7[##8{ac2^*WWZ^Xb B9𷧰zѭ2,ʭm DPi)AS?TD{?5wuy]t<8g)DLx=VYåN$d,VM a',N-pdKJ* ak`gC7/.-_fY߱L8i_9Tnl4y-k c5Xp=cO"nM7xE1Ekr ?awS]{܉9I Pv~cL*ޞ0C?%wA+)|,>Y41<)>|-Ti_oܳtx|}IhQL s6lllnEn)]4Bߏс:!"90Cc c !tʌx<ͩl[j~5q KY!/ieA)!O?6*\XGJx p1 ļcg c eevw*1]PX6/q#1}FpOvcz ~y/&kQ=Yx+nY;r{6ސ@ G4o'v]" ,NWw33V\䟋+}݁zþd=@]R0\R:s@ApgpcWMф-~-bxsz_bi{h"?zsn MƤ=+B EA]ĂvKXmZ[ qu,9b+6:P%awܧaHn3$!IiR^J溅zFuVv NjpC%y=Y)urEy;\[<Rr:A=Vq=Ntr%o6.^YZ`g̩{y Jwx{ vC\|9C-G-/{_Ltu=; ZIߤսeeT/1B48keQ!y>}4Bd *AV}ծE7L<=.K]<˓,+BfܐF2*FbJz<Á[_TzOBy2RD#Ef"Dv#8dVhƻ=bs~1@B]ַڿ2"UTdzX+*js\[}{,' V\D [)T/&yg⬘սW4dS6u<(~hK'PGit 3nl\p-Nx;a<FV !u*EɒD$E_ g{lqW"K=OA.Q v|81Ng;Y\?8͂BOJ,ג9gӚ~B81e#ӭ``g_v? U<P~ HIǞQ\)#jqM밪tđe#_̥v'6hP[vdEt6~n.|~ւ~"~~~lNEwlFB83$bc08Iy"܆>W+kH[9(x(d|J`Nx$ 3)n&i1\M76TOOOO8NY\OmJ~Mx+]w񋜞kmzN kNΐ* 𾭐(Gz%">QvZ_l-j9*?ʿ!}^p AZ]O J2'fB/yLh7hdH+YFJWyKMS>Qonx> <8Af] (zGWWhTk~V%#@n[ t,;`,Y3@6)9l6>.]uSm8U4Q&`U*aj(p!0?>y)D\@N%Q%EŃ] CKj[^pOcqq|1i!O"Ʈ$nW3,QzG־r۬k/Rz mmbXb:].qW_zUhXӉ̒>-'f2@ibanUf Z=2q㟲38bÔz+EC x#!1"(/>&8˵ "){tMy Lӱ9+$):e})kH 9"sjn:=ae-ةc=UC ?L 6Jf{*%y˕K^X TQP2*276C_F@BU!f%ENA*srKnH [EtKF :hM+x"SACs9b*9FRl"Y˲جԨJNY)= w9cTP2o~G sԘ3Gm Yr܋T\/6yM.&V(AV,%hzgCwo[-.WsVWg O1iG!W1.cwYPWf,-|0JXOjQZQ)U,ju3H.z_ynj4 }돐C|uAǪ$Ǯs.Z+r6cGO=|QlxpA .4E{:dEveE ~̫u%=4⃆'K0Zvޓ fRD=x&di9QAWCVӥG/JЈ)7`/Fl\mZ>9{~R:94J 9n?|Yu:k׽'u2y͂UslՍ{ }ȥұ =FWk གྷ G?/~nqlnzb e\XvO; Ǭ:hUA]|,GpqEw?)_ pDW\}ЅAY3eQ-RVm.?z4Θix ]yP P5Prk#aם! ؑfi#Mrp\Պ͟b,/Xfdg H52 e.%~4qg]rEuwFK؄X.kyc"_?@:z2YudE8dɏyR> ,-km hm"jm&mmg+I2"=ݝFU],gf"^Y/Mw|ڗ`\#!2yo*(LҴUcn\]3?djN˘t\"Z%~WlphM4IX၅מb6O.oD(P!gU]q&|_rL\ DA?.cms]gI?w*GnӪfML u-5ϻ{'69He 4aۭ-wR7,f)x]8q9(^P߇,ձ÷a,A'!TV~80pElg{f uq^!Rkx@|p]Jv#  @~F߿FDM_5uvoQr5]U!@:SI]6o)ƽcY8o*'.+nHH  ϳth ZUvl׶4˲-nhX"J Nw0s3L}rCmf()#]I"GN \AD{i 'VM$Vyﬢج-,2+;HM)t0U\QE_VFSYIYSCV@\ӛ4md+I ¸@ ّ˹[J W:VLO=z>ybS{WEοDC'n^"T?K,le `'υ)yOڮy(D=V4[,yB qtM]8yl ?&$Khj/>?ɦ/!arUvF;fG0]{3Bp\+*N-Y*ю3Gʑ+7$dé!ׅy5)њΎZQBG%'v ~ %A-B9N[,!hz=ph +raЄ"@8&HP2 /|ܼ*o%C©R_=ڛ4S͋8)?eG{xI9ZXkѥ%4$joe/.Q֍-\R4TU,6߱%a;WWp3W&}nhʤizYvUMUU1Jm>C6sA[2nffn_BrәSi?%61r0>GIBJV܁•-98}B6mn9wC6,>ػ^UG~l~/R?mvõ{ "{1?;ڙv%'{ߛ8SW?? {T7tQLЭ濇佇Qo͕WtW/ToŌ,l^Щ9%6tF 4 $~Fր_D5(h3#-2l ,.MwpF%:xzi\rYxPZ$1jm*iRNZ }SKɐcg(ZMr1ba(Y{=\gx$ ɂ>A̶P !RaxM+e'\Zɓϟӄ}(R<-?faԓEi}Mb︱9|aHۍ$y 8_ `3o |E  N ,_U?ыч>6:~7eqEf;ʳl_1F4xX,OZvj|IͩtГ nL7OLy0ys|02՘?8~ƪəE1T :U;[ztrwFw:vjyV1㓌b^ SY6g\t0ep=C+q+vrk:k)3kAuSB4ޙzⰍh|feB=Rsl^ƅ9L=Ytvq϶{pg{{_41u*:jrI50y^~<ͫS7%{3>'SMg zs0]1q M\b.=ICH!A/Dg똢xsD'e>);ֆ1/va^Yrg^ NQ\6V(A+_&Dz IA`*=RDSDVN0sr&}uxN"X)].]Kڶ߾B1s(ˆC9*%?N?C.e.ehmӆv2W>{'gPƺ8{{z< tt[ױ<{< qV╘QXkN?#no*L?_Hd.$/mM$L)bo8ys}rnA~mxigSj>qR\ C_|(N{Us_q~ہ3Kƞԍ^g)ݓsr>+Wq9IP?v7̿wqs5y3 ZN;g{[Ͽ? T?LSOP/RmQVPT`9 XJ Gl.M|v'k9Gtp_`]xa٪߮t"W؛wN`?lY&]2540)]D9\~+ΟGSݞ>}<pހ>>H[.Ķp7YL[ց5pJ؛}Q]HGct%e#0SM4O( +ྮV~aV#^Pic+³vqZv{򽾜>-Mp%ջLhIeY3[L+~U?4`|ѩG#*H¸ՔHimo"Up\r' 9 0" d@+e8c[hv+z+ϴ[0ɋ<̿]pA!b|l60P^m?PPہX2J:8.X#Ϩ͡,*s|8G! Dtt_Ɖ%-gj~:"5caF<0+D5n_SR9ԄIM>ijG@_E@ ۾/3i[^Ni{]{5.S.u.Yv{l>ry1mWJ.P֢(; As")YzWBÊwv<<7o/#Qġ{皶΍nA`!pf捐;W061P}o/6fe[*/z5M[[3,ord+QnlUCҬ5 O:x1YلW!̤Y2s :ɬ^T:o것 D)ϭmr|aR0?)GSTM5oY=G*4=8k,+xFe3Sޚ fj.^^=Ke< T"k=X\$l>ҩ(V _[l/C00`>)3K^#Th2hȟ =TSsJ&]m^I3]HY^~N)&c3~cbĈ恣ʌ|TQx|hPG{>os'Wj "'TV 4mt4<;4<4Y|1K'SĐSz%z-r`3## i_W?Q8HA#_P$W6NݭXjЕ˨KHj7mH˸ܵl545Lm,S)Ӫsɣi^'Qlk+3D_Jڀ֎}׵*9Mb)Hf@ qqͭQr7 i37a%9Bqr)ڑ~^^R^6^~4E]%O۟BɎj`91" s]7J"wwzj7HR#5VҝA OFPƠ$<*V\3g&d#}eq֍J$q@bp@0mqÒ/ֳ?ŀ\]j-ȱfeA}˒T0rF@F馃WqF떜8TS !k-;*?*@P1""c0R`d5%n$˨`/OdNOYNSMWQUQ)ZTncPW.A7x*Fֹ}#@L@A $틶_=d*8| aIL b9n#X+\॓f+V61#v?w5u@I0 ̱>]pܒX}Nkf\`qϻW3 ]l8k潤e>9{һcwSwܕnX{]%s4[ײmna^jo'^u?mROWkYܓ#1>U.}!JodE܁  ?L:툣J޶I?lb{fQu)GJV:Z bх;`:*K *YnL O7^&Ux+h;sgxvE@X@f/v߶n{H2^1R̞[(c`&{e[kVt} g|Vq5vUɷɨRLmVMSGHBJL4DH\9*砽i#XNStWx -ob]A RH(  W\|^r Ǭ0r ?8&*ңÇܣ 6Eڭ|>)Dbo$.8 99)v?6'ظMjN:M&51CP#o㍐ Gl.L 2_3ဥ af&raqoÑX}͑?#BEsz6$*'鎉Ƃh@g4Bǜ2h+j,"X_[i\?acc#nnn~ 11Sw3˵wZ}}mw{OwE_]o w? T%qXuM0]?uBsH|-V43 %@ڀ@T`@!{c_;p[u@.6/U(V (Z8p> bғqfTQ(nx \ظ7@+'m?w$S5GjvWoOO=HPdCdsP: Gb%zi==sDCiôfB\ Z؄HG yן {ds TLêd"Ed|"%{̛$S=jvQʎap\rI_m#)[޽Dy1=Ѓ 1{v/04d,~X^]c,1g aT8=v:.N`l3D (zB/ ԼT oU ҹ7rkiVEh Q ].}K&h.B>LsdZҝqdT e&6EF1!}{vr. >oeZ>@6g >-NVڇvG0CwrB4آ~9{g+[C81;b 3ej[kSf8=]رFqf< t]S`e@m۠gC/Q,\z1|^U(UEMoϷ)N{njLca5͓mZA5op,__a&Рw.&HPgnc7W/ m^Y=35tFL~PZv. U;# t$ 3:9c@@ByTo`\/hצ#F!p{ :ꥡs/ebgBF6?C̲e;Py՝9,η]<۱tEgQi_:D;i%[ގ\]:NĴ˾Dw݊ERy+욱9G/a0ձfo&QU?R 8 #QѲ7ʖZKG݂WG8TT:`8p4Z uJ*ܥ#k1.ۧٓUu))Iܱ5Ssq-$STj`-av}IWrqC(Y!&kV"Q8)H2/)ϕo86~_|psswuuNMM.>333 322jhvr\^>m3dvk|ƿzyw8{IT>5-7i3gwu {՟}[˿? U0q*C@]Q%YءRʦ_bUL܍6 3 */5!gy @af@d0 ߾lx TGeDA4"0;p.s$pw87pIKFUʓ._4 S-s"w/m`,Q2,0zk^d?\vo]HKɀe7GWXc'- ~16MAc#àme)'xS%|&TGݙqFn^XCGJD<c/PvUM*(ann ř<{u}mUA9g3Wf.(MRN#_@:qw3LBN~J֌d_o%0w($v$Nd^ddA݄OqI.&}3˒[R~2ޠ\ާiÛXVpg-|Yuvj?+Q%kkq+Ƈ/[Wo(/&Y2g!6OKN/7N{ Mubw_m'M\淃h {KP TÎDMMD{é*eL0Vxx)CŌ ۗ)pf5$qj9q7uxiC.jx-{۶r3KTc6ed%$E$E$G -2$} TܸRZ),$nyUȗS㣋7aW|TZ]/11b>uDڏb&-jCWAHR 1OzH;ZX;:#5;M̥YGr'ۮ3.I7K5s)P,5fKOO[:6]lg_ˇ`D.w?\ğGX}`-U{"U HGYj|Nwx%W&Ruٿ=ϥocx,-߿͎KǓɉ TTc{CCb]]{w|XZ~~?#c+|gԯ]-btS_qNO "&,mLO_a?N+vc_eW?XK\v&3?ήsDFEB]njp5#` .=op/<hM@ @@t8 p.~!4bTFP8^:[:&g:r4=g'Dꇗ,6ny>l'Ρ bSӑ4( V5W_Haȥ#'Igmu4uV5l2Rr2 Pwдj'^Ȑ\.j:~ݼ܂?b>|[3Û7 Mnhox}%Ôa5\i2C#>c1B,k}{Oe8N$-S@pPXف_Zqs7H_w>kċZB_\~5oRz>j!bٯ=3T #og],\5Nս|x gf'ǢWׇb&&&2&ʓO_2VG {(8 h(q+&()%QuspRqu3z/WBF( %,o5jNu[4?')‘>Ǚ:ɓ4̟ɥQK}R+.ئ]_Ji˨+WVx6Tj~)A&MIH7N8ɉ?ɍ;CkB3`!) W[Sx4 AcyM{L2bH19Ƶ n>k'$eSZeof.G:7$F}\":c!\:SLVm見=7e%U+ep=jo dhL{z̡@07ONoB[;K:9 (ٯõ\T{*$R\J,e}yiJVL'n!yl M :ٌMiS59,K_4ܮк}+sax%l fn &|rJ\[nu*,'/\3eCޓ7Ԧ/͞{|C; z.rƩ/޳cEƟoʓQP][g!ikA)A]+UpM@^0v,vo.p78\-j5pAp=BU?uzs}b8u*{+ҕ@ n6Tkɫ? em;&97G]S]y2LD_H\:&[eTZz|q#W_{Ϫ O%`O^ں0p}n+-P(fg'j{Dm[ ~ȃ[KW.B'q3Jf<꿼66Ak8!!"0vq{i4:{)&@y+ T{60Eѕ9$@PP,eA!KϾzRqm#jN"~up=ADR@|ÄQk%-!k;x#25SH@ #PIe'_5p4KK|e>oʧCνF#^BřDxHX%Lruwհ$7/pit'L]ՕA7]Buxgfs?Ww}Opw0#K8["[ >,Rf_L{ (o D,DDA@iA;;al9~Z:gy{_ۿ5,.`f< r$,x: މFO(D;~]m0%:SAQE=)ೣa0@h!侼mmu[T*~﫭]J06`;ԕpΏlWAdg S))aҋJ!ߠIVpsh=(HIGŌkk5P9#;fpAQh[> A6o2$S) =.#Q!ad(6o/!ڀ]n \ ~1)( vwLJѳDS'cC&8mѳδ Sz98^cر+"NRȳ s3J6;Gꦱ- Mc,n& Fu8B=F:AJ;} ʳcT#TC4C4C4CT= HHH)jrHjGH; U2&ޱU]YA曞EI̎5ɕPܭ91P"E9sm};󢱡aի_>#߲A |Z[/n= wBn{4#9~V?W ?yO>~ ȯ}8W=7{{Pfg0 K;O1@W@]HLo[3JGs6?"5P _?[/&mӶ_Tͻ*AAM$_SRVZ+ks79tRuS'A!|H8]+h^&_Hm>\3pkYAՠS7lG)RzhE:|S{JXQWA/}n-hf[[{A*b]xZL0Y'[Hf6ֱY0dXfp~@I5olnKޙ|*k6[({ .'¯x.3x*+Z$l. =q?R?CY3tyjpldEeCMSհqIoCa]ueޕ5E"!]iI 8[1W+15<_.l`iN/{/̬ _>=Q;tO|UVR_]*%Ք8ꥲ !vI,C(Ai7hiȬOMjMSgPS l=oɿq;C;A?B1;DGltY PO>@a0A?$0#W~*ɢn] _`g"SY^F<˗hhh TW]NO,3}oss_ ӿ CGO鿔7?VR9 ˟E?_0_0i)  (NP/un?8N}n.ݣ@^"_~n#R$ԣк\2"0_c; k s ZhVwIJu,2ƻ $._ "aA^6R*qOy-&Ue9d;8!^6Q12WѤmAʓGnZN>2pHxi ʚY;oddn>!qu;OM\yͫoaFgiIu"pKqH^tq(L_V{a٦Z)8!Au*kyջœL,Vvg'BHdAe>h"ooKS;97G8jJA. Ba|'=Kc v ;,b:)lj5 x; v2q&`N&!Ŕ5=5>]ʑ܉[YmXO:zjgy&G8Eg3_t)ZX+{:Yٚ$zkj;x[:8tznkm+-G6:pƖ2+ǿǿZlǿ/.])&&_XXddWLnbbm;įoO_wPnO923~G70iAWwPl6WǞ͔*h%E-ES B@2p"ft}DT"5@%DmTkOCae2}䚴ӫl;~k+rN:n\g Muw\/#ROTd/MY4XuЈy_ո;2;LR=6`8,2ĖS,ƝGo;-L&_tj(rEv%rZ GN8A+㶭O܁#&$JXűPCyw=F"]@=ceq⥐UܸM]q֮jh=ke$K+DvKaym0ʄK\7ǻkW<݁52yK%ݺ;Ķ8Ob5*_=:5pm"GBC1SJÚuVo=h'Ư-0Z%ױ9.cK Fz.raID4"R,T8@[wM{Cj3o-JRx]#vu;!k0VCo247Á3H?⏑z;o ,.n`czSr6O8H żrݽ]^8tueb~L8Y bwS-zM*yY$gt=kaH|9jՕ1 zͤ/^1Ss=M iVZuRէ5gOO}LvfHqpU7ֈ昢',ۭo(;M; W?6>C+ 1/TR䉣ŖK \' ~pqI#l>|Յ*cPiꚍg<#^oap#(, נ p9O8qp (>ũ~ޠ 挽tz+kkIb wO1,2C;FJ8duc1 66e|~}]}/NoQ_c?"S|;;g {Uo)W!?@sOc [(?O5v'Ob~wiUK:F>\ȕ |IrrJ}؁rg2U1:=R@| i6-b9|*/`|pS;S -s97Ca,Z,X;it[y3r WƵ{b3:K9z`ҎfJ+A| 9Oo[ "RphF|0(}LԅiA~ MQ/4m^.͍̍BƯO_ɝ븊" zq"F@6}3v7hZ!c#εJSĵep e&fQu^wmƌSTZX9^g$~\6Yw3 ZPZI\ _3s;4WL#K8kߤ"ȶz< [bk ;ϨRM ʙ[;ufl`" Z蓧n멮BWoAPp1y>G;QLu0g7nCv^ p@opA[cHU -Tn)gnсy -sNU=jol'"ZC{}rli@(24rP2;zGmYhQƗEWG=̿qn#vB…%5m}C#Pj~YUQ ;1 ϔSvRz%AàOs!2<..!F`0J:ϑ2:::}:_\\~rYwWߕ~N >=Ϙ_pFG6pџo00eIOKggim栙+%4ƽߗ0]H]S>k]n:6Ъi)UN&sj&P'8g9u)R1q!~rٚ+H';Y+d…`/*c)l]3OB7[%idbhtVQpWv7w6uSdﺙ:JdpAdt)jFqKx:jRQT8}B||rr1zMY{>wzj\EzrAdtSRAPJwkقi[<}kXk輚)]CI%6G(}߆˛ =c= |^2v&>2G[^hZ';hD%r[4Sht]b ,s nyr١Pk1# ]iY%1+ftM$8Hh¢Q]X[x>F.F^CP>%:;^#/cK +E;DIms,27wVFg[%ZۧX;[ۥƸHF $ $J~K~s,F[#̽psGe# Ai.f6&:.ʶ.^JɞjMZz'.Ο;s+Z$9;'ii6OWL's7U31706?rj|ݱбأ=5J{N!ɻ8jv. -/g1b6FՑzN~6r;qa+G킫^bOl`6d^ĦGn6YȸGX;i$g'sVѶt0w d}4tS zР"pb_b\XN|ㆿHU GyߓxTQR 3&1q8De"@mWss룰,-:'efSzZe0O-f///m=P4W~LHu; g A{$80Ec;/T>ԅ=:!Wְc1QggOVZn6(`."E/ǯ;:@]-(uhpmLY#X (!D[vtE/tݝ #daV=tJwPs.Į] Ǐ^JEI?Z0&5;psjsKG Q 0uCujw/_TrVcI\xT릞ձ|,PS[ U=~~~j 5g-a=hw!U*:rQ&7*q8WtAW\\WmMwf=N0.>%yDo xq/0c3MVd,JPCx!4뚾P4CC"8Ny% tR& +bKkL/U5 fZ)1oDPz,e8ǐP( r˻LO>5qXq#ECFI T|0G94 6j7`5J ik}/o6Z%UKQWl:aYf(#r`-% RO]QCo]z*RvhI2fHCMMFPenfW'igBQ'RpM+ oPH X@@_k_ѣޚ' 2TҪ~^2UHy [/qTQY_:H{Rwsbdj,DɊCۼ.,Fwہ)@ h~vE|K^/ s)tm1+I&INE|W8xԊL|56.5WYzT^.0i@d`;Єf.XOeLO]ؼzLĝ]j8|-EE;ɇDZJ"蘦mT"V{?SFpoIshƇ6?<7 ؝3؟s/MQd [ٿ??:gG! +;OhxMUqcUOFIܹ7oS:=+}1Y""wjwfbrh!?;$0 4+:-؞S!U{uIYȅK +xkx+xK{ {38e=U(/P5 j&#cyѮ]u ZAʉ0]#"*ܽ۸U} J8C;FciHma-=F= CG &f˖p+70kO@u(UGeE{W*^Ofn9-xb pܷg g.^'o'YNھQ5㧯aE"#bfTnnyߘ`\L yk=i%`bB^=J0}eYBÇ(Q @\$xSyxAn0\rh yttF>7H>J;A2su#\( 4)jf%V p><@. S.͔Բ$ŷ*23|~  :΅xw'4'[Z) 0Iw;g]>3BOON/l:ᝢ`:n^Z&ڜ1H Qפ6~X,vom"Q?P8ӓb=lҜ^ޤEB=XG>^FǪfuD~ B{wUV"05)"E\ }Sɖ1gc6YsH^^0̳k홿2zqsUw"ZyA^q z%(Q(q8 n fΓ8t^ ۱sٳu7rlI7$erLppReވ-}3 Ko` Rz~[|A~~t+Gܷ c5+-GG;t>|ԹFj?e +; DuO WC?WIy1^,PEYKRF_&٣~hWnчpic%-.7I4~~RY\b%Ũ킥ʲ_ T06边=H?3wò = @ 3;I,F=EGgIKo? %  d 1T݌:m"o]q5B}ӪHy[h d~*&"W sۮL`z^߸R0OH\r?TԬrJ! FaZ QFvfʞYYF˖m\ݰȔ<-13-֝vmK7GuTh$;ix25-(G tv:tHμ"8X"?uxo^L};ك[f>)ˍEHcW$JNSHP  x|-l)u|-Pk9C^Q*maa!ʥU@_kM ~E{N3 ~^AUzQro^Nݩx([knel9lkandiSgb_Oyog/Ia0{_),MgZz$ث\#ꊧ+{nhj+)[(R8T$P)5u#ў˔+H'o6fo=ʗM0qvװu4J=^Mիpddf]hkwW_>_Y_B^iJpTuNJ-d|X 3s<_VV/ Չ P5D9zq$)VLU+$8 ==h &p6Jīn; N? TFF{UAb2H.[Gk[w Q-g;]RIol6[  1Qr%2۪{^ѕd 0+'ub9qQv掦"a"` }_}G/U{hpDŽpƴV)ëU]uR1#N9)Rkx"t.qn9):ZơZ>:"%$3oȹ8fe=1-}|z9bbV6ZRɥ*5]A~+Ѣ(GF_zWGX:w̪+8f>r #0n:OHu}|P}C߯+ ;7Ba 9_E!wȯ(-7$]<Yb7` s8۠3P r!J>ZV *iNڊwYNb'1(\م UJ)"Ue}kL4̓ʹ gưUe2ׯ0լ?+e/y%>gBa`U/j | p zfM,L)a'fd/*GD*K.2ֿC-vX*mn&ܷ6N9PH/-oi~_e@KBҹ|>YB)3y8=K?Vhdy{f̳7>kfhtP]9vpa{}zL_P]ZPze*Wi=lN!@">϶X13Ψg~xJ"ju` ~#Зe74aee ~JmWm]Gļf鸙iők%xU~Iߵ/oܥY}FRI\Cƚ:@BXZ&hfݭq5ӷt`6aoB'Ot?[fgC}]HqB{լE#t"`8WhB;`yȮ/F[-r41NAJy/,{WTP,AIgetT-'T8{{%Y$R)uIj^fI4^Cj,uy6&?)=ߧo_soo7q=szzsYz~ zV 6=){~V{0ΓZAoEi,?)FeΖf+&&nuHd'n5{Oc:t5%W~Jp8 <{}az A &;6;1LWv'.6-cyn 8xpb>&9-Th\:6pFur鈶 ,kߡT!ZY)s` {zo}qn߾J5)!!<{^Ȍ4ynIodˆA목SE׶cqvҰww*/6_ح+K܏MYm`R4R<Ћسdl4M/rD ?M?tPY3"!Zv| }~pv }- )) se6:A+ ws ^QZ$CS\UEp 7("#*aTC#1T| f-)1F1&o\2(2 !F;CӥagVj'G1<'su})3{KEMv  jrMQ3-ٛgwɖ'pRMFQ8@x걕[/%tL@ILJ|>559B4O$2xϳT4U%Dcf٢xe2:tmhedil :g_+#xPAAWA%m(`N@ p+_R*s4{`r #cd;C,5oWd"gt-/P:Oc&u: (';nb~uJ 櫊`+~[ҝ"-ю_Nؚϟ33EK;M$ZUњ6ArG6]gGluڼCbEMU x>r-+k6o$vztP8>â&iOwBM0ŭ_n [eȓLB'5 u;IF%2Fee AFނ|hR7rø}On.]ZU8_Ox=ΔZ}[pc9Ou>J u$pL>٭I×]A<Q! Ky demSVf D˺w8ʧE2XP:LE㗮`mNS1sm$(-;: NǮJ$ lkyqMfnWT{G6L1U(}SLJxz۬7C0wywf60vQXǸg7w#6WLTxg & }ԍYmv61Ҋ D˷;̲ܚ\: oC,mbwPwK+bz2^X'GT-Ie'LN"jO QG Jr0荭m=UňuggTω#E̦בErn. B]ٯ'2ӹg ;kw܉dLlH쵏^3p(ji^U<6bAU1oC\zr`Ybkh$HS7K"j(I^*3u'Ȭ>cQoHM,:Zc]D꙯"]b<\|y YѬ<mlQ# [WBfmg,5fM'h2DX6 ?' |98B[EGAiAQ"΀`,Xuqq]wu,Bil:o؎N.ත@;`ԍ]̕4 /mg 0/3]ê%N9sio?G:O\F1JWma@~Oo"DR&r$>Tw5yd򻔾oV740YMۄ#NfVvS5S /U.+Y-+*%@;mI sEѫ櫘@n¸|Kv4,m޷&ҧon~U':9;3NW)@+;z{ItI A:[s:)&n1Mkx+CwtD|Y+,r?m%ҘƤ0cP<Y^4\"QR~cx*S 8n,O_]L5It$C4=̔u#M3 {:ub)/*"XUUU.RMm WT ˲߁&"Tv¹T'%ֿUVZb.&]:/A!Ru P{p|ne0rZh{jiw}g};w;WL3qMi-U(6ZoUlO fdpz>Rl!eD#XV3)ExgbdހvP1y+<;!X6V63vevRTqF R 5,]d>EF}z=|HrL[xƙ|w - Ji6]OA=I keodpM^QW Mͣ0_X{$6$ѴVܛ϶06iFל˖ٞ桧Yz*a,iRE =dcB%b6E}F>u}(Gԁ=b%)#6 gb bqR&a+/RJ׎w *'^"-!c2 hbyI 6vH@g4Uf,Fy.X{Kj Eq9E- w _{NN'h cXIS+HA{/[@6}=%CaPfL{C+Ue*Vʁ>i7,`sx@)` I v{Kz/*q#7@?3?D, ) p8#)pLø؂w% 8ona5/2x"h_Ug  H((`46tf4T: eDҸ>"LOKXT GO _fRXy:W;D49tFz;fB?yI-I wfqsۺ]FIUb0r )H @rN?nx_`堼 +j`nn1O j!:;DBjsTOD@.6sby5q%/P0=pO\̈\[˩et[5 Y}S/6[ ͐-k~`~!|HC㡈e-gt,'cЎ/TaE]{ˇ(=%-r)aWRm0nβ q; YX9,  &8@īGsH[Cui1O6sXC-RRD!"~۹E ǨoPLl F ^f՛/YV6\`"QMw~̽AyeybMnE8m}>!9A%eDJJԙZy #?mE!d"K>ې|W}F f84IHʼVsqhc r0!x&_.WV.o|f};Ob~GJ[hޟ!K ú(1:&ET_щ×QHYd;eu&%o8-#)w%Jk= v] he9M`CڭI B@D =+HX^'%kO.=;>>XVE(u:CabA_Lz'jyh :DH^8ƯkS}mܩCsl(2@-w,]ҁi_zm<0W;H4wV0MlK0Te8ٿ~ay`P8cT.ÄgZ N.$ăy>{&> X" 8` @(Q$f)&^"KLBBK˿g$K&9g ix=nOxTF\)ן9ߪ2ƓLl@1]*A?}V +Y{Ow_ԌVŨDė!6_7 PJwu83M)eJsc:U!;J~5+ܪKMwmEFIZ~VF%=5[Eu$l$}$cr," zޝ_ CF){ƍ'ئF{svɼ)u 4,g %_k>裸}n⋮h.TLWR((SYELtb牶WAP;żo!3֍juRE_Je G5<]Z_7 |n,kqw.O.e`f[z765"Xf蘑,I+E%#-{ GbU_ AhW^n|(ր'!c  ij~īv$o ,E/EyC[?~..~wwe^La6@; } <=ԭ`۩VYX*,h-`,6Ц#X l]<ߗ u_#|d0/R: aY'{܆nӈus}>K/)~$6\~lJ|cܿWerudRW̿iR_Lv>quEr lOrfȍ6َ(d8: zg0Pp :\S* ѕ_1¡ Wxg4]i.cnSF5Ocq|9㆔ ]]䊷T?F-虔~lT<9'PfSRKBh9V;}?]|/Zu)pt%k7҇v d[5 tA(ͤ>g)Xᒩcb`ioJ1Nte*V/emQqN6srKG/3d/rIר-fjϧ(wȖH׊5HHWF|+RϟV0X:ϑ5$*R+Pڲ$ƏM&o. 3+ 3h,<E(*. |׏DA˜; @<iMUrEY z{1JǙBs-p+Ή({ ,pt 5JT|+/~_^=JSFP{xHϩZ}n "eƋiV2+{%;5  ~ikK5 j $ tn\imumKEޫp#%rH0䯘K#](7՘x$;'d{'$gURNKM8W@ +8C~IzBy@Hr6K*ɈP*HzD:W|f{*Vqo"T4h2y2a)$5ChpeڵU ꅭG9d$?eHI4) v=-eem}3KgJ)C g|B.\/5Cin>K٩X*Μ>z%BvÐAjhי~8Gly4U"dSOjEV%A)F7hjuie{qdj*LKCڲC2MMڽMMH{q&6>19eU -Z0u Z LLżM#BH`: ?7z;O(vK!+r@x@~8)"j@?s^!C֦< 5rl 2z@mpY0y=%W޷6$rμ&nwhQU6Q<QJGNu7̋.Y|xqrܴ"XGbIYfylB|?<1Hz̎><9Ac>d;<<2z3/tQ;u*-}/pO7, .S @pS  ǀ t p6- 944E },䧵4u s]' eo/GЃ}ؠkj8@IPPP`(pSeX1 ϱ=qG+_XgeqMyAZcn|9\R+R/sfem-":4 TLMuJ΅.n>naᡷ+R,03ɴ6*Ԥ9Ot}`f &3B8|[||| FnU3eD&yDGL ZR3lFBn!;zT#Z[8Xg` T<*q Ψ3,Is\1C Vn<\=/m},|w\wmMBl!q3?zDjoWS.73Ntti[ JVOR؝[Z:W<Fa_Әsd}-懴?!i9(K7N 4?;;;̛ZW)8My6mc,c RlkTU8-ƪ9W%CC\f_8?}adk,.mﱍYەnxB'¿L2ת'{7{;Xfvl`#M?U3E^͎RMgXWƅ@_m t18?1AsZp |uO {De0t \o}w zW%zS#|nwe'f|Wb#\K  d"<$PD?^T5A =HWՈż!=II|? Q8`4X nЫ^ WF]Eee{:ہE.Ƽ0p%vJ++xªeMbG&2]1%0i 9oӏ}&^4۵=s "TS0m{س ƉiGpDPIl|?<5vXW-@~]`k;i|J:gfgYBpPr(vu%6< JFoko?=EZ}'x5p 9|~+( 6  ?=h0a<_&4R՗F3U:jseJx<|{kO1Z(p;+Kt4ͻ{⾡S[qήI2 vYs <4j^W_uN *&tv 4ʋMV|Z,\S>GrGhy(ظj|DQ!Ϥ$5ӿ68}Z-nKs|%Du1Ks"ݠ'wSCoxEYׇD`7ErAvvv]v힞!Kq zUAQJy@,/}yz?7 i|0{=jR:ƨ"Υ˥õݵ͡S=3S(.j %$nCf4׺^sz1jʗJLlRj"1!^&R s////G/H 2u|s$c[ L3ԍĩ^7DN'S@! ۄ^ #L) < gpVlUƆLlȭ-Z ZT}ouD@a`\ba~,pd Fz_։dkLG\:99pvwuLrpqj֤̐p@éҶ^%V*` ?h!Qϒ(nhJ{7;;2fuڠP%sOBRSv ?vs Id*Aizӫ<\`=dɐ8bM$1ɴB@=M2@;%(ZN{k$6QK۵FUNAAIƕ`ظ <yJ]W 6z\vJspu(,m*y6!7K `ĠH CfA1ˏq!8ۘ'NPTC-2B!Gei/'uݽ nȇ9: 9.k Ⱥ/sv9zgoX)du< ZfΟa}k{+\>*襟YB郣`_̜`_;ݠ*D`xds<}uy:X[GyjT,qB1S1_Mk' 4cdix'肷(ߡ8i$ TU'%+f~gUH2+e͖xڞz-G{&Y[Kk6:l[/ J63>ѧ]o]yi~yfT3xGi7fqBͯYǞ92PɂIe/?a(ӺmD ukפtɵͼ k2H~;jLm1)ޔ۷ҽ7q΍O3.g>.X)ۤL dXl~lWuL[¡;J}W2$XH(i烲 <kk-"u8Jᙝ?k^WXkID@?Rau}888db8/H xz7*U/= vk?c,%jV] C өFudrLRᢆq]?FZz~74mSp))N%&Z#;0{)(X/zM߸;B8G CWXr.xhUNǷ5 nj,6ECSC~8F} AaX'P)F0{;XU4>\ tq9g9F9ƚ9@y"~F9ϥ7H!Qe;/r&@w2B)dRY#zS#vT%Z*+k|=7bn2U;+'R dZ$Gߧhׁ {ҷ7:>ɼhU>HdLnm/Ï:F #.8]fs:X6G *@)` (g91?fgfxrrt'1W0@-.4*]R)oJ$@4F-WI㿭d@RPJmyƞ:L7 %=\aΘemX<.I\:7}v og ) =¶<ҹ0ߡxQ#` }KMr׹.Z4cS>n~*X}sI e1`?5tIzHfəW,((q+[ah*ۓNznFKMUvM6L)0>͙U1d%o(qlZ=:&:!8_ǽǾ[bVv<+ /^j)fcR\E&u"@SabPB>WW:-:<͖֤n/WGk9>'[yzb M]# [<J1nWbv;TB0lX/'ϭHO[]B>Ҁ(1qrR~ȗ=)_|?E sIvUH2= QoJdZa4_yDl *=wtk OV&Zeꋵ,~H(^R>Ba]Y</(ս 4ƨWLtuOo^|-l?>~ָwN~qЂNzvT|Y᦬vmN=?{䪻w)^b\歽kW9Y^k[/IV3e(Zp4%- >&*&$c/>c)c=cc𗨟N~:%gkTk'# ٙ1_QX\ׄN[E+b=jUhVnavIhm,  F*f~:ydyt RO{`ΐ,Sᴜ۔dUmXnH~Pa@q)Om5Sk=Ew3`#TqOI]iQzkD;Vכzbt^u.=v(vhγӘ8A$ѫbH"0 p’cu7nFR,ͨxx̀$ Tu)zqm 5lG I!$2ar^PMͳ,sHsfo;"h<j}ebm9w5aMzWbu䘭z]2q{qSJSxs=Ws<煿Y;c'lsO׶iw6zw3U\Ui;Yꃩ% £՜2?4?W%| 8u}UZ~u_SEbnjrF^QeM[[PŲkgdX%UoW\o/ݑIUJmDV);3senʲղB2E2@"Ѫniow]@ULAAB (vjKi [ߛo$kesEyC+_?lg]^(\'_kEA <6Wǩ_wKޯp 5b&A_|2ppkg9 Ωc ²^'eo(9ք$vTH r 2poXdڮQ9#s9gI=P3] y;Ёxzybx|=՜ٺR֮po[|<ZØ'6 H,ه BF<n<˚pS󺧊!X (8  ްh(zxM}KѶJ pQDvfzCB/I!kDU븅艫u1=2!c&iO[(+gqPO(Jxە3lw=}YZZ[@UV?5L)OOzOdd ;ӌ:4ʔP/#yۈ 𶣼mChCnÒm'Mn8]2Y.N%jB9b|eKV>JM_i SM"9EjhͶZ "wH|sn#縘$j:iZd 4bӍz"l<|V1gz95[zz ~uuݹ߾&:jL&zvWy9FNձoEƭJ+WgOZ.Sou1?eu-BD](uv0~B}i X8zBE囔rLݪ#~wD(7䊖5 RIhSzO0N̯O`ސ_ED_O=A* Ec;@\iVlCH?&6ӼT^Z\XeoO^Ƕ]1#}&׉wIfHfH9Gt~p.Ky;N *hR\y$5ؕ\6yQ<6߱#CO~fb~" #ç.pDf/kK70ىbm!2/-iazMSb1պFJ-wU~ VQ/bRF?~g@weL`|n*&Rf#VFjp Ʒj4[q?H_@o&!y}Ņ8W* ֣Qb_=Mw~9FDžxWɱ ! 3ѼK|g8_&^:bYYg?XKɊ;_gK\|m޵n[tlYqDeExy8888E/J*8g:Y'[6PB=;O]䲫D<[L> ANGC/Ҫu~Ŀ#0;Q䇢>SˊTY%ߴ`"E|kIIͿhk*0 YB.작_߾j 5 \?`S7vS.ܵFwV0gO,R')ۀ@W#EH[#d )]=ꇼ4LKcv#t:I]gz=`aH!C|&ƣ駸/4/ߞRRo3YxU<sr2hrIt i5<1*Dʤ"U#ͳK85[qx [ [x&&D{Zѫ^6BZ0.1Pkt&{R]ܠ:^39%<;>Ǽ@;CIa3't[ė8;[l3,a>D3$|6nv)PF ¿vtebB"2*eN:&&ק O| o0 *UtwIUIUM'C5o4=n9BsBt6vG7mc߱FB tD#3(v‹NDx77A#)Z(v3'c\c8ܢSX Ƕ4EƝ\f[k7%ku޾iW4uI!a.޼1ΜT_ZxA0t{WTTHF]NEVEp4;Pl+|3 6UR-\޶:É([JL4ZjO>xZ2̡N]ߠpGV5YS40[7 M=SkS2EcKO&!wx<6kˋ<^|EDDܟliiQRRSTTSrJ6 +S[l/=-}?ζ2XKсgH4405vjܨg☜o6ULS9J{09jhhbwfta y3uwZ +wc?{yݏJ$k@nǓstK"׌MT2m.*LS`h-\="=$*_"X(3g>h:j4A,}Q f^鹤mݎw SkJ^Iyt^}twQ˹s!TfAs&woaUJ~>_+2'/&#tuF}/,Nb- N;M{]EoF=LY@6o@!Ӻ)6I!;G!(#[ޤX"K0oǐ᳍44e"͢x_ e-yBn/yg[_ȄVUBVme# NIZ |3Li(XvXǝw8JR)(z) egwWr_R)de4x[#c0[臑Dfksd񯼈 9:>m6}u1~CM?~d6j$XIӳ3WgQwM5~,JRLԎ0ٰvs@؄ Sajŷ_J`҅p|l*B5*8{.iBSuHqCrD%R)Zx/]H -2za_Ō+=}ekqOoV[wR=# z;x&>yClLVl}|b~ƨei;WMxbgp J8Y+LnN{V[~3F}1%9i*YE5sx:nbq`k@Kߖ^(*AZrb T:EeUHB_t¸k HT>S*ݗi\;35bt~E4sO9nzmxXRy(Uu.^ T0 Y-~9=8hݸpL4~ ܖRM\ 3 k0I(JTʏJSN)Ҍn]tsY2R"^MBw, 5v>sUY#n>"٨׸Hu=u 6KXΚSPI;PMRGPY!Ym H?WZmT$bi AƵyMu< oTsj0ޟs K5˥Zx$4y ֙)r1D9 FQV. ]0/;fr$۔T~&7Onx[M򗟢 9i:0,7^Ѥ#pq^) ȅ@ -w \آ2n7BGiTREwk_SuoUѤli0[y|y>յ_7ϗ/_ޟdddLNN7$$$0117A,>JNHheAe#J8J54&BC͗Q#ha62zUQF߾ tRc\E}|vG2&?Y&uhpҏl~1xW։}1bV7E;1`eĽyux^uCՆBQ|~0UYhGT"?M#^<%=^ƿܝ!Zcn/΄Dܹ+mte|WtW};;sMA!ecCsoOb^zّFD&"oʏ~$lG #8vIDzjA6} - @[Ga.m3Ӯ<v?HPQ$R?s/lHpo7dkD>NBd;ϻoZH{,EJiu{o׷6H`!!A!x!@ kp wݡqwkܛ^׮랳yzꢾ9z^TW_5ǜ@k@aB; 3< pPl{s^[ι ||F1 H{j<9pzxӮ #whI>N? xy]z;ȬuL@*оDr*B. . SQ\}:M GAܳK#i_aZ?ExS͡Ry ]3.mϘf{O{oYp =/^z߀wҀ8LڿTmjjwjõK9-| uܰoȐ+ N)1!zrtf.Fiמ\L`,l!lƠÜ m ¾-ק="k{*Tvv8 .@`9} <үzlu1d c4u,ǫHȴp~ " I,ò<"J[r)hMF7FDX A6=bnlz@^"zVV0Hw`Pn%o`.&V]T <()lCA{ E{ EQ!‘jO@^H¸EavE(aAAw.t|a|"Pٮ.'7]ăoF>&O*-Zz~F}ǜk=8޻!\';;an;稿橀(}>h8mjx߰Wu"X|9KѪXIhyHUHB{~|xbRZINkcxsRV[BnSڥ7>J>ce >TI'5*Ej[tJ0 /Jl[xG5/-1͂7Tx},"f @L[~7}@qȂ'[穁NQ"wplzڹaqQ,!.*~Œy**xTr.i 7MrYvoY?;3Hx1ꄿHaO)~[,ѴNXZXsF#O_3d _S@Vڏ>5Y\M뭬6O_7r%f?Lpv0idjQѩIywy;ݑ,444xxxcdzehUWۉ5YKŬ˝+sWҖm^ΥJe GOҥpN4_o`ꦮ}1(unS`!ܢ6שռeyZ Ɲ!VC>`iѱye̩@)UO:^| O0K~ l!(@pNY)KSucə|4EU-։=uk3=&^Y.ƃڛ*@uޒ0u3L۲̓ 1 =:?T},8nR{Mdzv2m$˗SB-s1Nve#B ,U%R?T׳ uNuwqtpnsmr/77Oտme,&_3ߣ5 GYGdDi#sх6j6ٗ_\ԻW / vP`g'Vxmt%&ϣ)+uc<C~`K =/ScièlDڬ#%j O:/8LA(Y@|Tגf>u546/oTQ)[]mTbl8[7)M3Y9{^.PU,,]Ta9Ũ;ة)$(#O^`hⓅUMW=y>X޽y9Z:1*z)9bA%qY_S_\fdɒsvRMQjJUON])n=Y~?MWwvwUK)ߒU\9Z+lsfchnm_lUgoib*lXlGf|!M6Vi/0H?P7_IE][`l۲^9{S'Wyڈ;KЩqBզ`ryfk#ߨ +[@ `{H*@ )ͦjyVlhtE;v%;Y_/2fkh06i z]6Fvvrqz5fNnC?kS""ŒtZ.9l9z5ԘYyiLjr[!ms,]̵\mħ W2D ;;4a+yW xJH9K=Ev0Mv6M&EL?~r22C>KпHPJE۩^=frsjTI%9IcL!1`M\5LQ bdfTa4% }>q\aPXZ\1&s5p-D yۮAT'X`ܽ's#s+,5[I ާ@)kVvu=h#y߃mA ٔU urU,)dP7ϠQ;l|M3Ji0GnH~u]uvw=z3s3upaöC#L3tKT!(*#CGOI6_L0^G=fW,8 Eie喠gtn"n8d"U{^v{qE  ;P`&" Ѫ+|̠(#Xu0vnƀ(X,fQ-q := ƼA̼dL߰ǝr;SYMfwu<=|wp&iP*u!{KaE@d;N#$ˬ93/!h9=b@*Īyjbixku5tr|":V:glEC=BխO1m +Q̨Hu{u)(\i.aY|>_un'5|uޘoF ++0n7/IXM \^.(Vr̵j|4mC,©Mji\ 9X'W_&^-mG0!l'O?$'b^{ķC}0~wr)t6I ztBjo\"uV/WP!%ƿ"yRxP^N/Hj?'ϊ ^^_AAa}}O@~>&Nwӿ4yR֟%zzzay }%)NQi)'_xN?4&Tl|腰л |]D1u7MuBqcM|=l'膧gHYgM#;VWHf(o&OIg.-.͑O?SVfVC8ãu\L^?_>!;[m}"@FUmAJJvhleٚz&8U:?+vOX5 <ԉi۩$pͷtM5gzX LQ.u<$ܝ_\!x[ =Rq\S+3ƹ׌A{`QTbvE{ʦv{mʪp@AᗧcP0e" |=ãhH߇^4 ` \>j}^l9uwLrck?%Nsy&g݇Lǻ.QQG+[kbA{zشu|f6(DXңx }nk|p!zɎ\hswة~4e?|eq{l_LxPݍpo;iu߮xV&zqmz~J@E Xh}/ B{g/+y[BKR CtBD#ߘ5L!3ma[#X$|n5KDT7E>=j{A Rxwfy鎰{S:! ~D bYqLXI:5G }~ޑV-;]i;V1R( ) g$?G;']`+,flZ ޙ?\'L3lhZ):43lqwGvڎ|XȇR7 ,My]ܹsoL7bp=k ,^b#:uZZ/{:LLSվ@O6E򔓕HKWfoIonj0=%<KKKNNN999cbbnmƻwqgrt;Kgbb7otknYYY̿IZZvy3q;iz~`ٻsE2vGD$x]欇hrD<Ň 1&ʛ5 t[D/dK8M} dlF^W6MvY8N58А@ibdH2tlէyP8f}`|>SLxkU~ċq!v'X*&0v E˒BWvi8$Y'pL2ry]g1Fl弓6M:I;N[<5`+' /@K~T8B/N3y%: cgpyU_U~Ry[G0OOm{+i?Y-1M fuV>v}NsNoyʑb2TaM>C1=y| M ,qdӤ,m"p/}OEOaJUB}o Zu}k䃳 E:y:xƋ8T$ܸgG4"'QI:|D4*V\b4b4g0T}v1(Y ' ol(:0CUY[SH\c}䡖B(WNJ%r82D4H@UZ{li|dmj$hOgkEҥi'};.OIT ,TI!2D O*!*+*pFzCvM2Wl,Ln@~ӫVϊY7#wdƹ&10X7XXHPN2{"RӷL*a"A?[\N-BW]2^YTP͓ab>.Q}{%7t  ϥhy=ͥZlUֶ˖&9fޖtin!ZyςjgZLspetfe̻5mH0E 1b|ikAxN=PSM׫6'Zo{lGoil~+|=HEtϱ,\W0h(%QsN=~k(za.{ݬE15x{yLh>6G昿c1T$D綹ŒDhy\gm0SMhV"y\Nij5L- iΣqe_CMо\F~x͕5-cf ;I^jƬ=ed T=j(0Hi{Awf=R goa5$ݣ$~|o ^m`8xj(S__̍7=x{o !T%E̲Llp!ߪ/g}E(jO[.d+2u%MY />_y>ʘ7$>砸vwY#-eqg^.Lao@""h5gbw+'> `g8rz`5Դ󴠜44(Qw_g ǒgk8:GXǘtC#}66S$v)~^w`ke=9  `ORwJ rLp\xUqNܓ.1lÝ=¥3mlfjk/k.>U]%6?#lJ. dh8!:@7k ~91ܒ{IAp~P2 R~a#{ȽWjưV vj`ZM&zt\sUvo%UNGiGP@Cjfߞid)[釜ӯ'!' e"%c_V:i~xDG~_;ñ'x±H<$c3Q邽S-!0'G h{C-]5vb,#wtv?MA^v&*%>Ef>FV8Cre:[BNԛ"M?<\Rcm*p`lXwB$Npi}~9j V)35 EJEJ /.EE+B{V/WARVmtqxù{C]'%Ο/;uY"A1!(0,  \R6ݕH ]C3k8!%ryPSHzUUކz݉CT\fױ!8L9s^_  ]9{?|E!dT'7ah4ƶwɥ"V~!$RJC?:fJ'DxV&M@ydnYͅH rvul7\Aóܽ̃fc]bbnuevk _Jeܩb_#_G RϪ$wWNS73e΍[h@#لHYًYs7X*+Mկ´

3#Gi(= 2IGB#J&7.db3,CЇ40lxl5_aTY]iv?zwኞD}JZz +RgM&t&TǓ"-]=\, eQo0\αcwHk_gHd9zY'*\/_=ق>Wf=a1 Hp ~.DbXE:trvqs⺉?uj ) fisgՀ_ Xu`mD繵bV?{!C.3A:i*il6(Wp R )&88[kcOxEc9͡///[uN\[XJБ#h2v|$jb M_ C2 *峟ڙV $>\$,`k(iOTէ3l%ȵPNCA/ A`[hKeL5LSy.bȟ#o֦GxV%ԋ "ml0I8E3=!hڙ)QL+^Zß$ehoxWX i̦CInH45vU]%u0M?l'/K +O?#{^h8EDӳoN~4l~;Fb]`Cna2N9 Uh]G+C"]8oIP$TZ>+kd~=sd/|9~Sr#)y=KE75@7&hʼn=°@=`_gۤY5&X3[Z$ R5] n}Fב\pMD <^*yy:lwS-|@o~\/[( {49ܵ͒}:b ,I=VQ`t 9i_xԿKL4v$&F&Fsb+imA~83pδcfPC+rg>0z c)LK c B]sѾz>^#:}_ ?O)Twz%: E(&0Ԡk<(J J 9 EW|Gs* 0qI' ӇLJ;8[v117OϹB/u9oiGHqQUo0MOno|3!^G6qۜBNT#҇u uE%nM?Yqx>8E-n&0 =%+]k 3o[-.x> i%Vߢ,DR.y=LN)ķDG;+i i)ɿd] yd X9 ~Nl]BpPwg6wSq(8Ѵ̓xxoe]M 0VuUiU_ ދ06m,rͱ*aO7ba(7肗4N0uEP_]!݀(a 8Hr珫QLNԍ 4VWʡ"P@Ղ/h gQӲǺۦrXd/l!ghPlG[dvf 6qX]` 5Oj]m[!*)#Q/Mj?E^c܈jnRPnv0{ӶIu#~BQv>ުRJ+a짭>H-e離@<[WmOwOlղU+ISKNS JSsLS2`4Nsı}%Q*SO/v}[>7n{꦳Kz=[j*Ws[DqfrAtEh@O؉oV>a-"#M GMX5DR| T!"S/y땦<`Ɖ*E{bͫ݋l}iar8sس_1OXVڕ*9s\j5>[^oҀzYE]jƞ'&*/TT-!?09{gkq^.ViujijijIijMikJ^fG3TsJLR[*F>LPlԮ KO9j- Ul?]"t=EV7=#x6fhbD_쁟,C7Ĕ=ew* 1)2Q7~NWѧvw:Vޅ..Nzhj|_Ǐ}oEO>gJ$y~HCCcggO@X[[飷:" NwL|Y0;~D}Kp&NV/$,8O@A:^39U5Ӛ~<P$ 7 CU$-\D-Y,tkmXxAMN/AjHnrjisYk* ?k Yh-TJgX/4,Dob:C"H z`]oRJNP.UwPHv"|9 q@fĨ=^Kˮۿ'+!s{ _&x}_8GNfzgX8:##*W>D6XH徒`P1xZؗu gubkeQqaA $rVi\0yo{VkV:藇(g;\R]U#esded#ۍCDʩtm>WaRj0+2 NQ81eg.YW ZbpS{ I nzmjt 9,/Ɵ=uzUdGպW 7 ?O<)78 >6<8wLxv`ic^ړ^:Z1Q=]'kKTr[Foz]}b\Km [C$Dz9֚Φ/G_A{a-|jv "{rWu= d7,Ntܤ hyz9 c\,!YRAz}L"3QRx=L3JSʏ$ji6sI'EjUEۗS"!RsZje0,њRJWst; y"FA5Aс!+$n Gf0P^\װXmnY:6E!v1[I!oď+~d|(UFw[),\=nB !̔i'g1v-S B;]1zi忷hs7-d ]+z+[y]<ӓb~Û Wr\Es{BLtpDtpHDwD{r=ǩJGFoePBzNTjJ{ݾ~R.>ƃ/Mu&h|tMġD 9HvuBYJLq8HzV;1Ƙx7 ǔ[00`>LU 0Y+YBq;bBNƈNZM.BoPlhHotWtTo D^:Ղ)l Ѝ\ߥ?ctp^z;~A6Fb^c>?)/?~j=-_`WCkF3=O#͟JQ!fC\ݧS.52E mB[^"p=TOd4V^[5<'@|;/@$U>Rۡ\dRrvS7@5P KO˫:6?D/ҟIcZxں ?XHi֛eޚ.U4j$j+w$ߚF x^6CSAgWODINWvUzVxA+S%"3[~e΅)|nd'M&t@% yMȏ\DT5j h z˫3eM&qP6)[ m*W|ath[I{=dTVc e5)袎 ފĺ߮*dN(q]= Da#oH"NPmQR8Z >5WZ:/oLCR1pʦ=9~O"9_$UjSm}2ϕj:38e|csk\|.{ÆloҐ ުӔ{XN33~I0kdN]}Ynphln{{;'S8XUHgCoW{ּsAuhͥ:+tJִHIր$S3td-ʙNQIo1}T.aTeTi遰^5Y+Z#VTcw뇑NK]2e.]WKkDbB|Շc:onp i6V(6vt44cc+/m)|V%2dWؒ%Yuuz[v^Oeza>yӲ]7p@<r*at-N'+dd"l~cWtۧFvޗWP櫑gcLS Y{'7ĵwc6dG٭S$i  Q&I.e44\܋gH7߽6:q ] BÜSI]Dș7ca0 *BykͭyO4ϻ*|<΁p< O r,ߊX%z6r=ZHîfƗz.U %֌!E͍K f3a@G`?i'c=1!_Lb;h݆]5!&ݢDYw%G^rP/%#2~ 8jL' ն.\8%I y!Gwx70 GT!s[O16c+f$(<0RBViHDXonHHٛ>fP?~&a<-| ߚvPq,( ^G 6^e=Kx@s+l+< BS"ו_ԋu+U{3g%K%KDctl#t0¸. ;Ico˙ݵ{{I0+,14)>|Vׂ>Q1 тsVK:T0ondDL!m CwlvU+qzlnΫ"jYomET~Cd@c aw AQ=\e^٨i-~~S}-~V~>Z|8Bպ~?w^.E>Ypjl}ui*})z+Q7&a)ruşSDkbu,rlr~t_ytpM6 gBģ.]R]Z酖,4LJUnjHMI{kyܚDUH&s r]\2GOju\T >XE%XBl}jA_)P/Ghʗscw` CKIz; soo0N5)dyc0~ Goh臊vҸk3r=_e$VyAO Xz1+T@+Nv?Z*0XIhl9W=:+Vc%t%.С4&pNgȝ'6ҺްɳXʘb"DmUy1In N[!n /\O8F4A:-,܃AHnpdK%{~۾{H|uU׸y-zzbqyvkM|1*L 5x@Vgz{ vmq~OGqDrp}{IXxJ4xL g8o-ڊl}z臲^ј>ufiJq]9] [7ot=B Z؇W/ Ja(c &Eݭyq0Xu9H$o7?})P(M1Gd#bʙnRHQŇ1501o8(H:ݴ\ POYXzɶ2?{5}˜jɹO8sxbc_xFi1aRp"ӍN\2" pp>qdt?2i󪮛19HbPhVM@xIOH XdV`{Y7Ğ>7|JҮ+4!̰=ciQb3G_nHϞO 6+gX,IѨ}Ȉr5R{o3!۸t`tEQPZ0Բ^CRWvn߱6i{ι7ILe,`;Zǻ<..9;6 ɪaD sDqFч٦W-c sR(5h򳇑L6?Uo o!<_cj;4KjZZK2픣YB 1@+yw[~; ~(vXG3W698˪.+[6^& tzot Pz1ׂ6%AE +icVo]Yҟ f^l\.˸9sR#*6@T! !1<}2͹fM& G_IĩOj=R}n7#SwgwoS-m=\ٺx@27{59yܶR=Sa+-Z(>)E!HO),hj٦?ԙ&]"f#Ѡzݾj \WU 4C ]¹`_ZG2TY״nURrQkpf@hUz4`Ѐ 0F?`¼>ZnѲ$Tt-*+|糜a*E޽ ,k#M?2~mmd+}^: }W;5s]%f0BEh#U&E[u5_\ 0~)nN 7,reod LjU,̗/I z9yyyJ Av>RTSh͸YwQMv~AB?-,|BM"TC2=_O g}ޭS'sV%~ jeq> w#P(%;,W^U#pw~}ukH@d7+|Ll|\|}ӝB DWJjQurWr}:@Xj)nb{0I<\KC/gSD[83ta3/r&+>~f ~\ΗݭgX2ȴ9¤9ʼ2̺ >*&L!]`?61bR,Փ%>H5};d9 ѝJ6q ҋ?g7pe e.e4c~ kFwz`uuXHhr+ֳ1*2J6|K2T&-FB~v|,japc?[~;ʓ?l Mqulvj"Ugl ?eJoU7peԮ2C&|l#O֗,a"uS=c݌#X¦ C/)XزFK'g! ! lS?뼤˸ܥsXaq~ϭVi4 3-߾4a Ї0c3b5+QCJ!dظ;p0GW:-}}y_%hOc}Ä;0|k<˛G!"=5Js Ɨ#TX'9ȣ{˸Esq2Dʸ(lm}i[+.{4;A1`bs,Uwc.S[Yy+=^M!YؼxVUSp¸NGpb>ca`;A'7:x`W &sGc' *:l+[w&=)~cD#o.d55kO&zl}o'->ASVƸ\FrDU}!K~]C,f4ޟ0τ+# m{5w/[w$7u7{WZv~cǥEErM}|H>u j#Vf `tR1YF y9^]r-{`g?U,>njm,C~%I1%.Чoa>οM|u-N):US} q|gGRk'$:;704y~V1.;ڬc1S0U#CĊ~k,oJ)c\iKLOU?Zͻz5cQ&kl/BTsJr~%iŹXZʄ Ylj^|7ah"[l/WE{grCqJGS >Qg/B/Zl7DtJz԰]k]:m R"}l<L*$&L.׌4X՘J3L0뎴l 3o02E:zC,R5 V\cưPs@uEPD® EvكǯN%fhu$w15|eGJT3 cgckfs#pyW(lV8ɑ;,|?#>ؒ)-m}8fjnggXzhM1GXWjh_q q`7CھnTџ%i`Yp@1CЀ2nI $˅aAY軉OCR 6[#<@k=_}>ɽ jܪ>3[T ^1+}f.hSlL$Yy?I?+ַ°Tz{64!Ʌ&ˏV,?X]#jQ~hBtF|||5[n='#)/m½npcLS`wQ ?Nj7/z&1P*`lLosὼ~*ݵȫܡrEK_e}=V`bnH\da;]ٻ-myǦno={VaRdPC:(,c$$v/}1 I3Ͽoݝ;^s4" bvTZF62~$\jm|j":3gGz}ldTb0ݢҞac)k\Y $6 }L9;3WpjJH!*l쬏?.$"NԳ::$3Gs ݇2Kf,6h&9\R4KkZ>eeix薦|j*J Kl>{@@3]WQɹG&>b埭?b$4Pe-[ʻGNvkƇlC|Ͻw*gY"=(6ɍKH1jOU71a_d\.;,M*=Do[s4g̹pGħ)Y9Oݓc,[xpX6 ~i!Na׆$t遲n4]Ef/'V?+Yw% O s.7UEgc% $w݋:`ky!+`׆BVaHE*bqx/+ӑ%4\ŵ͸;b{&"KV جnӏEi/:&--S:/8rWi' ~i$w #vnV4M:[d22p2hܪ>P9%[ȳn>`~Q%A יh3;"'+N[%{rGG'G$GC]Ɯ5ePkQ{&xoJ;+ۯ\oce0yIsr.`IW>ɹbpK;0W']{Ⱦu1P4 S[0=_yxjM?ҏabz0\zP-Fʓ[[nbW%B=l*}9 ࢰ(x2D0=uҚIB^\zΝD⾸fuIJ*[bf2PdJ AÉ.Ix Cy]} 'tw)ar w\VzK49%5:O5ǼJ3`J_lJ`}- 1;*}G8H ]ݬ}\81 _靧'$Ή/ /IwFN^\w:Py<ٖ? d *wkMrž,&:$cM1(HH# $ ?# ?!?&k<&:v ZԲ"|B0~UjOoB7KdJ,3°BH}4ahE1(8#\|縀쨇pCt4KtRItBxi@xƚbMqML}Q;730i4u~wg1%ýgD"cDS-Wgw`!hCFJBQ&.p_!*_y';^LPnݏۓέvn!:aMj/^.1uwO6 O7!tz}/'2wҜS֎: 5Xӄ)Jj԰ Pq )9]3wYAEKj_ NRNR>/֜h@aEߌu،Y̤qҘ^V&T3٭١l^fZ(O$'9aaE>Mӡi!t|meUuͷc/rgI )Kw8vV $jMVs PϯS0L@_&׉5a6gW{ BZXտSeyviB.!Dmnn㌲UٲD?:,(@7>2*\¿uSTsw +ltr~K҈kvkҗi .e|/Iy}½-RUJMMi&֋.h]Ή+bgUR!VNޙY`'w梟w TrըT_M"Z1H#3K:W@nXzn;cOuK0;TU&nelo`hYSm`n]hbnS\*3vrq Cp0V25ɲJDyO4*_MRY1Ǫ%$&K3K?gvջ+"J /9+Xұs|pLJx S]"CE9=P8.pϛdi}9gsx#f[_2!q`an[Ӝ"fd+PE^{R.hnVli4` lN)JU̬UK 1DwMt?AMw0wBe_9_lF=jcfZXZԒc(Gc24п.VB1S-i\'r8<\kDŋP/ =#F/mBv2##+ }=ܒL LT"=̜< *bf9N`FN;6yA_3!归=]v;(V4W5 "[*]'~FeW~.nw2C_YG~=TO +ȏQOYܤ OR+[lNn?A*zb5}KS6k3aqZ}iʭ % - ] "O}-#4xpts"|U'y]*wP:f>;a4qmj@L0n0tO0 W T!n{!T,V'Q#=װ)v*Br] :ʹFYEqVO @DLIeTD X>qE:ƈMWO]`Os1Xm5<$TcpL^DIU;U3JN. oQ !&5sTfln}3"T|F3?P~=xwDӅ[O.C1'kO{J+ *EsgnYn" bܻO 2UOm05ugp8\$3[r#i8]ګ8![B߆%Z}.{021m05yz0|oxjkܥNq,fAmEw*(UЖ-"-] "y8wsʚٳ{wWҹT֯+2x\x )~3B^ < χW٤j~л~p`+e%9˾r>Ld<գYr"T ѹF#@&~"ȩ.L:LcUA>'Jpy3Q8?v5ZC,Ϛ `F9Xv% UEyӦrٴYGE?I*V.]{<:|G=/s;i}- ņ-VPD.icSP '0=4༂D$<'].a)Ao j"՜uFψO PWZjz0,"(6xVEpB{ }K&zFg SMRSFkA%iU~VhNpZt, Lhd~Ƀx! UbWួ&()|0F etcu{IxLyS0! IS-+cD- sThQKrWa]b)Bhۣ]L<lts=eLÅJ3E(/ /G:`4wWOZDkOkC~Y Tr&ú kγV]|`4^=/+q5mpqs:HGGG4{6dN7ͦ֞oԉ0^̻Ju<^vzj|pр`egoHvMC ؝q{ I>ivmgoZG l=@<гT8_qFѴb;BY1> l#Gn#oK{M&RY{fuw}i=Y!̯L/i/H(@9}9% {[52^wsֺ gfUCM2f"܅p?WT$Uv,LI0 p3LRooQ;oQ"P!LO&E~d%*bW j3M$m~ֶxyn;w%wI%oRj9OW&?|l*h1ZUr`_<%?$ۣje]멝)˥A'i7_LdcZ.2L'E$ݢM˶/FDr+nR`C"vOeQ`$|e>AԢT Yo (RCw-ߛݸ}b'HjDAϐd@AYu]7ݣo~UV'jf*Ūk7@Ft;?S&1^An'ߋn~4S:bɩ"YB,ó Cdrɦpd֖\rfP*,@2%4$2Ϯåɧ&4U߫A#%_=܅B 5*ijSjttc;tct'uҶ ¾#f*Z]7!n)._ ;J=:P-_^/PR\Ol|b5m?˅*3I^#v:quqY:qa:q:aaޥ6H llWG!ܰ!ڷa{q/p_m{cшpct92.}MË+r*s1 -ϓlWNqvq^utۻ^˩=mOW1*'K6C:sʉ~F(vhI"ͤ[ѻ1cG_u~M+2Vzl8ѮL_l.iD!mNP6{0%}qg/Um9k;/'H+4fTս)EqJ19M2#03Ĭj~cgjk2Z"+]cZkZ-VNLV'wK PŒKJ=%QISD;GTMwt1J N[bsrc&!M4p-F*.YMN3yy Uam݃_g27|;OD+eKTɸ2 1O$VA(,(φ񠮱xzOLM3K$3!AG;£KvVo(66U '8Y>^4jWJm(^lҿ<_]9$DN3e㢬LNiw>^x罝[mm~ʍI%ʵm񃗝ǬhlBh*t7֩{cƨ_#Kt|#wW~VҌ@@W!h۽v.3ѝD܌ĕ |;bUswL㡆[_жMQEC҉䄤wtsm]CcWEuc=lCla-L ѩuCU<- ߟ]o Ti"7Nc9@9/U;F}"6 l W "f_?_9(wݳHGʂOm8ܯdBp<.;5(Yۜ"~7pXl1v`y.puTtuR/|Zxlt6K48FyB@!vQ˺vd*8$->f6QXy8HP:@;CʚDm\mv5K^P10z|0MMeIn}O q/,! `ٚ{u:/Z s,M!)94ɜlWO./k/c'3!uaE ǭ %PEkG nh$>^f3>ҡ82:﬜evaucReCŷ3\O?E6 Tۣg[k!5oݘGO9Mdh&O솓~}d鐨diWv9i!cG:@X _e2$]ISpKrtWԬ3?j4cmF90op"dp( &8,;cnW#6L+7_ (~0> ^\ HU ob\~2rw&l= m8cof6%212@S20v}wCUm!%D 2s\wm5l7V˴#=g& GD~@~4uryNY}k ˷ Wݱdɇj7N,ϵ=tK9Q@}j;gk74q5e#-PʬG^k-1)St*@bA* cOga89};xzڶWÓCO߱5"ELyy9Kegv}ߞQ"/߽ٸGڅxQ9ϙ&knlj,QP^Y+Y^dXe غ6XkYSj}HMoseoOMxRs.;eo2ɢAN89M&wZ\)mpRg0`<=[аʔ-RhHWM&jOE)MZڠ`Y8&ֲ KvvKRky1FL1}@݇{:.oͨ֗}B⧤:țNs?r܇ 6z{>Dꨵ$2-jAd}!e[/0ؗt)8B%E4dFYR .)ɏrqs(vwthrLl,]HFnb]KF)dmH" !fn.Z^..^ƎfER}6u.a<)u w[7L,o1 ig&uBs'5؈nj>Dߚoi*0_rk.䫩Uƙ;a  DBKDwiz.Ya|rQ?cm^/ 9V[qwMC( ixr1 |d\;e $Ey;;;[E $Bt+MBm beXw57)o 023\FFѶgn[?Œ UC͜-ͼC4d3Êyߗk&9z[zJG}R@Xk[9*e-2uF_ooQY*~)(o+d,Htkd$rwU#?~8u_ [ynxa{nmfq.|P~c,{k+EI&teMz({"wnm@cqOHxQay E=y]p5Xu}tZA!4X;L4B;!Z/4/-4 P'?B kSS׋F$*'+EUdCDJa$c)k"@(T={zopOb,Aa_1l%/z(yn}ȄuO\js9ʻ1:0K:L/X1XeV0.uz]̾)u`@yZdo3֮ط_fx}檂ݲR!GkKak[ןD-hϿfbf$W"7.7!XVQsolybuqV6VF;H;K?<0&gAjܗn(>e &Mc߳jL8G_if*J>-Z~߈°TI}MgG352Oҵ̽la~S;07R)9yp sVOgn(e_9k&Fnm^/w,p\E.GKFb^dES4wXXl6b&p}i`=9|YA`<]uZOuӏ`!zIy򳟱N8# " 32?дe4vYa2-!Qv@c[MNt̪۪@x5=?.ѷ Ef1]@ponon[ BJL9 dhۣOG%3_7JL-{؃Prٍ7$<٠_fY֜kX{6C{;;~"e ,ixԛb]7.)aT};kI6A2DUo.}vH9ƄRK ǂY-۴Н=,e_Ix@#$H0Ii7Im#Vg1p:H1T42 O#ƪ{s8t\iMgerq=FZ"1xxُ^ǹ}ڥbRw.[8zRyY`{a/ ј}okX2qݵ 9O(EGsu|/ "MCco5 Hk qdGZzOUC@!VPyOo tc3`β/+gG4I 8ȻyAX)]r]ȧsȒ[gλce~EqzQh[&P'rʂur9aF DC\W V WVy"7>bȼwg}i~n[&Q4M˜ʦAu[Tq: LBdEe%7\vkx|-o ISs3tSt/g({WkvgSnԘM$+\u8:,Wɫ9uݍ{ݻl;ۮ2[\= o^:÷l3(Sl0j~xsTɈr4Gs_Q:QMVc2-]v_Ѵ 9rN% pyxjיfANݫhӻi_G@X8kyD *>t.uFǍiDwGPP-“c9(u}3Obi:r+GY \t*+7NE-@@_@/~>[c,7 ktx'Xzɸ|cO`%?#KDß.WwHV9$Hv쯒Ϗr Ns+rtsj & LK+DyV8&ׁy (WJS ʲvpq576 1*՟ -քh;xx;Z%k:` =F8.۹գw2p4(2U/O+>K-M9uA!\&yK1~H=B/4&_:cdurIѮ}Κ6BD$dޔ.P\p:Ң/%O_xJ6ABᄲGTA: \St{*?g9m5CtL^"@%huѢ!9ȼ'bbOk.FxSӎg݋S- 6xcs ;C'Kz$Ѝ'#oڶT b`ڶ^/um OCko~oϋO*YH#3V>ny0 FiY\%-:/VZb7z6CX=N ٷ/y^[hf+)JT:GGLﻐ,mxS8GצYii֙snPG >jn*,E\iޯ fV.OgEWgiF%q=^y|~(М#J"FQ%.T2 3.rsq-2~r.ppnDOsiaz9W*T,/S/A6&>Hk<-bF4),9Y&%X7ً4d׍܌߱޹/Esrc{N_ zlYaTύ}Y^煵4 ucyv<occCNN~;;2sK]y^UV ߄ݞ߾5~~MȿӺ½MQ#bZDz=FU)w@?M% ?[v 5n`|s!Bi|vzd|lfi DӜŗ=:/i[EsNHrQDy+xU34MZ$cp H q;Y5 1v7M0œd~ǃRta1SU m7WB0DŽ67o_%߻J~xZd+#Y;C"]2!z}@Lj#9ܧzDr~qzwgcH:r9Un^8+_/K,O 6u-;:!#kp\~MͼCc3sSj8 4I7o!>Ke͹լk9,} prrNNKߠ8hz| xz2}Y0R]Od{8)^Se}LKjTmY2Tb^Gu1&TM)5̇hF/׎BF8I$EU 5}Y=aK2G7]':*sȓ#G.qgmKr΋"n#o3~vAQ(^3ihXlt?[f[ȡ:6mǐ`lBczt q.t#}$؟-9ֵ@;dtkm2qr$80WKWp3W_mH[}=kÎ۸D׫sk`b-^=Ҟ+֪籂ϵSwo]<%AaJ)ytǥ]Ms_32XsMd KW&dPu!G+1kľ(44AsP@tojN.әB[fȴ#V(Ϸ@!kw[[FMns7, 1GuchKIO*H5D+D76?b-?ZA=X=?0=}gl}6F%@cxĆlF K7n<@|?椬sk(n}jT6 w։NNUIvI3qVmclG\e}]6ʘ0:aUR?] &!UŽihu;yDDI7N~b^:"_~#zl/O@H s%v$yk$^:#A0_~1BuFuVuNuA`xNMǢu^݂e\PmށBڹlrUN)jW"ڄF4K)j$Xx9DĺY[ߙ 6{A <1 X[]ld^֞$jiay\zvA {ʓg TԉJUa.8m +pT4U4U4U4+hB Hۧ!G{ ։;סg=0IXE3=oՍD\avJ7#o 2O~-+4QwT6`;p\ 46e[4}>hM2;@*wg՗>U9Lo\,hSُ_0c~GGjXj\JFRYBK`r_ia{caRH޷/k4rRGMaV5cIof,_&9k%GLGM$%j̸Dy=36qb駃C 82ޭ{p) ! Mepȋ/ǭ}l|p,L9^(/RLLʃRn4vAXPdJݖ>dU$//B_?dfwExXx㣄,E=Oݗe*^r%_cZFn-ܛݡ=cjsT NDUS2Ϥ0b8!^cP&2w=>uYHٳTW÷6,p7(7ŹxM|n9CQrtymgOs킐<Lk4gմ`iE_ʞp|$Un}=99 y^ eSSӿm_lprrs}.uK"O*{՗>yIgX zA\BUts952pb:}łq yqI›/}erչRi`$[O`Ybآ_|>\q#ʃ&y9nʅ7mSzH@avRjV3Ex$HGhۨ\v<]+0㘩W;-i,oOmRM[KGp9gUb5x|k'D_Yܞ{}K.d{גԒ%{$wZKHKy{.11˗/}||X쿵ߺu߶e?R(]QRRWXnQX|4\P0v*>EW!.l$6K⌳W_k~:ucxaiX(>-mǖ~> W}-z ) +T-^G5mIᄚR\a0zDʾcBHr5w|t xss"BDIbkQ)㌳O,nR/vg[űuCPfs/($1,#}npr2rW74#_y.KΥ]ظ ={Q2$P V^IhFmeken!=ylAԃ@#HP'V++8uW ܦlئcn;Hb~کf^?xqb:eT bpFy~%눴{bcC%E]G\ Q,H ?xGvkKzSYHJ!  wDW' gg (.[aLp }_W q8ܿ ""0R] ڍ;#~XF9dHס }г-uTyU}VFPy$Us-XHLSA{;pe _Ng^. -S#N_ c8^T~+],FB*VHgoEpXԭO)irV4=,pAGHuў7C-^?Rer-v= eN\c7Y]?Rav.^;cR/!'7Fm<@1Mܛ3^ h-( ʄڶj8g3\#=J ^2`[o54UERkkZ)0W 5}AuDHW K_ˬFjXz-dsmrx:+% UkR]v!#zQ _JK`~ZZ`lv;q-ZMrōT}L|MR~TO臾oe{9zct|}qzb=X9U4Oд(Yɭufɨ}&SA*ŚqVO}XZ#=bdo6]bPP`(VM+EBMSE >6w 6)fmx'TrWkRs?o4rS/n/m?謌LVH3m4WUj(=|ecՀD AA½iU9ܣq<,v& ˅{4}3x-\'RVTY:䯓VBײJ!Z >bյKm3FJSi'`Mi?RR(檘:x vOVgn0GpxۄBE k?VH/qu?Ӳym[C[3g4e5?@nplxQA{rZ˼겍w:![-8ޘ?d:t;@;eKZƣ%ͻ}UOU2YS֖q*wpHv#bMrԕq{/a|{B*DJEՋE UW-6[?U~6,+Qie1s^BH\WMtj㷿AO1d䲗oN©I oyyR$y* Q)#r{"^択O=V2L.gfȮ͎vfZJ){Ҽ{a!g0l9M:\,V_ՠp>X޽2cuZ͋וHe5/sA#>s׍e ]|MBkYJ'D]~8ѿ^7]!*cA=g[ӂM*c6C} mskd>fH ~a :p..f&^?RlsiWa+ԯ9*qUNcRQޡʧKN47׳ Mhrǝ#4OV]qaXjٻig6* ~_<}>2tqZk*AQrيGZ$)_<; #;Ϡګ~ۗ WhgdsL8'T,F̼;s/㇚st &Upў~`X<}7B{? 'ںi NIזntr|u)g"6;gBpV(Er9b*okrX.&nuGY6>uڲm4 06lMyuP--&"PW¤ UU V^gq/_CWd /C{:?~<\4!ܼu%y'S H2Q,ڗpm y2ND@2' 齻[Ox2d}&w1UVp 9XO NIѻT 볂g9t.-,%@s-CwYT*fǨGN&7( I Nn2MoA?VŜn`abm04W;+sTx9/jU;)<޹4x3՛[kZʳ+G仫X*Hm|>ݔ3\??f]UǷr]&Dg3,A7[qQԕ3 umwe!IE"52ԗMDVݾ5Z <$ŵwǶG78''eo2OMZ`YefZ&4|s;9љʕ[j d$sED뮷Z|}lKKowӌ"/ک}g;^yB&Qemk\@ ʠxQrpmꨆⴐJ@g@]4@/b[MtRE_I]N\{g1dUٙhF<- /*Db5|L.8/W׍{QU11g}Ǡ#3 H.JuN"Ud?s@vr{ռ7L+Dj$q`Uȿ-Njꭾ% BPY;q X5L$6Om/OUX#E&վ鷦jY/W%F^,70gųGF˾`VNJVaY]2zO`M ڝAt^H(J)6Yg^AWj}wJV?vsG$|$5Kȃ#{wB%.s&-%;ylygnǷۥp1XW9+x1'#چ1i! ΠWvhF57+?U#|6D2&/ u24RI\^v? Ϙ{g%'m2Owr#o>E4<(l4- - M15XGp}c;ۢ5/q1A!w3?^,6 X1zYjCa,{n"M5^;g1 Rl"MfYqr?m<-#s 0eO"s :rw{}A:gݴ`>\ʯT##]`.9eu9nddpZDTm|yÖt7<,O@WMdlP_{ہkTVD176Yf^eåJ<2o\[_rwΏi΅y֚yg2ΉMX> LIͭA_}6*CT{זS@H⌘D3ɻ̼lKDqJS9$q_$Ll=BE;x뫅.KG/i|qd'dhލ ƵrWq&<`Qʾox+qZQR#s2hEc_tbұn?Xl#-fE0Lou4 VIjV'aXH(.Ú,MSc#- - &&s玙x++kͿ߫RINzVRLő,,lL+ײEFG_$C3gH=JQ#.pK2!Jv[]yJ4l^UOТdž٩_|axѬ/|Z-\KX X#wX'q&'J8&Ò3/?[zw,)T[OЛ 3 ٜ;oci `whk8N+l?biSmghbk橝+SP_Ƭ/ Ϲ>RT#{ 6T_ TnZ}0s/I۟UT.fa?2awdƞ+h]4@ lup59!Y/ƟaQ> 3ق]-OJ&hP$JWm6Ɨ5pt?C1OvI斩%Yxz X]-pf8/c m >Bj8*aO2Ffyy;d:z5xduh0{qva`5:mt?w8L$<ǘ(7fg6#gL1M<(|̫G?~Q%ޡnk3:7/930a_FJav9 >KSq[UnP?Sn4e|wQ/9jzxy 5;G%wy/5WG뱵,uGL7i9P[ TKu6ygbJGYȔcͽmk"!.L`f`O'cf<^(]UiBu0ɥ!#HmgklOƕaMK뷖UVX~3AK\ !Z (!#[^ŏ1OZzx@i>R sE+vu?˽un<흷 VVd k-;NI"w1.,Bk 2@" O#Y\G*IΎ [%Q!<$P<}%6\$5jZ:q ؟h5H}|yӛy^n)Bp!?}K%U7kaw@ӊ"XV9;U}:P4!_PDZ?YCW;Z[w"8M>F)g/Y(7O ˜[vh"o-o2oy遵ie*@=mwvKJTVq>LsIg+t5 ȚW 6p8tAZ{Fhcs *DYkzV!6mqcJdۻδX CGhzD齙Gs !v6e)Lm&ȢĎK0uj A5FM/~P`(ocѫ/G,&Oe"͵ ۮtz4˲Wޓϰ~:L7Wp{~~Քǰ A_YilP6E\[+/ugZp ]M/QBݙu wo {cCveW;1_ca)aIaazZ1> }zm=+:SO4qBY_ f7IBOs꟟n-0 ajTqvx']'4ޤ[VtZR^~V]=oQƙ~cVibׂJɢ}\ /EwlZxN[{d& Nf譍h4p(gDݰ'}w |8 kFqr1~+;E@?{|c1gD,=fE a;92cw(XTF=H@ 8XZY1 {KiMz ~ę؄kg]ĭNF j1e҅՗[=zAX^4΍M]=C/Rd}DÌbMFnF\Ӯ|MΒNII)D1DgD'kg57^jKwFjxLoUU pJuZ|mNvdĨv٩BV5D1*aj: 42y=:x:Ŝ*U\2 #Cm"RG~,HU}jy CkvBvBBֲBցBBƙB:V1膲QI}g(XïMKԌJ 73 I6)MnUR̟;!=$ SLQ3pXvO5twkh s.m[ k/)J~oJ}O>ڒ Qk٫LS`nvIb5CGM=c5;?G|=mF$XWo,@@sP;NsG|X̑ S//X9CuGxdίĿȰw*Wܬ_jݽut{`IxNw34o1FC65j~תJ (muۧjI{X[n .l e kk_|"MҺy~zO})Vw~0qVe1v-F== 64#ahHt`A  dJap_A6l vΊggܞJ{ܗ'obݮk(8𣶱wyScf3d[z_XJ"a3 29l,d)7&AYBF@xdsjEalqާ ӿJ%:y'Yg2W70ԛ8 o^gO+Y]ykY>a eV۬B[RkDK%򶥳2;b sB<찪W7]o4j${X&[[h9>~#3eÛY iQ"֍^yGXf_@_u f( ȯf! KF$alu}"}&j勴~|7>z{uf+zlZkEON;څ;(c;PZ־\):&aH Dݓۇ k\d8\ÑSom/n^#=>RuvGqO48\Wz2S4r$aP$}&}GSToڬ]ء(9YcZ=mVV/R/ȾɓCt1QL\%^ǓaU4 b ωN O19g*y8Z豎﹉ 醙M>yv g9?Ǥm]~m۶D+!.'&G~h=Eԍ'-bOSm%렞bI9R<{פu]`wndyH҉J yiyU]޸?=lw2acuZ*aaF7G5Gǩd'G9<1zsO_lO]!cIN)!4{ K! )0"{;nˣ5>c[EX{'UF908%5k UDgeWNI*(kP4kW%S_#VPAO~cĚAx5U~3T xLXdvZgY}u[3'MwcěeȶO"5ih7FVqx%Ef(7Qħx *BR|~342 hERZd9-ZCgd_9 F ~ )I 6܍Z5ܺ3}UaY`WKڒ'iʂ/rAWqqPlHP^-BSNR5']q8'Px+^~Nj}BxD_3b΋j}xGQ<Î ĀK]Xs33CҨ8igWqҨRK^xUhʲ_rª8-hUj7 qt3(UκN-Inm5䣰>o8l31c,hn)My j.k Y.[λtNqINPvYowDO<* ڢZ/)Ԡ?\LWBw"&XλǗjs]EJSN2u)H$ B۞9{98E릙GdV+fObbxV'b4ܨXMAxXIJLexcpcPQTrjHgU@ID~|VjJԺ_ͪ}"N/<_Dqu6}?Vr# T]ƪ){$ uN]0|8N݅A{]!qMؗ[ҵa&p@prUŬͨ4_foT󟁾.Iʻ%!EsӫT}lԋwl_)8V{k\ZOTɩAw=Lv8GE_eק:ޢ_iu܉{.3"#, Eu9tPy*wݴ uC^dTtrYɡ x*}F'ac=/;lg]COo|zIa{CfƱX% \R5w;/2."''Zo5DRnT4Uyq9-jUG 7]" )(nNpr.2T"E V,^1fr?6ɯa#1:I6)T AsSo#X3F5-U)O!':J6bROJx2Jaxګc\S#Z)VY@&K5:CǯibG1Y(O4U:~EQdޯ^B,T#3Y'Y2\<||HAH^L޷wb>J+vgWc7FV{v %"Z~;DZi K㳬g@ l@tng/3& 7y/O56Jҗ׾ȵȻ<)y>PcrޣY7Ư-6

iyrxBx+ 'pbxlozlIJ8L9nOٶ#Җ)JY| }KO 'tffF۠ݒqJ>8cۇ\."ňQd[t;۬m78`M nv;M"pE_{湗w[;d~4QZfaÉqDTB\>!M = VWIiD;pHŖHGj3h,"OAq-W:˂i%#LQkTǭ)yz& ܫԤ#;?ૌ6F~69ʥyS2Gxv< [M[-S'8_I*s }rNA wdP꟎c?ֻꄮ dTU0Z ݽOxöZ{ruÃFh'&bUf|D QN1ڥ:b5 J w[GL>E~/ 87:6Ϝ/ڌ|VލǸ:4UJ EpRj>WfeמW5ũz1m=?8L’"qrCznhk:Y],"3[Dj+I 's2*S~o%8{?$1/z1azGsFP$=WCd3Z?"Lc|UaZR_3r;#ԝ"J|YS hWn4LKu%m3دœr@,u_+#8-ުxPv Θ7)gs~4$W)P(dT+4^<cҨj4 __]y2[ySHQ5S4dun0T*yc8s`PX%{yxhsvVɖ_azrbڶ\֢tBN,K6s8O;)+l[BRaZGQ*ODszZHr'7km :~LjBTIs~VQhKC Õ@dRFD3eM?QܣW̑PD"*c*,~"\LZ->WedE.w_pBh@j>j 9:7 fTb`_0&l>kQi"QIz c:Xf ` Fb?}!wן~nb~+6Xj z#+&њcp ?VH6#}8n[n?G)Cb"x=k EdC#LD)۷n0d{u5gPiaihQg~Fͮ0f=%dCWk$Iۆ=+5R*N+?mݡZ0DܰȞ:oo5ݯY3^KU򤡜#T.q1 T-,`^3 YMU/؋EE3s-Y6E_xjU:\VܑvKA is0D/b+]YE#1M~LsުVnW)hP(TO#OJTYLPNlWȐ.d釨$C8vʞ2Xm}B4[V_]-!jY?bm٢Z?I1G12Tesg]]$OdZJv\aXE6y apμDڑl8ZI<樂kZ,y^C WpΛil@3%78W݂'Ŏ뎥ӂH˽c93R1KꑛaAG]:1&1B>2ٴ7WY zaё0k\?I<{ī㔳_#c%:aۖg'Rv"mEE}t,1vw+ aڇ٬ͩՏqwu'UAFanQ:ck+˟_N :翏ù52*DZټ3U m,MK2jQuu#v)&5'('v$Ԩ%iħhEOvU S|CU=4_>Lν]~ZxsOEYd`xNXKHShPK***Ek̗Tk=l :A@ H^Wb+5f%>)@P42=U(]0]6f~ aZq> 2E9b?i5#4FV$ѽ\Fx#ic[}e#.JI.OgτWIF~5 7R "r4΋[[n<ᐝ#9n:bxA}9cSn]/D [#=Ïz4A? * I0mj |㷼Vb.>:DyJT|ػZ btޥH9 G&4#Qw mjOٓ%24 +G'gI] b!h[ui׊eɐ$^=ӹρ{ gs,% zX'v#p^|@u=}YisZ^$\xrpU.6Wh6Ŝ{7֞>lCZO_ѵb4:5_6ė\gU''Bk ٗ58JnwPG!̈)%AѱY͞[r ! w29IM3Fx3A>q1T|cepCСك =lqEr#*@a/k>v-tpJiB$^W',?I' ri{^aCzU}W_ӨK5j1c {x%zs Gޚ-rk3 5bN |>^m:Pasәti$DŽ4_ǜyެ,\%Yyď_wQU}g:QˣpcGc  h~YݖskK`_; ]߆pB!~y2}/ ;%[S¥v.J7l,8^0}KcoRrp1?Q1 sֈzP߫9 jZbX.~zo 'Dt0 +iA<~L$|Z|d~-t9mFma)~I>ayjgL0Eg;,fIsifoe`f?f='WlX<="/,VJ(s_NZW,ղ;rVGroT440t W)4; G{ɏzpޗԋ; s%5Exڋ;CRتZxnԱ]Ԁ4c/z ;6X׺n(ew*Uu]?s_gTƚV=]>~ D{(fFߖIއ-9]D~ SD}TVcXtseݎKؤ^^TK)`|ɇw ߖ':I8sx4IdwX{]nHtLЭt>p(dm@W[q =S{~:$k{@猥kRt n>>ޠ`JXUVvLmo9sThM_x[5zN%  c__E6m\,?`|J=1r-%\]_ƈ2c}C07,֌ᇬabh>]1Kdv\=}6|N uS$Ot]-ꕗ'2FYrwu~kr˭y;'|^G.@[C@i ANRhWga-,=M4e]Nq>Mմ^.]Kg+ 3xlp1x‡9O[Mz&)hqjuiE`Bv*t?fRi}e0~aqj07)Ml`^J}H}KC3EE"GomHCy+[;F%3ѿƬ77G7zw‰R_kVtTNW]=uO7oiBtCezbC-yaNz*:Qȧ+]&JHG҂[ڊ/0҉ sej A<RNem>[p  "H.ɆJGhM莇iDD3e.Ģ1.(K-O,wkH³Mn)N V:Rw7\f1يm e?H~gsWBd?Ǿ0BKbk_!, E?ud|jxb1NXSʧ,)h0xt]QB@|`ߠ!K s35FXFidpNGL' c;WoG7wW7g7{o7TņTa ahƫŏÓJIʼnW95$3m||,*}M'|L}}}l|˒DҾdf?^!U`4dvf(ø\8AMC'kR+F"sxo--Re8B~xH\3'VSX_#)g-^k٢E3+:x\?@4O)4FW8F*KF=I.f 8 `>%emKZ7n ttrq1V UOm[U/gHb4%qcm_IdEn+{`E\ۿ rYym}‘ҎK+ΘRlOf-P ><${@0X*Q.7fu ںVhp0J [M@wn]0c9 c^ӝ/}<-Y.?Pݚ-rk[hc@ s>~c3q.b RX+/%:%ᡙ/jo#KU7 #3,D9a`C? %aH쾳u jW&7>o6 Qڇw0 aCoLƕ'ey˝JH׳&]C2 EvRGzwko徨Ir ,0ʚ #MdK^n$ԎeB|&ËdW< U{ R {Vsdë7+=w:$;:.tKEZ;h5'Sy^j ]*%3dq8r qLQyΕx~d)9!XEf'aU+Om۹|(k06_oIMr@!iށp?Ѳ"AǓy>kA``v;#Oۧ<}F5G|n1NUSaj8E]=6}I`?SK[JB nzH|PQ,;E'g]%WN7E&?E&0E0EF>Eĸ\xWWf鼻EK:W"ֵrkt32Pd3HXIk$@ys^ìy&t՜ǡ<Ȯ+@0x X]i Ap,!WW7_l,^揊@y>2×\{4OJW=/]LlGF ޠ)UxaaXvMLudEKem> Ɖ Iڝφ>AsĂzƗb9?:nDiv-QGO}~m{|\xC5=8(9>|R0"3#]<+\=۴1H_D6rA+ )ٝZiYOyB\yswE[ cym6PKo+Du.Nn0oKCc\bs#eNoPfŐotf}&\[*Sd5_)Y[;eg mO#c?d:Q} Fиa)䱿AƎ.&݁f9с>^vQ:YɲY~})"$Ҽ/Af+bzSȌei.Ęo*p5O ֭0ŷ):d8)ظ89XxeG!yì,#,,,U,(簚 xN+Wji[8b߹It[boej^:U)G*]#t3%|+UnO2hB1!N)e nQ}OgzqMd\z*%Hd4~~ Mc zXVzv~)\$a+3ox&h26.IT!}oǏ?@aa.^=Z)Q<$SDشmx©:]+?z|c2L&ZBg^kY)[Qd=Rw9Q:yv! qȞ^T>M;^ΰ8׌>StɠGQ:=һB{*'rW$BA cf䖦udX>z/RI&j>Ji:J49Hv]HAx5I0|]yy g)mO6^L1ƵߘJf: b0R-3\$}\ ܉vj9Jl׵lKl(khYLnO(zLT<3K'6:T:x?uVap{a5IUuS-@;){\w}{_=i Ez[5ڒyLPKp\an?%i_[iIퟣDUS<j_7αEmkj\EoY!f Tw+lDlke-IՌs 7y[hpz5HX 1 +jszd=iэ/4^ 5y ْ56'ʕdzC-'/%.)9-;(I/g ./@h?ώ,<ھ3yqU/.1RKӒ ,FESm/MibXk#kkkkk/k5kvx}jN)yLC'ԡC8KƣA+KQRܒdd:d%OطCa)!+_d8/#s4Ѩ)Zb8 0|Mzgz 7b.;A63,(6k-jJKOdN=L>s[qkz2s:{($}e򃶽<#U6#_c,jZQUGyPŗroommCI Z[zJ#3`e VLa|nrfFhekOےy=`zzWq_A4k2O JgD?D qR)l !,+ Ё7ϟA R@ H:c-C6s}PDi&_ȝEm6  x"yO]ъmQ~m8g:S39<-=.=J=G9l)N#Ik[3#{ ƨVW w(Xs.îѦP@r9AsM^=91/}Q*ҙswϟm}`;7OWN݀K3Kc:xsD#L5SuM3c};-s6%³g')>^f|Sed)7 '~72Cؼ`˻FͥoΆ%Z riK!3#P |b U1N3=`yӢ0Q97OV&_l=M8Wp(Tտ Gچɲ`g$}5ʋ=gt-oFsSoJ\b63BQ~UsD0 3A .yK@"PE@ P2Z쒷挽!bEKk8AeȀ~t "#G%D7TZt#_~޳^w@uq%y)vBn8cF+_Ʈa9"g);CdJF]lKR*3 AգX:;#cטSXgwOD?aޯ6M}[mVb+`/(aSh!~*nT^bцk,C0Eu"u\k.Q2PU -Djˑ]䁆q][9XA@A|Զnl:弞~H4~Gyf|ã$P{ ͼY?7[m$GpE3 9a\X'opqœ=l4F)N{g8'8VaX[X 3Z["o>f,{ [)d>yo0[o 52FHmwoɾgllׯ_;::l@ 222>ŕyɮIʄ41Xe,BPNh,:U|'Gp)n5-K4Jwkh.!Ucib8o[*'jT%:K%36b>>(%?X0]7UF֮ο.UX1+Xi91!h.[C:N茤+4M8 8Zw{7jUE-H.W!ɔR1=;z sohhK꯺m3xϢy$ I|](UhE=E+MVV \ vP50 MEµ;Moye9)osoG=?[؛X`5 U[iIY݀ycE %[7`x)TR}e\HBqǚ*L\U_{;X+j󋭪N^`\':ˀ9臒!aW z`/hփ̍ S o3 DeHV>eȚušp?M F%اGi }mO\\m "Vy㾭b=ޣuo٣Be3=JUjXh`E MYluI܅nZfƪjnv!3zҍ!?hw¿Vizݑ3wo. *kcmdoZ_> g ʵvK_3r7eɦUxjuHLk/Fڧlm@qdY53=@E薛Oww;6l(7 |Հ ` E.2W( ٢̆#|ymt%n"j̟S]iԨ0us6 PcP5#KyR>\xXWNq͓Un%|FNq 1{qq@YwƖJ,Rfvy&וł mM3π?&&&׻pQWWϟzzziš/ZAMF=`C?ex<}7ӣEZ8 ELv4hDJH/O)T/n43L:>nCjmJ )D70^jg*.6 2 >%aHKUPnTmR wڰ8IrfȀԬG\MmoRnLv.)IQnd4If6r ~Z}^8]ٛ~>8f|vHWw͚NS D:58zG(%ˈTC^ 8z^l[Єu|z|tgʝ.;\\(YǗY-R\"טk88o!_,TcnehU_̞^(F\X4Xt H};a%SJ9}0rمΆ<(@(oWlT%=-eumW2m2uoJO$= %0q%kFG8@%ɡ-K.7 9n:ȼ e\j uD)vx*N'uTH#R<8w}W u3%lxO9*M04RA<@5k5Au.m5w?Z;˃*Mba9pmSk-S[#Tfl[c9c_ oXYWuEorMu`tKVJ>;dg`kg%'_&F?~A P/T5?])21|~~)7J7ƭ!-o~tF|Rr炥6"ak䯞(_l\4a ; ?֎+ A)e5~~Fh >h7#h::hj4G'{ֵǵuunwϿ'FEʮx4(”JaWVwe83٣;w5!݅n8Fl>Yy9q܆ـf. ghzvEEUفI%L4wiFC w3OS\GTTGw6?=ŝSr$+Z{.)4sM&8Btێmތu&:=05]h :rppK>S)o{/D:ɖkq){L~MsO4 d~1UA^dnTYRZ_24ŠzM){y⹼I௃g[H4s#ZL; \-%BȚ.1@fe0 4+;qHpCydK%=AcG|2-`9p?WdZÝzC*_@ ( ,C`rjj QK8Od9{v0h"|yfxɴޙw"y/PNRWILM$Ejdl5y^絮uMgΝ;xxx888JllڿԠA(d4t]8IyOC_ױvqNH>epI@J%v| z}zji!qfU>c;bgB릊c,͕󇟄؏? S|1Tod}ý xiKɧ**wi!B }-Nv.W^ƾ3CP?XT.^R!P1SbiUWpQvTR('WãwOhs|+v>AbY5 e{\q[ k=|YeGqՎOekkכ $-*Ub.}(h.Uq'_>Wt>,|݌XHkMQ3Y7Oo<l3e8-Jw~.#I[ی7AyGn̉ q5Ε!CRqk9؇dIֹq z^ ; {u?!-sw ̀;Me*wR7Cs9X1N4>MuXvsWD!4q]9WphdӀmjXg͇񪧅]?T6¸J튝5KM\XC)SO˰kqMm;UuYfI0trABg Ur/OB$NS٭bcﯢ0e8I֦s 4NuQ- s[zdJN\#Z>Sl{J/3z[Ug~}C}>Gمm8d-;ʹLBIƂrQR8j_y8ìm<ͳĻ}`Ļ 9|b$3>C2.q{ 1]=7plξ]򘱬l})iCQ(Bn&A!C$@ WR_~oMw[oU_^R`XQjPHnE30ym6Tw@Wf%Qg>jAznV: ˤ5\cXae.  @ia]Zȿr Ÿ`^ab>i;l.=޻z' E-ֳkK* ,:ͦlM.=e+>k@Y/$rtU 4w2p> =B$-;XWGTyVZW:Tt%Ml6rȏSDE9ttMyk],///++SQQɓgKukS {8GKo[0t3AEeZkN>tP(z!e#5=C>ߟT-ZcO\ Ɛ=/9C{ }sZښQ&~Ffβ! &L9_ڛ֋fjo؟\خ8(%%VdK\%h[]=,"& ]k,r}t"%4xnrɂg[~Z`hj7h?NXm*ÄNNwMUɍ㨪{6G?إ>g~xtitpcD;Ç?jxaЪk$#C50%^I'2ɠD:( ;(X/UWW1E N0AeOXGJߵBG/2%Mj[oeb߭; z41Rg^{V3QcʪͺǨEh^xu|\w>uanQyUn-.Lx[8?>m[YTeۅYʱT i-H&]8Q)SU%QWNW(W ck1X]+AMd xN313/ XVﰷG 44W#tRIeo}ܿvLtF<|2 >Ϙ3t[l>U>3^ X(.397bs RY8Qi{| .}DLͪ&T#;#r^@&[6?U D+*FvX1o [(1[й@w/@i {'VJ1 >6Jwyiuzk`#&⛛ ݑ Pch`@M1]{du4UqvH{xT==K: a`e:^ǵ]2AoCXɸ4XsxzY E?ʄRTϊg,Z SvfwK}:bl\[xpk'\ 2Id(Pr6L=ojm&>܋w{Vsٌh#,.2yv/µܮaxV6uO0QX97ʑM jB%׋%{jPws2d }t֮sv+Qh; 0!ZӸ 18wq@v>MXn,< .5gz@ <0L} Z`7Oqvnm©ç4(& 77Vaxkn̟a onNjPسq೓o}Bt_Bj.(} {%_tv0urj"Xٗ]-W/w^?\R#|I_dcc bcIܷϯZc]oQ.7? ȟnt\ZOMrrreeejjj߿GWjjj #--{Su!'%,*yֺ@W2=cnO8q Gᠪ FsP>HܙW6|KET䐹G3}9Αv" ti~Цp0hأIvc4dR+\6#PH]QK|ػ[xkYd>q|4-I4CfFU̖1(vn)z;0~6O7>ؠI[9K}·nN4&_Heks21p;0;3G.0P'*5j51/9y^}\)CeMR6WDhNR,<?[|1(;N30|kTRۦUyֱʍʇT ~Us3= õ3?u0&"z DL=n[|l1)٧Yi$ *zTygWkSSY.?,ID9-ont?OٔZͷx>]ˣ4CN_~8E6 c1yMg脦*>ht?ҋ]{S?kЗ1$;1tz9cޓCoKvy'닞a\ެ;&܁>Z&>Y![%\}4loRGZz g!`Ϗfiκ9t-0 r@`쥂ݙmr1чU^afx;װMP0V֨jP [SjcI,`77ߴ=nM!@J(稘fh7tusRT}M⁼璅`X]6KnX/Ia}!Ey6ѦF^6" 6pIܡT,-<,a-^dϐ~9] =swr\prqpʳr210t.|tlbh%$9,3.8*3zv_5Te3dOV /3!E)Qc-TF|gVK-&->]1,(\+,V%P9]=Yě:N: Pr2q1TpWLiYlM=AEb$>m,ۤj5[\cۿLk]Zw%yF~NoȲuC;HZ9(;)WBAϘQ9gāΪ?xͽvÞEqh鑇ٹI#DKP-쾝k\C%63N[rŭK9B(8tuKޭ?HGϓ7ͼZgEԋ̌Od֪? NT uLVSMfSMFQMzQMRQ4z׷ciKתuOsy pS$Z8{\4gT/ _/cզ ZR&d7twu+JxfC_LŽ猄XlCW5rۊ@OlnA]5dzU+Yy S%.XkξnO$Rn}kЅGՃ, gȟ ǂŇ?{6hgbބ,?yUww`{ RDZ=#n=|S_xWr%A()͂?uG6L fse"tľ"lDXC,6cpl뿭&7ϗ75e6mlz dxe`?X[#96A;sHw9 `Gی`;EFٕ$KW`$B{q^nG 5Qo-"{? {o\$\.cz14w(q[ֳO)7а{ 092kyg蚦~+֏kGMa}5Hq4C` @ J<ƿyBx:kUt [w%} #>AWC Yx׿M>_] "sw#7B5&'&ጟQAD7.huAk]Qvk).x~?\[Y4c1nǯ&FiSbPc%N{ЍtMIQ^MUYYI_0B5WWW,,F6׺ֵk': ڡM픨JPx> TA;H?ԥtĜy"g-DIm]tmt3?Ke9'۟"]d{ 1E#1mY2$0>9[^/ɠK>D/?k+ihRHu,(gw/1L{k7qGP:97&oRߌPeJWQH %CGID:Z/Ǚaظqᑏ=$҉2UPv2Nd B 6J<}]yg Q̕Ovssn֤HK1wi.#yB5 *Ɍtɜ VF*`9 ǀ 2ql- e3ǩz`T[S$%<Xsrgv3G+k38ܽ{۵wZ{c)k\ v`4yί !jq20wKnwϑ_x5_|-M {Xxfy%]ȁ", $f%F' {xK7}B%6.#ԟ*el1 6乮▾>a 1IFu\ QYw_60OoɖG _ep_ NcLIuS~oul>h\&g;Z>[ileu[؊n}J~-k_';?NWlR8 9 =`={}5te,o쫯3g*/=[Ab/bMb!zՊv[_MR,gsu@JюXsu별%m*ѵGۋ/QWuTs3K ;Kɕ>'{si47Jo#՗ߋ.y#U7,";Y\[TklMByGWҹe=Y9Z',G 0›~** 865y{G˹xnyZ׺&<wwѷX7H2Ѕ=!*fhCvz^W;8@̾捉RwtUKT1}fuZ-۽ݪ1uJiFa?Vx7ˡ>7Zd/L1XUcלeM=S8\PAVµCI)SmʜrF*6SuPv!YP>.nځ#o'q!6/ll` XO(C$R T˕E̕|)yij)"xEU([lzbW<^k-P'XkL϶ EW(ݲšAs4LͲ@?y\2ri|bvsc3[>D }45,h-%e1p0Yޙ+"X ] Y3Xu^I@ Aq^l+?o?C^1uӲ1 344t6)v%6fIrLp yۂ 畛ܞ{& r+Y" 7#z5)NlFͺNa ̫YOjC;jjEkձLndAۂ.t}fNK*(&X_)0_uOXuF~;kՇ* |Da+" WrHg)fˡܩAWhdZܽX{ r{{JfEWزj /P9nq̛: T֨$574#6z>m;w;6XRX-]$|Fi tɸiD~:'{>Y~à ?XV%]{$.{Ї=~wyeOCyXYw>{;CB7MU?rhspPE8~|ꓚES%:`$Kd9ff~l-EKsl:]d܊%ܲ(%&q>l(Ij%jkb0**OsqʔHTSe,;΀HcCvdIkDCQ̥c3 PGa{z_Ct-6"6r2IWjNzɵԟJv:̓ME= '_FdsCc3 hJsDs!M!|ym#mWtƥ3 Fz,Of8̘þo2E֫'sцRf=o'Z_N}‘4/ڨSXgD.32$7H*WyCr -˷{7hvN"i߃}xedyr_E !,WolpqڃF9MyoA bppp;>UMk<J!aqbr!xKy4lsF.%4@Od XgN8)N]bOܑu@dd>Wdn?FW^.=Xg[E6=NkG# V^it2o,M-*û8Kh+N9h;U8gܺ\|w'[zd- G*j=9}{~s%0fpb Ỵ>r\&&]D{GCgW%b`*ntDYnk ~f'!Vh-PF)퇭E6}ιGQ/I*n=+-<-+፟SUkJ>Mx!E[7PAX_QIW#yP&]矺OhXJy2vDbvt]-\.e糝qW}>mp_/._W_3tXu0Z[3ʂ~>8cF5Ёm`;X<-,5_?Ts\>趠Aek 9Wt q:SjteMG̢FbJbJbJJO}Qe_arLeWIOc%H vlOW:w¹=utS?2#ݏMMPW6H/Qܕ\!E|ߕc)mu8[qo֌Hߩ텣U*a6 "ϼR+!+ZR2%\ׂaށiOe)ߺ3?=/s^QpM{cU3GЗ(,i+B$P*zN6L.WGU@7U1j>qY2M*^l{p|!UAb0!lJ)`G}Rb'lYnn"7C&Q!O*?F$$7/W`pXDLf$ SG`GXye!`K84.݀Wi %lU]%{Pyű$5AK:PO=^sw0><\'y;MwڵɃ\)l-ӴLw5p3W ^5]d2̶SOf̻&B`jV{R?=aTe:\f`7aP/]*U.Q)֐-[Ubffl[`R)ۗYI2~毎b1eYfvsq;1[wcO%%e&=uk< ԁ .MH2wCۦ2Gš-q6=c/@UT8/S/rxΊ//Q_[jVي2~gT w֍~\C|< GL#Osv~ׯ Bw6GVsn1z)^l߽9dd${uv =EI:rV<Ɇ v6)[UʔgHVe+7v[ {gUuC=nNIWtL*kdAEP7xɱt,ќ(}T3sGa0PQ>FfY}@c0@.`KA koH#Yw;(qAadEvا9=O.T /XD4V1w'gɮHBo-Ț DPޗ"]; 5l(x쀲霹+yzzifB7eo\a E8 lX). T22X0&@0P f`<{k`3\z~ꉠtx&W]'^ r @MWA #@?Љ4c`b`0`݇ ԝyl -?YYQ IUž>ӑgjl zg~ӪY+,30#JB=Bl.XF9Dw].(P}!v C +P 79al9r\юPP=T}@kQ lS/Ż/wnb`ca~J.gή>qA |cj{oG5$$HD @5> .3TpSUǩZ޻^_ZI /eooNLNJ4G1A8PpBk#ol+6]-8Oz})% H< Rv@C!.Yo`bZ?.*lŎ@?g?x/ɒExQMKT Byhqg5>o0U L/ ey+8ݶ;ǷZpyR i6?*$#<j#4xEiu{KԸ%ص|G/CCtP#Ï;a{ߘyMܘy>W\=fJ;Zn%)#.5NôBtlO/"&[ LWp@#;xIlr,\}2kIlɏ]a^ǒE/5V'jSjڬ֩ѧ96krnatQ^(RWd'F eD9Bm {XzZwNP#F_nN.N{^,Aym l#F^tCöAY=b N8]<䊌~\/I]TKTQTBP|v2pΠZRaU8A-9{0Q8`fczYk!Db3\~f{e֌Amv@Y% Vorg^U^2A89oX{醣Rser~i8(C7.j1:mȮL{CxKijqd~= MP<Ak0z r%#'4ulQͨ);ğ5#R$оibbgV] ] `N|}-@#4@@;ݭAe̩ЇmbU6Jyj >ŮBT6/3$MQ3}H tv3Wiq(nr!dW$3`I:cNgղ֟C Kƺ qv2N -W5TUDT>i~=`J3Σ݁*11ʈh0]d酻㒭ۄOqHNLJJtNH;Ktp=gOv7 u m1IbZ#R8^#%hl`()̚ 7ldh㩫 4)QϝMN͘[Ur7d@,S)MUD.!Y1vɫ4B;5IG$VrWFQ\W+`\byh[dU3t#_Ds4m֝ '~6 /Ï_hSJ6%:Kut9\X;~)R\ޙFq4P̯k$[b|KSL"9ꞕ?҃cr BCpxnJɾLRFqɅ՛!h@_?+POpi50ЊPKubJ!k%\,_r[x]ˑt,46!CՒ\±^3&GF^W&(Sf`v3t@YxꬄO& sW.&i,kgFhx{:9E'%ɕ36Mbj^[|pDBd]]G)vuS9Uug/:ML!%:ò5zRrߧ71]0v *OP Su̳Wo.ƶiI\2X!ڟ$'8g6H 0c ;d2,?9y6fkLlXu69J rf~ {+w%GP|t|Vzv]uwB[pd>"tzhO.\1-Q%1ֺ%hX7kKGx[y{exVzty3oZlPnQ}OZdMSr|GVbizC48'q[5K0"!! џ;QOt O4L(U)j>3/d `ṬwTa*A9/oxQK$O])^XURc}L[ːW {ODnҍM/u orRn߹~*;t- A/uTiX$N3 e}%zIOk {r=m[BWQR=SUtLozDʍ٫g+{;'{=ˢ80o}-ScDlg眈'w)߻O7pw>Ñ=;ptiㇼqq̇. %]d384"}mM\:*þw!h A(.>T>~jxSM اe82E5bhz9yA,ϓǪkc9nrυETOX[ w1L=~xl]l⣻g/1^\B^^@sM91=]7p7 o<ekO&?W.D9Z^kϱ^F>,Ч4H#I8uX&rYa^17m k8 {vc/O5::1NBT]^ ЎPN, Gm[\h\)psOЇ^қbrckZm}mm<@ @;ݽHoaݗ 7-ю^N53T/ZINo,AN>N.6aE$ge(L[W#HLOi7M`qO PͯKAoMsEч*·:G61 )ZcYKR!'ZƎ63.>=>VNރFc&f n[§_/k6^/S6O|o] VF❨2;U)hiyZ3$Iy}VN*@J{hRy5Kcwm; W=#?Auf|it3M0T3z1*e0|N&"[0xO]L#y 򰛙 rξ~󤕀=KhMYr8]6GI\ XKEc@ݠp84tɆߵY<%LP)E:Ayu}Td*J"L"}_"cS"sY"wE`UxW_Cs)5ݼoMEvn~ʶNrw6]= ߍ㪫x=' oZ;e@@A@db\O> 4\5KM- 22rQwvN*bngf 8+w7Ga޹ֽx:g1퀻vĭhRhz|7`@k1Q'싴nv0l5s4XUEl:*f{Ur$W n:hsVOeSuIIU 7[6։>VN.>\g";}p{~EC)w֙HEW}I|ۥI'~N ͠c]]uq&֬7s!ҟ+^ b'guw @ÿe>Ox̔y M-<<5C<$y{ :tjuo9peS ;R<ujf\$Yoy^-vv~`-oIG?=?3X^o 9yw6[pd};tul!jvf>y߯~"K$WtLLhGթ+e+Gjw{ ZN+zYiJi[TVŪWFVUZT' V:zGg5XPYYX!b)}S#UOJJJJJ;JWʘo5sUQ[ti:G~-SBuA0ٯU4:W7#Ĺ6[=wFie4ۮwɕa&^ &iͯf0ѫ:$`dK6x;`_c:UͫJy,i7?oooDo$r &N-۽uP7JDcG y~RXT* t|$+sʌi/<>HCWo JU"-P.^FJy'9akv"9l#M]Ovn^tG4 j8D-OFɘ)zge㠖Sm A<}HҰ͖&h)d.f(k W,` Hq~¼C3,\Pڮ0po֯ssvrt 7s}#Pa5PqMi_^dm!*^V@ASNzjslV/R΍;{Y&_Usk{HO'ȭ)(EiC}N^_L:B_›9&FQe-Z4sWlS9O*&D L1ov0])X*w~Kj|nkק$~>-;:Nx39ŔAbPy6-FY/IA?n#ߥ@Hg|MU.ܫDb=_1(܁-1_륬{3V.fBgwvqKMcnf+[Ttٱ n=*2Qчk;xK3K$sS3s3$YY¹UƲ#MVX3awvnŅܓ*+vh_+׿BHM*u4XdWWL F/ Ѳ6ڥ^lN|0֠Br{{nn/V󤑀v}Jȓo pY1Rq77^VS9k .4Q@ uLf(gδfGͬ HsyrXJΘoApLƗ*6" ^"+!NYzCmu"j];^`R6;;E{8O{V[@췉iiiҍft uCY;`5|5F^esz𒶁xH]yOopVAik5)iOQ ps wM(uhuYn5 c= Prj3wiMKJQ=#GMЦnlI?}3{Uo 3$}U\~'sc}nݗDIu'jb̭ `ETUo&zfWqWΟ M;C/Эnu2tP;A$ڋ^M'Ž݄wpF^LļeST @woy_K]/1S'<ϰn^qVP{i }CSH:Ry@$ &%Ah"2rYr#r`͸H89}$z^8&.! *I+h#Fu%u(V>fms KzH\x=.R"@>@)_+O}}-y%$oC ,}m ]=ݝ'Rnok1ŷv:վ'LEeȦ{77pÍygVa֎eZd v?#R%CWlkUg!р,pDiW@~9׭_|{~-l~h1ZwR*]VwŲV$#M{HA~?}yxxBN[s--zd!s{ Ie9"B嫈uDzB9XK 2xp^MoprX*4@#[l&dՓ/d/H5mJ}ͦܓ% JC͜-ƥo#344U j nimA_ry:Deîwk~@>v4F4-$MnQ/w{ha5o8ek s5207pT5@Y XհpϹyyyݡ}ҦL;y}Y/QDmǛ[Y8[kX+/U#ϯ#eS5Mܫe҈d)'qP7=h%ŝCIkM_g#]9li,̿VDeUKL]G/I;?tGb"FIJ9oۈgωejPkxZHLukʤLޜPϪe<9"}2Qɝ}Côp;KwN7<~rubxÃ.|HbvVH$Qa ls*jF=8N7A1<[xԭÂ;_G'iև rqWILIlƭh(6 'sqjra}dp~&{ Znkۙ.3׳0wQ'!皁Ǻ+w PooaOB+1o93< ~;buh~obzv ^d=Kc'̲;H&V-y1M~K.gZ$wҹt܉BҚLY;OW m5mkp;M:TuS%gGj}U󭳖{8mOF2$6Eβ`[j/ƒ wN2T>įu_(XөslPq7K7UEwwVeP(3_3_K$ ¹QXwo[\z ,GqX+<%[y1tFyy=wN4rIىf"FI6'`X'3w{{X _ȟ$П .F^^^\M m9`At:_33=v|qS2fsai5D2=n]e:>Kݴ5P,J:ZhhT,[{9'dr;q*ZgA.} NcXl 2p:ɵ0IX ~P#8W(:ksX_tLfn}ֽ|IY4u:&t#,b]JɢmE۠/VI] O\]q]6Vgϖ|_gb]k+%h4Gʗ'gĕ~Mo =ع;{rg쯂>cM +R LTKT&.%I_&&) aj ^Gϥ~( ЉSqד*iVž. _ 3c@aycm&-wP C RVEq%K ~>)WmEZY')+b2ڹ:*Z;:%&eTrV, ̈V,pP,HRJx/7^C`ӌ׾qتf\ƈdb|TZp_x0(jS<_e }<^|@ۅgNobg-=O Y x`o>!?ah8SYmgin`&h! .%x.!V8-PUY/;K>V5I%C9W19X!7Wg[;+<ë[;4?eku=,ݵNB90^LST"}:f _^^N~ޗTQ PfS!YЋӲjGDwM1 .5n=>~hn)孬$*Y!-x+kWwMKQ'e$^$<Cl>T/Son{ gw D0炾풹嘥ia{ mxva Qěy]I/DVqU>@QL0ugJ@']3Ukm]y$Uл^Q^`뢍َ2T2\qu,>\K]{}JƑ^*^1lrn#<\0J7,]#LcԬC=)J!WЬ_\(\!cjė$wDs ʅr57B.C4GNcX,}+$Ǧ]iV$T_[W3Uʍ,E&xlf-JNیKg|~nP& Cm$Zr'T]U̱fK(+ *]a)PHqϪ 3jmeZ>1J ^J}T`l X?^ *n. }֢SeV-[(PҬma0/>iC̉3'ͻ_sڴâC -|L ~B6K-y~p"ҼudL ϣdx?3@9>pw<^I8uadHn3åhW^ W֌X \o.L7#Vƕs@ݴ ŪѾKw,ʑ+i^~{< AܫOW!ΞOUE-1F4?O&KQ'%Vie"C W@򏖑}M #Iz?t0[{|,c.He(f(ikyӽD ;!ϐ(&^M8Pْ o]+~8Z\$>\!f⩈-/u(6ӨޡWC!OaPr`yRwIġj΄H}ӷtEaz!"aŢbybe9}1SʵfOmbE@+ |3,㓥ԛ'}mA[}O ~!lל%w Ӳl=J%Əŭ`Ɯ2t熤N5Pld@?U.B!E*$cmܠͧ9k+fa=FR2*ZOZwȻJ6Ɲx`DwHnZgzq˴Y$RdWvS/Djq.sDAPM$n,<DXWnl-⍏vk*֧-.(ŔilTW6, P4p}Hl"r5dʧ)v9 jW!x}XɆ\U)p 00@WC:0,a⎣R>.B!m-v51<'pkIᴍ hYKY̦pVp6M$YJ wz>߉klAt'gɴujAѩ0@AM p %OiT̍}1A.i8Cd*\U\@s :]bUxLj* JM!O@7 u㟐E&sZoM]r5:jp;.:T]5c81IZ`"y5D٣gx{iwоA @0OlXrqIt||HL4׿S@;{?yPUmG2O^W @@A A_!hf_@߅[i&NaOnH_ׁ_@Y'R S=4,_睛't*c`v{:JܱV:*A>~ |  A:kq`m|sdvfOq#`F*[,@ iFCА 6#G8'w00VO sȾBЀ% >X=jՀ !iɺq#{#ܺ3<`VED3ޘ 7pcsYu!B @% www' 6 MrsϹ>w~=]%kS=Uo1?/ OЪ"5ۅ V VcV-Ve[yh J ÐapJzizl]$iZVפԷ5\Jܼ6PXB=)l-4 ,܈i U )mN= MUMׄ[\{6l3QM*UtGy2wxL[(T&Ӆ _Q:LJ:$g}oPwnwV8v9g5@,?+.g)kҲ} Ix!oy!]D: XoҖvq0w2) 5@U0\2U zl`MG\jc!b]V/DA?vf\?2Y[͑߾δ#A D+¬|z nyi^Z׹|ޑ vQ b9Ra ղqE.!p Iס#(&HL#ܠ5I>Φ,#Sl9, yF7!~/Ifr6VSGC<*Y}96Eu0D93D ('@ZKN̢`.m+0OƬ;LRލIu+ඪ~2sng7 )M3!r1oх=\ǟPX&UtrMu(g,|AVb𔵵U"(n{5]$DM+= CHui7{MVw4h٪MZpCCnDpenESS،VL{tnvPj>ܧ4P2wi t咱,2@[4B9L5P3dG'lU;vJ%uP.]N8J,\2X6@1P߭޼(@8;ަ[w?OeC;O!4MSlysb#=Mzy6^fb ܐPPܮIlNT50rm@ 1O0'iVp9idEf}RjSV[[xj*Z~3 tn") 'D \ mOE[X/Gsw!jՎ^#1ipu|{UxZr}u\Xqׅ7opٌ#gw|Rj]aݍ:o}7<(3it_zSqU}9kOy[W ܭ5Z~{FDRI_:%8M8l]ݤl3 $"L_O!M^=)YOE#Ue@?'R<. "[(yKgC6ζ)>4KҮ략TW3tQuH^z{`ѷ6՞_+!bVI0 ~pc?m|7!?T£)H[Tw"ՏTN䎒x>BHfsy |Se@GugFcNwCMubZI'G8V/=n '݅eʆ\4̎e]7`XF"Ñj)}y R[hH|$4]K' LS;I`nQ] R5PPh`[Ri2en1VjsB ?6Lh`t?y&,Ի,'XO66wlp};'bSC^ۄyU{z{h&tlĀVO3B~Q;y4g}J \5K3چzq:7?G;_KP n*c\=XF|DuR`?U偬nO?r.rᏩ(%@ w:?^~*Fe %A0P4p-~+mЌC(:.\ow8;WQkԅxD~ WpQ-nV<ݢjgJj}}x-?U@@v8K&_ 9/B_![N7hI 4r֫n°O'uG:@=]C՘ W񗊖PwJqoH~ * a#G^~ t9 эntC<XǸzv4(w+>v}m_i?lf[:'E%[1qWk]pP`em;~:qۃ/r|׳j8W&z*Dn<”VVVV򥧎\xP`x^VǬ^qm*K:AW\gw&.SO/4)l&[^i#hO90׷n;djP3,篇u8eI6LX[%~m|zic1g9hԮ"H^^iqsК vNLV MFR\*mwР#[Vn`Iޮ428H@-<)bU72Tq?E8Fܿ`]/O?|o]Ύ TCnCV陲DY9RPckwWU Rvh}>A6n(l|ۨMIBˋ&!i7:£[ 65آ bø|{iҠSZ,,S0YQ1oy$~݁6w0F:O$Kz'M~9Iu&s"gAb`p1B81۫^4X#3ھ9tP;~F)yM.@2.s%y*/-vM9tWn Z&^^O\=]g{ ۔H@yWk)NȆvi6ߵmROBO-OWPqLNMw.OQG@zZٮd_N.(Rq]3Se@OH͝@9/AGnK 5cKawќ|Jqy$m)GQSj.@qP^T8"'D.+Ì- VaE[AG9}"ǹgEܗëFxaw-7;,r{Y+aPn:]t["rߔA^&na[b_x,$K3Zw=XF} ~c5̕]m&Mu7Z0[{9D+ט&XZXE7s7nf=d/A|Puf~x o.PK1Vke[yx~KKg++x}V֒V*,'2z5Q_UOST A Js©.1O7 4ױgD|q7 q4Lq^+i v*t5 I2|jvxJЌۆձ.ψQnH%>߭o&uvus6Sp1+4 vc4x}Q ԃ(i4t%#3w/?Xz-~c 84 R.M)XdF3t/"m%7cIptzr\vPV\AVrV*n2AѢCB9r f#.Uj9~o~wt@ jhNjc+խ=&bDf IWVi8kL5},}[񠣗1y^I`(<`߯8D-/wQ4\wS|yIng~$^'Z`4)'ۏDC ={JZM{.^XZ\$c,JjP (1i.QNq ^k=cAV!92a+hW PW)Q>"ߠjga7PgKe^tJl~n{Ur o9KKs[S}Glűg \h ӕSN)6.kq, ;>/MjcݗxYZ\8^ۚxJe0Ft<^CzcZ+!ۜ&7m3I:A @P3hWjR`e\9f`}hh5dY%3sF]yj7W<*1ݭ'#TN >Y_µ\Mbwc!!F7/I\8YOګQ=zJ<^1Z6O(jw9FKY6C:/+Dbr߷!*^|6Jz1J=wvkN6ja啫*"B:YO z90dmDWl[&|&s&&?NSMRM SM Q5uq%% m}vGei2Y4q]S"K9npm# 3 :"\γ_2L[1@3MsAcd<WKoڞL?H[#WK6N7,5Dc屬 ,["B (!T QTbx ČxZ^ȇ釣K͛y0iEb1hXǩaYV,ؽ#v2qt @;*bH]8CM5v)*̊6`9]劵)DM]O,$}^_i[.]`ަ<Ή1: {oՓh֓dل<ؗ4xn::ro_w n˟l|6F[z&[H.G1:t_Ӟ5˜hdtEm4W|Y`7X e=M6]3J)^hbL>oυ 4mN*WQgtݏvg~7qv= ޻bMO3v,imG4ZO?oAߌOQ5N[cnp`|thx/_p p2pzN|M0u$VsUF3G?vX㋫N6xN52B5D5GU#k`N akLҭc>"zLh.eE-_nuӹ]΁f] @##kQYt#عpwfh[R]MrMeW/YLUIpY1\*1MCʥFU7B .}!F7H\L|8Cw4)}AcI :YL9\ W4m,PD`x b]qToglnc.ޟ`Xo%8]؄j6$fi:{OS\G3fR&G('!=\~19^sar ~DWXge~C>s&6+κ[\*v0(y܍U3ל5Hf$czd~hc~}?o&'V m"~A(7+`8.pmzevq3 { g"^zWM(n."ʼn(egmS3K{)+`/ph){e&\v UkGۏ^]fkD\E0VwٳVFi~[O4B l} AW0ǏɸL(-o6oy uͶZ u߿Âݯnjʧm͵HXQj1ގ(ga/W΅CZHW+SKP^Ag 0S"eSiQ NtlO"fkU#F!a&>Z><Ť(&ȧ,-Ơ&I`6< yF7!E:jYU]}W5cafe.B6餟z[oؾs;)%I=|^%gocvn 7j,B Z"kb 6TJȚN<*7h XohGHa<}t+CDWMgMvZ,?ld(HKQ 3ut4Ve "C5v N qFhʢEB~z{DJԳMM\of8K9Z!~ #MBK ,@/?$gK_22b$_EqɱqMD~;Zuip&[ʺڃ7 z$cR)~1Xa`rD뫬A)7R~;D'h9u^[SRtZUxᩯեϡiȞˎN,N ԫ R3+=:O![Lz?c *A_w''L>[)al')L9K٥,,, ^led}mcx?r\䉓B %Ƴp5tW5"nF7 y+'"q`c[TfUž C M Uǧo؀=vWtxJ~CCk"W^&/-~.R^J0:s79ffHCw槞/ծq$/ȻCmڣ*>նr 4p-V[e̺\cMPvڱ>;f7?Z+\(Z-.H廊-98Wd|n~oCسNxp>G#ei+Ҟ`Uk\,ٛE{pk+o}i+gr.w7g]Oat%}>IV ('x OH!=oZw0d1y0;|fd ~Wj,•'#^ÒE-}?(%_ǘn%o᝭=\"B̑\FGv JRlHt`G*;Ƽ\)TP:E@kƺxC.vn.{]l/:ɻ,"麫?utw},o)rp.O$ FuŸ7 (u@N;FmJZS0Di_#<~"g{ O&^')Z {7' &ڸt.xEf=œ^pG]Ĝ+I jͅNzE_*_՟vӍluEjүLe _נ4x7EGw|^q2iYw| C9]?zMS/N/H!ճWc$].8/D~s4+,sYG[F?6"#<ͳa}`֗ ^7坉GʹCwnAM/}]qhqIt|uk(MNǬuU;E۳7TCd{dP]^aIͅsȖVQ@)XCouM3F/섰kO66dpl?Oz_nsξhOLĻP䷢Њ:]q v=ƒu;s|,֥BZ|w)(E;C3pU"9s^*?s!JS„A?TE9tĝL!kjgؐZ6xA:`%@09[mUGŧ׿| {?m mw@ ❢Z?!C~0Y7u H_d*B\|-ld-ztсT`8άd`PKm7FeQh{mM9vÙ᷍lEW=/gSkjb9b`}>ķ4%u7Q jo쇱OJ|3ƥ$V.݅Sp[8mwp+1bQ(H4 S-iϋXЕP7DdP->h\q9&ybv΁[y]?y"M̃ UIacW y&:]  8髻^W ?R4oyI˨Yе{0, A@w>Q#ネ 6ٗz?w]9qo^H5aNۖ!b`ӴR f r"C/dgN{vkNV#^f=>&;F:jI~ٮ5f!}iҕS{ӀdɁEL"^NSupn֊XV{zgDiGq?S^‘=岯M(jYY#,\[u[-[ĝܿӷineQN*z!%c;G~/f)]m[MKhtSh4HJyݎYrYi *q ŮA y`sy#ono?<_fH,|sbΡJ)L{y0SƤ3\rew8Be=\#XڭSzhghxGpU1ov@j^mp԰`KH k:]TMf6{XaɵC&+bl[y&Nhqd߇.Fh+`#s[ u.8t?(H|mqAx~L|wrER^·4BLz«FÊ;ӟdͫlvVGs`Ƌ鷭M"QʹI~V?/¥r*M̭z_ &]&i3) 61 ʧ ^{fHUn-0CFvl,|ҹa/|wIY븽RJtsFny2` Xt Z35,z&Fd @ n: Rk%3Ex+vjQO?rŁc,?ѳESs}zMn=mE>48NΞ~]c1>pALǨ%?mNkg-Vm1qK.Wl*d_yem#W.}螡gjV ~ Uޭ-Q7|z#?֥q|I H*)}4󭟶*9Nض> [{fȍt^!lcL_صRR*J , )-ch_ @r)6 U*qR:9_? >;խqTSsŭ9Ax!Uὑ]ofxVʕv, E xX'WYZxJDCŊJs: W ~KwRe_%2x2y#DîD?;C,=kן\875|SN5?5PD # UnMP F/Mņrߖ ܍> VOT+& 091 焥Fڛ>"P*a_vsg:B[.E"IټrhJƤ8#VL@Aq!g$ (q2wqP_Q(GsMag`-`f`?E"P(C`2] 8Dl-dz˲.H#0sJҤjQøۤLM_rtN*sy<_ugH?O):^\+U^q_..IJx:@Kb IBuٔ0k}W:$)`pUɚrصD` #]APdN#ZTIO  "؞z0mC3Ti(W]sK}8 ob 9dv$OSSL&I/լ9@/Ao0pOm|`%$ rه0`\i^"Gz5̪ͣCpYɃTC==kT cV(c;gKj5P =$~6zeד\65 +RJ4&NK:_tL3 j ('uA #PP. 6֨9ϪeSDsYTA‹חt[c*R&eI*CH9"POUzٴn@mjtop䭯Ū{7dg0Xy٠h\.HwY%`.k=8q/e"J3% DaFuMȰެGPc7oD{݈mG;!{?#$?ALw?˿k? .:OG!M ] $O5c8ңl.Mcjhx;#z@C.i!.N-2j ]wnqV~M`R 4JMa opoG˻2;[b|y!O QѱGx22qL b *1n{6WbLg-ow>v252P'@p]-M6ص[4ݓ \|gL<̝llO̯ݵCR{KK \ʪWk2L8rӕ߬l%g>m"y,\MnNuW ;E]q |(1j/ lX9BT{ڵ. ME bD^wTz*{{I$*q9;7|2|>pb=o&257K0t}q{#Ilm;_))k[l]#^!)U;ϛdDSR )S5v44G2k}w݉ rP)ܔ84-KIaWxlqs90,Bؔ<1b.MOt 9x-\U^6z1>`֧wkT[[_.{홫S+Fj,Xi;}T%Z,~e0cfԫ.trڡ u(̥^Z.EW1w ) 1 ʕ;kgYqhRS.^݊ɢj,; 9ڳZp@}ar7wt:oe,S9 ꖮ'5\2SA:vcZV#Vjn2CAÁ_F=LuA>51j*nJ!"I{gm žj˪,+M+ g pd*}p^3X4Y1>;|zgq{=Yi&L;R"F #^ ' $"'61C=PNTHZѪ)ƐNῨkx{uܶk}v<;^AW_?_xX㤷_{ߐ6?*_Yy08$ne={2[XÁ( vNd; o|k}~LRohg5q<#MkX_ ;vDRZٶä"`焠f3L~Mp*1 gfo"a$ZˑZ g_vfzfpuX{o|iKc!tȺ۫ݗ/#^K<ŰMɳƵc.Zkp!ib`n,[darypZ̰Vk[^:I-P㕚7˩ je3Ts|t-L&4BG t@.,{|#d!誕|P%hC*a/wM0Sm:MOF MO0& >`'󶭚u,Fc@df,^ă$}A[/C'#_o8'"VɐƸýF 8;x*YR@p_gUU-5%QOq \ lFI Knu\;?<[~%ٕs}̭FIRɁo3<^;~UZUrh2-RJN歈|wѕeD8vQq߫nMoƴ }ӝZ TkwpOx~dXdM ǃf,TMuӖ%Lujuvr- v7nwq'0ƖZuMXjx""EG۹+60 ݄Cf%h[&{ү>3f|53˶^$k64Q'FkzzOG=ąAX7f 4ۊ- ;E.fm+$pÒߣҞ߫l' m|]9\Z(Y8B G'FSj]䶓g=a(IZDU٬J\pQ’Y%SJbKD}JU*LTy &OKMJ`ʽWM̕nz_"Z˚جMk wZx &m"%~PHf-_q%wtکuʲQ=5e|e rIeIHgόav N\/4ss:{j&` Ġz͓03+gW-&/,[9~2 &˝zQSm;ͦ]]!ȋMS7N^GPoa3γpdT<82[)~OHZwsqwWL&ڙoV]$OAqk>J'oq'LQgZs-zC|Cέ4gG6LX P1<~ M_bW˦߆Ŕsœ0NR,R3+pdˌWвt+f`֕q) Q3l~3Tbp4P>3zwr"X-X A0#X]w"sTQћ7(F.Md7)4xT@F֯  qKIxX=Ig% q4F8lߔE$VLr&N5;N0 >/Ξ %s`RX;0*Et@Y0@,+NihCc3K{N꧳r6UqX_ `-uo̲TW(ZgKfkh+n:N%ɩK''Rn'b1[gO5b>",!sPGkVa0Z5ӋL`t h''aV VVB3B1z6| Yhfl*V$PMI>~ @_ON8 k{+2w#͉`Y¢1T#.Zw"Ό^m^x ܖF+"RA5#סgaxہm fqO&Oz[dj`+a%̶tהx;TUMEnc_]0jl,r?QWn`^퇺:ZS&9j3ڴaKj5' ~ ] L$trهg l#OlئiM2X Ϛk2qa5Jȹ0¦>Ѫrqaz3'*k:O: Fz2Ƒ9[V[*Ճ]fjTWx3v:LjD!5 $ qJ$mC˹H:SN]f o|X"\1Aݰliu2;-{&~_Ty"G8}W >!_ሿԿ<#[9}|c G? +xZ}P+mwmu;{C79<[;jdJ/ěO,ĜXKBY98+B[[u0<O2(Kp%o::}Zlq)Zbi!ҴF70Lޒ~Қ8ӹ,3mqGH'H=uVQemԨƸfѽSjg1# l,8sn75<*yEE E֥|fȺɳ-9ԵUU>׊?<)i~`~w^R2׸ͶÚ7IU>uǃ)`+)%'[GW,R@QzǺ$ȯnVߔC?fxZ(Rώzƍlnyw=S@zgHǂu ߘ4uv @ld֑hX{XaƼI|Em ̽j _:8N#IT敭VT*ohe\.O3D#\ͬ{l\cE<_3u]ek:L͑,_8EXaS^Hom?)t( -rc;҃N}U$_)yM"Փ睠F59g#D{Y;*O6!i;;"&4*YxAFя[o6Ŵ2{?w~VŒQRY񴺂9ɴQZR1,2Qic:(}QE&=:c:Gsc6~5oc} :O@Wх%m$; Z/+7M(G}++OZZ&mM}2I-"Szc, vx|{r5fc{^b 2FƂfbRv~14Jzޭ;扴 )Pq`r*8=0@ /M3UEX}uX0-%BֱR!ә+ Ez6m(eDaG*zhld`ka攦ע( X0f~S]1ABЈ\n#GGb<8fe. N:mCq3¹oQ !(<ĩg *%~,UR:?V4 ѷDSԮ2dμql3QƲrx0a_19cGw-Onۓf%[]l3`Y"M~J|QudM:]Fk1hmMXP-)767f9YQ A ܖ/n& p֋Te:z} a0[^H'(ڢJJYNNrfϼ+z]Z3uZFK:iS/\y.4Nr,,m _1'&)f/O}ޘAדug<|hI䫴1a1~%Mz-|Mx u{wM g]C ovnZ6v?M#ܞO^ٽ٫<հȚr|,ej2:1`v:>s~brf̽ } i.U*a.+}׶>k}&߮Сc<@\YO+Z1[$C8\O]UJ[k`u0pѵvS[U'%{g_#|ܱ-mSɲ;K}C;1x&R{0Cޟ&n6?4\%"[sY&*^J6ȕjgRCٜ&KwU47m`nx| ^tR;uSi7b]Ϻ +gk6跋O1xəѪt[DY&TNQMM]뿸B\ynVfӄҲe{^=Dv3 1$1nL6vI yM%{ExɕvA򱧙`i UUqgEYsDi4$2܍qYv(:B嫋^ Zr1@[uc+k,(s's>ϲ 0=s3Mr*[.uތ5^ˍIFT?QeYQ:o"9+4(t]/ \"F`ag0O!@L.t.Vp\H(gi#Y>qz-  4)( z=z=~~p_`X83Xtq2goa˦GþIgB/.w Q4.<_~* S .o"ԢJWQk[E{--4Mԍ=,5<"\{ui0FyDJד*5]ܒ~pFS l8K&0=mzÖM.kC++W.g,qY:gxl #5s;DJ+=tmD a[ Q7q Ol`˱x즑l^e(\+Iukq|/+qL5J>18:=aZksaIgR7tN~ȰIQv-ד&YZymIc@$`i i29zoV2vrH!5?/{qں01=xſ &SE@L}ǔyY=!MCO:JX-A k~>'E9Wү%^>zs0@ݾ:!ΨiQO爹O9oLOL\_"C\G_kB/C3gaަ8 ^T0= ˹zoD_\p6FL 5[-&#? Qp%uCq"  ڏT<ޢ2_=+fx]1!>m̝|}kd_ efvϳ+f[k 'ڨj#)+?bW n4 &*5peѓfr =z  hrˊz'lӬb>mJ6lQ(QZ5QA۟E5\tk|RQŪ#3ٖ#pgH'){kr_tP}8K1'ɺAvj }'DmH8ג -%T u:kȖ2jFI S W@Eia? Az䓦.q#Frp?j#ᔏOOI` ت6N͜ZX9$cvanb4;=[77)utoQ"x8_2,| ApjOG̟f2s<8qy,H]B9˭w͖]]Xj[,݂32u8NV.f0wCnmȰd~榇e䰬ScI#d9cSr;K64h-?הZTA#l`q,ji[IL9M2L""( ]} BlRbWH_Fk+-z̸]ׁ=]@3~}f V23lGȌt𫡮Qږί˨{m,ҌPW̺2 Uද}5'`2QqNbԩDİx࿨\^YY^9{ŝĄ Gn+++~u" VvVV0V +Gɏ7#vpx:;"h㿶qp,~_[?+ZG>Fy?TzLGR3B=Jwݸ죤w*Oe)ϛ.@Zz=.#QPv>Γd&gZ@՟^-ײ&UFIN uqV( 9og!ɿ9ӏ3qrtAU뛖|0;M ޗfBPKPe }|=JX>ML/Nל;j'8*NM0ӷҳoյoqlvtRw[ V lo m VRPoZm]-ͬcH-zT,{ ;8E2MفS>K-V'F%F2ěz]@?0xc. ).+cMOkP4vcN+j1uNriTE`5 \Mvm+Rb,>M˳A9$͙di4jnJTdq/]}g.U^C|%ԣdD}]8e.Wc#2MPl{@(G`kkցQF_scGww)uZOJoX%K*y/6U0@)ZI%} 4B_UY&/u+{@U;X 94x-Y MK6g8{H[ΎLĿJ}@& G+d[XyvDY~]o !ޚVpMş/,!+S-)2.Q/X`r}`IXw d7٩Eҝ sC݀WvoL,_^ mZyݔ3A$ G^4@LPO5wJ3oWxpn̨Y.CBd}fhhEVIp4 Lh1.꺚2J:w} '#V.LP?H(ǐ c#e샨L wZdhظ;y HV(k *snjlcglT"PR2LV=ۍ-0t /NX ~wz(hOg boz?<#VGţy͇E  eSu?(YbmL(JwBy7¾סU?Ӎ}?Fif87kD̉oq؀%Cf4_ʘml~ يI{[ԮѴ_Ty. KK;åٓ'O `& >>NQg_JHHťtuuݏ:@@B~!6?.ه奿zC 9V<>/oa?(_Yyx-/KZјC.)T+XZ5+eYIʤzFƞ:M@wb'fF:7;HGO_٩ n=o{1\=&8-+'@ӯ֒/άN;X˸SD+Qjrs>a< JsߜVָsf#M ~\Uj*."#i>چgϺT6āM[ O. ΓwcTc0LEŨgMOAG fiSj0n_29{3"qWCbQ73Ѝ\P!A?G\$&@gNwɖPEo+[ufO "`}דy 7Nl _'-$l12J߃$qy7o>m+Un9{'zwMOjXޤWtN0T6ˁ*]l=Caqt{.1Cߵ )%$^lP 4dztUE/WsËh&:n&i8-A$g&PY9 '< zV.ɍ۳]sA ]2 +bLkWBn ^m!+"I[|&q /q"z|.jȃf֍"-{z&ƕu|کӋ3}7"Kԃ\T_2ĭcnaO-2`K+kEE;Ő K ]g KSKK-K;iꤾw9?+kۭk _QHYU΁HW.]̼FOxL+Ɂ = UE0gqԥ=6;y V#[Vp@hlGt\WUͱ 'N, lyL^z͟jVg`%GD N,f}1hzhlftPbg>;z||xVX"f{T&chNI6߄}r2 xJ6)HOiыs>LY"bGh*EsvGŲsY0%1\Tt(:\͋$qSV"f>5>Dl[łYS_q:I8pigv-"$k=ƛ[>wb!*sۢ7zB@}ГYփ SO+P؛p.',z|UyzjRQ? 9`O1X<Y jMX0<o=Jm3D<}eJh69]ʹo|vfWn xF~HL:G0C>ugf 2^ 饆t'/Q]Ǜ]ͿobXZ@9[i ߸0 )lm, X5LيG6PQ0aml|P+/FZLLڟ_#Ifs8*Uie"fA =>ޔ~ޒqbc^Awɹ`>x&c(0m^kWUf*g cF G9bTix4|^^a>M}ssм6Ff+@ٶsD~e"NЛ䄳jf ~bڌݗ(UlH\p{5L 5'gjlPm+_j"r {.#dL*F&$Q6M>XW!Ìi"*" |j6Ҁ&lN,% a[iRxIb#*3^V6pmwg#B/wu꓌Zf*M.L6_j1ƼHLD_(^eY+'G&^נ֑O<~)}B@بϒWE{ޮ䇅Cj9W/>w _ ?[a7.~-Q쇅tQu ,lER&DFb$>'x}r,r2\032Q+wS f̭aL6?A5Tf3nNfuOA۲5S%,9 k|ov+N+ONjѭ .bZ̾0O[][3X%C=&B,)L3QWd5x8O~%]^{Ёޝ:eVd g?\/yΒP©KQl` 18ه^rBT05Sn@N`{Z^ {oגFp-'pĽi~nꤚ_bE筂W!vZ>uri/Jxi[oH^ZT V)81?  ~^k+ɏxa1o[4=]w{=k2hqb`K>an54Chjp;J¬^>ƔɏKJ&cF(R" ^{RCbL#Kh'Ic-XYI.Z]Kn˨n%[ų|UF`Cx^LZ0-=໖m]KzwP84<ȲO΍ߌT܅7"w("a+eop:[VAyYt>Wt&iؼcby|*x]OSFTswjfǮq]eI'{H\iOI4{U講+5HT2讏;PdRo&MH0BзB9yFЭbQ @Sݶ~wDJJ׷S677M9E|{QQ;{A2uphhjk/n`2uxAQ Sݑyu?н'0`K# St9o wL: /eIQ'p_ ; "laeatg!-- F?aČͅ"负|x"ۤi疚.0@y/x@,?g0ۻ/x(08$k_4\еU1+ <W0z]9W31p\:pJZ+݁8s% C*1*`^b1 {ᱨe78vӉ[$P LL%::r[sMbN͉F0=i }5qKv[W=H9( ŞD\T,g9%Ry4Z cXst U <6"H_2[(?ѿ}btqr~yHnMz؟/*(G^)DNRp~;sS ISLFhXJ$6&8 A?V}%Kp" >mnXh,t8*k э1$ۺֈ-A\*=Z瀩r !\ ȹFUCkQka^ĝ#B[gl(4!|yo+o HPx۹αJSr.Z{Yuwқ Ha0t0W5sgOO4aRjnK`Y?-R{xA5+5zhrdџ7ySkW"F[f"[F}=3yrar\Mh52xoW԰X5P=El?. rj5=yK@B]ބ]ZKOE(!RFkf'L&Fd1bb1%(2u}}*Xۊ\ޙ5N^Jf(CBr𩜕Jۀ<@cXIh,W49'rpկc*inq~*)06:!L,_Іv̓K!Ar:7 ?W^*h75[EյE E QTDR@.infaB|s?u.kZ{=l.Agߖ\<Þ3M6z\BWHVyS-rM mY`yw꧀$0.{gƽB%Z RAf x%khƖ~|P_d@*A'1ooU81s=fgogpjdd󻚛pTdk׾G %%onn>v?83/_$ ?K7|?\nωf'NgωĩOGVdL{Cy: O2ϻ4̟B Kh)J?Jةd멖[wk ѤV<`ܫS,-ʵIt! gfl{KrEl;!Q#\  <ٗNOT1ܷ^d|3~3g #%}b-m PirPIrOf5TBWT- pN_x19ԓOWSFU2"s(Mh#Jx=o,#\hՎ>>xcd& U1F]C4{(0mrfg}`Q롺҇zΈȣ>,eϑ71KfLrTuӎ(62[?f))6`\Cu={aJ:UU~Q+/b9 ̍Lg \5:*hamI<{H @jdjVv 惭";$2ڹӆS縓ӎ y xR3E$R_$Z?ǥoYBJ}tǬ~Vne%{\6_O$m^5<.&_L_t'PN4KOɨR156:0]773pLkx,l{*l˯$̔?/x ,Ka\/gc]ě*ZҹsZMĊD"|1%@JgUAn4\.  V_Y+Ƌ?yju.!!!9&w=s !!w//DGGٳc!Io6 .O:{#@O~opq a G1?s¿ '4^Vok'[gV i~Ad- HUȇQɺSӸ%DWc.Vw@rǼ]4z̄c#T]eǠ_8B ySPGRPY!SrW|RMaؤx6R4|IiUe~LtSTsgȥyiZy;A,gff[g^N~rz񦹁)Kc2deN=tSsRIʑ/"ikftu oG=_;55E_f֢$gn}1M*_(R"8R$Rd0R (AZ-L:-Z6]C_>G-mSw-#krI{{熊Ut :{n-(EKۏz%Ul$[E&'5!V (XWNO- ɡ9#$ﲩaohZZ:miy*/HJMIKD%8ގc;c ?~Y%գlo`0dko,Y^B7zo'}~]כ9?1kz=t!vhٌrsi!ɑ/2ÎL;= 9&? Y ^yB1ݩ\Fi6B<϶#π@Il%VO#G|/RoS,K:RSE; $L]HTe%xΜ7_/nO_o4`glͼIW¼;"0h}ыZw4EKzޗ/0mU";qe[agqOwW6qjjF-R9vU5jH,M!v3d5H#Ne  xmq]M;4Kr4TwqOhBd"Nr0Ys-QGp\bb\t3Y.ER4S*&WU ":u+ HZ^SV_)f(z \2,*6WU/`zgr5E+*їF팦%+[@ZN\Ʋ['qbV75)0YL@c *zv}ĵg3/* Aڏ#f#OoF?#?=4c}tÏÿg #?e'GN;qdžFN _5vxoVO$䕺ԹEP2F뒣)bM$s&1<^;yocaabzm`%^*_ܳpeazZ潬/pXd-|Ԏ9up nQ?K`X\ $JOSky;x h>kv-lnNFzSKYLrk[[_li}E#! \-CIrI2W(7X/ɬc.= f,-2}`z##X)gbsY&F[8vm#z>݊ZD6 2Yiw~]ަ;"U("`_:gn x(ݭ.2vo\Z E<4 ԓwJ|֔RV e)*o)@]MDm'w:.wwGDﻌ1xqכ;cSs KG`o\@ 3~v[y%`qZ*E1ܯ ]k}<> [o}9yDXzDͩcn} xMw~7Bh7' k{:8$Z^_l8,A[+L62n>mږjγ4v\yK/Hl#/hl ~\bq/O \ _Vb*g(qBf PKLU{hꇨ -]jnb櫊VɮPiղ=t՞vzzp]ڶC}J݀~z=WAzE MǔdU=> 5of&ۉx+1..,]_ ^k*܏Ҹ~ڝev\;%rƭ h0AZǕ}%tqV{6 L;Gu}K4s]aEtTywm^;Bԝ GD6 L =W$9x܆?f'oD]MÉIޡ_N;}7;~%<>#Љ/8C1 om i) ~@=foV$Ä"襽akZ2p x pJ[h.,c.ކ=yD+#/&p)2t{0RzdP_MB5y~Ya.WֆL˒_*h(jh(jiki8jijijijijik92r|ݓu2yҩ)aoZv^4MjWSVg>.|=isvkq"?0FVT# ⅏ %"n1fDؓ(7:dBE[1=;za0nק!]?eȠG/I[HڟAȠmrA jl(s!._'jt/7ai㚔M7:e`g`/!.@W6@ILZ )D4r@h$ŵ([L0p PB}Jڷ#kk?ZV6u@/ k%-fz玿z Ɏ&|yBT]/[F+owH߲l6s2M MUMM.MQƧR1&]g[zGYћeb A4rʍoԛ_R:2FgKjM;Zy(%@M?''=E/.}T::eXM=剫܋w'^wRyB' "׿xl(y2- vHI?n{1;+o7'ZSA8s=+0Ƒ6$"^>ZOrY 8sql gbW s8ELqKH%ed~RA@E#,ꍧL9J# ĜMeU-t MB?(=!o>Kd.܏#߶%,}z8#ts?މE^*ei)˜SH߻:l=t{8gceu-~i2EESU!OMf[p\);1eteڕ.q"} S w:_%1' D3tL:pA -Ϥ6r2s0,3J1W]d.+$l%Tyw*v3ѲTaGBh"s2gUv`Y*y+Y'OaN9ɧ9X%.&0V6`AU)ďp~<Κ 7vεF-,:Ƅ :f>^9e[GVXTJ7O<}Yk.w~A,8. 5"Ga@O6qDb﫹#-ٲ)VA 9/go]:sGG2h#3aGRƐpidkd d#$mD| F=AS%9G*'tXoޔELɞEQ`!5YzR.\rƖ&>6zI1Ar5RACR[>.P-"0;eN,237tqe'x;j%zGӇt)L(th625sSNx?R֍1Gl nj'^mmDR@\LWFIIt|xS4;$ :~"prdumօ粷?!n"h)5{l}OlF9j^ޣ ~ ΓZæz0pƐ㾋›Evn'4pu؇ITmP w!Ikl3O>7$A6tߩǍz0ӏM'}suJO'SOO H_[Loy= RI*w.APnQ.QMQeAlBDI=xlp \Gy2B>qM]ly-L $wr~Cf[F^0^cr>RؓoK$irF];A3@&@@ @%@-@@@+AmMpzcL9Etr~@hl4vqGG#AdB~Jzlpm=wC/Y$ !X{zfJ(A@GC3X6nn5MhA~0[W&iYVVU%W sYcyA0J0@clyIlKWEu3X7qǞ=p5{`eZN nAÚQi%̀c&v-xfܝ)z C{ =)s7K|եcmڌ2r9Qw1V-.ϙޜ07~cUҎ#. Azzvte u-?93t.;H {ur3ι;xQtVH<χ aIV(%j1j%F;b!O[֞WoA0 f4t@h˅m Hgn&v{"a^U(+$1e䃸טgD L`W 12Ӏ8'FչP[vE?k~Q?jn3˥6L$ H?DId wb"Y%ChF]s=mژ6.;BC6U)J7?rW$[% v3x%5QNVM@; K` Op}FMtuE8D7eu>%%?otSY@]g,oiL|@<$mD\I"伪u\6 apʹ/ ͝R}`ę\.~dFz<ݣ$ylNb{[*e KdFffdN;|i!TҝG]OGJiܛT%cLb,MvB@Q3D ~>[n.;8w!fRՋv^"%rRUTrl}ގى R81ܳv K[gSP񨺪O['A}}U%}x=u==}z/ǰC|qwq{O:϶M4};\b===oG /_~oK37؉+,gg=Ӹ; ~s:z~+l'" e7KAJ|kl2|Q+¯yW(Gg?c4>}Mc [W%o \`Ym}t["^Zq5yPQ1:mT`6b,7]j;؂}p.2HMy 18.,(H^N7L_zݑ.N {?Iff zVj"ѱ@G,<̮ \[gh-+ڹ3LuIMqtn@ET%d*^ TR;pA栱 oNGTܯ@B\ݺtxa+5+;@)x6g3yZ퀙 0vQz*Z鉎+>սU^.9;`iS(Iz}g^=UaY<25?s}WFpfGV{6rucׅzֈV/m&\;`D;x,=x@PK|&_^47LR[]1׻5a`h@s`ؒ61&o4>_$+:X;<; 4˝r^?都 z+ˡֵȺF ~t\jC]xދJn26=1"Ձ} /('?e6P>/|PJ-z?4ezBuײVF[ =9`GC~BAٓ:v~ ~:" QVHM8N -(t ")pc3,OÁm$ 9۸14Jɑ0_؜@6b&5aӓHyUOW l*$"R0|Q].:; MWQ$F<5ū2K_FԛCdk{/hh{h#[_~X8l`-ֱ 4|P>R&y3 ˲Gq'2ΤޞO>|Z&yoZ֠F(>Ҿfޠvx|bX^RXιpqH< (^%  A oP>d_&Mr~ (p`(Xd>Bu@*-߽@=N"H-OT:Gqr׋c+URTݭ&ߪ!ߪBVSov߄o6Пﺟ?@?0uA'SS~~7rapEtF+Vy]i !ć66 IFX覠c}iW/"3W#{sqwP֦sH2[T6yxnBŀ-\~-B>!n'iy7\0Xܓ6k5E$xc~F9\խ֒7y<>FFyFEFNBiIoco,\$qt԰r62 *åuxEf| :4ڱZX+ܝPgoma!ƛYҵ(e5zrx/|e\C_JuP %Xr5R=|BF"7Db|H8sP1|fR䝳q;r5 ɡ0漗Q|WÖd5},)*ys+ul^E8qSfw9,-u׈'WSd& (:{E&yنyzhZ"QdF殣f`-dx$wA{l !_EZL˗1t/:\Eh #@ Pt:#ρ%:`ZIqu/0ހbf0Z?/J4&fn/~R,Q/toO35ZD<&5KQezִίӢJJHIj&%/xm(XOXA]ʵsU<U\՝j>C⡥q!SYC}F4LJmst㒅+i杯bma~DC0m]\0;;tk%n9D2jsvy!Ur֙&beuWkQQPr@*3i >KfzF氳֪J\#Y:mae:uJ#݂[_BhWEZǗ(nH*[[Ǧ|JʜW4q^!9Ud+혭/gx6tAntl_ȻKE@7YEE:0VvVUM5 kyU *l%KCEXr83x}D#yRB_5>}KNQXG_\J_A;q1x-٧.=T5YbUCfjG( LU y̸NblEL͍GCoj%@= E9e+4ҍ,3Mrl4 ]|D#y{Yk/`\һ]' c|_@~Ni(Nk _NŅX2/<휊-wt]߄̐/ WI)(wa;q{@.zgxﳰ4~0,pgvd'1X%8i@-^74_\V9Qb&򡣈jƹjo%\Z0dTF _@AJI=oO=Up=Ud=U|6[sw]`nxS.(UB na=534ܱ; Evqnfp+I. pRt.L{rqjmDDYn쒠Ig $ UA?(8PUwӮy=HM}OYmӕc5\=hmą Md#&aˢmviiDn0U=wU:#R!ڊ*.n?MU {0n?OP3mV28}CtgA \ڪX ӜJ][Ґ+/ qj)|=|6q^8}KܨF0BiIܑʊ00D 4ybt &ez#?ی,[H82y<4$wN長Nq߃ pR~:F1Y;ea$7ΙĚ#yd}QX 曌M</!_Pj`sH zsm$LYvK}h'oy i*0sU>%a܎"7= 8 GAYcDGmw3Y73GB9(k]DICH ^BۿW>ekNI^Q܆լaذhazP~Ç(}'w1Ah'W,'ac'<~Sy=1Ίty\kM6iZǵ}ҋCL[ͽ`%s  o* 2@lcXҕTacbn.eפ.(nVA3[!)hjc*ZGkW-mc,U8F7罪`kt؊-~66wiOmob222ǀ011/^3%AiכE@[ك^-a IGU]9\rZv)h+j3f#|=pD@ \@~Z.1傰GK&^׿ۙ*gj]GHyM I|Nڊ{^aG ,ZJ=Q_kɋqSvгQ pjy'u7`8Gv~s%cJ% F0!:^4RVm@oLY|Qޛ4eekqr䦉t@(>ܾްI龦⨴)(ɳ^LRӁ?yi ݰt6xR۽cd~ڇvF!rI|nͽ h-HрniTpإ?e[16KJ0֢ܧa=hҪEc mw6x+Vi{ހ/?$lQ|WrߵW].;ƵeU܀-SEBQb!a"n$oEYF<J+ zgn :?ym0O###||橤DAA+eeI̽E"0W8O߼Cz,aՄ(,?Cl:\u4 /(DW;=ڢ5N5V;R=QS;H+XO)K%M:ȏ+ԩ<`N   H  !أQ!^!zQNYLYE (ra8"o$`{L[x+^鶰:HzT:4vZiɍ Bk (rbzuQUӅ^ YNP_"W1LIs. $bG@rtxb:#w)m=rKwEq^`Nz4s(]om _cʼ\ys^ߩ1bD}KvxhǸy>veK??'Ռ$Wt"U1u0ܖm ) _2%4ݍml;jn,Z(F\XIwj} yki؇%a} U=txW\sFCiW t`VF>t߬{F/̞LjD(I)B݃CNVH^vGq2U.H>N}ϔNb̳j>"Ej$#PTؕ)Lx/oZ8irΠ1g#t`rM#EHn#{VǢ|J:Ⲯ6KgW g%+LymS}`(x(YPP00 Xkb+ݚ{1; qX!oGЕ\5ǴL۬ eCeB$;ä5{,z,ܺCf6ܑ*drȨJI =%<aXcNxS!rTM,#91=0/Y;F'8ֽY=jJ8p@ PyN1Uf760Hyݺu+%%y>z(,,<883߳|.LM0Ra.mĺʌΒ4ܐK܋i1D(HΛ),(jo(o"1{- ,Ƿ<'ā@=J@5jⓈ FVA$PO~K!{1G@ŐI@(|:3ƻ8!R cRóX$# :Ԓ'B&-Fd!9Tao$Z*WV>fs< U}ZP؟5 +T9XZ(-y O0SuԼlh#W0ǞP\@4i5&u&5Gr_ښM;u++KB rX >u0 -yFǻ/,܀L߭+$MM׶pUVf/XG_BݰJ2+2KY{v[>?8"C/` %-wg]z] mB*Z&!Alx&(-^ ]je߅D**:p;ųgp& BW5g3 Z߁_`27f D&{^d>n%ϞcN_cOLJ@r1Pk*Õȓ89fPhRl&P)sMn_jVWV;OV:YAnKo.x ` "p*J'yRG9 Y_S4ЕT~,),iMNZ= 埉co`(%o|LDߥG;3%YG1Fʩe]$:(鵬j?79~r|J&2^L ?sw>ee0pll젠 DGG/))>/..>^0O1qNHwhЭ;ю|ZI]wJ\}6up$ysq}XG΢2x 6 ʵCc "DA QPQ!{((1$GdAmԚP:ȚGF m*o*əA I'E &3<(R5ƻd6p.]޼侯*fxVPb" Q䐨nG7x}3muZt70 YLxXBG6(:HKE’rޝ zb' b~sF=EˑA?}+| IP(;bgW<1gjwnO__̺etח&~ӑ'3"re}Qy&br3Aw P QuTN9WzVj;3}RCoܪʦHډ`2OV"6caD [ w0uGo*10}<뽩0K®]ܰJ~Dx'`:4GҜfgZ۴; EvytTR楡-ϋh#6H]yq)j;R9Z(CR }2aH\ Kif e'Z !]Pfګv-g כ_%8!4-Ac6 ޙ sȚdOBrF [sU9#*,K ϮB/(hQ  $$,@'kpw 20Kݺu}z{.SQ{S s/ۣa8RgqaĹ\bjrɮ_]" !E #ƈY|g|E y&N7ф'EjaO ~3ܳGi.'s4U+$؜9M)ױ“ѫMy8P译nlb3{qm =Eo4ԝ'c/.gR){ǰd[ea,BtpJ{{d}$q1+BAsUFW7]sGov6 Jԇ|sz#ebMtΌ,[|췇~ay2qm~YϽ<䉋/!"Nq$gvfWJR9wRҌHT Hw,Lu@W Ч=,y<=bL~B^N>X"M}?EY%oC\bKm3F^/ЦOyښA]Jyˋ?V֮=h8Gk|m k\% a*lO5+Wl[ܡ̀Kی | ux. +O\iu5!6 1j⑾N.:.E_zH sTIU8zh/Py> cjՊ I4)d6%SxJ?] 6$zUymDۻLK>- LI%J} u9~* 4p'B[K7f;CeRsCCS*ygH [Feҹ+xOK/ DoUb|MfFPRA@}Hos)R':p? _ЌO}]`ݫMs+<ڠʗ{׫C=p=ɐ!6AYgǸ /6ތ,MQZ9Աvp{e"a"q̇~wW@~}[]\fdAZf3( H ?Iy[C;蠝\9#1p5%S WP4ٚ9ҍ,09zKPIH`BOV<\78K _4 kDd^H /g@6}&fCa/ss3__dr~lO:KZ#C*Oݷ zF6($;\ )jf^|yDoaY*E)Y8jH`驕0X p;Ut1 "^Y4&x/>Onko߾k9&&oz"#-/ IT-bW V T,0k/>~QѠ51{?ab?^ gϖVa3x$z"=J.=E77T2YunMd@w!}6qUk`$D;{Fd:Wy+`W9R<.ˢޤʿuv׳s$dc!4Izvg2U4i FUlr͟l], xeH)w4*!-n3gHrW}pqRkFC,O{U TJC썒oxCo?PyG'3vA "BmQUUڪlJ"A+0!3n$yQW怛 عV׮Z'a{5լ7P FyݷRc|=:vakbMKpw;GCۤSs+ &HhkWX Vi^_w,$)>_y\%5KC}ňv$?f, R}ͩ#|ۂ4 wޮ 6eȯ ۨUa#E9*iQ_zn8|\jM/Q=c5:`gՊ*'+TUp72@Yf Ucfu3fzm2s:3|'G>wU6(I6YzEC~T_BtTzh $5['/).<y2b+Vu!c#&C 2=Yzm P &q1AfJc|KTل( ҨQ0ʼn$C[}KKWex\3z,!%-7RfCߘ3+iG+wnzx<.㳭u利E:!@l7 +%2CG؏RkZwr+T+zC恄լώJ?wSPy"ݢ^b@Ot˗gF$z|1C^ %(Z8({lznisd0*Z>ÜH,VWL0=}h~޷dWuTM/pM/k&\S,Y]K+2z+>4|O9\][c^hRىs?H;gi."@P -xM@MUGly=;Ci݆D*_J_V"*-=m]#5Ҥ yݟϓdmll*LP4R7niieCl;r kk '}hjygN@mSwg|醷A8vh)H1=nOj(2|N.<'mu Ǐs&=I;;F\cywK7 {(G7Н0=OC_Ĭ 'Cܲ++q+mܸb0 ȓ x)OZ*ϧh#j ,Rc=jLxO23~Oeikovmm{殨bU^[t9YַW1gY&cuUh+og_0?G7]_f/[L@EֿAF @8=Ƕx$;02~\VQNG,:-F%c$%=v<*@f4}s/Ly:)))̿$$$&&O2MfU Jn;.10R9L 6D%a$V5qWhO9կP%#kDCsdkTstɣG{th'^]܀)n.QtlѮt]&lgV 8֫LVio#3T,G3( j'[IV O/D3n4ޙY.3lbIQsYzLu'~!zM}Ri0{[bP ry[jhffH963%Hَ&O8sS"yE.v^%lR;`(jL#cF иƒ9˲·' ﳁfwvzΪkRzEaT$0f ro ej$SiWnRe}°e & ^8[1 ʻJǨJHXFof;x nc* mx4$v!_&5ݹ:I/E]H:i+E?6lY s倴i6ia j>VK>GуؙHE9b9UoQQNwюQ/QnB[Qӹ$=56Jڑ7+~Ϸi`^?@7L  =hGuCkw>򱴑?Gq`9Xu;V(M@*i6oVd >GC0sZ-ݰ*56*A7Mnnlaq~`h~E*Tz2FbMӍk#8+˸KGxc+|~Cƚ %ņ߽ӖqQZP_sDu(FKW3= .Ŵty0/A[C _C>>cfIӊe]K3G]ZRI'^Y?zc5Oe5De?L5,da.t~1Mv_tܖq_By}*R,­*ԊϿ-Y)%7j#M {?O~i{{wfky8.s ;O0;;0JߕbLeDhz' r?!̉}Rq+~AQNGjŗldQ? (;x1=Q3K*PB'W)@; 2v}Hv-^ 2,9a*WI>btraaX8Ͻ< ɯf@r |xmk h@!pQ0T}OcO 鶋~^u|'73TCÄI[ϐ.tO"p`φCOQ,dޗhqg +Ljy:)hf|#f§"\ByFSZ/7S~{1ߴLsI5#EQNv 5\=E>Kf{QW54S=DeOu.qb8kf-a}5=9_:MÃj(h z`p(^){O CV [A^f V{SKL6E?E\3kˁ$s.S\2z#!fK^*B%LQ]}-y_,̨NpRV*zkDL,ώO.~k4* ͈|w1JZ6+6a<@/-LGfBdߎ`RgiWn덥ѥyyeٵ *dG3Dv:62yS7cT|QcZV2S)Mm_v0{iB 'D/r"Fj+v!g*G:CED9 % xoo=[ ݵ}zHѾ̓%M-5KFΘNPŠ9 xkm\-Kܖ9vJ oBo*8.CF:kEO*gXo#}rMa6)&2~(jwC!^,\?ov*vh}y~rʨi_įLaژ8&mPngihf@a=.1, 3_ؕLvn]08N=6MM#{g3Z>h|Ŧ{̱J֑x>O6smCHQ!q,V>fFq۱/sm\eaOw4n,}z4}Q8/@ 5B^}O(Ϗtu-^#~@;/2@UHvaz&Dg) V.tpdESu d#ϻ 1#t= #H]t;F2E>}bM,C]DQajWB7O~WdޞL;)4647i*5n `]!?x;is)K`d,o`~0f=zsG*o]h4R3ݜRٹ1f> I(/J*j B CT$grx, hiFynfradeP.;]#:;726S3F:UX$kdjh130"2_2_*gٜBu,{ondbjXw{s}d,8v2JAϵoS_4jŽSk]oC$K\Ov^? fKTkEfHT0ɾ]zQW,==M6rP+u{+S>uŁJujАx747S ɳ`/xr3套 Jt0ҌҪ'Ҿ'tᏺ?VHRmj2u}Nx?L2AKאRƓ$dn`MuZ0(C$ށ3U%/A(Z,ho:{ ᮾ)>C9dn cz>Cܽ@/\O>RHTco0D f$4XWkxѦEеD.)U.b3U Jc+¸;&#ϯyu}kҭV:3.lkLjqlPa[olDwb}o].qt8N!nijwe+q˅Y_=<( 5.$u R'66k}s{y_3!t ̕C;@$~Ny A&v)OR=.]]W7A cC6(`=,Er ّ*g!.7_V.}ZEWIh.ežl[f19ۤbOǴ3-򧟤36댆h\-wy˔f3w|,'k'{ո@LvStOU,]3Ŋ +KF9S )t?զA Q^Qz!].(se<%ޤ y=c7}%Ì_5]ܕuA%2bYbF$Ӭ,*xsbT[4, b4*8j;8rF$#\w}gMsĻnވ#bO4xZ+'0OEWa[QviuVy5Ea/}tzԈrmޅP;!:L1YW;7iM4=>DOvd8%kd Prˁ{']ڦ;bѐyֺiEɳv4cg$K/_!BAIcp7? <%0Nb0Njȫ[8&|MbUf$ǸJyFeǵ'-U[E,0f΁2`^Uׂy[$^?z 7E yBWyl_g;K26pbaşd^/Bɝ:V)%Y{l$A(ڊtAa0XGl+1Ql֞([N] )>8tÎ渪:,(CDԦͧ<G -< b?3f8[ewz[CR  Es>2ϫZhX\'3%N[39mIu-N4|Cg9D A&G$:@BLqs)H#Wwzo m;[F`- ^y(|`VvIw56Fq$1djdឩ]OOh)|~.wev㿍$gA<}(9A#c"1Dn@RڻgJdY_Oښc/fPЎЯP>v 6 ɎiLbr*[PWK]=PM$Mf/1%Oծ7RJ2g0 v4yT|r,~LLyq ߢ^a6^jG|z#{ΗiY-ϱ2#,R1ҍ7=ݠ:$Gad|hf%}[0dW7wSean8EFiJRyPK+c{yb^jQ]y,i Զ/U-s"eg5mV<+?TU5N'}˃tn|q~MȚA81z)8F<DŽ<.8KۢT];w4?Ja'7<u]D0.ε2tTb#FJ*lY79T"K2Bn4=By ݂o@Ha9ǘ {OF7ͭCRWHF /(u]~Zh[w_3)(זw+|l:cM\%G$}ncuo2Ғ+o.#!__PCEBϟ?'&~<7=իf9Z֚7ol-&uU6/M+)ȿ|_lb#~'8#M D+~,$J@uLewe8{jC$J߂xaBMl3ĒRd[6b΢5c4b8s$ıF#ȌK,|:U-4 bb iûJ#v7ɣ[#ɬ{15̺֨\ ✔bY"+'ހӮٗ('}1m>D3`}vA~t(;yh@5.tZ͋#Mus  L(-$'nJ"$ٲ+(пԾٰ$H,Q6ֲowR¯V}>^VrM ?ƲKKL+"8jR}M5d}"u3d;Ml[]Fk4:i8SB7#nb,OpJt/UZ]:B5HQcͰǪen뎭բXED^E%XJ P U[dS XL?1ck KN!h JPjQ=>xo^]CxAYOb _a]6יVR9F)w췡ǣMy܏4IK=3$b}L|o W'z>fHxL[.17|\%ON?;y5gk5n9m^&V&%Xѯ8e=j6`daؓ\n)/{`Q>mzN!9 'ܪu60Zu~hp_!s{ז.EA ;VvZPA (* @/q:W>6ATcC}KsôӢ4b +-==- =݂Jz4Oƭ_k0nmZi':iFP?] 19(!ϳhYm3>vcax/ B8 'oX24R ,9a]HNA  :˯7ntqg3{6iw&$AG:UKƅY¼fOM6mZ3j?o۞P-(( o*G Jd d]u2 PqWjc TL!_QRi#_'SG)",XR4]#C!ALHݿ k]a!ScClёa z43wd\LW^Cwœx(b OߡW q*׏*kgZk;i/  6ZZ{3]e^.=m|v%UO7}I)t*x36bjm}_CimVռiur!M-Na0ݬfFoXsc*km"Ge O L0oL,sU*A FLLH(@L/sxxFԺ;^U$oL"cM&L>BfEm&FHtRIƅdЂyr]5K܍í2su @V XG1kB>ߝdECJ:!|ܕPj"B0X55 7zcڀ~Qxvr+8Md CLK*CM|U߼ߙ>{|>U| _v7m}IΓ=܆ x.kX"(' ]*|Kb' ~+v#-A na:E][:636pV U Cx!?NCtB% 4c{7"\>񇿶jVg y-ֈ-1$Gl8[`SOa{_QYb-NDY{ŵxg/^xyuxW cfbhmwt}Dٛ;vV@Z+pqr}= S-ᓛouPSo,[U{>?$OU'[=|Ea"R㶆-t~F@; 4WPHy)m4"kLPH\ 5 ฬ̜%;(󦳒WdDB.c7[ F9fuS80| FלkWcӯ4<)A90h C!"}Eu|q'j[ ̇@7>Ɖ #=~5߷tA%-X D(+zƭ_n1A\S$,)vӕv!޾,0vä3LسjI&xt!"Tsl VFY|22Sqz:?r_)XzfP:"InUw9L%g㨖ten;bXe^ %Jsҕb??D8*6aqʁ`rOu["u"HU^۪MñCƆL!̽'oi+9j/R/mс6 @3ho :# Tۖl_d$0#F0 Pߚ##-gV0Q<]K((g~sW6#Rڱ^6w8m Yg_Y䘶_k8*~Uyl}^ϣ‡7H7iZMS[K~תu}4կc_:ֆp9pBQZQ.QgN0,{=+7SD%0!i,,9@ _"ԢϣoMzn 9d^G70/ffiw:Nsn^w:Y=6 wiFF.x)&CF6FDLQ#D}"R2}Sgϳ< DKF#k)Whh|[B7Rc`|sEE%~C]ioPA^HW3tf3Iݢ{+ Of|^XS/ʬ6hmUT.l^CDVY^i8t&M4$O+[):ǭ2bN5oD~:͑^2s {G%':Vmnܬ P)uz5;|gyLPtHvKcc+sLr0ͽ!K+:f'h'p~ZrhQ>{)Ac zkzE+% 9m}='DL||W]2\+c-uRKx&w⚡)P6$߄tSe̊O,Zm:!ufJs?Q;q:ʙWYUJWJ0NZS΍UxLkh!gSy E'BhO"w. =R>^1@y jYZ3`q[ g[_\S"T#Tdd݄~||~`}\RZxX(p+CůC'zgthdx)+īDիF̪ 62ϾݙŞyEQ5T8BAߡΰGodj*`K+A+r]oWAg@^h- ZtjrRc~V\[IOLjK8Ӗ#ÞϹmBK'qǿ(V,V{ߝ9IsN Zm&Kzf1|qqY5 }3 Wm$tk PuP @]fbLZ&\ȞT.Ң:daஶqk~foo릾&ƵR3VTohie禐V_M12H9E¼V˶Sy|JuqgTB@@P V]֤Cil>٥WIvյK aΣXØ^}U9rMڹA j1ae1ET]KUCY.Vq_K sMͩF2_8L;#T\ఫщ .3TʉcNl ]OC@|`+3odF6id!;cïSB1+$^p`}dJqN/^3k@e;Y_rJYcEހ`@yOb8`$6saxR;RyĸHKKEvP .r y>+ˊ?PP47Cjrajl*e?[qf&G${hݻ320׹ε<OKGGk|8rәB"gw3ĮR%ϓdNƸNYdf8 Oo |pB_`jm;yqhd6#Ω.ǃ63EaOLL `皥ד,\\/M]Hu:[긠J' d%U$b=bMl(JanCr# N(vgpASCj3oӌd |ҡXGwN`lop_ރ_=BkB\ *y o> W+gwz&모pYX˖7?nH9^Tߗ*tv͛ ޤLꕨNqHږ,<.9c`di`h;>0OҼDЮ+ ! A'0K 4sb}ÅZgl9&G! Db}TH.K7ϰH<|Xbyqb։g ~{OU (өbv]5s/~mt :nɃ' '\Ij.'*[?+ތi ރWgww=۽' {U%&FP 5UT[KCŤ߯yo GBڪ?%Yryv\ܿUlus-+Ov5 ]rLn+Ic)!5ĥ_n\ρ  =h+@Ė?$]"{%T TK(D^>}mCd.ٳA,P׾ ϷV-lgܛ8zZ%ru K钩,M[8 T5gVD#Ͷ$whoBYdPe P#!S|~J5yLؾHѪAh Wqo7 ݃kmጬ~M; ]/OmFb=DZOzþflOup4W04Yg :nf P_ zU%rn5m;&T4G6ZL !n%%}lf(goL5W1"I6tp<>%׫ٌ:̈́ .m5th# ӏ ኪ̬͗HQZu;T-:G.V2lާqErw oN:yOz~ަ_j<ñGm+[3h,DEנi\@K'p9)/a:2seP%s[[k F&Hgg^n t`]VmEݚ'q1YV"KBp(BZw5Pr2V"`sigwicqd㡻g 0IV(di/i=? JчZ(2%E3!gaH{#C X2Zz]"I:h`dJQS"@uW@Z@ŸK<*9)QQ]iÀ=KwRQ c,"Rަ[i8y'X7.:n(!pY}w.}5[PPLRNYgINvfЅFإJu_|YůCg lpFf$^KEG( Tʟ4*$ү~i#~$@ @ ނh$HL]ܦ /gMs P:,*Dzռm|yoK {^wkFB;ƛ O=\IZ9d5"oD\`9Ñܺ}bZt,+O_o$ŠڐgϞzY\Vfb301QzEgIN_S.f ~v5oP~7Wߍ [[JOE9bۯskyɢDS_wRU-7p0?M v-6f#n+ Q`h u c>ȓJԇ\H&,>0T<;i88r09WkmkaejV5ΤNL3, j ,rUn}?f@Z@x_%k9}WqheCf!Ż8+]ƶO.-@'sţtV'Fk7.㫬 dM.Qh3wLkj/_ޫ/k$Sd5ޢ^Y^ZUXϟ&󳸙i |.E??A׸Ǵ+Yg8M|ו.[v[Bs:?~}[%/OA:ܓJ}I2[<%4:;9,G#KmK/ +K w?| hhq4YG/q\hO7-ɯm{\~)Aa ҡC.ȗ f!3Bs#[5?yp5Y0N: s + K")xò]O4lz d S A~|-xPaHLUsҬtB+auNC6/O&D&2]JxV{?Yo8 |%*ņ0ѷuGkO1O|KtR(S0) kdbc\e)q*Y5'BQ+)!7s _N}]R$Iugŝ^aBWruyW٩Dj=N`ėyNh6˹Ѻ4g 2Bh7K4F1qn'`IQ{ 7//Q9bVt1$N2u&;MIQk(x4&NM&7/9<˂7]¨5|ڝ+0 RS~W:A\7N2SϽ]cpˆ;9GGw̧p[1e 6+I S@B>!t2VKUQO݆'} j {ۯs\?Q*A o0{zM{WtS~b RcB2i_k7,.c__a^>vv:Pg^< ˻Ĥ~if諉6R<&e}X'SBN 6)^z(y#vsvPCHl'Gr=w7klw ˢc}.;C5&o&2%#?&j%S 2i_'-ߞ *ww$m,}Α@XA!w5K;JtUQpC? ن/d0 oNwע*ߵє50Ch;?MſxhbU(EӍ#cK&x',} xZh{g?o~Q&~DdՃfuSB|k(̏EK%G<ӻzl8d#eg螚oyhOstWb.tsϪX>{+ m5'>dyK8&9JVe~${;;A4|}lN,[ig<*^K8|ՋeVqF74}e£;>hH.,򏥩>fJtfݬ2 iŎ)Cy^ Xz~9393Hlm8(P۠G~ѳ08YL|-}K UFGNAcĐ ©w{z9JҌ=O5.yA8;vLJus/KEFv)L3]Pݢ&c/S D~" 'Q_NkF<$A?T6"Q𭴎GIDjvxN(/_ 9ݻ(yJ%7ӡ `ޏ]_ڠ4ymj*b֤A6|?5%JXUGh^^Ƙ9yUrs[Fڈf~AzTϡ4eQN9Za"# 덤kc>me\E|yy)ұIJ1Vqyq\e[VbwM)&F^?>}9NZQm1n+s08D n V"noQ}- K:K +g5+[QGm`T VΉrLy߀aՂGCdeCˊvg6V{NvN=v5~&ٚIrE l=ٔs7Z$T̖+ZT[q x*o\ pIhS2 %(V_|LkBk kÌ2#'sq'!a}5 ߲F#֕]fqsuFbܚ x^U5bHYwdbOΌoCS+/g%R{>Dݚ#sbM2бvOujr5T)ct`cTe32@rH^ܛM30 #U)e>sfߟ ym/ѢDS\͡FF)N6FNu3!Z֥.z F>FimSLks,ycq} P^!ո1Eȴ,dT.WB||}4$*:]tdAE[s}MEqnUzg,N|$gpplặߡnRwAKћMPj3/?`Tw[Ŷ8|g9ղQ*]:Ӧ ˿ۀhFH|ՏtQd}Ϟ tT$Dx(ž_}11NVAuʵTg8Y^.-hrȗLY҃Iݾ$5@;HIa.͛o&"OyZ)@mПy?s2r,W~_ظj5R0,_jſ!U*Gc4&T-k]aelxPnu#[VxȠ톽FJ "`:/G@7xrk&駵 8Yw0/:II"_$(OLII젭hB+Dyw*k #d Q7m,dcgoh/::7B ϑO ^%a<\('i_0C2zzn amD#:X/~M1;nr;qݙ\,n Ԧ]C'^, ^֪8ѸеiN<=f%lSUЇ벐ii!-V<[%ʬw KzUQMGϧd\vxh7L6ʱkbjG^rtޕB*J!c}o_.?[unh$9sR81 TH rsPM/sveÞuȆϚf0v۽׻2Yя{] BtlbUeSl3c;k6F̨v}M$)ȵsH/P,޾B?ܝ^_Y<~=N]R5;d$ߑf(q귈z'h۸6JT`U6xzg./՟F>3T X?,LX!c \ N򎵑HwQY4uaFKuK)ҝOݙO ͧo-ana+XTqOi◯PC“9[H#Cg\oSzn.ci-x,M;ff"/^Hw@8y bqF ݺEsKi+y+ޘbN&9z2 FS.ܽpa=3:;4g=R[мĩ|ME>Inc /wU@3>&m{9wbb_/A . @` L} GuJ.*gMц;xpCFۯ_h麑W)n2G{Z־Dw VgkO/%:M?J݉~%)ګs'Fd!S%$BFgSsff_,L.Yk]߽y6pZ.$%"\k0T $ZA=*"rf}j=?"G"]4I(N ҹ2%O݇nMq }Hbulj7+kԛ5B{YZGgfW2-Cd;O.o ۀӁ[ث˸s{O緞מ.:; BX/ ;MR̚0.gnshgqdrfx੸ͷ^@ x53drĨ\u*T3r“]'rX9#nPD78ަ ؕZJl&!bmcjY}#hO?u)FD+omavez2xah]}lIw.m]j וJ! KP0.:8Z# \~ ~5ps݃;LJ;wJWlYn:7ps+Ҭ#P|:v^z;;g `pb5QY{\-sN%R&Lٶkq,!#ڪ ;$W#SZ6sR"bUB?E௧h=.P<6tA9o[XM;u{kքJW~z2(u~'E3yeenV?C\OǏknFdTU&Z廆hEe@~jTY* 7eV}7 di-:Y^ɧHL pA;h ; zG4#UmL3oO|oK.sj/ꀲ%Op֌4)qq03utZt2: TP܏RVVVnJgK]@-G`$O"1 n\q#H FCI;+s넃t=U":=&Pua3I7Pՙ>.v&sҞż !lϣɇE•SeCD;fSiRE tR~֌|j!lL]Oȳ:q8Y.3dLj`\y9;@O0Ƞ~oY/L.\y"{˜4*uVPTCQsU, R"Zrx?lv1A,m٢9IΪT%R P+S,I])F^3IB?SЬӶB@"6]!7N.D*3{;; ;[FeNeMVyaZ&|I2MqK*tѯ P؎8ϫlB? [pOz M`uskyʓ8D)X!@&-g^pNπ0##7qlFJnWISOJDe+zV5Ք $h𖈊gF+zk(@92ȥ;n`SsGwK2<H@X@8 <]p;ˡ #%ravPBocH::+Yj?i U^v;y~x=ъϴ>ÇgoZ(~ZV} /kUۍ;تE.}Z%\.588SG0.Tupiن+,1ؿsqpwXDaࠎvA[@ ElCffܐ!ڃSꆭ~X'6borw,.=#V8(4uZ}+묈*-~Oy}N'eg8d],5J>'@|b[;* V6 Z:GIm='<{3P󾭓:/bIqRioxU~oES-ƞ%oV##^Uozh]sl/cYtz2ִa]&;Wranz'rO.iz\;]Y؟[8[nX;9Y{_fb0hlG}ق._<"Z+R6s\2POUe b+g'ipr+sloQieΆPUw' .ۖAOI[&fE7mw +\wct#-<>1Jm{ ǼȢ'gL3yy&!:|bj:  &m!E\v:PIdͅ{:619owԄ{}igp0Q"h*&ߵ ]'=YW b?9م5r_֨%p·svv oΞ_pG_@zd">DgD=?JY&,TB$\XlRE kQ-D{pkf 6p,}MՏe#n7hh)D\ fLx~eF*$`bWG8*C1[OH MhLԊ.vpbh 5޳1]"q.N1̫T;]ㆿ?{T^vRNoDx+G$]/d|&~;_!@n2uP͊gQLGgK/Dïu-Qr&p/ Yc8en廪?+?J0ΓHc8qHʼ.ShyJ0zN[wɛ2F]Pv('DެX_/^i,ow>YeXg]~7`E۴XDzuűe^2DJAjB#Jid/P0A⤀QGh|χ~&D-7YC}Dd"ej/y藎NLT Ĝh؞)ARx^D_bǞI>u@\ }:<T ui#["YhEAF@<)5L?gT&g\&wR:wZ:oVgZe4`c@ߒnu[#gyeҥjPWm4Ί+g1yh=w!''ˏZ 1c0B/DCIf-ybqH#wi>T+k>{$Sc30R#S&-X>-F1-U%"2O1A 1^ֲV⟧:W^H[[@^Ez|QHgec kc;~' QӬq@|\ t[qQ&?2 C;۾v~y>@t:9pC(IͿcaiu3_L[yktG鏆-9ZG0 `Yʥw.PJ9/:^i23<5:a7sD>xiŻ&$V'T-Y+r@?xg2qSzKhx~ch" aI3m`]oPNBX#'_@Oc NqhVWH_ZV8 k2UJs%*>5]%zp؀+ùH'jOJLѴNWKHSISLS MS ː̓.idb+i gpvW^Q2TIk󽶐ټ$(Hq&gxHle0nT-okcnU $ T\~iΛM*.L*qGog/^]ҵ\"~+}aap}/euA^)(>/دYkkgl|>O 'aې0,Nip=t(r!JsZ1. ԂweOҾRȦvW4Wz  k#Hfm.@)6A}&u3=UylӁy(@aJ' + Xzfn=90حfZy91C\Ǭ;ê?׺{ҳ#3ԣS#4CԃSDtm~&;f+++U+զ+7V1w <.PoyKխn?<>w>& ybhbZ=d"\~}FwGxmnhIģѻ脽CسwW>>&?|yF@c@b_a=C{v5 Ez[!5 r}\nqE띉S] =kd]8gfp!,,L.^bD zO[[Ńt&Sf_?8zpD0G5MPACI-D"2I UʱnbyQwVUf`~<$;=BƤL &PRV?0] ,1b]xpԂwsq]9$ 4dvbMa7ю7!G$'= I?}&ޗ+\ S7H*&D\ $%&Ճ8UTo_y;Ǻ\a!G֖C `QJD;k\.T W3Nk ]iR >M%)5& DC sC?_]K]e\"FNhA0;H':<d{v`AANӣ+ѓeN;WK9.?<"|RWk>8m;n9jnnwhm>n:xgDڦ|SR=wU8Kݬ0zQܨ@@0"_ZpSC].5s/:>\l#xӛ8C),s"bo .f"iFC7("h0BO*u,"'2Ym|Գ[xsqIySԬ%˱rVpI}e E|#Q(Y~utS`!]-] DGQg>MƏ +s˳㛼x(o8tG֮۳`tڣ= #Eo~HQaЕϕ"@JGۢ\o4+ysV56|Y>|t5loIG7ڏ C_,êMՁO`Ғ^ rOz"a s-ߏ>v<53De9-8e eKEVx'?Nt͎W4 lwz^N1'Ķ]cwkW"G SH%}r,Z)VHksGcw] <.%L+Zy|//J/TusÐ/M%vb߬ zdbyՏUIKExi1X_͌ӠT;~~jdk,xXyɟ>ؑK^i MZy߇wco>?P}׼1:vY,r0E~Y|0[*,mUQ֠NwϒVЊ! ţU^M]Co'h'_u },ձsTnJ*-JWn蛞ҟμC_CνvÆS rLz )=umӭgsT˳&@cEq`$+4clۭ~>z]5UJcB  bI>(˻-D$sRy[<CT nރU9Rar^/J郞XֱE<BHK+k$cZJ&v. ,޽D~pCVJ;Ƞ,yyڑ&k;K_LVʭGÛvp=1Хpw l?u>41v\pNCɧ)S\ms?}S)>igڭ1FZICO"X($ R/lA'{1+Z,f[T~Y~PRP.ZM&M@VlדQ-w/I%7ݬ <00B<Ȍ9TQ߮^!S2"^ Ըӳ.c.~m6%^Fyaj?3ҕ RU*SԚ4 B-V}P)(:$8.nwʜy^>PY~I et^ 21W8WnguִL5EWUSX& \d]HÀP@&_)Oemk+Sv!-=c~Ʀ>rb^2YJi)%qe̽=O'gwɶiGXۘނ͑>,غcwvy@ b_>MW (q3032ѕv f|3Db~NuFm2ȼC*}[V-yG+*߇n\k5GpV C_;Aޡ |- nރM³UuCW?C;9[;xڬZ M(@ PT*z5`@ǀFqHBfBW8`Y&\n< >FW=D{Ft!p%qyy1ͱ&~]x^ZaRl"R-2dBA5E|bђL0i -`j)\˸gh]'+ 6oåО+P{iAQ&M$U@,{2Q;D9X>(9^8[[}txΜ$36e? }SgVqӔS~L-_waOuh[kĕVɅH/a1BIkpLnsGm)/$:y(s }VN`4rg+EPs+z;O9ebV&}{ p]t$j仾E -1X6ҠuNE`ÒKR`(J-E KgR4Yu'޽.;G7K [bII`^1xEt{e;]ҫٷ 3.xP5B9T:*-zY|Dtq}S7oT4Hu^{ JC MΌpsd \ȷ'8-{F?iv†{<^|ز}0sCՠl/x sG+LAm'{c>^Mі Ek#.>_x~`{#(MJc7_.Z"En0!B%(;B[n]fmtO:rcj=E{ ˴E?ɚ"1 ^!w4IdbU͆D+ Xle,KGNysϷy#-_l1;}iii2#!.Fqsrs^ANN/[eWݨURBɓ'7o%-11TUo:9?:)) !&TQR-yOɓH]B竌>ݑ0<xdlg~_>6fqMĻa>&xnّ]K>GEW5p7}nn*j\<{{@4E \yxO} c1 Zz^wC88x'hz(9'H!wO=Ke5] @]BҿlW~nib dR8F`tuˮ 2Uz1E,_=jk1?܏5PkMξI+EOkBLU2>0OMҽc㜤|1|"EғX裨]K `*0þrqTRD`l~`C6G ѵh䚖U|BM7Kz73Wh pG7Λ,ݙerE_\H4?[]x*^蝆Xlu/B>U,&y[yMYegu۰ ů"kLl2N_Y 44^K~ʲ΋^z/3 ܽYO_0NrΊ.*/T˳%樀 m6h~T9uYhB}G-+仢9R+^up(A,]v Tw*rI<Pwo~nP hF8O$O4OlOܢ6+ǁtGU+ ZLjM+tfUvdM>errJE(E~mE #hҲ!-+饬d3 d2" ׍oˀrݹ AGF(2P mvZEy\ZiDս2}zLlp~OVh -G 1 2;kbLԵ '_$` cIJȻ'S7(:@4k{-bDžfHuh@{5m%cY|-E{I_ jT~ۖ- udz<E#@ ( kJw|XEQEVo $Q4]e-Ao ̲%-ѥyw*i\l@ 2P,M!rZk)Yɲ@ٕÚ[#45 o sJ7*YafbP+D%{ʃv\crYS\|| djc 3 C-Y::xXDokGդ ,;iݙyS+oX0eR81u߷twrܱ 7;47 6 Z.[D'gWtt_>8f$cc=EgiL~QFWufJeJRsq\k^@4It vp2k ˭x:Gam>]f_hW^Hq[t\8;IZ,w3%':A(.T,52yANdˏts'2ֈ\0U.@ 26 swVTZF&ÔrPKP5(D15jQ(K ;ywwYvȕdZlx]]i#UU#tBVLfl< <B]$\>־z Ɓ|)ے[‰˙ץ?%Uً/.vpxW{bo'F7u6P_KP:,{ P>{lQ,W0B<~dqyqDJXƕj6E6DHq7hэ H2+C\eB 'Z* D>nƱfJ& ,ZBes>{7(@*Fa_2'5Mr7#4-~)Tn,3 ԯdh^\W&, Q\0r[u:X=,^0mŊ%92 ־Š'P|CL+JͥoZZn? {7F rfd_.s*yňF*}e AEFv/[4/U)&]*Yg 1 i[1yzsrd]+psŖts%u[z❺ڽZ! 7^ ^*jK*QJ`xSl*_apuhs7\4RÚi V! Ky7ktLlKK~ɉ.].2M*?чq|k7$_ml8Z%8RMx\󑉷+L;;>Y,EPSa`WU ⒭;yg9 UMm UyI0F5Vnݎ`~wTRϯ-d;'xW˾v2|M` |C KBn~T*Cڌʤ3u؜Q{8V4w p4To ċP%(*_?Po/iZ=Y1.mjx3/e"ܑf{ Wx[Y;zY2{Yz?i+v VKG娕i1>[E{`RJ h4;⮽)GHd"efUX[n?]#) Km6ŝ{lҨg8 zm)h5t3Y-|FOiɿ=QFZ߄(?x\d͠ q\ֿCEEIDD}ws+W7f7hMJJSaia!d $ӂEhE8y-=UyJj0a΃û0l 3Ji1jz{Zqu0P% @`_j~88zstP؍xvޮ_M*z|>AH!\ .v{I]I`+ :U:& A;]|K:"/Zp^p6VJٽ$WKL‘Woۼ ~#; %ǔhQT`R;b5bjTl_n]m篑#xXs@m |!9Kn:C_k1ϩMD<*bCB tGåVr` ~ncQ]e2}h[쪦ע倧F}T^`JXmHDUDױBƜ'P6jk|~FOIm|k̊]f_+^wUfV{h/5&%;c4{iKJ>FݑyMi#O"Wi&"L"cʢā GV(OYLF_͛+6(_9onr`t.U/RWUU%X0-uGڱ|Hs3`OJns Iݽv&Zr+â(r:深]:KF ]y T~_:\yhI' dqz|pڷb&ӣ\mKjS<~5O'6hUu& ;h3&ZeU t r 'M{E [*S~I4oq/Ro>MR4^jZX ^o;8X'Z]˷2L%cV E`aѦjdP2,xX8$("Gz㦷S|)+CZxT"bbab!b6&CĂKX/3͚G{AӺc~ 4b1s"_AdRJHWeV]APSs]%6?CMk| t5OcW`fgT R˹hbF.R.! πSEgܙjqGЏ Ww5v1MO-:,0wO|*z-ٵL hWOdKF7l9{cE'뤌P>V̉\`k yߜ->$}9Gpl B5ƺ.Y!0 9Pt/k&X{2}ݠmծy_D÷"T0'KؐQfRMHO%l9Vb{;c$#)9봿ү>=&ss/PhͰʼبw4)촭 /QBu9jƵG ) Yvk}^ EP6 ՘8xNHqNҁoS_Z8`:?֬OKWJT̟Vvhais4s7p CVGs/ҰpN"Ea\3enуRʲ1Il;oFW:N{k&w?Z<{JFR~y8FGIxFG%]M%~țb'TEerʐ6$۞{8Z%rã]2@+=ҾI+&LȼVl.3iB,ٛ试_JLBƴV6j:’"5ct$9h7Ϸ7&낢?L 4ʭg譇24 f`'֮n +T~! ;2xzHOi#Kd1G1[X yp{S;$'K7g#&yņ~djI~J![("!\-J).6^~fAGFdޒ?4EMM=6?:ws2v!vbb?du''{S}_?w|bG|?g%PKo]c\=$wZz[> mci'Zow>i[[ɚ+V${b BJ_:vǬaA0N0/_,2|R8 S]=_[`iy%b*N >JհFhڍe\C[\;sxx%qܭIt'a c&X֦SضU|CF\9_ek"#RD.:" BC d@i i>X"$   B@$mY\gew!kCQ:pt/|( c1`ݩkͻ/itt|z=\NU|6q!NN|%Gyi]paV/ z_A ,=)JUoIAL'wxS-R3_BK- Y0ܙ=φ^qha-%c|ϳwSG՛mt^G45'8z|N]c' wz;eK=6f51 N[4cUب2lp9VaB=?敾WQ1Qoz9L?sOxG݊ߙa+*cq\$Q$A[?3CL^A}Ez&(R_)xy ǹƹ, 61X@ҶEֳ7]|r,0WK޿ۅ|0}~0zIW1@b3v Bq2O[ltU+|^ES]MYI_033N*JWVԘ\Z[y xe4j0&w*bvLn&o=z\FH7O25e!d\]XܺL ǰ:N9nnMV7uѢHW6mA/uk#-B~+¡8n+ XV]kdz|XA")UEL<|m{ψRUNoi%&aζ{@k55Ĵ'z[5#hvC}*Av0G/ּߥR*R&m+'F ~]9y*9%R~y J v?Dꔝ Z \m/ikH[kq>m\"eub%}ERѓFaɃjeڈD}DHHC9s(Q L<īٺylo{*CW)T"lt2HыaƱwRTCE^ё ͌G;){1LTj;5b#K_$@VOKz-X*$I7X rW*Q$R]/TW6Y˰\Ky4K>PYņwŖ> J@S@`6!-CѠ6c /|`u!,< YO;%zL"Ȭ/_;w{ -yo5sKb}qSHHQ,#B=y>a넼NQ26 ЮJys$Lrk%OV s@Ť-Q7T O0 &.+WH' y "T@*3`aT#80հdډq J!Yz+;ㄐA>fɈ=07M8EtPפauڴyÀ]د/FR:LOyc' |yLs>}*Une+9^Gc?ѤOҜJ\]s&V$>}. i rv<'eW>1%Sra:'u'(}"J5My{֧5 ǷI0g~mױ)?f/j_c_ꣁNoO߻? 8M5 օ!vmR^m8{i_FaB0f}v-EC+FW0ɾ|!!!!&&"gςy=z`afww:;F0elULCεM&gދ؅%<zn">~*pI/YR1mQַ¸"Wl&Y)HC۷,Dh2ӤMܹѯ&[lXğnU)hb[o)'X#B2sgƒ\ڄb|wyVrTO;gUi$9^&Yګl̟y߽Z6RVB<Ҿ­p s*`d*TzNppă}Klu|+1j6CCzaZ1瓤 ;s"o9'KYg."2Z3t>隑L7X>+ 1ӞWS\0NN3%R=}dt!'^5zt bj)γ*x|PK\5Oϑ3m mbh.Np0H;A;S@;A;>P-Sos jz 14Œݮb_ezgE(3ae[gUsw2S"b5;ޏ~ }xtrcylpvsV|N߯ Z@ևzD"\9nf>ЦU4G9PKHO(WH β2Y0Y p۶] ֕v2q9^d!ifپg} g;:)7ǹ֪rS(~kʔMWHWj͙/&5+E>HB2&m:o{}PIlV|Mp6QlIK'h6?mZ]l RԶM6c*q 5ϳxݵ?z?tmaŲ87}&h0L=agy{*=F@"H76wkb̞$ ]mG9y|C%ؽp|=\C11ѭGoIn.pLa1 ~KSw;m;)B9Hn5`;<2Ak]|k /Q@[hdͽu;~;9 @o.PX(4nVٝe)P 05riG|lm%,Va +xʉ~@%4@_`9IuPऑ~ *QV!v-egE+=#yz7 ·p.`'K _z2e\$䁲0BBc|͋M0{N{x B:~Ly*m}**~=X7`7XڤϳcGtz4aa.qϻov=KQјe֮|}nm8XMo`"y] ׹yMyaG;$SqʦHoad)^ɸR`<㘻YxF/&_[2aI- ua./Y{ԥs#_씾z kx"j~@`:Utjrz+D馃 A ^v>=&YyPvm6F^ ;@"n^bKM!C]bӡޠ[hh,Z4C4~p=F*(WufsJ9*gf٣-Y^ ]Tp Z#YĐ4STJ,<9 ]ѭ?Iy\ZDyr^wC *7c /q /X^dpepUN 87=T\)kloaa.>Va0, @@ˀ]HQks;͔f5)Cy?PY,>yEnܭ'$fdSkU/Agٺ,ތF^r^\ޯ_>*źHl'.udԝ,Wj5zvb)8YkwHdXg+,u ][;F!)l[8{'Orx›yJZiR DQ;7]Nßh/3OP0xh2 oVj< L^UD!~c Yd>3/=?iνm | %IJ/OI.诐S׼@%W^=( 1_w#/ 64kdh~YL7y gTuvL'kL2Dq ϖQQoIo1 кЖҶzi%#gk5İw!d7ҿ4FdG՚\=vlya# ˆ(K`v-$%NAɌ:H$W,K2uA.h~Es7aƏ id4n%ߟˎ l:J`K}Nr1)_[Х^\rL0t:CIRSl"ꝕ+2_BK:#dRY{Yfys,=dc/T xoޅ's8+3m&\4x]W+3?AN_3fk'_ wpVXWF*Y}/hvŭƢ[s Bf(hl jx eUg?k^?~fQ*n7\S@x`Vx-e4|w; uu|ӾMQ} L蝌cYɦ}a8vNVDZ˟&9-}{Fw6Axt0uPo8|\ky^:׹?QTJkSL=\su'MzLP̿ QR`^oRp)!ѫock;ee?ؚ]BH,pC`X`ɯtAςHB:YeWb ~2\>)Ԣ7PQTV %ԘN)7ޔΊ& 5EhXʦ7,n50-UI4 rXs @lʵp,Q{4('}P&n60G)ߟYm:ɾݠ` 4404 ԿǫXT G;ύ\eFf6ӻޱ=aiTJH5 UM-8º1 1Qҟhb2 >h~A BXCGPyPyPyPO~|ķEÂeu UuJiB#5懈7֞,BG>t~/j 3_}pꐮM P*A,Vԍfmmi(n0̸E[xR Z?*y]OS(g^qTP¬ =Z=?R@*U FOYvlk\D d* <kX'EClDsNhg);9Jaj#Vv..V&A96*ƒZ9 Т!:d_/k{}OVa1~.AqSjaK'hiV``> Lr6quy EWL}kÔb U%ը47$7,no>}8rT{) \8B^E>K -NRT>&?=}A6fIr{}>KЭ#ڢizDkjP[%cmq&Uk׌r8D7 K wy.şZ^2G.(P-=n9ɼ@|S_[_Sd9؂hS@!/8+ SϏQ.QK]x[a:e.T 5~/$ D;z_=qGk/~M%(Kz\لg\y\ZDy8 b ă䇐{˄ۛw7v_K--kn*taT0/Qj#Φ4̯dS>aׯB?VsO1.eJ[U1څ~{FSNwhFZkUs#tz36~9Vچ?X YZLB!O!Us%#] ke'B?sp9u;DMK ~ n^k`qW=a]͛&6_yOxjn$;7@77N;3G7L7E(i)P}NνI^#>ҷcJ*+ u'1+$ś;3D;e˴uEQΚk_^ 8!}ԿN }{ڮa 兌A 9tpw$W5}w=7m?IZ[i<P.C(N ,~Jdm_M}P{s0÷E_@E?tu*FfE4xTsț a%۔qޑL!P䫲f-u3;?2{|5_;\ ,6\Ʃ}Ւ'~a ;Y cT>k=H4/WDg $Tc+,?S_vjgeՄ| 4,=RBu K!k`򧃉I޿MM7~(/P@-2zOJ(]l~ѺY':|:G>yeH @$BE[ї]P6?2c-8Vgg@t~Y:oQuWs&$g J cuE֯%+`D:W]`vQj~ƎuD^Vũ;p%'|誷+͓7l.:-niyow Ol(o{0Ɨ"tl`u/QJsc~C1{MʩN6Gx#-:  ;Q|"@P.٩ ^    v "_e#;OXz~vό1wjԦ@tTιHty<-@5LmʾB&"eͺfm}G[dk%y\Z@yJtQL-=Y'!y'qgtt}-,V9ߨb&VGظOpdNoE,{I§K54"O Ʒ<&&mZYz qi{IQ{}R^-Y3`]/@pCnk`ph;X d3\dz^!qM9(B0Fp9v5{lʵE1OEH؜smKt/qoUEtsw} $^O4xϹه.O_<]<#ΝuͰOr)χoܱ=aj#|LC:a(pfF= ._4"P;S0B<tvmïO7,*>^c8 SD7^ ֱFutbэPKSp+x=t%b)B3Y0^͓-c"f 9935&\[;#MTncK6DzuʞcRm.hٛM w+V= }e: =L)Qfqo9kTX~eiG0[8rKn>6C%ϛ;ޗ ;ҶmsWHYsJ, #~%!\{%ِk =N;YH^aY`.J&4! z]hL ^6?q/A7Oq/p$.PXk^|N<; ֲ_0Р>B٠?4 vv .@=]7tȚAx?Kꈒdǹۋ{='!Gw-ey-\:ʓ_!7?3wYٗ}E OU!1ZaAaV!^!^1i΅nՎfiC\wK3007\oݏ?]a4 +e*$5_x#-ֵټhArF8E&:[7*6N+gݛow؆YFkNS.|Q&~BdPm%g^˄A?]ש@ukF胁/b.xË'>=Rwn2UX): 7Tyq}V:+ǽϺls BgTe4ms'] {yoYDi\E\[pBVץR旣CO -v7rw1fNeٿWx`ri1itwb6&+VѹI"xzExe uQ&{RRjOEYHO6ƅ1ʭ"pylvfte3a[E"#X+&ZaB1Z(2p3Ib_=_ GwS tD@9}5W˃dÕ/*sU-r"FU7^-Vdwuofo'_]/7> u Yu_{tpbv{\"u3Xϔ6z K5$ʇ 1p]LѦe}}O~ڟY:E%.MټKiTd쩂ŵj._lW̑N3ti\*,$Y"nyCYהnnVUd.)V}Ug|?<+bjX oz >}R'qM7u2֌?뙤͑_@X.xP5,u0Be?Bڷm#$o r/4IęY+G̨+[=- Q41m6^6B?p٣ +XW-חj4POgh%2#5qnx|dN3$v^!i]A'Gwny0;Qe$J[{dsl}<:[<:'T+քNXgW?P A]a^{:ªdzA&Vgɭ ۤ+4sti3Dus-<%8 {e~Fljn8;yA\b~ G֒(3mj-^NPtZF z>޹'vx)OŃ8E"y8U$u08gcji5~bҌ0>ׅӡ5xO)O9r]Fh^=jbl(:zq|vv|i;2C_3.#9APؓeh{ՙ2,J:JU6D9B 3~qx0<_v3!E-ۅ_-R<ظWprm z4^=$VaeT+71y5 c<roޠ:.xYƷRU>9u`ANeƱ휳⟯y\Z@y)rܴr9Zy_)}?ةx|y2z { A` WݚaycM<>VŅ1k@w@.U+/Gܫ:|P ~kxPiNS Y$ arKT#կuTRçBܥ;<99WKHAQ28' /V8?:cg?}$qzbmW8M>/gڕTCbNCoEݏzp'̛xӍt3t3t3ttUyH̔㪃zWht ^)][xohliMWݢ݇ O'WIH6l7-0O7@O,I@ʅ# \`VY,  Mpk9QL*Gkut J>IOF^Z'\*WNAC h*zSP0i'T땖g$C ~ Oq/)B_W̗(1`O98DYzuQ#cq$8{n]GAoxʰ,2brwz/z;Q2~㋱A (A_c@ b^e˩NU6kD::lgDx&Zk&JV">zK/\F8#[Y#h?@mMʰuw[r{ե;`@@dVGq5c^Bw@]y+&`dK_ԐWT90 `XqՈsmo`ǿ"V[h`%cg] D≯Շ|Hޒ}u9ieCwͩ1k`lyzftl2aQego)cѸr[A0ߨ> ?<_<`Ed$Uͬ\^g]諕)NUSWL$AWP?t2Kg7k/g=׿d슝j5cUU}CMlStK[ҤjK>WT*nW˛YƟ/.5lQԯ$ޒFB* (l=}BkWL{Lz1j6>-\#+_T-Qc0b?`<}An]4,آPbbQ>w2Jm||{Ԓx@ C7A<6%&׵]!]'/|'t%8`4@*ư#@RYrab|(Gh|9fJ艶pqZtt2 Y٪?AnOa_ҍIڭeLݒ \B:+(@*NG46WE O0͌)j!~ҹ7Y{f]L(& %WGa&p ]裂7hj(-`װCT~]C2$i?M38l[y3Z# $P6ͭA+j\+:N<њpjpJ)twdzө1;?t\~94L |/m+PK m'fkn pԋSulv֭Q9+}dt;{eTnJ·颏-,-sMpKlq{CAtvlD۲ə徇ϴElzAtMpS _GgiӭG=o CZWW{s[}_e< S^gs )7D)e˞*B|Nq%w刷vg\]hqhnhFhRhloU;zclʽ|ṪErũ|ض[ 'ZDk4_J{2dW5A{45cA%y?q4vo?f 7pU3;MarNn)YնBnywi,T5dQknh&@1R,>.QM+O44Fi~Q.=< t! [qIֽjnP`")@>#B:ꕀ,L&N)BċW$32)ڎ-ZQE\Zml6 SOboxk !FO *I? OZ׹uOU 1@ n@T.WgXx,% w ."ұpp7qOpWNq:ΰ -_|MsEhr`-Q`+D㰛g4ϐj0a  `:Z?,aTLܘi*8,X\#+ ]iG^2@gdH[y>Q_ȊH7igEN!xZn>_cbp0ظh\K<\*8x( "`aW ]VoKf?J8컉?oO@l2 1 c+6]61 X:,`+2#K۠+ww=VxUoU/L dž"@03 p `,l zr؏;Wmޅݻ? ߇p+9#m]/UϣxTGӤ _v玹(AOyU?.>>;{8_oQ'hȟ=H3m&tA(5Og``r0: ]өo=?P\ݶﻰ(! !@HH=[pwwwwwwwhݽniy|{}{V=5`VW\sOT)ɭ׊/{AxLF;4~UwʝGc<΂bVҤ TL!VQXpfFcя(`%_KɘF=gi"$Lpon\w.q jfq,u}s?|LzISEѵςgh  d d d jd~9yHiv)bAOoņI?ݸև3* cE[6Gom[-y$O)N/9lg2Be09fg/.6'*YYzvõXiyc+E;-&8A>C)_5z\#jB+C-B1;gnπ0 ~]Y>#%P9Z{S艮ӪB_:[yϝ?&9HLIj P&x|E]I̙ZW6bhíՖ'2C2#c9#MFN1r_(Qmh!&4"43_M*hiULq-Ѷyɶfljcu>vMwx\F Cu8ךP,-CA3I5F59T57L)=N!1U.:G2{MXA'T1?uk0T}yPHAaccH^\&_d'b5 0_5U0<{7gD;Of㷪o5Um40r~-1svmEP ^v4Ir/qЈf#&Drx,@"WT_)wj s'c/:;j u9m5L[9uFrN92 jHrUrXzXmQM 5ڡL!t6+2=Nk;KL tS3AS𧲁hYJWy_YI^8^ HFԡ *්9{iiKi3ii4\㸏'qxqVv)wAuNCg#r ~xAc%Wl( nB}ss|z-s.~#WܶZj"D)JaĊ1hJ4o)F#W1)nm5|Woǰە=n4{EYI .*r. <!!s͡Ou2Y ?Ag) Q3`^ >ͷr)ۂ:vHxvs}![dCaf߯h 4Z26TF]4uO] =PG|M#450Sfu:UBh䆲uBgꙏN^=c ${E0-Z1-E wm{;Km/i!?]翕`Xpߛ"B,-[k'OX]6u<Ҹl/.OAN)⯙ѿW_EBL qR߯t+ɓHAP qj3}9:(#\&xTi5 G+<%Xʮ6*%-&KT;;Vu\ xyp 7_#AQM o;?'.s#ݶ)o:Nzǟl,-LIz$`r0q.vs ˙iP\,SF16HkJ [oŻ^*P'<,us-$ ,UXwxwz퀳TZ A)}΍#Sq&6BMŤK`rռoI#u'=i #Dcp0B_gTF ,6n%g +ɴs;S!PAAקIow(!ql0V`T?8\n4qN:5bZ {Ų~nSW[ɪ%tM< JI6箑ǚG[9kT?MBYGHII@`0eŖdEOmS/\N$WkH# SAh,] JքzΘ_,oQ-_^?5r{3&!\a 5Oץ1a ˾O{,ޅi(p={ET@p&jU8O캆ũ"2`Ÿ[py&˯nW޾sc[Uq4ˋ#Ib{k$ 8MT8Ŝ$j74,}>Vqd9U~>:qvć F&M-vlGA=$γ\wo-0RU};0S&~8iz]WER|{6I*>I  .;we`IʽME-!61Xp|Mz['N([Y6?I<#PR36>q: f|UCKErdN!Qp:٫yj^o_{[kvKc__g?dxׯ89.έ,:~ YkKs+ n.NuAr2חGtkoJW"Ͽ O2Z1v霧)c6K pC5ꓙGo 7T~d6C" U>s^|X^k ~"f^_h$! p [w}Dܛ[{_}[n:lCuBdIDytyE467qt~ɚߔjm:" ?[3Ս 1*)70 +x/Vk4]o$puɱ;GikG&fo/PlҷϰV}m=JBRoF -}Z;DrE4~j(( l9խz`lpkc1Cx셪4Hng|Q= yᵋlز>S{%gGgfO.GZi_Y StMnSriB"[kΙ1A,'6EDPlJ\Sh|)m#i5k`l'rM!~qbar~y/ݦ o~d.bS?Oԃ=7-CEVK/ͦ3|q-dzKB XA$e6ޞڟGif+~cf 5uuҠBiUnT-}G%gP|Sm<>yt4twt u}^h.mVZjUG(+~*}E YK#1.懬%Vi_|_)w6Ww7W}Y_YI+]<';dgLlG˷fdԇ3,og^U>l6kzkM]p}WtWĢƳ-L0H ŦZ}/@7p.{6,Zm573E_ fhlqt 7 AxDH8eəF6q0v0s25􄙛,jKϩ⍫H)TJɏɈMЍ /UKC3sk52u -g@r=9V5~~: 4Q8!G=EFI)\͌:T-}c=|2} m-s/?J$ DJĹvmujv,O=w\K˽=7,K8Wǀ%9ڹ,4r׹ۖ82<-B"Yd ,N$zfvݮM(B~%3Vi1=cFcR0/::{> cM@(Er-l9kdSknldf/cRl=L+ krr^YxAKEAz@q(kۢ "P&P9!P-_Wo"{lshtjӶ9-bcCOu,c̳kS4nu(0)uvn 3鑫lq:[z?5 pW'(Y V=.ZU}^;k,tzq}g{s}urwKBaHlpfX]PzAϡEαL7a@Oj͒^{\*J1>ܬէ8iZ1{K&W̩zR7Qޔ.0ĝ#6U=$;޲ Gr@)KHw}}@ "N8*YӯxEP#nwdSݎ*~ "yNU-4"x?TOJ&ھlm-ٕ̚YE6xaMD@A(r:i"TsZ69H~ /,!Vm='ב#XVőKG1pl1<e@r~*Ȼ t M]"ĪdqҰ,OLBWl`gk8|;foMϑǏחז<ӾdcwWK✫ȳ.%)j~/LGGE+yY{ѺۦՏ׻ /aClm:5Qȷݢhp (pr n 4Q"Z"3]&ލ<>. s_uwG0A8gȔlۍχ"Т_$l7]٦L>LFMSsYfӂ? Pi#Al.C~눱gNz| JK ş*{>ahJ># 6Ja3AXXr޼x]^YujU!7gJr] b^\NݻBѹCt~~_e)1ȸӱ6<0l;ǷBf.pˣ̳453dQ7,a&U?'4x֋/t?+t+tN.|6/Va_%?1ð2dna'l%"1;q;$ A]q+FP5M Z|s› eY[+q"+%V:̿SOXEJPK9H룁[[7&!0 |ԝ'{&A;h]29&۾v;Nvvvp;_I8J;MWH8SlƬE/>g )0N(a- 8QwA ũ+>hsɳl'3ի${UO>_ K%; t\Ub_(}+P#V#%ޢĪd~T LcKn{vy0N ST0PjVq1Dkhz{ ,ds-4\yA{H槽kϷq6U"@< ܟO> qA |S1S)M˟_u`?_F7@ym_ nPwsSsy޽?Ke`xKcvrO}NK;qz |/n2d`Ϳ݌/4#E N,OU%]<%gbDJ'_-sƦR&U "GzPDG+6Gۘ@=ς'Ih߹p/2[)yY]|u!j_'jFȂwp/'EjRS(#z%_ .B򤘮x9[L7G3P\'yfats&M0SBEguɚp/m,:Ŋm/:^t:O0j#djYfu"gV2 QnSzzox 4Mg~ ѣy |չX5/=8jҙbԙfЙי7,/@T`BٔslT\{<|cd#L*ä́۾Dcy* SiD$\ȵMxt|}S__'<¸K~Nb&{v3ۜ XX#Bֲ3`:f;n:;\A74ycSIG.0wcpx4&E&զM'Wre~+p =<8eQ]>+&'qrgCTBCq ".~;M i[ QvKە{*&%rV>WY=b(oU"2pyqW퇢DW?{Hݴ"nMm#x7L)/Ryz;`duRJ__uc{w/$ c1sXcn&X}l66L Q)a1 ZgF{V+SK_DQD>dhuoZz=Wn1S|P` Q1fQJc=vNQC}O!aD(+17?rfl2.Sί%@EA xH{5Ge&c@z^$Z<2svKH͹K<ʇ񢳅-JGӇyc僳=l|Lcu#{u@Qf- 5NZuqUG_Mj':;Z&k'č,{[؟;5R4c=zlFtϳm<-wb䪡/<(omt/lY >o> 嚥o;:7]?>}-I\+8]src|xg $P!_.S+V!$PlRީW5'жѸUW"X.TWՌhð!>>v0lؤޠu|r#t}SkO*if^&qe6i6U`F(GG4/A#L%} j\x}tLW o555Ribŝ)_+zu=@ B c&-f{⮢ݔ|G{iگ iQC ^'(r*//Or`7NɝpBc>mN'zY!1l^ ɯ"j8[,5}6S-4Y.zH]2𺣞[jj< %9BO ![>M6 \m"m\\/*;%8&L:#0<ǑVw)*/՘ l;{ ׈d\3 j6[:?ӳSяR-`G}QG @ {] Nz}M gj@x&hG_]x9!P /jd A;GX&FG@Fn/?-p5t/T-8S#stBoT$Sv=labtqSE:ן߈0`q5~[b/!ouO=l<6;3[.MU؁#״K&D{XGy &,#>֣g#sOR&okQ`mN;Bow[7/17q?srVm6@{Oo n;pJ` ǕB䃾4Ls;6{i""dQ߰eHߘ3{DC'/rQ~[ƿ;"x8/[8y:I9kK$SfClg5E*4<~я_LBi珨Wn-S,͒L= ٚ'_Z:'-%[K??Gü4칪R7r.747.j^祴4ԕJW@EEŋ?MMM?~ $$}eF졳*[\?|7yZxSweB/upћxZSMھ)敞7IYCuy˗y4&>w1@ݠX$^'ۻa"NoMݧ~ xmv.މ,atch'8jR>u$"I:Gpgh>5ޓrJp GsCoeT$; ]A>Y\\%+-&D@U|d&!:,нr8mMcs,[riB' ş߭эP((M(()'ܰ&oVA6/O;EWʣQ~( _1:]ުs=m3CA'V(ݪkSd[$#7.r,/>}Vu&bq?qtsX$ctW&T|еWqaNu2m(`KUyogfzGvxAoaf{ޖœ'T76/RH;99%^^6aߞjjLuRΎ4Ϟ'镮gݽÇ:uuuKJJ޿wm/毮zE6C{@v!jAj0O.c*DlښȒw+"x:j>g m&QNMU\`m-hM[MB+Ks@`fZCv}VYf^Fj~Zu{}pGZoFʕ%⽝wǝt } ᩒWJ) /z*R?*\vHMa4`6@ IqQ*}$gW9M uYQ!r^궎6JznZfvN~Ƒ)ӊRs~Zf[YAq]^`Gêh5H<\+##Q S8޻~ˮ[tSNCD bP]KOTTo 3NPH[XϜ5%kvjmv3=1l.EȏeqfrNd,bk1 ƼFBIPTO`h{irAoM\u fe*2ߴ wnn9?ry^,ͭh݃P3k5jc# f7ʎQh|!i}R˓]T-] b^ 30fd\ZeXb:b醽:rrny;T/Q`<|`?[+:Y?B(S8gsYj#[$k:tL=A?pU({ܖ5Bb1X^RXXST67H"@ A rBaLE@g/B}2*`P,R7 #Tq7㡯'ü -}&|L.O!հRϵW-ܡI?cL>2^畮t+^[[KHHٳ?8'1gsWHd7q2o=_x3&Քg;ЅeW׭yvq]~[DZqͪA$4I=UQ1.D;eGm+2뷅O> 7$w k_9qY7/ee\r G$ʦJ'DEAʞֆy1ot96&\(֢4#9֚nSPcTLo3|]|a6NI 0Jp"s=}iŢc(ܽ*ؐ&z6bԼ-c4*+$Tgv-gBT~ɄHXʗKj8{L%3eWJŪABBBaB.Bf:2$OWD}*ݳeZO8zߏ3l?f(?8}7(g}jcEu G(D4)D&_k{[4'ЯiR—H`X>3x(¤'t!1S/R^Np5̗kGm.Ekv(UȖg&% WSe9_M]6z}Cw}̃,2K9geXd?몎*^-V! $ fӴ.Fǹ$ |V_Z<|;mTjRYr{oƝ2)dz9iI9~kJsc1WəHp+`#HnJ*j5/)ɒYjz$w}0&gb{+SOt~ni-*噬 Bʟ{Θk6r%Pm_?2[7~c:L2O.}xdmSJɜ;Q21`i! T!KW ^s1 h,|_GG4boT\0\4TO`q~SlHWB~B.Wwۯt+](yii]6N84jOqpvpOuaϾd.ˏM~ro3l~oQ͎s_t]V.Kpi'yeA㲡/ِ@p qpN+_e7nOp!뇈=̡?3l. & {9^gf O {1v[Ƙ|T@IY=|UMsN J?eP॥ZJ)VZHq)w;">3gw9/|'L&Mk@H mD""8ۦ.Y׌!i'wcFQ顈Ä'}Գ7_:{aiZhSXjG"ѡ>Zaldܰf'ql}l mDT#KØB $yk&-L;BEz@z\B:[z;w+)PucuEψe#Փr lio]c͆,lyRzLWe$G0R0)TF#%l `Dm9  <|z4(V܎1HSRIѢp7G&X۸_V1FѺy&׼Ow!`4K4>1i ] L̻$X]nW;yM}~"k9S(ZwDgb2U=l7[]"m .W~DP@*9i GXV}! ` ) Oe6גgTw/HN$p "$q.4Mvއ nc7q`TbaP?SH8 b S=LJ%yj5%?sN$!']ys }sVwzex]83?/)ĚK-VBgaB&wiWꀣ`)|Jjh' * y2j~bkdPhE j@H`D" #k&ܯlQvf*%O"OL0}]YQmwҵb`G ~(pOpOw6ECE6Q~p᱆Q_|>os=,;yrss744ʓW6Xܿ˩ΤwFrT CѰzSȜw_P7$ ys=`Ai<]i2"ysjfm7mI NrdW"pfV ƥ{'oO}oYU8'>dl [ϜK9T5 Ypaxiog|"wԊH58QJjyL^53U*U0[kK޿hG.,zԝ}  \ey -LcU ~_p|hl9^%\wYuԌ2 xAuG0+Q_7f:Z=%84K9;O:P؜[#`:rO%2&۠FRTfA5Ŝ>2X"x2s^7PxL"XeZHMVJZf`M`cclPlrlIlUlflD{M/.9CPyv]Xݾ_M\^RFmDFRdA`SH+z/jTh_|KAKSWpyjJT_ӰdПtZO&n"FAgWml_/ Џc}% KF%K <\teWe\d4fz4d \gv0@]lj^3q) DcF} Z~{=}F|*80~G'u]=gIxVlLOMN Zá[,dxxxI$˸$ȷ*&O`&c 4,7J9al/B2$1BOV**|rW2Uk?eׯaT`Wn1TJU{WxkesSĵ Zc.7os)X޸0qdA_PX~$p>y% BgzOk A#Oi"Su#Y"N)J"Ez;Odz8c3rHS6{L2R"eM9( y t'@/,".mli`e)٦j5<+`[^mXcլOionQ0* q@j<+YiXk7/{H_6&S[Adn8ؔ%KݳT\TT]R4$"l|tȐrq^dUSms5g1v "Βz62r8I-1G$ZfϫqYz]+#' Zr N5d\GtзJgx d pnOA ǟ727O2Ms7UZjHa3Ge%Mk>x"ܱ+6P?#]="#2?P(^ Z9/L!'P6WOm$@{;1lÞ bw{ QƪU WWi_+girؒjd 9Z)y~@1|&`bb%,{Y̤-))FYa_y ]Πo7FꟄ^e]'ܪ6%XS2ltjw,s@} zy ӾEEEnC)C-yy>}vUõ[εt c5ƕ\ĕۅ~MbcqD6Dz\ ɻ9+٠Ԑiݕ%g(w$i:s7 r )Oñ>!A_ܽ9gSO^-Yi'w8z="9 3 #*5#^Q6ʎ6I?ìvvRp确x#LS!wv~/aK즾(SM=Ok;of9kM~~~~~Y~Y~Y~Y_Aʺ7ev~õB`[,3]Y`opAꓺIə:ST 3zTCSĺ:9WG:z7\ 5;+yW9cdVuJ\xL9UJ|6QLY+fbz${4!MUEc]ΛWXha$WK&${kjBVLh,J(qvI4kAoolW-| .5՘'&׾nRM}[{z  }W.Q) Wk^{Z^^]_VwB-$VK1Q/?l~q9D{RqZr׵N8 p^) dJ9@oX𡜹g[d(G͟$[0\R֗g;cr7 Տ9wұn+ɿ?mPDm0rË{GD% ?!A}я0?l.q6ѷ>on﷩%yا*m<9[$mUp$yreeuirik}apyRҴ ߋ]X'Q6(A:ܶF=xrL{rJeL=M2LOg n[|]x A:  yĸsQR:$2RS&nV*I`~{qS§O4ɣ y1%>2nrDktw"ZT";eKBmR8m*vg2=~kwW}PvO|KM Q$ ~#Qc2]OXv|&M˾x+mz5$W3T_$ު߹C 61o/JG"5Z1MδT[!|pB9^'Ld+fjNқ[m>-aOn-Rw묓,ә&ZRK`*wۧƱ`Ll]}MjoT"zEc7P'ܗ'*)e@)zML7U47 Nn:BV Jo&wLѼn]M8I5%6.lYƽ\br l~~,YO5+ p߾&z65W PRkNtPn I24Ώn"_:AiFS>H9/{{#6<T3D@+DL#g?o:=K WJ6< mI2.Se\!_,ѝp!8ZJY ~@`@9͹Ҧpw/3=wJFRO;hW\Pn17I~2Ni}al!_;|[~J3,Thy`7$X]ؚ󽮙|P8 M~ `8X@*tx!?e<d\%4D2IإJ;muMqk<1H I$6uEm||?8<EuYshzU.,R6Z4Fg7Nk5Qn)OhLӯ_,cэR+o'\[;n{.:(ew}ZYܭ9|ky`M^UqtA9o;hN} {Vf2vvvǸ)P%7B4<)>C?E..A3/F*Osxw px[{6VVQwp0KCM%ҩ+#4 _݃T! K:HbhO8,knqtTlfI)m0zInb}!F˿d{ј<0 JĨeV3fu-ӎ IZČtGz;D$6jm@E<.drɖ&!7^lp<6އ_M]m~>=z G$KS"@W.7+֢&i$hhfaghf\6X6I*a}E\&Kr$=+\[FFK7% " /v4 ״q_% U:VvyN_\_x"x<ߢ^u9~z!F88eoG4j?jɠtBi*hŧ`v)y'3+P[Ò-ZeQ7Ӻ޲iq ?rGlX TE81a![ sd ,=JA>b0 _2Jgy>skv/3Eg1`LzQ5)~frz6,^QTCtBpݯk>M{"C&[ޠ!s͌D 0]"<}b4Hlv ^MXW5ݪz=vZsx _Zc6^7ѿ@Wםpl.Y)dQdMR@ _k֪޵ 6׍k&>zڨyrt2gcIഈ.#\8[T"F3zH.sg /ހ+h.^_I{hN*ȩ={W.HʩC,toEr-Kq+ub|g~d׊;>SY=ܳ< bү6.pL(fjAc~_.l&ZYf.z2*>w b5sjehFtO)LVNqN 986Um14v+v%F z |1X=}sLk`'A2c$fU;yUƢЖ:G#$wx2G]+WOd)"Q`p=s,ȷOoƎ[r `$;4 T$)3DLPCwNv.SOD9z-N x'k黳Цf$*TEh wWЦ n~}D Cp"٣ePY|/PmV@;'^P$h7Lg*V!7wͿK9'ө#iMHi{pLrϗoN_͙ԍI%?mvت8TzonEEXEu^9sC\)뮞lo9~yREvJ<~/ {̟'dRӤqĭs{ W1ϑ0O%+BڬPFۛhNA4IBHͻVg-er< oumÔoKR'\Nf9#j=9U3p9O6H!8{{w4TvcrL-CԳ ?Sk2 D` 79DJf(:K QR i6+Lo}6 ySxkX,Nh/N0Yqm}T8~hA y|Wp߻B9~٤4bY$6UB5A=8KsDĘb}#zZu{lmj9-:GQHti _yBU_UY+fGO8'85,^Bh•ڨ9ykB ƩVpuB?\qcy7L(R^YӪQ:aAO޷f.ǖfvjA"ޭtC2= v$\$JTV_ZfKi1<[kǩ=zp ҿ;=݂@ ,{YDMܸA3=wZ#+k9$_ڦ;(6xuB# FA=I*®/n`mi!C܏vvI<X ˂-ҩ/p'3 ?<;;dgוQ(ǐRn2?9\<JHY:U5YLŽ?jFIZgIFfHȎ' cD{73olP/NxβJYj0!U Iq HT-0լrd Wqv0vNpu:s4 T\L* Y{oXxӽU:f64uL E 乨]o,S,)7/ (wm+jgbnYiTbۢ9keyn[2_ⴶˈgiކlѯ[vmb|R*揵M6J Ylc-\u\O?n(/Hg.jto}VORK*i?2(5׍t UL-uBy9L8հrr*Xo=TiC\ϗl"m'kQL1)_bfZ)>2}-(#@]:+k2Yz$`O;P5Lk= ynO'$hޚTUѤ,&#Cz|*l=R\ܜݛ콗N;&IRIJEJK`U,7L=½U*f֎JN9Nߜ{LROv>SmeVl BNEhIEĹLп>p0d --{h~Í۠gOo來߁>P&^"k*,{y&#@4 N3 n8ZA?PC0=r-Nu Jc p @>tAO7)]=keR2xݓUi4e1q[E˅ 4|bu":B^;j҅n~!Q‘is=&w;B,oBH4 \rF&*z#0$NdNԎ wv^RI>{<iOXZ!=TC$߮6}I.1n?2)  iHk3VQ2V0S7`*o]#^V @-WøR1_//&TGZYdma*UhERq=P5(EokNpI&aݼ291Vs~:Kъ7K9v:h/(I` 7lyM7:ԛL3y#l5(|nxA3"[n:?Խq~5AWO=J^X)vdp&͵RO5H>Au{c5wvrXt\ >PL7] Rث9AY8Fާl[2!;0>N4eR#qYwBAW~ymxz:ƛ ܙMM]ʅ/[gwϰ6ɻhgVnanz߾3yKaCe'E8慠屍觇0A:Y1MT]sG_|u^s*ursn/qR<8o+XG°8d_f$· y1ZDO'7dvpL'Qndb>"ek|3^B4u<E4G1A /Ɉrre57I2Iy:b餚'_L;Byg@f&YH.XU tպѾVyR]-l5<%"9OӖQV5sɂ(iOz@HnΖwIWdƋ<:݊kdZKj Z{Z?Plʟf>9X.igOz( cS(G969 ȶ3TbcsΆ$FYJ0 mګxW%@l" /f1&(4w#m2C#;C.an0ND BlQRQ1gw=@wwKZNEN\.!~J&å3$W[X$+x?fI;j$T%fè})<ݬ\BL V{6f'RR 3^{~?{vPpFy)$@95@adsQ%lve+~gy>s'ڛsCqƳ_@Ozz Osd\\sh!3?Q"!!}F8~c &<>)5M'bWi,U/u{D/IM8.q_]wRn>$U $G>봑fkp~fڳE.0;>o.#@ 8>ċEO<X#+Q62%*G5Ҽqcǒ5 ⽆EAB*Te/L rXt1<nbM^@$.:7Y&)6{f,rȅ;\LT$<:Bd)( . q}nZ|7P+OgV*j>l[,+熴\:_[9ig*)OW;-"nu_^Kwe콕;p6>mnllܺqvi)٧KkXݏ `ٿc X,U䩄 h+OFh+J.2k5SD•fX#EFXS#JWLNXOX+S3S28%Z+S:\T.a>kumeޟ+(첽mN3{VR(+&ӡ G8,#XǓm2fET?A;Be auYy֓lL^:㴑xuS;pPo}N7o\½^ƹ\xt|HD&i^!5Q~zFߢQIcw- 92AClMxFӘ⢿`121NU-_ꙣ[Ǜh M c#;ΗS=5ZKqn<Ă=HoV6,0 W>m/]z'/,{YWG;O\nM9rr@Pm.֨L0Iv)уϻH AyɽVz( 5={6q0[ːr9ȭ s7tyVN *O~Q WF].],uwVʹƚ)ǨFv\2]2@5 D +hJrq4ӷ c|uժ+͚C ّ -/V|ͻr&4lZ^ٞxo9.XEL[]'*<˃3rOM#薧P2!efd'6m% Up`=O ׈C y1v3XfI@a92l2 #R+6 Z͇ :5NfY.qe5mu:UUTeą 89[oOqҶe #Fm[x9L q%U uٞ- k]x3=lE}Rmzuq| ?F)k'ɚ5l`: sTv 9tΑqhI^p5 |8z qyyqn_n1-Q%φR^vR3 ^2"QѭNB7rbW=\C,cz¦,l=ntb8(+m.~fFb6:Qm:jVSIluУ. $Kf=48[{x57<Μܮ\\OnѼ%$kD'K Ö n`B2n[F{3D/ò>$Mfj-:Y'hk]䛬SXΒ[OݏNk1F>u.L=; O}Z~N֪fZAHj|ZfZznfugnxDQQ{!_tc~y$CK?g{pWLO>gr=[/cmebD |?(,;nNWF)` @>0Ԁߏ%c՜YM d[o^c^0^c|#)R01f}#x/os KzwdaPz#S k{;[w|qGG;+sw{Dฒ몎hb<@$ = BP'ܸ&k4NWrG`Z~pejO=Jɗ= ܰ ]PGVyS d8Tqe}N]R3e;naogjYm\[gla:9g⾯(ÒUDK~ζL4ct ##Ap6in+U  @tmg n>oQLwl oVnI3;/:Gb2ڦNSʔΓ)r,(:ϓ..HHI )lh=S*&pTIq1yS/e z$/P a7 u8MhMw[c@]`}@_OƘSlj>.V7mcˊQSFӴSȣ-tjAŽuNtN#$\8"[ ";{6krvvmֽ #̧I-, Vr4P t,:Aο.orihBݘ4MSu! U C}#d/8ȷG߯lc/nQ/ T%.Ĉvѕ~LA -ܠݬ;|ЇEuycwm("tRHkI0ڴ64z]/\o|*T'Wl("h:K7* E}kX_wVwyW^hʄBԥ`&SA/v>i텄U_2a>O+Uԕ~ʧ_te˭;nY y#r^^"> X@D+\ jIN:т]U9C>wL|.]yv6vSz,A/Wr;xg=Y>OtPx!-DHӤ򹄘*;DZӪu3˕r{ʊZy*HVIF xN,Ws 537%y%xOy#&טas uQ,{YC h'0(G?zBY 8:"TgzmbGt\QN-*svScCPsm-Cj8RVPϹ+{oVd!5 -5%ˣk4}B7ez09H/6{yjikot V+T.T$X%]T?O0x%\["ݣ\<:}tubrRmO(wpOƏW]ǘg;[N^%]S8$ed/S[񍻔BB-+Pkk;p.Ξ\e&d泳SG9g\x1n{xC&.Q﮿x9UA/ |2xa9b^-{W?0x]* dj$V̘0eu nPPP/0wph;'U+w+ɻZwTk)N4Ijo6w/Xe=%}HeVOb7~篍S yN/R5Ә}TAzOΏpQpE5O0u /PMߦ$wJ,jcȦ7dK 9A:q /圯OwƝW?1ƇL0?+YE \c12Y1H.*ei [&G}D!bq2@$!}}mov\J37W& /} SlgR`U܅nBPۨl~"ލ[oKwu鼴ϊfN^AqQ~nVRhtGDupM*@jea!C#_F9ZůJ_t%k9CiqA9P0ŷp =5R9:16^>&ɜ2,D*|]h,9b|BbݐT L_Ub;HXmH?|h!{s[leܫtNzm<c WMH|f䑱_ b?Fן#VY{$֋uc@G6[zJQC.MʼnRqu"YBy[Z-nLPoMolЬ)Rɰ .t4 Y0.k#H ?,htX=A?Ak>Ş;XX`^\UZ3Yg#Wa#SLU4I>% LWѧJr=X%nj=(WP9rpCO?ST. W턅:Dpqvrֶ6q4W!bswNG+Zڴd ׈TfV敋qL1n\ݔO(/pm–>~o9N9E'3h R1ZSN>MG('(@J|w+3UYkěDl=B͚{Ѕ@76/!%#+׫S#O_h3O| wf+_}:*2,H?%#?6!)%=?GN( & TN?L{ClM ar2<ޡޣxZnY $-<>iU= vNqtnFإܩe(Hԗ/#4tqNC,~i])XSLH8ԋ<3[]lje/)r)SMmkS}M>8Nv ARcpϋBjWXI9GF'M4~.b-3-%:0o||iAKGHejv᰼GcWirk ˘sUݴ!z 1:~Q&ˡ7 3ɾ#=-'!\]CSC]M ?+a1GQFHt&Ytwg)=Z[*a'\ o-߿݁}~N^n s! c5n ; -+<ųI]- ³y욨5&=>,}8~'wgs{oV>at=`F\:ItH$U2&SKy.z l-t=# @ Alӆΰpuv ~[o&< vvY mJ_VmbX7LeH) -9p~zqx9LIr608KLQ5[d`AGs+M$2 -a6]B}Tk|z{L1lB d۶! W!7@!W$O'(;H'.'p0XG|m.a u_+][݅kqAY<'#vpOm^YX א"'76tq.A=/<,.#]-o<&"}2yC|yw|s@1Y嵓f}S 5#{Sqj`T޳b(Q'O!FL T+kd$[VAhTr>MzՐVLڄ|;m# ?&}gL1!I *c/(:`+T/FOA%bk_&>vbM5'5ԧ͡_#=B]1ڌ(κ=X]TP/@ "`l~8!Yxϕfzov}9 w,. 0qJACYdҶӁw?L`!nàC3@m!C㷴/z=)_JnaM^ J n]zsKcԃaέ?75:X{}rj?n+UN ߬ :_10Ǹ㿆u-ٸ&8Yꑸ+2zPKi\@q_ yzA!aП _U>پz+ߧsINA7PO. bR-O7y[oʓRC9V0&x%Cm?JZ6l5ʖ2`U^4uH?@3J[Ŕ/=cj$v^ȲTO_gSSRJ'S 3Vw>+ߚPG 3E kEun's/@ ~ 0Tl2viRQ뺆UA?*ߩ, lČW4ȏL'[,ZhM%Kqw2Ս(T9U-n}Q\ϟOЎ.3T4 ""Eu'[Ym3܍Sh"܀ zѩiic(-W,8TSfƦ.^[6O5;2kJkhaaloy7zm_p c^ M:/3gct,Q >.Z?%jZ=U,f=O#L3'*{$Z ;sY{'*UV2]] E駆\_ʵ2g{;4+*EpDڭMbmԣat0C] 2bnЖ%Vm d +zFQ/A`zHĥ=%WO0VS3AtU _ga)lD*/<ݼA"G!Ol`lh^!/;B+p6K[k~x;4#Lk%6Y{mKȯwET;8j{ig =vQ Q߃U3W_|mM#%7˾}4735}1}:}ݱGD4a͡ƠB)L(؄+B`1jznpTС/R9?5DJ[GÕk"q{ISTC|5)~rH>N:?yA;+`h2`@J mw | ~EZ6XWݖ)55jqp7OԅQׂze[p{ڻMYZ|k+nd\\e 0ŏ?.3 l4ޯ<9;-5n v.){./"jZcRZ曪oۄFI>yH`M"B=y1v|mz[o&]rh^Jhb5C؇CĨ߹n-C<+݌iV!|MLV}4Vß&q0PlANO;A) hBέ.&8[]"#: 5{gvr?Be:.& 9B%C"ق'Ye݆Q<{ 0c1Z8Zљޯy骎Nu7`R] !sے =6tSD;8?ѤA&<&A=b$j;LwQQ*nnC_aT`lnC/Np;;[k$J?mGXQ4-_r uF$_hvBXZ^~6v `y9(Q8De-}Y4.T TtRL S:vpw?az"PR*a5n|ٝb:ko![p=VxasݮEY&1.1ZEгRz~k%u|vfmvcS{oOvj@ FT}y!dV(˵Z ٱ=;9[o?(OI%uMԔ]4tB-AJhZ/!1q쇠_IVCme# Q~ȸxUUsW: ( vC'4+'}R5Mhآ1KI-˿gVO0甐[`s%àD}ꤧ39C~ir灥ቷI:Q+2*^-)nA|@~ |<p]i 8cXmEdįrd$!J*¢$XZӲ)ݗmA?㻌b.;4#Әn4nnjo`7nhϧDulOXѳ?ۮjeuea#X(~|kuFW]`F:Ƒ:Q}4de00fQp XkB;PO@&(.gVhlh?欽]$9`;(|bL=%=pЪ7uF"%G.O.dmKH/S8Geװ PBPB^=aʞ``C__fjJ{q1 ~cal@8GĎ.=FUC݊s3͵"p,>OEhghKgɓ6qml*mgWh ꔜ#}MIW?b#]M8zdN(Xk*^BѼB@+=X<"ZbjI\g7ՌIԞ jB(OVˡ&5[9DU|!ʬ%Ԃ(޹4ڕ:Q]Z#T Ý&m DWDPy`s0MԝS ce+AP%+ߤxJ$G*C<onvK~AH@KAYIǔCcXEN:6B0iS\gL$2di=sFGvߏJA.gbP}^q x۴k-eKMIߜ'B Ӽ*T:rVv%м@8GOy~N[5A຅"zz@pEFJC9][sM/m2[I%0[o?(OhF)xada,QBqo| ƾƶrJEegW/aӼ5-J}LDsDn=s=4tl|e ,tK[:$(5CȎ}6 $1EʃF'4딥* _1L_SO_ ^1u9@u}gs8ʊy:Z f, 'd"#"V>czꑶ,xd|b'U,k>jmcJ^7ۧˎeYW%6xc%bO/67i;{{E;TXMLN,ms}Cer~CZXD9>G<=#׭I,\!G{6jyh2?ma}P <^KGlx8xY>(mdr4QNc|*`P8&‘?dSrw~T?M٭d[!(Fn6Zc{v 5y|6ӏ-V$+ hL L hfK'Z$+X,5NwKvOLJtNpsHB ?WuiXcenM]netq)w^+OQzKwaޡBgEvzXXhϐNI/!Ze# Zt BK> "qLD5+YGV .ΠOiI(3rՈv$XxBX MghUtItrԞL;6f%XktƓB&mZ:LyĚ5FZg'% LnG ӯ?n_),- <"XOjN*u7 QO .h`QMN0 ͊/b mFZCRZMBAc?}um  &!OJ}^ō  1>6:(Ju;u6?p^~H/>Qo[0K^;8zѴ`E?HrQlc,31__jEܺ9Aiى kwk4rL܏TD8ۘ)HG7Òa) 2w:m٭_՚M4 s^p ڶH<,|lj2]/Tx'ˆgA2! /Z\-?/[ٯYo;/(WpW&8[@ϱr?:H× nd ^,y64/E@,ZK {TF?y1qy  䴙yla^ I#v&*3"˝S%rمnI!?F  v1.?O t @~u+nPw0RYKM0:4 v?s رZ6qrӞJ!]SGW>8ʏ ةn&5@?OıxC/ӪK#%c1B*{y]L3j凖SKc [!0ieh un{UǸwo|뭷_' H9?Df2dӸ*SmRH7X{FhGF$^1(|Pqsx%XR㼇k/v @ >Ê=?p>A=Cx? x︳ӹRfƺţlWKuuJҨ]_;h% 3RrBQ 1#O$pW-{ydvpxatY|(Ѳ94=IG|ԌA3Z(kd{h{A q# hzva<1x|dbCB9]jW €mҰ֢^2sPu}ճ]F)ЇWGt)AI$8Y&NCtZD|-E[gބ|誙ӾIeMm]Ŷ"(bsk7wd[4 {3S!@c|SNS[$:˝my|.{+vP"yPh~ziVr##AM)5lT^"-+Bݻ -7IY ]gWg_HW7W>nM+ؤrvÙ>3 ?L@P"1?,oO/uQeiʹN5, YK=8>dA $KD+Njy3.LoC^ W+s+i+>3WԽFA]{[!±dLxdq`_6x[ ߚSMڑj>D: 1u8ކJl0 cXG?ě;;e8A^B@lcNQ1)$*PV([7=0YqgLԾA*dOL͙0j~ڋpe@?zRc{vO=@"2>H-' O1Lnn_d>.SL9,g"ê>*5 8v*VIJT5V W VΗH^\,/b?cS-1ɶiEڝ$*ǔ+dz:;Dy8GddV{-9EH m2,!6ytmD.}L.e$ pF:-quWØPޯ.ꄐ^y#YSwϠKd is^3$+fh 'LsFtcpRu}[S@e~j\rZfr^\cQ 0_t!@rD)&QLB`RGJ۷aA#1OxX08SH?Ԃj wŌ kdاɥ tײu2?wI_joG/&|%߃ x%Zl7[2s+dpC~FE a-3Ʒ zdut4/0jpәHYT'wwnݾ!ٶͺ|5t$X۫˺sFRhF`UrL(>˕F~!*ߦg[oo)'qDkVf۔07 h\to[ڸpW^^L9GWM e<0ZM Kw[zqv0-OripыS G{ys}ʊw'p/wght"nL%>,#uN1 (vR4dGvFdN)W wN=P]rohk22wĚݘ\ZMl#E͘m2]ۺܸ}3yӆ+CҤ!yR4M:-uzq%*I^FÀJ%%~ s92n(-_ۨV2?7oVP/|fpe)-bTeZf3٘*R}lVgFFBv}r98~+IfO.i#jH<9zĬg1gծhֺr눛^KHI1EʆYɉG#k<yJZ5R]C-RִJZwyEc mMBԌ#%~rU*0ƦԫP*32ϸLFCh^s^œ?1ի:1-Xe܃foM ֢+8qC;q[~G%{q.c^p_sKnkB[uO6ifXGz~wrtR 7DGi:EEp+5HU5HNS">Dθx ysXV5xeLY rJ;ؓZxf m}[?'w p54yy&p(!]HFU:&+vۘ-EHJ8.:wz/ r UI79gLAE2kwE/猨ؤZazy3Gp%XJK/Kq(lo Y![ZawVWsWsհiZw{]XŀtӖ {E˹#~ۛh|$H@.,"3gx {v}rm$}wEw#  MTAd e*,݌h]姄u(WXGĀ[`0F)N*QiYMC٧zvhI Ͽ3x"y>M|뭷ߔ'+&Q=)fSm@YȄNٓb fK W"ϐ+ט&NEXzf0aч/Wg"71UO($a\;x[Uozr-s``eh3l}ҥIu8  ~0@J=[>r?~}y;w+#kZF[cZ8QdjB Q [$D IV(?p&ZҭNH^ړ/t(q _@P PqP^%aaўXmY*Oy7U @b}CCalCn>C'|;Js܃KEjn!^="1&6eږt\On."o_>$}k~⌟V3V<  MB&go:a~n |wo#T@Y{-v{q*{xmlժ=HMqw.b\R ΫdTXrm䚩R}?+! J "HHw7%ݽtwww7K-^s?pvwe^3PP/2E ~l9s'?Dx`u1уލڏ2 M ! ,}xkC< ?s+Dh7(7Ȑ Y$Rg&_uxT Pn(@d3e;!Hcv}nK4\.Vczf뜠Gseh@]?YԭG0 9 Ǿ=ra_Dk92=wPȢ0@N៝Gqo[&=g HD gP PMK#m'?60HJdٗ(7 ٗhζ2c>h*yNMN]4VkVJjx cpaXam1^~^ޚe)I4wq -V#0zua j"lF#lEFoEFmCBn:SQ=أ<')͘ r浟+k8i5oۀx@Þ@Am%Ѩ3:cE+}f YΫީmo&)7\@I:87{@kD竾UWHFI𻶾'Bmrsݡv,6O 4Jp3lP.R_k0e:JqRf u 7_C,wPX۹RXosOm`lYpuewt_N7pwD4"'"[Hrbut Y, y>EI9B+ s@P:L. KK 0q;ա3;>4_4|ZGѣPѪPQPgloZIyQISa&ZJi2yb=dx߰6CŬ}0SfD^[Ǹ6# &ӴKԊ+TkTs4t-4_wҍ.c,23pJ6}֪- ,O^ke:+}Ȳ?9bBQHl)^a_AlrDK_G\%ΨF}r?TH -供Dr|ڐ`#dJʜvT'Lj[XLhtVU /tUrcMFXW7^LŰ6VB:8ƚi顪$,L{Wj}yOuҹzBŸqfMLK?/&hr4d$uh^ַBo<;)YV&^[tWodohO&uUD[ۺPMz #&!P/>:E+KϣW/.@2$Lcb~c=(Iy*"*"R9Yzn+ۘ@y$YP̿_"I&=/L@Q&'fw-k S'TmDhR MւaZ%XaWPUbCln!sfuW6}vβŢōb^M3:M %TAvK~6w ?`zA >1ktН FmE.|Nhu*YY?lh rJ L*6|YLmWV'Yb_`nv} kX^T3A%3r}ʹ]nV*?)F“4{kL{~DEʇD 9'ev QYYRnlbVFiA]_J|U'[I0_~O{-y$lJnȹ{IH Mh]5ڶ!0%L 57)nh,i'u(e2QSim(>eH_c3LL %niu`|IoV)䞪iPk:da{6p mN/TTȒ_\/ґ6bs}gg< ۻJuTd u,H"&-yC=jرW#c.@! MwE*xz`@ Z8PwKAc"Qg;w^2o12+_{tktry成͚zizN7=EJyf`2NNҚX`8`oA[`r.D'ÆcA !  <"zaL}@Bx<ޅ n{rݎuׁq߉LX$%9dpr `CbwevC&*(].AZ>L|exwqv |s9PNssκWh{0clIU".G{_=.pN.i8a"Q i:OבP"hhƇ'WnsM.\')*bcv\#u͌X膅I Y!ڵAoA;6ꗩbG ,mx79a;UbBb^c(ݡCdX`#m.RRjyy봧f5&v9Z-@ #{?:CѬ9\̓bTWikk#LMMn#vLk;V ^yʘ)c|6B+A@2I2eΏoey)._M?axi[(;*b(fA6b8!>|vRʯ@=ȓGi2c*N1\r幗ٙ&LΤ~T7sbE݂|Uېa(>X8Go$JBkI4۷PR}S.(ֺe=SXG$ɇvkú[Vu ?whDû)A굻|uWwPHӹ|v ?ǔWc]*xgK܃V޵N3Yw{ c eF9r-6KQ5:&  6565=' GqF#0> Flk! 7E\/0Tzc=(Eyb/09opEωb{E@) 5' *vCI\wrNOhRQ\Cdkt S#*H=?@a:@}&<+P^'g25fث^*W\䡑&)cAwu~ U#tz)([IA~Ϊ^n.γn^LUu-?늮+^ E3/m9ez%Kt@`斝U_I%uOl]h" 7WPK s#]łuo \Ss(ǩGuUV)0 Q.Mlcq2ļ.~ yiێQŎl0xFWW;3c{􌾝abA"R]n)/}rF| J2 r[cx{} }lUgr+}AZfFQ3GD{8=ghwnkS,7+REA.~A)֦=R%jk63b;ä<]w1Mqvtӛߴs&c]pQ9>Ku,`$~!n92X\_Now cT=ܩ!XHHkUهpŠdXt6Q)CJE}bF\ĞEéH`dnh{k6uVZ C}sؔƑ" y|mLП_UQrYmgY<~DZF4 \Ě;ѧr}csƤ[K+Y*facgxwCiVsBcR_shzZ QvEF#Ӯ8g, Ѳ71 |W6wT,I7g4yL[1`s8׀=z )kRq7L=x~AgO-sB24 T|c=(EyhbBNo'2\M@q \T{L' G M\}M<=F),b"qhc_`"3΢<8Fn03}+TI4 r)tjqust[ЙN5+ ڮFگ+rIwh3>L3st YEO&::i;GX9muS.52ղwUe6ֿt~*Lmr(XϤ|_Ӳ~Ũs,_p\rF{&ݬ8 )֯S3rMYfvn =^ϽWhsg_"@L+D@<&0v6 yY/|~xpe~nnlowtE2Gidd]vj|mRF^m0Z=MڧnpǩzLjBx;oogsok@]xBfQn>ٍAge%2^d6/Vh_L gk'tŽ|5$*V~je/O}yFbb8&Z#I! լ8K{h5[נ8#j(:wagpgPSCvb5zJ)2MLfCLCM2z*) ?Z& cޗ7 &:U\Q#=]A?Έ!a+Є Kb^e[pdyr 3匈BieItz ?|G~ӂ-Kh0J;KJfA t8GFt_rBٛo>U]H.E5.H:mm 2VN`N p" ZVlfx=g;W*ҶR-|uuO8!벸~{]͸ճգ[KKt 3 scuI6ߧtw+Mf6Ҧ--x4xtN$ Yu}a(^`=`3Jqէ9*U'`,Cqu/"I7|=`pT*Ro ví36[?3uqfyVD$VŚz&>01׼gjh\'<1g fs=,Zʗ3ILZy5oؓi8ƕlc$~HzP N)WQ;(E4QQ} G0!P><<7L)+O{w*Ux{egqt)S?DiDd iNLb'Ki%:w{->Q K/Lq 0S2o>|BFyhaxܢ2ۢYxA:$pӠ{ph%.l5 x#|Ph!n9*07?z\;k%.-vu\w1:t_RM 4B/v2n/Ub( i"\e.ae?k0#RͻĻ7[?U7Va`SC5Ҩ=|3 L0V#Sx0 OTݏd /'q :##hKx[,5Jyۙ^%tQ+N7덫NwxT5S}n^>D˄BFu_=w4}`̠hLR4 Tl5!YG½|%4* VHV 7s[v3TTځ>\[?.ب/$v)0K60+OUӟZ'_*D{j*e Ǣݶ\oC!f6*{+ ڂDŽjE>e{k =- CV_ٸ\Vnl<͗խ%R'kռ\%j+5ҭC=,[Ì{ct b@4N7M6ܩ$2.uPQN_}ҝfڽjփb.\6N&eA%Q'0).۲ ش.Ҳ.̾6ȥ׫;'_^V_; ^?.ޱ7*}M=P>uA;j<TZ[IUT ZHh 6tJ7eԚ’;!60vp"r+;PybD@ |3/ZRk8 D.u⥦Jx:xJy 0"J `9dЩ>cN&pʤ3B"-rQ^mLP1'W/M{?0Eoq8 hB[l*%6/!|}t;Ӕl u9F?ʸ)7?>˜QZe,n(֘J5 ws[=eC+n+8 zHӆzc%-nX_b؛b>w]{VA|$p~Uw IfW~FH̭[`@d^qWï{^2}J+Vҟ/3Xd8urope;sUrs Ò?%ՙzEgtS PE*@ߥX7Je9s.YP ݠ=+wPPo>A4}n8W 7~j|1CAWއ i gJ>_HErB>Og''~{k3qMID{tH঵ayk-2 %~/&(d{槱*[r.vv_vLI':Jaqm"7WŞU&x7Rۀ_yeWf%k'GmY]:=x݄xٿDx[x F % ڗ+ Xp|d%FN&^:Y:]*['SI6ΰyr,wfaQ7>HlBpg_qO!9gl2Urg~LTW3;l~ { QԠ-ቫ÷Ll]0Ά+.u(79TF̶o&OEL h2yǖUnCׄAMڹWSLc#=Qu:c@0dǷ7?g)u6~A79DFaEjUbSC,4kʨRsתS\*4DD<hdiH" 8PE 0#g-s3C.|OVރ;XJDEϨQC:O?|q/s8w {R]aA9udfus1M4S'`WpKb# ɓ ҳXW["DFtf`]LGI* <*:Q.^1-5!pݕ[Q1t6V>7T]SQa.#.Si臰FX#10=s[mh,td]xy>Z fV!qUi&R L׿ 3@ Pֻ}}& uͱM05 .25k<+ף<{GySQ{bb AzNי&_t%|w ,O9 +:Q,8H"Ixu4n}EFWv?9<خ>쒰iS+R(>Luӻ?/Ŋ`65P˸$HU8/T7}:@m{HZWo_'GxxٜXY>jD O7=`2V)wO[vWnAw|q:RBax'D3;1J=>I4M;Ŵ)z 7o`~?AG2ou$I)OF^[ByHsimN7koIX8hh=8D 򧵔 /iJi?7Gv_^Ze8y_+_m rIЂP$4cL'"*jpizq^-+Ev4oO={=|bCNEL{A近1 XЇ#2aHi07-(X*7$Dvew)4w(̶vI<ΰ93싯%n}-"{5_<AP!?!H0yP(e# nջg)4ryǽ;+/LR)3 t^v6s)f%=.Y+Y;h?e|Qyp5 |*ӅoCc4cTcvc/G{9v:?^5~ֈEn>l[}V4uJk)'ԨBcBV&o+-o)I?:r:v>/f-@~閑z!٦~6v}~ ozMֱw$3d Kx0FQu_%u'd.bFwCaieq5qLLBM#ܭ,cŵ 9tRA."%?ap\ zO]2>Ś>i:~)IF Sdx:TNQ4ow ֪MdX͇Xm: 1T R4l$8c(#s D 7#RYhw++PqRǽඏVѽJ\՘t&ykkmiέnz2\d0 +hndQK^aDtsmdiϜ T_@&g*ɣJ5Iڿ<~:&X0X t "']ǍLj:G ?Yg :IeN`xLx#ZH#$=X irVqZqqlqqm$Dkx$dM[mUiTAŴtY t ~['nI)f{w9C{`/Ygup^ɗ,|Zf*>}U|j~Eod)?DF}^h~V3P8L17:6d 5BKvl.UgӄSGɃ7\'B2VMK-%F홄o[lZ ;3}c 3Dryc=(AyR B!GTg ((kX:vsVTQ\!*nGSd;-|ph@o %v9ozc̪D;;!@h_%g}奟lܗ FA;S`>XGMb4 J,53 @j0& aHu㺌QnPhm;c|:,rOd/,þ6>%*>iL \IU>6vu} Z%C5J￵s@<,7oގ1pvO|*g)gI=*.zF藧igXG9xM6bb ;NyNp=|D$J vdl #2\ +jH W ƴ|,cd'!4[[CF{3uD=;=(՝e nih UE=čeD>7qr d]!d$!7Tk֫sEvj'o0OqN 4~T~vki4l-M۔Lqfl}px{ݦJ >)qڥoeoeek%Ӓ>-NyP&!?WJyK6M'Mkv.w r{=wۨm4>7YLC'i)SHv ͗p0dEvg x#[&ǒB} XnM:G}+A^Z!}Y6r`j`=0AY' hq싟εn2.0Um@mK`"G?KX+^k#$sd+>ҪSN|DVI~/)Ђ\ZSl4o;pX[̣ A<bΒ ֞mI6zM:{]x/`OGҠ*,;;Ψ;}8f;CE Q4DD:l:8ix>b;!™2]+z~s>D~cc#o }s[hhV7 )WX}/&pf0P?`ڬlm3 }AC&#/ O#{TC~ٿ@@BC{xZӭt⦒ٸ99մRWM͈ |B}GwCwEP"_цA΂<5ctq +/UNC|ܟ;9|ŵm>,{@kt OxW?fHnlPÁp$& 5 |f.كPYYr 4#ӎpl S,|>TWA+=J `.e&0Yj%*M,{YAyJ(䯋D&:&H˖v0N_o!G4}X͔((gk'NZI}:W?kCK."Ja7|m?覒8DYρFnF/nyo tH0W0xV^Z/qy RM3$#cgIqhKх*xw1.R7):[mMSrNO!v,Ռrt kl}&3@wvؼ0a%fqWVrpvyanV1b|k֬Vd{ˏ_BC"-U渚bޖDI'+$)I s'01 Q#ҙE^nCvZNh)G5#*y7ڹOi w:7_> tFp@H{3'$fuLS dvCFL8GȸހAO{坟RKǗk76j1$;_A8I=5K>HڳJԺ4&ZפRװ,V5Dv]FBClDin+vVQY1ڌ~Ƃ֒a~.6&jRe2ʸ4^"}?|E1*۠֔>Cjڟw߲T =Z,c tk>'}vX9pLS#7Qy6f6w.yV7K)V[$V@/S_a2ZV!R9[)`Ho{k_ia'>ƹPZ% x?.2ZrעX7-9f"`!tm|BӰ #S/w $:Gr=`gDY[4sC41D&s+`-rށ7օAΧZs؅G@%` D5/2_}k8^熧P6kM/Z.6t IS(w2i7ȷ bO# -)L28j}S\&+(U $y2\RbᏀ5|Yr&d|ϡ:_)=N`к)b=Ez.¬~IoaW&Mb'];Rr+kYﲚ׺T.-W3]UZk"]-ۣסTQVRThMٵM)"hp@sOgο(+ZѿעTc"k (zB˼ XѴ2t,\14Z3ߺ9F'ؖ9sxz^YvI)gzlusɱֹ}IV}|GHs=WfK&"&FjRYr- CTyM:Iɮ.):v_bk1%6(&YDMSC\3}su^rp<@n_&1O WLS%,cϡ!T`!YhAHZ,r3,t#?vOj>{PF p}ezeBj >pp.5"_BN.#ouoC 5?#M@%` /x?kGE>Z?Q>GI:E>!{d/fQg!H`I?K#\2:(-# %)  .U0Ȥz4x08<}f@$ao34޶p]0joBMFnr`5nTsNWGpN'] T*X f4]͕_!f zz j jjjegbQuYἄ~pgwbEzDuӯv!95}sŨ{C^%KT T fҎluIWtGNn\Q,H3<{Pu)V|)w&zl&M|e=9G@ ` |42Jd%NX=k=9@E_ɫ%:^?\j).fل'4ΡR ͒0^"r,}a4d[k0yba12CӬ"=s-u߶Wڲ^5sneo͒LaV e#*&!%$ !:}$OMRޙn19a:b2!*175m;,5*DZoSϴ\H/犮k`GcW.R p赏~ԷZSl/aȞx̊۾LOԼq7G_&y7l0 ئQ`S>PϰŇ$?G_hO땐iV_±8;gTj ~Ϻfݨ|3knSJ5t)m\,.c>H1CR5q[NdD*9')9x.%xX`/Th7'x{Z@wUY]Ud9cm>ufE aZƩBV3dʰH:3٫Fx[ŧ )eϦ5)SGމW?"n~QcD]@ƕh$DNCS6H_203d=d1::M:۬%2eDw|zqna7GM/C ,)Zb_Z u PLYDB5_"anxm"\#6GB62Cs{/IqP@|6!EfE2 0aI-gy>sʓo[R~.SH#zA684<2:N(h7 ALĬ@-,[!7"h p=t f(z]hFnc`ay~b+z~y<Ng9pƸGj<ǒ/Z/VÒBu@EcAbf9]d,_h`s $.-x@^!a-5x锓|}8SZuD`TJlI|S_uԸa"| \.])\lKLSPk[$5Ut5>wI~pGwuŏp p faKFo'xzI7@:O$:[J14-rŜT*Opf{it7M(ծ\{KtL%@s7 yODo=٥[lQ6@&zM?{e!ll (r[UE6|Xw(Ƕk{MU/RT֝a4k52?m<ýgIvo$k})y3V+T ujSke d$5Dh=Ci?MxjjvAfel\D9ے34݃ Ʌ2?-عZ8rchag984Xji( ~&i2#[˄8;h燨gH۴#:Ƶlh>ƗRW`ktCaF/–s=aI ueV|ڽs4hmppĶ{ V2zN!iAl6J!"a5w'qo6XvGh_7; t;C);"X]~y:G9C;7841<>ƴ6p:J4B:N2M:GH#up A}Db6İ:ʰ>> @0<n+a$ l~vb$x dKyM`J5 Bஔ)KwԃH+eap. WDfpkWCQZ5e? gS9zgyD*^Or}T;!xK&J'9ǩ8$K^?6F9*cb8:Ac9E;E8"`loQO<[ ]Źzq~4qZt{w@z|H6R;S(R~3kxlp44|ԤyL|zi}G\8s[䪁fTm-moջtįQ\CinrT,EPo"x/B@a;u:4Ip^Nboנ`{;D[D;{#H KAX1#9 frcb6^@oܩ9хf9v%MX';|R~it 6v.WL; 4jU 'H@'ˁEK~VU ׼jfꡲ%,Ҍi:bs/ o31baxR`U V.63H9_廌e= BƠx)j, ?Jw p%)&2^$u|uqN(@DB&Ƨ!.љ2<NH/n7/3VWVr7#|e\ >іObu#Mm|i]̮dưf xKTle(Up_ux:<34rIp`7fC{pa+E"I*e]K(KCm e]`Xۻbf_" uײzD ؂}G&i\g^~}7= !C`G}eLJTFлsuuuuG:BW9ő4 .$Q]'3TY*:Z^DځO$SmàwYŨ0 qᒊ힏uPZ^/g/bu.?O>3{{d;{/Zߘy[,|HV-+jgNM&[$Ylj%MX. H\m<MUc!PU1%tAusw}p~A4yIs]w#wa1h]Ƴ} sK@R:$,R')Y#7mEzZjJrF~"YL_zϹ^?|\NpUUFx H&rVfl\^z:פ^[\qgBO7s]ED8r0H5#|Th70 0YW˓( St 1No$eb]BWgG9(nP0#*Ї5`=ɡ2YBu싃$kXІK¹ɍ:iή^\bݫQ}0|=]~Zzsn_(%;rP*a4^u$bb^`mebuq˖rRTp虨ΫH780:4.䏦si1fHf޲^!6բ+r$k?5wu la&}FNejyőSlC͜>x8ur 6vqvj 5Z)3MB ϑ7&ܺ=[1s=(Op#ሖQ; +R|MWPS066®(?q{I^to/#ς'P)̛xNf?D;ܺ\f]WJD^Y{g~8IYWr-dAǽ@d0>&$_#ߙ#=FԼݘ]H(Z«$ ?\8La>]íDyFlT!ӽԮxW . u2G#=?[Fp$+N4MSLCE:0T;iz9zԦ+nMlΑl ^7ՎywqӾ&ҜCq $Ft6 6.ߖͿ{t1zGg8A;t3Hjvߺ{:In,j8OZ} rЮ8} [| ]'glx~P {4sb9l,E0 ԅNG4D)4nBȶ]>L9fxtcONU"*֗e02CZaӣ_)Z!{_,pC29I08->]m?аJBLD?yxټ\DJe\,EbHIH ϴw9~CW/a>[ڏa۶G%4ۢO`M} *3}u:{+ eBJR&4‰R}y gEBM;C$KǸudQ \rLrdXO cK pW2p4qHYժd<1iɦϷYO>w^JR0‡=- Yֵ>ّ"Ldt2a<<<-d<|+4"Ӭ c*#Z3z+hv@'5Y252`YlrN)Ġ̀-BUJaf*6NQoaܪz|jVu>)znkep!EނO!_UBH@oig;fn fUnvpF!L1HSM{diևGkÓOܰ u}ԔS7 a=%6E ] k0B~qXy\ӝ`ԃ@ɧ *7S ^M: E7khT.a n0 K7ffOh')fo(og/N*>oG( ok`@P;A@}h:;r:-{y⦌W_lem"C8Wfx}| v[&j/5RO2vOլI$?kdRf;%CFyu!tF.jZ'ءLbeu/}^kh#׾cQ֍JHunQ>fL?W1Ǻ;cMP1gFe^N 4%j c<w1ga!8EAYBchN-ST-ܮlbܟ!<\%8YhѾIvzpJʿW>:";DS!c`W]DՑ"l(W]CMn Vjm v ΒשAJdhgAO ',wKXpoo؎˿ ~2q*&.& 8~/"e z wdMFƛJ9C3hD`rݡ_*|"T[Y@`Ǒ0pWw8M&;d&42>&G8 lj#7_K&H ([GgK,Wbw,T4J 4,(V-r8g@w_w# Gͼ%^c=>iwNO7oBs.!qwȡ>8.8UTR y1_H`ouOz13*dgy>sOx Gf&`7y6X"L031.*i<^,_i^IozV/чoBM-~LCM#>$gITRY3ze7ef672dNbΡO DFoyfvoi=+|Wb^p;}pj zk׼;k+QV0_Ux:<=lC xL< |<~? v{xG6JG:A ?Brfv]p ܁LBk3"ê,l<6n-OPMȗSiEv }ʴzFs˲{gOO?5@cQšz=~>d>h޼i nFUH7'Ykhk~:AVLD6E>LaMk*+5u>~*~4{|E>VEÓoU{q b'9xN<1TM0?AVV<t-e3o{((oQ֟]~6] i6Ot^![#M!M^ah-7)~[Gى<Q&an}ȜGQ9۱4~Xzr6{dU9 Gj ?:)ӉN3B9O7"% X)T.R&Q*{_"Y0\mF`di<}W[SdNy=|7&T-8[ŔPGӈL9; zH= C#n0bOqwXֳµ6ZhQѬݦB%SjdH C@ H~^ȟЩY8[  ^0֫ D2_,j 2  1@2Mw#~trHTIձ>6,H.Y:Vph~xOI,1zVQozL2p^u/ ^5 U*pdOd/6ܶ˸ȸ<_y3Y0D050)"leڬ4x͜.:p|> )gD2>аo} No+/LVhq\Z!!DE_fڻq-# [P2rE1WONvFIT} mw)X:zD[7:]R2Mxwx+x2B1۩Hi>Tq=d΁77ݎMMl`ZӗI)ӹc/*cwI~S.~R,w9}@6$.In*NknYywXpq^.s ` 'lcj%A&Ѽ6.>ΐ!VQ& z 9BL%D4Yw]"Ҍ#>'i8$:HMdTL!MT8p;3=5MCO.MvSsċh jP1H94gG9?0[kGR<ͯkyXSz]I,7 vqP:0:E}vsic_rJ)]e3@lyD|TJLN\IBM |YR5_%zE_٪h 咉`,=&E^JrHp&8WUyn`Z iTV᠓#WM0v>@[S#3^AI>A W)vM(HҷtTϿB`s[!_G5R΋F;83yϑm@nQ]>cv{]b>re࠙c_BjWvתV#.ɮWV3!Ӈu0MLfd5pa=$/l$@hWmpAY=ܳ<(\~ِQ3g\]2/ [½Q}rb\*| m4a4>i87OF )BL35^0|[f%~lzly`Y:8Z!.Ru!q^Mx|3(z]rcpr#zY|9Hx6uUX'jo.5Sg}1cQD~s5C XS/^]7)<<}ߺB˘'PUMHbtrfiq&lk九Za|(mȉv77H,7P;0& @| .xvŹD&B~yDv %CGGTZ!""ZBށ{`V=O@0 |'? DAonP](^p^]##C! yLO*QCn?u|&P!4!"7@kQ*%*]j$/˾_v bn-o tq]MZM܋4EF@{^kߡZYj(o x -@b2`1T<&ؿt'ܣ]ˌv1U̘']a/ %-f1NԃUmKm~zoFÝ BTCPQh$m)>H80 t" PەpH M71gm K_ݐs*+c^-Xyr_y vf9cyNAZW { Á`8 \YZs/G9#5m^*l쉺E'?[q_t2/~GaFEipS516nXC( n =T$-Dh?< Dw$; tdfdXPNU.Sd.C4@L%f8``fJEKõeԽ~ƣz)LƯCOω] $D)#h?{P> fIa?s}l< W'AKѸku[)zjF(K0#MywekSLCV}.OͻGrhqv3;[$Y-l5{ҐAqu!!@@E$A"$ www.MVo׭g~{c5UP=FOXsZntfch67g4!ľ_d8speR9 ׆YgCg[mB>gqT<k~ mW(K;Z?\GlҼTxXf8$w=X$SOszXfT䈷}MT\gi'MG <5Ф0=h~aUېh}lޭO0 k/+qGPeէ`r4>?գ1Z!:ב̑lM<65,5l#5}⍭[$3s>u+|_$Dhy- :8{lcg) ?Y[  ѻw6Uռ !5' خ/=@@hnElQJv$³$22e2E?0!ԅiqrv1_SD赲(s^}N*"!oonmVgnZ!ҵJtp6{뼹\Oi)cB?Fʠz 0' i;1 `pV9 C&&xC[{E K9j ~=:_^WLQ <ƭXyguG>g93N";]5yaLҗ+$J4|2r2OUp-Pp,fRDKdpeh-']E`5^9$04YK*›;xUw,䃯8: [' Hdq_L_zH4e6~ៅ&&/EABgyr?dKxdIgj=opCJ_%W22e<>rn=.V{]iNy"_"Hf0`翣yr =Q)Znk"nťT] ]=8Gy\_`[oc";ùދ#˟oz3[_QPҤò^GYKкzW-neTj̽{4̄mYT&z/V+GxZN;j%p6Ծ"[^fȹDI*=_%U*dag{DEg`:4VLV Zf2a<98fMMfK8/5hɯټ ϕ-janWZ Q"oUVa:Ž\!-ɫCvD9.&NixrymC3g~l`*EKؕ;nkhSޏ| ٌ4񮮀'R cYL]r{V{~qeyw??Mo_$[[h% +zk X?VDx{ ^>%; {Ɉc8DEDh:jJP#_o5h52-ih[ w $!@` \r#킛~4''eɥG|׌(~12Kj>FZŬӽ7"]JX7oTg7oJ[mZbZޢ%_g hglJ2u S $.E`JK;K3ZW"BEP7 UPi(A$Lwtվ$Y2Q `ME.{1&wVc!Gݢb,S4Nҵ7ֿ+IҐ$ٙ&>a:6~rx4 Pe}̅"9 i!/</G⤬coP5fpisx!M"B7ye`+]j!E} ?;eg+Q"6G4٫4ą-=땢P'(]J+^F-y:w[j%)ظJ<F຦М /i?ֲ7e J]G^ckl 6(.z"黔TިO!m c:YAB%Tщq+ղ|f B3FjR'#"kļwweo}*a툪W@d{R5uAl50Y,w̚վŗo\f̥Zө @4< `|ܛ( nhy >ڦ y)y/m?xr!J#"bPzlA\P#hejDly({L A8*ޤ9 vh\/!#ml! !^g>5bê n-cwFѧ1nNqU(;F[}9c9%8}} vuk8)3αٝ{?pWpF':<=NZj)J|2*"âS--[pQ yz x$K;v'h(Wpw 6CC,PE8n .RbXp#_>-ӫ>H5V>.CR|1F8Y)G t\좏^_la.L]PǶ*4#?A$B&@%>CG}qr`p'wYh spbw$ͣrN-zmMڏ[ uce*¡~S'ݴe|Y{"@~`)]w6,y l8_3b,O/ܾx@>>k^=fN6M5jVY&2Q,u«MܓOHz/io oeR{=/<^c\1QoYAo syṰ! U;z[RA6ЇofXu_] QSS6&l٭}]J(˭ɭV-]X!],:"h#p]'oC8$4IC`ܶ粱Bwu|2L3l]>P 68KOûߦȕljq=慄_dۭ;)rrM(Qӣ^ק-faے~TB*C_3k~#[_=A J1Wy wy7o9s}#åSDrQ4a>)qTTcTicϊ[ZLTΕ8JXIKܞ&[o;fg|2N2MȠfxv >E 6L Bd^?M s\ {h/b&m-+,ӼEBbu_-Yn=Q ٲ^L]xӽI7IܺƘ$2k2m AJPm7ץ,WuoJENr$F+*Wx%)$l_7pp߯M.-.M o6T. ?.~Venr勫.ʗIS97:pp46=vU H\J2`u }uvaCܭlԞKUIAYΞ鐙}gg??!?Q߀>\ۈ1{=򞢍xY_+0TʔHՏ:-1OiY*[-M=sgxw@ބmnebFW9etdY[بzHAnJd9_ s>Aϥ1~N|)[QuOb.sֽ! ?de|S%%$JŦHG'+E{{Z9k[Xjű|mݸBgͭI<1K0(.JWQH~cU҄5m$\%Mm5]ǍL^z3O0`4&~/dpgy"gzvQiNV#c,ݭcѾKo} mY?>dX§ߺKC^' Rq!s]4h_BV3djx.}yUEq1Lx6Ct4M?M=tKd-S{kQ3_I'ً߬ x| ho-`c|@Hs<]PWЉ1IɸgYM22g.-CT3?U߰\h6na!N\>[N=Ms)w"T'Xɟ-z9L6F5B>{_foѩ#ӄm4 Zm[Lp$nO9Ib('A"\"g3*Iqpܳpس߷۷7Hڕfhi]lUH;ޫWb߻}< ,5v֒vӥOn"?3I "ţcb51Oo"\kCO{p;X\VK=1u)22YO92ۿ}ρ9=ϐmbk'zYN)IϰS 'bgQ-LMB}j 1Iˉ_d &"UG9ׇ!  2W'$~qZ>q49i;~58ғ &~~ZK;>gW7"P6G_6mP4d tݶV",$(Eq o{(g_ͷ,-' ߗp,v7`nd]lЫ!Y"PQΜ`ns%]͋^>YY"Hd_f0`翣y";} =`0t7l|.-! H͠}`2 4{߶qVpW16:lqGq>Fr=A ?IZ>Sa:n*q{/$JU. %k|Nu?~_BG 3;[[e;;O6VumTl-E9S^Vc /!x VGhmx ǩh{ƺKcA#fЕ!XHgM^ 0lW69?=׺FPL@?}?|ۯ[&~<;zNy͢x cϣDݬ#"+ q5$Ʌ{63';F薻ʤ/L/UVC3xj~ePd-c%_3z{/& 4R7 v3+4 W*O9W 8qشU*)~ՋﴂezGIe#>2EX@'9 [+[󚙓%3\JD|'POG>ɦjzǶȾ1?OgJ1R0`VY-(niːrѢd Ɇ4ܟOg4f ͠<jr/)1Z209p5;w6}"d'㊬yCR;sw`wzjiuNd?G8$D锩wYRU( 0MP--` @ݸdY~JANL?89P dڥ|*˿}7/heȂ@~=wx6V-.痠X"I:Kirj^oԗO ű~V+Z荒;-0-9 j.#Q&3pvg:i;lV-b@b  <.2!Fe_̎]/bzT'ՀL @/Sp {qz|wnf&N}E]{ XՓXӨ k$k߽]rXbu)]cJTO[`z ΁)A,UulI۳B<祽38fw-,.~)ˎ ߫mG4w6_P]?޴b0#8RL6Bc lUt <`x 8Df^$I5 |u|u|uf6BGe)bi&W<@|ByXUoPKgR.CZ.:qLopHhzzz^wvRC]@OCO_JPZoq+S-@H`Lmw佻>[xƫDODcۿmm ?{/I]m ‘eg[}OJ1(U 6 ="jQ$ HP[P -u+_#]z8}@vI]1,sWt3Iu*# gftx!aMMZo8-Hg-Ρ-/XJ],ރh3 }I=1";V͸ct3AWgp7Wŗ- ~FÜg % f'Gƨg v0֞\~6=(FGcy9wډX؁Ñe2mukBs]ΑHๆ鵳EBVi]C4$ xk8B%se]}'՟ab Yo m 88etԌef#oM> #j^k x 13.~8fwyfy1{٢D6f5TNiu2=I˾b١L1D.;mheiYnJǩs?TCu|}4Fdyʪ:I'1PѶp}ȗ5pVr yiw{m]`WJƇO5٢? U-),g,dJfJ}OڭV#38hO+$8i'ns .]R4dw䟩jbCۿT5[>iI:n_fQf1yAN"2 YB;@=h'614?^WV&Jz;{K*Iq$49pw 6° k—*xW:JAk$*!έSM;Ig{&n3_W鼗2R0rN97"Yuu7+R^@< %^Iϒosҥc4BCM} #{Z6; :lHVtCOB4uћ5yI+0 oKW3ukI3n#.3 7Pɓd|ݢ eCUute=ix'Hgo uE y8ϙ[ڛ̸w|J ds {M DOb0v&j p/x{k{ @1*,= 삹|e #UU/2 5` G"cw ^kK<ɘ&0Vu6Aoq2[=L&TGg[nV$D95ܟ4klt3{0kM欫ek`mbix{V,~m3Js9Hl*mk q5Al i; Kv*7HvDtoK%.{*MiILWZo{A%tKE_ctcn/-ϓM>[_,Q1pv7W. )#s>_yl2i lxNFf2N2~ΙCcOVk9B+yަ*zW24=@}f0`y"!!UUUu]YY1O'>Ydw )ANP +Tqzxø\ƾӖ-?kESLYÕeʱtuٕG +T˃`T_k|avYc;yN&ZHA7bTCm 7Z-Z"7&Za..|xTј? z*= =B4- jaLHi|= [ @_{0_qBTBY@E!P +4"MҼR#TiBv4u}zUɘ\GBV D4A}u-ϕEi;:j"4(a c8uX#>{A^ZS Co395D.ug xt\ܠ:]>XXjB?B2 Pr@ @~.%hL2#7LK)F﷭)8}& ;1&hDl~72.1vP]~6u9 =O~/N?O{ӮkȆ^lu=yh7}w _+y*g%s_/9& y?'T9BId۬Ls!?^ 9! '[fm,ޮ|C\r{ܕcAXˍ.uty744555g%zBo yyo 0$Uݘd`zIzɲuYVXXxIAyɎ *'CSഺbS` <{o~ײynvFSM\ȧ}Fe3KR͏5Y?V])hqqIz)''7w\̫ `0O̳+H;&Wh}|JڇWP׍jn,c7tL9pk5zٚ4yh9,O,DYUzok=vw7zJ.?ڑY4p5MnmmmNW|~S/U_vrٶm:xD 0OGg֣?"L\A|q""`ϗ1 fff콇\t2..C򙒒"ލ.K;k#,+55e1e*ukME=Ov d?YUSw!t,h N~9GQp3gNnn._s lKl76k˓j^.HRX|s`o I){ i!mjz5 `0ͳ&gN6n;_|2s Ls_*}C677oq R:|pQ7ؑ2!$$!!gң5RdRs~iu"\aCfquh֝|"8GǙ{]Y~P'Y;iy VZ0HjLr"M+,MZ{nwrAw}Y `0ͳ(%b2_ףiiideeetlN9a'v>!|\uIIIӭ-w󨩩Y|=~>Il'=J*(ffu=Owu:/)kӅ :S֑3ɲ.]$Qak yq%iUu4%3Q<>gxՒO2m;Ī s*)**fdd3>|N-sk̾Rݪil_IaЂ'ҙwvU{ZĐy&s؟ezC$d9<`x'/>#ٮK Opr$+**zYGGGyy>!I6N1!Yt?HIa1REʕ+G}RXǁVy8ymʺ>OY J>H|p>ߥ/$҆Ь; =yV< +#l^iq<$|g; 6l_qqq!455=%6oL"@]){lj#FLޤB:yg\}pW8'O~?߷b,[I) cd]D=fE3^\$Z=3|>z %KM1Bu={$OI|Yiֵus}<3ow뮲ߓ "-];M398Y׎s+'y4τekH;oܱgSSykyEw<<;R {z\g_h'x8& FkkkI*rٖTCCC%yȂTqvH,v$6άR|TF'Hޢ"A%0{Ӫ*YLVgFYXoךLk::58nߗz2o}T Q8Nn$2O [N'y]it\'} N_; Nu~kym<{˱Z"!gVUU%.6{WY$ ^pa <{ϓ"""ijVXHiu;Oy2df~ѫ$NjQ㭼Qp&uU'ˎD%g<ǍOaƒuG8U7{Xz;6w͉lжv\kDkv2}'yp6OQr83BiNT\|:3|%$$1IQ8**e5,ɴmOVۡky x|۷ ;rNܸM8&:z0!-xh/r?)fY=魝tñR~;t.)4 ֍|Q('7۹p3'6y'IϤOn{tkg{F[K{HrrryQ^GGBF)$L'i=$lWjn?pT0bY,ݚ@i>d/hHv ȯ L.FVRE5bQpܖH>?omu(=#\מ8Y^EM{ߛ0O6k7Y~stt&S `w1:3w?β#ʹ-Q-vy[v͓}*I/H=њ]I[H>󎉉&$TPe}4hHDt}VxRe eϳXuwI>m28rbgxqc mNܸ-ﹱ}h;F]rY[jeͪG53jd{Qy[Y+2Oӡ6XѰ%d7N̓! {7_y `w1 G7|tkgG6Ϊy4OEq~OHVA C$Nk%yXHYCqzs.dOd7]䖑͋(F #°Bl삜ʖKsoԉk¶6+̚?}bƜsxS^ISP^9Vߒp:Bo|G7:<yZ{n; :R ;R3Q5~Ek<ٸD,22I(]Tp5<OkȊ̦ȄĵSWVϻ-аϓn{f9_JI O?}vy5իuuulI+W'o:Jqqqk>0O&*h,1ڭs,bi]'yp6۾Ӡ=IʭJ͗&F|.=O6.6p8#tm@b#UWITS$lz(ukqcm㭼5<%Jk;G^* yJ7M/'y<<0O' `O_bW'<<oyOܿ~?FA xz<<U~zך̒E `(&.:xւkƚ qZtQw ` ՔcŹ'0e^Qlj: endstream endobj 781 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 804 /Filter /FlateDecode >> stream x1 o@DB:s,ૹ? O$~ }g?d`9 endstream endobj 775 0 obj << /Type /XObject /Subtype /Image /Width 894 /Height 428 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 782 0 R /Length 419063 /Filter /FlateDecode >> stream x 8k'@gSk^\7c20" 7Npxm􇁛I`>/գ9z~ynhFյ}" |cEmg0ps8w7[ WKUSk'L[ YpLt4f86sX+\YY`0/# j_E~Z^^+k;:1n'N5s~Yl0}TVͳK]zV3 twgG0=455e``%..^YYZsCs_2x@~ 0՛᳾Z|845k/MCX{EOV#IU:8`c䫽|uvfs L$GDB@ո~7;Sn'N6Ǔ2Ox՟/oxl0e^ ّT㫰 in5N%pOLf8cu5AJZz11՚# j rZ>UF1U~iy'}2|w;gF\*p$'Z 9~)v}$fyj lk 7ė6d)-jU^2YMq?ꍃ*ݡIgd{=D%## j|ʼn>x))V'm3U Tݝ+uG ˧W.j)KLά_g;s qWo8t+ohrmmR7U+++3Ý n2驩 mɦ01Q;ZC"-6|xh,L feW`[V*mLKksXsqv6P[౷|eyRm%'pY^tB@u0S`Kȸηo'jCe9俟m%_$j-/m7?y-o.wM4Cuw7"W{rN*7]c⇥y;lǏK{=2o\;l 7ײ~p^l0«{mf)ѰQ f7c[ }v@@\yCs_|_ 6Vy~7]>]^O=>Ov!d#÷im.ϐs6g m؆&VB^|=*-S.kwni"_P[2D/;~|Yȹ`!#ێ7TZmdmۈ4Tۛך=ҠP'<>|={|ɓ 4`Eu &5 *u~ hsNRVTL%xЀ㷆ph`5A>%j!EC;wGc+!jаƳN iR*A-Ϡƾ E!I]@MWAG\ŧ4)J!/CHk9u$Ձaܲ;D>N/C\m 22&uwS0n(@6+J5bQSQ"@oC 3Y{Tl*{ȳSH≨>4D#hp˪F'IBb UIU,GA OY@]PC_^WLū^ @Jw">Yr> %hQr   |,q)U ՐJ8Jꄲh"y4@/B¼RR">_CuR\c: |lՈ)haDA@oG RDh:=h6j ޭj*(eUd R#Րڌ_>2 >:'磠RRUQSW"֐_7:4ANnA J M j*@U GIO^PM'Os@M 88Q"8*8*(>5viJ4A:4`|h H  рJaA.jUI<9yA>v ̎fCS 7Kdp-p!;ʹ}Zj4of9Z -E,#Kˬ h4 OAo~]hhѲpZ4^jLtBۙ9I <ةy/`=>-PS[и;TIe)Ev9MGûF>CJ^m..h4a>>|4*$r8Bj dN%I+Og OZ7 Qq"npKN,:BgïCRm ν[T>J @|>Fh@3y sg֚5[k bM444\e .|6O9 s3Sd]C{[?gVGW5޲~{E-X*yvX`F-c4vnͼAEǒ~t0 1~i)}cX:~KϾXV2z#zI_«Dt3DƲ-Ed}[Rz~CӺZӅ$o54 j$.,Юj"l]xܤR.P]6W#Y$g@ p_ֳ$ }O+8+rTWu5M/Pҏ7^(Yan,aӽ`1AGna:]}*[\V3xj g[B ʻGv4R=™ē=ϟ>%g.}%=Ot#<7ϙOky.kqA=Ll*%>p1Shtu9lxge|C5L";=gq x|bh&[Wݹ;6XP9`\)!Qm*Z:`r59f{ғīY! {Nx̘8XƘ/J0ő3)tohOp6sWOe\ $,Q*O:mF({,mvW7`oz\-\̧Ce\c"J#/&9]6 Զ}sLGv3{ncxHBʦ:"=&py7Kr`';f=sgt`/]swޅpAnֆIȯN}'_e]{KpeG۷kk\џ-wpGLMMMBCCc+H_-OQ,g4wpd|tmާ5G} ]^}a^5%[~IEK!4\*+@-ƘkŽ3a8x4|}{[%9ަR@Su)tǭ 1+J]Zņni<{4pX)C@G=Cf݁ e qŤs }:U1I a&4p `ǀ ,(Gi+,PU|>,膃5E?qpHNqGm;~Z#0`_՜Ƿ% "ɝ+k/|5X>#' r}@_~ӱU]K"zoqN`:KcRy$״(٦BshS{W:9_Qje/em̎vJ햬8P<Ñ "`פ1,W=.y!\#4B'#ШMI'vN72L3џVj)fnW_Pټ}vjR>vlJM] ʜ&(Qs+Gq<s3g{ 9!5AmF'}.,/3u^{MJ/s&Dhg:]b8hq}%7^|*QD H+s]_Nd$"͛q0>[Hr&E}Jc0@n}%ۂp/;pe-9"m'{̛ީ:TRV{4冗?8=P{" ~λ:.[{B-iGMF ҿb~j-vKK~JW's6Stl8\&)6|*Gٻ)g>gӢzk|sΜռ뙅`O;u}t ˧|]^^-ڭ׉r9Z(=^TXz)¿5wHS顏rI:-f]_Hp99sFG5B]b9'㎛Xx뺆Iإ@|y~;vIΤ%#i)ɦXynx#FqwS"Ts2|Q 8Z .MmYѼs[4΅>{[+Y@kI(Q~ɂsϚ*z1iƠv~zCWEbzd+?Yּ5`~J~Z.WVynO/.+¶52:1)ޞqBSzsW?:62֛ 81Lcȫ,Π,A5{Hn0){,y4z$dkb C8N{-.G,>#~>˘$Zq7fuάsNGx:~1bIЕSسA31X, %yigb['GC%Rҏ=3|m{"'[vшTŪ "Zֵ'K" zqcV6fu2pUh}|d_~qىRΨtM7N>s-Q~Sj8!D8>Yf @f$tԿ@2/E w\O40?ybcV/.Y6v]pZ@~b&TZ;? q3sոڛ\nE4ǻ7I1^lΓKլ|Y]SöM/If/VX`Bid癮<>EIBͦ-0Z+D[yr| LSWLy[7s:}q'ś/i|gZڭ!u&=i)}L1Ld"os.sQ MRMBkAD/xLXlP /~n̬_;r>{K"^J1B!\kOw&ͨJ ,ٗ^/KzzK#VCrBZZ5[7 Ͱ:[dž`^?b;wUWGV/y"m͓H$b'T.nn 20>ᐴhMk w=xBTliݬm5Ϙ ܑyM*@<= Hs8hņ8[FCRY%G>}^||i@2SK>tXIydK; q\E{5m2tyٿF2nW%t ] ta̟w0t:y׭JLbUf¡-4=Ju]Ư^V~vB`v grS%[^HYJ[χ^!&IJ.nvr)eM://;ћޛ.>3Xk4aHőOLZ/y֍|b̑ <$#UFqk=Lgo\Y85*9fˋQiڔµI!:]:/uŶ0;qȦu ʳN)8\ר{}Î~B?<7h矟֤..@2l1Qns ^vs}vzdekSQQT?ۙf6] Ϟ< +ޫ޽a#-%~ 5TZ[ 5O|ӛzY:*Ek_h<{sHtv"!I$;eUG&i𿁶>h &m{;);$WpEaP2"FMPD,Tp$cSmչ?kxgho8S\#|ݻ*XOd_Vv ։{僋ݨͲ٩ $>q Sr} 0U(E붿Ilgk=ZR*Y*Ց$Dk[︒HήJ2}2ODH~l_dWj1Isy-tzCnTN =kѳy;:~a٢rݓw?_A&G.ֻBݴ#/Uش979>gf9vv D+⠟uȼ+d$շjD.Z( c?S*XFb@:7R졪)R673">hRy1]miȥso?xxa&ͣV(zQŔQI+glĹBb9ͱ}b_ʿgd;ix^*H]x $ ̡;Mkܿ!\S3[ G{vYQvn!Gq R,K԰wF;:/D%{6{1W`.Kl&UzT\k1[̃4!դ-=V$}Sevs=7LdR7/KlMC71zT/ݟVeǖ!G]NW:܇yj ٙwy(U AFQta%q~!Fa׏* a^lm| YC+?9Ȥx(R,v1k͞rGu>$czK<{I=u Iյ&+K[Q\ zHތle~$ C+f~^|ɻ6KXFf&VW hD7>߼'?&ͨO~kI&"!v/>jy{` {bt],6V/y"mGA܎^l!MO\.0W IuKʐT=?Yq1l/=c#FLE)Ĩ[Tz$bϋD@,.D:tդ퀣aMfV [ŌzD[qw Pqr+>zz5>Ky yS"{Jiu fgd9d?<]`kzAi{5f,,8jQj](oi]λ]{lE3KGIĊv' ͤ2WTҾ 5L1Kllk.CsĘtxz~PN*͓z')!q^sIC8L$[w [*P8TV);|H0]2)7~.daKwlk8NjEf3Wec9_ap!W*Ai!%?B0Ѩ 27 yd /i < 6n1zCC޻=w[IOJm/͝x AvjC!bK)IlQ|-Tz&D/RO7윕5U}ĥ@H-CxM&/⚬Mm99CcRvni3q䯀X 'Żģ箉7sTVHjM]R:aHÖ^S^Snu w]=G>i>X[!=0gr\]2ʄEoNN|P쾨SvVL|GZ2ӟ':Cʭ73< w@.. M5xmWmTi ;c&>Fww&.47|jr]e˖k2Yl=*1^`g;2ӱZYVFzki)ɵ<pZ'~uCb?<>·^Dɣ%-} S)'[;E6.Xd*X`O,7vьޱ1u3^< "0O,x ldzp:~DH*c}N>T$#! 2Z@)N ^*b! ?Z:Cmj7>WN1S1tē '`eoMXvrLVڣ.!#]: B%PwztRx1}pHΚ֭3G̢|1/)iO,2l&S²ߢap9Eez,} _e.òbxT.Yԙ V?S}ssJɍn|n@$83tNPtAp|.m{0,ֺ%Obx)G;^Q?~$aQ4I I,qa%\ez2S^U|aOɾD!"(H=Eǂ/L3:Egw'.4T{Q=6t)pZ'\F|vұ!z\Wrk4 + Ji9y~gҬ)-B}Ǡ~~0۟Sqoϵ:n.pV~䉵pZ'~uC1ϟ ۚEK2u2ֵ ˫jeku^w[ޜ+F6z]5pg~"E` Vs,= hfKk\فO{қh3;g~"u*3zl Wģ KeId%V!o_l\ދ -iuo5Fx2߾Y-r`\ k_{ GxJf[HY*y705dAg#{uOB#Ν { ~42egڑZQbjSh%\{&wcՙ;[K[q*Pz@:pf%@ 1+8xeSDc+_ Nh0 ȋ_?1OOt월O.q6|>[1gA|( ]d1c6~e˘˴UWmt>t. h+ljOH qpW̩T%^s计mb(U7w^]1 Dbq|+S'KJ_b^dΓuO6l!<сً6<f?_.*ܱ1,T *x- g hz%U '(&H90NʒLy"I δӿBʨT2CJcCv2 щE) ᨎo?!|3 wYxٛ7 k+$pU7jIin.{'xKg˅1sQen@+SPujbɮ}~y.|tnB֐1t~tKYfcniZD:mۯ3ܭ:A03[2^rHӨzlDDi@&zΝ\?e|%2wvRk g,[QqrU{>)wn7 W^&:_}tُI<n5B\&搡䖠4A ^;Nv!]>J ( sC5 Tm#ミ{(F(=0H[G},+2x2A"XKT &8"GZOЏO`NÞk0 1ѵ`pmu5P:P }N2T5(=Pg5G|Y{n ( A+:>:motx3wO/}7nq^ζ6@0g@basxnAp6ba:Ui|"托'/yynWuIfα4^Q7/^nR(MdI!~:GE{@#y9)1J],iW=`A<[(%%|%-8Tn, 'houHΓZH\z|~l4TlabF}Fq+o0b<%X2[H$Bb 7RV+#KȆc5ۋqp?PMtk'8Jsx)[z^X߂%r8AQBP( B-s\%R7!sna_">Fn!Az)Yb(-RxmOi(>jY,8!Xdt.\~=4aefK.F7snOfmٙ1'peK+^6[XX t ; v>jCmƁ : pZ\%]ٴں\{wG(qwIР $C ,2;ͳߪ]=Vݽ=B?ajg̬_Ou&z?/@@È=‰< ޣI\P:-ptIiuV ق"xƽ_g {G@ ><`Z[[k ګc9CH?U|}.(Oj=n-HܯL&),d/)vz6޿96Ӧ{Ծ1r Qf9Z@꤉ QVJ%\_.K@M$gYp}_R;k([]TK(t3U!HKKsf>GCy(&FxB6MfVV̙囹>FoF{FFFv]^{PdRXsG[]}0:*M{A*~Z Y/٣E]U?K*;>Ne$>aR-0W*@2u і_7r2s_N| 4ND4hD+>~AJ'Zcmc/vOWU fq̢Mih$i:BͿsh = @0{ _4{R"Vy2v>> ؊߯6%$-cf`X(mf5$7ǵ;S**ibo>@ܵ{h}P/iD@o%_xO`o˟]$C5>!Lߑ-plu(le}`ojlsnqIhs*MmyBJ?N[\W\S}<*>F)53:NJ6OsD+L}wy`K-}i_V!+Dzu N%j|F d:9'0ܧԲ |ZG~b~=>C(.W9'{A}ڝa͖έ]FŮLْrQZA?=LVOSf@Í+꿦r:u( ʍKOXJ7)IlTa;[0""z!X3+;G` Z- {c%kmE~bNi?oXWzx[Dj5o"^çqʏ;WLT0'әwA ruMy¿;<3W>o;o'K6u?I?Qz4c;$_7_Fe "_ ~nru7W13(y5N}W$fXos1.dެX5dbRiöYqkC2} UK-sק&v>|oSH BZ:RQ2Q~̦ܦ~BβvB>QL}!UGRCYäN˟nCFUP3M;bB+ATi7Gʖ]C<#~Wh%1g H^fs v\p4hdmCQ@x^w7C^||XEÜ%!ɤF-?Q"zTBc0k (^pBkbݍ|AA 5TKdk: )2˸`?AqB剪|wj~umB("KOwD|N&Ԝߙa~yV.&EQY5MC=<풕e!)ߓʘ;NK̛P>N8*ۨ3yv|஼ɾM:?>y ?q =G@0 h}8@m 5xxYC >gA23Ѽ-ɟrh3&C~y8߹XGt򁠈fqh۸;y"W]4 u+%4YTI1[`ˏ:t|,'LZ#nL7UV#hCi@iOczw34 _CJȔ__W^{w^;\uY8x?|M뿮ѷlJ&jؔJ&~”"}|)5D26ff۾F^}݉-#K؁đ[ԉKS#Dx=d=t=7Ȥi*7@5tI5$5̵d4 짨R.E󭂧5Mdr34.,8@C"@>A&)ÄHvHDhagQ#¶}R5 b[*|EpSl5Vn,qLt#Z)!|Y[J{;3ܽKg 鞳;?w̷z'I*vFuw>Oʻwt*r>H;>"5[  HhGu1`?7?!{yf{y'IlLv?;2 +deա<]e`.l@ke> 1)pV7TɝXn̞o* 馤w[KEXWkdRXC];~ٸCÎt I ޟ"cT<'UE.xn\.I ǃVϡѓQ~ft|CUJfw,ppXdL\B˒Wm G&I[ʶ$oa̡Ho"shs79 ]"_/J:F wCqw'w[ڡm`}tutbkYJ& CX@Q_ԣCQtf[o|^o(O&NC(=8_9ҵbm$^:nt1q8@ AہV>^&12Cd9`9f$}~ 0Q+J icM=xejlrsfdur{Va`hFn@9@n0U@sJ}àĢ>#wj]X0, KFaaGơ&֓~uI aC,qiܹ_+[{넏Y滩]רCgD@4cTddSdd/M"vjVnLl-=7#$3]*ވu@!L`O͒W/ob!\C?cPwqtJ_F8&kV<~ 6tYJߍ:} ƍ\e+a (É_N. 7v.I-0N?ULV]*A, yOaڵ5]NP2+U62B0پo,nCtCwmeztmytxqKtW*@1D+mUm,m?Fz=K(m<%RIA b| ,#E~17:>SnqXĥ8UlU\CCU3D˪Xzfbֱ!@}zF"RhR+#V=N=N3&Yėnk.daǭL*ͳo0CX:N$\pG-GaWyp_rUMz-#~mymkG/Wk ]X=F%b(\j1W?>7,VSŦ::HV0+9 { -s <+CLz"@q* R#Uq>$nlv"fJz6~1wK|^o(O l 3B MEu4M>o,aY{8s>B\ N3Jٙ,k&z '-Um靳!]$R"y{`f1؞_1f7fzjjr(q'ߣW쐬.ʞY=T;yH`q7)mVa#/ ɫyZ,\F8FHGfaAOG_g@MoWw͖|AE6s="I;\O`Bk~ͦ˲IfLPqa1Eƒs+ oG,+A6JYT>3||?鶰݆Ǫ[?PMLM-6n$i'y]ŕ}%.&,^xBҫA.p= AFK@nH؏4~ .i_}I\$\,ߎ8;>׎'-q^REwCC!#waa};HL5'}}Oظ4+S0!PIML7Id@ȱR4v g/sJ7az y2zvvv~vqvyvuHz@ϿW'+XHCI3NB4M@O ibcck;4# C%qsvxh~ AHo(F"i8^HWhG [ofwRG?lC $a*pO`; tkJb60b`q(PF; W}o\>bTO ?j Kw|) >qk 0ZqBU|/untec~6j9L#|fmyavJt1 ~jxӺGgu1.WJBSmKխ 7,1m6޶Y WVTi.Yx*~ C#dWt1 閭><?9ݻ#dsy?>4 4"֛ FY{%[KZtZ,jTv_-}V2-6vO҈wOSߡ>v}ja1ۚ 'Z4 2'^WIII[I(}EʊvJɦ 9rvr^rr r9 Y2$ 9[)&1n` ¯///.6/v.p'wu,}*gM v-Tl(e%hV,jgkSG9 8y| eyGys`$jyEZ}Sy{?)E$TؽQg *~,4= V/{{c쫰F.cAs)bo4hB #BO2T| MSe<dH,SJފ3z>su[2244NhKHRJTNZҌы.5w1&PE#[bQk0Զ0uwhYxU5H8D!K*wqY&H4>ѵ@41I6niC{&QTE5LTfy/}`\!6ϭ9g܂gY\mN`ŸR_q+M[kd..R\ Awl|Y){GU143䢨~kLXmbbRGJA&V.V:Vf,}fnK@ܬM_yN@ _jn}Z3?fL \I[nG^\@8gaP%fx1L!,b xNmsm@}g&c4}7m9!|,8}Wi`GeI2rM~d,G\Y;{jyʳ4>\󬷑INعI>γv6V!lz9W܀]WQ75%ggUNDط53v{!G4D` SM?ʕبmk)k/k+]񵿎w{smyE<qi\dz=E|t^^‚fʁJX!B0{w D@P¯iJ ]{* drv[o@`ɟk2 Xqt3} 'lNj3sFZdr:B<A>6>. :Ƈ |b^-G=%S>uqo254HLg* DGwGD{i[yjE@5U &\5 ;%c!P+~ rrL4)\o~wšC&d !kx52LV(D.v[w:jK?XZ-}Or H;?z[eGނA^Be~;`E"XO3 ׹xHP~Nc"[EŸ?#RSyikqׂĊCY 7%N;ų2K}x3voN, )7ȭ(GǧH{[wnww֣1Sût14w`Xǿ,gM6i?I^^lAp@O5//ʾϖǧ;o{ɧY{ND+XVƖQ;.[@;ԋS,܇tC$1ƧmI='ghۗxsC[9_˟?G o֓έ# "v78^ /}xRy'$ ]7c㠷#F`ߎ Po]eǁ/u`*)t;tGCß ;Ž3>|kCZZkXkCWZM@8id &bTD 5L3?mYcCt)=*A\-H';@ D?}ϔ+ J{Yal!&9 E~?C% ] h,Z/-++׃zL+`]AQ'*ܴ7{Iޗ6VL$XbcUo44!Tr3K/|W&}k*Cy|M(v];W˸3jcX%U7i(| 3аbۡcψ#߳ޒY%Dq8({8[!J i'VZaEZL%>jNJz~DðT (N /.VnUܠ.=~n|M^f`CL㏋^/@:rE>!'[,L':_SǺv˶%JIm~NER|">ywگ`/~..;7 -7ơ]8"_b5( *= е0p,f+l3u lwrYBpn$רeX~U1 YǐEށc7q?*W0ȴIMs_7@|S@c<*ZT!Q0v5Q暡"mli=tW!~FeӚ{eJvfz^ߥ㥫(gn!{G)rŷmKثk;3 ֶ>nNf׬_Wݧ,5NjqiM äKhȴtj "Ncô [S#g=sɀk~K$7T sLك){ m4Y51H#ܦ\ e2cu-<BST˶O8kNEv]u6|_::2/8sHc,Y$F,k %>5O=Nw5~|(z8)At UG+CMsy75P*oG i2B%i"T׏"ݻh|fV"IẉBFyk.nJY,=up2e+wsqu*qJn9Z<B$Kh4i.@x^H~;nz?vrRHg[%yP@}݀|l|\]}A6#fq= Li[] !qډ =)^T6Z|2S #4g=]!Bȏ,]і]`NZŻ!:ɣ|,TٓLIXVHUK)0$^5*Ԫm j4kܓ\@W|HDUګ< F!DX('2M1N{3!d7`2J-N8[v }0A&L$Kv5!H}9{M>}H[]&1-NkuxV{"h9E3[ZqM(Xnjܳb-ׂg&^`o.QJOR>9jeGs=s<.`J¶=Bտ ,N*t(/.`/m."Ep޳P䐔nՆfW- xN0r00^rlJ/Ԛh,Z~uv HOTL)7\wxA|!csKy \4ݹ8pdlɒRI;/K : ̓D߽A#N?<ͷܥ{JΥ*^J-o?/ÑZ>S&\x~k mw2E[Х` dߌ)s'GPa@u [ t Mw [OӤi.:jihP|B*?\8^;7ٿtXjjfvP(X6XGw/zDɷگUml}+Ff;Vp1R֐,‰c(R>T}ݟIG~M]aЭH3[0WO,hhfE/czc,a"v[ށFdܡ4fKiR>Fhs?fwkk*{^CK:>39w(\Oio,`'@0_Zc.B-rK pvfQOm}Ly_ھƷ}MlMjMnHm^'Y%]*9s0c!tGo{ѕd鍈Ϻp}]!nV뛰BRljDA rgyDz>DaP)pnF@Pt;!ܢ]]g8 ni[%G/]F^binTw;MzRس֟ h`,)W)]SlעS0.ݴ P+^{翡<` "R7%ʹs4|r_.^RA>'(x?1 #a#}T<.)d:ߺzi9Z20Yаpi))aŇMܽ-wO>`{UۖG'57쨏ј4xXAr"%$WCLj܌0%:^`+A :FtI8iX1hA(nO "RV2ms}č+IiװpNDָ ->\(CM./юv1ВOP.oe68r,̎@؁X^'Y1ywRwwvNSL\W sXZkpnbp-9^0yT |{x_蟡ɟ`p> xKUm>ߥYEP}"qclW!l\'DqGm59.Xǰ`k?\n g%Fx'g'GOe//Bϼl} 5kٿR)hsX+OSb;U~ˬ_mG<!+pd 434443 ~AqmBь@7@BwAP/S7x[/o7Q#XJeF߂WaovOoQW z$/=2k:HbQ3ϱ߮7c wB!6r55T~!5 v zTĘ&Zuo> % c A@:>AsF.? my)};IF?(xA[nR>OyyЩ<8E9rp*ŽD;D.܌\/\m!!_" `xS097 B^0bzeyDwAql DD $N ݆}zϗO=UyvCwW ^տ5z}y^'i cޣ "*~F2 W= ID,DOpdJ gj҇˙ǫvvoXdCE/pA[}@Bͫ+mW w0 'XFஂ/Deo]!^-L SdX 4Rm'Hc[UQ>?H,97Ż'Z9_v>Y.֗T^~ kp8rOI8dkcՊ|$iB>~!"$|dK[ennO7E&ea=P;!xҁ] F['f o⮲ƦjK}5]cp~Ze&I 9*@u*T:?S"DTvl An&[λ6 u,7~3VL7Ϙ`ɷTyyhrmҋ5m) A&j~lb_aL%ĞCOLPD /:\iod-4|"P `n")D#'^κIz8iS^&!};.oh?nij#mBGD;jr/oaF( W?dڼy_Yo>0"ɜo/[N2q4ћ o8xF#[RSmTdQci[cԩ:﹥{m ]kF^U{JfԨ%z7 ya!pew,ڳM#NȠ2 ;&&9:*?p\Tk0IcZ\9}_?^|7iz{v'vIQNo~99lW9A;A*Xv)Y:B=KM Ƴ`/SCv Ȼr!jѣUM5yyy[YEQ&ѳW%x#O&?}IQ|-"kQ5P uQ@FgJ%73 <,JֈVvƘNCsgVq>LwTFk,\%3u}y%O;4h\l3RBIkF9Br#K4#Yq8@ be4N}h<Ȕ>M\,'~Q3S:YlH@H7H'H;H+H+h*sHN3Bu%f31ʩ?p,X6\r"9HD]VBrzv~Vqdlڄ"* ޲k%|?IC ^ꮑjΑjvMӮ'')?F>aGN,>qbymo<͠N00G8l"J玝0_){W% _1Wހ{KmE~q}+A~L21@{_nZ/n5^4.X^`! `P0H8$? L_Y|хmS(yWボR`[ĥF)11*Zl#T+(9~[X(}v xԊU12Nay M Hn9Q8Сѯ$zL-sOٮ@`ƅdRL aaptdťx HTFi_3qx^MSov +WY'ۘg8(6FLS_uly)$5VP,4}|he\$ٛ\<'?714 &?[}~^(],甪-JOUɺ/Z7Ϳ"[<>2p &Cl")*1f۞N f|kmw堶)4[HqM9O%ԥαբӤO7NxidzthwjRFvcɤ͑ʂ`G ]^PMr591{/w&)/ye"Bk%L $dcR+]rN1zq_j'xpM@5r Cѵ'oz˄4l, =״THB&-a_Ç+ Yj@lP4 0G'wjj:aԕ[. ZB 4eӟuЭSRt}#A 7;uߓؠ[ܳFֱu*PGŸ꺛xgwvQrq"f l[Pk9jTQf)䎟ʂi|O\F5x, {`u(w:vC3tk4++K=xsĝ%qۆv6q*E81s0ڀW8!Q.>"(y@s[u.<0{10*AλV3RKfmyA@EP|c.Wj䜷"IM;Fx |wo)6~~3ҷ<%)*k-}$[+gw/D-v@ekpD\5nG`2{[3V1z× s/6X-wxZA*vciq 'so=SΤYk S/"j޷&60fC$`'Xy'UvD4$DhҰ$ `+%d T3 ;4 ;FeܹB{NR(.!CW֗I2gzzw>frlxᕟӉMvʺTҶlJ虖AЍnZ¥|dTJץűJ*h''~/4v_|K` /AWV;)wldC3_nN=ML <:Yx>(TB(sh_x QvK:&ʶ71(=;ze~.uteicĻkdc"-1JpK=#/tJXSkջO 9!6ύl9k^=fiReBJɣ2T|>W?&S- q6[ϺJ|´xTxٷfL*6>J%\ ,޽<5sgyaB ];xu`OK%& !ٽKݱD:-L6@GBӃG21!Fk3MR]|/cJ-WwO{n{+OBQ},-uMT5XP]82@: Uj)G(~܆PA yG 2#G`$S x ꚛaK- KKxk/Zv䜠ߠܐ&Ol._ @t!FܤkV7S$k 45"y59Ey9"πK``KzN+rtyLwBH5G~wJ§m.hfzplF^@39N%6@=R#W4g$ySjvz☧/qN^1W9;"{2WO~5'.՟(:%Rr  kTt] ڵ'tW|'il'&1 uNԈ)ī-djkX>2wqeUxP g%!dAc-67W&w Z^Ǯ>3Œ}ȹN5B8OG^ֹD5MBeX͵svHhTT1 ze+>ZF3uBߧ>ޥH;!-93-'s?exhWV5C'/fc_hۻ[Į0bڵ󯥼cFgv=. p-X0m9Yz,Ս(Mo-3EPY 炿@P47I>D7U}(-@ HYQhb[ƺӳI?lęH?N>TwukvbˆDڠ@ʠ딞RV1Q~_Іn-3aMsX79a{/v۔jݧ,#v5lwvbw*h~nlXomlɕnlaܻKWÕ#8\TOl8he]%8~{yED{zw^ L6X :3ݥSUp'hz,h2J~翱RhW`OMoyoqw?O7g:{k( gO/Sl;.@]D"Rc`2MU'6EZjF_жL/F9*wjA9ku@gdӦ]̕R( ]Rr˗|$0"ݛ]CGоitj騉 QLA0P# &^w}lU*Uzs4UQOt=u84:F+9pM ڧˇOU_8RVpMJ\Bɻ#:O6;ּۮC9\)M%2^cpz%}#Q.y碙z:T_=Bt9Ar:ifS觜o-eg{0]-0%^k>mWV:l漪9UH]Zس =JIi&PzAGdϼYk\ +e,$"TYVU*WHȉo 2=stqYxM6N2#)LcVq#יZem}Fzrϻ_-[!akhkmϗJ3Y6I=eYN|P( *{&֠6,s,tZ}z^ N` dOmbx9J/jT#2vL9Zț[VȔK%z/cZmnn>RBp-D r*JX%I-Fl hBն]L -qRήE=VA_FNMzdoiʡѯd- ӒaRT+]%"V>lrmϘ9VI?HϾYij]6P8`s$Nr3o[mF=Qy.yx2 F` :T{~g uDRIeQb}yݯ6эoH'~V-OѤ|h]tyܛC/gn?x1$鷈 c` S  s]ܮ%q¡ i97F @P_ɳ_G=+yԺmϜwVl\-=Mbǔ&ڧHʻ|-czECr] 爷_.LR ؉EwYtC(OzXdu}k߸9Ԯ{sU"׎y b8 }|PAMJ/`mb=8ƶ[y<񁹊N;1p9c|gb1$-ZvpRPuDj9-dI9keBgmjo]#LZ&ʘJY!A\;=@3SS 5ZZ&!'@ )@|H-٢֤qN3pA6G>uxV!]P5*cxWL u~,'aL%a%-yЍ dMȅ>R9ޕ5|߂b 9000N4<<~]t8o?g7siSܤ-U~ކ_ [9\5 =$#,eRifs^q *m//0OW%u:$i[;0cȤRI$V7:YWHڎ=~@w ĝDy/^+eyy鴑63M,`Xǁ5?r R\s*7NCƓXelQItܷHhPg-;t-"@lPdimpطKNIST$ s v0c*,R6B<:Р~ckw46ME!Hz:ghYɒxPE1Mx;o 5LTJx"Hfc}M5J&_z0~~DaU6IOU ÐSHp PO6.|cc:o%w'9\g XuOU ~_C𶎌_3Q=y,TkpPBgꛧY!h̴!vLq}_n7n.ϐg4+GfvqMf~6~ι #O>Ku^)M4ϼVM֍"VJF(/*bK([V&"j\xkbss+ ]('Y'WX]V_L}w!/X*fHf5~?7r u-­p^)x=k)lJ|=\6rFc{EY%P?C3=AP䭹ao:cnߧݤ,:տ +_m\6TGdiEx1mր o-(CS젃 ;a}ڍs, K,KKJNK&k217mp7D N°<I=@ɹEк|sN/Xen~ ]Y,|5$^*-5%&T HQ;l`\!12D :tn͘rfA&UaKj1R ۂ&/u;)PwCiVVK}Vt_;b-mc?AϊrfHR 1 f]oef|G"AIs4ƹنhgHUlu,+.TpgMa1ic`e$U^W&-wxSo/XMU];nxN3wťfuHvL~[y=Xi,g }lrns+l]o=do1I{?4` gCF9&`])ۡ.ٌx'Od[ԲKԮKk[x/98 ok"MRQۺ@; -nܔc ~_~|ьQy)a{"YLȴҡwy7I-!mCwy ə)ʰSo%Be? .-W@2(J$,ƚ"͕?ZkU -%ͱ:M֍mCKvcg]x ` % EDזY슷L(X,zSeDo]-B:Լ&8C%?.+D0cO<TAwe0Z'xT$R;Z}2|3%~ |]|{1fuX:~+f}›7^CoT_su<1*: 23V}@501ڠmupjbuț.vQ4\>R>Q" 8ͥ0ͭ00밻3& Zx+qC?pL1qi`kem'[`~%N!Zͣg[)^a0 BvJm*8g1?}ȶlu;2U\H2azz"̵ M?}6𡤇z]p@ϿQ O8/FͮQy2VNqAnjÁK`> &U^!)\zu̎mԐ>~ml/u_3Yh@q+]51&nݱD ~[5.V"S;w |W뒞sxs]|п=q&8[Dylj9x=OY)c'f,4n}uv.+ќ7~^n}̟ifi"nz#S ʓVVBVa|E,}w9kk<-})$$a89 9T JϨCrW}Ŗshp%/q7 '2sDc6Ul5.a"\MX#>Z#J!Fagx#^`^a s_{N/hWe>Zb8§Z:[ @݆9yb7'?"++n?tV%};/edUNrPʂF]) 9:}BBIP:y 0= Ư{6oZQj8A*d q <Zt%@K a#=@"^X@ ?.ãפSlꕪa^Ƒj0]O-qIjuFʺA"E'.l['Sjk̐zߑq G,c C8|?&s R-n¯/;w)tU= 狦tOH9^-=l?GiE!WÑ*#NnU̯=D/rOpv7Fa?ƈLxXxfڽx sxP6 Klcoφ-mRUrJߚkACE7)ܙǐ:MWxd12ģ>)d tiMͥ M$n8:86z| 5E}{Uϓy yó3 y5M=rאk zq^[<<Ǩ i| &"d @//;1zBˌsrW[Om_A/3/e3~f:f61V:ɖTݣ@lF3OO3l=<'z1'SWQ'6Weg pz72$]o\ݸ&T+&9*W yQ;Ԕo]H?w~]B2s%H`uBX+۔|m7Uc c ws]eڥ瀹bX"tLJgwb<.$+PjZ{F =,U:@6 \2:R'r񽫖,f:* 츬w_quAWW)[ '{*vrI-*_4DH D?N|[RO(ߺPѤP,H nB@ ЧHsɷ.nxYB]|W:^U"ܠ?<±}dS+lX$Tk4odqli`#W=<80&"!Rq-jqҳ'U.D[IG@OT@ оwrS~=sۑ;!hW8}{| *Z"c m%X{sV fȋG{65WveO$ɷ}ۼހ, ތ#@:5 5@;[S]yE%KZAܳUSs}O0/rDY YպaER.66{=Nz •T}ϴv^/wPRub-=N&Hȯ/cH"etfTHY]QM#MT|Ce*wPoINj븑|7Z4ևyӉ՘-Çׯ_kmoƊ&K _|INNz3)bW^)˭//;^[`ee}oCPKN?\PK/wy|uwk!?97@p@ 7@.56oǹVe;T@@  A 0.'Qg4x,>L_YDӛCF:p!NP+m;UV'{gӯBōx ?3_W^ȆG!SgJʿ{:Ikj+F*WfLKŬj;lDos.U0 WRVUuǫ8XjzKD &)zFʅ$pugk]eiŽ]Eauwq sUI^EAO+92& 7MŘxY/h/JUlvO\߱szAԀP(}'4Onuy∧uwfd0Dizi?{]vKD( x|e)[iiV'ݺ4zip3;jSw=*:>FS=Ff9F!>x.Ll6JV-57iv=efS!gKC^TNT*^;( <[&CY]63:Tr/uC&Tt􂚆_hK m,Ίg1ѪmxapQ]ͬ٫[\ }F+uHCiOBP[O\__?s#yrյZ8fۍVs$W'7D|/l@kdP:Za^8T3΢'sPjc&]ϸ^:+_AVʛO4E,1!0^x{`* TޏtrdzY,/Ƌԓu .^!- 50J45y8ke")|gHp m,㱗MRyo jp=Oboe.~fɭV˦J0&x# B4~Z+zn8PkSݮ=o7 ׌nVN̗o0qQیԓMi^9A >B\GvL:|*2_+BUy WOqK6?DP )pW/SZEoBӇ+?BjTTT_G':!{dk1DJP8d͉Y%~9M!U~>Ļ䄻_|Ԙ/a[k˿47l,NLDzщ;/婨 0;ݡƆ̩7} #>SzPPkz%Y1庁 l>@~c*A qA@x'5`=Pף܀?00UAɣ}íGnHOz@*7e?Q4Pm9Sqnp'֐KJfL(~e U}[KX'AL&FbřTsO6i W xw8F6fO?+܌=!ca,8yt}fmzxGT6ZBwd j5YD|{A.9+Ш/V;Fi)on pw] u%ș 'rѠr8U8B=˹mZg%%@>o:,$;?Xߒ?㴴ݻwDDGx#y,Lgc !4L%ә WɼB)np?BGkӬcEzeK(Yʩj9[}oSfUobwo_{;5A~5EGEB~ڍAހC_F=|[2zzt9ߠ]-].??{I V^QDN|\MA;쳰fXV^=þ(6}Kܥ W,w"煪q^v#5$\(dt?eSS!]5͂]jÎZ31kM:?Pm^EDͼzEm1ɦ%(]%钯 2 .|{qE02M5A2[!~J-b[;0^7Z- *{*+;?d`_ܨ"_.PXi.aU滟ƒ*IzIpld)\Yt)a{[ dHWg}/eTOPL{ku.rz1o͠Jg #axh]+5l3h!N{*Or<mzSI\reHtac8OʓCLq:O7gC5}||xkSԛׯ4/;y>Qאl[kKHVsXQtu"4-?+;xW 0#dm'Q&6`ҹ^!!ٲWOwO(g{(ўzHY^ꟵYZm颐":NʎѧSX dD;hU},Z?8:g$WӰ=nTӦ["%SkYROvm<=  R| #s9 ߖaԜt\Ll,cj/h[d76:2G+8?+|?R5 @Η5W@y؝FGXz 9MseMrZ4&q1ϘӼmyhw7TSBh[F> ^d;h<)Q8K1;]999Y/{GD[f'[xV%4b#"M|-=\m2}} =r=<mOotN5vՓT'm;TSxSkbz$s7ԈIfg+IWH4 {C®"n"JRB ܶ0-Otnwxb̚nM~vnCA 1im*Crs 1&.^[a39 }/柼</]m @" phe.hahj{ӏ>rGZADM:~Đ'\,]$]i!o-u?rJdr$ 4 U .UZ,3oQH^q_mIfg >Ϣ|$Q`6o+HVNRN+X`~<~ ydrtVpqthsR?@iP BKHXae$nGmª&.,ӯ2mi!JjFEE9:y 7{v/{Ңwu)֖g=|Fuz5A.Dΐ\PfjD]e^I;6;K{28@ ;Ҩ{BR87B'DohZ"$ˣ̲j{.c⁒ʼny1Yqǁuבɹu20"">6kAzH=W#_'|̐5g3$ q+RKY\%%]|Hw(I[3h]ʗTsk'=qRqݷO ||n}(o7bM5HEit,|8xym}csEΡfd g],^|="Ѹ2R>y_;|G.&B͗lgWHmA&rYoS Nv VZ_y$7pLH 7 Di/u&t6(ՂsZb쓸yleQ(5Xmu),@8Y蠄eN߯ts~8]?փH沮uO,v_ 0ȿoΰe Yvwp0T.nуSKg)ߚ(ҧ1|ϟ$`Va<[8cvqIfk_F89%(fJl nrmxlY~{ P>b_.\CV<լ#SdV9Z="j[Z`lw7zWnjBe}VX'غG8fv^]?-G|BlO}4/~ga0w7ՍyAV#L9ﴃ*{I(YkY擾R* >mINr[MD} U/ƳA]JgpOx$@\Gr6TXHэBƩNPxxx*d/F=жHm+j yz]ɮ}I9r/Zta(*ƫubI*h3=sK;!4Hj05iQ%ka 9 |nk QP (N;ƣCuKɨ8iaSTUD$+DL;8?0l.n295ssu/ʱ󏦡R3 I yZHKacew\UE׽Z\뿃\_],=t{x VQRXHllcoyK~f`Y S};6Au<ȻU0n$[+C\}|]"-_,L#CS*!#އӄK9VdȖL ,l?ߔ޻؝kmKLqs>$ד r,#b0~4,(؉r޳[4H*eoʘW\ڋ*a)|4+@tO;)dRbңfQ*M5~̠08W)Rc|"gI؞HRoHrh>G8D[qc)w03Nswć u'EJ>fm o1{̉{TiѶRS+cRz$3_iּ\0wy{Q+Qo{Kdm3o!!-%Sd+{ ]+ZȀ-#=+#'3/)*961+5m~`lGܙj##7;%|ߨ{7=u#v"_AQr/]ނ`onx^jzOrWWHfsD 8.;S){86yw~ʞe{lmEmi%*gZ,iQg>?hV"lrA_Wcb+GL{R[hrn%ݯm/6*;3ژ{>[ |v1#X\b 1܈y.+ 4{=˝yILdeX-a'V[yO@Ayms;).rzڹk${x+$ c;%EOIpM8q3M"-Bm|5lIL>4Ƨߊ?Z$ 4p7ފz8ʾ"W(`x:yi=Rxjzctĺ߆~Dpᬛivy#.3VJz.ɐQ |j&N~ <(_Xi{9x+mvM=!qBE am$Ɠ"{vR4o=iA?@8E)"^#e ݁`i7d +4}/㝲\ɠiqyBUm/-aeLTL! H60Q̯A@0Y_S?[,(OGKžޞk= H!=S J v5syPG{yNKOzy{`_yz$Udgpstv0UL_?*˖L%"UA fcm1l IPXճx)q7~)i)ULI3 3LYH=?FzDw: mSO̘֘JB g2 aôI ycdRlVom39 9U9L71:wi T'Nc[:w3r_-N/ZGlE>8#]'1}n覌yn|Olu^{#-d8}E1 cO: +w/S@{h Gx CP7Kw䗌_mVnpfq#T@78xtu9x iŌ8FՁ"=tArYQDsAb\X&O5C7s%A1WZ q] Z2 _5Y Z0qw5 UjIՔԙޟ=:,PY!i{:rL聍}欂M!1cZmn%)\)fZ6zgHM]&_(2/v 4&;e:8{;XFF(&ddK4eKgKep ~V 9FT~pOkkOVv^ѺٝCvط{:x7gM.ۦo;br%]*j/EL~jfhcM` Cҳг8;7I5xC#4~9xb>rD#/0A=ObA,Ģ)o+LJ 2䊳y{[F&-t[?Xb=>,ҳr 4L-nPJRGxID9d%TutMm̒ݧ{GUg9WwX Bm:hEw!_`H͔hX/0sS5KO1MCi\FnJIUl#D[F=?g=Q`i 3GRMI?)\Oɫx#?\b2O~:LRVa&韇hE+&Kof /ekS)O->sd`wxrUEw#YT oPV@WM |vT"[8|l|L;H2LW9B;8N}ٿo 3 x |03XI"؁9ẍp o0=b-R5JN۾)v"?YTfxDKx"7n U߷L,TF2:Ԟ!<9K'x|ybWKnpt:V.We*M?c.w.xT(R(ڳ&mH.yV1bC"Pq3UhB޾@ؾѾt\rquz+ߔ4᜸b (-@Cul>ZEL:Ay-bҔ?OB 4S >:3qb_Ϳ͟~[4G{Eb# _ifnQ,*kRHfu޴/<%uH0F5=);6P4cqpǑя},2%dt=1u=7\&qp3ɚun3jT+f+*䷁7|JfMܐ o[umL-} FKLC KN. D`IwWgNG;k󩲓ccUF[^\Jr޵(_$t*1+7!P7yx iqu,~Ƕziu =,LGU;~.@<ȇA=l}DoT>RL Z|P;җ;cQǟ5.c%h[E,gK@&#JkS"}.C#bDW//ˣHi Gx ʻ.^ DFx7H"y`pf`qi>z9b-aqUojq1Aw7e]eh&k6q0CnPRы.Ovnq^v>Ȣ'o#X%ѡ֜=gYp%u%}ca: n:A>Ƈln̓oLϑ.Ĭ]I׮g-K;9V&!ް܃|飇 s"s~T i\Gv&+wgO>P.L*wrTHg蜅;;D^hAZ/Y6= h&(J?t1/t~=Xody6Z{Qie]6]GE9<HMt Hs47IFE9iHR{hZ\*}iڋ՗+dֻX(oA8"OvK %"^u-q_W^۟:ɷo0U.ϛ$1CLu.'o Ӝ _""-b4s:I!3NSIUi1rbtE R2P T??ZW^=}'a}wy;Zlv|!0 "ml#p(B=UBOFIA"%$?֟ mZ8 lRh^\ž3-Ta#I7!HhOzp_@ͧG ְ ȓ8vSs;GN(zմSc> *\8hDGju}.L8Q47ZZ&lM (<Gߑ<h]UNotS"Z"㙮lcml.>vJ/a9VsHU"9>cX>}X<\,QTx(}h o L_NC6Ԍ96!qHn!`Yn? :j:yz+8X&J8)bj{6u`vesM,]k "iL* .*ٞlᎊϥ}/SЃ/î=$gX7 4?4l{Fb"Ol,T98&@UNMf^ X03vI)jAΫcC#M9an!^f)ARcd[T ~6|$PKwM?Mp|y"fڠQ5t(fɻ⩯Ͳk4U2e+id$&EƆJu[E%#"d \WuD(.!oLUrppP5355G1zfNm2ŤA2[-(2÷,iR5Fn{ ƻ/6EA6ގ3G;6Þ&UQQa.9`_eS-pMam@uӺ1غ&E#NP:CE؏xW_O[pOPDUձF5Z՟G0%_OӞ 'x{z*$ ^HgOĚ5̲st1vZ.?._=ۂaIfeVηlY_xWŚū5Mv=]!J5ڃJM{5Qb$[:VRlY`'=Uf{}eu;C/fK8J~nf<]ʼnݖ˼ۈVM`j1_%4$94EkuP%Er#Y)csrdM$"VA= WsQ xߙ}v*ϒN/]œKV\zi}Mq1rK$ѻWGpP'2Ϸ=1:V(D3ٶpPB{X/hŊ8Xlki=_@֟`\"q4Nh䝋9O8IWQFO!9޼ܠUe?hyi3!]s G{/NN|ԣHqjF^tTJ3=9R634TO>S_|ͮC5#k*G،aK+lB"g<<%xd%TV$w{OYlA.r4&FC"W.,8efPw\` _0'bsNcS ]+Uw/~7n~oQ5SF-!(H,1h ]w;g҇-wvANU4 Ξʀ5O'(yn[@¤:9*zi iůZ*ZC%#[AT{Uq}pʦmϬ@{0+ײ~k'y1scm\cdgs\GEsnDkF 3qJ Y~4ey|Y>UHsxɦӮàM)Y,/BXtp*YMX&WWVBa*\=K$kİ[P < kuqeHVr|ip]C=.=nT;f^v8mScFHegzn2_<4̠>Z "Y?wS;ԭS( n0L &t)cԨ=dDI |A lU o@ѭHލX¦Umͷ lwr3lb]ױBӥ 5$k6tAKIT^:=LWVsL]B+%H/E\q:nX] -YkYxypq,( :!5f%cرNn׏pS+0zn&~mFj؜ȝ7?;_zڵx" = 8@ ^(JxUZ׮rMȇn蛮xyd҉" ""D!4#_O`n2> 4__&[&ڼ>YT$StOc.'Y\hZ:<@R4,yfJ|the!e+6zxEݿܼǙ)K\r4QLCvo'oglJ$v|lŸH߲ȚgmpN^^}vjyYqfn\*j.8k?w<\'hJj+a Kj)mÄdr);V8 ~l })!^銰øw Nᛞ9V,xqcؖGTvS 4ӳ)4rBLv=J9)SV)P9fw *q slrp4jQ=I.X&E઄e{8g sG0ʾ˭`KsjW]((YvB4z}6blwpi k#wfwӎLݎ݋1L!]yg_<&: :&u`/{O}OĝVSqm.*2}4{pAa Jp-z«}d&ZR =n !JvWN&e=7Hڷww&9[dTN׫>Lfw-l~@hj8M DE5!@G{H3z2_)NCrbooxKToh4jfoyn"FBaἅYzj?W"GV&1jN6luUMunn?jU*m'[&]!𧒯\C]9\}{J) %=h6\L,M[:0?I>F3~6KY'10.kB`EjUU_@eZZeH›o*W 'Ôf^egm~k0a  ׀-zqGg6?Z|j2xKY[ E!Q݀(`\wdEv`ל=ɦ}фEa3OR&ǞWz+Dɛ{csTc|GZ[֋ޓa3zPɘu ҪU#fiֆo2Rsd$JE+Džjߛ[z>ON[_%:9B;"\alb'__3$zlE U,c?pʫyI}n .)JLDo?ɚ{լsM\Y~?}Շr\ݛĚﭠ%Z$V2]Y'R"=QVY!o@GF@+9<=7TLSZ W'$C٫`̃0\!ڦi(X`aћ >TcXlHlP4}S)LQ-U!ʗ‹GrP5F_Q )}bKfHϵ,D{?-hN&|PE3`'nwG ʮǽ`[)lZO..aE s[R.,T*J$Я,zzR.Ta>jo 7"#¢TtdD9*xpIfzN:Eo뻮9\0gn5  ,  $}DE$d$}g9qI#V(+9-}y!Vꆏ/+0P?w5U޾qKu޼u8Go8#ygPo#Hٹ>FݽZ_=}5vF9gv/lPw#k`pIijhTklIo`'R)72^9&wK${8W(Uhk/23U\]U 8j[k%XJD hUQNm~98GĻ4[/1)Mmz%5y-}%.7|aKCk LイcMK]֍mնw?Э2Ot[xG%Rt5csxO(>d>|o 냅\+΀aogm Ã6}N,.\ Uaq⇹\M`EaGhA;v}mP1}dڀ1$ٚY lƭlկscEV߸b |Z^1 jybycb5bb>Žů,@VPETK3}Me\h oOlN@:w= $pA_NQ,B0PSW.P8~D1;@^ksS;dƒM}Tcdkċ+K/s^νr' =DM@v4 <psho`Lߑ3VՈxDX?{ZBݭ ?b5̲CD({q}<`-!2ʛ1=XB`\QIҫ9 3mE3"]  k 40FACEFA@FmCBmyBXG-n~y+YswEqMxVy^8jqöтCʶӢt|kr2$a0|ƺ;kM9|YW} ~|R<8)*sǯ  qSiV\#x@Lw|i8\1 A0Dnߠ8\F\w5o:[Pf)@C֟f"](0 `Bp@;CF|6{3S|mչt _N-C-ka˪7Q'|Yկ]1/Ȃ*] 6~'⾯фE?"u%M; [ds#F:[yI'Vb_|ZU]"=5 9x[ewwQw8V7q`Ϧ/oWVp!{#u>[V2gYa/&!X,U&6{I9J9#].ixlʵo/Fp/P`v>v)@K<BV.o-a*lc{(pJiuĄ ŷ[wo[`0 gii$6G~10H PqN-.iUm])}=rmE :*}!9`o H>ǚ7s g~]ǨZհofpoqxΗfkN k vm,JHC`j݅`$Dd%u7Aa+$`-w H; < g!"N!9iqNK@e]H>|`^̠$my$W3]x֗4?N~zQ*|V,6#zj+wV VDE=&X7 iWHuq ;;eɇK[_+mu_w%ʹV+/q+.h6:^y9$4je*Z (v lm7ʪ, 5n}}Gp3~>{8L5B=1f3>9LسOKME+u[kPĨM¢VȠF#j'C yy}J>U},R_(}ow3KU9,P`G!*b}m _5 yy+eyC;7~.7.~VF?dKOb[% }<:ҫO)KU,+S$ќ!^'=߼&xJ=j3!=ws(m*-NUSMpǻqzUPf9ಟqK_cg~ 8y;2T7Bb{5>Ƕ7MߡkE:gAN.MDcWgm<q3qE-ܒC= m4Mpp3`2?y3J5Vnip#.6˸[)7p}ѭMnI\BV8ژhꈤ^ؤ}I 1rmh[a(EE^zͯt/v])lă@(p].3 @wbI,{MB6,PfhSZQu[ 81 jQ?1o*DŽS>)8)x|IiL8W*8 b\S9.XW|+aQny3%>j+YTy;Kc#Ug5`1Lb_h}틂I XهGVM4b`Vir5 .f~A6I~=SҬM"L"KLMM [vu.0]c]lOQ-0(X6"Z\>{LaL^`j +0p5sp&]2gGJ;?!﯋U̟qmt3UKN>_ଃɟM jtr3Y MD^ha~LhwHgf9ڬCʤs׈Ղt$ܷ3 4uMImnUr\c= >Wrl z V%^ QKԛ7~>8V1Rۅ|ـ*?䂲:Aamw>k ɺw͗a& qýXW@:psBmf)~2l t]$C8sp{_߅.Ƭv b6-c>K9L?/~I'Z{h73D.=\R[HיKRȒ-. -(S>V =ox3cP(E*B#c }_\N/-a\Y#4+dG~VY떖} %91oS$s+ T34unB³Mf snqΈ(79;[ʾ)oZ%>I쮏Zf=:޸ˌvѦVi: r=Bl+T @r/X=j9@Uv@N1sHBrt[>_f;He}?ً L]d3;Ǹ1NרTKL=%Q~LAT!TQ,i|%K"-ڻ%]:EHm1-oNc_ޢ!QR9< %G/%uBBo}to_cY^]]]ݘLQ^ a#Q'wyKϥBwMDiB6qӥqW\5ҬYz-]L>2ᅺ =KDMG=f\GFUEK@Ms@{BwI{E9#YR,L>.~sMx-WoS.: 5.9!1) ) _P74N5Ņ۶7Scl6Abh\#0a@+RDBoE[-D{]Fɠ5Y Jdf=[p2D*u%Ybldxb[עxN%P烏5P}a P=&_X[]]Zߤ٦%'vH,{DpH|@OioQ 0n[ȣzJ-| Gk(4"?Ӕf'쳖]ԅGߨe0^$`?&$;o3 0D%^kxژ)@>Wv=)b/]dsmx!Y65Nu#?^YgޟfgXPe6LooovmglSxlSl3z/>ni6<̽s{ʇle颏 Cg ey}<1H̏BQXN0ONN7GMs 5rV0ΓCŹc)* * OڇTak(gإ 5<;dT<"3%s`~@q_b ()upnk"6<N LLQN34ͰN_\K] X>*yzv5hD!'=nBD9Hxj0U "XxϸTswr媡bgc'Ltmʃu4R/TBjт>e=SksHlKW 5ekdnlHPJÚAkѲ˅,ݳ̪#"MsK8Vɮ0/!X;9gmmmq]({W!jt[:R/]&DԤ_BwĬ0ƱI-9ͮ|8swыa#w5viE\CSGm᧝E A)M5a;j}Abgr뭓煝/:`wuv n;f[]b5i!v%R#xG_?___o_O7_w_R`H% Ei>q!11!>C|S,+4N8gB$M7)}Fq1ƽ=}+Vh}:8F=F5A1EC9MWj7ê;@sT[ UoBT1>sTZ: *Ækm|=Ww?0X#U'ODpQ,N"{6bbR * ,G͓1<gbJ#9#J.cAyk(N>X" E;ւ;Bh}W/0ϲLO?X&>Ba- ԑFۘsn^vP/1a~8~84ȷw$b$ǁÀAG3 "{m0wmm2[i@s/Y}1Um$]=S:[|~/.ι:8HֿCEVޢ\c\b_;_i^m׭O:L;b"e5"}%_yD`䈽eRZ!:qNVOV*>e<3OVTQcb]u9EY"LR4 l{9Z,.dhvhq, ,22pB2`F.pʾ۾۾۾۱s1x2f \#nB?,0.L)[331^ACĂ_=^u >መN2.qrp-ww-vsTOONhXE F2,Mo.Lqe1v|4ԟН'W,9T):Z'7V8:;ȽC PPf+뗿ibFEL_Z3\7 99gyO&=VHc}Ƒ`r[x]& _|3DQgY~cצiKEEEEIm~ -e+CkFk8Gɿh!/ mntVzd;G{89:y븇*xv-Qm9X#\{`#Y<=GSA|uMMREKpf3Uܾ݂|G0s<)4@{`z`EO{ѡ'˓r+ XXżms@D9b_c_`=Ŵ=BWC}n`^đ"&sy]#V1n{z۞ug1j/~9L{hoAADuGPlhX.ׂiwiqw)gH5r>fy5"e@cw|bƻgW [|qs MHgFm|ݣGxpCl sdҩJik~`w7`d3[!ow#hKgQד̏%ox;VۅVDWj$V q >Z3?3>{:Zg5|cmJysqN1cc|csޮ}xNb:[-^zbqe-jL߲2H2e@ǐa"fam(XsLȏi%'}G)FϧG Op/0a5pM?Sjm&]a-ġ'87(LH7GV;A+,wڿٯz'tt vT dA$:MMb "@8J1FߏҍΦ?,*St%~{5ml Q7z"5 W:D* wy5!4,{'KrQJQLjDjTblll=lNjKm[DPk fb^^EvnEc {$42q&9{paV@-_ 14M;96==b<9Fg8E+l<{yw}/(*oD ^1G@o{ CMf)x-U1ts I'Ul6"&+:'zm'*0>ʚQ h~J!O#R%n.+vjX;^a_c.rdn+;E,6t{2+.о$8CEF1lo0C>V;.<4ŞҠnGܯrc`COvkGuY,+$G87h9pB$EͮDݲwBPȐ~V,[7O [ ]4^ JWhkCb5U.R ,/繲y+Or' ~A `tj&e&eFeˌVxV^\c\}((̡6."S[g yv~(~8.[Y8r; [NDP1F[(չJ.)Mϥ}'\S|G tM ЈWoACv:ՉS;RۥxK{H ~rn|CsLwL`M8gծ|Lz~>+Q?n0QhJpt k }LL ,|VRZj2zƥ%҉K[ ֟mYJ3Srn cs{ǨXǤ}[XOFϏf[a RI;b^)F 5AX[cٜx v oKghFjj'h&{i'Ř[IW; (er$ܮcU1oY뾋d׸U]Sa({d7N7hZƾ-ÊC93vT{.xFgnAU\/U);zEqC#~3m|>C 9CG-o*rm"l~Ÿ[%)eZUnW,O뢎X'%ئ,PoP4o545ݒwM L:WX1/eu 0;{NL v=Ee t~.z]p5on)/lm};aZzTq*W3{Ȅ!!!!&FNQ.9EEXZZ[ yف :[_{+o 0-䜒&҆1ͱ MNN(ۦX=&ѱ&иxG&uW-|㪇poS/i"@ ~z8`mtFFUQaIzily5U.m~W([ KצoجϫNL=eI.1HgDGb8p vI=W]f(퇩جDlMm-]G<~snj4Shz3޷lu KAI*?٢A|˟>Noc`蟤[Zt+eA} "`H[o˿ϻEoV8FV N0`Oc?FUFYy9vhQmNɪaIJY#m=܊k/Ok|ӹs@E|`@UrFD(5@l!U;fz55 F,Hs{GrYBooltvrdn^nv&6[A*+fy'z'&b'UO]46 юfu9Q)!yU𵡼jElEiŒm#Ef}Y.Njoas 8tlY3~6^QrM8$)# sY7 k_LP9&*Cbow]MF%ѩav>0S}ŪM;޴ t^t^t L4U^|^l LQ)t)4p|B(ZAev=p@&R2.X̵Rw.oupsvoI|uiD[sw0lFޘ~Vo|o6(?O?R5[9Yeo|06?!7Yd?'GMEYQ^IS^\fRnBI2ƼUR9q+.%G|OvhWw9{%;ī+?Ո%64&YW6K/0,h8z~u Ko>P]x}߱G°j|ѽ:%IOQ Ή(6-&ZODSB_OGKCCCCX@F%k粃uni/%wFڽC`蜡_ ]!"}ӢXaZsv>{٢:Y"|R=)()% *+Zhi/p݄.cKZXjG\CE:&{rdxy=BVNӺ#tx5k qF:?A\P9*AxP3 %"՛VT}[/":4SRXg AiX'_nuU?@!CdvyDp\v;jHPma _{} /L0>ݿ\渃h|=nB_g>em`j? _!(TwZN˘KJjL=qcqwOaem[/˅N.'r%QWo2?yvs!_"<mx?¢ )R4 Tl}XxAa+bbsc;@r2l)$$LeTLY30"ZZa yƝuͷ+LP!T07 Xh:a< >9zT$K6er{~%la.R3hY>~uh-pgu%G;rp|enį.6pN0jP zJl|y2ooRz%7xOlx7;wt. yvvMMMJJJxxxw?y@6^B~r9uG3Oؗj{(̛:bu/~տ Wȱ NrJLpնK`PR, 5SzB4GN}H:߸<;%)sEzA_z)~ <;2;7-X3b8kfUoSc00[Kuɗ֫hV}.ָWT/pPvP$&Vfff]Q|%ܛMgLY[gpbȆr f+$ Nvq 85g{C<=]YMU_~T/|GgCVtFZZf5IT(RSVPPz!ySspgo|iV5OL|U J*;xٙ"fҶWQ<}?+2C\]3::eΞ&O(=[) H^⓵+ٛCwCH٫!ȋ [FNn L՛hPs_k ɏ?S9|m]TEUnn} •Y&f!_s?7KVJW|)TTLPSMVȔwg_i٧ܼ, 5k>d6p!VI2+,Y%Qף/Gy.g0Y$}7eW{ωLߗqe 叟YOVT[U8H|Q3&;R` 7rT/ |H6rllhyo\]M,Y/i/48&&7.}=%S|9ū-nT#1C5-𕻳;J1^aBP["WTvMJ o8ė:sImq/ww2J7BrZ*))4m is/c6Wvnɓť_ bb⻕%%%EEE&&&ARPA@$B%lvyA*U&I:^ f@%VZgiS4>\+I,G*[#[x$1gJ{dK=xmRUv&?F> f}]ﭢ5O%3t+ѺBغU$EpT[:)4aCfhǭG0$JTN*ȋx.'ec#G_ʽa9',tMˤAhnL #o!s¾e\պCDYt{f8^hhe")SF / t-@̠RMֱ+HPL. 7Yqu@چ"j7Jn\l2Rשּ/@s_UqA巕D9ݡ+T @m0{GtbڥrĞp䗙+-ۓ ;ssjFJs˷Gj[!vC>>9߳R2tBqG&IӝIU(2cr/?$i}evqzb:ȸ7̠>J(^#+E%5k|"FN: 8n4l#B{MR"}!uqJr)I15ߢ sھֵ q-=j 2(.hn,s8f76CNj'Z8n-d*&]"=v3yWɦvEWvSTF#O;7ȅ$Y9ʼn(qcq]Q|yl234 A*w]ǥb-DnTDkƛrfGInrƎ.恻F!?;h6dq5S*bpm?|T/4ʭ6RX71ߜZ6VM&_~~^δ3`A*^ FH@ -w6/ߤ2j1FЄǩ&V?D9Mx>)Kȧ[^^y^w:n^|䉫kͿ;y>{n%Sbb8ff O9T` o10DvZ@D :gUtu,:bl)bJw "\oTwnr~=ճgXjGQ{$c%\z \ h W}/Om<[aK:"Ϲ҆ksU669b㌴ҙyйnѵnnko;o:H4[O'^wȀPа|?2SmB0wI'WYZ .a][w%D*?`d㲀o|G)20̬d[z||wpe즾q x/ 5[7h24Ub8x'Bem{M _G]Cb.n35CER.C"dc;vVN7i!77\$k4 ;y?:`xd@PKIH4R6B.{~c31ECUbt&Iбdwl5 ?PTfF%\sn}FcO@s'!YzdUzxoy~`E͙h)\of:" oh|g . ovr 5q|@vL;~_>]ݠ^NaBv)OL_1n ³ZxG9Kxr&4$]Zpꩤ,$fZ<,{(_==ݺ&^C!iFùGWb9NשƉ/۱R8M>d?ZG!B>EޢߢQe(Hp|cMƉ6p" |Kɔ- ڟ3D46>a/0NT^uuA V\wpcOPpa՛F=OC~IG<@ghN@J&z{v{H HEJ$dQD$gIss9 Cq9g!3Y|i׮_)y± t_$ZiY i70>E"0*| {I0AhqV=-uat}Fy?6o~_6/̳rS)))iª뀺?Ї8ny_{>|hY] yݡ̑3".`G?ʙ%!=[񱦐#\{.qŕs=I-q?3%| 4*wG}(iѨM2oMuŇEP3c3)pt3<Ԛc]D]#{5UӦ؛8똲ЎdvWWVo%lٺF@u3a2'oNENT|`G~kI %Ƶ9ʐDT߱YɆkaz]ȎiYQ~vJMȧ'35ORuX x'|톙1}=y7ubR,f~m%'kbtNÍ,}6"f xnTsif1U?g%-D4C<m].\,}փgu#7-?_Lwno+sYu]@( @4ο,}(}WfYfmY;JQצNf_: UZ3z G?OMҴ>ơ~f6^f#TgVy\EmĿJɦ檂St֢ .:mdibOʗ܏eU6I ;%X:`5'oϤUύMUu"\" J%Dxlp \"^=6eRojK4={~ ݻ ']8h;mD)G9i<lkxݸ'T},ZrSDiNJձ]b%ʕҳLrC]ëKӹ{o'P-=@/RL7|LZdVKdMnRk[vJb,JmX{ 5 ? -B7Vx},&1@R~%@HV$[遑W@$D:9 LsÔu㤡x#BCb]tJ3T:T ** 2GiLQ]$8+RP tM;سJysx򤖼ni,i n|kV/.Y#Pֹ^8IUI$mp[Zfu0Ma\Ņ7lo<:Q6yvrW=0˧웷]~qp9uDFnGsV/>ܟx5{B=DXCF,F0\*P"C1θ3z'bT6qldT+M|UOUw:~ O4Ky j.(HpNy)kkѺ W\%;!K3J.[\ =\k"ERi31=5&^6 .ƃڛ*@'&IzlkxԺ,5hJVzX&Dp"Q&fϣ+cL-C~+ ՠ{^.'>0iV$#OH;p)zWW-}Tגfߌ u5 4h{WY%[]cTjllﭛޢ3/U92 Ed]),u;;e5 <][|J5I?+8ף`JY\-*zAI%)Ӟ\dbd=͖sqRKUjNSONE])ns/]%f?N?UH%!o*}rf MƢ>bpW [; ;x{ZG^'Yg!iQFaA}:m\]=g~[5Ԛyi~"[y۸:8{^򵵼*_6c>W=ʄ[yBHHdGe~'wT@ ֭[7ndbccThhhKKKyJ)*~Z^IHV{g\ݮ[ŹY]{D{"ώnӞ"BFa0]<sD0Kqos|sbsz{pt >M~t9x ,I"I*Io\zUu6(dasrT=E+j4Yb*?b "yj2 tLa,%V>IP>0 d8;eʎt?o<}4uwwm?hB#z~Z?{ަMesőLk=g}.8cGi _nFCaxm}0QݑлmP;bpL6mGHwRlP-> baC1SG=N@P<8 Ui䄡jKԳ׼|E}ҍG#4).H$}- ;W p`&*َ 37et52͍?_w扰NW-Й;G@vEx|*"zK6Ne5Eu@X{x7z7 yBuCΖt<$i%j+v&Iҩ-C9S/1x j@2غx&2,r84uWWrh ZDA{[YU'X^!5&M$ X_EL2!Pek+jɼɝN Ϳ1{#.@,N/BD:O,=ŀ2 80.juuB10î@ї?/LqdN:&}Cc;B"q0 >$^Y&mph~a{`e-P>c@! 4nbjra`劷0ijft!*yj ulI cwUnzy5"W1$T7 mqcC6V{P\V\u 埌o촷ܘ߶FG?yX_<555N==ay}(OQZAհt24&Tb|腲Ի}Ur>wK4MuFq}Mb=|ޣ O0}OѲO1a#;VW(Ogh')g.-.RQL?>!ƨVfȻVHC^뷇G/~✼z|LGt3 ~"@ŜimA컚׾MJJv,1XܽDdKl*o\ 3̺'{Bugvj;|k]r-YeebCeSKIwW(9jqG*vjSB}FQZ^tzE3 NQ}\wrnKOԏM=Ue/Å\gY6Nhʑه9d2{GgX Wh_^4 \k}\|E )Zywˏެ lܺ'}d^Yyɧ#\/Xf*BdzpAKѹ7t8L;Oz~*d^4t*Ey21T@ GqO$:xxzʻ Qwh˄[g8Duu")3V:oZhѲQ 3ry5iJk/F[sssreqUp7ӵ\)u'3 ;Uvoc],bёWhƷX*$-'c 7rWrpkus~8=ms5NVecYd]\s 6Hwi.X N+6'.q{hKz%{e~R[H_]x3Y1441zi낷1--N8Kl7ӏW|cQK*e4ԇ|ynBa } "FֳKdkD[3O7%a)zgaVW(CFBAvH  zuׯwti&0 xGZu@@˲vZ(- gc  p O6- CשY^nT|SL4ss#_$Q5Uw{gΊf.a9ަMn[Z"grWA$Hm qҧMUE{/dJU44n~}<{2z㜞٩ϒ'<՘K;yƁ۸Moc\晔tSilllכ?̓)H3]T%[qޭKeRdUy#ea&waZ zϐ-9nat?ܼ׽D;Ms>I8kd8}~qlN'|cmޒ{rCLG+7O=Cl)ABd"6y.1 *YgRNSu =h=X=ܞ2]:ƺNY]_90 )FE{~KRZ.51q]s"8lM(`t Or͵.hx;Y6$ߣR o:i]R 4^IG:,JpuR"iW'{ǙJF٢7!A unxO(:#),6D+*A&,}ph@oO;o/Su[F\G0OOm{~\|}w xx{]}2l2[c]|ܝx#-RfG_bO2f)} hfz*, Y?L;M=͙Pc=euii;a4`6T.([fGԋgFF9{:z&H 8T?1gqziǻU*(_+*^"'&tNKDIIKHЈYмϦ+ ne ? @H/ cd Abnt?8@x2Xo&Ⱦ@ @(_$V ZkGhl+2v.ӜL>Y3vTw5u.IQL16Kw36ndjm``k#W۽[ЦVB+ E! ܡ?lV< CUl=æ Wvd)[udDOG?ÇȤ$%?7PVV{~/Woޛ'Myiyb\]OǞN`W]`@ vVN"i'cӮL -թ;8ZLTL)oc&Y|o~prihA2qm}" _P/ E+6U-K.gPT(U5i_WGr$򋯼4#}V#YKm5AǺƊeFrSxݓrı}tbcT~(>m{:4e7ER5yR תAHC {P@]ܵ/cvm)/˺fn@{T;c ,';ݤ+3c 3/ִMkQ gc{|3e%kz[[MzM}D+H 53lⴟ.0IH r(rebªV& SX~P${^p]j:L5O=}qaq»&_vo}xnq%[u$ڹ=1.$5NM@Q:Je2ߎU/@ Av5@Nd]>_jze5+vKz:66V,a/+R@x6ܴjKͶϖE̖f wyRirq(s=WUXl:J Unߏ$$qؾ{GdǼU1-xq%St@۸W 8{[xsrGm"d4"gXsU]03MNQ0weO}ԝ2P@*H  a>ekQHp'B0@`ha3 &|o]`mH@^ Ԓ7Ҧ0?anqjT}9#U*%ڟt3 ѣL6,ll,LiL, l!,/mBr"dfcQN(HԷBC J$T2-ݼ?ƴr*@&en'K&ozzi?檮(^_^]07SUQ[TVT\]twu_2ϣ/Wc~?/m7ym=^|bXa+oli:p=B?Kq{ j.69o`zv$[ŽɳwGg8b2[#9Sݑ=8Ynٴ m,FAZ3!-  Os ;P&HqB zhmqꠓt 1(!}:w\yZ; Ԛ˔UoL󏒟ͥ"烸@'  e 4P͢ZCwD2U;×Q-טOW- ,SAaø'{/Ռ@~39Q~(}5r'JeW;QzgCA"Ryƛ~{f9P7'UC S˻?tcrM=46$$|vJ`u@"wŐ~UWF=B 1[BCݙ@ѶT ;s5jZm{GVロgM1T2Oz,8pr Du[B՛/MZ>]Rcc*rVp{|ﲥqnT?E2nf5^ #5EZEZǎ O<'ʇ{{yr[VP RXB*Pd/[ zb7znbjJN0v7(m,y>> W t漼+{v&nqd'& {xeXX*BXZOk΃"_-"24n%.Űϱ> *%kaWm@JJouoGn-=[\cWVo~oMP"EU-GmW)"U dI+ {3,Br_TӁU-$m4C-7}Ggql`a<;'Tޡ^`.iZ(]rp 5Ĝj^iģT#wT|*\b C$â#HV3Vt'"i(+3c/!$L%}~H0MBWhrtHՋL`z>M7?eJ{(iPyU?ooH4RzЊw>, "|<͒k?,B^u1w@nb7^s)8{Yw,bmKܺ]6ݭ}˸/G9owyV;X(0t*U\Mu3#7Ǎ|ވw u|CyY 7K\]WJ_YEl~Ϋg cO¦⻔RFrvd|xH4Q/E02.OqJoXJzEֹ6=,[L@Ì/,N}-kߌ̰L ry3L4M9ʾ?Fk')Dd},OU*clA@/AO7e, 5lK=jVzf ݓ\C<=֙e}%0ibB]+5k ?'YoQ23\,R!O_X*4`g)o hd(dW=+kʅ 0 k3X(qeⳬ~/.Yz6u3Bc3˗w8#H2X8JЅ+ΧJ 4H5yHWZ1P{L`[`c؟9_rZ̺וRAƖ>YY)C/';lְP.'w1L5*''$E(%d(iTMs1!]]G~haHZ 4| /Q>~9ɪo"főTTO20f-|fP@f|@*(/{y&ւ͘I(*'4Bw [y7Έ:f} qKV\& i`7J0Gm@GGseKC[Qrr(ߚn{sks97TWu 6O~ 52`a҇Rc23&}.u{Dc+B^㾞'oe ~,LaXM:L|z~y{ẉ?y;n|)#|}mU~Ձ9Ijg6F@/\}=>[J92'Pn}Yމ-Yj#Fr5779И6^\P[|FR}wra"=f^-G:\ ˛B'=24_sZ†R ?! OU&;bņcܔ[VӼj=R--"-|-j Ezf˵u.H;/ogS/{)m.hdTm[)ungi\5 pef0.$7Xg_W40y,HP#gbY (G.wȄ8pE ^pL+ k`Z4 -ES 4ب~v'+|i|/l_b_*Pz>\&J=R1}a,BJVN>]a.& x>&"A/pAlYc ͳ(L8 PsЪ`DzpkӒ@tz6.oIӂCIFڮ'v&kAJ:jU:3g%iֈ&{Y_JyGPsI!SޤZd `|^7f ,fG+NAV.~z{&;dӳKݟL;Mڿ Ns̭9:ǁ22N(9 Mle5s{9l\Qf(`?T)Vi+ō޲>Crh˘D17*Y{:k#}#KT^gZ#c]#s Y}7fAq͚coEڄk>$Xi&hw}ڧ|y$O:\LCI_g Cj >4_#@ zȪ'W?˲V,Z0Iqc]t_lDc gr#U -դwCEݧf&׵ /Ҥ-l>fSocK>n[ 3?kj QU3~&\Sb#j C*<@?2O&&Ԥyns~yiedoZ6?y~"m.Zwʹ6L}utKZ7lձt^44۸ExQwrq0Ul/~%/hp<҂N[ c'ZaZ\zĎG_$n ǔ^*_%^^ Q% Ӛ7kd돲!\U}0P||[  bȞZf6qc{*lN㟱(05nXl̋$Y;+?5gڬ&a^Gc\:=q0S0ˡ4Z!v:Tw'nv^y1@F#(w=[]aiG8fҮ߇\m:9:wyBpzs꺉izdS_{^ .#:AcLA8>ݱjE_ƐOfcF29|'!w,O f{V[Tv lpBo]Dm}n{Sm[!&%/WSIP^~9=ռZӦnvOʢӶqU5#~bv>ު_ ޕUO5@t7LW/+-OH8Pܞ$$n~QV昮dƦikƥ_}*n{YF?vdIbߵ퉛^/SyΥnIYQʅ_+DZv >M||if=j۬%1 J2%CLLSB>$U'L=əliPN> @'Iw/rhgTpgb1D{at,H4`nYc?:B3T=X5oR"RC y8`QʮDmxGK~oMs4\Ւ՚e; 6ru1@3FDUslJMZ*GpNls֭K'L9j-ʼnU3n?]"ܹz5;%x6ņcF>ك4mY^z) 3TOlMrw-Td wձwXA9g2 ,+h]=dHi3%Oiڝ 9{2o}ˍmßգjeg_g8I?p_moLjORRye?)Xo湳 埌o4\_n܍v\Qn|(^4?~B}Ot&sWz`O@AfܯMճ_%j7gL@Q( 1 UIrOm9}"dcOZf͎۾}K"I^ń| K}>1P2aMŽ *TʴVE-Q"+e 616pOJv$f)%D@([GTrVzn2upGk@i`OOgÐTKl#e|v-|YW<]\=YcTK:XWg7}ys^絰8!v~Tlo4j klr Ѱ/ob`Q=(K$F9n/1 p655555F(#@WGB<DsUbtj@v!6\@CK셺Uk>&9:uݹ7[Uv=3 Z.=)7|(KCn(wܩUPt~8f`~PDZMbd ,,DGa\waX,x:4"m/_@@sE@"}=hQ 6Djc]uNI1ªF ~os=T*hܡn똊ׯ\;d _OOU⭈+e+ ՙ(dw ck??;=ށZabT] 0#W8z{ޯ"$n,sͶvA7 >‚/aMuhip &ݧPN^ Qkm5O%LUXpkz-1կ1̮b$mπW@[~E'݂ ((  (tH#]Cw900ד뾯5k5sk|Yr0@%|7+Рv 9cuONƈNZ/BPl5h/tt8Dg @8~~:^1};K+c;5zoϚɠ;w\=E@->Z<ռ {)wטvntKT~ #SXαOCˏm_D@䂱{.h%tc޽OC1?2tm2L# +oev^;颢 Ӥu|1ynp3-u?<M) yTJuAcY}NBILUoC-?.o|So&gQ5hV7qFnzr(Mio8W Qؗ HO;qr\ƈqnWgd ,F'W$>5_,H:Ie?&)&f;31a41dǔY[{LrCY{/km8@H@b\Uy5( O{;%}i gҜf>dm'Q'2wi m}sq^^aFYZ F롺[Qbe/L)9n=y4d.T&CTm2W'x`XB'w7Fg%eW9Cכ_%`WHzRޚ|LET/齒烏F HNՐكGk]R m_QXW4S]J<]GEM+aT[>NPBG bb}GF՚tݍM?ݐ n5ezqǾ/՚n)|M3ȈO*zq~Xn׫ݟOB8 S{|ks)>}յ tm[2STR[L_g9+V*eD.y#~[ʑH-\H;wG?K}2.}W~ZʼnltمBs/OSm\lpT:V :L][rn2c꒱2G}}:YSIo խPhz22GNGR]P"iN̫k_f\b2J!t Nk]"E݈Ƃ9A֏[ m'=/!̗#Oǘ''AfiWO^ߎޤeO)juvc"b3K?j4jL1B`yW߼6ڰX4cqmxkcbr%1EokЃnoykm2pos5 qy Xe-Ctmbd{5PC]su\MDʖ4Zғt77MgB<@GO?Ԫ'a<01?0E#{7kCBٍ): nP+%h^2g{$\9O' 4,10Ca2sp73Ooyx%5NBL-+l$bgqladY@z9,<91jк_]1R#&{{JcB\b|C,|^Sq,B) ^F Է:_e =Ix`@cKlK< BSB՗_Jk t*Tz2f$K%Y#tF`Qm~V\u񇞖3#4kwHXh3ZgS<ٽ Uy-.,{cPE笆teAwG蚗qC4I@*4tfE aQ,Mt嵒y%>U~ofa v4u*Tg7x O+< .404kyh!B~4Oim}R}]wl~DO@— W&_X oBi6&pd 1na_vX}[_\Z!}D|MRjW}-*QJӚK0U`jV9,W:w onnp9]m}>2D׺>eRw>mw%vV~OsH=Bղ~7gN.E>YpjlmeI燤JҼɺ+W~jɲEEjct-|m]޹'fD ǡa.j)- KCeɧ|L8U¤>Q1yp3-MH$_kn $po`U8 9jJT3kR2/ adۻZ t!P z%Y|nВtz!u7ӝ Éwg WY0^DZFÑ 򾼍4NvF=YFB<,c&2{U35~;]:׀r V"cUB3qʌQ-bnc(-UAŲ <h`B?7_i^ymY,aV6W c ,T^~ܲi}-}^3GvuIsM-;8~Zi,#GǤv GטZlȅα]b}c_#हgˏw<ӽ_6+TStQQjDEt &_z7Y?0Ku7v  '^bpWDd.'#oiw@IqTgI&y| ݾsHtyUӰy%r8ytvo|e.Hq.i8+AcNT ƉG_3"N)2k|D}~|z0|-bl'(cNebukzq~|Eʼnra&333bsbs¯xW8H@ sIqXl!Zu'sjzQ&W n(n#sk`3ě&$ :p͗dw:hihChMheWttEYXyo~:ٴlx]gڸR#sͫۻ( 4c+# 3p=B1 Ϋ[<f+A1~775noffj;gݻ_|W(E>Gd%dʞjTH1Vƅ2dw76쒫?Wz!xim2*Pñ0Dɶ27}1}˜bG8s`bcOhZ?|'x8D ͝iIyA p:udt7=\SY: {h/2YgY'ԆR  }z(ە 4uӯ SpM$Vp7N=υ2-cQ5<^t_qp9ωܲ9ٽSOV%j;Dž\QL }9£ g_ ?k{T2w?e2lV1q9^Ї&);f>̭ yeym%F()iNdIzHY>]4 V)*%x brVyGsMQj sKz4k2-kþd4mxLL)HO<՘*0@`.nSX/CW*P!2VAqy`J)1aQΆoK?"?%69bi tz  w(IŮ )uS4n߫W6`>EBocJ_K 9m?~C_Oޞݹ;MEu{do5uj'-p $;=آ\ffxPkvSAp"@G"kt'cws]Vpw C'~ڭkʼn#JUSg]RJWKz$Fb GрpD( |C ۈ[zHy`s˰/WO x/ \4B*d\|O?zv~TjK0Mԗu/{SN3G碾v_6vMRANq/pBؿPdaǴkO&&8a5_Z ՙն՜ՠf}HV%{=:OUyAAͺ}k j!BCAæWܤO̪So鵙Egt?}ҋ,C~Gicl0./n߈ͨ 7 Ο'73w7=k ^6´>{Щyf 90ԘJb~0,`k fE"ZS*wB?!KФ@bBA\^pb5OH3чNn98-8S:MiVQ?u2U3r^ 9#R[n0Ns6@ ݛ$Rnq킥NC/fE+93 3ϲ'ˇ4a$<eu)&Z;ǸƸzĺx9:{[U47EUZڥYFʇ <0o V2jRfwR}Vm<^&CTbH_M@QxZ|״OY\dWc& Їz PJ h 4[n!?z6&"" Dr@0BJh_<@gwkl5GTZ+kB"rEmOٛuk'iu'i$j/$l&D4:;zoC"]G 52/_-E%CUG+E]x_a#slWbT:jA{8b}t;#g{ y?NJ12Y8(G{Wob@dP`@K'S>M-1eHԷdJ$F7 czcFB{7p_d'u~f?<Rη\,)k'ApL3Ƹ7+tI_W.[8Dz{B16jb3~,QΝ~xUh(>h؛4w9#޿%~k&4>HՂlM1BˇNku}]zޛ5=H,xHs@ාWWKMfI!gNԠ2'WU`x֦B²{AD'&-d $zOÆh-rFn%e݃*9^%E wOIrWh-C26hfi7>j]˟eNzj7$dz?gcefZzT1~ s 'o:$JD@MnS>1Gt 6=6%{L{E`gf X;sݢ]x1 nɏ#88Er3ޥv2'؍g8m-sіt̾yEH.OC/C2u-?(-~:gpw\6[xE#<{0A`RF;ѥgMII,$y:eT/SO966ozzˣt^8X Y:#s;O\⬁|h?nSP( .v]p*9hF4(RnW8EKTa{5Ω4(,RMSB]HV𯵲o_#]b(]+D(@Clsq7lhw{Zq @xLH}J)֬/0aO=B{F9A01|1kzwizi쳪i֬Iq:$eט+<}M .eZ.;)4XH,]Bنd-Q:h`?ci:'oYGI=˘8Jcdy9z)cO%WM1 .+Zz#cZh4\72r8o;n?ƭTT'`jn2W*~8"( 8y5M0Gw#yų<.i _"M {\1cX^ngOfm+ Ne{+6h d|j[>s$6%l+l]/}Nh쫃r&sq#5U]ӟzQDU˪/˵<<\ʍ9[Ga)DD;?ﷴ+^6kfٵ7+L[&8[a5܁T;x"Wt6+zƋPV>u׽*:/Ym?~;tua5w1 MR`L;C U|r1 pH;whxv_Ɋv㤠g{c(\#a aƊ`cd'ϕ~b nI9euY6'߿`?>mVq,)e[5<$ߵ {Y"ib}>"[U=Ĕ8rSmrmƋN.jG֋Xb(@Cj/ ̓ËwpO+F׎u 2HMa9d}yxQܷ[u/O'U{2Lz6 ׂR8>͜k ͓<.~3a$*eGq̽h_M|Wt넒FOmEkڂ~mw/i7yzU`¿arc1t9E 딵{'xp 50~k  x] ?|J;lqvf5H{Q2SpHܯ0Ze,4A%Y e>ecs9n068ٳ#]÷'*N.j ɟj,n;bF)^HNYe ?1;0w۶[sӨz>@ʹuKb|riQҏxpi',ccaӜ2㿺 mOhx5]Nc̢1)< #RQ.m,~b~ d  kFӯkG?s[irW]hZ#0L&qٜ.Faa2@Le,SA`ȟpoW;=TZl$($̷ ,p)oX܇9˴uï[{8 LTd9 ZGGR޵*d,ʃ-cC~g8]<zujD& XIvɼ9*^y9)5/G#8A h ]hoX?<&kySd'[Isg|E~JG[6o}1 _%ld_Pݦʱ. rt6MWFޝ6&l kJMc/OƛvEX4ՇTG"Z܃͓5W\{]KأǰQ7U 2b<0K~י"p⾳V퉼y>Ou2#*1ֳ1u5O8oKUAo>+l?ɖ=,x;#: ߒ.)귫8q!#G :gyЋ=(EECz !c/~UMQP?,)Y~٨1/CE#Km 2k@( B{kWg&YǞ/ s rBLt}j+v5i&ThֲgRf\SWlu LJo 6s0t-PMFŮu:{=<"]}X-iny53\уgm`& j?:@i%{)mVK:DKUO|( H Gp'ɦ nI,5^ {a"<F6/HcD@J*j 7?g~fOp?j4%? OIqŋ3$N޻sF; P<ۇė)ﳸ0˵XjKg}Ŋh?81q{DV`$JG'86ˠ M_ցücˏ -7W h mxE M ZbmO3Ͽۻ=ws4EE >j)̸4 4@ӻEyf\VP;J`}Tr[;Q[jtQ'WL wqIl\zFis{f.zP*{WA'zIc3cE<35kнXW1CcI,S# &ߡ:$V;Ǘev|/tlciV1>N|=q^0eٰ-Cg_M! d;M%sOr],ӂF4Fӽǜ ƿ7O|+,5;<>1̒ޣ9珉VۗCŶ6T' E:H4JIk=Nxksaqu{`n۔prQmtVo>N;,Bc?Ns>ɟ!=!Ya޵ʳX8 g Wr-t1N޻"lhٴHj8eQw#剱V$ƴFvó-|Î"f |v|(? .+ Ԣ$4[] Ca~(n_hsdhckLbd<d8afY%f;t7qFtLV癭Qn!FÕE -=####C]5%Mk{Ƨx_H=ݯXoee?iIcÌ/{% v$5* ,&S9~pByH}KqE]'Cck5YI ap\5<䐶fqyS"&s:ON;9h~}kF2{L(Y04 \w+N`ztNx@6ph6;;یSݟyzEZ#8!bS_#Ь?SrfV$+TW/VwfB*L#_@!y-Ck/v̎// ҷ-6B\ =T( FX#n;'97r "}Pl A[f(-7ѣrx²,gY~HoP>_/n.ez"Q? |:~AБ^hLB2JY29i0iٛ|L*A Lg\lʜᎠkM$rwy~ 7ܘZ}A %V:!xz}'ҞS֌:t 6XerS>**HhWИq):]2v'Z<]'r1 듊T\o>/月AyuiQnڐfD#ѥѮdVjR0W8'9~:r"nb4,(:kYlUa]gE>&҂cʒ/ cɢU34+;+'SW^Iub (kRc ƺAnNϖuozf{tqB6>Xun~㌲oExԤ_uhiLarN\Ed_ -cdSWu6 s->ϕ)Pf JyҎw@zz%* S9oWPE%O*+$k,˽22@}OnE=J{WR$]ӡG2ce㫊>V*BL|"}=.SeDHE3Px/B{^v-nNmn&I:^QiJU-'w0˛ԳGc,\,K!;g~DsQ+Ă,t&GC=b4f c 翶 ͰL?^˲1=/T,Ru϶ ΊSiLk?:]KhoV*^[!TۤԐmfѩѩjjunJ// :f.tH]ɞ}l-˫,藛Y`j@CL70f @Oa{DTRz3:[^YEp`Ey|Oeq5m}[`RR"nn^ݬi; E4ޯMֻGFzKBuЏ fYbUo_rÅd{s <RC1&KaA&'PCt ;0P%kG)sC%}E5mAwV>?n>9 X¡S\PtrX1cmG) s`p6aoK;8_:\" V˾iNVrNW:QϽ<͝di}>jU'[Hsfq?<֍Iɵ,Q+gVE=`r{'P'P%UW![S&WU"W^,W\,_,]Ze\m=`23'_wA"$y/e(Bzz{ʼz48uMH@9Pd$6F\!C5q\;b(,\)݉g!@?ue L> J((7swM45Vp7u/ѓ0ᖼr·9enMW*|N{Q eWOZm\yתRr&\{@@Ĕ1hU @68I|N"hEI1)ea([9WwUd&T8V7U%GXHHP~coGm&^5Y5ȹ/tY+/=WXRH5 o65x&@:`'zkh+e]I8V<{ZAci/3 uQ(F+f%]P.TjbV-5'>%^nVj:{-:]6A\xA>,u]~Y+z]Lv87sXpi.D9bc>&?Pn]a6t+2#aviozvc;Sq1G~"_R$RS2i}XRgߡS;<1 2R1]5.}@+mCBU c| #J<%<|ѧ2h_'[y"Vz!Yp%51 Ift2]gs+%"ǹpWE=ƫ!r/\3@v9ֈ69A/q(͛J7pÍy5OR]Ẽՙ9sdF xqn/3]?Aj{fi_TqD{"Z:5-=A]÷>BFluNVh>X}IY+kk 1XhlN'MF&!pn0?/W]9jWq$R E avT7v gw7E+=Yo}KUK@4:$$8;h =΁Ŵ~T}6Os]Ec9F3|AWS1|nd luʋk6EIa38H#2W wza0[ګ8&MVUzopebZ41sP}ʝ/0SQ0f\cKU ϼ]soVQ5ب,".|zل.fS"uӘpHK~swfy\ S,??~ڋE?]@=BR@gx \x.B!AƙeNіKy9G-c2"̹'~B:ޟd^Չw.,͓ G"r_;ԛkK(y?Zr $i[yP=P&Z!mvGGZ7s,U2}Z7s@•;.xN)+]s%E/WbWZR#eϚp ׸]WK0)86 ԠIhי_;E0 %tOt >:؟Č^ `*L? @aO;9sM+ld\vA_ML=h %fL?a;)]T?Ӭ*$c$q7e%sZ1 chq/;Y:L[vEMsD<{;sXoeUsH@;ۖnZ8?l.8@q Pw;P,oN]5\!]PXh-5_\{3[~GFr bDa^'!WNwJ|pwoMG(((-)ft膱ȱ8}_uk=ٞ-j#Ý'ιr2I\M3򭧽=m4m(W_YoʲFϭҡ6OzvX1殀'%ky^wuʓFSHeswT2Ķ?1-p}`Kڙ{7AG*tβ̝N_U6[!be`5_7?OkkkP wIJV>=CҧA%!ŷc]ML0Z2]ԮJ2,[؛i0k\\*pEiqX,gVG{ GG$ǰ'> 9%>,?汌4a r~v|. ʼn6꓉<8s+&43 2wKgyB~8t`ֽ]$ 1nYGs8Cؽjڽ'&$NJWR[oyd``x ~6)͚yj>mcQbk & <[f<@'.c?-L Wv}e9{JR%P%\X-T#RX)Y*-:SRuHKs"tˎ^ =zQ&8ͦ9}ML3ny`*۪R;zi%Y6yL9-vJ7],~va`8P:is֠jGjy W) HqƿRRv,?l{йw~΃).CjbZ>>*unx82ݫxt'[,/>`U|k5C???]#590 i/0LVi(]7gF1w'gQZr$}U>vzohAoF,|q4TO&V^N6:2|pM5-C-3kK1^Z]wݵ<СKԂOL]9:(fUB{VoܻS{{Pf DX`ѨC L*բ3k1v^/S6fMr.Hl}։ Uq~)ڹJQe_yP٘1=`o.j@ # wo6pGA9â*+,.֙#S(19MJ*&h Xx]m" ݢ¬Jj\Bc }Ғ~4^PxEQPbVPɐdnbZFB~B~|~ܐ~~FƞRLNB-1E#rޝObņaRߗکCV:jk25ʪJG(' {yƚs]sG.l'?6$ dՒ3Usg 7t|,M(_oBQc5yR8<c@҅ZTn[T`V_:ʡ:VB22ym3fB/>uIy&b#M87Ǫǘgc|Nm;W6Q mRMvu>)UjU5y=23!ƞaW1d@=[޶Ʌ@<鿉ܼ5R2] >r J?3e1*XfrhѿG?Y Ka/DfS^Nr~HeGKLJ1j:gd.Y D.YG!gtneFގzJh\TϘC^BnB^B^^DoӸ9/{p 2.>@~O:_OT<*Ԭ6b_yMP:VJ ŸTxDřY;f6HwFڌ̺;=..=W:&VO lLTe KCxVg(fdy2yodUyt/|Rܶ\7Jhf>ms4*2&`3K;SCmCIW5ydYo ~TI7*5g4/{Ku*k[VtVqvECͨ㖛zl2̠;N"M>9_ԷǼ׼V ,NVʔF.KWrURubSՖru0 sʹH,o& BO#5Qq*$% VZ]wݵ<;ܞ^uc$^1=uPzgcA9 1DNIȜ`ѻ<9Ͷ5=oa i jr#:{ο^gj.8LF_(KUȹ3<1MAP Aպ߆\d=~_[~fI/fbBNLKE`VmSl4M[Xv<%ò\^yo!a}XN'ۃOl<{2x}RIy)3>A|d`qjb;q>"nc"8_M=Ńn@P$i{fHreAtN%K-{Õ rdbċ`Yqoc43b i,z9NH.vo60k2hqP  w^|9N#taEsaq@K%ky^wuSQh> dȽZjanq:yie}ԫrϽ[ڧ7nx]E]f>Ng4xɃ >3*U:6Huv.#@- P̺h*jTRː12l!H>n-jsTͥc KEWm<߃5 .R yk8Ӫ)iZcIz92S5I05diL?Hߧ^!g;eY8u*oȈfL<۟p/$jGd!{'>. o T(ٜz_]U\ x7"LcAf^>W(![O[ʸc;&y<˵_V{g/S5ͿM1nޥߡؿ:3ns1.oee2w⡺-&uSag~f&~̉qPk`^yuE@!1I?g`[Ǜ`soF?z/!Cowh~Tӥ5ho6 TF!b6#փ".eqHxF/i駇 .,qf<%=WFC;2q/}GagpI⢌p!րR p ?` D1fgo+{a'[Hs S(CY6 j{QO("[#;xjl rf6LiZ|BF[CKgߎ0hg*v\ u1{[Qu|TOj|UYy ,SDKJE,Q1ϸui~z!\7Ǟ^- [%),怵0>Xfffqjrs,`m.{ykc˪tsF a&ptnǎ9=! hyی)1!:ȯn Tg{E!;/H=Δ.v\Zߛ# cTm'9[O}6鬾[~/2cVkUdWqCi!χ4c}O-ӱ p͕DF #`W?1ub"etUU{ky^wuSF@~\4Wl*kE4^sE]ʃ;͇$=G9R;--B5Ry:x+43R,œ|K<]\v{75TI4*q0l]Q>{4^/@O0npe*.c}QVIjG;alϣG 'tT < CZ 99JM4dx(P?+;›'$V8sZCi==?_c&H7V)fT铊fA&w دnH!~5j6&y:&-imI4ON>Gi%3iA~Jڥc_(4ԟd%Ui[x6KQ?}j裆'ѲR<ROZoVnzޥtjL4n1XCtBR6B`K M* tsq4r1u7(bٱ~rjGΓp}#pfnl+>ЯN|Gݹxy2GF+:|u3D )d8GH)gATl/j `8U#ӣa-Rhw]r1>֋ 2w8Z-?_2P-Zo2n* ԋBR,BL]]= *ՆR!)ձfv!AEr9,NI'[W GvXNo"4X Pq֮|ꯒ^bp WkO 0ۥ꟫"}~  Ѝ9V1z B[`tJRΆBޒlPVV2gCgk #?vpܘZ&6Tۗ1ڍ9NQDEn#,Y\G6C4w"A.MPsi_XxYi4sI5~_l_487[a1FG&G{X;FAv37˾YcrLvwdwFt|քZE2t],D"u`^\s:8[~f6 y%:G :ű:qpZy9"Uh䇳tPy!u2b"l@mOy hUN(psҧZ h0-Y fotH/J[΢B7=\Xbj8N;R>1 40qW~vz ڭ YU}GfhJ^-<_>][yBAɠ;l2l:QmOʶk θI}Ɨ<<3 Vl8mgƍ܍}o/b=r*!WGܬF>hS t''R~q:^f T-~mU뗻a;]D}K\b=k?Ǝ},,No]x5`:] }P94~S[#c]wXj哢 y&{W튇o:֬DX$/3 =xw)v(cZV9WUCxk(2w_ů&d%&&ң M$aƀ7X+ KWx#T Y*fmO]]z8V-:٠djـlp6P?z/>]@|{{.!qM|LvâyF'~'<' ' ԧS#WB2L)õ"yCie^@_A e 4~ޓU.a^&8pt킢|GdMp~YwHn+rJ_'7ծDc/VX9 rֹQ zQ+z2^2|"y!eXoG{OOIghV8S=Nv0gSK%kZa} l~e)Dszٟ#5 Kqp?Ͽ@/v4y$=#i{G8HR!p*!eⶁ5VYO #F ^AYz\KulucKxrj%Rc3uCc=B[*6[GhB}8Ů?$:8_'yE-TNe%en='2u.(wh 1Uz1-6rm=[_v'R!ΥCl/HEXzُVanƃ(;/gEAC[8ByC+CKb 9[&Lh~A/g PVLmg5L^淢sO ((8&U% W1 ̐ŭ|Y@@@n~>w`..4 uhv:Yȹ}o Ƿ^&#a/Wj M+B*\,4ے{ ks cCl}6ZN^ Ad{CdmMCB|]Kܽ7kM ts4R:Tӗ2RwG4c e㊿$ K=zV)^4Q/gn)/.IMkKO<1R/Ņ'_nBǫ DḶ蠯hv+vMxwU5$+1Zo6Ohfk5B8H:}O9qC3y_5X)R.'P Y6urj h Z Y,:kwcMi+3g{eq|sKҬY⟘^}>c{R(n[~G>wE}C"-cÝ-Q}Pe + YdyӶOH8 |sQ+bEF0&d~!Ag sCvEvFvt/>~B0ߣɹxXr`= LBsPR_W׆mh.wi#R#U nQAƹ% #ޝ#?އcy={{g{{V+pqˡK5M|.toB9Q;==X>W\|sRR`wwp$BV&nmz,2@q_o`f tkIP[QkYƙɑ=-W.%3Tit'HcK8GdywcRj|M:y.YUQkdT 9 Ѣ-0 eԃd[7~srrq(\:+d1 Pm~>9QƦH"8w[9WM&"z^ܘonN~ᨻ-"h1eؚtJ_CSHcդ`º뱣UiѷyuQ^LmCM3 %^xW(" br:qp'O7w }nM[w`姄M]fzAdzEk(c[^ }4l՛NʥƖ>Nph~T OƗIՓYKz%Sٷ~YTsq z<$ nǐw*J Ƕߢ4a'&f(֔C0FRoOD`zKkAW{|QJ&ՂL,>\뮻P7Töv-Dhܐi+ mpRƉp4H@.AР8#15Js]Я`siעg⛔_MRAߊDV6&# .[~7i֍%[yghB~D TY 7 vIzw5L ⏬1eXjq%4=L핗AL }$^@NDCDul ԰+^XJ 3s$! N9G&.{o7e`P Rӻ|j d[|hf׏C(&E^=mgIoe>gPX@]t$808圬ddjgvoE2ymGe+ra{m Jz7(7OICz>K&!>&mY߶<)x, blQYr'oKݧ%K_U#Rd@NMJvwE1#{H;L_n|'mRvvI~ cX*1? mu.:9@djp銪sfRli>l3]ϔ?Ag&R= ,πN81l*%٭K$ ìa_lZ~\4b&?bXp\@OLQۭg OG%}ʝ3d/}kWotQ3Mn[>'C`h5iŚ$=4- ?|1؟;/VqPW NFf֮nڟ_f@MhP$G|Z7僲>D#\]An"HaE~LEr`V_6-%l3T IΪQuFnBG S8y ӵG(>4S#G1Vث@ϗwѝ?J BzhGVdC lR0#nڌ`:}r}wcNlvJ¿kmzP Uh~qSqē{@{"F L+Z]wݵ<$R!M{A]6W_`^cSGxqD[1g K+7V봮EY巬%g&Ӭj.엡aa-2^Jw9fm]8C)i.Vf֖޷7qAqJ]WRLO$+*ƸAy{xiybvr}ᾔ.S '̗:((g~~9pkj1qZɏF‘zuQ^˶)8e0wm fMyp>}5c e\j% Jhti*\+dkkof`$ih1z֫i!JݒLXTB˚.0g[Cس{ڶ)z7=\lZzUH<.vVm0q-e0eRnakVR,:7B>p&rs?pfa}諾,o3iPU-4Q~atǡco|f*>ΪYl2gkeE0k^seöL-NJ $:^%?yp vIz|N|~Fp~LpvHxwtxr>mG`? 1]2r 0iM,I, s2HWOLԎ^ ?7ڲӭOORnnsJ61X Ns}scT GtfdGz~ ay (U:b f(Y/D MVBDD{0CK-Tq̞tSk޷~hPX͒͗̕(kŧ؃;-g# -_NBBlU^z8_%?it GԨD*ͤ`si4F(Α6~ m08Y#Al1TE]콯l-B& ;y2 Ѧ9nҗ7O{زJT܂=Ty?ݸrA& p tU+ Kr[cF *V{Hɠs3to+I]8*%E`[ip48O:B˵S*l{N7ObHxb`E\h`ufb]ï2ʜIb.{ %TWZ $y35ct2MZǶwv)R^͂j^4?8 f׈ć$[GKKB8S̾v* ~ 2$J\lAU4S(H.&- ;^l8j&߆*[3+86g2cꇩ"8jT,~ŃWx&r޵N+sR]gwYlu];&lݨq ( nҴ-oWПaʟsR]Jߎ;̌BUOiX=D,I-^/򭵝gGQ9X ##/$BCXc,J'1nN$}dYAO'4Ǔ+${3;*?tү)ZQqB\%zwMc|ĽgM7I9I~'L%R>A?!a7!042'}! .[ )vrQ߇P}.KU7*m}wM9<7>`*VG̜a8Z#3;e+DOY럽U{ų@_T,%ݿWJJ?$ut :( mPbncgqp;^~^uqzv8-\46~ɫ"Tz#Ep  ˻RpMʾNL4&u\k}>sKqyD%]J͏x}9}Xw3V+0[tXg =S_eְ|[Ԝ ZD6 DnE=\:!MT=ܡ?Z [~н-H ĺ)rs^MĪbMsd:ߗw^]wZI=2'blq WYPYͰo־|J BN|q`p5B&Ls/a?c Я Z`Bt5b;mzV^yX,A CXӈ48$gHBT 4|ZO|~H4ǔVj:uYRi W`HbɸϸoP᧲@ ppx8]<>6 `@} M[=ld :4]/]}:)Vj}z`qɹ/Z>9DW=mN5k8(r(YBI{1ib.RZ B H Wv WFA1'{j9q@L4Ff?}uf9(c P#jpx8*m¨j&d~>y' F-tLִ 7SO* !y~wk!a7V1CONH:ο%B0F|Z ( 6D}a[wPf!2F\n!`7ć#ckC!-Sy!Ve}V3wX@Hз3%^2ozoNp{pppGtDZ]wݵ<)@ۏO):LJ4 8kLSpBaM[ȾFȷF0F VNDi2C{; >_Mj"b uR`gXZܩSʭS cz5Ƽs8{&`\]bE&mAnPQAD蟌^ e${6o]+Gԭ=,VqCڅMr%*CS ԭ_53_oZ_u}YZ. Y烯.m<<ظ54[hoiofuf}6*}Y?KF⭑^~q8؋1{;%}9Gꄠ, ?~@1406@ LuDj5v 5)eozY$bUVkySYdT Zv{7kʼnr6F &TurQF(n5GYd)h5{=U8XzP{grUy4Q 4Hv!@Oc+1s#ẃ`MPuj;2eXډUmuHك'ȽV#(fӟMLK~ϧ2ޚ.Z g,:T>I\uB5 i}[)\~?ym[K[3{t$i?7C/$."̸0R#A9=m~YƧNdhV ;__x_GSjD/VhGH.v#H6W_|M8S@jϘZ&Ǫ"=pV#aB9zV 6 Bv+7&(7ϼن5 |)/(S"_[Udzu%QH1J+(vN䆺mRRIs߸I"{-뮻ZIy*,þ2̢RG*,2^I `,_lUY/W?twezkjq{HhwPySoMqWe\,AgN}5+lFݐ7A_2s6 ':ͅ3{X+Ɏdh&$ćT;_Ǵ]mcUQtrL40 O]zܠاxU]+jÙ(BmGf[{,F @{ gMQ8#mJďI7KQXQS P  8h3]?@)_pwӔ݊ǶMQF W >Fb0˜iriU jc+>f;vv=YFYJpzqAeMcUgM ݫB86܇ i;3LO],}umqطvr32 'kaQ.lX<}=H2|qVg:i1 :dմR|#Efз #r5ߌ&aS*V>y)W|`A'.9"uQJ:st?6Lc^fͣ<]O(a%o^`zb 5Ľ3Cq!FiB h${}\26I?-F'9gMyL3)cre9j141ɍe|܅EF阺1\d刭gvx4LHHnܼp-뮻ZIy V_Fbn-vr/T&?iX\ZYܠۡ{4u+\cj [LNx Bc $fNnaϹY.(JEX1(vm~!Nl~=p$"i>aqM-跳Js؋\8_K7tw;}OWs!u7cZ='V$z ³ ~q킬~Wuݔ,Uu7IvWI71w g sަ=M6df1y' 3uQ]e)fn:;7=~N|y\wZn64㈨BC9&,)v+j΁I%Hw,)Vu<bXۨ:HuƟ{Ql2}̣EZUV߉mfuk3ɏ\~"8WqjG|{lsjy-f5fAotYM:ȷgNq =G^/O;W 塥݆+3E 0*[/xlJ!JMWe }o=oz[:#u.E[@a>U,Kcs%Zޅ?טyʻ$XeX'`W|!}H{E<c+..U_f54zsbmzf)Ѽ?+Ü ìѳ#rM l|@IǢX2$ qZKVyg+tDKMP5#\!j%_{< ecWo{X$,S¨u!_zVI,k,Ut4<:. yQZ4t +'Bv yY.Vg o:?6-)?^e2RjAo]5k&N̉>m^4ƗOp׳ejӾ{;I?Xh"\UX'_-Ub3G}wg1 fJ9oWzbYS8H뷮z|ͥ8s'&fC)<'X'od*_N(:-c)ߜSJ)(٦k$\:Š4Re{~ rSO0ty1M.U rG `VjV|J9O!F(Z6_͗mg]Ȗ_ 7_ 0M'##~i~'{cu}S{(<ŞѬh"CZCl@oi/uX*@u뮻ZIy_z=>ULq5Kq4[-[4G1#K.lu4 ldb[5~,n_ *QjtT@l~uo熍Þ?\QTU<̭뗨 W(W8n$cn6,3/ :l,R[Oԟ 7 ݜ3sy:lT"{̪TjW(w\.I+(.G=2Y$A&"$jݲ3&Yc`^km[~}M.>%<[?hÒ"i򹩧v: y99 C  X!:ڋ#o4ԧ^#T\}"ezBIt7Ob 1n;WZ&\e]GxV;@?h(`ԯ·777!K'%N[{yJL@+[K2DagK*9p\:`ag4UXҰC{(ʁL ٠6KAO9' kc 4-@gI hxExOH(|ã\*jX?KB8T0t<Mul6i;㰛5̰>%WlgmWi;n{jszcM0~_3 0<TZLWV{9& ejTib i})9QޡPAyUK5-Ud Y7柠fNӟO *}5cz wiP l 5MP_ZP tssz;5';{+du\8@(\=[I-0.&V#g|߄$`dWHgO'K-so ݾCiBYoFJlp\]0qYW H`$+ƻ)VO? v}\$*hŨfDx1 , n$JmGOf'ZivzjrdOw'YMiȐGۅw{Iгd# cW4]V֋ ޶knN(Goyin FX\ԀFiHw,I.m0p<\  .orGȚ?Lȟ tᷭJաdR`.zl{eD̞P5-" 4jd/C+V-1` 8Mp}X5%R.UVI9yT}Yn81 @}0X tuAmb~up|b됣#wnTXy?dp>d`F9Arͩk,`[O.b9eq شe-Wڑe ph'Ձ$Bx@cWa]vS\_ tT3+٪fٽ)c?cFo` T{%2R,5󱫑z"k<.[h=xEar{n~]ܘzewx+f L!1e z:#ۿ(Q?3M=ox}{pp1.pYM9;:+ws'w>^ޕ.ϱFCf[+1ȴ4VMpT &,pR6*mBsK_wwZf*N0 '*s@X| A%a9A%~$h s5}A;2dNTSao&|,`uKo)ovhqy!r5*;쫽ϖǩċ{woz$ /0y2;7ZvB~˔7R NK?r?n7=}BSI>1 Z?/Θհ(hŷ|~oz( "IYE$h>OS nP[2s72X_46u4P{i'i]/E1(8.(8ϨNr{3kmnVf_e|Vt^DahYhil^JZbϼIٜa,bzrȸP\::d!ibm(+Dl>^5o1(-JyoFvb@2Ԓ(YkkЧ֯zeάnv b ͼm▴j:2 VwMvM*ӨocXZy4O'qoژJBLؐaC*2[FDN%1{`iy=^+1Rmt/¢`@[/}视/"ߚK<" +_f˂m -H*_Bv*r?TodhV'UV:Dm+<0 M^'oXj'R|i X-F:KrC[itMJYP_뮻P2|JsE_>;Xwo`ׅï^XL҇#W׷Hvnڣ0qȘg숗")PP 1 ?EAǞL|ݨ܎DYGtV%g_9$DZ|HVnS^"ۓ+YZ#k]Eppl^S헙ӍSLy/ҙK$͵֢hB3@ ?} w 6ץ:TQZ.,#ҍk-b3!^C6WbNeײmp Y4S8&YϤNџ'gRÓ. 4O?cg5e+_[zKBZ G2G9r{ ,3_lF5*$߽3,+sjG_a]|gB:S'}fV7.6w޾ǚSIk֒mmmm-ie#byfVX]Y5%zi[H ;GW# f|73N(BI 6cLsoKys ZMGWA!3FC0~~Sķ}4K<8upg-(znhGJ4b#wtV%26cv4&އaԲ%+Eߚj&_55>wU0 g1G%=㎦jXۼG${ wJ!~ٛrSاP1ʕO7NYXo]!9w tƗc$_xM|-;oyk9rfҩ@ymg9c٥p(Vzbз&a .:Z:{8R,Hkۍ׺ηB5n_(Tg>U}J7+voAlßSc0mg}GC{SLw}|G۩>0bDђvͭûOgYV-"g>jQ-HO|IH[sd#{:2̹quTlfK8{t}rjN>I <ó`S0+fT{Rt{,;g;ۻkwPsdcY*w@#:pB>3 bScM7pntcCEky^wu61诋 W:8y>AׁLݹx# 2'tA',p*s֚5_Ck|+o6xh/9h·ܞ^6 MhÎ߹!X-3dT-=2;r{vq}/yĩNŶ;C7:B3;0:jp:}}`dQ}ʗ%#Z]Nꉫ1:aqfcPΝzš:CQA 1 dbrª z8ZFj_ln˅ʅO;M% Ag Ψ v_L T*k$[ :MtImg=H[ΕzWa1Gc!h>vs&U$R; \)X"].[Aq,x'jh sogS@ehT>wZrZRZ|Z\rRˆJZ4xj聶_s5]7X ىT?IZH(ʽ.M&LP';|[e1<&D/\-#J%F1gZ6R'RڀmR~>>a056U)r BۥR:UC [M# JUIkVMP7)>]κ4z}yq :co©ռ6P7+N7%έ)~XrK޹mkBVկ˟d8l!'>~ [7 (g]c]'uB'n8zPs/dDu9~QY]v h _:xZFVK,o2TκJ;,-m,їgfBZ3ڌBGik%Kj^-V'V3QWnQ򹠓:wF9E.qd3?KGpّ\fțao2F8]D"[id!4u/׭\UM_3%M2DJ+w5ۧ[~> g~5ro2|/S*M2_3 >P(즋wsTtCeuWOA`_4 *P0I[QO:Qz:b%V#ީݿ9HVZFY־%9i4|v4uhr d!hd{>*#P5H` Gk#DfDs)r*t栌JZm[e)xd+W'C":CF CzQkIHլɪIocBB #_ûk{n%/%V[%jeKWU C ݭ-Vin/vMqJ&e"%k[ U 2kUcyWlCWWx6SטǹREݪ]GTz{ímzjcer ՈVJVBd; ey3bJR|Le\Y׮U2Bv[;KmJJ隞M3|(n꣯Y]);+vQ$.Eͱ{a֖B끝i$6v3sm|U-/*p$uAؽYtN$3ǫ1N@tP!ACUMOSpvLɯYb5_2:rՌL 5/s*1Vo7w^tՇF( g7ˀ?IA\ ح̣'5о,ll˜\<|ݑ(!(~!LޯoR~Rj6iǖ8V{vҝ/ "[:FYk Kj`A lA@Ako]`"SC9 pD$uz]wݵ<|ͧ &|̴1A7p@ $Xvd?{Jd)@tGvwJhB!)L ED ꩔?%@QMs[<2 |3Kd<)Ti 00(e%=}jRܷJ;Uj{$/gH-$@Nom(D7Υ*'牳#3n TJ` iqs=er5@ Qz~i L qH/.Bn2gZgW 7,Uٛ{sdk/т){jWT,`GY(e-}/K %0ώ\+=pO*bM4/"Ni8]= KONonUP-l3a?aBpz8wm\)3j,p".Z;+>fۉU F*a 0xl>["͝;+gw/Pnc {%+bQ[2lM۹CF vĩo KƆǹ6-{6rrCGt|Uo&mpwku&LJa;nY[m3 bpix|횻M!F{ΚXSd\hϑl/`;!ůwHw&Z/".bWL Kng Flc0 A``yDvI_lM@?KSt_"10ʾAm6cZ0gD;K+tc]lPg HpD 0jSgu6FɃ+M^yt JyQ#TI@nXs!\c P NO-ASw4k!~yV/ 3ݑ`,f_<7ή3lUAxbдz3 ŋ! YKpNC K8Ϋ ,+zF“c/κ?$YKVPO(F>qfϕWus?f#Z³+:F@bEi&k8/ `3}CX\ "`zz E#9EʢJgD}E4ޫMP{.Z X%U=F:H9Y:*|_ԟ>܊_!֖ru !oJwF"iwBE0M1@oyCI?6^Ұ &A1{ӟbg|% uZ]2ctk4}i9apqӔ"T๑E֜|G;72v+WI,[*MtJn1Om%f%d%@w*/4A9ì8 >^ӶS)mYrPnNgVΠ=lsF[F-f)WIF@kE+~8gWm'RF$<Lx۔"z(SmZJKCiK+-wR 5e~y{N0N>GG1z,ν9 !ހ;J覄3%v*{TdDjy:[[K ~k`VwS?}\}BbU\XF*6'f }`RO,YV͌{bJK s\}Fi;Y mڶ sB֯08cޤX躞͉iPLIX@Q%GH#mYP ֍zxyV3F܍%gCwUC=5sIVHwc'71+\<63 U44v~$ؚi2 2VVNQHۑZCՉe צ񷔲›~~'#Z4qxs_-kNzAdy*L2\8Je/Vi#Qq;Q0Q4A:N.CO q$!mW~DG]NON}2UDǞUJ-J#T;k`(,0[ʈh'H{w9RdPelZ/]\BY/ZVd^kP)[窼yYce P Eڢ)A=,#A5gVV`(@Qn:[ϺyԀvF\ypTEBX|ؾo4F`< F"|q'oԟ%jb~/6Tb ~'@ k18 La+j vĒ<@w뮻(O )b㉏S瞪.aʯ[ |\a'6`-h%ז3p,Q> P`Ih/˗nh-gioCފFZdSƤZD!\ \ #{`BM%M ޾pKi'-/݋`p(8HtpO`GS]pn>cC7 4BV4Q,!Z#C~ pH\fN+?ۺK?ijȞ:oo5ݯY3^K] RPe*_F0wR`OtpM0U Ru/ثE]s mYOkW 6E_xjU:\VW쌗x%9an1^V;tgE_1Wy^D[]_d @hPF<*Q Qe1A}8A=^#CQ'1Ÿcz>,%)I6:/!D%mEauc֖m}䃰C_tE'۫dƋTd ̋K4T/bNKLީ2_@bXDsNe.Θ,l}8-vp,XAy<>@<Ɯ3# :ҍLԉ1юԵϦix2ШW fs.9H6N1+Y رL=8un+"ʟ~ywHܱ7NGA0L/Qz7f=nN~mck>AgϬ H0 2 sKwj_X^2H4tJeI>cεR#u{r+;S02$T*v%QWGmBB[}rbJBZBF|VTNX~/h7Pe%Al*okQ$A$ 1 XK䋴{*uZZ%ZVМ.:\^|@{e 4Q y'\cV2/[r2 F&5ꄲu7k3HӲSIO*Φ)mk\Dh[ʁIs $9OWoViDo(V&4|3Z#kj}Z2@2oI^<1a= >ajx;>?zΦlw @zœ}!G( 3p>)fq!c)L-,~R{=gJC1ηP]Y:^UUM?V%YY={/\f`ܱR UԜvs$}JqJ=0tw@ ٺ=;q7iJsEFGjɶ^yc:rGA?C>GE{7Uv azZከx+˼sE$^n NnhȞn '}eơ BwY1<>2BKQ,O WU7[|z֬:vO36H'if:y֫$n ôOfI2  S"zzG(Oi?QKS<'TH̻.95D][S$m %MqQIrYbE79HJzpjY2$8 %>-Pts{;Kqg=9}Q|$Bp_Uڜ-moҥ oYexriqE5 I~\PZӇsሩjSw'^urM-(e;yii`A q5vUMm0q;;̣RJp fĔ${b:ĸ EB>>acTS$'zFSOsFBTcTwK?W'p;=8j0K?fZ7 fkC/jCEVuB4"ʿY fG'-:;a1K{{$(tst4䧆6p=f8yx+lLOijZa(YpHg3}:iCpS(bOY2UʽY>aina(]^%I3l vWAp`/},u*s)JEx ;7U- ұSԀ(ޕoSOe/b0/}]`袁rhҖECCZ$G]3pO(~[ws2s@ ʰR*^UCF$:C˹A*n%lR/MurNK9<IJ ;b,7<.s7:&hW;OjTv(dmE@}W[q3S{aɛfxK;F6\MC A2P!R 6s|_*%x[U#m+ bA 'xăc?:閡tE6m\,?a|rb=12B-%\ ]_2}C0_4P/Ԍᆬc"(>_0KdvZ;{1|A$Ou]-=…h;41p׿{W*Of˿n)&9)uO>G2Bacѡ;:%|u沎hh,vϫW_#? Of|xNwuם<I8_1@mVgrE>QQHprп=MGѬ[Xz˺H'p7Ha+"?MִY.ΘW@jT@o1wBGO[Mz&߲$Pr mi\T̤Va:1`*o=3.2D"H39d dq:u{-;F%3ѿƬ77G3~@zJWx'T1|\ǯ5O+:N"'Z>:!CSUI^2=VR9&]ҶT] %ny67vm12?1JDdq/go# dSĈq~ƚ.F|=g`1LAFiՒu1F >NrJACH+K sJ$OкL ֢QSNIt2L_W697DÓJIʼn79)53JF>a>F~&V>I>aeIҾ#pdN*skuptwv;N_ia\|{&C'kR+Z"Kho[ʕǁ\ 5qa͜HMck~Xfz;Ε\-Yyȿ}6::12VY+<`ރ]Nq Y([/Dj?]k#ܸ!&MUX1TQ?mWxHflugfT[ 3] 62Iyng `E\7{<}!)IU5g?KH)'7R >ñt ck+~ڣ5"u|lchhOlp*~iT͊wutNwuם<Gh/@s>~R'%zӪ=ו~k(U=U2G *qݹQ-DS?phHY%g3֣9ȍ2_(0@|?X/W ` .0W@FSl]tC{ 9W7c=Rd8Fn>ۜ-,7v @\?:~a0b(gadptm仮y;/w^ymZnX7o7 Im^&Y;IVw͚ 854kHgOnIE,HNX@԰4Ox ]FE3Nר0*4QnN1 (#v+A Y҃U0oӻBީ-ךǶ_-f}|- ZG\aa/ C5\Q!>.f5@aVhhvsȐ~vT ǰI3"D Vni:xruӊ~2pu !Ep*&-ݺS,fğ_/KǯV_nnrڵ,ƙ2n{}8ld=賭Wk9q;/L_߿첣Jv[Ęi "H~l"%"zESwZzT5NNI7POH$R $縺;H R0Z"x|gxx>l!qiAqMF5a?Kn%l~aoW_v^ ̅P{:Ԅގ~u_ltI0Mټ`춺˙ݩsRS#b*ah%+C%`A蓖/yɱI/e;mR9+RwAqp`{*uV ǝQLw[)_>zo4kI|*[8 3@*HiAR@2 ⌰d \> +vx˶`0]ܷ:*ܦނi,D2 v{'ϻNĔSx;e@p!c-A!b~V.d^VjBLLC hqm֨;Z #>–NaZ !Y_ /X{~_y)#u@_o' r@륖VKOc16xNLILnfރIP5 !yõ\bK B= 9zI6G:?L:I@OGM$|{=H F$3ijsџ3ȳdja]#y)]7Q:hמW-*w^x5!wјV-z"S>KWt;UMo(ǿe_FYs:\v ڱL%[z 6AG@?\{1s@0pT(`gJb/zDsqt5ޭB^{ J vțw=x[/w;=F&>88.u+/p)p[N4*բ!<@T{k)f` m;h}qB^yx#~l^AQ3=_9!XEz~U+Om|(F3Ne:IEL=,]S2 ps7g"\/KT[dPi/*)))qriށpeEуX? ]#|׃8:vGO'-*[{hL?sqHzT S-\am:$O 3YEiDɷvUβ#d IHHO2LM0.V9F7y`ub,wpvVGCĆVND} W_n83-Hf~!ӌpKt=%#p{^53<)@z^W[JF<*֫̓gGE}YR<Ϟ㊯g'!O=Jp[x,fbAb;S$*nOt?oou!a V q$+Qv90P9+R\g[3wi[26> Ki|JD' 9-׷{cucdPRz d\+[;0xAhl1pd,}n"a3/;/v?W fTIEiƻg:yX:8YXwZALn/B^.6kBcxKf g"dƭ8N[jqrtuXameyuͤݎplX4+8[يzYpB(#4İvkS[DNyQdnlFlFHWcMo\v+1J 4(T'Qk SADOk]۞M&Bv3i3hJYb(cfnh]:p3fQob!'6NEtHyʆvj~vt拡ύ'9"A(=+_{Twb5N}k{FW'^q!˰31Ocm.'kH U6-v R^~!I6pevo6#9}Ze+Sܥi׽-@;C[^kۢ:23?QPjIr(rUbpȉ2 *hgr;2MV0qSv42O#I?+4u kL %) ;tGZxEEd%KWghһv`0tW?LL`3ǿ\1Ҽ/YGZWWhz;\1U\KᘃO` ׭2ŷ)8d8)Jٸ89XxeGǟ(yì,#,,,U,EdsXMZ ]]ڠ+5H4 ѭRWOUO2x{:xYiJz :*X9[ՑNcl$M_;iLy35 p9^2z֫G lHB8V--o̾wth(+][+onnD6 QڙvjXf? .U԰N4yu"XBV& 7aKz gxw뮻_(O5V,Ҷs8Щi iel''l]Y~c3VyT"&%B9^ݢ[4)2]Q<(#];̲ū\+%Ǣ ('XU谛Vޙ mo5nfrkNʵɬNuϤD@ XԎ~8#gţ-gVrEjxzZ#uRfl&ȁ%^`G 8unз_LRWܭCċ/1NT3"n6̱Eh_j\Go[M+e Tw +lDhe-IԌs ~7x[hpzA,U}t~+jsze?FMu6M_FeJ2Ճܓ W$i溿̎,<ڹ7yM1:.RKӒ ,S/-ibHkkkkkk/k5kvx}jVY$P!%ܕsOikm,TnI2j lԎ#^ gvh(}y>ƋFW=.+@a3Mu1V g"ugy>qF̥'2HgfM%ZM)qɑɰGs.+Cw^#>t͓TORdQEEOX~Զ|pgf³`Zld+tolgVa$oTg'cs lniWe><iRg+0e DVta\n2fFh e[OyGևd1n?zAN%oeP;Zj.A2v q3tJ';F2-)P aM6y Z֍s#@ hI1WHg~zHPtdZn@ lneeQM'G[!)&=_:=Zѱ-jo s53_"ޓrT]dͦt ;yvN53נozcm opr̚s%xv2u4~'SߢNQڧO I{s/3lIpqnyb;W@0 9"e]]6eeǦ>ɹ BYsrSG=]f|Wed)3 '02߼`˻Fͥgަ%z 󾛯W~F:'g9BŒ'kvccd' gz> roANGnIt,Tտ_ -Ͳ`g}1ʋ9gp=glշSGKc67BQ~5sD)0 3A .yK@"Pfx`o9{)CĪp}Kc5^!gk"yeQjI/ZR~muN/2=P@)]K_ܻ.(o.Qpκ5,_v!I>2zu1{~oQ4O~$l?n3b-UGGLJu8O"קz;^gYL,J.o  eZs *Ozh&\"unĿ  c7,-F>5Nfo>zg j߇n:٠.Z~=;xH}?l9jc8ƆuBl+eJQ7m W/c9b9<;_}1rj}Il97hθgjc}wx1l%ӮK,OlN[XA4B/NwuםfM>JI* u\T]4UXZ7폾$4֪;;+BKYC nѷ_NvUe')F4vkEJA!͕2}c~ir\=jax-w0\&TVx4,G451NS6-ՇxMD]S IHV`k5ol6'W;7}ngs SUw=VYEV's@:vR-tV7`{mv`3Xe'^ [~)Ѿ2.QΎՍ&w&\vdvÂGibnteSɐ=04փ S VܷL"QjH5piVXv᧢)b3W8=D3tW( DtنˍYAġVҚbu3o sO?r=}[K#teղF&a^IYU-}&,ݍ=Cnr ArP^tjJ`]VGdb}ʶ#kVƪɗ/m\(@2NaGچAD2`w  A"sEP큛ݺٰ~sz~\\o6m>n/ֵdMQm_Қsu+-sF`c܁j&Y^uWD!3jӁ]ܡyҪ߲&^mn-mwҜ`.n#ulYˢ,Wf'I]xpЩ^,p'ϻN+  ""JLLwqqv.==}IIIQQѯ_GBZA-=`B :[ob`"-PCEiFh鮄Lv4hDf ėYz{[m%sVQQijmJE ɹ4O6ޠ*g*.6 R >#aKKUPDEF댆Yϻ{mZDksmY͐=?Y<4gSC3Rܐl_]S'(onϡh 1. 7Xq }^{ZE;[ڟ~18n| vD[wÚ 00t8zG(%K RC|^8~^l[l\g1ɕ)wxru~krmxq_fpqLCzOxSHAz\ez6hsk-C[ ]}1{rQVb?"hIN* 0e{^OG`߲u-Lqm5L--̭mt4]T+G?OzSAJ aGL$6.r@ހ縭l"2q1ԡ^[ Q5KlSa:ɭ6B8iJV \C*,flxO9*M04R A2t+(P4y]fB߱΅q.|gk`}vy]_I,L#.S8" #pvrfkt"=VX/>FbF;TYvz3DDUƛܩp;:@x {X%N+&N)ٻ@cM,5dl4MǝA_[ AUsբ_ͮܘ"G"W4zcܪҒ%3*:g4<,|JQjlo[R}ּ_=3Q̿X%-ٸ.i)p(@/ ~y4$WA\tW[qz'2BfF`Ɋ" XW,s UBɇ:{dDr.%Pmz%Ab ɬ&̅yWI yBi1 ]X73ycv{Zl(Gl0uuyl}$ AkdPAv!ve+_pp?R7Tb#]wu'yRQQ? o-ni?| D *[} @ | bl ZtQŠTn"n4WdZi:_w\I-roof +pm0а^NHٿ@@~&VTzռ1nPA(|P&n(+GtuQ(Nԏ1 ([݄/7_H0 ^x;i9QJC)o+ZI +7/ϟ /v8 C Մvڞ}zc b. ghzžvBEE5遼I%ʛtT#* .w{S鍆0^7R#>4Kq涱7vIO`gi{U|og-tq-awwdyȁ`Nu# ږ0Xm9>J(%HEI'`I2xQeYnŶ%6BߞA5X"t4#o,&A:(p$mdp֫: )MF^ S⦒A*Ksga" yWQJ~Ae,ax]Jk4Fhv\YRAio`k"QpzPg'.9mpbƓRMh9 \b6:}z3~3~ӊ~SSbAQ`%x֋2yr.?g gbT"(*[GP*=$9b;}adlc$SGEZ\d/N!'Y&M[ (v$R}*M uyʫ׹oJ(*&2qvF*\<ü;+ӁG[Kϖp{O)*xW#r*(j<*.1f07/xg'u4?[̨m27ҁPi0tUAbwSrxc/]OmuaR;.㎹Å71)dbem,__xW*G6W^2}^ЖBP TEHwwwwwwwwwww@{ٗy>=s L3smdu nw\v%c&Wc0?=ڦc֊s

!\7E(co<tvkr˭y/'veeeEE<)EXlk>҄8~c|el˔X+5E"Um¸L2C` / j6U;gf$+ zϛ9"̮=rjog1x{l{p6C[!!RH)gƄm_rC4-=r"5|}܇f>o"\.7Q;fA52m`Z?h 5 Ow387iccz+0a$_kxRݓ8kthBb"Vu:L^-\Yx1<5>ybz& >X>!F'س套O-{%ײI\*( 'EkKF7 4qЬ$> %wwM&^/rr.\;y*m6V~/ረg:X]gIVӝV1ƴuYS{sMWq,ońtO~!Q SjJ /Uc! -29JIe!6-VY3Rs<= }stу:M4%#23L>~5[1v@WNϿ˝wr.mx]08}/e~N.f9Vt")K+ wI deɯ:/-yt]B7!zf}7T ׺H3c-53\7}0T ܿ kY ZY[ʛ~N5BWobF̐(Xo[n5|ٍ[d޹s99yBB166͛7cw_*#׹KIC@#+> Jv<vƠύz^y>}gKm2 ʞz yi(TNgWsIBVrO{ )aڦ C* 9W!HSEOa|{XW/TͿ\`\b1@Nk341PCX=k!F-YdEKGsΰ/1_vzZqtG!ף~vSLKg5>|qJrAz>Κ0r_?2/.pwx 8_kq(% W̟'2)旞AWz7"wmlt'blU_hHg9x0%&_S#4* htI4G9(~`s.2bɯ1BMFA'羦(osg0%\ZiDP:(e+{Eİ[6q7?ܝT"~4P󅚪Dz5ʽdNY+?\$oHTt@9_%6^TL@O}0PPů29n Y#;T5l6j Y}hq-HLl(E`۲m)lspoEnaķܑ&%M%ij';KwnRWr']ɥy`%2SON~X{ I&E9U+D2w#*Jqӽ{ ]:\~5܏=HFc]ݩDa\~o6 ϭ,y%\r=E9GhTBy'>*7HGգ,VxnQ4}a:7uuftgu愰Vr|>z {x!lhH|0iO'ȤcW&%8>sxqoN VH,/:x'"ZZ#ol[9p1g>2"gï o/'?~>+? 0(sS)Jb RrFY*c!;!ޣo_K/ՉeӗX6~n*Fj*Eb*yr-` ?٨g3_jI!,i]%G;=(de۩irckiu,fr|wb=Nѡyڝo':ayLu& )uB#QGѪ;*q e}/װTf2 rp勡-yn^!nDzi8>o᳸R!?[L<1j"⾣:m1^FRBٖޟ#"!bф.w@]lxn"W`~a޿ A 7m:C_d+MӃZY Ov_f,I96:IeSیz+Kr ]ٓ Px6A1eqxcz';N^+a: YB%u>s\!Wy4zn|6i ^ TacMْCwZ/iCMZ~[4&TMt]47"b6`;{FG(wx<:vȐfgw/"ĝ23\,=Wy ocqGPTV8KWYòC4CFοCW^%9[#=X'^bs,EOuD>D^\rљ:`hjByh+%Å}j)ɗuEMj̇x/H(W0~c7iO ;u;8]qm|eHDGjڏ Zr$2Jdͳw6Xu6~6Tju^ rdᠦ+hm LvQ݅Ց~/oY#w ژ; *7%98[ۚY;v{]6Z9 I1RaAn~&!9\gɚ3J ׄ*~ח1Qde 4ꙏ{Ay֪-[7}DU(fiѢ6/]zWz̗*5*ҬZ*Q#X=S;UW9M9Rq1s3VTY⠣1֒_6Ƿیx:;7LLQF:x|2a^Ue|{zbq[dHw!"Ť$3]Uc!gqJs=]e37$rE*yy$0Hb)A!w/h҇e\r}溫|rʡqAV Z4]?BD(Q_ m׮9jzǴ?D1!G٦064^i|aus\Ga.羮k _6{~ S)_GjF5:Yksc}&2ƚ> C> lڦmQf|nhGUC.@x\jIԄT"6)9m'Q2޹8w5\ыjh {CuюgvnO[YjUM7|R Hֺ_[ƊSԝ;C5AJJƃ}[s// 7Ok8bK8Q?u rND F#b!Ӎ?fjZ!Vh0vQP_.;h%r?rQz)?u~#*֣M5u:Oؐ+X(h@Af/mn/NLQO闠ZL*?Q,&\y-#6<[\~9{z‼}T>%BX;#`,rD(5!E8V7A8k>YoGHe|@n|;D9qqyZ}vMf+wPb&bŃ#ˤ:Vxy&FHd Ʃ]/׉CΰՑ*uGk4f«Bu#\چ2`_0ۿn.r 0eJos0uW73$+ @ ~Q6eYv\s.P]Ia3n .\|=vU/SHPޏV X Ԛdjy593yA8!ts% Dl %NvC!7  @NoX2Rܶ?%3M2 s=I]驪v-V9Dy\H^6B7<] C@WSfF'>*0a87xcWJ Eݺ&89<̤3>:L=>&G<$\9lC䇱7B:T?vFdn/|՜OG k|]x'x#De{7S4oκH>Th[ [19 h1ИWX;H]ҒWykUbm]L|%'k_%$o<]~dnD_]X;"Qf^`I2Nrb/⋾ThFpT3nuQORmLmD.^OLFfXH>CgT{ЏKrŬkx2jCX~t2y-ܚy2j~ !tGR:UA;q:($ znhdr.e}`Ԇ㒳ӪIZƅd JE<鬅dqq>"|۾#F(Gn s g%#oYw;y[Y+Gpǔ~NH)]a`fTAG_Gh6S7Fީy[5"&[[78Z;F6.,׿4A} R,N#@2S6{d ܧZM'kwu$ꯙ#Du36՝< ;xX1ч?0S(憟ybYےir hCea&vɟٛڡZYS#)#)3%*\D:{dNaG9PY!򾿩=J!])*C>Nn.>bL=qFݸjnfp&H#u& f顃ܮQܭL#TK/ '(jC-,ͬ͝MMLL ܬ53ݕ{Bd `޲N|& ˬ-|L=+ܜz#DsY('N+ n ڂfܠXi~bh뗁~:Rh4ގ֊*4;k_8Ka$CExA8F.k֚WIf_uCM$QRNSLsưӅgk~hZA;Ƅ_׳g݃t1ez:fz'9DٺG:i)8o#Qu^_f}<ej*βJN VEƝ/BR#Ҥ\aZeӠҪ%6kw|6*Y!QȐlhk # 2P8U!{dS Ur:^@zxK[ۗOc#kNh{s̏#Z0=M{P10K"E0^ ip`pXpn3U> 0_& KRC$9;ſW:);-9R,j,rf._O&+~/'V>5[n<͓Ix<4oėZD#2Dgw!e} kĠ[K_g6};ЂdC*Y =Jed1/fl +]O0HY@v?@0vHBI6eE'ɽ>B;@Ɖy ]8; -A_WoxZId;t2}Rt`}y`0֍MXy'q4DDkw&1<dS].*:EepghlKw,sFM߮R9kEI[pK_'uN`Qh6SU\'Zދa9J(Otȵn|ns}ֆ`?Y]Ym,9gUBӂAtG”r{+v㮢 fuju!MM!oQ+9uտK~uEjXzYWbͨKW+O&Hf*^S4*+@) #7X9ZI0]0\ACV`$E U&,M?s2e]FϚ$QiW}⃠HucsB ̃ a+0f^b}+֒)6,<.z*#\J߃ |<3A7~vkv ~$M:JY㣍G[p܅#K+f'szsr/8aW_l8clQdh([ɐKS3H56F5{R81TDI?=\^L2"h[jTNMg!e%yT<Ϯ-u^tIV#Rj%tWYN;qG k\Ie(wIba[SNPƷ2.SG$Dz+rc˂ܳ쥚?Lcb\` k@}  |% ϴH+$ʥ˦^KG"5\m A륜j&:d'UQx~2Ǣua/YY*#L옷/B( %>4^P;~Ddl/bW;Df]f+qӱ%⾥mK,YJ~StaJ({mX?eb& _v-rkw1ϰWq}>_=ɻ[w.p/-wQXP?l|*C?Y|p4?D['܀R y[(_x *6G "yDh:iMs5bWYNY;#[|pkɣL]-[1{g4׽,щhP32j!b%81BT$Լϛ8AV %]eQ9bhwhh7>]Cg2N%evvufv%tOy2j{V!-q*(|ipL]%"&2ji)OP |5ѰN0oV1=5Qkx£7OvBbv͑UZ~TUzR3# }OR5 amuTo;"vSrԛeo~K}Q"tp5j]jv啈{FxRvț'tvjmyᮃ LsYvyZm K^U|{\>Io~ \@؞AG}:H=800[Q"gSLSeOB .d"A./3o>`>?hcs/ ;q=MؾExwyr-h-B8ZJ6n,gԺ }3= "Bp7O &)`,ܥeT VBSo0Ϭ31BgmH1|.:wOZ,!0Q,3kT努%EKZFG(FB# RPM cu'5 Diye>{艞e3`8j^X`Bߑ5ȜUw||3XൄżbH7һe▵ՒՒԒ]բ<,]Lj<Sk˚}LUv)&Dj y}Dxͧk^<44C{Y^[_ڡ|P& hvsOnǯm洵l5|9bJFHg`tӮ}ʢ| Zó|Xi_k]g LK~+GN}^~Y7B[O>t60ִr[GCxROeb#*ԕ̍cc yN/%P׉Pk+TL.wK`9G- d=9`TyCDewRj ū EgCU6_\RvLahY@Y._Aԟ,w8Ue %o9Ot߭V_I!) ,"pl\yAQwMel5=e S@ PtCSNwX7[zd:Tm hPO!>b`9`cbeO\Uuuh+bfok.Cd+ `vBZy+#f:cB#mC|Ccu cuŲ ܋K*t2ņ ZF2S1\V_iJZ7 بVG3Hv;ѓMOAL}EMq mLwoX%U5aղz6i)TR8 n/~/q?y?yE~^rV~cWc'L~E ^Ķyi6T1GE폐v!vFt* c#\ P44=X*.EJOx>)UclW]kLƒ/ FN<'zW yr-h&>|q@#;$g66qDۙ=t`%0V`DRxe` h" -u+"q9?"s_+[wPA6Yo>httӧW>XQߧMR `?FShQN4m ^nJ V0Z`!*4.ٙ7=;߫9AD 14`χKp tPW9:U,qρ/~hC5t3k""k ƐAc|E2Gn]%Z-n%‹yVݐ%/.o)k 2>/X 戃u4 KޑS[%34Nd!< ~R$wċ&\@))WZbҬW^g+hgR%O^<[:>ݐӥ90XP%td'vv``)]b|QpH -ܦkgN6WM~n%ɸo|x6$C;A]GC[/F>PO<8Ap}ǥF{n[n5F|{E .O_v =@skE PAG"5"tC\|Lb*9h33J6TE5Y#=lv$.K'[ q{B%#O9GVH~Ei 9!ֵ0zSi_ixvDVԠfFĜVІϞۅե ,{Oχ 2d {$6O&̼^5vyIu2Om@&3ө)ꄰW?;/zv B:Wy xgO)Wd_Wث-R4T˵ʕ% eJ+8)2u|QJ Z5n H;:ʂ'F0QKiW0ɝ'+PV  xNӵm~Bɾ`w.L"nnms`|VOVLϗs(m#0"eZb5G0fl=;8wG׫-&M|\;1OgV ;\ o-*OY8e,?* Rsqvwp=\R:س7 4@4@=t~Q<!Yc\jU.4c~MvY/Rһol5U2#]=,5y[~3i{rXOS~h態{[l S.9;Q y"ݪn3fpwbRwACݡ[jr7%"t\' UTTwTb5/".~HO}u{+!Ӱ!ݸAմAA_sWמ` d?o lإi*2o3\)a:AHF(Bw@ZfXf9*xsł' |Z:x#g͊k2)#rY e<%g|a:9R.,JRC]|ͣtSJD5 TRěE?)a"("!HH Hw#ݹұ,{=z<3ߗ 9\wP|R4EݰXۮ[kfF9כ$#]׌ D`wWh&>Zw h֨ǻ٦ȶ}(sM~fz^Wgfl ok<{6%x?9f:<% O*/ P F}HQ9udKΔMOML ̔Ȗϓrɓ ++]-ӛ%3.{*y3R2hbj˦UҮX!Q5]+W̿X0+5!byܓ%rI*ʱ9:۞7/bgHqOϟ ߇ |/1Yαfrljaݘc5Po?;Ё2M|k72MIRJВJPTtaM{9t~Atq٥`U|tn'Xmu^ ͪM+*R5jZϡ<4\ d` x#.l4Խ'q˯FĵGdxyٖ[R]k@,q|o" (K(gJ&i#UMI}6z#aZSQ`MCWMwHdxZ-o(HGegudNfVB(cGw=MxM8 XTlŮ[DKN :XjW%l-ӍX k4} 2LمkpDm9)^lT+^z)o]I샷աRٖ^3Vj!yτ:o`e/TIS+eњ"ٹ{ƭ(E#ytM7_hjsQs7"0jƠuyd# MϱjڃS\nk]yBe9}lJ g @PdzG$8a ^$1 'N^[P_l6N ^䣯;$wiZ?-Z`{Q Aݗ>.)_$D[;w×?S8trmuq`hjjrN|瞳 <le=1ۄuµUsԃ;A , wl8lnhmol?pNj;Ʈ905b|^r#w(F JU|mJt0M=;P"儱t107 FA$` ߝ/>}\ {Y(cu1^^$Y}Pt5EBρƷyoN=mF矊臟k\& Qz0>Dk Ͳ,Sg]x;Ā3ezw/iF싾SX K+6?*H|(OP YS;`;%V"Z3$] y:UbtaVù޼skL^A2 iC\;i&Ǿ&)2U_dwwpÿ$kV,齃GmD(1LIa 2 4?!6=  }--Amsݤ7{MF)JjLJIjYQ{vo,QM f7q4yJ?5E ;U7؅?g0KȦ@aY_c Դڌpmuiwι'7YiIݓ{KO{YJ'bwU,~W6ڙ:`ԉSd6+F"eމK Z޲%?Z&9`L󕔻[ydT_Ϳ ,կ1@J7ÿ zi/eSf*2M@1Xj׷]/濫 U96W? r4qi¡;{/:<:M;lxz-uEw*r廜OM{&*E7r؊Kh-kApz=~H$y}#[X.!/. th9tnFUa`bӡ_m+%7v%pE45cs^ح}p،w։s d@IԻ5(1Ypx==;{{{?ϻ9;-Cb2(f5ohM/lŪ?1fl+o7 pWo㹨>0@YϪhtd|6K <4 9V3;OOha*U?phr14PHл p;3?V:4wSۉ*E׺&*rtY({HwOZd~C]kQ :B[&a/gGTIVHTA}@Fejo=&96"K{`ʠ#Ik:.]..#.S. 1%=XhϙSVA2 Zu#>ou0gfVwEXdkŏ;غ|9u ̢8t)l_S{b=SNfֽNMUnIv^̋էuFa)-w9nz{ L<T*k?7mz۱댹xEȫR9: JopuŷE%-}5Mtq>!{,o G.̍{ 37#Ml 9"`7Mg]MPJ,pqegn F;;36[;ܱmm콾ac!,3rZ`pQpgp|`#{B,R!ZO9*J6UhUQvJ*|iw,")fÏ__IXUxlSkxeX7u¦JEk:+$q>Q[8A>bve;S AOoM`?rbUk'(φSO9}HUqB=}'@vo-^|D&kITrњ0)lP-i'^Diw}Z;*Z>}r9\F:rbtbϕoUg," V)=lOVEIԞΞ h\ Q>>Zl]8*.c9s5ku$}]6OҹBءV^xk&‰vIicP{%9ž.f{Q6tWE iDoT,LO>FM#(WZ؇Z( ht@ i4 + /xR 8mko~hL%ϩ"\x͞b@ϛMbP[ws.x5͒+<4ֺ*hsO§׳I7WU,ݛ5 ,T yv`:Ɇw9/%65Q5/+/'^N_n>x5bijbh҄NX8':o`i>7(><5)suezjphfcjj<x9"dn@%Š[i"Lf[צUֵusպ?t^ ^ !^"^I ^I#ڍN8wN|0i6.3!rx4lg;+4H1 RA1C/|_yƟ.8l=ʸ&x3,W;v0=W)8;r\s^ mxԲsqbsY(_g'e.fQtZ0BDRKF^ 4|i6G뒭"RC#iiZրAa.$#y7a,̣;zӬPJZzBwHGq\<ytM7_'(@qָ'3Ma*B"z6D#c(Y }CIqhwb~(f 9jf~\:bye 䈖ل$8-L߉Iɶ|bӑkڜe OZBmZ)头F=46eK`•ہjO^ ]~:9O9=K9?9G:G:wb{BԦFNT]4" ]~^:K(h1}g1ok`܈FUdߢYŜ4`nrmSלziN5X վni, ġ!vX OF^st> 0!*S)ƫz޷[*uJ%D8DڧyY;xí7I)B3X/pw<_NG[5*g⌶ O/jl宩5BEbYҁn& NLE}+L֗ϻQų[˽[ϵۤJvVbo>\,}/y5G5?GOrhx+'W^@GÄŁunz\YP{ʫO]ؽw`J$gq/t5 0moV(je`\7QNP;Y4 1+|w8D zZʢD. MrZ_F;>A=,-pyߑ^'n(d"vs,K~H^}V#_*/̐]C Uqm5}z6H?#FR/#^ ~by | d\=uU&P3,mo3A.TD Vl]/;Z%]ס&N_a/<»wH{9-jxC K{keLy6ɇͻ@_Jg49ӝ#ʸƯ: nۤD~h5 JE)lZ!`-XԳPJ7 O>%D@N1 ur7U j`my1gy<}s1cu j^Lgc⾲ՊLѫa8 \ SOH22e+ ,4=NYԔF>^' o-%YaȺKI>F/y3ALzd Y&g.>RϘ/zhY/Z(fQ#P;oKyktalKʳ^9?7I#>#1#\#KM.%+3oݍ ϪM KDS~{s[UiOm]|6BP> fpw,K#gubZ{9?9{Cچ|9pfN;D,<[&G.?[Yژ~ 7|e?k潬 <ONSՍq u; ̨nHfr^MyM/X;||@ 'S oYT_[ I& 9`ZaMzUnFU'YE_#kTw89{g*ޢ  ~ x^9@%X>""}Fqv:9D$EQ&C(D^zoq%}*DWfC۶ibɎtyS @K } vB(}t::Z,qZZ![1hl_? 9G1ZsPy 5bzÁ=cl(뚺Va2=۷vY9W[ߝB`g3deH{mbou^B!#(`h{9+,}%Z[.{ߗތ wm gWy867,BػBi+`78jFf BUZvS<}$iLv~X53 \b]F99{}&>>[rۚuDvE!;1χTi1+ EnħA.ŠQ:oMŞQu~߷&ګًFDcwTs7$M1<^[N& V( Nl@*E"O(B0Ij#MS1vȓOFŨKsc}?{ջFv趷OAΫ#o93>>_Y&*@[Jeҝ؝x:C@4D6hDXws>-LQlP9)ϸr;D)eM{OڇYD#/pOH1ˎWpw;0eO8l8~kBY0U:uC6}]\D9ɺwPMM\=$2(XJzӭwlTu;04]|#gL)~?CRs@λX ,' *^E&rp]&!?,xȁo3hDPh/51?JRD 2rsj"l-)Q Lpb++o/d*ٯ"8,ߗΒ.l`i._+YV$\[[(P*˛ʯ(r_*0Q}pˬ㥃ϾiĪvB֨LrbLFh~@韐D?wi/s J?V|V9WGS%bӓv{xDK OT=ބ=[}?3p`W]kmi䨡l蝤ܩ|.!Y<#\5W[V(+G1^=E-K5_95T)?_Sy-|%rloN#D-Cs巜Rz}A%O0e0NLe4h/.oR)Y*4쪽dsvXPq͞i!&ҭGqwOmu4e}UURe*$sE/E7 EDzK*>tdNoAB1O] 9F~ Lx/.t\~h;ܲѴ 1̸_3|U#lV|G/}!|Uk{vm#4v nþM}_F[H)e*u}oaQOѶ3 %\;6߯ 7r_Bk\Fj#tNBSGرg vC:)}vRžP;<Ʃ;5ϫ+ڤʳKeҿ2W>Wv)U8ʅ54qv>إiQkLN@U[o$z>:l.]ZԴY %Aq4j,JrK&({ZJM|Zؚܹt=yzԺ%C7"68J?O}l'tnŲoOɀDG8 WڷVBtafaԛ0sBUZvi<}$iLX~+X~*$_άdB5`ȩ!B?+^ΝvFzUl_R4GK O':K϶ qS^LURܩ l\4$K # }'mhCس e}, Br$Yt5kPV'3 נ 03RqicećtR6W4*,z2ͼ=`|t "},ڥ%'+>59߫+ʝKMEk|ofW_n=E8gjheJo邋Yԡzޤxc pHps(RbɊ<,iu'k[sOp 5TUYV9S~N! &Dk.Rv2"\%Lo2v1iaM[m;tBVk4=4̍k~-e]˜l٢\=f4Fcx{[f ׏k'x7k䮒f~@Yv+ˆO[J.~ʅm[}||1w{cxCmnY SkDZN -ۋ1DE#߆ӍPA.Sa0v*E 7ٰw.Vۄ!$yk+Of>hr zӦ-[?}`Z&*I8sqv>LaNWP4m"f6!C{<Ô;\&w}f0l_gF7tӍ<% ` ˝Os " fH5$Ls | @N \+b1>} =|wU.I1=@eB.({@%HÐ[Q]Gɛ}/N'D߷&&{ӟ,>_T*ΈAԼڨ}\X˸<} sXr2z=Z-SP<~;-jPsp?2MӚ%is`8`\ua,_9$~v,kq |hs(~uo?= #o t0 6KU٤H7{J< ]ƫ-J-Oq\ t!`* #8 ,Q5hGMyy1,=v@57+Iǔ GA?3w4:;JC ` jpc oBfV^ly/y*Ͽ i ha:0tN-< d™Y'SD{3`!+F \}aLYos_ɵ`'})81`T @0 Co#mtS)&)?4K3} ?ә76 2 eI\c5\83{tw{oi߮\0l+EfGx+ G#4@EA?^'#'=j=&A1o ؂ѡ'4R|'I/½u{'ؗ6 H|ei  J6a؂O Twޣf_lOt]W hvD&l7I hF^FW /< kL* k ck)A1wNT@|^ڡ8kxXbnxIR-e"4]@Z1 s;vxd q\W@~=|Aa}?]gd^'B1w)ffi.F%FoF,(Oz#ϛnFsle?S,(,B6WP-(822=;!H+%]|3ǻ^Оkq~.a:i)cMBSKsfBtaK$OM I&yHmSkiϖ~SWܒS֎^Dmӿ>TN}1xqR21#B.IӥEc A`p%Yf5 UOj&zo{>3.\St5%7hڑy{wbxs>(jك` :]r?jl ,Ƕ3!G9P$R}vodSWMBFYXg>Ds# /t?a,m\Ճ?Zͭҕ }mJN'Q㎷W "@735t`~pQ"5^}Zj&gN3~0ݷN#tl 4-MGclgB*3Zμ:U@X?Y~~Fڱ~qׯr}Bja/?%:{ip{.yKgoO1BpŧsG+6?`-MR X2sԧg++ak)gY!=\@?t@.$2UyU¡FAQ\eM(JԴF^pرnX_GP4cBIqo]M0ڶRF>cfi(نSNU91ҦNJ[V mXyl-E,T z\uc&svBo2-qT(.oI?*_<C5Ð]!m7"U 3A0P+#q㬍-ldG6e VIaT0$cRPx{jk t{Qݳ; UMږ^1RQ.u},]!_[K ;C|[5m+Sp]T]5c: LV%v9n ^|nqvYŏbbscUz:KS(-G{je,J\æ5.$'U2AL1.CVR&KyZrdL%M7t#;kc4yvCDH–2]Mq<!!@` wmqwXgY`|_ݯVMUvWgb׍#z:"T.C'i:rc>nIxVccK:Ħ**ڵ5rV/!YIRsp::,OWx{TM<BdyAlP*TV9׌< 5\OR*nHUd*,v* .MK/wSR3X-C4'd^2fTף٤%mk%;KRނQN=)uKM@_!+e\S)gf‹duP=|=>-;f_+ԻmK8wE`v\HT6TJsEV@@eϸhj evΑLO&S]@I-q.A)Eᡯ R\Pq|v㚻fӤomxqR]btp;1.C(|Z~fiFE4 ÆF&ՆfNq=?O>!D tcпb44״f\5:Rxj) gי7v 1OSoAWr@P4ݬў(s ȱDW6*;m񅚦<$"䓳& 9S*z7?m~XcmZ twN)A|;pqwv,2n :ur9 1\O YB$aO>8ks@y\vNfMizJa]>`C}B=z_-<:]tz6⑌[[nĺRu7ZgU@_5KxRuŇu†&$f5]פ,)iZkrns.SP/+3s?p]D_e~LI6^yZ7QN1WWN!<(s+ խ[3 уz̋/$\gB6'{xwpqk ?~qI.qqޣ= "koόys{UT"M 58 6ȂF`':Lzʸ3Sԭ](1V 3iTZ0-Dځ'h]TЍqnZ)J,b田5YȬHxACߚy WBX)O1>b꣱m&Wlࡉx)K/8S@|SEʳ 밠%h!& )|!kJnS QA8ou3J9R%WD>B`-b a6pXXf}ۚ$V&5[n<y*sScc>t~nyywu?3@I> .}C*b溎WA32węԻ{Ϛ*Eo 7$ǫ?O޿Ps2@[v7gYgegMg}W+{oH\lKg'ŨDĝϹ}-;>56*LRCϮy=KYZlQJ=IDƜ ^4ܗNZyrԜ7)Eߗu ˴zugoC9\8~WƴB27l~ _ I9ON B&jZ)/cp٣ !*5RƒM:9uN'nod+vt,MN (vWTDoo{cƒ˺naÙ,FxG3Mi"m&_7]!5s0ԨŬƨ^WjL[hko* 1 F01E(֥=֥ %'3`!@.1|`n<+K]Ky3!BHo3FT1g@yEv![o*a9_?S&5W4[0N7WOy߾V5Qޑ~*L$"/Աm||mg7{b`'͇}mu&w.MA?C6Qra]S&`͗ ][xymC׃υ$G;O;lsmr ٞce}bЗ-D3[ +? &7pB"y24ϡK/g*&T5jy/XKu+t Ƌ@$Osv3WR5gc}VXRB|%"Jur"fePW9gJ {z'([&Fk݊6A0o?[pPJ%V '? oD뮾u^~?9cо!q~t O(> Z4!0?%}fBm56T2y % @#yom_넓5mNh\rq4Y׉?QKT/PF&"ZM#$*Bw. ɭyr-?iuJ0O!:Q4F:=;gK.nw~'ӄZK@{ !SrUM( nNVD{x'"gV@u-u3tI56[d΋+fe{tnhٖ|wW)s$g8ދ_R;d G"$ Y `>&yg;›W4nrdymv꧿KPl)/c-=9 m5lԁ\ o)(P4]p "-lQ,o [%JRrkZ87f_`e| gujYJe=Mpf7OiUT#mUpx)<8ɸ<_l< ,+l 04O<=gII񖰯ьӱTkIwO w2u&4Bg{nڞxdؼ=CqxdA@_q bŽֶbNR*n :&ar1Ie`U0{b9=2>yH!XP&&gǝ|3yȰv\B{OgSV3)>ŕie*E~cjhgka)*S'1&zxl9R H8NW@CZ ku}_\݈dl1b4r;R~ӆ[Ou-8`,̗@ɴ'Wp ,Id\۪\k2;9HF6(9a-#iNqڕ0a^/~ߣ3~+Ї[;|krSKT形MeVu B3#Cva;m,h4w6Z:@٘’ʿBuCk)j;2U[ǸEh$$.jMU/;hҲ:Ν5jl}e2*;?>ƯwiơDINH85dOc4+S{c3[K{ClN2ul+_0ވzyHBkXVMf zzn螡ҽ!!ǭg:vQWO4oGUتfʥݨd!wC}p(k(ZOݟ'JԷy-ܚy@Y dovܴI%d]&6IE%z6Oo{0_W5 watr|g&Sk:G6W7yF:w`9y$F0š.՛ʟ<9A?9F?9B?9LVgIeJ~qO5Sbg+3x0ѯ*vL}(/(tAŗVƪA?"Ɵड@}g œӇM~2m|J %׻ɯG0ØCCEpiрPYՉ̨qO7[3ǖZ8 Α7%OⱮ.RN2"r$?]t|5cD` amp:]\c?Z$6ًBDDU>\z:z-RyWdzzPzr)R^PuL>k#_ r` Zol{mbocei$GڱhqV_ 2N+jA {O2`K q慿MC>C9c|R|"vOŠw%=o:L4l*_$7ͫ@D},SP`!F"2N#[dzc7kg}_ΛJu"{ʘvIZ$\ s+f˗ 7ms#^# P׺hWXR'{oׇTR5sPm! {c%VAs='_v:mg,6K&[e)Z9(4|x3"_!yG/'أ;Ȝҧo-xq{,F}#T7=:۰~kfzR+fޓWU!dn\/Ƕ/q\yq)gyٔ u^U5ʒqC4aTuM:`?GsMܗғUQޫV;Nvh7;]6B:22>x qj[lV{ȥb?Rw*-E?vx4Rv4Qu!Js3\0hzNyr-hbDnߙFqҐ23hZ 9\yBGdKZ6 xh;p q$<$UsY{[;G7Y6ڔɮH(PtCT#CWtDy5*EB*O0-c'sO`cpQqy)+9xM^fռ_f{7\NrDCd?aC7_lK!cL_݄wZ~A7xvH>pTr!ҳA{\9DiAbm̰)ċSWOg]7lRq4P5J&Ljߺ?..([pEJPȥtYSOSlH#Y*m}C֙m,2\bwrx+R2qj@R\ڜRNKMG\};'WhWnk">u^¹jSѾ{"C2ݺAxMQ硚G1{"%]/R=Ϟ eTY5M)g$ĿzL@: R)ҼLSџ?*`,bKTa2 UDi0[̣T5[n<͓V"PpϢ fݾs΃ݻ1wϰ /1dрȀ\ {d˔{'6Lvmq4DbIJX\(LqT629!%^ x<]6.u (uUeyl3@tA@? 5#A޵="r%u_ci+WH׏.ht3l2ln^1լHm*7H'CoL9@ycb~ý TupRZNj@eM/̓eKOwLdN᧜-4n لΙFmǝJ+KLW--wv:Mtv5T gDD$8Tٌz&j4s:R\ibo\a䬘`,"NhԢ7@ -ۈt~ݨG Z rz{2$C^]@^I&eD i%Dep$J7d!YYOrƃYA.ʷ 0GtdX0K3#}C]G:BAWI*V >esw.z~%%W<W(;*\-jej!.M Jc).׭6 Q8gmr,x4>4)SMefsQ(- Rn"ϕyo[n5EQ27MnSwD8"¾;U0ߝc㨝ڜ^b_ajJՔ6Wp"/w,iNF(f:Έswx[&R[A; ȿk0Ջ]yvLx`Gxy}-33339g~ p9~J[Z?Ah{n=˚+6Z5~S/K}@ƈjЬ՚n~(縚JP:KLr_,x?OUo20rvIYRid[? ?|D:vD}h]ܭY*xQp#%ɦn]j,jpEuEe/^GHM6&ޥZJtے\9Jo Iꮻgyf*p烎 "%kŢ;b"tPqg>joNt?li.zem;mJerϒlgMSv~,oI+ qfZ5Ҍ,jlAtdmqꄿDtb 6E;Cc'K~.[7o>E%_F̑R=-ey+dmHwsa|򠛃eM&f]?ʥ%Un%R )Wa{ Ɣ0./03kEZGySU|V6מ7a12𻺄1~ EW몶#R gHm7瞧b\QMghâVWYDz%"z\c $k %{qWg=L=Lkz ١C&7uMO{Z?Gu뺌8,fs]}EV ". N?Pn<\{2/ 8/G !XB;Rߘ˟q0Ǐ?ю 7io:鷆_&^Αo߇ܩ:lk8%.~2. :L7Xj}>ǟ^e| &SH߃ 0δ%+޿3wFUl`Se[[nE6l-yg6֧+vyGCS]S\K?hԳGUi_MVCE HmN.@a`p=myҨ?bؔͽd!@oi"Ԟ܉* \(z蠛I;87rOGh;ПZA/S0̚&D;*26<8&Ƒ T:uKgLbl>O < (#*Hpĸt<8!+.ֈ+QO|2>,;>tËM\%>p(y dn@sT\ #7sTzՉ>nys3*&CM0SATќFپ@ѲX{8 T1#H=+W,t l Uu@ĒeuU *K Ub\,jj lyͯcZX {IwIwIvITw~k?(3 3ut4T8Kc;m&?}2wVuyi9HOk/f7ȫݡ'lMΒ+k#ի'׋'estӓJAfM b49qXdOM(s.m]C3?(;EgG GOp/0]1 X8(\1;,3o:_q` cl) SِF{RQ{BB2] + ܚ-rkIj\rb}\h/94Dk<_@2M&OoFPW)cK%<=$)Әi9mo ;ߗ|mo,QoMo9a鋮DNEX4$[U>Y~O5Q.YVUڗ!7c"x] ;?8oCE֬YE ?X-i.{xcQME&K)E-qaW5) ~h3sk}uW9/Q_^ߥAAYAZ&ynuڙsr}-_K.+qfj뛾'B9wZE4&Ukll06D".-VHę,>?.S>)Z?6Zf5؂Zs˛du-RGs0^33e~d7 bzanqg5[ڠ㚻Gv97R]~_'Æ1P?|F{>Lm00T14%:]քe\OY?=_Q?bδϳTQD`2YF:zF @5@;| xoϔI\VfRqDm_{6PT H)}eP D>W;3I;>I;$I;I5Y56S4_D`JlDz%_q9rzNI'7V|Pe3b- lհdYth"-dUkFu;wV aV/.)T;"봓͑YE6/jj4aNzBxZKhKX^ gN%mbknkD[S/'[cݨZjdZ&H;xw֢0A7Ҷ_u|٤dWa,%/yn[n5AU{(\3܊ȃN"h1P?>& ` MˁAK㬴v>8Y'DYֳkVDWXTgXM@^pFQ}X0ܤh[dκ G" ~O@lytXZ&Ζδ4 ojfo-SD:: ߧv!MlC<6AIf*W%A2Rb c#sxIm=^z1 73 {;yIߋ{/'g޷ pǖZtz-F_h4rkoΠ5*V&d:D|'rYlpwfs*[߾}7󪩓ǷNiYӦ`~Ul`K[ G9Fl֓8!Bh BbQ_^WW_&P&Xf%1VLM4 };GVO~_|أXGsqqyr#j \#\jy3HcO`uezjG(.fDlx{Ĭj|rzr@SxJ4 w0zڽK_0Oy{rvw_-A:iŀDŽrj,h+f>j`X UwOaMz_Qu_onZXѭ""-t#$)e䄉C8NZ= @Dᬔ>xٻPwwSq#sļ' X@(>vfBi52(Wo e(Lp '@*U[_If;}˟zf;'aUCBCJaCFd6Bh,ǂNj-Gi꾘 |EGdaL`AS`g 41>S;ܧ5;Ml{+|{Gެvf-{j ǪɇIؔW 7pn6=hvRsQuu_|Z㺨Wb-$ ?)4iQdj_j*GM4zE^HF:"@? +b t<:]6v  /7ﲆyQJ43.x_1x?&bF;))=G} , W"ԅ`8*j|: Y.KQwQ~]?#6\bxxa˱hlf(\3N]U:԰v|̤`d ns7I"wBW%:7mj d'ix۸*}Ն%ʊD ))+VA=Ř&ĀǂH`]ahgpt6ƿDZ@ o6x/0Ā#{X E ) @Otw/mqmQa6LIt4/FiUSvY!١:c;kqop2lT] 0 e=JP-iZ>Fg,64@أSNTY7V)Ӗյi6#~~0YPa= 3{N2L 0O , _`hCAD%[8(p\8;ӏf6_wd0mhvuotW^Y9 0f\h4b(3wvE94AS3OL;^Jw`V @b0У~ !WEN|L oY 4?Z _{пsT mr~LϋڂY{T@念Q&nݡިqZN9:K~ngUFbd!Y|3=?BٕT.*8k+KC<77׍!RATõKZ>}Y6[T% <ѡﲞ(U:ڷ'}ilijrhkD;#~j#}@ъƈDc1Xo0ܐl|-) 7*VU[n<0NPXORxu߲͌$ A@d9\@̜k6qГZαKf'||wD`RG2j$UhPlFT~>gT+C{Ǽ~6~=TS,‘ͪ.e¾TP+N~AR| jhܷq׿ D汝Cbolhf@&)B ݏHͷo-UJ3N slr5Yr۷w8s; W+gi*+t[+0㿈;pz;%UbWfxI4>#Q1YqŗP3mo )A  Aĩ|4rqḟ=y{.4?[Mjk&vDG[#}gt 5|Ly)AŖ5QBgx3O[y"%Ӓ`"%hFמŏc0e(jUkwY1f 5ӔbpZJ!9mĻg lf!p *֦q7m_KH&' ʳpk)ȖE3ysT_ 'qdՆrjI:&.a y2-_ڒX33EJe!NZ,ɑ5kcino"82PխF3p W!Uaӽ'3sNJׅKC2saLWlPikJxq'zoϩdM3s`1-:T[\ f{E5]/}Жoc%6.q^4{NɞdIlՆۥibݪ||:pbþc"G{\Zr.5 TH\T|}^r$b7wdTtQA\|}nyXVǘ~2 CeQNRDe_E y[9/PDp%ǕU4:ƞ>bYv.TE{*M'fKgd`izPd\4KxH"7>ݼ9>1~_4)UoKݗ=u w.{\d("WA-OºE"a毩RKPN(c>ܛ&^yV"nnh$^*1fD7Y3'X8Q"-_&l~]*V"Q}/^s%Vg2 6öN/Q}nSi1Q]LpM}lU$;*m̞ͬ:܂{J2zuaJQDLRWFyaUusвYʂZ]њ7;=T,teC,=flBjXJx<}Oq SWnXzIpǛ^`/XtFoW`8qT!2ZA>1QAr ~0/u7K'5ZGf8 F!%?džWF: 0\L^H~8OD}kx6Z}6Ƚҧ!oŒ},SݧxUwwOQ R* "Jw# Kw.]tw7잯<ߘ98u=/1҄GKb EEbmSqB(o:6NsB&F~ x*$Ei(!XS) @^=<.[6RpJ Bփa Nh{8 D34y,{n;6IUNߓ[,k_O?WJvLFXY$\mQ)u;}"CЧAfDs|tQFhiYhߧg0 ̛! MU\- fɅ<\|"D)fUL ,Srs8uCc]UO劣TI|V#QS*W{ C]6#`zC2V&&&&f=6gHJRB\|❸4cO'R|l;ҿ!P[<{yv^}.[NSJtc)\>{fq飼3Җ޿8ᇖsA=tDb< 5t#ʍ|R}- B@}F{yw}:py/g:hFHsGOa{8{E{{8GOd^#j~t5jNF{j&FrտfXx+t[Tzבj]gOq+_%ـ;[+ uHGxS dw__T0 hG,3͟on1 KKl|[ 6?pwɯ';+ɂv"ϥ/+Si񛥚ME4!<Vg,Ky\'I0pxG%ܽRxKo G7HKuPe;e+OÞe5QN o5 =.CjTܸ?<{cnmFh~1 <.W}tiwŭÉǖMF|{>ˊ? hy]?8/yt҉u҂uR}\}\Sѧ Kdh -IJ l}9oGxŢ]`\cb>?6z&DL}M ?Yhx7FW+Z"V.N9 s^*e{{}*]¿I,2yE$k<1g;v%9*_~:s_UL$vӿ,9/^nn`]a\A6T:{p"^,w(ͧ8;[xiE}sK]Se.Q!^aɝ>S;S&~yMs5ZZBݾGB&_7xݻg'GOSpRq sS?OT0wI噬\2" r O;9#|,;h-c\Pgށ=W A㩈K{VMgXeר̀ >(V=ASuG<D\Lݫv;VaF)viZWs] g eRAyV3{y/SHEs#[Asi;uA ߪ11udb~[)q:e4SU_c\snmejxy>xU/r׺gl6&۳ hCD N^Wa$]x魐PLmpaKb8ղ;2(g%t"sKYhb״iݕ{iʱRف@Ώ5ډA׻ǁ]k!|Kkf!SlcI[V%wD[8'OO q|v5](݌زQ?;쾡FPh $C:_w? ~: 1 ҫ9_~Żlx]HҲ0䈴}fjsN@zy #A1oM\yJdFY d فS9^5V2?i~1OLY=RO+#}ø821HߐF5NVPQC? _M#&: |l|}a'M9H'y6+Unvi!R.bRaʾrٜfMʓX<'\Va9ӟ ,#@P/m֙S;e{<6E hp췰 w[N96I{(G$ 1w|MۙUgD 53"JQC"yu|]K-ct2JD7~v-2|ms/Jŭj&ΫRe]ceˆutZ ur7djN~u"G(Ǥ'ˏ'IzX3{Yi)jYuCYt#[TSg`W')C6:9\ޫ Ud*ENYw79W;\#L55dD-x]\X0p0r$+tfe_4x{' //@8` a`*clp‡6-KUFrK5$[ xcPoE9Is^:<8S0s k;{3o'c_WPo_4XPu?y{ &UV $@Ec^~ 81]p`gy k׀wF6(HFG2B KǍhZyqMtutsq ʍ IuU5 Q6R3*rLb9:|t?yfzrŶ pR_,~f_k+R;I0@mZYwc# 8s/7w vcX _eYnk/NQ̣?IƖ/SPKN4!2xGPT`^@CC}}ϪUԞvƹl/yMѫ8;D'Oة-T^|T29"֍gJ z ̸-z\/d"ZBzK;fj[\.lF=#S'γзB++˭DquNjLn1Wಉh"m[Zu |9/TUn9t6aYCȾ}VJhgu8\zS~7ŀVlܬ]#Zo.stS*޸GSG~!めfڇQ1p^WwyhOv V^Jg?v|^tV~8q}胣IUuޜɄ# %!YN%v7 owr|ֻ%M޸- 9d:",T)L9Rc&mی`W ڏߵQyӯf_HH.tW]7*xK3XtwhnQ(YΜaPW~+CقM(R:~ǨmOFC_Sz=F?2Oi&}j䏙 82ZOS'2cb$z^ȽYmoaE;Ocx 30V.P9;5 -Y钼way|dm͌%cʾ溇|goޭ{x*%n~_j\\88,ꔍ2vG;Ш[e_gQ则Ӱ\_ͧ+beӰ0. V#1uosc=M, jvrߖ Kկ^/Yy;WB%m8C=\\8M];07nydyxih s UvjcΥN0 }?W+gvqΗ1`aM2g⺚ÎuܙZѵP+s#qzfdQ/d0 Q_ pE&+լpM?z0EZ13hDOg2Xe>Zw3^޹#  %.(>[7"sz7J[3V{Pn']rxޱ?N?F=SI1yfudsdg4aS3bXusq\]I\G:A5TΓ}.u*8cb'}?ghb_՞ ,yhY,Qމ?-d@t/y)06X 3SkJ_":] 8X}~L<*)JSɻjJbCLELښ˞֮6~k/S,JӇ'Pn<=zzC0̀A2(H1E|}!]VLCȆzy퇌.ч$5hF3GzTT oG?{/rIt[xٴel8y?Y̍?'qK[$Y˜p_OR4r y·鹪ڙ3{9u^cM_~eN\1Ҙ(fQNJy;.nNs -'ƪ:['9#9La`$_F;${gKM~nQ4#ދW?%\z5f$p[*{r'yCq>N6JhĩB0)VP@|N8Q aa87kUNN!YV=ܫx{O_J<)hXu좕̓i}n] 4"V픰Q}Pg yHtVE(ERK ΰQ SyR+X*=+T+;A._}$| G"렎lc}{*Y̗ϡ:T]_3`lf&> U9l^yu9}! g^k-sMA-ak;ZI+jpŬ !>nNv V[N7(Pipaւ|_+;Qǿj:a-JR6 KR*XFp"kPv &)[Z %J {t7TGu[ŋYcr)*%ZaIf~5>#;n6nKv.E.N~}:ɫ 6 #xO^ܡ ~GFgZypvʅ"X޴ָ=%uYszD~qXO J(4d(n}Pn~6KRϑ3 7p`ymi&1´Dr\hhFռRrǟě+:;()SZq>T@z;Kk(ƪ3)͠6\n4^շvI3|U!e&yER5RٝrcKyMތp럁}E,k'0r|)@NA/8sn.M9̍3hx01;}UkُBUאHRGͯBOO,hc JOT.)7P] +wr̡.^ Hzvx5*Sa);pl1mz_" 11r3ﰀ`$"tbntbzhg]o]|vadS7GriU(W~3nKW'#w_u7Z>Q:5.3 pH7JhH_CY5Daf*F(&z]48pڨ_ʹ]Y{g0͝ҡ^栓;&Ӽo,}K{R?|-E u jmz`W)wNwvF."Z{yw}O7]ⱕ*f|Lu}8smN= w%6VH Kl9<žš&~>Ffg{QB̬K:ʀ 6M4cExTq*Ug*Rk9Jc7F"VwUFwM7qJJ>ʲ"^,rsn7Rߊ Kfi"\. *ͦdV>L0ttq j0"O)ӦXG;Y;X'XgZ }6wHDwލ؉UJP\O W섰w1@(*Z+ҍC|N,Ϥ;V/m!d9yqZHC"tVDzzVKQ(јkDD2xۅWK/W. 7gHz:ӻ{҅ af9[;203 S}#N'?r1bv25U7}/gFHB\mϡ/DǪl1B0vrPWB'VV=3fЯ7 e`@Gj4[)C#w8Ciq_AmU9kTvqXJߩyfNL#˘} [}Uw4=`dDիx;S]ۋ8͇,yQ7QQIQ__2;Țv[k˟Uhon䝪Y/>ϔ湭~B}5lcAb=Wk!rc1kglPktzNjMQ'_ @Tv $z/ } g_`{o7K. AuAq'Xk9ӥ}uLٴ>dzv{me˺鏅) jjkԁ¬7%:ezjnp5,wD _HQX>.n\T b1mI" ;酯r# ̢:æ|܉>z6.>!f1z eG<8M.Ukm\Kf +]8#c78S: VnEu,Ge0lnbz$Ћ@wa+j[ۚ;ޔ{ʟ32t~=>~?7zhytYᓂӇWhYw85,_@nM+x/0N<;~2.Y41ծX[hhM\ۭmju H]O]/=o=_guOƟc=ڟkmNQ6b[lWaMx=ܯD۟ĭo[ܥZ^bѨS; H?PN͎y D" e 2psϔ;ae1LI20P⿿ `)jɿ]ic{upcnG2/e%9\DH"siR,1d0X(,9L=,pMrɉ~y_batr|s-=䚽7\,Huu qocjbI t* f ٛm߳'%m(2ԛpK2deAB>uu'VIWg!!gŠ`iavMkg/1oPQH̨i@m 2Ʌ; |HVu;am4eó'GOj)\)k7:'KTOOtL,Q_4XRi.>EC{Ѩcы\T6\K_M _,;7sMN]uTRb.tnݮmu"i,wS6>܎4_i_G^g}w/Ay~m訙 @k]ѤWdzeR5ZES#nC8_;fkGu#[I3Kn+sjϢZ-xٲ`r]xV!khi\}tTEl"gުr`6"&ϭ]"2Io)וe?m݅`$ R™-;!S \eۡ|\拟Vw:uz&h4s.'FV %/*'w&%j$Yk2-*}x^h3l4?]U4t݈TRbB,HCOK0Îtpgɷnƌ.v6V:rN]O^-tX;j9$ii :oXDڮ;?[M X2uA1z_3|Ol~w 0R&[]4.s7Vs_܇% ۼc4?2'B iYk9$)졯einOU ϕ./Jg+Cu#2C!. ކq U5d36w)6ƿv\_|-}/^$fXϑ^Þ[R\&O/x,Tɸ-i:cӊ`j~HCsDL5{VbTabg\3aJ@uq|8Sil# 6 fNčHM_/H- DefRNZ.;bz^<X8]yce?8,\VB5"n=-A#ɟ5W1Wv6:3Ux;~{?5: Pf3lײJ p. HҮ|aou}`sp{vW8)F>8@=_Hz}dɕtk/weH}>5ۯsf&ae%RyCֽImgu5&:Q*cI6m򅩒51'ikr=}tM=,#0rމe%lE*AZ5,8Spײ^g؋= }r㍎vWonY2ҁHɎyA; @wK>sK x|ܟYa΁6fT_)`NLS=QH+$F=$n^Ş&֝_p;(8 }N4I$S,rG(C̱#A*%$xǩ3as>?Z)8eH' )JE7`IDͰsBL ʮ=~Q)D! uXBDIEnuN2yu6~v(/a4eba&RFŖa̧)XTZA.z[a2D:<@'խl"_m%mt? 0WD&;G6wC:7 2׸IX1aɻϢB } %OE +XJ d =?'4ܝ7/ 6\亲z? :P<6,y-u>i'c#y:E8su@kHْǑMR#iM>_,<5_ŗײorzs㒋JiSؗaZA~ߥz0[ہmq̨fZo^yhd?klxp]},>Ƚ<{yb|t*u}{Z G ʉH$B w*(0*j7sВ2YɱO 9+قpo.<+_b} }o7Qe=.P! `r _@$+:5 K* k*e|կQ(rH?HT䣖snذ#zG(j6&b&[c˻xC+t'8w7Y0k`9Q (2H>_{;p PBkgL_>=9F]"^_ߨ~uk& xDAv5Gf1-[A˭h3wh 7O0ϷXw{LR$Vk$_076ayqe/L+YӕC(\|/uc~ptzAk2\8.5lG  2LCAܶ\M^l\M߾GP7!Y?Ϗ7 Pjr X;"j=gKVG*#Jn^](j9ѦCGkxo[/)ǜH`ث(;p20#R08?/Ry:̕DF@$86q%X d@Z@2$7ῡO_Tʆ<J&VHORլğ!unDz/Nc}MsuMmvq<}; fŃ#;KC铌WO[C+s SoV{_)~v7ړT( Hcd3jk"M# F~K2w`LfYeS0\ HJ`# *4ߡ ej[riܽucm0"ɵf*L#/]*w7 $pGG.P pQґ(H>$J!% OUEl+ClsYntI jA? oy/{J.)GUZ$DO3{oﴋi!# u]3H~;[a-&_N¹Хұx[(\vS`k GQ!1/$`rw_ _6ge\G ͂J@P}w/Ay%$rg7(nbnemh-U2,61r36vd6yt%lX(-Ɲ7.mW]Bm]qwsdvTMRŹzSvnDZ[ߖz^O/< :Թ@D HAħۥ)1 1,WOS(Q=сZ@O> nLTs72uҦ 0vɟ>N^7W W GU U3{!-TI G͡F""ЦlM#`k4KYN0 ٪vlr?2CZu~swOo3wo4H=Uޱ1Z)Yg^7tgv3Wz|sQ_N{ZCMO`eJ|xSd^鑿u܍j>(yt䬳-\,\"oRbb2 Ga>Ulܕ\Brƶ:某.Zx۝>!e ƧSއ<=(:{thq((kOMCmiTL#k3GnYH Y~unpTjɐx\pK<\!\{qmj}dJ(W5,-RU2q~Sѱ@ܝ絕ɹInh^4_ovv-q*g2HUR| m&Uˏx ?i (]4q/pu*.(iMSY3ttqqèKŅH,UW%B- sġb,#a%P  nԊ^w߽<$9ԭA(J8λ y'Q7$V`6x-t+(F* ̜&~g|l^y71t[M'G?WU _~Xv~C.iU\ D^:v35du>=f=#\0V&T]'+4M;,ħia=jClCx`vuzoJi4K?[_7wohobOH9-SU}V_&.> b_H/ccH~ԋ/nI WۧƧ*7*RnRE7 g#?7jLƃ4;Jw2DJ[8ۇƸ4\zu^y=c[azj2ho&qx&qc햲5ks3{E`Nl\`/C(ݠ8,?]^rN۵zmwfvhZ6([ŴK(eT)ls0اX"cs[HRzVH4n]P/31N0_SeJA8I"iD"Q4F/~zuBuT;2 f<]$>G٦?@7W{"6J2r>wA" ͣv&eRM$B -ʼGR6mg[Zؖˈ,/n|{+}Ks?.qW!\4a2lXwكqrr^w0 lh1O3fU1ݷQ?C;tLNL|8^E^jH.Ύ?komc5 UlJ)3 `Ko)3uTAz!bu4黗AE&As.G6qk92MBq.t6#$syQCߍÉrמ9cJ\SW+ƿw -&Zy^۟(/jg67w̭}U&*-+Ɗ jk~@](H)B Zݝ!/?'0IousV_m!ќk Ѥ_dO83_)y6cǹI!v&jfĮoZ.َqier}4c$#opQh]0\KВ8Gq:Բ95R:sYzzyH0$^ spopu34A[|:PrSt<6|. b}]wu'Fy.yIާ9"{HmWشؒءG8Y OFn:^# q5D},`.R:S;< 1 .{ =&SJH7N[z5@5BS^| ;Clo,8|P?W[[|H8_9q`Pru}mMhq*1'9Y`]o/)z"?(^09|欫N4eQ7 7 kVeY|˾&ISܔ~ 4 H'IԩmEq ʖǞ<ś8kKs_i=_ R&8yFDM(䤇ԛ 2-/?սK uKG/v6vf>9I}|~F}'&NwW{^Fl\0D~i9GTWStIoHd1t͊q~$k{i;:`0ߒiy.tkp~i2b%|S,&Lj!^@!J ]d_b+> z>9kv9-_5oWl6<2w$wgoD?B /J.09?Oy TV)",!nHnP6ޮsGtاy_b e>'*H&i _0 ]/ɟ$^^] ݎN=' E&1S3xrkR7F!ڭ׿rBYD븻;[vwzO*/6a_~vWS׾!yル.L08t4XTsh wqUrԲ72ӷ2Ø9aB0f. c΀ Gf0w"~uoQ}Zmoah)fiW Ԕ}wNn_[Bo+ه.Ǥj(2; ᨵ L5Sqkc##M`ҭ<cmmyxU&&BE,nTi'}:J|Ji&)v/v3<<(%D.iNgoPLpYvJQjcIPpWc][*VZ7[ZHR-$9Y4"mLAP+BjF);{ u&FE#p]8QmLmEmQ 펿|يSe4|Nlt¤GRZ\Ӭu1>qD);CRئ-10?Łu zkͅEYzzG]E(geT,MNo #%`mOAOS_˼ɳ}_sk.8{4Ot;uܤ3jG|sEz(Fgc^k=>v \F 'ά+ 15$j\:F͌`/"1xD;}~ĜwNll8U]S޺])2?u]~#eFBCV^+r)i+24:uӘ|`5EjS1>.W#Kan 9_*0 릾3UO[z&Nguda0dt(|w½SN1Iޯַmu{{@ĺUҸBMh#f)~qM 3"gP-1hޠ! qFJޤ|:xasljI?B[?}sf}rhbdJV:#0hTJxLs#:lשB }e[ Y#w _"R.JdWu-V|>}{wdž9҃G8zb{OpIgL0'4h8l^/jU l2`VK%,{PImfH}eW܂r$3jU-ёC]C^?u{[9iI !1dіF;$qG_N#D4}9l @>((lcrw_%Z+X "-odGUp&HQ~ܽ)h\*69!GAm C)-ۗ~6_:6pߜ@Rewbl?rT|dP3WS%SgCsg!oi-a[$=}c@\:hէ{q%8m|"2ȋD[̴"fgc|, ņ)|Ҿ [i:_vAT8\_1VLvU|4~V&J۩:¡uA]*Pj{dvi}g"q#hBoCSxC!ROpd?v>~ s:ccqiYEUͅI܉b@NYsp3]C &LM}Ske5)11FO//N|\S/uʹṓ]wu'Jy@{H?cj݌)"ޕbT=$!nyr!"&>?8/6.1Z}n#g*4HTŽ0֓$m \yWELe*=ؿJ8z'a>{T)>B= ZޅSÇv.0y:N&sۋ,#uUPaW@^t;7{S k̛{q8G/7|穂¼R/$+83gpߌft \61tUQO|Ni X0XJaml;"fk3yYPo_g%ھOH;l;I-4j8v?U9U>: .sΗ,[{rkc7sΤh䪆uLF/n\A#I[P,&^O^Dl>9tqq.&wp T s%n2dP xU0t@vGMOt%}QvXfeb 1"Y۝Rqm ~4_5ӝОҞHݭ~]wQbO y/$Gǔ2*nb}8o4mJ* o"ꍱ7K$&t=9y}B53OdH\>WAV>=gZ9jxGۿL&a[>J69;3I;n8c%!ز;BǴ`I1y`CX#Շ5gHS}Y`!@`aVUpT3IG#ģkx, ݢk򑗪9}| ?,^d 1VdzKD`7)ԵTKsBt\ V]LC:  wJuq,vY)yq ځ&CVu~9),M8X<Hc[6xf V_e?9~Aէ>Muŵ\<SVdXH_u  䡰Ir R{LfL}݂;% XF#I r;Eݮ<, #UBK {Ezy*jJ[ii⻙c CJպS߳=,(sץ\-D$hDc!d:à0+ !G|ٷ}K+% OUV$l%v*'L[H7䒩 ШQ?µb!1jឯCS_7.Hnv(QԭB$Ѕq~ύv׈GegS ֽd4{i0 YoՉ8jGe_tcC=?.z}Ȏ6I +X?Q6񘴎Ss c5uIdŘ t17Ϻx_S9wb A*%^˥^Ke]-9c `7mk/~5^iI7h{4 I?j0.l` X~ L[Lʑp_0޲sU S$bC)>ra*$a-YK\'>?٥'?.(\ß{,=SuD+oC.gKg'B=F;Um4Drԗc]jTҹ2h{K 6‰>F7½Ƽbx>L_M>kda&M,@1ejռyqNJlp>}'Sc|$Z PAmF}xXԘVp膮ՁP(u:P5q{nu.p/x/)8/ٟ񧳜kE sWH\r\d_DH}dgNL@3Ս㕣z ģS  a'{>#f[Vs4"6=7c\kbӫGXR4`#ZAl: CDe_?q{@!Xo-0$aZ!˘?8xTyQ< g5Z2B+럫<9yyNU x"@&?ųE!>ž ҭZ7l_ uʾ^mrEn> NTWW RRR؏?yU=lMGc$Wsד}vDv!w$!ng)BJ9u5e? ҩqRuM ʏ5 ,,Ro?@̿Ky=аlٹ KlBY\CCc3Lz t xr1֗C6 ia˪|簝'Xg㛔jΓ 6Jp(SeǐŽRۚ&%_&Ѿ;sR?lV-⭞=CMqOą幇Y*qϝvաsSN+y[B[ɭqz: QeXuxmϞ=k&K5Jם TY 60z(D5PܴR$ص[ Z _N)-8Ay0@ P/ nh ٴ`p*~0_2{(nKqFx^z}ڮϭ\`;,krgrh_#NjV5L0^r7oM+6E5T&U쵓h~0 MpϲE1#$lAۇG pe*`̭b@Ke0,'ɐ߯:ϛYOjh`#[Wno+>q5?4տ 4A#ߖO;sM|tBTbdO2j(Zd,Db%uE|^飻h}7HkOcg?eCl7~EwW#N < axHFJ+ux+C3]D8uWǰTE3#}/v?v_~oDA_r>1#͒h怦ڛO g~4T ]扟f&+),BoqKF9dY8عʱho ,DN^ d%Iâc *{'ϻNk򴵵%&&zX!vknY~FZl$oh o&  ( S qqɾjBy՜5uul de79N0t t\ :~Rո8nKWӱ@X,^X%}i;Y7#?T&>U*>54ni.)U82VR>RvE":)SnR!Y0'TvƝ)t"ia6+<]{fNP%հ>Կ,Bfmsc[?,K'}oXS~tuoxAaHO)MC k@\s*isgG/cF/W1S(E%9A32֤ Ȯc&x=PQL*9ZPMk5hRU,p%^[C T3˜;?=E ? (lVȞ! cγ*%R!Kc R0 5X Ywӌ5c/['NWK1wİ+$=s߹}`}$[_ 1< 0񿥾!Dv;Yr1C'UjI!6v.6^f >1|e5ϲwx|N{vo\253E3"˕3mjB s-9:j25Ca:#xXO@ %QBdG%}ڿ=h(<b߶Qngvκ;K?:zIW. 旚eƤiW&Fx-;7YP0$N\SZ!댪mgS#Smg@`E,_e9Ou?gڌݜ|6٭`DSTYf΁ze<-=LqLǰa HbxdQ]?|bgtko8`hߦg]zꁳL(صG %PyFKT'FxfEeI&+ALֽ mXloGdHqxUN#ZrBil#}iӖl g_dDcA%/VBS#m@@P?A[Π|OFu`Eu@(A^;suәmNɀQ{OGjvٓ.ecϕ3%J4u2lf\b/:͸շmvWO+1J ,6υٴ\%r,~iude3.0QB92ƟJ-3:)T7xbbpa `;X ݲ,ųVJ:;-]ξM+lz9²)q>:h+UAzǍqAfr.i$cDS!-xⴏzuApO501^T$S,kV"H2ZEq-mz.њgQmP  M56 +. ~>K7h ZS qcVo9,T'R,wG`^xX8KƷZ%Gm}mkmOmp]<_r&Kf'E&^r-]!FIMU^5?jV8!\+caj!6*6 L4(쒎R MoMnSn7 G^},;3Ԧ~ĝ<;y/3!!/66vybbbϸ |׼U5}(,P4M*f%#ow x_ʇ&HVG+=PtLaT Qpxxs#phj(4wZ* } }- "J*H>)sP(#7@d{4_pesZe btTOӻ/x2s;@ ?Y Iy114Q7/ҷ# <{,h5d;^`iƃ<'e[=Kp/Unrb^{KDF=.oGgCK9+*@׳.};}犲% %펲nm&A(X T9'h Z_]I*F*5 kl96ft.`Ibs6~!MΙ/,Tݼ@|?%Nqi'ICr6dUr_[зGQd9@䋼0 \}=rbkd?Bf@T0 jxy}zA0O,fKB~Yc{dƒ[muac:_b@8kWg.q I<֘qRtoGw.pBF `  B`_)ƴ z >/R?YD#d 2N!EY툛pG>MNXgXn7Z/Se\f U urqw,i|vsVVn:ǡK߆qG YSt$.4,N)3?کgo v|oA\Ҍ\}2&+9(Rt{ڷmK8Uy?GV`(mKsp"4fHδ|kuc7#}3Cu 6̒Us\ǁ ŧeESd-9rXA CG T X.~ɓݜacKۉz6FIE[BI EF(#%̵.2~\ۇyK*J%/d~ψ#k]ͅH]3p:\8ٽl"JTD,O`}`X =Koߥ-&NSm;o7EM F\U+ S$b r=l3;UwqeHΫ-ڏ)f7eI5u5XW-xΡШ!pymAs%*0F:oXpڢmpZg gKL--|}ej@xKj*}qll,!!#&D^+~D4l&azjsXdi_ B2aX..JgI)dԓ9 ,?Y%gOKK Ln]XKXU1 ɡone׊L(oA/} [R, Lz>dM>m<;x:rj,8qk0Eޟ.6ƊfX`tQ&ٛ_Zѿ:-klbczƶGөQ 1wjVF:'U:i4BtTM*98BJGf*q{ajv< aaN"0q߬ э)/.MeWa@ƨD†|ԵZhLlL4'_])>!+akN3FisE&- L7#L]BLM4#Z)81-}RGizWn֩2+o\@74PhD5W-ڻVnZ'R{iu5jt&ۢH9Odi|p]Mݜ5%yϣ;_H.HGLLv}X|;H=n%Lqb|Ç~҅?#4Vs+j?a;Ɖ^6QSf*&+4hO:aOh].Mֻv^U+n)$KVMbD#9]]L/{|;cYkAz]RͭOKQHKRȯn]}8cىΐ٪Tk9/3k37Uub V(V*ϒv|yR(uW7g} 8eUV?SJ+B*:G=,,$5%$41@[4R}?Wb+ m1u$ix^{c[HIBzLv `{"p$;Wh4ϳ2NqF@*D><~Ъ8rhx~iesft<)ϧkW&` -r OZP,XP O~zrO넥?{x2kdٴK8?M-e0V0Mo3dܰ'(|YM'gX Nwuם:7غg `C{w~" --- ŋwkqwwwwwwwn]do?{ |yOfpw69͞FGxyfփg+pz}#Ec33/xѫ|3$J>QCځ=M$K@*W6K&4W^A,5\ -܁GOgtz_ vq{z+.q*Hڥ_6>E1o~#!EY, [y2Vk>+|e޽l{:JqISlB1e#l~wC+wI-S{A>Pd8}%Gpđݭ'ʸHdttw*TC#:qkt'އ ݊mp#_cw|nu1XͤzsHw+݊W^˽ܺ3 zKp2&r~UƥLx'^1!l8SM7WP@'O WVM+fGѡ:9V]޹2sv7'>+x٠gw }-c3ҳI7OY<,ӥ[SO.&=~.s3TEjo{ۿ̅K9&$Z '!}FsČy+6!lsrrLX<"pƸA`.cZG'cܡ>7'G؍*N#Rd p N*.1o:c.2"V ml \3cq[=(4V΃o9XL5i4|7{Yx Pi#%-%#C\#, O TH4kȋۛtb@i{D"Ӎ5;8Ւ$BF98lVQK0#Q*;6M[: jSϝD7L`Q~80Lv"lj[:1m iU4cyF]bHI}70 +^¥2)}j7M_k7OW{K|ws6#3cԬR4ް-~Gl_mUҤ p$4x(RQ<\,c+]&1^F/H/թ2V'Tvk`&$]c0^ C DV{n׀ Dޡbb;<y*LR}Q/$ !L2Vр4 5ϟbx;CX?8<U$pg;m&)U`mun1aVaah!L|psDInPi : @hܡEݠw\."^.}m**.YucrJĐAϻ1oqښ_Oy4ަζǹgnDHj.5cU7Pl(b+R7 X)da|JOfuJilqHA oT8T%,396פ,L"6QıY㸃g*ݙYoR&TcleD`Bg I[ā7_w6 r|asAbP?S,0:?025G^w{W9GŒ땃םbhc3ч?Bd| m|-r͂7 5K`6sIhoal) g6v65>V!F]Kr".X=(^4"["> Q.eAWZ%̦n [3 ;r Z0L듯KWptRIak[c`9mu[+{9f]^! mki݋2XûE~mLw$[dZ{{Yrt t. r텹C4ϣ^lφDJdX+&8f1u=g3Ykfoi&\A[0SsA4jcOc[jRFm[[SCw^-2-G&-R*{We˺;(Tgt~%Q12a{. +{2݆c&lf2巿NXUvIMV/nd;XQMbl E͙Vl 6 903R7Qu35tў L8 @g6rTL duŔi&YG~<=hmZ*:$ҝ,c ]d}J۬-9Z6RɅX灟X/y}PZ ]-shȎݲ΢faeU{khWw_ NAmgD[oGhgGIC~^, D!!Hlٓ#bfĮ;! +*}jZo;1z XH=;eK &flg!6!g)X_NVlrfWb|W37P=*or *Xc?.hS{QX{\ͤgD^ih.OOmS0Fi6je_) ȼVHkqFz H6_g i=C`=k#˓| Uh/D4Y~Ow;bXW)7_,?h&-[,u  Pȕ+}c&>ȴ %Ee@j/ݠg]Hn nd%|Lo4nP.&iUNcϷ_<pj #3y u6Cz EB"YC䫳)fOlP/3 \jFL4򮤽lMJc`V}nPo&#EQg>( 6ީwe}K̓=~4dvy{d/0ɱ ޙ*ΥkBH!4P@H1NM7‰f Ntn~oc;Uq;B6H ',t>ۣ</sd}yU5y`gSl$Ezj}xsk[Y)] `P( Ǥ2պ`)Rv<O`ssB%6]^ A_Glě|T8cV+L 1-E  ^Dk9;jmE 1R7lb\a\ሞ#q$1|AYڤWsbzJs_{±5I~Q+NkwW䅦WdP~;s˶xC|z&ٓ7ה#˔}UoDz)s$E'gPx +Ɋ f7!B/oM@?m0\ L`A54}$o5J8@˼Ů9'7s4CFHS w0_\cE#a{OW #1n!j(tX ~d**vqP.4H4KBGhݗY8lM,srm9_+QCƸ Tx&iKV-4cXo?U^ďr7/Z"JEw'1&jESGL3w¸L9t76!gfV%aie,e,yޕ3/7^WK\6K4_'XQI)-c>h]˷Y|-f^475TE D,}q9ґosOM 2V tAr>}޾tbq-(<c8\dXxDԣPw riZ^n(}2f+Ig[hk̈LT LjL{ͦY'g*tzl u{4^UI@Ԅvߦ8 +N TcAp<{ȆPY 'J~IʥBᯙXӐ)4$^" tA :yt+d7Dёܓ}emMƯLΛ6 0׌p ןu}Y1$)؝Hd %FȀ;c՜N5OV1m5U/$RY(f($'t>F 7l'Q䋨HgmW 2VzG:ZQjzX-kF.T{2MWKGnaI%*,]L vZF,l*BB DObBA]K{@dAx)xǞke1gV(Ͻn~:ydv|`]b~wϞ6O}KV;q9'G|{t3N.b% xG* xpNJ-hwHVMM~hy9G P@ <{yuexZi 90M&]y|ӻ!URhedig쫮WMm])Cȼ_X&E7Yx k4Â[c[ss_uJIѷ%-U Vy~0&WZߨm@UpYhQD^T!+<[~u֓z _9Ύh4?hXwzy" q˶6vԏ򄂜e _>(Z1im UpX Y@ EAF;\{WI$ML]Ά펧oNa+HLSδhwsp:w <6ʞnd)y7R1S}V8,G%#MGn>[fzjj6qw1fTJW^.Q"ƿ^05 (jl ͜]r5U Jb+#kM|,Pђ#u_)'_-7nu-3tKzG+D)*O(Xy1li(Rq$`2l.^&a5~e:X`edakkstvtרήt;ץVe԰r?sOTƼ_){})L8a6/(vMm~iuzi1GOZ2J-W-)_@ P P(y}QO$ 'B[G`4 `]KvT+>SCO/IMV)n1Nzz?Gb4$ށѧa{nw^@WߏN~K_l%ƙb_Oi}JXnSy=t¹'G me7|rL_J(ۧH 6Zv# qLv˚Z3$4_dj"$>k8F?gwmYnHRfsLNXAH?dVm\xgqS%ڹfLVr楪&y[G3&"=g,|jKًa m|WE[a0eWKdU)0Sխ8^U**AګapeI&q6aޓC܈ H 'y&5*)]A{)BP@}kb4 li|W1'Yf9뛸h`<-X͘m ҞR]|amcGqTWnW+ b-g}f-'ZRy 1¸;jDV P|&5mw ww?/ (TVJ8:x}_1ĹQ{lVj0F$^')/ݵ0D]$LQcuPhLa_b-L<]?պ]{*:t0'??Q:yŪ3w ˔qDWEp%52ewմpW5Ѧ ,cp^c˟Y Rwcԝ?h?8:,\`qR9yC1q8a`9^w߽< i(,yk4=ìۍ`+fȃI(}y~ƝgB?=:u=/>$HŷX~*joq-?P1uyۜyavz~ҌnUyOXnxٛ_>vڥ$[TJS)uZ[ǴSJ Ӧc8Ma3 lACJ5F[%RqB9G+=Es;ADSqCK$F n1!l"AIdԥFݷ7Y2C-kbeThhhZ˜9]ua)KF7?ogHo2-jP4K eno1`nmmt;ZgR(F=~&jC`^RŶ] qjs5%n)8Qtg);0 &C27hH$![srZiWK@çf>pz}w/IyrhBRoqߴOwSdt)0K̑՘nMNpԲQqL|0O;N!V.Z,](o+d%=Iy;N"Fc)V+N$^=)I21;1{b)E<Էz[s"4 ,.KQm,g.O<*qXyrdClJr4&E[~hSr\*{L Yϕ!!wH5FC#\ v̎^@\}n\[?4MkɆHRqڲB ꓣṊD dQr/,fS;DRp4q)9k֭/kYg&,m2},#ktS #$#IJsUtg}',<\lz"4SUJS"5l~w1{. ;hyS "m|gNBnNMlW]U'EYZ*#Fm(z$[o"RQ`!7XVc'XxJ7H4G8EܳB)޼Ϥ< ?B'#F+%j52wr.6/W1}iۤ+$Kf^B"%EE>hg_ X׈*cwƋ w< k5&b<%wspxz-k{ MK7'5`Bbu^~/m+&]SLӭdYY+4APP'X`iaa uw=7sٱIth;xr$qoEe2- fa/=a]-F^w߽<)|ԿO9;αU7*`T%^m1A+:ZǫU캩*־f]uMbg!ޣ6M*yRJ "xB3^6mwm_xr/}d,-SoW܂>|[%fyk]KEG?$az= 'L[Q@\$m;İ48g2'hйmE0z5H"j[cάDb+EJ %Ļ DE"ʄl+x,[lz> ʭ*P[7*ˉ[% -oh3* ያ~Рmm](m-kV`: )evt,r[9owg1N*1HLvJJ,.ԷkROYi56`\ *-ە̼κ?,^/m/1JkIAܢcgl.\UU)ܕ<G@tF3v`V"uڐƙS'$j~ٽvxu%mO < #&a#gF!Uɶmú% ½_ 64sWU U VW\9 _qqk*eKk1u8/ GH'6L"by%ZdɍL}c`r(OE5'۴~+C-cCӜ!v8 (9 @dJ+[P (Z JeA+u0 溆Zzg P"q*}miЋ!mI.Թč9""9_3o) pUa}w+>wjrub:X!  DB7 MN Iߟٝ&\{\~  QFAQۺ~~`I]$?|.Q÷TIz}h}0,[_ũ$Μ63X|M!B8P.% 2IŤ_vl/{Vm&(ZxQ;OI#d( NRgț 4_xٸi|Ijh5N@R&cN48 !Zbۙr1^MS0(axtꔵ-7lpڛ#:-W51s86 QoIsz~jt,6T.+@Y@P3A)Bh@,RhoiS?^VeBKoN)p貢eՐ1~5^4ݻA }TvJ2=2vMCp](Kyxmt --ޥ-/nο@,?~qXr#vk_SrF>kQ ڄɠ|(ԄdZyv|`M-wROig=K6B.[bh bey]C 7 -w{ҍuY.ߋ>LʾrmR76.Da5m֟jigH ",@@xA4z3MaξZ // $)A5 2 7+ Qdsv%~J)%^<1L=Jtӆqًy0xmYS5+%Է:Y6,Y]xޘO#`&۞M"b3Yt+SKWt.;Mu͕gIߪ442+/ &⢩`)VwNhmf+keI1w0w1'~q_UFT̗ wzw>v58JvoS^UMX*wWw>p?i3_\I>-{P _쇀)sd g"#.Q4vq{YC$ayٰ~ 2NV-6Ͱd5%ri"% UJiVP{5W{DΉn|5g*D hE& e KNȥ(Gh*W $@n7;4,-CRM%`'aT˰W{0 Q9fʳŀ7t?AeFuVm-vjM^k/Y:b~_ "|w,V{:%CM-d S,mc ?|q6SE&'gG>NwӉw41h@c&?΍YZ Z8ا>ѭ>)Q1jؗ'NrLaE>Vj= ,k-;F![F•[i7`T<bb¿ih@ K+kʣ7wLHtO}0Xfhy:Һ$\1£ި`_R >Oys@0}J}\]#PV(R*̛T'/ǽƩ[jrzbH7Z0[Ng91  ?A4JKa=B]%QbKc,8 (B3{k%u,pSqȖQ|㯐3v P4qu4@E텘tz8U8Ehu!Y|=G_$dy `[{"5`GoUj,&"8o%K͋EG{iz.I{[kDyY Ī>hu]w]ccUsUӤzQRbdͅh6mqh2D ^z)Kp4,>U'k;tJ0Lzc+4bF>(6p)̷ ͗*Υͅ8:'(T6IEV85zhw$$-%ǩD!]n/XVNIf0.2/Ю!'$t11 *%;'$k5k,i-–f.=Zx1G^X%Xbd:`4dcw|mW"IKt$щ7Rz$ qQ[NLV|fzZkq~bgEK@Bf{4˾+@עNuc s%) e%sMiž[QbE?W.cϞ)NQN_qley|#3P M@An Ю;/0W_~iIh\BDFZx9;[yiGdmBm|B]b-TRi'FWYc` 78[rDP1 uAC?jS!>|FSBcx1N7 }aM[~ż_(R=,E+6A?'ʤ:IJs&aF|Y{{:]g~d|GjL{p ` ]h@4kq8,,G~*eSLuש .:ķV05(rp Niv)WN^*i<b2T%LoE5oNk_EQǶy 'd95!- ],V0ѠbxoA!O`?#\aǁ5nFҗPoMbz{ {yw}_Ѐ†-үu Heq4|t%Nts yp'3s(ܠk\a\`=2;yP)6X}:l 2ېmw W??.Y %(p㜫Z>|u4G}1D)&^XT ,￞9:40 ].`lО~L}HhG[m#^ӥ*55g%_Hds+][SWmحNh'G3#W87 YEHoWӘW?J1W7jqHPaE!.nmkXo=Tk;RpK~8&( JH7Jtwwwwstwwytwqp?33Ϲ}vi 1YAzcoN<+YzH2 9t"2"c:]z$Y1t!?YgddHLfG<íV?6<XbgG7ˁ)n8pM0"8a;xHqͭ-.C9>kut2-ہfYGS^U!yN܎A?_ N)TɹO0V'@1N{x"Hضp̓piYE[mz|>V/r4yfq?md>fj|A=? G_"X6ß뽅(Czp呗zaU6TWwDžgY(4ƼE ?y. ag`Ջߣ4,6'..([s`뫄Ms)^Bg2½^d6c˂4H'G76vV89!/nbb_>ep(װ,{C7%-;,} dbkCK;r'Η;׵==/ gOU0/W,?^}[w|щb;y3k[c 2Pʃ0N& 8@)H@y?V|n9#N{T[/.%Hmch|_uԯ>s-'?!wB ۲~Ugȯ&$G R +鎴RߋR|j o d^@  1gדOnݞ<)&{%ϫJEy~@Sj\QA&Oi=%&p EP]$Gɔ `>]|ubuE&UcLA/_!Rr@\D={|^VR9O}QRYHC9^©JAFHH]O,>Z.tt(Oi\`mY.rւ@x:({iPP; Xv.Ѕb9ZݡtRu10ۦ/ 3Q/ eo{2WXg/9gW0D'M.+/l0-"=3[[k-3V$[}/jw4aDSkannt2Q=oGxVCmuwGrmipT|Z>^KLsc~T䫚QF15?rj%c"g?˫w7rnY!( ns]x:X'o5^eѼĵ5C>LӴÙu"s8 $sSV= >[` 7,u|IęWfcߴ~A, WTx_t)ܽxDb$P6 NVE3% 9-Wk/=HRZ`9@ɶ\;(5 xsps pa.Un?"gv{qO`T6 Z_z g(_g9:3S IJ![ѡnVb|\3FQp ?n!B0^X@צSKy^5\e ( *d 1"h9^_\Vn8;r/ܣmse!eAW}tIAV9G{}}-B"T/X{x3$KU<m2廊7!T 7*ʯ2{6saQZ5%+JD;% Vr g3.?06 [ FW ЯB&R^&hL*YjҖ>qegH72Y2;grJNiQtNB߹]W_<^38`!>"~ԫ[zgVk*#5_V_7% h?q;V`*eSgh֓Roen(oijZDjVX70kNc!ڈ;sBfM웱ZRX .'17 PS8!#9@"9'kBTȊ;go"p"p,`RASrj|HpWjK|h N`{ >4ik Ű.CٷyjDP?i`$- %8>jCHrQDC>y @d,yJm<*;nLt*(UJgv·zk 2 -Ye^X(m#%伊p.uFjCWхxX;YkGE+ĥTh(&ĪF/GiFiE)$gռ܉%< ]z<.n^ V ,j~yAR[ Z 5U!4>9p;&`ߴ;a5sF=)հu4f&ve JB'u%ϫJEy~|Q'J? v:|-|ms<@p&!$tUk1.;QmR-a__J?_ y\tk&g*`]OH2xWiY-yMᝨ(TSTԉ0RգI$k'鉗wB]Gybɠ6͏0YPG}8Nr,и=˰YrM0:x^B[]EЖ}3E:UF,'F^`u\p;Sĵ_ZHKs$mWalC&o.\2BVm:`~֣5-s ݆˿&[WϾ6wGoPo@`-?X& EyNZe5f0B>w~-[T1i,{?$@4'shCGMI1:jnɯMi=fg~=,ZR }2CݯM!j܃LOog6MUrw拎3Uz*d1jS;.ЦN2t300 ҕFNS{-޺sDA_;P>ulŚgf)*[,D!{cϼ{SM*4 ].x~_ `yc! װ\ɴĬ㨣*4[SˊWSxKmV{ڼt= ,BC7C$TΞv+Ditn>g.l`n뼫G<<#UW]u%<sG዗pޞ¯Y^Kv=cbmD ȃ%O R]f`g[Ycsb:SyTf:Nl iGO-Ym(!yN SszK.bk>ٓҝ#,9?-|RR` H3nYb' ֠8ˆizR#[,<`zo?B 8b|܇fCKlEhFiD!գ#aZ(C;p|֞>\u0N6({ˌ6* f~>gN0uW!&;#A_?ds͛&7N<)u rVb&ϵپ,]xa2㢣ڇP]lbmKdM8vN:ґI%(\R]zPYsėcw'k^vN~,G~ބ"426&>9L2Ȭb}wH=u]_ʐײq%wC%Uiq uӓ K ,ٽ́#]'C'_AiKf_LjV.siA^iR扎us~cѳMJS` L3TqM{.=?!^iHxW5SB!3z.*=Iߚ_VNo13Xk|*hNѷ&O"IVQw;%8U;qT7‡uȡ B},A%Ot@/ Е<+yH?&?P_{b;<š%Vد@5E:N)|:>_Wα46(Mne:Z194U,Kx[bJ񪡉ٹMU+=_ū @u"~CIJT4oV^+#S/*YW?BXi ĥ<2ӌZ.*`kBN/ * .Cv[ M G'~|=>-֬n48mEk$eJE' Z =+އ>-* B62[_'?փ")G%rܿn}LdX.(ff4,u?6},-vwmnGnLGtTWW Jg+$ED&z& 4U2 ul$xZEL4UNI܉sltS/D8Z7_x^0K{[4!uݱqmq uӴuvѳ ௭f1]%;w!t) x([ehCuU3{#Wg~Gz<Ԍ?)ҵώnۈj KMZ9<j-tpJ,dMG"R>gbM;\sK켫BM+C/&>2^ 17뎳L\]e<ő=lڒѣV7_31 ?{60Ύ[x 7֨ןK4Hʛjoja2$0^v~|nMRN[Vyc Gx_A+Ӷ9OVbqYzmæ 6~^.)6Z ^=Vv! %Zfy 'UF1ߐ ?=Im*Ne >2{lqrY6nN.IfAZ=*Dlc:M8e]Ja#ջ1ۏWh fȎ|az3Jlriض钔 ?<Yz`LuAҨ$0rJiYAF|Z5VKǑ!Y=ሰ@inK50,LUҍ3AX[ _rkeGtvU0FLBfѻk+H㛓wG=hXݾuLvyZlx*ZΣ,!LLOMݬ,;],"8MO%?%E"QS|xL [J&8ZwZ%!h\x;"*&0|zoehfq<bۂ`ʿEA'`3;~@S Q/G dzբ{e姍K}5SaZ9zގ[xRa(ollk(kh 5igݮ)?vg%çvBߚxf[֖Lġۉ1W /u%Q7U1-8\c41[;mr\备^G7UsHF`5%R>(> qkPOTH18 t> 2 _hpJq7|KZiϩ+!-G~sAoFʌ] E7Rghiei)C|8MErL5O3]P0jܝ~()h?u 씫bj!IMn> ׽e}>Q3W0&V8&zF8Gb@tc@(@7O Gk诨,J/fߕ +A"VH]v $R(>Oe(Ҁx3{tVk[-- Vצ YNE!FIꙵR5% !FSb녬ǝ§ŪgqV8C}k9W>?_|E5rzظ{=NX.(rv.̰G>K|4.X7yfi㥾#=^Tb[]+ Y^kgڕ ٚP&5vbqp!?+Y5,8⠒[Z_,jB+rX'ӢW]P$ۙ5@0]ʮ]/Z'(M#N/N;$N;*N'1,'Ⱦݳ&o{cuvWV]jے8.#|Z$q۷["c0X:#[&&"{Y %C[ ,{{c,{|qP~-1KOݕxxͩxx^.VNj%3/?*XYUs*WV;Qd|g2N>mTaI!r^htF^l Xpv`F4;$Ue@O( -64( 5nru \7L8SJGfIoHω T!EP߂|Y^{2`n͵}Z&ޮq%߁Ɓy=]n@7YXzIg{lX'̫V Ah'?t5 V(4dd;9'h&M)UN=lC}9sɪPLSvjnMPF<5KyZ\Wl5E)7qulQךsݺ0.Sf_Z#T7G2UK-^Y'Qej1_ Y*:9q_^_@kQMb"0Y̍}RY!qֶ%F .QKP) "o^ibWꪫ'r2b̂y?#MM=d8;ч=K_J[9smH}XZWNplI?,{c6B2V֘`LVo嶗`gyU 2;@w9d@pc1`++#Z\aH|6<D.x@2i!^)""ȿ>{!M허j 5hP㤓bJ۵y c賿MX5>ު¡QFT*׍DǏGj5#LBF cF5?Gjt VDϱui6D;8w4kfT+%d.fp=e/h zXyX{X{89&inE06#mXCpyHnhrXdQDxlN{S51[gבF\p'CfR\޼LɈD%;HRAL37tA6ى5su.o Sf{ hF2gCR'q䱴6qՌo-L vtWOdѯ>`p֢I赿.p\I>Llq.^͹'}+oPޔ&0Z~%/T mgէYلu# 3Wdsfnwq;7Ft|Z?89$i?8Uߏ_{@9M2rhtGhTu&bg,~GP4soatyAKSambj_ܙ3NNێc1B eo3o%NժB|d $tJdJ3Rt<|9]~κe5JC.v&XĊiwxbpa>a3Q˚He{ C݄ؑ_1r鳈n,Q,S.ktի UKN)`4!T^k2Sme猰30c(ETl*հuuh_e\BRU,:u[ P{$2WꪫE9%ҽ;RvA%H4Nȣw.&vgvH{5 hNpFhESe xnV*Mr.6͌ 3Yu|I 1 #YĻw OgK ` j `78MbNiɱYrK!]1]mVbZeُ^=:'_' %' ; Bu?ͳBqڅQX@|_qw:;%\8@5E-?{{Mh$J?&<:Zp)׺ gRܠۓ0.O0fCWpwL` }Y26.*6Vf?J5gG=Fr2̧բ`# ~Ǖ =2G\~Oh 8Ïc0&〰[TS*C}<2b]t&_pxXW|J{ώm A"Rb͘Cj {h{;dז֞I ܾ_TpZ`hr,RmVS8$6#G[-[g)e4;͡rg+ڳ;;;?=G' .0uT/ƔM`y'댳ƅHⲬn';$cB. x 2܀`߀?]axDže\>Y՜ݔ7x9_~k&7bE@msǵ/Qq*`O\3[!++aŧ3pZqŅ X~jvwhbv' |pF8Mqn?|K=',`NrJ5tÝ Zv_0sSt%|T0tvS=vEɋfŗ{F=m R7ĭݻry)cfiv?::hUЏ -S&*?aZ_P(OvHgDHڋ'u+2yKMǜ!TĚ8ap; t[.{.XMfar胀)XvUc˙ipX7?j]!'Nl> cŔ=$wJW]uՕpwmGIӘN24ɰ\R_ ֖M?jE+-5;Ӹk_d)Wvjdkdnߛˤyә^#)S3^?>R&P"D\Fk6մdWvr}FRL.bunŌ磺\?Π2sd~-`]` sUB>hоU WXyX`\VK{'$eDkn(\۳z֚ x BP8HeqH%#>!}%?nsꪴp8?(IqxxUPjJ#Or7<&?|W5r s +ɞəRN%_󪫮NO~窶&988p>ZVD37To9'OiZJQBH,4O1CJzER| 6$G}-:٩Oݟ ު Q-=yʟv |FEv}M.ibif~>3ptiF sCI3')BoxڢPocg:,8~yެOPazS8-n?>zrkb@:C$ IQO2IsxP4E,gcf[bdhem~sA$t.r=S&)8-/"=W.o4i;.*5;X.yg^GXHae dˍ{C[Lm ~m&ckN'w]UYdߐUzGvopd鼯COUA2#g!aq'r!uCrA#^PfjmHj|fD^ДE–J6=Rt(!oYV/V>L'ּcbÝS=ޑXnԻ~jTlɖ#+PݎGu7NJYZ!< VI~hjD5&#YY$];Y1O7])n=$[rH5u zb{|0U>Z:kiYQ`F\|I H%wQӄNVg׶ 3UcvbTRǤ j=R;GxSGOΙ0/B#s6w[Q""k\ӭiflp86 R?ϝ?n`q`%8AxO>(o;AWEwRVGOj]]-*ٺ'8mUfzzGϰM]CGPUT*_z:4G34C;4I7 c뇽ꅽ-)LIhfTTT"\sz[JW]uՕ {<p)v L))|A~@w{ [$o#AfoS ЬLЮ>XH!@Ef89dd 0n@c959n6 h2 C>vDJ_d:clqC>;'8e{ 1DtxBrvpa nݕEÕ;^Kϲ #j#Z>*Pb-Nqw)mqwwwwww A;!G bO.gL?JrLuLxL~Lw_v {ks_CYӋ';g=[ں;k wuKĩoCUC bCL&Bo#1JKՍ2 0 <7>Vn;켻P}C2MHEۨfK.1oܡ"_HXV,L ?z`DI@@ dE}2va|OH.(yaUa1ֿS8c@nE "BlGұҳЩ~Q`*{Yٲ+{A}>כgw6g V{JF"͂LCMB,L@x#hٌ+iO:]S̕s4 kh{#b^}>y~F2Z^`Dԙ'¿mH|}B 2Ϟ^bݢ A#<{Gy/z v9q.M!o^voS^ D:%3?u-);4t|fI㭶0Ě-Vhe;兴sv?:7+h!XEW-upֱ2 ?Iw@l~fu=],%`o$UQF=1)9XoǏoW}YZ!>?ؿ["f,;WJAZyg+;MZ)~:)]N]6BOEr삿nKW\FV^8Kט;ݴ{0ہF4jUpBެYyrD [?#vM%]J|?aU$^e:I5oX}?@7٩7}yl~t-hU]sݝ@>Fͫ0%ˤ0^̍I_'Cz>GOM];E)CQ0M|/ԩ;(NM̌|3dL:zBi`(F!WQ*3!% +]k(u+P-sET̄m:iPj@]O`=_\{$tkg!T'mQmdS\4)X&Rq*V Ux.+1bf륃DK@:OQȗj)fK`7j2(RlQ6bW;0q=w1 }<@ɴį(ps!ާ0rǷvgڝxKN34㧝`⻝XmS-$D6qR&kɋ`zV%5ݢ }Ban,ͺhɑtέbbltxϔ+Ͱ#;k/]+HEۀcȘIҬvDߍ,aecs~@Ezvkbcrm4y# +ARN=6ɱ.u[d?g#V_T%a% @`#ڎ^L,nJ={<$~al))1aQ^ ՗1<[&qqoN_p)Pvg}-wFR넇gKQrSuixqDa$T?A7D'u]3{V`@ѣM9 6rR/Lay?i c)`A UeYjjmj-j.+>F%wTN5n/zư&6M{x iEp/m}V3{J>le q." ukY$/J,czʄ(aIoaoV_3VuH& z%*N N02N,jY^xmG$udժv)KBE[vwYwi`ovŽ.VV,em;N%,WFt#$iWJT΂ [װ_y7r M始Z*ѧUⓃuOd5ޭβ=%mr%V޾]X QLZhiQan7S8)?Ze% 4b4K[oETnJz֯RjӜFVo %2AmVM1fK!z e["i|9͕tv pq  sqvh  vXspG8b,Ƞ!WVJcXNUt f jŇԬR.;wm05:T A. Чy(}d ƑTPvYx ]8mfz ʗCCT4s K?7oQޣ"LD+6;A<{}[+O#D\{_2&'ˌC+zNfaڟ<2ɑvYJ$Eاh6JLKu`3\a\Rz FNe]?T@y{hp¿}N8{N}dq{Ļl>֤5( k6^,bdu5eP]$6Eww`ODB1 ؐ_ՂdSmThءႵK^F-(eB) aqO%6/7V^OR^*x%|vggm9+pu-jOKE֦w\Lc_HÃGny%S֍2G*:z߰m̳mKc w#5ޚC+=&0{OA mZ49ypsfW8t\)'4t[7y=^fGdhi&VBY#QHOt+PcwH5/,};l*U餏$7[@W38?J, 3nMj\bi_4!7+R\2B?/Zk4o<#HWXm!*iStQ~sDm{yD9̵#rŖsa9Mg7ԋ7ͷ<ngοe[Uh e?zTLFc4=Ο[~#:Z& {~rN^b#f;L FB' 9>˜=u8֫?}zTC8F_;#~㴗jw6GMINSxkRю{=VzʯRMC P22:"ǖY^+hPi6X # `/$_޷=0p^ZmR1lJ J̮"n l,# 触''{8cR؆sI6dX& a\48n3ɻ ԛmg%IHxpgM4)ʟ[TKt3GDkĚ~u!qNVs,[.{{ks]g~e;|?(O_^N ~JlM/̠>Xf {wGZ:˸4Ҵ=l:l+6ю1KPJ)cb|!9i` W*l!6%6ް{ϸ?`ť\v*'?/(Wd=]+%닄 M~W,,E!ղ˅*+Y۹RWEb2n8adBǙڣkZ( :&Db_pIkVtQVAfA|pe F ~l6cٮQS,9>>>PD*vԱ_P ?ũo/Ae C:)C Xֶr_;+%ߕI?˸5;VZ5vϰu-r.6 Tn)&@M=pg#w+oko"mOzU9BcE7}}UO*] =!ocVSg=i ^T֯t .dpLJtXfa[+^<ì~t(oIi7t7' SC?'Z%e]bbely]Zyq&BFbpv^uw^@L!KaD\+y]|F=أ<婡37)1FGG?cD 20=92{;"SV4G4w_z, GU%Rq|+H1ȷP(Bw'*ٮ0S0Qw?0^]pJuXx*.lSS5T'$銚ivZzY˚@yUyqXHYDmC3di0a#.#Qd`KdѫW[/hw8p_<}Jƥ'HHC}oQ6b,Ld" 2`xzƗm#2]qpi)a13 =3uċɋOW7b鑢&9!<ݶ! ͯOC>nf*#|o]- awzבhhgkԕ^LGR@ eY>A SZe^[#3C]3=+={}4/ @[[ŏ'T `\Mnm 4 2`r+#x2ݷ]]R{4[Slɯto<1P+(;/ oJݠ?'+(VEFďf 7+ͦl`+{s=cE}0![cjϋ!/jwɺ7(6gc;T o;W^oF@1ĮkMG/}{t[uN 9a7I{e}{WYo2M__C;f6X5v~Vu|r SRl;P~ڀ_[-XS 0 npKDG/v[ kT??;zzNY`jw@=lq43+p[',G%I$A9%)#;j~)y:K=ͮ|*9θP͹R,)m9g;٢ʯw}nSLۭAdwኢZ8&BQijJ>Iyris*u#W?pSOqj%灢ްuf7*-\O~Z=U֊MdJHlyC}˝kJߨFiKSSe5%RzLN2e^ģ<{Gy/ʓER([ N)OysF,vK=+QZa6 =6\lwrmts+* /Zl%_8*7z'Ê AfByKhןgŽM#JLZ] &y CQKj{7 j"b?vsnLlg3)J0S$X!O~o͍ǧchז:BAMv~PQ^A2yb(%Ǵ_}bÍ,koS1r/j<Ui*6KtW񏁹:E'FK5{*Fi/fW^ͮ~3w4rWqb?!ޟy;ɑ18;g v= /7^6/ߗn9?`T(XfA9-Si`X+q:AOEBHӏ' 1"1Tw&z9s)8Z#KbH\3-VxgƑJrłxk+HΗXWW->^.g`֢*[Xr*ZfD#L+]BpΛշ+=!V]\ ʡFse8coWgˢ`didYVRXɲ`a% 2\>[`oS״gFud|lW*֗L2t3.2 @.K 0/ R-Tߩ]JrM-ڞ ɜUX F mwcV_Jz (X5rT  fIlpʵO2*IPN&Gžʴ뫡+ds%8Lv>Dk%e(KWJIqheG_bpQ)YXe-H8MzYMB2 ǂ}g25Z&ޖ6a> _NpfO>;yHo[-\3S6pؖqPΖNDX}S)oXʵ'R;Doiì+T4{Li?8m[/7W?\Os#`>cjmYeUܩ 䖫j !r[ZpuMi^Fj;<{Gy/-GIa!1+f ֧7Az=ИIǿ7#s~nW zup;tqw~ccJRK]4&B之er1nTzZ<`E2jqo m}#c=D!8 ghd0eU3bLP־o݂9>Azx=*SLg<~ nAȷN?ś,<"e 7EDƟ-׿[#H9kߕD2ݨ[!EjvWhv'w:EwsV<-C:i O@Zӿxq7䛊`جx}9>GV/*STUإڞm7ssbӓW ~PRP 8{ =$q5̉%Nٍʍ3 NpuWft$iO&@  nYdRmv4+Ծݻuk@ϴ!ۂlW̝lm0v 6W^oUUELG/b$_^aoۙmT;`4)S_-,pdǬԵi,;ݸ{^^X~S{c=(AyP@h xU(*NA(XO;H`ij؁2hhѩq]`wwROnb56O,r o~Wn3I P2Q(X L!Q( Tzzvvv~׊~Ѫ7'S"`^UoP6\|6eU8at+V<"xqq{rzvG٥9V~D0B09>[NU)C#Qv(HK Y9ȗ7NսΫEat7]`+[M77S r~K,["r`A(As3;)eT1 9YD'qQu>~GȱRvPB%vWWw6k F-K[wӔ(bw-,Z.iPLAfkd;C3C=}5zۂUXFq"#͗?Fӊ}E#9_E[zjO%svo(DYαzI^-uBWXwhwhw{hw#k $];-[QWF;KMd}3oa4''kGHx@h0,~Su=sT{{;;k,8 !)%Z^j˩[o@ъOu(H:HfU+~ɣ<{Gy/Co/c WFTwYe(|B 97#b$BʾZ01v|E^ɋmΖNT?f+~b}T;DpuzkU}9fUR)۳`U|ݰ.P3.Vm!) 4`olVWd7VR̼^iͽTvK⩕ {rnŽL}̥%Y{u 6^DIA+lF<>2L*:7dk4 *f1&= ;0(Z4irbXj7ݗ wCCm,]U\MyBu%b͒C?f Z["]3쉟-3!ޛzqbgR%~ӼW[{pO=\Uыa#Sl+UJY+t۹3Op 9aM=*oR1YB]9館[OS1Y sLףXME{iZKERX[B;fwI 8b\ cLasIYنIl S?ʭbe9玨nq n-mf5P( f ef.hYN[ק,|u}V&(ZO@&$ՌeI֕"TF5M]gt.H,wd/TљA= |Iفϥar9~GcEeC}2[-Zӗ[v{8eqtj{䎨|9h;x$\}(3In!?&*>PBU ] ' p:pͧ qnzx3;"Γ#=e!XnT؅qסr&rd -uP. /d>Q=أVz~%t6.QRvh̅n밥|V4C-4s))I#O5PD'Pa(o@X40Rl-!<>*ZVbA!~t{3t1ȻlyK'on]j  9N?J>NHXb*殪fh;Zjg԰9~0'E5A ȹlxպqBZ^S,W.n_k` ͋{?kʖt]GBEY0%9)1¥%UmuDYk1oPhDHTwkǢ%SWpiZ/ԻќiEΛU%؇d؂\PoK']4IcHGbejɑT:_;́/:G3]a)=v%QtwH{ wG|)T ]lc\O+֏RqXrZZ(Z衚T/ؠRࣝRb8pP ߕUȺ{JT86:2)^s.PwΝmۓ>QE؆!0^.36M )WH5v8ZL; ;0 ޴6HίR*l/+gV_ I@]%L@0Pd!^{:`ɾokoo0.밷_.}a)[q_tY({ytĹ٩{yeP{+X/S Q)nO)vekʵuF6M^wns˵H wWk.a]ܚ|YV k̭؍J1'<)K)oYζ[06]ҘPWAa`#M4ٗqprp๕׊ˈmyQ#{!l4O蕙煓홟I<*$Iiuܷ>>WQp LksCbݧ O$NAhg g8ZrBh_P>mqU vsӀfpvobSKʇ9nMH }/!tc_R].H`}c=(My ]2v [^Y[]k'v6 ]!>De|x+Zd|tdYзʶj`-rBebbs g dMkރ\)gpPʳ66rύ`c&z"Z4*^;{ \YV+϶mZk> i)':5^B#{!-PZXa[wAf̯l}SO4nL%t#Lg}77ҭ+ק^:dXqI=E`~D#߂XPTQ\Q2 oKp+')'.'OO8p"E0TnQH=KSaėKk˿us'TG($+[m[ȟE߮:i&-m?O]`ޠ&? ﰊpj'/GB?N3^9Xz>4??d۱ͧ8+t;*7Bv_Mz|rs~M` AkYoZDBg~k'<$!|~JO%J|c]].\`]b\\#VN LwrU\%kۘ+g:H tOM o %>w)o)v_XL}X.nYo5:Ͱ-wٵ'm} هr׏~ݏydiCƄ$ZӵoZז%EFXLMs@ƂߵuNͶ(q{`x{> UK孿mQtpzh I0y"e:'?\,|;P?|U4 NPWSKق 4 -! ]0bl_|*$mXSr6(qd!4r9j A׀;!g7馛n(ك]JXede7̃_1)L)Xz^UVdFě d;"$?Ov#Z#p6ƻ :vꚤGR-/BnQ˒Z7 וLa ϻF9渕BckԻl}'o3W\\y2x|*xxDS?+[ĹI )򍶑wbПۢPf3vqj z=7,2W}nTΆIm6Ax}_Lc@S}r rs6q+4q6sEp QBp/o=ʠ8M8\cc}f1yuuGȟX+-C2dc?_6fmBvXelX˓ʓʓʓU}ix~n\br< vXi?fXp,{>Q.ie"oTiiPgtȩA [ \Q aD 5q!v |sJY\í/(ꗟe@OHTԚcDBCʩFK{wi&4gEćj8~DAhkfΤecW[=[°u#a.J£zM1yv9Qrޟۣ9۲Ts5 1-NQn?YZ{x%t<5KWpo *ju 9u)̔37ӺX X5XlWux;\%vT[Ayd  AK5e6kw\FtE:ȟ1)&w4WpX,obgM(4dٍ'{<"1lWp! BCjws|nJioiʮ.Q@hFOytYhFgr7dF3``;5Fz=/+ 6`mKoIYi  @In'4M#ۄLE-ְ1CL's_ #0tAP8iezx"|V~N{>Ixe n,6$F7tӍ<I HVx7X9_/pVq%l|o wGdijbeUjXƦldwmmsgߴﶴ/Eq˄A/f>ueW n& b.ɑ_5FvErRzXMߣ\#9ַ֢x\lrvy9!&D+]p0Ƌ%=m :QAB {ᴝg+eRIb Fqr{-Ҿ4D#+ö1RoME}@XBF޷ꏽ c^Jsfthm30;D+خ;,rʿ.Q#Ro!PQXM$e) ;ֽF6gcE3wAP#4g7j٩;&2),*'.IjLh-w&#3oX*^1*EzM~@vJvYe[siF~穵#)f_fF`6 yXms0ӀG}3G 1u"/#P;2JZ5fޤqEݭG[GO.2W'92I B3?2cW4|~40 ߉>)iP\MEkG W1MsC\(2YrE3+]<2='=u/BbS~%H|.)f]Q׮&8ݡ oA%] @xgO)2@AtA@򿉂@9@z@Uƞ)?_GO[|wڣ4v FZC h1 4 ?Ս9LSuw;xwE"]YbiJϓO|F7tӍ<yWxò|WkQ,xh yzJ`kky:ir%Gg0 ^ev#|!asgxKdrh$.KJHl]%PP6,|V&` ;EykOͫȟ<,}43Ė{w ϸx,͂ri'hfigVii~P!`'mؠ7`5fVc 5jk$%[gldA>wIkB\7";_{ 3rQb˭#ۖ930'|[oICx`r^30 08XN5^-sG.:NV[dL`uusZI&Cyl;%aO/Ț(y5YEJYLM~}7u>q2Gj"$ >nQ/Oߟ'YYwɋf_kzgwkq m닻:9tr׍Yk'F6* BoI>o>y,O sPc;Aa$iK)IFF{jg6@^^SA @ @ @@DaB H:e30 ɎY!ORK)l wV{$@|PZV&>Hm2yO;Vݻ#G%{OBIM7ky#ϛnFK(_0YÕ{P=ͽ{|+c]قUY&Uy,v^!Zӿ!Qz<žَ?=(VhDTk}Byzef-xjo_tV-Ar~?PT|ѦxOػ~nVΗ+}g[ [mOUW(DRF rt;q1 RH㍩g0|}@,/^VncRaYT3$ūV{?yxib:>fjaJ;@ +quԭ|aJ|^µȾ-k[:Hn{u1m?8> 5J%%%%%ۏSUCۻGJbs9h{ 9}TK:B}4ՠqrvMn4Pƴ P{n`qOI+6HIWFWA,Öu V-Y~yDp-ϥMp,tW&bw`%oMэbD dCP*E;<#j]&CRMm:{j]DD./': &:.L3M2%-,Pn=Y E.<z IF7tӍ<I×UYʳVd%|h qIi$V#ܸ 2:&6>19ݵգ٢"H:] ` V `f ŽcyPY־~F/u%]ġ㸖/~ǹX/U ehXyx8y:y9;qp pɭֹg S_ꥂ>PZL9/XWő&qSw(_{qpA!Ɣp7.~a䒎c^P^'ޫ)4nL#sC\$pX6STKtvgmѷRﺹX{Km,[E?OydYBeB{HbvJٗ7cÔ֩C2>dt3dM==zXstp|e1 erj>)Z۵E2y ]kKV*75CTD[l}iɾV9"&ɷ׈vvWHckni_:E0)BDʑBj$SK# <͝b3TLB 3j7ޮ?z]+akը8P3/08vw-;SLeIfbM`nػfG%_9|!b[M2k1}6S8oIUXmd>&d+1[1^ҷsT'kfL^^qs[RZsJ::{UI_dۜS֒:+|gS=;H7il84E[4G)GMS\HՒ˛Waӯ*]}ΛkF2?9pg;!g/VXv* sw9gYj'^NQ͒̓]BP?ٚ`QbBOI $˷4Kƛk۪d6/ yƤʴì}[frS.cR/QO3ܱT 3)Ƞl#2Ǘuvx |>dO $v aYm웁!eKO29eqru(orOȵovtumpntHT+[ΚM%"q#ϛnFd`p[>@gI *V*KYqrt< 6L0kuaC%Q)u-Em?- RkYGhI=RA -uG޲;kyt$gmlbwn.v!smV{xܠ뾶) 6~b윽?~dE<"% `,D.s~fw!!끴S$6 zQ->[}|yb^EԵ\}9Q3q\[s[v] 5bt3LR.<7^#q>zTpxpilk>ɄiF^pwZ >D2T/Ib]=߄==|Uǝ#iuq 7>L#YNͤdZJ܉zu cn$?z_S1&NdY#V~Cqg82(^= yʖ7 Q qD8ۜD A XF(ʇNb6@iC$`n׍}Ts'7MJ8$> 4= T>wݏ;S{7};ĞGbA"eap.fur$AlMMXC|Js6ˉnk`':N ^`G;F8ΡŔdN!] иDBք KS4S4ːhf}V'\`0X"f):`U\CQ~9&sO5wαU/4"4fh/p@ϟ,Ɵ69ݮ~ٜbb8j֞ 6ZrX(jd)}66LmcU5'kmfT 6>Ŵ5N2yS O;T;1 ̪z2-eqq?dx9drk>p5B2FS6KD&A-WB lyyUs;N~ ǁO9M"z^:$+/Z4060|s3Dt$tQ*>PZ#H B; s(A';>[϶m>|UlmEH촦fwXL)A/L'wXؑ_Ҩ7OTlooR/7LH9`"MD*D 4vl;B[,p{ YTnm3ֳ%z;YYkx~i&QaC|E⇒."ե(HxY7Z˜N,$@|p Y(Uc%C8LYy $uSmF}#LsKϧXjxcS8^W.G7DnS>l<${3ŵ^ʿO.unM7t#EyR}ᐎJQ$ї%)Vp5|hx7@;AyyV& '(9Ss-;)uh a'ICN* 22fѹV/o͞aM^1NO(ϧ,rԎWj}tb0`gPCP(C.E+gH|bGQa4-joC슎$lm i:~6 ' 8keF4I'.1QZD{0u9vK3 *٪'.@K>Qg3-+/}Dnm#%rc=\/$֧nL  ލ#kzLF7tӍ<I@.JA޹.e8SumuY:~>n#jX$3ϩ0]:B>_cw*E0G6] "r{>" QOtjOdEGTKl! y2٬&1t|G'{ϻϔ _RZE**EJED2#,C=|jBLfU9rXub}]m>4^pPW=oTALt˫q">ɝN,G@IíKl v%;vEq?+:\ 3\a4C!;ux|*1{y߯o:p1X8l\4..z{ zJ?8^ؤb.Ճ'"<5צmjE7ac0X`0\^l"OI[e9ze`~`ԼA LwL>+ `&k|U`)2 ~vEtvp[0#ȗxWE4x|QQpᜇ+ADP{U׋c;_l;wß 'ؤ[T*N~təpr29Ы\h9X)ǠW 4{vdE/0NY##^9ϊ6}j r&$2١J;~ΰ6N6Ui@ ,N:6Wen6/Ћ;SX` czبn.\dr9\;Z~T!a؁gSA#>#萸W82(, Gm!KJ+]V͈ysH=1iQe&q-.v ;xؒW8o.xeРb4Q,dv<a6+̰e\C}tL0;J9VE88ȅijI7>x9`\0Xh1( G 7 7E34rdjpb1J#  _ GeŮ(ZtWPY.i qݮpQ؍hiaDzq) @JcG0{WQc Oڹ\epWc7Vq%Mj@d ҈UA`/4cQT|%E&̣^oz?!"i]7͵ĝ?##w uҳfn.eFVv1_k҆ϋdWׅL d)9{I[1Lcq`p1~.],_Ejg|>0pSAúJ% 9b_#ImkWȵҭ6@k2_<0Z3#wN^ieK߼YQș^0iWm+^ [褜㲙D_"M.~{[Y%}^h=>ڠ;o<;uZqV&Q?-bBsfQs7N|əv%덶QBm^SkqJVcE|HޢTbڠԡ7=5СV;;]>7R>0,$D:/KM_?P9ڗc}UgtG .3oNrJ@W3EQ!ixԶ N1:/0[-a8Q`ߡ{fs^.8>kG4[m|W'T0`WLLΨBxK~lOcif\BqRM#Wl"WOc#ۤ4[xm7Λ(XU#XSFi9\UN WFA%٫ G\icRzھ.B11!->;vG1JQ?KyR[XkF OW ], ҙzspԶ OҬ\.SLю"8z5܅>UQێTSiB-AlCs3=K9!F Z9eDI2fr\*p*ǴnyM7r&ydxu8΁dV^ ?g(m4m2m>m9m}Dm),lUm<򻣮|PHܲ7v#>]>Uy5>Ob80nR}JWLAey @%#T%cT͊-G?ZwoztvW)ރ׸% OPz]'uƴU5G/qW!kBC0cاN|թ444ժ4o oljwlVҲ& N+2 @127%`p-Ƌ[o/'Zy5ɔ4NDm=VN{zJN\aϲ њMs}Dٌ-YyrF. QҡRZ56|#TS֕f2F} ۡWIa#"}%*wI|ͼolw;0bo˝?P=zETggHTi ^F' d8^nǚB}LJ: !?44dڿ.Y&i iѪiaii>6 9lwf2up 1rVʥhG@{B;% ?DP{ͿOV]-7!9Y"o7gQġo^oH^o٪I]N!2miNr~FV!_T⽣l ~3|wvT d^"W'3`=| RkWݯ,HN!Wi+1 ĿzTl=xxK_m\6m/m[xW)Ycl\-u!wf6Yk[<ʽH3&ʽB5Jc˷~~v4O Kx6z|R"rCŶT1U(F S-;l@k%pH0wZʏ|O-m}Coז.ʌI yF7tӍ<P Al(qjSɽ/`t1XgX3?]K)"e(9ohZ;J%zCø:XLqKty'YtuaPUw ܳ۰{{G+ $% mk>Fj|A/!hn45>@=;ՒVM?'Q\%}_*j-| }RhaoNՂ)Y[뷽Li;rG7Atq` F#hssNog]f\ gvu~`qvha)EX >r,  Oy6G Ņ!jW{un8\$٠o,8,ڔRJǹȸȼ{cbN>x+Y)p|KoJV=IQgY}:ݻw6yIx~o{dtn`@v,/j0yqӀngTyp \y|ׅ'Z`*&``rj޵Ҥy=?k{gĶ`~_ޕ<{{7&ml0 &-igcJd+Wi?wpnt1@_?yǃΗ3D{N!0+0,%A㰣8.?J}:Ny9k?gź~ϷgU Y iwAdwyU1#<A[.oa``F#YQ[nT+#* `UOc|r8-u{Cɚh)&eڭoƈ BV';OYlrmGsKڨB{ǚCZ"F!B3gp+Btnm&^AN \e< Q!H>Oiz`ФeXWVwnS@K p4s)aCpYa2@]`ؚs x >} ޠ|zҽzYYFͪRv,b1었*1l޵MR>Y߀z7.ߢd M-uGTWO$QyⷅbbQHqa;;yu]wx=ONF47 ϪUPU~y +d t#_>%N Cݰhu9 X 20Zn&!8y6rx]ۊe]B3~j -F?&S靴1b\mf_^:h8/_+akhKV j}]JѰg2b9nekogkcfO=F$S4\$BLrXf@8:L aMhCB..lV܋c{߾dZPC'gxu!lI4Ҧ?_-[ݻ,[16V9)ʲÿ,uN9oW6Of8 iQۑZliVfdS/5YM{ݎ;\l!W!@p3 6?In+h[/P[L,M}¨ܡkf/K Բնvϴss;3=Mcɩ%y<9]Td3l׏Ah郝 8b% eK+ediԤǙ-G$w U~x6=q"g $;)\`!h-oa0Ip RI VqOMAy*ulnxˤ9!<>xYvr]1v7Q(v>se,}@cQbU"GSxl}/AA#ok 1#sq$o1)Y +_GBKR%8>f}A>|5y[? ,}]NW.!*E<]_zh'߻pǶ$w;-)G] uzCP'*O IՄF]mtmFQL,k ;~0qiUn{ϴ J"e9I#kt#nኹPk}g.*R- od99;|8H?@paBzgRegIזH_3?[E?oAG~ZC MT $ 1/hR֩ {{ aI![y몭$=:^0 cK-HZzeN_l9_>c:aX 'ݻoiY9!|͎žM}V|F4~_iMq(8qQٷVobȺiT2j`T&Cxaܰ&vxR8W}7d=X}-Qtz%A m)\F j#ɤ9~{|ì,B>n?~3Bw8J2Bִ8EWv |/qqiii 0B&r p+sc=MyI捑׷}M2ɥC@h$#쳺2]Q&ARWygo66SI';# c=>QU|(tNW=[IYPJiBs QY2jc!LM_ 8ѰqP^ Y 4][q^㕰ymKso{_l<19!=8ĥ$am@gAgAt # -nBg! ?CBdBa! iG'Cym뮻QR:GO ȟAPڽG/zynj$xz YK?iVRCD &vml{Tx9Ypڰ'1vqdH8k3}`L"e};vO@KMrPAmd x?(` NzpgJ8=rn*JVlADpE_[O3d>*\pkr(lE7#VjY7P,jOʂaw_a7Ab1o1DQb37+ ,ny>mܡY* YC'އ-oGcFBΞY쑩R͊Vۅf7ȏmRo,- }i4TS8'pau7 SB<D<9s(:VC;!\UPir=I16 ^/#w@h /-e1Qxݧ$C淪6i$z\٧ u<37;Hp&>e )Zp]60B{z{7㽌5 #_\,>yRFH_+q+niaJ6*s/Μ3[_mw^(TH>\P3(semz09g>yT:gЮ|Sd%3YȃG*Ӵ@.;|N~2K>=G޼>k}2m[!^bH}1z*z{ze{e#QoJV"F.Z1.] 6C 0nSl/L |m-zY|0H|I ְ5"d8V'vYDu6pQSCb=ƠApAP@h=©' #Tfm?*d3Wr[t=dѯd@砄'u|˞%UpsoL8`9O);(ꏣ3aMh,fKSx z =9=Hgμ՘~~)Q3s;x$d"fw+7JAy뼪n=ŗJ>~&uυėŜSiWa2jόHI,*k4=cqꡒ. WUwHlLs OF;)Wfcb!4^wuye|,v3Mz1T#cgko+,OH qhu,"[:kf(j Mj t/P `Qm$e>@1`08f -$ƕ~srfmYg \1I7R%dX壜Pz[meKQ@un|˵׽ _KS=lcc 2K$ʗEcvtO x a뷭.:"4(p8OdRuВyȅq0m遶s\lOs"58u ^HT:WѦn.v&{1nRn8 W}!OX{xwd Wr$Kk8-GN׮p?08t~܉}K̋搜/4o~ dխ駋]%Fχ fL֯ӁOF髟'~N]`w1n1Ѹ/wPOukd 3+Œ+z k:7lpoV Un 6]p|Dv|b:g:wE}))g_ikNxJd(<;y'e Zo~U}g^8p4k2`V+C ya&ʒWph눿q+EtY[6A~i,E9:U|{ ?r C}[}i9_e7wШbNIK0^Y({9~y@2%[/`" |LCЇsK I8-! CRB{p)Nqt_ T=sabzd2cU=Oh'"=M=[/ WޕGKzI hKgX1-e}˅g}H2dGySFYٛ\-59t_dA_|@ Phā@::-fS|ZlexM"D5ab~/sr &>|uDjn҇w+7HӶߧ.kO8ODFz;`\jW |9|~N-IAbL}I4V/xYن_|0z~%S J6jD!J3D@z f8GR"pL;'K[Y48,k05$ZZ9mbhʳWm 'X8ۅt !a&𠿀Ez@Nm6VDX֧_M=\piv( onzEbSdPp\Llikfܜx}t~cp֫ngZP3Wǫm/3 X5pnwSILaF|252-]}nwd{ts0ۅ 8ja5eÅgsON.n;0v"}ftpO3θǾ3Wg!c!oOve.L&zSL{=gVbHq>C~#S([+@0D"MyΰAo'\Tr3VC]5Jr,o@: wneE+Db&/GȄ;~y!Ds3Y|C&q\J7 QH YA4+bBJE"f5'G#> &٢]nPJ:s:ue]wu'<Ȱ]o||]}:VE诫L4rE^ Ц#kM b(TU㬅qc<)x4i|ot#BY}{8f2 J;~w?۠ߗ?W|z9~?X`D F;S[!}j&Q?T: t_4b󂔶k^!XNGD/'^/o|7zzjxd2M vލA>QLٷnP4nH ,W6=\zolzbcކq>E78?頣#n+n:#Iw>B^3TkƩ^& WkZ}uL F^2X ˥9w |pXR M4|CG^n[^x9qom"isGfg]cE! 3ϹjZ3{Eá6/% ȋmk3ў,Tw뮻?'jllz+ KKK +O21>2Z޷z8ʐk##F޻*5OКzG s={G$aoc(#>3;䰛FX{xGg8fʇ9P@ Gv;cԖI[r5ut* 22ʜj̼[5~̴3AoCnBEf?uO<8'M_gs0RA%&f;?yGb.xM*Gɫ ʲvEΕCS-yB~.&FV*:nn Uցf13sE 5Kÿ+lbb~6.05tu1 InspFy[nME  e%K]oxX8$1Xy^E /AJ!PdBd >4V\W^QYPȝOZ=0AyZ\F+Nr(k /@i(%OҌmqΪb)ptHDôWEڲjVΊF:-jʰ?9MLj{v=.:zK~)z^n$W{782pH@' P9 5nu.pJ0LHHV1N0jM"`,KIdPEFYaIUasnw<c?KˬL{>u$}dw|HرIjҸJB4hLlmya.Me>IǽCT%SB'hǘ|   dW's[˿e?x-WXeK' Dی(8 лГaf3F2ϾM?kd `asr")mɒ6/4iYUy%6~V3w!H9g>ڹ"R9+[|Fw'ϻN_>%%qbb"99I/a2Kl Zɟn-tL?P4 ꢾE7ciS?x$zVyնY4"UCE91\/ߦ.K٭" ^4&?[+/tk}eZ.O5=߸h\rNbZlRtL,Scg!StMm:3h@r3P(fӅ%ZYa|ec4Z ^7ZC;Cb{_ )'(gbD1oB>QQRR07s .gZo9MigtVU別iZeeՑ_>/{[DS7702<5 o}u[ A (dH6V HlUjnឩ:+xt97ZY+JsswRNՔx@Z}s^%}Ȩ{st kگ=Z8˯D3P:0;P_M\mM•=R Eǹ@¾&59>_#9E[I8O%pv pmNC)&ZvT.80{Kd+Iy|]kHiNy(m&mjM/n 58?+n`2*s3KJ@a4MShxku: ̠&UEJyW `lz*!5=~B Ua гك7+F~4 +g1{9oҭBL歴8I=wnYܢl1FD,D9́A ,z)R)QƓ;Ρ)7E0#uC{ӁPɖAhV| Inuɋhdf{x;E{߈|v'~{k]wu'R~"3tE8.p7dzBDSǨI =kօfHfhuc2(\p8TNB'("o1Qh?sh9b#zM(V܎FXQjkR-G]*ߠg?hF3//<9or\*?޹}x3igD}I}wQֱлܮfwruax^"ߦRQOޟVڃ966 {sGcܲ8z _ 3+ V}>U&N"+@c!^l2N T|m/O?#fp8x\߶s>|Ü.6D Q'ȶG",G4 ~HL*$&% # #WW?,o05ZҺ AL|N蛅 ʔvmR&SDXVhsm":k.KjxLsIBN䛵YqRj>0w0~boMo.X E WFa\=.AD)RPޗed߷(mԌh Ph̥H]Ab[bkH p~"Ynioo^b=z4 7#Jü,L-ҁ:||2z߃fEJTXy @6*4hI/\C(ꓰTmx|^46Nwu]wɳׯ_ |+Z,_dE6L4ɬջWBxqZ}98})bЬ6D,$.   b>90SҠ44S@[Ẕu`R Ã0 5 =;㳐LnV^< vGe0"q# ?~[>8A@zQyAZ՝}  Z ^p7JȀ9ٞQ*}8/M4Q7L_QZPꖲ.UvRqRqRqwOvIӬoZ%ed&liY,2leuztg"]!S%-K?vAt;=!M,'TX@\vjŷ.ʉ)*^nN|?S|u j9~Qɦ1f>ota<{f "MԻ34RL&-g5;ژɯ3Ī$soTz՚+uB$Ӌ$ˋKE*˪j[TC,!MeO1/ƈLT}n{RxmJ`F4p7p5 A6CdٷZǻ\0a%ZiQ>:Q>Eø,ecyn-r \N5ԪcON<6h Xf^nFcO^o|3C>;nozv*tT-[5o<Pg_ebUV(X6hxlxyahdrR8w%jX**~30Y5AvYB.VZI=/g_b^ӈ~[K;yu]w333߳]a_y@ 4F]d]'@U?&Jf}!IxvWXP( ňbA&=Pؽb^s©;BKK+֊Kn{ܫg1GY{Cd-{? E%VJDz풯o'i+F_+e16 IN Eg*:&/qXH K4kqh%"_B8dTRO]C>×$9| uc1ʻ:+f> ԫe’{04Oos D0XBH\:G6g_zUӼlnf494^cb1_p?}^ Ceehod棼gN X!/HA vV `v9-TyEՄ8X*_$&.u]ڲ/;6y7T?8&j'XؚQN[}zxExExExMCw!㓇OΟ~V艷5 0 ѿ >38٧B nYH>]<[o _Zx޳W%ZcZ82 _(.gkk"}^`G͟$;pD.lw4^9]HL쥆۲jvL[&;[v}zih,;$/7aoo 7O_olkS?MO*n0<9:@վP:B7 b0ˢ4- nkt"Z딎";eJBmR6]3s;`|E$E|[S Y"}-whͮ',;Jy>:/)J@1^M!5W%J4wHIP@ʤqL+RLKu;'_pD,ξbj_=ԉZzStK{3mE1.:"4R^BUtYOcolٺX)q껎Sۦ1.fB_)is52Tܔ2:y$ US̖B|Z2*6UduK* OVv.NN+G._wgT7p훬lBCXZBlvSrKWLq~ou~ I/;e|s@z*.<6kt3d;4/"Ic!+Q7z){s2U}u<5l]jP OvV?>,DNf}h6=K WJ6< mI2.d2/Ε?-Kj?FF(09͹ҦpO S |䙞cVtN%'̈+P.߯Hjv_7Q2NiὫal<׷4f)?\* 3JTfl!kf(,<dRX@3LkSoR2&'—~LmJI%CqI%obl/gV0$$lmE1RD:6>gy>s\IB٢:ܬ9d4p=B*B 9ٍZM]3F=1-}ts]6V6wl|2d[XWU:ݔ2B:(<l'_-"o{.L5]1n Tɍ gwJgOK̋ѭUj.n``koSƑJ>J6!t{etjjeqfak҇C4[* qZ/$A6SͲANQ0MGh\nD z[sʔò tuDj9& !>oS=nfrfk{ꥰ6FPBR>O]0̖.TLNNU)uXy|Am&?k?yX 2hL?yt"||'ad/7Qf'Z7Zh=3ҡcdoogiبY)^ q K40 C]~wb#l6,f 8|zһHo[d521- /?6ii*m'J%t|cB؝:. yܣC0]/޸v=yy{Ū87Kw4j?jɠtBB#(-4O%IxQ'Ȋ'_ c m:3e2@HAbBMsl"|sX?'n2@tm+E/Wm!Yg;< QKb0 _2 gy>s+v? f%狴b3yFF~M1s4 ]ֆ׋>JHc_|h/n>ڴ+"^:^h2 IV kf$2?~ųδB2Jr M!. ڨoMI7wTz>-|_+n_-=eH'_|/}~a A|5_FWN~;!_zu#j~"V@oFA8 &( =]'ǝ!u&asuPIgԷHm$*~Ԛ!tEvw_DbF S_6D:XCӸ~2w +omj ֒Lc\5: WV`=[1#2Ossw4q9./K8-嫓w ݊47cLcL}ww6?FEäcߢ#Ul(03\ISJ~{ kD8"2;I`>{jFv;ƺg w`f̯UڄuU@ޭZWc5({5s"@{AevǿJ&W( 5(B5nfx]0aԭn,T3Q{F-/Ţ=:'MQ&" z¡d?T,b4$kR@8h7ހ+h.^_I{hN*ȩ={W6Hʩo|9 ~s  0/L/xG5R=k|?(O(xָ1"#zQJӏ1&^Y%.d2U|@~?S+C3ק0~J!gJruhTȹYKVCcBWiĐq``WYLib6 B2ocjUhE-uGF$wp2EN/W..8Q\E9h[S ҃}k$G_MX=vzCݡd=0K@N"Pd =t13'h2tTcWڂRpR;Y[Mߝ6Y0C%Q*J D0^6evC,٣eP,{z?`n x@oZ/.T9I6 әnMkbRtHZS<lZbnuk-F>[؜z_MݘDo͜_zsіozj*sMgV8V4~QUD0kXmIrz!{4Γn,*' Sb_}rBI&5t4nuhox9JݻSꊐ6!ƻ1lh{ t*8{o$N?h~" X<#]Z'rPB᭮m]r SYNhZ>שּׂBOϪGOcSw°R8{{4 )AD9Fi+{yV)&w?NLJ"f(8Σdl)VO5B}6rwezlЈeeߩYڞ#GƤ{kiɷY7Uq爎7nLֈ 8oiq^܅{:ߕQ$jaʗvTv7v4C.=(xw`[,S5$p'3 ?<;;dgJݻ'|:;u1Tȍ@W (j=ҡi~h%f@@E b-{V+Sq/U#3Sdd1Y cdw % WYVfq:vVjF2!uJPڍqy֪8VX o wjV9D=u-l.y;( G}0wJt}K"ު\a|uitg &@T\ 7,S()7/ (wm+jgbnQ4 *mQJx}:~/qZe3|4oC,|F$]ۭ50ߪTzv3nmbC[k;X F#ec-}u؏Y]H/*QwZ"w2!?RsKPޒ?-D3 )w!!C6o|&:.Rq2͔c1Z))Qi9TXk)Ֆ^ɜf5,zK ~}Ax ^c퐟ϴz?;]\=;O׵DDyMs-*yR`JIr+ [T@g7Dg&{ek W`$BRцRRap)㮑biGJ0,41X)ө=.4i3Y=V[hI ChV 1i8 a1ȫFkcݜ]=k\|r}|'m,͜`Φ\\fQw?3F6ɶQv H=P 6đB` Ȏ Ajԧ+ @.tAO7)]+eR2xݓPѪ4m[ʅ 4|bu":B w<  D G&{69eM(tXf )x:߅Qh3 M1TDL7_G8E>ER;B6GE|s=,Yya7LӞ>z(~@&nl۷}I61Jb . 1Cr* J_썄b#7ЌȦWj%K3{ὃeˋ/详JkU4ly|M}2,p]${Tgt܂⡠h8rM :$=\-}c5秳!Yʱv|`qC&2 'zq@zsiy&osCr9w yfrCvq538k z_Ka.Na2{\+]$U^#{H;9,ZwOMX:( LjWTs|mK&3ZӁHRV#],_Pn^ޣ>>E]G`H^#ј('[Vxs%cF$k[>Z*K踊urr~}'29@qǎ? Z߬]od)9y?m%hUC=GH4E^Y@!8ʱfG%r}cِ՚[5=@?< B{d0[罭hHBOf w\͂ey` hgOD%[;̽w"`(h`;_z iVzz%-k'Q&{K0H\.k?}jQRo%/TLc 5y*3\aVAܾR^|n}. &z6}$KI6L&gCăsZA:]@RIlsk`-0MD]d=}}΃s=P(jϱ  ;V~Ώ3uXVF{+0 ?1ٓvmr ϥC} x 4 $҇YwW7ENQzg" H4^2Wa^kݓ+ph]]w]~xac$U4,G6봑fkh~7g._]84At*W1Pu ^ (|pYZ&ޫmD=5Y#gZwqX&4A(H\ř wAW<&!Y[LBsyrfaEΜِ[c'ccuXGS5@ $GzDMoZ_&jOt`e Ypvs-Ų||nHY.9O;-xSIyi)f^\54x /nm}:ݺݸ[;ry`%!b!*4S"%l@<Xw *;{׮XO}I WBm\`QzjQMPzZ-mQ29鱤kYhp*c]>U OR5QM{n<E3PZB5#=*5sχ u61E|!ub121NU-_ꙣ[2@dw'.6[WΗX?Kzj.5#yЃDB].],uwWΕs53SQ΍PS.i tX@p9 &7!WzB?1??WWsҬ9 *oH݂A*7Ѽ+׆-ޘ#]K퉷SUaȴ˪A8Q.]!!!~Y>DQ8ﻎey2 -4#^^oV';O~:ڊ@B%mg 4[} ׈C y1v3X/67.{*)Zq1Mzq#: ZG:Q=Fi*cGo?6sꀣoJ$`9l2nM߄]CE~'L2ڶ:Z`*ʲQxi2f# mH[_s*$ c$ J~Wue{6:/u}!d+ h֫+m*(Y;I4a?g]5-g@}Oe뙃oM7~pK+m$㬑fg,f3 i^N1wX'tَnI*PŌlt 5aAg8Af˃NC6rbW=\C,cz¦,l= ^718(VruG<] X꘻F[iL%u~L<.l/ rИKnҾ\wGҳ3ըqvrutS.aыξIl۹Ԡ(8l0J."Ut .}+4X߃6%4mu/먞fxp]A:,Ɂs'FN۱SQ T9 Ll/5 A3աAlcv D F;s? coZ D90[G BrdaPz#Su`[yGuO8uMD؝a=w=s WŵPDҹ(金Wr]ձ7 @7`H4`DjDkפsC uPև]wٲ4|re-lC=jd1+|mrYƦSLCَ[ٷyVj7[:i]ܷex]~ li^}́s[96ѐRHP'vUɃu6Шn_]6ޢHdتެ(X//g!q^|-udM87P')3'YS"W)P'U%VY&1Q$u'](6\*\]%\Rb·3=W*&pTb^.!S$rx yWqȧhJc?F;hsx2j=dR)}pMjbrj%J a&N>ܧm ;G6B2臕m-!*$݅2A܄P~uf?Tcnl,t&t! &Z 6 ^K=W۰5 Uɕj+5ߒk<<74 ~]"Y=F_0%cU]ƕW.2!u|0TЋw|OZ4sjr`|keaO{!!rըcOt؅c*Jue/"Wi,ri3s=RuY6?k #q WCb뽓F`WϜW~gX!gi+?;H[g>MA ;yI[o,A/Or; x{Zd}@R)?C(-D++IKs 1Uvc5lU-[7SFT_S9=EJ2n[u:E`cwSMY 흗'x+~m6'^4 T|?(Oh@;P-7.xcc$OJ~5ODR8"! ,< ݢ\a\:FϺ@3FaCǐzrt{tU) #=zVkX-'/.o9$ed/~[!S4X~w] MY+#mCΆq{5v ? ?7ndwlRX>(">*?yC WI:r.jC3Cс"BeaH3y^}WB%"1p-']X*4Q c 7`!H X}/dows\pc}gjmN,A6A9A3 Km$_ ,/ sj-c_UݠH<?fkJ)c1-Pd(PX?Tt32 ViF 1[?מHvY.3^6:_Tc^\##̇-,+/-!=*ٞ*Q:y i?A 0ȟ1p]cZxMџඟړk^]"gCJnP/r1SvqV:R2x6g*ejn%W҆ i 2ߩeio{^o/Oz$_@&H+8./sSǖhgɬ2ܷqN!%C{+@"ڸw&'D+i^Z'mj/G:7z%H<=mL}T~c\iY 7`; 4*&:*2R zjrb\H24pTGa_IYE-MCRSW UBqC:NujY1u)=乓k뎾L-H5&˹ӚxkUJ +[xx8FO/q~yv&]w,X0mӐ2yzQx{E2!_RӦѡfaٜ(VXt Sb1zك󌋽K5KY&E,AqF)BE9S^\!<%k'-bmӖlYH0z(8 =|X2 8Gsiiid&oEϿ.>֡7k}$^F&fΌFZJahLh_y}{kdn8@:PuLOLTC T1C%}#u+q=XCkW}׵&#Ory˻A,5~6E${wLFmrDno]ID0q p¯%U-S+s} Ř-|[Vr_U͍[ܰ:"eHUQV˯qܩmoө|Rghqkzy^΋D$ dWk-e;W7h ɸg:PHL!x ^ hm4>MXJTϪSMH3Е SUԭ3\ x_2mKyn:ʯgӬn8(0ۙ,mDF_EҸIf.:$w%oZ(lEd G:yY& jY:t{tD*e* g*-%Cd~vNuYg,`iJYeٵ - u 1rȨaZКy40Y kYXronI BwV`ܘ-ߋD0ao&8t@}G`4ю߹}_V,. .B ujN-Uhևn_L1 >8<)6S2&Q]̓On6Eq,<»Eޥӂ[1 6jZf*"R,2 }w0w )Is3ߗ*DlT{ث)'lҼI@ 䯱tofZým.7},lz}<]]g%KhFĜUvxT̋l4/sH&hwZɇeq6N|%^[xI+ εz8*f0 ?)CAZW #a^k'_FALC"A_L+|ݭ!,||?(O:*OK+O|;>Oey`ڒR9|H#&{5׺4Kp&݇AƲWħhcۨ c(ڍT9_(PGsd6Nilc0C!t ~e(|]d*)ULCnD:tLTD2nㅗ'eh(GHiyZuCkU)*\Z܄j>X"Ña w%7ۜ-[q`[M j$`QOs "":x hdkBt@{6f[)Y:I3l@ccM L$PlldJ6͖-ES]R6Sn^ Z}MzO[tiG/5c/B'{;Uq“wT zu?kg_]Eч" 1yr9.3._B^o|< Yrt;> ]Jc osb,m[Zs 'ok\ ؜_c|Yss "-AnUTun~\[NU2pC4z=(D8N.e(ZC1< y}#4`V5޳wrz|kp=l)ŖMPAяn_hD3FFF.FZtJP=cb@0{v%)6\ kp~D|2w\AtCpD 8$ E-zK6gy>smVtFʧX6y~sROJ\keDzdN +<_›'YI'5m(zVXGWk]U$?#FkG%'1TݗJ{ol>DfjNɉ WsLlmg(~*L@6uW?Lo$[U݃!  G6ե.B"rMK2ͷ<yKEPwpTb岿d@韶aيB|lJ6%-C+w NMnY)ot7+wKtmjrakAz#Wo'fW~, c!Kk{Rݍ5v s%[$0XUlʬ"V/W%+Qs9ʾvHYogutEJfF|:r~ww ?'/R@RZHP܊H)-9wr $Lټf>35Vaz0Zbibg]6Ņ\ Hr׶'xG|YQM!9N7byԢ&aAև9ɐ!s, Vmt3{@8 Y{q^.پZ~!VY%90$/v;̳ ɆYGW9Hgh:$IWQRJז9deGhvM|X%[ؠȮQ5 bWX`Ȫ7gxC묳2+Ŧ6Y;- #4h-oZ[tL~뱍nt e W^OR59Y/e`{?3nzhj`jwr{cm2w1hί-ˀߊ65XvE PV3+*B! zJ2$R#c|'\+5^f<c3VO^P| ׀<:Ӄ]"_#_mPdLZ{{;Y:5Y܉gFw[ȳ*+4SyQa[TF,JޥU޿$!AFZ* Rޙ&1-x'лW9W`F(r| ri KoߏJl:ƾ!uĪKS<}ߛKt ,e}u=$/gK/_']=V}8s NY^e3 jf  }pϬÆU ㆃg[4')Y:*q=#[Zߍ闯]bQiQ G؍KdO3jԍp.أέiz q% m"hjCo9rrjvb0@0塟t+ ϰwrwrh [)OʱDrâO!м>hlef)!jV5;&jYdԐ$2@=DTR `*(fޞٙɠvzO }izZu_{"0C \} a?2nU#ƞ'N{3Փ12в r(d߳[2Sx"j߇w #Y! 8,_m']#M⯮`=M-2"10arj픏m$/c7U~J:1lc@m8U-$=ceDɽhҙ %gKeK Ֆs:8;)-fE1? 6hdZ.[oۜX])puq>/ԙń[:oz&I.Uv̑dma{"#c@HNaƟ"9]#ܾv;"Z;VO=6j gpxLRVneY{Ӵ$ˋ<_zyMWn9j=R\& f-BûLB's'mERR~y~dI u ,?up/$w[,ut-ޑ9gu2a Ģq.*_I)FRp=(CV-O)L< 3v9œca%0.]x!@`N~k]@UyT*GR;W4EC#;:9:~.OH'O\-oKs]u>4oQNIJ)BLYD9(U\{o BYu!xes(8W9h5 5zVn1~!v%@"yq_`|:6o-;\[=++sӸieq(]Zi`^wGⓚtG/B-|a74Hwuv]v֝M0n1f<A”YjDc_,g\#:%16},s[T0wk[ c?|O&wO"-l ʝWȔ+ʇvpq@ fBx(iWQ[#1͐ XKFİCwJu>H(<*6em"4K?Nn|;Ĕ 'Ly!) Ɍg5URv>Af" N^AQV9na۞P{s_UAɛ*$h YwĔzom"V63vGӷ{IY[ ֨A4KD{xGY̬q%eEXr֒NY\CTk,s÷5@b+Ev8PX*j g$#YIh>.`|G8O@0G<$;껈ŪP*GM-hKxӶEؿKԿKܿCҿdcM ~iҧ 7oF]ODgjo\q$F/@ As|HVB2qm]>!߽Ҹ°`aXCQծH׹:Js-|lc  MP!/|饗^?(OU4:F6[ Q hȧ ]8f8g*%zsgH_͔bn^U|P1yǟmgIҶD,[CǴ+Ƅ|RM蹢 qJ,2+ƫXOF@b`p20LJY=|7s~뎣AA.^'"2V51aA_F ;wm!(#X&,Ru<7:F)82DEOXtSGTfZ{,[ȷE3vK4VAT+k++ĵ+!ٔΞo #B Kފwق<͜,R#3_WPT-/Q33 `@0 ȄZPM-ImITK1LM0qh3Aش !y;/[7_?˃T]M&ST-=D>8{A9'}_ȚC6jdn]_J t PJT*rNwCCxCGCW%dDC8]`;L/;k͏+c"~kGK. p -Z|HdY3biˡCKL)',v\=q:L4LgGLl_ԫ0Ř9aU,HోS{5~qtL37-nJOwvtw4Y8Z*K4>}`?h| #x-kT[dRR}t)44fae6v(XN~]ʦhFlx9_yYeu5ҁ&qŽ>JuY 3u\T*cq!PQru~ 8--=3+;!UXs.n4dcEnMm~E\Q _^3!X)q;vW޾R'ovfXdhAByÚ" 㕼R_z%z /hz{*J)e? gbRS!:Cs<5P O(NwA0֫ p9qXMܬ3t;;tRSe/c&A8kzFB6"^g+gk;=="ܽ~'m`6wmrF%PTؕ';)gLYIJ:xB ;' ^ОDfPpSڵ4 n: ?Sw. %=((a^z<𬵯kk#jjzy33}؝YSYZ0WW?_;oSu/v7l 䝾ZoR]Kurs}t6=q}ZahaLere#YAYQar~ɼ !s?j7WP3#C̓W Uv&_W%N@8oﯙc \$ }MǤ!kd#R0>!Ij__*yQIYEuMYzqAe0ǨY+j}<6fJr4L`D\Qʐϭ`r\Dӡ09Ϳڠ{35ѯ=ݜM3|?@7290,R&L9I2B y3E+uۗ;K xvd! ؟kۨ_][&w,ܞ,n64O@, YK{ =»;D8WsO _'6>MQ3Qj+ "/O,OLN$Wӏ~8EL A@px@B<gDL"B dsC'8; Tӟ8JM@2~= T`h WoVE4Rܒt͇D I70\ljY)[N "5uirye%5=M9"c3ildXԆk?m?tIBJ b]|&[kኞr oSb†9RzZ66 T~mie av1A7xczw4.aoe^RNYY HuHَYذr̴RŠRrJ傶Ӎ VB&Ed=ᵬ2һ}`K^?Դ%rXdeVJG랋չ i'ov(&/tY֢qiȜc$skbn;{R{7 h/|饗^(O@ ^'WaP8M^&K`#.ߋf a(-轗Xcsklkb{Z)z7Y%Ou];bЌ/Q#=<#3 pi `=+Tݎgf.>. <$EJ}2W1?w:M '9ޫ]|o"Fa9UWrDt_[5R݇R6jVDF֚KVqD[=B KQJ:O*23"Xh_iourJ`kx^&zwg{~]}/a .drznj:OzD|lM\1]v!m&UgaTOF9$em壿MZ K=gWWX\c-o>΍R͑hp:D0жt).9)_e_ەoJ-S D\s"\P\cjAγa}8@%??g7PNӘY$kKZӵ?>KT=IW8̕+_Iuݱߩ9ݻ)>d3?юMe[a@Pt̟Qo^^=ؤuq搵8wsjom^ҩ՚arѕ񭠓4tK*5ߧZa~@{Ifdsu=bRMrU}OEwqWyc}$;GP[&yqTxV6UjKY* =Z0&<\wO;Pχ%B`0PbAS O{}T5 ^2IȤHBfm1@%Sޘͩa|9qyK/'d͢TMKJR;MHd ](75w?}[E=ŵͻʷ$0(4V/Y|s{j}Xz|#,jg03Vc'<˛<085;C*!ۢfVdftr.}ZBY]Ѧ|𚢴]"4ԇ =X'O t6C} <2,' Ss~fuh'Z:FH2(|\>@1u*ߍR YI_SZYsTm1q4ɊM 7uSN-`9 m1 p6ԳOZ(YySV bmc<k<;I-o$~.:kIl.2aG1qCA5z(t%U#K\'<,SXBfA\g}OQwZWTg"7.oLhdcfbe&656U!W5"}"NFB8R; U-55 Xn``?̂)aZ~Vz -$O.q kȚH Inń&K1lې<6y ds Pd{=^z%_O=)[5¶5$sBbUs}9OΨVЗBXm+s xފm4𢡊S͕ P[+7;?0]X*,MA`5ԡrǨdd t: bB*+Ī|2&P@İ~fhkFUhSg/}ߤ:WgF,k7T}47HC/NIj;V}> a^{гYk,bLEwG %Gu|k?ܖZU:fД ^\Ŝ2B>~~|`EWqHw.s!SVtJ6d+W%Uc&~ 8hGʈ$ q}^. 2¥ҭP,?42HJDAi^q[ę=`VNsT IO´?![ɩk?ؔV0@FAbEMh?_ cەu Ρ.ΚvEnն#t] % T} 5*RLì}haY£?|Ȯ#; C=M2F?Ɲٮ&6Aߐ}ck^_/jWTWz"TK% xd"NiH/[ls_Gԇs\}R zJ2&࢟?FuҢ̺Nsl҂}B@u|M"Vn㕖X&!aQw-lQ/1 qAۄfxܪLc:,c iʠn&:.d$  Y)#q`]\o[c*%G_1!(#@M?*̷bn `0RX%L8 d7#Q[.a5=~LL3BUB__.]^p{'o% _ ;җ3_zyo;('FǨFD0Ծ|d€v ak`.G*e#OТ/+VXE$nK9v;Nψ7hN{fH"qԏQ I"s7@=:7::}u. =S#``Eձ5d'j{Ps?3 <3=3X`lgG+X:JÇ(GgkE /REJ軞օ~jeX6,e yB `1TyXpsd'$ >   2n~Uz@V֎=UO;a> /;=pqp1p9ilf9*:Ŏk+ɼ/8pp؛{'H8VAY*Ct~g|C6u nc]@R?1+wyH!r܁DJ~X?:9@>C.BGaIRo]-}o8 uO9a?Oj{iP " !##_Rjٛ1 N!ݬ ]#A|~6rE"'G†=~q'Y'o8zT.=NQqumEQEvB}KPGy}W7h/Fݐ˸LÛ]ƃaH]dvyls:Yu-_[6CrMRF1HH?E ~l>bv=D@y'{s )nx~8n~aiǢ\o5 5F>ۀ{o$.VEA}@x{T>YOO.Z\_  ;cp+tSúnfL2v,Z͟Ǯ=rFu_/gXq !"·Gx'@pM/;%pno[ɼ&szB(|Dz@nCb-oެu`lo~镶β+uK;Pm|DqGiJ $W9]tѧ:NXJbZz7B3(;{({h{X{tQRӫА[[[[C;% ^c`:옢zias#s72 Ou+c|(5+ui9Nx ^ C0"P'-(wꄁ׀xɆrZ8) %@DS!֬xgQq-6A9txW z'[P5]ۢ?jV jr5cF쟣ک( ~²Ua隰-(W IϐWRVU^ 䫟/Tr͠Xs@0 R<%/obE}C/WfǷf^HaUmYYJ`SP8< b*ym QFhM)))*(o)Q(R+)WP~ĤC|nMN5MoJdymu\!.2$x=sfg!Y}RaWb QpLuTԥoZ`BQzʚ~IЅX.geaLbeH@'$ ,o!bN̩7kG=zԾO#.ϡdBoOY\]?7dtiuRq#Ks;Ew2Ѡ#wEyQ][kzJwd.{h@o1-^GYVs;xIFE|K/"Iy*"""&9 Yǹ+=Q}y $Y@ waRwWMz"!&[ &'f8$-kSt'dm˸WHw$ΛLaZ߇]zE> cɗ@=p]6,mɯre?;E9c>N9N $KWvַ 2O ^X]x̅Q}cbl୥sFw0SnbBtQ-UH:aGg0@ sja5BjaX4P K2EY:ukǫe5g ձ,R 2$3(^@DLv^bUN pvJTi姨eIoֳv2]01N1MU7KQ9C^2MZ0MS4T4i`vQs)4|qXnчeīnA 9\2'j ս߄A0BJ!O_ >\Ww,ȭM}hrL H*6.QYz%EDΌԎm^pt=r:s6ǜIj9O?#~ G 52{痃uIoK\:3.$7J#7T#7P#G#_;2ܣb(D{-Ets0Q\j5N q6eOBFDsOQFN|QؘߙߙUؘi|AFfI2^0ew'gl+.'+Kn7Kn?gn*| fI=O=~(G 8%1bPQ̽@}Apru2J L7/QO5QKQp~O{.'l*?.Pp +_> IhYF7{۴=X|JhnRZNO2UJwCLgC9 ¼w}6u[p1alevbZhN-eU3\(3Σ]ƬR-U'"5ƿOȐqĆQ^؅h~sbeޏ҂E Is'^2,z27cLDSp`  ͨYc*tAƯ|-B ?j͇9azC-~0)wRa+p`f9.dgD}TTyK/>!!P!1!!=' ?@9 Hɗ2nE$ά?< gN2ӧWAUv֛ 4k"2-e?G;k7esM3 >OHwUhaWnй/טfeAbe°J!Xu@ک 6S걶eS;I*2-qrb==]Ws; c |5@: X?Gsz͹pA}x m}'f3i~IJC$`Cj gEbgefC:20M6A0$(uUe =tC*)^sabYu/r,r^s'xXv^( =<;ZRݲV? G-ЬýWD@ C/4 m"u:JU:ow Ε:  0781>0]\|W=/c M{}@9K9sv?<up&08DSBQET|Fs*ow|tZd)4 „bB1w}."Ǜ3hmH  du<'0&/N}5rfGĚeuXĎiԏNUy7 c *w(}vBTXkղuS܅Iǝvȫ_u7|Z,Hu ).嚵. oR"=36pI&>ow]Ti^;9=]ɺm=D1ЖQ&`=}^ /Q ȩQ1_a]a_\zwwsÀ.{a(q\=&Q)COUB wZnQEK("ϗ^zED3>S=]c)űECS ǜO^H^(d%] ݠ?ˡz= "IU棘"W6S#Tzbx sHhS/_yZ\mbfYP\SVV@B״..PGu~ U#d-rn1_l!lU 7]lgݬ{=kl=jK*[l.+ E43M S 6lrRVAuz ΪY>NISMg3h6,A1A.Q:Q2";7H=U˕-7.γO}X#]'if, V$1ic 1#om$omhP6]}?jd|9N3N73ggȧ!AnX:,h>~|;y|p6X"^GYiۉ@VAm`z)N!A.I~9 3ꒂQGBaRPiaD]DCiiDPuaRiA4" g'`̓TүS?+~A"=CU#X~ }TN̵8?)٥nII$%AJiFK{a٫s;3zΞs莁qدj2ԒCbrvwv&wH 3u aSL|XPBC<"x9*lӢ@~IG~p&2+8$SKo`)']Zɞ7*.ݖQ!lH\a+TC4=L|u#֤,x^^+Z$>X|JLkpAD 4+83t">Z:6"x_'mk9JZcGT8. 6;p90TkQ_'L>(4E䰘̠p~/^$6{T #\)t=.=&P@#?ϱbJvɪ$ZꄲHA؀#W7l"[2M"a ~dͮ}kd`c먷݌x*qܒcc_5R>gUg>\ڛC;KY;O{Y]F}S_Lvuڔg M1Y!.V5uufbysp!e}5ҕK- ϊZ}ZרZòhݜnrs4oPL_"{:(r*Qj|aakchDPY3x;YV?C(u4~hƺm8$i}pO(m)0Xrvsw0n-߉ۉdm!T)<%'Ṡz95uua}mo}믋yٛA9^/W(&Pv~зcf!uib\?3 Z" {(V!wksՓSOb{$k]$%bkŲ$s_%K͔c}Xq4>&Zjtyk?](q@t +d"Kl[$K$Dk7  6֡jjjMC] qMya CM dbZxxG~hZl;k<>/;40 h׶heqWIZk9C+G'?0\(j$g^̕?롌_p]řN 7z}sxxuSCjGsvp%?Ղ!I`hlX째94VNsveM[.c?#YCT 2?awƹ m0ޅ+ Ճ)u g \{fvg,6|5zH4ܰ(sW /N '@*HViff<'T2T p~AE5Cj G6*0uO$.Y/01pď,gSZ 6yDgllZm؎[̗Ic7 vtuH/׬=Fwl#Hb7$fkR)2 \~}d(0׸ȶ)W(hilP<$\Xb_$DLPB0+Qbq{.>m,YX+ݑ8 g_eEy3g XA:J6V~棖 eޡW %z7n#wO -d!eHR#4}<a,o>,^4Mq/Z|D+@?S$uq!K 5A D;E<lj7%ݡNPISM.p`T"ZzwR~Eٵ~. <!zwhΗQDŽ;d}#Ny8Lqh1!5vyw}ߔ^=Rժ};Q&ǁ^` |LILЌ9 % ~q?DKDy8VH\kk s{BPO, r> zOR//+m=.N?"*?tp_<+=W cn.UM@<*'׵өpEÉPgNPҏAp=twSLx1}kE Cimɫ|kC wݓ3|hq/?3q+X%\:#Y%[3M?3A?=05R!Wʭ  BZ[펷͞hHu#m,}Ԍrv{{^RP\UK˪r 6ӌSϦ(9ױHx;4lm̕Taㄟ1%_l38=kTxmts󽳎5L=|[,0.2[;)R:/{UtA~ZcDp{}eaqW[upn|v/^;6~zYsDśXknV&DM7ո̛72dE)3ɽ_rg)P#!ޒ,&t=aAxYilJuTrGQ|Z?@f_T$&aknII֝ ;NSYr#%dL_%|#B+S4"~u-~_*?-c!k111ͿYRLDÙhuMLcK6tm>?]Ǚ?Bh1>}}Fg[t!xZo FasۨcM+y7OyA*1/$>ur/gtorgiCkk]Gg7Wo#{miW.eb%Z )fs!n7NaM:0\ݦ8CZ^$E|&&_2ߵc'\&xgZMbYN=v%UsxQQKJvṾV6ßD'%t?GIm{Q( 5 "42-efʙ8s*'=@| ('I}tTMUQV˽3o[wgS-gǟ"]> ؒ*kiYxw{}sa<^ jWR?a>6sBנdK/\yhؽP>t,.^|둇QSj9{$ZUK1_uøgmv*<5/9u:mYFٿpE =k3/SN|ɗ*(6$na+:B;58664!^i1;;v83j`QeXsڧ+4o9F9_c1N!!+NH G Y}l4K8"#3OPв]/3:V=~Kw.XBv-i ]ifoFΕ&zՏ[ yWx՛= my=!_=>vy 4]$SK8#m,S5 .kHudOk^Ņ)Kܓmh&.d-lU iY{Ǩڗ(:HFP#bG{P~BxRtT~f{x;x:xo{I%D-R|zLҏz8H,TQOO/͒n,<-=Xn=@K;z‘1p e*7aL#9'G<o Q`k;;);P;a0`S/u_h_@y9_oTn(!PW Hϑݚק4dxHl1mUʟ~=)u Z)ꍩ_z.Cy \.A Z`Wpţe'mSM#lu̿DԼ̿y fyw/^T9wE6}M5typ'T{#ڱ76;xwk/R2)xXh5H1_ uB8*qc}n=j`e 6k%9,x+82 Bl}S4Ts+Y`#X57:iʨvZD,M0@/6!gDKņT/2 vm==l/|,ouO㤗*Yj o .pv4[3ǭk7/HkD`orʞ!LAQq|) t9,Ee5YjE/,ё:QxB)M1 e0[[q8mFK+?kїqح((ؘkIUPTS5wӮ ?> o矛[h/ސ- bc*vQ<7| FݢxLcI1Qtb`2>0aR#6F6DGI!#W"2߭72 DduICݿB bh])Ho*o鬓:l~ 8 ?J8-yߝhw.s D$Ko?*NJ'pEymlibz%C5\2\3aū~/^g%VͧPIНyeEXyDYDsħ,JO𨪠u* E :(蠮L?~0`|^n%4)Ageu/GK[s5Ru3b "~Q !w/UI2? ^`>i(-OS?vv /X>55%`h}V*[[>>M+'ʤi)Us!b|i]Bk~_uᇜ70n؍%_.]+~i~2vns>gUQF\^$}Qtr$oE_lWāqB95qAW_[c9Y^ETqh祖S=^qDEOtSf'.xbVNY\%LuW;@%a2ulOu3x><&'.}!% ]M~FřFYYӫS忍&Ðj97[r{LwWWGC8 Jq"Y-,%cdm}2GRZÃ&̗qU/oa;n݂n]} /[,S& JX[jk23eC-͂͂Mw2%*1 A"чNccĝ1󮶋U *djf&GV} 6 3n4ȍ{QGnUo0A,Y[c2vh?[囫X!r_)BH ~.DnA~\-1tRZ- kC@'+ Lt2$)?=QzQ_¸{,m?(& [%kZ(H ͣϣ Kke+!YWGc;"ߧ}Xy+2~xA~˓vۅiftӞVܖQJ^u- ul\Ծ{k%y9*ZiJFF<߭l*e'KDNAVC@g+_&l=dTM%{ i mckkbGL@AԶQIEЊU֗C&??FZ,?(Oj7YSPߥdI)xe_&V`Qꗡ[EH2^!9_#2 _u;Ga^1u%ӀU=EHQkӊQmZds2.V:VlZ3XStժH(b&^Luzܥ6ԙgiWq^ Եh 89Sd˔1cb jW=ѵ !)x/T׮ۛ&y]'kK7[o0T29,G,=]l  bc/WNnsebwU7O;6i'8yfzDfM#naWK{;H*_SKv3 :圯iflmlhn%.U" my]ŽLä`.Bhא^l~ۥQhO2T6\.MTyIj9j9j9ji:^ǜ^ EJF@;E>CjV@r7Ŋ?UE4Yd6R.*R(~YRnm!7Zƺ0>1_l [{+?U,C5SSؚSLSln# 2lIuR ,Sz\`~@R8(s HeVj5*Mn keoj+7B{]K Di=2rC4XN0AHZ$",2 6cWlOI3W蚦g̶v54=.+/j`4X8F}pM0/آڑe 3˽SBp#4}?7;餟%K[~;lEzgfZmxj Mk4>ƹQiE"׍غChmPJ :xrP~[bIjõOlZ~G1^gHv"JƟ 7([(z>P:c~ycb}w/Aybh.QLƘw(+0ΐo>yQ~9\'^sozq^ e]+`zW/xXOL= &t}Ss&X?.\ҞǨXzv )`T|v!GP3$kZq#uM١}bN" f!c&# UB v_JG@d `/1p6hn˺O;7,dx:VlI^1|nmtbE6pRoeeuMm],Xjpa{.J.[uNbO ^JNֻ,xVncJx8~Sd@qHAf7%B 1C|MvEyy_8ʡW %GʿE] NEf,iP EG)NϘNitL Ѽ fOg<8gQ^n|WxM3Z:$DG@}X p9%vU== =A/9@!H]<0٣#]DDV,{S@{uK$r.C]yA!D>gȭi5qӎJh n :pFiݰr?Lcc 2z_Yc T8*ӝ`6H:(\,>N?D;aߥ"j@-8p?o4 ӂ%ޭeo17P+3Ԯc}csh5}x,{yw}'xˋ' mc% 8Qޒ8np$ =oQ_ʐ+o%EX!gn*,x%bȟ.m\f],>eGna(AcMtyԵ]tC]̫WݒrݛX7KnV䙑ˑݡb/Du+z ,\֟ ijS87 wZYVVa#- *f4>״n])*!~TZ.!ǿ{ L /B7P5w]vYsV<.So5u"/mh<+j#_@dM愒X)Y^kt1kM_9!_nn!('gHٗQٶPivIGs\ޯZҖ=uCQcF_B1̍?#Z"i^cmiPmP9F{,Qc#U:jƫi1d"o͌aÏG{sX ؋8Kyz;ZD'*+_F+Z澕ϐU(yAqlm!bX8N$tϙ?S=,c&Zt f(%F!縏|z lj<&\+l#1yE_{n0$pUs&A>9X #P=)c4^Սềjf.a>"VlgѪ{BۏK5I@jk@f’ɊNA:V|L~#WqpkɺtNILh  oi*Y$\ үb^aD9b/KԊ% l cm#[fpԚ ^B=yDz];3{{hNo?_<7n8?}ڸ)Z"]|^^P^q|¿Aΰ h۠jӨ+ٹ/>FF8䜀Ӿ$}w/Ay4$Cz-xw"@'l3 >k.'!s3 Q?1s:ӄ?G k1%ģ}zy;K L T6L~ܒIEz#=ʫMeY a!AaⲹWN`sě+c[x N~%og:w N &&z2'0г~68wLr\1j[u"MTWtDyQf*Ed7P[H A \s9"1# ^By Czym@0V &9L\]45F<;&؛+ڃ" ؅;tD*.Ix)9\~q7 sv5gHէIէH'I5r~,z[ùG2ؿiEOq,yWUaQb(NG2u&Jwve&IKErq0+;`͔煅lv !343Ϧ)U-&?͓[WG920S߿ʱvhotfiu"Mô,3c+,p}merpvv_ afj$[T+l#[KDk{gHHAΗئ0~XnMuvU0Uմq>(yP!fYmmuBPpe֞ZٵLHgiʱ'Qz8l{8 T#v;D~Z o-bʚyL ~|gzbR?@p8~3<%{'&2!|X{;Χ-):/P8cܔRu{ϟ#sqEg} X(.k1EV?GP(xx\jP|Wx .Kpgm 2 ,~_`?:gx!~7>Z1s()@{;/Kd}B/49$7ZFa:U4}0cs?tϧΧVFZJROŴE\)*9MB̓4KWDk7x ״:j&޹b*-!Ь!a/|R 7-xXqPoϢ<HR?hS%4 ߿ p h˥Q+"55$qX7cM=sꉪ]LD2^|ܷ KKpw_QR5sO[l=+ytD*ʩ}5w>oD~6Գt p5OSؙel@oI97 ![w =d[@P8[~o5-Wb^>j\q(viwϲއ8}_y dX, b3JWXF%`ضPE7(dLYNN؄h]`U3G/-خ ŬQ N FboLbQGTE@E8k5Kj7K(F15O0]*S%[7X߼M!BuJCYsom[7sG?6A!V~v^N.9na!fitҕ(4=hݴ5 _͗zxV,&鐯My%A變{SrucwJi3&<_{Wy~VG:E )y}< _g>iig$lhB+Bʆ.G؆!6c⏛4N=uɼD;BX;]~3} w w1J?߳tQGB6&ϘaXcX%ϙ6]C`8Pk^+_% B?~8΁MP,fioM(mZz m# {LP9 TK5@P7sa%ml/b/?#o*}"_#\#a]#aX{1'Q;5a#Ԥ/L"h bh6>"yP7V.ƇTSDk#/ͮyn!dBε&;[yl닂+uv%r3xO.^ %?f Lu⳵49"bQ}ΐla _,h#'Uf3J>G :\#\$l֌sO r2]> Ӿ >6_G[ՇƑ+!HeOR-nn`^ _!] \P}LC@0Pޠ4$ h=&B)-gb.s4RY{Pc4 3[-ڧ&7;+.M~Tx 9$ w %؛ZG/בVjXtf?ԝl?3Nu%a/@! 6`1U Qj4Y[sIc?]VDq'[s5Y(_} @X xXG#^YM"*5GcsT1H#* n+i71e6`bl}ɷ O Ug ~ڋ:RH@@A P4<|B":ڐoS(L|Sܿj$:Xy8ȺRnX#?CjdqՔRr%͔vϏYlзҺř*o`&IK-}Ȭ^}U)a1¥ )9u5+;".B%KC%VPSUګ<P ۨn ¶?ROr6u aص# B! taMa[#_9BCn!~7P}8k+If)gh>tNMӮSZh!O's["=BFz0l]"l\O"_b 0 K$T$]xGIm1/6OpꏅE ̌n awmnSZrt(IgN2 ({Kc!eE V׾E !+ԙSLu\m-LsԳD3 su/cu:-"="pӥu\C5XQA)1!! ^kޯ0f|ut]xc$=/I^y3'U=$$l2䏊6~I\6 \W>m"bZ8-g6u-_փrȳͱZS$g@z*GnG 9q !1111!J>o -dDu5ppS5~8KNv'h[_?*\((g+fK2PWRcD؂@{<|1{(?Aq]3vTP&FjR%\-$%uP?')ȴ+BӶ4P=dSSvZOM݂% iW6J^t"b@!ʁ{  9UWWԲO|%(Vn6j2j8jo?<:n>V5)8UڍA<]66P~bn|C)s G3_ܜ +~0L"l"q:^}RV4 %9{کG;ȇF{fX*DBA'DrX8k}%αwRR|^_' SK=2Ź&\uqvk|oY{e y;6zFN1eČC]ȏ-8㕷SUL 7'i?֢-t6di^f%;˕KktqnܢgMoO㗯IO5`ځ]2$Ogk|ߩmkgKs$G眅~L!gXl+*f栟2 f؁v#=RŠd2- |ufphe=֑SFDFHU:qC(u$e,i"U4Wx\Hn`⯰Ӣ߷ct׳%{y#?Q{OQ;3ÒCfƝ^@[BY_ë^xy~~~~tO8JU5͘.>vK!v+_S8:3Q&/n`&W[&}k:KRq5HtMrӨZ߾ڽܿ8@߸ěf;S4q0 ,M*UmŤC%aTR0 INQ͑,jinkhj &4,lN{W*Nb:0sP$)wC eհS^Q%YLո=T. 96Fn?U=r◨{D*7Rm2^2{ HP.Q+'A-P0Y~ N5M %- ꜜo[T"DI9%L*{airj`hh^0I'$5Nʣ{18wW[/O{W$VgM'; >'1%-`mz7(31DT=L}0L:H1[-{GWWWw_aPUXmun"N( qQ{FQg?®M8>/Vֽ?W1c0HQ$_w0Sgw5O{/ CxklWF; ː=HPr_ NFlv ݽë YUګ<6Ah@@TAX]I6 S[pzg0"v(^dlP̗@\#\YFBNX7L"r 5J+{s1ɺT92{̧oNw|W-+>}E{cxE6O;Sw~{0 @ k~/TծՎ6EK*{`I)3=lK$A8 F}j> oѠ?:U??Iޕ ԰OtMQ=CRD1=Gs=ň8I%*[ljԞLrpN* Y18Sxi廬ٯZ)ʗ(nFjۆ)ahr{}ufff&:AFBbɖS#$3x(po;z(f]e 7nZpV&|?*3WP ϣ:x=&Ťrvp5NVH%?| 08tI,` guqzt'QR7,qDضwIePM̦f##M#_RQyؕq䃯"qDn~aRq:Inr͖tptj֜~%\5tUD[aV*$u/'0C⡄v`j ghF`x= HZᒯ霧#K,^g&/6`6ݿBjxxV e6,[6bӫm^'u]% =ҏs MC$Kh7x+佤ei,2yEϋv 6VNwWg%Gh%g7п?j_Q\&j`flWԲN!lgAF[s^F3?9WB>è#lcnoѯs5JUgr0'a#f-$fm%b$f[]gP%ט]E6ޅ:ʼn\URTyTzR+GwaQqH]G茪?*eaeqbgQfm`Sɷ YY"eٟX2 urcVa OUګ< CpwC {o Z5cW7y v- 5{'j߮PcdtTG2D1_8[@hJkٶWAѹ-F3OċKXctvsݭKxǷPNm7(6{{);6PO/axwCa ¢IivFؼx?^Dȴ &R[#Su-lAt=yE}όO |i/j/1hJ`K%s' Աgnxa0MwHbWgFX{D*N/Jn$﹢| y$Y.Q$a:w *҇ł[,>oanz$oa QOp6fޟS\L^ΓͲ\uVD.tlBjs@o`:!@y:):4;s»,z9X bX{VwM7VUb<o!N\A=I9EM3}4=l" I'_#Yl9 DH-h3.qaeAd|}N,hR'ľ\xu m-}A{`3! Vᅷu~jI*ߙPbOʦře&qXN)(,}zm!YN5.26o?y3Ojx~^NVV7,ems" [ws4}L^*b$KSʕ}hlho,̕,5߃"Wupll2n n/ShA1P]ីlȡ߁q,sxM0B8gõE;KJ\S*R!]ŸK?|x|z 01ߣ\b}>"~} 0:ǴMc4ő)>U."QzSwt;*Dbqx}zN9Kz.-1T'4  &`>s{ 2/Fo wsܶ=:餜nق˹Gz{ziF~; >Iv7GEtq _ȞX,k]|q,~VUګuKLUJoJ^U =VUqfy}pLNI +7M\>B+y}21̄uDGdְY.xMg7)g\*e4QgNa# L¾B@igQ riL{P?ZJjc#7ޅ}5wjH϶]~c (*?_~=ʷsސ/_ F?[>)Y`*j)ϥlO[(sG!PFϘߒ2S? 4|N^ww1:TyhyF90O( W6'y<>0[) yF6)U;hdzJ;M:5O9Y!YOu|)pm_G\=nntWH'DScXCȇ}f W= ˂dXYFTxEpg}ǟ_=!-*43ET3uL#3l\PdSk(_-4^5"@8:I$̸ywأQJݭ +{]g_V-n6Y&~r KH+<`g(tEbl̎r9:VS çA71'{+Gx[d #2GŚ)nb"5"K""c8h?:XFw2 CH*lcZ&]f0<Đ:P1(U}:k6V%^Vo-Vhq(pKcz W"6 ]Ƣ}\N y"uT"!Ha$ e['hvNwNpj.Do4`X D mcK;gҨUJBߜZ͌NhH?Mu.qmwt3ݢ`:'NE8}BG>=|>d @}Ɠ Jk.RvQɥ@D:Ǝ#p .{ ||/Cz @HNk@ YPf^vO_f$t-xEu \?χx0?!^fM-m.nkf:L0F?^~ibglRסR5+͠!kRsV`0P4H2hxuPj`]mJ>:qoʕ듓nfCl_~fbJ \Z7Mt': m,O"q1m,o|nV1, O 0vv7ձ4 v]"Ô;@| >1]*AKV`DEpB*bT | 2qZ%B#HDLjRbM?lm4=CØ#?œT` "m< 6 HX,˷VO UlmK(6ߘZiӊOu.vuɉ副"oꮾUǗyk깋r] ytA*Ej,= @aJle4΍_{d< L2Cڼ~EJ^4u2 zOPnb>BtAȸl'_~}<Q KЙ#]yF(2L. @ V@aY֩'۶z:h9pjRy¡ 0YGg&iX/욧_Ղ#ެ 1(v=jWykHQP{SķWiHYŸATn V&ECHT  }uO~iÝルӓ垻rQ u4{*&Ng; oIfH|o|l?;##m볣s~ uQ'E?22JDQ]%r[x@-9 5 1_8G4物s!&*~gCOU!z7 9|WtWC{ӧp7PU5ƭq9}-FVn a!Ӈ֗houc|A 0rZIķ0D0 &pp_d$M}\ Ұ g@lAHAEp GvA}`@PWp=AüBFxw OtG|C+gqzwku-sE >O3`@@{B'H#L=\- "  8h (TAF aߊ~'p 6"4!! W Ww`+*yw߹u6ױŕzRDz6\>q8Ag:@sHi2'Pc0le z~\^ោjqL,ިf# \D>㿃xyLӑ~L_ OhWh6>=wP/ԭƞB~ X6"6Q}SJgU\oQ9$Omp&_;K&bvy% @@XϠ4\ H;9p,+*EcshSTM;Ml}>Vu$P3#mrE6N ̏G3Ԟ SozhgyOy?F|;7D} 7 S  灈)Af!F 23yUNZ*9xbi).IҶٚҦ&$ o)WkGi7/^1pq6.R-෩ЅG?LH/(Y`h+VЗ5++%."Ք9 K銆9 ZEʥ{sgudJ?5%L$uj/͓MkJ4ٮ+2e \U9}a%W[Tҷ0oݹ8"NJYJYZI~N?mr?c~鄤Z;V$+}[*S.MRr 0O]>IE /_,Y*ȡ`jw3KI1ffUz3 Ȁs.3T}\1%ʱ*fj2ed(sHsd}>urIy)2|9LTjE,JirR~jz~:ٶ:9K0lLY";X(䑬-/͒GEU7omҞ,3 |2uX)d: DV<<\(]Z&^kLO:ϋu~Dn8{;CHu;nv n)-$w}H`Ap=9p7U0gO׺N}0_T;zDnl2jt$:vQ^…BeBBK\LSK'Dm{?'xz8; 2l=Btcu=%?;9ޞBW ,0{2rݴxb{y] =ǭ&K!L[^}++c5=S[(c-6Jl хO-Ec4jY~?ry˨jћ)jF˫sS ;IBv0Js#:\~}TH$*AiE" aȜM@I=A W:h/C9H&=u0}c0^ X(*`CզאCLqF_ETȍcM{BC]lsE68d'vӃ[$ r:o(l^_Ufa?2 2(p(QsO!-!.KMqfq5$Շ,;1FW\&drF]ޞ5Fy2N9f9 ̹ȹ@.*^{UEy~Ձ=8{3>9O6Qx)$ j .BeBChV!PJPz/%P:,1V{>&@c:纄Eu_&7N?n̞LZ¹cɥ2i`%FBykC-!_ k+++5$~P="icF ,S+=g??H-vp;A+@w L#bc6Ͱ]rvRgBʷsw Kp X{efG_ j}+7{(ki:?z>4LPnPjjtLl<\L/I?xyچ'ߩʕ߈iإzQLqhE]5'$آۥwW}q c>?ҧ nmb7ְ [i"\"i^Oqn@g%be w ct~Bc;U;"(xǴt^j| fv tu{ghDuUd2oQ4=x riFqG1 .cn,V'=GE LHijp l V/>O5wB)r^@b p*N-9)%L-$^ `5skٟ[gun!M_!/l?Y9>uwU:v]:׵_Oq|7p&H稍[ۘ3 )o  ˠapjTqtT^T.vwaB%Q?'qu{wCrFtzT~1{FNr`os_}(6A}:^%d#@?)5Ƭ'}\:\k8Y%C߯썳S~ ¨,'Ar`m}wx:ψpN.8{3 #=-<%, 4>664)||-= y \/LXC]h9TXįtsh<j@Wyk/S\>-KLZ%C !oGKĐ%PAo0F}WoD&kQ2Cf=To JP&E[/sɪ7c͏n\ݣȅ 0Uq 0 m)kN^_xZWw> q- - [5j6  jjiUM26sěRB2 ʹ #|u@0ۤRVUG:N^- %pT!05}3K3jKnَwNd.S>$vYXD錿뜣zWgR,"paS4U-f>HVGÍ݃)*nB尿msW/fVllϿK|3l[ǸoFh۞˟|׬t2d?ρn;DA[ jnX!T^,֥~i:{6A!WS"Uu$1ӿkkB`h)2 szEe w1>LRO]=[BY]%dO9߲+ZԬ4"(w~ZA2rehL]R)v>yTpQ?VA/IJLPcsieFnR&lI} Rz]qS} } }}ApxLM!*dޱV1)6B71W/}.SD..G0YoU3mb@=M_i|!]\m<ە|YB_ { L,ad<~j ?u#h 9>eߙ33g~g=*VVQQҖ<Bv̪qdf^@mJ~[~nS\K=a-$E_k?(OZZJcӯߌE%?0oaAPiCk@/LΕIO(V0@ #jvJ/x^=L8@qDtE$l1$_'[^*VRWVQܥڑm=~ds٭駊hNhOhAi U=}R#,}Խ Cz.{?C&~6D[ji * A"`` -(ݍ"%HHIwwww}NG'<}͵X{ógزo53KIV:*r\ݤơnGR%b)iuS50~i5\*S n*Qf jeI9~E UU #!ޏC\8,ork=PqzsA)LOepD,Λ +867Go5ĝ̫ÊY@aKibotSPUS3U7Fikm+mp|}=?wA+P@tQ'ͫo(:hpxuào[y0bAQ>vI96V~r |%׻/qOp5r M^6B9rŐ^>mM~MΚV&zfEQ&Z.*bxRh8Gw\X㔈4p0qW6-5Vݰxz%D<7]ĸʹu}1{`J'Tk@CsNs:y/z:* 2*Ƌu +@h<Gq=i$8?+#5w꼵ŊƜ;p荾K(Lю΄,oyO8ʛi&gZ)W(,:OZkjJ{loށ 'Ayv 6d6~bX?fq&]= _~^#y >. {T&T`c4/B$̟U N>[dK;-y#Ӹ]L+V3YRԻlu'ϼaܗO5]/bBҋq:,ƴ*LTbm]݄^  y}'XS襶?`>>s̖y#\TC e_ڛܒָ"D9a*:we y-x5D 2d,T/<8 @'..#)x{؟s30|)QWcO"_zsrԒL˻j<7UL]_Aն%;..:1zzbd^I"[AZo{xJxgJ]uKC,PXfq~I#=e-T-մC\q/mg3gɚF5km;VSAHNS`c;o8zCS; *0bQẵ)W8>}\EهCԁcc`L`~p|/k1\+S?i=t7z@Qfrsq7/FkEa1&\|}W_h$8:fIjCEQL8yQL 4ŇNdSSs@؍4<<76̅^=نY^'xGY*ԤG.ah=y=h͑ĎF;nr`G @a3翈{ےtt|#Ɋzv o?\m:QwDM+UyٌV~!WƱ샓'f?Z\zl,UL5mڣ[FYXIǮEĵb>L>%M7M<"Q'Yn7}΢s4Qe24CilXS,-϶O.3.US|+қ4:`g-)pzua!=2t[zðpvGU3W/;MJ 3wl84ӴyLO5;y߯܉7ɕ0=v;dߢ뺄ȩ[+Ț 5o#*s([wv3KE2SHo'%fbVMn7661554!azF0q9]w;EK5] [~8z1C^ΙY)FJ TwEꨵ(eN<)tb.1])>]tGw_5ɐS bGZe+tM(( VbU*.u^ߴ tt?u쓳PQo.=_THUXtS MA}Zsu L"]6tʝo?!Sb{5*i74қ6_ѷZQy3|/%GS;J'I_Ͻ*Qe/b/k0nbFj٪zT$Ke$saw8n߲m΃Y<}m=D$-5 GBv?a[Phaz6i5fݫӢW-kS,nre_9qq2?sKv (-8!CXKt'iҩν9{ƒ½"f<{dM_=@''#W*p`)v&L$,?*BNz[=k'b%ߴ{G~NY N@QnK==Sj)*Ov=ɋiJGf5VՄ]@QND/d#xX,YpcP9Bƙ^8CfSp GK"#zWbh00LUds?C'S"M\s)!!:!8'4md2Q+|t!WrN2dߙz/1j1<ϗpbLBM$ ocisw+7Wv.rN J2Bvn<ơ?07t}_a28mJ{]ߕgjw( [A2 D? 8o='>mY{2"}xtDH`jOF蓤@gEwS- U}y}}C-=#msE+q;'.|"u7e;nfDPck&39*%~{wog%\G5:^Tif{3jb]9py5JUP?Wdc*'Ssϖ}ol$L?ϗM@ qpu".{}F8;dڃowbp>QR3 97;nڊZ[MM.ZYmC5:ֆ::fz҆/ Kzalcdfldedh n.h'o.dahq_sTecsC@ <- 1pcȌۉm>v4ԟ+aDeq"EP^(K T+mɇ 1m;.ݪc{=d42>廊彊5qe$t貧K`&lV̋ 4|! e9ͬ]𹏉L+k. 8W'kb*n>$v'F֨\n ݇bxOF7O?WIҼcw5#m7ۇ#Ti Yk…]Mݚ4G>@у5tnۡ=2Z6y6M2›dcqRFc߇(.\'cT3<[@y /'8QБsm>b"JܭhXIn4vkOԙۮb k: i/>P0LWNYL]5wjle^q6[z׍5wpxs՟8W{U wסA7CCC ʮ:+Ɇ+rYi=z|1f]34h{pJv'>G/a禣[ zϼVxRw\; WH\J^AS^ISYN[UJWS|c!c!HN",\%)B+i*9;VzzZk$$U+Vac3Ӗ[L\%/-9stx` !"kMD!7JM/GPRVwèJ?cOW 9|֫!7h Bҕ Kk=;Gv.`pfz/㹛ZO$pO(J.SW8kNӈv{r }uv% 8vd|l Ad/QU'qU瑪#UGH^&&a:gMor%v> SS9:ʼ0a@q!Ci<+ŗ8JJljԍ4r*zSZF:MiѨd6ty,94yU\wyB hyfff"_y<f0OMm6v0nh充+ JQc<%veCk/ =:y}NZSd--p緅0ydlŘ'b+nwJޟ'md@) YC-UcϩQY5^9Iq  ;o/*$#):HD@|#w}Rmu-JO4 ,5X6:`X;n*lߨv'~"dWoT._ WUQ@Zi۩"2Gط0. ΑXk7 P 5y[(ULe\I|>▓GG6vˆ؄v) kGI",aMdTCLX%D F]TX4;i*x|^}LgѤ&9webg,а@@ <.󔕕edd:綇|'E1 GW)\я{ùG9fٖXPNRQ-5}CUski$"TLf9"ǜvDVL[afoAv?YA K]&O괕ՊT+ǟ~{㯐䨑oKݠH(>>PvpqwA }v#.3"i NO'yo}3ThČª┭thPPCȫ4%$C-F{wvocFF]p^-sWZCJH h®  3Cʹ)WR.] 9r6%tOַH4TBGWBC$ZN\6I{.#jOIUⵜCWٳ^~)aa Õ{Apkp΂KgGH};>^H/"abcbRΊBKH ca$ _ڴ X{_ tyl q鼺x0g:Q\-n>< EIu2˻BIٖyۊ9Utk$^vՆbݝX*:E,U=eGZxk/jkadNQضM٧rY|P%Zً=uUV3VN'oD;}rE[-ێg.ѽFc'}XRՆL5XYQrs˖NVJXׇC~'w'99ۛF`{^Ҡ.|N:63J"޷֢/2oxXnDsW|""՞=w^ r ¹z- Ctk(Ya'jnכC>W3%+m#<<{/ ?gu9{ vGn')X %*ܳJj&[zˤY餩JI˼Y3y-veP^m/W*x.N±dV^0)aDZi&Kq#f"sך >|c᩠L"ݗ"F9uWif jӖBonԤɭf)jz?d҃1>Χ^/TdZnǞ34}/J'֥VLƽ5$TgX_=koֱ9zYXR60Ro*}l~\؇?y iKuĭFv+Cmn'ڼ5|܎5up+e(v{o$\$E]+8ߎ43tg~ Ծ'f- 9;Ljtʤe?6`czyڇ=n&^Apyn輋@djF=d񟥐>i(lťkn,g ^q`w/PӽIs\DT t2&aI nf(uSY 8 w~BizF(;ۑw's_Wd{5>K쓏yV=|yQ>z=KaȻ=YͪK5tA4fGB3Xs.N]ZϹho>燭̵)Jqs'v`[,`IyvH8]8^jo0/s]Wve7=4n$.f HO}O!~<)LUy [bYüb9}c}][ s$ wj5Ui%y\M>fڀ!7sEqZEzN΄֒duǯ"-k̯(<̣0x(+1"ho ii(a!,AT59qҾ›QOd4٬?}ȢK-"O9ж+/woZ߁>ޣ%kOU2d沸]Sh4M}b 'ȠyB hyn߾===}|? .1;oH-[&%2}z˄ʔpt[]8{ݨĀ#.m6ݳG᪍V(#u֡(P;PPd( z!IKE߭e 8G~;&`XP@U@ dlٚ6jf7Q@P Vw/.%۫:Zi |cB >F̞Jl|Z)iE܈"EQT(7XmWipvDlWnú@ jC`C=hݑC!!aDD?{0e+󤦦w=}K~ @@ E%$$Μ9t*111tl_/'s?}:v]888 ?Hiiiѻ*!ȗ|>/' 0`@@ 944D' tFIǏjH#yBJ-==LL)>>|;?TDJHH8E[NʨEz5pSyfכgǐsE˵K/'?5hV"<뭦[m7n*++7''+ͳ6D;3Ly!2"8###eDTغТ]LIIAy"_V#-٭\,ййТK",͹~<|y5h=}UmÕ96X 9>)f %H5˕o-xrezquiEh lšCQ5N+Q 1v`k![mU Ի*&􌼵c04O4Og_(_d/)"d,(999T"66Βk/\CB"ډh "3!D<rYkFl}cypqSoxIے:丸ys?;jk=K >L~jo}g͓݅7Ⱦgʚ|_[J%POW3 !0U!I7AFK5AIǠSԲE4-^'\1@+_)KOqsw;?vMgѹ}C//05O?r~ȷvGm8.ݮM}u^5mM6F9%E5aC>sᯪy"?gD|=}MQum݈IvL--#mlDqr>mSG}Tfs66>dϧ?{sZD)-,,޿/%%lϿY7-98o1OSRn*6zhዴZ+_4;L''3Sܹ|̯^}xZ/+au %5,9.Hqsqսx= 9| @a??b>dbJSs'ډdmllG^Wl(K_n^u1ϜNFD8anx^B᥿QBn:gyرwҙҝ}q`I*670dàl&m1-Na5~iu!%қW<7LjBS7(A#&C)2M1%u 4s>5goh`hhpxptF8S#QA]GJy4^U-lnoZES͓1ANn>}|uu\KIIr7'Z> V!\p:Ul @ dYH;vw:{* ?XDl"2鄼z$=s ښOrUp/-d\O6V.W?MajB"s;Dήe+Z[[eepOUәSKKk+ @yS}s3gRX?wy[auݸ8FauM?G#70 Nܢs\k_u2+n9MxO2͞|I` ''4O#iBB)Lh0 ]Su 5,򩫫PHJJAZD~V yH.D>cO1 b_{}%;@Osq3kc/?46R~ߥm?-_ɏl_> stream x1 o@DB:s,ૹ? O$~ }g?d`9 endstream endobj 779 0 obj << /D [777 0 R /XYZ 71 757.862 null] >> endobj 776 0 obj << /Font << /F28 123 0 R /F31 125 0 R >> /XObject << /Im7 773 0 R /Im8 774 0 R /Im9 775 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 785 0 obj << /Length 1200 /Filter /FlateDecode >> stream xڥV[6 ~ϯl`ku[vb]d[#Yl #EŹ,64IXpXnfm *2lSYlmWYk.ڲr9:lÌ>FaI(axJQx8inu@d$&(yaѫ_XЂ)`qVmA^n᫂V:ls5e5+gM\e)YRFI Ҍoz Wc'46RpĂ=&C_(Iklj%n-ĭWc޳T}l a%ٓ*J:} **ũlq!6팹8C_`_giw;vmңGISF_gAiD;[Nlr9zAGT|{n]^[G} w a]s m}K 9/pMEz$#&*S)%BXzyb6QV(DP/ 7:+ݶlҠ$ V4yOX؄3#?N΁l;>z#鬲oheNsǮ[f+|LTsrrhbTDYQKX ,#W*Z  D{ſZ^w3\#m3` nȀB*^ ɉof]p)$b"ǣ;G$;Z2* j}]y+3`,TI&Yx dE/'{.N  hfp4 ʞ{-q }K?k2Fe]#e&%GǃsLx+rpeWGjw dJhtb4C5i .O$ܤZC )RWU($ Yo8-{<;14&ă;}!G~M eq/]|iXV z endstream endobj 784 0 obj << /Type /Page /Contents 785 0 R /Resources 783 0 R /MediaBox [0 0 612 792] /Parent 787 0 R >> endobj 786 0 obj << /D [784 0 R /XYZ 71 757.862 null] >> endobj 783 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 790 0 obj << /Length 214 /Filter /FlateDecode >> stream xڍOk1sL'?זV<Ɠxmvۺůo0Pü@Xf/!`B|G&h(<>5 *r"˴J_B!MC1^NC}]$%{TNEP%H_J<.[볶 'skn$ٻO mrOE١4kg'R-Een$0~Mj 5tR endstream endobj 789 0 obj << /Type /Page /Contents 790 0 R /Resources 788 0 R /MediaBox [0 0 612 792] /Parent 787 0 R >> endobj 791 0 obj << /D [789 0 R /XYZ 71 757.862 null] >> endobj 788 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 794 0 obj << /Length 304 /Filter /FlateDecode >> stream xڝRNA +\w'$B! )$ A^ 4=X&8EAm|)8G cZr~)yx;`} M1D"$L^ 29vRu5;٢^j|@GJ1-չ8c*N,fBOֶt8^RBTT:r7%GBYKx/:MWSDS.4ϻR?4-%LFo^ j٩БZHjԡ~gúwŇM '|:ܥ endstream endobj 793 0 obj << /Type /Page /Contents 794 0 R /Resources 792 0 R /MediaBox [0 0 612 792] /Parent 787 0 R >> endobj 795 0 obj << /D [793 0 R /XYZ 71 757.862 null] >> endobj 49 0 obj << /D [793 0 R /XYZ 72 720 null] >> endobj 796 0 obj << /D [793 0 R /XYZ 72 523.691 null] >> endobj 792 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 799 0 obj << /Length 220 /Filter /FlateDecode >> stream xڍ?O1 | g:TuH{*]Om*>)ޓmg@xfɁސj'!4A8xzQu.֧Kq ۻRxIm}%I%afWTE #l\_;:6.k lpL<]Z?uΩ0[U'OD _taĮ)fܸN937CR, endstream endobj 798 0 obj << /Type /Page /Contents 799 0 R /Resources 797 0 R /MediaBox [0 0 612 792] /Parent 787 0 R >> endobj 800 0 obj << /D [798 0 R /XYZ 71 757.862 null] >> endobj 797 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 807 0 obj << /Length 2134 /Filter /FlateDecode >> stream xڭ]w=6')\c6Ϳ3`B}|i<=i62+1Lñ\mY3 plׇq%W^ݤWF#p0w`k>4{%: v93eHE{]\3ge4y)ϠSmyF`)z ̐*?T3Xj4Vm^*!Y jZOG*ؾA4e4JQ^bn6Q^sps|mhYvq.M]<8zOr-=+8>'HHd}4 EE}L/zѕNd\)g%]Tj]|3MPKEJ.E_< dFਔ Ѿ&4YrDA阏̶ \}QMQ\ߢW#>arY⥶nN7l7zO)]a ]MVgF3Pw *8?m7 Xmb ! zߞouCjJ"LlfRK,m&3YM$=oуVB+M%dZ1h5c[5 aP8f)D~(i ՘*HdJuN}ND`yRZE܃3t!B]vID|qDQOa+l"X`t.ya6LHb_I*W"$tH@q -,:p(&T1LC1_Vܜ)LŭH[fAsVJGF1tu`1=!Hd$ҙ<%rEJy\PY 0&2^̓Hj2`hh]RL N<=)Avy= ĹxĸQ\"Fd8=֯ fmcA>UvJ'h *wh J~&t$o|Zӓƍ wbu "/4ۃ'!bI\b>L= bMBRCZS|i8W#RIʩ2?6ddM*rN `wr-Dfx*lǖ5I: c/,لymY4 iP2QYO ;& ʀ#MDeTRL.&r'#ɏش7uηV,lczvشv#.-߸B]Q wuxpX90'T $<C(nj#ǶiLn&T02w* e0^! ddp o۶m ~+ f5V:u_WEX\,xL?Y l<pS8)R:$_2` PZ⩔7%b l Sh-^m1R|G=]3g@i80c w Ϸ}Ƽ?xp#һ$ l\h. Ŧi9p^UZen7:˃i09Skߚzk . Ѱ;0E˷5`l\~RK0L^Srڻ&5UQ"ޜO4BNX^KGmVG?$ N> endobj 801 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [71.004 164.727 179.725 175.631] /Subtype/Link/A<> >> endobj 802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [71.004 152.772 157.718 163.676] /Subtype/Link/A<> >> endobj 803 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [296.787 84.88 336.432 95.784] /A << /S /GoTo /D (term-traits-ui) >> >> endobj 804 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [513.4 72.925 538.506 83.829] /A << /S /GoTo /D (term-traits) >> >> endobj 808 0 obj << /D [806 0 R /XYZ 71 757.862 null] >> endobj 53 0 obj << /D [806 0 R /XYZ 72 720 null] >> endobj 809 0 obj << /D [806 0 R /XYZ 72 561.284 null] >> endobj 57 0 obj << /D [806 0 R /XYZ 72 561.284 null] >> endobj 810 0 obj << /D [806 0 R /XYZ 72 153.768 null] >> endobj 61 0 obj << /D [806 0 R /XYZ 72 138.759 null] >> endobj 805 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 834 0 obj << /Length 3463 /Filter /FlateDecode >> stream xڵZI6Q^! O'tK&trs`S'pqOmfl?e.b)T*3f͟J>bu{r'KG|pxJi78଎[& *ORYr0($b)Bܖc50;1KkJt AJQ~l,hDɃ P,`tn M´l`ϰ5HJJ65fU`Q] +m`,xpo'k4Cი*u5 &Re 0Ae[Ekaʢ{؏Jw~@Wim_C0 VԶ+xpy(X&XC6mz"Z>#[D-}KX2* X-rQ}iQ4B=fE%Ta( Zr"K9S%(@9#$+yljR;v,HWL-T1sӾ(%`nb/ r`e/W_]sϬ[3a3e[MBƎHyLP/S9miԅ"q=f0g2ċ腣ŇzBL2ogsPy,Pkxd$Ka!9UK6q'›E0($Pu2p{bſ>'dGN uN@\IneTJ0ڝ~*P-Y[Ś` 6{\ :TE `Qu%#H.35ƽ#™'ʰ\D:?)%KO; ζxvWpiS0bXE]4>\W-\#Ð6;rX\$$|E>8ɉ6Q1R]h9"02KTUu[mj>b_B׾T/had= =u%W }8.0^e/@Zeʇ^-yl&};'h[^Gk-SHU6D@QqD7&.?t>'5Ny }841ĄS~NL2A3p`n^w \:P-ubf. iNƒ€|3MC;L v3}< .waTu`vq߫>T?dXhwcf *|Sr Wop!C*Q}:[fֹsdۮC=8YӳAQy9{&ЎP#Mʄ>=~AnaC4s4!iP{<ʞsU'FͰ۸[Q HsDͭ*y(8S`Sw||] qC M1LQACa2Ո >(Ur7mfǣ߽,@=2t#%z:GE?rJ")a`Q I KHˇc\plH?G%N-l^p nJ%ތBC2Aof׊ ^ng xy)~1T){1 FojνCN&J7O=YE'` lLJ8:qI.>nx,Jlm8!xDT{I:$xьF̯HI(_x#'G |ŞI /|J$?֫`ގrx!1'&A 1WYG+L8tdB;jhtODO>f 5 ~%!:k {V ?zJw-=[{ endstream endobj 833 0 obj << /Type /Page /Contents 834 0 R /Resources 832 0 R /MediaBox [0 0 612 792] /Parent 787 0 R /Annots [ 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 825 0 R ] >> endobj 813 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.969 612.791 400.212 623.695] /A << /S /GoTo /D (term-mvc) >> >> endobj 814 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [512.155 600.836 538.506 611.739] /A << /S /GoTo /D (term-model) >> >> endobj 815 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [443.984 588.88 464.089 599.784] /A << /S /GoTo /D (term-29) >> >> endobj 816 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [385.326 576.925 426.949 587.829] /A << /S /GoTo /D (term-controller) >> >> endobj 817 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.78 505.194 168.936 516.098] /A << /S /GoTo /D (term-hastraits) >> >> endobj 818 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.724 469.329 178.151 480.233] /A << /S /GoTo /D (term-handler) >> >> endobj 819 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [385.166 395.16 420.364 406.064] /A << /S /GoTo /D (term-instance) >> >> endobj 820 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 383.205 126.736 394.109] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 821 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [298.686 303.059 322.825 313.963] /A << /S /GoTo /D (term-panel) >> >> endobj 822 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.438 291.224 148.134 303.597] /A << /S /GoTo /D (term-item) >> >> endobj 823 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [166.14 291.224 193.697 303.597] /A << /S /GoTo /D (term-group) >> >> endobj 824 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [198.23 291.224 204.208 303.597] /A << /S /GoTo /D (Hfootnote.14) >> >> endobj 826 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.052 291.224 523.646 303.597] /A << /S /GoTo /D (the-view-and-its-building-blocks) >> >> endobj 827 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.092 261.216 170.196 272.12] /A << /S /GoTo /D (term-29) >> >> endobj 828 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.822 261.216 208.853 272.12] /A << /S /GoTo /D (term-29) >> >> endobj 829 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.792 193.026 390.218 205.519] /A << /S /GoTo /D (term-handler) >> >> endobj 830 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [417.039 193.026 423.017 205.519] /A << /S /GoTo /D (Hfootnote.15) >> >> endobj 831 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [277.596 121.295 433.27 132.199] /A << /S /GoTo /D (controlling-the-interface-the-handler) >> >> endobj 825 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [284.139 102.623 336.374 114.321] /A << /S /GoTo /D (include-objects) >> >> endobj 835 0 obj << /D [833 0 R /XYZ 71 757.862 null] >> endobj 836 0 obj << /D [833 0 R /XYZ 72 672.015 null] >> endobj 837 0 obj << /D [833 0 R /XYZ 72 658.078 null] >> endobj 838 0 obj << /D [833 0 R /XYZ 72 452.392 null] >> endobj 839 0 obj << /D [833 0 R /XYZ 72 438.455 null] >> endobj 840 0 obj << /D [833 0 R /XYZ 454.581 374.403 null] >> endobj 841 0 obj << /D [833 0 R /XYZ 72 358.309 null] >> endobj 842 0 obj << /D [833 0 R /XYZ 318.233 252.414 null] >> endobj 843 0 obj << /D [833 0 R /XYZ 72 236.32 null] >> endobj 844 0 obj << /D [833 0 R /XYZ 437.853 124.448 null] >> endobj 845 0 obj << /D [833 0 R /XYZ 86.346 115.924 null] >> endobj 846 0 obj << /D [833 0 R /XYZ 86.346 106.219 null] >> endobj 832 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 881 0 obj << /Length 3238 /Filter /FlateDecode >> stream xZKs6W- M|lGMʼn!Ie!p!'$Dzh/eA"F_7'n͋.<&D$Lc_Me~Uջfשj;fϽjaT%~ҵV}߯xvuEMIv4H7߃M wy3(7.~,tD[I0t08tP> @|\ ou˫mxqC6)"&c'}|ϣ*^[;FZ~^Y6|Gowˮ.4SFJK7f@o{{{o[mGb%"PuүػgQuCUj bQmujjv^+ŖQ.Q]Wu59!vqb"rew0R ±ki7Uɛٓ*by߶[{w`nQ}Iz ,A#QGkU {ld{P}{m~ qKcpggQAwѼݾ*<,1 tFFpQ m4ZX9>=X9x&^ ywLz8]yV-A*3ƨe u&[H. !m5O0z}z֙ԑ"Mi-أN j;c( _p֢`8>ӑ"fЍEzíq}eW(~ E0Px9c?~a dÂ5a/jYsGq0 3žiP;rce|JU g6+;XKwN9D+?oz d{ͻ,#؜REO0 v5ƑPޒ ^}K~"f+'!c1NcviB-؉Y1(#Hi1eSwl-H΃tuM0΁_zSh0f.0#\g eSjumœyvԅqw؝ D~",VJ BTS2ܩ:v^6,g %hS>Ƞ8-g Eu9mkIjcm]UjZ4[oN0>g?f1#u[kw lݴui$xF0f#'tkurQYnpruZsqR"LTB]gzea;ZkV@\='[,9to֞d Dslr4Z1_*,ZlYԧwGws1ŕwvGnKZuo`;z>,lԜ м<{y/_`dgBi@"vyMMյ/UƖ}xc]`91UY穲VU٨'rNPqI`$#Ca1D5DK2eaz J<ċJ7eUZ)x90ESJ4wWIMg#PTG2stѥ=!j@.q#Y\88f+gO{u0;W܆q Ye 2R' ,nE4 8H_)lc HץT֟u^^(?fy{7ȑ:sGXK3D6 0$EoiF!2a"D 1{c (x 7{&Pƹ\d Ɋ}]щp A`V-ՠ8ͭK@Ֆ-{^_٭9M۪&$w& ilz\w6liܙ83qn!k \"NKa8[B 5CwLq:Vj^ex6XRn+C-jF$~d|q:!坭sZs0XYzzIA8+NZuËk$dc+~,GFr_tյ3Ha=^u<"#mM)HQO)[O|)s~y~錧 7= "CưDH?H}W|Q}{qLOwE,n%7rh- W W8A Y'bPuN<9N3 .V.aEUӒb$QI^J1'LNe/N:DcPJAS8+t5;0)1x LQڽfg׽0%ɜS1<Ƥ(kif"R8U <"H-m "3ev0k5fOg+K; _)Agiد,E*T274bH/8' Xr@3yiҼ ١ ((ѰlAH0ڮYN 7\*y:+֝V=wCM6X"'G [ZK\)N{.-%rfneVYgT.Ɣ)@S396:R\rFN1N N\f^?3[ endstream endobj 880 0 obj << /Type /Page /Contents 881 0 R /Resources 879 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R ] >> endobj 861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [120.578 586.878 162.978 597.781] /Subtype/Link/A<> >> endobj 862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [325.767 586.878 372.74 597.781] /Subtype/Link/A<> >> endobj 863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [121.135 568.945 143.611 579.849] /Subtype/Link/A<> >> endobj 864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [306.399 568.945 318.354 579.849] /Subtype/Link/A<> >> endobj 865 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 343.464 228.789 354.248] /A << /S /GoTo /D (the-view-and-its-building-blocks) >> >> endobj 866 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.596 343.464 311.957 354.248] /A << /S /GoTo /D (customizing-a-view) >> >> endobj 867 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [331.413 343.464 433.333 354.248] /A << /S /GoTo /D (advanced-view-concepts) >> >> endobj 868 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 301.501 251.919 312.405] /A << /S /GoTo /D (controlling-the-interface-the-handler) >> >> endobj 869 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 271.613 166.943 282.517] /A << /S /GoTo /D (traits-ui-themes) >> >> endobj 870 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 253.681 244.932 264.585] /A << /S /GoTo /D (introduction-to-trait-editor-factories) >> >> endobj 871 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.212 253.681 410.852 264.585] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 872 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.545 241.725 229.567 252.629] /A << /S /GoTo /D (term-editor) >> >> endobj 873 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 223.793 196.642 234.697] /A << /S /GoTo /D (tips-tricks-and-gotchas) >> >> endobj 874 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [258.011 205.86 383.615 216.764] /A << /S /GoTo /D (glossary-of-terms) >> >> endobj 875 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.008 126.013 384.163 136.917] /A << /S /GoTo /D (term-hastraits) >> >> endobj 876 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.749 114.058 181.727 126.551] /A << /S /GoTo /D (Hfootnote.16) >> >> endobj 882 0 obj << /D [880 0 R /XYZ 71 757.862 null] >> endobj 883 0 obj << /D [880 0 R /XYZ 72 720 null] >> endobj 884 0 obj << /D [880 0 R /XYZ 72 498.21 null] >> endobj 885 0 obj << /D [880 0 R /XYZ 72 468.322 null] >> endobj 886 0 obj << /D [880 0 R /XYZ 72 450.389 null] >> endobj 887 0 obj << /D [880 0 R /XYZ 72 433.433 null] >> endobj 888 0 obj << /D [880 0 R /XYZ 72 419.495 null] >> endobj 889 0 obj << /D [880 0 R /XYZ 72 194.901 null] >> endobj 858 0 obj << /D [880 0 R /XYZ 72 194.901 null] >> endobj 65 0 obj << /D [880 0 R /XYZ 72 179.892 null] >> endobj 890 0 obj << /D [880 0 R /XYZ 86.346 108.687 null] >> endobj 879 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 903 0 obj << /Length 2087 /Filter /FlateDecode >> stream xڵk۸ P8sEJc~IEp-zV\I=p$;lbEjHE: (xs* Q* A,ER}| WyvZeyn£#;[[[._yu T@DdQl7?sOOJg5Ne;`[33&Ab 4%gRa Bhn,Q467U+qHb 1iӰ3Q|s^ȓ*d]2 M|7?@S4 AuX39;6XSFB? XTvF5nӱ>[(P< {^."%ط25j&v=nOvɃ cˀ>Zdc޹o;g0Af#`Ѧ'A{}k_hYgIQ+݉.{ ^ٍȡc|y&d͔/ZYzN8 8n6 5#yBw,n5]=&aęFV9m>ݶM}X AdD}CF2Um7LYΊgI(/UCAedѭ\Q ]PVN!j0]h8^|z~6~Z"89nqN،x4Wz~ʣ8MK:^F z;tcgxiqt76g$ 4N F@ Tq{6K.u]m ~oWH>V/ 3TRiPѝE"k4 endstream endobj 902 0 obj << /Type /Page /Contents 903 0 R /Resources 901 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 877 0 R 878 0 R ] >> endobj 900 0 obj << /Type /XObject /Subtype /Image /Width 204 /Height 196 /BitsPerComponent 8 /Length 10279 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*.X-|)aԗk7*Lr7~#88֣_[pOes?ϬQ+CMc}w ť}oml8<5g:ybFk_+|ya3 gx;T#&aj4F7X?أϬT:vu^EgcyQC8 ZÚV[zr8m9uN.i=3Tdo}`bB/? ꒹TyĮnb #EF-%H8Rx#֒Ú^b[/~ˉ"f`;[ڧQ?cSk1ϭhE>Sޭ:+-VvcGTC#G|uӢQ߱Z];SluZXQ36Bszr37h24k$QR{dx"*Xz1ϭϭGGY++*XnRFA#T[GJ883{JVy<{H3INv>y` ww>wڭ95Mws!$59MqZ%G\)C6Dt)۴ǀ 2OL` Slt8!hTq8HdIU, oqW*IԅhӖYziCui.2yBH@3k<%iw5]<.pq%Ӥ>>o$mr?xbg%{5TXji2tRb; x[; 1. *25+x}Ho5ZZ-ȃBÂ`b26Ardqsڵ^~t'H~k^tE:p4Ɵ܊N&RLɠ$F06ppr26i\SU, U7 ԯz޿?:"Wz|veZ##Z{q'ڍĖV>1g+$4%?RqF.ZUӀ~?ʪ59N1SX["i-!(nB*w2'Z u>(k>̳(OӚ޿?:"8Yie*`$[Ԩ,RVp/?n漘%Vfrl1jV-WZ$RbJ키.{[»OUӫSq[~^ld՜}[Vcڟ$&33J~..et_lI";xU<8+HFӅ} ](wΟn>>E/ٮ]̭~TKK7WA!hK\/'e5»OQ k;JsbjK [WKmx0Y·ZmԓH 䏜w51L!I7H=Ր/Ի1䯉Tj䎚T)8 :yL]&0|/]Jd}7gPDYTV Eu[*EdLO23֮Xȵ'|4-K_M+ xoD(7 Ȗ+ދ"JHє¦ ( ( ("f5"99`sXSZKKSlҖhD!QU}cq_GS_}cq?7.iOUY_!n/]hj=W >ҞecG>At{_(Jzn/]!S_)꿯VW>AtcGrNdt>J7/k{}:_2R["ۈ\/V3^S~itzmr5HћH`29 WGqM6Y[nfx泂U2c+) N(jVq-IJ(o-pG\YZ"ӭ!mGXf%$OԬ7s'G\'ؖ-"渌Y%݆Ŏal5ch-ZS^_N n~E!ÈOC}gZ;jTK#/ +ӌ-!$Vd4ɤItIFhݛs2pKrHkž-FI%ӖT{uBmnpY$`MI8LC4Ѥ8Hmd1 $d\8&3LvAv=дx$ҬV%۠ێJ?!@k:"^{X>%Df! ;C$4n_v-ݠYE mHRhrTⶅ[D g6WL H/x4Ky@ A i^&5X]_OCn;ynkrx7x# 8 E^K;!%F i\wvFxӬm,t  08!>_*t-/ ҬB$nv \Z -o mgH&6dvqo62v[Ks׷O.&" Uᘩ'jo$7'Gi4i֑ċ,̰(2:f8<Ձ K3N#A+Fps($O,Zm#r׃ĭƷk-E ,OLֵ|&IEG'?Ə9=5WB$G.Oor{ChJ*?9=4y} ('?Ƌ |oC5+!5Goտ_ ׯ|sEiu4j_i]upf?u=K !EW QEq.RX-/7ؖieIO-Kx`>\qi\VwtRjJ AV;+G÷oz($Y2̩<.@-EsV~, {S{`o-.P`#ť$XxcvX&WH$K-^5f%f\28f]Er~0?^f:KM4(U Lgpvdkm)PBݺ6NTϻc`#UK홚)3(0xyO&oF%o֑hMf?Mf?MoOxyO&xyO&裕xyO&xyO&裕xyO&xyO&裕xyO&xyO&裕kk}Ye٬AOvbqP8_#~_f~̾/V3^R)j]i"ԿҺ~ȵ/|43῅+*VK Z^L{s^qj&IeidJ-m#GH]CbA#5fiWCp<)$N$N2NNMX364lPcB B;6fYEEpYDH:sZPu΁]K$,cđ9;U܌F\՛}>c5Dp4,QBonP{h%nVͣ/7R l|,l^F˅WQG51Ui=4o|F@&/*kb>cxoѼz7ke>Ѭ_ ǣ&ѿXh?/Qc2L_UϰX=4o|F@&/*kb}ɣxo51T}X G37%;57oտ_ v.۝1c NL)5oտ_ ׳z#C~ȵ/|4-K_M+ XoD(7 ˲MQDk! ) AHX;NzL )&C"+[M[5X eYgWCr~n+mj:wF]O KRWA-gp8rB[[Nɼ۴ ʊch5Mjɧq)iQm+3rfbNIl)mԖ7v%^.P!\oOW{Wǚ\Ьq** E"$B2̮C<*xVŬ-ۀ4Qmnres r8^ۙo61ǮsF2n2tdhi`H#?,'cbSQ+A%WNc*,<p}j樂Bh|@duazg#"-DɎU[$$}(nOX6K&b[]p3uvE7z}:7)ѽ?:ntoO@?OFtپ|oC5̬8`x=_#~_F|߆-K_M+GRJzB(p(׵o m_;q󯮾)k|9 BEhmWe\F]BHOJ7:f-x5 Xf,yQ0UIc dIڢiz 8\F6vn :+ &ﱸ1:ܭY<8?$ WwMKt%U0 dFqmWMkza{  \,p$ ZЮRܓ|5_z?$ W){rOܓ|5_zh.sےφG#CEsܓ|5_z?$ W( #'jG(\ĵԤ-oI-<,|oC5sFe~KriOszOWMyrGTNW[qI(I " z>wx'd#R[>oo&0XԢoo&[,jQYko7Gx5([m_,0 mnO(O)PKsMjUg qgjǗedg5g#\OZT<= <= eWNkUTT@7;Ef$$io?_?_լ#۴X-6N"S1PuPJs[JV,˙.#Gyv^XXe$\[_?ʙTn-YfgS$.p;sEfX_?>Ǭ^/U\{; 2Fa29ՋxnWRuec#-ž,pğŸenws@Z[J΀X20FC(8 9qU~Ǭ^/Uc?/**^躞d`oȲ$e>`2eS1U,M#SdCBsm;<Dc?/*NQ̷6Wzlv3\Jf~=v*q<M*{D1246ko2UKX[Ax T}X_?.=cAx T,`_#~_f{[u@Jųs}J?߫o(9".ais9 zg1'W8ŻrX?1'wƊ)rG&>$onE ?7}hğ4QG${cO ?1'QwƏL|IAE#n ?7}hHğ4cO (wƏL|IAErG&>$onE ?7}hğ4QG${cO ?1'S`L|IAY7N#I,''֊(Kd4 endstream endobj 877 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.348 706.884 187.437 719.377] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 878 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.662 706.884 367.64 719.377] /A << /S /GoTo /D (Hfootnote.17) >> >> endobj 904 0 obj << /D [902 0 R /XYZ 71 757.862 null] >> endobj 905 0 obj << /D [902 0 R /XYZ 361.182 698.082 null] >> endobj 906 0 obj << /D [902 0 R /XYZ 72 681.988 null] >> endobj 907 0 obj << /D [902 0 R /XYZ 251.968 271.039 null] >> endobj 908 0 obj << /D [902 0 R /XYZ 72 244.972 null] >> endobj 909 0 obj << /D [902 0 R /XYZ 72 231.035 null] >> endobj 910 0 obj << /D [902 0 R /XYZ 179.406 111.192 null] >> endobj 911 0 obj << /D [902 0 R /XYZ 86.346 102.668 null] >> endobj 901 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R >> /XObject << /Im10 900 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 920 0 obj << /Length 1992 /Filter /FlateDecode >> stream xn6_!`2,IS!ݦX`L-qM^$:QU/NWZ ھ$w?_]y%2H'^^_}{8 Ի3o^pW\q5gL 3໓|B,$ dgݖuQػk`| --jI#0D@L@O^4,JIl, G#nC{9Xd+̞U]/Of$aQag&{{x#ɳX~e5A^IMm^F]b,څb.peyZ;lWj>%Fki~P$16' }m &IVTQ%B#1- '_px{CkF@ _H;ՏPc}IjPMB;#-.,d00&%X̊6~iY)CO0n# ҥA>jYi]N.Ϡ>y[+1yrˢ۶t>[tEk(7Mcti9و8 2 Fgp`pñiǻ)ڍ jm(PuZ˅&A)N „%F')4i`\߾av~u8'J1^ #32BG 0ϡfgwͨ=*/[vq2NGmEN2cij++& کn6j686kzM-T}{{>}yCw2?kBJK H%`zr,`@UEB.ro'iĉ]#@^Z8h9mlxKb0`ԍ+ urq3lpa;XvJC9z꿌K4*n1Š lHnbRp`t( GVˣSwPj,\u꺬zXSne*L%N]TсK*a%}t2ID# [!ATnQ-N#gSjB,2#<í f(Kc2DM;⅍" ) y"8hpBt k 3dbn0 /; DԌMQSl,91:Վ7ZUל).R)/" `UGdf^j{>oPP֙"b9y<" .!{~xhE M+2RfNOU]$Y ?Q%T endstream endobj 919 0 obj << /Type /Page /Contents 920 0 R /Resources 918 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 913 0 R 914 0 R 915 0 R ] >> endobj 912 0 obj << /Type /XObject /Subtype /Image /Width 176 /Height 111 /BitsPerComponent 8 /Length 6094 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;o" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*.X-|)aԗk7*Lr7~#88֣_[pOes?ϬQ+CMc}w ť}oml8<5g:ybFk_+|ya3 gx;T#&aj4F7X?أϬT:vu^EgcyQC8 ZÚV[zr8m9uN.i=3Tc?"[(Ћ}mة#ީ+HǙJ ;tTbrT'=i-9]E%"츞x&o%}_}56߱G_o~R)!6Db0TƙƇo~n`Αm:9!C϶kwh^KJQqQN2Mm*5{wY3٣!=U9<CE̹?1[NQ)Ny۹О0<ۍ- <[A D\Ktnt0ijG45o`n<jFl\XON+ZŜLv 9"L!2=*rhs3v6 .V:˪FrJ`r ~F?#}G̳LFiӶzy~WB9T{''EA&Ho5UIjd d7"+| f|ʅ95EWmdtE!NJ)FQXo\X%&fdxBF7JFVrK-yb(uB 6;NwW :T䵾<$QSڀr ņ4}{WWn$gJ81Kn_r3)N$DlAھo;I1ƌVd!A=:Zq\UǶ_EmUq2#7QO[TUo:O"F3+j,o:O"F3+j,o:O"F3+j,o:O"F3+j,o:O" [Ber$ץל|eR_%u` RJ뫑i"ԿҺˆQEnQEQEG_JW$6-淝&U-ۡhUNT)鎔&a&dr-nrW' ⹹[Tl:{HdM&FNެLʊQ\ܪH$J~Ҫ6dڪt- ʅ8@=1Ҁ97ĶWbuXt%nA.pPĐw/ҼKIuqiieΜr]2F)϶<,NDT[+uUX@@ `qO#Gi}ӭVyw}p%ʭh_/*4ƃ,qkM_v2!@8&]GQQ}Oo@IEG'?Ə9=4]%<tT~r{ChEW|eR_%zό A-z^Ou~MEiu>NzE$3mՇT^շq⻭6M/쯨^A3%&$E܆)!ːj‰\(W&;{gif+p2T``̠cד+"]12F-piޡYY]okV-嵴I$m\iY{m|f<:n .#-0 <iPĮNpE[xTDDfwsKnc1rrʷ^ 4mRSUKET7G)fE@%Xc4XC(J~ӂMȡ ޭǍroV/@g_L4}_L5E_*xyO&xyO&裕xyO&xyO&裕xyO&xyO&裕xyO&xyO&裕xyO&i*x.NS7Ifvgzmy_!RW^ %_K|.K66w\BFa׽u2htKv!)>c̊drFk<1&ú[Y9XK*:ֿ.{?5׌b*'8GF2V1ggik mFehdt Ɗ< 0tzxWGIao)1edID-h@P:q\O.{?4#Oc\٘Wzg6aqt2Bݣw +3++i`Q>b38\5q d9z9R1\.?4#OcGf/aIac2O/"J;)s1%d䀠 *֓:[kI"Y ݂@]{ o] ho@GƏ_+="YDRѰ qVGd4upBG ?5Wgo|7FMy.?4#OcU_>={xoѼz7ks'=?mO^=4o|\ ho@GƏ_+S3׷FMǣ&=?s'?0 ѿFɯ!o@GƏ\ h/=>={xoם|eN_Jo@Gư|c/˧f2tapXV%̊a(& endstream endobj 913 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.778 274.839 214.189 285.743] /A << /S /GoTo /D (contents-of-a-view) >> >> endobj 914 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [248.67 274.839 351.545 285.743] /A << /S /GoTo /D (advanced-view-concepts) >> >> endobj 915 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.177 232.996 362.896 243.899] /A << /S /GoTo /D (displaying-a-view) >> >> endobj 921 0 obj << /D [919 0 R /XYZ 71 757.862 null] >> endobj 922 0 obj << /D [919 0 R /XYZ 72 720 null] >> endobj 923 0 obj << /D [919 0 R /XYZ 251.968 337.768 null] >> endobj 924 0 obj << /D [919 0 R /XYZ 367.479 236.149 null] >> endobj 925 0 obj << /D [919 0 R /XYZ 72 220.054 null] >> endobj 926 0 obj << /D [919 0 R /XYZ 72 121.965 null] >> endobj 918 0 obj << /Font << /F28 123 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im11 912 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 938 0 obj << /Length 1223 /Filter /FlateDecode >> stream xڥVK6WV *'zJ$EۭK-6=p]z)r8o>GGoW?W/du$MzUYTu7"ZwkfﲪfF4Yq"z%I*evoZi`u~#IʺғKG4;ʖZ'ːqѪy lQvW}^YGa'PNC/O,uTiݥi AW'!N[lk b$:ccDH NѢy,VƎv6j/\ mPRL<C˸%GtI-,B໸(HA˚}L ?OȄ>jiNGNsivvZHUΙw+EJ)8k`+E›Qd.'{^9m%B{Z#U҈o(٬iX*7.= FiAEE'm^\!ir2`ɶҺ"Y_*vKCYEr w."gdD9y0u(,ц3[8`p,՜gvV1jdbr^@3!Ǡ6zݚH+Yzi\ޟe}uөϋ `2LƟ<,a2 aM rA I5=²k:o]'s{O(4V[^-N4nv2ire<}ni Ib& d=y T)澟%KpkVÉg5'<#,4H".#\%HDW{ϟS(z}P[hl"[vn1\*gTGW*x=X@YNPc{&s͂~+RYP 周1/ Zb/Лưk{y\@f,{~~N]{/ J endstream endobj 937 0 obj << /Type /Page /Contents 938 0 R /Resources 936 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 916 0 R 917 0 R ] >> endobj 916 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.998 682.519 264.693 693.423] /A << /S /GoTo /D (term-item) >> >> endobj 917 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [434.071 682.519 462.713 693.423] /A << /S /GoTo /D (term-widget) >> >> endobj 939 0 obj << /D [937 0 R /XYZ 71 757.862 null] >> endobj 940 0 obj << /D [937 0 R /XYZ 72 720 null] >> endobj 941 0 obj << /D [937 0 R /XYZ 229.378 566.12 null] >> endobj 936 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 945 0 obj << /Length 2500 /Filter /FlateDecode >> stream xZ[6~_۶ZI󶓝$Te'LK t<~@"0{} H|:[ [?޽YX! =Ye.mw䄶E b~po7ͯ_X bCsO9\("?V?߽]yG@2S VbKrݿ#bD=[:ARiK0¶,K ;eQơor[0i.!pD<13S`($jd0 iQ H@Z=[K &ֲqQ;F^C#B!N7TH< }zocQO."ٗIev\,{ 0!벁x0:4d`QK.o'5U^RpFcjk>2=Q>4[fTh~Ǭdq\[q");X>L0i%-67b+8UcWCךXJYR]705S.ZlUZv'MS-\~Ⱦe( sL(77)eǫ;㓚 :L";gҾ68+=jْCrjH)pqslGy 2%!]#=~Gؐ ar0V9A-<\ᰞ:ԃN|ߣ-vUB #+ɶH^ 7x/fP?qCf j&k?,|W-"QgXG8l)nCV:r ۇ#gM4z-X}@0&sXxqRɉ)<yI(^DQ';$M#=x2K8^lHBdW2_⧗-n ܿ-O w+dm}/:C{eQ[2yvoKI4?|JXڑ-b\\zpG=&jY:dSli{"Y֭6X̷LsqDkɝ&مbPwNYbea gvXE C I޵d`\U-z\[-O3bmNR22|&$A+dA a-TI̲wyW 9_y?F7 ׃mߌ9Ѻ=ae+C3^:0n `I'֫J3r1=dPQWx*U=Rp uV2ŪjKfD6$t I}{>K&Bq/W4,9 kUӋ@ P1^@0> endobj 932 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [302.749 347.066 453.961 357.85] /A << /S /GoTo /D (introduction-to-trait-editor-factories) >> >> endobj 933 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.335 347.066 534.623 357.85] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 948 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [302.749 333.562 391.864 345.895] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 934 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [484.895 287.171 520.321 298.075] /A << /S /GoTo /D (term-handler) >> >> endobj 935 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [317.962 273.786 473.636 286.119] /A << /S /GoTo /D (controlling-the-interface-the-handler) >> >> endobj 946 0 obj << /D [944 0 R /XYZ 71 757.862 null] >> endobj 947 0 obj << /D [944 0 R /XYZ 72 720 null] >> endobj 949 0 obj << /D [944 0 R /XYZ 72 171.878 null] >> endobj 950 0 obj << /D [944 0 R /XYZ 72 157.941 null] >> endobj 943 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 956 0 obj << /Length 2371 /Filter /FlateDecode >> stream x]o6=B=T,I}z\ f}-Ʀcɒ+Io3%I7"I3"9 : Q: .VA,E\D2^r6ul<چz?jd3Қ2B~' @Xd2 Ͽ` )"n=&2xˉdXH$A(2%2։O >)ÏU%ϛLU- Eiֶ40 (BWuZ%ڵ-ԻuݚPi]Gӣb%q_g $IM|+KPLymfZ73v£C ]!ޮڶ^8=Tu(Q$)V@)@0T):.Q+Dؕ`?Qܮ,ՂIM-$Hꆦ-mg\ 2P,N#T XZd98@D '=mPMnK_.G 1JƄ~.iWW-} !VF4 5EG[W- eOKnh`lKKŔ#tWbߵ}kv ̚&'C㧳na}- ?dwnj۵kQlt\YaF2 vzwFNv|Z5dAmI đ@tz 7J!t[]奁y5tWKބ޸5w,7y{ALG!X{Aj{cUiJs.K,mtM+k&G aѲ7c:"h:K 0"f1݂Z[ZC zbɟ *coG0"6tҒ%}[a<%'kt'Lϑq3E 5 XS1ΐb!ic*b!gI6V/} '!CLBbxJ3-S2r{&ށy6{}gU%AZc~`NJ0o' ;8 zk\%?zKhʿ3wo\ψ ! x8;S4xEyDS^xzBN[#ˣUCP"2g׃`MԁuLNri.Rq=v%ÉnB#W:Q&rGhPE4 w2SԘ,E>ġV%?}D!|\CA|Ў3-<{Wndgo/};™ϩȞBXvi7|[4BZ$8j1<"{SIŘ5< S:RUSoIz5daȹ?!ݾ$0[df#s!gs}&ULʙL^OG;j*"f 'zwOaGzDIG$65=]Ex!rȟk+Gf?*\@2oi#S!\vG/x^^9ш vkΟ3^ؤqY6WyM4݋p䗒b$uԋPG xlo`KNC{{hcPMAI-:^B" 9L3?V϶i;56ʕ/(GUҮK*U|bs1aԬݛ& n8\Ա> O!zZ;\&$\]ZF '\Z~~/H=F]Ie.˴8C]?Ŵ3n,>$0Z\h_,pbg^֭<<.57u8X e_>YGqb@%O7֚W Gg"z8kryc96H %P!ZtJ_G[G%]OmgZpm$x^c طHz7no{X+m7[| to9| V*I[3Hِ 3z%"OTdrlCT`!|Ȋ+8 IѾ~[NTnb6; W-oAw[ˢ \ .ƿRC+$1$~?1췊7\rlpT{Xo,8ݹ=ew endstream endobj 955 0 obj << /Type /Page /Contents 956 0 R /Resources 954 0 R /MediaBox [0 0 612 792] /Parent 891 0 R /Annots [ 951 0 R 953 0 R ] >> endobj 951 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.484 572.94 290.04 583.844] /A << /S /GoTo /D (term-group) >> >> endobj 953 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.228 130.683 488.205 143.176] /A << /S /GoTo /D (Hfootnote.18) >> >> endobj 957 0 obj << /D [955 0 R /XYZ 71 757.862 null] >> endobj 958 0 obj << /D [955 0 R /XYZ 280.486 680.149 null] >> endobj 959 0 obj << /D [955 0 R /XYZ 72 664.175 null] >> endobj 960 0 obj << /D [955 0 R /XYZ 72 538.071 null] >> endobj 961 0 obj << /D [955 0 R /XYZ 72 524.134 null] >> endobj 962 0 obj << /D [955 0 R /XYZ 72 207.447 null] >> endobj 963 0 obj << /D [955 0 R /XYZ 72 193.51 null] >> endobj 964 0 obj << /D [955 0 R /XYZ 450.029 121.881 null] >> endobj 965 0 obj << /D [955 0 R /XYZ 86.346 113.357 null] >> endobj 954 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 968 0 obj << /Length 730 /Filter /FlateDecode >> stream xڍTn0+x"j-A K-QZr$MC x"RoǙadKY̮W[HjCd$Kr*E}EGiE1gѠݙNnvq'( XF ;¨,r:jHp:06c!< RH*?GE@TEA35 .;.;;G$? L0EJ*r N cv;|"S> endobj 952 0 obj << /Type /XObject /Subtype /Image /Width 186 /Height 133 /BitsPerComponent 8 /Length 7476 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*.X-|)aԗk7*Lr7~#88֣_[pOes?ϬQ+CMc}w ť}oml8<5g:ybFk_+|ya3 gx;T#&aj4F7X?أϬT:vu^EgcyQC8 ZÚV[zr8m9uN.i=3Tc?"X?أB/bzU"dq+HQaRuy㈙m~eg_o~ϭ|7NfUX$>p3F%i+Hpe;Z~Җ˶Eً߱Go~gV6f.Xep U#'THEyw՛ BPno-P' kJ;}5d mƥ([h$oEsShịO(eYbrO V̗[K'}.h ͬ7h[RHpH[Un9jΝm| t^PyU[kg&,yW23ze<I?G?rN($.Ԋ&D]DJ[ont͒7x#VG1F}Qí?j.wsU,c{4m9o5[qZE dd6{奟c5q左߉j\~{hqxqQ Ek}Tvq|lЅB!ƛ7ۗ3f o~mO^ >cqױBK0µehy'FvVlw_CeD0 N;y#=?JDwĺd1ʉgPS\w<:om'DFDh=zW^tMtIFumѣͥB-x(m,Z^9YpL̊.J;ϴi>6Ardqsڵ^~t'H~k^tE:p4Ɵ܊N&RLɠ$F06ppr26i\SU, U7 ԯz޿?:"Wz|veZ##Z{q'ڍĖV>1g+$4%?RqF.~2ǘ/4EbI\T# UUQu4?ъ?6-~^G̼>aS»OUӫSq[~^ld՜r.(ulf& 9*5ۥ6y ysWE _??G+~tEt,~[b؇ [ڮ.Դ2*Y~.@+OV<%>*i]ynp93= o-X,<^pRz|g??K)p2[uFUWi 5fE9dy+^=FWArα>(@֪O[('M®0 aJF Ա?1‘Y1dW<^m5L(Յ+fdPDZ{+G4 "\F}{/Ի1^'n4x$Kx!靑ވ\Ni*S[E_2+ _j_gHf) moJ{x;si,<zz ¾hUV%dbLDIM)k䥖^:VJNTe{.OMN^|7 oz$ǘS^x;ćML=o1eGQMgN$)2Ē?VG`$am3NJݷ|vF>{|s:w< ?w]c+1{xoD!,5m&MVū[۬sˉoSbyy^[;>a PSX6Y%D#&Ԃ9Ia#n#ṹ"m`%ӣhdgF۷xR%O.5Xk4\\G{/G]pT|y# Ȗ+ދ"JHє‹隞[hua Q>25KN^inZ[Evqp#/r|?l\=ooRLIHʈݽݝnPm-.r=–ޫ9Љ/V`71RʹAuE.acG>AuE.acG>AuE.acG>AuE.acOKԢUI 7F ~;?*٦GgĿk%|xk ?D}{(C{]X a K]yYM0‰ 6[h"6Kdt9$Q\e尶ӭ'HeK$#%'֭\&?co~ڼ+7v󎙡lfh#JAnН͓>(Z>촫+V0ۢя>M#LIZ< DbhD9E1$: Vb򭢏ȏʋj*x|ҚKX\Hϖ ?UswݥB\( 0n}Oob}_L4}_L5w6'?Ʊ>/?>/?/ G7瞙dh7瞙dhCoOor{Ck"zg"zg 9=4y}OxyO&xyO&46UCk"zg R,9NEK +W-־/?DI_8?ZK9kg|0%u@θφוO (v:}\k˄K{υX3q!\v@aPJ]ҹB7yg9- t SPԵ GYG$b)a߂BW.999d&_Z[Iuqkڋ0hLgRv;8#VJ32ǀn@U3clZ$$e/ pyJ>n 4 77ǣ2 I4s8mB8Lr>n -buXeY #}̭ʪo$W^ze$w\#+,39v<,t5cm11AG 7u&Hq'Wd@7`7hj-nYb+HvFgdqrj>0eVV-!yY \+NrBrF]j\p<:Ko$A}ݳ B#6#0nzcˏ4/je>Ѭ_ D+51T}X ] r }X G51UG" 51T}X ] r }X G51UG" 51U%M=lp4_Mn_#ʂ3_^׵qo~wy^"Jž׿ ^_=nIeK붶Iqe&RS߂ryH8 ? w]c++1zQ9O qjvp]%[sypf7sq.{%d1޷$(pPIJTjṹg[[{%ohnL̠ȭ$7 Lc,dn.'(_PH>1^.K{ ! %.^䌙 &SFWn`9άu% p#' ~5v3/b>z?6OG'ѽ?Qd~ty}:9ޟ_Ψ}:loΏ6OG8X?#:`NGzd~ts ?D}K +W-־(Co54_Z5MێtrN((RTNRo-C?祧C _hE/w/iP4((E/ a _h/iP4QG_}?祧C _hcGܿ.,KO?祧CEƏ/]{X"G,KO=_r E=-? &X"E{?ȾAw?czZ?ME=-? &(4}(?czZ?MQh"w/iP4((E/ c& 4m촉IV\991VKX endstream endobj 969 0 obj << /D [967 0 R /XYZ 71 757.862 null] >> endobj 970 0 obj << /D [967 0 R /XYZ 251.968 610.288 null] >> endobj 971 0 obj << /D [967 0 R /XYZ 72 576.25 null] >> endobj 972 0 obj << /D [967 0 R /XYZ 310.035 496.552 null] >> endobj 966 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im12 952 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 976 0 obj << /Length 212 /Filter /FlateDecode >> stream xڍ1o1 K_H|k+@bh bE:PˁDZ:tz֓>#|D<B n9 emB +> endobj 977 0 obj << /D [975 0 R /XYZ 71 757.862 null] >> endobj 978 0 obj << /D [975 0 R /XYZ 72 720 null] >> endobj 974 0 obj << /Font << /F28 123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 981 0 obj << /Length 1935 /Filter /FlateDecode >> stream xڽ˲6v»1UAdǤS5dlҩums ȥW:y${]<{ KBzgOE)EÂDy_bi6b_Kcj3mZ|E ?¤qۙdbǧ.~@{‹$P X#o~7eǙJbogw a,?ל `3* g?%ZK θHoڶΗ3 X=jqbm{Wik^*P%co(e KBƒi=9IQt/NHJ2-spBUߑsH%Y"ބ р@gUX(߄~%Yͫv0K׉dA,.'8?B/ #UٚtiJїZ,Q1AJ݋2|ZϬSs?wָjJ!*IQWD18Q15k)<ڔ+l8o7ׂ=92 ZaFuvK/,oMf>%Dk^M0"+x!~=+~g(h9`S2_boUN gUm- -e1-D8:^qaktj}f&Gf$Vg64' 0V`yd #5n_O<IjU?L;YSB" r!e1L.ͦH$sUvS5&|SleМUO@x'HkP9~lg"N ӗSh RKS<,/"~&4meUCrNMl,H #Za|@:]e*c] hߤwsC=VAWjh-38ݡS͡Lݦ 3Aݡ+2 Z4IB=e̋umTZf4t?u3G)(&]-B. }ܽǦϨWlB$S#WRMx.< eA)&E)@#& lN8p!]%']Gv?h$D endstream endobj 980 0 obj << /Type /Page /Contents 981 0 R /Resources 979 0 R /MediaBox [0 0 612 792] /Parent 973 0 R >> endobj 982 0 obj << /D [980 0 R /XYZ 71 757.862 null] >> endobj 983 0 obj << /D [980 0 R /XYZ 72 64.281 null] >> endobj 979 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 987 0 obj << /Length 2578 /Filter /FlateDecode >> stream xZI۸୩ |LOUi9SZ)RCRִ}Gjѓ@a{ `ΓCw7ܼy౓$3;w"?&~9ɝbBḥl񡒥Gkي_d&E%;ᄍ~|T,D4rͧ_3J$v6y E)a(% шx 1q*-ժVEOc(rgħaOo_d^[tMF w}v/!` =u؈9Qp\ٮ>ċB* n|q @1`q=oc?7DT\0OdBSqoE^,{KNi9<0}9~Cg2L ڄF8Խ p =_FxۣX}п,^`w`cz-ĺwQB}۔b'Bq϶#r:|J&"؜EO(1v6on.}\ɨIUK}ΥpWU ^}D CPBEv<@K߄t<$ݱT`󴟲brY&VUv E$DDi]9SEQ3y*@O-;znw nT5*!s2 unߥz*h sPX/@^]G#h ΂R WVУ7`}ZГ·ˋ{b;y@]dsuлУ#_2x~ c™o ߻i\WuTlbs`Ge͹c@CǴBA &U)S9; 3tj˜=kxGUlVNf4͕Lب|#݋m__l9rS,RX-(dgb_4T4GCVe*5(W`9Vdr\NqY 93dTsOÒa }ȧie.fnv+,iC*m enx%+/%{K1\.Jmh2wPZv*;Z̬,FJ,ۺRIlg3B>a& ]oUiE=aa WU?wYV=qW_؃3頾o_z{_{ahV *Rh'2 ̲Pf>;DS[XCNk4'' #iҼ^=P%-K *<5uwG_Zv20T}_[kMLL<;|hhl,m`,o]^rfTlgI慖uyGӄ!Рbmwzxa˙B^B$ XM>+R,?kAu^6YCݴ(h='0Lhs4# !w?0J#/ønҶ×!靸`<#fv n0jdHBM+ aO{4h1EWvɃ:AͦB=qHYn@1G;]& :Y :N&4'ٺqpA,٢,!^rCKi eI0ygoƬnM3c<2wX97O^ j0>wůx9a %}&b? 'r?zϑ߭Lr? endstream endobj 986 0 obj << /Type /Page /Contents 987 0 R /Resources 985 0 R /MediaBox [0 0 612 792] /Parent 973 0 R /Annots [ 984 0 R ] >> endobj 984 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [98.401 288.268 166.884 299.172] /A << /S /GoTo /D (term-command-button) >> >> endobj 988 0 obj << /D [986 0 R /XYZ 71 757.862 null] >> endobj 989 0 obj << /D [986 0 R /XYZ 72 720 null] >> endobj 990 0 obj << /D [986 0 R /XYZ 319.768 673.717 null] >> endobj 991 0 obj << /D [986 0 R /XYZ 72 657.824 null] >> endobj 992 0 obj << /D [986 0 R /XYZ 72 402.549 null] >> endobj 892 0 obj << /D [986 0 R /XYZ 72 402.549 null] >> endobj 69 0 obj << /D [986 0 R /XYZ 72 387.741 null] >> endobj 993 0 obj << /D [986 0 R /XYZ 72 289.265 null] >> endobj 994 0 obj << /D [986 0 R /XYZ 72 275.529 null] >> endobj 985 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1018 0 obj << /Length 3160 /Filter /FlateDecode >> stream xڽr6-TU%攤6dw*ٌ'9̤jhHFq~${h*l4F`u V^}usotTľ댱SP8:ۣbU=/6pkD :PiQ@RB#&,>RSY*qK\M!G!XxofA3Y^ߛBkAǟ~jS[lm`Λ*M_Վ(eԭ5b꼵W=Cx#-lX0Fg%;a@8jx=؂*۷ ҡlڦ+Y D$⫫)kRpr5)= kya@o ΈaЁvox ܖef_XGh!uA5?ȢFPq}9M8 2;@5G_rdFR@xւ Vo+̆uc:VFvڴ;RRs:DpH*WQl ꄄR/*cv!iHr "?R"3JP!c65J_٧a 3YW2"ᥚ>OtzR0g|!hB 8x1w7+(t7Iys{&03N{17V'1_Yv?]]meĒŋ;Tm 69!+lD'z Z튮r߶=w;}uwOm=h>+En\Wﺦ'qbR @`pg}W7ƯOSrrI5Ya]NjKcQN*c|t!_%mv0wڻ9N~Sg5͙Q>!3'19?l`IÌCWA/{;0!HMgK,û4BA$pwJGhe^ Rcn7x+bWa}>9)KAx)NaqַEgBEɆE4^j-^<\ܱWAE_(aR$a}P^xG U$8L@-q-+q* jYxt̜Tޜq8u:THNgY`Pp]-dk:дBLdV&JYE:c.zYm3?#5Pg4iE`HmJ[< 3._uD:0 #w yH,/($Q-d0:BV .?3G7;pn)c/nNeBǝ OE;i(^p~4М +zWr< u3 OLa|/~kC Ye=_0\xaCh0Qpu=95ϊ-NH竾?[((FO_ h]st"!e7DxfA?W  kF{_,Ofk~\ڎ(N|l8fm,Fh endstream endobj 1017 0 obj << /Type /Page /Contents 1018 0 R /Resources 1016 0 R /MediaBox [0 0 612 792] /Parent 973 0 R /Annots [ 996 0 R 997 0 R 998 0 R 1022 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R ] >> endobj 996 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 626.738 97.913 637.642] /A << /S /GoTo /D (term-modal) >> >> endobj 997 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 602.828 87.382 613.732] /A << /S /GoTo /D (term-live) >> >> endobj 998 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [445.088 578.918 540.996 589.931] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1022 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 566.963 139.945 577.867] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1003 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.205 477.476 163.058 489.81] /A << /S /GoTo /D (term-nonmodal) >> >> endobj 1004 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.439 477.476 208.348 489.81] /A << /S /GoTo /D (term-modal) >> >> endobj 1005 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.205 465.521 137.583 477.854] /A << /S /GoTo /D (term-live) >> >> endobj 1006 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.439 465.521 222.733 477.854] /A << /S /GoTo /D (term-livemodal) >> >> endobj 1007 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [81.245 437.172 245.059 448.076] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1008 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [461.177 437.172 505.44 448.076] /A << /S /GoTo /D (term-dialog-box) >> >> endobj 1009 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [441.243 380.937 470.263 391.841] /A << /S /GoTo /D (term-wizard) >> >> endobj 1010 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [82.049 229.06 106.188 239.964] /A << /S /GoTo /D (term-panel) >> >> endobj 1011 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.436 205.149 271.809 216.053] /A << /S /GoTo /D (menus-and-menu-bars) >> >> endobj 1012 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.742 187.217 118.72 198.121] /A << /S /GoTo /D (term-subpanel) >> >> endobj 1013 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.626 187.217 516.164 198.121] /A << /S /GoTo /D (term-command-button) >> >> endobj 1019 0 obj << /D [1017 0 R /XYZ 71 757.862 null] >> endobj 1020 0 obj << /D [1017 0 R /XYZ 72 697.983 null] >> endobj 1021 0 obj << /D [1017 0 R /XYZ 72 684.045 null] >> endobj 1023 0 obj << /D [1017 0 R /XYZ 344.714 558.16 null] >> endobj 1024 0 obj << /D [1017 0 R /XYZ 72 542.066 null] >> endobj 1025 0 obj << /D [1017 0 R /XYZ 510.023 440.325 null] >> endobj 1026 0 obj << /D [1017 0 R /XYZ 72 424.231 null] >> endobj 1027 0 obj << /D [1017 0 R /XYZ 329.003 330.291 null] >> endobj 1028 0 obj << /D [1017 0 R /XYZ 72 314.197 null] >> endobj 1029 0 obj << /D [1017 0 R /XYZ 180.771 178.415 null] >> endobj 1030 0 obj << /D [1017 0 R /XYZ 72 162.32 null] >> endobj 1016 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1042 0 obj << /Length 1815 /Filter /FlateDecode >> stream xY[o6~@"RT=]֥0u i(6kœ;dI6&M &}D9"?6ɫo\1W&xri:gs6Lm LRpfo'gɿRiPJH"|r+ (ܪ<1 >LMh_cF3JPD4_Ye36M~q0ioJ*zc'JY!$>f/,3)u l\JԙW kRXKc5[_I椭}o0JT0gR",X%)=@hJWiɒSM چ3 3* ~{o0đ(F2D:N }'4nkP.] P̲"-n.ҤIdzIVqMb lPڠ4&:Г*9gT: ZqTt'$sg29l>[r~qFepJ8;(*1K"̀btvYuCPElyQPQOqED'I=!j*?;/<;g I}MM14بs/1)KRWڽw^'dH/A-^'5NvCm+ -]wmnbϷT Kp 8z3R溄]&{u@ \܁:l31!u%NDi#!9gۅ~"Ap$јȖ?wzz/[0b9ҍE]7jP8\jN4(z0[::I"_˲&YDN=ˆE56w "<" (Z Mh > endobj 1039 0 obj << /Type /XObject /Subtype /Image /Width 176 /Height 146 /BitsPerComponent 8 /Length 7322 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*.X-|)aԗk7*Lr7~#88֣_[pOes?ϬQ+CMc}w ť}oml8<5g:ybFk_+|ya3 gx;T#&aj4F7X?أϬT:vu^EgcyQC8 ZÚV[zr8m9uN.i=3Tc?"[(Ћ}mة#ީ+HǙJ ;tTbrT'=i-9]E%"츞x&o%}_}56߱G_o~R)!6Db0TƙƇo~n`Αm:9!C϶kwh^KJQqQN2Mm*5{wY3٣!=U9<CE̹?1[NQ)Ny۹О0<ۍ- <[A D\Ktnt0ijG45o`n<jFl\XON+ZŜLv 9"L!2=*rhs3v6 .V:˪FrJ`r ~F?#}G̳LFiӶzy~WB9T{''EA&Ho5UIjd d7"+| f|ʅ95EWmdtE!NJ)FQXo\X%&fdxBF7JFVrK-yb(uB 6;NwW :T䵾<$QSڀr ņ4}{WWn$gJ81Kn_r3)N$DlAn]ԚƢhRF "`|j2ȩ}򒺰I,D RJi"ԿҺˆQEnQEQEGW"X`gNLpʌA8v6mwy,~܀qQ@fS_)꿯VW>AtcU CW)꿯Q_++X_?? C _GS_}cq?7.x45~ҞiOU² CX_?=Jz}=W ?7.}cqCW)꿯W|c`^}cqh͐]&۷qu\ί ?Z?V֯4jZG#~ V :c2X ?Z?WM}Xp5 +{%C`'' (/m51\AkvR.IY@̀%#`s'nsj=Zvo9Ap; vRm Gy}*ɥUKw6ZS qzc hXIǥY%KuA ~BnV.?-;N>yKv4J<_{u{ieoGvO8Fx鑓0,42W*7* h5Y4n BrN>PLtsM>-؝eyV( [\ o7Zwz r-:2rEZWz]#b0HP?* h'?ƮDT~r{ChEQQ}Oo@IEG'?Ə9=4]%<tTI^'?Ƽ!pAK^h_|4j_i]uyτӭmoe^I,*E>amxMK+LvIc07!~ Hc-N`ڧ,7utW9.fm+ɱY+̱-3(?>F5HL{̆Ѡg phDD'Fe<W(VmGb_%Λm+KHKw d2ET1+),QEsV'/.dYۦ\hw>pׂM_ԵTom,U$Yb#n s8'm,(}R߼8F(iddgwq\U E;b8f?Mf?MoWʅs"zg"zg(As"zg"zg(As"zg"zg(As"zg"zg(As"zgGJ Moٝ~^^qEHׂIb`eWd>5_ ͍do%W!јu]L%0yR ݲHn$O"c'qyID}܃=[ENa?Qa&ڍ$A#yA a+>4𮎓Rc#\[jѡ€0to['ܫ6aqt2Bݣw +3++i`Q>b38\5q d9z9R1Wo['gX̓ ȮlnIc9 (<5k%vΖHy<{Br7`8(Io"@KgK3F2I[c{mde+x U_(Io"vWxoѼz7k+'?o[bz7h=5E?ݷQƮɣxoWOmvG3 ǣ&ѿY_?ݷQE,j|7FMevGOms0z7kξ2ȧ}v\Gů3̞X?lLbW^:.4j_i]*ų3q ?Z?WeԜ71u1+_Fbc)u%.o{-[[;ƺ;[3e z?\0q<%A+_.xKV2?]¯9}Mt>ȈC 1J$< ^s F<%A+_.aW_ttW9 JG Gx4|G"sdYJjA '~jɛW(NHKЙisZ1/ Ztc_{ sVF& ԰3($6]q'MVy,Oo+ <.eX"9  g,OS JG OW0sVEQ|xB۵20HbGi;8k][ `[^xDŽ%k#я JGW<;XYAgl\Q&Iڪ0O'ަs F<%A+_.x4|G"s|]B/OXYJjA '~z{Xⴿ]+ecفQb _eVqpvg>tQ_Xq:7SEn>Eq4Q@:7SEn>E}OEn>q?P΍tQ@h}OEn>q4Q@ endstream endobj 1014 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.054 694.929 178.031 707.422] /A << /S /GoTo /D (Hfootnote.19) >> >> endobj 1015 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.525 146.74 162.428 156.975] /A << /S /GoTo /D (actions) >> >> endobj 1043 0 obj << /D [1041 0 R /XYZ 71 757.862 null] >> endobj 1044 0 obj << /D [1041 0 R /XYZ 373.098 698.082 null] >> endobj 1045 0 obj << /D [1041 0 R /XYZ 72 681.988 null] >> endobj 1046 0 obj << /D [1041 0 R /XYZ 251.968 233.864 null] >> endobj 1047 0 obj << /D [1041 0 R /XYZ 341.088 178.029 null] >> endobj 1048 0 obj << /D [1041 0 R /XYZ 86.346 169.504 null] >> endobj 1040 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R /F62 183 0 R >> /XObject << /Im13 1039 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1059 0 obj << /Length 1643 /Filter /FlateDecode >> stream xڭX[o6~Оj5˻ }hv[Xnal: K$'~/ٮo~tHw"n"Ak($*aaxGJ@+`Y{U:_xU'̨":K)H5B*qv#$%Rぃ 3 L0R2mkeczm@DRE" r ^X0UP?0tg`z2 CQ9>" ]A4ۑ}e?9ɂaTȳAx;/6! ŭ/=1N<ΐRfBvBؔC(AžWC5Ay PR'lc!>{3nK/_sR2yiN{y)Js=_ydöIrxp7H cV2'RX2Lڿؐ%'&AK1s="0.M<ȹ#y :lv%+Dʣ%Ra}'QH?x_7b=G!5юhwSbò`2t BŻ |t endstream endobj 1058 0 obj << /Type /Page /Contents 1059 0 R /Resources 1057 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1050 0 R ] >> endobj 1050 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.776 382.229 496.247 393.243] /A << /S /GoTo /D (custom-command-buttons) >> >> endobj 1060 0 obj << /D [1058 0 R /XYZ 71 757.862 null] >> endobj 1061 0 obj << /D [1058 0 R /XYZ 72 720 null] >> endobj 1062 0 obj << /D [1058 0 R /XYZ 72 373.427 null] >> endobj 1057 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1067 0 obj << /Length 1950 /Filter /FlateDecode >> stream xZ[4~_dX O@levXNslIN8׮Gu߹[z{}B *G/^K̻wēBU9@Nx[\)J^7:Ѫv;LP1T|[0b]k>׻_Dƈ V?%W7; A! I0,0Br#py;݌cJUrQ}#QZJ㨧oWR&R !+4E@\Udl.>%4:/\UhOqzބZ'/֢iՖS>QEw-W:}br ɹn*[kFk9_cL 78"J`wjWD5N:݌ ,!O*ϓ#˒ku MJGAYpE?KR W&raQvS]$Z\ T[i-YHMh$!ݔU6e-h_ 3/ 2 L~?Č!&ʰRji|P1_cjf&hKa:zz p(v4b}p+'%ٶ>煂!!)hmHuӅKʕ B%vds ;u^|k+ONd CSsG@`t(76[̜ΌRޒM4*^F*McvMb\1zQO06tyuH=fda`=|4 mumr 4FҀ޵eUNOi@O͏{WH\KŐdO4 0ΑE˚ HH(u{Zj_dG6`xkGRTmzIݪ5WGA?D@F80o$|D3@yI~Q^?u,us 9aKOj//BUS]Kz@PYOؔKv ⋎.vlm*e=_rNgu"7q'!=d X'(`gl$ߍRM7zpū=vÐ}5!HpLn)YO3ՂiG`0 vCNTUdjwyCUҮVXu:TfoS%!=6_z8eb(27WIǽ\"ϓlfWR*kc5JãܾM5Eak6}'>qvr}pw[gu>W_n;%t2V*l&(=xv|h/bs endstream endobj 1066 0 obj << /Type /Page /Contents 1067 0 R /Resources 1065 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1054 0 R 1055 0 R 1072 0 R 1056 0 R ] >> endobj 1054 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.464 428.185 424.891 439.089] /A << /S /GoTo /D (term-handler) >> >> endobj 1055 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.247 428.185 534.605 439.089] /A << /S /GoTo /D (menus-and-menu-bars) >> >> endobj 1072 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.454 416.364 309.166 427.244] /A << /S /GoTo /D (menus-and-menu-bars) >> >> endobj 1056 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.984 223.951 470.798 234.481] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1068 0 obj << /D [1066 0 R /XYZ 71 757.862 null] >> endobj 1069 0 obj << /D [1066 0 R /XYZ 72 720 null] >> endobj 1070 0 obj << /D [1066 0 R /XYZ 72 699.42 null] >> endobj 1071 0 obj << /D [1066 0 R /XYZ 72 699.42 null] >> endobj 1073 0 obj << /D [1066 0 R /XYZ 72 127.104 null] >> endobj 893 0 obj << /D [1066 0 R /XYZ 72 127.104 null] >> endobj 1065 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1078 0 obj << /Length 2647 /Filter /FlateDecode >> stream xڵk6 !2HR܇^)M9"'ZWYrf8ClA,jH =΍;\A^ssdzR:JI {=6 nώnZwC~鋭&M 3qhJ(h>tD}={MՖ#||w+YEwyj;戠mq8ŃrKÐp[T[KvdhA2Y{lvTo[H ,Ez1x,F3U"ab*K:MU Ϫ$qE7COn¶4`YWEw"q{15DGD { 6…# "Ja,~Q02r'da4L!GCj^e ˺)6z}fssiMG+Pk'@2Pg:B}ǒ߬`_F3M1 j!0ذjӬ k7Q.T&}<\>*/Pa.m#IY SFCg8> )MM lg*t-f%?c|vـbs}Z_sGH^'b*(e,/B2\7#CH n솥'|U P"-c(!ԓXP*=6F1AK̢%lN:r2Mwq~7 fg;_#ݺQ c3S,HD كzD 62%U)*G ;ZzL {"N ա"v_{*lN0 ͐i*6dI>[$ !l{Qc+ ʁ1[p`ċ@><+^PWɎ0jN7LZ"_Zq5'{Ra2bx.+f'p0o^Tyo4>4`.` TYuUκB>iW1ZI]υu4FsY0C h/IQ7ih>@EV}X'0 ʰnnT#rf|=ZEX,4,9t5H1UZ]1h,,5s-$(4EeR!2NkM6;;8䀘Ujir6 vNp 4)򂚦l慃@жE1CWkXYA&´]fbUb2L2 5g1-b/I&m3!g9Tb˚1}U&|:P]6H/V.jA<. dtQ]c"dФFe񓗀Bw}IcRNC8"i+hREKeiB,07]A0pFigYwǧ& u#dGYs 6( ;ޝKkk^EcF} μn5m]c$5mF.)وm="'/xǁ'p0Ա`VUM Z,Jz?6M}H1dl$KuhLq2OYb(Ӄ"[z-;V|5;R±fvy}1T8x3V@sNQPJ|(䲱 D,(^tYK#. z2H /ǟI5s2xwT?<Ֆݓ' zϋYInqhkq$0SrTA(i8͙v7*g6 /+>3y?BG(+"D 7{"H#oUnbDs5=_98<@4a8`?o>|t`WDz4`  B`4%;7a"F9PgU}^v,むW7ݲs'pj>fu po-";)1A蹵r4u|LH8:1_DX0@lT=W3OZwJ\"+q,!PfLta²Uxʜ 3?WQo %̈́ b#'oMeS y.ǁTx-(؈%tC%=$g~pag*O0P 4A}7>@MҙApy endstream endobj 1077 0 obj << /Type /Page /Contents 1078 0 R /Resources 1076 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1074 0 R 1075 0 R ] >> endobj 1074 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.11 593.674 184.537 602.54] /A << /S /GoTo /D (term-handler) >> >> endobj 1075 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.456 419.834 202.699 430.738] /A << /S /GoTo /D (term-mvc) >> >> endobj 1079 0 obj << /D [1077 0 R /XYZ 71 757.862 null] >> endobj 73 0 obj << /D [1077 0 R /XYZ 72 720 null] >> endobj 1080 0 obj << /D [1077 0 R /XYZ 72 502.969 null] >> endobj 1081 0 obj << /D [1077 0 R /XYZ 72 489.031 null] >> endobj 1082 0 obj << /D [1077 0 R /XYZ 72 367.032 null] >> endobj 1083 0 obj << /D [1077 0 R /XYZ 72 353.095 null] >> endobj 1084 0 obj << /D [1077 0 R /XYZ 264.974 283.065 null] >> endobj 1085 0 obj << /D [1077 0 R /XYZ 72 266.971 null] >> endobj 1076 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1088 0 obj << /Length 1952 /Filter /FlateDecode >> stream xk+br.\}q?6PpHiw%}wvaq8$gy{QpD]]|ȂHm 32«E.niJj~LK?tQ89!^θL0NjW]p,`]]9 61̳Ϊ8ɠ-7<M@W#I.+^)0OՁFE)Xp(3̑8^QsXli &؞/I /rρ<"](̭=tg`[&Q8nTm=ue!bB~I 'gXn믏r>l6B4Ȁ\& 9uCm7X ܚ߆5F%B>#I.@L+`{K'"]bIe"x 7J(ؔq=)UJ0:%WL@\amwݛ4v{INÞw%JPlƉ(b[7&/ڬMuڵ.KN5 m1S :M m)s0ȓrKB8/>ӄ6=F.iдtw݂ tZ_Ca41GxLXoiK<\5N<#ϢilBnd4 h@VE8 5QГ竑N&ZGuKkdc%#{ݭa`יu_`Z 0U,@_g7̯uT 'plpsmtR.3 uCN9{ ;B%g*r;Ux>޺.)MkI4\l|B倣A14ʞ^I1غ>(a;0pɮhjZgѱor샀p]~e`1ިe*m'ڽC-< j.<(ΙwiNRP pP~|}~G=aUk5ր 9RUk'P^5qVR}3QmeFi|:/\^ޡ}2lv ơcދ$s'CwX|ι׬ 9w2Mw5any]m,p·'ZXy )ZG6,OZ'-#^jT2YzkF`P 8ceK\Rk0Oc1USCd9`1̭^;K1([|$#Xmۦmγ&-.f(({2/{Ѵ,M4y Kr}έotkgt4_XMdIzP>z@e@hx%9%ijz".c>{5&^XtY+rҙe^Է&ef܁\CztE~$O2O2~xI}=zvM]?c,8^y}^q?]6PlSՏ endstream endobj 1087 0 obj << /Type /Page /Contents 1088 0 R /Resources 1086 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R >> endobj 1089 0 obj << /D [1087 0 R /XYZ 71 757.862 null] >> endobj 1090 0 obj << /D [1087 0 R /XYZ 251.968 464.33 null] >> endobj 1091 0 obj << /D [1087 0 R /XYZ 540 399.419 null] >> endobj 1092 0 obj << /D [1087 0 R /XYZ 72 383.688 null] >> endobj 1093 0 obj << /D [1087 0 R /XYZ 288.496 319.636 null] >> endobj 1094 0 obj << /D [1087 0 R /XYZ 72 303.904 null] >> endobj 1086 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R >> /XObject << /Im12 952 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1106 0 obj << /Length 3078 /Filter /FlateDecode >> stream xZoF_7ShI<$E@w(qe**I7Kcrv8;;:닗FeFz&ͤ%*e*bst=Oˮ/DF~޴y5qtȷψڼ \w +3>KX'_Yf1Y:u\2)ng?]"ZhT2AYY ,^HFL+8dɘq_f,uɲ$%7v>):^If)\QxB YϒDŚnq/]C,2'>ya8zN/b&4r(HzqD9x/FM[Wdz]nH/gHY3:vS߾_MȃZ(*.w:.T{fe<%U>NOO| `uS8|g&.{fNyʤ6cre1R}t;[u?ړnɏ%Ҏͷysɗ{˗=<|E%Y,TYYf֤#c)dãwOoTW$B4%{ВjUWXk=0G,'<gOt)Ϩ`+\l5ھЉ}MTs#Ί㋢)FoP~E,!Jt=`g-KG98׼ky1˕? "ZE+a SS} i{4Msqu(v >?#DeR*d/A5x!ŽʽCE(? W7( v|(k/^OX^br1yHnاDgFZ,p秙fb,K@iOH̽.0$ǁ[O_a*W}8<=Pw+:d eo#GiRV * Tts( W<ш}8Kt؜dP]^RDۺ0"P<7 Dxx/44 1? ;JcN(z4ŪWUj޾\."VNjv ),{tR堼ry=%>z7b(Nk)&a dmގ+ $P~K „Kp;H81AQW%"*6: @` rEd@#Pgc9w)4-`WL py<,olC4KR:Z2<#$F؉H \08-s`pzFT 9'"&nQ YufX2c25SRW` 4h¥'!o޼ij?t=؞ T2uf>P{Us&2> &3$݃m. z,ŶOևj=?$blge~yH)f<ryI_.xݳ !|F~<8P\!ʩGGjk_-ׇ6tѪ.l o'Ӗq/ΨC|QAF)  Xq`Ǔ rtU PCN"ahi# TtQb.IUS* Ma܅!Zy"Cke-Q(4󶄷mًx'*Z)K)RI:e;cSz8jS<QRgE|N5M(NPb;FYD׏ ?HQ] D%=lЀ p5Va>y/Jb>(B WBBEtBROa&i*ewWS&r,Hj_mW54$39at_gBk*vP& V,2L9TS(mvc450G[U5_!MTMu[ *O ? /8 endstream endobj 1105 0 obj << /Type /Page /Contents 1106 0 R /Resources 1104 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R ] >> endobj 1095 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.269 418.085 503.261 428.988] /A << /S /GoTo /D (the-view-and-its-building-blocks) >> >> endobj 1096 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.052 323.991 360.849 334.895] /A << /S /GoTo /D (internal-views) >> >> endobj 1097 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [517.754 288.125 540.996 299.029] /A << /S /GoTo /D (term-mvc) >> >> endobj 1098 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [247.675 246.282 253.653 258.587] /A << /S /GoTo /D (Hfootnote.20) >> >> endobj 1099 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 148.105 115.66 159.009] /A << /S /GoTo /D (example-2-using-configure-traits-with-a-view-object) >> >> endobj 1100 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.309 148.105 194.966 159.009] /A << /S /GoTo /D (example-4-using-a-view-object-with-buttons) >> >> endobj 1107 0 obj << /D [1105 0 R /XYZ 71 757.862 null] >> endobj 1108 0 obj << /D [1105 0 R /XYZ 522.228 397.327 null] >> endobj 1109 0 obj << /D [1105 0 R /XYZ 72 381.233 null] >> endobj 1110 0 obj << /D [1105 0 R /XYZ 86.346 118.985 null] >> endobj 1104 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1118 0 obj << /Length 2623 /Filter /FlateDecode >> stream xڵYY6~_G?yשJ%LbR 1H=E͋pG5$@/oy{"(EEYp(ȓB$eak;lQ^15ޏ(yFMc`xvw7o*E$"yPo&HEV$+m_ns#jEB9Qnm4|0~lp&ucMj[vgIM&ڸCi桶E`RD@6~" z/,qRDI <:&&Iîi@hDLuMUDhatj˓xCx38w_w.$l΁Ly\ (UBq\5s!8"S05աߏ~zg̎ۯSH;]LYu{ϔW-^W6Vk,H,J`ЛHo#|\iD"/"6ESxygݦRS7 I  45orZ%P^8bPwxԇK3CݣndЩz@د?4|F{Vwa*+@I Fɔ`0>`0Vf:!~{u;Hk$,4ڮiW:0ѵ4Ɨ ” |áϚa<ͪ){^4|RpvNt1 C!}{0 %)mgq ò# DW=I)hue5Ng9hG---ą?2mUNEԻ>7J]<o}(J4;Ǻ=ø&6w# s? U2s;I׀43Y l}ќ ][c$DvT;tjJ#! c^z"!l #MNI/$RkSEGjc5yͼNҖYJrhw4JLАqS^b##=,! V 0LUW̔g);(vagjFES3|W ?B\v7"(YߛE͒߯/ٌVācͮй#K J@o4׎=.@l";@BmieQ73_H0v -\/*gE =z&#(2`x4Xp2 D ~|P^s߰?MڑKm3~8Gţ$keot* @](]QHg?J|S2hٿ~9Y}?/+9wӘ#\6\ZK_Y:^H 6=MSځ$BixW_AI̯! sKzr<|z"+gp_%a?{¶V"Pkz8&L+L%jdV7WAj5 ) :ڧxz X9j {v"8}pg:@Xѽ`k19!@2gyVjxܖ?S>mWw7_^w*S jK̮ݥ2PS vlIQeVGTz0\KE^Oj,Eùw|XSsY j=I*v"+đfW;[TĤBj_"Jj&OB6>Ί %`fOm8S4#~!5&,'㈟CID\N.YN`V,t$afRE.TOvR-9EHiJxW)R9قƀEQ(Nz/`+ѯp+|_R~]EºjRJ럍VlmLS0sSP_8ZT4_$]ǵv55K3g{;0 }'Р 3Hэvpծ:Ȥᳱ7Z*W\KjHS^Ą8STEjmWi՟8=g-ccSc;_SG?=k?GvӬ朇3#%eM{{!XAS_C=[F. AOBdϢ裿]M制7L endstream endobj 1117 0 obj << /Type /Page /Contents 1118 0 R /Resources 1116 0 R /MediaBox [0 0 612 792] /Parent 1063 0 R /Annots [ 1101 0 R 1102 0 R 1103 0 R 1111 0 R 1112 0 R 1114 0 R 1113 0 R ] >> endobj 1101 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.248 706.884 321.872 717.788] /A << /S /GoTo /D (term-controller) >> >> endobj 1102 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 694.929 76.981 707.422] /A << /S /GoTo /D (Hfootnote.21) >> >> endobj 1103 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.55 694.929 355.225 707.422] /A << /S /GoTo /D (controlling-the-interface-the-handler) >> >> endobj 1111 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [323.068 514.712 378.765 525.616] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1112 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.568 342.465 344.546 354.958] /A << /S /GoTo /D (Hfootnote.22) >> >> endobj 1114 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.255 163.138 304.113 174.042] /A << /S /GoTo /D (term-viewelement) >> >> endobj 1113 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [277.762 113.715 341.251 123.951] /A << /S /GoTo /D (multi-object-views) >> >> endobj 1119 0 obj << /D [1117 0 R /XYZ 71 757.862 null] >> endobj 927 0 obj << /D [1117 0 R /XYZ 359.807 698.082 null] >> endobj 1120 0 obj << /D [1117 0 R /XYZ 72 681.988 null] >> endobj 1121 0 obj << /D [1117 0 R /XYZ 72 614.161 null] >> endobj 1122 0 obj << /D [1117 0 R /XYZ 72 600.223 null] >> endobj 1123 0 obj << /D [1117 0 R /XYZ 252.76 505.91 null] >> endobj 1124 0 obj << /D [1117 0 R /XYZ 72 489.935 null] >> endobj 1125 0 obj << /D [1117 0 R /XYZ 507.023 425.764 null] >> endobj 1126 0 obj << /D [1117 0 R /XYZ 72 409.67 null] >> endobj 1127 0 obj << /D [1117 0 R /XYZ 206.414 154.336 null] >> endobj 1128 0 obj << /D [1117 0 R /XYZ 86.346 146.185 null] >> endobj 1129 0 obj << /D [1117 0 R /XYZ 86.346 136.48 null] >> endobj 1116 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1134 0 obj << /Length 2438 /Filter /FlateDecode >> stream xkܶ `-pKEQ$m;@>[nh%Ez{ጞw> (p31+G:ߝ}sqD$kNjyNO<"s^XMwjhx՚f?JIwxa хjg^vtiHFfwdޑKb`v0˳IzСB4q|1꩔H@^I! D |+凳q^)݋-ksnV*p{UvvnSOM< b@r}]i6дQ;mEfM_yI܄1׏Cb |z" 0eGEz7D=U份(E"Llt)ӓ tg6֊pi!ǭ&@+VmvwrAl'Wfr[е0 BgHĥt,=jhLiMWek:͛/0 ɝ M49U)s@+3GD+с,LfT>/ xcJӤ-Rhm [b3Y|Һ7EvE3',N- @q;U+ռ53d+i7-|G) /+?0hW8}X+q8od ២5Us kfy8>Fd.ԃ*,&koSHyJ<֐[m?A8.+sf48buڲs%(M^Iy˺CֵqS9M{:B,/}XD"4)3a7slhjMZaMchURsI)<x'| |+\# kj4f"GƞFȎ%hr}nt1kS'`})U7B94sT%J+4h,+fW:޲z};^ Lw7mV*vo;S6P۪(+_\,we bQD BgzśY= ؠͥ`!. ^C I1%6ڠ@Mb ˱}ȡP6nߞF+ICkNK^V;m pw[En ~ҮLz0AA2葶^C],7@rGDtM[s-@l2Ʈ3M+.˼$<8GͥEFXD9'<lΞw+n8f[)зçxmqE썕"X܉_^dԗ pLҎyۍu]ەs*5?} -W0z՗uSY%xKP^Ti:*3ChWsHȹ [)7Jn]7Vx֤5!>YͶ&d&;囵/~/|7J(H|HnO1@Zہ dtW- i"w١@`W0_*IޗQ =3N?: ılǐ DH&lGHx $WR)G)'PiC_ j%K%8 [Yi|M ;!J_拄xL9U I)$ ÒA*X|#Y ie' A}%kb[!&"i建jya4\E:o!5<{n?cqMU\N/\3[,=9&6wM{suf׿l3NYb)Tm Bwꋓ4g՞^R2^Ž"'^2+21Y2[h%LBTŕɚ}/3zLgR 7>![r21ah6i>7Y࡚kyq=;}d}q zh.+# bh[e[(f]KX_zC6Cobv@uh,}\.@/ozUO.^4{K_Zu^m>Ҭɵ6c!\j2|> endobj 1115 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.954 682.519 303.303 693.423] /A << /S /GoTo /D (displaying-a-view) >> >> endobj 1135 0 obj << /D [1133 0 R /XYZ 71 757.862 null] >> endobj 1136 0 obj << /D [1133 0 R /XYZ 72 720 null] >> endobj 1131 0 obj << /D [1133 0 R /XYZ 72 542.09 null] >> endobj 1137 0 obj << /D [1133 0 R /XYZ 72 528.75 null] >> endobj 1138 0 obj << /D [1133 0 R /XYZ 256.167 450.706 null] >> endobj 1139 0 obj << /D [1133 0 R /XYZ 72 435.21 null] >> endobj 1132 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1145 0 obj << /Length 2381 /Filter /FlateDecode >> stream xko6-eEGR.ܗ\+wZiG_qf8]IvN5 g8/Fu/ξ<*Rʂm O qpYUCZczMGtQ8/Mmto](!W\xٯgF$.ȣ<^ "EpA,beu@/&TBd2rBf<=R( R Q")ʢ`w%AxǢ̋#{IGSfyP (aQ\y(hX(Ӓ&ΚfЃmgH$ X. ;x΢( P)b$Ŵp9-|$o Y=gk*P?r~hGt8\m?ޞד,*(4 3΅jB2?AێF햞;WO㡥gemxÎf&3q82Lz1i껱-된2gM+SumZ %-AhQ|L ڶ~(Q!Y=3-z|8ݘ/Frm!O!RfQ1i}C㗶b>Ry}H.Cѫ %=!ijZ0DgC9Jo^LoXn}6[{=v:߷$K8rw (M E"N~JV9xyU 4 -ϸ_|L3k$Xwz=SzY?}2 )%$p埠n' %5ΥȊt!~:R0*y_]e|ׂҦ 8-^3](2R.rR=]c͠ %-4 #m[jjčc'Z($+L"<ݡuik R! Qځ0?('՛] 06q ´ ,];hb%5zcmejf3+ ).ĸAZzO-#;%E=Ժpޑ{|3&QxNˇ1vbGg~N 4 /U^ fO JH55olɉN9#ڮ:A~0M3.WҤ^Tu O=v'=m(tsiVugnInJ7OTԆlo][2` .U z>uYd"0>8 jf!Q|Dig5tٰxјxXN2ta۵{j|T"\aN84 &r!A 3lK\9Uȷ #hжŚHjsW1y1sj&a{2,sJVi,J?UŐSwJȆP>ufvJu{V2wT^U2j#R7͸2g_~7 䟭TPQ1ߘ\cƃ 1X[Է4rY>0 +FL#yzQYv |ǞIR3s&As=E+`ZTFfKMA o  fѳo\I $:ڊU r6f.qܛbmunO5Ov~g }A\PV˫;8op  %]ėr: 碌kl ܷKpS{JSqXhZ0fe!H$"ڗO8qj[ڽm@_IZk: KCn2j\enNw46'k[\cbk]Omyh۱86@űCq&v msw͂((w[5D_ʞE+&*Jci" } )Dr. Y[^)> endobj 1142 0 obj << /Type /XObject /Subtype /Image /Width 354 /Height 146 /BitsPerComponent 8 /Length 14500 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    #%$""!&+7/&)4)!"0A149;>>>%.DIC;C  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;b" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?kY77VŠ6`nO#+]ޫ{8$]KhhO*w*X˓ qkV=/⭃: [o}`b>߱V<1~oc/ \Cl$(y/ 9߱NU61^-R)r`;bFjmDe<3@(I1RvU)7dIta(|_m4:JӯEjR*yQFB1e;$aF oj,vL}exYr#K:RR%+OAo}`b>߱RW8@ K>dVn$l[$`ÚܽMmxf?xҼ{Z?̾{do}`b>߱I.yȂqo heynbH0傰9OCV!=ͲمDeTk9 =1zZ)]}3̃ϬRhE>߱VK[Ju(Q5V~(_*&Ƈ_o~ϭ1G* ϭhE>V~(,hhE>Q߱Yr߱Go~gQʂ?#[*(,_Џ}mأB?bbQʂ?#[*(,_Џ}mح}?K]qFOgX\:uk^ލ8Ot^PyWctۗKQ"2Hފ'8us.NVdrܟ]<}?ҧ{i紎Q 29b~TldsjJ?.h ͬ7h[RHpH[Un94ǃW7W+T浛_SrWmlD}ŏ0CCFzQW?Ntg#B}#>٨8ĐDR(g8Qu.wsU,c{,2=oDS/ib%.{?7G(@3ϼ}CÌg.[pʤ8 JUEP FCgo~mO\8,_ RV=NQzNWVou4!kHAy1B@|㹢}TGzwq6QhTI3C3tK gyKK#uqu9xsڮ{DDmJvOe~xO八RQ[thB-x(m,Z^9YpL̊ƹ-nnitdM莲qYn9>'+~tE^_ik򯌽?Km3JI4oG;3F`B Tzh-ݔ 0Y r8C޿?:"Wzˣ55SU-c\yw3wZw:G5#pa {7ֶ awEn yPHHV»OQ _??URiSGw:1pQԫ*}#+sZV7ڣ,Vx`ZJ)Ww# HϵWwΟUYOP]+K/qjY|ה??k R(⿲Ɵkeoy_~cuz%!58OEql18jWz?]*?չ-ҬD,/!H[e*"E[y>»OQ _??G~ #N[޿?:"Wz?rOMu?»OQ>Shkwӿ4»?rMMu?A?:w&W~ ;?G~ #N[ɣɮ߈?N hS)y5uoj R |ȪyeD8A?:w&A[!*i]ynp93=$j̊r>uWK]2OxH16 Ûx%)${W-Ygk^!f>kbO(p2HU@3_d+Tn׿wc3T΍:M^ݭcoB }Ixc>HSllDRC܎]oGW!@Q8ξK1zنH>7>7#7#7#J(=Ϭ?*Ϭ?*#7#7#⪮5Bo4墠P[0~Cq<-eoNIn͝Ϭ?*Ϭ?*'V]m+.sǹoGQoGV7$x[q<-eo97#7#q<-eo 82SVl}dTo}dU 82 o[t{)+x6w>7> o[u-q{!OV+NktÚ=MϬ?*+@%Ob{PɪK:$C #O$z +y4* 3u#ѾoGP?7)OFORQ@}dTo}dU%OFORQ@}dTo}dUQ M{vYQq8z_kb [Y?UY?UUF@&/*kb⨷>7>c2L_Uh?/Qo -o}dTo}dUWe>Ѭ_ @Z7#7#⪯51T}X EoGQoGU_kbF@&/*yk|'zBգh,$1SQПCWZ]FWtd֨k2ִWcꉟϜ[7?Z+O<Ivu|7N+ާu῅/_ )mΡy7lny!o8؍wl^kw$}]Dc7p[O:6]9#HdO-#`Yx&XegwwarC:[x}d!Bdn$cCr-cŦ{y⵻φn.&gE>vpFe|qRD, $~s,MEW(0T}ođIzӸCyEv|5  _ђG{whFN-W΍KRJV0h9|]aW-c%}w0pstH#OyB$D{YFdfmLb +3 W!opxa>9f4;m"+Xl8m@] `0 hm~/Ok^dw+F®`q{ ll7p -myv.@QA5jm{el E'F.B'"' <^E#n>}ץ q|ҷS9]/Nn%0y!%H""?"$JC@~lGt4S(,6eFv'[^-yU2`~VR}BjgĖٵـ5:)}ۈ`z $>oc;|?[̺MI&3F3:FF9ND0h/sz֑λ%RˀL Ǜמ9xlk + ުI$ݻqr:rx*;%WڤA zsLqpnN-^{)amaf#CCFW*fG }]lW;Czt_kk_XAXHP6o6-v[xuٱFW8SzUO"V]cbh q$vlF8$u-]apd_gz_xKI,<}B;x<=l/.RFl[zS5魯4B%;xvDdo1ldjwǩ\YKqhi7sfyjA@ ͿcTSoncd*yJT@"=A4o^$ɲ)$$XfmYA?w*fvn/5ܴѪ.# 8ݸqMkqKq,~D=.*=͌OYKa-W5o/Sǰkj &[\ՉH ]Nw|յMRFjWƅ[]] f<2xzey#Z]E nFxew)px5>]>4koJlmasr xX&sW^.V[,#u!*|ɐ@y 3Z5-M3^jEn\Ii4S8bn ͂RInyC$""J+0f ?1vc.7qr@ђ@bqɪe⏳4Jj'<:]@0r1EVߊ.MV\]@ٽ$Sn &1<'9Ȯt5tm1bQii1Z>ssLѴ3ƾtsn ASTCr8xR[n;(d,d{)3{n:z.شk->5ɉ>ucwlsb hYKNYK3#v c4ZxoG[r^;"]M'>leCKƲJ5&[ey42U0c&յPyf Ћ_,;>ߗ'+J5֓CnQGccI',zzo/m7ݜg͎q@xM;K[/,Rtv"hGޅ %DI$gs\֭Qsiuem-cKh;;9%b#9*wt]"姸VvJ;ym,II#Ϲmn>4M[[I ]~A [5)u]$n$i)CG3FHbJgY? iq,v ;NP#Igy 8$${@zxZ)>R}E}{G_m:> ?o'b^Ľ>yfA;8S_'O &%{x\A,)- c(|6YqhM=:-Ri<$SA"!>d)G +!NXdcix,nttVpsUy6 Tv+s1 /*'Kv"Se@bz 2 /%dI\k_P˰b!H qVmKK %rKs@1TeV%X9u#"w.!Iy!f$ $ W|e]gK0"<1Uf{ Z+ۛg|v-ّ٘ ;[q2?UGrO롢(\翷$ W?UG9B='jnI>=t4Q9?UGrO롢PnI>=ےφ] r+}V[l˜nݑGԞLo跭Wuo跤՘'|J?#oX͞$Imɸ yވ#ةĺL# KA" WP6nuQk Om,rʢ8Y3FVĺL# KA" WP6nucxGO+̸ m*mds0=hVY&!Y |R'tAw:xfp\KqOJ0F*@KRZ<@B=:tRnI>=WY/b,Zuy%ءd$i qWzDWS :6@m˻iBv|IS5ЮgnI>=ےφ] r{rOܓ|5_zh.sےφG#CEsܓ|5_z?$ W( #'jG(\Ƶ@ 7T5kEs? t?8?Z(o~WIoZmƧii,$Ol++g1^@Q8ξK1z׆N^v7G I-1""#i9,ABuRj5pڢڐh$y q\Q'[YuExL$e۵aWITH#/e 4ZjKr"Ia㽈 &😀y֓co>&pݘ-3LӢ)n#9\ك`P ' 2I:4Qp3Y..FIG(pAEjiH{onoTb*EU.88ui$8d+:?B%$u;؝؀O2GCEP28$O5E>pEg(_Q΂ƅ?ȣG: V"5E,hQYk|<gsy?e?|[-5ǧ*EKwc܏cKu+!cuy -Ϛ!$ߌf' ?7)YxɁ0bXl$c"9s9n2T36ܚWXmK󭺌x;c(xF_A&t)V܂E"1`;vdn鑴2݋n5770Lە@Ҥ(T *rI9+j>{뫙(M0eW N9vIn[5$4I/Tm|'SQH k&uDD[vISFX`ruZe3n݋`d1 :f{^5;KibҭJV7(5Ek||,hQYk|<gsEg(_Q΂ƅ?ȣG: V"5E,YEs? db8j;Տ& >qo~Pxh8po (Wg\gG_m:,~^Q (M̿M-; +؂Ayu[ ආ-Bd5I"4Hq+ {!x'%E(YHeݝ^[EstS ulL]Qc=Ҵl~ղY!>ago{sJ -Ou;#1YTtm=kVM#Lfhbw@1ҥ)Dʀ??0@?`뤿)}շTm ?$Lm#`x8Oշ?'d+K4ʉYy9X)>i?PP2j*?QO }~&mCm ~i?PGm?(joHv&f88$WE?#oRTi3z (9<(8fYI ɂIA3cvߥQm[Znfod&yqo AK3$e)^74vYA(##&Ӭof{+{m|,Jd#:z w&}/5'[occa$msa˴cx篵Yn/I-b$b&%|8ѲIt11g}:ѧ<-*V8 0xU(G4FU@.'9[]棪im o]Σ<;O9 Iz߈~߷`Jmn3>ͥ6#Lyq}T q)iamCm5m?(mCMECO >i?P@QP~?PT?m5ek2֌s3drHVkZŏ& >qo~Pxh<> ?o'@Q8ξK1z׆B(riCY՞4Yت qYzՁw[Gs˳c sO^x(mnIngEnF9zZWm%12mwc'Ms-0:+\ɡ[ٶ,WԥmYBa+'{tM2KӒK9IDNVb*/ mO/h$`[oI$6]"S= AɧYZxh۹m!lR1 H=8nF KCx}5'Ej kiaeGB3nvs{٣5υLF>xܛ8r;Dnq@$ڏ-W#61|ֱxC*Q8'+zip&bl +(B2*,,b% L[CeGt+5λLXAy؉ mP,[ۙe  "W:u-:E&FC+ A͛D֮utפ;!;Dp2`?i'hvo;!I渐!%U* @/gah t ?Y:_(ah t ?Y:_(ah t ?Y:_)G,}R)^8UXvU}[֫:}[r Gޤ>gr?%@Š( ԟOieG"m)U2 ,R^2a!2!+@9l`F9<ZKVc);\Gp`somlh4T̵gpےv$.)Q\.ᩯKm&[mƟb{rH+v;|#!EuPWZnf?Qۏ3ސ lO>ڤ`XHQ$9< Ո ᥅_,oK|V%Wtb#v)GÌrMqP^N8Ip1l "bvV^x{U]:5=5t٢YBg7!Nr5bͨb{8likG9B/IPÂr mP,[ۙe  "W1GPm%d/>;fyYub/;viMjWMzHlc٭ӴN / q-_ ,/2ydKx[ⶰ*J?wg+ GUW6VQjH.٥e&g Z??-V_W Z??-V_W Z??-V_W ?aG%Fvq5[] ?O+׿ׁeOBϜ[7?Z+> ?o' BSnKאbUXzʺ3 7_9_-RXӇU(J+/wKLQK+UWHw5(/ 3_9GC}/UWsR`?n0i=_p{Hw4|ZV2Adž:ߘ `?n0ije_.xw7>}Gڏ~c+wKLQK(Uڏ~c(Qoan0i?t4ʷ9Qoj>?/ 3_9GC}/VW<;j>Gѿ1K(`?{*ssGѿ1}7?°t4ۺ_ gre[_mT}[C}/u#G_Ә!$$wZ=npsù?7+,zGΚA *7L?GC}/*+=J+/wKLQK(jQYۺ_ gr/ 3_9GiK(`?{ iϴ;n8ǹڏ~c+wKLQK)sùߘ >}Xۺ_ gr/ 3_9Gxw7>}Gڏ~c+wKLQK(Uڏ~c(Qoan0i?t4ʷ9Qoj>?/ 3_9GC}/VW<;j>Gѿ1K(`?{*siޤy?j׿ׁe`?GZ45`5U%A+ե5}[t&s+C} ѸΊ*!΍tQ@:7SEq4Q@h}MP7SEn>tQ@:7SEn>q?P΍Eq4Q@h}MP΍tQ@:7SE}OEn>q?P΍tQ@:7SE}MP΍tQ@:7SE}OEQEAg endstream endobj 1141 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.044 492.144 282.509 504.637] /A << /S /GoTo /D (Hfootnote.23) >> >> endobj 1146 0 obj << /D [1144 0 R /XYZ 71 757.862 null] >> endobj 1147 0 obj << /D [1144 0 R /XYZ 251.968 361.723 null] >> endobj 860 0 obj << /D [1144 0 R /XYZ 523.611 171.495 null] >> endobj 1148 0 obj << /D [1144 0 R /XYZ 86.346 162.971 null] >> endobj 1143 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F65 185 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /XObject << /Im14 1142 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1157 0 obj << /Length 2710 /Filter /FlateDecode >> stream xˎ6>_! #zCb0}q-VKmQ뷊EݞRX*[Q͏7߿yP"ip d0),Y\ ކ< {Ufs+<螞^vãpTwU7ZЙ`|/7?߼pr pJ̲( ?/AdiMͿn"801Jܕ򠇅 ௳"I E2#!/?&x{DQxזX9 so]Կ!BQp+b7wV)UUPw&":MAb[eߍ'2nDr*GPnDZnwu=l(F$!$6T;72ȼ{v|[jUADxgXDAwhr-Axj[MVbCH15񀴵!m_)4̬#.{i>3zPQ{}U;c=so(DJH@ov=]۸aEN =Xwɒq[퉷tO<[gPhv2cTnK)NI`Nô`SJ}"Xs] hys vi"4']ֿG Z@`PE& '\ڥ_%@&U^~Kx }aa5 t#JG/F9ZV2t{ V7ٙ~?:ׁaC3yAϣ4OJf~")P k={.08|Ҝ\IYO XLijE#"ERd΁WFAҫ7ϟR,GfCOpً-ZQ(r5Dq'/Vd|PT3eW2^Zo>m`~Vp5VXP;Xߥo=VwQ_'[ƙSAI ӽW*Y@:M&G! X) [bVi ![)/-ߒդ?@ԂTa,ľSnJ8q{n+4M]*7H_ۃl[X lmy"th4;&4sӎ5"\FDV{}-u{E^pbpmsQo @4hg}]b)8g 2{,{G"Fp/֭/\eW1ǢS=[]QEn+5(|Դp*<ΘN*VvG֧q hK"RAЍÛR[u~3coC ᴼFx)u>(u#nrpffe'}ltqcGU[?BhHfh=C!iь!zAFnfb1gwbXi|]֔~ҵJ`FpZ묡5@5lw2ΰu_/#׈-n%sDdHu =whM#jb|7 7iA]O+ֽJSg4s($aóGB ,-EqM`LR`(Yž tK6e_\yp2L >J X. eSF3OY ]-cه/o]vhù$1'$b83# $OHmc# endstream endobj 1156 0 obj << /Type /Page /Contents 1157 0 R /Resources 1155 0 R /MediaBox [0 0 612 792] /Parent 1140 0 R /Annots [ 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R ] >> endobj 1149 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [85.363 270.386 108.606 281.29] /A << /S /GoTo /D (term-mvc) >> >> endobj 1150 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [442.612 270.386 484.235 281.29] /A << /S /GoTo /D (term-controller) >> >> endobj 1151 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.315 260.468 177.513 270.923] /A << /S /GoTo /D (term-instance) >> >> endobj 1152 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.466 260.468 238.892 270.923] /A << /S /GoTo /D (term-handler) >> >> endobj 1153 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [264.336 260.468 273.801 270.923] /A << /S /GoTo /D (Hfootnote.24) >> >> endobj 1154 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.417 162.789 473.231 173.693] /A << /S /GoTo /D (command-buttons-the-buttons-attribute) >> >> endobj 1158 0 obj << /D [1156 0 R /XYZ 71 757.862 null] >> endobj 1159 0 obj << /D [1156 0 R /XYZ 72 720 null] >> endobj 1160 0 obj << /D [1156 0 R /XYZ 520.075 631.874 null] >> endobj 1161 0 obj << /D [1156 0 R /XYZ 72 615.78 null] >> endobj 1162 0 obj << /D [1156 0 R /XYZ 72 351.348 null] >> endobj 859 0 obj << /D [1156 0 R /XYZ 72 351.348 null] >> endobj 77 0 obj << /D [1156 0 R /XYZ 72 336.339 null] >> endobj 1163 0 obj << /D [1156 0 R /XYZ 72 121.942 null] >> endobj 1164 0 obj << /D [1156 0 R /XYZ 86.346 115.575 null] >> endobj 1155 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1176 0 obj << /Length 3361 /Filter /FlateDecode >> stream xڭZݓ4.]`م (Νxæ&;%'N:3Lܲ#˲,$'ݗW\}Zdnnwإ2en/> NUCiEQ> Q/𽮵5՟W!BEi/_?ʳݽu$gWK<=|DV: ~?1 <]dA"c?a)4_ >W^~P5ן#)7ao[Eܑ#7o[M=a!'٬`w-$۽iҳ綳T/Ho~zIR]C=Oj#]fC齫^>=&ֵX^U榛*3x L[k.> <;+,ZҙiAsuI!mh߸5z"ܶ5Nc=TU_Y[uyô͐2\AJ/a6lXۇ1* KPt[ҏfY[" 2n#3 45+&5-=҇v]5ouý PljX0k-sϬv?tcz%z_xGm^>ܫP,Ff^4i`41<3 ڼ|+Pk?yY= Gj10:ݟۦ݌Z71 4NA+蛆 |ñb}hOꏚh־-Ci+?-*HТ~>fEBȥtɪ{H& 8tD!S 1̾wT5bi2Wr?f^!Y1C9Mt l؈!kPI#YYdOulаfc0#XXt$hJJ#K8l$~&"=&rǮ%s$6%Il/TiA)ϧl3S,j`tJۋsSXPjS`%j^p\_λثHpvaHECF2ѣH&&Hg+/< )XvxkF@;ؖa~̸Ӽ V2 W.'Ϊ&`d2w6s6&*m+yw s7Ҽsz8 $N~lf.t߫y,Ti`DsEA* OMfϟZQ20 JX~c&ii1 db//§r l #rQTA]\2̕C{jQFk rv].mQN (7OܵwU(zAԺ$8SH;s)Ɉur?!ȴjXؾoʦn4rl耤2G y#Esc!&UUw ]eD!dl 06>s(⽁4pJ퓛%od02BUVL]aD$74I?0U$NŌӍ]-;jI$ż' _0X09Y.Ŏ8.њ3Cp )'@Weŭ?Xxϊ(Ue>wyH<"p@{  @Z˚0Ў,r %8L0=f+p2Op\Ӊl@[w9?t}0>{eO<19*n*qml746#o.+#Vy|_ G Rj ;l> <8[@2Mm&"׸r518!>T"_Rx!c gA&xEnbB%.k^ܒr?MU᛼2%Ep BqEN0ChRUa\=iBݒvFryrw|7( +Fr4cFǣx9\K)([*(OWE%3z$Jh 4k3O4H {h_bZý/@X5_k@}bD ^MA<]?{ ٿ 71)jË$F]U|̦W0jQᎧzˢ iMC bFԄ{` 7!0V`YQ8-5KԷ>]*F=ӨnTW#lY$Lt|\_n3¢{Ǫ&] vij2m`E0SBDXO cO;NN&@BqשQ䗉;My`Bes%ʗY!D Z3+u>pE͂kq(#Zur彺Xsnr 8_8K}kV-R?t*> t|4~04rtaY7|f\ 徔 LƗߢkmM(>>@g$ڜUScɃ5&8]8,!Rs_h aAd'E U5"̼hñγ!A6 dl*RQgK3Z.-24`웍q*QL6)WwXWAޥCu?-O.օ$^i ;up>U1䃿_R V|J`c/<4qIb~9bqz endstream endobj 1175 0 obj << /Type /Page /Contents 1176 0 R /Resources 1174 0 R /MediaBox [0 0 612 792] /Parent 1140 0 R /Annots [ 1165 0 R 1166 0 R 1179 0 R 1167 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1168 0 R 1189 0 R 1169 0 R ] >> endobj 1165 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.704 604.81 290.479 615.714] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1166 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [524.06 604.81 540.996 615.714] /A << /S /GoTo /D (the-view-context) >> >> endobj 1179 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 592.855 125.653 605.348] /A << /S /GoTo /D (the-view-context) >> >> endobj 1167 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.728 592.855 310.193 605.348] /A << /S /GoTo /D (Hfootnote.25) >> >> endobj 1170 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.226 592.855 525.072 605.348] /A << /S /GoTo /D (example-7-using-a-multi-object-view-with-a-context) >> >> endobj 1171 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.123 580.9 459.583 591.914] /A << /S /GoTo /D (example-1-using-configure-traits) >> >> endobj 1172 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [493.837 580.9 538.506 591.914] /A << /S /GoTo /D (example-6-defining-multiple-view-objects-in-a-hastraits-class) >> >> endobj 1173 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [417.185 334.93 463.631 345.943] /A << /S /GoTo /D (example-9-using-a-handler-that-reacts-to-trait-changes) >> >> endobj 1168 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.641 98.281 540.996 108.864] /A << /S /GoTo /D (introduction-to-trait-editor-factories) >> >> endobj 1189 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 87.702 102.948 97.938] /A << /S /GoTo /D (introduction-to-trait-editor-factories) >> >> endobj 1169 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.449 87.702 238.311 97.938] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 1177 0 obj << /D [1175 0 R /XYZ 71 757.862 null] >> endobj 1178 0 obj << /D [1175 0 R /XYZ 72 720 null] >> endobj 1180 0 obj << /D [1175 0 R /XYZ 473.829 542.21 null] >> endobj 1181 0 obj << /D [1175 0 R /XYZ 72 526.116 null] >> endobj 1182 0 obj << /D [1175 0 R /XYZ 72 404.116 null] >> endobj 1183 0 obj << /D [1175 0 R /XYZ 72 390.179 null] >> endobj 1184 0 obj << /D [1175 0 R /XYZ 424.803 326.127 null] >> endobj 1185 0 obj << /D [1175 0 R /XYZ 72 310.033 null] >> endobj 1186 0 obj << /D [1175 0 R /XYZ 277.407 222.071 null] >> endobj 1187 0 obj << /D [1175 0 R /XYZ 72 205.977 null] >> endobj 1188 0 obj << /D [1175 0 R /XYZ 86.346 110.467 null] >> endobj 1174 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1193 0 obj << /Length 2485 /Filter /FlateDecode >> stream xZ_6O1oז,iq/ m @M_hv}籧~#Eɖ=np-#ID{oHY>lx&B7YI7ͻzGA'^ow,NZu4z#m_WU+eYo?\t?b9ě.IE٦<^m@i7I淫_"_j{RZqF< ҏF̨ZjypWwSiHo&znc|TU{e?aw\(bC՛eG"nXFs8oі`]1mSjKU)k-ǵڮYk+\Rz'[mn>7 >Є* @ZxĿ^PVd(xph;0֪%ٷ[pKx}c\,,6Âm˴>xĝB_2ϗ(s&@M â௞g0M4-Z asÝd'A c)aMӠ=C.0C57L6d(+UD|ؼۉȏr ^: @,9߰PCF48u6ғe'DoYi} S2~G|0x޵5. D>ɓ(h8XC]Tm]b{%vtu<|VJ? YvJڰ(.=jwPWJtp0 nA83;O(,Z19UJ7X~Ó}Wݠ =B8 ϵzϘX:Z9ҴpAzDWBa3Džu$@EW.FG~e$=>[\8&߰Apv `_.KfxushޖWeҚp#v@JucYOqG0x>EKXS:!}yɣ^R@y6r<Lr88k*H)K rԏ4>8lsdgQ0BaHcH6>LofTq[JD_дY/ ,n()T3Ƿ*ι Yb@[װ <50KS'Өd.3Pּ;pC]iD6O!+ԀDp ˈRFǦp3yja LmCiOqO;9Q~Xh3WGIZ9we 6>b@̉cit5JE$٣!;՜sIԅUC !ŝa;iѭUnXA^ҥz:T[TSђ$09NQ&ڍĺ;R ,,$ܫa$$qrDډT3J:>B{^k(u؅B< NՖ`0k86GO 1nYQujNA2nfcH~ R2nXԞϘy<'PyX9E5.*r7TNowY)5\hOsl&,,Y,y}F%zgO.?'da">O/V8橸Խy'k|/nH3 9@[{Il.[mg l9CDX㋅Ld`nN7ׯ)Ĥ{,:#2D2f6S4y) %M swIQ=6601,'rQE@ endstream endobj 1192 0 obj << /Type /Page /Contents 1193 0 R /Resources 1191 0 R /MediaBox [0 0 612 792] /Parent 1140 0 R >> endobj 1194 0 obj << /D [1192 0 R /XYZ 71 757.862 null] >> endobj 1195 0 obj << /D [1192 0 R /XYZ 176.915 674.172 null] >> endobj 1196 0 obj << /D [1192 0 R /XYZ 72 658.078 null] >> endobj 1197 0 obj << /D [1192 0 R /XYZ 72 458.37 null] >> endobj 1198 0 obj << /D [1192 0 R /XYZ 72 441.025 null] >> endobj 1199 0 obj << /D [1192 0 R /XYZ 72 392.616 null] >> endobj 1200 0 obj << /D [1192 0 R /XYZ 72 378.679 null] >> endobj 1201 0 obj << /D [1192 0 R /XYZ 334.592 218.986 null] >> endobj 1202 0 obj << /D [1192 0 R /XYZ 72 202.892 null] >> endobj 1191 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1205 0 obj << /Length 2491 /Filter /FlateDecode >> stream xڭZߓ8~o:$M.n]v!J `p_j ƞq/B[b̟yswx$n=[2Y]6c߫U6Xƞo*Ъv:w7n8Hgl/g,f>I<{4 Z~Xg\BN[PL.FӓU#5yaUdWMV75=\W5iJ^Z+X[hX\dU'8c9KD}BUUQ~8zPeFCw S?U4~WkNmZv:j_vν|=mT=%"FjX=P ')  ]wiP)WvogzC/0:\ B@s+zk]Nꉮ%=*-#M8 ӸR#8Pg"Ȭjxp4%ZT @,lYĂ}Z^f?.vSe@̈ꠖ`Ak{@HM襵VAEtߴՖ`xZ d~^2#)rxw7 W@jQʖ&"q4 ektӷRoGuYQ'޴1m!^'5]I:gmrF)nvUiE*u3lv:5N8 B2h 9˃\_I(,^XQZ<0`[v&p13>S]IPRUO4D>dvbK M)(.Zd!HSBǏyU'sGW(@ {DOF`6!@L8ź 'I6vq*\NҚ;nXNWvf@3=츋 <݌Θi S 0L3.XJziS1͡+p7}g1)sgKW"a(%)`a2NSAn{jm:R̾T7%>ʉ9zU8A"*!4LGc7UcJ +zk'c-z- tXc-:zglL}?(.uZ=J=vS~F:&!(H༆:NtuPԌn\"оO+,%ns‹ ?Kn2\&oAalIx:v2b:ry2UK! LT|bwЩ.&![W~Hz;N BQLD);Gٱn`dux8H7wu$b{ޗZwn(ڲiNQXr[.4 _rXы9j߸) vv;4!EB4/w{> endobj 1206 0 obj << /D [1204 0 R /XYZ 71 757.862 null] >> endobj 1207 0 obj << /D [1204 0 R /XYZ 115.775 674.172 null] >> endobj 1208 0 obj << /D [1204 0 R /XYZ 72 660.135 null] >> endobj 1209 0 obj << /D [1204 0 R /XYZ 72 601.832 null] >> endobj 1210 0 obj << /D [1204 0 R /XYZ 72 587.894 null] >> endobj 1211 0 obj << /D [1204 0 R /XYZ 72 521.686 null] >> endobj 1212 0 obj << /D [1204 0 R /XYZ 72 503.753 null] >> endobj 1213 0 obj << /D [1204 0 R /XYZ 72 473.865 null] >> endobj 1214 0 obj << /D [1204 0 R /XYZ 72 455.933 null] >> endobj 1215 0 obj << /D [1204 0 R /XYZ 72 438 null] >> endobj 1216 0 obj << /D [1204 0 R /XYZ 72 408.112 null] >> endobj 1217 0 obj << /D [1204 0 R /XYZ 72 390.179 null] >> endobj 1218 0 obj << /D [1204 0 R /XYZ 72 376.242 null] >> endobj 1219 0 obj << /D [1204 0 R /XYZ 72 132.922 null] >> endobj 1203 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1224 0 obj << /Length 2755 /Filter /FlateDecode >> stream xn_A {C.}IpE]'}H|(qG"U^@3;b\[I r;;{=˻ee"eݭ0DzJB/.Se^^$]xVo2}"ռ]H\zOwf D-J$~vx;];O)]Mρcz}q[È0!kA ]u?@6uAB\j~͗e->_-}ZۭvJ_J}'ܙo{i@Ye6|Ak<~pS+W 0-۶Fd@dKf%0;xcFȰMZ2Pr|h4/]Hu ݫ3tFp1{2p<^kPXHdI\wyۼPtj#ʄ]AcSn/=-VyEOmҺj"-5ijJ?筣Lܳ^uW*vMGgy1n;mK/:$bcuM[]F^pUVnKdqSѷBE@~E`P-Y&whg(W ]iۯ6r8osqd gzI`\>tbÛ>HBoah}!b;A* ,;H=e{6&m. Kî3H 23VW's&)QCvbېmʻa(s+,&J'P$DZ̃Dd!'AU{U6tR@HFg(*Hc 4R,&QPcf1.mBr a9=]:4 M+t{x{2-̈%DQH+`&HH$ֱd#~:xeQl *`Lw )hEQ.V;?-14VkR~MJcz[ccy8}o&[rd7`\I nKQSlR6&'S`5 @R늴 TaƘF~dh]MBldQ-m}c0, #)!*;Zz-/T5D6JˌLH-6'f}U6uKA:ЕxRDJxoM@[iPx/EoJfc$em,2 /Mb%L:r[M-eMEɷ8/HZeDDȓ|J%wTY@4s2!j67~ߔ+=6|G'ɅTrB3uX*Vzՠ'ծ)a! 1yP~fV_j`hV {0C9e8dPnu!cV܏e<ݔ0+4D:F1mEe~52+MARw+EZq] +됴B:)pa˪K:T͔3޼mAŬ{D,Ep[ “Rbnfz>%X~%ϺۛG|KB*Ci AcKJ iĩSzx(NF: Q>vqw ݓA9AJBS Zֳ̍i&MP XIA"ISum]p6{2QY*i'12Q n⃛0 3wzݸ"2'6nwt81mH- _5YZvM4CX&d44E ]9f]" MEa⯎n~ʓ硫ܛR >l+0hi$ie-ڕݖlAe;}Gն"V{;(.OzeŒg yVwuB!v $cӋh4eQ|v:Sع-cgfNYrA""Ɓz0z1TfO]X58o!}wЯ $$/[J`I@]5NbON]GID> bGnzCl`J'É׸{&oə(3Pθ.+% >R؋ݚ-29uM4$B*pD,VA=4¸_+}dº3q G)rzY[ROɵ⻊/tP w>\tlS Lܽw(8cs>tlEa'+J]nDTxǐj*S<(_`01j kl|#x 3|l:&ʵ'erB靣%9yVla8=WO@bӹfN{{"V>_@e?c@M:gtjp~O LHHϚ~E-a"Hxh^m.Ŵ+Ґۜñ([d ^P endstream endobj 1223 0 obj << /Type /Page /Contents 1224 0 R /Resources 1222 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R /Annots [ 1220 0 R 1221 0 R ] >> endobj 1220 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.052 575.042 311.835 585.826] /A << /S /GoTo /D (multi-object-views) >> >> endobj 1221 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.655 533.079 277.441 543.983] /A << /S /GoTo /D (example-7-using-a-multi-object-view-with-a-context) >> >> endobj 1225 0 obj << /D [1223 0 R /XYZ 71 757.862 null] >> endobj 1226 0 obj << /D [1223 0 R /XYZ 72 720 null] >> endobj 1227 0 obj << /D [1223 0 R /XYZ 72 623.739 null] >> endobj 1190 0 obj << /D [1223 0 R /XYZ 489.45 302.266 null] >> endobj 1228 0 obj << /D [1223 0 R /XYZ 72 286.172 null] >> endobj 1222 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F66 186 0 R /F67 187 0 R /F37 163 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1234 0 obj << /Length 2162 /Filter /FlateDecode >> stream xZo6_!{1DZiwEq[oaX(H%mC)SpEp8Z4 h߯ <@@FDI|dm3q&!>5[ՔI6/t ~t Ҁ.T4X@O%a{3.b2?r G5V$fa )K\b<QLch8!Ɩ.gyM>?!I)o`4 @H1B)*ЊE(`mOp:mіf1 +[v]2tޭ0  ; 3hf+ĹU[TX{^uM[aE c3ŁxvANX?SxDFO+|5>ʮ,{}_L٤KM-,֡UZ(M[od 7S`m:]߹zӟZJVI=R|g?$̭bÐ^1D)d I鹂3 r"ā{cnT~Ϝ[jg̈QTM}5^ ؁,[:c6^vcW,}Lz:G*}ԉT,\eXZjЖ.}vO ZnCa^Uox4(ڹ5  %a (o,-2NH\!>*~-ozDDF 5LE5=4O?ȁ߲v͐Nt) E3ogz"|&|Xΰz7d-&8xyj¹"#*<(Z}i ^PDRe*+;C0LǢ=#>{q`sq@_-'@.>tχ| .OFx>H|,b/taQ%E_fur_R=C-j`FC>y3fK|KAt p0|""@ew3z&F)g|rJ׭ZF{w>yw=MkxdȿE  endstream endobj 1233 0 obj << /Type /Page /Contents 1234 0 R /Resources 1232 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R /Annots [ 1230 0 R 1240 0 R 1231 0 R ] >> endobj 1230 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [500.269 375.806 540.996 386.71] /A << /S /GoTo /D (term-command-button) >> >> endobj 1240 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 364.568 98.261 374.755] /A << /S /GoTo /D (term-command-button) >> >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [312.277 155.626 344.157 165.812] /A << /S /GoTo /D (actions) >> >> endobj 1235 0 obj << /D [1233 0 R /XYZ 71 757.862 null] >> endobj 1236 0 obj << /D [1233 0 R /XYZ 236.546 528.995 null] >> endobj 1237 0 obj << /D [1233 0 R /XYZ 72 508.905 null] >> endobj 1238 0 obj << /D [1233 0 R /XYZ 72 494.968 null] >> endobj 1049 0 obj << /D [1233 0 R /XYZ 72 440.615 null] >> endobj 1239 0 obj << /D [1233 0 R /XYZ 72 426.678 null] >> endobj 1241 0 obj << /D [1233 0 R /XYZ 72 334.959 null] >> endobj 1242 0 obj << /D [1233 0 R /XYZ 72 305.071 null] >> endobj 1064 0 obj << /D [1233 0 R /XYZ 72 249.705 null] >> endobj 1243 0 obj << /D [1233 0 R /XYZ 72 235.768 null] >> endobj 1244 0 obj << /D [1233 0 R /XYZ 72 173.837 null] >> endobj 1245 0 obj << /D [1233 0 R /XYZ 72 156.622 null] >> endobj 1037 0 obj << /D [1233 0 R /XYZ 72 89.772 null] >> endobj 1232 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F66 186 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1253 0 obj << /Length 2111 /Filter /FlateDecode >> stream xY[~_!lv^Dj]SlډMh$"K.ݺ7Y=)"IQ\>R8E87TF)Jf#Ƣ$(NY)/ZUC~ObW}51فUWn:|?p \b$W_~QGTF_ͬC mp+ƈQlA^ ޜ#SfK0,}VVv[VN'7n>fݚUor|st8Hz}ao,ꫦض!*&4|(|01$"u)06 ABRyVn\8,OzGIWE4ys8XCh)PCVFſw4miF(0]$)JrŬ/9ƫ1F=Xy԰o oJ1|7дU^ڲDK8I ֧7z3Rvu")_4 BB:8Wi0OkFrZ3:3TʊW>B?jwY.m8]z]sI f{L7[ܙc(3BjiOH=왵m״]9)y =*Q:S :Y(00Blj_g0g MQY~PA׭@6:;S|ݫAoXu$mfV?+HAuPDK-P ԰OE*! 84B##nĎ¹h#3.)„̸8a(M۩h{TQ"$]PLuJ"~ f@?#6yU@p>hԃ]ҏ`C%zʁ~~Uz{k51|@= 6", 9fYq8K^(bAˤsuit29-|GˬZOx j#~ yB<@AkAXr 7Mu QHȝeHgU7vV+!-Zխ%NGftjE>g gFMAsk6U=\>':LJM:u0{`-חʺf%<|+[*s&$`Y "3_4Se:^Xd7_rƅ3rq~a@O0uLRS9h!?;q,66hDuæ e(M8ΛmQmHk Ƣ R&KC1&~=Rn&~knTߌ2'O_1UÎ@ {Ks* 뽯g0f:Nzi8|Ep'(hrWB|k=霋7KxPsoa̱Wţb'iay fDӠa_$s"I1X _+8B u,Xo~@q NoCt[< {ဍilke՛3}Ƣ*8IBT|ejyu U;㋺ө~2)\3Jbo(wo^<}/:Qel4AڴܲUY / 6v^y7Ѿ cixpuY/e{UKЁ58(=\UM7'驮\ #)cmX9{og' ΪgzTz}apG5N=ry+P2z. 8-.iCGh>,("N)EPbN#,E/e endstream endobj 1252 0 obj << /Type /Page /Contents 1253 0 R /Resources 1251 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R /Annots [ 1246 0 R 1247 0 R ] >> endobj 1246 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [312.277 661.776 344.157 671.962] /A << /S /GoTo /D (actions) >> >> endobj 1247 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [296.024 425.015 327.904 435.919] /A << /S /GoTo /D (actions) >> >> endobj 1254 0 obj << /D [1252 0 R /XYZ 71 757.862 null] >> endobj 1255 0 obj << /D [1252 0 R /XYZ 72 720 null] >> endobj 1256 0 obj << /D [1252 0 R /XYZ 72 679.988 null] >> endobj 1257 0 obj << /D [1252 0 R /XYZ 72 662.772 null] >> endobj 1258 0 obj << /D [1252 0 R /XYZ 72 644.122 null] >> endobj 1259 0 obj << /D [1252 0 R /XYZ 72 626.189 null] >> endobj 1260 0 obj << /D [1252 0 R /XYZ 72 519.812 null] >> endobj 1261 0 obj << /D [1252 0 R /XYZ 72 505.874 null] >> endobj 1262 0 obj << /D [1252 0 R /XYZ 72 443.944 null] >> endobj 1263 0 obj << /D [1252 0 R /XYZ 72 320.63 null] >> endobj 1264 0 obj << /D [1252 0 R /XYZ 72 300.541 null] >> endobj 1265 0 obj << /D [1252 0 R /XYZ 72 216.081 null] >> endobj 894 0 obj << /D [1252 0 R /XYZ 72 216.081 null] >> endobj 81 0 obj << /D [1252 0 R /XYZ 72 201.071 null] >> endobj 1251 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1268 0 obj << /Length 448 /Filter /FlateDecode >> stream xڵMo0 <̒ԧwGءs*z0 d[eNtSz%$X$xS]\ ++GpN{ԕz wy]xͼ8&vWߚUoŇ(|omiQ&Zg3Y 8f2'Uṿm} f8$B [}DU(K6g=1.s9y)bTXpv9ڮw ǢTPMde;j](sH9櫮]?@7m%W@YFr? M!{N.ct :-TjNdcP sll|{N4/p8SJhc4 t,E8\5b NKIBk$VϳWf"'hrr]mBp endstream endobj 1267 0 obj << /Type /Page /Contents 1268 0 R /Resources 1266 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R >> endobj 1248 0 obj << /Type /XObject /Subtype /Image /Width 227 /Height 160 /BitsPerComponent 8 /Length 11010 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?YEղE>W?7<|tZE?UMm@]1ʆ8zDψ'xgl'9_G#XXZ׹2.yeB{hm5@O'#E>vW+cPom..Zoǵqڋ? ˾m,0… W"kI[;tjʚ{"_m~Qϝ~WGƆ,b(˺rK[ M  [50*>lq]ki>exJN6z_)iE>vQߡZ~%N-60tSA9**xOZVDiR4ewUu kCBpSRV~dO R-?QϝiE>vUtkHs#}T7Uޭsj.#Y]TY$ !!Wԗރ+FiE>vQߡZz-.<[T\F0BK$uۏz-ouk[+{¯ lAFqN&䣯.}^i)=bi>vQߡWnkfa96-/%6Fۻ/zU8<=ut}[8%% ~?QQyKK<-H˖Ӹqϝi>vVΗ`e{=ēBLp~c8wP4#YKvUw0C8vXw'eum~ho V7N/BN/B5(gcӥ!.pA|+a<.AY: ە=ssE\M*WMIu-0K_+cHӧ {ᰂg4LC0FxSw>6ˑAO'' QNn315^(k5Q6.HeVϠ=4˩rv4iZ_aon^_mis(&OحN噡r\@En2 T͢"G\˫YrNc0A֛\:GOzznpMXJ424QC"2Hފ'8<9ywc܃KYT:,b~Dldr3jf*ω}6yb%Cػsykr tӖ6Y#V#?p晥l%ʞ}*(I5_oot1nlh[Qv ?(?2'ןHB[@I#9sIQFP`gּ'c*bѫi;m i֤x_FJO=ZbV61eQxqEx}?hn=?TpO65gʵ=[ZI{uޡRYN+vFsǵv6ZDұʉnA9x_ƽ#GșV·ᇉޗ$+\`TjVFy==pgr!f͕J"HPlpOGlV ,4Hat]Zn%Vp%vdnV+/֗d)zEV_JwOOɴEXc*Uu7V7V{YMmIaKs;Tڿ,m;Rx/GlQ9B_2 F[aOEU6I}yy >rįi[HdYn qp}Ky[ݭr fLn9 >٩?Xx~'G+֗d)9eMmv~j;"_qlI8$)E`"1Fߓ\"iͅ䡚;{`8V$/Q ğ?襋˩rkjPTI8I~ȋYoIv-b<.28#w͌5h61zo M8 JD.I *OV$/Q ğ?'GSM? B1|ݿr;Y}ťM:KpL$SK43JDu 9<,- _wLly]cV$/Q ğ?kYWov/6: dv<rZJa A' pH֦[=>B^=gQe*_kZٞQJ5T7)GrIlnKKNp\:tEC6?WWU|_b'o.o@-'2B p Cڧ~o:gBK2lu(|14Hz.'_9ԯ ?ixB ŕ.b“nZԫ\nw(_Pȣ(?}PЮ<@ȡXt2WּVl g ?*Y xLJY5Xu)${t2z }f*=xۥyhchj?/>ǥמ :m&zk%AY.1z|׌`cD ,Pc88_ /1U>{ !-# 㞵ӯW'5<5J49+t@ Qvsu!ogGџ ?SuW E9iG]|ViS!EWQE2z 6^YKms ΋uo`UnfO)&㴷QN3+Q[MRK4 bʄf䌄< sҽX}α~f!@܊_3F<$*IZ[ڍ~tV3OQNp>@8YYQ2ZݼnJs 2&EtZk#NX@rJ&7cq߽]ןj> 4(-m`*b lLTT.@rq&- ɇ\4^&M &mY&iubi q3WkkjGCt-Ӵ& *eҷ>7n/#Ջ\cBfSV+l-se.:J-e*11R">hOqî|~e]BKx"+fb|`>BѨh~Oe5\W[V $xÜ?5b[Y4twAfb+FQEQEQEQE|osRh>x_gG|'NoQu\/wUyOS oϫ%o3)ϨltV,>+gm.h$!APy+ jHIngRXe >WP$61מ `iO7䲠UIb@h.︿e܇`ѫ\)E~s+G01zׅ IFJweFo?s}׏K!s1j8X/{w6>%̻P>`7 1SqR9*I{&o?s}ћ\quS+hMͤW\hR6MSݜ:UW·nwvr\ VBI%vaвODS_g{&o?s}ћ\quMYU+"s")7OsD; b`o𞧞f}j{r?e.︿3y@˟/.3={eFo?s}rǰk.︿3y@˟/.裖=^&o?s}ћ\quE13y@˟/.2(`׹\qtf?_]mG,{L2 d! 2 BGQ[ui&kT)+M>xE}K_<(;?sҎ~ȧ7}(뺯?*zO4hΎU  zpǧZʸ..6qr@OȉWV^!%-,yIi$Uz}k"{ =?._*gk~L9I|nn}Y4W~z%RhyE J\q]w{\Ud_yrT,K}YL[>%RSB4EKi$eM cv0q7|Uqt2i/(XK,O8Һ/>ȿ,K}YLޢ~ȿ"{ NxٛV{\Ud_yrTs,+=?._*/9fPcQuVpGẛ;y(_w_;si?G4 O E`}ɿWw_ջQ_x$0}$Nrsj&>xE}K_<(;?sҎ~ȧ7}(뺯?*zO+>X%Y e1q<օr׆5 R-Z[y?tm`@S B';HGGCokJ:?ɵNzt4f,YM,W2IuW6j7pZn{*tZwF2)!'n}km9O2Ios߫">Iꂌb͌Iip:`XgU]3QU[ubfuhmSQޯ^ gF'ЏB sUI./oeo?,(ڹ#][d}|Vhr,RKPBgH?TuoyiZ y"y^7Y]@x_{/d~}E9iG]p SuKwm\E@?Y(""E*nDӶ[ ]Կ(4WKgG|'NoQεe$Ų%L!U: 9=Xz7wUyOS }oeF"-n$KYCH$L28 Qk7Zn![[]A1Lπ-0K'נk>T6څݹ "Y+8+ ;QX6MN̓O6NAWl[T,yYY2%  uAoE j#B oz%Aw!?j]v=V}p%$qGT:GɃ=G[I$|Hᱜtܿa^4 }Y-0MWWvṼA O]Uu9egGfHRe.Pų#[S?ն6\HlEW"I6 7~Q5>Vn+t67wsZҿ+o o7G[S.Edi_ϕ7J|)]֢>VnkQY?WmMҿ+o o7Ep5+ti_ϕ7VO[S?u j+'J|)WmM`}ɿcJ|)AjGyCHBc8Q6An|{uRh>x_}/d~}E9iG]p SugU^V}VAH;}>cz w}ffwawO+4m:(8hYŎYpWR7u8ɻ6e"%29۹f\<>P6ˈ$6ycM 38#5o!%yEUK|V.gS]բk`)9e oAS'O뚸;w j鿲W_E A+/"C$Hn@7,"V3O0/A Ӭl4;M ,#gV\)˯._y?a(o ^~QENgCJ!%yEVi,fd7?(?W_EiFgCJ!%yEVi,fd7?(?W_EiFgCJ!%yEVi,fd7?(?W_EiFgCJD;(l2LCϩMDɝkr>iS'=~;QdDMb镔uux\.bp%70gW+RM}4b 2>LzUi&kQErRoSE_/ƊY|Lȧ7}(뭽ѴJxgl']9H:zWVEJy^rGu5uS97M8z%3A{4J[ 2F8T^E$W61HB)ʂ=+oߔoߔ77LJ[GH 02NIPG Q) Q)Gc}'U,p$Rx\MONC!HS+n92~^Ny. -GG. -GWKNy7ycE&m꫍f@Dxf[k4xUmm-Fٕ:W Q) Q)+}?yI?%k̿u[yj???u[yj??>oA=7j_&?yI/]~ZO.]~ZO.b{hwMڳj_&_疣~S_疣~S%hڳ2oߔoߔ+}?yI?%k̿u[yj???u[yj??>oA=7j_&?yI/]~ZO.]~ZO.b{hwMڳj_&_疣~S_疣~S%kgFXf`y9q-<]-<]\0mO&U)u ϴEhٝYC+Tpyu[yj??O]~:O.\2(|uRh:Ȣ_9# endstream endobj 1249 0 obj << /Type /XObject /Subtype /Image /Width 291 /Height 218 /BitsPerComponent 8 /Length 16426 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222#" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?YEղE>W?7<|tZE?UMm@]1ʆ8zDψ'xgl'9_G#XXZ׹2.yeB{hm5@O'#E>vW+cPom..ZoǵrZv]xsTԦ2U/D#m'N>j0x,Dv}8+`]:zQϝiE>vV{GҢ&{o-[v vN ̷uh.b]TY$Tr(I7t}W%VniE>vQߡVG5n'6,~RK\ĻcnAlh9J_W["02<Ƒ`vx柷>§giE>vQߡSx_R[E N̐.@f8L,l' *Hp>m١Vwk1]&MSx̷UCw/Z̹ж6PKdK}ۀCSx3Wr]o=ҋ|УN/B'Ze1"R276Jx+ ӵ'[hn"cRg?7/2TTfgi>vQߡM<ZWGn˅8##VټQ.J|ٛxTRIءݗ{|QӋ|УN/BFoOiZ(Ba`XEcZiNQ8"t$-?8 ?;o+3bii>vQߡYr4Χ[ߡIZߡYrQϥiE>Vf(rQϥi=pAn͚&!HU#<`dz)|9pm-oח#.P6N215^(k5Q6.HeVϠ=4˩rv4iZ_aon^_t{\?I6+xcӭ|fh\[2q>3hoQnj2~#qn<s+*ޯd۩0olnl(%h&Ү Pȯ 72qj{O^]w VU<.XZٯxMXrIP.~oZܰ4廍vHհH<}?\9i[ F2c,ʨJ3{>w9 ۼju;m..>drB̪pIFz%Ь$mVPh@y99xz~9}+/eD-T' ʘtjNtzw=|FAu9^*jҢVkMsq`:Q^rOE{27;͍YOVd^GwAcED z]My'V4r[qpNEyfY+$FO>ND27+lJ%mѫ}oO߄/|Q K5l]QBc2;b[-B+/kkE+~[ Wc%A I?24ž ??kL5\ gVܖe;saᆐfip qRtno!1ZZ!dBlg"~ a|?G"~ a|?DMSO68,t4Ql_^".Щ,~o{&#IEo)Ta'4'5-^_pEch-U/4Zb(wa.PcP@U}O&t}GGs;ȩ.7O#_}M}MoGQ4*ttDUYG?eyA:Ŧ[.se8u[MC[h-~=ܼ2TH`GcU?_.qwg{~ |UgAVm"S6TbI?5%-Ib[H%CP+u G??5eEYTU%h}O[k-] q3d b[kpi޳Ӭ5F <1rO!xڠO???O&'/-|6^iќic#'% }^#[ ޡrQW<=g?ϰ$hO??ږaN5L&.Y{{"~ a|I?5~">SDA>?ϰ$hQ)`kk?ϸ$i?'G~!G7G[?}?Ϻ4jk~ {uޡO?ğM[1ʓQM.ߞ(Pj')u~z~ѨF?9iѨZO{W_o/ѨF?9iѨZO{W_o/ѨF?9i-ӓtw@y>HMp1q=u/x7@#;H;ѿ:bf^^]u|d~byeϋ,"k22w T/W[>g?G"/UqNڳXM 6*H纙k;Vۏ+\MP}Q;y!e)v(L63 >Rk)ϙQ>g?[4RÖ=oE4_??f=cM|*E4_?٢i>9cSE3M|*hOX1SE3(Ö=oE4_??f=cM|*_ϥ^^ak"XJR;ߙ-%%c??dc?J4< >xE}K_<(_2@J'/k/^1 w&r22GEpͦ܍sfY} q/k~+XZ:q7< ߹< ߹â*/k~(?/k~+>T=M߷Xr>V4>LX#f9$&EaR;ɖwǧxWhBO1c >Uȿem\Ґ7I%YrsMO ׭]JrK=ٝ&o+Q >UW' \J{1}}7}?M{+?O ע{0&o+Q >UW' \Eai;MW}7}?⫏O ף?/^vy|G&o+W \G%rG_م?7_*MW??/^J>z/G OoϽUy|\%rG_@}^fsM{?7_*J>z?+?->a >ToϽUq@}W'z=Z}}7}?⫖Zu%rG_C{[ l) ;K`gZJj1OPQwM2앙Z,Xx}K񢋯E}ܾ&yQez?-EO_ף Rf_u=N/bQEpX$-ooׇ!#!bYTlwGh"X"6a {1]Xz s؇eu?QǩXY4??}qBXXP, $2z=kNY*͜v|i 5G͜v|i fϩQ)c(Ku)kKNKKt%֟Vei̱o%ruRh>x_w/d~{/?^%KQxATYOS Q\'Aj^ ,Sz)e'2>zkym˙ 3G=ǽcmV!sf1$Eu@]1ЉØLQY8wJђ`Adcް}F!gYc3m2+N8gS}NG:_Mnpn#پ5T{wpyIn{ֵrmsʪ˴.to_ӯNN8EY tZk$,Q}Ou+&T$P_ .+ <PAt`UZ]~EB-!I䁞( NFF~'N s, $&;G{}^RůhL$}*/i6A{7L4. <yYpA!%fnf=$W7i{?*b ip1ӿj_;L,@?g Q!b~]NHVT18Fn"<ſv65`bO < ~>2U6W~{?sHȬp]?ehCsk3iTNJm4y`bO < ~>as>[*C*m#PYw%NFw dӵ`b/'$[{Ӿѧq0}{G繹'!W0۟-z@ZiyMspUFI铓kw /;ۏi?Ù;-%wLe4*pG..Zy#k0n$RXG˵]Ce!$~=k^%Jk}6kcV#ҭW}0z>=Ο /.ǧ^a_? /`{:_0c-R>e ssYPԍF -6l5_9%+nhOe|+2X4QuRh2? = G *Z,ׅ Bh*s2JA ~dOBF@\RX[+u)'(z7?]-e#/#&FI5n#Yϔeu?Qǩ&KuٕO,qAu8H dp$j;v׊.{-?,_z/=P.f0vCh*GSx̀Emi6ȯk* 3 TWP瑡Ǩ?,_z.m%1Η H7qc^+|Rtlzpi%'i!h$yAfD $TZ9)RDb2Y!%Tp ֹq+5p66.dh{I 3z?8wk/! F!l+0G# 9cr)>ߥs쎋?8'u*-|H#2*D֣sB=wt9hڈ4p&3[b9=k E$t_d𿮱G[h`FV:0[[|n4 Ionܜ+?h⢢ĺnLDzHWS8 dBs3^I fmđ;O ף?/^/fZY..pO!FpU]@}W'б]2s?/^J>z^a{&SW' \Gף=)W?+?O ףɔ諟@}W'dtUJ>z?+?{e:*%rG_@}}z=2s?/^J>z>NTC?+?^XKfv6LTm[#EwuİD l?04%+cγU.Ɠ.;-?,_z/=LbYe ʲHQdM1hi|+t^Ugf "=ZwSX-?,_z]sNiZ?ۿ.ѲgpF܌3*Am$'XQc Gfݜ!]0zR"O ˴-^yv~ʑ9Vmbdi!h$yAfD $TZ9)RDb2Y!%Tp ֹ1+5p6iz~!L$@QA<ύ=AH_O+%UVl33;~Q'TʔVˠ(wq4gƞ ֖kog[xXs$22,B?Xj Ӯu#,pYCyLe+`C688?_p<كzF|i v4QgzF|i v4QgzF|i v4QgzF|i v4QgzF|i v4QgzF|i v4QgzF|i v4QgzP׋ᦌwk2ZFInٔb1铞3)%Ցߊ݂ѳ<֩ϩQ)c(KsGխK[;H*='E-soՊ䖋O1A֧3Z,Y2nx}K񢋯E}ܾ&yQez?-Eh2O D(S29V2{,ׅ K6NbI[l\Ub=A=j1"+ Ɔ!L,q̊#=qd# M62iDs7SӞz/&u8~R}h=4(y\?8qU.;52^\N e0 xsC>}NG:_MMoCMm65MyQB;\XyU@yv{u8?j^ɖ-$$(7K+}_SyJou @U JBO9d!PVu_p)J@/,_axg1a˶McjpE}It!”&cӧzɾ-U8|+$$obnn<1[a$G]1rYWpPWtMN(wVYV|>q#gogɾ-P%zM v1j<b{:g +by75Ũ1tϱW75ŨokQc9c(?okQgs>ǠQ^gɾ-G}@ɾ-G}C] ZcAEy}C] Z&??΃=[]SOk;ʑdazP75ŨokVay;ˡwLk;kXDQGAaȥ}-:g[:\Dio6N tVVejN y3sn_]Կ+3̏Oi8p*KWth׀6щ }Asz΍כ֫*ORՕ8hx_~_GE5sxu-/Xx>ާ?>?#??#??#??#?> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222'" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?YEղE>W?7<|tZE?UMm@]1ʆ8zDψ'xgl'9_G#XXZ׹2.yeB{hm5@O'#E>vW+cPom..ZoǵrZv]xsTԦ2U/D#m'N>j0x,Dv}8+`]:zQϝiE>vV{GҢ&{o-[v vN ̷uh.b]TY$Tr(I7t}W%VniE>vQߡVG5n'6,~RK\ĻcnAlh9J_W["02<Ƒ`vx柷>§giE>vQߡSx_R[E N̐.@f8L,l' *Hp>m١Vwk1]&MSx̷UCw/Z̹ж6PKdK}ۀCSx3Wr]o=ҋ|УN/B'Ze1"R276Jx+ ӵ'[hn"cRg?7/2TTfgi>vQߡM<ZWGn˅8##VټQ.J|ٛxTRIءݗ{|QӋ|УN/BFoOiZ(Ba`XEcZiNQ8"t$-?8 ?;o+3bii>vQߡYr4;o)?K_+7)ZߡG_k~fbQʻ)ZߡRAy౷i\""2Ndb*?5=9[dT 7dGsFǪ6?*&AG\-i KAceQ{mokv%sB!2]8_$є}5FbIuSqUgEγgqr#U?0aWR-$k_BiǾ c/hv5Z-2T[+{k E狅O~qgc9⺭Zچei^A$/[Pȟqbb-a}WĐezlrΤZ[jqG|zĸǛݷS|mgHׂuԒG~8\d+H}I)B㬢ÅS6ZI{uޡRYN+vFsǵv6ZDұʉnA9u-GOYTS{z_J?ofOZV/FqPUӧ~E`rYez|jYxsXZ)^[ڻ-O@j":G[Xo9m M^sO2O:ے̱x 30 1U_{2ܜu*Y<\Nb-խ2B+KW6v,cqPs횥~=h?Y?4NS7yT]ʄqGY^".Щ,~o{&#IEo)Td{?罏MK{}㣴[[j65e^h,Qh]Ơ;Mj5}rP)"wR\n3GZ?&Cc}[Qg k[O/$EZ8ڑ:6>}n}w@NiK.\b)4fP+y/߳lg/!l$罏M?&n<ף_{n챷/oYϊ(5> JfJ,C0=4\xMy.nPKA"Rgqy~UTs*ol?fGf(VWNKȯqZiڂ[]5 -bDrI7dRilѢFӑ#G~lf`]16mێ6Ն'mzݽZdkZVooG~ݳ=4V*3fb2'{3G -bfdӦLpHwiҼN63_'<6#4TRxJԴI;F$1Z+i8{ jWm?Co)Nrmzw_+go%t_S Q^qQEQEʊYijXFgi<6=I'2ǿBKj?=֪Qp/i/{G2ǿB./e_ZUkea=Аd=Nc6?=֣Kj+qmsi,.ж7Ώ3RB.^^Ha1=ܲ y I}.v_QLqa;$q T!UӞ$դ KX IlK7$!pr0>NWki/{G2ǿ[kZ~EkevnEbwa:ĺu֧isq-YH( '\ |\?=֣KjHti/"G2eTc#=P=fwX3VC=?`v_QLqީpJEbwa:Ɠ {/ŭ_Z/e72ǿi/{T(__Z/e\  =\E!Ȭ:yی4gQc=thiyտ/:j| @J꾧N ((()FFEg6]HΗMWkpA/4gKM1xQ?y?3GtO1xQC/4@L#zU(ыŽP+ )P" _3ttHrՆ0zu~UkF/ ?bP o+,alc<40"P*qqҮhG_Yy,X@bqj|6Ҽ[#]@I(ы‹03?&6;JJ@NHcr}i¶i Tӎ:V_hOP(KyRk[I'%xe2*t4TO-UFXы)X~fbF/ 9@:_'hΗF/ ?b~fbB/ 9@igP=0 L$EO֋??LzO>,Ǯ-9O?:%tGAouWM\ρ ]5|oW#Y'*?)?KLZP6Zu$0pqWtG24}K|C 2I"tdev%[1IG$F쇷YʁI,J1\e/hG25M8B$N;'Ҵg(pqz C"YӞ49GPz΂R}n?Wo-E44Ԍ7r ys*çl"ǿZ9: CՊOppvMg~uj#JԮ=6ovwdoe^:ZũuuK{b/%Vr;)gL[o΍g~u0?cg'вo;8ʯ~TV$Үm\g,ȳ3=285NU}IۦϭF3}m:4cr\A-n\@J|O-7ͮiw1pnq*<WpgL[o΍g~ug\Eő,ݼ~l}<ȓ9%+ik 6,uSp}=g~tm?Ra-ۦϭF3}m:*(ݺg~tm?Ra-ۦϭF3}m:*(ݺg~tm?Ra-ۦϭF3}m:*(кi8zq#a/Z+Ps S5ܰ2Jӱτ5U?JM }*:q?LzO>,Ǯ-O?:%tGAouWM\ρ ]5|oW$I}k ]<7c8qEŜW#3TlɌW=KY|܌w)A FyUmfOE U p>L=տG,瘣/* / ɹ&I<`bxeE?.s GR0kZkfU FBrW@#olU/G,瘣/(7TV/?پ=>%KRܮX{T4]_Xm;ѱjFF|{kIiVLjgmJRXnR>~H_0Xڱ0ۏ2عf?*ӽTCy0G^o.!V*)\ϱڮ++{+`ܴ1$0t‡:ǧؽMkq-vIաHhM0cb0q }] :mv B->(\6u$~'Ԯ.j4.MF6c9AQ8R<_c|7G%?t{hwߨ+/|!6f]$W$f46vOT-u{KbדL k⏵Utqf.l~_}6vqjT2P0Szʋ*H>Ss6&uevvڋh.uk܄>ii鏸Q]b6VG|hE|?-WKGjlZKnOZchثPm^p?(ȵ]G 祇sȵGE|^]>Ms GzKk"{XfoF"Bɕ$g{9 M7cȵGE|<zX~iGK(r?"gE?+tan=,?4.q?(ȵ]Z2-XeHA=i c0ۉ Ur@N=?1K#"gE?+MOrjiOe leq6p#*[ffKwH) 2STn%k?"_m$1GOvȋ-IqEi,GzqjO>CkO`E|?-W3ϳ???UfyE|?-W3ϳ???UfyE|C[sC촉n-tY0kt5Vu Ԥb\<]¬&8WֵmFUtRX'ңq?LzO>,Ǯ-O?:%tGAouWM\ρ ]5|oW!PE3OU2䤏=J6+: .Dk(*&(De^÷:uK1nKbpb$# :Dc7cA T`b&h" s{qk+ݼ"X sY=pQ)FgTdc<}j<4cA M,m# ? oCeVggi$n$MX]0{@1Wf^x]3C_dm&k!Ԣ#K0جWuYd`vH=A 3S٣d$oAWߐ2J6ZGT PNƗa35yKKeQ0kXxٽλW zu4mc*cIXp tpH liI.L^h#62#vwo9!5 oqe<(6@HUkKuM( i䌞Ubp8kۍ;ReԚK{43KhJ l!Trv_'"L%rA+U8:xv1 h@py>_L%rA(_'"x%Ua/G&9? sǸ?ȿq1kKRjVjl0N;v0=+;X~!4߅7BA$,`ҹ*-@>(>,Ǯ-|X]3?Z+?)u_K莃o?j|ӄB(8 ( ( B21KEd_ik1Ycz-ĸWSSwRد_ꏱ_̿u;֍G0X?2T}~e޾o_Z9-+W/]Nz9o_̿bw֎`}~e}WS}h޾s[W/Gد_꺝F,rb>?2U_Z7c}Q+zѽ}h د_ꏱ_̿u;֍G0X?2T}~e޾o_Z9-+70ne_Z7cɽX'!DE<ii7p籉c>l ;<; &y/GM_ʕd.y,l6ۇS~Q޴m{RkjR:R)6=em,oVȫՃug=}~Z꺢pR2}qN/TbiI Ba$.7Fc?5OGƩZADŏ?ޓe'E}SO3ΫI]x@-]GW3ouWM_/U:pQEEPEPEBFj3o ꂢ+@Y@4ǏSW?Oҏ/T9?Jh瘣1U|S|(O _fy>W?Oҏ/T9?Jh瘣1U|S|(O _fy>W?Oҏ/T9?Jh瘣1U|S|(O _fy>W?Oҏ/T9?Jh瘣1U|S|(O _fy>W?Oҏ/T9?Jh瘣1U|S|(O _fy>UO)g&? "Y?1 80Eh\'E?LzOʟJgW#7[+%Uڹo}N'"T?zO*o?3S[}.xfdwr#J秽]ZKEhQ{$3t]ʭ App6dqt'7^*o?aAxfX- JI)L+c;^]NSl#yonG8s~(/7^*o?sVzslMav/&G w2~OӞ: yn~O=6"0URNci8 fɌcndDVm?_Oj{7ҕAt]@{dԍ4.j 3Vi=ʶ$#qWտ筯&wiF{n#3AjGWp$~"ZRuy Ա̨"d,?5pWD6տ筯&F5okj+&6?ہ G^EL MP$ -fl;ל :f;~bf1[_Mj?];~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awտ筯&F5okʊ=;~awzjYWjүͿ']l\+Ura=OtǿX oK JjrQ]Ao$XUw݂xʎU_1ߝ_]h2,l9zt҅)%JRrZ!]ϨLJ?п}+wŏ?ޓe'E}SO3ΫI]x@-]G$fGhcOR+o꾧N2λ8URmpbvDmh=Csu=k-?+Ϻ: +[.Yn8ƃg iҍwDo:5}=ʠs[ZtQE;~9n$B)}vv\i5_~}^v+=?/oQe>| =;3(߲F_ڮf{e_~}{U,lO~}oϣjWoϣ/oQW`=?/oQe>| =gQ^'e>| ?ѿG]MM>UK7@tu$ϧ@fO+߲F_g*|q{o$2"AR9Rkk`-ȧ-'ωJ.9|FtiA=HCJĻY@*I@ڹފƇ c=thzI_oL_Dt Q%t6t_K&rs$ __;VbgV2*uNOOO=_X#G?Qߔ W5{UG?Qߔ ?cx~)؏ȇ3ڨ?Q O^<D>Ex,o?X##!+?Y IG" JOX#G?Qߔ ?GCQW_GDWG~S(?SW?G_gdAE^K O7?Gx?}j?=k"(ȃ_X#G?Qߔ ?OCQW_GDWG~S(?Q?"ZZȃ? "7?G,o?zDQG?Qߔ ?cx~)ȇ֣3ֿ "?ȯ%?Q O_<D>dAEy/,o?X#'!+??ȣ"+cx~)G~S(W?G_gdAE^K O7?Gx?}j?=k"(Ƀ_X#G?Qߔ ?OCQW1YGU0+ſcx~)G~S)ȇ3gWR$dSzaE} xғWտ朹 endstream endobj 1269 0 obj << /D [1267 0 R /XYZ 71 757.862 null] >> endobj 1270 0 obj << /D [1267 0 R /XYZ 248.128 575.606 null] >> endobj 1271 0 obj << /D [1267 0 R /XYZ 252.556 351.2 null] >> endobj 1272 0 obj << /D [1267 0 R /XYZ 213.13 100.543 null] >> endobj 1266 0 obj << /Font << /F28 123 0 R /F31 125 0 R >> /XObject << /Im15 1248 0 R /Im16 1249 0 R /Im17 1250 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1280 0 obj << /Length 3142 /Filter /FlateDecode >> stream xZ[~_!BR);El7E-jdɑ䝺禫d[Cx98ʹL^y;~zA<܇UmZ8q}~|d5j˕V/.+2d23^OwVVvb^bg{Q&#:9Ap۝AhYvj!KРVcV2b/|rItm|=2r&! EQ4p=>}=fL!#"]lǴ͕)+?o^3}_LhQ 0$^g0V߫PWtsi|[a׸KmKaU\\6$<ɶ8/1rK96p%ä85SU?Vsm^@R9ENi.]Bv SQܺiGCY2αHZOƌs*fA )[ Rl. 9B>6mVZE ummyeW+ᡶUW}wnH_[۲ge+vU)n Z Xhv׹m]]ʝJ?vyv i$,m>avdAG/ ZGdq2" [+sgbǶQzU(ވCa&{Svw70jYё 8;R_1oF%h8AQD[dFC r^t̎ku~c"} TaX&3F>€4D aCxd 0G6LЉ^z DZnLa7Ya~X۶u.I-iGsζ~a@ ҖBہc"ohp/(^tXgfvd?p཯1ԩIVf x 7좱FQgC n[,`b+ D^h9y6wTY͏"LrM&ҩTgh8G3#2ĴtL{Hd. (!$68nٹ1#tˌ',H|{}[{X]Tz+JޤuSn c :.0B\AR%hVOhr l]Jv6.@r{P .$y"hNd@Dn{rEqRŝlt؛:f#+ 7 bHq:'?/xa)[T[۲t>ߎƪ5`I{LV|ųPB O'XXG.n1O=X;iDO, r-j%lHzU$r3qCG!/c=+?~]xɱ%^t8@">RpvƠygruco34-[nr+}됝(ϯtIR3qo4p0Hzt^SA38 "?z&e*sVLpgfƞ,Ғ@U gU,5/+@!Q8slfdVx`-cg!6!k7@ s)tZc/ 5lYz&d ;Ns%0p4\c%߽twPN1p52t$=j! 5?{ &Έ?.Amt>>{GJ-9ZY PTPsf&V-jYZiDpS8ypm=.Myyt+?Wx,w {m2ΖLگʶ~Y^N=[7=L{NwoQ,/Ϳ>](\ة>1iiLʵ_h-O,*ִ6~ GzN*$0=$ &`$y E3yNbOqϯ!pPz bF*+=|Y"@)%6)#5)oWQm;/=*8bC?>c&-׵lW*^2KR3Ql^5ErdAlhE|NkkH,!QHe;Z掿=_ԄbCf49\x\7=FK&41h!EljI`7Y,8T_>vB1]ҭb{-ؖ&zϵn\,`8@^1`NjjRZM/B Jo endstream endobj 1279 0 obj << /Type /Page /Contents 1280 0 R /Resources 1278 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R /Annots [ 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R ] >> endobj 1273 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 503.917 123.467 514.702] /A << /S /GoTo /D (term-group) >> >> endobj 1274 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 487.902 115.606 496.43] /A << /S /GoTo /D (term-item) >> >> endobj 1275 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 469.97 116.941 478.498] /A << /S /GoTo /D (term-29) >> >> endobj 1276 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.275 390.224 213.739 402.717] /A << /S /GoTo /D (Hfootnote.26) >> >> endobj 1277 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.096 378.269 372.56 390.762] /A << /S /GoTo /D (Hfootnote.27) >> >> endobj 1281 0 obj << /D [1279 0 R /XYZ 71 757.862 null] >> endobj 1282 0 obj << /D [1279 0 R /XYZ 72 720 null] >> endobj 1283 0 obj << /D [1279 0 R /XYZ 280.546 654.843 null] >> endobj 1284 0 obj << /D [1279 0 R /XYZ 72 567.018 null] >> endobj 1285 0 obj << /D [1279 0 R /XYZ 72 269.686 null] >> endobj 1286 0 obj << /D [1279 0 R /XYZ 389.915 215.597 null] >> endobj 1287 0 obj << /D [1279 0 R /XYZ 72 199.503 null] >> endobj 1288 0 obj << /D [1279 0 R /XYZ 86.346 104.091 null] >> endobj 1289 0 obj << /D [1279 0 R /XYZ 86.346 94.386 null] >> endobj 1278 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R /F65 185 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1292 0 obj << /Length 1585 /Filter /FlateDecode >> stream xZmo6_A`*17Tk$k}XKWj,DJ1ْu!I1x{(Fyi@2CRBcpO^q7EK 'g:D"cis}CaTE`Ev>}&h@+3Fr]vimҍ@x4NwJnr2Ӷ Jl9][CgHn9-^9ug7&9tO oNtm:Cii4^ OTF+Yn>DFUU2_mi_ueBx-e~&G3ෳn,Gh`rj&guىFޥv};"e=Ib= uZXFZ(tmoq:y +zMrnG62w9A0Zw`uQJpU ҏi!Z.3φhD7i#M伾jAeTSj"P` ⋯n%Rd'\]{3 物qoiHhgi 3 \ S^怛A(H4 ZXD4'oΠ 7 ΋E|3/]Fe [-f0 M- .2?=.&-fDsu4`B< a`gUj ǀZČId&՞O~URNrj8TaAA5K{΢%_Wn<ZC6}3)5CSc<v5߫tƚo2ڧ{6Qv|гGa|ldgayojmN.q?`7[2NMfn@я.JlȮv\0L)+Fq$~wiŸ*xym2I/'E/ endstream endobj 1291 0 obj << /Type /Page /Contents 1292 0 R /Resources 1290 0 R /MediaBox [0 0 612 792] /Parent 1229 0 R >> endobj 1293 0 obj << /D [1291 0 R /XYZ 71 757.862 null] >> endobj 1294 0 obj << /D [1291 0 R /XYZ 182.525 485.304 null] >> endobj 1295 0 obj << /D [1291 0 R /XYZ 72 471.267 null] >> endobj 1290 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F65 185 0 R /F66 186 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1305 0 obj << /Length 3222 /Filter /FlateDecode >> stream x]}>ΊHJtE\ۻ-^6C\hk%GP+ɾZ !9盎Ex}ۛ/_|QDzq{PY)Ȓ D?+) xi"rh,aA9m Pqg(KS!DX-=G"=m} }nW* B߿,]ޡMAt[,ثviW:E V0:z][\/ዌS2%,Sո=\ZtєtyhZ9܄cwCT$YgsT,A5 +-ǎ.-"=)HzK": mrJ%]O 6dqLjiH/ĺ 9!>QvB%Ë[2-mds3* Ȟ523 7h|Ѓu ~F`x8uFT 'MfynO^!vgmg\_>3Gsf#=:$,@?(jha!s|bj-٪i+p M_Ɔ Ss%ٵZiPhъ ]VųGHfn?x<}8v${5}9Í4OjSzW4 4\SPK~53J1ajʞ"Q!t7hԷMzٓlOA)" yI2^\ U4s[*1ȓдL__aSDpjf(" "-Lu0Դ㩂2 iB7Zɵhd[Fs.0:rg{"t&ioW* U Ϲ+x|q$ 0&~ }v!N;(CT"޼m~ߍ Wo3^\(!)L¶ϋ,=~?I|Ydt(ܙp75` Bh wT\y_1e^9 -uir弙d$6=IY{)#uÓ54Ѹ7􆩈TbX'U1'WX{+L{WOz{,%0vOٰM2 !e=/}>蘪oK U 0`4%Q8桁VvSۻ+R AXvx dJ DG}2 (]w=Xcu !t:pI*N-2F\y0uݵ;[ji-NaW.-X}u<zYa`g!|Ʋ`coZȏ:BлS^_ʱ{1tJ`^k7Mqei ohFD};ݶE>=K.웰ʩL^/~\u.xL[NV>MD*︜@)M!$:xVOzbh=yD:0@gy9 J+ewa ^?U:Yh5QmOz-`~\@\zYC.%>y,R ,`eH)ȉ3uOp\pҗIL[*NfNfr읃,2,M4HqGr'א?z Fi^g4K6EnidJAzJl?3ly|sQ OB[Y؋]:V +c[yˎc=rx^}خǟ׺mbh~yևx ?LO(LˇJe9U^XA"It |ib)P({>d4(."I&*y+-cOoE"p_z\%XdOӗ.;o endstream endobj 1304 0 obj << /Type /Page /Contents 1305 0 R /Resources 1303 0 R /MediaBox [0 0 612 792] /Parent 1311 0 R /Annots [ 1296 0 R 1297 0 R 1307 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R ] >> endobj 1296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [419.05 671.019 451.249 681.923] /Subtype/Link/A<> >> endobj 1297 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [455.541 629.176 540.996 640.08] /A << /S /GoTo /D (extra-trait-editor-factories) >> >> endobj 1307 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 617.34 135.342 628.124] /A << /S /GoTo /D (extra-trait-editor-factories) >> >> endobj 1298 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [143.935 587.333 177.788 598.346] /Subtype/Link/A<> >> endobj 1299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [226.983 575.377 260.836 586.391] /Subtype/Link/A<> >> endobj 1300 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [481.321 346.091 538.506 356.995] /A << /S /GoTo /D (term-editor-factory) >> >> endobj 1301 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.205 334.136 405.457 345.04] /A << /S /GoTo /D (term-trait-type) >> >> endobj 1302 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.548 322.181 490.174 333.085] /A << /S /GoTo /D (term-predefined-trait-type) >> >> endobj 1306 0 obj << /D [1304 0 R /XYZ 71 757.862 null] >> endobj 1308 0 obj << /D [1304 0 R /XYZ 72 534.531 null] >> endobj 895 0 obj << /D [1304 0 R /XYZ 72 534.531 null] >> endobj 85 0 obj << /D [1304 0 R /XYZ 72 519.521 null] >> endobj 1309 0 obj << /D [1304 0 R /XYZ 298.169 283.491 null] >> endobj 1310 0 obj << /D [1304 0 R /XYZ 72 267.397 null] >> endobj 1303 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1325 0 obj << /Length 2180 /Filter /FlateDecode >> stream xYs۸_R3ILuٺ!dcB*I],@sdb|._xpɻs Hd,A*4X*.gtl., ~Ϋ./ą.ujI&f-:9[DWA9V0SYȂ;kIm\r"u@IP,ɓS`F&d2PI$ -KRG`O`\!ӈ-nt>JDEb<!B#oρb82lc [:[,X OxOf@<<3pO\`['D9 WcDth4CCkӴ|a pY=e=-#b5Xz54__ttkvѫϷ5Lp+.i8a( KSorOWC{CpWtI# $?B1bߛ.7)邔9UZ^.`Ι-C:˯] ]s}Сeͳ42&dS1Z]?SƋwPqD~P#4NQDQ‹$$X_XdvPh퇍Ȃ@4Ht>ëK,Rd^<tuU67W;SW4_GYjrw<4+(bpۡCFuISVThmt$ޫ;LMq/ #+>d n࠿ŀ赮t? Ib@g" ߍt!`- ;c[IagthYt|APͨ۹_YEuIq.D(Կ#Ԍ(ĽZh"w?0&x ')58FzD<mK  ˝Ɂ7ii.ǽ4e?g`x읺5> ( A>ZòԌɷ_PoL۞m۴}.ʺϟ%jRb`7` VQkɤa%E,KQ(|ǐK3Br0Ӱz?GGX̠d O9 C sSL*`K`15u.ctHE6/SN(w+䎞 BػEn?fh?q.+[Ш/y36Gc %8N+=?g .ֲ#1uM0} ˙MPgz̢0KU"b ʿ1 J^;]U5Ġ'eWTT1q87+ Y%/}n{وTjsGk1 _X=%F(ۗJOU9˒Gnr,(>!cTײaw/JI1Wb5quD!:cm7P?zP!hZiS)0HL]]ؗc@G)e܋l?MQ?9r e wMعAUJvcTo|"_,t8ѐaLsW]XQ &V+́V1O ;9BĽGH}wvv> endobj 1316 0 obj << /Type /XObject /Subtype /Image /Width 264 /Height 127 /BitsPerComponent 8 /Length 9506 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Wpm`V/oel8!Yr7any8ش mydU&CJc p3:5CNe=tODs־G-sɣFy.YSOews/J/B( Ҽ(iڕ 6m&ߺ3̀hcv6*.7'|,GoǎFzeFN-gY$ҋ|УJ/Bze޵ l:ǒ@ ]ڽ啭s[<7r+r3U)EM';*3j2/( ?;o*h+!DlP*I"DG-ة$ZKO jG@\\G Ok/z+H;o(ҋ|Щ`qXwiV8d#Ś#b \: YI.bL1c'  =ij?̻oװ1qϝi>vVKAc#~4rm4bH6q}ӏg* kV=gFd9Ib2 5%mr@Y]?八"Ӌ|УN/BhzI#,"U$eXFr;~+x8MsGTc(8=ߡG_m~fbUrrqϝi>vVf(9M/8 ?K_+7vSOJ/B( vSr8]6k'E$!;##>m5(k5[zi1s}'8:WnwRoYVmlrpq<o6FU&l~+$S|8w\ۚn=t54uibb& k:؊Z۵g,j[Z Kۨ,bȨvXC3=_鶏$*&TKp.: Ȯ 5'VWI?Dje? 'ZKZR5cϡӅ;|Q K5l]QBc2;bNMމa,wjnx9G 3Hqsk?KᏉiO"[/J4o?÷!GSub ObS7xlqc 7bB@pr26hYtko'WEET, E 0JoV$/Q ğ?~+S(k_OE'*ޗ$(P)y4y5¯'O"U$/IQ>Rj5u-Ÿ*DpCy8{^&Լ7tv[y͝6oN< $ó2]+:eO&BXUt_bbњZyΕYǑ;~q-m+viGy/,R+EC,;cVbHzT7`g^*x3Ť29Kݘ0s\Y]HnK| ӕw1BiY "5(%d>a^}r8s/1PIIs 4",|UϠiM^5w**FjF}bmĖUEQX|H uMEI`R2dcg>o_ďt_b>Y;q-OwEO{ ^}y+Es>3Z>=𦻣gT.Y`QnH]zʊ"0J\^G՛^F۷ SuW E9iG]|iS!EWWoź-ILjV?k- pLsU4u(i&խ-#LI"JÒ!B隷,Ʀl./@薚IsYk%{e12ȅf ω6Uy"fvGT1X1}J@vt 5  |c2:)Fi&kbMgndIa,cڀ@,.I "b<^}ZԮ5-nn-ǔE̚\a_/n_1;\@urhjyνwh#ZXyUD2F3e2yCs⋛@xuYY[B2W>N3Fj̺LMX\_Y#D8\+ 7dcQ[ m`h^n WpaN2>jhJ1n3ΩVn5 }i?~5o}^ZEs}f >X3WzR,O9I 6ϹPǗ,p7<R>6*v䍷m9_`WO"E9+9QsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T ʓzԿ6vke1gA۹Aw֬a[RљGc?ZooP8j+m+V@$.삂TrKH'AtKqlm=W?G3~]z_kOUV'AtaGkOUQ_baGAt{_kOUV'AtaGkOUQ_baGAt{_kOUV'AtaGkOUQ_baGAt{_kOUV'AtaGG7 Od 9eeiMwsOE}VSY[E9iG]p SuW=N'bQEp6wD}=TKi Br2t#}od0隡S%R7`6˅>_ @)GIj~Y[IulhTD|sU;E˦ǣa3omD%1~U^0D p!d*7*=@%W#EcU6ExZq吾iIڳDxdKv-sy"Ms*Cn񒷲yJL  &7;Iqkp>Z*%lT9PP@:T芉aj*TXTv騣g'ZG'ZG9\Qm7dt8ќ랧֭OW6[D*92<GjU#0L@x_Z\ZCi\KHKw(lFzVEmoI1(HB(vפThZ4kQmݖ;p0:ҮZFi!nFc`Hy16T`V#Fb9Z]ss [N"8Lh2CanC0EY;fm<WYm1f m'JKSW[WheYZgllT qoq2zm\,i}=G?Ə'ms>ОYQǞt!s2QQ|lO诬u¯VpV#3j~Ҿq5[<'ؙ2:C#KTqcZZ]]h?hKUs ܃L23\x |UƎ-p/XLWtw_6^~?.Up}RQYGcijܗloq F \nw,!َ2 ^.j-kIam~PKi7YJ|O (m@ ?+Og~13oS?65o Ϩ\Ii^ZQأI Y[FQS>ME,$142Iqne1*2G&s/oI_m'"o~10>#CSx~]mYOI䶑KrwHY!Vѐ[sk_'Rujئ¹#[1מQ P)d?)3x^KMUa]Z5"XCfFjόAl2Aawogl@\1 Ͷ_pjm@ ?+ͷ$ŸN7?}biL_iϨ %,(,ፗ8]у>-I KE,do_6 ?|O E/g~11f\|-կ~ݭ^ŠCo. Kq iQQpOc -H`l4M1_6 ?|O *Ujܟ_X{m'?g~11fWQ P('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?=_6 ?|O ('?6>6ȏ'W㟉AM54Ƶ+:ͼͿ8VҊ,Ju ^9jIJm endstream endobj 1317 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [521.988 377.407 540.996 388.31] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1328 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 367.489 107.118 376.355] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1318 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [112.154 241.47 225.365 252.374] /A << /S /GoTo /D (basic-trait-editor-factories) >> >> endobj 1319 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.386 241.47 336.767 252.374] /A << /S /GoTo /D (advanced-trait-editors) >> >> endobj 1320 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.273 159.821 349.944 168.688] /A << /S /GoTo /D (extra-trait-editor-factories) >> >> endobj 1326 0 obj << /D [1324 0 R /XYZ 71 757.862 null] >> endobj 1327 0 obj << /D [1324 0 R /XYZ 249.478 472.38 null] >> endobj 1329 0 obj << /D [1324 0 R /XYZ 72 312.649 null] >> endobj 1330 0 obj << /D [1324 0 R /XYZ 72 298.712 null] >> endobj 1323 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R >> /XObject << /Im18 1316 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1342 0 obj << /Length 3346 /Filter /FlateDecode >> stream xk۶ ~4C_CyLisf:I&I;Tlw J'۹SfN X,>/|s* Q*n"%B(30nOu򕦟7]٬e:3ֶ- %o^\Jq$L*FdqmvW?G[&.蝃E&᷎~UrQd:RIBm~_Ǫ'94l5Q(3jnSs{-'ݗ̍%z,/p)"'n)h'Li?2$ &g7$7'CV!^VgݾnR*i!čD c7q6@~=(S)ܬ^Lr!]ݮ؉ 7`6hfݏ,5vk_y.7Œ[kmB^@5Br"3nԷeӻshdu7D HTg Nn).;۸C/44*NF s{vvF ?!t黶L2RtfIz5Gl2ж57IA̮-[ b@tQ͖qZ]%z ~E /ʉ"KGϚt{ԚwrlF|>hXނuo6yS8OeFV&B&A"\,r1efWS5|ai7X8S/dD> iUKVƾ ,UtF6TEL*ӑiW] ; /V Kibcœ2"vӭ稟v/crXzґ) Jf \\ Yp;@dx\P9tW>h)| K5˯5/Q q]z{3QU]0m]$W8}΅;DyHn\dIO9–b~W({D-c$JT֕_}äOsZ19au^7= zZU}zwQ/J䫉PFd{|qHF;W|H9)/FM{zǼ<'CۆaLvʻ5n%Η~9DZC(kRbmvܶO_3Q{f*Z^#hH |cJ1Ӄ0aX>̥Hm w2τ,p v(̿7K=etA0)d5}f[j;צrL1x5RXpQ'.c W|m#[T--J?RW-RrT U )aAGoi ]5Κ 8[2 endstream endobj 1341 0 obj << /Type /Page /Contents 1342 0 R /Resources 1340 0 R /MediaBox [0 0 612 792] /Parent 1311 0 R /Annots [ 1321 0 R 1322 0 R 1333 0 R 1334 0 R 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R ] >> endobj 1321 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [108.372 706.884 189.965 717.788] /A << /S /GoTo /D (term-predefined-trait-type) >> >> endobj 1322 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [313.978 694.929 323.443 707.422] /A << /S /GoTo /D (Hfootnote.28) >> >> endobj 1333 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.07 605.265 327.529 616.169] /A << /S /GoTo /D (initializing-editors) >> >> endobj 1334 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.695 309.434 343.282 320.338] /A << /S /GoTo /D (the-predefined-trait-editor-factories) >> >> endobj 1335 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [483.961 249.659 504.065 260.563] /A << /S /GoTo /D (term-29) >> >> endobj 1336 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.019 239.741 154.37 248.607] /A << /S /GoTo /D (term-model) >> >> endobj 1337 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [464.906 219.771 485.011 230.784] /A << /S /GoTo /D (term-29) >> >> endobj 1338 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.815 209.853 149.439 218.719] /A << /S /GoTo /D (term-controller) >> >> endobj 1339 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.572 189.883 352.814 200.787] /A << /S /GoTo /D (term-mvc) >> >> endobj 1343 0 obj << /D [1341 0 R /XYZ 71 757.862 null] >> endobj 1344 0 obj << /D [1341 0 R /XYZ 255.141 513.596 null] >> endobj 1345 0 obj << /D [1341 0 R /XYZ 239.321 407.524 null] >> endobj 1346 0 obj << /D [1341 0 R /XYZ 72 190.879 null] >> endobj 1347 0 obj << /D [1341 0 R /XYZ 72 177.245 null] >> endobj 1348 0 obj << /D [1341 0 R /XYZ 86.346 81.465 null] >> endobj 1340 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1357 0 obj << /Length 2535 /Filter /FlateDecode >> stream x]oܸݿB^HtE_rMRZwqڇ$hi-F+RlwCj:( 93or6JϮ/~x˨J6z}q^+4Vjhjk5ydۍlQu;©~,̂KZ?N4a4C~J`Jhn矢S^4Pb2eRi?!E%a!h)tmpn&4/dK ,N:ng0X (83§3#d>-M&["d{}聡 R<1*zy9*S-swAШ msxaQRGOg<&M׽'tݡW y yKL0niI(eSwTcHz1oEqp&g8pp j\YwF8 ꡊJ#pߵGcC]zS "^;6WH\7dooymdURN9ﵥtsW11H_TgAxϒrѢAՁ￰l#ɘA/ ܺөM[SԹ=j-i5t4޸U,V~vlk,?t֚@RyREf=4RTvay<;1'is V,CМRW>x%߇IhK\O߯h ؀r}nاЃ~y`S.@-ᤋ4qz>JFo )*杘R,Ua=q|rڱ b rjh)kj"r@g?VhJ Xr.) ~`eH@B AB^۱B!s|/˧qʏmR8iIY$Ǜ^gnO 4ԍ-ew΂ٝ 7:6!2U J4!O62apk)\*eqք9gLd,`+.!Ol\5j%| ^+9/oAjr4RCXC\ ;7zFti[kkc7GOzsb=WC~og%ιb!KK|oک~h@w/Gs 4 endstream endobj 1356 0 obj << /Type /Page /Contents 1357 0 R /Resources 1355 0 R /MediaBox [0 0 612 792] /Parent 1311 0 R /Annots [ 1349 0 R 1350 0 R 1351 0 R ] >> endobj 1352 0 obj << /Type /XObject /Subtype /Image /Width 296 /Height 43 /BitsPerComponent 8 /Length 4466 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222+(" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??/·^džiLy$&gcI+I5ŏ/m~A|lXe M4̑X/j $_ KTtx18ڦNh_Kzo:>Qc_Kzo9X;D$=G䞛ǫy8̒:(f8zNG?ÿIOMԟKzo5a"n^,56݄ÿIOMԿKzo:.-=Y Z2DpH?43?Ձĵu4$'?;D$=Y. :?|EOHusm P(}fsK?ÿIOMgw/IzbiX4b>K$'?;D$=Y4Xw?G1?Y_KzoXw?G,M;xk?hgw/Iz%=7Vw,M;xk?&<5Q Oiw4;D$=G䞛ǫ;&<5Q N('C4?Kzo?ÿIOM՝ N( cG}C]%=7Q$' cGӿ熱 >P.䞛Ǩ_gӿ熱 ?biXP(}fsG?ÿIOMgw/IzbiX4b>K$'?:䞛Ǫ 3ƶ:kajĂ0,xx|Em895.Y+2V2WG9$'u,lnAboehb{ MɃ>X۵m#2s8w)ݤ<Ř2eSuֳ' s; ?~&V4ŕc 4XC:y8*ǎxW_)0' *E-r &Kd]_?xkV)j#'Tat-|HZL03HygcR]WX4$Z } qʂr19=sڴڃze%RZ\\Q r++gG\JYv9ݑ?^3^s.x$Fި''C{OWeG'9ivi3y(eV9vxb:@MQ!5l`̃s?} p\̗B)W>W(G}Vx~RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RW>W(G}Q}RxKG #WzWQL,Ld| rҨx7Mu/`<HQۚ9${n+qUj)'4e٘?lXȦ;@8cޭ!FO$o2ʲYk99S|s.wUňەҋW'%Uj(*E5xI熿kΞ/`Ik`E1D6_6|_ޙ[XY]I )HPXtHj'k_(?Nֿ$W~!Vn]a+7Sȇs]ckYEں o?J  ?%oAs]ckYEں o?J  ?%oAs]ckYEں o?J  ?%o Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"M_kE|  ?%otr Bv"WC'5 (,yبSm4cf$־utCI[9P\ğ>7i= H9=x4W3[|GM_Vծ>}>d7m(pQT# endstream endobj 1353 0 obj << /Type /XObject /Subtype /Image /Width 296 /Height 95 /BitsPerComponent 8 /Length 5823 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222_(" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??/·^džiLy$&gcI+I5ŏ/m~A|lXe M4̑X/j $_ KT4|VI N<ڦN$'?;D$=]jV =A.@:⣝c_Kzo9X;D$=G䞛ǫhybfw8UŽv9%=7Rgw/Ize #$jYzXSSmOEsO'䞛ǫʈlaˌMfUgw/Iz%=7WbtUxDR:m89Ta)hcO:Rj67_ 71M=&f,mڶ2q`8*j~gbu>cup- I^.mEm LY_P0cKh^1h瓂xIuC<R+-Ν bid{U@gk5xI熿k_1xӏsG;Yjz HFm6'UYI^OLOcBWc[# zz(r}O50sڴwojmgI-D~XrTrq¹ɼAHkL"GhMHҠy5~Hޕ=pkC-ڝnܬo% [\>\ftF#`;HTߍsuB㞔9iI;W/?.8&fDvXx/ՌV/av}K7Dm )Y!Kfb\ɭKo\Con$ ozs=*jO2#JQ `g𸯁zU:=>kڅ޷-$s姻EBbId0kwj/ 쪱b44FL @S\.;Ȱq _\wȯϽQJz/WG.K/QJ=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=nO\+_% (a=n\av`c"$8=+B '饕o 8f;5֖]YgQA%9Oq") >I!FO$1>%Ȳ+ *AW+3i65.2\MNgE'%Uj(*E5nyZ襨4Kq.ݏF:ӕOO'UZ<=!V?"CzʮQKbT}CU(Ar؇?bUr9P\!=\_/"K~1]s697J횺`nc5PJ2Lڱ%p.,g ː (qAKDn{i#L[9gMb륚yS/ Zx]PҘ8ʉYLcm̛~E#;g<5:,cǾG'K*9` ”ef)a՛.? c~VZR?Ox?hէ>.? c~VZR?Ox?hէ>.? c~VZR?Ox?hէ>.? c~VZR?Ox?hէ>.ujW+\tA@^vc n.8[-t:Ww$Ŀ ME;y_]覢N' *E-?+ZO'UZ<=!V?"(((\־|+=wem'4.#-2OzF=urZXO(/W{M2{tny+1pUֹ",^7XHhˀZI6y ay#Yy׏5x=G뢴 X涒9 u AR#OEPEPEPEPEPEPEPEPEPEP^{ ~WWw_wTxIu9 J{ NoϨ+QvWws:G' ?k?cTWws:G' ?k?cTWws:G' ?k?cT/'LU(\T.;=uki1uGF-;%eG G G X*>VaӌIuη|@G$mefmNO> >> endobj 1350 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [110.844 542.234 190.325 553.018] /A << /S /GoTo /D (using-editor-styles) >> >> endobj 1351 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.48 444.036 442.451 454.94] /A << /S /GoTo /D (basic-trait-editor-factories) >> >> endobj 1358 0 obj << /D [1356 0 R /XYZ 71 757.862 null] >> endobj 1359 0 obj << /D [1356 0 R /XYZ 228.86 663.271 null] >> endobj 1360 0 obj << /D [1356 0 R /XYZ 72 647.177 null] >> endobj 1361 0 obj << /D [1356 0 R /XYZ 72 543.23 null] >> endobj 1362 0 obj << /D [1356 0 R /XYZ 72 529.293 null] >> endobj 1363 0 obj << /D [1356 0 R /XYZ 240.556 354.999 null] >> endobj 1364 0 obj << /D [1356 0 R /XYZ 218.908 217.831 null] >> endobj 1365 0 obj << /D [1356 0 R /XYZ 72 159.894 null] >> endobj 1355 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im19 1352 0 R /Im20 1353 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1375 0 obj << /Length 2149 /Filter /FlateDecode >> stream xڭY[6~?UFH`7ɤNvs;n9,O.­םJ9bQ>Kӝgba&xN=Z q&R3 o%#).cϐK̿'4, 1HFF՛T2%r僡󔪘疖v!~vAoe 7l'I؄D[#y?n4bUti7f,-`=KcT{T8Cӳbqk>0*@OǾ[0Wtf|=5;T oDGz5;fna箜լvy;aR١G*%g*W {V=ixxFC*A dY9P/kzDԐ2`ɔs% \̰v.xYó mP| AtGm@|_`+9{5u5TƤo D'(ơgk٢s\ ] #h$?7Ď Hh +:On[$T۝% +Ezђ[!sW=M_R phSP J^gT5-RӜυ˔k`jxc :z@s XxN J2.n5+ffIkS +9iK}iuFH8sFl6l硯Ct{B\Iӕ0K5E?6<=Am ;]zbP-NkF G ;X,+K1Yzo>Q4V,ړ1Ûq^7 fْil> 7KKhOK³[x~Ru6$>{$6*7a֛=BĀ_{)2> endobj 1354 0 obj << /Type /XObject /Subtype /Image /Width 297 /Height 70 /BitsPerComponent 8 /Length 5415 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222F)" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Aloou;ޱwKQ@T(T :TZD\K3%qRLldu5WR٪Ccn7ep1 OZo种j+>rr~o种j7ֵ]esOQOzx֫p6< OZuQ9?7ֵG?oZ=r~o种j7ֵ]es'Ozx֨|'=¤6O֪jVy!;qԒ)^2bmcPTMB+7t7Ҵ5L{Їpwc'|zΛ֊kkF'Ӹ>[^ͫ$p ̪as֎VœΗJԭ*Q,($NJ?t$yfhXB^@J"b8]FmB{}9Zy:JUv2;M.dk2 Űʮ|ܶ{TY\O4pk\щ`g0vɏC+LWDFGטޓ]6$-B t3*.TH7^+ӎ2vI(3;Uibo.I\|f[vK fgxS{TΖz[۴pAR}35?fWM]L_9ezJOΕ*] ^a02tR*槩h-y}' “f =I&-VPk7FG:4w6r],4ʈz?_I[`5_G4d vr[׶=+#Cj_F1>B"bUߠ'qP[K|ƖbhJP+F:cHG^R^ 1 bL21`0`Eg$sw ^DDV8TO$+ny>="qsk9c(`!G\zԕ.%Р{OA gx7)<)sZ }k K73}v9T[IfmeśrpB9ִՓ-!Pw8IWR=k>i6Mu)#k&J;/V۵zb'Kz D"Xq\ͷGZP?wm 'PH ph\hۮu9[ehƠd^`T.|QZY\x[`,cAzsTuff-Au`zÚ#_Cy@Jϖql5)"L2R A"2B#PʽdjaY^GsZO w4㸙{OU'}(IZip@K)-#ZIlq3:E{{A1m9eF0G{A?&dmOQy N}GQJ@d_-|jNI\FZm  o,GFьSp84"sE>RnREӮn~5}x}+ uJ1}k,B~h-<ر}JQNkD}™`2KVLZ>pjmc/krH\]=:UkivdƥYU@ 55O'=i+W &L] qx96:J٠(c&;W jc{[`˒XdE_j`;TY jzlBhgq#ѹ8#8CjH iT9 GXמ'f"宖lyam]=ԺvSٴЂ$l3Nv(qǧj7;w&l!1yaY" #goNZfXk->r*OD˸dp@4j9'QEƩiV:[ ǦGQjka4!;x(DFJ1֛E }M.nF4PEP0WF/ NO#zb;qL'%Uj*E5|A[}WR٪Ccn߃sa]KKf]S[tzecV^_ڮ-8Fql4ttV&E?6 /V6(ݢ6 /Q ?g>/*EamO_o Ϣ|_UvjwHy!e\u+7o Ϣ|_UxS}⩫q=Q]q,y yd }1\%υ#ۗVHmќ ̫ۓO _ѷ9u(݆֊HS*_鏽ZJDgBcADί]V&B1ƴЯti fEy6 ҏ3_6q݇@1]o&E?6 /Vwe$wκ%MoQ]Iyʕyǘy5- ?g>/*M)C>T;7h/M)C>TmO_!Xy?*1;~XtѧuHO*7_:UNj|w Aq=X}=UJ=˂dnO8Oa[Fi%u3qw2|_-CuX:5ķ\XO\il#$Vn;Jg~譯M)_‡f};ַ@"g4wˌ̭!c`*8?hdk?(0y@v961 >TmO_V&E?6 /R+ o Ϣ|_UxS}⨰V&E?6 /Q`7h/M)C>TmO_nX_xS}Ÿ3EݬWF/ NO#6 /U9{υMJ}Mཞ2jN]3(` ~c 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQE_(KQ 5RTUP 5RTU_(KQEtO oj<3nONQ@ endstream endobj 1367 0 obj << /Type /XObject /Subtype /Image /Width 294 /Height 33 /BitsPerComponent 8 /Length 2733 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222!&" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?+7%5}:jN ƥe-D#x R{J$-nZOBj+u PEF>EmQG,{_#R{Oo"#R{Oo"=^/Ͻ7GϽ7[TQsԿԿ(`׹j_i Qj_i Vrǰk5/(5/+j9c5bCyCE1|K}?!ڟ٢b8uF=륪ٖm~+jJ\܊ՙ|+kL#,NISS'{>Ҿ _%s`RoQn:Ia>6K Z17n?ZTGU9ʫܪrroSA7JZmۿb݌gMQ̰oGeߥ Ʀ&U~7/> fXύ_2|mgΆ翳,?/Qa>6Žx\eߥ ?,?/Q:+̰oGeߥ 9gCEsٖm~(̰oG6Ks,Ά翳,?/Qa>6Žx\eߥ ?,?/Qg_F$qG b8QE_ŠkMC袊c ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (? endstream endobj 1368 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [374.286 325.997 441.789 337.01] /A << /S /GoTo /D (the-item-object) >> >> endobj 1369 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.977 266.221 540.996 277.235] /A << /S /GoTo /D (the-item-object) >> >> endobj 1383 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 254.266 124.642 265.17] /A << /S /GoTo /D (the-item-object) >> >> endobj 1376 0 obj << /D [1374 0 R /XYZ 71 757.862 null] >> endobj 1377 0 obj << /D [1374 0 R /XYZ 239.171 657.537 null] >> endobj 1378 0 obj << /D [1374 0 R /XYZ 72 543.645 null] >> endobj 1379 0 obj << /D [1374 0 R /XYZ 245.966 442.724 null] >> endobj 1380 0 obj << /D [1374 0 R /XYZ 72 344.926 null] >> endobj 1381 0 obj << /D [1374 0 R /XYZ 72 317.095 null] >> endobj 1382 0 obj << /D [1374 0 R /XYZ 72 287.207 null] >> endobj 1384 0 obj << /D [1374 0 R /XYZ 72 255.262 null] >> endobj 1385 0 obj << /D [1374 0 R /XYZ 72 227.432 null] >> endobj 1386 0 obj << /D [1374 0 R /XYZ 72 193.504 null] >> endobj 1366 0 obj << /D [1374 0 R /XYZ 427.682 123.475 null] >> endobj 1373 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im21 1354 0 R /Im22 1367 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1389 0 obj << /Length 2246 /Filter /FlateDecode >> stream xZ[۶~_i",\I3}HRuf6k9/vƥ%-E*$spMJպs//_\| AID`q4DIymmT6YYU֔r6`D#HP{W/ BF:ΊV)FF TEVw2"zkYae ,edW#o8xfP*ʢReYD>ex#Ab/2-VDP,Møa̼4"2kJyը{YSQk%T+}ZZ̙h{9y-9ų[m^`jeQ@,aM춭Q-MSe]&:A<5s³O6O]j VmV}qpUmkH]ui_?/1 $F s(A6oCwp /(-S[wi3ll [%m[8w5D@Vg8:γZf0K+2nuvc9Z}j(c$J`$moա7봱%*iVCGhڐPƟ):7dԺ i 42_FJ1|<P`AK"IEPL3b^bܶ41hd9OTSq.iZ 8K)QL)]XjNKI^?ug2r aFd.)z$Lc]d5ZZƐ\[clHwa襔R64eMQrȍ*D'J[+H3sCBiv1! KwM"C~+b߶HrV&3xlNXĬ.z>Kr aRTɪy_ c|tmB:OtlKH ׋G.S"dbxild=t'ӈ&_c2I}g/{(4;kܼWVi\E&-ګGLv[֙ޟ}|ڪ/vy.2?Fwr Nl4 8Ͼ,S/I$z8+<i.< <|k[%c9λ' ݪ?l$㦒gI4YT3 ~Cjoց2H);^ҕr.OeTL(afѦ>Kۨѽv`^31nOM֬SCE%l|“Nf3Dǡa1^"IpgdKw.݁joժg45]]~D39R1>KģW -qҎ ȴX<`OU{mBdϟRNZ:y SD?$%X_MN* |ݑ5d_'A endstream endobj 1388 0 obj << /Type /Page /Contents 1389 0 R /Resources 1387 0 R /MediaBox [0 0 612 792] /Parent 1311 0 R /Annots [ 1371 0 R 1372 0 R ] >> endobj 1370 0 obj << /Type /XObject /Subtype /Image /Width 296 /Height 49 /BitsPerComponent 8 /Length 3116 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222221(" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??/·^džiLy$&gcI+I5͏/m~A|lXe M4̑[ȼ?<RDWf;+oo$Roɥ'd4Q_IzoMխuX^Ks*mf)lo/-q A4g.{dY?;D$=K$'h,r`_/䞛ǫ5&QLDe+[%F~e9X;D$=I$'HPI8d9X?;D$=K$'4}^^`4K9cr3Ty*+L nTgI5E8Q#g(b߅lJrZ6(8nnAKgo9+F<ΘH)sa}F{UxK5/"9=`76jfMf(7\F kb!K&Ѽ/@Cw) (((((((((+#UŸHk^5_)a9?w/xIuF;4Vw7=_IO/$h'h__4r0Egcx/ ?WAM.hY+y&o{E;y_]覢~Ѿt<((((((((((((((((((qyVOQ@ endstream endobj 1371 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.749 601.769 212.679 612.673] /A << /S /GoTo /D (contents-of-a-view) >> >> endobj 1372 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.233 601.769 311.228 612.673] /A << /S /GoTo /D (customizing-a-view) >> >> endobj 1390 0 obj << /D [1388 0 R /XYZ 71 757.862 null] >> endobj 1391 0 obj << /D [1388 0 R /XYZ 233.921 673.287 null] >> endobj 1392 0 obj << /D [1388 0 R /XYZ 72 639.25 null] >> endobj 1393 0 obj << /D [1388 0 R /XYZ 72 590.81 null] >> endobj 1394 0 obj << /D [1388 0 R /XYZ 72 560.922 null] >> endobj 1395 0 obj << /D [1388 0 R /XYZ 72 531.034 null] >> endobj 1396 0 obj << /D [1388 0 R /XYZ 376.893 485.37 null] >> endobj 1397 0 obj << /D [1388 0 R /XYZ 72 469.276 null] >> endobj 1387 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F65 185 0 R /F66 186 0 R /F67 187 0 R >> /XObject << /Im23 1370 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1401 0 obj << /Length 1970 /Filter /FlateDecode >> stream xڭX[6~?B2P"km.Hޒ-(h%D; eVCoN}D~|(Uȣ]$IiJFu>~\I+cZe,n=S'Y5_n43o^<>IģB*)+"D5ȿ&2zZ(K6ۇ:z/eT%@"i0ai^*'{M,jkR9AQa,cy6,VUFD??Vɤ%wȅ&nu~-?p4j J6)٪`du\s(U *nk!A;,ټ8Ň߬XkHR΀)'T!tL2 OrR%4v13 oȀS\M gIۛ W  &}.w '5 (HnX| ~$W̞c"|<W6b9S){4LkmGJ g)|,~'9Iې|e7>Z$WB'),$w?W}htDx^}_~.+xl:v>,e9tn^Vy_o!'Ƈٍ^whyl~T5Xۙdjx !˥z#M'|y5k [<-P`|sAC@c{KQ8 ^}bLj=̭v9|WJ%g(\7|@Ym]s}P nn ,?_ `K1e_nisGظ^G;*^^P,G)rw |Oh]V( zG_#$'`y!U]^N7Y5 xsI4gv7H;_T0'vee9žW endstream endobj 1400 0 obj << /Type /Page /Contents 1401 0 R /Resources 1399 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R >> endobj 1398 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 129 /BitsPerComponent 8 /Length 10498 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Wpm`V/oel8!Yr7any8ش mydU&CJc p3:5CNe=tODs־G-sɣvQߡZ3xr%O 34DY[n`DAM`<~Kmƛ +*ZB2r~on%r&wKTc,5Hg;o(ҋ|Ч uco kIcá+vQߡZ_ ƤCvyx YNX! g[ZK:4K$1ȒKf0,nZ̮TEߡG_m~3T[qxFYE%X Hʰ wVp推Pqvz3ON/B8 B4;o(Ӌ|ЬQ9Prqϝi>vVf(9M?8 ?;o+3bT_m~QϥLQʻ)ZߡG_k~fbQʻ)Zߡ]7#鴫Y?) bC\=F0varbe81[N$4kQnjYfǧ eX$o:8' R4[T^m~lE9T{'IҠ[j>iCiIb3 )8 kV.-.ݧ֦*%uznO h39^oז\u|6qm^_y-$P),'`;y#9ڻehOk"iXD/mc^~eqddLvvS[Ċ?KKZR5c¡Ӆ;|Q K5l]QBc2;b0mgecv N+٣u OU%GI ğ?Cć^'SI呢ʭw)}yu,[T~|S6WVݛŲ+J$sO8h[xKGQtIOEdfkgcf$ ۸moU_?K°'iO"sڳ%۲'u_VӋۛ].9T-Txo*(Awejw:8 Q\#sGaVGk{?K°'iO"J3U5_|ɜ1M8omM/Zi;_٘q[pN0;v@è^%ږV1Zlʱ\!2sS°'iO"x\EHI0o]UWwmU*2.yoDW!"RL+oY4;$1B2|߼ÐY!N|`%c^Y2 *[((I&9K ğ?2+u5I~#Vו1|Kae`" ME%,H_[+?K°'iO"h8 0PEcR\'{{g ğ??Xx~'Zk3+N3?K°'iO"|A WgG]+֗d(aOE8#ޏ#޻?V$/Q ğ???1_q~EMvI?z__OE8&&?U$/IQ ğ???1_qMwɪ1Ʒp ~ު¯'O"aDvfU %rLBI&+0KծlXl5zw2Mxnm&+;mj\Kq zo?? aW>-Xկ4X6ީn s׊87N{"凫]Y/umpA|~TЬi⽽Co4Hj xOp>l5 i$̎yg7f>9'IW_E]v-Ш^_L?> 9{ u\uxJhݪ7ς)?}AOKnDc?*`}X79ϛ+ͰcVxZ߫oMuMbu䍿) PȰ1Y֌I+晔q8eF'}Ck{oxO.WW;QaBN'zWacZju;~Nd=]8X>QKG\<1&@n $uo>iO{u+zjMw1.<8ʣu293K}rɅ N꠲l-$-bY|#:'xl=)/ϊޤS[j:KFJstZyKKngU,RD_ko܍a>a~S=C@:ޓe ާe|yndqڤ;/]6ȏ'ݖCƿw?sҎ~ȧ7}(뺧T' Q\@QEQEQEWO}TC-d,QY NFP__(N/YEem'W ? `jQY EV_Buo:QfP__(N/YEem'W ? `jQY EV_Buo:QfP__(N/YEem'W ? `jQYG\dZ/fO3^g][ZRM Id9CrLJzv[Seτ)__J:um[P6k&TX%Iv+O"Vu ^Romfhnmuul!s֫4}F1#_LrK$1!]@G؅; SxKk(%i-e72CHmnc½ycqrإgʞMB.9IHHNU;p. e]J"ԯmŪZG33Ϊv䙘W' ht(湚yD+ ŤJ̠F.Te-k427ȗXGebv qٲ8x*U5oReOM.aQZF? ZHwDrKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rKEi7QW ? +rK+xB0z֏:y\U##dzewwڵōZf\:WA_G]K]VK+UcwrOA$WfNcjM}h>i,Z_[M$oeA9Ț zf|K/myXMO_J-zk_lE9iG]yu tޥnZ$ƲT[pAGoi/fyaiuZϣO+ drLQqOzwgiu=܊^xUVUbn L{.#ƷZZ8G lv+vQ\7vŚGqXEy#:~.$p88Č5+{WKf)1ʱyUxldX—C;_ij.V_,6]G!pAF:*M,b弳[VUFG2Tv~FTd/ pFy\ޏ];[vieXcde}wM O͐1lʊY I') G"%0Eco6W!..9fz[iyQe H;I:~B%Q??Ȭ]#zv ֍$O n*NrsF M9Kl1 fha$o`M@Q??Ȭ_]PIX"46r7`qp3V.㼌̪64Cц}A -(TtQvs|<g_4bn&qP!IKzwҒ#rp3F_Q??ȬSX ߿ɉ gẁzv- D|O AV`AHA.??ȣU./-fi6u)w8Fr8}>Yv}~f[dI ,<Z.Q??Ȫ:o.mYa8%GPs<ۋ Ǹ -w2+5|gy* -a0_|ҩj펙pI1pʤ ՊA8ppj"9EGP\^[k mS #pqF<}(ߜ"9EGE`I??ȯ4Kx""z'z +}FO2%' 8#yrzWOVyi7m$4d 2vpMm=tmd$ *<<;qN8%i(qx5w25ՙa1Ԕ ڿfcҊm\|!ffy"\!؜#*۴Yi+Hm [X d"I-[$c;\'5[o7o7/ܾFڗ/Qm/e[(ݐ X9DjBL1\ax NhVRCC2Z6l ) PFPwIo7o78/{j_̾B]I􇻹lV>l= I S`BTiഖɯ-; ʰ'yFC*,E!|A̟M|A̟MQϹ}Re$.:̭,Ry"#Ä *0Կ}KGm;UԦK2\DETc'߁\޹=JZ/cWh/$ӥfMpI '( 6##;|A̟M|A̟M R{j_̾Wui6ԆOKFQ|:p J8fBGƻ.[M"Gh`Hy&20P .B9, \,n?'G,n?'Gq__smKtZ Qe-AVR0;מ-…\,n?'G,n?'M`i[Kڗ/yhc4y{O̙@Wºحiut,w-3[6 pM.˨ܬlU72Kc! *hw24w24}K>0Կ})3so%@!i-IJD#!Ѷ/l籓XЦ#vb;nf`n SyXڢ?f;qߙ??f;qߙ?>R{j_̾fM:bXlEEVl$u`@cg[|A̟Mq> endobj 1403 0 obj << /D [1400 0 R /XYZ 249.478 571.28 null] >> endobj 1404 0 obj << /D [1400 0 R /XYZ 72 545.213 null] >> endobj 896 0 obj << /D [1400 0 R /XYZ 72 545.213 null] >> endobj 89 0 obj << /D [1400 0 R /XYZ 72 530.204 null] >> endobj 1331 0 obj << /D [1400 0 R /XYZ 72 363.747 null] >> endobj 1405 0 obj << /D [1400 0 R /XYZ 72 349.81 null] >> endobj 1406 0 obj << /D [1400 0 R /XYZ 72 293.564 null] >> endobj 1407 0 obj << /D [1400 0 R /XYZ 72 279.627 null] >> endobj 1408 0 obj << /D [1400 0 R /XYZ 283.315 142.903 null] >> endobj 1409 0 obj << /D [1400 0 R /XYZ 319.191 101.06 null] >> endobj 1399 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /XObject << /Im24 1398 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1413 0 obj << /Length 1479 /Filter /FlateDecode >> stream xڵXYo8~)a{{26%$_C eViEP7g8k-z3{=dH0avVGZ"tBUpXKU2]P׮eą*QTF0B_VfWgX]" 'X;%^Z"1>~FcPP%LxZZPg;(%8 иw'FU/ǹJ YY(䂹jWY]66JRKb !ԳDApQ|0@)<l! w ƹj+=y:@ "B$PaڜC%YMpp"?M";䴺uE&Kc|~+ߊFVjH-qFoï3x i4>fJg aU*%{QW$&6,3]V4?;{z1PH&J:dFZ=<2)U3_#}.+5UpR =؈Zm^ew\`6:2, +JDpF;Z&©,Q ,gu)*MerL_Gpjir>]Lr ƾޤ,E|S.)JrQy՜4w=i^W< idz1( z- 3VK8Hl'ĆO҇GZCAѧG'[RqJB!#}/_?c?~L~.Ã2&ZB"g|H>ٯ8X?㼩/| endstream endobj 1412 0 obj << /Type /Page /Contents 1413 0 R /Resources 1411 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R >> endobj 1414 0 obj << /D [1412 0 R /XYZ 71 757.862 null] >> endobj 1415 0 obj << /D [1412 0 R /XYZ 72 720 null] >> endobj 1416 0 obj << /D [1412 0 R /XYZ 72 317.58 null] >> endobj 1411 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1423 0 obj << /Length 2476 /Filter /FlateDecode >> stream xڽYmo _aܧ ՛mmkQ ǣɸlO\^Rk.ygIҫ{}JON7|]]QWY+ K, CZ(o)LK/Yc  ,dJ,m ~.1>+x@ρHQJ$DM_`*S84nh|T9x8zLVzez,̢ร=` 9@:~=z%C譓CnIbs_f9$$GK [??vn_L^id:C.,h#ccK]4z4-Bk[J\7Eܙ rUjQ/ vݶf`.>ؓAmoLBY׆?3wH RC~qC |"2xgxⓇcq*)eMʸmc8lf9Of;!+ELjA\ӰgO(CpLVAza# f߰웩­Qh /Puq6uM=/sI`[[U `3 | ^-0FAk⮢+cU(KcJX^_vө?ퟂd]rs #hW^1̭o[DH]!/s;xtd5Ӄ]8qHǡj:/q`5={EgYb6qU bbGe\;xΙxb`)8qk"=l|KoZg2kJ0G?,Zg^hgJzuF0_)kO넵Zd8,ǵk7yyx3ZPQrB0{SP} jz *q=̇d~ΡpX}"xH*L&s ڝT Jqj3 ]o: i5Y=1IY2W8>7Nа9'~h;He7v 땀v]'~kra-_[@^2'V$8~N#Rq'eLwx50呝:\YIu5wќe42fec״-oVӻE%/^>L3mNg 2~Q7$8x$^ 8˖:Z$C9d8~^tM]FpȻ"a.m*Nc -v[+aCoDlvRΡG J549d'>tXM`ǜ~? MEpJʮ;꺾6^Zch08N{2\Gf)4BcxzT8C&ѫ3>Xhi;D1x&S$&N0xԣ^/}5 +~t!T>r)鿥Pe endstream endobj 1422 0 obj << /Type /Page /Contents 1423 0 R /Resources 1421 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R /Annots [ 1418 0 R 1419 0 R 1420 0 R ] >> endobj 1417 0 obj << /Type /XObject /Subtype /Image /Width 186 /Height 125 /BitsPerComponent 8 /Length 4820 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222}" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(A{}i=|',x?Uӵ4ߧݦYYA23v5Cĩk;i$! ϧڵıHQ0QIe#pkHu[^4A'|J5 2g/T^;^ɨMbfirNzrcWAMf]y-oVak5^Eu hM4-dXKoq,dY@fgwA/K굟2OioofS\*"Ȩrtexy.]%og'ZbI!1DS͏gmٽ7?l.5+K[m%;@-(1aG8愵Ե8)V' VlNqZ6_C|+?\ojQ]j1mj؆Ǜ'0UkjEQEQEQEQEQEQES$)qc}|MEC;O+}|:H!y"Gx[|l F\Caؑޤ~i>vϝ_ԡ~5[㶁teACaLtށ_1ߝ4vm~W(ߕ `MEC;O+}| &ߕ >i>v€&ߕ >i>v€&ߕ >i>v€&ߕ >i>v€&ߕ >i>v€&0Ic$`T }as}w'mmM+p9<ҧ/+ kS$nF|^8ei$R4tX%$;{T^%&y'_)᷵yG'b)bd,u\h6B,J%D66 U3qָTUNv/ QbA1hl\6pTAzg n[Y32I"+ DeMFsК{CIV? NIfY++Frn7qP7.u_y%|&|>{۰%s u O-onY*$% ]gO+{\$Fll `GΪUA%KIlDX㉜`} ZVqo&$ 4j$lU.-FKB%*nYUСR:c sz2u],KڭFvthmWvT`ÃH1#k#¾<cskZ+s+I,ݲN,Fv8Ndb:jn6(((((((;6BzeyϜ?.!g9]l/|_G?#j(4y]ki#gB 뵔c"U/K-1QnrB /?#g9]fWN ^A8?3L /6G>rB p~f4_G?#7 p~fJ/ g9]l/J/ ?+п'hK͟|tyϜ?.+п'hB /6G>rB p~f4_G?#7 p~fJ/ Սrw3d9>XjH,nR,3LH(5`hD]n$lcܑg;A3Ztڿ5m2ݑf6 p O YĖk:iwWR KY]+br)?xwO^Ӵ"S$Դ:.HNqX^%Ư=jyfS$Hw8"S1O9"MKzČPjc!T,FUeSl&A dzjvN43+V+HHKT3.q8yi#Vo% HCRGygu{g/#JШG(! K!:43ho-O[y {M69/e\D(R l%H;o .'H !F(S|yoᏳfnw?'^69gCj@Mƺ)ԋ1β4r~PsN:M3ZjӬ`76[Ƞ EVp60J B xe<=Qq2jDž cl` w((((((~U:qYOq#2cK?g~PT?goEgoEMECvQvP*#s>s.i,9528d4d`ہŠ}&Eq0[L 6'n18-ڀ;pLߍ5-/6Z:P9yqȥG %KQ\~4V+'%mհ3H5hlcw%ǜD'nd8yxV[Ѡr$yьr202TB vxO"&:GsJP,M.-r/'X X ޥ[3骵Ԡ J.prp 1| &:Go玑*/ jfʄfW.9' 1a$z:\ &:Go玑+z,o?6xO" &:Go玑+z,o?6xO" &:Go玑+z,̱MS2ElBݙ9;mTEARՀ!hs O o9B91k2O $QWX_/ʎDG$Cl bH)/Y5wHCHm:9 yy`O$ ]u1XWge6d*X [TQp3- 6[p=$gC)ijW'}ъ~岿_ha.,lFgX?.:a<̏ޢ[ɨC|'r:rcOkY48VE2"(rZ%y@lnq wOSMWl}ݿzqSQON۵[Y@]FHPp>­u#U 8?oуV`,u#F[5Z9?oj([4`u#U 8?oуV`,8;8=WM endstream endobj 1418 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.123 318.686 378.588 331.179] /A << /S /GoTo /D (Hfootnote.29) >> >> endobj 1419 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [451.4 234.059 460.865 246.551] /A << /S /GoTo /D (Hfootnote.30) >> >> endobj 1420 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.916 80.58 174.471 90.816] /A << /S /GoTo /D (the-view-object) >> >> endobj 1424 0 obj << /D [1422 0 R /XYZ 71 757.862 null] >> endobj 1425 0 obj << /D [1422 0 R /XYZ 267.674 455.783 null] >> endobj 1426 0 obj << /D [1422 0 R /XYZ 72 415.779 null] >> endobj 1427 0 obj << /D [1422 0 R /XYZ 270.713 279.055 null] >> endobj 1428 0 obj << /D [1422 0 R /XYZ 72 179.274 null] >> endobj 1429 0 obj << /D [1422 0 R /XYZ 86.346 113.05 null] >> endobj 1430 0 obj << /D [1422 0 R /XYZ 86.346 103.345 null] >> endobj 1421 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im25 1417 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1435 0 obj << /Length 2542 /Filter /FlateDecode >> stream xڵYݓ6߿L>ۧ&dڹ5ۧӡ-ZY#[?eʫn{)A~&ڼy}{[oHedryjs[n>< z]v'/pulg†"R; ;oxx|8$hQcS3QI`6ߥm]|&a(vBuqK"G^dxI:=ܕniTKf]۟`E_$K$oI[f{2Xx񧅎SW[iGs DьoQȷȳ{SEI0p"(ΗB/Oi27~o'( ;څ e?%)X[79 diQSY͠S|Hx@J]9:58*MWRRbaD0k& Fai~G(SLּu@ wk?̔IYfih*o0$y9WHr<0[Vp|SI[Cө#}0ψ PFX eQ<#itbig-$.X^۝#8hlocrFaf%^ڎUnHaIt_c:qQޖlG86Κ0O3#G0b0h aHMٷݮ$h7XPY7mi,U{8ǣS5r x|>Y/\@ ~*}1|JKZ䂿; /F@]|~Ib_\ IOcz :WQ, LQSsތ4cˠ) a)1AW&T,Y-ΞŌM,pp]:{(,N^KPX"(-C`P&ܓtfHd+ȋd…A%$`M 315w]9.J|(1f5 d @}W5TTBǶrзucC?E 8󻇦b -HcEf\=+ПQ#[xt8:ثE%59d|X(FfVZUF72wnΥdQtӍq 3}-Dp@x!CB;?& :֗ڋKмnR>|@V=h-rcٹ^1KX2եcvJ=39 ث:6 u{y/pU7aXȏ6\U;\/\SVz??,"6Ba0}Kz] j 9#CeWDg.mNNi< yv 9a\98##*) Ū-kj2WҎ.؅mCV$5tvx~G?BmQ:]ѽrሷ գwN[ͅc⁡[SЯ]+tfQ ^p|c(A!b|?+u7|Ր_xYBT/o endstream endobj 1434 0 obj << /Type /Page /Contents 1435 0 R /Resources 1433 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R >> endobj 1436 0 obj << /D [1434 0 R /XYZ 71 757.862 null] >> endobj 1437 0 obj << /D [1434 0 R /XYZ 265.458 436.184 null] >> endobj 1438 0 obj << /D [1434 0 R /XYZ 72 396.18 null] >> endobj 1439 0 obj << /D [1434 0 R /XYZ 280.127 210.519 null] >> endobj 1440 0 obj << /D [1434 0 R /XYZ 72 194.425 null] >> endobj 1433 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F62 183 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1443 0 obj << /Length 392 /Filter /FlateDecode >> stream xڕ[O@+MD>! ]@l! D_:=_g̀}pp`b(%XP%a9|]E.My|t2,dU#> endobj 1431 0 obj << /Type /XObject /Subtype /Image /Width 346 /Height 379 /BitsPerComponent 8 /Length 24508 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222{Z" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?}/M}&ٝBbRI9|S/O _G^>­Gvυ_z]d.ՎON1ZZ EO} .?G@[𥢴Yv_B- Q)h˰n?\œ١\:M'V]%XgCڷD"9w\Vί]NV5R:\ƌUx@*slʴ%?whia ?tK M:]BkAwm<ɷsa!G' 0H⑵_-$" -BŔlVS̀@b qZڟ]?whia ?.~ooom߿?÷87}Mb[1NmZY.9=FWժwb@ CH V~?Ie k:@QUYi~6pepN]%wq̨8\;O 4Wp24]G.X´5 JKfwb$Q4H' 1'O@Mg7tE:>YX)U130qX 䊏dM4]G.Xœ)U#2]yi#Siݵfd;Fv[{=b9|R{y!t}+"YON{':kW@ CH VfOTbhia ?4]mGA*1?4]G.X¶?aG.X #,?[tQ0ʌO #,?G@ (Oh?F'@ CH V{'?CH Q+n=fQ(?wE3~_a >ߣпuE3amj<*$<3zQ=^BUFbo)5_F2몲w;\V'@?*S c^"WS~Tv (aEPX^+u~VaxAֿMnZ(QEizŞinr&iK9GC$^6xr:K2Y[m~Y%2:G QRaA$-wDK#y`͒2T6;nRFuiH8cw}m[]3OʰdfY`w120x<:ígMӥeΟ$DQG$"/,:m,$)R3{}Dr$?W]=K\5swc/>u WD$ڶחe%w3oFQ:wJ*~Sr~?]%։ޠ@khJ(epB37 yR`o]ۋG0 b@-ڵv?A\k k Khl3  Yz6=4xti/rgmv;@6#툩Q&KsHTT{_"n ) ApQ_]J.8o)e%#pʣw$ Vo;!;2yvyEb-xFNY(ڮjۢ#7߇ۢmٿ?V{o Ģyo&%E?1((A EmG~LJ+n=f{bQ[tQ7߇2o)5_Fk _ğެߑ({:qcX׼OI5{^EOQ(Q@axAֿ[Z5hAEPծ&)-R inPJXL./rrVq.B'16Hc’ ܸ0YyZܢ((yI9Hлѝ<*XI@QQ2[: "Q"20g` bꦵig5KA̗c>p4v[~yᵷX$/$0UE$xsUSYA]mgΜ֢Mm߻n3y3Hz:֗1^x6 UVHvTiمQ@)JA$jXB@@$`2hU]?P,ѝfth2VXe#ڈu i gMʭ( A# <ӳE*jK\&|Z[ytN1s3Y-jq4ȎǔI (v+7m(!EPk5_Fk _ğC,$ kK c^"U='@?*yU>7mݞ<0yӮ `/Tؼݣ+O=ɿexZii(6$FI6nʰ<7Z<0Og#c/=9X'V2\wqy{=&wd 3- F> psXdo8,n3nA:[Ȋ|ȨŊK/5Rjv'ap \1A<Ϙm_Iuk e~Q-WR 1a2SeOy{5t́B2BMXp;~el>z bU{)*3&]fMv7.prAֿV[5MBX3ʣ&6MBAڡF rrM_:`Ш[V(QE`kڍ1Mn";p ќI`KX/IV ;v5; 5=L#{Եx7"r72'|#> :zֿګo,#T7!gBDcl4}O¯Z2\^p"!(L%Jp>$G^BPM"^MgKk'0C,"E 'fd v-n1b)4oPZꍫ[Hx#h22/L)WSOY.`.Hh$K 0XOp`cרsVZ;~ʎN|$HƐM%C6Õ B`ۆH@QLI @M눔6Eb~7 H V4k+]??aq.ѵGfEk(`-$ڎȍƅ|׭3>ddvRef]:nZV> hM͞y1y|Y&G;A ",8zxLSç&k:Ʊle-Fpƹ?»Rsm5Nit4ET!BU/AټpH^KOPXfաxMwcg"QY5e򣌛L5t}\kn7 &fKy1eRU9U[VOqx_Qgd9owX}_ Y( k֗vjh[Y“P¿6^wV*5::hWhe270`C0Y$Mb+kO;Q-HO$kjd-p;ꨨ3rlЭo,|=Y7h(&_̑PmǓ օRQEZk _ğ`Z_CW'k?/C#X׼OI5{^UOG`*QEZnk_TU+qQ@nw^?ְwÿEPEPEPEPEPEPEPEPEPEPEPEPEPEPk5_Fk _ğC,$ kK c^"U='@?*yU>7m(QEVEfwܬ{тݿ1Aү@ɷoV_miߖ9eF'}?N@::nv+,/vv8C`ʾvWߘwZBT#P4ϕ_iaW:"ʾvjh=.Ju?:!7c 쿑#U02Zy#{3槩jz+ GӖal%4I$x'gbIvϝ_S4}:_&Y|c;o\?3jզsq~$O&&숩R4-vm~W(ߕ ƟO"i9*CMϝ_vm~W+j??T6>i>vϝ_i9(ƟO"aP>Dߕ >i>v±j?=@cvm~W(ߕ ƟO"i9(Mϝ_vm~W+j??T6>i>vϝ_i9(ƟO"aP>Dߕ >i>v±j?=@cvm~W(ߕ ƟO"i9(Mϝ_vm~W+j??T6>i>vϝ_i9(ƟO"aP>Dߕ >i>v±j?=@cvm~W(ߕ ƟO"i9(Mϝ_vm~W+j??T7#(ACa?ּW|I6Z勏v Wj?#^WOIIlK c^"U='@?*yU>7tG`*QEZnk_TU+qQ@otx~{NyG5X2GB{gj;/j>, ,8nD%eV t }kZ[?>(MI"M'3Kz'aD[{Da ;2 .5E~ x;;fs;\ i,w %Z(fU` I%H?z|e,t>\EF|ñ2qc|hTO<s}O)?~<|&}AxYᶳǬl՞NNH<(fϰäG LcP.Y$I?;ר+=^O.ZՓ{8Z[2[GCEbFH6' Cl\6nOUe6˶a9;Q@dV?;פ,-fhMWs?W_hM=UE*5g_wGpQFM#>_Qg_wG5{HW_hM=UE*5g_wGpQFM#>_Qg_wG5{HW_U:O׭>Dewn8ǭy&!B5ї;֛]ME”c-K c^"U='@?*y>7u`*QEZnk_TU+qQ@=K {)*>X!I3_3vGN] HPV2^Wn@ˍv3LWYyZܢ((((((((((((((O׏?#^sOס^5G?xW* kAr6'['RK|Оw3ӧ5~xL B?.,"hXؙE/.>6 Tu+OP]j =b_(/IrL6!f;W#m*%}Nbz +AJzYGq<궂;TE%Z`e?|vzpN/'ӎ,l4p$iV;S\hڒg(X^+u~U=:]I:Z,ػ F1drYLN` +u~PQ[(&lu[\E GΉs)v,Bƒp1=Bj:Fwui{ x](9FvH ]m@^NeܮTJ7uh0b Wܳl;՟THkCuu@zjU%kzE-쑬q0L_3sp_%Jľ*RX- ;~J&eBY08 \j>uik so7s(6 :*>oiz]%>[I$^bѰmϾB1shO :v1Y]$qeYI\xW#/*9 6F9$i'ѮZ^#ϛU߽Ԇ#k:qƮt.9i=E,K{q G j_մOH,dlrb@C(q}-sot sg" @g# `Ns gŦhtĭ52M#1pFWF`+x~^@C!?1$yb#%r[@3+uk M _kcdK-#n`>[to<'nBkKe+1/&θ] ӰNwQĉ5ǖ#\''k{ӳi'MdYX$ e%vzoQP#g+s糙/`M@H!Zzi[-IJ,E;w)ʜ_LoK>.1-0ڸы^5^E]X {+:TPe@0 3De#$l*2$$3$%Ey4~k])ۃ<7,k]QO™771 $&|7[q5VdT'V\.С o&Ыj[`__5LC& p;GB xn sWtJ{#b G.*vclc[xNS>6Hcۍm #i<՛>NW{42ij9' $bddVu+*;[Xn]aFBFe3郒4=\NqQqko w :Uk;tfFhbdw]M-"&Hfq}0lAc"mV-J_jQHdI8Z>Z130T ~`C rZd\tܛiXs| 0Č:`vyn+387ݷ<47 i~ ;h5{ gG 6}HcbʡBIpʆ$6ywjzA e|1Q P<> ӣ[DK$.m6 `МvZE4"ImKvCI'nPreTY}AUIQ,YF`2E rOS?t_ QXI,-ͤMbWJ^_?y-䖉xe$y7p &7g5b9jۖ4JgF-E;@u #8>TpA VG  HB(q(O׏?#^sOס^5G?xW* kAr6ET (+ ?*ݬ/:`ЩEV ( aVhr(((((((((((((( =?/^?j$Ѝ{O׏?#^YIzE\zO?U|o;QP0(/:`ЫvD,:|l2[P_K{ .v˯,NH.k؎xVQJȶɘm[qG`FMnw^?֫A G6?W4s̐(yRˎ}Ԝڔ*zU} 7+;XQ!EEW?{|Bb!F_{|B .*\ U} 7((oQp,QU(?XQ!EEW?{|Bb!F_{|B .*M 8OjͶ,BRPFG_ ֑9j.Ink\x!B5^p6a \Z]_CW'k,, lK c^"U='@?*y5>7m(QEVNt [ZZ;#:N6u%N@kp8XGg{;C1Շn&7bX!ʵY\'=E՘B@( tpUBQ*e(ھz7(oW/26-m_AFW?ѿG"d(ھz7(oQ̀}WU_<FEy|9j ȣ?ѿG2m_AU|=yz7(@Zھ*"<FE [WQ}UoQȣkj 6y|<=s -m_AFW?ѿG"d(ھz7(oQ̀}WU_<FEy|9j ȣ?ѿG2?Upxǔk,n]՚a Sf 9?hfy(V+X ?V}QmV@c$ ,m77Y@c$ ?ZIYC77Fn睷o"ZIo/(n睷o";oEgo/(_k'Qg ;oEv_k'Q ?Oϰv3w< ?OyE`43w<fy+?yG+X ?‹>hfy(V+X ?V}QmV@c$ ,m77Y@c$ ?ZIYC77Fn睷o"ZIo/(n睷o";oEgo/(_k'Qg ;oEv_k'Q ?Oϰv3w< ?OyE`5#p|0gQ^Uj$Ѝz}ٽP*\Dc'805_Fl㗡}zO?UʧE\.MTwOr191!眰V# =93ŢmOKOIDZn*%~o _iR:w#D_0nFL wTrOº$3 6u6g4:.au+fWK9҃ò]\CbK[d:* |') \=4/YZ6|k _UF )X׾a+o*='FҴ;OMIh -Q#rXb;qjM{т_ZJYI"y. h1*DL\;F1k:5[x!:D ߛψ} s i> thR{WG:Y@qgdA&w&[<$o#ya6 M;u(9lB^XFx ? H \SZ4᳕&cb|HI[0OZx5o[ݣ(Q@,NIطRX  =cyB y]"mX񝓝BX䰰54F(*Hy&̠F`HIu;(/K`Z%GҴm$32/<,UHRkKeԢȎ7;Y,!%,?kMyvliX!ft(ۘs#KjzֵZZ],|f,XNczs6y]֎?2 :sǭjKቿlE}Uh`KfM4#̅|zKWԢk_$, e0|(]WBD^ 4ٴ˻%@&V8?(W-<[k,V^ϦE,]M_>dr:ÞV)rK ME-ְlimwuo3[p,d|S/ /iug|ݬsJ`3^GF| 9|[TKF:\ݬr:r|qsԼ/mj [SPL~p Քh.i|Khzw62.)# \i%GxZIAwwq X%*LQ7,>Y7tN6qDXMpV HKJAt- s.Nϖn yۋ0F@8ZR]e-0a37?@3maEΨ [H/X'4#P#ʗPa9]`ڮ޳y͑RK R5A;w$\𽵶b[, o$R9'͗by]+bՎ!'Ȗc JvfX?HNVV0Y_}+ݲ gX(oXUon/)ĂH羷XLm )Ț3XEQX-x%͆wӡ,!MwXUe_݌<~'P2j*A/IQH=%?7ڤB#3G[{Ʋ.v3PEK7?ȣoU'G $Ϙ"1EV$DUd_|gy* $$DU}7?ȣoU'G $⨻1Ec|H=%?>'Ep,(UoA/IQH=%?.goG"}I"O*A/IQw >c|<g[zKT}I"O*YQ7?Ȫd_zKT]Ϙ"1EV$DUd_|gy* $$DU}7?ȣoU'G $⨻1Ec|H=%?>'Ep,(UoA/IQH=%?.goG"}I"O*A/IQw >c|<g[zKT}I"O*YQ7?Ȫd_zKT]va{+ɵ _ğU$wH_CW'k~9zWE\zO?U|o;QP0(^=q[wkk_TPNAH?T}]?ו _i)*RG* }]?mq&.˘?5`j/h2}pKtjDo;n/cߗٵ A#'vu{/-.Rx72XF6!7c oVNcUb;YN `t2^.E_kGGٵ A#f$2^K(4if،l)8޸'nϝ{IJgӯnDm}"z>I*bBS8W~ͮj]f5._Z F[S֚z;dP3yH6q:^u-Bua ]]y&82Ev+SJߗ>ͮj]f5.()3f5.kGZQ)omwP6A?uEŸ`f5.kGZQ)omwP6A?uEŸ`f5.kGZQ)omwP6A?uEŸ`f5.kGZQ)omwP6A?uEŸ` Cwnd#c2y!B5ǻ?yN!B5Ֆ.ǦJ2?xW* kAr:QE ( _ k ?*kp*E( ̳_V7rqn0\$umK(;  ޹׿1jYIp+_qÄ >RڻFN.芐S+)]/Y %UV/B wvJծ.TӮ,IbQ@`U ^2;+U`tӾyK(HwT)@Aݒ2[I.]:-:M+M{|vn4ny ǟs]T/:;8Jdʶw c'#M>DOK[(-;""'){i4P妭Y^BcHFp}42DҢ_f8Ws=){ITcfc]Z[_Eq-k/]+ Yp։kcomkmvCEO[Q$IO`('LKQ  Ѣk ;y?3}_'´h>DO`(Q3/?G%~g+F=LKQ  Ѣk ;y?3}_'´h>DO`(Q3/?G%~g+F=JKCV ג?#^sOnZVO֤ E\zO?Uj|oEKvάaH @@,=ZQEFgnݥA3:FXneR: .Omր$/:`ЫvW _BQ[(ɛzeƠ%ǚGprm"m0 ]k-FSsi4 f ʥl!)azTm;ݤx ȃ'?yeD fP@; +ǖ؃GԦd?UU[&T%X[]-ZK6.GGes(T]2Q;h7(ik}uNk#mV s%yFo=->+z"]nB>Ǒ G23++g"~T UwsL[9$֟]Evӯ~q.-Y[~ ܲ =I4.@5^P,j!1Qq'5jU/ شFxnzؤj\o]ŧFu=,2n2U `s > g!M87`0T3N[._M+ F- M6DΩLR2opn;d>y}I4z\ۉW[al޼pkq88kQX^AUn l]mʹaA$jy峹Q 1`f\1ūV~.My%eTu)I:s$JeTL4[ yfJ w InY1kј/{(EĖo,ۃq mv. (IjUK0a%YHa ÑMj+ N:In=GkS;,+1!2rHPHIn_Pk pVJw"s0ڌ mH!jF[ FLvY689$`]/BsgҢXy$ʇ0Gg&^Sӭ-nI}nFd֬TQEVZ_CW'k.z~_ּW|I2Kƾ۴gYj;cGyQ>iz6eoZ)ݵ[-գIIHPoH kAr~jByko3563L!KLH`xA 0Ѱ*v0l5MKMZSm-R$ծ,JX'1i2)9*.3nldukkJ[MM M%ݼhT`ym>p Ή.ulֶOy}v<t:spQpH$5A}eoX\[\ʙ#r0 G`麥iڄm߻Y[!k]>ѓ3嚱Znk_T-EV (3.dY0y3ZnSHnTજ+%y-LSRNRQ-L뵃+/͜)*nw^?ր#OK(ZRq}r,M (؃Ge᫴֙e&wc@OdHJ3tP<H4FB5 :b0QB**GrO=/jƍ7N.KiﯤiJT24'{dxh7 ) jl/|uto)a6ybcPj' v/IrMZJL* f{@c*9띪){1X}?BX'.G1#V+%TNx44s^e]=3f Z2C,>A'=mNdsτ!<hWF뫒 ,*lPao#R} 3bͻ3?X҆f$f n zv5ir}.o,y݌Aˏ峳E5&JrJ5Ёk̤m(_/`$q'=[ Kj6 1m+rF(cf5!z3_] >_C1ڀXicHuu.<ۙv 2p$IEMͽZ`ld!F:G*9>k>ZUqek³MB7DS*Sz͝(SVL䕓»w]՜x;yG9M1U^rzk.^G6c۷{Ӣv>yVGScbw-y0ɵV?19OІ5|_0䕑$zv@⵨Ͱu$±U^k~tk荳K:TFX!b nxlQRA^Lӭ,mbHaME(֬QEQEVZ_CW'k.z~_ּW|I2Kƾ'@?*S c^"WS~(Q@axAֿ[Z5hAEP[*nQEQEQEQEQEQEQEQEQEQEQEQEQEQEZk _ğ`Z_CW'k?/C#X׼OI5{^UOG`*QE8@}BI+fuﻦJF kp5m$αJBZXp)l\p3ڹֶm&"F{=rԢDI1nnݣ8Sg?w/Kag \-3_/ik_sQqŽvw#Gpۚnj?/QhAsQqG~? 9h?ߏ5nj?/Q8G;AFOG~? ?5(`wh?ߏ4}~? 8G?F?5(_𣝁~?#\'?ۚs;>k_sQqŽvw#Gpۚnj?/QhAsQqG~? 9m幺8 caU\+_sQq´XY2\"GbQK1:z`^Qj$Ѝtۚk@ {QB5Mom endstream endobj 1432 0 obj << /Type /XObject /Subtype /Image /Width 387 /Height 189 /BitsPerComponent 8 /Length 19095 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ooBZTt=,K$rkG LHt@U^_k/yӄyO"ZgG>di3y^o`\];Qsj88b("_O,2 CfF^PA3۟+?E?@-3# ?*xCHdg ~_M:ǵf]*QV xږȲmk[&"N۪G3y.͹6=o{Hv//i U=OIj..4 ѼЙ(A"mVSI,p#v/#)UYXǼs'3es,+{Tu8?wvw?TMYK&l1y<_COp($^ kPUeKO2%acVT]}M Eݿ [gcR4yf?/Y:ݵ5Ig$EJ,O9R[5ZMWɽi([dthY~G8SgR_y>%R<m 1<г CJRŕZJi[m$b8`A6e0 ~i I}ߚtӯ= YK?TMEEWԥ?1%B*_&?,j*(/cR4yf?/QQGԥ??I|г  1>/o>bK?TMYKTQ)}O_?,hB*_&K~0[Ϙf?/GcR5}J_S|ė 1<г R?$YK?TMEERa1%B*_&?,j*(/cR4yf?/QQGԥ??I|г  1>/o>bK?TMYKTQ)}O_?,hB*_&K~0[Ϙf?/GcR5}J_S|ė 1t j<>H~cOK]Q\OM穓U SIYň/aV(QmUO5C4Wo>5"^P+/_*+RR^2]Ü)tdv> ]pEh}I"O*kE]jW/VzTCH=%?>'SQY\A/IQH=%?.Km :d!niȸ}~WeA%Ο-] qҚM"e%Kdi}I"O*A/IWֳ#H3F\-%N8 jkG]Q/&VK/:A/IQH=%??5S] ?>__.W?YI"O*A/IW!FUښ`QQGA% $$DUqkZ*]V-l @FUQ/e{__ud_zKUjkGGA?T}G\~#$DUd_CS] ?Q֥95o"mprhxBWqejGSH=%?>'PjoڬḒMrRDR6GUɿzxg{&lA/IQH=%?]U5 Xk`*p/P!<.*:DžGLaf̖gۊsL0kMd_zKU:J|.5 XlzdV߉~+7IFiݼif#hR:O)TWs'G $?U%(HmY16{wҖ?+U1QO?ɲ]jj.MzKT}I"O*м'\- Yj֛Mn5m i<3*eE#CuSR*O%W~'G $⫏:է23ſ$nH6Ңg2B2#HC@'hvdc9y4udiy9gGkH=%?>'\[Hku-Ō7',ÞQ?Y@Uׇ'G $⫞|W&u4b 91oSqt _ºhMW:Q;)jtd_zKUͧ侹m̗0?2(#Z my=j#&8=+8ZXqK6ƒd߲A/IQH=%??5vǀLĀ~Cmika<3ɿnYZʆ*xS%`'YONW6~'G $r%#KTq򑱞N.a8;5'RGD@;fЉcL%-ƱAi9,?ҷN[iæ `FEjYȽsa'#Avq=)DdIvgaURեBH>hF׮Zȟ/KOivF׋rZSҽLf&5)rIWUeRVz&?xo G?xo _aKqGПMkE]jV_UV~{_gO^EqwCI 9`X̙mܰ'޹u 8<֊+y #,1LiYQhq,3gKEqv^)j2eudVF7EbnK`Eߎ.f \O%R8R Lcb 1Fq%s/LSio&qmy[*|p JUK%Ac.L>/LUO^OF-Q_V~&QEQEQEQEbBbB3 xz#ukĖhZ4Io2 |Cǫ*BR1ThJߙG(>DUK8k?j;RoN̆hc $?zr~\~<&XC˖/\I7۹c>h3^YR4o45J|4y{N!]O mUO$+o"A@!Nztmkڧ#o!(`ra;̀wt#+fzX՜\UV/3+[oIRTݗI\xiXgR!+.y{\>*aUO .gF41uKmumS_J6>pʿh=͋XK$63@f?1d|_Je8$֎!?G%^?X?r-"{)v d9c~WٕڷoOhuwb{W͑o Nq"F*|ęWha/6zJ?ѿoukjVdyic jX~psG@?r,eo2'JNMKi"!*[ԟML;hpE=*__BO*j3Bw?B JUxKUX.!˝ {x SSjΖiԋi6*ׄ1(5KPU>*վ UiQ'zPbUl:xGwxGwDn}7t@Y~WG(Z՞?z'ZY9Y_>Cwwn$y$WO1_TM̗Z!7]fs88Eer̖ΐ|TrDl۱) ,P"z)yMm+q#$rvbH1I@ڢCOo>}~[qӾ3gxA0?tA0?]?zb?GQE}YQEQEQEQEU[UbՋ[UbΌ/3W f? k1,qw H 3޾u{RpT_U|V&2mY=JIVCg&X3Z^ JA>d@# bhLsPkmu+s5ԲFheK gO*j|zkC'ά⵺f#Ѕu9_f ;ISO!cdf?ht^+AI5H!62+$FU46SV_2W uL?"?*hnmdn`+xcW8"צxgb0\d;G6e7OIFmoxo`a|Z奫^M3Uǁׯ5WB1ZV{pbPktVZo,K΃~ 5b-Fu '\%RI[֩4 gЍWE%e-ĉwGO9"#*_S^n뱏V e?p_fXLDu%m3(rM;@)ESմ贛|]Wx_)~>w}SE:g%tuj56-ZY25cwK?F'c)Io?ιcM{;E$aW; B >jn0S{k_-;nozg@><*IRVl|CCɨ@$uݜ#^fMO R3MhE5cn{TEAxHM@ͨ@m|%|u{d% XB\ӡV3щG%zUԬ?%sHP>bWVIFgK|O5C4QO5C4WR}߆UVekE]jW/VzTQEdXQEW?_pUW?_pUt5abEgaEPEPEPEPV,!m]WV,!m]W:0LJΣ\Cd$ovϽx,a_M{?X׿͵ʓ+E˜L=z5X)Y}XfT/K+'&ߘtkQ߭}{$ ق3^e]IҳT`yEVl :*һv,Q oIկ9'g>s~hNֶWТMzY͵gga’qZ ?|/Sysc ,rWgYXZ8JNKR1t)FOֳGw2%Yp3$#8=A{տ_Si+ ^nƵծ @q`l_~C*^`?LdzLn&ʑI$FpQn+/hdf ǜ:w=6'EGVkjUm'sѧuՋmw<(S$4J֟?V5NsQNZ(GZu*k3ѥb[dg`kUom`gXS_-8xStdwѵȞXaw e9YAS&a, }-Wʧ^ؼELYNmIjfu"ߝfxqKd,{Gho?@+Rsӫ2=[5^4MTi $dL!WG\5b׵=?xo G?xo _}MkE]jVOcY<'ݏB~WeZd_k^ КzKT}I"O*,zKT}I"O*&*r2DУ&A񬋇݌v_@(UoA/IQH=%?w}7?ȣoU'G $⨻1Ec|H=%?>'Ep,(UoA/IQH=%?.goG"}I"O*A/IQw >c|<g[zKT}I"O*%:&0m$>HE?V $$DUf !3V rrG"OKzKT}I"O*3/G"Ny3T(K/A/IQH=%?[I3\UH]-ˌ H=%?>'@i? x_I qw/# tH=%?>'@i? x_I !2e?k G$DUd_ E?QBx`$DUd_ E?P_d_#" nq3D>R(+j_Ï< ȫה?J?yC ԯk^ (i7L/0VE^sjŇӨho(qʪ _Ň˚?KFUښ`QTTQ ?,?\~"_Mw0(#*aa%jkGGA?U}C4,ȗS] ??5XcDښ`QQFUEEP/e?K%#*Mw0(*(.i?X/A?TjkGQQG0YsO5S] ?>_Ň˚?KFUښ`QTTQ ?,?\~"_Mw0(#*aa%jkGGA?U}C4,ȗS] ? n4eYRc=+ 좹qZ4sAYov/Wg/#?菦>?yC Ԭz9+#B0XZi_s5՞?zQPI7? 'YX։Caw\YAʷ8 F cXkG7Zl4.ݮ}XlLhi_s4}IҴw/Ngk 30*p>H$UmwMUܠeI vNM_Yú$f#\ M6d*qq{33ZK[ C#(q@2y8I=I$3Eq556e$sN$$+ҿhЬ_kY#wnzn}I7? 'OF\?F?筷QjJ+ҿhJFwg[o֣m?չ7? 'GWx4M5U˻?nz[o֭ϴi?>ҿhѮ]#wnzn}I7? 'GpUr0G#ws+ҿhJFwg[o֣m?չ7? 'GWx4M5U˻?nz[o֭ϴi?>ҿhѮ]#wnzn}I7? 'GpUr0[e/3IllTi_s5$oBJceWVyeׂȰx*ڊw>R(+)>o_*+Rrm1 v!PBDfw7$ƫK/lTn.eG4P{/VzTvW57hoc.c"[iؗp? g0̸U嶰uݛĩxOk tOdP@Hŝ]xó%pN.LC! oukx`,eIiݕX @RIp S$8Wt*.q8 ц kP^5# e6~ Oi\Si?P\eeU~?WEpfvmQG\?_}/m?(mCqQaWKggO >i?P\eeU~?WEpfvmQG\?_}/m?(mCqQaWKggO >i?P\eeU~?WEpfvmQG\?_}/m?(mCqQaWKggO >i?P\eeU~?WEpfvmQG\?_}/m?)A3mhݱ+ko1YVNf_5XP4gΞ4]3E4]3E}/@}!3+‘ݣ$n W)BA巑- &Հ *-[՝xWGe)`$wZa?ux՞?Z-GPϷdIya1gy"8$c o/nmmZV@іDY7)=Xsta?t}~s|,>u ^ܬȗ3ac%T)xv-^^ujv&tX/pGa F#?o??]a?td] kK.[X+>r˓\\Ibp'O>y?p9JNT榖.3 U P}ff]ϬiGo??]zU?-G+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+>w>߳]o??]a?tiTTmqbY٣W75}~sGOAG+XdE)7.ή:H88u`^kƣn.#o;j|_kKqG endstream endobj 1444 0 obj << /D [1442 0 R /XYZ 71 757.862 null] >> endobj 1445 0 obj << /D [1442 0 R /XYZ 273.761 384.318 null] >> endobj 1446 0 obj << /D [1442 0 R /XYZ 272.93 127.582 null] >> endobj 1441 0 obj << /Font << /F28 123 0 R /F31 125 0 R >> /XObject << /Im26 1431 0 R /Im27 1432 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1450 0 obj << /Length 2169 /Filter /FlateDecode >> stream xڥXݏܶBoD}oqb)-W ֊>| WZYpf87^}̽BLˤŹ;Tޯa~qe ?'GTH ?FA3"vÿBx!iEd^y}`/Q{OicC8 W,~ׂ$Nj&b]я+]գV]U?čAt1K:7S[Ѽ0sZYQN}۱yf^pc9jT,L_Q^PIBg_X~H* ]_]TWRfV]y[aqJW!H՛T.LFVrwȳ1GayYXk-qiDp3-d@^dA?ahkH@6~qwv6fIӠYq;V.U<фS2MOX5q+$˖9 HZ`lH{8-IܲċfJx O;ZU)yM]~3oI4jU=tzfL:ZT-@e6 aR"OS[{2<^\7(h(HnH۲* (H0ب#ۊ7R4}t#6GR>X98b ;MoED&k`۵ ~W[T^ć`sJwluf..m*g>_FL<_/"ffŎϴ8J1KfR՞IB}X`ZT. /7$֧R\W@\:d,w}C4!EKWӳExR.!sFl{c % qJJ}3~y֔+͗UPժ1g!]99&T\ W^ڛ/^[ +'c]f0bteEeOow^tO=gSDzKo=Ja%3P1@MqoG,'3G9 ~\q/It䆊J؉dg"fI!pӃO:Vsߚ l уH%e{]@s5@=]m\8:p# w!dM`<r1>UM),3l]9h=b5 v,F-Y%֊SS+()l׺i1OqKbz(nQf_otV FR}-RE+7W"K~d3bk"3^.)B3%S:qWMS|o+^G|CRτ[cZ,a1JEX /Ny Ha(wཌ"P싸hW7;"rgn[-DܛR}$Y z=q n(Uͦ(pqk""Gx֭1~iO (a֭Dyz^:A?,Cg&ki(MFE&ȽZb a;9rl a/?ؗ0r5A?jx$p%fgi(-vfj)VV`묤E~l]࠶iAwX6qRLK]] -, 8bZ\ ZG"'KYxwC:?5ۦohxP!zXD^hşޮ,tt\㪢:-y1hfO7 R'VjZ㮛|O!_5q~탔Qn:NG?)$L$:qkAw ܚFA~ʛ?R![)%JEu;RJ?[@v+6" endstream endobj 1449 0 obj << /Type /Page /Contents 1450 0 R /Resources 1448 0 R /MediaBox [0 0 612 792] /Parent 1410 0 R >> endobj 1447 0 obj << /Type /XObject /Subtype /Image /Width 453 /Height 331 /BitsPerComponent 8 /Length 32421 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222K" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S<;X ?ѭEJ'' H?V&8+ITFB4dIʣm@ǥéD? DsZ#4/(?;o+3cڎD>SOJ/b(ǵ)߱G_m~fcڌ{Qȃҋ|أJ/b1F=AiiE>vQ߱Yr 4;o(ҋ|ج{Qj9rQϝiE>vVf=ǵ9M?(?;o+3bD_m~qϝ1G"SON/B8 )ߡG_m~fbQȃӋ|УN/B1F(Aii>vQߡYr 4;o(Ӌ|ЬQ9rqϝi>vVf(9M?8 ?;o+3bD_k~Qϥ1G" QϥiE>Vf(,iiE>QZߡYr ZߡG_k~fbQȂƟ_k~Qϥ1G" QϥiE>Vf(,iiE>QZߡYr k-((qK,Gh'8($&Ђ5k5PxBcmj.CXXJRCDF}:+իGeBK8var}2>LӴKHڭ7( r23w[ZC$YWlr(+n;o>?Mp |'-Wkw;09},F%Q2/ ywUR)ΑZ54uK[hW~m2[=>{ |_ hmµ>* kOڬH,n+}~xG}O"*'4<`T|Z3hjvI?Z_? S==aOES==aOES==_OEI?Z__?}G{{g ğ??W~'G ~ 'N3?K¯'iO"|AO_G]*ޗ$(_OE/88""?U$/IQ ğ??_q?qEEvI?z_?Kk<<W~'G*ޗ$(Q)yy¯'O"U$/IQ>S(+_OEI?z__?}GQWg ğ??W~'G ~ 'L}5'wpKy(KwkI9f aW'ǁV>ɜyvKDqQV oJ/W_g/e*]+1ɵ35jir@ jFxX2INUⲍOaA|_h,w3$L[^23qf(cΒ-m6;2<"5\Jxl܇e|׌2$ӯP;+ĵFT}'倔0 (Q@Q@Q@Q@Q@Q@Q@Q@K[.7yh[p3\_:?5uŌ:I8A1v׽|s c ?¯366Zu;** _q'*SodW!4q[h QX>n^_ǎ|. DmnDjWy}l)NV]]<-X_h؛ŊzY֮M+f5zqOt>a-Үn|~v=sp4[-r5mS6sW.{؎i-̺-[(7dqXtzW:ig.IZltrCGFOr>/,03?+-#WJd('d&o$я!0i❀u*f/GKlRZd1e–`3q_?d[1k &>s=`B4vkľEwg5/ukOmnkc.S<$ADC>ʛS]?KUsϋQubIE'(褢 6__ ?SuK<0c͖8{~ȧ7|(CH>e|pfʏCdt_o?KWuD^{+_խ~!hXTט&{2n[+E DIYg?pY#%DWGYXd0.2:?l?°#i5{jW4iFԱ hTr,HC+, Ѓ?bV"-kV.}~W=υ_+N _Yv='VtG6ݞ19~g?pRju\^giilp3[II%߱^d(+:8 U{W0Lb9!^(,g V/ L@&x :V8ugx4\*wXw:oSGqʸ/k[x5)(cF00 zWULTp26::( C?ξurk,>םuW.ѭnKc*l3c*Obt$t'c4&Cq^/'|?c>s^ՙpz59ۃQ>#)75*T-J#5#,}ꪚM}KZU^?A를Jr>t'-){.*jq_!u=8ȻnC*ы^_; A^`MERHrMGXgE7x&|wJ._)(]CؿRQ_q?G'3־ȧ7|(sZmޡ5@ 㿹?)_?J:vB9o$$Q}3[}r(*XsV6jlV5''p8ƪ׫zo}[PW{NpAz#_F{UqxAPk2m=ؤwvUl oʲ B6fdegbOA ?? FFK<:Ė&Dj#]?R (j2}I}M_.mf>\\ѓxJTŪR6Oߘ2x7*%V_+Q U Տ?'? _mjHmp ($m5i 5 ֻ) i]Hq xAg3ak/44?u<6VHtUЊMWi"զm"5±UV&7 ʩ32f9fYR7&ֺ"}LңX|v#"y5p-I(%1 r3nsx)v6ݟ;޸զsI!%7)Tշ hˆkچywk!*r>ZZڅ"ZuXRPʷDF~СNߺ^$׼񦑧Kkp1V3O aJ koZMOo@a x'O7#XdbI<1qcniu`00*sӕߪ1mB^ٚ&H_ dsqI>}/G~z֗5'd{J u~MyҲGQԥO빣]Xtn"ےp}^koxأ6@?CWjY3}f h?P#&+"JGZQU$e:+>} NI(пn9JG>RU>Q3-9{*e@W|6?ѿuVhZ#>WJOMj\'Fp*φ m#wm(??W=OE/]CؿRQG(褢 )|Og|(NoQk]O>ȧ7|(s>+cz[y'1޾K8M⪥GT*jM&L@Ҿ觮ĿtkdO>WيnʕWO V3Mc쾮8Tqii-7E+J,B+ Ӝ~5wOɯV2%B7I;4 _Z?E/]bRe]g+p)Ƽl]S&[_+?~+?~xXcg}N(Ǖp? yy\Wf$e9v⹸Biءsp>3|](Fnjjv2fvL3S7k'֨x)[am.['1SGN8oM~G~[Vq0Q&yv_ ?c)?%UASVφԥ EBS9Jik# [ :pZh袊Ox%}{urkqcV,5~_g}O3 NnٟWъfC'#mC&#y}汛f#Bc*ǯ]|1O5"TGzWZ?8XJM@S__s$}O*~a]?O_Kgn'=|>f= 0}Mo^zĸS-+XXAhB*+_S#0EqȫTr*^uyhϪ"zN¡a_1;"Uz?C޼'Ã*ы^^wgqHz~{\'FS:?5GqC>;/g6OiO,?떯___(褢QubIE}ZQ"_ Aq (X ?Stϊ_W=NN3kO@5Mkg#N.2p=+s#EyzEzƿͤqi#V=Hڰ?+?V |떮 f"tM%*n} _7@j$Pf8q޺n2%Ќn4 YtЅu~.{Sp:ZUb܌s4(N*Nw O| ?0o:+q^_qŎӮepC/a75i,8V8bFI8 c^C]¿O +`>0Ȱ0shϊ+:?5}?{#^mLZG;*/ڵCKnlZW"ojpf=)ǁjlǧ5r{b*JxRjԇNSןZ1H~?xԊkDK RjU>XN Su?m\ŹWvaa^zŸQqsX;(OCp`F*J3Ubv!EIG-9o(Uh5kGҸ+KF}.^ N [|8? k+|8?? WWgg!Wurk/w_j_:?5{ש|S$/͔ԕ ͅdMSWoK.ZoG>.E?݋E%oS $sK~=k?sҎSEӵ=FݧMڏGooG'~"6ϵoϨ+xUGFQa`XNrO@y6Sdӓϯx5J5 0)QS.z KT[ pvpɯ gdy=#[Hv'$ nr܌-\4gcҚYss ,}p´_u%58/u]'ϭfO/ƾfiF7=$UFimAi hKByMUi$Y#v30>ÊsNodu9<퐨Ӏ+|ŷV67{`0VIsӊiaq?Z?}]={o⢟Cؿ]l.[c| kş{~ĞԤ\- c[0xT(7x7йlao=J _o O/ GF \ҸX&rלѣMZ't{m\nۜ}qԼ=2,\2 @+YK#XmJs)XD| ųuKC:}$\0ɥ 5ib3ZЯk}dsDn^O0y)$ OOG?aڦ+{(TƽNKJU*5eMi\6zuQ^s\a^ ׆[? ĭeʧ55lz~oksM6mI)Smێ{Dž+HF*Vd`ٺYS/9kף-w 0qW#Z59?>^!Vq-B&T*6|8?? W׈xtS?o!u<,ޤ} Osϵt7Oszb7?6r{m:.w #/QubIE\7)?1_zQ"?^O"KmZI!!Lg?JL_QyBf|]o)?_WIJsn T}̍+;97V?G_1:Ӥ(6+ƀԶo+nJ\ַTeV.PH{ujic28]_9mXz CJKo/!v TkĿY*>[Lg<ywEWʜE{\'F6{#^+_okR+.i[y5iZFRHM21RHEpjxUI Xr*D"xXSgSVگ!^l[G1_(褢QubIE}K~=kGsҎ4$Hxed$E9iGKGگ<=f7 b_+T;Vp?_ƻoOѣD&lܿloS=T]u x@jzCAg ̓ω'Q±=H\ ;ISv pG^#紟ѯxyxzK;kaxyw+o_UqbQs<+O>)7?.{Sp: (uqC RHtgjA^Kit{kx̓H 5xU5F)r*hoF.?uo@6?Sxm0t?3ٟEju\_,^ݥ‹VV d3\")ghH I;zb[9og4V*3)D\ޯBubW)~3;Af%I'` Qo׽vxkG˸)S eP㨧ZЌ*5<]G qxTA ^_3E{{g<8dcq0;~"?Nx PujUF N7էs$ ti%Bn2ēk>,_ $* X*3Vۛ{LdeVaʒ:޼/ox:^ڲ\g ݙ+ߡ_}O7ƾs=׀yƦ4XG5|BT]{_? mݎdmndeC">Pƀ#*naF8W''-s5ӿ^C#. Α1V5/M3W o 8*j= N;7)?>ye-c=hv#?M7Ed׵<+Jnz_+gz\K"6R#;T9L?]w? ? W ! S^.xwF\_i7Wc( ׈@0? \'FJeUhzY{/1Vt=j'^mHYp‘ȦBƹ95Q%54k٠d2~gM+BcgҽZLތLہɬkNqɪ(סNGEqVPT** rPdъ MڹjKC֣-ȦRagJw*}'!{UxTW~Cf.^A?1_ߥzu#^EOz,ۛ_zI>'эZus9_h\5/S0 JK>k%Pv/QwJ._)(c#__ ?Su!Ӽ9l(\y'\d|uUЖ[3W: [_G;jiuMw9!#V\I W4/"JF>;}"W;[H&{K#ENޡuk5嶌пa/ WEOL%׋mZ’ ֍q~h޷ךG_`I@Һ7#\ΎFGɮU+'Wtb7=ɮu&A"=+iQIfFFpH#iߟי_uoj 4W<\&{}{nA!` 8*Λp'(8 ~%Ya?#+X;#.hw5?)MCZmx4WIx#AoM%q|idn 2gW_2#=r?k뢖N W:AJ7}/Ħ.q0 e .p:Z{x́m2|~u?mT?IMF|5#& Sj)l/–/qnѯ翵t 'gs:(+:?5q \'FR1DۃvRb؏N}*}j} 2G}鱑HW7.TϽ@b*cͪZp]TH 8Sz-Q֩I^6mN%'wQm9{SR=D*^&8'-JiTSH>{*m+!{5xހ?ҿ/ WW k^A?׶:?5~{z s|ϡ>`ӈ5n|ż?kq$Og|wJ._)(]CؿRQ_m?G,'3־ȧ7|(K> F]0 by#)A܏C޳~ȧ7|(뺯=N/bx3޿-?rYYj_ L&߳i]6eauf. 3jtӤ`wg ?2 ?\'W]>ߘ 0Hsr Blh++9⫭m,mmVO3ȅc33}968y>y_XTgbE 3o+)⫺UV1xjmݢ[iK0!\lj> 5vL gJ֢)+#;?٫ֶgh,>#)Pp^5dH_%tWgV#濋QubIEl7)?8?WE9iG]p ?SuouORMO:u٧o*9r$W0D~OS sxBn$P 0d|y ~u kp]! eh#la(1F6޵fntVxHHՙGFq1boDom7<k6/w)]nFlJ_^"Jt#]o"԰PavKysQ]gl&6a,$*=~Y7ۓoQfIEc'vxMNy)"MR$'zQMb\GQL.k"cQ5oTbW~ eDW27P8 T9R}&+Lb#_qb~AQ+kf5]+:?5_U_:?5?ނû\ [wý ,>J꫒`žvo%uOy5]J(%Pv/W῁O1/)_?J:ޗFbofuHm`fZy2c}Wq rуE9iG]m#q+HD2H<z*\ׅ LSK[ZAioyqyQۯu9glU%>Pნ0:mn tˎ;y!RSi gnP P_d T77 u(oՑܱWd^[5 Bo! 4vb7Kg*I/Lϑ|O:vSӿN%%p,j&,z;U KVd>FJmY J]&&B J,_J_KsxڅΤ٦vج^p{f.HAH.[samdPiZ,@@jQ鶳\ϟ..[hw`axbx5IuY?YF[tWXݫl6'KmKȤw*+sG ]")-R) GB( J)I@Һ7#Yq)IbӵY#e NCЃE+05謿j'VLd9LoAv>Y+"?E2oOL;Ge$B(RsslBt(w*yg4Qd1Aj(a#؏Εբ Wl//n`U`8fVmƳ-@g:ʛP_d ,Ԣ^&, &9=z7Vwijm2vp=ҰV_B*{-@O-8R-5f(OxwOx諊vqLC$ A4h.RXIIO͠$O(њmh\L4Hj iQRLJ"SsE74RQRL1^^KŦ_Z&Kw+:?5M?"A?|ZN0kX);h9g$ƸMNq(j4H]CؿRQG(褢 :__ ?Su\͠YKW/E9iG]ٕQmYi,Y ۩?|gS'AL~u_𦛔8rK[0blZ5c9$8zV_Ij6K']"uе2YjX]Y1?˼v);:*_i꿯VV35_AkJ8Pf$e9vӂXi{ EnڠgD^fg\CYZzVwWpTSD"XDi:LVo"#;rv? ZzIB<-1h\: Ԟ3OEӅyOې9jS\mUKϻOZz,򑜎}Ɯ#+C[VJ+욥J],J=ZzEmwĭGFq}GgAi]@[c',9ܦ0t7o_GB7CTJ((B0](^K{ږLurk&<<99ֵsԷ?-/?Ƹ+/\Mڝo?5G_!ӏ;KRkCq7jvp t7FV46OѪZ_mo -[Qʳw[ݷlzk˩I_f} ַ2Nު旛'=5kwZt"H LX0{0<:7S9D."m!5-pȅb$kB?Ơ)tE#EVl݃pp{{իn{{JN3+E1qY6;b/}nmg!h׳?RY>]j_~a+$bI1*$.T ۡjwzޛCk{mW[\h2*̈wf'یm\.#3F$}z2AilUl_3֩9h)jGlLwSI\LqI)KK*F `@lG'%(Xk8#2!s ] ` &jRk|vN8'n}( FdB1UQK`T?m#b a>u.E?݋E%8oS $yZQ"Q;wG̪6n=\u?3h?o򹚾6׆ G}H-Ԛj[2HϏ`T󮊘?듕\{ۋ+x DMq %$.\Gf??EG361M KobiK~bFO)izeJ 5IȽI f??Ef??EtU tok+wLv秥fٷmJXePI3洵_AkJ8Q̿xyi_"sG Bড়W/h9< lVu?ӔRBG? RnNΫK o_f??EYwYs5`ov $c!Yvޡqx1iUAub@8a] Sfx[c:?f??E[PHX lnVݙpmy\AmY[3F 1Som 򑶻++Ɗ IH,Kab8l $gTӧ4;,oPĂTS8ky>n/m:8DV"Nɽе]}F8E[E|R<$ 2~B0E]}"Rٽ8-縷mi,M+o.ȇ$Fݼm'8 8J\ì_3֩굆>n$ݻ{n:Y'2VW$XHIRqx9HUHբg#}1jVlV6-_>G'ap"O1rh8;@1sTҮl-Āy]݀Q0eE;96JDzm̳<20`<x{RԧR55tۇVFU3~+ '?))|_7w6q{_+Z'ftW?8J\ì_3֩굆>n$ݻ{n:Y'2_(褢QubIE}t'3־ȧ7|(6нӫ4Xl,0Oq_ ?SuW=N/bYao'ڏuc*E5&:Y̼j~c*h,Y7dlqF B `B~u h,Yaol>Saa.nсTupy1R۲Zm $ =*:)]?l>e`q_ze6X,:-mі%NI$&7?«QO%`}*+()B[;g? Z)]?l>#~96k 6W(OHۺhu?[aoV&O zc8=pB۶8 )9#@J( ~}H;Cz}*X(s\䫭urk_*/2QEzÅQ@Q@^ o[CjUtU|Gr*?qTb\gƮD۾q +>MQ-sgk-G$2E#2lIJf ’@ q?PuY5`68Qs*;Fvl*Ff%]z/&Y^;TgMk&DvIcc_3eѥ3Or+/hT9f#Gu? ^jKZ,[bc2@m $Z4aOw5ꑽЌ7 .qkT=c?;:ݣiֶ&64,E$ "+0ji%{;v4AJ$S~ ,9b]Č_ug-[Oeq!26s? \C|ZL.E@I?g c+K iW[ VkyNW@ {]˖?Xk7JlܾNn;XV mv!qBc#WG"Hil6LI//J|(==f8౱[hIʨ$w$=ӹoe̋m(;$0:\9RjvO$.>8Qs*;Fvl*FfS%Ѽ t.RtX#uJ!rFHc0'SQ엺pkZn-۬w$ brHݱ3ĽFV-,31qkFDg'ˌ8-z7M{syi}u5IS[Pºa(6tlᨮ5>PԦZI i¬:23@rw> 6{'Tna,Qp s$ W/|Z,_3֩Lq]CؿRQG(褢 :__ ?SuL~P@{zȧ7|(뽴?tV[3}uῃ'7 >M¬Q\66+dV(W'7 >M¬VDQGBxVwy0>nO3ڀ/dYZقv̈ nAݒr6ẕMpg[G9qH?{Ls ~My07 ncV^ Xt8s~,<s%Qʩ eD),zg7?鼿QOo/;[8#FʷC,[zC瓆'>{U"Rg 9Cw=Py_w*ny9ExC]O~,Z]%O,`=rN}sր&'7 >M«Zn2baq Qǧ^[1LT͏rsӧ<hdTNu+݂M¬QEC?K d*OU?tc #*,,PDBE2yq dzZ_n&I์HHWhIB*9 [k7 K]2(6 uB8>e$#/.D׶XAgmv/fyUyEǙ%73 >X —*qo1{䓁Am6S>縙<kg!s@:fc$sIEcym^7:F*JJÎ  lQT%ԼzKY<3,Z[xKfR\>w^ mdf=XI?g'tLjj_=^4Q,gb@Sv˷wuM&䳎IdyD.p0Hŋ,m pwBU8wV* ?r5zJf`ճMfht`hQiHBfUU,_XlCՓbI@+?nI?g#}aZG_hR0iSENe"|HbT8%z #Y7uͼG7=f72miUy=nj;Фtb8zU\?j]CؿRQG(褢 6__ ?Su* 6BJȧ7}(렗U&.m4'6Vvn**98 :_/RQtF774m}i~+'6>i7_cSL\?Qox(G?dbcS=M?De,p瓓G?dbxwM(5;~+L-ddy rМr)kU=XB(%8(䟶KЌY2A(Yr88e#>Q-YAF 'k+|]7[{^[VV-ʆ6j_/ c/BA΍Ѥ-8#z@Cg9;zywLuzPd.A'Ny)~&h(䟗ރ*HRxrj<], cN9ze,R1GF*e#u )j/k{[=r1&ok߶ >4ms'M?GEIo#Hf$衰 )IKwRN2o^7t<*09l'$6(/ c/Gt*΍ +?Gt(Q@2=V1Q? e{)M:4*-gxг#V#RH`C(9E? ey~(n_AΊm%q{< 39-m\ICi^4K[O-mYc u<tM? ey~(nBDM>GKx$m+8EX(Ž|sui,׶%h2x<0CGt(Q@2IZߊEX&ow$+m&+e,d !.q m$Cq5Ĭvh, 6x7 elO)Ps/2ŋH&*rVk;g_1F?GbTTRKT5="W~_:'H]k.CF~ޛ?c/g_1Kh9oIbkL1.E?݋E%|]J+H?WE9iG[}* ʟa|(NoQ;Q#ivDf*#yv+ו̗ZD[:wn٣UX DU2h# h5!,2jڂX,1yi$ʒ8c|>FbnRicnۍ;Ps {&YFG]Xe8,F%-Agv'72U9GR$܌B5 SmMomıO Bb12VRJJp#`3Q>jdYSYԢʓ. 1RS$ǔc PƟ/oɦ̑/ahH%Dz*9浙SdYvopKNeipzէ!&@\,dsArKZՏD?V= EO ((((7ҪI -j}VO/ tVP?u +X|//|CFz砣ANbz7?C=lz ..oSd?T ͯhw${0AhX<]:lXKXFM|1Q E{kuj1ojzs},nYYd(s8Vp2F/ 8kdE:İ}'r6d|ʧ7vmRQדxX 9[Aܭa!FKxuv3Ä7 xC2N-5D[[[m``TG|joyR8'+hI{AkA(gp2$;۷# -k}rq-lSʆi7>l3X][W=Ӯ#'OE.C)s9cpm1]lBG&.vI)iK{sqoQݸ{{fVv IbD%W(ˍ6I5{_ W\CmǗO2ȲTYX?p% [),n.eU)@FR^*8b_,Ge&,X!VI]_w" Gݕ&ΐmWW7&Du_:;<*e˜sЬԭR VE)IUdT"4U>)nrHQp]xGqyIʙpN6a9QxnZ9_^Zoh m=73AC >?\L]a U"Y:mRIm"EE l܊0J݉XQ,V(Cp_rf5̊13|x1mϤ6-dK*R!]^>#4'|KFV$#FDH(2-Yǩ[7Zs=|دm|4п _M|۟mOG_x{'bhc/?_&{I۟{o/}gLJ4qEQQPUQtvq=]dkm>ҴE; n I 7U4q=>s=tU_ }e _M{OkT߶w/_п _Mx{'bk߶w~q=/_п _MxxI7?:>s=#?m|EDUE@UFږ8mΗwO?_Y>Ƣ7mΗ?:_ؐ2_=nt}{G$?`̿}E|q۟/?缟ؐR_5?缟7?:?!?eθ4[{NW9i%?m{}SY,Vac/?G#I7?:Owq_#?F<=B141q=>s=#?l_#/F<=B141~s=?:??`_п _Mx{'bk߶wmΏ|=>c/?ZP Q c hT{s=?:O'Oz톱+v^GؓE{8F%+^ endstream endobj 1451 0 obj << /D [1449 0 R /XYZ 71 757.862 null] >> endobj 1452 0 obj << /D [1449 0 R /XYZ 185.812 336.094 null] >> endobj 1453 0 obj << /D [1449 0 R /XYZ 72 160.663 null] >> endobj 1448 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im28 1447 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1456 0 obj << /Length 2636 /Filter /FlateDecode >> stream xZ[۶~?of,K:~H;̤i}p26DAPxbs۝db pw˷;}0w HY(K(r8"r[絻^ۊ0݈dKE |w3"^_?ܽX~d ,)S^;[^TY::qóv~ok+=?H㯛* SWn^8Nܽld+zͅQǓ ?>)UUnW==JuTef?H[HFcr<D?>N^y` $-7,Jr-Wik-jZ`Ḕ`FAa O~P[]u<憮WGt8se_zx&/h{nlƩlxnhj-sz "0RHkS5{C˲&>UR ĨH/z_kg)Y5X!Ej5Q&Ià}/9XV S$q_h ;4x4>KI+ d <4N,z4}' =?)}S,1-qyEƭtvMZ}4fNi&9ͤ~67hTߋAȹ@*}9}ҘFN N6 ۄrpsyJ4{>C:Ad)L&1FiBrZL8}؇Gvyu|A_/HW$j5_GqJ TX$QhŘӠGgN@k1(ɉ_lGQQx ±ePWAk%kxY^0'X .ͽ0;F zɞN6^Zfo5ιqZ1KݓhQ(nSOhFTV%k|ulD8q-ZF zks8mŸ\VIL0Ddl׷_a*аv$6~SM}u]O3pk v 0ʓ޳ Ԏd/6@-V~ת#siѮ2q@D lmtʝ>=C؊%J23rL#J !BҸnA(VPɶr Y! ",JSbPI6ÈV7W LMv/S[ziD;,hd$ ebRX%xT/(:3!XB3SK3%KhuGYXiBO^&-Ό>y(HKs Cq7D3mV(h ?l$. u45e9lQ7"z{(Nn/X@5Z4kXÙIFTq҃X#xʲ ;p{ףQ'#}|>C D|1Sn"cw}sA⛫"X{ "}AceW$y-6IJ/+֮Wb>+S:,GuQx1[b>[sg%YpwM~|ч|džxvw"|ŃxelyYloѭcrs8$بx?މܛ^B \pf$Z5TktSǷSbM3WU͍**EGZwd+ěN\N XiJ4Y1bM~N›o8SI6v\cg̍1Iym PqD o*2ˡm.Ü͜?д=^" 殎Ez Zz[A$j$TaQКNCo|O$awcwÁ-^-kU7gbrU rD)OmT'oTyrWRbJqE0ąZ#5P>)aA$ɦc83^$t8j&ju_> endobj 1457 0 obj << /D [1455 0 R /XYZ 71 757.862 null] >> endobj 1458 0 obj << /D [1455 0 R /XYZ 244.292 629.899 null] >> endobj 1459 0 obj << /D [1455 0 R /XYZ 72 553.7 null] >> endobj 1460 0 obj << /D [1455 0 R /XYZ 72 381.675 null] >> endobj 1461 0 obj << /D [1455 0 R /XYZ 265.189 273.96 null] >> endobj 1462 0 obj << /D [1455 0 R /XYZ 132.373 72 null] >> endobj 1454 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1466 0 obj << /Length 2170 /Filter /FlateDecode >> stream xڝkܶ ]VI=& :EwOV g( L ﮾zN^g۽H/ S?̔w[xnij+EN4)"X yuM tN3/}W\ x~$xoW^, WK |+ƃM~:[(D#GDY~g∨2}PQگejZ83"Q`ׄ73Zs6)}>T~sfIl"]6?^S,}r# b9COC? G}ΫAwp iY0RƂG :"*AϧlzFL)X5%E(Si4 *#jJq^LS_-,^k݂,l3x $zr(R-w,+VN6GvW5*~'İ06*0k< -|ܬ7 |y\ģJ\bys˜7#ki.ޕǓU!lΥms eʎmM {7tEyQmn.ntCeԏB 3zkHIyappC[ i&ñ^vԗE/QZSŊ)*Gȱfċ#x)— 1Dj0 37!w`%aE1B+8njif"Y#~qdYCkڽ.42*:m 6E+ |e̹e6P&l4*jfd7)D9 Mx2U`K3,zhƨB!XebbQwm|%E&:KU8Gb*bb8ab0-Y1=)ajR+LMm4jb*^JWgcu:1J*11Sڄt!{J%ӂ3ċtD4daBq&`~+dX/Tg.ʠT/ 0˜CqQfhAngl5~-0G47iIMmWȩp3:!@`|aLuЂlҶTan-m6jKi)cqjIQE'n\$ț L]UB<3u1A0›g:şx/' FE1A(EH"ƂP$ΒN *ly AN44R>IY瑱$hƺ1@Bvܡ,drUlqD.86deVft%j)Z u3BcL#4J-SNP `bIi@AIS!^ Aۦc 9r6/}!6Wcٌ2vJpDŽPBp"D*\}{zHC) e"_ endstream endobj 1465 0 obj << /Type /Page /Contents 1466 0 R /Resources 1464 0 R /MediaBox [0 0 612 792] /Parent 1463 0 R >> endobj 1467 0 obj << /D [1465 0 R /XYZ 71 757.862 null] >> endobj 1468 0 obj << /D [1465 0 R /XYZ 72 720 null] >> endobj 1469 0 obj << /D [1465 0 R /XYZ 258.544 595.067 null] >> endobj 1470 0 obj << /D [1465 0 R /XYZ 240.287 403.784 null] >> endobj 1471 0 obj << /D [1465 0 R /XYZ 72 387.69 null] >> endobj 1472 0 obj << /D [1465 0 R /XYZ 145.593 103.378 null] >> endobj 1464 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1476 0 obj << /Length 2951 /Filter /FlateDecode >> stream xZ_ Oȝ">̥&M6ddUO\I= @=tc Vhͫd*"~RY*< Vou}Yz#[ү-fA\ vk9y eX؟]9_ZFqAFpꒂ7Kҋ.iMŀS`|dsVpl3=c^TAD+xLVMEPeMh0|<@Ze{\'y&Aި( kxvVfmB |",>eϧvx=X]p,Jc%`S30)̕=aӋB`6w5nJYys~<\=fiN@IG/G; pl] )TXdWLY]aîHilRR@`);MX!pA}&I2CCPqo`fڠ!k[׮;l;X4S@Dn-lJIO e QѮduK*ҸhE͗v.L0܅&k1pگđzQV|G^`Ǻ; $܅&L3"we!`dⷽ :ƩHéXaԇ)njf0v*2b'*ǣ6eV+͗DsH\ _MT+h iDl&`W^r{=VWzِjBy UxK鱆Lszc ԨƗLz)Ak"L;?@l3wl Qx^`JfWlo/x`d2|%uG&яVTGپޠŕq5/Ks1+ͅ-UN7~hd.8O(fw1'w#}AGCk^)1dwx 伹a=[hܥϵ"wBCb 5WH#H" hI9,@x WyteE9E,Vw%$=y fY-;j%z_kHr6<![% wRom+wa/X1L7Ш\B?%X?+,YP++43 W9vݡ;;ͻ|W(L 6<ޒlF29H <; VȢL%9"}T7 QiyZBXG#,XHP^6'LŅs/}s΃5Y`P 11M\d4Ǘ(8ƅLU$@8c, pѤΏ܂KmNZۊ{.d-5䘲RƏY:/"eKUS+vkG#{{fҋK/gÖڽrN|V˗-7cd̮[fN SvDiޚOy8 .ke^eX1ft6?F`cZ_lE&)M2oM::~{', J$5NdVV4ͩ|aξ20 7{w ,P #>^ /%B?e@>~U@ qRg4"I籍)d# ~4L&䅍h15B^InZCniI'$CH$Ŧ," 0|Ǻ4u?lOX0ZkͲ*|*WPoRMcnP> endobj 1477 0 obj << /D [1475 0 R /XYZ 71 757.862 null] >> endobj 1478 0 obj << /D [1475 0 R /XYZ 72 720 null] >> endobj 1479 0 obj << /D [1475 0 R /XYZ 276.526 601.044 null] >> endobj 1480 0 obj << /D [1475 0 R /XYZ 72 309.981 null] >> endobj 1481 0 obj << /D [1475 0 R /XYZ 275.216 203.145 null] >> endobj 1474 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1485 0 obj << /Length 1424 /Filter /FlateDecode >> stream xڵXKs6WV!$1:SGL1ET_b:Jgr.oA 7w8 T8[/^(."o]yz~Kr?2gA[%2 _)Բ#z"-1ʂ+/WȽ'u4>->.k[08$EY*q_"~)ؔ7\xo9hx&{儯uȢp0 Pg^(lޱݩUAH?AQt\E!#^?ñ-oU|geZ?q೦KOB|I!4Z88#޽*ϵ NoC+l Ǩ*XVdDy^O2@1ʼ+dBix"fhY*\"-9r[BЖViG*8JRGҒڞ⁠"B9Ѫ*9KR81s9xyWA/R㈚b+ZhC["ieX6/fRGTLkb`c( 0 8޻4t>X]91 .PƧ߹W3 }Tu@ gUDg$ A7 1YX+8c>pzo;,)ٓt<$l)g?Q|F*:5_[h endstream endobj 1484 0 obj << /Type /Page /Contents 1485 0 R /Resources 1483 0 R /MediaBox [0 0 612 792] /Parent 1463 0 R /Annots [ 1482 0 R ] >> endobj 1473 0 obj << /Type /XObject /Subtype /Image /Width 437 /Height 351 /BitsPerComponent 8 /Length 28592 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222_" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S<;X ?ѭEJ'' H?V&8+WF\Xh, * ˀAW (QK}V3*ue)cz[ߡL:C\Ыwg͕&EQH$)pqRu,m.E*?ppx rjJdT(?;o* V/XӼЗFR^ QT[CqR̙AiiE>vQ߱Y\\_m~Qϝj1G"SOJ/b(ǵ)߱G_m~fcڌ{Qȃҋ|أJ/b1F=AiiE>vQ߱Yr 4;o(Ӌ|Ь{Q9rqϝi>vVf(9M?8 ?;o+3bD_m~qϝ1G"SON/B8 )ߡG_m~fbQȃӋ|УN/B1F(Aii>vQߡYr 4ΧߡIZߡY,iiE>QZߡYr ZߡG_k~fbQȂƟ_k~Qϥ1G" QϥiE>Vf(,iiE>QZߡYr ZߡG_k~fbQȂKZͬ8Ǚ,|NҴBp׺(#?A 8?k[}ac [ *+JYn!;k̯Vj5ks ros}..©eD3N/#scj\D*dzEmkI f^hQG̣ 7k5Ï*a]F^{?#o ȼ5?UKK:D(G)hggd!R+.m^/#lSsI%~jH-@ZF._Yqђ-MO`gt]t(xO"hCK ;$tSW_)=heyUmS==aOES(+_OEI?z__?}GQWg ğ??W~'G ~ 'N3ȣȮ?K¯'O"|AOk×N3}k+_EᲖQx֒"1Fr@®OZ|=]9G+"ttZ2>_>7 Q)_}T+B)8jW*cknfk'\?Y jd1e:P* odXfIs™dgZ*Pa%V1z[w>lvex,Dj6uMw4$}E-3QۏdI^xHL{h彶/ 1wm: xz_c#EX%߇, ﷴH0paǡB] Y(EQk}߹⺜af_ƊEd.'7D;0@=kR掩zi)Ksܾȧ7}(뺮?Ҏ_OxOYʸhu u?jz15hbV6~quingזQJ80x#xOS0Z X>xEX.۰J4.]źp fOEch֫{Eyw̥|X1 zQ٤EP0((((((}iڦkza=X*ڬ1M" J!ːNBăS֊$6GksjP*F{#Fޒ6QEaGVlu9KPMO?rAT[ K0: +|Z] :im-x,7UĠ6C.ɨ_gw2)"`y?{8烊,YEs/^=yvc ,,dz !(z|$:zMX(aEPEPEPEqVzն]jڦ:t7vmb+2*ȈI&Ps[ҿ񍮓u{Gkq$;7|M đttV6K?ۙcv㙖HXBXp`0A!+fQ@Š((((((>.E?݋E%7)?<|Og|'NoQ[Yj-+k d $<ȧ7|(볼W|V[2WT^gVڄ} Pip-΂ cd$ *ˡh eZij6f{sL ٮ$'(K\[[-od#"?W$g/;w&3XPҼ?%~$ioSΑ&ԗI݈t$5TXYf92`Aスa([vmWk u=CPMfATAym6 !#zw]rU?፩s29;4i_񮆊ϒ%ݜ[??CE ӰoG[h!vsvmWhӰo] rD.{NvmWkHi_Nt4Q9;4i_񮆊9"f:2F 29V*[hkir]5\4,'ww\ cZ:o"ljVB:k=E\ $a P̓JңmvK%WY%V9QPU]ϔݖ-IRO2o3 :aM,c?ͻiˢ&m\*cpp Q [tF >Uom5$n;WjjP]Nssw4Č1'xmQ&^U@Ve5,}:cuuu=wIߙI#bbI"RŹP^"X.~-0rFU#;|9iĚ%㶵*X8K7H*N~BXF(Avsmq[© <; YO_w>8`I'kNt4QȂ翴?a?ƺ(][??CE ӰoG[h!vsY;Kvf8J՚XFEQ8let{knٮ{9b3\Z@rOBylG<]-EtX&PYvRVɦtwV郴Ӯ|M5rc3li $N9Q) ieLwx;pp *Ă5Nt4RC9;4i_񮆊9"fw֓H# U ҟ+#ėxcUK#`Ը{.m[zx~ue\ZG$M9,d)$Ԓj!5C֎9޿Q#?H/ؿ-yG3;vyWwɍ(T:o1?b}:CTC:uI4B,S%b6p˴rTg,#?H=??4~? b}:f_ΨX$?MUwm4%`0-F8ePA9QvR?ֶ_J+7u&f/,p{@IiVVm'us濋QubIE7)?<|Og|(NoQgy/Fq ?Su>oWylߝq5uaCՅ-§&4i|̅0/&GB"Y|=o}&`("O `O 3]05M$?MF>"BpF~.0CwNj(yu0T$_̗˧B({F+,@U;Aģ\1޼ WI{&X+A]'婇9sr5*ӊB WI{&X+A]'̿oOTW_ ?s +=G++{z}B WI{&X+A]'>__zWO4_ ?sJޟsШ= WI{&WW0Ey,?MXe>}-ę؞MP:I᪥wjguEss!M D .v|*'*#zԬloltc0D%בj ?txŴaL__zWO4_ ?sJޟsШ= WI{&WW0Ey,?MWO4}R򿹇*+`th=>a?Vb/OUE)‰Pdu"z AJҜE)O p@ѫ$7 mha&v,s8I{O3] I5m$upx;wogzK?imsˍU/_F<}j}?ɍއ=]oc3[_+n#?*n7f/?E=??;-CZf;zmЅs_羋5^4<7HC|yC?8I=NmYCD}Z֪uiendKXb0X*VknmEZ)5]J(%Pv/WaO1K~=kGsҎ;q5kQ"\_Z|~V>xmVBX*sِXmP0= x5(_-cR|p6{ }O^xk>/[]jjy"]rst$d HY99>pCA [i7#L;jQm*d ?l,˄FP][CήNYGR;s\y~bƛ ?9ozkۥZe=rpMz6 ?jºEԺ\w:OVmPH 0#;q͏XS:ДNK;]N, q1)$hrH,*/LB҅.s}voXq\~`r?mxEcVIk2L~@T㏼jdž=5/+Īd9Ul62:C2BX/caި8G&1-~I^t|9gx3EvL/4j削YAڧlޅy;}>YGQŬk*UP ̠@= eZ2ķ@"ہnך:@x3+2jn vdS+T(Sޣُ*=E{*~Et?wUT+T(SޣJpSQ z`[+NkI(Ԍ=s߯09߆m#n?^DdҎȬDFWgVw[K EfiwsK?$/z6UдHƙO΢-&5.#mQN27HW GgR݂ ppTTR{t9K-N?zO"U:??ҡLNQ3[õF~i]\O%H9q n3d0$6/#M68m+(c8ܭ |$!27rW;oF?g+o3L×2eDnS>D>VlQ>_Nxڎa|m㘨] ȡ>EkV3VH3濋QubIE7)?<|Og|(NoQgy/Fq ?Su`ѫ_/O>č\Zۛ,5{ "[.Kmndh^B,Q iaQ v"M(}nƯ&Ӎ6,+&GZAq&{srm R&̹6!YXjMN_-WRL]{-#!B\3n0nJPzeψ4u[X-nq_ YQ+%H:UoxKMoI_}Ķy>eXa"rrx^ѼQmos. Ȋ"iw1'h'$ Żƶ,5p6-VЛ!xOΡv7}/ZЍWxIN"vW.9p|xi}OV>vuK5>|aReA^58H8&ŅY\qwHdNX[* 8z&s\][swy}=IJќ hmV/X[etzg]*^S'{*+aJC1̐;"#ޟ+r6. Ayy~]j[de2 oheXWqK_7T*0T_—^/.nl WROJڠ(((( cAK?Vl&}ݕm"ϧLF@Ge\Vs\It.>fB0L~p?UBi) kQK=_yZvZڅgEΒIm"5~y0} ѝYA!}s]MsǷ-.srhSo$KiZh9ɊFmL_+ZGФwMswf/4dQ.w=v"PAN~ea[#AҷHmo|<~V׌4ҷMq,gY؀dCϡU[I[6uHDWA5R3x;I7(BqY РKN{]۴qqAk ۄ'90CY}LvI-bp TУ$pR9[kZ<{uiwi)ei XML8gI`s+Rhtzǂۋ[{_[iKܼ+ -4Rohˎ&g* -'Y}^Omus+"D@lA:75E>f}:{fD" Vi\pSxE]6q{fJYsǎx]/]F eZȝĬȎ![>n[3> xR{WG2Z @qsڣXV:Z\9]%̬Zgr ,[xT]=#si]aj&$G<齺7˻p7ѭ^Hc6v!0l"%X ;Wr jAsEsy$̑Gf%@Yc("^!t;[}_KoFfm<Ď. Lf.yiw.I4JGZdt A$Y!DaNzoy$.(,G=H,5ۉP+aV$)#{>Zw|pkvWi>N$KvKiP'@Ǖ2=dko  i7Mt#*vH#,8zo}֩#Ȉ]GvFdU#Չu]:K]R}B-P.RQGRR ?:zo#ޣaΆ?]6YNQߌgo"Iy #?V:vJ]Ǜ+ 80䎽~]?ƼKծtY^=BաYK+ё#|`ڹYԮ.-CHhȁ<$Gn1Tk=/L[.w.s& HKDZVA$Upg:\Ij{*{s8|ca3:wv\+fzvwj-ⷲRgU+%=+^EgwmsSx^У#D.an%@AU0H4e5hw ,Y([Y,Vp$_99̎Ta^M׶w-fff {L"] `kѴKiL/ܧpK+1 r;o)4袊((?mѫQT?5j*Φ"VkkK i^`ZE}s"Iƹ?uUSHˢeڐAo3H݃sOyI*-F~jVB - BX;G$S5X+,y. bZ mwnZQ4RXjv\6%w0ɺ]~faJ`S8]Fo&êEKZ%ɾ+FD/?2rG܁V[xHoEtKĥdI cp缳hwDakuyQ˂dCo͗753NRGho%Y.sZȥZg(_#v@:Nè[Zr_-X2:-kfj2`20WEgGkO4A{8^t\UsJ [_vGշnE2ɓ$# }[}&si2\Q*%Bʰ8R ~MAz]褎vA3 Rk.-!s]ZoGtRQGRH -7AV?Zz?,??Vf ?=@([Q.(aEPEPEPEPEPn oZ?mѫQVu6A6miMDdgIDTx ;tjzƵukiG-[]JnvLȒe#+,I.I4SVI,n r@Ày*|tY~Uqm+vu2J۬k|R|gN>m^[QHei֏ӥ2o4Rv_iE|Y-5(((((.E?݋E%|]J+H%?WE9iG]|(NoQgy/F|c?SĘltdu+xH% B{p%oK0nJN )<r5ίe:87!$rEq: ""0[d)%#2 zM(4mKmv[߿6l {nR>+-ۿ?h*O_i.ifgXa"ky⻫,u Ì<]yssjmwWIrDhһwʥ @$|DrZqo T)<\F"yq.k gb.p8ۢk+M 1b>[=kxMҥy wٌpI#DN/pjv<ƊݳxYI:РQ?KL?ΓVmb)n/ 1#IJ{?#R_ψ:!bA{v, a^"4YEih\wR^*QEQEQEQEQEfը]cAgSd0w4mFGuBP,W%Kc#^'.YoGtmmq$p#:?v/f{*i6O.xY-G [jLmP~.<)u. K4 d#!_H (uQE!Z>ONORA nb@bI=W;7-+ ҐC+I8_8)s)ne]U6!ؒ$$هՅXRQEaEPEPEPEP>.E?݋E%XoS $yZQ"\_Z>ȧ7|(붞:=epˌWfN>+_L4i۾d2CsҴe#vJq4PAϮG^F/?'s|EW2]M'effx9MO7Ħuݳ˓̪ISuKu-ژ!"Ii2Clȭ*6pE%BؼF/?'s|ER]ʳ8 K×" nmBn&dO1NwJmgW\ao_\Mxi_dijMFg$a eWzĦ8:.d1yA;/"e,SKAt._B-6ݬ%y*{[&_,faPj6Ƒy$ZE}pZ}/lhEzk-le:p~|цcnćO4s~|e債+h|1(AB˞.-5lG qyA;/"-JN bw?_E˸ɵew5.mQ0?\t^U7\lS+,qH~l}1Mm5Yⅇ_/zXYLEG[1"!}vq*C74q1ddhQVtie`+"Š((((.E?݋E%|]J+H%?WE9iG]p ?SuW=N/bQY\Q[}yeJcwDvl㞝k4%tlVn5Tx6,gI|U2iTV0DdNЩ- 4;QHaEPEPEPEPEPEPEgo{T#uYU))xe9 @8Ъ\mq&E^;i!pŮ1&!o`nŊ(Š(((((((((((((.E?݋E%|]J+H%?WE9iG]|3铊>ȧ7|(뷗\ׅ EXt,N;5i>Jf ܚaH#۵$Q0+iV4^3YAIrvogVKeE@ ,~G8<%Lg}_WyK<>g}_WyKCΧMIE5jǩ"]Ȳ31f$t?#t*!QP#%Hu!dwr0ˇhYΗtH2,kXop$p륋6Kkk3-k#iqA yLAWml|olwn4+ܶdr#tqRy(fd,C#z` (NTF9 i'NXMb0X$(@ݒ 4+GRno"yK<>̡RƏ)}_?O/gh4(RƏ)}_?O/gh4(RƏ)}_?O/gh4(-9k15-1_COAEP0((((濋QubIE7)?<|Og|(NoQo//|(NoQo//OS %GkmP: lͯi[1# /+I(eT!l8<.e{$sk%Pv/QwJ._)(c#̗_zv1\Gv1_+T:ۛ&}$v'Ljl{E/yM׷88F.7f,K[e=dU&dQvOJTvu _q\"_cN)= 4y!f*m嶋/̀Fm+UUjePj7O,Z#IpϚ~Uz=o+m9+Cbtew T&](獋mյku[Eo.] rBNP;+֧yiYBȄfW.9& pņIj@(QEQEQE2?DD?#t*=YSVdj?묿)^ ( (f]%Dr P2€4C ( oB&Y(LQEQEQEQEQE_(褢QubIE}d'3־ȧ7|(뷗>ȧ7|(뷗\ׅ H#4)K,w4NP~jj |EemƫFmgQգʆ=.!4GwTF]d;YFXpI- S4-4綼k뛹"-8mT,@GWnmILmmVI09 TxONmͮ Z4 $01<> nm cO'2dF8.GcI-Ι`nlmL1v,hvJLJ-3~oGq('9IaC$l]H #ISp*Oi"Aqak0$[{NG$gt<+M#dsF;'ަ,4?Ik}:m+!@ EQEQEQEQEGTC?G?$P0G.,>ըܙ՝A%)\{u&O近 I?G(ڟ#&jETtPSz/=?Q@mO近 6_GEI?G(ڟ#&jETtPSz/=?Q@mO近 6_GEI?G)% ™E1_CO܏65rN=jJQEQEQEQEQE|wJ._)(]CؿRQ_u?G/)_?J:b)_?J:bW5|uCkrxXZc`si$ye|UB~v çeC&e8@8/x>#lcۚ5c ;%#ceU[#8C/14EL_?OfR̟:2x dpz24L_?GORCgOQ<(L_?GOSy14EL_?O<y14E>jPAuPEPEPEPEPEP>.E?݋E%XoS $yZQ"_?_+Q"_?_+s_ʞ^1 Կy\A5?w+Gf/ynwFqAax^f˻f@JV?rϏ(?Ux˿?G*ЙwSoOP\Akև{:G]zqogS:~i2t܌^Ún->K BS3' rG[@/.;:_=7>%6+--o "H_"8/*F֞Ieۡooi`7zK=*F-7̣nӽUQko?8?_]wR~qtko?84 ~qti J+/]y Ӹ׈#fm2˸B0Ќ$jsI6;B&Ef:D;ǰ^DAmxض6qQy=/9]M/e}~\?j!s$e #b   O^T&ta7~$[M|'~/u ޥ__͇2vI>#Yd>ett#R{Oo"#R{Oo")F>EF>E/g CyCyC{92E3ԿԿ9)F>EF>EȦL5/(5/(rd>gϽ7GϽ7Gs!Sb~tt_?^y>gOQE=)t_?GOPyDt_?@E=yD>gOQE=)t_?GOPyDt_?@E=xՏ@ ʳ$[|3|&Za,q̪#} W,5#bE< =#o IVM#ֵdIٙ>&Lk˨I<20DזּAגVwRb^>'B֟kaH\- p؄͐q EQ/-G "*1pdVdzOYYHZ+3 u ,eB{pQƖb3e֑dmCvgXQhь>(\FYO7YI4<Ws4 DBʹeL|nݭ y>H)f[0;0lL,& ߳,svrH0@@b04tbQErL$Ԧ@ (ܣ;gƎEQ/-G "*1pdU36Ƌ0/QT4?4,EQ?#ih?#ih GcL_cL_.U36Ə36Ƌ0/QT4?4,EQ?#ih?#ih lOkϮ|O{ ͧɧ0ՌmBZ9۝X[f̮ zCn$3ٗPT7#?!]t,M%.M=w9R8blqnec<+f1m:B(cP((((濋QubIE7)?<|Og|(NoQu\/wUOS Q^yQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|wJ._)(]CؿRQ_u?G/)__J:Q"W5|u+:(((((((((((((((((((((((((.E?݋E%|]J+H%?WE9iG]x)_Hkҥv,&ʫn ? W:}PSQ+|+ͯ_ /M6>#(k@_6 (/MS?=_6 (k@g0>#( m@ ?(??1G +|+ͯ_ ?1G`ŷ$R WaGF3h}bEy/oICŷ$Q_?XzmQ /_ɣa}GQ^? /_//oIC#4>O+|+ͯ_ ?1G`ͯ_ ?|+#4>O +?|[O E-'"g0>=~_6 (k@g0>#( m@ ?(mQ_?XgQ^? /_mQ_?X{mQ /_ɣa}GQ^? /_mQ_?X{mQ /_ɣa}GQ^? /_mQ_?X{mQ /_ɣa}GQ^? /_mQ_?X{mQ /_ɣa}GQ^A P)?|+#4>O`ͯ_ ?|+#4>O +|+ͯ_ ?1G`ͯ_ ?|+#4>O.E?݋E%_\jVv^WJ;48l endstream endobj 1482 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [340.689 206.956 449.371 217.86] /Subtype/Link/A<> >> endobj 1486 0 obj << /D [1484 0 R /XYZ 71 757.862 null] >> endobj 1487 0 obj << /D [1484 0 R /XYZ 212.382 446.788 null] >> endobj 1488 0 obj << /D [1484 0 R /XYZ 72 412.751 null] >> endobj 1489 0 obj << /D [1484 0 R /XYZ 185.752 281.84 null] >> endobj 1483 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /XObject << /Im29 1473 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1494 0 obj << /Length 1699 /Filter /FlateDecode >> stream xڝXK6WX1"EITzjMEۍm %GnwCJ8ndI8yЁ Hdz\TlkWH2V74-V/׋ {-%Am/{/`a'XXz.k5_hv"5V,`?U (OA ŅE\!ɀ1OVƥeWmMYTe4QF{Y磹8\j,RqT$B\eK7f4l\챬7_^ycIm&(Y3(Bx>XY Ǧ:8^ŗ! 33W4U9-ˢH5YY) i/~} SIm^7S &[WO71ۙ4ڨ 'qO]2a_By!L!rK\"D8"o;dv+pRS;EW7}qҍ/߄D,:]K̟JD OD)!?/Gsީe9dЦzewI;U] \&k_4+%5AwiB3a[7 vZu)&J2)niۉm#I@R!~C cWUV'zӐ)@{̺$1f<*6|)v Ic7 ^8y_9A)?0 ,͇xY7gR8EmE~ mF/ E|0 NWrZ>>biY!0ԞZ3$4Бm:iEvf)eh `pjST3IhP*F6u&F4{ vk(%pdv HX !D05Cxk(ޑx}'ٟ6UY*fKJҡCݎ^<ʈvϥL^$Zi!lRS,%rӷ]}EzK}v-/c=, a@4W{9eBPAY$%3zS/vS׮UQbɡpu3Ys6T-p,:.MN +Ld7U[G+1fUm r%-{GRDotugȚ.\Ŕe)bVPaƳX7y~>3GM sgvKcfLV@=I׍,ePNwRMƫRqIr ]ڔ d4Yӧg'%~WPO+D$d>:> "I/hd[kmJo}[(PJ$ņ<Ήg=qAtd)Mx" FӾ']ڦ8s)>+rP>6_'?C2ɭB>%Qp2!VT-6o0#eX-D4g endstream endobj 1493 0 obj << /Type /Page /Contents 1494 0 R /Resources 1492 0 R /MediaBox [0 0 612 792] /Parent 1463 0 R /Annots [ 1491 0 R ] >> endobj 1490 0 obj << /Type /XObject /Subtype /Image /Width 363 /Height 180 /BitsPerComponent 8 /Length 11713 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222k" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Aloou;ޱwKQ@T(T :TZD\K3%qRLldu5WR٪Ccn7ep1 OZo种j+>rr~o种j7ֵ]esOQOzx֫p6< OZu w$2qNo;;QOzx֫o捰Vhac|'=.v9XԳ%ҼUi=ړepR|𘰲`z˿M3Q|Y^쓝 J+C/nkV>o+lQ ѷuoUF*FaRPY N26?)ՉFmc|@.P=BT1ZvXaָ G[~- oSvn*<'uij2ZX@h~ɰ m ;Yԭ⿲-6R -CZՔ y5[eIE`̟T6|x{"t m2+PxP8IUn_-U2O@ ; {T}5j]QEQEQEQEQEQE[QVe_*m{ẞhE!P8Fv/ŋ;JᑚC&mVU8hWUxJ֬FOQxf}*k+3.=~,jx¶r9 X69`#GJ$亝lҒIAYYo~5R?U/"*QEAEPEPEPEPEP>L|E^\>#1x^MnW;_ ֯C/nkV_7@w?ԿjP_XۺWR٪BտcngѫECc/0Ko ĢZ ƢUj hm?0J;Yf=pID*B$CV2I®I,qdt@zn sM]>Uڰ~(ڰ~*(]!?߶ ??߶  >o?0@?߶ ??߶  >o?0@?߶ ??߶  >o?0@?߶ ??߶  >o?0@?߶ ??߶  >o?0@C Aq¥|7Q >o?0TЬ/$oI?'(] #\>[ɸ$7LZ/iı`0 w(] |7TSxm; g*_?Q  ?߶ ??߶  >o?0R2ՇoGՇoVo?0G(ՇoGՇoVo?0G(ՇoGՇoVo?0G(ՇoGՇoVo?0G(ՇoGՇoVo?0G(֬2?z°u!|3ȩ>/ G0|3Ȧۺ]&'|sFjf}gOJ_΋1IeE9x :Vf o`#ϲ">|!SȂLF_S_>|3ȫ%a)<2`AeE_SmnxI3X W늴!Y+F}c_U).Qufo,X{ΓM.}gBf 5'ȣ>| [S2sa)8ʋ0>|3ȩ>/Gȣ>|p%QY/(ϲ"ڹ-@L/(ϲ"y癣ȗy;0eE_SUKk b8$ʁdl _QeE?3G/j,f}cxLjxYHD/2E5Ҿ ?VF}_xJ+uZ$UF*FտºUJ`wS=J˹/^N$qƷ[uazM?rsrGҺtaMjR_k/@Xt^xda{f&AB*(N"xSvEDqLsjZ(1)^jK߾CQ_ d!/G~MZ:[ x*OiIk{`ѝa|G'j.|m&%qx^@4%O3=M1Ӻ<+|@vlbp{g~5Ϗ|LnldgHr@)g#E{8YӧqӌUUf?*諞Fc^B{ȿ|'ִ6OiS0= y-Imy-.|lޭ(q1s^zq^ƻ=tE˕ByԓҔFtU*N*=g{▼wඖU*Pxž-n֑S~/S'Je }*ݗW+(S-QKT]I46H.'HWq=7{ė0+>0{id|mdG22.3)tz- %ΉUR׎S66q%lF1LwR44&.o< =P/b4[;I)*9iٕ/?կxD/2E5u7m"s5W;_ ֯C/nkV_7@w?ԿjP_XۺWR٪CcngѩE>JUg~tg~tQF}IjX%ڡ}yu>󦝀=YЫG) *=GG󣙊Vbj͜=lj}G󣙅lhdZǨ~ts0%i,ǥ4 Y 3ʃ$)3?:3?:.u.@˻cNݸe?Ʀ~tg~ts0.4ۗaw_>>󣙅DI|cqqǨmdU?:8 y&:-sWoo@\aΌΆQ~Wkfgo cgAN+-g4Ύ=GG3&ŏIդke*BPq?:3?:9X*HhI>}Gp,}_E\ZǨ~tXlI;YDžlV%}c>~t7}PŲ٧ڥjJ}z96$vB8m"ss?:^"\ME+C/nkW·_5rO ; _[5S~~!jU u/-7=WV?6{ ly4h-A~*Z+__"C#FYَ'ҫXjvg^7yM靹CQ}}k-!B#'=9E,s“C"AV\h_(oM%~*Z|@9f*s\sZ1izTG,p$2Bl__CFI [#MiqImmJS8'S-G-QOmYIo3*h2rsjk{=(Ѧp&S4ry؟dXdXZӿM4b?9p*}aK}}aKkNQ}7Ϩh]K/QK/U];}GG.>ow -G-VtغwƎE.ʿdXdXZӿM4b?9p*}aK}}aKkNQ}7Ϩh]K/QK/U];}GG.>ow -G-VtغwƎE.ʿdXdXZӿM4b?9p*}aK}}aKkNQ}7Ϩh]K/QK/U];}GG.>ow -G-VtغwƎE.ʿdXdXZӿM4b?9p*}aK}}aKkNQ}7Ϩh]K/V/'cmPIߴrsRxgOMҴ{'#ey[|ǘv8.vf c*Ksks 3t'9~ _0hQ[-% :ew-8=r7jI' jO߳oVjs^u{aS^} {W >n:߅-6k=׳Wpf9H&@2Oukg~zT{B?Z$02FpNqJY;=v!yMt[kg~zT]w M+zT}S*ᩳEc}S*߳oQu56ho߳oQO.O>ש~Ep٢ש~G?߷⨺4V7?߷^?U]Sf^?Ukg~jlXkg~zT]w M+zT}S*ᩳEc}S*߳oQu56ho߳oQO.O>ש~Ep٢ש~G?߷⨺4V7?߷^?U]SfȭMթ~\a;!ytۂD`1 擒kso+lJF Wf *6D nsa]KKf2x]FK越qdE/[5-^%0=G6O\xo_CYdҡI֡ 06 ϡMtgw(3@\.Dj'H= !6b3[W9v5 jWS[Y^G<}L## =G\P'Yo1[`Sn,;kO\}kBK״DF&c !yݖq@uCo}ig.=А6v(f;OR - %Tl d@wT:gKx5 y%7s6նڸv2(*FQEQEQEQEQEQE[j}ڶĽʷ=c,Q]>S̅7lmqsm-pVq@[j Wwɯ`{Ǎ4^j[ݰBٖ'JL3q^U_SOZv>jfS\`;t^ҳ>I9_suS"QDjj{T9R(J ( ( ( ( ( ^"ejݬ/ȅ/\覦o+lQ ѷuoU M5K/]hWƟm .׎I$I{] J+#WX;Z_GBv"cEdj'k_(?Nֿ$Q~NՑН/HWX;Z_G+ VGBv"]ckYE.kYں ?uerEdj'k_(?Nֿ$QН/HWX;Z_G+ VGBv"]ckYE.kYں ?uerEdj'k_(?Nֿ$QCeIS}ߝsں ?ueKG~t}ߝsں ?ue!h?>> >> endobj 1495 0 obj << /D [1493 0 R /XYZ 71 757.862 null] >> endobj 1496 0 obj << /D [1493 0 R /XYZ 72 537.998 null] >> endobj 1497 0 obj << /D [1493 0 R /XYZ 238.071 252.939 null] >> endobj 1492 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im30 1490 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1504 0 obj << /Length 2976 /Filter /FlateDecode >> stream xڭZKϯRSb{Uv90K It|lr"F?n4W_nF%TVwUVII._}\m`dEn*N֚ZPYR;[ڬ<\(!7xͿo$$bDīo*Wizt+%,Wo~9c:;G\8 @č=fcmu>&늺⎼ꦥgUw8<ϑxgW[^d+cjEK}Xk]Rn^ Uc=|¶=r*Mag]N <͓%_v5q_Sld?8 ikNoJx!h NN$GŕtjaF0rBWMܜf At,`hnXQMF8e4H!.,Q$A %Gܢh*HMrtPc }}}aoǣ][g?fV["~F%BdzhtQ8qX/K1g)R_ xүW$bJFWkU' CҒJqd"Is06TDM$3x&x%c[dZPʼksCg:FSر9djXRS#NdL;YywgeОwy=t^N$dYv$,KXfhS8H^kH tsi烽IGw^wxuwAR<dBaaP%s %JFS/A60uÍ6MĂ}R2 z;{,@&ZHӯV4 6&o$i(,. F ]^Xp;!cGϞkkUTSua"Dŵ3CaB1! w;g"8t "x\ՇA/B`$4sXJD,{=|@&^n*@r](L=Nĥ $MΥ16l\̉?x}c{7;r6Z:79Px) $r>Nt!΅xBJ ǂ^} Ƞr$C@W#Ht[Χi33p?D\=G\»U # vAЃOޢ9I4u[J7T-3sCS9=,usŪp"?HE绷BD"d #}2@Qj4xߟ.lAc3ń83A>٦֖n=w RS5!; 6bO鄦ޝ9X McIG}G|p:Yp Vd > A/FI M_ԧ*E@BP&x$ur`CE*e+ qL0~Tݿ<nLjnk Y)Wi 6&4fsJ["Ә4;1* (ck\ 3ΌN(nj )+Np*x$C1 YZ/R@n ag-!?Bp+aTiFe%ԗu]Spy;aPa#hޕC͚i_e1[(zg!zc\;LoV\h۹{*;/S=уZE~p3NYeKjR$)Q"K~adZ6r=4ve/xbܾ%򱛄`zа6'(uD4řT!q$q8}.ߔEɻ;k9DOZreG 2 /w}oҥ/ӑ9DIb'Ћgvŕ*`:[_XPrh=HlD8;y)&JXICNpNJ]oan*j$" ^TiiT&T1m aW F7B 귥>F#&Q?a5;)u+phE>~24s:?y4{:eD.OĀyJ(z WuMx]%4ۚnvKmFlNtMK-&S$v׳~UX>V !wZT9ΔIFLنeNC(?GJ`.yp~v=\ʩMjJ.x @򴋫sI85uWrd=k%{ 0Jջ6qyQ1^g?\F )ϤRΊ"?BW/"sE# endstream endobj 1503 0 obj << /Type /Page /Contents 1504 0 R /Resources 1502 0 R /MediaBox [0 0 612 792] /Parent 1463 0 R /Annots [ 1499 0 R 1500 0 R ] >> endobj 1499 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.501 164.485 295.814 175.389] /A << /S /GoTo /D (stand-alone-windows) >> >> endobj 1500 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [290.06 140.574 387.743 151.478] /A << /S /GoTo /D (defining-a-default-view) >> >> endobj 1505 0 obj << /D [1503 0 R /XYZ 71 757.862 null] >> endobj 1506 0 obj << /D [1503 0 R /XYZ 72 660.06 null] >> endobj 1507 0 obj << /D [1503 0 R /XYZ 72 642.127 null] >> endobj 1508 0 obj << /D [1503 0 R /XYZ 72 588.952 null] >> endobj 1509 0 obj << /D [1503 0 R /XYZ 72 558.441 null] >> endobj 1510 0 obj << /D [1503 0 R /XYZ 72 528.553 null] >> endobj 1511 0 obj << /D [1503 0 R /XYZ 72 510.62 null] >> endobj 1512 0 obj << /D [1503 0 R /XYZ 72 492.688 null] >> endobj 1513 0 obj << /D [1503 0 R /XYZ 72 450.844 null] >> endobj 1514 0 obj << /D [1503 0 R /XYZ 72 420.956 null] >> endobj 1515 0 obj << /D [1503 0 R /XYZ 72 377.131 null] >> endobj 1516 0 obj << /D [1503 0 R /XYZ 72 267.097 null] >> endobj 1502 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1519 0 obj << /Length 1764 /Filter /FlateDecode >> stream xڭXo6~_!`%):a[ W`HX,yx,َ-}Ew;/ލǽ_g2h "ł˜Iޥ?ܯLԓb?ǟuZ)&[ 4OM:u&\ޏfG wZxL?P $" ЧdF iMTX HSJ!&yIƚu_hu ,B6ke~f|G`)vߜJک38 6G%sP &֓ u`b28&=>!LE]4U6oj̜;CL93F ^{vMLa~ &wִ*8]vkZO28EH&u]@C+g5Lg/=XNf2S&nF\lk01װRj&Ʌz)0s`Ye5:wC-^c2 R˗jynjw)2BYc5bIwM㨤Kc meSю&M.ү^ =fY;mg@#V rD r Tem-m2vk~V ± ECڢbmunOUd[x@4m:Jj]j2(4bm 'm:uwYˠ+Q` EPx}%)"hlkEF,߃zS&p4OCl.us$;U-Z>hM@iO,#3?>~a-Ɯi8B՞w,~bRLAux퐏 v1t6iBjf#t);>o̭ab#ԛ 0$c]Ǣ4!4F!/-[=HO#I<\?@"@OhtDD=寧,yC  OGI| Y/6$xHA%>Jq?ڢ L&.gaNL]+"%Y~KkJbA+#v_`|59gqL2wV endstream endobj 1518 0 obj << /Type /Page /Contents 1519 0 R /Resources 1517 0 R /MediaBox [0 0 612 792] /Parent 1524 0 R /Annots [ 1501 0 R ] >> endobj 1498 0 obj << /Type /XObject /Subtype /Image /Width 302 /Height 213 /BitsPerComponent 8 /Length 16079 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222." }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ooBZTt=,K$rkG LHt@U^_k/yӄyO"ZgGkTԢt/&I$U*@wf 2@f<93o.ſ&0A g{/i Q$N_/.qB[s=z+待-,{YZ;1 H$qy'gD_h;VLzw6LzwƊ>Sñ}N}NG*3rC}N}N]J4.HDde('ߊ"OcTݬsag/ӿag/ӿhi#m-+8~L2SI,$6A^xñjײDWs2l'ŕi1M֪%5{>gD_>gD_;(cy1_,Jsē'e`wc9Ge;gRtgD4Wa!>8oCUU 9ޝ 9ޝkVu w$QIpvlD* Apy"xAH|qs!c9=/e9`9^Ocpg}N}N~rjp!-ygFVfг.0#Q{$;ag/ӿag/ӿlK")bioH{ R lxxni[֏!7Iaxp2y=?9!gD_>gD_hqag/ӿag/ӿv4Qqag/ӿag/ӿv4Qqag/ӿag/ӿv4Qq7QV|68bR-8os?tIƕ[Z-ʅ-7;mFHȯD_ڏrſD#\ʫTxiRit@Y~WG(ZW,Y?z5Yotᳲg |p 88<\`>5ݬ=pE0uL&}̠.@€X03^EfoUc͵oVYOkmks$Wn,y̥C qǡڝ,v7DJ]^ܢUaoˀ,09j(NtArVwdn7{V*¯u4QCwA?,Gk[u_[kޗ-&Y͹2qqHȈTxxXz-c?౿EcC_,o=G"1/7vWwǨ[?;Xڡimi?o QwǨ w[n.׺'1"l>ndlr_(652v5_*6;c<[?;-cw_ԁ<^;"ц`."#M$g9M\zW?wǨ[?;ԺX,vWwǨ[?;Xڊ౿xxXzQ\O"1/7o Q`;j+[?;-c,V-'g]4e3Hmem1#V?č7ᖇwإ6߲\'q^SOCqPɻl/?]Q?yC Ԯ*ŗ4/B.~bs_Ȳ.~bs_Rp^2$}w;.#P&"EC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]&?q뜕UPrW0G_t@Y~WG(Z_fQEdXQEQEQEQEQEm*E J^I$`I$wm#ĉqf8' jOqL4}O C*VCՁ6\Kk46sHk 8.ʾҚZh^,+ٔ'V*!'suGY .bg"gO08xhc#t/ xMJT{O ^Dp@FÕF8$ݍ!o5Honگ"F~a+XCDmqǥfRUy43Py3-MiqU &}APQʯ͌笾[Z<:yLkhs O+1`ܦ.=+΍6Xi AU3`UFqOzU/!'stϼ7[T~>\]?Y~>\]?Y~>\]?Y~>\]?YgBYȮt{'?"2k1ȡi_̯+2: ȫה?J?yC Ԯŗ4/@+"Š(((((((4Ն]ŀ0X1?^MYM->;U6;3$GJk}>?H+׬3pĖwR o#qRckWWGG_a7W[>$X͐T ~p ]?=6>?H+׬mw?.x z>?]??c#^z?.mwH+ף#^]?=6>?H+׬mw?.x z>?]??RYDx_7"k;H\^ޭԅXDaGéYO$HJX0x:VŠ(0w^޿S^\[Yq#yDٵU#LZ <&M$j0qš{Wy$|O{iivqi "'<`qT-|{^>w  p t}Au t/Wn.^ n6i%Zx[ ݥܓIw2H%Eڐ Hed|}̆~rqXo uv\F0\^8iJH99 9_kDҲ}/XZrCxg0H$[Yaaw92xV_jZf8[mu@ӇгngQUps^rGҾ7侹{^p,P8yݨ,?Ə9䛸$IEG/a4yX+$<,?Ƌ$<,?Ƌ$<,?Ƌ$<,?Ƌ"Z?(Z+pːGQ{ך|cBE]_?SWduWG(Zt@\5/ViO^p5 5X}@C3U(((()HQ1hn:C{}E$x& wؐ_Tq KЖMJ9FYj$l[tv>jt˳tF浵)IGJd_jk ^};kXa)ެqݸ vX_lԓ6SO‘a $|1y Ki7d~,S.eu@,kIf k3;[T+9P+ҋEdgkʏoQ`5VVz3բ)ikؓY,ԯ,lcnL Fv*$eMPq'8= `7ꎩ6on, Fc+յFonGe䍔~]v1/s]&W.Z`sE T?Ul\|fڭnyox-8y|fNc|cZFXIrsm&'a Ёi7@`ݵ5٭й?CQo**j(AsfBG5'騣k7{`*4_ ~ucBE^sPrWnVa _*+R5"^P+e) (Ȱ(((((na78lsEm/9ĒieFa|ݘ+Z@d!G:yP?w>~a{r0M[tMV `RFчFWRO պ( oClbVMw*$7'vI9jk5"]0_ElZ4SjJ_GrPV;YWT`}5rk;I洖HI{G2@@`8?+ϭAE_CxoѼz7k>=ǣ&ѿYQprGQZ?(Z+>1ȡi_OUVekE]jW՚SQEaEPEPia(5 VSytYU`]K0&5*|A.=0rOEEgȑ @9;Y-iU$&'FB~ok}zlMeqlPj^@7ZdyUyv7|ٓM֠կ6m;VT+ԫ @F9LӴ]*hzw%I<: JJ?g:޹]XGẺTin 5er2Qq'zR7|DcԴ=TeS9!p1 =>M<s 5-֔wQ媯5V_c^[K k}uuaό`myF+hn$y׏ Y}U|[6[fϾZ @Utxfrrt@\u/ViO^>l/͟|u5d>l/͟|u53:A8,^<~ʹHCT2)^Oϻb!w7L_G?#7 p~fJ/ `iyϜ?.6Go%z_4>r<_Y_4WN?#g9]fWN ^A8?3@^l/͟|u ^A8?3G%ziyϜ?.6Go%z_4>r<_Y_4WN?#g9]fWN ^A8?3@^l/͟|u ^A8?3G%ziyϜ?.6Go%z_4>r<_Y_4WN?#g9]fWN ^A8?3@^l/͟|u ^A8?3G%ziyϜ?.6Go%z_4>r2 xJd_O%uEE=B'UU,O@+=E+ib#?yC Ԭ ȫה?JYzJ tVRGi= ɀvoe^:GO^*2T2B1Rkt4[axOHTUk9$ԧ10e6푻v8>զڶPڅ12$~F|l d`wrw~'4 bShZTi"7.I/̓^_K 8N`;Pr@GZ̽Y-ɹӧSt wPTvt8zP:Xkk¥7y8c#ΉE-ɐ䘖 D Fz Tz[\yk մ, 7^dW)`]$>~VǑp&~^۴gWR8ݻZKWX~#UNK\$SFZ4b; I"w 9,!>jQKgi3LIRݰpv-|5jޥj\u}"L$sax]PM=η3]۴%AY's 2 FW=GWhA(UL <()`Rp@5a_ݾcC ;˖˾i ds8f~ MK.IX!AnB~9ӤQ#%Adj>dkZO+͊}8 +<рX Ae{` l2Xg<4t׌=~GQxM Og-];Y i.Gbj>?ͧ\'[}I̱G'7 #63y `)moRmBC=p]D*L`Ar+>W$yR c\UbO? oo:ıJeenxc[/[YX角A#IR1)"R?հo)  /g#KQKrLLdwQs ˪Mmj)k˧(EXveb8;2q4wm5{m?Ғ i9& Sd#,n<sE{z!tX1r酯Fyg#͍#ۛy?pAܸ5'IJfv3Bo $?62wqlkK/ Hn2c 2g1rw |/  4e4rAE+ +L /?_֥{?[Iu{>d"l|rqq;+-kC&q{O=)&K=f8In-\Y)&V ]2 ڀ?\Y[̿ k8K)HoQ#K_0fޕj\ua^Z5C04>XX1 Je`f*A +Ҵ6+n/akƭPR"@r^0GYt@Y>BHС1=A?"ŗ5/Bj*?"?",?w??w? Ṟ,[@ݘt?QMXJ`J>%=кI$|LgoOT;C(;C)ߞޟs>s.ooO{z~j~G~Ep-oOT;C(;C(=?S4ygoEgoE}緧Ə=?S5S?w??w?O緧ƪ}!}!]ߞޟs>s.ooO{z~j~G~Ep-oOT;C(;C(=a8wxJԞ}!dӏg%zSma Nh2^5F[;y[5cX[6ڝ]IB*A   F s ^j~\jh.@0<0u vZuwq\-5W`V(2w\'^^fzuf:e෼>%LAs+ k2kz}Z}ؖKEŞ!BV!GNavաV,Dj <2X #w VI+XдiڵĖNM,AU頒u`Шʤs\nj+EsX2#(MNԻrC!rC3񏝹OT[yÕE,DhEPI>fڅz}\SFIp6 XO#5M~TIt]E,-PD ?|,0aY=?#GO沷{t -+sx끃[OT#jy⵷D9ªI1TnXE Veg IqwPiPvZ̓=2` 8,ztv[3h,@Y;Yi]ЍX3wWi$:Py"kX2dn2/B䲂Aj<1+A鸼,g<4&'eJ; =WMa- Y!ÀQBxʜ{U6ׯhM$FY#0"DnG GQ+ZuMJ!yF9?,4l+XђK,w,GqMrd .0A0yZEŪiv )20VaQuK1&_yys=u NKFYy.ep,pyjl<;.cQ6b92pr|'֓^:P^[?oV֚y!SlC|W3칚[ S77|.@절'מ h$pꑢgcu$W#/SVRYVكI%EexGPP*uw1A[4[M#,3e >zD~/e'lnbk9ĸ툦)q@EWTgiwH*#Nq}?Zb ֯n `άq$!c,sMp[%"8M%gi+Koe%[oα;DUZ@ +7`H'#-c]Z5m|M.q:I#rNx bZ=dV ȍ۵zͨ!qg[{x#R$R w1k6`Yj>B+bѮ5in+;y<#kFT8?0=*]GzV,1\T8) ȨA?yy5ˠ,[E%(/1SQrI☺Ѯ4tLGXc8/`T(I^ZE#ȑȌ6X~WcBE[woZyU_5rndQUٓ]3V>#<=CM]K3ZӟEQEq,Y?z%QNEa G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_ӟEQEӟEQ G9_P G9_q?/DO9}+2? endstream endobj 1501 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [467.773 463.66 540.996 474.191] /A << /S /GoTo /D (the-view-context) >> >> endobj 1520 0 obj << /D [1518 0 R /XYZ 71 757.862 null] >> endobj 1521 0 obj << /D [1518 0 R /XYZ 258.13 550.288 null] >> endobj 1522 0 obj << /D [1518 0 R /XYZ 72 516.25 null] >> endobj 1523 0 obj << /D [1518 0 R /XYZ 449.299 400.686 null] >> endobj 1517 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R >> /XObject << /Im31 1498 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1530 0 obj << /Length 2368 /Filter /FlateDecode >> stream xڝ]sݿoflLi:it7J-6}I>%ニ~/A|/Ed,B A,d*jFa]IJ~mMCՒG)_G7yk8/~zQJ̒( _, -!u >tqk|0S X GEp@]PWyXljdY͢ IuH( W&??hc~rۭgς3*?vc 'ˊ`mvy5gi΄05uۡqqsv2dW\?qoqtۙx⺶x0%1^ '{BpRYL$>ߘގLЛ_hN,R@ j%sf?>jN,lɩvQL#B4js꺺jG8?/~Ko`3:XzXz}y׋7/ 3'ݩ1+s{9r}#Љm]ݕ@{Mlzy\FZŒ43!YhF|f馣|RS j{+PB0FBn.VY0[uWo+o\pm:eNYfl#N$|O8%Qu mܪigchM~;% [HێJ-bW:Eyԓ,Lٳqx8rw4#–fJj8&XȑZdb\3\5 T)W &@WĿB㚦uQEN4%\!aLtكe~2WsT*ծt1jDfq fV&0FiM'%(ǧv~C9ZgscdݴfB6'fznB" MJrBwu ;,?[]]n V=Uٰm9 cqxo*䝡,3-M,҈>T {0‡1aCIArMi6)md64TEX)sJ5v#Y45Dqq7M!keӰ7)BWajRP$>b@9p%`p_Tc f2Tv 0JO/1EЫb -BI8&]Pd^N8I2(BXN7?:|:T(ӱJlnP9)tV@C]'3uwFΙAEDFh9]8*5v r|sr];hB@o1ֻ*fJ&.G rll7"R,VPCmņn , Q}3轞ǓAAoSw*6\qUNڇ*ԵB&JCEotE"Kڎ!(y1>ؾ릛3dlk@ڧI>0 r]lBQ@ߣ.P[Ι!PbA goi+'g=(RˈIVʶ3lV6"qmSګ'jR.oa|1YzAJ <wؕ+J|yjٴABEu&:u[cÔn֗xE9#-LsJ"֮OvG3g8{g@iʊ%wdXLgZƯ=4$CRP%[MmC˂&GX   ?# GgOBi_Hý\K`;dcpM )tޠWL7W3zvM(΅b8Z1"|ˏMMk!&G'?IJE endstream endobj 1529 0 obj << /Type /Page /Contents 1530 0 R /Resources 1528 0 R /MediaBox [0 0 612 792] /Parent 1524 0 R /Annots [ 1525 0 R 1526 0 R ] >> endobj 1525 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [165.389 228.404 174.854 238.859] /A << /S /GoTo /D (Hfootnote.31) >> >> endobj 1526 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.463 88.143 370.557 99.841] /A << /S /GoTo /D (tableeditor) >> >> endobj 1531 0 obj << /D [1529 0 R /XYZ 71 757.862 null] >> endobj 1532 0 obj << /D [1529 0 R /XYZ 249.478 463.242 null] >> endobj 1533 0 obj << /D [1529 0 R /XYZ 72 397.17 null] >> endobj 1534 0 obj << /D [1529 0 R /XYZ 72 287.594 null] >> endobj 1535 0 obj << /D [1529 0 R /XYZ 86.346 101.444 null] >> endobj 1528 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1540 0 obj << /Length 1511 /Filter /FlateDecode >> stream xڍۮ6}"Y_r-ojۇ 8g-I pcMrBՇ݌_l<4x}xy:E= n; {bYvUʹ 赅x\pM)]ZCߝtN^> )P}4% Ҭɻ*E7rdn\1VQhi*0W!U; )e_"*GH\>jOP(x7;; ء +qRM|3-#T;3!Ҵoۯ;yII$a?ai$Օ-".t$R|\x%qK, GyJ;S\Wb]fgk-A^U1#;u8grØBb*<]! T#lDrG_gZs9(=nLgf=7`M+ޙIYN FlpM&]%ЭG6wO"&{[3 x@`nfa|1m,pI]/ݻ8fXg՚ob 1$˙ҸݱNHNWYގ۵S> endobj 1527 0 obj << /Type /XObject /Subtype /Image /Width 290 /Height 283 /BitsPerComponent 8 /Length 13679 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Aloou;ޱwKQ@T(T :TZD\K3%qRLldu5WR٪Ccn7ep1 OZo种jʬWKa  cy6< OZu8s銊 㺇́ǹpIR?_QOzx֫ G#rqrUl OZw种jEG(^D]@,~* +;RcӀD7Rx~tWsw种j;ֵ]]ʹVvqu7I/2p2H Q w 2 rɍqN.rw种j;ֵ]\l#3jS E2Կْ4Y?QxOzx֫K1GJkGP2@2۶0(3Efہ'80y6< OZu K) AE/zbћ f:gzQf9;ֵG?oZ2OO&.OO&0y6< OZv?r4e?)f8;ֵG?oZ.OO&??,xOzx֨'='kLg0c pO qgþmJmFa&Rmn?r7N9[TG_QȂtYywk|<"DfzӿgV_QG<r 0|;n?r"*?ȣك޳(tY㕽G<TG" MWi\gUPΚV(>o+lQ ѷuoUF*FaR(J ( 5- Qvӯ;F$Oj2^ɗ$rOb}{NUTWyUb6gigk%"xI@aV%݄2a竫Cuk$8',;;O m!D:&AG8^Iqӭ('ػm+[7F"Wp sܚ]\&  pxCqgt$*U3gTn3KKH7DiV/x<3f1Lܪ7$WP݀eA xʌ*#ZO7'}?hx~cvW QWp3'Ԛϵe5ϳ?ٿp\QjkIf45ϳ->Օ֓>hkIf4Z=5sF}+'}?֓>h{jڌVW#ZO7'}?hxϵFoG#ZO7j3Y_i?ƏFoE=W>gڲٿi?ƕ=Žt+*Ei G sSՔ>)sa]KKf%UU~ u/-7=WV?6{ RHꑢfcu$vw̳ĀPj{`DWWIU_G kUӵNg1;-"[is s!R:$xl:8?n>SN+O 1:HQX1b26= 銒º< u d},+a,1 >keE[v5ʯs:RJ{KWm]ILsǧ }:[h Yfu T-?:n$H1He@mi9 bFG҈do#?6DyR3a,~z{ 7 ڶ#hrY r8-EvF2}9QKIEZ1?Uq]6W-cGeKI+ x "rO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.wע?_IrO.woAa]/JʸoE46'7kig(w5YH( u/-7=WV?67@w?ԿjP_Xۺ4jQEAEP\Fqkky$):|6pۚN$f ($} tq k~3Hd'= .?t7Pr:/uM[8 ̴ُBbb.N紙|lマq~}UKj vUջ"}ʻ,rç0w4|=.?} O.5 /mn9Z BX.Iiughg6|(c'`r?>O0??4yz\U|;,-=@JnMYhP+pF#Ew/xFn9n{ Khlt;.52?7B BkStmi&9-<ar?4yz\MI$hВ+$셎Ő-8M E+8>YvgcT ŗ'p#-&]`etH?:~;|^V]wʋ[xqwd0|ۢ W!su5FΚڄSCix,F3Z?\ߘ—/Q(} Igjgڢd!Q y~UUIiY/HgǵP*䟗Y9s~c ?\ߘ‹.w}Emݫx٤HR` <1VA.mum5EH$@HGne?1z.EpSφLJRiU 7e\f?7';p=ture?1]ﱯEde?1z.EpkYz.G^A˟Qe.VG^A˟QrYw ƽre?1]ﱯEde?1z.EpkYz.G^A˟Qe.VG^A˟Re?1]ﱋރº_]p"[{ekm,8棫)QEUF*FտºUJ`wS=J(* 8ʰ!+AVFkDvo,8[v`q#$zU_VmCwsj184XUlCnu1+##VSPgͼJ9!s]!\ȬGF#$WF[mo3O$I: rNѯύ7G5hc^F>6?Mh׿9z+#C4}^o&P5謏kc {|l!9Cע>ѯύ7G5hc^F>6?Mh׿9z+#C4}^o&P5謏kc {|l!9Cע>ѯύ7G5hc^F>6?Mh׿9O쫆 ]=_m/ }r@棫)l|ESºUJ`wV ; _[5To(zmL5(Ġ(?ROuMu|ja>p:}Gvy麅\@$gu%hғr1M$H2O)"[MG:= 45e -y@d:r+D(H8t_ګ>ӻZjV3ϵ/jZ6# ,KpUp9e&|;e~ .E "w+_w|3%w{.mo$!Q*SphFq7UGϭ?ƀEfjh_4U[ګ>w|U@\ҢW}n4jh TVoϭ?ƏU[sJ_w|.iQYګ>?W}n4*+7UGϭ?ƀEfjh_4U[ګ>?΃º_]q^&m\j`Pqw vπ(`}WR٪Ccn߃sa]KKf%UUFQXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEbAӿkG-?+d5ְؖ|EUU7,[idkwW< ; _[5To(zmL46O=Gd/d{'ߣQ?UIE5Or˜?UT5'Vݒ{:u)VcN8ϥS^uGu-p7Qx=ف?U'ߣV&&hnX6"_1#ocjd(5(7e7~Q#O`^?*h*e"}f(tخX :R\xE)EG);X_:*Q O Y v56>*}WR٪Ccn߃sa]KKf%UUFQXQEU+1N 223;fpd<"HRUdpxV*S0\\[Q\UlU{W04O%LQ%خB$HǴ\nQQR]Ơ)3Ư yGzg:%X)xT' >c5E㹹2 p6Jq:YYټRDF#eM#AOP3`*]xkڵ d3%U`]}0)su,p^خW`bjMaݦX&TQM'zKԧqkILԑQWhs9X>|R<&Pp9a偓4Iyl{ƒ/ Km Kg#?wtQv@U :KEQEQEQEQEQEQEQEQEbAӿkG-?+d5ְؖ|EUUF*FտºX%$wIѬJ2X=wS-]ݤ4sq,4h$d Ps:9e]I0[CqngD*'x5++[}K0I'8X#D6DGriGnfXC>77bjϵ+ RQғK;X\KҰl|e{VRSIד0@%C;9ن ]CEDm-Y5vbRJtڄ(NeuvdI$3-`189h|G|jD2Il\XŁc vc"}l\>:dc{1f1Gf2Sߠ# 1QR0((((((((((( c\w?ia];K!Ƶij (G u/-Ȫue`NcFGۺWR٪CcngѠ`YZ̪IY H FImzbXpxxV%$f.c,x$&UH6vN1׽OEQEQEQEQEQEQEQEQEQEQEQEQEQEQEbAӿkG-?+d5ְؖ|EUUF*FտºUJ`wS=J(((((((((((((((((G-?+d5ZWNka,(sa]KKfG⫝SKn`ex76%C\=|=UYVeh5[EynD~fxNaC^M\6 j6 j/׮o*NaC^\w>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAsM0>y0>yK51׮o*D>77NaC^?; z fAs3ZkxI#ԥ:J@SnGZ/Em_yxs=w?; z f>jږ.T.]DY.iX/,II84Ka|aA-ƨ endstream endobj 1537 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 141 /BitsPerComponent 8 /Length 11325 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?{-T4mpI?ٿZ8ȑ3FjڴY1ވ%X&0Gx=qkJw,?߶ ?,?߶ a7o\)kW&n 8%93F@G?* dfbUz!?,?߶ ?,?߶ Ҙ٦ב ~bQ e춱%Ķ6FtPTێ8UEM}iӧQ^)"cltH*tL>P+t-6+Xn|gNK~po_/Fudž[x!w7f̘Uu=ZLg erGi!޿_΍n-oR$i7wӒ7d.eVNt4T̖F=sFuU!fcSj\BGxmR be%[7m8'Kegnդ"[hXc1]OڣoʏGߕW29[Y ʠ:ҲeuK BۇF* )T~Rf Ue/ͣXVA2_BKJe0DlI2Y8 7P<2 6]O~ddp?/QaisushUsyyOﭼSui(`kͩna<^Yr 9]ty)?7 h,3W头rY“es{ub֪fPF0JGy}+tWMfo"5K\Z^xDX-WuisFWn87'=;VKw摂qS~o?F CuMV#k.8r7+dg(O >}S5@D39Zoy}u3AIt2.oʒ$Ica#\)*ϒy}SX[\mem+k*4JOD*TsIZ>mOJ6h8Y r:-ORhwoB&(br13slaty)?7o̿<t}}oDCcظ@U: 繭M/cak2YsTJGy}UEZyN~WJm&կ/ne5 $9JƣgO(m[y>P(}Bvs~֯/+I/eK9g|e]Fqx}Nh9~В]%H 1cfp:S~o?<RD ZOⴒd[݃qkigF a~zz{Vגy}u͈Mh֖mJ@t :C݃L0CtL U ]V{kYB(P1 ty)?7cZ4>Fݯr {- Ȉ9#LzAu6Vn1ӂbNo isomokifbfX̛>QaA]3:Πb6 c)GU"M~Q7.8+S~o?<V=nS՞?7gD(*0u;9ncM2IWb:O<%?+UZwjݭ]*5kܫmk5 *&ݜg'j :][7z|%DK$X#W䶊X7o $V9Fp֔aV&Rrs:8jKu!2񝛛vA9j%Ruّ$9y``oVn2?<%?D7KI֬.eE-Jy0T͂;fV;wisml-Ep'ۊOS~o?δUhroӛlWk_]Y5a (lsJ}]7y}bkrS *iTʝ*ME7{=?v$u߲=?>XGaS~,?:oae{tXQMϻ^ٝo/`232(B'A<`,C׿j;k?+7H!losG!?f5#j+ vMХי) /0 M$qȐ"#s9è>*dҼ^*xM녹xnmUAŒV~ xL^-vHY }ŸqU?bmɥr<։G=|=ԦyK7+|ҩ01]k{;t <>Z,:i+ ӣ V,sKT֒wKt޺./zǼοB`KAs3,Rc qڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|Q?WzG}jHA@_E/ZrOz>ڿ?P/*} V^_ (_BUG+m_ף=#"?пk|QaeTARBuOUm+{XRUTA*?Oٍ:^1T!eך/=,/p+3gLW'x-nַ5/)"F#tIM_iv6ӤIoIgp'pVcY}$oӃZݭ,r¼zʹmwm}{cqqpw6)'v}WEiiUm&%7u sY_iiiζ&?)i}?&?)i}9t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,t4W= 6AKOQ 6AKOQ΂CEsii,k? ̓BuOU[R9eӡ皯uOn oe^t\lǜGN?LUԦ)."XV+斜ԭcMJ[cm$[gFܸy5e8C8rGZѤ҂_!80rh Q􋋣X3m;f Uug}gOxt_d۲ͼm1ީvȨߘ֖/ XD*a E8sI=pOjXL.EK6Z_Z}! pOljgqHln!U( r;pkGT6"ZL'E(qeO굟bxYԘ^g$lUٜ )=WNu(kxo>iyPm9\>M:HP5>D9"6{8z鷯TJ>})zx~tg1"ѽ?:g1"ѽ?:g1"ѽ?:g1"ѽ?:g1"ѽ?:g1"SE`*ki/o[KZ4d.W[K_K~[*O'u _K~[(_V}M>U_G?ߖ h4]v?ߖ ?USFOQĿ­d2}M]Ŀm/~%-k'ѓh_m/~%-ki/oY>SE`*ki/o[KZ4d.W[K_K~[*O'u _K~[(_V}M>U_G?ߖ h4]v?ߖ ?USFOQĿ­d2}M]Ŀm/~%-k'ѓh_m/~%-ki/oY>SE`*ki/o[KZ4d.W[K_K~[*O'u _K~[(_V}M>U_G?ߖ h4]v?ߖ ?USFOQĿ­d2}M]Ŀm/~%-k'ѓh_m/~%-ki/oY>SE`*ki/o[KZ4d.TjX`~'?*+Q"Lo"m%Hˎ'd endstream endobj 1541 0 obj << /D [1539 0 R /XYZ 71 757.862 null] >> endobj 1542 0 obj << /D [1539 0 R /XYZ 276.526 497.788 null] >> endobj 1543 0 obj << /D [1539 0 R /XYZ 242.967 367.126 null] >> endobj 1544 0 obj << /D [1539 0 R /XYZ 269.886 150.266 null] >> endobj 1545 0 obj << /D [1539 0 R /XYZ 72 112.141 null] >> endobj 1538 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im32 1527 0 R /Im33 1537 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1550 0 obj << /Length 1822 /Filter /FlateDecode >> stream xڭr6_Gj&B@[Lij[$ӣ`׭A`):Q b68=.G s7jXw}'TsC3D(i}UlLyl !G{gƠ^ ?Qph3=v'L$#"8C`}̉jRi$fw$HVV}A+"huS v#8>hiRM\1=&[/#8ܳ pM /~Q@nPC|>e`o@n7˃K !jgf2$< ‰)n{]֮:VS[%jP]|R_"2;|w]NP$V &*Ƞq7?9_fB%9 ⭳8DtNusw}s:@]"\b"IU6( iGYTX;%@046͢W=t=@8 18: d)$!7o0%Otx={9[}[N͙(Rli$iX8]@AdIzt) päC>A@}}b]?٧{%pTpMe} JE=M_3X;ֺj@~3R۝۝SSz$wKkOmBvQ~#Gz`rUm]Q6hЏh\_}—Cj fEHFIW,3lܸTpDd$nWf\a0) ;\&h*j͠`$'ЁPpzU^̹LQ|2B}VTwbAÝKᣛjY}P0 `w놸:w@ *AS퍲^`;;X)O/HSjny4}wDG95pIRׯcltGcս c<ףnU0V/׾Q< 8ޜ9#Sn~Dz/PV83Dg8W%$A9FBĿn0d~)xOӿ2NU* th endstream endobj 1549 0 obj << /Type /Page /Contents 1550 0 R /Resources 1548 0 R /MediaBox [0 0 612 792] /Parent 1524 0 R >> endobj 1546 0 obj << /Type /XObject /Subtype /Image /Width 255 /Height 180 /BitsPerComponent 8 /Length 9807 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?M_VU2YDGwv2@3( @ɬ)|qh;)f wkO[o t17iJt i7>kl\ZOϳacT&s!ukvjQijV2էQ+R/s\]:Kkm|yH. Zi][l.n.KdRp|Ŕ;~lm5I|%˙NnLZ;s0|X ,nNibyEp~m@  dLZlZXL#k;s|c\]LJuf[.ĀTnY ˁMM@G y-d)bbF5nqaF6LGK C6sJpFz2Ķ" F('KYjb"d,$gY[u+?s-Q+"cQe4weyX2_h!v37:pSm^gf?fx܎G8.7ǚv.6w^K;\/7䒒HV`NO˷5gC%ݍWVgdJ 8_ߝS}o? |ѿ:<~uO}~.yF?Q? .=ϗz7Tg?pG(/oΏ>_ߝS}o? |ѿ:<~uO}~.yF?Q? .=ϗz7Tg?pG(/oγn摼IHL>KoU.!,rbYntuI$i$pY$pJg:%FN\`:;zpk6:奬{Y-"dYehz!ISI\'9PKkZ%Νok{GQ3;b9 pÐɹOde=3?2?´ GtO G#'O*(7'Q@}?+JwD>;Od Ң3?2?´ GtO G#'O*(7'Q@}?+JwD>;Od Ң3?2?´ GtO G#'O*(7'Q@}?+JwD>;Od Ң3?2?´ =cXԭu/Kӭ.纷TX%Iv GFbx>2){w)U9$PcIt޸̚Dž{Y-m/`%YT7dDt3^\j-i0re3Cl&?qAF' ;=K¶:Q%G]>X30 EtˋV62,^=1E$\# GU`fw ϛKikipima4q**#i&ø7piMц@mjK}`X߇ǔEfџBm*Syd_~}ΐ r[xY8] }^mHvglB5C#U*5v ={i'SG^g¦y#gؑ";6 (/ouoƺT[Z\\[+wZ2?2@랖?5}cWD:v[VO*#dt$f6H^JToy|9 >6QqqHњ D$994AM5ВŽ6)U # q )4ߋXDM!$U~fmpyg`{N mu B r,̌@Ar KE|1m>j{%VIa97՗:}4mA}$b_%Oy|nȜ`8e=f9|_q"I $iJJQKoB0`N=fqwyOpG{qF`2e]V7\fhZkyiNTo82e- ?|4=Jk{4k[ 98G&ܶI%MjV?n-⾽ʻԮXC"V8׌8݂~(((((((((.nlt;K,MռR]Ĩ*. `K F2?P߇RdiVCPnH0K-cc0||$R5ku$!u|ȌrFsIQ nl}K~nixx<`^o1dɷ<WR Z9d#&0 $lt_fo]{,ۯ97p#4uKi$yfIED(T( ' J( *9[cHU I9I@Q@^X⹻%VH̩=~gETO XBꁝTsܱ@QEQEQEQEQEQEQEQE_hگ}fws^_|W?'5#KIis(,xDN>0=x{j:,ip6/ yqnDwDT # |&[KwvOGc;)P C"Y@á5;oHM/ wk-y6JdbW3cxFH_  4Ʃmo[;f1 tFy.`xEi4}X.$wZF  =[F'<eݧ5s/T_5MMH뗰ME-K{}5Z3jp6UfX&PPa'8k HݒV3p+dۂ66#|[ee㝮%HHFM1]A8R)?'. Yç$hκbc jEfDb'Y(zͬ3"̲l{Mf*1#~-ťnݒi-I)MH# +Miʉ\ZJ<׫ÕǸ|g8IDnfwRE2Ck +/ZυtRcYlc(g@ qkR ( ( ( ( ( ( ( ( (1Ii6IC1ʜyc9ς-'Hɏt;nc" V3٬֗[B&R`Y[ .X2-T4nB6vGj$ -yw麜O+.m Ѭo2Yͪۀm<~Yđ%>w{hNT2fOU!ao"׭4MKL@Mٚ5umٵpWh2ǐ3ǷYѠk")n/dkҲyq\|f"՛ez|'gxzG 0)jmU ȟ(w@*1^kɪC>MA61N y-=nv?n0׵-CZ 84.m ٚ(. f8!׵-?Z9-ZX-QU")f}8'sKMya+_iirѣM8w6#q,mC |5Uե&{$b>42Pܗ ~QD^vm5%[@[Y"[9̒8W&*Ep]:/vٳƟin.-OmD&$Uf[#6rXtjK)E rl"*(N>@xU g˻缕'+sl ev*ڠ brIs5e:z(`Y%vT*sJ)[QQaHI;|U0͍rP zKm:k8$aAnorLغ}Up0JɤCK6Jie!!ҊZ$r$ ʰͲ6_s~mytwt{K5c(AS$s~a?~dѢEN S,$0Hbx{L|;6[yv؁wc'qZ4>%t%h!1E1s@x]' PA[QEQEQEQEQEQEQEQEQEOR5ku$!nqpO=]{YѴG#ڽeĮ+,[%~n yu<1iux=fL}BI tZKulQ [Bf[Ab}C>*X$O'(9Un.ccSG 0"׵;y/56I,RksFhD|1Pq]Ujo ![p@BTNvN4H~-n7}{c8ǚlg&3\3%n5I*@ *s^ ttXɚbDH\2i QNrx_Iɞm3Isw,đ1ضq.v1co>Pp5cy$(8 Т(((((((((-#M;I.JCmm%Č2#Vm* crFnA2: HI#FyV ްOle'Du xYŵ q.f $d-sqxs\7IXy)-QIYT9D|qXXu~]I )<:ՊgIԠ?exzymtK]6rn޹cS&J'dg{D4 *+۬x""Ƞ$O3њ8nbgw iJ!,B qzߊ4U܉{nL2#d)wq%'\No>DadO-13*sy QEy?<+ KU-twxd p͸9(I*<4AZVgu7>a Y !X) ԡTӶȗ N~i=ϛO 9ϝ獽{i:\1_M=٢yIm%XU Md`jV8X+fTKImeiV6ȄaS\WVșL-{Cr\%Fyےj~(tgw4鼽i,ĥp:l3W%vRCZM(0pe;` <)K{}wTխ'v- HtrM9` sNWcXk0AŽOderMq*`HY~ $ p t)ѯo>myM'A!hcu`zp&M,R "Hb(o@89ǿ^,ϺP{e_fux,V߇徍de #0:> endobj 1552 0 obj << /D [1549 0 R /XYZ 276.526 443.367 null] >> endobj 1553 0 obj << /D [1549 0 R /XYZ 72 403.362 null] >> endobj 1554 0 obj << /D [1549 0 R /XYZ 72 287.351 null] >> endobj 1555 0 obj << /D [1549 0 R /XYZ 413.984 157.546 null] >> endobj 1548 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im34 1546 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1559 0 obj << /Length 1852 /Filter /FlateDecode >> stream xڵZs6_[Y7ޥN;msw*$`p7]!!v#G_bJ8pŷ+Œ`uH Ƃ+c]Z(V:kŒF*d{V.;i:uEda4-E8 ֛wp@F,Vc;jp7]`#`1ђ<8G@`Y3N^/Z%̀ai| SL cWy ]12+ H3O_Zf@ 3 2Oy*J3`Txi&8MP cxlxґYwI!"B"Xj(+0m]qǮ ]Z˞#NXLq!Uv\@ ĩcjw۔܏+Q)n$a`IO]s[ɺ$UU.k{_:y)THsRH[$ܔ&h1?h1R殻e7T7H;k]R-]n{rSvV:E;ѰuVǸEyѾ 0F_UY)Izg.olq۾k^?ؖ9"Zϛg]A6 W`c$-MQ`戫nVWz6>X`>>d1썼+Ɣg|R8"9_">=b8R`wMj?}?{f7ӽn»Z;Yjz;W~8P}%OD {Vo6+UI2I]Ydi|ggsSd}a[bFmҁi|2<۴LۤC7 <za%/]^:$Bq,c4P?!xVYL3[HwO|M,]j 2?H- NqrwZh Fޥ~pXƘ6 ~Li^tHS_s}G\b{W:"L ɂ%+I( t<"/Fb_BlMK#1 &(#,IidɟzG߱_]۶BmR%G1f"fW0@;e5>^cʐzuo.+,&WOQKij+l,;s(hU1C G~49p?aN\(Fԭ" d-`o>_p٬! 66 endstream endobj 1558 0 obj << /Type /Page /Contents 1559 0 R /Resources 1557 0 R /MediaBox [0 0 612 792] /Parent 1524 0 R >> endobj 1547 0 obj << /Type /XObject /Subtype /Image /Width 396 /Height 263 /BitsPerComponent 8 /Length 19571 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ooBZTt=,K$rkG LH±th2X7I rLmdXsd3 'AI-5Ru Rۤ};`噔$ea^2\֭WI=S8S*ӡ/i Q$\ܾ>n}&iwco[ kK,wOqqKiw2BY'YY ;an ^ڷ?Hv//i Q$QO mS>d%H,TmbsN\x sq;YsфҦK* Ͼ2C tMnSuK6X"򢘔 8rw|wȥ3Ò(_??;Mŭ֍ l"\ _pl $U܇% ųJk%F)],jI@s gkI8+tZgG/i Vn+˫4'S,qcjB>d1sry`> e4G,腑%Ƭ} b?#Iתܟb"ZgG6.7PQegTYA g4 393vyb;dGTVNAZgG/i Q&:??KVgDzE=@-3# ?(lj玏яVgd{ZgG/i Q&:??Gg?(_??&:??F#{o@|Ѣ|98ӵ? =F1aB6*H@q֏mVx"&ff%W] S$/cWu4/hMo{GpǸ ]hqGAߍOG]Etycx`H#rY kERO.#OЙ' >$/c]{Jc'Ld =OxrCi>_ {-c^=+Yi)3dR;gu~U4sF 2J2xԜ91tN,%<:݄[RYH@=};kɋ w43(?h0 ȫה?JIy\x&#;]ɭjx/,8@!dpASZv,/&hcIg`"GN:tVweX'jwS<5Ͳۖن r!y9LOO Ly"2 r )t̫ii16Qo`w!qc^*߄`-KPKO%S]zCey5N`sQX \lZ)7nT*^AAu-!,u;خa$*ǵhEV{;Xa)* Mಐi:}`-aI%yس3`I88?S=Kѽ?Q? ѽ?Q? r?7ׂ+LF ^FOO%{Y9z3|;rOGYcE';O+G_*+Rjŗ:i Їvm~W(ߕ |c;oSQEvm~W(ߕ .?c;oG?TQp!ߕ >i>v¦[#!PArcEp~(|c;oUt}yힽ:V;!ߕ >i>v¦vm~W(ߕ .?c;oG?TQp!ߕ >i>v¦?Q;O+5#2b@$Evm~W(ߕ \ݵ7мH(5~|c;oSQJC;O+}|MEϝ_vm~W*j(|c;oSQEvm~W(ߕ $uf8?Q;O+^Yudf^j;!ߕ >i>v¦vm~W(ߕ .?c;oG?TQp!ߕ >i>v¦[㶁teAoђW׈|cFI^Fq㿂z߆UVekE]jW_gM?zQYQEQEQEQE Lօ{ 7+8"6$|c*9u\= %2:v3xj҂A$jh 7KK|e2:%'&km+wƷ/l&Y|ʂNݸJ]x6zAun F<iݠ2<q=φ 7RJ,R d ˰;nI Kx#PTpKI ) ((+>1i^ $o#}x'}^ ȫה?J?yC ԯ"eΚ (,(fCqgu{qeo,we/,ј*tfGEfڼ-Ͳqqg4E@<Ϙg%)ӰtW!cIo5!xG̰MUa&I-6l/K"Z0╶\DtY{pqc#PKhn%[F!XqFq򺃂7CUgZqCu:KĞt68 e¡ﻜI-N<}\7-qk%)3Dl Tvœ Z4<#kAZY-HE1DvXfMn S~GOw)"BƳQf7ѤM1ZqJ>IP`*GcGn9A6-ڧ 9xi|sFp$Xm*4#*]Ԁӊ39Gh0v8 N N[It>8o*GaH J׮wV:լSv-͵ɸ] '$z*LQE!Q@Q@R/ZbYݖ(c'c]I} FѲJFR 34_!ҭA^Y2#d0)?6Ox6ojvS]B2$MCcK֯2 KPg@w?srymxry<^+Boabg_$uXg9sךe*yj|OMCOk#,SDIvw8 Hr hAERQEQER3*)f!T N]9#(n-ʨh ON}(h52aRA@8yfKKF3o H Pb6tت7Euo44 E+D{2y@nRKײuwWr϶U/ס_J)5` (Q@Q@6I$/#(p:kuҡαk]G\n{c=.gy̽UO=qoo$M,1gvPYl#fߤXN\Io!ChC7?0ir+^OŻS{_[:\y8%a>c5IPH#NQ&ET((+>1i^ $o#}x'}^ ȫה?J?yC ԯ"eΚ (,(((((GOw)"Bƀ-yϯΘʮXR0AVlv>$xlbѝ} g֣."Ot#Lx:7;mXR Y:gl}JL!i1 q֤(((("(F#:R/ ѤH]AV=E>7ƐđD @)Q@Q@Q@Q@($A]x.mmm)^)P2 jZ( փ["hj-m\K')#VPEPEPEP^!FOO%{}x???dpg;'kE]jVO\G=СD,~i?+^/Bj*i?>ҿk+MEC7? 'GWx4Mj*i?>ҿhQPI7? 'E+ҿi;+ҿhQPI7? 'E+ҿhQPI7? 'E+1i^ $kIE8> x???dpg;'kE]jV_UVy/VtQEaEPEPE^->Kcx!~N8D^Î(kvZl>a y%8# cȭf ,3QYd#g?p5cQ@m?S(`W}??GtOi G?ƏXwD6;OT =g?p4}~j#'OQ?V?? *?fo?@m?S(wD6{0+~h}ՏGtOi G#'Oف_G?Ƭ;OT ?? * o?>g?p5cQ@m?S(`W}??GtOi G?ƏXwD6;OT =wm3'sU&[2J:Ō*^U :p+þ1i^ $kձќxt@Y~WG(ZW,YO^EVEQ@Q@2e/$IvwWG(ZW,YO^>]˹u5d>]˹u5s?19/?]WYJ+1I:RrzʭC<7J]A |Gs?19_ZC+E- "@v@=*C_<Nxn# %M̻ AqRPJR @A#뾞q=Y7~g?2 RT˹0$A0YIss4pAYX*I')]˹tZ_Zuiqż),.z8550!/?]]>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@w?..~bsP>]˹u5s?19/?]MEC_<SQ@L'a*O*O7ׂ+>1i^ $sW8=o_*+R5"^P+ȯYz( (8-gt7wyn6s=,sUGc$O}2rw$;u>cR(!oݷ )@V+ie>",=dU FCձS7?1 g8++FvgY&elw9JR+(X \nMau<}W-Pɚi~dBvxJ褝anp~]8[ڴ^!t. 4 PrTT2kk=Նѵs\5 4[k,lc<)#+?djkHԼ1@i>v¨kE]jW_gM?z|c;oSQY\ϝ_vm~W*j(|c;oSQEvm~W(ߕ .?c;oG?STTvH(qRS%GWK[ue9BS8]0iՓ8g50pYqߕ >i>v²5;M'E|euaU1o33ίw(erd4x#>i>vϝ_?o?"E@O;O+}|AwX.?Eϝ_vm~W*Evc(|c;oP.?EuG,vm~W(ߕ vc(];9dc;oG?TuG"AcQ 'ߕ >i>v ];?o?"Y??Q;O+"AcQwXr i>vϝ_?o?"E@O;O+}|AwX.?Eϝ_vm~W*Evc(|c;oP.?EuG,vm~W(ߕ vc(];9dc;oG?TuG"AcQ 'ߕ >i>v ];?o?"Y??Q;O+%41 @灀? C۽y)=\}rs랁M4m0?+>1i^ $\׮e>YbT?7ׂ+V)ɪXUOTIDL4PrqQQxQ$ 1Ӎ6Ķ:`]1,.vprkӨ_oos5˻%5Ca{6O &>28Mn ׾a+o+Z_؛h<ՌCsNv)Q$e ͵1Ζf\E+1CLlD?0=$m|Th_UQ_j`h 꿙 >о53}}W?G2j*/g(BŽdT?h_UQ_ ~о 꿙 9QP}W?G3s &B/g(@MEC_h_UQ̀ 꿙 >о53}}W?G2j*/g(BŽdT?h_UQ_ ~о 꿙 9QP}W?G3s &B/g(@C@01, @,n^2+TVEM q"H[uV.n!%3Z$7BM\dTn TMtJ?7ׂ+o_UԚ&ѥcV gy???dpg;'u|'?b*?zZl/>WG(Z,YO^>l/͟|u5d>l/͟|u5?#g9]MEC>r<_SQ@Ϝ?.6GPK$Ex=j{*"iz)QȧQ@Ϝ?.6GP>l/͟|u5?#g9]MEC>r<_SQ@Ϝ?.6GP>l/͟|u5?#g9]MEC>r<_SQ@Ϝ?.6GP>l/͟|u5?#g9]MEC>r<_SQ@Ϝ?.6GP>l/͟|u5Ess \8$f=yϜ?.6Go%z_4>r<_Y_4WN?#g9]fWN ^A8?3@F?΄ɉ#}x'VAcr`ٜ.zd׎cFI^Fq㿂z߆UTڇخ|l0gv6b)$Nu<5"^P[/5cyŝϞ=n9^M[{i_:!+vwXXgrncBd6D۰I|k=q\>@wy@TY2m9/>wa$|[N-2"vqXiuMU4-퍓X3#txʦIW=(0C69ʤ,vHBBX5<mŕӍiR;s9ƨ|A2O|V{[Z+m*+s I{ g *nMB M[  t{,淹{7lo" [arӂ3+Jl-h԰"n ~dV}w5;H?iE9?'8lzнyXЪI,fEST2wW9yk0ӠҖXNR s!s|ksX%[KtAoжrY*1wu<~\V'Z+ئvdA 2pXwؙ-$2R Ҫ\fKsi$ bѮvdxG08|O-Ư &NOib 4{@U>\ĝ(?A MqZG829q~oѴ{-DuPۋIQH@98բ77;6#s` ʭxK}OúrZ5qKYUi(ٷԓ׿7Mʹfɷ nqr7#8eV\>\j~"4m$(³@Yͼ>m͝+QW,;uud0WP3Q\jQ:[hDī*(p9=$ G5¬0+,%َxU=Ozw_-L_Uoֿ[֨/*d,RU؂)ho&/*_-L_UiG<2 lU( pp{{'eC2*nUbB:J}ҍ~BQk #<+p* Y2s*ԀYr{nI<1߭зs1Us:[ufh,N9*8Mj5Ϸ[4vABys/6IcJր)$;0P|sq`H\CMFvpcːp3:w}VZvw[G6Ȯ{oz[[Z儫qb ]cax礮oBE socjv-bApx玒K_ԆoђW}2JLwOLat|2¤lnAZۚwQ^-՝4ۚwni7QEdXni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7Q8Eni7U{CFi%hN\!<~WaϯҊ(4kVwƲ0\|fU?4_j6ascw/msC*mqF@Q@?4*XBK6I;1x- klr;\p8QGZPѣ&Yqs4I D.TcPѤ!iss O oG(XcƟPѮiwIi)(Os/ R̶6܌# dpOJ8E^PѴ kI|khk2FOuPѬ!hmK$msy٘ ###_fSDۣ{qA(}^ endstream endobj 1560 0 obj << /D [1558 0 R /XYZ 71 757.862 null] >> endobj 1561 0 obj << /D [1558 0 R /XYZ 72 720 null] >> endobj 1562 0 obj << /D [1558 0 R /XYZ 267.4 396.825 null] >> endobj 1563 0 obj << /D [1558 0 R /XYZ 72 157.688 null] >> endobj 1557 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /XObject << /Im35 1547 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1568 0 obj << /Length 1754 /Filter /FlateDecode >> stream xX[o6~У ԬHݨ(ނ+%-ƦcmJTË,J"ðD4yxn΅ /f/o2%,/e^qe\{~-r,~h>Y{Qi෢xb&.d!E#-9aο,,g_g5R">} 5̿f;h%w9}5Hc LoֹjnRBɵy}ȿ8{*~4|-KDav}J^2j[5?!R, \,9rNcj $cchhqo ]FRj&Gi,L5F60bQlV tiNEHt&~xnJڬQZy02`U䫿;Ja Y^~m)5]߈0 A} B.Q;'4N&BU ȣ~R/ @ABCq,/k^<X eĵ{ s>u^*h,qn~6HMHaZ pR}ZAo7]yFK9F*7VS}s.\v(?v6mi[D5~byVB0YF:>w Q9$KQ\.4'Ë)4Sh8?iD! ~ tR`Dy jI9,}0rpG!!MyB}oKb\ xguh|~w.6mƅ_XyYȎiLC cAQ Jbr1W^w7c;co_O ]x+on^^)$3Wt7ya:+ms8V5U-کkd!ɨ9ߎjH|s{YiG OSnjv *ǔkBto݈#mUU溄vľtǸ=schՆU_1No";vGJ+h \E8;T[\JQUU*}SE O"Ta~E|&[? !CLpe^V?Z)/5.MD j+\0ڹ> endobj 1564 0 obj << /Type /XObject /Subtype /Image /Width 363 /Height 270 /BitsPerComponent 8 /Length 10341 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222k" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?1ߝc}:%j)o4ծe6s) |\Ώ˝6rE˧_G<>[OLf1۩`M]?L1ߝc}:k(K"6\7Ac$3BP$Q Q zfP*=ĝ=y$٧f~`i? ԼS:.ow|/bY+ 6`RH96_n.dKC`0]R0F5]vMgזh-&7-&fWE< A biɨ|e47PHV-z~h?x4cl:Iy1ߝc}:y|G KY:ï ?hUNFsߚ:$wV60mYd$6ZO@c}:<~u|+3ý6{d!i$#ddO9999'vt[@;GoΛEMwoΏ1ߝ6.~tyQp?M1ߝc}:m\yh;GoΛEc}:<~t(?7ӓPyini֬Z~hǖozu|G KY:ï ?hUNFsߚvyבS>$16j 1̄F[_p9+X^iu*;$*$`$ddpq\ľ6KeM~>lvJ4gMf=~ɝ'MMN{7cWR2#^ J79{g%z4o1Nbq r2$9<{ӣ"fð'F>ݻ]gӊ͗úM孻ʉ@l etiKwͥԏ1"bNٮtj/ЋĞ#eloVZxZ7 Eʳ2i\9`zvqGi洵2܅ Wo: Jo % =!ȅ#p:}$ ng_O$ٜ6Oo~&N{5QO}~]nL6% [t[9So^g=?_ :+RT8.u9I80k\ ɹ 0e2qVSF" k!c11R͠YKWMEӄyb S8s*K&IVd)ZT$t)=H譾Z'S >ىqkbd$j A۞ +E둴;R`oVy?Z먥ƟcpϪj! RMCwP_ZٝuʾWhbj7Th_(QޣꊯWf/SQޣF?zO"(az_p4/¨пQWuE\>KNF?zO"U??)i?TQy'jT9ŽƶAY^4aZ(|_i$;;kXHR`A[X햲[8h?yϷ}o^zlvQƟcگ=?O@O}Sފ>[U@Y ~U>ߩ>h?yϷ}G+;{ʾ 4jg>cگ=?O;z(o{cOWqf1mW~Y ~U>ߩoEXai*{F𽏆[.Nᱷ0n_n>QNPv4I%ds3hoW3y#6]f-]5L6 (AEPEPEPEPEPEP_uZG:Ϭ ((((( 7:rRWC\#N\L( ( ( ( ( ( (!E:B?ΛquO@薮7jCa*QEQEQEQEQEQE5Yt}GΠ/8>z5T7޿3Fke\_濙z5s:wkqo,Z+f"ƽ}gPdS$+]B1A}~j@OGMTcG?ƫ` t ?t: %K:7^V#+.pO?Ut::?l?€,}~h}6?G@O o?"׫:?l?®A66GKR5 PMFo[)+{F[VJkh&QEPQ@Q@Q@Q@Q@Q@}oME:B?Χ͠YKWM\uDtԡQEb ( ( ( ( ( (t}G>}gPdd`pE7>|%ZSLoPEEa_S(G}zzK=Ǹ½rx1ӎQwk0/("E`?>|ķZ2M<$,c]Xb+^gF[VJkѿi땷; QTEPEPEPEPEPEP7p?[_n>QNP@s3hoW3y#6]f-]5(l6QEX((((((Q>uY7!;Ks#!?1LB+01+п'hB( p~fJ/ آ1+п'hB( p~f¬вT1^h 7:rRWC\#N\L( ( ( ( ( ( (!E:B?ΛquO@薮7jCa*QEQEQEQEQEQE5Yt}GЊwoʏ-ߕg`E;7Goʋ)[q*<~TXNQ6woʣGI(1RA8## Z7:rRWC\#N\L( ( ( ( ( ( (!E:B?ΛquO@薮7jCa*QEQEQEQEQEQE5Yt}GΠzSLP'֊{oܖHYr~8i*QC2H8?OLЉTʊ7Gsnwo^ib8}7 x.ߛ,bBy[^ҭ洚 9atO~\?/|\'֊)d?uFlV?uFYѿi땷oumaEUQEQEQEQEQEQE ?O)tۏ~S/~uDt͠YKWMJ QV ((((((G:ϭ?gud˪W) TM[&/*(տ^bտ^bbտ^bտ^bbտ^bտ^bbտ^b_OgE F)C 3A#EPѿi땷oumaEUQEQEQEQEQEQE ?O)tۏ~S/~uDt͠YKWMJ QV ((((((G:ϭ?guQEfEPEPEPEP Fo[)+{F[VJkh&QEPQ@Q@Q@Q@Q@Q@}oME:B?Χ͠YKWM\uDtԡQEb ( ( ( ( ( (t}G>}gPaEHȊ91XQOoF#?z,(?ף}Sш^)|ꎛ|D($<\g`#ѿi땷oumaEUQEQEQEQEQEQE ?O)tۏ~S/~uDt͠YKWMJ QV ((((((G:ϭ?gu>_4|_ip3⼸+l 29SڬcuFP)7u *U5(8猝~h%_!S=\@#(NePppXqϥIn62 Lzc0B@EYchԮ#q 2N)D$ Jes FB._ϒ! H (T$wzd$Cu <옙Y'~W]Ħ?zaUQmDP30(vk^+^toumFo[)+QE@QEQEQEQEQEQECqu6 :;y#6]f-]5s73hoRaEU((((((kγAYAM#N$%' տ5bn:3[T/5oE2sVVc~j3[P' տ`A[[yo@2sVQ/5oEm?֣1u?b`A[WuRͺLn%IWs[Vv|NB]~8F[VJkѿi땷; QTEPEPEPEPEPEP7p?[_n>QNP@s3hoW3y#6]f-]5(l6QEX((((((Q>uYֿה^xV^ni.nl 2:0H(g'^/:.t0yl{󜌖=~*6c0?12[O-ŵ4І$2l!ne g_xb9,t.c @GwH񴬥cm)Vm&UmJ f[cVomǻ _3a8ES]]He<qӊ4m/a[& w # :DЌY@uWFdЋlе &>Q U2w>as.?ڤVW&2V~A@|'5kyNeԦ0 ywN:qE־?U-Ē\GgA 0?8Sm-WZ!$]$HߏzD+hdHa˱*c~I=LCxgKwgxw1$Ti? *@[I3\Ui? (m'xrT-._*( E?Qt*"1E U1Ec|9c|<gs/T<gy(@_y(Q΀EPQ7?ȣf :db oBw endstream endobj 1556 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.911 695.338 251.256 705.833] /A << /S /GoTo /D (coloreditor) >> >> endobj 1569 0 obj << /D [1567 0 R /XYZ 71 757.862 null] >> endobj 1570 0 obj << /D [1567 0 R /XYZ 298.448 698.082 null] >> endobj 1571 0 obj << /D [1567 0 R /XYZ 72 682.396 null] >> endobj 1572 0 obj << /D [1567 0 R /XYZ 232.885 241.923 null] >> endobj 1573 0 obj << /D [1567 0 R /XYZ 72 154.097 null] >> endobj 1566 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im36 1564 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1576 0 obj << /Length 1800 /Filter /FlateDecode >> stream xɎ6>_ QZ&3YYE %WK&=e&qҠ&H}hp/W\)IcM IH(* ކaY,yB7W]. ;]AXIKE; ׅ|26Q A'cKz <6TS|֋J*/o*J7-zxUgUf*_u?}tJ:/3*G2%2NAx7\&sBHOԟ<,۾ͫR{7ZLkf(#D &+LB$;q O)}b"WB}E[3XLo ͠!Q~n:8M9"J"fj'0p@;1A[[^ܸZ$%/Wa7BwZ<TL =b5ms=6J!vs??EnշwrSd?%nzuD_-8襧q;ГV{)63 K) ;K5DdO%0"߃u;9йAh.WgFfRIFSA:[\!cW:^` ȦcfN"=EI,ܣ3b-J) àR9[fݎ5kNE[DXϴ iWe |A*0н`1N1i~;I-]Ic|$ gh[#) 2A;RgbtQi&^]4X sU1xu=^9ZIF曶$w}XAەo6nLKd=[}܈h7n苵= إIyp#F ֥` 35:ݩl̘LR8{P ۹!ybxhĩE6]ƖˡW}.pceo2C>wj ٘ڔksJr_xz¸DJqn?(Jj=?3MSS $79D/)duYh0떗Wh(u*d<p endstream endobj 1575 0 obj << /Type /Page /Contents 1576 0 R /Resources 1574 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R >> endobj 1565 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 196 /BitsPerComponent 8 /Length 12101 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? ԯ"XZ5H>]_Q(S_-YIXeo]_Q(5?¬:BQb֯NxIMokbdzf "hvpO"ȲȊP19'&]^ZA[[ U8!c$j9Uqn)cY#WGH Z3/\޻keZUF}Jt׉d7kx+<=uf;ny`8=b+y_M[]Kojr)B/j"A[\֣\ꩤjxp}0&o]V5F<<>R7 Fӓ߽(4ެ_ ?_ -5u }WYWȐ˕9P2ci;Lҽzʭp9 ;mP&EP̉.TѩhWZr[g1JHV$`p{Amy{yw˧g$LpWP9}#+uέڟu+Xm\ 3znVzH5 T mcŰzG!mafo{* 4HhKӴjٮtW0ْxaAx<ή :֪2p3p_YI]r*M,j4mqGN*|=lz4zv~zCas|FO\p{O]i_HD7ωFhAs]3h]3k;[( Ɠj2\m"E8\6PHK `2x5Gkm:7֭uоݭw-$*R7كlF[r7?_ ?_ 12:&nb/۾ ?x~l9zV|Ϥº^mr}K7rKקUu!7lO-yuHK;€u$tk=N;/js2%ݿ[Ωc3=(\C3HO ]dUI#ܪ.cq֕薚uw ෈ny$P4m;}wTT2:) Cjs\\^_h7IpO%NHžǭA][GKHHlW C$ZߠXH:&2psiz%iݦo(H A.׷:~9TkT!IR}{U \AO%/\Ip>7Dr=hQZ@"o FYT*g^TӬ![͏-`[ DŽuhx+Uk:6&[mF cOOv-kdcJH7~ :چ{-.-1EnwޗWncWkF @FkmlU/>5;l8mLI FF]uέ{7E<}b5POOZes[&Ę\NzwuέVqi؍1v@9'#n8=tVO.nbda099k5'Mh !$ gVuέdv>$XyI-ȗxz*fFwgV+=?M OsKw8}k=MsZ5ԃPo3%Ԫ䜏/ϧJœjŏE:_&E:_&E?uoM2_,H\I] V8##ME67˦?u?lʹYL%76`rچj7sɩa? ܷC]Ne)&w;W8!61ܬa[_ko?՚ES]VZm\UL(5v;.E(e1Ψm-j7F槦Z' 6'vsR6VKo+Xٕ2p70\vc~ܥ"'c _#g=)/K{Eý| O4u?sOӺխm.ټ'q.B[h8W)W o)=kf 빵ۛOs9$:`&"3MUNTf ~®V$4hKWEOynHcA5+I57Ӓ]12pצyu欇RXPJltK?h,+ Ao_JojgAVIB>q8Le&Z(Wu Z~o6py,dzgK6]q0'|- FneFP~uZ=(X8wk(`F)gjQWD)Kk`yQ)g+ҫGZ xY~4], I@ǩn]cixCi2Fw8ڟ4ܮi]hiEYi5e! JU# UCA<\ŵ.٘VH3>J府8[l[iJۤ%V>Spmo$#K1<j\Y@,r^hXY7cpq4`^ >SpOJŻ[0#Y5KDx?)JJV^_ CzsAFʦVDp;3 =G-`VA8&4g pN24bx}$gVt0bAZjpXIX`vW<Z)I>߃6`-RuF:Y~IdoWߞriNFYclx|_]x-\ q$c$䖈ɨjo+e ЃUSMM4]$x;leyHF9gR:i|1c'sH}3Cn┚^zm~#ɿ!YLQ 'ԑꖲRin#]6vv1G*I)IA!#Su#8fM7u#DfBo^1ҥJW׿o/.ypk6GPy<7ymv3~1W[SDPO;׌AN vT[mϷ֬nʹo&kLzb0{zQg]5/'e p RFgl <@$&5p0*玝Oc%YJYգsTSIϱwu3nR͵K;fMʌdU}^4k-M,,䑎aƉml"1k8m[ dg d4&b۳Hسl :4vЪ4"pֹۍ6Dhe{y#e`G,9ϥDt9V)4{W6׭,6c9azݤ?2U'myKO #tb^jVpL$ +V&esVo/$6( iQU2FYJ5ŎM6IJ2yjY6p[җ<-tt]EVؒPJ pqן^j;-F\qy6q? pUH#p~4Zdq'{s?/ȹMٳ[9LZXEVnN /70ҡiWo( o<֜sGIy~jo6J/Kԯvǘol*uÕ=mE j]Ry 2_~1v[ėW#E {$ɒA?1sz9;]VTo!%F dTup@,2ԫǵaz5͍hi#s8GVm#z@vǵJNfe w$L8ܹ#V`Qu=ίi:L3T@=kz-˧&Aw@ʼnIJ_ǜj觱#cd;`QT߅M%^͘=mڧ~ZUTKVk;QL z͎q$3Hw(aeI03]׋?dծ*"Ko{n–u$Z7W:4FHE@k4fMm9l 6?dubvHhX5&[H\:]s),q0TQt8 ~uh K{飶-эf6]ĖZMvwF@U!$tzkP;i5*-It5+DlmiHssW뀸L[_Zp n"ua('mkHhAݰl,y=1W4OԤ##ZTW>l&;qpwcϮ8ϥs zzy7pJFGZ.Gu66 }[Oi3.89ݼzd,l䪀1 F+EVjom*Z\3圠$uRMr-f{{9#hnٴ 曌/$/d56/ tUv Q|UeZ;H.+NLO<𶟨=-Vv$DF$C+] ie:ŀ`^?AJjܙ(+nZz #CnGX _òjhVk jG/$bx)Y#qGzQ-]_c/Mmyq-˕pNEX[ҥ=JUJմue;tg['#*JKŹY$V܅+2O9`U]T`4^)TXe cΡ\/\um9ٖ퀉F%>W#jvig=H"UFNѥ3Iɹlai'ޫMw)Ҏ{:i#]eQSetᶕo n$;&OǵdhEer|<_ޠ׶b%3[A۵z9Ywe>Ta-;G33rSSzZ#<4R+"# r Ma>6.bq7NA<~mkqg{e3NWl麴Q_ b]4nYG8ǿ Fњ6:ޗ[=ŕwI1}?qm*-*Q;m|FcT5I&` XaU<9<<Cmj+#Τ(- scMWw-5vF-kxN%P>l vn"9i%pRiA=($V Yw<<ڙ ?osnןj-wn(H=={С9)sE|[b@m7yqjߨE7n#Ϯ8T՜Rq 9o"m[lS 8p 4!ԭ%2$0:XN[:^.#= Phԭ/4aw&4Oj\evQH.z~$kvt~ ѵ UԺ @@k%ЭM2ԗ1n b\Fvh r՚rGtcgZgZ6a筿TKVjjjy (jԓza{|b$/!!psHZW%ɽMN8fбO+'3cNA3A0yFH¡BݱKLhuC#Sppwd[x;TY\ܙ,KPx6Fyj} TMrR-;N:󣨺eV,bʅ1eeԼO6ga#A幔I]njs݆,xF.^"0Ӏz$a5WNеkkBKR{KI!ͣpJo0QڙcJk?jAa%%FSj;@l}/<4*D*)/u*y8Ma-S$HRLBTsqbCet-KLXqx$"iHN P]x*Y:qK1Z jБK.џIԣM(H!P-t*mF<#/UnJ.4 Bxl~l{֥[DݴU!ceQԕ߹/2xCcZ 0%$c>1С?duy7+ɷp'dsTm<-áAa6m$֓,֓-P ?:E:_ sjnY,X*<̏2I4u;MZ]YJd\2AXUF`xcg ?ܰeY|`zVʹrksL˴.'})-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V9ojV9oit'jm3l-BxmuHTKVjjjy (6ZզtRZEb@8r]ho'KӔoGNz}+R7{qq FF'',/`8m 5ah/d&lTw| d{Q:nOmcwڢtӦU0HCI}ߩQs{[ 'PPh$X}ԗ~).&{(@0_ HOo5${h`8X# u*{lPV 29Rp(((((((((((((((((((((((_ǜjV9oit''*m7l-B8.t_[l_ko?՚QE0Ynjq?*(((((((((((((((((((((((((_ǜ5f_ǜit'LF9qЇ_Ǵ ,0qSickjjVS_-Y>;!ES]x\Wڻ+? 袊((((((((((((((((((((((((*yFkFwB{/~6?kn6?k G9o?՚mڧ~Z^|v:(ڻ+?7vVs_@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUkFk89SS%a__l?9o?՚mڧ~Z^|v:(ڻ+?7vVs_@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUkY6ԩzq `ToZ|NFY#ܤ= G9o?՚mڧ~Z^|v:(ڻ+?7vVs_@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET71uʓȩ9/֓zUg17E6nAI'X~SrmjĒ8;o?՚mڧ~ZJ; (`?*{Weg05T=Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@G7EԕICMEgCtS_-Y%4QLvVs_\ojʀ'(((((((((((((((((((((((((n_˄A?MU6劐5œY&; +!p Y{дE`\c{}k<#nab ݼjBG#>JbE"Sn00qn0-%{ŗbH&ko΀5|ko>m>5:UB@(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh94yI<$7&(G(oMsh941JS(96pRVVR0({$ endstream endobj 1577 0 obj << /D [1575 0 R /XYZ 71 757.862 null] >> endobj 1578 0 obj << /D [1575 0 R /XYZ 272.098 563.038 null] >> endobj 1579 0 obj << /D [1575 0 R /XYZ 72 529 null] >> endobj 1580 0 obj << /D [1575 0 R /XYZ 251.575 398.09 null] >> endobj 1581 0 obj << /D [1575 0 R /XYZ 253.986 355.305 null] >> endobj 1582 0 obj << /D [1575 0 R /XYZ 72 231.615 null] >> endobj 1583 0 obj << /D [1575 0 R /XYZ 72 115.603 null] >> endobj 1574 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R >> /XObject << /Im37 1565 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1587 0 obj << /Length 2112 /Filter /FlateDecode >> stream xYK6ϯm) S]NU*Y{rQ"$1HOC<;=B wY2qR/UR9;'N&^m|toW6Yѵ7LJV74)Vw|I tV3'=|ͫۛ?oHARB/cg{wrX M;CutBtg/Ƃ@L,)0'Axf.}:Eyajav^W:/q۝KxgOYޡ&o ei%J9@z~һ/Yn%#`;czaq$0QO,T-3g-b/ I?dG馽`Qx "֥<ƥ%Q؄^HKw.11fF/*%Qsd>]aZ)$#*uaY q}GZ$[u9M7g!G> ":55ȭz^wDmXYw4wDY~Pyj?*s,pZ/Ye*|23\'|g]F+%1*8_ 1!it, @kE.PάzD8*"`΂L XeS`yٔTyI?Gn'Sc@򳲭ii4 ŪM*0Yk09r0 =X4:n)ؕV,r-4 &maXl .xIq0#{MO< t"£B,ڎ!&& ">N8UjFрk෷,arB p4`Eۂ6xkT2_.PvJ8 7 =/Ɇ_W dePzO )=$s/lc)k1ы_iuYo3Jҏz/IWKJ'¹Ήӄ(VCOPPYG#x/` ,Cӄ{[HU,gQcњMxtfG]Zvdx.z0f2L3z _7Rl9 M=+G N_ M7!( ~2xza02.! xv#(ه --6"tǺ=YN&vI-o7ӤuD~2v>꥔:T$[ҟ}th,dy^X$αq dlCx5Spd*MHU\aF[6WzoU0obbagm=ٻj˷BXK>T˄1*I[H`O?<+w*H@@^}9QHA^Aϰ)/>2:x@*N)XbWq;OcPB)bJ?Sg 0W|x{͛?_U endstream endobj 1586 0 obj << /Type /Page /Contents 1587 0 R /Resources 1585 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R >> endobj 1588 0 obj << /D [1586 0 R /XYZ 71 757.862 null] >> endobj 1589 0 obj << /D [1586 0 R /XYZ 246.569 715.238 null] >> endobj 1590 0 obj << /D [1586 0 R /XYZ 272.88 604.543 null] >> endobj 1591 0 obj << /D [1586 0 R /XYZ 72 480.853 null] >> endobj 1592 0 obj << /D [1586 0 R /XYZ 245.418 356.084 null] >> endobj 1593 0 obj << /D [1586 0 R /XYZ 72 330.017 null] >> endobj 1332 0 obj << /D [1586 0 R /XYZ 72 330.017 null] >> endobj 93 0 obj << /D [1586 0 R /XYZ 72 315.007 null] >> endobj 1594 0 obj << /D [1586 0 R /XYZ 72 224.277 null] >> endobj 1585 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1598 0 obj << /Length 2645 /Filter /FlateDecode >> stream xr-T%$䐚g6Tf̖ Y1^}h[-x4Ѝ~7(QW߽c2H$< A*$nv%ɋ]Y*C[`맼Z(>R孲ǫW]Q4H`$`p(ADx&GD· >]*TG>zK xa,6ݲ%_CD~,mxw̛OCUuzIB?~{Чemv[8|n9M]uM] iDXk?p -:5 92Ӯ6Fb ۮ~xk|5NVl`*}jq9Ц8|Z%qhg60.#(o?N6q8v@ьH>)Ǩ D3b;}Flx2=}[T{Ys]Ls9:}94zʷ˺QM ;UU ڜ/Q+ɺCyл 3;s@lT9S(J+~{Ww*ՀzN, pt\ &97+"p401PJ:&xW>( o;n :=A^l _X}.wֳӞ o qg﫶˫Fj]>{9 84GR3P}5y{f] ^pG =Qƾ um]O 3tin~C`hƪ,> w8)EL[!0/*onۮulT0C+Qs7Eﵥ*CKWOyك9{9`6! ۈv' UOGTᐉ6~Հ" a4 QCjc9,u<.a/) _p8o,5nISlWv'rdꌓ~`Z=O;{8e/#- s Ҥ[9+ AL4ф:͖Cʴ:Vum !sKWS/랎Bo25@{O250XPwA^Oxjqo ~=%] ۣS>#je̅ JiK-c?>yCJ( f~Fٙ{,r}*IC9X?džw1=cb|weP%+0v L`6:{c~w҈xךŒJR1aL)<0<*I9 E9v<, 'pn pꄷǺ頼^1bnD+T{8Qqjg00 \Fwy5R,nԽfIPد WQG:FT?M| ,]lM*F@-6l!v?1h0X̋>:!>[ ۸rhI"' ccv-I#!siBPAcSēcUjW.kˡ: Vpk{ü^O"y"iPc`e뭽CjhW 7  (I#zu<_Oh(g_h"{t>^F4Jj0z2dN7{E(`),pj ОĿQYE`,6nBmn}-#3²?BX9`9?ʑfo$# #}^z.) 1+Y `. a_`[@=G'NXF:<:|C__qhxFMa+le 3no _~RW Pihaa m S{t! -=ݹ%^V{U&oR`ޭiB鴕͝c[]c` }._ i!.^FV}IK<9@)sn7?7A?^,I_4ܿ7-Յ\7syg,@^O` 2OW넱VS)0[L'aצ> endobj 1595 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.506 505.194 236.942 516.098] /A << /S /GoTo /D (treeeditor) >> >> endobj 1599 0 obj << /D [1597 0 R /XYZ 71 757.862 null] >> endobj 1600 0 obj << /D [1597 0 R /XYZ 72 628.19 null] >> endobj 1601 0 obj << /D [1597 0 R /XYZ 72 380.736 null] >> endobj 1602 0 obj << /D [1597 0 R /XYZ 181.708 246.881 null] >> endobj 1603 0 obj << /D [1597 0 R /XYZ 72 230.787 null] >> endobj 1604 0 obj << /D [1597 0 R /XYZ 72 128.947 null] >> endobj 1596 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1610 0 obj << /Length 1536 /Filter /FlateDecode >> stream xڝXߏ6 ~_a`u*ɿ7a۵]C[ :[hMvz~(%ھD4-<=Y?yP"i\ 8gq*x.9[enYF4tK爵 zUt&_=[>x /1x<@",*qø ^ađD,8QF4qhؘG) inL]M5=|H{RM;Ztk6}|~T/.¿ 4{X9Nfu?\&ՓA@Ϳ\gH}knkL+d!+6o o)FWw4 !4ÿv0_k(ZuvG;$Yx6+Y+gԻ}O)%ʓsMvT^vZsXsnմ>39nY`Q$M+S;tn i5uef?E0J*l^:YۗUvԍk ~FM=:-Ź\[xZk:s",A4 _ mi+(]C,iVΛuw˶s/Cwmqmrp fVʽ  =Igd[v֖( [Xv"r Ld(U]2rNTgI#Cf1y@'K TRD Kd٠*6 F4ɾc M']twSv0d (Vcj4tUo,RAew,O-4`%..[0 s& '(=WplV TD(¥HDd Zac$*gz':%nE_<O6/f 0C *7L)w_hl\ BL>kQ̸W>Fyk hr1yz"gcQӦ}@D:cW]vm,swװȁ᳁B$RK=Q"펎",[ 譢HCڲGrv.vPi*=/3GQcIwH3ob$HDu4BnKQTin{*l|.*2DFO`@u@Ȯ)@p"?0>/74g)%U~8K7ޑ\-`i~L%KVM&Nc;  1p8XíVg-OftaO NcwaA.i~SHsv|Glos~zuew( gǴ}GC|c/_L8['>Y'!,>zڷEȿ3G<y$pE`".oiO>( ([DXõ |Vϐoy?{SU?.D endstream endobj 1609 0 obj << /Type /Page /Contents 1610 0 R /Resources 1608 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R /Annots [ 1606 0 R ] >> endobj 1607 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 360 /BitsPerComponent 8 /Length 16668 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222h" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?oE}]U r+ԯ!\\Oo 2s*f1ڼŧ?U'*ͱX_$.qVSRMuv}E=[V*KƠz+M|+⥅]'TX9I ϶k|e~<[xZH_kfX ^sE׈58 `Se-滱XW.H3ǡ()4cž'+Ec zpjfΏ4KձIZ_-ce #+d/?_bo&@?Amk޹W?iv$?ƽx-{6ZڤꭵZ0b,W?'5~5ƷE }A8|=h[UgA>T6pH#GʼnX?4;Ŀ'4#O_kVƲc>m;B WIp9GʼnX?4;'4#O_kVFຎ]{VIQpH3Qb?MD|I@+W\Gnְ&Y`p6 uim+ݴhX?&vx">$?ƏD|I@+{"[Z*ŭk>v6b,_W?'5?AmkޘwdMkWfOQbWGʼnX?4;O|K@I|r^ k_/z?,O1d KĿ|r^ k_/z?,O0ɡݞ|/^?ֿ=^ k_XaC<7/G"^%?ƽx-{?ֿ=X?&vxo"^%?ƏDK@ {"[Zx-{b?MDK@ x/EG"[Zb,x?//5_AmkޏEGʼnX?4;//5D`"X(5AmkޏEY>OxG2҃l jOD͌,lՆ|ErmƁA*i`;n#'X^ k_/zY~?_ihf9)c5CkUKt1v)Qx95?AmkޏEYVZR\_M֎Uiɩ.zv<:b~" NK93?SҢ7:=卜[$,8W/zf_W/9WgUUTSGNSwWO6UDqmY?U 1ԯM<_-j)‘'wi m K܏˻ ICUG;5G#??ttXDSӧ$I Je"1ұmmsqrC+ڨ -U~V7+zAT=sAc 9XAqeysKl9dn,'vT vY6Io%l GsoWDs ?\wX?jtɧntY@-+.n'P;1yMbX"xrZR!ci\wX?jt9ul] .Pq :4: *` WojRͮZh׍a,rA?$2:nd`?\wX?jt9u{ ;mIWyo8! 8PvkcOR,^-o$XMvF%h%#??Q΂p6p_O7" @~rv:Vo&mZ(ngs 9C`Oo,Rming&h4H6TH`sTluh- JJ^P"* eI$ǧJzAT=sAc 9XK^ZE)KVE`xn##4R=~o ZYK!M$dSϖ79;և#??Q΂! Iwf.k F20k|:H5=M]g{EvA3v윎yu\wX?jG;5G: tk6KeVV{nfLԡӬlm`K{-UAFcyn\wX?jt9\N̻8I~2]s9sdGI78ʪ Ns=sAc ?,VԡԦxqI%X<;v*F7d="H#e$r# _G;5G#??Z֮|= Qn.p.gww%vl!IFBTpF*#??1_ 9Xm&Y.<˪2qv]IK8+!r8[?8^29ϡ_?~p?gAbzz3bpOA]t ݳK_?"֭>w֗WW(<+4`'|Zvq[Ke]ܼRa,7K'Xo֞eWԌ7bK i'xdE.W(ÐNbzSX_۵^ƏIw.r^VF[u9eC)1R8? [=0s,mP#ʒ A#qnt?'Qv>rLU;#.(H ?4h?'Qv>rLU;#.(H ?4h?'Qv>rLU;#.(H ?4h?'Qv>rLU;#.(H ?4h?'Qv>rLU;#.(H ?4h?'P<<w%G]qP<[g@96_Uo'3yݝwuϿZtǜ/X?g|콾Vÿ;:mn/*!mFϜ/G!2TKt#.*Ce;A9?&_* n\[~ECe;A9?&_* n\[~ECe;A9?&_* n\[~ECe;A9?&_* n\[~ECe;A9?&_* n\[~ECe3^旦ikygGuṁ9H ?׵OLvky$\ەSc: $ ZڌD`vT)e zVBOb n hmH* <[zb+Xb $:q{[}1l=\\執j-Mڿ wo+D9Ϸj-Mڿ wo+D9Ϸj-Mڿ wo+D9Ϸj-Mڿ wo+D9Ϸj-Mڿ wo+D9Ϸj-Mڿ wo+E.s_P9K}>^c88vBQp51clݫз}6rj-MD+۵&Q_ G" ۵&Q_ G" ۵&Q_ G" ۵&Q_ G" ۵&Q_ G" ۵&TWk-}D3@K@HW'aWQX-}J#ŻIyue@@OzqsWZ؋[jM#ʃ° >o?I`4@o[RW8㯨30sFǭsW-八L2ZGc]%AЊ/ y ,^8 ʤy ,SG夞br 6z`oZuyݟcD7?hGBi{ס(0(h) (((((((((+ξ4ȏ}_GAj??q-tNeg Y$XͤM{#$dƹ'|[VVOBW{H&fp[afUr0]sY *Ok2KQU[x<;q >4r!*?҈4WM2FcMBqI(Uo¸.ɭ/G5%"?*EVUpЫMoI*>ɭ/V[sT-c?Z ⨴_k2K1QMoI*j3kտg?E4*[_k2K1UEVUX֭9-.W T}[_-c?Z Z~oQiw ddb Ukkտg?@V]pЩ#?~|W~`o13җ UVkLj;lۺ޷lsZ bA5%&C$ZZ~oQj3B5%&C$ZZ~oQj3~ɭ/G5%"?*EVUpЫMoI*>ɭ/V[sT-c?Z ⨴_k2K1QMoI*j3kտg?E4*[_k2K1UEVUX֭9-.W UƓ^ưkM91inX֭94Xt0^Zjk2\ہgRdR ҴY!.d64W,M#>B~5x}6x;@!)a<ɴQpGYg_E`[&,֭ex}^PN9'\TV521+t}h-`ܡ(/WT?p;. +?t_y_ QEظNaOU|/<⨢\'gN _*]>WTQG.}bp}|/G. +( >SOUQX?t_y_ Q _*(v{T|/<}|/Eb;?*w]>WT?p;. +?t_y_ QEظNaOU|/<⨢\'gN _*]>WTQG.}bp}|/G. +( >SOUQX?t_y_ Q _*(v{T|/<}|/Eb;?*w]>WT?p;. +?t_y_ QEظNaOU|/<⨢\'gN _*]>WTQG.}bp}|/G. +( >SOUQX?t_y_ Q _*(v{T|/<}|/Eb;?*w]>WUDxKa` 2$#> >> endobj 1611 0 obj << /D [1609 0 R /XYZ 71 757.862 null] >> endobj 1612 0 obj << /D [1609 0 R /XYZ 249.886 326.3 null] >> endobj 1613 0 obj << /D [1609 0 R /XYZ 242.48 272.501 null] >> endobj 1614 0 obj << /D [1609 0 R /XYZ 72 256.407 null] >> endobj 1608 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F67 187 0 R >> /XObject << /Im38 1607 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1617 0 obj << /Length 1197 /Filter /FlateDecode >> stream xڵWs6~_Il:I CsMr3mk9poAp΍$ oh%t19]Nޝ3<9A \- geng˹ ,T>_0W,|ewɜYZ2e:f?/?NΖ&4D@]vr?"-O-kn&OH͚!:;Su^DvA[tCP({/A{ 5ZsE IE&:.B.CHuKpP,zTQ!Lo[5&YP=`YamOC? ˯_Ss8&Ε|>0JEEVB*YMg ]~J"kb[L: #Бa$[ NG)`{V^e Tq7i}J$[4QG}Ju1z&PnhҶxsQI@I| Z\ m+i?8 ?ȉeU9?{MFXhIኢҲnD'ǮN,;7>CE@n¿nk/S*?bF-]EP*MJqIT\5ⴹj]$ ,-;4V|]*KMKd1\osftӺỤؙ/*6 2+NkMuV,N 4{jWE2ALE ' D@8vUMF6SC`TREiնoe+|<o_>tz?p)+ : +O6ߟhJoul"#Ldnu*A^BX}M4)t*D!3 &b8g-o׃nLr VK}5 wۙ֘ >thZNWqh3CQ2v@Z(WM]u^\5/^&P;\]{(̰%Z䁑=c6 >'Eb[8$I9E 9xaØ c>g26)S>꡸ߺJ‹P{-|F-+. endstream endobj 1616 0 obj << /Type /Page /Contents 1617 0 R /Resources 1615 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R >> endobj 1618 0 obj << /D [1616 0 R /XYZ 71 757.862 null] >> endobj 1536 0 obj << /D [1616 0 R /XYZ 72 151.192 null] >> endobj 1619 0 obj << /D [1616 0 R /XYZ 72 137.254 null] >> endobj 1615 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1629 0 obj << /Length 1846 /Filter /FlateDecode >> stream x˒4_ᣧ*%n@j) JiYfn@f,ZݭV?Ńc﮾]]Y<I Rq\"x6[]f+,yיF?zp 5ѝqLhW?"ʃ,ip8]8y!o] [&len"f @GPaw6ǂjOz 7EsnT7,ʚ+>:fkgXQͩ{Ac];  >$$Hmiz5MHvY`$d{. G:HsLJkb:]p9S|}syp;\uD3/d"\4uuyZ'b* LkA |o~Fi"gYlU2ȑqԚn0!&Z.l8VXE"`b퍋-$dL)|,̩a 2rUcO9H29Fi$]\fN8PiƤLnЯo!<-"8KyNݰ/PekR:"` 8Q#:Jpw_vѠw֧si zly4v$xD ف9l n^btX@M3yl0e|]t|ǚ#sl<) J O 1х[GȅEִƘrTloOI&7e=>/A.Q,4njZ9c<W?4-bh& ͼDl Tr oڵ(&~\U>%zSĞ'\ [`_zЭ0YuɋgHCWȋ1tKՑ1BDs_I6rf݀Yk%_B endstream endobj 1628 0 obj << /Type /Page /Contents 1629 0 R /Resources 1627 0 R /MediaBox [0 0 612 792] /Parent 1584 0 R /Annots [ 1621 0 R 1622 0 R 1623 0 R 1624 0 R 1625 0 R 1626 0 R ] >> endobj 1620 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 266 /BitsPerComponent 8 /Length 19971 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?x"kX4JI27$R}o\SA-`Q٠g?h?5-2/A<3jq=JGf]n`3Ʀ5*&'٠g?h?5:h庢Y(uY$O16Zܟ~G>Yk3h4Y??? CCAtIh?4}GjU!Q $4>?ƣ5*}gP]}fyQc?G>ATr.>?ƏA< CCY??9dDfyG٠g?!QjU OA<3j?}gP5*Y'٠g?h?5>ATc?G,3h4Y??? CCAtIh?4}GjU!Q $4>?ƣ5*M#lj חeIŠ-} 1?PV$:"끟U9^EIqH %2?xG٠g?Ss_S/A<3jZht24aԺJBG*WϳA<3jZ(}fyNxewHQ*rG8?⋁٠g?h?5-\?ƏA<hEh?4}KE/A<3jZ( c'4Y~v_\㵼_;󘙸]$uI6ݕ·3h4[xƳ~,EçnTOKu%I'rHA'NpqQ٠g?h?5oV⳺x#[)%f rXH;*kKF?GE%xYJ.>glTlfyX(n/kK[E+$P2YwIilʃ/<˫4)^(?ƏA<ۛ.6я3ݜ}{VkI<7xgtKo dqz$ٙ}2XcUJ9_[)u9簖UZяZgV? Rmv?X*ԳΒi,R-B տmv?K_أ'SgtGc/ b.х Abswcwy:F !v搤;ڻC=h{}.fŴ{fvc=-"bw,;Qڹi-"P&Vbȶ)I?1v%܏0PզkpQ'KfF1nXԩ\;2ֽxKآs6>5ULoeTeW0qs$Uey}s4 rF ?xW]أxE4=:|V'MB7>K`w=j[%aQ~,zyk0rTxG!b硼EiVvWWqc?."ۀxHxG!b[+Y M'Ъp7rM K0=AfmuGk,WF0 ʯ~}+)Ǚ}.i)_ce%嵕гvafSz@~r:KXAj4ALW N.r?uS{t{f!)k KIB1DD?/Q?_ثqVFSjrr96X6v[m,20j'V? R'h?Kk]#$H[!?Ȥ3(# Dk?"2?_I}&K{ )4Cݶ$hgOo?Ə=?ٿc \P7 J"1RK=*;K,f cx+]:o=?ٿCr?$xM{L+"*4 *7mqn\A < Њ.zϳ 5u=@@˜xM2:]w78.8Q{(/ F,kdo7q@|\ ns[hX}OOo?ưu4KyU\I88X"k\kkGmH|~Gy>|'7\j,2kI'w!imztW \H2yo~gEXUG}Ϣ(UGEacCVQ+>.Ƈڭ?أVV}][t߱Gڭ?ج( jb[t߱YQv4>o~jb,h}>o~gEXUG}Ϣ(UGEacCVQ+>.Ƈڭ?أVV}][t߱Gڭ?ج( jb[t߱YQv4>o~jb,h}>o~gEXUG}Ϣ(UGEacCVQ+>.ƇPscS$ӛJ) OG^VVcC8U~ @?.֩icui\\ *r[TK&RQWc6%5 kǃ1*3;[n u$MAc?@N#~Ι'm տ_K oD^ ?t[ JjAZEivviʹػW% 2ORO5?¯x sCot-.4QGWN@53\ӅMUbϊY|'|$m>_Si"ʸXQo/$F )VVX6Bz=QD}+x#pIJ=pMt7doᘭ@t?(L6vиEϽoAZ?Z>$ր;b'عrvŠ%ۚ@X=Pl'.ah܌gg>weiUC<0*`F@z~O$ǦxH1(HOGbdh9`Ғ^׏Y:ͨͨZܼ%(x& 8L֙/*+دd˹2qo? 5⇍Uh Nx 7Jlɝm pjw~gEh'!Vmq,GP>Q[x,}y0up=3KCl7ZaZ{DS6Q}.['آoμϢ>~t}/V>^([ +CQzGآo΀3Eߝbտ:Ϣ>~t}/V>^([ +CQzGآo΀3Eߝbտ:Ϣ>~t}/V>^([ +CQzGآo΀3Eߝbտ:Ϣ>~t}/V>^([ +CQzGآo΀3Eߝbտ:Ϣ>~t}/V>^([ +CQzGآo΀3Eߝbտ:ϭ9ԧB^ԓi)b2?_-U`Ygm6Ɇo@K`{^ @<|_sg}dŒi)Gp3z̰J|Ϊc7Jv:qePicY gm' `](}7Tu{Xu,$~8aNiʽϳҨO%ғNsb.v||qU5+{k?w2iv1@ڥU2pGC[|GfO—oiYM?m|Ky rӁz+{Ux >\p=N)5;д 8`6~^Ž'I?wZoN:޼YnI,-:k?Gxn)G+7v7QO3Cjd}/Gx/SǼ_OL((((((((((((((((((((*)կtC-E?b'#e+7U/4sB "f55erp^$W_ @&4Fsd֧>~(pݒrZْG%=# 6L#$7O5Yqp2]4IrCC:q[GA>Гl壢Q kjms@R|2?}iq-b-wJKP*x w+%X}8=[R?!Piahܗ ^Y$ԚuFx?)67quo ^ynR1ocgAFh0YfjηɎ= H r{*u4uݲ͊=[ؑ&f5ӡTYD[T `>r&SʃMP&{`G (&OA=eZZFd{me \yl>P#p9GծI ߈ѭ-}x$2?Ҥ =;0kR7Ė8^>|R8Q1I.V 4Kvv\d`͸LՋ}MԖѳ<1Mt^8YКw=ɒLf[cq0W{2pv>t}zuxed|Rvv}}qoK"^B 5Q<%gwh5LtJP9%,s'}(k+ٮ%0As(-ܐ3jkjSER_l3! W3\:Zkimw:K!l~v(*r# ){vmYTi1F򴗶~8a |+Ӧt˼KXH2juaQC2]Y|=*O*4#c(RSϿE蚍춶mi(hVi" Xco%H`08Jz](cp\p;ې 'IcI#YS9nsiSi |@ U=p*=p* ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( k]#KQO  зbA<.pgγAײBRҼSϨ^Aki3;'pݒΛț~(&? WԤؼgPtCC=W~S#O,07vgҭ%MI2 899'Wa77|/T7P"\9 x{UڂJDЅ M@_ |dsQO UK۾}2Z?}ĺ֕XM Lʦ5x#k;8<;5߉55šD܃qn22,AM?r JILzD(2JQ%F9#\`fi[]:+dl? $g4X wI:T6flU;gմ %n~Qz,(??*8??+Š((((((((((((((((((((ZH1RS_)b2?_qi8+ǹdE{yr6dYFw-1Ɉ 5pݒؤ:ٮ^T)ʣ<F~wϗ}%kY-y57ibdXXUᶷa,> j6Km@acd0LcIwyϤCu4%ͬ՗ޙɬصoi!h29SU+]B0>__Δt_7UV[+}>u!|]ĤW=Cu|/y-W_jD8 "zlϤCy?z\ O*9o^*-Ʊ<0 gh^=h~.~5¾x\K{ղ{fҬqk qjV4nby]R$ _Ə>__F}~y|I,RѢh#k{xf`%[z ͏ZM.lm,專Ƞ2(]cW]ۏ@IF]/O/63ZZ]G,`3.ٱs\@5i]iܵRBg` `(TTaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQOj)կtC1?{/SO[6nf ȠAo)OyѬ00#ӳ-I`fG-+HvsܐYEi'u1t'#9A W`ݳYڗ4}0[;M<X'I [=-3;Us°xcN}F=ĉ _icgi]HR;*?أQ+??u- 1Ik*Key>oKҭoOus>$2+9U~o~gbp'˻4 /me J 4gbp߱G8Xm|q.w\Ջ6v~b- 5%Fq0xfg0 >o~gbpg}v$[Gk5y,ASd`8:u#VVMWPP#u$'ݜsskQ{( V-gRG5\//@aoT (k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??oح?ʏZϼ;mFۏo*+_VNq=amQz~}SXTm߶bx*>k>TUn??gmOS@$CFy$UU#>Q?b<"?#mImv?J?6n4qpdpQSM[cm;HOh[ֻ_,: @G bc,-x.[mHw,Bd98HFţ TkYndxy $`b֗5KXaS~֬y c`ņ, Q`53#6{Xd7aW>Tvd>"Ԧ(`Tr)A~=wK{xD*R"7`.'sc2UAuF. b*Fҽx5pI3rOj_49'5/?cv"7<YFHH[h8~sNJ,n^+2Bhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sS9Irhr_j5E.a9/5???MnG* _KAOO&G%}'[Qʂ#sSbӍ>˛+btLќ7sOO?oͨZH1Y-)S>gr?Ԗo\SA3j:%U[Vlw.,I>O` He*z|wqZ=CEwB9#Җ F4dw1G*g;AN(V[u@lAfqV>޿?`1E.,m@&?g/:[M7Xd) ޿?3VQ·@O(}޿?o_·@O(gCUrqo_򏷯OLgCU3* 9_pOGz3* ?i~\z=SS?i~ BW.?=SQ) BFt?ZߡG+(zTFt?ZߡG#:?У zT}g#:?УVQ>޿?3VQ·@O(}޿?o_·@O(gCUrqo_򏷯OLgCU3* 9_pOGz3* ?i~\z=SS?i~ BW.?=SQ) BFt?ZߡG+(zTFt?ZߡG#:?У zT}g#:?УVQ>޿?3VQ·@O(}޿?o_·@O(gCUrqo_򏷯OLgCU3* 9_pOM7"`@ec R3* QYiekXFgIť'}M\_(Oj'V? T -)S>gr?Ԗo\SA3j:%ck͙egg]A)cj٢?GiEŜW]Ja q<4C-djI&UcdZF, QN2y.(xp%@2g^x7Kqz-u4o! tR@Ԟ]vkG糆!F\rx:mps?Y?G$s Mz΍~uIgOMY?G?XQѸzιI,K?{Gh 6?:7Q3 %=#4IgOMAc=GF?:$&I,,tۇ=G\$ %=#4sp?$& nps?Y?G$:m~tngK?{Gh9Mz΍~uIgOMY?G?XQѸzιI,K?{Gh 6?:7Q3 %=#4IgOMAc=GF?:$&I,,tۇ=G\$ %=#4sp?$& nps?Y?G$:m~tngK?{Gh9Mz΍~uIgOMY?G?XQѸzιI,K?{Gh 6?:7Q3 %=#4IgOMAc=GF?:$&I,,tۇ=G\$ %=#4sp?$& nps?Y?G$:m~uZ8> %=#5jQPI >v#wNO r Oj'V? P7sOO[ǝqOR|ͩ-)S>gr?u|U>ϧGM#}_3p/B`igl~ez5+"mV%6,Z?~W}F],Aio=*'=ymj#\aNNN'3ޗ/Mк]] @7 1 s]ȵ׵9 ݲgSd[), +ߵiiZֱZ\vsƐy`FgIMOfD:kzyG9}./Z1@8⋠4(yQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>gjT])jTyQtyQ毿E毿G@>t5}*t#=ғhOj'V? P7sOOo\SA3jKo)C$0YTzޤz:5'KG'KJ%$i4$i4⨰QyϴTyϴTX h?_?iQI>iQ`%$i4$i4⨰QyϴTyϴTX h?_?iQI>iQ`%$i4$i4⨰QyϴTyϴTX h?_?iQI>iQ`%$i4$i4⨰QyϴTyϴTX h?_?`Q;_>k>߱G(\0}(v}}bP`QG(C~pҏϴ?Q;_9BFchأvrҌJ>k>߱G( >}}bϴ?Q J0}(C~chأ.>`Q;_>k>߱G(\0}(v}}bP`QG(C~pҏϴ?Q;_9BFchأvrҌJ>k>߱G( >}}bϴ?Q J0}(C~chأ.>`Q;_>k>߱G(\0}(v}}bP`QG(C~pҏϴ?Q;_9BFchأvrҌJ>k>߱G( >}}bϴ?Q J0}(C~chأ.>`Q;_>k>߱G(\0}(v}}bP`QG(C~pGv턨E B endstream endobj 1621 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 310.08 177.324 320.864] /A << /S /GoTo /D (specifying-columns) >> >> endobj 1622 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 292.147 162.829 302.593] /A << /S /GoTo /D (managing-items) >> >> endobj 1623 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 274.214 166.176 284.999] /A << /S /GoTo /D (editing-the-table) >> >> endobj 1624 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 256.281 177.225 267.066] /A << /S /GoTo /D (defining-the-layout) >> >> endobj 1625 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 238.349 178.39 249.133] /A << /S /GoTo /D (table-defining-the-format) >> >> endobj 1626 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 222.334 193.493 231.2] /A << /S /GoTo /D (other-user-interactions) >> >> endobj 1630 0 obj << /D [1628 0 R /XYZ 71 757.862 null] >> endobj 1631 0 obj << /D [1628 0 R /XYZ 285.926 414.732 null] >> endobj 1632 0 obj << /D [1628 0 R /XYZ 72 223.33 null] >> endobj 1633 0 obj << /D [1628 0 R /XYZ 72 209.393 null] >> endobj 1627 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F62 183 0 R /F31 125 0 R /F67 187 0 R >> /XObject << /Im39 1620 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1643 0 obj << /Length 1934 /Filter /FlateDecode >> stream xڕۮ_@/ҧt 6@4qPIPȴF]];ád 6!g8w'DŽ'lۼIJdwHdI J/n[oH% ?#;nOG|A\l"9˘vn<Ir'yo<ۄ3YK:'06ɏlRj)RY3.sx@i~f zF]߮"niNұÎ->IY?oݏDpȸ>^ ``ԭ=Ge ODTpr\'OԚ|X *}5\ڪns1@p4)])=zYL9+eF}*pU(L׾M :ɺ脭}i94i:tpȪxd 4ݿ&֏3brZJJJ3ciYTS,\QpSvchh^Eʤ4 Z]= yd9>O2'ja\|7L*$ uU'bNi8.6SS1o%<~nyz"%nP ?OI9+n:|RJRciWRA8Nۨd|S)Gq yvwP(hSgANe;77WE M=+#5+/|@l~@JhEګx5䌧T19h4cFߒĽ<ǒ _Lms P:> endobj 1640 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 360 /BitsPerComponent 8 /Length 18303 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222h" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?.UM<;iOkVFv s'1XZz1P Oju .Jͣ{#W^:R=.Kۥ?)ৌ䥪2 `ǥéE>vT +a\Z]yyn!֪xj-V5 m3dKF(|+K@ p qGB([KE_<XTt̡ߡG_m~V^hԆwL #돽uic&a $Ʋ1pG^:դMHFm]&Uҋ|УJ/Bu[ɧL[v2E3Fy`Ճ@x`x?b7Gm>Ll˜)%JOdiE>vQߡU촭GS>auw I9p8EwcɅ;qsz7{6?;o(ҋ|Хд+{R &8(Lc͎䎆o|Y/Ye.Yf Ǯr~UiFN-ߡJRKG_m~Qϝbm}V/-lX Cc9;FqW.g4闐KpaI`ei :z!VmBT'/_m~QϝsQagt$`:u9 ⳓEd4ƻw=ErW!V_ P]dQϝiE>vStU"eMl+۳#3-ͦ"4mFin^'qV<[5%|Q2_( ?;o*KG%Or! ͝im=u m|{Z\ܷekٖ;o(Ӌ|ШuYa/-Ȼ+TgNǮ)JV]&[z .W,z|{7XӋ|УN/BMUK/5q\dG*)WӋ|УN/B1F)rqϝi>vVf(9M?8 ?;o+3bT_m~qϝ1G*SON/B8 )ߡG_m~fbQʃӋ|УN/B1F(Aii>QZߡYrQϥiE>Vf=ǵ9M?( ?K_+3cڎT_k~Qϥj1G*SOJ/B( ǵ)ZߡG_k~fcڌ{Qʃ]A18D2Mn TP7\gsn=.>Ʊ*?x?b[==] +Ij0HBrl:=k}Nk{/ :e?%RUH<*k *@Ҵ&ښ{]P:Uy%M+۲oTz-!}G^(_9]ŢW:hogfD*=zO IMjw7vyr&iPXcj9r]<41&nDn J;gns8MeO:~[$~㶈q5ћ!iϧd!Kj@'b?,[.b){Zi^ߖy?Umƺ,G6!B@߀0x8Ȯ:|:U6;g0 Bp 'v?o\- X겼ڮe:zVQ[4p0^ۻߙ[2pA]_ay <\gZ'K@TQ1WB j_Uzy^5Z3Jۯ|4tڸxPuaW9C#I=qOso:ƙA5ƝvJkI4LPecxb@SxLqnB/Ű݇9^? yB<[@s1T T:_ p4"&uimo6 B0n r9#]~ INu* 3G# s=8#ſ?G!-9t_o&K4v՝ROt>r@e(8cFYW rwz/t[khM)'c7[G0F$ g#ſ?G!-9$ەdM=WTsbJ4kt}k&3FkZ-Q͵$t +;Xwv6|2U٬f3&2@ݍN!-9?oV*^~k~1{=[Um\ew˱p'篨W/._i#V!HᲑ"b9%OL_Uxb⫮\ F|՝koc1PZn}K<kh] `c1͎I{KsFS wƈ͋YckڲoQG&/*eK/Uכf-;?-t嵓O&LP|=Gq ,2 /{w!-9OA[@c1T,+{e!nE=(IZ|:V mk>$3`ARzp7SڌrT s> L_Uta`hI5h²Պ AL_Ub⫳C?c긟qy G? &/*A[@c1Th`~U#s4y?A[@c1T C?c'sA5 L_U?q? AL_Ub>Gh tbſ?G~A\O?y'ҺOA[@o&b>Gߒ}(Ot3G -7LQ}W9$QJ?of/*A[@oC?c's~I>_U3G~A\O?xn}/ы]'vҍrkm|([|y-$tauA |5b}9YOp=T-UnuVV4z$4[nm@0C}1۽7B}e}[HGu. "xwQIw|Kn'=5T^'2[{+ 5{ic̲,`OMVnUI(%>lmH0KƽxjE#xW]n%䊘0Z˝*_irmb#]Xi:_ڭKU>[e鑞X+%ȺB _>?+v}?6sRx̑|_;`^'Նdwo>*)a΍zsY-~oVk>VWlqOlۀnW}Xox>?"izNhrk h N@ø aq5*U%vƞ&:Tc$.xCR-/:9+ԫ;˃ l(򎠢(((((((((((((((((((((((((((#ZOu?INLlWE󒻝 GVcYwA9T( #(TwxjCMwrT~H'Wc?S_j?(;9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T9E9(WO" (AsWO"E9+T2~-bIp^CnO$ԁ Ib9_ܠOSy| W`I(OSEpT"y|' ׵`YOSy| 7 :qå>$OSy| .͖fL6ؤ}0 oA4\ZJ( iq"U5yNg.$9.VF<;[w^8V8J vA:ҋYV-< g2Aǀ;qy|}iY*wLᧅ Q>+w3~t]Foε^8|G!q+|~bFO߮H%u#rNwJK-p\XV?.#7G%f8FY%f]ߝbGpȃ5]ߝkZ(}f_kw3~uEQ"ckw3~t]Foαh8Am]FoΏK-}G>WK vA:Ţj1 vA:?.#7XQ? _6.#7G%f>DYoj,-.ef,8BGQ:Ou?x~趩>:ǎmsҥ Y8YYR:<;rw~h_<5!rצ;E?z/7,[Ykq# /O௟(((((((((((ϺX>;t9c(dbX#q8ZW_3PVrJt? C NA(Zע̏Jt? Cׇ|t':?xwOӮY'O~h_<5!rצ;E?z/7,[Ykg0_?͛QEy@QEQEQEQEQEQEQEQEQEQEu}4 Gz}:`i=b(<~tyF:)]'/oΏ>_ߝGY:k&p]ns0RW Qž~R o>_ߝ|ѿ:VH^I9/3>,g˴.FңZ$= e_(O?~T?%ocF%?[g1BA_ UOl'[tT@̭˷1'zMOVԴma{Ζj)nZu^XT* !V]EnIz3z6oma|kHJVHlPĮѵv2Z\؈~s ohB9|<{RI@ ( ( ( ( ( ( ( ( (t}G:Ou/G:o^SI,'4Y/9k|"ſuFy?܇^-50_?͛QEy@QEQEQEQEQEQEQEQEQEQEu}5}bד1~ݜӒ;+J`j Q   H#nOE!G@W(?ZPG$7U' ? ?V   H#nOE`\5m.,2ַ0 [b+/[g1Mn#+rB((((((((((Qþ:ǎm{μ;x?iס_K0 ~ dž?Zȱo]gѯ^e_<5!rצ;E?zy*|$,'WfQ^qQEQEQEQEQEQEQEQEQEQEgCASCAX= (Š(((JCYz?%okq]Q[QEQEQEQEQEQEQEQEQEQE5^4Jua] zqK3I$ @OJZ#?oa1q3VnWEVQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@ >ׇ|t':?xwOӮY'O~h_<5!rצ;E?z/7,[Ykg0_?͛QEy@QEQEQEQEQEQEQEQEQEQEu}5}9AgkC[Zw_3Q.skF/u C:!ؿ?z6=:!spol_ѿb|:!spol_ѿb|:!spol_ѿb|KTחrBa+ U/c]^==T~⦷0 [b]Q[QEQEQEQEQEQEQEQEQEQE5^`i=>`i=b(A ^aX:lM5ƭ arV=xfNmQcm$_5C#V ]-ޑi}y-f0 )e#j=0NsT'/j6<[H.Dzg#"xMΓ͖ @yuVIQIR y28ѼK%.Fxϛl#'_@tzÚmޟ=_}`N !$UުsO4 4} ˷c TU:4*^Ֆ6ԯZM594&(ː0\˵Ɩ.wEy5ErKBEUhA{O kr&{sk.㲛c2nP3a.Z5^ZK ̀JSEY˰19ɠ1"gH%ȚWa'7Dkignje9WFB_2\6āQ?"EvnVXmiesq9{#i1MMq3V?0=bSJC-袊ܐ((((((((((G:o^t}G:Oue?1?~E7,[Ykי| Cb^q# / ٻEWtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@_3Yw^o-G܁A>*OzԺX>{daIAWGE!RoUQ'_Ek@RoUQ'_Ek@RoUQ'_Ek@z2_}neCe8RASuJCYz?%okq]Q[QEQEQEQEQEQEQEQEQEQE5^`j `j PQEQEQEQE3VJa+ S[袊ܐ((((((((((G:o^t}G:Oue?1?~E7,[Ykי| Cb^q# / ٻEWtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@_3PT_3PVr(0(((oajV^0 [bGWEVQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@ >ׇ|t':?xwOӯC)}a_, Cb^xjCMwT~HXO௟(((((((((((ϺX>X>{QE!Q@Q@Q@e +RJC:($((((((((((kμ;x?i׸Qþ:ǎmzO=% OgxjCMw_Pr-zoXק§B|6nEEPEPEPEPEPEPEPEPEPEP}?=?ܠ) (((+/[g1Z3VE!EPEPEPEPEPEPEPEPEPEP_u?IN^5*ףּV-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d-U>=l^d,Qþ:ǎm{AS:ǎmz9K6Yω_'5Iao pleDUy?܇^K;>_ Wd_eDUeDUKEyW:e>e._eDUeDUKE/"_*"_*`/G`/REv_v_hEX?/KQX?/KTQp",ݗ%,ݗ%Z(}T}U-K2I#BWv_v_>|ѿ:<~t\ eDUeDUX7R  p%$he>e]-#rGԜӼ~t[v_v_>|ѿ:<~t\ eDUeDUP {k_ۂ3oVl $U,ݗ%,ݗ%ϟ/oΏ>_ߝ`/G`/SKyinjN2́r;e# _v_v_7,}IM;ϗz7@e>e=ϗz7EX?/KQX?/KU)_1#=Fyl̰RA_"_*"_*Fp+}T}Ugϗz7U.K k{JkoӪ4͐0Q@,ݗ%,ݗ%[T<ױ.UL>In>wSz= eDUeDUY=V,ݗ%,ݗ%⪇gدZxe:u6zUMjW~t[v_v_>|ѿ:{as}w;GmmM+p9<Ҁv_v_>|ѿ:<~t\ eDUy?H%P39ُפyM7+:ǎmz7=%'4Y/9k> dž?Z:3/ QEAEPEPEPEPEPEPEPR/Q{F;.iamiRp8)(H#nOAu_3FlImX򌣁䊊8[ie^<@j$7U' ? ?SB,Gs4w9WګH(^xT&P0?i7`ɕ?x*$7U' ? ?Qp5謏H#nOAu_0[bCG_PPa+-2B$ܼcnfu'VG$7U' ? ?R2X+,K,ym$!VP Rnl lAu_1 ,s$hH;[hPPB^SL"a|n+<U/H#nOAu_kYG@W(?Ha6m\IPV[d-%2Iya# - !NE1(H#nOAu_3^ytSY]GMMQ[mZu!cąSt ?Q   ˜[HgZIee˸̊(_m??G$7U' 5謏H#nOAu_0[bCG_PPa+-2B$ܼcnfu'VG$7U' ? ?RKJ5ƟozחWL."hI$>YiUH]3?'c MW+Ɖm>l ;V7nbRq{H#nOAu_qZߝu?o< [=ԓ1[4yxs]rIPx= b7#HK;)7(2yyC]$7U' ? ?Qp5謏H#nOAu_0[bx?iqjRk(a IjCqp?INLlWx' m'FSN6mXt;Jy& (WTqBS匴 _- V_٘/^֯~_- - Qkߗ/K_aG/K_aEf`aj7A 5Q 5QE٘/{Z^ɯ^ɿŠ(ϵook?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (3>/kW/^ɿ^ɿŠ(ϵokk?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (/>/kW/^ɯ^ɯŠ(ϵoko?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (/>/kW/^ɿ^ɿŠ(ϵooo?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (3>/kW/^ɿ^ɿŠ(ϵooo?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (3>/kW/^ɿ^ɯŠ(ϵooo?0_}0 k@o(k@o(_|=_?zZ& ?zZ& (/>/kW/^ɿ¸Z$vf6۶1Z()`g)yY2)]| endstream endobj 1639 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.369 641.131 459.635 652.035] /A << /S /GoTo /D (seteditor) >> >> endobj 1644 0 obj << /D [1642 0 R /XYZ 71 757.862 null] >> endobj 1634 0 obj << /D [1642 0 R /XYZ 216.367 620.374 null] >> endobj 1645 0 obj << /D [1642 0 R /XYZ 218.006 326.3 null] >> endobj 1646 0 obj << /D [1642 0 R /XYZ 72 286.295 null] >> endobj 1647 0 obj << /D [1642 0 R /XYZ 72 243.997 null] >> endobj 1648 0 obj << /D [1642 0 R /XYZ 72 230.06 null] >> endobj 1641 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /XObject << /Im40 1640 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1652 0 obj << /Length 3189 /Filter /FlateDecode >> stream xڽkܶV-SER4qAZ@+nUk;R}BԈya͟_lzwwK.0ڽ YE=[fσicE\ޘ nύSS0]yyK. U.<ۛDq4\`]*0R)a^Ğ&Qox*HHв@R)`=@aC׏"`[Ciڪn+T6iwXE9~@tF"bʖo9szE&tS=k.'Mŭa$c TňLSFT=Cp}DLv v8P8ǭ<] !fjhk'G2tL_Hu^~cY!#1(#ɰ \mOz}񀁘dI^B:w SQ#%\!hNWBVTI W>Pcz˸=p_5f`c08AE?jr  @ajŮv|=eDD(fU݀ݐUS([0Ce8& Sa2,.aҖ羳 VWЇ4c )VD|nx z`݌WYژbQr\ f#U=EhCw!7_ AAГހKCS)!2ECe<&4}qb4c`.f"/l7H<@LmU}UC|=tyOI* RT* שZOyŁf.PX-'v}RgAx /[e"q|IOO6EFG~lf@wJgq "EefŖ(1qSiGk\ Tv+e_$9LG;:1h6Ja:_[ i+IϠ.ʮ), i JfFP[>투Or,D`{sY ux\SM`,y\2ߊ^"{kW&xD$ 3M1O+^jSA Sܶ`X=p_a[qtg+dw9mz2bG/eq+ [c|ZeDU8C Vѳl)r9 l 2ݎTy q7[Ym$L6,n`T 8u4"j;R Amu3-t'σ̻X詮9p+Lg9E@E3BGYEUߝoΊ%W0:tagbQNaTܛSq9֚}f̵++5sq&V¡4_j~ǹt)K>W*p4@x.Góefv3/cwXi:,{R: NP S!!iO֎ul;/\ߙ?<d j OtELXȼ])xHhlњ"6iWV=C*M^hl|mi 1_$inzO=c]<4_Νv۽1BXp}[(Gn^6]_/ sD컣 Ḽ$Ʀ^=9RSws8\|4I:!&xN{㴡<ζ$ZUx*-V pX|}]}" e.l6SSfMpb(h$=`k*f*+PD6՗쏗fs<5>YC7웗N{+ RwX}N x)!?MhgM9~[/b :-孆{,Σ Z{)վr1 endstream endobj 1651 0 obj << /Type /Page /Contents 1652 0 R /Resources 1650 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R >> endobj 1653 0 obj << /D [1651 0 R /XYZ 71 757.862 null] >> endobj 1654 0 obj << /D [1651 0 R /XYZ 354.866 560.598 null] >> endobj 1655 0 obj << /D [1651 0 R /XYZ 72 544.504 null] >> endobj 1656 0 obj << /D [1651 0 R /XYZ 151.192 241.806 null] >> endobj 1657 0 obj << /D [1651 0 R /XYZ 72 225.712 null] >> endobj 1650 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1660 0 obj << /Length 3207 /Filter /FlateDecode >> stream xڽn_o‹(J9OI{IAQ$#dz+i:_Pd9BN쾹UQ_㰿R645? UOv/Et.Kjb>2u讧IGqnY8> L[6|_Wփ4ѩjyM=Va 9v]s[G |Y=TmYGLJ=,YC(P&j=/kG d1_Q%+Op ӄ)h3Y C}uW yiCT1}Cd5 Lp;JzKό,M p-] @e RDա* $]Z,l214E\@T"*$금E,c!ƽ:j'IBL9&aΕ_>-`oqR]Ո;ػPwv+׶[V,&JD?Z{^v%#KBڂ0(>eW!8(2:prXJpkPT@t2N]\P5k. wMR%կ7DH9gܰ"c ;+L[yh_oPϋ3H #`h-w-0"ztqr[ZH43G 4`ٝa+[xˇ@z`m*LC8b&NU 2;fUZ I5v! R-@]?# R{r9M69儣;pRL2ளsnfSJOR d! ^ V7KÓ+jB.dyOe`1Y9zι69@6lJ5dS=uY`g\}} >]J!t\EEYnweuiNY*뚪h$r \a3"du} F?Fh`,Jv#T-ßFp |+ic.ͨB/SU7iP g4Zazt&2Nׯ]_I@ z̻8 Fk2kGv#51쒃ҍ$~,PWp;p$KkWሱA8S L >3Waz'pag a-5?i-p>3Ud{lXJ.fcER) ߋ[?~d$-Sk5 endstream endobj 1659 0 obj << /Type /Page /Contents 1660 0 R /Resources 1658 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R >> endobj 1661 0 obj << /D [1659 0 R /XYZ 71 757.862 null] >> endobj 1635 0 obj << /D [1659 0 R /XYZ 388.092 399.203 null] >> endobj 1662 0 obj << /D [1659 0 R /XYZ 72 383.109 null] >> endobj 1663 0 obj << /D [1659 0 R /XYZ 72 316.9 null] >> endobj 1664 0 obj << /D [1659 0 R /XYZ 72 302.963 null] >> endobj 1665 0 obj << /D [1659 0 R /XYZ 72 163.499 null] >> endobj 1666 0 obj << /D [1659 0 R /XYZ 200.735 81.972 null] >> endobj 1658 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F66 186 0 R /F37 163 0 R /F81 361 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1670 0 obj << /Length 2541 /Filter /FlateDecode >> stream xڥYے6}[MSbǩIm*dTҳo743vEA}Aw۫WoE^Ĺ9p(@17sS 015x8As;To%f#+~G4)J}鑷\7g#ueh٨NՅ}S/ fg}bzYUU,`GVV[Gg]`h5$#ƚ_Z.@%ZG^{M#OdoU }Cf`Ժٖn$Ŀt #>$)ó~'yٜo xA_p\()WeqJ]"Ks͇y 1{ooU*%2/# 2EII$Lg[(BE84aBj ]ړdZńq|a +6t5U6lF&31c.D$@\+F)FHyA-8c606c8@":0ɭay0ĺ騃cDBkj @asWHcCBΣW=M{0m" QmFj%$c3T oѺƎ(.Dy0 8Zc"㓤?:QCw'/d11=jK{x5]qlo8/8+邡iȘ\j,hH-m'JW OI9A'.RNݪE1mZ,dw;h ×PSإXU)#`IȹgI{}=3By`ϲr)1[3)Sl\CYӈh a e[5(5\Ej@ 3؟~aFXɛ,n&MԘDU SjAzVY B PV#],ۜe1 n_s-ZyA-"<_`?[s`aW7AF56;;e(y^vW?M9S=gK5!) ,Jf iٛ3M67gБhDA hP dNςc o2kAHpsq6NJSN7 xqK7z`8bNߦ[p۶z .D_zdxGX~ Ej6fx(nX# P§. !3P*M)' c\b r&/i&ѥ ,uW[I<]{=*M,z]os x'L,N\ mbA-"qTգi|Aha'S䚑 _fp5>1?liؘď?&dnWּ70}%|$v"U.*.XEyIi5WdMT#/ضp^ݞZ XQeu_6?]B!kVbon<|!_k@3ߞi3,)mt''y fw~2zu?*R endstream endobj 1669 0 obj << /Type /Page /Contents 1670 0 R /Resources 1668 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R /Annots [ 1667 0 R ] >> endobj 1667 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.579 619.215 223.556 630.119] /A << /S /GoTo /D (term-subpanel) >> >> endobj 1671 0 obj << /D [1669 0 R /XYZ 71 757.862 null] >> endobj 1672 0 obj << /D [1669 0 R /XYZ 72 720 null] >> endobj 1636 0 obj << /D [1669 0 R /XYZ 72 596.421 null] >> endobj 1673 0 obj << /D [1669 0 R /XYZ 72 582.484 null] >> endobj 1637 0 obj << /D [1669 0 R /XYZ 72 428.549 null] >> endobj 1674 0 obj << /D [1669 0 R /XYZ 72 414.612 null] >> endobj 1638 0 obj << /D [1669 0 R /XYZ 441.77 330.57 null] >> endobj 1675 0 obj << /D [1669 0 R /XYZ 72 314.476 null] >> endobj 1676 0 obj << /D [1669 0 R /XYZ 72 156.621 null] >> endobj 1668 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1679 0 obj << /Length 2828 /Filter /FlateDecode >> stream xZK-p%~Y)#vtk(f~QnaiJQ?֪LHS 1SmǴ7<%Irz:{ WL=b=u>I|'!B~8vGLmE{ڨ΁CgM2e0{eN;T 47A_C2!wBsg۳c&AVrfּ-A >PidM{(=? hZUuKwQF[~l Q'hեpL{- QDn-;IrZ [= |` O1@fK[O(7A˷j =t I:o0~6dZ:c#z#|23i˦9 B|8*kh .X'Ҹtm?Y!R1@j@%6s^@7^4 D ^^zC `i."@@hv<F1ٞbF9[h!~ږ tM?fpz};0,cv_*Wd v̏Jl=km!Hνk 4_)"E4v< @3fWv}N3z;)&9&2<"+$]?/xz("diH+(]\$ބvl%C爃$6fu ͢tn r!: !bVtfI+wlw6qp|Ss` G{pVkS~w.ICRrTv@ǓlA5S#j ܟ)e}ܮ3bHT4ZU,gߵFwڥa\+qHPuw QlWW=/|DsFbJV|k\ VQC5ŘHBo~eqwr:-I肶,U`2KSr9t F05贇?nbjUyϗwpw$!z{œ}Xnfy/xgmN=J^fvM7F蝂fr6b )L2& +,jl۰g/K^u>q ]bbwp#`Y Ҡ.3U."|~Հ7A(9):@^bjAsgIRr-"Zm c-"0g/8P5 c>Sk!.v66˸8Q4 ogUIjъZI20AUML9p3"z#4恂 "Yqrdz8ZG<5Ƥmc-+qv? gB%{b`i# yi>,<94:u|E_OP/\79C!cŽ`KL ZؘU6+.&%( #Eb4+!b|8hˎpEF[ddzav c>+sqޅ߅PB27?J:XͲA  #a}t,ށ DA.`4dnY8c5$CWfV8er~erҜ^*FF{']qV- e@a4ߪkb+ ݅<}XrJr2_#M b\lX$\H0qysoOJ蕾}@SggA  endstream endobj 1678 0 obj << /Type /Page /Contents 1679 0 R /Resources 1677 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R >> endobj 1680 0 obj << /D [1678 0 R /XYZ 71 757.862 null] >> endobj 1681 0 obj << /D [1678 0 R /XYZ 72 642.127 null] >> endobj 1682 0 obj << /D [1678 0 R /XYZ 72 628.19 null] >> endobj 1683 0 obj << /D [1678 0 R /XYZ 72 340.811 null] >> endobj 1684 0 obj << /D [1678 0 R /XYZ 72 326.873 null] >> endobj 1685 0 obj << /D [1678 0 R /XYZ 72 230.777 null] >> endobj 1686 0 obj << /D [1678 0 R /XYZ 72 216.84 null] >> endobj 1677 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F62 183 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1690 0 obj << /Length 2021 /Filter /FlateDecode >> stream xڭے۶}BogbF"E]\f;6:4=E5EWݿ/@${7 ( VW_<(X4XmY ~W< [Ubɳ<FoUgxk:gՏWVW^5 b⒰,ʂ?ADk$i:*K,q"/ 2JoJQXE=$ 7[SbUVj6nnPzstAon +" ~7'qiEїq )(^,ÇRn `K\a!;2 Qhuw07-[uwW5w4Ȕ9K)FiD`tSh̀ܭ\8ww\ojա(յ(u6kUpw YUV~@!GDXV{$s"<q< 靯ﮉYю, q{RUU#ZsD Ժv'Y-.,(3cp"5GؗdD<塪;C j@w8""qqc k%1q3;-U!3J1Y4y4TeGh[)-GMlNZ@j9 Gf zBI]ݤ|x$M]S𰞎F1DE֯2Gj>Oȴn) ,3kgvG=Ho2vr/. sM̿'':kx7L9k4kE&"&Wzn yGD2A^]$IRv{Zr3r1UGwl{K[|rWWw;{dj1dwIO|#/&C`J;o'7k?x|;lOpKՓtѩ2MBhʦH$3&,P^Yx(M}݂(rʞi[\llfDVfKZ/ $C¤ oc\]{tSM<wX+b,N:X8o )"B"Ku`pʪnġ5]OM Ό (gpժ{L?Qr]‹/qGRĠ-lkʘcW?Њ0%KE@bؖFo=aԘ ٦`V(֟?(`Q^܏t:u볊En"#C5NjDJD\GmiMg=ME1DK)PJU5~{x ǵ9: 9'&Zw~ӣ&BHծrm>ggmnf֫=''Z{RER]P-$j5栽Y̠y3[H#I~~Oॹe.rD'.$*%@tɤt<{๹xC }g4PӀ<'^EZ+lM<1MA²mM7*m,Glȱ1kڒH^zZiwәCw=٠pI>ؗ쏶V&>q\^Hqf9'L2|ykG@ endstream endobj 1689 0 obj << /Type /Page /Contents 1690 0 R /Resources 1688 0 R /MediaBox [0 0 612 792] /Parent 1649 0 R >> endobj 1687 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 218 /BitsPerComponent 8 /Length 32469 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ??xm h ew BJmowpqF,ۀ߷=l]C\H b nR#Md潞h1]M! d3/^xmtSv$~@1FxWOimlrO ։t!QKs:TZEk[WQ7۞Oe_D` /%X(]猖 Y?hZI.b`DrG Gkrom!$8e# 5/n$f%SbǨ d,팂92G z \)8+04?~tyF?ֿ iG&ҋH44]E^i6LS8͟ÓKq&)X'"@ڻ1~5emy ࣒Fl֮,WĻZÎz|Y0hvkDG2]drZZj77GGɖ( ic4Y=͓z7Yf@OJi7n1xJk- `kLjKD2y $rh}w)O\NU2)*GUvbvrI=yt4!ȟW$~bqI>2OjiOeZurQat\0F~wVMǎ"V?WVrKVF/ŋ;tbNavQӻ#ڎW9rU#hݓKoG+˹roG_s.*_v~Tr̻:֡i* D叛|"Mtx{ xZIZ"24#7=7(Ƕ3֯<\ye;xCovܭ6wPj {k{w>U+eO%[CdeI1咬UPno'/T'i '=Ji欟 Pc8nQCXd[,XRHPǒ9_`]<76e'4whZ-!vqY(5;MoO wKK}рy0&Dvfgf=Y'ۈNR9ݲGPH8GaG+˹CEnObL yyʹOסCzJ.o%fYM `b`:Q2]iQoG+˹roG_s.|M_ZOikc:dHdI#X!3StQR6lp:*IiwZbHە\/ʃFAlUخaȆ?. 4z2gz0%ws&! qytJt1-n/ ˍYe譁]/Aqo^iwH9#<ջ1[(+Yc2ryeܩk6rsnn*(,wUTxTuXKUgԓGNkNHR9*x2`dEQ-H|䜕 @G+.egSby-o6R.py8O \_^h"q?K/~B@$sb*;{ +V!U,͔'*'V#@cjqC>eܻP^ǜԸo~"cdfX`RN(N_KIH)XDsK>}cYc,M6Rx"]+NҴ!vX¤j9?Aֶˑχ(/cy#"bYP#6OJ׵?\=M Qb. 6C4vnOEYW`!T+k iw>:=8{q@N"p- &wϠ=륭(+(fh ,]@=tD/f̊+_.?G\?ΏjȢte=+_.?G\?ΏjȢte=+_.?G\?ΏjȢte=XQM=k\鐠9G\?Ώj͙V\?Ώ\Nj2M*][+0Rv'һTԎ5AeBrT`C*rG%w^N ,ws"r9YY\x[o.4eFIG*#F3]]e7D񧘶b xEu%F1q1V KD|9Or)z t5yL21]dOҮiK#w0*=2XZmk6>Gpy:~\^͙V\?ΏEkeˇP{9{2 |7MKkx;DEY[)A2d$9#/Һ.A4'aÑ!l`1^q< ]jwzd7M%ݒ+RqK7$sItw/$,cN P 3Z]Yys9&B|w"e}9 DXvIgwcU@5BmWD ZLlNi.K\w{tϵrz,Vm (X%H@d-V$o=z8 e;yeys-W3 J8rF)$t&h|-7Ĥp"kP11?P-*!0I3N*m.0~2}kRǖI eBǽSԯ,4ȬQiiU-\ AY1GWvi/dN[&&q,s ^sq?tUocC*'=GC[ٰf^IV\?ΏWBr2(py:=g#"KkH<{ \@\kˇ N};FXķԅ 6gD SPƚ,w G m`8z֔kqypnn<{XyPd9ԓQ"S7RѨ=qg[XoK{ VMHѺMר*Gl-mSaop9۵4l 9:DŽ#8X&I0P`qV2᷎g,8;#ӱ#l㻴2 ;X پou#¯yN[}ǭY c] 3*l}o{O" c#̃}y-TuXqg 5%}I{7,NQl`s=֡.a5Գ!]QYpQ\@E(_$̰/m"fTB >sNՓTYaY CPho{O#:_t:~ɋڣ:_t:=j|tyGL=:}&#u3KNhwΗz?G/Οb論χiQuwee[ d":_f뚵`p4%#3 *Lx){&?hk f춑T@ݏ ׶:󢥽].Nۃln##jǺյu-w$h#t_U};ė;"Lb;_ GahZ%Fd$QG=I\?b+>V$aܹsz܌V vF>*mFW>]Aϭ7Ηz?Gwh|tyG&/j|tyGL="o|W!sJD#ٷݞ3jsGqcwre2v|{tzQ{O"Ƌkigf2Iq -2w,TTqy]6;+ّ-^if6._seci,w9ΰ;*o&(o")-rX 9J,<@Pj0a1 cGaYW:iio6h; zJ_]h77)(rYFҸ드tNWmE%tiL͂| ^#mYt_-* b{`(l=ho;ڋlmHYd0v9:tҴыcI'3O׵}FE;Qt]a%' $pxZ:{-ь34%Hg/f#=5^EEbqOEBqcLH|IuDG~K 8ޢH^Wg4q7*1P 8&⃧j1`ڕQ\%By`dqE[E8r+\gyc#W]xI-[Y#a9VA y۞>DCd4On|0%z|3MZLfa} -q}=A |gV-,~}@\+ln @́x/a{;5o^xo^`dX:1?#Lq[j2uk#sr{Q  5ԚK1$2*@#nۿ۱ۧoAu-PpݡEyV<b{}*!Y7qڭ[yVrnEӠ{c/Rы٣ńyKwtyW@#f rsڇLܤQDQY(>uq8\y E-VݕN_}e].$IigEW [IuQ{4jy>sRsV?OWv1FxKVd?k h+h4#֮[lċIu!T@C{+oj;[ܳCr\OLdbF\#[QyJy<ݣ~ϻ3ڟG{4a°&#ri>sF7җ/i+Fخ瑣W?٣ W?=GAQy.B!p2:gu˭Gƺܗ1hP<[2[ f7Zז#\Q4sP8N_%6.H(2!"6A'>V]3Ov!{[yJ-?U2A_:t>>mw"c$ X#i ,h=:ѧܬʮWhAF?SYxB(}IKm%; yvu#aRhxrxNN ,V+n.èO,29uI"F)< n)F~.071S$2mG(AVDqIn6PA`yڽV|%}x\Jn q]}Xݕ~@+;m3xIwyg-ma[[aӿ/h٢;B[ƞdxg!Y0+z[F<ݧ.nztw'*ʀ0* a[(~bF\#[SFخ瑣W?{YFخ瑪:_SD2FVHYA0@WW\.y-s#4s"((7R~\qGa "RxEZqA [ O#gjP@,XbOS~m_Q}WK/w2C`<4?t8pu Nͷs `d+\7#A܎8꽣fK? Oegunhdy:9;)UO8 Mihcq̏$l]]07P n{ ׇ5$$b&J 搠.G`tZ4-be}G̋+-/un1Ga\xr}Z-En/!4ql+RFz$~X;eBXyh ;3=I?TvSӬ#f:nŧFb( 9ڝ+bf!!*"/ |h٢կmq ov|HdA @۸y&-c(UUGTpahw"N[^[.u;ip|"Ft>@ w%<,w241ʡf19{Ga4l% 8-A{rP7m3Okgi#G35RVQ ޥGKH걨 g#"-fY+=3؀Č`3ۊIk}j9cC`Tp>Ăc nH2s"բ Gev*}Po 3%ьvtO'rFhki+6b@dGKyZ-Xڄ&_נ=$E#⼸N7/!`tP N&!4` deUڹk}DR ] LIf'}GSq#0F-NVPyR`sK0E$6V?tʊӝMѩۓ8Q{ֳA$f 4[2$$r;QCqm-ZD3sή%\a9#967I3X:7F8q2 CcqG&#m+YWbF}%oyyr0;F9xGnԞ-CU&M\;\siELxXC$*r#uAQtI:1jBxËs%MpxlpK+80wL )8uSj`: eymbOoE"[Ewe+iƮU7*8asRI%sghKAX;q=CHtk:̢g4QxγbE4qIxΐꠓi`F2.Ӕ0x9O^EëXv{P]Z* )y^V%!x I gzVjp悻:qZ%e`Ӆ嬋,Ќ ?`xOB4ۛ{G6ϔqr5f,Z*txΏaOf>9=1֡T{f fSj]n)+*km)dH$]?nq +#QЍLJᶰKymAcUe9;9K o=)hݝM ͸?*miMyx-~C t.}Ҫb &03}YOtTU>@V;pA$ jvr;^"*r/N:lwqy5XgPVtlCWIlkkb1F{bk{i7ɦj5"HrXb Q uto!{x.&yY +G'ȃ ֱlqY5ǿT}Z-sLmZh[chRf:JoZ3f<Ș%_(, szzulww>y#c,ɵ@;yzȻ;:XIGeys]i髑o$X`s#+#`u..>m $`7icqU5wEЭIYܡL+0\zJŭ :[{׾mIS#Fc2z!wQ['wݻ 0m ϵ #NlmTyr3>V4ZƞcΤ*䌞}A M_J)hf|c` @A/'+mvK}FKn# C/w p݁3ދ{B4~+motD:zv9/5/i׋i{}eorE,Xp Lt=5T<:lT;qy⳵}/T70zڥ_ O%m,AyEv8,Etv,C[bzz>Ǣ70;5  $n9おG]=i64 $jc Bj?[%aOZw4C+o}y-Mct\VD?bKGحl_Ώ6?Efլ?Ξ:Za̞`]HG>T뺞/2R>Fgn8M$ޢroʑchc9ڣ5 FQT;0F[qcn1hYu+++(g[A#x-5q{t[]T.Xl?VΧgn([7.qu'ӭ-PO,nD>kngAOZ.GD!gHк<?:õ饜dpͻzB%%G+F:WBASsڹ|+0Ϩy[DZ4ɖr8\,M,Y f1ؾ`rW%x۵fzҵ;[(t 2J$aQ#V?šp>V1.jpN2Ny4[CV/fKkX䍭-D$-}hY9l$MĖmuܬ{.|q]m1W7{F%SFk&m5M*WS'N=hYy-bKSy}:< "[%Vjo6?GdC+o䵑 qiI Opn}:4<|BGRc#x4\,xN[HwtRJ#n~>{/aL8J&ܚʓ–xEm4Br#f8ⶬvIˉؼAg=p:0dfjZ=DXk#*d}yp*M:O$'mRt{Tz֢?O}fI'yT 0*\RN1q<ӴZm^z+"P1 ddGwhQ^W!2F䜐H@-nM]Ou̖7H\mW/ۛv=J`@[l̤8 dqh7z]6K4Y%|y z.D6Zon`PfRB6Ÿ;-[N>$[|8ʰ}7@}:US;Yeo*a ;$[tVvV(cvN{~6E<vj;yxI8]J[l6XA2#2Gl`9eIqO"B'$8Һ)<3 mvBn3$`ˌ m0B6{9$۝w0}&!P]'?pUxNT7^1ڮjv#Y-gS Sƒ8=@zU|Ib֒mò4a$$}ZOr"aIۏsנQλ#a/Kk_ͧM5U~I;U_P:Nqg$p pOp; ۟|u7V462 v7@:/Z\L$SnMVdb0vִԴk׵Λ20,r9ieemg$6ҺN06Hʘ%5Շ#Re.%WqrKF?{HIv(WQ?i.*\J?Q#9%أE^˟G\J={$bE4MHbɁsy?:\b{.%sy)H$t;3ĭ"[;x%6ܩbl'={walVy5VXVgN8GڞŸʻ79p1C trMB!7hCqjoxݯL>CI?tϵcF{Jy&6ǖ5G;=zuCkiIoo76GAZv Hӵ_Ӯ4+WݬvAҫԌb*Ҝ1|9kևv,qܶs(bGh֥EQy$ۜGZ.% TS8ӌd[hsy(˟KG%أE^˟G\J={$Ta0lY^08ݸ1ڏItkvM kA&7F2tMfh^'vL3E-n+xs„83Sίbйm%d< ?)bZ禽n7e{oܻH6.U7nBcxxzlMDmݵ9{`-6-E8X` h]Ñ!Ĩ2~i8^y?s=ޠWj7WQݺ<v,rGӣeYrJ8I<-c췶/p.$V1iǸr>v%ܱ\4Ͷ[#TiW1€6ӎGZ]j6ZO,3[Rd;9+Ӽ;oa%Ƒ1 #8&u95 {FPNH8snL߈"fGqdOy8 <ܟ*?4eݦycG20̉ t۹3λ(QWQ?GW})[yTgX#sm<[ pĢ1iFޤgX:m# D<R ež`}52yI"i`9?esj9iua4׏!V?.QFT>!WG㵪s Au|{*P;r87de/3hq o<_\y"ʬѡq>G{H v3-J1a!#kKYWY"T&EQQ~XxHh7=~ϤOIl-Gl8C=ri2;-~_qoC=f6BvտkW7)g$JVL^BB=2 B=ɭiB&-:1 =Lm|WL^ʷQy;XO`;v/xixZhL4)T trH9OS_m52 ffE#vپ~XLjKl$R[ ˒Y%&d\FsV!o)]2V G@<[@i$I*Op3G#tE>k)u'_؜Ė[(v1'$-t*-uF'D)$̮Oul֦⁩ x3p=\rH9Ѿ19nA^Kc9>r֐[^n,[Kg), #lRv6=:O$Q];eTmPG$D_D>%e$m۵{Bv܂:G*c~Ck:/4ֺe  xr >j1ZHX)d*N*xU 6NGMrH92B^coy$WarȠyBdTOW<mIIq)f29 ҶΣ8:Ra΍z+RDԟ?*~A"lQXړ'GQ&s56e $}VXB2JQc2kcֵ]76No* Co&`H̶̜mu23Z{O#/gqgyYO30;:cPҧtP[]J %TONGC|YϠVгAO)aO{{Gg $O)I<Ǵny0#LJQ¼֥cYKPMCZv '+œ67+'x-mJ]؎@5_?ke_jdi3!VF0O9_Ϗ]#M-TI D$=r=NpGG+i4R y$eJ#N5A.;Kv|P_?36R\\Wׯ\(Up8ZiSArTyi_ ^g9Et~Zq*/a9>r*7 r2pFI@y0n"MJ;ylc0C.y'jS_z-q,rCm:HС@rrF:cW>%Vy :}|Ќ8îZ<qEm-6Yʗ$g=){O ~f?<)|  0A:M&%e8^07v~r Ȯe&u MkEJ 3Jsz"M<6r(*Hɑ@xWU5*ZV pz3?-?Zq*kirTyiAuD;SbnIߙ W{ڍ2QMFRKV S?**ry$w^!6oll;O]o8gǾ{T>Z-[;5ɜ2+v&gcjWw^9"c@.{럭S4GQ6_Xc:,rvЁVin=! THzdu]CY]%I$sFa#D6.ɻhAo.6 _0ӁC{ 4{ ԕ+02e|| 7g9Y Ɔ }r^C\&h4Oo F IF1Z={/2/tϳ_e#8!ݟU}_ET,D"+뀝 }-n|y Cw\ 6uj6c0J糖v܅~{Ngr~P[X*qjّQ 0Lg95؟*ڌZ:\Lq\Kfr 1˯w#jf~Hl m<دtqsp .2*WryϠPu;6JgtFy]m0Ej+֌/mm7T"*Ib gy1'Rӡڋk1S#%Qc}.4KkHeYcI'[T#NK,gFJ[qP@9 ֥vIRAE0pF~l~T*lI<vJf=ڜu)iuXsKe̲fB=SGUV ?fi2;W>\D^} TvUʂgryϢԷ-Ƒo% /wy_0 >nX~+=i6 mO͈$p-H6(e''8[n=sh(hpIB~d'TFۭuaQG]Yo?*>m=GXTQpM7IXM/e1>[Jh C5ۭ^r*(T :I'k7qGNu¸x:䌟ΙkwaUd6Y7s*򣁜>whβPKY&9̯8 HҩMhs"C$ Ȏqb2z~[.QΰHqo('=qu5XnƮ%C rAOyH=;sj%GY*!@F?SYP$2\KrEi!̊c~BvyzsW-35MNPoKRP@Ym|'-Av~&14Ӱi&;`q(m5?]G-4j,c_W-y{KA'PGxQJv;@&6j9$y5)-C#g,ylqK٫\~ꮴ*PVI!*CEp1[mݻ:W\j!Q^izZm$>C^u0un**/j߷[QQo?*¢dfۭ7Vuq4rE,1V :~RLf\4˳ L@ʨ cp#} 'M UIhw¼+QA[}mOh-c$םޝLϢܬehFvH{y@aRr[q5ܙ"N0ӞA<3rh+ #OnS$[ G'qe N}?*ŅM2MvJK9g9v=\W^`n;.nW ̿A*LJbwwqiKoEОekum})@t ߞpۥ%Q"*FO[gmsw"\i~lʹQ5xn[]27,o*Y!DybOI4{5`~UDі0@hL$egQ p}WDQv*QGz˃GZ賞huvTR9 `?t'\O]/2Ycr.NrO]cHܼ1(;?T aFGG\w"֦-J/K6i"L0;ᱪi7Zc;RF11[ vN8#s˸rG/49~' 2s0 1V>;G[kY5"AŚ,{{- ~fM'H-E}9_6l<8^Nrhr#:PFTtS P- ޡ%t\ݽqƑ",R;̀H| 99"ugj=\F/13 @a8ݟ &2[X'̹VŒ\AM-5]4I `:}zB6_imjF*񛴌K/da)#'qҎywH: Xߛo0[J&rT+riY. /o(r3B ddsxfGȼ;Z?H\. I |t_Z֑[',C1HI2Ǟ%_*?Wzʹ(ŚvO,$\5 x68pzd\r5k[ <2˖. PBgpt?+=OGJSVs˸rGTd?hG<${j7N9GJSVR]Ò=򦾙hQA,̀5L>Y?z99#2+6ukqܙ~l"*^$r~b7|ߠlOMBnd7+ we 35kQ%&zA pL<${$:LZr_/$_.8=0{gP^hw:&=Pgke<xj7e_O(p.ߗxIetھOnʌcR73g,EywH#Lwӯ#4l7{j"NMQ 1>rh7Xl&. FUrMgD/|0 /$ۖ I 2=jʵZp՛ҩUFf^ܙ">pAjU7w y溺tTSX4VQ3Wzʏ+Nyw1c;%_*ѢywH0YݻjkFx=~ui7^@~}3Cxĺ[ۍBh9nJh>I!&kf7m=cZكy8Im4oesbg)% dGG<$J+=OGJSVs˸rGTd?hG<${+=OUomA ^C"ͷr@ArGJ۬Cu=^ʗpM4jQRTv9v Q.=58}"HIaA*y4cǛrq݁F+<[^CL=x[q 8MOx.novvLvAqaS]Ò=P>57=21Ϸjaie{fܣ۷*cP{6]v챴8O1hG#Yt N )lgdyn.əv#ܠ ֎ywHcGym o9P󎽹z>3IKeFPLQvj6ZtZDF"vkvAe|f*`7x4`е!awwt. ) gvFy ]Ò=Kwu8bw 89w5;_X^V+F05ڦo4K&?}$>a '@+NV6r ˏ7,ߟOAڇ9wHWYGBCK}jE^XV1 RŊR=qhvQK-orghq\MW|^Pe.['=~B \&5Zve*,YAԓ[F<izFGVrqp~Iitsv pv0}x BҭZΑq2s Uj\7w?j+m’Qy_NӰUg Yn % #z|wG8Wѡ2q-m3L5otQJ~o0h_5\=Gz/Ki\xO[n];]F2kM奩Q5&4fe:qOj>.d[_,Nc39j}ݾlI{es+ec<j= b1sKY%%An@c#i!$S[]] o!H#zs֙yw}F#Clanv7n՟/ԡ{.6EQov4{A+IrTn=zt-'}^ A'#8s+# )eh [@W>rO\qV_ \s:\ʛZDݕI'|/)NJA#ֲc4Cow.pONF}+F;[Z2쑠P,F0r:ts\֗}U4W r$6HAdNTCa.cףhoQ*T$dg㚵ˏՙzv5܇̞V%6PZgy?Mry?٨ejgOQyT!{ċwpX+O4lH%ϥ7ț?h_lG.?S>7ʏV5Nju$Sī)̺(pi߸iuZ4̋yR8"-PܻH-Y$5nv vRj#|G4ig,x) *s0Pk˘'Eo-efVfXNݟzc۟ iu)/' faUn\M&#xQ E|g,>06qJ I4mzU[#Gt'#8$(UK[*y$~b  $w:^6234V^3V/X²1teԃ~Tzؚӗ\%:L*Rt*OPj.?RhֶW!+z;S~7ʉRNjT~\f٩gy?GOQhyˏ}{53'<*- ab&Id&6>w'R/0}H@u+`{{MCP[ $pц(|, їH\)끌1Y𖓨j֪.ii]; J(Fs*8W d}#ONB\Ef,ʧyr=K1)A4oͫ%*8>e0qcP(5 [D[fI ml* 'Y4FӖvd"# @ŽQ^^w˶6Z$?(Jѷ@eyA:\Ijczι nnG=Eu}s9w;^]ClL1>@ .yO(zzˏ}{53'<*Cȟx.?Qˏϳ<'<ˏGT׮ʚu8P<-yU跺Pr&I}IQE'?xm.l#l#y"Pjs:[N i%O-u;qzt5BÒ_PC, g=*:@ 3Hܻ1QhSEmXNEqBpC(% bvX\OD70C"ߔH96wZ'D՗W w+`dݍQōkw;Ji 0N:3 ճ *8Ѱ+%QX-fKK[g961ߓt5Z65Ǝ*l! 䏗O<3{ej-1u2lgϥei^u x-R;%Bsc9Y5φfԣӮ! ou-d/5ZmV5M, lhGNrn45? HјT 7$c,m&[Xbxh 򞞝lHYcb%TdgrI4FݬM:3m' `r@18eʆX 0 ⹝/H"Dbh~X~q;z}@ p>U`Ozڤ4hUt Y-Ӯ8ϥEy4δگ". OR:ҳ -"E#M97m;}~^GaГ"kiqf H< &h“" ^3KӬOuqS$J#@ɪV_:2a@wysZL!RJNpsGC} }c}JKtҵЏ 1*-]6Fީqֲ|Skow9.`e2$@~=hJfEh?3ۏF3h|{kcK1"tQEQEKHq(+IJAFO0ۼ)IOCj'7e$7 F3H i~{籭AwK1 E oԳkHׁLoր)jx_&U"bg#<`kNVU +99?)$lHT7ʪsrZYZ>5-2d1oo 5c_6Ra@vp(דZ=Ȏ yU Ň#3kO>KkK)V(CLĈ.*O>??Ju5S((T{2*@"c3ңd[%FnX9w<㞠E5x;ƴ 9ooMi4 ;=n 옣 OAZ%ƥI y%V%h'8OzFjmnuTxmV?!rNE\,n|8-XNbx)cDuF:VHQcގI\v)Fs>?ϵr^/7ѩHZ4lIJB&7@ ʊ;m㴁^HvX, 4/徟ϹOɰ&t ,ڊkuگ5$:(р:|p}8;KhmɸQ2p)u;;Y|Gm EN@=Er~)\Mǖ s<`~j'ˌ3mrp_z/?J寴:]Vi,-^WFvK3(;XujP(+sZYet!9dGyUei}onv*eQ%/ҠKf3@!uҖ}Z$ӄfp"GպqqFN^n$yHr4JY{dWNG(Lch~T֛w7r\\*_4^*ދ+ѶΓO5IK G*e@0Ӝ gagG #R0 wlZ[ 10@ھPjuϨD%w~X .~qnkwwm]*GݑIxZV2Z@Jт$sׂOjm`C2㞼 MQ,}bhenvG!r.602 <^ˠ n%,-2D~m Ȧuv)enK4",Jrkmh endstream endobj 1691 0 obj << /D [1689 0 R /XYZ 71 757.862 null] >> endobj 1692 0 obj << /D [1689 0 R /XYZ 72 642.127 null] >> endobj 1693 0 obj << /D [1689 0 R /XYZ 72 625.056 null] >> endobj 1694 0 obj << /D [1689 0 R /XYZ 72 607.123 null] >> endobj 1695 0 obj << /D [1689 0 R /XYZ 72 589.191 null] >> endobj 1696 0 obj << /D [1689 0 R /XYZ 72 540.508 null] >> endobj 1697 0 obj << /D [1689 0 R /XYZ 72 522.71 null] >> endobj 1698 0 obj << /D [1689 0 R /XYZ 72 505.519 null] >> endobj 1699 0 obj << /D [1689 0 R /XYZ 72 486.844 null] >> endobj 1700 0 obj << /D [1689 0 R /XYZ 113.902 417.136 null] >> endobj 1701 0 obj << /D [1689 0 R /XYZ 72 401.415 null] >> endobj 1702 0 obj << /D [1689 0 R /XYZ 247.191 161.371 null] >> endobj 1688 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R >> /XObject << /Im41 1687 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1706 0 obj << /Length 2471 /Filter /FlateDecode >> stream xڵYmo6_!>D xYkSzqz)pH ^]v%UҞZl 93Ty7^Xl=DLJ/ Sf;JUe߭"I}I??wZ?%^N[v&_jsɁǽD%A凋w^＀, ~ۋ.u0^)h-S/ dBڿ"2ݴ^x ^W}ZA૶qLD$׫߂' ~i+pǁ)?=vf%]LW#MlqDzkLgOu>cdI,}4*~*=2XL47i>yaݪ+x(&DBA>ƆPx9;j5pp#a$Ih}9h\wG,?$dB?7*5*ח+gg1fEeևOO1d'y8`#| #)pLirUr9K@7UٗjEXݹRqS,NcƓϥ SA뿶֎ 9KCYs1o#nW< 1 J#l'; xy2ɧ8mPKϰ!4 #Ca73zis] _`0o~+)_fH-b.0pN`8) 0XE3({i ݺ%&G8ԭ^I'i+ZϬg 3 fP׎Z֮y>._n<54֍;|>J*vN)vst:Y0`%[Am-͠4lN%;V Cv}̦v@+a&ܛ팕LDҠ%"PZxZPKC;@i}}…ȣ%CJwǦM7u8DZ Đc\郪2VzuEKXȣh*L#Mo0t1%#2eLi2BeirzlAl0;+f eՃ55-K3o %9j?r<(}4,Z*o1lʒBjZfơИK^R@͚/XTKW!ҙIӎ+Etq3՘^79>8;٬Li'si¬m+4 u0[~S2RMO vc{H ڸuA2 `bE@][KL 1n6Z#k!>$uqT(Ѵ[K5MWٺJ۔$E 2˂oPN$2ZCg)g8X]"(ס զ"u-aKLbQD AVU|;@7#f'>š1$C.+ 0;$! f 50xAXU.~؁J_LUCk{gCÄ#lH] Ah@"i eSv6Da']䲚Xѱ3ޞقE/fQ ۘc#sjZ3k#ED&gm9镬`ꎷ^uc/= Ch@! );>4bQhN&dGtruXJ9иv ״uqw#ijz7guW=IQ72H[,ε36[%?Ћ+OK~CO{v3Y"K"f~+  {$ K͖ 9L$˒ԭjo{vO8R842d1lٙ)Bl<mn/b{ŃG p:ǻ]z97A)3&F[|)‗ wm\{wNfCuZg剀>N91Է;tJ;YO򡉿Gd> endobj 1703 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.011 391.62 439.269 402.634] /A << /S /GoTo /D (editing-objects) >> >> endobj 1707 0 obj << /D [1705 0 R /XYZ 71 757.862 null] >> endobj 1605 0 obj << /D [1705 0 R /XYZ 365.785 488.867 null] >> endobj 1708 0 obj << /D [1705 0 R /XYZ 72 472.773 null] >> endobj 1709 0 obj << /D [1705 0 R /XYZ 287.918 244.766 null] >> endobj 1710 0 obj << /D [1705 0 R /XYZ 409.003 202.549 null] >> endobj 1711 0 obj << /D [1705 0 R /XYZ 72 186.455 null] >> endobj 1704 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F66 186 0 R /F37 163 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1716 0 obj << /Length 924 /Filter /FlateDecode >> stream xW]o6} @̑5$K4iO]Qp6h(ߏ(KI< ,<<+]h@4>C hDPX1Ю/r.[&F <,G_e46zWp}i:*G521(rGmcRD澻AaPm@sw]ba٦v|>K{QW>T9|ki(Yx 11K4IAr ܠ^9YZrb񠠪N,brQOĶS ]AtIU%fTř0/d*5}0_,.Qꎯzlγ?Qxls?\N{.XjdP?hbeX@Ɩֶӄymu.l͹!\hG&˓*Ƙh7F$%[,B> endobj 1717 0 obj << /D [1715 0 R /XYZ 71 757.862 null] >> endobj 1714 0 obj << /Font << /F28 123 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1720 0 obj << /Length 1112 /Filter /FlateDecode >> stream xW[o6~ 0#%Q~,mX% Fm52It"%f- 0A}ws p;u=7;! =-p|n׋ rqeяJV͏4]ꍏ,edF/g73,-#oK+.X:aN^ )4s k ԯxBa`oٗ}Ҡw0,R>@sw80CbTC0nQۮ(2jA S* $":T6\ŕ')ITy8WZ89ߵ *Cbwմu;Ӈrx,80 sXnu44b}!xd"q&쐧wrz*QWg^@Q}8 FeTyp@ec +DѴr}D)-M3M6^bpdv.e{Y8aMF8냎3^,^[0Eh v܋=gU/,OB"ﱡ~F Bڴ{SmqP1 ˊBCTʛ}35q/?j(M3ޣd_$ %ݶiwQJXrPK=z:cSzkJ#%~(+Y3TOoGmIVڨ?tKM!-Ϻt.aD^3p3r[4DU_agnH\h{Ͼ/•=22\=̟:-WݥJP6=̱TA@zϸ endstream endobj 1719 0 obj << /Type /Page /Contents 1720 0 R /Resources 1718 0 R /MediaBox [0 0 612 792] /Parent 1712 0 R >> endobj 1721 0 obj << /D [1719 0 R /XYZ 71 757.862 null] >> endobj 1718 0 obj << /Font << /F28 123 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1724 0 obj << /Length 872 /Filter /FlateDecode >> stream xW[o0~WX ya]JCKL8EݯV|>7|x\>O{xs L5khy&a04HiȳpT}R+] 14:S,b4c84 Φ׽iW `eł.r<=5@lb`9D}1>`؆;Ȯ0{!.KM3rrMd2"j>ǒÒ (dΗal5ax8rؚ2[Ll›T9&ެ^_B=]rJlĢSLrpS˾vXdƮk剄P M@#C{"ڞ{pه" E4,nuV6b/cwY\ ~5+kFsZCB!]Qj_,M#֪Vu׭:cZ qdK5|av|hIGk-֘9C61cn߭ȶ=i'7K0֓زd'7c0Y5k64`w՜.0`[/ OTI& endstream endobj 1723 0 obj << /Type /Page /Contents 1724 0 R /Resources 1722 0 R /MediaBox [0 0 612 792] /Parent 1712 0 R >> endobj 1725 0 obj << /D [1723 0 R /XYZ 71 757.862 null] >> endobj 1722 0 obj << /Font << /F28 123 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1728 0 obj << /Length 2188 /Filter /FlateDecode >> stream xْ}o V-ǘ]~PtYέЩJI*K H@@_Vr4>WA=7" flf @ƚI*aj&y|$ 4oTI(SckZ1-'< wiqAic=:O><{=?QX( A, &P&ggך_}W0AY͝cGE͒;li3X;uXYkNA4q\QD$: XEg{z|RaPwLyfzFljݲօrmmfy[ _8c&YH_M OPv,Ҧ6sIuZf#?~r׶U9+SU&eZ.mqNoNm^@'~gziSm!9)FOg3%+Z,tc ϢbIr8ֱJgcuikU~킶:x|H=SAgc 'SQ>@1zD>W8ƈ #8OeSqZsWc2/(5lIL+̺: 3ۦyKUҳ][Zm[iGZ 'R~AumWj=% F jƸOtBWT |wx8pDH%+FZJ(!32f3)?&NL̈́fk_ YPglZ<~@7[K"1+6ja)ӒM񰨊ΔBDP{@qgGő`QqH!/(-1$)4" Sz9 WnoIUmm:>oë!.Ui=/I 澤%-)Z%MU{va)*GkW}E?BknӺ͗"ifk ;`d -m\Ӫ]~Hvn:@y.om-,t>]RNY(> ߡeIq& e:חf=o>:c66@P%{ˍJ+l H/_Y 5ev`$x7:Fr*|.%w/)Va[vcu^d-K1KFM7f] ӻtʟ R:llKHsO =ԥ"$$13VQ(vPaP[o@m{CW.*|sxs4M`U|ȰTky?հ쫠(V]=:0̛m41BZ|qPu =׷K52B[l\ѽM|uu(}OeoϻytpԲ 8R_*fоhŌߟݼK1l6-GwW ];u 0 Zx)j d ?SL-|”Է^3D!:f۠N hef3r/f8z'[Dͼ@F^~u-ݓSzt.vwtsLyF|p1CNm"St[!=pAp?`\Ƴʉi\b1\b.L \nV !j 9!Nl@bkp%Xpw='Pcޣ+C{>zOM> endobj 1729 0 obj << /D [1727 0 R /XYZ 71 757.862 null] >> endobj 1730 0 obj << /D [1727 0 R /XYZ 72 578.589 null] >> endobj 1731 0 obj << /D [1727 0 R /XYZ 72 564.652 null] >> endobj 1732 0 obj << /D [1727 0 R /XYZ 72 454.443 null] >> endobj 1733 0 obj << /D [1727 0 R /XYZ 72 440.506 null] >> endobj 1734 0 obj << /D [1727 0 R /XYZ 72 288.504 null] >> endobj 1735 0 obj << /D [1727 0 R /XYZ 72 274.567 null] >> endobj 1736 0 obj << /D [1727 0 R /XYZ 72 107.255 null] >> endobj 1726 0 obj << /Font << /F28 123 0 R /F67 187 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1742 0 obj << /Length 2833 /Filter /FlateDecode >> stream xkoF,vg9)-,^hR%)ٙH,_[Lpv^;;C\9ys~^srb߉ R\,,nm3q*z|jtMeL w 5=ߓ/?8Lª‘J"vgg 4qn ֵD < Og9FG #0MJ/ C ''TL}mWjf]~V+zf eh{_-k%{yIɵ$c/M|58Y|Kbem[3"/ Fy1S!s#á+hF:!P{ew\ᯆ0d2L_䭮 (<Ԃ3/r&oQIl73?tbkg4lMDjH^ lj%.g2tku$ ()+ѨcTUHWӋ3-ɘ-*vDjYrᲦoUmκ6F5h)GXͦLE~Mo6̮|vE$<~}͠&4}b:\/yg*vuy֕(KXg B/V7ͨ+"~"##ҸU^2mݮ͒dɯ/?ӫ((MK՘;ɒ S6w$;c!o+2H|DG Q( dGߙxd0)fnY.1a_gԦp;ڀNy@ۨ&S:Zѳteހ,0̪s1 o׺Ib~gHA_V03X&E)pƂ$"~050ق_g`fQm󶁙g t;E\_gA$ے^q82WUQT(->yi7p{ ([Cz͹=Pvم@=È:DߞN"&<1Dq=?L8h4!>s:'쭃 VP$Z;I]6zZ 6o6o{af%m(vQ` .]I +_ ?`N.tzp򧲝A_6?$,$e<)8dݶ'U5;OT v{M]m7zqu6Tn8i?ߓig!1 J~8Yjdwet\w~-4Tk*6=/˖S[p,}绣0"bPd<`+FxZGu|rgXJV-j|X`_wS99zyuiyȔ~qSqueޙK+K+|400ITnqs?+Bb%>5ҿ— I.DRp& d!n Zgm\j[M9[K25IG{c?Nl.ɻTN%GM?i ssA9>!HE3t^ wN2NOR,b^Р\^ʒBKR]qL֖Sb'i ya0M@(=A1:vY۽[ks?ۚLYlV uIt![UU3bf 5&K ӣ*{-Ǜ 쐊fOLB&ҭ''bYQ~<K>;{! XX endstream endobj 1741 0 obj << /Type /Page /Contents 1742 0 R /Resources 1740 0 R /MediaBox [0 0 612 792] /Parent 1712 0 R /Annots [ 1737 0 R 1738 0 R 1739 0 R ] >> endobj 1737 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [396.072 649.103 518.73 660.007] /A << /S /GoTo /D (a-node-type-without-children) >> >> endobj 1738 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [227.615 619.215 337.542 630.119] /A << /S /GoTo /D (a-node-type-with-children) >> >> endobj 1739 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.675 85.853 535.188 96.757] /A << /S /GoTo /D (shortcut-menus-on-nodes) >> >> endobj 1743 0 obj << /D [1741 0 R /XYZ 71 757.862 null] >> endobj 1744 0 obj << /D [1741 0 R /XYZ 72 720 null] >> endobj 1745 0 obj << /D [1741 0 R /XYZ 496.494 604.436 null] >> endobj 1746 0 obj << /D [1741 0 R /XYZ 72 588.342 null] >> endobj 1747 0 obj << /D [1741 0 R /XYZ 72 546.043 null] >> endobj 1748 0 obj << /D [1741 0 R /XYZ 72 532.106 null] >> endobj 1749 0 obj << /D [1741 0 R /XYZ 72 258.359 null] >> endobj 1750 0 obj << /D [1741 0 R /XYZ 72 244.421 null] >> endobj 1740 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1753 0 obj << /Length 3184 /Filter /FlateDecode >> stream xڭk  ͌Z4]q lIpmZ,|חrow 9|#WܽkD*Z? +"H~ٻ_ǾWy۬7ĞǿZ9-B?dE6/J}J,0Yw?0:WOvqD1<ՏwTk9aI_ߖ:V^{%[#= hMׁ! .e@:K[PfkzO@VxKs=~8_Gj@-0EāXb1H=9}67nw疶Loy4SV, ՉF*ޞ-0M(vU]gͩ*8Tmv q#2{v1S#Y$iE҈Dg-u9eB6+X\YJD2V" T)W` (HH{VB,!{;iT^NL:2hZ'Z 5#""GHuf"ZY)ZHrx+j -A/i Wi#1z aW %N_~r Ok>U;:7p"s,a,dxmh2bk, PcY~ /0sNdVtʼnƞUdI$@Ȫr?Ẵ83Ns,\%޷L$ƠI¤B=P>튴ihXyC1/!x?o Y}ˌ`'(B0bUtuʳ=JO# @N%;7/U܃̘R:QnW1djRd⃊.#2IV!&`j"@P27Ttl*Dw)ލgFԁMЃ Z3o5r^}-t/B9ULMRJ0" oe&ү `r{\(:?ȚV!J%:`2#)}C!t- RfƂ}\|AIܛH"N^vQ|Cߟ'ޜ7Rs;M6[|%EqsAxU\o7bs)%bT$VeeR"W^k h8bbbs)BHQ"0r*ۦJNhs^h/F=Nt`{/It[ZQsj!8gl8kdvl=`1Wl"B'cP 4&<ټpP@0 iT_|_]We3U}Ԯ' BPN#W5Mٞj5 \)=,y dRPK~cmݟӍ.wt^Na5>cbzqrjcF:o ޺j,uXGñ@Cw~  ly/-("ۮ]l_و֝R f]ѳ2>x ]CV OIo#8ps]۞1u蹔C] IЕIF%1/(.H3!c#W2m~i?a-H\g8'۷ϛ~{l ؚV۔;2=2nR#Fw=CMM:s1 q5 =U7lԄ3.Oh$yVwȀѻlOvkl|¢fۂ]SB 9V*bV:짇&c8}g#Xit/vQE=z*dK{=[Q~E n/%)Cn`M_ }uާj⭲4&(m `"{bⲎG#ˇ?N3/'t/Axixm 8kh ȇ'szBwg )-CXU` G)a`鹭>B/t0[ *Ē*U״`hC~tۆ*w- GƫN;Ud ihTZS۬a9u񺲭j'؀U{ 0 ` $x3 tKdSzDL5yx3" YqUƱވ:F[FE'>l;Yv -xe-h. 8bZ B*@^>X!/%c(a: >&̃8{>K˅> Ag@㠋HU9<8bFօ+dnLq']C8Mq-= w4ϡ$ꏽM l0Gk FEM Ƴӂ0h^p(7FH6,w>*'70abGiUU,oǺ$ gEv殓?ހ^4HtΒTKs#@S.!Jʛ#E*q,%Dpxukwe TOeN(_)vP'RBV/~;R endstream endobj 1752 0 obj << /Type /Page /Contents 1753 0 R /Resources 1751 0 R /MediaBox [0 0 612 792] /Parent 1759 0 R >> endobj 1754 0 obj << /D [1752 0 R /XYZ 71 757.862 null] >> endobj 1755 0 obj << /D [1752 0 R /XYZ 509.754 496.648 null] >> endobj 1756 0 obj << /D [1752 0 R /XYZ 72 480.554 null] >> endobj 1757 0 obj << /D [1752 0 R /XYZ 99.228 351.206 null] >> endobj 1758 0 obj << /D [1752 0 R /XYZ 72 335.112 null] >> endobj 1713 0 obj << /D [1752 0 R /XYZ 437.626 140.011 null] >> endobj 1751 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1762 0 obj << /Length 2547 /Filter /FlateDecode >> stream xZmo_!ΊDzI.MڻM+WVHZ;3ApY pлB?/|2/%zK,s ^eʲV,|??t_dB(W8^UJvDo/ެ/~@jE(%06Co0y'Vއ]qDhk$Zxq2~\[.. 7Eٗ Ҿ|ˣqB(Z244-;zշ^)ִ8[ݡ>I$8Ma{nYlͧuivRH[\Uaۙ'UR#H"jSnmФhX;E[!w+ok@&OorbBޘ2Exnєc1q0i sTЫn4phUG&c&uk9[")J]E—U~1~eV!OV% 0h(CUT rD/l0dK> 0jDɺ#mIb횶{K[Ih˺! @l袴*i塚!2+vU#.jшz6R f?IB"G4`y{t9aHğja[ՂqpF&4mC˄&mD%=h}Tƫ<ɇØ塐"Ld(JڅqAaĆiN~wmS1@PN۲!)*ٗMk,dlBY^ĂXyFCki(~]p䆣(gaFjSp|30D?-*w4P Os$5 xH3H˙6F' O,JxddqZۚ\e3[Nb !al B@Wg@gFJ+@95r؁I4z q3'=l"'1z^ĸUy(;&JbRyP qFQBOP$^00Ġ?Sfޛ$I I=L/xCelƺl?ZC*,tML(Q=#N1) *ؠ?9lQmVb)IX  &ZT? :EO),'' <D0kE)Q-y 3V0ݳ[SN*Ыp9LN+57Ny|p9,`{ NLr~B ANԄB#Hxzo2p ʯmvIƸB.he4iMOy/]M:wE*&xh5t<ڿė ` 4@Ow6^711La;iibtna&@  ?".~! R[~̈f,9s;}RFxFѲc +L&9ș"`LJ9/g%'Gsx҄{?Mifi?w9}0m[]-VVsVRlӟtrJt0jb^iw-=I eRTCG[>wswUq؀Sa AA_av~'AI]X( ZJ6p V3,/)_3+ldפ˝^qs[:`n챧?b,(7rx01YZb8<UYjH X. %X0Ue <}3Bj&Yx"ǦBKa)·.H5~\7!N}8|򣄰y$!Q6],!|k49 taW]iӻr)Fag-imc`D02 Ѯm7ti[,Mm?F&<ީK&-DA+eB rdޖ7Gh/R ת~_q}oz,MֻzRCc" ª@1V$}._y^zeU{Tʎmpv۹;< Uל ǻm}S?~9f%N/o{[ywʄ4#!p32.; ' nx[}6ETsviB}~> endobj 1763 0 obj << /D [1761 0 R /XYZ 71 757.862 null] >> endobj 1764 0 obj << /D [1761 0 R /XYZ 72 720 null] >> endobj 1765 0 obj << /D [1761 0 R /XYZ 72 602.279 null] >> endobj 1766 0 obj << /D [1761 0 R /XYZ 72 545.715 null] >> endobj 1767 0 obj << /D [1761 0 R /XYZ 72 324.997 null] >> endobj 1768 0 obj << /D [1761 0 R /XYZ 72 311.06 null] >> endobj 1760 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R /F65 185 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1772 0 obj << /Length 1296 /Filter /FlateDecode >> stream xWK6W(Ç%bEMz#ӶItE:^9-I6[ =$y'FF7w׼*R<(2"DT%I+-n^x5e,pxkԀW3oe UQp^ήfh ZRR"-2DTe\]%mfNlb(ƻ)JytVu6GZmGBYUg(cc;RpzyԺ'jJK υ1g7yGDb:N%c }Q\\=A$dr˫EcuCjX7ʜp I22vj"ۆpo#Or=W,Yan0OkwxBFՍ[* ytPTVH7eTYMAV7iى~X@GůzF/-ј~VZWw,…E< SzmQ]je_bjĀ/m{ Th'zh~K7Vu8}2/CR/:Y@ϫ5{Q}E}RLK`ymc6fRRr0_7p{2 +H%B^ܶU2E׽…jO_6*^J"q?)o=%oGi.>0_،Ln6 )d|$eE,/\=C e5ҟv)^hx,dLD_g8$<2S1~W!, tB9ܛKxzdu+bc7^ml2|veUƒ7ȗzI2IwW ,΍o. endstream endobj 1771 0 obj << /Type /Page /Contents 1772 0 R /Resources 1770 0 R /MediaBox [0 0 612 792] /Parent 1759 0 R >> endobj 1769 0 obj << /Type /XObject /Subtype /Image /Width 339 /Height 252 /BitsPerComponent 8 /Length 28539 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222S" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ߑcBc H$Zfnm͝*KiĊ$gqV\_Cy֋g.wi V"]Zi769wG6b3pqG{wZXB\m,pGVe5cz%וjkpO֕4)W fȱ%XH. a ZCp-jx/7-呣l6M=3z%ѽ?gkk>w~տ>_m8߼ZԮy/ƍQ$e/Ow_GC`I?ghޟ35\ 7_y/ƣ&Kz%tQp$ޟ34oO俙.y/ƳЯnmh%=34C;8EcŹ28,TܩƱxIDEYn >i7w @ ,LUQ2잠_zmmX^)J<Ou9MWgfQs| {gɤjnwi*40%b܀?R}8Q%s9k\#q$HhƬΕ6Nu]FtU_IgnquoeۙepB d8 9R0}tֿ쟏Sqq+x%YIk0f@#Qk`kTtsWQG5EtSB+Q_G"QG* "+Q_]r\B9emgU6RZX# $HVirSqlڤ\^,}B-BeEM^H=k;'MKYcmBz͠`en:711NT+'"_G;}CWoEyyۿn۬0rU=J5^Z}6[f<)mte\D`* ð[A;:Fgs*$ z<; \=T3+bx*!I2*OrG/+9 qeGUD&9ߔ Je/7o;^Ӯ-m< %ї*`qhArHbnuCyD iC.w s0kDxMΩF=Hmܧeh~!÷,u.[$hCecBCyb ?ҕ`+Q_G"QO ?G5ESԴ7F[Sŗ03Y.!K`p DZ}rH񖏨WpYX>ss 1#Ilʛq+z9P\G5EG7a@T yPY*SbK<د$Oݕ BF,BN:_Y[=*UM-N$dYESn@ ۯr&gWl<k-qFqUY7g0d `,cF:ՍzNIԵ/M6d%E'!R3.@( >д- ڽiE".`ylvsG* tax V.."E(L)!w|!6) ,d|Vgu//\XD͵i"0kn3ko&t+;ۋI,縶Id;fPJr AӠʇs=0HN$%7_j?(ʅsWO"E9+T9E9*i5j,"uy J[P3N=uzG}GRiqKfTG u![ʂE9*i5j,"uy J[P3N=\K<د$Oݕ BF,BN:Ԟ"Ԭty7KdhwDMېex'npB.Wð yED<,G)ԱU-3MѭTe KbR'qkiaylaMI\[oT|]fvvVҬf-N?2 QC@w(qn!ʂ~gWl<k-qFqT{]KM޺uique7ILF"]F}խ<:9v"1 W_o&t+;ۋI,縶Id;fPJr AӠʇs6WtP3zz֠e\JZQ玢0"+@ؙ\#oՔ֤J5͎q?PTjF.2.CFPTcF(Q\sth[:s{ ^ׅZ%b Wyi&B> H:߶ еds}Kk^Bnym`A[HV!|[-:l?ч?zun|y:n|y:m^^?z$VCNp_Xv'TKAmrMq-M<{.)pNWvqvFZIa"Aa^Mzd*M6+ʣ|`vX/׬;s%H& D=djyR8'+hH0QXJJbIʎsN@0 wtV۵H!ܯz|5N wnfRR۔C^޸C48/w7w/{x%y]#! i"$i$??l/J@/ף)?^qoi Ρyp"[ZyhT;#AFsW!u]:}B8-.m^ gdW~v%\2@Zmg2kuM #r0N# OU[MPG-Da*ɑp s !ƃ-M?\Y[0UUm(p8T~%M6\_5Dr^UuqUwxSC?WmhdX+Α158b^WbX NkVnܬnv5woڝ;R_KLp6 Ǜ(X$$$ 7W𮛣_w$Vd1&r!S˂n፸^N .icZ;Vd"@q,ѴcEŝC eUQ[N!kG_ģOӡ!rCa8l ߧX7w *CW/N㓀B |AN,o5X-"U-+_'lQ{]FZ^qO2ZE=:HDd}R>Qv׹^Ӽ=i Othj3i ,ȃAyU\(Rz WNmȱW"c>jqדmG$YD3 HIV##Bktf.#ݡLE4dpUv}g4s lu,c p8-} AVVEUAhJ/ 6r{>Mg7hDYxuUGfco[ly_n[,O Z&.dXZyg@(]kektFտG_Ώ1?=FտG_Ώ1?l}6Vb}:SbQı4M8oq1?sv{}RFԢ}>PADyɼOˀH2q&Ѯ.ҿ-7cKcYYgr_GX!qv4Fd%ہNxϓN{nȤ28(Qqv(CMPADyɼOˀH2vskp^E%Vǰ!B(@r*h~85z KO j@t&I崯 .ӐQ DPyW;k᷷-mJ'/n5 hM7|d,pwtEz=hVF1?b}:4=[5^j?6:F565O:]䙁ݻ`#sOXsujZnmk}mgݘv1A4-@k~5o)uW>W[f Сnr+oi:[Zfڛ7ps6Ѡalt"G^EEQIbmwef.e4+;Il縶IY r tYƕ_oZ~xiaaF` XmF,n&I`Hf$)$84hFտG_Ώ1?l}6Vb}:O{ٮ`)Q$N6 rq{L7Vrꐬ#]EeRRzO:#&}Kx I0:¿0Duٌam;u{Ѡ*h ٘z(=MF{'bM Iie{0ZD',@j_b-' \ssj&o'FvX؄y|ʡI75xm|Q:[Mjo Ϳ '9`tU7?ښVo.{vtkh}UG̪͞F .EB 0?1'v_NDڼ;{!|[.>iEo‚|@0tE5Fyk%ܖ#q"yi&O3B=$Ch5VI u >3DzS"EJ-<5zkhWtd/y(V6mPO?9+-oQ:.-ZPvF7eFՌt+a-(>ݤzzλx2pcP+ :k?ao|b^d4zOw@9C^{.60|{RJ)774uszGQVqwWw.2[I۪\ ?ưJ u]8l,2PHh%s|xNSny'uu3sjXp2IY~+yt%RK{^L6ӻ+BO3̌lP ȧkmB( xvぼ*i^Ў Y~%]m׮ODsWGP6M($WS>Qvd5m;—G3]/6w$$\۾ i4ۯ kVzŪZ*[\[}1G9b3<-/kӬέ4ZM-Kc](ƄeZqᰕ #HŠ9 (M:sswڝ1SQ '}q7C̺5,p8$oⷉEvznyo;pҪ2Inf13d- K8m"`86  _\ W ki&c9d3@>$St{;mWSrGŶs ޻D=zsV/It3DaXf@c,C€YYo^56]Mrp]q@NHIh:,b1di[V"Ȣ1:Yc}@3uy}sZ-AaKg4\[H&I¨=:-6m;B{{dK3fU'$=z~VegwJ[n+أD ;J˖'%#t>AVVEUAhJ4-?^sKoèYk][]^F9FY& F$,O 23.7c޲<=)CohźCsumXy؃zn|y0E7a^E7a^ ?տӪ7Yzzv|2x_TѴ6-S`b#pFj_Yg_*O  dDgj $bp~8 >,4ۇ&E*J| %$-¨2gi=J02 dU͋ F=5[\\Ki"ySO25˂zA hۛ[vF81'Am`Sp_F|=#Z>]eb4 ̂8č%*nl #:kyei\%7C2:.t~a@$UK<د$Oݕ BF,BN:Ԟ"Ԭty7KdhwDMېex'npBiX^ũs,Q$о7#T2T]eۋ{Hlu ˄yFBܙ g?0 9]>@.Ro?-:< Gߌv1~8Ol;_##[yw >|t<&MMQ7vZ#4&d>kyppMxM.ms>nnDFhL|@#'w8fOZk6Y71ܤlh$PnXE i l/#t!75 288 <&MMQ7vZ#4&d>kypqi{Ai2ku +rGQH Sp_F|)/ף=#Z>]eb4 ̂8č%*nl #:kyei\%7C2:.t~a@$UK<د$Oݕ BF,BN:7o]@KyeY)LA6/bk9K[h_a*pyuzmŽ6W:ta{WD,U1F 3\8Ol;_##[yw >|t\*Ͱ~|&3y< Uz[?BeM0".噤XS") 0|Syz燵(5*M62%mHOy [vv]Vy6YZIg=ŲK% 2PN:g,7fgź\# _S,cҹܪ>G?.`o'g3jrKoNMGyi7(Eǘ>c`uBF7@RWkNTsr =b>]ޛpo=*2qg*.QK3/uzkmSQe<|v+}Vܷ(Z0 ͷ6x y/$NErs+39U; z&i!p_E.n^}JG&C@DII~}7Qn6Ʋ+xG." of4?n lށ8Sڥ4>ifPmD8$'xP Ѽ/m5igخI4n@eGw *v]NTؾvlV6QʹTSHCx}+N-uk3F C4_E`ۤT83n;BkRP.PN:fYJdc{f7H=T t]1,+>;(k R"uRʻ vQLΟwlv߱N3&sƲ|45ZI3 a30-BF7ف»'@#n[#H (}6V0E7`oѰzh1^xMmtഹx-5^ E<YpFGfH涷{P4K"0;qMXh>ѴcEŝC eUQ[NWbisj[LW\jiZi Ѯ0E-V"v!D_2cw6XgCM@`;l6`c1In5h{XEIU<<bA-\Si3ҌwuĂi.KʾT- G]ۄk1 jJ`mֱ.ks[X6Ğq1ۃԍkvWS\=ͬ"$@YxL "{Y".ťڛIi8/+Ƌ qgAmOHvkh&p,yLmP.ِyIn5h{XEIU<<bA-]7;F$V#hTM/-xnUFT768Syvm6QԴB)mG!WC1&cw =*]?~jkkQyD&ĉ(CerqT|U4iZVnu - wQu KO`cXԱ6z}%e@deb@ `gw(o k^Iɬ-&Y"(X"9#  V]* i'Yy ~vfcI<='/H'Kkv(3Qs,]˵}g4s lu,c p8-} .yӨ|tyP|ui7ZַKn x9 l*ى0wc9mW7uiZLqewrks%4/+` _A 0&iV*#tyѦ9_#=9lTorow2Ō^Y9q :xcPNSny'uu3sjXp2I\o6Y5HBwTeHslݍc;gaUMSQʭq3yyd\Ă7iWմۛFRu k[hh6pbP*A٪mm {mE]2I':םŷ_ 4M~5}OJ3EXC$ݢ v(+;p!ҒxnXX$l]H # Z.$6fSEbQ~و_T4{7Eʹmq#C $n%Irw+B=utH>~%ĚnM.NO&bFߧѸqOQL?ohߧӨ?ohߧӨݏ#t>Rm6(-xwNB\|ҋ}cf˅Uzd𾩣ik,mZxR m#UFb&>y˽P!+$.pr@96_ Qolp1~s<-p,ftEw0ܪą$u`}Ҹ][A|YockiWLqquTYAJI#s[Pdҵt&; AqJ-.6Os%iȖbSś2ɳp d^XFqi{(Xn[6ݯ< b,|oݓ(cVcOj/,n|gX\Z8Y"-1\g>S1sJ#~RߧѸqOQL?okīZcɲ%pvW8;1\gxGu+,F{GeḾrR o HHh-# axoB8 EgM9|Guw ןfg)# _,bD=>IvVB= 8U=#Z>]eb4 ̂8č%*nl #:hoi:<\DjC.ƑăsT!rj`iu6'iu-dt;7Ui>d' 2y>kBEDd]ba˷U\#609`lj;;RwRië4vȦ<NX!~S m;KԵ=MbɳْI{?y[ǡ隭>E. d/崐w);3{:,fӠO"Hp0x 6774n?oiS774(*+oֽvz#:lA"qoW/_2J +nnd$i-Ss`n!ԅoC@( xvぼ*i^Ў U]?PmupɦMn F9mά\pFA5G_,bD=>IvVB= 8\6uI.mU$ 꿸Vped|I1qy쵩#Xgd()p<׭?kYx u7yEv 9 -YTήXIeq2j[y`S(mes1Ikpìg^ {/dH֮!fm~8'cqSxjMmu*$gDG#r2@d d3W[٤0d` rIcI'y?"X]ӋD78R !GF*.[1խ/PҠb;Ur>d%O^H=l]YZAVV3SE(l1QY?.!;kK2&۸\ț\78ᱱk:to Sk(`Ym(C(U]T[uX/ף)?ч?zu?ч?zu,o;IH^O Ψ [H/Yʚx\K(S4N=SNDXԚT;QmW;G'_XGa5s[sʪʣ8If@&A a# EEa)+'*9F9|nk]F-OnRd{X||ef̈Kyj@.\o vX[<*<̪7d Bd 8kx෻%XUF0ṕHLA]fo_arde,KY-ˑWˏvVlȄ"e+4|,e7nР I)45}GY4RgHVV(ٻbo#"2=ؾ s.}Ťv۔/pňT˟P?Ґ|y:`7-[Ces^\#Ȗ֢0Zc9\tfNP KWY`߼t]`~la{[_̲ZDB܌S#W+?[}6QL.mQ: 7n9$cqKFevy 1UF`[o9o\8xA}o/>[NT/AO emuGmݴV dc^+473 Jc~r Oyj0[)ç[[",20xq(Lga ɪk д5w{0Eyaw*@ڮmŽ6W:6Ʋ+xG. Z-ONd&GZzuż6f4pO7s,ȥGs\9:ZϨ%-Ա+oaOAt]YZAVV3SE(l۩GuGRXT[Z2d,s!s{gQnޱ4+U5=NW㿔\cLhx s^RZ7g袯O0Q=[4l}gJ [0,U('@/l}6Vb}:n.DUUgx9 SZ&VGO`B$GʯߘSq^F }[Pµ-.Qa}<ДݙH6ƶ kZv4?m lށ8f62蚔POY>' w*g~aNAy,m} K;d`X(PN03FIAVVEUAhJ4-?X>q^xR E76U@I'vو_Y.iWz .>#z#x$gn;lAW#ԮoG5MMUP2ǀxͶΡv-.fKIy^4XVf F wc=-] \)$as~cO0m6(-xwNB\|ҋ}cf˅QI;MGUHF}=%`:n#Jf[+[[-٤ x[J.pr q~X~%]m׮ODsWGP6M($WS>Q '}q7C̺5,p8$oⷉEvznyo;pҪ2Inf13d- K8m"`86  eKk;Kd)=3(:9z sVZ=3ZRk[ŝFb=I3kn[!KK6;KHx-"[#A${ %亝Y6Km_P=$gR1Ю@}~cg9Ԛ65i@Ƴlǚ *`nn|Io5+˽ܛ[i'Qj|qE{O:-e֝>7;F$WA[x. eJ pvcZ8Kk{ujQ@(?ohߧSw74n?ohqGZV5vr]ܺn$onKWsH$ t[*+oֽvz#:lA"qM;Oe֟o4ϴ ѩc'sH/g#u yQ"Mͳv7;10n񝆻!iYi ;qP@Q/mGH^x{-_Y_#!IF7ԑhRGZ[-vK3FV'hxgזͪV/ٵ?!!>Q)eS] tN!aa{k2tf%s+7Ϲd#,NwgQt^]=q]@6Xd]NJ`8F3|ȵ7}w4M.wk0+~ T Y^M -RhX 7p[' <3koaqNLmmdQkE` r #)+z8Ž@)HI ,Ė>{8 Z.$6fSEbQk:|_ޕh,XI/Ϊÿp$q=뱶 u.o ִKťVL|0ul؃-f +PDvVR[Xi!m٢$ T*>#+O۵e%唒~ CLyoqy0E7a^E7a^ ?տӪ7Yzzv|2x_TѴ6-Vu[mUf"\]m%>VryHT;,?[\\Ki"ySO25˂}2n |1S#5I_nvg]Q]Z[yynK.Uyinտ[\\Ki"ySO25˂e{}=%?ч?z`:}rH񖏨WpYX>ss 1#Ilʛq+z_YzmŽ6W:HH'Y " b.:S\:^u7Gx-< #W-)#SӭY-nI}nFd֩l.\GoUDqˏFyOZxWWri/FHmA>^,LQkpìg^ {/dH֮!fm~8'cq֭Kj6iR̩i 1&YuzgIy]ڴz6uq:o6Ь[ vF,y+ <>5Ʒ,zdxrKYda 1FŰ tk_h6I iv$r)VF( &<&MMQ7vZ#4&d>kypqi{Ai2ku +rGQH.V+I XhZDz~?ι >I{_XC}vP<0 -G+ٍLcxS߹:.mmo=T]dv XC#;*閺NjNsObi$}ΒHZ- JGw|e$|Es:|UB-ŧbG)#B alºMտLQM=[4l}u݃տFѠOo4ۖӶV \]Ǫi֒XHXk^#1J}j xJr-տ\ͪY/ٿ;6(KAC;|`ߙ [`8'x_+ }ڛB3VZEsyo@sqgmRY}ko4]Kp(R6Hm<(tۋGO[Xb9"nw1a'wJh+Ƈ2xWEӤ-m/]zeUR#;@_zy*ma UFwNvV;SQo iO -Oxq],X`Nh8o[{{HeO5P3"aNӜIHl4 WuogSt u@b\+>[Z:MgWSY%/]e lvWKLPЬ-%&F;fPJ'ӥ 4(}6V0E7`oѰzh1^xMmtഹx-5^ E<YpFGfH涷{P4K"0;qMXh>ѴcEŝC eUQ[NS&ӭ-"P9HT"q2E䪰#u- P߇[h~iϕٽmq 1qiqyntN@U$` vTl?u 4-VdХ[7bTG\\$F%%{p֙,1]UAT=طμRRKpi$g CqflAqyPADyɼOˀH2wM\ssj&o'FvX؄y|ʡI`v4Fd%ہNxi`ƣIrwFm~X;cҮ>=$Ch5VI u >3DzS"EJ-<4MƷkuyE=-J , anV{;+[]k Y\O $nNcԿӮ$Oqr^Uan:F#\g.Yjz$Oak6W:شSi-'xaY. P6u݌iZmKyRKۍB%M&?.E#t޽p=1.ԷjwIvnKoO,Q>g,#RLoķt/J@b}:ܪw̱c>wEA\H#|6>I]]iL@8 zU?Z\\Y4vڕ枉(L,RS}dy@PW%8ʀMwńZڹx*crD9B 2Ccr/!䷵6zhg2ٙ 2A|s2Hu?u+JkæBVK%D1 1#K:+/iVMo[*ܼ_6QÖ!\ 3>Nд'VIcڛ dɴw GE8E)'#ƻ{d/%ޣZm*y^Ko63lQOr I]]iM3sjXp2IH 1?b}:uo_Ώ1?:o_αm6QԴB)mG!WC1&cw +I;9l]mndf7T%el+$44; *DvQCn8Z4ڧ8+g'8 `ZSZsmF 1 'aƧO2OghԱdҲW}wWvVǦ\$)UcIT̤oFF]R #}^#W)8/##ҥ=FE4Bi H~^B81VPG(Gˍ TuGEi w͙0.ٖ"F'gG#eM@6vygxɠ -_Oi>eYؽ*Ol}FFHv5mg*GI,tI& 8^zԓV+4TMזȱ̦THȁ*csq~Y1gLI$fcI$$I$V>7AO775CS}ot/?ohߧMQ 9X|n?ok—SXqO~khWtd/y(V6mPO?9Ώڦ+>=:/lf/KonΓ|,mk-D}'̐7*[b3'̜`δ>?w۷;~9},tF k/T p[.n<.Cͷk2H#؋)[d ''Xnڰӭ"6ȱkob4f|8< i9RAcCq~F?ƨ}oMSAb?ưJ u]8l,2PHh%s|~7AU5QnHc,1ӓ~^t/HHh-# axoB8 Eeo;kH%rY2#eNFAl#]3N]I )j(FO'!m p$(7*8;sz3YYW6gjbRчݸ)e g OEuCs_ ɹ$Mi֖iC#"lбaF,0aY5of79B91hAbo]:ư]˩S+X( -"GqUE:; ʲӭ젵4K+qklJhN>D<O46O]+Q;Q@P2y<: 775CS}o: 74n?ojڦ(T,_ߧWA[x. eJ pvbڦ*Ʋj0߰1I or:rcO΂iYi ;qP@Q/mGHuB-:O[ڑ]]X%s$d aumbHaNQ@ 2y8uY5of79B91hAb+;AѭnmioڬPm'\ET;~U?1&Dnk]>"kk<@ JDžRW;~E$|kzuyZ/XϷ̋qMX0H#oN>En)kr΂mtIZ2e+I\iGVimonb8B(V6ZxGIբE|ȷݵT9j }.t9pj> endobj 1312 0 obj << /D [1771 0 R /XYZ 411.443 710.037 null] >> endobj 97 0 obj << /D [1771 0 R /XYZ 72 692.871 null] >> endobj 1774 0 obj << /D [1771 0 R /XYZ 72 602.141 null] >> endobj 1775 0 obj << /D [1771 0 R /XYZ 72 478.16 null] >> endobj 1776 0 obj << /D [1771 0 R /XYZ 274.449 157.198 null] >> endobj 1777 0 obj << /D [1771 0 R /XYZ 72 117.194 null] >> endobj 1770 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R >> /XObject << /Im42 1769 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 1781 0 obj << /Length 2346 /Filter /FlateDecode >> stream xYm >`{(pmgpCwg-v+ߗ)v,; y0*'S·] X%Ye/'`HWSDzY"V2rHc#0aĬ,"Q79Nb0p~eYoJooZ\`&?uu[ݡT'4;͜ofdRU," u? !K =vE}?fnʏ\mmJ!o Fru׫ԹoFN{YS 5-l}H̬Φb9 pՠD-Y09?;].2=O+3z);)4SuLm7H2(^B,#twmSMK8sc(3h]yZL7q$cb acB|6@KF̦?'n;~a^ y%F96,npx ӠEa[!̃ -Ľ4Pܨ1- mXũ5NcNq8c?]8աmT2h> <)R$_Zs ߜYٛ ~9g&گֆ)9 너ۛ!5un#&ybĐ/f *  TjG 1x!9D-DQ텯Wl~c93 7ϕրR.#ig vP@eGYLaN Sqg~²ewVz+fiL` +>$f0j9ԭY{66g=.Ym`?5壦̲?Cs(dԱ`8趩*t]Pn;S:bpl_ QoBd> endobj 1778 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [71.004 505.603 120.697 516.098] /A << /S /GoTo /D (fileeditor) >> >> endobj 1782 0 obj << /D [1780 0 R /XYZ 71 757.862 null] >> endobj 1783 0 obj << /D [1780 0 R /XYZ 72 640.145 null] >> endobj 1784 0 obj << /D [1780 0 R /XYZ 72 492.662 null] >> endobj 1785 0 obj << /D [1780 0 R /XYZ 72 188.944 null] >> endobj 1779 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1788 0 obj << /Length 1702 /Filter /FlateDecode >> stream xXK6WX1|[ ZMS$EBeɕ Iɔ iE6_rGz;z/V7<25f*1Unߑ#~ǂ$L@5ՂõL`bgmw+ -nK5.cb[W"sa EH"LJ%܉vX3"Q#91:&d1䤕lz4Zhة䮪/Ĵ(aJx, X| GQ/PEۈZ2mxoRU;i!ɨ>I mߜNK-: rU>I T)6Nt j+Oe0qtHp 汑_]QW4\aTNhX` `[7}žsRn .Pf4XȀ^Zu0q.b.h8 w:]7E%I@](}El}P-<9 :[r,K5C&i5 3(}cnHq*UcL㺖iЋO@ -ΪטwVdogHa Rc$pHJ4Hǜd,;U\'a}`qJb'$ufSDh73&Mća;F$eppAN]WW%_y.Z3 񨗺t&u^,+y}W}NBj&+ C_<2u[=M`0 K+p[( ^K x~.> endobj 1789 0 obj << /D [1787 0 R /XYZ 71 757.862 null] >> endobj 1790 0 obj << /D [1787 0 R /XYZ 72 658.078 null] >> endobj 1791 0 obj << /D [1787 0 R /XYZ 244.427 501.428 null] >> endobj 1792 0 obj << /D [1787 0 R /XYZ 72 461.424 null] >> endobj 1793 0 obj << /D [1787 0 R /XYZ 244.377 322.707 null] >> endobj 1794 0 obj << /D [1787 0 R /XYZ 72 254.872 null] >> endobj 1795 0 obj << /D [1787 0 R /XYZ 239.859 114.098 null] >> endobj 1786 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1798 0 obj << /Length 2113 /Filter /FlateDecode >> stream x]۸}*kDo^ds@DDdѕ%K69h>g8C:^轹,HYyYqmo2f˲ɖF& ^Էx'k):D_~_7p Af^yKU ^ޣ:yq÷&GGa̝7GyVȊ@gъDmGJ&YvS7 GY~_iذҽc8GHq[p)LP 6"IHη{~:eeAQi;YLcKo4,ߝe>!Zni@Y)3%̟6i Cݻ7eȢ'Br, 2}d3YM6e;h'6G-8޲GA?'$}+՝k$[=}- 6 8Iu  dc?@D mcm:8C(O.֢pNxIb؝dVl)LB/`lj8( 9lS2bW;-ѸS oH g|w9%o,(џ yFAOTAy+ִmogt#kPykNh`^Лc/juhN1)wR @E膪) |9RM2Ǵx`C ޡtהܰVlPeQ2z`iMOpl14AI 1ibF'RI]H,u[QA|(>H͓|JRSp1bB8SpM 6X4vt)gpe%qrT1{"IWjd%Ⴅ, wV[ف ta189Q~ޮC":..ibY3o qrYirBdh3^kS$\4un`ÚHOtJuX9\mHR -/ɟ(L50e$|h xxRYKގxB<ڱXHhCpc2#h Q龯աoWUj4frrH6.i8*VIt6 啙UQ˾s"dw/,˧=noe]oMln|hT!^1_WG}&]SgzJBtmC G?4z;iV7tY:Zvς!`&j# cEjԉZVT, v`a&Bدtڽ/kUbT`lp'Ʃw:0%յE~A {͚'5ÕdJ|<ҢϊˤxẠ'x8&Y"jҍw)stᨄ`;IHf Yo%S9C)y٠3u-DbUTX.X@q:Z6ò-lv> {ugG<` pAngCar'8ػ ,XOc9-( XЫYj(Z|RFxJ%9U)Z"WvYKgrvN1K|$Oף߹b(awl_w`.{ӫj G73 endstream endobj 1797 0 obj << /Type /Page /Contents 1798 0 R /Resources 1796 0 R /MediaBox [0 0 612 792] /Parent 1759 0 R >> endobj 1799 0 obj << /D [1797 0 R /XYZ 71 757.862 null] >> endobj 1800 0 obj << /D [1797 0 R /XYZ 72 670.033 null] >> endobj 1801 0 obj << /D [1797 0 R /XYZ 220.775 497.389 null] >> endobj 1802 0 obj << /D [1797 0 R /XYZ 72 463.362 null] >> endobj 1803 0 obj << /D [1797 0 R /XYZ 211.779 310.752 null] >> endobj 1804 0 obj << /D [1797 0 R /XYZ 72 276.725 null] >> endobj 1805 0 obj << /D [1797 0 R /XYZ 181.563 126.054 null] >> endobj 1806 0 obj << /D [1797 0 R /XYZ 72 99.986 null] >> endobj 898 0 obj << /D [1797 0 R /XYZ 72 99.986 null] >> endobj 1796 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1814 0 obj << /Length 2234 /Filter /FlateDecode >> stream xY[o~)}Ⱦ@v]7/IRbC*I9ë('v@l wCD۫]-O>F!"#"S*qmZsWf7-l8ᄭ>r?W (ӈEI 5pvKDH?uN෈]^ FR0m6*2'Aév<)+Wk\ͻ=n~]1ۺͷY;eMU}Ǽ*Ëlv_bW󧺇eT@M,qpRps oNй3gujFVX?<1@թ.yNl{g6TbqQz Xgpr`St!В2Zov8D8w4@f(%4@SlCxhlƦILHg)sR{wc 3}]ĸ#@_&!6??0%F 9hIA(e9lpR8bX{kjb OJ$=B@i* Aℇ9iB}A sާ%ښA!7xW8SfH*B𗢵u !zwJH)Ak:E ~tY@@g%C  d<VݍK;\efֆQca8 W3wam"pl{S{~]M)lW~A NjH2csL1s5-[^P#~edU&KUь5FmOǪ=4b,w͈ Dd |']XsiH@w[\4ngOW+^ejs8El̫0aw.3IE!\/ʼmvj _BB=Ю2チ1a-f.vٮ3Q]<Ͳ :pUYq:1%RHmuJqsL哪z &}^؋:21k㾛b{@`cp iv u7Awg %׀sp4Xݸy_pztw '$PO 7 N6]c9yo4kX'^}rnU˽"mxԖv7:lվp#l2;{av*s+&'`V)'guܸTdo8Ēc5t)h"F97dX c89 2`1)l׫OT;f 5wg 53;PswUOF,/ljb\%I-5:bum|v. LAYbw(Or.&M'  hE@BzѭNeq ]݄)eD2>- ˣJ.Df4/ .̫8Tv 1F}r32260@_JhE}t2Up 'D!T/%I<$뙃ehh'B{73zzcKrM1j>quQ8}lT6[({}CkgEsrB3k DәsZ\e7+[5bNsOrY-4ϵ p#|{ ё%2U۫:G[Kqj7Y%VO`W}PPM3%L,\ endstream endobj 1813 0 obj << /Type /Page /Contents 1814 0 R /Resources 1812 0 R /MediaBox [0 0 612 792] /Parent 1821 0 R /Annots [ 1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R ] >> endobj 1807 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [424.774 529.003 469.769 539.907] /A << /S /GoTo /D (example-6-defining-multiple-view-objects-in-a-hastraits-class) >> >> endobj 1808 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 471.265 116.941 479.792] /A << /S /GoTo /D (term-29) >> >> endobj 1809 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 451.414 123.467 462.198] /A << /S /GoTo /D (term-group) >> >> endobj 1810 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 435.399 115.606 443.927] /A << /S /GoTo /D (term-item) >> >> endobj 1811 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 417.466 149.768 426.333] /A << /S /GoTo /D (term-viewelement) >> >> endobj 1815 0 obj << /D [1813 0 R /XYZ 71 757.862 null] >> endobj 1816 0 obj << /D [1813 0 R /XYZ 219.47 715.238 null] >> endobj 101 0 obj << /D [1813 0 R /XYZ 72 681.201 null] >> endobj 1817 0 obj << /D [1813 0 R /XYZ 72 653.405 null] >> endobj 1818 0 obj << /D [1813 0 R /XYZ 72 598.19 null] >> endobj 1819 0 obj << /D [1813 0 R /XYZ 72 584.253 null] >> endobj 1820 0 obj << /D [1813 0 R /XYZ 72 300.869 null] >> endobj 1812 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F37 163 0 R /F62 183 0 R /F67 187 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1839 0 obj << /Length 3454 /Filter /FlateDecode >> stream xڭZY6~_GB߼)glLRJh%)_(̾ *XoTJEhuw*60^_w$XYwOm`}Wޖ6,Jowݼύ]]xn~-X*:MVܨjeǛSPF"ub@DukS[|Zwgox2ͤ"CXMXOap6#H8OmCnTg'c-$ T݅B) kE}*EMw Sݿ/$a=Q$?qD W[ tR;7Ua&} $ 'u/@H3*(HZQ[Gi6p rV'"Ug(/۬~نA~s<:/>{M۲ }枞w(X۶. :S$-v`L(pޛ 5Ue; 9E@D#n*/y(6*\5p}ŊX {yZ@MҎ˖'B J'6k|ϬuBȄmC5Js%$S5RAul 3yl- vH -}`=f`N<ӿ ە4K 0">/Ib|)kșQZH3[k67xtE|ȝGSU2ƆN6=.sy'Dmx;֙ZNMdR(Dlu~9[`?fQW E kCyaZN*G|iPı@L޻ѻmK '"z_NEl֖?rTKn$`y "Ly1q!;ZTE6Cc ((&fMUr Ʉ-jI̥"N \l[CDNshfuwoɋ`mɋH x"rld-7|R/^ 3W f0 QK( ĿW)A 7OJ^t)/y T us3ȋl,5C%'U'@ WԁC8Oqh8̞pƎ'mp➗r8-hQV2tX70MH-A+S͵C˗$|ssh@: GķIGQHs+{` Fp4)J f 3 [bԇ[T#i@ GKc `E~nN00<=@ r(@hiv#!J#f}Bct}thνAױ%*`&Ξnáf'F+Ĉx`~让r]vxag25;VīJ8Ep_O\?{Y}ez-6t?_Mp"#=+DjB N:c*$l^ߺL4nu4ZA'狠B D.=)L@#sI6~L٧hi5R^ }Ye66HE#),Tbd$C)Z^#8q6+~ւrަb󓲏e~Zj ނb`gUw <5_]'|΢;-gʙˁ6 >j-pv5aAX+W)Բ5lָ+1Yzl` f4)%; Rpq _ISC)ގ>C?]&W]"˹}6f^'9F7V,'/o80eC^g~ '|L0U l['fV`Eڷ~8`bOrZq gp^~֬jб cѴ;(B H/I[ 5SGt.]cx;87h'j}Y.3THw퐝(5D&|F@v^P,|q~jx)D>*5f)DhiV%tXiU로Qej, & ڌyTC!'0+/=-~%Hrr8DB>, csNɗjE*XDȋ*J**@Y\kOZ1<ܻ޷1[ֺ/3q#T$ lA4.Qu !]3:CFB:m) :5V"ԋn 5̈́1pYY6{.CxH`r'~ZnR4Ec@g[XűmX.W$ApVPQB3crBpB^ I.0D[͋gU "j]Fe,b4t Ps?A4Xq+O2U&X;^+ r7OlkR4z(/GeܦKWdVX'Лf.){8ތ.=v},<ˢͧ[0ŋ _wV4\D] <4njS7%yFj)EK$Y]*ہZt;S z\"hpAY3k^1$wWྒZ3!(Ic7KR&rYLІjC2?I/S^ *zb'` TӞ %2VGv }矄B,>^5Md]_;.Mn"> endobj 1822 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 614.973 105.375 627.466] /A << /S /GoTo /D (Hfootnote.32) >> >> endobj 1823 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [519.079 614.973 540.996 627.466] /A << /S /GoTo /D (term-class-attribute) >> >> endobj 1843 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 603.018 132.024 613.922] /A << /S /GoTo /D (term-class-attribute) >> >> endobj 1824 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [439.061 573.847 475.175 584.034] /A << /S /GoTo /D (term-attribute) >> >> endobj 1825 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.034 513.354 222.277 524.367] /A << /S /GoTo /D (term-mvc) >> >> endobj 1826 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.342 503.436 209.692 512.303] /A << /S /GoTo /D (term-model) >> >> endobj 1827 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.732 503.436 261.836 512.303] /A << /S /GoTo /D (term-29) >> >> endobj 1828 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [370.945 298.161 412.568 309.065] /A << /S /GoTo /D (term-controller) >> >> endobj 1829 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [216.746 288.243 252.172 297.11] /A << /S /GoTo /D (term-handler) >> >> endobj 1830 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.314 258.355 280.934 267.222] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1831 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.864 214.475 230.384 225.379] /A << /S /GoTo /D (term-object) >> >> endobj 1832 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.934 126.848 321.312 135.824] /A << /S /GoTo /D (term-live) >> >> endobj 1833 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.687 126.848 365.596 135.824] /A << /S /GoTo /D (term-modal) >> >> endobj 1840 0 obj << /D [1838 0 R /XYZ 71 757.862 null] >> endobj 1841 0 obj << /D [1838 0 R /XYZ 72 697.983 null] >> endobj 899 0 obj << /D [1838 0 R /XYZ 72 697.983 null] >> endobj 105 0 obj << /D [1838 0 R /XYZ 72 682.973 null] >> endobj 1842 0 obj << /D [1838 0 R /XYZ 114.411 630.081 null] >> endobj 1844 0 obj << /D [1838 0 R /XYZ 136.826 588.238 null] >> endobj 995 0 obj << /D [1838 0 R /XYZ 149.569 546.395 null] >> endobj 850 0 obj << /D [1838 0 R /XYZ 118.854 516.507 null] >> endobj 1035 0 obj << /D [1838 0 R /XYZ 120.996 486.619 null] >> endobj 897 0 obj << /D [1838 0 R /XYZ 102.436 456.731 null] >> endobj 1313 0 obj << /D [1838 0 R /XYZ 135.352 414.888 null] >> endobj 1845 0 obj << /D [1838 0 R /XYZ 107.407 385 null] >> endobj 857 0 obj << /D [1838 0 R /XYZ 105.036 355.112 null] >> endobj 852 0 obj << /D [1838 0 R /XYZ 112.408 313.269 null] >> endobj 851 0 obj << /D [1838 0 R /XYZ 118.864 271.426 null] >> endobj 853 0 obj << /D [1838 0 R /XYZ 111.85 241.538 null] >> endobj 856 0 obj << /D [1838 0 R /XYZ 96.896 199.695 null] >> endobj 1032 0 obj << /D [1838 0 R /XYZ 91.726 169.807 null] >> endobj 1034 0 obj << /D [1838 0 R /XYZ 118.296 127.964 null] >> endobj 1846 0 obj << /D [1838 0 R /XYZ 86.346 121.477 null] >> endobj 1837 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F67 187 0 R /F62 183 0 R /F37 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1864 0 obj << /Length 3200 /Filter /FlateDecode >> stream xڵZKϯ-T !uM\q` YdHjǓ_n<(P3+2Cя`.w<#1O|DD)_<Kʻvb K*4 xg~҅Vv #t?><pA *Id~=\aT.̬"%/?.t\Cy2! apço aa1/Wx𰿪xOOyOiZ]uۃ5~jm[8'I dվJb4H$ތ%'ѓ/7'O|YycƩSXKEm|g%P쾺A cӳBn a P=Gg]wD[ç- Y$XxlN}6!$Pʓ.ܹT Jy R)9!*Wr2 mt:6blu]v[9 (_x_PLoo`"0pL&uXX zhi-/z6D&P $P.ڔ&}\@)IH} .SgP1Z Tw%i M%E.UyC">HhCILu+>/oZZCN' 9".#u;Ö.Ig0sz 1VHB"蹜iq(Mκ` ^:R &HDXolj0=zǢ=>׳ZO./E $xXra\YmicӶNjF 'r_Pa]4Dju1T}q;a{i'aBخA%oB=c*ҜȽzΤ>21PWL'Dr"#$ W{D=ZU7b)s/pgY'1j2"X:k(X: )8BKL2iWzPrEoKd;}8<> O FAQ"ԫl0|]hur;NEB!bqIaDnW%#\AuJMG8IۼԺC Ia +'z㙍X Th#Sgش7ړ$/ݪZ聸4 ZlE:|p3=>-yz#$dx20 F e 7oXv!(iIdV¸}~n:z+;[+#gW"iCǓ7Ω}6ΆK$cD޶R=B}Tz ڿDȒ1 `\yz\޸6vd[L2+k+HK\+ܺۡ'1Vybr$VdLB.8EC );Ž~l܎ZET:ZZgNstr"QOaw3k$8|}w **^]h]C>w"Y#aNѓ;P_zO=# ](I oQo|lmi:lm'N[ckԺ,^K!wh}ƪVg)<~F_Iy/-e)DqbN:ُzFAnr8!‚y)fsi:I!a&;yn`jp8I>L.GRа-9Acc~Tpx5Uw`ɗO֗ny5)(97Pb'& 4لqXq!)"bOTT4 ,Z<f ٫Ux!ˮֹ**dk1BWGdE l:p î_hN0 v(@c!7݂Qש%ʗ!com|CU?+'4j vAv$Y8 +֓jT' 0-;ِ_Hs(>Jȹ١ilՌ?*" hS45)M~je\8I}2g GW_z3pn;4$vox.74.Ic4dDkl/rf>@Ux>"0T?`hCͨ=#fp(1ĝi O|UU'tQf-ykZ*\8arR=ZaVCg)NkU urYOhaQY7m ^뺩jl;LJ~J >v[mP4L`cIg2MrYwzv"oy*LO⌁]7ad?mnLe6AN5)` >EDq73,Ql #38Dve4%`)  |ؔ1<cZzW[}ͧ%E@*%彙C6c"+7-z}0Ac| go<*-RJ8GH7b×s N9SZԽCoʘ f;0ʈH)nA締 [XWIaӅ"yy=jzKS=i0vN[$"NogEtчߵ~[D(rcONWTR!F9= endstream endobj 1863 0 obj << /Type /Page /Contents 1864 0 R /Resources 1862 0 R /MediaBox [0 0 612 792] /Parent 1821 0 R /Annots [ 1834 0 R 1835 0 R 1836 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R ] >> endobj 1834 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.721 694.929 498.072 705.833] /A << /S /GoTo /D (term-model) >> >> endobj 1835 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [501.293 694.929 521.397 705.833] /A << /S /GoTo /D (term-29) >> >> endobj 1836 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.91 683.348 137.534 693.878] /A << /S /GoTo /D (term-controller) >> >> endobj 1848 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.863 635.153 211.106 646.167] /A << /S /GoTo /D (term-mvc) >> >> endobj 1849 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [316.202 595.348 332.58 604.324] /A << /S /GoTo /D (term-live) >> >> endobj 1850 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.849 595.348 375.758 604.324] /A << /S /GoTo /D (term-modal) >> >> endobj 1851 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.123 575.377 194.32 586.391] /A << /S /GoTo /D (term-instance) >> >> endobj 1852 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.391 509.624 207.53 520.638] /A << /S /GoTo /D (term-panel) >> >> endobj 1853 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [253.607 491.691 291.703 502.705] /A << /S /GoTo /D (term-trait-type) >> >> endobj 1854 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.905 491.691 365.526 502.705] /A << /S /GoTo /D (term-trait-attribute) >> >> endobj 1855 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.87 473.758 187.984 484.772] /A << /S /GoTo /D (term-attribute) >> >> endobj 1856 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.261 348.229 206.504 359.243] /A << /S /GoTo /D (term-mvc) >> >> endobj 1857 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.447 336.274 451.798 347.178] /A << /S /GoTo /D (term-model) >> >> endobj 1858 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.043 324.692 192.666 335.223] /A << /S /GoTo /D (term-controller) >> >> endobj 1859 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.135 270.521 299.257 281.534] /A << /S /GoTo /D (term-dialog-box) >> >> endobj 1860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [490.705 240.633 537.679 251.537] /Subtype/Link/A<> >> endobj 1861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [193.862 228.678 236.263 239.581] /Subtype/Link/A<> >> endobj 1865 0 obj << /D [1863 0 R /XYZ 71 757.862 null] >> endobj 847 0 obj << /D [1863 0 R /XYZ 100.772 710.037 null] >> endobj 1031 0 obj << /D [1863 0 R /XYZ 103.551 668.194 null] >> endobj 848 0 obj << /D [1863 0 R /XYZ 102.993 638.306 null] >> endobj 1033 0 obj << /D [1863 0 R /XYZ 119.611 596.463 null] >> endobj 1847 0 obj << /D [1863 0 R /XYZ 102.984 578.531 null] >> endobj 855 0 obj << /D [1863 0 R /XYZ 100.234 560.598 null] >> endobj 1315 0 obj << /D [1863 0 R /XYZ 164.243 530.71 null] >> endobj 1038 0 obj << /D [1863 0 R /XYZ 115.188 512.777 null] >> endobj 1866 0 obj << /D [1863 0 R /XYZ 95.791 494.844 null] >> endobj 854 0 obj << /D [1863 0 R /XYZ 135.71 476.912 null] >> endobj 1314 0 obj << /D [1863 0 R /XYZ 116.543 458.979 null] >> endobj 812 0 obj << /D [1863 0 R /XYZ 102.256 441.046 null] >> endobj 811 0 obj << /D [1863 0 R /XYZ 115.815 423.113 null] >> endobj 1867 0 obj << /D [1863 0 R /XYZ 98.192 405.181 null] >> endobj 849 0 obj << /D [1863 0 R /XYZ 96.348 351.382 null] >> endobj 1130 0 obj << /D [1863 0 R /XYZ 133.608 309.539 null] >> endobj 942 0 obj << /D [1863 0 R /XYZ 105.205 291.606 null] >> endobj 1036 0 obj << /D [1863 0 R /XYZ 106.311 273.674 null] >> endobj 1868 0 obj << /D [1863 0 R /XYZ 89.156 243.786 null] >> endobj 1869 0 obj << /D [1863 0 R /XYZ 72 229.674 null] >> endobj 1870 0 obj << /D [1863 0 R /XYZ 72 229.674 null] >> endobj 109 0 obj << /D [1863 0 R /XYZ 72 214.664 null] >> endobj 1871 0 obj << /D [1863 0 R /XYZ 72 139.929 null] >> endobj 1862 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1874 0 obj << /Length 1985 /Filter /FlateDecode >> stream xڭr6~ .tHl'u'ɴ.Lh[ E2(cI|8Nn>y8IRIeIM׈,Y,\&[s􌵿>lMmV Yȳmn/Go'狓NQ iU8RX%듏p4`R|_Nw\q}Ly)H+!H2lt] g˜ؿRپzUef3'zVwwٗUOcw_|ȁm &(r@{~rhv|fR+rdw& *}@7_cDPMrժXÀ:eGk@ꋿ(WΗ/^k d::j3 Q AxI#3]58B(;v=ʣآOԸ0XOʂ2@J]]HOͤQ%p$걼s.Z˙+6-FwPA䝧anBx!mG%ۗ/p7|ߝ65F<:9ڍثm=@աU 摻{PXO1zucoQdvAmsiGo(] ]]}z_>˼_B._|S]UWUy/F7.R#pMHcD]WDlrA-v_4uТChB"aQv]~mSm8a;+o2 2Ȏe@|v,V|3:EQ (7{\{ۣOByЗ,t$}C;!A0G(bU;x^hO查ͷFa*7z .hd-w]I:BfoH1ZCZC$C/v|nb*6?kv-c>nQ|Oİ7KKOX@Xp | h SbX fNo;S=ĠʃdjF!s)w "v6S-Q䃟GTڮ+!NLh\R`pOίK™ endstream endobj 1873 0 obj << /Type /Page /Contents 1874 0 R /Resources 1872 0 R /MediaBox [0 0 612 792] /Parent 1821 0 R >> endobj 1875 0 obj << /D [1873 0 R /XYZ 71 757.862 null] >> endobj 1872 0 obj << /Font << /F28 123 0 R /F37 163 0 R /F31 125 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1878 0 obj << /Length 323 /Filter /FlateDecode >> stream x͓=O0!{' HCՄ2 |Ȁϲ}FYQ*lrPAB;(lPf *:vPށ%pZANFiѳUr*bzHqݜ^ymjӁpHʘ|4 ?RFEh|VoK9L{-$b?2.PՒQiSr*j>rXTbQb#ɊZm3@ݬQ|t 6 &:>Yewľ endstream endobj 1877 0 obj << /Type /Page /Contents 1878 0 R /Resources 1876 0 R /MediaBox [0 0 612 792] /Parent 1821 0 R >> endobj 1879 0 obj << /D [1877 0 R /XYZ 71 757.862 null] >> endobj 113 0 obj << /D [1877 0 R /XYZ 72 720 null] >> endobj 1876 0 obj << /Font << /F28 123 0 R /F31 125 0 R /F62 183 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1881 0 obj [500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556] endobj 1882 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 1883 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 1884 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 1885 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 0 0 0 333 500 556 889 500 500 333 1000 500 333 944 0 0 0 0 0 0 556 556] endobj 1886 0 obj [556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 0 0 0 333 500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500 350 500] endobj 1887 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350] endobj 1888 0 obj [278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333] endobj 1889 0 obj [611 611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 0 0 0 278 556 500 1000 556 556 333 1000 667 333 1000 0 0 0 0 0 0 500 500] endobj 1890 0 obj << /Length1 1606 /Length2 15084 /Length3 0 /Length 15910 /Filter /FlateDecode >> stream xڭzctfݖul۶YmmۮbN%ض~1^kZs=)( rF.Nv@:a;#Pٔnj5503"vJU%u*Y yg9@Qla 01+hJI(%T@SGC1@dJ0sc0XU,!'!6SwcS\{SG[K'?K'!O@cMO0;'g'cGK{g laWn'?nٟH;cJp6uw+)O?`pq-쿺:zC{{w,Lmᘘ4vנHLjw(?$ M6S389;?)3D?DywFoC\0?7@Zx7n6HHOMLm,:&FXX[j:?\@gGy3ȫJmw՝U<:dLs;@ `dpr07aZdF _+ۙ5%Ά@?.)Gn1OUzfs-vЄv_P}iJQ]_zW[M}G‰4H EwE> Uo:y;~ ^)bƩz&;^T;##?k?=qZ]fJZm)y`5dMN,!o Q]+ .uW7M,q-,UiF4EgxrA#vpz9h|PE}dFP,nHie5+F +l2uط^a#vB7\k"mHǝ#w;C]RDM-. N:>ߍ`čXM45#1.@l8fl/oEz&Aȏ.40K&5j73zX y 6 ^`Zk[Ւ* V)Dd>{zޫ AoG@ʖ=(@[GYdu({>3/\KA̓$þJ(oEbJL"pzVri{\Q ^?X`0\r-u:qΠt(K%|l"WAK&ysB w3澋x KfN?L dަԅl)~R' ׻?T!na"Ap\w%_ls00 OWHF.!n8@;hOr?"9Vm 3.hHX!|=77CfX4R=\ 疮nS\̕5r<{/s2U&amJ,& ;$}x q^·@LD[j&l2߱1|åS>b2h85 ׵ 8;iu\F*Uw"<jHԪKr!OmH_OY<Z_O1AA+{d!YG֓+t@y0EB6ݜK8?j 6n4`X/??YP5vwpuɬ>G"z*UELێ)=9&frkE|)VʡQEB4$t-IHW3uYS (*B%xPh#?&DT7x-֯FG6ANlBNj/(n-IDg +~^%)j棯ōqޘ"iZQ(WqcWVDW$D>*p?qMs !.6S<#vJЩ'=Wgm^;x)d6Q+ґ+2zfixWR9<0LO V#,r>"OeE2<x9w)^`a,xrjBB PGZ{rRT 1phS*lFXɨ"D<2gaa]1lFN#0v}@tH&kUVmg`>!PO,̼<}"7]6FKsV)n2DaU7%+_LwpBEBoyk T+'" * N֣ilӁYM_5V^)u-bqk^UE_)OlK-g,z\GR'rT=#Y,g1U˯ˍc9ܫY@"''(pw@yzc%V+G)j9B˲8d`JVjh>CNeQYaJJx4TNij*FO sA$ BnY PseŸ8vk A T$`j"iHDzW m{p6jzZy vjO*ka6˵9 +tTWXk[|uWqI.Ċؠb* 2|NkͷT֙o 랗EUKb Aܗůn^p@\فi Jڷ-BE>aUC:h:ޮ1%IhD z]T_[~ɟA_įv_,[uH6>R9x6pԶw532{xk͚Rl0?KӌuY ɉ wFCY}$v)M;)ϙ>X6KF:K7Nuj0Χj `-gNgc^U!٬bho  U%9%D%3k'Ҍ2̹wp~l7t,be s2=A)`$y"0C Ea|"[dHݷT(2Ҧ&oA+_5dv%r<~g !rGj%;>d.*AbTiϞTg,L{BlGFSil&ԿgLbaW J(vIKn8<)FިR!-+rs`ݼ~FMe" {7L]^UwyecO^#mռ)fRdwW8?i B"Q~!]4i1v sŵ ¡yޡN1G3o5KoIpq |jgE&z,lƕ22;*3~UIVNo"E\cIuZS$h).k>%,ߪ#PE`?2\|dS֚Y1$8fF+to.Tg:717C0sor嶇̹T5',,k:vTsT "ACYv%)F)qt{] 0_V\d#K|Qdzi:RGY"mw)< ܵ`k.V'N:ّu^0A*4}]dpMm <:ׁi7vL NHď@Whqe!j4"2ؐ|S".qVuO ֢loJ;Zt=d;}b EK.[̇\ڡ,ZGqSGnE$0~™BYI(8j<ͳ1|0VG G?1G0]hY@Ǘ]ccHlYhO՝ Em9CKp{nKRltƣx5frܸ#LzLͽ8qmY|*0Xh,iWnt?-Id 6@uNmyB[7'G6<gi`=~+$ k${[qk{8"B7aќpp&͙c>!S 2"9ii"'(ֳV\>6Pd;,.^2$߷4 "5$,5&ܣ vJCF##j,'qGx~.uvۻb+$` l^yvn76MZI33\m)tz568n Ϣ?zi@'\gƬP:{mz>O T,\924Mq7Q4C.v,Tи;G_&#w=Á@0~yiPݴQl vEСڲ /@G1/Š|FcY4īnE,``qnP8YICϔ~Rj5Ɵ1Qۥl|dc[qf2Ib3k j{d&/W۩,#x9yr,"LS99≋XTbxX} :<..Q&).?G;|aNP-!@q4}¾,o> A̤(:!]hj-^9 |-DKPhCzd#uA"xVDG;}L(`Ud^t%cmi=zWyn"Ϧ>䀭ʤ࿷F|Cm7G(TNFhDP S9tXӊbda X?.-;!j]Rf*ݺC#Ph?Gs~\^z/lC.^N |q+6o2XN:l/CV0 4kYAWT8ID>(6cdq]╅`ʺW1N-9Ѣ̳,l$&/Q"+5 gsF'&ܡƜ?=~M3d$\l UkҲGB//:g$¿9KAC:@I+O wDd|b(`r @FFBubu_47uD,J ~Z>RUfSr᰺\{ o쑡U{^u&5LK&4$@ r0ſX:4 ; K/A6ϖ?wK*z;13I_^j,yQ*f+eB+iGo_[TINxҀ|.=iB>%m$)Vl ޛ8Sw&'WImYfiTC}6!ҪI =_6ֻ53|3^SCbdOlz5 yomYt+OjiəU'Q8 -gY CgDFXŌ$JZFб-:%K~Ƿ&Uq|sh{"FuRBhkل2UVz_Z>,noi7[T-o/ׄ>@L-0㬁UJG6WGڜ9ߟ- Å +׻hv,DqRruF[Di!|vҵqOQQZtGtr5u9yYnj~]jcq7WJLSH^ۙ|@ٷҥi|.3%GNۈ8- 䇜Xn#jW]v[~le`gJ)6)TB g07n|Bg2D2nK%[QIUᛸvqCe,*&_X*7$zeFBztDo$::;ɚWEŨ9K! y:AU' nIo#L4Ftz6/CTC2$5 ǝd.N+|`ohDm L,a]t'Ȼ{tqhSjXyYNjQKT0&B ?5Y- 2x߿gw5 ?@}%elE0e1jd_0L;.w 湎eK gȭGWnVInf .A5=wk Vָ&)aܼOe6:<7XXL5 JC ~Ԑul˴Tb #G,U?=}6A45sOF-.ew rkoP@@#( o%rwHQ ʅQ6_H$a2TsG9 wcJ}|T:(vsj' r6r˯oپopDR _l!zC)M@@6~} V; ]4C@+#2 rI=tr6 տPo4~y9L-6!ѻ*FA;T#Orh_YXk>޽g`br%4I@ jB^ٍ<7%O[L7Dɕ\,*n6V3 lVn+fB9 8Yjj'Rk. T1`*jAfzyԟ9'le{ Z1|3lRB Se[Yͦ!jpV{u,1? j|*\ ~\SP}V*Cթ}\2*insJ}$hUKa}@JT]QKaD}``y}3iFHB߉ MAē}EC*g5r>g3]J:ߧs͚?B;&ɝρH6-1 YJA0)_ߓEհ<2S6q{q;wt/j/Gi_Ae "K |&fjЏ 8QV" 25J会{o8$H:@w dMljw)ȊXF&¨47V['YMȽv[Hgx1qQ.3oվ\@^>XD8 ҁ 6Չ}%Efcg~j~ jʏ@| wյ z t=^% EwE!# 2/4Ր355,o譄 ?YXKC^/ q N-$om'XrRag^K=w3v3F/^!17~2:@SکuԴ8JRNIo"DV\3O3r7Yz^Zm/H.alBN]#T#dY1 ێ1~2')0,,PQ+״s1$.I$P;PNm[ŅJA߾7N[iϛ,d֠M=B;:׋{6D)]بY绊vEqs#YC:\C?jLeq⋐}^4%l_B6Yw>,I BMҰaoENRϰ2ZbC~z(Y!a}%`72+j2ۢOdMըXf~5(?޹!z-m rL8ї3(4Z!H˂NEa]LYaש !$Ի? 9O")_gOb.zZ?=_ICsr&oq ?g(Y츊Zt?axUz3ImP`oY|,όcr3$=b|hIWa8 my0)3< =M|u u9SA *\qXVDq%+?cN-Fi(?Vsߎy[aC\O`j~,vA. A9\}J$1OZou: )ma{bvy~3Xm\ߘ1j^K&N7ǛX`c\֟@ BݬmjvO$g)j\2R h Ѿ%!IWP [miŅۀ>2Apvń<)@q J|KnເaOS@V0/ԤY%/e ->O 9c7Ʊɲ^[uU"h qJ@8CgK),}B0au*F}o,~š* v>[87'ʓ2Q4G26M> r &Fzp~μc!"KF1u Y*R@N;gֺ<~˽w-x!“sדgjhN ^[L54{C3>'W_J=3r}HB*\"BU=(#d1ZEceiqN\Q?H-mG}h(Bl[0e4c4ءrbP97͘{Uk߂QYlJO3_UX#|K$Cy@5%z䒋PoݑKE(k E$R7=\0d) CDh%O⶟H U\#8^mTU+HRUi8T5m!-ص*o*͐ҏkHaso%1M1FN6#CVR2h\H8\.|W1JI¯@5?kW+9hN\e}wjg\~)f8)Wv⡯fw==nAFE_(U?NF:xG*h(>g䓕v`^H[ĆMjIPM^ND*lu|/͸In.8l6Iqxu$wYc+0ȅ8X2mDHsv+;$#. =8ES=WnJXKO$/ tjYb; d-A_K9Knxx1~WŠm w%_5'kD(L!maL4U3Y `pw Ap vYP^󑣈 q5 U1:_Õ?Q?H-?JI,<33D?x~pk$+liMD`lxIycdrڪ?V<5IYY=3P9!1Pw-ZiQų PG ,c>:]R/DŽRg 2h~ASWqMޚE .2HSvP ޷kk* j@QkE')~h-c`{W*<7'dѻ\\.mbeIHUU`/D]ʎ-R8QSEE-&Ot@xຏiڵxWW:nlDlYyeK/L)SA'- /hՋ7=[[6WmNѝzyYuoJ`2!%7/ܗ, endstream endobj 1891 0 obj << /Type /FontDescriptor /FontName /OUFMHC+NimbusMonL-Bold /Flags 4 /FontBBox [-43 -278 681 871] /Ascent 623 /CapHeight 552 /Descent -126 /ItalicAngle 0 /StemV 101 /XHeight 439 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/a/at/b/backslash/c/colon/comma/d/e/f/g/greater/h/i/j/k/l/m/n/o/p/parenleft/period/q/r/s/t/three/two/u/underscore/v/w/x/y) /FontFile 1890 0 R >> endobj 1892 0 obj << /Length1 1612 /Length2 18193 /Length3 0 /Length 19032 /Filter /FlateDecode >> stream xڬc%Yii۶m۶UmUڶmҶ[98ߏ=Ƴ"b͘3bI iML\hrFβv2J殀FVhRRa'SCK{;CS. @`&;x:Y[(T)iOzt4p3w5s }Qba 01+hJʉ(TvN6W#Kc)% `Ҝb : Ɩz:8:Z:;X:̝ \`igljv3rpaL7ؿyX`o7 bhi p1p')o`Nlig_ hNN&6abӝUo`_,]Mm4vA302n?}nNj?3C' ^oJt}"7H"O% -jc#ghw0?o+p?MMGo3 @ooeW31u3迚 ed`?g?_44ԨMW_]T<ڛ?BBoڿH`_0u5tqh-_tFYQv13;^鯪zmޘ;*-3ݥ#wxRDd8ءAg}ZgGM0]4Wҙh/ yOU>/1e_&Y;a^ \z6^8t3Ob$O~Ʃh@ȵgd'Oc#C=`}89P܆~gI.N _`on܊ tIQ.ךCMޠaVs9.eʹLc,5QN72NHY)wZPuh [y6cǞDA-hr:;˵R4aKwm8%fy-ME\4+n:jDbėה/1V~KSu8]E&{ OA, rIeڇp,9B//' LOk8Vc T؃ЏQ6!+GC y~VYvs7I& ո+_@j5tLKTyo$u?4u`T9ԛz ҁqVUxS dp1kj#b1/ P R{x eր@nz5UFK8wH`FY)=+K."bd v>0[OռUzu`KthNYW!%՛T aTozP+$ytт;|ezE=IYGDV΢Ɉr3{t7i=$ |F B>>i6!Jka?YpqW~hNNw+72x,ko8O.gǫe52gE(&ȡ{nӯS=mc5Ap[^^=:1#z> j`~+y.w]`!=hp*/_v>ώu+.%|l?ZĶت U:7l|a?5(ߦ3XI1zz]' xߙP2}+ ΢ܚ(cfpCVhGoZ(YPA⅏4۔*#ۡT\>T(@$&HDK{&vcG?Xg UqoBե[WJI?@q(5CKOXf 2pcEnjo޺5@3 #(s^A!D9ԀtH]q[w~[(֗a՝>{#Hi=HW1~ҽ)FM $ZJC=2\q_ YLP7 $i{ /W7bCU]JEu~Z/>3>D_Vk0NBHYiWoNgU5`dk6`RX+}sCj>~*4^{_-<'>)kt]8[,M;As 2!+i!}T(2tHItzTuDR^s 96V!>K&^K~oa*K 'Ùf`=)-\BS蘅YCE?+T3i#p Z l8q|߭^X/_%gL ߙ}ڪ=x ] ݳ洰K?e]!\匡% `̋@WtA9I !بMv<wZ|7] wئݜk;l۲[rsg0 KPeKpm)G8ŚKAͮ?5<+Ϊ6K^ S77=|x a|<vdQRXlj!<4yo՟i4Wx [BIE>}Ш| UH:=F,O^{t]SS@'RJΩ7K u@ 0MxP79 R uVM!yKbfYf(^x뇖*F4S5p ٕ\ݲu"zY,-Ѿ }ZvbwiZbeiBRS/O0oxi?_V CbD@*?Q({s7vbO [iAlo2B^,v u!i=N;?JY) 1DCgv Y˽C GMfeB*t [)NJ`"E,ֽ1B.@!BfZ<`r0p.Jn'bMw"]ib*ǐG%2T=c!RخJ^iǖLȃ ~DVv[ؖ(_,:.. Ȍ7&3 w_r6~63;Di%t DJ+], h!O\z岀hnLIzױaKNԶQZ}ru%t>rHtÉc"hN0^掾/|(`b (YvD'/dxpݮ[Ō 3@M1o-\k0$%pg 0A?=Sxn'/7ݢLi6C}NOw>#oK* Ѡ)h"#6F7[ (G('o85ژlǎ:XWm*'q@^:hl_{^ܿHڜ)Z+!ߌ``eѡgF!VA0²  vX,1wK".czYⴧwg_ok[-˙JS Vs:"rdNdqW|n7-(hOj(hwV84¢nOPP#:>&b(Ʃ֑I `]`u R&ivQKDWȰ{糖K"5)2JA2'-=nj="A~nYd`iV`µwiBl Gs_X/2Уtby:R}]]Tm€GVdT^F\|N~)E#VGUƎH>k!F%yY6"_QKLeÿ} b%E+b"qd1#c%Sgm6W춽 KE=GĘ7r6*~ŵ|ԤU!rwZ89wJI 2qZYZͯ* 0lzXX5iMڭJo& ^|h}i?Q->{P2ޫHS%o:L#걃*NAiJԒtN4[.])-^'4 @1¸Z1ؑuʏݿ C`ݥ\P4+L)#tGL"jN< ͋wL,ǯw7!kz25eT\9rش ){23!x+72=1*qվT_2w7L5=H=s{sY[ABs"ڢZqHlT[οDPPWb 땋a(G~-GD<_=^ly6Q#QRWvkA{P4x]b©UΟ48W,RA~ü'E^@) B K+l1fMuhUq9 *WY_oAiX1{e1:"Ĕ3BW n"3feu4蛒 ,Ó_Fbӧ7bĥ;/]3tyw=!,Pmβ(u1 L%7y½J8N*4)p .V!!a"e;&tWisŏ+nlm--.C >k TY2 / B }rv.hw6i YFuB{d;v;hFŧCbWkJf7S]ak}d]G1wbꉐ П 5<1o*ACCYBFfW-.VKռ  -4TJBF0i (BO ThXy˖?.L! Hq[zGӜTtfQ[a*v[:~bཚ'1Z$'-?S&l.!%D:Q';ve{Q4ݍ~bj Ԇol~Tރy 􉩒{}>q%JlR9M3 5-8=v~xRX8J'U-0瘄&핀Q[ͅsv\/1nyp]=ZGXTM)M8[2&!-SZ3VqU)@Zik ,rJPWKvw%v7^3/džA]N$ëHD(PJ]xӨ|%,ٟ&,[=+*d;Ilha{Y5pz݃o7L0Km~yooMPxזE]PqTJF"ǩd;Nxx 1~ dBo{Z+5CI,i|U__=nPp6᳼M1^]KM K$>TS~E}W|>z5e?*8{V]H?i@ޒ?-xkpWkq_F IF&;i0!h4I7\3B{g8;vH23;~gOH7X֧7/k-6~=X:FF3y=:a=<8Z闎6yB~62NfÕpf4)ᬂ0k]{c)ߚ+`y"}w?3? B$m@j::K*R+"VMw}E=%i,zgᖴb]5)9C8t]ff@r Uī(|F]W04ohRtF) _g=4ROD/hϲFq}w6DyDJ&օ!k H 69,99 AOWlJivEeJm:SOuU,g[KuQ$]nx&q 9K;ȝ佨Kd蟧}0|* o[ֿe|mZ']!55 n* XϫFVW<{ޗ%L;u"\4ofXxrڳ,h a{nu1 Q.# 0hM/,h٠8ݍ}6U9S$~a~1mL)ͥ"ΗSvm`x!}sq f n٢mN@@2v]( ?7绞p.= W!_GBED;ʭ 1yo; N:($]&R)96K7g=V%E鱂be.k N#n5AOBckmҰ IgmχDZwN~HQjCvԍIw(鬆_Z*c%?{T$&77ޛmԑ_tz3r/a7y&mDzl_ƴᛴ9FigzWN/1l܍Y'ΰ,i44s6pø|kI'MYБ WY/)N$+nNUsb&hvڭ$p|[5P5S~Lu9[/Aڃ/{Xwu(g;CpgPsiI-[]^ըq;o Y5Iʏl|rd6:Ucɏ0l[IĽl!7 8#߱fwCz<$ܔ߅~&7r@E.pS[xu6^L]#2ķ7j̲%oU@Ea{ k둯VH8SdKiPPnHK{'vrH Ģ\t)B.@9|j2oeĒa1Ws?9ۄn|m8U9]VdͽSJiI۶B^.VEJ&Q1՛յ\z~.Hj,. nمTßrFnvhcQ'ى8][kF0(~JJ$wyj J;2_&z|jXtX싦W)a'|!%9}|*&IFdt+H*ӕay*ߨGQA<.L3*y<-aKg[U(4 @Pted-F q%%ZOwsCUSw Gp+ F7 ̫S"|~+{ۢ@nf h{XځKFxZHYVN8c9zby# %svش,a29-a wlq[HGٸ14wj~OvLz0Π4`yV5V:-fL?uFzEJ~m*SY11@NG"@,~,5"Pʡ0AFZx>:xk\`Q>q8ӭjKkӅF+̋x+xv$?Ѭ6P<9~.խlWzڴfxHsRǒBH)M mZ} Qζ2pK_dS 2xXs;^Ẹqyܶ21y#%U@Um!S4p@j[*|hnsxQ?;yἍjy-<&VURo H+%z<.n-',2B*LCTi΀ "1WgxeֹbW5Bwzh]UKcz-KM-8T3Ť!q$k_}8[oY1>7LsCJsVCL>d1W C"dVd$7f( ŽA1a5c!ƘE>^~ҏ0xB_*bܕ>*;5`˅J_.[ 1NXTAc;<>w[QPa~U2%/ZzaJZ񽚤e)4Ȓ9˒Gy]{V=l5r})\n(-«{#ִ/T+7r*:v4 8^WAܦOZq Y,2L2/iA3h"Q/4Ot&gUtlkMRRbkߪש^X`)A܏wԁ>b,-_@GA'f(~w-G9ؑƀ*3 t eёHqcg?-#-nF^|rv(/]~5=_uGϯ>L:X,a(#I^F&jaYJ{?p'N ݠҽ@`WX{ڽIyTN^mk~sylJf:-m"%vF y8ÈG"8K"|0oH,tg[kBAC{2ł4QO:$EB>71*! hyS!i;KXW *7XU+>0Z&reK6 oTC $X"s7"]|*凴#'T^ N}K_;l ٕFH'wbȂY^K?j45O62F#K\8 ¥2{tL8A%d+tkr!)nf\M'rƭZz?7LHۅnC%vcy8߷Xc}PwtAXEP[aGsl34}8 IEh#0O H0_̞_y@%0"a.޽IеU:3D;/V,t]xaf 9N5 dSȋ*7$:_ +쌂Xݔ1%\(G@T8+i%l9* /n~I_=a8ڧDu n PG+ v+V'F6V1:yx?$jmKߗSPO/,oFh"ya [y7uizOs=x G>E*$!]^\V|LV~tOWO!% U_+۹s[ԷZ<ݐTՕ'{?8PV^Ot*- tIHcl44TX܀[z|3 S{#8 O][0ɳyg]ڢ$֝>h 43l: tI3%Y&#jf/fާ՘OD>_ 5]Zp?te,3!= uC#tkzgL,|cI69 UO_0U 7QVhc! 6ÝIʍ@V:]atnx*XNMdd+U?<9mc̶χF.6tNS6L`Ceؒ !~R`RRFM/~0 O~c!Rv R=q]gd5g~P&37ȁ.I0 ԮV)ضR:Vnan Z:8 7O)Kkhν(RYkݴ ~[ QUTTA$^O jF!7+)s35᭮lee})l찫׿܋ʷFk'm枑+fͨXRź^ _A9< J=,LE^Gsz(O;@Zf5#-Z<͞ N:7 몒_gkҞ$GB'Gֱ8AYR#V[B2Ùrݩjc?>Z)@ΓѲ)r]#dK/ǽE}<r=0a$0{AU7"+7p{EcKLoFȊ^Xs2 Y7+R*PVvMl%KBYa<(m.n7bnĐy: R׺`@xGBO[* *( 8>AmvJ ;85 tLʦO\orvQ }Nƣxcjd1^ ^Nϗ+ Z֋$lkA*;XiBfet )k컗=n}=RԐc@m༖i ǾS^#_1L@>G_KדrظdJߟ|X4^ZhLWHQy[k"I$p8KDeڪg9cP6@fQ>&rqsE8{=_ld2w9ltE`Kr=؟Q|>癗K=N{YK% vikZ}[ku惘ApOf L#磇ĥ/]\!˫}QfcpRzNN HwiJO7&&jqK?GT 1‚g8l9&8c[sdf9=)+uoJi~맑Y3#TjE.Ѧnx2=*A7q_/݌2sBbO=F.C0Nc$`v0cT0|?ϣO?=~LLf73Hi*Q1Rˎ" ͭ߆mJυ D GbNaXifWSw\AXt<֭>5 ^-.5hhvɢXcGj_zr",fp{tbXwRe6ɰ1XomGR2 ]ֺ>[,yHW /"T%t͞Dr(N1[6^ʭⓎq>'Z?f0b2*(vA~cǶȨ}r P_j(u}ޏх3.8t=2; qݫar47zO 8`1c4J+HTM;S }`)XnjD}rrp9 IğAb)iko)[&DЌDJ";<Kks)RɅ7ҲL( f`:RW]Uܚ=46< وuA5O+HjO1LQ2I\\/FyH'wڜgPp+4pwWu@KuS *:^[/kKOWdPYY fU<~Xs}wxm_{ސy[rmd`cտӒLED7cJW_n/sAnqTcD 1Jhpc|꯴|#j2 `qLOu •R۞f *(ơwfv]t#ס GI^t9?Ʉ9 >Ru3\+/;!lLZg bE.勇sպXO,Z9"{[BU`CL'6 Xۯ $"`js~]̋)jY5,?ܣ3 _$}ԇh'dsN!x4$_8q3 0~.h >T"!fg 94ߝհP+.XԠΊnϤU@M'VУ<Jr8)_8y.1FmJS쥕rz] Y ^pFU `Z蘆-* -R0n& [K̞C;SDvd&3+ 6%qTЦ3x4IoH{BoN4 1 >sŊxed EQr+1qo_>{Pav0lǃm >:؊l.tvCÿyYyo1H6P0U\p *̄؂c@ 3]g,I[B≎{rdn$Qō.?Bᚕ%"W![ha! y!1Exn閥8:~6sV_$#-G>AEgͻNYD2cQ-UY l50&Qs$0 x,A'و:*: 5VgReNdh(־N(:24M&GIm]g쨔皍v B{CD$ݟRպllt;!$3 ?- 4Кu(WWZE1QF)[%VuP( ՎP> gA0?:&(vPR[bh:̧vw1MϟPeIjkIYЧVGs`f\fIg24\ t<д@`E;E8G1HB&P\)έPɽ&͉$ct~,,yCME*=3槝@Jr#IkW SM\77 +5u Ry8}a6Qg]3x6r`xLS]X^`>cS+g+%a*%%c*WH.OqisNyz kȳ9wGFbIWcilVqdYYC*7\ieX$)>#ՀqIq(9Fd]te<>^-{b_V@z}'3fuPԻyǛ40*q?Ia QRȎNI{KFGK.[1'XmqmM~պ_T6 G󦨵`@S`)5PGq0*\`"i$0- ){mQuB <ن\]ƱUwna|+ebԊD%-BѺl4KJsIOe0]2b}v9x»w|5>sAUST$sJY=OSWO,,_BعEߣcLCP.ΐE!ɟe !9Hn:(W5u/gz`])Qa^%^$0eJ!8Ck3HwSpWILsF;=tqXW u6?h=@\R9W^c-y*Y0g'/9K Z*АZ2yN٢(#i^*L3&b. Z$jQ?%ʭb6 \~XJ8eO5MxBz&\:z>utMXȚž;TҦ/}wڠB&7)JxSNqpԆ5X^XXg4RRvfqYP_zl+ɽ'\[b y΄Jli #b5@o۰ sV7 1 -)QE]p+ ErBXF,iSͦ &t1.rGA9 ì0%~{Z n^`d=ݍfTp팒bڨLQ40mzMoHd@avC B*qӶ!ЩK g6ދ-|G(,Mew ig'WS'p6u2 ՘L ?8g6ŗ\9rF}ťnLt/.@MAoS̮U@Veu] k 8~Js_-`V4 endstream endobj 1893 0 obj << /Type /FontDescriptor /FontName /PYQRXV+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/Z/a/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteleft/quoteright/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 1892 0 R >> endobj 1894 0 obj << /Length1 1630 /Length2 15763 /Length3 0 /Length 16605 /Filter /FlateDecode >> stream xڭcem&m۶m:iۨ4*J۶m;ҶyYͯqw\W79* @ޕHE^^`hbkE`!'uZ9؋x4fDbS""fnnnr"QG/g+ KW"*uMjZZBd_K+ {"[G;_kCU@dne UTҖV$TP'mbJ$ge wP;8@d`ofOj. ]\V :"Gg"+" gc{׿5pu 7u3'rsW/LѕW%1jio0_M3SR/jleB tǗ dV "#rX;\\:'׿1Xl`Y4ua7w bf?0w DP ֋ `è%]?G%ZV{2DrD[cgvgflge0;,j(Co'LԒo%W78Z_ek05K+So`oۮ(!.$JڰT; j^FS?8xs0ѳrqrq13<ƮVDL LLD_'F#no`䨺ۛ9;ߤ<0+!u#Sb}̠#jE5ܕF M3<_^玟24Gc}|7Kr;`:LG{S*%3P7ԁhdOi q]HM@(uIOC#ýw9qƘ)ɮ^FΏ_o{HU m1~c7>`#?8 Z3r\Us1XƋ W$gI^,Z9 o)9-k%u[ʑ% #4Ԥ<گJr2M5CLWqy9i”E ehP؃j"h|$YPw|\Rvg !!#fțhS#WO7U,~ȆKNL ~3^j؂"R{mk־xF2'ņhB0^f'K^W?66!ZKɇJCP;=R%KI%t$ B] 98SMM[Vy ;eNn<tt{÷;`2?p#F_j+KȪ WEE4#*;Mb2kiޮRv0$Dƴ>Yu{>:BF V&?vy/GHK00 .,dX|vuv;eA>LxQiKfhndN mׯXF+?MIk2MvWg+H4R}P{MEF5/-J ^29UoTc5B^@x|D guǂ{]C+e=(ci<Q-^%w|ݜQtfVy' 8}PV.WI%vAup-}/%FcRDDV!XO@/pGJ\%3[cT9u$`(B5cSMI /n6,(t;a#z WFEjM$ E~?Œ5ٌ-*3s\Q#MEF֬1Jt/, kWXDNY2 $Yq^@ګؙHkOtŤ<B3vAY//?KS3tCM\gb Y-:l0JjVW{>.+U|XB>±_5y1YPuʅnTȽp~GtCJ}Att0t{LZ8gK/uBdͿ| m"{*q0G ;8[,W7<ӫz!nWrnM{zZq.¦F`Xc }z|UG1ʦF7>҆9)=q9l1fte&>8~/wo}+O]_,qO&3DFWpce\Ex^7o޼Wm|ݎk [P+o0-&hǧc$~P XY>td @Dvg(R[9i/Aڵn殪b~kpHUwAW RV/6ٷZzRLbBZJ}9'clNʦXőy1WFya;&H Ys5 j>xq o1rȐs3 0!63ґ7`{9K `E` F7D|8ZAL'Ŷ34zZ,Z^GMfݵ/OF)dII G]D^e dҀdM&32S2bC-KVHC^/31:PF ,(:>TlW3 8?{" 1Y.EdzB cX #C,IL5qη^ܽ UxNmIgvKKcw'i]~xD|G5cJ(8υH"e?]ZQMw:`Pz6d0Ȭih?hܹ:9".gm,S}DWVy4/k*)Ѥ;]YjLMF$ag]ErוyRC}e%c/ͧ4 ŹKw 8ݺdUlj9:`@<71J= 3?`<5, elG:R]\{eF[o<2>总òY˺ʹ1v=ڐ]Pl;6 %`$>@(.b`\{L4CWJ !6.T5m34((Ŀǡ@v5ӌW75ݒu5y(I`6H%!<=5%T?Ci>XdpS[QRPzkģE;z|jĚv1fM˜!STƈ>>wWJV̐[ J/IF i$[>Y%s^gjmml;I6G `1\Z>{ Xbs(Ȭ(iD"0BQQèMD4Lņlx*/vGe+%icNcc\KZ׈@1Tx=zt%UTjt 7=Zk>a&kOhf;O^PZ#+$%Y->D*M a1]}Vݺ{-v*+S =Cf/c6.9W!Cו`x3[Hnۢz2:Au@p%b{D[vi==ݖvv_wS +zO?[J@re]ɿ:u \ăW x`uA pL|(er!fIG La+9(и)+K~Zzh`ʯұOPyd+{SBx8mV6& 4XNH]4,jscɐY׮lҷSo!`PZa+0搮XLpGUq%V21TwN.դ!:NgŊKeϰ%BA=Jpktx,ϐ.>z3d ņRk-8up&aHDn #C3H irqP|ݏ̔PykK1+PW9[gfo7=/3QHDK~(f.:<,͎6A99\Ue1:-ZCjN6~XSkj:2bb%5#xgϔϟ_yg@~!'FLꤋ"o} aUw%^ 20mŞkY ) hk2 .mC، 82#-4U}2S/BL,γőc\0PbOOFA4 , @@}m@~ÿ;qAḄzbgېdFDc2tI>$UֲaFZP{M- ېB*Ⱦ.|^J~Y ыQ1 ͂eQ݋wmq;tERLf1'l9Z>:%KZVE BNOǏ,y!k*9{h73`5v6?&zA! ><C5h $k HوHf̋u" -Q,^~g"ޙrQ",h*<X:wopOuAY'L<V]whOL MNvZڃeJHBv ud%~-JKvX>e]6B.nia;Zd=E{5iؽ捌Ѥm,$Q'-U%uB/b@ospBp`VZǜGPzmw$={iy2 FDUft.4ޜ(XU!52 IÁ2<9lwa@/1z&:qCϮPIw٧#F1:B=L} G1 Ք[̻DiĮ)BSE{V#m&QgQW>83ۄp(i5{5s&`[["K53EOKPӄ+> 'NYHjd-;1gm+W9*Vԟ0'HƲ#\c4a@ϖt[klXvSi--;3ͫBsG}$$Ne?g6 ͊F : &zKV>`G.\"}R\jJQ%{*vZ$3#a? x(oIjg#%τT[]/ۀ(##v chp=PE:ҝ>8=T6s#ha}xBӣZC6N t(zNE SݾLl!nM׊w_$Gf~2C87ᚃw!E7E;C{` 4v0:iע'c,]'mmdcUER-ISytQqVf2\WK>uHRH*u :{t*.r2WBz?|á-M,^Id0,2?' E1ziX,O^r-h@w+C`/=I#AȢ>sIl*z+6-ޖ̷ d(Ž@/VǺy [AO9- +*VD~pi>ЗvR9K1șUzrr ȌI(L^USl`1C?ڣ^jFζ" it^,.^iR1dG$ۓv'eno6K+X.w|_SBt~ =ܢzFkNj&FW v4΅zG혷N4#\a>9oJh(eͺ$AH$D6g^h,|{[!~JZ IXţ[h4 A% Y:t_>c D$y睱m|_v2/*.CP#Sw3R$kʍrݕ~zEuS1\Y0HJhl|x u K:о\b&~AokG֣ٷ+E賋9hK⡊lep1cO*@bE|l/J#|x,U3>>iA>pY\8M6+^1/#{^6 <uY)$%GUCVpY^{W,gPȿ^rIKH%h-&cw:I xg]ӂq|q< u8 0Ͳ|zGʊ{g1m-D5jrߕP#:3I6VdUrwkWivvvxVWStýJ+55fJ1] fHg 3n((ݹxGjEm17yb ;_W[y6plQ F8r$ą0ACtdڒ٨{kMKϒ 0蕲]z>3ߒ'QW1gv[;5tub\9۹'3d:fKUf]N@ߎǭ Ut;"o!VYn?ͦ~\tR16Po!,yaտTh+X>C>u)v㞎\9_၍pIo7ae]:|bG4'[60b]I*89Q'4Db<<ؘl5 I&C^ "䴩(5 -2*r@gP֠J'Tѐ>yx\.$ETiXro%E(q+7J!y4lA.ofNzNf Wj~ aњ("X̹1,b+w=?>piȘ#k!qe5\:zD)(xP}<^'I` 7O5i:)LޮK.̶bS4pMd_]4YLM2t>V3: %lbt{ix 73 g5K{' ݦAh1-z(l:">5$yy"O}Rх<c|,?ݢ לƹ5 Gt( 2B„tA%w 1R A7]I*.,ɪ.K= dm9Ϊ*~B$]<iXRmoI8u}ϓ7| ͍ ofmZcv.`^z<_! ҥ P3TiIO~"U:ǿ(!׵Á?c0s.Iti`;#EQ  !Mw ^l[E'M:6a A4.}/܏;[t5 }Ti1ߊ. 0rC\+/X2Y6׺џ 0yލ[%]J]2i_ux}_+pS-SʺoYPf8fZC2A7鴔.]J *Ir7thɌ,tT =Rl[ ǁ'DR}[*V 6(*`G;zv"ٹِ]&oj2WXO0ݰ=*h` sι=}$-k~iJ)*'OQT̾r$N)=gnݕv :0"=/.')%5`2coXyH *9R˲r(N>1;篨WGR@I`Dxô= y6\ ?`L8̀dpլslv A*YqaozQ*]pGԙB̖deH& [:o͜a.s@*揾vD[Vm 5HGXyi&IJSyj u*0W /Xuܙ߯=Eg* Fsf.nieTIBK]K ~xN1r"v^->CWjYںNV[Gr0Q{ FxTIƃΈcmhMb -V,&b٣9a OU I3{+8D!k.So^5 PqS ZԊywc@{χ3[.bOBKڶ.ωeSgL}*1dM7kL{T] ܑMtZ#u4zs2|x ` 7hhfG*a.AFlae_Dd=wjlwgx $Te5}6S&g58[_fH#Id7":^KrpV8E 'W^(4GXWDu= 81r4Xq,*g0ˍ^ >c@12W {?)Xk VH4;v~w³ݴ1??oguq˔paDNBi>QBbSUjh f]&φ`ΏgomQR1,.o*Ib,ӭ:O\Xٺk;? ]f܅jfBJ5QȒhwCJܟ} q6-3)"0廷hru!dd(gy0\QVRF#P3̕9dN3\\Q;s-3ZgFTEB*Zḛá$^Hv!Y(xK~j&y FI(ӈtwIє`t8\("W#t|Y,$3 qMVPn (=>Y)糁ڰ8Qp>s͆~Qr"ˆHp7sB\JD+#S5=Ʉ:]M %d1=*؎OrrA|iCYtjs3~=c/c=Ïw\D,KIʤ+G8 n+Ẑncji2鿼ܲJۗh"aRiɨUd6.Q.mF'{$ WWGxqUXQ $xrԢِS j *[ 7x]qpI\ʇc%ceĀAKac<~hPX`,0qPI:ž9h{SݼWD{GEX 'hU*2ʫtqVN.M,aPox_/ UU <#,iQЧ8Ճ@[HmcgHo4#Dx3~yC^TbHПP!-}T^%rgA6׷Qs)>IMk[Zo؏EY(@[IF?_a$?z}bΆ{w?֏Ybi8wXVl V񿲿Mw O6*CvB#~Hv_®ył QR| 01j|=IF9a[)[&($S6hb פX[Ҿqast41%M }bwcI)7D1="wF x`S>-kr˥hEǗy~;R(5D5osS 7a `%9j Dc/(WN9f#?$w!j< x|A}Nc ` T(m{XdlQޅGgPcfyŁ0qL ̭_Ú`j${tݼ4frX?SA>Dd 4eDMF,(pWh$xv@ҩWL++HKUSBư}<0!%n}镚*uۼ>z{j2UO郼T`iMld9:mqfċ+cҼqʯRީDe.|^kCi&&fW1YmbyԳbjK/Fᮥ5rp&grFf8n&a/ GSԙ\됏N@IZ^=nqpuE/TfOgעjǜy*μY^NȒج9`2b. Zξ.'&V)SщB,ZHL:w L}%Ofgx}HⴅmțiyRV 2:ZwːgDe!4(@$oH“/ˏHDD;Xh~AS<,띀Um0m')a2SÁ޼v|*Dmz$--s'o1[܏s n̷np.9ﶿ\YD:zЫ d )Lgp{ojxypWnkAwfƍKf ̀ >:{B|m(^^W 29mJ0Lry(#hBo5W^.pWO 8 j @beALm9PWBpt!zfmHzQ pƣgiP,jMIn+Wʞ qd7 J-ŀ;1EtJoSyd2DLא=$HEn 8;ޞ,\xÆ6 k|2n0@XP!=Dظ!󐅈46hKQkW3 2B$h% H&,AH:ɔf?ڈ-G,zqVVzn(&ƍE dƈ1\aq~+ mp li7,rLdgw62rRsYl꾘p>-i/4ߊA,R0!o|5Z6J(d{mÌje%[M~vzGd@л]6-vvdSYT~yu3Њr :TXQ#TZ2RWv[ T*өhTH1nhH.i~CD,Q`7mIrR1 /+1x:d$TrFx7Ŗ]*6f9h*{# )n0 oy-2^oY}~U <9 ( ݷ3Fa9Zin߯!G$.$  ⪍ڢC9:hĔ Q% j|m"9ό^>ud7Lvl k({EO*,f3#! #&ܟ&[/] vqEЎoágk(+Jtr(?2W¡5Aӻ'{#8B;V7e>?x bKz 2})޾>EZѢm2/5=^֧b>_G:7C' 3(KM=sj#w|ݧnr@7BOs"H)2& EjJ)"y Au(C~4;=ѲJ/' ) dĄ*taXgV\3\YJ?5 7,pgf"!Z['5GuZ!ۑSpk,s+85G΅>RGHnm;(m_o߉9s>hZe2 QF h<۸C*ug d ޾,܎%%蓸kmz[OH( v;yQo:&agï*!]9zG$=v`^!rk\XyhBp"AfHj$dk܁IE!(Lpd>4q^ǝ)lCIOxm&!4J @ nh,zpo[Cܫgd؆Od&k2V[Jҭ,V~)./8LM+/- )/%\huQS;^$Kac9$$B}%a$7,JQCBY`+εDT:n2B/$EF\X j0 , "P=F H B%_[J;޷Bj}>Lo hޒXՃz/)`g񯛣lW*eõj+*>L[X,濈eUg=1v\ ' ȣ/ I\vwګMQj wFCh6rɵ2O:E/z?}62(vj̘~qsJq 3,&X ^&֢qw]=`١B*&Dzp*o$bx5\6 9Ȳ~PnskBigKMgo^H_K MtWb^q ӂm]+`h׀C\)8cs;I,.tBq4;x1tf{D1X J'[͏7M-}쇞s=/6G endstream endobj 1895 0 obj << /Type /FontDescriptor /FontName /MVEJPC+NimbusMonL-ReguObli /Flags 4 /FontBBox [-61 -237 774 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle -12 /StemV 43 /XHeight 426 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/Z/a/at/b/backslash/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/q/quotedbl/quoteright/r/s/seven/six/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 1894 0 R >> endobj 1896 0 obj << /Length1 1608 /Length2 11957 /Length3 0 /Length 12779 /Filter /FlateDecode >> stream xڭtctvlu`Gtl۶8;m۶mt}̜Y_3dzsW}Uu] ʴF@1k-#@^Y$C+dmi0" ̬A"@.: 4019996vf&JU%uohi+`f& ׏'񿾨 Lc3K @X^ASRN@). vGK3C!d[,qZ*͞K}\mrlvVf3{>3_>})X;ڙ8>*_>kH#kCǿJu7.2m,]?rؙM dO4;%N^G3{1#GNC&f Edl `d?}N@DP}7Yr);}"$o&j=+c>6=@׎b,] T"Aɇ t 0ً M=ۮ 2YZF-#+TL -@5od?7ڷݦG)|jA?ꐵ6_BB.wZFvf-3cc`ppzbYVQ4ߥϓ e}h/݇.@CEkCT Fȡ@z<*nmr@)Vׅ})ꃑlK$E.')Uoާ#G_lAi1L(*}/z!jg|!u$me\Ձ^r57`5toY8^' zvwδU\Ć}#0td=dP_L/tSx VK1M:b4t4t>O<w=$7[5a| 52ߜ4Cxe!J2`Je&=zAw7QըG殓{M6ZW'?"-H>ƥܠ("c ]hbS:ޡ`EM\yx^:e @]3 P/>8?#3kV4h}d )yT>qpmC8&@ƍw]s(2!gsܚ&h%| B֝b.. 1à}֡kH#houa%_ꜦfI ы eM 4B0d?%<jv f)ww1||Ƀ?v^]Nǵ|iFi3CŸoHs/a}-d, d ]؂=[oPGQ<ŵݵ2S(c@(gRXOYasf& >8_crLZxwE Zl` ȪSԑh:x^zbgjIu_>…)1.4{_,MsvgӠlW`mf=|7lI*Um]:1K]0М (E<{C`Y`جw)g7{sZvֳSJ0pU a١K1|C pk!mTMRi',.p}TK'\:46*U5Q܇zP!,W&XiyC=I 686Z 6XN%}uŀ[q}=osH\09}>/1X*j|V8~&Z>ZxufWș]]+,m*)\FõhMc=/vy:vH@iYaO,n pjx E| x| O euÆ\ iE@t:BGNΘsgʔ+!^Q)}g;gE:tMCp}/BO팯. ݙ@4zJw̒3&+'??ta)B:M/$ϪvrFIz;ջ; V()pqߗg>eN99f<;(F;tvӦ=~bHpcw`n @87/ә.ԗAg\@^$JJoqZBiڝ[0 nϿd(Ս{@%XۊYӻԣ-bQrq=1 BHHq+?֑"o~l[FzƜZ)wȭe0(t^ȳȃX%gBxLja 8N2mٻ0臭Ȣ|=j >%.HXXKaiɳrw #TPf{*)2(raIsXj+LRuRKĔڞEI_}glr4}]˰N[p,XMFmu> TEE5VyQCzpUu)9P 紥וmՁXXx<(Yc1Z 9wkTvA|7=_amiV́<\(|)TNnjW K?b﹡g{=] `8DT$S126Q2(;6cRM3(Fyw/$3ҤW.nq*a#`~wޑ-D{Z4!Y6leR)2t[v„Dlb(u^%ɔmFĈP. - I%]ЖQ\Y@l[ܪu/`Ԩ!I]oXj!ps>”JAo48%G1STϷJ+'ԖR1&g*El3^X"#ߕnڥҩyso,y\pfjrSR{od$jڻԃF~/` OjIC~ #bt[: 9x#>+ԒSBwxK/@ Ba;' :l:h*YQ̖bB#dюV;d5>,Dx/pn~ 9<ЪbȢx ;TzѼ@ឪ \Ƃb$BeDD/qgq_v0[ZPK8+ ?giaw5]rNmF2_8Zt4/Z:r|v`Ȟ0IA:?#bH@*?ޏ]r5txK!m8 ^2aOHRˀKǴ#Ye<6bV˝oor4 Uʗ)_7~b@4$yGgT" $^ yr#ǀ)RI&b?OrRydsU@z_NKŐJbH.,^)pR ړƒxhFKUFa{9o6rduҵ?iQ5xRF^ C8OǺs|oo|إKdMοo\$34H#=^a|bؠf(JdJT³ˣn'ٺ^[ܮs] _Jr(h.[|!a#g=j"J,d/h6M6l.l PUsH{75WXM|fK0jC6&WSI|BRQ9rcK5ˬ5 ]t.[Pa+8(EMM#=Z^bsMXWOv pS%5:ud͹xR꥛v]gҟrL}zHb`ZR.iɧ 趤=li0LQG$^G ppah[EC[w16C:CIRvw?HT=I%GJ辇nظj̨NX]m^YW(=.*v((Gc?l´e~HÓ0;wO-9#j6]Rgv85KQW'fdkKc}p6^)/jfXV3Yվ-Ze&/, ~A`Ö)N!&aHF'2|-lIsWhg)(w\oMjF3Mj r`IdS&j<ݟyL$Yda䍼/4u9R^LGLRŌ fv*Xܚ((qs®s},% wԍyaTe3X6KjP ^s<5 xpzixB.ԊjD!Uk#Kr3"o|Z'X@Op 8#Ӽ~L- 酒5Ԅ kc%Ae!ju0+-K.;ΞpߏuC A6_-Т8 Ƥ ۠'JkW?qzğ+rƽ(ճBF!u8wUX bqjm:Ɇ]Nz Vl펚Cu"*u>G,bO.|\f)j)xkɯu=q~j&F2%%XšWl&g_dڄTw%8 Rvgp:,1| }O9- ,'5W:k0)<æ1A33Aj,+M"3tj_s|Q ;2P(z*I׌8JRDQAjVGɚ L tS%AiNN3Х1Ll}Iu[2]CylL56n#OחԪIMzi'420G`yYYFt ފ)]UIQ wӴƁq Y+[Eq"S-vI>> bERW bLTN9fH.8.nq8u3}~PVBs)׳`ϗġLS*u y &;. 'jRpr2/FbXWD=nUů% *T N卙ӶX ͛`Xa4j^5eO+q<Ѭ_N3ykgl1ڠ @U3O(өׅm'R4z(+2 /lNo4%E,{9kn 2</[*%n~"f9КF)Ia-vN%aS@C`/ok^X=])&&b<Ή 272ޡfp OK3c"ŜQQh}z=C+)}[' sE]p7lPe̶t<dݝyq0:Wgw/UID  Y pEor D/-&Zm ۶6?{PoϤ&L+H1܃T, d'JDOIzˉA7YgZz~SyV Yr,WVqN7$GǡBDƥ>4! d3zR1kK¿.)3 CCr۰?4JS*t R*I0[< >o]1|Nn1 (9";*#{CDl1O_'ӪM|$R4ԻJQ@X B5HcNЯwvkKY"(i*e Ve` /2nxtk@Oǔ0 rOip3ID^;~Ikq[n` y'U~zRd1܏vw4y "ķ W՝ֽI"͘l?)c{Ap`sܸsANYyS:sR Gp1wSKc~ 6C5 5>\޹>fZZ Gɯװ?jVP\nPá4+9F|l5g[sGlj3W9">ZMx!xlR~h;h(*Vj5rUeֹ؇=H7JBB٘۰sBbepM`?^S%6" "z E&#*i=HVCDFBu҉bqU1XJ8+at+W,.G+^WrmPu$KF ֳ:=OKa ,FD3 ;6ӢcOGf!Tu"f×z%@p^I^Vk8a*fRIao9`+׌o.{˒!.[&F EΉhVy@fy6Ew=w8AاB*٩HJ̧#'ײϪp WSWv;pjbiC_N.˘`2$> eA囑~NS>a*F Oqʲ(G<lRh!ZɔUt soV9sJ+kS {2Oi2UqGq,IdYXKÕJ*hF8^W]|3¢ 5 'r$Lz &|+]/b27+j-Xd><L AєLaologiS#[Tq;&M,QUВ8ޒ!nO2~y>B]q!yzmB)x@'1Y}+SEqMâ)t'"M Hfdr@h3#T@2N׼|+ӿ .SLf<2skSO\')^qAw%匳%_s"H[ gvs5LN9ت`Lwq :0Xz}&5 ck )ʺ^1-(_H殭XO^9#Y`"~A8+|AH2m(O ̘Y ],-OvDv_qQn3n|nK~*?,]5SM7'22:w }M}$,WV' ؈ o`uM+a'Hljٕ39Yݓ+,CւV7Gk|~ ~E JZ~JF3@uK_Oja$MMn_/Aضhh %.FD2y_WR B$%<,rwD^DNg_2Rz_6m]@Ojq;!xHם:*ؒ[rIw٩B2'i"`!t7.Sw6 R}L.Lݤ3*ljS64B_͉/=W;ެk<4\YLQ Ȩ*ٷ݊O|oWǾ퐁gk?TU1mb AD:X5?)$P@#z1Z[`{*e:q(hWUC՜ģAX~ouم0^E=}E*M&j\n;t4ބP5աr-58qN򇟾46o0da\82s. "4|;~ףW|^Bqo}kEZiWG΋ OD4ws*xsN׈cýUtj&\}2Fztf3 WwvhWˮ4cl ÖyGLf'R?ulIMBtw]?|?SoU֐ZJ/eOW4&:V2_+^hmM?'R?*{X0:`ɾu4IO*EkC<{ESjwt-è뽮 Eq5YiYQ_QGa 'οxP6I 4Jm:N##)_7Oe|$L| K"ڍL3Hu*xATMԝP[RgTjOӍ#\FE|$kv)ύ[vS H{"C)!ޮ+ı.90CÜvD_WͦRchF&ȨSlmbLeotPKŝ=($g~6pg Lv9My9O?#Qx,G#=ȦB* 3P6$!7Dd\a"Fn꽯 GSi P_r'P?4(xD}x|` E_ *b [6̤6X'(Elv҆ՇMQ"jNrҋ A\~Ș ^VnkB4扙l~OTʿ1Pc X^ VĝZvSo4^Dq"pݦҾ"F3ۈ^5Rmg.V}jBI2$DPjQŸV(ueM{OAۨv ۼ-qF 1U7B}˒m$`:ǯٳ@ݺU6&!ˠ+[S HJNeO"R,T< t43JQ}ǑZt!јEgp\9A^#vd֊Yk=P5Ɍ0Ɓ֊u% ᷒y#;Na*R$m܋y4֝7> endobj 1898 0 obj << /Length1 1625 /Length2 6604 /Length3 0 /Length 7430 /Filter /FlateDecode >> stream xڭTeXKc蒖4F```b.NN.iA:1??@LHC0Qj$jkmTK۬vE;&7$WN~hVZ$\>k+ޡSMjh,g~E Ν\<=>x=sSɌ%E-Ik{dB[8~oFfjOY`5>mI`ä]G@VLk[a# #}R+LRG㘏$NK~ }dL}mgFmH4/uHh:olgS AOqSRXQꪮՄVF4}$ uq;ͦ[ >׈l\qzWF>']~ @EMq-IZI㴡e::gpwˡ!! mծ)[M@=5#S)ޏ:m^S6$pրL|+o(H&+*FЭXŲf"dDCƅhȇ+k(؃a\1rˀ4xQKJ.sySXkK U M7 Ev &CvD3*?Z,e/"W6Mi N}O@es9L::&VYw'l pN+'IC=1U6@ a{/"<1jQĨ3&ޢT+Jn2 u+pְ[b uVMEqDT7閠!tU£ž)CH*_6cV_98ut߯2jJ+Ktյ N9__YU_ O3ͷ{ɵU>ׅMf ݣڏ@ʯqE**+>2lf㾈|jOKނY*u]o*,RRpHZp(?hKb#Q$eF!UĚҙ>QT4*-\f[2,wFyz =;]8ʗ&kVuVOOqӾwH)Z^8=( 9w*Z`|oMh9N5d;"RJ4:4)?zWC6Ƒ0I@n|~Ǭ/nE.tuH*>R sC i".Rv[C^23:RD\DEm_DLU|kB8VAbmd ݾKI u"QSnZ:*y8# (./>ţ)IR)fx*C,4I%v G]~+e #SI-8fs,5q^^Y*rz!w\lޚ!}q#*sߐڸDZCe,'M\%Hn"oH{?{R9,Vw[Llۅ"z{Ǥ87fƬE$]2ȆnMڡe{;I(J^|X&)ӯOd6UL}t1Qd&SYBkϒJC"ZĠi c'=д`%F0]) -M`ڛa{Vh?s.P7ݱU"4M䯧o5qHŨ>}U[_}},+yJgO$ |c^:nZr0+6Z9O$F_1Q=XyMdoWN{y2J̴ ]|L_"K ljȦe t&'xuKrũQ>1z?l{&L'q~ ?ta^ g݃?*rK 9I@X|`iP<){qs}8vHYp]2&t |khOYt'L0;PoJ*T[f3|$tT$Zǜ D!^4ڦ/jȑC#oXtbR(`ҵg摘bR½-_ǘ<̽IẌ?Eq:>z !0P)IǭUW/jƮ"7G)W3Ǟ^a^|DN{_=Jnxk z[ 44 >f>`FRl'iPQ!Y:90*Y7e rirN\_M@cQD<.q!q85P _6/F'$kcۥ;!'Kn~%jbb4D$4:#fhGg_Ye zj0G|{J =ܴ雒Wǵ؊V\Ƅ\Nԏ"_3[X|x,6%y;wڬ hv4SǗEa{A )I ϖG5Xmk~ g 4T.V5[KQ~B%E)Ug{1|ӌQV2*sósWq!0F曘s㑳tC"t7Z8K{D&핟 |WaOokB? h~9^ipeh_rCړ3oL ,e={T(};,Qc8Гj- |;4GqF3}LMtJ1&ÜU_ neeN" 'g[H8ƃpDX\FhX5EJL7XH>J\O+z~ *8G9%T!w֨ԻIIKijщ|a0yWWgoFG>.%,*:Dޟ c?eH"uYck!IH~o8&?L)x)<.طЬ}=>^d;TC/Q:E.fPS>}Coɐ[@F`乮9mi?}EjU(9[D~}ܔOcf >;j&s 9Q̓]&X4cc?toJ8^/-Yo/A1Up~ra I4>7 54T:ˇI޷AC2InnYJ -ͳNi9-2Ɗ^"ljSGONk&+\S~+t1RlwV-~nUc&2%=Fbk3s'_9್$ڏQU2E[8!^] j XˇnYR~fnczn1بLZO#j(-V ޺Ĝ$.)r5?e-^r. %azтʞL3=a8ȩE[ujDի .#ꈃpy䝢Iw̳सS7wu>yۄkbxL[R !$#kIh6K Š[84"p1U2\arv)/{AFdr !l=U<`ܪJ]?2Tԏrf0+taV4ρ|{%<9?ҦG .VGu>xbDkӾDݺ}?4xDnX50ücBԈu#5v&9u"u{r:̃d"Osf1⼶g(L;օPş4=ej<=ooJ̥פϳdm3K^M:E Z :ceq6ooxW`i$>g9?TZ+rnBR0T#9',:qdB{{O0_ ~˰ -U3Od@>a+9RЭS/I8EW=҇]Y舞_:ĉLXp`lRx-"y; ,ll0\"v%$!$GzOƝ:9] g97&u[mjN.R 0ۓIp^`eTUj: G9)k&UA; p#?w#Ui˲$*ҭ@: \β%$,40-[q׌e yfZk^8*ԩ:?? |!+GEKQ"qG#_bصBM`ڑ">%XknbLY,^0u$Ma`rxWAnkw[m`<ڜE'I2jM?Oؾ:{}Z&m) HQS!Ć#H~ $U_TЮcxrxn4/&N%@zTUPLo%*Gds)zx eRϺsb@'abi~Ҫʞ{5)Vzw0xNK{8Anc<._u}>6f2CT$0qCSUyi?mbjۭF"$LRS6j>eG~pGwƄ T4#g{=ڽj6 4^uJO~-Fb>2ap37"p&_;OV`; HiF3ψ@YISjJE[KQZ7?qxF?]ܾY.i(53¬Jx#Nb= {9YHi3 1ƨqj>ŐX/G1ZA0aܥ¨' D 0B N<[V홙ךYM:~U|}5>r/? 5#'-UR绉QY 4% ohS"CE<|EO$w9\@<Vy,W4 )藓r=A ?[wG&}UKٟp0ci Prw S$y~x/CF N PU@%ҧꊿ>ߢv&S`Sc-%ybAqEH͗jpouN@̋a$|G 9./_b endstream endobj 1899 0 obj << /Type /FontDescriptor /FontName /UHZORO+NimbusSanL-BoldItal /Flags 4 /FontBBox [-177 -309 1107 953] /Ascent 722 /CapHeight 722 /Descent -217 /ItalicAngle -12 /StemV 145 /XHeight 532 /CharSet (/R/a/e/i/l/m/n/one/period/r/s/t/three/two) /FontFile 1898 0 R >> endobj 1900 0 obj << /Length1 1626 /Length2 16283 /Length3 0 /Length 17119 /Filter /FlateDecode >> stream xڬct&Wm۶m;NvXI*6*m۶m;os~~c39&'VR6$. Lͬi͙/31odgʙ \DVfk7o__0% ߪJbbiOmgn"H3?-ޙO-E9,lab3_E/V.[sXf5M]ֶegẂDL:OӿDP%al 22*]$SO[ovpU0~c>2D"9WWWFkVhk>i#+ ӿVV3%+SK"scۿ] dkeFJD>5K+S` `oJ/ _JE/ъ<y3spѳ1{ qs0yJ .NVDfbW_'76.f7q:9_o@S Ԍ4Z̜I1^f`|j`ojw{M0C4gҙǁ h/-eO2*ϛ/y0Ѡ!\3zQnBIpwRYŠ  ڏGٓiJ} zFڂs'ᡞ[Ⱦ\r^cL3D#O c:2 qfMU4UZ K5OvI"vObʮ5'u-K e걽QM.cGOL쌵2T lc?Yؓf L|LNAyDB/!E2Z+*烾%oXqŚ M^Iu5j2 %O=]cƒ9ZDRC_={f 9mv`QIŏ0ohNSIP`&Ώ_DPvXg'FI0pmnݵ(IIͽLI=%XdCqygSZFI=^W wRp-qjTtό8aj"hsE WdӚLjWb51،Mӗh 䍵^x0bА64қwTOzz} \g|ao3)h[m) 7S(V8$Xqz˒&Ӽg!r.Qv^yfZ养Dfeݍ֍[3s).@q,~e)[5. MPksCo7(!*L (~33@[ˆXcH+lg=M>yEK SU/,_dgYd+$>D"kǡ; tJЮA:0ПB&6Idr΅ANm5g͊/!Z>#Dk#yM߆,DzDkadN M- UhS w[:{@g(y 11SE=IK0*2/s Mwu+{ʂ6>-Sn\rN6(Rv&̃/)*S1ύMv̢P8ɊU+xnݺY(F[=yDږ3Y?4v|_jH[Ǐ]LB5fOBzH|㎯]m`ftK-΍C*\n^1}%?] ]O7rĐ+AR&޲aDlwpjb,]ϗtR?ѠpKgNAƶlC]0v$?<8ƤA9Q Sֳno4VN Ưٶx 'jvϬ"Іiyh; uLE=NL&o?wmߜ2SK[!Fz{M$ـ8c~KJ\uqbT3LJZ@]J A7nfGE4]0{Rm0)y9,yN"`t8ب{G4xI[ao:HT]\1>Յ}-G &}l{k{(}> Dyվ2@By )%IfºP#vFQ.2~,#OrH,uBiLj0yfC U]ɅfneGwG(vO WVu5);_[]9Zf62"+{C8Am{Z,>a'xHG=4XDpo' ʌW1RUjg{Qo*&m1 U*ѦMa&@;`}[^uI%̜ɅKZK71I]K~Ot}krZ|ZN)drẐ)?l[a; eizH0R,\"Z[uX5eCTrgeD 酹:cL}g(Xm댏*)R\WF{L]7Q"%MA=T$K/5u% Ӌ|nyA`nt4zY8=_6 qsaAsXIg$3ڪKߢ `3-R {X=:l!aX34Y~uPҐEzw %Yf"K7{"q,0E^זGbl[#֘lMnRʥ]ߢ;j܂{5; (VgyHYT,nB >X0?Lbúq,.R ҵj2 Zb`OJ~4aŨa1+kQtɤ@W Dq12fWwұ$^6POJoc6x@`%kM%[J LGvcp ɗ 6ffA\dѨ>U.)0'D:JtI(f18I&\Ѻ螆3*$Wai sm'm;-Kɛ._ݎ~trq") p2JVo%} Vnʰ+֎_[ Tߞǎ!0O8/>9瘄,W4m9~E(& qS7=UeH`HƔT̝끁aO}{=f`WMLI@2{|w9i!d1m}M=QӤmvhu?;q i)mPLmGxȻ zz_~j9xa@+4v)(%acڙF)E.elpx Ѣ?o UiʃB;gzzk2m [CƎ{ A(Qh{QUx_t؝+돶@`/WG(>|\vs aƲ  t"yDS2hHǖшm<BZ?Y ,soc+f\h*3)&ն8C" exP6^ɩQ8+K.E 3DQUs &ĝj-̸j!‹hi iܟ;~ {?9iuuD7iXC{G?$.BIMvC+E5Z޽(EKN&L E*XM9<>ؚǂOuf;L 8^AC[#ޢF}=MEPpŒi1yt\k~zc D7&ħO1 p:qj|5@'y|zIB$BN$־\ /ZZC/^z]GF |.\)Z:vzΘmv͜pzϹEtŴxYZGT%@oYzUԆ)ҙNPdXif&æi*;x&* /`) 2ܦS*"G0{!'nՓ:"ͮό5-1q Q4V uJ_uQ!_#λjxK(1?i6V&g/Mﻱx)CU>@z2+߮t[H ZԶ27Llmkr Nܯ<0hi\!-VY- BG)II[9䝼.eׄq[g*M)-yhm y.|tT1 \^9h$G6ܑ-d2Y-/7S-һQC"}5:~ Fv//Пt<Fe{ELq7[Jy~sg%A qxcb2XG"Ҭ JVEP> MV)c Kp\,~; fM םL34ng=HQZE)qŊ.,62U/l+{}CHa-LJ_}j!bʾhiwi/9Fg*lA ?hgJ]+Qk,K֥ZFe6eK4l"%_Q(1$F::ffhmsFdHרzq Ι7-N20X[lK7|ޱS @Ly3ăc垌.4ľɖ*2܂ޙfG*`6[et9 0L!oJ`Kۨ%G E)Kҏ,ȴ҆Ͳ6 5HEJ&"HX >IT:%Q5F{ 7 Qn}܇Ųއʪ%O %))JǔWvG &f9_:> nzW\`"ٲm/\WDe%8$/Xt-jѻ [z|\Ae(dDhhA7\8JpЭ,uȾ؍ .lS.6j:ϰM7trE!?oI_k芇o dzMWblbw0,C: \fQREz+Ll8pn(LRci`h~bXg"B ybƸ}] vvݦ Έ/LIFl5(t+Z͒"(>8]S86kV~9ҿz6dh 叿u:r^GU5ZP}A nj[p¨8[>[aKB#LWۚ)obNw|\_68I(F[s.S'-t%Af霦*=*ȃ啭[GpP*>n2:m@;>e:+"74mE (qm0*3Ygw@X¸( A8)1Tc6:#nzY2ek\e3 ^}wc1$;ŸAёC3}p~Iyj6\k簢t"ν᭠H]Yh,=ވ-Mr1pI 0>gQ{0!p~;h6FsNlʟh?Dm 'SX7t* PY̨-1P6sui|f }_r5.~PU(¡ۡ&N̦Vsɮm,ь0?GArx4idf7qGK>/Qo\M^xw>A9eGN>RJ7*D|yG^{kN<,Yv ,f:oɣmJZ"z8K{0#Z| hL3̄KwZB9 Ed\;#D:O{fף$,ca5YQĀ:v8?4Q`}t'H%D #NE_ 0Dl(}KB!tv8`I9Krlqk|XtB>^ۆ@l{{݂Hd3Sځn/r6Β9ĘaR9iX&noP +ElkD号uiBm^f1遱7@& )w髺'KAr31XOfɫǙtK/_忮3ɇQlڤ♎b^߿^g51UL Ι\AV- 7 N!w @礛?<孵jPkَ#$lj(2+iN{Tp2$o4wHm{J*Zn-sss)(y@ ڶ36K5c#IEm ҥ_A%JT1cl {fjZ }U=R*%aCcS~jb4we,`䄞q?q>xq8漟մ奆C_V]wZyaԚp1؏DiqK^q1ԧ4?3/8:/A3&y|8.X  >W"9`AEu `=K rbs0Fɍ ȑJL@Ű7^l#ksFjK{IL9'^Y Coi%+ ߉),9[aQ_ !K<StRGQW>˻s-ItR-N6W éV [dR5ej s#RKRpxmٍ6v ˬ6oO6hp vE;UGL>m3G }$ ASKRغoOf˅~u^~;FZӄTq]jJLrӫ87T1%.DDэL?1s81}p%r?!P!PbǮYCB@(tޓ=vd#PVk7!mQTW:% -%di 힯w;9؇mPg_AGóQ }[J(F eD)'[Z8 (װںDMcbP(f5ݽGTt(!s+.t.l, 7%]@ |DmD ߚc8V3siOdQDo&8+?!@ *{E2B*Kq7"ф7z{iURi:JR-rg1~|GO+*uk<|]+F IK!C@˜tt .d_[qF+~J[G:]eST-1;hT}A^  Gо94Ǭys4yV<,e:Џ怕cmBB4lշBUǘSJ0t貴K'q+9WQHann! vn Ks_W֏*M?=yZY>ɝ\zNŘS~%gD7Yo ՘<8Uo[9v 98uKS}\1X#<âQ] P;9^ٓEVs8bnzGS(*IɈAEJЄG*.2lLxFLx0׌8TrvrIvFW@cu>E[8gB$o3--+FL[Ul)[?L7>(SWK 1LgAg^rT$s.rAM̵VͰ:Ǟ)s 0{SV4,T6P$㓇PIOp#đh􁑻Id6V4 3e 'mLԜtfpM3 ]*iG%(bTUYNLMO%jp@UnӛՔQmS];Sѭ:. #FXB)JJ ,"g,OV|6 ݾ;9 Cb2ATuV2QWwJF`[1[9.GN7Jadl%slclb%M$b{nǸeXE~,D-E\6SUpCcthhZNVF?Z8Nپ( 8uHgћXk/ln;"-aҠ%0D$5>߯ޛod&^7A Fc0$Z %5B/g@4;"k286Elvw#:lO_Zgv(Ɉe Sx.{Sra̸aֲT`P+ $dv6!%;Ք!ǂ''/ڙa?Ъ&p3kð!Jc=8?39 sqΗ7(#/ ;je,w"O,cH1Tmw Ֆ+? x™~+ڗgvQm>QkAZދr~lcֱĬLd=+i@J⛤1Hz+Lj>5+#=| e,O/ ;: hE>9 xaW& 6>5J{qK30@$啸7'EIh*!/m2mpJ<Y/0Cb?D|mr>8(h1 I(0pչ4Ojjiu,Fw-s4ڬmp-&~%Y.ڡS8MUn O MY>cv4xȰi* ˊl.iC/;bjk]\T.csܐ9CsTEYlTeJ@t?zXV)-(\Tqe+y(me S) ^$Me(LPRbhANLN֙U=x76݁2n͕R7Aiq^W x|onKd3[]ѭV7/c!4Tvo-{p?0Ĭ0R5a MD-eI2J8 X5k(1#ɯ hJl>ƛ?$*/ZY 1G0# @fn 3? 3 yR-gMzz%UVz;O |d9vCPdU%B~E9o[+ M3 ;[Mm{Zr ZA68bee`-|VM/;Dʹvi 9^RczOt!Ax!?>e~Ѯ5&o533]T?z"MZNa9>( sź Z">c} 'KNᆘ=IB驾L{oC˱A̠0\l0dv&k `!"E(HPc|,tyDp(i8@MX"?@F}:_rEa'NPq<.ؒ`u}\?Q=FObKӌBʋ)O \KlM#.3lL agDh^4 SH3Y.f^3.(3өR!1hqw]/e;a?e!#Ʋ$Upv3xa^+E%@oXD.*Qw\!R>H&Dmq ^*R .$"ˉp`*b { 4$$&#(&~WF<&UOVqt w1p\9X&,N'z$τzPXW5Ti}Tif/٬jmHF:b:,-㴨1U1y."k9mcwș- 7$)E~#Koyo-Dzw;WwCن&],oXtc}j>߉X`T"fScR#k*jyBdF\"Jޑ qCkm"#0؊_ۘ;Te~ỹ'4NX0?uASB H9$,Ѣ{qdfP_Ȕ;u'V ޳~^E6 )W#`3!U.Y4vئ[tRFMFċ rF{̒'b[)m;fk|d0k4CDqRʻ gdƁE8b6i9e$Xn\A\jboYFEcWиPQv5jO78)y/ױ$j,hxѝ+: :ea^9~0yEICOcR$!\^M 27l7lDZH20$Y !f\iJ I #JOu6Vd~sK qQqFΥޡ}TpclKDX5[<3ӥeU.~PGc^k$&ֺ{{ `࡫M*u4\2ظL6-)e-W+(tRC^a]䥀Š/>\ʼnm@ޣMYDz|)qJhC}z 1c`:Y6B-Zȯ WC<@ `ժ1b== Rj]|[[+UQ \Xb<{s}K{tm%e8-/xE$XcN)k' /y[G bGbBv/2/qu1b_ɩ͂g4'ijD\ݳ < jk倾Cc6gC=սVO ,"^ hʶJ9kC7p'%.{D uYt?mrSž5\&<='8!hA= ْ\Xqmkʔh:/邵JBLzL{&b剬 #'cȲPBー.zk+Ŕd|~ A`_c$ʕ M+!wŌi(όr, GZlqPg #yo HX!{sf]YLy$*8~~i&ldW^0aẶGn.>Tj^Th^69\wQIf3I^,,0-=S|5T:$mdQZH hLmGeQ٨6hX㭴]32EZagkRN_atI,!0rf a-ֲīYB~(*]$]K:M-p[~'!$ybj ~VmL, [~54I_.brX7CWT!A'8Dy;x;2E[b$7Ymx[x endstream endobj 1901 0 obj << /Type /FontDescriptor /FontName /UKVNVK+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/a/at/b/c/colon/comma/d/e/endash/f/fi/five/fl/four/g/greater/h/hyphen/i/j/k/l/less/m/n/o/one/p/parenleft/parenright/period/q/question/quoteleft/quoteright/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 1900 0 R >> endobj 1902 0 obj << /Length1 1642 /Length2 6168 /Length3 0 /Length 7004 /Filter /FlateDecode >> stream xڭveXm6-!H*) 3PJ"-H#tHwwt7ﳏ3}ssu^D% [AH.>n^q&E SҀ*H „!@$(DB0@rp3 `6``/q0 08DQu  ZF*JV%M=jB ԡ ` w:@pG0wk.(.Y0 qg u8;@PG 3PdZp @PYi DE5 nAH x 粂P ʍ"C8CuN3 A\\P4(߷w=yw P f͍Ǐ Br@y~ϋ5qsAg U wyk|M8?S?'@ywSoR+`@gEtv @{ٸ:~(:@a]? __f"ւ"Ak uqz`3 A nQAtm {JAlٟy tՍ59MY 5H]O3h>zG%/ D:C=&ܼ|~AFMݿ a3J? @OI ^yf> DNnfƛ"xObA5c[UUfrKGn:[K9:5„_^{ X¼kK/ͳqhq0e!e;}c r1 ͓iՒVJ5j3u<;했#Nաgr>=8J_x=֚<ԦGՎe*l9ȍ +(Lfڇ3Z8Mܴv( R܇u)SO33sU-Gv~hn3pN^`;\W$H*a]c9Q_P7,y~Gޮ(蒄v]~tjUw ˿xf; +q~:m軲€Iciy9H^9/Zor3:UdM<.ش7uqie*0:vt(q9v'JQBZtQ!~,&u@q{J츗KqzLu Fl|&9]/tM)Z%}Ͼ 9('trSy$y}S&}uo7fe.`b&ҸUyd+y&YHGfJc[θIB9uq";%n:A+jwH"4:OF^ŵ'KN:::\%UׁykS8-FZڟ+G<9w*cP^5$&<-XXNLqJW~XxHC!1 ],Wڎ%(\7 ' }#?G'Y&BL-7 {GUGd`e"CYVص=>GN-܏+SyW]dGoyrϸǑ1=[pbY~|KSBdKG򼥰Kc`|FK{yy&uW?F76VqTRVRSJO؍no ƋXuq&v+QBn^{)^1S=DzZ"ŕ7Qg-C4' 3l3y>3iWxA;Ɖ(w'?ݹď@҂b3C6lpaFjY}ǨNTNVe/0OUbM+ū&A7Y؜Ÿ _ gr?b;q>*1rD/5g5W)snl{ .`~MBDHUcx&XͬڊYAIx,{7bl ? :ƒh"FIEnL>7o+`_? ~@߭LES̨G/B#EþQF$Xs8.Ĵ3߭('GxON߀'cz-aDEHnG\1>z3fanfK#wO;zyHR#^mzz9?. Ȇ0 ]vK/>Yrc*4~-{D@9U!1FYWzYS,,SnaO,Mk>KhB&6v*q=y_6"\(TM609:7./@w'iwEug #i [}{SnN^DQ@50Ne=-_sցIBcԮR{sv4Мz N\_[KLxMd¢$!B0*@X~ONNsLO&jxeA'T|t(sՌy"؄Fkjc/fR25R0+ՋҔO,YYk^[T/l ̠̅OVz} kuqf*B@Yέ6] !|khZv~ܢ w:c$+34l, 엄׬P/<z\hiIzFt{]S%b݋NaX)М0>M-zqū~T B 쾢4#tTZ%۝pvrcdWg4v'&վεZӺ3'xۉ >퍬r!xzV71A;->ޜnz>88(ђ(w/+VdIbp_޸aU%7L k_9(T lHiRЈ%_ћ0غl ?vF(f{ )s=ӲȽl-8)Κ_g]`,c S %H&)d9jtF#ۄU/nvH΍؋c ؃H;@ȥz:XKCUSTrAVE bJ , gv5&/zs$&m%uH5MLp8rVXap٧ MrCrKzT)p!^Y%B0}WzX%h+`m]|otF.'Q]kNY79&+Ϊ;VTm5~`0bpo?Ōbm]28"`2X >(ԷM}JwԘ4j3E\-b< }-dmUIby3g{ DYKTSTsc4^`pHҦ8ձ&qX}PP5l_; <3fg{أ>Ⱦ;BP\)'J6ոOz;lx夂+WOE鰭'hދ9iU/^i kh'^L£Z O'U)`S4WSwYGuv:E򎁉 bR]5?+e͞x֚hCI_O1j#if;ՐSȦ6(vsWl>a68$lAME*DDBa}0+fk9 R_c˃z%5r<}0)31/y#*"k.e: pΫL[$Ua7Wiqr`-(`G}=RJPC^B!ӥ};3V@уI<3mϩgkuXwItGj?i7ʏmՊ7Pz^"}+ed nSH|ӣU;} }܋Ы!Dod@ynӘni~0SCxg:iRHںVwXY170}s,4s!߁ 9 7 \%c PiXL8iiҞNk}8\i}WOv8@7N7ZO?mKa9H/ 'SPxNrV$F>Jb-#8G/IvfOxGVCD 5\@|!{d6}\E(*Dӳ.v8.5=YbMZ!t뽷ϷID-ʲ\yz˞Qk܍u/|9;u@ $fEhWy1AEn5_8|>:b s@aٕ%ܔVxy:+khK3dsw{t<Ӓy-~I^y"nV˗kA8+"gR)Y>5_d[WFg@[#љh_H~0z 8׿x.œzO[4+Mۿކ|)&m-7*`UXKN&LS%ǪV]YN'[U# aKGv#E2Ohe=D'zDD~{, ]VKGϨʬ9(I^Yi]r-rb{(&Z]5aǭZ=bh{xbnuづhP=cR(/'1Y抾t&x?$l`vХ8/;a)Y$A#mۭVEb? 2X4ҮW%m,]Fq# @[fI.6ho`=e"D\WbƻIyrHhۀ\+LOsI/ܲ>J[#Є1G ]WIGXlC^aPs[b_\{! yU v7aHkz.b)Y:n Z-> k7?]:A#8ҁD>MAco~% 2/Exu56.{0I[k15C; (8wfI} fRvr C2#XsV~&fa7&gR)?H5k!X4~Z?mCeD60}ǵT#ZY|  26\N@ج:sC|.  kcI ryS~4O;eR"X#$>_tΔTN&DQ(ucjy?ans!x"!Ss ~֏gLp 3JC5>9RHW+S1+!在QÀ6]ݵ)bϱV˫S vdYCne΋v r3S>dP#^U#neN {Z%My+v잗怋_Βi[Ҝ|pjSuJnPtȸqLлՎ2WzźYb;|7v]gBaךО$F endstream endobj 1903 0 obj << /Type /FontDescriptor /FontName /WTLZRN+NimbusRomNo9L-MediItal /Flags 4 /FontBBox [-200 -324 996 964] /Ascent 688 /CapHeight 688 /Descent -209 /ItalicAngle -15 /StemV 120 /XHeight 462 /CharSet (/a/b/c/e/j/l/m/n/o/t/u/underscore) /FontFile 1902 0 R >> endobj 1904 0 obj << /Length1 1630 /Length2 19477 /Length3 0 /Length 20327 /Filter /FlateDecode >> stream xڬct]&vv*mTXUl۶m۶JŶz޷O}~15qM\sͱ92PƉ gamdk-g^ h +g#'u:Yڈ:y@`#ڹ;X;TԩiiS ?4=-l?\Vv@׎@ 0D4$Tr ldea aa qRLmV>mmL,)͑/#h4t3-~,f6N{d 1r6'rS%d`/oT1dnOlGj_K[cJ/_# O,# o`vJ?38 LabӝTohgg/oY,V p,c;mfaϬH٘-7q _ gf&ahbkc01: c῏[or_w3;1Kw~Y4V?Ck +V;߶ۘB Gq 79o%W1:XYr虙N?$[1_3I((jo G5& @M_@y5trph_t wc[FGO?jcg$k?{ h {֘72-3ݩ;wdJL{|$خQƶ7-l6i}@pˊ7xOMJ_II{W~ycBIpwJQIpڏԥ8! "rh|td6''$ crVz jۊ31c:s%+ٗ0>ЊQUh| KQ謊^}׊*EOU 4"OT5*!ɡLxI5&.tEMHYNz]X͢[p!'yf34(5~#+&ƙwÏ ppK9\Hֹ:vZv4߆YzB\I\L}QLSZ.'6ndḄ.~ۍOOXp Mc$g~S`!M2l`P*?f(_(d>7cBk‰>KhMG`y<8p>uu`6 owEM{ [\w FOhH:e`T!+9ҪRZfQ*2XlՕIJk *&g;pu x[^:/[vA!C;AaI`Dd3h'cڂ򜆆P0Oi*Y~aL\k#?iZoH7/(|A84\B= #"y^A Q."/ ʼxa-_|[IYMϿ ;*#~i0~L8TrVedW⭇?pcfDhW<75}}NLAܣd !t[UcS!by`A JaNJ>GH/ho(0~xaJ|9[=(ዂw?lDK޹Cۆ댃%̮э%}]8e<Oॸi =tZAWrns÷CRA#;W\a tw+3r,O[>R MZ,/M"X%Q&]#CkTIP94&rAwHIQw3Rh <L~LNfǎ&ȴeP9lގr{\hJB;_UYdIpY]XHث"\#c?F՟Z,羉>@OS_9MHFEi zF|wjȫ5^O%axģ# PKLsb$ Ra)ת!IO4܌@Uکyy' ɥ)+NЬ]-j*$Uolᚍ9G"mʔP,TIy)"F ,]$ =HdP 5[t5]EOSZ?Id{񓔽(C8"!ʟ#rv[t]w|q/P[D#$٨[CVv2Y5#L 3k"|4L]ؒ_gs,Ǹf]7vc{!ڪ?84rF\ F ف\ .u1%tTzg,5ԧb qTa(|d@h74yh8{HgnIU7o&x|9hR˼%#d-ul )Wf܅קGϺsƇn-WqBZN/5uB"[]3=VQZF_`>',uDr՘7c!hq 0Uw]M> @6)@w?dW}X+7Fl^AdR$2 Dʚ-߽j->]T>w ̲mݪ{SCB{ S@H];4?0HɶrjiR2VaɥaR}kA*^߭jM@KY%>e聇Ғ[5ŵ}5x8 mV=M7y'(5,qPU{y(TCpLS͡ΰ(qDINnzzwCZY|򽙧[_dsA(:csIydU'#w! KDMȲ_ K#.dV:ͻL<(--t˯%$_CaWyQ>Xpdi|_ѓՇ(72)4s<}2"yw/Q?u5Ռ_da׉0v>MzF[KG}s\^G4%5Yns+Ӯsu$W=5Hщ ZZ(Oq*\,<mh߹6Uӗmg/`Z5o<'Y7 ɯnUK YHxbQC@wN;(Eh{hs,C̱oZ;W(QhXW!'mx`r{g9dA=$5F3 ̍\FsGOm3K/|V" : OA%$8rW˜ ӆ9MOcf95;04P|[0Kx/'8RԏVw55+Zˤtr#8)ͱI>IfTA2%m3B7=cp恬X}"7& -~jg ("pD([ fG?9>ѽw!x'ʣXAކxYZޓz&- @Q {0xv0ֆ%|qQ83$&`4$U`wa*Fr͚גH"?[{twi R"4f L41&gzw:n4t 7$k9Z$&10 bAH'. v^c#Y0;x-}vO]]7B+34%'s[L{{/9jD䅱 NOjfZB\ݖ~>'ޭE;kTJnꌾ)KUIv[h?*Ig'~ތx-m$T;jTs*-0?8EAb b{^SEНHgH\˳`@0K'!^H_6\ITi~qI1N"y"8q_< hrD ÔhA=`__ + ̛R'pt S@;:z(oi b*MD1oV,Š s 3I4e7ѿOSMgPcOux5aO8y !$VEc/2EDzX&; ~VHR -jC G/5!BBb/8!dElebHZԻ'*V]Vj$6Kʼn.} {Cvw&Pc~ G% k\OmuoV͠i F^)~7e fvu !1pϜ졿XlSyDmrT1ND'yրa>ZYVqqsF.*Rgj/Zt$:w|"s@,Qb`9@IYK? dO|fMT gb$ShY)rb'b;Ԫ'D\܍d4v*rL_ {uRXzd3;9*:PK<$0 kSK2|I@_XVJ6©L+Jsg9! EM)nQE 'SXE-Lvߚߙ~T7M:ĔQ}ƺN9Oc&f#g$|^Y?QQ:%+6k1c j`MyLtcxCL+B͕ׄ $ft ( 73xQ؟(X#pq@c&\sYӾ`?0m1w³_Cj$w7c ɢSW@x XUFMp5>8:sLsD|~PՈ0.9QԨW$5mQ! ??ġ' ~IvΣө~~,L~E(~19 ^b، _FOgÀ9nb=-r=eR;pekG7Ĵqdؠr%cVdQo8?ݞS4]j>ĭYΆ?,znG[26 m=RixPV7"!?&s3SdR`OXw":բשdi_W]T4+] Z\_ɕr7*kP^LdH-.!DkCՁS2)F]AY: )}90'LVDpWA2L'޶cXmc8ѴfӲA:d X|dIHZn=ZDlH#  oAlHK=17dCN(t]Q `+' 'InuLMXѷ흢'9y-H1<Ǧ[(%Ԏ\TfKl#C A_~=pChϰ-886g[1F"vBi~+jM_YMi4~!DC+2AC 1,?y2?̚4kkrDYg:UKK|UXq:=jJdGBxU$a5<50&KU868B+e%Xh^msXj<",]N*)-[(f͐}7"7:+\n.!ď}q%9е/&%#LkI9oҭ:Ì@]wi (Z=u^q\I`59퓹X4ͷO*8ҽoT沽](dqiIqnVFSF%dɉC $GB-}+$Kd/<Ɋ1-{@Ƶx l1Fy ANnZAȤ0dlȾک-izݱvvR6o!rdz| ԟ!Y^Ky 6Q@B`6㴵4XH[2 5i@V}#Ľ7PE펶iT;i\ϑ㳶'i& S0OT|^3 >*J56rM)Oc%;Doܞ$|{1{gddT;Zwȧ[< o}s7rSEՇ6]r)Frx,Yh~"ʳ{/Ekd 3)4<=A @7{pR-Q|Vk/K4 E :dg~D|D׺@n,b´ b"XԊdk1?MM<_܂65IuTvfnؤ=dR6_,#-~F*[H[Nk%t^ 4UZlQnOW %ew)Cw;¦{+HJ4dG/5DM` ϖo!Q*EnLsl5u F[D*zG9"XepȶU:uh$z nOkṎ)|ran:3&EbME?Ulx0fV#b7Jr+ߘSc\$i Z`?XBi/?TM%j ei@i%ո[o:W['#y mn wN7D%1(&6g=pԂnSG6Tu9J[D)S k!7(7wN+ѫa'P[ oCmwJ {x`NM$Q(`U5GQ5> ~j#0cet )'YH-b& X2Vߔ)+{=_b¨] ̓ 6=[uDW岭ONn 8c20-e3 }4@p0#_GS>N:&VzTUNۏ^Tߙib%=N׵Ŀ] ɧw1.{8( {HWE5o$ۆ9_ LɉA7oT#$#f nS|Z*!yBJnĠ20'S_>pJ e/ɣ*^ڞEvK+ |-+c#acZ>a%iᑰ7huQ\8+Yd6~ -_헲[ 珳;b3&Լ 3߷ C3BƉ3'qjҙJrà j4? ۆ7̿`+%`;ɽfJ,")=_'_pc%J6B=4F=BV u<nh8mCu ,\++ n}ɓy*+ jб;"LTkjj߄S4HBhHFn7 ӍKB}Q{(1~[1$M>fѧV0#ZfKT1ZAݍP.l> KWBlQAgj+)>]AyaUvu\nLw0EAy 2t'(5ߑр1VJ#x;J,ڃ>U(eCY~o[\|{d${roBZ3,P3p. S >amksɠJqMetc(݅vr(OOl'Qo(,&k@2`6O)<}oFyR{na xD`Z}⮓8E܇롑t1).,y%Jsߋ O.q&dr\ H.2iܤߺ̇ / 45)'knnj1bD"N<O#֓,5f tHR~8եBiBlp̧<~_yO1 +7ENB1(;BwO՗բ/W{WB&X 辸dیǢ;LhCoL42 CA2WȠ(}#D^N(>s [>RړE,{5Zv:tu1ԭuyK6s`9 EQ]@0r*zϔOwMF]K[ ۄsw  %Z) `/"(ig)c$QʘzU/w&gD;~DV2-JŜY|gP7f䴪7ĵU]y5Hɣ9{zKݓ ^ *(cWWsԹkחL&$vD3>?44 տ&U9Mr:M0At5`;kQ< O>/#2 =ݡ.ȝ_citN%gPM#ļhqDmәϛ.4uZYA'ޤu=v.\j08P󾜡݈Jd\(;2ً{W fd9S7e,$PWT6YRu$^~xڻ䯡 vJ%r KQ&A#|:zJ@yk_ޘ獧=fA <, X,?Q\$ؒ--j|J 4[H,jᖽY,񎁲tؖh"wrͻУv/Gq~ÐC+#, g 3U YI=@.-|ɭ BsigM):lLRԊt<]WH2K!znu[0[wF6EHLtaJQ"&~%cB8 k?`&?>({=w;oL760ag7mY}}[؅ŷ)q0cHn5'K!*7Z*&ܱïGMEY&|Af!A8<)8-Tf PqQv+aN $&ʹM!πW _SXڶ/i# {@IuSz4Oƒʓy (U8ӅT}&׾񅣘U#L-5W%I\؇x #UGV0)# h@Nd^ PCv7Iʰ0Lɲ~6CK74IU-\5hH:|p*ITYmDvwWъآMRx˟I$z"j|t~BB3(>24pôYoQ hv_ g4u>*s1a M5k{X LEoe׺\")Mж{zK$0s*s {-ƑP\@W=iMC%;סas+Vq,uoFWB)±9^{s{v`5@tebY4N U ,Z^ qp>NDB( rshᇶ?N 1ͻ6CtVs:fQo!C?+,5~_ϒR}+wH~ bt '?cz7QHN7L2_Qx!\ ܧYvg(3gcWL%w]@U[,`=uw`ԲHzӡiۃ\|6$* _%>X~D D1¾+DoJ!Go$au|4ۼ^HEw wӶ&@PORiU(4X| HnFFk3'?VJzi Ti9q_q>-Uk.V,tok}쏁!F4m)(6UE"(_fb7lbTnbzPL_azIFnp\N㪔/S$;0Oy\ D-RG0>8Fݼ=]%e؛@ }K)wL4Q _"ocKst>Ahjd1iK &WorځTRE^,yխ|^~;Uv`s .`s8ڈo5<";jnLʗ}T! A"ÛOuSX g5~fh[L LbgT _U7>FڑE-i1SWf(.#D/ ?LLUm__Fʢ>%^U6dQ镘Z}CҸPOEiߠuէMˡX!z|΍,Xb?%]g~~+\hzH|Si]G.cgHa*yQ[||͚f_Z$^PM%\Ce# LEu>]{a9`wRrn_v6>4n{aȂi,)xW$}!`}PC& z0Ͱ(gN:kEXZep̎Ɗ8Xgv :$qo_›gښdSꃱ;yOgk:X;ܼd׶UaF()h~!9R؟-˘].)4+pMnPZ 'eʝ{n٣;mk1Y#E>K6F٩F/?GSh7l^šo&m++ÁܫJdA K$ճ; pbSfTݽ|anE}0J'X(?)]khv@NAHъ]'$ VrZ#X(]y CQ65I S$Bw|ЪL~Φe|XV`Rjx[)ZTTkY< cM&_,@i[e^Ml4=[Aʳ*~ f!F56OWCE[H`ۑ雰Bb J;L%֤Ix%Br;n oMBZw%y(Z]^v+w'X׿VV|QnnҐ[;#nmELAFK/dΊȏl R΂?;706#0xt'.Б#G] :rE00 XF\ /NR{D9 *fAREYp<^rZ%#d 翗[ ki51ڜ!㴾XZbh s}{w=g=C R:eU3}P5q5[5qxb sZN\hJ_\+"Wm;:t)vT(4<[qhכf[ D_j%G,ֻ@·(?ߎyaGCCÆ-eԟ'QQ[&tE%zVr!kRwxQLY[!A37Gnd fo{v na da8affG0z)>CQZ{Rq2fjt&ʴ ->C!P 6d-zOnl ~s"t]4 9}_k?p]y)'ք5{}r^Tl~S#FXO7%2Glȁ8BAԝ=? iĢ:3;-,ާf"UBs ;#DgܾS|BʬxOHkyR6 R`4x_s+oα lRW\:>gYhJau/!5 h">V -^Y˦o&R}6H;VVĒwĊCF8 ޮ,xhO!srlz1I&ta(WiU*]MR`` ah;['e^IVȞZMcM5=/  ўm6vIk"df,M+6S'OOGh*Xי0x5_հ&a? i}jKms󚲉 QFتT=o(~ "MH2$<,:zLԻDx=.;&¤u2XDžd/xƸ1;%!l M_VmcY9guk|tePSnrhi]A&Z)CL/zd|rÚy#ե-@6")pn%D *~(nЀcaJ9GcRܻWS {u@IҬ UbūƋV5*O.D1 'h}N[&@1g*ҕ{U&)~jY0j~ ]1aꦹCk Mft[ߟ$Xn%ώ9%y'u,Y[\9_ u%M,<;N{b%{ؘM_ahqrߪ 8s*jD/c sA,'&w X!0ǃZ;~xe˸}c1Ģkm W{8KN]h'pN}\:xmؔ,!Pƈ,.?̃&lj3u(6O OlpTf ĭ3B-!~pSy>^S&~l]U}6P&S$ ̾_)7Kŵx5ϫĦ7) 5thj <lQNʶvL{Ze% **g̢ JjS/#Fb^8hu?DD^ΆYA^pvܕ=>gp,S@9Gі!\TX>T*,ƞS7,C7F"4˻%N̾M+uwQ5;s" es:n9>kGSCg;jvy1ЄWی!i^ ? e>SD0YU{M,; > endobj 1906 0 obj << /Length1 1647 /Length2 16403 /Length3 0 /Length 17262 /Filter /FlateDecode >> stream xڬcxem.tlt'۶5c۶mul;c۶N[k}s}֏9T=uWsWs 2"eZAc[C-#@QZΖSV h,d`ұ’ ; mmD \u1@h`b0rrr’mM͜JT4%g ?5_6 5 P8&V@OI9q*@htJB cnqRLlV^lmI͑ K`p݌vhv@ksGǯk# l6FV%7W@v_;t_` NFvN/ "bߎ_jNc[#R Kd`np906w2pf`0mL+ W-{;;+YkheB˷ ,?"icb `d?u.@?5C;hK/g@2?B?r;G[-le%g`U3Ac`5?17X[nu࿣ A/hYX-6w3w+;L _rUc өYU@oʀ^DLBHR0mY*T퀀.kk@ ٺoFڂSģk=\X2nL$'w}vg8WOwg4[:g&?ʎ)mTdžeFˡ;3a^@(^[X-IQ^=^jF}R =%sƙۍAY *~&򃐳b/z¯E_3ф5ҽ E6G G^*(VAd/gBJ&|'u Q7of>SJ]hu$+A[E o7:rVf.sx~&+S.ކA^h{ɔaV4`b6L/Ω@˔MŎ3 WDih#cS8Y䋡Ղe$s_w>.|Zn#CDI u5{PCl^p0ԥNz%Z[ILx 6AcM9ꅦ#λ^ )ah;E:1[V@v{lk2!ȶ3[fB u#nZYCKw(Uf>AB= g~b{C.Z6Ƞz%*7P'!Fu~h Cs]{m>8RyOBKJ%M)8jgFi+>_75g_g'gtoώy<B&UXt}BX<eb܈'$g ӎo$>IJ*{vzҨܡF Fs$ PŨn^/d~Rj?@(,Ϻz\ NΥO"xM<2ܠm'Jg 0< VYPDY!,E)"Vz1R>Cr~Ƌ<8q 4hFr>tT̫8 潚GNj&:ІBon&QBa Fw". ZI@'m*aXwlg?ԄƬU'DbvQ"Mf0+;wj}13? y57uv0:005`N Ҙ.),ZK@5aنZJL'gPޜC"my2sCQV*CFP?(U26VDjDYS+u26g#&VgN =@-62`*93OUihwr"X=?\ׯobl,ب˥P>4d!.s⬊]X9o"bskgmg6P\/Σo#f'$}CkrŔ$`%^Q q8 p['ځ9M-H=QƗUGwU$!AT<g_\R#ƥ5'>x:dlގ7qĉ<,^w֊< B(ia TA64w?K5?_{]wU[cU`_&a!b^bW[ǩ) A`y EIT=nO[ 蔒FE#!Huvh;q4zJ'V66{'%j_)ɋyb!Da>3HB4y$|H]6͞k`7=~Xut֔%;sGne৵Ж*(b.Jv/bL&)]kO应4&9){ҏ#hV&nS U?6cs^0ݓ8P_ EC˽YhFunq҂*/a 5%-\;KKKɸb ,~Z,;zOtWi&7%\M Ud@hPВNf ·wu7ɲ&ʬBU1T~!V.X{T)a'X˜e/'AkDvr ~J dA8ξ/YBtֈ폋ϸ-MJzEGJi'lEzƸ Mc2L?.RދBܱco7 h.ׄaZp(.E~ ǐና__yS!["{%g8 dDDy.:[kAEޫ+ƿ$|Ÿ:N7?'i<rB:L fswժ`tt]蓿0KP$LԱO~z`FH\^/GQ+ZUF8,"0"A"2S 7RW4P,vvo|&67lrCFO܃Z<:6L`#MZ`)Tejؑ cm?lO24X+Yvh1J7 !Et7^=9'&'k`[L~\_65kuZ_)Uv-&Rifb݀[E4X6﵅ -(Ӱp,1Dg^G]\W"1Vr"*U@"η{*zrJM~uq ߡOP(uzhݎ0e?iazWwmZuInc,;㳘Y*JJZ`6 ;咺JE8']<^k!~1b.hǕ?j^.2oAwv"c ˖͉Z;F:AI(7#(Ƶ2ssFS-rg_+Xq25MD4DieΔ’>S)Z,m!0?ɇH>;{O8'6T|`_z\tt  cD=֢<&o7T'xnYxQ.]QPh- xk v}ĖF1]eI% Ж (&hg(к>,J&uTk>h4t +![TS5[n?t)d\$]{x墯uߎg3]#u #y v]T,3QұD-m:k5gehT =N^}a$B~yi|hJ1>R+:G6>ט<߭9yT"t4#]LjVp@r]oC2M/Kz؏5sPD:+T@9*??Uԉ8gj>*NbS) qn0S[sHdnXDygl ryHTn5eVt>h]=.Keq Xf%X+T~GyN/I@b.U+zwWE/YsBxM% nڏVTI7Of[11G,gjj+& E)*l%}xEﻻgD9 ?k+-/}݄jfB9)lb-ENLb XQTp*rIJ7*k[-E_vђ[<2%gwShuHhqf7pv` joCPC^M GOFUK5y(8!UVw>8*Do{.0W}#ޡǠQV42Mn^>\D7ʲsǖ-β[ΉKG7,h#dɝM8t)eӳXqEJ٫y)YXY fֶDCRi& 121`Q:J$Z2{ URXs@cPttv&ƈFPQ ;NGN~O ޠJr]粘]n;&fE+%R?y,z\?6(1q)e.r]}H.1gDߪw+B١Cۥ!f` )އSue aL~+ mDn*`KRTc76E.TM1ij6ȜүMh+uqQ|Qwpf,Ʊ#3?W\;V-@-ws"yQްN19s]CUM=G։ ‰ֽJ/YkF8gQWDfli"3' o"h8CJ2Q+lj6fG$p{@mE3.ewR͗ZyQ'_VF$KbR,i~fHQ AѦ'ZߺM%^st v2d y1>ƨLa- Q޴B jQ!DHLw` 4ˋ%J ~S$zC?aQɤ"5,ƿXCM=Geܽ"B2[n,)^Oc_#: _ܙ-5ΉzkUXu>lSx/]r v5D>'oi ,-hv 5\ IZ谈BC#ZsUKߡOIjnEQltnv1\,"|PF b"%Ao'BnкYϓT(k$v趯.v?pm'x` g3XOo)xk2J̇bJ]drtC`ʨB{Դ?3+]IkEj\6us$ EES1 YEeR2w ¡kj$7iwQ,`fƘodZLi&Y݂OPh!}i "'Og{~XH8%.*t lъ1͹ZjFnD} 6*Zߔ7& >gPBU^&vlA|Ch Kruty!GEAp_+[՘Ғr˹@ F錮װ)$KJy{X,QNY-M*i*(%+iDa+M8!Ѧ#+,%MG3z`ZqJAq>_!?4],x[oWHE:ץyBvC$(lδ&Yc,)s~y}C0b&Ne1x/> CUj]?w>- y ?blP<Q{|vI/Y<x!pf%=[tUDZK5$H{3c-q|˂WPydX2#Lcf@y@`IdpbMfB,9}"C>1XoLv'婸vOp," mѡuq+4Tvnj\4;R< A: 3Os9]؎w==O>[LO);-̤?F2|lm"AmS,k!푏*z]jO?3eP^ʠVC- \ &Tĥp'RKbC#YzxҺpnu\*mPڟHdͨ˺|CnB ͵WsDpE?*)T"a['V"rŎ{[n)ٮlYsE˺WyJ.^|JWI$X;,mP`k>|8rT͊9VvFUB#Hr1U_R*+'ۧx&xLoŵA$u KC`rk/3̕x2țl -a,:I )IscGʝ%YrF!=i"4yX r;_GKk(SV8O(s$i!qK܎U%g3JKtѥb[ۭ.{MrG}Ny )rt"Gn0G6};g9h1:'v_y<;9r60m掑Zr խBsnT@P#ifi@}*"uh`B>CH|7\?ny2qʎ $.Exo2gzFyg}*9K6 *pkfvAQt s@T}QSퟆ6jXԒS8hґ@hZE`1}w+{ PHha߆ w )ٳknwȽ3OzK#%1bѼ jW)y*O%vyFZj!.:,41NTHS ~`˛Mq\gmq)>`;],\ 09)nx3']~bcȍuxѶ?@w0y@Ēa21"T.)3{& %vooY Ant " OYlԘ5 P"H(9[˼pfx8sf]feIM 7;{aIm돚\⻔|]{͊j%dHh*TZ QRf-jށ4Emj7V|Iͪ؇y0gy؟&N@| 8o)NH![-&%Ԝ)X2֪e5d 8#Uۥ:tЍ }y az_,ki5-MU4qmEOil!3,8e~duAc+>ړbS+ vzxpl/Oݑd=XB>x}pRQ,7Ip:[}+St`Y=|N=4Mf(i֢^gebU<<[y>׳UcK&St34Kv V\kĖENj|Qqm~cʃlzrˋ!/;zZpmZK{ě4q?N}ˤӋ H3oB T@#x7^Z |Zʝe\T_GAg[TC_@I|2)rx̣Sq-n!CKOZChُ'L’ݚ2x}ql]ky=RMz$1nDlizFOhncO 2G0iBUɆ䦥v*H糱O6-D7ali&!>NFt7{^`Hf`w7C-?wЬq#ڙw/\kϝӂP 2?hQT8vwӊ޽(bץ@nG_*3h٤ Q Fzf)krI9rG*"Q fm"Ag OQҰh'.[ ڰl<_zZŌB~T"y7flM]rZlkSpcΝ@]lȉE i3Ŀ<#< Y:ТZsP;BѝeCg/~rd @2(# "i޹`6 eX}|:<(a[ I%tEy)A w{ =Y[MX¦hPRus$-_MIQéFV1 j{_unV uMXR[GD;Omޫ3gtwS|-B]DgA$Ϗ-?4 Hu-R|E=U@w"VJH}9 0}n8Y\Ǖm8 2R)ȝ){g!iyַvY,i"vɅI xbZYaX#B).P{ι;L434?MٮQD[Qb<gW^W_1AX/E:I4Vsm$: it9PPjH ^F-zΗd.F{9 iGa]ң~(H._R֜IQvQ C6h+5<QK %9:+<yENN6 ጴ2zÜFJf)ugDtt#)pV`.`wΑ&;H"JNև _K_lg$T~{PǷ vuJRc7 hח3]M@FX=ed'pF:[YK!"D9_9VrkWIhbzK%!n"[bw E$'ώ l%r^Nb,h1"oDx VYD̼ٛhDPU 0/:"w/qټ~P@pߟf"-wN2UD>&$G: K`w֋MWW2,~_*B9ʿ#**wS'0Ұl3hϐ]}J5)(9`+-"a=x|%l?;E.^WZP ޳e+Ô 93KM(O7KQ2,nٮLuV)+·5ߺ47fX2WK3G@}MϰaC;"2{hc*yy΍:\W᪹ÇB 锦'ʨRڡH!ņVR(ZeE9>&8!<+or߳Y=}]:.(,Hu$JѽTkk_$|\׆= ?i-wD= ~ICaky2,Lyno+ `̠'ŠI*RZjFKn݄\okV"ض5tK eiŮ2F2 Qk{z>!OM܎#&.=Ԁ@Dl2A9 ۴c!j cYGaS.W&ePB YdɃϣu Ko~GІ>7Y9LuT!}SxVzVn3W{ĸVqr7^A=XͶ2;>17{CJyRA‘f^l@G&IU]_-b}d}-`hBVǕaB~ߤ#WA/ц4.Z .ڲf} =!:-'  S&ORf%?',j<;rĦܺ.p!L֑L xw_&k[=PQL s FMG8X{LoE|6y-YJ]!cf%9-/69ACG0[4ȵKH>\~۴.nչ.Yi =ߖP:A~NWyyJ\w}:9W+Ն)"Vb1':W spǼ2aOؓP Q tul+Y4zL O*B9VJH́V<޵`g7 6ȩN|WGS,wٴtׄ{8LZ3B30׫a"h2RF<\X dޟ4!QDaG>/$JDfQJ(!nҢ)fap%0{jUY֖23."*G3 =u'md֦ =ĵJ@n-1BVUkXqZØMr 6Ks1]tltO#맭 \nj$drN)7obHd?-5[|uZ 恋8}L ƦjJc dYq/Rx 5=V}P=qf5TNқ$4%7qVX AtʶaJ*Mrn7@A{e8Y8x6\S!dJKZ[яΌG(Ze]q)ptM="mWGǡp>y@8  n}RUb.NNY1BCYT$pZ$'^kXT/$@&,fAZn~rFyN)rB@#T?g|Z͝ؤdIjײHE9>$j%xaEk˕Aűklڶ9 i3Z ?"c?C\P/~14u.ϑTZUYA\apSj ` 0ŋ!;Tf 5Yg|NSt!>E#ϧwCK#"͋E*h*)C*,ݴ`W_Mn_4֥Dd:}h,2# 1 Y<$:DbU;櫤 L4~#3`=Cڤ# kYk]rc'wQdyۙ /ߚk4 +U /i+SL!朓֬= &ɏ]Ok8lE6'Ϧ c_hX1 u* 'TXwjBa/o!%qT$R*kPD3IϺN2 3KB%aA? S€'~S_#ЉF$Gb :!w)$>Sc@y)&Uy5eS)_Pa.1nʪS`۾@W5e e uoZڳגjM'̴. ~V@nzPl$5gM[:k_Ս=gy 8Q}(DG4 !cUw 8da_)1.0Yg5B 9ѕ!ݾJ.89^hz_EP^y_>53a cv JPVOuUPB+dղ'["*>ã+r&=rT䕈wrc%po EUe`M |W炮G>W΀O:ꚹFS*j9&fs]f\[T-]5ÃVkf:1irjI?9w0!iďtf;Q2߬w+zazrKvK9pY%ۯI|ݳ3%ُJTdN?kt>-#H]wwc&ѻ$|,8#&ƘaċD  j9VA(izeO9/J~G'M|w;78_O} Arvnaˇީgm% 齜QxϨ/,a (|1I**}W<:c~H|^ xH&\-"R&,[y+N@Kp8EbHf)v[gT-[9dACVHKeQ*;^wEp)u6dT#UUsOX<6s"ژ,:;.6R`8_glCqkùP8wU%QFfZ|#7Sf\Vh˜i,hFl)9`O8|*2T>Xi%pD8 wT1r]ݻDk"BL@~c_R5>nxlY5Zoz˽{8U(%~kp7ˑ2n T)\wjI%nr6`b@|6(Z`k.A>}5-Rf_WلnS.a!#X#I4Q}7}lEᕵ߂[AH@ endstream endobj 1907 0 obj << /Type /FontDescriptor /FontName /DFHBIG+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 669 /CapHeight 669 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/a/asterisk/b/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/equal/f/fi/four/g/greater/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/quotedblleft/quotedblright/quoteleft/quoteright/r/s/seven/six/t/three/two/u/underscore/v/w/x/y/z) /FontFile 1906 0 R >> endobj 1880 0 obj << /Type /Encoding /Differences [2/fi/fl 33/exclam/quotedbl/numbersign/dollar/percent 39/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright 95/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright 147/quotedblleft/quotedblright/bullet/endash] >> endobj 186 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OUFMHC+NimbusMonL-Bold /FontDescriptor 1891 0 R /FirstChar 40 /LastChar 121 /Widths 1883 0 R /Encoding 1880 0 R >> endobj 187 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PYQRXV+NimbusMonL-Regu /FontDescriptor 1893 0 R /FirstChar 33 /LastChar 125 /Widths 1882 0 R /Encoding 1880 0 R >> endobj 185 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MVEJPC+NimbusMonL-ReguObli /FontDescriptor 1895 0 R /FirstChar 34 /LastChar 122 /Widths 1884 0 R /Encoding 1880 0 R >> endobj 123 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OGLCXV+NimbusSanL-Bold /FontDescriptor 1897 0 R /FirstChar 2 /LastChar 148 /Widths 1889 0 R /Encoding 1880 0 R >> endobj 124 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UHZORO+NimbusSanL-BoldItal /FontDescriptor 1899 0 R /FirstChar 46 /LastChar 116 /Widths 1888 0 R /Encoding 1880 0 R >> endobj 163 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UKVNVK+NimbusRomNo9L-Medi /FontDescriptor 1901 0 R /FirstChar 2 /LastChar 150 /Widths 1886 0 R /Encoding 1880 0 R >> endobj 361 0 obj << /Type /Font /Subtype /Type1 /BaseFont /WTLZRN+NimbusRomNo9L-MediItal /FontDescriptor 1903 0 R /FirstChar 95 /LastChar 117 /Widths 1881 0 R /Encoding 1880 0 R >> endobj 125 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DNGPQX+NimbusRomNo9L-Regu /FontDescriptor 1905 0 R /FirstChar 2 /LastChar 149 /Widths 1887 0 R /Encoding 1880 0 R >> endobj 183 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DFHBIG+NimbusRomNo9L-ReguItal /FontDescriptor 1907 0 R /FirstChar 2 /LastChar 148 /Widths 1885 0 R /Encoding 1880 0 R >> endobj 126 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [117 0 R 128 0 R 160 0 R 165 0 R 171 0 R 180 0 R] >> endobj 195 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [191 0 R 199 0 R 212 0 R 223 0 R 237 0 R 245 0 R] >> endobj 258 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [253 0 R 261 0 R 271 0 R 279 0 R 286 0 R 296 0 R] >> endobj 312 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [304 0 R 314 0 R 323 0 R 335 0 R 347 0 R 357 0 R] >> endobj 378 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [369 0 R 380 0 R 388 0 R 396 0 R 405 0 R 415 0 R] >> endobj 436 0 obj << /Type /Pages /Count 6 /Parent 1908 0 R /Kids [428 0 R 441 0 R 452 0 R 457 0 R 465 0 R 475 0 R] >> endobj 494 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [485 0 R 496 0 R 503 0 R 514 0 R 527 0 R 532 0 R] >> endobj 552 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [544 0 R 554 0 R 564 0 R 570 0 R 581 0 R 593 0 R] >> endobj 618 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [605 0 R 620 0 R 627 0 R 633 0 R 637 0 R 642 0 R] >> endobj 663 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [654 0 R 666 0 R 673 0 R 683 0 R 691 0 R 696 0 R] >> endobj 708 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [704 0 R 712 0 R 721 0 R 727 0 R 734 0 R 741 0 R] >> endobj 751 0 obj << /Type /Pages /Count 6 /Parent 1909 0 R /Kids [747 0 R 754 0 R 760 0 R 765 0 R 770 0 R 777 0 R] >> endobj 787 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [784 0 R 789 0 R 793 0 R 798 0 R 806 0 R 833 0 R] >> endobj 891 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [880 0 R 902 0 R 919 0 R 937 0 R 944 0 R 955 0 R] >> endobj 973 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [967 0 R 975 0 R 980 0 R 986 0 R 1017 0 R 1041 0 R] >> endobj 1063 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [1058 0 R 1066 0 R 1077 0 R 1087 0 R 1105 0 R 1117 0 R] >> endobj 1140 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [1133 0 R 1144 0 R 1156 0 R 1175 0 R 1192 0 R 1204 0 R] >> endobj 1229 0 obj << /Type /Pages /Count 6 /Parent 1910 0 R /Kids [1223 0 R 1233 0 R 1252 0 R 1267 0 R 1279 0 R 1291 0 R] >> endobj 1311 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1304 0 R 1324 0 R 1341 0 R 1356 0 R 1374 0 R 1388 0 R] >> endobj 1410 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1400 0 R 1412 0 R 1422 0 R 1434 0 R 1442 0 R 1449 0 R] >> endobj 1463 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1455 0 R 1465 0 R 1475 0 R 1484 0 R 1493 0 R 1503 0 R] >> endobj 1524 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1518 0 R 1529 0 R 1539 0 R 1549 0 R 1558 0 R 1567 0 R] >> endobj 1584 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1575 0 R 1586 0 R 1597 0 R 1609 0 R 1616 0 R 1628 0 R] >> endobj 1649 0 obj << /Type /Pages /Count 6 /Parent 1911 0 R /Kids [1642 0 R 1651 0 R 1659 0 R 1669 0 R 1678 0 R 1689 0 R] >> endobj 1712 0 obj << /Type /Pages /Count 6 /Parent 1912 0 R /Kids [1705 0 R 1715 0 R 1719 0 R 1723 0 R 1727 0 R 1741 0 R] >> endobj 1759 0 obj << /Type /Pages /Count 6 /Parent 1912 0 R /Kids [1752 0 R 1761 0 R 1771 0 R 1780 0 R 1787 0 R 1797 0 R] >> endobj 1821 0 obj << /Type /Pages /Count 5 /Parent 1912 0 R /Kids [1813 0 R 1838 0 R 1863 0 R 1873 0 R 1877 0 R] >> endobj 1908 0 obj << /Type /Pages /Count 36 /Parent 1913 0 R /Kids [126 0 R 195 0 R 258 0 R 312 0 R 378 0 R 436 0 R] >> endobj 1909 0 obj << /Type /Pages /Count 36 /Parent 1913 0 R /Kids [494 0 R 552 0 R 618 0 R 663 0 R 708 0 R 751 0 R] >> endobj 1910 0 obj << /Type /Pages /Count 36 /Parent 1913 0 R /Kids [787 0 R 891 0 R 973 0 R 1063 0 R 1140 0 R 1229 0 R] >> endobj 1911 0 obj << /Type /Pages /Count 36 /Parent 1913 0 R /Kids [1311 0 R 1410 0 R 1463 0 R 1524 0 R 1584 0 R 1649 0 R] >> endobj 1912 0 obj << /Type /Pages /Count 17 /Parent 1913 0 R /Kids [1712 0 R 1759 0 R 1821 0 R] >> endobj 1913 0 obj << /Type /Pages /Count 161 /Kids [1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R] >> endobj 1914 0 obj << /Type /Outlines /First 6 0 R /Last 114 0 R /Count 6 >> endobj 114 0 obj << /Title 115 0 R /A 112 0 R /Parent 1914 0 R /Prev 54 0 R >> endobj 110 0 obj << /Title 111 0 R /A 108 0 R /Parent 54 0 R /Prev 106 0 R >> endobj 106 0 obj << /Title 107 0 R /A 104 0 R /Parent 54 0 R /Prev 102 0 R /Next 110 0 R >> endobj 102 0 obj << /Title 103 0 R /A 100 0 R /Parent 54 0 R /Prev 98 0 R /Next 106 0 R >> endobj 98 0 obj << /Title 99 0 R /A 96 0 R /Parent 54 0 R /Prev 94 0 R /Next 102 0 R >> endobj 94 0 obj << /Title 95 0 R /A 92 0 R /Parent 54 0 R /Prev 90 0 R /Next 98 0 R >> endobj 90 0 obj << /Title 91 0 R /A 88 0 R /Parent 54 0 R /Prev 86 0 R /Next 94 0 R >> endobj 86 0 obj << /Title 87 0 R /A 84 0 R /Parent 54 0 R /Prev 82 0 R /Next 90 0 R >> endobj 82 0 obj << /Title 83 0 R /A 80 0 R /Parent 54 0 R /Prev 78 0 R /Next 86 0 R >> endobj 78 0 obj << /Title 79 0 R /A 76 0 R /Parent 54 0 R /Prev 74 0 R /Next 82 0 R >> endobj 74 0 obj << /Title 75 0 R /A 72 0 R /Parent 54 0 R /Prev 70 0 R /Next 78 0 R >> endobj 70 0 obj << /Title 71 0 R /A 68 0 R /Parent 54 0 R /Prev 66 0 R /Next 74 0 R >> endobj 66 0 obj << /Title 67 0 R /A 64 0 R /Parent 54 0 R /Prev 62 0 R /Next 70 0 R >> endobj 62 0 obj << /Title 63 0 R /A 60 0 R /Parent 54 0 R /Prev 58 0 R /Next 66 0 R >> endobj 58 0 obj << /Title 59 0 R /A 56 0 R /Parent 54 0 R /Next 62 0 R >> endobj 54 0 obj << /Title 55 0 R /A 52 0 R /Parent 1914 0 R /Prev 50 0 R /Next 114 0 R /First 58 0 R /Last 110 0 R /Count -14 >> endobj 50 0 obj << /Title 51 0 R /A 48 0 R /Parent 1914 0 R /Prev 42 0 R /Next 54 0 R >> endobj 46 0 obj << /Title 47 0 R /A 44 0 R /Parent 42 0 R >> endobj 42 0 obj << /Title 43 0 R /A 40 0 R /Parent 1914 0 R /Prev 38 0 R /Next 50 0 R /First 46 0 R /Last 46 0 R /Count -1 >> endobj 38 0 obj << /Title 39 0 R /A 36 0 R /Parent 1914 0 R /Prev 6 0 R /Next 42 0 R >> endobj 34 0 obj << /Title 35 0 R /A 32 0 R /Parent 6 0 R /Prev 30 0 R >> endobj 30 0 obj << /Title 31 0 R /A 28 0 R /Parent 6 0 R /Prev 26 0 R /Next 34 0 R >> endobj 26 0 obj << /Title 27 0 R /A 24 0 R /Parent 6 0 R /Prev 22 0 R /Next 30 0 R >> endobj 22 0 obj << /Title 23 0 R /A 20 0 R /Parent 6 0 R /Prev 18 0 R /Next 26 0 R >> endobj 18 0 obj << /Title 19 0 R /A 16 0 R /Parent 6 0 R /Prev 14 0 R /Next 22 0 R >> endobj 14 0 obj << /Title 15 0 R /A 12 0 R /Parent 6 0 R /Prev 10 0 R /Next 18 0 R >> endobj 10 0 obj << /Title 11 0 R /A 8 0 R /Parent 6 0 R /Next 14 0 R >> endobj 6 0 obj << /Title 7 0 R /A 4 0 R /Parent 1914 0 R /Next 38 0 R /First 10 0 R /Last 34 0 R /Count -7 >> endobj 1915 0 obj << /Names [(--doc-TUIUG/advanced_view) 1073 0 R (--doc-TUIUG/custom_view) 992 0 R (--doc-TUIUG/factories_advanced_extra) 1593 0 R (--doc-TUIUG/factories_basic) 1404 0 R (--doc-TUIUG/factory_intro) 1308 0 R (--doc-TUIUG/front) 809 0 R] /Limits [(--doc-TUIUG/advanced_view) (--doc-TUIUG/front)] >> endobj 1916 0 obj << /Names [(--doc-TUIUG/glossary) 1841 0 R (--doc-TUIUG/handler) 1162 0 R (--doc-TUIUG/index) 796 0 R (--doc-TUIUG/intro) 810 0 R (--doc-TUIUG/predefined_traits) 1869 0 R (--doc-TUIUG/themes) 1265 0 R] /Limits [(--doc-TUIUG/glossary) (--doc-TUIUG/themes)] >> endobj 1917 0 obj << /Names [(--doc-TUIUG/tips) 1806 0 R (--doc-TUIUG/view) 889 0 R (--doc-index) 174 0 R (--doc-traits_user_manual/advanced) 478 0 R (--doc-traits_user_manual/custom) 408 0 R (--doc-traits_user_manual/deferring) 373 0 R] /Limits [(--doc-TUIUG/tips) (--doc-traits_user_manual/deferring)] >> endobj 1918 0 obj << /Names [(--doc-traits_user_manual/defining) 202 0 R (--doc-traits_user_manual/front) 176 0 R (--doc-traits_user_manual/index) 175 0 R (--doc-traits_user_manual/intro) 177 0 R (--doc-traits_user_manual/notification) 282 0 R (--doc-tutorials/index) 640 0 R] /Limits [(--doc-traits_user_manual/defining) (--doc-tutorials/index)] >> endobj 1919 0 obj << /Names [(--doc-tutorials/traits_ui_scientific_app) 657 0 R (Controller) 1198 0 R (DelegatesTo) 376 0 R (Doc-Start) 122 0 R (Hfootnote.1) 188 0 R (Hfootnote.10) 662 0 R] /Limits [(--doc-tutorials/traits_ui_scientific_app) (Hfootnote.10)] >> endobj 1920 0 obj << /Names [(Hfootnote.11) 687 0 R (Hfootnote.12) 718 0 R (Hfootnote.13) 739 0 R (Hfootnote.14) 845 0 R (Hfootnote.15) 846 0 R (Hfootnote.16) 890 0 R] /Limits [(Hfootnote.11) (Hfootnote.16)] >> endobj 1921 0 obj << /Names [(Hfootnote.17) 911 0 R (Hfootnote.18) 965 0 R (Hfootnote.19) 1048 0 R (Hfootnote.2) 219 0 R (Hfootnote.20) 1110 0 R (Hfootnote.21) 1128 0 R] /Limits [(Hfootnote.17) (Hfootnote.21)] >> endobj 1922 0 obj << /Names [(Hfootnote.22) 1129 0 R (Hfootnote.23) 1148 0 R (Hfootnote.24) 1164 0 R (Hfootnote.25) 1188 0 R (Hfootnote.26) 1288 0 R (Hfootnote.27) 1289 0 R] /Limits [(Hfootnote.22) (Hfootnote.27)] >> endobj 1923 0 obj << /Names [(Hfootnote.28) 1348 0 R (Hfootnote.29) 1429 0 R (Hfootnote.3) 250 0 R (Hfootnote.30) 1430 0 R (Hfootnote.31) 1535 0 R (Hfootnote.32) 1846 0 R] /Limits [(Hfootnote.28) (Hfootnote.32)] >> endobj 1924 0 obj << /Names [(Hfootnote.4) 354 0 R (Hfootnote.5) 377 0 R (Hfootnote.6) 413 0 R (Hfootnote.7) 659 0 R (Hfootnote.8) 660 0 R (Hfootnote.9) 661 0 R] /Limits [(Hfootnote.4) (Hfootnote.9)] >> endobj 1925 0 obj << /Names [(Item.1) 204 0 R (Item.10) 1212 0 R (Item.11) 1213 0 R (Item.12) 1214 0 R (Item.13) 1215 0 R (Item.14) 1216 0 R] /Limits [(Item.1) (Item.14)] >> endobj 1926 0 obj << /Names [(Item.15) 1241 0 R (Item.16) 1242 0 R (Item.17) 1244 0 R (Item.18) 1245 0 R (Item.19) 1256 0 R (Item.2) 205 0 R] /Limits [(Item.15) (Item.2)] >> endobj 1927 0 obj << /Names [(Item.20) 1257 0 R (Item.21) 1258 0 R (Item.22) 1259 0 R (Item.23) 1262 0 R (Item.24) 1263 0 R (Item.25) 1264 0 R] /Limits [(Item.20) (Item.25)] >> endobj 1928 0 obj << /Names [(Item.26) 1380 0 R (Item.27) 1381 0 R (Item.28) 1382 0 R (Item.29) 1384 0 R (Item.3) 206 0 R (Item.30) 1385 0 R] /Limits [(Item.26) (Item.30)] >> endobj 1929 0 obj << /Names [(Item.31) 1393 0 R (Item.32) 1394 0 R (Item.33) 1395 0 R (Item.34) 1506 0 R (Item.35) 1507 0 R (Item.36) 1508 0 R] /Limits [(Item.31) (Item.36)] >> endobj 1930 0 obj << /Names [(Item.37) 1509 0 R (Item.38) 1510 0 R (Item.39) 1511 0 R (Item.4) 508 0 R (Item.40) 1512 0 R (Item.41) 1513 0 R] /Limits [(Item.37) (Item.41)] >> endobj 1931 0 obj << /Names [(Item.42) 1514 0 R (Item.43) 1692 0 R (Item.44) 1693 0 R (Item.45) 1694 0 R (Item.46) 1695 0 R (Item.47) 1696 0 R] /Limits [(Item.42) (Item.47)] >> endobj 1932 0 obj << /Names [(Item.48) 1697 0 R (Item.49) 1698 0 R (Item.5) 509 0 R (Item.50) 1699 0 R (Item.51) 1765 0 R (Item.52) 1766 0 R] /Limits [(Item.48) (Item.52)] >> endobj 1933 0 obj << /Names [(Item.6) 884 0 R (Item.7) 885 0 R (Item.8) 886 0 R (Item.9) 1211 0 R (ModelView) 1197 0 R (PrototypedFrom) 385 0 R] /Limits [(Item.6) (PrototypedFrom)] >> endobj 1934 0 obj << /Names [(_anytrait_changed) 364 0 R (_name_changed) 352 0 R (_name_default) 489 0 R (a-node-type-with-children) 1734 0 R (a-node-type-without-children) 1732 0 R (accessing-metadata-attributes) 275 0 R] /Limits [(_anytrait_changed) (accessing-metadata-attributes)] >> endobj 1935 0 obj << /Names [(actions) 1049 0 R (adaptation) 549 0 R (add-class-trait) 624 0 R (add-trait) 614 0 R (add_trait) 524 0 R (adding-items) 1663 0 R] /Limits [(actions) (adding-items)] >> endobj 1936 0 obj << /Names [(advanced-topics) 479 0 R (advanced-trait-editors) 1332 0 R (advanced-view-concepts) 893 0 R (allowing-the-hierarchy-to-be-modified) 1749 0 R (arrayeditor) 1406 0 R (assigning-handlers-to-views) 1180 0 R] /Limits [(advanced-topics) (assigning-handlers-to-views)] >> endobj 1937 0 obj << /Names [(attribute-specific-handler-signatures) 350 0 R (attributes-of-group-by-category-table) 972 0 R (attributes-of-item-by-category-table) 941 0 R (attributes-of-view-by-category-table) 1070 0 R (backstage-introducing-the-uiinfo-object) 1163 0 R (basic-trait-editor-factories) 1331 0 R] /Limits [(attribute-specific-handler-signatures) (basic-trait-editor-factories)] >> endobj 1938 0 obj << /Names [(behavior-on-nodes) 1755 0 R (binding-a-singleton-handler-to-a-view) 1182 0 R (caching-a-property-value) 586 0 R (chapter*.1) 162 0 R (chapter.1) 5 0 R (chapter.2) 37 0 R] /Limits [(behavior-on-nodes) (chapter.2)] >> endobj 1939 0 obj << /Names [(chapter.3) 41 0 R (chapter.4) 49 0 R (chapter.5) 53 0 R (chapter.6) 113 0 R (clone-traits) 616 0 R (coloreditor) 1439 0 R] /Limits [(chapter.3) (coloreditor)] >> endobj 1940 0 obj << /Names [(command-button-aliases-table) 1047 0 R (command-buttons-the-buttons-attribute) 1029 0 R (configure-traits) 1121 0 R (constant-value) 447 0 R (content-of-a-group) 962 0 R (contents-of-a-view) 924 0 R] /Limits [(command-button-aliases-table) (contents-of-a-view)] >> endobj 1941 0 obj << /Names [(controller-class) 1199 0 R (controlling-adaptation) 575 0 R (controlling-the-interface-the-handler) 859 0 R (creating-a-default-view-within-a-handler) 1186 0 R (creating-an-adapter-from-scratch) 560 0 R (custom-command-buttons) 1064 0 R] /Limits [(controller-class) (custom-command-buttons)] >> endobj 1942 0 obj << /Names [(custom-trait-handlers) 470 0 R (custom-traits) 409 0 R (customizing-a-view) 892 0 R (declaring-a-class-as-an-adapter-externally) 567 0 R (decorator-semantics) 340 0 R (decorator-syntax) 330 0 R] /Limits [(custom-trait-handlers) (decorator-syntax)] >> endobj 1943 0 obj << /Names [(deferring-traits) 268 0 R (defining-a-default-view) 1082 0 R (defining-a-trait-property) 420 0 R (defining-a-trait-type) 412 0 R (defining-adapters) 551 0 R (defining-an-interface) 537 0 R] /Limits [(deferring-traits) (defining-an-interface)] >> endobj 1944 0 obj << /Names [(defining-multiple-views-within-the-model) 1091 0 R (defining-nodes) 1730 0 R (defining-operations-on-nodes) 1745 0 R (defining-the-layout) 1636 0 R (defining-traits-initialization-and-validation) 203 0 R (delegatesto) 374 0 R] /Limits [(defining-multiple-views-within-the-model) (delegatesto)] >> endobj 1945 0 obj << /Names [(disallow-object) 510 0 R (displaying-a-view) 927 0 R (drag-and-drop-editor-style-variations-table) 1602 0 R (dynamic-handler-special-cases) 319 0 R (dynamic-initialization) 482 0 R (dynamic-notification) 283 0 R] /Limits [(disallow-object) (dynamic-notification)] >> endobj 1946 0 obj << /Names [(edit-traits) 1123 0 R (editing-objects) 1713 0 R (editing-the-table) 1635 0 R (editor-factories-for-predefined-traits) 1870 0 R (enthought.traits.adapter.adapts) 562 0 R (enthought.traits.has_traits.implements) 541 0 R] /Limits [(edit-traits) (enthought.traits.has_traits.implements)] >> endobj 1947 0 obj << /Names [(enthought.traits.traits.Property) 585 0 R (enthought.traits.traits.Trait) 434 0 R (enumeditor) 1462 0 R (example-1-using-configure-traits) 905 0 R (example-10-traits-ui-without-themes) 1286 0 R (example-11-traits-ui-with-themese) 1294 0 R] /Limits [(enthought.traits.traits.Property) (example-11-traits-ui-with-themese)] >> endobj 1948 0 obj << /Names [(example-12-using-default-trait-editors) 1309 0 R (example-13-using-editor-styles-at-various-levels) 1396 0 R (example-14-demonstration-of-array-editors) 1409 0 R (example-15-enumeration-editor-with-mapped-values) 1470 0 R (example-16-instance-editor-with-instance-selection) 1523 0 R (example-17-code-editor-with-key-binding-editor) 1613 0 R] /Limits [(example-12-using-default-trait-editors) (example-17-code-editor-with-key-binding-editor)] >> endobj 1949 0 obj << /Names [(example-18-code-for-example-tree-editor) 1710 0 R (example-2-using-configure-traits-with-a-view-object) 910 0 R (example-3-using-configure-traits-with-a-view-and-a-group-object) 960 0 R (example-4-using-a-view-object-with-buttons) 1044 0 R (example-5-using-configure-traits-with-a-default-view-object) 1084 0 R (example-6-defining-multiple-view-objects-in-a-hastraits-class) 1093 0 R] /Limits [(example-18-code-for-example-tree-editor) (example-6-defining-multiple-view-objects-in-a-hastraits-class)] >> endobj 1950 0 obj << /Names [(example-7-using-a-multi-object-view-with-a-context) 1138 0 R (example-8-using-an-include-object) 1160 0 R (example-9-using-a-handler-that-reacts-to-trait-changes) 1190 0 R (example-custom-trait-handler) 472 0 R (example-of-a-dynamic-notification-handler) 292 0 R (examples-of-extended-name-notation-table) 310 0 R] /Limits [(example-7-using-a-multi-object-view-with-a-context) (examples-of-extended-name-notation-table)] >> endobj 1951 0 obj << /Names [(expanding-and-collapsing-nodes) 1757 0 R (extended_traitname_changed) 1227 0 R (extra-trait-editor-factories) 1312 0 R (figure.5.1) 907 0 R (figure.5.10) 1272 0 R (figure.5.11) 1283 0 R] /Limits [(expanding-and-collapsing-nodes) (figure.5.11)] >> endobj 1952 0 obj << /Names [(figure.5.12) 1327 0 R (figure.5.13) 1344 0 R (figure.5.14) 1345 0 R (figure.5.15) 1363 0 R (figure.5.16) 1364 0 R (figure.5.17) 1377 0 R] /Limits [(figure.5.12) (figure.5.17)] >> endobj 1953 0 obj << /Names [(figure.5.18) 1379 0 R (figure.5.19) 1391 0 R (figure.5.2) 923 0 R (figure.5.20) 1403 0 R (figure.5.21) 1408 0 R (figure.5.22) 1425 0 R] /Limits [(figure.5.18) (figure.5.22)] >> endobj 1954 0 obj << /Names [(figure.5.23) 1427 0 R (figure.5.24) 1437 0 R (figure.5.25) 1445 0 R (figure.5.26) 1446 0 R (figure.5.27) 1452 0 R (figure.5.28) 1458 0 R] /Limits [(figure.5.23) (figure.5.28)] >> endobj 1955 0 obj << /Names [(figure.5.29) 1461 0 R (figure.5.3) 970 0 R (figure.5.30) 1469 0 R (figure.5.31) 1479 0 R (figure.5.32) 1481 0 R (figure.5.33) 1487 0 R] /Limits [(figure.5.29) (figure.5.33)] >> endobj 1956 0 obj << /Names [(figure.5.34) 1489 0 R (figure.5.35) 1497 0 R (figure.5.36) 1521 0 R (figure.5.37) 1532 0 R (figure.5.38) 1542 0 R (figure.5.39) 1543 0 R] /Limits [(figure.5.34) (figure.5.39)] >> endobj 1957 0 obj << /Names [(figure.5.4) 1046 0 R (figure.5.40) 1544 0 R (figure.5.41) 1552 0 R (figure.5.42) 1562 0 R (figure.5.43) 1572 0 R (figure.5.44) 1578 0 R] /Limits [(figure.5.4) (figure.5.44)] >> endobj 1958 0 obj << /Names [(figure.5.45) 1580 0 R (figure.5.46) 1581 0 R (figure.5.47) 1589 0 R (figure.5.48) 1590 0 R (figure.5.49) 1592 0 R (figure.5.5) 1090 0 R] /Limits [(figure.5.45) (figure.5.5)] >> endobj 1959 0 obj << /Names [(figure.5.50) 1612 0 R (figure.5.51) 1631 0 R (figure.5.52) 1645 0 R (figure.5.53) 1702 0 R (figure.5.54) 1709 0 R (figure.5.55) 1776 0 R] /Limits [(figure.5.50) (figure.5.55)] >> endobj 1960 0 obj << /Names [(figure.5.56) 1791 0 R (figure.5.57) 1793 0 R (figure.5.58) 1795 0 R (figure.5.59) 1801 0 R (figure.5.6) 1147 0 R (figure.5.60) 1803 0 R] /Limits [(figure.5.56) (figure.5.60)] >> endobj 1961 0 obj << /Names [(figure.5.61) 1805 0 R (figure.5.62) 1816 0 R (figure.5.7) 1236 0 R (figure.5.8) 1270 0 R (figure.5.9) 1271 0 R (fileeditor) 1472 0 R] /Limits [(figure.5.61) (fileeditor)] >> endobj 1962 0 obj << /Names [(filtering-and-searching) 1654 0 R (general-static-handler-signatures) 362 0 R (get) 422 0 R (glossary-of-terms) 899 0 R (group-attributes) 964 0 R (handler-argument-interpretation-table) 353 0 R] /Limits [(filtering-and-searching) (handler-argument-interpretation-table)] >> endobj 1963 0 obj << /Names [(handler-decorator) 328 0 R (handler-subclasses) 1195 0 R (hasprivatetraits) 520 0 R (hasstricttraits) 518 0 R (hastraits-subclasses) 512 0 R (implementing-an-interface) 539 0 R] /Limits [(handler-decorator) (implementing-an-interface)] >> endobj 1964 0 obj << /Names [(implementing-custom-window-commands) 1237 0 R (include-objects) 860 0 R (initialization-and-validation-revisited) 480 0 R (initializing-editors) 1346 0 R (interacting-with-items) 1656 0 R (interfaces) 535 0 R] /Limits [(implementing-custom-window-commands) (interfaces)] >> endobj 1965 0 obj << /Names [(internal-metadata-attributes) 265 0 R (internal-views) 1080 0 R (introduction-to-trait-editor-factories) 895 0 R (keyword-parameters) 386 0 R (linking-handler-and-view-at-edit-time) 1184 0 R (list-of-possibl-values) 256 0 R] /Limits [(internal-metadata-attributes) (list-of-possibl-values)] >> endobj 1966 0 obj << /Names [(listenable-keyword) 394 0 R (managing-items) 1634 0 R (mapped-traits) 449 0 R (matrix-of-traits-ui-windows-table) 1023 0 R (menus-and-menu-bars) 1037 0 R (modelview-class) 1201 0 R] /Limits [(listenable-keyword) (modelview-class)] >> endobj 1967 0 obj << /Names [(modifying-items) 1666 0 R (multi-object-views) 1131 0 R (notification-handler-signatures) 317 0 R (notification-with-deferring) 400 0 R (on_trait_change) 290 0 R (on_trait_event) 291 0 R] /Limits [(modifying-items) (on_trait_event)] >> endobj 1968 0 obj << /Names [(organizing-items) 1647 0 R (other-predefined-traits) 220 0 R (other-traittype-members) 424 0 R (other-user-interactions) 1638 0 R (other-view-attributes) 1062 0 R (overriding-default-values-in-a-subclass) 490 0 R] /Limits [(organizing-items) (overriding-default-values-in-a-subclass)] >> endobj 1969 0 obj << /Names [(overriding-getstate) 601 0 R (overriding-setstate) 610 0 R (overriding-standard-methods) 1209 0 R (page.1) 173 0 R (page.10) 263 0 R (page.100) 1235 0 R] /Limits [(overriding-getstate) (page.100)] >> endobj 1970 0 obj << /Names [(page.101) 1254 0 R (page.102) 1269 0 R (page.103) 1281 0 R (page.104) 1293 0 R (page.105) 1306 0 R (page.106) 1326 0 R] /Limits [(page.101) (page.106)] >> endobj 1971 0 obj << /Names [(page.107) 1343 0 R (page.108) 1358 0 R (page.109) 1376 0 R (page.11) 273 0 R (page.110) 1390 0 R (page.111) 1402 0 R] /Limits [(page.107) (page.111)] >> endobj 1972 0 obj << /Names [(page.112) 1414 0 R (page.113) 1424 0 R (page.114) 1436 0 R (page.115) 1444 0 R (page.116) 1451 0 R (page.117) 1457 0 R] /Limits [(page.112) (page.117)] >> endobj 1973 0 obj << /Names [(page.118) 1467 0 R (page.119) 1477 0 R (page.12) 281 0 R (page.120) 1486 0 R (page.121) 1495 0 R (page.122) 1505 0 R] /Limits [(page.118) (page.122)] >> endobj 1974 0 obj << /Names [(page.123) 1520 0 R (page.124) 1531 0 R (page.125) 1541 0 R (page.126) 1551 0 R (page.127) 1560 0 R (page.128) 1569 0 R] /Limits [(page.123) (page.128)] >> endobj 1975 0 obj << /Names [(page.129) 1577 0 R (page.13) 288 0 R (page.130) 1588 0 R (page.131) 1599 0 R (page.132) 1611 0 R (page.133) 1618 0 R] /Limits [(page.129) (page.133)] >> endobj 1976 0 obj << /Names [(page.134) 1630 0 R (page.135) 1644 0 R (page.136) 1653 0 R (page.137) 1661 0 R (page.138) 1671 0 R (page.139) 1680 0 R] /Limits [(page.134) (page.139)] >> endobj 1977 0 obj << /Names [(page.14) 298 0 R (page.140) 1691 0 R (page.141) 1707 0 R (page.142) 1717 0 R (page.143) 1721 0 R (page.144) 1725 0 R] /Limits [(page.14) (page.144)] >> endobj 1978 0 obj << /Names [(page.145) 1729 0 R (page.146) 1743 0 R (page.147) 1754 0 R (page.148) 1763 0 R (page.149) 1773 0 R (page.15) 306 0 R] /Limits [(page.145) (page.15)] >> endobj 1979 0 obj << /Names [(page.150) 1782 0 R (page.151) 1789 0 R (page.152) 1799 0 R (page.153) 1815 0 R (page.154) 1840 0 R (page.155) 1865 0 R] /Limits [(page.150) (page.155)] >> endobj 1980 0 obj << /Names [(page.156) 1875 0 R (page.157) 1879 0 R (page.16) 316 0 R (page.17) 325 0 R (page.18) 337 0 R (page.19) 349 0 R] /Limits [(page.156) (page.19)] >> endobj 1981 0 obj << /Names [(page.2) 182 0 R (page.20) 359 0 R (page.21) 371 0 R (page.22) 382 0 R (page.23) 390 0 R (page.24) 398 0 R] /Limits [(page.2) (page.24)] >> endobj 1982 0 obj << /Names [(page.25) 407 0 R (page.26) 417 0 R (page.27) 430 0 R (page.28) 443 0 R (page.29) 454 0 R (page.3) 193 0 R] /Limits [(page.25) (page.3)] >> endobj 1983 0 obj << /Names [(page.30) 459 0 R (page.31) 467 0 R (page.32) 477 0 R (page.33) 487 0 R (page.34) 498 0 R (page.35) 505 0 R] /Limits [(page.30) (page.35)] >> endobj 1984 0 obj << /Names [(page.36) 516 0 R (page.37) 529 0 R (page.38) 534 0 R (page.39) 546 0 R (page.4) 201 0 R (page.40) 556 0 R] /Limits [(page.36) (page.40)] >> endobj 1985 0 obj << /Names [(page.41) 566 0 R (page.42) 572 0 R (page.43) 583 0 R (page.44) 595 0 R (page.45) 607 0 R (page.46) 622 0 R] /Limits [(page.41) (page.46)] >> endobj 1986 0 obj << /Names [(page.47) 629 0 R (page.48) 635 0 R (page.49) 639 0 R (page.5) 214 0 R (page.50) 644 0 R (page.51) 656 0 R] /Limits [(page.47) (page.51)] >> endobj 1987 0 obj << /Names [(page.52) 668 0 R (page.53) 675 0 R (page.54) 685 0 R (page.55) 693 0 R (page.56) 698 0 R (page.57) 706 0 R] /Limits [(page.52) (page.57)] >> endobj 1988 0 obj << /Names [(page.58) 714 0 R (page.59) 723 0 R (page.6) 225 0 R (page.60) 729 0 R (page.61) 736 0 R (page.62) 743 0 R] /Limits [(page.58) (page.62)] >> endobj 1989 0 obj << /Names [(page.63) 749 0 R (page.64) 756 0 R (page.65) 762 0 R (page.66) 767 0 R (page.67) 772 0 R (page.68) 779 0 R] /Limits [(page.63) (page.68)] >> endobj 1990 0 obj << /Names [(page.69) 786 0 R (page.7) 239 0 R (page.70) 791 0 R (page.71) 795 0 R (page.72) 800 0 R (page.73) 808 0 R] /Limits [(page.69) (page.73)] >> endobj 1991 0 obj << /Names [(page.74) 835 0 R (page.75) 882 0 R (page.76) 904 0 R (page.77) 921 0 R (page.78) 939 0 R (page.79) 946 0 R] /Limits [(page.74) (page.79)] >> endobj 1992 0 obj << /Names [(page.8) 247 0 R (page.80) 957 0 R (page.81) 969 0 R (page.82) 977 0 R (page.83) 982 0 R (page.84) 988 0 R] /Limits [(page.8) (page.84)] >> endobj 1993 0 obj << /Names [(page.85) 1019 0 R (page.86) 1043 0 R (page.87) 1060 0 R (page.88) 1068 0 R (page.89) 1079 0 R (page.9) 255 0 R] /Limits [(page.85) (page.9)] >> endobj 1994 0 obj << /Names [(page.90) 1089 0 R (page.91) 1107 0 R (page.92) 1119 0 R (page.93) 1135 0 R (page.94) 1146 0 R (page.95) 1158 0 R] /Limits [(page.90) (page.95)] >> endobj 1995 0 obj << /Names [(page.96) 1177 0 R (page.97) 1194 0 R (page.98) 1206 0 R (page.99) 1225 0 R (page.i) 121 0 R (page.ii) 130 0 R] /Limits [(page.96) (page.ii)] >> endobj 1996 0 obj << /Names [(panels-and-subpanels) 1027 0 R (paragraph*.10) 257 0 R (paragraph*.100) 963 0 R (paragraph*.101) 971 0 R (paragraph*.102) 978 0 R (paragraph*.104) 991 0 R] /Limits [(panels-and-subpanels) (paragraph*.104)] >> endobj 1997 0 obj << /Names [(paragraph*.106) 1024 0 R (paragraph*.109) 1045 0 R (paragraph*.110) 1061 0 R (paragraph*.111) 1071 0 R (paragraph*.113) 1085 0 R (paragraph*.115) 1094 0 R] /Limits [(paragraph*.106) (paragraph*.115)] >> endobj 1998 0 obj << /Names [(paragraph*.120) 1139 0 R (paragraph*.121) 1161 0 R (paragraph*.128) 1218 0 R (paragraph*.130) 1228 0 R (paragraph*.132) 1239 0 R (paragraph*.133) 1243 0 R] /Limits [(paragraph*.120) (paragraph*.133)] >> endobj 1999 0 obj << /Names [(paragraph*.134) 1255 0 R (paragraph*.135) 1261 0 R (paragraph*.136) 1287 0 R (paragraph*.137) 1295 0 R (paragraph*.138) 1310 0 R (paragraph*.145) 1397 0 R] /Limits [(paragraph*.134) (paragraph*.145)] >> endobj 2000 0 obj << /Names [(paragraph*.147) 1415 0 R (paragraph*.157) 1471 0 R (paragraph*.16) 301 0 R (paragraph*.163) 1516 0 R (paragraph*.164) 1522 0 R (paragraph*.165) 1533 0 R] /Limits [(paragraph*.147) (paragraph*.165)] >> endobj 2001 0 obj << /Names [(paragraph*.17) 307 0 R (paragraph*.170) 1561 0 R (paragraph*.178) 1603 0 R (paragraph*.179) 1614 0 R (paragraph*.18) 309 0 R (paragraph*.182) 1648 0 R] /Limits [(paragraph*.17) (paragraph*.182)] >> endobj 2002 0 obj << /Names [(paragraph*.183) 1655 0 R (paragraph*.184) 1657 0 R (paragraph*.186) 1664 0 R (paragraph*.187) 1665 0 R (paragraph*.188) 1672 0 R (paragraph*.19) 311 0 R] /Limits [(paragraph*.183) (paragraph*.19)] >> endobj 2003 0 obj << /Names [(paragraph*.196) 1711 0 R (paragraph*.198) 1733 0 R (paragraph*.199) 1735 0 R (paragraph*.200) 1744 0 R (paragraph*.202) 1748 0 R (paragraph*.203) 1750 0 R] /Limits [(paragraph*.196) (paragraph*.203)] >> endobj 2004 0 obj << /Names [(paragraph*.204) 1756 0 R (paragraph*.205) 1758 0 R (paragraph*.206) 1764 0 R (paragraph*.23) 338 0 R (paragraph*.24) 341 0 R (paragraph*.27) 360 0 R] /Limits [(paragraph*.204) (paragraph*.27)] >> endobj 2005 0 obj << /Names [(paragraph*.3) 227 0 R (paragraph*.36) 446 0 R (paragraph*.37) 448 0 R (paragraph*.4) 229 0 R (paragraph*.46) 501 0 R (paragraph*.5) 231 0 R] /Limits [(paragraph*.3) (paragraph*.5)] >> endobj 2006 0 obj << /Names [(paragraph*.58) 559 0 R (paragraph*.59) 561 0 R (paragraph*.6) 233 0 R (paragraph*.60) 568 0 R (paragraph*.75) 671 0 R (paragraph*.76) 676 0 R] /Limits [(paragraph*.58) (paragraph*.76)] >> endobj 2007 0 obj << /Names [(paragraph*.8) 242 0 R (paragraph*.9) 249 0 R (paragraph*.93) 906 0 R (paragraph*.94) 922 0 R (paragraph*.96) 947 0 R (paragraph*.99) 961 0 R] /Limits [(paragraph*.8) (paragraph*.99)] >> endobj 2008 0 obj << /Names [(per-object-trait-attributes) 522 0 R (performance-considerations-of-traits) 630 0 R (persistence) 277 0 R (pickling-hastraits-objects) 597 0 R (predefined-defaults-for-simple-types-table) 226 0 R (predefined-traits) 215 0 R] /Limits [(per-object-trait-attributes) (predefined-traits)] >> endobj 2009 0 obj << /Names [(predefined-traits-beyond-simple-types-table) 241 0 R (predefined-traits-for-simple-types) 217 0 R (predefined-transient-traits) 599 0 R (prefix-keyword) 392 0 R (property-factory-function) 578 0 R (property-traits) 251 0 R] /Limits [(predefined-traits-beyond-simple-types-table) (property-traits)] >> endobj 2010 0 obj << /Names [(prototypedfrom) 383 0 R (range-editor-widgets-table) 1555 0 R (reacting-to-trait-changes) 1219 0 R (recognized-metadata-attributes) 267 0 R (reusing-trait-definitions) 207 0 R (section.1.1) 9 0 R] /Limits [(prototypedfrom) (section.1.1)] >> endobj 2011 0 obj << /Names [(section.1.2) 13 0 R (section.1.3) 17 0 R (section.1.4) 21 0 R (section.1.5) 25 0 R (section.1.6) 29 0 R (section.1.7) 33 0 R] /Limits [(section.1.2) (section.1.7)] >> endobj 2012 0 obj << /Names [(section.3.1) 45 0 R (section.5.1) 57 0 R (section.5.10) 93 0 R (section.5.11) 97 0 R (section.5.12) 101 0 R (section.5.13) 105 0 R] /Limits [(section.3.1) (section.5.13)] >> endobj 2013 0 obj << /Names [(section.5.14) 109 0 R (section.5.2) 61 0 R (section.5.3) 65 0 R (section.5.4) 69 0 R (section.5.5) 73 0 R (section.5.6) 77 0 R] /Limits [(section.5.14) (section.5.6)] >> endobj 2014 0 obj << /Names [(section.5.7) 81 0 R (section.5.8) 85 0 R (section.5.9) 89 0 R (semantics) 302 0 R (semantics-of-extended-name-notation-table) 308 0 R (separating-model-and-view-external-views) 1108 0 R] /Limits [(section.5.7) (separating-model-and-view-external-views)] >> endobj 2015 0 obj << /Names [(set) 423 0 R (seteditor) 1570 0 R (setting-the-label-of-a-tree-node) 1736 0 R (shortcut-menus-on-nodes) 1747 0 R (specially-named-notification-handlers) 342 0 R (specifying-an-alternate-trait-editor-factory) 1329 0 R] /Limits [(set) (specifying-an-alternate-trait-editor-factory)] >> endobj 2016 0 obj << /Names [(specifying-an-editor-style) 1359 0 R (specifying-columns) 1632 0 R (specifying-window-type-the-kind-attribute) 993 0 R (stand-alone-windows) 1020 0 R (static-notification) 326 0 R (structure-of-this-guide) 887 0 R] /Limits [(specifying-an-editor-style) (structure-of-this-guide)] >> endobj 2017 0 obj << /Names [(subclasses-of-group) 983 0 R (subclasses-of-group-table) 990 0 R (subclasses-of-item) 949 0 R (subclassing-adapter) 558 0 R (subparagraph*.47) 507 0 R (subparagraph*.48) 511 0 R] /Limits [(subclasses-of-group) (subparagraph*.48)] >> endobj 2018 0 obj << /Names [(subparagraph*.49) 517 0 R (subparagraph*.50) 519 0 R (subparagraph*.51) 521 0 R (subparagraph*.52) 523 0 R (subsection.1.2.1) 184 0 R (subsection.1.2.2) 194 0 R] /Limits [(subparagraph*.49) (subsection.1.2.2)] >> endobj 2019 0 obj << /Names [(subsection.1.3.1) 216 0 R (subsection.1.3.2) 264 0 R (subsection.1.4.1) 289 0 R (subsection.1.4.2) 327 0 R (subsection.1.4.3) 365 0 R (subsection.1.5.1) 375 0 R] /Limits [(subsection.1.3.1) (subsection.1.5.1)] >> endobj 2020 0 obj << /Names [(subsection.1.5.2) 384 0 R (subsection.1.5.3) 391 0 R (subsection.1.5.4) 401 0 R (subsection.1.6.1) 411 0 R (subsection.1.6.2) 433 0 R (subsection.1.6.3) 460 0 R] /Limits [(subsection.1.5.2) (subsection.1.6.3)] >> endobj 2021 0 obj << /Names [(subsection.1.6.4) 471 0 R (subsection.1.7.1) 481 0 R (subsection.1.7.2) 536 0 R (subsection.1.7.3) 550 0 R (subsection.1.7.4) 577 0 R (subsection.1.7.5) 596 0 R] /Limits [(subsection.1.6.4) (subsection.1.7.5)] >> endobj 2022 0 obj << /Names [(subsection.1.7.6) 613 0 R (subsection.1.7.7) 631 0 R (subsection.3.1.1) 669 0 R (subsection.3.1.2) 700 0 R (subsection.3.1.3) 715 0 R (subsection.3.1.4) 737 0 R] /Limits [(subsection.1.7.6) (subsection.3.1.4)] >> endobj 2023 0 obj << /Names [(subsection.3.1.5) 750 0 R (subsection.5.10.1) 1594 0 R (subsection.5.10.2) 1600 0 R (subsection.5.10.3) 1601 0 R (subsection.5.10.4) 1604 0 R (subsection.5.10.5) 1619 0 R] /Limits [(subsection.3.1.5) (subsection.5.10.5)] >> endobj 2024 0 obj << /Names [(subsection.5.10.6) 1676 0 R (subsection.5.10.7) 1708 0 R (subsection.5.11.1) 1774 0 R (subsection.5.11.10) 1800 0 R (subsection.5.11.11) 1802 0 R (subsection.5.11.12) 1804 0 R] /Limits [(subsection.5.10.6) (subsection.5.11.12)] >> endobj 2025 0 obj << /Names [(subsection.5.11.2) 1775 0 R (subsection.5.11.3) 1777 0 R (subsection.5.11.4) 1783 0 R (subsection.5.11.5) 1784 0 R (subsection.5.11.6) 1785 0 R (subsection.5.11.7) 1790 0 R] /Limits [(subsection.5.11.2) (subsection.5.11.7)] >> endobj 2026 0 obj << /Names [(subsection.5.11.8) 1792 0 R (subsection.5.11.9) 1794 0 R (subsection.5.12.1) 1817 0 R (subsection.5.2.1) 837 0 R (subsection.5.2.2) 883 0 R (subsection.5.2.3) 888 0 R] /Limits [(subsection.5.11.8) (subsection.5.2.3)] >> endobj 2027 0 obj << /Names [(subsection.5.3.1) 909 0 R (subsection.5.3.2) 925 0 R (subsection.5.4.1) 994 0 R (subsection.5.4.2) 1030 0 R (subsection.5.4.3) 1069 0 R (subsection.5.5.1) 1081 0 R] /Limits [(subsection.5.3.1) (subsection.5.5.1)] >> endobj 2028 0 obj << /Names [(subsection.5.5.2) 1109 0 R (subsection.5.5.3) 1120 0 R (subsection.5.5.4) 1136 0 R (subsection.5.5.5) 1159 0 R (subsection.5.6.1) 1178 0 R (subsection.5.6.2) 1181 0 R] /Limits [(subsection.5.5.2) (subsection.5.6.2)] >> endobj 2029 0 obj << /Names [(subsection.5.6.3) 1196 0 R (subsection.5.6.4) 1208 0 R (subsection.5.7.1) 1282 0 R (subsection.5.7.2) 1284 0 R (subsection.5.7.3) 1285 0 R (subsection.5.8.1) 1330 0 R] /Limits [(subsection.5.6.3) (subsection.5.8.1)] >> endobj 2030 0 obj << /Names [(subsection.5.8.2) 1360 0 R (subsection.5.9.1) 1405 0 R (subsubsection*.103) 989 0 R (subsubsection*.105) 1021 0 R (subsubsection*.107) 1026 0 R (subsubsection*.108) 1028 0 R] /Limits [(subsection.5.8.2) (subsubsection*.108)] >> endobj 2031 0 obj << /Names [(subsubsection*.11) 266 0 R (subsubsection*.112) 1083 0 R (subsubsection*.114) 1092 0 R (subsubsection*.116) 1122 0 R (subsubsection*.117) 1124 0 R (subsubsection*.118) 1126 0 R] /Limits [(subsubsection*.11) (subsubsection*.118)] >> endobj 2032 0 obj << /Names [(subsubsection*.119) 1137 0 R (subsubsection*.12) 274 0 R (subsubsection*.122) 1183 0 R (subsubsection*.123) 1185 0 R (subsubsection*.124) 1187 0 R (subsubsection*.125) 1200 0 R] /Limits [(subsubsection*.119) (subsubsection*.125)] >> endobj 2033 0 obj << /Names [(subsubsection*.126) 1202 0 R (subsubsection*.127) 1210 0 R (subsubsection*.129) 1226 0 R (subsubsection*.13) 276 0 R (subsubsection*.131) 1238 0 R (subsubsection*.139) 1347 0 R] /Limits [(subsubsection*.126) (subsubsection*.139)] >> endobj 2034 0 obj << /Names [(subsubsection*.14) 293 0 R (subsubsection*.140) 1362 0 R (subsubsection*.141) 1365 0 R (subsubsection*.142) 1378 0 R (subsubsection*.143) 1386 0 R (subsubsection*.144) 1392 0 R] /Limits [(subsubsection*.14) (subsubsection*.144)] >> endobj 2035 0 obj << /Names [(subsubsection*.146) 1407 0 R (subsubsection*.148) 1416 0 R (subsubsection*.149) 1426 0 R (subsubsection*.15) 299 0 R (subsubsection*.150) 1428 0 R (subsubsection*.151) 1438 0 R] /Limits [(subsubsection*.146) (subsubsection*.151)] >> endobj 2036 0 obj << /Names [(subsubsection*.152) 1440 0 R (subsubsection*.153) 1453 0 R (subsubsection*.154) 1459 0 R (subsubsection*.155) 1460 0 R (subsubsection*.156) 1468 0 R (subsubsection*.158) 1478 0 R] /Limits [(subsubsection*.152) (subsubsection*.158)] >> endobj 2037 0 obj << /Names [(subsubsection*.159) 1480 0 R (subsubsection*.160) 1488 0 R (subsubsection*.161) 1496 0 R (subsubsection*.162) 1515 0 R (subsubsection*.166) 1534 0 R (subsubsection*.167) 1545 0 R] /Limits [(subsubsection*.159) (subsubsection*.167)] >> endobj 2038 0 obj << /Names [(subsubsection*.168) 1553 0 R (subsubsection*.169) 1554 0 R (subsubsection*.171) 1563 0 R (subsubsection*.172) 1571 0 R (subsubsection*.173) 1573 0 R (subsubsection*.174) 1579 0 R] /Limits [(subsubsection*.168) (subsubsection*.174)] >> endobj 2039 0 obj << /Names [(subsubsection*.175) 1582 0 R (subsubsection*.176) 1583 0 R (subsubsection*.177) 1591 0 R (subsubsection*.180) 1633 0 R (subsubsection*.181) 1646 0 R (subsubsection*.185) 1662 0 R] /Limits [(subsubsection*.175) (subsubsection*.185)] >> endobj 2040 0 obj << /Names [(subsubsection*.189) 1673 0 R (subsubsection*.190) 1674 0 R (subsubsection*.191) 1675 0 R (subsubsection*.192) 1682 0 R (subsubsection*.193) 1684 0 R (subsubsection*.194) 1686 0 R] /Limits [(subsubsection*.189) (subsubsection*.194)] >> endobj 2041 0 obj << /Names [(subsubsection*.195) 1701 0 R (subsubsection*.197) 1731 0 R (subsubsection*.2) 218 0 R (subsubsection*.20) 318 0 R (subsubsection*.201) 1746 0 R (subsubsection*.207) 1768 0 R] /Limits [(subsubsection*.195) (subsubsection*.207)] >> endobj 2042 0 obj << /Names [(subsubsection*.208) 1819 0 R (subsubsection*.209) 1820 0 R (subsubsection*.21) 320 0 R (subsubsection*.22) 329 0 R (subsubsection*.25) 343 0 R (subsubsection*.26) 351 0 R] /Limits [(subsubsection*.208) (subsubsection*.26)] >> endobj 2043 0 obj << /Names [(subsubsection*.28) 363 0 R (subsubsection*.29) 372 0 R (subsubsection*.30) 393 0 R (subsubsection*.31) 399 0 R (subsubsection*.32) 418 0 R (subsubsection*.33) 421 0 R] /Limits [(subsubsection*.28) (subsubsection*.33)] >> endobj 2044 0 obj << /Names [(subsubsection*.34) 431 0 R (subsubsection*.35) 444 0 R (subsubsection*.38) 455 0 R (subsubsection*.39) 462 0 R (subsubsection*.40) 469 0 R (subsubsection*.41) 473 0 R] /Limits [(subsubsection*.34) (subsubsection*.41)] >> endobj 2045 0 obj << /Names [(subsubsection*.42) 488 0 R (subsubsection*.43) 491 0 R (subsubsection*.44) 492 0 R (subsubsection*.45) 499 0 R (subsubsection*.53) 530 0 R (subsubsection*.54) 538 0 R] /Limits [(subsubsection*.42) (subsubsection*.54)] >> endobj 2046 0 obj << /Names [(subsubsection*.55) 540 0 R (subsubsection*.56) 548 0 R (subsubsection*.57) 557 0 R (subsubsection*.61) 574 0 R (subsubsection*.62) 576 0 R (subsubsection*.63) 584 0 R] /Limits [(subsubsection*.55) (subsubsection*.63)] >> endobj 2047 0 obj << /Names [(subsubsection*.64) 587 0 R (subsubsection*.65) 598 0 R (subsubsection*.66) 600 0 R (subsubsection*.67) 602 0 R (subsubsection*.68) 609 0 R (subsubsection*.69) 611 0 R] /Limits [(subsubsection*.64) (subsubsection*.69)] >> endobj 2048 0 obj << /Names [(subsubsection*.7) 240 0 R (subsubsection*.70) 615 0 R (subsubsection*.71) 617 0 R (subsubsection*.72) 623 0 R (subsubsection*.73) 625 0 R (subsubsection*.74) 670 0 R] /Limits [(subsubsection*.7) (subsubsection*.74)] >> endobj 2049 0 obj << /Names [(subsubsection*.77) 677 0 R (subsubsection*.78) 686 0 R (subsubsection*.79) 699 0 R (subsubsection*.80) 701 0 R (subsubsection*.81) 707 0 R (subsubsection*.82) 716 0 R] /Limits [(subsubsection*.77) (subsubsection*.82)] >> endobj 2050 0 obj << /Names [(subsubsection*.83) 717 0 R (subsubsection*.84) 724 0 R (subsubsection*.85) 738 0 R (subsubsection*.86) 757 0 R (subsubsection*.87) 758 0 R (subsubsection*.88) 763 0 R] /Limits [(subsubsection*.83) (subsubsection*.88)] >> endobj 2051 0 obj << /Names [(subsubsection*.89) 768 0 R (subsubsection*.90) 839 0 R (subsubsection*.91) 841 0 R (subsubsection*.92) 843 0 R (subsubsection*.95) 940 0 R (subsubsection*.97) 950 0 R] /Limits [(subsubsection*.89) (subsubsection*.97)] >> endobj 2052 0 obj << /Names [(subsubsection*.98) 959 0 R (syntax) 300 0 R (table-defining-the-format) 1637 0 R (table.1.1) 243 0 R (table.5.1) 1871 0 R (tableeditor) 1536 0 R] /Limits [(subsubsection*.98) (tableeditor)] >> endobj 2053 0 obj << /Names [(tabular-advantages) 1681 0 R (tabular-disadvantages) 1683 0 R (tabularadapter) 1685 0 R (term-29) 849 0 R (term-attribute) 1842 0 R (term-class-attribute) 1844 0 R] /Limits [(tabular-advantages) (term-class-attribute)] >> endobj 2054 0 obj << /Names [(term-command-button) 995 0 R (term-controller) 850 0 R (term-dialog-box) 1035 0 R (term-editor) 897 0 R (term-editor-factory) 1313 0 R (term-factory) 1845 0 R] /Limits [(term-command-button) (term-factory)] >> endobj 2055 0 obj << /Names [(term-group) 857 0 R (term-handler) 852 0 R (term-hastraits) 851 0 R (term-instance) 853 0 R (term-item) 856 0 R (term-live) 1032 0 R] /Limits [(term-group) (term-live)] >> endobj 2056 0 obj << /Names [(term-livemodal) 1034 0 R (term-modal) 1031 0 R (term-model) 848 0 R (term-mvc) 847 0 R (term-nonmodal) 1033 0 R (term-object) 1847 0 R] /Limits [(term-livemodal) (term-object)] >> endobj 2057 0 obj << /Names [(term-panel) 855 0 R (term-predefined-trait-type) 1315 0 R (term-subpanel) 1038 0 R (term-trait) 1866 0 R (term-trait-attribute) 854 0 R (term-trait-type) 1314 0 R] /Limits [(term-panel) (term-trait-type)] >> endobj 2058 0 obj << /Names [(term-traits) 812 0 R (term-traits-ui) 811 0 R (term-view) 1867 0 R (term-viewelement) 1130 0 R (term-widget) 942 0 R (term-wizard) 1036 0 R] /Limits [(term-traits) (term-wizard)] >> endobj 2059 0 obj << /Names [(term-wx) 1868 0 R (the-controller-handler-subclasses-and-objects) 842 0 R (the-group-object) 958 0 R (the-item-object) 926 0 R (the-model-hastraits-subclasses-and-objects) 838 0 R (the-model-view-controller-mvc-design-pattern) 836 0 R] /Limits [(term-wx) (the-model-view-controller-mvc-design-pattern)] >> endobj 2060 0 obj << /Names [(the-name-parameter) 294 0 R (the-predefined-trait-editor-factories) 896 0 R (the-simple-style) 1361 0 R (the-tabular-editor-user-interface) 1700 0 R (the-trait-factory-function) 432 0 R (the-view-and-its-building-blocks) 858 0 R] /Limits [(the-name-parameter) (the-view-and-its-building-blocks)] >> endobj 2061 0 obj << /Names [(the-view-context) 1127 0 R (the-view-object) 908 0 R (the-view-view-objects) 840 0 R (this-and-self) 248 0 R (tips-tricks-and-gotchas) 898 0 R (toolbars) 1260 0 R] /Limits [(the-view-context) (toolbars)] >> endobj 2062 0 obj << /Names [(toolkit-selection) 844 0 R (trait-attribute-definition-strategies) 493 0 R (trait-attribute-name-wildcard) 500 0 R (trait-events) 344 0 R (trait-handlers) 450 0 R (trait-metadata) 221 0 R] /Limits [(toolkit-selection) (trait-metadata)] >> endobj 2063 0 obj << /Names [(trait-parameters) 435 0 R (trait-subclassing) 410 0 R (trait-type-casting) 232 0 R (trait-type-coercion) 228 0 R (trait-views) 1818 0 R (traitprefixlist) 461 0 R] /Limits [(trait-parameters) (traitprefixlist)] >> endobj 2064 0 obj << /Names [(traitprefixmap) 468 0 R (traits-ui-themes) 894 0 R (tree-defining-the-format) 1767 0 R (treeeditor) 1605 0 R (type) 445 0 R (type-checked-methods) 196 0 R] /Limits [(traitprefixmap) (type-checked-methods)] >> endobj 2065 0 obj << /Names [(type-coercions-permitted-for-coercing-traits-table) 230 0 R (ui) 1125 0 R (undefined-object) 366 0 R (unpicking-hastraits-objects) 608 0 R (useful-methods-on-hastraits) 612 0 R (using-adapters) 573 0 R] /Limits [(type-coercions-permitted-for-coercing-traits-table) (using-adapters)] >> endobj 2066 0 obj << /Names [(using-editor-styles) 1366 0 R (using-interfaces) 547 0 R (validate) 419 0 R (when-handler-methods-are-called-and-when-to-override-them-table) 1217 0 R (wildcard-rules) 506 0 R (wizards) 1025 0 R] /Limits [(using-editor-styles) (wizards)] >> endobj 2067 0 obj << /Names [(writing-a-graphical-application-for-scientific-programming-using-traitsui) 658 0 R (writing-handler-methods) 1207 0 R] /Limits [(writing-a-graphical-application-for-scientific-programming-using-traitsui) (writing-handler-methods)] >> endobj 2068 0 obj << /Kids [1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R] /Limits [(--doc-TUIUG/advanced_view) (Hfootnote.16)] >> endobj 2069 0 obj << /Kids [1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R] /Limits [(Hfootnote.17) (Item.2)] >> endobj 2070 0 obj << /Kids [1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R] /Limits [(Item.20) (Item.52)] >> endobj 2071 0 obj << /Kids [1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R] /Limits [(Item.6) (chapter.2)] >> endobj 2072 0 obj << /Kids [1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R] /Limits [(chapter.3) (delegatesto)] >> endobj 2073 0 obj << /Kids [1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R 1950 0 R] /Limits [(disallow-object) (examples-of-extended-name-notation-table)] >> endobj 2074 0 obj << /Kids [1951 0 R 1952 0 R 1953 0 R 1954 0 R 1955 0 R 1956 0 R] /Limits [(expanding-and-collapsing-nodes) (figure.5.39)] >> endobj 2075 0 obj << /Kids [1957 0 R 1958 0 R 1959 0 R 1960 0 R 1961 0 R 1962 0 R] /Limits [(figure.5.4) (handler-argument-interpretation-table)] >> endobj 2076 0 obj << /Kids [1963 0 R 1964 0 R 1965 0 R 1966 0 R 1967 0 R 1968 0 R] /Limits [(handler-decorator) (overriding-default-values-in-a-subclass)] >> endobj 2077 0 obj << /Kids [1969 0 R 1970 0 R 1971 0 R 1972 0 R 1973 0 R 1974 0 R] /Limits [(overriding-getstate) (page.128)] >> endobj 2078 0 obj << /Kids [1975 0 R 1976 0 R 1977 0 R 1978 0 R 1979 0 R 1980 0 R] /Limits [(page.129) (page.19)] >> endobj 2079 0 obj << /Kids [1981 0 R 1982 0 R 1983 0 R 1984 0 R 1985 0 R 1986 0 R] /Limits [(page.2) (page.51)] >> endobj 2080 0 obj << /Kids [1987 0 R 1988 0 R 1989 0 R 1990 0 R 1991 0 R 1992 0 R] /Limits [(page.52) (page.84)] >> endobj 2081 0 obj << /Kids [1993 0 R 1994 0 R 1995 0 R 1996 0 R 1997 0 R 1998 0 R] /Limits [(page.85) (paragraph*.133)] >> endobj 2082 0 obj << /Kids [1999 0 R 2000 0 R 2001 0 R 2002 0 R 2003 0 R 2004 0 R] /Limits [(paragraph*.134) (paragraph*.27)] >> endobj 2083 0 obj << /Kids [2005 0 R 2006 0 R 2007 0 R 2008 0 R 2009 0 R 2010 0 R] /Limits [(paragraph*.3) (section.1.1)] >> endobj 2084 0 obj << /Kids [2011 0 R 2012 0 R 2013 0 R 2014 0 R 2015 0 R 2016 0 R] /Limits [(section.1.2) (structure-of-this-guide)] >> endobj 2085 0 obj << /Kids [2017 0 R 2018 0 R 2019 0 R 2020 0 R 2021 0 R 2022 0 R] /Limits [(subclasses-of-group) (subsection.3.1.4)] >> endobj 2086 0 obj << /Kids [2023 0 R 2024 0 R 2025 0 R 2026 0 R 2027 0 R 2028 0 R] /Limits [(subsection.3.1.5) (subsection.5.6.2)] >> endobj 2087 0 obj << /Kids [2029 0 R 2030 0 R 2031 0 R 2032 0 R 2033 0 R 2034 0 R] /Limits [(subsection.5.6.3) (subsubsection*.144)] >> endobj 2088 0 obj << /Kids [2035 0 R 2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 0 R] /Limits [(subsubsection*.146) (subsubsection*.194)] >> endobj 2089 0 obj << /Kids [2041 0 R 2042 0 R 2043 0 R 2044 0 R 2045 0 R 2046 0 R] /Limits [(subsubsection*.195) (subsubsection*.63)] >> endobj 2090 0 obj << /Kids [2047 0 R 2048 0 R 2049 0 R 2050 0 R 2051 0 R 2052 0 R] /Limits [(subsubsection*.64) (tableeditor)] >> endobj 2091 0 obj << /Kids [2053 0 R 2054 0 R 2055 0 R 2056 0 R 2057 0 R 2058 0 R] /Limits [(tabular-advantages) (term-wizard)] >> endobj 2092 0 obj << /Kids [2059 0 R 2060 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R] /Limits [(term-wx) (type-checked-methods)] >> endobj 2093 0 obj << /Kids [2065 0 R 2066 0 R 2067 0 R] /Limits [(type-coercions-permitted-for-coercing-traits-table) (writing-handler-methods)] >> endobj 2094 0 obj << /Kids [2068 0 R 2069 0 R 2070 0 R 2071 0 R 2072 0 R 2073 0 R] /Limits [(--doc-TUIUG/advanced_view) (examples-of-extended-name-notation-table)] >> endobj 2095 0 obj << /Kids [2074 0 R 2075 0 R 2076 0 R 2077 0 R 2078 0 R 2079 0 R] /Limits [(expanding-and-collapsing-nodes) (page.51)] >> endobj 2096 0 obj << /Kids [2080 0 R 2081 0 R 2082 0 R 2083 0 R 2084 0 R 2085 0 R] /Limits [(page.52) (subsection.3.1.4)] >> endobj 2097 0 obj << /Kids [2086 0 R 2087 0 R 2088 0 R 2089 0 R 2090 0 R 2091 0 R] /Limits [(subsection.3.1.5) (term-wizard)] >> endobj 2098 0 obj << /Kids [2092 0 R 2093 0 R] /Limits [(term-wx) (writing-handler-methods)] >> endobj 2099 0 obj << /Kids [2094 0 R 2095 0 R 2096 0 R 2097 0 R 2098 0 R] /Limits [(--doc-TUIUG/advanced_view) (writing-handler-methods)] >> endobj 2100 0 obj << /Dests 2099 0 R >> endobj 2101 0 obj << /Type /Catalog /Pages 1913 0 R /Outlines 1914 0 R /Names 2100 0 R /PageMode/UseOutlines/PageLabels<>2<>4<>]>> /OpenAction 116 0 R >> endobj 2102 0 obj << /Author (Enthought, Inc.) /Title (Traits 3 User Manual) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.9)/Keywords() /CreationDate (D:20091021144116-05'00') /ModDate (D:20091021144116-05'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.9-2.2 (Web2C 7.5.7) kpathsea version 3.5.7) >> endobj xref 0 2103 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000928 00000 f 0000000015 00000 n 0000016856 00000 n 0002467356 00000 n 0000000060 00000 n 0000000098 00000 n 0000016964 00000 n 0002467284 00000 n 0000000145 00000 n 0000000184 00000 n 0000017076 00000 n 0002467198 00000 n 0000000232 00000 n 0000000263 00000 n 0000027948 00000 n 0002467112 00000 n 0000000311 00000 n 0000000376 00000 n 0000055333 00000 n 0002467026 00000 n 0000000424 00000 n 0000000461 00000 n 0000086206 00000 n 0002466940 00000 n 0000000509 00000 n 0000000555 00000 n 0000098210 00000 n 0002466854 00000 n 0000000603 00000 n 0000000635 00000 n 0000119699 00000 n 0002466781 00000 n 0000000683 00000 n 0000000717 00000 n 0000173262 00000 n 0002466693 00000 n 0000000763 00000 n 0000000800 00000 n 0000178354 00000 n 0002466567 00000 n 0000000846 00000 n 0000000883 00000 n 0000178520 00000 n 0002466506 00000 n 0000000931 00000 n 0000001023 00000 n 0001565874 00000 n 0002466417 00000 n 0000001069 00000 n 0000001106 00000 n 0001569698 00000 n 0002466288 00000 n 0000001152 00000 n 0000001191 00000 n 0001569807 00000 n 0002466214 00000 n 0000001239 00000 n 0000001278 00000 n 0001569920 00000 n 0002466127 00000 n 0000001326 00000 n 0000001357 00000 n 0001584445 00000 n 0002466040 00000 n 0000001405 00000 n 0000001456 00000 n 0001632611 00000 n 0002465953 00000 n 0000001504 00000 n 0000001541 00000 n 0001658879 00000 n 0002465866 00000 n 0000001589 00000 n 0000001630 00000 n 0001697184 00000 n 0002465779 00000 n 0000001678 00000 n 0000001735 00000 n 0001721834 00000 n 0002465692 00000 n 0000001783 00000 n 0000001818 00000 n 0001778572 00000 n 0002465605 00000 n 0000001866 00000 n 0000001923 00000 n 0001844374 00000 n 0002465518 00000 n 0000001971 00000 n 0000002027 00000 n 0002113410 00000 n 0002465431 00000 n 0000002076 00000 n 0000002117 00000 n 0002285406 00000 n 0002465343 00000 n 0000002166 00000 n 0000002217 00000 n 0002297751 00000 n 0002465252 00000 n 0000002267 00000 n 0000002311 00000 n 0002304161 00000 n 0002465160 00000 n 0000002361 00000 n 0000002410 00000 n 0002312968 00000 n 0002465082 00000 n 0000002460 00000 n 0000002531 00000 n 0002316118 00000 n 0002465003 00000 n 0000002578 00000 n 0000002616 00000 n 0000003060 00000 n 0000003172 00000 n 0000007326 00000 n 0000002668 00000 n 0000007216 00000 n 0000007273 00000 n 0002459911 00000 n 0002460084 00000 n 0002460619 00000 n 0002460975 00000 n 0000007729 00000 n 0000007560 00000 n 0000007460 00000 n 0000007672 00000 n 0000009283 00000 n 0000009434 00000 n 0000009587 00000 n 0000009740 00000 n 0000009893 00000 n 0000010046 00000 n 0000010199 00000 n 0000010351 00000 n 0000010504 00000 n 0000010655 00000 n 0000010805 00000 n 0000010958 00000 n 0000011109 00000 n 0000011260 00000 n 0000011411 00000 n 0000011564 00000 n 0000011716 00000 n 0000011869 00000 n 0000012021 00000 n 0000012174 00000 n 0000012326 00000 n 0000012479 00000 n 0000012632 00000 n 0000012786 00000 n 0000012940 00000 n 0000013093 00000 n 0000013247 00000 n 0000013401 00000 n 0000013609 00000 n 0000008935 00000 n 0000007770 00000 n 0000013552 00000 n 0002460262 00000 n 0000014013 00000 n 0000013901 00000 n 0000013707 00000 n 0000016350 00000 n 0000016521 00000 n 0000020444 00000 n 0000017132 00000 n 0000016210 00000 n 0000014085 00000 n 0000016693 00000 n 0000016750 00000 n 0000016803 00000 n 0000016907 00000 n 0000017019 00000 n 0000020633 00000 n 0000020962 00000 n 0000020304 00000 n 0000017230 00000 n 0000020787 00000 n 0002460795 00000 n 0000020844 00000 n 0002459733 00000 n 0002459385 00000 n 0002459559 00000 n 0000020901 00000 n 0000023769 00000 n 0000024045 00000 n 0000023637 00000 n 0000021112 00000 n 0000023931 00000 n 0000023988 00000 n 0002461093 00000 n 0000136880 00000 n 0000027609 00000 n 0000028174 00000 n 0000027477 00000 n 0000024182 00000 n 0000027777 00000 n 0000027834 00000 n 0000027891 00000 n 0000028003 00000 n 0000028060 00000 n 0000028117 00000 n 0000123401 00000 n 0000031448 00000 n 0000031602 00000 n 0000031768 00000 n 0000032269 00000 n 0000031300 00000 n 0000028324 00000 n 0000031924 00000 n 0000031981 00000 n 0000032038 00000 n 0000032095 00000 n 0000032152 00000 n 0000032209 00000 n 0000038639 00000 n 0000049045 00000 n 0000035276 00000 n 0000034642 00000 n 0000032393 00000 n 0000034754 00000 n 0000034811 00000 n 0000034872 00000 n 0000034929 00000 n 0000034986 00000 n 0000035043 00000 n 0000035105 00000 n 0000035162 00000 n 0000035219 00000 n 0000042879 00000 n 0000043039 00000 n 0000038928 00000 n 0000038470 00000 n 0000035374 00000 n 0000038582 00000 n 0000038695 00000 n 0000038752 00000 n 0000038814 00000 n 0000038871 00000 n 0000043424 00000 n 0000042739 00000 n 0000039052 00000 n 0000043193 00000 n 0000043250 00000 n 0000043307 00000 n 0000043364 00000 n 0000153332 00000 n 0000046276 00000 n 0000045993 00000 n 0000043574 00000 n 0000046105 00000 n 0000046162 00000 n 0000046219 00000 n 0002461211 00000 n 0000048829 00000 n 0000049333 00000 n 0000048697 00000 n 0000046413 00000 n 0000048988 00000 n 0000049106 00000 n 0000049163 00000 n 0000049220 00000 n 0000049277 00000 n 0000086149 00000 n 0000052736 00000 n 0000053118 00000 n 0000052604 00000 n 0000049457 00000 n 0000052889 00000 n 0000052946 00000 n 0000052999 00000 n 0000053061 00000 n 0000157502 00000 n 0000055446 00000 n 0000055107 00000 n 0000053268 00000 n 0000055219 00000 n 0000055276 00000 n 0000055389 00000 n 0000058221 00000 n 0000058720 00000 n 0000058089 00000 n 0000055570 00000 n 0000058382 00000 n 0000058439 00000 n 0000058492 00000 n 0000058549 00000 n 0000058606 00000 n 0000058663 00000 n 0000060494 00000 n 0000060789 00000 n 0000060325 00000 n 0000058857 00000 n 0000060437 00000 n 0000060556 00000 n 0000060613 00000 n 0000060670 00000 n 0000060727 00000 n 0000064738 00000 n 0000064288 00000 n 0000060926 00000 n 0000064400 00000 n 0000064457 00000 n 0000064510 00000 n 0000064567 00000 n 0000064624 00000 n 0000064681 00000 n 0002461329 00000 n 0000068255 00000 n 0000067848 00000 n 0000064862 00000 n 0000067960 00000 n 0000068017 00000 n 0000068079 00000 n 0000068136 00000 n 0000068198 00000 n 0000070835 00000 n 0000071336 00000 n 0000070703 00000 n 0000068379 00000 n 0000070995 00000 n 0000071052 00000 n 0000071109 00000 n 0000071166 00000 n 0000071223 00000 n 0000071280 00000 n 0000074493 00000 n 0000074814 00000 n 0000074987 00000 n 0000075486 00000 n 0000074337 00000 n 0000071473 00000 n 0000075141 00000 n 0000075198 00000 n 0000074654 00000 n 0000075251 00000 n 0000075312 00000 n 0000075368 00000 n 0000075429 00000 n 0000082127 00000 n 0000078454 00000 n 0000078961 00000 n 0000078322 00000 n 0000075623 00000 n 0000078606 00000 n 0000078663 00000 n 0000078725 00000 n 0000078781 00000 n 0000078838 00000 n 0000078900 00000 n 0000081689 00000 n 0000082244 00000 n 0000081557 00000 n 0000079111 00000 n 0000081846 00000 n 0000081903 00000 n 0002460438 00000 n 0000081956 00000 n 0000082013 00000 n 0000082070 00000 n 0000082189 00000 n 0000085978 00000 n 0000085767 00000 n 0000086494 00000 n 0000085635 00000 n 0000082407 00000 n 0000085921 00000 n 0000086035 00000 n 0000086092 00000 n 0000086262 00000 n 0000086319 00000 n 0000086376 00000 n 0000086433 00000 n 0002461447 00000 n 0000089340 00000 n 0000088935 00000 n 0000086631 00000 n 0000089047 00000 n 0000089104 00000 n 0000089165 00000 n 0000089222 00000 n 0000089279 00000 n 0000092277 00000 n 0000091885 00000 n 0000089477 00000 n 0000091997 00000 n 0000092054 00000 n 0000092107 00000 n 0000092164 00000 n 0000092220 00000 n 0000094638 00000 n 0000094297 00000 n 0000092427 00000 n 0000094409 00000 n 0000094466 00000 n 0000094519 00000 n 0000094581 00000 n 0000097728 00000 n 0000097886 00000 n 0000098497 00000 n 0000097588 00000 n 0000094736 00000 n 0000098039 00000 n 0000098096 00000 n 0000098153 00000 n 0000098266 00000 n 0000098323 00000 n 0000098379 00000 n 0000098436 00000 n 0000101081 00000 n 0000100507 00000 n 0000098647 00000 n 0000100619 00000 n 0000100676 00000 n 0000100729 00000 n 0000100786 00000 n 0000100848 00000 n 0000100905 00000 n 0000100962 00000 n 0000101019 00000 n 0000104226 00000 n 0000106582 00000 n 0000104745 00000 n 0000104094 00000 n 0000101218 00000 n 0000104402 00000 n 0000104459 00000 n 0000104512 00000 n 0000104574 00000 n 0000104631 00000 n 0000104688 00000 n 0002461565 00000 n 0000106728 00000 n 0000106885 00000 n 0000107040 00000 n 0000107539 00000 n 0000106426 00000 n 0000104895 00000 n 0000107197 00000 n 0000107254 00000 n 0000107307 00000 n 0000107363 00000 n 0000107420 00000 n 0000107482 00000 n 0000110103 00000 n 0000113457 00000 n 0000110220 00000 n 0000109934 00000 n 0000107637 00000 n 0000110046 00000 n 0000110163 00000 n 0000113689 00000 n 0000113288 00000 n 0000110357 00000 n 0000113400 00000 n 0000113518 00000 n 0000113575 00000 n 0000113632 00000 n 0000116287 00000 n 0000116850 00000 n 0000116155 00000 n 0000113826 00000 n 0000116451 00000 n 0000116508 00000 n 0000116565 00000 n 0000116622 00000 n 0000116679 00000 n 0000116736 00000 n 0000116793 00000 n 0000119921 00000 n 0000119416 00000 n 0000116987 00000 n 0000119528 00000 n 0000119585 00000 n 0000119642 00000 n 0000119755 00000 n 0000119812 00000 n 0000119869 00000 n 0000122927 00000 n 0000123582 00000 n 0000122795 00000 n 0000120045 00000 n 0000123115 00000 n 0000123172 00000 n 0000123225 00000 n 0000123282 00000 n 0000123344 00000 n 0000123463 00000 n 0000123520 00000 n 0002461683 00000 n 0000126579 00000 n 0000126243 00000 n 0000123732 00000 n 0000126355 00000 n 0000126412 00000 n 0000126465 00000 n 0000126522 00000 n 0000129795 00000 n 0000129217 00000 n 0000126716 00000 n 0000129329 00000 n 0000129386 00000 n 0000129443 00000 n 0000129500 00000 n 0000129557 00000 n 0000129614 00000 n 0000129676 00000 n 0000129733 00000 n 0000133708 00000 n 0000133076 00000 n 0000129932 00000 n 0000133188 00000 n 0000133245 00000 n 0000133298 00000 n 0000133360 00000 n 0000133416 00000 n 0000133478 00000 n 0000133533 00000 n 0000133595 00000 n 0000133651 00000 n 0000136665 00000 n 0000136998 00000 n 0000136533 00000 n 0000133858 00000 n 0000136823 00000 n 0000136941 00000 n 0000140696 00000 n 0000140119 00000 n 0000137148 00000 n 0000140231 00000 n 0000140288 00000 n 0000140350 00000 n 0000140407 00000 n 0000140464 00000 n 0000140521 00000 n 0000140582 00000 n 0000140639 00000 n 0000143931 00000 n 0000144428 00000 n 0000143799 00000 n 0000140833 00000 n 0000144083 00000 n 0000144140 00000 n 0000144197 00000 n 0000144253 00000 n 0000144315 00000 n 0000144372 00000 n 0002461801 00000 n 0000147354 00000 n 0000146851 00000 n 0000144565 00000 n 0000146963 00000 n 0000147020 00000 n 0000147073 00000 n 0000147130 00000 n 0000147186 00000 n 0000147243 00000 n 0000147300 00000 n 0000150023 00000 n 0000149740 00000 n 0000147491 00000 n 0000149852 00000 n 0000149909 00000 n 0000149966 00000 n 0000153508 00000 n 0000152931 00000 n 0000150160 00000 n 0000153043 00000 n 0000153100 00000 n 0000153156 00000 n 0000153213 00000 n 0000153275 00000 n 0000153394 00000 n 0000153451 00000 n 0000157062 00000 n 0000157563 00000 n 0000156930 00000 n 0000153645 00000 n 0000157221 00000 n 0000157278 00000 n 0000157331 00000 n 0000157388 00000 n 0000157445 00000 n 0000160834 00000 n 0000161002 00000 n 0000161158 00000 n 0000161317 00000 n 0000161925 00000 n 0000160678 00000 n 0000157713 00000 n 0000161469 00000 n 0000161526 00000 n 0000161579 00000 n 0000161635 00000 n 0000161692 00000 n 0000161754 00000 n 0000161811 00000 n 0000161868 00000 n 0000164965 00000 n 0000165771 00000 n 0000164833 00000 n 0000162075 00000 n 0000165134 00000 n 0000165191 00000 n 0000165248 00000 n 0000165305 00000 n 0000165367 00000 n 0000165424 00000 n 0000165481 00000 n 0000165538 00000 n 0000165595 00000 n 0000165652 00000 n 0000165714 00000 n 0002461919 00000 n 0000168979 00000 n 0000168643 00000 n 0000165908 00000 n 0000168755 00000 n 0000168812 00000 n 0000168865 00000 n 0000168922 00000 n 0000172074 00000 n 0000171792 00000 n 0000169116 00000 n 0000171904 00000 n 0000171961 00000 n 0000172017 00000 n 0000172634 00000 n 0000172465 00000 n 0000172185 00000 n 0000172577 00000 n 0000173371 00000 n 0000173093 00000 n 0000172706 00000 n 0000173205 00000 n 0000173314 00000 n 0000173939 00000 n 0000173770 00000 n 0000173469 00000 n 0000173882 00000 n 0000176971 00000 n 0000177585 00000 n 0000177125 00000 n 0000177768 00000 n 0000177277 00000 n 0000177936 00000 n 0000177431 00000 n 0000178117 00000 n 0000178820 00000 n 0000176783 00000 n 0000174011 00000 n 0000178297 00000 n 0000178406 00000 n 0000178463 00000 n 0000178576 00000 n 0000178637 00000 n 0000178698 00000 n 0000178759 00000 n 0002462037 00000 n 0000182191 00000 n 0000182596 00000 n 0000182059 00000 n 0000178918 00000 n 0000182372 00000 n 0000182429 00000 n 0000182482 00000 n 0000182539 00000 n 0000186123 00000 n 0000185840 00000 n 0000182733 00000 n 0000185952 00000 n 0000186009 00000 n 0000186066 00000 n 0000197686 00000 n 0000197839 00000 n 0000188790 00000 n 0000197615 00000 n 0000198206 00000 n 0000188635 00000 n 0000186273 00000 n 0000198032 00000 n 0000198089 00000 n 0000198146 00000 n 0000197219 00000 n 0000200558 00000 n 0000210152 00000 n 0000200431 00000 n 0000198379 00000 n 0000210095 00000 n 0000209592 00000 n 0000213781 00000 n 0000213443 00000 n 0000210312 00000 n 0000213555 00000 n 0000213612 00000 n 0000213667 00000 n 0000213724 00000 n 0000219840 00000 n 0000216858 00000 n 0000216618 00000 n 0000213905 00000 n 0000216745 00000 n 0000216802 00000 n 0002462155 00000 n 0000228612 00000 n 0000228766 00000 n 0000229248 00000 n 0000219685 00000 n 0000216982 00000 n 0000228960 00000 n 0000229017 00000 n 0000229074 00000 n 0000229131 00000 n 0000229188 00000 n 0000228214 00000 n 0000232346 00000 n 0000232120 00000 n 0000229395 00000 n 0000232232 00000 n 0000232289 00000 n 0000234259 00000 n 0000247123 00000 n 0000234132 00000 n 0000232470 00000 n 0000247066 00000 n 0000246592 00000 n 0000250871 00000 n 0000251026 00000 n 0000251437 00000 n 0000250731 00000 n 0000247296 00000 n 0000251205 00000 n 0000251262 00000 n 0000251319 00000 n 0000251376 00000 n 0000253520 00000 n 0000253351 00000 n 0000251548 00000 n 0000253463 00000 n 0000255869 00000 n 0000278139 00000 n 0000278471 00000 n 0000255722 00000 n 0000253631 00000 n 0000278357 00000 n 0000278414 00000 n 0002462273 00000 n 0000277639 00000 n 0000281013 00000 n 0000280730 00000 n 0000278631 00000 n 0000280842 00000 n 0000280899 00000 n 0000280956 00000 n 0000283802 00000 n 0000283576 00000 n 0000281137 00000 n 0000283688 00000 n 0000283745 00000 n 0000286378 00000 n 0000286152 00000 n 0000283926 00000 n 0000286264 00000 n 0000286321 00000 n 0000288627 00000 n 0000288458 00000 n 0000286502 00000 n 0000288570 00000 n 0000289316 00000 n 0000714065 00000 n 0001142793 00000 n 0001563089 00000 n 0000289189 00000 n 0000288751 00000 n 0001563032 00000 n 0000713082 00000 n 0001141810 00000 n 0001562049 00000 n 0001564686 00000 n 0001564517 00000 n 0001563236 00000 n 0001564629 00000 n 0002462391 00000 n 0001565248 00000 n 0001565079 00000 n 0001564784 00000 n 0001565191 00000 n 0001565983 00000 n 0001565705 00000 n 0001565320 00000 n 0001565817 00000 n 0001565926 00000 n 0001566551 00000 n 0001566382 00000 n 0001566081 00000 n 0001566494 00000 n 0001568994 00000 n 0001569165 00000 n 0001569337 00000 n 0001569491 00000 n 0001569976 00000 n 0001568838 00000 n 0001566623 00000 n 0001569641 00000 n 0001569750 00000 n 0001569863 00000 n 0002312408 00000 n 0002312345 00000 n 0001573907 00000 n 0001574058 00000 n 0001574211 00000 n 0001574360 00000 n 0001574518 00000 n 0001574674 00000 n 0001574829 00000 n 0001574984 00000 n 0001575146 00000 n 0001575299 00000 n 0001575451 00000 n 0001575603 00000 n 0001576719 00000 n 0001575757 00000 n 0001575932 00000 n 0001576081 00000 n 0001576230 00000 n 0001576385 00000 n 0001576540 00000 n 0001577583 00000 n 0001573631 00000 n 0001570087 00000 n 0001576877 00000 n 0001576934 00000 n 0001576991 00000 n 0001577048 00000 n 0001577105 00000 n 0001577162 00000 n 0001577224 00000 n 0001577281 00000 n 0001577343 00000 n 0001577399 00000 n 0001577461 00000 n 0001577522 00000 n 0002311648 00000 n 0002311775 00000 n 0002312534 00000 n 0002304410 00000 n 0002304850 00000 n 0002304787 00000 n 0002304913 00000 n 0002312219 00000 n 0002311966 00000 n 0002304975 00000 n 0002304724 00000 n 0001584388 00000 n 0001697126 00000 n 0001692597 00000 n 0001581252 00000 n 0001581423 00000 n 0001581590 00000 n 0001581775 00000 n 0001581955 00000 n 0001582128 00000 n 0001582289 00000 n 0001582454 00000 n 0001582632 00000 n 0001582789 00000 n 0001582968 00000 n 0001583148 00000 n 0001583302 00000 n 0001583466 00000 n 0001583625 00000 n 0001583782 00000 n 0001597431 00000 n 0001597594 00000 n 0001584562 00000 n 0001581000 00000 n 0001577681 00000 n 0001583937 00000 n 0001583994 00000 n 0001584047 00000 n 0001584103 00000 n 0001584160 00000 n 0001584217 00000 n 0001584274 00000 n 0001584331 00000 n 0001584501 00000 n 0002462509 00000 n 0001632554 00000 n 0001655469 00000 n 0001721776 00000 n 0001778514 00000 n 0001844316 00000 n 0002304537 00000 n 0002294156 00000 n 0002304103 00000 n 0001586981 00000 n 0001598223 00000 n 0001586841 00000 n 0001584673 00000 n 0001597748 00000 n 0001597805 00000 n 0001597867 00000 n 0001597924 00000 n 0001597986 00000 n 0001598043 00000 n 0001598100 00000 n 0001598162 00000 n 0001600631 00000 n 0001606895 00000 n 0001607056 00000 n 0001607220 00000 n 0001609346 00000 n 0001609498 00000 n 0001607728 00000 n 0001600483 00000 n 0001598410 00000 n 0001607380 00000 n 0001607437 00000 n 0001607490 00000 n 0001607552 00000 n 0001607614 00000 n 0001607671 00000 n 0001670967 00000 n 0000000929 00000 f 0000000930 00000 f 0000000931 00000 f 0000000999 00000 f 0001612666 00000 n 0001612846 00000 n 0001613205 00000 n 0001613360 00000 n 0001609823 00000 n 0001609206 00000 n 0001607902 00000 n 0001609652 00000 n 0001609709 00000 n 0001609762 00000 n 0002312660 00000 n 0001613764 00000 n 0001612502 00000 n 0001609921 00000 n 0001613540 00000 n 0001613597 00000 n 0001613025 00000 n 0001613650 00000 n 0001613707 00000 n 0001616467 00000 n 0001618359 00000 n 0001616618 00000 n 0001617299 00000 n 0001616327 00000 n 0001613875 00000 n 0001616773 00000 n 0001616830 00000 n 0001616892 00000 n 0001616949 00000 n 0001617006 00000 n 0001617063 00000 n 0001617120 00000 n 0001617176 00000 n 0001617238 00000 n 0001626242 00000 n 0001618247 00000 n 0001617436 00000 n 0001626005 00000 n 0001626062 00000 n 0001626124 00000 n 0001626180 00000 n 0002462627 00000 n 0001626892 00000 n 0001626670 00000 n 0001626377 00000 n 0001626782 00000 n 0001626839 00000 n 0001629205 00000 n 0001628980 00000 n 0001626964 00000 n 0001629092 00000 n 0001629149 00000 n 0001632107 00000 n 0001632781 00000 n 0001631975 00000 n 0001629316 00000 n 0001632268 00000 n 0001632325 00000 n 0001632378 00000 n 0001632440 00000 n 0001632497 00000 n 0001632667 00000 n 0001632724 00000 n 0002304347 00000 n 0001636406 00000 n 0001636557 00000 n 0001636707 00000 n 0000001000 00000 f 0000001001 00000 f 0000001002 00000 f 0000001051 00000 f 0001637067 00000 n 0001637223 00000 n 0001637376 00000 n 0001637529 00000 n 0001637687 00000 n 0001637867 00000 n 0001638025 00000 n 0001638180 00000 n 0001638332 00000 n 0001638495 00000 n 0001638650 00000 n 0001649127 00000 n 0001649283 00000 n 0001639480 00000 n 0001636147 00000 n 0001632905 00000 n 0001638813 00000 n 0001638872 00000 n 0001638931 00000 n 0001636887 00000 n 0001638990 00000 n 0001639053 00000 n 0001639112 00000 n 0001639176 00000 n 0001639235 00000 n 0001639299 00000 n 0001639358 00000 n 0001639422 00000 n 0002311711 00000 n 0002305037 00000 n 0002311838 00000 n 0002305100 00000 n 0002304473 00000 n 0002312723 00000 n 0001718223 00000 n 0002312092 00000 n 0001641634 00000 n 0001649806 00000 n 0001641489 00000 n 0001639592 00000 n 0001649433 00000 n 0001649492 00000 n 0001649556 00000 n 0001649615 00000 n 0001649679 00000 n 0001649743 00000 n 0001717751 00000 n 0001651857 00000 n 0000001052 00000 f 0000001053 00000 f 0000000000 00000 f 0001654517 00000 n 0001654673 00000 n 0001654999 00000 n 0001652196 00000 n 0001651720 00000 n 0001649995 00000 n 0001652023 00000 n 0001652082 00000 n 0001652137 00000 n 0002462747 00000 n 0001717987 00000 n 0001655527 00000 n 0001654353 00000 n 0001652321 00000 n 0001655180 00000 n 0001655239 00000 n 0001655294 00000 n 0001655352 00000 n 0001654836 00000 n 0001655410 00000 n 0001658514 00000 n 0001658668 00000 n 0001659291 00000 n 0001658368 00000 n 0001655639 00000 n 0001658820 00000 n 0001658932 00000 n 0001658991 00000 n 0001659050 00000 n 0001659109 00000 n 0001659168 00000 n 0001659232 00000 n 0001661956 00000 n 0001661476 00000 n 0001659442 00000 n 0001661592 00000 n 0001661651 00000 n 0001661714 00000 n 0001661774 00000 n 0001661833 00000 n 0001661897 00000 n 0001665486 00000 n 0001665662 00000 n 0001665820 00000 n 0001665972 00000 n 0001666128 00000 n 0001666321 00000 n 0001669773 00000 n 0001669932 00000 n 0001670086 00000 n 0001666752 00000 n 0001665304 00000 n 0001662144 00000 n 0001666507 00000 n 0001666566 00000 n 0001666630 00000 n 0001666689 00000 n 0001670266 00000 n 0001670430 00000 n 0001670746 00000 n 0001670586 00000 n 0001674395 00000 n 0001671639 00000 n 0001669582 00000 n 0001666877 00000 n 0001670908 00000 n 0001671030 00000 n 0001671089 00000 n 0001671148 00000 n 0001671207 00000 n 0001671269 00000 n 0001671328 00000 n 0001671392 00000 n 0001671450 00000 n 0001671514 00000 n 0001671577 00000 n 0002312596 00000 n 0001674670 00000 n 0001674908 00000 n 0001674258 00000 n 0001671738 00000 n 0001674556 00000 n 0001674615 00000 n 0001674728 00000 n 0001674786 00000 n 0001674850 00000 n 0002462872 00000 n 0001692318 00000 n 0001677646 00000 n 0001692723 00000 n 0001677509 00000 n 0001675046 00000 n 0001692474 00000 n 0001692533 00000 n 0001692660 00000 n 0001695873 00000 n 0001696023 00000 n 0001696181 00000 n 0001696338 00000 n 0001696494 00000 n 0001696650 00000 n 0001697363 00000 n 0001695691 00000 n 0001692899 00000 n 0001696831 00000 n 0001696890 00000 n 0001696945 00000 n 0001697009 00000 n 0001697067 00000 n 0001697241 00000 n 0001697300 00000 n 0001701158 00000 n 0001701321 00000 n 0001701638 00000 n 0001702562 00000 n 0001702922 00000 n 0001701794 00000 n 0001701988 00000 n 0001702162 00000 n 0001702365 00000 n 0001703764 00000 n 0001700931 00000 n 0001697488 00000 n 0001703101 00000 n 0001703160 00000 n 0001701479 00000 n 0001703215 00000 n 0001703278 00000 n 0001703337 00000 n 0001703396 00000 n 0001703455 00000 n 0001703519 00000 n 0001703578 00000 n 0001703642 00000 n 0001703701 00000 n 0001702743 00000 n 0001714364 00000 n 0001707099 00000 n 0001706443 00000 n 0001703876 00000 n 0001706559 00000 n 0001706618 00000 n 0001706682 00000 n 0001706741 00000 n 0001706799 00000 n 0001706858 00000 n 0001706917 00000 n 0001706976 00000 n 0001707040 00000 n 0001710753 00000 n 0001709810 00000 n 0001707237 00000 n 0001709926 00000 n 0001709985 00000 n 0001710049 00000 n 0001710108 00000 n 0001710167 00000 n 0001710226 00000 n 0001710285 00000 n 0001710344 00000 n 0001710403 00000 n 0001710462 00000 n 0001710517 00000 n 0001710576 00000 n 0001710635 00000 n 0001710694 00000 n 0001713835 00000 n 0001713997 00000 n 0001714486 00000 n 0001713689 00000 n 0001710852 00000 n 0001714191 00000 n 0001714250 00000 n 0001714305 00000 n 0001714427 00000 n 0002462997 00000 n 0001717036 00000 n 0001717359 00000 n 0001718281 00000 n 0001716881 00000 n 0001714637 00000 n 0001717510 00000 n 0001717569 00000 n 0001717633 00000 n 0001717692 00000 n 0001717810 00000 n 0001717198 00000 n 0001717869 00000 n 0001717928 00000 n 0001718046 00000 n 0001718105 00000 n 0001718164 00000 n 0001720771 00000 n 0001720922 00000 n 0001722675 00000 n 0001733857 00000 n 0001750455 00000 n 0001721891 00000 n 0001720625 00000 n 0001718432 00000 n 0001721073 00000 n 0001721132 00000 n 0001721187 00000 n 0001721246 00000 n 0001721305 00000 n 0001721364 00000 n 0001721423 00000 n 0001721482 00000 n 0001721541 00000 n 0001721600 00000 n 0001721658 00000 n 0001721717 00000 n 0001766482 00000 n 0001722559 00000 n 0001722029 00000 n 0001766234 00000 n 0001766293 00000 n 0001766357 00000 n 0001766419 00000 n 0001770033 00000 n 0001770185 00000 n 0001770335 00000 n 0001770483 00000 n 0001770639 00000 n 0001771338 00000 n 0001769860 00000 n 0001766636 00000 n 0001770794 00000 n 0001770853 00000 n 0001770908 00000 n 0001770972 00000 n 0001771031 00000 n 0001771090 00000 n 0001771154 00000 n 0001771213 00000 n 0001771276 00000 n 0001773454 00000 n 0001773156 00000 n 0001771489 00000 n 0001773272 00000 n 0001773331 00000 n 0001773395 00000 n 0001777083 00000 n 0001777243 00000 n 0001777583 00000 n 0001777744 00000 n 0001777905 00000 n 0001778068 00000 n 0001778226 00000 n 0001778752 00000 n 0001776883 00000 n 0001773579 00000 n 0001778396 00000 n 0001777414 00000 n 0001778455 00000 n 0001778629 00000 n 0001778693 00000 n 0002463122 00000 n 0002285342 00000 n 0002304600 00000 n 0002312281 00000 n 0002312029 00000 n 0001781338 00000 n 0001791015 00000 n 0001791341 00000 n 0001791512 00000 n 0001791677 00000 n 0001795876 00000 n 0001796046 00000 n 0001792089 00000 n 0001781165 00000 n 0001778903 00000 n 0001791849 00000 n 0001791908 00000 n 0001791178 00000 n 0001791971 00000 n 0001792030 00000 n 0001844431 00000 n 0002113351 00000 n 0001796202 00000 n 0001796365 00000 n 0001796546 00000 n 0001796697 00000 n 0001796850 00000 n 0001797001 00000 n 0001797160 00000 n 0001797679 00000 n 0001795667 00000 n 0001792239 00000 n 0001797312 00000 n 0001797371 00000 n 0001797435 00000 n 0001797499 00000 n 0001797558 00000 n 0001797617 00000 n 0001811205 00000 n 0001811386 00000 n 0001811549 00000 n 0001800576 00000 n 0001805212 00000 n 0001814755 00000 n 0001812204 00000 n 0001800421 00000 n 0001797804 00000 n 0001811719 00000 n 0001811778 00000 n 0001811841 00000 n 0001811900 00000 n 0001811958 00000 n 0001812017 00000 n 0001812081 00000 n 0001812145 00000 n 0001824316 00000 n 0001820340 00000 n 0001823243 00000 n 0001823401 00000 n 0001827019 00000 n 0001830305 00000 n 0001830467 00000 n 0001824380 00000 n 0001814600 00000 n 0001812369 00000 n 0001823716 00000 n 0001823775 00000 n 0001823839 00000 n 0001823898 00000 n 0001823962 00000 n 0001824021 00000 n 0001824080 00000 n 0001823560 00000 n 0001824139 00000 n 0001824198 00000 n 0001824257 00000 n 0001831108 00000 n 0001826873 00000 n 0001824545 00000 n 0001830629 00000 n 0001830688 00000 n 0001830752 00000 n 0001830810 00000 n 0001830868 00000 n 0001830927 00000 n 0001830986 00000 n 0001831049 00000 n 0001833465 00000 n 0001844793 00000 n 0001833349 00000 n 0001831297 00000 n 0001844135 00000 n 0001844194 00000 n 0001844257 00000 n 0001844490 00000 n 0001844548 00000 n 0001844607 00000 n 0001844666 00000 n 0001844730 00000 n 0002463247 00000 n 0001846792 00000 n 0001846504 00000 n 0001844943 00000 n 0001846620 00000 n 0001846679 00000 n 0001846734 00000 n 0001849630 00000 n 0001854621 00000 n 0001854777 00000 n 0001854931 00000 n 0001855517 00000 n 0001849475 00000 n 0001846917 00000 n 0001855087 00000 n 0001855146 00000 n 0001855210 00000 n 0001855269 00000 n 0001855333 00000 n 0001855392 00000 n 0001855454 00000 n 0001859426 00000 n 0001884106 00000 n 0001858724 00000 n 0001858304 00000 n 0001855680 00000 n 0001858420 00000 n 0001858479 00000 n 0001858543 00000 n 0001858601 00000 n 0001858665 00000 n 0001903559 00000 n 0001859310 00000 n 0001858836 00000 n 0001903373 00000 n 0001903432 00000 n 0001903496 00000 n 0001906065 00000 n 0001938840 00000 n 0001905949 00000 n 0001903698 00000 n 0001938658 00000 n 0001938717 00000 n 0001938781 00000 n 0001942185 00000 n 0001941708 00000 n 0001938990 00000 n 0001941824 00000 n 0001941883 00000 n 0001941947 00000 n 0001942004 00000 n 0001942063 00000 n 0001942126 00000 n 0002463372 00000 n 0001945042 00000 n 0001944562 00000 n 0001942310 00000 n 0001944678 00000 n 0001944737 00000 n 0001944792 00000 n 0001944856 00000 n 0001944920 00000 n 0001944978 00000 n 0001950385 00000 n 0001948617 00000 n 0001948200 00000 n 0001945167 00000 n 0001948316 00000 n 0001948375 00000 n 0001948430 00000 n 0001948494 00000 n 0001948553 00000 n 0001979149 00000 n 0001979611 00000 n 0001950248 00000 n 0001948742 00000 n 0001979366 00000 n 0001979425 00000 n 0001979489 00000 n 0001979548 00000 n 0001981679 00000 n 0001993564 00000 n 0001993897 00000 n 0001981542 00000 n 0001979761 00000 n 0001993715 00000 n 0001993774 00000 n 0001993833 00000 n 0002000407 00000 n 0001997264 00000 n 0001997427 00000 n 0002016658 00000 n 0001998299 00000 n 0001997118 00000 n 0001994060 00000 n 0001997593 00000 n 0001997652 00000 n 0001997710 00000 n 0001997769 00000 n 0001997828 00000 n 0001997887 00000 n 0001997946 00000 n 0001998004 00000 n 0001998063 00000 n 0001998122 00000 n 0001998181 00000 n 0001998240 00000 n 0002017061 00000 n 0002000270 00000 n 0001998424 00000 n 0002016817 00000 n 0002016876 00000 n 0002016939 00000 n 0002016997 00000 n 0002463497 00000 n 0002019820 00000 n 0002019976 00000 n 0002022266 00000 n 0002020432 00000 n 0002019674 00000 n 0002017224 00000 n 0002020129 00000 n 0002020188 00000 n 0002020252 00000 n 0002020310 00000 n 0002020369 00000 n 0002137727 00000 n 0002036117 00000 n 0002047924 00000 n 0002022150 00000 n 0002020557 00000 n 0002047614 00000 n 0002047673 00000 n 0002047737 00000 n 0002047801 00000 n 0002047865 00000 n 0002050109 00000 n 0002062592 00000 n 0002060392 00000 n 0002049993 00000 n 0002048089 00000 n 0002060087 00000 n 0002060146 00000 n 0002060210 00000 n 0002060269 00000 n 0002060328 00000 n 0002095206 00000 n 0002082570 00000 n 0002062476 00000 n 0002060542 00000 n 0002082335 00000 n 0002082394 00000 n 0002082449 00000 n 0002082511 00000 n 0002084693 00000 n 0002097814 00000 n 0002095666 00000 n 0002084556 00000 n 0002082720 00000 n 0002095361 00000 n 0002095420 00000 n 0002095484 00000 n 0002095543 00000 n 0002095607 00000 n 0002110510 00000 n 0002097698 00000 n 0002095816 00000 n 0002110087 00000 n 0002110146 00000 n 0002110210 00000 n 0002110265 00000 n 0002110328 00000 n 0002110392 00000 n 0002110451 00000 n 0002463622 00000 n 0002113526 00000 n 0002112867 00000 n 0002110673 00000 n 0002112983 00000 n 0002113042 00000 n 0002113106 00000 n 0002113169 00000 n 0002113228 00000 n 0002113292 00000 n 0002113467 00000 n 0002116502 00000 n 0002117014 00000 n 0002116365 00000 n 0002113638 00000 n 0002116656 00000 n 0002116715 00000 n 0002116773 00000 n 0002116832 00000 n 0002116896 00000 n 0002116955 00000 n 0002236430 00000 n 0002135721 00000 n 0002118881 00000 n 0002136123 00000 n 0002118744 00000 n 0002117126 00000 n 0002135880 00000 n 0002135939 00000 n 0002136001 00000 n 0002136064 00000 n 0002137845 00000 n 0002137552 00000 n 0002136273 00000 n 0002137668 00000 n 0002137786 00000 n 0002140080 00000 n 0002160223 00000 n 0002160382 00000 n 0002160538 00000 n 0002160697 00000 n 0002160858 00000 n 0002161024 00000 n 0002161427 00000 n 0002139898 00000 n 0002137970 00000 n 0002161187 00000 n 0002161246 00000 n 0002161310 00000 n 0002161368 00000 n 0002182430 00000 n 0002190163 00000 n 0002193706 00000 n 0002193824 00000 n 0002193942 00000 n 0002182218 00000 n 0002163743 00000 n 0002182732 00000 n 0002163606 00000 n 0002161590 00000 n 0002182371 00000 n 0002182494 00000 n 0002182556 00000 n 0002182615 00000 n 0002182674 00000 n 0002463747 00000 n 0002186574 00000 n 0002186153 00000 n 0002182882 00000 n 0002186269 00000 n 0002186328 00000 n 0002186392 00000 n 0002186451 00000 n 0002186515 00000 n 0002190524 00000 n 0002189988 00000 n 0002186699 00000 n 0002190104 00000 n 0002190227 00000 n 0002190286 00000 n 0002190343 00000 n 0002190402 00000 n 0002190461 00000 n 0002193435 00000 n 0002194122 00000 n 0002193298 00000 n 0002190675 00000 n 0002193592 00000 n 0002193651 00000 n 0002193765 00000 n 0002193883 00000 n 0002194004 00000 n 0002194063 00000 n 0002197671 00000 n 0002197144 00000 n 0002194234 00000 n 0002197260 00000 n 0002197319 00000 n 0002197378 00000 n 0002197436 00000 n 0002197495 00000 n 0002197554 00000 n 0002197613 00000 n 0002200002 00000 n 0002233360 00000 n 0002199886 00000 n 0002197783 00000 n 0002232643 00000 n 0002232702 00000 n 0002232761 00000 n 0002232820 00000 n 0002232879 00000 n 0002232938 00000 n 0002232997 00000 n 0002233055 00000 n 0002233114 00000 n 0002233173 00000 n 0002233237 00000 n 0002233296 00000 n 0002236213 00000 n 0002236740 00000 n 0002236076 00000 n 0002233523 00000 n 0002236371 00000 n 0002236494 00000 n 0002236553 00000 n 0002236617 00000 n 0002236681 00000 n 0002463872 00000 n 0002251657 00000 n 0002238059 00000 n 0002237884 00000 n 0002236878 00000 n 0002238000 00000 n 0002239514 00000 n 0002239339 00000 n 0002238145 00000 n 0002239455 00000 n 0002240729 00000 n 0002240554 00000 n 0002239600 00000 n 0002240670 00000 n 0002243673 00000 n 0002243085 00000 n 0002240815 00000 n 0002243201 00000 n 0002243260 00000 n 0002243319 00000 n 0002243378 00000 n 0002243437 00000 n 0002243496 00000 n 0002243555 00000 n 0002243614 00000 n 0002246868 00000 n 0002247039 00000 n 0002247208 00000 n 0002247846 00000 n 0002246713 00000 n 0002243798 00000 n 0002247373 00000 n 0002247432 00000 n 0002247487 00000 n 0002247551 00000 n 0002247610 00000 n 0002247669 00000 n 0002247728 00000 n 0002247787 00000 n 0002251721 00000 n 0002251237 00000 n 0002247971 00000 n 0002251353 00000 n 0002251412 00000 n 0002251476 00000 n 0002251535 00000 n 0002251598 00000 n 0002463997 00000 n 0002254940 00000 n 0002254475 00000 n 0002251846 00000 n 0002254591 00000 n 0002254650 00000 n 0002254705 00000 n 0002254764 00000 n 0002254823 00000 n 0002254882 00000 n 0002256572 00000 n 0002285703 00000 n 0002256456 00000 n 0002255078 00000 n 0002285283 00000 n 0002285463 00000 n 0002285522 00000 n 0002285580 00000 n 0002285644 00000 n 0002288418 00000 n 0002288807 00000 n 0002288281 00000 n 0002285853 00000 n 0002288571 00000 n 0002288630 00000 n 0002288689 00000 n 0002288748 00000 n 0002291247 00000 n 0002290703 00000 n 0002288919 00000 n 0002290819 00000 n 0002290878 00000 n 0002290937 00000 n 0002291001 00000 n 0002291060 00000 n 0002291124 00000 n 0002291183 00000 n 0002294213 00000 n 0002293554 00000 n 0002291359 00000 n 0002293670 00000 n 0002293729 00000 n 0002293788 00000 n 0002293852 00000 n 0002293911 00000 n 0002293975 00000 n 0002294034 00000 n 0002294098 00000 n 0002296814 00000 n 0002297019 00000 n 0002297168 00000 n 0002297320 00000 n 0002297471 00000 n 0002298044 00000 n 0002296641 00000 n 0002294325 00000 n 0002297629 00000 n 0002297688 00000 n 0002297809 00000 n 0002297868 00000 n 0002297926 00000 n 0002297985 00000 n 0002464122 00000 n 0002301950 00000 n 0002302104 00000 n 0002302430 00000 n 0002302588 00000 n 0002302740 00000 n 0002302894 00000 n 0002303045 00000 n 0002303204 00000 n 0002303359 00000 n 0002303523 00000 n 0002303678 00000 n 0002303831 00000 n 0002308915 00000 n 0002309069 00000 n 0002309220 00000 n 0002305227 00000 n 0002301705 00000 n 0002298169 00000 n 0002303985 00000 n 0002304044 00000 n 0002304219 00000 n 0002302268 00000 n 0002304283 00000 n 0002304664 00000 n 0002305164 00000 n 0002311902 00000 n 0002309377 00000 n 0002309529 00000 n 0002309681 00000 n 0002309835 00000 n 0002309991 00000 n 0002310144 00000 n 0002310303 00000 n 0002310467 00000 n 0002310624 00000 n 0002310776 00000 n 0002310930 00000 n 0002311089 00000 n 0002311248 00000 n 0002311417 00000 n 0002313085 00000 n 0002308634 00000 n 0002305352 00000 n 0002311589 00000 n 0002312156 00000 n 0002312471 00000 n 0002312787 00000 n 0002312850 00000 n 0002312909 00000 n 0002313026 00000 n 0002315439 00000 n 0002315264 00000 n 0002313197 00000 n 0002315380 00000 n 0002316172 00000 n 0002315943 00000 n 0002315538 00000 n 0002316059 00000 n 0002458872 00000 n 0002316271 00000 n 0002316383 00000 n 0002316775 00000 n 0002317123 00000 n 0002317499 00000 n 0002318062 00000 n 0002318637 00000 n 0002319205 00000 n 0002319509 00000 n 0002320074 00000 n 0002336106 00000 n 0002336496 00000 n 0002355650 00000 n 0002356255 00000 n 0002372982 00000 n 0002373525 00000 n 0002386426 00000 n 0002386922 00000 n 0002394473 00000 n 0002394751 00000 n 0002411992 00000 n 0002412482 00000 n 0002419607 00000 n 0002419879 00000 n 0002440328 00000 n 0002440938 00000 n 0002458322 00000 n 0002464238 00000 n 0002464358 00000 n 0002464478 00000 n 0002464601 00000 n 0002464727 00000 n 0002464826 00000 n 0002464927 00000 n 0002467466 00000 n 0002467780 00000 n 0002468057 00000 n 0002468364 00000 n 0002468714 00000 n 0002468975 00000 n 0002469186 00000 n 0002469399 00000 n 0002469616 00000 n 0002469831 00000 n 0002470034 00000 n 0002470208 00000 n 0002470382 00000 n 0002470559 00000 n 0002470734 00000 n 0002470911 00000 n 0002471086 00000 n 0002471263 00000 n 0002471438 00000 n 0002471622 00000 n 0002471910 00000 n 0002472108 00000 n 0002472403 00000 n 0002472799 00000 n 0002473045 00000 n 0002473237 00000 n 0002473532 00000 n 0002473857 00000 n 0002474138 00000 n 0002474414 00000 n 0002474741 00000 n 0002475038 00000 n 0002475356 00000 n 0002475710 00000 n 0002476186 00000 n 0002476720 00000 n 0002477174 00000 n 0002477451 00000 n 0002477660 00000 n 0002477867 00000 n 0002478076 00000 n 0002478283 00000 n 0002478492 00000 n 0002478699 00000 n 0002478906 00000 n 0002479115 00000 n 0002479323 00000 n 0002479527 00000 n 0002479832 00000 n 0002480101 00000 n 0002480405 00000 n 0002480729 00000 n 0002480993 00000 n 0002481259 00000 n 0002481577 00000 n 0002481807 00000 n 0002481992 00000 n 0002482175 00000 n 0002482360 00000 n 0002482543 00000 n 0002482728 00000 n 0002482911 00000 n 0002483096 00000 n 0002483278 00000 n 0002483460 00000 n 0002483645 00000 n 0002483821 00000 n 0002483990 00000 n 0002484159 00000 n 0002484330 00000 n 0002484500 00000 n 0002484671 00000 n 0002484841 00000 n 0002485012 00000 n 0002485182 00000 n 0002485353 00000 n 0002485523 00000 n 0002485694 00000 n 0002485863 00000 n 0002486037 00000 n 0002486214 00000 n 0002486388 00000 n 0002486627 00000 n 0002486860 00000 n 0002487093 00000 n 0002487326 00000 n 0002487557 00000 n 0002487785 00000 n 0002488015 00000 n 0002488248 00000 n 0002488474 00000 n 0002488688 00000 n 0002488906 00000 n 0002489122 00000 n 0002489440 00000 n 0002489771 00000 n 0002490042 00000 n 0002490239 00000 n 0002490443 00000 n 0002490643 00000 n 0002490930 00000 n 0002491244 00000 n 0002491557 00000 n 0002491820 00000 n 0002492063 00000 n 0002492306 00000 n 0002492549 00000 n 0002492792 00000 n 0002493035 00000 n 0002493289 00000 n 0002493550 00000 n 0002493807 00000 n 0002494057 00000 n 0002494303 00000 n 0002494552 00000 n 0002494801 00000 n 0002495059 00000 n 0002495321 00000 n 0002495584 00000 n 0002495847 00000 n 0002496109 00000 n 0002496372 00000 n 0002496637 00000 n 0002496902 00000 n 0002497167 00000 n 0002497432 00000 n 0002497697 00000 n 0002497957 00000 n 0002498213 00000 n 0002498464 00000 n 0002498715 00000 n 0002498966 00000 n 0002499217 00000 n 0002499468 00000 n 0002499717 00000 n 0002499968 00000 n 0002500219 00000 n 0002500470 00000 n 0002500693 00000 n 0002500945 00000 n 0002501185 00000 n 0002501387 00000 n 0002501597 00000 n 0002501835 00000 n 0002502047 00000 n 0002502383 00000 n 0002502712 00000 n 0002502949 00000 n 0002503218 00000 n 0002503461 00000 n 0002503700 00000 n 0002504016 00000 n 0002504287 00000 n 0002504551 00000 n 0002504690 00000 n 0002504810 00000 n 0002504926 00000 n 0002505043 00000 n 0002505165 00000 n 0002505322 00000 n 0002505465 00000 n 0002505614 00000 n 0002505772 00000 n 0002505901 00000 n 0002506018 00000 n 0002506133 00000 n 0002506249 00000 n 0002506372 00000 n 0002506501 00000 n 0002506626 00000 n 0002506762 00000 n 0002506899 00000 n 0002507033 00000 n 0002507169 00000 n 0002507307 00000 n 0002507444 00000 n 0002507574 00000 n 0002507705 00000 n 0002507834 00000 n 0002507982 00000 n 0002508149 00000 n 0002508288 00000 n 0002508413 00000 n 0002508542 00000 n 0002508638 00000 n 0002508779 00000 n 0002508819 00000 n 0002509000 00000 n trailer << /Size 2103 /Root 2101 0 R /Info 2102 0 R /ID [ ] >> startxref 2509373 %%EOF traits-4.5.0/docs/Traits3_UM_add.css000066400000000000000000000004131233213561600172320ustar00rootroot00000000000000 .C-Emphasis { font-style: italic; } .C-Strong { font-weight: bold; } .C-Literal { font-family: "Courier New"; } .C-DefinedElement { font-weight: bold; } .C-Variable { font-style: italic; } .CodeOne-liner { font-family: "Courier New"; } traits-4.5.0/docs/api.css000066400000000000000000000110321233213561600152400ustar00rootroot00000000000000 /* Body color */ body {background: #ffffff; color: #000000; font-family: "Lucida Sans", Verdana, Arial, sans-serif;} /* Tables */ table.summary, table.details, table.index { background: #e8f0f8; color: #000000; } tr.summary, tr.details, tr.index { background: #70b0f0; color: #000000; text-align: left; font-size: 120%; } tr.group { background: #c0e0f8; color: #000000; text-align: left; font-size: 120%; font-style: italic; } /* Documentation page titles */ h2.module { margin-top: 0.2em; } h2.class { margin-top: 0.2em; } /* Headings */ h1.heading { font-size: +125%; font-style: italic; font-weight: bold; } h2.heading { font-size: +110%; font-style: italic; font-weight: bold; } h3.heading { font-style: italic; font-weight: normal; } /* Base tree */ pre.base-tree { font-size: 80%; margin: 0; } /* Details Sections */ table.func-details { background: #e8f0f8; color: #000000; border: 2px groove #c0d0d0; padding: 0 1em 0 1em; margin: 0.4em 0 0 0; } h3.func-detail { background: transparent; color: #000000; margin: 0 0 1em 0; } table.var-details { background: #e8f0f8; color: #000000; border: 2px groove #c0d0d0; padding: 0 1em 0 1em; margin: 0.4em 0 0 0; } h3.var-details { background: transparent; color: #000000; margin: 0 0 1em 0; } /* Function signatures */ .sig { background: transparent; color: #000000; font-weight: bold; font-size: +125%; } .sig-name { background: transparent; color: #006080; } .sig-arg, .sig-kwarg, .sig-vararg { background: transparent; color: #008060; } .sig-default { background: transparent; color: #602000; } .summary-sig { background: transparent; color: #000000; } .summary-sig-name { background: transparent; color: #204080; } .summary-sig-arg, .summary-sig-kwarg, .summary-sig-vararg { background: transparent; color: #008060; } /* Doctest blocks */ .py-src { background: transparent; color: #000000; } .py-prompt { background: transparent; color: #005050; font-weight: bold;} .py-string { background: transparent; color: #006030; } .py-comment { background: transparent; color: #003060; } .py-keyword { background: transparent; color: #600000; } .py-output { background: transparent; color: #404040; } pre.doctest-block { background: #f4faff; color: #000000; padding: .5em; margin: 1em; border: 1px solid #708890; } table pre.doctest-block { background: #dce4ec; color: #000000; padding: .5em; margin: 1em; border: 1px solid #708890; } /* Variable values */ pre.variable { background: #dce4ec; color: #000000; padding: .5em; margin: 0; border: 1px solid #708890; } .variable-linewrap { background: transparent; color: #604000; } .variable-ellipsis { background: transparent; color: #604000; } .variable-quote { background: transparent; color: #604000; } .re { background: transparent; color: #000000; } .re-char { background: transparent; color: #006030; } .re-op { background: transparent; color: #600000; } .re-group { background: transparent; color: #003060; } .re-ref { background: transparent; color: #404040; } /* Navigation bar */ table.navbar { background: #a0c0ff; color: #0000ff; border: 2px groove #c0d0d0; } th.navbar { background: #a0c0ff; color: #0000ff; } th.navselect { background: #70b0ff; color: #000000; } .nomargin { margin: 0; } /* Links */ a:link { background: transparent; color: #0000ff; } a:visited { background: transparent; color: #204080; } a.navbar:link { background: transparent; color: #0000ff; text-decoration: none; } a.navbar:visited { background: transparent; color: #204080; text-decoration: none; } code { font-family: "Lucida Console", "Courier New", Courier, monospace; } pre { font-family: "Lucida Console", "Courier New", Courier, monospace; } .pre { font-family: "Lucida Console", "Courier New", Courier, monospace; } pre.literal-block { margin-left: 1em; }traits-4.5.0/docs/source/000077500000000000000000000000001233213561600152605ustar00rootroot00000000000000traits-4.5.0/docs/source/.static/000077500000000000000000000000001233213561600166255ustar00rootroot00000000000000traits-4.5.0/docs/source/.static/default.css000066400000000000000000000323121233213561600207640ustar00rootroot00000000000000/** * Sphinx Doc Design */ body { font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; font-size: 100%; background-color: #333333; color: #000; margin: 0; padding: 0; } /* :::: LAYOUT :::: */ div.document { background-color: #24326e; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 230px; } div.body { background-color: white; padding: 0 20px 30px 20px; } div.sphinxsidebarwrapper { padding: 10px 5px 0 10px; } div.sphinxsidebar { float: left; width: 230px; margin-left: -100%; font-size: 90%; } p.logo { text-align: center; } div.clearer { clear: both; } div.footer { color: #fff; width: 100%; padding: 9px 0 9px 0; text-align: center; font-size: 75%; } div.footer a { color: #fff; text-decoration: underline; } div.related { background-color: #24326e; color: #fff; width: 100%; height: 30px; line-height: 30px; font-size: 90%; } div.related h3 { display: none; } div.related ul { margin: 0; padding: 0 0 0 10px; list-style: none; } div.related li { display: inline; } div.related li.right { float: right; margin-right: 5px; } div.related a { color: white; } /* ::: TOC :::: */ div.sphinxsidebar h3 { font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; color: #acafb3; font-size: 1.4em; font-weight: normal; margin: 0; padding: 0; } div.sphinxsidebar h4 { font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; color: #acafb3; font-size: 1.3em; font-weight: normal; margin: 5px 0 0 0; padding: 0; } div.sphinxsidebar p { color: white; } div.sphinxsidebar p.topless { margin: 5px 10px 10px 10px; } div.sphinxsidebar ul { margin: 10px; padding: 0; list-style: none; color: white; } div.sphinxsidebar ul ul, div.sphinxsidebar ul.want-points { margin-left: 20px; list-style: square; } div.sphinxsidebar ul ul { margin-top: 0; margin-bottom: 0; } div.sphinxsidebar a { color: #fff; } div.sphinxsidebar form { margin-top: 10px; } div.sphinxsidebar input { border: 1px solid #9bbde2; font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; font-size: 1em; } /* :::: MODULE CLOUD :::: */ div.modulecloud { margin: -5px 10px 5px 10px; padding: 10px; line-height: 160%; border: 1px solid #666666; background-color: #dddddd; } div.modulecloud a { padding: 0 5px 0 5px; } /* :::: SEARCH :::: */ ul.search { margin: 10px 0 0 20px; padding: 0; } ul.search li { padding: 5px 0 5px 20px; background-image: url(file.png); background-repeat: no-repeat; background-position: 0 7px; } ul.search li a { font-weight: bold; } ul.search li div.context { color: #666; margin: 2px 0 0 30px; text-align: left; } ul.keywordmatches li.goodmatch a { font-weight: bold; } /* :::: COMMON FORM STYLES :::: */ div.actions { padding: 5px 10px 5px 10px; border-top: 1px solid #598ec0; border-bottom: 1px solid #598ec0; background-color: #9bbde2; } form dl { color: #333; } form dt { clear: both; float: left; min-width: 110px; margin-right: 10px; padding-top: 2px; } input#homepage { display: none; } div.error { margin: 5px 20px 0 0; padding: 5px; border: 1px solid #db7d46; font-weight: bold; } /* :::: INLINE COMMENTS :::: */ div.inlinecomments { position: absolute; right: 20px; } div.inlinecomments a.bubble { display: block; float: right; background-image: url(style/comment.png); background-repeat: no-repeat; width: 25px; height: 25px; text-align: center; padding-top: 3px; font-size: 0.9em; line-height: 14px; font-weight: bold; color: black; } div.inlinecomments a.bubble span { display: none; } div.inlinecomments a.emptybubble { background-image: url(style/nocomment.png); } div.inlinecomments a.bubble:hover { background-image: url(style/hovercomment.png); text-decoration: none; color: #598ec0; } div.inlinecomments div.comments { float: right; margin: 25px 5px 0 0; max-width: 50em; min-width: 30em; border: 1px solid #598ec0; background-color: #9bbde2; z-index: 150; } div#comments { border: 1px solid #598ec0; margin-top: 20px; } div#comments div.nocomments { padding: 10px; font-weight: bold; } div.inlinecomments div.comments h3, div#comments h3 { margin: 0; padding: 0; background-color: #598ec0; color: white; border: none; padding: 3px; } div.inlinecomments div.comments div.actions { padding: 4px; margin: 0; border-top: none; } div#comments div.comment { margin: 10px; border: 1px solid #598ec0; } div.inlinecomments div.comment h4, div.commentwindow div.comment h4, div#comments div.comment h4 { margin: 10px 0 0 0; background-color: #2eabb0; color: white; border: none; padding: 1px 4px 1px 4px; } div#comments div.comment h4 { margin: 0; } div#comments div.comment h4 a { color: #9bbde2; } div.inlinecomments div.comment div.text, div.commentwindow div.comment div.text, div#comments div.comment div.text { margin: -5px 0 -5px 0; padding: 0 10px 0 10px; } div.inlinecomments div.comment div.meta, div.commentwindow div.comment div.meta, div#comments div.comment div.meta { text-align: right; padding: 2px 10px 2px 0; font-size: 95%; color: #598ec0; border-top: 1px solid #598ec0; background-color: #9bbde2; } div.commentwindow { position: absolute; width: 500px; border: 1px solid #598ec0; background-color: #9bbde2; display: none; z-index: 130; } div.commentwindow h3 { margin: 0; background-color: #598ec0; color: white; border: none; padding: 5px; font-size: 1.5em; cursor: pointer; } div.commentwindow div.actions { margin: 10px -10px 0 -10px; padding: 4px 10px 4px 10px; color: #598ec0; } div.commentwindow div.actions input { border: 1px solid #598ec0; background-color: white; color: #073d61; cursor: pointer; } div.commentwindow div.form { padding: 0 10px 0 10px; } div.commentwindow div.form input, div.commentwindow div.form textarea { border: 1px solid #598ec0; background-color: white; color: black; } div.commentwindow div.error { margin: 10px 5px 10px 5px; background-color: #fff2b0; display: none; } div.commentwindow div.form textarea { width: 99%; } div.commentwindow div.preview { margin: 10px 0 10px 0; background-color: ##9bbde2; padding: 0 1px 1px 25px; } div.commentwindow div.preview h4 { margin: 0 0 -5px -20px; padding: 4px 0 0 4px; color: white; font-size: 1.3em; } div.commentwindow div.preview div.comment { background-color: #f2fbfd; } div.commentwindow div.preview div.comment h4 { margin: 10px 0 0 0!important; padding: 1px 4px 1px 4px!important; font-size: 1.2em; } /* :::: SUGGEST CHANGES :::: */ div#suggest-changes-box input, div#suggest-changes-box textarea { border: 1px solid #666; background-color: white; color: black; } div#suggest-changes-box textarea { width: 99%; height: 400px; } /* :::: PREVIEW :::: */ div.preview { background-image: url(style/preview.png); padding: 0 20px 20px 20px; margin-bottom: 30px; } /* :::: INDEX PAGE :::: */ table.contentstable { width: 90%; } table.contentstable p.biglink { line-height: 150%; } a.biglink { font-size: 1.3em; } span.linkdescr { font-style: italic; padding-top: 5px; font-size: 90%; } /* :::: INDEX STYLES :::: */ table.indextable td { text-align: left; vertical-align: top; } table.indextable dl, table.indextable dd { margin-top: 0; margin-bottom: 0; } table.indextable tr.pcap { height: 10px; } table.indextable tr.cap { margin-top: 10px; background-color: #dddddd; } img.toggler { margin-right: 3px; margin-top: 3px; cursor: pointer; } form.pfform { margin: 10px 0 20px 0; } /* :::: GLOBAL STYLES :::: */ .docwarning { background-color: #fff2b0; padding: 10px; margin: 0 -20px 0 -20px; border-bottom: 1px solid #db7d46; } p.subhead { font-weight: bold; margin-top: 20px; } a { color: #24326e; text-decoration: none; } a:hover { text-decoration: underline; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; background-color: #dddddd; font-weight: normal; color: #073d61; border-bottom: 1px solid #666; margin: 20px -20px 10px -20px; padding: 3px 0 3px 10px; } div.body h1 { margin-top: 0; font-size: 200%; } div.body h2 { font-size: 160%; } div.body h3 { font-size: 140%; } div.body h4 { font-size: 120%; } div.body h5 { font-size: 110%; } div.body h6 { font-size: 100%; } a.headerlink { color: #edaa1e; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; visibility: hidden; } h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink { visibility: visible; } a.headerlink:hover { background-color: #edaa1e; color: white; } div.body p, div.body dd, div.body li { text-align: left; line-height: 130%; } div.body p.caption { text-align: inherit; } div.body td { text-align: left; } ul.fakelist { list-style: none; margin: 10px 0 10px 20px; padding: 0; } .field-list ul { padding-left: 1em; } .first { margin-top: 0 !important; } /* "Footnotes" heading */ p.rubric { margin-top: 30px; font-weight: bold; } /* "Topics" */ div.topic { background-color: #ddd; border: 1px solid #666; padding: 0 7px 0 7px; margin: 10px 0 10px 0; } p.topic-title { font-size: 1.1em; font-weight: bold; margin-top: 10px; } /* Admonitions */ div.admonition { margin-top: 10px; margin-bottom: 10px; padding: 7px; } div.admonition dt { font-weight: bold; } div.admonition dl { margin-bottom: 0; } div.admonition p { display: inline; } div.seealso { background-color: #fff2b0; border: 1px solid #edaa1e; } div.warning { background-color: #fff2b0; border: 1px solid ##db7d46; } div.note { background-color: #eee; border: 1px solid #666; } p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; display: inline; } p.admonition-title:after { content: ":"; } div.body p.centered { text-align: center; margin-top: 25px; } table.docutils { border: 0; } table.docutils td, table.docutils th { padding: 1px 8px 1px 0; border-top: 0; border-left: 0; border-right: 0; border-bottom: 1px solid #a9a6a2; } table.field-list td, table.field-list th { border: 0 !important; } table.footnote td, table.footnote th { border: 0 !important; } .field-list ul { margin: 0; padding-left: 1em; } .field-list p { margin: 0; } dl { margin-bottom: 15px; clear: both; } dd p { margin-top: 0px; } dd ul, dd table { margin-bottom: 10px; } dd { margin-top: 3px; margin-bottom: 10px; margin-left: 30px; } .refcount { color: #24326e; } dt:target, .highlight { background-color: #edaa1e1; } dl.glossary dt { font-weight: bold; font-size: 1.1em; } th { text-align: left; padding-right: 5px; } pre { padding: 5px; background-color: #e6f3ff; color: #333; border: 1px solid #24326e; border-left: none; border-right: none; overflow: auto; } td.linenos pre { padding: 5px 0px; border: 0; background-color: transparent; color: #aaa; } table.highlighttable { margin-left: 0.5em; } table.highlighttable td { padding: 0 0.5em 0 0.5em; } tt { background-color: #ddd; padding: 0 1px 0 1px; font-size: 1.2em; } tt.descname { background-color: transparent; font-weight: bold; font-size: 1.2em; } tt.descclassname { background-color: transparent; } tt.xref, a tt { background-color: transparent; font-weight: bold; } .footnote:target { background-color: #fff2b0 } h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { background-color: transparent; } .optional { font-size: 1.3em; } .versionmodified { font-style: italic; } form.comment { margin: 0; padding: 10px 30px 10px 30px; background-color: #ddd; } form.comment h3 { background-color: #598ec0; color: white; margin: -10px -30px 10px -30px; padding: 5px; font-size: 1.4em; } form.comment input, form.comment textarea { border: 1px solid #ddd; padding: 2px; font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; font-size: 100%; } form.comment input[type="text"] { width: 240px; } form.comment textarea { width: 100%; height: 200px; margin-bottom: 10px; } .system-message { background-color: #edaa1e; padding: 5px; border: 3px solid red; } /* :::: PRINT :::: */ @media print { div.document, div.documentwrapper, div.bodywrapper { margin: 0; width : 100%; } div.sphinxsidebar, div.related, div.footer, div#comments div.new-comment-box, #top-link { display: none; } } traits-4.5.0/docs/source/.static/e-logo-rev.png000066400000000000000000000075111233213561600213130ustar00rootroot00000000000000PNG  IHDRoi*sRGB pHYs  tIMELIDATx]ktT>z\$m ȥ!TD jV|_CWph PT\"B$$6aIf9qfB%= By}; vo`!4ChVv[12 !HGiyg):QVd8SmsQAj2~~AH3qU:?!4[a6SRu ǎ7H'1"_Qq!JbBwx$I-S^QO>AO~( HAPU)=Ojjm+ v$~ئ"33zviJn[*.\v(/E1U`Ycֿ&y3g>=x$;GS@]d1YÓo"۾X6n8o2 ,c_܊U?y" "cdL5HfFj~}Q]H錩/Oxcq'~lӕ_ ţeW\| &cLMhdȶ9-՗ $ Θڳ9i˗>xa6>#E _h2$}앿"a\l߰0/"ޑҦ.*:UQyٕ~`:oYfxu? b)<̜>җ'rYgԾ6ngeSMkm>uv" Snhj ̌ry_ݚLM01@$(]vƏ{_{#&>4l|c.8~rK05bjԈm;14*:Ο3yK|ީT\> 8nd٤B]j맻]8#&[5TEUlu#u\/kk^6t=Zo`Ӌ-,R'*EP1#EQ DfsnlOYYYҨ!${G2yZ~\pN|olӋnϯBu-\$5˘TYgNR^\8gF{@|4Ņ0ov2֊^:j)D"zM En1]WfN@wǛ뿨k B|c!>8T'JԉaZxubOW~;c%dLynظedNSt~WX\f-pO',9UI21`xĥd  ,{ER"Z G 4PLq@$#15! G}\.-2kEfV=G15Q&ph!9Ce Cvj(# 5#GX:InHJZmڞU__(h݆' H7cHκ})"Db-&`i\eU?*YJ05 D S[GabDěrqEʪ9կm"4LwtGTدr{OPۿhj?:}"i b:/7yA@eK#$t13mj51K &^w !%PSSSֆlr{s^#w4DmQI S#3a@57Q; S#:į v4yR+A&P0j/))-&Z4S.[Z2d^!j8J01-j(T!05Q)"jԌ+@vpd"'4LuyC͉cv,@A1i_qLq|s4bvGz!U !KIQD1E3[1vI $00h6FL̙dnu˞?SScw\LGaʃcf-N]y/4u: c c PM18_h>4~h޽f l%&N^>?2=iC)9v!˜j>hN'N~(aİ}Wx+' u0?1sL _/>_nH ! x9zq@bzlLؘO_6Ac6~t=F&מc2\汋rh3.婓Jx`x^_>_mqKkj+-++Y.zw3TU+qܹ~M\_:pBI" D5 JcTubd!P%+~fz*EP]6R2;/uz] g,'Nd=C^n188D,dZ}W/)~ǎ/z~*0P]g*ݐ[{s]b76 $?`[퍘JTDDKŽ t "((}qqwZΦO11fZ XSXk71E~;{GbN#"k" r@4˗mrN"srLڀ?Vh?݁nw'?0l۶`bF4]2UU ;llgL bkx'ۄ&%QU#c*B{awE|DǶBhZ-f/wIENDB`traits-4.5.0/docs/source/.static/et.ico000066400000000000000000000236261233213561600177420ustar00rootroot00000000000000(f 00hvh F00( r5(H73iKD]ZZzols$jV4{H5Fg@Hg @' 9c]sE{c@Ec{bFQEPkG\ 1}m( @_-!p3%7)&[B<]VU~okWU#XW$iU$zu5{j6Yv1GWw"X f$I qJ QJ[JډJc4jJ5{J 1FJ qGI Q#W6 Q$j#XA${#h1IQ$j1< s4{A a5S Q}A\1J7|xp``?`8(0`W,"4(%p3%v>1IGF~QFja_~wtdFwG܆ h즋" ij""!zi"""!g""""ۆ"""""F얋""""""Gzޥ""""""Hi """"" ih s"""""  c"""""! R""""!|2"""!|{2""!|2"1"!5 y@y`"!""" 2""""G s"""""H b"""" i R""""!yR""""!qh2""""0i2""""GR"!z"""""hr"""r"""" """""FB""""#93"""""GB"""""62"""""hp"""""%""""" ht"""""#|"""""!"""""k """""""""""Y s"""""""""8 b"""""""&R"""""%2"""#|2"#k"Y?????( f-t1!j/#i1$n3$j2&r4&s4&s5&u5&]0'`1'^2'u5'v5'v6'x6';+(X2(_2(r4(u6(w7(x7(z7(y8(z8({8(P0)s7)z8){8)|9):*c5,i9-A1.R4.E3/W7/u=1x?2A97>;:{F:F?>{I>mH?DBAMDB~ODJHHOMLhSOQPPPQQSRRUTTaW\YXx_[c[]]]^^^b_^___dddpghhhmhkjijjjrksmnnnrpopppsssuttwwwyyy~{}}}t@4LhO\b$8PraKx_ *?VNdcpI 0M}Wfm:1n{|wFvu2!5yziAUSyxj?]GRryxj>E-BYyzk7l`, %3Jg~Z+DaT)9hzC&6Ooe" [q. *>;'#QX( <H/s=^( @m,6#>%D&K'O(R)P) Y+ q0!2%"`."8'#g1#4($l2%p3%q3%q4%0'&a0&r4&t5&u5&v5&e2'p4't4't5'u5'u6'v6'w6'x6'/)(r6(v6(x7(Y3)z8)v8*l6+2--m:-v;-w>1543Q93v@3lA7vC8;:9wF:><;N?<VA=?>>@??zK@AAAoJAFFF~SHbNIKKKnQKLLLrTMONNPNNZPQQQSRRVVUdXVXWWaWaX[ZZwa\d_^e^i_```iabbbedceedhhhphqh}mipijjjlkkplrlwmoooqpopppxqwrsssyvuwwwyyy{{}}}~~~ŻjjybO =iٙWa"HuihZ!.SWZ% 9bݫXxaBmnczq2 !*NwܐVr-% 3]wt\#%XzF' Dz:  EIv- N}I`')uHYH޾Hn65S|HJ' 9dH<%"DpHs0!.SDe(! ;g9pQ("GuM8b> .Uo0@m~1% KL  *Nwג7%%?4%% 3XжP& +_l,$ =g^/#AT($ ! 1>  )[4 #Ck,1{R(%+_f|xp``?`8(0`<5"=$H&/"S)m-*" -# X+ s0!b."o1"+%#h0#+%$l2$u3$p3%q3%q4%r4%+&&8)&V.&g2&r4&t4&t5&u5&.('O/'t5'u5'v5'u6'v6'q6(v7(y7(o7)}9),+*V2*g4*x9*:.,x;,/..70.C2.z=/211u=1l=2z@3666X?9:::}E:><<PB>~I>AAALAlKCODEEERFIIIUIUJKKK`OKMMMZPRRR\TS^TUUU_WaWYYYs_Zt`[`^^__^g_a``bbaccceeeofhggiiillksknmmpppxptsruuuxvxxxyyy}{y}z{{{|}}}~}~¿ȏՎV)IzEl~zEzEtgzE{=?bzEM+$0LqzE9!$ 8YzE5$CdzEc/$0LtzEW$$ :ZzEG$!Ce|?>$$0Ovo*R}u7$:Zc5 ?ac&!CeD $*JmN$$0R\%$ 4Rxf,! .eF <]v=)6u7!$EeږM'#(Tc-#0Ot׽a+ !AQ$# 8Yvh=$$6jB$ 1!!%Ty7!!!"A`&$6jQ&"%T@$Ay7!$6j`&!%SQ'$A?????traits-4.5.0/docs/source/.templates/000077500000000000000000000000001233213561600173345ustar00rootroot00000000000000traits-4.5.0/docs/source/.templates/layout.html000066400000000000000000000003631233213561600215410ustar00rootroot00000000000000{# Filename: .templates/layout.html #} {% extends '!layout.html' %} {% block relbaritems %} {% if current_page_name != 'index' %}

  • {{ title }}
  • {% endif %} {% endblock %} traits-4.5.0/docs/source/.templates/search.html000066400000000000000000000017451233213561600214760ustar00rootroot00000000000000{% extends "!search.html" %} {% block body %}

    Search

    Enter your search words into the box below and click search. Note that the search function automatically searches for all of the words. Pages containing some but not all of them won't appear in the result list.

    {% if search_performed %}

    Search Results

    {% if not search_results %}

    Your search did not match any results.

    {% endif %} {% endif %}
    {% if search_results %}
      {% for href, caption, context in search_results %}
    • {{ caption }}
      {{ context|e }}
    • {% endfor %}
    {% endif %}
    {% endblock %} traits-4.5.0/docs/source/_extensions/000077500000000000000000000000001233213561600176165ustar00rootroot00000000000000traits-4.5.0/docs/source/_extensions/__init__.py000066400000000000000000000000001233213561600217150ustar00rootroot00000000000000traits-4.5.0/docs/source/_extensions/refactordoc/000077500000000000000000000000001233213561600221115ustar00rootroot00000000000000traits-4.5.0/docs/source/_extensions/refactordoc/LICENSE.txt000066400000000000000000000031201233213561600237300ustar00rootroot00000000000000This software is OSI Certified Open Source Software. OSI Certified is a certification mark of the Open Source Initiative. Copyright (c) 2006, Enthought, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Enthought, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. traits-4.5.0/docs/source/_extensions/refactordoc/__init__.py000066400000000000000000000016621233213561600242270ustar00rootroot00000000000000#------------------------------------------------------------------------------ # file: refactor_doc.py # License: LICENSE.TXT # # Copyright (c) 2011, Enthought, Inc. # All rights reserved. #------------------------------------------------------------------------------ from .function_doc import FunctionDoc from .class_doc import ClassDoc #------------------------------------------------------------------------------ # Extension definition #------------------------------------------------------------------------------ def refactor_docstring(app, what, name, obj, options, lines): refactor = None if ('class' in what): refactor = ClassDoc(lines) elif ('function' in what) or ('method' in what): refactor = FunctionDoc(lines) if refactor is not None: refactor.parse() def setup(app): app.setup_extension('sphinx.ext.autodoc') app.connect('autodoc-process-docstring', refactor_docstring) traits-4.5.0/docs/source/_extensions/refactordoc/base_doc.py000066400000000000000000000274261233213561600242350ustar00rootroot00000000000000# -*- coding: utf-8 -*- #------------------------------------------------------------------------------ # file: base_doc.py # License: LICENSE.TXT # # Copyright (c) 2011, Enthought, Inc. # All rights reserved. #------------------------------------------------------------------------------ import re from definition_items import DefinitionItem from line_functions import is_empty, get_indent, fix_backspace, NEW_LINE underline_regex = re.compile(r'\s*\S+\s*\Z') #------------------------------------------------------------------------------ # Classes #------------------------------------------------------------------------------ class BaseDoc(object): """Base abstract docstring refactoring class. The class' main purpose is to parse the dosctring and find the sections that need to be refactored. Subclasses should provide the methods responsible for refactoring the sections. Attributes ---------- docstring : list A list of strings (lines) that holds docstrings index : int The current zero-based line number of the docstring that is currently proccessed. headers : dict The sections that the class refactors. Each entry in the dictionary should have as key the name of the section in the form that it appears in the docstrings. The value should be the postfix of the method, in the subclasses, that is responsible for refactoring (e.g. {'Methods': 'method'}). BaseDoc also provides a number of methods that operate on the docstring to help with the refactoring. This is neccessary because the docstring has to change inplace and thus it is better to live the docstring manipulation to the class methods instead of accessing the lines directly. """ def __init__(self, lines, headers=None): """ Initialize the class The method setups the class attributes and starts parsing the docstring to find and refactor the sections. Arguments --------- lines : list of strings The docstring to refactor headers : dict The sections for which the class has custom refactor methods. Each entry in the dictionary should have as key the name of the section in the form that it appears in the docstrings. The value should be the postfix of the method, in the subclasses, that is responsible for refactoring (e.g. {'Methods': 'method'}). """ try: self._docstring = lines.splitlines() except AttributeError: self._docstring = lines self.headers = {} if headers is None else headers self.bookmarks = [] def parse(self): """ Parse the docstring. The docstring is parsed for sections. If a section is found then the corresponding refactoring method is called. """ self.index = 0 self.seek_to_next_non_empty_line() while not self.eod: header = self.is_section() if header: self._refactor(header) else: self.index += 1 self.seek_to_next_non_empty_line() def _refactor(self, header): """Call the heading refactor method. The header is removed from the docstring and the docstring refactoring is dispatched to the appropriate refactoring method. The name of the refctoring method is constructed using the form _refactor_
    . Where
    is the value corresponding to ``self.headers[header]``. If there is no custom method for the section then the self._refactor_header() is called with the found header name as input. """ self.remove_lines(self.index, 2) # Remove header self.remove_if_empty(self.index) # Remove space after header refactor_postfix = self.headers.get(header, 'header') method_name = ''.join(('_refactor_', refactor_postfix)) method = getattr(self, method_name) lines = method(header) self.insert_and_move(lines, self.index) def _refactor_header(self, header): """ Refactor the header section using the rubric directive. The method has been tested and supports refactoring single word headers, two word headers and headers that include a backslash ''\''. Arguments --------- header : string The header string to use with the rubric directive. """ header = fix_backspace(header) directive = '.. rubric:: {0}'.format(header) lines = [] lines += [directive, NEW_LINE] return lines def extract_items(self, item_class=None): """ Extract the definition items from a docstring. Parse the items in the description of a section into items of the provided class time. Given a DefinitionItem or a subclass defined by the ``item_class`` parameter. Staring from the current index position, the method checks if in the next two lines a valid header exists. If successful, then the lines that belong to the item description block (i.e. header + definition) are poped put from the docstring and passed to the ``item_class`` parser and create an instance of ``item_class``. The process is repeated until there is no compatible ``item_class`` found or we run out of docstring. Then the method returns a list of item_class instances. The exit conditions allow for two valid section item layouts: 1. No lines between items:: 2. One line between items:: Arguments --------- item_class : DefinitionItem A DefinitionItem or a subclass. This argument is used to check if a line in the docstring is a valid item and to parse the individual list items in the section. When ``None`` (default) the base DefinitionItem class is used. Returns ------- parameters : list List of the parsed item instances of ``item_class`` type. """ item_type = DefinitionItem if (item_class is None) else item_class is_item = item_type.is_definition item_blocks = [] while (not self.eod) and \ (is_item(self.peek()) or is_item(self.peek(1))): self.remove_if_empty(self.index) item_blocks.append(self.get_next_block()) items = [item_type.parse(block) for block in item_blocks] return items def get_next_block(self): """ Get the next item block from the docstring. The method reads the next item block in the docstring. The first line is assumed to be the DefinitionItem header and the following lines to belong to the definition::
    The end of the field is designated by a line with the same indent as the field header or two empty lines are found in sequence. """ item_header = self.pop() sub_indent = get_indent(item_header) + ' ' block = [item_header] while (not self.eod): peek_0 = self.peek() peek_1 = self.peek(1) if (is_empty(peek_0) and (not peek_1.startswith(sub_indent))) \ or ((not is_empty(peek_0)) \ and (not peek_0.startswith(sub_indent))): break else: line = self.pop() block += [line.rstrip()] return block def is_section(self): """ Check if the current line defines a section. .. todo:: split and cleanup this method. """ if self.eod: return False header = self.peek() line2 = self.peek(1) # check for underline type format underline = underline_regex.match(line2) if underline is None: return False # is the nextline an rst underline? striped_header = header.rstrip() expected_underline1 = re.sub(r'[A-Za-z\\]|\b\s', '-', striped_header) expected_underline2 = re.sub(r'[A-Za-z\\]|\b\s', '=', striped_header) if ((underline.group().rstrip() == expected_underline1) or (underline.group().rstrip() == expected_underline2)): return header.strip() else: return False def insert_lines(self, lines, index): """ Insert refactored lines Arguments --------- new_lines : list The list of lines to insert index : int Index to start the insertion """ docstring = self.docstring for line in reversed(lines): docstring.insert(index, line) def insert_and_move(self, lines, index): """ Insert refactored lines and move current index to the end. """ self.insert_lines(lines, index) self.index += len(lines) def seek_to_next_non_empty_line(self): """ Goto the next non_empty line. """ docstring = self.docstring for line in docstring[self.index:]: if not is_empty(line): break self.index += 1 def get_next_paragraph(self): """ Get the next paragraph designated by an empty line. """ lines = [] while (not self.eod) and (not is_empty(self.peek())): line = self.pop() lines.append(line) return lines def read(self): """ Return the next line and advance the index. """ index = self.index line = self._docstring[index] self.index += 1 return line def remove_lines(self, index, count=1): """ Removes the lines from the docstring """ docstring = self.docstring del docstring[index:(index + count)] def remove_if_empty(self, index=None): """ Remove the line from the docstring if it is empty. """ if is_empty(self.docstring[index]): self.remove_lines(index) def bookmark(self): """ append the current index to the end of the list of bookmarks. """ self.bookmarks.append(self.index) def goto_bookmark(self, bookmark_index=-1): """ Move to bookmark. Move the current index to the docstring line given my the ``self.bookmarks[bookmark_index]`` and remove it fromn the bookmark list. Default value will pop the last entry. Returns ------- bookmark : int """ self.index = self.bookmarks[bookmark_index] return self.bookmarks.pop(bookmark_index) def peek(self, ahead=0): """ Peek ahead a number of lines The function retrieves the line that is ahead of the current index. If the index is at the end of the list then it returns an empty string. Arguments --------- ahead : int The number of lines to look ahead. """ position = self.index + ahead try: line = self.docstring[position] except IndexError: line = '' return line def pop(self, index=None): """ Pop a line from the dostrings. """ index = self.index if (index is None) else index return self._docstring.pop(index) @property def eod(self): """ End of docstring. """ return self.index >= len(self.docstring) @property def docstring(self): """ Get the docstring lines. """ return self._docstring traits-4.5.0/docs/source/_extensions/refactordoc/class_doc.py000066400000000000000000000120061233213561600244140ustar00rootroot00000000000000# -*- coding: UTF-8 -*- #------------------------------------------------------------------------------ # file: class_doc.py # License: LICENSE.TXT # # Copyright (c) 2011, Enthought, Inc. # All rights reserved. #------------------------------------------------------------------------------ from base_doc import BaseDoc from line_functions import get_indent, replace_at, add_indent from definition_items import (MethodItem, AttributeItem, TableLineItem, max_attribute_length, max_attribute_index, ListItem) class ClassDoc(BaseDoc): """ Docstring refactoring for classes. The class provides the following refactoring methods. Methods ------- _refactor_attributes(self, header) : Refactor the attributes section to sphinx friendly format. _refactor_methods(self, header) : Refactor the methods section to sphinx friendly format. _refactor_as_items_list(self, header) : Refactor the Keywords section to sphinx friendly format. _refactor_notes(self, header) : Refactor the note section to use the rst ``.. note`` directive. _refactor_example(self, header) : Refactor the example section to sphinx friendly format. """ def __init__(self, lines, headers=None): if headers is None: headers = {'Attributes': 'attributes', 'Methods': 'methods', 'Notes': 'notes', 'Keywords': 'as_item_list', 'Note': 'notes', 'Example': 'example', 'Examples': 'example'} super(ClassDoc, self).__init__(lines, headers) return def _refactor_attributes(self, header): """Refactor the attributes section to sphinx friendly format""" items = self.extract_items(AttributeItem) lines = [] for item in items: lines += item.to_rst() return lines def _refactor_methods(self, header): """Refactor the methods section to sphinx friendly format. """ items = self.extract_items(MethodItem) lines = [] if len(items) > 0 : columns = self._get_column_lengths(items) border = '{0:=^{1}} {0:=^{2}}'.format('', columns[0], columns[1]) heading = '{0:<{2}} {1:<{3}}'.format('Method', 'Description', columns[0], columns[1]) lines += [border] lines += [heading] lines += [border] for items in items: lines += items.to_rst(columns) lines += [border] lines += [''] lines = [line.rstrip() for line in lines] return lines def _refactor_notes(self, header): """Refactor the note section to use the rst ``.. note`` directive. """ paragraph = self.get_next_paragraph() lines = ['.. note::'] lines += add_indent(paragraph) return lines def _refactor_as_item_list(self, header): """ Refactor the a section to sphinx friendly item list. Arguments --------- header : str The header name that is used for the fields (i.e. ``:
    :``). """ items = self.extract_items(item_class=ListItem) lines = [':{0}:'.format(header.lower()), ''] prefix = None if len(items) == 1 else '-' for item in items: lines += add_indent(item.to_rst(prefix)) return lines def _refactor_example(self, header) : """ Refactor the example section to sphinx friendly format. Arguments --------- header : str The header name that is used for the fields (i.e. ``:
    :``). """ paragraph = self.get_next_paragraph() lines = ['.. rubric:: {0}'.format(header), '', '::', ''] lines += add_indent(paragraph) return lines def _get_column_lengths(self, items): """ Helper function to estimate the column widths for the refactoring of the ``Methods`` section. The method finds the index of the item that has the largest function name (i.e. self.term) and the largest signature. If the indexes are not the same then checks to see which of the two items have the largest string sum (i.e. self.term + self.signature). """ name_index = max_attribute_index(items, 'term') signature_index = max_attribute_index(items, 'signature') if signature_index != name_index: index = signature_index item1_width = len(items[index].term + items[index].signature) index = name_index item2_width = len(items[index].term + items[index].signature) first_column = max(item1_width, item2_width) else: index = name_index first_column = len(items[index].term + items[index].signature) first_column += 11 # Add boilerplate characters second_column = max_attribute_length(items, 'definition') return (first_column, second_column) traits-4.5.0/docs/source/_extensions/refactordoc/definition_items.py000066400000000000000000000410131233213561600260130ustar00rootroot00000000000000# -*- coding: utf-8 -*- #----------------------------------------------------------------------------- # file: fields.py # License: LICENSE.TXT # Author: Ioannis Tziakos # # Copyright (c) 2011, Enthought, Inc. # All rights reserved. #----------------------------------------------------------------------------- import collections import re from line_functions import (add_indent, fix_star, trim_indent, NEW_LINE, fix_trailing_underscore) header_regex = re.compile(r'\s:\s?') definition_regex = re.compile(r""" \*{0,2} # no, one or two stars \w+\s: # a word followed by a space and a semicolumn (.+)? # a definition $ # match at the end of the line """, re.VERBOSE) function_regex = re.compile(r'\w+\(.*\)\s*') signature_regex = re.compile('\((.*)\)') class DefinitionItem(collections.namedtuple( 'DefinitionItem', ('term', 'classifier', 'definition'))): """ A docstring definition item Syntax diagram:: +-------------------------------------------------+ | term [ " : " classifier [ " or " classifier] ] | +--+----------------------------------------------+---+ | definition | | (body elements)+ | +--------------------------------------------------+ The Definition class is based on the nametuple class and is responsible to check, parse and refactor a docstring definition item into sphinx friendly rst. Attributes ---------- term : str The term usually reflects the name of a parameter or an attribute. classifier: str The classifier of the definition. Commonly used to reflect the type of an argument or the signature of a function. .. note:: Currently only one classifier is supported. definition : list The list of strings that holds the description the definition item. .. note:: A Definition item is based on the item of a section definition list as it defined in restructured text (_http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#sections). """ @classmethod def is_definition(cls, line): """ Check if the line is describing a definition item. The method is used to check that a line is following the expected format for the term and classifier attributes. The expected format is:: +-------------------------------------------------+ | term [ " : " classifier [ " or " classifier] ] | +-------------------------------------------------+ Subclasses can subclass to restrict or expand this format. """ return definition_regex.match(line) is not None @classmethod def parse(cls, lines): """Parse a definition item from a set of lines. The class method parses the definition list item from the list of docstring lines and produces a DefinitionItem with the term, classifier and the definition. .. note:: The global indention in the definition lines is striped The term definition is assumed to be in one of the following formats:: term Definition. :: term Definition, paragraph 1. Definition, paragraph 2. :: term : classifier Definition. Arguments --------- lines docstring lines of the definition without any empty lines before or after. Returns ------- definition : DefinitionItem """ header = lines[0].strip() term, classifier = header_regex.split(header, maxsplit=1) if \ (' :' in header) else (header, '') trimed_lines = trim_indent(lines[1:]) if (len(lines) > 1) else [''] definition = [line.rstrip() for line in trimed_lines] return cls(term.strip(), classifier.strip(), definition) def to_rst(self, **kwards): """ Outputs the Definition in sphinx friendly rst. The method renders the definition into a list of lines that follow the rst markup. The default behaviour is to render the definition as an sphinx definition item:: () -- Subclasses will usually override the method to provide custom made behaviour. However the signature of the method should hold only keyword arguments which have default values. The keyword arguments can be used to pass addition rendering information to subclasses. Returns ------- lines : list A list of string lines rendered in rst. Example ------- :: >>> item = DefinitionItem('lines', 'list', ['A list of string lines rendered in rst.']) >>> item.to_rst() lines *(list)* -- A list of string lines rendered in rst. .. note:: An empty line is added at the end of the list of strings so that the results can be concatenated directly and rendered properly by sphinx. """ postfix = ' --' if (len(self.definition) > 0) else '' lines = [] lines += [self.term] lines += [NEW_LINE] lines += [' *({0})*{1}'.format(self.classifier, postfix)] lines += add_indent(self.definition) # definition is all ready a list lines += [NEW_LINE] return lines class AttributeItem(DefinitionItem): """ Definition that renders the rst output using the attribute directive. """ _normal = (".. attribute:: {0}\n" " :annotation: = {1}\n" "\n" "{2}\n\n") _no_definition = (".. attribute:: {0}\n" " :annotation: = {1}\n\n") _no_classifier = (".. attribute:: {0}\n\n" "{2}\n\n") _only_term = ".. attribute:: {0}\n\n" def to_rst(self, ): """ Return the attribute info using the attribute sphinx markup. Examples -------- :: >>> item = AttributeItem('indent', 'int', ... ['The indent to use for the description block.']) >>> item.to_rst() .. attribute:: indent :annotation: = int The indent to use for the description block >>> :: >>> item = AttributeItem('indent', '', ... ['The indent to use for the description block.']) >>> item.to_rst() .. attribute:: indent The indent to use for the description block >>> .. note:: An empty line is added at the end of the list of strings so that the results can be concatenated directly and rendered properly by sphinx. """ definition = '\n'.join(add_indent(self.definition)) template = self.template.format(self.term, self.classifier, definition) return template.splitlines() @property def template(self): if self.classifier == '' and self.definition == ['']: template = self._only_term elif self.classifier == '': template = self._no_classifier elif self.definition == ['']: template = self._no_definition else: template = self._normal return template class ArgumentItem(DefinitionItem): """ A definition item for function argument sections. """ _normal = (":param {0}:\n" "{2}\n" ":type {0}: {1}") _no_definition = (":param {0}:\n" ":type {0}: {1}") _no_classifier = (":param {0}:\n" "{2}") _only_term = ":param {0}:" def to_rst(self): """ Render ArgumentItem in sphinx friendly rst using the ``:param:`` role. Example ------- :: >>> item = ArgumentItem('indent', 'int', ... ['The indent to use for the description block.', '' 'This is the second paragraph of the argument definition.']) >>> item.to_rst() :param indent: The indent to use for the description block. This is the second paragraph of the argument definition. :type indent: int .. note:: There is no new line added at the last line of the :meth:`to_rst` method. """ argument = fix_star(self.term) argument = fix_trailing_underscore(argument) argument_type = self.classifier definition = '\n'.join(add_indent(self.definition)) template = self.template.format(argument, argument_type, definition) return template.splitlines() @property def template(self): if self.classifier == '' and self.definition == ['']: template = self._only_term elif self.classifier == '': template = self._no_classifier elif self.definition == ['']: template = self._no_definition else: template = self._normal return template class ListItem(DefinitionItem): """ A definition item that is rendered as an ordered/unordered list """ _normal = ("**{0}** (*{1}*) --\n" "{2}\n\n") _only_term = "**{0}**\n\n" _no_definition = "**{0}** (*{1}*)\n\n" _no_classifier = ("**{0}** --\n" "{2}\n\n") def to_rst(self, prefix=None): """ Outputs ListItem in rst using as items in an list. Arguments --------- prefix : str The prefix to use. For example if the item is part of a numbered list then ``prefix='-'``. Example ------- >>> item = ListItem('indent', 'int', ... ['The indent to use for the description block.']) >>> item.to_rst(prefix='-') - **indent** (`int`) -- The indent to use for the description block. >>> item = ListItem('indent', 'int', ... ['The indent to use for' 'the description block.']) >>> item.to_rst(prefix='-') - **indent** (`int`) -- The indent to use for the description block. .. note:: An empty line is added at the end of the list of strings so that the results can be concatenated directly and rendered properly by sphinx. """ indent = 0 if (prefix is None) else len(prefix) + 1 definition = '\n'.join(add_indent(self.definition, indent)) template = self.template.format(self.term, self.classifier, definition) if prefix is not None: template = prefix + ' ' + template return template.splitlines() @property def template(self): if self.classifier == '' and self.definition == ['']: template = self._only_term elif self.classifier == '': template = self._no_classifier elif self.definition == ['']: template = self._no_definition else: template = self._normal return template class TableLineItem(DefinitionItem): """ A Definition Item that represents a table line. """ def to_rst(self, columns=(0, 0, 0)): """ Outputs definition in rst as a line in a table. Arguments --------- columns : tuple The three item tuple of column widths for the term, classifier and definition fields of the TableLineItem. When the column width is 0 then the field .. note:: - The strings attributes are clipped to the column width. Example ------- >>> item = TableLineItem('function(arg1, arg2)', '', ... ['This is the best function ever.']) >>> item.to_rst(columns=(22, 0, 20)) function(arg1, arg2) This is the best fun """ definition = ' '.join([line.strip() for line in self.definition]) term = self.term[:columns[0]] classifier = self.classifier[:columns[1]] definition = definition[:columns[2]] first_column = '' if columns[0] == 0 else '{0:<{first}} ' second_column = '' if columns[1] == 0 else '{1:<{second}} ' third_column = '' if columns[2] == 0 else '{2:<{third}}' table_line = ''.join((first_column, second_column, third_column)) lines = [] lines += [table_line.format(term, classifier, definition, first=columns[0], second=columns[1], third=columns[2])] lines += [''] return lines class MethodItem(DefinitionItem): """ A TableLineItem subclass to parse and render class methods. """ @classmethod def is_definition(cls, line): """ Check if the definition header is a function signature. """ match = function_regex.match(line) return match @classmethod def parse(cls, lines): """Parse a method definition item from a set of lines. The class method parses the method signature and definition from the list of docstring lines and produces a MethodItem where the term is the method name and the classifier is arguments .. note:: The global indention in the definition lines is striped The method definition item is assumed to be as follows:: +------------------------------+ | term "(" [ classifier ] ")" | +--+---------------------------+---+ | definition | | (body elements)+ | +--------------------- ---------+ Arguments --------- lines : docstring lines of the method definition item without any empty lines before or after. Returns ------- definition : MethodItem """ header = lines[0].strip() term, classifier, _ = signature_regex.split(header) definition = trim_indent(lines[1:]) if (len(lines) > 1) else [''] return cls(term, classifier, definition) def to_rst(self, columns=(0, 0)): """ Outputs definition in rst as a line in a table. Arguments --------- columns : tuple The two item tuple of column widths for the :meth: role column and the definition (i.e. summary) of the MethodItem .. note:: The strings attributes are clipped to the column width. Example ------- :: >>> item = MethodItem('function', 'arg1, arg2', ... ['This is the best function ever.']) >>> item.to_rst(columns=(40, 20)) :meth:`function ` This is the best fun """ definition = ' '.join([line.strip() for line in self.definition]) method_role = ':meth:`{0}({1}) <{0}>`'.format(self.term, self.classifier) table_line = '{0:<{first}} {1:<{second}}' lines = [] lines += [table_line.format(method_role[:columns[0]], definition[:columns[1]], first=columns[0], second=columns[1])] return lines @property def signature(self): return '{}({})'.format(self.term, self.classifier) #------------------------------------------------------------------------------ # Functions to work with Definition Items #------------------------------------------------------------------------------ def max_attribute_length(items, attr): """ Find the max length of the attribute in a list of DefinitionItems. Arguments --------- items : list The list of the DefinitionItem instances (or subclasses). attr : str Attribute to look at. """ if attr == 'definition': maximum = max([len(' '.join(item.definition)) for item in items]) else: maximum = max([len(getattr(item, attr)) for item in items]) return maximum def max_attribute_index(items, attr): """ Find the index of the attribute with the maximum length in a list of DefinitionItems. Arguments --------- items : list The list of the DefinitionItems (or subclasses). attr : str Attribute to look at. """ if attr == 'definition': attributes = [len(' '.join(item.definition)) for item in items] else: attributes = [len(getattr(item, attr)) for item in items] maximum = max(attributes) return attributes.index(maximum) traits-4.5.0/docs/source/_extensions/refactordoc/function_doc.py000066400000000000000000000054231233213561600251410ustar00rootroot00000000000000# -*- coding: UTF-8 -*- #------------------------------------------------------------------------------ # file: function_doc.py # License: LICENSE.TXT # Author: Ioannis Tziakos # # Copyright (c) 2011, Enthought, Inc. # All rights reserved. #------------------------------------------------------------------------------ from base_doc import BaseDoc from line_functions import get_indent, add_indent from definition_items import ArgumentItem, ListItem class FunctionDoc(BaseDoc): """Docstring refactoring for functions The class provides the following refactoring methods. Methods ------- _refactor_arguments(self, header) : Refactor the Arguments and Parameters section to sphinx friendly format. _refactor_as_items_list(self, header) : Refactor the Returns, Raises and Yields sections to sphinx friendly format. _refactor_notes(self, header) : Refactor the note section to use the rst ``.. note`` directive. """ def __init__(self, lines, headers=None): if headers is None: headers = {'Returns': 'as_item_list', 'Arguments': 'arguments', 'Parameters': 'arguments', 'Raises': 'as_item_list', 'Yields': 'as_item_list', 'Notes':'notes', 'Note': 'notes'} super(FunctionDoc, self).__init__(lines, headers) return def _refactor_as_item_list(self, header): """ Refactor the a section to sphinx friendly item list. Arguments --------- header : str The header name that is used for the fields (i.e. ``:
    :``). """ items = self.extract_items(item_class=ListItem) lines = [':{0}:'.format(header.lower())] if len(items) > 0: prefix = None if len(items) == 1 else '-' for item in items: lines += add_indent(item.to_rst(prefix)) else: paragraph = self.get_next_paragraph() lines += add_indent(paragraph) return lines def _refactor_arguments(self, header): """ Refactor the argument section to sphinx friendly format. Arguments --------- header : unused This parameter is ingnored in thi method. """ items = self.extract_items(item_class=ArgumentItem) lines = [] for item in items: lines += item.to_rst() return lines def _refactor_notes(self, header): """ Refactor the notes section to sphinx friendly format. Arguments --------- header : unused This parameter is ingnored in this method. """ paragraph = self.get_next_paragraph() lines = ['.. note::'] lines += add_indent(paragraph) return lines traits-4.5.0/docs/source/_extensions/refactordoc/line_functions.py000066400000000000000000000075001233213561600255040ustar00rootroot00000000000000# -*- coding: utf-8 -*- #----------------------------------------------------------------------------- # file: line_functions.py # License: LICENSE.TXT # Author: Ioannis Tziakos # # Copyright (c) 2011, Enthought, Inc. # All rights reserved. #----------------------------------------------------------------------------- import re #----------------------------------------------------------------------------- # Pre-compiled regexes #----------------------------------------------------------------------------- indent_regex = re.compile(r'\s+') #----------------------------------------------------------------------------- # Constants #----------------------------------------------------------------------------- NEW_LINE = '' #------------------------------------------------------------------------------ # Functions to manage indentation #------------------------------------------------------------------------------ def add_indent(lines, indent=4): """ Add spaces to indent a list of lines. Arguments --------- lines : list The list of strings to indent. indent : int The number of spaces to add. Returns ------- lines : list The indented strings (lines). Notes ----- Empty strings are not changed. """ indent_str = ' ' * indent if indent != 0 else '' output = [] for line in lines: if is_empty(line): output.append(line) else: output.append(indent_str + line) return output def remove_indent(lines): """ Remove all indentation from the lines. Returns ------- result : list A new list of left striped strings. """ return [line.lstrip() for line in lines] def trim_indent(lines): """ Trim global indentation level from lines. """ non_empty_lines = filter(lambda x: not is_empty(x), lines) indent = set(len(get_indent(line)) for line in non_empty_lines) indent.discard(0) global_indent = min(indent) return [line[global_indent:] for line in lines] def get_indent(line): """ Return the indent portion of the line. """ indent = indent_regex.match(line) if indent is None: return '' else: return indent.group() #------------------------------------------------------------------------------ # Functions to detect line type #------------------------------------------------------------------------------ def is_empty(line): return not line.strip() #------------------------------------------------------------------------------ # Functions to adjust strings #------------------------------------------------------------------------------ def fix_star(word): """ Replace ``*`` with ``\*`` so that is will be parse properly by docutils. """ return word.replace('*', '\*') def fix_backspace(word): """ Replace ``\\`` with ``\\\\`` so that it will printed properly in the documentation. """ return word.replace('\\', '\\\\') def fix_trailing_underscore(word): """ Replace the trailing ``_`` with ``\\_`` so that it will printed properly in the documentation. """ if word.endswith('_'): word = word.replace('_', '\_') return word def replace_at(word, line, index): """ Replace the text in-line. The text in line is replaced (not inserted) with the word. The replacement starts at the provided index. The result is cliped to the input length Arguments --------- word : str The text to copy into the line. line : str The line where the copy takes place. index : int The index to start coping. Returns ------- result : str line of text with the text replaced. """ word_length = len(word) result = line[:index] + word + line[(index + word_length):] return result[:len(line)] traits-4.5.0/docs/source/_static/000077500000000000000000000000001233213561600167065ustar00rootroot00000000000000traits-4.5.0/docs/source/_static/default.css000066400000000000000000000323121233213561600210450ustar00rootroot00000000000000/** * Sphinx Doc Design */ body { font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; font-size: 100%; background-color: #333333; color: #000; margin: 0; padding: 0; } /* :::: LAYOUT :::: */ div.document { background-color: #24326e; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 230px; } div.body { background-color: white; padding: 0 20px 30px 20px; } div.sphinxsidebarwrapper { padding: 10px 5px 0 10px; } div.sphinxsidebar { float: left; width: 230px; margin-left: -100%; font-size: 90%; } p.logo { text-align: center; } div.clearer { clear: both; } div.footer { color: #fff; width: 100%; padding: 9px 0 9px 0; text-align: center; font-size: 75%; } div.footer a { color: #fff; text-decoration: underline; } div.related { background-color: #24326e; color: #fff; width: 100%; height: 30px; line-height: 30px; font-size: 90%; } div.related h3 { display: none; } div.related ul { margin: 0; padding: 0 0 0 10px; list-style: none; } div.related li { display: inline; } div.related li.right { float: right; margin-right: 5px; } div.related a { color: white; } /* ::: TOC :::: */ div.sphinxsidebar h3 { font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; color: #acafb3; font-size: 1.4em; font-weight: normal; margin: 0; padding: 0; } div.sphinxsidebar h4 { font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; color: #acafb3; font-size: 1.3em; font-weight: normal; margin: 5px 0 0 0; padding: 0; } div.sphinxsidebar p { color: white; } div.sphinxsidebar p.topless { margin: 5px 10px 10px 10px; } div.sphinxsidebar ul { margin: 10px; padding: 0; list-style: none; color: white; } div.sphinxsidebar ul ul, div.sphinxsidebar ul.want-points { margin-left: 20px; list-style: square; } div.sphinxsidebar ul ul { margin-top: 0; margin-bottom: 0; } div.sphinxsidebar a { color: #fff; } div.sphinxsidebar form { margin-top: 10px; } div.sphinxsidebar input { border: 1px solid #9bbde2; font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; font-size: 1em; } /* :::: MODULE CLOUD :::: */ div.modulecloud { margin: -5px 10px 5px 10px; padding: 10px; line-height: 160%; border: 1px solid #666666; background-color: #dddddd; } div.modulecloud a { padding: 0 5px 0 5px; } /* :::: SEARCH :::: */ ul.search { margin: 10px 0 0 20px; padding: 0; } ul.search li { padding: 5px 0 5px 20px; background-image: url(file.png); background-repeat: no-repeat; background-position: 0 7px; } ul.search li a { font-weight: bold; } ul.search li div.context { color: #666; margin: 2px 0 0 30px; text-align: left; } ul.keywordmatches li.goodmatch a { font-weight: bold; } /* :::: COMMON FORM STYLES :::: */ div.actions { padding: 5px 10px 5px 10px; border-top: 1px solid #598ec0; border-bottom: 1px solid #598ec0; background-color: #9bbde2; } form dl { color: #333; } form dt { clear: both; float: left; min-width: 110px; margin-right: 10px; padding-top: 2px; } input#homepage { display: none; } div.error { margin: 5px 20px 0 0; padding: 5px; border: 1px solid #db7d46; font-weight: bold; } /* :::: INLINE COMMENTS :::: */ div.inlinecomments { position: absolute; right: 20px; } div.inlinecomments a.bubble { display: block; float: right; background-image: url(style/comment.png); background-repeat: no-repeat; width: 25px; height: 25px; text-align: center; padding-top: 3px; font-size: 0.9em; line-height: 14px; font-weight: bold; color: black; } div.inlinecomments a.bubble span { display: none; } div.inlinecomments a.emptybubble { background-image: url(style/nocomment.png); } div.inlinecomments a.bubble:hover { background-image: url(style/hovercomment.png); text-decoration: none; color: #598ec0; } div.inlinecomments div.comments { float: right; margin: 25px 5px 0 0; max-width: 50em; min-width: 30em; border: 1px solid #598ec0; background-color: #9bbde2; z-index: 150; } div#comments { border: 1px solid #598ec0; margin-top: 20px; } div#comments div.nocomments { padding: 10px; font-weight: bold; } div.inlinecomments div.comments h3, div#comments h3 { margin: 0; padding: 0; background-color: #598ec0; color: white; border: none; padding: 3px; } div.inlinecomments div.comments div.actions { padding: 4px; margin: 0; border-top: none; } div#comments div.comment { margin: 10px; border: 1px solid #598ec0; } div.inlinecomments div.comment h4, div.commentwindow div.comment h4, div#comments div.comment h4 { margin: 10px 0 0 0; background-color: #2eabb0; color: white; border: none; padding: 1px 4px 1px 4px; } div#comments div.comment h4 { margin: 0; } div#comments div.comment h4 a { color: #9bbde2; } div.inlinecomments div.comment div.text, div.commentwindow div.comment div.text, div#comments div.comment div.text { margin: -5px 0 -5px 0; padding: 0 10px 0 10px; } div.inlinecomments div.comment div.meta, div.commentwindow div.comment div.meta, div#comments div.comment div.meta { text-align: right; padding: 2px 10px 2px 0; font-size: 95%; color: #598ec0; border-top: 1px solid #598ec0; background-color: #9bbde2; } div.commentwindow { position: absolute; width: 500px; border: 1px solid #598ec0; background-color: #9bbde2; display: none; z-index: 130; } div.commentwindow h3 { margin: 0; background-color: #598ec0; color: white; border: none; padding: 5px; font-size: 1.5em; cursor: pointer; } div.commentwindow div.actions { margin: 10px -10px 0 -10px; padding: 4px 10px 4px 10px; color: #598ec0; } div.commentwindow div.actions input { border: 1px solid #598ec0; background-color: white; color: #073d61; cursor: pointer; } div.commentwindow div.form { padding: 0 10px 0 10px; } div.commentwindow div.form input, div.commentwindow div.form textarea { border: 1px solid #598ec0; background-color: white; color: black; } div.commentwindow div.error { margin: 10px 5px 10px 5px; background-color: #fff2b0; display: none; } div.commentwindow div.form textarea { width: 99%; } div.commentwindow div.preview { margin: 10px 0 10px 0; background-color: ##9bbde2; padding: 0 1px 1px 25px; } div.commentwindow div.preview h4 { margin: 0 0 -5px -20px; padding: 4px 0 0 4px; color: white; font-size: 1.3em; } div.commentwindow div.preview div.comment { background-color: #f2fbfd; } div.commentwindow div.preview div.comment h4 { margin: 10px 0 0 0!important; padding: 1px 4px 1px 4px!important; font-size: 1.2em; } /* :::: SUGGEST CHANGES :::: */ div#suggest-changes-box input, div#suggest-changes-box textarea { border: 1px solid #666; background-color: white; color: black; } div#suggest-changes-box textarea { width: 99%; height: 400px; } /* :::: PREVIEW :::: */ div.preview { background-image: url(style/preview.png); padding: 0 20px 20px 20px; margin-bottom: 30px; } /* :::: INDEX PAGE :::: */ table.contentstable { width: 90%; } table.contentstable p.biglink { line-height: 150%; } a.biglink { font-size: 1.3em; } span.linkdescr { font-style: italic; padding-top: 5px; font-size: 90%; } /* :::: INDEX STYLES :::: */ table.indextable td { text-align: left; vertical-align: top; } table.indextable dl, table.indextable dd { margin-top: 0; margin-bottom: 0; } table.indextable tr.pcap { height: 10px; } table.indextable tr.cap { margin-top: 10px; background-color: #dddddd; } img.toggler { margin-right: 3px; margin-top: 3px; cursor: pointer; } form.pfform { margin: 10px 0 20px 0; } /* :::: GLOBAL STYLES :::: */ .docwarning { background-color: #fff2b0; padding: 10px; margin: 0 -20px 0 -20px; border-bottom: 1px solid #db7d46; } p.subhead { font-weight: bold; margin-top: 20px; } a { color: #24326e; text-decoration: none; } a:hover { text-decoration: underline; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; background-color: #dddddd; font-weight: normal; color: #073d61; border-bottom: 1px solid #666; margin: 20px -20px 10px -20px; padding: 3px 0 3px 10px; } div.body h1 { margin-top: 0; font-size: 200%; } div.body h2 { font-size: 160%; } div.body h3 { font-size: 140%; } div.body h4 { font-size: 120%; } div.body h5 { font-size: 110%; } div.body h6 { font-size: 100%; } a.headerlink { color: #edaa1e; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; visibility: hidden; } h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink { visibility: visible; } a.headerlink:hover { background-color: #edaa1e; color: white; } div.body p, div.body dd, div.body li { text-align: left; line-height: 130%; } div.body p.caption { text-align: inherit; } div.body td { text-align: left; } ul.fakelist { list-style: none; margin: 10px 0 10px 20px; padding: 0; } .field-list ul { padding-left: 1em; } .first { margin-top: 0 !important; } /* "Footnotes" heading */ p.rubric { margin-top: 30px; font-weight: bold; } /* "Topics" */ div.topic { background-color: #ddd; border: 1px solid #666; padding: 0 7px 0 7px; margin: 10px 0 10px 0; } p.topic-title { font-size: 1.1em; font-weight: bold; margin-top: 10px; } /* Admonitions */ div.admonition { margin-top: 10px; margin-bottom: 10px; padding: 7px; } div.admonition dt { font-weight: bold; } div.admonition dl { margin-bottom: 0; } div.admonition p { display: inline; } div.seealso { background-color: #fff2b0; border: 1px solid #edaa1e; } div.warning { background-color: #fff2b0; border: 1px solid ##db7d46; } div.note { background-color: #eee; border: 1px solid #666; } p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; display: inline; } p.admonition-title:after { content: ":"; } div.body p.centered { text-align: center; margin-top: 25px; } table.docutils { border: 0; } table.docutils td, table.docutils th { padding: 1px 8px 1px 0; border-top: 0; border-left: 0; border-right: 0; border-bottom: 1px solid #a9a6a2; } table.field-list td, table.field-list th { border: 0 !important; } table.footnote td, table.footnote th { border: 0 !important; } .field-list ul { margin: 0; padding-left: 1em; } .field-list p { margin: 0; } dl { margin-bottom: 15px; clear: both; } dd p { margin-top: 0px; } dd ul, dd table { margin-bottom: 10px; } dd { margin-top: 3px; margin-bottom: 10px; margin-left: 30px; } .refcount { color: #24326e; } dt:target, .highlight { background-color: #edaa1e1; } dl.glossary dt { font-weight: bold; font-size: 1.1em; } th { text-align: left; padding-right: 5px; } pre { padding: 5px; background-color: #e6f3ff; color: #333; border: 1px solid #24326e; border-left: none; border-right: none; overflow: auto; } td.linenos pre { padding: 5px 0px; border: 0; background-color: transparent; color: #aaa; } table.highlighttable { margin-left: 0.5em; } table.highlighttable td { padding: 0 0.5em 0 0.5em; } tt { background-color: #ddd; padding: 0 1px 0 1px; font-size: 1.2em; } tt.descname { background-color: transparent; font-weight: bold; font-size: 1.2em; } tt.descclassname { background-color: transparent; } tt.xref, a tt { background-color: transparent; font-weight: bold; } .footnote:target { background-color: #fff2b0 } h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { background-color: transparent; } .optional { font-size: 1.3em; } .versionmodified { font-style: italic; } form.comment { margin: 0; padding: 10px 30px 10px 30px; background-color: #ddd; } form.comment h3 { background-color: #598ec0; color: white; margin: -10px -30px 10px -30px; padding: 5px; font-size: 1.4em; } form.comment input, form.comment textarea { border: 1px solid #ddd; padding: 2px; font-family: 'Verdana', 'Helvetica', 'Arial', sans-serif; font-size: 100%; } form.comment input[type="text"] { width: 240px; } form.comment textarea { width: 100%; height: 200px; margin-bottom: 10px; } .system-message { background-color: #edaa1e; padding: 5px; border: 3px solid red; } /* :::: PRINT :::: */ @media print { div.document, div.documentwrapper, div.bodywrapper { margin: 0; width : 100%; } div.sphinxsidebar, div.related, div.footer, div#comments div.new-comment-box, #top-link { display: none; } } traits-4.5.0/docs/source/_static/e-logo-rev.png000066400000000000000000000075111233213561600213740ustar00rootroot00000000000000PNG  IHDRoi*sRGB pHYs  tIMELIDATx]ktT>z\$m ȥ!TD jV|_CWph PT\"B$$6aIf9qfB%= By}; vo`!4ChVv[12 !HGiyg):QVd8SmsQAj2~~AH3qU:?!4[a6SRu ǎ7H'1"_Qq!JbBwx$I-S^QO>AO~( HAPU)=Ojjm+ v$~ئ"33zviJn[*.\v(/E1U`Ycֿ&y3g>=x$;GS@]d1YÓo"۾X6n8o2 ,c_܊U?y" "cdL5HfFj~}Q]H錩/Oxcq'~lӕ_ ţeW\| &cLMhdȶ9-՗ $ Θڳ9i˗>xa6>#E _h2$}앿"a\l߰0/"ޑҦ.*:UQyٕ~`:oYfxu? b)<̜>җ'rYgԾ6ngeSMkm>uv" Snhj ̌ry_ݚLM01@$(]vƏ{_{#&>4l|c.8~rK05bjԈm;14*:Ο3yK|ީT\> 8nd٤B]j맻]8#&[5TEUlu#u\/kk^6t=Zo`Ӌ-,R'*EP1#EQ DfsnlOYYYҨ!${G2yZ~\pN|olӋnϯBu-\$5˘TYgNR^\8gF{@|4Ņ0ov2֊^:j)D"zM En1]WfN@wǛ뿨k B|c!>8T'JԉaZxubOW~;c%dLynظedNSt~WX\f-pO',9UI21`xĥd  ,{ER"Z G 4PLq@$#15! G}\.-2kEfV=G15Q&ph!9Ce Cvj(# 5#GX:InHJZmڞU__(h݆' H7cHκ})"Db-&`i\eU?*YJ05 D S[GabDěrqEʪ9կm"4LwtGTدr{OPۿhj?:}"i b:/7yA@eK#$t13mj51K &^w !%PSSSֆlr{s^#w4DmQI S#3a@57Q; S#:į v4yR+A&P0j/))-&Z4S.[Z2d^!j8J01-j(T!05Q)"jԌ+@vpd"'4LuyC͉cv,@A1i_qLq|s4bvGz!U !KIQD1E3[1vI $00h6FL̙dnu˞?SScw\LGaʃcf-N]y/4u: c c PM18_h>4~h޽f l%&N^>?2=iC)9v!˜j>hN'N~(aİ}Wx+' u0?1sL _/>_nH ! x9zq@bzlLؘO_6Ac6~t=F&מc2\汋rh3.婓Jx`x^_>_mqKkj+-++Y.zw3TU+qܹ~M\_:pBI" D5 JcTubd!P%+~fz*EP]6R2;/uz] g,'Nd=C^n188D,dZ}W/)~ǎ/z~*0P]g*ݐ[{s]b76 $?`[퍘JTDDKŽ t "((}qqwZΦO11fZ XSXk71E~;{GbN#"k" r@4˗mrN"srLڀ?Vh?݁nw'?0l۶`bF4]2UU ;llgL bkx'ۄ&%QU#c*B{awE|DǶBhZ-f/wIENDB`traits-4.5.0/docs/source/_static/et.ico000066400000000000000000000236261233213561600200230ustar00rootroot00000000000000(f 00hvh F00( r5(H73iKD]ZZzols$jV4{H5Fg@Hg @' 9c]sE{c@Ec{bFQEPkG\ 1}m( @_-!p3%7)&[B<]VU~okWU#XW$iU$zu5{j6Yv1GWw"X f$I qJ QJ[JډJc4jJ5{J 1FJ qGI Q#W6 Q$j#XA${#h1IQ$j1< s4{A a5S Q}A\1J7|xp``?`8(0`W,"4(%p3%v>1IGF~QFja_~wtdFwG܆ h즋" ij""!zi"""!g""""ۆ"""""F얋""""""Gzޥ""""""Hi """"" ih s"""""  c"""""! R""""!|2"""!|{2""!|2"1"!5 y@y`"!""" 2""""G s"""""H b"""" i R""""!yR""""!qh2""""0i2""""GR"!z"""""hr"""r"""" """""FB""""#93"""""GB"""""62"""""hp"""""%""""" ht"""""#|"""""!"""""k """""""""""Y s"""""""""8 b"""""""&R"""""%2"""#|2"#k"Y?????( f-t1!j/#i1$n3$j2&r4&s4&s5&u5&]0'`1'^2'u5'v5'v6'x6';+(X2(_2(r4(u6(w7(x7(z7(y8(z8({8(P0)s7)z8){8)|9):*c5,i9-A1.R4.E3/W7/u=1x?2A97>;:{F:F?>{I>mH?DBAMDB~ODJHHOMLhSOQPPPQQSRRUTTaW\YXx_[c[]]]^^^b_^___dddpghhhmhkjijjjrksmnnnrpopppsssuttwwwyyy~{}}}t@4LhO\b$8PraKx_ *?VNdcpI 0M}Wfm:1n{|wFvu2!5yziAUSyxj?]GRryxj>E-BYyzk7l`, %3Jg~Z+DaT)9hzC&6Ooe" [q. *>;'#QX( <H/s=^( @m,6#>%D&K'O(R)P) Y+ q0!2%"`."8'#g1#4($l2%p3%q3%q4%0'&a0&r4&t5&u5&v5&e2'p4't4't5'u5'u6'v6'w6'x6'/)(r6(v6(x7(Y3)z8)v8*l6+2--m:-v;-w>1543Q93v@3lA7vC8;:9wF:><;N?<VA=?>>@??zK@AAAoJAFFF~SHbNIKKKnQKLLLrTMONNPNNZPQQQSRRVVUdXVXWWaWaX[ZZwa\d_^e^i_```iabbbedceedhhhphqh}mipijjjlkkplrlwmoooqpopppxqwrsssyvuwwwyyy{{}}}~~~ŻjjybO =iٙWa"HuihZ!.SWZ% 9bݫXxaBmnczq2 !*NwܐVr-% 3]wt\#%XzF' Dz:  EIv- N}I`')uHYH޾Hn65S|HJ' 9dH<%"DpHs0!.SDe(! ;g9pQ("GuM8b> .Uo0@m~1% KL  *Nwג7%%?4%% 3XжP& +_l,$ =g^/#AT($ ! 1>  )[4 #Ck,1{R(%+_f|xp``?`8(0`<5"=$H&/"S)m-*" -# X+ s0!b."o1"+%#h0#+%$l2$u3$p3%q3%q4%r4%+&&8)&V.&g2&r4&t4&t5&u5&.('O/'t5'u5'v5'u6'v6'q6(v7(y7(o7)}9),+*V2*g4*x9*:.,x;,/..70.C2.z=/211u=1l=2z@3666X?9:::}E:><<PB>~I>AAALAlKCODEEERFIIIUIUJKKK`OKMMMZPRRR\TS^TUUU_WaWYYYs_Zt`[`^^__^g_a``bbaccceeeofhggiiillksknmmpppxptsruuuxvxxxyyy}{y}z{{{|}}}~}~¿ȏՎV)IzEl~zEzEtgzE{=?bzEM+$0LqzE9!$ 8YzE5$CdzEc/$0LtzEW$$ :ZzEG$!Ce|?>$$0Ovo*R}u7$:Zc5 ?ac&!CeD $*JmN$$0R\%$ 4Rxf,! .eF <]v=)6u7!$EeږM'#(Tc-#0Ot׽a+ !AQ$# 8Yvh=$$6jB$ 1!!%Ty7!!!"A`&$6jQ&"%T@$Ay7!$6j`&!%SQ'$A?????traits-4.5.0/docs/source/_templates/000077500000000000000000000000001233213561600174155ustar00rootroot00000000000000traits-4.5.0/docs/source/_templates/layout.html000066400000000000000000000003631233213561600216220ustar00rootroot00000000000000{# Filename: .templates/layout.html #} {% extends '!layout.html' %} {% block relbaritems %} {% if current_page_name != 'index' %}
  • {{ title }}
  • {% endif %} {% endblock %} traits-4.5.0/docs/source/_templates/search.html000066400000000000000000000017451233213561600215570ustar00rootroot00000000000000{% extends "!search.html" %} {% block body %}

    Search

    Enter your search words into the box below and click search. Note that the search function automatically searches for all of the words. Pages containing some but not all of them won't appear in the result list.

    {% if search_performed %}

    Search Results

    {% if not search_results %}

    Your search did not match any results.

    {% endif %} {% endif %}
    {% if search_results %}
      {% for href, caption, context in search_results %}
    • {{ caption }}
      {{ context|e }}
    • {% endfor %}
    {% endif %}
    {% endblock %} traits-4.5.0/docs/source/conf.py000066400000000000000000000143701233213561600165640ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Traits documentation build configuration file, created by # sphinx-quickstart on Tue Jul 22 10:52:03 2008. # # This file is execfile()d with the current directory set to its containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed automatically). # # All configuration values have a default value; values that are commented out # serve to show the default value. import sys, os # If your extensions are in another directory, add it here. If the directory # is relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. sys.path.append(os.path.abspath('_extensions')) sys.path.append(os.path.abspath('../../')) # General configuration # --------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ 'refactordoc', 'sphinx.ext.viewcode', 'sphinx.ext.autosummary', 'traits.util.trait_documenter'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The master toctree document. master_doc = 'index' # General substitutions. project = 'traits' copyright = '2008-2011, Enthought' # The default replacements for |version| and |release|, also used in various # other places throughout the built documents. d = {} execfile(os.path.join('..', '..', 'traits', '__init__.py'), d) version = release = d['__version__'] # 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 documents that shouldn't be included in the build. #unused_docs = [] # List of directories, relative to source directories, that shouldn't be searched # for source files. #exclude_dirs = [] # 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' # Options for the autodoc extension. autodoc_default_flags =['members'] autodoc_member_order = 'bysource' # Options for HTML output # ----------------------- # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. html_style = 'default.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". html_title = "Traits 4 User Manual" # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (within the static path) to place at the top of # the sidebar. html_logo = "e-logo-rev.png" # 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 = "et.ico" # 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'] # 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 = {} # If false, no module index is generated. html_use_modindex = False # If false, no index is generated. #html_use_index = False # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, the reST sources are included in the HTML build as _sources/. #html_copy_source = 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 = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'Traitsdoc' # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class [howto/manual]). latex_documents = [ ('index', 'Traits.tex', 'Traits 4 User Manual', 'Enthought, Inc.', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = "enthought_logo.jpg" latex_logo = "e-logo-rev.png" # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True # Options for Texinfo output # -------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'traits', 'Traits 4 User Manual', 'Enthought, Inc.', 'Traits', 'Explicitly typed attributes for Python.', 'Python'), ] traits-4.5.0/docs/source/e-logo-rev.png000066400000000000000000000075111233213561600177460ustar00rootroot00000000000000PNG  IHDRoi*sRGB pHYs  tIMELIDATx]ktT>z\$m ȥ!TD jV|_CWph PT\"B$$6aIf9qfB%= By}; vo`!4ChVv[12 !HGiyg):QVd8SmsQAj2~~AH3qU:?!4[a6SRu ǎ7H'1"_Qq!JbBwx$I-S^QO>AO~( HAPU)=Ojjm+ v$~ئ"33zviJn[*.\v(/E1U`Ycֿ&y3g>=x$;GS@]d1YÓo"۾X6n8o2 ,c_܊U?y" "cdL5HfFj~}Q]H錩/Oxcq'~lӕ_ ţeW\| &cLMhdȶ9-՗ $ Θڳ9i˗>xa6>#E _h2$}앿"a\l߰0/"ޑҦ.*:UQyٕ~`:oYfxu? b)<̜>җ'rYgԾ6ngeSMkm>uv" Snhj ̌ry_ݚLM01@$(]vƏ{_{#&>4l|c.8~rK05bjԈm;14*:Ο3yK|ީT\> 8nd٤B]j맻]8#&[5TEUlu#u\/kk^6t=Zo`Ӌ-,R'*EP1#EQ DfsnlOYYYҨ!${G2yZ~\pN|olӋnϯBu-\$5˘TYgNR^\8gF{@|4Ņ0ov2֊^:j)D"zM En1]WfN@wǛ뿨k B|c!>8T'JԉaZxubOW~;c%dLynظedNSt~WX\f-pO',9UI21`xĥd  ,{ER"Z G 4PLq@$#15! G}\.-2kEfV=G15Q&ph!9Ce Cvj(# 5#GX:InHJZmڞU__(h݆' H7cHκ})"Db-&`i\eU?*YJ05 D S[GabDěrqEʪ9կm"4LwtGTدr{OPۿhj?:}"i b:/7yA@eK#$t13mj51K &^w !%PSSSֆlr{s^#w4DmQI S#3a@57Q; S#:į v4yR+A&P0j/))-&Z4S.[Z2d^!j8J01-j(T!05Q)"jԌ+@vpd"'4LuyC͉cv,@A1i_qLq|s4bvGz!U !KIQD1E3[1vI $00h6FL̙dnu˞?SScw\LGaʃcf-N]y/4u: c c PM18_h>4~h޽f l%&N^>?2=iC)9v!˜j>hN'N~(aİ}Wx+' u0?1sL _/>_nH ! x9zq@bzlLؘO_6Ac6~t=F&מc2\汋rh3.婓Jx`x^_>_mqKkj+-++Y.zw3TU+qܹ~M\_:pBI" D5 JcTubd!P%+~fz*EP]6R2;/uz] g,'Nd=C^n188D,dZ}W/)~ǎ/z~*0P]g*ݐ[{s]b76 $?`[퍘JTDDKŽ t "((}qqwZΦO11fZ XSXk71E~;{GbN#"k" r@4˗mrN"srLڀ?Vh?݁nw'?0l۶`bF4]2UU ;llgL bkx'ۄ&%QU#c*B{awE|DǶBhZ-f/wIENDB`traits-4.5.0/docs/source/index.rst000066400000000000000000000003771233213561600171300ustar00rootroot00000000000000Traits Documentation ==================== User Reference -------------- .. toctree:: :maxdepth: 3 traits_user_manual/index Developer Reference ------------------- .. toctree:: :maxdepth: 3 traits_api_reference/index * :ref:`search` traits-4.5.0/docs/source/traits_api_reference/000077500000000000000000000000001233213561600214355ustar00rootroot00000000000000traits-4.5.0/docs/source/traits_api_reference/adapter.rst000066400000000000000000000003161233213561600236070ustar00rootroot00000000000000:mod:`adapter` Module ===================== .. automodule:: traits.adapter :no-members: Class ----- .. autoclass:: Adapter .. automethod:: __init__ Function -------- .. autofunction:: adapts traits-4.5.0/docs/source/traits_api_reference/category.rst000066400000000000000000000003111233213561600237770ustar00rootroot00000000000000:mod:`category` Module ====================== .. automodule:: traits.category :no-members: Classes ------- .. autoclass:: MetaCategory .. autoclass:: MetaCategoryObject .. autoclass:: Categorytraits-4.5.0/docs/source/traits_api_reference/has_dynamic_views.rst000066400000000000000000000003561233213561600256670ustar00rootroot00000000000000:mod:`has_dynamic_views` Module =============================== .. automodule:: traits.has_dynamic_views :no-members: Classes ------- .. autoclass:: DynamicViewSubElement .. autoclass:: DynamicView .. autoclass:: HasDynamicViews traits-4.5.0/docs/source/traits_api_reference/has_traits.rst000066400000000000000000000027551233213561600243410ustar00rootroot00000000000000:mod:`has_traits` Module ======================== .. automodule:: traits.has_traits :no-members: Classes ------- .. autoclass:: ViewElement .. autoclass:: MetaHasTraits .. autoclass:: MetaInterface .. automethod:: __init__ .. automethod:: __call__ .. autoclass:: MetaHasTraitsObject .. automethod:: __init__ .. autoclass:: HasTraits :exclude-members: wrappers .. attribute:: wrappers :annotation: = | {'same': TraitChangeNotifyWrapper, | 'extended': ExtendedTraitChangeNotifyWrapper, | 'new': NewTraitChangeNotifyWrapper, | 'fast_ui': FastUITraitChangeNotifyWrapper, | 'ui': FastUITraitChangeNotifyWrapper} Mapping from dispatch type to notification wrapper class type .. autoclass:: HasStrictTraits .. autoclass:: HasPrivateTraits .. autoclass:: SingletonHasTraits .. autoclass:: SingletonHasStrictTraits .. autoclass:: SingletonHasPrivateTraits .. autoclass:: Vetoable .. autoclass:: Interface .. autoclass:: ISerializable .. autoclass:: traits_super ABC classes ----------- .. note:: These classes are only available when the abc module is present. .. autoclass:: ABCMetaHasTraits .. autoclass:: ABCHasTraits .. autoclass:: ABCHasStrictTraits Functions --------- .. autofunction:: get_delegate_pattern .. autofunction:: weak_arg .. autofunction:: property_depends_on .. autofunction:: cached_property .. autofunction:: on_trait_change .. autofunction:: implements traits-4.5.0/docs/source/traits_api_reference/index.rst000066400000000000000000000010661233213561600233010ustar00rootroot00000000000000API Reference ============= Traits core ----------- .. toctree:: :maxdepth: 1 traits adapter category has_traits has_dynamic_views interface_checker trait_base trait_errors trait_handlers trait_numeric trait_types trait_value traits_listener trait_notifiers ustr_trait Subpackages ----------- .. toctree:: :maxdepth: 1 traits.adaptation traits.etsconfig traits.protocols traits.testing traits.util Indices and tables ================== * :ref:`genindex` * :ref:`search` traits-4.5.0/docs/source/traits_api_reference/interface_checker.rst000066400000000000000000000004021233213561600256070ustar00rootroot00000000000000:mod:`interface_checker` Module =============================== .. automodule:: traits.interface_checker :no-members: Classes ------- .. autoclass:: InterfaceError .. autoclass:: InterfaceChecker Function -------- .. autofunction:: check_implementstraits-4.5.0/docs/source/traits_api_reference/trait_base.rst000066400000000000000000000012551233213561600243070ustar00rootroot00000000000000:mod:`trait_base` Module ======================== .. automodule:: traits.trait_base :no-members: Classes ------- .. autodata:: Uninitialized .. autodata:: Undefined .. autodata:: Missing .. autodata:: Self Functions --------- .. autofunction:: strx .. autofunction:: class_of .. autofunction:: add_article .. autofunction:: user_name_for .. autofunction:: traits_home .. autofunction:: verify_path .. autofunction:: get_module_name .. autofunction:: get_resource_path .. autofunction:: xgetattr .. autofunction:: xsetattr .. autofunction:: is_none .. autofunction:: not_none .. autofunction:: not_false .. autofunction:: not_event .. autofunction:: is_str traits-4.5.0/docs/source/traits_api_reference/trait_errors.rst000066400000000000000000000004211233213561600247030ustar00rootroot00000000000000:mod:`trait_errors` Module ========================== .. automodule:: traits.trait_errors :no-members: Functions --------- .. autofunction:: repr_type Classes ------- .. autoclass:: TraitError .. autoclass:: TraitNotificationError .. autoclass:: DelegationError traits-4.5.0/docs/source/traits_api_reference/trait_handlers.rst000066400000000000000000000024531233213561600251760ustar00rootroot00000000000000:mod:`trait_handlers` Module ============================ .. automodule:: traits.trait_handlers :no-members: Classes ------- .. autoclass:: BaseTraitHandler .. autoclass:: NoDefaultSpecified .. autoclass:: TraitType .. autoclass:: TraitHandler .. autoclass:: TraitRange .. autoclass:: TraitString .. autoclass:: TraitCoerceType .. autoclass:: TraitCastType .. autoclass:: ThisClass .. autoclass:: TraitInstance .. autoclass:: TraitWeakRef .. autoclass:: HandleWeakRef .. autoclass:: TraitClass .. autoclass:: TraitFunction .. autoclass:: TraitEnum .. autoclass:: TraitPrefixList .. autoclass:: TraitMap .. autoclass:: TraitPrefixMap .. autoclass:: TraitExpression .. autoclass:: TraitCompound .. autoclass:: TraitTuple .. autoclass:: TraitCallable .. autoclass:: TraitListEvent .. autoclass:: TraitList .. autoclass:: TraitListObject .. autoclass:: TraitSetEvent .. autoclass:: TraitSetObject .. autoclass:: TraitDictEvent .. autoclass:: TraitDict .. autoclass:: TraitDictObject Private Functions ----------------- .. autofunction:: traits.trait_handlers._arg_count .. autofunction:: traits.trait_handlers._write_only .. autofunction:: traits.trait_handlers._read_only .. autofunction:: traits.trait_handlers._undefined_get .. autofunction:: traits.trait_handlers._undefined_set traits-4.5.0/docs/source/traits_api_reference/trait_notifiers.rst000066400000000000000000000012431233213561600253740ustar00rootroot00000000000000:mod:`trait_notifiers` Module ============================= .. automodule:: traits.trait_notifiers :no-members: Classes ------- .. autoclass:: NotificationExceptionHandlerState .. autoclass:: NotificationExceptionHandler :members: _push_handler, _pop_handler, _handle_exception, _get_handlers, _check_lock, _log_exception .. autoclass:: StaticAnyTraitChangeNotifyWrapper .. autoclass:: StaticTraitChangeNotifyWrapper .. autoclass:: TraitChangeNotifyWrapper .. autoclass:: ExtendedTraitChangeNotifyWrapper .. autoclass:: FastUITraitChangeNotifyWrapper .. autoclass:: NewTraitChangeNotifyWrapper Functions --------- .. autofunction:: set_ui_handler traits-4.5.0/docs/source/traits_api_reference/trait_numeric.rst000066400000000000000000000003761233213561600250420ustar00rootroot00000000000000:mod:`trait_numeric` Module =========================== .. automodule:: traits.trait_numeric :no-members: Classes ------- .. autoclass:: AbstractArray .. autoclass:: Array .. autoclass:: CArray Function -------- .. autofunction:: dtype2trait traits-4.5.0/docs/source/traits_api_reference/trait_types.rst000066400000000000000000000052361233213561600245440ustar00rootroot00000000000000:mod:`trait_types` Module ========================= .. automodule:: traits.trait_types :no-members: Traits ------ .. autoclass:: Any .. autoclass:: Generic .. autoclass:: BaseInt .. autoclass:: Int .. autoclass:: BaseLong .. autoclass:: Long .. autoclass:: BaseFloat .. autoclass:: Float .. autoclass:: BaseComplex .. autoclass:: Complex .. autoclass:: BaseStr .. autoclass:: Str .. autoclass:: Title .. autoclass:: BaseUnicode .. autoclass:: Unicode .. autoclass:: BaseBool .. autoclass:: Bool .. autoclass:: BaseCInt .. autoclass:: CInt .. autoclass:: BaseCLong .. autoclass:: CLong .. autoclass:: BaseCFloat .. autoclass:: CFloat .. autoclass:: BaseCComplex .. autoclass:: CComplex .. autoclass:: BaseCStr .. autoclass:: CStr .. autoclass:: BaseCUnicode .. autoclass:: CUnicode .. autoclass:: BaseCBool .. autoclass:: CBool .. autoclass:: String .. autoclass:: Regex .. autoclass:: Code .. autoclass:: HTML .. autoclass:: Password .. autoclass:: Callable .. autoclass:: BaseType .. autoclass:: This .. autoclass:: self .. autoclass:: Function .. autoclass:: Method .. autoclass:: Class .. autoclass:: Module .. autoclass:: Python .. autoclass:: ReadOnly .. autoclass:: Disallow .. autoclass:: Constant .. autoclass:: Delegate .. autoclass:: DelegatesTo .. autoclass:: PrototypedFrom .. autoclass:: Expression .. autoclass:: PythonValue .. autoclass:: BaseFile .. autoclass:: File .. autoclass:: BaseDirectory .. autoclass:: Directory .. autoclass:: BaseRange .. autoclass:: Range .. autoclass:: BaseEnum .. autoclass:: Enum .. autoclass:: BaseTuple .. autoclass:: Tuple .. autoclass:: List .. autoclass:: CList .. autoclass:: Set .. autoclass:: CSet .. autoclass:: Dict .. autoclass:: BaseClass .. autoclass:: BaseInstance .. autoclass:: Instance .. autoclass:: Supports .. autoclass:: AdaptsTo .. autoclass:: Type .. autoclass:: Event .. autoclass:: Button .. autoclass:: ToolbarButton .. autoclass:: Either .. autoclass:: Symbol .. autoclass:: UUID .. autoclass:: WeakRef :members: __init__ .. autodata:: Date .. autodata:: Time .. autodata:: ListInt .. autodata:: ListFloat .. autodata:: ListStr .. autodata:: ListUnicode .. autodata:: ListComplex .. autodata:: ListBool .. autodata:: ListFunction .. autodata:: ListMethod .. autodata:: ListClass .. autodata:: ListInstance .. autodata:: ListThis .. autodata:: DictStrAny .. autodata:: DictStrStr .. autodata:: DictStrInt .. autodata:: DictStrLong .. autodata:: DictStrFloat .. autodata:: DictStrBool .. autodata:: DictStrList Private Classes --------------- .. autoclass:: HandleWeakRef Functions --------- .. autofunction:: default_text_editor traits-4.5.0/docs/source/traits_api_reference/trait_value.rst000066400000000000000000000004421233213561600245060ustar00rootroot00000000000000:mod:`trait_value` Module ========================= .. automodule:: traits.trait_value :no-members: Classes ------- .. autoclass:: BaseTraitValue .. autoclass:: TraitValue Functions --------- .. autofunction:: SyncValue .. autofunction:: TypeValue .. autofunction:: DefaultValuetraits-4.5.0/docs/source/traits_api_reference/traits.adaptation.rst000066400000000000000000000020401233213561600256140ustar00rootroot00000000000000:mod:`adaptation` Package ========================= :mod:`adaptation` Package ------------------------- .. automodule:: traits.adaptation :members: :undoc-members: :show-inheritance: :mod:`adaptation_error` Module ------------------------------ .. automodule:: traits.adaptation.adaptation_error :members: :undoc-members: :show-inheritance: :mod:`adaptation_manager` Module -------------------------------- .. automodule:: traits.adaptation.adaptation_manager :members: :undoc-members: :show-inheritance: :mod:`adaptation_offer` Module ------------------------------ .. automodule:: traits.adaptation.adaptation_offer :members: :undoc-members: :show-inheritance: :mod:`adapter` Module --------------------- .. automodule:: traits.adaptation.adapter :members: :undoc-members: :show-inheritance: :mod:`cached_adapter_factory` Module ------------------------------------ .. automodule:: traits.adaptation.cached_adapter_factory :members: :undoc-members: :show-inheritance: traits-4.5.0/docs/source/traits_api_reference/traits.etsconfig.rst000066400000000000000000000004371233213561600254610ustar00rootroot00000000000000:mod:`etsconfig` Package ======================== :mod:`etsconfig` Package ------------------------ .. automodule:: traits.etsconfig :no-members: :mod:`etsconfig` Module ----------------------- .. automodule:: traits.etsconfig.etsconfig :no-members: .. autodata:: ETSConfig traits-4.5.0/docs/source/traits_api_reference/traits.protocols.rst000066400000000000000000000004131233213561600255160ustar00rootroot00000000000000:mod:`protocols` Package ======================== .. note:: The :mod:`traits.protocols` package is deprecated. Use the :mod:`traits.adaptation` package instead in new code. .. automodule:: traits.protocols :members: :undoc-members: :show-inheritance: traits-4.5.0/docs/source/traits_api_reference/traits.rst000066400000000000000000000015601233213561600234770ustar00rootroot00000000000000:mod:`traits` Module ==================== .. automodule:: traits.traits :no-members: .. currentmodule:: traits.traits Classes ------- .. autoclass:: CTrait .. autoclass:: TraitFactory .. autoclass:: TraitImportError .. autoclass:: Default .. autoclass:: Trait .. autofunction:: Property .. autoclass:: ForwardProperty .. autofunction:: Color .. autofunction:: RGBColor .. autofunction:: Font Functions --------- .. autofunction:: password_editor .. autofunction:: multi_line_text_editor .. autofunction:: code_editor .. autofunction:: shell_editor .. autofunction:: time_editor .. autofunction:: date_editor .. autofunction:: trait_factory .. autofunction:: trait_cast .. autofunction:: try_trait_cast .. autofunction:: trait_from Private Classes --------------- .. autoclass:: traits.traits._InstanceArgs .. autoclass:: traits.traits._TraitMaker traits-4.5.0/docs/source/traits_api_reference/traits.testing.rst000066400000000000000000000012301233213561600251450ustar00rootroot00000000000000:mod:`testing` Package ====================== :mod:`testing` Package ---------------------- .. automodule:: traits.testing :members: :undoc-members: :show-inheritance: :mod:`doctest_tools` Module --------------------------- .. automodule:: traits.testing.doctest_tools :members: :undoc-members: :show-inheritance: :mod:`nose_tools` Module ------------------------ .. automodule:: traits.testing.nose_tools :members: :undoc-members: :show-inheritance: :mod:`trait_assert_tools` Module -------------------------------- .. automodule:: traits.testing.unittest_tools :members: :undoc-members: :show-inheritance: traits-4.5.0/docs/source/traits_api_reference/traits.util.rst000066400000000000000000000025551233213561600244600ustar00rootroot00000000000000:mod:`util` Package =================== :mod:`util` Package ------------------- .. automodule:: traits.util :members: :undoc-members: :show-inheritance: :mod:`camel_case` Module ------------------------ .. automodule:: traits.util.camel_case :members: :undoc-members: :show-inheritance: :mod:`clean_strings` Module --------------------------- .. automodule:: traits.util.clean_strings :members: :undoc-members: :show-inheritance: :mod:`deprecated` Module ------------------------ .. automodule:: traits.util.deprecated :members: :undoc-members: :show-inheritance: :mod:`home_directory` Module ---------------------------- .. automodule:: traits.util.home_directory :members: :undoc-members: :show-inheritance: :mod:`resource` Module ---------------------- .. automodule:: traits.util.resource :members: :undoc-members: :show-inheritance: :mod:`import_symbol` Module ----------------------------- .. automodule:: traits.util.import_symbol :members: :undoc-members: :show-inheritance: :mod:`toposort` Module ---------------------- .. automodule:: traits.util.toposort :members: :undoc-members: :show-inheritance: :mod:`trait_documenter` Module ------------------------------ .. automodule:: traits.util.trait_documenter :members: :undoc-members: :show-inheritance: traits-4.5.0/docs/source/traits_api_reference/traits_listener.rst000066400000000000000000000002361233213561600254030ustar00rootroot00000000000000:mod:`traits_listener` Module ============================= .. automodule:: traits.traits_listener :members: :undoc-members: :show-inheritance: traits-4.5.0/docs/source/traits_api_reference/ustr_trait.rst000066400000000000000000000002171233213561600243670ustar00rootroot00000000000000:mod:`ustr_trait` Module ======================== .. automodule:: traits.ustr_trait :members: :undoc-members: :show-inheritance: traits-4.5.0/docs/source/traits_user_manual/000077500000000000000000000000001233213561600211615ustar00rootroot00000000000000traits-4.5.0/docs/source/traits_user_manual/advanced.rst000066400000000000000000001551771233213561600235000ustar00rootroot00000000000000.. _advanced-topics: =============== Advanced Topics =============== The preceding sections provide enough information for you to use traits for manifestly-typed attributes, with initialization and validation. This section describes the advanced features of the Traits package .. _initialization-and-validation-revisited: Initialization and Validation Revisited --------------------------------------- The following sections present advanced topics related to the initialization and validation features of the Traits package. * Dynamic initialization * Overriding default values * Reusing trait definitions * Trait attribute definition strategies .. index:: initialization; dynamic .. _dynamic-initialization: Dynamic Initialization `````````````````````` When you define trait attributes using predefined traits, the Trait() factory function or trait handlers, you typically specify their default values statically. You can also define a method that dynamically initializes a trait attribute the first time that the attribute value is accessed. To do this, you define a method on the same class as the trait attribute, with a name based on the name of the trait attribute: .. index:: default value; method .. method:: _name_default() This method initializes the *name* trait attribute, returning its initial value. The method overrides any default value specified in the trait definition. .. index:: get_default_value() It is also possible to define a dynamic method for the default value in a trait type subclass (get_default_value()). However, using a _\ *name*\ _default() method avoids the overhead of subclassing a trait. .. index:: default value; overriding in a subclass .. index:: pair: examples; overriding default values .. _overriding-default-values-in-a-subclass: Overriding Default Values in a Subclass ``````````````````````````````````````` Often, a subclass must override a trait attribute in a parent class by providing a different default value. You can specify a new default value without completely re-specifying the trait definition for the attribute. For example:: # override_default.py -- Example of overriding a default value for # a trait attribute in a subclass from traits.api import HasTraits, Range, Str class Employee(HasTraits): name = Str salary_grade = Range(value=1, low=1, high=10) class Manager(Employee): salary_grade = 5 In this example, the **salary_grade** of the Employee class is a range from 1 to 10, with a default value of 1. In the Manager subclass, the default value of **salary_grade** is 5, but it is still a range as defined in the Employee class. .. index:: trait; definitions; reusing .. _reusing-trait-definitions: Reusing Trait Definitions ````````````````````````` As mentioned in :ref:`defining-traits-initialization-and-validation`, in most cases, traits are defined in-line in attribute definitions, but they can also be defined independently. A trait definition only describes the characteristics of a trait, and not the current value of a trait attribute, so it can be used in the definition of any number of attributes. For example:: # trait_reuse.py --- Example of reusing trait definitions from traits.api import HasTraits, Range coefficient = Range(-1.0, 1.0, 0.0)) class quadratic(HasTraits): c2 = coefficient c1 = coefficient c0 = coefficient x = Range(-100.0, 100.0, 0.0) In this example, a trait named **coefficient** is defined externally to the class **quadratic**, which references **coefficient** in the definitions of its trait attributes **c2**, **c1**, and **c0**. Each of these attributes has a unique value, but they all use the same trait definition to determine whether a value assigned to them is valid. .. index:: explicit trait attribute definition .. _trait-attribute-definition-strategies: Trait Attribute Definition Strategies ````````````````````````````````````` In the preceding examples in this guide, all trait attribute definitions have bound a single object attribute to a specified trait definition. This is known as "explicit" trait attribute definition. The Traits package supports other strategies for defining trait attributes. You can associate a category of attributes with a particular trait definition, using the trait attribute name wildcard. You can also dynamically create trait attributes that are specific to an instance, using the add_trait() method, rather than defined on a class. These strategies are described in the following sections. .. index:: wildcard; trait attribute names pair: wildcard; examples .. _trait-attribute-name-wildcard: Trait Attribute Name Wildcard ::::::::::::::::::::::::::::: The Traits package enables you to define a category of trait attributes associated with a particular trait definition, by including an underscore ('_') as a wildcard at the end of a trait attribute name. For example:: # temp_wildcard.py --- Example of using a wildcard with a Trait # attribute name from traits.api import Any, HasTraits class Person(HasTraits): temp_ = Any This example defines a class Person, with a category of attributes that have names beginning with ``temp``, and that are defined by the Any trait. Thus, any part of the program that uses a Person instance can reference attributes such as **tempCount**, **temp_name**, or **temp_whatever**, without having to explicitly declare these trait attributes. Each such attribute has None as the initial value and allows assignment of any value (because it is based on the Any trait). You can even give all object attributes a default trait definition, by specifying only the wildcard character for the attribute name:: # all_wildcard.py --- Example of trait attribute wildcard rules from traits.api import Any, HasTraits, Int, Str class Person ( HasTraits ): # Normal, explicitly defined trait: name = Str # By default, let all traits have any value: _ = Any # Except for this one, which must be an Int: age = Int """ >>> bill = Person() >>> # These assignments should all work: >>> bill.name = 'William' >>> bill.address = '121 Drury Lane' >>> bill.zip_code = 55212 >>> bill.age = 49 >>> # This should generate an error (must be an Int): >>> bill.age = 'middle age' Traceback (most recent call last): File "all_wildcard.py", line 33, in bill.age = 'middle age' File "c:\wrk\src\lib\enthought\traits\\trait_handlers.py", line 163, in error raise TraitError, ( object, name, self.info(), value ) TraitError: The 'age' trait of a Person instance must be an integer, but a value of 'middle age' was specified. """ In this case, all Person instance attributes can be created on the fly and are defined by the Any trait. .. index:: wildard; rules .. _wildcard-rules: Wildcard Rules '''''''''''''' When using wildcard characters in trait attribute names, the following rules are used to determine what trait definition governs an attribute: 1. If an attribute name exactly matches a name without a wildcard character, that definition applies. 2. Otherwise, if an attribute name matches one or more names with wildcard characters, the definition with the longest name applies. Note that all possible attribute names are covered by one of these two rules. The base HasTraits class implicitly contains the attribute definition ``_ = Python``. This rule guarantees that, by default, all attributes have standard Python language semantics. These rules are demonstrated by the following example:: # wildcard_rules.py -- Example of trait attribute wildcard rules from traits.api import Any, HasTraits, Int, Python class Person(HasTraits): temp_count = Int(-1) temp_ = Any _ = Python In this example, the Person class has a **temp_count** attribute, which must be an integer and which has an initial value of -1. Any other attribute with a name starting with ``temp`` has an initial value of None and allows any value to be assigned. All other object attributes behave like normal Python attributes (i.e., they allow any value to be assigned, but they must have a value assigned to them before their first reference). .. index:: Disallow; object, examples; Disallow object .. _disallow-object: Disallow Object ''''''''''''''' The singleton object Disallow can be used with wildcards to disallow all attributes that are not explicitly defined. For example:: # disallow.py --- Example of using Disallow with wildcards from traits.api import \ Disallow, Float, HasTraits, Int, Str class Person (HasTraits): name = Str age = Int weight = Float _ = Disallow In this example, a Person instance has three trait attributes: * **name**: Must be a string; its initial value is ''. * **age**: Must be an integer; its initial value is 0. * **weight**: Must be a float; its initial value is 0.0. All other object attributes are explicitly disallowed. That is, any attempt to read or set any object attribute other than **name**, **age**, or **weight** causes an exception. .. index:: HasTraits class; predefined subclasses .. _hastraits-subclasses: HasTraits Subclasses '''''''''''''''''''' Because the HasTraits class implicitly contains the attribute definition ``_ = Python``, subclasses of HasTraits by default have very standard Python attribute behavior for any attribute not explicitly defined as a trait attribute. However, the wildcard trait attribute definition rules make it easy to create subclasses of HasTraits with very non-standard attribute behavior. Two such subclasses are predefined in the Traits package: HasStrictTraits and HasPrivateTraits. .. index:: HasStrictTraits class .. _hasstricttraits: HasStrictTraits ''''''''''''''' This class guarantees that accessing any object attribute that does not have an explicit or wildcard trait definition results in an exception. This can be useful in cases where a more rigorous software engineering approach is employed than is typical for Python programs. It also helps prevent typos and spelling mistakes in attribute names from going unnoticed; a misspelled attribute name typically causes an exception. The definition of HasStrictTraits is the following:: class HasStrictTraits(HasTraits): _ = Disallow HasStrictTraits can be used to create type-checked data structures, as in the following example:: class TreeNode(HasStrictTraits): left = This right = This value = Str This example defines a TreeNode class that has three attributes: **left**, **right**, and **value**. The **left** and **right** attributes can only be references to other instances of TreeNode (or subclasses), while the **value** attribute must be a string. Attempting to set other types of values generates an exception, as does attempting to set an attribute that is not one of the three defined attributes. In essence, TreeNode behaves like a type-checked data structure. .. index:: HasPrivateTraits class .. _hasprivatetraits: HasPrivateTraits '''''''''''''''' This class is similar to HasStrictTraits, but allows attributes beginning with '_' to have an initial value of None, and to not be type-checked. This is useful in cases where a class needs private attributes, which are not part of the class's public API, to keep track of internal object state. Such attributes do not need to be type-checked because they are only manipulated by the (presumably correct) methods of the class itself. The definition of HasPrivateTraits is the following:: class HasPrivateTraits(HasTraits): __ = Any _ = Disallow These subclasses of HasTraits are provided as a convenience, and their use is completely optional. However, they do illustrate how easy it is to create subclasses with customized default attribute behavior if desired. .. index:: trait attributes; per-object .. _per-object-trait-attributes: Per-Object Trait Attributes ''''''''''''''''''''''''''' The Traits package allows you to define dynamic trait attributes that are object-, rather than class-, specific. This is accomplished using the add_trait() method of the HasTraits class: .. method:: add_trait(name, trait) .. index:: examples; per-object trait attributes For example:: # object_trait_attrs.py --- Example of per-object trait attributes from traits.api import HasTraits, Range class GUISlider (HasTraits): def __init__(self, eval=None, label='Value', trait=None, min=0.0, max=1.0, initial=None, **traits): HasTraits.__init__(self, **traits) if trait is None: if min > max: min, max = max, min if initial is None: initial = min elif not (min <= initial <= max): initial = [min, max][ abs(initial - min) > abs(initial - max)] trait = Range(min, max, value = initial) self.add_trait(label, trait) This example creates a GUISlider class, whose __init__() method can accept a string label and either a trait definition or minimum, maximum, and initial values. If no trait definition is specified, one is constructed based on the **max** and **min** values. A trait attribute whose name is the value of label is added to the object, using the trait definition (whether specified or constructed). Thus, the label trait attribute on the GUISlider object is determined by the calling code, and added in the __init__() method using add_trait(). You can require that add_trait() must be used in order to add attributes to a class, by deriving the class from HasStrictTraits (see :ref:`hasstricttraits`). When a class inherits from HasStrictTraits, the program cannot create a new attribute (either a trait attribute or a regular attribute) simply by assigning to it, as is normally the case in Python. In this case, add_trait() is the only way to create a new attribute for the class outside of the class definition. .. index:: interfaces .. _interfaces: Interfaces ---------- The Traits package supports declaring and implementing *interfaces*. An interface is an abstract data type that defines a set of attributes and methods that an object must have to work in a given situation. The interface says nothing about what the attributes or methods do, or how they do it; it just says that they have to be there. Interfaces in Traits are similar to those in Java. They can be used to declare a relationship among classes which have similar behavior but do not have an inheritance relationship. Like Traits in general, Traits interfaces don't make anything possible that is not already possible in Python, but they can make relationships more explicit and enforced. Python programmers routinely use implicit, informal interfaces (what's known as "duck typing"). Traits allows programmers to define explicit and formal interfaces, so that programmers reading the code can more easily understand what kinds of objects are actually *intended* to be used in a given situation. .. index:: interfaces; defining, examples; interface definition .. _defining-an-interface: Defining an Interface ````````````````````` To define an interface, create a subclass of Interface:: from traits.api import Interface class IName(Interface): def get_name(self): """ Returns a string which is the name of an object. """ Interface classes serve primarily as documentation of the methods and attributes that the interface defines. In this case, a class that implements the ``IName`` interface must have a method named ``get_name()``, which takes no arguments and returns a string. Do not include any implementation code in an interface declaration. However, the Traits package does not actually check to ensure that interfaces do not contain implementations. By convention, interface names have a capital 'I' at the beginning of the name. .. index:: interfaces; implementing .. _implementing-an-interface: Implementing an Interface ````````````````````````` A class declares that it implements one or more interfaces using the :func:`~traits.api.provides` class decorator, which has the signature: .. currentmodule:: traits.has_traits .. function:: provides(interface[, interface2 , ... , interfaceN]) :noindex: .. index:: examples; interface implementation, interfaces; implementation; example Interface names beyond the first one are optional. As for all class decorators, the call to provides must occur just before the class definition. For example:: from traits.api import HasTraits, Interface, provides, Str class IName(Interface): def get_name(self): """ Returns a string which is the name of an object. """ @provides(IName) class Person(HasTraits): first_name = Str( 'John' ) last_name = Str( 'Doe' ) # Implementation of the 'IName' interface: def get_name ( self ): ''' Returns the name of an object. ''' name = '{first} {last}' return name.format(name=self.first_name, last=self.last_name) You can specify whether the provides() decorator verifies that the class calling it actually implements the interface that it says it does. This is determined by the CHECK_INTERFACES variable, which can take one of three values: * 0 (default): Does not check whether classes implement their declared interfaces. * 1: Verifies that classes implement the interfaces they say they do, and logs a warning if they don't. * 2: Verifies that classes implement the interfaces they say they do, and raises an InterfaceError if they don't. The CHECK_INTERFACES variable must be imported directly from the traits.has_traits module:: import traits.has_traits traits.has_traits.CHECK_INTERFACES = 1 .. index:: interfaces; using, examples; interface usage .. _using-interfaces: Using Interfaces ```````````````` You can use an interface at any place where you would normally use a class name. The most common way to use interfaces is with the :class:`~traits.trait_types.Instance` or :class:`~traits.trait_types.Supports` traits:: >>> from traits.api import HasTraits, Instance >>> class Apartment(HasTraits): ... renter = Instance(IName) >>> william = Person(first_name='William', last_name='Adams') >>> apt1 = Apartment( renter=william ) >>> print 'Renter is: ', apt1.renter.get_name() Renter is: William Adams Using an interface class with an ``Instance`` trait definition declares that the trait accepts only values that implement the specified interface. Using the ``Supports`` traits, if the assigned object does not implement the interface, the Traits package may automatically substitute an adapter object that implements the specified interface. See :ref:`adaptation` for more information. .. index:: adaptation .. _adaptation: Adaptation ---------- *The adaptation features of Traits have been rewritten in v. 4.4.0 . See the* :ref:`migration guide ` *below for details regarding changes in API.* Adaptation is the process of transforming an object that does not implement a specific interface needed by a client into an object that does. In the adapter pattern, an object is wrapped in a second object, the *adapter*, that implements the target interface. Adaptation enables a programming style in which each component or service in an application defines an interface through which it would like to receive information. Objects that need to communicate with the component declare an adapter for that interface, as illustrated in the figure below. .. image:: images/adaptation.png Adaptation allows decoupling the data model from the application components and services: introducing a new component in the application should not require modifying the data objects! Traits provides a package to make this pattern easy and automatic: In the :mod:`traits.adaptation` package, adapters from a protocol (type or interface) to another can be registered with a manager object. HasTraits classes can either explicitly request to adapt an object to a protocol, or they can define special traits that automatically invoke the adaptation manager whenever it is necessary. For example, if a :class:`~traits.trait_types.Supports` trait requires its values to implement interface ``IPrintable``, and an object is assigned to it which is of class ``Image``, which does not implement ``IPrintable``, then Traits looks for an adapter from ``Image`` to ``IPrintable``, and if one exists the adapter object is assigned to the trait. If necessary, a "chain" of adapter objects might be created, in order to perform the required adaptation. Main features ````````````` The main features of the :mod:`traits.adaptation` package are: * Support for Python classes, ABCs, and traits :class:`~.Interface` s Protocols can be specified using any of those. * Chaining of adapters Adapters can be chained, i.e., an object can be adapted to a target protocol as long as there is a sequence of adapters that can be used to transform it. * Conditional adaptation Adaptation of an object to a protocol can be conditional, i.e. it may succeed or fail depending on the state of the object. * Lazy loading The classes for the adapter, the origin, and the target protocols can be specified as strings, and are only loaded if they are required. Note on terminology ``````````````````` To avoid confusion, let's define two terms that we will use all the time: * We say that a class *provides* a protocol if it is a subclass of the protocol, or if it implements the protocol (if it is an interface) * We say that a class *supports* a protocol if it provides the protocol or an adapter object can be built that provides the protocol .. index:: adapters; defining .. _defining-adapters: Defining Adapters ````````````````` .. index:: Adapter class .. _subclassing-adapter: The :class:`Adapter` class :::::::::::::::::::::::::: The Traits package provides two classes for defining adapters, one for Traits adapters, :class:`~traits.adaptation.adapter.Adapter`, and one for for pure-Python adapters, :class:`~traits.adaptation.adapter.PurePythonAdapter`. These classes streamline the process of creating a new adapter class. They have a standard constructor that does not normally need to be overridden by subclasses. This constructor accepts one parameter, which is the object to be adapted, and assigns that object to an :attr:`adaptee` attribute (a trait in the case of :class:`~traits.adaptation.adapter.Adapter`). As an adapter writer, you need to take care of the following: * Declare which interfaces the adapter class implements on behalf of the object it is adapting. For example, if we are working with Traits :class:`~.Interface` s, the adapter would be decorated with the :func:`~traits.has_traits.provides` decorator. In the case of Python ABCs, the class would be a subclass of the abstract base class, or be `registered with it `_. * Implement the methods defined in the interfaces declared in the previous step. Usually, these methods are implemented using appropriate members on the adaptee object. .. index:: adaptee trait * For Traits adapters, define a trait attribute named **adaptee** that declares what type of object it is an adapter for. Usually, this is an :class:`~.Instance` trait. .. index:: pair: example; Adapter class The following code example shows a definition of a simple adapter class:: from traits.api import Adapter, Instance, provides # Declare what interfaces this adapter implements for its client @provides(IName) class PersonToIName(Adapter): # Declare the type of client it supports: adaptee = Instance(Person) # Implement the 'IName' interface on behalf of its client: def get_name ( self ): name = '{first} {last}'.format(first=self.adaptee.first_name, last=self.adaptee.last_name) return name .. index:: pair: registering; adapters .. _registering-adapters: Registering adapters :::::::::::::::::::: Once an adapter class has been defined, it has to be registered with the adaptation manager using the :func:`~traits.adaptation.api.register_factory` function. The signature of :func:`~traits.adaptation.api.register_factory` is: .. currentmodule:: traits.adaptation.api .. function:: register_factory(adapter_class, from_protocol, to_protocol) :noindex: The :func:`~traits.adaptation.adaptation_manager.register_factory` function takes as first argument the adapter class (or an :ref:`adapter factory `), followed by the protocol to be adapted (the one provided by the adaptee, :attr:`from_protocol`), and the protocol that it provides (:attr:`to_protocol`). .. index:: examples; registering adapters This is the example from the previous section, were the adapter is registered:: from traits.adaptation.api import Adapter, Instance, provides # Declare what interfaces this adapter implements for its client @provides(IName) class PersonToIName(Adapter): # Declare the type of client it supports: adaptee = Instance(Person) # Implement the 'IName' interface on behalf of its client: def get_name ( self ): name = '{first} {last}'.format(first=self.adaptee.first_name, last=self.adaptee.last_name) return name # ... somewhere else at application startup. register_factory(PersonToIName, Person, IName) .. index:: adapters; factory; factories; conditional adaptation .. _adapter-factories: Adapter factories, and conditional adaptation ````````````````````````````````````````````` The first argument to the :func:`~traits.adaptation.api.register_factory` function needs not be an adapter *class*, it can be, more generally, an adapter *factory*. An adapter factory can be any callable that accepts one positional argument, the adaptee object, and returns an adapter or None if the adaptation was not possible. Adapter factories allow flexibility in the adaptation process, as the result of adaptation may vary depending on the state of the adaptee object. .. _conditional-adaptation: Conditional adaptation :::::::::::::::::::::: A common use of adapter factories is to allow adaptation only if the state of the adaptee object allows it. The factory returns an adapter object if adaptation is possible, or None if it is not. In the following example, a ``numpy.ndarray`` object can be adapted to provide an ``IImage`` protocol only if the number of dimensions is 2. (For illustration, this example uses Python ABCs rather than Traits Interfaces.) :: import abc import numpy from traits.api import Array, HasTraits from traits.adaptation.api import adapt, Adapter, register_factory class ImageABC(object): __metaclass__ = abc.ABCMeta class NDArrayToImage(Adapter): adaptee = Array # Declare that NDArrayToImage implements ImageABC. ImageABC.register(NDArrayToImage) def ndarray_to_image_abc(adaptee): """ An adapter factory from numpy arrays to the ImageABC protocol.""" if adaptee.ndim == 2: return NDArrayToImage(adaptee=adaptee) return None # ... somewhere else at application startup register_factory(ndarray_to_image_abc, numpy.ndarray, ImageABC) # Try to adapt numpy arrays to images. The `adapt` function is # introduced later in the docs, but you can probably guess what it does ;-) # This adaptation fails, as the array is 1D image = adapt(numpy.ndarray([1,2,3]), ImageABC, default=None) assert image == None # This succeeds. image = adapt(numpy.array([[1,2],[3,4]]), ImageABC) assert isinstance(image, NDArrayToImage) .. index:: pair: adapters; requesting .. _using-adapters: Requesting an adapter ````````````````````` The ``adapt`` function :::::::::::::::::::::: Adapter classes are defined as described in the preceding sections, but you do not explicitly create instances of these classes. Instead, the function :func:`~traits.adaptation.adaptation_manager.adapt` is used, giving the object that needs to be adapted and the target protocol. For instance, in the example in the :ref:`conditional-adaptation` section, a 2D numpy array is adapted to an ImageABC protocol with :: image = adapt(numpy.array([[1,2],[3,4]]), ImageABC) In some cases, no single adapter class is registered that adapts the object to the required interface, but a series of adapter classes exist that, together, perform the required adaptation. In such cases, the necessary set of adapter objects are created, and the "last" link in the chain, the one that actually implements the required interface, is returned. When a situation like this arises, the adapted object assigned to the trait always contains the smallest set of adapter objects needed to adapt the original object. Also, more specific adapters are preferred over less specific ones. For example, let's suppose we have a class ``Document`` and a subclass ``HTMLDocument``. We register two adapters to an interface ``IPrintable``, ``DocumentToIPrintable`` and ``HTMLDocumentToIPrintable``. The call :: html_doc = HTMLDocument() printable = adapt(html_doc, IPrintable) will return an instance of the ``HTMLDocumentToIPrintable`` adapter, as it is more specific than ``DocumentToIPrintable``. If no single adapter and no adapter chain can be constructed for the requested adaptation, an :class:`~traits.adaptation.adaptation_error.AdaptationError` is raised. Alternatively, one can specify a default value to be returned in this case:: printable = adapt(unprintable_doc, IPrintable, default=EmptyPrintableDoc()) Using Traits interfaces ::::::::::::::::::::::: An alternative syntax to create adapters when using Traits Interfaces is to use the interface class as an adapter factory, for example :: printable = IPrintable(html_doc, None) is equivalent to :: printable = adapt(html_doc, IPrintable, default=None) (the default argument, None, is optional). Using the ``Supports`` and ``AdaptsTo`` traits :::::::::::::::::::::::::::::::::::::::::::::: Using the terminology introduced in this section, we can say that the :class:`~.Instance` trait accepts values that *provide* the specified protocol. Traits defines two additional traits that accept values that *support* a given protocol (they provide it or can be adapted to it) instead: * The :class:`~.Supports` trait accepts values that support the specified protocol. The value of the trait after assignment is the possibly adapted value (i.e., it is the original assigned value if that provides the protocol, or is an adapter otherwise). * The :class:`~.AdaptsTo` trait also accepts values that support the specified protocol. Unlike ``Supports``, ``AdaptsTo`` stores the original, unadapted value. If your application works with adaptation, it is natural to use the ``Supports`` trait in place of the ``Instance`` one in most cases. This will allow that application to be extended by adaptation in the future without changing the existing code, without having to invoke adaptation explicitly in your code. For example, a Traits object can be written against the ``IPrintable`` interface and be open to extensions by adaptation as follows: :: from traits.api import (Adapter, HasTraits, Interface, List, provides, register_factory, Str, Supports) class IPrintable(Interface): def get_formatted_text(self, n_cols): """ Return text formatted with the given number of columns. """ class PrintQueue(HasTraits): # This is the key part of the example: we declare a list of # items that provide or can be adapted to IPrintable queue = List(Supports(IPrintable)) def is_empty(self): return len(self.queue) == 0 def push(self, printable): self.queue.append(printable) def print_next(self): printable = self.queue.pop(0) # The elements from the list are guaranteed to provide # IPrintable, so we can call the interface without worrying # about adaptation. lines = printable.get_formatted_text(n_cols=20) print '-- Start document --' print '\n'.join(lines) print '-- End of document -\n' class TextDocument(HasTraits): """ A text document. """ text = Str @provides(IPrintable) class TextDocumentToIPrintable(Adapter): """ Adapt TextDocument and provide IPrintable. """ def get_formatted_text(self, n_cols): import textwrap return textwrap.wrap(self.adaptee.text, n_cols) # ---- Application starts here. # Register the adapter. register_factory(TextDocumentToIPrintable, TextDocument, IPrintable) # Create two text documents. doc1 = TextDocument(text='very very long text the will bore you for sure') doc2 = TextDocument(text='once upon a time in a far away galaxy') # The text documents can be pushed on the print queue; in the process, # they are automatically adapted by Traits. print_queue = PrintQueue() print_queue.push(doc1) print_queue.push(doc2) while not print_queue.is_empty(): print_queue.print_next() This scripts produces this output: :: -- Start document -- very very long text the will bore you for sure -- End of document - -- Start document -- once upon a time in a far away galaxy -- End of document - Implementation details `````````````````````` The algorithm for finding a sequence of adapters adapting an object ``adaptee`` to a protocol ``to_protocol`` is based on a weighted graph. Nodes on the graphs are protocols (types or interfaces). Edges are adaptation offers that connect a ``offer.from_protocol`` to a ``offer.to_protocol``. Edges connect protocol ``A`` to protocol ``B`` and are weighted by two numbers in this priority: 1) a unit weight (1) representing the fact that we use 1 adaptation offer to go from ``A`` to ``B`` 2) the number of steps up the type hierarchy that we need to take to go from ``A`` to ``offer.from_protocol``, so that more specific adapters are always preferred The algorithm finds the shortest weighted path between ``adaptee`` and ``to_protocol``. Once a candidate path is found, it tries to create the chain of adapters using the factories in the adaptation offers that compose the path. If this fails because of conditional adaptation (i.e., an adapter factory returns None), the path is discarded and the algorithm looks for the next shortest path. Cycles in adaptation are avoided by only considering path were every adaptation offer is used at most once. .. _migration: Migration guide ``````````````` The implementation of the adaptation mechanism changed in Traits 4.4.0 from one based on PyProtocols to a new, smaller, and more robust implementation. Code written against ``traits.protocols`` will continue to work, although the `traits.protocols` API has been deprecated and its members will log a warning the first time they are accessed. The ``traits.protocols`` package will be removed in Traits 5.0 . This is a list of replacements for the old API: * :class:`traits.protocols.api.AdaptationFailure` Use :class:`traits.api.AdaptationError` instead. * :func:`traits.api.adapts` Use the :func:`traits.api.register_factory` function. * :func:`implements` Use the :func:`traits.api.provides` decorator instead. * :func:`traits.protocols.api.declareAdapter` Use the function :func:`traits.api.register_factory`, or the function :func:`traits.adaptation.api.register_offer` instead. It is no longer necessary to distinguish between "types", "protocols", and "objects". * :func:`traits.protocols.api.declareImplementation` This function was used occasionally to declare that an arbitrary type (e.g., ``dict``) implements an interface. Users that use Python ABCs can use the ``register`` method for achieving the same result. Otherwise, use the function :func:`traits.adaptation.api.register_provides` that declares a "null" adapter to adapt the type to the interface. * Testing if a class is an Interface ``issubclass(klass, Interface)`` is not reliable, use :func:`traits.api.isinterface` instead Gotchas ``````` 1) The adaptation mechanism does not explicitly support old-style classes. Adaptation might work in particular cases but is not guaranteed to work correctly in situations involving old-style classes. When used with Traits, the classes involved in adaptation are typically subclasses of :class:`~.HasTraits`, in which case this is not an issue. 2) The methods :func:`~traits.adaptation.adaptation_manager.register_factory`, :func:`~traits.adaptation.adaptation_manager.adapt`, etc. use a global adaptation manager, which is accessible through the function :func:`~traits.adaptation.adaptation_manager.get_global_adaptation_manager`. The traits automatic adaptation features also use the global manager. Having a global adaptation manager can get you into trouble, for the usual reasons related to having a global state. If you want to have more control over adaptation, we recommend creating a new :class:`~traits.adaptation.adaptation_manager.AdaptationManager` instance, use it directly in your application, and set it as the global manager using :func:`~traits.adaptation.adaptation_manager.set_global_adaptation_manager`. A common issue with the global manager arises in unittesting, where adapters registered in one test influence the outcome of other tests downstream. Tests relying on adaptation should make sure to reset the state of the global adapter using :func:`~traits.adaptation.adaptation_manager.reset_global_adaptation_manager`. Recommended readings about adaptation ````````````````````````````````````` This is a list of interesting readings about adaptation and the adapter pattern outside of Traits: * `PyProtocols `_, a precursor of ``traits.adaptation`` * `PEP 246 `_ on object adaptation * `Article about adapters in Eclipse plugins `_ .. index:: property traits .. _property-traits: Property Traits --------------- The predefined Property() trait factory function defines a Traits-based version of a Python property, with "getter" and "setter" methods. This type of trait provides a powerful technique for defining trait attributes whose values depend on the state of other object attributes. In particular, this can be very useful for creating synthetic trait attributes which are editable or displayable in a TraitUI view. .. _property-factory-function: Property Factory Function ````````````````````````` The Property() function has the following signature: .. function:: Property( [fget=None, fset=None, fvalidate=None, force=False, handler=None, trait=None, **metadata] ) All parameters are optional, including the *fget* "getter", *fvalidate* "validator" and *fset* "setter" methods. If no parameters are specified, then the trait looks for and uses methods on the same class as the attribute that the trait is assigned to, with names of the form _get_\ *name*\ (), _validate_\ *name*\ () and _set_\ *name*\ (), where *name* is the name of the trait attribute. If you specify a trait as either the *fget* parameter or the *trait* parameter, that trait's handler supersedes the *handler* argument, if any. Because the *fget* parameter accepts either a method or a trait, you can define a Property trait by simply passing another trait. For example:: source = Property( Code ) This line defines a trait whose value is validated by the Code trait, and whose getter and setter methods are defined elsewhere on the same class. If a Property trait has only a getter function, it acts as read-only; if it has only a setter function, it acts as write-only. It can lack a function due to two situations: * A function with the appropriate name is not defined on the class. * The *force* option is True, (which requires the Property() factory function to ignore functions on the class) and one of the access functions was not specified in the arguments. .. index:: property traits; caching value .. _caching-a-property-value: Caching a Property Value ```````````````````````` In some cases, the cost of computing the value of a property trait attribute may be very high. In such cases, it is a good idea to cache the most recently computed value, and to return it as the property value without recomputing it. When a change occurs in one of the attributes on which the cached value depends, the cache should be cleared, and the property value should be recomputed the next time its value is requested. .. index:: cached_property decorator, depends_on metadata One strategy to accomplish caching would be to use a private attribute for the cached value, and notification listener methods on the attributes that are depended on. However, to simplify the situation, Property traits support a @cached_property decorator and **depends_on** metadata. Use @cached_property to indicate that a getter method's return value should be cached. Use **depends_on** to indicate the other attributes that the property depends on. .. index:: examples; cached property For example:: # cached_prop.py -- Example of @cached_property decorator from traits.api import HasPrivateTraits, List, Int,\ Property, cached_property class TestScores ( HasPrivateTraits ): scores = List( Int ) average = Property( depends_on = 'scores' ) @cached_property def _get_average ( self ): s = self.scores return (float( reduce( lambda n1, n2: n1 + n2, s, 0 ) ) / len( s )) The @cached_property decorator takes no arguments. Place it on the line preceding the property's getter method. The **depends_on** metadata attribute accepts extended trait references, using the same syntax as the on_trait_change() method's name parameter, described in :ref:`the-name-parameter`. As a result, it can take values that specify attributes on referenced objects, multiple attributes, or attributes that are selected based on their metadata attributes. .. index:: persistence, __getstate__(), __setstate__() .. _persistence: Persistence ----------- In version 3.0, the Traits package provides __getstate__() and __setstate__() methods on HasTraits, to implement traits-aware policies for serialization and deserialization (i.e., pickling and unpickling). .. index:: HasTraits class; pickling, pickling HasTraits objects .. _pickling-hastraits-objects: Pickling HasTraits Objects `````````````````````````` Often, you may wish to control for a HasTraits subclass which parts of an instance's state are saved, and which are discarded. A typical approach is to define a __getstate__() method that copies the object's __dict__ attribute, and deletes those items that should not be saved. This approach works, but can have drawbacks, especially related to inheritance. .. index:: transient; metadata The HasTraits __getstate__() method uses a more generic approach, which developers can customize through the use of traits metadata attributes, often without needing to override or define a __getstate__() method in their application classes. In particular, the HasTraits __getstate__() method discards the values of all trait attributes that have the **transient** metadata attribute set to True, and saves all other trait attributes. So, to mark which trait values should not be saved, you set **transient** to True in the metadata for those trait attributes. The benefits of this approach are that you do not need to override __getstate__(), and that the metadata helps document the pickling behavior of the class. .. index:: examples; transient metadata For example:: # transient_metadata.py -- Example of using 'transient' metadata from traits.api import HasTraits, File, Any class DataBase ( HasTraits ): # The name of the data base file: file_name = File # The open file handle used to access the data base: file = Any( transient = True ) In this example, the DataBase class's file trait is marked as transient because it normally contains an open file handle used to access a data base. Since file handles typically cannot be pickled and restored, the file handle should not be saved as part of the object's persistent state. Normally, the file handle would be re-opened by application code after the object has been restored from its persisted state. .. index:: transient; predefined traits .. _predefined-transient-traits: Predefined Transient Traits ``````````````````````````` A number of the predefined traits in the Traits package are defined with **transient** set to True, so you do not need to explicitly mark them. The automatically transient traits are: * Constant * Event * Read-only and write-only Property traits (See :ref:`property-factory-function`) * Shadow attributes for mapped traits (See :ref:`mapped-traits`) * Private attributes of HasPrivateTraits subclasses (See :ref:`hasprivatetraits`) * Delegate traits that do not have a local value overriding the delegation. Delegate traits with a local value are non-transient, i.e., they are serialized. (See :ref:`delegatesto`) You can mark a Delegate trait as transient if you do not want its value to ever be serialized. .. index:: __getstate__(); overriding .. _overriding_getstate: Overriding __getstate__() ````````````````````````` In general, try to avoid overriding __getstate__() in subclasses of HasTraits. Instead, mark traits that should not be pickled with ``transient = True`` metadata. However, in cases where this strategy is insufficient, use the following pattern to override __getstate__() to remove items that should not be persisted:: def __getstate__ ( self ): state = super( XXX, self ).__getstate__() for key in [ 'foo', 'bar' ]: if key in state: del state[ key ] return state .. index:: unpickling HasTraits objects, HasTraits class; unpickling .. _unpicking-hastraits-objects: Unpickling HasTraits Objects ```````````````````````````` The __setstate__() method of HasTraits differs from the default Python behavior in one important respect: it explicitly sets the value of each attribute using the values from the state dictionary, rather than simply storing or copying the entire state dictionary to its **__dict__** attribute. While slower, this strategy has the advantage of generating trait change notifications for each attribute. These notifications are important for classes that rely on them to ensure that their internal object state remains consistent and up to date. .. index:: __setstate__(); overriding .. _overriding-setstate: Overriding __setstate__() ````````````````````````` You may wish to override the HasTraits __setstate__() method, for example for classes that do not need to receive trait change notifications, and where the overhead of explicitly setting each attribute is undesirable. You can override __setstate__() to update the object's __dict__ directly. However, in such cases, it is important ensure that trait notifications are properly set up so that later change notifications are handled. You can do this in two ways: * Call the __setstate__() super method (for example, with an empty state dictionary). * Call the HasTraits class's private _init_trait_listeners() method; this method has no parameters and does not return a result. .. index:: HasTraits class; methods .. _useful-methods-on-hastraits: Useful Methods on HasTraits --------------------------- The HasTraits class defines a number of methods, which are available to any class derived from it, i.e., any class that uses trait attributes. This section provides examples of a sampling of these methods. Refer to the *Traits API Reference* for a complete list of HasTraits methods. .. index:: add_trait() .. _add-trait: add_trait() ``````````` This method adds a trait attribute to an object dynamically, after the object has been created. For more information, see :ref:`per-object-trait-attributes`. .. index:: clone_traits() .. _clone-traits: clone_traits() `````````````` This method copies trait attributes from one object to another. It can copy specified attributes, all explicitly defined trait attributes, or all explicitly and implicitly defined trait attributes on the source object. This method is useful if you want to allow a user to edit a clone of an object, so that changes are made permanent only when the user commits them. In such a case, you might clone an object and its trait attributes; allow the user to modify the clone; and then re-clone only the trait attributes back to the original object when the user commits changes. .. index:: set() .. _set: set() ````` This method takes a list of keyword-value pairs, and sets the trait attribute corresponding to each keyword to the matching value. This shorthand is useful when a number of trait attributes need to be set on an object, or a trait attribute value needs to be set in a lambda function. For example:: person.set(name='Bill', age=27) The statement above is equivalent to the following:: person.name = 'Bill' person.age = 27 .. index:: add_class_trait() .. _add-class-trait: add_class_trait() ````````````````` The add_class_trait() method is a class method, while the preceding HasTraits methods are instance methods. This method is very similar to the add_trait() instance method. The difference is that adding a trait attribute by using add_class_trait() is the same as having declared the trait as part of the class definition. That is, any trait attribute added using add_class_trait() is defined in every subsequently-created instance of the class, and in any subsequently-defined subclasses of the class. In contrast, the add_trait() method adds the specified trait attribute only to the object instance it is applied to. In addition, if the name of the trait attribute ends with a '_', then a new (or replacement) prefix rule is added to the class definition, just as if the prefix rule had been specified statically in the class definition. It is not possible to define new prefix rules using the add_trait() method. One of the main uses of the add_class_trait() method is to add trait attribute definitions that could not be defined statically as part of the body of the class definition. This occurs, for example, when two classes with trait attributes are being defined and each class has a trait attribute that should contain a reference to the other. For the class that occurs first in lexical order, it is not possible to define the trait attribute that references the other class, since the class it needs to refer to has not yet been defined. .. index:: pair: examples; add_class_trait() This is illustrated in the following example:: # circular_definition.py --- Non-working example of mutually- # referring classes from traits.api import HasTraits, Trait class Chicken(HasTraits): hatched_from = Trait(Egg) class Egg(HasTraits): created_by = Trait(Chicken) As it stands, this example will not run because the **hatched_from** attribute references the Egg class, which has not yet been defined. Reversing the definition order of the classes does not fix the problem, because then the **created_by** trait references the Chicken class, which has not yet been defined. The problem can be solved using the add_class_trait() method, as shown in the following code:: # add_class_trait.py --- Example of mutually-referring classes # using add_class_trait() from traits.api import HasTraits, Trait class Chicken(HasTraits): pass class Egg(HasTraits): created_by = Trait(Chicken) Chicken.add_class_trait('hatched_from', Egg) .. index:: performance of Traits .. _performance-considerations-of-traits: Performance Considerations of Traits ------------------------------------ Using traits can potentially impose a performance penalty on attribute access over and above that of normal Python attributes. For the most part, this penalty, if any, is small, because the core of the Traits package is written in C, just like the Python interpreter. In fact, for some common cases, subclasses of HasTraits can actually have the same or better performance than old or new style Python classes. However, there are a couple of performance-related factors to keep in mind when defining classes and attributes using traits: * Whether a trait attribute defers its value through delegation or prototyping * The complexity of a trait definition If a trait attribute does not defer its value, the performance penalty can be characterized as follows: * Getting a value: No penalty (i.e., standard Python attribute access speed or faster) * Setting a value: Depends upon the complexity of the validation tests performed by the trait definition. Many of the predefined trait handlers defined in the Traits package support fast C-level validation. For most of these, the cost of validation is usually negligible. For other trait handlers, with Python-level validation methods, the cost can be quite a bit higher. If a trait attribute does defer its value, the cases to be considered are: * Getting the default value: Cost of following the deferral chain. The chain is resolved at the C level, and is quite fast, but its cost is linear with the number of deferral links that must be followed to find the default value for the trait. * Getting an explicitly assigned value for a prototype: No penalty (i.e., standard Python attribute access speed or faster) * Getting an explicitly assigned value for a delegate: Cost of following the deferral chain. * Setting: Cost of following the deferral chain plus the cost of performing the validation of the new value. The preceding discussions about deferral chain following and fast versus slow validation apply here as well. In a typical application scenario, where attributes are read more often than they are written, and deferral is not used, the impact of using traits is often minimal, because the only cost occurs when attributes are assigned and validated. The worst case scenario occurs when deferral is used heavily, either for delegation, or for prototyping to provide attributes with default values that are seldom changed. In this case, the cost of frequently following deferral chains may impose a measurable performance detriment on the application. Of course, this is offset by the convenience and flexibility provided by the deferral model. As with any powerful tool, it is best to understand its strengths and weaknesses and apply that understanding in determining when use of the tool is justified and appropriate. traits-4.5.0/docs/source/traits_user_manual/custom.rst000066400000000000000000000504711233213561600232340ustar00rootroot00000000000000.. index:: custom traits .. _custom-traits: ============= Custom Traits ============= The predefined traits such as those described in :ref:`predefined-traits` are handy shortcuts for commonly used types. However, the Traits package also provides facilities for defining complex or customized traits: * Subclassing of traits * The Trait() factory function * Predefined or custom trait handlers .. index:: subclassing traits, TraitType class .. _trait-subclassing: Trait Subclassing ----------------- Starting with Traits version 3.0, most predefined traits are defined as subclasses of traits.trait_handlers.TraitType. As a result, you can subclass one of these traits, or TraitType, to derive new traits. Refer to the *Traits API Reference* to see whether a particular predefined trait derives from TraitType. .. index:: pair: subclassing traits; examples Here's an example of subclassing a predefined trait class:: # trait_subclass.py -- Example of subclassing a trait class from traits.api import BaseInt class OddInt ( BaseInt ): # Define the default value default_value = 1 # Describe the trait type info_text = 'an odd integer' def validate ( self, object, name, value ): value = super(OddInt, self).validate(object, name, value) if (value % 2) == 1: return value self.error( object, name, value ) The OddInt class defines a trait that must be an odd integer. It derives from BaseInt, rather than Int, as you might initially expect. BaseInt and Int are exactly the same, except that Int has a **fast_validate attribute**, which causes it to quickly check types at the C level, not go through the expense of executing the general validate() method. [6]_ As a subclass of BaseInt, OddInt can reuse and change any part of the BaseInt class behavior that it needs to. In this case, it reuses the BaseInt class's validate() method, via the call to super() in the OddInt validate() method. Further, OddInt is related to BaseInt, which can be useful as documentation, and in programming. You can use the subclassing strategy to define either a trait type or a trait property, depending on the specific methods and class constants that you define. A trait type uses a validate() method, while a trait property uses get() and set() methods. .. index: trait type; defining .. _defining-a-trait-type: Defining a Trait Type ````````````````````` The members that are specific to a trait type subclass are: .. index:: default_value attribute, get_default_value() * validate() method * post_setattr() method * **default_value** attribute or get_default_value() method Of these, only the validate() method must be overridden in trait type subclasses. A trait type uses a validate() method to determine the validity of values assigned to the trait. Optionally, it can define a post_setattr() method, which performs additional processing after a value has been validated and assigned. The signatures of these methods are: .. method:: validate( object, name, value ) .. method:: post_setattr( object, name, value ) The parameters of these methods are: .. index:: object parameter; validate(), name parameter; validate() .. index:: value parameter; validate() * *object*: The object whose trait attribute whose value is being assigned. * *name*: The name of the trait attribute whose value is being assigned. * *value*: The value being assigned. The validate() method returns either the original value or any suitably coerced or adapted value that is legal for the trait. If the value is not legal, and cannot be coerced or adapted to be legal, the method must either raise a TraitError, or calls the error() method to raise a TraitError on its behalf. The subclass can define a default value either as a constant or as a computed value. To use a constant, set the class-level **default_value attribute**. To compute the default value, override the TraitType class's get_default_value() method. .. index:: trait property; defining .. _defining-a-trait-property: Defining a Trait Property ````````````````````````` A trait property uses get() and set() methods to interact with the value of the trait. If a TraitType subclass contains a get() method or a set() method, any definition it might have for validate() is ignored. The signatures of these methods are: .. method:: get( object, name) .. method:: set( object, name, value) In these signatures, the parameters are: * *object*: The object that the property applies to. * *name*: The name of the trait property attribute on the object. * *value*: The value being assigned to the property. If only a get() method is defined, the property behaves as read-only. If only a set() method is defined, the property behaves as write-only. The get() method returns the value of the *name* property for the specified object. The set() method does not return a value, but will raise a TraitError if the specified *value* is not valid, and cannot be coerced or adapted to a valid value. .. index:: TraitType class; members .. _other-traittype-members: Other TraitType Members ``````````````````````` The following members can be specified for either a trait type or a trait property: .. index:: info_text attribute, info(), init(), create_editor() * **info_text** attribute or info() method * init() method * create_editor() method A trait must have an information string that describes the values accepted by the trait type (for example 'an odd integer'). Similarly to the default value, the subclass's information string can be either a constant string or a computed string. To use a constant, set the class-level info_text attribute. To compute the info string, override the TraitType class's info() method, which takes no parameters. If there is type-specific initialization that must be performed when the trait type is created, you can override the init() method. This method is automatically called from the __init__() method of the TraitType class. If you want to specify a default TraitsUI editor for the new trait type, you can override the create_editor() method. This method has no parameters, and returns the default trait editor to use for any instances of the type. For complete details on the members that can be overridden, refer to the *Traits API Reference* sections on the TraitType and BaseTraitHandler classes. .. index:: Trait() .. _the-trait-factory-function: The Trait() Factory Function ---------------------------- The Trait() function is a generic factory for trait definitions. It has many forms, many of which are redundant with the predefined shortcut traits. For example, the simplest form Trait(default_value), is equivalent to the functions for simple types described in :ref:`predefined-traits-for-simple-types`. For the full variety of forms of the Trait() function, refer to the *Traits API Reference*. The most general form of the Trait() function is: .. currentmodule:: traits.traits .. function:: Trait(default_value, {type | constant_value | dictionary | class | function | trait_handler | trait }+ ) :noindex: .. index:: compound traits The notation ``{ | | }+`` means a list of one or more of any of the items listed between the braces. Thus, this form of the function consists of a default value, followed by one or more of several possible items. A trait defined with multiple items is called a compound trait. When more than one item is specified, a trait value is considered valid if it meets the criteria of at least one of the items in the list. .. index:: pair: Trait() function; examples The following is an example of a compound trait with multiple criteria:: # compound.py -- Example of multiple criteria in a trait definition from traits.api import HasTraits, Trait, Range class Die ( HasTraits ): # Define a compound trait definition: value = Trait( 1, Range( 1, 6 ), 'one', 'two', 'three', 'four', 'five', 'six' ) The Die class has a **value trait**, which has a default value of 1, and can have any of the following values: * An integer in the range of 1 to 6 * One of the following strings: 'one', 'two', 'three', 'four', 'five', 'six' .. index:: Trait(); parameters .. _trait-parameters: Trait () Parameters ``````````````````` The items listed as possible arguments to the Trait() function merit some further explanation. .. index:: type; parameter to Trait(), constant_value parameter to Trait() .. index:: dictionary parameter to Trait(), class parameter to Trait() .. index:: function parameter to Trait(), trait handler; parameter to Trait() .. index:: trait; parameter to Trait() * *type*: See :ref:`type`. * *constant_value*: See :ref:`constant-value`. * *dictionary*: See :ref:`mapped-traits`. * *class*: Specifies that the trait value must be an instance of the specified class or one of its subclasses. * *function*: A "validator" function that determines whether a value being assigned to the attribute is a legal value. Traits version 3.0 provides a more flexible approach, which is to subclass an existing trait (or TraitType) and override the validate() method. * *trait_handler*: See :ref:`trait-handlers`. * *trait*: Another trait object can be passed as a parameter; any value that is valid for the specified trait is also valid for the trait referencing it. .. index:: type; parameter to Trait() .. _type: Type :::: A *type* parameter to the Trait() function can be any of the following standard Python types: * str or StringType * unicode or UnicodeType * int or IntType * long or LongType * float or FloatType * complex or ComplexType * bool or BooleanType * list or ListType * tuple or TupleType * dict or DictType * FunctionType * MethodType * ClassType * InstanceType * TypeType * NoneType Specifying one of these types means that the trait value must be of the corresponding Python type. .. index:: constant_value parameter to Trait() .. _constant-value: Constant Value :::::::::::::: A *constant_value* parameter to the Trait() function can be any constant belonging to one of the following standard Python types: * NoneType * int * long * float * complex * bool * str * unicode Specifying a constant means that the trait can have the constant as a valid value. Passing a list of constants to the Trait() function is equivalent to using the Enum predefined trait. .. index:: mapped traits .. _mapped-traits: Mapped Traits ````````````` If the Trait() function is called with parameters that include one or more dictionaries, then the resulting trait is called a "mapped" trait. In practice, this means that the resulting object actually contains two attributes: .. index:: shadow values * An attribute whose value is a key in the dictionary used to define the trait. * An attribute containing its corresponding value (i.e., the mapped or "shadow" value). The name of the shadow attribute is simply the base attribute name with an underscore appended. Mapped traits can be used to allow a variety of user-friendly input values to be mapped to a set of internal, program-friendly values. .. index:: mapped traits; examples The following examples illustrates mapped traits that map color names to tuples representing red, green, blue, and transparency values:: # mapped.py --- Example of a mapped trait from traits.api import HasTraits, Trait standard_color = Trait ('black', {'black': (0.0, 0.0, 0.0, 1.0), 'blue': (0.0, 0.0, 1.0, 1.0), 'cyan': (0.0, 1.0, 1.0, 1.0), 'green': (0.0, 1.0, 0.0, 1.0), 'magenta': (1.0, 0.0, 1.0, 1.0), 'orange': (0.8, 0.196, 0.196, 1.0), 'purple': (0.69, 0.0, 1.0, 1.0), 'red': (1.0, 0.0, 0.0, 1.0), 'violet': (0.31, 0.184, 0.31, 1.0), 'yellow': (1.0, 1.0, 0.0, 1.0), 'white': (1.0, 1.0, 1.0, 1.0), 'transparent': (1.0, 1.0, 1.0, 0.0) } ) red_color = Trait ('red', standard_color) class GraphicShape (HasTraits): line_color = standard_color fill_color = red_color The GraphicShape class has two attributes: **line_color** and **fill_color**. These attributes are defined in terms of the **standard_color** trait, which uses a dictionary. The **standard_color** trait is a mapped trait, which means that each GraphicShape instance has two shadow attributes: **line_color_** and **fill_color_**. Any time a new value is assigned to either **line_color** or **fill_color**, the corresponding shadow attribute is updated with the value in the dictionary corresponding to the value assigned. For example:: >>> import mapped >>> my_shape1 = mapped.GraphicShape() >>> print my_shape1.line_color, my_shape1.fill_color black red >>> print my_shape1.line_color_, my_shape1.fill_color_ (0.0, 0.0, 0.0, 1.0) (1.0, 0.0, 0.0, 1.0) >>> my_shape2 = mapped.GraphicShape() >>> my_shape2.line_color = 'blue' >>> my_shape2.fill_color = 'green' >>> print my_shape2.line_color, my_shape2.fill_color blue green >>> print my_shape2.line_color_, my_shape2.fill_color_ (0.0, 0.0, 1.0, 1.0) (0.0, 1.0, 0.0, 1.0) This example shows how a mapped trait can be used to create a user-friendly attribute (such as **line_color**) and a corresponding program-friendly shadow attribute (such as **line_color_**). The shadow attribute is program-friendly because it is usually in a form that can be directly used by program logic. There are a few other points to keep in mind when creating a mapped trait: * If not all values passed to the Trait() function are dictionaries, the non-dictionary values are copied directly to the shadow attribute (i.e., the mapping used is the identity mapping). * Assigning directly to a shadow attribute (the attribute with the trailing underscore in the name) is not allowed, and raises a TraitError. The concept of a mapped trait extends beyond traits defined via a dictionary. Any trait that has a shadow value is a mapped trait. For example, for the Expression trait, the assigned value must be a valid Python expression, and the shadow value is the compiled form of the expression. .. index:: trait handler; classes .. _trait-handlers: Trait Handlers -------------- In some cases, you may want to define a customized trait that is unrelated to any predefined trait behavior, or that is related to a predefined trait that happens to not be derived from TraitType. The option for such cases is to use a trait handler, either a predefined one or a custom one that you write. .. index:: TraitHandler class A trait handler is an instance of the traits.trait_handlers.TraitHandler class, or of a subclass, whose task is to verify the correctness of values assigned to object traits. When a value is assigned to an object trait that has a trait handler, the trait handler's validate() method checks the value, and assigns that value or a computed value, or raises a TraitError if the assigned value is not valid. Both TraitHandler and TraitType derive from BaseTraitHandler; TraitHandler has a more limited interface. The Traits package provides a number of predefined TraitHandler subclasses. A few of the predefined trait handler classes are described in the following sections. These sections also demonstrate how to define a trait using a trait handler and the Trait() factory function. For a complete list and descriptions of predefined TraitHandler subclasses, refer to the *Traits API Reference*, in the section on the traits.trait_handlers module. .. index:: TraitPrefixList class .. _traitprefixlist: TraitPrefixList ``````````````` The TraitPrefixList handler accepts not only a specified set of strings as values, but also any unique prefix substring of those values. The value assigned to the trait attribute is the full string that the substring matches. .. index:: pair: TraitPrefixList class; examples For example:: >>> from traits.api import HasTraits, Trait >>> from traits.api import TraitPrefixList >>> class Alien(HasTraits): ... heads = Trait('one', TraitPrefixList(['one','two','three'])) ... >>> alf = Alien() >>> alf.heads = 'o' >>> print alf.heads one >>> alf.heads = 'tw' >>> print alf.heads two >>> alf.heads = 't' # Error, not a unique prefix Traceback (most recent call last): File "", line 1, in File "c:\svn\ets3\traits_3.0.3\enthought\traits\trait_handlers.py", line 1802, in validate self.error( object, name, value ) File "c:\svn\ets3\traits_3.0.3\enthought\traits\trait_handlers.py", line 175, in error value ) traits.trait_errors.TraitError: The 'heads' trait of an Alien instance must be 'one' or 'two' or 'three' (or any unique prefix), but a value of 't' was specified. .. index:: TraitPrefixMap class .. _traitprefixmap: TraitPrefixMap `````````````` The TraitPrefixMap handler combines the TraitPrefixList with mapped traits. Its constructor takes a parameter that is a dictionary whose keys are strings. A string is a valid value if it is a unique prefix for a key in the dictionary. The value assigned is the dictionary value corresponding to the matched key. .. index:: pair: TraitPrefixMap class; examples The following example uses TraitPrefixMap to define a Boolean trait that accepts any prefix of 'true', 'yes', 'false', or 'no', and maps them to 1 or 0. :: # traitprefixmap.py --- Example of using the TraitPrefixMap handler from traits.api import Trait, TraitPrefixMap boolean_map = Trait('true', TraitPrefixMap( { 'true': 1, 'yes': 1, 'false': 0, 'no': 0 } ) ) .. index:: handler classes; custom .. _custom-trait-handlers: Custom Trait Handlers --------------------- If you need a trait that cannot be defined using a predefined trait handler class, you can create your own subclass of TraitHandler. The constructor (i.e., __init__() method) for your TraitHandler subclass can accept whatever additional information, if any, is needed to completely specify the trait. The constructor does not need to call the TraitHandler base class's constructor. The only method that a custom trait handler must implement is validate(). Refer to the *Traits API Reference* for details about this function. .. index:: pair: custom trait handler; examples .. _example-custom-trait-handler: Example Custom Trait Handler ```````````````````````````` The following example defines the OddInt trait (also implemented as a trait type in :ref:`defining-a-trait-type`) using a TraitHandler subclass. :: # custom_traithandler.py --- Example of a custom TraitHandler import types from traits.api import TraitHandler class TraitOddInteger(TraitHandler): def validate(self, object, name, value): if ((type(value) is types.IntType) and (value > 0) and ((value % 2) == 1)): return value self.error(object, name, value) def info(self): return '**a positive odd integer**' An application could use this new trait handler to define traits such as the following:: # use_custom_th.py --- Example of using a custom TraitHandler from traits.api import HasTraits, Trait, TraitRange from custom_traithandler import TraitOddInteger class AnOddClass(HasTraits): oddball = Trait(1, TraitOddInteger()) very_odd = Trait(-1, TraitOddInteger(), TraitRange(-10, -1)) The following example demonstrates why the info() method returns a phrase rather than a complete sentence:: >>> from use_custom_th import AnOddClass >>> odd_stuff = AnOddClass() >>> odd_stuff.very_odd = 0 Traceback (most recent call last): File "test.py", line 25, in ? odd_stuff.very_odd = 0 File "C:\wrk\src\lib\enthought\traits\traits.py", line 1119, in validate raise TraitError, excp traits.traits.TraitError: The 'very_odd' trait of an AnOddClass instance must be **a positive odd integer** or -10 <= an integer <= -1, but a value of 0 was specified. Note the emphasized result returned by the info() method, which is embedded in the exception generated by the invalid assignment. .. rubric:: Footnotes .. [6] All of the basic predefined traits (such as Float and Str) have a BaseType version that does not have the **fast_validate** attribute. traits-4.5.0/docs/source/traits_user_manual/deferring.rst000066400000000000000000000255161233213561600236710ustar00rootroot00000000000000.. index:: deferral .. _deferring-traits: Deferring Trait Definitions =========================== One of the advanced capabilities of the Traits package is its support for trait attributes to defer their definition and value to another object than the one the attribute is defined on. This has many applications, especially in cases where objects are logically contained within other objects and may wish to inherit or derive some attributes from the object they are contained in or associated with. Deferring leverages the common "has-a" relationship between objects, rather than the "is-a" relationship that class inheritance provides. .. index:: delegation, prototyping There are two ways that a trait attribute can defer to another object's attribute: *delegation* and *prototyping*. In delegation, the deferring attribute is a complete reflection of the delegate attribute. Both the value and validation of the delegate attribute are used for the deferring attribute; changes to either one are reflected in both. In prototyping, the deferring attribute gets its value and validation from the prototype attribute, *until the deferring attribute is explicitly changed*. At that point, while the deferring attribute still uses the prototype's validation, the link between the values is broken, and the two attributes can change independently. This is essentially a "copy on write" scheme. The concepts of delegation and prototyping are implemented in the Traits package by two classes derived from TraitType: DelegatesTo and PrototypedFrom. [5]_ .. _delegatesto: DelegatesTo ----------- .. class:: DelegatesTo(delegate[, prefix='', listenable=True, **metadata]) .. index:: delegate parameter to DelegatesTo initializer The *delegate* parameter is a string that specifies the name of an attribute on the same object, which refers to the object whose attribute is deferred to; it is usually an Instance trait. The value of the delegating attribute changes whenever: * The value of the appropriate attribute on the delegate object changes. * The object referenced by the trait named in the *delegate* parameter changes. * The delegating attribute is explicitly changed. Changes to the delegating attribute are propagated to the delegate object's attribute. The *prefix* and *listenable* parameters to the initializer function specify additional information about how to do the delegation. .. index:: pair: delegation; examples If *prefix* is the empty string or omitted, the delegation is to an attribute of the delegate object with the same name as the trait defined by the DelegatesTo object. Consider the following example:: # delegate.py --- Example of trait delegation from traits.api \ import DelegatesTo, HasTraits, Instance, Str class Parent(HasTraits): first_name = Str last_name = Str class Child(HasTraits): first_name = Str last_name = DelegatesTo('father') father = Instance(Parent) mother = Instance(Parent) """ >>> tony = Parent(first_name='Anthony', last_name='Jones') >>> alice = Parent(first_name='Alice', last_name='Smith') >>> sally = Child( first_name='Sally', father=tony, mother=alice) >>> print sally.last_name Jones >>> sally.last_name = 'Cooper' # Updates delegatee >>> print tony.last_name Cooper >>> sally.last_name = sally.mother # ERR: string expected Traceback (most recent call last): File "", line 1, in ? File "c:\src\trunk\enthought\traits\trait_handlers.py", line 163, in error raise TraitError, ( object, name, self.info(), value ) traits.trait_errors.TraitError: The 'last_name' trait of a Parent instance must be a string, but a value of <__main__.Parent object at 0x014D6D80> was specified. """ A Child object delegates its **last_name** attribute value to its **father** object's **last_name** attribute. Because the *prefix* parameter was not specified in the DelegatesTo initializer, the attribute name on the delegatee is the same as the original attribute name. Thus, the **last_name** of a Child is the same as the **last_name** of its **father**. When either the **last_name** of the Child or the **last_name** of the father is changed, both attributes reflect the new value. .. _prototypedfrom: PrototypedFrom -------------- .. class:: PrototypedFrom(prototype[, prefix='', listenable=True, **metadata]) .. index:: prototype parameter to PrototypesFrom The *prototype* parameter is a string that specifies the name of an attribute on the same object, which refers to the object whose attribute is prototyped; it is usually an Instance trait. The prototyped attribute behaves similarly to a delegated attribute, until it is explicitly changed; from that point forward, the prototyped attribute changes independently from its prototype. The *prefix* and *listenable* parameters to the initializer function specify additional information about how to do the prototyping. .. _keyword-parameters: Keyword Parameters ------------------ The *prefix* and *listenable* parameters of the DelegatesTo and PrototypedFrom initializer functions behave similarly for both classes. .. index:: prefix parameter to initializer methods .. _prefix-keyword: Prefix Keyword `````````````` When the *prefix* parameter is a non-empty string, the rule for performing trait attribute look-up in the deferred-to object is modified, with the modification depending on the format of the prefix string: * If *prefix* is a valid Python attribute name, then the original attribute name is replaced by prefix when looking up the deferred-to attribute. * If *prefix* ends with an asterisk ('*'), and is longer than one character, then *prefix*, minus the trailing asterisk, is added to the front of the original attribute name when looking up the object attribute. * If *prefix* is equal to a single asterisk ('*'), the value of the object class's **__prefix__** attribute is added to the front of the original attribute name when looking up the object attribute. .. index:: single: examples; prototype prefix pair: examples; prototyping Each of these three possibilities is illustrated in the following example, using PrototypedFrom:: # prototype_prefix.py --- Examples of PrototypedFrom() # prefix parameter from traits.api import \ PrototypedFrom, Float, HasTraits, Instance, Str class Parent (HasTraits): first_name = Str family_name = '' favorite_first_name = Str child_allowance = Float(1.00) class Child (HasTraits): __prefix__ = 'child_' first_name = PrototypedFrom('mother', 'favorite_*') last_name = PrototypedFrom('father', 'family_name') allowance = PrototypedFrom('father', '*') father = Instance(Parent) mother = Instance(Parent) """ >>> fred = Parent( first_name = 'Fred', family_name = 'Lopez', \ ... favorite_first_name = 'Diego', child_allowance = 5.0 ) >>> maria = Parent(first_name = 'Maria', family_name = 'Gonzalez',\ ... favorite_first_name = 'Tomas', child_allowance = 10.0 ) >>> nino = Child( father=fred, mother=maria ) >>> print '%s %s gets $%.2f for allowance' % (nino.first_name, \ ... nino.last_name, nino.allowance) Tomas Lopez gets $5.00 for allowance """ In this example, instances of the Child class have three prototyped trait attributes: * **first_name**, which prototypes from the **favorite_first_name** attribute of its **mother** object. * **last_name**, which prototyped from the **family_name attribute** of its **father** object. * **allowance**, which prototypes from the **child_allowance** attribute of its **father** object. .. index:: listenable parameter to initializer methods .. _listenable-keyword: Listenable Keyword `````````````````` By default, you can attach listeners to deferred trait attributes, just as you can attach listeners to most other trait attributes, as described in the following section. However, implementing the notifications correctly requires hooking up complicated listeners under the covers. Hooking up these listeners can be rather more expensive than hooking up other listeners. Since a common use case of deferring is to have a large number of deferred attributes for static object hierarchies, this feature can be turned off by setting ``listenable=False`` in order to speed up instantiation. .. index:: single: deferral; notification with pair: examples; deferral .. _notification-with-deferring: Notification with Deferring --------------------------- While two trait attributes are linked by a deferring relationship (either delegation, or prototyping before the link is broken), notifications for changes to those attributes are linked as well. When the value of a deferred-to attribute changes, notification is sent to any handlers on the deferring object, as well as on the deferred-to object. This behavior is new in Traits version 3.0. In previous versions, only handlers for the deferred-to object (the object directly changed) were notified. This behavior is shown in the following example:: # deferring_notification.py -- Example of notification with deferring from traits.api \ import HasTraits, Instance, PrototypedFrom, Str class Parent ( HasTraits ): first_name = Str last_name = Str def _last_name_changed(self, new): print "Parent's last name changed to %s." % new class Child ( HasTraits ): father = Instance( Parent ) first_name = Str last_name = PrototypedFrom( 'father' ) def _last_name_changed(self, new): print "Child's last name changed to %s." % new """ >>> dad = Parent( first_name='William', last_name='Chase' ) Parent's last name changed to Chase. >>> son = Child( first_name='John', father=dad ) Child's last name changed to Chase. >>> dad.last_name='Jones' Parent's last name changed to Jones. Child's last name changed to Jones. >>> son.last_name='Thomas' Child's last name changed to Thomas. >>> dad.last_name='Riley' Parent's last name changed to Riley. >>> del son.last_name Child's last name changed to Riley. >>> dad.last_name='Simmons' Parent's last name changed to Simmons. Child's last name changed to Simmons. """ Initially, changing the last name of the father triggers notification on both the father and the son. Explicitly setting the son's last name breaks the deferring link to the father; therefore changing the father's last name does not notify the son. When the son reverts to using the father's last name (by deleting the explicit value), changes to the father's last name again affect and notif .. rubric:: Footnotes .. [5] Both of these class es inherit from the Delegate class. Explicit use of Delegate is deprecated, as its name and default behavior (prototyping) are incongruous. traits-4.5.0/docs/source/traits_user_manual/defining.rst000066400000000000000000001015551233213561600235050ustar00rootroot00000000000000.. index:: validation, using traits .. _defining-traits-initialization-and-validation: ============================================== Defining Traits: Initialization and Validation ============================================== Using the Traits package in a Python program involves the following steps: .. index:: importing Traits names, traits.api; importing from 1. Import the names you need from the Traits package traits.api. 2. Define the traits you want to use. .. index:: HasTraits class 3. Define classes derived from HasTraits (or a subclass of HasTraits), with attributes that use the traits you have defined. In practice, steps 2 and 3 are often combined by defining traits in-line in an attribute definition. This strategy is used in many examples in this guide. However, you can also define traits independently, and reuse the trait definitions across multiple classes and attributes (see :ref:`reusing-trait-definitions`). In order to use trait attributes in a class, the class must inherit from the HasTraits class in the Traits package (or from a subclass of HasTraits). The following example defines a class called Person that has a single trait attribute **weight**, which is initialized to 150.0 and can only take floating point values. .. index:: single: examples; minimal :: # minimal.py --- Minimal example of using traits. from traits.api import HasTraits, Float class Person(HasTraits): weight = Float(150.0) .. index:: attribute definition In this example, the attribute named **weight** specifies that the class has a corresponding trait called **weight**. The value associated with the attribute **weight** (i.e., ``Float(150.0)``) specifies a predefined trait provided with the Traits package, which requires that values assigned be of the standard Python type **float**. The value 150.0 specifies the default value of the trait. The value associated with each class-level attribute determines the characteristics of the instance attribute identified by the attribute name. For example:: >>> from minimal import Person >>> # instantiate the class >>> joe = Person() >>> # Show the default value >>> joe.weight 150.0 >>> # Assign new values >>> joe.weight = 161.9 # OK to assign a float >>> joe.weight = 162 # OK to assign an int >>> joe.weight = 'average' # Error to assign a string Traceback (most recent call last): File "", line 1, in File "c:\svn\ets3\traits\enthought\traits\trait_handlers.py", line 175, in error value ) traits.trait_errors.TraitError: The 'weight' trait of a Person instance must be a float, but a value of 'average' was specified. In this example, **joe** is an instance of the Person class defined in the previous example. The **joe** object has an instance attribute **weight**, whose initial value is the default value of the Person.weight trait (150.0), and whose assignment is governed by the Person.weight trait's validation rules. Assigning an integer to **weight** is acceptable because there is no loss of precision (but assigning a float to an Int trait would cause an error). The Traits package allows creation of a wide variety of trait types, ranging from very simple to very sophisticated. The following section presents some of the simpler, more commonly used forms. .. index:: predefined traits .. _predefined-traits: Predefined Traits ----------------- The Traits package includes a large number of predefined traits for commonly used Python data types. In the simplest case, you can assign the trait name to an attribute of a class derived from HasTraits; any instances of the class will have that attribute initialized to the built-in default value for the trait. For example:: account_balance = Float This statement defines an attribute whose value must be a floating point number, and whose initial value is 0.0 (the built-in default value for Floats). If you want to use an initial value other than the built-in default, you can pass it as an argument to the trait:: account_balance = Float(10.0) Most predefined traits are callable, [2]_ and can accept a default value and possibly other arguments; all that are callable can also accept metadata as keyword arguments. (See :ref:`other-predefined-traits` for information on trait signatures, and see :ref:`trait-metadata` for information on metadata arguments.) .. index:: simple types .. _predefined-traits-for-simple-types: Predefined Traits for Simple Types `````````````````````````````````` There are two categories of predefined traits corresponding to Python simple types: those that coerce values, and those that cast values. These categories vary in the way that they handle assigned values that do not match the type explicitly defined for the trait. However, they are similar in terms of the Python types they correspond to, and their built-in default values, as listed in the following table. .. index:: pair: types; casting pair: types; coercing pair: plain; integer type pair: long; integer type pair: type; string pair: type; Unicode .. index:: Boolean type, Bool trait, CBool trait, Complex trait, CComplex trait .. index:: complex number type, Float trait, CFloat trait, Int trait, CInt trait .. index:: floating point number type, Long trait, CLong trait, Str trait .. index:: CStr trait, Unicode; trait, CUnicode trait .. _predefined-defaults-for-simple-types-table: .. rubric:: Predefined defaults for simple types ============== ============= ====================== ====================== Coercing Trait Casting Trait Python Type Built-in Default Value ============== ============= ====================== ====================== Bool CBool Boolean False Complex CComplex Complex number 0+0j Float CFloat Floating point number 0.0 Int CInt Plain integer 0 Long CLong Long integer 0L Str CStr String '' Unicode CUnicode Unicode u'' ============== ============= ====================== ====================== .. index:: pair: types; coercing .. _trait-type-coercion: Trait Type Coercion ::::::::::::::::::: For trait attributes defined using the predefined "coercing" traits, if a value is assigned to a trait attribute that is not of the type defined for the trait, but it can be coerced to the required type, then the coerced value is assigned to the attribute. If the value cannot be coerced to the required type, a TraitError exception is raised. Only widening coercions are allowed, to avoid any possible loss of precision. The following table lists traits that coerce values, and the types that each coerces. .. index:: pair: types; coercing .. _type-coercions-permitted-for-coercing-traits-table: .. rubric:: Type coercions permitted for coercing traits ============= =========================================== Trait Coercible Types ============= =========================================== Complex Floating point number, plain integer Float Plain integer Long Plain integer Unicode String ============= =========================================== .. index:: pair: types; casting .. _trait-type-casting: Trait Type Casting :::::::::::::::::: For trait attributes defined using the predefined "casting" traits, if a value is assigned to a trait attribute that is not of the type defined for the trait, but it can be cast to the required type, then the cast value is assigned to the attribute. If the value cannot be cast to the required type, a TraitError exception is raised. Internally, casting is done using the Python built-in functions for type conversion: * bool() * complex() * float() * int() * str() * unicode() .. index:: single: examples; coercing vs. casting The following example illustrates the difference between coercing traits and casting traits:: >>> from traits.api import HasTraits, Float, CFloat >>> class Person ( HasTraits ): ... weight = Float ... cweight = CFloat >>> >>> bill = Person() >>> bill.weight = 180 # OK, coerced to 180.0 >>> bill.cweight = 180 # OK, cast to float(180) >>> bill.weight = '180' # Error, invalid coercion Traceback (most recent call last): File "", line 1, in File "c:\svn\ets3\traits\enthought\traits\trait_handlers.py", line 175, in error value ) traits.trait_errors.TraitError: The 'weight' trait of a Person instance must be a float, but a value of '180' was specified. >>> bill.cweight = '180' # OK, cast to float('180') >>> print bill.cweight 180.0 >>> .. _other-predefined-traits: Other Predefined Traits ``````````````````````` The Traits package provides a number of other predefined traits besides those for simple types, corresponding to other commonly used data types; these predefined traits are listed in the following table. Refer to the *Traits API Reference*, in the section for the module traits.traits, for details. Most can be used either as simple names, which use their built-in default values, or as callables, which can take additional arguments. If the trait cannot be used as a simple name, it is omitted from the Name column of the table. .. index:: Any(), Array(), Button(), Callable(), CArray(), Class(), Code() .. _predefined-traits-beyond-simple-types-table: .. rubric:: Predefined traits beyond simple types +------------------+----------------------------------------------------------+ | Name | Callable Signature | +==================+==========================================================+ | Any | Any( [*value* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Array | Array( [*dtype* = None, *shape* = None, *value* = None, | | | *typecode* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Button | Button( [*label* = '', *image* = None, *style* = | | | 'button', *orientation* = 'vertical', *width_padding* = | | | 7, *height_padding* = 5, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Callable | Callable( [*value* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | CArray | CArray( [*dtype* = None, *shape* = None, *value* = None, | | | *typecode* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Class | Class( [*value*, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Code | Code( [*value* = '', *minlen* = 0, *maxlen* = sys.maxint,| | | *regex* = '', \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Color | Color( [\*\ *args*, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | CSet |CSet( [*trait* = None, *value* = None, *items* = True, | | |\*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | n/a | Constant( *value*[, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Dict, DictStrAny,|Dict( [*key_trait* = None, *value_trait* = None, | | DictStrBool, |*value* = None, *items* = True, \*\*\ *metadata*] ) | | DictStrFloat, | | | DictStrInt, |.. index:: Color(), CSet(), Constant(), Dict() | | DictStrList, |.. index:: Directory(), Disallow, Either(), Enum() | | DictStrLong, |.. index:: Event(), Expression(), false, File(), Font() | | DictStrStr | | +------------------+----------------------------------------------------------+ | Directory | Directory( [*value* = '', *auto_set* = False, *entries* =| | | 10, *exists* = False, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Disallow | n/a | +------------------+----------------------------------------------------------+ | n/a |Either( *val1*[, *val2*, ..., *valN*, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Enum | Enum( *values*[, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Event | Event( [*trait* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Expression | Expression( [*value* = '0', \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | false | n/a | +------------------+----------------------------------------------------------+ | File | File( [*value* = '', *filter* = None, *auto_set* = False,| | | *entries* = 10, *exists* = False, \*\*\ *metadata* ] ) | +------------------+----------------------------------------------------------+ | Font | Font( [\*\ *args*, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Function | Function( [*value* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Generic | Generic( [*value* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | generic_trait | n/a | +------------------+----------------------------------------------------------+ | HTML | HTML( [*value* = '', *minlen* = 0, *maxlen* = sys.maxint,| | | *regex* = '', \*\*\ *metadata* ] ) | +------------------+----------------------------------------------------------+ | Instance | Instance( [*klass* = None, *factory* = None, *args* = | | | None, *kw* = None, *allow_none* = True, *adapt* = None, | | | *module* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | List, ListBool, |List([*trait* = None, *value* = None, *minlen* = 0, | | ListClass, |*maxlen* = sys.maxint, *items* = True, \*\*\ *metadata*]) | | ListComplex, | | | ListFloat, |.. index:: Function(), Generic(), generic_trait, HTML() | | ListFunction, |.. index:: Instance(), List(), Method(), Module() | | ListInstance, |.. index:: Password(), Property(), Python(), PythonValue()| | ListInt, |.. index:: Range(), ReadOnly(), Regex(), RGBColor(), Set()| | ListMethod, |.. index:: String(), This, ToolbarButton(), true, Tuple() | | ListStr, |.. index:: Type(), undefined, UUID(), WeakRef() | | ListThis, | | | ListUnicode | | +------------------+----------------------------------------------------------+ | Method | Method ([\*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Module | Module ( [\*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Password | Password( [*value* = '', *minlen* = 0, *maxlen* = | | | sys.maxint, *regex* = '', \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Property | Property( [*fget* = None, *fset* = None, *fvalidate* = | | | None, *force* = False, *handler* = None, *trait* = None, | | | \*\* \ *metadata*] ) | | | | | | See :ref:`property-traits`, for details. | +------------------+----------------------------------------------------------+ | Python | Python ( [*value* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | PythonValue | PythonValue( [*value* = None, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Range | Range( [*low* = None, *high* = None, *value* = None, | | | *exclude_low* = False, *exclude_high* = False, | | | \*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | ReadOnly | ReadOnly( [*value* = Undefined, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Regex | Regex( [*value* = '', *regex* = '.\*', \*\*\ *metadata*])| +------------------+----------------------------------------------------------+ | RGBColor | RGBColor( [\*\ *args*, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | self | n/a | +------------------+----------------------------------------------------------+ | Set | Set( [*trait* = None, *value* = None, *items* = True, | | | \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | String | String( [*value* = '', *minlen* = 0, *maxlen* = | | | sys.maxint, *regex* = '', \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | This | n/a | +------------------+----------------------------------------------------------+ | ToolbarButton | ToolbarButton( [*label* = '', *image* = None, *style* = | | | 'toolbar', *orientation* = 'vertical', *width_padding* = | | | 2, *height_padding* = 2, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | true | n/a | +------------------+----------------------------------------------------------+ | Tuple | Tuple( [\*\ *traits*, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | Type | Type( [*value* = None, *klass* = None, *allow_none* = | | | True, \*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | undefined | n/a | +------------------+----------------------------------------------------------+ | UStr | UStr( [*owner*, *list_name*, *str_name*, *default_value =| | | NoDefaultSpecified, \*\*\ *metadata*]) | +------------------+----------------------------------------------------------+ | UUID [3]_ | UUID( [\*\*\ *metadata*] ) | +------------------+----------------------------------------------------------+ | WeakRef | WeakRef( [*klass* = 'traits.HasTraits', | | | *allow_none* = False, *adapt* = 'yes', \*\*\ *metadata*])| +------------------+----------------------------------------------------------+ .. index:: This trait, self trait .. _this-and-self: This and self ::::::::::::: A couple of predefined traits that merit special explanation are This and **self**. They are intended for attributes whose values must be of the same class (or a subclass) as the enclosing class. The default value of This is None; the default value of **self** is the object containing the attribute. .. index:: pair: This trait; examples The following is an example of using This:: # this.py --- Example of This predefined trait from traits.api import HasTraits, This class Employee(HasTraits): manager = This This example defines an Employee class, which has a **manager** trait attribute, which accepts only other Employee instances as its value. It might be more intuitive to write the following:: # bad_self_ref.py --- Non-working example with self- referencing # class definition from traits.api import HasTraits, Instance class Employee(HasTraits): manager = Instance(Employee) However, the Employee class is not fully defined at the time that the **manager** attribute is defined. Handling this common design pattern is the main reason for providing the This trait. Note that if a trait attribute is defined using This on one class and is referenced on an instance of a subclass, the This trait verifies values based on the class on which it was defined. For example:: >>> from traits.api import HasTraits, This >>> class Employee(HasTraits): ... manager = This ... >>> class Executive(Employee): ... pass ... >>> fred = Employee() >>> mary = Executive() >>> # The following is OK, because fred's manager can be an >>> # instance of Employee or any subclass. >>> fred.manager = mary >>> # This is also OK, because mary's manager can be an Employee >>> mary.manager = fred .. index:: multiple values, defining trait with .. _list-of-possibl-values: List of Possible Values ::::::::::::::::::::::: You can define a trait whose possible values include disparate types. To do this, use the predefined Enum trait, and pass it a list of all possible values. The values must all be of simple Python data types, such as strings, integers, and floats, but they do not have to be all of the same type. This list of values can be a typical parameter list, an explicit (bracketed) list, or a variable whose type is list. The first item in the list is used as the default value. .. index:: examples; list of values A trait defined in this fashion can accept only values that are contained in the list of permitted values. The default value is the first value specified; it is also a valid value for assignment. :: >>> from traits.api import Enum, HasTraits, Str >>> class InventoryItem(HasTraits): ... name = Str # String value, default is '' ... stock = Enum(None, 0, 1, 2, 3, 'many') ... # Enumerated list, default value is ... #'None' ... >>> hats = InventoryItem() >>> hats.name = 'Stetson' >>> print '%s: %s' % (hats.name, hats.stock) Stetson: None >>> hats.stock = 2 # OK >>> hats.stock = 'many' # OK >>> hats.stock = 4 # Error, value is not in \ >>> # permitted list Traceback (most recent call last): File "", line 1, in File "c:\svn\ets3\traits_3.0.3\enthought\traits\trait_handlers.py", line 175, in error value ) traits.trait_errors.TraitError: The 'stock' trait of an InventoryItem instance must be None or 0 or 1 or 2 or 3 or 'many', but a value of 4 was specified. This example defines an InventoryItem class, with two trait attributes, **name**, and **stock**. The name attribute is simply a string. The **stock** attribute has an initial value of None, and can be assigned the values None, 0, 1, 2, 3, and 'many'. The example then creates an instance of the InventoryItem class named **hats**, and assigns values to its attributes. .. index:: metadata attributes; on traits .. _trait-metadata: Trait Metadata -------------- Trait objects can contain metadata attributes, which fall into three categories: * Internal attributes, which you can query but not set. * Recognized attributes, which you can set to determine the behavior of the trait. * Arbitrary attributes, which you can use for your own purposes. You can specify values for recognized or arbitrary metadata attributes by passing them as keyword arguments to callable traits. The value of each keyword argument becomes bound to the resulting trait object as the value of an attribute having the same name as the keyword. .. index:: metadata attributes; internal .. _internal-metadata-attributes: Internal Metadata Attributes ```````````````````````````` The following metadata attributes are used internally by the Traits package, and can be queried: .. index:: array metadata attribute, default metadata attribute .. index:: default_kind metadata attribute, delegate; metadata attribute .. index:: inner_traits metadata attribute, parent metadata attribute .. index:: prefix metadata attribute, trait_type metadata attribute .. index:: type metadata attribute * **array**: Indicates whether the trait is an array. * **default**: Returns the default value for the trait, if known; otherwise it returns Undefined. * **default_kind**: Returns a string describing the type of value returned by the default attribute for the trait. The possible values are: * ``value``: The default attribute returns the actual default value. * ``list``: A copy of the list default value. * ``dict``: A copy of the dictionary default value. * ``self``: The default value is the object the trait is bound to; the **default** attribute returns Undefined. * ``factory``: The default value is created by calling a factory; the **default** attribute returns Undefined. * ``method``: The default value is created by calling a method on the object the trait is bound to; the **default** attribute returns Undefined. * **delegate**: The name of the attribute on this object that references the object that this object delegates to. * **inner_traits**: Returns a tuple containing the "inner" traits for the trait. For most traits, this is empty, but for List and Dict traits, it contains the traits that define the items in the list or the keys and values in the dictionary. * **parent**: The trait from which this one is derived. * **prefix**: A prefix or substitution applied to the delegate attribute. See :ref:`deferring-traits` for details. * **trait_type**: Returns the type of the trait, which is typically a handler derived from TraitType. * **type**: One of the following, depending on the nature of the trait: * ``constant`` * ``delegate`` * ``event`` * ``property`` * ``trait`` .. index:: recognized metadata attributes, metadata attributes; recognized .. _recognized-metadata-attributes: Recognized Metadata Attributes `````````````````````````````` The following metadata attributes are not predefined, but are recognized by HasTraits objects: .. index:: desc metadata attribute, editor metadata attribute, TraitValue class .. index:: label; metadata attribute, rich_compare metadata attribute .. index:: trait_value metadata attribute, transient metadata attribute * **desc**: A string describing the intended meaning of the trait. It is used in exception messages and fly-over help in user interface trait editors. * **editor**: Specifies an instance of a subclass of TraitEditor to use when creating a user interface editor for the trait. Refer to the `TraitsUI User Manual `_ for more information on trait editors. * **label**: A string providing a human-readable name for the trait. It is used to label trait attribute values in user interface trait editors. * **rich_compare**: A Boolean indicating whether the basis for considering a trait attribute value to have changed is a "rich" comparison (True, the default), or simple object identity (False). This attribute can be useful in cases where a detailed comparison of two objects is very expensive, or where you do not care if the details of an object change, as long as the same object is used. * **trait_value**: A Boolean indicating whether the trait attribute accepts values that are instances of TraitValue. The default is False. The TraitValue class provides a mechanism for dynamically modifying trait definitions. See the *Traits API Reference* for details on TraitValue. If **trait_value** is True, then setting the trait attribute to TraitValue(), with no arguments, resets the attribute to it original default value. * **transient**: A Boolean indicating that the trait value is not persisted when the object containing it is persisted. The default value for most predefined traits is False (the value will be persisted if its container is). You can set it to True for traits whose values you know you do not want to persist. Do not set it to True on traits where it is set internally to False, as doing so is likely to create unintended consequences. See :ref:`persistence` for more information. Other metadata attributes may be recognized by specific predefined traits. .. index:: metadata attributes; accessing .. _accessing-metadata-attributes: Accessing Metadata Attributes ````````````````````````````` .. index:: pair: examples; metadata attributes Here is an example of setting trait metadata using keyword arguments:: # keywords.py --- Example of trait keywords from traits.api import HasTraits, Str class Person(HasTraits): first_name = Str('', desc='first or personal name', label='First Name') last_name = Str('', desc='last or family name', label='Last Name') In this example, in a user interface editor for a Person object, the labels "First Name" and "Last Name" would be used for entry fields corresponding to the **first_name** and **last_name** trait attributes. If the user interface editor supports rollover tips, then the **first_name** field would display "first or personal name" when the user moves the mouse over it; the last_name field would display "last or family name" when moused over. To get the value of a trait metadata attribute, you can use the trait() method on a HasTraits object to get a reference to a specific trait, and then access the metadata attribute:: # metadata.py --- Example of accessing trait metadata attributes from traits.api import HasTraits, Int, List, Float, \ Instance, Any, TraitType class Foo( HasTraits ): pass class Test( HasTraits ): i = Int(99) lf = List(Float) foo = Instance( Foo, () ) any = Any( [1, 2, 3 ] ) t = Test() print t.trait( 'i' ).default # 99 print t.trait( 'i' ).default_kind # value print t.trait( 'i' ).inner_traits # () print t.trait( 'i' ).is_trait_type( Int ) # True print t.trait( 'i' ).is_trait_type( Float ) # False print t.trait( 'lf' ).default # [] print t.trait( 'lf' ).default_kind # list print t.trait( 'lf' ).inner_traits # (,) print t.trait( 'lf' ).is_trait_type( List ) # True print t.trait( 'lf' ).is_trait_type( TraitType ) # True print t.trait( 'lf' ).is_trait_type( Float ) # False print t.trait( 'lf' ).inner_traits[0].is_trait_type( Float ) # True print t.trait( 'foo' ).default # print t.trait( 'foo' ).default_kind # factory print t.trait( 'foo' ).inner_traits # () print t.trait( 'foo' ).is_trait_type( Instance ) # True print t.trait( 'foo' ).is_trait_type( List ) # False print t.trait( 'any' ).default # [1, 2, 3] print t.trait( 'any' ).default_kind # list print t.trait( 'any' ).inner_traits # () print t.trait( 'any' ).is_trait_type( Any ) # True print t.trait( 'any' ).is_trait_type( List ) # False .. rubric:: Footnotes .. [2] Most callable predefined traits are classes, but a few are functions. The distinction does not make a difference unless you are trying to extend an existing predefined trait. See the *Traits API Reference* for details on particular traits, and see Chapter 5 for details on extending existing traits. .. [3] Available in Python 2.5. traits-4.5.0/docs/source/traits_user_manual/front.rst000066400000000000000000000033651233213561600230520ustar00rootroot00000000000000==================== Traits 4 User Manual ==================== :Authors: David C. Morrill, Janet M. Swisher :Version: Document Version 4 :Copyright: 2005, 2006, 2008 Enthought, Inc. All Rights Reserved. Redistribution and use of this document in source and derived forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source or derived format (for example, Portable Document Format or Hypertext Markup Language) must retain the above copyright notice, this list of conditions and the following disclaimer. * Neither the name of Enthought, Inc., nor the names of contributors may be used to endorse or promote products derived from this document without specific prior written permission. THIS DOCUMENT IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENT, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. All trademarks and registered trademarks are the property of their respective owners. | Enthought, Inc. | 515 Congress Avenue | Suite 2100 | Austin TX 78701 | 1.512.536.1057 (voice) | 1.512.536.1059 (fax) | http://www.enthought.com | info@enthought.com traits-4.5.0/docs/source/traits_user_manual/images/000077500000000000000000000000001233213561600224265ustar00rootroot00000000000000traits-4.5.0/docs/source/traits_user_manual/images/adaptation.png000066400000000000000000001012541233213561600252630ustar00rootroot00000000000000PNG  IHDR<~ CiCCPICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/9%bKGD pHYs  tIME*4:L IDATxy|Օܪwٲc`=’$ d~ !{ M$L2Yf !yM =llco]jGu$/`chcT]]un}{9BJ)Q( B񮠩.P( B BP(J BP(!V( B BP( % BP(!V( BXP( % BP(+ BXP( bBP(+ BPBP( bBP(J BPB<Hlio[P(c@6 }tuILEHr:{KyCURb&M}!uU( !r έ́tB֧ ];P3Nq1DP([;=ϳ 5zݸ=.viR,)%ec6i˚d3tL:eva7VԖsYQ( ⮾1$9+SP^>7/υ "\&G*!ːgF-Xi ЄsS( m¦Fq[ % #I2!I]U^RYKd1t B15x_zWt@4+VpwliL18P˯e 4e!+ b q4?Ŷ}AK41L$菓Ih7T7W]Q B2X1W1_)jNa.S:t&~}^gUNEO(._>E]} c[9m[ܽ]/{dq5.]u4 4!l[ i٘$kuMI IyJ|O,~8нŌ5>!q7\M*P(N C7ӿ > &\}n|nDžЎ랝3m9T$5'$3Qms^Jv.7{KIctES󱫿PݢP(+?}>7eAe1>mK" dXr2 Q><ϺYK՗4BG?5frGI}_/dqB11:^\OK& ˼Tp":RJb$XX^6P}g+!u[Z4ͬ$PS#=X_3_:EP0xnlMCe^hZH89Sy!/4͋l󄣝TT+S-H$R?&t>zTB8!އ n,衾2HwblR;+ k:neɬ5^1fB~Ɔ0cv5*40|7;h*_P 1c.fՔMiAiCPmax44u+.ifLo/?B0kN-n5/|l w7ٌ3?ƙKRuB8fwʮ}\rCi P[9( sV3/O'\HJG)UA%58.6hb@uB8+b~{>G.9Hyų*']:sʙTq*!~;6n};p *Cj'>2?9+cKuBxKr[<!4KP˘%WKn5W F{[x>%Gw%dxj=6MY'Bum)m߳tRP(Hz7~^2X8ڊeho*fǾG'jW|DzC U:`z{U(H獟 pAS+xp; A6 mJ V޸5JN4McoǫtUP(nc˝S0CצŹ̛Q 6?¶{l3`ˮ爧z] X(-w7=:DPmc=_ĩ.3l/X0a0yv&&c*+!غYA! 4'_݆Q2.Y|n31t?Oo!COx/4cftJB>ټ! 4&毾H6GYi'μrtMh{W4r}:/J7m\uB1]6;h/S<r8b[l#e~uU1å3=HO~! 4{}3Bs?PZgZtB*5`v!<ۥ1F%U;:D'hpcTJߵڿ'h42Rե^l뿁m&w>(kx :NVu~z.\Ȃ Ng><ӣ0_2^WX<<ꪫp/344?1^nmtM~֭[ƍOKFٵv$TV[\SJHee%k׮糟-Z38-?۶m\}Փj{d4LYc.` M~;&gf㲈S8=hB+x!n4;t);旿%eee|ӟ{aΝx,X^nϒ%K1 L&smFEE@dYNoΪUk1c3fvSUUg]<. ˊ3gg}6fbܹ;6l HOxb㴶rwzj~_[RM6p #@:?!vf~a馛(-mv?1VEH1hs/ΞҏJvr\Gٳϣ"NU ޽]ubLX~=_Wꪫظq#gqPիWs֭[Yj_җxgyя~D2[og޼yz-Ͻ=Ek,c͚5\|{Ok.VXQ<믿˗pBnʆ /|/袋hjj+V.2.RcyOg>JJJG?:.ߍmZ[[y>(ՇHto6/ 8B0ƩwO?&N?.t~G$< יOӊ1|֜go]t:כ˲x{^ۙ;w. .䳟,vXիWH$k4axks7r嗳h"l??WYY~~rr޶ݱXGۇbHTϑ7'B%H+J|nJ|nb!=O͒ #^ǂie̓odi_ckxnۏF S) 6bZ{J8l?efjJ[4݃[mjJ -Ŷ>O9eElibhfV@+=4T,"g929+M[̪ds _'Bb !_= ݃[F.u@{hXBW@lgyh: '-fkGr 熑JR|&Lǩ:p*doNEPUK|RYz^{hj q6~'c2aNs#]9o&c(сU²WOvθ3It#,y /ﺇ}/3܆W:#H{*XzAo KqJlx[?@"=@WoR3}Oqd^مX{ynۏ9ny ?fV,j-mxݥ,hZexYдxK!.$zRjd)u~Yӑ-O:Rc*^ڴ(Ѷ d"xJk[X'X$D4JDS,i 6o^7_ of `3 fd.9]Ϭ^cM,s8}hNB\oY==NM%W.}Y)\ |-VwMvu>S[ )%g.d{{k˾L$K;Zș8B82[B s&(IҿyW]5,%t,kCw RQ?m4V.b)Bh^l?Kodq+u_`'?$ɟ`F2TsVV*Kf!FXOHok[AIQ;Άӓ|;455M9}G}A$%ϞBvV;WU+.mN~dQYz {{+ A~ h )m2kMcAlĉT̄OxRJ\ >vVɆ X~=L+;p5}466J޲}2d466rJW_}~P(D[[_XIwŋۿ[ZZZ&lI"v _ݧǓC$%־ujXuB\W)!ୠ*t(z9Itp0峯!}MrشwHiZҹ[<@l/jW2iU:ǢJgxv_GJ,ުb@ױ Qj*Ԋ6璶MG57||#%\͛Bp%p]wDWOӣr|SK_7|3v.EQ[[_8՞/_-׿ulg_[榞$zcR<. ]UOt7&qZo6uֽ^x3m̆yqݴ2햶Є΢KY:Jlۦ?wNf¼z-k@8ήjh%,y)}={E<X6r;ykCh`+8fO~7KoK23C~~4M+6bbr 7EOO3f̠sspmؑWUU1sLp-p5HSS .,V{z?Sm}svwǩRMH\{Ҷtqq%k+==hK~ `Kv|e>wG孶ŋ;~{5|n-y,3Br ;أ>6݇[(9K 7́|=2Co7#ĥ%UjD)&$'x<,YhhtT-]׋+Fg d2m=Igɞܪxi ͒W8}?YHI2=R٣ie0|h4vth<#}1E2{KjD)&hӃiEsKK ml6s=GKKQݻݻwO?Ͳeˊ=44QI 8I|IdMΩ!5G6QAeZ"Wi# q饗reQRRB0đXKzjimm-~>R~s#:{/y{Kyo~sjOG4Ivqوy{0S2z&1W6ȤMJ6+5\W٢:C1a뮻bQU~L&b0Ծ xb v(Zsa՞I#١@q=5mQ*B\_uZIfh)q} M!JYGk_HՑ4YDer)4c+_0DvlBT2S"nCXL&1xyș?L _$;p\v-mX>1o͘V xEl7jfD%u bˁ /Ck{_ WzS09z_͘ZuB,r./; HC iSS>F! 8ݘC$ىճ LY a#@0;7B\1[r?[{xdhKGF̥іmŇ@Zm!;^tR]1­%5ta!XRG&6z~^Qb[6Vnl1Y{Lb-HG_]鸨V@p-ۑ#ԉ^=O N1ĂKayd܅53dg,Kr}1e1$s.?(RJ!;;8HO'FB#FCb yV~ ]fnŞx̄!3Iδqgv-[: B^)n!_;|ѩ2׷ 1D09΍ %t2{^!5o5l{̚y!VL=!^ز?\M4G"$ `6A-}TP&RiEGG72wXx55 B."%ѱ8%Q-a:R0MsӞF2CdY~Qxe HGe>w` d}eN|bkby%Nc,vR]1_ >@sKJq vE,pC8.+B0 Rޙ0s`/6.#GPh'˙[݊UՄu-XK)0vdfل0 $IdzU"bW<-bcvtװU5Dm} eM2k.{xo`A0'N&RCCr^ f ͙[6g=qՄ%눅@YDVyqSa3fo' dFDh,{0P]z:pG!Z:#I9ovsX{1= ٵ:">cA4X e5GN\%}q95iK$H%Ԕso3N<Ǥr 6T:VLY[U!Ayb!H }e>Ga8?F ƋEkq]m~a)!/4}Q%cM,#37Q8 1D,f njSjmH q_e6)%\'t)ul[qV/˭X1e1 `{B8N_wz>.yb #‰`ަɯ)a,%uމ juM 6@߯Ies*hk rמ69 )g%[6};\4ͮFIIOG\V2cv.)s>z.d)%e¶;lEJ [W )5*pyJSol僤6z{zygE-,:65&l<"Kd0х!r%nyɋZ9z#aO _#LJ`~(ڠjlNop&~4ܸ 1@2@ESs1Iw{x,MQ7 beG)oq\! m/cбFQfR(Wb~7l. ac`̢yv煷j:6`R!{qG0f en^o r ǐVų4މg0AK{E\ pufUrM.[J:R2Bca{tۮO< زQu>Zm)yز5$zQF^KuY RL;ҩ\[1eqְhEA܆3^%Vˀ! R:\.wQl}>_gۍ0 4MCu>=z^SU|"LM{O`] $ͣ@ Caf>{jeG"J[/[Ɗޅl6{^ƶ]ض@-aAF m Mv{iX1ػ};#FAdхU\Z.ZdIt7@x<[|G >% =k RZ,= n}S1|\5 7/A`;ѡ&=SbH&Ҵ 1 yқIdɣ⎧x` ^wbl6xeH)ma-aulc˖CSBUJӊRn݂mhH"yՄD0M+l^hSʛWRQQAEEeee Ea.q5R _l"Fs+ٜ2U_; $sp'OR"/^в i tI"! zSb}z:jJ-M+ypit-TS;z Μ@˸2ʂ '"9w˶R4,XÎE[g[]@j4V+1VL4]TtVa#B M8e# >taaC^A6lZ@eeeQx ~c\ߣ>$4Σ絇H&}nj!5]qu]2 qATf5.f{_#LJ=;t?5<0@t(@paݹexy$ Y {b.m RS6XJI4LJ)9.i(ѕH[s mA\:{%̪i:@1b240@o/NXA Z [k= 0{$mo./O-Ux΁kry[O(/cќG8M," 'zc[D$3) Vs_gќsQ@8I*ep iڸ\:ƻ2mqmIe .9Y|o;M]0(E&+ ZvK[͎bH.B^\9b;G{x~ؒah$\YI_O)ݝ|sK1M5]9f-c!SB8eOЌ:vo#5*ʻN*c3D2}Hi=x9ؽ6=ۼ>R?%!I+"aKD$E4" UKdAwӶm,"N 3`H(ѭJ,W ii #IVrq>+̨/qd6[ YԟNYI}>R uql\Eċ?QDNH$clQ|5X` ' PHQd Hm! 9|oa]Lء+[莖 ",K,(fe!ક9cncŤGJϼޝ{S[2gXx4gDsPktbgOg oͻ>mQ]Belk$j^&>WLh!~5m&M˥q{\utc=!iKEjf-rE6cNfr Mn\–̝u:>OpoRJrDh4J?MyײiBj ym;*R.X qaZk{ؒ>cVWZݥ Ŝ#]aȢa g;^dǽ_AJR*CiPd\0eR.]xmy@P_5 ٰY q|'L$Jѻ%ٴ;"[VA`v;[H};,y74awm~޷rx<e+&Սڲ,$/7vt,]b%G"]S$"/:.2 5qy_B)Җb([~wIŔ8IW}A4T71i3 H'C>">tNn``eJk.AUy~W0 ,KZ愁`FKX]#DwD;gْkIRpG۶F왪JbZ7lS_BK|mb SjhPXǍG `I CXX6!Ε<@:>S7nTbmO]MImZ}ZA,. [SF'&bBʲI%xqHQw8Qp$t!a,#E>(KXФwuk.,TWni'hn2ՋDbJ!z>2Z1"/6BXy!  zaנDڴ:4+mQLۦrzpLHfrxgC_EԺfհ}E8֟EQEȼN[1"BzXs2ևoܗ#.qތj*~X)FlVaz D~ ) Y$8S@ )#!XAo+e1޳| gM3菳;m)]&2&[ gɍߛr"xeYH/3GejK=ÃF,lRcuS 5 ys*r?&NЦeሱ jVwgtGl1<0+6a&'#ܦXWp$y@T֜c`ma29Ь,ȿDORi߃t nUx]rm9n7^?6jKotr>$lGCE IU=5iM:i~Zf^ɶx*pwxc,[F'ݰG'TlZj{Dʼ57לյo}g۳`0Hyy9>Og))144ğ_A<8,< . a9i. ٴ4 i}za·[GSUͱ ^$HJ)ib1v9sUÉ;Wv%>gP-mjkVnŞ ޱS_̏6,T֢k Fԩ.Nê0=Dwݵ$>Ǔ<$s#FEHQˎ F'-=^ IDAT,KS7L|XAz -;8)k}aߗqfFVYT6 7$^cb/1"ɽnyI$DQ#zA $( 63=3TGwݳ(p|9y44M~31MJ?KlFVT7n:,*TRFM%{d^v*sIu]SN(Gh4Xn &*Ն`S ;cڬ)3EUA[%&r6)N3⍉oߌ7Qf9V㴓$=ɍqn W:HEMa=biv7Ϡӈ˵*y2`kњTU?:8>B0"Uh`ajvu.8B>_Q0 ˺Ƅ8&V!Am!%W[;l);In^ʼn:u t SwY^$BB *:ā:bǥu{\`f-GY wĚYk|lAh۫:k}qs-|0 C;(|={7R_q"niWqm5{L4 PȠ>>F}z:^0(w3|>(++cr2h v#1qYbB5u0#-caBpZ_nn{*ʎ+EuNjPw|/i gNrHv;1 #7zZq kRol8NM)'2b'2dC2ЂoaAn>3;L+-8UńjЃ hvT́IAs<*}&E""tZ" C8\2hD|QDtt LjJDBai 4=ͱR5ΨB(.H;9PD=W? w$zMbӀiْ@,'ntՙ\+؊VR[qlBu)_}pXYfvn7>Oi"nb( nۚCVUfgGA|a=!i%1rY:fgp8ԕ({ڗ՟6jI}!nNH_ZRHy0VTKtMS;PPPCvIIJ1"‚ Opg8bG5T*Fn F.!hb*.233bpwzՄJ%L&*Cy! eR >fq\c뺸"n1XkRi8g6:YԆ2 ENLj%lm/B,iŸKZ8ʶ q8r!n(E) uqιscJqq1?O$r%UYfB,eQmP5: (i aF"01=ܢ^Ep}1yd{Ǹq 37n'Nȑ#L4ÇG!K{:u*[owm3|ݻk" q*ƯS%Q}َjTEDf-XatTMG‘0OLL|-]-#}ꫯfǎݻ#G Xb_طozz/A'pwnYA{9o뤦3x`k>K,a۶m͛9tW楗^SNk׎˗/R__O(K/k׮lٲLBVVn:z)֯_O.]̴}ҥɦMꪫXlCYYуe˖~;6mDAA@_lذJzA0䩧^ȑ# 4UUygᣏ>nn݊gԨQA~iy|>2-m 41z>8!/^'x-Z] bbtP UDQLՌXZE3A1P40(Io6klذロ"ϟo77 7x#]ta޽l߾-[XYd ~ϟ~i(**bɒ%Y?Ou]$'']v1{lڷoϸqk0 K/t&MĠA=5kְxb̙e]Ƅ (+k<sND<f"99]vyf{wk2q<ǏK.L>vڱk.F}ǺuXjדO> 7܀f;lt,?l̟?_^zIZ4+ ᵏ^u;?~{_EA1ma"֭E\jO3⫣8v6E30=^XΚ &2u`-Imm-@+VP^^f{!55Zq]w1tP MgYp!'NdΜ9 >p8ҥKx饗9r$O>G?"^;6mZ%iTUUѻwo^/$##پy~g[3fp-PXXH^3gC=d[C~_ѯ_?v;-B4rssIKKʫ9t}?0#77ʕ+B˖-ȑ#ffϞ-w2Ahe `U`ۍy|;(15Mi2U@1Wa%V5Pbm3ĚIdcOi˘ڼ׏jӱ"lHKK# RRRBnS٧,ÑXp@yy9>"KzϨdaYYT׏< YHԭp8My7Xt)ӦM&4?vݺu/ 7TY8)FR4Ƚ++bmDE$4&-9-T#l n>+:i!/|MkuϞ=sNڷoOZZ '222πHÇϨ222,0S>9N|>I-₂֮] x;v<+%Rʕ+Yp!FKxHٸq#yyy|g?GFΝ1b={BV ¦IxoQK>TM{Z1 ՌH[AVQFF7jkG.E?b.eL `XʪYQSЪۜ'%%1bTUcǎ \tEX뮻^zQZZʲe?>]wo&>e˖1ay*zɠA 9sf;v'hr3g2ydϟo͵6\`nf}]˹[MLxc߽{wB_~9O<g?! @4hmcƍygl2fΜE]Dee%~;ӧO; p!Bz,fD Y1EU^M8 4,O&舷xuoDٓi'\[Π?0eLy֣&99>ǃa[z][[ Ixlj_555VZxKp7Mj+)G Rmx ׼ -0wx+_ 86#j)J-6<궎2J4 Lyb4N4׿jXLAI4Mfww&5Y9 7"l6cjuK+8wsLx-K[Yݑu1(o!AZO_-ѹ\%dSk#!%ꖵjZ.Xh8n)${;(`D&հئ>BǴ8"Ă BBlURJŬF8'c)VP''E5"P佘jIg5plVUnJ!B,HOOhnD*hb%fCv"e 獸k׺ciD=+C<QZ6[n`QX a3?%(tvm,B-c-Zk&F1 m+E PD2vtMa\vto$,h!v:TsqkMl h w]r΃W?:x.:ȏ&JMvB<̠XK+h+:@l7gQ+7vtA+0n@яT x‘hPP뙃8 8V\ `&^{-O>)ۿ?g֬Y8&#_L~~|1Au]gOKcl=R~rJ"-*lԪ#kzp$(KF8ką EymIHPNIwb(ہBqEzlb쁨ZJNZc;zpX V_Jee%6ŋ7>C=D~s5tjO͓Qdњ3>-f\l<.'NZ[>Ink)k5{:>GR5ޑ}8z@Y<C*MD@ia0Ѡ-5/t=UU[oH,soYX~=AmmmBMw AՍbW{*))IT:O܈p8f󾲯}0~\b-NczǀXtk~727Q^mx4_AZ02/G7ujbMU+JIIt_һwo6lp16l@^^[l5u= /g"E_FUp8|O b Ekh˖NTURC+vi5}=;z`f *?n:v ֲ& L+GR鿘>dyZ߃9jEK,aҤI1tP+Ծ?x5t՞3@HzfFR3]UŎ&jԡ[LZ?ߏV19~8:tcpb Jtpzވ+j(n Q7učxǞ3 \``(*Uc(BeMjzpD *@>SV1 M:u*=]vMnWGSW{N0Wh7&׎fktywذawG}h",YgŊ$J:JCK4jXF3 6M#>!8O ^EMyP*j^v;vӉrrp8VR,sLp?Y6~ScSRRR(Eid}8X_>rB&o:o999 6e˖vZ?4Gjj*7p)*((>,p(v:Љdj *z4WtlSTnp :>jNLprp8):iCikpVXAjj ķd{|ppD }eԨQу?4ZW>i$>Sƌ͛ Bر{2g9x ?0cǎꫯ_fƍdff2o<:u@}}=K,p w 7ᯋ󑑑~%\OSv͟gݺu뮻x;#[Ul읩_˹0w)*| vR"U(u17φ !6j4[ˆ}fΜɓ?>ӦM׿5dddzYYY\veAfΜINN~[.!l\.k'\yD3{$9eEv# -ፏd 4Al2XU"qLO׏mT5~}zj\u4MkY555Z.kB!t]v7#FB!S]]MYYr؟fKXVPt " \qsMÛ`L ~PײjY ׼78D[rHOOXcKҲ"bAi^7a~T B, !i""Ă ·!"gI$yɺڂ B,p;w.{쑁bANݻke "sĂFW_sάZaÆq7( ˖-cX[n}0w\t]=[nTWIDATeѢE̙3=z[or馛۷/cέJ>}8z(_(+++`ʔ)XĂpa;ظq#W^W_`֬Y$''swSTT~x<ƏO.]>}:ڵc͚5,^9spe1a(//ꫯfС\{l޼j&Laø~k&_ E,ݺuc…̟?UVqC1tP+V=Cjj*@\((('??|Oκu4QF1c oW^ɕW^ ~3}YquP~_H'xQ̜n&ۛɛoɚ5kHMMn{^7t:ٳ'Ǐ} ۿ;|V>tA8gzդ[Ul6iii*'jNMM жvԖBcŜƍcĉ9r'&lW_}Ŷmۘ3g.SZddd0vX|>FbӦM ?Xsٷo}aڵeOL,CNN;w}QRRBiiնk2x` .7x#,[ i#//?v>ƌ#_J ^z={j*&LСCOrr2 ,P\\̊+8x dܹl6>O?'%%#F0qD>̲e˨g 4Ⱥy˨Qh*sΖG,\@ 鴬1c0frss;زe ۶mo߾\wu̟?͛70`ݻwOx=c ^~e6nHff&#=='xEQbʕ>""--{dza-o xŊ\wu̘1,[ ݻ ٺu+ ,waҤI\zzr%PPP3f ֭cС\y\r%L<۷3o޼F - Y~=7x#v?6mEEE,Y]v1rH>֭[ǪUH3f|gy/jf̘iӘ1c_=CslݺѣG["ܐcDzsN*++xW9s&ӧOgڵٳgsu{w^zիٺu+q?~\,bAU| _!;v,۶md}M_z5~۝UU/K~pB5 -ݻ[ĉ3gÇ'tR VСCӇ`hadggzjz,͛73y&o.!PSS~3|fAQRRRa^|E><۷3`͛^̚5өS'v}^}U xyE\*kV!34M!&JM£hꙧ TFǔƋp"mxnxC'6ܐxa۱տ2-x?7`ҥL6BrrrPUA1ev;?QUG n7s`sr]w1bĈfqq٬]BK\:+b q>uQQgfԩ8NMƐ!C;9x  !(v&3G(b~Z&uSꙻhUUvP!YYY{E 焕+WpBFc=ixgIIIsQ]]_oվ>"wѣ曛ݾ{wŋ( //Ì=_<?K.޽?ϖiܸq}֔ e4 Izz:. 4(0 Pn?#XUUv;⣖TU캉cՖ_̞= 0M8pe.]z6mbYUUٽ{7s!))3Ϝ5sk( |֭#  Yf @$fq|ٳg3k,ڷoI,bAXFh4Wh޼y̘1tܙC(I+θq }0sL&O;j^F(՗\iѷRZgg۳#CrM m*xo+(..殻0 \.WB555x<kMUyjXĂ BE'kp8#)))QؚREX,bM$ Zz6sus:d5#QWWag,XB0 ?@[3wwv gWE=d@S,!Pp"B,#TdUW RAbAA!AAXADAA!AbAADAAXAbAA!AAXADAA!AbAADAAXAbAA!AAXADAA!AbAA@-&G+_R{Zێ&c_}bbAV}%5~C{=ˋa>2gsA! wNK(lRrhx6wI;dlBl>Pi-l MU\RXiט6 ϯ=%|| B,\ (|/{sU}'7@UμqST^  t<7./^yo,+Gv~f B,\|qG˦2*'{%sOG+딌ۡ`X Cz)ŗl?5w:^d]зak_aL7#Sl>PAU]%85A Ӥ.Jڧ91 /p,kr#nʪl=\ed$9p94>_܎I|!s26Me*ֱ֞ B,\uº@f{YG1a@{SȌО$ M4##+L,qg/lgimwqTzQ(_zzeyXx}?g"sIW(f~E_e ;Яk*oou_3GvnS?/l6k,nGw?_1dNۋ#nT&ǧWIC:Gy^\v팎E3C/ -.̹; /gC mVm:bt yܢZV?ayn_ӡc{qa _ZKYui.4U!cxe~W5z[{Xl*ߛf]3T`H .6P~:z K ao&P#W%2P_Y9g b m]%cWo*J FBӌdEԭ>A=8:N[z #b{r8RZp&QUxd'9*ӆwa'5Ppԓ\;^;{g$Ag٩N*A?;c "BV[j ۏsUAxnһkv86)cNq)|wdޕyia d€¼#XA!Z& ?7b6vgm6|]|oZ]Sr;yWgV]릹~uӴT7LAj:Titpo{5  yo1; . >Ql*\?;7 @m ?+:lW1:n_tJj,}g/?ϼi _4MSA8[u?]t=% Sdrj*Z (bh'^UV 5*a¤1+w=%=S/Kرk*5NvI Lpl GUh4͍ D/Ie3:;CTЭޯňilN H_l{4E7lv*ఫ G_F2rr-ָ==ΧlnLO!2O,"ĂТYu|o7 M6†2@  ¹$}mvL}ӲA!,Q9Z!klAhIq) "Ă  B,     B, "Ă     "Ă  B,     B, "Ă   B&C LLz!  BQbJlRrx p>Tcr}DC8m=r.L4MSAA$XKADAAXAbAA!AAXADAA!A >+g([IENDB`traits-4.5.0/docs/source/traits_user_manual/index.rst000066400000000000000000000004311233213561600230200ustar00rootroot00000000000000Traits 4 User Manual ==================== .. toctree:: :maxdepth: 3 front.rst intro.rst defining.rst notification.rst deferring.rst custom.rst advanced.rst testing.rst Indices and tables ================== * :ref:`genindex` * :ref:`search` traits-4.5.0/docs/source/traits_user_manual/intro.rst000066400000000000000000000163531233213561600230560ustar00rootroot00000000000000============ Introduction ============ The Traits package for the Python language allows Python programmers to use a special kind of type definition called a trait. This document introduces the concepts behind, and usage of, the Traits package. For more information on the Traits package, refer to the `Traits web page `_. This page contains links to downloadable packages, the source code repository, and the Traits development website. Additional documentation for the Traits package is available from the Traits web page, including: * *Traits API Reference* * `TraitsUI User Manual `_ * Traits Technical Notes What Are Traits? ---------------- A trait is a type definition that can be used for normal Python object attributes, giving the attributes some additional characteristics: .. index:: initialization * **Initialization**: A trait has a *default value*, which is automatically set as the initial value of an attribute, before its first use in a program. .. index:: validation * **Validation**: A trait attribute is *explicitly typed*. The type of a trait-based attribute is evident in the code, and only values that meet a programmer-specified set of criteria (i.e., the trait definition) can be assigned to that attribute. Note that the default value need not meet the criteria defined for assignment of values. Traits 4.0 also supports defining and using abstract interfaces, as well as adapters between interfaces. .. index:: deferral * **Deferral**: The value of a trait attribute can be contained either in the defining object or in another object that is *deferred to* by the trait. .. index:: notification * **Notification**: Setting the value of a trait attribute can *notify* other parts of the program that the value has changed. .. index:: visualization * **Visualization**: User interfaces that allow a user to *interactively modify* the values of trait attributes can be automatically constructed using the traits' definitions. This feature requires that a supported GUI toolkit be installed. However, if this feature is not used, the Traits package does not otherwise require GUI support. For details on the visualization features of Traits, see the `TraitsUI User Manual `_. A class can freely mix trait-based attributes with normal Python attributes, or can opt to allow the use of only a fixed or open set of trait attributes within the class. Trait attributes defined by a class are automatically inherited by any subclass derived from the class. The following example [1]_ illustrates each of the features of the Traits package. These features are elaborated in the rest of this guide. .. index:: examples; Traits features :: # all_traits_features.py --- Shows primary features of the Traits # package from traits.api import Delegate, HasTraits, Instance,\ Int, Str class Parent ( HasTraits ): # INITIALIZATION: last_name' is initialized to '': last_name = Str( '' ) class Child ( HasTraits ): age = Int # VALIDATION: 'father' must be a Parent instance: father = Instance( Parent ) # DELEGATION: 'last_name' is delegated to father's 'last_name': last_name = Delegate( 'father' ) # NOTIFICATION: This method is called when 'age' changes: def _age_changed ( self, old, new ): print 'Age changed from %s to %s ' % ( old, new ) # Set up the example: joe = Parent() joe.last_name = 'Johnson' moe = Child() moe.father = joe # DELEGATION in action: print "Moe's last name is %s " % moe.last_name # Result: # Moe's last name is Johnson # NOTIFICATION in action moe.age = 10 # Result: # Age changed from 0 to 10 # VISUALIZATION: Displays a UI for editing moe's attributes # (if a supported GUI toolkit is installed) moe.configure_traits() Background ---------- Python does not require the data type of variables to be declared. As any experienced Python programmer knows, this flexibility has both good and bad points. The Traits package was developed to address some of the problems caused by not having declared variable types, in those cases where problems might arise. In particular, the motivation for Traits came as a direct result of work done on Chaco, an open source scientific plotting package. .. index:: Chaco Chaco provides a set of high-level plotting objects, each of which has a number of user-settable attributes, such as line color, text font, relative location, and so on. To make the objects easy for scientists and engineers to use, the attributes attempt to accept a wide variety and style of values. For example, a color-related attribute of a Chaco object might accept any of the following as legal values for the color red: * 'red' * 0xFF0000 * ( 1.0, 0.0, 0.0, 1.0 ) Thus, the user might write:: plotitem.color = 'red' In a predecessor to Chaco, providing such flexibility came at a cost: * When the value of an attribute was used by an object internally (for example, setting the correct pen color when drawing a plot line), the object would often have to map the user-supplied value to a suitable internal representation, a potentially expensive operation in some cases. * If the user supplied a value outside the realm accepted by the object internally, it often caused disastrous or mysterious program behavior. This behavior was often difficult to track down because the cause and effect were usually widely separated in terms of the logic flow of the program. So, one of the main goals of the Traits package is to provide a form of type checking that: * Allows for flexibility in the set of values an attribute can have, such as allowing 'red', 0xFF0000 and ( 1.0, 0.0, 0.0, 1.0 ) as equivalent ways of expressing the color red. * Catches illegal value assignments at the point of error, and provides a meaningful and useful explanation of the error and the set of allowable values. * Eliminates the need for an object's implementation to map user-supplied attribute values into a separate internal representation. In the process of meeting these design goals, the Traits package evolved into a useful component in its own right, satisfying all of the above requirements and introducing several additional, powerful features of its own. In projects where the Traits package has been used, it has proven valuable for enhancing programmers' ability to understand code, during both concurrent development and maintenance. The Traits 4.0 package works with version 2.7 and later of Python, and is similar in some ways to the Python property language feature. Standard Python properties provide the similar capabilities to the Traits package, but with more work on the part of the programmer. .. rubric:: Footnotes .. [1] All code examples in this guide that include a file name are also available as examples in the tutorials/doc_examples/examples subdirectory of the Traits docs directory. You can run them individually, or view them in a tutorial program by running: python /traits/tutor/tutor.py /docs/tutorials/doc_examples traits-4.5.0/docs/source/traits_user_manual/notification.rst000066400000000000000000000714531233213561600244130ustar00rootroot00000000000000 ================== Trait Notification ================== When the value of an attribute changes, other parts of the program might need to be notified that the change has occurred. The Traits package makes this possible for trait attributes. This functionality lets you write programs using the same, powerful event-driven model that is used in writing user interfaces and for other problem domains. Requesting trait attribute change notifications can be done in several ways: .. index:: notification; strategies * Dynamically, by calling on_trait_change() or on_trait_event() to establish (or remove) change notification handlers. * Statically, by decorating methods on the class with the @on_trait_change decorator to indicate that they handle notification for specified attributes. * Statically, by using a special naming convention for methods on the class to indicate that they handle notifications for specific trait attributes. .. index:: notification; dynamic .. _dynamic-notification: Dynamic Notification -------------------- Dynamic notification is useful in cases where a notification handler cannot be defined on the class (or a subclass) whose trait attribute changes are to be monitored, or if you want to monitor changes on certain instances of a class, but not all of them. To use dynamic notification, you define a handler method or function, and then invoke the on_trait_change() or on_trait_event() method to register that handler with the object being monitored. Multiple handlers can be defined for the same object, or even for the same trait attribute on the same object. The handler registration methods have the following signatures: .. index:: on_trait_change; method .. method:: on_trait_change(handler[, name=None, remove=False, dispatch='same']) .. index:: on_trait_event(); method .. method:: on_trait_event(handler[, name=None, remove=False, dispatch='same']) In these signatures: * *handler*: Specifies the function or bound method to be called whenever the trait attributes specified by the *name* parameter are modified. * *name*: Specifies trait attributes whose changes trigger the handler being called. If this parameter is omitted or is None, the handler is called whenever *any* trait attribute of the object is modified. The syntax supported by this parameter is discussed in :ref:`the-name-parameter`. * *remove*: If True (or non-zero), then handler will no longer be called when the specified trait attributes are modified. In other words, it causes the handler to be "unhooked". * *dispatch*: String indicating the thread on which notifications must be run. In most cases, it can be omitted. See the *Traits API Reference* for details on non-default values. .. index:: examples; dynamic notification .. _example-of-a-dynamic-notification-handler: Example of a Dynamic Notification Handler ````````````````````````````````````````` Setting up a dynamic trait attribute change notification handler is illustrated in the following example:: # dynamic_notification.py --- Example of dynamic notification from traits.api import Float, HasTraits, Instance class Part (HasTraits): cost = Float(0.0) class Widget (HasTraits): part1 = Instance(Part) part2 = Instance(Part) cost = Float(0.0) def __init__(self): self.part1 = Part() self.part2 = Part() self.part1.on_trait_change(self.update_cost, 'cost') self.part2.on_trait_change(self.update_cost, 'cost') def update_cost(self): self.cost = self.part1.cost + self.part2.cost # Example: w = Widget() w.part1.cost = 2.25 w.part2.cost = 5.31 print w.cost # Result: 7.56 In this example, the Widget constructor sets up a dynamic trait attribute change notification so that its update_cost() method is called whenever the **cost** attribute of either its **part1** or **part2** attribute is modified. This method then updates the cost attribute of the widget object. .. index:: name parameter; on_trait_change() .. _the-name-parameter: The *name* Parameter ```````````````````` The *name* parameter of on_trait_change() and on_trait_event() provides significant flexibility in specifying the name or names of one or more trait attributes that the handler applies to. It supports syntax for specifying names of trait attributes not just directly on the current object, but also on sub-objects referenced by the current object. The *name* parameter can take any of the following values: * Omitted, None, or 'anytrait': The handler applies to any trait attribute on the object. * A name or list of names: The handler applies to each trait attribute on the object with the specified names. * An "extended" name or list of extended names: The handler applies to each trait attribute that matches the specified extended names. .. index:: pair: extended trait names; syntax .. _syntax: Syntax :::::: Extended names use the following syntax: .. productionList:: xname: xname2['.'xname2]* xname2: ( xname3 | '['xname3[','xname3]*']' ) ['*'] xname3: xname | ['+'|'-'][name] | name['?' | ('+'|'-')[name]] A *name* is any valid Python attribute name. .. index:: pair: extended trait names; semantics .. _semantics: Semantics ::::::::: .. _semantics-of-extended-name-notation-table: .. rubric:: Semantics of extended name notation +------------------------------+----------------------------------------------+ | Pattern | Meaning | +==============================+==============================================+ |*item1*\ .\ *item2* |A trait named item1 contains an object (or | | |objects, if *item1* is a list or dictionary), | | |with a trait named *item2*. Changes to either | | |*item1* or *item2* trigger a notification. | +------------------------------+----------------------------------------------+ |*item1*\ :*item2* |A trait named **item1** contains an object (or| | |objects, if *item1* is a list or dictionary), | | |with a trait named *item2*. Changes to *item2*| | |trigger a notification, while changes to | | |*item1* do not (i.e., the ':' indicates that | | |changes to the link object are not reported. | +------------------------------+----------------------------------------------+ |[*item1*, *item2*, ..., |A list that matches any of the specified | |*itemN*] |items. Note that at the topmost level, the | | |surrounding square brackets are optional. | +------------------------------+----------------------------------------------+ |*item*\ [] |A trait named *item* is a list. Changes to | | |*item* or to its members triggers a | | |notification. | +------------------------------+----------------------------------------------+ |*name*? |If the current object does not have an | | |attribute called *name*, the reference can be | | |ignored. If the '?' character is omitted, the | | |current object must have a trait called | | |*name*; otherwise, an exception is raised. | +------------------------------+----------------------------------------------+ |*prefix*\ + |Matches any trait attribute on the object | | |whose name begins with *prefix*. | +------------------------------+----------------------------------------------+ |+\ *metadata_name* |Matches any trait on the object that has a | | |metadata attribute called *metadata_name*. | +------------------------------+----------------------------------------------+ |-*metadata_name* |Matches any trait on the current object that | | |does *not* have a metadata attribute called | | |*metadata_name*. | +------------------------------+----------------------------------------------+ |*prefix*\ +\ *metadata_name* |Matches any trait on the object whose name | | |begins with *prefix* and that has a metadata | | |attribute called *metadata_name*. | +------------------------------+----------------------------------------------+ |*prefix*\ -*metadata_name* |Matches any trait on the object whose name | | |begins with *prefix* and that does *not* have | | |a metadata attribute called *metadata_name*. | +------------------------------+----------------------------------------------+ |``+`` |Matches all traits on the object. | +------------------------------+----------------------------------------------+ |*pattern*\ * |Matches object graphs where *pattern* occurs | | |one or more times. This option is useful for | | |setting up listeners on recursive data | | |structures like trees or linked lists. | +------------------------------+----------------------------------------------+ .. index:: extended trait names; examples .. _examples-of-extended-name-notation-table: .. rubric:: Examples of extended name notation +--------------------------+--------------------------------------------------+ |Example | Meaning | +==========================+==================================================+ |``'foo, bar, baz'`` |Matches *object*.\ **foo**, *object*.\ **bar**, | | |and *object*.\ **baz**. | +--------------------------+--------------------------------------------------+ |``['foo', 'bar', 'baz']`` |Equivalent to ``'foo, bar, baz'``, but may be | | |useful in cases where the individual items are | | |computed. | +--------------------------+--------------------------------------------------+ |``'foo.bar.baz'`` |Matches *object*.\ **foo.bar.baz** | +--------------------------+--------------------------------------------------+ |``'foo.[bar,baz]'`` |Matches *object*.\ **foo.bar** and | | |*object*.\ **foo.baz** | +--------------------------+--------------------------------------------------+ |``'foo[]'`` |Matches a list trait on *object* named **foo**. | +--------------------------+--------------------------------------------------+ |``'([left,right]).name*'``|Matches the **name** trait of each tree node | | |object that is linked from the **left** or | | |**right** traits of a parent node, starting with | | |the current object as the root node. This pattern | | |also matches the **name** trait of the current | | |object, as the **left** and **right** modifiers | | |are optional. | +--------------------------+--------------------------------------------------+ |``'+dirty'`` |Matches any trait on the current object that has a| | |metadata attribute named **dirty** set. | +--------------------------+--------------------------------------------------+ |``'foo.+dirty'`` |Matches any trait on *object*.\ **foo** that has a| | |metadata attribute named **dirty** set. | +--------------------------+--------------------------------------------------+ |``'foo.[bar,-dirty]'`` |Matches *object*.\ **foo.bar** or any trait on | | |*object*.\ **foo** that does not have a metadata | | |attribute named **dirty** set. | +--------------------------+--------------------------------------------------+ For a pattern that references multiple objects, any of the intermediate (non-final) links can be traits of type Instance, List, or Dict. In the case of List or Dict traits, the subsequent portion of the pattern is applied to each item in the list or value in the dictionary. For example, if **self.children** is a list, a handler set for ``'children.name'`` listens for changes to the **name** trait for each item in the **self.children** list. The handler routine is also invoked when items are added or removed from a list or dictionary, because this is treated as an implied change to the item's trait being monitored. .. index:: notification; dynamic .. _notification-handler-signatures: Notification Handler Signatures ``````````````````````````````` The handler passed to on_trait_change() or on_trait_event() can have any one of the following signatures: .. index:: handler; signatures, trait change handler; signatures - handler() - handler(*new*) - handler(*name*, *new*) - handler(*object*, *name*, *new*) - handler(*object*, *name*, *old*, *new*) These signatures use the following parameters: .. index:: object parameter; notification handlers * *object*: The object whose trait attribute changed. .. index:: name parameter; notification handlers * *name*: The attribute that changed. If one of the objects in a sequence is a List or Dict, and its membership changes, then this is the name of the trait that references it, with '_items appended. For example, if the handler is monitoring ``'foo.bar.baz'``, where **bar** is a List, and an item is added to **bar**, then the value of the *name* parameter is 'bar_items'. .. index:: new parameter to the notification handlers * *new*: The new value of the trait attribute that changed. For changes to List and Dict objects, this is a list of items that were added. .. index:: old parameter to the notification handlers * *old*: The old value of the trait attribute that changed. For changes to List and Dict object, this is a list of items that were deleted. For event traits, this is Undefined. If the handler is a bound method, it also implicitly has *self* as a first argument. .. index:: notification; special cases .. _dynamic-handler-special-cases: Dynamic Handler Special Cases ````````````````````````````` In the one- and two-parameter signatures, the handler does not receive enough information to distinguish between a change to the final trait attribute being monitored, and a change to an intermediate object. In this case, the notification dispatcher attempts to map a change to an intermediate object to its effective change on the final trait attribute. This mapping is only possible if all the intermediate objects are single values (such as Instance or Any traits), and not List or Dict traits. If the change involves a List or Dict, then the notification dispatcher raises a TraitError when attempting to call a one- or two-parameter handler function, because it cannot unambiguously resolve the effective value for the final trait attribute. Zero-parameter signature handlers receive special treatment if the final trait attribute is a List or Dict, and if the string used for the *name* parameter is not just a simple trait name. In this case, the handler is automatically called when the membership of a final List or Dict trait is changed. This behavior can be useful in cases where the handler needs to know only that some aspect of the final trait has changed. For all other signatures, the handler function must be explicitly set for the *name*\ _items trait in order to called when the membership of the name trait changes. (Note that the *prefix*\ + and *item*\ [] syntaxes are both ways to specify both a trait name and its '_items' variant.) This behavior for zero-parameter handlers is not triggered for simple trait names, to preserve compatibility with code written for versions of Traits prior to 3.0. Earlier versions of Traits required handlers to be separately set for a trait and its items, which would result in redundant notifications under the Traits 3.0 behavior. Earlier versions also did not support the extended trait name syntax, accepting only simple trait names. Therefore, to use the "new style" behavior of zero-parameter handlers, be sure to include some aspect of the extended trait name syntax in the name specifier. .. index:: examples; handlers :: # list_notifier.py -- Example of zero-parameter handlers for an object # containing a list from traits.api import HasTraits, List class Employee: pass class Department( HasTraits ): employees = List(Employee) def a_handler(): print "A handler" def b_handler(): print "B handler" def c_handler(): print "C handler" fred = Employee() mary = Employee() donna = Employee() dept = Department(employees=[fred, mary]) # "Old style" name syntax # a_handler is called only if the list is replaced: dept.on_trait_change( a_handler, 'employees' ) # b_handler is called if the membership of the list changes: dept.on_trait_change( b_handler, 'employees_items') # "New style" name syntax # c_handler is called if 'employees' or its membership change: dept.on_trait_change( c_handler, 'employees[]' ) print "Changing list items" dept.employees[1] = donna # Calls B and C print "Replacing list" dept.employees = [donna] # Calls A and C .. index:: notification; static .. _static-notification: Static Notification ------------------- The static approach is the most convenient option, but it is not always possible. Writing a static change notification handler requires that, for a class whose trait attribute changes you are interested in, you write a method on that class (or a subclass). Therefore, you must know in advance what classes and attributes you want notification for, and you must be the author of those classes. Static notification also entails that every instance of the class has the same notification handlers. To indicate that a particular method is a static notification handler for a particular trait, you have two options: .. index:: pair: decorator; on_trait_change * Apply the @on_trait_change decorator to the method. * Give the method a special name based on the name of the trait attribute it "listens" to. .. _handler-decorator: Handler Decorator ````````````````` The most flexible method of statically specifying that a method is a notification handler for a trait is to use the @on_trait_change() decorator. The @on_trait_change() decorator is more flexible than specially-named method handlers, because it supports the very powerful extended trait name syntax (see :ref:`the-name-parameter`). You can use the decorator to set handlers on multiple attributes at once, on trait attributes of linked objects, and on attributes that are selected based on trait metadata. .. index:: pair: on_trait_change; syntax .. _decorator-syntax: Decorator Syntax :::::::::::::::: The syntax for the decorator is:: @on_trait_change( 'extended_trait_name' ) def any_method_name( self, ...): ... In this case, *extended_trait_name* is a specifier for one or more trait attributes, using the syntax described in :ref:`the-name-parameter`. The signatures that are recognized for "decorated" handlers are the same as those for dynamic notification handlers, as described in :ref:`notification-handler-signatures`. That is, they can have an *object* parameter, because they can handle notifications for trait attributes that do not belong to the same object. .. index:: pair: on_trait_change; semantics .. _decorator-semantics: Decorator Semantics ::::::::::::::::::: The functionality provided by the @on_trait_change() decorator is identical to that of specially-named handlers, in that both result in a call to on_trait_change() to register the method as a notification handler. However, the two approaches differ in when the call is made. Specially-named handlers are registered at class construction time; decorated handlers are registered at instance creation time, prior to setting any object state. A consequence of this difference is that the @on_trait_change() decorator causes any default initializers for the traits it references to be executed at instance construction time. In the case of specially-named handlers, any default initializers are executed lazily. .. index:: notification; specially-named handlers .. _specially-named-notification-handlers: Specially-named Notification Handlers ````````````````````````````````````` There are two kinds of special method names that can be used for static trait attribute change notifications. One is attribute-specific, and the other applies to all trait attributes on a class. .. index:: _name_changed(), _name_fired() To notify about changes to a single trait attribute named name, define a method named _\ *name*\ _changed() or _\ *name*\ _fired(). The leading underscore indicates that attribute-specific notification handlers are normally part of a class's private API. Methods named _\ *name*\ _fired() are normally used with traits that are events, described in :ref:`trait-events`. To notify about changes to any trait attribute on a class, define a method named _anytrait_changed(). .. index:: pair: examples; _any_trait_changed() pair: static notification; examples Both of these types of static trait attribute notification methods are illustrated in the following example:: # static_notification.py --- Example of static attribute # notification from traits.api import HasTraits, Float class Person(HasTraits): weight_kg = Float(0.0) height_m = Float(1.0) bmi = Float(0.0) def _weight_kg_changed(self, old, new): print 'weight_kg changed from %s to %s ' % (old, new) if self.height_m != 0.0: self.bmi = self.weight_kg / (self.height_m**2) def _anytrait_changed(self, name, old, new): print 'The %s trait changed from %s to %s ' \ % (name, old, new) """ >>> bob = Person() >>> bob.height_m = 1.75 The height_m trait changed from 1.0 to 1.75 >>> bob.weight_kg = 100.0 The weight_kg trait changed from 0.0 to 100.0 weight_kg changed from 0.0 to 100.0 The bmi trait changed from 0.0 to 32.6530612245 """ In this example, the attribute-specific notification function is _weight_kg_changed(), which is called only when the **weight_kg** attribute changes. The class-specific notification handler is _anytrait_changed(), and is called when **weight_kg**, **height_m**, or **bmi** changes. Thus, both handlers are called when the **weight_kg** attribute changes. Also, the _weight_kg_changed() function modifies the **bmi** attribute, which causes _anytrait_changed() to be called for that attribute. The arguments that are passed to the trait attribute change notification method depend on the method signature and on which type of static notification handler it is. .. _attribute-specific-handler-signatures: Attribute-specific Handler Signatures ````````````````````````````````````` For an attribute specific notification handler, the method signatures supported are: .. method:: _name_changed() .. method:: _name_changed(new) .. method:: _name_changed(old, new) .. method:: _name_changed(name, old, new) The method name can also be _\ *name*\ _fired(), with the same set of signatures. In these signatures: * *new* is the new value assigned to the trait attribute. For List and Dict objects, this is a list of the items that were added. * *old* is the old value assigned to the trait attribute. For List and Dict objects, this is a list of the items that were deleted. * *name* is the name of the trait attribute. The extended trait name syntax is not supported. [4]_ Note that these signatures follow a different pattern for argument interpretation from dynamic handlers and decorated static handlers. Both of the following methods define a handler for an object's **name** trait:: def _name_changed( self, arg1, arg2, arg3): pass @on_trait_change('name') def some_method( self, arg1, arg2, arg3): pass However, the interpretation of arguments to these methods differs, as shown in the following table. .. _handler-argument-interpretation-table: .. rubric:: Handler argument interpretation ======== =================== ================ Argument _\ *name*\ _changed @on_trait_change ======== =================== ================ *arg1* *name* *object* *arg2* *old* *name* *arg3* *new* *new* ======== =================== ================ .. _general-static-handler-signatures: General Static Handler Signatures ````````````````````````````````` In the case of a non-attribute specific handler, the method signatures supported are: .. method:: _anytrait_changed() .. method:: _anytrait_changed(name) .. method:: _anytrait_changed(name, new) .. method:: _anytrait_changed(name, old, new) The meanings for *name*, *new*, and *old* are the same as for attribute-specific notification functions. .. _trait-events: Trait Events ------------ .. index:: events The Traits package defines a special type of trait called an event. Events are instances of (subclasses of) the Event class. There are two major differences between a normal trait and an event: * All notification handlers associated with an event are called whenever any value is assigned to the event. A normal trait attribute only calls its associated notification handlers when the previous value of the attribute is different from the new value being assigned to it. * An event does not use any storage, and in fact does not store the values assigned to it. Any value assigned to an event is reported as the new value to all associated notification handlers, and then immediately discarded. Because events do not retain a value, the *old* argument to a notification handler associated with an event is always the special Undefined object (see :ref:`undefined-object`). Similarly, attempting to read the value of an event results in a TraitError exception, because an event has no value. .. index:: pair: events; examples As an example of an event, consider:: # event.py --- Example of trait event from traits.api import Event, HasTraits, List, Tuple point_2d = Tuple(0, 0) class Line2D(HasTraits): points = List(point_2d) line_color = RGBAColor('black') updated = Event def redraw(self): pass # Not implemented for this example def _points_changed(self): self.updated = True def _updated_fired(self): self.redraw() In support of the use of events, the Traits package understands attribute-specific notification handlers with names of the form _\ *name*\ _fired(), with signatures identical to the _\ *name*\ _changed() functions. In fact, the Traits package does not check whether the trait attributes that _\ *name*\ _fired() handlers are applied to are actually events. The function names are simply synonyms for programmer convenience. Similarly, a function named on_trait_event() can be used as a synonym for on_trait_change() for dynamic notification. .. index:: Undefined object .. _undefined-object: Undefined Object ```````````````` Python defines a special, singleton object called None. The Traits package introduces an additional special, singleton object called Undefined. The Undefined object is used to indicate that a trait attribute has not yet had a value set (i.e., its value is undefined). Undefined is used instead of None, because None is often used for other meanings, such as that the value is not used. In particular, when a trait attribute is first assigned a value and its associated trait notification handlers are called, Undefined is passed as the value of the old parameter to each handler, to indicate that the attribute previously had no value. Similarly, the value of a trait event is always Undefined. .. rubric:: Footnotes .. [4] For List and Dict trait attributes, you can define a handler with the name _\ *name*\ _items_changed(), which receives notifications of changes to the contents of the list or dictionary. This feature exists for backward compatibility. The preferred approach is to use the @on_trait_change decorator with extended name syntax. For a static _\ *name*\ _items_changed() handler, the *new* parameter is a TraitListEvent or TraitDictEvent whose **index**, **added**, and **removed** attributes indicate the nature of the change, and the *old* parameter is Undefined. traits-4.5.0/docs/source/traits_user_manual/testing.rst000066400000000000000000000117121233213561600233720ustar00rootroot00000000000000.. index:: testing, test trait classes .. _testing_trait_classes: ====================== Testing Traits Classes ====================== A mixin class is provided to facilitate writing tests for HasTraits classes. The following methods are available when |UnittestTools| is added as a mixin class in the developer's test cases. .. autosummary:: :nosignatures: ~traits.testing.unittest_tools.UnittestTools.assertTraitChanges ~traits.testing.unittest_tools.UnittestTools.assertTraitDoesNotChange ~traits.testing.unittest_tools.UnittestTools.assertMultiTraitChanges ~traits.testing.unittest_tools.UnittestTools.assertTraitChangesAsync ~traits.testing.unittest_tools.UnittestTools.assertEventuallyTrue The above assert methods, except |assertEventuallyTrue|, can be used as context managers, which at entry, hook a trait listeners on the class for the desired events and record the arguments passed to the change handler at every fired event. This way the developer can easily assert that specific events have been fired. Further analysis and checking can be performed by inspecting the list of recorded events. Both normal and extended trait names are supported. However, no check is performed regarding the validity of the trait name, thus care is required to safeguard against spelling mistakes in the names of the traits that we need to assert the behaviour. The following example demonstrates the basic usage of the mixin class in a TestCase:: import unittest from traits.api import HasTraits, Float, List, Bool, on_trait_change from traits.testing.api import UnittestTools class MyClass(HasTraits): number = Float(2.0) list_of_numbers = List(Float) flag = Bool @on_trait_change('number') def _add_number_to_list(self, value): """ Append the value to the list of numbers. """ self.list_of_numbers.append(value) def add_to_number(self, value): """ Add the value to `number`. """ self.number += value class MyTestCase(unittest.TestCase, UnittestTools): def setUp(self): self.my_class = MyClass() def test_when_using_with(self): """ Check normal use cases as a context manager. """ my_class = self.my_class # Checking for change events with self.assertTraitChanges(my_class, 'number') as result: my_class.number = 5.0 # Inspecting the last recorded event expected = (my_class, 'number', 2.0, 5.0) self.assertSequenceEqual(result.events, [expected]) # Checking for specific number of events with self.assertTraitChanges(my_class, 'number', count=3) as result: my_class.flag = True my_class.add_to_number(10.0) my_class.add_to_number(10.0) my_class.add_to_number(10.0) expected = [(my_class, 'number', 5.0, 15.0), (my_class, 'number', 15.0, 25.0), (my_class, 'number', 25.0, 35.0)] self.assertSequenceEqual(result.events, expected) # Check using extended names with self.assertTraitChanges(my_class, 'list_of_numbers[]'): my_class.number = -3.0 # Check that event is not fired my_class.number = 2.0 with self.assertTraitDoesNotChange(my_class, 'number') as result: my_class.flag = True my_class.number = 2.0 # The value is the same as the original =========== Using Mocks =========== Trying to mock a method in a |HasStrictTraits| instance will raise an error because the |HasStrictTraits| machinery does not allow any modification of the methods and attributes of a |HasStrictTraits| instance. To circumvent the |HasStrictTraits| machinery, and mock methods using `the mock library`_, please follow the logic in the example below:: from traits.api import HasStrictTraits, Float from mock import Mock class MyClass(HasStrictTraits): number = Float(2.0) def add_to_number(self, value): """ Add the value to `number`. """ self.number += value my_class = MyClass() # Using my_class.add_to_number = Mock() will fail. # But setting the mock on the instance `__dict__` works. my_class.__dict__['add_to_number'] = Mock() # We can now use the mock in our tests. my_class.add_number(42) print my_class.add_to_number.call_args_list .. note:: The above method will not work for mocking |Property| setters, getters and validators. .. _the mock library: https://pypi.python.org/pypi/mock .. |HasStrictTraits| replace:: :class:`~traits.has_traits.HasStrictTraits` .. |UnittestTools| replace:: :class:`~traits.testing.unittest_tools.UnittestTools` .. |Property| replace:: :func:`~traits.traits.Property` .. |assertEventuallyTrue| replace:: :func:`~traits.testing.unittest_tools.UnittestTools.assertEventuallyTrue` traits-4.5.0/docs/traitsdocreadme.txt000066400000000000000000000003331233213561600176720ustar00rootroot00000000000000Traits documentation files in this directory: Traits3_UM.pdf PDF version of User's Manual Traits3_UM.doc MS Word source for User's Manual Traits3_UM_add.css CSS to add when using Pydoh on the User's Manual traits-4.5.0/examples/000077500000000000000000000000001233213561600146465ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/000077500000000000000000000000001233213561600166745ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/default.css000066400000000000000000000001111233213561600210230ustar00rootroot00000000000000pre { border: 1px solid black; background-color: #E8E8E8; padding: 4px } traits-4.5.0/examples/tutorials/doc_examples/000077500000000000000000000000001233213561600213375ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/doc_examples/default.css000066400000000000000000000015001233213561600234710ustar00rootroot00000000000000body { background-color: #FFFFFF; } h1 { font-family: Arial; font-size: 14pt; color: #303030; background-color: #FCD062; padding-top: 3px; padding-left:8px; padding-bottom: 3px; padding-right: 8px; } h2 { font-family: Arial; font-size: 12pt; color: #303030; background-color: #FCD062; padding-top: 3px; padding-left:8px; padding-bottom: 3px; padding-right: 8px; } pre { border: 1px solid #A0A0A0; background-color: #FDF7E7; padding: 4px; } dl { border: 1px solid #A0A0A0; background-color: #FDF7E7; padding-top: 4px; padding-bottom: 6px; padding-left: 8px; padding-right: 8px; } dl dl { border: 0px solid #A0A0A0; } dt { font-family: Arial; font-weight: bold; dd { padding-bottom: 10px; } traits-4.5.0/examples/tutorials/doc_examples/doc_examples.rst000066400000000000000000000041561233213561600245420ustar00rootroot00000000000000Documentation Examples ====================== This tutorial is simply a collection of the various examples taken from the Traits documentation. They are presented as a tutorial so that interested users can see the results of actually executing the example code, as well as to promote further study and exploration of various Traits topics in an interactive environment that allows easy modification and testing of changes to the code. So please feel free to explore the examples as your time, fancy and interest dictate. Have fun! A brief description of each of the examples presented in this tutorial follows: Add Class Traits Defining mutually-referring classes using the *add_class_trait* method. All Traits Features Shows the five primary features of the Traits package. Bad Self Ref Shows the incorrect way of defining a self-referencing class. Cast Simple Shows use of some of the simple casting types. Circular Definition Shows the incorrect way of defining mutually-referring classes. Compound Shows the definition of a compound trait. Custom TraitHandler Example of a custom TraitHandler Use Custom TraitHandler Example of using a custom TraitHandler Delegate Example of trait delegation. Delegate Prefix Examples of the Delegate() 'prefix' parameter. Delegation Notification Example of notification with delegation. Event Shows the definition of a trait event List Notifiers Example of zero-parameter handlers for an object containing a list Metadata Example of accessing trait metadata attributes Minimal Minimal example of using Traits. Override Default Example of overriding a default value for a trait attribute in a subclass Static Notification Example of static attribute notification This Example of This predefined trait Trait Reuse Example of reusing trait definitions Temp Wildcard Example of using a wildcard with a trait attribute name. All Wildcard Shows the trait attribute wildcard rules. Wildcard rules Example of trait attribute wildcard rules traits-4.5.0/examples/tutorials/doc_examples/examples/000077500000000000000000000000001233213561600231555ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/doc_examples/examples/adapt_metadata.py000066400000000000000000000006711233213561600264640ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # adapt_metadata.py - Example of using 'adapt' metadata #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Instance from interface_definition import IName #--[Code]----------------------------------------------------------------------- class Apartment( HasTraits ): renter = Instance( IName, adapt='no' ) traits-4.5.0/examples/tutorials/doc_examples/examples/add_class_trait.py000066400000000000000000000013231233213561600266460ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # add_class_trait.py --- Example of mutually-referring classes # using add_class_trait() #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Instance #--[Code]----------------------------------------------------------------------- # Defining mutually-referring classes using add_class_trait() class Chicken ( HasTraits ): pass class Egg ( HasTraits ): created_by = Instance( Chicken ) # Now that 'Egg' is defined, we can add the 'hatched_from' trait to # solve the mutual-reference problem... Chicken.add_class_trait( 'hatched_from', Instance( Egg ) ) traits-4.5.0/examples/tutorials/doc_examples/examples/all_traits_features.py000066400000000000000000000026561233213561600275740ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # all_traits_features.py --- Shows primary features of the Traits # package #--[Imports]-------------------------------------------------------------------- from traits.api import Delegate, HasTraits, Instance, Int, Str #--[Code]----------------------------------------------------------------------- # Shows the five primary features of the Traits package. class Parent ( HasTraits ): # INITIALIZATION: last_name' is initialized to '': last_name = Str( '' ) class Child ( HasTraits ): age = Int # VALIDATION: 'father' must be a Parent instance: father = Instance( Parent ) # DELEGATION: 'last_name' is delegated to father's 'last_name': last_name = Delegate( 'father' ) # NOTIFICATION: This method is called when 'age' changes: def _age_changed ( self, old, new ): print 'Age changed from %s to %s ' % ( old, new ) #--[Example*]------------------------------------------------------------------- # Set up the example: joe = Parent() joe.last_name = 'Johnson' moe = Child() moe.father = joe # DELEGATION in action: print "Moe's last name is %s " % moe.last_name # Result: # Moe's last name is Johnson # NOTIFICATION in action moe.age = 10 # Result: # Age changed from 0 to 10 # VISUALIZATION: Displays a UI for editing moe's # attributes (if a supported GUI toolkit is installed) moe.configure_traits() traits-4.5.0/examples/tutorials/doc_examples/examples/all_wildcard.py000066400000000000000000000020731233213561600261520ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # all_wildcard.py --- Example of trait attribute wildcard rules #--[Imports]-------------------------------------------------------------------- from traits.api import Any, Str, Int, HasTraits, TraitError #--[Code]----------------------------------------------------------------------- class Person ( HasTraits ): # Normal, explicitly defined trait: name = Str # By default, let all traits have any value: _ = Any # Except for this one, which must be an Int: age = Int #--[Example*]------------------------------------------------------------------- # Create a sample Person: bill = Person() # These assignments should all work: bill.name = 'William' bill.address = '121 Drury Lane' bill.zip_code = 55212 bill.age = 49 # This should generate an error (must be an Int): print 'Attempting to assign a string to an Int trait object...\n' try: bill.age = 'middle age' except TraitError, c: print 'TraitError: ', c, '\n' # Display the final results: bill.print_traits() traits-4.5.0/examples/tutorials/doc_examples/examples/bad_self_ref.py000066400000000000000000000011731233213561600261240ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # bad_self_ref.py -- Non-working example with self-referencing class definition #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Instance #--[Code]----------------------------------------------------------------------- # Shows the incorrect way of defining a self-referencing class. try: class Employee ( HasTraits ): # This won't work. # 'Employee' is not defined until the class definition is complete: manager = Instance( Employee ) except NameError, excp: print excp traits-4.5.0/examples/tutorials/doc_examples/examples/cached_prop.py000066400000000000000000000022421233213561600257760ustar00rootroot00000000000000#------------------------------------------------------------------------------- # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------- # cached_prop.py - Example of @cached_property decorator #--[Imports]-------------------------------------------------------------------- from traits.api import HasPrivateTraits, List, Int,\ Property, cached_property #--[Code]----------------------------------------------------------------------- class TestScores ( HasPrivateTraits ): scores = List( Int ) average = Property( depends_on = 'scores' ) @cached_property def _get_average ( self ): s = self.scores return (float( reduce( lambda n1, n2: n1 + n2, s, 0 ) ) / len( s )) traits-4.5.0/examples/tutorials/doc_examples/examples/circular_definition.py000066400000000000000000000012751233213561600275500ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Trait, Instance #--[Code]----------------------------------------------------------------------- # Shows the incorrect way of defining mutually-referring classes. try: class Chicken ( HasTraits ): # Won't work: 'Egg' not defined yet: hatched_from = Instance( Egg ) class Egg ( HasTraits ): # If we move this class to the top, then this line won't work, because # 'Chicken' won't be defined yet: created_by = Instance( Chicken ) except NameError, excp: print excp traits-4.5.0/examples/tutorials/doc_examples/examples/compound.py000066400000000000000000000017031233213561600253540ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # compound.py -- Example of multiple criteria in a trait definition #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Range, Trait, TraitError #--[Code]----------------------------------------------------------------------- # Shows the definition of a compound trait. class Die ( HasTraits ): # Define a compound trait definition: value = Trait( 1, Range( 1, 6 ), 'one', 'two', 'three', 'four', 'five', 'six' ) #--[Example*]------------------------------------------------------------------- # Create a sample Die: die = Die() # Try out some sample valid values: die.value = 3 die.value = 'three' die.value = 5 die.value = 'five' # Now try out some invalid values: try: die.value = 0 except TraitError, excp: print excp try: die.value = 'zero' except TraitError, excp: print excp traits-4.5.0/examples/tutorials/doc_examples/examples/configure_traits.py000066400000000000000000000010211233213561600270700ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # configure_traits.py -- Sample code to demonstrate configure_traits() #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Str, Int #--[Code]----------------------------------------------------------------------- class SimpleEmployee(HasTraits): first_name = Str last_name = Str department = Str employee_number = Str salary = Int sam = SimpleEmployee() sam.configure_traits() traits-4.5.0/examples/tutorials/doc_examples/examples/custom_traithandler.py000066400000000000000000000012041233213561600275770ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # custom_traithandler.py --- Example of a custom TraitHandler #--[Imports]-------------------------------------------------------------------- import types from traits.api import TraitHandler #--[Code]----------------------------------------------------------------------- class TraitOddInteger(TraitHandler): def validate(self, object, name, value): if ((type(value) is types.IntType) and (value > 0) and ((value % 2) == 1)): return value self.error(object, name, value) def info(self): return 'a positive odd integer' traits-4.5.0/examples/tutorials/doc_examples/examples/deferring_notification.py000066400000000000000000000031571233213561600302500ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # deferring_notification.py -- Example of notification with deferring #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Instance, PrototypedFrom, Str #--[Code]----------------------------------------------------------------------- class Parent ( HasTraits ): first_name = Str last_name = Str def _last_name_changed(self, new): print "Parent's last name changed to %s." % new class Child ( HasTraits ): father = Instance( Parent ) first_name = Str last_name = PrototypedFrom( 'father' ) def _last_name_changed(self, new): print "Child's last name changed to %s." % new #--[Example*]------------------------------------------------------------------- dad = Parent( first_name='William', last_name='Chase' ) # Output: Parent's last name changed to Chase. son = Child( first_name='John', father=dad ) # Output: Child's last name changed to Chase. # Change Parent's last_name dad.last_name='Jones' # Output: Parent's last name changed to Jones. # Child's last name changed to Jones. # Override Child's last_name son.last_name='Thomas' # Output Child's last name changed to Thomas. # Change Parent's last_name; Child's is not affected. dad.last_name='Riley' # Output: Parent's last name changed to Riley. # Reset Child's last_name del son.last_name # Output: Child's last name changed to Riley. # Change to Parent now affects Child. dad.last_name='Simmons' # Output: Parent's last name changed to Simmons. # Child's last name changed to Simmons. traits-4.5.0/examples/tutorials/doc_examples/examples/delegate.py000066400000000000000000000033141233213561600253020ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # delegate.py --- Example of trait delegation #--[Imports]-------------------------------------------------------------------- from traits.api import DelegatesTo, HasTraits, Instance, Str, TraitError #--[Code]----------------------------------------------------------------------- class Parent(HasTraits): first_name = Str last_name = Str class Child(HasTraits): first_name = Str last_name = DelegatesTo('father') father = Instance(Parent) mother = Instance(Parent) #--[Example*]------------------------------------------------------------------- tony = Parent(first_name='Anthony', last_name='Jones') alice = Parent(first_name='Alice', last_name='Smith') sally = Child( first_name='Sally', father=tony, mother=alice) # Child delegates its 'last_name' to its 'father' object's 'last_name' print sally.last_name # Output: Jones # Assign an explicit value to the child's 'last_name' sally.last_name = 'Cooper' print tony.last_name #Output: Cooper # Validation is still controlled by the father's 'last_name' trait print 'Attempting to assign a Parent object to a Str trait...\n' try: sally.last_name = sally.mother # ERR: string expected except TraitError, c: print 'TraitError: ', c """ The exception printed will look similar to the following: Traceback (most recent call last): File "", line 1, in ? File "c:\src\trunk\enthought\traits\trait_handlers.py", line 163, in error raise TraitError, ( object, name, self.info(), value ) traits.trait_errors.TraitError: The 'last_name' trait of a Child instance must be a value of type 'str', but a value of <__main__.Parent object at 0x009DD6F0> was specified. """ traits-4.5.0/examples/tutorials/doc_examples/examples/disallow.py000066400000000000000000000007401233213561600253460ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # disallow.py --- Example of using Disallow with wildcards #--[Imports]-------------------------------------------------------------------- from traits.api import Disallow, Float, \ HasTraits, Int, Str #--[Code]----------------------------------------------------------------------- class Person (HasTraits): name = Str age = Int weight = Float _ = Disallow traits-4.5.0/examples/tutorials/doc_examples/examples/dynamic_notification.py000066400000000000000000000016131233213561600277220ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # dynamic_notification.py --- Example of dynamic notification #--[Imports]-------------------------------------------------------------------- from traits.api import Float, HasTraits, Instance #--[Code]----------------------------------------------------------------------- class Part (HasTraits): cost = Float(0.0) class Widget (HasTraits): part1 = Instance(Part) part2 = Instance(Part) cost = Float(0.0) def __init__(self): self.part1 = Part() self.part2 = Part() self.part1.on_trait_change(self.update_cost, 'cost') self.part2.on_trait_change(self.update_cost, 'cost') def update_cost(self): self.cost = self.part1.cost + self.part2.cost #--[Example*]------------------------------------------------------------------- w = Widget() w.part1.cost = 2.25 w.part2.cost = 5.31 print w.cost # Result: 7.56 traits-4.5.0/examples/tutorials/doc_examples/examples/event.py000066400000000000000000000012071233213561600246500ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # event.py --- Example of a trait event #--------------------------------------------------------------------- from traits.api import Event, HasTraits, List, RGBColor, Tuple #--[Code]---------------------------------------------------------------------- point_2d = Tuple(0, 0) class Line2D(HasTraits): points = List(point_2d) line_color = RGBColor('black') updated = Event def redraw(self): pass # Not implemented for this example def _points_changed(self): self.updated = True def _updated_fired(self): self.redraw() traits-4.5.0/examples/tutorials/doc_examples/examples/external_adapter.py000066400000000000000000000015171233213561600270550ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # external_adapter.py - Example of declaring a class as an adapter # externally to the class #--[Imports]-------------------------------------------------------------------- from traits.api import adapts from interface_definition import IName from interface_implementation import Person #--[Code]----------------------------------------------------------------------- class AnotherPersonAdapter ( object ): # Implement the adapter's constructor: def __init__ ( self, person ): self.person = person # Implement the 'IName' interface on behalf of its client: def get_name ( self ): return ('%s %s' % ( self.person.first_name, self.person.last_name )) adapts( AnotherPersonAdapter, Person, IName ) traits-4.5.0/examples/tutorials/doc_examples/examples/interface_definition.py000066400000000000000000000006651233213561600277060ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # interface_definition.py - Example of defining an interface #--[Imports]-------------------------------------------------------------------- from traits.api import Interface #--[Code]----------------------------------------------------------------------- class IName(Interface): def get_name(self): """ Returns a string which is the name of an object. """ traits-4.5.0/examples/tutorials/doc_examples/examples/interface_implementation.py000066400000000000000000000017531233213561600306020ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # interface_implementation.py - Example of implementing an interface #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, implements, Str, Instance from interface_definition import IName #--[Code]----------------------------------------------------------------------- class Person(HasTraits): implements(IName) first_name = Str( 'John' ) last_name = Str( 'Doe' ) # Implementation of the 'IName' interface: def get_name ( self ): """ Returns the name of an object. """ return ('%s %s' % ( self.first_name, self.last_name )) #--[Example*]------------------------------------------------------------------- class Apartment(HasTraits): renter = Instance(IName) william = Person(first_name='William', last_name='Adams') apt1 = Apartment( renter=william ) print 'Renter is: ', apt1.renter.get_name() # Result: Renter is: William Adams traits-4.5.0/examples/tutorials/doc_examples/examples/keywords.py000066400000000000000000000012201233213561600253710ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # keywords.py --- Example of trait keywords #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Str #--[Code]----------------------------------------------------------------------- class Person(HasTraits): # 'label' is used for Traits UI field labels; # 'desc' can be used for tooltips. first_name = Str('', desc='first or personal name', label='First Name') last_name = Str('', desc='last or family name', label='Last Name') traits-4.5.0/examples/tutorials/doc_examples/examples/lesson.desc000066400000000000000000000015051233213561600253210ustar00rootroot00000000000000Examples from the Traits User Guide all_traits_features all_wildcard bad_self_ref circular_definition add_class_trait cast_simple compound custom_traithandler default_trait_ui delegate delegate_prefix disallow dynamic_notification enum_simple event explicit false graphic_example imageenumeditor include_extra instanceeditor instance_example keywords mapped map_simple minimal multiple_criteria object_trait_attrs override_default override_editor person_bmi range reuse_editor static_notification temp_wildcard this traitcasttype traitdict traitenum traitinstance traitlist traitmap traitprefixlist traitprefixmap traitrange traitstring traittuple traitype trait_reuse type_simple user_custom_th use_custom_th validator view_attributes view_multi_object view_standalone widget wildcard wildcard_all wildcard_name wildcard_rules wizard traits-4.5.0/examples/tutorials/doc_examples/examples/list_notifier.py000066400000000000000000000023711233213561600264040ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # list_notifier.py -- Example of zero-parameter handlers for an object # containing a list #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, List #--[Code]----------------------------------------------------------------------- class Employee: pass class Department( HasTraits ): employees = List(Employee) #--[Example*]------------------------------------------------------------------- def a_handler(): print "A handler" def b_handler(): print "B handler" def c_handler(): print "C handler" fred = Employee() mary = Employee() donna = Employee() dept = Department(employees=[fred, mary]) # "Old style" name syntax # a_handler is called only if the list is replaced: dept.on_trait_change( a_handler, 'employees' ) # b_handler is called if the membership of the list changes: dept.on_trait_change( b_handler, 'employees_items') # "New style" name syntax # c_handler is called if 'employees' or its membership change: dept.on_trait_change( c_handler, '[employees]' ) print "Changing list items" dept.employees[1] = donna # Calls B and C print "Replacing list" dept.employees = [donna] # Calls A and C traits-4.5.0/examples/tutorials/doc_examples/examples/mapped.py000066400000000000000000000032051233213561600247750ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # mapped.py --- Example of a mapped trait #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Trait #--[Code]----------------------------------------------------------------------- standard_color = Trait ('black', { 'black': ( 0.0, 0.0, 0.0, 1.0 ), 'blue': ( 0.0, 0.0, 1.0, 1.0 ), 'cyan': ( 0.0, 1.0, 1.0, 1.0 ), 'green': ( 0.0, 1.0, 0.0, 1.0 ), 'magenta': ( 1.0, 0.0, 1.0, 1.0 ), 'orange': ( 0.8, 0.196, 0.196, 1.0 ), 'purple': ( 0.69, 0.0, 1.0, 1.0 ), 'red': ( 1.0, 0.0, 0.0, 1.0 ), 'violet': ( 0.31, 0.184, 0.31, 1.0 ), 'yellow': ( 1.0, 1.0, 0.0, 1.0 ), 'white': ( 1.0, 1.0, 1.0, 1.0 ), 'transparent': ( 1.0, 1.0, 1.0, 0.0 ) } ) red_color = Trait( 'red', standard_color ) class GraphicShape( HasTraits ): line_color = standard_color fill_color = red_color #--[Example*]------------------------------------------------------------------- my_shape1 = GraphicShape() # Default values for normal trait attributes print my_shape1.line_color, my_shape1.fill_color # Output: black red # Default values for shadow trait attributes print my_shape1.line_color_, my_shape1.fill_color_ # Output: (0.0, 0.0, 0.0, 1.0) (1.0, 0.0, 0.0, 1.0) # Non-default values my_shape2 = GraphicShape() my_shape2.line_color = 'blue' my_shape2.fill_color = 'green' print my_shape2.line_color, my_shape2.fill_color # Output: blue green print my_shape2.line_color_, my_shape2.fill_color_ # Output: (0.0, 0.0, 1.0, 1.0) (0.0, 1.0, 0.0, 1.0) traits-4.5.0/examples/tutorials/doc_examples/examples/metadata.py000066400000000000000000000037521233213561600253160ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # metadata.py --- Example of accessing trait metadata attributes #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Int, List, Float, Instance, Any,\ TraitType #--[Code]----------------------------------------------------------------------- class Foo( HasTraits ): pass class Test( HasTraits ): i = Int(99) lf = List(Float) foo = Instance( Foo, () ) any = Any( [1, 2, 3 ] ) #--[Example*]------------------------------------------------------------------- t = Test() # Prints values of various metadata attributes for each of the traits. print t.trait( 'i' ).default # 99 print t.trait( 'i' ).default_kind # value print t.trait( 'i' ).inner_traits # () print t.trait( 'i' ).is_trait_type( Int ) # True print t.trait( 'i' ).is_trait_type( Float ) # False print t.trait( 'lf' ).default # [] print t.trait( 'lf' ).default_kind # list print t.trait( 'lf' ).inner_traits # (,) print t.trait( 'lf' ).is_trait_type( List ) # True print t.trait( 'lf' ).is_trait_type( TraitType ) # True print t.trait( 'lf' ).is_trait_type( Float ) # False print t.trait( 'lf' ).inner_traits[0].is_trait_type( Float ) # True print t.trait( 'foo' ).default # print t.trait( 'foo' ).default_kind # factory print t.trait( 'foo' ).inner_traits # () print t.trait( 'foo' ).is_trait_type( Instance ) # True print t.trait( 'foo' ).is_trait_type( List ) # False print t.trait( 'any' ).default # [1, 2, 3] print t.trait( 'any' ).default_kind # list print t.trait( 'any' ).inner_traits # () print t.trait( 'any' ).is_trait_type( Any ) # True print t.trait( 'any' ).is_trait_type( List ) # False traits-4.5.0/examples/tutorials/doc_examples/examples/minimal.py000066400000000000000000000016311233213561600251560ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # minimal.py --- Minimal example of using traits. #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Float, TraitError #--[Code]----------------------------------------------------------------------- class Person(HasTraits): weight = Float(150.0) #--[Example*]------------------------------------------------------------------- # instantiate the class joe = Person() # Show the default value print joe.weight # Assign new values joe.weight = 161.9 # OK to assign a float print joe.weight joe.weight = 162 # OK to assign an int print joe.weight # The following line causes a traceback: try: joe.weight = 'average' # Error to assign a string print "You should not see this message." except TraitError: print "You can't assign a string to the 'weight' trait." traits-4.5.0/examples/tutorials/doc_examples/examples/object_trait_attrs.py000066400000000000000000000017101233213561600274140ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # object_trait_attrs.py --- Example of per-object trait attributes #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Range #--[Code]----------------------------------------------------------------------- class GUISlider (HasTraits): def __init__(self, eval=None, label='Value', trait=None, min=0.0, max=1.0, initial=None, **traits): HasTraits.__init__(self, **traits) if trait is None: if min > max: min, max = max, min if initial is None: initial = min elif not (min <= initial <= max): initial = [min, max][ abs(initial - min) > abs(initial - max)] trait = Range(min, max, value = initial) self.add_trait(label, trait) traits-4.5.0/examples/tutorials/doc_examples/examples/override_default.py000066400000000000000000000020221233213561600270460ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # override_default.py -- Example of overriding a default value for # a trait attribute in a subclass #--[Imports]-------------------------------------------------------------------- from traits.api \ import HasTraits, Range, Str #--[Code]----------------------------------------------------------------------- # Example of overriding a default value for a trait in a subclass: # Define the base class: class Employee ( HasTraits ): name = Str salary_grade = Range( value = 1, low = 1, high = 10 ) # Define a subclass: class Manager ( Employee ): # Override the default value for the inherited 'salary_grade' trait: salary_grade = 5 #--[Example*]------------------------------------------------------------------- # Create an employee and display its initial contents: joe = Employee( name = 'Joe' ) joe.print_traits() # Now do the same thing for a manager object: mike = Manager( name = 'Mike' ) mike.print_traits() traits-4.5.0/examples/tutorials/doc_examples/examples/prototype_prefix.py000066400000000000000000000024611233213561600271540ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # prototype_prefix.py --- Examples of PrototypedFrom() prefix parameter #--[Imports]-------------------------------------------------------------------- from traits.api import PrototypedFrom, Float, HasTraits, Instance, Str #--[Code]----------------------------------------------------------------------- class Parent (HasTraits): first_name = Str family_name = '' favorite_first_name = Str child_allowance = Float(1.00) class Child (HasTraits): __prefix__ = 'child_' first_name = PrototypedFrom('mother', 'favorite_*') last_name = PrototypedFrom('father', 'family_name') allowance = PrototypedFrom('father', '*') father = Instance(Parent) mother = Instance(Parent) #--[Example*]------------------------------------------------------------------- fred = Parent( first_name = 'Fred', family_name = 'Lopez', favorite_first_name = 'Diego', child_allowance = 5.0 ) maria = Parent( first_name = 'Maria', family_name = 'Gonzalez', favorite_first_name = 'Tomas', child_allowance = 10.0 ) nino = Child( father=fred, mother=maria ) print '%s %s gets $%.2f for allowance' % (nino.first_name, nino.last_name, nino.allowance) traits-4.5.0/examples/tutorials/doc_examples/examples/scratch_adapter.py000066400000000000000000000017021233213561600266560ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # scratch_adapter.py - Example of writing an adapter from scratch #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Instance, adapts from interface_definition import IName from interface_implementation import Person #--[Code]----------------------------------------------------------------------- class PersonINameAdapter ( HasTraits ): # Declare what interfaces this adapter implements, # and for what class: adapts( Person, IName ) # Declare the type of client it supports: client = Instance( Person ) # Implement the adapter's constructor: def __init__ ( self, client ): self.client = client # Implement the 'IName' interface on behalf of its client: def get_name ( self ): return ('%s %s' % ( self.client.first_name, self.client.last_name )) traits-4.5.0/examples/tutorials/doc_examples/examples/simple_adapter.py000066400000000000000000000015071233213561600265230ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # simple_adapter.py - Example of adaptation using Adapter #--[Imports]-------------------------------------------------------------------- from traits.api import Adapter, Instance, implements from interface_definition import IName from interface_implementation import Person #--[Code]----------------------------------------------------------------------- class PersonINameAdapter( Adapter ): # Declare what interfaces this adapter implements for its # client: implements( IName ) # Declare the type of client it supports: adaptee = Instance( Person ) # Implement the 'IName' interface on behalf of its client: def get_name ( self ): return ('%s %s' % ( self.adaptee.first_name, self.adaptee.last_name )) traits-4.5.0/examples/tutorials/doc_examples/examples/static_notification.py000066400000000000000000000021171233213561600275650ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # static_notification.py --- Example of static attribute notification #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Float #--[Code]----------------------------------------------------------------------- class Person(HasTraits): weight_kg = Float(0.0) height_m = Float(1.0) bmi = Float(0.0) def _weight_kg_changed(self, old, new): print 'weight_kg changed from %s to %s ' % (old, new) if self.height_m != 0.0: self.bmi = self.weight_kg / (self.height_m**2) def _anytrait_changed(self, name, old, new): print 'The %s trait changed from %s to %s ' % (name, old, new) #--[Example*]------------------------------------------------------------------- bob = Person() bob.height_m = 1.75 # Output: The height_m trait changed from 1.0 to 1.75 bob.weight_kg = 100.0 # Output: # The weight_kg trait changed from 0.0 to 100.0 # weight_kg changed from 0.0 to 100.0 # The bmi trait changed from 0.0 to 32.6530612245 traits-4.5.0/examples/tutorials/doc_examples/examples/temp_wildcard.py000066400000000000000000000006241233213561600263470ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # temp_wildcard.py --- Example of using a wildcard with a trait # attribute name #--[Imports]-------------------------------------------------------------------- from traits.api import Any, HasTraits #--[Code]----------------------------------------------------------------------- class Person(HasTraits): temp_ = Any traits-4.5.0/examples/tutorials/doc_examples/examples/this.py000066400000000000000000000005501233213561600244760ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # this.py --- Example of This predefined trait #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, This #--[Code]----------------------------------------------------------------------- class Employee(HasTraits): manager = This traits-4.5.0/examples/tutorials/doc_examples/examples/trait_reuse.py000066400000000000000000000007501233213561600260570ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # trait_reuse.py --- Example of reusing trait definitions #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Range #--[Code]----------------------------------------------------------------------- coefficient = Range(-1.0, 1.0, 0.0) class quadratic(HasTraits): c2 = coefficient c1 = coefficient c0 = coefficient x = Range(-100.0, 100.0, 0.0) traits-4.5.0/examples/tutorials/doc_examples/examples/trait_subclass.py000066400000000000000000000012431233213561600265510ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # trait_subclass.py -- Example of subclassing a trait class #--[Imports]-------------------------------------------------------------------- from traits.api import BaseInt #--[Code]----------------------------------------------------------------------- class OddInt ( BaseInt ): # Define the default value default_value = 1 # Describe the trait type info_text = 'an odd integer' def validate ( self, object, name, value ): value = super(OddInt, self).validate(object, name, value) if (value % 2) == 1: return value self.error( object, name, value ) traits-4.5.0/examples/tutorials/doc_examples/examples/traitprefixmap.py000066400000000000000000000010541233213561600265660ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # traitprefixmap.py --- Example of using the TraitPrefixMap handler #--[Imports]-------------------------------------------------------------------- from traits.api import Trait, TraitPrefixMap #--[Code]----------------------------------------------------------------------- boolean_map = Trait('true', TraitPrefixMap( { 'true': 1, 'yes': 1, 'false': 0, 'no': 0 } ) ) traits-4.5.0/examples/tutorials/doc_examples/examples/transient_metadata.py000066400000000000000000000010101233213561600273660ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # transient_metadata.py - Example of using 'transient' metadata #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, File, Any #--[Code]----------------------------------------------------------------------- class DataBase ( HasTraits ): # The name of the data base file: file_name = File # The open file handle used to access the data base: file = Any( transient = True ) traits-4.5.0/examples/tutorials/doc_examples/examples/use_custom_th.py000066400000000000000000000011451233213561600264110ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # use_custom_th.py --- Example of using a custom TraitHandler #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, Trait, TraitRange from custom_traithandler import TraitOddInteger #--[Code]----------------------------------------------------------------------- class AnOddClass(HasTraits): oddball = Trait(1, TraitOddInteger()) very_odd = Trait(-1, TraitOddInteger(), TraitRange(-10, -1)) traits-4.5.0/examples/tutorials/doc_examples/examples/widget.py000066400000000000000000000010341233213561600250100ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. from traits.api import Float, HasTraits, Trait class Part(HasTraits): cost = Trait(0.0) class Widget(HasTraits): part1 = Trait(Part) part2 = Trait(Part) cost = Float(0.0) def __init__(self): self.part1 = Part() self.part2 = Part() self.part1.on_trait_change(self.update_cost, 'cost') self.part2.on_trait_change(self.update_cost, 'cost') def update_cost(self): self.cost = self.part1.cost + self.part2.cost traits-4.5.0/examples/tutorials/doc_examples/examples/wildcard.py000066400000000000000000000003541233213561600253220ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # wildcard.py --- Example of using a wildcard with a trait # attribute name from traits.api import Any, HasTraits class Person(HasTraits): temp_ = Any traits-4.5.0/examples/tutorials/doc_examples/examples/wildcard_all.py000066400000000000000000000003631233213561600261520ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # wildcard_all.py --- Example of using a wildcard with all trait # attribute names from traits.api import HasTraits, Any class Person(HasTraits): _ = Any traits-4.5.0/examples/tutorials/doc_examples/examples/wildcard_name.py000066400000000000000000000003661233213561600263250ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # temp_wildcard.py --- Example of using a wildcard # with a trait attribute name from traits.api import Any, HasTraits class Person(HasTraits): temp_ = Any traits-4.5.0/examples/tutorials/doc_examples/examples/wildcard_rules.py000066400000000000000000000006721233213561600265370ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # wildcard_rules.py --- Example of trait attribute wildcard rules #--[Imports]-------------------------------------------------------------------- from traits.api import Any, HasTraits, Int, Python #--[Code]----------------------------------------------------------------------- class Person(HasTraits): temp_count = Int(-1) temp_ = Any _ = Python traits-4.5.0/examples/tutorials/doc_examples/examples/wizard.py000066400000000000000000000005111233213561600250240ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # wizard.py ---Example of a traits-based wizard UI from traits.api import HasTraits, Int, Str class Person(HasTraits): name = Str age = Int street = Str city = Str state = Str pcode = Str bill = Person() bill.configure_traits(kind='modal') traits-4.5.0/examples/tutorials/doc_examples/lesson.desc000066400000000000000000000000651233213561600235030ustar00rootroot00000000000000The Traits Documentation Examples Tutorial examples traits-4.5.0/examples/tutorials/images/000077500000000000000000000000001233213561600201415ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/images/image_LICENSE.txt000066400000000000000000000014331233213561600231270ustar00rootroot00000000000000The icons are mostly derived work from other icons. As such they are licensed accordingly to the original license: Project License File ---------------------------------------------------------------------------- Nuvola LGPL image_LICENSE_Nuvola.txt Unless stated in this file, icons are the work of Enthought, and are released under a 3 clause BSD license. Files and orginal authors: ---------------------------------------------------------------------------- examples/tutorials/images: next.png | Nuvola parent.png | Nuvola previous.png | Nuvola reload.png | Nuvola run.png | Nuvola traits-4.5.0/examples/tutorials/images/next.png000066400000000000000000000016301233213561600216250ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<*IDATxb?% X@ ϿY&R|l~sßXJa`"bWaeAs}TB41?_l. & A@ _~HaOys$2끮 ^`bbaecb`b?+?B_bX=XBB-={; AhS3 cgca'C/ ӦȖ_{AV󯫙, W>2}c tI 1LPP` Z^{ O_|eY  \\ <  ϲ#ݖg@M ?2| , 1e@̌X|q10p3,Ÿ́^3Õ?޽F/_( fl#'y4 擯 A6bAV !v)O޾"Ő`|КJ@zlKfRed`w?8M gs22ԇI2J1t5` 000@1p2&DϿ{I?I QG]}6001<!@e`xC[sW 0\FOĂ' l!Oow3ݿ. \,HHiv0~#w^IENDB`traits-4.5.0/examples/tutorials/images/parent.png000066400000000000000000000016121233213561600221400ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% X@#cF%&RullL,ǎ?jb``@1ARL @;/פ09j!r`P@`035e`8-դxgUw>``hmg!K+8X2 @YiU0[1ܹlXV3B  _Ex̚u Ò 8baO |d>َEVAoIX8FtxDZ10Ϗ gC g"tN3N ! f!֕56rlSOմ1|}aѯ ~b&+;p0|AL ~D F۬1Tx1@囟 ?``fϿ1<~ #{W9-8~MmNV6 e5S:w .`/O?3/2裟@@33(1a|!myKϧ3ps Fhn`TݙjQ )3s+Odad7w^?ytwǟ0sa`ef F(.H^scc}ʴݹ}ٖ8e`6b(sFŧPdee`//hf@ X H 0xet`IENDB`traits-4.5.0/examples/tutorials/images/run.png000066400000000000000000000020211233213561600214460ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?% XJK; f100+rrR8e55i+;x~GbIŮ55dcc>~|]RA##T%a* rrꊞ*< L >ccc)w X~Ġ1p -FF`^GG6>>N70^ׯ&߿4$$$W mãG}:ADAZZAHt!!aǏoܸ| @A @3,[wihY\#'' 6`ݺ_ϟg & ر**2.]:=a߾ˁ1.!!Y ӇoY޽{k/_]AFFMCC_'$$AO߿c^F ,-YLÇ>b>u7o^~5+_JIIs XZZ)(H1/2,Z(@xx?VPPa`aaPY hjwA\\AJJ(W _5W qq `%++.Gϟ89ف)ܹ8q`ӧ˯_?,X0@\moQAQQ 8gP`FP͛gW^jy X@ĭ[WWp缼ڥrr߿bsP>0a2<{f2@0 ܹss %(qrr1̜9=z/F=ã  ,-mqssCX=;&cg+IENDB`traits-4.5.0/examples/tutorials/traits_4.0/000077500000000000000000000000001233213561600205635ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/traits_4.0/decorators/000077500000000000000000000000001233213561600227305ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/traits_4.0/decorators/cached_property.py000066400000000000000000000072201233213561600264560ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(cached_property Decorator)-------------------------------------------------- """ cached_property Decorator ========================= New in Traits 3.0 is the *cached_property* method decorator which helps streamline the process of writing properties which cache their current value. Defining properties is a very powerful technique for exposing as traits items whose value depends upon the current state of other object traits. In particular, this can be very useful for creating synthetic traits which are editable or displayable in a traits-based user interface. In some cases however, the cost of computing the current value of a property may be fairly expensive, so it is often a good idea to *cache* the most recently computed value of the property, and return it as the value of the property until one of the traits the property depends upon changes value, at which point the cache should be cleared and the property value recomputed the next time its value is requested. Combined with the **Property** *depends_on* metadata, the *cached_property* decorator greatly simplifies the process of writing a cached property. Take a look at the following code for example:: class TestScores ( HasPrivateTraits ): scores = List( Int ) average = Property( depends_on = 'scores' ) @cached_property def _get_average ( self ): s = self.scores return (float( reduce( lambda n1, n2: n1 + n2, s, 0 ) ) / len( s )) Presumably this is much easier to write and understand that the following equivalent code written without using *depends_on* and *cached_property*:: class TestScores ( HasPrivateTraits ): scores = List( Int ) average = Property def _get_average ( self ): if self._average is None: s = self.scores self._average = (float( reduce( lambda n1, n2: n1 + n2, s, 0 ) ) / len( s )) return self._average def _scores_changed ( self ): old, self._average = self._average, None self.trait_property_changed( 'average', old, self._average ) def _scores_items_changed ( self ): self._scores_changed() The *cached_property* decorator takes no arguments, and should simply be written on the line preceding the property's *getter* method, as shown in the previous example. Use of the *cached_property* decorator also eliminates the need to add *cached = True* metadata to the property declaration, as was previously required when using *depends_on* metadata with a cached property definition. """ #---------------------------------------------------------------------- from traits.api import * from traitsui.api import * #--[TestScores Class]----------------------------------------------------------- class TestScores ( HasPrivateTraits ): scores = List( Int ) average = Property( depends_on = 'scores' ) @cached_property def _get_average ( self ): print "...computing average:", s = self.scores return (float( reduce( lambda n1, n2: n1 + n2, s, 0 ) ) / len( s )) #--[Example*]------------------------------------------------------------------- # Create a sample TestScores object with some sample scores: test_scores = TestScores( scores = [ 89, 93, 76, 84, 62, 96, 75, 81, 69, 90 ] ) # Display the average: print 'First average:', test_scores.average print 'Check that again:', test_scores.average # Now add a few more late scores into the mix: test_scores.scores.extend( [ 85, 61, 70 ] ) # And display the new average: print 'Second average:', test_scores.average traits-4.5.0/examples/tutorials/traits_4.0/decorators/on_trait_change.py000066400000000000000000000137561233213561600264420ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(on_trait_change Decorator)-------------------------------------------------- """ on_trait_change Decorator ========================= Until Traits 3.0, the only way to define a static trait notification handler as part of a class definition was to define the method following a certain naming convention:: def _name_changed ( self, ... ): ... or def _name_fired ( self, ... ): ... where *name* is the name of the trait to which the notification handler method applies. Starting with Traits 3.0, there is now an alternate method for declaring notification handlers using the **on_trait_change** decorator. The syntax for the decorator is:: @on_trait_change( 'extended_trait_name' ) def any_method_name ( self, ... ): ... where *extended_trait_name* is the name of the trait for which the following method is the notification handler, and *any_method_name* is an arbitrary method name, which does not need to follow any particular naming convention. Although the new syntax is more verbose than the original syntax, it has several advantages: - It does not require using special method names. - It allows using the extended trait naming support added to the **on_trait_change** method in Traits 3.0. The last item is especially important since it allows you to statically declare notification handlers for many more cases than were previously possible. For example:: @on_trait_change( 'foo,bar,baz' ) def _update ( self ): ...perform update logic... defines an *_update* method that is called whenever the class's *foo*, *bar* or *baz* traits change. Previously, this would have required writing three separate notification handlers (one each for the *foo*, *bar* and *baz* traits), or adding *event* metadata to each of the trait declarations for *foo*, *bar* and *baz*. Similarly, the previous technique of writing methods such as:: def _bar_changed_for_foo ( self, ... ): ... which statically defines a notification handler for changes to the *bar* trait of the object's *foo* trait can now be written as:: @on_trait_change( 'foo.bar' ) def any_method_name ( self, ... ): ... Perhaps even more importantly, this technique can be applied in even more complex situations, such as:: @on_trait_change( 'foo.bar.baz' ) def any_method_name ( self, ... ): ... or @on_trait_change( 'foo.+dirty,foo2.[bar,baz,foogle]' ) def any_method_name ( self, ... ): ... The first case is a simple extension of the previous example, while the second is a somewhat far-fetched example which can be interpreted as defining a method that handles: - Changes to any trait on the object's *foo* trait which has *dirty* metadata defined, or - Changes to the *bar*, *baz* or *foogle* trait of the object's *foo2* trait. Note that there is one important semantic difference between writing:: def _name_changed ( self, ... ): ... and:: @on_trait_change( 'name' ) def any_method_name ( self, ... ): ... While both are recognized as being notification handlers for the object's *name* trait, the interpretation of the argument signature for the first case follows the static trait change handler pattern, while the second case follows the dynamic **on_trait_change** method pattern. While this might seem obvious, given the fact that the decorator is called *on_trait_change*, it is an important enough difference to note explicitly. A Complete Example ------------------ Refer to the code tabs of this lesson for a complete example using the *on_trait_change* decorator. In particular, look at the definition of the *sick_again* method in the **Corporation Class** tab. """ #---------------------------------------------------------------------- from traits.api import * #--[Employee Class]------------------------------------------------------------- class Employee ( HasTraits ): # The name of the employee: name = Str # The number of sick days they have taken this year: sick_days = Int #--[Department Class]----------------------------------------------------------- class Department ( HasTraits ): # The name of the department: name = Str # The employees in the department: employees = List( Employee ) #--[Corporation Class]---------------------------------------------------------- class Corporation ( HasTraits ): # The name of the corporation: name = Str # The departments within the corporation: departments = List( Department ) # Define a corporate 'whistle blower' method: @on_trait_change( 'departments:employees.sick_days' ) def sick_again ( self, object, name, old, new ): print '%s just took sick day number %d for this year!' % ( object.name, new ) #--[Example*]------------------------------------------------------------------- # Create some sample employees: millie = Employee( name = 'Millie', sick_days = 2 ) ralph = Employee( name = 'Ralph', sick_days = 3 ) tom = Employee( name = 'Tom', sick_days = 1 ) slick = Employee( name = 'Slick', sick_days = 16 ) marcelle = Employee( name = 'Marcelle', sick_days = 7 ) reggie = Employee( name = 'Reggie', sick_days = 11 ) dave = Employee( name = 'Dave', sick_days = 0 ) bob = Employee( name = 'Bob', sick_days = 1 ) alphonse = Employee( name = 'Alphonse', sick_days = 5 ) # Create some sample departments: accounting = Department( name = 'accounting', employees = [ millie, ralph, tom ] ) sales = Department( name = 'Sales', employees = [ slick, marcelle, reggie ] ) development = Department( name = 'Development', employees = [ dave, bob, alphonse ] ) # Create a sample corporation: acme = Corporation( name = 'Acme, Inc.', departments = [ accounting, sales, development ] ) # Now let's try out our 'reporting' system: slick.sick_days += 1 reggie.sick_days += 1 traits-4.5.0/examples/tutorials/traits_4.0/decorators/tutorial.desc000066400000000000000000000001551233213561600254340ustar00rootroot00000000000000New Method Decorators on_trait_change: on_trait_change Decorator cached_property: cached_property Decorator traits-4.5.0/examples/tutorials/traits_4.0/default.css000066400000000000000000000015001233213561600227150ustar00rootroot00000000000000body { background-color: #FFFFFF; } h1 { font-family: Arial; font-size: 14pt; color: #303030; background-color: #FCD062; padding-top: 3px; padding-left:8px; padding-bottom: 3px; padding-right: 8px; } h2 { font-family: Arial; font-size: 12pt; color: #303030; background-color: #FCD062; padding-top: 3px; padding-left:8px; padding-bottom: 3px; padding-right: 8px; } pre { border: 1px solid #A0A0A0; background-color: #FDF7E7; padding: 4px; } dl { border: 1px solid #A0A0A0; background-color: #FDF7E7; padding-top: 4px; padding-bottom: 6px; padding-left: 8px; padding-right: 8px; } dl dl { border: 0px solid #A0A0A0; } dt { font-family: Arial; font-weight: bold; dd { padding-bottom: 10px; } traits-4.5.0/examples/tutorials/traits_4.0/delegation/000077500000000000000000000000001233213561600226765ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/traits_4.0/delegation/delegation.py000066400000000000000000000116261233213561600253710ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(Delegation Fixes and Improvements)------------------------------------------ """ Delegation Fixes and Improvements ================================= In previous versions of Traits there were a number of problems (i.e. bugs) in the delegation support that made delegation virtually unusable in some situations. As a result, one of the primary goals of Traits 3.0 was to fix all known problems with delegation, thus allowing it to reclaim its role as one of the five keys pillars of the Traits package (those pillars being *initialization*, *validation*, *notification*, *delegation* and *visualization*). We are happy to report that not only have all known bugs been fixed, but a previously unsupported, though often requested, feature has been added as well. Delegation Event Notification ----------------------------- Previously, many Traits users implicitly assumed that changes made to a *delegatee* trait would generate a change notification on any *delegater* trait (no matter how many such traits there might be). Unfortunately, this was not the case. However, starting with Traits 3.0, this feature has now been implemented. An example of what this means is shown below:: class Parent ( HasTraits ): first_name = Str last_name = Str class Child ( HasTraits ): mother = Instance( Parent ) father = Instance( Parent ) first_name = Str last_name = Delegate( 'father' ) In this example, we've created two classes, **Parent** and **Child**, and the value of the **Child** class's *last_name* trait delegates its value to its *father* object's *last_name* trait. Next, we'll set up a simple set of test objects:: mom = Parent( first_name = 'Julia', last_name = 'Wilson' ) dad = Parent( first_name = 'William', last_name = 'Chase' ) son = Child( mother = mom, father = dad, first_name = 'John' ) Finally, we'll set up a notification handler on the *son* object's *last_name* trait and then try out various combinations of setting both the *father* and *son* object's *last_name* trait to see in which cases the notification handler is called:: def name_changed ( name ): print 'Your last name has been changed to %s.' % name # Set up a change notification handler on the son's last name: son.on_trait_change( name_changed, 'last_name' ) # This should cause the son's last name to change as well: print "Changing dad's last name to Jones." dad.last_name = 'Jones' # This change overrides the father's last name for the son: print "Changing son's last name to Thomas." son.last_name = 'Thomas' # This should no longer have any effect on the son's last name: print "Changing dad's last name to Riley." dad.last_name = 'Riley' # Son decides to revert his name back to his father's name: print "Reverting son's last name." del son.last_name # Now changing the father's name should affect the son again: print "Changing dad's last name to Simmons." dad.last_name = 'Simmons' For the actual results of running this code, refer to the **Output** tab. Note that for each case in which an explicit or implicit change is made to the *son* object's *last_name* trait, a corresponding call is made to the change notification handler. """ # FIXME - this need to be redone without traitsui #---------------------------------------------------------------------- from traits.api import * #--[Parent Class]--------------------------------------------------------------- class Parent ( HasTraits ): first_name = Str last_name = Str #--[Child Class]---------------------------------------------------------------- class Child ( HasTraits ): mother = Instance( Parent ) father = Instance( Parent ) first_name = Str last_name = Delegate( 'father' ) #--[Example*]------------------------------------------------------------------- mom = Parent( first_name = 'Julia', last_name = 'Wilson' ) dad = Parent( first_name = 'William', last_name = 'Chase' ) son = Child( mother = mom, father = dad, first_name = 'John' ) def name_changed ( name ): print 'Your last name has been changed to %s.' % name # Set up a change notification handler on the son's last name: son.on_trait_change( name_changed, 'last_name' ) # This should cause the son's last name to change as well: print "Changing dad's last name to Jones." dad.last_name = 'Jones' # This change overrides the father's last name for the son: print "Changing son's last name to Thomas." son.last_name = 'Thomas' # This should no longer have any effect on the son's last name: print "Changing dad's last name to Riley." dad.last_name = 'Riley' # Son decides to revert his name back to his father's name: print "Reverting son's last name." del son.last_name # Now changing the father's name should affect the son again: print "Changing dad's last name to Simmons." dad.last_name = 'Simmons' traits-4.5.0/examples/tutorials/traits_4.0/delegation/tutorial.desc000066400000000000000000000000421233213561600253750ustar00rootroot00000000000000Delegation Fixes and Improvements traits-4.5.0/examples/tutorials/traits_4.0/extended_trait_change/000077500000000000000000000000001233213561600250735ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/traits_4.0/extended_trait_change/extended_trait_change.py000066400000000000000000000270271233213561600317650ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(on_trait_change Method Enhancements)---------------------------------------- """ on_trait_change Method Enhancements =================================== In Traits 3.0, the capabilities of the **HasTraits** class's *on_trait_change* method has been greatly enhanced with the addition of a new *extended* trait name syntax for specifying the name of the trait the notification handler applies to. Previously, the trait name argument to the *on_trait_change* method could only be one of the following: Omitted, None, or 'anytrait' The notification handler applies to any trait on the object. name The notification handler applies to the trait on the object called *name*. [ name1, ..., namen ] The notification handler applies to each of the traits on the object with the specified names. In Traits 3.0, all of these forms are still supported, but now the syntax for specifying *name* has been expanded to allow a much broader set of traits that are *reachable* from the object the *on_trait_change* method is applied to. New *name* Parameter Syntax --------------------------- In Traits 3.0, the *name* parameter, in addition to being omitted, None or *anytrait*, can now be a single *xname* or a list of *xname* names, where an *xname* is an extended name of the form:: xname2['.'xname2]* An *xname2* is of the form:: ( xname3 | '['xname3[','xname3]*'] ) ['*'] An *xname3* is of the form:: xname | ['+'|'-'][name] | name['?' | ('+'|'-')[name]] A *name* is any valid Python attribute name. The semantic meaning of this notation is as follows: [ item, item, ..., item ] A list which matches any of the specified items. Note that at the topmost level, the surrounding square brackets are optional. name? If the current object does not have an attribute called *name*, the reference can be ignored. If the '?' character is omitted, the current object must have a trait called *name*, otherwise an exception will be raised. prefix+ Matches any trait on the current object whose name begins with *prefix*. \+metadata_name Matches any trait on the current object having *metadata_name* metadata. \-metadata_name Matches any trait on the current object which does not have *metadata_name* metadata. prefix+metadata_name Matches any trait on the current object whose name begins with *prefix* and which has *metadata_name* metadata. prefix-metadata_name Matches any trait on the current object whose name begins with *prefix* and which does not have *metadata_name* metadata. \+ Matches all traits on the current object. pattern* Matches object graphs where *pattern* occurs one or more times (useful for setting up listeners on recursive data structures like trees or linked lists). Name Syntax Examples -------------------- Some examples of valid names and their meaning are as follows: 'foo,bar,baz' Listen for trait changes to *object.foo*, *object.bar*, and *object.baz*. ['foo','bar','baz'] Equivalent to 'foo,bar,baz', but may be more useful in cases where the individual items are computed. 'foo.bar.baz' Listen for trait changes to *object.foo.bar.baz*. 'foo.[bar,baz]' Listen for trait changes to *object.foo.bar* and *object.foo.baz*. '([left,right]).name' Listen for trait changes to the *name* trait of each node of a tree having *left* and *right* links to other tree nodes, and where *object* is the root node of the tree. '+dirty' Listen for trait changes on any trait in the *object* which has the 'dirty' metadata set. 'foo.+dirty' Listen for trait changes on any trait in *object.foo* which has the 'dirty' metadata set. 'foo.[bar,-dirty]' Listen for trait changes on *object.foo.bar* or any trait on *object.foo* which does not have 'dirty' metadata set. Additional Semantic Rules ------------------------- Note that any of the intermediate (i.e., non-final) links in a pattern can be traits of type **Instance**, **List** or **Dict**. In the case of **List** and **Dict** traits, the subsequent portion of the pattern is applied to each item in the list, or value in the dictionary. For example, if *self.children* is a list, 'children.name' listens for trait changes to the *name* trait for each item in the *self.children* list. Also note that items added to or removed from a list or dictionary in the pattern will cause the *handler* routine to be invoked as well, since this is treated as an *implied* change to the item's trait being monitored. Notification Handler Signatures ------------------------------- The signature of the *handler* supplied also has an effect on how changes to intermediate traits are processed. The five valid handler signatures are: 1. handler() 2. handler(new) 3. handler(name,new) 4. handler(object,name,new) 5. handler(object,name,old,new) For signatures 1, 4 and 5, any change to any element of a path being listened to invokes the handler with information about the particular element that was modified (e.g., if the item being monitored is 'foo.bar.baz', a change to 'bar' will call *handler* with the following information: object object.foo name bar old old value for object.foo.bar new new value for object.foo.bar If one of the intermediate links is a **List** or **Dict**, the call to *handler* may report an *_items* changed event. If in the previous example, *bar* is a **List**, and a new item is added to *bar*, then the information passed to *handler* would be: object object.foo name bar_items old **Undefined** new **TraitListEvent** whose *added* trait contains the new item added to *bar*. For signatures 2 and 3, the *handler* does not receive enough information to discern between a change to the final trait being listened to and a change to an intermediate link. In this case, the event dispatcher will attempt to map a change to an intermediate link to its effective change on the final trait. This only works if all of the intermediate links are single values (such as an **Instance** or **Any** trait) and not **Lists** or **Dicts**. If the modified intermediate trait or any subsequent intermediate trait preceding the final trait is a **List** or **Dict**, then a **TraitError** is raised, since the effective value for the final trait cannot in general be resolved unambiguously. Handler signature 1 also has the special characteristic that if a final trait is a **List** or **Dict**, it will automatically handle *_items* changed events for the final trait as well. This can be useful in cases where the *handler* only needs to know that some aspect of the final trait has been changed. For all other *handler* signatures, you must explicitly specify the *xxx_items* trait if you want to be notified of changes to any of the items of the *xxx* trait. Backward Compatibility ---------------------- The new extended trait name support in Traits 3.0 has one slight semantic difference with the pre-Traits 3.0 *on_trait_change* method. Prior to Traits 3.0, it was necessary to make two separate calls to *on_trait_change* in order to set up listeners on a **List** or **Dict** trait's value and the contents of its value, as shown in the following example:: class Department ( HasTraits ): employees = List( Employee ) ... a_department.on_trait_change( some_listener, 'employees' ) a_department.on_trait_change( some_listener_items, 'employees_items' ) In Traits 3.0, this is still the case if the *some_listener* function has one or more arguments. However, if it has no arguments, the *on_trait_change* method will automatically call the function either when the trait's value or its value's contents change. So in Traits 3.0 it is only necessary to write:: a_department.on_trait_change( some_listener, 'employees' ) if the *some_listener* (and *some_listener_items*) function has no arguments. The net effect of this difference is that code written prior to Traits 3.0 could set up two listeners (e.g. *some_listener* and *some_listener_items*, as in the example), and then have *both* methods called when the contents of the trait are modified if the *some_listener* method takes no arguments. Since no data is passed to the *some_listener* function, there is probably no harm in doing this, but it does create unnecessary notification handler calls. As a result, to avoid creating this unwanted overhead in existing code, the *on_trait_change* method applies pre-Traits 3.0 semantics to all simple names passed to it (e.g. 'employees'). If you are writing new code and want to take advantage of the new Traits 3.0 *on_trait_change* semantics for a simple trait name, you will need to modify the name to use some recognizable aspect of the new extended trait name syntax. For example, either of the following lines would cause *new style* semantics to be applied to the *employees* trait:: a_department.on_trait_change( some_listener, ' employees' ) a_department.on_trait_change( some_listener, '[employees]' ) A Complete Example ------------------ Refer to the code tabs of this lesson for a complete example using *on_trait_change* with an extended trait name. In particular, check near the bottom of the **Example** tab for the code that sets up an extended trait change notification handler using *on_trait_change*. """ #---------------------------------------------------------------------- from traits.api import * #--[Employee Class]------------------------------------------------------------- class Employee ( HasTraits ): # The name of the employee: name = Str # The number of sick days they have taken this year: sick_days = Int #--[Department Class]----------------------------------------------------------- class Department ( HasTraits ): # The name of the department: name = Str # The employees in the department: employees = List( Employee ) #--[Corporation Class]---------------------------------------------------------- class Corporation ( HasTraits ): # The name of the corporation: name = Str # The departments within the corporation: departments = List( Department ) #--[Example*]------------------------------------------------------------------- # Create some sample employees: millie = Employee( name = 'Millie', sick_days = 2 ) ralph = Employee( name = 'Ralph', sick_days = 3 ) tom = Employee( name = 'Tom', sick_days = 1 ) slick = Employee( name = 'Slick', sick_days = 16 ) marcelle = Employee( name = 'Marcelle', sick_days = 7 ) reggie = Employee( name = 'Reggie', sick_days = 11 ) dave = Employee( name = 'Dave', sick_days = 0 ) bob = Employee( name = 'Bob', sick_days = 1 ) alphonse = Employee( name = 'Alphonse', sick_days = 5 ) # Create some sample departments: accounting = Department( name = 'accounting', employees = [ millie, ralph, tom ] ) sales = Department( name = 'Sales', employees = [ slick, marcelle, reggie ] ) development = Department( name = 'Development', employees = [ dave, bob, alphonse ] ) # Create a sample corporation: acme = Corporation( name = 'Acme, Inc.', departments = [ accounting, sales, development ] ) # Define a corporate 'whistle blower' function: def sick_again ( object, name, old, new ): print '%s just took sick day number %d for this year!' % ( object.name, new ) # Set up the function as a listener: acme.on_trait_change( sick_again, 'departments.employees.sick_days' ) # Now let's try it out: slick.sick_days += 1 reggie.sick_days += 1 traits-4.5.0/examples/tutorials/traits_4.0/extended_trait_change/properties.py000066400000000000000000000176561233213561600276600ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(Extended Property depends_on References)------------------------------------ """ Extended Property *depends_on* References ========================================= In Traits 3.0, the **Property** *depends_on* metadata has been extended to take advantage of the new extended trait name support offered by the *on_trait_change* method. Previously, the *depends_on* metadata for a *Property* was restricted to referencing traits defined either on the same object as the **Property**, or on an object immediately reachable from the object. For example:: class Wheel ( Part ): axel = Instance( Axel ) position = Property( depends_on = 'axel.position' ) ... Starting with Traits 3.0, the *depends_on* metadata may now include any extended trait reference that is allowed by the enhanced *on_trait_change* method. So, for example it is now legal to write things like:: class Wheel ( Part ): axel = Instance( Axel ) position = Property( depends_on = 'axel.chassis.position' ) or:: class Child ( Person ): mother = Instance( Person ) father = Instance( Person ) mood = Property( depends_on = [ 'mother.+mood_affecting', 'father.+mood_affecting' ] ) In particular, in the last example we are declaring that the **Child** class's *mood* property depends upon the values of any of either its mother or father object's traits that have *mood_affecting* metadata defined. Thus, a **Child** object's *mood* property will fire a trait change notification whenever any of the its mother's or father's mood affecting traits change. Refer also to the code tabs for this lesson for a complete example using a **Property** definition using *depends_on* metadata containing an extended trait reference. In particular, take a look at the **LeagueModelView Class** tab's *total_hits* trait definition. """ # FIXME redo example without traitsui #---------------------------------------------------------------------- from traits.api \ import * from traitsui.api \ import * from traitsui.table_column \ import * #--[Player Class]--------------------------------------------------------------- # Define a baseball player: class Player ( HasTraits ): # The name of the player: name = Str( '' ) # The number of hits the player made this season: hits = Int #--[Team Class]----------------------------------------------------------------- # Define a baseball team: class Team ( HasTraits ): # The name of the team: name = Str( '' ) # The players on the team: players = List( Player ) # The number of players on the team: num_players = Property( depends_on = 'players' ) def _get_num_players ( self ): """ Implementation of the 'num_players' property. """ return len( self.players ) #--[League Class]--------------------------------------------------------------- # Define a baseball league model: class League ( HasTraits ): # The name of the league: name = Str( '' ) # The teams in the league: teams = List( Team ) #--[LeagueModelView Class]----------------------------------------------------- # Define a ModelView for a League model: class LeagueModelView ( ModelView ): # The currently selected team: team = Instance( Team ) # The currently selected player: player = Instance( Player ) # Button to add a hit to the current player: got_hit = Button( 'Got a Hit' ) # The total number of hits (note the 'depends_on' extended trait reference): total_hits = Property( depends_on = 'model.teams.players.hits' ) @cached_property def _get_total_hits ( self ): """ Returns the total number of hits across all teams and players. """ return reduce( add, [ reduce( add, [ p.hits for p in t.players ], 0 ) for t in self.model.teams ], 0 ) view = View( VGroup( HGroup( Item( 'total_hits', style = 'readonly' ), label = 'League Statistics', show_border = True ), VGroup( Item( 'model.teams', show_label = False, editor = TableEditor( columns = [ ObjectColumn( name = 'name', width = 0.70 ), ObjectColumn( name = 'num_players', label = '# Players', editable = False, width = 0.29 ) ], selected = 'object.team', auto_add = True, row_factory = Team, configurable = False, sortable = False ) ), label = 'League Teams', show_border = True ), VGroup( Item( 'object.team.players', show_label = False, editor = TableEditor( columns = [ ObjectColumn( name = 'name', width = 0.70 ), ObjectColumn( name = 'hits', editable = False, width = 0.29 ) ], selected = 'object.player', auto_add = True, row_factory = Player, configurable = False, sortable = False ) ), '_', HGroup( Item( 'got_hit', show_label = False, enabled_when = 'player is not None' ) ), label = 'Team Players', show_labels = False, show_border = True ) ), resizable = True ) def _model_changed ( self, model ): """ Handles the 'league' model being initialized. """ if len( model.teams ) > 0: self.team = model.teams[0] def _got_hit_changed ( self ): """ Handles the currently selected player making a hit. """ self.player.hits += 1 def _team_changed ( self, team ): """ Handles a new team being selected. """ if len( team.players ) > 0: self.player = team.players[0] else: self.player = None # Function to add two numbers (used with 'reduce'): add = lambda a, b: a + b #--[Example*]------------------------------------------------------------------- # Define some sample teams and players: blue_birds = Team( name = 'Blue Birds', players = [ Player( name = 'Mike Scott', hits = 25 ), Player( name = 'Willy Shofield', hits = 37 ), Player( name = 'Tony Barucci', hits = 19 ) ] ) chicken_hawks = Team( name = 'Chicken Hawks', players = [ Player( name = 'Jimmy Domore', hits = 34 ), Player( name = 'Bill Janks', hits = 16 ), Player( name = 'Tim Saunders', hits = 27 ) ] ) eagles = Team( name = 'Eagles', players = [ Player( name = 'Joe Peppers', hits = 33 ), Player( name = 'Sam Alone', hits = 12 ), Player( name = 'Roger Clemson', hits = 23 ) ] ) # Create a league and its corresponding model view: demo = LeagueModelView( League( name = 'National Baseball Conference', teams = [ blue_birds, chicken_hawks, eagles ] ) ) traits-4.5.0/examples/tutorials/traits_4.0/extended_trait_change/tutorial.desc000066400000000000000000000002451233213561600275770ustar00rootroot00000000000000Extended Trait Change Notification Syntax extended_trait_change: on_trait_change Method Enhancements properties: Extended Property depends_on References traits-4.5.0/examples/tutorials/traits_4.0/getstate_setstate/000077500000000000000000000000001233213561600243175ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/traits_4.0/getstate_setstate/getstate.py000066400000000000000000000155441233213561600265220ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(__getstate__/__setstate__ Changes and Improvements)------------------------- """ __getstate__/__setstate__ Changes and Improvements ================================================== Originally, the **HasTraits** class did not define specific *__getstate__* or *__setstate__* methods for dealing with *pickling* and *unpickling* of traits-based objects. However, in the course of developing a number of fairly large-scale applications using Traits, experience has shown that some traits specific support in this area would be of benefit to most application developers. Accordingly, Traits 3.0 introduces *__getstate__* and *__setstate__* methods that implement several traits aware serialization and deserialization policies. The *__getstate__* Method ------------------------- One of the most frequently occurring requirements for serializing an object is the ability to control which parts of the object's state are saved, and which parts are discarded. One typical approach is to define a *__getstate__* method which makes a copy of the object's *__dict__* attribute and deletes those items which should not be saved. While this approach works, there are some drawbacks, especially in cases where heavy use of subclassing is used. The **HasTraits** *__getstate__* method uses a somewhat different approach by providing a generic implementation which implements *policies* that developers can customize through the use of traits *metadata*, in many cases completely eliminating the need to override or define a *__getstate__* method in their application classes. In particular, the **HasTraits** *__getstate__* method saves the value of all traits which do not have *transient = True* metadata defined. This policy allows developers to easily mark which trait values should not be saved simply by adding *transient = True* metadata to them. Besides avoiding having to write a *__getstate__* method for their class, this approach also provides good documentation about the *pickling* behavior of the class. For example:: class DataBase ( HasTraits ): # The name of the data base file: file_name = File # The open file handle used to access the data base: file = Any( transient = True ) In this example, the **DataBase** class's *file* trait has been mark as *transient* because it normally contains an open file handle used to access a data base. Since file handles typically cannot be pickled and restored, the file handle should not be saved as part of the object's persistent state. Normally, the file handle would be re-opened by application code after the object has been restored from its persisted state. Predefined *transient* Traits ----------------------------- The Traits package automatically assigns *transient = True* metadata to a number of predefined traits, thus avoiding the need to explicitly mark them as transient yourself. The predefined traits marked as *transient* are: - **Constant**. - **Event**. - *read-only* or *write-only* **Property** traits. - The *xxx_* trait for *mapped* traits. - All *_xxx* traits for classes that subclass **HasPrivateTraits**. Also, by default, delegated traits are only saved if they have a local value which overrides the value defined by its delegate. You can set *transient = True* on the delegate trait if you do not want its value to ever be saved. Overriding *__getstate__* ------------------------- In general, you should avoid overriding *__getstate__* in subclasses of **HasTraits**. Instead, mark traits that should not be pickled with *transient = True* metadata. However, in cases where this strategy is insufficient, we recommend overriding *__getstate__* using the follow pattern to remove items that should not be persisted:: def __getstate__ ( self ): state = super( XXX, self ).__getstate__() for key in [ 'foo', 'bar' ]: if key in state: del state[ key ] return state The *__setstate__* Method ------------------------- The main difference between the default Python *__setstate__*-like behavior and the new **HasTraits** class *__setstate__* method is that the **HasTraits** *__setstate__* method actually *sets* the value of each trait using the values passed to it via its state dictionary argument instead of simply storing or copying the state dictionary to its *__dict__* attribute. While slower, this has the advantage of causing trait change notifications to be generated, which can be very useful for classes which rely of receiving notifications in order to ensure that their internal object state remains consistent and up to date. Overriding *__setstate__* ------------------------- For classes which do not want to receive change notifications during *__setstate__*, it is possible to override *__setstate__* and update the object's *__dict__* attribute directly. However, in such cases it is important to either call the *__setstate__* super method (with an empty state dictionary, for example), or to call the **HasTraits** class's private *_init_trait_listeners* method directly. This method has no arguments and does not return a result, but it must be called during *__setstate__* in order to ensure that all dynamic trait change notifications managed by traits are correctly initialized for the object. Failure to call this method may result in lost change notifications. """ #---------------------------------------------------------------------- from traits.api import * from time import time, sleep from cPickle import dumps, loads #--[Session Class]-------------------------------------------------------------- class Session ( HasTraits ): # The name of the session: name = Str # The time the session was created: created = Any( transient = True ) def _name_changed ( self ): self.created = time() #--[Example*]------------------------------------------------------------------- # The following shows an example of pickling and unpickling a Session object. # Unfortunately, it is not possible to successfully pickle objects created as # part of a tutorial, because of problems with pickling objects derived from # classes dynamically defined using 'exec'. So just use your imagination on this # one... # Create a new session: session = Session( name = 'session_1' ) # Display its contents: print 'Session name:', session.name print 'Session created:', session.created # # Simulate saving the session to a file/database: # saved_session = dumps( session ) # # # Simulate the passage of time (zzzzZZZZ...): # sleep( 1 ) # # # Simulate restoring the session from a file/database: # restored_session = loads( saved_session ) # # # Display the restored sessions contents (note that the 'created' # # time should be different from the original session): # print 'Restored session name:', restored_session.name # print 'Restored session created:', restored_session.created traits-4.5.0/examples/tutorials/traits_4.0/getstate_setstate/tutorial.desc000066400000000000000000000000421233213561600270160ustar00rootroot00000000000000__getstate__/__setstate__ Changes traits-4.5.0/examples/tutorials/traits_4.0/interfaces/000077500000000000000000000000001233213561600227065ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/traits_4.0/interfaces/adaptation.py000066400000000000000000000241011233213561600254020ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(Adaptation)----------------------------------------------------------------- """ Adaptation ========== *Adaptation* is the process of transforming an object that does not implement a specific interface, or set of interfaces, into one that does. Defining Adapters ----------------- In traits, an *adapter* is a special type of class whose role is to *transform* some type of object which does not implement a specific interface, or set of interfaces, into one that does. Traits provides several different ways of writing adapters. We'll begin with the simplest way, which is to create a subclass of **Adapter**. Subclassing Adapter ------------------- The **Adapter** base class is designed specifically for creating adapter classes. It is actually a very simple class which streamlines the process of creating new adapter classes by: - Providing a standard constructor which normally does not need to be overridden by subclasses. - Only requiring use of the **adapts** function to define the adapter. The standard constructor for the **Adapter** class has the form:: adapter_subclass_name( object_to_be_adapted ) where *adapter_subclass_name* is the name of the **Adapter** subclass. The only thing the constructor does is:: self.adaptee = object_to_be_adapted which assigns the object being adapted to the *adaptee* trait. As an adapter writer, the only things you need to add to the subclass definition are: - An **adapts** function call declaring which interfaces the adapter class implements on behalf of the object it is adapting. The form of the **adapts** function is as follows:: adapts( client_class, interface [, interface2, ..., interfacen] ) - A declaration for the *adaptee* trait (usually as an **Instance** of a particular class). - The actual implementations of the interfaces declared in the **adapts** call. Usually the implementation code will be written in terms of the adapter class's *adaptee* trait assigned by the class constructor. The following shows the definition of a simple adapter class:: from traits.api import Adapter, Instance, implements class PersonINameAdapter ( Adapter ): # Declare what interfaces this adapter implements for its client: adapts( Person, IName ) # Declare the type of client it supports: adaptee = Instance( Person ) # Implement the 'IName' interface on behalf of its client: def get_name ( self ): return ('%s %s' % ( self.adaptee.first_name, self.adaptee.last_name )) Rolling You Own Adapter Classes ------------------------------- Note that using the **Adapter** base class is simply a convenience. It is not necessary for an adapter class to derive from **Adapter**. However, if you do not derive your adapter class from **Adapter**, then it is your responsibility to provide all of the same information and setup implicitly provided by **Adapter**. In particular, in addition to using the *adapts* function to declare the set of interfaces the class implements for its client object, you must also define the constructor, or whatever means you define for binding the object to be adapted to the adapter. Creating an adapter class from scratch, we can re-write the previous adapter example as follows:: from traits.api import HasTraits, Instance, adapts class PersonINameAdapter ( HasTraits ): # Declare what interfaces this adapter implements, and for who: adapts( Person, IName ) # Declare the type of client it supports: client = Instance( Person ) # Implement the adapter's constructor: def __init__ ( self, client ): self.client = client # Implement the 'IName' interface on behalf of its client: def get_name ( self ): return ('%s %s' % ( self.client.first_name, self.client.last_name )) As you can see, the main difference between this example and the last is: - Explicit implementation of the adapter constructor. Yet Another Way To Define Adapters ---------------------------------- It is also possible to declare a class to be an adapter class external to the class definition itself, as shown in the following example:: class AnotherPersonAdapter ( object ): # Implement the adapter's constructor: def __init__ ( self, person ): self.person = person # Implement the 'IName' interface on behalf of its client: def get_name ( self ): return ('%s %s' % ( self.person.first_name, self.person.last_name )) ... adapts( AnotherPersonAdapter, Person, IName ) When used in this way, the form of the **adapts** function is:: adapts( adapter_class, client_class, interface [, interface2, ..., interfacen] ) This form simply inserts the adapter class as the first argument (when **adapts** is used inside of a class definition, this information is implicitly available from the class itself). Using Adapters -------------- Now for the good part... how do you use adapters? And the answer is... you don't. At least not explicitly. In traits, adapters are created automatically whenever you assign an object to an *interface* **AdaptsTo** or **AdaptedTo** trait and the object being assigned does not implement the required interface. In this case, if an adapter class exists that can adapt the specified object to the required interface, an instance of the adapter class will be created for the object, and the resulting adapter object is what ends up being assigned to the trait, along with the original object. When using the **AdaptedTo** trait, the adapter is assigned as the value of the trait, and the original object is assigned as its *mapped* value. For the **AdaptsTo** trait, the original object is assigned as the trait value, and the adapter is assigned as its *mapped* value. In the case where the object does not require an adapter, the object and adapted value are the same. Note that it might happen that no adapter class exists that will adapt the object to the required interface, but a pair, or series, of adapter classes exist that will together adapt the object to the needed interface. In this case, the required set of adapters will automatically be created for the object and the final link in the chain adapter object (the one that actually implements the required interface for some object class) will be used. Whenever a situation like this arises, the adapted object used will always contain the smallest set of available adapter objects needed to adapt the original object. The following code shows a simple example of using adaptation:: # Create a Person object (which does not implement the 'IName' interface): william = Person( first_name = 'William', last_name = 'Adams' ) # Create an apartment, and assign 'renter' the previous object. Since # the value of 'renter' must implement 'IName', a 'PersonINameAdapter' # object is automatically created and assigned: apt = Apartment( renter = william ) # Verify that the resulting value implements 'IName' correctly: print 'Renter is: ', apt.renter.get_name() # Check the type of object actually assigned to 'renter': print apt.renter Refer to the **Output** tab for the actual result of running this example. Controlling Adaptation ---------------------- The **AdaptedTo** and **AdaptsTo** traits are actually subclasses of the **Instance** trait. Normally, adaptation occurs automatically when values are assigned to an **AdaptedTo** or **AdaptsTo** trait. However, any of the **Instance**, **AdaptedTo** and **AdaptsTo** traits allow you to control how adaptation is performed by means of the *adapt* metadata, which can have one of the following values: no Adaptation is not allowed (This is the default for the **Instance** trait). yes Adaptation is allowed. If adaptation fails, an exception is raised (This is the default for both the **AdaptedTo** and **AdaptsTo** traits). default Adapation is allowed. If adaptation fails, the default value for the trait is assigned instead. As an example of modifying the adaptation behavior of an **AdaptedTo** trait, we could rewrite the example **Apartment** class as follows:: class Apartment ( HasTraits ): renter = AdaptedTo( IName, adapt = 'no' ) Using this definition, any value assigned to *renter* must itself implement the **IName** interface, otherwise an exception is raised. Try modifying and re-running the example code to verify that this is indeed the case. """ #---------------------------------------------------------------------- from traits.api import * #--[IName Interface]------------------------------------------------------------ # Define the 'IName' interface: class IName ( Interface ): def get_name ( self ): """ Returns the name of an object. """ #--[Person Class]--------------------------------------------------------------- class Person ( HasTraits ): first_name = Str( 'John' ) last_name = Str( 'Doe' ) #--[PersonINameAdapter Class]--------------------------------------------------- class PersonINameAdapter ( Adapter ): # Declare what interfaces this adapter implements for its client: adapts( Person, IName ) # Declare the type of client it supports: adaptee = Instance( Person ) # Implementation of the 'IName' interface on behalf of its client: def get_name ( self ): """ Returns the name of an object. """ return ('%s %s' % ( self.adaptee.first_name, self.adaptee.last_name )) #--[Apartment Class]------------------------------------------------------------ # Define a class using an object that implements the 'IName' interface: class Apartment ( HasTraits ): renter = AdaptedTo( IName ) #--[Example*]-------------------------------------------------------------------- # Create an object implementing the 'IName' interface: william = Person( first_name = 'William', last_name = 'Adams' ) # Create an apartment, and assign 'renter' an object implementing 'IName': apt = Apartment( renter = william ) # Verify that the object works correctly: print 'Renter is:', apt.renter.get_name() # Check the type of object actually assigned to 'renter': print apt.renter traits-4.5.0/examples/tutorials/traits_4.0/interfaces/interfaces.py000066400000000000000000000102631233213561600254050ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(Interfaces)----------------------------------------------------------------- """ Interfaces ========== In Traits 3.0, the ability to define, implement and use *interfaces* has been added to the package. Defining Interfaces ------------------- Interfaces are defined by subclassing from the **Interface** class, as shown in the example below:: from traits.api import Interface class IName ( Interface ): def get_name ( self ): " Returns the name of an object. " This same code is shown in the **IName Interface** tab of the code. Interface classes are intended mainly as documentation of the methods and traits that the interface defines, and should not contain any actual implementation code, although no check is performed to enforce this currently. Implementing Interfaces ----------------------- A class declares that it implements one or more interfaces using the **implements** function, which has the form:: implements( interface [, interface2, ..., interfacen] ) The semantics of this function is that the class declares that it implements each of the *interfaces* specified as an argument to **implements**. Also, the call to **implements** must occur at class scope within the class definition, as shown in the following example:: from traits.api import HasTraits, implements class Person ( HasTraits ): implements( IName ) ... Only a single call to **implements** should occur within a class definition. Refer to the **Person Class** tab in the code for a complete example of using **implements**. Note that in the current version, traits does not check to ensure that the class containing the **implements** function actually implements the interfaces it says it does. Using Interfaces ---------------- Being able to define and implement interfaces would be of little use without the ability to *use* interfaces in your code. In traits, using an interface is accomplished using the **Instance** trait, as shown in the following example:: from traits.api import HasTraits, Instance class Apartment ( HasTraits ): renter = Instance( IName ) Using an interface class in an **Instance** trait definition declares that the trait only accepts values which are objects that either: - Implement the specified interface. - Can be adapted to an object that implements the specified interface. Additional information on what it means to *adapt* an object to implement an interface is presented in the next section of the tutorial. As before, the **Instance** trait can also be used with classes that are not interfaces, such as:: from traits.api import HasTraits, Instance class Apartment ( HasTraits ): renter = Instance( Person ) In this case, the value of the trait must be an object which is an instance of the specified class or one of its subclasses. """ #---------------------------------------------------------------------- from traits.api import * #--[IName Interface]------------------------------------------------------------ # Define the 'IName' interface: class IName ( Interface ): def get_name ( self ): """ Returns the name of an object. """ #--[Person Class]--------------------------------------------------------------- class Person ( HasTraits ): implements( IName ) first_name = Str( 'John' ) last_name = Str( 'Doe' ) # Implementation of the 'IName' interface: def get_name ( self ): """ Returns the name of an object. """ return ('%s %s' % ( self.first_name, self.last_name )) #--[Apartment Class]------------------------------------------------------------ # Define a class using an object that implements the 'IName' interface: class Apartment ( HasTraits ): renter = Instance( IName ) #--[Example*]-------------------------------------------------------------------- # Create an object implementing the 'IName' interface: william = Person( first_name = 'William', last_name = 'Adams' ) # Create an apartment, and assign 'renter' an object implementing 'IName': apt = Apartment( renter = william ) # Verify that the object works correctly: print 'Renter is:', apt.renter.get_name() traits-4.5.0/examples/tutorials/traits_4.0/interfaces/tutorial.desc000066400000000000000000000001111233213561600254020ustar00rootroot00000000000000Interfaces and Adaptation interfaces: Interfaces adaptation: Adaptation traits-4.5.0/examples/tutorials/traits_4.0/trait_types/000077500000000000000000000000001233213561600231325ustar00rootroot00000000000000traits-4.5.0/examples/tutorials/traits_4.0/trait_types/core_traits.py000066400000000000000000000016221233213561600260230ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(Rewritten Core Traits)------------------------------------------------------ """ Rewritten Core Traits ===================== For several reasons, including the ability to subclass types, many of the previous core Traits package types have been entirely rewritten as subclasses of **TraitType**, the new base class for subclassable trait types. The core trait types which have been rewritten as subclasses of **TraitType** are: - Any - Bool - CBool - CComplex - CInt - CFloat - CLong - Code - Complex - CStr - CUnicode - Dict - Directory - Enum - Expression - File - Float - HTML - Instance - Int - List - Long - Password - PythonValue - Range - Regex - Str - String - Tuple - Unicode - WeakRef This may be useful information if you find yourself in need of creating a new trait type with behavior similar to any of these core trait types. """ traits-4.5.0/examples/tutorials/traits_4.0/trait_types/new_types.py000066400000000000000000000201071233213561600255210ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(Creating New Trait Types)--------------------------------------------------- """ Creating New Trait Types ======================== You create a *new style* trait type by subclassing the **TraitType** class or one of its subclasses, such as **Float** or **Str**. **TraitType** provides the infrastructure for creating a trait type and allows subclasses to define specific methods and class constants used to create either a new trait *type* or *property*. In the next section, we'll cover the methods and class constants used to define a new trait *type*, and in the section following that we'll show how to define a new trait *property*. Defining a New Trait Type ------------------------- The thing that distinguishes a trait *type* from a *property* is the existence of a *validate* method in the subclass. The *validate* method should have the following signature: validate ( self, object, name, value ) This method validates, coerces, or adapts the specified *value* as the value of the *name* trait of the *object* object. This method is called when a value is assigned to an object trait that is based on this subclass of *TraitType* and the class does not contain a definition for either the *get()* or *set()* methods. The method must return the original *value* or any suitably coerced or adapted value that is a legal value for the trait. If *value* is not a legal value for the trait, and cannot be coerced or adapted to a legal value, the method should either raise a **TraitError** or call the *error()* method to raise a **TraitError** on its behalf. In addition to *validate*, the subclass can also define the *post_setattr* method, which should have the following signature: post_setattr ( self, object, name, value ) This method allows the trait to do additional processing after *value* has been successfully assigned to the *name* trait of the *object* object. For most traits there is no additional processing that needs to be done, and this method need not be defined. It is normally used for creating *shadow* (i.e., *mapped* traits), but other uses may arise as well. This method does not need to return a value, and should normally not raise any exceptions. The subclass can also define a constant default value by setting the class-level *default_value* attribute to the desired constant value. For example:: class OddInt ( Int ): default_value = 1 ... If a non-constant default value is desired, you should override the **TraitType** class's *get_default_value* method. Refer to the documentation for the **TraitType** class for more information on what this method does. If you have a constant string that can be used as the type's *info* value, you can provide it by simple setting the string as the value of the class-level *info_text* attribute:: class OddInt ( Int ): info_text = 'an odd integer' ... If you have a type info string which depends upon the internal state of the trait, then you should override the **TraitType's** *info* method. This method has no arguments, and should return a string describing the values accepted by the trait type (e.g. 'an integer in the range from 1 to 5'). If you also have some type specific initialization that needs to be performed when the trait type is created, you can also override the **TraitType** class's *init* method. This method has no arguments and is automatically called from the **TraitType** class constructor. If you would like to specify a default Traits UI editor for your new trait type, you can also override the **TraitType** class's *create_editor* method, which has no arguments and should return the default **TraitEditor** for any instances of the type to use. This provides a basic overview of the basic methods and class constants needed to define a new trait type. Refer to the complete documentation for the **TraitType** and **BaseTraitHandler** classes for more information on other methods that can be overridden if necessary. Defining a New Trait Property ----------------------------- You can also define new trait *properties* by subclassing from **TraitType** or one of its subclasses. A *property* is distinguished from a *type* by the existence of a *get* and/or *set* method in the **TraitType** subclass. The signature for these two methods is as follows: get ( self, object, name ) This is the *getter* method of a trait that behaves like a property. It has the following arguments: object The object that the property applies to. name The name of the *object* property. If this method is not defined, but the *set* method is defined, the trait behaves like a *write-only* property. This method should return the value of the *name* property for the *object* object. set ( self, object, name, value ) This is the *setter* method of a trait that behaves like a property. It has the following arguments: object The object the property applies to. name The name of the property on *object*. value The value being assigned as the value of the property. If this method is not defined, but the *get* method is defined, the trait behaves like a *read-only* property. This method does not need to return a value, but it should raise a **TraitError** exception if the specified *value* is not valid and cannot be coerced or adapted to a valid value. Because the value of a *property* is determined by the *get* method, the *default_value* class constant and *get_default_value* method are not used. However, all other values and methods, such as the *info_text* class attribute and *info* method apply to a *property* as well as a normal type. Please refer to the preceding section on defining a trait type for additional information that applies to properties as well. """ #---------------------------------------------------------------------- from traits.api import * #--[DiceRoll Type]-------------------------------------------------------------- # Define a type whose value represents the roll of a pair of dice: class DiceRoll ( TraitType ): # Set default value to 'snake-eyes': default_value = ( 1, 1 ) # Describe the type: info_text = ('a tuple of the form (n,m), where both n and m are integers ' 'in the range from 1 to 6 representing a roll of a pair of ' 'dice') # Validate any value assigned to the trait to make sure it is a valid # dice roll: def validate ( self, object, name, value ): if (isinstance( value, tuple ) and (len( value ) == 2) and (1 <= value[0] <= 6) and (1 <= value[1] <= 6)): return value self.error( object, name, value ) #--[RandInt Property]----------------------------------------------------------- from random import randint # Define a read-only property whose value is a random integer in a specified # range: class RandInt ( TraitType ): # Define the type's constructor: def __init__( self, low = 1, high = 10, **metadata ): super( RandInt, self ).__init__( **metadata ) self.low = int( low ) self.high = int( high ) # Define the property's getter: def get ( self ): return randint( self.low, self.high ) # Define the type's type information: def info ( self ): return ('a random integer in the range from %d to %d' % ( self.low, self.high)) #--[Craps Class]---------------------------------------------------------------- # Define a test class containing both new trait types/properties: class Craps ( HasTraits ): rolls = List( DiceRoll ) die = RandInt( 1, 6 ) #--[Example*]-------------------------------------------------------------------- # Create a test object: craps = Craps() # Add a number of test dice rolls: for i in range( 10 ): craps.rolls.append( ( craps.die, craps.die ) ) # Display the results: print craps.rolls # Try to assign an invalid dice roll: try: craps.rolls.append( ( 0, 0 ) ) except TraitError: print 'Assigning an invalid dice roll failed.' traits-4.5.0/examples/tutorials/traits_4.0/trait_types/trait_types.py000066400000000000000000000111071233213561600260530ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. #--(New Trait Definition Style)------------------------------------------------- """ New Trait Definition Style ========================== The Traits package comes with a number of predefined traits, such as **Str**, **Int**, **Float**, **Range** and so on. While these core traits suffice for most common programming situations, quite often the need arises to create a new *custom* trait. Traits has always supported creating new traits, but in the past this has typically involved creating a new **TraitHandler** subclass and invoking the **Trait** function to define a new trait based on that subclass, as shown in the following example:: class OddIntHandler ( TraitHandler ): def validate ( self, object, name, value ): if isinstance( value, int ) and ((value % 2) == 1): return value self.error( object, name, value ) def info ( self ): return 'an odd integer' OddInt = Trait( 1, OddIntHandler ) OddInt = TraitFactory( OddInt ) While not overly complex, nevertheless several developers have complained that that: - The process of creating a new trait is not overly intuitive. - The resulting trait cannot be subclassed to derive a new trait with slightly different behavior. As a result, in Traits 3.0 a new method of defining traits has been added that hopefully addresses both of these issues. Note that this new style of creating traits does not replace the old style of creating traits, but is simply a new technique that can be used instead of the original method. Both old and new style traits can be defined, used and interoperate in the same program without any adverse side effects. OddInt Redux ------------ Using the new style of defining traits, we can rewrite our previous **OddInt** example as follows:: class OddInt ( Int ): # Define the default value: default_value = 1 # Describe the trait type: info_text = 'an odd integer' def validate ( self, object, name, value ): value = super( OddInt, self ).validate( object, name, value ) if (value % 2) == 1: return value self.error( object, name, value ) This provides the exact same functionality as the previous definition of **OddInt**. There are several points to make about the new definition however: - The **OddInt** class derives from **Int** (not **TraitHandler**). This has several important side effects: * **OddInt** can re-use and change any part of the **Int** class behavior that it needs to. Note in this case the re-use of the **Int** class's *validate* method via the *super* call in **OddInt's** *validate* method. * As a subclass of **Int**, it is related to **Int**, which can be important both from a documentation and programming point of view. The original definition of **OddInt** was related to **Int** only in that their names were similar. - The default value and trait description information are declared as class constants. Although there are more dynamic techniques that allow computing these values (which will be described in another tutorials), this provides a very simple means of defining these values. - No use of **TraitHandler**, **Trait** or **TraitFactory** is required, just good old OO programming techniques. Hopefully this will make the process of creating a new trait type a little more understandable to a wider group of developers. """ #---------------------------------------------------------------------- from traits.api import * #--[OddInt Definition]---------------------------------------------------------- class OddInt ( Int ): # Define the default value: default_value = 1 # Describe the trait type: info_text = 'an odd integer' def validate ( self, object, name, value ): value = super( OddInt, self ).validate( object, name, value ) if (value % 2) == 1: return value self.error( object, name, value ) #--[Test Class]----------------------------------------------------------------- class Test ( HasTraits ): any_int = Int odd_int = OddInt #--[Example*]------------------------------------------------------------------- # Create a test object: t = Test() # Set both traits to an odd integer value: t.any_int = 1 print "t.any_int:", t.any_int t.odd_int = 1 print "t.odd_int:", t.odd_int # Now set them both to an even value (and see what happens): t.any_int = 2 print "t.any_int:", t.any_int t.odd_int = 2 print "t.odd_int:", t.odd_int # Should never get here! traits-4.5.0/examples/tutorials/traits_4.0/trait_types/tutorial.desc000066400000000000000000000001761233213561600256410ustar00rootroot00000000000000Trait Types trait_types: New Trait Definition Style core_traits: Rewritten Core Traits new_types: Creating New Trait Types traits-4.5.0/examples/tutorials/traits_4.0/tutorial.desc000066400000000000000000000001671233213561600232720ustar00rootroot00000000000000Changes starting with Traits 3.0 interfaces trait_types extended_trait_change decorators delegation getstate_setstate traits-4.5.0/examples/tutorials/tutor.py000066400000000000000000001675561233213561600204470ustar00rootroot00000000000000#------------------------------------------------------------------------------- # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 03/30/2007 # # fixme: # - Get custom tree view images. # - Write a program to create a directory structure from a lesson plan file. # #------------------------------------------------------------------------------- """ A framework for creating interactive Python tutorials. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- import sys import os import re from string \ import capwords from traits.api \ import HasPrivateTraits, HasTraits, File, Directory, Instance, Int, Str, \ List, Bool, Dict, Any, Property, Delegate, Button, cached_property from traitsui.api \ import View, VGroup, HGroup, VSplit, HSplit, Tabbed, Item, Heading, \ Handler, ListEditor, CodeEditor, EnumEditor, HTMLEditor, \ TreeEditor, TitleEditor, ValueEditor, ShellEditor from traitsui.menu \ import NoButtons from traitsui.tree_node \ import TreeNode from pyface.image_resource \ import ImageResource try: from traitsui.wx.extra.windows.ie_html_editor \ import IEHTMLEditor from traitsui.wx.extra.windows.flash_editor \ import FlashEditor except: IEHTMLEditor = FlashEditor = None #------------------------------------------------------------------------------- # Constants: #------------------------------------------------------------------------------- # Correct program usage information: Usage = """ Correct usage is: tutor.py [root_dir] where: root_dir = Path to root of the tutorial tree If omitted, 'root_dir' defaults to the current directory.""" # The standard list editor used: list_editor = ListEditor( use_notebook = True, deletable = False, page_name = '.title', export = 'DockWindowShell', dock_style = 'fixed' ) # The standard code snippet editor used: snippet_editor = ListEditor( use_notebook = True, deletable = False, page_name = '.title', export = 'DockWindowShell', dock_style = 'tab', selected = 'snippet' ) # Regular expressions used to match section directories: dir_pat1 = re.compile( r'^(\d\d\d\d)_(.*)$' ) dir_pat2 = re.compile( r'^(.*)_(\d+\.\d+)$' ) # Regular expression used to match section header in a Python source file: section_pat1 = re.compile( r'^#-*\[(.*)\]' ) # Normal section_pat2 = re.compile( r'^#-*<(.*)>' ) # Hidden section_pat3 = re.compile( r'^#-*\((.*)\)' ) # Description # Regular expression used to extract item titles from URLs: url_pat1 = re.compile( r'^(.*)\[(.*)\](.*)$' ) # Normal # Is this running on the Windows platform? is_windows = (sys.platform in ( 'win32', 'win64' )) # Python file section types: IsCode = 0 IsHiddenCode = 1 IsDescription = 2 # HTML template for a default lecture: DefaultLecture = """

    This section contains the following topics:

      %s
    """ # HTML template for displaying a .wmv/.avi movie file: WMVMovieTemplate = """

    """ # HTML template for displaying a QuickTime.mov movie file: QTMovieTemplate = """

    """ # HTML template for displaying an image file: ImageTemplate = """ """ # HTML template for playing an MP3 audio file: MP3Template = """

     

    """ #------------------------------------------------------------------------------- # Returns the contents of a specified text file (or None): #------------------------------------------------------------------------------- def read_file ( path, mode = 'rb' ): """ Returns the contents of a specified text file (or None). """ fh = result = None try: fh = file( path, mode ) result = fh.read() except: pass if fh is not None: try: fh.close() except: pass return result #------------------------------------------------------------------------------- # Creates a title from a specified string: #------------------------------------------------------------------------------- def title_for ( title ): """ Creates a title from a specified string. """ return capwords( title.replace( '_', ' ' ) ) #------------------------------------------------------------------------------- # Returns a relative CSS style sheet path for a specified path and parent # section: #------------------------------------------------------------------------------- def css_path_for ( path, parent ): """ Returns a relative CSS style sheet path for a specified path and parent section. """ if os.path.isfile( os.path.join( path, 'default.css' ) ): return 'default.css' if parent is not None: result = parent.css_path if result != '': if path != parent.path: result = os.path.join( '..', result ) return result return '' #------------------------------------------------------------------------------- # 'StdOut' class: #------------------------------------------------------------------------------- class StdOut ( object ): """ Simulate stdout, but redirect the output to the 'output' string supplied by some 'owner' object. """ def __init__ ( self, owner ): self.owner = owner def write ( self, data ): """ Adds the specified data to the output log. """ self.owner.output += data def flush ( self ): """ Flushes all current data to the output log. """ pass #------------------------------------------------------------------------------- # 'NoDemo' class: #------------------------------------------------------------------------------- class NoDemo ( HasPrivateTraits ): #-- Traits View Definitions ------------------------------------------------ view = View( Heading( 'No demo defined for this lab.' ), resizable = True ) #------------------------------------------------------------------------------- # 'DemoPane' class: #------------------------------------------------------------------------------- class DemoPane ( HasPrivateTraits ): """ Displays the contents of a Python lab's *demo* value. """ #-- Trait Definitions ------------------------------------------------------ demo = Instance( HasTraits, factory = NoDemo ) #-- Traits View Definitions ------------------------------------------------ view = View( Item( 'demo', id = 'demo', show_label = False, style = 'custom', resizable = True ), id = 'enthought.tutor.demo', resizable = True ) #------------------------------------------------------------------------------- # 'ATutorialItem' class: #------------------------------------------------------------------------------- class ATutorialItem ( HasPrivateTraits ): """ Defines the abstract base class for each type of item (HTML, Flash, text, code) displayed within the tutor. """ #-- Traits Definitions ----------------------------------------------------- # The title for the item: title = Str # The path to the item: path = File # The displayable content for the item: content = Property #------------------------------------------------------------------------------- # 'ADescriptionItem' class: #------------------------------------------------------------------------------- class ADescriptionItem ( ATutorialItem ): """ Defines a common base class for all description items. """ #-- Event Handlers --------------------------------------------------------- def _path_changed ( self, path ): """ Sets the title for the item based on the item's path name. """ self.title = title_for( os.path.splitext( os.path.basename( path ) )[0] ) #------------------------------------------------------------------------------- # 'HTMLItem' class: #------------------------------------------------------------------------------- class HTMLItem ( ADescriptionItem ): """ Defines a class used for displaying a single HTML page within the tutor using the default Traits HTML editor. """ #-- Traits Definitions ----------------------------------------------------- url = Str #-- Traits View Definitions ------------------------------------------------ view = View( Item( 'content', style = 'readonly', show_label = False, editor = HTMLEditor() ) ) #-- Event Handlers --------------------------------------------------------- def _url_changed ( self, url ): """ Sets the item title when the 'url' is changed. """ match = url_pat1.match( url ) if match is not None: title = match.group(2).strip() else: title = url.strip() col = title.rfind( '/' ) if col >= 0: title = os.path.splitext( title[ col + 1: ] )[0] self.title = title #-- Property Implementations ----------------------------------------------- @cached_property def _get_content ( self ): """ Returns the item content. """ url = self.url if url != '': match = url_pat1.match( url ) if match is not None: url = match.group(1) + match.group(3) return url return read_file( self.path ) def _set_content ( self, content ): """ Sets the item content. """ self._content = content #------------------------------------------------------------------------------- # 'HTMLStrItem' class: #------------------------------------------------------------------------------- class HTMLStrItem ( HTMLItem ): """ Defines a class used for displaying a single HTML text string within the tutor using the default Traits HTML editor. """ # Make the content a real trait rather than a property: content = Str #------------------------------------------------------------------------------- # 'IEHTMLItem' class: #------------------------------------------------------------------------------- class IEHTMLItem ( HTMLItem ): """ Defines a class used for displaying a single HTML page within the tutor using the Traits Internet Explorer HTML editor. """ #-- Traits View Definitions ------------------------------------------------ view = View( Item( 'content', style = 'readonly', show_label = False, editor = IEHTMLEditor() ) ) #------------------------------------------------------------------------------- # 'IEHTMLStrItem' class: #------------------------------------------------------------------------------- class IEHTMLStrItem ( IEHTMLItem ): """ Defines a class used for displaying a single HTML text string within the tutor using the Traits Internet Explorer HTML editor. """ # Make the content a real trait rather than a property: content = Str #------------------------------------------------------------------------------- # 'FlashItem' class: #------------------------------------------------------------------------------- class FlashItem ( HTMLItem ): """ Defines a class used for displaying a Flash-based animation or video within the tutor. """ #-- Traits View Definitions ------------------------------------------------ view = View( Item( 'content', style = 'readonly', show_label = False, editor = FlashEditor() ) ) #------------------------------------------------------------------------------- # 'TextItem' class: #------------------------------------------------------------------------------- class TextItem ( ADescriptionItem ): """ Defines a class used for displaying a text file within the tutor. """ #-- Traits View Definitions ------------------------------------------------ view = View( Item( 'content', style = 'readonly', show_label = False, editor = CodeEditor( show_line_numbers = False, selected_color = 0xFFFFFF ) ) ) #-- Property Implementations ----------------------------------------------- @cached_property def _get_content ( self ): """ Returns the item content. """ return read_file( self.path ) #------------------------------------------------------------------------------- # 'TextStrItem' class: #------------------------------------------------------------------------------- class TextStrItem ( TextItem ): """ Defines a class used for displaying a text file within the tutor. """ # Make the content a real trait, rather than a property: content = Str #------------------------------------------------------------------------------- # 'CodeItem' class: #------------------------------------------------------------------------------- class CodeItem ( ATutorialItem ): """ Defines a class used for displaying a Python source code fragment within the tutor. """ #-- Trait Definitions ------------------------------------------------------ # The displayable content for the item (override): content = Str # The starting line of the code snippet within the original file: start_line = Int # The currently selected line: selected_line = Int # Should this section normally be hidden? hidden = Bool #-- Traits View Definitions ------------------------------------------------ view = View( Item( 'content', style = 'custom', show_label = False, editor = CodeEditor( selected_line = 'selected_line' ) ) ) #------------------------------------------------------------------------------- # 'ASection' abstract base class: #------------------------------------------------------------------------------- class ASection ( HasPrivateTraits ): """ Defines an abstract base class for a single section of a tutorial. """ #-- Traits Definitions ----------------------------------------------------- # The title of the section: title = Str # The path to this section: path = Directory # The parent section of this section (if any): parent = Instance( 'ASection' ) # Optional table of contents (can be used to define/locate the subsections): toc = List( Str ) # The path to the CSS style sheet to use for this section: css_path = Property # The list of subsections contained in this section: subsections = Property # List( ASection ) # This section can be executed: is_runnable = Bool( True ) # Should the Python code be automatically executed on start-up? auto_run = Bool( False ) #-- Property Implementations ----------------------------------------------- @cached_property def _get_subsections ( self ): """ Returns the subsections for this section: """ if len( self.toc ) > 0: self._load_toc() else: self._load_dirs() # Return the cached list of sections: return self._subsections @cached_property def _get_css_path ( self ): """ Returns the path to the CSS style sheet for this section. """ return css_path_for( self.path, self.parent ) #-- Private Methods -------------------------------------------------------- def _load_dirs ( self ): """ Defines the section's subsections by analyzing all of the section's sub-directories. """ # No value cached yet: dirs = [] path = self.path # Find every sub-directory whose name begins with a number of the # form ddd, or ends with a number of the form _ddd.ddd (used for # sorting them into the correct presentation order): for name in os.listdir( path ): dir = os.path.join( path, name ) if os.path.isdir( dir ): match = dir_pat1.match( name ) if match is not None: dirs.append( ( float( match.group(1) ), match.group(2), dir ) ) else: match = dir_pat2.match( name ) if match is not None: dirs.append( ( float( match.group(2) ), match.group(1), dir ) ) # Sort the directories by their index value: dirs.sort( lambda l, r: cmp( l[0], r[0] ) ) # Create the appropriate type of section for each valid directory: self._subsections = [ sf.section for sf in [ SectionFactory( title = title_for( title ), parent = self ).set( path = dir ) for index, title, dir in dirs ] if sf.section is not None ] def _load_toc ( self ): """ Defines the section's subsections by finding matches for the items defined in the section's table of contents. """ toc = self.toc base_names = [ item.split( ':', 1 )[0] for item in toc ] subsections = [ None ] * len( base_names ) path = self.path # Classify all file names that match a base name in the table of # contents: for name in os.listdir( path ): try: base_name = os.path.splitext( os.path.basename( name ) )[0] index = base_names.index( base_name ) if subsections[ index ] is None: subsections[ index ] = [] subsections[ index ].append( name ) except: pass # Try to convert each group of names into a section: for i, names in enumerate( subsections ): # Only process items for which we found at least one matching file # name: if names is not None: # Get the title for the section from its table of contents # entry: parts = toc[i].split( ':', 1 ) if len( parts ) == 1: title = title_for( parts[0].strip() ) else: title = parts[1].strip() # Handle an item with one file which is a directory as a normal # section: if len( names ) == 1: dir = os.path.join( path, names[0] ) if os.path.isdir( dir ): subsections[i] = SectionFactory( title = title, parent = self ).set( path = dir ).section continue # Otherwise, create a section from the list of matching files: subsections[i] = SectionFactory( title = title, parent = self, files = names ).set( path = path ).section # Set the subsections to the non-None values that are left: self._subsections = [ subsection for subsection in subsections if subsection is not None ] #------------------------------------------------------------------------------- # 'Lecture' class: #------------------------------------------------------------------------------- class Lecture ( ASection ): """ Defines a lecture, which is a section of a tutorial with descriptive information, but no associated Python code. Can be used to provide course overviews, introductory sections, or lead-ins to follow-on lessons or labs. """ #-- Trait Definitions------------------------------------------------------- # The list of descriptive items for the lecture: descriptions = List( ATutorialItem ) # This section can be executed (override): is_runnable = False #-- Traits View Definitions ------------------------------------------------ view = View( Item( 'descriptions', style = 'custom', show_label = False, editor = list_editor ), id = 'enthought.tutor.lecture' ) #------------------------------------------------------------------------------- # 'LabHandler' class: #------------------------------------------------------------------------------- class LabHandler ( Handler ): """ Defines the controller functions for the Lab view. """ def init ( self, info ): """ Handles initialization of the view. """ # Run the associated Python code if the 'auto-run' feature is enabled: if info.object.auto_run: info.object.run_code() #------------------------------------------------------------------------------- # 'Lab' class: #------------------------------------------------------------------------------- class Lab ( ASection ): """ Defines a lab, which is a section of a tutorial with only Python code. This type of section might typically follow a lecture which introduced the code being worked on in the lab. """ #-- Trait Definitions------------------------------------------------------- # The set-up code (if any) for the lab: setup = Instance( CodeItem ) # The list of code items for the lab: snippets = List( CodeItem ) # The list of visible code items for the lab: visible_snippets = Property( depends_on = 'visible', cached = True ) # The currently selected snippet: snippet = Instance( CodeItem ) # Should normally hidden code items be shown? visible = Bool( False ) # The dictionary containing the items from the Python code execution: values = Dict #Any( {} ) # The run Python code button: run = Button( image = ImageResource( 'run' ), height_padding = 1 ) # User error message: message = Str # The output produced while the program is running: output = Str # The current demo pane (if any): demo = Instance( DemoPane, () ) #-- Traits View Definitions ------------------------------------------------ view = View( VSplit( VGroup( Item( 'visible_snippets', style = 'custom', show_label = False, editor = snippet_editor ), HGroup( Item( 'run', style = 'custom', show_label = False, tooltip = 'Run the Python code' ), '_', Item( 'message', springy = True, show_label = False, editor = TitleEditor() ), '_', Item( 'visible', label = 'View hidden sections' ) ), ), Tabbed( Item( 'values', id = 'values_1', label = 'Shell', editor = ShellEditor( share = True ), dock = 'tab', export = 'DockWindowShell' ), Item( 'values', id = 'values_2', editor = ValueEditor(), dock = 'tab', export = 'DockWindowShell' ), Item( 'output', style = 'readonly', editor = CodeEditor( show_line_numbers = False, selected_color = 0xFFFFFF ), dock = 'tab', export = 'DockWindowShell' ), Item( 'demo', id = 'demo', style = 'custom', resizable = True, dock = 'tab', export = 'DockWindowShell' ), show_labels = False, ), id = 'splitter', ), id = 'enthought.tutor.lab', handler = LabHandler ) #-- Event Handlers --------------------------------------------------------- def _run_changed ( self ): """ Runs the current set of snippet code. """ self.run_code() #-- Property Implementations ----------------------------------------------- @cached_property def _get_visible_snippets ( self ): """ Returns the list of code items that are currently visible. """ if self.visible: return self.snippets return [ snippet for snippet in self.snippets if (not snippet.hidden) ] #-- Public Methods --------------------------------------------------------- def run_code ( self ): """ Runs all of the code snippets associated with the section. """ # Reconstruct the lab code from the current set of code snippets: start_line = 1 module = '' for snippet in self.snippets: snippet.start_line = start_line module = '%s\n\n%s' % ( module, snippet.content ) start_line += (snippet.content.count( '\n' ) + 2) # Reset any syntax error and message log values: self.message = self.output = '' # Redirect standard out and error to the message log: stdout, stderr = sys.stdout, sys.stderr sys.stdout = sys.stderr = StdOut( self ) try: try: # Get the execution context dictionary: values = self.values # Clear out any special variables defined by the last run: for name in ( 'demo', 'popup' ): if isinstance( values.get( name ), HasTraits ): del values[ name ] # Execute the current lab code: exec module[2:] in values, values # fixme: Hack trying to update the Traits UI view of the dict. self.values = {} self.values = values # Handle a 'demo' value being defined: demo = values.get( 'demo' ) if not isinstance( demo, HasTraits ): demo = NoDemo() self.demo.demo = demo # Handle a 'popup' value being defined: popup = values.get( 'popup' ) if isinstance( popup, HasTraits ): popup.edit_traits( kind = 'livemodal' ) except SyntaxError, excp: # Convert the line number of the syntax error from one in the # composite module to one in the appropriate code snippet: line = excp.lineno if line is not None: snippet = self.snippets[0] for s in self.snippets: if s.start_line > line: break snippet = s line -= (snippet.start_line - 1) # Highlight the line in error: snippet.selected_line = line # Select the correct code snippet: self.snippet = snippet # Display the syntax error message: self.message = '%s in column %s of line %s' % ( excp.msg.capitalize(), excp.offset, line ) else: # Display the syntax error message without line # info: self.message = excp.msg.capitalize() except: import traceback traceback.print_exc() finally: # Restore standard out and error to their original values: sys.stdout, sys.stderr = stdout, stderr #------------------------------------------------------------------------------- # 'Lesson' class: #------------------------------------------------------------------------------- class Lesson ( Lab ): """ Defines a lesson, which is a section of a tutorial with both descriptive information and associated Python code. """ #-- Trait Definitions------------------------------------------------------- # The list of descriptive items for the lesson: descriptions = List( ATutorialItem ) #-- Traits View Definitions ------------------------------------------------ view = View( HSplit( Item( 'descriptions', label = 'Lesson', style = 'custom', show_label = False, dock = 'horizontal', editor = list_editor ), VSplit( VGroup( Item( 'visible_snippets', style = 'custom', show_label = False, editor = snippet_editor ), HGroup( Item( 'run', style = 'custom', show_label = False, tooltip = 'Run the Python code' ), '_', Item( 'message', springy = True, show_label = False, editor = TitleEditor() ), '_', Item( 'visible', label = 'View hidden sections' ) ), label = 'Lab', dock = 'horizontal' ), Tabbed( Item( 'values', id = 'values_1', label = 'Shell', editor = ShellEditor( share = True ), dock = 'tab', export = 'DockWindowShell' ), Item( 'values', id = 'values_2', editor = ValueEditor(), dock = 'tab', export = 'DockWindowShell' ), Item( 'output', style = 'readonly', editor = CodeEditor( show_line_numbers = False, selected_color = 0xFFFFFF ), dock = 'tab', export = 'DockWindowShell' ), Item( 'demo', id = 'demo', style = 'custom', resizable = True, dock = 'tab', export = 'DockWindowShell' ), show_labels = False, ), label = 'Lab', dock = 'horizontal' ), id = 'splitter', ), id = 'enthought.tutor.lesson', handler = LabHandler ) #------------------------------------------------------------------------------- # 'Demo' class: #------------------------------------------------------------------------------- class Demo ( Lesson ): """ Defines a demo, which is a section of a tutorial with both descriptive information and associated Python code which is executed but not shown. """ #-- Traits View Definitions ------------------------------------------------ view = View( HSplit( Item( 'descriptions', label = 'Lesson', style = 'custom', show_label = False, dock = 'horizontal', editor = list_editor ), Item( 'demo', id = 'demo', style = 'custom', show_label = False, resizable = True, dock = 'horizontal', export = 'DockWindowShell' ), id = 'splitter', ), id = 'enthought.tutor.demo', handler = LabHandler ) #------------------------------------------------------------------------------- # 'SectionFactory' class: #------------------------------------------------------------------------------- class SectionFactory ( HasPrivateTraits ): """ Defines a class that creates Lecture, Lesson or Lab sections (or None), based on the content of a specified directory. None is returned if the directory does not contain any recognized files. """ #-- Traits Definitions ----------------------------------------------------- # The path the section is to be created for: path = Directory # The list of files contained in the section: files = List( Str ) # The parent of the section being created: parent = Instance( ASection ) # The section created from the path: section = Instance( ASection ) # The title for the section: title = Str # The optional table of contents for the section: toc = List( Str ) # The list of descriptive items for the section: descriptions = List( ADescriptionItem ) # The list of code snippet items for the section: snippets = List( CodeItem ) # The path to the CSS style sheet for the section: css_path = Property # Should the Python code be automatically executed on start-up? auto_run = Bool( False ) #-- Event Handlers --------------------------------------------------------- def _path_changed ( self, path ): """ Creates the appropriate section based on the value of the path. """ # Get the list of files to process: files = self.files if len( files ) == 0: # If none were specified, then use all files in the directory: files = os.listdir( path ) # Process the description file (if any) first: for name in files: if os.path.splitext( name )[1] == '.desc': self._add_desc_item( os.path.join( path, name ) ) break # Try to convert each file into one or more 'xxxItem' objects: toc = [ item.split( ':', 1 )[0].strip() for item in self.toc ] for name in files: file_name = os.path.join( path, name ) # Only process the ones that are actual files: if os.path.isfile( file_name ): # Use the file extension to determine the file's type: root, ext = os.path.splitext( name ) if (root not in toc) and (len( ext ) > 1): # If we have a handler for the file type, invoke it: method = getattr( self, '_add_%s_item' % ext[1:].lower(), None ) if method is not None: method( file_name ) # Based on the type of items created (if any), create the corresponding # type of section: if len( self.descriptions ) > 0: if len( self.snippets ) > 0: if len( [ snippet for snippet in self.snippets if (not snippet.hidden) ] ) > 0: self.section = Lesson( title = self.title, path = path, toc = self.toc, parent = self.parent, descriptions = self.descriptions, snippets = self.snippets, auto_run = self.auto_run ) else: self.section = Demo( title = self.title, path = path, toc = self.toc, parent = self.parent, descriptions = self.descriptions, snippets = self.snippets, auto_run = True ) else: self.section = Lecture( title = self.title, path = path, toc = self.toc, parent = self.parent, descriptions = self.descriptions ) elif len( self.snippets ) > 0: self.section = Lab( title = self.title, path = path, toc = self.toc, parent = self.parent, snippets = self.snippets, auto_run = self.auto_run ) else: # No descriptions or code snippets were found. Create a lecture # anyway: section = Lecture( title = self.title, path = path, toc = self.toc, parent = self.parent ) # If the lecture has subsections, then return the lecture and add # a default item containing a description of the subsections of the # lecture: if len( section.subsections ) > 0: self._create_html_item( path = path, content = DefaultLecture % ( '\n'.join( [ '
  • %s
  • ' % subsection.title for subsection in section.subsections ] ) ) ) section.descriptions = self.descriptions self.section = section #-- Property Implementations ----------------------------------------------- def _get_css_path ( self ): """ Returns the path to the CSS style sheet for the section. """ return css_path_for( self.path, self.parent ) #-- Factory Methods for Creating Section Items Based on File Type ---------- def _add_py_item ( self, path ): """ Creates the code snippets for a Python source file. """ source = read_file( path ) if source is not None: lines = source.replace( '\r', '' ).split( '\n' ) start_line = 0 title = 'Prologue' type = IsCode for i, line in enumerate( lines ): match = section_pat1.match( line ) if match is not None: next_type = IsCode else: match = section_pat2.match( line ) if match is not None: next_type = IsHiddenCode else: next_type = IsDescription match = section_pat3.match( line ) if match is not None: self._add_snippet( title, path, lines, start_line, i - 1, type ) start_line = i + 1 title = match.group(1).strip() type = next_type self._add_snippet( title, path, lines, start_line, i, type ) def _add_txt_item ( self, path ): """ Creates a description item for a normal text file. """ self.descriptions.append( TextItem( path = path ) ) def _add_htm_item ( self, path ): """ Creates a description item for an HTML file. """ # Check if there is a corresponding .rst (restructured text) file: dir, base_name = os.path.split( path ) rst = os.path.join( dir, os.path.splitext( base_name )[0] + '.rst' ) # If no .rst file exists, just add the file as a normal HTML file: if not os.path.isfile( rst ): self._create_html_item( path = path ) def _add_html_item ( self, path ): """ Creates a description item for an HTML file. """ self._add_htm_item( path ) def _add_url_item ( self, path ): """ Creates a description item for a file containing URLs. """ data = read_file( path ) if data is not None: for url in [ line for line in data.split( '\n' ) if line.strip()[:1] not in ( '', '#' ) ]: self._create_html_item( url = url.strip() ) def _add_rst_item ( self, path ): """ Creates a description item for a ReSTructured text file. """ # If docutils is not installed, just process the file as an ordinary # text file: try: from docutils.core import publish_cmdline except: self._add_txt_item( path ) return # Get the name of the HTML file we will write to: dir, base_name = os.path.split( path ) html = os.path.join( dir, os.path.splitext( base_name )[0] + '.htm' ) # Try to find a CSS style sheet, and set up the docutil overrides if # found: settings = {} css_path = self.css_path if css_path != '': css_path = os.path.join( self.path, css_path ) settings[ 'stylesheet_path' ] = css_path settings[ 'embed_stylesheet' ] = True settings[ 'stylesheet' ] = None else: css_path = path # If the HTML file does not exist, or is older than the restructured # text file, then let docutils convert it to HTML: is_file = os.path.isfile( html ) if ((not is_file) or (os.path.getmtime( path ) > os.path.getmtime( html )) or (os.path.getmtime( css_path ) > os.path.getmtime( html ))): # Delete the current HTML file (if any): if is_file: os.remove( html ) # Let docutils create a new HTML file from the restructured text # file: publish_cmdline( writer_name = 'html', argv = [ path, html ], settings_overrides = settings ) if os.path.isfile( html ): # If there is now a valid HTML file, use it: self._create_html_item( path = html ) else: # Otherwise, just use the original restructured text file: self._add_txt_item( path ) def _add_swf_item ( self, path ): """ Creates a description item for a Flash file. """ if is_windows: self.descriptions.append( FlashItem( path = path ) ) def _add_mov_item ( self, path ): """ Creates a description item for a QuickTime movie file. """ path2 = path.replace( ':', '|' ) self._create_html_item( path = path, content = QTMovieTemplate % ( path2, path2 ) ) def _add_wmv_item ( self, path ): """ Creates a description item for a Windows movie file. """ self._create_html_item( path = path, content = WMVMovieTemplate % ( path, path ) ) def _add_avi_item ( self, path ): """ Creates a description item for an AVI movie file. """ self._add_wmv_item( path ) def _add_jpg_item ( self, path ): """ Creates a description item for a JPEG image file. """ self._create_html_item( path = path, content = ImageTemplate % path ) def _add_jpeg_item ( self, path ): """ Creates a description item for a JPEG image file. """ self._add_jpg_item( path ) def _add_png_item ( self, path ): """ Creates a description item for a PNG image file. """ self._add_jpg_item( path ) def _add_mp3_item ( self, path ): """ Creates a description item for an mp3 audio file. """ self._create_html_item( path = path, content = MP3Template % path ) def _add_desc_item ( self, path ): """ Creates a section title from a description file. """ # If we've already processed a description file, then we're done: if len( self.toc ) > 0: return lines = [] desc = read_file( path ) if desc is not None: # Split the file into lines and save the non-empty, non-comment # lines: for line in desc.split( '\n' ): line = line.strip() if (len( line ) > 0) and (line[0] != '#'): lines.append( line ) if len( lines ) == 0: # If the file didn't have anything useful in it, set a title based # on the description file name: self.title = title_for( os.path.splitext( os.path.basename( path ) )[0] ) else: # Otherwise, set the title and table of contents from the lines in # the file: self.title = lines[0] self.toc = lines[1:] #-- Private Methods -------------------------------------------------------- def _add_snippet ( self, title, path, lines, start_line, end_line, type ): """ Adds a new code snippet or restructured text item to the list of code snippet or description items. """ # Trim leading and trailing blank lines from the snippet: while start_line <= end_line: if lines[ start_line ].strip() != '': break start_line += 1 while end_line >= start_line: if lines[ end_line ].strip() != '': break end_line -= 1 # Only add if the snippet is not empty: if start_line <= end_line: # Check for the title containing the 'auto-run' flag ('*'): if title[:1] == '*': self.auto_run = True title = title[1:].strip() if title[-1:] == '*': self.auto_run = True title = title[:-1].strip() # Extract out just the lines we will use: content_lines = lines[ start_line: end_line + 1 ] if type == IsDescription: # Add the new restructured text description: self._add_description( content_lines, title ) else: # Add the new code snippet: self.snippets.append( CodeItem( title = title or 'Code', path = path, hidden = (type == IsHiddenCode), content = '\n'.join( content_lines ) ) ) def _add_description ( self, lines, title ): """ Converts a restructured text string to HTML and adds it as description item. """ # Scan the lines for any imbedded Python code that should be shown as # a separate snippet: i = 0 while i < len( lines ): if lines[i].strip()[-2:] == '::': i = self._check_embedded_code( lines, i + 1 ) else: i += 1 # Strip off any docstring style triple quotes (if necessary): content = '\n'.join( lines ).strip() if content[:3] in ( '"""', "'''" ): content = content[3:] if content[-3:] in ( '"""', "'''" ): content = content[:-3] content = content.strip() # If docutils is not installed, just add it as a text string item: try: from docutils.core import publish_string except: self.descriptions.append( TextStrItem( content = content, title = title ) ) return # Try to find a CSS style sheet, and set up the docutil overrides if # found: settings = {} css_path = self.css_path if css_path != '': css_path = os.path.join( self.path, css_path ) settings[ 'stylesheet_path' ] = css_path settings[ 'embed_stylesheet' ] = True settings[ 'stylesheet' ] = None # Convert it from restructured text to HTML: html = publish_string( content, writer_name = 'html', settings_overrides = settings ) # Choose the right HTML renderer: if is_windows: item = IEHTMLStrItem( content = html, title = title ) else: item = HTMLStrItem( content = html, title = title ) # Add the resulting item to the descriptions list: self.descriptions.append( item ) def _create_html_item ( self, **traits ): """ Creates a platform specific html item and adds it to the list of descriptions. """ if is_windows: item = IEHTMLItem( **traits ) else: item = HTMLItem( **traits ) self.descriptions.append( item ) def _check_embedded_code ( self, lines, start ): """ Checks for an embedded Python code snippet within a description. """ n = len( lines ) while start < n: line = lines[ start ].strip() if line == '': start += 1 continue if (line[:1] != '[') or (line[-1:] != ']'): break del lines[ start ] n -= 1 title = line[1:-1].strip() line = lines[ start ] + '.' pad = len( line ) - len( line.strip() ) clines = [] while start < n: line = lines[ start ] + '.' len_line = len( line.strip() ) if (len_line > 1) and ((len( line ) - len_line) < pad): break if (len( clines ) > 0) or (len_line > 1): clines.append( line[ pad: -1 ] ) start += 1 # Add the new code snippet: self.snippets.append( CodeItem( title = title or 'Code', content = '\n'.join( clines ) ) ) break return start #------------------------------------------------------------------------------- # Tutor tree editor: #------------------------------------------------------------------------------- tree_editor = TreeEditor( nodes = [ TreeNode( children = 'subsections', label = 'title', rename = False, copy = False, delete = False, delete_me = False, insert = False, auto_open = True, auto_close = False, node_for = [ ASection ], icon_group = '' ) ], editable = False, auto_open = 1, selected = 'section' ) #------------------------------------------------------------------------------- # 'Tutor' class: #------------------------------------------------------------------------------- class Tutor ( HasPrivateTraits ): """ The main tutorial class which manages the presentation and navigation of the entire tutorial. """ #-- Trait Definitions ------------------------------------------------------ # The path to the files distributed with the tutor: home = Directory # The path to the root of the tutorial tree: path = Directory # The root of the tutorial lesson tree: root = Instance( ASection ) # The current section of the tutorial being displayed: section = Instance( ASection ) # The next section: next_section = Property( depends_on = 'section', cached = True ) # The previous section: previous_section = Property( depends_on = 'section', cached = True ) # The previous section button: previous = Button( image = ImageResource( 'previous' ), height_padding = 1 ) # The next section button: next = Button( image = ImageResource( 'next' ), height_padding = 1 ) # The parent section button: parent = Button( image = ImageResource( 'parent' ), height_padding = 1 ) # The reload tutor button: reload = Button( image = ImageResource( 'reload' ), height_padding = 1 ) # The title of the current session: title = Property( depends_on = 'section' ) #-- Traits View Definitions ------------------------------------------------ view = View( VGroup( HGroup( Item( 'previous', style = 'custom', enabled_when = 'previous_section is not None', tooltip = 'Go to previous section' ), Item( 'parent', style = 'custom', enabled_when = '(section is not None) and ' '(section.parent is not None)', tooltip = 'Go up one level' ), Item( 'next', style = 'custom', enabled_when = 'next_section is not None', tooltip = 'Go to next section' ), '_', Item( 'title', springy = True, editor = TitleEditor() ), '_', Item( 'reload', style = 'custom', tooltip = 'Reload the tutorial' ), show_labels = False ), '_', HSplit( Item( 'root', label = 'Table of Contents', editor = tree_editor, dock = 'horizontal', export = 'DockWindowShell' ), Item( 'section', id = 'section', label = 'Current Lesson', style = 'custom', resizable = True, dock = 'horizontal' ), id = 'splitter', show_labels = False ) ), title = 'Python Tutor', id = 'dmorrill.tutor.tutor:1.0', buttons = NoButtons, resizable = True, width = 0.8, height = 0.8 ) #-- Event Handlers --------------------------------------------------------- def _path_changed ( self, path ): """ Handles the tutorial root path being changed. """ self.init_tutor() def _next_changed ( self ): """ Displays the next tutorial section. """ self.section = self.next_section def _previous_changed ( self ): """ Displays the previous tutorial section. """ self.section = self.previous_section def _parent_changed ( self ): """ Displays the parent of the current tutorial section. """ self.section = self.section.parent def _reload_changed ( self ): """ Reloads the tutor from the original path specified. """ self.init_tutor() #-- Property Implementations ----------------------------------------------- @cached_property def _get_next_section ( self ): """ Returns the next section of the tutorial. """ next = None section = self.section if len( section.subsections ) > 0: next = section.subsections[0] else: parent = section.parent while parent is not None: index = parent.subsections.index( section ) if index < (len( parent.subsections ) - 1): next = parent.subsections[ index + 1 ] break parent, section = parent.parent, parent return next @cached_property def _get_previous_section ( self ): """ Returns the previous section of the tutorial. """ previous = None section = self.section parent = section.parent if parent is not None: index = parent.subsections.index( section ) if index > 0: previous = parent.subsections[ index - 1 ] while len( previous.subsections ) > 0: previous = previous.subsections[-1] else: previous = parent return previous def _get_title ( self ): """ Returns the title of the current section. """ section = self.section if section is None: return '' return ('%s: %s' % ( section.__class__.__name__, section.title )) #-- Public Methods --------------------------------------------------------- def init_tutor ( self ): """ Initials the tutor by creating the root section from the specified path. """ path = self.path title = title_for( os.path.splitext( os.path.basename( path ) )[0] ) section = SectionFactory( title = title ).set( path = path ).section if section is not None: self.section = self.root = section #------------------------------------------------------------------------------- # Run the program: #------------------------------------------------------------------------------- # Only run the program if we were invoked from the command line: if __name__ == '__main__': # Validate the command line arguments: if len( sys.argv ) > 2: print Usage sys.exit( 1 ) # Determine the root path to use for the tutorial files: if len( sys.argv ) == 2: path = sys.argv[1] else: path = os.getcwd() # Create a tutor and display the tutorial: tutor = Tutor( home = os.path.dirname( sys.argv[0] ) ).set( path = path ) if tutor.root is not None: tutor.configure_traits() else: print """No traits tutorial found in %s. Correct usage is: python tutor.py [tutorial_path] where: tutorial_path = Path to the root of the traits tutorial. If tutorial_path is omitted, the current directory is assumed to be the root of the tutorial.""" % path traits-4.5.0/image_LICENSE.txt000066400000000000000000000074621233213561600160260ustar00rootroot00000000000000The icons are mostly derived work from other icons. As such they are licensed accordingly to the original license: Project License File ---------------------------------------------------------------------------- Eclipse Eclipse Public License image_LICENSE_Eclipse.txt Enthought BSD 3-Clause LICENSE.txt Nuvola LGPL image_LICENSE_Nuvola.txt Unless stated in this file, icons are the work of Enthought, and are released under a 3 clause BSD license. Files and original authors: ---------------------------------------------------------------------------- docs/source/tutorials/images: application1.png | Enthought application2.png | Enthought application3.png | Enthought code_block1.png | Enthought container.png | Enthought interactive.png | Enthought mpl_figure_editor.png | Enthought traits_thread.png | Enthought traitsui/images: array_node.png | Enthought bool_node.png | Enthought class_node.png | Eclipse complex_node.png | Enthought dialog_warning.png | Nuvola dict_node.png | Enthought float_node.png | Enthought folder-new.png | Nuvola function_node.png | Eclipse int_node.png | Enthought list_node.png | Enthought method_node.png | Eclipse none_node.png | Nuvola object_node.png | Eclipse other_node.png | Enthought set_node.png | Enthought std_horizontal_drag.png | Enthought std_horizontal_splitter.png | Enthought std_tab_active.png | Enthought std_tab_background.png | Enthought std_tab_hover.png | Enthought std_tab_inactive.png | Enthought std_tab.png | Enthought std_vertical_drag.png | Enthought std_vertical_splitter.png | Enthought string_node.png | Enthought traits_node.png | Eclipse tuple_node.png | Enthought examples/demo/: traits_ui_demo.jpg | Enthought examples/demo/Advanced/images: red_flag.png | Nuvola examples/demo/Applications/images: blue_ball.png | Nuvola GG5.png | Enthought header.png | Enthought notebook_close.png | Enthought notebook_open.png | Enthought red_ball.png | Enthought TFB.png | Enthought examples/demo/Extras/images: info.png | Enthought logo_32x32.gif | Enthought logo_48x48.gif | Enthought logo_64x64.gif | Enthought examples/demo/Standard Editors/images: bottom_left_origin.gif | Enthought bottom_right_origin.gif | Enthought top_left_origin.gif | Enthought top_right_origin.gif | Enthought examples/demo/Standard Editors/Popup_versions/images: bottom_left_origin.gif | Enthought bottom_right_origin.gif | Enthought top_left_origin.gif | Enthought top_right_origin.gif | Enthought examples/tutorials/images: next.png | Nuvola parent.png | Nuvola previous.png | Nuvola reload.png | Nuvola run.png | Nuvola traits-4.5.0/image_LICENSE_Eclipse.txt000066400000000000000000000260431233213561600174660ustar00rootroot00000000000000Eclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENTS ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i)changes to the Program, and ii)additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributors behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipients responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributors responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipients patent(s), then such Recipients rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipients rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipients rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipients obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. traits-4.5.0/image_LICENSE_Nuvola.txt000066400000000000000000000566451233213561600173610ustar00rootroot00000000000000GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: * a) The modified work must itself be a software library. * b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. * c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. * d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: * a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) * b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. * c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. * d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. * e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: * a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. * b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. traits-4.5.0/setup.py000066400000000000000000000042261233213561600145460ustar00rootroot00000000000000# Copyright (c) 2008-2013 by Enthought, Inc. # All rights reserved. from os.path import join from setuptools import setup, Extension, find_packages d = {} traits_init = join('traits', '__init__.py') exec(compile(open(traits_init).read(), traits_init, 'exec'), d) ctraits = Extension( 'traits.ctraits', sources = ['traits/ctraits.c'], extra_compile_args = ['-DNDEBUG=1', '-O3' ]#, '-DPy_LIMITED_API'], ) def additional_commands(): try: from sphinx.setup_command import BuildDoc except ImportError: return {} else: return {'documentation': BuildDoc} setup( name = 'traits', version = d['__version__'], url = 'http://code.enthought.com/projects/traits', author = 'David C. Morrill, et. al.', author_email = 'dmorrill@enthought.com', classifiers = [c.strip() for c in """\ Development Status :: 5 - Production/Stable Intended Audience :: Developers Intended Audience :: Science/Research License :: OSI Approved :: BSD License Operating System :: MacOS Operating System :: Microsoft :: Windows Operating System :: OS Independent Operating System :: POSIX Operating System :: Unix Programming Language :: C Programming Language :: Python Topic :: Scientific/Engineering Topic :: Software Development Topic :: Software Development :: Libraries """.splitlines() if len(c.strip()) > 0], description = 'explicitly typed attributes for Python', long_description = open('README.rst').read(), download_url = ('http://www.enthought.com/repo/ets/traits-%s.tar.gz' % d['__version__']), ext_modules = [ctraits], include_package_data = True, license = 'BSD', maintainer = 'ETS Developers', maintainer_email = 'enthought-dev@enthought.com', packages = find_packages(), platforms = ["Windows", "Linux", "Mac OS-X", "Unix", "Solaris"], zip_safe = False, use_2to3 = True, # traits_listener.ListenerItem has a trait *next* which gets wrongly renamed use_2to3_exclude_fixers = ['lib2to3.fixes.fix_next'], cmdclass=additional_commands(), ) traits-4.5.0/traits/000077500000000000000000000000001233213561600143365ustar00rootroot00000000000000traits-4.5.0/traits/__init__.py000066400000000000000000000006621233213561600164530ustar00rootroot00000000000000from __future__ import absolute_import __version__ = '4.5.0' # Add a NullHandler so 'traits' loggers don't complain when they get used. import logging class NullHandler(logging.Handler): def handle(self, record): pass def emit(self, record): pass def createLock(self): self.lock = None logger = logging.getLogger(__name__) logger.addHandler(NullHandler()) del logging, logger, NullHandler traits-4.5.0/traits/_py2to3.py000066400000000000000000000173021233213561600162120ustar00rootroot00000000000000""" Helper module, providing a common API for tasks that require a different implementation in python 2 and 3. """ from __future__ import division, absolute_import import sys if sys.version_info[0] < 3: import string str_find = string.find str_rfind = string.rfind else: str_find = str.find str_rfind = str.rfind if sys.version_info[0] < 3: from types import InstanceType,ClassType def is_old_style_instance(obj): return type(obj) is InstanceType def is_old_style_class(obj): return type(obj) is ClassType def is_InstanceType(obj): return obj is InstanceType def is_ClassType(obj): return obj is ClassType else: def is_old_style_instance(obj): return False def is_old_style_instance(obj): return False def is_InstanceType(obj): return False def is_ClassType(obj): return False if sys.version_info[0] < 3: from types import InstanceType def type_w_old_style(obj): the_type = type(obj) if the_type is InstanceType: # Old-style class. the_type = obj.__class__ return the_type else: type_w_old_style = type if sys.version_info[0] < 3: from types import ClassType ClassTypes = ( ClassType, type ) else: ClassTypes = ( type, ) import contextlib if sys.version_info[0] < 3: def nested_context_mgrs(*args): return contextlib.nested(*args) else: if sys.version_info[:2] < (3,3): # ExitStack was introduced in python 3.3. We copy the 3.3 version here # to support python 3.2 class ExitStack(object): """Context manager for dynamic management of a stack of exit callbacks For example: with ExitStack() as stack: files = [stack.enter_context(open(fname)) for fname in filenames] # All opened files will automatically be closed at the end of # the with statement, even if attempts to open files later # in the list raise an exception """ def __init__(self): from collections import deque self._exit_callbacks = deque() def pop_all(self): """Preserve the context stack by transferring it to a new instance""" from collections import deque new_stack = type(self)() new_stack._exit_callbacks = self._exit_callbacks self._exit_callbacks = deque() return new_stack def _push_cm_exit(self, cm, cm_exit): """Helper to correctly register callbacks to __exit__ methods""" def _exit_wrapper(*exc_details): return cm_exit(cm, *exc_details) _exit_wrapper.__self__ = cm self.push(_exit_wrapper) def push(self, exit): """Registers a callback with the standard __exit__ method signature Can suppress exceptions the same way __exit__ methods can. Also accepts any object with an __exit__ method (registering a call to the method instead of the object itself) """ # We use an unbound method rather than a bound method to follow # the standard lookup behaviour for special methods _cb_type = type(exit) try: exit_method = _cb_type.__exit__ except AttributeError: # Not a context manager, so assume its a callable self._exit_callbacks.append(exit) else: self._push_cm_exit(exit, exit_method) return exit # Allow use as a decorator def callback(self, callback, *args, **kwds): """Registers an arbitrary callback and arguments. Cannot suppress exceptions. """ def _exit_wrapper(exc_type, exc, tb): callback(*args, **kwds) # We changed the signature, so using @wraps is not appropriate, but # setting __wrapped__ may still help with introspection _exit_wrapper.__wrapped__ = callback self.push(_exit_wrapper) return callback # Allow use as a decorator def enter_context(self, cm): """Enters the supplied context manager If successful, also pushes its __exit__ method as a callback and returns the result of the __enter__ method. """ # We look up the special methods on the type to match the with statement _cm_type = type(cm) _exit = _cm_type.__exit__ result = _cm_type.__enter__(cm) self._push_cm_exit(cm, _exit) return result def close(self): """Immediately unwind the context stack""" self.__exit__(None, None, None) def __enter__(self): return self def __exit__(self, *exc_details): # We manipulate the exception state so it behaves as though # we were actually nesting multiple with statements frame_exc = sys.exc_info()[1] def _fix_exception_context(new_exc, old_exc): while 1: exc_context = new_exc.__context__ if exc_context in (None, frame_exc): break new_exc = exc_context new_exc.__context__ = old_exc # Callbacks are invoked in LIFO order to match the behaviour of # nested context managers suppressed_exc = False while self._exit_callbacks: cb = self._exit_callbacks.pop() try: if cb(*exc_details): suppressed_exc = True exc_details = (None, None, None) except: new_exc_details = sys.exc_info() # simulate the stack of exceptions by setting the context _fix_exception_context(new_exc_details[1], exc_details[1]) if not self._exit_callbacks: raise exc_details = new_exc_details return suppressed_exc else: ExitStack = contextlib.ExitStack class nested_context_mgrs(ExitStack): """ Emulation of python 2's :py:class:`contextlib.nested`. It has gone from python 3 due to it's deprecation status in python 2. Note that :py:class:`contextlib.nested` was deprecated for a reason: It has issues with context managers that fail during init. The same caveats also apply here. So do not use this unless really necessary! """ def __init__(self,*args): super(nested_context_mgrs,self).__init__() self._ctxt_mgrs = args def __enter__(self): ret = [] try: for mgr in self._ctxt_mgrs: ret.append(self.enter_context(mgr)) except: self.close() raise return tuple(ret) if sys.version_info[0] < 3: def assertCountEqual(self,itemsA,itemsB): self.assertItemsEqual(itemsA,itemsB) else: def assertCountEqual(self,itemsA,itemsB): self.assertCountEqual(itemsA,itemsB) traits-4.5.0/traits/adaptation/000077500000000000000000000000001233213561600164625ustar00rootroot00000000000000traits-4.5.0/traits/adaptation/__init__.py000066400000000000000000000012151233213561600205720ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. #------------------------------------------------------------------------------ """ Adaptation package. :Copyright: 2013 Enthought, Inc. """ traits-4.5.0/traits/adaptation/adaptation_error.py000066400000000000000000000015321233213561600223720ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. #------------------------------------------------------------------------------ """ Exception raised when a requested adaptation is not possible. """ class AdaptationError(TypeError): """ Exception raised when a requested adaptation is not possible. """ pass #### EOF ###################################################################### traits-4.5.0/traits/adaptation/adaptation_manager.py000066400000000000000000000363621233213561600226640ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. #------------------------------------------------------------------------------ """ Manages all registered adaptations. """ from heapq import heappop, heappush import inspect import itertools import sys import functools from traits.adaptation.adaptation_error import AdaptationError from traits.has_traits import HasTraits from traits.trait_types import Dict, List, Str def no_adapter_necessary(adaptee): """ An adapter factory used to register that a protocol provides another. See 'register_provides' for details. """ return adaptee class AdaptationManager(HasTraits): """ Manages all registered adaptations. """ #### 'AdaptationManager' class protocol ################################### @staticmethod def mro_distance_to_protocol(from_type, to_protocol): """ Return the distance in the MRO from 'from_type' to 'to_protocol'. If `from_type` provides `to_protocol`, returns the distance between `from_type` and the super-most class in the MRO hierarchy providing `to_protocol` (that's where the protocol was provided in the first place). If `from_type` does not provide `to_protocol`, return None. """ if not AdaptationManager.provides_protocol(from_type, to_protocol): return None # We walk up the MRO hierarchy until the point where the `to_protocol` # is *no longer* provided. When we reach that point we know that the # previous class in the MRO is the one that provided the protocol in # the first place (e.g., the first super-class implementing an # interface). supertypes = inspect.getmro(from_type)[1:] distance = 0 for t in supertypes: if AdaptationManager.provides_protocol(t, to_protocol): distance += 1 # We have reached the point in the MRO where the protocol is no # longer provided. else: break return distance @staticmethod def provides_protocol(type_, protocol): """ Does the given type provide (i.e implement) a given protocol? 'type_' is a Python 'type'. 'protocol' is either a regular Python class or a traits Interface. Return True if the object provides the protocol, otherwise False. """ # We do the 'is' check first as a performance improvement to save us # a call to 'issubclass'. return type_ is protocol or issubclass(type_, protocol) #### 'AdaptationManager' protocol ########################################## def adapt(self, adaptee, to_protocol, default=AdaptationError): """ Attempt to adapt an object to a given protocol. `adaptee` is the object that we want to adapt. `to_protocol` is the protocol that the want to adapt the object to. If `adaptee` already provides (i.e. implements) the given protocol then it is simply returned unchanged. Otherwise, we try to build a chain of adapters that adapt `adaptee` to `to_protocol`. If no such adaptation is possible then either an AdaptationError is raised (if default=Adaptation error), or `default` is returned (as in the default value passed to 'getattr' etc). """ # If the object already provides the given protocol then it is # simply returned. # We use adaptee.__class__ instead of type(adaptee) as a courtesy to # old-style classes. if self.provides_protocol(adaptee.__class__, to_protocol): result = adaptee # Otherwise, try adapting the object. else: result = self._adapt(adaptee, to_protocol) if result is None: if default is AdaptationError: raise AdaptationError( 'Could not adapt %r to %r' % (adaptee, to_protocol)) else: result = default return result def register_offer(self, offer): """ Register an offer to adapt from one protocol to another. """ offers = self._adaptation_offers.setdefault( offer.from_protocol_name, [] ) offers.append(offer) return def register_factory(self, factory, from_protocol, to_protocol): """ Register an adapter factory. This is a simply a convenience method that creates and registers an 'AdaptationOffer' from the given arguments. """ from traits.adaptation.adaptation_offer import AdaptationOffer self.register_offer( AdaptationOffer( factory = factory, from_protocol = from_protocol, to_protocol = to_protocol ) ) return def register_provides(self, provider_protocol, protocol): """ Register that a protocol provides another. """ self.register_factory(no_adapter_necessary, provider_protocol, protocol) return def supports_protocol(self, obj, protocol): """ Does the object support a given protocol? An object "supports" a protocol if either it "provides" it directly, or it can be adapted to it. """ return self.adapt(obj, protocol, None) is not None #### Private protocol ##################################################### #: All registered adaptation offers. #: Keys are the type name of the offer's from_protocol; values are a #: list of adaptation offers. _adaptation_offers = Dict(Str, List) def _adapt(self, adaptee, to_protocol): """ Returns an adapter that adapts an object to the target class. Returns None if no such adapter exists. """ # The algorithm for finding a sequence of adapters adapting 'adaptee' # to 'to_protocol' is based on a weighted graph. # Nodes on the graphs are protocols (types or interfaces). # Edges are adaptation offers that connect a offer.from_protocol to a # offer.to_protocol. # Edges connect protocol A to protocol B and are weighted by two # numbers in this priority: # 1) a unit weight (1) representing the fact that we use 1 adaptation # offer to go from A to B # 2) the number of steps up the type hierarchy that we need to take # to go from A to offer.from_protocol, so that more specific # adapters are always preferred # The algorithm finds the shortest weighted path between 'adaptee' # and 'to_protocol'. Once a candidate path is found, it tries to # create the adapters using the factories in the adaptation offers # that compose the path. If this fails because of conditional # adaptation (i.e., an adapter factory returns None), the path # is discarded and the algorithm looks for the next shortest path. # Cycles in adaptation are avoided by only considering path were # every adaptation offer is used at most once. # The implementation of the algorithm is based on a priority queue, # 'offer_queue'. # # Each value in the queue has got two parts, # one is the adaptation path, i.e., the sequence of adaptation offers # followed so far; the second value is the protocol of the last # visited node. # # The priority in the queue is the sum of all the weights for the # edges traversed in the path. # Unique sequence counter to make the priority list stable # w.r.t the sequence of insertion. counter = itertools.count() # The priority queue containing entries of the form # (cumulative weight, path, current protocol) describing an # adaptation path starting at `adaptee`, following a sequence # of adaptation offers, `path`, and having weight `cumulative_weight`. # # 'cumulative weight' is a tuple of the form # (number of traversed adapters, # number of steps up protocol hierarchies, # counter) # # The counter is an increasing number, and is used to make the # priority queue stable w.r.t insertion time # (see http://bit.ly/13VxILn). offer_queue = [((0, 0, next(counter)), [], type(adaptee))] while len(offer_queue) > 0: # Get the most specific candidate path for adaptation. weight, path, current_protocol = heappop(offer_queue) edges = self._get_applicable_offers(current_protocol, path) # Sort by weight first, then by from_protocol type. if sys.version_info[0] < 3: edges.sort(cmp=_by_weight_then_from_protocol_specificity) else: # functools.cmp_to_key is available from 2.7 and 3.2 edges.sort(key=functools.cmp_to_key(_by_weight_then_from_protocol_specificity)) # At this point, the first edges are the shortest ones. Within # edges with the same distance, interfaces which are subclasses # of other interfaces in that group come first. The rest of # the order is unspecified. for mro_distance, offer in edges: new_path = path + [offer] # Check if we arrived at the target protocol. if self.provides_protocol(offer.to_protocol, to_protocol): # Walk path and create adapters adapter = adaptee for offer in new_path: adapter = offer.factory(adapter) if adapter is None: # This adaptation attempt failed (e.g. because of # conditional adaptation). # Discard this path and continue. break else: # We're done! return adapter else: # Push the new path on the priority queue. adapter_weight, mro_weight, _ = weight new_weight = (adapter_weight + 1, mro_weight + mro_distance, next(counter)) heappush( offer_queue, (new_weight, new_path, offer.to_protocol) ) return None def _get_applicable_offers(self, current_protocol, path): """ Find all adaptation offers that can be applied to a protocol. Return all the applicable offers together with the number of steps up the MRO hierarchy that need to be taken from the protocol to the offer's from_protocol. The returned object is a list of tuples (mro_distance, offer) . In terms of our graph algorithm, we're looking for all outgoing edges from the current node. """ edges = [] for from_protocol_name, offers in self._adaptation_offers.items(): from_protocol = offers[0].from_protocol mro_distance = self.mro_distance_to_protocol( current_protocol, from_protocol ) if mro_distance is not None: for offer in offers: # Avoid cycles by checking that we did not consider this # offer in this path. if offer not in path: edges.append((mro_distance, offer)) return edges def _by_weight_then_from_protocol_specificity(edge_1, edge_2): """ Comparison function for graph edges. Each edge is of the form (mro distance, adaptation offer). Comparison is done by mro distance first, and by offer's from_protocol issubclass next. If two edges have the same mro distance, and the from_protocols of the two edges are not subclasses of one another, they are considered "equal". """ # edge_1 and edge_2 are edges, of the form (mro_distance, offer) mro_distance_1, offer_1 = edge_1 mro_distance_2, offer_2 = edge_2 # First, compare the MRO distance. if mro_distance_1 < mro_distance_2: return -1 elif mro_distance_1 > mro_distance_2: return 1 # The distance is equal, prefer more specific 'from_protocol's if offer_1.from_protocol is offer_2.from_protocol: return 0 if issubclass(offer_1.from_protocol, offer_2.from_protocol): return -1 elif issubclass(offer_2.from_protocol, offer_1.from_protocol): return 1 return 0 # The default global adaptation manager. # PROVIDED FOR BACKWARD COMPATIBILITY ONLY, IT SHOULD NEVER BE USED DIRECTLY. # If you must use a global adaptation manager, use the functions # `get_global_adaptation_manager`, `reset_global_adaptation_manager`, # `set_global_adaptation_manager`. adaptation_manager = AdaptationManager() def set_global_adaptation_manager(new_adaptation_manager): """ Set the global adaptation manager to the given instance. """ global adaptation_manager adaptation_manager = new_adaptation_manager def reset_global_adaptation_manager(): """ Set the global adaptation manager to a new AdaptationManager instance. """ global adaptation_manager adaptation_manager = AdaptationManager() def get_global_adaptation_manager(): """ Set a reference to the global adaptation manager. """ global adaptation_manager return adaptation_manager # Convenience references to methods on the default adaptation manager. # # If you add a public method to the adaptation manager protocol then don't # forget to add a convenience function here! def adapt(adaptee, to_protocol, default=AdaptationError): """ Attempt to adapt an object to a given protocol. """ manager = get_global_adaptation_manager() return manager.adapt(adaptee, to_protocol, default) def register_factory(factory, from_protocol, to_protocol): """ Register an adapter factory. """ manager = get_global_adaptation_manager() return manager.register_factory(factory, from_protocol, to_protocol) def register_offer(offer): """ Register an offer to adapt from one protocol to another. """ manager = get_global_adaptation_manager() return manager.register_offer(offer) def register_provides(provider_protocol, protocol): """ Register that a protocol provides another. """ manager = get_global_adaptation_manager() return manager.register_provides(provider_protocol, protocol) def supports_protocol(obj, protocol): """ Does the object support a given protocol? """ manager = get_global_adaptation_manager() return manager.supports_protocol(obj, protocol) def provides_protocol(type_, protocol): """ Does the given type provide (i.e implement) a given protocol? """ return AdaptationManager.provides_protocol(type_, protocol) #### EOF ###################################################################### traits-4.5.0/traits/adaptation/adaptation_offer.py000066400000000000000000000124731233213561600223500ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. #------------------------------------------------------------------------------ """ An offer to provide adapters from one protocol to another. """ from traits.api import Any, Bool, HasTraits, Property from traits.util.api import import_symbol class AdaptationOffer(HasTraits): """ An offer to provide adapters from one protocol to another. An adaptation offer consists of a factory that can create adapters, and the protocols that define what the adapters adapt from and to. """ #### 'object' protocol #################################################### def __repr__(self): """ Return a string representation of the object. """ template = " '{to}'>" from_ = self.from_protocol_name to = self.to_protocol_name return template.format(from_=from_, to=to) #### 'AdaptationOffer' protocol ########################################### #: A factory for creating adapters. #: #: The factory must ba callable that takes exactly one argument which is #: the object to be adapted (known as the adaptee), and returns an #: adapter from the `from_protocol` to the `to_protocol`. #: #: The factory can be specified as either a callable, or a string in the #: form 'foo.bar.baz' which is turned into an import statement #: 'from foo.bar import baz' and imported when the trait is first accessed. factory = Property(Any) #: Adapters created by the factory adapt *from* this protocol. #: #: The protocol can be specified as a protocol (class/Interface), or a #: string in the form 'foo.bar.baz' which is turned into an import #: statement 'from foo.bar import baz' and imported when the trait is #: accessed. from_protocol = Property(Any) from_protocol_name = Property(Any) def _get_from_protocol_name(self): return self._get_type_name(self._from_protocol) #: Adapters created by the factory adapt *to* this protocol. #: #: The protocol can be specified as a protocol (class/Interface), or a #: string in the form 'foo.bar.baz' which is turned into an import #: statement 'from foo.bar import baz' and imported when the trait is #: accessed. to_protocol = Property(Any) to_protocol_name = Property(Any) def _get_to_protocol_name(self): return self._get_type_name(self._to_protocol) #### Private protocol ###################################################### #: Shadow trait for the corresponding property. _factory = Any _factory_loaded = Bool(False) def _get_factory(self): """ Trait property getter. """ if not self._factory_loaded: if isinstance(self._factory, basestring): self._factory = import_symbol(self._factory) self._factory_loaded = True return self._factory def _set_factory(self, factory): """ Trait property setter. """ self._factory = factory return #: Shadow trait for the corresponding property. _from_protocol = Any _from_protocol_loaded = Bool(False) def _get_from_protocol(self): """ Trait property getter. """ if not self._from_protocol_loaded: if isinstance(self._from_protocol, basestring): self._from_protocol = import_symbol(self._from_protocol) self._from_protocol_loaded = True return self._from_protocol def _set_from_protocol(self, from_protocol): """ Trait property setter. """ self._from_protocol = from_protocol return #: Shadow trait for the corresponding property. _to_protocol = Any _to_protocol_loaded = Bool(False) def _get_to_protocol(self): """ Trait property getter. """ if not self._to_protocol_loaded: if isinstance(self._to_protocol, basestring): self._to_protocol = import_symbol(self._to_protocol) self._to_protocol_loaded = True return self._to_protocol def _set_to_protocol(self, to_protocol): """ Trait property setter. """ self._to_protocol = to_protocol return def _get_type_name(self, type_or_type_name): """ Returns the full dotted path for a type. For example: from traits.api import HasTraits _get_type_name(HasTraits) == 'traits.has_traits.HasTraits' If the type is given as a string (e.g., for lazy loading), it is just returned. """ if isinstance(type_or_type_name, basestring): type_name = type_or_type_name else: type_name = "{module}.{name}".format( module = type_or_type_name.__module__, name = type_or_type_name.__name__ ) return type_name #### EOF ###################################################################### traits-4.5.0/traits/adaptation/adapter.py000066400000000000000000000121471233213561600204610ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. #------------------------------------------------------------------------------ """ Base classes for adapters. Adapters do not have to inherit from these classes, as long as their constructor takes the object to be adapted as the first and only *positional* argument. """ from traits.has_traits import HasTraits from traits.trait_types import Any from traits.util.deprecated import deprecated class PurePythonAdapter(object): """ Base class for pure Python adapters. """ def __init__(self, adaptee): """ Constructor. """ self.adaptee = adaptee return class Adapter(HasTraits): """ Base class for adapters with traits. """ def __init__(self, adaptee, **traits): """ Constructor. """ traits['adaptee'] = adaptee super(Adapter, self).__init__(**traits) return adaptee = Any def adapts(from_, to, extra=None, factory=None, cached=False, when=''): """ A class advisor for declaring adapters. Parameters ---------- from_ : type or interface What the adapter adapts *from*, or a list of such types or interfaces (the '_' suffix is used because 'from' is a Python keyword). to : type or interface What the adapter adapts *to*, or a list of such types or interfaces. factory : callable An (optional) factory for actually creating the adapters. This is any callable that takes a single argument which is the object to be adapted. The factory should return an adapter if it can perform the adaptation and **None** if it cannot. cached : bool Should the adapters be cached? If an adapter is cached, then the factory will produce at most one adapter per instance. when : str A Python expression that selects which instances of a particular type can be adapted by this factory. The expression is evaluated in a namespace that contains a single name *adaptee*, which is bound to the object to be adapted (e.g., 'adaptee.is_folder'). Note ---- The ``cached`` and ``when`` arguments are ignored if ``factory`` is specified. """ from traits.adaptation.api import register_factory from traits.adaptation.cached_adapter_factory import CachedAdapterFactory from traits.protocols.advice import addClassAdvisor if extra is not None: adapter, from_, to = from_, to, extra else: adapter = None @deprecated("use the 'register_factory' function from 'traits.api' instead") def callback(klass): """ Called when the class has been created. """ # At this point:- # # klass is the callable (usually a class) that takes one argument (the # adaptee) and returns an appropriate adapter (or None if the adaptation # is not possible). # What the adapters created by the factory will adapt from. if type(from_) is not list: from_protocols = [from_] else: from_protocols = from_ # What the adapters created by the factory will adapt to. if type(to) is not list: to_protocols = [to] else: to_protocols = to if factory is None: # If the adapter is cached or has a 'when' expression then create a # default factory: adapter_factory = klass if when != '': def _conditional_factory(adaptee, *args, **kw): namespace = {'adaptee': adaptee} if eval(when, namespace, namespace): return klass(adaptee, *args, **kw) return None adapter_factory = _conditional_factory if cached: adapter_factory = CachedAdapterFactory(factory=adapter_factory) else: adapter_factory = factory for from_protocol in from_protocols: for to_protocol in to_protocols: register_factory(adapter_factory, from_protocol, to_protocol) for to_protocol in to_protocols: # We cannot register adapter factories that are functions. (This is # ony relevant when using 'adapts' as a function. if isinstance(klass, type): # We use type(to_protocol) in case the to_protocols implements # its own 'register' method which overrides the ABC method. type(to_protocol).register(to_protocol, klass) return klass if adapter is not None: callback(adapter) else: addClassAdvisor(callback) #### EOF ###################################################################### traits-4.5.0/traits/adaptation/api.py000066400000000000000000000006341233213561600176100ustar00rootroot00000000000000from .adapter import Adapter, adapts, PurePythonAdapter from .adaptation_error import AdaptationError from .adaptation_manager import adapt, AdaptationManager, \ get_global_adaptation_manager, provides_protocol, register_factory, \ register_offer, register_provides, reset_global_adaptation_manager, \ set_global_adaptation_manager, supports_protocol from .adaptation_offer import AdaptationOffer traits-4.5.0/traits/adaptation/cached_adapter_factory.py000066400000000000000000000063231233213561600234760ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. #------------------------------------------------------------------------------ """ An adapter factory that caches adapters per instance. """ import weakref from traits.api import Any, Bool, HasTraits, Property from traits.util.api import import_symbol class CachedAdapterFactory(HasTraits): """ An adapter factory that caches adapters per instance. We provide this class to provide the caching functionality of the old traits 'adapts' implementation. However, note that the cache will not be cleared unless you take care of cleaning the 'adaptee' trait once your adapter are deleted. This class will be removed when the 'adapts' function is removed. """ #### 'object' protocol ##################################################### def __call__(self, adaptee): """ The adapter manager uses callables for adapter factories. """ adapter = self._adapter_cache.get(adaptee, None) if adapter is None: adapter = self.factory(adaptee) self._adapter_cache[adaptee] = adapter return adapter #### 'CachedAdapterFactory' protocol ####################################### #: A callable that actually creates the adapters! #: #: The factory must ba callable that takes exactly one argument which is #: the object to be adapted (known as the adaptee), and returns an #: adapter from the `from_protocol` to the `to_protocol`. #: #: The factory can be specified as either a callable, or a string in the #: form 'foo.bar.baz' which is turned into an import statement #: 'from foo.bar import baz' and imported when the trait is first accessed. factory = Property(Any) #: True if the cache is empty, otherwise False. #: #: This method is mostly here to help testing - the framework does not #: rely on it for any other purpose. is_empty = Property(Bool) def _get_is_empty(self): return len(self._adapter_cache) == 0 #### Private protocol ###################################################### _adapter_cache = Any def __adapter_cache_default(self): return weakref.WeakKeyDictionary() #: Shadow trait for the corresponding property. _factory = Any _factory_loaded = Bool(False) def _get_factory(self): """ Trait property getter. """ if not self._factory_loaded: if isinstance(self._factory, basestring): self._factory = import_symbol(self._factory) self._factory_loaded = True return self._factory def _set_factory(self, factory): """ Trait property setter. """ self._factory = factory return #### EOF ####################################################################### traits-4.5.0/traits/adaptation/tests/000077500000000000000000000000001233213561600176245ustar00rootroot00000000000000traits-4.5.0/traits/adaptation/tests/__init__.py000066400000000000000000000000001233213561600217230ustar00rootroot00000000000000traits-4.5.0/traits/adaptation/tests/abc_examples.py000066400000000000000000000076671233213561600226410ustar00rootroot00000000000000""" Test data for testing the protocol manager with ABCs. """ from abc import ABCMeta from traits.adaptation.api import PurePythonAdapter as Adapter #### 'Power plugs' metaphor ################################################### #### Protocols ################################################################ class UKStandard(object): __metaclass__ = ABCMeta class EUStandard(object): __metaclass__ = ABCMeta class JapanStandard(object): __metaclass__ = ABCMeta class IraqStandard(object): __metaclass__ = ABCMeta #### Implementations ########################################################## class UKPlug(object): pass UKStandard.register(UKPlug) class EUPlug(object): pass EUStandard.register(EUPlug) class JapanPlug(object): pass JapanStandard.register(JapanPlug) class IraqPlug(object): pass IraqStandard.register(IraqPlug) class TravelPlug(object): def __init__(self, mode): self.mode = mode #### Adapters ################################################################# # UK->EU class UKStandardToEUStandard(Adapter): pass EUStandard.register(UKStandardToEUStandard) # EU->Japan class EUStandardToJapanStandard(Adapter): pass JapanStandard.register(EUStandardToJapanStandard) # Japan->Iraq class JapanStandardToIraqStandard(Adapter): pass IraqStandard.register(JapanStandardToIraqStandard) # EU->Iraq class EUStandardToIraqStandard(Adapter): pass IraqStandard.register(EUStandardToIraqStandard) # UK->Japan class UKStandardToJapanStandard(Adapter): pass JapanStandard.register(UKStandardToJapanStandard) # Travel->Japan class TravelPlugToJapanStandard(Adapter): pass JapanStandard.register(TravelPlugToJapanStandard) # Travel->EU class TravelPlugToEUStandard(Adapter): pass EUStandard.register(TravelPlugToEUStandard) #### 'Editor, Scriptable, Undoable' metaphor ################################## class FileType(object): pass class IEditor(object): __metaclass__ = ABCMeta class IScriptable(object): __metaclass__ = ABCMeta class IUndoable(object): __metaclass__ = ABCMeta class FileTypeToIEditor(Adapter): pass IEditor.register(FileTypeToIEditor) IScriptable.register(FileTypeToIEditor) class IScriptableToIUndoable(Adapter): pass IUndoable.register(IScriptableToIUndoable) #### Hierarchy example ######################################################## class IPrintable(object): __metaclass__ = ABCMeta class Editor(object): pass class TextEditor(Editor): pass class EditorToIPrintable(Adapter): pass IPrintable.register(EditorToIPrintable) class TextEditorToIPrintable(Adapter): pass IPrintable.register(TextEditorToIPrintable) #### Interface hierarchy example ############################################## class IPrimate(object): __metaclass__ = ABCMeta class IHuman(IPrimate): pass class IChild(IHuman): pass class IIntermediate(object): __metaclass__ = ABCMeta class ITarget(object): __metaclass__ = ABCMeta class Source(object): pass IChild.register(Source) class IChildToIIntermediate(Adapter): pass IIntermediate.register(IChildToIIntermediate) class IHumanToIIntermediate(Adapter): pass IIntermediate.register(IHumanToIIntermediate) class IPrimateToIIntermediate(Adapter): pass IIntermediate.register(IPrimateToIIntermediate) class IIntermediateToITarget(Adapter): pass ITarget.register(IIntermediateToITarget) #### Non-trivial chaining example ############################################# class IStart(object): __metaclass__ = ABCMeta class IGeneric(object): __metaclass__ = ABCMeta class ISpecific(IGeneric): pass class IEnd(object): __metaclass__ = ABCMeta class Start(object): pass IStart.register(Start) class IStartToISpecific(Adapter): pass ISpecific.register(IStartToISpecific) class IGenericToIEnd(Adapter): pass IEnd.register(IGenericToIEnd) #### EOF ###################################################################### traits-4.5.0/traits/adaptation/tests/benchmark.py000066400000000000000000000074351233213561600221410ustar00rootroot00000000000000""" Simple benchmarking of the adaptation manager. This is not 'enforced' by any tests (i.e. we currently aren't bound to satisfy any performance criteria - but in the future we might be ;^). """ import abc from pprint import pprint import time from traits.adaptation.adaptation_manager import AdaptationManager from traits.api import Adapter, HasTraits, Interface, provides N_SOURCES = 3 N_ITERATIONS = 100 N_PROTOCOLS = 50 # Create some classes to adapt. create_classes_to_adapt = """ class IFoo{i}(Interface): pass @provides(IFoo{i}) class Foo{i}(HasTraits): pass """ for i in range(N_SOURCES): exec create_classes_to_adapt.format(i=i) # The object that we will try to adapt! foo = Foo1() # Create a lot of other interfaces that we will adapt to. for i in range(N_PROTOCOLS): exec 'class I{i}(Interface): pass'.format(i=i) create_traits_adapter_class = """ @provides(I{target}) class IFoo{source}ToI{target}(Adapter): pass """ # Create adapters from each 'IFooX' to all of the interfaces. for source in range(N_SOURCES): for target in range(N_PROTOCOLS): exec create_traits_adapter_class.format(source=source, target=target) #### traits.adaptation with Interfaces ######################################## adaptation_manager = AdaptationManager() register_ifoox_to_ix = """ adaptation_manager.register_factory( factory = IFoo{source}ToI{target}, from_protocol = IFoo{source}, to_protocol = I{target} ) """ # We register the adapters in reversed order, so that looking for the one # with index 0 will need traversing the whole list. # I.e., we're considering the worst case scenario. for source in range(N_SOURCES): for target in reversed(range(N_PROTOCOLS)): exec register_ifoox_to_ix.format(source=source, target=target) start_time = time.time() for _ in range(N_ITERATIONS): adaptation_manager.adapt(foo, I0) time_per_iter = (time.time() - start_time) / float(N_ITERATIONS) * 1000.0 print 'apptools using Interfaces: %.3f msec per iteration' % time_per_iter #### traits.adaptation with ABCs ############################################## # Create some classes to adapt (using ABCs!). for i in range(N_SOURCES): exec 'class FooABC{i}(object): __metaclass__ = abc.ABCMeta'.format(i=i) exec 'class Foo{i}(object): pass'.format(i=i) exec 'FooABC{i}.register(Foo{i})'.format(i=i) # The object that we will try to adapt! foo = Foo0() # Create a lot of other ABCs! for i in range(N_PROTOCOLS): exec 'class ABC{i}(object): __metaclass__ = abc.ABCMeta'.format(i=i) # Create adapters from 'FooABC' to all of the ABCs. create_abc_adapter_class = """ class FooABC{source}ToABC{target}(object): def __init__(self, adaptee): pass ABC{target}.register(FooABC{source}ToABC{target}) """ for source in range(N_SOURCES): for target in range(N_PROTOCOLS): exec create_abc_adapter_class.format(source=source, target=target) # Register all of the adapters. adaptation_manager = AdaptationManager() register_fooxabc_to_abcx = """ adaptation_manager.register_factory( factory = FooABC{source}ToABC{target}, from_protocol = FooABC{source}, to_protocol = ABC{target} ) """ # We register the adapters in reversed order, so that looking for the one # with index 0 will need traversing the whole list. # I.e., we're considering the worst case scenario. for source in range(N_SOURCES): for target in reversed(range(N_PROTOCOLS)): exec register_fooxabc_to_abcx.format(source=source, target=target) start_time = time.time() for _ in range(N_ITERATIONS): adaptation_manager.adapt(foo, ABC0) time_per_iter = (time.time() - start_time) / float(N_ITERATIONS) * 1000.0 print 'apptools using ABCs: %.3f msec per iteration' % time_per_iter #### EOF ####################################################################### traits-4.5.0/traits/adaptation/tests/interface_examples.py000066400000000000000000000062611233213561600240410ustar00rootroot00000000000000""" Test data for testing the protocol manager with interfaces. """ from traits.api import Adapter, Enum, HasTraits, Interface, provides #### 'Power plugs' metaphor ################################################### #### Protocols ################################################################ class UKStandard(Interface): pass class EUStandard(Interface): pass class JapanStandard(Interface): pass class IraqStandard(Interface): pass #### Implementations ########################################################## @provides(UKStandard) class UKPlug(HasTraits): pass @provides(EUStandard) class EUPlug(HasTraits): pass @provides(JapanStandard) class JapanPlug(HasTraits): pass @provides(IraqStandard) class IraqPlug(HasTraits): pass class TravelPlug(HasTraits): mode = Enum(['Europe', 'Asia']) #### Adapters ################################################################# @provides(EUStandard) class UKStandardToEUStandard(Adapter): pass @provides(JapanStandard) class EUStandardToJapanStandard(Adapter): pass @provides(IraqStandard) class JapanStandardToIraqStandard(Adapter): pass @provides(IraqStandard) class EUStandardToIraqStandard(Adapter): pass @provides(JapanStandard) class UKStandardToJapanStandard(Adapter): pass @provides(JapanStandard) class TravelPlugToJapanStandard(Adapter): pass @provides(EUStandard) class TravelPlugToEUStandard(Adapter): pass #### 'Editor, Scriptable, Undoable' metaphor ################################## class FileType(HasTraits): pass class IEditor(Interface): pass class IScriptable(Interface): pass class IUndoable(Interface): pass @provides(IEditor, IScriptable) class FileTypeToIEditor(Adapter): pass @provides(IUndoable) class IScriptableToIUndoable(Adapter): pass #### Hierarchy example ######################################################## class IPrintable(Interface): pass class Editor(HasTraits): pass class TextEditor(Editor): pass @provides(IPrintable) class EditorToIPrintable(Adapter): pass @provides(IPrintable) class TextEditorToIPrintable(Adapter): pass #### Interface hierarchy example ############################################## class IPrimate(Interface): pass class IHuman(IPrimate): pass class IChild(IHuman): pass class IIntermediate(Interface): pass class ITarget(Interface): pass @provides(IChild) class Source(HasTraits): pass @provides(IIntermediate) class IChildToIIntermediate(Adapter): pass @provides(IIntermediate) class IHumanToIIntermediate(Adapter): pass @provides(IIntermediate) class IPrimateToIIntermediate(Adapter): pass @provides(ITarget) class IIntermediateToITarget(Adapter): pass #### Non-trivial chaining example ############################################# class IStart(Interface): pass class IGeneric(Interface): pass class ISpecific(IGeneric): pass class IEnd(Interface): pass @provides(IStart) class Start(HasTraits): pass @provides(ISpecific) class IStartToISpecific(Adapter): pass @provides(IEnd) class IGenericToIEnd(Adapter): pass #### EOF ###################################################################### traits-4.5.0/traits/adaptation/tests/lazy_examples.py000066400000000000000000000004451233213561600230560ustar00rootroot00000000000000""" Examples for lazy adapter factories. This module should be only imported when the adaptation takes place. """ class IBar(object): pass class IBarToIFoo(object): pass class IFoo(object): pass #### EOF ###################################################################### traits-4.5.0/traits/adaptation/tests/test_adaptation_manager.py000066400000000000000000000432141233213561600250570ustar00rootroot00000000000000""" Test the adaptation manager. """ import sys from traits.adaptation.api import AdaptationManager, adapt import traits.adaptation.tests.abc_examples import traits.adaptation.tests.interface_examples from traits.testing.unittest_tools import unittest class TestAdaptationManagerWithABC(unittest.TestCase): """ Test the adaptation manager. """ #: Class attribute pointing at the module containing the example data examples = traits.adaptation.tests.abc_examples #### 'TestCase' protocol ################################################## def setUp(self): """ Prepares the test fixture before each test method is called. """ self.adaptation_manager = AdaptationManager() return def tearDown(self): """ Called immediately after each test method has been called. """ return #### Tests ################################################################ def test_no_adapter_required(self): ex = self.examples plug = ex.UKPlug() # Try to adapt it to its own concrete type. uk_plug = self.adaptation_manager.adapt(plug, ex.UKPlug) # The adaptation manager should simply return the same object. self.assertIs(uk_plug, plug) # Try to adapt it to an ABC that is registered for its type. uk_plug = self.adaptation_manager.adapt(plug, ex.UKStandard) # The adaptation manager should simply return the same object. self.assertIs(uk_plug, plug) return def test_no_adapter_available(self): ex = self.examples plug = ex.UKPlug() # Try to adapt it to a concrete type. eu_plug = self.adaptation_manager.adapt(plug, ex.EUPlug, None) # There should be no way to adapt a UKPlug to a EUPlug. self.assertEqual(eu_plug, None) # Try to adapt it to an ABC. eu_plug = self.adaptation_manager.adapt(plug, ex.EUStandard, None) # There should be no way to adapt a UKPlug to a EUPlug. self.assertEqual(eu_plug, None) return def test_one_step_adaptation(self): ex = self.examples # UKStandard->EUStandard. self.adaptation_manager.register_factory( factory = ex.UKStandardToEUStandard, from_protocol = ex.UKStandard, to_protocol = ex.EUStandard ) plug = ex.UKPlug() # Adapt it to an ABC. eu_plug = self.adaptation_manager.adapt(plug, ex.EUStandard) self.assertIsNotNone(eu_plug) self.assertIsInstance(eu_plug, ex.UKStandardToEUStandard) # We shouldn't be able to adapt it to a *concrete* 'EUPlug' though. eu_plug = self.adaptation_manager.adapt(plug, ex.EUPlug, None) self.assertIsNone(eu_plug) return def test_adapter_chaining(self): ex = self.examples # UKStandard->EUStandard. self.adaptation_manager.register_factory( factory = ex.UKStandardToEUStandard, from_protocol = ex.UKStandard, to_protocol = ex.EUStandard ) # EUStandard->JapanStandard. self.adaptation_manager.register_factory( factory = ex.EUStandardToJapanStandard, from_protocol = ex.EUStandard, to_protocol = ex.JapanStandard ) # Create a UKPlug. uk_plug = ex.UKPlug() # Adapt it to a JapanStandard via the chain. japan_plug = self.adaptation_manager.adapt(uk_plug, ex.JapanStandard) self.assertIsNotNone(japan_plug) self.assertIsInstance(japan_plug, ex.EUStandardToJapanStandard) self.assertIs(japan_plug.adaptee.adaptee, uk_plug) return def test_multiple_paths_unambiguous(self): ex = self.examples # UKStandard->EUStandard. self.adaptation_manager.register_factory( factory = ex.UKStandardToEUStandard, from_protocol = ex.UKStandard, to_protocol = ex.EUStandard ) # EUStandard->JapanStandard. self.adaptation_manager.register_factory( factory = ex.EUStandardToJapanStandard, from_protocol = ex.EUStandard, to_protocol = ex.JapanStandard ) # JapanStandard->IraqStandard. self.adaptation_manager.register_factory( factory = ex.JapanStandardToIraqStandard, from_protocol = ex.JapanStandard, to_protocol = ex.IraqStandard ) # EUStandard->IraqStandard. self.adaptation_manager.register_factory( factory = ex.EUStandardToIraqStandard, from_protocol = ex.EUStandard, to_protocol = ex.IraqStandard ) # Create a UKPlug. uk_plug = ex.UKPlug() # Adapt it to a IraqStandard via the chain. iraq_plug = self.adaptation_manager.adapt(uk_plug, ex.IraqStandard) self.assertIsNotNone(iraq_plug) self.assertIsInstance(iraq_plug, ex.EUStandardToIraqStandard) self.assertIs(iraq_plug.adaptee.adaptee, uk_plug) return def test_multiple_paths_ambiguous(self): ex = self.examples # UKStandard->EUStandard. self.adaptation_manager.register_factory( factory = ex.UKStandardToEUStandard, from_protocol = ex.UKStandard, to_protocol = ex.EUStandard ) # UKStandard->JapanStandard. self.adaptation_manager.register_factory( factory = ex.UKStandardToJapanStandard, from_protocol = ex.UKStandard, to_protocol = ex.JapanStandard ) # JapanStandard->IraqStandard. self.adaptation_manager.register_factory( factory = ex.JapanStandardToIraqStandard, from_protocol = ex.JapanStandard, to_protocol = ex.IraqStandard ) # EUStandard->IraqStandard. self.adaptation_manager.register_factory( factory = ex.EUStandardToIraqStandard, from_protocol = ex.EUStandard, to_protocol = ex.IraqStandard ) # Create a UKPlug. uk_plug = ex.UKPlug() # Adapt it to a IraqStandard via the chain. iraq_plug = self.adaptation_manager.adapt(uk_plug, ex.IraqStandard) self.assertIsNotNone(iraq_plug) self.assertIn( type(iraq_plug), [ex.EUStandardToIraqStandard, ex.JapanStandardToIraqStandard] ) self.assertIs(iraq_plug.adaptee.adaptee, uk_plug) return def test_conditional_adaptation(self): ex = self.examples # TravelPlug->EUStandard. def travel_plug_to_eu_standard(adaptee): if adaptee.mode == 'Europe': return ex.TravelPlugToEUStandard(adaptee=adaptee) else: return None self.adaptation_manager.register_factory( factory = travel_plug_to_eu_standard, from_protocol = ex.TravelPlug, to_protocol = ex.EUStandard ) # Create a TravelPlug. travel_plug = ex.TravelPlug(mode='Europe') # Adapt it to a EUStandard. eu_plug = self.adaptation_manager.adapt(travel_plug, ex.EUStandard) self.assertIsNotNone(eu_plug) self.assertIsInstance(eu_plug, ex.TravelPlugToEUStandard) # Create a TravelPlug. travel_plug = ex.TravelPlug(mode='Asia') # Adapt it to a EUStandard. eu_plug = self.adaptation_manager.adapt(travel_plug, ex.EUStandard, None) self.assertIsNone(eu_plug) return def test_spillover_adaptation_behavior(self): ex = self.examples # FileType->IEditor. self.adaptation_manager.register_factory( factory = ex.FileTypeToIEditor, from_protocol = ex.FileType, to_protocol = ex.IEditor ) # Meanwhile, in a plugin far, far away ... # IScriptable->IPrintable. self.adaptation_manager.register_factory( factory = ex.IScriptableToIUndoable, from_protocol = ex.IScriptable, to_protocol = ex.IUndoable ) # Create a file type. file_type = ex.FileType() # Try to adapt to IPrintable: since we did not define an adapter # chain that goes from FileType to IPrintable, this should fail. printable = self.adaptation_manager.adapt(file_type, ex.IUndoable, None) self.assertIsNone(printable) return def test_adaptation_prefers_subclasses(self): ex = self.examples # TextEditor->IPrintable. self.adaptation_manager.register_factory( factory = ex.TextEditorToIPrintable, from_protocol = ex.TextEditor, to_protocol = ex.IPrintable ) # Editor->IPrintable. self.adaptation_manager.register_factory( factory = ex.EditorToIPrintable, from_protocol = ex.Editor, to_protocol = ex.IPrintable ) # Create a text editor. text_editor = ex.TextEditor() # Adapt to IPrintable: we should get the TextEditorToIPrintable # adapter, not the EditorToIPrintable one. printable = self.adaptation_manager.adapt(text_editor, ex.IPrintable) self.assertIsNotNone(printable) self.assertIs(type(printable), ex.TextEditorToIPrintable) return def test_adaptation_prefers_subclasses_other_registration_order(self): # This test is identical to `test_adaptation_prefers_subclasses` # with adapters registered in the opposite order. Both of them # should pass ex = self.examples # Editor->IPrintable. self.adaptation_manager.register_factory( factory = ex.EditorToIPrintable, from_protocol = ex.Editor, to_protocol = ex.IPrintable ) # TextEditor->IPrintable. self.adaptation_manager.register_factory( factory = ex.TextEditorToIPrintable, from_protocol = ex.TextEditor, to_protocol = ex.IPrintable ) # Create a text editor. text_editor = ex.TextEditor() # Adapt to IPrintable: we should get the TextEditorToIPrintable # adapter, not the EditorToIPrintable one. printable = self.adaptation_manager.adapt(text_editor, ex.IPrintable) self.assertIsNotNone(printable) self.assertIs(type(printable), ex.TextEditorToIPrintable) return def test_circular_adaptation(self): # Circles in the adaptation graph should not lead to infinite loops # when it is impossible to reach the target. class Foo(object): pass class Bar(object): pass # object->Foo self.adaptation_manager.register_factory( factory = lambda adaptee: Foo(), from_protocol = object, to_protocol = Foo ) # Foo->object self.adaptation_manager.register_factory( factory = lambda adaptee: [], from_protocol = Foo, to_protocol = object ) # Create an object. obj = [] # Try to adapt to an unreachable target. bar = self.adaptation_manager.adapt(obj, Bar, None) self.assertIsNone(bar) return def test_default_argument_in_adapt(self): from traits.adaptation.adaptation_manager import AdaptationError # Without a default argument, a failed adaptation raises an error. with self.assertRaises(AdaptationError): self.adaptation_manager.adapt('string', int) # With a default argument, a failed adaptation returns the default. default = 'default' result = self.adaptation_manager.adapt('string', int, default=default) self.assertIs(result, default) return def test_prefer_specific_interfaces(self): ex = self.examples # IIntermediate -> ITarget. self.adaptation_manager.register_factory( factory = ex.IIntermediateToITarget, from_protocol = ex.IIntermediate, to_protocol = ex.ITarget ) # IHuman -> IIntermediate. self.adaptation_manager.register_factory( factory = ex.IHumanToIIntermediate, from_protocol = ex.IHuman, to_protocol = ex.IIntermediate ) # IChild -> IIntermediate. self.adaptation_manager.register_factory( factory = ex.IChildToIIntermediate, from_protocol = ex.IChild, to_protocol = ex.IIntermediate ) # IPrimate -> IIntermediate. self.adaptation_manager.register_factory( factory = ex.IPrimateToIIntermediate, from_protocol = ex.IPrimate, to_protocol = ex.IIntermediate ) # Create a source. source = ex.Source() # Adapt to ITarget: we should get the adapter for the most specific # interface, i.e. IChildToITarget. target = self.adaptation_manager.adapt(source, ex.ITarget) self.assertIsNotNone(target) self.assertIs(type(target.adaptee), ex.IChildToIIntermediate) return def test_chaining_with_intermediate_mro_climbing(self): ex = self.examples # IStart -> ISpecific. self.adaptation_manager.register_factory( factory = ex.IStartToISpecific, from_protocol = ex.IStart, to_protocol = ex.ISpecific ) # IGeneric -> IEnd. self.adaptation_manager.register_factory( factory = ex.IGenericToIEnd, from_protocol = ex.IGeneric, to_protocol = ex.IEnd ) # Create a start. start = ex.Start() # Adapt to IEnd; this should succeed going from IStart to ISpecific, # climbing up the MRO to IGeneric, then crossing to IEnd. end = self.adaptation_manager.adapt(start, ex.IEnd) self.assertIsNotNone(end) self.assertIs(type(end), ex.IGenericToIEnd) return def test_conditional_recycling(self): # Test that an offer that has been considered but failed if considered # again at a later time, when it might succeed because of conditional # adaptation. # C -- A -fails- B # C -- D -- A -succeeds- B class A(object): def __init__(self, allow_adaptation): self.allow_adaptation = allow_adaptation class B(object): pass class C(object): pass class D(object): pass self.adaptation_manager.register_factory( factory=lambda adaptee: A(False), from_protocol=C, to_protocol=A ) self.adaptation_manager.register_factory( factory=lambda adaptee: A(True), from_protocol=D, to_protocol=A ) self.adaptation_manager.register_factory( factory=lambda adaptee: D(), from_protocol=C, to_protocol=D ) # Conditional adapter def a_to_b_adapter(adaptee): if adaptee.allow_adaptation: b = B() b.marker = True else: b = None return b self.adaptation_manager.register_factory( factory=a_to_b_adapter, from_protocol=A, to_protocol=B ) # Create a A c = C() # Adaptation to B should succeed through D b = self.adaptation_manager.adapt(c, B) self.assertIsNotNone(b) self.assertTrue(hasattr(b, 'marker')) return def test_provides_protocol_for_interface_subclass(self): from traits.api import Interface class IA(Interface): pass class IB(IA): pass self.assertTrue(self.adaptation_manager.provides_protocol(IB, IA)) return def test_register_provides(self): from traits.api import Interface class IFoo(Interface): pass obj = {} self.assertEqual(None, self.adaptation_manager.adapt(obj, IFoo, None)) self.adaptation_manager.register_provides(dict, IFoo) self.assertEqual(obj, self.adaptation_manager.adapt(obj, IFoo)) return class TestAdaptationManagerWithInterfaces(TestAdaptationManagerWithABC): """ Test the adaptation manager with Interfaces. """ examples = traits.adaptation.tests.interface_examples def test_adapts_should_register_class_as_providing_the_to_protocol(self): if sys.version_info[0] >= 3: self.skipTest(""" Currently, under Python 3, class advisors do not work anymore. Therefore, this test will fail due to the use of "adapts". """) from traits.api import Adapter, adapts, HasTraits, Instance, \ Int, Interface class IFoo(Interface): x = Int class Bar(HasTraits): foo = Instance(IFoo) class Baz(HasTraits): pass # Warning: because we are trying to test the 'adapts' class advisor, # this will effect the global adaptation manager and hence may # interfere with any other tests that rely on it (all of the tests # in this package use a separate adaptation manager so there should # be no clashes here ;^). # # 'adapts' is also deprecated, so expect a warning message when you # run the tests. class BazToIFooAdapter(Adapter): adapts(Baz, IFoo) baz = Baz() bar = Bar() bar.foo = adapt(baz, IFoo) self.assertEqual(bar.foo.adaptee, baz) return #### EOF ###################################################################### traits-4.5.0/traits/adaptation/tests/test_adaptation_offer.py000066400000000000000000000026001233213561600245400ustar00rootroot00000000000000""" Test the adaptation offers. """ import sys from traits.adaptation.adaptation_offer import AdaptationOffer from traits.testing.unittest_tools import unittest class TestAdaptationOffer(unittest.TestCase): """ Test the adaptation offers. """ def test_lazy_loading(self): LAZY_EXAMPLES = 'traits.adaptation.tests.lazy_examples' if LAZY_EXAMPLES in sys.modules: del sys.modules[LAZY_EXAMPLES] offer = AdaptationOffer( factory =(LAZY_EXAMPLES + '.IBarToIFoo'), from_protocol =(LAZY_EXAMPLES + '.IBar'), to_protocol =(LAZY_EXAMPLES + '.IFoo'), ) self.assertNotIn(LAZY_EXAMPLES, sys.modules) factory = offer.factory self.assertIn(LAZY_EXAMPLES, sys.modules) from traits.adaptation.tests.lazy_examples import IBarToIFoo self.assertIs(factory, IBarToIFoo) del sys.modules[LAZY_EXAMPLES] from_protocol = offer.from_protocol from traits.adaptation.tests.lazy_examples import IBar self.assertIs(from_protocol, IBar) del sys.modules[LAZY_EXAMPLES] to_protocol = offer.to_protocol from traits.adaptation.tests.lazy_examples import IFoo self.assertIs(to_protocol, IFoo) if __name__ == '__main__': unittest.main() #### EOF ###################################################################### traits-4.5.0/traits/adaptation/tests/test_adapter.py000066400000000000000000000027231233213561600226610ustar00rootroot00000000000000""" Test the Adapter class. """ from traits.api import on_trait_change from traits.adaptation.api import Adapter from traits.testing.unittest_tools import unittest class TestAdapter(unittest.TestCase): """ Test the Adapter class. """ #### Tests ################################################################# def test_initializing_adaptee(self): # Regression test: The `adaptee` trait used to be initialized after # all other traits, which caused "post_init" listeners to be # incorrectly triggered. class FooAdapter(Adapter): # True if a trait change notification for `adaptee` is fired. adaptee_notifier_called = False # True if a post-init trait change notification for `adaptee` # is fired. post_init_notifier_called = False @on_trait_change('adaptee', post_init=True) def check_that_adaptee_start_can_be_accessed(self): self.post_init_notifier_called = True @on_trait_change('adaptee') def check_that_adaptee_change_is_notified(self): self.adaptee_notifier_called = True foo_adapter = FooAdapter(adaptee='1234') self.assertEqual(foo_adapter.adaptee_notifier_called, True) self.assertEqual(foo_adapter.post_init_notifier_called, False) if __name__ == '__main__': unittest.main() #### EOF ###################################################################### traits-4.5.0/traits/adaptation/tests/test_cached_adapter_factory.py000066400000000000000000000077001233213561600256770ustar00rootroot00000000000000""" Test the cached adapter factory. """ import sys import traits.adaptation.tests.interface_examples from traits.adaptation.api import AdaptationManager from traits.adaptation.cached_adapter_factory import CachedAdapterFactory from traits.testing.unittest_tools import unittest class TestCachedAdapterFactory(unittest.TestCase): """ Test the cached adapter factory. """ examples = traits.adaptation.tests.interface_examples #### 'TestCase' protocol ################################################## def setUp(self): """ Prepares the test fixture before each test method is called. """ self.adaptation_manager = AdaptationManager() return def tearDown(self): """ Called immediately after each test method has been called. """ return #### Tests ################################################################# def test_cached_adapters(self): ex = self.examples factory = CachedAdapterFactory(factory=ex.EditorToIPrintable) self.adaptation_manager.register_factory( factory = factory, from_protocol = ex.Editor, to_protocol = ex.IPrintable ) editor = ex.Editor() adapter_1 = self.adaptation_manager.adapt(editor, ex.IPrintable) self.assertIsNotNone(adapter_1) self.assertIs(type(adapter_1), ex.EditorToIPrintable) adapter_2 = self.adaptation_manager.adapt(editor, ex.IPrintable) self.assertIsNotNone(adapter_2) self.assertIs(type(adapter_2), ex.EditorToIPrintable) self.assertIs(adapter_1, adapter_2) return @unittest.skip("Cache cleaning is broken") def test_cached_adapters_should_be_cleaned_up(self): ex = self.examples factory = CachedAdapterFactory(factory=ex.EditorToIPrintable) self.adaptation_manager.register_factory( factory = factory, from_protocol = ex.Editor, to_protocol = ex.IPrintable ) editor = ex.Editor() adapter_1 = self.adaptation_manager.adapt(editor, ex.IPrintable) self.assertIsNotNone(adapter_1) self.assertIs(type(adapter_1), ex.EditorToIPrintable) del adapter_1 del editor self.assertTrue(factory.is_empty) return def test_cached_adapters_with_lazy_loaded_factory(self): LAZY_EXAMPLES = 'traits.adaptation.tests.lazy_examples' if LAZY_EXAMPLES in sys.modules: del sys.modules[LAZY_EXAMPLES] factory = CachedAdapterFactory(factory=LAZY_EXAMPLES + '.IBarToIFoo') self.adaptation_manager.register_factory( factory = factory, from_protocol = LAZY_EXAMPLES + '.IBar', to_protocol = LAZY_EXAMPLES + '.IFoo', ) self.assertNotIn(LAZY_EXAMPLES, sys.modules) # The *actual* factory is loaded on-demand. bogus = factory.factory self.assertIn(LAZY_EXAMPLES, sys.modules) return @unittest.skip("Cache cleaning is broken") def test_cached_adapter_that_was_garbage_collected(self): ex = self.examples factory = CachedAdapterFactory(factory=ex.EditorToIPrintable) self.adaptation_manager.register_factory( factory = factory, from_protocol = ex.Editor, to_protocol = ex.IPrintable ) editor = ex.Editor() adapter_1 = self.adaptation_manager.adapt(editor, ex.IPrintable) self.assertIs(type(adapter_1), ex.EditorToIPrintable) adapter_1.marker = 'marker' del adapter_1 adapter_2 = self.adaptation_manager.adapt(editor, ex.IPrintable) self.assertIsNotNone(adapter_2) self.assertTrue(hasattr(adapter_2, 'marker')) del adapter_2 del editor self.assertTrue(factory.is_empty) if __name__ == '__main__': unittest.main() #### EOF ###################################################################### traits-4.5.0/traits/adaptation/tests/test_global_adaptation_manager.py000066400000000000000000000076771233213561600264140ustar00rootroot00000000000000""" Test the setting/getting/resetting/using the global adaptation manager. """ from traits.adaptation.api import adapt, AdaptationError, AdaptationManager, \ AdaptationOffer, get_global_adaptation_manager, provides_protocol, \ register_factory, register_provides, register_offer, \ reset_global_adaptation_manager, set_global_adaptation_manager, \ supports_protocol import traits.adaptation.tests.abc_examples from traits.testing.unittest_tools import unittest class TestGlobalAdaptationManager(unittest.TestCase): """ Test the setting/getting/resetting/using the global adaptation manager. """ #: Class attribute pointing at the module containing the example data examples = traits.adaptation.tests.abc_examples #### 'TestCase' protocol ################################################## def setUp(self): """ Prepares the test fixture before each test method is called. """ reset_global_adaptation_manager() #### Tests ################################################################ def test_reset_adaptation_manager(self): ex = self.examples adaptation_manager = get_global_adaptation_manager() # UKStandard->EUStandard. adaptation_manager.register_factory( factory = ex.UKStandardToEUStandard, from_protocol = ex.UKStandard, to_protocol = ex.EUStandard, ) # Create a UKPlug. uk_plug = ex.UKPlug() reset_global_adaptation_manager() adaptation_manager = get_global_adaptation_manager() with self.assertRaises(AdaptationError): adaptation_manager.adapt(uk_plug, ex.EUStandard) def test_set_adaptation_manager(self): ex = self.examples adaptation_manager = AdaptationManager() # UKStandard->EUStandard. adaptation_manager.register_factory( factory = ex.UKStandardToEUStandard, from_protocol = ex.UKStandard, to_protocol = ex.EUStandard ) # Create a UKPlug. uk_plug = ex.UKPlug() set_global_adaptation_manager(adaptation_manager) global_adaptation_manager = get_global_adaptation_manager() eu_plug = global_adaptation_manager.adapt(uk_plug, ex.EUStandard) self.assertIsNotNone(eu_plug) self.assertIsInstance(eu_plug, ex.UKStandardToEUStandard) def test_global_convenience_functions(self): ex = self.examples # Global `register_factory`. register_factory( factory = ex.UKStandardToEUStandard, from_protocol = ex.UKStandard, to_protocol = ex.EUStandard ) uk_plug = ex.UKPlug() # Global `adapt`. eu_plug = adapt(uk_plug, ex.EUStandard) self.assertIsNotNone(eu_plug) self.assertIsInstance(eu_plug, ex.UKStandardToEUStandard) # Global `provides_protocol`. self.assertTrue(provides_protocol(ex.UKPlug, ex.UKStandard)) # Global `supports_protocol`. self.assertTrue(supports_protocol(uk_plug, ex.EUStandard)) def test_global_register_provides(self): from traits.api import Interface class IFoo(Interface): pass obj = {} # Global `register_provides`. register_provides(dict, IFoo) self.assertEqual(obj, adapt(obj, IFoo)) def test_global_register_offer(self): ex = self.examples offer = AdaptationOffer( factory = ex.UKStandardToEUStandard, from_protocol = ex.UKStandard, to_protocol = ex.EUStandard ) # Global `register_offer`. register_offer(offer) uk_plug = ex.UKPlug() eu_plug = adapt(uk_plug, ex.EUStandard) self.assertIsNotNone(eu_plug) self.assertIsInstance(eu_plug, ex.UKStandardToEUStandard) if __name__ == '__main__': unittest.main() #### EOF ###################################################################### traits-4.5.0/traits/adapter.py000066400000000000000000000022641233213561600163340ustar00rootroot00000000000000#------------------------------------------------------------------------------- # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: Martin Chilvers # Date: 07/18/2007 # #------------------------------------------------------------------------------- """ An extension to PyProtocols to simplify the declaration of adapters. """ from __future__ import absolute_import import traits.adaptation.adapter from .util.deprecated import deprecated class Adapter(traits.adaptation.adapter.Adapter): @deprecated("use 'Adapter' in 'traits.api' instead") def __init__(self, adaptee, **traits): super(Adapter, self).__init__(adaptee, **traits) adapts = deprecated("use 'adapts' in 'traits.api' instead")( traits.adaptation.adapter.adapts ) #### EOF ###################################################################### traits-4.5.0/traits/api.py000066400000000000000000000116331233213561600154650ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 12/06/2005 # #------------------------------------------------------------------------------ """ Pseudo-package for all of the core symbols from Traits and TraitsUI. Use this module for importing Traits names into your namespace. For example:: from traits.api import HasTraits """ from __future__ import absolute_import from .trait_base import Uninitialized, Undefined, Missing, Self, python_version from .trait_errors import TraitError, TraitNotificationError, DelegationError from .trait_notifiers import (push_exception_handler, pop_exception_handler, TraitChangeNotifyWrapper) from .category import Category from .traits import (CTrait, Trait, Property, TraitFactory, Default, Color, RGBColor, Font) from .trait_types import (Any, Generic, Int, Long, Float, Complex, Str, Title, Unicode, Bool, CInt, CLong, CFloat, CComplex, CStr, CUnicode, CBool, String, Regex, Code, HTML, Password, Callable, This, self, Function, Method, Module, Python, ReadOnly, Disallow, Constant, Delegate, DelegatesTo, PrototypedFrom, Expression, PythonValue, File, Directory, Range, Enum, Tuple, List, CList, Set, CSet, Dict, Instance, AdaptedTo, AdaptsTo, Event, Button, ToolbarButton, Either, Type, Symbol, WeakRef, Date, Time, false, true, undefined, Supports) from .trait_types import (ListInt, ListFloat, ListStr, ListUnicode, ListComplex, ListBool, ListFunction, ListMethod, ListThis, DictStrAny, DictStrStr, DictStrInt, DictStrLong, DictStrFloat, DictStrBool, DictStrList) try: from .trait_types import Class, ListClass, ListInstance except ImportError: # Python 3 does not have old-style classes anymore, so Class does not exist # interestingly, ListInstance is not equivalent to List(Instance), but # rather only allows old-style instances. pass from .trait_types import (BaseInt, BaseLong, BaseFloat, BaseComplex, BaseStr, BaseUnicode, BaseBool, BaseCInt, BaseCLong, BaseCFloat, BaseCComplex, BaseCStr, BaseCUnicode, BaseCBool, BaseFile, BaseDirectory, BaseRange, BaseEnum, BaseTuple, BaseInstance) from .trait_types import UUID from .has_traits import (HasTraits, HasStrictTraits, HasPrivateTraits, Interface, SingletonHasTraits, SingletonHasStrictTraits, SingletonHasPrivateTraits, MetaHasTraits, Vetoable, VetoableEvent, implements, traits_super, on_trait_change, cached_property, property_depends_on, provides, isinterface) try: from .has_traits import ABCHasTraits, ABCHasStrictTraits, ABCMetaHasTraits except ImportError: pass from .trait_handlers import (BaseTraitHandler, TraitType, TraitHandler, TraitRange, TraitString, TraitCoerceType, TraitCastType, TraitInstance, ThisClass, TraitClass, TraitFunction, TraitEnum, TraitPrefixList, TraitMap, TraitPrefixMap, TraitCompound, TraitList, TraitListObject, TraitListEvent, TraitSetObject, TraitSetEvent, TraitDict, TraitDictObject, TraitDictEvent, TraitTuple, NO_COMPARE, OBJECT_IDENTITY_COMPARE, RICH_COMPARE) from .trait_value import (BaseTraitValue, TraitValue, SyncValue, TypeValue, DefaultValue) from .adaptation.adapter import Adapter, adapts from .adaptation.adaptation_error import AdaptationError from .adaptation.adaptation_manager import adapt, register_factory, \ register_provides from .trait_numeric import Array, CArray try: from . import has_traits as has_traits #--------------------------------------------------------------------------- # Patch the main traits module with the correct definition for the # ViewElements class: # NOTE: We do this in a try..except block because traits.ui depends on # the pyface module (part of the TraitsGUI package) which may not # necessarily be installed. Not having TraitsGUI means that the 'ui' # features of traits will not work. #--------------------------------------------------------------------------- from traitsui import view_elements has_traits.ViewElements = view_elements.ViewElements #------------------------------------------------------------------------------- # Patch the main traits module with the correct definition for the # ViewElement and ViewSubElement class: #------------------------------------------------------------------------------- has_traits.ViewElement = view_elements.ViewElement except ImportError: pass traits-4.5.0/traits/category.py000066400000000000000000000105351233213561600165310ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 11/06/2004 # #------------------------------------------------------------------------------ """ Adds a "category" capability to Traits-based classes, similar to that provided by the Cocoa (Objective-C) environment for the Macintosh. You can use categories to extend an existing HasTraits class, as an alternative to subclassing. An advantage of categories over subclassing is that you can access the added members on instances of the original class, without having to change them to instances of a subclass. Unlike subclassing, categories do not allow overriding trait attributes. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import from .has_traits import MetaHasTraits, MetaHasTraitsObject #------------------------------------------------------------------------------- # 'MetaCategory' class: #------------------------------------------------------------------------------- class MetaCategory ( MetaHasTraits ): def __new__ ( cls, class_name, bases, class_dict ): # Make sure the correct usage is being applied: if len( bases ) > 2: raise TypeError, \ "Correct usage is: class FooCategory(Category,Foo):" # Process any traits-related information in the class dictionary: MetaCategoryObject( cls, class_name, bases, class_dict, True ) # Move all remaining items in our class dictionary to the base class's # dictionary: if len( bases ) == 2: category_class = bases[1] for name, value in class_dict.items(): if not hasattr( category_class, name ): setattr( category_class, name, value ) del class_dict[ name ] # Finish building the class using the updated class dictionary: return type.__new__( cls, class_name, bases, class_dict ) #------------------------------------------------------------------------------- # 'MetaCategoryObject' class: #------------------------------------------------------------------------------- class MetaCategoryObject ( MetaHasTraitsObject ): #--------------------------------------------------------------------------- # Adds the traits meta-data to the class: #--------------------------------------------------------------------------- def add_traits_meta_data ( self, bases, class_dict, base_traits, class_traits, instance_traits, prefix_traits, listeners, view_elements ): if len( bases ) == 2: # Update the class and each of the existing subclasses: bases[1]._add_trait_category( base_traits, class_traits, instance_traits, prefix_traits, listeners, view_elements ) else: MetaHasTraitsObject.add_traits_meta_data( self, bases, class_dict, base_traits, class_traits, instance_traits, prefix_traits, listeners, view_elements ) #------------------------------------------------------------------------------- # 'Category' class: #------------------------------------------------------------------------------- class Category ( object ): """ Used for defining "category" extensions to existing classes. To define a class as a category, specify "Category," followed by the name of the base class name in the base class list. The following example demonstrates defining a category:: from traits.api import HasTraits, Str, Category class Base(HasTraits): x = Str("Base x") y = Str("Base y") class BaseExtra(Category, Base): z = Str("BaseExtra z") """ __metaclass__ = MetaCategory traits-4.5.0/traits/ctraits.c000066400000000000000000005362241233213561600161670ustar00rootroot00000000000000/****************************************************************************** * * Description: C based implementation of the Traits package * * Copyright (c) 2005, Enthought, Inc. * All rights reserved. * * This software is provided without warranty under the terms of the BSD * license included in enthought/LICENSE.txt and may be redistributed only * under the conditions described in the aforementioned license. The license * is also available online at http://www.enthought.com/licenses/BSD.txt * * Thanks for using Enthought open source! * * Author: David C. Morrill * Date: 06/15/2004 * ******************************************************************************/ /*----------------------------------------------------------------------------- | Includes: +----------------------------------------------------------------------------*/ #include "Python.h" #include "structmember.h" #include "py2to3.h" /*----------------------------------------------------------------------------- | Constants: +----------------------------------------------------------------------------*/ static PyObject * class_traits; /* == "__class_traits__" */ static PyObject * listener_traits; /* == "__listener_traits__" */ static PyObject * editor_property; /* == "editor" */ static PyObject * class_prefix; /* == "__prefix__" */ static PyObject * trait_added; /* == "trait_added" */ static PyObject * empty_tuple; /* == () */ static PyObject * empty_dict; /* == {} */ static PyObject * Undefined; /* Global 'Undefined' value */ static PyObject * Uninitialized; /* Global 'Uninitialized' value */ static PyObject * TraitError; /* TraitError exception */ static PyObject * DelegationError; /* DelegationError exception */ static PyObject * TraitListObject; /* TraitListObject class */ static PyObject * TraitSetObject; /* TraitSetObject class */ static PyObject * TraitDictObject; /* TraitDictObject class */ static PyObject * TraitValue; /* TraitValue class */ static PyObject * adapt; /* PyProtocols 'adapt' function */ static PyObject * validate_implements; /* 'validate implementation' function */ static PyObject * is_callable; /* Marker for 'callable' value */ static PyObject * _HasTraits_monitors; /* Object creation monitors. */ static PyObject * _trait_notification_handler; /* User supplied trait */ /* notification handler (intended for use by debugging tools) */ static PyTypeObject * ctrait_type; /* Python-level CTrait type reference */ /*----------------------------------------------------------------------------- | Macro definitions: +----------------------------------------------------------------------------*/ /* The following macro is automatically defined in Python 2.4 and later: */ #ifndef Py_VISIT #define Py_VISIT(op) \ do { \ if (op) { \ int vret = visit((PyObject *)(op), arg); \ if (vret) return vret; \ } \ } while (0) #endif /* The following macro is automatically defined in Python 2.4 and later: */ #ifndef Py_CLEAR #define Py_CLEAR(op) \ do { \ if (op) { \ PyObject *tmp = (PyObject *)(op); \ (op) = NULL; \ Py_DECREF(tmp); \ } \ } while (0) #endif #define DEFERRED_ADDRESS(ADDR) NULL #define PyTrait_CheckExact(op) ((op)->ob_type == ctrait_type) #define PyHasTraits_Check(op) PyObject_TypeCheck(op, &has_traits_type) #define PyHasTraits_CheckExact(op) ((op)->ob_type == &has_traits_type) /* Trait method related: */ #if PY_MAJOR_VERSION < 3 #define TP_DESCR_GET(t) \ (PyType_HasFeature(t, Py_TPFLAGS_HAVE_CLASS) ? (t)->tp_descr_get : NULL) #else #define TP_DESCR_GET(t) \ ((t)->tp_descr_get) #endif /* Notification related: */ #define has_notifiers(tnotifiers,onotifiers) \ ((((tnotifiers) != NULL) && (PyList_GET_SIZE((tnotifiers))>0)) || \ (((onotifiers) != NULL) && (PyList_GET_SIZE((onotifiers))>0))) /* Python version dependent macros: */ #if ( (PY_MAJOR_VERSION == 2) && (PY_MINOR_VERSION < 3) ) #define PyMODINIT_FUNC void #define PyDoc_VAR(name) static char name[] #define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str) #ifdef WITH_DOC_STRINGS #define PyDoc_STR(str) str #else #define PyDoc_STR(str) "" #endif #endif #if (PY_VERSION_HEX < 0x02050000) typedef int Py_ssize_t; #endif /*----------------------------------------------------------------------------- | Forward declarations: +----------------------------------------------------------------------------*/ static PyTypeObject trait_type; static PyTypeObject has_traits_type; /*----------------------------------------------------------------------------- | 'ctraits' module doc string: +----------------------------------------------------------------------------*/ PyDoc_STRVAR( ctraits__doc__, "The ctraits module defines the CHasTraits and CTrait C extension types that\n" "define the core performance oriented portions of the Traits package." ); /*----------------------------------------------------------------------------- | HasTraits behavior modification flags: +----------------------------------------------------------------------------*/ /* Object has been initialized: */ #define HASTRAITS_INITED 0x00000001 /* Do not send notifications when a trait changes value: */ #define HASTRAITS_NO_NOTIFY 0x00000002 /* Requests that no event notifications be sent when this object is assigned to a trait: */ #define HASTRAITS_VETO_NOTIFY 0x00000004 /*----------------------------------------------------------------------------- | 'CHasTraits' instance definition: | | Note: traits are normally stored in the type's dictionary, but are added to | the instance's traits dictionary 'trait_dict' when the traits are defined | dynamically or 'on_trait_change' is called on an instance of the trait. | | All 'anytrait_changed' notification handlers are stored in the instance's | 'notifiers' list. +----------------------------------------------------------------------------*/ typedef struct { PyObject_HEAD /* Standard Python object header */ PyDictObject * ctrait_dict; /* Class traits dictionary */ PyDictObject * itrait_dict; /* Instance traits dictionary */ PyListObject * notifiers; /* List of 'any trait changed' notification handlers */ int flags; /* Behavior modification flags */ PyObject * obj_dict; /* Object attribute dictionary ('__dict__') */ /* NOTE: 'obj_dict' field MUST be last field */ } has_traits_object; static int call_notifiers ( PyListObject *, PyListObject *, has_traits_object *, PyObject *, PyObject *, PyObject * new_value ); /*----------------------------------------------------------------------------- | 'CTrait' flag values: +----------------------------------------------------------------------------*/ /* The trait is a Property: */ #define TRAIT_PROPERTY 0x00000001 /* Should the delegate be modified (or the original object)? */ #define TRAIT_MODIFY_DELEGATE 0x00000002 /* Should a simple object identity test be performed (or a rich compare)? */ #define TRAIT_OBJECT_IDENTITY 0x00000004 /* Make 'setattr' store the original unvalidated value */ #define TRAIT_SETATTR_ORIGINAL_VALUE 0x00000008 /* Send the 'post_setattr' method the original unvalidated value */ #define TRAIT_POST_SETATTR_ORIGINAL_VALUE 0x00000010 /* Can a 'TraitValue' be assigned to override the trait definition? */ #define TRAIT_VALUE_ALLOWED 0x00000020 /* Is this trait a special 'TraitValue' trait that uses a property? */ #define TRAIT_VALUE_PROPERTY 0x00000040 /* Does this trait have an associated 'mapped' trait? */ #define TRAIT_IS_MAPPED 0x00000080 /* Should any old/new value test be performed before generating notifications? */ #define TRAIT_NO_VALUE_TEST 0x00000100 /*----------------------------------------------------------------------------- | 'CTrait' instance definition: +----------------------------------------------------------------------------*/ typedef struct _trait_object a_trait_object; typedef PyObject * (*trait_getattr)( a_trait_object *, has_traits_object *, PyObject * ); typedef int (*trait_setattr)( a_trait_object *, a_trait_object *, has_traits_object *, PyObject *, PyObject * ); typedef int (*trait_post_setattr)( a_trait_object *, has_traits_object *, PyObject *, PyObject * ); typedef PyObject * (*trait_validate)( a_trait_object *, has_traits_object *, PyObject *, PyObject * ); typedef PyObject * (*delegate_attr_name_func)( a_trait_object *, has_traits_object *, PyObject * ); typedef struct _trait_object { PyObject_HEAD /* Standard Python object header */ int flags; /* Flag bits */ trait_getattr getattr; /* Get trait value handler */ trait_setattr setattr; /* Set trait value handler */ trait_post_setattr post_setattr; /* Optional post 'setattr' handler */ PyObject * py_post_setattr; /* Python-based post 'setattr' hndlr */ trait_validate validate; /* Validate trait value handler */ PyObject * py_validate; /* Python-based validate value handler */ int default_value_type; /* Type of default value: see the 'default_value_for' function */ PyObject * default_value; /* Default value for trait */ PyObject * delegate_name; /* Optional delegate name */ /* Also used for 'property get' */ PyObject * delegate_prefix; /* Optional delegate prefix */ /* Also used for 'property set' */ delegate_attr_name_func delegate_attr_name; /* Optional routine to return*/ /* the computed delegate attribute name */ PyListObject * notifiers; /* Optional list of notification handlers */ PyObject * handler; /* Associated trait handler object */ /* NOTE: The 'obj_dict' field MUST be last */ PyObject * obj_dict; /* Standard Python object dictionary */ } trait_object; /* Forward declarations: */ static void trait_clone ( trait_object *, trait_object * ); static PyObject * has_traits_getattro ( has_traits_object * obj, PyObject * name ); static int has_traits_setattro ( has_traits_object * obj, PyObject * name, PyObject * value ); static PyObject * get_trait ( has_traits_object * obj, PyObject * name, int instance ); static int trait_property_changed ( has_traits_object * obj, PyObject * name, PyObject * old_value, PyObject * new_value ); static int setattr_event ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ); static int setattr_disallow ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ); /*----------------------------------------------------------------------------- | Raise a TraitError: +----------------------------------------------------------------------------*/ static PyObject * raise_trait_error ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; /* Clear any current exception. We are handling it by raising * a TraitError. */ PyErr_Clear(); result = PyObject_CallMethod( trait->handler, "error", "(OOO)", obj, name, value ); Py_XDECREF( result ); return NULL; } /*----------------------------------------------------------------------------- | Raise a fatal trait error: +----------------------------------------------------------------------------*/ static int fatal_trait_error ( void ) { PyErr_SetString( TraitError, "Non-trait found in trait dictionary" ); return -1; } /*----------------------------------------------------------------------------- | Raise an "attribute is not a string" error: +----------------------------------------------------------------------------*/ static int invalid_attribute_error ( void ) { PyErr_SetString( PyExc_TypeError, "attribute name must be string" ); return -1; } /*----------------------------------------------------------------------------- | Raise an "invalid trait definition" error: +----------------------------------------------------------------------------*/ static int bad_trait_error ( void ) { PyErr_SetString( TraitError, "Invalid argument to trait constructor." ); return -1; } /*----------------------------------------------------------------------------- | Raise an "cant set items error" error: +----------------------------------------------------------------------------*/ static PyObject * cant_set_items_error ( void ) { PyErr_SetString( TraitError, "Can not set a collection's '_items' trait." ); return NULL; } /*----------------------------------------------------------------------------- | Raise an "invalid trait definition" error: +----------------------------------------------------------------------------*/ static int bad_trait_value_error ( void ) { PyErr_SetString( TraitError, "Result of 'as_ctrait' method was not a 'CTraits' instance." ); return -1; } /*----------------------------------------------------------------------------- | Raise an invalid delegate error: +----------------------------------------------------------------------------*/ static int bad_delegate_error ( has_traits_object * obj, PyObject * name ) { if ( !Py2to3_SimpleString_Check( name ) ) { return invalid_attribute_error(); } PyErr_Format( DelegationError, "The '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " attribute of a '%.50s' object" " delegates to an attribute which is not a defined trait.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return -1; } /*----------------------------------------------------------------------------- | Raise an invalid delegate error: +----------------------------------------------------------------------------*/ static int bad_delegate_error2 ( has_traits_object * obj, PyObject * name ) { if ( !Py2to3_SimpleString_Check( name ) ) { return invalid_attribute_error(); } PyErr_Format( DelegationError, "The '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " attribute of a '%.50s' object" " has a delegate which does not have traits.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return -1; } /*----------------------------------------------------------------------------- | Raise a delegation recursion error: +----------------------------------------------------------------------------*/ static int delegation_recursion_error ( has_traits_object * obj, PyObject * name ) { if ( !Py2to3_SimpleString_Check( name ) ) { return invalid_attribute_error(); } PyErr_Format( DelegationError, "Delegation recursion limit exceeded while setting" " the '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " attribute of a '%.50s' object.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return -1; } static int delegation_recursion_error2 ( has_traits_object * obj, PyObject * name ) { if ( !Py2to3_SimpleString_Check( name ) ) { return invalid_attribute_error(); } PyErr_Format( DelegationError, "Delegation recursion limit exceeded while getting" " the definition of" " the '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " attribute of a '%.50s' object.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return -1; } /*----------------------------------------------------------------------------- | Raise an attempt to delete read-only attribute error: +----------------------------------------------------------------------------*/ static int delete_readonly_error ( has_traits_object * obj, PyObject * name ) { if ( !Py2to3_SimpleString_Check( name ) ) { return invalid_attribute_error(); } PyErr_Format( TraitError, "Cannot delete the read only '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " attribute of a '%.50s' object.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return -1; } /*----------------------------------------------------------------------------- | Raise an attempt to set a read-only attribute error: +----------------------------------------------------------------------------*/ static int set_readonly_error ( has_traits_object * obj, PyObject * name ) { if ( !Py2to3_SimpleString_Check( name ) ) { return invalid_attribute_error(); } PyErr_Format( TraitError, "Cannot modify the read only '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " attribute of a '%.50s' object.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return -1; } /*----------------------------------------------------------------------------- | Raise an attempt to set an undefined attribute error: +----------------------------------------------------------------------------*/ static int set_disallow_error ( has_traits_object * obj, PyObject * name ) { if ( !Py2to3_SimpleString_Check( name ) ) { return invalid_attribute_error(); } PyErr_Format( TraitError, "Cannot set the undefined '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " attribute of a '%.50s' object.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return -1; } /*----------------------------------------------------------------------------- | Raise an attempt to delete a property error: +----------------------------------------------------------------------------*/ static int set_delete_property_error ( has_traits_object * obj, PyObject * name ) { if ( !Py2to3_SimpleString_Check( name ) ) { return invalid_attribute_error(); } PyErr_Format( TraitError, "Cannot delete the '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " property of a '%.50s' object.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return -1; } /*----------------------------------------------------------------------------- | Raise an undefined attribute error: +----------------------------------------------------------------------------*/ static void unknown_attribute_error ( has_traits_object * obj, PyObject * name ) { PyErr_Format( PyExc_AttributeError, "'%.50s' object has no attribute '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'", Py_TYPE(obj)->tp_name, Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ) ); } /*----------------------------------------------------------------------------- | Raise a '__dict__' must be set to a dictionary error: +----------------------------------------------------------------------------*/ static int dictionary_error ( void ) { PyErr_SetString( PyExc_TypeError, "__dict__ must be set to a dictionary." ); return -1; } /*----------------------------------------------------------------------------- | Gets/Sets a possibly NULL (or callable) value: +----------------------------------------------------------------------------*/ static PyObject * get_callable_value ( PyObject * value ) { PyObject * tuple, * temp; if ( value == NULL ) { value = Py_None; Py_INCREF( value ); } else if ( PyCallable_Check( value ) ) { value = is_callable; Py_INCREF( value ); } else if ( PyTuple_Check( value ) && ( PyTuple_GET_SIZE( value ) >= 3 ) && ( Py2to3_PyNum_AsLong( PyTuple_GET_ITEM( value, 0 ) ) == 10) ) { tuple = PyTuple_New( 3 ); if ( tuple != NULL ) { PyTuple_SET_ITEM( tuple, 0, temp = PyTuple_GET_ITEM( value, 0 ) ); Py_INCREF( temp ); PyTuple_SET_ITEM( tuple, 1, temp = PyTuple_GET_ITEM( value, 1 ) ); Py_INCREF( temp ); PyTuple_SET_ITEM( tuple, 2, is_callable ); Py_INCREF( is_callable ); value = tuple; } else { value = NULL; } } else { Py_INCREF( value ); } return value; } static PyObject * get_value ( PyObject * value ) { if ( value == NULL ) value = Py_None; Py_INCREF( value ); return value; } static int set_value ( PyObject ** field, PyObject * value ) { Py_INCREF( value ); Py_XDECREF( *field ); *field = value; return 0; } /*----------------------------------------------------------------------------- | Returns the result of calling a specified 'class' object with 1 argument: +----------------------------------------------------------------------------*/ static PyObject * call_class ( PyObject * class, trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; PyObject * args = PyTuple_New( 4 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 0, trait->handler ); PyTuple_SET_ITEM( args, 1, (PyObject *) obj ); PyTuple_SET_ITEM( args, 2, name ); PyTuple_SET_ITEM( args, 3, value ); Py_INCREF( trait->handler ); Py_INCREF( obj ); Py_INCREF( name ); Py_INCREF( value ); result = PyObject_Call( class, args, NULL ); Py_DECREF( args ); return result; } /*----------------------------------------------------------------------------- | Attempts to get the value of a key in a 'known to be a dictionary' object: +----------------------------------------------------------------------------*/ static PyObject * dict_getitem ( PyDictObject * dict, PyObject *key ) { #if !defined(Py_LIMITED_API) && (PY_MAJOR_VERSION < 3 || PY_MINOR_VERSION < 3) Py_hash_t hash; #endif assert( PyDict_Check( dict ) ); #if !defined(Py_LIMITED_API) && (PY_MAJOR_VERSION < 3 || PY_MINOR_VERSION < 3) hash = Py2to3_GetHash_wCache( key ); if ( hash == -1 ) { PyErr_Clear(); return NULL; } return (dict->ma_lookup)( dict, key, hash )->me_value; #else return PyDict_GetItem((PyObject *)dict,key); #endif } /*----------------------------------------------------------------------------- | Gets the definition of the matching prefix based trait for a specified name: | | - This should always return a trait definition unless a fatal Python error | occurs. | - The bulk of the work is delegated to a Python implemented method because | the implementation is complicated in C and does not need to be executed | very often relative to other operations. | +----------------------------------------------------------------------------*/ static trait_object * get_prefix_trait ( has_traits_object * obj, PyObject * name, int is_set ) { PyObject * trait = PyObject_CallMethod( (PyObject *) obj, "__prefix_trait__", "(Oi)", name, is_set ); if ( trait != NULL ) { assert( obj->ctrait_dict != NULL ); PyDict_SetItem( (PyObject *) obj->ctrait_dict, name, trait ); Py_DECREF( trait ); if ( has_traits_setattro( obj, trait_added, name ) < 0 ) return NULL; trait = get_trait( obj, name, 0 ); Py_DECREF( trait ); } return (trait_object *) trait; } /*----------------------------------------------------------------------------- | Assigns a special TraitValue to a specified trait attribute: +----------------------------------------------------------------------------*/ static int setattr_value ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyDictObject * dict; PyObject * trait_new, * result, * obj_dict; PyObject * trait_old = NULL; PyObject * value_old = NULL; trait_new = PyObject_CallMethod( value, "as_ctrait", "(O)", trait ); if ( trait_new == NULL ) goto error2; if ( (trait_new != Py_None) && (!PyTrait_CheckExact( trait_new )) ) { Py_DECREF( trait_new ); return bad_trait_value_error(); } dict = obj->itrait_dict; if ( (dict != NULL) && ((trait_old = dict_getitem( dict, name )) != NULL) && ((((trait_object *) trait_old)->flags & TRAIT_VALUE_PROPERTY) != 0) ) { result = PyObject_CallMethod( trait_old, "_unregister", "(OO)", obj, name ); if ( result == NULL ) goto error1; Py_DECREF( result ); } if ( trait_new == Py_None ) { if ( trait_old != NULL ) { PyDict_DelItem( (PyObject *) dict, name ); } goto success; } if ( dict == NULL ) { obj->itrait_dict = dict = (PyDictObject *) PyDict_New(); if ( dict == NULL ) goto error1; } if ( (((trait_object *) trait_new)->flags & TRAIT_VALUE_PROPERTY) != 0 ) { if ( (value_old = has_traits_getattro( obj, name )) == NULL ) goto error1; obj_dict = obj->obj_dict; if ( obj_dict != NULL ) PyDict_DelItem( obj_dict, name ); } if ( PyDict_SetItem( (PyObject *) dict, name, trait_new ) < 0 ) goto error0; if ( (((trait_object *) trait_new)->flags & TRAIT_VALUE_PROPERTY) != 0 ) { result = PyObject_CallMethod( trait_new, "_register", "(OO)", obj, name ); if ( result == NULL ) goto error0; Py_DECREF( result ); if ( trait_property_changed( obj, name, value_old, NULL ) ) goto error0; Py_DECREF( value_old ); } success: Py_DECREF( trait_new ); return 0; error0: Py_XDECREF( value_old ); error1: Py_DECREF( trait_new ); error2: return -1; } /*----------------------------------------------------------------------------- | Handles the 'setattr' operation on a 'CHasTraits' instance: +----------------------------------------------------------------------------*/ static int has_traits_setattro ( has_traits_object * obj, PyObject * name, PyObject * value ) { trait_object * trait; if ( (obj->itrait_dict == NULL) || ((trait = (trait_object *) dict_getitem( obj->itrait_dict, name )) == NULL) ) { trait = (trait_object *) dict_getitem( obj->ctrait_dict, name ); if ( (trait == NULL) && ((trait = get_prefix_trait( obj, name, 1 )) == NULL) ) return -1; } if ( ((trait->flags & TRAIT_VALUE_ALLOWED) != 0) && (PyObject_IsInstance( value, TraitValue ) > 0) ) { return setattr_value( trait, obj, name, value ); } return trait->setattr( trait, trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Allocates a CTrait instance: +----------------------------------------------------------------------------*/ PyObject * has_traits_new ( PyTypeObject * type, PyObject * args, PyObject * kwds ) { // Call PyBaseObject_Type.tp_new to do the actual construction. // This allows things like ABCMeta machinery to work correctly // which is implemented at the C level. has_traits_object * obj = (has_traits_object *) PyBaseObject_Type.tp_new(type, empty_tuple, empty_dict); if ( obj != NULL ) { if (type->tp_dict == NULL) { PyErr_SetString(PyExc_RuntimeError, "No tp_dict"); return NULL; } obj->ctrait_dict = (PyDictObject *) PyDict_GetItem( type->tp_dict, class_traits ); if (obj->ctrait_dict == NULL) { PyErr_SetString(PyExc_RuntimeError, "No ctrait_dict"); return NULL; } if (!PyDict_Check( (PyObject *) obj->ctrait_dict ) ) { PyErr_SetString(PyExc_RuntimeError, "ctrait_dict not a dict"); return NULL; } Py_INCREF( obj->ctrait_dict ); } return (PyObject *) obj; } int has_traits_init ( PyObject * obj, PyObject * args, PyObject * kwds ) { PyObject * key; PyObject * value; PyObject * klass; PyObject * handler; PyObject * handler_args; int n; int has_listeners; Py_ssize_t i = 0; /* Make sure no non-keyword arguments were specified: */ if ( !PyArg_ParseTuple( args, "" ) ) return -1; /* Make sure all of the object's listeners have been set up: */ has_listeners = (PyMapping_Size( PyDict_GetItem( obj->ob_type->tp_dict, listener_traits ) ) > 0); if ( has_listeners ) { value = PyObject_CallMethod( obj, "_init_trait_listeners", "()" ); if ( value == NULL ) return -1; Py_DECREF( value ); } /* Set any traits specified in the constructor: */ if ( kwds != NULL ) { while ( PyDict_Next( kwds, &i, &key, &value ) ) { if ( has_traits_setattro( (has_traits_object *) obj, key, value ) == -1 ) return -1; } } /* Make sure all post constructor argument assignment listeners have been set up: */ if ( has_listeners ) { value = PyObject_CallMethod( obj, "_post_init_trait_listeners", "()" ); if ( value == NULL ) return -1; Py_DECREF( value ); } /* Notify any interested monitors that a new object has been created: */ for ( i = 0, n = PyList_GET_SIZE( _HasTraits_monitors ); i < n; i++ ) { value = PyList_GET_ITEM( _HasTraits_monitors, i ); assert( PyTuple_Check( value ) ); assert( PyTuple_GET_SIZE( value ) == 2 ); klass = PyTuple_GET_ITEM( value, 0 ); handler = PyTuple_GET_ITEM( value, 1 ); if ( PyObject_IsInstance( obj, klass ) > 0 ) { handler_args = PyTuple_New( 1 ); PyTuple_SetItem( handler_args, 0, obj ); Py_INCREF( obj ); PyObject_Call( handler, handler_args, NULL ); Py_DECREF( handler_args ); } } /* Call the 'traits_init' method to finish up initialization: */ value = PyObject_CallMethod( obj, "traits_init", "()" ); if ( value == NULL ) return -1; Py_DECREF( value ); /* Indicate that the object has finished being initialized: */ ((has_traits_object *) obj)->flags |= HASTRAITS_INITED; return 0; } /*----------------------------------------------------------------------------- | Object clearing method: +----------------------------------------------------------------------------*/ static int has_traits_clear ( has_traits_object * obj ) { Py_CLEAR( obj->ctrait_dict ); Py_CLEAR( obj->itrait_dict ); Py_CLEAR( obj->notifiers ); Py_CLEAR( obj->obj_dict ); return 0; } /*----------------------------------------------------------------------------- | Deallocates an unused 'CHasTraits' instance: +----------------------------------------------------------------------------*/ static void has_traits_dealloc ( has_traits_object * obj ) { PyObject_GC_UnTrack(obj); Py_TRASHCAN_SAFE_BEGIN(obj); has_traits_clear( obj ); Py_TYPE(obj)->tp_free( (PyObject *) obj ); Py_TRASHCAN_SAFE_END(obj); } /*----------------------------------------------------------------------------- | Garbage collector traversal method: +----------------------------------------------------------------------------*/ static int has_traits_traverse ( has_traits_object * obj, visitproc visit, void * arg ) { Py_VISIT( obj->ctrait_dict ); Py_VISIT( obj->itrait_dict ); Py_VISIT( obj->notifiers ); Py_VISIT( obj->obj_dict ); return 0; } /*----------------------------------------------------------------------------- | Handles the 'getattr' operation on a 'CHasTraits' instance: +----------------------------------------------------------------------------*/ static PyObject * has_traits_getattro ( has_traits_object * obj, PyObject * name ) { trait_object * trait; PyObject *value; PyObject *bad_attr_marker; /* The following is a performance hack to short-circuit the normal look-up when the value is in the object's dictionary. */ PyDictObject * dict = (PyDictObject *) obj->obj_dict; if ( dict != NULL ) { assert( PyDict_Check( dict ) ); bad_attr_marker = name; value = Py2to3_GetAttrDictValue(dict, name, bad_attr_marker); // there is a slight performance-hit here: // Py2to3_GetAttrDictValue cannot signal invalid attributes // unambiguously, so we have to reckeck in case the marker value is // returned. Make sure to pick an unlikely marker value. if((value==bad_attr_marker) && !Py2to3_AttrNameCheck(name)) { invalid_attribute_error(); return NULL; } if( value != NULL ){ Py_INCREF( value ); return value; } } /* End of performance hack */ if ( ((obj->itrait_dict != NULL) && ((trait = (trait_object *) dict_getitem( obj->itrait_dict, name )) != NULL)) || ((trait = (trait_object *) dict_getitem( obj->ctrait_dict, name )) != NULL) ) { return trait->getattr( trait, obj, name ); } if ( (value = PyObject_GenericGetAttr( (PyObject *) obj, name )) != NULL ) return value; PyErr_Clear(); if ( (trait = get_prefix_trait( obj, name, 0 )) != NULL ) return trait->getattr( trait, obj, name ); return NULL; } /*----------------------------------------------------------------------------- | Returns (and optionally creates) a specified instance or class trait: +----------------------------------------------------------------------------*/ static PyObject * get_trait ( has_traits_object * obj, PyObject * name, int instance ) { int i, n; PyDictObject * itrait_dict; trait_object * trait; trait_object * itrait; PyListObject * notifiers; PyListObject * inotifiers; PyObject * item; /* If there already is an instance specific version of the requested trait, then return it: */ itrait_dict = obj->itrait_dict; if ( itrait_dict != NULL ) { trait = (trait_object *) dict_getitem( itrait_dict, name ); if ( trait != NULL ) { assert( PyTrait_CheckExact( trait ) ); Py_INCREF( trait ); return (PyObject *) trait; } } /* If only an instance trait can be returned (but not created), then return None: */ if ( instance == 1 ) { Py_INCREF( Py_None ); return Py_None; } /* Otherwise, get the class specific version of the trait (creating a trait class version if necessary): */ assert( obj->ctrait_dict != NULL ); trait = (trait_object *) dict_getitem( obj->ctrait_dict, name ); if ( trait == NULL ) { if ( instance == 0 ) { Py_INCREF( Py_None ); return Py_None; } if ( (trait = get_prefix_trait( obj, name, 0 )) == NULL ) return NULL; } assert( PyTrait_CheckExact( trait ) ); /* If an instance specific trait is not needed, return the class trait: */ if ( instance <= 0 ) { Py_INCREF( trait ); return (PyObject *) trait; } /* Otherwise, create an instance trait dictionary if it does not exist: */ if ( itrait_dict == NULL ) { obj->itrait_dict = itrait_dict = (PyDictObject *) PyDict_New(); if ( itrait_dict == NULL ) return NULL; } /* Create a new instance trait and clone the class trait into it: */ itrait = (trait_object *) PyType_GenericAlloc( ctrait_type, 0 ); trait_clone( itrait, trait ); itrait->obj_dict = trait->obj_dict; Py_XINCREF( itrait->obj_dict ); /* Copy the class trait's notifier list into the instance trait: */ if ( (notifiers = trait->notifiers) != NULL ) { n = PyList_GET_SIZE( notifiers ); itrait->notifiers = inotifiers = (PyListObject *) PyList_New( n ); if ( inotifiers == NULL ) return NULL; for ( i = 0; i < n; i++ ) { item = PyList_GET_ITEM( notifiers, i ); PyList_SET_ITEM( inotifiers, i, item ); Py_INCREF( item ); } } /* Add the instance trait to the instance's trait dictionary and return the instance trait if successful: */ if ( PyDict_SetItem( (PyObject *) itrait_dict, name, (PyObject *) itrait ) >= 0 ) return (PyObject *) itrait; /* Otherwise, indicate that an error ocurred updating the dictionary: */ return NULL; } /*----------------------------------------------------------------------------- | Returns (and optionally creates) a specified instance or class trait: | | The legal values for 'instance' are: | 2: Return instance trait (force creation if it does not exist) | 1: Return existing instance trait (do not create) | 0: Return existing instance or class trait (do not create) | -1: Return instance trait or force create class trait (i.e. prefix trait) | -2: Return the base trait (after all delegation has been resolved) +----------------------------------------------------------------------------*/ static PyObject * _has_traits_trait ( has_traits_object * obj, PyObject * args ) { has_traits_object * delegate; has_traits_object * temp_delegate; trait_object * trait; PyObject * name; PyObject * daname; PyObject * daname2; PyObject * dict; int i, instance; /* Parse arguments, which specify the trait name and whether or not an instance specific version of the trait is needed or not: */ if ( !PyArg_ParseTuple( args, "Oi", &name, &instance ) ) return NULL; trait = (trait_object *) get_trait( obj, name, instance ); if ( (instance >= -1) || (trait == NULL) ) return (PyObject *) trait; /* Follow the delegation chain until we find a non-delegated trait: */ delegate = obj; Py_INCREF( delegate ); daname = name; Py_INCREF( daname ); for ( i = 0; ; ) { if ( trait->delegate_attr_name == NULL ) { Py_DECREF( delegate ); Py_DECREF( daname ); return (PyObject *) trait; } dict = delegate->obj_dict; if ( ((dict == NULL) || ((temp_delegate = (has_traits_object *) PyDict_GetItem( dict, trait->delegate_name )) == NULL)) && ((temp_delegate = (has_traits_object *) has_traits_getattro( delegate, trait->delegate_name )) == NULL) ) break; Py_DECREF( delegate ); delegate = temp_delegate; Py_INCREF( delegate ); if ( !PyHasTraits_Check( delegate ) ) { bad_delegate_error2( obj, name ); break; } daname2 = trait->delegate_attr_name( trait, obj, daname ); Py_DECREF( daname ); daname = daname2; Py_DECREF( trait ); if ( ((delegate->itrait_dict == NULL) || ((trait = (trait_object *) dict_getitem( delegate->itrait_dict, daname )) == NULL)) && ((trait = (trait_object *) dict_getitem( delegate->ctrait_dict, daname )) == NULL) && ((trait = get_prefix_trait( delegate, daname2, 0 )) == NULL) ) { bad_delegate_error( obj, name ); break; } if ( Py_TYPE(trait) != ctrait_type ) { fatal_trait_error(); break; } if ( ++i >= 100 ) { delegation_recursion_error2( obj, name ); break; } Py_INCREF( trait ); } Py_DECREF( delegate ); Py_DECREF( daname ); return NULL; } /*----------------------------------------------------------------------------- | Calls notifiers when a trait 'property' is explicitly changed: +----------------------------------------------------------------------------*/ static int trait_property_changed ( has_traits_object * obj, PyObject * name, PyObject * old_value, PyObject * new_value ) { trait_object * trait; PyListObject * tnotifiers; PyListObject * onotifiers; int null_new_value; int rc = 0; if ( (trait = (trait_object *) get_trait( obj, name, -1 )) == NULL ) return -1; tnotifiers = trait->notifiers; onotifiers = obj->notifiers; Py_DECREF( trait ); if ( has_notifiers( tnotifiers, onotifiers ) ) { null_new_value = (new_value == NULL); if ( null_new_value ) { new_value = has_traits_getattro( obj, name ); if ( new_value == NULL ) return -1; } rc = call_notifiers( tnotifiers, onotifiers, obj, name, old_value, new_value ); if ( null_new_value ) { Py_DECREF( new_value ); } } return rc; } /*----------------------------------------------------------------------------- | Calls notifiers when a trait 'property' is explicitly changed: +----------------------------------------------------------------------------*/ static PyObject * _has_traits_property_changed ( has_traits_object * obj, PyObject * args ) { PyObject * name, * old_value; PyObject * new_value = NULL; /* Parse arguments, which specify the name of the changed trait, the previous value, and the new value: */ if ( !PyArg_ParseTuple( args, "OO|O", &name, &old_value, &new_value ) ) return NULL; if ( trait_property_changed( obj, name, old_value, new_value ) ) return NULL; Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Handles firing a traits 'xxx_items' event: +----------------------------------------------------------------------------*/ static PyObject * _has_traits_items_event ( has_traits_object * obj, PyObject * args ) { PyObject * name; PyObject * event_object; PyObject * event_trait; PyObject * result; trait_object * trait; int can_retry = 1; if ( !PyArg_ParseTuple( args, "OOO", &name, &event_object, &event_trait ) ) return NULL; if ( !PyTrait_CheckExact( event_trait ) ) { bad_trait_value_error(); return NULL; } if ( !Py2to3_AttrNameCheck( name ) ) { invalid_attribute_error(); return NULL; } retry: if ( ((obj->itrait_dict == NULL) || ((trait = (trait_object *) dict_getitem( obj->itrait_dict, name )) == NULL)) && ((trait = (trait_object *) dict_getitem( obj->ctrait_dict, name )) == NULL) ) { add_trait: if ( !can_retry ) return cant_set_items_error(); result = PyObject_CallMethod( (PyObject *) obj, "add_trait", "(OO)", name, event_trait ); if ( result == NULL ) return NULL; Py_DECREF( result ); can_retry = 0; goto retry; } if ( trait->setattr == setattr_disallow ) goto add_trait; if ( trait->setattr( trait, trait, obj, name, event_object ) < 0 ) return NULL; Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Enables/Disables trait change notification for the object: +----------------------------------------------------------------------------*/ static PyObject * _has_traits_change_notify ( has_traits_object * obj, PyObject * args ) { int enabled; /* Parse arguments, which specify the new trait notification enabled/disabled state: */ if ( !PyArg_ParseTuple( args, "i", &enabled ) ) return NULL; if ( enabled ) { obj->flags &= (~HASTRAITS_NO_NOTIFY); } else { obj->flags |= HASTRAITS_NO_NOTIFY; } Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Enables/Disables trait change notifications when this object is assigned to | a trait: +----------------------------------------------------------------------------*/ static PyObject * _has_traits_veto_notify ( has_traits_object * obj, PyObject * args ) { int enabled; /* Parse arguments, which specify the new trait notification veto enabled/disabled state: */ if ( !PyArg_ParseTuple( args, "i", &enabled ) ) return NULL; if ( enabled ) { obj->flags |= HASTRAITS_VETO_NOTIFY; } else { obj->flags &= (~HASTRAITS_VETO_NOTIFY); } Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | This method is called at the end of a HasTraits constructor and the | __setstate__ method to perform any final object initialization needed. +----------------------------------------------------------------------------*/ static PyObject * _has_traits_init ( has_traits_object * obj ) { Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Returns whether or not the object has finished being initialized: +----------------------------------------------------------------------------*/ static PyObject * _has_traits_inited ( has_traits_object * obj, PyObject * args ) { int traits_inited = -1; if ( !PyArg_ParseTuple( args, "|i", &traits_inited ) ) return NULL; if ( traits_inited > 0 ) obj->flags |= HASTRAITS_INITED; if ( obj->flags & HASTRAITS_INITED ) { Py_INCREF( Py_True ); return Py_True; } Py_INCREF( Py_False ); return Py_False; } /*----------------------------------------------------------------------------- | Returns the instance trait dictionary: +----------------------------------------------------------------------------*/ static PyObject * _has_traits_instance_traits ( has_traits_object * obj, PyObject * args ) { if ( !PyArg_ParseTuple( args, "" ) ) return NULL; if ( obj->itrait_dict == NULL ) obj->itrait_dict = (PyDictObject *) PyDict_New(); Py_XINCREF( obj->itrait_dict ); return (PyObject *) obj->itrait_dict; } /*----------------------------------------------------------------------------- | Returns (and optionally creates) the anytrait 'notifiers' list: +----------------------------------------------------------------------------*/ static PyObject * _has_traits_notifiers ( has_traits_object * obj, PyObject * args ) { PyObject * result; PyObject * list; int force_create; if ( !PyArg_ParseTuple( args, "i", &force_create ) ) return NULL; result = (PyObject *) obj->notifiers; if ( result == NULL ) { result = Py_None; if ( force_create && ((list = PyList_New( 0 )) != NULL) ) { obj->notifiers = (PyListObject *) (result = list); Py_INCREF( result ); } } Py_INCREF( result ); return result; } /*----------------------------------------------------------------------------- | Returns the object's instance dictionary: +----------------------------------------------------------------------------*/ static PyObject * get_has_traits_dict ( has_traits_object * obj, void * closure ) { PyObject * obj_dict = obj->obj_dict; if ( obj_dict == NULL ) { obj->obj_dict = obj_dict = PyDict_New(); if ( obj_dict == NULL ) return NULL; } Py_INCREF( obj_dict ); return obj_dict; } /*----------------------------------------------------------------------------- | Sets the object's dictionary: +----------------------------------------------------------------------------*/ static int set_has_traits_dict ( has_traits_object * obj, PyObject * value, void * closure ) { if ( !PyDict_Check( value ) ) return dictionary_error(); return set_value( &obj->obj_dict, value ); } /*----------------------------------------------------------------------------- | 'CHasTraits' instance methods: +----------------------------------------------------------------------------*/ static PyMethodDef has_traits_methods[] = { { "trait_property_changed", (PyCFunction) _has_traits_property_changed, METH_VARARGS, PyDoc_STR( "trait_property_changed(name,old_value[,new_value])" ) }, { "trait_items_event", (PyCFunction) _has_traits_items_event, METH_VARARGS, PyDoc_STR( "trait_items_event(event_trait,name,items_event)" ) }, { "_trait_change_notify", (PyCFunction) _has_traits_change_notify, METH_VARARGS, PyDoc_STR( "_trait_change_notify(boolean)" ) }, { "_trait_veto_notify", (PyCFunction) _has_traits_veto_notify, METH_VARARGS, PyDoc_STR( "_trait_veto_notify(boolean)" ) }, { "traits_init", (PyCFunction) _has_traits_init, METH_NOARGS, PyDoc_STR( "traits_init()" ) }, { "traits_inited", (PyCFunction) _has_traits_inited, METH_VARARGS, PyDoc_STR( "traits_inited([True])" ) }, { "_trait", (PyCFunction) _has_traits_trait, METH_VARARGS, PyDoc_STR( "_trait(name,instance) -> trait" ) }, { "_instance_traits", (PyCFunction) _has_traits_instance_traits, METH_VARARGS, PyDoc_STR( "_instance_traits() -> dict" ) }, { "_notifiers", (PyCFunction) _has_traits_notifiers, METH_VARARGS, PyDoc_STR( "_notifiers(force_create) -> list" ) }, { NULL, NULL }, }; /*----------------------------------------------------------------------------- | 'CHasTraits' property definitions: +----------------------------------------------------------------------------*/ static PyGetSetDef has_traits_properties[] = { { "__dict__", (getter) get_has_traits_dict, (setter) set_has_traits_dict }, { 0 } }; /*----------------------------------------------------------------------------- | 'CHasTraits' type definition: +----------------------------------------------------------------------------*/ static PyTypeObject has_traits_type = { PyVarObject_HEAD_INIT( DEFERRED_ADDRESS( &PyType_Type ), 0) "traits.ctraits.CHasTraits", sizeof( has_traits_object ), 0, (destructor) has_traits_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ (getattrofunc) has_traits_getattro, /* tp_getattro */ (setattrofunc) has_traits_setattro, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,/* tp_flags */ 0, /* tp_doc */ (traverseproc) has_traits_traverse, /* tp_traverse */ (inquiry) has_traits_clear, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ has_traits_methods, /* tp_methods */ 0, /* tp_members */ has_traits_properties, /* tp_getset */ DEFERRED_ADDRESS( &PyBaseObject_Type ), /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ sizeof( has_traits_object ) - sizeof( PyObject * ), /* tp_dictoffset */ has_traits_init, /* tp_init */ DEFERRED_ADDRESS( PyType_GenericAlloc ), /* tp_alloc */ has_traits_new /* tp_new */ }; /*----------------------------------------------------------------------------- | Returns the default value associated with a specified trait: +----------------------------------------------------------------------------*/ static PyObject * default_value_for ( trait_object * trait, has_traits_object * obj, PyObject * name ) { PyObject * result = NULL, * value, * dv, * kw, * tuple; switch ( trait->default_value_type ) { case 0: case 1: result = trait->default_value; Py_INCREF( result ); break; case 2: result = (PyObject *) obj; Py_INCREF( obj ); break; case 3: return PySequence_List( trait->default_value ); case 4: return PyDict_Copy( trait->default_value ); case 5: return call_class( TraitListObject, trait, obj, name, trait->default_value ); case 6: return call_class( TraitDictObject, trait, obj, name, trait->default_value ); case 7: dv = trait->default_value; kw = PyTuple_GET_ITEM( dv, 2 ); if ( kw == Py_None ) kw = NULL; return PyObject_Call( PyTuple_GET_ITEM( dv, 0 ), PyTuple_GET_ITEM( dv, 1 ), kw ); case 8: if ( (tuple = PyTuple_New( 1 )) == NULL ) return NULL; PyTuple_SET_ITEM( tuple, 0, (PyObject *) obj ); Py_INCREF( obj ); result = PyObject_Call( trait->default_value, tuple, NULL ); Py_DECREF( tuple ); if ( (result != NULL) && (trait->validate != NULL) ) { value = trait->validate( trait, obj, name, result ); Py_DECREF( result ); return value; } break; case 9: return call_class( TraitSetObject, trait, obj, name, trait->default_value ); } return result; } /*----------------------------------------------------------------------------- | Returns the value assigned to a standard Python attribute: +----------------------------------------------------------------------------*/ static PyObject * getattr_python ( trait_object * trait, has_traits_object * obj, PyObject * name ) { return PyObject_GenericGetAttr( (PyObject *) obj, name ); } /*----------------------------------------------------------------------------- | Returns the value assigned to a generic Python attribute: +----------------------------------------------------------------------------*/ static PyObject * getattr_generic ( trait_object * trait, has_traits_object * obj, PyObject * name ) { return PyObject_GenericGetAttr( (PyObject *) obj, name ); } /*----------------------------------------------------------------------------- | Returns the value assigned to an event trait: +----------------------------------------------------------------------------*/ static PyObject * getattr_event ( trait_object * trait, has_traits_object * obj, PyObject * name ) { PyErr_Format( PyExc_AttributeError, "The %.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR " trait of a %.50s instance is an 'event', which is write only.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return NULL; } /*----------------------------------------------------------------------------- | Returns the value assigned to a standard trait: +----------------------------------------------------------------------------*/ static PyObject * getattr_trait ( trait_object * trait, has_traits_object * obj, PyObject * name ) { int rc; PyListObject * tnotifiers; PyListObject * onotifiers; PyObject * result; PyObject * nname; PyObject * dict = obj->obj_dict; if ( dict == NULL ) { dict = PyDict_New(); if ( dict == NULL ) return NULL; obj->obj_dict = dict; } if ( Py2to3_SimpleString_Check( name ) ) { if ( (result = default_value_for( trait, obj, name )) != NULL ) { if ( PyDict_SetItem( dict, name, result ) >= 0 ) { rc = 0; if ( (trait->post_setattr != NULL) && ((trait->flags & TRAIT_IS_MAPPED) == 0) ) rc = trait->post_setattr( trait, obj, name, result ); if (rc == 0) { tnotifiers = trait->notifiers; onotifiers = obj->notifiers; if ( has_notifiers( tnotifiers, onotifiers ) ) rc = call_notifiers( tnotifiers, onotifiers, obj, name, Uninitialized, result ); } if ( rc == 0 ) return result; } Py_DECREF( result ); } return NULL; } nname = Py2to3_NormaliseAttrName(name); if( nname == NULL ){ invalid_attribute_error(); return NULL; } if ( (result = default_value_for( trait, obj, nname )) != NULL ) { if ( PyDict_SetItem( dict, nname, result ) >= 0 ) { rc = 0; if ( (trait->post_setattr != NULL) && ((trait->flags & TRAIT_IS_MAPPED) == 0) ) rc = trait->post_setattr( trait, obj, nname, result ); if (rc == 0) { tnotifiers = trait->notifiers; onotifiers = obj->notifiers; if ( has_notifiers( tnotifiers, onotifiers ) ) rc = call_notifiers( tnotifiers, onotifiers, obj, nname, Uninitialized, result ); } if ( rc == 0 ){ Py2to3_FinishNormaliseAttrName(name,nname); return result; } } Py_DECREF( result ); } if ( PyErr_ExceptionMatches( PyExc_KeyError ) ) PyErr_SetObject( PyExc_AttributeError, nname ); Py2to3_FinishNormaliseAttrName(name,nname); Py_DECREF( name ); return NULL; } /*----------------------------------------------------------------------------- | Returns the value assigned to a delegated trait: +----------------------------------------------------------------------------*/ static PyObject * getattr_delegate ( trait_object * trait, has_traits_object * obj, PyObject * name ) { PyTypeObject * tp; PyObject * delegate_attr_name; PyObject * delegate; PyObject * result; PyObject * nname; PyObject * dict = obj->obj_dict; if ( (dict == NULL) || ((delegate = PyDict_GetItem( dict, trait->delegate_name )) == NULL) ){ // Handle the case when the delegate is not in the instance dictionary // (could be a method that returns the real delegate): delegate = has_traits_getattro( obj, trait->delegate_name ); if ( delegate == NULL ) return NULL; } else { Py_INCREF( delegate ); } nname = Py2to3_NormaliseAttrName(name); if( nname == NULL ){ invalid_attribute_error(); Py_DECREF( delegate ); return NULL; } delegate_attr_name = trait->delegate_attr_name( trait, obj, nname ); tp = Py_TYPE(delegate); if ( tp->tp_getattro != NULL ) { result = (*tp->tp_getattro)( delegate, delegate_attr_name ); goto done; } if ( tp->tp_getattr != NULL ) { PyObject *delegate_attr_name_c_str = Py2to3_AttrNameCStr( delegate_attr_name ); if(delegate_attr_name_c_str == NULL){ result = NULL; } else { result = (*tp->tp_getattr)( delegate, Py2to3_AttrName_AS_STRING( delegate_attr_name_c_str ) ); Py2to3_FinishAttrNameCStr(delegate_attr_name_c_str); goto done; } } PyErr_Format( DelegationError, "The '%.50s' object has no attribute '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " because its %.50s delegate has no attribute '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'.", Py_TYPE(obj)->tp_name, Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), tp->tp_name, Py2to3_PYERR_PREPARE_SIMPLE_STRING( delegate_attr_name ) ); result = NULL; done: Py_DECREF( delegate_attr_name ); Py2to3_FinishNormaliseAttrName(name,nname); Py_DECREF( delegate ); return result; } /*----------------------------------------------------------------------------- | Raises an exception when a disallowed trait is accessed: +----------------------------------------------------------------------------*/ static PyObject * getattr_disallow ( trait_object * trait, has_traits_object * obj, PyObject * name ) { if ( Py2to3_SimpleString_Check( name ) ) unknown_attribute_error( obj, name ); else invalid_attribute_error(); return NULL; } /*----------------------------------------------------------------------------- | Returns the value of a constant trait: +----------------------------------------------------------------------------*/ static PyObject * getattr_constant ( trait_object * trait, has_traits_object * obj, PyObject * name ) { Py_INCREF( trait->default_value ); return trait->default_value; } /*----------------------------------------------------------------------------- | Assigns a value to a specified property trait attribute: +----------------------------------------------------------------------------*/ static PyObject * getattr_property0 ( trait_object * trait, has_traits_object * obj, PyObject * name ) { return PyObject_Call( trait->delegate_name, empty_tuple, NULL ); } static PyObject * getattr_property1 ( trait_object * trait, has_traits_object * obj, PyObject * name ) { PyObject * result; PyObject * args = PyTuple_New( 1 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); Py_INCREF( obj ); result = PyObject_Call( trait->delegate_name, args, NULL ); Py_DECREF( args ); return result; } static PyObject * getattr_property2 ( trait_object * trait, has_traits_object * obj, PyObject * name ) { PyObject * result; PyObject * args = PyTuple_New( 2 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); Py_INCREF( obj ); PyTuple_SET_ITEM( args, 1, name ); Py_INCREF( name ); result = PyObject_Call( trait->delegate_name, args, NULL ); Py_DECREF( args ); return result; } static PyObject * getattr_property3 ( trait_object * trait, has_traits_object * obj, PyObject * name ) { PyObject * result; PyObject * args = PyTuple_New( 3 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); Py_INCREF( obj ); PyTuple_SET_ITEM( args, 1, name ); Py_INCREF( name ); PyTuple_SET_ITEM( args, 2, (PyObject *) trait ); Py_INCREF( trait ); result = PyObject_Call( trait->delegate_name, args, NULL ); Py_DECREF( args ); return result; } static trait_getattr getattr_property_handlers[] = { getattr_property0, getattr_property1, getattr_property2, getattr_property3 }; /*----------------------------------------------------------------------------- | Assigns a value to a specified standard Python attribute: +----------------------------------------------------------------------------*/ static int setattr_python ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject *nname; PyObject * dict = obj->obj_dict; if ( value != NULL ) { if ( dict == NULL ) { dict = PyDict_New(); if ( dict == NULL ) return -1; obj->obj_dict = dict; } nname = Py2to3_NormaliseAttrName( name ); if( nname == NULL ) return invalid_attribute_error(); if ( PyDict_SetItem( dict, nname, value ) >= 0 ){ Py2to3_FinishNormaliseAttrName(name,nname); return 0; } if ( PyErr_ExceptionMatches( PyExc_KeyError ) ) PyErr_SetObject( PyExc_AttributeError, nname ); Py2to3_FinishNormaliseAttrName(name,nname); return -1; } if ( dict != NULL ) { PyObject *nname = Py2to3_NormaliseAttrName( name ); if( nname == NULL ) return invalid_attribute_error(); if ( PyDict_DelItem( dict, nname ) >= 0 ){ Py2to3_FinishNormaliseAttrName(name,nname); return 0; } if ( PyErr_ExceptionMatches( PyExc_KeyError ) ) unknown_attribute_error( obj, nname ); Py2to3_FinishNormaliseAttrName(name,nname); return -1; } if ( Py2to3_SimpleString_Check( name ) ) { unknown_attribute_error( obj, name ); return -1; } return invalid_attribute_error(); } /*----------------------------------------------------------------------------- | Assigns a value to a specified generic Python attribute: +----------------------------------------------------------------------------*/ static int setattr_generic ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { return PyObject_GenericSetAttr( (PyObject *) obj, name, value ); } /*----------------------------------------------------------------------------- | Call all notifiers for a specified trait: +----------------------------------------------------------------------------*/ static int call_notifiers ( PyListObject * tnotifiers, PyListObject * onotifiers, has_traits_object * obj, PyObject * name, PyObject * old_value, PyObject * new_value ) { int i, n, new_value_has_traits; PyObject * result, * item, * temp; int rc = 0; PyObject * arg_temp = Py_None; PyObject * user_args = NULL; PyObject * args = PyTuple_New( 4 ); if ( args == NULL ) return -1; new_value_has_traits = PyHasTraits_Check( new_value ); PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); PyTuple_SET_ITEM( args, 1, name ); PyTuple_SET_ITEM( args, 2, old_value ); PyTuple_SET_ITEM( args, 3, new_value ); Py_INCREF( obj ); Py_INCREF( name ); Py_INCREF( old_value ); Py_INCREF( new_value ); // Do nothing if the user has explicitly requested no traits notifications // to be sent. if ( (obj->flags & HASTRAITS_NO_NOTIFY) != 0 ) goto exit2; if ( _trait_notification_handler != NULL ) { user_args = PyTuple_New( 2 ); if ( user_args == NULL ) { Py_DECREF( args ); return -1; } PyTuple_SET_ITEM( user_args, 0, arg_temp ); PyTuple_SET_ITEM( user_args, 1, args ); Py_INCREF( arg_temp ); Py_INCREF( args ); } if ( tnotifiers != NULL ) { n = PyList_GET_SIZE( tnotifiers ); temp = NULL; if ( n > 1 ) { temp = PyList_New( n ); if ( temp == NULL ) { rc = -1; goto exit2; } for ( i = 0; i < n; i++ ) { item = PyList_GET_ITEM( tnotifiers, i ); PyList_SET_ITEM( temp, i, item ); Py_INCREF( item ); } tnotifiers = (PyListObject *) temp; } for ( i = 0; i < n; i++ ) { if ( new_value_has_traits && (((has_traits_object *) new_value)->flags & HASTRAITS_VETO_NOTIFY) ) { goto exit; } if ( (_trait_notification_handler != NULL) && (user_args != NULL) ){ Py_DECREF( arg_temp ); arg_temp = PyList_GET_ITEM( tnotifiers, i ); Py_INCREF( arg_temp ); PyTuple_SET_ITEM( user_args, 0, arg_temp ); result = PyObject_Call( _trait_notification_handler, user_args, NULL ); } else { result = PyObject_Call( PyList_GET_ITEM( tnotifiers, i ), args, NULL ); } if ( result == NULL ) { rc = -1; goto exit; } Py_DECREF( result ); } Py_XDECREF( temp ); } temp = NULL; if ( onotifiers != NULL ) { n = PyList_GET_SIZE( onotifiers ); if ( n > 1 ) { temp = PyList_New( n ); if ( temp == NULL ) { rc = -1; goto exit2; } for ( i = 0; i < n; i++ ) { item = PyList_GET_ITEM( onotifiers, i ); PyList_SET_ITEM( temp, i, item ); Py_INCREF( item ); } onotifiers = (PyListObject *) temp; } for ( i = 0; i < n; i++ ) { if ( new_value_has_traits && (((has_traits_object *) new_value)->flags & HASTRAITS_VETO_NOTIFY) ) { break; } if ( (_trait_notification_handler != NULL) && (user_args != NULL) ){ Py_DECREF( arg_temp ); arg_temp = PyList_GET_ITEM( onotifiers, i ); Py_INCREF( arg_temp ); PyTuple_SET_ITEM( user_args, 0, arg_temp ); result = PyObject_Call( _trait_notification_handler, user_args, NULL ); } else { result = PyObject_Call( PyList_GET_ITEM( onotifiers, i ), args, NULL ); } if ( result == NULL ) { rc = -1; goto exit; } Py_DECREF( result ); } } exit: Py_XDECREF( temp ); exit2: Py_XDECREF( user_args ); Py_DECREF( args ); return rc; } /*----------------------------------------------------------------------------- | Assigns a value to a specified event trait attribute: +----------------------------------------------------------------------------*/ static int setattr_event ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { int rc = 0; PyListObject * tnotifiers; PyListObject * onotifiers; if ( value != NULL ) { if ( traitd->validate != NULL ) { value = traitd->validate( traitd, obj, name, value ); if ( value == NULL ) return -1; } else { Py_INCREF( value ); } tnotifiers = traito->notifiers; onotifiers = obj->notifiers; if ( has_notifiers( tnotifiers, onotifiers ) ) rc = call_notifiers( tnotifiers, onotifiers, obj, name, Undefined, value ); Py_DECREF( value ); } return rc; } /*----------------------------------------------------------------------------- | Assigns a value to a specified normal trait attribute: +----------------------------------------------------------------------------*/ static int setattr_trait ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { int rc; int changed; int do_notifiers; trait_post_setattr post_setattr; PyListObject * tnotifiers = NULL; PyListObject * onotifiers = NULL; PyObject * old_value = NULL; PyObject * original_value; PyObject * new_value; PyObject *nname; PyObject * dict = obj->obj_dict; changed = (traitd->flags & TRAIT_NO_VALUE_TEST); if ( value == NULL ) { if ( dict == NULL ) return 0; nname = Py2to3_NormaliseAttrName(name); if( nname == NULL ) return invalid_attribute_error(); old_value = PyDict_GetItem( dict, nname ); if ( old_value == NULL ) { Py2to3_FinishNormaliseAttrName( name, nname ); return 0; } Py_INCREF( old_value ); if ( PyDict_DelItem( dict, nname ) < 0 ) { Py_DECREF( old_value ); Py2to3_FinishNormaliseAttrName( name, nname ); return -1; } rc = 0; if ( (obj->flags & HASTRAITS_NO_NOTIFY) == 0 ) { tnotifiers = traito->notifiers; onotifiers = obj->notifiers; if ( (tnotifiers != NULL) || (onotifiers != NULL) ) { value = traito->getattr( traito, obj, nname ); if ( value == NULL ) { Py_DECREF( old_value ); Py2to3_FinishNormaliseAttrName( name, nname ); return -1; } if ( !changed ) { changed = (old_value != value ); if ( changed && ((traitd->flags & TRAIT_OBJECT_IDENTITY) == 0) ) { changed = PyObject_RichCompareBool( old_value, value, Py_NE ); if ( changed == -1 ) { PyErr_Clear(); } } } if ( changed ) { if ( traitd->post_setattr != NULL ) rc = traitd->post_setattr( traitd, obj, nname, value ); if ( (rc == 0) && has_notifiers( tnotifiers, onotifiers ) ) rc = call_notifiers( tnotifiers, onotifiers, obj, nname, old_value, value ); } Py_DECREF( value ); } } Py_DECREF( old_value ); Py2to3_FinishNormaliseAttrName( name, nname ); return rc; } original_value = value; // If the object's value is Undefined, then do not call the validate // method (as the object's value has not yet been set). if ( ( traitd->validate != NULL ) && ( value != Undefined ) ) { value = traitd->validate( traitd, obj, name, value ); if ( value == NULL ) { return -1; } } else { Py_INCREF( value ); } if ( dict == NULL ) { obj->obj_dict = dict = PyDict_New(); if ( dict == NULL ) { Py_DECREF( value ); return -1; } } nname = Py2to3_NormaliseAttrName(name); if( nname == NULL ){ Py_DECREF( value ); return invalid_attribute_error(); } new_value = (traitd->flags & TRAIT_SETATTR_ORIGINAL_VALUE)? original_value: value; old_value = NULL; tnotifiers = traito->notifiers; onotifiers = obj->notifiers; do_notifiers = has_notifiers( tnotifiers, onotifiers ); post_setattr = traitd->post_setattr; if ( (post_setattr != NULL) || do_notifiers ) { old_value = PyDict_GetItem( dict, nname ); if ( old_value == NULL ) { if ( traitd != traito ) { old_value = traito->getattr( traito, obj, nname ); } else { old_value = default_value_for( traitd, obj, nname ); } if ( old_value == NULL ) { Py2to3_FinishNormaliseAttrName( name, nname ); Py_DECREF( value ); return -1; } } else { Py_INCREF( old_value ); } if ( !changed ) { changed = (old_value != value); if ( changed && ((traitd->flags & TRAIT_OBJECT_IDENTITY) == 0) ) { changed = PyObject_RichCompareBool( old_value, value, Py_NE ); if ( changed == -1 ) { PyErr_Clear(); } } } } if ( PyDict_SetItem( dict, nname, new_value ) < 0 ) { if ( PyErr_ExceptionMatches( PyExc_KeyError ) ) PyErr_SetObject( PyExc_AttributeError, nname ); Py_XDECREF( old_value ); Py_DECREF( name ); Py2to3_FinishNormaliseAttrName( name, nname ); Py_DECREF( value ); return -1; } rc = 0; if ( changed ) { if ( post_setattr != NULL ) rc = post_setattr( traitd, obj, nname, (traitd->flags & TRAIT_POST_SETATTR_ORIGINAL_VALUE)? original_value: value ); if ( (rc == 0) && do_notifiers ) rc = call_notifiers( tnotifiers, onotifiers, obj, nname, old_value, new_value ); } Py_XDECREF( old_value ); Py2to3_FinishNormaliseAttrName( name, nname ); Py_DECREF( value ); return rc; } /*----------------------------------------------------------------------------- | Assigns a value to a specified delegate trait attribute: +----------------------------------------------------------------------------*/ static int setattr_delegate ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * dict; PyObject * daname; PyObject * daname2; PyObject * temp; has_traits_object * delegate; has_traits_object * temp_delegate; int i, result; /* Follow the delegation chain until we find a non-delegated trait: */ daname = name; Py_INCREF( daname ); delegate = obj; for ( i = 0; ; ) { dict = delegate->obj_dict; if ( (dict != NULL) && ((temp_delegate = (has_traits_object *) PyDict_GetItem( dict, traitd->delegate_name )) != NULL) ) { delegate = temp_delegate; } else { // Handle the case when the delegate is not in the instance // dictionary (could be a method that returns the real delegate): delegate = (has_traits_object *) has_traits_getattro( delegate, traitd->delegate_name ); if ( delegate == NULL ) { Py_DECREF( daname ); return -1; } Py_DECREF( delegate ); } // Verify that 'delegate' is of type 'CHasTraits': if ( !PyHasTraits_Check( delegate ) ) { Py_DECREF( daname ); return bad_delegate_error2( obj, name ); } daname2 = traitd->delegate_attr_name( traitd, obj, daname ); Py_DECREF( daname ); daname = daname2; if ( ((delegate->itrait_dict == NULL) || ((traitd = (trait_object *) dict_getitem( delegate->itrait_dict, daname )) == NULL)) && ((traitd = (trait_object *) dict_getitem( delegate->ctrait_dict, daname )) == NULL) && ((traitd = get_prefix_trait( delegate, daname, 1 )) == NULL) ) { Py_DECREF( daname ); return bad_delegate_error( obj, name ); } if ( Py_TYPE(traitd) != ctrait_type ) { Py_DECREF( daname ); return fatal_trait_error(); } if ( traitd->delegate_attr_name == NULL ) { if ( traito->flags & TRAIT_MODIFY_DELEGATE ) { result = traitd->setattr( traitd, traitd, delegate, daname, value ); } else { result = traitd->setattr( traito, traitd, obj, name, value ); if ( result >= 0 ) { temp = PyObject_CallMethod( (PyObject *) obj, "_remove_trait_delegate_listener", "(Oi)", name, value != NULL ); if ( temp == NULL ) { result = -1; } else { Py_DECREF( temp ); } } } Py_DECREF( daname ); return result; } if ( ++i >= 100 ) return delegation_recursion_error( obj, name ); } } /*----------------------------------------------------------------------------- | Assigns a value to a specified property trait attribute: +----------------------------------------------------------------------------*/ static int setattr_property0 ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; if ( value == NULL ) return set_delete_property_error( obj, name ); result = PyObject_Call( traitd->delegate_prefix, empty_tuple, NULL ); if ( result == NULL ) return -1; Py_DECREF( result ); return 0; } static int setattr_property1 ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; PyObject * args; if ( value == NULL ) return set_delete_property_error( obj, name ); args = PyTuple_New( 1 ); if ( args == NULL ) return -1; PyTuple_SET_ITEM( args, 0, value ); Py_INCREF( value ); result = PyObject_Call( traitd->delegate_prefix, args, NULL ); Py_DECREF( args ); if ( result == NULL ) return -1; Py_DECREF( result ); return 0; } static int setattr_property2 ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; PyObject * args; if ( value == NULL ) return set_delete_property_error( obj, name ); args = PyTuple_New( 2 ); if ( args == NULL ) return -1; PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); PyTuple_SET_ITEM( args, 1, value ); Py_INCREF( obj ); Py_INCREF( value ); result = PyObject_Call( traitd->delegate_prefix, args, NULL ); Py_DECREF( args ); if ( result == NULL ) return -1; Py_DECREF( result ); return 0; } static int setattr_property3 ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; PyObject * args; if ( value == NULL ) return set_delete_property_error( obj, name ); args = PyTuple_New( 3 ); if ( args == NULL ) return -1; PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); PyTuple_SET_ITEM( args, 1, name ); PyTuple_SET_ITEM( args, 2, value ); Py_INCREF( obj ); Py_INCREF( name ); Py_INCREF( value ); result = PyObject_Call( traitd->delegate_prefix, args, NULL ); Py_DECREF( args ); if ( result == NULL ) return -1; Py_DECREF( result ); return 0; } /*----------------------------------------------------------------------------- | Validates then assigns a value to a specified property trait attribute: +----------------------------------------------------------------------------*/ static int setattr_validate_property ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { int result; PyObject * validated; if ( value == NULL ) return set_delete_property_error( obj, name ); validated = traitd->validate( traitd, obj, name, value ); if ( validated == NULL ) return -1; result = ((trait_setattr) traitd->post_setattr)( traito, traitd, obj, name, validated ); Py_DECREF( validated ); return result; } static PyObject * setattr_validate0 ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { return PyObject_Call( trait->py_validate, empty_tuple, NULL ); } static PyObject * setattr_validate1 ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * validated; PyObject * args = PyTuple_New( 1 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 0, value ); Py_INCREF( value ); validated = PyObject_Call( trait->py_validate, args, NULL ); Py_DECREF( args ); return validated; } static PyObject * setattr_validate2 ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * validated; PyObject * args = PyTuple_New( 2 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); PyTuple_SET_ITEM( args, 1, value ); Py_INCREF( obj ); Py_INCREF( value ); validated = PyObject_Call( trait->py_validate, args, NULL ); Py_DECREF( args ); return validated; } static PyObject * setattr_validate3 ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * validated; PyObject * args = PyTuple_New( 3 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); PyTuple_SET_ITEM( args, 1, name ); PyTuple_SET_ITEM( args, 2, value ); Py_INCREF( obj ); Py_INCREF( name ); Py_INCREF( value ); validated = PyObject_Call( trait->py_validate, args, NULL ); Py_DECREF( args ); return validated; } trait_validate setattr_validate_handlers[] = { setattr_validate0, setattr_validate1, setattr_validate2, setattr_validate3 }; /*----------------------------------------------------------------------------- | Raises an exception when attempting to assign to a disallowed trait: +----------------------------------------------------------------------------*/ static int setattr_disallow ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { return set_disallow_error( obj, name ); } /*----------------------------------------------------------------------------- | Assigns a value to a specified read-only trait attribute: +----------------------------------------------------------------------------*/ static int setattr_readonly ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * dict; PyObject * result; PyObject * nname; int rc; if ( value == NULL ) return delete_readonly_error( obj, name ); if ( traitd->default_value != Undefined ) return set_readonly_error( obj, name ); dict = obj->obj_dict; if ( dict == NULL ) return setattr_python( traito, traitd, obj, name, value ); nname = Py2to3_NormaliseAttrName(name); if( nname == NULL ){ return invalid_attribute_error(); } result = PyDict_GetItem( dict, nname ); if ( (result == NULL) || (result == Undefined) ) rc = setattr_python( traito, traitd, obj, nname, value ); else rc = set_readonly_error( obj, nname ); Py2to3_FinishNormaliseAttrName(name,nname); return rc; } /*----------------------------------------------------------------------------- | Generates exception on attempting to assign to a constant trait: +----------------------------------------------------------------------------*/ static int setattr_constant ( trait_object * traito, trait_object * traitd, has_traits_object * obj, PyObject * name, PyObject * value ) { if ( Py2to3_SimpleString_Check( name ) ) { PyErr_Format( TraitError, "Cannot modify the constant '%.400" Py2to3_PYERR_SIMPLE_STRING_FMTCHR "'" " attribute of a '%.50s' object.", Py2to3_PYERR_PREPARE_SIMPLE_STRING( name ), Py_TYPE(obj)->tp_name ); return -1; } return invalid_attribute_error(); } /*----------------------------------------------------------------------------- | Initializes a CTrait instance: +----------------------------------------------------------------------------*/ static trait_getattr getattr_handlers[] = { getattr_trait, getattr_python, getattr_event, getattr_delegate, getattr_event, getattr_disallow, getattr_trait, getattr_constant, getattr_generic, /* The following entries are used by the __getstate__ method: */ getattr_property0, getattr_property1, getattr_property2, getattr_property3, /* End of __getstate__ method entries */ NULL }; static trait_setattr setattr_handlers[] = { setattr_trait, setattr_python, setattr_event, setattr_delegate, setattr_event, setattr_disallow, setattr_readonly, setattr_constant, setattr_generic, /* The following entries are used by the __getstate__ method: */ setattr_property0, setattr_property1, setattr_property2, setattr_property3, /* End of __setstate__ method entries */ NULL }; static int trait_init ( trait_object * trait, PyObject * args, PyObject * kwds ) { int kind; if ( !PyArg_ParseTuple( args, "i", &kind ) ) return -1; if ( (kind >= 0) && (kind <= 8) ) { trait->getattr = getattr_handlers[ kind ]; trait->setattr = setattr_handlers[ kind ]; return 0; } return bad_trait_error(); } /*----------------------------------------------------------------------------- | Object clearing method: +----------------------------------------------------------------------------*/ static int trait_clear ( trait_object * trait ) { Py_CLEAR( trait->default_value ); Py_CLEAR( trait->py_validate ); Py_CLEAR( trait->py_post_setattr ); Py_CLEAR( trait->delegate_name ); Py_CLEAR( trait->delegate_prefix ); Py_CLEAR( trait->notifiers ); Py_CLEAR( trait->handler ); Py_CLEAR( trait->obj_dict ); return 0; } /*----------------------------------------------------------------------------- | Deallocates an unused 'CTrait' instance: +----------------------------------------------------------------------------*/ static void trait_dealloc ( trait_object * trait ) { PyObject_GC_UnTrack(trait); Py_TRASHCAN_SAFE_BEGIN(trait); trait_clear( trait ); Py_TYPE(trait)->tp_free( (PyObject *) trait ); Py_TRASHCAN_SAFE_END(trait); } /*----------------------------------------------------------------------------- | Garbage collector traversal method: +----------------------------------------------------------------------------*/ static int trait_traverse ( trait_object * trait, visitproc visit, void * arg ) { Py_VISIT( trait->default_value ); Py_VISIT( trait->py_validate ); Py_VISIT( trait->py_post_setattr ); Py_VISIT( trait->delegate_name ); Py_VISIT( trait->delegate_prefix ); Py_VISIT( (PyObject *) trait->notifiers ); Py_VISIT( trait->handler ); Py_VISIT( trait->obj_dict ); return 0; } /*----------------------------------------------------------------------------- | Casts a 'CTrait' which attempts to validate the argument passed as being a | valid value for the trait: +----------------------------------------------------------------------------*/ static PyObject * _trait_cast ( trait_object * trait, PyObject * args ) { PyObject * obj; PyObject * name; PyObject * value; PyObject * result; PyObject * info; switch ( PyTuple_GET_SIZE( args ) ) { case 1: obj = name = Py_None; value = PyTuple_GET_ITEM( args, 0 ); break; case 2: name = Py_None; obj = PyTuple_GET_ITEM( args, 0 ); value = PyTuple_GET_ITEM( args, 1 ); break; case 3: obj = PyTuple_GET_ITEM( args, 0 ); name = PyTuple_GET_ITEM( args, 1 ); value = PyTuple_GET_ITEM( args, 2 ); break; default: PyErr_Format( PyExc_TypeError, #if PY_VERSION_HEX >= 0x02050000 "Trait cast takes 1, 2 or 3 arguments (%zd given).", #else "Trait cast takes 1, 2 or 3 arguments (%u given).", #endif PyTuple_GET_SIZE( args ) ); return NULL; } if ( trait->validate == NULL ) { Py_INCREF( value ); return value; } result = trait->validate( trait, (has_traits_object *) obj, name, value ); if ( result == NULL ) { PyErr_Clear(); info = PyObject_CallMethod( trait->handler, "info", NULL ); if ( (info != NULL) && Py2to3_SimpleString_Check( info ) ) PyErr_Format( PyExc_ValueError, "Invalid value for trait, the value should be %" Py2to3_PYERR_SIMPLE_STRING_FMTCHR ".", Py2to3_PYERR_PREPARE_SIMPLE_STRING( info ) ); else PyErr_Format( PyExc_ValueError, "Invalid value for trait." ); Py_XDECREF( info ); } return result; } /*----------------------------------------------------------------------------- | Handles the 'getattr' operation on a 'CHasTraits' instance: +----------------------------------------------------------------------------*/ static PyObject * trait_getattro ( trait_object * obj, PyObject * name ) { PyObject * value = PyObject_GenericGetAttr( (PyObject *) obj, name ); if ( value != NULL ) return value; PyErr_Clear(); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the value of the 'default_value' field of a CTrait instance: +----------------------------------------------------------------------------*/ static PyObject * _trait_default_value ( trait_object * trait, PyObject * args ) { int value_type; PyObject * value; if ( PyArg_ParseTuple( args, "" ) ) { if ( trait->default_value == NULL ) return Py_BuildValue( "iO", 0, Py_None ); return Py_BuildValue( "iO", trait->default_value_type, trait->default_value ); } if ( !PyArg_ParseTuple( args, "iO", &value_type, &value ) ) return NULL; PyErr_Clear(); if ( (value_type < 0) || (value_type > 9) ) { PyErr_Format( PyExc_ValueError, "The default value type must be 0..9, but %d was specified.", value_type ); return NULL; } Py_INCREF( value ); Py_XDECREF( trait->default_value ); trait->default_value_type = value_type; trait->default_value = value; Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Gets the default value of a CTrait instance for a specified object and trait | name: +----------------------------------------------------------------------------*/ static PyObject * _trait_default_value_for ( trait_object * trait, PyObject * args ) { PyObject * object; PyObject * name; if ( !PyArg_ParseTuple( args, "OO", &object, &name ) ) return NULL; return default_value_for( trait, (has_traits_object *) object, name ); } /*----------------------------------------------------------------------------- | Calls a Python-based trait validator: +----------------------------------------------------------------------------*/ static PyObject * validate_trait_python ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; PyObject * args = PyTuple_New( 3 ); if ( args == NULL ) return NULL; Py_INCREF( obj ); Py_INCREF( name ); Py_INCREF( value ); PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); PyTuple_SET_ITEM( args, 1, name ); PyTuple_SET_ITEM( args, 2, value ); result = PyObject_Call( trait->py_validate, args, NULL ); Py_DECREF( args ); return result; } /*----------------------------------------------------------------------------- | Calls the specified validator function: +----------------------------------------------------------------------------*/ static PyObject * call_validator ( PyObject * validator, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; PyObject * args = PyTuple_New( 3 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); PyTuple_SET_ITEM( args, 1, name ); PyTuple_SET_ITEM( args, 2, value ); Py_INCREF( obj ); Py_INCREF( name ); Py_INCREF( value ); result = PyObject_Call( validator, args, NULL ); Py_DECREF( args ); return result; } /*----------------------------------------------------------------------------- | Calls the specified type convertor: +----------------------------------------------------------------------------*/ static PyObject * type_converter ( PyObject * type, PyObject * value ) { PyObject * result; PyObject * args = PyTuple_New( 1 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 0, value ); Py_INCREF( value ); result = PyObject_Call( type, args, NULL ); Py_DECREF( args ); return result; } /*----------------------------------------------------------------------------- | Verifies a Python value is of a specified type (or None): +----------------------------------------------------------------------------*/ static PyObject * validate_trait_type ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * type_info = trait->py_validate; int kind = PyTuple_GET_SIZE( type_info ); if ( ((kind == 3) && (value == Py_None)) || PyObject_TypeCheck( value, (PyTypeObject *) PyTuple_GET_ITEM( type_info, kind - 1 ) ) ) { Py_INCREF( value ); return value; } return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is an instance of a specified type (or None): +----------------------------------------------------------------------------*/ static PyObject * validate_trait_instance ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * type_info = trait->py_validate; int kind = PyTuple_GET_SIZE( type_info ); if ( ((kind == 3) && (value == Py_None)) || (PyObject_IsInstance( value, PyTuple_GET_ITEM( type_info, kind - 1 ) ) > 0) ) { Py_INCREF( value ); return value; } return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is of a the same type as the object being assigned | to (or None): +----------------------------------------------------------------------------*/ static PyObject * validate_trait_self_type ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { if ( ((PyTuple_GET_SIZE( trait->py_validate ) == 2) && (value == Py_None)) || PyObject_TypeCheck( value, Py_TYPE(obj) ) ) { Py_INCREF( value ); return value; } return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is an int within a specified range: +----------------------------------------------------------------------------*/ #if PY_MAJOR_VERSION < 3 static PyObject * validate_trait_int ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { register PyObject * low; register PyObject * high; long exclude_mask; long int_value; PyObject * type_info = trait->py_validate; if ( PyInt_Check( value ) ) { int_value = PyInt_AS_LONG( value ); low = PyTuple_GET_ITEM( type_info, 1 ); high = PyTuple_GET_ITEM( type_info, 2 ); exclude_mask = PyInt_AS_LONG( PyTuple_GET_ITEM( type_info, 3 ) ); if ( low != Py_None ) { if ( (exclude_mask & 1) != 0 ) { if ( int_value <= PyInt_AS_LONG( low ) ) goto error; } else { if ( int_value < PyInt_AS_LONG( low ) ) goto error; } } if ( high != Py_None ) { if ( (exclude_mask & 2) != 0 ) { if ( int_value >= PyInt_AS_LONG( high ) ) goto error; } else { if ( int_value > PyInt_AS_LONG( high ) ) goto error; } } Py_INCREF( value ); return value; } error: return raise_trait_error( trait, obj, name, value ); } #endif // #if PY_MAJOR_VERSION < 3 /*----------------------------------------------------------------------------- | Verifies a Python value is a Python integer (an int or long) +----------------------------------------------------------------------------*/ static PyObject * validate_trait_integer ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject *int_value, *result; /* Fast paths for the most common cases. */ #if PY_MAJOR_VERSION < 3 if (PyInt_CheckExact(value)) { Py_INCREF(value); return value; } else if (PyLong_CheckExact(value)) { long x; x = PyLong_AsLong(value); if (x == -1 && PyErr_Occurred()) { if (PyErr_ExceptionMatches(PyExc_OverflowError)) { PyErr_Clear(); Py_INCREF(value); return value; } return NULL; } else { return PyInt_FromLong(x); } } #else if (PyLong_CheckExact(value)) { Py_INCREF(value); return value; } #endif // #if PY_MAJOR_VERSION < 3 /* General case. The effect is supposed to be that of int(operator.index(value)). The extra call to 'int' is necessary because in Python 2, operator.index (somewhat controversially) does *not* always return something of type int or long, but can return instances of subclasses of int or long. */ int_value = PyNumber_Index(value); if (int_value == NULL) { /* Translate a TypeError to a TraitError, but pass on other exceptions. */ if (PyErr_ExceptionMatches(PyExc_TypeError)) { PyErr_Clear(); goto error; } return NULL; } #if PY_MAJOR_VERSION < 3 result = PyNumber_Int(int_value); #else result = PyNumber_Long(int_value); #endif // #if PY_MAJOR_VERSION < 3 Py_DECREF(int_value); return result; error: return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is a float within a specified range: +----------------------------------------------------------------------------*/ static PyObject * validate_trait_float ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { register PyObject * low; register PyObject * high; long exclude_mask; double float_value; PyObject * type_info = trait->py_validate; if ( !PyFloat_Check( value ) ) { float_value = Py2to3_PyNum_AsDouble( value ); if( float_value==-1 && PyErr_Occurred() ) goto error; value = PyFloat_FromDouble( float_value ); if ( value == NULL ) goto error; Py_INCREF( value ); } else { float_value = PyFloat_AS_DOUBLE( value ); } low = PyTuple_GET_ITEM( type_info, 1 ); high = PyTuple_GET_ITEM( type_info, 2 ); #if PY_MAJOR_VERSION < 3 exclude_mask = PyInt_AS_LONG( PyTuple_GET_ITEM( type_info, 3 ) ); #else exclude_mask = PyLong_AsLong( PyTuple_GET_ITEM( type_info, 3 ) ); if( exclude_mask==-1 && PyErr_Occurred()){ goto error; } #endif // #if PY_MAJOR_VERSION < 3 if ( low != Py_None ) { if ( (exclude_mask & 1) != 0 ) { if ( float_value <= PyFloat_AS_DOUBLE( low ) ) goto error; } else { if ( float_value < PyFloat_AS_DOUBLE( low ) ) goto error; } } if ( high != Py_None ) { if ( (exclude_mask & 2) != 0 ) { if ( float_value >= PyFloat_AS_DOUBLE( high ) ) goto error; } else { if ( float_value > PyFloat_AS_DOUBLE( high ) ) goto error; } } Py_INCREF( value ); return value; error: return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is in a specified enumeration: +----------------------------------------------------------------------------*/ static PyObject * validate_trait_enum ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * type_info = trait->py_validate; if ( PySequence_Contains( PyTuple_GET_ITEM( type_info, 1 ), value ) > 0 ) { Py_INCREF( value ); return value; } return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is in a specified map (i.e. dictionary): +----------------------------------------------------------------------------*/ static PyObject * validate_trait_map ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * type_info = trait->py_validate; if ( PyDict_GetItem( PyTuple_GET_ITEM( type_info, 1 ), value ) != NULL ) { Py_INCREF( value ); return value; } return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is in a specified prefix map (i.e. dictionary): +----------------------------------------------------------------------------*/ static PyObject * validate_trait_prefix_map ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * type_info = trait->py_validate; PyObject * mapped_value = PyDict_GetItem( PyTuple_GET_ITEM( type_info, 1 ), value ); if ( mapped_value != NULL ) { Py_INCREF( mapped_value ); return mapped_value; } return call_validator( PyTuple_GET_ITEM( trait->py_validate, 2 ), obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is a tuple of a specified type and content: +----------------------------------------------------------------------------*/ static PyObject * validate_trait_tuple_check ( PyObject * traits, has_traits_object * obj, PyObject * name, PyObject * value ) { trait_object * itrait; PyObject * bitem, * aitem, * tuple; int i, j, n; if ( PyTuple_Check( value ) ) { n = PyTuple_GET_SIZE( traits ); if ( n == PyTuple_GET_SIZE( value ) ) { tuple = NULL; for ( i = 0; i < n; i++ ) { bitem = PyTuple_GET_ITEM( value, i ); itrait = (trait_object *) PyTuple_GET_ITEM( traits, i ); if ( itrait->validate == NULL ) { aitem = bitem; Py_INCREF( aitem ); } else aitem = itrait->validate( itrait, obj, name, bitem ); if ( aitem == NULL ) { PyErr_Clear(); Py_XDECREF( tuple ); return NULL; } if ( tuple != NULL ) PyTuple_SET_ITEM( tuple, i, aitem ); else if ( aitem != bitem ) { tuple = PyTuple_New( n ); if ( tuple == NULL ) return NULL; for ( j = 0; j < i; j++ ) { bitem = PyTuple_GET_ITEM( value, j ); Py_INCREF( bitem ); PyTuple_SET_ITEM( tuple, j, bitem ); } PyTuple_SET_ITEM( tuple, i, aitem ); } else Py_DECREF( aitem ); } if ( tuple != NULL ) return tuple; Py_INCREF( value ); return value; } } return NULL; } static PyObject * validate_trait_tuple ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result = validate_trait_tuple_check( PyTuple_GET_ITEM( trait->py_validate, 1 ), obj, name, value ); if ( result != NULL ) return result; return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is of a specified (possibly coercable) type: +----------------------------------------------------------------------------*/ static PyObject * validate_trait_coerce_type ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { int i, n; PyObject * type2; PyObject * type_info = trait->py_validate; PyObject * type = PyTuple_GET_ITEM( type_info, 1 ); if ( PyObject_TypeCheck( value, (PyTypeObject *) type ) ) { Py_INCREF( value ); return value; } n = PyTuple_GET_SIZE( type_info ); for ( i = 2; i < n; i++ ) { type2 = PyTuple_GET_ITEM( type_info, i ); if ( type2 == Py_None ) break; if ( PyObject_TypeCheck( value, (PyTypeObject *) type2 ) ) { Py_INCREF( value ); return value; } } for ( i++; i < n; i++ ) { type2 = PyTuple_GET_ITEM( type_info, i ); if ( PyObject_TypeCheck( value, (PyTypeObject *) type2 ) ) return type_converter( type, value ); } return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value is of a specified (possibly castable) type: +----------------------------------------------------------------------------*/ static PyObject * validate_trait_cast_type ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; PyObject * type_info = trait->py_validate; PyObject * type = PyTuple_GET_ITEM( type_info, 1 ); if ( PyObject_TypeCheck( value, (PyTypeObject *) type ) ) { Py_INCREF( value ); return value; } if ( (result = type_converter( type, value )) != NULL ) return result; return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value satisifies a specified function validator: +----------------------------------------------------------------------------*/ static PyObject * validate_trait_function ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; result = call_validator( PyTuple_GET_ITEM( trait->py_validate, 1 ), obj, name, value ); if ( result != NULL ) return result; return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Attempts to 'adapt' an object to a specified interface: +----------------------------------------------------------------------------*/ static PyObject * validate_trait_adapt ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; PyObject * args; PyObject * type; PyObject * type_info = trait->py_validate; long mode, rc; if ( value == Py_None ) { #if PY_MAJOR_VERSION < 3 if ( PyInt_AS_LONG( PyTuple_GET_ITEM( type_info, 3 ) ) ) { #else mode = PyLong_AsLong( PyTuple_GET_ITEM( type_info, 3 ) ); if( mode==-1 && PyErr_Occurred()) return NULL; if ( mode ) { #endif // #if PY_MAJOR_VERSION < 3 Py_INCREF( value ); return value; } return raise_trait_error( trait, obj, name, value ); } type = PyTuple_GET_ITEM( type_info, 1 ); #if PY_MAJOR_VERSION < 3 mode = PyInt_AS_LONG( PyTuple_GET_ITEM( type_info, 2 ) ); #else mode = PyLong_AsLong( PyTuple_GET_ITEM( type_info, 2 ) ); if( mode==-1 && PyErr_Occurred()) return NULL; #endif // #if PY_MAJOR_VERSION < 3 if ( mode == 2 ) { args = PyTuple_New( 3 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 2, Py_None ); Py_INCREF( Py_None ); } else { args = PyTuple_New( 2 ); if ( args == NULL ) return NULL; } PyTuple_SET_ITEM( args, 0, value ); PyTuple_SET_ITEM( args, 1, type ); Py_INCREF( value ); Py_INCREF( type ); result = PyObject_Call( adapt, args, NULL ); if ( result != NULL ) { if ( result != Py_None ) { if ( (mode > 0) || (result == value) ) { Py_DECREF( args ); return result; } Py_DECREF( result ); goto check_implements; } Py_DECREF( result ); result = PyObject_Call( validate_implements, args, NULL ); #if PY_MAJOR_VERSION < 3 rc = PyInt_AS_LONG( result ); #else rc = PyLong_AsLong( result ); #endif Py_DECREF( args ); Py_DECREF( result ); #if PY_MAJOR_VERSION >= 3 if( rc==-1 && PyErr_Occurred()){ return NULL; } #endif if ( rc ) { Py_INCREF( value ); return value; } result = default_value_for( trait, obj, name ); if ( result != NULL ) return result; PyErr_Clear(); return raise_trait_error( trait, obj, name, value ); } PyErr_Clear(); check_implements: result = PyObject_Call( validate_implements, args, NULL ); #if PY_MAJOR_VERSION < 3 rc = PyInt_AS_LONG( result ); #else rc = PyLong_AsLong( result ); #endif Py_DECREF( args ); Py_DECREF( result ); #if PY_MAJOR_VERSION >= 3 if( rc==-1 && PyErr_Occurred()){ return NULL; } #endif if ( rc ) { Py_INCREF( value ); return value; } return raise_trait_error( trait, obj, name, value ); } /*----------------------------------------------------------------------------- | Verifies a Python value satisifies a complex trait definition: +----------------------------------------------------------------------------*/ static PyObject * validate_trait_complex ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { int i, j, k, kind; long exclude_mask, mode, rc; double float_value; PyObject * low, * high, * result, * type_info, * type, * type2, * args; PyObject * int_value; PyObject * list_type_info = PyTuple_GET_ITEM( trait->py_validate, 1 ); int n = PyTuple_GET_SIZE( list_type_info ); for ( i = 0; i < n; i++ ) { type_info = PyTuple_GET_ITEM( list_type_info, i ); switch ( Py2to3_PyNum_AsLong( PyTuple_GET_ITEM( type_info, 0 ) ) ) { case 0: /* Type check: */ kind = PyTuple_GET_SIZE( type_info ); if ( ((kind == 3) && (value == Py_None)) || PyObject_TypeCheck( value, (PyTypeObject *) PyTuple_GET_ITEM( type_info, kind - 1 ) ) ) goto done; break; case 1: /* Instance check: */ kind = PyTuple_GET_SIZE( type_info ); if ( ((kind == 3) && (value == Py_None)) || (PyObject_IsInstance( value, PyTuple_GET_ITEM( type_info, kind - 1 ) ) > 0) ) goto done; break; case 2: /* Self type check: */ if ( ((PyTuple_GET_SIZE( type_info ) == 2) && (value == Py_None)) || PyObject_TypeCheck( value, Py_TYPE(obj) ) ) goto done; break; #if PY_MAJOR_VERSION < 3 case 3: /* Integer range check: */ if ( PyInt_Check( value ) ) { long int_value; int_value = PyInt_AS_LONG( value ); low = PyTuple_GET_ITEM( type_info, 1 ); high = PyTuple_GET_ITEM( type_info, 2 ); exclude_mask = PyInt_AS_LONG( PyTuple_GET_ITEM( type_info, 3 ) ); if ( low != Py_None ) { if ( (exclude_mask & 1) != 0 ) { if ( int_value <= PyInt_AS_LONG( low ) ) break; } else { if ( int_value < PyInt_AS_LONG( low ) ) break; } } if ( high != Py_None ) { if ( (exclude_mask & 2) != 0 ) { if ( int_value >= PyInt_AS_LONG( high ) ) break; } else { if ( int_value > PyInt_AS_LONG( high ) ) break; } } goto done; } break; #endif case 4: /* Floating point range check: */ if ( !PyFloat_Check( value ) ) { float_value = Py2to3_PyNum_AsDouble( value ); if( float_value==-1 && PyErr_Occurred() ){ PyErr_Clear(); break; } value = PyFloat_FromDouble( float_value ); if ( value == NULL ) { PyErr_Clear(); break; } } else { float_value = PyFloat_AS_DOUBLE( value ); Py_INCREF( value ); } low = PyTuple_GET_ITEM( type_info, 1 ); high = PyTuple_GET_ITEM( type_info, 2 ); #if PY_MAJOR_VERSION < 3 exclude_mask = PyInt_AS_LONG( PyTuple_GET_ITEM( type_info, 3 ) ); #else exclude_mask = PyLong_AsLong( PyTuple_GET_ITEM( type_info, 3 ) ); if( exclude_mask==-1 && PyErr_Occurred()){ PyErr_Clear(); break; } #endif // #if PY_MAJOR_VERSION < 3 if ( low != Py_None ) { if ( (exclude_mask & 1) != 0 ) { if ( float_value <= PyFloat_AS_DOUBLE( low ) ) break; } else { if ( float_value < PyFloat_AS_DOUBLE( low ) ) break; } } if ( high != Py_None ) { if ( (exclude_mask & 2) != 0 ) { if ( float_value >= PyFloat_AS_DOUBLE( high ) ) break; } else { if ( float_value > PyFloat_AS_DOUBLE( high ) ) break; } } goto done2; case 5: /* Enumerated item check: */ if ( PySequence_Contains( PyTuple_GET_ITEM( type_info, 1 ), value ) > 0 ) goto done; break; case 6: /* Mapped item check: */ if ( PyDict_GetItem( PyTuple_GET_ITEM( type_info, 1 ), value ) != NULL ) goto done; PyErr_Clear(); break; case 8: /* Perform 'slow' validate check: */ result = PyObject_CallMethod( PyTuple_GET_ITEM( type_info, 1 ), "slow_validate", "(OOO)", obj, name, value ); if ( result != NULL ) return result; PyErr_Clear(); break; case 9: /* Tuple item check: */ result = validate_trait_tuple_check( PyTuple_GET_ITEM( type_info, 1 ), obj, name, value ); if ( result != NULL ) return result; PyErr_Clear(); break; case 10: /* Prefix map item check: */ result = PyDict_GetItem( PyTuple_GET_ITEM( type_info, 1 ), value ); if ( result != NULL ) { Py_INCREF( result ); return result; } result = call_validator( PyTuple_GET_ITEM( type_info, 2 ), obj, name, value ); if ( result != NULL ) return result; PyErr_Clear(); break; case 11: /* Coercable type check: */ type = PyTuple_GET_ITEM( type_info, 1 ); if ( PyObject_TypeCheck( value, (PyTypeObject *) type ) ) goto done; k = PyTuple_GET_SIZE( type_info ); for ( j = 2; j < k; j++ ) { type2 = PyTuple_GET_ITEM( type_info, j ); if ( type2 == Py_None ) break; if ( PyObject_TypeCheck( value, (PyTypeObject *) type2 ) ) goto done; } for ( j++; j < k; j++ ) { type2 = PyTuple_GET_ITEM( type_info, j ); if ( PyObject_TypeCheck( value, (PyTypeObject *) type2 ) ) return type_converter( type, value ); } break; case 12: /* Castable type check */ type = PyTuple_GET_ITEM( type_info, 1 ); if ( PyObject_TypeCheck( value, (PyTypeObject *) type ) ) goto done; if ( (result = type_converter( type, value )) != NULL ) return result; PyErr_Clear(); break; case 13: /* Function validator check: */ result = call_validator( PyTuple_GET_ITEM( type_info, 1 ), obj, name, value ); if ( result != NULL ) return result; PyErr_Clear(); break; /* case 14: Python-based validator check: */ /* case 15..18: Property 'setattr' validate checks: */ case 19: /* PyProtocols 'adapt' check: */ if ( value == Py_None ) { #if PY_MAJOR_VERSION < 3 if ( PyInt_AS_LONG( PyTuple_GET_ITEM( type_info, 3 ) ) ) #else mode = PyLong_AsLong( PyTuple_GET_ITEM( type_info, 2 ) ); if( mode==-1 && PyErr_Occurred()) return NULL; if( mode ) #endif // #if PY_MAJOR_VERSION < 3 goto done; break; } type = PyTuple_GET_ITEM( type_info, 1 ); #if PY_MAJOR_VERSION < 3 mode = PyInt_AS_LONG( PyTuple_GET_ITEM( type_info, 2 ) ); #else mode = PyLong_AsLong( PyTuple_GET_ITEM( type_info, 2 ) ); if( mode==-1 && PyErr_Occurred()) return NULL; #endif // #if PY_MAJOR_VERSION < 3 if ( mode == 2 ) { args = PyTuple_New( 3 ); if ( args == NULL ) return NULL; PyTuple_SET_ITEM( args, 2, Py_None ); Py_INCREF( Py_None ); } else { args = PyTuple_New( 2 ); if ( args == NULL ) return NULL; } PyTuple_SET_ITEM( args, 0, value ); PyTuple_SET_ITEM( args, 1, type ); Py_INCREF( value ); Py_INCREF( type ); result = PyObject_Call( adapt, args, NULL ); if ( result != NULL ) { if ( result != Py_None ) { if ( (mode == 0) && (result != value) ) { Py_DECREF( result ); goto check_implements; } Py_DECREF( args ); return result; } Py_DECREF( result ); result = PyObject_Call( validate_implements, args, NULL ); #if PY_MAJOR_VERSION < 3 rc = PyInt_AS_LONG( result ); #else rc = PyLong_AsLong( result ); if( rc==-1 && PyErr_Occurred()){ PyErr_Clear(); Py_DECREF( args ); Py_DECREF( result ); break; } #endif // #if PY_MAJOR_VERSION < 3 Py_DECREF( args ); Py_DECREF( result ); if ( rc ) goto done; result = default_value_for( trait, obj, name ); if ( result != NULL ) return result; PyErr_Clear(); break; } PyErr_Clear(); check_implements: result = PyObject_Call( validate_implements, args, NULL ); #if PY_MAJOR_VERSION < 3 rc = PyInt_AS_LONG( result ); #else rc = PyLong_AsLong( result ); if( rc==-1 && PyErr_Occurred()){ PyErr_Clear(); Py_DECREF( args ); Py_DECREF( result ); break; } #endif // #if PY_MAJOR_VERSION < 3 Py_DECREF( args ); Py_DECREF( result ); if ( rc ) goto done; break; case 20: /* Integer check: */ /* Fast paths for the most common cases. */ #if PY_MAJOR_VERSION < 3 if (PyInt_CheckExact(value)) { Py_INCREF(value); return value; } else if (PyLong_CheckExact(value)) { long x; x = PyLong_AsLong(value); if (x == -1 && PyErr_Occurred()) { if (PyErr_ExceptionMatches(PyExc_OverflowError)) { PyErr_Clear(); Py_INCREF(value); return value; } return NULL; } else { return PyInt_FromLong(x); } } #else if (PyLong_CheckExact(value)) { Py_INCREF(value); return value; } #endif // #if PY_MAJOR_VERSION < 3 /* General case. */ int_value = PyNumber_Index(value); if (int_value == NULL) { /* Translate a TypeError to a TraitError, but pass on other exceptions. */ if (PyErr_ExceptionMatches(PyExc_TypeError)) { PyErr_Clear(); break; } return NULL; } #if PY_MAJOR_VERSION < 3 result = PyNumber_Int(int_value); #else result = PyNumber_Long(int_value); #endif // #if PY_MAJOR_VERSION < 3 Py_DECREF(int_value); return result; default: /* Should never happen...indicates an internal error: */ goto error; } } error: return raise_trait_error( trait, obj, name, value ); done: Py_INCREF( value ); done2: return value; } /*----------------------------------------------------------------------------- | Sets the value of the 'validate' field of a CTrait instance: +----------------------------------------------------------------------------*/ static trait_validate validate_handlers[] = { validate_trait_type, validate_trait_instance, #if PY_MAJOR_VERSION < 3 validate_trait_self_type, validate_trait_int, #else validate_trait_self_type, NULL, #endif // #if PY_MAJOR_VERSION < 3 validate_trait_float, validate_trait_enum, validate_trait_map, validate_trait_complex, NULL, validate_trait_tuple, validate_trait_prefix_map, validate_trait_coerce_type, validate_trait_cast_type, validate_trait_function, validate_trait_python, /* The following entries are used by the __getstate__ method... */ setattr_validate0, setattr_validate1, setattr_validate2, setattr_validate3, /* ...End of __getstate__ method entries */ validate_trait_adapt, validate_trait_integer, }; static PyObject * _trait_set_validate ( trait_object * trait, PyObject * args ) { PyObject * validate; PyObject * v1, * v2, * v3; int n, kind; if ( !PyArg_ParseTuple( args, "O", &validate ) ) return NULL; if ( PyCallable_Check( validate ) ) { kind = 14; goto done; } if ( PyTuple_CheckExact( validate ) ) { n = PyTuple_GET_SIZE( validate ); if ( n > 0 ) { kind = Py2to3_PyNum_AsLong( PyTuple_GET_ITEM( validate, 0 ) ); switch ( kind ) { case 0: /* Type check: */ if ( (n <= 3) && PyType_Check( PyTuple_GET_ITEM( validate, n - 1 ) ) && ((n == 2) || (PyTuple_GET_ITEM( validate, 1 ) == Py_None)) ) goto done; break; case 1: /* Instance check: */ if ( (n <= 3) && ((n == 2) || (PyTuple_GET_ITEM( validate, 1 ) == Py_None)) ) goto done; break; case 2: /* Self type check: */ if ( (n == 1) || ((n == 2) && (PyTuple_GET_ITEM( validate, 1 ) == Py_None)) ) goto done; break; #if PY_MAJOR_VERSION < 3 case 3: /* Integer range check: */ if ( n == 4 ) { v1 = PyTuple_GET_ITEM( validate, 1 ); v2 = PyTuple_GET_ITEM( validate, 2 ); v3 = PyTuple_GET_ITEM( validate, 3 ); if ( ((v1 == Py_None) || PyInt_Check( v1 )) && ((v2 == Py_None) || PyInt_Check( v2 )) && PyInt_Check( v3 ) ) goto done; } break; #endif // #if PY_MAJOR_VERSION < 3 case 4: /* Floating point range check: */ if ( n == 4 ) { v1 = PyTuple_GET_ITEM( validate, 1 ); v2 = PyTuple_GET_ITEM( validate, 2 ); v3 = PyTuple_GET_ITEM( validate, 3 ); if ( ((v1 == Py_None) || PyFloat_Check( v1 )) && ((v2 == Py_None) || PyFloat_Check( v2 )) && Py2to3_PyNum_Check( v3 ) ) goto done; } break; case 5: /* Enumerated item check: */ if ( n == 2 ) { v1 = PyTuple_GET_ITEM( validate, 1 ); if ( PyTuple_CheckExact( v1 ) ) goto done; } break; case 6: /* Mapped item check: */ if ( n == 2 ) { v1 = PyTuple_GET_ITEM( validate, 1 ); if ( PyDict_Check( v1 ) ) goto done; } break; case 7: /* TraitComplex item check: */ if ( n == 2 ) { v1 = PyTuple_GET_ITEM( validate, 1 ); if ( PyTuple_CheckExact( v1 ) ) goto done; } break; /* case 8: 'Slow' validate check: */ case 9: /* TupleOf item check: */ if ( n == 2 ) { v1 = PyTuple_GET_ITEM( validate, 1 ); if ( PyTuple_CheckExact( v1 ) ) goto done; } break; case 10: /* Prefix map item check: */ if ( n == 3 ) { v1 = PyTuple_GET_ITEM( validate, 1 ); if ( PyDict_Check( v1 ) ) goto done; } break; case 11: /* Coercable type check: */ if ( n >= 2 ) goto done; break; case 12: /* Castable type check: */ if ( n == 2 ) goto done; break; case 13: /* Function validator check: */ if ( n == 2 ) { v1 = PyTuple_GET_ITEM( validate, 1 ); if ( PyCallable_Check( v1 ) ) goto done; } break; /* case 14: Python-based validator check: */ /* case 15..18: Property 'setattr' validate checks: */ case 19: /* PyProtocols 'adapt' check: */ /* Note: We don't check the 'class' argument (item[1]) because some old-style code creates classes that are not strictly classes or types (e.g. VTK), and yet they work correctly with the rest of the Instance code */ if ( (n == 4) && Py2to3_PyNum_Check( PyTuple_GET_ITEM( validate, 2 ) ) && PyBool_Check( PyTuple_GET_ITEM( validate, 3 ) ) ) { goto done; } break; case 20: /* Integer check: */ if ( n == 1 ) goto done; break; } } } PyErr_SetString( PyExc_ValueError, "The argument must be a tuple or callable." ); return NULL; done: trait->validate = validate_handlers[ kind ]; Py_INCREF( validate ); Py_XDECREF( trait->py_validate ); trait->py_validate = validate; Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Gets the value of the 'validate' field of a CTrait instance: +----------------------------------------------------------------------------*/ static PyObject * _trait_get_validate ( trait_object * trait ) { if ( trait->validate != NULL ) { Py_INCREF( trait->py_validate ); return trait->py_validate; } Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Validates that a particular value can be assigned to an object trait: +----------------------------------------------------------------------------*/ static PyObject * _trait_validate ( trait_object * trait, PyObject * args ) { PyObject * object, * name, * value; if ( !PyArg_ParseTuple( args, "OOO", &object, &name, &value ) ) return NULL; if ( trait->validate == NULL ) { Py_INCREF( value ); return value; } return trait->validate( trait, (has_traits_object *)object, name, value ); } /*----------------------------------------------------------------------------- | Calls a Python-based trait post_setattr handler: +----------------------------------------------------------------------------*/ static int post_setattr_trait_python ( trait_object * trait, has_traits_object * obj, PyObject * name, PyObject * value ) { PyObject * result; PyObject * args = PyTuple_New( 3 ); if ( args == NULL ) return -1; Py_INCREF( obj ); Py_INCREF( name ); Py_INCREF( value ); PyTuple_SET_ITEM( args, 0, (PyObject *) obj ); PyTuple_SET_ITEM( args, 1, name ); PyTuple_SET_ITEM( args, 2, value ); result = PyObject_Call( trait->py_post_setattr, args, NULL ); Py_DECREF( args ); if ( result == NULL ) return -1; Py_DECREF( result ); return 0; } /*----------------------------------------------------------------------------- | Returns the various forms of delegate names: +----------------------------------------------------------------------------*/ static PyObject * delegate_attr_name_name ( trait_object * trait, has_traits_object * obj, PyObject * name ) { Py_INCREF( name ); return name; } static PyObject * delegate_attr_name_prefix ( trait_object * trait, has_traits_object * obj, PyObject * name ) { Py_INCREF( trait->delegate_prefix ); return trait->delegate_prefix; } static PyObject * delegate_attr_name_prefix_name ( trait_object * trait, has_traits_object * obj, PyObject * name ) { #if PY_MAJOR_VERSION < 3 char * p; int prefix_len = PyString_GET_SIZE( trait->delegate_prefix ); int name_len = PyString_GET_SIZE( name ); int total_len = prefix_len + name_len; PyObject * result = PyString_FromStringAndSize( NULL, total_len ); if ( result == NULL ) { Py_INCREF( Py_None ); return Py_None; } p = PyString_AS_STRING( result ); memcpy( p, PyString_AS_STRING( trait->delegate_prefix ), prefix_len ); memcpy( p + prefix_len, PyString_AS_STRING( name ), name_len ); #else PyObject *result = PyUnicode_Concat( trait->delegate_prefix, name ); #endif return result; } static PyObject * delegate_attr_name_class_name ( trait_object * trait, has_traits_object * obj, PyObject * name ) { PyObject * prefix, * result; #if PY_MAJOR_VERSION < 3 char * p; int prefix_len, name_len, total_len; #endif prefix = PyObject_GetAttr( (PyObject *) Py_TYPE(obj), class_prefix ); // fixme: Should verify that prefix is a string... if ( prefix == NULL ) { PyErr_Clear(); Py_INCREF( name ); return name; } #if PY_MAJOR_VERSION < 3 prefix_len = PyString_GET_SIZE( prefix ); name_len = PyString_GET_SIZE( name ); total_len = prefix_len + name_len; result = PyString_FromStringAndSize( NULL, total_len ); if ( result == NULL ) { Py_INCREF( Py_None ); return Py_None; } p = PyString_AS_STRING( result ); memcpy( p, PyString_AS_STRING( prefix ), prefix_len ); memcpy( p + prefix_len, PyString_AS_STRING( name ), name_len ); #else result = PyUnicode_Concat( prefix, name ); #endif Py_DECREF( prefix ); return result; } /*----------------------------------------------------------------------------- | Sets the value of the 'post_setattr' field of a CTrait instance: +----------------------------------------------------------------------------*/ static delegate_attr_name_func delegate_attr_name_handlers[] = { delegate_attr_name_name, delegate_attr_name_prefix, delegate_attr_name_prefix_name, delegate_attr_name_class_name, NULL }; static PyObject * _trait_delegate ( trait_object * trait, PyObject * args ) { PyObject * delegate_name; PyObject * delegate_prefix; int prefix_type; int modify_delegate; #if PY_MAJOR_VERSION < 3 { const char *delegate_name_str; const char *delegate_prefix_str; if ( !PyArg_ParseTuple( args, "ssii", &delegate_name_str, &delegate_prefix_str, &prefix_type, &modify_delegate ) ) return NULL; delegate_name = PyString_FromString(delegate_name_str); delegate_prefix = PyString_FromString(delegate_prefix_str); if(!delegate_name || !delegate_prefix){ Py_XDECREF(delegate_name); Py_XDECREF(delegate_prefix); return NULL; } } #else if ( !PyArg_ParseTuple( args, "UUii", &delegate_name, &delegate_prefix, &prefix_type, &modify_delegate ) ) return NULL; Py_INCREF( delegate_name ); Py_INCREF( delegate_prefix ); #endif if ( modify_delegate ) { trait->flags |= TRAIT_MODIFY_DELEGATE; } else { trait->flags &= (~TRAIT_MODIFY_DELEGATE); } trait->delegate_name = delegate_name; trait->delegate_prefix = delegate_prefix; if ( (prefix_type < 0) || (prefix_type > 3) ) prefix_type = 0; trait->delegate_attr_name = delegate_attr_name_handlers[ prefix_type ]; Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the value of the 'comparison' mode of a CTrait instance: +----------------------------------------------------------------------------*/ static PyObject * _trait_rich_comparison ( trait_object * trait, PyObject * args ) { int compare_type; if ( !PyArg_ParseTuple( args, "i", &compare_type ) ) return NULL; trait->flags &= (~(TRAIT_NO_VALUE_TEST | TRAIT_OBJECT_IDENTITY)); if ( compare_type == 0 ) trait->flags |= TRAIT_OBJECT_IDENTITY; Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the appropriate value comparison mode flags of a CTrait instance: +----------------------------------------------------------------------------*/ static PyObject * _trait_comparison_mode ( trait_object * trait, PyObject * args ) { int comparison_mode; if ( !PyArg_ParseTuple( args, "i", &comparison_mode ) ) return NULL; trait->flags &= (~(TRAIT_NO_VALUE_TEST | TRAIT_OBJECT_IDENTITY)); switch ( comparison_mode ) { case 0: trait->flags |= TRAIT_NO_VALUE_TEST; break; case 1: trait->flags |= TRAIT_OBJECT_IDENTITY; default: break; } Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the value of the 'value allowed' mode of a CTrait instance: +----------------------------------------------------------------------------*/ static PyObject * _trait_value_allowed ( trait_object * trait, PyObject * args ) { int value_allowed; if ( !PyArg_ParseTuple( args, "i", &value_allowed ) ) return NULL; if ( value_allowed ) { trait->flags |= TRAIT_VALUE_ALLOWED; } else { trait->flags &= (~TRAIT_VALUE_ALLOWED); } Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the value of the 'value trait' mode of a CTrait instance: +----------------------------------------------------------------------------*/ static PyObject * _trait_value_property ( trait_object * trait, PyObject * args ) { int value_trait; if ( !PyArg_ParseTuple( args, "i", &value_trait ) ) return NULL; if ( value_trait ) { trait->flags |= TRAIT_VALUE_PROPERTY; } else { trait->flags &= (~TRAIT_VALUE_PROPERTY); } Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the value of the 'setattr_original_value' flag of a CTrait instance: +----------------------------------------------------------------------------*/ static PyObject * _trait_setattr_original_value ( trait_object * trait, PyObject * args ) { int original_value; if ( !PyArg_ParseTuple( args, "i", &original_value ) ) return NULL; if ( original_value != 0 ) { trait->flags |= TRAIT_SETATTR_ORIGINAL_VALUE; } else { trait->flags &= (~TRAIT_SETATTR_ORIGINAL_VALUE); } Py_INCREF( trait ); return (PyObject *) trait; } /*----------------------------------------------------------------------------- | Sets the value of the 'post_setattr_original_value' flag of a CTrait | instance (used in the processing of 'post_settattr' calls): +----------------------------------------------------------------------------*/ static PyObject * _trait_post_setattr_original_value ( trait_object * trait, PyObject * args ) { int original_value; if ( !PyArg_ParseTuple( args, "i", &original_value ) ) return NULL; if ( original_value != 0 ) { trait->flags |= TRAIT_POST_SETATTR_ORIGINAL_VALUE; } else { trait->flags &= (~TRAIT_POST_SETATTR_ORIGINAL_VALUE); } Py_INCREF( trait ); return (PyObject *) trait; } /*----------------------------------------------------------------------------- | Sets the value of the 'is_mapped' flag of a CTrait instance (used in the | processing of the default value of a trait with a 'post_settattr' handler): +----------------------------------------------------------------------------*/ static PyObject * _trait_is_mapped ( trait_object * trait, PyObject * args ) { int is_mapped; if ( !PyArg_ParseTuple( args, "i", &is_mapped ) ) return NULL; if ( is_mapped != 0 ) { trait->flags |= TRAIT_IS_MAPPED; } else { trait->flags &= (~TRAIT_IS_MAPPED); } Py_INCREF( trait ); return (PyObject *) trait; } /*----------------------------------------------------------------------------- | Sets the 'property' value fields of a CTrait instance: +----------------------------------------------------------------------------*/ static trait_setattr setattr_property_handlers[] = { setattr_property0, setattr_property1, setattr_property2, setattr_property3, /* The following entries are used by the __getstate__ method__: */ (trait_setattr) post_setattr_trait_python, NULL }; static PyObject * _trait_property ( trait_object * trait, PyObject * args ) { PyObject * get, * set, * validate, * result, * temp; int get_n, set_n, validate_n; if ( PyTuple_GET_SIZE( args ) == 0 ) { if ( trait->flags & TRAIT_PROPERTY ) { result = PyTuple_New( 3 ); if ( result != NULL ) { PyTuple_SET_ITEM( result, 0, temp = trait->delegate_name ); Py_INCREF( temp ); PyTuple_SET_ITEM( result, 1, temp = trait->delegate_prefix ); Py_INCREF( temp ); PyTuple_SET_ITEM( result, 2, temp = trait->py_validate ); Py_INCREF( temp ); return result; } return NULL; } else { Py_INCREF( Py_None ); return Py_None; } } if ( !PyArg_ParseTuple( args, "OiOiOi", &get, &get_n, &set, &set_n, &validate, &validate_n ) ) return NULL; if ( !PyCallable_Check( get ) || !PyCallable_Check( set ) || ((validate != Py_None) && !PyCallable_Check( validate )) || (get_n < 0) || (get_n > 3) || (set_n < 0) || (set_n > 3) || (validate_n < 0) || (validate_n > 3) ) { PyErr_SetString( PyExc_ValueError, "Invalid arguments." ); return NULL; } trait->flags |= TRAIT_PROPERTY; trait->getattr = getattr_property_handlers[ get_n ]; if ( validate != Py_None ) { trait->setattr = setattr_validate_property; trait->post_setattr = (trait_post_setattr) setattr_property_handlers[ set_n ]; trait->validate = setattr_validate_handlers[ validate_n ]; } else trait->setattr = setattr_property_handlers[ set_n ]; trait->delegate_name = get; trait->delegate_prefix = set; trait->py_validate = validate; Py_INCREF( get ); Py_INCREF( set ); Py_INCREF( validate ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Clones one trait into another: +----------------------------------------------------------------------------*/ static void trait_clone ( trait_object * trait, trait_object * source ) { trait->flags = source->flags; trait->getattr = source->getattr; trait->setattr = source->setattr; trait->post_setattr = source->post_setattr; trait->py_post_setattr = source->py_post_setattr; trait->validate = source->validate; trait->py_validate = source->py_validate; trait->default_value_type = source->default_value_type; trait->default_value = source->default_value; trait->delegate_name = source->delegate_name; trait->delegate_prefix = source->delegate_prefix; trait->delegate_attr_name = source->delegate_attr_name; trait->handler = source->handler; Py_XINCREF( trait->py_post_setattr ); Py_XINCREF( trait->py_validate ); Py_XINCREF( trait->delegate_name ); Py_XINCREF( trait->default_value ); Py_XINCREF( trait->delegate_prefix ); Py_XINCREF( trait->handler ); } static PyObject * _trait_clone ( trait_object * trait, PyObject * args ) { trait_object * source; if ( !PyArg_ParseTuple( args, "O!", ctrait_type, &source ) ) return NULL; trait_clone( trait, source ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Returns (and optionally creates) the trait 'notifiers' list: +----------------------------------------------------------------------------*/ static PyObject * _trait_notifiers ( trait_object * trait, PyObject * args ) { PyObject * result; PyObject * list; int force_create; if ( !PyArg_ParseTuple( args, "i", &force_create ) ) return NULL; result = (PyObject *) trait->notifiers; if ( result == NULL ) { result = Py_None; if ( force_create && ((list = PyList_New( 0 )) != NULL) ) trait->notifiers = (PyListObject *) (result = list); } Py_INCREF( result ); return result; } /*----------------------------------------------------------------------------- | Converts a function to an index into a function table: +----------------------------------------------------------------------------*/ static int func_index ( void * function, void ** function_table ) { int i; for ( i = 0; function != function_table[i]; i++ ); return i; } /*----------------------------------------------------------------------------- | Gets the pickleable state of the trait: +----------------------------------------------------------------------------*/ static PyObject * _trait_getstate ( trait_object * trait, PyObject * args ) { PyObject * result; if ( !PyArg_ParseTuple( args, "" ) ) return NULL; result = PyTuple_New( 15 ); if ( result == NULL ) return NULL; PyTuple_SET_ITEM( result, 0, Py2to3_PyNum_FromLong( func_index( (void *) trait->getattr, (void **) getattr_handlers ) ) ); PyTuple_SET_ITEM( result, 1, Py2to3_PyNum_FromLong( func_index( (void *) trait->setattr, (void **) setattr_handlers ) ) ); PyTuple_SET_ITEM( result, 2, Py2to3_PyNum_FromLong( func_index( (void *) trait->post_setattr, (void **) setattr_property_handlers ) ) ); PyTuple_SET_ITEM( result, 3, get_callable_value( trait->py_post_setattr )); PyTuple_SET_ITEM( result, 4, Py2to3_PyNum_FromLong( func_index( (void *) trait->validate, (void **) validate_handlers ) ) ); PyTuple_SET_ITEM( result, 5, get_callable_value( trait->py_validate ) ); PyTuple_SET_ITEM( result, 6, Py2to3_PyNum_FromLong( trait->default_value_type ) ); PyTuple_SET_ITEM( result, 7, get_value( trait->default_value ) ); PyTuple_SET_ITEM( result, 8, Py2to3_PyNum_FromLong( trait->flags ) ); PyTuple_SET_ITEM( result, 9, get_value( trait->delegate_name ) ); PyTuple_SET_ITEM( result, 10, get_value( trait->delegate_prefix ) ); PyTuple_SET_ITEM( result, 11, Py2to3_PyNum_FromLong( func_index( (void *) trait->delegate_attr_name, (void **) delegate_attr_name_handlers ) ) ); PyTuple_SET_ITEM( result, 12, get_value( NULL ) ); /* trait->notifiers */ PyTuple_SET_ITEM( result, 13, get_value( trait->handler ) ); PyTuple_SET_ITEM( result, 14, get_value( trait->obj_dict ) ); return result; } /*----------------------------------------------------------------------------- | Restores the pickled state of the trait: +----------------------------------------------------------------------------*/ static PyObject * _trait_setstate ( trait_object * trait, PyObject * args ) { PyObject * ignore, * temp, *temp2; int getattr_index, setattr_index, post_setattr_index, validate_index, delegate_attr_name_index; if ( !PyArg_ParseTuple( args, "(iiiOiOiOiOOiOOO)", &getattr_index, &setattr_index, &post_setattr_index, &trait->py_post_setattr, &validate_index, &trait->py_validate, &trait->default_value_type, &trait->default_value, &trait->flags, &trait->delegate_name, &trait->delegate_prefix, &delegate_attr_name_index, &ignore, &trait->handler, &trait->obj_dict ) ) return NULL; trait->getattr = getattr_handlers[ getattr_index ]; trait->setattr = setattr_handlers[ setattr_index ]; trait->post_setattr = (trait_post_setattr) setattr_property_handlers[ post_setattr_index ]; trait->validate = validate_handlers[ validate_index ]; trait->delegate_attr_name = delegate_attr_name_handlers[ delegate_attr_name_index ]; /* Convert any references to callable methods on the handler back into bound methods: */ temp = trait->py_validate; if ( Py2to3_PyNum_Check( temp ) ) trait->py_validate = PyObject_GetAttrString( trait->handler, "validate" ); else if ( PyTuple_Check( temp ) && (Py2to3_PyNum_AsLong( PyTuple_GET_ITEM( temp, 0 ) ) == 10) ) { temp2 = PyObject_GetAttrString( trait->handler, "validate" ); Py_INCREF( temp2 ); Py_DECREF( PyTuple_GET_ITEM( temp, 2 ) ); PyTuple_SET_ITEM( temp, 2, temp2 ); } if ( Py2to3_PyNum_Check( trait->py_post_setattr ) ) trait->py_post_setattr = PyObject_GetAttrString( trait->handler, "post_setattr" ); Py_INCREF( trait->py_post_setattr ); Py_INCREF( trait->py_validate ); Py_INCREF( trait->default_value ); Py_INCREF( trait->delegate_name ); Py_INCREF( trait->delegate_prefix ); Py_INCREF( trait->handler ); Py_INCREF( trait->obj_dict ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Returns the current trait dictionary: +----------------------------------------------------------------------------*/ static PyObject * get_trait_dict ( trait_object * trait, void * closure ) { PyObject * obj_dict = trait->obj_dict; if ( obj_dict == NULL ) { trait->obj_dict = obj_dict = PyDict_New(); if ( obj_dict == NULL ) return NULL; } Py_INCREF( obj_dict ); return obj_dict; } /*----------------------------------------------------------------------------- | Sets the current trait dictionary: +----------------------------------------------------------------------------*/ static int set_trait_dict ( trait_object * trait, PyObject * value, void * closure ) { if ( !PyDict_Check( value ) ) return dictionary_error(); return set_value( &trait->obj_dict, value ); } /*----------------------------------------------------------------------------- | Returns the current trait handler (if any): +----------------------------------------------------------------------------*/ static PyObject * get_trait_handler ( trait_object * trait, void * closure ) { return get_value( trait->handler ); } /*----------------------------------------------------------------------------- | Sets the current trait dictionary: +----------------------------------------------------------------------------*/ static int set_trait_handler ( trait_object * trait, PyObject * value, void * closure ) { return set_value( &trait->handler, value ); } /*----------------------------------------------------------------------------- | Returns the current post_setattr (if any): +----------------------------------------------------------------------------*/ static PyObject * get_trait_post_setattr ( trait_object * trait, void * closure ) { return get_value( trait->py_post_setattr ); } /*----------------------------------------------------------------------------- | Sets the value of the 'post_setattr' field of a CTrait instance: +----------------------------------------------------------------------------*/ static int set_trait_post_setattr ( trait_object * trait, PyObject * value, void * closure ) { if ( !PyCallable_Check( value ) ) { PyErr_SetString( PyExc_ValueError, "The assigned value must be callable." ); return -1; } trait->post_setattr = post_setattr_trait_python; return set_value( &trait->py_post_setattr, value ); } /*----------------------------------------------------------------------------- | 'CTrait' instance methods: +----------------------------------------------------------------------------*/ static PyMethodDef trait_methods[] = { { "__getstate__", (PyCFunction) _trait_getstate, METH_VARARGS, PyDoc_STR( "__getstate__()" ) }, { "__setstate__", (PyCFunction) _trait_setstate, METH_VARARGS, PyDoc_STR( "__setstate__(state)" ) }, { "default_value", (PyCFunction) _trait_default_value, METH_VARARGS, PyDoc_STR( "default_value(default_value)" ) }, { "default_value_for", (PyCFunction) _trait_default_value_for, METH_VARARGS, PyDoc_STR( "default_value_for(object,name)" ) }, { "set_validate", (PyCFunction) _trait_set_validate, METH_VARARGS, PyDoc_STR( "set_validate(validate_function)" ) }, { "get_validate", (PyCFunction) _trait_get_validate, METH_NOARGS, PyDoc_STR( "get_validate()" ) }, { "validate", (PyCFunction) _trait_validate, METH_VARARGS, PyDoc_STR( "validate(object,name,value)" ) }, { "delegate", (PyCFunction) _trait_delegate, METH_VARARGS, PyDoc_STR( "delegate(delegate_name,prefix,prefix_type,modify_delegate)" ) }, { "rich_comparison", (PyCFunction) _trait_rich_comparison, METH_VARARGS, PyDoc_STR( "rich_comparison(rich_comparison_boolean)" ) }, { "comparison_mode", (PyCFunction) _trait_comparison_mode, METH_VARARGS, PyDoc_STR( "comparison_mode(comparison_mode_enum)" ) }, { "value_allowed", (PyCFunction) _trait_value_allowed, METH_VARARGS, PyDoc_STR( "value_allowed(value_allowed_boolean)" ) }, { "value_property", (PyCFunction) _trait_value_property, METH_VARARGS, PyDoc_STR( "value_property(value_trait_boolean)" ) }, { "setattr_original_value", (PyCFunction) _trait_setattr_original_value, METH_VARARGS, PyDoc_STR( "setattr_original_value(original_value_boolean)" ) }, { "post_setattr_original_value", (PyCFunction) _trait_post_setattr_original_value, METH_VARARGS, PyDoc_STR( "post_setattr_original_value(original_value_boolean)" ) }, { "is_mapped", (PyCFunction) _trait_is_mapped, METH_VARARGS, PyDoc_STR( "is_mapped(is_mapped_boolean)" ) }, { "property", (PyCFunction) _trait_property, METH_VARARGS, PyDoc_STR( "property([get,set,validate])" ) }, { "clone", (PyCFunction) _trait_clone, METH_VARARGS, PyDoc_STR( "clone(trait)" ) }, { "cast", (PyCFunction) _trait_cast, METH_VARARGS, PyDoc_STR( "cast(value)" ) }, { "_notifiers", (PyCFunction) _trait_notifiers, METH_VARARGS, PyDoc_STR( "_notifiers(force_create)" ) }, { NULL, NULL }, }; /*----------------------------------------------------------------------------- | 'CTrait' property definitions: +----------------------------------------------------------------------------*/ static PyGetSetDef trait_properties[] = { { "__dict__", (getter) get_trait_dict, (setter) set_trait_dict }, { "handler", (getter) get_trait_handler, (setter) set_trait_handler }, { "post_setattr", (getter) get_trait_post_setattr, (setter) set_trait_post_setattr }, { 0 } }; /*----------------------------------------------------------------------------- | 'CTrait' type definition: +----------------------------------------------------------------------------*/ static PyTypeObject trait_type = { PyVarObject_HEAD_INIT( DEFERRED_ADDRESS( &PyType_Type ), 0 ) "traits.ctraits.cTrait", sizeof( trait_object ), 0, (destructor) trait_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ (getattrofunc) trait_getattro, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,/* tp_flags */ 0, /* tp_doc */ (traverseproc) trait_traverse, /* tp_traverse */ (inquiry) trait_clear, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ trait_methods, /* tp_methods */ 0, /* tp_members */ trait_properties, /* tp_getset */ DEFERRED_ADDRESS( &PyBaseObject_Type ), /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ sizeof( trait_object ) - sizeof( PyObject * ), /* tp_dictoffset */ (initproc) trait_init, /* tp_init */ DEFERRED_ADDRESS( PyType_GenericAlloc ), /* tp_alloc */ DEFERRED_ADDRESS( PyType_GenericNew ) /* tp_new */ }; /*----------------------------------------------------------------------------- | Sets the global 'Undefined' and 'Uninitialized' values: +----------------------------------------------------------------------------*/ static PyObject * _ctraits_undefined ( PyObject * self, PyObject * args ) { if ( !PyArg_ParseTuple( args, "OO", &Undefined, &Uninitialized ) ) return NULL; Py_INCREF( Undefined ); Py_INCREF( Uninitialized ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the global 'TraitError' and 'DelegationError' exception types: +----------------------------------------------------------------------------*/ static PyObject * _ctraits_exceptions ( PyObject * self, PyObject * args ) { if ( !PyArg_ParseTuple( args, "OO", &TraitError, &DelegationError ) ) return NULL; Py_INCREF( TraitError ); Py_INCREF( DelegationError ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the global 'TraitListObject', TraitSetObject and 'TraitDictObject' | classes: +----------------------------------------------------------------------------*/ static PyObject * _ctraits_list_classes ( PyObject * self, PyObject * args ) { if ( !PyArg_ParseTuple( args, "OOO", &TraitListObject, &TraitSetObject, &TraitDictObject ) ) return NULL; Py_INCREF( TraitListObject ); Py_INCREF( TraitSetObject ); Py_INCREF( TraitDictObject ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the global 'TraitValue' class: +----------------------------------------------------------------------------*/ static PyObject * _ctraits_value_class ( PyObject * self, PyObject * args ) { if ( !PyArg_ParseTuple( args, "O", &TraitValue ) ) return NULL; Py_INCREF( TraitValue ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the global 'adapt' reference to the PyProtocols 'adapt' function: +----------------------------------------------------------------------------*/ static PyObject * _ctraits_adapt ( PyObject * self, PyObject * args ) { if ( !PyArg_ParseTuple( args, "O", &adapt ) ) return NULL; Py_INCREF( adapt ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the global 'validate_implements' reference to the Python level | function: +----------------------------------------------------------------------------*/ static PyObject * _ctraits_validate_implements ( PyObject * self, PyObject * args ) { if ( !PyArg_ParseTuple( args, "O", &validate_implements ) ) return NULL; Py_INCREF( validate_implements ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the global 'ctrait_type' class reference: +----------------------------------------------------------------------------*/ static PyObject * _ctraits_ctrait ( PyObject * self, PyObject * args ) { if ( !PyArg_ParseTuple( args, "O", &ctrait_type ) ) return NULL; Py_INCREF( ctrait_type ); Py_INCREF( Py_None ); return Py_None; } /*----------------------------------------------------------------------------- | Sets the global 'trait_notification_handler' function, and returns the | previous value: +----------------------------------------------------------------------------*/ static PyObject * _ctraits_trait_notification_handler ( PyObject * self, PyObject * args ) { PyObject * result = _trait_notification_handler; if ( !PyArg_ParseTuple( args, "O", &_trait_notification_handler ) ) { return NULL; } if ( _trait_notification_handler == Py_None ) { _trait_notification_handler = NULL; } else { Py_INCREF( _trait_notification_handler ); } if ( result == NULL ) { Py_INCREF( Py_None ); result = Py_None; } return result; } /*----------------------------------------------------------------------------- | 'CTrait' instance methods: +----------------------------------------------------------------------------*/ static PyMethodDef ctraits_methods[] = { { "_undefined", (PyCFunction) _ctraits_undefined, METH_VARARGS, PyDoc_STR( "_undefined(Undefined,Uninitialized)" ) }, { "_exceptions", (PyCFunction) _ctraits_exceptions, METH_VARARGS, PyDoc_STR( "_exceptions(TraitError,DelegationError)" ) }, { "_list_classes", (PyCFunction) _ctraits_list_classes, METH_VARARGS, PyDoc_STR( "_list_classes(TraitListObject,TraitSetObject,TraitDictObject)" ) }, { "_value_class", (PyCFunction) _ctraits_value_class, METH_VARARGS, PyDoc_STR( "_value_class(TraitValue)" ) }, { "_adapt", (PyCFunction) _ctraits_adapt, METH_VARARGS, PyDoc_STR( "_adapt(PyProtocols._speedups.adapt)" ) }, { "_validate_implements", (PyCFunction) _ctraits_validate_implements, METH_VARARGS, PyDoc_STR( "_validate_implements(validate_implements)" )}, { "_ctrait", (PyCFunction) _ctraits_ctrait, METH_VARARGS, PyDoc_STR( "_ctrait(CTrait_class)" ) }, { "_trait_notification_handler", (PyCFunction) _ctraits_trait_notification_handler, METH_VARARGS, PyDoc_STR( "_trait_notification_handler(handler)" ) }, { NULL, NULL }, }; /*----------------------------------------------------------------------------- | Performs module and type initialization: +----------------------------------------------------------------------------*/ Py2to3_MOD_INIT(ctraits) { PyObject * tmp; /* Create the 'ctraits' module: */ PyObject * module; Py2to3_MOD_DEF( module, "ctraits", ctraits__doc__, ctraits_methods ); if ( module == NULL ) return Py2to3_MOD_ERROR_VAL; /* Create the 'CHasTraits' type: */ has_traits_type.tp_base = &PyBaseObject_Type; has_traits_type.tp_alloc = PyType_GenericAlloc; if ( PyType_Ready( &has_traits_type ) < 0 ) return Py2to3_MOD_ERROR_VAL; Py_INCREF( &has_traits_type ); if ( PyModule_AddObject( module, "CHasTraits", (PyObject *) &has_traits_type ) < 0 ) return Py2to3_MOD_ERROR_VAL; /* Create the 'CTrait' type: */ trait_type.tp_base = &PyBaseObject_Type; trait_type.tp_alloc = PyType_GenericAlloc; trait_type.tp_new = PyType_GenericNew; if ( PyType_Ready( &trait_type ) < 0 ) return Py2to3_MOD_ERROR_VAL; Py_INCREF( &trait_type ); if ( PyModule_AddObject( module, "cTrait", (PyObject *) &trait_type ) < 0 ) return Py2to3_MOD_ERROR_VAL; /* Create the 'HasTraitsMonitor' list: */ tmp = PyList_New( 0 ); Py_INCREF( tmp ); if ( PyModule_AddObject( module, "_HasTraits_monitors", (PyObject*) tmp) < 0 ) { return Py2to3_MOD_ERROR_VAL; } _HasTraits_monitors = tmp; /* Predefine a Python string == "__class_traits__": */ class_traits = Py2to3_SimpleString_FromString( "__class_traits__" ); /* Predefine a Python string == "__listener_traits__": */ listener_traits = Py2to3_SimpleString_FromString( "__listener_traits__" ); /* Predefine a Python string == "editor": */ editor_property = Py2to3_SimpleString_FromString( "editor" ); /* Predefine a Python string == "__prefix__": */ class_prefix = Py2to3_SimpleString_FromString( "__prefix__" ); /* Predefine a Python string == "trait_added": */ trait_added = Py2to3_SimpleString_FromString( "trait_added" ); /* Create an empty tuple: */ empty_tuple = PyTuple_New( 0 ); /* Create an empty dict: */ empty_dict = PyDict_New(); /* Create the 'is_callable' marker: */ is_callable = Py2to3_PyNum_FromLong( -1 ); return Py2to3_MOD_SUCCESS_VAL(module); } traits-4.5.0/traits/etsconfig/000077500000000000000000000000001233213561600163175ustar00rootroot00000000000000traits-4.5.0/traits/etsconfig/__init__.py000066400000000000000000000005341233213561600204320ustar00rootroot00000000000000#----------------------------------------------------------------------------- # # Copyright (c) 2007 by Enthought, Inc. # All rights reserved. # #----------------------------------------------------------------------------- """ Supports sharing settings across projects or programs on the same system. Part of the EnthoughtBase project. """ traits-4.5.0/traits/etsconfig/api.py000066400000000000000000000000401233213561600174340ustar00rootroot00000000000000from etsconfig import ETSConfig traits-4.5.0/traits/etsconfig/etsconfig.py000066400000000000000000000366031233213561600206620ustar00rootroot00000000000000""" Enthought Tool Suite configuration information. """ # Standard library imports. import sys import os from os import path class ETSConfig(object): """ Enthought Tool Suite configuration information. This class should not use ANY other package in the tool suite so that it will always work no matter which other packages are present. """ ########################################################################### # 'object' interface. ########################################################################### #### operator methods ##################################################### def __init__(self): """ Constructor. Note that this constructor can only ever be called from within this module, since we don't expose the class. """ # Shadow attributes for properties. self._application_data = None self._application_home = None self._company = None self._toolkit = None self._kiva_backend = None self._user_data = None return ########################################################################### # 'ETSConfig' interface. ########################################################################### #### properties ########################################################### def get_application_data(self, create=False): """ Return the application data directory path. Parameters ---------- create: bool Create the corresponding directory or not. Notes ----- - This is a directory that applications and packages can safely write non-user accessible data to i.e. configuration information, preferences etc. - Do not put anything in here that the user might want to navigate to e.g. projects, user data files etc. - The actual location differs between operating systems. """ if self._application_data is None: self._application_data = \ self._initialize_application_data(create=create) return self._application_data def _get_application_data(self): """ Property getter, see get_application_data's docstring. """ return self.get_application_data(create=True) def _set_application_data(self, application_data): """ Property setter. """ self._application_data = application_data return def get_application_home(self, create=False): """ Return the application home directory path. Parameters ---------- create: bool Create the corresponding directory or not. Note ---- - This is a directory named after the current, running application that imported this module that applications and packages can safely write non-user accessible data to i.e. configuration information, preferences etc. It is a sub-directory of self.application_data, named after the directory that contains the "main" python script that started the process. For example, if application foo is started with a script named "run.py" in a directory named "foo", then the application home would be: /foo, regardless of if it was launched with "python /run.py" or "cd ; python run.py" - This is useful for library modules used in apps that need to store state, preferences, etc. for the specific app only, and not for all apps which use that library module. If the library module uses ETSConfig.application_home, they can store prefs for the app all in one place and do not need to know the details of where each app might reside. - Do not put anything in here that the user might want to navigate to e.g. projects, user home files etc. - The actual location differs between operating systems. """ if self._application_home is None: self._application_home = path.join( self.get_application_data(create=create), self._get_application_dirname()) return self._application_home application_data = property(_get_application_data, _set_application_data) def _get_application_home(self): """ Property getter, see get_application_home's docstring. """ return self.get_application_home(create=True) def _set_application_home(self, application_home): """ Property setter. """ self._application_home = application_home return application_home = property(_get_application_home, _set_application_home) def _get_company(self): """ Property getter. """ if self._company is None: self._company = self._initialize_company() return self._company def _set_company(self, company): """ Property setter for the company name. """ self._company = company return company = property(_get_company, _set_company) def _get_toolkit(self): """ Property getter for the GUI toolkit. The value returned is, in order of preference: the value set by the application; the value passed on the command line using the '-toolkit' option; the value specified by the 'ETS_TOOLKIT' environment variable; otherwise the empty string. """ if self._toolkit is None: self._toolkit = self._initialize_toolkit() return self._toolkit.split('.')[0] def _set_toolkit(self, toolkit): """ Property setter for the GUI toolkit. The toolkit can be set more than once, but only if it is the same one each time. An application that is written for a particular toolkit can explicitly set it before any other module that gets the value is imported. """ if self._toolkit and self._toolkit != toolkit: raise ValueError, "cannot set toolkit to %s because it has "\ "already been set to %s" % (toolkit, self._toolkit) self._toolkit = toolkit return toolkit = property(_get_toolkit, _set_toolkit) def _get_enable_toolkit(self): """ Deprecated: This property is no longer used. Property getter for the Enable backend. The value returned is, in order of preference: the value set by the application; the value passed on the command line using the '-toolkit' option; the value specified by the 'ENABLE_TOOLKIT' environment variable; otherwise the empty string. """ from warnings import warn warn('Use of the enable_toolkit attribute is deprecated.') return self.toolkit def _set_enable_toolkit(self, toolkit): """ Deprecated. Property setter for the Enable toolkit. The toolkit can be set more than once, but only if it is the same one each time. An application that is written for a particular toolkit can explicitly set it before any other module that gets the value is imported. """ from warnings import warn warn('Use of the enable_toolkit attribute is deprecated.') return enable_toolkit = property(_get_enable_toolkit, _set_enable_toolkit) def _get_kiva_backend(self): """ Property getter for the Kiva backend. The value returned is dependent on the value of the toolkit property. If toolkit specifies a kiva backend using the extended syntax: [.] then the value of the property will be whatever was specified. Otherwise the value will be a reasonable default for the given enable backend. """ if self._toolkit is None: raise AttributeError, "The kiva_backend attribute is dependent on toolkit, which has not been set." if self._kiva_backend is None: try: self._kiva_backend = self._toolkit.split('.')[1] except IndexError: # Pick a reasonable default based on the toolkit if self.toolkit == "wx": self._kiva_backend = "quartz" if sys.platform == "darwin" else "image" elif self.toolkit == "qt4": self._kiva_backend = "image" elif self.toolkit == "pyglet": self._kiva_backend = "gl" else: self._kiva_backend = "image" return self._kiva_backend kiva_backend = property(_get_kiva_backend) def _get_user_data(self): """ Property getter. This is a directory that users can safely write user accessible data to i.e. user-defined functions, edited functions, etc. The actual location differs between operating systems. """ if self._user_data is None: self._user_data = self._initialize_user_data() return self._user_data def _set_user_data(self, user_data): """ Property setter. """ self._user_data = user_data return user_data = property(_get_user_data, _set_user_data) #### private methods ##################################################### # fixme: In future, these methods could allow the properties to be set # via the (as yet non-existent) preference/configuration mechanism. This # would allow configuration via (in order of precedence):- # # - a configuration file # - environment variables # - the command line def _get_application_dirname(self): """ Return the name of the directory (not a path) that the "main" Python script which started this process resides in, or "" if it could not be determined or is not appropriate. For example, if the script that started the current process was named "run.py" in a directory named "foo", and was launched with "python run.py", the name "foo" would be returned (this assumes the directory name is the name of the app, which seems to be as good of an assumption as any). """ dirname = "" main_mod = sys.modules.get('__main__', None) if main_mod is not None: if hasattr(main_mod, '__file__'): main_mod_file = path.abspath(main_mod.__file__) dirname = path.basename(path.dirname(main_mod_file)) return dirname def _initialize_application_data(self, create=True): """ Initializes the (default) application data directory. """ if sys.platform == 'win32': environment_variable = 'APPDATA' directory_name = self.company else: environment_variable = 'HOME' directory_name = '.' + self.company.lower() # Lookup the environment variable. parent_directory = os.environ.get(environment_variable, None) if parent_directory is None or parent_directory == '/root': import tempfile from warnings import warn parent_directory = tempfile.gettempdir() user = os.environ.get('USER', None) if user is not None: directory_name += "_%s" % user warn('Environment variable "%s" not set, setting home directory to %s' % \ (environment_variable, parent_directory)) application_data = os.path.join(parent_directory, directory_name) if create: # If a file already exists with this name then make sure that it is # a directory! if os.path.exists(application_data): if not os.path.isdir(application_data): raise ValueError('File "%s" already exists' % application_data) # Otherwise, create the directory. else: os.makedirs(application_data) return application_data def _initialize_company(self): """ Initializes the (default) company. """ return 'Enthought' def _initialize_toolkit(self): """ Initializes the toolkit. """ # We handle the command line option even though it doesn't have the # highest precedence because we always want to remove it from the # command line. if '-toolkit' in sys.argv: opt_idx = sys.argv.index('-toolkit') try: opt_toolkit = sys.argv[opt_idx + 1] except IndexError: raise ValueError, "the -toolkit command line argument must be followed by a toolkit name" # Remove the option. del sys.argv[opt_idx:opt_idx + 1] else: opt_toolkit = None if self._toolkit is not None: toolkit = self._toolkit elif opt_toolkit is not None: toolkit = opt_toolkit else: toolkit = os.environ.get('ETS_TOOLKIT', '') return toolkit def _initialize_user_data(self): """ Initializes the (default) user data directory. """ # We check what the os.path.expanduser returns parent_directory = os.path.expanduser('~') directory_name = self.company if sys.platform == 'win32': try: from win32com.shell import shell, shellcon # Due to the fact that the user's My Documents directory can # be in some pretty strange places, it's safest to just ask # Windows where it is. MY_DOCS = shellcon.CSIDL_PERSONAL parent_directory = shell.SHGetFolderPath(0, MY_DOCS, 0, 0) except ImportError: # But if they don't have pywin32 installed, just do it the # naive way... # Check if the usr_dir is C:\\John Doe\\Documents and Settings. # If yes, then we should modify the usr_dir to be 'My Documents'. # If no, then the user must have modified the os.environ # variables and the directory chosen is a desirable one. desired_dir = os.path.join(parent_directory, 'My Documents') if os.path.exists(desired_dir): parent_directory = desired_dir else: directory_name = directory_name.lower() # The final directory. usr_dir = os.path.join(parent_directory, directory_name) # If a file already exists with this name then make sure that it is # a directory! if os.path.exists(usr_dir): if not os.path.isdir(usr_dir): raise ValueError('File "%s" already exists' % usr_dir) # Otherwise, create the directory. else: os.makedirs(usr_dir) return usr_dir # We very purposefully only have one object and do not export the class. We # could have just made everything class methods, but that always seems a bit # gorpy, especially with properties etc. ETSConfig = ETSConfig() #### EOF ###################################################################### traits-4.5.0/traits/etsconfig/tests/000077500000000000000000000000001233213561600174615ustar00rootroot00000000000000traits-4.5.0/traits/etsconfig/tests/__init__.py000066400000000000000000000000001233213561600215600ustar00rootroot00000000000000traits-4.5.0/traits/etsconfig/tests/test_etsconfig.py000066400000000000000000000124721233213561600230610ustar00rootroot00000000000000""" Tests the 'ETSConfig' configuration object. """ # Standard library imports. import os, time, unittest # Enthought library imports. from traits.etsconfig.api import ETSConfig # FIXME: Unit tests should not touch files/directories outside of a staging area. class ETSConfigTestCase(unittest.TestCase): """ Tests the 'ETSConfig' configuration object. """ ########################################################################### # 'TestCase' interface. ########################################################################### #### public methods ####################################################### def setUp(self): """ Prepares the test fixture before each test method is called. """ # Make a fresh instance each time. self.ETSConfig = type(ETSConfig)() ########################################################################### # 'ETSConfigTestCase' interface. ########################################################################### #### public methods ####################################################### def test_application_data(self): """ application data """ dirname = self.ETSConfig.application_data self.assertEqual(os.path.exists(dirname), True) self.assertEqual(os.path.isdir(dirname), True) return def test_set_application_data(self): """ set application data """ old = self.ETSConfig.application_data self.ETSConfig.application_data = 'foo' self.assertEqual('foo', self.ETSConfig.application_data) self.ETSConfig.application_data = old self.assertEqual(old, self.ETSConfig.application_data) return def test_application_data_is_idempotent(self): """ application data is idempotent """ # Just do the previous test again! self.test_application_data() self.test_application_data() return def test_write_to_application_data_directory(self): """ write to application data directory """ self.ETSConfig.company = 'Blah' dirname = self.ETSConfig.application_data path = os.path.join(dirname, 'dummy.txt') data = str(time.time()) f = open(path, 'w') f.write(data) f.close() self.assertEqual(os.path.exists(path), True) f = open(path) result = f.read() f.close() os.remove(path) self.assertEqual(data, result) return def test_default_company(self): """ default company """ self.assertEqual(self.ETSConfig.company, 'Enthought') return def test_set_company(self): """ set company """ old = self.ETSConfig.company self.ETSConfig.company = 'foo' self.assertEqual('foo', self.ETSConfig.company) self.ETSConfig.company = old self.assertEqual(old, self.ETSConfig.company) return def _test_default_application_home(self): """ application home """ # This test is only valid when run with the 'main' at the end of this # file: "python app_dat_locator_test_case.py", in which case the # app_name will be the directory this file is in ('tests'). app_home = self.ETSConfig.application_home (dirname, app_name) = os.path.split(app_home) self.assertEqual(dirname, self.ETSConfig.application_data) self.assertEqual(app_name, 'tests') def test_user_data(self): """ user data """ dirname = self.ETSConfig.user_data self.assertEqual(os.path.exists(dirname), True) self.assertEqual(os.path.isdir(dirname), True) return def test_set_user_data(self): """ set user data """ old = self.ETSConfig.user_data self.ETSConfig.user_data = 'foo' self.assertEqual('foo', self.ETSConfig.user_data) self.ETSConfig.user_data = old self.assertEqual(old, self.ETSConfig.user_data) return def test_user_data_is_idempotent(self): """ user data is idempotent """ # Just do the previous test again! self.test_user_data() return def test_write_to_user_data_directory(self): """ write to user data directory """ self.ETSConfig.company = 'Blah' dirname = self.ETSConfig.user_data path = os.path.join(dirname, 'dummy.txt') data = str(time.time()) f = open(path, 'w') f.write(data) f.close() self.assertEqual(os.path.exists(path), True) f = open(path) result = f.read() f.close() os.remove(path) self.assertEqual(data, result) return # For running as an individual set of tests. if __name__ == '__main__': # Add the non-default test of application_home...non-default because it must # be run using this module as a script to be valid. suite = unittest.TestLoader().loadTestsFromTestCase(ETSConfigTestCase) suite.addTest(ETSConfigTestCase('_test_default_application_home')) unittest.TextTestRunner(verbosity=2).run(suite) #### EOF ###################################################################### traits-4.5.0/traits/has_dynamic_views.py000066400000000000000000000360631233213561600204140ustar00rootroot00000000000000#----------------------------------------------------------------------------- # # Copyright (c) 2006, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: Dave Peterson # #----------------------------------------------------------------------------- """ Provides a framework that assembles Traits UI Views at run time, when the view is requested, rather than at the time a class is written. This capability is particularly useful when the object being 'viewed' with a Traits UI is part of a plug-in application -- such as Envisage. In general, this capability allows: * The GUI for an object can be extendable by contributions other than from the original code writer. * The view can be dynamic in that the elements it is composed of can change each time it is requested. * Registration of a handler can be associated with the view contributions. Either the original object writer, or a contributor, can use this framework to declare one or more dynamic views that are composed of sub-elements that only need to exist at the time the view is requested. Users of this framework create a dynamic view by registering a DynamicView declaration. That declaration includes a name that forms the basis for the metadata attributes that are used to identify and order the desired view sub-elements into the view's composition. In addition, the declaration includes any data to be passed into the constructor of the dynamic view and the id that should be used to persist the user's customization of the view. Additionally, this framework allows sub-elements themselves to also be dynamically composed of further sub-elements. For example, a dynamic view could be composed of two sub-elements: 1. The first is a dynamically composed HFlow, which represents a toolbar that can be extended through contributions of toolbar buttons. 2. The second could be a dynamic tabset where each page is also a contribution. Programmers include dynamic sub-elements within their dynamic views by contributing a DynamicViewSubElement into that view. When the framework comes across this contribution while building the view, it replaces that DynamicViewSubElement with a fully initialized Traits ViewSubElement composed in a manner similar to how the elements of the View itself were composed. Each contribution to a dynamic view or sub-element must be an instance of a Traits ViewSubElement and must have associated metadata like the following for each dynamic view or sub-element it will display in: __order : A float value. The framework uses only ViewSubElements with this metadata instantiated when building the dynamic view or sub-element with the specified name. The elements are sorted by ascending order of this value using the standard list sort function. __priority : A float value. The framework resolves any overloading of an order value by picking the first element encountered that has the highest priority value. The other elements with the same view order are not displayed at all. In addition, dynamic view contributions can also provide a 'handler', which behaves like a normal Traits Handler. That is, it can contain methods that are called when model values change and can access the Traits UIInfo object representing the actual UI instances. To provide a handler, append the following metadata to your view sub-element: __handler : A HasTraits instance. The framework will connect listeners to call the handler methods as part of the handler for the dynamic view. """ from __future__ import absolute_import # Enthought library imports: from traitsui.delegating_handler import DelegatingHandler # Local imports: from .has_traits import HasTraits from .trait_types import Any, Bool, Dict, Instance, Str from traitsui.api import View, ViewSubElement, ViewElement # Set up a logger: import logging logger = logging.getLogger( __name__ ) #------------------------------------------------------------------------------- # 'DynamicViewSubElement' class: #------------------------------------------------------------------------------- class DynamicViewSubElement ( ViewSubElement ): """ Declares a dynamic sub-element of a dynamic view. """ #--------------------------------------------------------------------------- # Trait definitions: #--------------------------------------------------------------------------- #-- Public 'DynamicViewSubElement' Interface ------------------------------- #: Keyword arguments passed in during construction of the actual #: ViewSubElement instance. keywords = Dict # FIXME: Should be the 'Class' trait but I couldn't get that to work. #: The class of the actual ViewSubElement we are dynamically creating. klass = Any #: The name of this dynamic sub-element. This controls the metadata #: names identifying the sub-elements that compose this element. name = Str #------------------------------------------------------------------------------- # 'DynamicView' class: #------------------------------------------------------------------------------- class DynamicView ( HasTraits ): """ Declares a dynamic view. """ #--------------------------------------------------------------------------- # Trait definitions: #--------------------------------------------------------------------------- #-- Public 'DynamicView' Interface ----------------------------------------- #: The ID of the view. This is the ID that the view's preferences will be #: saved under. id = Str #: The name of the view. This is the name that should be requested when #: calling edit_traits() or configure_traits(). name = Str #: Keyword arguments passed in during construction of the actual view #: instance. keywords = Dict #: Indicates whether this view should be the default traits view for objects #: it is contributed to. use_as_default = Bool( False ) #------------------------------------------------------------------------------- # 'HasDynamicViews' class: #------------------------------------------------------------------------------- class HasDynamicViews ( HasTraits ): """ Provides of a framework that builds Traits UI Views at run time, when the view is requested, rather than at the time a class is written. """ #--------------------------------------------------------------------------- # Trait definitions: #--------------------------------------------------------------------------- #-- Protected 'HasDynamicViews' Interface ---------------------------------- #: The registry of dynamic views. The key is the view name and the value #: is the declaration of the dynamic view. _dynamic_view_registry = Dict( Str, Instance( DynamicView ) ) #--------------------------------------------------------------------------- # 'HasTraits' interface: #--------------------------------------------------------------------------- #-- Public Interface ------------------------------------------------------- def trait_view ( self, name = None, view_element = None ): """ Gets or sets a ViewElement associated with an object's class. Extended here to build dynamic views and sub-elements. """ result = None # If a view element was passed instead of a name or None, do not handle # this as a request for a dynamic view and let the standard Traits # trait_view method be called with it. Otherwise, compose the dynamic # view here. if not isinstance( name, ViewElement ): # If this is a request for the default view, see if one of our # dynamic views should be the default view: if (view_element is None) and (name is None or len( name ) < 1): for dname, declaration in self._dynamic_view_registry.items(): if declaration.use_as_default: result = self._compose_dynamic_view( dname ) break # Otherwise, handle if this is a request for a dynamic view: elif ((view_element is None) and (name in self._dynamic_view_registry)): result = self._compose_dynamic_view(name) # If we haven't created a dynamic view so far, then do the standard # traits thing to retrieve the UI element: if result is None: result = super( HasDynamicViews, self ).trait_view( name, view_element ) return result #--------------------------------------------------------------------------- # 'HasDynamicViews' interface: #--------------------------------------------------------------------------- #-- Public Interface ------------------------------------------------------- def declare_dynamic_view ( self, declaration ): """ A convenience method to add a new dynamic view declaration to this instance. """ self._dynamic_view_registry[ declaration.name ] = declaration #-- Protected Interface ---------------------------------------------------- def _build_dynamic_sub_element ( self, definition, sub_elements ): """ Returns the fully composed ViewSubElement from the sub-element contributions to the dynamic sub-element identified by the definition. """ logger.debug( '\tBuilding dynamic sub-element [%s] with elements [%s]', definition.name, sub_elements ) return definition.klass( *sub_elements, **definition.keywords ) def _build_dynamic_view (self, declaration, sub_elements, handler ): """ Returns a Traits View representing the specified dynamic view composed out of the provided view sub-elements. Implemented as a separate method to allow implementors to override the way in which the instantiated view is configured. """ logger.debug( '\tBuilding dynamic view [%s] with elements [%s]', declaration.name, sub_elements ) return View( # The view id allows the user's customization of this view, if any, # to be persisted when the view is closed and then that persisted # configuration to be applied when the view is next shown: id = declaration.id, # Include the specified handler: handler = handler, # Build the view out of the sub-elements: *sub_elements, # Include the declaration's keywords. **declaration.keywords ) def _compose_dynamic_sub_element ( self, definition ): """ Returns a dynamic UI element composed from its contributed parts. """ logger.debug( 'Composing dynamic sub-element named [%s] for [%s]', definition.name, self ) # Retrieve the set of elements that make up this sub-element: elements = self._get_dynamic_elements( definition.name ) # Build the sub-element: return self._build_dynamic_sub_element( definition, elements ) def _compose_dynamic_view ( self, name ): """ Returns a dynamic view composed from its contributed parts. """ logger.debug( 'Composing dynamic view [%s] for [%s]', name, self ) # Retrieve the declaration of this dynamic view: declaration = self._dynamic_view_registry[ name ] # Retrieve the set of elements that make up the view: elements = self._get_dynamic_elements( declaration.name ) # Build a handler that delegates to the contribution handlers if any # exist: handler = None handlers = self._get_dynamic_handlers( declaration.name, elements ) if len( handlers ) > 0: handler = DelegatingHandler( sub_handlers = handlers ) # Build the view: return self._build_dynamic_view( declaration, elements, handler ) def _get_dynamic_elements ( self, name ): """ Returns a list of the current elements meant to go into the composition of a dynamic view or subelement with the specified name. """ # Determine the metadata names used to find the sub-elements included # within this dynamic element: name = name.replace(' ', '_') order_trait_name = '_%s_order' % name priority_trait_name = '_%s_priority' % name # Now find all of the current sub-elements that we will use when # composing our element: all_elements = [ self.trait_view( g ) for g in self.trait_views( klass = ViewSubElement ) ] elements = [ e for e in all_elements if hasattr( e, order_trait_name ) and (getattr( e, order_trait_name ) is not None) ] # Filter out any overridden elements. This means taking out the # element with the lower priority whenever two elements have the # same order value: filtered = {} for e in elements: order = getattr( e, order_trait_name ) priority = getattr( e, priority_trait_name ) or 0 current = filtered.setdefault( order, e ) if current is not e: current_priority = getattr( current, priority_trait_name ) if current_priority < priority: filtered[ order ] = e # Sort the contributed elements by their display ordering values: ordering = filtered.keys() ordering.sort() elements = [ filtered[ order ] for order in ordering ] # Replace any dynamic sub-element with their full composition. # NOTE: We can't do this in the override of 'trait_view' because # then we get into infinite loops when a dynamic view subelement is # found as a child: for i in range( len( elements ) ): if isinstance( elements[i], DynamicViewSubElement ): e = elements.pop( i ) composed = self._compose_dynamic_sub_element( e ) elements.insert( i, composed ) return elements def _get_dynamic_handlers( self, name, elements ): """ Return a list of the handlers associated with the current elements meant to go into the dynamic view of the specified name. """ # Determine the metadata name used to declare a handler: name = name.replace(' ', '_') handler_name = '_%s_handler' % name handlers = [ getattr(e, handler_name) for e in elements if hasattr( e, handler_name ) and (getattr( e, handler_name ) is not None) ] logger.debug( '\tFound sub-handlers: %s', handlers ) return handlers traits-4.5.0/traits/has_traits.py000066400000000000000000004441221233213561600170600ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Original Date: 06/21/2002 # # Rewritten as a C-based type extension: 06/21/2004 # #------------------------------------------------------------------------------ """ Defines the HasTraits class, along with several useful subclasses and associated metaclasses. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import, division import copy as copy_module import weakref import re import sys from types import FunctionType, MethodType from . import __version__ as TraitsVersion from .adaptation.adaptation_error import AdaptationError from .ctraits import CHasTraits, _HasTraits_monitors from .traits import (CTrait, ForwardProperty, Property, SpecialNames, Trait, TraitFactory, __newobj__, generic_trait, trait_factory) from .trait_types import Any, Bool, Disallow, Enum, Event, Python, This from .trait_notifiers import (ExtendedTraitChangeNotifyWrapper, FastUITraitChangeNotifyWrapper, NewTraitChangeNotifyWrapper, StaticAnyTraitChangeNotifyWrapper, StaticTraitChangeNotifyWrapper, TraitChangeNotifyWrapper) from .trait_handlers import TraitType from .trait_base import (Missing, SequenceTypes, TraitsCache, Undefined, add_article, is_none, not_event, not_false) from .trait_errors import TraitError from .protocols.advice import addClassAdvisor from .util.deprecated import deprecated #------------------------------------------------------------------------------- # Set CHECK_INTERFACES to one of the following values: # # - 0: Does not check to see if classes implement their declared interfaces. # - 1: Ensures that classes implement the interfaces they say they do, and # logs a warning if they don't. # - 2: Ensures that classes implement the interfaces they say they do, and # raises an InterfaceError if they don't. #------------------------------------------------------------------------------- CHECK_INTERFACES = 0 #------------------------------------------------------------------------------- # Deferred definitions: # # The following classes have a 'chicken and the egg' definition problem. They # require Traits to work, because they subclass Traits, but the Traits # meta-class programming support uses them, so Traits can't be subclassed # until they are defined. # # Note: We need to look at whether the Category support could be used to # allow us to implement this better. #------------------------------------------------------------------------------- class ViewElement ( object ): pass def ViewElements ( ): return None #------------------------------------------------------------------------------- # Constants: #------------------------------------------------------------------------------- WrapperTypes = ( StaticAnyTraitChangeNotifyWrapper, StaticTraitChangeNotifyWrapper ) if sys.version_info[0] >= 3: # in python 3, unbound methods do not exist anymore, they're just functions BoundMethodTypes = ( MethodType, ) UnboundMethodTypes = ( FunctionType, ) else: BoundMethodTypes = ( MethodType, ) UnboundMethodTypes = ( MethodType, ) FunctionTypes = ( FunctionType, ) # Class dictionary entries used to save trait, listener and view information and # definitions: BaseTraits = '__base_traits__' ClassTraits = '__class_traits__' PrefixTraits = '__prefix_traits__' ListenerTraits = '__listener_traits__' ViewTraits = '__view_traits__' InstanceTraits = '__instance_traits__' # The default Traits View name DefaultTraitsView = 'traits_view' # Trait types which cannot have default values CantHaveDefaultValue = ( 'event', 'delegate', 'constant' ) # An empty list EmptyList = [] # The trait types that should be copied last when doing a 'copy_traits': DeferredCopy = ( 'delegate', 'property' ) # Quick test for normal vs extended trait name extended_trait_pat = re.compile( r'.*[ :\+\-,\.\*\?\[\]]' ) # Generic 'Any' trait: any_trait = Any().as_ctrait() #------------------------------------------------------------------------------- # Creates a clone of a specified trait: #------------------------------------------------------------------------------- def _clone_trait ( clone, metadata = None ): """ Creates a clone of a specified trait. """ trait = CTrait( 0 ) trait.clone( clone ) if clone.__dict__ is not None: trait.__dict__ = clone.__dict__.copy() if metadata is not None: trait.__dict__.update( metadata ) return trait #------------------------------------------------------------------------------- # Gets the definition of a specified method (if any): #------------------------------------------------------------------------------- def _get_method ( cls, method ): result = getattr( cls, method, None ) if (result is not None) and is_unbound_method_type(result): return result return None if sys.version_info[0] >= 3: def _get_def ( class_name, class_dict, bases, method ): """ Gets the definition of a specified method (if any). """ if method[0:2] == '__': method = '_%s%s' % ( class_name, method ) result = class_dict.get( method ) if ((result is not None) and is_function_type(result) and (getattr( result, 'on_trait_change', None ) is None)): return result for base in bases: result = getattr( base, method, None ) if ((result is not None) and is_unbound_method_type(result) and \ (getattr( result, 'on_trait_change', None ) is None)): return result return None else: def _get_def ( class_name, class_dict, bases, method ): """ Gets the definition of a specified method (if any). """ if method[0:2] == '__': method = '_%s%s' % ( class_name, method ) result = class_dict.get( method ) if ((result is not None) and is_function_type(result) and (getattr( result, 'on_trait_change', None ) is None)): return result for base in bases: result = getattr( base, method, None ) if ((result is not None) and is_unbound_method_type(result) and \ (getattr( result.im_func, 'on_trait_change', None ) is None)): return result return None def is_cython_func_or_method(method): """ Test if the given input is a Cython method or function. """ # The only way to get the type from the method with str comparison ... return 'cython_function_or_method' in str(type(method)) def is_bound_method_type(method): """ Test if the given input is a Python method or a Cython method. """ return isinstance(method, BoundMethodTypes ) or is_cython_func_or_method(method) def is_unbound_method_type(method): """ Test if the given input is a Python method or a Cython method. """ return isinstance(method, UnboundMethodTypes ) or is_cython_func_or_method(method) def is_function_type(function): """ Test if the given input is a Python function or a Cython method. """ return isinstance(function, FunctionTypes ) or \ is_cython_func_or_method(function) #------------------------------------------------------------------------------- # Returns whether or not a specified value is serializable: #------------------------------------------------------------------------------- def _is_serializable ( value ): """ Returns whether or not a specified value is serializable. """ if isinstance( value, ( list, tuple ) ): for item in value: if not _is_serializable( item ): return False return True if isinstance( value, dict ): for name, item in value.items(): if ((not _is_serializable( name )) or (not _is_serializable( item ))): return False return True return ((not isinstance( value, HasTraits )) or value.has_traits_interface( ISerializable )) #------------------------------------------------------------------------------- # Returns a dictionary of potential 'Instance' or 'List(Instance)' handlers: #------------------------------------------------------------------------------- def _get_instance_handlers ( class_dict, bases ): """ Returns a dictionary of potential 'Instance' or 'List(Instance)' handlers. """ # Create the results dictionary: instance_traits = {} # Merge all of the base class information into the result: for base in bases: for name, base_arg_lists in base.__dict__.get( InstanceTraits ).items(): arg_lists = instance_traits.get( name ) if arg_lists is None: instance_traits[ name ] = base_arg_lists[:] else: for arg_list in base_arg_lists: if arg_list not in arg_lists: arg_lists.append( arg_list ) # Merge in the information from the class dictionary: for name, value in class_dict.items(): if (name[:1] == '_') and is_function_type(value): n = 13 col = name.find( '_changed_for_' ) if col < 2: n = 11 col = name.find( '_fired_for_' ) if col >= 2: key = name[ col + n: ] if key != '': arg_list = ( name, name[ 1: col ] ) arg_lists = instance_traits.setdefault( key, [] ) if arg_list not in arg_lists: arg_lists.append( arg_list ) # Return the dictionary of possible arg_lists: return instance_traits #------------------------------------------------------------------------------- # Returns the correct 'delegate' listener pattern for a specified name and # delegate trait: #------------------------------------------------------------------------------- def get_delegate_pattern ( name, trait ): """ Returns the correct 'delegate' listener pattern for a specified name and delegate trait. """ prefix = trait._prefix if prefix == '': prefix = name elif (len( prefix ) > 1) and (prefix[-1] == '*'): prefix = prefix[:-1] + name return ' %s:%s' % ( trait._delegate, prefix ) #------------------------------------------------------------------------------- # '_SimpleTest' class: #------------------------------------------------------------------------------- class _SimpleTest: def __init__ ( self, value ): self.value = value def __call__ ( self, test ): return test == self.value #------------------------------------------------------------------------------- # Returns either the original value or a valid CTrait if the value can be # converted to a CTrait: #------------------------------------------------------------------------------- def _check_trait ( trait ): """ Returns either the original value or a valid CTrait if the value can be converted to a CTrait. """ if isinstance( trait, CTrait ): return trait if isinstance( trait, TraitFactory ): return trait_factory( trait ) if isinstance( trait, type ) and issubclass( trait, TraitType ): trait = trait() if isinstance( trait, TraitType ): return trait.as_ctrait() return trait #------------------------------------------------------------------------------- # Returns the trait corresponding to a specified value: #------------------------------------------------------------------------------- def _trait_for ( trait ): """ Returns the trait corresponding to a specified value. """ trait = _check_trait( trait ) if isinstance( trait, CTrait ): return trait return Trait( trait ) #------------------------------------------------------------------------------- # Returns the 'mapped trait' definition for a mapped trait: #------------------------------------------------------------------------------- def _mapped_trait_for ( trait ): """ Returns the 'mapped trait' definition for a mapped trait. """ default_value = trait.default_value()[1] try: default_value = trait.handler.mapped_value( default_value ) except: pass return Any( default_value, is_base = False, transient = True, editable = False ).as_ctrait() #------------------------------------------------------------------------------- # Adds a list of handlers to a specified notifiers list: #------------------------------------------------------------------------------- def _add_notifiers ( notifiers, handlers ): """ Adds a list of handlers to a specified notifiers list. """ for handler in handlers: if not isinstance( handler, WrapperTypes ): handler = StaticTraitChangeNotifyWrapper( handler ) notifiers.append( handler ) #------------------------------------------------------------------------------- # Adds any specified event handlers defined for a trait by a class: #------------------------------------------------------------------------------- def _add_event_handlers ( trait, cls, handlers ): """ Adds any specified event handlers defined for a trait by a class. """ events = trait.event if events is not None: if isinstance(events, basestring): events = [ events ] for event in events: handlers.append( _get_method( cls, '_%s_changed' % event ) ) handlers.append( _get_method( cls, '_%s_fired' % event ) ) #------------------------------------------------------------------------------- # Returns the method associated with a particular class property getter/setter: #------------------------------------------------------------------------------- def _property_method ( class_dict, name ): """ Returns the method associated with a particular class property getter/setter. """ return class_dict.get( name ) #------------------------------------------------------------------------------- # 'MetaHasTraits' class: #------------------------------------------------------------------------------- # This really should be 'HasTraits', but it's not defined yet: _HasTraits = None class MetaHasTraits ( type ): ### JMS: Need a docstring here. # All registered class creation listeners. # # { Str class_name : Callable listener } _listeners = {} def __new__ ( cls, class_name, bases, class_dict ): mhto = MetaHasTraitsObject( cls, class_name, bases, class_dict, False ) # Finish building the class using the updated class dictionary: klass = type.__new__( cls, class_name, bases, class_dict ) # Fix up all self referential traits to refer to this class: for trait in mhto.self_referential: trait.set_validate( ( 11, klass ) ) # Call all listeners that registered for this specific class: name = '%s.%s' % ( klass.__module__, klass.__name__ ) for listener in MetaHasTraits._listeners.get( name, [] ): listener( klass ) # Call all listeners that registered for ANY class: for listener in MetaHasTraits._listeners.get( '', [] ): listener( klass ) return klass def add_listener ( cls, listener, class_name = '' ): """ Adds a class creation listener. If the class name is the empty string then the listener will be called when *any* class is created. """ MetaHasTraits._listeners.setdefault( class_name, [] ).append( listener ) add_listener = classmethod( add_listener ) def remove_listener ( cls, listener, class_name = '' ): """ Removes a class creation listener. """ MetaHasTraits._listeners[ class_name ].remove( listener ) remove_listener = classmethod( remove_listener ) #------------------------------------------------------------------------------- # 'MetaHasTraitsObject' class: #------------------------------------------------------------------------------- class MetaHasTraitsObject ( object ): """ Performs all of the meta-class processing needed to convert any subclass of HasTraits into a well-formed traits class. """ def __init__ ( self, cls, class_name, bases, class_dict, is_category ): """ Processes all of the traits related data in the class dictionary. """ # Create the various class dictionaries, lists and objects needed to # hold trait and view information and definitions: base_traits = {} class_traits = {} prefix_traits = {} listeners = {} prefix_list = [] override_bases = bases view_elements = ViewElements() self_referential = [] # Create a list of just those base classes that derive from HasTraits: hastraits_bases = [ base for base in bases if base.__dict__.get( ClassTraits ) is not None ] # Create a list of all inherited trait dictionaries: inherited_class_traits = [ base.__dict__.get( ClassTraits ) for base in hastraits_bases ] # Move all trait definitions from the class dictionary to the # appropriate trait class dictionaries: for name, value in class_dict.items(): value = _check_trait( value ) rc = isinstance( value, CTrait ) if (not rc) and isinstance( value, ForwardProperty ): rc = True getter = _property_method( class_dict, '_get_' + name ) setter = _property_method( class_dict, '_set_' + name ) if (setter is None) and (getter is not None): if getattr( getter, 'settable', False ): setter = HasTraits._set_traits_cache elif getattr( getter, 'flushable', False ): setter = HasTraits._flush_traits_cache validate = _property_method( class_dict, '_validate_' + name ) if validate is None: validate = value.validate value = Property( getter, setter, validate, True, value.handler, **value.metadata ) if rc: del class_dict[ name ] if name[-1:] != '_': base_traits[ name ] = class_traits[ name ] = value value_type = value.type if value_type == 'trait': handler = value.handler if handler is not None: if handler.has_items: items_trait = _clone_trait( handler.items_event(), value.__dict__ ) if items_trait.instance_handler == \ '_list_changed_handler': items_trait.instance_handler = \ '_list_items_changed_handler' class_traits[ name + '_items' ] = items_trait if handler.is_mapped: class_traits[ name + '_' ] = _mapped_trait_for( value ) if isinstance( handler, This ): handler.info_text = \ add_article( class_name ) + ' instance' self_referential.append( value ) elif value_type == 'delegate': # Only add a listener if the trait.listenable metadata # is not False: if value._listenable is not False: listeners[ name ] = ( 'delegate', get_delegate_pattern( name, value ) ) elif value_type == 'event': on_trait_change = value.on_trait_change if isinstance( on_trait_change, basestring ): listeners[ name ] = ( 'event', on_trait_change ) else: name = name[:-1] prefix_list.append( name ) prefix_traits[ name ] = value elif isinstance( value, FunctionType ) or is_cython_func_or_method(value): pattern = getattr( value, 'on_trait_change', None ) if pattern is not None: listeners[ name ] = ( 'method', pattern ) elif isinstance( value, property ): class_traits[ name ] = generic_trait # Handle any view elements found in the class: elif isinstance( value, ViewElement ): # Add the view element to the class's 'ViewElements' if it is # not already defined (duplicate definitions are errors): if name in view_elements.content: raise TraitError( "Duplicate definition for view element '%s'" % name ) view_elements.content[ name ] = value # Replace all substitutable view sub elements with 'Include' # objects, and add the substituted items to the # 'ViewElements': value.replace_include( view_elements ) # Remove the view element from the class definition: del class_dict[ name ] else: for ct in inherited_class_traits: if name in ct: # The subclass is providing a default value for the # trait defined in a superclass. ictrait = ct[ name ] if ictrait.type in CantHaveDefaultValue: raise TraitError( "Cannot specify a default value " "for the %s trait '%s'. You must override the " "the trait definition instead." % ( ictrait.type, name ) ) default_value = value class_traits[ name ] = value = ictrait( default_value ) # Make sure that the trait now has the default value # has the correct initializer. value.default_value(1, value.default) del class_dict[ name ] override_bases = [] handler = value.handler if (handler is not None) and handler.is_mapped: class_traits[ name + '_' ] = _mapped_trait_for( value ) break # Process all HasTraits base classes: migrated_properties = {} implements = [] for base in hastraits_bases: base_dict = base.__dict__ # Merge listener information: for name, value in base_dict.get( ListenerTraits ).items(): if (name not in class_traits) and (name not in class_dict): listeners[ name ] = value # Merge base traits: for name, value in base_dict.get( BaseTraits ).items(): if name not in base_traits: property_info = value.property() if property_info is not None: key = id( value ) migrated_properties[ key ] = value = \ self.migrate_property( name, value, property_info, class_dict ) base_traits[ name ] = value elif is_category: raise TraitError, ("Cannot override '%s' trait " "definition in a category" % name) # Merge class traits: for name, value in base_dict.get( ClassTraits ).items(): if name not in class_traits: property_info = value.property() if property_info is not None: new_value = migrated_properties.get( id( value ) ) if new_value is not None: value = new_value else: value = self.migrate_property( name, value, property_info, class_dict ) class_traits[ name ] = value elif is_category: raise TraitError, ("Cannot override '%s' trait " "definition in a category" % name) # Merge prefix traits: base_prefix_traits = base_dict.get( PrefixTraits ) for name in base_prefix_traits['*']: if name not in prefix_list: prefix_list.append( name ) prefix_traits[ name ] = base_prefix_traits[ name ] elif is_category: raise TraitError, ("Cannot override '%s_' trait " "definition in a category" % name) # If the base class has a 'ViewElements' object defined, add it to # the 'parents' list of this class's 'ViewElements': parent_view_elements = base_dict.get( ViewTraits ) if parent_view_elements is not None: view_elements.parents.append( parent_view_elements ) # Make sure there is a definition for 'undefined' traits: if (prefix_traits.get( '' ) is None) and (not is_category): prefix_list.append( '' ) prefix_traits[''] = Python().as_ctrait() # Save a link to the prefix_list: prefix_traits['*'] = prefix_list # Make sure the trait prefixes are sorted longest to shortest # so that we can easily bind dynamic traits to the longest matching # prefix: prefix_list.sort( key = lambda x: -len(x) ) # Get the list of all possible 'Instance'/'List(Instance)' handlers: instance_traits = _get_instance_handlers( class_dict, hastraits_bases ) # If there is an 'anytrait_changed' event handler, wrap it so that # it can be attached to all traits in the class: anytrait = _get_def( class_name, class_dict, bases, '_anytrait_changed' ) if anytrait is not None: anytrait = StaticAnyTraitChangeNotifyWrapper( anytrait ) # Save it in the prefix traits dictionary so that any dynamically # created traits (e.g. 'prefix traits') can re-use it: prefix_traits['@'] = anytrait # Make one final pass over the class traits dictionary, making sure # all static trait notification handlers are attached to a 'cloned' # copy of the original trait: cloned = set() for name in class_traits.keys(): trait = class_traits[ name ] handlers = [ anytrait, _get_def( class_name, class_dict, bases, '_%s_changed' % name ), _get_def( class_name, class_dict, bases, '_%s_fired' % name ) ] # Check for an 'Instance' or 'List(Instance)' trait with defined # handlers: instance_handler = trait.instance_handler if ((instance_handler is not None) and (name in instance_traits) or ((instance_handler == '_list_items_changed_handler') and (name[-6:] == '_items') and (name[:-6] in instance_traits))): handlers.append( getattr( HasTraits, instance_handler ) ) events = trait.event if events is not None: if isinstance(events, basestring): events = [ events ] for event in events: handlers.append( _get_def( class_name, class_dict, bases, '_%s_changed' % event ) ) handlers.append( _get_def( class_name, class_dict, bases, '_%s_fired' % event ) ) handlers = [ h for h in handlers if h is not None ] default = _get_def( class_name, class_dict, [], '_%s_default' % name ) if (len( handlers ) > 0) or (default is not None): if name not in cloned: cloned.add( name ) class_traits[ name ] = trait = _clone_trait( trait ) if len( handlers ) > 0: _add_notifiers( trait._notifiers( 1 ), handlers ) if default is not None: trait.default_value( 8, default ) # Handle the case of properties whose value depends upon the value # of other traits: if (trait.type == 'property') and (trait.depends_on is not None): cached = trait.cached if cached is True: cached = TraitsCache + name depends_on = trait.depends_on if isinstance( depends_on, SequenceTypes ): depends_on = ','.join( depends_on ) else: # Note: We add the leading blank to force it to be treated # as using the extended trait notation so that it will # automatically add '_items' listeners to lists/dicts: depends_on = ' ' + depends_on listeners[ name ] = ( 'property', cached, depends_on ) # Save the list of self referential traits: self.self_referential = self_referential # Add the traits meta-data to the class: self.add_traits_meta_data( bases, class_dict, base_traits, class_traits, instance_traits, prefix_traits, listeners, view_elements ) #--------------------------------------------------------------------------- # Adds the traits meta-data to the class: #--------------------------------------------------------------------------- def add_traits_meta_data ( self, bases, class_dict, base_traits, class_traits, instance_traits, prefix_traits, listeners, view_elements ): """ Adds the Traits metadata to the class dictionary. """ class_dict[ BaseTraits ] = base_traits class_dict[ ClassTraits ] = class_traits class_dict[ InstanceTraits ] = instance_traits class_dict[ PrefixTraits ] = prefix_traits class_dict[ ListenerTraits ] = listeners class_dict[ ViewTraits ] = view_elements #--------------------------------------------------------------------------- # Migrates an existing property to the class being defined (allowing for # method overrides): #--------------------------------------------------------------------------- def migrate_property ( self, name, property, property_info, class_dict ): """ Migrates an existing property to the class being defined (allowing for method overrides). """ get = _property_method( class_dict, '_get_' + name ) set = _property_method( class_dict, '_set_' + name ) val = _property_method( class_dict, '_validate_' + name ) if ((get is not None) or (set is not None) or (val is not None)): old_get, old_set, old_val = property_info return Property( get or old_get, set or old_set, val or old_val, True, **property.__dict__ ) return property #------------------------------------------------------------------------------- # Manages the list of trait instance monitors: #------------------------------------------------------------------------------- def _trait_monitor_index ( cls, handler ): global _HasTraits_monitors type_handler = type( handler ) for i, _cls, _handler in enumerate( _HasTraits_monitors ): if type_handler is type( _handler ): if (((type_handler is MethodType) or 'cython_function_or_method' in str(type_handler)) and \ (handler.im_self is not None)): if ((handler.__name__ == _handler.__name__) and (handler.im_self is _handler.im_self)): return i elif handler == _handler: return i return -1 #------------------------------------------------------------------------------- # 'HasTraits' decorators: #------------------------------------------------------------------------------- def on_trait_change ( name, post_init = False, *names ): """ Marks the following method definition as being a handler for the extended trait change specified by *name(s)*. Refer to the documentation for the on_trait_change() method of the **HasTraits** class for information on the correct syntax for the *name(s)* argument. A handler defined using this decorator is normally effective immediately. However, if *post_init* is **True**, then the handler only become effective after all object constructor arguments have been processed. That is, trait values assigned as part of object construction will not cause the handler to be invoked. """ def decorator ( function ): prefix = '<' if post_init: prefix = '>' function.on_trait_change = prefix + \ (','.join( [ name ] + list( names ) )) return function return decorator def cached_property ( function ): """ Marks the following method definition as being a "cached property". That is, it is a property getter which, for performance reasons, caches its most recently computed result in an attribute whose name is of the form: *_traits_cache_name*, where *name* is the name of the property. A method marked as being a cached property needs only to compute and return its result. The @cached_property decorator automatically wraps the decorated method in cache management code, eliminating the need to write boilerplate cache management code explicitly. For example:: file_name = File file_contents = Property( depends_on = 'file_name' ) @cached_property def _get_file_contents(self): fh = open(self.file_name, 'rb') result = fh.read() fh.close() return result In this example, accessing the *file_contents* trait calls the _get_file_contents() method only once each time after the **file_name** trait is modified. In all other cases, the cached value **_file_contents**, which maintained by the @cached_property wrapper code, is returned. Note the use, in the example, of the **depends_on** metadata attribute to specify that the value of **file_contents** depends on **file_name**, so that _get_file_contents() is called only when **file_name** changes. For details, see the traits.traits.Property() function. """ name = TraitsCache + function.__name__[ 5: ] def decorator ( self ): result = self.__dict__.get( name, Undefined ) if result is Undefined: self.__dict__[ name ] = result = function( self ) return result decorator.cached_property = True return decorator def property_depends_on ( dependency, settable = False, flushable = False ): """ Marks the following method definition as being a "cached property" that depends on the specified extended trait names. That is, it is a property getter which, for performance reasons, caches its most recently computed result in an attribute whose name is of the form: *_traits_cache_name*, where *name* is the name of the property. A method marked as being a cached property needs only to compute and return its result. The @property_depends_on decorator automatically wraps the decorated method in cache management code that will cache the most recently computed value and flush the cache when any of the specified dependencies are modified, thus eliminating the need to write boilerplate cache management code explicitly. For example:: file_name = File file_contents = Property @property_depends_on( 'file_name' ) def _get_file_contents(self): fh = open(self.file_name, 'rb') result = fh.read() fh.close() return result In this example, accessing the *file_contents* trait calls the _get_file_contents() method only once each time after the **file_name** trait is modified. In all other cases, the cached value **_file_contents**, which is maintained by the @cached_property wrapper code, is returned. """ def decorator ( function ): name = TraitsCache + function.__name__[ 5: ] def wrapper ( self ): result = self.__dict__.get( name, Undefined ) if result is Undefined: self.__dict__[ name ] = result = function( self ) return result wrapper.cached_property = True wrapper.depends_on = dependency wrapper.settable = settable wrapper.flushable = flushable return wrapper return decorator def weak_arg(arg): """ Create a weak reference to arg and wrap the function so that the dereferenced weakref is passed as the first argument. If arg has been deleted then the function is not called. """ # Create the weak reference weak_arg = weakref.ref(arg) def decorator(function): # We need multiple wrappers to traits can find the number of arguments. # The all just dereference the weak reference and the call the # function if it is not None. def wrapper0(): arg = weak_arg() if arg is not None: return function(arg) def wrapper1(arg1): arg = weak_arg() if arg is not None: return function(arg, arg1) def wrapper2(arg1, arg2): arg = weak_arg() if arg is not None: return function(arg, arg1, arg2) def wrapper3(arg1, arg2, arg3): arg = weak_arg() if arg is not None: return function(arg, arg1, arg2, arg3) def wrapper4(arg1, arg2, arg3, arg4): arg = weak_arg() if arg is not None: return function(arg, arg1, arg2, arg3, arg4) def wrappern(*args): arg = weak_arg() if arg is not None: function(arg, *args) # Return the correct wrapper depending on the arg count args = function.func_code.co_argcount-1 if args == 0: return wrapper0 elif args == 1: return wrapper1 elif args == 2: return wrapper2 elif args == 3: return wrapper3 elif args == 4: return wrapper4 else: return wrappern return decorator #------------------------------------------------------------------------------- # 'HasTraits' class: #------------------------------------------------------------------------------- class HasTraits ( CHasTraits ): """ Enables any Python class derived from it to have trait attributes. Most of the methods of HasTraits operated by default only on the trait attributes explicitly defined in the class definition. They do not operate on trait attributes defined by way of wildcards or by calling **add_trait()**. For example:: >>>class Person(HasTraits): ... name = Str ... age = Int ... temp_ = Any >>>bob = Person() >>>bob.temp_lunch = 'sandwich' >>>bob.add_trait('favorite_sport', Str('football')) >>>print bob.trait_names() ['trait_added', 'age', 'name'] In this example, the trait_names() method returns only the *age* and *name* attributes defined on the Person class. (The **trait_added** attribute is an explicit trait event defined on the HasTraits class.) The wildcard attribute *temp_lunch* and the dynamically-added trait attribute *favorite_sport* are not listed. """ __metaclass__ = MetaHasTraits #-- Trait Prefix Rules ----------------------------------------------------- #: Make traits 'property cache' values private with no type checking: _traits_cache__ = Any( private = True, transient = True ) #-- Class Variables -------------------------------------------------------- #: Mapping from dispatch type to notification wrapper class type wrappers = { 'same': TraitChangeNotifyWrapper, 'extended': ExtendedTraitChangeNotifyWrapper, 'new': NewTraitChangeNotifyWrapper, 'fast_ui': FastUITraitChangeNotifyWrapper, 'ui': FastUITraitChangeNotifyWrapper } #-- Trait Definitions ------------------------------------------------------ #: An event fired when a new trait is dynamically added to the object trait_added = Event( basestring ) #: An event that can be fired to indicate that the state of the object has #: been modified trait_modified = Event #--------------------------------------------------------------------------- # Handles a 'trait_added' event being fired: #--------------------------------------------------------------------------- def _trait_added_changed ( self, name ): """ Handles a 'trait_added' event being fired. """ # fixme: This test should be made more comprehensive by also verifying # that if the trait name does end in '_items', its base trait is also # a list or dictionary (in order to eliminate a false positive on an # unfortunately named trait: trait = self.trait( name ) if (trait.type == 'delegate') and (name[-6:] != '_items'): self._init_trait_delegate_listener( name, 'delegate', get_delegate_pattern( name, trait ) ) #--------------------------------------------------------------------------- # Adds/Removes a trait instance creation monitor: #--------------------------------------------------------------------------- def trait_monitor ( cls, handler, remove = False ): """Adds or removes the specified *handler* from the list of active monitors. Parameters ---------- handler : function The function to add or remove as a monitor. remove : bool Flag indicating whether to remove (True) or add the specified handler as a monitor for this class. Description ----------- If *remove* is omitted or False, the specified handler is added to the list of active monitors; if *remove* is True, the handler is removed from the active monitor list. """ global _HasTraits_monitors index = _trait_monitor_index( cls, handler ) if remove: if index >= 0: del _HasTraits_monitors[ index ] return if index < 0: _HasTraits_monitors.append( ( cls, handler ) ) trait_monitor = classmethod( trait_monitor ) #--------------------------------------------------------------------------- # Add a new class trait (i.e. applies to all instances and subclasses): #--------------------------------------------------------------------------- def add_class_trait ( cls, name, *trait ): """ Adds a named trait attribute to this class. Parameters ---------- name : str Name of the attribute to add. *trait : A trait or a value that can be converted to a trait using Trait() Trait definition of the attribute. It can be a single value or a list equivalent to an argument list for the Trait() function. """ # Make sure a trait argument was specified: if len( trait ) == 0: raise ValueError, 'No trait definition was specified.' # Make sure only valid traits get added: if len( trait ) > 1: trait = Trait( *trait ) else: trait = _trait_for( trait[0] ) # Add the trait to the class: cls._add_class_trait( name, trait, False ) # Also add the trait to all subclasses of this class: for subclass in cls.trait_subclasses( True ): subclass._add_class_trait( name, trait, True ) add_class_trait = classmethod( add_class_trait ) def _add_class_trait ( cls, name, trait, is_subclass ): # Get a reference to the class's dictionary and 'prefix' traits: class_dict = cls.__dict__ prefix_traits = class_dict[ PrefixTraits ] # See if the trait is a 'prefix' trait: if name[-1:] == '_': name = name[:-1] if name in prefix_traits: if is_subclass: return raise TraitError( "The '%s_' trait is already defined." % name ) prefix_traits[ name ] = trait # Otherwise, add it to the list of known prefixes: prefix_list = prefix_traits['*'] prefix_list.append( name ) # Resort the list from longest to shortest: prefix_list.sort( lambda x, y: len( y ) - len( x ) ) return # Check to see if the trait is already defined: class_traits = class_dict[ ClassTraits ] if class_traits.get( name ) is not None: if is_subclass: return raise TraitError( "The '%s' trait is already defined." % name ) # Check to see if the trait has additional sub-traits that need to be # defined also: handler = trait.handler if handler is not None: if handler.has_items: cls.add_class_trait( name + '_items', handler.items_event() ) if handler.is_mapped: cls.add_class_trait( name + '_', _mapped_trait_for( trait ) ) # Make the new trait inheritable (if allowed): if trait.is_base is not False: class_dict[ BaseTraits ][ name ] = trait # See if there are any static notifiers defined: handlers = [ _get_method( cls, '_%s_changed' % name ), _get_method( cls, '_%s_fired' % name ) ] # Add any special trait defined event handlers: _add_event_handlers( trait, cls, handlers ) # Add the 'anytrait' handler (if any): handlers.append( prefix_traits.get( '@' ) ) # Filter out any 'None' values: handlers = [ h for h in handlers if h is not None ] # If there are and handlers, add them to the trait's notifier's list: if len( handlers ) > 0: trait = _clone_trait( trait ) _add_notifiers( trait._notifiers( 1 ), handlers ) # Finally, add the new trait to the class trait dictionary: class_traits[ name ] = trait _add_class_trait = classmethod( _add_class_trait ) #--------------------------------------------------------------------------- # Adds a 'category' to the class: #--------------------------------------------------------------------------- def add_trait_category ( cls, category ): """ Adds a trait category to a class. """ if issubclass( category, HasTraits ): cls._add_trait_category( getattr( category, BaseTraits ), getattr( category, ClassTraits ), getattr( category, InstanceTraits ), getattr( category, PrefixTraits ), getattr( category, ListenerTraits ), getattr( category, ViewTraits, None ) ) # Copy all methods that are not already in the class from the category: for subcls in category.__mro__: for name, value in subcls.__dict__.items(): if not hasattr( cls, name ): setattr( cls, name, value ) add_trait_category = classmethod( add_trait_category ) #--------------------------------------------------------------------------- # Adds a 'category' to the class: #--------------------------------------------------------------------------- def _add_trait_category ( cls, base_traits, class_traits, instance_traits, prefix_traits, listeners, view_elements ): # Update the class and each of the existing subclasses: for subclass in [ cls ] + cls.trait_subclasses( True ): # Merge the 'base_traits': subclass_traits = getattr( subclass, BaseTraits ) for name, value in base_traits.items(): subclass_traits.setdefault( name, value ) # Merge the 'class_traits': subclass_traits = getattr( subclass, ClassTraits ) for name, value in class_traits.items(): subclass_traits.setdefault( name, value ) # Merge the 'instance_traits': subclass_traits = getattr( subclass, InstanceTraits ) for name, arg_lists in instance_traits.items(): subclass_arg_lists = subclass_traits.get( name ) if subclass_arg_lists is None: subclass_traits[ name ] = arg_lists[:] else: for arg_list in arg_lists: if arg_list not in subclass_arg_lists: subclass_arg_lists.append( arg_list ) # Merge the 'prefix_traits': subclass_traits = getattr( subclass, PrefixTraits ) subclass_list = subclass_traits['*'] changed = False for name, value in prefix_traits.items(): if name not in subclass_traits: subclass_traits[ name ] = value subclass_list.append( name ) changed = True # Resort the list from longest to shortest (if necessary): if changed: subclass_list.sort( key = lambda x: -len( x ) ) # Merge the 'listeners': subclass_traits = getattr( subclass, ListenerTraits ) for name, value in listeners.items(): subclass_traits.setdefault( name, value ) # Copy all our new view elements into the base class's ViewElements: if view_elements is not None: content = view_elements.content if len( content ) > 0: base_ve = getattr( cls, ViewTraits, None ) if base_ve is None: base_ve = ViewElements() setattr( cls, ViewTraits, base_ve ) base_ve_content = base_ve.content for name, value in content.items(): base_ve_content.setdefault( name, value ) _add_trait_category = classmethod( _add_trait_category ) #--------------------------------------------------------------------------- # Sets a trait notification dispatch handler: #--------------------------------------------------------------------------- def set_trait_dispatch_handler ( cls, name, klass, override = False ): """ Sets a trait notification dispatch handler. """ try: if issubclass( klass, TraitChangeNotifyWrapper ): if (not override) and (name in cls.wrappers): raise TraitError, ("A dispatch handler called '%s' has " "already been defined." % name) cls.wrappers[ name ] = klass return except TypeError: pass raise TraitError, ('%s is not a subclass of TraitChangeNotifyWrapper.' % klass) set_trait_dispatch_handler = classmethod( set_trait_dispatch_handler ) #--------------------------------------------------------------------------- # Returns the immediate (or all) subclasses of this class: #--------------------------------------------------------------------------- def trait_subclasses ( cls, all = False ): """ Returns a list of the immediate (or all) subclasses of this class. Parameters ---------- all : bool Indicates whether to return all subclasses of this class. If False, only immediate subclasses are returned. """ if not all: return cls.__subclasses__() return cls._trait_subclasses( [] ) trait_subclasses = classmethod( trait_subclasses ) def _trait_subclasses ( cls, subclasses ): for subclass in cls.__subclasses__(): if subclass not in subclasses: subclasses.append( subclass ) subclass._trait_subclasses( subclasses ) return subclasses _trait_subclasses = classmethod( _trait_subclasses ) #--------------------------------------------------------------------------- # Returns whether the object implements a specified traits interface: #--------------------------------------------------------------------------- def has_traits_interface ( self, *interfaces ): """Returns whether the object implements a specified traits interface. Parameters ---------- *interfaces : One or more traits Interface (sub)classes. Description ----------- Tests whether the object implements one or more of the interfaces specified by *interfaces*. Return **True** if it does, and **False** otherwise. """ return isinstance(self, interfaces) #--------------------------------------------------------------------------- # Prepares an object to be pickled: #--------------------------------------------------------------------------- def __getstate__ ( self ): """ Returns a dictionary of traits to pickle. In general, avoid overriding __getstate__ in subclasses. Instead, mark traits that should not be pickled with 'transient = True' metadata. In cases where this strategy is not sufficient, override __getstate__ in subclasses using the following pattern to remove items that should not be persisted:: def __getstate__(self): state = super(X,self).__getstate__() for key in ['foo', 'bar']: if key in state: del state[key] return state """ # Save all traits which do not have any 'transient' metadata: result = self.trait_get( transient = is_none ) # Add all delegate traits that explicitly have 'transient = False' # metadata: dic = self.__dict__ result.update( dict( [ ( name, dic[ name ] ) for name in self.trait_names( type = 'delegate', transient = False ) if name in dic ] ) ) # If this object implements ISerializable, make sure that all # contained HasTraits objects in its persisted state also implement # ISerializable: if self.has_traits_interface( ISerializable ): for name, value in result.items(): if not _is_serializable( value ): raise TraitError( "The '%s' trait of a '%s' instance " "contains the unserializable value: %s" % ( name, self.__class__.__name__, value ) ) # Store the traits version in the state dictionary (if possible): result.setdefault( '__traits_version__', TraitsVersion ) # Return the final state dictionary: return result def __reduce_ex__ ( self, protocol ): return ( __newobj__, ( self.__class__, ), self.__getstate__() ) #--------------------------------------------------------------------------- # Restores the previously pickled state of an object: #--------------------------------------------------------------------------- def __setstate__ ( self, state, trait_change_notify = True ): """ Restores the previously pickled state of an object. """ pop = state.pop if pop( '__traits_version__', None ) is None: # If the state was saved by a version of Traits prior to 3.0, then # use Traits 2.0 compatible code to restore it: values = [ ( name, pop( name ) ) for name in pop( '__HasTraits_restore__', [] ) ] self.__dict__.update( state ) self.trait_set( trait_change_notify=trait_change_notify, **dict( values ) ) else: # Otherwise, apply the Traits 3.0 restore logic: self._init_trait_listeners() self.trait_set( trait_change_notify = trait_change_notify, **state ) self._post_init_trait_listeners() self.traits_init() self.traits_inited( True ) #--------------------------------------------------------------------------- # Shortcut for retrieving the value of a list of traits: #--------------------------------------------------------------------------- def trait_get ( self, *names, **metadata ): """ Shortcut for getting object trait attributes. Parameters ---------- names : list of strings A list of trait attribute names whose values are requested. Returns ------- result : dict A dictionary whose keys are the names passed as arguments and whose values are the corresponding trait values. Description ----------- Looks up the value of each trait whose name is passed as an argument and returns a dictionary containing the resulting name/value pairs. If any name does not correspond to a defined trait, it is not included in the result. If no names are specified, the result is a dictionary containing name/value pairs for *all* traits defined on the object. """ result = {} n = len( names ) if (n == 1) and (type( names[0] ) in SequenceTypes): names = names[0] elif n == 0: names = self.trait_names( **metadata ) for name in names: value = getattr( self, name, Missing ) if value is not Missing: result[ name ] = value return result # Defines the deprecated alias for 'trait_get' get = trait_get #--------------------------------------------------------------------------- # Shortcut for setting object traits: #--------------------------------------------------------------------------- def trait_set ( self, trait_change_notify = True, **traits ): """ Shortcut for setting object trait attributes. Parameters ---------- trait_change_notify : bool If **True** (the default), then each value assigned may generate a trait change notification. If **False**, then no trait change notifications will be generated. (see also: trait_setq) **traits : Key/value pairs, the trait attributes and their values to be set Returns ------- self : The method returns this object, after setting attributes. Description ----------- Treats each keyword argument to the method as the name of a trait attribute and sets the corresponding trait attribute to the value specified. This is a useful shorthand when a number of trait attributes need to be set on an object, or a trait attribute value needs to be set in a lambda function. For example, you can write:: person.trait_set(name='Bill', age=27) instead of:: person.name = 'Bill' person.age = 27 """ if not trait_change_notify: self._trait_change_notify( False ) try: for name, value in traits.items(): setattr( self, name, value ) finally: self._trait_change_notify( True ) else: for name, value in traits.items(): setattr( self, name, value ) return self # Defines the deprecated alias for 'trait_set' set = trait_set def trait_setq ( self, **traits ): """ Shortcut for setting object trait attributes. Parameters ---------- **traits : Key/value pairs, the trait attributes and their values to be set. No trait change notifications will be generated for any values assigned (see also: trait_set). Returns ------- self : The method returns this object, after setting attributes. Description ----------- Treats each keyword argument to the method as the name of a trait attribute and sets the corresponding trait attribute to the value specified. This is a useful shorthand when a number of trait attributes need to be set on an object, or a trait attribute value needs to be set in a lambda function. For example, you can write:: person.trait_setq(name='Bill', age=27) instead of:: person.name = 'Bill' person.age = 27 """ return self.trait_set( trait_change_notify = False, **traits ) #--------------------------------------------------------------------------- # Resets some or all of an object's traits to their default values: #--------------------------------------------------------------------------- def reset_traits ( self, traits = None, **metadata ): """ Resets some or all of an object's trait attributes to their default values. Parameters ---------- traits : list of strings Names of trait attributes to reset. Returns ------- unresetable : list of strings A list of attributes that the method was unable to reset, which is empty if all the attributes were successfully reset. Description ----------- Resets each of the traits whose names are specified in the *traits* list to their default values. If *traits* is None or omitted, the method resets all explicitly-defined object trait attributes to their default values. Note that this does not affect wildcard trait attributes or trait attributes added via add_trait(), unless they are explicitly named in *traits*. """ unresetable = [] if traits is None: traits = self.trait_names( **metadata ) for name in traits: try: delattr( self, name ) except ( AttributeError, TraitError ): unresetable.append( name ) return unresetable #--------------------------------------------------------------------------- # Returns the list of trait names to copy/clone by default: #--------------------------------------------------------------------------- def copyable_trait_names ( self, **metadata ): """ Returns the list of trait names to copy or clone by default. """ metadata.setdefault('transient', lambda t: t is not True) return self.trait_names( **metadata ) #--------------------------------------------------------------------------- # Returns the list of all trait names, including implicitly defined # traits: #--------------------------------------------------------------------------- def all_trait_names ( self ): """ Returns the list of all trait names, including implicitly defined traits. """ return self.__class_traits__.keys() #--------------------------------------------------------------------------- # Copies another object's traits into this one: #--------------------------------------------------------------------------- def copy_traits ( self, other, traits = None, memo = None, copy = None, **metadata ): """ Copies another object's trait attributes into this one. Parameters ---------- other : object The object whose trait attribute values should be copied. traits : list of strings A list of names of trait attributes to copy. If None or unspecified, the set of names returned by trait_names() is used. If 'all' or an empty list, the set of names returned by all_trait_names() is used. memo : dict A dictionary of objects that have already been copied. copy : None | 'deep' | 'shallow' The type of copy to perform on any trait that does not have explicit 'copy' metadata. A value of None means 'copy reference'. Returns ------- unassignable : list of strings A list of attributes that the method was unable to copy, which is empty if all the attributes were successfully copied. """ if traits is None: traits = self.copyable_trait_names( **metadata ) elif (traits == 'all') or (len( traits ) == 0): traits = self.all_trait_names() if memo is not None: memo[ 'traits_to_copy' ] = 'all' unassignable = [] deferred = [] deep_copy = (copy == 'deep') shallow_copy = (copy == 'shallow') for name in traits: try: trait = self.trait( name ) if trait.type in DeferredCopy: deferred.append( name ) continue base_trait = other.base_trait( name ) if base_trait.type == 'event': continue value = getattr( other, name ) copy_type = base_trait.copy if copy_type == 'shallow': value = copy_module.copy( value ) elif copy_type == 'ref': pass elif (copy_type == 'deep') or deep_copy: if memo is None: value = copy_module.deepcopy( value ) else: value = copy_module.deepcopy( value, memo ) elif shallow_copy: value = copy_module.copy( value ) setattr( self, name, value ) except: unassignable.append( name ) for name in deferred: try: value = getattr( other, name ) copy_type = other.base_trait( name ).copy if copy_type == 'shallow': value = copy_module.copy( value ) elif copy_type == 'ref': pass elif (copy_type == 'deep') or deep_copy: if memo is None: value = copy_module.deepcopy( value ) else: value = copy_module.deepcopy( value, memo ) elif shallow_copy: value = copy_module.copy( value ) setattr( self, name, value ) except: unassignable.append( name ) return unassignable #--------------------------------------------------------------------------- # Clones a new object from this one, optionally copying only a specified # set of traits: #--------------------------------------------------------------------------- def clone_traits ( self, traits = None, memo = None, copy = None, **metadata ): """ Clones a new object from this one, optionally copying only a specified set of traits. Parameters ---------- traits : list of strings The list of names of the trait attributes to copy. memo : dict A dictionary of objects that have already been copied. copy : str The type of copy ``deep`` or ``shallow`` to perform on any trait that does not have explicit 'copy' metadata. A value of None means 'copy reference'. Returns ------- new : The newly cloned object. Description ----------- Creates a new object that is a clone of the current object. If *traits* is None (the default), then all explicit trait attributes defined for this object are cloned. If *traits* is 'all' or an empty list, the list of traits returned by all_trait_names() is used; otherwise, *traits* must be a list of the names of the trait attributes to be cloned. """ if memo is None: memo = {} if traits is None: traits = self.copyable_trait_names( **metadata ) elif (traits == 'all') or (len( traits ) == 0): traits = self.all_trait_names() memo[ 'traits_to_copy' ] = 'all' memo[ 'traits_copy_mode' ] = copy new = self.__new__( self.__class__ ) memo[ id( self ) ] = new new._init_trait_listeners() new.copy_traits( self, traits, memo, copy, **metadata ) new._post_init_trait_listeners() new.traits_init() new.traits_inited( True ) return new #--------------------------------------------------------------------------- # Creates a deep copy of the object: #--------------------------------------------------------------------------- def __deepcopy__ ( self, memo ): """ Creates a deep copy of the object. """ id_self = id( self ) if id_self in memo: return memo[ id_self ] result = self.clone_traits( memo = memo, traits = memo.get( 'traits_to_copy' ), copy = memo.get( 'traits_copy_mode' ) ) return result #--------------------------------------------------------------------------- # Edits the object's traits: #--------------------------------------------------------------------------- def edit_traits ( self, view = None, parent = None, kind = None, context = None, handler = None, id = '', scrollable = None, **args ): """ Displays a user interface window for editing trait attribute values. Parameters ---------- view : View or string A View object (or its name) that defines a user interface for editing trait attribute values of the current object. If the view is defined as an attribute on this class, use the name of the attribute. Otherwise, use a reference to the view object. If this attribute is not specified, the View object returned by trait_view() is used. parent : toolkit control The reference to a user interface component to use as the parent window for the object's UI window. kind : str The type of user interface window to create. See the **traitsui.view.kind_trait** trait for values and their meanings. If *kind* is unspecified or None, the **kind** attribute of the View object is used. context : object or dictionary A single object or a dictionary of string/object pairs, whose trait attributes are to be edited. If not specified, the current object is used. handler : Handler A handler object used for event handling in the dialog box. If None, the default handler for Traits UI is used. id : str A unique ID for persisting preferences about this user interface, such as size and position. If not specified, no user preferences are saved. scrollable : bool Indicates whether the dialog box should be scrollable. When set to True, scroll bars appear on the dialog box if it is not large enough to display all of the items in the view at one time. """ if context is None: context = self view = self.trait_view( view ) return view.ui( context, parent, kind, self.trait_view_elements(), handler, id, scrollable, args ) #--------------------------------------------------------------------------- # Returns the default context to use for editing/configuring traits: #--------------------------------------------------------------------------- def trait_context ( self ): """ Returns the default context to use for editing or configuring traits. """ return { 'object': self } #--------------------------------------------------------------------------- # Gets or sets a ViewElement associated with an object's class: #--------------------------------------------------------------------------- def trait_view ( self, name = None, view_element = None ): """ Gets or sets a ViewElement associated with an object's class. Parameters ---------- name : str Name of a view element view_element : ViewElement View element to associate Returns ------- A view element. Description ----------- If both *name* and *view_element* are specified, the view element is associated with *name* for the current object's class. (That is, *view_element* is added to the ViewElements object associated with the current object's class, indexed by *name*.) If only *name* is specified, the function returns the view element object associated with *name*, or None if *name* has no associated view element. View elements retrieved by this function are those that are bound to a class attribute in the class definition, or that are associated with a name by a previous call to this method. If neither *name* nor *view_element* is specified, the method returns a View object, based on the following order of preference: 1. If there is a View object named ``traits_view`` associated with the current object, it is returned. 2. If there is exactly one View object associated the current object, it is returned. 3. Otherwise, it returns a View object containing items for all the non-event trait attributes on the current object. """ return self.__class__._trait_view( name, view_element, self.default_traits_view, self.trait_view_elements, self.editable_traits, self ) def class_trait_view ( cls, name = None, view_element = None ): return cls._trait_view( name, view_element, cls.class_default_traits_view, cls.class_trait_view_elements, cls.class_editable_traits, None ) class_trait_view = classmethod( class_trait_view ) #--------------------------------------------------------------------------- # Gets or sets a ViewElement associated with an object's class: #--------------------------------------------------------------------------- def _trait_view ( cls, name, view_element, default_name, view_elements, editable_traits, handler ): """ Gets or sets a ViewElement associated with an object's class. """ # If a view element was passed instead of a name or None, return it: if isinstance( name, ViewElement ): return name # Get the ViewElements object associated with the class: view_elements = view_elements() # The following test should only succeed for objects created before # traits has been fully initialized (such as the default Handler): if view_elements is None: return None if name: if view_element is None: # If only a name was specified, return the ViewElement it # matches, if any: result = view_elements.find( name ) if (result is None) and (handler is not None): method = getattr( handler, name, None ) if callable( method ): result = method() return result # Otherwise, save the specified ViewElement under the name # specified: view_elements.content[ name ] = view_element return None # Get the default view/view name: name = default_name() # If the default is a View, return it: if isinstance( name, ViewElement ): return name # Otherwise, get all View objects associated with the object's class: names = view_elements.filter_by() # If the specified default name is in the list, return its View: if name in names: return view_elements.find( name ) if handler is not None: method = getattr( handler, name, None ) if callable( method ): result = method() if isinstance( result, ViewElement ): return result # If there is only one View, return it: if len( names ) == 1: return view_elements.find( names[0] ) # Otherwise, create and return a View based on the set of editable # traits defined for the object: from traitsui.api import View return View( editable_traits(), buttons = [ 'OK', 'Cancel' ] ) _trait_view = classmethod( _trait_view ) #--------------------------------------------------------------------------- # Return the default traits view/name: #--------------------------------------------------------------------------- def default_traits_view ( self ): """ Returns the name of the default traits view for the object's class. """ return self.__class__.class_default_traits_view() #--------------------------------------------------------------------------- # Return the default traits view/name: #--------------------------------------------------------------------------- def class_default_traits_view ( cls ): """ Returns the name of the default traits view for the class. """ return DefaultTraitsView class_default_traits_view = classmethod( class_default_traits_view ) #--------------------------------------------------------------------------- # Gets the list of names of ViewElements associated with the object's # class that are of a specified ViewElement type: #--------------------------------------------------------------------------- def trait_views ( self, klass = None ): """ Returns a list of the names of all view elements associated with the current object's class. Parameters ---------- klass : class A class, such that all returned names must correspond to instances of this class. Possible values include: * Group * Item * View * ViewElement * ViewSubElement Description ----------- If *klass* is specified, the list of names is filtered such that only objects that are instances of the specified class are returned. """ return self.__class__.__dict__[ ViewTraits ].filter_by( klass ) #--------------------------------------------------------------------------- # Returns the ViewElements object associated with the object's class: #--------------------------------------------------------------------------- def trait_view_elements ( self ): """ Returns the ViewElements object associated with the object's class. The returned object can be used to access all the view elements associated with the class. """ return self.__class__.class_trait_view_elements() def class_trait_view_elements ( cls ): """ Returns the ViewElements object associated with the class. The returned object can be used to access all the view elements associated with the class. """ return cls.__dict__[ ViewTraits ] class_trait_view_elements = classmethod( class_trait_view_elements ) #--------------------------------------------------------------------------- # Configure the object's traits: #--------------------------------------------------------------------------- def configure_traits ( self, filename = None, view = None, kind = None, edit = True, context = None, handler = None, id = '', scrollable = None, **args ): ### JMS: Is it correct to assume that non-modal options for 'kind' ### behave modally when called from this method? """Creates and displays a dialog box for editing values of trait attributes, as if it were a complete, self-contained GUI application. Parameters ---------- filename : str The name (including path) of a file that contains a pickled representation of the current object. When this parameter is specified, the method reads the corresponding file (if it exists) to restore the saved values of the object's traits before displaying them. If the user confirms the dialog box (by clicking **OK**), the new values are written to the file. If this parameter is not specified, the values are loaded from the in-memory object, and are not persisted when the dialog box is closed. view : View or str A View object (or its name) that defines a user interface for editing trait attribute values of the current object. If the view is defined as an attribute on this class, use the name of the attribute. Otherwise, use a reference to the view object. If this attribute is not specified, the View object returned by trait_view() is used. kind : str The type of user interface window to create. See the **traitsui.view.kind_trait** trait for values and their meanings. If *kind* is unspecified or None, the **kind** attribute of the View object is used. edit : bool Indicates whether to display a user interface. If *filename* specifies an existing file, setting *edit* to False loads the saved values from that file into the object without requiring user interaction. context : object or dictionary A single object or a dictionary of string/object pairs, whose trait attributes are to be edited. If not specified, the current object is used handler : Handler A handler object used for event handling in the dialog box. If None, the default handler for Traits UI is used. id : str A unique ID for persisting preferences about this user interface, such as size and position. If not specified, no user preferences are saved. scrollable : bool Indicates whether the dialog box should be scrollable. When set to True, scroll bars appear on the dialog box if it is not large enough to display all of the items in the view at one time. Description ----------- This method is intended for use in applications that do not normally have a GUI. Control does not resume in the calling application until the user closes the dialog box. The method attempts to open and unpickle the contents of *filename* before displaying the dialog box. When editing is complete, the method attempts to pickle the updated contents of the object back to *filename*. If the file referenced by *filename* does not exist, the object is not modified before displaying the dialog box. If *filename* is unspecified or None, no pickling or unpickling occurs. If *edit* is True (the default), a dialog box for editing the current object is displayed. If *edit* is False or None, no dialog box is displayed. You can use ``edit=False`` if you want the object to be restored from the contents of *filename*, without being modified by the user. """ if filename is not None: fd = None try: import cPickle fd = open( filename, 'rb' ) self.copy_traits( cPickle.Unpickler( fd ).load() ) except: if fd is not None: fd.close() if edit: from traitsui.api import toolkit if context is None: context = self rc = toolkit().view_application( context, self.trait_view( view ), kind, handler, id, scrollable, args ) if rc and (filename is not None): fd = None try: import cPickle fd = open( filename, 'wb' ) cPickle.Pickler( fd, True ).dump( self ) finally: if fd is not None: fd.close() return rc return True #--------------------------------------------------------------------------- # Return the list of editable traits: #--------------------------------------------------------------------------- def editable_traits ( self ): """Returns an alphabetically sorted list of the names of non-event trait attributes associated with the current object. """ names = self.trait_names( type = not_event, editable = not_false ) names.sort() return names def class_editable_traits ( cls ): """Returns an alphabetically sorted list of the names of non-event trait attributes associated with the current class. """ names = cls.class_trait_names( type = not_event, editable = not_false ) names.sort() return names class_editable_traits = classmethod( class_editable_traits ) #--------------------------------------------------------------------------- # Pretty print the traits of an object: #--------------------------------------------------------------------------- def print_traits ( self, show_help = False, **metadata ): """Prints the values of all explicitly-defined, non-event trait attributes on the current object, in an easily readable format. Parameters ---------- show_help : bool Indicates whether to display additional descriptive information. """ if len( metadata ) > 0: names = self.trait_names( **metadata ) else: names = self.trait_names( type = not_event ) if len( names ) == 0: print '' return result = [] pad = max( [ len( x ) for x in names ] ) + 1 maxval = 78 - pad names.sort() for name in names: try: value = repr( getattr( self, name ) ).replace( '\n', '\\n' ) if len( value ) > maxval: value = '%s...%s' % ( value[: (maxval - 2) // 2 ], value[ -((maxval - 3) // 2): ] ) except: value = '' lname = (name + ':').ljust( pad ) if show_help: result.append( '%s %s\n The value must be %s.' % ( lname, value, self.base_trait( name ).setter.info() ) ) else: result.append( '%s %s' % ( lname, value ) ) print '\n'.join( result ) #--------------------------------------------------------------------------- # Add/Remove a handler for a specified trait being changed: # # If no name is specified, the handler will be invoked for any trait # change. #--------------------------------------------------------------------------- def _on_trait_change ( self, handler, name = None, remove = False, dispatch = 'same', priority = False, target = None): """Causes the object to invoke a handler whenever a trait attribute is modified, or removes the association. Parameters ---------- handler : function A trait notification function for the attribute specified by *name*. name : str Specifies the trait attribute whose value changes trigger the notification. remove : bool If True, removes the previously-set association between *handler* and *name*; if False (the default), creates the association. Description ----------- Multiple handlers can be defined for the same object, or even for the same trait attribute on the same object. If *name* is not specified or is None, *handler* is invoked when any trait attribute on the object is changed. """ if type( name ) is list: for name_i in name: self._on_trait_change( handler, name_i, remove, dispatch, priority, target ) return name = name or 'anytrait' if remove: if name == 'anytrait': notifiers = self._notifiers( 0 ) else: trait = self._trait( name, 1 ) if trait is None: return notifiers = trait._notifiers( 0 ) if notifiers is not None: for i, notifier in enumerate( notifiers ): if notifier.equals( handler ): del notifiers[i] notifier.dispose() break return if name == 'anytrait': notifiers = self._notifiers( 1 ) else: notifiers = self._trait( name, 2 )._notifiers( 1 ) for notifier in notifiers: if notifier.equals( handler ): break else: wrapper = self.wrappers[ dispatch ]( handler, notifiers, target ) if priority: notifiers.insert( 0, wrapper ) else: notifiers.append( wrapper ) #--------------------------------------------------------------------------- # Add/Remove handlers for an extended set of one or more traits being # changed: # # If no name is specified, the handler will be invoked for any trait # change. #--------------------------------------------------------------------------- def on_trait_change ( self, handler, name = None, remove = False, dispatch = 'same', priority = False, deferred = False, target = None ): """Causes the object to invoke a handler whenever a trait attribute matching a specified pattern is modified, or removes the association. Parameters ---------- handler : function A trait notification function for the *name* trait attribute, with one of the signatures described below. name : str The name of the trait attribute whose value changes trigger the notification. The *name* can specify complex patterns of trait changes using an extended *name* syntax, which is described below. remove : bool If True, removes the previously-set association between *handler* and *name*; if False (the default), creates the association. dispatch : str A string indicating the thread on which notifications must be run. Possible values are: =========== ======================================================= value dispatch =========== ======================================================= ``same`` Run notifications on the same thread as this one. ``ui`` Run notifications on the UI thread. If the current thread is the UI thread, the notifications are executed immediately; otherwise, they are placed on the UI event queue. ``fast_ui`` Alias for ``ui``. ``new`` Run notifications in a new thread. =========== ======================================================= Description ----------- Multiple handlers can be defined for the same object, or even for the same trait attribute on the same object. If *name* is not specified or is None, *handler* is invoked when any trait attribute on the object is changed. The *name* parameter is a single *xname* or a list of *xname* names, where an *xname* is an extended name of the form:: xname2[('.'|':') xname2]* An *xname2* is of the form:: ( xname3 | '['xname3[','xname3]*']' ) ['*'] An *xname3* is of the form:: xname | ['+'|'-'][name] | name['?' | ('+'|'-')[name]] A *name* is any valid Python attribute name. The semantic meaning of this notation is as follows: ================================ ====================================== expression meaning ================================ ====================================== ``item1.item2`` means *item1* is a trait containing an object (or objects if *item1* is a list or dict) with a trait called *item2*. Changes to either *item1* or *item2* cause a notification to be generated. ``item1:item2`` means *item1* is a trait containing an object (or objects if *item1* is a list or dict) with a trait called *item2*. Changes to *item2* cause a notification to be generated, while changes to *item1* do not (i.e., the ':' indicates that changes to the *link* object should not be reported). ``[ item1, item2, ..., itemN ]`` A list which matches any of the specified items. Note that at the topmost level, the surrounding square brackets are optional. ``name?`` If the current object does not have an attribute called *name*, the reference can be ignored. If the '?' character is omitted, the current object must have a trait called *name*, otherwise an exception will be raised. ``prefix+`` Matches any trait on the object whose name begins with *prefix*. ``+metadata_name`` Matches any trait on the object having *metadata_name* metadata. ``-metadata_name`` Matches any trait on the object which does not have *metadata_name* metadata. ``prefix+metadata_name`` Matches any trait on the object whose name begins with *prefix* and which has *metadata_name* metadata. ``prefix-metadata_name`` Matches any trait on the object whose name begins with *prefix* and which does not have *metadata_name* metadata. ``+`` Matches all traits on the object. ``pattern*`` Matches object graphs where *pattern* occurs one or more times (useful for setting up listeners on recursive data structures like trees or linked lists). ================================ ====================================== Some examples of valid names and their meaning are as follows: ======================= =============================================== example meaning ======================= =============================================== ``foo,bar,baz`` Listen for trait changes to *object.foo*, *object.bar*, and *object.baz*. ``['foo','bar','baz']`` Equivalent to 'foo,bar,baz', but may be more useful in cases where the individual items are computed. ``foo.bar.baz`` Listen for trait changes to *object.foo.bar.baz* and report changes to *object.foo*, *object.foo.bar* or *object.foo.bar.baz*. ``foo:bar:baz`` Listen for changes to *object.foo.bar.baz*, and only report changes to *object.foo.bar.baz*. ``foo.[bar,baz]`` Listen for trait changes to *object.foo.bar* and *object.foo.baz*. ``[left,right]*.name`` Listen for trait changes to the *name* trait of each node of a tree having *left* and *right* links to other tree nodes, and where *object* the method is applied to the root node of the tree. ``+dirty`` Listen for trait changes on any trait in the *object* which has the 'dirty' metadata set. ``foo.+dirty`` Listen for trait changes on any trait in *object.foo* which has the 'dirty' metadata set. ``foo.[bar,-dirty]`` Listen for trait changes on *object.foo.bar* or any trait on *object.foo* which does not have 'dirty' metadata set. ======================= =============================================== Note that any of the intermediate (i.e., non-final) links in a pattern can be traits of type Instance, List or Dict. In the case of List and Dict traits, the subsequent portion of the pattern is applied to each item in the list, or value in the dictionary. For example, if the self.children is a list, 'children.name' listens for trait changes to the *name* trait for each item in the self.children list. Note that items added to or removed from a list or dictionary in the pattern will cause the *handler* routine to be invoked as well, since this is treated as an *implied* change to the item's trait being monitored. The signature of the *handler* supplied also has an effect on how changes to intermediate traits are processed. The five valid handler signatures are: 1. handler() 2. handler(new) 3. handler(name,new) 4. handler(object,name,new) 5. handler(object,name,old,new) For signatures 1, 4 and 5, any change to any element of a path being listened to invokes the handler with information about the particular element that was modified (e.g., if the item being monitored is 'foo.bar.baz', a change to 'bar' will call *handler* with the following information: - object: object.foo - name: bar - old: old value for object.foo.bar - new: new value for object.foo.bar If one of the intermediate links is a List or Dict, the call to *handler* may report an *_items* changed event. If in the previous example, *bar* is a List, and a new item is added to *bar*, then the information passed to *handler* would be: - object: object.foo - name: bar_items - old: Undefined - new: TraitListEvent whose *added* trait contains the new item added to *bar*. For signatures 2 and 3, the *handler* does not receive enough information to discern between a change to the final trait being listened to and a change to an intermediate link. In this case, the event dispatcher will attempt to map a change to an intermediate link to its effective change on the final trait. This only works if all of the intermediate links are single values (such as an Instance or Any trait) and not Lists or Dicts. If the modified intermediate trait or any subsequent intermediate trait preceding the final trait is a List or Dict, then a TraitError is raised, since the effective value for the final trait cannot in general be resolved unambiguously. To prevent TraitErrors in this case, use the ':' separator to suppress notifications for changes to any of the intermediate links. Handler signature 1 also has the special characteristic that if a final trait is a List or Dict, it will automatically handle '_items' changed events for the final trait as well. This can be useful in cases where the *handler* only needs to know that some aspect of the final trait has been changed. For all other *handler* signatures, you must explicitly specify the 'xxx_items' trait if you want to be notified of changes to any of the items of the 'xxx' trait. """ # Check to see if we can do a quick exit to the basic trait change # handler: if ((isinstance( name, basestring ) and (extended_trait_pat.match( name ) is None)) or (name is None)): self._on_trait_change( handler, name, remove, dispatch, priority, target ) return from .traits_listener \ import TraitsListener, ListenerParser, ListenerHandler, \ ListenerNotifyWrapper if isinstance( name, list ): for name_i in name: self.on_trait_change( handler, name_i, remove, dispatch, priority, target ) return # Make sure we have a name string: name = (name or 'anytrait').strip() if remove: dict = self.__dict__.get( TraitsListener ) if dict is not None: listeners = dict.get( name ) if listeners is not None: for i, wrapper in enumerate( listeners ): if wrapper.equals( handler ): del listeners[i] if len( listeners ) == 0: del dict[ name ] if len( dict ) == 0: del self.__dict__[ TraitsListener ] wrapper.listener.unregister( self ) wrapper.dispose() break else: dict = self.__dict__.setdefault( TraitsListener, {} ) listeners = dict.setdefault( name, [] ) for wrapper in listeners: if wrapper.equals( handler ): break else: listener = ListenerParser( name ).listener lnw = ListenerNotifyWrapper( handler, self, name, listener, target ) listeners.append( lnw ) listener.set( handler = ListenerHandler( handler ), wrapped_handler_ref = weakref.ref(lnw), type = lnw.type, dispatch = dispatch, priority = priority, deferred = deferred ) listener.register( self ) # A synonym for 'on_trait_change' on_trait_event = on_trait_change #--------------------------------------------------------------------------- # Synchronize the value of two traits: #--------------------------------------------------------------------------- def sync_trait ( self, trait_name, object, alias = None, mutual = True, remove = False ): """Synchronizes the value of a trait attribute on this object with a trait attribute on another object. Parameters ---------- name : str Name of the trait attribute on this object. object : object The object with which to synchronize. alias : str Name of the trait attribute on *other*; if None or omitted, same as *name*. mutual : bool or int Indicates whether synchronization is mutual (True or non-zero) or one-way (False or zero) remove : bool or int Indicates whether synchronization is being added (False or zero) or removed (True or non-zero) Description ----------- In mutual synchronization, any change to the value of the specified trait attribute of either object results in the same value being assigned to the corresponding trait attribute of the other object. In one-way synchronization, any change to the value of the attribute on this object causes the corresponding trait attribute of *object* to be updated, but not vice versa. """ if alias is None: alias = trait_name is_list = (self._is_list_trait( trait_name ) and object._is_list_trait( alias )) if remove: info = self._get_sync_trait_info() dic = info.get( trait_name ) if dic is not None: key = ( id( object ), alias ) if key in dic: del dic[ key ] if len( dic ) == 0: del info[ trait_name ] self._on_trait_change( self._sync_trait_modified, trait_name, remove = True ) if is_list: self._on_trait_change( self._sync_trait_items_modified, trait_name + '_items', remove = True ) if mutual: object.sync_trait( alias, self, trait_name, False, True ) return value = ( weakref.ref( object, self._sync_trait_listener_deleted ), alias ) dic = self._get_sync_trait_info().setdefault( trait_name, {} ) key = ( id( object ), alias ) if key not in dic: if len( dic ) == 0: self._on_trait_change( self._sync_trait_modified, trait_name ) if is_list: self._on_trait_change( self._sync_trait_items_modified, trait_name + '_items' ) dic[ key ] = value setattr( object, alias, getattr( self, trait_name ) ) if mutual: object.sync_trait( alias, self, trait_name, False ) def _get_sync_trait_info ( self ): info = getattr( self, '__sync_trait__', None ) if info is None: self.__dict__[ '__sync_trait__' ] = info = {} info[ '' ] = {} return info def _sync_trait_modified ( self, object, name, old, new ): info = self.__sync_trait__ locked = info[ '' ] locked[ name ] = None for object, object_name in info[ name ].values(): object = object() if object_name not in object._get_sync_trait_info()[ '' ]: try: setattr( object, object_name, new ) except: pass del locked[ name ] def _sync_trait_items_modified ( self, object, name, old, event ): n0 = event.index n1 = n0 + len( event.removed ) name = name[:-6] info = self.__sync_trait__ locked = info[ '' ] locked[ name ] = None for object, object_name in info[ name ].values(): object = object() if object_name not in object._get_sync_trait_info()[ '' ]: try: getattr( object, object_name )[ n0: n1 ] = event.added except: pass del locked[ name ] def _sync_trait_listener_deleted ( self, ref ): info = self.__sync_trait__ for key, dic in info.items(): if key != '': for name, value in dic.items(): if ref is value[0]: del dic[ name ] if len( dic ) == 0: del info[ key ] def _is_list_trait ( self, trait_name ): handler = self.base_trait( trait_name ).handler return ((handler is not None) and (handler.default_value_type == 5)) #--------------------------------------------------------------------------- # Add a new trait: #--------------------------------------------------------------------------- def add_trait ( self, name, *trait ): """Adds a trait attribute to this object. Parameters ---------- name : str Name of the attribute to add. *trait : Trait or a value that can be converted to a trait by Trait(). Trait definition for *name*. If more than one value is specified, it is equivalent to passing the entire list of values to Trait(). """ # Make sure a trait argument was specified: if len( trait ) == 0: raise ValueError, 'No trait definition was specified.' # Make sure only valid traits get added: if len( trait ) > 1: trait = Trait( *trait ) else: trait = _trait_for( trait[0] ) # Check to see if the trait has additional sub-traits that need to be # defined also: handler = trait.handler if handler is not None: if handler.has_items: self.add_trait( name + '_items', handler.items_event() ) if handler.is_mapped: self.add_trait( name + '_', _mapped_trait_for( trait ) ) # See if there already is a class or instance trait with the same name: old_trait = self._trait( name, 0 ) # Get the object's instance trait dictionary and add a clone of the new # trait to it: itrait_dict = self._instance_traits() itrait_dict[ name ] = trait = _clone_trait( trait ) # If there already was a trait with the same name: if old_trait is not None: # Copy the old traits notifiers into the new trait: old_notifiers = old_trait._notifiers( 0 ) if old_notifiers is not None: trait._notifiers( 1 ).extend( old_notifiers ) else: # Otherwise, see if there are any static notifiers that should be # applied to the trait: cls = self.__class__ handlers = [ _get_method( cls, '_%s_changed' % name ), _get_method( cls, '_%s_fired' % name ) ] # Add any special trait defined event handlers: _add_event_handlers( trait, cls, handlers ) # Add the 'anytrait' handler (if any): handlers.append( self.__prefix_traits__.get( '@' ) ) # Filter out any 'None' values: handlers = [ h for h in handlers if h is not None ] # If there are any static notifiers, attach them to the trait: if len( handlers ) > 0: _add_notifiers( trait._notifiers( 1 ), handlers ) # If this was a new trait, fire the 'trait_added' event: if old_trait is None: self.trait_added = name #--------------------------------------------------------------------------- # Remove an existing trait: #--------------------------------------------------------------------------- def remove_trait ( self, name ): """Removes a trait attribute from this object. Parameters ---------- name : str Name of the attribute to remove. Returns ------- result : bool True if the trait was successfully removed. """ # Get the trait definition: trait = self._trait( name, 0 ) if trait is not None: # Check to see if the trait has additional sub-traits that need to # be removed also: handler = trait.handler if handler is not None: if handler.has_items: self.remove_trait( name + '_items' ) if handler.is_mapped: self.remove_trait( name + '_' ) # Remove the trait value from the object dictionary as well: if name in self.__dict__: del self.__dict__[ name ] # Get the object's instance trait dictionary and remove the trait # from it: itrait_dict = self._instance_traits() if name in itrait_dict: del itrait_dict[ name ] return True return False #--------------------------------------------------------------------------- # Returns the trait definition of a specified trait: #--------------------------------------------------------------------------- def trait ( self, name, force = False, copy = False ): """Returns the trait definition for the *name* trait attribute. Parameters ---------- name : str Name of the attribute whose trait definition is to be returned. force : bool Indicates whether to return a trait definition if *name* is not explicitly defined. copy : bool Indicates whether to return the original trait definition or a copy. Description ----------- If *force* is False (the default) and *name* is the name of an implicitly defined trait attribute that has never been referenced explicitly (i.e., has not yet been defined), the result is None. In all other cases, the result is the trait definition object associated with *name*. If *copy* is True, and a valid trait definition is found for *name*, a copy of the trait found is returned. In all other cases, the trait definition found is returned unmodified (the default). """ mode = 0 if force: mode = -1 result = self._trait( name, mode ) if (not copy) or (result is None): return result return _clone_trait( result ) #--------------------------------------------------------------------------- # Returns the base trait definition of a specified trait: #--------------------------------------------------------------------------- def base_trait ( self, name ): """Returns the base trait definition for a trait attribute. Parameters ---------- name : str Name of the attribute whose trait definition is returned. Description ----------- This method is similar to the trait() method, and returns a different result only in the case where the trait attribute defined by *name* is a delegate. In this case, the base_trait() method follows the delegation chain until a non-delegated trait attribute is reached, and returns the definition of that attribute's trait as the result. """ return self._trait( name, -2 ) #--------------------------------------------------------------------------- # Validates whether or not a specified value is legal for a specified # trait and returns the validated value if valid: #--------------------------------------------------------------------------- def validate_trait ( self, name, value ): """ Validates whether a value is legal for a trait. Returns the validated value if it is valid. """ return self.base_trait( name ).validate( self, name, value ) #--------------------------------------------------------------------------- # Return a dictionary of all traits which match a set of metadata: #--------------------------------------------------------------------------- def traits ( self, **metadata ): """Returns a dictionary containing the definitions of all of the trait attributes of this object that match the set of *metadata* criteria. Parameters ---------- **metadata : Criteria for selecting trait attributes. Description ----------- The keys of the returned dictionary are the trait attribute names, and the values are their corresponding trait definition objects. If no *metadata* information is specified, then all explicitly defined trait attributes defined for the object are returned. Otherwise, the *metadata* keyword dictionary is assumed to define a set of search criteria for selecting trait attributes of interest. The *metadata* dictionary keys correspond to the names of trait metadata attributes to examine, and the values correspond to the values the metadata attribute must have in order to be included in the search results. The *metadata* values either may be simple Python values like strings or integers, or may be lambda expressions or functions that return True if the trait attribute is to be included in the result. A lambda expression or function must receive a single argument, which is the value of the trait metadata attribute being tested. If more than one metadata keyword is specified, a trait attribute must match the metadata values of all keywords to be included in the result. """ traits = self.__base_traits__.copy() for name in self.__dict__.keys(): if name not in traits: trait = self.trait( name ) if trait is not None: traits[ name ] = trait if len( metadata ) == 0: return traits for meta_name, meta_eval in metadata.items(): if type( meta_eval ) is not FunctionType: metadata[ meta_name ] = _SimpleTest( meta_eval ) result = {} for name, trait in traits.items(): for meta_name, meta_eval in metadata.items(): if not meta_eval( getattr( trait, meta_name ) ): break else: result[ name ] = trait return result #--------------------------------------------------------------------------- # Return a dictionary of all traits which match a set of metadata: #--------------------------------------------------------------------------- def class_traits ( cls, **metadata ): """Returns a dictionary containing the definitions of all of the trait attributes of the class that match the set of *metadata* criteria. Parameters ---------- **metadata : Criteria for selecting trait attributes. Description ----------- The keys of the returned dictionary are the trait attribute names, and the values are their corresponding trait definition objects. If no *metadata* information is specified, then all explicitly defined trait attributes defined for the class are returned. Otherwise, the *metadata* keyword dictionary is assumed to define a set of search criteria for selecting trait attributes of interest. The *metadata* dictionary keys correspond to the names of trait metadata attributes to examine, and the values correspond to the values the metadata attribute must have in order to be included in the search results. The *metadata* values either may be simple Python values like strings or integers, or may be lambda expressions or functions that return **True** if the trait attribute is to be included in the result. A lambda expression or function must receive a single argument, which is the value of the trait metadata attribute being tested. If more than one metadata keyword is specified, a trait attribute must match the metadata values of all keywords to be included in the result. """ if len( metadata ) == 0: return cls.__base_traits__.copy() result = {} for meta_name, meta_eval in metadata.items(): if type( meta_eval ) is not FunctionType: metadata[ meta_name ] = _SimpleTest( meta_eval ) for name, trait in cls.__base_traits__.items(): for meta_name, meta_eval in metadata.items(): if not meta_eval( getattr( trait, meta_name ) ): break else: result[ name ] = trait return result class_traits = classmethod( class_traits ) #--------------------------------------------------------------------------- # Return a list of all trait names which match a set of metadata: #--------------------------------------------------------------------------- def trait_names ( self, **metadata ): """Returns a list of the names of all trait attributes whose definitions match the set of *metadata* criteria specified. Parameters ---------- **metadata : Criteria for selecting trait attributes. Description ----------- This method is similar to the traits() method, but returns only the names of the matching trait attributes, not the trait definitions. """ return self.traits( **metadata ).keys() def class_trait_names ( cls, **metadata ): """Returns a list of the names of all trait attributes whose definitions match the set of *metadata* criteria specified. Parameters ---------- **metadata : Criteria for selecting trait attributes. Description ----------- This method is similar to the traits() method, but returns only the names of the matching trait attributes, not the trait definitions. """ return cls.class_traits( **metadata ).keys() class_trait_names = classmethod( class_trait_names ) #--------------------------------------------------------------------------- # Explicitly sets the value of a cached property: #--------------------------------------------------------------------------- def _set_traits_cache ( self, name, value ): """ Explicitly sets the value of a cached property. """ cached = TraitsCache + name old_value = self.__dict__.get( cached, Undefined ) self.__dict__[ cached ] = value if old_value != value: self.trait_property_changed( name, old_value, value ) #--------------------------------------------------------------------------- # Explicitly flushes the value of a cached property: #--------------------------------------------------------------------------- def _flush_traits_cache ( self, name, value ): """ Explicitly flushes the value of a cached property. """ self.trait_property_changed( name, self.__dict__.pop( TraitsCache + name, Undefined ) ) #--------------------------------------------------------------------------- # Returns the trait definition for a specified name when there is no # explicit definition in the class: #--------------------------------------------------------------------------- def __prefix_trait__ ( self, name, is_set ): # Check to see if the name is of the form '__xxx__': if (name[:2] == '__') and (name[-2:] == '__'): if name == '__class__': return generic_trait # If this is for purposes of performing a 'setattr', always map the # name to an 'Any' trait: if is_set: return any_trait # Otherwise, it is a 'getattr' request, so indicate that no such # attribute exists: raise AttributeError, "'%s' object has no attribute '%s'" % ( self.__class__.__name__, name ) # Handle the special case of 'delegated' traits: if name[-1:] == '_': trait = self._trait( name[:-1], 0 ) if (trait is not None) and (trait.type == 'delegate'): return _clone_trait( trait ) prefix_traits = self.__prefix_traits__ for prefix in prefix_traits['*']: if prefix == name[ :len( prefix ) ]: # If we found a match, use its trait as a template for a new # trait: trait = prefix_traits[ prefix ] # Get any change notifiers that apply to the trait: cls = self.__class__ handlers = [ _get_method( cls, '_%s_changed' % name ), _get_method( cls, '_%s_fired' % name ) ] # Add any special trait defined event handlers: _add_event_handlers( trait, cls, handlers ) # Add the 'anytrait' handler (if any): handlers.append( prefix_traits.get( '@' ) ) # Filter out any 'None' values: handlers = [ h for h in handlers if h is not None ] # If there are any handlers, add them to the trait's notifier's # list: if len( handlers ) > 0: trait = _clone_trait( trait ) _add_notifiers( trait._notifiers( 1 ), handlers ) return trait # There should ALWAYS be a prefix match in the trait classes, since '' # is at the end of the list, so we should never get here: raise SystemError, ("Trait class look-up failed for attribute '%s' " "for an object of type '%s'") % ( name, self.__class__.__name__ ) #--------------------------------------------------------------------------- # Adds/Removes (Java-style) event listeners to an object: #--------------------------------------------------------------------------- def add_trait_listener ( self, object, prefix = '' ): self._trait_listener( object, prefix, False ) def remove_trait_listener ( self, object, prefix = '' ): self._trait_listener( object, prefix, True ) def _trait_listener ( self, object, prefix, remove ): if prefix[-1:] != '_': prefix += '_' n = len( prefix ) traits = self.__base_traits__ for name in self._each_trait_method( object ): if name[:n] == prefix: if name[-8:] == '_changed': short_name = name[n:-8] if short_name in traits: self._on_trait_change( getattr( object, name ), short_name, remove = remove ) elif short_name == 'anytrait': self._on_trait_change( getattr( object, name ), remove = remove ) elif name[:-6] == '_fired': short_name = name[n:-6] if short_name in traits: self._on_trait_change( getattr( object, name ), short_name, remove = remove ) elif short_name == 'anytrait': self._on_trait_change( getattr( object, name ), remove = remove ) #--------------------------------------------------------------------------- # Generates each (name, method) pair for a specified object: #--------------------------------------------------------------------------- def _each_trait_method ( self, object ): """ Generates each (name, method) pair for a specified object. """ dic = {} for klass in object.__class__.__mro__: for name, method in klass.__dict__.items(): if (type( method ) is FunctionType) and (name not in dic): dic[ name ] = True yield name #--------------------------------------------------------------------------- # Handles adding/removing listeners for a generic 'Instance' trait: #--------------------------------------------------------------------------- def _instance_changed_handler ( self, name, old, new ): """ Handles adding/removing listeners for a generic 'Instance' trait. """ arg_lists = self._get_instance_handlers( name ) if old is not None: for args in arg_lists: old.on_trait_change( remove = True, *args ) if new is not None: for args in arg_lists: new.on_trait_change( *args ) #--------------------------------------------------------------------------- # Handles adding/removing listeners for a generic 'List( Instance )' trait: #--------------------------------------------------------------------------- def _list_changed_handler ( self, name, old, new ): """ Handles adding/removing listeners for a generic 'List( Instance )' trait. """ arg_lists = self._get_instance_handlers( name ) for item in old: for args in arg_lists: item.on_trait_change( remove = True, *args ) for item in new: for args in arg_lists: item.on_trait_change( *args ) def _list_items_changed_handler ( self, name, not_used, event ): """ Handles adding/removing listeners for a generic 'List( Instance )' trait. """ arg_lists = self._get_instance_handlers( name[:-6] ) for item in event.removed: for args in arg_lists: item.on_trait_change( remove = True, *args ) for item in event.added: for args in arg_lists: item.on_trait_change( *args ) #--------------------------------------------------------------------------- # Returns a list of ( name, method ) pairs for a specified 'Instance' or # 'List( Instance )' trait name: #--------------------------------------------------------------------------- def _get_instance_handlers ( self, name ): """ Returns a list of ( name, method ) pairs for a specified 'Instance' or 'List( Instance )' trait name: """ return [ ( getattr( self, method_name ), item_name ) for method_name, item_name in self.__class__.__instance_traits__[ name ] ] #--------------------------------------------------------------------------- # Initializes the object's statically parsed, but dynamically registered, # traits listeners (called at object creation and unpickling times): #--------------------------------------------------------------------------- def _post_init_trait_listeners ( self ): """ Initializes the object's statically parsed, but dynamically registered, traits listeners (called at object creation and unpickling times). """ for name, data in self.__class__.__listener_traits__.items(): if data[0] == 'method': pattern = data[1] if pattern[:1] == '>': self.on_trait_change( getattr( self, name ), pattern[1:], deferred = True ) def _init_trait_listeners ( self ): """ Initializes the object's statically parsed, but dynamically registered, traits listeners (called at object creation and unpickling times). """ for name, data in self.__class__.__listener_traits__.items(): getattr( self, '_init_trait_%s_listener' % data[0] )( name, *data ) def _init_trait_method_listener ( self, name, kind, pattern ): """ Sets up the listener for a method with the @on_trait_change decorator. """ if pattern[:1] == '<': self.on_trait_change( getattr( self, name ), pattern[1:], deferred = True ) def _init_trait_event_listener ( self, name, kind, pattern ): """ Sets up the listener for an event with on_trait_change metadata. """ @weak_arg(self) def notify ( self ): setattr( self, name, True ) self.on_trait_change( notify, pattern, target=self ) def _init_trait_property_listener ( self, name, kind, cached, pattern ): """ Sets up the listener for a property with 'depends_on' metadata. """ if cached is None: @weak_arg(self) def notify ( self ): self.trait_property_changed( name, None ) else: cached_old = cached + ':old' @weak_arg(self) def pre_notify ( self ): dict = self.__dict__ old = dict.get( cached_old, Undefined ) if old is Undefined: dict[ cached_old ] = dict.pop( cached, None ) self.on_trait_change( pre_notify, pattern, priority = True, target=self ) @weak_arg(self) def notify ( self ): old = self.__dict__.pop( cached_old, Undefined ) if old is not Undefined: self.trait_property_changed( name, old ) self.on_trait_change( notify, pattern, target=self ) def _init_trait_delegate_listener ( self, name, kind, pattern ): """ Sets up the listener for a delegate trait. """ name_pattern = self._trait_delegate_name( name, pattern ) target_name_len = len( name_pattern.split( ':' )[-1] ) @weak_arg(self) def notify ( self, object, notify_name, old, new ): self.trait_property_changed( name + notify_name[ target_name_len: ], old, new ) self.on_trait_change( notify, name_pattern, target=self ) self.__dict__.setdefault( ListenerTraits, {} )[ name ] = notify def _remove_trait_delegate_listener ( self, name, remove ): """ Removes a delegate listener when the local delegate value is set. """ dict = self.__dict__.setdefault( ListenerTraits, {} ) if remove: # Although the name should be in the dict, it may not be if a value # was assigned to a delegate in a constructor or setstate: if name in dict: # Remove the delegate listener: self.on_trait_change( dict[ name ], self._trait_delegate_name( name, self.__class__.__listener_traits__[ name ][1] ), remove = True ) del dict[ name ] if len( dict ) == 0: del self.__dict__[ ListenerTraits ] return # Otherwise the local copy of the delegate value was deleted, restore # the delegate listener (unless it's already there): if name not in dict: self._init_trait_delegate_listener( name, 0, self.__class__.__listener_traits__[ name ][1] ) def _trait_delegate_name ( self, name, pattern ): """ Returns the fully-formed 'on_trait_change' name for a specified delegate. """ if pattern[-1] == '*': pattern = '%s%s%s' % ( pattern[:-1], self.__class__.__prefix__, name ) return pattern # Patch the definition of _HasTraits to be the real 'HasTraits': _HasTraits = HasTraits #------------------------------------------------------------------------------- # 'HasStrictTraits' class: #------------------------------------------------------------------------------- class HasStrictTraits ( HasTraits ): """ This class guarantees that any object attribute that does not have an explicit or wildcard trait definition results in an exception. This feature can be useful in cases where a more rigorous software engineering approach is being used than is typical for Python programs. It also helps prevent typos and spelling mistakes in attribute names from going unnoticed; a misspelled attribute name typically causes an exception. """ _ = Disallow # Disallow access to any traits not explicitly defined #------------------------------------------------------------------------------- # 'HasPrivateTraits' class: #------------------------------------------------------------------------------- class HasPrivateTraits ( HasTraits ): """ This class ensures that any public object attribute that does not have an explicit or wildcard trait definition results in an exception, but "private" attributes (whose names start with '_') have an initial value of **None**, and are not type-checked. This feature is useful in cases where a class needs private attributes to keep track of its internal object state, which are not part of the class's public API. Such attributes do not need to be type-checked, because they are manipulated only by the (presumably correct) methods of the class itself. """ # Make 'private' traits (leading '_') have no type checking: __ = Any( private = True, transient = True ) # Disallow access to all other traits not explicitly defined: _ = Disallow #------------------------------------------------------------------------------ # ABC classes with traits: (where available) #------------------------------------------------------------------------------ try: import abc class ABCMetaHasTraits(abc.ABCMeta, MetaHasTraits): """ A MetaHasTraits subclass which also inherits from abc.ABCMeta. .. note:: The ABCMeta class is cooperative and behaves nicely with MetaHasTraits, provided it is inherited first. """ pass class ABCHasTraits(HasTraits): """ A HasTraits subclass which enables the features of Abstract Base Classes (ABC). See the 'abc' module in the standard library for more information. """ __metaclass__ = ABCMetaHasTraits class ABCHasStrictTraits(ABCHasTraits): """ A HasTraits subclass which behaves like HasStrictTraits but also enables the features of Abstract Base Classes (ABC). See the 'abc' module in the standard library for more information. """ _ = Disallow except ImportError: pass #------------------------------------------------------------------------------- # Singleton classes with traits: # # This code is based on a recipe taken from: # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66531 # Specifically, the implementation of Oren Tirosh is used. #------------------------------------------------------------------------------- class SingletonHasTraits ( HasTraits ): """ Singleton class that support trait attributes. """ def __new__ ( cls, *args, **traits ): if not '_the_instance' in cls.__dict__: cls._the_instance = HasTraits.__new__( cls, *args, **traits ) return cls._the_instance class SingletonHasStrictTraits ( HasStrictTraits ): """ Singleton class that supports strict trait attributes. Non-trait attributes generate an exception. """ def __new__ ( cls, *args, **traits ): return SingletonHasTraits.__new__( cls, *args, **traits ) class SingletonHasPrivateTraits ( HasPrivateTraits ): """ Singleton class that supports trait attributes, with private attributes being unchecked. """ def __new__ ( cls, *args, **traits ): return SingletonHasTraits.__new__( cls, *args, **traits ) #------------------------------------------------------------------------------- # Defines a 'vetoable' request object and an associated event: #------------------------------------------------------------------------------- class Vetoable ( HasStrictTraits ): """ Defines a 'vetoable' request object and an associated event. """ # Should the request be vetoed? (Can only be set to 'True') veto = Bool( False ) def _veto_changed ( self, state ): self._trait_veto_notify( state ) VetoableEvent = Event( Vetoable ) #------------------------------------------------------------------------------- # 'MetaInterface' class: #------------------------------------------------------------------------------- class MetaInterface ( ABCMetaHasTraits ): """ Meta class for interfaces. Interfaces are simple ABCs with the following features:- 1) They cannot be instantiated (they are interfaces, not implementations!). 2) Calling them is equivalent to calling 'adapt'. """ @deprecated('use "adapt(adaptee, protocol)" instead.') def __call__ ( self, adaptee, default=AdaptationError ): """ Attempt to adapt the adaptee to this interface. Note that this means that (intentionally ;^) that interfaces cannot be instantiated! """ from traits.adaptation.api import adapt return adapt(adaptee, self, default=default) #------------------------------------------------------------------------------- # 'Interface' class: #------------------------------------------------------------------------------- class Interface ( HasTraits ): """ The base class for all interfaces. """ __metaclass__ = MetaInterface #------------------------------------------------------------------------------- # Class decorator to declare the protocols that a class provides. #------------------------------------------------------------------------------- def provides( *protocols ): """ Class decorator to declare the protocols that a class provides. Parameters ---------- *protocols : A list of protocols (Interface classes or Python ABCs) that the decorated class provides. """ from abc import ABCMeta # Exit immediately if there is nothing to do. if len(protocols) == 0: return lambda klass: klass # Verify that each argument is a valid protocol. for protocol in protocols: if not issubclass(type(protocol), ABCMeta): raise TraitError( "All arguments to 'provides' must be " "subclasses of Interface or be a Python ABC." ) def wrapped_class(klass): for protocol in protocols: # We use 'type(protocol)' in case the 'protocol' implements # its own 'register' method that overrides the ABC method. type(protocol).register(protocol, klass) # Make sure the class does provide the protocols it claims to. if CHECK_INTERFACES: from .interface_checker import check_implements check_implements(klass, protocols, CHECK_INTERFACES) return klass return wrapped_class #------------------------------------------------------------------------------- # Return True if the class is an Interface. #------------------------------------------------------------------------------- def isinterface( klass ): """ Return True if the class is an Interface. """ return isinstance(klass, MetaInterface) #------------------------------------------------------------------------------- # Declares the interfaces that a class implements. #------------------------------------------------------------------------------- def implements( *interfaces ): """ Declares the interfaces that a class implements. Parameters ---------- *interfaces : A list of interface classes that the containing class implements. Description ----------- Registers each specified interface with the interface manager as an interface that the containing class implements. Each specified interface must be a subclass of **Interface**. This function should only be called from directly within a class body. """ callback = provides(*interfaces) callback = deprecated( "'the 'implements' class advisor has been deprecated. " "Use the 'provides' class decorator." )(callback) addClassAdvisor(callback) #------------------------------------------------------------------------------- # 'ISerializable' interface: #------------------------------------------------------------------------------- class ISerializable ( Interface ): """ A class that implemented ISerializable requires that all HasTraits objects saved as part of its state also implement ISerializable. """ #------------------------------------------------------------------------------- # 'traits_super' class: #------------------------------------------------------------------------------- class traits_super ( super ): def __getattribute__ ( self, name ): try: return super( traits_super, self ).__getattribute__( name ) except: return self._noop def _noop ( self, *args, **kw ): pass traits-4.5.0/traits/interface_checker.py000066400000000000000000000160161233213561600203400ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2008, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: Martin Chilvers # Date: 03/20/2008 # #------------------------------------------------------------------------------ """ An attempt at type-safe casting. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import from types import FunctionType from inspect import getargspec, getmro from .has_traits import HasTraits #------------------------------------------------------------------------------- # Logging: #------------------------------------------------------------------------------- import logging logger = logging.getLogger( __name__ ) #------------------------------------------------------------------------------- # Constants: #------------------------------------------------------------------------------- # Message templates for interface errors. BAD_SIGNATURE = ("The '%s' class signature for the '%s' method is different " "from that of the '%s' interface.") MISSING_METHOD = ("The '%s' class does not implement the '%s' method of the " "'%s' interface.") MISSING_TRAIT = ("The '%s' class does not implement the %s trait(s) of the " "'%s' interface.") #------------------------------------------------------------------------------- # 'InterfaceError' class: #------------------------------------------------------------------------------- class InterfaceError ( Exception ): """ The exception raised if a class does not really implement an interface. """ pass #------------------------------------------------------------------------------- # 'InterfaceChecker' class: #------------------------------------------------------------------------------- class InterfaceChecker ( HasTraits ): """ Checks that interfaces are actually implemented. """ #--------------------------------------------------------------------------- # 'InterfaceChecker' interface: #--------------------------------------------------------------------------- def check_implements ( self, cls, interfaces, error_mode ): """ Checks that the class implements the specified interfaces. 'interfaces' can be a single interface or a list of interfaces. """ # If a single interface was specified then turn it into a list: try: iter( interfaces ) except TypeError: interfaces = [ interfaces ] # If the class has traits then check that it implements all traits and # methods on the specified interfaces: if issubclass( cls, HasTraits ): for interface in interfaces: if not self._check_has_traits_class( cls, interface, error_mode ): return False # Otherwise, just check that the class implements all methods on the # specified interface: else: for interface in interfaces: if not self._check_non_has_traits_class( cls, interface, error_mode ): return False return True #--------------------------------------------------------------------------- # Private interface: #--------------------------------------------------------------------------- def _check_has_traits_class ( self, cls, interface, error_mode ): """ Checks that a 'HasTraits' class implements an interface. """ return (self._check_traits( cls, interface, error_mode ) and self._check_methods( cls, interface, error_mode )) def _check_non_has_traits_class ( self, cls, interface, error_mode ): """ Checks that a non-'HasTraits' class implements an interface. """ return self._check_methods( cls, interface, error_mode ) def _check_methods ( self, cls, interface, error_mode ): """ Checks that a class implements the methods on an interface. """ cls_methods = self._get_public_methods( cls ) interface_methods = self._get_public_methods( interface ) for name in interface_methods: if name not in cls_methods: return self._handle_error( MISSING_METHOD % ( self._class_name( cls ), name, self._class_name( interface ) ), error_mode ) # Check that the method signatures are the same: cls_argspec = getargspec( cls_methods[ name ] ) interface_argspec = getargspec( interface_methods[ name ] ) if cls_argspec != interface_argspec: return self._handle_error( BAD_SIGNATURE % ( self._class_name( cls ), name, self._class_name( interface ) ), error_mode ) return True def _check_traits ( self, cls, interface, error_mode ): """ Checks that a class implements the traits on an interface. """ missing = set( interface.class_traits() ).difference( set( cls.class_traits() ) ) if len( missing ) > 0: return self._handle_error( MISSING_TRAIT % ( self._class_name( cls ), `list( missing )`[1:-1], self._class_name( interface ) ), error_mode ) return True def _get_public_methods ( self, cls ): """ Returns all public methods on a class. Returns a dictionary containing all public methods keyed by name. """ public_methods = {} for c in getmro( cls ): # Stop when we get to 'HasTraits'!: if c is HasTraits: break for name, value in c.__dict__.items(): if ((not name.startswith( '_' )) and (type( value ) is FunctionType)): public_methods[ name ] = value return public_methods def _class_name ( self, cls ): return cls.__name__ def _handle_error ( self, msg, error_mode ): if error_mode > 1: raise InterfaceError( msg ) if error_mode == 1: logger.warning( msg ) return False # A default interface checker: checker = InterfaceChecker() def check_implements ( cls, interfaces, error_mode = 0 ): """ Checks that the class implements the specified interfaces. 'interfaces' can be a single interface or a list of interfaces. """ return checker.check_implements( cls, interfaces, error_mode ) traits-4.5.0/traits/protocols/000077500000000000000000000000001233213561600163625ustar00rootroot00000000000000traits-4.5.0/traits/protocols/README.txt000066400000000000000000000002561233213561600200630ustar00rootroot00000000000000The traits.protocols package has been deprecated in Traits 4.4.0. Please use the traits.adaptation package instead (see the "Migration guide" in the Traits documentation). traits-4.5.0/traits/protocols/__init__.py000066400000000000000000000005331233213561600204740ustar00rootroot00000000000000"""Trivial Interfaces and Adaptation from PyProtocols. This package used to be a subset of the files from Phillip J. Eby's PyProtocols package. The package has been substituted by :mod:`traits.adaptation` as of Traits 4.4.0. Currently, the package contains deprecated aliases for backward compatibility, and will be removed in Traits 5.0 . """ traits-4.5.0/traits/protocols/advice.py000066400000000000000000000227601233213561600201760ustar00rootroot00000000000000""" This module implements functionality similar to class decorators. At the moment it is used for the 'implements' and 'adapts' functions, which have been deprecated together with the 'traits.protocols' package. Please don't import anything from this module! """ from __future__ import absolute_import from types import FunctionType import sys from .. import _py2to3 __all__ = ['addClassAdvisor'] def metamethod(func): """Wrapper for metaclass method that might be confused w/instance method""" return property(lambda ob: func.__get__(ob,ob.__class__)) if sys.version_info[0] < 3: from types import ClassType, InstanceType ClassicTypes = ClassType def classicMRO(ob, extendedClassic=False): stack = [] push = stack.insert pop = stack.pop push(0,ob) while stack: cls = pop() yield cls p = len(stack) for b in cls.__bases__: push(p,b) if extendedClassic: yield InstanceType yield object def getMRO(ob, extendedClassic=False): if isinstance(ob,ClassicTypes): return classicMRO(ob,extendedClassic) elif isinstance(ob,type): return ob.__mro__ return ob, else: def getMRO(ob, *args, **kwargs): if args or kwargs: kwargs.pop('extendedClassic',None) if len(args)>1 or kwargs: raise TypeError import warnings warnings.warn(DeprecationWarning( """In Python 3 there are no more ols-style classes. Therefore, extendedClassic has no meaning and should not be used. """ )) if isinstance(ob,type): return ob.__mro__ return ob, try: from ._speedups import metamethod, getMRO, classicMRO except ImportError: pass # property-safe 'super()' for Python 2.2; 2.3 can use super() instead def supermeta(typ,ob): starttype = type(ob) mro = starttype.__mro__ if typ not in mro: starttype = ob mro = starttype.__mro__ mro = iter(mro) for cls in mro: if cls is typ: mro = [cls.__dict__ for cls in mro] break else: raise TypeError("Not sub/supertypes:", starttype, typ) typ = type(ob) class theSuper(object): def __getattribute__(self,name): for d in mro: if name in d: descr = d[name] try: descr = descr.__get__ except AttributeError: return descr else: return descr(ob,typ) return object.__getattribute__(self,name) return theSuper() def getFrameInfo(frame): """Return (kind,module,locals,globals) for a frame 'kind' is one of "exec", "module", "class", "function call", or "unknown". """ f_locals = frame.f_locals f_globals = frame.f_globals sameNamespace = f_locals is f_globals hasModule = '__module__' in f_locals hasName = '__name__' in f_globals sameName = hasModule and hasName sameName = sameName and f_globals['__name__']==f_locals['__module__'] module = hasName and sys.modules.get(f_globals['__name__']) or None namespaceIsModule = module and module.__dict__ is f_globals if not namespaceIsModule: # some kind of funky exec kind = "exec" elif sameNamespace and not hasModule: kind = "module" elif sameName and not sameNamespace: kind = "class" elif not sameNamespace: kind = "function call" else: # How can you have f_locals is f_globals, and have '__module__' set? # This is probably module-level code, but with a '__module__' variable. kind = "unknown" return kind,module,f_locals,f_globals def addClassAdvisor(callback, depth=2): """Set up 'callback' to be passed the containing class upon creation This function is designed to be called by an "advising" function executed in a class suite. The "advising" function supplies a callback that it wishes to have executed when the containing class is created. The callback will be given one argument: the newly created containing class. The return value of the callback will be used in place of the class, so the callback should return the input if it does not wish to replace the class. The optional 'depth' argument to this function determines the number of frames between this function and the targeted class suite. 'depth' defaults to 2, since this skips this function's frame and one calling function frame. If you use this function from a function called directly in the class suite, the default will be correct, otherwise you will need to determine the correct depth yourself. This function works by installing a special class factory function in place of the '__metaclass__' of the containing class. Therefore, only callbacks *after* the last '__metaclass__' assignment in the containing class will be executed. Be sure that classes using "advising" functions declare any '__metaclass__' *first*, to ensure all callbacks are run. Moreover, since starting from Python 3, metaclasses are specified differently, this function does not work anymore. Worse, as the metaclass is selected even before running the class's body, there is no way to fix this in a general way. As long as the metaclass provides some hooks to run code at class creation time, we can use them, but standard "type" does not. """ if sys.version_info[0] >= 3: raise NotImplementedError("Class advisors are not possible in python 3.") frame = sys._getframe(depth) kind, module, caller_locals, caller_globals = getFrameInfo(frame) if kind not in ("class", "exec"): raise SyntaxError( "Advice must be in the body of a class statement" ) previousMetaclass = caller_locals.get('__metaclass__') defaultMetaclass = caller_globals.get('__metaclass__', type) #TODO: This used to be ClassType, but I think this was errornous. Check it! def advise(name,bases,cdict): if '__metaclass__' in cdict: del cdict['__metaclass__'] if previousMetaclass is None: if bases: # find best metaclass or use global __metaclass__ if no bases meta = determineMetaclass(bases) else: meta = defaultMetaclass elif isClassAdvisor(previousMetaclass): # special case: we can't compute the "true" metaclass here, # so we need to invoke the previous metaclass and let it # figure it out for us (and apply its own advice in the process) meta = previousMetaclass else: meta = determineMetaclass(bases, previousMetaclass) newClass = meta(name,bases,cdict) # this lets the callback replace the class completely, if it wants to return callback(newClass) # introspection data only, not used by inner function advise.previousMetaclass = previousMetaclass advise.callback = callback # install the advisor caller_locals['__metaclass__'] = advise def isClassAdvisor(ob): """True if 'ob' is a class advisor function""" return isinstance(ob,FunctionType) and hasattr(ob,'previousMetaclass') def determineMetaclass(bases, explicit_mc=None): """Determine metaclass from 1+ bases and optional explicit __metaclass__""" meta = [getattr(b,'__class__',type(b)) for b in bases] if explicit_mc is not None: # The explicit metaclass needs to be verified for compatibility # as well, and allowed to resolve the incompatible bases, if any meta.append(explicit_mc) if len(meta)==1: # easy case return meta[0] candidates = minimalBases(meta) # minimal set of metaclasses if not candidates: # they're all "classic" classes # should never happen in Python 3, so this should be fine from types import ClassType return ClassType elif len(candidates)>1: # We could auto-combine, but for now we won't... raise TypeError("Incompatible metatypes",bases) # Just one, return it return candidates[0] def minimalBases(classes): """Reduce a list of base classes to its ordered minimum equivalent""" classes = [c for c in classes if not _py2to3.is_old_style_class(c)] candidates = [] for m in classes: for n in classes: if issubclass(n,m) and m is not n: break else: # m has no subclasses in 'classes' if m in candidates: candidates.remove(m) # ensure that we're later in the list candidates.append(m) return candidates from weakref import ref class StrongRef(object): """Like a weakref, but for non-weakrefable objects""" __slots__ = 'referent' def __init__(self,referent): self.referent = referent def __call__(self): return self.referent def __hash__(self): return hash(self.referent) def __eq__(self,other): return self.referent==other def __repr__(self): return 'StrongRef(%r)' % self.referent def mkRef(ob,*args): """Return either a weakref or a StrongRef for 'ob' Note that extra args are forwarded to weakref.ref() if applicable.""" try: return ref(ob,*args) except TypeError: return StrongRef(ob) traits-4.5.0/traits/protocols/api.py000066400000000000000000000030371233213561600175100ustar00rootroot00000000000000"""Trivial Interfaces and Adaptation from PyProtocols. This package used to be a subset of the files from Phillip J. Eby's PyProtocols package. The package has been substituted by :mod:`traits.adaptation` as of Traits 4.4.0. Currently, the package contains deprecated aliases for backward compatibility, and will be removed in Traits 5.0 . """ from traits.util.api import deprecated @deprecated("use the 'adapt' function in 'traits.adaptation' instead") def adapt(*args, **kw): from traits.adaptation.api import adapt return adapt(*args, **kw) @deprecated("use the 'register_factory' function in 'traits.adaptation' instead") def declareAdapter(factory, provides, forTypes=(), forProtocols=(), forObjects=()): from traits.adaptation.api import register_factory from itertools import chain for from_protocol in chain(forTypes, forProtocols, forObjects): for to_protocol in provides: register_factory(factory, from_protocol, to_protocol) @deprecated("use the 'register_provides' function in 'traits.adaptation' instead") def declareImplementation(protocol, instancesProvide=(), instancesDoNotProvide=()): from traits.adaptation.api import register_provides for to_protocol in instancesProvide: register_provides(protocol, to_protocol) from traits.adaptation.adaptation_error import AdaptationError \ as AdaptationFailure # We will provide decorators as replacements for 'implements' and 'adapts' # in the future. from .advice import addClassAdvisor traits-4.5.0/traits/py2to3.h000066400000000000000000000156671233213561600156660ustar00rootroot00000000000000/* This header contains version specific implementations of certain often used tasks, behind a version agnostic API. */ #include "Python.h" /* Attribute names */ #if PY_MAJOR_VERSION < 3 PyObject *Py2to3_NormaliseAttrName(PyObject *name) { if( PyString_Check(name) ){ return name; #ifdef Py_USING_UNICODE } else if ( PyUnicode_Check( name ) ) { return PyUnicode_AsEncodedString( name, NULL, NULL ); #endif // #ifdef Py_USING_UNICODE } return NULL; } void Py2to3_FinishNormaliseAttrName(PyObject *name,PyObject *nname){ if(nname != name){ Py_DECREF(nname); } } PyObject *Py2to3_AttrNameCStr(PyObject *name) { return name; } #define Py2to3_AttrName_AS_STRING(name) PyString_AS_STRING(name) void Py2to3_FinishAttrNameCStr(PyObject *nname){ }; #else PyObject *Py2to3_NormaliseAttrName(PyObject *name) { if( PyUnicode_Check(name) ){ return name; } return NULL; } void Py2to3_FinishNormaliseAttrName(PyObject *name,PyObject *nname){ } PyObject *Py2to3_AttrNameCStr(PyObject *name) { return PyUnicode_AsUTF8String(name); } #define Py2to3_AttrName_AS_STRING(name) PyBytes_AS_STRING(name) void Py2to3_FinishAttrNameCStr(PyObject *nname){ Py_DECREF(nname); }; #endif /* Simple strings for PyErr formatting: * Python 2: - Attributes are ASCII - PyErr_Format uses PyString_FromFormat * Python 3: - Attributes are Unicode - PyErr_Format uses PyUnicode_FromFormat Thus SimpleString == PyString if Python < 3 else PyUnicode */ #if PY_MAJOR_VERSION >= 3 #define Py2to3_SimpleString_Check(name) PyUnicode_Check(name) #define Py2to3_SimpleString_GET_SIZE(name) PyUnicode_GET_SIZE(name) #define Py2to3_SimpleString_Type PyUnicode_Type #define Py2to3_PYERR_SIMPLE_STRING_FMTCHR "U" #define Py2to3_PYERR_PREPARE_SIMPLE_STRING(name) name #define Py2to3_SimpleString_FromString(string) PyUnicode_FromString(string) #else #define Py2to3_SimpleString_Check(name) PyString_Check(name) #define Py2to3_SimpleString_GET_SIZE(name) PyString_GET_SIZE(name) #define Py2to3_SimpleString_Type PyString_Type #define Py2to3_PYERR_SIMPLE_STRING_FMTCHR "s" #define Py2to3_PYERR_PREPARE_SIMPLE_STRING(name) PyString_AS_STRING(name) #define Py2to3_SimpleString_FromString(string) PyString_FromString(string) #endif /* The following macro is defined from Python 2.6 and differently in Python 3 */ #ifndef Py_TYPE #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #endif /* In Python 3, all ints are longs */ #if PY_MAJOR_VERSION >= 3 #define Py2to3_PyNum_Check PyLong_Check #define Py2to3_PyNum_FromLong PyLong_FromLong #define Py2to3_PyNum_AsLong PyLong_AsLong #else #define Py2to3_PyNum_Check PyInt_Check #define Py2to3_PyNum_FromLong PyInt_FromLong #define Py2to3_PyNum_AsLong PyInt_AsLong #endif /* Get hash of an object, using cached value for attribute names */ #ifndef Py_hash_t #define Py_hash_t long #endif #if PY_MAJOR_VERSION < 3 long Py2to3_GetHash_wCache(PyObject *obj){ long hash; if ( PyString_CheckExact( obj ) && ((hash = ((PyStringObject *) obj)->ob_shash) != -1) ) { return hash; } return PyObject_Hash( obj ); } #else Py_hash_t Py2to3_GetHash_wCache(PyObject *obj){ #ifndef Py_LIMITED_API Py_hash_t hash = -1; if ( PyUnicode_CheckExact( obj ) ) { #if PY_MAJOR_VERSION < 3 || PY_MINOR_VERSION < 3 hash = ((PyUnicodeObject *) obj)->hash; #else hash = ((PyUnicodeObject *) obj)->_base._base.hash; #endif // } else if ( PyBytes_CheckExact( key )) { // hash = ((PyBytesObject *) key)->ob_shash; } if (hash == -1) { hash = PyObject_Hash( obj ); } return hash; #else return PyObject_Hash( obj ); #endif // #ifndef Py_LIMITED_API } #endif // #if PY_MAJOR_VERION < 3 /* Get a value from a dict whose keys are attribute names. If *name* is of a type unfitting for an attribute name, *bad_attr* is returned. Does use the hash cache where possible. Precondition: *dict* is a valid PyDictObject */ #if PY_MAJOR_VERSION < 3 #ifdef Py_USING_UNICODE #define Py2to3_AttrNameCheck(name) (PyString_Check(name) || PyUnicode_Check(name)) #else #define Py2to3_AttrNameCheck(name) (PyString_Check(name)) #endif PyObject *Py2to3_GetAttrDictValue(PyDictObject * dict, PyObject *name, PyObject *bad_attr) { long hash; PyObject *nname; PyObject *value; if ( PyString_CheckExact( name ) ) { if ( (hash = ((PyStringObject *) name)->ob_shash) == -1 ) hash = PyObject_Hash( name ); return (dict->ma_lookup)( dict, name, hash )->me_value; } nname = Py2to3_NormaliseAttrName(name); if( nname == NULL ){ PyErr_Clear(); return bad_attr; } hash = PyObject_Hash( nname ); if( hash == -1 ){ Py2to3_FinishNormaliseAttrName(name,nname); PyErr_Clear(); return NULL; } value = (dict->ma_lookup)( dict, nname, hash )->me_value; Py2to3_FinishNormaliseAttrName(name,nname); return value; } #else // #if PY_MAJOR_VERSION < 3 #define Py2to3_AttrNameCheck(name) (PyUnicode_Check(name)) PyObject *Py2to3_GetAttrDictValue(PyDictObject * dict, PyObject *name, PyObject *bad_attr) { #if !defined(Py_LIMITED_API) && (PY_MAJOR_VERSION < 3 || PY_MINOR_VERSION < 3) && 0 // this does not work as intended! don't use it! Py_hash_t hash; if( PyUnicode_CheckExact( name ) ) { #if PY_MINOR_VERSION < 3 hash = ((PyUnicodeObject *) dict)->hash; #else // currently not usable, as dict->ma_lookup does not exist either hash = ((PyUnicodeObject *) dict)->_base._base.hash; #endif if( hash == -1) hash = PyObject_Hash( name ); return (dict->ma_lookup)( dict, name, hash )->me_value; } #endif // #ifndef Py_LIMITED_API if( !PyUnicode_Check(name) ) return bad_attr; return PyDict_GetItem((PyObject *)dict, name); } #endif // #if PY_MAJOR_VERSION < 3 /* */ double Py2to3_PyNum_AsDouble(PyObject *value) { #if PY_MAJOR_VERSION < 3 if ( PyInt_Check( value ) ) { return (double) PyInt_AS_LONG( value ); } else if( !PyLong_Check(value) ){ #else if ( !PyLong_Check( value ) ) { #endif // #if PY_MAJOR_VERSION < 3 PyErr_SetNone( PyExc_TypeError ); return -1.; } return PyLong_AsDouble( value ); } #ifndef PyVarObject_HEAD_INIT #define PyVarObject_HEAD_INIT(type, size) \ PyObject_HEAD_INIT(type) size, #endif #if PY_MAJOR_VERSION >= 3 #define Py2to3_MOD_ERROR_VAL NULL #define Py2to3_MOD_SUCCESS_VAL(val) val #define Py2to3_MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void) #define Py2to3_MOD_DEF(ob, name, doc, methods) \ static struct PyModuleDef moduledef = { \ PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \ ob = PyModule_Create(&moduledef); #else #define Py2to3_MOD_ERROR_VAL #define Py2to3_MOD_SUCCESS_VAL(val) #define Py2to3_MOD_INIT(name) void init##name(void) #define Py2to3_MOD_DEF(ob, name, doc, methods) \ ob = Py_InitModule3(name, methods, doc); #endif traits-4.5.0/traits/testing/000077500000000000000000000000001233213561600160135ustar00rootroot00000000000000traits-4.5.0/traits/testing/__init__.py000066400000000000000000000006061233213561600201260ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2005-2013 by Enthought, Inc. # All rights reserved. #------------------------------------------------------------------------------ """ Scripts and assert tools related to running unit tests. These scripts also allow running test suites in separate processes and aggregating the results. """ traits-4.5.0/traits/testing/api.py000066400000000000000000000002131233213561600171320ustar00rootroot00000000000000from doctest_tools import doctest_for_module from nose_tools import deprecated, performance, skip from unittest_tools import UnittestTools traits-4.5.0/traits/testing/dependencies/000077500000000000000000000000001233213561600204415ustar00rootroot00000000000000traits-4.5.0/traits/testing/dependencies/ImportManager.py000066400000000000000000000216541233213561600235700ustar00rootroot00000000000000""" This code was found on http://www.webwareforpython.org/. The only modifications are for the explicit purpose of tracking circular dependencies. """ """ImportManager Manages imported modules and protects against concurrent imports. Keeps lists of all imported Python modules and templates as well as other config files used by Webware for Python. For modules which are not directly imported, ImportManager can use ImportSpy to keep track of them. This can be used to detect changes in source files, templates or config files in order to reload them automatically by the AutoReloadingAppServer. The use of ImportSpy can be suppressed with the``UseImportSpy`` setting. """ #from Common import * import os import sys import imp class ImportLock: """Lock for multi-threaded imports. Provides a lock for protecting against concurrent imports. This is necessary because WebKit is multithreaded and uses its own import hook. This class abstracts the difference between using the Python interpreter's global import lock, and using our own RLock. The global lock is the correct solution, but is only available in Python since version 2.2.3. If it's not available, we fall back to using an RLock (which is not as good, but better than nothing). """ def __init__(self): """Create the lock. Aliases the `acquire` and `release` methods to `imp.acquire_lock` and `imp.release_lock` (if available), or to acquire and release our own RLock. """ if hasattr(imp, 'acquire_lock'): self.acquire = imp.acquire_lock self.release = imp.release_lock else: # fallback for Python < 2.3 from threading import RLock self._lock = RLock() self.acquire = self._lock.acquire self.release = self._lock.release class ImportManager(object): """The import manager. Keeps track of the Python modules and other system files that have been imported and are used by Webware. """ _imp = _spy = None def __init__(self): """Create import hook.""" assert not self._imp, "Only one instance of ImportManager is possible." self._imp = True # Object.__init__(self) self._lock = ImportLock() self._fileList = {} self._moduleFiles = {} self._otherFiles = set() self._notifyHook = None def load_module(self, name, file, filename, info): """Replaces imp.load_module.""" try: try: self._lock.acquire() mod = imp.load_module(name, file, filename, info) finally: self._lock.release() self.recordModule(mod) except: # Also record filepaths which weren't successfully loaded, which # may happen due to a syntax error in a servlet, because we also # want to know when such a file is modified: self.recordFile(filename) raise return mod def find_module(self, name, path=None): """Replaces imp.find_module.""" return imp.find_module(name, path) def activateImportSpy(self): """Activate ImportSpy to keep track of modules loaded elsewhere.""" if not self._spy: from ImportSpy import activate self._spy = activate(self) return self._spy def fileList(self, update=True): """Return the list of tracked files.""" if not self._spy and update: # Update list of files of imported modules moduleNames = [] for modname in sys.modules: if not modname in self._moduleFiles: moduleNames.append(modname) if moduleNames: self.recordModules(moduleNames) return self._fileList def notifyOfNewFiles(self, hook): """Register notification hook. Called by someone else to register that they'd like to be know when a new file is imported. """ self._notifyHook = hook def watchFile(self, path, modname=None, getmtime=os.path.getmtime): """Add more files to watch without importing them.""" modtime = getmtime(path) self._fileList[path] = modtime if modname: self._moduleFiles[modname] = path else: self._otherFiles.add(path) # send notification that this file was imported if self._notifyHook: self._notifyHook(path, modtime) def recordModule(self, mod, isfile=os.path.isfile): """Record a module.""" modname = getattr(mod, '__name__', None) if not modname or not modname in sys.modules: return fileList = self._fileList # __orig_file__ is used for PSP, Kid and Cheetah templates; we want # to record the source filenames, not the auto-generated modules: f = getattr(mod, '__orig_file__', None) if f and not f in fileList: try: if isfile(f): self.watchFile(f, modname) except OSError: pass else: f = getattr(mod, '__file__', None) if f and not f in fileList: # record the .py file corresponding to each .pyc or .pyo if f[-4:].lower() in ['.pyc', '.pyo']: f = f[:-1] try: if isfile(f): self.watchFile(f, modname) else: self.watchFile(os.path.join(f, '__init__.py')) except OSError: pass def recordModules(self, moduleNames=None): """Record a list of modules (or all modules).""" if moduleNames is None: moduleNames = sys.modules.keys() for modname in moduleNames: mod = sys.modules[modname] self.recordModule(mod) def recordFile(self, filename, isfile=os.path.isfile): """Record a file.""" if isfile(filename): self.watchFile(filename) def fileUpdated(self, filename, update=True, getmtime=os.path.getmtime): """Check whether file has been updated.""" fileList = self.fileList(update) try: mtime = fileList[filename] except KeyError: return True try: newmtime = getmtime(filename) except OSError: return True if mtime < newmtime: fileList[filename] = newmtime for modname, modfile in self._moduleFiles.items(): if modfile == filename: break else: return True # it's not a module, we must reload mod = sys.modules.get(modname, None) if not mod or not getattr(mod, '__donotreload__', None): return True # it's a module that needs to be reloaded return False def updatedFile(self, update=True, getmtime=os.path.getmtime): """Check whether one of the files has been updated.""" fileList = self.fileList(update) for filename, mtime in fileList.items(): try: newmtime = getmtime(filename) except OSError: return filename if mtime < newmtime: fileList[filename] = newmtime for modname, modfile in self._moduleFiles.items(): if modfile == filename: break else: return filename # it's not a module, we must reload mod = sys.modules.get(modname, None) if not mod or not getattr(mod, '__donotreload__', None): return filename # it's a module that needs to be reloaded return False def delModules(self, includePythonModules=False, excludePrefixes=[]): """Delete imported modules. Deletes all the modules that the ImportSpy has ever imported unless they are part of WebKit. This in support of DebugAppServer's useful (yet imperfect) support for AutoReload. """ moduleFiles = self._moduleFiles moduleNames = moduleFiles.keys() fileList = self._fileList for modname in moduleNames: if modname == __name__: continue filename = self._moduleFiles[modname] if not includePythonModules: if not filename or filename.startswith(sys.prefix): continue for prefix in excludePrefixes: if modname.startswith(prefix): break else: try: del sys.modules[modname] except KeyError: pass try: del moduleFiles[modname] except KeyError: pass try: del fileList[filename] except KeyError: pass traits-4.5.0/traits/testing/dependencies/ImportSpy.py000066400000000000000000000141011233213561600227560ustar00rootroot00000000000000""" This code was found on http://www.webwareforpython.org/. The only modifications are for the explicit purpose of tracking circular dependencies. """ """ImportSpy Keeps track of modules not imported directly by Webware for Python. This module helps save the filepath of every module which is imported. This is used by the `AutoReloadingAppServer` (see doc strings for more information) to restart the server if any source files change. Other than keeping track of the filepaths, the behaviour of this module loader is identical to Python's default behaviour. If the system supports FAM (file alteration monitor) and python-fam is installed, then the need for reloading can be monitored very effectively with the use of ImportSpy. Otherwise, ImportSpy will not have much benefit. Note that ImportSpy is based on the new import hooks of Python 2.3 described in PEP 302, falling back to the old ihooks module if the new hooks are not available. In some cases this may become problematic, when other templating systems are used with Webware which are also using ihook support to load their templates, or if they are using zipimports. Therefore, it is possible to suppress the use of ImportSpy by setting `UseImportSpy` in AppServer.config to False. """ try: # if possible, use new (PEP 302) import hooks from sys import path_hooks, path_importer_cache except ImportError: path_hooks = None import os.path import sys incomplete_imports = [] find_module_chain = [] dependency_map = {} indent = 0 debug = False def path_could_be_package(path, package): parts = package.split('.') parts.reverse() for part in parts: basename, ext = os.path.splitext(os.path.basename(path)) if ext == ".so": if basename != part: part += "module" elif basename != part: return False path = os.path.dirname(path) return True def circular_tester(path, modtime): if len(find_module_chain) == 0: return elif path_could_be_package(path, find_module_chain[-1]): return for m in incomplete_imports: try: n,p,d = ImportSpy._imp.find_module(m) except ImportError: print " import stack: " + str(incomplete_imports) sys.exit(65) if path_hooks is not None: from os.path import isdir class ImportSpy(object): """New style import tracker.""" _imp = None def __init__(self, path=None): """Create importer.""" assert self._imp if path and isdir(path): self.path = path else: raise ImportError def find_module(self, fullname): """Replaces imp.find_module.""" global indent if debug: print ' '*indent + "Find module(self, %s)" % fullname indent += 1 try: self.file, self.filename, self.info = self._imp.find_module( fullname.split('.')[-1], [self.path]) if (os.path.isdir(self.filename)): find_module_chain.append(fullname) except ImportError: self.file = None if self.file: find_module_chain.append(fullname) indent -= 1 return self else: indent -= 1 return None def load_module(self, fullname): """Replaces imp.load_module.""" global indent global find_module_chain if debug: print ' '*indent + "Load module %s" % fullname indent += 1 # build the dependency map if len(find_module_chain) > 1: parent = find_module_chain[-2] if parent in dependency_map: dependency_map[parent].append(fullname) else: dependency_map[parent] = [fullname] else: if len(incomplete_imports) == 0: # this is a top level node pass else: parent = incomplete_imports[-1] if parent in dependency_map: dependency_map[parent].append(fullname) else: dependency_map[parent] = [fullname] incomplete_imports.append(fullname) mod = self._imp.load_module(fullname, self.file, self.filename, self.info) incomplete_imports.remove(fullname) find_module_chain = [] indent -= 1 if debug: print ' '*indent + "Complete loading %s" % fullname if mod: mod.__loader__ = self return mod def activate(imp_manager): """Activate ImportSpy.""" assert not ImportSpy._imp ImportSpy._imp = imp_manager path_hooks.append(ImportSpy) path_importer_cache.clear() imp_manager.recordModules() return 'new import hooks' else: # Python < 2.3, fall back to using the old ihooks module import ihooks class ImportSpy(ihooks.ModuleLoader): """Old style import tracker.""" _imp = None def __init__(self): """Create import hook.""" assert self._imp ihooks.ModuleLoader.__init__(self) self._lock = self._imp._lock imp = ihooks.ModuleImporter(loader=self) ihooks.install(imp) self._imp.recordModules() def load_module(self, name, stuff): """Replaces imp.load_module.""" file, filename, info = stuff try: try: self._lock.acquire() mod = ihooks.ModuleLoader.load_module(self, name, stuff) finally: self._lock.release() self._imp.recordModule(mod) except: self._imp.recordFile(filename) raise return mod def activate(imp_manager): """Activate ImportSpy.""" assert not ImportSpy._imp ImportSpy._imp = imp_manager ImportSpy() return 'ihooks' traits-4.5.0/traits/testing/dependencies/circular_test.py000066400000000000000000000044061233213561600236620ustar00rootroot00000000000000import ImportSpy import ImportManager import sys import os import getopt def usage(): print "usage: %s [--chart] [-p] input" % sys.argv[0] def generate_dot(parent, dependents): # omit standard python modules import distutils.sysconfig dirs_to_omit = [ os.path.realpath(os.path.join(distutils.sysconfig.get_python_lib(), '..')) ] if 'win32' == sys.platform: for i in range(len(dirs_to_omit)): dir = dirs_to_omit[i] dirs_to_omit[i] = dir.lower() s = '' for d in dependents: try: __import__(d) file = sys.modules[d].__file__ if 'win32' == sys.platform: file = file.lower() if os.path.dirname(file) not in dirs_to_omit: s += ' "' + parent + '" -> "' + d + '";\n' else: print "omitting " + d except Exception, ex: print "importing %s failed" % d return s def generate_dot_file(top, dep_map, filename): s = 'digraph dependencies {\n' s += generate_dot(top, dep_map.keys()) for key,value in dep_map.items(): s += generate_dot(key, value) s += '}\n' f = open(filename, "w") f.write(s) f.close() def main(): try: opts, args = getopt.getopt(sys.argv[1:], "p", ["chart"]) except getopt.GetoptError, ex: print ex usage() sys.exit(65) if len(args) != 1: usage() sys.exit(65) package_flag = False chart_flag = False for opt,arg in opts: if opt == "-p": package_flag = True if opt == "--chart": chart_flag = True import_manager = ImportManager.ImportManager() import_manager.notifyOfNewFiles(ImportSpy.circular_tester) ImportSpy.activate(import_manager) if package_flag: __import__(args[0]) else: #todo: tinker with __name__ execfile(args[0]) sys.path_hooks = sys.path_hooks[:-1] if chart_flag: dot_file = "dependencies.dot" generate_dot_file(args[0], ImportSpy.dependency_map, dot_file) #try to find 'dot' import subprocess if 0 == subprocess.call('dot -T svg -o %s %s' % (args[0] + ".svg", dot_file)): os.unlink(dot_file) if __name__ == "__main__": main() traits-4.5.0/traits/testing/dependencies/deptrack.py000066400000000000000000000116771233213561600226240ustar00rootroot00000000000000import os import sys import subprocess import pickle import operator dependent_pickle_name = "dependents.pickle" def get_dependent(module_name): if os.path.exists(dependent_pickle_name): dep_map = pickle.load(open(dependent_pickle_name, "r")) if module_name in dep_map: return dep_map[module_name] return None def store_dependent(module_name, module): if os.path.exists(dependent_pickle_name): dep_map = pickle.load(open(dependent_pickle_name, "r")) else: dep_map = {} dep_map[module_name] = module pickle.dump(dep_map, open(dependent_pickle_name, "w")) def print_dependencies(module_name): dep_map = pickle.load(open(dependent_pickle_name, "r")) print dep_map[module_name].pretty_print(0) def generate_dot_file(filename): s = 'digraph dependencies {\n' dep_map = pickle.load(open(dependent_pickle_name, "r")) for key,value in dep_map.items(): s += value.generate_dot() s += '}\n' f = open(filename, "w") f.write(s) f.close() class Dependent(object): def __init__(self, name, path, script=False): self.name = name self.path = path if script: self.dependents = self._exec_script() else: self.dependents = self._find_dependencies_subprocess() store_dependent(self.name, self) def _exec_script(self): global_dict = globals() global_dict['__name__'] = self.name global_dict['__file__'] = self.path global_dict['sys.argv'] = self.path before = sys.modules.keys() sys.path.append(os.path.dirname(self.path)) execfile(self.path, global_dict) after = sys.modules.keys() dependents = [] for key in after: if key not in before: m = sys.modules[key] if (m is not None) and ('__path__' in dir(m)): dependent = get_dependent(m.__name__) if (dependent is None): new_dependent = Dependent(m.__name__, m.__path__) dependents.append(new_dependent) store_dependent(m.__name__, new_dependent) return dependents def _find_dependencies_subprocess(self): dependent = get_dependent(self.name) if dependent is None: # put something in the map now & pickle it so # subprocesses wont get stuck in a loop store_dependent(self.name, '') subprocess.call([sys.executable, sys.argv[0], "-m", self.name]) store_dependent(self.name, self) f = open(self.name + ".pickle", "r") return pickle.load(f) else: return d.dependents def __str__(self): return self.__format_str__(0) def pretty_print(self, indent): s = operator.repeat(' ', indent) + self.name + "\n" indent = indent + 2 for d in self.dependents: s += operator.repeat(' ', indent) + d.name + "\n" for d in self.dependents: s += d.pretty_print(indent) + "\n" #trim the last newline off return s[:-1] def generate_dot(self): s = '' for d in self.dependents: s += ' "' + self.name + '" -> "' + d.name + '";\n' return s def find_dependencies_script(filename): script = Dependent(os.path.basename(filename).split(".")[0], filename, script=True) store_dependent(script.name, script) return def find_dependencies_module(module): dependents = [] before = sys.modules.keys() try: __import__(module) except: print "[ERROR] importing %s failed" % module after = sys.modules.keys() for key in after: if key not in before: m = sys.modules[key] if (m is not None) and ('__path__' in dir(m)): dependent = get_dependent(m.__name__) if (dependent is None): new_dependent = Dependent(m.__name__, m.__path__) dependents.append(new_dependent) store_dependent(m.__name__, new_dependent) f = open(module + ".pickle", "w") pickle.dump(dependents, f) return dependents def clean_pickles(): import glob pickles = glob.glob("*.pickle") for pickle in pickles: os.unlink(pickle) def usage(): print "usage:" print " %s: <-m|-s> [[-o] [filename]]" % sys.argv[0] sys.exit(65) if __name__ == "__main__": if len(sys.argv) < 3: usage() if "-m" == sys.argv[1]: dependencies = find_dependencies_module(sys.argv[2]) elif "-s" == sys.argv[1]: clean_pickles() find_dependencies_script(sys.argv[2]) else: usage() if len(sys.argv) > 3: if sys.argv[3] == '-o': if len(sys.argv) > 4: generate_dot_file(sys.argv[4]) else: name,ext = os.path.splitext(sys.argv[2]) print_dependencies(name) else: usage() # only clean the pickles up if its a script, so the module subprocesses can find # them later # # TODO: add a command line flag for keeping the pickles # elif "-s" == sys.argv[1]: clean_pickles() traits-4.5.0/traits/testing/doctest_tools.py000066400000000000000000000033301233213561600212510ustar00rootroot00000000000000""" Tools for having doctest and unittest work together more nicely. Eclipse's PyDev plugin will run your unittest files for you very nicely. The doctest_for_module function allows you to easily run the doctest for a module along side your standard unit tests within Eclipse. """ # Standard library imports import doctest from traits.testing.unittest_tools import unittest import sys def doctest_for_module(module): """ Create a TestCase from a module's doctests that will be run by the standard unittest.main(). Example tests/test_foo.py:: import unittest import foo from traits.testing.api import doctest_for_module class FooTestCase(unittest.TestCase): ... class FooDocTest(doctest_for_module(foo)): pass if __name__ == "__main__": # This will run and report both FooTestCase and the doctests in # module foo. unittest.main() Alternatively, you can say:: FooDocTest = doctest_for_module(foo) instead of:: class FooDocTest(doctest_for_module(foo)): pass """ class C(unittest.TestCase): def test_dummy(self): pass # Make the test case loader find us def run(self, result=None): # doctest doesn't like nose.result.TextTestResult objects, # so we try to determine if thats what we're dealing # with and use its internal result attribute instead if hasattr(result, 'result'): doctest.DocTestSuite(module).run(result.result) else: doctest.DocTestSuite(module).run(result) return C traits-4.5.0/traits/testing/nose_tools.py000066400000000000000000000024551233213561600205570ustar00rootroot00000000000000"Non-standard functions for the 'nose' testing framework." try: from nose import DeprecatedTest, SkipTest from nose.tools import make_decorator def skip(f): """ Decorator to indicate a test should be skipped. """ def g(*args, **kw): raise SkipTest() return make_decorator(f)(g) def deprecated(f): """ Decorator to indicate a test is deprecated. """ def g(*args, **kw): raise DeprecatedTest() return make_decorator(f)(g) except ImportError: # Define stubs in case nose isn't installed. import warnings def skip(f): """ Stub replacement for marking a unit test to be skipped in the absence of 'nose'. """ warnings.warn("skipping unit tests requires the package 'nose'") return f def deprecated(f): """ Stub replacement for marking a unit test deprecated in the absence of 'nose'. """ warnings.warn("skipping deprecated unit tests requires the package 'nose'") return f def performance(f): """ Decorator to add an attribute to the test to mark it as a performance-measuring test. """ f.performance = True return f #### EOF ####################################################################### traits-4.5.0/traits/testing/tests/000077500000000000000000000000001233213561600171555ustar00rootroot00000000000000traits-4.5.0/traits/testing/tests/__init__.py000066400000000000000000000000001233213561600212540ustar00rootroot00000000000000traits-4.5.0/traits/testing/tests/test_unittest_tools.py000066400000000000000000000247221233213561600236740ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2005-2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! #------------------------------------------------------------------------------ import threading import time import sys from traits import _py2to3 from traits.testing.unittest_tools import unittest from traits.api import (Bool, Event, Float, HasTraits, Int, List, on_trait_change) from traits.testing.api import UnittestTools class TestObject(HasTraits): number = Float(2.0) list_of_numbers = List(Float) flag = Bool @on_trait_change('number') def _add_number_to_list(self, value): self.list_of_numbers.append(value) def add_to_number(self, value): self.number += value class UnittestToolsTestCase(unittest.TestCase, UnittestTools): def setUp(self): self.test_object = TestObject() def test_when_using_with(self): """ Check normal use cases as a context manager. """ test_object = self.test_object # Change event should NOT BE detected with self.assertTraitDoesNotChange(test_object, 'number') as result: test_object.flag = True test_object.number = 2.0 msg = 'The assertion result is not None: {0}'.format(result.event) self.assertIsNone(result.event, msg=msg) # Change event should BE detected with self.assertTraitChanges(test_object, 'number') as result: test_object.flag = False test_object.number = 5.0 expected = (test_object, 'number', 2.0, 5.0) self.assertSequenceEqual(expected, result.event) # Change event should BE detected exactly 2 times with self.assertTraitChanges(test_object, 'number', count=2) as result: test_object.flag = False test_object.number = 4.0 test_object.number = 3.0 expected = [(test_object, 'number', 5.0, 4.0), (test_object, 'number', 4.0, 3.0)] self.assertSequenceEqual(expected, result.events) self.assertSequenceEqual(expected[-1], result.event) # Change event should BE detected with self.assertTraitChanges(test_object, 'number') as result: test_object.flag = True test_object.add_to_number(10.0) expected = (test_object, 'number', 3.0, 13.0) self.assertSequenceEqual(expected, result.event) # Change event should BE detected exactly 3 times with self.assertTraitChanges(test_object, 'number', count=3) as result: test_object.flag = True test_object.add_to_number(10.0) test_object.add_to_number(10.0) test_object.add_to_number(10.0) expected = [(test_object, 'number', 13.0, 23.0), (test_object, 'number', 23.0, 33.0), (test_object, 'number', 33.0, 43.0)] self.assertSequenceEqual(expected, result.events) self.assertSequenceEqual(expected[-1], result.event) def test_assert_multi_changes(self): test_object = self.test_object # Change event should NOT BE detected with self.assertMultiTraitChanges([test_object], [], ['flag', 'number', 'list_of_numbers[]']) as results: test_object.number = 2.0 events = filter(bool, (result.event for result in results)) msg = 'The assertion result is not None: {0}'.format(", ".join(events)) self.assertFalse(events, msg=msg) # Change event should BE detected with self.assertMultiTraitChanges( [test_object], ['number', 'list_of_numbers[]'], ['flag']) as results: test_object.number = 5.0 events = filter(bool, (result.event for result in results)) msg = 'The assertion result is None' self.assertTrue(events, msg=msg) def test_when_using_functions(self): test_object = self.test_object # Change event should BE detected self.assertTraitChanges(test_object, 'number', 1, test_object.add_to_number, 13.0) # Change event should NOT BE detected self.assertTraitDoesNotChange(test_object, 'flag', test_object.add_to_number, 13.0) def test_indirect_events(self): """ Check catching indirect change events. """ test_object = self.test_object # Change event should BE detected with self.assertTraitChanges(test_object, 'list_of_numbers[]') as \ result: test_object.flag = True test_object.number = -3.0 expected = (test_object, 'list_of_numbers_items', [], [-3.0]) self.assertSequenceEqual(expected, result.event) def test_exception_inside_context(self): """ Check that exception inside the context statement block are propagated. """ test_object = self.test_object with self.assertRaises(AttributeError): with self.assertTraitChanges(test_object, 'number'): test_object.i_do_exist with self.assertRaises(AttributeError): with self.assertTraitDoesNotChange(test_object, 'number'): test_object.i_do_exist def test_non_change_on_failure(self): """ Check behaviour when assertion should be raised for non trait change. """ test_object = self.test_object traits = 'flag, number' with self.assertRaises(AssertionError): with self.assertTraitDoesNotChange(test_object, traits) as result: test_object.flag = True test_object.number = -3.0 expected = [(test_object, 'flag', False, True), (test_object, 'number', 2.0, -3.0)] self.assertEqual(result.events, expected) def test_change_on_failure(self): """ Check behaviour when assertion should be raised for trait change. """ test_object = self.test_object with self.assertRaises(AssertionError): with self.assertTraitChanges(test_object, 'number') as result: test_object.flag = True self.assertEqual(result.events, []) # Change event will not be fired 3 times with self.assertRaises(AssertionError): with self.assertTraitChanges(test_object, 'number', count=3) as \ result: test_object.flag = True test_object.add_to_number(10.0) test_object.add_to_number(10.0) expected = [(test_object, 'number', 2.0, 12.0), (test_object, 'number', 12.0, 22.0)] self.assertSequenceEqual(expected, result.events) def test_asserts_in_context_block(self): """ Make sure that the traits context manager does not stop regular assertions inside the managed code block from happening. """ test_object = TestObject(number=16.0) with self.assertTraitDoesNotChange(test_object, 'number'): self.assertEqual(test_object.number, 16.0) with self.assertRaisesRegexp(AssertionError, '16\.0 != 12\.0'): with self.assertTraitDoesNotChange(test_object, 'number'): self.assertEqual(test_object.number, 12.0) def test_special_case_for_count(self): """ Count equal to 0 should be valid but it is discouraged. """ test_object = TestObject(number=16.0) with self.assertTraitChanges(test_object, 'number', count=0): test_object.flag = True def test_assert_trait_changes_async(self): # Exercise assertTraitChangesAsync. thread_count = 10 events_per_thread = 1000 class A(HasTraits): event = Event a = A() def thread_target(obj, count): "Fire obj.event 'count' times." for _ in xrange(count): obj.event = True threads = [ threading.Thread(target=thread_target, args=(a, events_per_thread)) for _ in xrange(thread_count) ] expected_count = thread_count * events_per_thread with self.assertTraitChangesAsync( a, 'event', expected_count, timeout=60.0): for t in threads: t.start() for t in threads: t.join() def test_assert_trait_changes_async_events(self): # Check access to the events after the with # block completes. thread_count = 10 events_per_thread = 100 class A(HasTraits): event = Event(Int) a = A() def thread_target(obj, count): "Fire obj.event 'count' times." for n in xrange(count): time.sleep(0.001) obj.event = n threads = [ threading.Thread(target=thread_target, args=(a, events_per_thread)) for _ in xrange(thread_count) ] expected_count = thread_count * events_per_thread with self.assertTraitChangesAsync( a, 'event', expected_count, timeout=60.0) as event_collector: for t in threads: t.start() for t in threads: t.join() _py2to3.assertCountEqual( self, event_collector.events, range(events_per_thread) * thread_count, ) def test_assert_trait_changes_async_failure(self): # Exercise assertTraitChangesAsync. thread_count = 10 events_per_thread = 10000 class A(HasTraits): event = Event a = A() def thread_target(obj, count): "Fire obj.event 'count' times." for _ in xrange(count): obj.event = True threads = [ threading.Thread(target=thread_target, args=(a, events_per_thread)) for _ in xrange(thread_count) ] expected_count = thread_count * events_per_thread with self.assertRaises(AssertionError): with self.assertTraitChangesAsync(a, 'event', expected_count + 1): for t in threads: t.start() for t in threads: t.join() if __name__ == '__main__': unittest.main() traits-4.5.0/traits/testing/unittest_tools.py000066400000000000000000000345421233213561600214740ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2005-2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! #------------------------------------------------------------------------------ """ Trait assert mixin class to simplify test implementation for Trait Classes. """ import contextlib import threading from traits.api import (Any, Event, HasStrictTraits, Instance, Int, List, Property, Str) from traits.util.async_trait_wait import wait_for_condition # Compatibility layer for Python 2.6: try loading unittest2 import sys from traits import _py2to3 if sys.version_info[:2] == (2, 6): import unittest2 as unittest else: import unittest class _AssertTraitChangesContext(object): """ A context manager used to implement the trait change assert methods. Attributes ---------- obj : HasTraits The HasTraits class instance who's class trait will change. xname : str The extended trait name of trait changes to listen to. count : int, optional The expected number of times the event should be fired. When None (default value) there is no check for the number of times the change event was fired. events : list of tuples A list with tuple elements containing the arguments of an `on_trait_change` event signature (, , , ). Raises ------ AssertionError : When the desired number of trait changed did not take place or when `count = None` and no trait change took place. """ def __init__(self, obj, xname, count, test_case): """ Initialize the trait change assertion context manager. Parameters ---------- obj : HasTraits The HasTraits class instance who's class trait will change. xname : str The extended trait name of trait changes to listen to. count : int, optional The expected number of times the event should be fired. When None (default value) there is no check for the number of times the change event was fired. test_case : TestCase A unittest TestCase where to raise the failureException if necessary. Notes ----- - Checking if the provided xname corresponds to valid traits in the class is not implemented yet. """ self.obj = obj self.xname = xname self.count = count self.event = None self.events = [] self.failureException = test_case.failureException def _listener(self, obj, name, old, new): """ Dummy trait listener. """ self.event = (obj, name, old, new) self.events.append(self.event) def __enter__(self): """ Bind the trait listener. """ self.obj.on_trait_change(self._listener, self.xname) return self def __exit__(self, exc_type, exc_value, tb): """ Remove the trait listener. """ if exc_type is not None: return False self.obj.on_trait_change(self._listener, self.xname, remove=True) if self.count is not None and len(self.events) != self.count: msg = 'Change event for {0} was fired {1} times instead of {2}' items = self.xname, len(self.events), self.count raise self.failureException(msg.format(*items)) elif self.count is None and not self.events: msg = 'A change event was not fired for: {0}'.format(self.xname) raise self.failureException(msg) return False @contextlib.contextmanager def reverse_assertion(context, msg): context.__enter__() try: yield context finally: try: context.__exit__(None, None, None) except AssertionError: pass else: raise context.failureException(msg) class _TraitsChangeCollector(HasStrictTraits): """ Class allowing thread-safe recording of events. """ # The object we're listening to. obj = Any # The (possibly extended) trait name. trait = Str # Read-only event count. event_count = Property(Int) # Event that's triggered when the event count is updated. event_count_updated = Event # Private list of events. events = List(Any) # Lock used to allow access to events by multiple threads # simultaneously. _lock = Instance(threading.Lock, ()) def start_collecting(self): self.obj.on_trait_change( self._event_handler, self.trait, ) def stop_collecting(self): self.obj.on_trait_change( self._event_handler, self.trait, remove=True, ) def _event_handler(self, new): with self._lock: self.events.append(new) self.event_count_updated = True def _get_event_count(self): """ Traits property getter. Thread-safe access to event count. """ with self._lock: return len(self.events) class UnittestTools(object): """ Mixin class to augment the unittest.TestCase class with useful trait related assert methods. """ def assertTraitChanges(self, obj, trait, count=None, callableObj=None, *args, **kwargs): """ Assert an object trait changes a given number of times. Assert that the class trait changes exactly `count` times during execution of the provided function. Method can also be used in a with statement to assert that the a class trait has changed during the execution of the code inside the with statement (similar to the assertRaises method). Please note that in that case the context manager returns itself and the user can introspect the information of: - The last event fired by accessing the ``event`` attribute of the returned object. - All the fired events by accessing the ``events`` attribute of the return object. **Example**:: class MyClass(HasTraits): number = Float(2.0) my_class = MyClass() with self.assertTraitChangesExactly(my_class, 'number', count=1): my_class.number = 3.0 Parameters ---------- obj : HasTraits The HasTraits class instance whose class trait will change. trait : str The extended trait name of trait changes to listen to. count : int or None, optional The expected number of times the event should be fired. When None (default value) there is no check for the number of times the change event was fired. callableObj : callable, optional A callable object that will trigger the expected trait change. When None (default value) a trigger is expected to be called under the context manger returned by this method. *args : List of positional arguments for ``callableObj`` **kwargs : Dict of keyword value pairs to be passed to the ``callableObj`` Returns ------- context : context manager or None If ``callableObj`` is None, an assertion context manager is returned, inside of which a trait-change trigger can be invoked. Otherwise, the context is used internally with ``callableObj`` as the trigger, in which case None is returned. Notes ----- - Checking if the provided ``trait`` corresponds to valid traits in the class is not implemented yet. - Using the functional version of the assert method requires the ``count`` argument to be given even if it is None. """ context = _AssertTraitChangesContext(obj, trait, count, self) if callableObj is None: return context with context: callableObj(*args, **kwargs) def assertTraitDoesNotChange(self, obj, trait, callableObj=None, *args, **kwargs): """ Assert an object trait does not change. Assert that the class trait does not change during execution of the provided function. Parameters ---------- obj : HasTraits The HasTraits class instance whose class trait will change. trait : str The extended trait name of trait changes to listen to. callableObj : callable, optional A callable object that should not trigger a change in the passed trait. When None (default value) a trigger is expected to be called under the context manger returned by this method. *args : List of positional arguments for ``callableObj`` **kwargs : Dict of keyword value pairs to be passed to the ``callableObj`` Returns ------- context : context manager or None If ``callableObj`` is None, an assertion context manager is returned, inside of which a trait-change trigger can be invoked. Otherwise, the context is used internally with ``callableObj`` as the trigger, in which case None is returned. """ msg = 'A change event was fired for: {0}'.format(trait) context = _AssertTraitChangesContext(obj, trait, None, self) if callableObj is None: return reverse_assertion(context, msg) with reverse_assertion(context, msg): callableObj(*args, **kwargs) return def assertMultiTraitChanges(self, objects, traits_modified, traits_not_modified): """ Assert that traits on multiple objects do or do not change. This combines some of the functionality of `assertTraitChanges` and `assertTraitDoesNotChange`. Parameters ---------- objects : list of HasTraits The HasTraits class instances whose traits will change. traits_modified : list of str The extended trait names of trait expected to change. traits_not_modified : list of str The extended trait names of traits not expected to change. """ args = [] for obj in objects: for trait in traits_modified: args.append(self.assertTraitChanges(obj, trait)) for trait in traits_not_modified: args.append(self.assertTraitDoesNotChange(obj, trait)) return _py2to3.nested_context_mgrs(*args) @contextlib.contextmanager def assertTraitChangesAsync(self, obj, trait, count=1, timeout=5.0): """ Assert an object trait eventually changes. Context manager used to assert that the given trait changes at least `count` times within the given timeout, as a result of execution of the body of the corresponding with block. The trait changes are permitted to occur asynchronously. **Example usage**:: with self.assertTraitChangesAsync(my_object, 'SomeEvent', count=4): Parameters ---------- obj : HasTraits The HasTraits class instance whose class trait will change. trait : str The extended trait name of trait changes to listen to. count : int, optional The expected number of times the event should be fired. timeout : float or None, optional The amount of time in seconds to wait for the specified number of changes. None can be used to indicate no timeout. """ collector = _TraitsChangeCollector(obj=obj, trait=trait) # Pass control to body of the with statement. collector.start_collecting() try: yield collector # Wait for the expected number of events to arrive. try: wait_for_condition( condition=lambda obj: obj.event_count >= count, obj=collector, trait='event_count_updated', timeout=timeout, ) except RuntimeError: actual_event_count = collector.event_count msg = ("Expected {0} event on {1} to be fired at least {2} " "times, but the event was only fired {3} times " "before timeout ({4} seconds).").format( trait, obj, count, actual_event_count, timeout, ) self.fail(msg) finally: collector.stop_collecting() def assertEventuallyTrue(self, obj, trait, condition, timeout=5.0): """ Assert that the given condition is eventually true. Parameters ---------- obj : HasTraits The HasTraits class instance who's traits will change. trait : str The extended trait name of trait changes to listen to. condition : callable A function that will be called when the specified trait changes. This should accept ``obj`` and should return a Boolean indicating whether the condition is satisfied or not. timeout : float or None, optional The amount of time in seconds to wait for the condition to become true. None can be used to indicate no timeout. """ try: wait_for_condition( condition=condition, obj=obj, trait=trait, timeout=timeout, ) except RuntimeError: # Helpful to know whether we timed out because the # condition never became true, or because the expected # event was never issued. condition_at_timeout = condition(obj) self.fail( "Timed out waiting for condition. " "At timeout, condition was {0}.".format(condition_at_timeout)) traits-4.5.0/traits/tests/000077500000000000000000000000001233213561600155005ustar00rootroot00000000000000traits-4.5.0/traits/tests/__init__.py000066400000000000000000000000701233213561600176060ustar00rootroot00000000000000#required by simple_test_case.py so it can do an import traits-4.5.0/traits/tests/check_timing.py000066400000000000000000000132341233213561600205010ustar00rootroot00000000000000# Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 03/03/2003 # Description: Perform timing tests on various trait styles to determine the # amount of overhead that traits add. from __future__ import absolute_import from time import time from ..api import Any, DelegatesTo, HasTraits, Int, Range # Number of iterations to perform: n = 1000000 # Loop overhead time (actual value determined first time a measurement is made) t0 = -1.0 # Measure how long it takes to execute a specified function: def measure(func): now = time() func() return time() - now # 'Old style' Python attribute get/set: class old_style_value: def measure(self, reference_get=1.0, reference_set=1.0): global t0 self.init() if t0 < 0.0: t0 = measure(self.null) t1 = measure(self.do_get) t2 = measure(self.do_set) scale = 1.0e6 / n get_time = max(t1 - t0, 0.0) * scale set_time = max(t2 - t0, 0.0) * scale return get_time, set_time def null(self): for i in range(n): pass def init(self): self.value = -1 def do_set(self): for i in range(n): self.value = i def do_get(self): for i in range(n): self.value # 'New style' Python attribute get/set: class new_style_value(object): def measure(self): global t0 self.init() if t0 < 0.0: t0 = measure(self.null) t1 = measure(self.do_get) t2 = measure(self.do_set) scale = 1.0e6 / n get_time = max(t1 - t0, 0.0) * scale set_time = max(t2 - t0, 0.0) * scale return get_time, set_time def null(self): for i in range(n): pass def init(self): self.value = -1 def do_set(self): for i in range(n): self.value = i def do_get(self): for i in range(n): self.value # Python 'property' get/set: class property_value(new_style_value): def get_value(self): return self._value def set_value(self, value): self._value = value value = property(get_value, set_value) # Python 'global' get/set: class global_value(new_style_value): def init(self): global gvalue gvalue = -1 def do_set(self): global gvalue for i in range(n): gvalue = i def do_get(self): global gvalue for i in range(n): gvalue # Trait that can have any value: class any_value(HasTraits, new_style_value): value = Any # Trait that can only have 'float' values: class int_value(any_value): value = Int # Trait that can only have 'range' values: class range_value(any_value): value = Range(-1, 2000000000) # Executes method when float trait is changed: class change_value(int_value): def _value_changed(self, old, new): pass # Notifies handler when float trait is changed: class monitor_value(int_value): def init(self): self.on_trait_change(self.on_value_change, 'value') def on_value_change(self, object, trait_name, old, new): pass # Float trait is delegated to another object: class delegate_value(HasTraits, new_style_value): value = DelegatesTo('delegate') delegate = Any def init(self): self.delegate = int_value() # Float trait is delegated through one object to another object: class delegate_2_value(delegate_value): def init(self): delegate = delegate_value() delegate.init() self.delegate = delegate # Float trait is delegated through two objects to another object: class delegate_3_value(delegate_value): def init(self): delegate = delegate_2_value() delegate.init() self.delegate = delegate # Run the timing measurements: def report(name, get_time, set_time, ref_get_time, ref_set_time): """ Return string containing a benchmark report. The arguments are the name of the benchmark case, the times to do a 'get' or a 'set' operation for that benchmark case in usec, and the corresponding times for a reference operation (e.g., getting and setting an attribute on a new-style instance. """ template = ( '{name:^30}: Get {get_time:02.3f} us (x {get_speed_up:02.3f}), ' 'Set {set_time:02.3f} us (x {set_speed_up:02.3f})' ) report = template.format( name=name, get_time=get_time, get_speed_up=ref_get_time / get_time, set_time=set_time, set_speed_up=ref_set_time / set_time, ) return report def run_benchmark(klass, ref_get_time, ref_set_time): benchmark_name = klass.__name__ get_time, set_time = klass().measure() print report(benchmark_name, get_time, set_time, ref_get_time, ref_set_time) def main(): ref_get_time, ref_set_time = new_style_value().measure() benchmarks = [ global_value, old_style_value, new_style_value, property_value, any_value, int_value, range_value, change_value, monitor_value, delegate_value, delegate_2_value, delegate_3_value ] for benchmark in benchmarks: run_benchmark(benchmark, ref_get_time, ref_set_time) if __name__ == '__main__': main() traits-4.5.0/traits/tests/test_abc.py000066400000000000000000000041011233213561600176320ustar00rootroot00000000000000""" Test the ABC functionality. """ import abc import warnings from traits.testing.unittest_tools import unittest from ..api import ABCHasTraits, ABCMetaHasTraits, HasTraits, Int, Float class TestNew(unittest.TestCase): """ Test that __new__ works correctly. """ def setUp(self): self.old_filters = warnings.filters[:] warnings.simplefilter('error', DeprecationWarning) def tearDown(self): warnings.filters[:] = self.old_filters def test_new(self): # Should not raise DeprecationWarning. HasTraits(x=10) class AbstractFoo(ABCHasTraits): x = Int(10) y = Float(20.0) @abc.abstractmethod def foo(self): raise NotImplementedError() @abc.abstractproperty def bar(self): raise NotImplementedError() class ConcreteFoo(AbstractFoo): def foo(self): return 'foo' @property def bar(self): return 'bar' class FooLike(HasTraits): x = Int(10) y = Float(20.0) def foo(self): return 'foo' @property def bar(self): return 'bar' AbstractFoo.register(FooLike) class AbstractBar(object): __metaclass__ = abc.ABCMeta @abc.abstractmethod def bar(self): raise NotImplementedError() class TestABC(unittest.TestCase): def test_basic_abc(self): self.assertRaises(TypeError, AbstractFoo) concrete = ConcreteFoo() self.assertEqual(concrete.foo(), 'foo') self.assertEqual(concrete.bar, 'bar') self.assertEqual(concrete.x, 10) self.assertEqual(concrete.y, 20.0) self.assertTrue(isinstance(concrete, AbstractFoo)) def test_registered(self): foolike = FooLike() self.assertTrue(isinstance(foolike, AbstractFoo)) def test_post_hoc_mixing(self): class TraitedBar(HasTraits, AbstractBar): __metaclass__ = ABCMetaHasTraits x = Int(10) def bar(self): return 'bar' traited = TraitedBar() self.assertTrue(isinstance(traited, AbstractBar)) self.assertEqual(traited.x, 10) traits-4.5.0/traits/tests/test_anytrait_static_notifiers.py000066400000000000000000000112611233213561600243760ustar00rootroot00000000000000""" Tests for the the "anytrait" static notifiers. """ from traits.api import Float, HasTraits, Undefined from traits.testing.unittest_tools import unittest from traits import trait_notifiers anycalls_0 = [] class AnytraitStaticNotifiers0(HasTraits): ok = Float def _anytrait_changed(): anycalls_0.append(True) class AnytraitStaticNotifiers0Fail(HasTraits): fail = Float def _anytrait_changed(): raise Exception('error') class AnytraitStaticNotifiers1(HasTraits): ok = Float def _anytrait_changed(self): if not hasattr(self, 'anycalls'): self.anycalls = [] self.anycalls.append(True) class AnytraitStaticNotifiers1Fail(HasTraits): fail = Float def _anytrait_changed(self): raise Exception('error') class AnytraitStaticNotifiers2(HasTraits): ok = Float def _anytrait_changed(self, name): if not hasattr(self, 'anycalls'): self.anycalls = [] self.anycalls.append(name) class AnytraitStaticNotifiers2Fail(HasTraits): fail = Float def _anytrait_changed(self, name): raise Exception('error') class AnytraitStaticNotifiers3(HasTraits): ok = Float def _anytrait_changed(self, name, new): if not hasattr(self, 'anycalls'): self.anycalls = [] self.anycalls.append((name, new)) class AnytraitStaticNotifiers3Fail(HasTraits): fail = Float def _anytrait_changed(self, name, new): raise Exception('error') class AnytraitStaticNotifiers4(HasTraits): ok = Float def _anytrait_changed(self, name, old, new): if not hasattr(self, 'anycalls'): self.anycalls = [] self.anycalls.append((name, old, new)) class AnytraitStaticNotifiers4Fail(HasTraits): fail = Float def _anytrait_changed(self, name, old, new): raise Exception('error') class TestNotifiers(unittest.TestCase): """ Tests for the static notifiers, and the "anytrait" static notifiers. """ #### 'TestCase' protocol ################################################## def setUp(self): self.exceptions = [] trait_notifiers.push_exception_handler(self._handle_exception) def tearDown(self): trait_notifiers.pop_exception_handler() #### Private protocol ##################################################### def _handle_exception(self, obj, name, old, new): self.exceptions.append((obj, name, old, new)) #### Tests ################################################################ def test_anytrait_static_notifiers_0(self): obj = AnytraitStaticNotifiers0(ok=2) obj.ok = 3 self.assertEqual(len(anycalls_0), 2) def test_anytrait_static_notifiers_1(self): obj = AnytraitStaticNotifiers1(ok=2) obj.ok = 3 # 3 calls (see test_anytrait_static_notifiers_4): # 1 to add trait 'anycalls', # 1 from the constructor, # 1 to set ok to 3 self.assertEqual(len(obj.anycalls), 3) def test_anytrait_static_notifiers_2(self): obj = AnytraitStaticNotifiers2(ok=2) obj.ok = 3 expected = ['trait_added', 'ok', 'ok'] self.assertEqual(expected, obj.anycalls) def test_anytrait_static_notifiers_3(self): obj = AnytraitStaticNotifiers3(ok=2) obj.ok = 3 expected = [('trait_added', 'anycalls'), ('ok', 2), ('ok', 3)] self.assertEqual(expected, obj.anycalls) def test_anytrait_static_notifiers_4(self): obj = AnytraitStaticNotifiers4(ok=2) obj.ok = 3 expected = [('trait_added', Undefined, 'anycalls'), ('ok', 0, 2), ('ok', 2, 3)] self.assertEqual(expected, obj.anycalls) def test_anytrait_static_notifiers_0_fail(self): obj = AnytraitStaticNotifiers0Fail() obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) def test_anytrait_static_notifiers_1_fail(self): obj = AnytraitStaticNotifiers1Fail() obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) def test_anytrait_static_notifiers_2_fail(self): obj = AnytraitStaticNotifiers2Fail() obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) def test_anytrait_static_notifiers_3_fail(self): obj = AnytraitStaticNotifiers3Fail() obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) def test_anytrait_static_notifiers_4_fail(self): obj = AnytraitStaticNotifiers4Fail() obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_array.py000066400000000000000000000032411233213561600202270ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! #------------------------------------------------------------------------------ from __future__ import absolute_import from traits.testing.unittest_tools import unittest try: import numpy except ImportError: numpy_available = False else: numpy_available = True from ..api import Array, Bool, HasTraits if numpy_available: # Use of `Array` requires NumPy to be installed. class Foo(HasTraits): a = Array() event_fired = Bool(False) def _a_changed(self): self.event_fired = True class ArrayTestCase(unittest.TestCase): """ Test cases for delegated traits. """ @unittest.skipUnless(numpy_available, "numpy not available") def test_zero_to_one_element(self): """ Test that an event fires when an Array trait changes from zero to one element. """ f = Foo() f.a = numpy.zeros((2,), float) f.event_fired = False # Change the array. f.a = numpy.concatenate((f.a, numpy.array([100]))) # Confirm that the static trait handler was invoked. self.assertEqual(f.event_fired, True) return #### EOF ###################################################################### traits-4.5.0/traits/tests/test_automatic_adaptation.py000066400000000000000000000044421233213561600233070ustar00rootroot00000000000000############################################################################### # Copyright 2014 Enthought, Inc. ############################################################################### from traits.adaptation.api import reset_global_adaptation_manager from traits.api import HasTraits, Instance, List, register_factory, TraitError from traits.testing.unittest_tools import unittest class Foo(HasTraits): pass class Bar(HasTraits): pass def bar_to_foo_adapter(bar): return Foo() class FooContainer(HasTraits): not_adapting_foo = Instance(Foo) adapting_foo = Instance(Foo, adapt='yes') not_adapting_foo_list = List(Foo) adapting_foo_list = List(Instance(Foo, adapt='yes')) class TestAutomaticAdaptation(unittest.TestCase): #### 'TestCase' protocol ################################################## def setUp(self): reset_global_adaptation_manager() #### Tests ################################################################ def test_instance_trait_automatic_adaptation(self): bar = Bar() foo_container = FooContainer() # Before a Bar->Foo adapter is registered. with self.assertRaises(TraitError): foo_container.not_adapting_foo = bar with self.assertRaises(TraitError): foo_container.adapting_foo = bar # After a Bar->Foo adapter is registered. register_factory(bar_to_foo_adapter, Bar, Foo) with self.assertRaises(TraitError): foo_container.not_adapting_foo = bar foo_container.adapting_foo = bar self.assertIsInstance(foo_container.adapting_foo, Foo) def test_list_trait_automatic_adaptation(self): bar = Bar() foo_container = FooContainer() # Before a Bar->Foo adapter is registered. with self.assertRaises(TraitError): foo_container.not_adapting_foo_list = [bar] with self.assertRaises(TraitError): foo_container.adapting_foo_list = [bar] # After a Bar->Foo adapter is registered. register_factory(bar_to_foo_adapter, Bar, Foo) with self.assertRaises(TraitError): foo_container.not_adapting_foo_list = [bar] foo_container.adapting_foo_list = [bar] self.assertIsInstance(foo_container.adapting_foo_list[0], Foo) traits-4.5.0/traits/tests/test_category.py000066400000000000000000000071101233213561600207250ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: David C. Morrill # Description: #------------------------------------------------------------------------------ from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Category, Str class Base(HasTraits): y = Str("Base y") z = Str("Base z") class BaseExtra(Category, Base): x = Str("BaseExtra x") class BasePlus(Category, Base): p = Str("BasePlus p") # z = Str("BasePlus z") overrides not allowed. class BasePlusPlus(BasePlus): pp = Str("BasePlusPlus pp") class CategoryTestCase(unittest.TestCase): """ Test cases for traits category """ def setUp(self): self.base = Base() return def test_base_category(self): """ Base class with traits """ self.assertEqual(self.base.y, "Base y", msg="y != 'Base y'") self.assertEqual(self.base.z, "Base z", msg="z != 'Base z'") return def test_extra_extension_category(self): """ Base class extended with a category subclass """ self.assertEqual(self.base.x, "BaseExtra x", msg="x != 'BaseExtra x'") return def test_plus_extension_category(self): """ Base class extended with two category subclasses """ self.assertEqual(self.base.x, "BaseExtra x", msg="x != 'BaseExtra x'") self.assertEqual(self.base.p, "BasePlus p", msg="p != 'BasePlus p'") return def test_subclass_extension_category(self): """ Category subclass does not extend base class. This test demonstrates that traits allows subclassing of a category class, but that the traits from the subclass are not actually added to the base class of the Category. Seems like the declaration of the subclass (BasePlusPlus) should fail. """ try: x = self.base.pp self.fail(msg="base.pp should have thrown AttributeError " "as Category subclassing is not supported.") except AttributeError: pass basepp = BasePlusPlus() return def test_subclass_instance_category(self): """ Category subclass instantiation not supported. This test demonstrates that traits allows subclassing of a category class, that subclass can be instantiated, but the traits of the parent class are not inherited. Seems like the declaration of the subclass (BasePlusPlus) should fail. """ bpp = BasePlusPlus() self.assertEqual(bpp.pp, "BasePlusPlus pp", msg="pp != 'BasePlusPlus pp'") try: self.assertEqual(bpp.p, "BasePlus p", msg="p != 'BasePlus p'") self.fail(msg="bpp.p should have thrown SystemError as " "instantiating a subclass of a category is not " "supported.") except SystemError: pass return # # support running this test individually, from the command-line as a script # if __name__ == '__main__': unittest.main() #### EOF ###################################################################### traits-4.5.0/traits/tests/test_class_traits.py000066400000000000000000000025231233213561600216060ustar00rootroot00000000000000""" Unit tests for the `HasTraits.class_traits` class function. """ from __future__ import absolute_import from traits import _py2to3 from traits.testing.unittest_tools import unittest from ..api import HasTraits, Int, List, Str class A(HasTraits): x = Int name = Str(marked=True) class B(A): pass class C(B): lst = List(marked=False) y = Int(marked=True) class TestClassTraits(unittest.TestCase): def test_all_class_traits(self): expected = ['x', 'name', 'trait_added', 'trait_modified'] _py2to3.assertCountEqual(self, A.class_traits(), expected) # Check that derived classes report the correct traits. _py2to3.assertCountEqual(self, B.class_traits(), expected) expected.extend(('lst', 'y')) _py2to3.assertCountEqual(self, C.class_traits(), expected) def test_class_traits_with_metadata(self): # Retrieve all traits that have the `marked` metadata # attribute set to True. traits = C.class_traits(marked=True) _py2to3.assertCountEqual(self, traits.keys(), ('y', 'name')) # Retrieve all traits that have a `marked` metadata attribute, # regardless of its value. marked_traits = C.class_traits(marked=lambda attr: attr is not None) _py2to3.assertCountEqual(self, marked_traits, ('y', 'name', 'lst')) traits-4.5.0/traits/tests/test_clone.py000066400000000000000000000213171233213561600202150ustar00rootroot00000000000000# Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: David C. Morrill # Description: from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Instance, Str, Any, Property class Foo(HasTraits): s = Str class ClassWithAny(HasTraits): x = Property _x = Any def _get_x(self): return self._x def _set_x(self, x): self._x = x class ClassWithInstance(HasTraits): x = Property _x = Instance(Foo) def _get_x(self): return self._x def _set_x(self, x): self._x = x class ClassWithClassAttribute(HasTraits): name = 'class defined name' foo = Str class BazAny(HasTraits): other = Any class BarAny(HasTraits): other = Any class BazInstance(HasTraits): # A BarInstance owned by this object. other = Instance('BarInstance') # A Foo owned by this object and not referenced by others. unique = Instance(Foo) # A Foo owned by this object and referenced by others. shared = Instance(Foo) # A Foo not owned by this object, may or may not be shared with other # objects found via owned references (e.g. other.ref). For the tests, # ref will always reference a Foo that is not owned by any of the objects # reachable via owned references, and therefore, that Foo object should # not be cloned. ref = Instance(Foo, copy='ref') class BarInstance(HasTraits): # used as circular reference back to owning BazInstance # NOTE: Setting copy to 'ref' will mean that when BarInstance is cloned, # the 'other' trait will not be copied, and will still point to the # 'other' attribute of the original BarInstance. other = Instance('BazInstance', copy='ref') # A Foo owned by this object and not referenced by others. unique = Instance(Foo) # A Foo owned by the 'other' object and referenced by this object. shared = Instance(Foo) # A Foo not owned by this object, may or may not be shared with other # objects found via owned references (e.g. other.ref). For the tests, # ref will always reference a Foo that is not owned by any of the objects # reachable via owned references, and therefore, that Foo object should # not be cloned. ref = Instance(Foo, copy='ref') class CloneTestCase(unittest.TestCase): """ Test cases for traits clone """ def test_any(self): b = ClassWithAny() f = Foo() f.s = 'the f' b.x = f bc = b.clone_traits(traits='all', copy='deep') self.assertNotEqual(id(bc.x), id(f), 'Foo x not cloned') return def test_instance(self): b = ClassWithInstance() f = Foo() f.s = 'the f' b.x = f bc = b.clone_traits(traits='all', copy='deep') self.assertNotEqual(id(bc.x), id(f), 'Foo x not cloned') return def test_class_attribute_missing(self): """ This test demonstrates a problem with Traits objects with class attributes. A change to the value of a class attribute via one instance causes the attribute to be removed from other instances. AttributeError: 'ClassWithClassAttribute' object has no attribute 'name' """ s = 'class defined name' c = ClassWithClassAttribute() self.assertEqual(s, c.name) c2 = ClassWithClassAttribute() self.assertEqual(s, c.name) self.assertEqual(s, c2.name) s2 = 'name class attribute changed via clone' c2.name = s2 self.assertEqual(s2, c2.name) # this is failing with AttributeError: 'ClassWithClassAttribute' # object has no attribute 'name' self.assertEqual(s, c.name) return def test_Any_circular_references(self): # Demonstrates that Any traits default to copy='ref' bar = BarAny() baz = BazAny() bar.other = baz baz.other = bar bar_copy = bar.clone_traits() self.failIf(bar_copy is bar) self.failUnless(bar_copy.other is baz) self.failUnless(bar_copy.other.other is bar) def test_Any_circular_references_deep(self): # Demonstrates that Any traits can be forced to deep copy. bar = BarAny() baz = BazAny() bar.other = baz baz.other = bar bar_copy = bar.clone_traits(copy='deep') self.failIf(bar_copy is bar) self.failIf(bar_copy.other is baz) self.failIf(bar_copy.other.other is bar) self.failUnless(bar_copy.other.other is bar_copy) def test_Instance_circular_references(self): ref = Foo(s='ref') bar_unique = Foo(s='bar.foo') shared = Foo(s='shared') baz_unique = Foo(s='baz.unique') baz = BazInstance() baz.unique = baz_unique baz.shared = shared baz.ref = ref bar = BarInstance() bar.unique = bar_unique bar.shared = shared bar.ref = ref bar.other = baz baz.other = bar baz_copy = baz.clone_traits() # Check Baz and Baz attributes.... self.failIf(baz_copy is baz) self.failIf(baz_copy.other is bar) self.failIf(baz_copy.unique is baz.unique) self.failIf(baz_copy.shared is baz.shared) self.failUnless(baz_copy.ref is ref) # Check Bar and Bar attributes.... bar_copy = baz_copy.other # Check the Bar owned object self.failIf(bar_copy.unique is bar.unique) # Check the Bar reference to an object 'outside' the cloned graph. self.failUnless(bar_copy.ref is ref) # Check references to objects that where cloned, they should reference # the new clones not the original objects, except when copy is set # to 'ref' (as in the case of the 'other' trait). # When copy is set to ref, the trait does not get cloned. Therefore, # baz_copy.other.other is baz (and not baz_copy). self.failIf(bar_copy.other is baz_copy) self.failUnless(bar_copy.other is baz) # 'shared' does not have copy set to 'ref', and so bar_copy.shared # should reference the new clone. # should reference the new clones self.failIf(bar_copy.shared is baz.shared) self.failUnless(bar_copy.shared is baz_copy.shared) def test_Instance_circular_references_deep(self): ref = Foo(s='ref') bar_unique = Foo(s='bar.foo') shared = Foo(s='shared') baz_unique = Foo(s='baz.unique') baz = BazInstance() baz.unique = baz_unique baz.shared = shared baz.ref = ref bar = BarInstance() bar.unique = bar_unique bar.shared = shared bar.ref = ref bar.other = baz baz.other = bar baz_copy = baz.clone_traits(copy='deep') # Check Baz and Baz attributes.... self.failIf(baz_copy is baz) self.failIf(baz_copy.other is bar) self.failIf(baz_copy.unique is baz.unique) self.failIf(baz_copy.shared is baz.shared) # baz_copy.ref is checked below with bar_copy.ref. # Check Bar and Bar attributes.... bar_copy = baz_copy.other # Check the Bar owned object self.failIf(bar_copy.unique is bar.unique) # Since the two original 'ref' links were to a shared object, # the cloned links should be to a shared object. Also, the shared # object should be the original 'ref' object, since copy was set to # 'ref'. self.failUnless(baz_copy.ref is bar_copy.ref) self.failUnless(bar_copy.ref is ref) # Check references to objects that where cloned, they should reference # the new clones not the original objects, except when copy is set # to 'ref' (as in the case of the 'other' trait). That is, the 'deep' # flag on clone_traits should not override the 'copy' metadata on # the trait. self.failIf(bar_copy.other is baz_copy) self.failUnless(bar_copy.other is baz) # 'shared' does not have copy set to 'ref', and so bar_copy.shared # should reference the new clone. self.failIf(bar_copy.shared is baz.shared) self.failUnless(bar_copy.shared is baz_copy.shared) # # support running this test individually, from the command-line as a script # if __name__ == '__main__': unittest.main() #### EOF ###################################################################### traits-4.5.0/traits/tests/test_container_events.py000066400000000000000000000122131233213561600224560ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ """ Tests for Dict and List items_changed events """ from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Dict class ListEventTestCase(unittest.TestCase): # TODO: Implement this! pass class MyClass(HasTraits): """ A dummy HasTraits class with a Dict """ d = Dict({"a": "apple", "b": "banana", "c": "cherry", "d": "durian"}) def __init__(self, callback): "The callback is called with the TraitDictEvent instance" self.callback = callback return def _d_items_changed(self, event): if self.callback: self.callback(event) return class MyOtherClass(HasTraits): """ A dummy HasTraits class with a Dict """ d = Dict({"a": "apple", "b": "banana", "c": "cherry", "d": "durian"}) class Callback: """ A stateful callback that gets initialized with the values to check for """ def __init__(self, obj, added={}, changed={}, removed={}): self.obj = obj self.added = added self.changed = changed self.removed = removed self.called = False return def __call__(self, event): if event.added != self.added: print "\n\n******Error\nevent.added:", event.added else: self.obj.assertEqual(event.added, self.added) self.obj.assertEqual(event.changed, self.changed) self.obj.assertEqual(event.removed, self.removed) self.called = True return class DictEventTestCase(unittest.TestCase): def test_setitem(self): # overwriting an existing item cb = Callback(self, changed={"c": "cherry"}) foo = MyClass(cb) foo.d["c"] = "coconut" self.assertTrue(cb.called) # adding a new item cb = Callback(self, added={"g": "guava"}) bar = MyClass(cb) bar.d["g"] = "guava" self.assertTrue(cb.called) return def test_delitem(self): cb = Callback(self, removed={"b": "banana"}) foo = MyClass(cb) del foo.d["b"] self.assertTrue(cb.called) return def test_clear(self): removed = MyClass(None).d.copy() cb = Callback(self, removed=removed) foo = MyClass(cb) foo.d.clear() self.assertTrue(cb.called) return def test_update(self): update_dict = {"a": "artichoke", "f": "fig"} cb = Callback(self, changed={"a": "apple"}, added={"f": "fig"}) foo = MyClass(cb) foo.d.update(update_dict) self.assertTrue(cb.called) return def test_setdefault(self): # Test retrieving an existing value cb = Callback(self) foo = MyClass(cb) self.assertEqual(foo.d.setdefault("a", "dummy"), "apple") self.assertFalse(cb.called) # Test adding a new value cb = Callback(self, added={"f": "fig"}) bar = MyClass(cb) self.assertTrue(bar.d.setdefault("f", "fig") == "fig") self.assertTrue(cb.called) return def test_pop(self): # Test popping a non-existent key cb = Callback(self) foo = MyClass(cb) self.assertEqual(foo.d.pop("x", "dummy"), "dummy") self.assertFalse(cb.called) # Test popping a regular item cb = Callback(self, removed={"c": "cherry"}) bar = MyClass(cb) self.assertEqual(bar.d.pop("c"), "cherry") self.assertTrue(cb.called) return def test_popitem(self): foo = MyClass(None) foo.d.clear() foo.d["x"] = "xylophone" cb = Callback(self, removed={"x": "xylophone"}) foo.callback = cb self.assertEqual(foo.d.popitem(), ("x", "xylophone")) self.assertTrue(cb.called) return def test_dynamic_listener(self): foo = MyOtherClass() # Test adding func = Callback(self, added={"g": "guava"}) foo.on_trait_change(func.__call__, "d_items") foo.d["g"] = "guava" foo.on_trait_change(func.__call__, "d_items", remove=True) self.assertTrue(func.called) # Test removing func2 = Callback(self, removed={"a": "apple"}) foo.on_trait_change(func2.__call__, "d_items") del foo.d["a"] foo.on_trait_change(func2.__call__, "d_items", remove=True) self.assertTrue(func2.called) # Test changing func3 = Callback(self, changed={"b": "banana"}) foo.on_trait_change(func3.__call__, "d_items") foo.d["b"] = "broccoli" foo.on_trait_change(func3.__call__, "d_items", remove=True) self.assertTrue(func3.called) return traits-4.5.0/traits/tests/test_copy_traits.py000066400000000000000000000257761233213561600214720ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Instance, Str class Shared(HasTraits): s = Str('new instance of Shared') class Foo(HasTraits): s = Str('new instance of Foo') shared = Instance(Shared) class Bar(HasTraits): s = Str('new instance of Bar') foo = Instance(Foo) shared = Instance(Shared) class Baz(HasTraits): s = Str('new instance of Baz') bar = Instance(Bar) shared = Instance(Shared) class CopyTraitsBase(unittest.TestCase): """ Validate that copy_traits """ __test__ = False def setUp(self): print '\n**CopyTraitsBase.setUp ', super(CopyTraitsBase, self).setUp() self.shared = Shared(s='shared') self.foo = Foo(shared=self.shared, s='foo') self.bar = Bar(shared=self.shared, foo=self.foo, s='bar') self.baz = Baz(shared=self.shared, bar=self.bar, s='baz') self.shared2 = Shared(s='shared2') self.foo2 = Foo(shared=self.shared2, s='foo2') self.bar2 = Bar(shared=self.shared2, foo=self.foo2, s='bar2') self.baz2 = Baz(shared=self.shared2, bar=self.bar2, s='baz2') return def print_copy(self): print '\nfoo.copy:', self.foo.base_trait('shared').copy print 'bar.copy:', self.bar.base_trait('shared').copy print 'baz.copy:', self.baz.base_trait('shared').copy print 'foo2.copy:', self.foo2.base_trait('shared').copy print 'bar2.copy:', self.bar2.base_trait('shared').copy print 'baz2.copy:', self.baz2.base_trait('shared').copy def set_shared_copy(self, value): """ Change the copy style for the 'shared' traits. """ #self.print_copy() self.foo.base_trait('shared').copy = value self.bar.base_trait('shared').copy = value self.baz.base_trait('shared').copy = value # copy is metadata and therefore a shared a class attribute # self.foo2.base_trait('shared').copy = value # self.bar2.base_trait('shared').copy = value # self.baz2.base_trait('shared').copy = value #self.print_copy() class TestCopyTraitsSetup(CopyTraitsBase): __test__ = True def setUp(self): super(TestCopyTraitsSetup, self).setUp() print '\nshared', self.shared print 'foo', self.foo print 'bar', self.bar print 'baz', self.baz print '\nshared2', self.shared2 print 'foo2', self.foo2 print 'bar2', self.bar2 print 'baz2', self.baz2 return def test_setup(self): self.failUnless(self.foo is self.bar.foo) self.failUnless(self.bar is self.baz.bar) self.failUnless(self.foo.shared is self.shared) self.failUnless(self.bar.shared is self.shared) self.failUnless(self.baz.shared is self.shared) self.failUnless(self.foo2 is self.bar2.foo) self.failUnless(self.bar2 is self.baz2.bar) self.failUnless(self.foo2.shared is self.shared2) self.failUnless(self.bar2.shared is self.shared2) self.failUnless(self.baz2.shared is self.shared2) return class CopyTraits: def test_baz2_s(self): self.failUnlessEqual(self.baz2.s, 'baz') self.failUnlessEqual(self.baz2.s, self.baz.s) def test_baz2_bar_s(self): self.failUnlessEqual(self.baz2.bar.s, 'bar') self.failUnlessEqual(self.baz2.bar.s, self.baz.bar.s) def test_baz2_bar_foo_s(self): self.failUnlessEqual(self.baz2.bar.foo.s, 'foo') self.failUnlessEqual(self.baz2.bar.foo.s, self.baz.bar.foo.s) def test_baz2_shared_s(self): self.failUnlessEqual(self.baz2.shared.s, 'shared') self.failUnlessEqual(self.baz2.bar.shared.s, 'shared') self.failUnlessEqual(self.baz2.bar.foo.shared.s, 'shared') def test_baz2_bar(self): # First hand Instance trait is different and # is not the same object as the source. self.failIf(self.baz2.bar is None) self.failIf(self.baz2.bar is self.bar2) self.failIf(self.baz2.bar is self.baz.bar) def test_baz2_bar_foo(self): # Second hand Instance trait is a different object and # is not the same object as the source. self.failIf(self.baz2.bar.foo is None) self.failIf(self.baz2.bar.foo is self.foo2) self.failIf(self.baz2.bar.foo is self.baz.bar.foo) class CopyTraitsSharedCopyNone: def test_baz2_shared(self): # First hand Instance trait is a different object and # is not the same object as the source. self.failIf(self.baz2.shared is None) self.failIf(self.baz2.shared is self.shared2) self.failIf(self.baz2.shared is self.shared) def test_baz2_bar_shared(self): # Second hand Instance that was shared is a different object and # not the same object as the source and # not the same object as the new first hand instance that was the same. # I.e. There are now (at least) two copies of one original object. self.failIf(self.baz2.bar.shared is None) self.failIf(self.baz2.bar.shared is self.shared2) self.failIf(self.baz2.bar.shared is self.shared) self.failIf(self.baz2.bar.shared is self.baz2.shared) def test_baz2_bar_foo_shared(self): # Third hand Instance that was shared is a different object and # not the same object as the source and # not the same object as the new first hand instance that was the same. # I.e. There are now (at least) two copies of one original object. self.failIf(self.baz2.bar.foo.shared is None) self.failIf(self.baz2.bar.foo.shared is self.shared2) self.failIf(self.baz2.bar.foo.shared is self.shared) self.failIf(self.baz2.bar.foo.shared is self.baz2.shared) def test_baz2_bar_and_foo_shared(self): # # THE BEHAVIOR DEMONSTRATED BY THIS TEST CASE DOES NOT SEEM TO BE # CORRECT. # # Second and Third hand Instance object that was shared with first hand # instance are the same as each other but # Every reference to the same original object has been replace by # a reference to the same copy of the same source object except the # first hand reference which is a different copy. # I.e. The shared relationship has been fubarred by copy_traits: it's # not maintained, but not completely destroyed. self.failUnless(self.baz2.bar.shared is self.baz2.bar.foo.shared) self.failIf(self.baz2.shared is self.baz2.bar.foo.shared) class TestCopyTraitsSharedCopyNone(CopyTraits, CopyTraitsSharedCopyNone): __test__ = False def setUp(self): print '\n***TestCopyTraitsSharedCopyNone', #super(TestCopyTraitsSharedCopyNone,self).setUp() # deep is the default value for Instance trait copy self.set_shared_copy('deep') return class TestCopyTraitsCopyNotSpecified(CopyTraitsBase, TestCopyTraitsSharedCopyNone): __test__ = True def setUp(self): print '\n*TestCopyTraitsCopyNotSpecified', # super(TestCopyTraitsCopyNotSpecified,self).setUp() CopyTraitsBase.setUp(self) TestCopyTraitsSharedCopyNone.setUp(self) self.baz2.copy_traits(self.baz) return class TestCopyTraitsCopyShallow(CopyTraitsBase, TestCopyTraitsSharedCopyNone): __test__ = True def setUp(self): print '\n*TestCopyTraitsCopyShallow', # super(TestCopyTraitsCopyShallow,self).setUp() CopyTraitsBase.setUp(self) TestCopyTraitsSharedCopyNone.setUp(self) self.baz2.copy_traits(self.baz, copy='shallow') return class TestCopyTraitsCopyDeep(CopyTraitsBase, TestCopyTraitsSharedCopyNone): __test__ = True def setUp(self): print '\n*TestCopyTraitsCopyDeep', # super(TestCopyTraitsCopyDeep,self).setUp() CopyTraitsBase.setUp(self) TestCopyTraitsSharedCopyNone.setUp(self) self.baz2.copy_traits(self.baz, copy='deep') return class CopyTraitsSharedCopyRef: def test_baz2_shared(self): # First hand Instance trait is a different object and # is the same object as the source. self.failIf(self.baz2.shared is None) self.failIf(self.baz2.shared is self.shared2) self.failUnless(self.baz2.shared is self.shared) def test_baz2_bar_shared(self): self.failIf(self.baz2.bar.shared is None) self.failIf(self.baz2.bar.shared is self.shared2) self.failUnless(self.baz2.bar.shared is self.shared) self.failUnless(self.baz2.bar.shared is self.baz2.shared) def test_baz2_bar_foo_shared(self): self.failIf(self.baz2.bar.foo.shared is None) self.failIf(self.baz2.bar.foo.shared is self.shared2) self.failUnless(self.baz2.bar.foo.shared is self.shared) self.failUnless(self.baz2.bar.foo.shared is self.baz2.shared) def test_baz2_bar_and_foo_shared(self): self.failUnless(self.baz2.bar.shared is self.baz2.bar.foo.shared) self.failUnless(self.baz2.shared is self.baz2.bar.foo.shared) class TestCopyTraitsSharedCopyRef(CopyTraits, CopyTraitsSharedCopyRef): __test__ = False def setUp(self): print '\n***TestCopyTraitsSharedCopyRef.setUp ', #super(TestCopyTraitsSharedCopyRef,self).setUp() self.set_shared_copy('ref') return # The next three tests demonstrate that a 'ref' trait is always copied as a # reference regardless of the copy argument to copy_traits. That is, shallow # and deep are indistinguishable. class TestCopyTraitsCopyNotSpecifiedSharedRef(CopyTraitsBase, TestCopyTraitsSharedCopyRef): __test__ = True def setUp(self): print '\n*TestCopyTraitsCopyNotSpecifiedSharedRef.setUp', CopyTraitsBase.setUp(self) TestCopyTraitsSharedCopyRef.setUp(self) self.baz2.copy_traits(self.baz) return class TestCopyTraitsCopyShallowSharedRef(CopyTraitsBase, TestCopyTraitsSharedCopyRef): __test__ = True def setUp(self): print '\n*TestCopyTraitsCopyShallowSharedRef.setUp', CopyTraitsBase.setUp(self) TestCopyTraitsSharedCopyRef.setUp(self) self.baz2.copy_traits(self.baz, copy='shallow') return class TestCopyTraitsCopyDeepSharedRef(CopyTraitsBase, TestCopyTraitsSharedCopyRef): __test__ = True def setUp(self): print '\n*TestCopyTraitsCopyDeepSharedRef.setUp', CopyTraitsBase.setUp(self) TestCopyTraitsSharedCopyRef.setUp(self) self.baz2.copy_traits(self.baz, copy='deep') return ### EOF traits-4.5.0/traits/tests/test_copyable_trait_names.py000066400000000000000000000065661233213561600233120ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import (HasTraits, Any, Bool, Delegate, Event, Instance, Property, Str) class Foo(HasTraits): a = Any b = Bool s = Str i = Instance(HasTraits) e = Event d = Delegate('i') p = Property def _get_p(self): return self._p def _set_p(self, p): self._p = p # Read Only Property p_ro = Property def _get_p_ro(self): return id(self) # Write-only property p_wo = Property def _set_p_wo(self, p_wo): self._p_wo = p_wo class TestCopyableTraitNames(unittest.TestCase): """ Validate that copyable_trait_names returns the appropriate result. """ def setUp(self): foo = Foo() self.names = foo.copyable_trait_names() def test_events_not_copyable(self): self.failIf('e' in self.names) def test_read_only_property_not_copyable(self): self.failIf('p_ro' in self.names) def test_write_only_property_not_copyable(self): self.failIf('p_wo' in self.names) def test_any_copyable(self): self.assertIn('a', self.names) def test_bool_copyable(self): self.assertIn('b', self.names) def test_str_copyable(self): self.assertIn('s', self.names) def test_instance_copyable(self): self.assertIn('i', self.names) def test_delegate_copyable(self): self.assertIn('d', self.names) def test_property_copyable(self): self.assertIn('p', self.names) class TestCopyableTraitNameQueries(unittest.TestCase): def setUp(self): self.foo = Foo() def test_type_query(self): names = self.foo.copyable_trait_names(**{ 'type': 'trait' }) self.failUnlessEqual(['a', 'b', 'i', 's'], sorted(names)) names = self.foo.copyable_trait_names(**{ 'type': lambda t: t in ('trait', 'property',) }) self.failUnlessEqual(['a', 'b', 'i', 'p', 's'], sorted(names)) def test_property_query(self): names = self.foo.copyable_trait_names(**{ 'property': lambda p: p() and p()[1].__name__ == '_set_p', }) self.assertEqual(['p'], names) def test_unmodified_query(self): names = self.foo.copyable_trait_names(**{ 'is_trait_type': lambda f: f(Str) }) self.assertEqual(['s'], names) def test_queries_not_combined(self): """ Verify that metadata is not merged with metadata to find the copyable traits. """ eval_true = lambda x: True names = self.foo.copyable_trait_names(property=eval_true, type=eval_true, transient=eval_true) self.assertEqual(['a', 'b', 'd', 'e', 'i', 'p', 'p_ro', 'p_wo', 's', 'trait_added', 'trait_modified' ], sorted(names)) ### EOF traits-4.5.0/traits/tests/test_cythonized_traits.py000066400000000000000000000155621233213561600226700ustar00rootroot00000000000000""" Test some usage of Trait classes when the code is cythonized. The tests reflects some of the patterns needed in different applications. They probably don't cover all of the user case. Each test case is written as if the test code was in a separate module then compiled with Cython Inline before evaluation the produced object behaves properly. The tests need a Cython version > 0.19 and a compiler. """ try: import cython no_cython = False except ImportError: no_cython = True from ..testing.unittest_tools import unittest, UnittestTools def has_no_compiler(): if no_cython: return True # Easy way to check if we have access to a compiler code = "return 1+1" try: cython.inline(code) return False except: return True def cython_version(): if no_cython: return None from Cython.Compiler.Version import version return tuple(int(v) for v in version.split('.')) SKIP_TEST = has_no_compiler() # Cython 0.19 implementation of safe_type fails while parsing some of the # code. We provide a very basic implementation that always returns object # (we don't need any particular optimizations) def _always_object_type(arg, context): return 'object' class CythonizedTraitsTestCase(unittest.TestCase, UnittestTools): @unittest.skipIf(SKIP_TEST, 'Missing Cython and/or compiler') def test_simple_default_methods(self): code = """ from traits.api import HasTraits, Str class Test(HasTraits): name = Str def _name_default(self): return 'Joe' return Test() """ obj = cython.inline(code) self.assertEqual(obj.name, 'Joe') @unittest.skipIf(SKIP_TEST, 'Missing Cython and/or compiler') def test_basic_events(self): code = """ from traits.api import HasTraits, Str class Test(HasTraits): name = Str return Test() """ obj = cython.inline(code) with self.assertTraitChanges(obj, 'name', count=1): obj.name = 'changing_name' @unittest.skipIf(SKIP_TEST, 'Missing Cython and/or compiler') def test_on_trait_static_handlers(self): code = """ from traits.api import HasTraits, Str, Int class Test(HasTraits): name = Str value = Int def _name_changed(self): self.value += 1 return Test() """ obj = cython.inline(code, get_type=_always_object_type, force=True) with self.assertTraitChanges(obj, 'value', count=1): obj.name = 'changing_name' self.assertEqual(obj.value, 1) @unittest.skipIf(SKIP_TEST, 'Missing Cython and/or compiler') def test_on_trait_on_trait_change_decorator(self): code = """ from traits.api import HasTraits, Str, Int, on_trait_change class Test(HasTraits): name = Str value = Int @on_trait_change('name') def _update_value(self): self.value += 1 return Test() """ obj = cython.inline(code, get_type=_always_object_type, force=True, locals={}, globals={}) with self.assertTraitChanges(obj, 'value', count=1): obj.name = 'changing_name' self.assertEqual(obj.value, 1) @unittest.skipIf(SKIP_TEST, 'Missing Cython and/or compiler') def test_on_trait_properties(self): code = """ from traits.api import HasTraits, Str, Int, Property, cached_property class Test(HasTraits): name = Str name_len = Property(depends_on='name') @cached_property def _get_name_len(self): return len(self.name) return Test() """ obj = cython.inline(code, get_type=_always_object_type, force=True, locals={}, globals={}) self.assertEqual(obj.name_len, len(obj.name)) # Assert dependency works obj.name = 'Bob' self.assertEqual(obj.name_len, len(obj.name)) @unittest.skipIf(SKIP_TEST, 'Missing Cython and/or compiler') def test_on_trait_properties_with_standard_getter(self): code = """ from traits.api import HasTraits, Str, Int, Property class Test(HasTraits): name = Str def _get_name_length(self): return len(self.name) name_len = Property(_get_name_length) return Test() """ obj = cython.inline(code, get_type=_always_object_type, force=True, locals={}, globals={}) self.assertEqual(obj.name_len, len(obj.name)) # Assert dependency works obj.name = 'Bob' self.assertEqual(obj.name_len, len(obj.name)) @unittest.skipIf(SKIP_TEST, 'Missing Cython and/or compiler') def test_on_trait_aliasing(self): code = """ from traits.api import HasTraits, Str, Int, Property def Alias(name): def _get_value(self): return getattr(self, name) def _set_value(self, value): return setattr(self, name, value) return Property(_get_value, _set_value) class Test(HasTraits): name = Str funky_name = Alias('name') return Test() """ obj = cython.inline(code, get_type=_always_object_type, force=True, locals={}, globals={}) self.assertEqual(obj.funky_name, obj.name) # Assert dependency works obj.name = 'Bob' self.assertEqual(obj.funky_name, obj.name) @unittest.skipIf(SKIP_TEST, 'Missing Cython and/or compiler') def test_on_trait_aliasing_different_scope(self): code = """ from traits.api import HasTraits, Str, Int, Property def _get_value(self, name): return getattr(self, 'name') def _set_value(self, name, value): return setattr(self, 'name', value) class Test(HasTraits): name = Str funky_name = Property(_get_value, _set_value) return Test() """ obj = cython.inline(code, get_type=_always_object_type) self.assertEqual(obj.funky_name, obj.name) # Assert dependency works obj.name = 'Bob' self.assertEqual(obj.funky_name, obj.name) @unittest.skipIf(SKIP_TEST, 'Missing Cython and/or compiler') def test_on_trait_lambda_failure(self): # Lambda function are converted like builtins when cythonized which # causes the following code to fail code = """ from traits.api import HasTraits, Str, Int, Property def Alias(name): return Property( lambda obj: getattr(obj, name), lambda obj, value: setattr(obj, name, value) ) class Test(HasTraits): name = Str funky_name = Alias('name') return Test() """ try: cython.inline(code, get_type=_always_object_type, force=True, locals={}, globals={}) except: # We suppose we have an exception. Because of the usage of the # skipIf decorator on the test, we can't use an expectedFailure # decorator as they don't play well together. pass else: self.fail( 'Unexpected results. Cython was not managing lambda as regular' ' functions. Behaviour changed ...' ) traits-4.5.0/traits/tests/test_delegate.py000066400000000000000000000234771233213561600207000ustar00rootroot00000000000000# Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import Delegate, HasTraits, Instance, Str # global because event handlers are being called with wrong value for self baz_s_handler_self = None baz_sd_handler_self = None baz_u_handler_self = None baz_t_handler_self = None foo_s_handler_self = None foo_t_handler_self = None class Foo(HasTraits): s = Str('foo') t = Str('foo.t') u = Str('foo.u') def _s_changed(self, name, old, new): print 'Foo._s_changed(%s, %s, %s, %s)' % (self, name, old, new) global foo_s_handler_self foo_s_handler_self = self return def _t_changed(self, name, old, new): print 'Foo._t_changed(%s, %s, %s, %s)' % (self, name, old, new) global foo_t_handler_self foo_t_handler_self = self return class Bar(HasTraits): foo = Instance(Foo, ()) s = Delegate('foo') class BazModify(HasTraits): foo = Instance(Foo, ()) sd = Delegate('foo', prefix='s', modify=True) t = Delegate('foo', modify=True) u = Delegate('foo', listenable=False, modify=True) def _s_changed(self, name, old, new): # should never be called print 'BazModify._s_changed(%s, %s, %s, %s)' % (self, name, old, new) global baz_s_handler_self baz_s_handler_self = self return def _sd_changed(self, name, old, new): print 'BazModify._sd_changed(%s, %s, %s, %s)' % (self, name, old, new) global baz_sd_handler_self baz_sd_handler_self = self return def _t_changed(self, name, old, new): print 'BazModify._t_changed(%s, %s, %s, %s)' % (self, name, old, new) global baz_t_handler_self baz_t_handler_self = self return def _u_changed(self, name, old, new): print 'BazModify._u_changed(%s, %s, %s, %s)' % (self, name, old, new) global baz_u_handler_self baz_u_handler_self = self return class BazNoModify(HasTraits): foo = Instance(Foo, ()) sd = Delegate('foo', prefix='s') t = Delegate('foo') u = Delegate('foo', listenable=False) def _s_changed(self, name, old, new): print 'BazNoModify._s_changed(%s, %s, %s, %s)' % (self, name, old, new) global baz_s_handler_self baz_s_handler_self = self return def _sd_changed(self, name, old, new): print 'BazNoModify._sd_changed(%s, %s, %s, %s)' % (self, name, old, new) global baz_sd_handler_self baz_sd_handler_self = self return def _t_changed(self, name, old, new): print 'BazNoModify._t_changed(%s, %s, %s, %s)' % (self, name, old, new) global baz_t_handler_self baz_t_handler_self = self return def _u_changed(self, name, old, new): print 'BazNoModify._u_changed(%s, %s, %s, %s)' % (self, name, old, new) global baz_u_handler_self baz_u_handler_self = self return class DelegateTestCase(unittest.TestCase): """ Test cases for delegated traits. """ def setUp(self): """ Reset all of the globals. """ global baz_s_handler_self, baz_sd_handler_self, baz_u_handler_self global baz_t_handler_self, foo_s_handler_self, foo_t_handler_self baz_s_handler_self = None baz_sd_handler_self = None baz_u_handler_self = None baz_t_handler_self = None foo_s_handler_self = None foo_t_handler_self = None def test_reset(self): """ Test that a delegated trait may be reset. Deleting the attribute should reset the trait back to its initial delegation behavior. """ f = Foo() b = Bar(foo=f) # Check initial delegation. self.assertEqual(f.s, b.s) # Check that an override works. b.s = 'bar' self.assertNotEqual(f.s, b.s) # Check that we can reset back to delegation. This is what we are # really testing for. del b.s self.assertEqual(f.s, b.s) return # Below are 8 tests to check the calling of change notification handlers. # There are 8 cases for the 2x2x2 matrix with axes: # Delegate with prefix or not # Delegate with modify write through or not # Handler in the delegator and delegatee def test_modify_prefix_handler_on_delegator(self): f = Foo() b = BazModify(foo=f) self.assertEqual(f.s, b.sd) b.sd = 'changed' self.assertEqual(f.s, b.sd) # Don't expect _s_changed to be called because from Baz's perspective # the trait is named 'sd' self.assertEqual(baz_s_handler_self, None) # Do expect '_sd_changed' to be called with b as self self.assertEqual(baz_sd_handler_self, b) return def test_modify_prefix_handler_on_delegatee(self): f = Foo() b = BazModify(foo=f) self.assertEqual(f.s, b.sd) b.sd = 'changed' self.assertEqual(f.s, b.sd) # Foo expects its '_s_changed' handler to be called with f as self self.assertEqual(foo_s_handler_self, f) return def test_no_modify_prefix_handler_on_delegator(self): f = Foo() b = BazNoModify(foo=f) self.assertEqual(f.s, b.sd) b.sd = 'changed' self.assertNotEqual(f.s, b.sd) # Don't expect _s_changed to be called because from Baz's perspective # the trait is named 'sd' self.assertEqual(baz_s_handler_self, None) # Do expect '_sd_changed' to be called with b as self self.assertEqual(baz_sd_handler_self, b) return def test_no_modify_prefix_handler_on_delegatee_not_called(self): f = Foo() b = BazNoModify(foo=f) self.assertEqual(f.s, b.sd) b.sd = 'changed' self.assertNotEqual(f.s, b.sd) # Foo expects its '_s_changed' handler to be called with f as self self.assertEqual(foo_s_handler_self, None) return def test_modify_handler_on_delegator(self): f = Foo() b = BazModify(foo=f) self.assertEqual(f.t, b.t) b.t = 'changed' self.assertEqual(f.t, b.t) # Do expect '_t_changed' to be called with b as self self.assertEqual(baz_t_handler_self, b) return def test_modify_handler_on_delegatee(self): f = Foo() b = BazModify(foo=f) self.assertEqual(f.t, b.t) b.t = 'changed' self.assertEqual(f.t, b.t) # Foo t did change so '_t_changed' handler should be called self.assertEqual(foo_t_handler_self, f) return def test_no_modify_handler_on_delegator(self): f = Foo() b = BazNoModify(foo=f) self.assertEqual(f.t, b.t) b.t = 'changed' self.assertNotEqual(f.t, b.t) # Do expect '_t_changed' to be called with b as self self.assertEqual(baz_t_handler_self, b) return def test_no_modify_handler_on_delegatee_not_called(self): f = Foo() b = BazNoModify(foo=f) self.assertEqual(f.t, b.t) b.t = 'changed' self.assertNotEqual(f.t, b.t) # Foo t did not change so '_t_changed' handler should not be called self.assertEqual(foo_t_handler_self, None) return # Below are 4 tests for notification when the delegated trait is changed # directly rather than through the delegator. def test_no_modify_handler_on_delegatee_direct_change(self): f = Foo() b = BazNoModify(foo=f) self.assertEqual(f.t, b.t) f.t = 'changed' self.assertEqual(f.t, b.t) # Foo t did change so '_t_changed' handler should be called self.assertEqual(foo_t_handler_self, f) return def test_no_modify_handler_on_delegator_direct_change(self): f = Foo() b = BazNoModify(foo=f) self.assertEqual(f.t, b.t) f.t = 'changed' self.assertEqual(f.t, b.t) # Do expect '_t_changed' to be called with b as self self.assertEqual(baz_t_handler_self, b) return def test_modify_handler_on_delegatee_direct_change(self): f = Foo() b = BazModify(foo=f) self.assertEqual(f.t, b.t) f.t = 'changed' self.assertEqual(f.t, b.t) # Foo t did change so '_t_changed' handler should be called self.assertEqual(foo_t_handler_self, f) return def test_modify_handler_on_delegator_direct_change(self): f = Foo() b = BazModify(foo=f) self.assertEqual(f.t, b.t) f.t = 'changed' self.assertEqual(f.t, b.t) # Do expect '_t_changed' to be called with b as self self.assertEqual(baz_t_handler_self, b) return # Below are tests which check that we can turn off listenableness. def test_modify_handler_not_listenable(self): f = Foo() b = BazModify(foo=f) self.assertEqual(f.u, b.u) f.u = 'changed' self.assertEqual(f.u, b.u) # Do not expect '_u_changed' to be called. self.assertEqual(baz_u_handler_self, None) return def test_no_modify_handler_not_listenable(self): f = Foo() b = BazNoModify(foo=f) self.assertEqual(f.u, b.u) f.u = 'changed' self.assertEqual(f.u, b.u) # Do not expect '_u_changed' to be called. self.assertEqual(baz_u_handler_self, None) return if __name__ == '__main__': unittest.main() # EOF # traits-4.5.0/traits/tests/test_dict.py000066400000000000000000000074071233213561600200440ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt """ Test cases for dictionary (Dict) traits. """ from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..trait_types import Dict, Event, Str, TraitDictObject from ..has_traits import HasTraits, on_trait_change from ..trait_errors import TraitError # fixme: We'd like to use a callable instance for the listener so that we # can maintain state, but traits barfs trying to determine the signature 8^() def create_listener(): """ Create a listener for testing trait notifications. """ def listener(obj, trait_name, old, new): listener.obj = obj listener.trait_name = trait_name listener.new = new listener.old = old listener.called += 1 return listener.initialize = lambda: initialize_listener(listener) return initialize_listener(listener) def initialize_listener(listener): """ Initialize a listener so it looks like it hasn't been called. This allows us to re-use the listener without having to create and wire-up a new one. """ listener.obj = None listener.trait_name = None listener.old = None listener.new = None listener.called = 0 return listener # For convenience class TestDict(unittest.TestCase): """ Test cases for dictionary (Dict) traits. """ def test_modified_event(self): class Foo(HasTraits): name = Str modified = Event @on_trait_change('name') def _fire_modified_event(self): self.modified = True return class Bar(HasTraits): foos = Dict(Str, Foo) modified = Event @on_trait_change('foos_items,foos.modified') def _fire_modified_event(self, obj, trait_name, old, new): self.modified = True return bar = Bar() listener = create_listener() bar.on_trait_change(listener, 'modified') # Assign a completely new dictionary. bar.foos = {'dino': Foo(name='dino')} self.assertEqual(1, listener.called) self.assertEqual('modified', listener.trait_name) # Add an item to an existing dictionary. listener.initialize() fred = Foo(name='fred') bar.foos['fred'] = fred self.assertEqual(1, listener.called) self.assertEqual('modified', listener.trait_name) # Modify an item already in the dictionary. listener.initialize() fred.name = 'barney' self.assertEqual(1, listener.called) self.assertEqual('modified', listener.trait_name) # Overwrite an item in the dictionary. This is the one that fails! listener.initialize() bar.foos['fred'] = Foo(name='wilma') self.assertEqual(1, listener.called) self.assertEqual('modified', listener.trait_name) return def test_validate(self): """ Check the validation method. """ foo = Dict() # invalid value with self.assertRaises(TraitError): foo.validate(object=HasTraits(), name='bar', value=None) # valid value result = foo.validate(object=HasTraits(), name='bar', value={}) self.assertIsInstance(result, TraitDictObject) # object is None (check for issue #71) result = foo.validate(object=None, name='bar', value={}) self.assertEqual(result, {}) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_dynamic_notifiers.py000066400000000000000000000155411233213561600226250ustar00rootroot00000000000000""" Tests for the dynamic notifiers. """ import gc from traits import _py2to3 from traits.api import Float, HasTraits, List, on_trait_change from traits.testing.unittest_tools import unittest from traits import trait_notifiers class DynamicNotifiers(HasTraits): ok = Float fail = Float # Lists where we accumulate the arguments of calls to the traits notifiers. rebind_calls_0 = List rebind_calls_1 = List rebind_calls_2 = List rebind_calls_3 = List rebind_calls_4 = List exceptions_from = List #### 'ok' trait listeners @on_trait_change('ok') def method_listener_0(self): self.rebind_calls_0.append(True) @on_trait_change('ok') def method_listener_1(self, new): self.rebind_calls_1.append(new) @on_trait_change('ok') def method_listener_2(self, name, new): self.rebind_calls_2.append((name, new)) @on_trait_change('ok') def method_listener_3(self, obj, name, new): self.rebind_calls_3.append((obj, name, new)) @on_trait_change('ok') def method_listener_4(self, obj, name, old, new): self.rebind_calls_4.append((obj, name, old, new)) #### 'fail' trait listeners @on_trait_change('fail') def failing_method_listener_0(self): self.exceptions_from.append(0) raise Exception('error') @on_trait_change('fail') def failing_method_listener_1(self, new): self.exceptions_from.append(1) raise Exception('error') @on_trait_change('fail') def failing_method_listener_2(self, name, new): self.exceptions_from.append(2) raise Exception('error') @on_trait_change('fail') def failing_method_listener_3(self, obj, name, new): self.exceptions_from.append(3) raise Exception('error') @on_trait_change('fail') def failing_method_listener_4(self, obj, name, old, new): self.exceptions_from.append(4) raise Exception('error') # 'ok' function listeners calls_0 = [] def function_listener_0(): calls_0.append(True) calls_1 = [] def function_listener_1(new): calls_1.append(new) calls_2 = [] def function_listener_2(name, new): calls_2.append((name, new)) calls_3 = [] def function_listener_3(obj, name, new): calls_3.append((obj, name, new)) calls_4 = [] def function_listener_4(obj, name, old, new): calls_4.append((obj, name, old, new)) # 'fail' function listeners exceptions_from = [] def failing_function_listener_0(): exceptions_from.append(0) raise Exception('error') def failing_function_listener_1(new): exceptions_from.append(1) raise Exception('error') def failing_function_listener_2(name, new): exceptions_from.append(2) raise Exception('error') def failing_function_listener_3(obj, name, new): exceptions_from.append(3) raise Exception('error') def failing_function_listener_4(obj, name, old, new): exceptions_from.append(4) raise Exception('error') class TestDynamicNotifiers(unittest.TestCase): #### 'TestCase' protocol ################################################## def setUp(self): self.exceptions = [] trait_notifiers.push_exception_handler(self._handle_exception) def tearDown(self): trait_notifiers.pop_exception_handler() #### Private protocol ##################################################### def _handle_exception(self, obj, name, old, new): self.exceptions.append((obj, name, old, new)) #### Tests ################################################################ def test_dynamic_notifiers_methods(self): obj = DynamicNotifiers(ok=2) obj.ok = 3 self.assertEqual(len(obj.rebind_calls_0), 2) expected_1 = [2, 3] self.assertEqual(expected_1, obj.rebind_calls_1) expected_2 = [('ok', 2), ('ok', 3)] self.assertEqual(expected_2, obj.rebind_calls_2) expected_3 = [(obj, 'ok', 2), (obj, 'ok', 3)] self.assertEqual(expected_3, obj.rebind_calls_3) expected_4 = [(obj, 'ok', 0, 2), (obj, 'ok', 2, 3)] self.assertEqual(expected_4, obj.rebind_calls_4) def test_dynamic_notifiers_methods_failing(self): obj = DynamicNotifiers() obj.fail = 1 _py2to3.assertCountEqual(self, [0, 1, 2, 3, 4], obj.exceptions_from) self.assertEqual([(obj, 'fail', 0, 1)]*5, self.exceptions) def test_dynamic_notifiers_functions(self): obj = DynamicNotifiers() obj.on_trait_change(function_listener_0, 'ok') obj.on_trait_change(function_listener_1, 'ok') obj.on_trait_change(function_listener_2, 'ok') obj.on_trait_change(function_listener_3, 'ok') obj.on_trait_change(function_listener_4, 'ok') obj.ok = 2 obj.ok = 3 expected_1 = [2, 3] self.assertEqual(expected_1, calls_1) expected_2 = [('ok', 2), ('ok', 3)] self.assertEqual(expected_2, calls_2) expected_3 = [(obj, 'ok', 2), (obj, 'ok', 3)] self.assertEqual(expected_3, calls_3) expected_4 = [(obj, 'ok', 0, 2), (obj, 'ok', 2, 3)] self.assertEqual(expected_4, calls_4) def test_dynamic_notifiers_functions_failing(self): obj = DynamicNotifiers() obj.on_trait_change(failing_function_listener_0, 'fail') obj.on_trait_change(failing_function_listener_1, 'fail') obj.on_trait_change(failing_function_listener_2, 'fail') obj.on_trait_change(failing_function_listener_3, 'fail') obj.on_trait_change(failing_function_listener_4, 'fail') obj.fail = 1 _py2to3.assertCountEqual(self, [0, 1, 2, 3, 4], obj.exceptions_from) # 10 failures: 5 are from the internal dynamic listeners, see # test_dynamic_notifiers_methods_failing self.assertEqual([(obj, 'fail', 0, 1)] * 10, self.exceptions) def test_object_can_be_garbage_collected(self): # Make sure that a trait object can be garbage collected even though # there are listener to its traits. import weakref obj = DynamicNotifiers() obj.on_trait_change(function_listener_0, 'ok') # Create a weak reference to `obj` with a callback that flags when the # object is finalized. obj_collected = [] def obj_collected_callback(weakref): obj_collected.append(True) obj_weakref = weakref.ref(obj, obj_collected_callback) # Remove reference to `obj`, and check that the weak reference # callback has been called, indicating that it has been collected. del obj self.assertEqual(obj_collected, [True]) def test_creating_notifiers_dont_create_cyclic_garbage(self): gc.collect() DynamicNotifiers() # When an object with dynamic listeners has no more references, # it should not create cyclic garbage. self.assertEqual(gc.collect(), 0) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_dynamic_trait_definition.py000066400000000000000000000021461233213561600241530ustar00rootroot00000000000000from traits.testing.unittest_tools import unittest from traits.api import Float, HasTraits, Int, List class Foo(HasTraits): x = Float y_changes = List def _y_changed(self, new): self.y_changes.append(new) class TestDynamicTraitDefinition(unittest.TestCase): """ Test demonstrating special change events using the 'event' metadata. """ def test_add_trait(self): foo = Foo(x=3) foo.add_trait('y', Int) self.assertTrue(hasattr(foo, 'y')) self.assertEqual(type(foo.y), int) foo.y = 4 self.assertEqual(foo.y_changes, [4]) def test_remove_trait(self): foo = Foo(x=3) # We can't remove a "statically" added trait (i.e., a trait defined # in the Foo class). result = foo.remove_trait('x') self.assertFalse(result) # We can remove dynamically added traits. foo.add_trait('y', Int) foo.y = 70 result = foo.remove_trait('y') self.assertTrue(result) self.assertFalse(hasattr(foo, 'y')) foo.y = 10 self.assertEqual(foo.y_changes, [70]) traits-4.5.0/traits/tests/test_enum.py000066400000000000000000000012621233213561600200560ustar00rootroot00000000000000from traits.testing.unittest_tools import unittest from traits.api import Enum, HasTraits, List, Property, TraitError class ExampleModel(HasTraits): valid_models = Property(List) root = Enum(values='valid_models') def _get_valid_models(self): return ['model1', 'model2', 'model3'] class EnumTestCase(unittest.TestCase): def test_valid_enum(self): example_model = ExampleModel(root='model1') example_model.root = 'model2' def test_invalid_enum(self): example_model = ExampleModel(root='model1') def assign_invalid(): example_model.root = 'not_valid_model' self.assertRaises(TraitError, assign_invalid) traits-4.5.0/traits/tests/test_event_order.py000066400000000000000000000055001233213561600214250ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This Software is provided without warranty under the terms of the # BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The # license # is also available online at http://www.enthought.com/licenses/BSD.txt from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Str, Instance, Any class TestEventOrder(unittest.TestCase): """ Tests that demonstrate that trait events are delivered in LIFO order rather than FIFO order. Baz receives the "effect" event before it receives the "cause" event. """ def setUp(self): foo = Foo(cause='ORIGINAL') bar = Bar(foo=foo, test=self) baz = Baz(bar=bar, test=self) self.events_delivered = [] foo.cause = 'CHANGE' return def test_lifo_order(self): lifo = ['Bar._caused_changed', 'Baz._effect_changed', 'Baz._caused_changed'] self.failUnlessEqual(self.events_delivered, lifo) return def test_not_fifo_order(self): fifo = ['Bar._caused_changed', 'Baz._caused_changed', 'Baz._effect_changed'] self.failIfEqual(self.events_delivered, fifo) return class Foo(HasTraits): cause = Str class Bar(HasTraits): foo = Instance(Foo) effect = Str test = Any def _foo_changed(self, obj, old, new): if old is not None and old is not new: old.on_trait_change(self._cause_changed, name='cause', remove=True) if new is not None: new.on_trait_change(self._cause_changed, name='cause') return def _cause_changed(self, obj, name, old, new): self.test.events_delivered.append('Bar._caused_changed') self.effect = new.lower() return class Baz(HasTraits): bar = Instance(Bar) test = Any def _bar_changed(self, obj, old, new): if old is not None and old is not new: old.on_trait_change(self._effect_changed, name='effect', remove=True) old.foo.on_trait_change(self._cause_changed, name='cause', remove=True) if new is not None: new.foo.on_trait_change(self._cause_changed, name='cause') new.on_trait_change(self._effect_changed, name='effect') return def _cause_changed(self, obj, name, old, new): self.test.events_delivered.append('Baz._caused_changed') return def _effect_changed(self, obj, name, old, new): self.test.events_delivered.append('Baz._effect_changed') return ### EOF ####################################################################### traits-4.5.0/traits/tests/test_events.py000066400000000000000000000064521233213561600204240ustar00rootroot00000000000000# Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: David C. Morrill Date: 10/22/2003 Description: Unit test case for # Traits event notification handling. from __future__ import absolute_import from ..api import HasTraits class TestBase(HasTraits): __traits__ = { 't1': 0, 't2': 0 } def test(self): print '---------- Begin %s test ----------' % self.__class__.__name__ print 'normal changes' self.t1 = 1 self.t2 = 2 print '---------- End %s test ----------\n' % self.__class__.__name__ class Test1(TestBase): def t1_changed(self, old, new): print 't1 changed:', old, new def t2_changed(self, old, new): print 't2 changed:', old, new class Test2(Test1): def anytrait_changed(self, name, old, new): print 'anytrait changed:', name, old, new class Test3(TestBase): def anytrait_changed(self, name, old, new): print 'anytrait changed:', name, old, new class Test4(TestBase): def __init__(self, **traits): TestBase.__init__(self, **traits) self.on_trait_change(self.on_anytrait) def on_anytrait(self, object, name, old, new): print 'on anytrait changed:', name, old, new class Test5(TestBase): def __init__(self, **traits): TestBase.__init__(self, **traits) self.on_trait_change(self.t1_trait, 't1') self.on_trait_change(self.t2_trait, 't2') def t1_trait(self, object, name, old, new): print 'on t1 changed:', old, new def t2_trait(self, object, name, old, new): print 'on t2 changed:', old, new class Test6(Test5): def __init__(self, **traits): Test5.__init__(self, **traits) self.on_trait_change(self.on_anytrait) def on_anytrait(self, object, name, old, new): print 'on anytrait changed:', name, old, new class Test7(Test1): def __init__(self, **traits): Test1.__init__(self, **traits) self.on_trait_change(self.t1_trait, 't1') self.on_trait_change(self.t2_trait, 't2') def t1_trait(self, object, name, old, new): print 'on t1 changed:', old, new def t2_trait(self, object, name, old, new): print 'on t2 changed:', old, new class Test8(Test2): def __init__(self, **traits): Test1.__init__(self, **traits) self.on_trait_change(self.t1_trait, 't1') self.on_trait_change(self.t2_trait, 't2') self.on_trait_change(self.on_anytrait) def on_anytrait(self, object, name, old, new): print 'on anytrait changed:', name, old, new def t1_trait(self, object, name, old, new): print 'on t1 changed:', old, new def t2_trait(self, object, name, old, new): print 'on t2 changed:', old, new test1 = Test1() test1.test() test2 = Test2() test2.test() test3 = Test3() test3.test() test4 = Test4() test4.test() test5 = Test5() test5.test() test6 = Test6() test6.test() test7 = Test7() test7.test() test8 = Test8() test8.test() traits-4.5.0/traits/tests/test_extended_notifiers.py000066400000000000000000000160451233213561600230010ustar00rootroot00000000000000""" Tests for the extended notifiers. The "extended notifiers" are set up internally when using extended traits, to add/remove traits listeners when one of the intermediate traits changes. For example, in a listener for the extended trait `a.b`, we need to add/remove listeners to `a:b` when `a` changes. """ from traits import _py2to3 from traits.api import Float, HasTraits, List from traits.testing.unittest_tools import unittest from traits import trait_notifiers class ExtendedNotifiers(HasTraits): def __init__(self, **traits): # Set up the 'extended' internal notifiers (see module docstring) ok_listeners = [self.method_listener_0, self.method_listener_1, self.method_listener_2, self.method_listener_3, self.method_listener_4] for listener in ok_listeners: self._on_trait_change(listener, 'ok', dispatch='extended') fail_listeners = [self.failing_method_listener_0, self.failing_method_listener_1, self.failing_method_listener_2, self.failing_method_listener_3, self.failing_method_listener_4] for listener in fail_listeners: self._on_trait_change(listener, 'fail', dispatch='extended') super(ExtendedNotifiers, self).__init__(**traits) ok = Float fail = Float # Lists where we accumulate the arguments of calls to the traits notifiers. rebind_calls_0 = List rebind_calls_1 = List rebind_calls_2 = List rebind_calls_3 = List rebind_calls_4 = List exceptions_from = List #### 'ok' trait listeners def method_listener_0(self): self.rebind_calls_0.append(True) def method_listener_1(self, new): self.rebind_calls_1.append(new) def method_listener_2(self, name, new): self.rebind_calls_2.append((name, new)) def method_listener_3(self, obj, name, new): self.rebind_calls_3.append((obj, name, new)) def method_listener_4(self, obj, name, old, new): self.rebind_calls_4.append((obj, name, old, new)) #### 'fail' trait listeners def failing_method_listener_0(self): self.exceptions_from.append(0) raise Exception('error') def failing_method_listener_1(self, new): self.exceptions_from.append(1) raise Exception('error') def failing_method_listener_2(self, name, new): self.exceptions_from.append(2) raise Exception('error') def failing_method_listener_3(self, obj, name, new): self.exceptions_from.append(3) raise Exception('error') def failing_method_listener_4(self, obj, name, old, new): self.exceptions_from.append(4) raise Exception('error') # 'ok' function listeners calls_0 = [] def function_listener_0(): calls_0.append(True) calls_1 = [] def function_listener_1(new): calls_1.append(new) calls_2 = [] def function_listener_2(name, new): calls_2.append((name, new)) calls_3 = [] def function_listener_3(obj, name, new): calls_3.append((obj, name, new)) calls_4 = [] def function_listener_4(obj, name, old, new): calls_4.append((obj, name, old, new)) # 'fail' function listeners exceptions_from = [] def failing_function_listener_0(): exceptions_from.append(0) raise Exception('error') def failing_function_listener_1(new): exceptions_from.append(1) raise Exception('error') def failing_function_listener_2(name, new): exceptions_from.append(2) raise Exception('error') def failing_function_listener_3(obj, name, new): exceptions_from.append(3) raise Exception('error') def failing_function_listener_4(obj, name, old, new): exceptions_from.append(4) raise Exception('error') class TestExtendedNotifiers(unittest.TestCase): #### 'TestCase' protocol ################################################## def setUp(self): self.exceptions = [] trait_notifiers.push_exception_handler(self._handle_exception) def tearDown(self): trait_notifiers.pop_exception_handler() #### Private protocol ##################################################### def _handle_exception(self, obj, name, old, new): self.exceptions.append((obj, name, old, new)) #### Tests ################################################################ def test_extended_notifiers_methods(self): obj = ExtendedNotifiers(ok=2) obj.ok = 3 self.assertEqual(len(obj.rebind_calls_0), 2) expected_1 = [2, 3] self.assertEqual(expected_1, obj.rebind_calls_1) expected_2 = [('ok', 2), ('ok', 3)] self.assertEqual(expected_2, obj.rebind_calls_2) expected_3 = [(obj, 'ok', 2), (obj, 'ok', 3)] self.assertEqual(expected_3, obj.rebind_calls_3) expected_4 = [(obj, 'ok', 0, 2), (obj, 'ok', 2, 3)] self.assertEqual(expected_4, obj.rebind_calls_4) def test_extended_notifiers_methods_failing(self): obj = ExtendedNotifiers() obj.fail = 1 _py2to3.assertCountEqual(self, [0, 1, 2, 3, 4], obj.exceptions_from) self.assertEqual([(obj, 'fail', 0, 1)]*5, self.exceptions) def test_extended_notifiers_functions(self): obj = ExtendedNotifiers() obj._on_trait_change(function_listener_0, 'ok', dispatch='extended') obj._on_trait_change(function_listener_1, 'ok', dispatch='extended') obj._on_trait_change(function_listener_2, 'ok', dispatch='extended') obj._on_trait_change(function_listener_3, 'ok', dispatch='extended') obj._on_trait_change(function_listener_4, 'ok', dispatch='extended') obj.ok = 2 obj.ok = 3 expected_1 = [2, 3] self.assertEqual(expected_1, calls_1) expected_2 = [('ok', 2), ('ok', 3)] self.assertEqual(expected_2, calls_2) expected_3 = [(obj, 'ok', 2), (obj, 'ok', 3)] self.assertEqual(expected_3, calls_3) expected_4 = [(obj, 'ok', 0, 2), (obj, 'ok', 2, 3)] self.assertEqual(expected_4, calls_4) def test_extended_notifiers_functions_failing(self): obj = ExtendedNotifiers() obj._on_trait_change(failing_function_listener_0, 'fail', dispatch='extended') obj._on_trait_change(failing_function_listener_1, 'fail', dispatch='extended') obj._on_trait_change(failing_function_listener_2, 'fail', dispatch='extended') obj._on_trait_change(failing_function_listener_3, 'fail', dispatch='extended') obj._on_trait_change(failing_function_listener_4, 'fail', dispatch='extended') obj.fail = 1 _py2to3.assertCountEqual(self, [0, 1, 2, 3, 4], obj.exceptions_from) # 10 failures: 5 are from the internal extended listeners, see # test_extended_notifiers_methods_failing self.assertEqual([(obj, 'fail', 0, 1)] * 10, self.exceptions) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_extended_trait_change.py000066400000000000000000000567421233213561600234370ustar00rootroot00000000000000# Unit test case for testing HasTraits 'on_trait_change' support. # # Written by: David C. Morrill # # Date: 4/10/2007 # # (c) Copyright 2007 by Enthought, Inc. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt """ Unit test case for testing HasTraits 'on_trait_change' support. """ from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import (Any, Dict, HasTraits, Instance, Int, List, Property, TraitDictEvent, TraitError, TraitListEvent, Undefined, cached_property, on_trait_change, pop_exception_handler, push_exception_handler) from ..trait_handlers import TraitListObject, TraitDictObject class ArgCheckBase(HasTraits): value = Int(0) int1 = Int(0, test=True) int2 = Int(0) int3 = Int(0, test=True) tint1 = Int(0) tint2 = Int(0, test=True) tint3 = Int(0) calls = Int(0) tc = Any class ArgCheckSimple(ArgCheckBase): def arg_check0(self): self.calls += 1 def arg_check1(self, new): self.calls += 1 self.tc.assertEqual(new, self.value) def arg_check2(self, name, new): self.calls += 1 self.tc.assertEqual(name, 'value') self.tc.assertEqual(new, self.value) def arg_check3(self, object, name, new): self.calls += 1 self.tc.assertIs(object, self) self.tc.assertEqual(name, 'value') self.tc.assertEqual(new, self.value) def arg_check4(self, object, name, old, new): self.calls += 1 self.tc.assertIs(object, self) self.tc.assertEqual(name, 'value') self.tc.assertEqual(old, (self.value - 1)) self.tc.assertEqual(new, self.value) class ArgCheckDecorator(ArgCheckBase): @on_trait_change('value') def arg_check0(self): self.calls += 1 @on_trait_change('value') def arg_check1(self, new): self.calls += 1 self.tc.assertEqual(new, self.value) @on_trait_change('value') def arg_check2(self, name, new): self.calls += 1 self.tc.assertEqual(name, 'value') self.tc.assertEqual(new, self.value) @on_trait_change('value') def arg_check3(self, object, name, new): self.calls += 1 self.tc.assertIs(object, self) self.tc.assertEqual(name, 'value') self.tc.assertEqual(new, self.value) @on_trait_change('value') def arg_check4(self, object, name, old, new): self.calls += 1 self.tc.assertIs(object, self) self.tc.assertEqual(name, 'value') self.tc.assertEqual(old, (self.value - 1)) self.tc.assertEqual(new, self.value) class Instance1(HasTraits): ref = Instance(ArgCheckBase, ()) calls = Int(0) exp_object = Any exp_name = Any dst_name = Any exp_old = Any exp_new = Any dst_new = Any tc = Any @on_trait_change('ref.value') def arg_check0(self): self.calls += 1 @on_trait_change('ref.value') def arg_check1(self, new): self.calls += 1 self.tc.assertEqual(new, self.dst_new) @on_trait_change('ref.value') def arg_check2(self, name, new): self.calls += 1 self.tc.assertEqual(name, self.dst_name) self.tc.assertEqual(new, self.dst_new) @on_trait_change('ref.value') def arg_check3(self, object, name, new): self.calls += 1 self.tc.assertIs(object, self.exp_object) self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(new, self.exp_new) @on_trait_change('ref.value') def arg_check4(self, object, name, old, new): self.calls += 1 self.tc.assertIs(object, self.exp_object) self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(old, self.exp_old) self.tc.assertEqual(new, self.exp_new) class List1(HasTraits): refs = List(ArgCheckBase) calls = Int(0) exp_object = Any exp_name = Any type_old = Any exp_old = Any type_new = Any exp_new = Any tc = Any @on_trait_change('refs.value') def arg_check0(self): self.calls += 1 @on_trait_change('refs.value') def arg_check3(self, object, name, new): self.calls += 1 self.tc.assertIs(object, self.exp_object) self.tc.assertEqual(name, self.exp_name) if self.type_new is None: self.tc.assertEqual(new, self.exp_new) else: self.tc.assertIsInstance(new, self.type_new) @on_trait_change('refs.value') def arg_check4(self, object, name, old, new): self.calls += 1 self.tc.assertIs(object, self.exp_object) self.tc.assertEqual(name, self.exp_name) if self.type_old is None: self.tc.assertEqual(old, self.exp_old) else: self.tc.assertIsInstance(old, self.type_old) if self.type_new is None: self.tc.assertEqual(new, self.exp_new) else: self.tc.assertIsInstance(new, self.type_new) class List2(HasTraits): refs = List(ArgCheckBase) calls = Int(0) exp_new = Any tc = Any @on_trait_change('refs.value') def arg_check1(self, new): self.calls += 1 self.tc.assertEqual(new, self.exp_new) class List3(HasTraits): refs = List(ArgCheckBase) calls = Int(0) exp_name = Any exp_new = Any tc = Any @on_trait_change('refs.value') def arg_check2(self, name, new): self.calls += 1 self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(new, self.exp_new) class Dict1(List1): refs = Dict(Int, ArgCheckBase) class Dict2(HasTraits): refs = Dict(Int, ArgCheckBase) calls = Int(0) exp_new = Any tc = Any @on_trait_change('refs.value') def arg_check1(self, new): self.calls += 1 self.tc.assertEqual(new, self.exp_new) class Dict3(HasTraits): refs = Dict(Int, ArgCheckBase) calls = Int(0) exp_name = Any exp_new = Any tc = Any @on_trait_change('refs.value') def arg_check2(self, name, new): self.calls += 1 self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(new, self.exp_new) class Complex(HasTraits): int1 = Int(0, test=True) int2 = Int(0) int3 = Int(0, test=True) tint1 = Int(0) tint2 = Int(0, test=True) tint3 = Int(0) ref = Instance(ArgCheckBase, ()) calls = Int(0) exp_object = Any exp_name = Any dst_name = Any exp_old = Any exp_new = Any dst_new = Any tc = Any def arg_check0(self): self.calls += 1 def arg_check1(self, new): self.calls += 1 self.tc.assertEqual(new, self.exp_new) def arg_check2(self, name, new): self.calls += 1 self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(new, self.exp_new) def arg_check3(self, object, name, new): self.calls += 1 self.tc.assertIs(object, self.exp_object) self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(new, self.exp_new) def arg_check4(self, object, name, old, new): self.calls += 1 self.tc.assertIs(object, self.exp_object) self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(old, self.exp_old) self.tc.assertEqual(new, self.exp_new) class Link(HasTraits): next = Any prev = Any value = Int(0) class LinkTest(HasTraits): head = Instance(Link) calls = Int(0) exp_object = Any exp_name = Any dst_name = Any exp_old = Any exp_new = Any dst_new = Any tc = Any def arg_check0(self): self.calls += 1 def arg_check1(self, new): self.calls += 1 self.tc.assertEqual(new, self.exp_new) def arg_check2(self, name, new): self.calls += 1 self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(new, self.exp_new) def arg_check3(self, object, name, new): self.calls += 1 self.tc.assertIs(object, self.exp_object) self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(new, self.exp_new) def arg_check4(self, object, name, old, new): self.calls += 1 self.tc.assertIs(object, self.exp_object) self.tc.assertEqual(name, self.exp_name) self.tc.assertEqual(old, self.exp_old) self.tc.assertEqual(new, self.exp_new) class PropertyDependsOn(HasTraits): sum = Property(depends_on='ref.[int1,int2,int3]') ref = Instance(ArgCheckBase, ()) pcalls = Int(0) calls = Int(0) exp_old = Any exp_new = Any tc = Any @cached_property def _get_sum(self): self.pcalls += 1 r = self.ref return (r.int1 + r.int2 + r.int3) def _sum_changed(self, old, new): self.calls += 1 self.tc.assertEqual(old, self.exp_old) self.tc.assertEqual(new, self.exp_new) class OnTraitChangeTest(unittest.TestCase): def setUp(self): def ignore(*args): pass push_exception_handler(handler=ignore, reraise_exceptions=True) def tearDown(self): pop_exception_handler() def test_arg_check_simple(self): ac = ArgCheckSimple(tc=self) ac.on_trait_change(ac.arg_check0, 'value') ac.on_trait_change(ac.arg_check1, 'value') ac.on_trait_change(ac.arg_check2, 'value') ac.on_trait_change(ac.arg_check3, 'value') ac.on_trait_change(ac.arg_check4, 'value') for i in range(3): ac.value += 1 self.assertEqual(ac.calls, (3 * 5)) ac.on_trait_change(ac.arg_check0, 'value', remove=True) ac.on_trait_change(ac.arg_check1, 'value', remove=True) ac.on_trait_change(ac.arg_check2, 'value', remove=True) ac.on_trait_change(ac.arg_check3, 'value', remove=True) ac.on_trait_change(ac.arg_check4, 'value', remove=True) for i in range(3): ac.value += 1 self.assertEqual(ac.calls, (3 * 5)) self.assertEqual(ac.value, (2 * 3)) def test_arg_check_decorator(self): ac = ArgCheckDecorator(tc=self) for i in range(3): ac.value += 1 self.assertEqual(ac.calls, (3 * 5)) self.assertEqual(ac.value, 3) def test_instance1(self): i1 = Instance1(tc=self) for i in range(3): i1.set(exp_object=i1.ref, exp_name='value', dst_name='value', exp_old=i, exp_new=(i + 1), dst_new=(i + 1)) i1.ref.value = (i + 1) self.assertEqual(i1.calls, (3 * 5)) self.assertEqual(i1.ref.value, 3) ref = ArgCheckBase() i1.set(exp_object=i1, exp_name='ref', dst_name='value', exp_old=i1.ref, exp_new=ref, dst_new=0) i1.ref = ref self.assertEqual(i1.calls, (4 * 5)) self.assertEqual(i1.ref.value, 0) for i in range(3): i1.set(exp_object=i1.ref, exp_name='value', dst_name='value', exp_old=i, exp_new=(i + 1), dst_new=(i + 1)) i1.ref.value = (i + 1) self.assertEqual(i1.calls, (7 * 5)) self.assertEqual(i1.ref.value, 3) def test_list1(self): l1 = List1(tc=self) for i in range(3): ac = ArgCheckBase() l1.set(exp_object=l1, exp_name='refs_items', type_old=None, exp_old=Undefined, type_new=TraitListEvent) l1.refs.append(ac) #self.assertEqual(l1.calls, (3 * 3)) # FIXME for i in range(3): self.assertEqual(l1.refs[i].value, 0) refs = [ArgCheckBase(), ArgCheckBase(), ArgCheckBase()] l1.set(exp_object=l1, exp_name='refs', type_old=None, exp_old=l1.refs, type_new=TraitListObject) l1.refs = refs #self.assertEqual(l1.calls, (4 * 3)) for i in range(3): self.assertEqual(l1.refs[i].value, 0) for i in range(3): for j in range(3): l1.set(exp_object=l1.refs[j], exp_name='value', type_old=None, exp_old=i, type_new=None, exp_new=(i + 1)) l1.refs[j].value = (i + 1) #self.assertEqual(l1.calls, (13 * 3)) for i in range(3): self.assertEqual(l1.refs[i].value, 3) def test_list2(self): self.check_list(List2(tc=self)) def test_list3(self): self.check_list(List3(tc=self)) def test_dict1(self): d1 = Dict1(tc=self) for i in range(3): ac = ArgCheckBase() d1.set(exp_object=d1, exp_name='refs_items', type_old=None, exp_old=Undefined, type_new=TraitDictEvent) d1.refs[i] = ac #self.assertEqual(d1.calls, (3 * 3)) # FIXME for i in range(3): self.assertEqual(d1.refs[i].value, 0) refs = {0: ArgCheckBase(), 1: ArgCheckBase(), 2: ArgCheckBase()} d1.set(exp_object=d1, exp_name='refs', type_old=None, exp_old=d1.refs, type_new=TraitDictObject) d1.refs = refs #self.assertEqual(d1.calls, (4 * 3)) for i in range(3): self.assertEqual(d1.refs[i].value, 0) for i in range(3): for j in range(3): d1.set(exp_object=d1.refs[j], exp_name='value', type_old=None, exp_old=i, type_new=None, exp_new=(i + 1)) d1.refs[j].value = (i + 1) #self.assertEqual(d1.calls, (13 * 3)) for i in range(3): self.assertEqual(d1.refs[i].value, 3) def test_dict2(self): self.check_dict(Dict2(tc=self)) def test_dict3(self): self.check_dict(Dict3(tc=self)) def test_pattern_list1(self): c = Complex(tc=self) self.check_complex(c, c, 'int1, int2, int3', ['int1', 'int2', 'int3'], ['tint1', 'tint2', 'tint3']) def test_pattern_list2(self): c = Complex(tc=self) self.check_complex(c, c, ['int1', 'int2', 'int3'], ['int1', 'int2', 'int3'], ['tint1', 'tint2', 'tint3']) def test_pattern_list3(self): c = Complex(tc=self) self.check_complex(c, c.ref, 'ref.[int1, int2, int3]', ['int1', 'int2', 'int3'], ['tint1', 'tint2', 'tint3']) def test_pattern_list4(self): c = Complex(tc=self) handlers = [c.arg_check0, c.arg_check3, c.arg_check4] n = len(handlers) pattern = 'ref.[int1,int2,int3]' self.multi_register(c, handlers, pattern) r0 = c.ref r1 = ArgCheckBase() c.set(exp_object=c, exp_name='ref', exp_old=r0, exp_new=r1) c.ref = r1 c.set(exp_old=r1, exp_new=r0) c.ref = r0 self.assertEqual(c.calls, 2 * n) self.multi_register(c, handlers, pattern, remove=True) c.ref = r1 c.ref = r0 self.assertEqual(c.calls, 2 * n) def test_pattern_list5(self): c = Complex(tc=self) c.on_trait_change(c.arg_check1, 'ref.[int1,int2,int3]') self.assertRaises(TraitError, c.set, ref=ArgCheckBase()) def test_pattern_list6(self): c = Complex(tc=self) c.on_trait_change(c.arg_check2, 'ref.[int1,int2,int3]') self.assertRaises(TraitError, c.set, ref=ArgCheckBase()) def test_pattern_list7(self): c = Complex(tc=self) self.check_complex(c, c, '+test', ['int1', 'int3', 'tint2'], ['int2', 'tint1', 'tint3']) def test_pattern_list8(self): c = Complex(tc=self) self.check_complex(c, c, 'int+test', ['int1', 'int3'], ['int2', 'tint1', 'tint2', 'tint3']) def test_pattern_list9(self): c = Complex(tc=self) self.check_complex(c, c, 'int-test', ['int2'], ['int1', 'int3', 'tint4', 'tint5', 'tint6']) def test_pattern_list10(self): c = Complex(tc=self) self.check_complex(c, c, 'int+', ['int1', 'int2', 'int3'], ['tint1', 'tint2', 'tint3']) def test_pattern_list11(self): c = Complex(tc=self) self.check_complex(c, c, 'int-', ['int1', 'int2', 'int3'], ['tint1', 'tint2', 'tint3']) def test_pattern_list12(self): c = Complex(tc=self) self.check_complex(c, c, 'int+test,tint-test', ['int1', 'int3', 'tint1', 'tint3'], ['int2', 'tint2']) def test_pattern_list13(self): c = Complex(tc=self) self.check_complex(c, c.ref, 'ref.[int+test,tint-test]', ['int1', 'int3', 'tint1', 'tint3'], ['int2', 'tint2']) def test_cycle1(self): lt = LinkTest(tc=self, head=self.build_list()) handlers = [lt.arg_check0, lt.arg_check1, lt.arg_check2, lt.arg_check3, lt.arg_check4] nh = len(handlers) self.multi_register(lt, handlers, 'head.next*.value') cur = lt.head for i in range(4): lt.set(exp_object=cur, exp_name='value', exp_old=10 * i, exp_new=(10 * i) + 1) cur.value = (10 * i) + 1 cur = cur.next self.assertEqual(lt.calls, 4 * nh) self.multi_register(lt, handlers, 'head.next*.value', remove=True) cur = lt.head for i in range(4): cur.value = (10 * i) + 2 cur = cur.next self.assertEqual(lt.calls, 4 * nh) def test_cycle2(self): lt = LinkTest(tc=self, head=self.build_list()) handlers = [lt.arg_check0, lt.arg_check1, lt.arg_check2, lt.arg_check3, lt.arg_check4] nh = len(handlers) self.multi_register(lt, handlers, 'head.[next,prev]*.value') cur = lt.head for i in range(4): lt.set(exp_object=cur, exp_name='value', exp_old=10 * i, exp_new=(10 * i) + 1) cur.value = (10 * i) + 1 cur = cur.next self.assertEqual(lt.calls, 4 * nh) self.multi_register(lt, handlers, 'head.[next,prev]*.value', remove=True) cur = lt.head for i in range(4): cur.value = (10 * i) + 2 cur = cur.next self.assertEqual(lt.calls, 4 * nh) def test_cycle3(self): lt = LinkTest(tc=self, head=self.build_list()) handlers = [lt.arg_check0, lt.arg_check3, lt.arg_check4] nh = len(handlers) self.multi_register(lt, handlers, 'head.next*.value') link = self.new_link(lt, lt.head, 1) self.assertEqual(lt.calls, nh) link = self.new_link(lt, link, 2) self.assertEqual(lt.calls, 2 * nh) self.multi_register(lt, handlers, 'head.next*.value', remove=True) link = self.new_link(lt, link, 3) self.assertEqual(lt.calls, 2 * nh) def test_property(self): pdo = PropertyDependsOn(tc=self) sum = pdo.sum self.assertEqual(sum, 0) for n in ['int1', 'int2', 'int3']: for i in range(3): pdo.set(exp_old=sum, exp_new=sum + 1) setattr(pdo.ref, n, i + 1) sum += 1 self.assertEqual(pdo.pcalls, (3 * 3) + 1) self.assertEqual(pdo.calls, 3 * 3) for i in range(10): x = pdo.sum self.assertEqual(pdo.pcalls, (3 * 3) + 1) pdo.set(exp_old=sum, exp_new=60) old_ref = pdo.ref pdo.ref = ArgCheckBase(int1=10, int2=20, int3=30) self.assertEqual(pdo.pcalls, (3 * 3) + 2) self.assertEqual(pdo.calls, (3 * 3) + 1) sum = 60 for n in ['int1', 'int2', 'int3']: for i in range(3): pdo.set(exp_old=sum, exp_new=sum + 1) setattr(pdo.ref, n, getattr(pdo.ref, n) + 1) sum += 1 self.assertEqual(pdo.pcalls, (2 * 3 * 3) + 2) self.assertEqual(pdo.calls, (2 * 3 * 3) + 1) for n in ['int1', 'int2', 'int3']: for i in range(3): setattr(old_ref, n, getattr(old_ref, n) + 1) self.assertEqual(pdo.pcalls, (2 * 3 * 3) + 2) self.assertEqual(pdo.calls, (2 * 3 * 3) + 1) self.assertEqual(pdo.sum, sum) self.assertEqual(pdo.pcalls, (2 * 3 * 3) + 2) def check_list(self, l): for i in range(3): ac = ArgCheckBase() self.assertRaises(TraitError, l.refs.append, ac) self.assertEqual(l.calls, 0) for i in range(3): self.assertEqual(l.refs[i].value, 0) refs = [ArgCheckBase(), ArgCheckBase(), ArgCheckBase()] self.assertRaises(TraitError, l.set, refs=refs) self.assertEqual(l.calls, 0) for i in range(3): self.assertEqual(l.refs[i].value, 0) for i in range(3): for j in range(3): l.exp_new = (i + 1) l.refs[j].value = (i + 1) self.assertEqual(l.calls, 0) for i in range(3): self.assertEqual(l.refs[i].value, 3) def check_dict(self, d): for i in range(3): ac = ArgCheckBase() self.assertRaises(TraitError, d.refs.setdefault, i, ac) self.assertEqual(d.calls, 0) for i in range(3): self.assertEqual(d.refs[i].value, 0) refs = {0: ArgCheckBase(), 1: ArgCheckBase(), 2: ArgCheckBase()} self.assertRaises(TraitError, d.set, refs=refs) self.assertEqual(d.calls, 0) for i in range(3): self.assertEqual(d.refs[i].value, 0) for i in range(3): for j in range(3): d.exp_new = (i + 1) d.refs[j].value = (i + 1) self.assertEqual(d.calls, 0) for i in range(3): self.assertEqual(d.refs[i].value, 3) def check_complex(self, c, r, pattern, names, other=[]): handlers = [c.arg_check0, c.arg_check1, c.arg_check2, c.arg_check3, c.arg_check4] nh = len(handlers) nn = len(names) self.multi_register(c, handlers, pattern) for i in range(3): for n in names: c.set(exp_object=r, exp_name=n, exp_old=i, exp_new=(i + 1)) setattr(r, n, i + 1) for n in other: c.set(exp_object=r, exp_name=n, exp_old=i, exp_new=(i + 1)) setattr(r, n, i + 1) self.assertEqual(c.calls, 3 * nn * nh) self.multi_register(c, handlers, pattern, remove=True) for i in range(3): for n in names: setattr(r, n, i + 1) for n in other: setattr(r, n, i + 1) self.assertEqual(c.calls, 3 * nn * nh) def multi_register(self, object, handlers, pattern, remove=False): for handler in handlers: object.on_trait_change(handler, pattern, remove=remove) def build_list(self): l1 = Link(value=00) l2 = Link(value=10) l3 = Link(value=20) l4 = Link(value=30) l1.set(next=l2, prev=l4) l2.set(next=l3, prev=l1) l3.set(next=l4, prev=l2) l4.set(next=l1, prev=l3) return l1 def new_link(self, lt, cur, value): link = Link(value=value, next=cur.next, prev=cur) cur.next.prev = link lt.set(exp_object=cur, exp_name='next', exp_old=cur.next, exp_new=link) cur.next = link return link # Run the unit tests (if invoked from the command line): if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_int_range_long.py000066400000000000000000000023361233213561600221020ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Int, Range, Long, TraitError class A(HasTraits): i = Int l = Long r = Range(2L, 9223372036854775807L) class TraitIntRangeLong(unittest.TestCase): def test_int(self): "Test to make sure it is legal to set an Int trait to a long value" a = A() a.i = 1 a.i = 10L def test_long(self): "Test if it is legal to set a Long trait to an int value" a = A() a.l = 10 a.l = 100L def test_range(self): "Test a range trait with longs being set to an int value" a = A() a.r = 256 a.r = 20L self.assertRaises(TraitError, a.set, r=1L) self.assertRaises(TraitError, a.set, r=9223372036854775808L) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_integer.py000066400000000000000000000063761233213561600205620ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ """ Tests for the Int trait type. """ from __future__ import absolute_import import decimal import sys try: import numpy except ImportError: numpy_available = False else: numpy_available = True from traits.testing.unittest_tools import unittest from ..api import HasTraits, Int, TraitError class A(HasTraits): integral = Int class IntegerLike(object): def __index__(self): return 42 class Truncatable(object): def __int__(self): return 42 class TestInt(unittest.TestCase): def test_default(self): a = A() self.assertEqual(a.integral, 0) self.assertIs(type(a.integral), int) def test_accepts_int(self): a = A() a.integral = 23 self.assertEqual(a.integral, 23) self.assertIs(type(a.integral), int) def test_accepts_small_long(self): a = A() a.integral = 23L # Check that type is stored as int where possible. self.assertEqual(a.integral, 23) self.assertIs(type(a.integral), int) def test_accepts_large_long(self): a = A() a.integral = long(sys.maxint) self.assertEqual(a.integral, sys.maxint) self.assertIs(type(a.integral), int) a.integral = sys.maxint + 1 self.assertEqual(a.integral, sys.maxint + 1) self.assertIs(type(a.integral), long) def test_accepts_bool(self): a = A() a.integral = True self.assertEqual(a.integral, 1) self.assertIs(type(a.integral), int) def test_respects_dunder_index(self): a = A() a.integral = IntegerLike() self.assertEqual(a.integral, 42) self.assertIs(type(a.integral), int) def test_rejects_dunder_int(self): a = A() with self.assertRaises(TraitError): a.integral = Truncatable() def test_rejects_floating_point_types(self): a = A() with self.assertRaises(TraitError): a.integral = 23.0 with self.assertRaises(TraitError): a.integral = decimal.Decimal(23) def test_rejects_string(self): a = A() with self.assertRaises(TraitError): a.integral = "23" @unittest.skipUnless(numpy_available, "numpy not available") def test_numpy_types(self): a = A() a.integral = numpy.int32(23) self.assertEqual(a.integral, 23) self.assertIn(type(a.integral), (int, long)) a.integral = numpy.uint64(2**63 + 2) self.assertEqual(a.integral, 2**63 + 2) self.assertIs(type(a.integral), long) with self.assertRaises(TraitError): a.integral = numpy.float32(4.0) with self.assertRaises(TraitError): a.integral = numpy.float64(4.0) traits-4.5.0/traits/tests/test_interface_checker.py000066400000000000000000000240741233213561600225440ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt """ Tests to help find out if we can do type-safe casting. """ from __future__ import absolute_import # Standard library imports. from traits.testing.unittest_tools import unittest # Enthought library imports. from traits.adaptation.api import reset_global_adaptation_manager from traits.api import Adapter, HasTraits, Instance, Int, Interface, \ provides, register_factory # Local imports. from traits.interface_checker import InterfaceError, check_implements # Make sure implicit interface checking is turned off, so that we can make the # checks explicitly: from traits import has_traits has_traits.CHECK_INTERFACES = 0 class InterfaceCheckerTestCase(unittest.TestCase): """ Tests to help find out if we can do type-safe casting. """ ########################################################################### # 'TestCase' interface. ########################################################################### def setUp(self): """ Prepares the test fixture before each test method is called. """ reset_global_adaptation_manager() return def tearDown(self): """ Called immediately after each test method has been called. """ return ########################################################################### # Tests. ########################################################################### def test_non_traits_class(self): """ non-traits class """ class IFoo(Interface): def foo(self): pass # A class that *does* implement the interface. @provides(IFoo) class Foo(object): def foo(self): pass # The checker will raise an exception if the class does not implement # the interface. check_implements(Foo, IFoo, 2) return def test_single_interface(self): """ single interface """ class IFoo(Interface): x = Int # A class that *does* implement the interface. @provides(IFoo) class Foo(HasTraits): x = Int # The checker will raise an exception if the class does not implement # the interface. check_implements(Foo, IFoo, 2) return def test_single_interface_with_invalid_method_signature(self): """ single interface with invalid method signature """ class IFoo(Interface): def foo(self): pass # A class that does *not* implement the interface. @provides(IFoo) class Foo(HasTraits): # Extra argument! def foo(self, x): pass self.failUnlessRaises(InterfaceError, check_implements, Foo, IFoo, 2) return def test_single_interface_with_missing_trait(self): """ single interface with missing trait """ class IFoo(Interface): x = Int # A class that does *not* implement the interface. @provides(IFoo) class Foo(HasTraits): pass self.failUnlessRaises(InterfaceError, check_implements, Foo, IFoo, 2) return def test_single_interface_with_missing_method(self): """ single interface with missing method """ class IFoo(Interface): def method(self): pass # A class that does *not* implement the interface. @provides(IFoo) class Foo(HasTraits): pass self.failUnlessRaises(InterfaceError, check_implements, Foo, IFoo, 2) return def test_multiple_interfaces(self): """ multiple interfaces """ class IFoo(Interface): x = Int class IBar(Interface): y = Int class IBaz(Interface): z = Int # A class that *does* implement the interface. @provides(IFoo, IBar, IBaz) class Foo(HasTraits): x = Int y = Int z = Int # The checker will raise an exception if the class does not implement # the interface. check_implements(Foo, [IFoo, IBar, IBaz], 2) return def test_multiple_interfaces_with_invalid_method_signature(self): """ multiple interfaces with invalid method signature """ class IFoo(Interface): def foo(self): pass class IBar(Interface): def bar(self): pass class IBaz(Interface): def baz(self): pass # A class that does *not* implement the interface. @provides(IFoo, IBar, IBaz) class Foo(HasTraits): def foo(self): pass def bar(self): pass # Extra argument! def baz(self, x): pass self.failUnlessRaises( InterfaceError, check_implements, Foo, [IFoo, IBar, IBaz], 2 ) return def test_multiple_interfaces_with_missing_trait(self): """ multiple interfaces with missing trait """ class IFoo(Interface): x = Int class IBar(Interface): y = Int class IBaz(Interface): z = Int # A class that does *not* implement the interface. @provides(IFoo, IBar, IBaz) class Foo(HasTraits): x = Int y = Int self.failUnlessRaises( InterfaceError, check_implements, Foo, [IFoo, IBar, IBaz], 2 ) return def test_multiple_interfaces_with_missing_method(self): """ multiple interfaces with missing method """ class IFoo(Interface): def foo(self): pass class IBar(Interface): def bar(self): pass class IBaz(Interface): def baz(self): pass # A class that does *not* implement the interface. @provides(IFoo, IBar, IBaz) class Foo(HasTraits): def foo(self): pass def bar(self): pass self.failUnlessRaises( InterfaceError, check_implements, Foo, [IFoo, IBar, IBaz], 2 ) return def test_inherited_interfaces(self): """ inherited interfaces """ class IFoo(Interface): x = Int class IBar(IFoo): y = Int class IBaz(IBar): z = Int # A class that *does* implement the interface. @provides(IBaz) class Foo(HasTraits): x = Int y = Int z = Int # The checker will raise an exception if the class does not implement # the interface. check_implements(Foo, IBaz, 2) return def test_inherited_interfaces_with_invalid_method_signature(self): """ inherited with invalid method signature """ class IFoo(Interface): def foo(self): pass class IBar(IFoo): def bar(self): pass class IBaz(IBar): def baz(self): pass # A class that does *not* implement the interface. @provides(IBaz) class Foo(HasTraits): def foo(self): pass def bar(self): pass # Extra argument! def baz(self, x): pass self.failUnlessRaises(InterfaceError, check_implements, Foo, IBaz, 2) return def test_inherited_interfaces_with_missing_trait(self): """ inherited interfaces with missing trait """ class IFoo(Interface): x = Int class IBar(IFoo): y = Int class IBaz(IBar): z = Int # A class that does *not* implement the interface. @provides(IBaz) class Foo(HasTraits): x = Int y = Int self.failUnlessRaises(InterfaceError, check_implements, Foo, IBaz, 2) return def test_inherited_interfaces_with_missing_method(self): """ inherited interfaces with missing method """ class IFoo(Interface): def foo(self): pass class IBar(IFoo): def bar(self): pass class IBaz(IBar): def baz(self): pass # A class that does *not* implement the interface. @provides(IBaz) class Foo(HasTraits): def foo(self): pass def bar(self): pass self.failUnlessRaises(InterfaceError, check_implements, Foo, IBaz, 2) return # Make sure interfaces and adaptation etc still work with the 'HasTraits' # version of 'Interface'! def test_instance(self): """ instance """ class IFoo(Interface): pass @provides(IFoo) class Foo(HasTraits): pass class Bar(HasTraits): foo = Instance(IFoo) b = Bar(foo=Foo()) return def test_callable(self): """ callable """ class IFoo(Interface): pass @provides(IFoo) class Foo(HasTraits): pass f = Foo() self.assertEqual(f, IFoo(f)) return def test_adaptation(self): """ adaptation """ class IFoo(Interface): pass class Foo(HasTraits): pass @provides(IFoo) class FooToIFooAdapter(Adapter): pass register_factory(FooToIFooAdapter, Foo, IFoo) f = Foo() # Make sure adaptation works. i_foo = IFoo(f) self.assertNotEqual(None, i_foo) self.assertEqual(FooToIFooAdapter, type(i_foo)) return # Entry point for stand-alone testing. if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_interfaces.py000066400000000000000000000215301233213561600212350ustar00rootroot00000000000000# Unit test case for testing interfaces and adaptation. # # Written by: David C. Morrill # # Date: 4/10/2007 # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt """ Unit test case for testing interfaces and adaptation. """ from __future__ import absolute_import from traits.testing.unittest_tools import unittest from traits.api import (HasTraits, Adapter, AdaptsTo, Instance, Int, Interface, List, provides, register_factory, Supports, TraitError) from traits.adaptation.api import reset_global_adaptation_manager class IFoo(Interface): def get_foo(self): """ Returns the current foo. """ class IFooPlus(IFoo): def get_foo_plus(self): """ Returns even more foo. """ class IAverage(Interface): def get_average(self): """ Returns the average value for the object. """ class IList(Interface): def get_list(self): """ Returns the list value for the object. """ class Sample(HasTraits): s1 = Int(1, sample=True) s2 = Int(2, sample=True) s3 = Int(3, sample=True) i1 = Int(4) i2 = Int(5) i3 = Int(6) @provides(IList) class SampleList(HasTraits): """SampleList docstring.""" data = List(Int, [10, 20, 30]) def get_list(self): return self.data @provides(IList, IAverage) class SampleAverage(HasTraits): data = List(Int, [100, 200, 300]) def get_list(self): return self.data def get_average(self): value = self.get_list() if len(value) == 0: return 0.0 average = 0.0 for item in value: average += item return (average / len(value)) class SampleBad(HasTraits): pass class TraitsHolder(HasTraits): a_no = Instance(IAverage, adapt='no') a_yes = Instance(IAverage, adapt='yes') a_default = Instance(IAverage, adapt='default') list_adapted_to = Supports(IList) foo_adapted_to = Supports(IFoo) foo_plus_adapted_to = Supports(IFooPlus) list_adapts_to = AdaptsTo(IList) foo_adapts_to = AdaptsTo(IFoo) foo_plus_adapts_to = AdaptsTo(IFooPlus) class SampleListAdapter(Adapter): def get_list(self): obj = self.adaptee return [getattr(obj, name) for name in obj.trait_names(sample=True)] class ListAverageAdapter(Adapter): def get_average(self): value = self.adaptee.get_list() if len(value) == 0: return 0.0 average = 0.0 for item in value: average += item return (average / len(value)) class SampleFooAdapter(HasTraits): object = Instance(Sample) def __init__(self, object): self.object = object def get_foo(self): object = self.object return (object.s1 + object.s2 + object.s3) class FooPlusAdapter(object): def __init__(self, obj): self.obj = obj def get_foo(self): return self.obj.get_foo() def get_foo_plus(self): return (self.obj.get_foo() + 1) class InterfacesTest(unittest.TestCase): #### 'TestCase' protocol ################################################## def setUp(self): reset_global_adaptation_manager() # Register adapters. register_factory(SampleListAdapter, Sample, IList) register_factory(ListAverageAdapter, IList, IAverage) register_factory(SampleFooAdapter, Sample, IFoo) register_factory(FooPlusAdapter, IFoo, IFooPlus) #### Tests ################################################################ def test_provides_none(self): @provides() class Test(HasTraits): pass def test_provides_one(self): @provides(IFoo) class Test(HasTraits): pass def test_provides_multi(self): @provides(IFoo, IAverage, IList) class Test (HasTraits): pass def test_provides_extended(self): """ Ensure that subclasses of Interfaces imply the superinterface. """ @provides(IFooPlus) class Test(HasTraits): pass ta = TraitsHolder() ta.foo_adapted_to = Test() def test_provides_bad(self): with self.assertRaises(Exception): @provides(Sample) class Test(HasTraits): pass def test_instance_adapt_no(self): ta = TraitsHolder() # Verify that SampleAverage() does not raise an error (it is an # instance of the IAverage interface). try: ta.a_no = SampleAverage() except TraitError: self.fail("Setting instance of interface should not require " "adaptation") # These are not instances of the IAverage interface, and therefore # cannot be set to the trait. self.assertRaises(TraitError, ta.set, a_no=SampleList()) self.assertRaises(TraitError, ta.set, a_no=Sample()) self.assertRaises(TraitError, ta.set, a_no=SampleBad()) def test_instance_adapt_yes(self): ta = TraitsHolder() ta.a_yes = object = SampleAverage() self.assertEqual(ta.a_yes.get_average(), 200.0) self.assertIsInstance(ta.a_yes, SampleAverage) self.assertFalse(hasattr(ta, 'a_yes_')) ta.a_yes = object = SampleList() self.assertEqual(ta.a_yes.get_average(), 20.0) self.assertIsInstance(ta.a_yes, ListAverageAdapter) self.assertFalse(hasattr(ta, 'a_yes_')) ta.a_yes = object = Sample() self.assertEqual(ta.a_yes.get_average(), 2.0) self.assertIsInstance(ta.a_yes, ListAverageAdapter) self.assertFalse(hasattr(ta, 'a_yes_')) self.assertRaises(TraitError, ta.set, a_yes=SampleBad()) def test_instance_adapt_default(self): ta = TraitsHolder() ta.a_default = object = SampleAverage() self.assertEqual(ta.a_default.get_average(), 200.0) self.assertIsInstance(ta.a_default, SampleAverage) self.assertFalse(hasattr(ta, 'a_default_')) ta.a_default = object = SampleList() self.assertEqual(ta.a_default.get_average(), 20.0) self.assertIsInstance(ta.a_default, ListAverageAdapter) self.assertFalse(hasattr(ta, 'a_default_')) ta.a_default = object = Sample() self.assertEqual(ta.a_default.get_average(), 2.0) self.assertIsInstance(ta.a_default, ListAverageAdapter) self.assertFalse(hasattr(ta, 'a_default_')) ta.a_default = object = SampleBad() self.assertEqual(ta.a_default, None) self.assertFalse(hasattr(ta, 'a_default_')) def test_adapted_to(self): ta = TraitsHolder() ta.list_adapted_to = object = Sample() result = ta.list_adapted_to.get_list() self.assertEqual(len(result), 3) for n in [1, 2, 3]: self.assertIn(n, result) self.assertIsInstance(ta.list_adapted_to, SampleListAdapter) self.assertEqual(ta.list_adapted_to_, object) ta.foo_adapted_to = object = Sample() self.assertEqual(ta.foo_adapted_to.get_foo(), 6) self.assertIsInstance(ta.foo_adapted_to, SampleFooAdapter) self.assertEqual(ta.foo_adapted_to_, object) ta.foo_plus_adapted_to = object = Sample(s1=5, s2=10, s3=15) self.assertEqual(ta.foo_plus_adapted_to.get_foo(), 30) self.assertEqual(ta.foo_plus_adapted_to.get_foo_plus(), 31) self.assertIsInstance(ta.foo_plus_adapted_to, FooPlusAdapter) self.assertEqual(ta.foo_plus_adapted_to_, object) def test_adapts_to(self): ta = TraitsHolder() ta.list_adapts_to = object = Sample() self.assertEqual(ta.list_adapts_to, object) result = ta.list_adapts_to_.get_list() self.assertEqual(len(result), 3) for n in [1, 2, 3]: self.assertIn(n, result) self.assertIsInstance(ta.list_adapts_to_, SampleListAdapter) ta.foo_adapts_to = object = Sample() self.assertEqual(ta.foo_adapts_to, object) self.assertEqual(ta.foo_adapts_to_.get_foo(), 6) self.assertIsInstance(ta.foo_adapts_to_, SampleFooAdapter) ta.foo_plus_adapts_to = object = Sample(s1=5, s2=10, s3=15) self.assertEqual(ta.foo_plus_adapts_to, object) self.assertEqual(ta.foo_plus_adapts_to_.get_foo(), 30) self.assertEqual(ta.foo_plus_adapts_to_.get_foo_plus(), 31) self.assertIsInstance(ta.foo_plus_adapts_to_, FooPlusAdapter) def test_decorated_class_name_and_docstring(self): self.assertEqual(SampleList.__name__, 'SampleList') self.assertEqual(SampleList.__doc__, "SampleList docstring.") # Run the unit tests (if invoked from the command line): if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_interfaces_with_implements.py000066400000000000000000000234571233213561600245370ustar00rootroot00000000000000# Unit test case for testing interfaces and adaptation. # # Written by: David C. Morrill # # Date: 4/10/2007 # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt """ Unit test case for testing interfaces and adaptation. This file is equivalent to test_interfaces.py, only using the deprecated 'implements' and 'adapts' functions. """ from __future__ import absolute_import import sys from traits.testing.unittest_tools import unittest from traits.adaptation.api import get_global_adaptation_manager, \ set_global_adaptation_manager from traits.api import HasTraits, Adapter, adapts, AdaptsTo, \ implements, Instance, Int, Interface, List, Supports, TraitError # Using the deprecated class advisor "adapts", the registration of adapters # occurs globally at class definition time. Since other tests will reset the # global adaptation manager, the registration will be lost. # That's why we save a reference to the current global adaptation manager. _adaptation_manager = get_global_adaptation_manager() #------------------------------------------------------------------------------ # Test 'Interface' definitions: #------------------------------------------------------------------------------ # 'adapts' and 'implements' are not supported in Python 3. if sys.version_info < (3,): class IFoo(Interface): def get_foo(self): """ Returns the current foo. """ class IFooPlus(IFoo): def get_foo_plus(self): """ Returns even more foo. """ class IAverage(Interface): def get_average(self): """ Returns the average value for the object. """ class IList(Interface): def get_list(self): """ Returns the list value for the object. """ class Sample(HasTraits): s1 = Int(1, sample=True) s2 = Int(2, sample=True) s3 = Int(3, sample=True) i1 = Int(4) i2 = Int(5) i3 = Int(6) class SampleList(HasTraits): implements(IList) data = List(Int, [10, 20, 30]) def get_list(self): return self.data class SampleAverage(HasTraits): implements(IList, IAverage) data = List(Int, [100, 200, 300]) def get_list(self): return self.data def get_average(self): value = self.get_list() if len(value) == 0: return 0.0 average = 0.0 for item in value: average += item return (average / len(value)) class SampleBad(HasTraits): pass class TraitsHolder(HasTraits): a_no = Instance(IAverage, adapt='no') a_yes = Instance(IAverage, adapt='yes') a_default = Instance(IAverage, adapt='default') list_adapted_to = Supports(IList) foo_adapted_to = Supports(IFoo) foo_plus_adapted_to = Supports(IFooPlus) list_adapts_to = AdaptsTo(IList) foo_adapts_to = AdaptsTo(IFoo) foo_plus_adapts_to = AdaptsTo(IFooPlus) class SampleListAdapter(Adapter): adapts(Sample, IList) def get_list(self): obj = self.adaptee return [getattr(obj, name) for name in obj.trait_names(sample=True)] class ListAverageAdapter(Adapter): adapts(IList, IAverage) def get_average(self): value = self.adaptee.get_list() if len(value) == 0: return 0.0 average = 0.0 for item in value: average += item return (average / len(value)) class SampleFooAdapter(HasTraits): adapts(Sample, IFoo) object = Instance(Sample) def __init__(self, object): self.object = object def get_foo(self): object = self.object return (object.s1 + object.s2 + object.s3) class FooPlusAdapter(object): def __init__(self, obj): self.obj = obj def get_foo(self): return self.obj.get_foo() def get_foo_plus(self): return (self.obj.get_foo() + 1) adapts(FooPlusAdapter, IFoo, IFooPlus) @unittest.skipUnless(sys.version_info < (3,), "The 'adapts' and 'implements' class advisors " "are not supported in Python 3.") class InterfacesTest(unittest.TestCase): #### 'TestCase' protocol ################################################## def setUp(self): set_global_adaptation_manager(_adaptation_manager) #### Tests ################################################################ def test_implements_none(self): class Test(HasTraits): implements() def test_implements_one(self): class Test(HasTraits): implements(IFoo) def test_implements_multi(self): class Test(HasTraits): implements(IFoo, IAverage, IList) def test_implements_extended(self): """ Ensure that subclasses of Interfaces imply the superinterface. """ class Test(HasTraits): implements(IFooPlus) ta = TraitsHolder() ta.foo_adapted_to = Test() def test_implements_bad(self): self.assertRaises(TraitError, self.implements_bad) def test_instance_adapt_no(self): ta = TraitsHolder() # Verify that SampleAverage() does not raise an error (it is an # instance of the IAverage interface). try: ta.a_no = SampleAverage() except TraitError: self.fail("Setting instance of interface should not require " "adaptation") # These are not instances of the IAverage interface, and therefore # cannot be set to the trait. self.assertRaises(TraitError, ta.set, a_no=SampleList()) self.assertRaises(TraitError, ta.set, a_no=Sample()) self.assertRaises(TraitError, ta.set, a_no=SampleBad()) def test_instance_adapt_yes(self): ta = TraitsHolder() ta.a_yes = object = SampleAverage() self.assertEqual(ta.a_yes.get_average(), 200.0) self.assertIsInstance(ta.a_yes, SampleAverage) self.assertFalse(hasattr(ta, 'a_yes_')) ta.a_yes = object = SampleList() self.assertEqual(ta.a_yes.get_average(), 20.0) self.assertIsInstance(ta.a_yes, ListAverageAdapter) self.assertFalse(hasattr(ta, 'a_yes_')) ta.a_yes = object = Sample() self.assertEqual(ta.a_yes.get_average(), 2.0) self.assertIsInstance(ta.a_yes, ListAverageAdapter) self.assertFalse(hasattr(ta, 'a_yes_')) self.assertRaises(TraitError, ta.set, a_yes=SampleBad()) def test_instance_adapt_default(self): ta = TraitsHolder() ta.a_default = object = SampleAverage() self.assertEqual(ta.a_default.get_average(), 200.0) self.assertIsInstance(ta.a_default, SampleAverage) self.assertFalse(hasattr(ta, 'a_default_')) ta.a_default = object = SampleList() self.assertEqual(ta.a_default.get_average(), 20.0) self.assertIsInstance(ta.a_default, ListAverageAdapter) self.assertFalse(hasattr(ta, 'a_default_')) ta.a_default = object = Sample() self.assertEqual(ta.a_default.get_average(), 2.0) self.assertIsInstance(ta.a_default, ListAverageAdapter) self.assertFalse(hasattr(ta, 'a_default_')) ta.a_default = object = SampleBad() self.assertEqual(ta.a_default, None) self.assertFalse(hasattr(ta, 'a_default_')) def test_adapted_to(self): ta = TraitsHolder() ta.list_adapted_to = object = Sample() result = ta.list_adapted_to.get_list() self.assertEqual(len(result), 3) for n in [1, 2, 3]: self.assertIn(n, result) self.assertIsInstance(ta.list_adapted_to, SampleListAdapter) self.assertEqual(ta.list_adapted_to_, object) ta.foo_adapted_to = object = Sample() self.assertEqual(ta.foo_adapted_to.get_foo(), 6) self.assertIsInstance(ta.foo_adapted_to, SampleFooAdapter) self.assertEqual(ta.foo_adapted_to_, object) ta.foo_plus_adapted_to = object = Sample(s1=5, s2=10, s3=15) self.assertEqual(ta.foo_plus_adapted_to.get_foo(), 30) self.assertEqual(ta.foo_plus_adapted_to.get_foo_plus(), 31) self.assertIsInstance(ta.foo_plus_adapted_to, FooPlusAdapter) self.assertEqual(ta.foo_plus_adapted_to_, object) def test_adapts_to(self): ta = TraitsHolder() ta.list_adapts_to = object = Sample() self.assertEqual(ta.list_adapts_to, object) result = ta.list_adapts_to_.get_list() self.assertEqual(len(result), 3) for n in [1, 2, 3]: self.assertIn(n, result) self.assertIsInstance(ta.list_adapts_to_, SampleListAdapter) ta.foo_adapts_to = object = Sample() self.assertEqual(ta.foo_adapts_to, object) self.assertEqual(ta.foo_adapts_to_.get_foo(), 6) self.assertIsInstance(ta.foo_adapts_to_, SampleFooAdapter) ta.foo_plus_adapts_to = object = Sample(s1=5, s2=10, s3=15) self.assertEqual(ta.foo_plus_adapts_to, object) self.assertEqual(ta.foo_plus_adapts_to_.get_foo(), 30) self.assertEqual(ta.foo_plus_adapts_to_.get_foo_plus(), 31) self.assertIsInstance(ta.foo_plus_adapts_to_, FooPlusAdapter) #-- Helper Methods -------------------------------------------------------- def implements_bad(self): class Test(HasTraits): implements(Sample) # Run the unit tests (if invoked from the command line): if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_keyword_args.py000066400000000000000000000015021233213561600216070ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt from __future__ import absolute_import from ..api import HasTraits, Instance, Int from traits.testing.unittest_tools import unittest class Bar(HasTraits): b = Int(3) class Foo(HasTraits): bar = Instance(Bar) class KeyWordArgsTest(unittest.TestCase): def test_using_kw(self): bar = Bar(b=5) foo = Foo(bar=bar) self.assertEqual(foo.bar.b, 5) def test_not_using_kw(self): foo = Foo() self.assertEqual(foo.bar, None) traits-4.5.0/traits/tests/test_list.py000066400000000000000000000157161233213561600200760ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt from __future__ import absolute_import import sys from traits.testing.unittest_tools import unittest from ..api import CList, HasTraits, Instance, Int, List, Str, TraitError class Foo(HasTraits): l = List(Str) class Bar(HasTraits): name = Str class Baz(HasTraits): bars = List(Bar) class BazRef(HasTraits): bars = List(Bar, copy='ref') class DeepBaz(HasTraits): baz = Instance(Baz) class DeepBazBazRef(HasTraits): baz = Instance(BazRef) class CFoo(HasTraits): ints = CList(Int) strs = CList(Str) class ListTestCase(unittest.TestCase): def test_initialized(self): f = Foo() self.failIfEqual(f.l, None) self.failUnlessEqual(len(f.l), 0) return def test_initializer(self): f = Foo(l=['a', 'list']) self.failIfEqual(f.l, None) self.failUnlessEqual(f.l, ['a', 'list']) return def test_type_check(self): f = Foo() f.l.append('string') self.failUnlessRaises(TraitError, f.l.append, 123.456) return def test_append(self): f = Foo() f.l.append('bar') self.failUnlessEqual(f.l, ['bar']) return def test_remove(self): f = Foo() f.l.append('bar') f.l.remove('bar') self.failUnlessEqual(f.l, []) return def test_slice(self): f = Foo(l=['zero', 'one', 'two', 'three']) self.failUnlessEqual(f.l[0], 'zero') self.failUnlessEqual(f.l[:0], []) self.failUnlessEqual(f.l[:1], ['zero']) self.failUnlessEqual(f.l[0:1], ['zero']) self.failUnlessEqual(f.l[1:], ['one', 'two', 'three']) self.failUnlessEqual(f.l[-1], 'three') self.failUnlessEqual(f.l[-2], 'two') self.failUnlessEqual(f.l[:-1], ['zero', 'one', 'two']) return def test_retrieve_reference(self): f = Foo(l=['initial', 'value']) l = f.l self.failUnless(l is f.l) # no copy on change behavior, l is always a reference l.append('change') self.failUnlessEqual(f.l, ['initial', 'value', 'change']) f.l.append('more change') self.failUnlessEqual(l, ['initial', 'value', 'change', 'more change']) return def test_assignment_makes_copy(self): f = Foo(l=['initial', 'value']) l = ['new'] f.l = l # same content self.failUnlessEqual(l, f.l) # different objects self.failIf(l is f.l) # which means behaviorally... l.append('l change') self.failIf('l change' in f.l) f.l.append('f.l change') self.failIf('f.l change' in l) return def test_should_not_allow_none(self): f = Foo(l=['initial', 'value']) try: f.l = None self.fail('None assigned to List trait.') except TraitError: pass def test_clone(self): baz = Baz() for name in ['a', 'b', 'c', 'd']: baz.bars.append(Bar(name=name)) # Clone will clone baz, the bars list, and the objects in the list baz_copy = baz.clone_traits() self.failIf(baz_copy is baz) self.failIf(baz_copy.bars is baz.bars) self.failUnlessEqual(len(baz_copy.bars), len(baz.bars)) for bar in baz.bars: self.failIf(bar in baz_copy.bars) baz_bar_names = [bar.name for bar in baz.bars] baz_copy_bar_names = [bar.name for bar in baz_copy.bars] baz_bar_names.sort() baz_copy_bar_names.sort() self.failUnlessEqual(baz_copy_bar_names, baz_bar_names) return def test_clone_ref(self): baz = BazRef() for name in ['a', 'b', 'c', 'd']: baz.bars.append(Bar(name=name)) # Clone will clone baz, the bars list, but the objects in the list # will not be cloned because the copy metatrait of the List is 'ref' baz_copy = baz.clone_traits() self.failIf(baz_copy is baz) self.failIf(baz_copy.bars is baz.bars) self.failUnlessEqual(len(baz_copy.bars), len(baz.bars)) for bar in baz.bars: self.failUnless(bar in baz_copy.bars) return def test_clone_deep_baz(self): baz = Baz() for name in ['a', 'b', 'c', 'd']: baz.bars.append(Bar(name=name)) deep_baz = DeepBaz(baz=baz) # Clone will clone deep_baz, deep_baz.baz, the bars list, # and the objects in the list deep_baz_copy = deep_baz.clone_traits() self.failIf(deep_baz_copy is deep_baz) self.failIf(deep_baz_copy.baz is deep_baz.baz) baz_copy = deep_baz_copy.baz self.failIf(baz_copy is baz) self.failIf(baz_copy.bars is baz.bars) self.failUnlessEqual(len(baz_copy.bars), len(baz.bars)) for bar in baz.bars: self.failIf(bar in baz_copy.bars) baz_bar_names = [bar.name for bar in baz.bars] baz_copy_bar_names = [bar.name for bar in baz_copy.bars] baz_bar_names.sort() baz_copy_bar_names.sort() self.failUnlessEqual(baz_copy_bar_names, baz_bar_names) return def test_clone_deep_baz_ref(self): baz = BazRef() for name in ['a', 'b', 'c', 'd']: baz.bars.append(Bar(name=name)) deep_baz = DeepBazBazRef(baz=baz) deep_baz_copy = deep_baz.clone_traits() self.failIf(deep_baz_copy is deep_baz) self.failIf(deep_baz_copy.baz is deep_baz.baz) baz_copy = deep_baz_copy.baz self.failIf(baz_copy is baz) self.failIf(baz_copy.bars is baz.bars) self.failUnlessEqual(len(baz_copy.bars), len(baz.bars)) for bar in baz.bars: self.failUnless(bar in baz_copy.bars) return def test_coercion(self): f = CFoo() # Test coercion from basic built-in types f.ints = [1, 2, 3] desired = [1, 2, 3] self.failUnlessEqual(f.ints, desired) f.ints = (1, 2, 3) self.failUnlessEqual(f.ints, desired) f.strs = ("abc", "def", "ghi") self.failUnlessEqual(f.strs, ["abc", "def", "ghi"]) f.strs = "abcdef" self.failUnlessEqual(f.strs, list("abcdef")) try: from numpy import array except ImportError: pass else: if sys.version_info[0] < 3: f.ints = array([1, 2, 3]) self.failUnlessEqual(f.ints, [1, 2, 3]) else: # These would fail due to np.int_ being an invalid vallue # for the Int-trait. pass f.strs = array(("abc", "def", "ghi")) self.failUnlessEqual(f.strs, ["abc", "def", "ghi"]) traits-4.5.0/traits/tests/test_listeners.py000066400000000000000000000144621233213561600211300ustar00rootroot00000000000000# Test the 'add_trait_listener', 'remove_trait_listener' interface to # the HasTraits class. # # Written by: David C. Morrill # # Date: 09/07/2005 # # (c) Copyright 2005 by Enthought, Inc. # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # License included in /LICENSE.txt and may be redistributed only under the # conditions described in the aforementioned license. The license is also # available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! from __future__ import absolute_import import contextlib import cStringIO import sys import threading import time from traits.testing.unittest_tools import unittest from ..api import HasTraits, Str, Int, Float, Any, Event from ..api import push_exception_handler, pop_exception_handler @contextlib.contextmanager def captured_stderr(): """ Return a context manager that directs all stderr output to a string. """ new_stderr = cStringIO.StringIO() original_stderr = sys.stderr sys.stderr = new_stderr try: yield new_stderr finally: sys.stderr = original_stderr class GenerateEvents(HasTraits): name = Str age = Int weight = Float events = {} # dict of events class ListenEvents(HasTraits): # 'GenerateEvents' event interface: # the events are stored in the dict 'events' def _name_changed(self, object, name, old, new): events["_name_changed"] = (name, old, new) def _age_changed(self, object, name, old, new): events["_age_changed"] = (name, old, new) def _weight_changed(self, object, name, old, new): events["_weight_changed"] = (name, old, new) def alt_name_changed(self, object, name, old, new): events["alt_name_changed"] = (name, old, new) def alt_weight_changed(self, object, name, old, new): events["alt_weight_changed"] = (name, old, new) class Test_Listeners(unittest.TestCase): def test(self): global events # FIXME: comparing floats ge = GenerateEvents() le = ListenEvents() # Starting test: No Listeners ge.set(name='Joe', age=22, weight=152.0) # Adding default listener ge.add_trait_listener(le) events = {} ge.set(name='Mike', age=34, weight=178.0) self.assertEqual(events, { '_age_changed': ('age', 22, 34), '_weight_changed': ('weight', 152.0, 178.0), '_name_changed': ('name', 'Joe', 'Mike'), }) # Adding alternate listener ge.add_trait_listener(le, 'alt') events = {} ge.set(name='Gertrude', age=39, weight=108.0) self.assertEqual(events, { '_age_changed': ('age', 34, 39), '_name_changed': ('name', 'Mike', 'Gertrude'), '_weight_changed': ('weight', 178.0, 108.0), 'alt_name_changed': ('name', 'Mike', 'Gertrude'), 'alt_weight_changed': ('weight', 178.0, 108.0), }) # Removing default listener ge.remove_trait_listener(le) events = {} ge.set(name='Sally', age=46, weight=118.0) self.assertEqual(events, { 'alt_name_changed': ('name', 'Gertrude', 'Sally'), 'alt_weight_changed': ('weight', 108.0, 118.0), }) # Removing alternate listener ge.remove_trait_listener(le, 'alt') events = {} ge.set(name='Ralph', age=29, weight=198.0) self.assertEqual(events, {}) class A(HasTraits): exception = Any foo = Event def foo_changed_handler(self): pass def foo_writer(a, stop_event): while not stop_event.is_set(): try: a.foo = True except Exception as e: a.exception = e class TestRaceCondition(unittest.TestCase): def setUp(self): push_exception_handler( handler=lambda *args: None, reraise_exceptions=True, main=True, ) def tearDown(self): pop_exception_handler() def test_listener_thread_safety(self): # Regression test for GitHub issue #56 a = A() stop_event = threading.Event() t = threading.Thread(target=foo_writer, args=(a, stop_event)) t.start() for _ in xrange(100): a.on_trait_change(a.foo_changed_handler, 'foo') time.sleep(0.0001) # encourage thread-switch a.on_trait_change(a.foo_changed_handler, 'foo', remove=True) stop_event.set() t.join() self.assertTrue(a.exception is None) def test_listener_deleted_race(self): # Regression test for exception that occurred when the listener_deleted # method is called after the dispose method on a # TraitsChangeNotifyWrapper. class SlowListener(HasTraits): def handle_age_change(self): time.sleep(1.0) def worker_thread(event_source, start_event): # Wait until the listener is set up on the main thread, then fire # the event. start_event.wait() event_source.age = 11 def main_thread(event_source, start_event): listener = SlowListener() event_source.on_trait_change(listener.handle_age_change, 'age') start_event.set() # Allow time to make sure that we're in the middle of handling an # event. time.sleep(0.5) event_source.on_trait_change( listener.handle_age_change, 'age', remove=True) # Previously, a ValueError would be raised on the worker thread # during (normal refcount-based) garbage collection. That # ValueError is ignored by the Python system, so the only # visible effect is the output to stderr. with captured_stderr() as s: start_event = threading.Event() event_source = GenerateEvents(age=10) t = threading.Thread( target=worker_thread, args=(event_source, start_event), ) t.start() main_thread(event_source, start_event) t.join() self.assertNotIn('Exception', s.getvalue()) # Run the unit tests (if invoked from the command line): if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_new_notifiers.py000066400000000000000000000027151233213561600217710ustar00rootroot00000000000000""" Tests for dynamic notifiers with `dispatch='new'`. Dynamic notifiers created with the `dispatch='new'` option dispatch event notifications on a new thread. The class handling the dispatch, `NewTraitChangeNotifyWrapper`, is a subclass of `TraitChangeNotifyWrapper`. Most of the functionality of the class is thus already covered by the `TestDynamicNotifiers` test case, and we only need to test that the notification really occurs on a separate thread. """ import thread import time from traits.api import Float, HasTraits from traits.testing.unittest_tools import unittest class Foo(HasTraits): foo = Float class TestNewNotifiers(unittest.TestCase): """ Tests for dynamic notifiers with `dispatch='new'`. """ def test_notification_on_separate_thread(self): notifications = [] def on_foo_notifications(obj, name, old, new): thread_id = thread.get_ident() event = (thread_id, obj, name, old, new) notifications.append(event) obj = Foo() obj.on_trait_change(on_foo_notifications, 'foo', dispatch='new') obj.foo = 3 # Wait for a while to make sure the notification has finished. time.sleep(0.1) self.assertEqual(len(notifications), 1) self.assertEqual(notifications[0][1:], (obj, 'foo', 0, 3)) this_thread_id = thread.get_ident() self.assertNotEqual(this_thread_id, notifications[0][0]) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_pickle_validated_dict.py000066400000000000000000000020151233213561600233760ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt from __future__ import absolute_import from cPickle import dumps, loads from traits.testing.unittest_tools import unittest from ..api import Dict, HasTraits, Int, List class C(HasTraits): # A dict trait containing a list trait a = Dict(Int, List(Int)) # And we must initialize it to something non-trivial def __init__(self): super(C, self).__init__() self.a = {1: [2, 3]} class PickleValidatedDictTestCase(unittest.TestCase): def test(self): # And we must unpickle one x = dumps(C()) try: loads(x) except AttributeError, e: self.fail('Unpickling raised an AttributeError: %s' % e) traits-4.5.0/traits/tests/test_property_delete.py000066400000000000000000000013321233213561600223160ustar00rootroot00000000000000""" Unit tests to ensure that we can call reset_traits/delete on a property trait (regression tests for Github issue #67). """ from traits import _py2to3 from traits.api import Any, HasTraits, Int, Property, TraitError from traits.testing.unittest_tools import unittest class E(HasTraits): a = Property(Any) b = Property(Int) class TestPropertyDelete(unittest.TestCase): def test_property_delete(self): e = E() with self.assertRaises(TraitError): del e.a with self.assertRaises(TraitError): del e.b def test_property_reset_traits(self): e = E() unresetable = e.reset_traits() _py2to3.assertCountEqual(self, unresetable, ['a', 'b']) traits-4.5.0/traits/tests/test_property_notifications.py000066400000000000000000000042301233213561600237250ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: David C. Morrill # Description: #------------------------------------------------------------------------------ from __future__ import absolute_import from ..api import HasTraits, Property class Test(HasTraits): __traits__ = {} def __value_get(self): return self.__dict__.get('_value', 0) def __value_set(self, value): old_value = self.__dict__.get('_value', 0) if value != old_value: self._value = value self.trait_property_changed('value', old_value, value) __traits__['value'] = Property(__value_get, __value_set) class Test_1 (Test): def value_changed(self, value): print 'value_changed:', value class Test_2 (Test): def anytrait_changed(self, name, value): print 'anytrait_changed for %s: %s' % (name, value) class Test_3 (Test_2): def value_changed(self, value): print 'value_changed:', value def on_value_changed(value): print 'on_value_changed:', value def on_anyvalue_changed(value): print 'on_anyvalue_changed:', value def test_property_notifications(): Test_1().value = 'test 1' Test_2().value = 'test 2' Test_3().value = 'test 3' test_4 = Test() test_4.on_trait_change(on_value_changed, 'value') test_4.value = 'test 4' test_5 = Test() test_5.on_trait_change(on_anyvalue_changed) test_5.value = 'test 5' test_6 = Test() test_6.on_trait_change(on_value_changed, 'value') test_6.on_trait_change(on_anyvalue_changed) test_6.value = 'test 6' test_7 = Test_3() test_7.on_trait_change(on_value_changed, 'value') test_7.on_trait_change(on_anyvalue_changed) test_7.value = 'test 7' traits-4.5.0/traits/tests/test_protocols_usage.py000066400000000000000000000232711233213561600223260ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ """ Tests for protocols usage. """ from __future__ import absolute_import # Standard library imports. import os import pickle import sys from traits.testing.unittest_tools import unittest # Enthought library imports. from ..api import (Bool, HasTraits, Int, Interface, Str, Adapter, adapts, Property) # NOTE: There is a File class in apptools.io module, but since we want to # eliminate dependencies of Traits on other modules, we create another # minimal File class here to test the adapter implementation. # Test class class File(HasTraits): # The path name of this file/folder. path = Str # Is this an existing file? is_file = Property(Bool) # Is this an existing folder? is_folder = Property(Bool) def _get_is_file(self): """ Returns True if the path exists and is a file. """ return os.path.exists(self.path) and os.path.isfile(self.path) def _get_is_folder(self): """ Returns True if the path exists and is a folder. """ return os.path.exists(self.path) and os.path.isdir(self.path) # Test class. class Person(HasTraits): """ A person! """ name = Str age = Int @unittest.skipUnless(sys.version_info < (3,), "The 'adapts' and 'implements' class advisors " "are not supported in Python 3.") class ProtocolsUsageTestCase(unittest.TestCase): """ Tests for protocols usage. """ def test_adapts(self): """ adapts """ class IFoo(Interface): """ A simple interface. """ def foo(self): """ The only method for the IFoo interface. """ class Bar(HasTraits): """ A type that *doesn't* implement 'IFoo'. """ class BarToIFooAdapter(Adapter): """ Adapts from Bar to IFoo. """ adapts(Bar, to=IFoo) def foo(self): """ An implementation of the single method in the interface.""" return 'foo' b = Bar() # Make sure that the Bar instance can be adapted to 'IFoo'. self.assertNotEqual(None, IFoo(b)) self.assertEqual('foo', IFoo(b).foo()) def test_factory(self): """ factory """ class IInputStream(Interface): """ Fake interface for input stream. """ def get_input_stream(self): """ Get an input stream. """ def factory(obj): """ A factory for File to IInputStream adapters. """ if not obj.is_folder: adapter = FileToIInputStreamAdapter(adaptee=obj) else: adapter = None return adapter class FileToIInputStreamAdapter(Adapter): """ An adapter from 'File' to 'IInputStream'. """ adapts(File, to=IInputStream, factory=factory) ################################################################### # 'IInputStream' interface. ################################################################### def get_input_stream(self): """ Get an input stream. """ return file(self.adaptee.path, 'r') # Create a reference to this file cwd = os.path.dirname(os.path.abspath(__file__)) f = File(path=os.path.join(cwd, 'test_protocols_usage.py')) self.assertTrue(f.is_file) # A reference to the parent folder g = File(path='..') self.assertTrue(g.is_folder) # We should be able to adapt the file to an input stream... self.assertNotEqual(None, IInputStream(f, None)) # ... but not the folder. self.assertEqual(None, IInputStream(g, None)) # Make sure we can use the stream (this reads this module and makes # sure that it contains the right doc string). stream = IInputStream(f).get_input_stream() self.assertIn('"""' + __doc__, stream.read()) return def test_when_expression(self): """ when expression """ class IInputStream(Interface): """ Fake interface for input stream. """ def get_input_stream(self): """ Get an input stream. """ class FileToIInputStreamAdapter(Adapter): """ An adapter from 'File' to 'IInputStream'. """ adapts(File, to=IInputStream, when='not adaptee.is_folder') ################################################################### # 'IInputStream' interface. ################################################################### def get_input_stream(self): """ Get an input stream. """ return file(self.adaptee.path, 'r') # Create a reference to this file cwd = os.path.dirname(os.path.abspath(__file__)) f = File(path=os.path.join(cwd, 'test_protocols_usage.py')) self.assertTrue(f.is_file) # A reference to the parent folder g = File(path='..') self.assertTrue(g.is_folder) # We should be able to adapt the file to an input stream... self.assertNotEqual(None, IInputStream(f, None)) # ... but not the folder. self.assertEqual(None, IInputStream(g, None)) # Make sure we can use the stream (this reads this module and makes # sure that it contains the right doc string). stream = IInputStream(f).get_input_stream() self.assertIn('"""' + __doc__, stream.read()) return def test_cached(self): """ cached """ class ISaveable(Interface): """ Fake interface for saveable. """ # Is the object 'dirty'? dirty = Bool(False) def save(self, output_stream): """ Save the object to an output stream. """ class HasTraitsToISaveableAdapter(Adapter): """ An adapter from 'HasTraits' to 'ISaveable'. """ adapts(HasTraits, to=ISaveable, cached=True) #### 'ISaveable' interface ######################################## # Is the object 'dirty'? dirty = Bool(False) def save(self, output_stream): """ Save the object to an output stream. """ pickle.dump(self.adaptee, output_stream) self.dirty = False return #### Private interface ############################################ def _adaptee_changed(self, old, new): """ Static trait change handler. """ if old is not None: old.on_trait_change(self._set_dirty, remove=True) if new is not None: new.on_trait_change(self._set_dirty) self._set_dirty() return def _set_dirty(self): """ Sets the dirty flag to True. """ self.dirty = True return # Create some people! fred = Person(name='fred', age=42) wilma = Person(name='wilma', age=35) fred_saveable = ISaveable(fred) self.assertEqual(True, fred_saveable.dirty) wilma_saveable = ISaveable(wilma) self.assertEqual(True, wilma_saveable.dirty) # Make sure that Fred and Wilma have got their own saveable. self.assertNotEqual(id(fred_saveable), id(wilma_saveable)) # But make sure that their saveable's are cached. self.assertEqual(id(ISaveable(fred)), id(fred_saveable)) self.assertEqual(id(ISaveable(wilma)), id(wilma_saveable)) # Save Fred and Wilma and make sure that the dirty flag is cleared. fred_saveable.save(file('fred.pickle', 'w')) self.assertEqual(False, ISaveable(fred).dirty) wilma_saveable.save(file('wilma.pickle', 'w')) self.assertEqual(False, ISaveable(wilma).dirty) # Clean up. for path in ['fred.pickle', 'wilma.pickle']: if os.access(path, os.W_OK): os.remove(path) return def test_multiple_factories_for_type(self): """ multiple factories for type """ # There was a bug that prevented more than one adapter factory being # registered for the same class. class IFoo(Interface): pass class HasTraitsToIFooAdapter(Adapter): adapts(HasTraits, to=IFoo, cached=True) class IBar(Interface): pass class HasTraitsToIBarAdapter(Adapter): adapts(HasTraits, to=IBar, cached=True) return def test_multiple_factories_for_interface(self): """ multiple factories for interfaces """ # There was a bug that prevented more than one adapter factory being # registered for the same class. This test just makes sure that it # still works for interfaces too! class IBaz(Interface): pass class IFoo(Interface): pass class IBazToIFooAdapter(Adapter): adapts(IBaz, to=IFoo, cached=True) class IBar(Interface): pass class IBazToIBarAdapter(Adapter): adapts(IBaz, to=IBar, cached=True) return # Run the unit tests (if invoked from the command line): if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_range.py000066400000000000000000000051261233213561600202110ustar00rootroot00000000000000# Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Int, Range, Str, TraitError class WithFloatRange(HasTraits): r = Range(0.0, 100.0) r_copied_on_change = Str _changed_handler_calls = Int def _r_changed(self, old, new): self._changed_handler_calls += 1 self.r_copied_on_change = str(self.r) if (self.r % 10) > 0: self.r += 10 - (self.r % 10) class WithLargeIntRange(HasTraits): r = Range(0, 1000) r_copied_on_change = Str _changed_handler_calls = Int def _r_changed(self, old, new): self._changed_handler_calls += 1 self.r_copied_on_change = str(self.r) if self.r > 100: self.r = 0 class WithDynamicRange(HasTraits): low = Int(0) high = Int(10) value = Int(3) r = Range(value='value', low='low', high='high', exclude_high=True) def _r_changed(self, old, new): self._changed_handler_calls += 1 class RangeTestCase(unittest.TestCase): def test_non_ui_events(self): obj = WithFloatRange() obj._changed_handler_calls = 0 obj.r = 10 self.assertEqual(1, obj._changed_handler_calls) obj._changed_handler_calls = 0 obj.r = 34.56 self.assertEqual(obj._changed_handler_calls, 2) self.assertEqual(obj.r, 40) def test_non_ui_int_events(self): # Even though the range is configured for 0..1000, the handler resets # the value to 0 when it exceeds 100. obj = WithLargeIntRange() obj._changed_handler_calls = 0 obj.r = 10 self.assertEqual(obj._changed_handler_calls, 1) self.assertEqual(obj.r, 10) obj.r = 100 self.assertEqual(obj._changed_handler_calls, 2) self.assertEqual(obj.r, 100) obj.r = 101 self.assertEqual(obj._changed_handler_calls, 4) self.assertEqual(obj.r, 0) def test_dynamic_events(self): obj = WithDynamicRange() obj._changed_handler_calls = 0 obj.r = 5 self.assertEqual(obj._changed_handler_calls, 1) self.assertEqual(obj.r, 5) with self.assertRaises(TraitError): obj.r = obj.high self.assertEqual(obj.r, 5) traits-4.5.0/traits/tests/test_regression.py000066400000000000000000000060561233213561600213000ustar00rootroot00000000000000""" General regression tests for a variety of bugs. """ import gc import sys from ..has_traits import HasTraits, Property, on_trait_change from ..trait_types import Bool, DelegatesTo, Instance, Int from ..testing.unittest_tools import unittest class Dummy(HasTraits): x = Int(10) def _create_subclass(): class Subclass(HasTraits): pass return Subclass class Dummy2(HasTraits): y = Int(20) dummy = Instance(Dummy) class DelegateMess(HasTraits): dummy1 = Instance(Dummy, args=()) dummy2 = Instance(Dummy2) y = DelegatesTo('dummy2') handler_called = Bool(False) def _dummy2_default(self): # Create `self.dummy1` return Dummy2(dummy=self.dummy1) @on_trait_change('dummy1.x') def _on_dummy1_x(self): self.handler_called = True def _init_trait_listeners(self): """ Force the DelegatesTo listener to hook up first to exercise the worst case. """ for name in ['y', '_on_dummy1_x']: data = self.__class__.__listener_traits__[name] getattr(self, '_init_trait_%s_listener' % data[0])(name, *data) class Presenter(HasTraits): obj = Instance(Dummy) y = Property(Int(), depends_on='obj.x') def _get_y(self): return self.obj.x class TestRegression(unittest.TestCase): def test_default_value_for_no_cache(self): """ Make sure that CTrait.default_value_for() does not cache the result. """ dummy = Dummy() # Nothing in the __dict__ yet. self.assertEqual(dummy.__dict__, {}) ctrait = dummy.trait('x') default = ctrait.default_value_for(dummy, 'x') self.assertEqual(default, 10) self.assertEqual(dummy.__dict__, {}) def test_subclasses_weakref(self): """ Make sure that dynamically created subclasses are not held strongly by HasTraits. """ previous_subclasses = HasTraits.__subclasses__() _create_subclass() _create_subclass() _create_subclass() _create_subclass() gc.collect() self.assertEqual(previous_subclasses, HasTraits.__subclasses__()) def test_leaked_property_tuple(self): """ the property ctrait constructor shouldn't leak a tuple. """ class A(HasTraits): prop = Property() a = A() self.assertEqual(sys.getrefcount(a.trait('prop').property()), 1) def test_delegate_initializer(self): mess = DelegateMess() self.assertFalse(mess.handler_called) mess.dummy1.x = 20 self.assertTrue(mess.handler_called) def test_no_leaking_notifiers(self): """ Extended trait change notifications should not leaf TraitChangeNotifyWrappers. """ dummy = Dummy() ctrait = dummy._trait('x', 2) self.assertEqual(len(ctrait._notifiers(1)), 0) presenter = Presenter(obj=dummy) self.assertEqual(len(ctrait._notifiers(1)), 1) del presenter self.assertEqual(len(ctrait._notifiers(1)), 0) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_rich_compare.py000066400000000000000000000130101233213561600215370ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Any, Str class IdentityCompare(HasTraits): bar = Any(rich_compare=False) class RichCompare(HasTraits): bar = Any(rich_compare=True) class RichCompareTests: def bar_changed(self, object, trait, old, new): self.changed_object = object self.changed_trait = trait self.changed_old = old self.changed_new = new self.changed_count += 1 def reset_change_tracker(self): self.changed_object = None self.changed_trait = None self.changed_old = None self.changed_new = None self.changed_count = 0 def check_tracker(self, object, trait, old, new, count): self.failUnlessEqual(count, self.changed_count) self.failUnless(object is self.changed_object) self.failUnlessEqual(trait, self.changed_trait) self.failUnless(old is self.changed_old) self.failUnless(new is self.changed_new) return def test_id_first_assignment(self): ic = IdentityCompare() ic.on_trait_change(self.bar_changed, 'bar') self.reset_change_tracker() default_value = ic.bar ic.bar = self.a self.check_tracker(ic, 'bar', default_value, self.a, 1) return def test_rich_first_assignment(self): rich = RichCompare() rich.on_trait_change(self.bar_changed, 'bar') self.reset_change_tracker() default_value = rich.bar rich.bar = self.a self.check_tracker(rich, 'bar', default_value, self.a, 1) return def test_id_same_object(self): ic = IdentityCompare() ic.on_trait_change(self.bar_changed, 'bar') self.reset_change_tracker() default_value = ic.bar ic.bar = self.a self.check_tracker(ic, 'bar', default_value, self.a, 1) ic.bar = self.a self.check_tracker(ic, 'bar', default_value, self.a, 1) return def test_rich_same_object(self): rich = RichCompare() rich.on_trait_change(self.bar_changed, 'bar') self.reset_change_tracker() default_value = rich.bar rich.bar = self.a self.check_tracker(rich, 'bar', default_value, self.a, 1) rich.bar = self.a self.check_tracker(rich, 'bar', default_value, self.a, 1) return def test_id_different_object(self): ic = IdentityCompare() ic.on_trait_change(self.bar_changed, 'bar') self.reset_change_tracker() default_value = ic.bar ic.bar = self.a self.check_tracker(ic, 'bar', default_value, self.a, 1) ic.bar = self.different_from_a self.check_tracker(ic, 'bar', self.a, self.different_from_a, 2) return def test_rich_different_object(self): rich = RichCompare() rich.on_trait_change(self.bar_changed, 'bar') self.reset_change_tracker() default_value = rich.bar rich.bar = self.a self.check_tracker(rich, 'bar', default_value, self.a, 1) rich.bar = self.different_from_a self.check_tracker(rich, 'bar', self.a, self.different_from_a, 2) return def test_id_different_object_same_as(self): ic = IdentityCompare() ic.on_trait_change(self.bar_changed, 'bar') self.reset_change_tracker() default_value = ic.bar ic.bar = self.a self.check_tracker(ic, 'bar', default_value, self.a, 1) ic.bar = self.same_as_a self.check_tracker(ic, 'bar', self.a, self.same_as_a, 2) return def test_rich_different_object_same_as(self): rich = RichCompare() rich.on_trait_change(self.bar_changed, 'bar') self.reset_change_tracker() default_value = rich.bar rich.bar = self.a self.check_tracker(rich, 'bar', default_value, self.a, 1) # Values of a and same_as_a are the same and should therefore not # be considered a change. rich.bar = self.same_as_a self.check_tracker(rich, 'bar', default_value, self.a, 1) return class Foo(HasTraits): name = Str def __ne__(self, other): # Traits uses != to do the rich compare. The default implementation # of __ne__ is to compare the object identities. return self.name != other.name def __eq__(self, other): # Not required, but a good idea to make __eq__ and __ne__ compatible return self.name == other.name class RichCompareHasTraitsTestCase(unittest.TestCase, RichCompareTests): def setUp(self): self.a = Foo(name='a') self.same_as_a = Foo(name='a') self.different_from_a = Foo(name='not a') return def test_assumptions(self): self.failIf(self.a is self.same_as_a) self.failIf(self.a is self.different_from_a) self.failUnless(self.a.name == self.same_as_a.name) self.failIf(self.a.name == self.different_from_a.name) return ### EOF traits-4.5.0/traits/tests/test_special_event_handlers.py000066400000000000000000000016051233213561600236140ustar00rootroot00000000000000from traits.testing.unittest_tools import unittest from traits.api import Any, HasStrictTraits, Str class TestSpecialEvent(unittest.TestCase): """ Test demonstrating special change events using the 'event' metadata. """ def setUp(self): self.change_events = [] self.foo = Foo(test=self) def test_events(self): self.foo.val = 'CHANGE' values = ['CHANGE'] self.failUnlessEqual(self.change_events, values) def test_instance_events(self): foo = self.foo foo.add_trait('val2', Str(event='the_trait')) foo.val2 = 'CHANGE2' values = ['CHANGE2'] self.failUnlessEqual(self.change_events, values) class Foo(HasStrictTraits): val = Str(event='the_trait') test = Any(None) def _the_trait_changed(self, new): if self.test is not None: self.test.change_events.append(new) traits-4.5.0/traits/tests/test_static_notifiers.py000066400000000000000000000063651233213561600224740ustar00rootroot00000000000000############################################################################## # Copyright 2014 Enthought, Inc. ############################################################################## """ Tests for the static notifiers. """ from traits.api import Float, HasTraits from traits.testing.unittest_tools import unittest from traits import trait_notifiers calls_0 = [] class StaticNotifiers0(HasTraits): ok = Float def _ok_changed(): calls_0.append(True) fail = Float def _fail_changed(): raise Exception('error') class StaticNotifiers1(HasTraits): ok = Float def _ok_changed(self): if not hasattr(self, 'calls'): self.calls = [] self.calls.append(True) fail = Float def _fail_changed(self): raise Exception('error') class StaticNotifiers2(HasTraits): ok = Float def _ok_changed(self, new): if not hasattr(self, 'calls'): self.calls = [] self.calls.append(new) fail = Float def _fail_changed(self, new): raise Exception('error') class StaticNotifiers3(HasTraits): ok = Float def _ok_changed(self, old, new): if not hasattr(self, 'calls'): self.calls = [] self.calls.append((old, new)) fail = Float def _fail_changed(self, old, new): raise Exception('error') class StaticNotifiers4(HasTraits): ok = Float def _ok_changed(self, name, old, new): if not hasattr(self, 'calls'): self.calls = [] self.calls.append((name, old, new)) fail = Float def _fail_changed(self, name, old, new): raise Exception('error') class TestNotifiers(unittest.TestCase): """ Tests for the static notifiers, and the "anytrait" static notifiers. """ def setUp(self): self.exceptions = [] trait_notifiers.push_exception_handler(self._handle_exception) def tearDown(self): trait_notifiers.pop_exception_handler() def _handle_exception(self, obj, name, old, new): self.exceptions.append((obj, name, old, new)) def test_static_notifiers_0(self): obj = StaticNotifiers0(ok=2) obj.ok = 3 self.assertEqual(len(calls_0), 2) obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) def test_static_notifiers_1(self): obj = StaticNotifiers1(ok=2) obj.ok = 3 self.assertEqual(len(obj.calls), 2) obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) def test_static_notifiers_2(self): obj = StaticNotifiers2(ok=2) obj.ok = 3 self.assertEqual(obj.calls, [2, 3]) obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) def test_static_notifiers_3(self): obj = StaticNotifiers3(ok=2) obj.ok = 3 self.assertEqual(obj.calls, [(0, 2), (2, 3)]) obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) def test_static_notifiers_4(self): obj = StaticNotifiers4(ok=2) obj.ok = 3 self.assertEqual(obj.calls, [('ok', 0, 2), ('ok', 2, 3)]) obj.fail = 1 self.assertEqual(self.exceptions, [(obj, 'fail', 0, 1)]) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_str_handler.py000066400000000000000000000042721233213561600214230ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Trait, TraitError, TraitHandler from ..trait_base import strx # Validation via function def validator(object, name, value): if isinstance(value, basestring): # arbitrary rule for testing if value.find('fail') < 0: return value else: raise TraitError else: raise TraitError # Validation via Handler class MyHandler(TraitHandler): def validate(self, object, name, value): #print 'myvalidate "%s" %s' % (value, type(value)) try: value = strx(value) if value.find('fail') < 0: return value except: pass self.error(object, name, value) return def info(self): msg = "a string not containing the character sequence 'fail'" return msg class Foo(HasTraits): s = Trait('', validator) class Bar(HasTraits): s = Trait('', MyHandler()) class StrHandlerCase(unittest.TestCase): def test_validator_function(self): f = Foo() self.failUnlessEqual(f.s, '') f.s = 'ok' self.failUnlessEqual(f.s, 'ok') self.failUnlessRaises(TraitError, setattr, f, 's', 'should fail.') self.failUnlessEqual(f.s, 'ok') return def test_validator_handler(self): b = Bar() self.failUnlessEqual(b.s, '') b.s = 'ok' self.failUnlessEqual(b.s, 'ok') self.failUnlessRaises(TraitError, setattr, b, 's', 'should fail.') self.failUnlessEqual(b.s, 'ok') return ### EOF traits-4.5.0/traits/tests/test_sync_traits.py000066400000000000000000000055051233213561600214600ustar00rootroot00000000000000""" Test that the `sync_trait` member function of `HasTraits` instances functions correctly. """ from __future__ import absolute_import from traits.testing.unittest_tools import unittest, UnittestTools from ..api import HasTraits, Int, List class A(HasTraits): t = Int l = List(Int) class B(HasTraits): t = Int u = Int l = List(Int) class TestSyncTraits(unittest.TestCase, UnittestTools): def test_mutual_sync(self): """ Test that two traits can be mutually synchronized. """ a = A() b = B() a.sync_trait('t', b) b.t = 10 self.assertEqual(a.t, b.t) a.t = 20 self.assertEqual(b.t, a.t) # Check that we can remove the synchronization a.sync_trait('t', b, remove=True) with self.assertTraitDoesNotChange(a, 't'): b.t = 5 with self.assertTraitDoesNotChange(b, 't'): a.t = 7 def test_sync_alias(self): """ Test synchronization of a trait with an aliased trait. """ a = A() b = B() a.sync_trait('t', b, 'u') with self.assertTraitDoesNotChange(b, 't'): a.t = 5 self.assertEqual(a.t, b.u) b.u = 7 self.assertEqual(a.t, b.u) def test_one_way_sync(self): """ Test one-way synchronization of two traits. """ a = A(t=3) b = B(t=4) a.sync_trait('t', b, mutual=False) self.assertEqual(b.t, 3) a.t = 5 self.assertEqual(b.t, a.t) with self.assertTraitDoesNotChange(a, 't'): b.t = 7 # Remove synchronization a.sync_trait('t', b, remove=True) with self.assertTraitDoesNotChange(b, 't'): a.t = 12 def test_sync_lists(self): """ Test synchronization of list traits. """ a = A() b = B() a.sync_trait('l', b) # Change entire list. a.l = [1, 2, 3] self.assertEqual(a.l, b.l) b.l = [4, 5] self.assertEqual(a.l, b.l) # Change list items. a.l = [7, 8, 9] with self.assertTraitChanges(b, 'l_items'): a.l[-1] = 20 self.assertEqual(b.l, [7, 8, 20]) # Remove synchronization a.sync_trait('l', b, remove=True) with self.assertTraitDoesNotChange(a, 'l'): b.l = [7, 8] def test_sync_delete(self): """ Test that deleting a synchronized trait works. """ a = A() b = B() a.sync_trait('t', b) a.t = 5 del a try: # Updating `b.t` should not raise an exception due to remaining # listeners. b.t = 7 except Exception: self.fail("Unexpected exception while setting sync trait.") if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_target.py000066400000000000000000000043611233213561600204030ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2010, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ """ Test whether HasTraits objects with cycles can be garbage collected. """ # Standard library imports from traits.testing.unittest_tools import unittest # Enthought library imports from traits.api import HasTraits, Instance, Int class TestCase(unittest.TestCase): """ Tests the 'target' argument for on_traits_change. """ def test_simple(self): """ Tests a simple dynamic trait change handler. """ class Test(HasTraits): i = Int # Create objects obj = Test() target = HasTraits() # Set up to count changes in i self.count = 0 def count_notifies(): self.count += 1 obj.on_trait_change(count_notifies, "i", target=target) # Change the trait obj.i = 10 # Delete the target and change it again del target obj.i = 0 # The count should be 1 self.assertEqual(self.count, 1) def test_extended(self): """ Tests a dynamic trait change handler using extended names. """ class Child(HasTraits): i = Int class Parent(HasTraits): child = Instance(Child) # Create objects parent = Parent(child=Child()) target = HasTraits() # Set up to count changes in i self.count = 0 def count_notifies(): self.count += 1 parent.on_trait_change(count_notifies, "child:i", target=target) # Change the trait parent.child.i = 10 # Delete the target and change it again del target parent.child.i = 0 # The count should be 1 self.assertEqual(self.count, 1) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_trait_change_event_tracer.py000066400000000000000000000120731233213561600243050ustar00rootroot00000000000000""" Tests for the trait change event tracer. """ from traits.api import Float, HasTraits, on_trait_change from traits.testing.unittest_tools import unittest from traits import trait_notifiers class FuzException(Exception): pass class Foo(HasTraits): """ Test traits class with static and dynamic listeners. Changing `baz` triggers a dynamic listeners that modifies `bar`, which triggers one dynamic and one static listeners. """ bar = Float baz = Float fuz = Float def _bar_changed(self): pass @on_trait_change('bar') def _on_bar_change_notification(self): pass @on_trait_change('baz') def _on_baz_change_notification(self): self.bar += 1 @on_trait_change('fuz') def _on_fuz_change_notification(self): self.bar += 1 raise FuzException('method') class TestChangeEventTracers(unittest.TestCase): #### 'TestCase' protocol ################################################## def setUp(self): self.pre_change_events = [] self.post_change_events = [] self.exceptions = [] trait_notifiers.push_exception_handler( lambda obj, name, old, new: None ) def tearDown(self): trait_notifiers.pop_exception_handler() #### Private protocol ##################################################### def _collect_pre_notification_events(self, *args): self.pre_change_events.append(args) def _collect_post_notification_events(self, *args, **kwargs): self.post_change_events.append(args) self.exceptions.extend(kwargs.values()) #### Tests ################################################################ def test_change_event_hooks(self): # Create the test object and a function listener. foo = Foo() def _on_foo_baz_changed(obj, name, old, new): pass foo.on_trait_change(_on_foo_baz_changed, 'baz') # Set the event tracer and trigger a cascade of change events. trait_notifiers.set_change_event_tracers( pre_tracer=self._collect_pre_notification_events, post_tracer=self._collect_post_notification_events) foo.baz = 3 self.assertEqual(len(self.pre_change_events), 4) self.assertEqual(len(self.post_change_events), 4) expected_pre_events = [ (foo, 'baz', 0.0, 3.0, foo._on_baz_change_notification), (foo, 'bar', 0.0, 1.0, foo._bar_changed.im_func), (foo, 'bar', 0.0, 1.0, foo._on_bar_change_notification), (foo, 'baz', 0.0, 3.0, _on_foo_baz_changed), ] self.assertEqual(self.pre_change_events, expected_pre_events) expected_post_events = [ (foo, 'bar', 0.0, 1.0, foo._bar_changed.im_func), (foo, 'bar', 0.0, 1.0, foo._on_bar_change_notification), (foo, 'baz', 0.0, 3.0, foo._on_baz_change_notification), (foo, 'baz', 0.0, 3.0, _on_foo_baz_changed), ] self.assertEqual(self.post_change_events, expected_post_events) self.assertEqual(self.exceptions, [None] * 4) # Deactivate the tracer; it should not be called anymore. trait_notifiers.clear_change_event_tracers() foo.baz = 23 self.assertEqual(len(self.pre_change_events), 4) self.assertEqual(len(self.post_change_events), 4) def test_change_event_hooks_after_exception(self): # Create the test object and a function listener. foo = Foo() def _on_foo_fuz_changed(obj, name, old, new): raise FuzException('function') foo.on_trait_change(_on_foo_fuz_changed, 'fuz') # Set the event tracer and trigger a cascade of change events. trait_notifiers.set_change_event_tracers( pre_tracer=self._collect_pre_notification_events, post_tracer=self._collect_post_notification_events) foo.fuz = 3 self.assertEqual(len(self.pre_change_events), 4) self.assertEqual(len(self.post_change_events), 4) expected_pre_events = [ (foo, 'fuz', 0.0, 3.0, foo._on_fuz_change_notification), (foo, 'bar', 0.0, 1.0, foo._bar_changed.im_func), (foo, 'bar', 0.0, 1.0, foo._on_bar_change_notification), (foo, 'fuz', 0.0, 3.0, _on_foo_fuz_changed), ] self.assertEqual(self.pre_change_events, expected_pre_events) expected_post_events = [ (foo, 'bar', 0.0, 1.0, foo._bar_changed.im_func), (foo, 'bar', 0.0, 1.0, foo._on_bar_change_notification), (foo, 'fuz', 0.0, 3.0, foo._on_fuz_change_notification), (foo, 'fuz', 0.0, 3.0, _on_foo_fuz_changed), ] self.assertEqual(self.post_change_events, expected_post_events) self.assertEqual(self.exceptions[:2], [None, None]) self.assertIsInstance(self.exceptions[2], FuzException) self.assertEqual(self.exceptions[2].args, ('method',)) self.assertIsInstance(self.exceptions[3], FuzException) self.assertEqual(self.exceptions[3].args, ('function',)) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_trait_cycle.py000066400000000000000000000102201233213561600214060ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ """ Test whether HasTraits objects with cycles can be garbage collected. """ from __future__ import absolute_import import gc import time from traits.testing.unittest_tools import unittest # Enthought library imports from ..api import HasTraits, Any, DelegatesTo, Instance, Int class TestCase(unittest.TestCase): def _simple_cycle_helper(self, foo_class): """ Can the garbage collector clean up a cycle with traits objects? """ # Create two Foo objects that refer to each other. first = foo_class() second = foo_class(child=first) first.child = second # get their ids foo_ids = [id(first), id(second)] # delete the items so that they can be garbage collected del first, second # tell the garbage collector to pick up the litter. gc.collect() # Now grab all objects in the process and ask for their ids all_ids = [id(obj) for obj in gc.get_objects()] # Ensure that neither of the Foo object ids are in this list for foo_id in foo_ids: self.assertTrue(foo_id not in all_ids) def test_simple_cycle_oldstyle_class(self): """ Can the garbage collector clean up a cycle with old style class? """ class Foo: def __init__(self, child=None): self.child = child self._simple_cycle_helper(Foo) def test_simple_cycle_newstyle_class(self): """ Can the garbage collector clean up a cycle with new style class? """ class Foo(object): def __init__(self, child=None): self.child = child self._simple_cycle_helper(Foo) def test_simple_cycle_hastraits(self): """ Can the garbage collector clean up a cycle with traits objects? """ class Foo(HasTraits): child = Any self._simple_cycle_helper(Foo) def test_reference_to_trait_dict(self): """ Does a HasTraits object refer to its __dict__ object? This test may point to why the previous one fails. Even if it doesn't, the functionality is needed for detecting problems with memory in debug.memory_tracker """ class Foo(HasTraits): child = Any foo = Foo() # It seems like foo sometimes has not finished construction yet, so # the frame found by referrers is not _exactly_ the same as Foo(). For # more information, see the gc doc: http://docs.python.org/lib/module- # gc.html # # The documentation says that this (get_referrers) should be used for # no purpose other than debugging, so this is really not a good way to # test the code. time.sleep(0.1) referrers = gc.get_referrers(foo.__dict__) self.assertTrue(len(referrers) > 0) self.assertTrue(foo in referrers) def test_delegates_to(self): """ Tests if an object that delegates to another is freed. """ class Base(HasTraits): """ Object we are delegating to. """ i = Int class Delegates(HasTraits): """ Object that delegates. """ b = Instance(Base) i = DelegatesTo('b') # Make a pair of object b = Base() d = Delegates(b=b) # Delete d and thoroughly collect garbage del d for i in range(3): gc.collect(2) # See if we still have a Delegates ds = [obj for obj in gc.get_objects() if isinstance(obj, Delegates)] self.assertEqual(ds, []) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_trait_default_initializer.py000066400000000000000000000032551233213561600243500ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ from __future__ import absolute_import import unittest from ..trait_types import Int from ..has_traits import HasTraits class Foo(HasTraits): bar = Int def _bar_default(self): return 4 class TestTraitDefaultInitializer(unittest.TestCase): """ Test basic usage of the default method. """ def test_default_value(self): foo = Foo() self.assertEqual(foo.bar, 4) def test_default_value_override(self): foo = Foo(bar=3) self.assertEqual(foo.bar, 3) def test_reset_to_default(self): foo = Foo(bar=3) foo.reset_traits(traits=['bar']) self.assertEqual(foo.bar, 4) def test_error_propagation_in_default_methods(self): class FooException(Foo): def _bar_default(self): 1 / 0 foo = FooException() self.assertRaises(ZeroDivisionError, lambda: foo.bar) class FooKeyError(Foo): def _bar_default(self): raise KeyError() # Check that KeyError is propagated (issue #70). foo = FooKeyError() self.assertRaises(KeyError, lambda: foo.bar) traits-4.5.0/traits/tests/test_trait_list_dict.py000066400000000000000000000054171233213561600223010ustar00rootroot00000000000000############################################################################## # Copyright 2014 Enthought, Inc. ############################################################################## """ Test the persistence behavior of TraitListObjects, TraitDictObjects and TraitSetObjects. """ from __future__ import absolute_import import copy from cPickle import dumps, loads from ..has_traits import HasTraits, on_trait_change from ..trait_types import Dict, List, Set, Str, Int, Instance class A(HasTraits): alist = List(Int, range(5)) adict = Dict(Str, Int, dict(a=1, b=2)) aset = Set(Int, range(5)) events = List() @on_trait_change('alist_items,adict_items,aset_items') def _receive_events(self, object, name, old, new): self.events.append((name, new)) class B(HasTraits): dict = Dict(Str, Instance(A)) def test_trait_list_object_persists(): a = A() list = loads(dumps(a.alist)) assert list.object() is None list.append(10) assert len(a.events) == 0 a.alist.append(20) assert len(a.events) == 1 list2 = loads(dumps(list)) assert list2.object() is None def test_trait_dict_object_persists(): a = A() dict = loads(dumps(a.adict)) assert dict.object() is None dict['key'] = 10 assert len(a.events) == 0 a.adict['key'] = 10 assert len(a.events) == 1 dict2 = loads(dumps(dict)) assert dict2.object() is None def test_trait_set_object_persists(): a = A() set = loads(dumps(a.aset)) assert set.object() is None set.add(10) assert len(a.events) == 0 a.aset.add(20) assert len(a.events) == 1 set2 = loads(dumps(set)) assert set2.object() is None def test_trait_list_object_copies(): a = A() list = copy.deepcopy(a.alist) assert list.object() is None list.append(10) assert len(a.events) == 0 a.alist.append(20) assert len(a.events) == 1 list2 = copy.deepcopy(list) list2.append(30) assert list2.object() is None def test_trait_dict_object_copies(): a = A() dict = copy.deepcopy(a.adict) assert dict.object() is None dict['key'] = 10 assert len(a.events) == 0 a.adict['key'] = 10 assert len(a.events) == 1 dict2 = copy.deepcopy(dict) dict2['key2'] = 20 assert dict2.object() is None def test_trait_set_object_copies(): a = A() set1 = copy.deepcopy(a.aset) assert set1.object() is None set1.add(10) assert len(a.events) == 0 a.aset.add(20) assert len(a.events) == 1 set2 = copy.deepcopy(set1) set2.add(30) assert set2.object() is None set3 = a.aset.copy() assert type(set3) is set # Should not raise an AttributeError: set3.remove(20) def test_pickle_whole(): a = A() loads(dumps(a)) b = B(dict=dict(a=a)) loads(dumps(b)) traits-4.5.0/traits/tests/test_trait_types.py000066400000000000000000000037251233213561600214670ustar00rootroot00000000000000# Unit test case for testing trait types created by subclassing TraitType. # # Written by: David C. Morrill # # Date: 4/10/2007 # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # """ Unit test case for testing trait types created by subclassing TraitType. """ from traits.testing.unittest_tools import unittest from traits.api import Float, TraitType class TraitTypesTest(unittest.TestCase): def test_traits_shared_transient(self): # Regression test for a bug in traits where the same _metadata # dictionary was shared between different trait types. class LazyProperty(TraitType): def get(self, obj, name): return 1729 self.assertFalse(Float().transient) LazyProperty().as_ctrait() self.assertFalse(Float().transient) def test_numpy_validators_loaded_if_numpy_present(self): # If 'numpy' is available, the numpy validators should be loaded. # Make sure that numpy is present on this machine. try: import numpy except ImportError: self.skipTest("numpy library not found.") # Remove numpy from the list of imported modules. import sys del sys.modules['numpy'] for k in list(sys.modules): if k.startswith('numpy.'): del sys.modules[k] # Check that the validators contain the numpy types. from traits.trait_types import float_fast_validate import numpy self.assertIn(numpy.floating, float_fast_validate) # Run the unit tests (if invoked from the command line): if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_traits.py000066400000000000000000000643101233213561600204230ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: David C. Morrill Date: 03/20/2003 Description: Unit Test Case for the # Traits Package #------------------------------------------------------------------------------ # Imports from __future__ import absolute_import import sys from traits.testing.unittest_tools import unittest from ..api import (Any, CFloat, CInt, CLong, Delegate, Float, HasTraits, Instance, Int, List, Long, Str, Trait, TraitError, TraitList, TraitPrefixList, TraitPrefixMap, TraitRange, Tuple, pop_exception_handler, push_exception_handler) # Base unit test classes: class BaseTest(object): def assign(self, value): self.obj.value = value def coerce(self, value): return value def test_assignment(self): obj = self.obj # Validate default value value = self._default_value self.assertEqual(obj.value, value) # Validate all legal values for i, value in enumerate(self._good_values): obj.value = value self.assertEqual(obj.value, self.coerce(value)) # If there's a defined if i < len(self._mapped_values): self.assertEqual(obj.value_, self._mapped_values[i]) # Validate correct behavior for illegal values for value in self._bad_values: self.assertRaises(TraitError, self.assign, value) class test_base2(unittest.TestCase): def indexed_assign(self, list, index, value): list[index] = value def indexed_range_assign(self, list, index1, index2, value): list[index1: index2] = value def extended_slice_assign(self, list, index1, index2, step, value): list[index1:index2:step] = value # This avoids using a method name that contains 'test' so that this is not # called by the tester directly, as nose looks for all tests, regardless of # the handler at the bottom of this file. def check_values(self, name, default_value, good_values, bad_values, actual_values=None, mapped_values=None): obj = self.obj try: # Make sure the default value is correct: msg = 'default value' value = default_value self.assertEqual(getattr(obj, name), value) # Iterate over all legal values being tested: if actual_values is None: actual_values = good_values msg = 'legal values' i = 0 for value in good_values: setattr(obj, name, value) self.assertEqual(getattr(obj, name), actual_values[i]) if mapped_values is not None: self.assertEqual(getattr(obj, name + '_'), mapped_values[i]) i += 1 # Iterate over all illegal values being tested: msg = 'illegal values' for value in bad_values: self.assertRaises(TraitError, setattr, obj, name, value) except: print 'Failed while testing %s for value: %s(%s) in %s' % ( msg, value, value.__class__.__name__, self.__class__.__name__) raise class AnyTrait(HasTraits): value = Any class AnyTraitTest(BaseTest, unittest.TestCase): obj = AnyTrait() _default_value = None _good_values = [10.0, 'ten', u'ten', [10], {'ten': 10}, (10,), None, 1j] _mapped_values = [] _bad_values = [] class CoercibleIntTrait(HasTraits): value = CInt(99) class IntTrait(HasTraits): value = Int(99) class CoercibleIntTest(AnyTraitTest): obj = CoercibleIntTrait() _default_value = 99 _good_values = [10, -10, 10L, -10L, 10.1, -10.1, '10', '-10', u'10', u'-10'] _bad_values = ['10L', '-10L', '10.1', '-10.1', u'10L', u'-10L', u'10.1', u'-10.1', 'ten', u'ten', [10], {'ten': 10}, (10, ), None, 1j] def coerce(self, value): try: return int(value) except: try: return int(float(value)) except: return int(long(value)) class IntTest(AnyTraitTest): obj = IntTrait() _default_value = 99 _good_values = [10, -10, 10L, -10L] _bad_values = ['ten', u'ten', [10], {'ten': 10}, (10,), None, 1j, 10.1, -10.1, '10L', '-10L', '10.1', '-10.1', u'10L', u'-10L', u'10.1', u'-10.1', '10', '-10', u'10', u'-10'] try: import numpy as np except ImportError: pass else: _good_values.extend([ np.int64(10), np.int64(-10), np.int32(10), np.int32(-10), np.int_(10), np.int_(-10) ]) def coerce(self, value): try: return int(value) except: try: return int(float(value)) except: return int(long(value)) class CoercibleLongTrait(HasTraits): value = CLong(99L) class LongTrait(HasTraits): value = Long(99L) class CoercibleLongTest(AnyTraitTest): obj = CoercibleLongTrait() _default_value = 99L _good_values = [ 10, -10, 10L, -10L, 10.1, -10.1, '10', '-10', u'10', u'-10'] if sys.version_info[0] < 3: _good_values.extend(['10L', '-10L', u'10L', u'-10L']) _bad_values = ['10.1', '-10.1', u'10.1', u'-10.1', 'ten', u'ten', [10], [10l], {'ten': 10}, (10,), (10L,), None, 1j] def coerce(self, value): try: return long(value) except: return long(float(value)) class LongTest(AnyTraitTest): obj = LongTrait() _default_value = 99L _good_values = [10, -10, 10L, -10L] _bad_values = ['ten', u'ten', [10], [10l], {'ten': 10}, (10, ), (10L,), None, 1j, 10.1, -10.1, '10', '-10', '10L', '-10L', '10.1', '-10.1', u'10', u'-10', u'10L', u'-10L', u'10.1', u'-10.1'] def coerce(self, value): try: return long(value) except: return long(float(value)) class CoercibleFloatTrait(HasTraits): value = CFloat(99.0) class FloatTrait(HasTraits): value = Float(99.0) class CoercibleFloatTest(AnyTraitTest): obj = CoercibleFloatTrait() _default_value = 99.0 _good_values = [10, -10, 10L, -10L, 10.1, -10.1, '10', '-10', '10.1', '-10.1', u'10', u'-10', u'10.1', u'-10.1'] _bad_values = ['10L', '-10L', u'10L', u'-10L', 'ten', u'ten', [10], {'ten': 10}, (10, ), None, 1j] def coerce(self, value): try: return float(value) except: return float(long(value)) class FloatTest(AnyTraitTest): obj = FloatTrait() _default_value = 99.0 _good_values = [10, -10, 10.1, -10.1] _bad_values = ['ten', u'ten', [10], {'ten': 10}, (10,), None, 1j, '10', '-10', '10L', '-10L', '10.1', '-10.1', u'10', u'-10', u'10L', u'-10L', u'10.1', u'-10.1'] if sys.version_info[0] < 3: # 2to3 will remove the L suffix and therfore make them actually good # ones! _bad_values.extend([-10L, 10L]) def coerce(self, value): try: return float(value) except: return float(long(value)) # Trait that can only have 'complex'(i.e. imaginary) values: class ImaginaryValueTrait(HasTraits): value = Trait(99.0 - 99.0j) class ImaginaryValueTest(AnyTraitTest): obj = ImaginaryValueTrait() _default_value = 99.0 - 99.0j _good_values = [10, -10, 10L, -10L, 10.1, -10.1, '10', '-10', '10.1', '-10.1', 10j, 10 + 10j, 10 - 10j, 10.1j, 10.1 + 10.1j, 10.1 - 10.1j, '10j', '10+10j', '10-10j'] _bad_values = [u'10L', u'-10L', 'ten', [10], {'ten': 10}, (10,), None] def coerce(self, value): try: return complex(value) except: return complex(long(value)) class StringTrait(HasTraits): value = Trait('string') class StringTest(AnyTraitTest): obj = StringTrait() _default_value = 'string' _good_values = [10, -10, 10L, -10L, 10.1, -10.1, '10', '-10', '10L', '-10L', '10.1', '-10.1', 'string', u'string', 1j, [10], ['ten'], {'ten': 10}, (10,), None] _bad_values = [] def coerce(self, value): return str(value) class UnicodeTrait(HasTraits): value = Trait(u'unicode') class UnicodeTest(StringTest): obj = UnicodeTrait() _default_value = u'unicode' _good_values = [10, -10, 10L, -10L, 10.1, -10.1, '10', '-10', '10L', '-10L', '10.1', '-10.1', '', u'', 'string', u'string', 1j, [10], ['ten'], [u'ten'], {'ten': 10}, (10,), None] _bad_values = [] def coerce(self, value): return str(value) class EnumTrait(HasTraits): value = Trait([1, 'one', 2, 'two', 3, 'three', 4.4, u'four.four']) class EnumTest(AnyTraitTest): obj = EnumTrait() _default_value = 1 _good_values = [1, 'one', 2, 'two', 3, 'three', 4.4, u'four.four'] _bad_values = [0, 'zero', 4, None] class MappedTrait(HasTraits): value = Trait('one', {'one': 1, 'two': 2, 'three': 3}) class MappedTest(AnyTraitTest): obj = MappedTrait() _default_value = 'one' _good_values = ['one', 'two', 'three'] _mapped_values = [1, 2, 3] _bad_values = ['four', 1, 2, 3, [1], (1,), {1: 1}, None] class PrefixListTrait(HasTraits): value = Trait('one', TraitPrefixList('one', 'two', 'three')) class PrefixListTest(AnyTraitTest): obj = PrefixListTrait() _default_value = 'one' _good_values = ['o', 'on', 'one', 'tw', 'two', 'th', 'thr', 'thre', 'three'] _bad_values = ['t', 'one ', ' two', 1, None] def coerce(self, value): return {'o': 'one', 'on': 'one', 'tw': 'two', 'th': 'three'}[value[:2]] class PrefixMapTrait(HasTraits): value = Trait('one', TraitPrefixMap({'one': 1, 'two': 2, 'three': 3})) class PrefixMapTest(AnyTraitTest): obj = PrefixMapTrait() _default_value = 'one' _good_values = ['o', 'on', 'one', 'tw', 'two', 'th', 'thr', 'thre', 'three'] _mapped_values = [1, 1, 1, 2, 2, 3, 3, 3] _bad_values = ['t', 'one ', ' two', 1, None] def coerce(self, value): return {'o': 'one', 'on': 'one', 'tw': 'two', 'th': 'three'}[value[:2]] class IntRangeTrait(HasTraits): value = Trait(3, TraitRange(2, 5)) class IntRangeTest(AnyTraitTest): obj = IntRangeTrait() _default_value = 3 _good_values = [2, 3, 4, 5] _bad_values = [0, 1, 6, 0.999, 6.01, 'two', '0.999', '6.01', None] def coerce(self, value): try: return int(value) except: try: return int(float(value)) except: return int(long(value)) class FloatRangeTrait(HasTraits): value = Trait(3.0, TraitRange(2.0, 5.0)) class FloatRangeTest(AnyTraitTest): obj = FloatRangeTrait() _default_value = 3.0 _good_values = [2.0, 3.0, 4.0, 5.0, 2.001, 4.999] _bad_values = [0, 1, 6, 0L, 1L, 6L, 1.999, 6.01, 'two', '0.999', '6.01', None] def coerce(self, value): try: return float(value) except: return float(long(value)) # Old style class version: class OTraitTest1: pass class OTraitTest2(OTraitTest1): pass class OTraitTest3(OTraitTest2): pass class OBadTraitTest: pass otrait_test1 = OTraitTest1() class OldInstanceTrait(HasTraits): value = Trait(otrait_test1) class OldInstanceTest(AnyTraitTest): obj = OldInstanceTrait() _default_value = otrait_test1 _good_values = [otrait_test1, OTraitTest1(), OTraitTest2(), OTraitTest3(), None] _bad_values = [0, 0L, 0.0, 0j, OTraitTest1, OTraitTest2, OBadTraitTest(), 'string', u'string', [otrait_test1], (otrait_test1,), {'data': otrait_test1}] # New style class version: class NTraitTest1(object): pass class NTraitTest2(NTraitTest1): pass class NTraitTest3(NTraitTest2): pass class NBadTraitTest: pass ntrait_test1 = NTraitTest1() class NewInstanceTrait(HasTraits): value = Trait(ntrait_test1) class NewInstanceTest(AnyTraitTest): obj = NewInstanceTrait() _default_value = ntrait_test1 _good_values = [ntrait_test1, NTraitTest1(), NTraitTest2(), NTraitTest3(), None] _bad_values = [0, 0L, 0.0, 0j, NTraitTest1, NTraitTest2, NBadTraitTest(), 'string', u'string', [ntrait_test1], (ntrait_test1,), {'data': ntrait_test1}] class FactoryClass(HasTraits): pass class ConsumerClass(HasTraits): x = Instance(FactoryClass, ()) class ConsumerSubclass(ConsumerClass): x = FactoryClass() embedded_instance_trait = Trait('', Str, Instance('traits.has_traits.HasTraits')) class Dummy(HasTraits): x = embedded_instance_trait xl = List(embedded_instance_trait) class RegressionTest(unittest.TestCase): """ Check that fixed bugs stay fixed. """ def test_factory_subclass_no_segfault(self): """ Test that we can provide an instance as a default in the definition of a subclass. """ # There used to be a bug where this would segfault. obj = ConsumerSubclass() obj.x def test_trait_compound_instance(self): """ Test that a deferred Instance() embedded in a TraitCompound handler and then a list will not replace the validate method for the outermost trait. """ # Pass through an instance in order to make the instance trait resolve # the class. d = Dummy() d.xl = [HasTraits()] d.x = 'OK' # Trait(using a function) that must be an odd integer: def odd_integer(object, name, value): try: float(value) if(value % 2) == 1: return int(value) except: pass raise TraitError class OddIntegerTrait(HasTraits): value = Trait(99, odd_integer) class OddIntegerTest(AnyTraitTest): obj = OddIntegerTrait() _default_value = 99 _good_values = [1, 3, 5, 7, 9, 999999999, 1L, 3L, 5L, 7L, 9L, 999999999L, 1.0, 3.0, 5.0, 7.0, 9.0, 999999999.0, -1, -3, -5, -7, -9, -999999999, -1L, -3L, -5L, -7L, -9L, -999999999L, -1.0, -3.0, -5.0, -7.0, -9.0, -999999999.0] _bad_values = [0, 2, -2, 1j, None, '1', [1], (1,), {1: 1}] class NotifierTraits(HasTraits): value1 = Int value2 = Int value1_count = Int value2_count = Int def _anytrait_changed(self, trait_name, old, new): if trait_name == 'value1': self.value1_count += 1 elif trait_name == 'value2': self.value2_count += 1 def _value1_changed(self, old, new): self.value1_count += 1 def _value2_changed(self, old, new): self.value2_count += 1 class NotifierTests(unittest.TestCase): obj = NotifierTraits() def __init__(self, value): unittest.TestCase.__init__(self, value) def setUp(self): obj = self.obj obj.value1 = 0 obj.value2 = 0 obj.value1_count = 0 obj.value2_count = 0 def tearDown(self): obj = self.obj obj.on_trait_change(self.on_value1_changed, 'value1', remove=True) obj.on_trait_change(self.on_value2_changed, 'value2', remove=True) obj.on_trait_change(self.on_anytrait_changed, remove=True) def on_anytrait_changed(self, object, trait_name, old, new): if trait_name == 'value1': self.obj.value1_count += 1 elif trait_name == 'value2': self.obj.value2_count += 1 def on_value1_changed(self): self.obj.value1_count += 1 def on_value2_changed(self): self.obj.value2_count += 1 def test_simple(self): obj = self.obj obj.value1 = 1 self.assertEqual(obj.value1_count, 2) self.assertEqual(obj.value2_count, 0) obj.value2 = 1 self.assertEqual(obj.value1_count, 2) self.assertEqual(obj.value2_count, 2) def test_complex(self): obj = self.obj obj.on_trait_change(self.on_value1_changed, 'value1') obj.value1 = 1 self.assertEqual(obj.value1_count, 3) self.assertEqual(obj.value2_count, 0) obj.on_trait_change(self.on_value2_changed, 'value2') obj.value2 = 1 self.assertEqual(obj.value1_count, 3) self.assertEqual(obj.value2_count, 3) obj.on_trait_change(self.on_anytrait_changed) obj.value1 = 2 self.assertEqual(obj.value1_count, 7) self.assertEqual(obj.value2_count, 3) obj.value1 = 2 self.assertEqual(obj.value1_count, 7) self.assertEqual(obj.value2_count, 3) obj.value2 = 2 self.assertEqual(obj.value1_count, 7) self.assertEqual(obj.value2_count, 7) obj.on_trait_change(self.on_value1_changed, 'value1', remove=True) obj.value1 = 3 self.assertEqual(obj.value1_count, 10) self.assertEqual(obj.value2_count, 7) obj.on_trait_change(self.on_value2_changed, 'value2', remove=True) obj.value2 = 3 self.assertEqual(obj.value1_count, 10) self.assertEqual(obj.value2_count, 10) obj.on_trait_change(self.on_anytrait_changed, remove=True) obj.value1 = 4 self.assertEqual(obj.value1_count, 12) self.assertEqual(obj.value2_count, 10) obj.value2 = 4 self.assertEqual(obj.value1_count, 12) self.assertEqual(obj.value2_count, 12) class RaisesArgumentlessRuntimeError(HasTraits): x = Int(0) def _x_changed(self): raise RuntimeError class TestRuntimeError(unittest.TestCase): def setUp(self): push_exception_handler(lambda *args: None, reraise_exceptions=True) def tearDown(self): pop_exception_handler() def test_runtime_error(self): f = RaisesArgumentlessRuntimeError() self.assertRaises(RuntimeError, setattr, f, 'x', 5) class DelegatedFloatTrait(HasTraits): value = Trait(99.0) class DelegateTrait(HasTraits): value = Delegate('delegate') delegate = Trait(DelegatedFloatTrait()) class DelegateTrait2(DelegateTrait): delegate = Trait(DelegateTrait()) class DelegateTrait3(DelegateTrait): delegate = Trait(DelegateTrait2()) class DelegateTests(unittest.TestCase): def test_delegation(self): obj = DelegateTrait3() self.assertEqual(obj.value, 99.0) parent1 = obj.delegate parent2 = parent1.delegate parent3 = parent2.delegate parent3.value = 3.0 self.assertEqual(obj.value, 3.0) parent2.value = 2.0 self.assertEqual(obj.value, 2.0) self.assertEqual(parent3.value, 3.0) parent1.value = 1.0 self.assertEqual(obj.value, 1.0) self.assertEqual(parent2.value, 2.0) self.assertEqual(parent3.value, 3.0) obj.value = 0.0 self.assertEqual(obj.value, 0.0) self.assertEqual(parent1.value, 1.0) self.assertEqual(parent2.value, 2.0) self.assertEqual(parent3.value, 3.0) del obj.value self.assertEqual(obj.value, 1.0) del parent1.value self.assertEqual(obj.value, 2.0) self.assertEqual(parent1.value, 2.0) del parent2.value self.assertEqual(obj.value, 3.0) self.assertEqual(parent1.value, 3.0) self.assertEqual(parent2.value, 3.0) del parent3.value # Uncommenting the following line allows # the last assertions to pass. However, this # may not be intended behavior, so keeping # the line commented. #del parent2.value self.assertEqual(obj.value, 99.0) self.assertEqual(parent1.value, 99.0) self.assertEqual(parent2.value, 99.0) self.assertEqual(parent3.value, 99.0) # Complex(i.e. 'composite') Traits tests: # Make a TraitCompound handler that does not have a fast_validate so we can # check for a particular regression. slow = Trait(1, TraitRange(1, 3), TraitRange(-3, -1)) try: del slow.handler.fast_validate except AttributeError: pass class complex_value(HasTraits): num1 = Trait(1, TraitRange(1, 5), TraitRange(-5, -1)) num2 = Trait(1, TraitRange(1, 5), TraitPrefixList('one', 'two', 'three', 'four', 'five')) num3 = Trait(1, TraitRange(1, 5), TraitPrefixMap({'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5})) num4 = Trait(1, Trait(1, Tuple, slow), 10) num5 = Trait(1, 10, Trait(1, Tuple, slow)) class test_complex_value(test_base2): obj = complex_value() def test_num1(self): self.check_values('num1', 1, [1, 2, 3, 4, 5, -1, -2, -3, -4, -5], [0, 6, -6, '0', '6', '-6', 0.0, 6.0, -6.0, [1], (1,), {1: 1}, None], [1, 2, 3, 4, 5, -1, -2, -3, -4, -5]) def test_enum_exceptions(self): """ Check that enumerated values can be combined with nested TraitCompound handlers. """ self.check_values('num4', 1, [1, 2, 3, -3, -2, -1, 10, ()], [0, 4, 5, -5, -4, 11], ) self.check_values('num5', 1, [1, 2, 3, -3, -2, -1, 10, ()], [0, 4, 5, -5, -4, 11], ) class list_value(HasTraits): # Trait definitions: list1 = Trait([2], TraitList(Trait([1, 2, 3, 4]), maxlen=4)) list2 = Trait([2], TraitList(Trait([1, 2, 3, 4]), minlen=1, maxlen=4)) alist = List() class test_list_value(test_base2): obj = list_value() def setUp(self): test_base2.setUp(self) self.last_event = None def tearDown(self): del self.last_event def del_range(self, list, index1, index2): del list[index1: index2] def del_extended_slice(self, list, index1, index2, step): del list[index1:index2:step] def check_list(self, list): self.assertEqual(list, [2]) self.assertEqual(len(list), 1) list.append(3) self.assertEqual(len(list), 2) list[1] = 2 self.assertEqual(list[1], 2) self.assertEqual(len(list), 2) list[0] = 1 self.assertEqual(list[0], 1) self.assertEqual(len(list), 2) self.assertRaises(TraitError, self.indexed_assign, list, 0, 5) self.assertRaises(TraitError, list.append, 5) self.assertRaises(TraitError, list.extend, [1, 2, 3]) list.extend([3, 4]) self.assertEqual(list, [1, 2, 3, 4]) self.assertRaises(TraitError, list.append, 1) self.assertRaises(ValueError, self.extended_slice_assign, list, 0, 4, 2, [4, 5, 6]) del list[1] self.assertEqual(list, [1, 3, 4]) del list[0] self.assertEqual(list, [3, 4]) list[:0] = [1, 2] self.assertEqual(list, [1, 2, 3, 4]) self.assertRaises(TraitError, self.indexed_range_assign, list, 0, 0, [1]) del list[0:3] self.assertEqual(list, [4]) self.assertRaises(TraitError, self.indexed_range_assign, list, 0, 0, [4, 5]) def test_list1(self): self.check_list(self.obj.list1) def test_list2(self): self.check_list(self.obj.list2) self.assertRaises(TraitError, self.del_range, self.obj.list2, 0, 1) self.assertRaises(TraitError, self.del_extended_slice, self.obj.list2, 4, -5, -1) def assertLastTraitListEventEqual(self, index, removed, added): self.assertEqual(self.last_event.index, index) self.assertEqual(self.last_event.removed, removed) self.assertEqual(self.last_event.added, added) def test_trait_list_event(self): """ Record TraitListEvent behavior. """ # FIXME: The behavior of TraitListEvent is suboptimal with # respect to extended slice changes. Previously, TraitListObject # used to have a __setitem__() and a separate __setslice__() to # handle non-extended slices. Extended slices were added to the # underlying list object later. The __setitem__() code handled # the new extended slices, but created the TraitListEvent in the # same way it did for an integer index; namely it wrapped the # value with a list. For simple slices, the `index` attribute of # the TraitListEvent is an integer, and the `added` list is just # the list of values added. For an extended slice, the `index` # attribute is the slice object and the `added` list is the list # of values wrapped in another list. self.obj.alist = [1, 2, 3, 4] self.obj.on_trait_change(self._record_trait_list_event, 'alist_items') del self.obj.alist[0] self.assertLastTraitListEventEqual(0, [1], []) self.obj.alist.append(5) self.assertLastTraitListEventEqual(3, [], [5]) self.obj.alist[0:2] = [6, 7] self.assertLastTraitListEventEqual(0, [2, 3], [6, 7]) self.obj.alist[0:2:1] = [8, 9] self.assertLastTraitListEventEqual(0, [6, 7], [8, 9]) old_event = self.last_event self.obj.alist[0:2:1] = [8, 9] # If no values changed, no new TraitListEvent will be generated. self.assertIs(self.last_event, old_event) self.obj.alist[0:4:2] = [10, 11] self.assertLastTraitListEventEqual( slice(0, 4, 2), [[8, 4]], [[10, 11]]) del self.obj.alist[1:4:2] self.assertLastTraitListEventEqual(slice(1, 4, 2), [[9, 5]], []) self.obj.alist = [1, 2, 3, 4] del self.obj.alist[2:4] self.assertLastTraitListEventEqual(2, [3, 4], []) def _record_trait_list_event(self, object, name, old, new): self.last_event = new traits-4.5.0/traits/tests/test_tuple.py000066400000000000000000000036551233213561600202530ustar00rootroot00000000000000""" Unit tests for the Tuple trait type. """ from traits.testing.unittest_tools import unittest, UnittestTools from traits.api import HasTraits, Tuple, TraitError VALUES = ('value1', 33, None) class E(HasTraits): t1 = Tuple(VALUES) t2 = Tuple(*VALUES) class TupleTestCase(unittest.TestCase, UnittestTools): def test_default_values(self): # Check that the default values for t1 and t2 are correctly # derived from the VALUES tuple. e = E() self.assertEqual(e.t1, VALUES) self.assertEqual(e.t2, VALUES) def test_simple_assignment(self): # Check that we can assign different values of the correct type. e = E() with self.assertTraitChanges(e, 't1'): e.t1 = ('other value 1', 77, None) with self.assertTraitChanges(e, 't2'): e.t2 = ('other value 2', 99, None) def test_invalid_assignment_length(self): # Check that assigning a tuple of incorrect length # raises a TraitError. self._assign_invalid_values_length(('str', 44)) self._assign_invalid_values_length(('str', 33, None, [])) def test_type_checking(self): # Test that type checking is done for the 't1' attribute. e = E() other_tuple = ('other value', 75, True) with self.assertRaises(TraitError): e.t1 = other_tuple self.assertEqual(e.t1, VALUES) # Test that no type checking is done for the 't2' attribute. try: e.t2 = other_tuple except TraitError: self.fail('Unexpected TraitError when assigning to tuple.') self.assertEqual(e.t2, other_tuple) def _assign_invalid_values_length(self, values): e = E() with self.assertRaises(TraitError): e.t1 = values self.assertEqual(e.t1, VALUES) with self.assertRaises(TraitError): e.t2 = values self.assertEqual(e.t2, VALUES) traits-4.5.0/traits/tests/test_ui_notifiers.py000066400000000000000000000065251233213561600216200ustar00rootroot00000000000000""" Tests for dynamic notifiers with `dispatch='ui'`. Dynamic notifiers created with the `dispatch='ui'` option dispatch event notifications on the UI thread. The class handling the dispatch, `FastUITraitChangeNotifyWrapper`, is a subclass of `TraitChangeNotifyWrapper`. Most of the functionality of the class is thus already covered by the `TestDynamicNotifiers` test case, and we only need to test that the notification really occurs on the UI thread. At present, `dispatch='ui'` and `dispatch='fast_ui'` have the same effect. """ # Preamble: Try importing Qt, and set QT_FOUND to True on success. try: from pyface.util.guisupport import get_app_qt4, start_event_loop_qt4 # This import is necessary to set the `ui_handler` global variable in # `traits.trait_notifiers`, which is responsible for dispatching the events # to the UI thread. from traitsui.qt4 import toolkit qt4_app = get_app_qt4() except Exception: QT_FOUND = False else: QT_FOUND = True import thread from threading import Thread import time from traits.api import Float, HasTraits from traits.testing.unittest_tools import unittest from traits import trait_notifiers class Foo(HasTraits): foo = Float class TestUINotifiers(unittest.TestCase): """ Tests for dynamic notifiers with `dispatch='ui'`. """ #### 'TestCase' protocol ################################################## def setUp(self): self.notifications = [] #### 'TestUINotifiers' protocol ########################################### def flush_event_loop(self): """ Post and process the Qt events. """ qt4_app.sendPostedEvents() qt4_app.processEvents() def on_foo_notifications(self, obj, name, old, new): thread_id = thread.get_ident() event = (thread_id, (obj, name, old, new)) self.notifications.append(event) #### Tests ################################################################ @unittest.skipIf( not QT_FOUND, "Qt event loop not found, UI dispatch not possible.") def test_notification_from_main_thread(self): obj = Foo() obj.on_trait_change(self.on_foo_notifications, 'foo', dispatch='ui') obj.foo = 3 self.flush_event_loop() notifications = self.notifications self.assertEqual(len(notifications), 1) thread_id, event = notifications[0] self.assertEqual(event, (obj, 'foo', 0, 3)) ui_thread = trait_notifiers.ui_thread self.assertEqual(thread_id, ui_thread) @unittest.skipIf( not QT_FOUND, "Qt event loop not found, UI dispatch not possible.") def test_notification_from_separate_thread(self): obj = Foo() obj.on_trait_change(self.on_foo_notifications, 'foo', dispatch='ui') # Set obj.foo to 3 on a separate thread. def set_foo_to_3(obj): obj.foo = 3 Thread(target=set_foo_to_3, args=(obj,)).start() # Wait for a while to make sure the function has finished. time.sleep(0.1) self.flush_event_loop() notifications = self.notifications self.assertEqual(len(notifications), 1) thread_id, event = notifications[0] self.assertEqual(event, (obj, 'foo', 0, 3)) ui_thread = trait_notifiers.ui_thread self.assertEqual(thread_id, ui_thread) if __name__ == '__main__': unittest.main() traits-4.5.0/traits/tests/test_undefined.py000066400000000000000000000041521233213561600210540ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ from __future__ import absolute_import from traits.testing.unittest_tools import unittest from ..api import HasTraits, Str, Undefined, ReadOnly, Float class Foo(HasTraits): name = Str() original_name = ReadOnly bar = Str baz = Float def _name_changed(self): if self.original_name is Undefined: self.original_name = self.name class Bar(HasTraits): name = Str(Undefined) class UndefinedTestCase(unittest.TestCase): def test_initial_value(self): b = Bar() self.failUnlessEqual(b.name, Undefined) return def test_name_change(self): b = Bar() b.name = 'first' self.failUnlessEqual(b.name, 'first') return def test_read_only_write_once(self): f = Foo() self.failUnlessEqual(f.name, '') self.failUnless(f.original_name is Undefined) f.name = 'first' self.failUnlessEqual(f.name, 'first') self.failUnlessEqual(f.original_name, 'first') f.name = 'second' self.failUnlessEqual(f.name, 'second') self.failUnlessEqual(f.original_name, 'first') return def test_read_only_write_once_from_constructor(self): f = Foo(name='first') f.name = 'first' self.failUnlessEqual(f.name, 'first') self.failUnlessEqual(f.original_name, 'first') f.name = 'second' self.failUnlessEqual(f.name, 'second') self.failUnlessEqual(f.original_name, 'first') return ### EOF ####################################################################### traits-4.5.0/traits/tests/test_weak_ref.py000066400000000000000000000040211233213561600206710ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in /LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # #------------------------------------------------------------------------------ """ Test cases for weakref (WeakRef) traits. """ import contextlib import gc from traits.testing.unittest_tools import unittest, UnittestTools from ..trait_types import Str, WeakRef from ..has_traits import HasTraits class Eggs(HasTraits): name = Str class Spam(HasTraits): eggs = WeakRef(Eggs) @contextlib.contextmanager def restore_gc_state(): """Ensure that gc state is restored on exit of the with statement.""" originally_enabled = gc.isenabled() try: yield finally: if originally_enabled: gc.enable() else: gc.disable() class TestWeakRef(UnittestTools, unittest.TestCase): """ Test cases for weakref (WeakRef) traits. """ def test_set_and_get(self): eggs = Eggs(name='platypus') spam = Spam() self.assertIsNone(spam.eggs) spam.eggs = eggs self.assertIs(spam.eggs, eggs) del eggs self.assertIsNone(spam.eggs) def test_target_freed_notification(self): eggs = Eggs(name='duck') spam = Spam(eggs=eggs) # Removal of the last reference to 'eggs' should trigger notification. with self.assertTraitChanges(spam, 'eggs'): del eggs def test_weakref_trait_doesnt_leak_cycles(self): eggs = Eggs(name='ostrich') with restore_gc_state(): gc.disable() gc.collect() spam = Spam(eggs=eggs) del spam self.assertEqual(gc.collect(), 0) traits-4.5.0/traits/trait_base.py000066400000000000000000000437201233213561600170330ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 06/21/2002 # # Refactored into a separate module: 07/04/2003 # #------------------------------------------------------------------------------ """ Defines common, low-level capabilities needed by the Traits package. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import import os import sys from os import getcwd from os.path import dirname, exists, join from . import _py2to3 # backwards compatibility: trait_base used to provide a patched enumerate enumerate = enumerate # Set the Python version being used: vi = sys.version_info python_version = vi[0] + (float( vi[1] ) / 10.0) try: from traits.etsconfig.api import ETSConfig except: # If the ETSConfig package is not available, fake it: class ETSConfig ( object ): #----------------------------------------------------------------------- # 'object' interface: #----------------------------------------------------------------------- def __init__ ( self ): """ Constructor. Note that this constructor can only ever be called from within this module, since we don't expose the class. """ # Shadow attributes for properties: self._application_data = None self._toolkit = None return #----------------------------------------------------------------------- # 'ETSConfig' interface: #----------------------------------------------------------------------- #-- Property Implementations ------------------------------------------- def _get_application_data ( self ): """ Property getter. This is a directory that applications and packages can safely write non-user accessible data to i.e. configuration information, preferences etc. Do not put anything in here that the user might want to navigate to (e.g. projects, user data files, etc). The actual location differs between operating systems. """ if self._application_data is None: self._application_data = self._initialize_application_data() return self._application_data def _set_application_data ( self, application_data ): """ Property setter. """ self._application_data = application_data application_data = property( _get_application_data, _set_application_data ) def _get_toolkit ( self ): """ Property getter for the GUI toolkit. The value returned is, in order of preference: the value set by the application; the value passed on the command line using the '-toolkit' option; the value specified by the 'ETS_TOOLKIT' environment variable; otherwise the empty string. """ if self._toolkit is None: self._toolkit = self._initialize_toolkit() return self._toolkit def _set_toolkit ( self, toolkit ): """ Property setter for the GUI toolkit. The toolkit can be set more than once, but only if it is the same one each time. An application that is written for a particular toolkit can explicitly set it before any other module that gets the value is imported. """ if self._toolkit and (self._toolkit != toolkit): raise ValueError( 'Cannot set toolkit to %s because it has ' 'already been set to %s' % ( toolkit, self._toolkit ) ) self._toolkit = toolkit return toolkit = property( _get_toolkit, _set_toolkit ) #-- Private Methods ---------------------------------------------------- def _initialize_application_data ( self ): """ Initializes the (default) application data directory. """ if sys.platform == 'win32': environment_variable = 'APPDATA' directory_name = 'Enthought' else: environment_variable = 'HOME' directory_name = '.enthought' # Lookup the environment variable: parent_directory = os.environ.get( environment_variable, None ) if parent_directory is None: raise ValueError( 'Environment variable "%s" not set' % environment_variable ) application_data = os.path.join( parent_directory, directory_name ) # If a file already exists with this name then make sure that it is # a directory! if os.path.exists( application_data ): if not os.path.isdir( application_data ): raise ValueError( 'File "%s" already exists' % application_data ) # Otherwise, create the directory: else: os.makedirs( application_data ) return application_data def _initialize_toolkit ( self ): """ Initializes the toolkit. """ # We handle the command line option even though it doesn't have the # highest precedence because we always want to remove it from the # command line: if '-toolkit' in sys.argv: opt_idx = sys.argv.index( '-toolkit' ) try: opt_toolkit = sys.argv[ opt_idx + 1 ] except IndexError: raise ValueError( 'The -toolkit command line argument must ' 'be followed by a toolkit name' ) # Remove the option: del sys.argv[ opt_idx: opt_idx + 1 ] else: opt_toolkit = None if self._toolkit is not None: toolkit = self._toolkit elif opt_toolkit is not None: toolkit = opt_toolkit else: toolkit = os.environ.get( 'ETS_TOOLKIT', '' ) return toolkit ETSConfig = ETSConfig() #------------------------------------------------------------------------------- # Constants: #------------------------------------------------------------------------------- ClassTypes = _py2to3.ClassTypes SequenceTypes = ( list, tuple ) ComplexTypes = ( float, int ) TypeTypes = ( str, unicode, int, long, float, complex, list, tuple, dict, bool ) TraitNotifier = '__trait_notifier__' # The standard Traits property cache prefix: TraitsCache = '_traits_cache_' #------------------------------------------------------------------------------- # Singleton 'Uninitialized' object: #------------------------------------------------------------------------------- Uninitialized = None class _Uninitialized(object): """ The singleton value of this class represents the uninitialized state of a trait and is specified as the 'old' value in the trait change notification that occurs when the value of a trait is read before being set. """ def __new__(cls): if Uninitialized is not None: return Uninitialized else: self = object.__new__(cls) return self def __repr__(self): return '' def __reduce_ex__(self, protocol): return (_Uninitialized, ()) #: When the first reference to a trait is a 'get' reference, the default value of #: the trait is implicitly assigned and returned as the value of the trait. #: Because of this implicit assignment, a trait change notification is #: generated with the Uninitialized object as the 'old' value of the trait, and #: the default trait value as the 'new' value. This allows other parts of the #: traits package to recognize the assignment as the implicit default value #: assignment, and treat it specially. Uninitialized = _Uninitialized() #------------------------------------------------------------------------------- # Singleton 'Undefined' object (used as undefined trait name and/or value): #------------------------------------------------------------------------------- Undefined = None class _Undefined(object): """ Singleton 'Undefined' object (used as undefined trait name and/or value) """ def __new__(cls): if Undefined is not None: return Undefined else: self = object.__new__(cls) return self def __repr__(self): return '' def __reduce_ex__(self, protocol): return (_Undefined, ()) def __eq__(self, other): return type(self) is type(other) def __hash__(self): return hash(type(self)) def __ne__(self, other): return type(self) is not type(other) #: Singleton object that indicates that a trait attribute has not yet had a #: value set (i.e., its value is undefined). This object is used instead of #: None, because None often has other meanings, such as that a value is not #: used. When a trait attribute is first assigned a value, and its associated #: trait notification handlers are called, Undefined is passed as the *old* #: parameter, to indicate that the attribute previously had no value. Undefined = _Undefined() # Tell the C-base code about singleton 'Undefined' and 'Uninitialized' objects: from . import ctraits ctraits._undefined( Undefined, Uninitialized ) #------------------------------------------------------------------------------- # Singleton 'Missing' object (used as missing method argument marker): #------------------------------------------------------------------------------- class Missing ( object ): """ Singleton 'Missing' object (used as missing method argument marker). """ def __repr__ ( self ): return '' #: Singleton object that indicates that a method argument is missing from a #: type-checked method signature. Missing = Missing() #------------------------------------------------------------------------------- # Singleton 'Self' object (used as object reference to current 'object'): #------------------------------------------------------------------------------- class Self ( object ): """ Singleton 'Self' object (used as object reference to current 'object'). """ def __repr__ ( self ): return '' #: Singleton object that references the current 'object'. Self = Self() #------------------------------------------------------------------------------- # Define a special 'string' coercion function: #------------------------------------------------------------------------------- def strx ( arg ): """ Wraps the built-in str() function to raise a TypeError if the argument is not of a type in StringTypes. """ if type( arg ) in StringTypes: return str( arg ) raise TypeError #------------------------------------------------------------------------------- # Constants: #------------------------------------------------------------------------------- StringTypes = ( str, unicode, int, long, float, complex ) #------------------------------------------------------------------------------- # Define a mapping of coercable types: #------------------------------------------------------------------------------- # Mapping of coercable types. CoercableTypes = { long: ( 11, long, int ), float: ( 11, float, int ), complex: ( 11, complex, float, int ), unicode: ( 11, unicode, str ) } #------------------------------------------------------------------------------- # Return a string containing the class name of an object with the correct # article (a or an) preceding it (e.g. 'an Image', 'a PlotValue'): #------------------------------------------------------------------------------- def class_of ( object ): """ Returns a string containing the class name of an object with the correct indefinite article ('a' or 'an') preceding it (e.g., 'an Image', 'a PlotValue'). """ if isinstance( object, basestring ): return add_article( object ) return add_article( object.__class__.__name__ ) #------------------------------------------------------------------------------- # Return a string containing the right article (i.e. 'a' or 'an') prefixed to # a specified string: #------------------------------------------------------------------------------- def add_article ( name ): """ Returns a string containing the correct indefinite article ('a' or 'an') prefixed to the specified string. """ if name[:1].lower() in 'aeiou': return 'an ' + name return 'a ' + name #---------------------------------------------------------------------------- # Return a 'user-friendly' name for a specified trait: #---------------------------------------------------------------------------- def user_name_for ( name ): """ Returns a "user-friendly" version of a string, with the first letter capitalized and with underscore characters replaced by spaces. For example, ``user_name_for('user_name_for')`` returns ``'User name for'``. """ name = name.replace( '_', ' ' ) result = '' last_lower = False for c in name: if c.isupper() and last_lower: result += ' ' last_lower = c.islower() result += c return result.capitalize() #------------------------------------------------------------------------------- # Gets the path to the traits home directory: #------------------------------------------------------------------------------- _traits_home = None def traits_home ( ): """ Gets the path to the Traits home directory. """ global _traits_home if _traits_home is None: _traits_home = verify_path( join( ETSConfig.application_data, 'traits' ) ) return _traits_home #------------------------------------------------------------------------------- # Verify that a specified path exists, and try to create it if it doesn't: #------------------------------------------------------------------------------- def verify_path ( path ): """ Verify that a specified path exists, and try to create it if it does not exist. """ if not exists( path ): try: os.mkdir( path ) except: pass return path #------------------------------------------------------------------------------- # Returns the name of the module the caller's caller is located in: #------------------------------------------------------------------------------- def get_module_name ( level = 2 ): """ Returns the name of the module that the caller's caller is located in. """ return sys._getframe( level ).f_globals.get( '__name__', '__main__' ) #------------------------------------------------------------------------------- # Returns a resource path calculated from the caller's stack: #------------------------------------------------------------------------------- def get_resource_path ( level = 2 ): """Returns a resource path calculated from the caller's stack. """ module = sys._getframe( level ).f_globals.get( '__name__', '__main__' ) if module != '__main__': # Return the path to the module: try: return dirname( getattr( sys.modules.get( module ), '__file__' ) ) except: # Apparently 'module' is not a registered module...treat it like # '__main__': pass # '__main__' is not a real module, so we need a work around: for path in [ dirname( sys.argv[0] ), getcwd() ]: if exists( path ): break return path #------------------------------------------------------------------------------- # Returns the value of an extended object attribute name of the form: # name[.name2[.name3...]]: #------------------------------------------------------------------------------- def xgetattr( object, xname, default = Undefined ): """ Returns the value of an extended object attribute name of the form: name[.name2[.name3...]]. """ names = xname.split( '.' ) for name in names[:-1]: if default is Undefined: object = getattr( object, name ) else: object = getattr( object, name, None ) if object is None: return default if default is Undefined: return getattr( object, names[-1] ) return getattr( object, names[-1], default ) #------------------------------------------------------------------------------- # Sets the value of an extended object attribute name of the form: # name[.name2[.name3...]]: #------------------------------------------------------------------------------- def xsetattr( object, xname, value ): """ Sets the value of an extended object attribute name of the form: name[.name2[.name3...]]. """ names = xname.split( '.' ) for name in names[:-1]: object = getattr( object, name ) setattr( object, names[-1], value ) #------------------------------------------------------------------------------- # Traits metadata selection functions: #------------------------------------------------------------------------------- def is_none ( value ): return (value is None) def not_none ( value ): return (value is not None) def not_false ( value ): return (value is not False) def not_event ( value ): return (value != 'event') def is_str ( value ): return isinstance( value, basestring ) traits-4.5.0/traits/trait_errors.py000066400000000000000000000105101233213561600174240ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 06/21/2002 # #------------------------------------------------------------------------------ """ Defines the standard exceptions raised by the Traits package. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import import sys from .trait_base import class_of from . import _py2to3 #------------------------------------------------------------------------------- # Utilities #------------------------------------------------------------------------------- def repr_type(obj): """ Return a string representation of a value and its type for readable error messages. """ the_type = _py2to3.type_w_old_style(obj) msg = '%r %r' % (obj, the_type) return msg #------------------------------------------------------------------------------- # 'TraitError' class: #------------------------------------------------------------------------------- class TraitError ( Exception ): def __init__ ( self, args = None, name = None, info = None, value = None ): if name is None: # If the given args is not a tuple then assume that the user intended # it to be the single item in a one-element tuple. if not isinstance(args, tuple): args = args, self.args = args else: # Save the information, in case the 'args' object is not the correct # one, and we need to regenerate the message later: self.name = name self.info = info self.value = value self.desc = None self.prefix = 'The' self.set_desc( None, args ) def set_desc ( self, desc, object = None ): if hasattr( self, 'desc' ): if desc is not None: self.desc = desc if object is not None: self.object = object self.set_args() def set_prefix ( self, prefix ): if hasattr( self, 'prefix' ): self.prefix = prefix self.set_args() def set_args ( self ): if self.desc is None: extra = '' else: extra = ' specifies %s and' % self.desc obj = getattr( self, 'object', None ) # Note: self.args must be a tuple so be sure to leave the trailing # commas. the_type = _py2to3.type_w_old_style(self.value) if obj is not None: self.args = ("%s '%s' trait of %s instance%s must be %s, " "but a value of %s was specified." % ( self.prefix, self.name, class_of(obj), extra, self.info, repr_type(self.value))), else: self.args = ("%s '%s' trait%s must be %s, but a value of %s was " "specified." % (self.prefix, self.name, extra, self.info, repr_type(self.value))), #------------------------------------------------------------------------------- # 'TraitNotificationError' class: #------------------------------------------------------------------------------- class TraitNotificationError ( Exception ): pass #------------------------------------------------------------------------------- # 'DelegationError' class: #------------------------------------------------------------------------------- class DelegationError ( TraitError ): def __init__ ( self, args ): # .args must be a tuple. self.args = args, #------------------------------------------------------------------------------- # Export the defined exceptions to the C-base traits module: #------------------------------------------------------------------------------- from . import ctraits ctraits._exceptions( TraitError, DelegationError ) traits-4.5.0/traits/trait_handlers.py000066400000000000000000003473271233213561600177330ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 06/21/2002 # # Refactored into a separate module: 07/04/2003 # #------------------------------------------------------------------------------ """ Defines the BaseTraitHandler class and a standard set of BaseTraitHandler subclasses for use with the Traits package. A trait handler mediates the assignment of values to object traits. It verifies (via its validate() method) that a specified value is consistent with the object trait, and generates a TraitError exception if it is not consistent. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import import sys import re import copy import copy_reg from types import FunctionType, MethodType TypeType = type from weakref import ref from .trait_base import (strx, SequenceTypes, Undefined, TypeTypes, ClassTypes, CoercableTypes, TraitsCache, class_of, Missing) from .trait_errors import TraitError, repr_type from . import _py2to3 # Patched by 'traits.py' once class is defined! Trait = Event = None # Set up a logger: import logging logger = logging.getLogger( __name__ ) #------------------------------------------------------------------------------- # Constants: #------------------------------------------------------------------------------- # Trait 'comparison_mode' enum values: NO_COMPARE = 0 OBJECT_IDENTITY_COMPARE = 1 RICH_COMPARE = 2 RangeTypes = ( int, long, float ) CallableTypes = ( FunctionType, MethodType ) # Mapping from trait metadata 'type' to CTrait 'type': trait_types = { 'python': 1, 'event': 2 } #------------------------------------------------------------------------------- # Forward references: #------------------------------------------------------------------------------- trait_from = None # Patched by 'traits.py' when real 'trait_from' is defined #------------------------------------------------------------------------------- # Returns the correct argument count for a specified function or method: #------------------------------------------------------------------------------- def _arg_count ( func ): """ Returns the correct argument count for a specified function or method. """ if (type( func ) is MethodType) and (func.im_self is not None): return func.func_code.co_argcount - 1 return func.func_code.co_argcount #------------------------------------------------------------------------------- # Property error handling functions: #------------------------------------------------------------------------------- def _write_only ( object, name ): raise TraitError, "The '%s' trait of %s instance is 'write only'." % ( name, class_of( object ) ) def _read_only ( object, name, value ): raise TraitError, "The '%s' trait of %s instance is 'read only'." % ( name, class_of( object ) ) def _undefined_get ( object, name ): raise TraitError, ("The '%s' trait of %s instance is a property that has " "no 'get' or 'set' method") % ( name, class_of( object ) ) def _undefined_set ( object, name, value ): _undefined_get( object, name ) #------------------------------------------------------------------------------- # 'BaseTraitHandler' class (base class for all user defined traits and trait # handlers): #------------------------------------------------------------------------------- class BaseTraitHandler ( object ): """ The task of this class and its subclasses is to verify the correctness of values assigned to object trait attributes. This class is an alternative to trait validator functions. A trait handler has several advantages over a trait validator function, due to being an object: * Trait handlers have constructors and state. Therefore, you can use them to create *parametrized types*. * Trait handlers can have multiple methods, whereas validator functions can have only one callable interface. This feature allows more flexibility in their implementation, and allows them to handle a wider range of cases, such as interactions with other components. """ default_value_type = -1 has_items = False is_mapped = False editor = None info_text = 'a legal value' def is_valid ( self, object, name, value ): try: validate = self.validate try: validate( object, name, value ) return True except: return False except: return True def error ( self, object, name, value ): """Raises a TraitError exception. Parameters ---------- object : object The object whose attribute is being assigned. name : str The name of the attribute being assigned. value : object The proposed new value for the attribute. Description ----------- This method is called by the validate() method when an assigned value is not valid. Raising a TraitError exception either notifies the user of the problem, or, in the case of compound traits, provides a chance for another trait handler to handle to validate the value. """ raise TraitError( object, name, self.full_info( object, name, value ), value ) def full_info ( self, object, name, value ): """Returns a string describing the type of value accepted by the trait handler. Parameters ---------- object : object The object whose attribute is being assigned. name : str The name of the attribute being assigned. value : The proposed new value for the attribute. Description ----------- The string should be a phrase describing the type defined by the TraitHandler subclass, rather than a complete sentence. For example, use the phrase, "a square sprocket" instead of the sentence, "The value must be a square sprocket." The value returned by full_info() is combined with other information whenever an error occurs and therefore makes more sense to the user if the result is a phrase. The full_info() method is similar in purpose and use to the **info** attribute of a validator function. Note that the result can include information specific to the particular trait handler instance. For example, TraitRange instances return a string indicating the range of values acceptable to the handler (e.g., "an integer in the range from 1 to 9"). If the full_info() method is not overridden, the default method returns the value of calling the info() method. """ return self.info() def info ( self ): """Must return a string describing the type of value accepted by the trait handler. The string should be a phrase describing the type defined by the TraitHandler subclass, rather than a complete sentence. For example, use the phrase, "a square sprocket" instead of the sentence, "The value must be a square sprocket." The value returned by info() is combined with other information whenever an error occurs and therefore makes more sense to the user if the result is a phrase. The info() method is similar in purpose and use to the **info** attribute of a validator function. Note that the result can include information specific to the particular trait handler instance. For example, TraitRange instances return a string indicating the range of values acceptable to the handler (e.g., "an integer in the range from 1 to 9"). If the info() method is not overridden, the default method returns the value of the 'info_text' attribute. """ return self.info_text def repr ( self, value ): """ Returns a printable representation of a value along with its type. .. deprecated :: 3.0.3 This functionality was only used to provide readable error messages. This functionality has been incorporated into TraitError itself. Parameters ---------- value : object The value to be printed. """ import warnings warnings.warn("this functionality has been merged into TraitError; " "just pass the raw value", DeprecationWarning) return repr_type(value) def get_editor ( self, trait = None ): """ Returns a trait editor that allows the user to modify the *trait* trait. Parameters ---------- trait : Trait The trait to be edited. Description ----------- This method only needs to be specified if traits defined using this trait handler require a non-default trait editor in trait user interfaces. The default implementation of this method returns a trait editor that allows the user to type an arbitrary string as the value. For more information on trait user interfaces, refer to the *Traits UI User Guide*. """ if self.editor is None: self.editor = self.create_editor() return self.editor def create_editor ( self ): """ Returns the default traits UI editor to use for a trait. """ from traitsui.api import TextEditor return TextEditor() def inner_traits ( self ): """ Returns a tuple containing the *inner traits* for this trait. Most trait handlers do not have any inner traits, and so will return an empty tuple. The exceptions are **List** and **Dict** trait types, which have inner traits used to validate the values assigned to the trait. For example, in *List( Int )*, the *inner traits* for **List** are ( **Int**, ). """ return () #------------------------------------------------------------------------------- # 'TraitType' (base class for class-based trait definitions: #------------------------------------------------------------------------------- # Create a singleton object for use in the TraitType constructor: class NoDefaultSpecified ( object ): pass NoDefaultSpecified = NoDefaultSpecified() class TraitType ( BaseTraitHandler ): """ Base class for new trait types. This class enables you to define new traits using a class-based approach, instead of by calling the Trait() factory function with an instance of a TraitHandler derived object. When subclassing this class, you can implement one or more of the method signatures below. Note that these methods are defined only as comments, because the absence of method definitions in the subclass definition implicitly provides information about how the trait should operate. The optional methods are as follows: * **get ( self, object, name ):** This is the getter method of a trait that behaves like a property. :Parameters: **object** (*object*) -- The object that the property applies to. **name** (str) -- The name of the property on *object* property. *Description* If neither this method nor the set() method is defined, the value of the trait is handled like a normal object attribute. If this method is not defined, but the set() method is defined, the trait behaves like a write-only property. This method should return the value of the *name* property for the *object* object. * **set ( self, object, name, value )** This is the setter method of a trait that behaves like a property. :Parameters: **object** (*object*) -- The object that the property applies to. **name** (str) -- The name of the property on *object*. **value** -- The value being assigned as the value of the property. *Description* If neither this method nor the get() method is implemented, the trait behaves like a normal trait attribute. If this method is not defined, but the get() method is defined, the trait behaves like a read-only property. This method does not need to return a value, but it should raise a TraitError exception if the specified *value* is not valid and cannot be coerced or adapted to a valid value. * **validate ( self, object, name, value )** This method validates, coerces, or adapts the specified *value* as the value of the *name* trait of the *object* object. This method is called when a value is assigned to an object trait that is based on this subclass of *TraitType* and the class does not contain a definition for either the get() or set() methods. This method must return the original *value* or any suitably coerced or adapted value that is a legal value for the trait. If *value* is not a legal value for the trait, and cannot be coerced or adapted to a legal value, the method should either raise a **TraitError** or call the **error** method to raise the **TraitError** on its behalf. * **is_valid_for ( self, value )** As an alternative to implementing the **validate** method, you can instead implement the **is_valid_for** method, which receives only the *value* being assigned. It should return **True** if the value is valid, and **False** otherwise. * **value_for ( self, value )** As another alternative to implementing the **validate** method, you can instead implement the **value_for** method, which receives only the *value* being assigned. It should return the validated form of *value* if it is valid, or raise a **TraitError** if the value is not valid. * **post_setattr ( self, object, name, value )** This method allows the trait to do additional processing after *value* has been successfully assigned to the *name* trait of the *object* object. For most traits there is no additional processing that needs to be done, and this method need not be defined. It is normally used for creating "shadow" (i.e., "mapped" traits), but other uses may arise as well. This method does not need to return a value, and should normally not raise any exceptions. """ default_value = Undefined metadata = {} def __init__ ( self, default_value = NoDefaultSpecified, **metadata ): """ This constructor method is the only method normally called directly by client code. It defines the trait. The default implementation accepts an optional, untype-checked default value, and caller-supplied trait metadata. Override this method whenever a different method signature or a type-checked default value is needed. """ if default_value is not NoDefaultSpecified: self.default_value = default_value if len( metadata ) > 0: if len( self.metadata ) > 0: self._metadata = self.metadata.copy() self._metadata.update( metadata ) else: self._metadata = metadata else: self._metadata = self.metadata.copy() self.init() def init ( self ): """ Allows the trait to perform any additional initialization needed. """ pass def get_default_value ( self ): """ Returns a tuple of the form: (*default_value_type*, *default_value*) which describes the default value for this trait. The default implementation analyzes the value of the trait's **default_value** attribute and determines an appropriate *default_value_type* for *default_value*. If you need to override this method to provide a different result tuple, the following values are valid values for *default_value_type*: - 0, 1: The *default_value* item of the tuple is the default value. - 2: The object containing the trait is the default value. - 3: A new copy of the list specified by *default_value* is the default value. - 4: A new copy of the dictionary specified by *default_value* is the default value. - 5: A new instance of TraitListObject constructed using the *default_value* list is the default value. - 6: A new instance of TraitDictObject constructed using the *default_value* dictionary is the default value. - 7: *default_value* is a tuple of the form: (*callable*, *args*, *kw*), where *callable* is a callable, *args* is a tuple, and *kw* is either a dictionary or None. The default value is the result obtained by invoking callable(\*args, \*\*kw). - 8: *default_value* is a callable. The default value is the result obtained by invoking *default_value*(*object*), where *object* is the object containing the trait. If the trait has a validate() method, the validate() method is also called to validate the result. - 9: A new instance of TraitSetObject constructed using the *default_value* set is the default value. """ dv = self.default_value dvt = self.default_value_type if dvt < 0: dvt = 0 if isinstance( dv, TraitListObject ): dvt = 5 elif isinstance( dv, list ): dvt = 3 elif isinstance( dv, TraitDictObject ): dvt = 6 elif isinstance( dv, dict ): dvt = 4 elif isinstance( dv, TraitSetObject ): dvt = 9 self.default_value_type = dvt return ( dvt, dv ) def clone ( self, default_value = Missing, **metadata ): """ Clones the contents of this object into a new instance of the same class, and then modifies the cloned copy using the specified *default_value* and *metadata*. Returns the cloned object as the result. Note that subclasses can change the signature of this method if needed, but should always call the 'super' method if possible. """ if 'parent' not in metadata: metadata[ 'parent' ] = self new = self.__class__.__new__( self.__class__ ) new_dict = new.__dict__ new_dict.update( self.__dict__ ) if 'editor' in new_dict: del new_dict[ 'editor' ] if '_metadata' in new_dict: new._metadata = new._metadata.copy() else: new._metadata = {} new._metadata.update( metadata ) if default_value is not Missing: new.default_value = default_value if self.validate is not None: try: new.default_value = self.validate( None, None, default_value ) except: pass return new def get_value ( self, object, name, trait = None ): """ Returns the current value of a property-based trait. """ cname = TraitsCache + name value = object.__dict__.get( cname, Undefined ) if value is Undefined: if trait is None: trait = object.trait( name ) object.__dict__[ cname ] = value = \ trait.default_value_for( object, name ) return value def set_value ( self, object, name, value ): """ Sets the cached value of a property-based trait and fires the appropriate trait change event. """ cname = TraitsCache + name old = object.__dict__.get( cname, Undefined ) if value != old: object.__dict__[ cname ] = value object.trait_property_changed( name, old, value ) #-- Private Methods -------------------------------------------------------- def __call__ ( self, *args, **kw ): """ Allows a derivative trait to be defined from this one. """ return self.clone( *args, **kw ).as_ctrait() def _is_valid_for ( self, object, name, value ): """ Handles a simplified validator that only returns whether or not the original value is valid. """ if self.is_valid_for( value ): return value self.error( object, name, value ) def _value_for ( self, object, name, value ): """ Handles a simplified validator that only receives the value argument. """ try: return self.value_for( value ) except TraitError: self.error( object, name, value ) def as_ctrait ( self ): """ Returns a CTrait corresponding to the trait defined by this class. """ from .traits import CTrait metadata = getattr( self, '_metadata', {} ) getter = getattr( self, 'get', None ) setter = getattr( self, 'set', None ) if (getter is not None) or (setter is not None): if getter is None: getter = _write_only metadata.setdefault( 'transient', True ) elif setter is None: setter = _read_only metadata.setdefault( 'transient', True ) trait = CTrait( 4 ) n = 0 validate = getattr( self, 'validate', None ) if validate is not None: n = _arg_count( validate ) trait.property( getter, _arg_count( getter ), setter, _arg_count( setter ), validate, n ) metadata.setdefault( 'type', 'property' ) else: type = getattr( self, 'ctrait_type', None ) if type is None: type = trait_types.get( metadata.get( 'type' ), 0 ) trait = CTrait( type ) validate = getattr( self, 'fast_validate', None ) if validate is None: validate = getattr( self, 'validate', None ) if validate is None: validate = getattr( self, 'is_valid_for', None ) if validate is not None: validate = self._is_valid_for else: validate = getattr( self, 'value_for', None ) if validate is not None: validate = self._value_for if validate is not None: trait.set_validate( validate ) post_setattr = getattr( self, 'post_setattr', None ) if post_setattr is not None: trait.post_setattr = post_setattr trait.is_mapped( self.is_mapped ) # Note: The use of 'rich_compare' metadata is deprecated; use # 'comparison_mode' metadata instead: rich_compare = metadata.get( 'rich_compare' ) if rich_compare is not None: trait.rich_comparison( rich_compare is True ) comparison_mode = metadata.get( 'comparison_mode' ) if comparison_mode is not None: trait.comparison_mode( comparison_mode ) metadata.setdefault( 'type', 'trait' ) trait.default_value( *self.get_default_value() ) trait.value_allowed( metadata.get( 'trait_value', False ) is True ) trait.handler = self trait.__dict__ = metadata.copy() return trait def __getattr__ ( self, name ): if (name[:2] == '__') and (name[-2:] == '__'): raise AttributeError( "'%s' object has no attribute '%s'" % ( self.__class__.__name__, name ) ) return getattr( self, '_metadata', {} ).get( name, None ) #------------------------------------------------------------------------------- # 'TraitHandler' class (base class for all trait handlers): #------------------------------------------------------------------------------- class TraitHandler ( BaseTraitHandler ): """ The task of this class and its subclasses is to verify the correctness of values assigned to object trait attributes. This class is an alternative to trait validator functions. A trait handler has several advantages over a trait validator function, due to being an object: * Trait handlers have constructors and state. Therefore, you can use them to create *parametrized types*. * Trait handlers can have multiple methods, whereas validator functions can have only one callable interface. This feature allows more flexibility in their implementation, and allows them to handle a wider range of cases, such as interactions with other components. The only method of TraitHandler that *must* be implemented by subclasses is validate(). """ def validate ( self, object, name, value ): """ Verifies whether a new value assigned to a trait attribute is valid. Parameters ---------- object : object The object whose attribute is being assigned. name : str The name of the attribute being assigned. value : The proposed new value for the attribute. Returns ------- If the new value is valid, this method must return either the original value passed to it, or an alternate value to be assigned in place of the original value. Whatever value this method returns is the actual value assigned to *object.name*. Description ----------- This method *must* be implemented by subclasses of TraitHandler. It is called whenever a new value is assigned to a trait attribute defined using this trait handler. If the value received by validate() is not valid for the trait attribute, the method must called the predefined error() method to raise a TraitError exception """ raise TraitError, ( "The '%s' trait of %s instance has an unknown type. " "Contact the developer to correct the problem." % ( name, class_of( object ) ) ) #------------------------------------------------------------------------------- # 'TraitRange' class: #------------------------------------------------------------------------------- class TraitRange ( TraitHandler ): """Ensures that a trait attribute lies within a specified numeric range. TraitRange is the underlying handler for the predefined Range() trait factory. Any value assigned to a trait containing a TraitRange handler must be of the correct type and in the numeric range defined by the TraitRange instance. No automatic coercion takes place. For example:: class Person(HasTraits): age = Trait(0, TraitRange(0, 150)) weight = Trait(0.0, TraitRange(0.0, None)) This example defines a Person class, which has an **age** trait attribute, which must be an integer/long in the range from 0 to 150, and a **weight** trait attribute, which must be a non-negative float value. """ def __init__ ( self, low = None, high = None, exclude_low = False, exclude_high = False ): """ Creates a TraitRange handler. Parameters ---------- low : number The minimum value that the trait can accept. high : number The maximum value that the trait can accept. exclude_low : bool Should the *low* value be exclusive (or inclusive). exclude_high : bool Should the *high* value be exclusive (or inclusive). Description ----------- The *low* and *high* values must be of the same Python numeric type, either ``int``, ``long`` or ``float``. Alternatively, one of the values may be None, to indicate that that portion of the range is unbounded. The *exclude_low* and *exclude_high* values can be used to specify whether the *low* and *high* values should be exclusive (or inclusive). """ vtype = type( high ) if (low is not None) and (vtype is not float): vtype = type( low ) if vtype not in RangeTypes: raise TraitError, ("TraitRange can only be use for int, long or " "float values, but a value of type %s was " "specified." % vtype) if vtype is float: self.validate = self.float_validate kind = 4 self._type_desc = 'a floating point number' if low is not None: low = float( low ) if high is not None: high = float( high ) elif vtype is long: self.validate = self.long_validate self._type_desc = 'a long integer' if low is not None: low = long( low ) if high is not None: high = long( high ) else: self.validate = self.int_validate kind = 3 self._type_desc = 'an integer' if low is not None: low = int( low ) if high is not None: high = int( high ) exclude_mask = 0 if exclude_low: exclude_mask |= 1 if exclude_high: exclude_mask |= 2 if vtype is not long: self.fast_validate = ( kind, low, high, exclude_mask ) # Assign type-corrected arguments to handler attributes self._low = low self._high = high self._exclude_low = exclude_low self._exclude_high = exclude_high def float_validate ( self, object, name, value ): try: if (isinstance( value, RangeTypes ) and ((self._low is None) or (self._exclude_low and (self._low < value)) or ((not self._exclude_low) and (self._low <= value))) and ((self._high is None) or (self._exclude_high and (self._high > value)) or ((not self._exclude_high) and (self._high >= value)))): return float( value ) except: pass self.error( object, name, value ) def int_validate ( self, object, name, value ): try: if (isinstance( value, int ) and ((self._low is None) or (self._exclude_low and (self._low < value)) or ((not self._exclude_low) and (self._low <= value))) and ((self._high is None) or (self._exclude_high and (self._high > value)) or ((not self._exclude_high) and (self._high >= value)))): return value except: pass self.error( object, name, value ) def long_validate ( self, object, name, value ): try: if (isinstance( value, long ) and ((self._low is None) or (self._exclude_low and (self._low < value)) or ((not self._exclude_low) and (self._low <= value))) and ((self._high is None) or (self._exclude_high and (self._high > value)) or ((not self._exclude_high) and (self._high >= value)))): return value except: pass self.error( object, name, value ) def info ( self ): if self._low is None: if self._high is None: return self._type_desc return '%s <%s %s' % ( self._type_desc, '='[ self._exclude_high: ], self._high ) elif self._high is None: return '%s >%s %s' % ( self._type_desc, '='[ self._exclude_low: ], self._low ) return '%s <%s %s <%s %s' % ( self._low, '='[ self._exclude_low: ], self._type_desc, '='[ self._exclude_high: ], self._high ) def get_editor ( self, trait ): from traitsui.api import RangeEditor auto_set = trait.auto_set if auto_set is None: auto_set = True return RangeEditor( self, mode = trait.mode or 'auto', cols = trait.cols or 3, auto_set = auto_set, enter_set = trait.enter_set or False, low_label = trait.low or '', high_label = trait.high or '' ) #------------------------------------------------------------------------------- # 'TraitString' class: #------------------------------------------------------------------------------- class TraitString ( TraitHandler ): """ Ensures that a trait attribute value is a string that satisfied some additional, optional constraints. The optional constraints include minimum and maximum lengths, and a regular expression that the string must match. If the value assigned to the trait attribute is a Python numeric type, the TraitString handler first coerces the value to a string. Values of other non-string types result in a TraitError being raised. The handler then makes sure that the resulting string is within the specified length range and that it matches the regular expression. Example ------- class Person(HasTraits): name = Trait('', TraitString(maxlen=50, regex=r'^[A-Za-z]*$')) This example defines a **Person** class with a **name** attribute, which must be a string of between 0 and 50 characters that consist of only upper and lower case letters. """ def __init__ ( self, minlen = 0, maxlen = sys.maxint, regex = '' ): """ Creates a TraitString handler. Parameters ---------- minlen : int The minimum length allowed for the string. maxlen : int The maximum length allowed for the string. regex : str A Python regular expression that the string must match. """ self.minlen = max( 0, minlen ) self.maxlen = max( self.minlen, maxlen ) self.regex = regex self._init() def _init ( self ): if self.regex != '': self.match = re.compile( self.regex ).match if (self.minlen == 0) and (self.maxlen == sys.maxint): self.validate = self.validate_regex elif (self.minlen == 0) and (self.maxlen == sys.maxint): self.validate = self.validate_str else: self.validate = self.validate_len def validate ( self, object, name, value ): try: value = strx( value ) if ((self.minlen <= len( value ) <= self.maxlen) and (self.match( value ) is not None)): return value except: pass self.error( object, name, value ) def validate_str ( self, object, name, value ): try: return strx( value ) except: pass self.error( object, name, value ) def validate_len ( self, object, name, value ): try: value = strx( value ) if self.minlen <= len( value ) <= self.maxlen: return value except: pass self.error( object, name, value ) def validate_regex ( self, object, name, value ): try: value = strx( value ) if self.match( value ) is not None: return value except: pass self.error( object, name, value ) def info ( self ): msg = '' if (self.minlen != 0) and (self.maxlen != sys.maxint): msg = ' between %d and %d characters long' % ( self.minlen, self.maxlen ) elif self.maxlen != sys.maxint: msg = ' <= %d characters long' % self.maxlen elif self.minlen != 0: msg = ' >= %d characters long' % self.minlen if self.regex != '': if msg != '': msg += ' and' msg += (" matching the pattern '%s'" % self.regex) return 'a string' + msg def __getstate__ ( self ): result = self.__dict__.copy() for name in [ 'validate', 'match' ]: if name in result: del result[ name ] return result def __setstate__ ( self, state ): self.__dict__.update( state ) self._init() #------------------------------------------------------------------------------- # 'TraitCoerceType' class: #------------------------------------------------------------------------------- class TraitCoerceType ( TraitHandler ): """Ensures that a value assigned to a trait attribute is of a specified Python type, or can be coerced to the specified type. TraitCoerceType is the underlying handler for the predefined traits and factories for Python simple types. The TraitCoerceType class is also an example of a parametrized type, because the single TraitCoerceType class allows creating instances that check for totally different sets of values. For example:: class Person(HasTraits): name = Trait('', TraitCoerceType('')) weight = Trait(0.0, TraitCoerceType(float)) In this example, the **name** attribute must be of type ``str`` (string), while the **weight** attribute must be of type ``float``, although both are based on instances of the TraitCoerceType class. Note that this example is essentially the same as writing:: class Person(HasTraits): name = Trait('') weight = Trait(0.0) This simpler form is automatically changed by the Trait() function into the first form, based on TraitCoerceType instances, when the trait attributes are defined. For attributes based on TraitCoerceType instances, if a value that is assigned is not of the type defined for the trait, a TraitError exception is raised. However, in certain cases, if the value can be coerced to the required type, then the coerced value is assigned to the attribute. Only *widening* coercions are allowed, to avoid any possible loss of precision. The following table lists the allowed coercions. ============ ================= Trait Type Coercible Types ============ ================= complex float, int float int long int unicode str ============ ================= """ def __init__ ( self, aType ): """ Creates a TraitCoerceType handler. Parameters ---------- aType : type Either a Python type (e.g., ``str`` or types.StringType) or a Python value (e.g., 'cat'). Description ----------- If *aType* is a value, it is mapped to its corresponding type. For example, the string 'cat' is automatically mapped to ``str`` (i.e., types.StringType). """ if not isinstance( aType, TypeType ): aType = type( aType ) self.aType = aType try: self.fast_validate = CoercableTypes[ aType ] except: self.fast_validate = ( 11, aType ) def validate ( self, object, name, value ): fv = self.fast_validate tv = type( value ) # If the value is already the desired type, then return it: if tv is fv[1]: return value # Else see if it is one of the coercable types: for typei in fv[2:]: if tv is typei: # Return the coerced value: return fv[1]( value ) # Otherwise, raise an exception: self.error( object, name, value ) def info ( self ): return 'a value of %s' % str( self.aType )[1:-1] def get_editor ( self, trait ): # Make the special case of a 'bool' type use the boolean editor: if self.aType is bool: if self.editor is None: from traitsui.api import BooleanEditor self.editor = BooleanEditor() return self.editor # Otherwise, map all other types to a text editor: auto_set = trait.auto_set if auto_set is None: auto_set = True from traitsui.api import TextEditor return TextEditor( auto_set = auto_set, enter_set = trait.enter_set or False, evaluate = self.fast_validate[1] ) #------------------------------------------------------------------------------- # 'TraitCastType' class: #------------------------------------------------------------------------------- class TraitCastType ( TraitCoerceType ): """Ensures that a value assigned to a trait attribute is of a specified Python type, or can be cast to the specified type. This class is similar to TraitCoerceType, but uses casting rather than coercion. Values are cast by calling the type with the value to be assigned as an argument. When casting is performed, the result of the cast is the value assigned to the trait attribute. Any trait that uses a TraitCastType instance in its definition ensures that its value is of the type associated with the TraitCastType instance. For example:: class Person(HasTraits): name = Trait('', TraitCastType('')) weight = Trait(0.0, TraitCastType(float)) In this example, the **name** trait must be of type ``str`` (string), while the **weight** trait must be of type ``float``. Note that this example is essentially the same as writing:: class Person(HasTraits): name = CStr weight = CFloat To understand the difference between TraitCoerceType and TraitCastType (and also between Float and CFloat), consider the following example:: >>>class Person(HasTraits): ... weight = Float ... cweight = CFloat >>> >>>bill = Person() >>>bill.weight = 180 # OK, coerced to 180.0 >>>bill.cweight = 180 # OK, cast to 180.0 >>>bill.weight = '180' # Error, invalid coercion >>>bill.cweight = '180' # OK, cast to float('180') """ def __init__ ( self, aType ): """ Creates a TraitCastType handler. Parameters ---------- aType : type Either a Python type (e.g., ``str`` or types.StringType) or a Python value (e.g., ``'cat``). Description ----------- If *aType* is a Python value, it is automatically mapped to its corresponding Python type. For example, the string 'cat' is automatically mapped to ``str`` (i.e., types.StringType). """ if not isinstance( aType, TypeType ): aType = type( aType ) self.aType = aType self.fast_validate = ( 12, aType ) def validate ( self, object, name, value ): # If the value is already the desired type, then return it: if type( value ) is self.aType: return value # Else try to cast it to the specified type: try: return self.aType( value ) except: self.error( object, name, value ) #------------------------------------------------------------------------------- # 'ThisClass' class: #------------------------------------------------------------------------------- class ThisClass ( TraitHandler ): """Ensures that the trait attribute values belong to the same class (or a subclass) as the object containing the trait attribute. ThisClass is the underlying handler for the predefined traits **This** and **self**, and the elements of ListThis. """ def __init__ ( self, allow_none = False ): """Creates a ThisClass handler. Parameters ---------- allow_none : bool Flag indicating whether None is accepted as a valid value (True or non-zero) or not (False or 0). """ if allow_none: self.validate = self.validate_none self.info = self.info_none self.fast_validate = ( 2, None ) else: self.fast_validate = ( 2, ) def validate ( self, object, name, value ): if isinstance( value, object.__class__ ): return value self.validate_failed( object, name, value ) def validate_none ( self, object, name, value ): if isinstance( value, object.__class__ ) or (value is None): return value self.validate_failed( object, name, value ) def info ( self ): return 'an instance of the same type as the receiver' def info_none ( self ): return 'an instance of the same type as the receiver or None' def validate_failed ( self, object, name, value ): self.error( object, name, value ) def get_editor ( self, trait ): if self.editor is None: from traitsui.api import InstanceEditor self.editor = InstanceEditor( label = trait.label or '', view = trait.view or '', kind = trait.kind or 'live' ) return self.editor #------------------------------------------------------------------------------- # 'TraitInstance' class: #------------------------------------------------------------------------------- # Mapping from 'adapt' parameter values to 'fast validate' values AdaptMap = { 'no': -1, 'yes': 0, 'default': 1 } class TraitInstance ( ThisClass ): """Ensures that trait attribute values belong to a specified Python class or type. TraitInstance is the underlying handler for the predefined trait **Instance** and the elements of List( Instance ). Any trait that uses a TraitInstance handler ensures that its values belong to the specified type or class (or one of its subclasses). For example:: class Employee(HasTraits): manager = Trait(None, TraitInstance(Employee, True)) This example defines a class Employee, which has a **manager** trait attribute, which accepts either None or an instance of Employee as its value. TraitInstance ensures that assigned values are exactly of the type specified (i.e., no coercion is performed). """ def __init__ ( self, aClass, allow_none = True, adapt = 'no', module = '' ): """Creates a TraitInstance handler. Parameters ---------- aClass : class or type A Python class, an instance of a Python class, or a Python type. allow_none : bool Flag indicating whether None is accepted as a valid value. (True or non-zero) or not (False or 0) adapt : str Value indicating how adaptation should be handled: - 'no' (-1): Adaptation is not allowed. - 'yes' (0): Adaptation is allowed and should raise an exception if adaptation fails. - 'default' (1): Adaption is allowed and should return the default value if adaptation fails. module : module The module that the class belongs to. Description ----------- If *aClass* is an instance, it is mapped to the class it is an instance of. """ self._allow_none = allow_none self.adapt = AdaptMap[ adapt ] self.module = module if isinstance( aClass, basestring ): self.aClass = aClass else: if not isinstance( aClass, ClassTypes ): aClass = aClass.__class__ self.aClass = aClass self.set_fast_validate() def allow_none ( self ): self._allow_none = True if hasattr( self, 'fast_validate' ): self.set_fast_validate() def set_fast_validate ( self ): if self.adapt < 0: fast_validate = [ 1, self.aClass ] if self._allow_none: fast_validate = [ 1, None, self.aClass ] if self.aClass in TypeTypes: fast_validate[0] = 0 self.fast_validate = tuple( fast_validate ) else: self.fast_validate = ( 19, self.aClass, self.adapt, self._allow_none ) def validate ( self, object, name, value ): from traits.adaptation.api import adapt if value is None: if self._allow_none: return value else: self.validate_failed( object, name, value ) if isinstance( self.aClass, basestring ): self.resolve_class( object, name, value ) if self.adapt < 0: if isinstance( value, self.aClass ): return value elif self.adapt == 0: try: return adapt( value, self.aClass ) except: pass else: # fixme: The 'None' value is not really correct. It should return # the default value for the trait, but the handler does not have # any way to know this currently. Since the 'fast validate' code # does the correct thing, this should not normally be a problem. return adapt( value, self.aClass, None ) self.validate_failed( object, name, value ) def info ( self ): aClass = self.aClass if type( aClass ) is not str: aClass = aClass.__name__ if self.adapt < 0: result = class_of( aClass ) else: result = ('an implementor of, or can be adapted to implement, %s' % aClass) if self._allow_none: return result + ' or None' return result def resolve_class ( self, object, name, value ): aClass = self.validate_class( self.find_class( self.aClass ) ) if aClass is None: self.validate_failed( object, name, value ) self.aClass = aClass # fixme: The following is quite ugly, because it wants to try and fix # the trait referencing this handler to use the 'fast path' now that the # actual class has been resolved. The problem is finding the trait, # especially in the case of List(Instance('foo')), where the # object.base_trait(...) value is the List trait, not the Instance # trait, so we need to check for this and pull out the List # 'item_trait'. Obviously this does not extend well to other traits # containing nested trait references (Dict?)... self.set_fast_validate() trait = object.base_trait( name ) handler = trait.handler if (handler is not self) and hasattr( handler, 'item_trait' ): trait = handler.item_trait trait.set_validate( self.fast_validate ) def find_class ( self, aClass ): module = self.module col = aClass.rfind( '.' ) if col >= 0: module = aClass[ : col ] aClass = aClass[ col + 1: ] theClass = getattr( sys.modules.get( module ), aClass, None ) if (theClass is None) and (col >= 0): try: mod = __import__( module , globals=globals(), level=1) for component in module.split( '.' )[1:]: mod = getattr( mod, component ) theClass = getattr( mod, aClass, None ) except: pass return theClass def validate_class ( self, aClass ): return aClass def create_default_value ( self, *args, **kw ): aClass = args[0] if isinstance( aClass, basestring ): aClass = self.validate_class( self.find_class( aClass ) ) if aClass is None: raise TraitError, 'Unable to locate class: ' + args[0] return aClass( *args[1:], **kw ) #------------------------------------------------------------------------------- # 'TraitWeakRef' class: #------------------------------------------------------------------------------- class TraitWeakRef ( TraitInstance ): def _get ( self, object, name ): value = getattr( object, name + '_', None ) if value is not None: return value.value() return None def _set ( self, object, name, value ): if value is not None: value = HandleWeakRef( object, name, value ) object.__dict__[ name + '_' ] = value def resolve_class ( self, object, name, value ): # fixme: We have to override this method to prevent the 'fast validate' # from being set up, since the trait using this is a 'property' style # trait which is not currently compatible with the 'fast_validate' # style (causes internal Python SystemError messages). aClass = self.find_class( self.aClass ) if aClass is None: self.validate_failed( object, name, value ) self.aClass = aClass #-- Private Class -------------------------------------------------------------- def _make_value_freed_callback ( object_ref, name ): def _value_freed ( value_ref ): object = object_ref() if object is not None: object.trait_property_changed( name, Undefined, None ) return _value_freed class HandleWeakRef ( object ): def __init__ ( self, object, name, value ): object_ref = ref( object ) _value_freed = _make_value_freed_callback( object_ref, name ) self.object = object_ref self.name = name self.value = ref( value, _value_freed ) #------------------------------------------------------------------------------- # 'TraitClass' class: #------------------------------------------------------------------------------- class TraitClass ( TraitHandler ): """Ensures that trait attribute values are subclasses of a specified class (or the class itself). A value is valid if it is a subclass of the specified class (including the class itself), or it is a string that is equivalent to the name of a valid class. """ def __init__ ( self, aClass ): """Creates a TraitClass handler. Parameters ---------- aClass : class A Python class. Description ----------- If *aClass* is an instance, it is mapped to the class it is an instance of. """ if _py2to3.is_old_style_instance(aClass): aClass = aClass.__class__ self.aClass = aClass def validate ( self, object, name, value ): try: if isinstance( value, basestring ): value = value.strip() col = value.rfind( '.' ) if col >= 0: module_name = value[:col] class_name = value[col + 1:] module = sys.modules.get( module_name ) if module is None: exec( 'import ' + module_name ) module = sys.modules[ module_name ] value = getattr( module, class_name ) else: value = globals().get( value ) if issubclass( value, self.aClass ): return value except: pass self.error( object, name, value ) def info ( self ): return 'a subclass of ' + self.aClass.__name__ #------------------------------------------------------------------------------- # 'TraitFunction' class: #------------------------------------------------------------------------------- class TraitFunction ( TraitHandler ): """Ensures that assigned trait attribute values are acceptable to a specified validator function. TraitFunction is the underlying handler for the predefined trait **Function**, and for the use of function references as arguments to the Trait() function. """ def __init__ ( self, aFunc ): """ Creates a TraitFunction handler. Parameters ---------- aFunc : function A function to validate trait attribute values. Description ----------- The signature of the function passed as an argument must be of the form *function* ( *object*, *name*, *value* ). The function must verify that *value* is a legal value for the *name* trait attribute of *object*. If it is, the value returned by the function is the actual value assigned to the trait attribute. If it is not, the function must raise a TraitError exception. """ if not isinstance( aFunc, CallableTypes ): raise TraitError, "Argument must be callable." self.aFunc = aFunc self.fast_validate = ( 13, aFunc ) def validate ( self, object, name, value ): try: return self.aFunc( object, name, value ) except TraitError: self.error( object, name, value ) def info ( self ): try: return self.aFunc.info except: if self.aFunc.__doc__: return self.aFunc.__doc__ return 'a legal value' #------------------------------------------------------------------------------- # 'TraitEnum' class: #------------------------------------------------------------------------------- class TraitEnum ( TraitHandler ): """ Ensures that a value assigned to a trait attribute is a member of a specified list of values. TraitEnum is the underlying handler for the forms of the Trait() function that take a list of possible values """ def __init__ ( self, *values ): """ Creates a TraitEnum handler. Parameters ---------- values : list or tuple Enumeration of all legal values for a trait. Description ----------- The list of legal values can be provided as a list of values. That is, ``TraitEnum([1, 2, 3])`` and ``TraitEnum(1, 2, 3)`` are equivalent. For example:: class Flower(HasTraits): color = Trait('white', TraitEnum(['white', 'yellow', 'red'])) kind = Trait('annual', TraitEnum('annual', 'perennial')) This example defines a Flower class, which has a **color** trait attribute, which can have as its value, one of the three strings, 'white', 'yellow', or 'red', and a **kind** trait attribute, which can have as its value, either of the strings 'annual' or 'perennial'. This is equivalent to the following class definition:: class Flower(HasTraits): color = Trait(['white', 'yellow', 'red']) kind = Trait('annual', 'perennial') The Trait() function automatically maps traits of the form shown in this example to the form shown in the preceding example whenever it encounters them in a trait definition. """ if (len( values ) == 1) and (type( values[0] ) in SequenceTypes): values = values[0] self.values = tuple( values ) self.fast_validate = ( 5, self.values ) def validate ( self, object, name, value ): if value in self.values: return value self.error( object, name, value ) def info ( self ): return ' or '.join( [ repr( x ) for x in self.values ] ) def get_editor ( self, trait ): from traitsui.api import EnumEditor return EnumEditor( values = self, cols = trait.cols or 3, evaluate = trait.evaluate, mode = trait.mode or 'radio' ) #------------------------------------------------------------------------------- # 'TraitPrefixList' class: #------------------------------------------------------------------------------- class TraitPrefixList ( TraitHandler ): """Ensures that a value assigned to a trait attribute is a member of a list of specified string values, or is a unique prefix of one of those values. TraitPrefixList is a variation on TraitEnum. The values that can be assigned to a trait attribute defined using a TraitPrefixList handler is the set of all strings supplied to the TraitPrefixList constructor, as well as any unique prefix of those strings. That is, if the set of strings supplied to the constructor is described by [*s*\ :sub:`1`\ , *s*\ :sub:`2`\ , ..., *s*\ :sub:`n`\ ], then the string *v* is a valid value for the trait if *v* == *s*\ :sub:`i[:j]` for one and only one pair of values (i, j). If *v* is a valid value, then the actual value assigned to the trait attribute is the corresponding *s*\ :sub:`i` value that *v* matched. Example ------- class Person(HasTraits): married = Trait('no', TraitPrefixList('yes', 'no') The Person class has a **married** trait that accepts any of the strings 'y', 'ye', 'yes', 'n', or 'no' as valid values. However, the actual values assigned as the value of the trait attribute are limited to either 'yes' or 'no'. That is, if the value 'y' is assigned to the **married** attribute, the actual value assigned will be 'yes'. Note that the algorithm used by TraitPrefixList in determining whether a string is a valid value is fairly efficient in terms of both time and space, and is not based on a brute force set of comparisons. """ def __init__ ( self, *values ): """ Creates a TraitPrefixList handler. Parameters ---------- values : list or tuple of strings Enumeration of all legal values for a trait. Description ----------- As with TraitEnum, the list of legal values can be provided as a list of values. That is, ``TraitPrefixList(['one', 'two', 'three'])`` and ``TraitPrefixList('one', 'two', 'three')`` are equivalent. """ if (len( values ) == 1) and (type( values[0] ) in SequenceTypes): values = values[0] self.values = values[:] self.values_ = values_ = {} for key in values: values_[ key ] = key self.fast_validate = ( 10, values_, self.validate ) def validate ( self, object, name, value ): try: if value not in self.values_: match = None n = len( value ) for key in self.values: if value == key[:n]: if match is not None: match = None break match = key if match is None: self.error( object, name, value ) self.values_[ value ] = match return self.values_[ value ] except: self.error( object, name, value ) def info ( self ): return (' or '.join( [ repr( x ) for x in self.values ] ) + ' (or any unique prefix)') def get_editor ( self, trait ): from traitsui.api import EnumEditor return EnumEditor( values = self, cols = trait.cols or 3 ) def __getstate__ ( self ): result = self.__dict__.copy() if 'fast_validate' in result: del result[ 'fast_validate' ] return result #------------------------------------------------------------------------------- # 'TraitMap' class: #------------------------------------------------------------------------------- class TraitMap ( TraitHandler ): """Checks that the value assigned to a trait attribute is a key of a specified dictionary, and also assigns the dictionary value corresponding to that key to a *shadow* attribute. A trait attribute that uses a TraitMap handler is called *mapped* trait attribute. In practice, this means that the resulting object actually contains two attributes: one whose value is a key of the TraitMap dictionary, and the other whose value is the corresponding value of the TraitMap dictionary. The name of the shadow attribute is simply the base attribute name with an underscore ('_') appended. Mapped trait attributes can be used to allow a variety of user-friendly input values to be mapped to a set of internal, program-friendly values. Example ------- >>>class Person(HasTraits): ... married = Trait('yes', TraitMap({'yes': 1, 'no': 0 }) >>> >>>bob = Person() >>>print bob.married yes >>>print bob.married_ 1 In this example, the default value of the **married** attribute of the Person class is 'yes'. Because this attribute is defined using TraitPrefixList, instances of Person have another attribute, **married_**, whose default value is 1, the dictionary value corresponding to the key 'yes'. """ is_mapped = True def __init__ ( self, map ): """ Creates a TraitMap handler. Parameters ---------- map : dict A dictionary whose keys are valid values for the trait attribute, and whose corresponding values are the values for the shadow trait attribute. """ self.map = map self.fast_validate = ( 6, map ) def validate ( self, object, name, value ): try: if value in self.map: return value except: pass self.error( object, name, value ) def mapped_value ( self, value ): return self.map[ value ] def post_setattr ( self, object, name, value ): try: setattr( object, name + '_', self.mapped_value( value ) ) except: # We don't need a fancy error message, because this exception # should always be caught by a TraitCompound handler: raise TraitError, 'Unmappable' def info ( self ): keys = [ repr( x ) for x in self.map.keys() ] keys.sort() return ' or '.join( keys ) def get_editor ( self, trait ): from traitsui.api import EnumEditor return EnumEditor( values = self, cols = trait.cols or 3 ) #------------------------------------------------------------------------------- # 'TraitPrefixMap' class: #------------------------------------------------------------------------------- class TraitPrefixMap ( TraitMap ): """A cross between the TraitPrefixList and TraitMap classes. Like TraitMap, TraitPrefixMap is created using a dictionary, but in this case, the keys of the dictionary must be strings. Like TraitPrefixList, a string *v* is a valid value for the trait attribute if it is a prefix of one and only one key *k* in the dictionary. The actual values assigned to the trait attribute is *k*, and its corresponding mapped attribute is *map*[*k*]. Example ------- mapping = {'true': 1, 'yes': 1, 'false': 0, 'no': 0 } boolean_map = Trait('true', TraitPrefixMap(mapping)) This example defines a Boolean trait that accepts any prefix of 'true', 'yes', 'false', or 'no', and maps them to 1 or 0. """ def __init__ ( self, map ): """Creates a TraitPrefixMap handler. Parameters ---------- map : dict A dictionary whose keys are strings that are valid values for the trait attribute, and whose corresponding values are the values for the shadow trait attribute. """ self.map = map self._map = _map = {} for key in map.keys(): _map[ key ] = key self.fast_validate = ( 10, _map, self.validate ) def validate ( self, object, name, value ): try: if value not in self._map: match = None n = len( value ) for key in self.map.keys(): if value == key[:n]: if match is not None: match = None break match = key if match is None: self.error( object, name, value ) self._map[ value ] = match return self._map[ value ] except: self.error( object, name, value ) def info ( self ): return super( TraitPrefixMap, self ).info() + ' (or any unique prefix)' #------------------------------------------------------------------------------- # 'TraitExpression' class: #------------------------------------------------------------------------------- class TraitExpression ( TraitHandler ): """ Ensures that a value assigned to a trait attribute is a valid Python expression. The compiled form of a valid expression is stored as the mapped value of the trait. """ is_mapped = True def validate ( self, object, name, value ): try: compile( value, '', 'eval' ) return value except: self.error( object, name, value ) def post_setattr ( self, object, name, value ): object.__dict__[ name + '_' ] = self.mapped_value( value ) def info ( self ): return 'a valid Python expression' def mapped_value ( self, value ): return compile( value, '', 'eval' ) #------------------------------------------------------------------------------- # 'TraitCompound' class: #------------------------------------------------------------------------------- class TraitCompound ( TraitHandler ): """ Provides a logical-OR combination of other trait handlers. This class provides a means of creating complex trait definitions by combining several simpler trait definitions. TraitCompound is the underlying handler for the general forms of the Trait() function. A value is a valid value for a trait attribute based on a TraitCompound instance if the value is valid for at least one of the TraitHandler or trait objects supplied to the constructor. In addition, if at least one of the TraitHandler or trait objects is mapped (e.g., based on a TraitMap or TraitPrefixMap instance), then the TraitCompound is also mapped. In this case, any non-mapped traits or trait handlers use identity mapping. """ def __init__ ( self, *handlers ): """ Creates a TraitCompound handler. Parameters ---------- *handlers : list or tuple of TraitHandler or trait objects to be combined. """ if (len( handlers ) == 1) and (type( handlers[0] ) in SequenceTypes): handlers = handlers[0] self.handlers = handlers self.set_validate() def set_validate ( self ): self.is_mapped = False self.has_items = False self.reversable = True post_setattrs = [] mapped_handlers = [] validates = [] fast_validates = [] slow_validates = [] for handler in self.handlers: fv = getattr( handler, 'fast_validate', None ) if fv is not None: validates.append( handler.validate ) if fv[0] == 7: # If this is a nested complex fast validator, expand its # contents and adds its list to our list: fast_validates.extend( fv[1] ) else: # Else just add the entire validator to the list: fast_validates.append( fv ) else: slow_validates.append( handler.validate ) post_setattr = getattr( handler, 'post_setattr', None ) if post_setattr is not None: post_setattrs.append( post_setattr ) if handler.is_mapped: self.is_mapped = True mapped_handlers.append( handler ) else: self.reversable = False if handler.has_items: self.has_items = True self.validates = validates self.slow_validates = slow_validates if self.is_mapped: self.mapped_handlers = mapped_handlers elif hasattr( self, 'mapped_handlers' ): del self.mapped_handlers # If there are any fast validators, then we create a 'complex' fast # validator that composites them: if len( fast_validates ) > 0: # If there are any 'slow' validators, add a special handler at # the end of the fast validator list to handle them: if len( slow_validates ) > 0: fast_validates.append( ( 8, self ) ) # Create the 'complex' fast validator: self.fast_validate = ( 7, tuple( fast_validates ) ) elif hasattr( self, 'fast_validate' ): del self.fast_validate if len( post_setattrs ) > 0: self.post_setattrs = post_setattrs self.post_setattr = self._post_setattr elif hasattr( self, 'post_setattr' ): del self.post_setattr def validate ( self, object, name, value ): for validate in self.validates: try: return validate( object, name, value ) except TraitError: pass return self.slow_validate( object, name, value ) def slow_validate ( self, object, name, value ): for validate in self.slow_validates: try: return validate( object, name, value ) except TraitError: pass self.error( object, name, value ) def full_info ( self, object, name, value ): return ' or '.join( [ x.full_info( object, name, value ) for x in self.handlers ] ) def info ( self ): return ' or '.join( [ x.info() for x in self.handlers ] ) def mapped_value ( self, value ): for handler in self.mapped_handlers: try: return handler.mapped_value( value ) except: pass return value def _post_setattr ( self, object, name, value ): for post_setattr in self.post_setattrs: try: post_setattr( object, name, value ) return except TraitError: pass setattr( object, name + '_', value ) def get_editor ( self, trait ): from traitsui.api import TextEditor, CompoundEditor the_editors = [ x.get_editor( trait ) for x in self.handlers ] text_editor = TextEditor() count = 0 editors = [] for editor in the_editors: if isinstance( text_editor, editor.__class__ ): count += 1 if count > 1: continue editors.append( editor ) return CompoundEditor( editors = editors ) def items_event ( self ): return items_event() #------------------------------------------------------------------------------- # 'TraitTuple' class: #------------------------------------------------------------------------------- class TraitTuple ( TraitHandler ): """ Ensures that values assigned to a trait attribute are tuples of a specified length, with elements that are of specified types. TraitTuple is the underlying handler for the predefined trait **Tuple**, and the trait factory Tuple(). Example ------- rank = Range(1, 13) suit = Trait('Hearts', 'Diamonds', 'Spades', 'Clubs') class Card(HasTraits): value = Trait(TraitTuple(rank, suit)) This example defines a Card class, which has a **value** trait attribute, which must be a tuple of two elments. The first element must be an integer in the range from 1 to 13, and the second element must be one of the four strings, 'Hearts', 'Diamonds', 'Spades', or 'Clubs'. """ def __init__ ( self, *args ): """ Creates a TraitTuple handler. Parameters ---------- *args : A list of traits, each *trait*\ :sub:`i` specifies the type that the *i*\ th element of a tuple must be. Description ----------- Each *trait*\ :sub:`i` must be either a trait, or a value that can be converted to a trait using the Trait() function. The resulting trait handler accepts values that are tuples of the same length as *args*, and whose *i*\ th element is of the type specified by *trait*\ :sub:`i`. """ self.types = tuple( [ trait_from( arg ) for arg in args ] ) self.fast_validate = ( 9, self.types ) def validate ( self, object, name, value ): try: if isinstance( value, tuple ): types = self.types if len( value ) == len( types ): values = [] for i, type in enumerate( types ): values.append( type.handler.validate( object, name, value[i] ) ) return tuple( values ) except: pass self.error( object, name, value ) def full_info ( self, object, name, value ): return 'a tuple of the form: (%s)' % (', '.join( [ self._trait_info( type, object, name, value ) for type in self.types ] )) def _trait_info ( self, type, object, name, value ): handler = type.handler if handler is None: return 'any value' return handler.full_info( object, name, value ) def get_editor ( self, trait ): from traitsui.api import TupleEditor return TupleEditor( types = self.types, labels = trait.labels or [], cols = trait.cols or 1 ) #------------------------------------------------------------------------------- # 'TraitCallable' class: #------------------------------------------------------------------------------- class TraitCallable ( TraitHandler ): """Ensures that the value of a trait attribute is a callable Python object (usually a function or method). """ def validate ( self, object, name, value ): if (value is None) or callable( value ): return value self.error( object, name, value ) def info ( self ): return 'a callable value' #------------------------------------------------------------------------------- # 'TraitListEvent' class: #------------------------------------------------------------------------------- class TraitListEvent ( object ): #--------------------------------------------------------------------------- # Initialize the object: #--------------------------------------------------------------------------- def __init__ ( self, index = 0, removed = None, added = None ): self.index = index if removed is None: removed = [] self.removed = removed if added is None: added = [] self.added = added #------------------------------------------------------------------------------- # 'TraitList' class: #------------------------------------------------------------------------------- class TraitList ( TraitHandler ): """ Ensures that a value assigned to a trait attribute is a list containing elements of a specified type, and that the length of the list is also within a specified range. TraitList also makes sure that any changes made to the list after it is assigned to the trait attribute do not violate the list's type and length constraints. TraitList is the underlying handler for the predefined list-based traits. Example ------- class Card(HasTraits): pass class Hand(HasTraits): cards = Trait([], TraitList(Trait(Card), maxlen=52)) This example defines a Hand class, which has a **cards** trait attribute, which is a list of Card objects and can have from 0 to 52 items in the list. """ info_trait = None default_value_type = 5 _items_event = None def __init__ ( self, trait = None, minlen = 0, maxlen = sys.maxint, has_items = True ): """ Creates a TraitList handler. Parameters ---------- trait : Trait The type of items the list can contain. minlen : int The minimum length of the list. maxlen : int The maximum length of the list. has_items : bool Flag indicating whether the list contains elements. Description ----------- If *trait* is None or omitted, then no type checking is performed on any items in the list; otherwise, *trait* must be either a trait, or a value that can be converted to a trait using the Trait() function. """ self.item_trait = trait_from( trait ) self.minlen = max( 0, minlen ) self.maxlen = max( minlen, maxlen ) self.has_items = has_items def clone ( self ): return TraitList( self.item_trait, self.minlen, self.maxlen, self.has_items ) def validate ( self, object, name, value ): if (isinstance( value, list ) and (self.minlen <= len( value ) <= self.maxlen)): return TraitListObject( self, object, name, value ) self.error( object, name, value ) def full_info ( self, object, name, value ): if self.minlen == 0: if self.maxlen == sys.maxint: size = 'items' else: size = 'at most %d items' % self.maxlen else: if self.maxlen == sys.maxint: size = 'at least %d items' % self.minlen else: size = 'from %s to %s items' % ( self.minlen, self.maxlen ) handler = self.item_trait.handler if handler is None: info = '' else: info = ' which are %s' % handler.full_info( object, name, value ) return 'a list of %s%s' % ( size, info ) def get_editor ( self, trait ): handler = self.item_trait.handler if isinstance( handler, TraitInstance ) and (trait.mode != 'list'): from .api import HasTraits if issubclass( handler.aClass, HasTraits ): try: object = handler.aClass() from traitsui.table_column import ObjectColumn from traitsui.table_filter import (EvalFilterTemplate, RuleFilterTemplate, MenuFilterTemplate, EvalTableFilter) from traitsui.api import TableEditor return TableEditor( columns = [ ObjectColumn( name = name ) for name in object.editable_traits() ], filters = [ RuleFilterTemplate, MenuFilterTemplate, EvalFilterTemplate ], edit_view = '', orientation = 'vertical', search = EvalTableFilter(), deletable = True, row_factory = handler.aClass ) except: pass from traitsui.api import ListEditor return ListEditor( trait_handler = self, rows = trait.rows or 5, use_notebook = trait.use_notebook is True, page_name = trait.page_name or '' ) def items_event ( self ): return items_event() def items_event ( ): if TraitList._items_event is None: TraitList._items_event = \ Event( TraitListEvent, is_base = False ).as_ctrait() return TraitList._items_event #------------------------------------------------------------------------------- # 'TraitListObject' class: #------------------------------------------------------------------------------- class TraitListObject ( list ): def __init__ ( self, trait, object, name, value ): self.trait = trait self.object = ref( object ) self.name = name self.name_items = None if trait.has_items: self.name_items = name + '_items' # Do the validated 'setslice' assignment without raising an # 'items_changed' event: if trait.minlen <= len( value ) <= trait.maxlen: try: validate = trait.item_trait.handler.validate if validate is not None: value = [ validate( object, name, val ) for val in value ] list.__setitem__(self, slice(0, 0), value ) return except TraitError, excp: excp.set_prefix( 'Each element of the' ) raise excp self.len_error( len( value ) ) def _send_trait_items_event(self, name, event, items_event=None): """ Send a TraitListEvent to the owning object if there is one. """ object = self.object() if object is not None: if items_event is None and hasattr(self, 'trait'): items_event = self.trait.items_event() object.trait_items_event(name, event, items_event) def __deepcopy__ ( self, memo ): id_self = id( self ) if id_self in memo: return memo[ id_self ] memo[ id_self ] = result = TraitListObject( self.trait, lambda: None, self.name, [ copy.deepcopy( x, memo ) for x in self ] ) return result def __setitem__ ( self, key, value ): self_trait = getattr(self, 'trait', None) if self_trait is None: return list.__setitem__(self, key, value) try: removed = self[ key ] except: removed = [] try: object = self.object() validate = self.trait.item_trait.handler.validate name = self.name if isinstance(key, slice): values = value try: key = slice(*key.indices(len( self ))) except (ValueError, TypeError): raise TypeError('must assign sequence (not "%s") to slice' % ( values.__class__.__name__ )) slice_len = max(0, (key.stop - key.start) // key.step) delta = len( values ) - slice_len if key.step != 1 and delta != 0: raise ValueError( 'attempt to assign sequence of size %d to extended slice of size %d' % ( len( values ), slice_len )) newlen = (len(self) + delta) if not (self_trait.minlen <= newlen <= self_trait.maxlen): self.len_error( newlen ) return if validate is not None: values = [ validate( object, name, value ) for value in values ] value = values if key.step == 1: # FIXME: Bug-for-bug compatibility with old __setslice__ code. # In this case, we return a TraitListEvent with an # index=key.start and the removed and added lists as they # are. index = key.start else: # Otherwise, we have an extended slice which was handled, # badly, by __setitem__ before. In this case, we return the # removed and added lists wrapped in another list. index = key values = [values] removed = [removed] else: if validate is not None: value = validate( object, name, value ) values = [ value ] removed = [ removed ] delta = 0 index = len( self ) + key if key < 0 else key list.__setitem__( self, key, value ) if self.name_items is not None: if delta == 0: try: if removed == values: return except: # Treat incomparable values as equal: pass self._send_trait_items_event( self.name_items, TraitListEvent( index, removed, values ) ) except TraitError, excp: excp.set_prefix( 'Each element of the' ) raise excp if sys.version_info[0] < 3: def __setslice__ ( self, i, j, values ): self.__setitem__(slice(i,j), values) def __delitem__ ( self, key ): trait = getattr(self, 'trait', None) if trait is None: return list.__delitem__(self, key) try: removed = self[ key ] except: removed = [] if isinstance(key,slice): key = slice(*key.indices(len( self ))) slice_len = max(0, (key.stop - key.start) // key.step) delta = slice_len if key.step == 1: # FIXME: See corresponding comment in __setitem__() for # explanation. index = key.start else: index = key removed = [removed] else: delta = 1 index = len( self ) + key + 1 if key < 0 else key removed = [ removed ] if not (trait.minlen <= (len( self ) - delta)): self.len_error( len( self ) - delta) return list.__delitem__( self, key ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitListEvent( index, removed ) ) if sys.version_info[0] < 3: def __delslice__ ( self, i, j ): self.__delitem__(slice(i,j)) def append ( self, value ): trait = getattr( self, 'trait', None ) if trait is None: list.append( self, value ) return if trait.minlen <= (len( self ) + 1) <= trait.maxlen: try: validate = trait.item_trait.handler.validate object = self.object() if validate is not None: value = validate( object, self.name, value ) list.append( self, value ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitListEvent( len( self ) - 1, None, [ value ] ), trait.items_event() ) return except TraitError, excp: excp.set_prefix( 'Each element of the' ) raise excp self.len_error( len( self ) + 1 ) def insert ( self, index, value ): trait = getattr( self, 'trait', None ) if trait is None: return list.insert(self, index, value) if trait.minlen <= (len( self ) + 1) <= trait.maxlen: try: validate = trait.item_trait.handler.validate object = self.object() if validate is not None: value = validate( object, self.name, value ) list.insert( self, index, value ) if self.name_items is not None: if index < 0: index = len( self ) + index - 1 self._send_trait_items_event( self.name_items, TraitListEvent( index, None, [ value ] ), trait.items_event() ) return except TraitError, excp: excp.set_prefix( 'Each element of the' ) raise excp self.len_error( len( self ) + 1 ) def extend ( self, xlist ): trait = getattr( self, 'trait', None ) if trait is None: list.extend( self, xlist ) return try: len_xlist = len( xlist ) except: raise TypeError, "list.extend() argument must be iterable" if (trait.minlen <= (len( self ) + len_xlist) <= trait.maxlen): object = self.object() name = self.name validate = trait.item_trait.handler.validate try: if validate is not None: xlist = [ validate( object, name, value ) for value in xlist ] list.extend( self, xlist ) if (self.name_items is not None) and (len( xlist ) != 0): self._send_trait_items_event( self.name_items, TraitListEvent( len( self ) - len( xlist ), None, xlist ), trait.items_event() ) return except TraitError, excp: excp.set_prefix( 'The elements of the' ) raise excp self.len_error( len( self ) + len( xlist ) ) def remove ( self, value ): trait = getattr(self, 'trait', None) if trait is None: list.remove(self, value) return if trait.minlen < len( self ): try: index = self.index( value ) removed = [ self[ index ] ] except: pass list.remove( self, value ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitListEvent( index, removed ) ) elif len(self) == 0: # Let whatever system error (ValueError) should be raised be raised. list.remove(self, value) else: self.len_error( len( self ) - 1 ) def sort ( self, cmp = None, key = None, reverse = False ): removed = self[:] list.sort( self, cmp = cmp, key = key, reverse = reverse ) if (getattr(self, 'name_items', None) is not None and getattr(self, 'trait', None) is not None): self._send_trait_items_event( self.name_items, TraitListEvent( 0, removed, self[:] ) ) def reverse ( self ): removed = self[:] if len( self ) > 1: list.reverse( self ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitListEvent( 0, removed, self[:] ) ) def pop ( self, *args ): if not hasattr(self, 'trait'): return list.pop(self, *args) if self.trait.minlen < len( self ): if len( args ) > 0: index = args[0] else: index = -1 try: removed = [ self[ index ] ] except: pass result = list.pop( self, *args ) if self.name_items is not None: if index < 0: index = len( self ) + index + 1 self._send_trait_items_event( self.name_items, TraitListEvent( index, removed ) ) return result else: self.len_error( len( self ) - 1 ) def rename ( self, name ): trait = self.object()._trait( name, 0 ) if trait is not None: self.name = name self.trait = trait.handler def len_error ( self, len ): raise TraitError( "The '%s' trait of %s instance must be %s, " "but you attempted to change its length to %d element%s." % ( self.name, class_of( self.object() ), self.trait.full_info( self.object(), self.name, Undefined ), len, 's'[ len == 1: ] ) ) def __getstate__ ( self ): result = self.__dict__.copy() result.pop('object', None) result.pop('trait', None) return result def __setstate__ ( self, state ): name = state.setdefault('name', '') object = state.pop( 'object', None ) if object is not None: self.object = ref( object ) self.rename( name ) else: self.object = lambda: None self.__dict__.update( state ) #------------------------------------------------------------------------------- # 'TraitSetEvent' class: #------------------------------------------------------------------------------- class TraitSetEvent ( object ): #--------------------------------------------------------------------------- # Initialize the object: #--------------------------------------------------------------------------- def __init__ ( self, removed = None, added = None ): if removed is None: removed = set() self.removed = removed if added is None: added = set() self.added = added #------------------------------------------------------------------------------- # 'TraitSetObject' class: #------------------------------------------------------------------------------- class TraitSetObject ( set ): def __init__ ( self, trait, object, name, value ): self.trait = trait self.object = ref( object ) self.name = name self.name_items = None if trait.has_items: self.name_items = name + '_items' # Validate and assign the initial set value: try: validate = trait.item_trait.handler.validate if validate is not None: value = [ validate( object, name, val ) for val in value ] super( TraitSetObject, self ).__init__( value ) return except TraitError, excp: excp.set_prefix( 'Each element of the' ) raise excp def _send_trait_items_event(self, name, event, items_event=None): """ Send a TraitDictEvent to the owning object if there is one. """ object = self.object() if object is not None: if items_event is None and hasattr(self, 'trait'): items_event = self.trait.items_event() object.trait_items_event(name, event, items_event) def __deepcopy__ ( self, memo ): id_self = id( self ) if id_self in memo: return memo[ id_self ] memo[ id_self ] = result = TraitSetObject( self.trait, lambda: None, self.name, [ copy.deepcopy( x, memo ) for x in self ] ) return result def update ( self, value ): if not hasattr(self, 'trait'): return set.update(self, value) try: added = value.difference( self ) if len( added ) > 0: object = self.object() validate = self.trait.item_trait.handler.validate if validate is not None: name = self.name added = set( [ validate( object, name, item ) for item in added ] ) set.update( self, added ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitSetEvent( None, added ) ) except TraitError, excp: excp.set_prefix( 'Each element of the' ) raise excp def intersection_update ( self, value ): removed = self.difference( value ) if len( removed ) > 0: set.difference_update( self, removed ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitSetEvent( removed ) ) def difference_update ( self, value ): removed = self.intersection( value ) if len( removed ) > 0: set.difference_update( self, removed ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitSetEvent( removed ) ) def symmetric_difference_update ( self, value ): if not hasattr(self, 'trait'): return set.symmetric_difference_update(self, value) removed = self.intersection( value ) added = value.difference( self ) if (len( removed ) > 0) or (len( added ) > 0): object = self.object() set.difference_update( self, removed ) if len( added ) > 0: validate = self.trait.item_trait.handler.validate if validate is not None: name = self.name added = set( [ validate( object, name, item ) for item in added ] ) set.update( self, added ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitSetEvent( removed, added ) ) def add ( self, value ): if not hasattr(self, 'trait'): return set.add(self, value) if value not in self: try: object = self.object() validate = self.trait.item_trait.handler.validate if validate is not None: value = validate( object, self.name, value ) set.add( self, value ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitSetEvent( None, set( [ value ] ) ) ) except TraitError, excp: excp.set_prefix( 'Each element of the' ) raise excp def remove ( self, value ): set.remove( self, value ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitSetEvent( set( [ value ] ) ) ) def discard ( self, value ): if value in self: self.remove( value ) def pop ( self ): value = set.pop( self ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitSetEvent( set( [ value ] ) ) ) return value def clear ( self ): removed = set( self ) set.clear( self ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitSetEvent( removed ) ) def copy ( self ): """ Return a true ``set`` object with a copy of the data. """ return set(self) def __reduce_ex__(self, protocol=None): """ Overridden to make sure we call our custom __getstate__. """ return (copy_reg._reconstructor, (type(self), set, list(self)), self.__getstate__()) def __getstate__ ( self ): result = self.__dict__.copy() result.pop('object', None) result.pop('trait', None) return result def __setstate__ ( self, state ): name = state.setdefault('name', '') object = state.pop( 'object', None ) if object is not None: self.object = ref( object ) self.rename( name ) else: self.object = lambda: None self.__dict__.update( state ) #------------------------------------------------------------------------------- # 'TraitDictEvent' class: #------------------------------------------------------------------------------- class TraitDictEvent ( object ): def __init__ ( self, added = None, changed = None, removed = None ): """ Parameters ---------- added : dict New keys and values. changed : dict Updated keys and their previous values. removed : dict Old keys and values that were just removed. """ # Construct new empty dicts every time instead of using a default value # in the method argument, just in case someone gets the bright idea of # modifying the dict they get in-place. if added is None: added = {} self.added = added if changed is None: changed = {} self.changed = changed if removed is None: removed = {} self.removed = removed #------------------------------------------------------------------------------- # 'TraitDict' class: #------------------------------------------------------------------------------- class TraitDict ( TraitHandler ): """ Ensures that values assigned to a trait attribute are dictionaries whose keys and values are of specified types. TraitDict also makes sure that any changes to keys or values made that are made after the dictionary is assigned to the trait attribute satisfy the type constraints. TraitDict is the underlying handler for the dictionary-based predefined traits, and the Dict() trait factory. Example ------- class WorkoutClass(HasTraits): member_weights = Trait({}, TraitDict(str, float)) This example defines a WorkoutClass class containing a *member_weights* trait attribute whose value must be a dictionary containing keys that are strings (i.e., the members' names) and whose associated values must be floats (i.e., their most recently recorded weight). """ info_trait = None default_value_type = 6 _items_event = None def __init__ ( self, key_trait = None, value_trait = None, has_items = True ): """ Creates a TraitDict handler. Parameters ---------- key_trait : trait The type for the dictionary keys. value_trait : trait The type for the dictionary values. has_items : bool Flag indicating whether the dictionary contains entries. Description ----------- If *key_trait* is None or omitted, the keys in the dictionary can be of any type. Otherwise, *key_trait* must be either a trait, or a value that can be converted to a trait using the Trait() function. In this case, all dictionary keys are checked to ensure that they are of the type specified by *key_trait*. If *value_trait* is None or omitted, the values in the dictionary can be of any type. Otherwise, *value_trait* must be either a trait, or a value that can be converted to a trait using the Trait() function. In this case, all dictionary values are checked to ensure that they are of the type specified by *value_trait*. """ self.key_trait = trait_from( key_trait ) self.value_trait = trait_from( value_trait ) self.has_items = has_items handler = self.value_trait.handler if handler.has_items: handler = handler.clone() handler.has_items = False self.value_handler = handler def clone ( self ): return TraitDict( self.key_trait, self.value_trait, self.has_items ) def validate ( self, object, name, value ): if isinstance( value, dict ): return TraitDictObject( self, object, name, value ) self.error( object, name, value ) def full_info ( self, object, name, value ): extra = '' handler = self.key_trait.handler if handler is not None: extra = (' with keys which are %s' % handler.full_info( object, name, value)) handler = self.value_handler if handler is not None: if extra == '': extra = ' with' else: extra += ' and' extra += (' values which are %s' % handler.full_info( object, name, value )) return 'a dictionary%s' % extra def get_editor ( self, trait ): if self.editor is None: from traitsui.api import TextEditor self.editor = TextEditor( evaluate = eval ) return self.editor def items_event ( self ): if TraitDict._items_event is None: TraitDict._items_event = \ Event( TraitDictEvent, is_base = False ).as_ctrait() return TraitDict._items_event #------------------------------------------------------------------------------- # 'TraitDictObject' class: #------------------------------------------------------------------------------- class TraitDictObject ( dict ): def __init__ ( self, trait, object, name, value ): self.trait = trait self.object = ref( object ) self.name = name self.name_items = None if trait.has_items: self.name_items = name + '_items' if len( value ) > 0: dict.update( self, self._validate_dic( value ) ) def _send_trait_items_event(self, name, event, items_event=None): """ Send a TraitDictEvent to the owning object if there is one. """ object = self.object() if object is not None: if items_event is None and hasattr(self, 'trait'): items_event = self.trait.items_event() object.trait_items_event(name, event, items_event) def __deepcopy__ ( self, memo ): id_self = id( self ) if id_self in memo: return memo[ id_self ] memo[ id_self ] = result = TraitDictObject( self.trait, lambda: None, self.name, dict([ copy.deepcopy( x, memo ) for x in self.iteritems() ]) ) return result def __setitem__ ( self, key, value ): trait = getattr( self, 'trait', None ) if trait is None: dict.__setitem__( self, key, value ) return object = self.object() try: validate = trait.key_trait.handler.validate if validate is not None: key = validate( object, self.name, key ) except TraitError, excp: excp.set_prefix( 'Each key of the' ) raise excp try: validate = trait.value_handler.validate if validate is not None: value = validate( object, self.name, value ) if self.name_items is not None: if key in self: added = None old = self[ key ] changed = { key: old } else: added = { key: value } changed = None dict.__setitem__( self, key, value ) if self.name_items is not None: if added is None: try: if old == value: return except: # Treat incomparable objects as unequal: pass self._send_trait_items_event( self.name_items, TraitDictEvent( added, changed ), trait.items_event() ) except TraitError, excp: excp.set_prefix( 'Each value of the' ) raise excp def __delitem__ ( self, key ): if self.name_items is not None: removed = { key: self[ key ] } dict.__delitem__( self, key ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitDictEvent( removed = removed ) ) def clear ( self ): if len( self ) > 0: if self.name_items is not None: removed = self.copy() dict.clear( self ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitDictEvent( removed = removed ) ) def update ( self, dic ): trait = getattr( self, 'trait', None ) if trait is None: dict.update( self, dic ) return if len( dic ) > 0: new_dic = self._validate_dic( dic ) if self.name_items is not None: added = {} changed = {} for key, value in new_dic.iteritems(): if key in self: changed[ key ] = self[ key ] else: added[ key ] = value dict.update( self, new_dic ) self._send_trait_items_event( self.name_items, TraitDictEvent( added = added, changed = changed ) ) else: dict.update( self, new_dic ) def setdefault ( self, key, value = None ): if key in self: return self[ key ] self[ key ] = value result = self[ key ] if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitDictEvent( added = { key: result } ) ) return result def pop ( self, key, value = Undefined ): if (value is Undefined) or key in self: result = dict.pop( self, key ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitDictEvent( removed = { key: result } ) ) return result return value def popitem ( self ): result = dict.popitem( self ) if self.name_items is not None: self._send_trait_items_event( self.name_items, TraitDictEvent( removed = { result[0]: result[1] } ) ) return result def rename ( self, name ): trait = self.object()._trait( name, 0 ) if trait is not None: self.name = name self.trait = trait.handler else: logger.debug( "rename: No 'trait' in %s for '%s'" % ( self.object(), name ) ) def __getstate__ ( self ): result = self.__dict__.copy() result.pop('object', None) result.pop('trait', None) return result def __setstate__ ( self, state ): name = state.setdefault('name', '') object = state.pop( 'object', None ) if object is not None: self.object = ref( object ) self.rename( name ) else: self.object = lambda: None self.__dict__.update( state ) #-- Private Methods ------------------------------------------------------------ def _validate_dic ( self, dic ): name = self.name new_dic = {} key_validate = self.trait.key_trait.handler.validate if key_validate is None: key_validate = lambda object, name, key: key value_validate = self.trait.value_trait.handler.validate if value_validate is None: value_validate = lambda object, name, value: value object = self.object() for key, value in dic.iteritems(): try: key = key_validate( object, name, key ) except TraitError, excp: excp.set_prefix( 'Each key of the' ) raise excp try: value = value_validate( object, name, value ) except TraitError, excp: excp.set_prefix( 'Each value of the' ) raise excp new_dic[ key ] = value return new_dic #------------------------------------------------------------------------------- # Tell the C-based traits module about 'TraitListObject', 'TraitSetObject and # 'TraitDictObject', and the PyProtocols 'adapt' function: #------------------------------------------------------------------------------- from . import ctraits ctraits._list_classes( TraitListObject, TraitSetObject, TraitDictObject ) def _adapt_wrapper(*args, **kw): # We need this wrapper to defer the import of 'adapt' and avoid a circular # import. The ctraits 'adapt' callback needs to be set as soon as possible, # but the adaptation mechanism relies on traits. # This wrapper is called once, after which we set the ctraits callback # to point directly to 'adapt'. from traits.adaptation.api import adapt ctraits._adapt(adapt) return adapt(*args, **kw) ctraits._adapt( _adapt_wrapper ) traits-4.5.0/traits/trait_notifiers.py000066400000000000000000000641221233213561600201220ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2005-2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Original Date: 06/21/2002 # #------------------------------------------------------------------------------ """ Classes that implement and support the Traits change notification mechanism """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import from threading import local as thread_local from threading import Thread from thread import get_ident import traceback from types import MethodType import weakref import sys from .trait_base import Uninitialized from .trait_errors import TraitNotificationError #------------------------------------------------------------------------------- # Global Data: #------------------------------------------------------------------------------- # The thread ID for the user interface thread ui_thread = -1 # The handler for notifications that must be run on the UI thread ui_handler = None #------------------------------------------------------------------------------- # Sets up the user interface thread handler: #------------------------------------------------------------------------------- def set_ui_handler ( handler ): """ Sets up the user interface thread handler. """ global ui_handler, ui_thread ui_handler = handler ui_thread = get_ident() def ui_dispatch( handler, *args, **kw ): if get_ident() == ui_thread: handler( *args, **kw ) else: ui_handler( handler, *args, **kw ) #------------------------------------------------------------------------------- # 'NotificationExceptionHandlerState' class: #------------------------------------------------------------------------------- class NotificationExceptionHandlerState ( object ): def __init__ ( self, handler, reraise_exceptions, locked ): self.handler = handler self.reraise_exceptions = reraise_exceptions self.locked = locked #------------------------------------------------------------------------------- # 'NotificationExceptionHandler' class: #------------------------------------------------------------------------------- class NotificationExceptionHandler ( object ): def __init__ ( self ): self.traits_logger = None self.main_thread = None self.thread_local = thread_local() #-- Private Methods ------------------------------------------------------------ def _push_handler ( self, handler = None, reraise_exceptions = False, main = False, locked = False ): """ Pushes a new traits notification exception handler onto the stack, making it the new exception handler. Returns a NotificationExceptionHandlerState object describing the previous exception handler. Parameters ---------- handler : handler The new exception handler, which should be a callable or None. If None (the default), then the default traits notification exception handler is used. If *handler* is not None, then it must be a callable which can accept four arguments: object, trait_name, old_value, new_value. reraise_exceptions : bool Indicates whether exceptions should be reraised after the exception handler has executed. If True, exceptions will be re-raised after the specified handler has been executed. The default value is False. main : bool Indicates whether the caller represents the main application thread. If True, then the caller's exception handler is made the default handler for any other threads that are created. Note that a thread can explicitly set its own exception handler if desired. The *main* flag is provided to make it easier to set a global application policy without having to explicitly set it for each thread. The default value is False. locked : bool Indicates whether further changes to the Traits notification exception handler state should be allowed. If True, then any subsequent calls to _push_handler() or _pop_handler() for that thread will raise a TraitNotificationError. The default value is False. """ handlers = self._get_handlers() self._check_lock( handlers ) if handler is None: handler = self._log_exception handlers.append( NotificationExceptionHandlerState( handler, reraise_exceptions, locked ) ) if main: self.main_thread = handlers return handlers[-2] def _pop_handler ( self ): """ Pops the traits notification exception handler stack, restoring the exception handler in effect prior to the most recent _push_handler() call. If the stack is empty or locked, a TraitNotificationError exception is raised. Note that each thread has its own independent stack. See the description of the _push_handler() method for more information on this. """ handlers = self._get_handlers() self._check_lock( handlers ) if len( handlers ) > 1: handlers.pop() else: raise TraitNotificationError( 'Attempted to pop an empty traits notification exception ' 'handler stack.' ) def _handle_exception ( self, object, trait_name, old, new ): """ Handles a traits notification exception using the handler defined by the topmost stack entry for the corresponding thread. """ excp_class, excp = sys.exc_info()[:2] handler_info = self._get_handlers()[-1] handler_info.handler( object, trait_name, old, new ) if (handler_info.reraise_exceptions or isinstance( excp, TraitNotificationError )): raise def _get_handlers ( self ): """ Returns the handler stack associated with the currently executing thread. """ thread_local = self.thread_local if isinstance( thread_local, dict ): id = get_ident() handlers = thread_local.get( id ) else: handlers = getattr( thread_local, 'handlers', None ) if handlers is None: if self.main_thread is not None: handler = self.main_thread[-1] else: handler = NotificationExceptionHandlerState( self._log_exception, False, False ) handlers = [ handler ] if isinstance( thread_local, dict ): thread_local[ id ] = handlers else: thread_local.handlers = handlers return handlers def _check_lock ( self, handlers ): """ Raises an exception if the specified handler stack is locked. """ if handlers[-1].locked: raise TraitNotificationError( 'The traits notification exception handler is locked. ' 'No changes are allowed.' ) #--------------------------------------------------------------------------- # This method defines the default notification exception handling # behavior of traits. However, it can be completely overridden by pushing # a new handler using the '_push_handler' method. # # It logs any exceptions generated in a trait notification handler. #--------------------------------------------------------------------------- def _log_exception ( self, object, trait_name, old, new ): """ Logs any exceptions generated in a trait notification handler. """ # When the stack depth is too great, the logger can't always log the # message. Make sure that it goes to the console at a minimum: excp_class, excp = sys.exc_info()[:2] if ((excp_class is RuntimeError) and (len(excp.args) > 0) and (excp.args[0] == 'maximum recursion depth exceeded')): sys.__stderr__.write( 'Exception occurred in traits notification ' 'handler for object: %s, trait: %s, old value: %s, ' 'new value: %s.\n%s\n' % ( object, trait_name, old, new, ''.join( traceback.format_exception( *sys.exc_info() ) ) ) ) logger = self.traits_logger if logger is None: import logging self.traits_logger = logger = logging.getLogger( 'traits' ) handler = logging.StreamHandler() handler.setFormatter( logging.Formatter( '%(message)s' ) ) logger.addHandler( handler ) print ('Exception occurred in traits notification handler.\n' 'Please check the log file for details.') try: logger.exception( 'Exception occurred in traits notification handler for ' 'object: %s, trait: %s, old value: %s, new value: %s' % ( object, trait_name, old, new ) ) except Exception: # Ignore anything we can't log the above way: pass #------------------------------------------------------------------------------- # Traits global notification exception handler: #------------------------------------------------------------------------------- notification_exception_handler = NotificationExceptionHandler() push_exception_handler = notification_exception_handler._push_handler pop_exception_handler = notification_exception_handler._pop_handler handle_exception = notification_exception_handler._handle_exception #------------------------------------------------------------------------------- # Traits global notification event tracer: #------------------------------------------------------------------------------- _pre_change_event_tracer = None _post_change_event_tracer = None def set_change_event_tracers( pre_tracer=None, post_tracer=None ): """ Set the global trait change event tracers. The global tracers are called whenever a trait change event is dispatched. There are two tracers: `pre_tracer` is called before the notification is sent; `post_tracer` is called after the notification is sent, even if the notification failed with an exception (in which case the `post_tracer` is called with a reference to the exception, then the exception is sent to the `notification_exception_handler`). The tracers should be a callable taking 5 arguments: :: tracer(obj, trait_name, old, new, handler) `obj` is the source object, on which trait `trait_name` was changed from value `old` to value `new`. `handler` is the function or method that will be notified of the change. The post-notification tracer also has a keyword argument, `exception`, that is `None` if no exception has been raised, and the a reference to the raise exception otherwise. :: post_tracer(obj, trait_name, old, new, handler, exception=None) Note that for static trait change listeners, `handler` is not a method, but rather the function before class creation, since this is the way Traits works at the moment. """ global _pre_change_event_tracer global _post_change_event_tracer _pre_change_event_tracer = pre_tracer _post_change_event_tracer = post_tracer def clear_change_event_tracers(): """ Clear the global trait change event tracer. """ global _pre_change_event_tracer global _post_change_event_tracer _pre_change_event_tracer = None _post_change_event_tracer = None #------------------------------------------------------------------------------- # 'AbstractStaticChangeNotifyWrapper' class: #------------------------------------------------------------------------------- class AbstractStaticChangeNotifyWrapper(object): """ Concrete implementation must define the 'argument_transforms' class argument, a dictionary mapping the number of arguments in the event handler to a function that takes the arguments (obj, trait_name, old, new) and returns the arguments tuple for the actual handler. """ arguments_transforms = {} def __init__ ( self, handler ): arg_count = handler.func_code.co_argcount if arg_count > 4: raise TraitNotificationError( ('Invalid number of arguments for the static anytrait change ' 'notification handler: %s. A maximum of 4 arguments is ' 'allowed, but %s were specified.') % ( handler.__name__, arg_count ) ) self.argument_transform = self.argument_transforms[arg_count] self.handler = handler def __call__ ( self, object, trait_name, old, new ): """ Dispatch to the appropriate handler method. """ if old is not Uninitialized: # Extract the arguments needed from the handler. args = self.argument_transform( object, trait_name, old, new ) # Send a description of the change event to the event tracer. if _pre_change_event_tracer is not None: _pre_change_event_tracer( object, trait_name, old, new, self.handler ) try: # Call the handler. self.handler( *args ) except Exception as e: exception = e else: exception = None finally: if _post_change_event_tracer is not None: _post_change_event_tracer( object, trait_name, old, new, self.handler, exception=exception ) if exception is not None: handle_exception( object, trait_name, old, new ) def equals ( self, handler ): return False #------------------------------------------------------------------------------- # 'StaticAnyTraitChangeNotifyWrapper' class: #------------------------------------------------------------------------------- class StaticAnyTraitChangeNotifyWrapper(AbstractStaticChangeNotifyWrapper): # The wrapper is called with the full set of argument, and we need to # create a tuple with the arguments that need to be sent to the event # handler, depending on the number of those. argument_transforms = { 0: lambda obj, name, old, new: (), 1: lambda obj, name, old, new: (obj,), 2: lambda obj, name, old, new: (obj, name), 3: lambda obj, name, old, new: (obj, name, new), 4: lambda obj, name, old, new: (obj, name, old, new), } #------------------------------------------------------------------------------- # 'StaticTraitChangeNotifyWrapper' class: #------------------------------------------------------------------------------- class StaticTraitChangeNotifyWrapper(AbstractStaticChangeNotifyWrapper): # The wrapper is called with the full set of argument, and we need to # create a tuple with the arguments that need to be sent to the event # handler, depending on the number of those. argument_transforms = { 0: lambda obj, name, old, new: (), 1: lambda obj, name, old, new: (obj,), 2: lambda obj, name, old, new: (obj, new), 3: lambda obj, name, old, new: (obj, old, new), 4: lambda obj, name, old, new: (obj, name, old, new), } #------------------------------------------------------------------------------- # 'TraitChangeNotifyWrapper' class: #------------------------------------------------------------------------------- class TraitChangeNotifyWrapper(object): """ Dynamic change notify wrapper. This class is in charge to dispatch trait change events to dynamic listener, typically created using the `on_trait_change` method, or the decorator with the same name. """ # The wrapper is called with the full set of argument, and we need to # create a tuple with the arguments that need to be sent to the event # handler, depending on the number of those. argument_transforms = { 0: lambda obj, name, old, new: (), 1: lambda obj, name, old, new: (new,), 2: lambda obj, name, old, new: (name, new), 3: lambda obj, name, old, new: (obj, name, new), 4: lambda obj, name, old, new: (obj, name, old, new), } def __init__ ( self, handler, owner, target=None ): self.init( handler, owner, target ) def init ( self, handler, owner, target=None ): # If target is not None and handler is a function then the handler # will be removed when target is deleted. if type( handler ) is MethodType: func = handler.im_func object = handler.im_self if object is not None: self.object = weakref.ref( object, self.listener_deleted ) self.name = handler.__name__ self.owner = owner arg_count = func.func_code.co_argcount - 1 if arg_count > 4: raise TraitNotificationError( ('Invalid number of arguments for the dynamic trait ' 'change notification handler: %s. A maximum of 4 ' 'arguments is allowed, but %s were specified.') % ( func.__name__, arg_count ) ) # We use the unbound method here to prevent cyclic garbage # (issue #100). self.notify_listener = type(self)._notify_method_listener self.argument_transform = self.argument_transforms[arg_count] return arg_count elif target is not None: # Set up so the handler will be removed when the target is deleted. self.object = weakref.ref( target, self.listener_deleted ) self.owner = owner arg_count = handler.func_code.co_argcount if arg_count > 4: raise TraitNotificationError( ('Invalid number of arguments for the dynamic trait change ' 'notification handler: %s. A maximum of 4 arguments is ' 'allowed, but %s were specified.') % ( handler.__name__, arg_count ) ) self.name = None self.handler = handler # We use the unbound method here to prevent cyclic garbage # (issue #100). self.notify_listener = type(self)._notify_function_listener self.argument_transform = self.argument_transforms[arg_count] return arg_count def __call__(self, object, trait_name, old, new): """ Dispatch to the appropriate method. We do explicit dispatch instead of assigning to the .__call__ instance attribute to avoid reference cycles. """ # `notify_listener` is either the *unbound* # `_notify_method_listener` or `_notify_function_listener` to # prevent cyclic garbage (issue #100). self.notify_listener( self, object, trait_name, old, new ) def dispatch ( self, handler, *args ): """ Dispatch the event to the listener. This method is normally the only one that needs to be overridden in a subclass to implement the subclass's dispatch mechanism. """ handler( *args ) def equals ( self, handler ): if handler is self: return True if (type( handler ) is MethodType) and (handler.im_self is not None): return ((handler.__name__ == self.name) and (handler.im_self is self.object())) return ((self.name is None) and (handler == self.handler)) def listener_deleted ( self, ref ): # In multithreaded situations, it's possible for this method to # be called after, or concurrently with, the dispose method. # Don't raise in that case. try: self.owner.remove( self ) except ValueError: pass self.object = self.owner = None def dispose ( self ): self.object = None def _dispatch_change_event(self, object, trait_name, old, new, handler): """ Prepare and dispatch a trait change event to a listener. """ # Extract the arguments needed from the handler. args = self.argument_transform( object, trait_name, old, new ) # Send a description of the event to the change event tracer. if _pre_change_event_tracer is not None: _pre_change_event_tracer( object, trait_name, old, new, handler ) # Dispatch the event to the listener. try: self.dispatch( handler, *args ) except Exception as e: if _post_change_event_tracer is not None: _post_change_event_tracer( object, trait_name, old, new, handler, exception=e ) # This call needs to be made inside the `except` block in case # the handler wants to re-raise the exception. handle_exception( object, trait_name, old, new ) else: if _post_change_event_tracer is not None: _post_change_event_tracer( object, trait_name, old, new, handler, exception=None ) def _notify_method_listener(self, object, trait_name, old, new): """ Dispatch a trait change event to a method listener. """ obj_weak_ref = self.object if (obj_weak_ref is not None) and (old is not Uninitialized): # We make sure to hold a reference to the object before invoking # `getattr` so that the listener does not disappear in a # multi-threaded case. obj = obj_weak_ref() if obj is not None: # Dynamically resolve the listener by name. listener = getattr( obj, self.name ) self._dispatch_change_event( object, trait_name, old, new, listener ) def _notify_function_listener(self, object, trait_name, old, new): """ Dispatch a trait change event to a function listener. """ if old is not Uninitialized: self._dispatch_change_event( object, trait_name, old, new, self.handler ) #------------------------------------------------------------------------------- # 'ExtendedTraitChangeNotifyWrapper' class: #------------------------------------------------------------------------------- class ExtendedTraitChangeNotifyWrapper ( TraitChangeNotifyWrapper ): """ Change notify wrapper for "extended" trait change events.. The "extended notifiers" are set up internally when using extended traits, to add/remove traits listeners when one of the intermediate traits changes. For example, in a listener for the extended trait `a.b`, we need to add/remove listeners to `a:b` when `a` changes. """ def _dispatch_change_event(self, object, trait_name, old, new, handler): """ Prepare and dispatch a trait change event to a listener. """ # Extract the arguments needed from the handler. args = self.argument_transform( object, trait_name, old, new ) # Dispatch the event to the listener. try: self.dispatch( handler, *args ) except Exception: handle_exception( object, trait_name, old, new ) def _notify_method_listener(self, object, trait_name, old, new): """ Dispatch a trait change event to a method listener. """ obj_weak_ref = self.object if obj_weak_ref is not None: # We make sure to hold a reference to the object before invoking # `getattr` so that the listener does not disappear in a # multi-threaded case. obj = obj_weak_ref() if obj is not None: # Dynamically resolve the listener by name. listener = getattr( obj, self.name ) self._dispatch_change_event( object, trait_name, old, new, listener ) def _notify_function_listener(self, object, trait_name, old, new): """ Dispatch a trait change event to a function listener. """ self._dispatch_change_event(object, trait_name, old, new, self.handler) #------------------------------------------------------------------------------- # 'FastUITraitChangeNotifyWrapper' class: #------------------------------------------------------------------------------- class FastUITraitChangeNotifyWrapper ( TraitChangeNotifyWrapper ): """ Dynamic change notify wrapper, dispatching on the UI thread. This class is in charge to dispatch trait change events to dynamic listener, typically created using the `on_trait_change` method and the `dispatch` parameter set to 'ui' or 'fast_ui'. """ def dispatch ( self, handler, *args ): if get_ident() == ui_thread: handler( *args ) else: ui_handler( handler, *args ) #------------------------------------------------------------------------------- # 'NewTraitChangeNotifyWrapper' class: #------------------------------------------------------------------------------- class NewTraitChangeNotifyWrapper ( TraitChangeNotifyWrapper ): """ Dynamic change notify wrapper, dispatching on a new thread. This class is in charge to dispatch trait change events to dynamic listener, typically created using the `on_trait_change` method and the `dispatch` parameter set to 'new'. """ def dispatch ( self, handler, *args ): Thread( target = handler, args = args ).start() traits-4.5.0/traits/trait_numeric.py000066400000000000000000000324151233213561600175620ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 12/13/2004 # #------------------------------------------------------------------------------ """ Trait definitions related to the numpy library. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import import warnings from .trait_base import SequenceTypes from .trait_errors import TraitError from .trait_handlers import TraitType, OBJECT_IDENTITY_COMPARE from .trait_types import Str, Any, Int as TInt, Float as TFloat #------------------------------------------------------------------------------- # Deferred imports from numpy: #------------------------------------------------------------------------------- ndarray = None asarray = None #------------------------------------------------------------------------------- # numpy dtype mapping: #------------------------------------------------------------------------------- def dtype2trait ( dtype ): """ Get the corresponding trait for a numpy dtype. """ import numpy if dtype.char in numpy.typecodes['Float']: return TFloat elif dtype.char in numpy.typecodes['AllInteger']: return TInt elif dtype.char[0] == 'S': return Str else: return Any #------------------------------------------------------------------------------- # 'AbstractArray' trait base class: #------------------------------------------------------------------------------- class AbstractArray ( TraitType ): """ Abstract base class for defining numpy-based arrays. """ def __init__ ( self, dtype = None, shape = None, value = None, coerce = False, typecode = None, **metadata ): """ Returns an AbstractArray trait. """ global ndarray, asarray try: import numpy except ImportError: raise TraitError( "Using Array or CArray trait types requires the " "numpy package to be installed." ) from numpy import array, asarray, ndarray, zeros # Mark this as being an 'array' trait: metadata[ 'array' ] = True # Normally use object identity to detect array values changing: metadata.setdefault( 'comparison_mode', OBJECT_IDENTITY_COMPARE ) if typecode is not None: warnings.warn( 'typecode is a deprecated argument; use dtype ' 'instead', DeprecationWarning ) if (dtype is not None) and (dtype != typecode): raise TraitError( 'Inconsistent usage of the dtype and ' 'typecode arguments; use dtype alone.' ) else: dtype = typecode if dtype is not None: try: # Convert the argument into an actual numpy dtype object: dtype = numpy.dtype( dtype ) except TypeError: raise TraitError( 'could not convert %r to a numpy dtype' % dtype ) if shape is not None: if isinstance( shape, SequenceTypes ): for item in shape: if ((item is None) or (type( item ) is int) or (isinstance( item, SequenceTypes ) and (len( item ) == 2) and (type( item[0] ) is int) and (item[0] >= 0) and ((item[1] is None) or ((type( item[1] ) is int) and (item[0] <= item[1]))))): continue raise TraitError, "shape should be a list or tuple" else: raise TraitError, "shape should be a list or tuple" if value is None: if dtype is None: # Compatibility with the default of Traits 2.0 dt = int else: dt = dtype if shape is None: value = zeros( ( 0, ), dt ) else: size = [] for item in shape: if item is None: item = 1 elif type( item ) in SequenceTypes: # XXX: what is this supposed to do? item = item[0] size.append( item ) value = zeros( size, dt ) self.dtype = dtype self.shape = shape self.coerce = coerce super( AbstractArray, self ).__init__( value, **metadata ) def validate ( self, object, name, value ): """ Validates that the value is a valid array. """ try: # Make sure the value is an array: type_value = type( value ) if not isinstance( value, ndarray ): if not isinstance( value, SequenceTypes ): self.error( object, name, value ) if self.dtype is not None: value = asarray( value, self.dtype ) else: value = asarray( value ) # Make sure the array is of the right type: if ((self.dtype is not None) and (value.dtype != self.dtype)): if self.coerce: value = value.astype( self.dtype ) else: # XXX: this also coerces. value = asarray( value, self.dtype ) # If no shape requirements, then return the value: trait_shape = self.shape if trait_shape is None: return value # Else make sure that the value's shape is compatible: value_shape = value.shape if len( trait_shape ) == len( value_shape ): for i, dim in enumerate( value_shape ): item = trait_shape[i] if item is not None: if type( item ) is int: if dim != item: break elif ((dim < item[0]) or ((item[1] is not None) and (dim > item[1]))): break else: return value except: pass self.error( object, name, value ) def info ( self ): """ Returns descriptive information about the trait. """ dtype = shape = '' if self.shape is not None: shape = [] for item in self.shape: if item is None: item = '*' elif type( item ) is not int: if item[1] is None: item = '%d..' % item[0] else: item = '%d..%d' % item shape.append( item ) shape = ' with shape %s' % ( tuple( shape ), ) if self.dtype is not None: # FIXME: restore nicer descriptions of dtypes. dtype = ' of %s values' % self.dtype return 'an array%s%s' % ( dtype, shape ) def create_editor ( self ): """ Returns the default UI editor for the trait. """ editor = None auto_set = False if self.auto_set is None: auto_set = True enter_set = self.enter_set or False if self.shape is not None and len( self.shape ) == 2: from traitsui.api import ArrayEditor editor = ArrayEditor( auto_set=auto_set, enter_set=enter_set ) else: from traitsui.api import TupleEditor if self.dtype is None: types = Any else: types = dtype2trait( self.dtype ) editor = TupleEditor( types = types, labels = self.labels or [], cols = self.cols or 1, auto_set = auto_set, enter_set = enter_set ) return editor #-- Private Methods -------------------------------------------------------- def get_default_value ( self ): """ Returns the default value constructor for the type (called from the trait factory. """ return ( 7, ( self.copy_default_value, ( self.validate( None, None, self.default_value ), ), None ) ) def copy_default_value ( self, value ): """ Returns a copy of the default value (called from the C code on first reference to a trait with no current value). """ return value.copy() #------------------------------------------------------------------------------- # 'Array' trait: #------------------------------------------------------------------------------- class Array ( AbstractArray ): """ Defines a trait whose value must be a numpy array. """ def __init__ ( self, dtype = None, shape = None, value = None, typecode = None, **metadata ): """ Returns an Array trait. Parameters ---------- dtype : a numpy dtype (e.g., int32) The type of elements in the array; if omitted, no type-checking is performed on assigned values. shape : a tuple Describes the required shape of any assigned value. Wildcards and ranges are allowed. The value None within the *shape* tuple means that the corresponding dimension is not checked. (For example, ``shape=(None,3)`` means that the first dimension can be any size, but the second must be 3.) A two-element tuple within the *shape* tuple means that the dimension must be in the specified range. The second element can be None to indicate that there is no upper bound. (For example, ``shape=((3,5),(2,None))`` means that the first dimension must be in the range 3 to 5 (inclusive), and the second dimension must be at least 2.) value : numpy array A default value for the array. Default Value ------------- *value* or ``zeros(min(shape))``, where ``min(shape)`` refers to the minimum shape allowed by the array. If *shape* is not specified, the minimum shape is (0,). Description ----------- An Array trait allows only upcasting of assigned values that are already numpy arrays. It automatically casts tuples and lists of the right shape to the specified *dtype* (just like numpy's **array** does). """ super( Array, self ).__init__( dtype, shape, value, False, typecode = typecode, **metadata ) #------------------------------------------------------------------------------- # 'CArray' trait: #------------------------------------------------------------------------------- class CArray ( AbstractArray ): """ Defines a trait whose value must be a numpy array, with casting allowed. """ def __init__ ( self, dtype = None, shape = None, value = None, typecode = None, **metadata ): """ Returns a CArray trait. Parameters ---------- dtype : a numpy dtype (e.g., int32) The type of elements in the array. shape : a tuple Describes the required shape of any assigned value. Wildcards and ranges are allowed. The value None within the *shape* tuple means that the corresponding dimension is not checked. (For example, ``shape=(None,3)`` means that the first dimension can be any size, but the second must be 3.) A two-element tuple within the *shape* tuple means that the dimension must be in the specified range. The second element can be None to indicate that there is no upper bound. (For example, ``shape=((3,5),(2,None))`` means that the first dimension must be in the range 3 to 5 (inclusive), and the second dimension must be at least 2.) value : numpy array A default value for the array. Default Value ------------- *value* or ``zeros(min(shape))``, where ``min(shape)`` refers to the minimum shape allowed by the array. If *shape* is not specified, the minimum shape is (0,). Description ----------- The trait returned by CArray() is similar to that returned by Array(), except that it allows both upcasting and downcasting of assigned values that are already numpy arrays. It automatically casts tuples and lists of the right shape to the specified *dtype* (just like numpy's **array** does). """ super( CArray, self ).__init__( dtype, shape, value, True, typecode = typecode, **metadata ) traits-4.5.0/traits/trait_types.py000066400000000000000000003536501233213561600172730ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 03/22/2007 # #------------------------------------------------------------------------------ """ Core Trait definitions. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import import datetime import operator import re import sys from os.path import isfile, isdir from types import FunctionType, MethodType, ModuleType from . import trait_handlers from .trait_base import (strx, get_module_name, class_of, SequenceTypes, TypeTypes, ClassTypes, Undefined, TraitsCache, python_version) from .trait_handlers import (TraitType, TraitInstance, TraitListObject, TraitSetObject, TraitSetEvent, TraitDictObject, TraitDictEvent, ThisClass, items_event, RangeTypes, HandleWeakRef) from .traits import (Trait, trait_from, _TraitMaker, _InstanceArgs, code_editor, html_editor, password_editor, shell_editor, date_editor, time_editor) from .trait_errors import TraitError from . import _py2to3 #------------------------------------------------------------------------------- # Constants: #------------------------------------------------------------------------------- MutableTypes = ( list, dict ) SetTypes = SequenceTypes + ( set, ) #------------------------------------------------------------------------------- # Numeric type fast validator definitions: #------------------------------------------------------------------------------- # A few words about the next block of code: # Validator #11 is a generic validator for possibly coercible types # (see validate_trait_coerce_type in ctraits.c). # # The tuples below are of the form # (11, type1, [type2, type3, ...], [None, ctype1, [ctype2, ...]]) # # 'type1' corresponds to the main type for the trait # 'None' acts as the separator between 'types' and 'ctypes' (coercible types) # # The validation passes if: # 1) The trait value type is (a subtype of) one of 'type1', 'type2', ... # in which case the value is returned as-is # or # 2) The trait value type is (a subtype of) one of 'ctype1', 'ctype2', ... # in which case the value is returned coerced to trait type using # 'return type1(value') try: # The numpy enhanced definitions: from numpy import integer, floating, complexfloating, bool_ int_fast_validate = ( 11, int, integer ) long_fast_validate = ( 11, long, None, int, integer ) float_fast_validate = ( 11, float, floating, None, int, integer ) complex_fast_validate = ( 11, complex, complexfloating, None, float, floating, int, integer ) bool_fast_validate = ( 11, bool, bool_ ) except ImportError: # The standard python definitions (without numpy): int_fast_validate = ( 11, int ) long_fast_validate = ( 11, long, None, int ) float_fast_validate = ( 11, float, None, int ) complex_fast_validate = ( 11, complex, None, float, int ) bool_fast_validate = ( 11, bool ) #------------------------------------------------------------------------------- # Returns a default text editor: #------------------------------------------------------------------------------- def default_text_editor ( trait, type = None ): auto_set = trait.auto_set if auto_set is None: auto_set = True enter_set = trait.enter_set or False from traitsui.api import TextEditor if type is None: return TextEditor( auto_set = auto_set, enter_set = enter_set ) return TextEditor( auto_set = auto_set, enter_set = enter_set, evaluate = type ) #------------------------------------------------------------------------------- # 'Any' trait: #------------------------------------------------------------------------------- class Any ( TraitType ): """ Defines a trait whose value can be anything. """ #: The default value for the trait: default_value = None #: A description of the type of value this trait accepts: info_text = 'any value' #------------------------------------------------------------------------------- # 'Generic' trait: #------------------------------------------------------------------------------- class Generic ( Any ): """ Defines a trait whose value can be anything and whose definition can be redefined via assignment using a TraitValue object. """ #: The standard metadata for the trait: metadata = { 'trait_value': True } #------------------------------------------------------------------------------- # 'BaseInt' and 'Int' traits: #------------------------------------------------------------------------------- class BaseInt ( TraitType ): """ Defines a trait whose type must be an int or long. """ #: The function to use for evaluating strings to this type: evaluate = int #: The default value for the trait: default_value = 0 #: A description of the type of value this trait accepts: info_text = 'an integer (int or long)' def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. """ if type(value) is int: return value elif type(value) is long: return int(value) try: int_value = operator.index( value ) except TypeError: pass else: return int(int_value) self.error( object, name, value ) def create_editor ( self ): """ Returns the default traits UI editor for this type of trait. """ return default_text_editor( self, int ) class Int ( BaseInt ): """ Defines a trait whose type must be an int or long using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 20, ) #------------------------------------------------------------------------------- # 'BaseLong' and 'Long' traits: #------------------------------------------------------------------------------- class BaseLong ( TraitType ): """ Defines a trait whose value must be a Python long. """ #: The function to use for evaluating strings to this type: evaluate = long #: The default value for the trait: default_value = 0L #: A description of the type of value this trait accepts: info_text = 'a long' def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ if isinstance( value, long ): return value if isinstance( value, int ): return long( value ) self.error( object, name, value ) def create_editor ( self ): """ Returns the default traits UI editor for this type of trait. """ return default_text_editor( self, long ) class Long ( BaseLong ): """ Defines a trait whose value must be a Python long using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = long_fast_validate #------------------------------------------------------------------------------- # 'BaseFloat' and 'Float' traits: #------------------------------------------------------------------------------- class BaseFloat ( TraitType ): """ Defines a trait whose value must be a Python float. """ #: The function to use for evaluating strings to this type: evaluate = float #: The default value for the trait: default_value = 0.0 #: A description of the type of value this trait accepts: info_text = 'a float' def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ if isinstance( value, float ): return value if isinstance( value, int ): return float( value ) self.error( object, name, value ) def create_editor ( self ): """ Returns the default traits UI editor for this type of trait. """ return default_text_editor( self, float ) class Float ( BaseFloat ): """ Defines a trait whose value must be a Python float using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = float_fast_validate #------------------------------------------------------------------------------- # 'BaseComplex' and 'Complex' traits: #------------------------------------------------------------------------------- class BaseComplex ( TraitType ): """ Defines a trait whose value must be a Python complex. """ #: The function to use for evaluating strings to this type: evaluate = complex #: The default value for the trait: default_value = 0.0 + 0.0j #: A description of the type of value this trait accepts: info_text = 'a complex number' def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ if isinstance( value, complex ): return value if isinstance( value, ( float, int ) ): return complex( value ) self.error( object, name, value ) def create_editor ( self ): """ Returns the default traits UI editor for this type of trait. """ return default_text_editor( self, complex ) class Complex ( BaseComplex ): """ Defines a trait whose value must be a Python complex using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = complex_fast_validate #------------------------------------------------------------------------------- # 'BaseStr' and 'Str' traits: #------------------------------------------------------------------------------- class BaseStr ( TraitType ): """ Defines a trait whose value must be a Python string. """ #: The default value for the trait: default_value = '' #: A description of the type of value this trait accepts: info_text = 'a string' def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ if isinstance( value, basestring ): return value self.error( object, name, value ) def create_editor ( self ): """ Returns the default traits UI editor for this type of trait. """ from .traits import multi_line_text_editor auto_set = self.auto_set if auto_set is None: auto_set = True enter_set = self.enter_set or False return multi_line_text_editor(auto_set, enter_set) class Str ( BaseStr ): """ Defines a trait whose value must be a Python string using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 11, basestring ) class Title ( Str ): """ Defines a string type which by default uses the traits ui TitleEditor when used in a View. """ def create_editor ( self ): """ Returns the default traits UI editor to use for a trait. """ from traitsui.api import TitleEditor if hasattr(self, 'allow_selection'): return TitleEditor(allow_selection=self.allow_selection) else: return TitleEditor() #------------------------------------------------------------------------------- # 'BaseUnicode' and 'Unicode' traits: #------------------------------------------------------------------------------- class BaseUnicode ( TraitType ): """ Defines a trait whose value must be a Python unicode string. """ #: The default value for the trait: default_value = u'' #: A description of the type of value this trait accepts: info_text = 'a unicode string' def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ if isinstance( value, unicode ): return value if isinstance( value, str ): return unicode( value ) self.error( object, name, value ) def create_editor ( self ): """ Returns the default traits UI editor for this type of trait. """ from .traits import multi_line_text_editor auto_set = self.auto_set if auto_set is None: auto_set = True enter_set = self.enter_set or False return multi_line_text_editor(auto_set, enter_set) class Unicode ( BaseUnicode ): """ Defines a trait whose value must be a Python unicode string using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 11, unicode, None, str ) #------------------------------------------------------------------------------- # 'BaseBool' and 'Bool' traits: #------------------------------------------------------------------------------- class BaseBool ( TraitType ): """ Defines a trait whose value must be a Python boolean. """ #: The function to use for evaluating strings to this type: evaluate = bool #: The default value for the trait: default_value = False #: A description of the type of value this trait accepts: info_text = 'a boolean' def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ if isinstance( value, bool ): return value self.error( object, name, value ) def create_editor ( self ): """ Returns the default traits UI editor for this type of trait. """ from traitsui.api import BooleanEditor return BooleanEditor() class Bool ( BaseBool ): """ Defines a trait whose value must be a Python boolean using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = bool_fast_validate #------------------------------------------------------------------------------- # 'BaseCInt' and 'CInt' traits: #------------------------------------------------------------------------------- class BaseCInt ( BaseInt ): """ Defines a trait whose value must be a Python int and which supports coercions of non-int values to int. """ #: The function to use for evaluating strings to this type: evaluate = int def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ try: return int( value ) except: self.error( object, name, value ) class CInt ( BaseCInt ): """ Defines a trait whose value must be a Python int and which supports coercions of non-int values to int using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 12, int ) #------------------------------------------------------------------------------- # 'BaseCLong' and 'CLong' traits: #------------------------------------------------------------------------------- class BaseCLong ( BaseLong ): """ Defines a trait whose value must be a Python long and which supports coercions of non-long values to long. """ #: The function to use for evaluating strings to this type: evaluate = long def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ try: return long( value ) except: self.error( object, name, value ) class CLong ( BaseCLong ): """ Defines a trait whose value must be a Python long and which supports coercions of non-long values to long using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 12, long ) #------------------------------------------------------------------------------- # 'BaseCFloat' and 'CFloat' traits: #------------------------------------------------------------------------------- class BaseCFloat ( BaseFloat ): """ Defines a trait whose value must be a Python float and which supports coercions of non-float values to float. """ #: The function to use for evaluating strings to this type: evaluate = float def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ try: return float( value ) except: self.error( object, name, value ) class CFloat ( BaseCFloat ): """ Defines a trait whose value must be a Python float and which supports coercions of non-float values to float using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 12, float ) #------------------------------------------------------------------------------- # 'BaseCComplex' and 'CComplex' traits: #------------------------------------------------------------------------------- class BaseCComplex ( BaseComplex ): """ Defines a trait whose value must be a Python complex and which supports coercions of non-complex values to complex. """ #: The function to use for evaluating strings to this type: evaluate = complex def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ try: return complex( value ) except: self.error( object, name, value ) class CComplex ( BaseCComplex ): """ Defines a trait whose value must be a Python complex and which supports coercions of non-complex values to complex using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 12, complex ) #------------------------------------------------------------------------------- # 'BaseCStr' and 'CStr' traits: #------------------------------------------------------------------------------- class BaseCStr ( BaseStr ): """ Defines a trait whose value must be a Python string and which supports coercions of non-string values to string. """ def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ try: return str( value ) except: try: return unicode( value ) except: self.error( object, name, value ) class CStr ( BaseCStr ): """ Defines a trait whose value must be a Python string and which supports coercions of non-string values to string using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 7, ( ( 12, str ), ( 12, unicode ) ) ) #------------------------------------------------------------------------------- # 'BaseCUnicode' and 'CUnicode' traits: #------------------------------------------------------------------------------- class BaseCUnicode ( BaseUnicode ): """ Defines a trait whose value must be a Python unicode string and which supports coercions of non-unicode values to unicode. """ def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ try: return unicode( value ) except: self.error( object, name, value ) class CUnicode ( BaseCUnicode ): """ Defines a trait whose value must be a Python unicode string and which supports coercions of non-unicode values to unicode using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 12, unicode ) #------------------------------------------------------------------------------- # 'BaseCBool' and 'CBool' traits: #------------------------------------------------------------------------------- class BaseCBool ( BaseBool ): """ Defines a trait whose value must be a Python boolean and which supports coercions of non-boolean values to boolean. """ #: The function to use for evaluating strings to this type: evaluate = bool def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ try: return bool( value ) except: self.error( object, name, value ) class CBool ( BaseCBool ): """ Defines a trait whose value must be a Python boolean and which supports coercions of non-boolean values to boolean using a C-level fast validator. """ #: The C-level fast validator to use: fast_validate = ( 12, bool ) #------------------------------------------------------------------------------- # 'String' trait: #------------------------------------------------------------------------------- class String ( TraitType ): """ Defines a trait whose value must be a Python string whose length is optionally in a specified range, and which optionally matches a specified regular expression. """ def __init__ ( self, value = '', minlen = 0, maxlen = sys.maxint, regex = '', **metadata ): """ Creates a String trait. Parameters ---------- value : str The default value for the string. minlen : integer The minimum length allowed for the string. maxlen : integer The maximum length allowed for the string. regex : str A Python regular expression that the string must match. """ super( String, self ).__init__( value, **metadata ) self.minlen = max( 0, minlen ) self.maxlen = max( self.minlen, maxlen ) self.regex = regex self._init() def _init ( self ): """ Completes initialization of the trait at construction or unpickling time. """ self._validate = 'validate_all' if self.regex != '': self.match = re.compile( self.regex ).match if (self.minlen == 0) and (self.maxlen == sys.maxint): self._validate = 'validate_regex' elif (self.minlen == 0) and (self.maxlen == sys.maxint): self._validate = 'validate_str' else: self._validate = 'validate_len' def validate ( self, object, name, value ): """ Validates that the value is a valid string. """ return getattr( self, self._validate )( object, name, value ) def validate_all ( self, object, name, value ): """ Validates that the value is a valid string in the specified length range which matches the specified regular expression. """ try: value = strx( value ) if ((self.minlen <= len( value ) <= self.maxlen) and (self.match( value ) is not None)): return value except: pass self.error( object, name, value ) def validate_str ( self, object, name, value ): """ Validates that the value is a valid string. """ try: return strx( value ) except: pass self.error( object, name, value ) def validate_len ( self, object, name, value ): """ Validates that the value is a valid string in the specified length range. """ try: value = strx( value ) if self.minlen <= len( value ) <= self.maxlen: return value except: pass self.error( object, name, value ) def validate_regex ( self, object, name, value ): """ Validates that the value is a valid string which matches the specified regular expression. """ try: value = strx( value ) if self.match( value ) is not None: return value except: pass self.error( object, name, value ) def info ( self ): """ Returns a description of the trait. """ msg = '' if (self.minlen != 0) and (self.maxlen != sys.maxint): msg = ' between %d and %d characters long' % ( self.minlen, self.maxlen ) elif self.maxlen != sys.maxint: msg = ' <= %d characters long' % self.maxlen elif self.minlen != 0: msg = ' >= %d characters long' % self.minlen if self.regex != '': if msg != '': msg += ' and' msg += (" matching the pattern '%s'" % self.regex) return 'a string' + msg def create_editor ( self ): """ Returns the default traits UI editor for this type of trait. """ return default_text_editor( self ) def __getstate__ ( self ): """ Returns the current state of the trait. """ result = self.__dict__.copy() for name in [ 'validate', 'match' ]: if name in result: del result[ name ] return result def __setstate__ ( self, state ): """ Sets the current state of the trait. """ self.__dict__.update( state ) self._init() #------------------------------------------------------------------------------- # 'Regex' trait: #------------------------------------------------------------------------------- class Regex ( String ): """ Defines a trait whose value is a Python string that matches a specified regular expression. """ def __init__ ( self, value = '', regex = '.*', **metadata ): """ Creates a Regex trait. Parameters ---------- value : str The default value of the trait. regex : str The regular expression that the trait value must match. Default Value ------------- *value* or '' """ super( Regex, self ).__init__( value = value, regex = regex, **metadata ) #------------------------------------------------------------------------------- # 'Code' trait: #------------------------------------------------------------------------------- class Code ( String ): """ Defines a trait whose value is a Python string that represents source code in some language. """ #: The standard metadata for the trait: metadata = { 'editor': code_editor } #------------------------------------------------------------------------------- # 'HTML' trait: #------------------------------------------------------------------------------- class HTML ( String ): """ Defines a trait whose value must be a string that is interpreted as being HTML. By default the value is parsed and displayed as HTML in TraitsUI views. The validation of the value does not enforce HTML syntax. """ #: The standard metadata for the trait: metadata = { 'editor': html_editor } #------------------------------------------------------------------------------- # 'Password' trait: #------------------------------------------------------------------------------- class Password ( String ): """ Defines a trait whose value must be a string, optionally of constrained length or matching a regular expression. The trait is identical to a String trait except that by default it uses a PasswordEditor in TraitsUI views, which obscures text entered by the user. """ #: The standard metadata for the trait: metadata = { 'editor': password_editor } #------------------------------------------------------------------------------- # 'Callable' trait: #------------------------------------------------------------------------------- class Callable ( TraitType ): """ Defines a trait whose value must be a Python callable. """ #: The standard metadata for the trait: metadata = { 'copy': 'ref' } #: The default value for the trait: default_value = None #: A description of the type of value this trait accepts: info_text = 'a callable value' def validate ( self, object, name, value ): """ Validates that the value is a Python callable. """ if (value is None) or callable( value ): return value self.error( object, name, value ) #------------------------------------------------------------------------------- # 'BaseType' base class: #------------------------------------------------------------------------------- class BaseType ( TraitType ): """ Defines a trait whose value must be an instance of a simple Python type. """ def validate ( self, object, name, value ): """ Validates that the value is a Python callable. """ if isinstance( value, self.fast_validate[1:] ): return value self.error( object, name, value ) class This ( BaseType ): """ Defines a trait whose value must be an instance of the defining class. """ #: The C-level fast validator to use: fast_validate = ( 2, ) #: A description of the type of value this trait accepts: info_text = 'an instance of the same type as the receiver' def __init__ ( self, value = None, allow_none = True, **metadata ): super( This, self ).__init__( value, **metadata ) if allow_none: self.fast_validate = ( 2, None ) self.validate = self.validate_none self.info = self.info_none def validate ( self, object, name, value ): if isinstance( value, object.__class__ ): return value self.validate_failed( object, name, value ) def validate_none ( self, object, name, value ): if isinstance( value, object.__class__ ) or (value is None): return value self.validate_failed( object, name, value ) def info ( self ): return 'an instance of the same type as the receiver' def info_none ( self ): return 'an instance of the same type as the receiver or None' def validate_failed ( self, object, name, value ): kind = type( value ) if _py2to3.is_InstanceType(kind): msg = 'class %s' % value.__class__.__name__ else: msg = '%s (i.e. %s)' % ( str( kind )[1:-1], repr( value ) ) self.error( object, name, msg ) class self ( This ): """ Defines a trait whose value must be an instance of the defining class and whose default value is the object containing the trait. """ #: The default value type to use (i.e. 'self'): default_value_type = 2 class Function ( TraitType ): """ Defines a trait whose value must be a Python function. """ #: The C-level fast validator to use: fast_validate = ( 11, FunctionType ) #: A description of the type of value this trait accepts: info_text = 'a function' class Method ( TraitType ): """ Defines a trait whose value must be a Python method. """ #: The C-level fast validator to use: fast_validate = ( 11, MethodType ) #: A description of the type of value this trait accepts: info_text = 'a method' if sys.version_info[0] < 3: from types import ClassType class Class ( TraitType ): """ Defines a trait whose value must be an old-style Python class. """ #: The C-level fast validator to use: fast_validate = ( 11, ClassType ) #: A description of the type of value this trait accepts: info_text = 'an old-style class' class Module ( TraitType ): """ Defines a trait whose value must be a Python module. """ #: The C-level fast validator to use: fast_validate = ( 11, ModuleType ) #: A description of the type of value this trait accepts: info_text = 'a module' #------------------------------------------------------------------------------- # 'Python' trait: #------------------------------------------------------------------------------- class Python ( TraitType ): """ Defines a trait that provides behavior identical to a standard Python attribute. That is, it allows any value to be assigned, and raises an ValueError if an attempt is made to get the value before one has been assigned. It has no default value. This trait is most often used in conjunction with wildcard naming. See the *Traits User Manual* for details on wildcards. """ #: The standard metadata for the trait: metadata = { 'type': 'python' } #: The default value for the trait: default_value = Undefined #------------------------------------------------------------------------------- # 'ReadOnly' trait: #------------------------------------------------------------------------------- class ReadOnly ( TraitType ): """ Defines a trait that is write-once, and then read-only. The initial value of the attribute is the special, singleton object Undefined. The trait allows any value to be assigned to the attribute if the current value is the Undefined object. Once any other value is assigned, no further assignment is allowed. Normally, the initial assignment to the attribute is performed in the class constructor, based on information passed to the constructor. If the read-only value is known in advance of run time, use the Constant() function instead of ReadOnly to define the trait. """ # Defines the CTrait type to use for this trait: ctrait_type = 6 #: The default value for the trait: default_value = Undefined # Create a singleton instance as the trait: ReadOnly = ReadOnly() #------------------------------------------------------------------------------- # 'Disallow' trait: #------------------------------------------------------------------------------- class Disallow ( TraitType ): """ Defines a trait that prevents any value from being assigned or read. That is, any attempt to get or set the value of the trait attribute raises an exception. This trait is most often used in conjunction with wildcard naming, for example, to catch spelling mistakes in attribute names. See the *Traits User Manual* for details on wildcards. """ #: Defines the CTrait type to use for this trait: ctrait_type = 5 # Create a singleton instance as the trait: Disallow = Disallow() #------------------------------------------------------------------------------- # 'Constant' trait: #------------------------------------------------------------------------------- class Constant ( TraitType ): """ Defines a trait whose value is a constant. """ #: Defines the CTrait type to use for this trait: ctrait_type = 7 #: The standard metadata for the trait: metadata = { 'type': 'constant', 'transient': True } def __init__ ( self, value, **metadata ): """ Returns a constant, read-only trait whose value is *value*. Parameters ---------- value : any type except a list or dictionary The default value for the trait. Default Value ------------- *value* Description ----------- Traits of this type are very space efficient (and fast) because *value* is not stored in each instance using the trait, but only in the trait object itself. The *value* cannot be a list or dictionary, because those types have mutable values. """ if type( value ) in MutableTypes: raise TraitError, \ "Cannot define a constant using a mutable list or dictionary" super( Constant, self ).__init__( value, **metadata ) #------------------------------------------------------------------------------- # 'Delegate' trait: #------------------------------------------------------------------------------- class Delegate ( TraitType ): """ Defines a trait whose value is delegated to a trait on another object. """ #: Defines the CTrait type to use for this trait: ctrait_type = 3 #: The standard metadata for the trait: metadata = { 'type': 'delegate', 'transient': False } def __init__ ( self, delegate, prefix = '', modify = False, listenable = True, **metadata ): """ Creates a Delegate trait. """ if prefix == '': prefix_type = 0 elif prefix[-1:] != '*': prefix_type = 1 else: prefix = prefix[:-1] if prefix != '': prefix_type = 2 else: prefix_type = 3 metadata[ '_delegate' ] = delegate metadata[ '_prefix' ] = prefix metadata[ '_listenable' ] = listenable super( Delegate, self ).__init__( **metadata ) self.delegate = delegate self.prefix = prefix self.prefix_type = prefix_type self.modify = modify def as_ctrait ( self ): """ Returns a CTrait corresponding to the trait defined by this class. """ trait = super( Delegate, self ).as_ctrait() trait.delegate( self.delegate, self.prefix, self.prefix_type, self.modify ) return trait #------------------------------------------------------------------------------- # 'DelegatesTo' trait: #------------------------------------------------------------------------------- class DelegatesTo ( Delegate ): """ Defines a trait delegate that matches the standard 'delegate' design pattern. """ def __init__ ( self, delegate, prefix = '', listenable = True, **metadata ): """ Creates a "delegator" trait, whose definition and default value are delegated to a *delegate* trait attribute on another object. Parameters ---------- delegate : str Name of the attribute on the current object which references the object that is the trait's delegate. prefix : str A prefix or substitution applied to the original attribute when looking up the delegated attribute. listenable : bool Indicates whether a listener can be attached to this attribute such that changes to the delagate attribute will trigger it. Description ----------- An object containing a delegator trait attribute must contain a second attribute that references the object containing the delegate trait attribute. The name of this second attribute is passed as the *delegate* argument to the DelegatesTo() function. The following rules govern the application of the prefix parameter: * If *prefix* is empty or omitted, the delegation is to an attribute of the delegate object with the same name as the delegator attribute. * If *prefix* is a valid Python attribute name, then the delegation is to an attribute whose name is the value of *prefix*. * If *prefix* ends with an asterisk ('*') and is longer than one character, then the delegation is to an attribute whose name is the value of *prefix*, minus the trailing asterisk, prepended to the delegator attribute name. * If *prefix* is equal to a single asterisk, the delegation is to an attribute whose name is the value of the delegator object's __prefix__ attribute prepended to delegator attribute name. Note that any changes to the delegator attribute are actually applied to the corresponding attribute on the delegate object. The original object containing the delegator trait is not modified. """ super( DelegatesTo, self ).__init__( delegate, prefix = prefix, modify = True, listenable = listenable, **metadata ) #------------------------------------------------------------------------------- # 'PrototypedFrom' trait: #------------------------------------------------------------------------------- class PrototypedFrom ( Delegate ): """ Defines a trait delegate that matches the standard 'prototype' design pattern. """ def __init__ ( self, prototype, prefix = '', listenable = True, **metadata ): """ Creates a "prototyped" trait, whose definition and default value are obtained from a trait attribute on another object. Parameters ---------- prototype : str Name of the attribute on the current object which references the object that is the trait's prototype. prefix : str A prefix or substitution applied to the original attribute when looking up the prototyped attribute. listenable : bool Indicates whether a listener can be attached to this attribute such that changes to the corresponding attribute on the prototype object will trigger it. Description ----------- An object containing a prototyped trait attribute must contain a second attribute that references the object containing the prototype trait attribute. The name of this second attribute is passed as the *prototype* argument to the PrototypedFrom() function. The following rules govern the application of the prefix parameter: * If *prefix* is empty or omitted, the prototype delegation is to an attribute of the prototype object with the same name as the prototyped attribute. * If *prefix* is a valid Python attribute name, then the prototype delegation is to an attribute whose name is the value of *prefix*. * If *prefix* ends with an asterisk ('*') and is longer than one character, then the prototype delegation is to an attribute whose name is the value of *prefix*, minus the trailing asterisk, prepended to the prototyped attribute name. * If *prefix* is equal to a single asterisk, the prototype delegation is to an attribute whose name is the value of the prototype object's __prefix__ attribute prepended to the prototyped attribute name. Note that any changes to the prototyped attribute are made to the original object, not the prototype object. The prototype object is only used to define to trait type and default value. """ super( PrototypedFrom, self ).__init__( prototype, prefix = prefix, modify = False, listenable = listenable, **metadata ) #------------------------------------------------------------------------------- # 'Expression' class: #------------------------------------------------------------------------------- class Expression ( TraitType ): """ Defines a trait whose value must be a valid Python expression. The compiled form of a valid expression is stored as the mapped value of the trait. """ #: The default value for the trait: default_value = '0' #: A description of the type of value this trait accepts: info_text = 'a valid Python expression' #: Indicate that this is a mapped trait: is_mapped = True def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. """ try: return compile( value, '', 'eval' ) except: self.error( object, name, value ) def post_setattr ( self, object, name, value ): """ Performs additional post-assignment processing. """ object.__dict__[ name + '_' ] = value def mapped_value ( self, value ): """ Returns the 'mapped' value for the specified **value**. """ return compile( value, '', 'eval' ) def as_ctrait ( self ): """ Returns a CTrait corresponding to the trait defined by this class. """ # Tell the C code that 'setattr' should store the original, unadapted # value passed to it: return super( Expression, self ).as_ctrait().setattr_original_value( True ) #------------------------------------------------------------------------------- # 'PythonValue' trait: #------------------------------------------------------------------------------- class PythonValue ( Any ): """ Defines a trait whose value can be of any type, and whose default editor is a Python shell. """ #: The standard metadata for the trait: metadata = { 'editor': shell_editor } #------------------------------------------------------------------------------- # 'BaseFile' and 'File' traits: #------------------------------------------------------------------------------- class BaseFile ( BaseStr ): """ Defines a trait whose value must be the name of a file. """ #: A description of the type of value this trait accepts: info_text = 'a file name' def __init__ ( self, value = '', filter = None, auto_set = False, entries = 0, exists = False, **metadata ): """ Creates a File trait. Parameters ---------- value : str The default value for the trait. filter : str A wildcard string to filter filenames in the file dialog box used by the attribute trait editor. auto_set : bool Indicates whether the file editor updates the trait value after every key stroke. exists : bool Indicates whether the trait value must be an existing file or not. Default Value ------------- *value* or '' """ self.filter = filter self.auto_set = auto_set self.entries = entries self.exists = exists super( BaseFile, self ).__init__( value, **metadata ) def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ validated_value = super( BaseFile, self ).validate( object, name, value ) if not self.exists: return validated_value elif isfile( value ): return validated_value self.error( object, name, value ) def create_editor(self): from traitsui.editors.file_editor import FileEditor editor = FileEditor( filter = self.filter or [], auto_set = self.auto_set, entries = self.entries, ) return editor class File ( BaseFile ): """ Defines a trait whose value must be the name of a file using a C-level fast validator. """ def __init__ ( self, value = '', filter = None, auto_set = False, entries = 0, exists = False, **metadata ): """ Creates a File trait. Parameters ---------- value : str The default value for the trait. filter : str A wildcard string to filter filenames in the file dialog box used by the attribute trait editor. auto_set : bool Indicates whether the file editor updates the trait value after every key stroke. exists : bool Indicates whether the trait value must be an existing file or not. Default Value ------------- *value* or '' """ if not exists: # Define the C-level fast validator to use: fast_validate = ( 11, basestring ) super( File, self ).__init__( value, filter, auto_set, entries, exists, **metadata ) #------------------------------------------------------------------------------- # 'BaseDirectory' and 'Directory' traits: #------------------------------------------------------------------------------- class BaseDirectory ( BaseStr ): """ Defines a trait whose value must be the name of a directory. """ #: A description of the type of value this trait accepts: info_text = 'a directory name' def __init__ ( self, value = '', auto_set = False, entries = 0, exists = False, **metadata ): """ Creates a BaseDirectory trait. Parameters ---------- value : str The default value for the trait. auto_set : bool Indicates whether the directory editor updates the trait value after every key stroke. exists : bool Indicates whether the trait value must be an existing directory or not. Default Value ------------- *value* or '' """ self.entries = entries self.auto_set = auto_set self.exists = exists super( BaseDirectory, self ).__init__( value, **metadata ) def validate ( self, object, name, value ): """ Validates that a specified value is valid for this trait. Note: The 'fast validator' version performs this check in C. """ if not self.exists: return super( BaseDirectory, self ).validate( object, name, value ) if isdir( value ): return value self.error( object, name, value ) def create_editor(self): from traitsui.editors.directory_editor import DirectoryEditor editor = DirectoryEditor( auto_set = self.auto_set, entries = self.entries, ) return editor class Directory ( BaseDirectory ): """ Defines a trait whose value must be the name of a directory using a C-level fast validator. """ def __init__ ( self, value = '', auto_set = False, entries = 0, exists = False, **metadata ): """ Creates a Directory trait. Parameters ---------- value : str The default value for the trait. auto_set : bool Indicates whether the directory editor updates the trait value after every key stroke. exists : bool Indicates whether the trait value must be an existing directory or not. Default Value ------------- *value* or '' """ # Define the C-level fast validator to use if the directory existence #: test is not required: if not exists: self.fast_validate = ( 11, basestring ) super( Directory, self ).__init__( value, auto_set, entries, exists, **metadata ) #------------------------------------------------------------------------------- # 'BaseRange' and 'Range' traits: #------------------------------------------------------------------------------- class BaseRange ( TraitType ): """ Defines a trait whose numeric value must be in a specified range. """ def __init__ ( self, low = None, high = None, value = None, exclude_low = False, exclude_high = False, **metadata ): """ Creates a Range trait. Parameters ---------- low : integer, float or string (i.e. extended trait name) The low end of the range. high : integer, float or string (i.e. extended trait name) The high end of the range. value : integer, float or string (i.e. extended trait name) The default value of the trait. exclude_low : bool Indicates whether the low end of the range is exclusive. exclude_high : bool Indicates whether the high end of the range is exclusive. The *low*, *high*, and *value* arguments must be of the same type (integer or float), except in the case where either *low* or *high* is a string (i.e. extended trait name). Default Value ------------- *value*; if *value* is None or omitted, the default value is *low*, unless *low* is None or omitted, in which case the default value is *high*. """ if value is None: if low is not None: value = low else: value = high super( BaseRange, self ).__init__( value, **metadata ) vtype = type( high ) if ((low is not None) and (not issubclass( vtype, ( float, basestring ) ))): vtype = type( low ) is_static = (not issubclass( vtype, basestring )) if is_static and (vtype not in RangeTypes): raise TraitError, ("Range can only be use for int, long or float " "values, but a value of type %s was specified." % vtype) self._low_name = self._high_name = '' self._vtype = Undefined if vtype is float: self._validate = 'float_validate' kind = 4 self._type_desc = 'a floating point number' if low is not None: low = float( low ) if high is not None: high = float( high ) elif vtype is long: self._validate = 'long_validate' self._type_desc = 'a long integer' if low is not None: low = long( low ) if high is not None: high = long( high ) elif vtype is int: self._validate = 'int_validate' kind = 3 self._type_desc = 'an integer' if low is not None: low = int( low ) if high is not None: high = int( high ) else: self.get, self.set, self.validate = self._get, self._set, None self._vtype = None self._type_desc = 'a number' if isinstance( high, basestring ): self._high_name = high = 'object.' + high else: self._vtype = type( high ) high = compile( str( high ), '', 'eval' ) if isinstance( low, basestring ): self._low_name = low = 'object.' + low else: self._vtype = type( low ) low = compile( str( low ), '', 'eval' ) if isinstance( value, basestring ): value = 'object.' + value self._value = compile( str( value ), '', 'eval' ) self.default_value_type = 8 self.default_value = self._get_default_value exclude_mask = 0 if exclude_low: exclude_mask |= 1 if exclude_high: exclude_mask |= 2 if is_static and (vtype is not long): self.init_fast_validator( kind, low, high, exclude_mask ) #: Assign type-corrected arguments to handler attributes: self._low = low self._high = high self._exclude_low = exclude_low self._exclude_high = exclude_high def init_fast_validator ( self, *args ): """ Does nothing for the BaseRange class. Used in the Range class to set up the fast validator. """ pass def validate ( self, object, name, value ): """ Validate that the value is in the specified range. """ return getattr( self, self._validate )( object, name, value ) def float_validate ( self, object, name, value ): """ Validate that the value is a float value in the specified range. """ try: if (isinstance( value, RangeTypes ) and ((self._low is None) or (self._exclude_low and (self._low < value)) or ((not self._exclude_low) and (self._low <= value))) and ((self._high is None) or (self._exclude_high and (self._high > value)) or ((not self._exclude_high) and (self._high >= value)))): return float( value ) except: pass self.error( object, name, value ) def int_validate ( self, object, name, value ): """ Validate that the value is an int value in the specified range. """ try: if (isinstance( value, int_fast_validate[1:]) and ((self._low is None) or (self._exclude_low and (self._low < value)) or ((not self._exclude_low) and (self._low <= value))) and ((self._high is None) or (self._exclude_high and (self._high > value)) or ((not self._exclude_high) and (self._high >= value)))): return value except: pass self.error( object, name, value ) def long_validate ( self, object, name, value ): """ Validate that the value is a long value in the specified range. """ try: valid_types = list(long_fast_validate[1:]) valid_types.remove(None) if (isinstance( value, tuple(valid_types) ) and ((self._low is None) or (self._exclude_low and (self._low < value)) or ((not self._exclude_low) and (self._low <= value))) and ((self._high is None) or (self._exclude_high and (self._high > value)) or ((not self._exclude_high) and (self._high >= value)))): return value except: pass self.error( object, name, value ) def _get_default_value ( self, object ): """ Returns the default value of the range. """ return eval( self._value ) def _get ( self, object, name, trait ): """ Returns the current value of a dynamic range trait. """ cname = '_traits_cache_' + name value = object.__dict__.get( cname, Undefined ) if value is Undefined: object.__dict__[ cname ] = value = eval( self._value ) low = eval( self._low ) high = eval( self._high ) if (low is not None) and (value < low): value = low elif (high is not None) and (value > high): value = high return self._typed_value( value, low, high ) def _set ( self, object, name, value ): """ Sets the current value of a dynamic range trait. """ if not isinstance( value, basestring ): try: low = eval( self._low ) high = eval( self._high ) if (low is None) and (high is None): if isinstance( value, RangeTypes ): self._set_value( object, name, value ) return else: new_value = self._typed_value( value, low, high ) if (((low is None) or (self._exclude_low and (low < new_value)) or ((not self._exclude_low) and (low <= new_value))) and ((high is None) or (self._exclude_high and (high > new_value)) or ((not self._exclude_high) and (high >= new_value)))): self._set_value( object, name, new_value ) return except: pass self.error( object, name, value ) def _typed_value ( self, value, low, high ): """ Returns the specified value with the correct type for the current dynamic range. """ vtype = self._vtype if vtype is None: if low is not None: vtype = type( low ) elif high is not None: vtype = type( high ) else: vtype = lambda x: x return vtype( value ) def _set_value ( self, object, name, value ): """ Sets the specified value as the value of the dynamic range. """ cname = '_traits_cache_' + name old = object.__dict__.get( cname, Undefined ) if old is Undefined: old = eval( self._value ) object.__dict__[ cname ] = value if value != old: object.trait_property_changed( name, old, value ) def full_info ( self, object, name, value ): """ Returns a description of the trait. """ if self._vtype is not Undefined: low = eval( self._low ) high = eval( self._high ) low, high = ( self._typed_value( low, low, high ), self._typed_value( high, low, high ) ) else: low = self._low high = self._high if low is None: if high is None: return self._type_desc return '%s <%s %s' % ( self._type_desc, '='[ self._exclude_high: ], high ) elif high is None: return '%s >%s %s' % ( self._type_desc, '='[ self._exclude_low: ], low ) return '%s <%s %s <%s %s' % ( low, '='[ self._exclude_low: ], self._type_desc, '='[ self._exclude_high: ], high ) def create_editor ( self ): """ Returns the default UI editor for the trait. """ # fixme: Needs to support a dynamic range editor. auto_set = self.auto_set if auto_set is None: auto_set = True from traitsui.api import RangeEditor return RangeEditor( self, mode = self.mode or 'auto', cols = self.cols or 3, auto_set = auto_set, enter_set = self.enter_set or False, low_label = self.low or '', high_label = self.high or '', low_name = self._low_name, high_name = self._high_name ) class Range ( BaseRange ): """ Defines a trait whose numeric value must be in a specified range using a C-level fast validator. """ def init_fast_validator ( self, *args ): """ Set up the C-level fast validator. """ self.fast_validate = args #------------------------------------------------------------------------------- # 'BaseEnum' and 'Enum' traits: #------------------------------------------------------------------------------- class BaseEnum ( TraitType ): """ Defines a trait whose value must be one of a specified set of values. """ def __init__ ( self, *args, **metadata ): """ Returns an Enum trait. Parameters ---------- values : list or tuple The enumeration of all legal values for the trait Default Value ------------- values[0] """ values = metadata.pop( 'values', None ) if isinstance( values, basestring ): n = len( args ) if n == 0: default_value = None elif n == 1: default_value = args[0] else: raise TraitError( "Incorrect number of arguments specified " "when using the 'values' keyword" ) self.name = values self.values = compile( 'object.' + values, '', 'eval' ) self.get, self.set, self.validate = self._get, self._set, None else: default_value = args[0] if (len( args ) == 1) and isinstance( default_value, SequenceTypes): args = default_value default_value = args[0] elif (len( args ) == 2) and isinstance( args[1], SequenceTypes ): args = args[1] self.name = '' self.values = tuple( args ) self.init_fast_validator( 5, self.values ) super( BaseEnum, self ).__init__( default_value, **metadata ) def init_fast_validator ( self, *args ): """ Does nothing for the BaseEnum class. Used in the Enum class to set up the fast validator. """ pass def validate ( self, object, name, value ): """ Validates that the value is one of the enumerated set of valid values. """ if value in self.values: return value self.error( object, name, value ) def full_info ( self, object, name, value ): """ Returns a description of the trait. """ if self.name == '': values = self.values else: values = eval( self.values ) return ' or '.join( [ repr( x ) for x in values ] ) def create_editor ( self ): """ Returns the default UI editor for the trait. """ from traitsui.api import EnumEditor values = self if self.name != '': values = None return EnumEditor( values = values, name = self.name, cols = self.cols or 3, evaluate = self.evaluate, mode = self.mode or 'radio' ) def _get ( self, object, name, trait ): """ Returns the current value of a dynamic enum trait. """ value = self.get_value( object, name, trait ) values = eval( self.values ) if value not in values: value = None if len( values ) > 0: value = values[0] return value def _set ( self, object, name, value ): """ Sets the current value of a dynamic range trait. """ if value in eval( self.values ): self.set_value( object, name, value ) else: self.error( object, name, value ) class Enum ( BaseEnum ): """ Defines a trait whose value must be one of a specified set of values using a C-level fast validator. """ def init_fast_validator ( self, *args ): """ Set up the C-level fast validator. """ self.fast_validate = args #------------------------------------------------------------------------------- # 'BaseTuple' and 'Tuple' traits: #------------------------------------------------------------------------------- class BaseTuple ( TraitType ): """ Defines a trait whose value must be a tuple of specified trait types. """ def __init__ ( self, *types, **metadata ): """ Returns a Tuple trait. Parameters ---------- types : zero or more arguments Definition of the default and allowed tuples. If the first item of *types* is a tuple, it is used as the default value. The remaining argument list is used to form a tuple that constrains the values assigned to the returned trait. The trait's value must be a tuple of the same length as the remaining argument list, whose elements must match the types specified by the corresponding items of the remaining argument list. Default Value ------------- 1. If no arguments are specified, the default value is (). 2. If a tuple is specified as the first argument, it is the default value. 3. If a tuple is not specified as the first argument, the default value is a tuple whose length is the length of the argument list, and whose values are the default values for the corresponding trait types. Example for case #2:: mytuple = Tuple(('Fred', 'Betty', 5)) The trait's value must be a 3-element tuple whose first and second elements are strings, and whose third element is an integer. The default value is ('Fred', 'Betty', 5). Example for case #3:: mytuple = Tuple('Fred', 'Betty', 5) The trait's value must be a 3-element tuple whose first and second elements are strings, and whose third element is an integer. The default value is ('','',0). """ if len( types ) == 0: self.init_fast_validator( 11, tuple, None, list ) super( BaseTuple, self ).__init__( (), **metadata ) return default_value = None if isinstance( types[0], tuple ): default_value, types = types[0], types[1:] if len( types ) == 0: types = [ Trait( element ) for element in default_value ] self.types = tuple( [ trait_from( type ) for type in types ] ) self.init_fast_validator( 9, self.types ) if default_value is None: default_value = tuple( [ type.default_value()[1] for type in self.types ] ) super( BaseTuple, self ).__init__( default_value, **metadata ) def init_fast_validator ( self, *args ): """ Saves the validation parameters. """ self.no_type_check = (args[0] == 11) def validate ( self, object, name, value ): """ Validates that the value is a valid tuple. """ if self.no_type_check: if isinstance( value, tuple ): return value if isinstance( value, list ): return tuple( value ) self.error( object, name, value ) try: if isinstance( value, list ): value = tuple( value ) if isinstance( value, tuple ): types = self.types if len( value ) == len( types ): values = [] for i, type in enumerate( types ): values.append( type.validate( object, name, value[i] ) ) return tuple( values ) except: pass self.error( object, name, value ) def full_info ( self, object, name, value ): """ Returns a description of the trait. """ if self.no_type_check: return 'a tuple' return 'a tuple of the form: (%s)' % (', '.join( [ type.full_info( object, name, value ) for type in self.types ] )) def create_editor ( self ): """ Returns the default UI editor for the trait. """ from traitsui.api import TupleEditor auto_set = self.auto_set if auto_set is None: auto_set = True enter_set = self.enter_set or False return TupleEditor( types = self.types, labels = self.labels or [], cols = self.cols or 1, auto_set = auto_set, enter_set = enter_set ) class Tuple ( BaseTuple ): """ Defines a trait whose value must be a tuple of specified trait types using a C-level fast validator. """ def init_fast_validator ( self, *args ): """ Set up the C-level fast validator. """ super( Tuple, self ).init_fast_validator( *args ) self.fast_validate = args #------------------------------------------------------------------------------- # 'List' trait: #------------------------------------------------------------------------------- class List ( TraitType ): """ Defines a trait whose value must be a list whose items are of the specified trait type. """ info_trait = None default_value_type = 5 _items_event = None def __init__ ( self, trait = None, value = None, minlen = 0, maxlen = sys.maxint, items = True, **metadata ): """ Returns a List trait. Parameters ---------- trait : a trait or value that can be converted to a trait using Trait() The type of item that the list contains. If not specified, the list can contain items of any type. value : list Default value for the list. minlen : integer The minimum length of a list that can be assigned to the trait. maxlen : integer The maximum length of a list that can be assigned to the trait. The length of the list assigned to the trait must be such that:: minlen <= len(list) <= maxlen Default Value ------------- *value* or None """ metadata.setdefault( 'copy', 'deep' ) if isinstance( trait, SequenceTypes ): trait, value = value, list( trait ) if value is None: value = [] self.item_trait = trait_from( trait ) self.minlen = max( 0, minlen ) self.maxlen = max( minlen, maxlen ) self.has_items = items if self.item_trait.instance_handler == '_instance_changed_handler': metadata.setdefault( 'instance_handler', '_list_changed_handler' ) super( List, self ).__init__( value, **metadata ) def validate ( self, object, name, value ): """ Validates that the values is a valid list. .. note:: `object` can be None when validating a default value (see e.g. :meth:`~traits.trait_handlers.TraitType.clone`) """ if (isinstance( value, list ) and (self.minlen <= len( value ) <= self.maxlen)): if object is None: return value return TraitListObject( self, object, name, value ) self.error( object, name, value ) def full_info ( self, object, name, value ): """ Returns a description of the trait. """ if self.minlen == 0: if self.maxlen == sys.maxint: size = 'items' else: size = 'at most %d items' % self.maxlen else: if self.maxlen == sys.maxint: size = 'at least %d items' % self.minlen else: size = 'from %s to %s items' % ( self.minlen, self.maxlen ) return 'a list of %s which are %s' % ( size, self.item_trait.full_info( object, name, value ) ) def create_editor ( self ): """ Returns the default UI editor for the trait. """ handler = self.item_trait.handler if isinstance( handler, TraitInstance ) and (self.mode != 'list'): from .api import HasTraits if issubclass( handler.aClass, HasTraits ): from traitsui.api import TableEditor return TableEditor() from traitsui.api import ListEditor return ListEditor( trait_handler = self, rows = self.rows or 5, use_notebook = self.use_notebook is True, page_name = self.page_name or '' ) def inner_traits ( self ): """ Returns the *inner trait* (or traits) for this trait. """ return ( self.item_trait, ) #-- Private Methods -------------------------------------------------------- def items_event ( self ): return items_event() #------------------------------------------------------------------------------- # 'CList' trait: #------------------------------------------------------------------------------- class CList ( List ): """ Defines a trait whose values must be a list whose items are of the specified trait type or which can be coerced to a list whose values are of the specified trait type. """ def validate ( self, object, name, value ): """ Validates that the values is a valid list. """ if not isinstance( value, list ): try: # Should work for all iterables as well as strings (which do # not define an __iter__ method) value = list( value ) except (ValueError, TypeError): value = [ value ] return super( CList, self ).validate( object, name, value ) def full_info ( self, object, name, value ): """ Returns a description of the trait. """ return '%s or %s' % ( self.item_trait.full_info( object, name, value), super( CList, self ).full_info( object, name, value ) ) #------------------------------------------------------------------------------- # 'Set' trait: #------------------------------------------------------------------------------- class Set ( TraitType ): """ Defines a trait whose value must be a set whose items are of the specified trait type. """ info_trait = None default_value_type = 9 _items_event = None def __init__ ( self, trait = None, value = None, items = True, **metadata ): """ Returns a Set trait. Parameters ---------- trait : a trait or value that can be converted to a trait using Trait() The type of item that the list contains. If not specified, the list can contain items of any type. value : set Default value for the set. Default Value ------------- *value* or None """ metadata.setdefault( 'copy', 'deep' ) if isinstance( trait, SetTypes ): trait, value = value, set( trait ) if value is None: value = set() self.item_trait = trait_from( trait ) self.has_items = items super( Set, self ).__init__( value, **metadata ) def validate ( self, object, name, value ): """ Validates that the values is a valid set. .. note:: `object` can be None when validating a default value (see e.g. :meth:`~traits.trait_handlers.TraitType.clone`) """ if isinstance( value, set ): if object is None: return value return TraitSetObject( self, object, name, value ) self.error( object, name, value ) def full_info ( self, object, name, value ): """ Returns a description of the trait. """ return 'a set of %s' % self.item_trait.full_info( object, name, value ) def create_editor ( self ): """ Returns the default UI editor for the trait. """ # fixme: Needs to be customized for sets. handler = self.item_trait.handler if isinstance( handler, TraitInstance ) and (self.mode != 'list'): from .api import HasTraits if issubclass( handler.aClass, HasTraits ): try: object = handler.aClass() from traitsui.table_column import ObjectColumn from traitsui.table_filter import (EvalFilterTemplate, RuleFilterTemplate, MenuFilterTemplate, EvalTableFilter) from traitsui.api import TableEditor return TableEditor( columns = [ ObjectColumn( name = name ) for name in object.editable_traits() ], filters = [ RuleFilterTemplate, MenuFilterTemplate, EvalFilterTemplate ], edit_view = '', orientation = 'vertical', search = EvalTableFilter(), deletable = True, row_factory = handler.aClass ) except: pass from traitsui.api import ListEditor return ListEditor( trait_handler = self, rows = self.rows or 5, use_notebook = self.use_notebook is True, page_name = self.page_name or '' ) def inner_traits ( self ): """ Returns the *inner trait* (or traits) for this trait. """ return ( self.item_trait, ) #-- Private Methods -------------------------------------------------------- def items_event ( self ): if self.__class__._items_event is None: self.__class__._items_event = \ Event( TraitSetEvent, is_base = False ).as_ctrait() return self.__class__._items_event #------------------------------------------------------------------------------- # 'CSet' trait: #------------------------------------------------------------------------------- class CSet ( Set ): """ Defines a trait whose values must be a set whose items are of the specified trait type or which can be coerced to a set whose values are of the specified trait type. """ def validate ( self, object, name, value ): """ Validates that the values is a valid list. """ if not isinstance( value, set ): try: # Should work for all iterables as well as strings (which do # not define an __iter__ method) value = set( value ) except ( ValueError, TypeError ): value = set( [ value ] ) return super( CList, self ).validate( object, name, value ) def full_info ( self, object, name, value ): """ Returns a description of the trait. """ return '%s or %s' % ( self.item_trait.full_info( object, name, value), super( CSet, self ).full_info( object, name, value ) ) #------------------------------------------------------------------------------- # 'Dict' trait: #------------------------------------------------------------------------------- class Dict ( TraitType ): """ Defines a trait whose value must be a dictionary, optionally with specified types for keys and values. """ info_trait = None default_value_type = 6 _items_event = None def __init__ ( self, key_trait = None, value_trait = None, value = None, items = True, **metadata ): """ Returns a Dict trait. Parameters ---------- key_trait : a trait or value that can convert to a trait using Trait() The trait type for keys in the dictionary; if not specified, any values can be used as keys. value_trait : a trait or value that can convert to a trait using Trait() The trait type for values in the dictionary; if not specified, any values can be used as dictionary values. value : dict The default value for the returned trait. items : bool Indicates whether the value contains items. Default Value ------------- *value* or {} """ if isinstance( key_trait, dict ): key_trait, value_trait, value = value_trait, value, key_trait if value is None: value = {} self.key_trait = trait_from( key_trait ) self.value_trait = trait_from( value_trait ) self.has_items = items handler = self.value_trait.handler if (handler is not None) and handler.has_items: handler = handler.clone() handler.has_items = False self.value_handler = handler super( Dict, self ).__init__( value, **metadata ) def validate ( self, object, name, value ): """ Validates that the value is a valid dictionary. .. note:: `object` can be None when validating a default value (see e.g. :meth:`~traits.trait_handlers.TraitType.clone`) """ if isinstance( value, dict ): if object is None: return value return TraitDictObject( self, object, name, value ) self.error( object, name, value ) def full_info ( self, object, name, value ): """ Returns a description of the trait. """ return ('a dictionary with keys which are %s and with values which ' 'are %s') % ( self.key_trait.full_info( object, name, value ), self.value_trait.full_info( object, name, value ) ) def create_editor ( self ): """ Returns the default UI editor for the trait. """ from traitsui.api import TextEditor return TextEditor( evaluate = eval ) def inner_traits ( self ): """ Returns the *inner trait* (or traits) for this trait. """ return ( self.key_trait, self.value_trait ) #-- Private Methods -------------------------------------------------------- def items_event ( self ): cls = self.__class__ if cls._items_event is None: cls._items_event = \ Event( TraitDictEvent, is_base = False ).as_ctrait() return cls._items_event #------------------------------------------------------------------------------- # 'BaseInstance' and 'Instance' traits: #------------------------------------------------------------------------------- # Allowed values and mappings for the 'adapt' keyword: AdaptMap = { 'no': 0, 'yes': 1, 'default': 2 } class BaseClass ( TraitType ): """ Base class for types which have an associated class which can be determined dynamically by specifying a string name for the class (e.g. 'package1.package2.module.class'. Any subclass must define instances with 'klass' and 'module' attributes that contain the string name of the class (or actual class object) and the module name that contained the original trait definition (used for resolving local class names (e.g. 'LocalClass')). This is an abstract class that only provides helper methods used to resolve the class name into an actual class object. """ def resolve_class ( self, object, name, value ): klass = self.validate_class( self.find_class( self.klass ) ) if klass is None: self.validate_failed( object, name, value ) self.klass = klass def validate_class ( self, klass ): return klass def find_class ( self, klass ): module = self.module col = klass.rfind( '.' ) if col >= 0: module = klass[ : col ] klass = klass[ col + 1: ] theClass = getattr( sys.modules.get( module ), klass, None ) if (theClass is None) and (col >= 0): try: mod = __import__( module ) for component in module.split( '.' )[1:]: mod = getattr( mod, component ) theClass = getattr( mod, klass, None ) except: pass return theClass def validate_failed ( self, object, name, value ): self.error( object, name, value ) def validate_implements ( value, klass, unused = None ): """ Checks to see if a specified value implements the instance class interface (if it is an interface). """ from .has_traits import isinterface from .interface_checker import check_implements return isinterface(klass) and check_implements( value.__class__, klass ) #: Tell the C-base code about the 'validate_implements' function (used by the #: 'fast_validate' code for Instance types): from . import ctraits ctraits._validate_implements( validate_implements ) class BaseInstance ( BaseClass ): """ Defines a trait whose value must be an instance of a specified class, or one of its subclasses. """ adapt_default = 'no' def __init__ ( self, klass = None, factory = None, args = None, kw = None, allow_none = True, adapt = None, module = None, **metadata ): """ Returns an Instance trait. Parameters ---------- klass : class or instance The object that forms the basis for the trait; if it is an instance, then trait values must be instances of the same class or a subclass. This object is not the default value, even if it is an instance. factory : callable A callable, typically a class, that when called with *args* and *kw*, returns the default value for the trait. If not specified, or *None*, *klass* is used as the factory. args : tuple Positional arguments for generating the default value. kw : dictionary Keyword arguments for generating the default value. allow_none : bool Indicates whether None is allowed as a value. adapt : str A string specifying how adaptation should be applied. The possible values are: - 'no': Adaptation is not allowed. - 'yes': Adaptation is allowed. If adaptation fails, an exception should be raised. - 'default': Adaptation is allowed. If adaptation fails, the default value for the trait should be used. Default Value ------------- **None** if *klass* is an instance or if it is a class and *args* and *kw* are not specified. Otherwise, the default value is the instance obtained by calling ``klass(*args, **kw)``. Note that the constructor call is performed each time a default value is assigned, so each default value assigned is a unique instance. """ if klass is None: raise TraitError( 'A %s trait must have a class specified.' % self.__class__.__name__ ) metadata.setdefault( 'copy', 'deep' ) metadata.setdefault( 'instance_handler', '_instance_changed_handler' ) adapt = adapt or self.adapt_default if adapt not in AdaptMap: raise TraitError( "'adapt' must be 'yes', 'no' or 'default'." ) if isinstance( factory, tuple ): if args is None: args, factory = factory, klass elif isinstance( args, dict ): factory, args, kw = klass, factory, args elif (kw is None) and isinstance( factory, dict ): kw, factory = factory, klass elif ((args is not None) or (kw is not None)) and (factory is None): factory = klass self._allow_none = allow_none self.adapt = AdaptMap[ adapt ] self.module = module or get_module_name() if isinstance( klass, basestring ): self.klass = klass else: if not isinstance( klass, ClassTypes ): klass = klass.__class__ self.klass = klass self.init_fast_validate() value = factory if factory is not None: if args is None: args = () if kw is None: if isinstance( args, dict ): kw = args args = () else: kw = {} elif not isinstance( kw, dict ): raise TraitError( "The 'kw' argument must be a dictionary." ) if ((not callable( factory )) and (not isinstance( factory, basestring ))): if (len( args ) > 0) or (len( kw ) > 0): raise TraitError( "'factory' must be callable" ) else: value = _InstanceArgs( factory, args, kw ) self.default_value = value super( BaseInstance, self ).__init__( value, **metadata ) def validate ( self, object, name, value ): """ Validates that the value is a valid object instance. """ from traits.adaptation.api import adapt if value is None: if self._allow_none: return value self.validate_failed( object, name, value ) if isinstance( self.klass, basestring ): self.resolve_class( object, name, value ) if self.adapt == 0: try: if value is adapt( value, self.klass ): return value except: if validate_implements( value, self.klass ): return value elif self.adapt == 1: try: return adapt( value, self.klass ) except: if validate_implements( value, self.klass ): return value else: result = adapt( value, self.klass, None ) if result is None: if validate_implements( value, self.klass ): return value result = self.default_value if isinstance( result, _InstanceArgs ): result = result[0]( *result[1], **result[2] ) return result self.validate_failed( object, name, value ) def info ( self ): """ Returns a description of the trait. """ klass = self.klass if not isinstance( klass, basestring ): klass = klass.__name__ if self.adapt == 0: result = class_of( klass ) else: result = ('an implementor of, or can be adapted to implement, %s' % klass) if self._allow_none: return result + ' or None' return result def get_default_value ( self ): """ Returns a tuple of the form: ( default_value_type, default_value ) which describes the default value for this trait. """ dv = self.default_value dvt = self.default_value_type if dvt < 0: if not isinstance( dv, _InstanceArgs ): return super( BaseInstance, self ).get_default_value() self.default_value_type = dvt = 7 self.default_value = dv = ( self.create_default_value, dv.args, dv.kw ) return ( dvt, dv ) def create_editor ( self ): """ Returns the default traits UI editor for this type of trait. """ from traitsui.api import InstanceEditor return InstanceEditor( label = self.label or '', view = self.view or '', kind = self.kind or 'live' ) #-- Private Methods -------------------------------------------------------- def create_default_value ( self, *args, **kw ): klass = args[0] if isinstance( klass, basestring ): klass = self.validate_class( self.find_class( klass ) ) if klass is None: raise TraitError, 'Unable to locate class: ' + args[0] return klass( *args[1:], **kw ) #: fixme: Do we still need this method using the new style?... def allow_none ( self ): self._allow_none = True self.init_fast_validate() def init_fast_validate ( self ): """ Does nothing for the BaseInstance' class. Used by the 'Instance', 'AdaptedTo' and 'AdaptsTo' classes to set up the C-level fast validator. """ pass def resolve_class ( self, object, name, value ): super( BaseInstance, self ).resolve_class( object, name, value ) #: fixme: The following is quite ugly, because it wants to try and fix #: the trait referencing this handler to use the 'fast path' now that the #: actual class has been resolved. The problem is finding the trait, # especially in the case of List(Instance('foo')), where the # object.base_trait(...) value is the List trait, not the Instance # trait, so we need to check for this and pull out the List # 'item_trait'. Obviously this does not extend well to other traits # containing nested trait references (Dict?)... self.init_fast_validate() trait = object.base_trait( name ) handler = trait.handler if handler is not self: set_validate = getattr( handler, 'set_validate', None ) if set_validate is not None: # The outer trait is a TraitCompound. Recompute its # fast_validate table now that we have updated ours. # FIXME: there are probably still issues if the TraitCompound is # further nested. set_validate() else: item_trait = getattr( handler, 'item_trait', None ) if item_trait is not None and item_trait.handler is self: # The outer trait is a List trait. trait = item_trait handler = self else: return if handler.fast_validate is not None: trait.set_validate( handler.fast_validate ) class Instance ( BaseInstance ): """ Defines a trait whose value must be an instance of a specified class, or one of its subclasses using a C-level fast validator. """ def init_fast_validate ( self ): """ Sets up the C-level fast validator. """ from .has_traits import isinterface if (self.adapt == 0) and (not isinterface(self.klass)): fast_validate = [ 1, self.klass ] if self._allow_none: fast_validate = [ 1, None, self.klass ] if self.klass in TypeTypes: fast_validate[0] = 0 self.fast_validate = tuple( fast_validate ) else: self.fast_validate = ( 19, self.klass, self.adapt, self._allow_none ) class Supports( Instance ): """ A traits whose value must support a specified protocol. In other words, the value of the trait directly provide, or can be adapted to, the given protocol (Interface or type). The value of the trait after assignment is the possibly adapted value (i.e., it is the original assigned value if that provides the protocol, or is an adapter otherwise). The original, unadapted value is stored in a "shadow" attribute with the same name followed by an underscore (e.g., 'foo' and 'foo_'). """ adapt_default = 'yes' def post_setattr ( self, object, name, value ): """ Performs additional post-assignment processing. """ # Save the original, unadapted value in the mapped trait: object.__dict__[ name + '_' ] = value def as_ctrait ( self ): """ Returns a CTrait corresponding to the trait defined by this class. """ return self.modify_ctrait( super( AdaptedTo, self ).as_ctrait() ) def modify_ctrait ( self, ctrait ): # Tell the C code that the 'post_setattr' method wants the original, # unadapted value passed to 'setattr': return ctrait.post_setattr_original_value( True ) # Alias defined for backward compatibility with Traits 4.3.0 AdaptedTo = Supports class AdaptsTo ( Supports ): """ A traits whose value must support a specified protocol. In other words, the value of the trait directly provide, or can be adapted to, the given protocol (Interface or type). The value of the trait after assignment is the original, unadapted value. A possibly adapted value is stored in a "shadow" attribute with the same name followed by an underscore (e.g., 'foo' and 'foo_'). """ def modify_ctrait ( self, ctrait ): # Tell the C code that 'setattr' should store the original, unadapted # value passed to it: return ctrait.setattr_original_value( True ) #------------------------------------------------------------------------------- # 'Type' trait: #------------------------------------------------------------------------------- class Type ( BaseClass ): """ Defines a trait whose value must be a subclass of a specified class. """ def __init__ ( self, value = None, klass = None, allow_none = True, **metadata ): """ Returns an Type trait. Parameters ---------- value : class or None klass : class or None allow_none : bool Indicates whether None is allowed as an assignable value. Even if **False**, the default *value* may be **None**. Default Value ------------- **None** if *klass* is an instance or if it is a class and *args* and *kw* are not specified. Otherwise, the default value is the instance obtained by calling ``klass(*args, **kw)``. Note that the constructor call is performed each time a default value is assigned, so each default value assigned is a unique instance. """ if value is None: if klass is None: klass = object elif klass is None: klass = value if isinstance( klass, basestring ): self.validate = self.resolve elif not isinstance( klass, ClassTypes ): raise TraitError( "A Type trait must specify a class." ) self.klass = klass self._allow_none = allow_none self.module = get_module_name() super( Type, self ).__init__( value, **metadata ) def validate ( self, object, name, value ): """ Validates that the value is a valid object instance. """ try: if issubclass( value, self.klass ): return value except: if (value is None) and (self._allow_none): return value self.error( object, name, value ) def resolve ( self, object, name, value ): """ Resolves a class originally specified as a string into an actual class, then resets the trait so that future calls will be handled by the normal validate method. """ if isinstance( self.klass, basestring ): self.resolve_class( object, name, value ) del self.validate return self.validate( object, name, value ) def info ( self ): """ Returns a description of the trait. """ klass = self.klass if not isinstance( klass, basestring ): klass = klass.__name__ result = 'a subclass of ' + klass if self._allow_none: return result + ' or None' return result def get_default_value ( self ): """ Returns a tuple of the form: ( default_value_type, default_value ) which describes the default value for this trait. """ if not isinstance( self.default_value, basestring ): return super( Type, self ).get_default_value() return ( 7, ( self.resolve_default_value, (), None ) ) def resolve_default_value ( self ): """ Resolves a class name into a class so that it can be used to return the class as the default value of the trait. """ if isinstance( self.klass, basestring ): try: self.resolve_class( None, None, None ) del self.validate except: raise TraitError( 'Could not resolve %s into a valid class' % self.klass ) return self.klass #------------------------------------------------------------------------------- # 'Event' trait: #------------------------------------------------------------------------------- class Event ( TraitType ): def __init__ ( self, trait = None, **metadata ): metadata[ 'type' ] = 'event' metadata[ 'transient' ] = True super( Event, self ).__init__( **metadata ) self.trait = None if trait is not None: self.trait = trait_from( trait ) validate = self.trait.get_validate() if validate is not None: self.fast_validate = validate def full_info ( self, object, name, value ): """ Returns a description of the trait. """ trait = self.trait if trait is None: return 'any value' return trait.full_info( object, name, value ) # Handle circular module dependencies: trait_handlers.Event = Event #------------------------------------------------------------------------------- # 'Button' trait: #------------------------------------------------------------------------------- class Button ( Event ): """ Defines a trait whose UI editor is a button. """ def __init__ ( self, label = '', image = None, values_trait = None, style = 'button', orientation = 'vertical', width_padding = 7, height_padding = 5, view = None, **metadata ): """ Returns a trait event whose editor is a button. Parameters ---------- label : str The label for the button. image : pyface.ImageResource An image to display on the button. style : one of: 'button', 'radio', 'toolbar', 'checkbox' The style of button to display. values_trait : str For a "button" or "toolbar" style, the name of an enum trait whose values will populate a drop-down menu on the button. The selected value will replace the label on the button. orientation : one of: 'horizontal', 'vertical' The orientation of the label relative to the image. width_padding : integer between 0 and 31 Extra padding (in pixels) added to the left and right sides of the button. height_padding : integer between 0 and 31 Extra padding (in pixels) added to the top and bottom of the button. Default Value ------------- No default value because events do not store values. """ self.label = label self.values_trait = values_trait self.image = image self.style = style self.orientation = orientation self.width_padding = width_padding self.height_padding = height_padding self.view = view super( Button, self ).__init__( **metadata ) def create_editor(self): from traitsui.api import ButtonEditor editor = ButtonEditor( label = self.label, values_trait = self.values_trait, image = self.image, style = self.style, orientation = self.orientation, width_padding = self.width_padding, height_padding = self.height_padding, view = self.view, ) return editor #------------------------------------------------------------------------------- # 'ToolbarButton' trait: #------------------------------------------------------------------------------- class ToolbarButton ( Button ): """ Defines a trait whose UI editor is a button that can be used on a toolbar. """ def __init__ ( self, label = '', image = None, style = 'toolbar', orientation = 'vertical', width_padding = 2, height_padding = 2, **metadata ): """ Returns a trait event whose editor is a toolbar button. Parameters ---------- label : str The label for the button image : pyface.ImageResource An image to display on the button style : one of: 'button', 'radio', 'toolbar', 'checkbox' The style of button to display orientation : one of ['horizontal', 'vertical'] The orientation of the label relative to the image width_padding : integer between 0 and 31 Extra padding (in pixels) added to the left and right sides of the button height_padding : integer between 0 and 31 Extra padding (in pixels) added to the top and bottom of the button Default Value ------------- No default value because events do not store values. """ super( ToolbarButton, self ).__init__( label, image=image, style=style, orientation=orientation, width_padding=width_padding, height_padding=height_padding, **metadata ) #------------------------------------------------------------------------------- # 'Either' trait: #------------------------------------------------------------------------------- class Either ( TraitType ): """ Defines a trait whose value can be any of of a specified list of traits. """ def __init__ ( self, *traits, **metadata ): """ Creates a trait whose value can be any of of a specified list of traits. """ self.trait_maker = _TraitMaker( metadata.pop( 'default', None ), *traits, **metadata ) def as_ctrait ( self ): """ Returns a CTrait corresponding to the trait defined by this class. """ return self.trait_maker.as_ctrait() #------------------------------------------------------------------------------- # 'Symbol' trait: #------------------------------------------------------------------------------- class Symbol ( TraitType ): #: A description of the type of value this trait accepts: info_text = ("an object or a string of the form " "'[package.package...package.]module[:symbol[([arg1,...,argn])]]' " "specifying where to locate the object") def get ( self, object, name ): value = object.__dict__.get( name, Undefined ) if value is Undefined: cache = TraitsCache + name ref = object.__dict__.get( cache ) if ref is None: object.__dict__[ cache ] = ref = \ object.trait( name ).default_value_for( object, name ) if isinstance( ref, basestring ): object.__dict__[ name ] = value = self._resolve( ref ) return value def set ( self, object, name, value ): dict = object.__dict__ old = dict.get( name, Undefined ) if isinstance( value, basestring ): dict.pop( name, None ) dict[ TraitsCache + name ] = value object.trait_property_changed( name, old ) else: dict[ name ] = value object.trait_property_changed( name, old, value ) def _resolve ( self, ref ): try: path = ref.split( ':', 1 ) module = __import__( path[0] ) for component in path[0].split( '.' )[1:]: module = getattr( module, component ) if len( path ) == 1: return module elements = path[1].split( '(', 1 ) symbol = getattr( module, elements[0] ) if len( elements ) == 1: return symbol args = eval( '(' + elements[1] ) if not isinstance( args, tuple ): args = ( args, ) return symbol( *args ) except: raise TraitError( "Could not resolve '%s' into a valid symbol." % ref ) if python_version >= 2.5: import uuid #--------------------------------------------------------------------------- # 'UUID' trait: #--------------------------------------------------------------------------- class UUID ( TraitType ): """ Defines a trait whose value is a globally unique UUID (type 4). """ #: A description of the type of value this trait accepts: info_text = 'a read-only UUID' def __init__ ( self, **metadata ): """ Returns a UUID trait. """ super( UUID, self ).__init__( None, **metadata ) def validate ( self, object, name, value ): """ Raises an error, since no values can be assigned to the trait. """ raise TraitError( "The '%s' trait of %s instance is a read-only " "UUID." % ( name, class_of( object ) ) ) def get_default_value ( self ): return ( 7, ( self._create_uuid, (), None ) ) #-- Private Methods --------------------------------------------------- def _create_uuid ( self ): return uuid.uuid4() #------------------------------------------------------------------------------- # 'WeakRef' trait: #------------------------------------------------------------------------------- class WeakRef ( Instance ): """ Returns a trait whose value must be an instance of the same type (or a subclass) of the specified *klass*, which can be a class or an instance. Note that the trait only maintains a weak reference to the assigned value. """ def __init__ ( self, klass = 'traits.has_traits.HasTraits', allow_none = False, adapt = 'yes', **metadata ): """ Returns a WeakRef trait. Only a weak reference is maintained to any object assigned to a WeakRef trait. If no other references exist to the assigned value, the value may be garbage collected, in which case the value of the trait becomes None. In all other cases, the value returned by the trait is the original object. Parameters ---------- klass : class or instance The object that forms the basis for the trait. If *klass* is omitted, then values must be an instance of HasTraits. allow_none : boolean Indicates whether None can be assigned. Default Value ------------- **None** (even if allow_none==False) """ metadata.setdefault( 'copy', 'ref' ) super( WeakRef, self ).__init__( klass, allow_none = allow_none, adapt = adapt, module = get_module_name(), **metadata ) def get ( self, object, name ): value = getattr( object, name + '_', None ) if value is not None: return value.value() return None def set ( self, object, name, value ): old = self.get( object, name ) if value is None: object.__dict__[ name + '_' ] = None else: object.__dict__[ name + '_' ] = HandleWeakRef( object, name, value ) if value is not old: object.trait_property_changed( name, old, value ) def resolve_class ( self, object, name, value ): # fixme: We have to override this method to prevent the 'fast validate' # from being set up, since the trait using this is a 'property' style # trait which is not currently compatible with the 'fast_validate' # style (causes internal Python SystemError messages). klass = self.find_class( self.klass ) if klass is None: self.validate_failed( object, name, value ) self.klass = klass #-- Date Trait definition ---------------------------------------------------- Date = BaseInstance(datetime.date, editor=date_editor) #-- Time Trait definition ---------------------------------------------------- Time = BaseInstance(datetime.time, editor=time_editor) #------------------------------------------------------------------------------- # Create predefined, reusable trait instances: #------------------------------------------------------------------------------- # Synonym for Bool; default value is False. false = Bool # Boolean values only; default value is True. true = Bool( True ) # Allows any value to be assigned; no type-checking is performed. # Default value is Undefined. undefined = Any( Undefined ) #-- List Traits ---------------------------------------------------------------- #: List of integer values; default value is []. ListInt = List( int ) #: List of float values; default value is []. ListFloat = List( float ) #: List of string values; default value is []. ListStr = List( str ) #: List of Unicode string values; default value is []. ListUnicode = List( unicode ) #: List of complex values; default value is []. ListComplex = List( complex ) #: List of Boolean values; default value is []. ListBool = List( bool ) #: List of function values; default value is []. ListFunction = List( FunctionType ) #: List of method values; default value is []. ListMethod = List( MethodType ) if sys.version_info[0] < 3: from types import ClassType, InstanceType #: List of class values; default value is []. ListClass = List( ClassType ) #: List of instance values; default value is []. ListInstance = List( InstanceType ) #: List of container type values; default value is []. ListThis = List( ThisClass ) #-- Dictionary Traits ---------------------------------------------------------- #: Only a dictionary of string:Any values can be assigned; only string keys can #: be inserted. The default value is {}. DictStrAny = Dict( str, Any ) #: Only a dictionary of string:string values can be assigned; only string keys #: with string values can be inserted. The default value is {}. DictStrStr = Dict( str, str ) #: Only a dictionary of string:integer values can be assigned; only string keys #: with integer values can be inserted. The default value is {}. DictStrInt = Dict( str, int ) #: Only a dictionary of string:long-integer values can be assigned; only string #: keys with long-integer values can be inserted. The default value is {}. DictStrLong = Dict( str, long ) #: Only a dictionary of string:float values can be assigned; only string keys #: with float values can be inserted. The default value is {}. DictStrFloat = Dict( str, float ) #: Only a dictionary of string:bool values can be assigned; only string keys #: with boolean values can be inserted. The default value is {}. DictStrBool = Dict( str, bool ) #: Only a dictionary of string:list values can be assigned; only string keys #: with list values can be assigned. The default value is {}. DictStrList = Dict( str, list ) traits-4.5.0/traits/trait_value.py000066400000000000000000000174271233213561600172420ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2008, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Original Date: 04/01/2008 # #------------------------------------------------------------------------------ """ Defines the TraitValue class, used for creating special, dynamic trait values. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import from .trait_base import Undefined from .traits import CTrait from .has_traits import HasTraits, HasPrivateTraits from .trait_errors import TraitError from .trait_types import Tuple, Dict, Any, Str, Instance, Event, Callable from .trait_handlers import TraitType, _read_only, _write_only, _arg_count #------------------------------------------------------------------------------- # 'BaseTraitValue' class: #------------------------------------------------------------------------------- class BaseTraitValue ( HasPrivateTraits ): # Subclasses can define this trait as a property: # value = Property #-- Public Methods --------------------------------------------------------- def as_ctrait ( self, original_trait ): """ Returns the low-level C-based trait for this TraitValue. """ notifiers = original_trait._notifiers( 0 ) if self._ctrait is not None: if (notifiers is None) or (len( notifiers ) == 0): return self._ctrait trait = CTrait( 0 ) trait.clone( self._ctrait ) else: trait = self._as_ctrait( original_trait ) if ((trait is not None) and (notifiers is not None) and (len( notifiers ) > 0)): trait._notifiers( 1 ).extend( notifiers ) return trait #-- Private Methods -------------------------------------------------------- def _as_ctrait ( self, original_trait ): """ Returns the low-level C-based trait for this TraitValue. """ value_trait = self.trait( 'value' ) if value_trait is None: return None if value_trait.type != 'property': raise TraitError( "Invalid TraitValue specified." ) metadata = { 'type': 'property', '_trait_value': self } getter, setter, validate = value_trait.property() read_only = (getter is _read_only) if not read_only: getter = self._getter metadata[ 'transient' ] = True if setter is not _write_only: if read_only: setter = self._read_only_setter else: setter = self._setter metadata[ 'transient' ] = True return self._property_trait( getter, setter, validate, metadata ) def _property_trait ( self, getter, setter, validate, metadata ): """ Returns a properly constructed 'property' trait. """ n = 0 if validate is not None: n = _arg_count( validate ) trait = CTrait( 4 ) trait.property( getter, _arg_count( getter ), setter, _arg_count( setter ), validate, n ) trait.value_allowed( True ) trait.value_property( True ) trait.__dict__ = metadata return trait def _getter ( self, object, name ): return self.value def _setter ( self, object, name, value ): old_value = self.value self.value = value new_value = self.value if new_value != old_value: object.trait_property_changed( name, old_value, new_value ) def _read_only_setter ( self, object, name, value ): self.value = value object.trait_property_changed( name, Undefined, value ) #------------------------------------------------------------------------------- # 'TraitValue' class: #------------------------------------------------------------------------------- class TraitValue ( BaseTraitValue ): #: The callable used to define a default value: default = Callable #: The positional arguments to pass to the callable default value: args = Tuple #: The keyword arguments to pass to the callable default value: kw = Dict #: The trait to use as the new trait type: type = Any #: The object to delegate the new value to: delegate = Instance( HasTraits ) #: The name of the trait on the delegate object to get the new value from: name = Str #-- Private Methods -------------------------------------------------------- def _as_ctrait ( self, original_trait ): """ Returns the low-level C-based trait for this TraitValue. """ if self.default is not None: trait = CTrait( 0 ) trait.clone( original_trait ) if original_trait.__dict__ is not None: trait.__dict__ = original_trait.__dict__.copy() trait.default_value( 7, ( self.default, self.args, self.kw ) ) elif self.type is not None: type = self.type try: rc = issubclass( type, TraitType ) except: rc = False if rc: type = type( *self.args, **self.kw ) if not isinstance( type, TraitType ): raise TraitError( ("The 'type' attribute of a TraitValue " "instance must be a TraitType instance or subclass, but a " "value of %s was specified.") % self.trait ) self._ctrait = trait = type.as_ctrait() trait.value_allowed( True ) elif self.delegate is None: return None else: if self.name == '': raise TraitError( "You must specify a non-empty string " "value for the 'name' attribute when using the " "'delegate' trait of a TraitValue instance." ) metadata = { 'type': 'property', '_trait_value': self, 'transient': True } getter = self._delegate_getter setter = self._delegate_setter validate = None self.add_trait( 'value', Event() ) self.delegate.on_trait_change( self._delegate_modified, self.name ) trait = self._property_trait( getter, setter, validate, metadata ) return trait def _delegate_getter ( self, object, name ): return getattr( self.delegate, self.name ) def _delegate_setter ( self, object, name, value ): setattr( self.delegate, self.name, value ) #-- Traits Event Handlers -------------------------------------------------- def _delegate_modified ( self ): self.value = True #-- Helper Function Definitions ------------------------------------------------ def SyncValue ( delegate, name ): return TraitValue( delegate = delegate, name = name ) def TypeValue ( type ): return TraitValue( type = type ) def DefaultValue ( default, args = (), kw = {} ): return TraitValue( default = default, args = args, kw = kw ) #------------------------------------------------------------------------------- # Tell the C-based traits module about the 'BaseTraitValue' class: #------------------------------------------------------------------------------- from . import ctraits ctraits._value_class( BaseTraitValue ) traits-4.5.0/traits/traits.py000066400000000000000000001347721233213561600162340ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Original Date: 06/21/2002 # # Rewritten as a C-based type extension: 06/21/2004 # #------------------------------------------------------------------------------ """ Defines the 'core' traits for the Traits package. A trait is a type definition that can be used for normal Python object attributes, giving the attributes some additional characteristics: Initialization: Traits have predefined values that do not need to be explicitly initialized in the class constructor or elsewhere. Validation: Trait attributes have flexible, type-checked values. Delegation: Trait attributes' values can be delegated to other objects. Notification: Trait attributes can automatically notify interested parties when their values change. Visualization: Trait attributes can automatically construct (automatic or programmer-defined) user interfaces that allow their values to be edited or displayed) .. note:: 'trait' is a synonym for 'property', but is used instead of the word 'property' to differentiate it from the Python language 'property' feature. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import import sys from types import FunctionType, MethodType NoneType = type(None) # Python 3's types does not include NoneType from . import trait_handlers from .ctraits import cTrait from .trait_errors import TraitError from .trait_base import (SequenceTypes, Self, Undefined, Missing, TypeTypes, add_article) from .trait_handlers import (TraitHandler, TraitInstance, TraitFunction, TraitCoerceType, TraitCastType, TraitEnum, TraitCompound, TraitMap, TraitString, ThisClass, TraitType, _arg_count, _read_only, _write_only, _undefined_get, _undefined_set) #------------------------------------------------------------------------------- # Constants: #------------------------------------------------------------------------------- # Mapping from 'ctrait' default value types to a string representation: KindMap = { 0: 'value', 1: 'value', 2: 'self', 3: 'list', 4: 'dict', 5: 'list', 6: 'dict', 7: 'factory', 8: 'method' } #------------------------------------------------------------------------------- # Editor factory functions: #------------------------------------------------------------------------------- PasswordEditor = None MultilineTextEditor = None SourceCodeEditor = None HTMLTextEditor = None PythonShellEditor = None DateEditor = None TimeEditor = None def password_editor ( auto_set=True, enter_set=False ): """ Factory function that returns an editor for passwords. """ global PasswordEditor if PasswordEditor is None: from traitsui.api import TextEditor PasswordEditor = TextEditor( password = True , auto_set = auto_set, enter_set = enter_set ) return PasswordEditor def multi_line_text_editor ( auto_set=True, enter_set=False ): """ Factory function that returns a text editor for multi-line strings. """ global MultilineTextEditor if MultilineTextEditor is None: from traitsui.api import TextEditor MultilineTextEditor = TextEditor( multi_line = True, auto_set = auto_set, enter_set = enter_set ) return MultilineTextEditor def code_editor ( ): """ Factory function that returns an editor that treats a multi-line string as source code. """ global SourceCodeEditor if SourceCodeEditor is None: from traitsui.api import CodeEditor SourceCodeEditor = CodeEditor() return SourceCodeEditor def html_editor ( ): """ Factory function for an "editor" that displays a multi-line string as interpreted HTML. """ global HTMLTextEditor if HTMLTextEditor is None: from traitsui.api import HTMLEditor HTMLTextEditor = HTMLEditor() return HTMLTextEditor def shell_editor ( ): """ Factory function that returns a Python shell for editing Python values. """ global PythonShellEditor if PythonShellEditor is None: from traitsui.api import ShellEditor PythonShellEditor = ShellEditor() return PythonShellEditor def time_editor ( ): """ Factory function that returns a Time editor for editing Time values. """ global TimeEditor if TimeEditor is None: from traitsui.api import TimeEditor TimeEditor = TimeEditor() return TimeEditor def date_editor ( ): """ Factory function that returns a Date editor for editing Date values. """ global DateEditor if DateEditor is None: from traitsui.api import DateEditor DateEditor = DateEditor() return DateEditor #------------------------------------------------------------------------------- # 'CTrait' class (extends the underlying cTrait c-based type): #------------------------------------------------------------------------------- class CTrait ( cTrait ): """ Extends the underlying C-based cTrait type. """ #--------------------------------------------------------------------------- # Allows a derivative trait to be defined from this one: #--------------------------------------------------------------------------- def __call__ ( self, *args, **metadata ): handler = self.handler if isinstance( handler, TraitType ): dict = (self.__dict__ or {}).copy() dict.update( metadata ) return handler( *args, **dict ) metadata.setdefault( 'parent', self ) return Trait( *(args + ( self, )), **metadata ) #--------------------------------------------------------------------------- # (Python) property definitions: #--------------------------------------------------------------------------- def __get_default ( self ): kind, value = self.default_value() if kind in ( 2, 7, 8 ): return Undefined if kind in ( 4, 6 ): return value.copy() if kind in ( 3, 5 ): return value[:] return value default = property( __get_default ) def __get_default_kind ( self ): return KindMap[ self.default_value()[0] ] default_kind = property( __get_default_kind ) def __get_trait_type ( self ): handler = self.handler if handler is not None: return handler else: from .trait_types import Any return Any trait_type = property( __get_trait_type ) def __get_inner_traits ( self ): handler = self.handler if handler is not None: return handler.inner_traits() return () inner_traits = property( __get_inner_traits ) #--------------------------------------------------------------------------- # Returns whether or not this trait is of a specified trait type: #--------------------------------------------------------------------------- def is_trait_type ( self, trait_type ): """ Returns whether or not this trait is of a specified trait type. """ return isinstance( self.trait_type, trait_type ) #--------------------------------------------------------------------------- # Returns the user interface editor associated with the trait: #--------------------------------------------------------------------------- def get_editor ( self ): """ Returns the user interface editor associated with the trait. """ from traitsui.api import EditorFactory # See if we have an editor: editor = self.editor if editor is None: # Else see if the trait handler has an editor: handler = self.handler if handler is not None: editor = handler.get_editor( self ) # If not, give up and use a default text editor: if editor is None: from traitsui.api import TextEditor editor = TextEditor # If the result is not an EditorFactory: if not isinstance( editor, EditorFactory ): # Then it should be a factory for creating them: args = () traits = {} if type( editor ) in SequenceTypes: for item in editor[:]: if type( item ) in SequenceTypes: args = tuple( item ) elif isinstance( item, dict ): traits = item if traits.get( 'trait', 0 ) is None: traits = traits.copy() traits[ 'trait' ] = self else: editor = item editor = editor( *args, **traits ) # Cache the result: self.editor = editor # Return the resulting EditorFactory object: return editor #--------------------------------------------------------------------------- # Returns the help text for a trait: #--------------------------------------------------------------------------- def get_help ( self, full = True ): """ Returns the help text for a trait. Parameters ---------- full : bool Indicates whether to return the value of the *help* attribute of the trait itself. Description ----------- If *full* is False or the trait does not have a **help** string, the returned string is constructed from the **desc** attribute on the trait and the **info** string on the trait's handler. """ if full: help = self.help if help is not None: return help handler = self.handler if handler is not None: info = 'must be %s.' % handler.info() else: info = 'may be any value.' desc = self.desc if self.desc is None: return info.capitalize() return 'Specifies %s and %s' % ( desc, info ) #--------------------------------------------------------------------------- # Returns a description of the trait: #--------------------------------------------------------------------------- def full_info ( self, object, name, value ): """ Returns a description of the trait. """ handler = self.handler if handler is not None: return handler.full_info( object, name, value ) return 'any value' #--------------------------------------------------------------------------- # Returns a description of the trait: #--------------------------------------------------------------------------- def info ( self ): """ Returns a description of the trait. """ handler = self.handler if handler is not None: return handler.info() return 'any value' #--------------------------------------------------------------------------- # Returns the pickleable form of a CTrait object: #--------------------------------------------------------------------------- def __reduce_ex__ ( self, protocol ): return ( __newobj__, ( self.__class__, 0 ), self.__getstate__() ) #--------------------------------------------------------------------------- # Registers listeners on an assigned 'TraitValue' object's 'value' # property: #--------------------------------------------------------------------------- def _register ( self, object, name ): """ Registers listeners on an assigned 'TraitValue' object's 'value' property. """ def handler ( ): object.trait_property_changed( name, None ) tv = self._trait_value handlers = tv._handlers if handlers is None: tv._handlers = handlers = {} handlers[ ( id( object ), name ) ] = handler tv.on_trait_change( handler, 'value' ) #--------------------------------------------------------------------------- # Unregisters listeners on an assigned 'TraitValue' object's 'value' # property: #--------------------------------------------------------------------------- def _unregister ( self, object, name ): """ Unregisters listeners on an assigned 'TraitValue' object's 'value' property. """ tv = self._trait_value handlers = tv._handlers key = ( id( object ), name ) handler = handlers.get( key ) if handler is not None: del handlers[ key ] tv.on_trait_change( handler, 'value', remove = True ) # Make sure the Python-level version of the trait class is known to all # interested parties: from . import ctraits ctraits._ctrait( CTrait ) #------------------------------------------------------------------------------- # Constants: #------------------------------------------------------------------------------- ConstantTypes = ( NoneType, int, long, float, complex, str, unicode ) PythonTypes = ( str, unicode, int, long, float, complex, list, tuple, dict, FunctionType, MethodType, type, NoneType ) if sys.version_info[0] < 3: from types import InstanceType,ClassType PythonTypes = PythonTypes[:-2] + (InstanceType,ClassType) + PythonTypes[2:] CallableTypes = ( FunctionType, MethodType ) TraitTypes = ( TraitHandler, CTrait ) DefaultValues = { str: '', unicode: u'', int: 0, long: 0L, float: 0.0, complex: 0j, list: [], tuple: (), dict: {}, bool: False } DefaultValueSpecial = [ Missing, Self ] DefaultValueTypes = [ list, dict ] #------------------------------------------------------------------------------- # Function used to unpickle new-style objects: #------------------------------------------------------------------------------- def __newobj__ ( cls, *args ): """ Unpickles new-style objects. """ return cls.__new__( cls, *args ) #------------------------------------------------------------------------------- # Returns the type of default value specified: #------------------------------------------------------------------------------- def _default_value_type ( default_value ): try: return DefaultValueSpecial.index( default_value ) + 1 except: try: return DefaultValueTypes.index( type( default_value ) ) + 3 except: return 0 #------------------------------------------------------------------------------- # 'TraitFactory' class: #------------------------------------------------------------------------------- class TraitFactory ( object ): ### Need a docstring here. #--------------------------------------------------------------------------- # Initializes the object: #--------------------------------------------------------------------------- def __init__ ( self, maker_function = None ): if maker_function is not None: self.maker_function = maker_function self.__doc__ = maker_function.__doc__ #--------------------------------------------------------------------------- # Creates a CTrait instance: #--------------------------------------------------------------------------- def __call__ ( self, *args, **metadata ): return self.maker_function( *args, **metadata ) class TraitImportError ( TraitFactory ): """ Defines a factory class for deferring import problems until encountering code that actually tries to use the unimportable trait. """ #--------------------------------------------------------------------------- # Initializes the object: #--------------------------------------------------------------------------- def __init__ ( self, message ): self.message = message #--------------------------------------------------------------------------- # Creates a CTrait instance: #--------------------------------------------------------------------------- def __call__ ( self, *args, **metadata ): raise TraitError( self.message ) #------------------------------------------------------------------------------- # Returns a trait created from a TraitFactory instance: #------------------------------------------------------------------------------- _trait_factory_instances = {} def trait_factory ( trait ): global _trait_factory_instances tid = id( trait ) if tid not in _trait_factory_instances: _trait_factory_instances[ tid ] = trait() return _trait_factory_instances[ tid ] #------------------------------------------------------------------------------- # Casts a CTrait or TraitFactory to a CTrait but returns None if it is neither: #------------------------------------------------------------------------------- def trait_cast ( something ): """ Casts a CTrait, TraitFactory or TraitType to a CTrait but returns None if it is none of those. """ if isinstance( something, CTrait ): return something if isinstance( something, TraitFactory ): return trait_factory( something ) if isinstance( something, type ) and issubclass( something, TraitType ): return something().as_ctrait() if isinstance( something, TraitType ): return something.as_ctrait() return None #------------------------------------------------------------------------------- # Attempts to cast a value to a trait. Returns either a trait or the original # value: #------------------------------------------------------------------------------- def try_trait_cast ( something ): """ Attempts to cast a value to a trait. Returns either a trait or the original value. """ return trait_cast( something ) or something #------------------------------------------------------------------------------- # Returns a trait derived from its input: #------------------------------------------------------------------------------- def trait_from ( something ): """ Returns a trait derived from its input. """ from .trait_types import Any if isinstance( something, CTrait ): return something if something is None: something = Any if isinstance( something, TraitFactory ): return trait_factory( something ) if isinstance( something, type ) and issubclass( something, TraitType ): return something().as_ctrait() if isinstance( something, TraitType ): return something.as_ctrait() return Trait( something ) # Patch the reference to 'trait_from' in 'trait_handlers.py': trait_handlers.trait_from = trait_from #--- 'instance' traits --------------------------------------------------------- class _InstanceArgs ( object ): def __init__ ( self, factory, args, kw ): self.args = ( factory, ) + args self.kw = kw #--- 'creates a run-time default value' ---------------------------------------- class Default ( object ): """ Generates a value the first time it is accessed. A Default object can be used anywhere a default trait value would normally be specified, to generate a default value dynamically. """ def __init__ ( self, func = None, args = (), kw = None ): self.default_value = ( func, args, kw ) #------------------------------------------------------------------------------- # Factory function for creating C-based traits: #------------------------------------------------------------------------------- def Trait ( *value_type, **metadata ): """ Creates a trait definition. Parameters ---------- This function accepts a variety of forms of parameter lists: +-------------------+---------------+-------------------------------------+ | Format | Example | Description | +===================+===============+=====================================+ | Trait(*default*) | Trait(150.0) | The type of the trait is inferred | | | | from the type of the default value, | | | | which must be in *ConstantTypes*. | +-------------------+---------------+-------------------------------------+ | Trait(*default*, | Trait(None, | The trait accepts any of the | | *other1*, | 0, 1, 2, | enumerated values, with the first | | *other2*, ...) | 'many') | value being the default value. The | | | | values must be of types in | | | | *ConstantTypes*, but they need not | | | | be of the same type. The *default* | | | | value is not valid for assignment | | | | unless it is repeated later in the | | | | list. | +-------------------+---------------+-------------------------------------+ | Trait([*default*, | Trait([None, | Similar to the previous format, but | | *other1*, | 0, 1, 2, | takes an explicit list or a list | | *other2*, ...]) | 'many']) | variable. | +-------------------+---------------+-------------------------------------+ | Trait(*type*) | Trait(Int) | The *type* parameter must be a name | | | | of a Python type (see | | | | *PythonTypes*). Assigned values | | | | must be of exactly the specified | | | | type; no casting or coercion is | | | | performed. The default value is the | | | | appropriate form of zero, False, | | | | or emtpy string, set or sequence. | +-------------------+---------------+-------------------------------------+ | Trait(*class*) |:: | Values must be instances of *class* | | | | or of a subclass of *class*. The | | | class MyClass:| default value is None, but None | | | pass | cannot be assigned as a value. | | | foo = Trait( | | | | MyClass) | | +-------------------+---------------+-------------------------------------+ | Trait(None, |:: | Similar to the previous format, but | | *class*) | | None *can* be assigned as a value. | | | class MyClass:| | | | pass | | | | foo = Trait( | | | | None, MyClass)| | +-------------------+---------------+-------------------------------------+ | Trait(*instance*) |:: | Values must be instances of the | | | | same class as *instance*, or of a | | | class MyClass:| subclass of that class. The | | | pass | specified instance is the default | | | i = MyClass() | value. | | | foo = | | | | Trait(i) | | +-------------------+---------------+-------------------------------------+ | Trait(*handler*) | Trait( | Assignment to this trait is | | | TraitEnum ) | validated by an object derived from | | | | **traits.TraitHandler**. | +-------------------+---------------+-------------------------------------+ | Trait(*default*, | Trait(0.0, 0.0| This is the most general form of | | { *type* | | 'stuff', | the function. The notation: | | *constant* | | TupleType) | ``{...|...|...}+`` means a list of | | *dict* | *class* || | one or more of any of the items | | *function* | | | listed between the braces. Thus, the| | *handler* | | | most general form of the function | | *trait* }+ ) | | consists of a default value, | | | | followed by one or more of several | | | | possible items. A trait defined by | | | | multiple items is called a | | | | "compound" trait. | +-------------------+---------------+-------------------------------------+ All forms of the Trait function accept both predefined and arbitrary keyword arguments. The value of each keyword argument becomes bound to the resulting trait object as the value of an attribute having the same name as the keyword. This feature lets you associate metadata with a trait. The following predefined keywords are accepted: Keywords -------- desc : str Describes the intended meaning of the trait. It is used in exception messages and fly-over help in user interfaces. label : str Provides a human-readable name for the trait. It is used to label user interface editors for traits. editor : traits.api.Editor Instance of a subclass Editor object to use when creating a user interface editor for the trait. See the "Traits UI User Guide" for more information on trait editors. comparison_mode : int Indicates when trait change notifications should be generated based upon the result of comparing the old and new values of a trait assignment: * 0 (NO_COMPARE): The values are not compared and a trait change notification is generated on each assignment. * 1 (OBJECT_IDENTITY_COMPARE): A trait change notification is generated if the old and new values are not the same object. * 2 (RICH_COMPARE): A trait change notification is generated if the old and new values are not equal using Python's 'rich comparison' operator. This is the default. rich_compare : bool Indicates whether the basis for considering a trait attribute value to have changed is a "rich" comparison (True, the default), or simple object identity (False). This attribute can be useful in cases where a detailed comparison of two objects is very expensive, or where you do not care whether the details of an object change, as long as the same object is used. .. deprecated:: 3.0.3 Use ``comparison_mode`` instead """ return _TraitMaker( *value_type, **metadata ).as_ctrait() # Handle circular module dependencies: trait_handlers.Trait = Trait #------------------------------------------------------------------------------- # '_TraitMaker' class: #------------------------------------------------------------------------------- class _TraitMaker ( object ): # Ctrait type map for special trait types: type_map = { 'event': 2, 'constant': 7 } #--------------------------------------------------------------------------- # Initialize the object: #--------------------------------------------------------------------------- def __init__ ( self, *value_type, **metadata ): metadata.setdefault( 'type', 'trait' ) self.define( *value_type, **metadata ) #--------------------------------------------------------------------------- # Define the trait: #--------------------------------------------------------------------------- def define ( self, *value_type, **metadata ): default_value_type = -1 default_value = handler = clone = None if len( value_type ) > 0: default_value = value_type[0] value_type = value_type[1:] if ((len( value_type ) == 0) and (type( default_value ) in SequenceTypes)): default_value, value_type = default_value[0], default_value if len( value_type ) == 0: default_value = try_trait_cast( default_value ) if default_value in PythonTypes: handler = TraitCoerceType( default_value ) default_value = DefaultValues.get( default_value ) elif isinstance( default_value, CTrait ): clone = default_value default_value_type, default_value = clone.default_value() metadata[ 'type' ] = clone.type elif isinstance( default_value, TraitHandler ): handler = default_value default_value = None elif default_value is ThisClass: handler = ThisClass() default_value = None else: typeValue = type( default_value ) if isinstance(default_value, basestring): string_options = self.extract( metadata, 'min_len', 'max_len', 'regex' ) if len( string_options ) == 0: handler = TraitCastType( typeValue ) else: handler = TraitString( **string_options ) elif typeValue in TypeTypes: handler = TraitCastType( typeValue ) else: metadata.setdefault( 'instance_handler', '_instance_changed_handler' ) handler = TraitInstance( default_value ) if default_value is handler.aClass: default_value = DefaultValues.get( default_value ) else: enum = [] other = [] map = {} self.do_list( value_type, enum, map, other ) if (((len( enum ) == 1) and (enum[0] is None)) and ((len( other ) == 1) and isinstance( other[0], TraitInstance ))): enum = [] other[0].allow_none() metadata.setdefault( 'instance_handler', '_instance_changed_handler' ) if len( enum ) > 0: if (((len( map ) + len( other )) == 0) and (default_value not in enum)): enum.insert( 0, default_value ) other.append( TraitEnum( enum ) ) if len( map ) > 0: other.append( TraitMap( map ) ) if len( other ) == 0: handler = TraitHandler() elif len( other ) == 1: handler = other[0] if isinstance( handler, CTrait ): clone, handler = handler, None metadata[ 'type' ] = clone.type elif isinstance( handler, TraitInstance ): metadata.setdefault( 'instance_handler', '_instance_changed_handler' ) if default_value is None: handler.allow_none() elif isinstance( default_value, _InstanceArgs ): default_value_type = 7 default_value = ( handler.create_default_value, default_value.args, default_value.kw ) elif (len( enum ) == 0) and (len( map ) == 0): aClass = handler.aClass typeValue = type( default_value ) if typeValue is dict: default_value_type = 7 default_value = ( aClass, (), default_value ) elif not isinstance( default_value, aClass ): if typeValue is not tuple: default_value = ( default_value, ) default_value_type = 7 default_value = ( aClass, default_value, None ) else: for i, item in enumerate( other ): if isinstance( item, CTrait ): if item.type != 'trait': raise TraitError, ("Cannot create a complex " "trait containing %s trait." % add_article( item.type ) ) handler = item.handler if handler is None: break other[i] = handler else: handler = TraitCompound( other ) # Save the results: self.handler = handler self.clone = clone if default_value_type < 0: if isinstance( default_value, Default ): default_value_type = 7 default_value = default_value.default_value else: if (handler is None) and (clone is not None): handler = clone.handler if handler is not None: default_value_type = handler.default_value_type if default_value_type < 0: try: default_value = handler.validate( None, '', default_value ) except: pass if default_value_type < 0: default_value_type = _default_value_type( default_value ) self.default_value_type = default_value_type self.default_value = default_value self.metadata = metadata.copy() #--------------------------------------------------------------------------- # Determine the correct TraitHandler for each item in a list: #--------------------------------------------------------------------------- def do_list ( self, list, enum, map, other ): for item in list: if item in PythonTypes: other.append( TraitCoerceType( item ) ) else: item = try_trait_cast( item ) typeItem = type( item ) if typeItem in ConstantTypes: enum.append( item ) elif typeItem in SequenceTypes: self.do_list( item, enum, map, other ) elif typeItem is dict: map.update( item ) elif typeItem in CallableTypes: other.append( TraitFunction( item ) ) elif item is ThisClass: other.append( ThisClass() ) elif isinstance( item, TraitTypes ): other.append( item ) else: other.append( TraitInstance( item ) ) #--------------------------------------------------------------------------- # Returns a properly initialized 'CTrait' instance: #--------------------------------------------------------------------------- def as_ctrait ( self ): metadata = self.metadata trait = CTrait( self.type_map.get( metadata.get( 'type' ), 0 ) ) clone = self.clone if clone is not None: trait.clone( clone ) if clone.__dict__ is not None: trait.__dict__ = clone.__dict__.copy() trait.default_value( self.default_value_type, self.default_value ) handler = self.handler if handler is not None: trait.handler = handler validate = getattr( handler, 'fast_validate', None ) if validate is None: validate = handler.validate trait.set_validate( validate ) post_setattr = getattr( handler, 'post_setattr', None ) if post_setattr is not None: trait.post_setattr = post_setattr trait.is_mapped( handler.is_mapped ) # Note: The use of 'rich_compare' metadata is deprecated; use # 'comparison_mode' metadata instead: rich_compare = metadata.get( 'rich_compare' ) if rich_compare is not None: trait.rich_comparison( rich_compare is True ) comparison_mode = metadata.get( 'comparison_mode' ) if comparison_mode is not None: trait.comparison_mode( comparison_mode ) trait.value_allowed( metadata.get( 'trait_value', False ) is True ) if len( metadata ) > 0: if trait.__dict__ is None: trait.__dict__ = metadata else: trait.__dict__.update( metadata ) return trait #--------------------------------------------------------------------------- # Extract a set of keywords from a dictionary: #--------------------------------------------------------------------------- def extract ( self, from_dict, *keys ): to_dict = {} for key in keys: if key in from_dict: to_dict[ key ] = from_dict[ key ] del from_dict[ key ] return to_dict #------------------------------------------------------------------------------- # Factory function for creating C-based trait properties: #------------------------------------------------------------------------------- def Property ( fget = None, fset = None, fvalidate = None, force = False, handler = None, trait = None, **metadata ): """ Returns a trait whose value is a Python property. Parameters ---------- fget : function The "getter" function for the property. fset : function The "setter" function for the property. fvalidate : function The validation function for the property. The method should return the value to set or raise TraitError if the new value is not valid. force : bool Indicates whether to use only the function definitions specified by **fget** and **fset**, and not look elsewhere on the class. handler : function A trait handler function for the trait. trait : Trait or value A trait definition or a value that can be converted to a trait that constrains the values of the property trait. Description ----------- If no getter, setter or validate functions are specified (and **force** is not True), it is assumed that they are defined elsewhere on the class whose attribute this trait is assigned to. For example:: class Bar(HasTraits): # A float traits Property that should be always positive. foo = Property(Float) # Shadow trait attribute _foo = Float def _set_foo(self,x): self._foo = x def _validate_foo(self, x): if x <= 0: raise TraitError( 'foo property should be a positive number') return x def _get_foo(self): return self._foo You can use the **depends_on** metadata attribute to indicate that the property depends on the value of another trait. The value of **depends_on** is an extended name specifier for traits that the property depends on. The property will a trait change notification if any of the traits specified by **depends_on** change. For example:: class Wheel ( Part ): axle = Instanced( Axle ) position = Property( depends_on = 'axle.chassis.position' ) For details of the extended trait name syntax, refer to the on_trait_change() method of the HasTraits class. """ metadata[ 'type' ] = 'property' # If no parameters specified, must be a forward reference (if not forced): if (not force) and (fset is None): sum = ((fget is not None) + (fvalidate is not None) + (trait is not None)) if sum <= 1: if sum == 0: return ForwardProperty( metadata ) handler = None if fget is not None: trait = fget if trait is not None: trait = trait_cast( trait ) if trait is not None: fvalidate = handler = trait.handler if fvalidate is not None: fvalidate = handler.validate if (fvalidate is not None) or (trait is not None): if 'editor' not in metadata: if (trait is not None) and (trait.editor is not None): metadata[ 'editor' ] = trait.editor return ForwardProperty( metadata, fvalidate, handler ) if fget is None: metadata[ 'transient' ] = True if fset is None: fget = _undefined_get fset = _undefined_set else: fget = _write_only elif fset is None: fset = _read_only metadata[ 'transient' ] = True if trait is not None: trait = trait_cast( trait ) handler = trait.handler if (fvalidate is None) and (handler is not None): fvalidate = handler.validate if ('editor' not in metadata) and (trait.editor is not None): metadata[ 'editor' ] = trait.editor metadata.setdefault( 'depends_on', getattr( fget, 'depends_on', None ) ) if ((metadata.get( 'depends_on' ) is not None) and getattr( fget, 'cached_property', False )): metadata.setdefault( 'cached', True ) n = 0 trait = CTrait( 4 ) trait.__dict__ = metadata.copy() if fvalidate is not None: n = _arg_count( fvalidate ) trait.property( fget, _arg_count( fget ), fset, _arg_count( fset ), fvalidate, n ) trait.handler = handler return trait Property = TraitFactory( Property ) class ForwardProperty ( object ): """ Used to implement Property traits where accessor functions are defined implicitly on the class. """ def __init__ ( self, metadata, validate = None, handler = None ): self.metadata = metadata.copy() self.validate = validate self.handler = handler #------------------------------------------------------------------------------- # Dictionary used to handle return type mapping special cases: #------------------------------------------------------------------------------- SpecialNames = { ### 'int': trait_factory( Int ), ### 'long': trait_factory( Long ), ### 'float': trait_factory( Float ), ### 'complex': trait_factory( Complex ), ### 'str': trait_factory( Str ), ### 'unicode': trait_factory( Unicode ), ### 'bool': trait_factory( Bool ), ### 'list': trait_factory( List ), ### 'tuple': trait_factory( Tuple ), ### 'dict': trait_factory( Dict ) } #-- Date Trait definition ---------------------------------------------------- #Date = Instance(datetime.date, metadata = { 'editor': date_editor }) #-- Time Trait definition ---------------------------------------------------- #Time = Instance(datetime.time, metadata = { 'editor': time_editor }) #------------------------------------------------------------------------------- # Create predefined, reusable trait instances: #------------------------------------------------------------------------------- # Generic trait with 'object' behavior: generic_trait = CTrait( 8 ) #------------------------------------------------------------------------------- # User interface related color and font traits: #------------------------------------------------------------------------------- def Color ( *args, **metadata ): """ Returns a trait whose value must be a GUI toolkit-specific color. Description ----------- For wxPython, the returned trait accepts any of the following values: * A wx.Colour instance * A wx.ColourPtr instance * an integer whose hexadecimal form is 0x*RRGGBB*, where *RR* is the red value, *GG* is the green value, and *BB* is the blue value Default Value ------------- For wxPython, 0x000000 (that is, white) """ from traitsui.toolkit_traits import ColorTrait return ColorTrait( *args, **metadata ) Color = TraitFactory( Color ) def RGBColor ( *args, **metadata ): """ Returns a trait whose value must be a GUI toolkit-specific RGB-based color. Description ----------- For wxPython, the returned trait accepts any of the following values: * A tuple of the form (*r*, *g*, *b*), in which *r*, *g*, and *b* represent red, green, and blue values, respectively, and are floats in the range from 0.0 to 1.0 * An integer whose hexadecimal form is 0x*RRGGBB*, where *RR* is the red value, *GG* is the green value, and *BB* is the blue value Default Value ------------- For wxPython, (0.0, 0.0, 0.0) (that is, white) """ from traitsui.toolkit_traits import RGBColorTrait return RGBColorTrait( *args, **metadata ) RGBColor = TraitFactory( RGBColor ) def Font ( *args, **metadata ): """ Returns a trait whose value must be a GUI toolkit-specific font. Description ----------- For wxPython, the returned trait accepts any of the following: * a wx.Font instance * a wx.FontPtr instance * a string describing the font, including one or more of the font family, size, weight, style, and typeface name. Default Value ------------- For wxPython, 'Arial 10' """ from traitsui.toolkit_traits import FontTrait return FontTrait( *args, **metadata ) Font = TraitFactory( Font ) traits-4.5.0/traits/traits_listener.py000066400000000000000000001416261233213561600201350ustar00rootroot00000000000000#------------------------------------------------------------------------------- # # Copyright (c) 2007, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 03/05/2007 # #------------------------------------------------------------------------------- """ Defines classes used to implement and manage various trait listener patterns. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import import re import string import weakref from weakref import WeakKeyDictionary from string import whitespace from types import MethodType from .has_traits import HasPrivateTraits from .trait_base import Undefined, Uninitialized from .traits import Property from .trait_types import Str, Int, Bool, Instance, List, Enum, Any from .trait_errors import TraitError from .trait_notifiers import TraitChangeNotifyWrapper #--------------------------------------------------------------------------- # Constants: #--------------------------------------------------------------------------- # The name of the dictionary used to store active listeners TraitsListener = '__traits_listener__' # End of String marker EOS = '\0' # Types of traits that can be listened to ANYTRAIT_LISTENER = '_register_anytrait' SIMPLE_LISTENER = '_register_simple' LIST_LISTENER = '_register_list' DICT_LISTENER = '_register_dict' SET_LISTENER = '_register_set' # Mapping from trait default value types to listener types type_map = { 5: LIST_LISTENER, 6: DICT_LISTENER, 9: SET_LISTENER } # Listener types: ANY_LISTENER = 0 SRC_LISTENER = 1 DST_LISTENER = 2 ListenerType = { 0: ANY_LISTENER, 1: DST_LISTENER, 2: DST_LISTENER, 3: SRC_LISTENER, 4: SRC_LISTENER } # Invalid destination ( object, name ) reference marker (i.e. ambiguous): INVALID_DESTINATION = ( None, None ) # Regular expressions used by the parser: simple_pat = re.compile( r'^([a-zA-Z_]\w*)(\.|:)([a-zA-Z_]\w*)$' ) name_pat = re.compile( r'([a-zA-Z_]\w*)\s*(.*)' ) # Characters valid in a traits name: name_chars = string.ascii_letters + string.digits + '_' #------------------------------------------------------------------------------- # Utility functions: #------------------------------------------------------------------------------- def indent ( text, first_line = True, n = 1, width = 4 ): """ Indent lines of text. Parameters ---------- text : str The text to indent. first_line : bool, optional If False, then the first line will not be indented (default: True). n : int, optional The level of indentation (default: 1). width : int, optional The number of spaces in each level of indentation (default: 4). Returns ------- indented : str """ lines = text.split( '\n' ) if not first_line: first = lines[0] lines = lines[1:] spaces = ' ' * (width * n) lines2 = [ spaces + x for x in lines ] if not first_line: lines2.insert( 0, first ) indented = '\n'.join( lines2 ) return indented #------------------------------------------------------------------------------- # Metadata filters: #------------------------------------------------------------------------------- def is_not_none ( value ): return (value is not None) def is_none ( value ): return (value is None) def not_event ( value ): return (value != 'event') #------------------------------------------------------------------------------- # 'ListenerBase' class: #------------------------------------------------------------------------------- class ListenerBase ( HasPrivateTraits ): #--------------------------------------------------------------------------- # Trait definitions: #--------------------------------------------------------------------------- # The handler to be called when any listened to trait is changed: #handler = Any # The dispatch mechanism to use when invoking the handler: #dispatch = Str # Does the handler go at the beginning (True) or end (False) of the # notification handlers list? #priority = Bool( False ) # The next level (if any) of ListenerBase object to be called when any of # our listened to traits is changed: #next = Instance( ListenerBase ) # The type of handler being used: #type = Enum( ANY_LISTENER, SRC_LISTENER, DST_LISTENER ) # Should changes to this item generate a notification to the handler? # notify = Bool # Should registering listeners for items reachable from this listener item # be deferred until the associated trait is first read or set? # deferred = Bool #--------------------------------------------------------------------------- # Registers new listeners: #--------------------------------------------------------------------------- def register ( self, new ): """ Registers new listeners. """ raise NotImplementedError #--------------------------------------------------------------------------- # Unregisters any existing listeners: #--------------------------------------------------------------------------- def unregister ( self, old ): """ Unregisters any existing listeners. """ raise NotImplementedError #--------------------------------------------------------------------------- # Handles a trait change for a simple trait: #--------------------------------------------------------------------------- def handle ( self, object, name, old, new ): """ Handles a trait change for a simple trait. """ raise NotImplementedError #--------------------------------------------------------------------------- # Handles a trait change for a list trait: #--------------------------------------------------------------------------- def handle_list ( self, object, name, old, new ): """ Handles a trait change for a list trait. """ raise NotImplementedError #--------------------------------------------------------------------------- # Handles a trait change for a list traits items: #--------------------------------------------------------------------------- def handle_list_items ( self, object, name, old, new ): """ Handles a trait change for a list traits items. """ raise NotImplementedError #--------------------------------------------------------------------------- # Handles a trait change for a dictionary trait: #--------------------------------------------------------------------------- def handle_dict ( self, object, name, old, new ): """ Handles a trait change for a dictionary trait. """ raise NotImplementedError #--------------------------------------------------------------------------- # Handles a trait change for a dictionary traits items: #--------------------------------------------------------------------------- def handle_dict_items ( self, object, name, old, new ): """ Handles a trait change for a dictionary traits items. """ raise NotImplementedError #------------------------------------------------------------------------------- # 'ListenerItem' class: #------------------------------------------------------------------------------- class ListenerItem ( ListenerBase ): #--------------------------------------------------------------------------- # Trait definitions: #--------------------------------------------------------------------------- #: The name of the trait to listen to: name = Str #: The name of any metadata that must be present (or not present): metadata_name = Str #: Does the specified metadata need to be defined (True) or not defined #: (False)? metadata_defined = Bool( True ) #: The handler to be called when any listened-to trait is changed: handler = Any #: A weakref 'wrapped' version of 'handler': wrapped_handler_ref = Any #: The dispatch mechanism to use when invoking the handler: dispatch = Str #: Does the handler go at the beginning (True) or end (False) of the #: notification handlers list? priority = Bool( False ) #: The next level (if any) of ListenerBase object to be called when any of #: this object's listened-to traits is changed: next = Instance( ListenerBase ) #: The type of handler being used: type = Enum( ANY_LISTENER, SRC_LISTENER, DST_LISTENER ) #: Should changes to this item generate a notification to the handler? notify = Bool( True ) #: Should registering listeners for items reachable from this listener item #: be deferred until the associated trait is first read or set? deferred = Bool( False ) #: Is this an 'any_trait' change listener, or does it create explicit #: listeners for each individual trait? is_any_trait = Bool( False ) #: Is the associated handler a special list handler that handles both #: 'foo' and 'foo_items' events by receiving a list of 'deleted' and 'added' #: items as the 'old' and 'new' arguments? is_list_handler = Bool( False ) #: A dictionary mapping objects to a list of all current active #: (*name*, *type*) listener pairs, where *type* defines the type of #: listener, one of: (SIMPLE_LISTENER, LIST_LISTENER, DICT_LISTENER). active = Instance( WeakKeyDictionary, () ) #-- 'ListenerBase' Class Method Implementations ---------------------------- #--------------------------------------------------------------------------- # String representation: #--------------------------------------------------------------------------- def __repr__ ( self, seen = None ): """Returns a string representation of the object. Since the object graph may have cycles, we extend the basic __repr__ API to include a set of objects we've already seen while constructing a string representation. When this method tries to get the repr of a ListenerItem or ListenerGroup, we will use the extended API and build up the set of seen objects. The repr of a seen object will just be ''. """ if seen is None: seen = set() seen.add( self ) next_repr = 'None' next = self.next if next is not None: if next in seen: next_repr = '' else: next_repr = next.__repr__( seen ) return """%s( name = %r, metadata_name = %r, metadata_defined = %r, is_any_trait = %r, dispatch = %r, notify = %r, is_list_handler = %r, type = %r, next = %s, )""" % ( self.__class__.__name__, self.name, self.metadata_name, self.metadata_defined, self.is_any_trait, self.dispatch, self.notify, self.is_list_handler, self.type, indent( next_repr, False ) ) #--------------------------------------------------------------------------- # Registers new listeners: #--------------------------------------------------------------------------- def register ( self, new ): """ Registers new listeners. """ # Make sure we actually have an object to set listeners on and that it # has not already been registered (cycle breaking): if (new is None) or (new is Undefined) or (new in self.active): return INVALID_DESTINATION # Create a dictionary of {name: trait_values} that match the object's # definition for the 'new' object: name = self.name last = name[-1:] if last == '*': # Handle the special case of an 'anytrait' change listener: if self.is_any_trait: try: self.active[ new ] = [ ( '', ANYTRAIT_LISTENER ) ] return self._register_anytrait( new, '', False ) except TypeError: # This error can occur if 'new' is a list or other object # for which a weakref cannot be created as the dictionary # key for 'self.active': return INVALID_DESTINATION # Handle trait matching based on a common name prefix and/or # matching trait metadata: metadata = self._metadata if metadata is None: self._metadata = metadata = { 'type': not_event } if self.metadata_name != '': if self.metadata_defined: metadata[ self.metadata_name ] = is_not_none else: metadata[ self.metadata_name ] = is_none # Get all object traits with matching metadata: names = new.trait_names( **metadata ) # If a name prefix was specified, filter out only the names that # start with the specified prefix: name = name[:-1] if name != '': n = len( name ) names = [ aname for aname in names if name == aname[ : n ] ] # Create the dictionary of selected traits: bt = new.base_trait traits = dict( [ ( name, bt( name ) ) for name in names ] ) # Handle any new traits added dynamically to the object: new.on_trait_change( self._new_trait_added, 'trait_added' ) else: # Determine if the trait is optional or not: optional = (last == '?') if optional: name = name[:-1] # Else, no wildcard matching, just get the specified trait: trait = new.base_trait( name ) # Try to get the object trait: if trait is None: # Raise an error if trait is not defined and not optional: # fixme: Properties which are lists don't implement the # '..._items' sub-trait, which can cause a failure here when # used with an editor that sets up listeners on the items... if not optional: raise TraitError( "'%s' object has no '%s' trait" % ( new.__class__.__name__, name ) ) # Otherwise, just skip it: traits = {} else: # Create a result dictionary containing just the single trait: traits = { name: trait } # For each item, determine its type (simple, list, dict): self.active[ new ] = active = [] for name, trait in traits.items(): # Determine whether the trait type is simple, list, set or # dictionary: type = SIMPLE_LISTENER handler = trait.handler if handler is not None: type = type_map.get( handler.default_value_type, SIMPLE_LISTENER ) # Add the name and type to the list of traits being registered: active.append( ( name, type ) ) # Set up the appropriate trait listeners on the object for the # current trait: value = getattr( self, type )( new, name, False ) if len( traits ) == 1: return value return INVALID_DESTINATION #--------------------------------------------------------------------------- # Unregisters any existing listeners: #--------------------------------------------------------------------------- def unregister ( self, old ): """ Unregisters any existing listeners. """ if old is not None and old is not Uninitialized: try: active = self.active.pop( old, None ) if active is not None: for name, type in active: getattr( self, type )( old, name, True ) except TypeError: # An error can occur if 'old' is a list or other object for # which a weakref cannot be created and used an a key for # 'self.active': pass #--------------------------------------------------------------------------- # Handles a trait change for an intermediate link trait: #--------------------------------------------------------------------------- def handle_simple ( self, object, name, old, new ): """ Handles a trait change for an intermediate link trait. """ self.next.unregister( old ) self.next.register( new ) def handle_dst ( self, object, name, old, new ): """ Handles a trait change for an intermediate link trait when the notification is for the final destination trait. """ self.next.unregister( old ) object, name = self.next.register( new ) if old is not Uninitialized: if object is None: raise TraitError( "on_trait_change handler signature is " "incompatible with a change to an intermediate trait" ) wh = self.wrapped_handler_ref() if wh is not None: wh( object, name, old, getattr( object, name, Undefined ) ) #--------------------------------------------------------------------------- # Handles a trait change for a list (or set) trait: #--------------------------------------------------------------------------- def handle_list ( self, object, name, old, new ): """ Handles a trait change for a list (or set) trait. """ if old is not None and old is not Uninitialized: unregister = self.next.unregister for obj in old: unregister( obj ) register = self.next.register for obj in new: register( obj ) #--------------------------------------------------------------------------- # Handles a trait change for a list (or set) traits items: #--------------------------------------------------------------------------- def handle_list_items ( self, object, name, old, new ): """ Handles a trait change for items of a list (or set) trait. """ self.handle_list( object, name, new.removed, new.added ) def handle_list_items_special ( self, object, name, old, new ): """ Handles a trait change for items of a list (or set) trait with notification. """ wh = self.wrapped_handler_ref() if wh is not None: wh( object, name, new.removed, new.added ) #--------------------------------------------------------------------------- # Handles a trait change for a dictionary trait: #--------------------------------------------------------------------------- def handle_dict ( self, object, name, old, new ): """ Handles a trait change for a dictionary trait. """ if old is not Uninitialized: unregister = self.next.unregister for obj in old.values(): unregister( obj ) register = self.next.register for obj in new.values(): register( obj ) #--------------------------------------------------------------------------- # Handles a trait change for a dictionary traits items: #--------------------------------------------------------------------------- def handle_dict_items ( self, object, name, old, new ): """ Handles a trait change for items of a dictionary trait. """ self.handle_dict( object, name, new.removed, new.added ) if len( new.changed ) > 0: # If 'name' refers to the '_items' trait, then remove the '_items' # suffix to get the actual dictionary trait. # # fixme: Is there ever a case where 'name' *won't* refer to the # '_items' trait? if name.endswith('_items'): name = name[:-len('_items')] dict = getattr( object, name ) unregister = self.next.unregister register = self.next.register for key, obj in new.changed.items(): unregister( obj ) register( dict[ key ] ) #--------------------------------------------------------------------------- # Handles an invalid intermediate trait change to a handler that must be # applied to the final destination object.trait: #--------------------------------------------------------------------------- def handle_error ( self, obj, name, old, new ): """ Handles an invalid intermediate trait change to a handler that must be applied to the final destination object.trait. """ if old is not None and old is not Uninitialized: raise TraitError( "on_trait_change handler signature is " "incompatible with a change to an intermediate trait" ) #-- Event Handlers --------------------------------------------------------- #--------------------------------------------------------------------------- # Handles the 'handler' trait being changed: #--------------------------------------------------------------------------- def _handler_changed ( self, handler ): """ Handles the **handler** trait being changed. """ if self.next is not None: self.next.handler = handler #--------------------------------------------------------------------------- # Handles the 'wrapped_handler_ref' trait being changed: #--------------------------------------------------------------------------- def _wrapped_handler_ref_changed ( self, wrapped_handler_ref ): """ Handles the 'wrapped_handler_ref' trait being changed. """ if self.next is not None: self.next.wrapped_handler_ref = wrapped_handler_ref #--------------------------------------------------------------------------- # Handles the 'dispatch' trait being changed: #--------------------------------------------------------------------------- def _dispatch_changed ( self, dispatch ): """ Handles the **dispatch** trait being changed. """ if self.next is not None: self.next.dispatch = dispatch #--------------------------------------------------------------------------- # Handles the 'priority' trait being changed: #--------------------------------------------------------------------------- def _priority_changed ( self, priority ): """ Handles the **priority** trait being changed. """ if self.next is not None: self.next.priority = priority #-- Private Methods -------------------------------------------------------- #--------------------------------------------------------------------------- # Registers any 'anytrait' listener: #--------------------------------------------------------------------------- def _register_anytrait ( self, object, name, remove ): """ Registers any 'anytrait' listener. """ handler = self.handler() if handler is not Undefined: object._on_trait_change( handler, remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) return ( object, name ) #--------------------------------------------------------------------------- # Registers a handler for a simple trait: #--------------------------------------------------------------------------- def _register_simple ( self, object, name, remove ): """ Registers a handler for a simple trait. """ next = self.next if next is None: handler = self.handler() if handler is not Undefined: object._on_trait_change( handler, name, remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) return ( object, name ) tl_handler = self.handle_simple if self.notify: if self.type == DST_LISTENER: if self.dispatch != 'same': raise TraitError( "Trait notification dispatch type '%s' " "is not compatible with handler signature and " "extended trait name notification style" % self.dispatch ) tl_handler = self.handle_dst else: handler = self.handler() if handler is not Undefined: object._on_trait_change( handler, name, remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) object._on_trait_change( tl_handler, name, remove=remove, dispatch='extended', priority=self.priority, target=self._get_target(), ) if remove: return next.unregister( getattr( object, name ) ) if not self.deferred or name in object.__dict__: # Sometimes, the trait may already be assigned. This can happen when # there are chains of dynamic initializers and 'delegate' # notifications. If 'trait_a' and 'trait_b' have dynamic # initializers and 'trait_a's initializer creates 'trait_b', *and* # we have a DelegatesTo trait that delegates to 'trait_a', then the # listener that implements the delegate will create 'trait_a' and # thus 'trait_b'. If we are creating an extended trait change # listener on 'trait_b.something', and the 'trait_a' delegate # listeners just happen to get hooked up before this one, then # 'trait_b' will have been initialized already, and the registration # that we are deferring will never happen. return next.register( getattr( object, name ) ) return ( object, name ) #--------------------------------------------------------------------------- # Registers a handler for a list trait: #--------------------------------------------------------------------------- def _register_list ( self, object, name, remove ): """ Registers a handler for a list trait. """ next = self.next if next is None: handler = self.handler() if handler is not Undefined: object._on_trait_change( handler, name, remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) if self.is_list_handler: object._on_trait_change( self.handle_list_items_special, name + '_items', remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) elif self.type == ANY_LISTENER: object._on_trait_change( handler, name + '_items', remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) return ( object, name ) tl_handler = self.handle_list tl_handler_items = self.handle_list_items if self.notify: if self.type == DST_LISTENER: tl_handler = tl_handler_items = self.handle_error else: handler = self.handler() if handler is not Undefined: object._on_trait_change( handler, name, remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) if self.is_list_handler: object._on_trait_change( self.handle_list_items_special, name + '_items', remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) elif self.type == ANY_LISTENER: object._on_trait_change( handler, name + '_items', remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) object._on_trait_change( tl_handler, name, remove=remove, dispatch='extended', priority=self.priority, target=self._get_target(), ) object._on_trait_change( tl_handler_items, name + '_items', remove=remove, dispatch='extended', priority=self.priority, target=self._get_target(), ) if remove: handler = next.unregister elif self.deferred: return INVALID_DESTINATION else: handler = next.register for obj in getattr( object, name ): handler( obj ) return INVALID_DESTINATION # Handle 'sets' the same as 'lists': # Note: Currently the behavior of sets is almost identical to that of lists, # so we are able to share the same code for both. This includes some 'duck # typing' that occurs with the TraitListEvent and TraitSetEvent, that define # 'removed' and 'added' attributes that behave similarly enough (from the # point of view of this module) that they can be treated as equivalent. If # the behavior of sets ever diverges from that of lists, then this code may # need to be changed. _register_set = _register_list #--------------------------------------------------------------------------- # Registers a handler for a dictionary trait: #--------------------------------------------------------------------------- def _register_dict ( self, object, name, remove ): """ Registers a handler for a dictionary trait. """ next = self.next if next is None: handler = self.handler() if handler is not Undefined: object._on_trait_change( handler, name, remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) if self.type == ANY_LISTENER: object._on_trait_change( handler, name + '_items', remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) return ( object, name ) tl_handler = self.handle_dict tl_handler_items = self.handle_dict_items if self.notify: if self.type == DST_LISTENER: tl_handler = tl_handler_items = self.handle_error else: handler = self.handler() if handler is not Undefined: object._on_trait_change( handler, name, remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) if self.type == ANY_LISTENER: object._on_trait_change( handler, name + '_items', remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) object._on_trait_change( tl_handler, name, remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) object._on_trait_change( tl_handler_items, name + '_items', remove=remove, dispatch=self.dispatch, priority=self.priority, target=self._get_target(), ) if remove: handler = next.unregister elif self.deferred: return INVALID_DESTINATION else: handler = next.register for obj in getattr( object, name ).values(): handler( obj ) return INVALID_DESTINATION #--------------------------------------------------------------------------- # Handles new traits being added to an object being monitored: #--------------------------------------------------------------------------- def _new_trait_added ( self, object, name, new_trait ): """ Handles new traits being added to an object being monitored. """ # Set if the new trait matches our prefix and metadata: if new_trait.startswith( self.name[:-1] ): trait = object.base_trait( new_trait ) for meta_name, meta_eval in self._metadata.items(): if not meta_eval( getattr( trait, meta_name ) ): return # Determine whether the trait type is simple, list, set or # dictionary: type = SIMPLE_LISTENER handler = trait.handler if handler is not None: type = type_map.get( handler.default_value_, SIMPLE_LISTENER ) # Add the name and type to the list of traits being registered: self.active[ object ].append( ( new_trait, type ) ) # Set up the appropriate trait listeners on the object for the # new trait: getattr( self, type )( object, new_trait, False ) def _get_target(self): """ Get the target object from the ListenerNotifyWrapper. """ target = None lnw = self.wrapped_handler_ref() if lnw is not None: target_ref = getattr(lnw, 'object', None) if target_ref is not None: target = target_ref() return target #------------------------------------------------------------------------------- # 'ListenerGroup' class: #------------------------------------------------------------------------------- def _set_value ( self, name, value ): for item in self.items: setattr( item, name, value ) def _get_value ( self, name ): # Use the attribute on the first item. If there are no items, return None. if self.items: return getattr( self.items[0], name ) else: return None ListProperty = Property( fget = _get_value, fset = _set_value ) class ListenerGroup ( ListenerBase ): #--------------------------------------------------------------------------- # Trait definitions: #--------------------------------------------------------------------------- #: The handler to be called when any listened-to trait is changed handler = Property #: A weakref 'wrapped' version of 'handler': wrapped_handler_ref = Property #: The dispatch mechanism to use when invoking the handler: dispatch = Property #: Does the handler go at the beginning (True) or end (False) of the #: notification handlers list? priority = ListProperty #: The next level (if any) of ListenerBase object to be called when any of #: this object's listened-to traits is changed next = ListProperty #: The type of handler being used: type = ListProperty #: Should changes to this item generate a notification to the handler? notify = ListProperty #: Should registering listeners for items reachable from this listener item #: be deferred until the associated trait is first read or set? deferred = ListProperty # The list of ListenerBase objects in the group items = List( ListenerBase ) #-- Property Implementations ----------------------------------------------- def _set_handler ( self, handler ): if self._handler is None: self._handler = handler for item in self.items: item.handler = handler def _set_wrapped_handler_ref ( self, wrapped_handler_ref ): if self._wrapped_handler_ref is None: self._wrapped_handler_ref = wrapped_handler_ref for item in self.items: item.wrapped_handler_ref = wrapped_handler_ref def _set_dispatch ( self, dispatch ): if self._dispatch is None: self._dispatch = dispatch for item in self.items: item.dispatch = dispatch #-- 'ListenerBase' Class Method Implementations ---------------------------- #--------------------------------------------------------------------------- # String representation: #--------------------------------------------------------------------------- def __repr__ ( self, seen = None ): """Returns a string representation of the object. Since the object graph may have cycles, we extend the basic __repr__ API to include a set of objects we've already seen while constructing a string representation. When this method tries to get the repr of a ListenerItem or ListenerGroup, we will use the extended API and build up the set of seen objects. The repr of a seen object will just be ''. """ if seen is None: seen = set() seen.add( self ) lines = [ '%s(items = [' % self.__class__.__name__ ] for item in self.items: lines.extend( indent( item.__repr__( seen ), True ).split( '\n' ) ) lines[-1] += ',' lines.append( '])' ) return '\n'.join( lines ) #--------------------------------------------------------------------------- # Registers new listeners: #--------------------------------------------------------------------------- def register ( self, new ): """ Registers new listeners. """ for item in self.items: item.register( new ) return INVALID_DESTINATION #--------------------------------------------------------------------------- # Unregisters any existing listeners: #--------------------------------------------------------------------------- def unregister ( self, old ): """ Unregisters any existing listeners. """ for item in self.items: item.unregister( old ) #------------------------------------------------------------------------------- # 'ListenerParser' class: #------------------------------------------------------------------------------- class ListenerParser ( HasPrivateTraits ): #------------------------------------------------------------------------------- # Trait definitions: #------------------------------------------------------------------------------- #: The string being parsed text = Str #: The length of the string being parsed. len_text = Int #: The current parse index within the string index = Int #: The next character from the string being parsed next = Property #: The next Python attribute name within the string: name = Property #: The next non-whitespace character skip_ws = Property #: Backspaces to the last character processed backspace = Property #: The ListenerBase object resulting from parsing **text** listener = Instance( ListenerBase ) #-- Property Implementations ----------------------------------------------- def _get_next ( self ): index = self.index self.index += 1 if index >= self.len_text: return EOS return self.text[ index ] def _get_backspace ( self ): self.index = max( 0, self.index - 1 ) def _get_skip_ws ( self ): while True: c = self.next if c not in whitespace: return c def _get_name ( self ): match = name_pat.match( self.text, self.index - 1 ) if match is None: return '' self.index = match.start( 2 ) return match.group( 1 ) #-- object Method Overrides ------------------------------------------------ def __init__ ( self, text = '', **traits ): self.text = text super( ListenerParser, self ).__init__( **traits ) #-- Private Methods -------------------------------------------------------- #--------------------------------------------------------------------------- # Parses the text and returns the appropriate collection of ListenerBase # objects described by the text: #--------------------------------------------------------------------------- def parse ( self ): """ Parses the text and returns the appropriate collection of ListenerBase objects described by the text. """ # Try a simple case of 'name1.name2'. The simplest case of a single # Python name never triggers this parser, so we don't try to make that # a shortcut too. Whitespace should already have been stripped from the # start and end. # TODO: The use of regexes should be used throughout all of the parsing # functions to speed up all aspects of parsing. match = simple_pat.match( self.text ) if match is not None: return ListenerItem( name = match.group( 1 ), notify = match.group(2) == '.', next = ListenerItem( name = match.group( 3 ) ) ) return self.parse_group( EOS ) #--------------------------------------------------------------------------- # Parses the contents of a group: #--------------------------------------------------------------------------- def parse_group ( self, terminator = ']' ): """ Parses the contents of a group. """ items = [] while True: items.append( self.parse_item( terminator ) ) c = self.skip_ws if c == terminator: break if c != ',': if terminator == EOS: self.error( "Expected ',' or end of string" ) else: self.error( "Expected ',' or '%s'" % terminator ) if len( items ) == 1: return items[0] return ListenerGroup( items = items ) #--------------------------------------------------------------------------- # Parses a single, complete listener item/group string: #--------------------------------------------------------------------------- def parse_item ( self, terminator ): """ Parses a single, complete listener item or group string. """ c = self.skip_ws if c == '[': result = self.parse_group() c = self.skip_ws else: name = self.name if name != '': c = self.next result = ListenerItem( name = name ) if c in '+-': result.name += '*' result.metadata_defined = (c == '+') cn = self.skip_ws result.metadata_name = metadata = self.name if metadata != '': cn = self.skip_ws result.is_any_trait = ((c == '-') and (name == '') and (metadata == '')) c = cn if result.is_any_trait and (not ((c == terminator) or ((c == ',') and (terminator == ']')))): self.error( "Expected end of name" ) elif c == '?': if len( name ) == 0: self.error( "Expected non-empty name preceding '?'" ) result.name += '?' c = self.skip_ws cycle = (c == '*') if cycle: c = self.skip_ws if c in '.:': result.notify = (c == '.') next = self.parse_item( terminator ) if cycle: last = result while last.next is not None: last = last.next last.next = lg = ListenerGroup( items = [ next, result ] ) result = lg else: result.next = next return result if c == '[': if (self.skip_ws == ']') and (self.skip_ws == terminator): self.backspace result.is_list_handler = True else: self.error( "Expected '[]' at the end of an item" ) else: self.backspace if cycle: result.next = result return result #--------------------------------------------------------------------------- # Parses the metadata portion of a listener item: #--------------------------------------------------------------------------- def parse_metadata ( self, item ): """ Parses the metadata portion of a listener item. """ self.skip_ws item.metadata_name = name = self.name if name == '': self.backspace #--------------------------------------------------------------------------- # Raises a syntax error: #--------------------------------------------------------------------------- def error ( self, msg ): """ Raises a syntax error. """ raise TraitError( "%s at column %d of '%s'" % ( msg, self.index, self.text ) ) #-- Event Handlers --------------------------------------------------------- #--------------------------------------------------------------------------- # Handles the 'text' trait being changed: #--------------------------------------------------------------------------- def _text_changed ( self ): self.index = 0 self.len_text = len( self.text ) self.listener = self.parse() #------------------------------------------------------------------------------- # 'ListenerNotifyWrapper' class: #------------------------------------------------------------------------------- class ListenerNotifyWrapper ( TraitChangeNotifyWrapper ): #-- TraitChangeNotifyWrapper Method Overrides ------------------------------ def __init__ ( self, handler, owner, id, listener, target=None): self.type = ListenerType.get( self.init( handler, weakref.ref( owner, self.owner_deleted ), target ) ) self.id = id self.listener = listener def listener_deleted ( self, ref ): owner = self.owner() if owner is not None: dict = owner.__dict__.get( TraitsListener ) listeners = dict.get( self.id ) listeners.remove( self ) if len( listeners ) == 0: del dict[ self.id ] if len( dict ) == 0: del owner.__dict__[ TraitsListener ] # fixme: Is the following line necessary, since all registered # notifiers should be getting the same 'listener_deleted' call: self.listener.unregister( owner ) self.object = self.owner = self.listener = None def owner_deleted ( self, ref ): self.object = self.owner = None #------------------------------------------------------------------------------- # 'ListenerHandler' class: #------------------------------------------------------------------------------- class ListenerHandler ( object ): def __init__ ( self, handler ): if type( handler ) is MethodType: object = handler.im_self if object is not None: self.object = weakref.ref( object, self.listener_deleted ) self.name = handler.__name__ return self.handler = handler def __call__ ( self ): result = getattr( self, 'handler', None ) if result is not None: return result return getattr( self.object(), self.name ) def listener_deleted ( self, ref ): self.handler = Undefined traits-4.5.0/traits/ustr_trait.py000066400000000000000000000144241233213561600171150ustar00rootroot00000000000000#------------------------------------------------------------------------------ # # Copyright (c) 2008, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # # Thanks for using Enthought open source! # # Author: David C. Morrill # Date: 08/21/2008 # #------------------------------------------------------------------------------ """ Defines the UStr type and HasUniqueStrings mixin class for efficiently creating lists of objects containing traits whose string values must be unique within the list. """ #------------------------------------------------------------------------------- # Imports: #------------------------------------------------------------------------------- from __future__ import absolute_import from .trait_base import is_str from .has_traits import HasTraits from .trait_value import TraitValue, TypeValue from .trait_types import List from .trait_handlers import TraitType, NoDefaultSpecified #------------------------------------------------------------------------------- # 'UStr' class: #------------------------------------------------------------------------------- class UStr ( TraitType ): """ Trait type that ensures that a value assigned to a trait is unique within the list it belongs to. """ #: The type value to assign to restore the original list item type when a #: list item is removed from the monitored list: str_type = TraitValue() #: The informational text describing the trait: info_text = 'a unique string' def __init__ ( self, owner, list_name, str_name, default_value = NoDefaultSpecified, **metadata ): """ Initializes the type. """ super( UStr, self ).__init__( default_value, **metadata ) self.owner = owner self.list_name = list_name self.str_name = str_name self.ustr_type = TypeValue( self ) self.names = dict( [ ( getattr( item, str_name ), item ) for item in getattr( owner, list_name ) ] ) self.roots = {} self.available = {} owner.on_trait_change( self._items_modified, list_name + '[]' ) def validate ( self, object, name, value ): """ Ensures that a value being assigned to a trait is a unique string. """ if isinstance( value, basestring ): names = self.names old_name = getattr( object, name ) if names.get( old_name ) is object: self._remove( old_name ) if value not in names: names[ value ] = object return value available = self.available.get( value ) while True: if available is None: new_value = None break index = available.pop() if len( available ) == 0: del self.available[ value ] available = None new_value = '%s_%d' % ( value, index ) if new_value not in names: break if new_value is None: self.roots[ value ] = index = \ self.roots.setdefault( value, 1 ) + 1 new_value = '%s_%d' % ( value, index ) names[ new_value ] = object return new_value self.error( object, name, value ) def _remove ( self, name ): """ Removes a specified name. """ self.names.pop( name, None ) col = name.rfind( '_' ) if col >= 0: try: index = int( name[ col + 1: ] ) prefix = name[ : col ] if prefix in self.roots: if prefix not in self.available: self.available[ prefix ] = set() self.available[ prefix ].add( index ) except: pass def _items_modified ( self, object, name, removed, added ): """ Handles items being added to or removed from the monitored list. """ str_name = self.str_name str_type = self.str_type ustr_type = self.ustr_type for item in removed: setattr( item, str_name, str_type ) self._remove( getattr( item, str_name ) ) for item in added: setattr( item, str_name, ustr_type ) setattr( item, str_name, getattr( item, str_name ) ) #------------------------------------------------------------------------------- # 'HasUniqueStrings' class: #------------------------------------------------------------------------------- class HasUniqueStrings ( HasTraits ): """ Mixin or base class for objects containing lists with items containing string valued traits that must be unique. List traits within the class that contain items which have string traits which must be unique should indicate this by attaching metadata of the form:: unique_string = 'trait1, trait2, ..., traitn' where each 'traiti' value is the name of a trait within each list item that must contain unique string data. For example:: usa = List( State, unique_string = 'name, abbreviation' ) """ #-- Private Traits --------------------------------------------------------- # List of UStr traits that have been attached to object list traits: _ustr_traits = List #-- HasTraits Object Initializer ------------------------------------------- def traits_init ( self ): """ Adds any UStrMonitor objects to list traits with 'unique_string' metadata. """ super( HasUniqueStrings, self ).traits_init() for name, trait in self.traits( unique_string = is_str ).items(): for str_name in trait.unique_string.split( ',' ): self._ustr_traits.append( UStr( self, name, str_name.strip() ) ) items = getattr( self, name ) if len( items ) > 0: setattr( self, name, [] ) setattr( self, name, items ) traits-4.5.0/traits/util/000077500000000000000000000000001233213561600153135ustar00rootroot00000000000000traits-4.5.0/traits/util/__init__.py000066400000000000000000000013441233213561600174260ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2003-2013, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. # Description: #------------------------------------------------------------------------------ """ Utility functions, part of the Traits project. :Copyright: 2003-2013 Enthought, Inc. """ traits-4.5.0/traits/util/api.py000066400000000000000000000001161233213561600164340ustar00rootroot00000000000000 from .deprecated import deprecated from .import_symbol import import_symbol traits-4.5.0/traits/util/async_trait_wait.py000066400000000000000000000035241233213561600212350ustar00rootroot00000000000000import threading def wait_for_condition(condition, obj, trait, timeout=None): """ Wait until the given condition is true, re-evaluating on trait change. This is intended for use in multithreading situations where traits can be modified from a different thread than the calling thread. Wait until `condition` is satisfied. Raise a RuntimeError if `condition` is not satisfied within the given timeout. `condition` is a callback function that will be called with `obj` as its single argument. It should return a boolean indicating whether the condition is satisfied or not. `timeout` gives the maximum time in seconds to wait for the condition to become true. The default value of `None` indicates no timeout. (obj, trait) give an object and trait to listen to for indication of a possible change: whenever the trait changes, the condition is re-evaluated. The condition will also be evaluated on entering this function. """ condition_satisfied = threading.Event() def handler(): if condition(obj): condition_satisfied.set() obj.on_trait_change(handler, trait) try: if condition(obj): # Catch case where the condition was satisfied before # the on_trait_change handler was active. pass elif timeout is None: # Allow a Ctrl-C to interrupt. The 0.05 value matches # what's used by the standard library's Condition.wait. while not condition_satisfied.is_set(): condition_satisfied.wait(timeout=0.05) else: condition_satisfied.wait(timeout=timeout) if not condition_satisfied.is_set(): raise RuntimeError("Timed out waiting for condition.") finally: obj.on_trait_change(handler, trait, remove=True) traits-4.5.0/traits/util/camel_case.py000066400000000000000000000036201233213561600177420ustar00rootroot00000000000000""" Defines utility functions for operating on camel case names. """ # Standard library imports. import re ############################################################################### # Classes ############################################################################### class CamelCaseToPython: """ Simple functor class to convert names from camel case to idiomatic Python variable names. For example:: >>> camel2python = CamelCaseToPython >>> camel2python('XMLActor2DToSGML') 'xml_actor2d_to_sgml' """ def __init__(self): self.patn = re.compile(r'([A-Z0-9]+)([a-z0-9]*)') self.nd_patn = re.compile(r'(\D[123])_D') def __call__(self, name): ret = self.patn.sub(self._repl, name) ret = self.nd_patn.sub(r'\1d', ret) if ret[0] == '_': ret = ret[1:] return ret.lower() def _repl(self, m): g1 = m.group(1) g2 = m.group(2) if len(g1) > 1: if g2: return '_' + g1[:-1] + '_' + g1[-1] + g2 else: return '_' + g1 else: return '_' + g1 + g2 ############################################################################### # Functions ############################################################################### # Instantiate a converter. camel_case_to_python = CamelCaseToPython() def camel_case_to_words(s): """ Convert a camel case string into words separated by spaces. For example:: >>> camel_case_to_words('CamelCase') 'Camel Case' """ def add_space_between_words(s, c): # We detect a word boundary if the character we are looking at is # upper case, but the character preceding it is lower case. if len(s) > 0 and s[-1].islower() and c.isupper(): return s + ' ' + c return s + c return reduce(add_space_between_words, s, '') traits-4.5.0/traits/util/clean_strings.py000066400000000000000000000052071233213561600205240ustar00rootroot00000000000000#----------------------------------------------------------------------------- # # Copyright (c) 2006 by Enthought, Inc. # All rights reserved. # #----------------------------------------------------------------------------- """ Provides functions that mange strings to avoid characters that would be problematic in certain situations. """ # Standard library imports. import copy import datetime import keyword import re def clean_filename(name): """ Munge a string to avoid characters that might be problematic as a filename in some filesystems. """ # The only acceptable characters are alphanumeric (in the current locale) # plus a period and dash. wordparts = re.split('[^\w\.\-]+', name) # Filter out empty strings at the beginning or end of the list. wordparts = filter(None, wordparts) # Make sure this is an ASCII-encoded string, not a Unicode string. filename = '_'.join(wordparts).encode('ascii') return filename def clean_timestamp(dt=None, microseconds=False): """ Return a timestamp that has been cleansed of characters that might cause problems in filenames, namely colons. If no datetime object is provided, then uses the current time. Description ----------- The timestamp is in ISO-8601 format with the following exceptions: * Colons ':' are replaced by underscores '_'. * Microseconds are not displayed if the 'microseconds' parameter is False. Parameters ---------- dt : None or datetime.datetime If None, then the current time is used. microseconds : bool Display microseconds or not. Returns ------- A string timestamp. """ if dt is None: dt = datetime.datetime.now() else: # Operate on a copy. dt = copy.copy(dt) if not microseconds: # The microseconds are largely uninformative but annoying. dt = dt.replace(microsecond=0) stamp = dt.isoformat().replace(':', '_') return stamp def python_name(name): """ Attempt to make a valid Python identifier out of a name. """ if len(name) > 0: # Replace spaces with underscores. name = name.replace(' ', '_').lower() # If the name is a Python keyword then prefix it with an # underscore. if keyword.iskeyword(name): name = '_' + name # If the name starts with a digit then prefix it with an # underscore. if name[0].isdigit(): name = '_' + name return name ### EOF ###################################################################### traits-4.5.0/traits/util/deprecated.py000066400000000000000000000021641233213561600177700ustar00rootroot00000000000000""" A decorator for marking methods/functions as deprecated. """ # Standard library imports. import logging # We only warn about each function or method once! _cache = {} def deprecated(message): """ A factory for decorators for marking methods/functions as deprecated. """ def decorator(fn): """ A decorator for marking methods/functions as deprecated. """ def wrapper(*args, **kw): """ The method/function wrapper. """ global _cache module_name = fn.__module__ function_name = fn.__name__ if (module_name, function_name) not in _cache: logging.getLogger(module_name).warn( 'DEPRECATED: %s.%s, %s' % ( module_name, function_name, message ) ) _cache[(module_name, function_name)] = True return fn(*args, **kw) wrapper.__doc__ = fn.__doc__ wrapper.__name__ = fn.__name__ return wrapper return decorator #### EOF ###################################################################### traits-4.5.0/traits/util/home_directory.py000066400000000000000000000026251233213561600207060ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2005, 2006 by Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. # Description: #------------------------------------------------------------------------------ import os def get_home_directory(): """ Determine the user's home directory.""" # 'HOME' should work on most Unixes, and 'USERPROFILE' works on at # least Windows XP ;^) # # FIXME: Is this really better than the following?? # path = os.path.expanduser('~') # The above seems to work on both Windows and Unixes though the docs # indicate it might not work as well on Macs. for name in ['HOME', 'USERPROFILE']: if name in os.environ: # Make sure that the path ends with a path separator. path = os.environ[name] if path[-1] != os.path.sep: path += os.path.sep break # If all else fails, the current directory will do. else: path = '' return path traits-4.5.0/traits/util/import_symbol.py000066400000000000000000000020471233213561600205670ustar00rootroot00000000000000""" A function to import symbols. """ def import_symbol(symbol_path): """ Import the symbol defined by the specified symbol path. Examples -------- import_symbol('tarfile:TarFile') -> TarFile import_symbol('tarfile:TarFile.open') -> TarFile.open To allow compatibility with old-school traits symbol names we also allow all-dotted paths, but in this case you can only import top-level names from the module. import_symbol('tarfile.TarFile') -> TarFile """ if ':' in symbol_path: module_name, symbol_name = symbol_path.split(':') module = __import__(module_name, {}, {}, [symbol_name], 0) symbol = eval(symbol_name, module.__dict__) else: components = symbol_path.split('.') module_name = '.'.join(components[:-1]) symbol_name = components[-1] module = __import__(module_name, {}, {}, [symbol_name], 0) symbol = getattr(module, symbol_name) return symbol #### EOF ###################################################################### traits-4.5.0/traits/util/resource.py000066400000000000000000000163401233213561600175200ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Copyright (c) 2005, Enthought, Inc. # All rights reserved. # # This software is provided without warranty under the terms of the BSD # license included in enthought/LICENSE.txt and may be redistributed only # under the conditions described in the aforementioned license. The license # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! # # Author: Enthought, Inc. # Description: #------------------------------------------------------------------------------ """ Utility functions for managing and finding resources (ie. images/files etc). get_path : Returns the absolute path of a class or instance create_unique_name : Creates a name with a given prefix that is not in a given list of existing names. The separator between the prefix and the rest of the name can also be specified (default is a '_') find_resource: Given a setuptools project specification string ('MyProject>=2.1') and a partial path leading from the projects base directory to the desired resource, will return either an opened file object or, if specified, a full path to the resource. """ # Standard library imports. import inspect, os, sys from distutils.sysconfig import get_python_lib def get_path(path): """ Returns an absolute path for the specified path. 'path' can be a string, class or instance. """ if type(path) is not str: # Is this a class or an instance? if inspect.isclass(path): klass = path else: klass = path.__class__ # Get the name of the module that the class was loaded from. module_name = klass.__module__ # Look the module up. module = sys.modules[module_name] if module_name == '__main__': dirs = [os.path.dirname(sys.argv[0]), os.getcwd()] for d in dirs: if os.path.exists(d): path = d break else: # Get the path to the module. path = os.path.dirname(module.__file__) return path def create_unique_name(prefix, names, separator='_'): """ Creates a name starting with 'prefix' that is not in 'names'. """ i = 1 name = prefix while name in names: name = prefix + separator + str(i) i += 1 return name def find_resource(project, resource_path, alt_path=None, return_path=False): """ Returns a file object or file path pointing to the desired resource. Parameters ---------- project : str The name of the project to look for the resource in. Can be the name or a requirement string. Ex: 'MyProject', 'MyProject>1.0', 'MyProject==1.1' resource_path : str The path to the file from inside the package. If the file desired is MyProject/data/image.jpg, resource_path would be 'data/image.jpg'. alt_path : str The path to the resource relative to the location of the application's top-level script (the one with __main__). If this function is called in code/scripts/myscript.py and the resource is code/data/image.jpg, the alt_path would be '../data/image.jpg'. This path is only used if the resource cannot be found using setuptools. return_path : bool Determines whether the function should return a file object or a full path to the resource. Returns ------- file : file object or file path A file object containing the resource. If return_path is True, 'file' will be the full path to the resource. If the file is not found or cannot be opened, None is returned. Description ----------- This function will find a desired resource file and return an opened file object. The main method of finding the resource uses the pkg_resources resource_stream method, which searches your working set for the installed project specified and appends the resource_path given to the project path, leading it to the file. If setuptools is not installed or it cannot find/open the resource, find_resource will use the sys.path[0] to find the resource if alt_path is defined. """ try: # Get the image using the pkg_resources resource_stream module, which # will find the file by getting the Chaco install path and appending the # image path. This method works in all cases as long as setuptools is # installed. If setuptools isn't installed, the backup sys.path[0] # method is used. from pkg_resources import resource_stream, working_set, Requirement # Get a requirement for the project requirement = Requirement.parse(project) if return_path: dist = working_set.find(requirement) full_path = os.path.join(dist.location, resource_path) # If the path exists, return it if os.path.exists(full_path): return full_path else: raise else: return resource_stream(requirement, resource_path) except: # Setuptools was either not installed, or it failed to find the file. # First check to see if the package was installed using egginst by # looking for the file at: site-packages\\resouce_path full_path = os.path.join(get_python_lib(), resource_path) if os.path.exists(full_path): if return_path: return full_path else: return open(full_path, 'rb') # Get the image using sys.path[0], which is the directory that the # running script lives in. The path to the file is then constructed by # navigating from the script's location. This method only works if this # script is called directly from the command line using # 'python %SOMEPATH%/