postfixadmin-3.0.2/0000775000175000017500000000000013046702640013165 5ustar daviddavidpostfixadmin-3.0.2/GPL-LICENSE.TXT0000664000175000017500000003545410715711016015300 0ustar daviddavid GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, 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. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. 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 Program or any portion of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, 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 Program, 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 Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) 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; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, 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 executable. However, as a special exception, the source code 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. If distribution of executable or 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 counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program 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. 5. 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 Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program 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 to this License. 7. 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 Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program 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 Program. 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. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program 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. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies 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 Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, 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 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS postfixadmin-3.0.2/debian/0000775000175000017500000000000013046702634014412 5ustar daviddavidpostfixadmin-3.0.2/debian/lighttpd/0000775000175000017500000000000013046702634016231 5ustar daviddavidpostfixadmin-3.0.2/debian/lighttpd/90-postfixadmin.conf0000664000175000017500000000013212720377533022033 0ustar daviddavid# Alias for Postfixadmin alias.url += ( "/postfixadmin" => "/usr/share/postfixadmin", ) postfixadmin-3.0.2/debian/control0000664000175000017500000000303713026571025016014 0ustar daviddavidSource: postfixadmin Section: admin Priority: optional Maintainer: Norman Messtorff Uploaders: Gaudenz Steinlin , Christoph Martin Build-Depends: debhelper (>= 7), po-debconf, dh-apache2 Standards-Version: 3.9.5 Vcs-Git: git://anonscm.debian.org/collab-maint/postfixadmin.git Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/postfixadmin.git Homepage: http://postfixadmin.sourceforge.net Package: postfixadmin Architecture: all Depends: debconf (>= 0.5), dbconfig-common, wwwconfig-common, apache2 | lighttpd | httpd, libapache2-mod-php | libapache2-mod-php5 | php-cgi | php5-cgi | php5-fpm | php-fpm | php | php5 , php-imap | php5-imap, php-mysql | php5-mysql | php-pgsql | php5-pgsql | php-mysqlnd | php-sqlite3, mysql-client | postgresql-client | mariadb-client, ${misc:Depends} Recommends: postfix-mysql | postfix-pgsql, virtual-mysql-server | postgresql | sqlite (>= 3.12.0), zendframework, dovecot-core | courier-authlib-mysql | courier-authlib-postgresql, php-cli Description: Virtual mail hosting interface for Postfix Postfixadmin is a web interface to manage virtual users and domains for a Postfix mail transport agent. It supports Virtual mailboxes, aliases, forwarders and vacation. . Postfixadmin allows administrators to delegate account handling to domain administrators and allows users to login and change their own settings (e.g. forwarders, vacation, passwords etc). . It provides easy integration into dovecot, courier or cyrus. . Postfixadmin is written in PHP. postfixadmin-3.0.2/debian/apache/0000775000175000017500000000000013046702634015633 5ustar daviddavidpostfixadmin-3.0.2/debian/apache/postfixadmin.conf0000664000175000017500000000013612720377533021213 0ustar daviddavid# BEGIN FOR POSTFIXADMIN Alias /postfixadmin /usr/share/postfixadmin # END FOR POSTFIXADMIN postfixadmin-3.0.2/debian/postfixadmin.examples0000664000175000017500000000077711340276645020675 0ustar daviddavidVIRTUAL_VACATION ADDITIONS/change_password.tgz ADDITIONS/import_users_from_csv.py ADDITIONS/postfixadmin-domain-postdeletion.sh ADDITIONS/cleanupdirs.pl ADDITIONS/mailbox_remover.pl ADDITIONS/postfixadmin-mailbox-postcreation.sh ADDITIONS/virtualmaildel.php ADDITIONS/convert-passwd-to-postfixadmin.pl ADDITIONS/mkeveryone.pl ADDITIONS/postfixadmin-mailbox-postdeletion.sh ADDITIONS/delete-mailq-by-domain.pl ADDITIONS/pfa_maildir_cleanup.pl ADDITIONS/quota_usage.pl ADDITIONS/fetchmail.pl ADDITIONS/README.TXT postfixadmin-3.0.2/debian/compat0000664000175000017500000000000211161213262015576 0ustar daviddavid7 postfixadmin-3.0.2/debian/postfixadmin.links0000664000175000017500000000010611201377624020154 0ustar daviddavidetc/postfixadmin/config.inc.php usr/share/postfixadmin/config.inc.php postfixadmin-3.0.2/debian/postfixadmin.postinst0000664000175000017500000000172713026572337020736 0ustar daviddavid#!/bin/bash set -e if [ "$1" = "configure" ]; then # configure DB stuff via dbconfig-common dbc_generate_include=php:/etc/postfixadmin/dbconfig.inc.php dbc_generate_include_args="-O root:www-data -m 640 -U" . /usr/share/debconf/confmodule . /usr/share/dbconfig-common/dpkg/postinst dbc_go postfixadmin $@ fi # remove legacy apache and lighthttpd configuration symlink, # conf.d is no longer supported with Apache 2.4 if [ "$(readlink /etc/apache2/conf.d/postfixadmin)" = "../../postfixadmin/apache.conf" ]; then rm -f /etc/apache2/conf.d/postfixadmin fi if [ "$(readlink /etc/lighttpd/conf-available/postfixadmin)" = "../../postfixadmin/lighttpd.conf" ]; then rm -f /etc/lighttpd/conf-available/postfixadmin fi # See : https://sourceforge.net/p/postfixadmin/bugs/376/ - remove any existing templates_c files on upgrade. if [ -d /usr/share/postfixadmin/templates_c ]; then find /usr/share/postfixadmin/templates_c -type f -exec rm -r {} \; fi #DEBHELPER# exit 0 postfixadmin-3.0.2/debian/changelog0000664000175000017500000000402113046671036016262 0ustar daviddavidpostfixadmin (3.0.2-1) unstable; urgency=low * Security fix (don't delete protected aliases, CVE-2017-5930) * Fix MySQL vacation.cache column (regression fix) -- David Goodwin Wed, 08 Feb 2017 19:30:00 +0000 postfixadmin (3.0.1-2) unstable; urgency=low * Try and make dependencies less strict (and perhaps work for Ubuntu Precise as well) -- David Goodwin Mon, 10 Oct 2016 20:00:00 +0100 postfixadmin (3.0.1-1) unstable; urgency=low * Fix packaging issues (missing: smarty/ and configs/) -- David Goodwin Mon, 19 Sep 2016 10:08:00 +0100 postfixadmin (3.0-1) unstable; urgency=low * New upstream release -- David Goodwin Sun, 11 Sep 2016 18:42:00 +0100 postfixadmin (2.93-2) unstable; urgency=low * Replace debian/ using Debian v2.3.7-2. See Debian's #821643 * This adds : PHP7 and Apache 2.4 support. -- David Goodwin Sun, 22 May 2016 19:41:01 +0100 postfixadmin (2.93-1) unstable; urgency=low * New upstream release (effectively beta3 for v3.0) * update dependencies to allow mariadb as database -- David Goodwin Sat, 26 Sep 2015 15:05:00 +0100 postfixadmin (2.92-1) unstable; urgency=low * New upstream release (effectively beta2 for v3.0) -- David Goodwin Wed, 28 Oct 2014 21:02:00 +0100 postfixadmin (2.91-1) unstable; urgency=low * New upstream release (effectively beta for v3.0) -- David Goodwin Tue, 06 May 2014 21:36:00 +0100 postfixadmin (2.3.5-2) unstable; urgency=low * Added .po translation files (Closes: 667951, #667962, #668202, #668288) * Closes: #668298, #668301, #668405, #668635 * Updated standards version to 3.9.3 without changes. -- Norman Messtorff Thu, 26 Apr 2012 20:55:57 +0200 postfixadmin (2.3.5-1) unstable; urgency=low * Initial Debian release (Closes: #247225) -- Norman Messtorff Sun, 15 Jan 2012 12:27:28 +0100 postfixadmin-3.0.2/debian/patches/0000775000175000017500000000000013046702634016041 5ustar daviddavidpostfixadmin-3.0.2/debian/patches/series0000664000175000017500000000003212720403774017252 0ustar daviddavid0001-db_credentials.patch postfixadmin-3.0.2/debian/patches/0001-db_credentials.patch0000664000175000017500000000356412720403774022413 0ustar daviddavidFrom: Norman Messtorff Date: Sun, 23 Mar 2014 17:40:30 +0100 Subject: db_credentials --- config.inc.php | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) Index: postfixadmin/config.inc.php =================================================================== --- a/config.inc.php +++ b/config.inc.php @@ -15,6 +15,14 @@ * Contains configuration options. */ + +// Debian: This loads the automatic generated DB credentials from +// /etc/postfixadmin/dbconfig.inc.php +require_once('dbconfig.inc.php'); +if (!isset($dbserver) || empty($dbserver)) { + $dbserver='localhost'; +} + /***************************************************************** * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * You have to set $CONF['configured'] = true; before the @@ -22,7 +30,7 @@ * Doing this implies you have changed this file as required. * i.e. configuring database etc; specifying setup.php password etc. */ -$CONF['configured'] = false; +$CONF['configured'] = true; // In order to setup Postfixadmin, you MUST specify a hashed password here. // To create the hash, visit setup.php in a browser and type a password into the field, @@ -81,11 +89,11 @@ // mysqli = MySQL 4.1+ or MariaDB // pgsql = PostgreSQL // sqlite = SQLite 3 -$CONF['database_type'] = 'mysqli'; -$CONF['database_host'] = 'localhost'; -$CONF['database_user'] = 'postfix'; -$CONF['database_password'] = 'postfixadmin'; -$CONF['database_name'] = 'postfix'; +$CONF['database_type'] = $dbtype; +$CONF['database_host'] = $dbserver; +$CONF['database_user'] = $dbuser; +$CONF['database_password'] = $dbpass; +$CONF['database_name'] = $dbname; // If you need to specify a different port for a MYSQL database connection, use e.g. // $CONF['database_host'] = '172.30.33.66:3308'; // If you need to specify a different port for POSTGRESQL database connection postfixadmin-3.0.2/debian/postfixadmin.postrm0000664000175000017500000000114412720377533020371 0ustar daviddavid#!/bin/sh set -e if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then if [ -f /usr/share/debconf/confmodule ]; then . /usr/share/debconf/confmodule db_version 2.0 if [ -f /usr/share/dbconfig-common/dpkg/postrm ]; then . /usr/share/dbconfig-common/dpkg/postrm dbc_go postfixadmin $@ fi fi if [ "$1" = "purge" ]; then rm -f /etc/postfixadmin/dbconfig.inc.php if which ucf >/dev/null 2>&1; then ucf --purge /etc/postfixadmin/dbconfig.inc.php fi db_purge || true fi fi #DEBHELPER# exit 0 postfixadmin-3.0.2/debian/postfixadmin.prerm0000664000175000017500000000031012720377533020164 0ustar daviddavid#!/bin/sh set -e . /usr/share/debconf/confmodule if [ -f /usr/share/dbconfig-common/dpkg/prerm ]; then . /usr/share/dbconfig-common/dpkg/prerm dbc_go postfixadmin $@ fi #DEBHELPER# postfixadmin-3.0.2/debian/stamp-patched0000664000175000017500000000000012720377533017061 0ustar daviddavidpostfixadmin-3.0.2/debian/rules0000775000175000017500000000276112720403677015503 0ustar daviddavid#!/usr/bin/make -f # debian/rules makefile for postfixadmin # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 export VERSION = $(shell grep -E "version = '.*';" functions.inc.php |sed -e "s/.version = '//" |sed -e "s/';.*//" |sed -e "s/ /-/g") export DEBVERSION = $(shell grep -E "postfixadmin .([0-9]+|\.)+" debian/changelog |head -1 |sed -e "s/postfixadmin .//" |sed -e "s/-.*//") # Create a needed tar.gz file to build a non-nativ .dpkg prep: rm -f ../postfixadmin_*orig.tar.gz cd ..; tar --exclude-vcs --exclude=$(notdir ${CURDIR})/debian --exclude=$(notdir ${CURDIR})/.pc -cvzf postfixadmin_${DEBVERSION}.orig.tar.gz $(notdir ${CURDIR}) build: build-arch build-indep build-arch: build-stamp build-indep: build-stamp build-stamp: dh_testdir touch build-stamp clean: dh_testdir dh_testroot dh_clean install: build dh_testdir dh_testroot dh_prep dh_installdirs dh_install dh_apache2 mv debian/postfixadmin/usr/share/postfixadmin/config.inc.php debian/postfixadmin/etc/postfixadmin/config.inc.php find debian/postfixadmin -name .svn | xargs -r rm -r # Build architecture-independent files here. binary-indep: build install dh_testdir dh_testroot dh_installchangelogs dh_installdebconf dh_installdocs -X.svn dh_installexamples -X.svn dh_link dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb # Build architecture-dependent files here. binary-arch: binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install postfixadmin-3.0.2/debian/README.source0000664000175000017500000000222611340276645016576 0ustar daviddavidThis package is using the quilt framework. All patches are located in debian/patches. Adding a new patch: quilt new This will create a new file debian/patches/patch/date-patch_name. Please use the current date (e.g. 20100221 - YYYYMMDD) as prefix! Editing a file to include it into the patch: quilt edit This will open your $EDITOR. To write your changes into the new patchfile: quilt refresh. quilt push: Apply patch(es) from the series file. Without options, the next patch in the series file is applied. When a number is specified, apply the specified number of patches. When a patch name is specified, apply all patches up to and including the specified patch. Patch names may include the patches/ prefix, which means that filename completion can be used. quilt pop: Remove patch(es) from the stack of applied patches. Without options, the topmost patch is removed. When a number is specified, remove the specified number of patches. When a patch name is specified, remove patches until the specified patch end up on top of the stack. Patch names may include the patches/ prefix, which means that filename completion can be used. postfixadmin-3.0.2/debian/postfixadmin.docs0000775000175000017500000000001311675350426017772 0ustar daviddavidDOCUMENTS postfixadmin-3.0.2/debian/source/0000775000175000017500000000000013046702634015712 5ustar daviddavidpostfixadmin-3.0.2/debian/source/format0000664000175000017500000000001411673450004017113 0ustar daviddavid3.0 (quilt) postfixadmin-3.0.2/debian/postfixadmin.maintscript0000664000175000017500000000035212720377533021402 0ustar daviddavid# move webserver configuration files mv_conffile /etc/postfixadmin/apache.conf /etc/apache2/conf-available/postfixadmin.conf 2.3.7-1~ mv_conffile /etc/postfixadmin/lighttpd.conf /etc/lighttpd/conf-available/postfixadmin.conf 2.3.7-1~ postfixadmin-3.0.2/debian/postfixadmin.dirs0000664000175000017500000000013612720377533020006 0ustar daviddavidusr/share/postfixadmin usr/share/postfixadmin/css usr/share/doc/postfixadmin etc/postfixadmin postfixadmin-3.0.2/debian/TODO0000664000175000017500000000013211746324240015074 0ustar daviddavid * DebTags * dbconfig: DOCUMENTS/SECURITY.txt * include postfix configuration templates postfixadmin-3.0.2/debian/watch0000664000175000017500000000010511746324240015435 0ustar daviddavidversion=3 http://sf.net/postfixadmin/postfixadmin-([\d\.]+)\.tar\.gz postfixadmin-3.0.2/debian/postfixadmin.apache20000664000175000017500000000004412720377533020346 0ustar daviddavidconf debian/apache/postfixadmin.confpostfixadmin-3.0.2/debian/copyright0000664000175000017500000000241511201377624016345 0ustar daviddavidThis package was debianized by David Goodwin on Sun, 04 Nov 2007 15:21:00 +0000. It was downloaded from subversion, via http://postfixadmin.sf.net Upstream Authors: The PostfixAdmin Development Team Copyright: Copyright (C) 2007 The Postfixadmin Project Team License: This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA On Debian GNU/Linux systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-2' The Debian packaging of Postfixadmin is licensed under the same terms as Postfixadmin itself. postfixadmin-3.0.2/debian/postfixadmin.config0000664000175000017500000000035212720377533020312 0ustar daviddavid#!/bin/sh set -e . /usr/share/debconf/confmodule if [ -f /usr/share/dbconfig-common/dpkg/config ]; then # we support mysql and pgsql dbc_dbtypes="mysql, pgsql" . /usr/share/dbconfig-common/dpkg/config dbc_go postfixadmin $@ fi postfixadmin-3.0.2/debian/postfixadmin.install0000664000175000017500000000053212767725360020521 0ustar daviddavid*.php usr/share/postfixadmin css usr/share/postfixadmin images usr/share/postfixadmin languages usr/share/postfixadmin model usr/share/postfixadmin templates usr/share/postfixadmin users usr/share/postfixadmin smarty usr/share/postfixadmin configs usr/share/postfixadmin debian/lighttpd/90-postfixadmin.conf etc/lighttpd/conf-available postfixadmin-3.0.2/debian/README.txt0000664000175000017500000000103612720403743016105 0ustar daviddavidRandom instructions for help: This 'debian' directory is used by dpkg-buildpackage when creating a .deb. You'll need to install : apt-get install dpkg-dev quilt debhelper Then from within the trunk directory (or whatever forms the root of the postfixadmin project), do the following : 1. Update debian/changelog; include your email address in the last change (this is used to determine a gpg key to use) 2. debian/rules prep 3. dpkg-buildpackage -rfakeroot 4. Look in ../ at the shiny .deb / .tar.gz 5. Profit. postfixadmin-3.0.2/debian/README.Debian0000664000175000017500000000100712720377533016455 0ustar daviddavidPostfixAdmin for Debian ======================= After installing the package, you should find that : http://youserver/postfixadmin/setup.php works. This should guide you through the appropriate process. Recommended and Suggested Packages ================================== - Postfix - MySQL or PostgreSQL - Courier or Dovecot Where to get help ================= The first stop would be the Postfixadmin Website, Forum or IRC channel. See : - http://postfixadmin.sf.net - #postfixadmin on irc.freenode.net postfixadmin-3.0.2/INSTALL.TXT0000664000175000017500000001256713002233165014700 0ustar daviddavid# # Postfix Admin # by Mischa Peters # Copyright (c) 2002 - 2005 High5! # Licensed under GPL for more info check GPL-LICENSE.TXT # REQUIRED!! ---------- - You are using Postfix 2.0 or higher. - You are using Apache 1.3.27 / Lighttpd 1.3.15 or higher. - You are using PHP 5.1.2 or higher. - You are using MySQL 3.23 or higher (5.x recommended) OR PostgreSQL 7.4 (or higher) READ THIS FIRST! ---------------- When this is an upgrade from a previous version of Postfix Admin, please read DOCUMENTS/UPGRADE.TXT also! If you need to setup Postfix to be able to handle Virtual Domains and Virtual Users check out: - the PostfixAdmin documentation in the DOCUMENTS/ directory - our wiki at https://sourceforge.net/p/postfixadmin/wiki/ There are also lots of HOWTOs around the web. Be warned that many of them (even those listed below) may be outdated or incomplete. Please stick to the PostfixAdmin documentation, and use those HOWTOs only if you need some additional information that is missing in the PostfixAdmin DOCUMENTS/ folder. - http://codepoets.co.uk/postfixadmin-postgresql-courier-squirrelmail-debian-etch-howto-tutorial (Debian+Courier+PostgreSQL+Postfix+Postfixadmin) - http://bliki.rimuhosting.com/space/knowledgebase/linux/mail/postfixadmin+on+debian+sarge (Postfix+MySQL+Postfixadmin+Dovecot) - http://en.gentoo-wiki.com/wiki/Virtual_mail_server_using_Postfix,_Courier_and_PostfixAdmin (Postfix+MySQL+Postfixadmin+Courier) 1. Unarchive new Postfix Admin ------------------------------ Make sure that you are in your WWW directory and then unarchive the Postfix Admin archive (whatever the filename is): $ tar -zxvf postfixadmin-$version.tgz 2. Setup a Database ------------------- With your chosen/preferred database server (i.e. MySQL or PostgreSQL), you need to create a new database. A good name for this could be : postfix The mechanics of creating the database vary depending on which server you are using. Most users will find using phpMyAdmin or phpPgAdmin the easiest route. If you wish to use the command line, you'll need to do something like : For MySQL: CREATE DATABASE postfix; CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'choose_a_password'; GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost'; For PostgreSQL: CREATE USER postfix WITH PASSWORD 'whatever'; CREATE DATABASE postfix OWNER postfix ENCODING 'unicode'; 3. Configure PostfixAdmin so it can find the database ----------------------------------------------------- Create a config.local.php file for your local configuration: See config.inc.php for all available config options and their default value. You can also edit config.inc.php instead of creating a config.local.php, but this will make updates harder and is therefore not recommended. The most important settings are those for your database server. You must also change the line that says : $CONF['configured'] = false; to $CONF['configured'] = true; PostfixAdmin does not require write access to any files except the templates_c directory (smarty cache). You can therefore leave the files owned as root (or another user); as long as the web server user (e.g. www-data) can read them, it will be fine. For templates_c/, allow write access (only) for the web server user (e. g. www-data). The easiest way to do this is chown -R www-data templates_c 4. Check settings, and create Admin user ---------------------------------------- Hit http://yourserver.tld/postfixadmin/setup.php in a web browser. You should see a list of 'OK' messages. The setup.php script will attempt to create the database structure (or upgrade it if you're coming from a previous version). Assuming everything is OK you can specify a password (which you'll need to use setup.php again in the future); when you submit the form, the hashed value (which you need to enter into config.inc.php is echoed out - with appropriate instructions on what to do with it). create the admin user using the form displayed. 5. Use PostfixAdmin ------------------- This is all that is needed. Fire up your browser and go to the site that you specified to host Postfix Admin. 6. Integration with Postfix, Dovecot etc. ----------------------------------------- Now that PostfixAdmin is working, you need to do some configuration in Postfix, Dovecot etc. so that they use the domains, mailboxes and aliases you setup in PostfixAdmin. The files in the DOCUMENTS/ directory explain which settings you need to do/change. 7. XMLRPC Integration (OPTIONAL!) -------------------------------- See ADDITIONS/squirrelmail-plugin See xmlrpc.php - only a subset of Postfixadmin's functionality is currently exposed. See config.inc.php - see xmlrpc_enabled key (defaults to off). You'll need to install a copy of the Zend Framework (version 1.12.x) within Postfixadmin or your PHP include_path (see header within xmlrpc.php). NOTE: The XMLRPC interface is _not compatible_ with Zend Framework version 2.x. You'll need to enable the xmlrpc link (see config.inc.php) 8. More information ------------------- As of March 2007, PostfixAdmin moved to SourceForge. For the forum posts and source updates, see: https://sourceforge.net/projects/postfixadmin There is also #postfixadmin on irc.freenode.net. postfixadmin-3.0.2/calendar.js0000664000175000017500000003120511274563553015306 0ustar daviddavid// Tigra Calendar v4.0.2 (12-01-2009) European (dd.mm.yyyy) // http://www.softcomplex.com/products/tigra_calendar/ // Public Domain Software... You're welcome. // default settins var A_TCALDEF = { 'months' : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], 'weekdays' : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], 'yearscroll': true, // show year scroller 'weekstart': 1, // first day of week: 0-Su or 1-Mo 'centyear' : 70, // 2 digit years less than 'centyear' are in 20xx, othewise in 19xx. 'imgpath' : 'images/calendar/' // directory with calendar images } // date parsing function function f_tcalParseDate (s_date) { var re_date = /^\s*(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s*$/; if (!re_date.exec(s_date)) return alert ("Invalid date: '" + s_date + "'.\nAccepted format is dd.mm.yyyy.") var n_day = Number(RegExp.$1), n_month = Number(RegExp.$2), n_year = Number(RegExp.$3); if (n_year < 100) n_year += (n_year < this.a_tpl.centyear ? 2000 : 1900); if (n_month < 1 || n_month > 12) return alert ("Invalid month value: '" + n_month + "'.\nAllowed range is 01-12."); var d_numdays = new Date(n_year, n_month, 0); if (n_day > d_numdays.getDate()) return alert("Invalid day of month value: '" + n_day + "'.\nAllowed range for selected month is 01 - " + d_numdays.getDate() + "."); return new Date (n_year, n_month - 1, n_day); } // date generating function function f_tcalGenerDate (d_date) { return ( (d_date.getDate() < 10 ? '0' : '') + d_date.getDate() + "." + (d_date.getMonth() < 9 ? '0' : '') + (d_date.getMonth() + 1) + "." + d_date.getFullYear() ); } // implementation function tcal (a_cfg, a_tpl) { // apply default template if not specified if (!a_tpl) a_tpl = A_TCALDEF; // register in global collections if (!window.A_TCALS) window.A_TCALS = []; if (!window.A_TCALSIDX) window.A_TCALSIDX = []; this.s_id = a_cfg.id ? a_cfg.id : A_TCALS.length; window.A_TCALS[this.s_id] = this; window.A_TCALSIDX[window.A_TCALSIDX.length] = this; // assign methods this.f_show = f_tcalShow; this.f_hide = f_tcalHide; this.f_toggle = f_tcalToggle; this.f_update = f_tcalUpdate; this.f_relDate = f_tcalRelDate; this.f_parseDate = f_tcalParseDate; this.f_generDate = f_tcalGenerDate; // create calendar icon this.s_iconId = 'tcalico_' + this.s_id; this.e_icon = f_getElement(this.s_iconId); if (!this.e_icon) { document.write('Open Calendar'); this.e_icon = f_getElement(this.s_iconId); } // save received parameters this.a_cfg = a_cfg; this.a_tpl = a_tpl; } function f_tcalShow (d_date) { // find input field if (!this.a_cfg.controlname) throw("TC: control name is not specified"); if (this.a_cfg.formname) { var e_form = document.forms[this.a_cfg.formname]; if (!e_form) throw("TC: form '" + this.a_cfg.formname + "' can not be found"); this.e_input = e_form.elements[this.a_cfg.controlname]; } else this.e_input = f_getElement(this.a_cfg.controlname); if (!this.e_input || !this.e_input.tagName || this.e_input.tagName != 'INPUT') throw("TC: element '" + this.a_cfg.controlname + "' does not exist in " + (this.a_cfg.formname ? "form '" + this.a_cfg.controlname + "'" : 'this document')); // dynamically create HTML elements if needed this.e_div = f_getElement('tcal'); if (!this.e_div) { this.e_div = document.createElement("DIV"); this.e_div.id = 'tcal'; document.body.appendChild(this.e_div); } this.e_shade = f_getElement('tcalShade'); if (!this.e_shade) { this.e_shade = document.createElement("DIV"); this.e_shade.id = 'tcalShade'; document.body.appendChild(this.e_shade); } this.e_iframe = f_getElement('tcalIF') if (b_ieFix && !this.e_iframe) { this.e_iframe = document.createElement("IFRAME"); this.e_iframe.style.filter = 'alpha(opacity=0)'; this.e_iframe.id = 'tcalIF'; this.e_iframe.src = this.a_tpl.imgpath + 'pixel.gif'; document.body.appendChild(this.e_iframe); } // hide all calendars f_tcalHideAll(); // generate HTML and show calendar this.e_icon = f_getElement(this.s_iconId); if (!this.f_update()) return; this.e_div.style.visibility = 'visible'; this.e_shade.style.visibility = 'visible'; if (this.e_iframe) this.e_iframe.style.visibility = 'visible'; // change icon and status this.e_icon.src = this.a_tpl.imgpath + 'no_cal.gif'; this.e_icon.title = 'Close Calendar'; this.b_visible = true; } function f_tcalHide (n_date) { if (n_date) this.e_input.value = this.f_generDate(new Date(n_date)); // no action if not visible if (!this.b_visible) return; // hide elements if (this.e_iframe) this.e_iframe.style.visibility = 'hidden'; if (this.e_shade) this.e_shade.style.visibility = 'hidden'; this.e_div.style.visibility = 'hidden'; // change icon and status this.e_icon = f_getElement(this.s_iconId); this.e_icon.src = this.a_tpl.imgpath + 'cal.gif'; this.e_icon.title = 'Open Calendar'; this.b_visible = false; } function f_tcalToggle () { return this.b_visible ? this.f_hide() : this.f_show(); } function f_tcalUpdate (d_date) { var d_today = this.a_cfg.today ? this.f_parseDate(this.a_cfg.today) : f_tcalResetTime(new Date()); var d_selected = this.e_input.value == '' ? (this.a_cfg.selected ? this.f_parseDate(this.a_cfg.selected) : d_today) : this.f_parseDate(this.e_input.value); // figure out date to display if (!d_date) // selected by default d_date = d_selected; else if (typeof(d_date) == 'number') // get from number d_date = f_tcalResetTime(new Date(d_date)); else if (typeof(d_date) == 'string') // parse from string this.f_parseDate(d_date); if (!d_date) return false; // first date to display var d_firstday = new Date(d_date); d_firstday.setDate(1); d_firstday.setDate(1 - (7 + d_firstday.getDay() - this.a_tpl.weekstart) % 7); var a_class, s_html = '' + (this.a_tpl.yearscroll ? '' : '') + '' + (this.a_tpl.yearscroll ? '' : '') + '
' + this.a_tpl.months[d_date.getMonth()] + ' ' + d_date.getFullYear() + '
'; // print weekdays titles for (var i = 0; i < 7; i++) s_html += ''; s_html += '' ; // print calendar table var n_date, n_month, d_current = new Date(d_firstday); while (d_current.getMonth() == d_date.getMonth() || d_current.getMonth() == d_firstday.getMonth()) { // print row heder s_html +=''; for (var n_wday = 0; n_wday < 7; n_wday++) { a_class = []; n_date = d_current.getDate(); n_month = d_current.getMonth(); // other month if (d_current.getMonth() != d_date.getMonth()) a_class[a_class.length] = 'othermonth'; // weekend if (d_current.getDay() == 0 || d_current.getDay() == 6) a_class[a_class.length] = 'weekend'; // today if (d_current.valueOf() == d_today.valueOf()) a_class[a_class.length] = 'today'; // selected if (d_current.valueOf() == d_selected.valueOf()) a_class[a_class.length] = 'selected'; s_html += '' d_current.setDate(++n_date); while (d_current.getDate() != n_date && d_current.getMonth() == n_month) { alert(n_date + "\n" + d_current + "\n" + new Date()); d_current.setHours(d_current.getHours + 1); d_current = f_tcalResetTime(d_current); } } // print row footer s_html +=''; } s_html +='
' + this.a_tpl.weekdays[(this.a_tpl.weekstart + i) % 7] + '
' : '>') + n_date + '
'; // update HTML, positions and sizes this.e_div.innerHTML = s_html; var n_width = this.e_div.offsetWidth; var n_height = this.e_div.offsetHeight; var n_top = f_getPosition (this.e_icon, 'Top') + this.e_icon.offsetHeight; var n_left = f_getPosition (this.e_icon, 'Left') - n_width + this.e_icon.offsetWidth; if (n_left < 0) n_left = 0; this.e_div.style.left = n_left + 'px'; this.e_div.style.top = n_top + 'px'; this.e_shade.style.width = (n_width + 8) + 'px'; this.e_shade.style.left = (n_left - 1) + 'px'; this.e_shade.style.top = (n_top - 1) + 'px'; this.e_shade.innerHTML = b_ieFix ? '
' : '
'; if (this.e_iframe) { this.e_iframe.style.left = n_left + 'px'; this.e_iframe.style.top = n_top + 'px'; this.e_iframe.style.width = (n_width + 6) + 'px'; this.e_iframe.style.height = (n_height + 6) +'px'; } return true; } function f_getPosition (e_elemRef, s_coord) { var n_pos = 0, n_offset, e_elem = e_elemRef; while (e_elem) { n_offset = e_elem["offset" + s_coord]; n_pos += n_offset; e_elem = e_elem.offsetParent; } // margin correction in some browsers if (b_ieMac) n_pos += parseInt(document.body[s_coord.toLowerCase() + 'Margin']); else if (b_safari) n_pos -= n_offset; e_elem = e_elemRef; while (e_elem != document.body) { n_offset = e_elem["scroll" + s_coord]; if (n_offset && e_elem.style.overflow == 'scroll') n_pos -= n_offset; e_elem = e_elem.parentNode; } return n_pos; } function f_tcalRelDate (d_date, d_diff, s_units) { var s_units = (s_units == 'y' ? 'FullYear' : 'Month'); var d_result = new Date(d_date); d_result['set' + s_units](d_date['get' + s_units]() + d_diff); if (d_result.getDate() != d_date.getDate()) d_result.setDate(0); return ' onclick="A_TCALS[\'' + this.s_id + '\'].f_update(' + d_result.valueOf() + ')"'; } function f_tcalHideAll () { for (var i = 0; i < window.A_TCALSIDX.length; i++) window.A_TCALSIDX[i].f_hide(); } function f_tcalResetTime (d_date) { d_date.setHours(0); d_date.setMinutes(0); d_date.setSeconds(0); d_date.setMilliseconds(0); return d_date; } f_getElement = document.all ? function (s_id) { return document.all[s_id] } : function (s_id) { return document.getElementById(s_id) }; if (document.addEventListener) window.addEventListener('scroll', f_tcalHideAll, false); if (window.attachEvent) window.attachEvent('onscroll', f_tcalHideAll); // global variables var s_userAgent = navigator.userAgent.toLowerCase(), re_webkit = /WebKit\/(\d+)/i; var b_mac = s_userAgent.indexOf('mac') != -1, b_ie5 = s_userAgent.indexOf('msie 5') != -1, b_ie6 = s_userAgent.indexOf('msie 6') != -1 && s_userAgent.indexOf('opera') == -1; var b_ieFix = b_ie5 || b_ie6, b_ieMac = b_mac && b_ie5, b_safari = b_mac && re_webkit.exec(s_userAgent) && Number(RegExp.$1) < 500; postfixadmin-3.0.2/scripts/0000775000175000017500000000000013046702634014657 5ustar daviddavidpostfixadmin-3.0.2/scripts/postfixadmin-cli.php0000664000175000017500000003412012720407576020647 0ustar daviddavid#!/usr/bin/php * Copyright 2005-2008, Cake Software Foundation, Inc. * 1785 E. Sahara Avenue, Suite 490-204 * Las Vegas, Nevada 89104 * Modified for PostfixAdmin by Valkum 2011 * Modified for PostfixAdmin by Christian Boltz 2011-2013 * * Copyright 2010 * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @filesource * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. * @link http://postfixadmin.sourceforge.net/ Postfixadmin on Sourceforge * @package postfixadmin * @subpackage - * @since - * @version $Revision$ * @modifiedby $LastChangedBy$ * @lastmodified $Date$ * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ class PostfixAdmin { /** * Version * * @var string */ public $version ='0.2'; /** * Standard input stream. * * @var filehandle */ public $stdin; /** * Standard output stream. * * @var filehandle */ public $stdout; /** * Standard error stream. * * @var filehandle */ public $stderr; /** * Contains command switches parsed from the command line. * * @var array */ public $params = array(); /** * Contains arguments parsed from the command line. * * @var array */ public $args = array(); /** * The file name of the shell that was invoked. * * @var string */ public $shell = null; /** * The class name of the shell that was invoked. * * @var string */ public $shellClass = null; /** * The command called if public methods are available. * * @var string */ public $shellCommand = null; /** * The name of the shell in camelized. * * @var string */ public $shellName = null; /** * Constructor * * @param array $args the argv. */ public function __construct($args = array()) { set_time_limit(0); $this->__initConstants(); $this->parseParams($args); $this->__initEnvironment(); } /** * Defines core configuration. */ private function __initConstants() { ini_set('display_errors', '1'); ini_set('error_reporting', E_ALL); ini_set('html_errors', false); ini_set('implicit_flush', true); ini_set('max_execution_time', 0); define('DS', DIRECTORY_SEPARATOR); define('CORE_INCLUDE_PATH', dirname(__FILE__)); define('CORE_PATH', dirname(CORE_INCLUDE_PATH) ); # CORE_INCLUDE_PATH/../ if(!defined('POSTFIXADMIN')) { # already defined if called from setup.php define('POSTFIXADMIN', 1); # checked in included files } } /** * Defines current working environment. */ private function __initEnvironment() { $this->stdin = fopen('php://stdin', 'r'); $this->stdout = fopen('php://stdout', 'w'); $this->stderr = fopen('php://stderr', 'w'); if (!$this->__bootstrap()) { $this->stderr(""); $this->stderr("Unable to load."); $this->stderr("\tMake sure /config.inc.php exists in " . PATH); exit(1); } if (basename(__FILE__) != basename($this->args[0])) { $this->stderr('Warning: the dispatcher may have been loaded incorrectly, which could lead to unexpected results...'); if ($this->getInput('Continue anyway?', array('y', 'n'), 'y') == 'n') { exit(1); } } $this->shiftArgs(); } /** * Initializes the environment and loads the Cake core. * * @return boolean Success. */ private function __bootstrap() { if ($this->params['webroot'] != '' ) { define('PATH', $this->params['webroot'] ); } else { define('PATH', CORE_PATH); } if (!file_exists(PATH)) { $this->stderr( PATH . " don't exists"); return false; } # make sure global variables fron functions.inc.php end up in the global namespace, instead of being local to this function global $version, $min_db_version; if (!require_once(PATH . '/common.php')) { $this->stderr("Failed to load " . PATH . '/common.php'); return false; } return true; } /** * Dispatches a CLI request */ public function dispatch() { $CONF = Config::read('all'); check_db_version(); # ensure the database layout is up to date if (!isset($this->args[0])) { $this->help(); return; } $this->shell = $this->args[0]; $this->shiftArgs(); $this->shellName = ucfirst($this->shell); $this->shellClass = $this->shellName . 'Handler'; if ($this->shell == 'help') { $this->help(); return; } # TODO: move shells/shell.php to model/ to enable autoloading if (!class_exists('Shell')) { require CORE_INCLUDE_PATH . DS . "shells" . DS . 'shell.php'; } $command = 'help'; # not the worst default ;-) if (isset($this->args[0])) { $command = $this->args[0]; } $this->shellCommand = $command; $this->shellClass = 'Cli' . ucfirst($command); if (ucfirst($command) == 'Add' || ucfirst($command) == 'Update') { $this->shellClass = 'CliEdit'; } if (!class_exists($this->shellClass)) { $this->stderr('Unknown task ' . $this->shellCommand); return; } $shell = new $this->shellClass($this); $shell->handler_to_use = ucfirst($this->shell) . 'Handler'; if (!class_exists($shell->handler_to_use)) { $this->stderr('Unknown module ' . $this->shell); return; } $task = ucfirst($command); $shell->new = 0; if ($task == 'Add') { $shell->new = 1; } # TODO: add a way to Cli* to signal if the selected handler is supported (for example, not all *Handler support changing the password) if (strtolower(get_parent_class($shell)) == 'shell') { $shell->initialize(); $handler = new $shell->handler_to_use; if (in_array($task, $handler->taskNames)) { $this->shiftArgs(); $shell->startup(); if (isset($this->args[0]) && $this->args[0] == 'help') { if (method_exists($shell, 'help')) { $shell->help(); exit(); } else { $this->help(); } } $shell->execute(); return; } } $classMethods = get_class_methods($shell); $privateMethod = $missingCommand = false; if ((in_array($command, $classMethods) || in_array(strtolower($command), $classMethods)) && strpos($command, '_', 0) === 0) { $privateMethod = true; } if (!in_array($command, $classMethods) && !in_array(strtolower($command), $classMethods)) { $missingCommand = true; } $protectedCommands = array( 'initialize','in','out','err','hr', 'createfile', 'isdir','copydir','object','tostring', 'requestaction','log','cakeerror', 'shelldispatcher', '__initconstants','__initenvironment','__construct', 'dispatch','__bootstrap','getinput','stdout','stderr','parseparams','shiftargs' ); if (in_array(strtolower($command), $protectedCommands)) { $missingCommand = true; } if ($missingCommand && method_exists($shell, 'main')) { $shell->startup(); $shell->main(); } elseif (!$privateMethod && method_exists($shell, $command)) { $this->shiftArgs(); $shell->startup(); $shell->{$command}(); } else { $this->stderr("Unknown {$this->shellName} command '$command'.\nFor usage, try 'postfixadmin-cli {$this->shell} help'.\n\n"); } } /** * Prompts the user for input, and returns it. * * @param string $prompt Prompt text. * @param mixed $options Array or string of options. * @param string $default Default input value. * @return Either the default value, or the user-provided input. */ public function getInput($prompt, $options = null, $default = null) { if (!is_array($options)) { $print_options = ''; } else { $print_options = '(' . implode('/', $options) . ')'; } if ($default == null) { $this->stdout($prompt . " $print_options \n" . '> ', false); } else { $this->stdout($prompt . " $print_options \n" . "[$default] > ", false); } $result = fgets($this->stdin); if ($result === false){ exit(1); } $result = trim($result); if ($default != null && empty($result)) { return $default; } return $result; } /** * Outputs to the stdout filehandle. * * @param string $string String to output. * @param boolean $newline If true, the outputs gets an added newline. */ public function stdout($string, $newline = true) { if ($newline) { fwrite($this->stdout, $string . "\n"); } else { fwrite($this->stdout, $string); } } /** * Outputs to the stderr filehandle. * * @param string $string Error text to output. */ public function stderr($string) { fwrite($this->stderr, 'Error: '. $string . "\n"); } /** * Parses command line options * * @param array $params Parameters to parse */ public function parseParams($params) { $this->__parseParams($params); $defaults = array('webroot' => CORE_PATH); $params = array_merge($defaults, array_intersect_key($this->params, $defaults)); $isWin = array_filter(array_map('strpos', $params, array('\\'))); $params = str_replace('\\', '/', $params); if (!empty($matches[0]) || !empty($isWin)) { $params = str_replace('/', '\\', $params); } $this->params = array_merge($this->params, $params); } /** * Helper for recursively paraing params * * @return array params */ private function __parseParams($params) { $count = count($params); for ($i = 0; $i < $count; $i++) { if (isset($params[$i])) { if ($params[$i] != '' && $params[$i]{0} === '-') { $key = substr($params[$i], 1); $this->params[$key] = true; unset($params[$i]); if (isset($params[++$i])) { # TODO: ideally we should know if a parameter can / must have a value instead of whitelisting known valid values starting with '-' (probably only bool doesn't need a value) if ($params[$i]{0} !== '-' or $params[$i] != '-1') { $this->params[$key] = $params[$i]; unset($params[$i]); } else { $i--; $this->__parseParams($params); } } } else { $this->args[] = $params[$i]; unset($params[$i]); } } } } /** * Removes first argument and shifts other arguments up * * @return boolean False if there are no arguments */ public function shiftArgs() { if (empty($this->args)) { return false; } unset($this->args[0]); $this->args = array_values($this->args); return true; } /** * prints help message and exits. */ public function help() { $this->stdout("\nWelcome to Postfixadmin-CLI v" . $this->version); $this->stdout("---------------------------------------------------------------"); $this->stdout("Usage:"); $this->stdout(" postfixadmin-cli [--option value --option2 value]"); $this->stdout(""); $this->stdout("Available modules:"); $modules = explode(',','admin,domain,mailbox,alias,aliasdomain,fetchmail'); foreach ($modules as $module) { $this->stdout(" $module"); } $this->stdout(""); $this->stdout("Most modules support the following tasks:"); $this->stdout(" view View an item"); $this->stdout(" add Add an item"); $this->stdout(" update Update an item"); $this->stdout(" delete Delete an item"); $this->stdout(" scheme Print database scheme (useful for developers only)"); $this->stdout(" help Print help output"); $this->stdout(""); $this->stdout(""); $this->stdout("For module-specific help, see:"); $this->stdout(""); $this->stdout(" postfixadmin-cli help"); $this->stdout(" print a detailed list of available commands"); $this->stdout(""); $this->stdout(" postfixadmin-cli help"); $this->stdout(" print a list of available options."); $this->stdout(""); exit(); } } define ("POSTFIXADMIN_CLI", 1); $dispatcher = new PostfixAdmin($argv); $CONF = Config::read('all'); $dispatcher->dispatch(); /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/scripts/snippets/0000775000175000017500000000000013046702634016524 5ustar daviddavidpostfixadmin-3.0.2/scripts/snippets/crypt_test.php0000664000175000017500000000112111507412512021421 0ustar daviddavidcrypt('CRYPT'); echo "CRYPT:\n\n"; echo "Crypted: ".$test->get()."\n"; if ($test->verify('CRYPT', $test->get())) { echo "Varified: true\n"; } else { echo "Varified: false\n"; } echo "\n"; $test2 = new DovecotCrypt('test2'); $test2->crypt('CRAM-MD5'); echo "CRAM_MD5:\n\n"; echo "Crypted: ".$test2->get()."\n"; if ($test2->verify('CRAM-MD5', $test2->get())) { echo "Varified: true\n"; } else { echo "Varified: false\n"; } echo "\n"; ?>postfixadmin-3.0.2/scripts/snippets/crypt.php0000664000175000017500000000067111507257050020377 0ustar daviddavidplain = $plaintext; } /** * @return true/false boolean */ public function crypt($algorithm) { return true; } public function get() { return $this->password; } }postfixadmin-3.0.2/scripts/snippets/dovecot_crypt.php0000664000175000017500000001146311507412512022117 0ustar daviddavid array('encoding', 'length', 'verify', 'function')) */ public $password_schemes = array( 'CRYPT' => array('NONE', 0, 'crypt_verify', 'crypt_generate'), 'MD5' => array('NONE', 0, 'md5_verify', 'md5_generate'), //'MD5-CRYPT' => array('NONE', 0, 'md5_crypt_verify', 'md5_crypt_generate'), 'SHA' => array('BASE64', SHA1_RESULTLEN, NULL, 'sha1_generate'), 'SHA1' => array('BASE64', SHA1_RESULTLEN, NULL, 'sha1_generate'), //'SHA256' => array('BASE64', SHA256_RESULTLEN, NULL, 'sha256_generate'), //'SMD5' => array('BASE64', 0, 'smd5_verify', 'smd5_generate'), //'SSHA' => array('BASE64', 0, 'ssha_verify', 'ssha_generate'), //'SSHA256' => array('BASE64', 0, 'ssha356_verify', 'ssha256_generate'), 'PLAIN' => array('NONE', 0, NULL, 'plain_generate'), 'CLEARTEXT' => array('NONE', 0, NULL, 'plain_generate'), 'CRAM-MD5' => array('HEX', CRAM_MD5_CONTEXTLEN, NULL, 'cram_md5_generate'), //'HMAC-MD5' => array('HEX', CRAM_MD5_CONTEXTLEN, NULL, 'cram_md5_generate'), //'DIGEST-MD5' => array('HEX', MD5_RESULTLEN, NULL, 'digest_md5_generate'), //'PLAIN-MD4' => array('HEX', MD4_RESULTLEN, NULL, 'plain_md4_generate'), //'PLAIN-MD5' => array('HEX', MD5_RESULTLEN, NULL, 'plain_md5_generate'), //'LDAP-MD5' => array('BASE64', MD5_RESULTLEN, NULL, 'plain_md5_generate'), //'LANMAN' => array('HEX', LM_HASH_SIZE, NULL, 'lm_generate'), //'NTLM' => array('HEX', NTLMSSP_HASH_SIZE, NULL, 'ntlm_generate'), //'OTP' => array('NONE', 0, 'otp_verify', 'otp_generate'), //'SKEY' => array('NONE', 0, 'otp_verify', 'skey_generate'), //'RPA' => array('HEX', MD5_RESULTLEN, NULL, 'rpa_generate'), ); public function crypt($algorithm) { if( !array_key_exists($algorithm, $this->password_schemes) ) { $this->errormsg[] = "This password scheme isn't supported. Check our Wiki!"; return false; } $scheme = $this->password_schemes[$algorithm]; $func = '__'.$scheme[3]; $this->password = $this->$func($this->plain); //$this->plain = ''; } public function verify($algorithm, $password) { if( !array_key_exists($algorithm, $this->password_schemes) ) { $this->errormsg[] = "This password scheme isn't supported. Check our Wiki!"; return false; } $scheme = $this->password_schemes[$algorithm]; if($scheme[2] == NULL) { $this->errormsg[] = "This password scheme doesn't support verification"; return false; } $func = '__'.$scheme[2]; return $this->$func($this->plain, $password); } private function __crypt_verify($plaintext, $password) { $crypted = crypt($plaintext, $password); return strcmp($crypted, $password) == 0; } private function __crypt_generate($plaintext) { $password = crypt($plaintext); return $password; } private function __md5_generate($plaintext) { return $password; } private function __sha1_generate() { } private function __plain_generate() { } private function __cram_md5_generate($plaintext) { #http://hg.dovecot.org/dovecot-1.2/file/84373d238073/src/lib/hmac-md5.c #http://hg.dovecot.org/dovecot-1.2/file/84373d238073/src/auth/password-scheme.c cram_md5_generate #am i right that the hmac salt is the plaintext password itself? $salt = $plaintext; if(function_exists('hash_hmac')) { //Some providers doesn't offers hash access. return hash_hmac('md5', $plaintext, $salt); } else { return custom_hmac('md5', $plaintext, $salt); } } function custom_hmac($algo, $data, $key, $raw_output = false) { $algo = strtolower($algo); $pack = 'H'.strlen($algo('test')); $size = 64; $opad = str_repeat(chr(0x5C), $size); $ipad = str_repeat(chr(0x36), $size); if (strlen($key) > $size) { $key = str_pad(pack($pack, $algo($key)), $size, chr(0x00)); } else { $key = str_pad($key, $size, chr(0x00)); } for ($i = 0; $i < strlen($key) - 1; $i++) { $opad[$i] = $opad[$i] ^ $key[$i]; $ipad[$i] = $ipad[$i] ^ $key[$i]; } $output = $algo($opad.pack($pack, $algo($ipad.$data))); return ($raw_output) ? pack($pack, $output) : $output; } }postfixadmin-3.0.2/scripts/postfixadmin-cli0000664000175000017500000000235711550325461020060 0ustar daviddavid#!/bin/bash ################################################################################ # # Bake is a shell script for running CakePHP bake script # PHP versions 4 and 5 # # CakePHP(tm) : Rapid Development Framework (http://www.cakephp.org) # Copyright 2005-2007, Cake Software Foundation, Inc. # # Licensed under The MIT License # Redistributions of files must retain the above copyright notice. # # @filesource # @copyright Copyright 2005-2007, Cake Software Foundation, Inc. # @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project # @package cake # @subpackage cake.cake.console # @since CakePHP(tm) v 1.2.0.5012 # @version $Revision$ # @modifiedby $LastChangedBy$ # @lastmodified $Date$ # @license http://www.opensource.org/licenses/mit-license.php The MIT License # ################################################################################ # LIB is expected to be relative to this script (inside the PostfixAdmin sources) # This breaks if you symlink postfixadmin-cli to /usr/bin or alike. Therefore we # have to follow the symlink to get the correct path. self="$0" test -L "$self" && self="`readlink -f \"$self\"`" LIB="${self/%postfixadmin-cli/}" exec php -q "${LIB}postfixadmin-cli.php" "$@" exit; postfixadmin-3.0.2/scripts/shells/0000775000175000017500000000000013046702634016151 5ustar daviddavidpostfixadmin-3.0.2/scripts/shells/mailbox.php0000664000175000017500000000672512717665713020341 0ustar daviddavidargs)) { $this->__interactive(); } if (!empty($this->args[0])) { $address = $this->args[0]; if (isset($this->params['g']) && $this->params['g'] == true ) { $random = true; $password = NULL; } elseif (isset($this->args[1]) && strlen($this->args[1]) > 8) { # TODO use validate_password() $password = $this->args[1]; } else { $this->Dispatch->stderr('Missing or -g. Falling back to interactive mode.'); $this->__interactive(); } $this->__handle($address, $password, $random); } } /** * Interactive */ private function __interactive() { while(true) { $question = "Which address' password do you want to change?"; $address = $this->in($question); if(filter_var($address, FILTER_VALIDATE_EMAIL)) { break; } $this->err("Invalid emailaddress"); } $question2[] = "Do you want to change the password?"; $question2[] = "Are you really sure?"; $sure = $this->in(join("\n", $question2), array('y','n')); if ($sure == 'n' ) { $this->out('You\'re not sure.'); $this->_stop(); } $question = "Do you want to generate a random password?"; $random = $this->in($question, array('y','n')); $random == 'y' ? $random = true : $random = false; $password = NULL; if ($random == false) { $question = "Pleas enter the new password?"; $password = $this->in($question); } $this->__handle($address, $password, $random); } /** * @param string $address email adress * @param string $password optional * @param boolean $random optional - true to generate random pw. */ private function __handle($address, $password = NULL, $random = false) { if ($random == true) { $password = generate_password(); } if ($password != NULL) { $handler = new MailboxHandler(); if (!$handler->init($address)) { $this->error("Change Password",join("\n", $handler->errormsg)); } if ( ! $handler->change_pw($password, NULL, false) ){ $this->error("Change Password",join("\n", $handler->errormsg)); } } $this->out(""); $this->out("Password updated."); $this->hr(); $this->out(sprintf('The Mail address is %20s', $address)); $this->out(sprintf('The new password is %20s',$password)); $this->hr(); return ; } /** * Displays help contents * * @access public */ public function help() { $this->out(""); $this->hr(); $this->out("Usage: postfixadmin-cli mailbox password
[] [-g]"); $this->hr(); $this->out('Commands:'); $this->out("\n\tpassword\n\t\tchanges the password in interactive mode."); $this->out("\n\tpassword
[] [-g]\n\t\tchanges the password to or if -g genereate a new pw for
"); $this->out(""); $this->_stop(); } } postfixadmin-3.0.2/scripts/shells/shell.php0000664000175000017500000001636612717665713020017 0ustar daviddavid * Copyright 2005-2008, Cake Software Foundation, Inc. * 1785 E. Sahara Avenue, Suite 490-204 * Las Vegas, Nevada 89104 * Modified for Postfixadmin by Valkum * * Copyright 2010 * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @filesource * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. * @link http://postfixadmin.sourceforge.net/ Postfixadmin on Sourceforge * @package postfixadmin * @subpackage - * @since - * @version $Revision$ * @modifiedby $LastChangedBy$ * @lastmodified $Date$ * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ class Shell { /** * An instance of the ShellDispatcher object that loaded this script * * @var object * @access public */ var $Dispatch = null; /** * If true, the script will ask for permission to perform actions. * * @var boolean * @access public */ var $interactive = true; /** * Contains command switches parsed from the command line. * * @var array * @access public */ var $params = array(); /** * Contains arguments parsed from the command line. * * @var array * @access public */ var $args = array(); /** * The file name of the shell that was invoked. * * @var string * @access public */ var $shell = null; /** * The class name of the shell that was invoked. * * @var string * @access public */ var $className = null; /** * The command called if public methods are available. * * @var string * @access public */ var $command = null; /** * The name of the shell in camelized. * * @var string * @access public */ var $name = null; /** * Constructs this Shell instance. * */ function __construct(&$dispatch) { $vars = array('params', 'args', 'shell', 'shellCommand'=> 'command'); foreach ($vars as $key => $var) { if (is_string($key)) { $this->{$var} =& $dispatch->{$key}; } else { $this->{$var} =& $dispatch->{$var}; } } $this->className = get_class($this); if ($this->name == null) { $this->name = str_replace(array('shell', 'Shell', 'task', 'Task'), '', $this->className); } $this->Dispatch =& $dispatch; } /** * Initializes the Shell * acts as constructor for subclasses * allows configuration of tasks prior to shell execution * * @access public */ function initialize() { } /** * Starts up the the Shell * allows for checking and configuring prior to command or main execution * can be overriden in subclasses * * @access public */ function startup() { #CHECK! if ( empty($this->params['q'] ) ) { $this->_welcome(); } $CONF = Config::read('all'); } /** * Displays a header for the shell * * @access protected */ function _welcome() { $this->out("\nWelcome to Postfixadmin-CLI v" . $this->Dispatch->version); $this->hr(); } /** * Prompts the user for input, and returns it. * * @param string $prompt Prompt text. * @param mixed $options Array or string of options. * @param string $default Default input value. * @return Either the default value, or the user-provided input. * @access public */ function in($prompt, $options = null, $default = null) { if (!$this->interactive) { return $default; } if ($prompt != '') $this->out(""); $in = $this->Dispatch->getInput($prompt, $options, $default); if ($options && is_string($options)) { if (strpos($options, ',')) { $options = explode(',', $options); } elseif (strpos($options, '/')) { $options = explode('/', $options); } else { $options = array($options); } } if (is_array($options)) { while ($in == '' || ($in && (!in_array(strtolower($in), $options) && !in_array(strtoupper($in), $options)) && !in_array($in, $options))) { $this->err("Invalid input"); # TODO: make translateable $in = $this->Dispatch->getInput($prompt, $options, $default); } } return $in; } /** * Outputs to the stdout filehandle. * * @param string $string String to output. * @param boolean $newline If true, the outputs gets an added newline. * @access public */ function out($string, $newline = true) { if (is_array($string)) { $str = ''; foreach($string as $message) { $str .= $message ."\n"; } $string = $str; } return $this->Dispatch->stdout($string, $newline); } /** * Outputs to the stderr filehandle. * * @param string $string Error text to output. * @access public */ function err($string) { if (is_array($string)) { $str = ''; foreach($string as $message) { $str .= $message ."\n"; } $string = $str; } return $this->Dispatch->stderr($string."\n"); } /** * Outputs a series of minus characters to the standard output, acts as a visual separator. * * @param boolean $newline If true, the outputs gets an added newline. * @access public */ function hr($newline = false) { if ($newline) { $this->out("\n"); } $this->out('---------------------------------------------------------------'); if ($newline) { $this->out("\n"); } } /** * Displays a formatted error message and exits the application * * @param string $title Title of the error message * @param string $msg Error message * @access public */ function error($title, $msg) { $out = "$title\n"; $out .= "$msg\n"; $out .= "\n"; $this->err($out); $this->_stop(1); } /** * Outputs usage text on the standard output. Implement it in subclasses. * * @access public */ function help() { if ($this->command != null) { $this->err("Unknown {$this->name} command '$this->command'.\nFor usage, try 'postfixadmin-cli {$this->shell} help'.\n\n"); } else { $this->Dispatch->help(); } } /** * Stop execution of the current script * * @param $status see http://php.net/exit for values * @return void * @access public */ function _stop($status = 0) { exit($status); } } postfixadmin-3.0.2/vacation.php0000664000175000017500000001500712717673234015517 0ustar daviddavidget_details(); if($details != false) { $tSubject = $details['subject']; $tBody = $details['body']; $tInterval_Time = $details['interval_time']; $tActiveFrom = $details['activeFrom']; $tActiveUntil = $details['activeUntil']; } if($vh->check_vacation()) { flash_info(sprintf($PALANG['pUsersVacation_welcome_text'],htmlentities($tUseremail))); } //set a default, reset fields for coming back selection if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); } if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); } } if ($_SERVER['REQUEST_METHOD'] == "POST") { if (safepost('token') != $_SESSION['PFA_token']) die('Invalid token!'); if(isset($_POST['fCancel'])) { header ("Location: $Return_url"); exit(0); } $tActiveFrom = date ("Y-m-d 00:00:00", strtotime (safepost('fActiveFrom'))); $tActiveUntil = date ("Y-m-d 23:59:59", strtotime (safepost('fActiveUntil'))); $tSubject = safepost('fSubject'); $fSubject = $tSubject; $tBody = safepost('fBody'); $fBody = $tBody; $tInterval_Time = safepost('fInterval_Time'); $fChange = escape_string (safepost('fChange')); $fBack = escape_string (safepost('fBack')); $tUseremail = $fUsername; //set a default, reset fields for coming back selection if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); } if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); } if (isset($choice_of_reply[$tInterval_Time])) { $fInterval_Time = $tInterval_Time; } else { $fInterval_Time = 0; } // if they've set themselves change OR back, delete any record of vacation emails. // the user is going away - set the goto alias and vacation table as necessary. //Set the vacation data for $fUsername if (!empty ($fChange)) { ## check if ActiveUnitl is not back in time, ## because vacation.pl will report SMTP recipient $smtp_recipient which resolves to $email does not have an active vacation (rv: $rv, email: $email)" ## and will not send message if ( ($tActiveUntil >= date ("Y-m-d")) and ($tActiveUntil >= $tActiveFrom) ) { if (!$vh->set_away($fSubject, $fBody, $fInterval_Time, $tActiveFrom, $tActiveUntil)) { $error = 1; } } else { if ( $tActiveUntil < date ("Y-m-d") ) { flash_error($PALANG['pVacation_until_before_today']); } else { flash_error($PALANG['pVacation_until_before_from']); } $error = 1; } } //if change, remove old one, then perhaps set new one if (!empty ($fBack)) { if(!$vh->remove()) { $error = 1; } } } // If NO error then diplay flash message and go back to right url where we came from if($error == 0) { if(!empty ($fBack)) { flash_info(sprintf($PALANG['pVacation_result_removed'],htmlentities($tUseremail))); header ("Location: $Return_url"); exit; } if(!empty($fChange)) { flash_info(sprintf($PALANG['pVacation_result_added'],htmlentities($tUseremail))); header ("Location: $Return_url"); exit; } } else { flash_error(sprintf($PALANG['pVacation_result_error'],htmlentities($fUsername))); } $today = date ("Y-m-d"); if (empty ($tActiveFrom)) $tActiveFrom = $today; if (empty ($tActiveUntil)) $tActiveUntil = $today; if ( ! $details['active']) { # if vacation is disabled, there's no point in displaying the date of the last vacation ;-) # (which also means users would have to scroll in the calendar a lot) # so let's be user-friendly and set today's date (but only if the last vacation is in the past) if ($tActiveFrom < $today) $tActiveFrom = $today; if ($tActiveUntil < $today) $tActiveUntil = $today; } $smarty->assign ('tUseremail', $tUseremail); $smarty->assign ('tSubject', $tSubject); $smarty->assign ('tBody', $tBody); $smarty->assign ('tActiveFrom', date ("d.m.Y", strtotime ($tActiveFrom))); $smarty->assign ('tActiveUntil', date ("d.m.Y", strtotime ($tActiveUntil))); $smarty->assign ('select_options', $choice_of_reply); $smarty->assign ('tInterval_Time', $tInterval_Time); $smarty->assign ('smarty_template', 'vacation'); $smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> postfixadmin-3.0.2/xmlrpc.php0000664000175000017500000001331312301115106015170 0ustar daviddavidgetHttpClient(); * $http_client->setCookieJar(); * * $login_object = $xmlrpc->getProxy('login'); * $success = $login_object->login($email_address, $password); * * if($success) { * echo "We're logged in"; * } * else { * die("Auth failed"); * } * $user = $xmlrpc->getProxy('user'); * $alias = $xmlrpc->getProxy('alias'); * $vacation = $xmlrpc->getProxy('vacation'); * * if($vacation->checkVacation()) { * echo "Vacation turned on for user"; * } * * Note, the requirement that your XmlRpc client provides cookies with each request. * If it does not do this, then your authentication details will not persist across requests, and * this XMLRPC interface will not work. */ require_once(dirname(__FILE__) . '/common.php'); if($CONF['xmlrpc_enabled'] == false) { die("xmlrpc support disabled"); } require_once('Zend/XmlRpc/Server.php'); $server = new Zend_XmlRpc_Server(); /** * @param string $username * @param string $password * @return boolean true on success, else false. */ function login($username, $password) { $h = new MailboxHandler(); if($h->login($username, $password)) { session_regenerate_id(); $_SESSION['authenticated'] = true; $_SESSION['sessid'] = array(); $_SESSION['sessid']['username'] = $username; return true; } return false; } if(!isset($_SESSION['authenticated'])) { $server->addFunction('login', 'login'); } else { $server->setClass('UserProxy', 'user'); $server->setClass('VacationProxy', 'vacation'); $server->setClass('AliasProxy', 'alias'); } echo $server->handle(); class UserProxy { /** * @param string $old_password * @param string $new_password * @return boolean true on success */ public function changePassword($old_password, $new_password) { $uh = new MailboxHandler(); if (!$uh->init($_SESSION['sessid']['username'])) return false; return $uh->change_pw($new_password, $old_password); } /** * @param string $username * @param string $password * @return boolean true if successful. */ public function login($username, $password) { $uh = new MailboxHandler(); # $_SESSION['sessid']['username']); return $uh->login($username, $password); } } class VacationProxy { /** * @return boolean true if the vacation is removed successfully. Else false. */ public function remove() { $vh = new VacationHandler($_SESSION['sessid']['username']); return $vh->remove(); } /** * @return boolean true if vacation stuff is enabled in this instance of postfixadmin * and the user has the ability to make changes to it. */ public function isVacationSupported() { $vh = new VacationHandler($_SESSION['sessid']['username']); return $vh->vacation_supported(); } /** * @return boolean true if the user has an active vacation record etc. */ public function checkVacation() { $vh = new VacationHandler($_SESSION['sessid']['username']); return $vh->check_vacation(); } /** * @return struct|boolean - either array of vacation details or boolean false if the user has none. */ public function getDetails() { $vh = new VacationHandler($_SESSION['sessid']['username']); return $vh->get_details(); } /** * @param string $subject * @param string $body * @param string $interval_time * @param string $activeFrom * @param string $activeUntil * @return boolean true on success. * Whatiis @replyType?? for */ public function setAway($subject, $body, $interval_time = 0, $activeFrom = '2000-01-01', $activeUntil = '2099-12-31') { $vh = new VacationHandler($_SESSION['sessid']['username']); return $vh->set_away($subject, $body, $interval_time, $activeFrom, $activeUntil); } } class AliasProxy { /** * @return array - array of aliases this user has. Array may be empty. */ public function get() { $ah = new AliasHandler(); $ah->init($_SESSION['sessid']['username']); /* I see no point in returning special addresses to the user. */ $ah->view(); $result = $ah->result; return $result['goto']; } /** * @param array of email addresses (Strings) * @param string flag to set ('forward_and_store' or 'remote_only') * @return boolean true */ public function update($addresses, $flags) { $ah = new AliasHandler(); $ah->init($_SESSION['sessid']['username']); $values['goto'] = $addresses; if ($flags == 'forward_and_store') { $values['goto_mailbox'] = 1; } elseif ($flags == 'remote_only') { $values['goto_mailbox'] = 0; } else { return false; # invalid parameter } if (!$ah->set($values)) { //error_log('ah->set failed' . print_r($values, true)); return false; } $store = $ah->store(); return $store; } /** * @return boolean true if the user has 'store_and_forward' set. * (i.e. their email address is also in the alias table). IF it returns false, then it's 'remote_only' */ public function hasStoreAndForward() { $ah = new AliasHandler(); $ah->init($_SESSION['sessid']['username']); $ah->view(); $result = $ah->result; return $result['goto_mailbox'] == 1; } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/login.php0000664000175000017500000000506212720407576015021 0ustar daviddavidlogin($fUsername, $fPassword) ) { session_regenerate_id(); $_SESSION['sessid'] = array(); $_SESSION['sessid']['roles'] = array(); $_SESSION['sessid']['roles'][] = 'admin'; $_SESSION['sessid']['username'] = $fUsername; $_SESSION['PFA_token'] = md5(uniqid(rand(), true)); # they've logged in, so see if they are a domain admin, as well. if (!$h->init($fUsername)) { flash_error($PALANG['pLogin_failed']); } if (!$h->view()) { flash_error($PALANG['pLogin_failed']); } $adminproperties = $h->result(); if ($adminproperties['superadmin'] == 1) { $_SESSION['sessid']['roles'][] = 'global-admin'; } header("Location: main.php"); exit(0); } else { # $h->login failed error_log("PostfixAdmin login failed (username: $fUsername)"); flash_error($PALANG['pLogin_failed']); } } $smarty->assign ('language_selector', language_selector(), false); $smarty->assign ('smarty_template', 'login'); $smarty->assign ('logintype', 'admin'); $smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> postfixadmin-3.0.2/model/0000775000175000017500000000000013046702635014271 5ustar daviddavidpostfixadmin-3.0.2/model/AdminpasswordHandler.php0000664000175000017500000000751012502113657021112 0ustar daviddavidstruct, $this->db_table and $this->id_field protected function initStruct() { # TODO: shorter PALANG labels ;-) $this->struct=array( # field name allow display in... type $PALANG label $PALANG description default / options / ... # editing? form list 'username' => pacol( 0, 1, 1, 'text', 'admin' , '' ), 'oldpass' => pacol( 1, 1, 0, 'pass', 'pPassword_password_current' , '', '', '', /*not_in_db*/ 1 ), 'password' => pacol( 1, 1, 0, 'pass', 'pPassword_password' , '' ), 'password2' => pacol( 1, 1, 0, 'pass', 'pPassword_password2' , '' , '', '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ 'password as password2' ), ); } public function init($id) { # hardcode to logged in admin if ($this->admin_username == '') die("No admin logged in"); $this->id = $this->admin_username; $this->values['username'] = $this->id; $this->struct['username']['default'] = $this->id; # hardcode to edit mode $this->new = 0; return parent::init($this->id); } public function initMsg() { $this->msg['error_already_exists'] = 'admin_already_exists'; # probably unused $this->msg['error_does_not_exist'] = 'admin_does_not_exist'; # probably unused $this->msg['confirm_delete'] = 'confirm_delete_admin'; # probably unused $this->msg['logname'] = 'edit_password'; $this->msg['store_error'] = 'pPassword_result_error'; $this->msg['successmessage'] = 'pPassword_result_success'; } public function webformConfig() { return array( # $PALANG labels 'formtitle_create' => 'pPassword_welcome', 'formtitle_edit' => 'pPassword_welcome', 'create_button' => 'change_password', # various settings 'required_role' => 'admin', 'listview' => 'main.php', 'early_init' => 1, 'hardcoded_edit' => true, ); } /** * check if old password is correct */ protected function _validate_oldpass($field, $val) { if ( $this->login($this->id, $val) ) { return true; } $this->errormsg[$field] = Config::lang('pPassword_password_current_text_error'); return false; } /** * skip default validation (check if password is good enough) for old password */ protected function _inp_pass($field, $val) { if ($field == 'oldpass') return true; return parent::_inp_pass($field, $val); } /** * compare password / password2 field * error message will be displayed at the password2 field */ protected function _validate_password2($field, $val) { return $this->compare_password_fields('password', 'password2'); } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/MailboxHandler.php0000664000175000017500000006727712510606143017706 0ustar daviddavidstruct, $this->db_table and $this->id_field protected function initStruct() { $this->struct=array( # field name allow display in... type $PALANG label $PALANG description default / options / ... # editing? form list 'username' => pacol( $this->new, 1, 1, 'mail', 'pEdit_mailbox_username' , '' , '' ), 'local_part' => pacol( $this->new, 0, 0, 'text', 'pEdit_mailbox_username' , '' , '' ), 'domain' => pacol( $this->new, 0, 1, 'enum', '' , '' , '', /*options*/ $this->allowed_domains ), # TODO: maildir: display in list is needed to include maildir in SQL result (for post_edit hook) # TODO: (not a perfect solution, but works for now - maybe we need a separate "include in SELECT query" field?) 'maildir' => pacol( $this->new, 0, 1, 'text', '' , '' , '' ), 'password' => pacol( 1, 1, 0, 'pass', 'password' , 'pCreate_mailbox_password_text' , '' ), 'password2' => pacol( 1, 1, 0, 'pass', 'password_again' , '' , '', /*options*/ '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ 'password as password2' ), 'name' => pacol( 1, 1, 1, 'text', 'name' , 'pCreate_mailbox_name_text' , '' ), 'quota' => pacol( 1, 1, 1, 'int' , 'pEdit_mailbox_quota' , 'pEdit_mailbox_quota_text' , '' ), # in MB # read_from_db_postprocess() also sets 'quotabytes' for use in init() # TODO: read used quota from quota/quota2 table 'active' => pacol( 1, 1, 1, 'bool', 'active' , '' , 1 ), 'welcome_mail' => pacol( $this->new, $this->new, 0, 'bool', 'pCreate_mailbox_mail' , '' , 1, /*options*/ '', /*not_in_db*/ 1 ), 'created' => pacol( 0, 0, 1, 'ts', 'created' , '' ), 'modified' => pacol( 0, 0, 1, 'ts', 'last_modified' , '' ), # TODO: add virtual 'notified' column and allow to display who received a vacation response? ); # update allowed quota if (count($this->struct['domain']['options']) > 0) $this->prefill('domain', $this->struct['domain']['options'][0]); } public function init($id) { if (!parent::init($id)) { return false; } if ($this->new) { $currentquota = 0; } else { $currentquota = $this->result['quotabytes']; # parent::init called ->view() } $this->updateMaxquota($this->domain, $currentquota); return true; # still here? good. } protected function domain_from_id() { list(/*NULL*/,$domain) = explode('@', $this->id); return $domain; } /** * show max allowed quota in quota field description * @param string - domain * @param int - current quota */ protected function updateMaxquota ($domain, $currentquota) { if ($domain == '') return false; $maxquota = $this->allowed_quota($domain, $currentquota); if ($maxquota == 0) { # TODO: show 'unlimited' # } elseif ($maxquota < 0) { # TODO: show 'disabled' - at the moment, just shows '-1' } else { $this->struct['quota']['desc'] = Config::lang_f('mb_max', $maxquota); } } protected function initMsg() { $this->msg['error_already_exists'] = 'email_address_already_exists'; $this->msg['error_does_not_exist'] = 'pCreate_mailbox_username_text_error1'; $this->msg['confirm_delete'] = 'confirm_delete_mailbox'; if ($this->new) { $this->msg['logname'] = 'create_mailbox'; $this->msg['store_error'] = 'pCreate_mailbox_result_error'; $this->msg['successmessage'] = 'pCreate_mailbox_result_success'; } else { $this->msg['logname'] = 'edit_mailbox'; $this->msg['store_error'] = 'mailbox_update_failed'; $this->msg['successmessage'] = 'mailbox_updated'; } } public function webformConfig() { if ($this->new) { # the webform will display a local_part field + domain dropdown on $new $this->struct['username']['display_in_form'] = 0; $this->struct['local_part']['display_in_form'] = 1; $this->struct['domain']['display_in_form'] = 1; } return array( # $PALANG labels 'formtitle_create' => 'pCreate_mailbox_welcome', 'formtitle_edit' => 'pEdit_mailbox_welcome', 'create_button' => 'add_mailbox', # various settings 'required_role' => 'admin', 'listview' => 'list-virtual.php', 'early_init' => 0, 'prefill' => array('domain'), ); } protected function validate_new_id() { if ($this->id == '') { $this->errormsg[$this->id_field] = Config::lang('pCreate_mailbox_username_text_error1'); return false; } $email_check = check_email($this->id); if ( $email_check != '' ) { $this->errormsg[$this->id_field] = $email_check; return false; } list(/*NULL*/,$domain) = explode ('@', $this->id); if(!$this->create_allowed($domain)) { $this->errormsg[] = Config::lang('pCreate_mailbox_username_text_error3'); return false; } # check if an alias with this name already exists - if yes, don't allow to create the mailbox $handler = new AliasHandler(1); $handler->calledBy('MailboxHandler'); # make sure mailbox creation still works if the alias limit for the domain is hit if (!$handler->init($this->id)) { # TODO: keep original error message from AliasHandler $this->errormsg[] = Config::lang('email_address_already_exists'); return false; } return true; # still here? good! } /** * check number of existing mailboxes for this domain - is one more allowed? */ private function create_allowed($domain) { $limit = get_domain_properties ($domain); if ($limit['mailboxes'] == 0) return true; # unlimited if ($limit['mailboxes'] < 0) return false; # disabled if ($limit['mailbox_count'] >= $limit['mailboxes']) return false; return true; } /** * merge local_part and domain to address * called by edit.php (if id_field is editable and hidden in editform) _before_ ->init */ public function mergeId($values) { if ($this->struct['local_part']['display_in_form'] == 1 && $this->struct['domain']['display_in_form']) { # webform mode - combine to 'address' field return $values['local_part'] . '@' . $values['domain']; } else { return $values[$this->id_field]; } } protected function read_from_db_postprocess($db_result) { foreach ($db_result as $key => $row) { if (isset($row['quota'])) { # quota could be disabled in $struct $db_result[$key]['quotabytes'] = $row['quota']; $db_result[$key]['quota'] = divide_quota($row['quota']); # convert quota to MB } else { $db_result[$key]['quotabytes'] = -1; $db_result[$key]['quota'] = -1; } } return $db_result; } protected function beforestore() { if ( isset($this->values['quota']) && $this->values['quota'] != -1 ) { $this->values['quota'] = $this->values['quota'] * Config::read('quota_multiplier'); # convert quota from MB to bytes } $ah = new AliasHandler($this->new, $this->admin_username); $ah->calledBy('MailboxHandler'); if ( !$ah->init($this->id) ) { $arraykeys = array_keys($ah->errormsg); $this->errormsg[] = $ah->errormsg[$arraykeys[0]]; # TODO: implement this as PFAHandler->firstErrormsg() return false; } $alias_data = array(); if (isset($this->values['active'])) { # might not be set in edit mode $alias_data['active'] = $this->values['active']; } if ($this->new) { $alias_data['goto'] = array($this->id); # 'goto_mailbox' = 1; # would be technically correct, but setting 'goto' is easier } if (!$ah->set($alias_data)) { $this->errormsg[] = $ah->errormsg[0]; return false; } if (!$ah->store()) { $this->errormsg[] = $ah->errormsg[0]; return false; } return true; # still here? good! } protected function storemore() { if ($this->new) { if ( !$this->mailbox_post_script() ) { # return false; # TODO: should this be fatal? } if ($this->values['welcome_mail'] == true) { if ( !$this->send_welcome_mail() ) { # return false; # TODO: should this be fatal? } } if ( !$this->create_mailbox_subfolders() ) { $this->infomsg[] = Config::lang_f('pCreate_mailbox_result_succes_nosubfolders', $this->id); } } else { # edit mode # alias active status is updated in before_store() # postedit hook # TODO: implement a poststore() function? - would make handling of old and new values much easier... $old_mh = new MailboxHandler(); if (!$old_mh->init($this->id)) { $this->errormsg[] = $old_mh->errormsg[0]; } elseif (!$old_mh->view()) { $this->errormsg[] = $old_mh->errormsg[0]; } else { $oldvalues = $old_mh->result(); $this->values['maildir'] = $oldvalues['maildir']; if (isset($this->values['quota'])) { $quota = $this->values['quota']; } else { $quota = $oldvalues['quota']; } if ( !$this->mailbox_post_script() ) { # TODO: should this be fatal? } } } return true; # even if a hook failed, mark the overall operation as OK } public function delete() { if ( ! $this->view() ) { $this->errormsg[] = Config::Lang('pFetchmail_invalid_mailbox'); # TODO: can users hit this message at all? init() should already fail... return false; } # the correct way would be to delete the alias and fetchmail entries with *Handler before # deleting the mailbox, but it's easier and a bit faster to do it on the database level. # cleaning up all tables doesn't hurt, even if vacation or displaying the quota is disabled db_delete('fetchmail', 'mailbox', $this->id); db_delete('vacation', 'email', $this->id); db_delete('vacation_notification', 'on_vacation', $this->id); # should be caught by cascade, if PgSQL db_delete('quota', 'username', $this->id); db_delete('quota2', 'username', $this->id); db_delete('alias', 'address', $this->id); db_delete($this->db_table, $this->id_field, $this->id); # finally delete the mailbox if ( !$this->mailbox_postdeletion() ) { $this->error_msg[] = Config::Lang('mailbox_postdel_failed'); } list(/*NULL*/,$domain) = explode('@', $this->id); db_log ($domain, 'delete_mailbox', $this->id); $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->id); return true; } protected function _prefill_domain($field, $val) { if (in_array($val, $this->struct[$field]['options'])) { $this->struct[$field]['default'] = $val; $this->updateMaxquota($val, 0); } } /** * check if quota is allowed */ protected function _validate_quota($field, $val) { if ( !$this->check_quota ($val) ) { $this->errormsg[$field] = Config::lang('pEdit_mailbox_quota_text_error'); return false; } return true; } /** * - compare password / password2 field (error message will be displayed at password2 field) * - autogenerate password if enabled in config and $new * - display password on $new if enabled in config or autogenerated */ protected function _validate_password($field, $val) { if (!$this->_validate_password2($field, $val)) return false; if ($this->new && Config::read('generate_password') == 'YES' && $val == '') { # auto-generate new password unset ($this->errormsg[$field]); # remove "password too short" error message $val = generate_password(); $this->values[$field] = $val; # we are doing this "behind the back" of set() $this->infomsg[] = Config::Lang('password') . ": $val"; return false; # to avoid that set() overwrites $this->values[$field] } elseif ($this->new && Config::read('show_password') == 'YES') { $this->infomsg[] = Config::Lang('password') . ": $val"; } return true; # still here? good. } /** * compare password / password2 field * error message will be displayed at the password2 field */ protected function _validate_password2($field, $val) { return $this->compare_password_fields('password', 'password2'); } /** * on $this->new, set localpart based on address */ protected function _missing_local_part ($field) { list($local_part,$domain) = explode ('@', $this->id); $this->RAWvalues['local_part'] = $local_part; } /** * on $this->new, set domain based on address */ protected function _missing_domain ($field) { list($local_part,$domain) = explode ('@', $this->id); $this->RAWvalues['domain'] = $domain; } # TODO: read used quota from quota/quota2 table, then enable _formatted_quota() # public function _formatted_quota ($item) { return $item['used_quota'] . ' / ' . $item['quota'] ; } /** * calculate maildir path for the mailbox */ protected function _missing_maildir($field) { list($local_part,$domain) = explode('@', $this->id); $maildir_name_hook = Config::read('maildir_name_hook'); if($maildir_name_hook != 'NO' && function_exists($maildir_name_hook) ) { $maildir = $maildir_name_hook ($domain, $this->id); } elseif (Config::bool('domain_path')) { if (Config::bool('domain_in_mailbox')) { $maildir = $domain . "/" . $this->id . "/"; } else { $maildir = $domain . "/" . $local_part . "/"; } } else { # If $CONF['domain_path'] is set to NO, $CONF['domain_in_mailbox] is forced to YES. # Otherwise user@example.com and user@foo.bar would be mixed up in the same maildir "user/". $maildir = $this->id . "/"; } $this->RAWvalues['maildir'] = $maildir; } private function send_welcome_mail() { $fTo = $this->id; $fFrom = smtp_get_admin_email(); if(empty($fFrom) || $fFrom == 'CLI') $fFrom = $this->id; $fSubject = Config::lang('pSendmail_subject_text'); $fBody = Config::read('welcome_text'); if (!smtp_mail ($fTo, $fFrom, $fSubject, $fBody)) { $this->errormsg[] = Config::lang_f('pSendmail_result_error', $this->id); return false; } return true; } /** * Check if the user is creating a mailbox within the quota limits of the domain * * @param Integer $quota - quota wanted for the mailbox * @return Boolean - true if requested quota is OK, otherwise false */ # TODO: merge with allowed_quota? protected function check_quota ($quota) { $rval = false; if ( !Config::bool('quota') ) { return true; # enforcing quotas is disabled - just allow it } list(/*NULL*/,$domain) = explode('@', $this->id); $limit = get_domain_properties ($domain); if ($limit['maxquota'] == 0) { $rval = true; # maxquota unlimited -> OK, but domain level quota could still be hit } if (($limit['maxquota'] < 0) and ($quota < 0)) { return true; # maxquota and $quota are both disabled -> OK, no need for more checks } if (($limit['maxquota'] > 0) and ($quota == 0)) { return false; # mailbox with unlimited quota on a domain with maxquota restriction -> not allowed, no more checks needed } if ($limit['maxquota'] != 0 && $quota > $limit['maxquota']) { return false; # mailbox bigger than maxquota restriction (and maxquota != unlimited) -> not allowed, no more checks needed } else { $rval = true; # mailbox size looks OK, but domain level quota could still be hit } if (!$rval) { return false; # over quota - no need to check domain_quota } # TODO: detailed error message ("domain quota exceeded", "mailbox quota too big" etc.) via flash_error? Or "available quota: xxx MB"? if ( !Config::bool('domain_quota') ) { return true; # enforcing domain_quota is disabled - just allow it } elseif ($limit['quota'] <= 0) { # TODO: CHECK - 0 (unlimited) is fine, not sure about <= -1 (disabled)... $rval = true; } elseif ($quota == 0) { # trying to create an unlimited mailbox, but domain quota is set return false; } else { $table_mailbox = table_by_key('mailbox'); $query = "SELECT SUM(quota) FROM $table_mailbox WHERE domain = '" . escape_string($domain) . "'"; $query .= " AND username != '" . escape_string($this->id) . "'"; $result = db_query ($query); $row = db_row ($result['result']); $cur_quota_total = divide_quota($row[0]); # convert to MB if ( ($quota + $cur_quota_total) > $limit['quota'] ) { $rval = false; } else { $rval = true; } } return $rval; } /** * Get allowed maximum quota for a mailbox * * @param String $domain * @param Integer $current_user_quota (in bytes) * @return Integer allowed maximum quota (in MB) */ protected function allowed_quota($domain, $current_user_quota) { if ( !Config::bool('quota') ) { return 0; # quota disabled means no limits - no need for more checks } $domain_properties = get_domain_properties($domain); $tMaxquota = $domain_properties['maxquota']; if (Config::bool('domain_quota') && $domain_properties['quota']) { $dquota = $domain_properties['quota'] - $domain_properties['total_quota'] + divide_quota($current_user_quota); if ($dquota < $tMaxquota) { $tMaxquota = $dquota; } if ($tMaxquota == 0) { $tMaxquota = $dquota; } } return $tMaxquota; } /** * Called after a mailbox has been created or edited in the DBMS. * * @return Boolean success/failure status */ protected function mailbox_post_script() { if ($this->new) { $cmd = Config::read('mailbox_postcreation_script'); $warnmsg = Config::Lang('mailbox_postcreate_failed'); } else { $cmd = Config::read('mailbox_postedit_script'); $warnmsg = Config::Lang('mailbox_postedit_failed'); } if ( empty($cmd) ) return TRUE; # nothing to do list(/*NULL*/,$domain) = explode('@', $this->id); $quota = $this->values['quota']; if ( empty($this->id) || empty($domain) || empty($this->values['maildir']) ) { trigger_error('In '.__FUNCTION__.': empty username, domain and/or maildir parameter',E_USER_ERROR); return FALSE; } $cmdarg1=escapeshellarg($this->id); $cmdarg2=escapeshellarg($domain); $cmdarg3=escapeshellarg($this->values['maildir']); if ($quota <= 0) $quota = 0; # TODO: check if this is correct behaviour $cmdarg4=escapeshellarg($quota); $command= "$cmd $cmdarg1 $cmdarg2 $cmdarg3 $cmdarg4"; $retval=0; $output=array(); $firstline=''; $firstline=exec($command,$output,$retval); if (0!=$retval) { error_log("Running $command yielded return value=$retval, first line of output=$firstline"); $this->errormsg[] = $warnmsg; return FALSE; } return TRUE; } /** * Called after a mailbox has been deleted * * @return boolean true on success, false on failure * also adds a detailed error message to $this->errormsg[] */ protected function mailbox_postdeletion() { $cmd = Config::read('mailbox_postdeletion_script'); if ( empty($cmd) ) { return true; } list(/*NULL*/,$domain) = explode('@', $this->id); if (empty($this->id) || empty($domain)) { $this->errormsg[] = 'Empty username and/or domain parameter in mailbox_postdeletion'; return false; } $cmdarg1=escapeshellarg($this->id); $cmdarg2=escapeshellarg($domain); $command = "$cmd $cmdarg1 $cmdarg2"; $retval=0; $output=array(); $firstline=''; $firstline=exec($command,$output,$retval); if (0!=$retval) { error_log("Running $command yielded return value=$retval, first line of output=$firstline"); $this->errormsg[] = 'Problems running mailbox postdeletion script!'; return FALSE; } return TRUE; } /** * Called by storemore() after a mailbox has been created. * Immediately returns, unless configuration indicates * that one or more sub-folders should be created. * * Triggers E_USER_ERROR if configuration error is detected. * * If IMAP login fails, the problem is logged to the system log * (such as /var/log/httpd/error_log), and the function returns * FALSE. * * Doesn't clean up, if only some of the folders could be * created. * * @return Boolean TRUE if everything succeeds, FALSE on all errors */ protected function create_mailbox_subfolders() { $create_mailbox_subdirs = Config::read('create_mailbox_subdirs'); if ( empty($create_mailbox_subdirs) ) return TRUE; if ( !is_array($create_mailbox_subdirs) ) { trigger_error('create_mailbox_subdirs must be an array',E_USER_ERROR); return FALSE; } $s_host = Config::read('create_mailbox_subdirs_host'); if ( empty($s_host) ) { trigger_error('An IMAP/POP server host ($CONF["create_mailbox_subdirs_host"]) must be configured, if sub-folders are to be created',E_USER_ERROR); return FALSE; } $s_options=''; $create_mailbox_subdirs_hostoptions = Config::read('create_mailbox_subdirs_hostoptions'); if ( !empty($create_mailbox_subdirs_hostoptions )) { if ( !is_array($create_mailbox_subdirs_hostoptions) ) { trigger_error('The $CONF["create_mailbox_subdirs_hostoptions"] parameter must be an array',E_USER_ERROR); return FALSE; } foreach ($create_mailbox_subdirs_hostoptions as $o) { $s_options.='/'.$o; } } $s_port=''; $create_mailbox_subdirs_hostport = Config::read('create_mailbox_subdirs_hostport'); if ( !empty($create_mailbox_subdirs_hostport) ) { $s_port = $create_mailbox_subdirs_hostport; if (intval($s_port)!=$s_port) { trigger_error('The $CONF["create_mailbox_subdirs_hostport"] parameter must be an integer',E_USER_ERROR); return FALSE; } $s_port=':'.$s_port; } $s='{'.$s_host.$s_port.$s_options.'}'; sleep(1); # give the mail triggering the mailbox creation a chance to do its job $i=@imap_open($s, $this->id, $this->values['password']); if (FALSE==$i) { error_log('Could not log into IMAP/POP server: ' . $this->id . ': ' . imap_last_error()); return FALSE; } $s_prefix = Config::read('create_mailbox_subdirs_prefix'); foreach($create_mailbox_subdirs as $f) { $f='{'.$s_host.'}'.$s_prefix.$f; $res=imap_createmailbox($i,$f); if (!$res) { error_log('Could not create IMAP folder $f: ' . $this->id . ': ' . imap_last_error()); @imap_close($i); return FALSE; } @imap_subscribe($i,$f); } @imap_close($i); return TRUE; } /******************************************************************************************************************** old functions - we'll see what happens to them (at least they should use the *Handler functions instead of doing SQL) /********************************************************************************************************************/ /** * @return boolean true on success; false on failure * @param string $old_password * @param string $new_passwords * @param bool $match = true * * All passwords need to be plain text; they'll be hashed appropriately * as per the configuration in config.inc.php */ public function change_pw($new_password, $old_password, $match = true) { list(/*NULL*/,$domain) = explode('@', $this->id); if ($match == true) { if (!$this->login($this->id, $old_password)) { db_log ($domain, 'edit_password', "MATCH FAILURE: " . $this->id); $this->errormsg[] = Config::Lang('pPassword_password_current_text_error'); return false; } } $set = array( 'password' => pacrypt($new_password) , ); $result = db_update('mailbox', 'username', $this->id, $set ); if ($result != 1) { db_log ($domain, 'edit_password', "FAILURE: " . $this->id); $this->errormsg[] = Config::lang('pEdit_mailbox_result_error'); return false; } db_log ($domain, 'edit_password', $this->id); return true; } #TODO: more self explaining language strings! } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/CliDelete.php0000664000175000017500000000356712425220363016640 0ustar daviddavidargs)) { $this->__interactive(); } if (!empty($this->args[0])) { $this->__handle($this->args[0]); } } /** * Interactive mode */ protected function __interactive() { $module = preg_replace('/Handler$/', '', $this->handler_to_use); $module = strtolower($module); $question = "Which $module do you want to delete?"; $address = $this->in($question); $question = "Do you really want to delete '$address'?"; $create = $this->in($question, array('y','n')); if ($create == 'y') $this->__handle($address); } /** * actually delete something * * @param string address to delete */ protected function __handle($address) { $handler = new $this->handler_to_use($this->new); if (!$handler->init($address)) { $this->err($handler->errormsg); return; } if (!$handler->delete()) { $this->err($handler->errormsg); } else { $this->out($handler->infomsg); } } /** * Display help contents * * @access public */ public function help() { $module = preg_replace('/Handler$/', '', $this->handler_to_use); $module = strtolower($module); $this->out( "Usage: postfixadmin-cli $module delete Deletes $module in interactive mode. - or - postfixadmin-cli $module delete
Deletes $module
in non-interactive mode. "); $this->_stop(); } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/FetchmailHandler.php0000664000175000017500000002067112773552457020215 0ustar daviddavidstruct=array( # field name allow display in... type $PALANG label $PALANG description default / options / ... # editing? form list 'id' => pacol( 0, 0, 1, 'num' , '' , '' , '', array(), 0, 1), 'domain' => pacol( 0, 0, 1, 'text', '' , '' ), 'mailbox' => pacol( 1, 1, 1, 'enum', 'pFetchmail_field_mailbox' , 'pFetchmail_desc_mailbox' ), # mailbox list 'src_server' => pacol( 1, 1, 1, 'text', 'pFetchmail_field_src_server' , 'pFetchmail_desc_src_server' ), 'src_auth' => pacol( 1, 1, 1, 'enum', 'pFetchmail_field_src_auth' , 'pFetchmail_desc_src_auth' , '', $src_auth_options), 'src_user' => pacol( 1, 1, 1, 'text', 'pFetchmail_field_src_user' , 'pFetchmail_desc_src_user' ), 'src_password' => pacol( 1, 1, 0, 'b64p', 'pFetchmail_field_src_password' , 'pFetchmail_desc_src_password' ), 'src_folder' => pacol( 1, 1, 1, 'text', 'pFetchmail_field_src_folder' , 'pFetchmail_desc_src_folder' ), 'poll_time' => pacol( 1, 1, 1, 'num' , 'pFetchmail_field_poll_time' , 'pFetchmail_desc_poll_time' , 10 ), 'fetchall' => pacol( 1, 1, 1, 'bool', 'pFetchmail_field_fetchall' , 'pFetchmail_desc_fetchall' ), 'keep' => pacol( 1, 1, 1, 'bool', 'pFetchmail_field_keep' , 'pFetchmail_desc_keep' ), 'protocol' => pacol( 1, 1, 1, 'enum', 'pFetchmail_field_protocol' , 'pFetchmail_desc_protocol' , '', $src_protocol_options), 'usessl' => pacol( 1, 1, 1, 'bool', 'pFetchmail_field_usessl' , 'pFetchmail_desc_usessl' ), 'sslcertck' => pacol( 1, 1, 1, 'bool', 'pFetchmail_field_sslcertck' , '' ), 'sslcertpath' => pacol( $extra, $extra, $extra, 'text', 'pFetchmail_field_sslcertpath' , '' ), 'sslfingerprint'=> pacol( $extra, $extra, $extra, 'text', 'pFetchmail_field_sslfingerprint','' ), 'extra_options' => pacol( $extra, $extra, $extra, 'text', 'pFetchmail_field_extra_options', 'pFetchmail_desc_extra_options' ), 'mda' => pacol( $extra, $extra, $extra, 'text', 'pFetchmail_field_mda' , 'pFetchmail_desc_mda' ), 'date' => pacol( 0, 0, 1, 'text', 'pFetchmail_field_date' , 'pFetchmail_desc_date' , '2000-01-01' ), 'returned_text' => pacol( 0, 0, 1, 'text', 'pFetchmail_field_returned_text', 'pFetchmail_desc_returned_text' ), 'active' => pacol( 1, 1, 1, 'bool', 'active' , '' , 1 ), 'created' => pacol( 0, 0, 0, 'ts', 'created' , '' ), 'modified' => pacol( 0, 0, 1, 'ts', 'last_modified' , '' ), ); # get list of mailboxes (for currently logged in user) $handler = new MailboxHandler(0, $this->admin_username); $handler->getList('1=1'); $this->struct['mailbox']['options'] = array_keys($handler->result); } protected function initMsg() { $this->msg['error_already_exists'] = 'fetchmail_already_exists'; $this->msg['error_does_not_exist'] = 'fetchmail_does_not_exist'; $this->msg['confirm_delete'] = 'confirm_delete_fetchmail'; if ($this->new) { $this->msg['logname'] = 'create_fetchmail'; $this->msg['store_error'] = 'pFetchmail_database_save_error'; $this->msg['successmessage'] = 'pFetchmail_database_save_success'; } else { $this->msg['logname'] = 'edit_fetchmail'; $this->msg['store_error'] = 'pFetchmail_database_save_error'; $this->msg['successmessage'] = 'pFetchmail_database_save_success'; } } public function webformConfig() { return array( # $PALANG labels 'formtitle_create' => 'pMenu_fetchmail', 'formtitle_edit' => 'pMenu_fetchmail', 'create_button' => 'pFetchmail_new_entry', # various settings 'required_role' => 'admin', 'listview' => 'list.php?table=fetchmail', 'early_init' => 0, 'prefill' => array('mailbox'), ); } protected function domain_from_id() { # do nothing, setmore() does the work } protected function setmore($values) { # set domain based on the target mailbox if ($this->new || isset($values['mailbox']) ) { list(/*NULL*/,$domain) = explode('@', $values['mailbox']); $this->values['domain'] = $domain; $this->domain = $domain; } } protected function validate_new_id() { # auto_increment - any non-empty ID is an error if ($this->id != '') { $this->errormsg[$this->id_field] = 'auto_increment value, you must pass an empty string!'; return false; } return true; } /** * @return true on success false on failure */ public function delete() { if ( ! $this->view() ) { $this->errormsg[] = Config::lang($this->msg['error_does_not_exist']); return false; } db_delete($this->db_table, $this->id_field, $this->id); db_log ($this->id, 'delete_fetchmail', $this->result['id']); $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->result['src_user'] . ' -> ' . $this->result['mailbox']); return true; } /* * validate src_server - must be non-empty and survive check_domain() */ protected function _validate_src_server($field, $val) { if ($val == '') { $msg = Config::Lang('pFetchmail_server_missing'); } else { $msg = check_domain($val); } if ($msg == '') { return true; } else { $this->errormsg[$field] = $msg; return false; } } /* * validate src_user and src_password - must be non-empty * (we can't assume anything about valid usernames and passwords on remote * servers, so the validation can't be more strict) */ protected function _validate_src_user($field, $val) { if ($val == '') { $this->errormsg[$field] = Config::lang('pFetchmail_user_missing'); return false; } return true; } protected function _validate_src_password($field, $val) { if ($val == '') { $this->errormsg[$field] = Config::lang('pFetchmail_password_missing'); return false; } return true; } /* * validate poll interval - must be numeri and > 0 */ protected function _validate_poll_time($field, $val) { # must be > 0 if ($val < 1) { $this->errormsg[$field] = Config::Lang_f('must_be_numeric_bigger_than_null', $field); return false; } return true; } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/CliScheme.php0000664000175000017500000000627412425220613016636 0ustar daviddavidhandler_to_use); $module = strtolower($module); $handler = new $this->handler_to_use($this->new); $struct = $handler->getStruct(); foreach (array_keys($struct) as $field) { if ($field == 'created') { $struct[$field]['db_code'] = '{DATE}'; } elseif ($field == 'modified') { $struct[$field]['db_code'] = '{DATECURRENT}'; } else { switch ($struct[$field]['type']) { case 'int': $struct[$field]['db_code'] = '{BIGINT}'; break; case 'bool': $struct[$field]['db_code'] = '{BOOLEAN}'; break; default: $struct[$field]['db_code'] = 'VARCHAR(255) {LATIN1} NOT NULL'; } } } $this->out("For creating a new table with upgrade.php:"); $this->out(""); $this->out('db_query_parsed("'); $this->out(' CREATE TABLE {IF_NOT_EXISTS} " . table_by_key("' . $module . '") . " ('); # TODO: $module is not really correct - $handler->db_table would be foreach (array_keys($struct) as $field) { if ($struct[$field]['not_in_db'] == 0 && $struct[$field]['dont_write_to_db'] == 0) { $this->out(" $field " . $struct[$field]['db_code'] . ","); } } $this->out(" INDEX domain(domain,username), // <--- change as needed"); $this->out(" PRIMARY KEY (" . $handler->getId_field() . ")"); $this->out(' ) {MYISAM} '); $this->out('");'); $this->out(''); $this->hr(); $this->out('For adding fields with upgrade.php:'); $this->out(''); $prev_field = ''; foreach (array_keys($struct) as $field) { if ($struct[$field]['not_in_db'] == 0 && $struct[$field]['dont_write_to_db'] == 0) { $this->out(" _db_add_field('$module', '$field',\t'" . $struct[$field]['db_code'] . "',\t'$prev_field');"); $prev_field = $field; } } $this->out(''); $this->hr(); $this->out('Note that the above is only a template.'); $this->out('You might need to adjust some parts.'); return; } /** * Displays help contents */ public function help() { $module = preg_replace('/Handler$/', '', $this->handler_to_use); $module = strtolower($module); $this->out( "Usage: postfixadmin-cli $module scheme Print the $module database scheme in a way that can be pasted into upgrade.php. "); $this->_stop(); } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/CliEdit.php0000664000175000017500000002045512425220363016316 0ustar daviddavidargs)) { $this->__interactive(); } else { $this->__handle_params(); } } /** * non-interactive mode * read, check and handle all --* parameters * The list of allowed params is based on $handler->struct */ private function __handle_params() { $handler = new $this->handler_to_use($this->new); $form_fields = $handler->getStruct(); $id_field = $handler->getId_field(); $values = array(); $param_error = 0; foreach($this->params as $key => $val) { $key = preg_replace('/^-/', '', $key); # allow --param, not only -param $key = str_replace('-', '_', $key); # allow --foo-bar even if field is named foo_bar if (isset($form_fields[$key]) && $form_fields[$key]['editable'] && $form_fields[$key]['display_in_form'] && $key != $id_field) { if ($form_fields[$key]['type'] == 'txtl') { $values[$key] = explode(',', $val); } elseif ($form_fields[$key]['type'] == 'bool') { if (strtolower($val) == 'y') $val = 1; # convert y to 1 if (strtolower($val) == 'n') $val = 0; # convert n to 0 $values[$key] = $val; # don't modify any other value - *Handler will complain if it's invalid ;-) } else { $values[$key] = $val; } } elseif ($key == 'webroot') { # always set, ignore } else { # not editable, unknown field etc. $param_error = 1; $this->err("invalid parameter --$key => $val"); } } if ($param_error) $this->_stop(1); $this->__handle($this->args[0], $values); } /** * Interactive mode */ private function __interactive() { $handler = new $this->handler_to_use($this->new); $form_fields = $handler->getStruct(); $id_field = $handler->getId_field(); $values[$id_field] = ''; while($form_fields[$id_field]['editable'] != 0) { # endlees loop - except if input is valid or id_field is not editable (like auto_increment) $question = $form_fields[$id_field]['label'] . ":"; if ( $form_fields[$id_field]['desc'] != '') { $question .= "\n(" . $form_fields[$id_field]['desc'] . ')'; } $values[$id_field] = $this->in($form_fields[$id_field]['label'] . ':'); if ($handler->init($values[$id_field])) { break; } else { $this->err($handler->errormsg); # always use a fresh handler to avoid problems with previous error messages $handler = new $this->handler_to_use($this->new); } } # update $form_fields (needed for example to display the correct allowed quota) # TODO: doesn't (always?) work - wrong time for the refresh? # $handler->set(array()); $form_fields = $handler->getStruct(); foreach($form_fields as $key => $field) { if ($field['editable'] && $field['display_in_form'] && $key != $id_field) { while(0==0) { # endlees loop - except if input is valid $question = $field['label'] . ':'; if ($field['desc'] != '') { $question .= "\n(" . $field['desc'] . ')'; } if ($field['type'] == 'bool') { $values[$key] = $this->in($question, array ('y', 'n') ); if ($values[$key] == 'y') { $values[$key] = 1; } else { $values[$key] = 0; } } elseif ($field['type'] == 'enum') { $optiontxt = array(); $optionlist = array(); foreach ($field['options'] AS $optionkey => $optionval) { // $this->in hates number 0 $optionkey = $optionkey + 1; $optiontxt[] = '['.$optionkey.'] - '.$optionval; $optionlist[] = $optionkey; } $question .= "\n" . join("\n", $optiontxt) . "\n"; $values[$key] = $this->in($question, $optionlist); $values[$key] = $field['options'][$values[$key]-1]; # convert int to option name } elseif ($field['type'] == 'txtl') { $values[$key] = array(); $nextval = $this->in($question); while ($nextval != '') { if ($nextval != '') { $values[$key][] = $nextval; } $nextval = $this->in(""); } } else { $values[$key] = $this->in($question); } if (is_null($values[$key]) ) { # TODO: insull() is probably obsoleted by change in Shell class echo "*** value of $key is NULL - this should not happen! ***"; } if ($values[$key] == '' && (!$this->new) ) { # edit mode unset ($values[$key]); # empty input - don't change } # always use a fresh handler to avoid problems with previous error messages $handler = new $this->handler_to_use($this->new); $handler->init($values[$id_field]); $handler->set($values); if ( isset($handler->errormsg[$key]) ) { # only check the errormessage for this field $this->err($handler->errormsg[$key]); } else { break; } } # end while } # end if $field[editable] etc. } # end foreach $this->__handle($values[$id_field], $values); } /** * (try to) store values */ private function __handle($id, $values) { $handler = new $this->handler_to_use($this->new); if (!$handler->init($id)) { $this->err($handler->errormsg); return; } if (!$handler->set($values)) { $this->err($handler->errormsg); return; } if (!$handler->store()) { $this->err($handler->errormsg); } else { $this->out(""); $this->out($handler->infomsg); $this->hr(); } return; } /** * Displays help contents */ public function help() { if ($this->new) { $cmd = 'add'; $cmdtext = 'Adds'; } else { $cmd = 'update'; $cmdtext = 'Changes'; } $module = preg_replace('/Handler$/', '', $this->handler_to_use); $module = strtolower($module); $this->out( "Usage: postfixadmin-cli $module $cmd $cmdtext $module in interactive mode. - or - postfixadmin-cli $module $cmd
--option value --option2 value [...] $cmdtext $module in non-interactive mode. Available options are: "); $handler = new $this->handler_to_use($this->new); $form_fields = $handler->getStruct(); $id_field = $handler->getId_field(); foreach($form_fields as $key => $field) { if ($field['editable'] && $field['display_in_form'] && $key != $id_field) { $optkey = str_replace('_', '-', $key); $this->out(" --$optkey"); $this->out(" " . $field['label']); if ($field['desc']) $this->out(" " . $field['desc']); $this->out(""); } } $this->_stop(); } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/AliasdomainHandler.php0000664000175000017500000001301012510505070020501 0ustar daviddavidstruct=array( # field name allow display in... type $PALANG label $PALANG description default / options / ... # editing? form list 'alias_domain' => pacol( $this->new, 1, 1, 'enum', 'pCreate_alias_domain_alias' , 'pCreate_alias_domain_alias_text' , '', /*options, filled below*/ array(), /* multiopt */ array('linkto' => 'list-virtual.php?domain=%s') ), 'target_domain' => pacol( 1, 1, 1, 'enum', 'pCreate_alias_domain_target' , 'pCreate_alias_domain_target_text', '', /*options*/ array() /* filled below */ ), 'created' => pacol( 0, 0, 0, 'ts', 'created' , '' ), 'modified' => pacol( 0, 0, 1, 'ts', 'last_modified' , '' ), 'active' => pacol( 1, 1, 1, 'bool', 'active' , '' , 1 ), ); # check which domains are available as an alias- or target-domain $this->getList(""); $used_targets = array(); foreach ($this->allowed_domains as $dom) { if (isset($this->result[$dom]) ) { # already used as alias_domain $used_targets[$this->result[$dom]['target_domain']] = $this->result[$dom]['target_domain']; } else { # might be available $this->struct['alias_domain']['options'][$dom] = $dom; $this->struct['target_domain']['options'][$dom] = $dom; } } foreach ($this->struct['alias_domain']['options'] as $dom) { if (isset($used_targets[$dom])) unset ($this->struct['alias_domain']['options'][$dom]); # don't allow chained domain aliases (domain1 -> domain2 -> domain3) } if (count($this->struct['alias_domain']['options']) == 1) { # only one alias_domain available - filter it out from target_domain list $keys = array_keys($this->struct['alias_domain']['options']); unset ($this->struct['target_domain']['options'][$keys[0]]); } } public function init($id) { $success = parent::init($id); if ($success) { if (count($this->struct['alias_domain']['options']) == 0 && $this->new) { $this->errormsg[] = Config::lang('pCreate_alias_domain_error4'); return false; } # TODO: check if target domains are available (in new and edit mode) } return $success; } protected function initMsg() { $this->msg['error_already_exists'] = 'alias_domain_already_exists'; $this->msg['error_does_not_exist'] = 'alias_domain_does_not_exist'; $this->msg['confirm_delete'] = 'confirm_delete_aliasdomain'; if ($this->new) { $this->msg['logname'] = 'create_alias_domain'; $this->msg['store_error'] = 'alias_domain_create_failed'; $this->msg['successmessage'] = 'pCreate_alias_domain_success'; } else { $this->msg['logname'] = 'edit_alias_domain'; $this->msg['store_error'] = 'alias_domain_change_failed'; $this->msg['successmessage'] = 'alias_domain_changed'; } } public function webformConfig() { return array( # $PALANG labels 'formtitle_create' => 'pCreate_alias_domain_welcome', 'formtitle_edit' => 'pCreate_alias_domain_welcome', 'create_button' => 'add_alias_domain', # various settings 'required_role' => 'admin', 'listview' => 'list-virtual.php', 'early_init' => 1, # 0 for create-domain 'prefill' => array('alias_domain', 'target_domain'), ); } protected function validate_new_id() { return true; # alias_domain is enum, so we don't need to check its syntax etc. } /** * @return true on success false on failure */ public function delete() { if ( ! $this->view() ) { $this->errormsg[] = 'An alias domain with that name does not exist!'; # TODO: make translatable? (will a user ever see this?) return false; } db_delete($this->db_table, $this->id_field, $this->id); db_log ($this->id, 'delete_alias_domain', $this->result['target_domain']); $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->result['alias_domain'] . ' -> ' . $this->result['target_domain']); return true; } /** * validate target_domain field - it must be != $this->id to avoid a loop */ protected function _validate_target_domain($field, $val) { if ($val == $this->id) { $this->errormsg[$field] = Config::lang('alias_domain_to_itsself'); return false; } return true; } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/CliHelp.php0000664000175000017500000000333512425220363016317 0ustar daviddavidhelp(); } public function help() { $handler = new $this->handler_to_use; # TODO: adjust help text according to $handler->taskNames $module = preg_replace('/Handler$/', '', $this->handler_to_use); $module = strtolower($module); $this->out( "Usage: postfixadmin-cli $module [
] [--option value] "); /* View $module in interactive mode. - or - postfixadmin-cli $module view
View $module
in non-interactive mode. "); */ $head = "Usage: postfixadmin-cli $module [
] [--option value] [--option value]\n"; $head .= "-----------------------------------------------\n"; $head .= "Parameters:\n\n"; $commands = array( 'task' => "\t\n" . "\t\tAvailable values:\n\n". "\t\t".sprintf("%-20s %s", "view: ", "View an existing $module.")."\n". "\t\t".sprintf("%-20s %s", "add: ", "Add a $module.")."\n". "\t\t".sprintf("%-20s %s", "update: ", "Update a $module.")."\n". "\t\t".sprintf("%-20s %s", "delete: ", "Delete a $module")."\n", 'address' => "\t[
]\n" . "\t\tA address of recipient.\n", ); foreach ($commands as $cmd) { $this->out("{$cmd}\n\n"); } } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/CliView.php0000664000175000017500000000552112425220363016340 0ustar daviddavidargs)) { $this->__interactive(); } if (!empty($this->args[0])) { $this->__handle($this->args[0]); } } /** * Interactive mode */ protected function __interactive() { $module = preg_replace('/Handler$/', '', $this->handler_to_use); $module = strtolower($module); $question = "Which $module do you want to view?"; $address = $this->in($question); $this->__handle($address); } /** * actually view something * * @param string address to view */ protected function __handle($address) { $handler = new $this->handler_to_use($this->new); if (!$handler->init($address)) { $this->err($handler->errormsg); return; } if (!$handler->view()) { $this->err($handler->errormsg); return; } $result = $handler->result(); $struct = $handler->getStruct(); foreach(array_keys($struct) as $field) { if (isset($struct[$field]) && empty($struct[$field]['label'])) { # $struct[$field]['label'] = "--- $field ---"; $struct[$field]['display_in_list'] = 0; } if ($struct[$field]['display_in_list'] == 0) { # do nothing } else { $value = $result[$field]; $func="_formatted_".$field; if (method_exists($handler, $func) ) { $value = $handler->{$func}($result); # call _formatted_$fieldname() } if ($struct[$field]['type'] == 'txtl') { # $value = join("\n" . str_repeat(" ", 20 + 2), $value); # multiline, one item per line $value = join(", ", $value); # one line, comma-separated } elseif ($struct[$field]['type'] == 'bool') { $value = Config::Lang($value ? 'YES' : 'NO'); } $this->out(sprintf("%20s: %s", $struct[$field]['label'], $value)); } } } /** * Display help contents * * @access public */ public function help() { $module = preg_replace('/Handler$/', '', $this->handler_to_use); $module = strtolower($module); $this->out( "Usage: postfixadmin-cli $module view View $module in interactive mode. - or - postfixadmin-cli $module view
View $module
in non-interactive mode. "); $this->_stop(); } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/VacationHandler.php0000664000175000017500000002325213046656771020061 0ustar daviddavidstruct=array( # field name allow display in... type $PALANG label $PALANG description default / options / ... # editing? form list 'email' => pacol( $this->new, 1, 1, 'text', 'pLogin_username' , '' , '' ), 'domain' => pacol( 1, 0, 0, 'text', '' , '' , '' ), 'subject' => pacol( 1, 1, 0, 'text', 'pUsersVacation_subject' , '' , '' ), 'body' => pacol( 1, 1, 0, 'text', 'pUsersVacation_body' , '' , '' ), 'activefrom' => pacol( 1, 1, 1, 'text', 'pUsersVacation_activefrom' , '' , '' ), 'activeuntil' => pacol( 1, 1, 1, 'text', 'pUsersVacation_activeuntil' , '' , '' ), 'active' => pacol( 1, 1, 1, 'bool', 'active' , '' , 1 ), 'created' => pacol( 0, 0, 1, 'ts', 'created' , '' ), 'modified' => pacol( 0, 0, 1, 'ts', 'last_modified' , '' ), # TODO: add virtual 'notified' column and allow to display who received a vacation response? ); if ( ! db_pgsql() ) { $this->struct['cache'] = pacol( 0, 0, 0, 'text', '' , '' , '' ); # leftover from 2.2 } } protected function initMsg() { $this->msg['error_already_exists'] = 'pCreate_mailbox_username_text_error1'; # TODO: better error message $this->msg['error_does_not_exist'] = 'pCreate_mailbox_username_text_error1'; # TODO: better error message $this->msg['confirm_delete'] = 'confirm_delete_vacation'; # unused? if ($this->new) { $this->msg['logname'] = 'edit_vacation'; $this->msg['store_error'] = 'pVacation_result_error'; $this->msg['successmessage'] = 'pVacation_result_removed'; # TODO: or pVacation_result_added - depends on 'active'... -> we probably need a new message } else { $this->msg['logname'] = 'edit_vacation'; $this->msg['store_error'] = 'pVacation_result_error'; $this->msg['successmessage'] = 'pVacation_result_removed'; # TODO: or pVacation_result_added - depends on 'active'... -> we probably need a new message } } public function webformConfig() { return array( # $PALANG labels 'formtitle_create' => 'pUsersVacation_welcome', 'formtitle_edit' => 'pUsersVacation_welcome', 'create_button' => 'save', # various settings 'required_role' => 'admin', 'listview' => 'list-virtual.php', 'early_init' => 1, # 0 for create-domain ); } protected function validate_new_id() { # vacation can only be enabled if a mailbox with this name exists $handler = new MailboxHandler(); return $handler->init($address); } public function delete() { $this->errormsg[] = '*** deletion not implemented yet ***'; return false; # XXX function aborts here! XXX } protected $username = null; function __construct($username) { $this->username = $username; $this->id = $username; } /** * Removes the autoreply alias etc for this user; namely, if they're away we remove their vacation alias and * set the vacation table record to false. * @return boolean true on success. */ function remove() { if (!$this->updateAlias(0)) return false; // tidy up vacation table. $vacation_data = array( 'active' => db_get_boolean(false), ); $result = db_update('vacation', 'email', $this->username, $vacation_data); $result = db_delete('vacation_notification', 'on_vacation', $this->username); # TODO db_log() call (maybe except if called from set_away?) /* crap error handling; oh for exceptions... */ return true; } /** * @return boolean true indicates this server supports vacation messages, and users are able to change their own. */ function vacation_supported() { return Config::bool('vacation') && Config::bool('vacation_control'); } /** * @return boolean true if on vacation, otherwise false * Why do we bother storing true/false in the vacation table if the alias dictates it anyway? */ function check_vacation() { $handler = new AliasHandler(); if (!$handler->init($this->id)) { # print_r($handler->errormsg); # TODO: error handling return false; } if (!$handler->view()) { # print_r($handler->errormsg); # TODO: error handling return false; } $result = $handler->result(); if ($result['on_vacation']) return true; return false; } /** * Retrieve information on someone who is on vacation * @return struct|boolean stored information on vacation - array(subject - string, message - string, active - boolean, activeFrom - date, activeUntil - date) * will return false if no existing data */ function get_details() { $table_vacation = table_by_key('vacation'); $E_username = escape_string($this->username); $sql = "SELECT * FROM $table_vacation WHERE email = '$E_username'"; $result = db_query($sql); if($result['rows'] != 1) { return false; } $row = db_array($result['result']); $boolean = ($row['active'] == db_get_boolean(true)); # TODO: only return true and store the db result array in $this->whatever for consistency with the other classes return array( 'subject' => $row['subject'], 'body' => $row['body'], 'active' => $boolean , 'interval_time' => $row['interval_time'], 'activeFrom' => $row['activefrom'], 'activeUntil' => $row['activeuntil'], ); } /** * @param string $subject * @param string $body * @param string $interval_time * @param date $activeFrom * @param date $activeUntil */ function set_away($subject, $body, $interval_time, $activeFrom, $activeUntil) { $this->remove(); // clean out any notifications that might already have been sent. $E_username = escape_string($this->username); $activeFrom = date ("Y-m-d 00:00:00", strtotime ($activeFrom)); # TODO check if result looks like a valid date $activeUntil = date ("Y-m-d 23:59:59", strtotime ($activeUntil)); # TODO check if result looks like a valid date list(/*NULL*/,$domain) = explode('@', $this->username); $vacation_data = array( 'email' => $this->username, 'domain' => $domain, 'subject' => $subject, 'body' => $body, 'interval_time' => $interval_time, 'active' => db_get_boolean(true), 'activefrom' => $activeFrom, 'activeuntil' => $activeUntil, ); if ( ! db_pgsql() ) { $vacation_data['cache'] = ''; # leftover from 2.2 } // is there an entry in the vacaton table for the user, or do we need to insert? $table_vacation = table_by_key('vacation'); $result = db_query("SELECT * FROM $table_vacation WHERE email = '$E_username'"); if($result['rows'] == 1) { $result = db_update('vacation', 'email', $this->username, $vacation_data); } else { $result = db_insert('vacation', $vacation_data); } # TODO error check # TODO wrap whole function in db_begin / db_commit (or rollback)? return $this->updateAlias(1); } /** * add/remove the vacation alias * @param int $vacationActive */ protected function updateAlias($vacationActive) { $handler = new AliasHandler(); if (!$handler->init($this->id)) { # print_r($handler->errormsg); # TODO: error handling return false; } $values = array ( 'on_vacation' => $vacationActive, ); if (!$handler->set($values)) { # print_r($handler->errormsg); # TODO: error handling return false; } # TODO: supress logging in AliasHandler if called from VacationHandler (VacationHandler should log itsself) if (!$handler->store()) { print_r($handler->errormsg); # TODO: error handling return false; } # still here? then everything worked return true; } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/PFAHandler.php0000664000175000017500000010255113026454266016714 0ustar daviddavid True, 'confirm_delete' => 'confirm', 'list_header' => '', # headline used in list view ); # called via another *Handler class? (use calledBy() to set this information) protected $called_by = ''; /** * Constructor: fill $struct etc. * @param integer - 0 is edit mode, set to 1 to switch to create mode * @param string - if an admin_username is specified, permissions will be restricted to the domains this admin may manage * @param integer - 0 if logged in as user, 1 if logged in as admin or superadmin */ public function __construct($new = 0, $username = "", $is_admin = 1) { # set label_field if not explicitely set if (empty($this->label_field)) { $this->label_field = $this->id_field; } # set order_by if not explicitely set if (empty($this->order_by)) { $this->order_by = $this->id_field; } if ($new) $this->new = 1; if ($is_admin) { $this->admin_username = $username; } else { $this->username = $username; $this->is_admin = 0; $this->is_superadmin = 0; } if ($username != "" && (! authentication_has_role('global-admin') ) ) { $this->is_superadmin = 0; } if ($this->domain_field == "") { $this->no_domain_field(); } else { if ($this->admin_username != "") { $this->allowed_domains = list_domains_for_admin($username); } else { $this->allowed_domains = list_domains(); } } if ($this->user_field == '') { $this->no_user_field(); } $this->initStruct(); if (!isset($this->struct['_can_edit'])) { $this->struct['_can_edit'] = pacol( 0, 0, 1, 'vnum', '' , '' , '', '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ '1 as _can_edit' ); } if (!isset($this->struct['_can_delete'])) { $this->struct['_can_delete'] = pacol( 0, 0, 1, 'vnum', '' , '' , '', '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ '1 as _can_delete' ); } $struct_hook = Config::read($this->db_table . '_struct_hook'); if ( $struct_hook != 'NO' && function_exists($struct_hook) ) { $this->struct = $struct_hook($this->struct); } $this->initMsg(); $this->msg['id_field'] = $this->id_field; $this->msg['show_simple_search'] = count($this->searchfields) > 0; } /** * ensure a lazy programmer can't give access to all items accidently * * to intentionally disable the check if $this->domain_field is empty, override this function */ protected function no_domain_field() { if ($this->admin_username != "") die('Attemp to restrict domains without setting $this->domain_field!'); } /** * ensure a lazy programmer can't give access to all items accidently * * to intentionally disable the check if $this->user_field is empty, override this function */ protected function no_user_field() { if ($this->username != '') die('Attemp to restrict users without setting $this->user_field!'); } /** * init $this->struct (an array of pacol() results) * see pacol() in functions.inc.php for all available parameters * * available values for the "type" column: * text one line of text * *vtxt "virtual" line of text, coming from JOINs etc. * html raw html (use carefully, won't get auto-escaped by smarty! Don't use with user input!) * pass password (will be encrypted with pacrypt()) * b64p password (will be stored with base64_encode() - but will NOT be decoded automatically) * num number * txtl text "list" - array of one line texts * *vnum "virtual" number, coming from JOINs etc. * bool boolean (converted to 0/1, additional column _$field with yes/no) * ts timestamp (created/modified) * enum list of options, must be given in column "options" as array * enma list of options, must be given in column "options" as associative array * list like enum, but allow multiple selections * *quot used / total quota ("5 / 10") - for field "quotausage", there must also be a "_quotausage_percent" (type vnum) * You can use custom types, but you'll have to add handling for them in *Handler and the smarty templates * * Field types marked with * will automatically be skipped in store(). * * All database tables should have a 'created' and a 'modified' column. * * Do not use one of the following field names: * edit, delete, prefill, webroot, help * because those are used as parameter names in the web and/or commandline interface */ abstract protected function initStruct(); /** * init $this->msg[] with messages used in various functions. * * always list the key to hand over to Config::lang * the only exception is 'logname' which uses the key for db_log * * The values can depend on $this->new * TODO: use separate keys edit_* and new_* and choose the needed message at runtime */ abstract protected function initMsg(); /** * returns an array with some labels and settings for the web interface * can also change $this->struct to something that makes the web interface better * (for example, it can make local_part and domain editable as separate fields * so that users can choose the domain from a dropdown) * * @return array */ abstract public function webformConfig(); /** * if you call one *Handler class from another one, tell the "child" *Handler as early as possible (before init()) * The flag can be used to avoid logging, avoid loops etc. The exact handling is up to the implementation in *Handler * * @param string calling class */ public function calledBy($calling_class) { $this->called_by = $calling_class; } /** * initialize with $id and check if it is valid * @param string $id */ public function init($id) { $this->id = strtolower($id); $this->label = $this->id; $exists = $this->view(false); if ($this->new) { if ($exists) { $this->errormsg[$this->id_field] = Config::lang($this->msg['error_already_exists']); return false; } elseif (!$this->validate_new_id() ) { # errormsg filled by validate_new_id() return false; # } else { # return true; } } else { # view or edit mode if (!$exists) { $this->errormsg[$this->id_field] = Config::lang($this->msg['error_does_not_exist']); return false; } else { $this->can_edit = $this->result['_can_edit']; $this->can_delete = $this->result['_can_delete']; $this->label = $this->result[$this->label_field]; # return true; } } $this->domain = $this->domain_from_id(); return true; } /** * on $new, check if the ID is valid (for example, check if it is a valid mail address syntax-wise) * called by init() * @return boolean true/false * must also set $this->errormsg[$this->id_field] if ID is invalid */ abstract protected function validate_new_id(); /** * called by init() if $this->id != $this->domain_field * must be overridden if $id_field != $domain_field * @return string the domain to use for logging */ protected function domain_from_id() { if ($this->id_field == $this->domain_field) { return $this->id; } elseif ($this->domain_field == "") { return ""; } else { die('You must override domain_from_id()!'); } } /** * web interface can prefill some fields * if a _prefill_$field method exists, call it (it can for example modify $struct) * @param string - field * @param string - prefill value */ public function prefill($field, $val) { $func="_prefill_".$field; if (method_exists($this, $func) ) { $this->{$func}($field, $val); # call _missing_$fieldname() } else { $this->struct[$field]['default'] = $val; } } /** * set and verify values * @param array values - associative array with ($field1 => $value1, $field2 => $value2, ...) * @return bool - true if all values are valid, otherwise false * error messages (if any) are stored in $this->errormsg */ public function set($values) { if ( !$this->can_edit ) { $this->errormsg[] = Config::Lang_f('edit_not_allowed', $this->label); return false; } if ($this->new == 1) { $values[$this->id_field] = $this->id; } $this->RAWvalues = $values; # allows comparison of two fields before the second field is checked # Warning: $this->RAWvalues contains unchecked input data - use it carefully! if ($this->new) { foreach($this->struct as $key=>$row) { if ($row['editable'] && !isset($values[$key]) ) { /** * when creating a new item: * if a field is editable and not set, * - if $this->_missing_$fieldname() exists, call it * (it can set $this->RAWvalues[$fieldname] - or do nothing if it can't set a useful value) * - otherwise use the default value from $this->struct * (if you don't want this, create an empty _missing_$fieldname() function) */ $func="_missing_".$key; if (method_exists($this, $func) ) { $this->{$func}($key); # call _missing_$fieldname() } else { $this->set_default_value($key); # take default value from $this->struct } } } $values = $this->RAWvalues; } # base validation $this->values = array(); $this->values_valid = false; foreach($this->struct as $key=>$row) { if ($row['editable'] == 0) { # not editable if ($this->new == 1) { # on $new, always set non-editable field to default value on $new (even if input data contains another value) $this->values[$key] = $row['default']; } } else { # field is editable if (isset($values[$key])) { if ( ($row['type'] != "pass" && $row['type'] != 'b64p') || # field type is NOT 'pass' or 'b64p' - or - strlen($values[$key]) > 0 || # new value is not empty - or - $this->new == 1 || # create mode - or - $this->skip_empty_pass != true # skip on empty (aka unchanged) password on edit ) { # TODO: do not skip "password2" if "password" is filled, but "password2" is empty $valid = true; # trust input unless validator objects # validate based on field type ($this->_inp_$type) $func="_inp_".$row['type']; if (method_exists($this, $func) ) { if (!$this->{$func}($key, $values[$key])) $valid = false; } else { # TODO: warning if no validation function exists? } # validate based on field name (_validate_$fieldname) $func="_validate_".$key; if (method_exists($this, $func) ) { if (!$this->{$func}($key, $values[$key])) $valid = false; } if (isset($this->errormsg[$key]) && $this->errormsg[$key] != '') $valid = false; if ($valid) { $this->values[$key] = $values[$key]; } } } elseif ($this->new) { # new, field not set in input data $this->errormsg[$key] = Config::lang_f('missing_field', $key); } else { # edit, field unchanged # echo "skipped / not set: $key\n"; } } } $this->setmore($values); if (count($this->errormsg) == 0) { $this->values_valid = true; } return $this->values_valid; } /** * set more values * can be used to update additional columns etc. * hint: modify $this->values and $this->errormsg directly as needed */ protected function setmore($values) { # do nothing } /** * store $this->values in the database * * converts values based on $this->struct[*][type] (boolean, password encryption) * * calls $this->storemore() where additional things can be done * @return bool - true if all values were stored in the database, otherwise false * error messages (if any) are stored in $this->errormsg */ public function store() { if ($this->values_valid == false) { $this->errormsg[] = "one or more values are invalid!"; return false; } if ( !$this->beforestore() ) { return false; } $db_values = $this->values; foreach(array_keys($db_values) as $key) { switch ($this->struct[$key]['type']) { # modify field content for some types case 'bool': $db_values[$key] = db_get_boolean($db_values[$key]); break; case 'pass': $db_values[$key] = pacrypt($db_values[$key]); break; case 'b64p': $db_values[$key] = base64_encode($db_values[$key]); break; case 'quot': case 'vnum': case 'vtxt': unset ($db_values[$key]); # virtual field, never write it break; } if ($this->struct[$key]['not_in_db'] == 1) unset ($db_values[$key]); # remove 'not in db' columns if ($this->struct[$key]['dont_write_to_db'] == 1) unset ($db_values[$key]); # remove 'dont_write_to_db' columns } if ($this->new) { $result = db_insert($this->db_table, $db_values); } else { $result = db_update($this->db_table, $this->id_field, $this->id, $db_values); } if ($result != 1) { $this->errormsg[] = Config::lang_f($this->msg['store_error'], $this->label); return false; } $result = $this->storemore(); # db_log() even if storemore() failed db_log ($this->domain, $this->msg['logname'], $this->id); if ($result) { # return success message # TODO: add option to override the success message (for example to include autogenerated passwords) $this->infomsg['success'] = Config::lang_f($this->msg['successmessage'], $this->label); } return $result; } /** * called by $this->store() before storing the values in the database * @return bool - if false, store() will abort */ protected function beforestore() { return true; # do nothing, successfully ;-) } /** * called by $this->store() after storing $this->values in the database * can be used to update additional tables, call scripts etc. */ protected function storemore() { return true; # do nothing, successfully ;-) } /** * build_select_query * * helper function to build the inner part of the select query * can be used by read_from_db() and for generating the pagebrowser * * @param array or string - condition (an array will be AND'ed using db_where_clause, a string will be directly used) * (if you use a string, make sure it is correctly escaped!) * - WARNING: will be changed to array only in the future, with an option to include a raw string inside the array * @param array searchmode - operators to use (=, <, >) if $condition is an array. Defaults to = if not specified for a field. * @return array - contains query parts */ protected function build_select_query($condition, $searchmode) { $select_cols = array(); $yes = escape_string(Config::lang('YES')); $no = escape_string(Config::lang('NO')); if (db_pgsql()) { $formatted_date = "TO_CHAR(###KEY###, '" . escape_string(Config::Lang('dateformat_pgsql')) . "')"; # $base64_decode = "DECODE(###KEY###, 'base64')"; } elseif (db_sqlite()) { $formatted_date = "strftime(###KEY###, '" . escape_string(Config::Lang('dateformat_mysql')) . "')"; # $base64_decode = "base64_decode(###KEY###)"; } else { $formatted_date = "DATE_FORMAT(###KEY###, '" . escape_string(Config::Lang('dateformat_mysql')) . "')"; # $base64_decode = "FROM_BASE64(###KEY###)"; # requires MySQL >= 5.6 } $colformat = array( # 'ts' fields are always returned as $formatted_date, and the raw value as _$field 'ts' => "$formatted_date AS ###KEY###, ###KEY### AS _###KEY###", # 'bool' fields are always returned as 0/1, additonally _$field contains yes/no (already translated) 'bool' => "CASE ###KEY### WHEN '" . db_get_boolean(true) . "' THEN '1' WHEN '" . db_get_boolean(false) . "' THEN '0' END as ###KEY###," . "CASE ###KEY### WHEN '" . db_get_boolean(true) . "' THEN '$yes' WHEN '" . db_get_boolean(false) . "' THEN '$no' END as _###KEY###", # 'b64p' => "$base64_decode AS ###KEY###", # not available in MySQL < 5.6, therefore not decoding for any database ); # get list of fields to display $extrafrom = ""; foreach($this->struct as $key=>$row) { if ( ($row['display_in_list'] != 0 || $row['display_in_form'] != 0) && $row['not_in_db'] == 0 ) { if ($row['select'] != '') $key = $row['select']; if ($row['extrafrom'] != '') $extrafrom = $extrafrom . " " . $row['extrafrom'] . "\n"; if (isset($colformat[$row['type']])) { $select_cols[] = str_replace('###KEY###', $key, $colformat[$row['type']] ); } else { $select_cols[] = $key; } } } $cols = join(',', $select_cols); $table = table_by_key($this->db_table); $additional_where = ''; if ($this->domain_field != "") { $additional_where .= " AND " . db_in_clause($this->domain_field, $this->allowed_domains); } # if logged in as user, restrict to the items the user is allowed to see if ( (!$this->is_admin) && $this->user_field != '') { $additional_where .= " AND " . $this->user_field . " = '" . escape_string($this->username) . "' "; } if (is_array($condition)) { if (isset($condition['_']) && count($this->searchfields) > 0) { $simple_search = array(); foreach ($this->searchfields as $field) { $simple_search[] = "$field LIKE '%" . escape_string($condition['_']) . "%'"; } $additional_where .= " AND ( " . join(" OR ", $simple_search) . " ) "; unset($condition['_']); } $where = db_where_clause($condition, $this->struct, $additional_where, $searchmode); } else { if ($condition == "") $condition = '1=1'; $where = " WHERE ( $condition ) $additional_where"; } return array( 'select_cols' => " SELECT $cols ", 'from_where_order' => " FROM $table $extrafrom $where ORDER BY " . $this->order_by, ); } /** * getPagebrowser * * @param array or string condition (see build_select_query() for details) * @param array searchmode - (see build_select_query() for details) * @return array - pagebrowser keys ("aa-cz", "de-pf", ...) */ public function getPagebrowser($condition, $searchmode) { $queryparts = $this->build_select_query($condition, $searchmode); return create_page_browser($this->label_field, $queryparts['from_where_order']); } /** * read_from_db * * reads all fields specified in $this->struct from the database * and auto-converts them to database-independent values based on the field type (see $colformat) * * calls $this->read_from_db_postprocess() to postprocess the result * * @param array or string condition -see build_select_query() for details * @param array searchmode - see build_select_query() for details * @param integer limit - maximum number of rows to return * @param integer offset - number of first row to return * @return array - rows (as associative array, with the ID as key) */ protected function read_from_db($condition, $searchmode = array(), $limit=-1, $offset=-1) { $queryparts = $this->build_select_query($condition, $searchmode); $query = $queryparts['select_cols'] . $queryparts['from_where_order']; $limit = (int) $limit; # make sure $limit and $offset are really integers $offset = (int) $offset; if ($limit > -1 && $offset > -1) { $query .= " LIMIT $limit OFFSET $offset "; } $result = db_query($query); $db_result = array(); if ($result['rows'] != 0) { while ($row = db_assoc ($result['result'])) { $db_result[$row[$this->id_field]] = $row; } } $db_result = $this->read_from_db_postprocess($db_result); return $db_result; } /** * allows to postprocess the database result * called by read_from_db() */ protected function read_from_db_postprocess($db_result) { return $db_result; } /** * get the values of an item * @param boolean (optional) - if false, $this->errormsg[] will not be filled in case of errors * @return bool - true if item was found * The data is stored in $this->result (as associative array of column => value) * error messages (if any) are stored in $this->errormsg */ public function view($errors=true) { $result = $this->read_from_db(array($this->id_field => $this->id) ); if (count($result) == 1) { $this->result = $result[$this->id]; return true; } if ($errors) $this->errormsg[] = Config::lang($this->msg['error_does_not_exist']); # $this->errormsg[] = $result['error']; return false; } /** * get a list of one or more items with all values * @param array or string $condition - see read_from_db for details * WARNING: will be changed to array only in the future, with an option to include a raw string inside the array * @param array - modes to use if $condition is an array - see read_from_db for details * @param integer limit - maximum number of rows to return * @param integer offset - number of first row to return * @return bool - always true, no need to check ;-) (if $result is not an array, getList die()s) * The data is stored in $this->result (as array of rows, each row is an associative array of column => value) */ public function getList($condition, $searchmode = array(), $limit=-1, $offset=-1) { if (is_array($condition)) { $real_condition = array(); foreach ($condition as $key => $value) { # allow only access to fields the user can access to avoid information leaks via search parameters if (isset($this->struct[$key]) && ($this->struct[$key]['display_in_list'] || $this->struct[$key]['display_in_form']) ) { $real_condition[$key] = $value; } elseif (($key == '_') && count($this->searchfields)) { $real_condition[$key] = $value; } else { $this->errormsg[] = "Ignoring unknown search field $key"; } } } else { # warning: no sanity checks are applied if $condition is not an array! $real_condition = $condition; } $result = $this->read_from_db($real_condition, $searchmode, $limit, $offset); if (!is_array($result)) { error_log('getList: read_from_db didn\'t return an array. table: ' . $this->db_table . ' - condition: $condition - limit: $limit - offset: $offset'); error_log('getList: This is most probably caused by read_from_db_postprocess()'); die('Unexpected error while reading from database! (Please check the error log for details, and open a bugreport)'); } $this->result = $result; return true; } /** * Attempt to log a user in. * @param string $username * @param string $password * @return boolean true on successful login (i.e. password matches etc) */ public function login($username, $password) { $username = escape_string($username); $table = table_by_key($this->db_table); $active = db_get_boolean(True); $query = "SELECT password FROM $table WHERE " . $this->id_field . "='$username' AND active='$active'"; $result = db_query ($query); if ($result['rows'] == 1) { $row = db_array ($result['result']); $crypt_password = pacrypt ($password, $row['password']); if($row['password'] == $crypt_password) { return true; } } return false; } /************************************************************************** * functions to read protected variables */ public function getStruct() { return $this->struct; } public function getMsg() { return $this->msg; } public function getId_field() { return $this->id_field; } /** * @return return value of previously called method */ public function result() { return $this->result; } /** * compare two password fields * typically called from _validate_password2() * @param string $field1 - "password" field * @param string $field2 - "repeat password" field */ protected function compare_password_fields($field1, $field2) { if ($this->RAWvalues[$field1] == $this->RAWvalues[$field2]) { unset ($this->errormsg[$field2]); # no need to warn about too short etc. passwords - it's enough to display this message at the 'password' field return true; } $this->errormsg[$field2] = Config::lang('pEdit_mailbox_password_text_error'); return false; } /** * set field to default value * @param string $field - fieldname */ protected function set_default_value($field) { if (isset($this->struct[$field]['default'])) { $this->RAWvalues[$field] = $this->struct[$field]['default']; } } /************************************************************************** * _inp_*() * functions for basic input validation * @return boolean - true if the value is valid, otherwise false * also set $this->errormsg[$field] if a value is invalid */ /** * check if value is numeric and >= -1 (= minimum value for quota) */ protected function _inp_num($field, $val) { $valid = is_numeric($val); if ($val < -1) $valid = false; if (!$valid) $this->errormsg[$field] = Config::Lang_f('must_be_numeric', $field); return $valid; # return (int)($val); } /** * check if value is (numeric) boolean - in other words: 0 or 1 */ protected function _inp_bool($field, $val) { if ($val == "0" || $val == "1") return true; $this->errormsg[$field] = Config::Lang_f('must_be_boolean', $field); return false; # return $val ? db_get_boolean(true): db_get_boolean(false); } /** * check if value of an enum field is in the list of allowed values */ protected function _inp_enum($field, $val) { if(in_array($val, $this->struct[$field]['options'])) return true; $this->errormsg[$field] = Config::Lang_f('invalid_value_given', $field); return false; } /** * check if value of an enum field is in the list of allowed values */ protected function _inp_enma($field, $val) { if(array_key_exists($val, $this->struct[$field]['options'])) return true; $this->errormsg[$field] = Config::Lang_f('invalid_value_given', $field); return false; } /** * check if a password is secure enough */ protected function _inp_pass($field, $val){ $validpass = validate_password($val); # returns array of error messages, or empty array on success if(count($validpass) == 0) return true; $this->errormsg[$field] = $validpass[0]; # TODO: honor all error messages, not only the first one? return false; } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/Config.php0000664000175000017500000001545012312140533016200 0ustar daviddavid 'value of the Configure::One[key1]')); * Configure::write('One', array('key1'=>'value of the Configure::One[key1]', 'key2'=>'value of the Configure::One[key2]'); * Configure::write(array('One.key1' => 'value of the Configure::One[key1]', 'One.key2' => 'value of the Configure::One[key2]')); * * @param array $config Name of var to write * @param mixed $value Value to set for var * @return void * @access public */ public static function write($config, $value = null) { $_this = self::getInstance(); if (!is_array($config)) { $config = array($config => $value); } foreach ($config as $names => $value) { $name = $_this->__configVarNames($names); switch (count($name)) { case 3: $_this->{$name[0]}[$name[1]][$name[2]] = $value; break; case 2: $_this->{$name[0]}[$name[1]] = $value; break; case 1: $_this->{$name[0]} = $value; break; } } } /** * Used to read Configure::$var * * Usage * Configure::read('Name'); will return all values for Name * Configure::read('Name.key'); will return only the value of Configure::Name[key] * * @param string $var Variable to obtain * @return string value of Configure::$var * @access public */ public static function read($var) { $_this = self::getInstance(); if ($var === 'all') { $return = array(); foreach ($_this AS $key =>$var) { $return[$key] = $var; } return $return; } $name = $_this->__configVarNames($var); switch (count($name)) { case 3: if (isset($_this->{$name[0]}[$name[1]][$name[2]])) { return $_this->{$name[0]}[$name[1]][$name[2]]; } break; case 2: if (isset($_this->{$name[0]}[$name[1]])) { return $_this->{$name[0]}[$name[1]]; } break; case 1: if (isset($_this->{$name[0]})) { return $_this->{$name[0]}; } break; } if ( !in_array(join('.', $name), self::$deprecated_options) ) { error_log('Config::read(): attempt to read undefined config option "' . join('.', $name) . '", returning null'); } return null; } /** * read Config::$var and apply sprintf on it * also checks if $var is changed by sprintf - if not, it writes a warning to error_log * * @param string $var Variable to obtain * @param string $value Value to use as sprintf parameter * @return string value of Config::$var, parsed by sprintf * @access public */ public static function read_f($var, $value) { $text = self::read($var); $newtext = sprintf($text, $value); # check if sprintf changed something - if not, there are chances that $text didn't contain a %s if ($text == $newtext) { if (is_array($var)) $var = join('.', $var); error_log("$var used via read_f, but nothing replaced (value $value)"); } return $newtext; } /** * Used to read Config::$var, converted to boolean * (obviously only useful for settings that can be YES or NO) * * Usage * Configure::read('Name'); will return the value for Name, converted to boolean * * @param string $var Variable to obtain * @return bool value of Configure::$var (TRUE (on YES/yes) or FALSE (on NO/no/not set/unknown value) * @access public */ public static function bool($var) { $value = self::read($var); if (strtoupper($value) == 'YES') { # YES return true; } elseif (strtoupper($value) == 'NO') { # NO return false; } else { # unknown value # show and log error message on unknown value $msg = "\$CONF['$var'] has an invalid value, should be 'YES' or 'NO'"; flash_error($msg); error_log("$msg (value: $value)"); return false; } } /** * Used to read Config::$var, converted to bool, returned as integer (0 or 1) * @see bool() */ public static function intbool($var) { return Config::bool($var) ? 1 : 0; } /** * Get translated text from $PALANG * (wrapper for self::read(), see also the comments there) * * @param string $var Variable to obtain * @return string value of $PALANG[$var] * @access public */ public static function lang($var) { return self::read(array('__LANG', $var)); } /** * Get translated text from $PALANG and apply sprintf on it * (wrapper for self::read_f(), see also the comments there) * * @param string $var Text (from $PALANG) to obtain * @param string $value Value to use as sprintf parameter * @return string value of $PALANG[$var], parsed by sprintf * @access public */ public static function lang_f($var, $value) { return self::read_f(array('__LANG', $var), $value); } function getAll() { $output = $this->config; return $output; } /** * Checks $name for dot notation to create dynamic Configure::$var as an array when needed. * * @param mixed $name Name to split * @return array Name separated in items through dot notation * @access private */ private function __configVarNames($name) { if (is_string($name)) { if (strpos($name, ".")) { return explode(".", $name); } return array($name); } return $name; } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/DomainHandler.php0000664000175000017500000003660712510613444017515 0ustar daviddavidid); if ($domain_check != '') { $this->errormsg[$this->id_field] = $domain_check; return false; } if (Config::read('vacation_domain') == $this->id) { $this->errormsg[$this->id_field] = Config::Lang('domain_conflict_vacation_domain'); return false; } # still here? good. return true; } protected function initStruct() { # TODO: shorter PALANG labels ;-) $super = $this->is_superadmin; $transp = min($super, Config::intbool('transport')); $editquota = min($super, Config::intbool('quota')); $quota = Config::intbool('quota'); $edit_dom_q = min($super, Config::intbool('domain_quota'), $quota); $dom_q = min(Config::intbool('domain_quota'), $quota); $query_used_domainquota = 'round(coalesce(__total_quota/' . intval(Config::read('quota_multiplier')) . ',0))'; # NOTE: There are dependencies between alias_count, mailbox_count and total_quota. # NOTE: If you disable "display in list" for one of them, the SQL query for the others might break. # NOTE: (Disabling all of them shouldn't be a problem.) $this->struct=array( # field name allow display in... type $PALANG label $PALANG description default / options / ... # editing? form list 'domain' => pacol( $this->new, 1, 1, 'text', 'domain' , '' , '', '', array('linkto' => 'list-virtual.php?domain=%s') ), 'description' => pacol( $super, $super, $super, 'text', 'description' , '' ), # Aliases 'aliases' => pacol( $super, $super, 0, 'num' , 'aliases' , 'pAdminEdit_domain_aliases_text' , Config::read('aliases') ), 'alias_count' => pacol( 0, 0, 1, 'vnum', '' , '' , '', '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ 'coalesce(__alias_count,0) - coalesce(__mailbox_count,0) as alias_count', /*extrafrom*/ 'left join ( select count(*) as __alias_count, domain as __alias_domain from ' . table_by_key('alias') . ' group by domain) as __alias on domain = __alias_domain'), 'aliases_quot' => pacol( 0, 0, 1, 'quot', 'aliases' , '' , 0, '', array('select' => db_quota_text( '__alias_count - coalesce(__mailbox_count,0)', 'aliases', 'aliases_quot')) ), '_aliases_quot_percent' => pacol( 0, 0, 1, 'vnum', '' ,'' , 0, '', array('select' => db_quota_percent('__alias_count - coalesce(__mailbox_count,0)', 'aliases', '_aliases_quot_percent')) ), # Mailboxes 'mailboxes' => pacol( $super, $super, 0, 'num' , 'mailboxes' , 'pAdminEdit_domain_aliases_text' , Config::read('mailboxes') ), 'mailbox_count' => pacol( 0, 0, 1, 'vnum', '' , '' , '', '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ 'coalesce(__mailbox_count,0) as mailbox_count', /*extrafrom*/ 'left join ( select count(*) as __mailbox_count, sum(quota) as __total_quota, domain as __mailbox_domain from ' . table_by_key('mailbox') . ' group by domain) as __mailbox on domain = __mailbox_domain'), 'mailboxes_quot' => pacol( 0, 0, 1, 'quot', 'mailboxes' , '' , 0, '', array('select' => db_quota_text( '__mailbox_count', 'mailboxes', 'mailboxes_quot')) ), '_mailboxes_quot_percent' => pacol( 0, 0, 1, 'vnum', '' , '' , 0, '', array('select' => db_quota_percent('__mailbox_count', 'mailboxes', '_mailboxes_quot_percent')) ), 'maxquota' => pacol($editquota,$editquota,$quota, 'num' , 'pOverview_get_quota' , 'pAdminEdit_domain_maxquota_text' , Config::read('maxquota') ), # Domain quota 'quota' => pacol($edit_dom_q,$edit_dom_q, 0, 'num', 'pAdminEdit_domain_quota' , 'pAdminEdit_domain_maxquota_text' , Config::read('domain_quota_default') ), 'total_quota' => pacol( 0, 0, 1, 'vnum', '' , '' , '', '', array('select' => "$query_used_domainquota AS total_quota") /*extrafrom*//* already in mailbox_count */ ), 'total_quot' => pacol( 0, 0, $dom_q, 'quot', 'pAdminEdit_domain_quota' , '' , 0, '', array('select' => db_quota_text( $query_used_domainquota, 'quota', 'total_quot')) ), '_total_quot_percent'=> pacol( 0, 0, $dom_q, 'vnum', '' , '' , 0, '', array('select' => db_quota_percent($query_used_domainquota, 'quota', '_total_quot_percent')) ), 'transport' => pacol( $transp, $transp,$transp,'enum', 'transport' , 'pAdminEdit_domain_transport_text' , Config::read('transport_default') , /*options*/ Config::read('transport_options') ), 'backupmx' => pacol( $super, $super, 1, 'bool', 'pAdminEdit_domain_backupmx' , '' , 0), 'active' => pacol( $super, $super, 1, 'bool', 'active' , '' , 1 ), 'default_aliases' => pacol( $this->new, $this->new, 0, 'bool', 'pAdminCreate_domain_defaultaliases', '' , 1,'', /*not in db*/ 1 ), 'created' => pacol( 0, 0, 0, 'ts', 'created' , '' ), 'modified' => pacol( 0, 0, $super, 'ts', 'last_modified' , '' ), '_can_edit' => pacol( 0, 0, 1, 'int', '' , '' , 0 , /*options*/ '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ $this->is_superadmin . ' as _can_edit' ), '_can_delete' => pacol( 0, 0, 1, 'int', '' , '' , 0 , /*options*/ '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ $this->is_superadmin . ' as _can_delete' ), ); } protected function initMsg() { $this->msg['error_already_exists'] = 'pAdminCreate_domain_domain_text_error'; $this->msg['error_does_not_exist'] = 'domain_does_not_exist'; $this->msg['confirm_delete'] = 'confirm_delete_domain'; if ($this->new) { $this->msg['logname'] = 'create_domain'; $this->msg['store_error'] = 'pAdminCreate_domain_result_error'; $this->msg['successmessage'] = 'pAdminCreate_domain_result_success'; } else { $this->msg['logname'] = 'edit_domain'; $this->msg['store_error'] = 'pAdminEdit_domain_result_error'; $this->msg['successmessage'] = 'domain_updated'; } $this->msg['can_create'] = $this->is_superadmin; } public function webformConfig() { return array( # $PALANG labels 'formtitle_create' => 'pAdminCreate_domain_welcome', 'formtitle_edit' => 'pAdminEdit_domain_welcome', 'create_button' => 'pAdminCreate_domain_button', # various settings 'required_role' => 'admin', 'listview' => 'list.php?table=domain', 'early_init' => 0, ); } protected function beforestore() { # TODO: is this function superfluous? _can_edit should already cover this if ($this->is_superadmin) { return true; } $this->errormsg[] = Config::Lang('edit_not_allowed', $this->id); return false; } /** * called by $this->store() after storing $this->values in the database * can be used to update additional tables, call scripts etc. */ protected function storemore() { if ($this->new && $this->values['default_aliases']) { foreach (Config::read('default_aliases') as $address=>$goto) { $address = $address . "@" . $this->id; # if $goto doesn't contain @, let the alias point to the same domain if(!strstr($goto, '@')) { $goto = $goto . "@" . $this->id; } # TODO: use AliasHandler->add instead of writing directly to the alias table $arr = array( 'address' => $address, 'goto' => $goto, 'domain' => $this->id, ); $result = db_insert ('alias', $arr); # TODO: error checking } } if ($this->new) { if (!$this->domain_postcreation()) { $this->errormsg[] = Config::lang('domain_postcreate_failed'); } } else { # we don't have domain_postedit() } return true; # TODO: don't hardcode } /** * @return true on success false on failure */ public function delete() { # TODO: check for _can_delete instead if (! $this->is_superadmin) { $this->errormsg[] = Config::Lang_f('no_delete_permissions', $this->id); return false; } if ( ! $this->view() ) { $this->errormsg[] = Config::Lang('domain_does_not_exist'); # TODO: can users hit this message at all? init() should already fail... return false; } if (Config::bool('alias_domain')) { # check if this domain is an alias domain target - if yes, do not allow to delete it $handler = new AliasdomainHandler(0, $this->admin_username); $handler->getList("target_domain = '" . escape_string($this->id) . "'"); $aliasdomains = $handler->result(); if (count($aliasdomains) > 0) { $this->errormsg[] = Config::Lang_f('delete_domain_aliasdomain_target', $this->id); return false; } } # the correct way would be to recursively delete mailboxes, aliases, alias_domains, fetchmail entries # with *Handler before deleting the domain, but this would be terribly slow on domains with many aliases etc., # so we do it the fast way on the database level # cleaning up all tables doesn't hurt, even if vacation or displaying the quota is disabled # some tables don't have a domain field, so we need a workaround $like_domain = "LIKE '" . escape_string('%@' . $this->id) . "'"; db_delete('domain_admins', 'domain', $this->id); db_delete('alias', 'domain', $this->id); db_delete('mailbox', 'domain', $this->id); db_delete('alias_domain', 'alias_domain', $this->id); db_delete('vacation', 'domain', $this->id); db_delete('vacation_notification', 'on_vacation', $this->id, "OR on_vacation $like_domain"); db_delete('quota', 'username', $this->id, "OR username $like_domain"); db_delete('quota2', 'username', $this->id, "OR username $like_domain"); db_delete('fetchmail', 'mailbox', $this->id, "OR mailbox $like_domain"); db_delete('log', 'domain', $this->id); # TODO: should we really delete the log? # finally delete the domain db_delete($this->db_table, $this->id_field, $this->id); if ( !$this->domain_postdeletion() ) { $this->error_msg[] = $PALANG['domain_postdel_failed']; } db_log ($this->id, 'delete_domain', $this->id); # TODO delete_domain is not a valid db_log keyword yet $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->id); return true; } /** * get formatted version of fields * * @param array values of current item */ public function _formatted_aliases ($item) { return $item['alias_count'] . ' / ' . $item['aliases'] ; } public function _formatted_mailboxes($item) { return $item['mailbox_count'] . ' / ' . $item['mailboxes']; } public function _formatted_quota ($item) { return $item['total_quota'] . ' / ' . $item['quota'] ; } /** * Called after a domain has been added * * @return boolean */ protected function domain_postcreation() { $script=Config::read('domain_postcreation_script'); if (empty($script)) { return true; } if (empty($this->id)) { $this->errormsg[] = 'Empty domain parameter in domain_postcreation'; return false; } $cmdarg1=escapeshellarg($this->id); $command= "$script $cmdarg1"; $retval=0; $output=array(); $firstline=''; $firstline=exec($command,$output,$retval); if (0!=$retval) { error_log("Running $command yielded return value=$retval, first line of output=$firstline"); $this->errormsg[] = 'Problems running domain postcreation script!'; return FALSE; } return TRUE; } /** * Called after a domain has been deleted * * @return boolean */ protected function domain_postdeletion() { $script=Config::read('domain_postdeletion_script'); if (empty($script)) { return true; } if (empty($this->id)) { $this->errormsg[] = 'Empty domain parameter in domain_postdeletion'; return false; } $cmdarg1=escapeshellarg($this->id); $command= "$script $cmdarg1"; $retval=0; $output=array(); $firstline=''; $firstline=exec($command,$output,$retval); if (0!=$retval) { error_log("Running $command yielded return value=$retval, first line of output=$firstline"); $this->errormsg[] = 'Problems running domain postdeletion script!'; return FALSE; } return TRUE; } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/AdminHandler.php0000664000175000017500000002152712502126256017332 0ustar daviddavidid); if ($email_check == '') { return true; } else { $this->errormsg[] = $email_check; $this->errormsg[$this->id_field] = Config::lang('pAdminCreate_admin_username_text_error1'); return false; } } protected function no_domain_field() { # PFAHandler die()s if domain field is not set. Disable this behaviour for AdminHandler. } # init $this->struct, $this->db_table and $this->id_field protected function initStruct() { # NOTE: There are dependencies between domains and domain_count # NOTE: If you disable "display in list" for domain_count, the SQL query for domains might break. # NOTE: (Disabling both shouldn't be a problem.) # TODO: move to a db_group_concat() function? if (db_pgsql()) { $domains_grouped = "array_to_string(array_agg(domain), ',')"; } else { # mysql $domains_grouped = 'group_concat(domain)'; } $this->struct=array( # field name allow display in... type $PALANG label $PALANG description default / options / ... # editing? form list 'username' => pacol( $this->new, 1, 1, 'text', 'admin' , 'email_address' , '', '', array('linkto' => 'list.php?table=domain&username=%s') ), 'password' => pacol( 1, 1, 0, 'pass', 'password' , '' ), 'password2' => pacol( 1, 1, 0, 'pass', 'password_again' , '' , '', '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ 'password as password2' ), 'superadmin' => pacol( 1, 1, 0, 'bool', 'super_admin' , 'super_admin_desc' , 0 # TODO: (finally) replace the ALL domain with a column in the admin table # TODO: current status: 'superadmin' column exists and is written when storing an admin with AdminHandler, # TODO: but the superadmin status is still (additionally) stored in the domain_admins table ("ALL" dummy domain) # TODO: to keep the database backwards-compatible with 2.3.x. # TODO: Note: superadmins created with 2.3.x after running upgrade_1284() will not work until you re-run upgrade_1284() # TODO: Create them with the trunk version to avoid this problem. ), 'domains' => pacol( 1, 1, 0, 'list', 'domain' , '' , array(), list_domains(), /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ "coalesce(domains,'') as domains" /*extrafrom set in domain_count*/ ), 'domain_count' => pacol( 0, 0, 1, 'vnum', 'pAdminList_admin_count', '' , '', '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ 'coalesce(__domain_count,0) as domain_count', /*extrafrom*/ 'LEFT JOIN ( ' . ' SELECT count(*) AS __domain_count, ' . $domains_grouped . ' AS domains, username AS __domain_username ' . ' FROM ' . table_by_key('domain_admins') . " WHERE domain != 'ALL' GROUP BY username " . ' ) AS __domain on username = __domain_username'), 'active' => pacol( 1, 1, 1, 'bool', 'active' , '' , 1 ), 'created' => pacol( 0, 0, 0, 'ts', 'created' , '' ), 'modified' => pacol( 0, 0, 1, 'ts', 'last_modified' , '' ), ); } protected function initMsg() { $this->msg['error_already_exists'] = 'admin_already_exists'; $this->msg['error_does_not_exist'] = 'admin_does_not_exist'; $this->msg['confirm_delete'] = 'confirm_delete_admin'; if ($this->new) { $this->msg['logname'] = 'create_admin'; $this->msg['store_error'] = 'pAdminCreate_admin_result_error'; $this->msg['successmessage'] = 'pAdminCreate_admin_result_success'; } else { $this->msg['logname'] = 'edit_admin'; $this->msg['store_error'] = 'pAdminEdit_admin_result_error'; $this->msg['successmessage'] = 'pAdminEdit_admin_result_success'; } } public function webformConfig() { return array( # $PALANG labels 'formtitle_create' => 'pAdminCreate_admin_welcome', 'formtitle_edit' => 'pAdminEdit_admin_welcome', 'create_button' => 'pAdminCreate_admin_button', # various settings 'required_role' => 'global-admin', 'listview' => 'list.php?table=admin', 'early_init' => 0, ); } /** * called by $this->store() after storing $this->values in the database * can be used to update additional tables, call scripts etc. */ protected function storemore() { # store list of allowed domains in the domain_admins table if (isset($this->values['domains'])) { if (is_array($this->values['domains'])) { $domains = $this->values['domains']; } elseif ($this->values['domains'] == '') { $domains = array(); } else { $domains = explode(',', $this->values['domains']); } db_delete('domain_admins', 'username', $this->id, "AND domain != 'ALL'"); foreach ($domains as $domain) { $values = array( 'username' => $this->id, 'domain' => $domain, ); db_insert('domain_admins', $values, array('created')); # TODO: check for errors } } # Temporary workaround to keep the database compatible with 2.3.x if (isset($this->values['superadmin'])) { if ($this->values['superadmin'] == 1) { $values = array( 'username' => $this->id, 'domain' => 'ALL', ); $where = db_where_clause(array('username' => $this->id, 'domain' => 'ALL'), $this->struct); $result = db_query("SELECT username from " . table_by_key('domain_admins') . " " . $where); if ($result['rows'] == 0) { db_insert('domain_admins', $values, array('created')); # TODO: check for errors } } else { db_delete('domain_admins', 'username', $this->id, "AND domain = 'ALL'"); } } return true; # TODO: don't hardcode } protected function read_from_db_postprocess($db_result) { foreach ($db_result as $key => $row) { # convert 'domains' field to an array if ($row['domains'] == '') { $db_result[$key]['domains'] = array(); } else { $db_result[$key]['domains'] = explode(',', $row['domains']); } if ($row['superadmin']) { $db_result[$key]['domain_count'] = Config::lang('super_admin'); } } return $db_result; } /** * @return true on success false on failure */ public function delete() { if ( ! $this->view() ) { $this->errormsg[] = Config::Lang($this->msg['error_does_not_exist']); return false; } db_delete('domain_admins', $this->id_field, $this->id); db_delete($this->db_table, $this->id_field, $this->id); db_log ('admin', 'delete_admin', $this->id); # TODO delete_admin is not a valid db_log keyword yet, and 'admin' is not displayed in viewlog.php $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->id); return true; } # TODO: generate password if $new, no password specified and $CONF['generate_password'] is set # TODO: except if $this->admin_username == setup.php --- this exception should be handled directly in setup.php ("if $values['password'] == '' error_out") /** * compare password / password2 field * error message will be displayed at the password2 field */ protected function _validate_password2($field, $val) { return $this->compare_password_fields('password', 'password2'); } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/model/AliasHandler.php0000664000175000017500000005033113046655411017332 0ustar daviddavidnew # (for existing aliases, init() hides it for non-mailbox aliases) $mbgoto = 1 - $this->new; $this->struct=array( # field name allow display in... type $PALANG label $PALANG description default / ... # editing? form list 'status' => pacol( 0, 0, 0, 'html', '' , '' , '', '', array('not_in_db' => 1) ), 'address' => pacol( $this->new, 1, 1, 'mail', 'alias' , 'pCreate_alias_catchall_text' ), 'localpart' => pacol( $this->new, 0, 0, 'text', 'alias' , 'pCreate_alias_catchall_text' , '', /*options*/ '', /*not_in_db*/ 1 ), 'domain' => pacol( $this->new, 0, 1, 'enum', '' , '' , '', /*options*/ $this->allowed_domains ), 'goto' => pacol( 1, 1, 1, 'txtl', 'to' , 'pEdit_alias_help' , array() ), 'is_mailbox' => pacol( 0, 0, 1, 'int', '' , '' , 0 , # technically 'is_mailbox' is bool, but the automatic bool conversion breaks the query. Flagging it as int avoids this problem. # Maybe having a vbool type (without the automatic conversion) would be cleaner - we'll see if we need it. /*options*/ '', /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ 'coalesce(__is_mailbox,0) as is_mailbox' ), /*extrafrom set via set_is_mailbox_extrafrom() */ '__mailbox_username' => pacol( 0, 0, 1, 'vtxt', '' , '' , 0), # filled via is_mailbox 'goto_mailbox' => pacol( $mbgoto, $mbgoto,$mbgoto,'bool', 'pEdit_alias_forward_and_store' , '' , 0, /*options*/ '', /*not_in_db*/ 1 ), # read_from_db_postprocess() sets the value 'on_vacation' => pacol( 1, 0, 1, 'bool', 'pUsersMenu_vacation' , '' , 0 , /*options*/ '', /*not_in_db*/ 1 ), # read_from_db_postprocess() sets the value - TODO: read active flag from vacation table instead? 'created' => pacol( 0, 0, 0, 'ts', 'created' , '' ), 'modified' => pacol( 0, 0, 1, 'ts', 'last_modified' , '' ), 'active' => pacol( 1, 1, 1, 'bool', 'active' , '' , 1 ), '_can_edit' => pacol( 0, 0, 1, 'vnum', '' , '' , 0 , '', array('select' => '1 as _can_edit') ), '_can_delete' => pacol( 0, 0, 1, 'vnum', '' , '' , 0 , '', array('select' => '1 as _can_delete') ), # read_from_db_postprocess() updates the value # aliases listed in $CONF[default_aliases] are read-only for domain admins if $CONF[special_alias_control] is NO. ); $this->set_is_mailbox_extrafrom(); } /* * set $this->struct['is_mailbox']['extrafrom'] based on the search conditions. * If a listing for a specific domain is requested, optimize the subquery to only return mailboxes from that domain. * This doesn't change the result of the main query, but improves the performance a lot on setups with lots of mailboxes. * When using this function to optimize the is_mailbox extrafrom, don't forget to reset it to the default value * (all domains for this admin) afterwards. */ private function set_is_mailbox_extrafrom($condition=array(), $searchmode=array()) { $extrafrom = 'LEFT JOIN ( ' . ' SELECT 1 as __is_mailbox, username as __mailbox_username ' . ' FROM ' . table_by_key('mailbox') . ' WHERE username IS NOT NULL '; if(isset($condition['domain']) && !isset($searchmode['domain']) && in_array($condition['domain'], $this->allowed_domains)) { # listing for a specific domain, so restrict subquery to that domain $extrafrom .= ' AND ' . db_in_clause($this->domain_field, array($condition['domain'])); } else { # restrict subquery to all domains accessible to this admin $extrafrom .= ' AND ' . db_in_clause($this->domain_field, $this->allowed_domains); } $extrafrom .= ' ) AS __mailbox ON __mailbox_username = address'; $this->struct['is_mailbox']['extrafrom'] = $extrafrom; } protected function initMsg() { $this->msg['error_already_exists'] = 'email_address_already_exists'; $this->msg['error_does_not_exist'] = 'alias_does_not_exist'; $this->msg['confirm_delete'] = 'confirm_delete_alias'; $this->msg['list_header'] = 'pOverview_alias_title'; if ($this->new) { $this->msg['logname'] = 'create_alias'; $this->msg['store_error'] = 'pCreate_alias_result_error'; $this->msg['successmessage'] = 'pCreate_alias_result_success'; } else { $this->msg['logname'] = 'edit_alias'; $this->msg['store_error'] = 'pEdit_alias_result_error'; $this->msg['successmessage'] = 'alias_updated'; } } public function webformConfig() { if ($this->new) { # the webform will display a localpart field + domain dropdown on $new $this->struct['address']['display_in_form'] = 0; $this->struct['localpart']['display_in_form'] = 1; $this->struct['domain']['display_in_form'] = 1; } if (Config::bool('show_status')) { $this->struct['status']['display_in_list'] = 1; $this->struct['status']['label'] = ' '; } return array( # $PALANG labels 'formtitle_create' => 'pMain_create_alias', 'formtitle_edit' => 'pEdit_alias_welcome', 'create_button' => 'add_alias', # various settings 'required_role' => 'admin', 'listview' => 'list-virtual.php', 'early_init' => 0, 'prefill' => array('domain'), ); } /** * AliasHandler needs some special handling in init() and therefore overloads the function. * It also calls parent::init() */ public function init($id) { @list($local_part,$domain) = explode ('@', $id); # supress error message if $id doesn't contain '@' if ($local_part == '*') { # catchall - postfix expects '@domain', not '*@domain' $id = '@' . $domain; } $retval = parent::init($id); if (!$retval) return false; # parent::init() failed, no need to continue # hide 'goto_mailbox' for non-mailbox aliases # parent::init called view() before, so we can rely on having $this->result filled # (only validate_new_id() is called from parent::init and could in theory change $this->result) if ($this->new || $this->result['is_mailbox'] == 0) { $this->struct['goto_mailbox']['editable'] = 0; $this->struct['goto_mailbox']['display_in_form'] = 0; $this->struct['goto_mailbox']['display_in_list'] = 0; } if ( !$this->new && $this->result['is_mailbox'] && $this->admin_username != ''&& !authentication_has_role('global-admin') ) { # domain admins are not allowed to change mailbox alias $CONF['alias_control_admin'] = NO # TODO: apply the same restriction to superadmins? if (!Config::bool('alias_control_admin')) { # TODO: make translateable $this->errormsg[] = "Domain administrators do not have the ability to edit user's aliases (check config.inc.php - alias_control_admin)"; return false; } } return $retval; } protected function domain_from_id() { list(/*NULL*/,$domain) = explode('@', $this->id); return $domain; } protected function validate_new_id() { if ($this->id == '') { $this->errormsg[$this->id_field] = Config::lang('pCreate_alias_address_text_error1'); return false; } list($local_part,$domain) = explode ('@', $this->id); if(!$this->create_allowed($domain)) { $this->errormsg[$this->id_field] = Config::lang('pCreate_alias_address_text_error3'); return false; } # TODO: already checked in set() - does it make sense to check it here also? Only advantage: it's an early check # if (!in_array($domain, $this->allowed_domains)) { # $this->errormsg[] = Config::lang('pCreate_alias_address_text_error1'); # return false; # } if ($local_part == '') { # catchall $valid = true; } else { $email_check = check_email($this->id); if ($email_check == '') { $valid = true; } else { $this->errormsg[$this->id_field] = $email_check; $valid = false; } } return $valid; } /** * check number of existing aliases for this domain - is one more allowed? */ private function create_allowed($domain) { if ($this->called_by == 'MailboxHandler') return true; # always allow creating an alias for a mailbox $limit = get_domain_properties ($domain); if ($limit['aliases'] == 0) return true; # unlimited if ($limit['aliases'] < 0) return false; # disabled if ($limit['alias_count'] >= $limit['aliases']) return false; return true; } /** * merge localpart and domain to address * called by edit.php (if id_field is editable and hidden in editform) _before_ ->init */ public function mergeId($values) { if ($this->struct['localpart']['display_in_form'] == 1 && $this->struct['domain']['display_in_form']) { # webform mode - combine to 'address' field if (empty($values['localpart']) || empty($values['domain']) ) { # localpart or domain not set return ""; } if ($values['localpart'] == '*') $values['localpart'] = ''; # catchall return $values['localpart'] . '@' . $values['domain']; } else { return $values[$this->id_field]; } } protected function setmore($values) { if ($this->new) { if ($this->struct['address']['display_in_form'] == 1) { # default mode - split off 'domain' field from 'address' # TODO: do this unconditional? list(/*NULL*/,$domain) = explode('@', $values['address']); $this->values['domain'] = $domain; } } if (! $this->new) { # edit mode - preserve vacation and mailbox alias if they were included before $old_ah = new AliasHandler(); if (!$old_ah->init($this->id)) { $this->errormsg[] = $old_ah->errormsg[0]; } elseif (!$old_ah->view()) { $this->errormsg[] = $old_ah->errormsg[0]; } else { $oldvalues = $old_ah->result(); if (!isset($values['goto'])) { # no new value given? $values['goto'] = $oldvalues['goto']; } if (!isset($values['on_vacation'])) { # no new value given? $values['on_vacation'] = $oldvalues['on_vacation']; } if ($values['on_vacation']) { $values['goto'][] = $this->getVacationAlias(); } if ($oldvalues['is_mailbox']) { # alias belongs to a mailbox - add/keep mailbox to/in goto if (!isset($values['goto_mailbox'])) { # no new value given? $values['goto_mailbox'] = $oldvalues['goto_mailbox']; } if ($values['goto_mailbox']) { $values['goto'][] = $this->id; # if the alias points to the mailbox, don't display the "empty goto" error message if (isset($this->errormsg['goto']) && $this->errormsg['goto'] == Config::lang('pEdit_alias_goto_text_error1') ) { unset($this->errormsg['goto']); } } } } } $this->values['goto'] = join(',', $values['goto']); } protected function storemore() { # TODO: if alias belongs to a mailbox, update mailbox active status return true; } protected function read_from_db_postprocess($db_result) { foreach ($db_result as $key => $value) { # split comma-separated 'goto' into an array $db_result[$key]['goto'] = explode(',', $db_result[$key]['goto']); # Vacation enabled? list($db_result[$key]['on_vacation'], $db_result[$key]['goto']) = remove_from_array($db_result[$key]['goto'], $this->getVacationAlias() ); # if it is a mailbox, does the alias point to the mailbox? if ($db_result[$key]['is_mailbox']) { # this intentionally does not match mailbox targets with recipient delimiter. # if it would, we would have to make goto_mailbox a text instead of a bool (which would annoy 99% of the users) list($db_result[$key]['goto_mailbox'], $db_result[$key]['goto']) = remove_from_array($db_result[$key]['goto'], $key); } else { # not a mailbox $db_result[$key]['goto_mailbox'] = 0; } # editing a default alias (postmaster@ etc.) is only allowed if special_alias_control is allowed or if the user is a superadmin $tmp = preg_split('/\@/', $db_result[$key]['address']); if (!$this->is_superadmin && !Config::bool('special_alias_control') && array_key_exists($tmp[0], Config::Read('default_aliases'))) { $db_result[$key]['_can_edit'] = 0; $db_result[$key]['_can_delete'] = 0; } if ($this->struct['status']['display_in_list'] && Config::Bool('show_status')) { $db_result[$key]['status'] = gen_show_status($db_result[$key]['address']); } } return $db_result; } private function condition_ignore_mailboxes($condition, $searchmode) { # only list aliases that do not belong to mailboxes if (is_array($condition)) { $condition['__mailbox_username'] = 1; $searchmode['__mailbox_username'] = 'NULL'; } else { if ($condition != '') { $condition = " ( $condition ) AND "; } $condition = " $condition __mailbox_username IS NULL "; } return array($condition, $searchmode); } public function getList($condition, $searchmode = array(), $limit=-1, $offset=-1) { list($condition, $searchmode) = $this->condition_ignore_mailboxes($condition, $searchmode); $this->set_is_mailbox_extrafrom($condition, $searchmode); $result = parent::getList($condition, $searchmode, $limit, $offset); $this->set_is_mailbox_extrafrom(); # reset to default return $result; } public function getPagebrowser($condition, $searchmode = array()) { list($condition, $searchmode) = $this->condition_ignore_mailboxes($condition, $searchmode); $this->set_is_mailbox_extrafrom($condition, $searchmode); $result = parent::getPagebrowser($condition, $searchmode); $this->set_is_mailbox_extrafrom(); # reset to default return $result; } protected function _validate_goto($field, $val) { if (count($val) == 0) { # empty is ok for mailboxes - this is checked in setmore() which can clear the error message $this->errormsg[$field] = Config::lang('pEdit_alias_goto_text_error1'); return false; } $errors = array(); foreach ($val as $singlegoto) { if (substr($this->id, 0, 1) == '@' && substr($singlegoto, 0, 1) == '@') { # domain-wide forward - check only the domain part # only allowed if $this->id is a catchall # Note: alias domains are better, but we should keep this way supported for backward compatibility # and because alias domains can't forward to external domains list (/*NULL*/, $domain) = explode('@', $singlegoto); $domain_check = check_domain($domain); if ($domain_check != '') { $errors[] = "$singlegoto: $domain_check"; } } else { $email_check = check_email($singlegoto); if ($email_check != '') { $errors[] = "$singlegoto: $email_check"; } } } if (count($errors)) { $this->errormsg[$field] = join(" ", $errors); # TODO: find a way to display multiple error messages per field return false; } else { return true; } } /** * on $this->new, set localpart based on address */ protected function _missing_localpart ($field) { if (isset($this->RAWvalues['address'])) { $parts = explode('@', $this->RAWvalues['address']); if (count($parts) == 2) $this->RAWvalues['localpart'] = $parts[0]; } } /** * on $this->new, set domain based on address */ protected function _missing_domain ($field) { if (isset($this->RAWvalues['address'])) { $parts = explode('@', $this->RAWvalues['address']); if (count($parts) == 2) $this->RAWvalues['domain'] = $parts[1]; } } /** * Returns the vacation alias for this user. * i.e. if this user's username was roger@example.com, and the autoreply domain was set to * autoreply.fish.net in config.inc.php we'd return roger#example.com@autoreply.fish.net * @return string an email alias. */ protected function getVacationAlias() { $vacation_goto = str_replace('@', '#', $this->id); return $vacation_goto . '@' . Config::read('vacation_domain'); } /** * @return true on success false on failure */ public function delete() { if( ! $this->view() ) { $this->errormsg[] = Config::Lang('alias_does_not_exist'); return false; } if ($this->result['is_mailbox']) { $this->errormsg[] = Config::Lang('mailbox_alias_cant_be_deleted'); return false; } if (!$this->can_delete) { $this->errormsg[] = Config::Lang_f('protected_alias_cant_be_deleted', $this->id); return false; } db_delete('alias', 'address', $this->id); list(/*NULL*/,$domain) = explode('@', $this->id); db_log ($domain, 'delete_alias', $this->id); $this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->id); return true; } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/LICENSE.TXT0000664000175000017500000000421511555046231014652 0ustar daviddavid Postfix Admin is a Web Based Management tool created for Postfix. It is a PHP based application that handles Postfix Style Virtual Domains and Users that are stored in MySQL. Copyright (c) 2005 High5! (Mischa Peters and others) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Postfix Admin version 2.1.1, Copyright (c) 2005 High5! (Mischa Peters & Contributors) Postfix Admin comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. High5!, hereby disclaims all copyright interest in the program `Postfix Admin' (which makes passes at Postfix, PHP and MySQL) written by Wietse Venema, PHP Group and MYSQL AB. Contributors: Mihau, Tarvin, SteveB, DJTremors, WhiteFox, David Osborn, David Goodwin (GingerDog), Christian Boltz (cboltz) and GregC and others. Postfix Admin uses some libraries that come with a different license. a) libraries shipped with PostfixAdmin - the Smarty templating engine is licensed under the GNU LESSER GENERAL PUBLIC LICENSE Version 3 (see smarty/COPYING.lib) - the CLI (commandline interface) is based on CakePHP which is licensed under the MIT license. b) libraries not shipped with PostfixAdmin - the XMLRPC interface and the squirrelmail plugin use the Zend Framework which is licensed under the New BSD License (3-clause), see http://framework.zend.com/license - PHPUnit (used in tests/) is licensed under the BSD License (3-clause). postfixadmin-3.0.2/templates_c/0000775000175000017500000000000013046702635015471 5ustar daviddavidpostfixadmin-3.0.2/list.php0000664000175000017500000001016212502124444014645 0ustar daviddavidwebformConfig(); $list_admins = array($username); if ($is_superadmin && $formconf['required_role'] != 'global-admin') { # 'simulate admin' dropdown doesn't make sense for superadmin-only modules $list_admins = array_keys(list_admins()); } if ($is_admin) { authentication_require_role($formconf['required_role']); } else { if (empty($formconf['user_hardcoded_field'])) { die($handlerclass . ' is not available for users'); } } $search = safeget('search', safesession("search_$table", array())); $searchmode = safeget('searchmode', safesession("searchmode_$table", array())); if (!is_array($search) || !is_array($searchmode)) { # avoid injection of raw SQL if $search is a string instead of an array die("Invalid parameter"); } if (safeget('reset_search', 0)) { $search = array(); $searchmode = array(); } $_SESSION["search_$table"] = $search; $_SESSION["searchmode_$table"] = $searchmode; if (count($search)) { $handler->getList($search, $searchmode); } else { $handler->getList(''); } $items = $handler->result(); if (count($handler->errormsg)) flash_error($handler->errormsg); if (count($handler->infomsg)) flash_error($handler->infomsg); if (safeget('output') == 'csv') { $out = fopen('php://output', 'w'); header( 'Content-Type: text/csv; charset=utf-8' ); header( 'Content-Disposition: attachment;filename='.$table.'.csv'); print "\xEF\xBB\xBF"; # utf8 byte-order to indicate the file is utf8 encoded # print "sep=;"; # hint that ; is used as seperator - breaks the utf8 flag in excel import! print "\n"; if (!defined('ENT_HTML401')) { # for compability for PHP < 5.4.0 define('ENT_HTML401', 0); } # print column headers as csv $header = array(); $columns = array(); foreach ($handler->getStruct() as $key => $field) { if ($field['display_in_list'] && $field['label'] != '') { # don't show fields without a label $header[] = html_entity_decode ( $field['label'], ENT_COMPAT | ENT_HTML401, 'UTF-8' ); $columns[] = $key; } } fputcsv($out, $header, ';'); # print items as csv foreach ($items as $item) { $fields = array(); foreach ($columns as $column) { $fields[] = $item[$column]; } fputcsv($out, $fields, ';'); } fclose($out); } else { # HTML output $smarty->assign('admin_list', $list_admins); $smarty->assign('admin_selected', $username); $smarty->assign('smarty_template', 'list'); $smarty->assign('struct', $handler->getStruct()); $smarty->assign('msg', $handler->getMsg()); $smarty->assign('table', $table); $smarty->assign('items', $items); $smarty->assign('id_field', $handler->getId_field()); $smarty->assign('formconf', $formconf); $smarty->assign('search', $search); $smarty->assign('searchmode', $searchmode); $smarty->display ('index.tpl'); } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> postfixadmin-3.0.2/DOCUMENTS/0000775000175000017500000000000013046702635014532 5ustar daviddavidpostfixadmin-3.0.2/DOCUMENTS/HORDE.txt0000664000175000017500000000250710716665746016154 0ustar daviddavidHorde integration with Postfixadmin This is taken from the following thread : https://sourceforge.net/forum/forum.php?thread_id=1869141&forum_id=676076 Namely : "Hi, people, I was wondering if anyone was using PA with Horde3. I want my users to be able to change teir password from inside Horde, so I was wondering if anyone has implemented a custom hook or defined a SQL query to make the password change possible. " Solution : "Hi, that works for me without any hook - with the SQL driver. I connect through IP to localhost. You can also try socket connection... my horde/passwd/config/backends.php looks like: $backends['sql'] = array ( 'name' => 'Mail SQL Server', 'preferred' => '', 'password policy' => array( 'minLength' => 3, 'maxLength' => 8, 'maxSpace' => 0, 'minUpper' => 1, 'minLower' => 1, 'minNumeric' => 1, 'minSymbols' => 1 ), 'driver' => 'sql', 'params' => array( 'phptype' => 'mysql', 'hostspec' => '127.0.0.1', 'port' => '3306', 'protocol' => 'tcp', 'username' => 'postfix', 'password' => 'yourpostfixdbpassword', 'encryption' => 'crypt-md5', 'database' => 'postfix', 'table' => 'mailbox', 'user_col' => 'username', 'pass_col' => 'password', 'show_encryption' => false ) ); " Thanks to 'Kope' for the solution, and of course Luis Hernán Otegui (slimshady76) for asking the question. postfixadmin-3.0.2/DOCUMENTS/POSTFIX_CONF.txt0000664000175000017500000001405712363545506017246 0ustar daviddavid#!/bin/bash content=" Postfix configuration for use with PostfixAdmin ----------------------- Your installation of Postfix MUST support either MySQL or Postgres lookup tables. You can verify that with 'postconf -m' Its generally recommended to use proxy as well (which should also appear in postconf -m) Three main.cf variables are involved: virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf # if you let postfix store your mails directly (without using maildrop, dovecot deliver etc.) virtual_mailbox_base = /var/mail/vmail # or whereever you want to store the mails # Additional for quota support virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later. virtual_overquota_bounce = yes Where you chose to store the .cf files doesn't really matter, but they will have database passwords stored in plain text so they should be readable only by user postfix, or in a directory only accessible to user postfix. This isn't necessarily all you need to do to Postfix to get up and running. Also, additional changes are needed for the vacation autoreply features. ------------------------- Contents of the files These are examples only, you will likely have to and want to make some customizations. You will also want to consider the config.inc.php settings for domain_path and domain_in_mailbox. These examples use values of domain_path=YES and domain_in_mailbox=NO You can create these files (with your values for user, password, hosts and dbname) automatically by executing this file (sh POSTFIX_CONF.txt). Please note that the generated files are for use with MySQL. If you are using PostgreSQL, you'll need to do some changes to the queries: - PostgreSQL uses a different implementation for boolean values, which means you'll need to change active='1' to active='t' in all queries - PostgreSQL does not have a concat() function, instead use e.g. .... alias.address = '%u' || '@' || alias_domain.target_domain AND .... mysql_virtual_alias_maps.cf: user = postfix password = password hosts = localhost dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = '1' #expansion_limit = 100 mysql_virtual_alias_domain_maps.cf: user = postfix password = password hosts = localhost dbname = postfix query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1' mysql_virtual_alias_domain_catchall_maps.cf: # handles catch-all settings of target-domain user = postfix password = password hosts = localhost dbname = postfix query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1' (See above note re Concat + PostgreSQL) mysql_virtual_domains_maps.cf: user = postfix password = password hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' #query = SELECT domain FROM domain WHERE domain='%s' #optional query to use when relaying for backup MX #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1' #expansion_limit = 100 mysql_virtual_mailbox_maps.cf: user = postfix password = password hosts = localhost dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' #expansion_limit = 100 mysql_virtual_alias_domain_mailbox_maps.cf: user = postfix password = password hosts = localhost dbname = postfix query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1' (See above note re Concat + PostgreSQL) # For quota support mysql_virtual_mailbox_limit_maps.cf: user = postfix password = password hosts = localhost dbname = postfix query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1' ------------------------- More information - HowTo docs that use PostfixAdmin http://postfix.wiki.xs4all.nl/index.php?title=Virtual_Users_and_Domains_with_Courier-IMAP_and_MySQL http://wiki.dovecot.org/HowTo/DovecotLDAPostfixAdminMySQL " # end content # generate config files out of this file # to do this, run sh POSTFIX_CONF.txt POSTFIX_CONF="$0" map_files="`sed -n '/^mysql.*cf:/ s/://p' < \"$0\"`" tmpdir="`mktemp -d /tmp/postfixadmin-XXXXXX`" || { echo "Error: could not create tempdir" >&2 ; exit 1; } echo $tmpdir echo 'Database host? (often localhost)' read hosts test -z "$hosts" && hosts=localhost echo 'Database name?' read dbname test -z "$dbname" && { echo "Error: you did not enter a database name" >&2 ; exit 1; } echo Database user? read user test -z "$user" && { echo "Error: you did not enter a database username" >&2 ; exit 1; } echo Database password? read password test -z "$password" && { echo "Error: you did not enter a database password" >&2 ; exit 1; } for file in $map_files ; do ( echo "# $file" sed -n "/$file:/,/^$/ p" < "$POSTFIX_CONF" | sed " 1d ; # filename s/^user =.*/user = $user/ ; s/^password =.*/password = $password/ ; s/^hosts =.*/hosts = $hosts/ ; s/^dbname =.*/dbname = $dbname/ ; " ) > "$tmpdir/$file" done echo "Config files have been written to $tmpdir. Please check their content and move them to /etc/postfix/sql/." echo "Do not forget to edit /etc/postfix/main.cf as described in $POSTFIX_CONF." postfixadmin-3.0.2/DOCUMENTS/screenshots/0000775000175000017500000000000013046702635017072 5ustar daviddavidpostfixadmin-3.0.2/DOCUMENTS/screenshots/postfixadmin-admin-create-domain.jpg0000664000175000017500000020561110676263533026107 0ustar daviddavidÿØÿàJFIFÿíPhotoshop 3.08BIMÿâøICC_PROFILEèapplmntrRGB XYZ × :acspAPPLöÖÓ-applrXYZ,gXYZ@bXYZTwtpthchad|,rTRC¨gTRC¸bTRCÈvcgtØndinì>desc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀ¿ò"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔø?>§ðÃâׄô_ëV:Ÿ†gšÛZÕ«ê:yÞk¿´`^ÌŒRApFìg’0å¢mvoÖݼ¼ô×Míw›WÚé}îßzíÛ]“gÓ¾<øýsáøs@ð®®x“Rñ¼÷È-f†íma0¬“Hó:ƒÍÄ@*䜞˜®¯Ã>1ŸÄú½òC¬Ø‹€H‚ö ñà‘ó¡åzgèE|ÕáÙßÁ>8ø¡ðöúÃáÓÛøvêVóEáù,ÖÚání G,rÆ¥³Þ2‚>`Ò2äÖF¥ðÇÆw?~é4ÝwCø™¥ÇtÖZ½Ü/ ¶l¼è¯HØ8˜yH°°,[l˜2ASܵµÕÿéM~Jÿ‘ýýôÓô¿ç§á¹õßö¥Çüõ»®'Fý¥t ã–¯ðïLÔ¯Äú%Œz…Ô~Eöð<°# ßÿ³ô–Þýž4Ù-4é2iÖ’É{§ßA$š”—JY®¸ÍÄ’Kæ0‘A— ¼0¯Ò> üGðü"?µ;(.õ¸µÙu½kL±±¹}]íµ6Ž+‹g"B²‹x¼¬ ³.1ƒº¬½§+zwóz/—Vû/1s^Ÿ5µíé«ùì­ÝùTüJø²¿ t;[ýYu+ˆîõ+-0,;w+Ý\ÇnŒwò†•Iï€q“ÅtUœ ×Y>õñ^µàÔßxÓ[Ñ< k~…eñGH¼Óm-­¤[xl¼» '’/Ú ùÎ0k+]øtš…׋,ôKâ¸þ)A-­ÑIÞ[M4ßD²´ Ò;wˆÈde\X.wúµò¿³ÿäßþÅ/vïúûüŠûÑõ§ö¥Çüõ»£ûRãþzÝ×?ã};\Õ4QÃýV ÿÍV7š{_FP}åòÖhŽOmÜzgt¿iZdÑüDÖ-µ«¶˜´SYé­`‘ǵ@FFš]͸1ݸp@Ç) ö¬ùÇuŸ­Ú·ÿ]u_ø_áö¡Š´D¶ð¿Š­þ.Aã7»Ö|HÚ|éoq¥ý­Ý÷jyRÛ½™Ž4¶åX*ì …†Äÿ ¿á ø?ñÄRxï]ñ6»â]FÎe¿°¸½é’êÇæ[d"I­–0³ùàœüÄÒ¾—~ûoáïoÒϱMYÛÏÿ’ÿ/ÑõPÕnÈšèÑý«>?×]~uñ_ÿ‡Z¾¹ð³]𜚋ôÍ9þ#i—ÖÐÙè·zQis5±y-P3hò“³"ɾ-ĸFjèµñ¾yw¡ið²&£¥:´%´D,fä†xÐá¶H¤•/¢o­¿ïéÍø15«]“úU­ÞöÓÕZjÜc>uÕU¸#"k£šøjÿŸ‰|ñ×৆õ]A³ñæ6¥ É§¹M]:ØÉiñJ¦D,cÚ+«Ê1׸þÌwðª¾ØiÐEãrÓUñ ÖÖ¡<+s£Ã£G*™p-nÌ‚ÉYUÉ U ÓŠæ_wãoóü+FÖ×þÿËñGºjÏœ®²}èþÕ¸Î<ë¬×Ä÷þ´ñ‡‹¼T¾ðç‹î~$Cñ ¶“® +¦³ÓmÒî&œ¥çúˆ#‰ÖHò­#6 >V´4ˆµŸøl/x‘ü«è.¾&Ôl5‹‹ Þ %¶’)¡¶’ïRÜËyްH6F#€mÞ˵KM7íó+ýê/ÿn·ÈrN.K³kî¿çm=O©þü[_о ‹[Ò“S´‚[››aåwƒÄ1ùI-#ž„gŠèN«8i®€ú×Äþ<øSâ{¯xhú“øZÖ÷ÄCU´ºðÍÆ»Í~ík<Úl2Å+ƒ›²U°ÈѸ0×ñG†ü?>é_,­þÕŸ8ó®²}ëžøyñh|DƒY’Â=NÔhºµÎ“'œW÷mg]¤ü§9Áõ¾Dðç…,<_ã+‡ð7†|bß->'ÝÈž!7BÎÓO‹T‘®½$Cä6&·Vù¤s”$î­¿Œ? üU}á–Æ•¨ËáÔø‰©ßkwŸWŽêÕÑżï§Ç$ow”£a `í“ Šˆ¶ÒvÝ_ñ‡_I?š}'âº;}Ê}=b¾õÜû ûRãþzÝÒjÎN×Yõ㟳ýÜžøQá? Ø'Œõoí}¦¡s¡\iñé©Èñ¥ÄWÉo]±DqeTìkÆþü>¹¶ý¼E¥øSÁÞ.Ò~97‡î­õmjëNž+Jàºy¢=]³¦R‹l§n€¡p*JÒk·õøuíæ(ûÉzÛúý?cVsÒk¯Î—ûRãþzÝ×ÌŸ,ôÿüKÕ>ºÒ|!ãY¼qàK;=!,té$ÅÊÿ2)Ü|–ì‚æ&!Ø‚saLÔ|‘æë®Ÿ}¾û]y48.y$ßoÆ×û¯¯¡ï ñgʼn<$#ÔþÕ’º¹¸Êù%f‹g]Û²¹éŒµÑj\Ï[ºùã'Ã/kz¦‹'†4ÝzçH¶ðVˆl-ÒKk½fÝ. OcorqåLW%£áÝr£Ýº¾Ÿð…审á]6}ÓP°²–Ú6‚Ú{W´’Ý6¨Ð¸ Q°€F1Š¥³]SkÖÒi?š_Ÿ•óR»¿F“ô¼bÚûÛü>[?Ú—óÖîíKùëwUÿð"ü¤QcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿûß¶›g-Æ£w4ð!’Ydp©’ÌÇ€’kÌÇí·à™¹Óõ/ßD~ìö^Õ. z¤±Z²8÷REMûVxRÿÆß5í;ö÷·sËöy^Þ0 ÜÃÌRMƒÔ¼I"ßv;×)á?Ú#áU‡‡í`Ô>)øDš(µåìV“Ûq÷^)J²‘è@ •¿m¿ÃΡ©x®Æ!÷§½ðÆ©kcÕå–ÕQG¹ W©h¾+kˆ!ºÓ®$º·¸E’)ƒ¤ŠFC)A"¼#Å´?½CÃ×péÿü?­Í$eVÆÎú+¹îsü)eÉô×Wû)xRÿÁ?ô;ÄV÷¶“Åö‰RÞ@ÛA%̲CФO‘Ûn;P¸Gâø kæ ŽxïEr_øE`ÂAâŸú&Þ6ÿÀíÿ“ëYе={P7—ß ½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøHøHøHøHøH•g#K§37—!g’gx$òÔýÛðWão…ÿh‡V>+øAªÅ«è—åÑ%Thä†Db’C4NÃ*:²¼nªÊÀ‚¯Â/†ÿµ\ðQ_ŽPxÓö„Ô|5û>ø—ÆúÿöÓêwMq£ßßÛè6ëmÎñŠwáfÞ¬¨¡¤kþÄÿÁ4¿gO~̳xoâ´E¾½>¹©ê7K½kÛWI®¡t™£›0ˆ‰Ê.F8®J¿´Ÿ´·'NþŒú,ÖJÁᾧα /h¹]ÕÔ¢îß[4íÒËFß¿ÑEÖ|èQEQEQEQE|ÁðÓþ 3û6|`ý²ngï‡_?´~.Újº–‰.ƒÿþ©ËÍ=g{ȾÕ%ªÛ-m.á.ÖÙò–Êäéú+#â4Ÿ…žÖüOãÛÈôí ÖêšÜ€”µ¶‚6–YáQŽ=+ñËÃÿðwWˆhˆšæ•û~Æß>1éº)÷~§7ÛRb©,ö–Zuß©Æd=ÏûIE~`~Í?ðrü4GüKRý’áMcÿgø¯Ä~ÿ„¯þß´yŸÙ_Içý‡ì+;ìÙçžoÞ}¿7éýQEQEQ^=ûl~ÕÿðÇ ôÿ`ÂEöíZ=/ìßnû&ÍðÍ.ýþ\™Ç‘¸{9ãØh¯?ý–¾:ÿÃK|мmý—ý‹ýµöô/´ý§Éò®%‡ýfÄÝŸ+wÝÝŽq“èQEQ_/|Lÿ‚’ºý³-¾ÿÂöÏ´jÚn—ý­ý¯åíûbÀÛü çgÚ1·Í·¨ÏPÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_›ßðqïí&~~Í––zEÄ1j:]•÷‰á/±„Wj©¦éÅ•²‹ÍV;…›qò×é ;ßðs'Ç)>5þÔ#Á^›í]r <*³ÑíË?èÚŽ±t‡ÔØîÐÿÑý¯~'ørÂÅžÞ!ñt0]Êg¼[V²6‘ÛÛFDF!r-d}9ÿ«Ê,¼ÿeWNÿÓF±_~ÏðZ-CöWÿƒvgøão„>=}Câ&‹â Áž*ŽÖ?øGµM?P½¼ŠîF¸/¿íÍ5ôb%FÉHÉ*€?W¿à…ð\5ÿ‚‡þÁÞ;ñÇí?›¡ø³à²<ž/¹°ˆ¥­Í’ÛÉqúE’c,\Œ7BÅp*ü9ðþ û{Áqi¯èŸðK;ß|ð_„amq¬ØÁvmíäv[u¼¸žÚè½Ä»$!a…TÛŸ—sz/ü7ÿ—ñ¦ÿºý¡âý l5/ËûMéáí:ÖþÝ¢º·Ó–ÆòÙ/^à wÔ¦*˰ù]Iøçþ 7û\øËþ Šý§>,øOþ !ðƒÇÃAñ¼ví}£Y¤ÂYì^ãÈšÎYž(.­ä[¹²Ë( …ã!”}ÿÐÿ‚þü{øsÿ2oÙ3þ í¦ø~ûÄ×zÀðõ§ˆ´ËXí&·Ô[ R°Ïor!¤q°3!`A!8ÏÚOþ QûZþÖŸðVO‰?³×ì/ñ#áÀ 'áéVÚŒ–Ò%ÕMÀ·‘ÞâòÞã|²ÈYã†Aò†Nv3׉~Âÿ³ßÅ?ø-×üîÚ¦/‡¾ ð?ÂźoŠäÔõ;vŠ+KŠÝ,mb€·}ŠÛÌX‹ìN6îôø+íIûøçö¿ø‰oÿ&ý‘~:x[ƺ.¿{£/‹ü*Eªø¦ YÞ/ñ4ö±J&Š(äW)!ÚÊŽ ÷Ÿìa¢ÁH¥Ó¾%xoö¨ñ·ÁoÚjßµVð´!nÑÙxœùQéætKdl<Éå|ÙÈ?rÎv?àÇì‰ðÓö—׿à¾ú·†>üBð~‹ûO§|YosâëÛhßF“TŠH꓈Œ‰å̉z}eL$xÊ}—ÿÒø ÆsÁ_µ_~Á:Åÿ~ÉÍgzu4ñ{ƒÌmdVÝ&x”[Kuöß-ÐG¹ÒÀ³ ìÞ5ñâ©ÿeÿƒ›|[ñ£öªðW‹åð„^<ñ?ˆmŽŸf»õk ^õ†k9&d†b£PBÃÌhÝ §?¶çÀ?ÛóÃðCo‹ºíñ¿á†½ñ ÂïYÖ|OªXX–º€ÓÃó-Þ“ ®‘[ÇœJêâ8Øé+÷Gåü}ðköÉø¶~2Ÿø$ŸÅ‡ÿ Οý‰ÿ Wü$öq\iïþÐû‘æi—›|½—›±åçÌO¿—÷ãoí­á_ø(—üã_Æ?‚– Òü3ã…^4û®·0_ÅökMFÎO5!–XÆd¶²6T©89óƒþ cÿ›¢ÿ¹SÿsTÐ~ÃßðYŸÚOãü·­~Ïß~$hü"´øã]-þý.–z|«ÙÅö¨íVäùminww6Ϙ¶[<çü#þ cûyÁ¿ný)üGñ7þÁPþÕðê_øWG·‹U³IO¥]\ÛY$±Ï°C"2³+G Á%Àÿàšò¹'ˆÿìªüGÿÒ]vµ?àäø*¯ÿYý¯ü7û/þÄVÏ⟠ø[Ä gX*ÊÞ*ñn·Ì/Óìð %\¬ZY (#`íðGoø)‡íåÿ™ý»µY<;ñ7þÿÁPþÕñz…t{ˆ´«7´U­ÍÍ“Ë$ò($vfUY$9!Q¿ þe¿àÛÏø)æ±ÿ¢ý°üKû/þÛÖÏáo x§Ä g3_ªÄÞñí€4¯ÓìóˆâŸ%T¬RÈÇõ“ãßü{â'Âßø*MÁèÞ ›Â—^#䇻¸´¹m@E}›JÂE¹ïæM§ËÀÂä79âÇfrèÆu¶“QVîïþGÓð·æc^¾.IÊ•9U—3·¹íÝûËCÖ¿jï|pÑ~'êpøÇ¿ ~xE_Ù—> ¼‚›áä¡•ˆ–9G™|«Â޽O“~ÍðQˆ:7íE§ü=ø÷­xgÆš~­}˜š¶`xÖYBù/ Öác‘ :«¹= •>3ûQhOá/ø(V³}ûYh^"×|/{«Í4pZ3,·ö$0¶Ky7(!ˆVq— ×;á½7MÒࢠ‡ÁþÔ<¤Ÿh’Ùè×ÒI%ͤ/-³¡ÈÌÁ¤V•,vù˜è+´ùƒí¯ø)ŸíݬþËhþøJ-cñ&µ ^KwkÞ ñ‡¾ xbÆëPÓ,ôïì­DÁÙl–Ic‘Àä#yÎ7t@?xgÏÿnïÛ^ÚÏöjðºhÞ×t­?OÕ!“TÔ®ãU´kï³Ì« »‚|ÀTÎĤÐÒ_±ßŠoü ÿ’ß…§û.©£ø_¾³›b¿“4W®µVÃ(8 ƒŽA¯ý•kOÚ_öœ°ñ^—ðë]Ñ/¯´ëxnÎ¥¨ØÛAö`òaX ÚòLq1XårM{ìÏÿ(hÔ¿ìTñ'þ¾¯>ÿ‚~)Ü'ÿohö]ÿ‚|wý£fŸÀ^ÿ„nûÅwJn£ñü iöè˜dŠ$ØÄ³D„8,AVÈ+Ù~Âÿ·oÄoþÔ׿ ?i›=^ðËyf—1ÛE–·V¡ÙÓ0ª£¡Ê>îrçä¿ðEŸÚ§_Ïo \ée/ìÏÿ)—Ô¿ìkñ'þо PøåûgüKðwüÆËá÷‡6†ß_Ó­õ£c’‹4K ÷À`+áø.˜Çü*ÜÔ[ÿl«ì/Ù3þM_áŸýŠš_þ‘Å@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ ÿÁG¿à–þ Ö¾xãâ7Âß xÏÂú^±â]7Ã÷|š»kWìnµ mí$B/í庹“hŽÞ$3 ¶ìI ÷eø[ûÁEt/Œº¼ž ýŒÿfôøã8f6¶íâéþ±˜*‚Ò ;¼^ü­¸lX™¾Qós_NþÔðMOÚßöôø/gàïž9ø ð÷Á«©Xë3øOÂúN©;ÜIk:NI¬<é4¾ÿâ(ì*+ãßøQßè¡Üàúûÿˆ£þwÆ_ú(wø>¾ÿâ(ì*+ãßøQßè¡Üàúûÿˆ£þwÆ_ú(wø>¾ÿâ(ì*+ãßøQßè¡Üàúûÿˆ­‡Ÿ>,i~?Ðî|Gã©ï4û}BÞ[¨µy ž%‘K¦Ö]­•`ðsÍ}UEqÿ4=gÄŸ µk/‡ú‹iZ¼ÞOÙî–w€Å‰£fùã†T0ã®qÐ×Í¿ð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ\À=YðßÂm&Ëâ¢Ú®¯ö‹¦ç2æi~yc…*9éŒtà¿þ|XÕ<®ÜøsÇSÙé÷…Ͱ jò1M#Mª»W @ÀàcŠúªŠø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû Šø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû Šø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû Šø÷þwÆ_ú(wø>¾ÿâ+cáçÁÏ‹_ô;Ÿøê{Í>ßP·–ê­^H'‰dRéµ—keA<ó@UQ\ÇÍYñ'ÂmZËáþ¢ÚV¯7“ö{¥à1bhÙ¾xÁa• 8ëœt5óoü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTW›~˾ñ7„<ymñSY}sP}AåŽv»–ä¤F8€MҀà ®p8ù½Íy¿ÇÏ…_üIñkV½øã)´­"o'ìö««]@"Ä1«|‘©Q– xëœõ4ôñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄW¼þ˾ñ7„<ymñSY}sP}AåŽv»–ä¤F8€MҀà ®p8ù½ÍzMówÇÏ…_üIñkV½øã)´­"o'ìö««]@"Ä1«|‘©Q– xëœõ5ÇÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñì?²¼eàÏíÿø[~!“^ûOÙþɺþ{¯#o›¿ýhs¹:uÛÏA@ÃEx7íGðãÇþ/ñýÏ¿K¡é駤R@ºÍ°yD’’ûbR§*È2yù}…y·ü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWðCÖ|7ð›I²ø¨¶««Ãç}¢é§y̹šF_ž@áJŽzcx/Ä?ƒŸ5Oë·>ñÔöz}Æ¡q-¬Z¼ŒAHÅj®ÕÂ08â€>ª¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠúKà‡¬øoá6“eñQmWW‡ÎûEÓNó™s4Œ¿<€1•ôÆ: ì(¯•~!üø±ªxÿ]¹ð玧³Óî5 ‰m`ÕäbšF(›Uv®ÀÇÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöðòÆ÷Kð‡mâ;ƒy¨[éöñ]Ndi ò¬j÷7ÌÙ`NO'<ÖÅQEQEQEQEÇø§þCÓÿÀô]…qþ)ÿôÿðýP}Q@Q@Q@XÒä+mÿ]SùНV4Ÿù Û×Tþb€:ÿÈ øþ„+®ÃÅ?òŸþÿ¡ ã袊(¢Š(¢Š(¢Š(°ð·ü€ ÿèF¹}[þB·?õÕÿ™®£Âßòƒþÿ¡åõoù Üÿ×Wþf€+ÑEQEQEU'þB¶ßõÕ?˜ªõcIÿ­·ýuOæ(¨ñOü€§ÿ€ÿèB¸úì€ (¢€ (¢€ (¢€:È*Oúê’Ö?Šä=?üÿA±à¯ùIÿ]OòZÇñOü‡§ÿ€ÿè"€3袊(¢Š(¢Š(¢Š+¨ðWü‚¤ÿ®§ù-rõÔx+þAR×Sü–€1üSÿ!éÿà?ú¬úÐñOü‡§ÿ€ÿè"³è¢Š(¢Š(¢Š(®ƒÀ¿òõÿÿÙ«Ÿ®ƒÀ¿òõÿÿÙ¨¿¿ä+ýrÍ«¶k…… 8ÈÇ4õM.ÉüÝŸßËó¾ËqY¶ú?Áiÿðß§Bk/©o7WºaC!“J»An@Iœ˜†ÈX°ÄÍ„=š´uŽ:7„ouUñìGiªG¥[¥¬73É+Ú¥À£H‰ó ³x#o;‰QŸã?€_ð—·ŒIÕÍ¿ü%º¾ˆÑ·ý—Êóÿ{÷ÆüùÿwåÆÞ§ð¼:Ç„n>×c8pŽch˜21VVG‘ƒ+)ö{`‹W¯—ü|Ý<ÿà^/ý¦<=áÿ xŽûD7º¤Þ³¹ºØ–7)ovÐŽ‘ÝyF7Ä„+-³’xSŽïáïŠ-¼ek§jZBÝ,)Qqm-´ƒ ƒ˜åUqÈ8$ ŽG¼’ßöT¹–ûÄgP×ím¬üC§_XK—§=šN×Íûß¾vcì¿wæûýxæ/|+ñ ÏÅIüQàéšT—z\:\Ö÷º;^‚#–Y«-ÄX?¾#=?'Õ|ÿ[~„êÓù~—ýGÿÃ@hz=–ïÝ«\=ÕôI™iw|˵ÃBòH±Ã½¡Ø®Àǘ`›^øÑcãŸø“@µ¶½†ãÃ÷B+[Oå\/“ …üÆŒ"Ó ¸– ¼eXWâŸÙJÿ^Ò£·³ñ™or·7÷K|t™òÑîî^rö³Et]ápÅÕ¶‚Wµw^ øs¨ø7ǚ桱ޓ®®%µšÐ›”¸H!ƒÚ˜*R%LyÜs¸ …íïvü¯ë°ï}_ð·ü€ ÿèF¼ããW‹o<áëz‚ê—JKwöS!ŒÌˆw8 ù¶ c’ï^áoùAÿÿÐrºÜK>¡v“(tyYHÈ “h•í¦å«]_cÍ|Wñâ+ Bhü,–W6vޛė÷H–öñqöpÞZ;&Ù˜  18¦|Dý§¼7à;_'“QÖü?d÷Sið[Îß0ƒÎEyV&XÕ”Œ;q×û¤ ß~ËxGáŒ|:5ɯ$ñE¬št’Û|Úu˜…¡·· ¿÷‹»s•ÜXôÍt_ûÞ;Ónµò¼n¬¬ËÌ­2ÇyýÎþß{²Iu·m=o·ÉiÛBUî¯óü?=~òîñ·Ã—ú%ýûÞ\[E¥iÃU½[›+ˆ$·¶&Qæ’5b3o602Bç#/½øÑáí7ÅÐhš•Õå½íÔÉm ’é×)k$®›Ò5º1ù%ÙO ¿$ñ׊â<_û<ø¯ÅÖZ’Íã-*Þã_ЗAÕeM™e‰r ›ŸÝ¶Û‡VÉ`z€¼bköP¸Öþ&&»w®i³E¯g«Dnt?P€Aå²ÅtÓ~êb' €üç%†sJÎJûÁÿ-D¹¹ußþýnzÃ?Oã ß^ßà 2Zêš…‚¬dá–ÞêXTœ÷+'ÜšÇðÇÆWñÁ?x¶x,t÷ÖÚÈ43Í#EžxâÚ#,[çÂå@,Fâ£,7¾øþ]òÇí_jû^£{¿ËÙ³í72O³9ÛæíÎyÆp3Šà<1û;x“Fø}¤xWVñ~•w¢h²ÙIAxnì×QN¡¤7l|¢§å{=°f7ÒÿÝÿíóko?ø׋ÿixÃ#¾Ñ î©7‡ìîn¶%Ê[Ý´c¤w^Qñ! Å läžã»ø{â‹oZéÚ–·KÄŠT\[Km Ã`æ9U\r #‘Á¯$·ý•.e¾ñÔ5û[k?é×ÖÁ¥éÏf“µÏ}Äfáâ’DÃ$q–,Äžq^³ðãOÔô«2߯Öš–¡ в\[ZXä¸ÄfG ãùŽNH #¶»Ù}úßô¾-6×îÒß©Ýø§þ@SÿÀô!^M«üE} âΕáÝRÖ8ìõ­>{‹KÏ7–žRð”Æîßx9çcñÆkÖ|Sÿ )ÿà?ú¯øñðy¾3øF;WŸ@Ôm.<û]B„²[îGŠ@°Îø¥‘:ñ¸Ô;ôþ¿á·ù­×úÿ‡ØÎðgÇè|E§iú¦¿ý›£é•ž£©Â÷È%k;i£Hî?ÕìÑÈ$l°#z`7ÌW_Gøóá}n2`¾¹·u¹¶´1^i÷6“¸m°Ñ«‘¸WÆÒAÈ5“ñ öpÓ<{¦Yé¿i{ *Ë@»Ð#·†1¹#˜Ûlubp<¿²¯ÊA »œcœm;ö^œxÄ:N£¨ø~ÒëX··K{ÝAû–Ó@æH§|ÎæFl`¡‘FÓŒdšµíÿ«ümo›%^Úïùmÿî;Íâç‡ø®;ÂÓÜÜ›w»ˆ½Ä1\®¨ÒÃ,‘ªL›™FäfŒqÍržýš®´éôû s_†óÃ=íî¡ic†àËt³«‰. ­¹íSí¾e˼áþϼ_£|H²ŸÆPj0è>ðóèzwÛí­ ŸX ô{‰¼Ü%¸ !òÁ;pƒæ¥ ZRþ´­—êT¶mZÿ‘ôç‚¿ä'ýu?ÉkÅÏåë7,9ÚÿÇEmx+þAR×Sü–±¼Zžfµr¹Æàþ:*g~WmÁo©á_ ¿kñ߇t µ]4ÍOTÕmì®mëp··¸µ’æ ”m¿:ºGŒ>`ãøk®²ý£ü}i{q«,vö6­~ÓMcqsÛ+iàgŒ â®^=Ê7œO/7ì‹ep<Òê󬾱M6ìÇÅÖaXZ4»ÿvTÉ#)ËcÌqß!¿?dø|§Ü麵χït¹t‰´`ÐhbÚþhd ¹žçÎ`ä*àíD pǦ*›ßNöóÓO½þo°º¯•þýÉyñø»áÏí™´õÕ`kÛ}F-&HUY™ndÍHøÓ-žƒkdŒd|Nø‘¯xwǾð÷Ãý+IÔo5Ë{»¦}BúKXâ[s@1Ã!$ùÞ«øqû&ZxžÖ¥Ö®µ ÝÚQ|ÒE·ûZíÌ»n¤ùÎêé@;¾Ydmé~%ü/Ö»e¢ßhv×v¸ºÓ ôs-Ç•“4[Jù#œçóOŸåþzú5æMÛü?àþzù:íK¢ù¿-ït-jÞêæÊ÷IŠÞmF{Y-ö™[ý6-GüÝ¡q"ó“ŠÖñ/íàÏ \[Ǭë#6qj)$³\¶²’©;I2$D©ùØ€8É欿f}KÂÚÂk¾ñHÅ7QÝEªê:–ö´¿ûA‰™Ö–1CA%B®nµfçö`€x'Xд½bhmµ/ Zx^7’ÜHð¬~'l2‡-öº6ão^xWvóýlöùÛïù–í}6ÿ‚¿KýÇE¤|~ð¾½£êwÚEÝýÄZCD·1&—tnÍÿTË•æH¯œ«"@$E—Æ}+ÄI¢ÍáKËi`ÔµI4¹’ê9íî!–8%•¢òZ=Ë(ò²V@ƒnNs´6'ÄoÙêÏ®Oa®}ŽMb 2–­,.¶rÍ!ŽuYTË¢b¬€®êsŠ«ðûöd> †È6©§nµñ¾!1Xi+el7ص§‘K#Ônß»$œ`‚Ijõ·ËÏUÿîøU·ÿþgOðÿãß…~(j«eàJ[¹ä¶7‘o²ž¸„0VxžTU+2ƒ´œƒŠõÈ*Oúê’׎øà·ü!rx-ާö¯øD4)´_ø÷Ùö¿3ìß½ûçf>Ë÷~o¿×Ž}‹Á_ò “þºŸäµOúûÿÈJïsÅÏåë7,9ÚÿÇEx_Ã/ÚÁüwáÝmWDM3SÕ5[{+›GºÜ-íî-d¹‚åoή‘ã˜8þ÷_§™­\®q¸ÿŽŠñ ¿d[+à6—Weð}Ši·f86.³ ÂÑ ußû²¦IN[cŽùvžÚiÿü¾cèýßm?ÏåØê,¿hÿ_Z^ÜGªË½«_´ÓXÜEöÊÁZxãx+—rÀç¨~.øsûfm=uXößQ‹I’Vf[™#óR>tËg ÚÙ#ÃÙ>i÷:n­sáûÝ.]"m4¶¿š®g¹ó˜9 ¸;Q1銗áÇì™iàøoZ—ZºÔ/tkiEóIßík·2íº“ç8d[«¥îùdQ‘´f•¯®ßðÿ¢ûÚ蘛vÓøo×ð]ìtþ0\üð”^Ò_Õï§0Úié0‰¦ Í+nÁÀX¢ô98êo|zð熼+¦js]Í0×lÍî µ¤×s\Æ#òáF`€2îrÃ'‘QxÿàeÄï麿Œ//d³Ò,¦·´³µ¸šÍãšV_2c<2+œ¢ÙÓ³œñËiÿ³§á -5>ø¦ ô»+í½ÓZñRÂâq,qóÔ™!Úª$' +Y¾nV–ïðßóv~I¿Bôæ]¿¯É]zý殕ûRxoOð‡‡î¾!Þÿgjz¶‹i¬\ÃÄñZG:ÿ¬wDaaÃ.÷ ‘‘(þ?èZþssàÛè$’ÆúÊÒá/íîm6 ™’8Ø+E½ƒ‡>[ØÇ`2Ãÿf=ÞÔô5ׄl¼+ç}ý_ÙÖqçíó9ÝçýÌŒmûÇìõVâ½Æßòþ¹æÕá6_²5…½üZÆ |Um­ÿoI©™gû<Ó´ÅåÿBó¼¥49…#“ݯ‰_oëòWpßÂí¿õÿ7ÿ´>—sñGBðß„Üß5î¡scpmg[x ÒÊËÁAº¼j¬¡‰\¶@ áÞý ô߈­t?¼ÓeÒnu½{IáIZ9à‰|‡‘&Œù²|èX|£žyÆÑÿf‹ý?[Òà¼ñ¼ÞÑouË]=tâ·Gí‰p¬uç„ûT˜"0HÆyæ¯ü'ø¬xÄúMç‰ êZ,é©­Û5Τë.ÏìË’(å¹#¶Öž?—ŒÜñVüQñrx÷RÒ™tèílí´™’k‡‘wµåì¶ÅrŠÜâ5ÙÀ›æe_˜Sñ¯ìÏ£üLñ¶µ¬|C¹¿¾MKOK¶··ºžÍm-Æã"1ŠP&Þ︇ùTc‚MHÿg©¬­×Yñ¼ºŠÇD³’se´ÌtëÆ¹óó2îÚyùH-óg.—ïøkùiólŠ—³åþ¶ÿƒ÷M—Ư^øµô3wuk¨/œ]Ø\ZÅ?“þ·ÉšXÖ9võ;¸Éè3V<ñWDø—çÏw:ÃM¾k ‹dš7ÎÉ"icQ*6Ó‡BÀúò+Î9ñu†³aiEåA¢‹I®›²M)™Á Â*N}«M/ýw¥¿«¯eëEúÜ_üzð¯Ã]léÞ2Ô¤µ»[t»‘VÎy–Ù²h—$¸À³þËšœÚ¶rÞ*VŸG†Îu#c*ê÷ u7ip¡’L0+*K´3`’sT·×k¯ºÚþ?Ó%ÞÚv}ôüëNøÍáíOÆ'AŽêî O3,iu§Ü[Era?½Í,kÛzŒÜsÓš¥ þÑ^ñ$×k¦ê̱ÙÙ˨´÷sÛÛÉkyâšDT–0X ÈÌ9ô®/Aý‘ZÇâÖ¿¬éÚ„V÷Wó³ÿdìÔïRê9£òç½330fÂ…U\ ã8#˜ð/ÀøæâëEø˜šµŸ†,¼+7†¬¤»·´·¹Œ<°+ö{‰„ÅVÝw;l…ÂrÕ*îÝíøÙþ¶_>…Ú7ßKþ_¥Ïpð7Åâ3Ý'†'ºóì‚4ð]ÙOe:+‚Qü©Ñ£m®Óƒqê>ÿð/ý׉|ø;qðºæþmJo Í%ìPÅ+CþÎ-å—;¥&i “¿ Ú«Î&½·Âßòƒþÿ¡·n„+õ<ïã'‹Ûá÷ƒ|Q¯CÝ>‹iu|°³ì˜ÑŸilgn3ƒYúçÅ-+Â~Ó5OI-¿ö¯––öðA-ÔóÊé¿ËŠ(•žBcò¯I8Ö—ÅÿÿÂÂð—‰´qöOí«[›?Ëó<Ÿ5Y7mÈÝÙÆFqÔWž\|ñuäšÕÿ‹´)u/ È$ÒäOÉC0¼,éöÂd ÆÒ…H$qS®¿/Öÿ ßOŸéoÔè5ÚÂ:~¦j_Ú’ÜÛk $–‹iequ<‹³Cm"ÏYFÃÃ`ñI«þÑ~ÐÒÁõ \ù:¤:‚M¤òÅ´¤æ¸tB¶ñ±<4¥ÐãÎ|wðcÄ4ý.óᄺƯâ9mõ+kûËkG†¶\ —Ì3ÜÄ!ýñ%L›TÁ¸5Oý—ueðT:už½k¤kÃñ &ÈÝ´‹o FZÖS"ˆØ¬’&Y\rnG"»M¿ëòZÛ®ÝFíý|¿àýǨ^|JÑ,ù»¿Teõ¾›uû·>UÄþW”œw}¢F@ßÉ8ËøAñ’Ëâõ–£&›k{i.›}qhë5´èŒ±Ï$Jë$‘¢±aâ‹’„ínEs¾&ýŸumcÅ„šG‰ml´-WVÓõ›«'ÒüéÚ[O³€‹?œ¡Q…¬yù ¾2QðÏÀ:‡Ãùµ˜.µKký*ûP¸Ô,áf)íZy¤šEy|Â%¤;pˆ@糟õ·ü5·õçÿö='þAVßõÉ?«_IÿU·ýrOä*ÅQ@Q@Q@Q@fßø^ßQ»y§yƒ>2Œp1éíZTP?ü!6¿óÒãþúáGü!6¿óÒãþúá[P?ü!6¿óÒãþúáGü!6¿óÒãþúá[P?ü!6¿óÒãþúáGü!6¿óÒãþúá[P?ü!6¿óÒãþúáO·ð…µµÂIÎZ6 2Ã>•«ECdš£Ã9`¯Œ•ëÁÏô¬ßøBmç¥Çýô?¶(  øBmç¥Çýô?ÂøBmç¥Çýô?¹ïÚ]»ð×€.¯´9V ¸Db9 I&Í÷0#® çk0äw¯ ÿ…Çâ¯ú ÿå>ÏÿŒ×/1£‚j5o¯‘ËÌhàš[ê})ÿM¯üô¸ÿ¾‡øQÿM¯üô¸ÿ¾‡øWÍð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã5Éý¿„îþã“û{ ÝýÇÒŸð„ÚÿÏKûè…ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÒŸð„ÚÿÏKûè…ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÔÖI§Z$0*™Án¼œÿZ¡qá k›‰$‘ç #8aŒ“ŸJù£þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ }¿„-­®HÞrѰa–È9ô¯š?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úšþÉ5G†rÁ_+׃ŸéY¿ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÒŸð„ÚÿÏKûè…ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÒŸð„ÚÿÏKûè…ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÒŸð„ÚÿÏKûè…ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÔz^—“nc¶.ÊÍ»æ œàßJ­á{}Fíææ øÈR1Àǧµ|Ëÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÒŸð„ÚÿÏKûè…ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÒŸð„ÚÿÏKûè…ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÒŸð„ÚÿÏKûè…ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÒŸð„ÚÿÏKûè…ð„ÚÿÏKûè…|×ÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3Göþ»ûƒû{ ÝýÇÒŸð„ÚÿÏKûè…_Òô¸ô›s±vVmß1çvúWËŸð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã4oá;¿¸?·°ßÜ}5á{}Fíææ øÈR1ÀǧµCÿM¯üô¸ÿ¾‡øWÍð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã4oá;¿¸?·°ßÜ})ÿM¯üô¸ÿ¾‡øQÿM¯üô¸ÿ¾‡øWÍð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã4oá;¿¸?·°ßÜ})ÿM¯üô¸ÿ¾‡øQÿM¯üô¸ÿ¾‡øWÍð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã4oá;¿¸?·°ßÜ})ÿM¯üô¸ÿ¾‡øQÿM¯üô¸ÿ¾‡øWÍð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã4oá;¿¸?·°ßÜ})ÿM¯üô¸ÿ¾‡øUÍ'D‹Gó>ÌÒ7™Œî ôÏ ÷¯—ÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úwTðôµÀ’å¥VUÛò2OqïU¿á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û©¬,“N´H`,U3‚Ýy9þµBãÂ×7I#ÎF,pÃ'>•óGü.?Ðgÿ)öüfø\~*ÿ ÏþSìÿøÍÛøNïîíì'w÷JÂkÿ=.?ï¡þÂkÿ=.?ï¡þó_ü.?Ðgÿ)öüfø\~*ÿ ÏþSìÿøÍÛøNïîíì'w÷JÂkÿ=.?ï¡þÂkÿ=.?ï¡þó_ü.?Ðgÿ)öüfø\~*ÿ ÏþSìÿøÍÛøNïîíì'w÷JÂkÿ=.?ï¡þÂkÿ=.?ï¡þóß„¾-x–÷Æ5½þ¨³ÛÝj6ÐKXZ€èó"°ÊÄÈcÈ ×ÒšOü‚­¿ë’!^†O:[^Ç¡…ÅÓÆAΞױŸÿM¯üô¸ÿ¾‡øQÿM¯üô¸ÿ¾‡øVÅÔt˜ÿð„ÚÿÏKûè…iXY&hÀXªgºòsýjj(*ãÂ×7I#ÎF,pÃ'>”ÏøBmç¥Çýô?¶(  øBmç¥Çýô?ÂøBmç¥Çýô?¶(  øBmç¥Çýô?ÂøBmç¥Çýô?¶( [À-­Ò8É+…ë€1O¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šó¿ÚwþI]ÿý°ÿÒËjùξŒý§ä•ßÿÛý,¶¯œëä8—ø”ýæ|—ÿŸ§êQE|ÑóEPEPEPEPEPEPEPEPEPEPÌ_ÿo-Oá§íMkám+KÓî|¦\Øéþ"Õ$ŽC-…ÅØvM²ª+ÊIÙ È8ÅÿÚ¿öòµøO§ø³EøS§k¿Š<5 uyšn4­-ätÂ]JJ’Œq€Fî3@ÌÕà—þñw‡×¯u?ø£P›Q]i#–­Ûr/Ùå$ LŸxç@+Æ ñOü§ÄÝ¿‰-tŸŠ2ÙYxÖÒÊ=~94¸:…Ű_ß+4Á¢ À¹U=XŒ‘€=¨}Aòs=bµÑÙ¿w×Eïtì¶Ô÷bòÿi _Edôvvjï­î¯¦žc¾6ÁC“Áß 5>éÚ¦­ã/I°½Ô/ ÒÌúF—,â&)q'˜ e]€ÆFp3E{ÇŇð×ÀËkún««Ë&ku=¦fn.%yU3åEž€¾NO 'ŠðÿÿÁ95MN?Øø#â4º&‰ã ;5‹)4D»ûL¶ª¡]\Ê­%KmSüDF1ê¿f_ø\ß³t?—]›L6ðZD·Éoæ,† ¿~ãr¶ÌíÝÁÁçç_êmES{É_GtºôÙkd¯§™É5„~Ê1–—÷ž·µ£¿Ï›E{wÔ»ð ö¡Ð?h{½rÓÂöZæ•©ørH㿱Õm–áó7l?#ºv7FÏ‘žcâÏííáƒþ4ñ‡®èÞ1Ô.|.-ÛR›NÓV{{d™’Gȯïe±’p3VeßÙ2OÙÏÅ~+Õ®µ½;S“Å+h­oa¡Ç¥[Ùù ãäŠ'eÃyž€äKMUñÇìiÿ Ÿ‰¾+j?ð’oøYÚ}¥‡—ýŸ¿û7ÈSv|ÑæîÛœa1ž¦²k«½o +o¾—[_¹0ŽÛIIûží·êãÍӢ涚ؽñOöáðoÂûÛKU·×|Eus¤zH´‹E”ÚX‘¸O)‘Ð*‘Î2[¦@ÈÌoûxxSPM©›k§‰Ò³å£:ÆY`LžcÊ0_˜ž+ñ×ü¾{ZðÖ­áŸiqjz.ƒm ].¯áØ5{;ä‚5D™`™± Ÿ(äÀûÛ­øÛþ ó§øê‡2êZä·‚¡K]I-ôˆàƒ_fIü£ n©YÐ3§ëìðKîîõÛ[;[Óï×ËHÇ”o'¶¾ºi·]RõW;߇_µ‡…¾*xËBÐüºÍÞ½¡ÆþJˆí­¼Ã&mÿ+ïv€yïX¿´¯í‰¥ü¼¿ðöƒ§ëºï‹†>©nžnâÓÑQ¶Mu󮨷œdÉÀ “öfýôÿÙ·Ç~-Öì5gÕ?á!—m” kå "×Í’O³£omã.¼áGÈ9ª?c­Sâ_Å]CÅ üo/„®µÝ ü?«DÚZ_¥Ý»w{¯–q´9ùFç9rá=ºIû–ë}õi=/¦‰Ùt¾ÄÒXH⓼¬õÕé{«_¹Ïxþ ¦Xü.ð¼þ<Òõïø«SÑßYÔ­|7¦yë§Û,޾t¡¤4Âóó8$Ëž‹ÅßðP¯ødiçJ³ñGˆ“SÑ?á ´;íì¡Ý¸.¦2†)7î.Ó“Ú¹[ø'–­à«M6O„ÿäÑuEðëøkT¸“F[ˆïíÙËïHÚ_ܸÈ3}Ñ‚9ݳáßø'öŸá JÕü5â)â³´ðUÏ„VlÄŽÍ<’È÷EÄ€}ùØùaàUÑY`¥(¾®ËUüÖé§Ù·«½yp;¿=ü¯ÓÖÖé¾§Cð»öçðoÅψZO‡<5gâh'׬žûM»½ÓÞÖùQI‘"v;—k‚BìÊ0 xÊxöÞðçŽ~'XøBïAñŸ†õZ9d±Ö˜-’ëËVf ”…V?:¯OR3àÿØdxWWøwtÞ+žOø@´kÝ#÷V>L—ŸiYWÍWóO’SÍȺ9Î| ÿ‚qIðkâ'„õÙ¼[§_§„Úð¤Pxr;K‹áq¦g¹Y‹ÈW·$ÅH`_?,žÎÛïyÛ§T þo±.Y5-m¢×{?+oo¼¿ðïö÷Ó¬~xKPøƒ³âM_Å×ÐÙ&ƒ¢0y³€P[™Y·aÔ žIÀëÿ¾;hŸ´WÃøüGà5¾†Õ§’ÚX/b\[ʇæGPÌ3‚§‚F÷å ?`‘ðÞO†Mÿ Y½ÿ…u{¨ÞÈ3ËþÐû^>_õÇÊÙ·¯Ï»Ú½öiøÿ ïá}oMþÖ:ÁÖu»dËö_³ù^pAåã{nÆÏ½‘œôŸª8ÉÓ~÷O¿k[¶¦X¥…´­ÿiùieÊþw£QEæEPEPEPEPEPEPEPEPEPEP—‚¿ä{ð÷ý…ì¿ô¢:úÛIÿU·ýrOä+äŸÈ÷áïû ÙéDuõ¶“ÿ «oúäŸÈWÚðçû´¿Äÿ$}—»KüOòEŠ(¢½óÞ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9ŒÞ »ñÿ„.4 í㺹Dd3³,%Ä•V#„#¡æ¼þWÅŸóÛÿø7ÿ¯Rý¢~4iß³‡ÁŸüBñ}µíî“à_j> ½·³n'†Ö=Ò ìª\¬d ÌHÉkË>ÿÁDm>"ü[Ó< ñ«á¯ÄƒÞ"ñ…?ˆôøJdÒç±×ìà1ý Û]é××1 aY¢‘á”Æá8CâÄàpøÉ~ú7kÍ®ïºè›ôO±Ë‰ËèâùgVÝ-ü¯·ªûпðʾ,ÿžÞÿÀÉ¿øÅðʾ,ÿžÞÿÀÉ¿øÅz7€kÏ„ÿ¾_xÃáÄÿ‡¾#ð–™v4ûÍoKñÞirJ†K˜ä1¤„˰'ÌL˜f—‚ÿn‚ß5o Ø|;ø»ðÇ^¿ñ§Ÿÿý¶â‹©µÏ °›ìi¤Üye7–nÓœ`ÖØX;ÛÙëë/^ýµ9±°V¿&ž¯üÎþWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ¯NðoíMðÏâGĽsÁ_ þ!øÄ>3ðÈs«èn½iu©é›c‹‹hä2CµÈS½F â°m?m߆š?ƒ<©|cñ¯‚~ê^8³±¸°Ò5¿é‹s$—ŠL0Fñ\<7,Ì’ª´"Hc}Œàf’É0R³T÷µµ–·ÚÚë°<››NžÛêôõ×MÎ?þWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ¯y·ñ†‘wâ«­ ÓTÓ¥×,m£¼¹Ó’åîÞ Ö9^wª;E V Q€'4b`¿çßâÿÌ?±póïñæ|ëÿ «âÏùíáßü ›ÿŒQÿ «âÏùíáßü ›ÿŒWÑTQý‰‚ÿŸ‹ÿ0þÅÁÿÏ¿Åÿ™ó¯ü2¯‹?ç·‡ð2oþ1Gü2¯‹?ç·‡ð2oþ1_EQGö& þ}þ/üÃûÿ>ÿþgοðʾ,ÿžÞÿÀÉ¿øÅðʾ,ÿžÞÿÀÉ¿øÅ}Eؘ/ù÷ø¿óì\üûü_ùŸ:ÿÃ*ø³þ{xwÿ&ÿãÃ*ø³þ{xwÿ&ÿãôUb`¿çßâÿÌ?±póïñæ|ëÿ «âÏùíáßü ›ÿŒQÿ «âÏùíáßü ›ÿŒWÑTQý‰‚ÿŸ‹ÿ0þÅÁÿÏ¿Åÿ™ó¯ü2¯‹?ç·‡ð2oþ1Gü2¯‹?ç·‡ð2oþ1_EQGö& þ}þ/üÃûÿ>ÿþgÈ:®£èZ¥Í–·ñáM휭żþ'Hå‚E%Y0UyTW‡¿è¦|"ÿ®/þ"½cÀ¿´OÃÿ¾±±øÕãŸøB÷Å^2ñ†‹o­k6öê÷[¼Q ²Lêf“.ƒjdå”c‘^‡©|vðFcâË­cÆ^´¶ð>&šmZÞ8ü;û•Ÿý=‹â×÷.’~÷oÈÁºi,—-©þ/üü×Þ?ìLüûü_ùŸ2y^ÿ¢™ð‹ÿ ¸¿øŠ<¯ÑLøEÿ…\_üE}ªþÕ? 4?Œ:oÃÍoâ?€ìü¬Ä³Øxj}~Ò=bö6VexlÚO:E*ŽÀªB±LÕ?k/…šlü+­|J𠧉õ .¢µÒ&ñ¢_\=ª–¹T€É½Œ!XÈÊwcÿ±0Kþ]÷êúo×§Qbàßü»ü_]ºŸ=y^ÿ¢™ð‹ÿ ¸¿øŠ<¯ÑLøEÿ…\_üE} áÚÃáoþÚøÏÁ¿|«x>úåì­õË?ZO¦Ï:/\¤†6u¹*#kqÁ®âíãá¯øEþøƒöqÕ|#ñ+Ã2ð¯´2ÛÿixƒUƒM´ó[;SÎÕ7.rqKûkòiêý;÷ö&öözú¿ó>eò¼=ÿE3áþqñy^ÿ¢™ð‹ÿ ¸¿øŠú?Æ´·ÃŸ‡> ²ñ'Ä/ø+Bðö¥fÚ…¦©¨k–ÖÖwVʪÍOgïv»¿Ý&/ìl¹¹4õæ|ûåx{þŠgÂ/ü*âÿâ(ò¼=ÿE3áþqñö-b`¿çßâÿÌ?±póïñæ|uåx{þŠgÂ/ü*âÿâ(ò¼=ÿE3áþqñö-b`¿çßâÿÌ?±póïñæ|uåx{þŠgÂ/ü*âÿâ(ò¼=ÿE3áþqñö-b`¿çßâÿÌ?±póïñæ|uåx{þŠgÂ/ü*âÿâ(ò¼=ÿE3áþqñö-b`¿çßâÿÌ?±póïñæ|uåx{þŠgÂ/ü*âÿâ(ò¼=ÿE3áþqñö-b`¿çßâÿÌ?±póïñæ|uåx{þŠgÂ/ü*âÿâ+¬ðÏìÿ¬ø×DƒSðn±àí[M¹ÝäÝÙjq»X«m‘!*Øe`px ŽÕôÍpŸ³Ÿü“ýCþÆÿéêöìLüûü_ù‡ö.þ}þ/üÏ0ÿ†UñgüöðïþMÿÆ(ÿ†UñgüöðïþMÿÆ+èª(þÄÁÏ¿Åÿ˜bàÿçßâÿÌù×þWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ¯¢¨£ûÿ>ÿþaý‹ƒÿŸ‹ÿ3ç_øe_Ïoÿàdßübøe_Ïoÿàdßüb¾Š¢ìLüûü_ù‡ö.þ}þ/üÏá•|Yÿ=¼;ÿ“ñŠ?á•|Yÿ=¼;ÿ“ñŠú*Š?±0_óïñæظ?ù÷ø¿ó>uÿ†UñgüöðïþMÿÆ(ÿ†UñgüöðïþMÿÆ+èª(þÄÁÏ¿Åÿ˜bàÿçßâÿÌù×þWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ¯¢¨£ûÿ>ÿþaý‹ƒÿŸ‹ÿ3ç_øe_Ïoÿàdßübøe_Ïoÿàdßüb¾Š¢ìLüûü_ù‡ö.þ}þ/üÏá•|Yÿ=¼;ÿ“ñŠ?á•|Yÿ=¼;ÿ“ñŠú*Š?±0_óïñæظ?ù÷ø¿ó>uÿ†UñgüöðïþMÿÆ(ÿ†UñgüöðïþMÿÆ+èª(þÄÁÏ¿Åÿ˜bàÿçßâÿÌù×þWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ¯¢¨£ûÿ>ÿþaý‹ƒÿŸ‹ÿ3À¼3û1øŸJñN•y>ƒäY_[ÝIåÝJÎV9UÈPaœ)ÆH¯uÒämÿ\“ù ±UôŸù[×$þB»pØZXH¸RV[õýNÜ>–.•–ýRÅQ]áEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP•þÚß5?Ú;öRøŸð÷Áw6šÇ޼¬ø~Æ{×t¶†{«V‚6•‘Y•H V €Oòçí ÿçøÍÿøG†?jOá¿Ã»? øcUÒ¼;iáB÷_k­J÷I—LûmõÝÕ¥™[t‚êíMœp’þpc7Èýß/ü…aÿ®R4«Fð“”^¯üšÿÛžú}Ⱦwîÿvöùòßïå_ÓgÃÚ×ì ñ7ãÕß¼CñÃDøIáM[Å·~±ohz•Ö­¦K§xs^:Ä×SX[™&ž+‰àŽßìûa…ZRŒ{zïüw[½ñGĽOHZ\øÃãw…~%i×®“ÛéºZhkqŒ°egìÍ@"©d"änuó$ ö5µ:ò¥R5cºi¯U(Kó§ǹœ—4yßý«þ’ì|ð£þ ÷ñ«þ_Â>Õ¼3g«Û4^%Öf’+…ñ%¬ëx¤Mi°°¿Ó4÷²–äN÷,ºŒú¸•n£TkˆlÄ1¡¸—©ñçü¾‰>ñ\>4øQám_Sñígã}Xߥ„òjž‹T‰üÙÝÜïŒZ —ììwwO,ï`ßPÿÅÀÿªïÿ–]ñp?ê»ÿå—FýšP”7Œ¹½_5)kßø0^—òµU“«Wý{µ#§m*IúÛçñWí«û;j_.5ÆñÂÝ'ÅZÿjOkÞðŸÚ´è ñM°ðíœ2IœA›‹+ÆÜy{Þ¶Ã×oðëö+ø™â/Š·ÿ›áËü?±ñÇ] ÆßðˆK¨iÆëAÒì4fÓ羺û$ïlg¸™D­LûZ2Ì͸'Ò÷Ú_õ3 Ô­þ8\iDðù±ø)ü©p람2yòjø¸õ]ÿòË¥I*J)}™E¯ûqQIå&Ò¶‚«j»o E÷÷[ýÊ«¶—MjÚv>?ý˜?à_¾þÝ&ïãn…ñ_^Ñ´ŸŠÞ!ø‡áÝ{EÖü.¾‰u4½kèå†=wí ë[<î",±²¿– Gë¼ñcÆ_~üxñ?À[\ø'Jñ>ƒ«x ÏÄ:UÞ«¢Ë}=ªÚêvsÝM”Å °e‘D±È‰{¿k­{/ü\ú®ÿùeÑÿþ«¿þYtÕãA?‡Eÿ€òüôÓòÙX“Rœ§o‹›rõÝ·¿­ÓwùöXÿ‚hø£ÃZ·ìé/Ço‡ÞþÉðwˆüyâûÍ\ZÞØøMbí®´Û8”²ÉÎÑî4ub§]¾pøŒóü=ñ–ðfÓÃ_<]¬jŸµ5·ŠañV•ã+-C^¸gñ2j ÒÒ6»†úÒÓ̶¹2²G¼-‰0AúWÿþ«¿þYu‰gðÓ]Ó¼_7ˆ4ÿü\ƒ_¸R’êQØøo%SÔ4Áwp8'µU9:U¡R;&½% [¿ØJí·³wµš•9Çí;ëꦟþ–ݽRµî¾’¢¼#þ.ýWü²èÿ‹ÿUßÿ,º=ÞŠðø¸õ]ÿòË£þ.ýWü²èÝè¯ÿ‹ÿUßÿ,º?âàÕwÿË.€=ÞŠðø¸õ]ÿòË£þ.ýWü²èÝè¯ÿ‹ÿUßÿ,º?âàÕwÿË.€=Þ¸OÙÏþIþ¡ÿcGˆôõ{\ü\ú®ÿùe×yû6ý“þD_ÙÛßòÕ>Õý³öo·}¯ûFçí^gÙqþ¿ÎÇ—òíÛŠî袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*¾“ÿ «oúäŸÈUН¤ÿÈ*Ûþ¹'òbŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( (ý·¾1꿳·ì—ñKÇþŽÊmoÁ ֵ뼤·{‹[Fž1*++2r)#<޵óƧûsüJý†üCámOþ +âO‡ž!ø[ãoj:¿‰ü5á‹Íï@Ô,l$Ô¤´¹³’ú÷í1ËeovñËF[(L‰_TþÐ?´¿Ú3á‹>xâ{ûmÇ>Ô4 ù¬æ(.¡ò$h™Õ•\,ŒT²°q^%ÿžðGt BÃöŸñ‡Ä sáë¿ Ù?‹u H†‰au Ãp¶Pé––E;¢*ý¨Æ×eD¡X©˜ÝJOËOº«‹é¶ý—ƒPO»¿þIoºÒÓÏæ±toø-Ã+¯†ž3×¼O¡ø«AÔ¼6 Æ…qy£]Ý^kܵ¦šÑÝÙê3iñ‰®#–#ö‹¸|“3yHUÛ±ñüVÓF°ðu–ð§â®½ãÏi÷ÚÄ> ÓcÒ$Õìtû)£†âòyßQ[$Iql¨c»‘¥3§–¯‡Øý#öÖ4ÿ†Zç‡uOŸuYõsh°ê·vÞûNŸ»9òÖôeµ¸YC•”ÜÁ;8 ‚¤\Ï…à’ø_០Çð'âćþ)ðªkÂS¡.Ž—ú”µâß_Á=¬Út– ÝGȰZÅä´`E±K«hÚæÛOÇáÓÿ&øÝöÒ+©”o£{þ~á_øè^øÃÿÒô |`¶ðO‡¾ i—ß ´›ígÄW>[½+ÃÓ 5h¼Øžî»Eø§¨xsWðoÄKÍ#þ Òü-â[iö¿Øzþ¥ Œ–I1k¡pë)Ôìд0Ê"i3)DÞ£Tý†|/­|*øËá[XñUÍŸÇ+wƒÄ7r]BבoÑmtv{w0á\ÛÙE&dY?zÎßt„a§ÿÁ4o¼eûGüKñ'Æx§þøÛFñVŸà2êÌiZ«iš^“ ¼ú“5ˆ¼YV÷Ló<˜nÄ.A½NéաΗK+ýêÿ›·¢¹v*w×_ý¶Þ]÷Чð3þ 3¯üL_KñcúŸÃë{ïŠ$ðp¹»Òm®,µ«]8ø€¤QɦòZMZ4o=ÃÆñ´ˆÑÅYDíø3þ ÙàoøXñ7‰|ñ+¾ƒÀ×ß¼?«iÖž_Œü=f±¼÷ºzÁu+ÆB\Y¸‚ñmg+uòþÿ—ÑhðN hÞ:]J÷ž8Õ4OßøçNðÅä¶/¥iwú…¶©úDËh.^ εw3G,ïµÄ~YD Ëø_þ àÝáî³áOøóâw‰t ü¨|2ðí¦¥{`‚´ ÔŠ9ítæ†Î3+ì¶³Q=麔 X†ó™<Å[{Ý—ßÊïóæåò·?^SGìkëË}}9­ÿnïÖö¶‡_à_ø(Ÿã;‰ ðËâÞ‰¯ü7Ñ`ñž»Ñ­çÕõý:à]}–}: [™D­3ØÝF°HÑί× ÷6÷ûGN‚ãÊš>5“Ê™vI@;]{0Îõ¯0ñ왥ø£ÄÞ:×4xÇÃZç<càɵö{&ÞÎKù º²v…¼» Ú¤ç{o_’, Ãnôý6ÌéÚu½¹š{ƒk›3n’\79ÀËdœu¢\·|¿Öÿð?C^Êÿ?º?“æKÊ×&¢Š* (¢€ (¢€ (¢€ (¢€?9¾'þ×Z§ÃŸÚÅ>jß´Ÿþ»Òõí~ÞkÆöMRøø¯Q·eW»VÀXÄgj÷ úçß~*ÿÁP~~Ìþ5Ö¾ük>*oˆZ¶š4m(éöé¨|K{ÂÄúK0K¦7%¢‘ ‹È`ZQ;e<•—ì‘ñ?Å_®>*~Ì?<)à[ö^ð¥õ޽ày|EÌiâmFéf¢ÔìÌL …pC‚?Eøãÿ¬×¿hÏŠ6?þ'|\ºâ÷‚#±ÿ…u®iZÙéž –(×íÌtÃxâõu <Õ¸YeèþL(Q¢3I4/SSþis÷åç›/š.îÖÒ×A[ã©(v/kòA;ùs)yßTìÏLøåûé_³·Æ ø_âÃÿˆÖzŠu­7Öþ2[k¡C©ß°KkWÍà»rdd¥ŠÙâFq¹ÀWÎþ#ÿÁi>ü3ñ–¯§êžøÏ¨èÞñ„žÕ|C¥øPÞé¶šÖvÛÚF"”Ü]½Ä…"ìÐ͵åeò‹Œùïí5ÿTñÇ¿ÚS[ø•£|Pðe†¯yâÆ:eέðé5}WJ»Ò¾ÈcÓãÔZý%M%ÞÑæ6pù/æÎÍç]dö«¯ø'gÛ<q¥MãgøÇů4i_tǨÅ{ýŸ·ÏîbÙççø·y|`ÖÞ”=¶‰Ë[t‹•%çv¢ë5þ¦¯ñU[F†¯ü£Qü¯%MuÞ[tÌOø+‡‚l~]ø—Æ^ø±¡júoŽbøu}á)´(®õûMbkdº‚/"ÒâXåIašW†Y&\ã ·“ñ§üNããUÏëO…Ö¾7øeâm#ã.“àïø_Ä6V‘j–ðOcqr°Må=Ä/ñy’X%l€àC-g~×ÿ°gÄ5£ªþÍž vñŽþ<è¿$¿:$WPxBÞßD‡N‘®-ä¹O¶Cþ€¥¶4O‹¬(<Êì<ÿÆÕcñ ñ‡Åïˆvz÷Ä=[â^›ñÄ•‡‡NŸ§^ >Á´û]:ÒÌÝJÖѤ3+Í;³ïcʨ¨Ý¸N]'Ný´öž›µ­UÕ4’W{ªË•N1{Ó»ÝûhÇ]“Ò›[8·Ììšk¢ðoü;á÷ŽhÛ?hºGŒ†«âMCÁšg‹¤´·]S×l#šK­6öƒuæ"ÚÝ3Û­»µ¼Š’±Úß¶oŽ>"OûM|øwð+Ç'À6þ9‡^¸ÔïãÑ­u9œY[ÛÉ"\‚ª7JÙ#’8÷ÀOø$û5þØZ·Ä_†÷? /4mkŇ‹$}ká¥ßŒì'¾2ÉqmiâXî#‘-üé—Í·šDŒ^a]¥}göºý•|qñ¯â¿ÃO~Ï_´ø“áÏö¤hÚÏ…Ä6š„WÐÅ«Eý£FWÉ0s×§¬Û÷PnüÚ_ð¿Ê÷ùi®í½*Í'îëo½Û+tZße¢ñ…_ðQ_~Ì^&ø÷àßø(†¥§xŽïàÜÚ Þâ ho Ï‹lµÆx4ûoìØå”@ÞC%¾Ô+o°ª«½»ÿ‚²øÂ~#êÿ|ñ+áö¹ð¦ÓNÔ¼Aá}gK·—WKùÌ—vßc¹žÞî'‘%\C3º´N¬¡ö«s×ÿðISã?…›âÇÅ/kÿþ%jº.»yã”Ó ¶‹J»ÑncºÒ ±ÒÁhâ±·š2ßgy$y<é‹ÌÌáÕºÇü÷Å?¬>'ë_´ÅM;]ø…ñ.Ï@ÑÎ¥£xTézN¦èúƒ_C{4¯$“Mrd–K“þ±vª„ÃjîÓ×[/M•¿íëßšöMjµÐR²wŠÒýüÕþV»[èôZÐñOüÁž—ÆxÇà÷í¦Ýü=† _ÄÐOáXèZɾ-jáþÕå­»/ú8cz<‰ój<§Ûë_à Z?ì÷ñ—ÃøàOˆøwÅzΛáÛOÇmbtÔuÖ݃]‹ÆÜí#µx‘¤œaÊã~ÐðNññÚÛöOøKΔh/Ùx8Ÿì¯?ûìÐ_ÃöŒyËößÚ¼¿ÝcÊÆã»+â?´¯ü3^øßûGë<1ñ?Âv¡?‰ôiÏÃÔÖu}&çIû'•§®¤o£‘t§kG˜ÚB!6wo;ÖB<¾Òš ãÌÿ»uÍÛ^[Úßk[5h…®Ÿ{?¾ÊÏ®—¾­­ï'뚇ügÃ~ø“Änüiâøâ¥çÃë m'Âê÷ÐÝùŒ°YÃmo+½Ê)M‹>7¹`YgŸû#~ך?í}á_^h>ñWƒõëÓxk_Ðò(ù6ø%á]_â%÷„5=wRÓ ¸¿»ð­ËÝh—2ïc4Ÿ<ŒÜ‘‚k¯§(ò¶˜Ó¾¡ET€QEQEQEQEQEóÎ…ð#þúÖ¿ýƒð^?^Õmq}ðÿí×R}ŸP¸·ó&¸ûjy’?“½›jòƯÿÃÿÔ#àGþþø×Ï¿·¯ÂÍ+Ä¿³ßÃê ¬®µáºlzi¶Ö/-­BÝøþgóí"•`ºÌyUóã“fæ)´±&ÿí#ð#Âß·/üÏÅß?jkÖ<à„Ö߇´ù®¤†MKQ¿Ô ¸Õ¡ØÊRîì-ãŠáNø<Ç(È\“.ICÿ4—þ;üÓ·¯[ «_Ò/ÿŸ'àõôÛ['îðÇ?õøÿ†Çÿ¾4ÃÿÔ#àGþþøÕOø%Å?|lÿ‚küñWÅ›»GÄzσôù¯¯®|Ú‹ˆBý©Û»LJO2¾‚­ªÃÙÎPNömÓ“”SjÌðøcŸú„|ÿÃcÿß?áŽêð#ÿ ÿ|kÝè¬Ë<#þçþ¡?ðØÿ÷ÆøcŸú„|ÿÃcÿß÷z(Â?áŽêð#ÿ ÿ|hÿ†9ÿ¨GÀü6?ýñ¯w¢€<#þçþ¡?ðØÿ÷ÆøcŸú„|ÿÃcÿß÷z(Â?áŽêð#ÿ ÿ|hÿ†9ÿ¨GÀü6?ýñ¯w¢€<#þçþ¡?ðØÿ÷ÆøcŸú„|ÿÃcÿß÷z(Â?áŽêð#ÿ ÿ|hÿ†9ÿ¨GÀü6?ýñ¯w¢€<#þçþ¡?ðØÿ÷ÆøcŸú„|ÿÃcÿß÷z(Â?áŽêð#ÿ ÿ|k¼ý›eÿ‹Q¿Ø43û3TÕ4ß#F°ûú6£søí÷¿—¿ÊÞFæù¹®î¸OÙÏþIþ¡ÿcGˆôõ{@ÝÂüWø½­ü9ñO‡tÿ |3ñ׎muÉü«½KBŸIŽ×A]è¾eؾ¿·•—ÍþíˆßåÎÐÞ7ð‹D×ü+ÿUø§ˆ<âŸhÚ×€t]WOÑ5 â>c¨ê‘ü¾“Nðÿƒþêþðtº†¯{¦ê~.{«ýU’§Ézš‰»Ó<ËQÝô7k;\‚ò&Ç-§³iE¾¶ù]É+ÿà=/½· ])4¯oëOø6ûµ?Dh¯…þÿÁH|}ãÛCÃÞ¹²Ð¼Gð‡â6·âOè힃ý5•Ö’—lê^mZ{‹àÂê”éöp‡U)#Ež|5ûPüUð§üÃLðwÅ kÁúÖ•ãÏÙs]ñFy¡Çyo®è ¦éQ–æAvÓA[Î-ü©b)‰wo¶––ºMäÛÿà/ÈÚ•V£¦ºIGï¶¾‹¯[Ÿ­ÔWÃV·¿ÆoþÕ^#ðÿÁßhwÞøoã-ÁZíµí¼QßÝÇwk§Ï>¦5)uH…¨‰5 ñÛ}‚àÜ f 2´Ê!öŸø).©u¤~ÎZDÚMÍŤ­ñÀñ†FŠ?Šô”t%H;Y”Ž„1‚jÕ7' m&’ÿ·­gnÍI5÷n°¦ý£·_ëO“Vüv±ï”WΟðTÏê:ìž–º¹á«_xÃÂþÕõK¹lî,ôËýzÆÎôÇsnÍo<±ùÊU“ÌÜH 3¿àžvÇÁ?ÿhOxoZÕuŸøÇVöz jΧ.—&™yqb.®]äeŽææg]¼±>Á…UUˆ'4åÑ]|×%ý¦¬önëGkÓOKW¿ÞôÛ{j}9E|[ñ‹þ oñ#á¿Ç­gÂ>ø/³¥išŸØaÕ ¯íîÍÝgà››>ùÌw’ÇÇúÌr>€ý°~=Þ~ÍÿlüM¢Á§O$Þ)ðæ‡(¾fXcƒQÖìtù¤È# ‘]ÈêIÆå\‚2)C÷‘„ã´šKçoóBzMÓ{¯ëô=JŠø÷â7íÙñ]ø¿«øà |?‹Sÿ…¶Ÿ ¬5]V ›ëKXOƒ¿·¥¸žyãifŽq$^RÉ*¡K#edž|fý­<_âÏ¿‹~+[é³xƒÂ_þ3éú½ž‰}¥éš½Þ‡«év"âÀºµý•ÝJLfƒÏ`’äo7r¬·WùrsþV_?&m2”£öü[_ûl¾íwGé­ð·Ç_Û»ãOüm㯅–ß ‡ƒüñÃ?¾Á«XêêZœÚÝ®‹åݸîV8Ú}iX§“1™"dÌ-‰Æ“ûSüBñOŒ|1á‹‹á+ßøWã6¡à95­=KKÒnþËÍfÚóû8_38 s /m<óFYT*ëD½œÜg(«ò«¿Osÿ–CÿòvÆ>ò^jÿ„ŸþÚþï5¸h¯Ì/Ùóöèý ôïÙËöið?ƒ5 øÏÇ_~7ŒÏˆ¯4õWkk;}.iqƹl×w¯5ûI5à¸]ŠŸñìÅË¥¯ÛïöÑø½ñ‹öQøµ¢xxx+á<žø1§x»Åö—.±«]\êÐÞ«Xè×¶—C €ØË^âéešD ïÚw9¨§Ö×ù´ßšN-;u^i²^ë³ßþËÕÝ5Ó]ôvý3ªúOü‚­¿ë’!SEþ©~‚¡Òämÿ\“ù çwW,QE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÆñ„4ŸÀºgô½;YÓf_2KKëd¸Ú9b’61¸*Jº#©Ç  Ž@ªÞ7øCá?‰²ïø‘áø…ÿ³îôÚ–› ÙûÚ¢Ý[fE?¹™bˆIÝ"†mú‘^UÉ·Km`ÿ†Œðÿýüyÿ„FµÿÈtÃFxþþ<ÿÂ#Zÿä:?áœü?ÿAáo­òeðÎ~ÿ ‡?ð·Ö¿ù2¤ ÿ†Œðÿýüyÿ„FµÿÈtÃFxþþ<ÿÂ#Zÿä:?áœü?ÿAáo­òeðÎ~ÿ ‡?ð·Ö¿ù2€øhÏÿÐ?ÇŸøDk_ü‡Gü4g‡ÿèãÏü"5¯þC£þÏÃÿôñçþú×ÿ&Qÿ çáÿúxóÿ }kÿ“(ÿ†Œðÿýüyÿ„FµÿÈtÃFxþþ<ÿÂ#Zÿä:?áœü?ÿAáo­òeðÎ~ÿ ‡?ð·Ö¿ù2€øhÏÿÐ?ÇŸøDk_ü‡Gü4g‡ÿèãÏü"5¯þC£þÏÃÿôñçþú×ÿ&Qÿ çáÿúxóÿ }kÿ“(ÿ†Œðÿýüyÿ„FµÿÈtÃFxþþ<ÿÂ#Zÿä:?áœü?ÿAáo­òeðÎ~ÿ ‡?ð·Ö¿ù2€øhÏÿÐ?ÇŸøDk_ü‡Gü4g‡ÿèãÏü"5¯þC£þÏÃÿôñçþú×ÿ&Qÿ çáÿúxóÿ }kÿ“(ÿ†Œðÿýüyÿ„FµÿÈtÃFxþþ<ÿÂ#Zÿä:?áœü?ÿAáo­òeðÎ~ÿ ‡?ð·Ö¿ù2€øhÏÿÐ?ÇŸøDk_ü‡Gìà“³škËKû/¶ëÚÝìQ^ÚKi?“6«w,LÐʪéº9€e 8£þÏÃÿôñçþú×ÿ&Qû8<ßð¬æ†òîþ÷ìZö·e··rÝÏäêÝÅ´Ò³;íŽ4PY‰ÂŽh»¯<Ó?do…'ƹ¾%hß >Z|F¹gy¼U‡,ãÖågËr×ËœKGò_•àñÅzaØüMðî©ñÿÂzn¹¤ÜxŸJ²‡Q½Ò£ºF¼´¶™äH¦’ w";Ã2«1° Gu¾¿ðàƒÚÏoêÆåQ@s¥~Çß t/—?´_…ÿm>"Þ3¼þ)‡Ã¶i¬ÊÏ”å¯D~q-(Çw+ÁȪ§ö#ø0|uῤødñ‡´¯j–¶Šîå°Ò •ˆ{ùã¶šêHãõ+´òöcjŸÀ¾9Ѿ'x/IñýRÇ[Ð5ëH¯ôíBÊešÚúÞT±H¤‡FV pAš¼mn›yok~?ˆ=nŸ]üÿÌã|%û|#ðÅ ÿøáoýÆš­Ô—ךõ‡,íõ;«‰E’i.’!#;¬ÓbÙa+äÇ4þ~Ã_>iž%±øMðƒá†,|ghl5ûm'ÂÖ6PëvåYL7iJ³ÆD’ŽNö㓟R‘ÄhÌç £$úWŸ´ƒ$ø ÿ A=ñ÷Ǻߎ4‰tßßøvÎçUÓÄL^!ÓÆeËbÌ»Xm$‘ŒšÒøïðCKý ü m xÂçP´³µÖôy^ÉÑ%3麶¡èÃcKi¸ÆJ3*HaØA2ÜÂ’@Á’E ¤w¡¬üDÑ>èQj5+}*Âkë=5'˜­sws­´CüÒO!é:n½¡k6ÒYêv£j—V—Ð:•x¦†@RDe$`AVgÂ/‚þýŸü ká>ðïƒ<5bÎöúV‡§C§Ù@ÎÅÝ–UPf,H$’y«¿þ"h? |ªx›â޳¦x{ÃÚ³Ýê–£r–Ö¶P¨ËI,®B¢Rk7à×Ç?~Ðþ Oü ñ6‹â½ §–ÓíºeÒÜD“DÅ$‰ÊŸ’Da†FÃÔT­Ý¾~ú_äuuãÿ‡ÚÅj^ø¡¢i>#ðö³[_隤wvw±©,2ާѱE&“VcM§tp¿e†?ôË /„ß| á‹=*üj¶Pé: ­œv—‚ÔÙ‹˜Ö(Ô$ße&ßÌo(˜ó·Š¹{û=øR²¹¶Ô|àû‹{Û}JÒâ)4kgIáÔ¥j1:”Ã%ܪ²N§‰œ1®Â¹ˆÿ<ð~ù­þ)x“JÐ=Pñ}0†8´ë'í—Níò¤Pýªß{1æëTæú¿êßåøn­ËýWüK7ß|ª%êê~ðÕÊêz®µx%Ó qwkä [¹2Ÿ<ðý’×Ë”åÓìñm#bâQð—£\˜ðχƤº©×ßöt>xÔ ¯ØÍç™·wÚ ©6þnwùGËÎÞ+z–â%’Ž+„†²¼KãíÁº¦‰eâÍVÃN¼ñ-ëiºT7,o¨Ü¬\˜aüî ¶¸—hçdNÝÐäã×úÓü—Ü»£WéúÃ6yƹÿûø â\ø{ÄŸ>j æ³'ˆ§Ón|#a-¤Úœ‰²Kæ…¡*nÖ˜åx$Ž*çÄ?Øoà¯ÅÈü8Ÿ¾ü0ñ4~µ[5_ XÞ&‹n»vÃh²ÄÂÆÄÂ&Ú08¯Bð§‹4¯xcOÖü ©éúÖ‹«ÛGyccp—6·°H¡’XeBVDe!ƒ) ‚5SâGÄmá€5ŸüLÔí´oxzÎ]CR¿¸$Ego–yŽŠª ?Jjñi-Õ¾õ¢û–ˆms=«ï÷³l *¾“ÿ «oúäŸÈU€w ކ«é?ò ¶ÿ®Iü…H(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šðÿø)…u?~ÁtOi·Úγ«ü:ñ •…•»\\ÞÏ%„‰QD€´ŽÌÁUTIkãïÁ6üWû>þÑ_uøéø­O8ÿ‚L|>ñŸø&wÀÏ|Y´¼Óµý#Áºu½Õ•Üf;‹!S¼¨NU⌤l ¡Í} \'ü$?¿èPð'þ÷üª£þ‰ßô(xÿ û¿þUVÕgíg)÷m™Â<‘Qíò;º+„ÿ„‡âwý ÿ¾ïÿ•TÂCñ;þ…á_wÿʪ̣»¢¸OøH~'СàOü+îÿùUGü$?¿èPð'þ÷üª îŠá?á!øÿB‡?ð¯»ÿåUðüNÿ¡CÀŸøWÝÿòª€;º+„ÿ„‡âwý ÿ¾ïÿ•TÂCñ;þ…á_wÿʪîè®þ‰ßô(xÿ û¿þUQÿ Äïú< ÿ…}ßÿ*¨»¢¸OøH~'СàOü+îÿùUGü$?¿èPð'þ÷üª îŠá?á!øÿB‡?ð¯»ÿåUðüNÿ¡CÀŸøWÝÿòª€;º+„ÿ„‡âwý ÿ¾ïÿ•TÂCñ;þ…á_wÿʪîë„ýœÿäŸêö4x‡ÿOW´ÂCñ;þ…á_wÿʪ½ðOÂ:Ÿ‚¼Öž2[õ+SRÔ¦ŽÊw¸‚/µ_Ü]*,lûVuRJ.H—àwŠ<  è¶óî×­µß Ýj×Z„[Ðí´ž JÕm[`”n’;–C· Uþtø;ká/ÿÁ_þ%Mðûáç‹ô |iá 6ÓU×áø«Yèúέmu¨M+Ë«E´šAo5¸H–5feØ>Å¢¥E*‘Ÿnoü™5¿monév¤Ý9Óþn_ü–J_~–¿fÏýº<ñ·Æ¾ðü±V¾Ú ü2¶¨ãÄZ~çDTlï|9¬‰0Û¸Hà#»7A¹ûøW⟃þËiû_ë ®x¬êÈ—Z³Õ±lU6/Ÿg¢i1ðCü¦Ô°Ï26@_[¢ªç7[÷é¶Ý¶üX¥ïrô·ã¾ÿàÌŸ„þñoŒ?o¿…Z‡Å­'ãÞ¡ñ;@ø‰âû¿ÜjvZóxFÑŽ­[éM¦»(Ñã-ÚbG$é æÎ&o1œ¯ øŸã5—Š?g[߈‘ü{ñg‰Ï„<oá“gâ­ÞÆþIö®¡yªYÆÚ]Ü$Ýqg«ª2‹B±²4ÿ7ê]ªªíü¶ü9¶í~m};ŠK™M?µýkßðÓMÍÙ×Å¿õßø)™ªÁañ‹ÃÚ­âoi2ðε¦xªûF±²Ž;æÓ¯"Õ5+†ÒvË%¥¤‘G¦[D¨—b6™¸I|wà¿ÃÝþÂÚ—„>hŸ´|Ó/ìÛ®è^>ÐÒ|s¥¥t½?W²ŠêÞõ ½·IâIíæIà”+‚Ç4QJÕ]ZF§+§ýÙ'ëgÅÚï¥Ûi+³ k’Wò·çøkeÙivx_ü÷ÁZ§Œÿe¨ŸÃZ­âh¼9ã x—SÒ´¸æöûNÓµÛÛÅ‚Ý5ˈ-åq+<¥6 .Êoüî;üFøûñLð÷‰¼9áOˆÞ5¶Ô´(õý&çG½ÔßDÓlg¼:}ÜQÜ[+Ïi*¨š4wy˜ØèOÒôVp|©Ç½ßßÉ—¸¬¶½Þöµ7ëµÿ^»ÛCâߌ_ÿl _ãÖ³}ð—ÆòXømO̰µ<Ðí|«MÃåû4Þ»•8ÏÈ×Ò·ý5î=£þ âøCöi›YøA‰îu=Ä^Ôoaðõ´·Z”ÚdÝŒº’C É>lRì41«<ŠYX°Ú¨©áÅoÞ­ÚÛ÷Ûña{Ôs}ztùwâ?ímñ2â+ø_~øqâoQÛ >Ç«xZú? /7±VtŠæÊÎMY1æ~é„ï€ÑÊF8ox ãG‡>ÝOáÛOŠÚ—Š<ð×ãO‡ü9¬\ÛÞÞk@¦¹`ž_µ2™g¹šÖÎ'‚F--ÂÅæ!ËÓz+hÔP·*Ù[×Üä¿æý[5…nYFm+«~Nß;«ÿ…ž´OÂ/‹~0ñÏÄxw^øïa©éü¡xz×FÕõm9<;ykáøu™â±÷uª³ÜÈ’‹y!’Dhž7jè|ðóâ—¼seàß‹·~Ó~7_é–×ÚŽ©©_^Ká‰ü=ÈiõI®%µMbᣎy%;%ŽÃîEîº))EFpqº’·þ›×ÿ$ø»˜¦Õ¼•¿ +úûËÿGãŸ<ãï~Í_ü ßðÒ~ð†¼+s¢xÙ!ÒÈžèyjÌÒDŽò"àtE, –&xŸþɯøgÃþ8ð¯Áo‰ú­ÿ„~!üo†7éâˆì̺a±tO³Å§ØÛÇ-²Ew©Ã8”ùŒ’ÄŽ½eÌí¦š7®¯§¢K{ó;ÚÊí«¨ò÷×ÓE×Õ¿ûvÝO þÁHþ|rñßÄ«?†Þ6ðv¯á/…Ú6›¬k0±ñÖ‡»kðñIu†8^Ó÷ɽ†xÏäô?²oí“áÛ:ÏÇÀëý;\ðJÞƒ[Óuu ?[e±³»iíg™Þù'ðHLWËÞ+ý¾6|l»ø…⟉zÁ¯ 뚌Þ¹Ð<-¥x‚÷SÐõá­Nêý­õäÓ hRàܬjÑÁ7”"Š¾Í¯ôì%ðOÇß aø©­þÑÖ^Ò|Añ+Æòx¡4Ï j·¥†›Ó4ë‹í–Îòìö‘Ȉ.é p:Ti^¥ÞÑÓüW§¯Í:ŠÝ9uÞ&r“´l·…¥uòik³¾›2ïo¯‡>ýª|ðkAñ'‡Ó{f®fŽ&[dŒ1P7\EÏÌ2¿à¢?üð§â§Šôψ^ñD_tëCÅZv…®ÙÞßém È~Ï,K7î§w…âD¦éÞ ã篆ŸðOO‹~ø·àW_‡6¿| ãoøÀxªÃZ»_ëm®[êéÍblËë<¿k3ìѸUûƒŠøSÿøáÏÙŸÄ?mOKø9¬ü)ðÇ‹á>×5z·P[Ã’éÙ4ÈdkH&•"–é£tÛ+’ظÆqI;>[ßÏÞèöµ¢¬õ|×[4oMÅTŠ’Ó™'éuÛ{¦ÝÖŠÖ{Üú¯àçü;á×|=àÄø¹ã?…þ ñ‡”Ë¡øpøóMÔnuHÌÍfÕã ’]ˆ8# f+“ì7_|?cöß·kº4?Ù—Ði—›ïc_²]Ïåy6òe¾IdûE¾ÈμèðõÏÄðQoø'ÆÚÇ_ñ.…à GÂSx ^ð†—¥GuãWíá}NÞ[™eº{:ÍãÕÖF{2‰u0Ž# Ÿ%Ãý/ÆÏØ¿ã'‰þ1xîÏáÔ_ ¦øñ âG„>!Þjš–³{¯§ÿdI¡­Å”vQÙI¥ÓBÍpŸ4»`´¡9%{'&½4UÝÿºäï³¶›ØÂÑV›û)üÚÕi§emÖ·îz/?à§ÿ ñ i"ñâë·úÍ™ƒJñ‰!Õ¢ºµ•låóníâ¶D6α£¼®ê3z߯¿Ù†çâÇíQàÜG \éðo‰´†ù — w©Ë¥e…Ll¡vHí¹X TÁ›n3÷`œu~õþI´¾z+íw¶.0ueýÛ»z]¥ø~[ þÕ_ üUâ»_ |Gð£sàKqwâX­uûIŸÃДi·Ê²l…›t›FœàËÒ¿l/|BøZž0ýŸ(ü@ø!ã_üP·øO¡ÞëZÍ…üCg¨MÙ­åŸÈ‘¡‘Ä.âQ¿ƒèkSöaø¯üø-âêÚŽ˜š¾¯â¿ëöwV¡§ŠÚ=OY¾¿¶Þ²"ntŽî é»Õ€fcñoà”ßüCáoOñ¿SðZx¿Åµ¿†ŠxïY×!×5;±naÔÞæÆ(4«o1.›ì¶Qb16?{òùyB*u9²¶þ|­þiEí¬“WIÛ¢ÑS¿N{Û¼Öõø]ïäÓµÓ>Ùñí“à?†:W‰5OÚľøo ø{W·Ñ—Uñ‰4ëKKÙ¦±‚ñB±¸Ì/¶vAâ9[ÊgT1´r>¯¿k/…Ÿ ¼#áÿ|Pø—à è>-hÓCÔµOÚYÚk-"ïAi4²œ²Ãalƒ‘Å|Ëñ»öøÐþ(ñn«ð?UðµÍ‡Š¾"Úø›QÑÅZ‡†eÕ´Èü+e¤ˆ[W²²šæÊT¾³Yñn¿¼…B™s%y¿ü:Çã/ÃÙëáï‡~ÿ e㟠i^&ÑmüQÿ Ƨ ðõ¶««=ìp‹[­.ò-nÙQm7Ãz±ÈÍlœw´”5®ûm¿Ãw½—Å¥ïe+<iBïxÝù;Û§ewmÞ–ëo»5ŸÚ[áχ>1iüCãïØøÿ\ƒíZw†®5»hµ{øpç̆ͤȸŠC¹TŒFçøNÃ_´§Ã¯üN×|àÿx/UñŸ…ãóµÏ[¶ŸSÒSåù®mRC$+ó§. |ÃÔWÈš‡üSÇv?µG‰µ›ë ø÷Á~5ñÖ…ãÛ«ÝGÇ:Î…u¢ÞiðéÑMÒÖ[[ï-ô¨æžâ<Ï)Ô¢fN·öMýŽ~+|ý¢õ½CP‹Ážødñë×ø~ËÄ×^"‹VÔ5+õ»iî› ÚB–7/-¼Ww1;Ü`(«vQO­ŸÞ’kÏvã¶¶ºvz¿–ßsnû|žú_]µúÓÂÞ+ÒüsáË-cÁ:•†±¤jp­ÅõÂ\[]ÄÃ+$r¡*êG! ÕúâÿgOjžøá Æú/‚ü;«éZU½­æ—áž-O•‡OGDe·R0€¢ p:WiNi)4¶wW[kXá啨à*€1Éå™Te™AöµÓ9ïš‘™_ô}O@ðVgã-nê°E‹­Jkh­šîL’XE ª"ó…P YŽXíTvŠVÝC=~µ%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE_IÿU·ýrOä*ÅWÒämÿ\“ù ±EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPyä+ýr“ù¥X¯ÿ‚üEÖþ~Å?§ycá¿XXé0Îá……¼žÑ.š$À{›‰ûR·Ò´T¦×3Z[›Õsrþwûˆî»6¾äŸå${¥ñeïüÛÁ_µŒþ ³ð¾‡ð»IÖõˆ´¹µÙÆz´:eÀ¥þĸ³…½Á*ðÜAusI 2̘[:/üÆZoÂßjÿþ j¶šç‡5/XéöšV£vtÝ|ëZšiÑCoªéÚ~. •³4F/-VHLD‡Ëˆ/h“Ž·µ¾nËñÿ=‚ÚµçožŸæ²¨¯•>'ÁJ¯~^ø‡@øñðûûÇ–úŸ«øcD²×VöÜÞêm¥ÅaktmãÛ2]˧$¤£,K¨Âç#5™¬ÿÁQµfýªõ_øáf«â_ xSÅš‚|C«ÙK-ý®¡u¤=µ¬ZsÚËel5 c<Ó^ÛȨ³ºÂËyµr›Iu½»hÔ^»hÚO³h$œS“[•×Þµ]ÖÇ×ÔW‹þ˵‰?i_x¢y<ÿ烼?®ë^¶Ön5Ø®'Õn´ÝN[xí#1ÂæÞcºGW …v2•‘¼“ã7üXø â_‰±xWÃ:Ç‹gÒþ"Zø[Ï×u6³ðç†ã Øjmqqyc¦ÜOcf|Ò¥Šà›©ðeŠ'Q=5}¯òº_-Z+•óJ6Õ6ŸËË¡öó¯íKû@êZ¯ü›â?Å…úŽ›¬?à OÄz^¡¡j±êVÖ—L–x¥´½B\"¸R’…€ œWªÿÁHü]ðÂÃÇZ7Ç_‡Þð§¼1¤hºÞ‰isãyn4Ý~×T½šÆÞ).áÓZx¯¼ëYTÚÃku½ž%‰å.v’÷$â÷_ðvï³Ø#8F¤vwù|*ï²nIk×Cì +âÏÁZ5Š^ðþàÏ…²EñÄ^:¾ø†5RóFÓmï,ôÓªÍu5íÞš—‘Z›’¡}=fv–5o4dx§þ 5â?ƒŸ·bü=ø£)øñ Á_ |:ƒ_ìª÷Þ!þи]MáE[t¶²·‘æ1 Y"c¦a i즜bÕ›µ¼î¹•»¦º­[µ„ªtZýÒQsûí¡÷Uà>/ýºàð|?߆'™þüCðßÃù‚_ ^I¬bâéIåX¿·S(F[ìç•Þ1Èøþ /âOübðå—‰¾Zi_ü]ã½oá¾—âüL.uÕ´Ùu$2K¦ý•V;IF‘r‚á¤W* [›R¢Ý¼öù¨µ÷óFÝïêS„”\í¢ÿ&ßÜ“o²ZŸVQ_ÁJiÿˆÿ³Wí=ðVøYªÎ|áíÄ>.øƒáø¬#¸“\Ñí.tkI¥‰¶4«-œ:­Åò¤G2ý”Ńæ xŸ¿m_Žú7ŸŽ?þ-xš[i¾üEÒõ›ÉamÞxwQÒtû”ðÐù<ÇÔÂjh!*û¤¿Ž8³åÈV¡»EMíù{Ü·k{nüÔ]µ²téI%m[Ù_W¿’}4uµÚý;¢¾gý’~7|Eø…û"é"†‰šÇÄÍj bËA±Ôm,m|'¤]]E´IÙ@–KPÒÜ-$—)r‰´ãO¦*å %¿UÙÙ]|¯k­.›±Œ&§(ìöó]þ{ë¯tdxÓâƒðãKŽûâ·¤h6RÊ KFò;XžB #X…cŒç OjæáªþÿÑHðþŸür¼çþ ¥ZëÚ_Â+rÚÞöÊ÷ânżñ‰"ž6«#£H$F8¯Fÿ†Tø_ÿDßÀ_øOÚñº’Ž»Ã+Òüo¡Áªx3R°ÕôË­ÞMÝ•Â\A.Ö*ÛdBU°ÊÊpx ŽÕ~©ø{KµÐô;K-Ú ;+8– {x#Åj6ª"(T€\ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( «é?ò ¶ÿ®Iü…XªúOü‚­¿ë’!@(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šæ¾+|3Ñ>4x'[ðÄ»/í?x«H¼Ò5KO:H~Õkp‚)có#etÜŽÃr°aœ‚5SâWÀOü`o Ÿ‰:4Z¨ðn¥ý­¤,“J«krm.,Ë•VPmîî#) e>fqê%ÿ¬?õÊOæ•b“JJÏoò)I­ŸÇG÷­sç_‡ÿðJo¿ <1«èÞðοs¦k^ºð4Ðjž1ÖµA…p±¤šm±º¼ÚÛí‚ ‰ËÛòmÉϳxᇾëÞ'Ôü§ýŠûÆZ„Z¦±'Ÿ,Ÿl¹ŽÎÞÉ$ñ ‹{;hö U>^â 31é(«ç•­黿½ëë®äõo¿üù$¾K±áú7ü—á—â{QÕ%ýƒþø£ã”¿gÓüI§xšîîÓP¿O‹5m+NÖ.mB-¼÷úm¥Ôv—²¢Åož) H£F%Q@ö(MŦº_¢ {êÒ×§Ë]?÷³žøið¯Aø? ]é¬?³¬oµKýjx¼ù&ßw}w-åÔ»¤f#}ÅÄÏ´«»j…Pà~%~Âß¾)j:Åö³oâÝ#R×õ•×ïïü;ã-gÃ÷—‚Æ ?yŸO»…ÂxÌ@ˆÏ–©|±õú)=wþ¶¢ûùÛ¾ÿ©ÂMû3øoÙ¾„Káëh~ÜháwÑašXcþÍx »À$G.bb»Ã‡ç;³Íy¼ðKŸƒ à-wÃ÷Ú'Š5(üEs§]Ýjš—u»ýv)4é¼ý?ìú¼÷¯}l¶Òî’$†dTg™wÐtQöœº¾¾Žëîz¯0M¤’z-¼¿«/¸ðeÿ‚hü‹á“øVÛA×á³m|x©5ü]¬.»­öeµ7ÑkïíÑNð'”"¼÷ uýGþ åð‹Zð~¡¡ëþ»Ô­5M#NÑn&½×u›æ‡Oº¹¼²•od¸7 u ÍíÌëx² #†órˆWÚ¨£¥½?e÷$’ì’D¥m¿«»¿Ç_]w<3ÇðN„?¾.øÇAÖîuÙ5 3W#ñN­oay¦¼e{qcÒÛOsÙ-”M$lì‘*1eùk öiÿ‚gx'à7Ä;ÿø’}[Å^1›Å~!ñE…Åæ±©>™£>«wpMž“5Ü–V· ovm𿣒Aæ“·Îu?HQN-Ço?Æ×ûì¯ÞÈoÞ\¯m?Òû®þóŸÕ>h:ÏÅ Æš•‡™â_i·ºFŸyçH>Ïky%¬—1ùa¶6÷°´;™K/—… 3ãµؿ᦯ñBOj¾ ›Äx¾Id¿ºh%Õ Ó×N‚í팾K!ËðÃá^­ªéQ=Ƨå‹m:ŒÈ÷r‘(¨¼¹ÞÊp8½ãöœ¹ŽÏàåä×’$QE§;»°UEöä’OÞ¼SPñw„µw¶mWTðíÓYÌ.-Ì·0¹‚P™?+Ì7pO­&¯ Ó³¹âÿ >9k>ø[©èz­Õî§â=Z´Ó-oüAkqlóÛÞÌ«ÝÌrí—j–•HÈÏ”ᜋ~øŸâ-ZÕ´«}K@ºÖuïϦ JHem:ÑbÓa•¶ÁçîÜ|²ž_š0ìÜñƒê:Ýï€üJ×-â)¼%~×¶âÒá®ÞS‡H‘&±I-ÖÙ‘É.¦ vÅ›#äç­UðÌ_¼msƒ—ÁZL7£mÂY Xq‚0á0‚zúší¯ëóü>hݦüÿ5þG­üsño…#Ö´ËÕð¶±­Øk[›Xæ‚É–þïìþTªd‘•— ÁÃÊÊvqƒŸñËÆ:7ŠVŸ 6™câ&ðõì¶Ö×I.lÚìN›¥aª˜Ô¡ÞXî9^vگà éRXxq<ae,érööâÚ(žTedªàVU!º‚£]“YðD³4’ÝøU¤{Ÿ¶³mÉ3ìòüâsþ³gÉ»®Þ3Š:ÿ]×éuó¾â[4ÿ­ëgøQ¦~Ðú׊´ÛøµCi<1OáûË»;{7í^߈ŽPÜ<…v¦Ab›Õ°Ñí8='„>3x«Vñæ—»oáôе}TÐàHoµ¨´ûIY™Ëìû1RO]Û†v Ýß <;)“@²ð“¹h"´Œ²,«÷Giz2©[ë¾ ¶’·¼ð¼ok<—P²Í1M&ï2E9ù]üÉ70äïlç&šÓñý?D.¯úèÿ]NÇÂòVüÿaÿô‚î½þ¾pøwâÍ+^øÇàèt=OO½•oçr\$ŒìC$)'#Ÿzú>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( «é?ò ¶ÿ®Iü…XªúOü‚­¿ë’!@(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯/ü…aÿ®R4«^_ù Ãÿ\¤þiV(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªúOü‚­¿ë’!V*¾“ÿ «oúäŸÈPŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+ÝE/Úã–Ùc}¨ÊC9^¥O`»G™uÿŒ GÄ_ø<½ÿãÔÂ1ý|EÿƒËßþ=@¥Eyoü#ÿÐGÄ_ø<½ÿãÔÂ1ý|EÿƒËßþ=@¥Eyoü#1žšˆ¸ÿ¨åïÿ£þˆÿè#â/ü^ÿñêõ*+Ëáþ‚>"ÿÁåïÿ£þˆÿè#â/ü^ÿñêõ*+ËáŒôÔ|EÇýG/øõðŒGÿAàò÷ÿP©Q^[ÿÄôñþ/øõðŒGÿAàò÷ÿP©Q^Z|3ë¨ø‹ÿ—¿üzøFcÎ?´|EŸû^ÿñêõ*+Ëáþ‚>"ÿÁåïÿ£þˆÿè#â/ü^ÿñêõ*+Ëáþ‚>"ÿÁåïÿ£þˆÿè#â/ü^ÿñêõ*+ËáŒôÔ|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ3鍸‹ÿ—¿üzxj2HˆIâ{{ÇþF S¢¼·þˆÿè#â/ü^ÿñê?áþ‚>"ÿÁåïÿ R¢¼´øf02uàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒÇŸùø‹ÿ—¿üzøF#ÿ ˆ¿ðy{ÿǨÔ¨¯-ÿ„b?úø‹ÿ—¿üzøF#ÿ ˆ¿ðy{ÿǨÔ¨¯-ÿ„b?úø‹ÿ—¿üzøFc=5àò÷ÿP©Q^[ÿÄôñþ/øõðŒGÿAàò÷ÿP©Q^[ÿÄôñþ/øõðŒGÿAàò÷ÿP©Q^[ÿÄôñþ/øõðŒGÿAàò÷ÿP©Q^Z<3ˆŽê9{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøFcÿ ˆ¿ðy{ÿǨÿ„f3ÓQñõ½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Ez•yýzqÿð‹_ÿÏü}Æ€3.08\䩯>•à> ðˆþxkC¼Ý¨xzÇV²¶‡P‹DÓžöê c·vË Äûd•ÝUȈãËPXîÜ¿HÿÂ-ÿ[]ZÇSµ%’ RöîÁS’ÆF›mÑHü¢¶IXöÈŠF¶‘_GÂ-ÿÜïËåLˆå¶"¡;¸ÛŠŸÇsøÛGv‹JþÐÖntíJ±êi1I*FÚap˲0˜» `s°“Î}çþkÿùáÿ¯øÑÿµÿüðÿÇ×ühéoë{ÿÀô·8_‡²ë’xŠÏÆú„ZuðK;»‹tŽK¨ZÞHªàHò¨*¿ÃŽH5È|žËDojºW‡µY]=¬0èë£ÝBñª³ ÃFå}ù,¶Ô 195í?ð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãBÓî–¿ãB[_§ùßúü,;ïn¿×õøŸ9Ýx^øƒá©­|mi¬G&ŠöŠUWIn•o¡k›èÈçkG»è oØôë‹mâGøƒk-¾¢Ú·–ÎÈV;±­¼^|_ìHcfé’:ƒ^™ÿµÿüðÿÇ×ühÿ„Zÿþxãëþ4Ójþ­Ÿæ¿"lŒúå>ÿÈSÅØÿ ëÿé=½wð‹_ÿÏü}Æ£ƒÁwV­!¶³Ž33ùŽT ÞØqÁäà}©-~VüSýõVóýù”ëÈ£ñ~¥¡ø6ïLÒmüKe»w%ÝÄZÄ­œš„¬ežŠfØè@]ä),í"½·þkÿùáÿ¯øÑÿµÿüðÿÇ×ühÏž­þ'x¶ÇUӓŚݚͩYÛX+i1¤z´—ÍIvÍ`”Âì#“§²/Äß6©«Úi’êWZâi:…×ölÚ|qÛÛKÌQÅöW†œynç—1ÇCòr¸øY潫w£XK©Û'— ãÅOóò¬‡æænî}hÒ~E ÞÝÜèz5…•Íûù—RÁQ½ËdÒ2à±É<œõ4/óüU—Ý¿äý?¯ëæ|íâ¯xËÄÕ´íjãÄÓÙÞXÞ%›ÚèÉq{)HÂÛÜï²b|ÒaÖ(Áò‡>“ñóĚ;`¾]V;›‰X=Å•±¹0튫Æ-§b¶Žyº÷ôÿøE¯ÿç‡þ>¿ãGü"×ÿóÃÿ_ñ¡ëÑÜñÏ…^1ñf¯ñ ÁãTÔÚÒ{)A§½­µ“ùpå_̶RÎXÉ‚—ÎQqÆ?޾!xîËⱃí5—³' }9§‰UaVYâqlªÌX6ØÌò?.Õè=ïþkÿùáÿ¯øÑÿµÿüðÿÇ×üi·w&%¡á^¶ñíÕä~ÔüOmm«kòÉ6§u¤GÜЮV1Ën¨ƒÍŒ o(gn:œÔ7¾7o Ù¶²š†¯qrš&¢RãIý w¸o´FбŒyj¨ß6]:–äcÞÿá¿ÿžøúÿð‹_ÿÏü}Æ¥«þ€Ó±àÚ…çŒãðf£‰nµ‹è§Ó4»Û‰šÔ[II+‹Èc0F¬¢&áóHŠÌAÉÌü2¸Öôí7ZÕ¾Z™-=–Ck “Bóyp± “m’Tc1@À±Sµ™²µôÿü"×ÿóÃÿ_ñ£þkÿùáÿ¯øÕ_Y5Ô”¶¿Cçý/S×4›}B{+ßŦjZó¼ú¯öíJD,gìÆÛ„2¡MâàŒ–ü5/Ä/®—/‰5McF–úõm.ííôë.Î/° šUi"b ¸Sæ,¿1\ƒ^ãÿµÿüðÿÇ×ühÿ„Zÿþxãëþ4¿É/ºßä6|ýyãÿÜj~…­5¤y¬¬Æ£ Ó ÛÝ4ŠÂv`-O”Tã!§L>B>õÿ„÷ž4··ð¼ºïöŒ’\E§ÜiÙqÛÛÚ[4IæqtÅÂìûÁFvc5î_ð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãM;_Ïúþ½BZ«>üJ·Õ|Oqã¹,"ñK[k¾„éö ¦¿—$‹ç«¡ýÖc•IB²³yÛ³ðÊó[×¾.AyâÑ®™í´ýF ˆ®4³me`ÆêßËŽÞo(y¡£vL’gnFÜ‘^ÓÿµÿüðÿÇ×ühÿ„Zÿþxãëþ4–?_Æÿæ6î­ýtÿ#>¹K¯ù.6¿ØW?úQwð‹_ÿÏü}Æ£> º7Bsgž¨ce7…$¹Îq=¨ZI>×üS_¨ž©¯OÍ2y?ÄMM»ø™ªKñgCÕµ½:]>ôsk§Ü^¥»'œÉR`˜±Œù‡iÀ\0Úqíð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãG[…ÏÒÿá8ð/†ç_ ¦©xn¬uk˜lî,%ŒÉx¦¤ fgŽYX+³oÚ6ŒqOð]=ݺxŸSñ,ayM½Ý§‡äšây‹l7+%”eS™u†0AÇ™”9÷¿øE¯ÿç‡þ>¿ãGü"×ÿóÃÿ_ñ¡hÓK7ðøƒKÔï´ïZ_éúzÍ}5‚}ùWï¦f’YHÊ?Ì»å ¸Éòøí&ËÅ_´»É´¯íè/õYu;Ä0hqJúêݺÁ Ó%¾ä‰ãÃb¼9Û"*ª×Ò¿ð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãI+[úþ¿àvЦï7ëúüu8‡£Ä7¾¼ñUå̺…Ì—ÞÖ[háK@’ʱ…C6åräçŒdç…¹ø³â+¿ çmHU‹F¶žgÐg[™f‘o1I óX,|ªê@sϼÂ-ÿK…ÀšÜ/ C ׯV‡ü"×ÿóÃÿ_ñ£þkÿùáÿ¯øÐIÂxãþJ‚¿ëöçÿI&®®®K໩æŠI¬ãy!$ÆÌP´dŒ§mBñWu[YðƉ$ww‹¬%´–¶ÒI%äÍzÏ^)bBbl0mÛr2ª÷üwâÝCâ.¯j>!šÕ¬ï­-Oö\ˆ¯&mÝç}”;r|Ò$Ùâ0¡³¿Ðð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãJÛz[ï¿ùŽûùÿ_¡âšWŽü[âý9K[Ó¤òtx'šãEhš)ä–AzʲÆQXe¨÷ÒÓfñu‡Ž­ íþ«}¦a´Ù!’ƈڋâå" “:¸0L¶Ð½+Öá¿ÿžøúÿð‹_ÿÏü}ƪú·ßþù?½’Ö–þºÿ_#Æ¿ãSoëæSwwþ¶±àž ‹Äw²Í¬øVñeÕÆ™¡ß½¼÷z"A=äªð¼víÛ&C?u˜ƒÆK|cãÿÂs«CáK}nt†xâ…ôÓ<1²Û†ŽhÜZªœÉÍ!9 ªô_}ÿ„Zÿþxãëþ4Â-ÿõu|)|ªÛ€^?Z›ù~ õø?™ãž#´ñ#üNÒ.|J×–ðÏ£ßZ´:LOwfòï…‘ev‡1î]çqÛÌ``Üýµ¿Œ<9àû :HõV;[}êu¤$¿bÎËÇ à1##{c5Íè7þ#ð·„á³¾Ô|an‹­ê ¨]E£}ªæÙ<Éž ý™„‘I”c Y, ïÿð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãN^÷õè Ûúõÿ3É5oxÓAøZšÿ‰ Ó,äÒìíµÈ"rf¸UUk¨YvÆÛ|Í»\üÊ£8ÍaMâˆê6©}&ªš•È´šÚÊ -d±‘&•ÂOqå- ‚ŒºdƧ¼Š÷;ïÜjvÍ¥eÄ/‚Ñ˱հr2 ÇøT¿ð‹_ÿÏü}Ɖ{ß×õýz‚vþ¿¯ëÐñM+Ç~-ñ~œ‰¥Ç­éÒy:<Íq¢´MòK ½eYc‚¨,2‹Ô{ëüJñ>«¦®Ÿ§é³ø–X%6ú–§g£ýªæCö}ñ˜ÐBèUßc![åùs‘êŸð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãDýô×ø‡ù‰hÓ>|ѵ¿økBð军¹k5¦•¥Em`šO™mr …»73‰†HÔ!xðUx}ÛkWL“Ƕ«kq}«ëwF84‹©mßK·TšK‰Ê]ÂvÂ,q¨l7e˜Œ öïøE¯ÿç‡þ>¿ãGü"×ÿóÃÿ_ñªr»rîî&®’>r¿ñ—Ž5Í~ò3¦ê÷I¨[˽æ’eE/Ð|’}–5lDKä4ÛB†ßÆOoðë^ñ&‰$ÇâšÖ« º^v骯 ÔÏ"M ,1®U1w2I8¯Vÿ„Zÿþxãëþ4Â-ÿ¿ãGü"×ÿóÃÿ_ñ  ú+Cþkÿùáÿ¯øÑÿµÿüðÿÇ×üh>ŠÐÿ„Zÿþxãëþ4Â-ÿ¿ãGü"×ÿóÃÿ_ñ  ú+Cþkÿùáÿ¯øÑÿµÿüðÿÇ×üh>ŠÐÿ„Zÿþxãëþ4Â-ÿ¿ãEvQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|cñ{Rð×ÂÙ2×_ðöƒesâ9­mm#YwŽæfŽw矞E8ï\ÇìÍû5è"°¹¾øýw¯jZ„Ì KÔðªFN1ÉéÐ W¸üMø#£|tý˜/|1äš}Õý”Mkt¨I¶ž=’DøÇ;dD8ö¯økûcÝ|´íðçÄWÚõ€òžë÷:|ö·˜é [‹˜Z<ŽvààúP¢Ùá4’1ž Á$ÿÈKPãŸ÷é#ý‘~±?èž!êæ'¨ÿñužŸðS_òü+øÏû:?ÿ,èðS_Ÿ þ&óþÎÿË:ÐöEøNÄÿ¢x‡©ÿ˜ž£ÿÅÑì‹ð‰ÿDñSÿ1=Gÿ‹¬ñÿ5ð€éð¯âo?ìèÿü³ ÁM| :|+ø›Ïû:?ÿ,èB?Ùá;þ‰â§þbzÿD²/Âv'ýÄ=OüÄõþ.³Çü×§¿‰¼ÿ³£ÿòÎÿ5ð€éð¯âo?ìèÿü³  ÿd_„ìOú'ˆzŸù‰ê?ü]þÈ¿ ØŸôOõ?óÔøºÏðS_Ÿ þ&óþÎÿË:ü×§¿‰¼ÿ³£ÿò΀4#ý‘~±?èž!êæ'¨ÿñtGû"ü'bÑ}wEТ¾žÚ9.Ö4š¨,# .€“† d`àQW<¦>‹à½ÎâÆÃK’ÒÊZÊÉ·[ZAŠUsãj£€8( ÿÙpostfixadmin-3.0.2/DOCUMENTS/screenshots/postfixadmin-mail-admin-login.jpg0000664000175000017500000013240610676263533025430 0ustar daviddavidÿØÿàJFIFÿíPhotoshop 3.08BIMÿâøICC_PROFILEèapplmntrRGB XYZ × :acspAPPLöÖÓ-applrXYZ,gXYZ@bXYZTwtpthchad|,rTRC¨gTRC¸bTRCÈvcgtØndinì>desc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀ¿ò"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔø?>§ðÃâׄô_ëV:Ÿ†gšÛZÕ«ê:yÞk¿´`^ÌŒRApFìg’0å¢mvoÖݼ¼ô×Míw›WÚé}îßzíÛ]“gÓ¾<øýsáøs@ð®®x“Rñ¼÷È-f†íma0¬“Hó:ƒÍÄ@*䜞˜®¯Ã>1ŸÄú½òC¬Ø‹€H‚ö ñà‘ó¡åzgèE|ÕáÙßÁ>8ø¡ðöúÃáÓÛøvêVóEáù,ÖÚání G,rÆ¥³Þ2‚>`Ò2äÖF¥ðÇÆw?~é4ÝwCø™¥ÇtÖZ½Ü/ ¶l¼è¯HØ8˜yH°°,[l˜2ASܵµÕÿéM~Jÿ‘ýýôÓô¿ç§á¹õßö¥Çüõ»®'Fý¥t ã–¯ðïLÔ¯Äú%Œz…Ô~Eöð<°# ßÿ³ô–Þýž4Ù-4é2iÖ’É{§ßA$š”—JY®¸ÍÄ’Kæ0‘A— ¼0¯Ò> üGðü"?µ;(.õ¸µÙu½kL±±¹}]íµ6Ž+‹g"B²‹x¼¬ ³.1ƒº¬½§+zwóz/—Vû/1s^Ÿ5µíé«ùì­ÝùTüJø²¿ t;[ýYu+ˆîõ+-0,;w+Ý\ÇnŒwò†•Iï€q“ÅtUœ ×Y>õñ^µàÔßxÓ[Ñ< k~…eñGH¼Óm-­¤[xl¼» '’/Ú ùÎ0k+]øtš…׋,ôKâ¸þ)A-­ÑIÞ[M4ßD²´ Ò;wˆÈde\X.wúµò¿³ÿäßþÅ/vïúûüŠûÑõ§ö¥Çüõ»£ûRãþzÝ×?ã};\Õ4QÃýV ÿÍV7š{_FP}åòÖhŽOmÜzgt¿iZdÑüDÖ-µ«¶˜´SYé­`‘ǵ@FFš]͸1ݸp@Ç) ö¬ùÇuŸ­Ú·ÿ]u_ø_áö¡Š´D¶ð¿Š­þ.Aã7»Ö|HÚ|éoq¥ý­Ý÷jyRÛ½™Ž4¶åX*ì …†Äÿ ¿á ø?ñÄRxï]ñ6»â]FÎe¿°¸½é’êÇæ[d"I­–0³ùàœüÄÒ¾—~ûoáïoÒϱMYÛÏÿ’ÿ/ÑõPÕnÈšèÑý«>?×]~uñ_ÿ‡Z¾¹ð³]𜚋ôÍ9þ#i—ÖÐÙè·zQis5±y-P3hò“³"ɾ-ĸFjèµñ¾yw¡ið²&£¥:´%´D,fä†xÐá¶H¤•/¢o­¿ïéÍø15«]“úU­ÞöÓÕZjÜc>uÕU¸#"k£šøjÿŸ‰|ñ×৆õ]A³ñæ6¥ É§¹M]:ØÉiñJ¦D,cÚ+«Ê1׸þÌwðª¾ØiÐEãrÓUñ ÖÖ¡<+s£Ã£G*™p-nÌ‚ÉYUÉ U ÓŠæ_wãoóü+FÖ×þÿËñGºjÏœ®²}èþÕ¸Î<ë¬×Ä÷þ´ñ‡‹¼T¾ðç‹î~$Cñ ¶“® +¦³ÓmÒî&œ¥çúˆ#‰ÖHò­#6 >V´4ˆµŸøl/x‘ü«è.¾&Ôl5‹‹ Þ %¶’)¡¶’ïRÜËyްH6F#€mÞ˵KM7íó+ýê/ÿn·ÈrN.K³kî¿çm=O©þü[_о ‹[Ò“S´‚[››aåwƒÄ1ùI-#ž„gŠèN«8i®€ú×Äþ<øSâ{¯xhú“øZÖ÷ÄCU´ºðÍÆ»Í~ík<Úl2Å+ƒ›²U°ÈѸ0×ñG†ü?>é_,­þÕŸ8ó®²}ëžøyñh|DƒY’Â=NÔhºµÎ“'œW÷mg]¤ü§9Áõ¾Dðç…,<_ã+‡ð7†|bß->'ÝÈž!7BÎÓO‹T‘®½$Cä6&·Vù¤s”$î­¿Œ? üU}á–Æ•¨ËáÔø‰©ßkwŸWŽêÕÑżï§Ç$ow”£a `í“ Šˆ¶ÒvÝ_ñ‡_I?š}'âº;}Ê}=b¾õÜû ûRãþzÝÒjÎN×Yõ㟳ýÜžøQá? Ø'Œõoí}¦¡s¡\iñé©Èñ¥ÄWÉo]±DqeTìkÆþü>¹¶ý¼E¥øSÁÞ.Ò~97‡î­õmjëNž+Jàºy¢=]³¦R‹l§n€¡p*JÒk·õøuíæ(ûÉzÛúý?cVsÒk¯Î—ûRãþzÝ×ÌŸ,ôÿüKÕ>ºÒ|!ãY¼qàK;=!,té$ÅÊÿ2)Ü|–ì‚æ&!Ø‚saLÔ|‘æë®Ÿ}¾û]y48.y$ßoÆ×û¯¯¡ï ñgʼn<$#ÔþÕ’º¹¸Êù%f‹g]Û²¹éŒµÑj\Ï[ºùã'Ã/kz¦‹'†4ÝzçH¶ðVˆl-ÒKk½fÝ. OcorqåLW%£áÝr£Ýº¾Ÿð…审á]6}ÓP°²–Ú6‚Ú{W´’Ý6¨Ð¸ Q°€F1Š¥³]SkÖÒi?š_Ÿ•óR»¿F“ô¼bÚûÛü>[?Ú—óÖîíKùëwUÿð"ü¤QcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿcûRãþzÝÑý©qÿ=nê¿þQÿûß¶›g-Æ£w4ð!’Ydp©’ÌÇ€’kÌÇí·à™¹Óõ/ßD~ìö^Õ. z¤±Z²8÷REMûVxRÿÆß5í;ö÷·sËöy^Þ0 ÜÃÌRMƒÔ¼I"ßv;×)á?Ú#áU‡‡í`Ô>)øDš(µåìV“Ûq÷^)J²‘è@ •¿m¿ÃΡ©x®Æ!÷§½ðÆ©kcÕå–ÕQG¹ W©h¾+kˆ!ºÓ®$º·¸E’)ƒ¤ŠFC)A"¼#Å´?½CÃ×péÿü?­Í$eVÆÎú+¹îsü)eÉô×Wû)xRÿÁ?ô;ÄV÷¶“Åö‰RÞ@ÛA%̲CФO‘Ûn;P¸Gâø kæ ŽxïEr_øE`ÂAâŸú&Þ6ÿÀíÿ“ëYе={P7—ß ½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøHøHøHøHøH•g#K§37—!g’gx$òÔýÛðWão…ÿh‡V>+øAªÅ«è—åÑ%Thä†Db’C4NÃ*:²¼nªÊÀ‚¯Â/†ÿµ\ðQ_ŽPxÓö„Ô|5û>ø—ÆúÿöÓêwMq£ßßÛè6ëmÎñŠwáfÞ¬¨¡¤kþÄÿÁ4¿gO~̳xoâ´E¾½>¹©ê7K½kÛWI®¡t™£›0ˆ‰Ê.F8®J¿´Ÿ´·'NþŒú,ÖJÁᾧα /h¹]ÕÔ¢îß[4íÒËFß¿ÑEÖ|èQEQEQEQE|ÁðÓþ 3û6|`ý²ngï‡_?´~.Újº–‰.ƒÿþ©ËÍ=g{ȾÕ%ªÛ-m.á.ÖÙò–Êäéú+#â4Ÿ…žÖüOãÛÈôí ÖêšÜ€”µ¶‚6–YáQŽ=+ñËÃÿðwWˆhˆšæ•û~Æß>1éº)÷~§7ÛRb©,ö–Zuß©Æd=ÏûIE~`~Í?ðrü4GüKRý’áMcÿgø¯Ä~ÿ„¯þß´yŸÙ_Içý‡ì+;ìÙçžoÞ}¿7éýQEQEQ^=ûl~ÕÿðÇ ôÿ`ÂEöíZ=/ìßnû&ÍðÍ.ýþ\™Ç‘¸{9ãØh¯?ý–¾:ÿÃK|мmý—ý‹ýµöô/´ý§Éò®%‡ýfÄÝŸ+wÝÝŽq“èQEQ_/|Lÿ‚’ºý³-¾ÿÂöÏ´jÚn—ý­ý¯åíûbÀÛü çgÚ1·Í·¨ÏPÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_›ßðqïí&~~Í––zEÄ1j:]•÷‰á/±„Wj©¦éÅ•²‹ÍV;…›qò×é ;ßðs'Ç)>5þÔ#Á^›í]r <*³ÑíË?èÚŽ±t‡ÔØîÐÿÑý¯~'ørÂÅžÞ!ñt0]Êg¼[V²6‘ÛÛFDF!r-d}9ÿ«Ê,¼ÿeWNÿÓF±_~ÏðZ-CöWÿƒvgøão„>=}Câ&‹â Áž*ŽÖ?øGµM?P½¼ŠîF¸/¿íÍ5ôb%FÉHÉ*€?W¿à…ð\5ÿ‚‡þÁÞ;ñÇí?›¡ø³à²<ž/¹°ˆ¥­Í’ÛÉqúE’c,\Œ7BÅp*ü9ðþ û{Áqi¯èŸðK;ß|ð_„amq¬ØÁvmíäv[u¼¸žÚè½Ä»$!a…TÛŸ—sz/ü7ÿ—ñ¦ÿºý¡âý l5/ËûMéáí:ÖþÝ¢º·Ó–ÆòÙ/^à wÔ¦*˰ù]Iøçþ 7û\øËþ Šý§>,øOþ !ðƒÇÃAñ¼ví}£Y¤ÂYì^ãÈšÎYž(.­ä[¹²Ë( …ã!”}ÿÐÿ‚þü{øsÿ2oÙ3þ í¦ø~ûÄ×zÀðõ§ˆ´ËXí&·Ô[ R°Ïor!¤q°3!`A!8ÏÚOþ QûZþÖŸðVO‰?³×ì/ñ#áÀ 'áéVÚŒ–Ò%ÕMÀ·‘ÞâòÞã|²ÈYã†Aò†Nv3׉~Âÿ³ßÅ?ø-×üîÚ¦/‡¾ ð?ÂźoŠäÔõ;vŠ+KŠÝ,mb€·}ŠÛÌX‹ìN6îôø+íIûøçö¿ø‰oÿ&ý‘~:x[ƺ.¿{£/‹ü*Eªø¦ YÞ/ñ4ö±J&Š(äW)!ÚÊŽ ÷Ÿìa¢ÁH¥Ó¾%xoö¨ñ·ÁoÚjßµVð´!nÑÙxœùQéætKdl<Éå|ÙÈ?rÎv?àÇì‰ðÓö—׿à¾ú·†>üBð~‹ûO§|YosâëÛhßF“TŠH꓈Œ‰å̉z}eL$xÊ}—ÿÒø ÆsÁ_µ_~Á:Åÿ~ÉÍgzu4ñ{ƒÌmdVÝ&x”[Kuöß-ÐG¹ÒÀ³ ìÞ5ñâ©ÿeÿƒ›|[ñ£öªðW‹åð„^<ñ?ˆmŽŸf»õk ^õ†k9&d†b£PBÃÌhÝ §?¶çÀ?ÛóÃðCo‹ºíñ¿á†½ñ ÂïYÖ|OªXX–º€ÓÃó-Þ“ ®‘[ÇœJêâ8Øé+÷Gåü}ðköÉø¶~2Ÿø$ŸÅ‡ÿ Οý‰ÿ Wü$öq\iïþÐû‘æi—›|½—›±åçÌO¿—÷ãoí­á_ø(—üã_Æ?‚– Òü3ã…^4û®·0_ÅökMFÎO5!–XÆd¶²6T©89óƒþ cÿ›¢ÿ¹SÿsTÐ~ÃßðYŸÚOãü·­~Ïß~$hü"´øã]-þý.–z|«ÙÅö¨íVäùminww6Ϙ¶[<çü#þ cûyÁ¿ný)üGñ7þÁPþÕðê_øWG·‹U³IO¥]\ÛY$±Ï°C"2³+G Á%Àÿàšò¹'ˆÿìªüGÿÒ]vµ?àäø*¯ÿYý¯ü7û/þÄVÏ⟠ø[Ä gX*ÊÞ*ñn·Ì/Óìð %\¬ZY (#`íðGoø)‡íåÿ™ý»µY<;ñ7þÿÁPþÕñz…t{ˆ´«7´U­ÍÍ“Ë$ò($vfUY$9!Q¿ þe¿àÛÏø)æ±ÿ¢ý°üKû/þÛÖÏáo x§Ä g3_ªÄÞñí€4¯ÓìóˆâŸ%T¬RÈÇõ“ãßü{â'Âßø*MÁèÞ ›Â—^#䇻¸´¹m@E}›JÂE¹ïæM§ËÀÂä79âÇfrèÆu¶“QVîïþGÓð·æc^¾.IÊ•9U—3·¹íÝûËCÖ¿jï|pÑ~'êpøÇ¿ ~xE_Ù—> ¼‚›áä¡•ˆ–9G™|«Â޽O“~ÍðQˆ:7íE§ü=ø÷­xgÆš~­}˜š¶`xÖYBù/ Öác‘ :«¹= •>3ûQhOá/ø(V³}ûYh^"×|/{«Í4pZ3,·ö$0¶Ky7(!ˆVq— ×;á½7MÒࢠ‡ÁþÔ<¤Ÿh’Ùè×ÒI%ͤ/-³¡ÈÌÁ¤V•,vù˜è+´ùƒí¯ø)ŸíݬþËhþøJ-cñ&µ ^KwkÞ ñ‡¾ xbÆëPÓ,ôïì­DÁÙl–Ic‘Àä#yÎ7t@?xgÏÿnïÛ^ÚÏöjðºhÞ×t­?OÕ!“TÔ®ãU´kï³Ì« »‚|ÀTÎĤÐÒ_±ßŠoü ÿ’ß…§û.©£ø_¾³›b¿“4W®µVÃ(8 ƒŽA¯ý•kOÚ_öœ°ñ^—ðë]Ñ/¯´ëxnÎ¥¨ØÛAö`òaX ÚòLq1XårM{ìÏÿ(hÔ¿ìTñ'þ¾¯>ÿ‚~)Ü'ÿohö]ÿ‚|wý£fŸÀ^ÿ„nûÅwJn£ñü iöè˜dŠ$ØÄ³D„8,AVÈ+Ù~Âÿ·oÄoþÔ׿ ?i›=^ðËyf—1ÛE–·V¡ÙÓ0ª£¡Ê>îrçä¿ðEŸÚ§_Ïo \ée/ìÏÿ)—Ô¿ìkñ'þо PøåûgüKðwüÆËá÷‡6†ß_Ó­õ£c’‹4K ÷À`+áø.˜Çü*ÜÔ[ÿl«ì/Ù3þM_áŸýŠš_þ‘Å@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ ÿÁG¿à–þ Ö¾xãâ7Âß xÏÂú^±â]7Ã÷|š»kWìnµ mí$B/í庹“hŽÞ$3 ¶ìI ÷eø[ûÁEt/Œº¼ž ýŒÿfôøã8f6¶íâéþ±˜*‚Ò ;¼^ü­¸lX™¾Qós_NþÔðMOÚßöôø/gàïž9ø ð÷Á«©Xë3øOÂúN©;ÜIk:NI¬<é4ÿ§Oü‹ÿØÐEEs¿ðŸÓ§þEÿìhÿ„ûþ?ò/ÿc@ÎÿÂ}ÿNŸùÿ±£þïútÿÈ¿ýtTW;ÿ ÷ý:ä_þÆøO¿éÓÿ"ÿö4ÑQ\ïü'ßôéÿ‘û?á>ÿ§Oü‹ÿØÐEEs¿ðŸÓ§þEÿìhÿ„ûþ?ò/ÿc@ÎÿÂ}ÿNŸùÿ±£þïútÿÈ¿ýtTW;ÿ ÷ý:ä_þÆøO¿éÓÿ"ÿö4ÑQ\ïü'ßôéÿ‘û?á>ÿ§Oü‹ÿØÐEEs¿ðŸÓ§þEÿìhÿ„ûþ?ò/ÿc@ÎÿÂ}ÿNŸùÿ±£þïútÿÈ¿ýtTW;ÿ ÷ý:ä_þÆøO¿éÓÿ"ÿö4ÑQ\ïü'ßôéÿ‘û?á>ÿ§Oü‹ÿØÐEEs¿ðŸÓ§þEÿìhÿ„ûþ?ò/ÿc@ÎÿÂ}ÿNŸùÿ±£þïútÿÈ¿ýtTW;ÿ ÷ý:ä_þÆøO¿éÓÿ"ÿö4ÑQ\ïü'ßôéÿ‘û?á>ÿ§Oü‹ÿØÐEEs¿ðŸÓ§þEÿìhÿ„ûþ?ò/ÿc@ÎÿÂ}ÿNŸùÿ±£þïútÿÈ¿ýtTW;ÿ ÷ý:ä_þÆøO¿éÓÿ"ÿö4ÑQ\ïü'ßôéÿ‘û?á>ÿ§Oü‹ÿØÐEEy7íûPÿÃ?üÖ|]ý‡ý­ý“ä¢}·Èó|Éã‹ýg–Ûqægîœãg5ã_²çügþSã®…à¯ø@¿±¶¾Ñþ™ý·öŸ'Ê·–oõfMÙò¶ýáŒçœ`€}}EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPà~ÜWâ=~ÜPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPˆÿÁF¿äÍøeŸ©x_MðÆyuâmNÆúæd·ó`3¸¸•âïû¤~fa•Æ=×ÂðYï|{øoñ¶Ï᥯>|GøEá;Ïßhž=ð¤öW¶ÇnÒGtöB@ÒÄ ‰ŒaÑʺã§ÍîóùsyÙ^ÿuû‘¹ºkù¹oÒîÖ³óº·{£í*+óö?ÿ‚­üBøñûsü øw©_x?[ð‡Ä¯„³xæûS³Ðî4û‹‹µ¼»…|ˆå¸s [ (ÁÎCÜ€>Žý·¿à¦>ýƒõ8¡ø‹àŒ^+´]-µ›íKÂ>—VÓô{UwV’òä2¤»Ç…­*ÇÙ[™îÚÿÀ[‹übþDS½O…t‹ÿÀ£-¼¤¾gÑÔWÉ??ൟ>|øYã}"çÅž5‹ãAqàýú†µ¬yd,û-2¤‚:’ã… ^û.ÿÁ~ô«Ù‡â/ÅOÛjÇSÒ43ã%÷ßÛi^™5(­ÖÝ'¶[ëG•nù¢@0C¡3BƒnQ·Ã¿­ãzÞK@Oš*KTÕ×¥›¿¥¢ÏÒÚ+óÏ[ÿƒ˜ÿg¯è(»Õü?ñ® ßê1Xëšd¾¸ŽëHŠG——EØEo 3 ,‰1<‰ Ûâßü;Køqûeè:\^,Òn>^|#¹ø¡5„¹ŸT¾²Š;™¾Ó"˜áB h·’Ì7 JÕstïÓárü“ûŸggÊÛ²Wzi×Y(þr_zî¯öµñ/ìïÿøøûJ|gðw‚¼)ÄMX\ßè¶½á©tý+Sèï4q\;|ì‹„¸SWnýÄÐþÊßðYWÅ#@ø!áOŒZˆ®îltÝø6æÛÂú¤ÐG,’$WìpH6º¡Ü»qš¥ß*ßü¿2y•¹ºOò>¹¢¾@ÿ‚€~ݾ1ý—¿n/Ùcáï€ÓÃßð|cÖµ;M¨[<“Á ´vÎo"Ê«ýô™,®:qÇ8? ¿àà/€_~/hÐcø‰i ø»[>ð÷ï¼15¿…uíD0Amk|NYË0_™¤€A3Þ[—vÚ·[«šK»Ðª‹Ø«ÏEdïäÜ—þÚïå©öíð§Æø8oà'Á¿xïK¿Ó~)ëºWÃmOûÄ%Ѽ'5Ö…a¨ |“h÷›•VO0€V#äfÈÉñþ ó£þεí kñãÄV·?þ èš.§.•¥øbãû^ÀêÍäºk*åYî³µ#B¡†IÚrGÞJ]ìúh¯ù[ï¾Ãp’n6Õ4­×Y(þn߆úuÑ_)~Ç?ðX¶çÇû l|¢xž ³û ÿÁR|-ðËÅÚö½ðÛTøy7‰®m¼=áÛ[Ä3ß,÷h«Ž@¢-–ᘲ¸b\KÜiKKßðM¿ý%¯] ¿J:¥küÜRÿÒ—ËSôŠøâãþ ›ðJûöxømãÿ‡°x÷Æ—_&»¶ð¯„|? =ï‰uY­­Ükh"ù$|îÒÇ*Ì9¨u¯ø/À/ ~ɼMwã ;Ãx¬ø'Q²¸Ð¤M[@Õ–'–KkÛ\å m…ú€2r¶ë¶æÒüÚ_5Ý÷¬—[þ ·ø'÷>Ìû6Šø{Vÿ‚ÿ|“Ãú$ÿ |7ñƒâ¹®Ú^ê±xoÃ^–ëZµÓ-n$·—Q¹·‘ÐAld‰ö—`äcäɾø!ûax+ö’ý•¬þ1| ¸Ô¼KàýGL¸ÔíEŒ}8ƒÌY`KloiÄ‘I–9.03L·h:ÿù?¹ö¬ÔïoëúÝ>§¨Ñ_œß°ÿü!áO²ÿŒþ#þÖ¾ñWÃm;Á2]Íw©ÿÂ=zÚ,°Çw ¬6ÐÝË-óÉq›e;ÝÙXyýŠÿà­ ÿmïŠz—<)£üBð7Žtý)5äðÿ|=&}}¦¹@·–êY–HI‘0wCÕ$åkuIüš¿äŸÜû MBüÝ_4íùÙ_Íw> ¢¾qý·¿à¦>ýƒõ8¡ø‹àŒ^+´]-µ›íKÂ>—VÓô{UwV’òä2¤»Ç…®_âÇü³à‡Ã‚_ —¨üF²¸»ðÖ¥­øb[3VhÞXa›÷Ž¢7Ë*˜ò6ïÜ@$“Žk®tr_œ_ÝÜ›é~škÑÝF_”£÷ßmOµè¯Î/Ùßþ ×á-;öið^·ñÖÿZø¡ã¿ˆzø{Døuà[Á©Çdcì°–y÷{òXÈ7ŒíS±±{öŸÿ‚ô[üñ¯À(üð£âv¥¢|Y¿¾ƒU‚ûÂW±k:jÛLð5½½šüÒ^‰"”˜0HŒ£ôa‘Ù8ë»KæíoÏRš’æºøy¯ÿnÞÿ“²ÝŸ¡ôWÅ¿?à»~ø‚ãMºð·ÆÜè=޽âÿì?Íp>Ú^B“BÚߘÈmËpÍé†Ü£iÅŸÚWþ ¿û>~Ë^(ðž•ãÍSÅ:¤¾:ð”4ðüº&…5üz¥„þg“åíù•ÜDí‡U}æZ-×Îß=tü­Ÿ`I·o+ü´_ªôºî²h¯ý¥oþÉ¶ß î¾2 rÓNø«®ZøwI¾†ÌIokyr…nßpòUc» žœùOÅßø./À¯‚گī/]xªîãá—ˆ-<%všvŽ×Û:ÍÊHé§iÛý"áD‡S°!\1\¦­túió\ªß|¢½Zî(ûÑR[hþNöÿÒ_Üû`Ñ_h?ð]O‚Z§ì÷ñ;âˆ-> øfOƒ“ÙÁâÿ ëž{hÆîu‚ݤ³wÁÍÙÉÀÞüNÿ‚¤ü.øIñ—Wð'‹ˆ†½¡ü9ŸâЇO èð‡/µ÷ó7îÛãñ¤ä’»Ûþ—ä›ù)ͤº»|nÒù£èê+æ¿Øþ ·ðŸþ M{¬Åû1I⋘ô+{Û»OF’Âß<¨#äÿZêжí™Q‘ó>”«”\wD©'{]Oÿ‚ÉšxËþÜ¿ôºÞ¾4ÿ‚]Éõøþßÿôßs_eÿÁF¿äÍþkxc\µä &Âѳ<ŠÎÌX¶Ì’+õÒŠ¨Þ)«Þé­{4âÿý«[ÞchJ2еškÕ8µøÅ|´ØüÞý…à?¿fÚËöñßuï^i >?€uhl.¹Ôîêo2Ýd¶Eh6Ü Üì~L`ÖWüÇþõñ{öîý­?á2ð¡ðÃÅž “ÁøzËÞ<Õ5k{O jæ©ÚAb…m²ùSÉVؘý6¢oß´åÑÉÿàNMþ2v괶æý—ÃÚ+ÿQKðŠ¿}{Ÿ“ÚüSöƒø ð›öG×fÏü"›ãìáo­i·¶þ!“P›Ãº¾£$íº9"…g,‰1]¥#Îü†z‘ÿÁ >:kß²íç…üu⯅2øÃVý£ã-õÕ•ÍüZ{X´;eŠ%{V‘'2+Üp Äó_­”VÞÞ\î§VïósGo.h§÷™Æ P[ròü¹\ô™4~z|[ÿ‚KüDñ÷‹¿nëý/YðJ[þÓú6§øY'»¹ §Ëgböò6 ±‚ì ˜¼ã’â¹oŠ¿ðFŠ:ø£á}oJñ€Ò×Cýšî~L³^]‰dÖ$³¸gP-H6›§R\‘&ýÑé_¦”V/XòtåQùF2‚ÿÉg/éB£„ý¢Þ÷ùóB_8þ'æïƒÿàŸ¼+£~Ä«·ðùµÙ§H×l|A+Ís,w²ÞÙˆaûµ°ó£Y.%ò¾^€ž+Îàž¿ðBÿ‹_³íéàߊz˜øGð£@С½oé¼A¯^[øÒiQÒ$’ËP;XPÈdخʥT,c‚Ÿ­U)5QÕêÛ7¿ËËm®ŒœS§VÑ%’ý|÷ì|{ÿÿ‚vxŸöÎý®fïø_Sðý—†>j¼þ"†òâhï® ¼‚”YªBèÎ<§Ï˜ñ‘‚yò_Âø!¿í¥xàïÀ¯Šž9øE/ìÿð[âñÅŽ¯¦Û߯Šu•Žâ[ˆí¥…”A f¹¹RË)*H/³úíE*MÑ~ï~kt½ÓOäÖž¬Ò¬h¨Ë¢·ËÞºù©4üç;öåø+ñ?áæ—ñïöjý“nµÏh?~)}|6ÿ uhµX®Zò)Ç«0ûØÓìð~ÿ{oX÷b Ϲ¿m_ø"/ÅoÚOâGíi­ø'Ĭ­þ=xsÂúG‡ã¿¾»I,¥Óe°{ƒ{åÚ¸Eag C”’˼ãõ.Š˜.ZQ¦õ·_ûv0·¢QVÜÓÛIUuc¦·ÿÉÔÿô¤»ü9ÿ‚wxÃÁ¿ðS/‡¿/µ ?†ü)ðb‡7ÐE<ÿÚ3êÝy¾j!„#[íÈ ÒÏðcšÑø…ûø»ÅÿðXÿ ~жz—†—Á:Ã{ÜØK<ßÚrÝÉqq uˆBb0í™rL¡²Êz×ÿ$ÿ‚àø?öG—‾ i>0ñÅxZmbå´¯ Mªh¾­üÛc«Í§“n‰™‡ ¯Ë)â›gÿÌðWŸ€Ÿ¤øÕ¢ø×Æ¿¾#ü>Óüs¨øsá÷†¥Õ'°µšØI5ÛÅæ ¸q(v`'šœæª§Y½/-{óûKÛåÏ茣Nô’ÝFþö|¿”=~gÊz¯ücñ~Ê?´¹oþx£Ç_õ-uîü;¯6£/…|Ee¨ÞÑâ⹉â^p#Ã9p óz6»ÿ@øâ¿ØÛÃ>ÑôÙÿáε¦|eÓ¾!\éÞ¸Õ“FMµ¶0yb[˜¥škÓÁ$¬q‘•WÒ><ÿ‚êüðOÂß„Þ0Ó¯ü]â}ãS^Åá…Ð|?=õÜóÚéŸ$ZOuá½G[ð̶f®Ð+´°Á;1Þê#|²©#nýÄ)ûR®”^1ŒV‰Y|—%ýy}ßD½IœÕw'}ß3ÿ·š•½9—7­ýÌŸø+üëâ÷íÝûZÂeàCᇋ<'‚'ðõ—‡Í|Ÿ/ÿ"¾zõgäœðBÏŽš÷ì»yáx«áL¾0Õ¿hÅøË}uesžÖ-Ùb‰^Õ¤IÌ…ŠÄw \1<×°ü[ÿ‚KüDñ÷‹¿nëý/YðJ[þÓú6§øY'»¹ §Ëgböò6 ±‚ì ˜¼ã’â¿Bè§'Í S{8òü¹aÊœ¹ß4eÕYýÒ”¿93ó/â¯ü‡â‡Ž¾(ø_[Ò¼Aà4µÐÿf»Ÿƒ“,×—bY5‰,î YÔ R ¦éÔ—$I€tzVÿ¿ø$7ÄO\þÂÒêÚÏ¥“öc°ÖmìT:(¸üœ!ý&ùê~,ÿÄ;ß­ÿcïü4ñLJ¿gOˆòxgP×u åÕuÝwM¸Óf½•,olíÑÙv óaž6Œ²!PHÜ=†ëþýûF|>ý–?ekO†ß<ã?‹_³Ïˆ¯5Ë™¼_s¨¶•}ÖìZÅpˆ÷  V$Ü‘î^G—´!ýE¢¢Ú%ÙÅüâÓ_ŠZ說m œ½¤å9-ù¯ÿo¦ŸàÞ›ußSòö™ÿ‚ |Sø‰û[ø¯âö™áßٛ↥ñ?L±›]ÒT‘Ø#䯂ßðDψ~.ÿ‚TüÔ< ¯éº?í¤xâßãeõÏ‹¢¸šßWÕ¦ýè¶Ô™wL®#û*»á˜¼RrËúùED³çqvmÅÝtqw¿«j:ÿu"å.n[ôæùó+~ ËÿoF~TøÛþ“ñ·öœøKûXëߴߌ>i¿h»]ÓO²ðòÞ·‡ôht©b’–iPLæQolâ61áœoÝå­ ÿÁ"¿jŸŠ¿|gãßÚëÄÿ&ÕõߟÂ]=<9q©Æ©q22ÛOr'·;”—g–D å°‘`sú½E)B2‹…¬­oü–QüTüõjJ2ŒÛ»O™zÞ/î\‘Vìÿ‚o~Ízçìyû ü1øcñ*ïJ¿×¼¢Ç§_\i’I%¤²+1&&‘Ù~n¬Š}«Û¨¢µ©QÕ›œ·nÿy8*QPŽÉXñø(×ü™§Œ¿íËÿK­ëãOø%×üŸ_¿íÿÿM÷5ö_ükþLÓÆ_öåÿ¥Öõñ§üëþO¯Àßöÿÿ¦ûš‚Ï×Ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ëöâ¿ëö†(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?.?jïø$oí!¨~Ò?´æ§ûø«àÄ~ý©ôl¦»ñ;ãœß´‹‡½¼û%¦œ÷VÒˆ§ah].vBãj#¦Hf2Gê%´+Jæ{ÿäЗÝzqùhD×´V“¾7ÕßžïÕóËï?¿à¦?ðAOŽ?¶‡í1ñ“ůðƒÅz?­4ø|)yãM_YPðÃäùðØAmÛÆ%1’\‡Èãh.äúoÅ_ø#Å|Qð¾·¥øƒÀik¡þÍw?&Y¯.Ä’kYÜ@³¨¤MÓ©.H“þèô¯ÓJ+®ZNGÿÈÊ?”ß›z»³HÔpªª­ôü% ~pâ‘ùÙðþ ñÀ:‡ì'q¬k>™ÿf -bÛÅ/ÕÉkóyj‘F4òm‡˜¡×-æù<`€Oõ·ìSàÿŒ^ø;sgûqø«Ãþ1ñ£ë7ÓãB±[&žò“k mÞ‘áXì$Ÿânµë´U¹7)Iõr94Ûü>æ×S5£¯²’^‹š×ÿÀŸÜ»QR0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Äà£_òfž2ÿ·/ý.·¯?à—_ò}~ÿ·ÿý7Ü×ÙðQ¯ù3OÛ—þ—[ׯŸðK¯ù>¿Ûÿþ›îhõöŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( À:ý¸¯Äzý¸ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÿ‚ÉšxËþÜ¿ôºÞ¾4ÿ‚]Éõøþßÿôßs_eÿÁF¿äÍ'Ká)>ßÂmõ¿Má]BÛÄ~¥¢jvw1éwƒ@–W6k/ÚpÅ!Žq y,î°Hä§›Mmfü“µ›òÕk扺µýwøÑExÿÀOÛÓá_í9ã¡|ñÖ©¨M¥nÐÏ£_ØÛê–[£G¸²¸¹‚8¯7šÀÒym"«ícеâ¿z¢~×>øgàk ícðýÏŠ|U©\³ÿĪÓÍöPÄ«€e¹˜]0f8T±›‚Yp[T»Þß$Ûû’sêU¾/-ü®Ò_{i/6V¢¼GÂ?ðQƒÞ6°ñæâ«¨tÿ è—&šöûCÔ,-5 &ß~£§Oqn‰©Z&S3Ù´Ñ,Gv%Œ¶ŸðUÿPOq犵»g³¸†+±?„u˜~ŠͶéËÙ'Oä& ûmX†Ä§iÃåwJÚ¿×OÍ?¸OÝÕÿ[šûÑô]åþ"ý±¼á–ŸüW{¯iºýýÔV×^ÔáÑî.¥ÌŠÙ5f¶-;©ùb—'åwÄhÿµÇˆ|yñcHð€!ðl×zö›ãimï’âêæÖÚïCÕ¬ôè"˜4p¾XÝ¿žªI"eŽIT æWZïø+¿Ã Ò»åë§ã{~Oî>‡¢¼_à'í©áïŠ?¾ëß@𯈾"^ÍáõÑIpÖºíªÜ‹ý;ÌTÁ0Ia|¾cVg¸Ú*åÓé¡7ÛúþµM|‚Š(©VG‹üs§ø&×~Þï¨Üý’Ö+ ‹éç—Ë’R«º;œ$R18À rk^¹ßÿÉWøcÿcÇþ™õ*¯ÿ ƒOÿ ??ð‹Ö?ùø\ýüyÿ„^±ÿÈ•íÔPˆÿÂàÓÿèãÏü"õþD£þŸÿ@á¬ò%{uâ?ð¸4ÿúøóÿ½cÿ‘(ÿ…Á§ÿÐÇŸøEëü‰^ÝExü. ?þ€þ<ÿÂ/XÿäJ?ápiÿôñçþzÇÿ"W·Q@#ÿ ƒOÿ ??ð‹Ö?ùø\ýüyÿ„^±ÿÈ•íÔPˆÿÂàÓÿèãÏü"õþD£þŸÿ@á¬ò%{uâ?ð¸4ÿúøóÿ½cÿ‘(ÿ…Á§ÿÐÇŸøEëü‰^ÝExü. ?þ€þ<ÿÂ/XÿäJ?ápiÿôñçþzÇÿ"W·Q@#ÿ ƒOÿ ??ð‹Ö?ùø\ýüyÿ„^±ÿÈ•íÔPˆÿÂàÓÿèãÏü"õþD£þŸÿ@á¬ò%{uâ–t›ýrÃN–ÛĶ:¤­©Ô|9¨XE4‹ÊPK<›¼¸¤lnÉq]=Wý¢äaøiÿcD¿úgÔêÅQExükþLÓÆ_öåÿ¥Öõñ§üëþO¯Àßöÿÿ¦ûšû/þ 5ÿ&iã/ûrÿÒëzøÓþ uÿ'×àoûÿÓ}Í~¾ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEø_·ø_·WÇZüSǺïÃo‰ß 5ï‹“á/Å[ÄZ•^³½ÅÅÉHµ3ª´%¡šà0f³!‚m*7d}‹E Ý—2ßoÅ?Í"¹šVóOæ“KðløÃãWì;ñSð|qñ3ÅSüAø±#xfmx+ÂöºTgCÔ%½³Ûa©j†;–iï.žq-ì!â!"òU™?cïÙâ‹c‡Ç?´ä×ñ;üWºøˆln´ûTº¼…¼4t(áš;ˈ,Îʪ—$GjìdweûBЏÍÃ-¤¬×M\[v]_$núØM¶’í׫\®6~I7n×<à'ìL~OðIωΩÿ sáõß1ýäÿkùÿÙ_é_ë[ÈÛý‘þ«÷™óþøÙó'~xƒNý¶ßÄšv.¹à‰Þ Oø’X.#Š}k¯.,îwVx&MJú1†t‘mÎÝŒï¼ÑSQºß»ú>kÞÿø~Om‘\ò³³íø4×â—å³gÄ? ÿà7Ÿ>x§áäÞ*ørú.¡ðûQøw¢ë?…Ÿˆí-. ŽšþÿûA–ñ•!ˆÈÃj³:;púÇ?ø'ðøÙ?ÆÖŸÅϧ¯ÆO‡Z€F›æ'ì§S&ì8yÅÿµÕü›|Ÿ¾Ûþ_£h­yÅ©'ªÿ‚ÿVgd•¿¯³ÿȯ»ÔøãâWü³RøûVËñÄ~7ðÅþšž3Ò9¼‡C²Óâ‚çUk0jëRÍr#G„Ú‹p\ªÈdÍkèÊ*#9B œ]’½¼¯¿’_ž÷-KÞæjû~¶ßâ’·Ïß²‡À/ˆŸ ¾xø‡OðÖ½qâ-WÆ7Ò¡°PŠñõ[‹ëé´¸. ¯”°\߯†.¶¸Ú„ h¢“wnËúíèBOvîú¾ý[~m½ႊ(¤0®wÄ¿òUþÿØÅqÿ¦}Jº*Èñ´ÿÃdºïÛÑô럵ÚÍeqc<ùrDYe·tq”–E#8!ŽEzÝâ?ð§ôÿú xóÿ Mcÿ’èÿ…?§ÿÐcÇŸøZkü—@ÝExü)ý?þƒ<ÿÂÓXÿäº?áOéÿôñçþšÇÿ%зQ^#ÿ Oÿ Ç?ð´Ö?ù.øSúýi6冣-ωoît¹Z{Q¨øP¿Š'ˆ¸ŠyÝ7yrȹÛâºz(¢Šñø(×ü™§Œ¿íËÿK­ëãOø%×üŸ_¿íÿÿM÷5ö_ükþLÓÆ_öåÿ¥Öõñ§üëþO¯Àßöÿÿ¦ûšý}¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ð¿n+ñ¿n(¢Š(¢¾Ký³?à þ8ý›>*xçNøqðÿÂ^(ðßÂÿ[üBñ-Þ§âÉt‹Ö³’{øÚEŒÑK*¦›#,°«UÈë^²ÿ¶÷Ãë/‰ú?ƒõû¿i:κÖÐYË}áJ*k‹ˆDÐÚ®¬Öÿak‡F„N\·Ên(‹ç·/]?¶õM|‚§îÛRÒÊþV²{í´“}®[¢¼vÃö÷øU¨_x±Ä—vö ¶½»Õu›­þÛDHì¤ò®üRXÎé äX%‘‘Õ”€U€¿àoÛCáç¡Ò–¥­hókš…Æ—ekâjZÔ×0Z5ì‘ýŸP·†EÅ´rL”+*9Rvœ;iÍÒ×ùwô ëËÖöùïo[jzãsÁA~EðöCã>ëCºÐ­Ÿ4 uËD…Ö)"VuxÊ&ã•ë¦ßçoÏO]þð¿å¯¦»×E|ÍñËþ màßø—ÃøWý¥â_ëž%ðÞwÐ51e¤EªÝÚ®/oE¿Ùì®…¥ÏÚÖæHålÆ6~ñC{·‚þ-x{≼S£x7RKÝKÁwé¥ëPˆ¤Ccröñ\¬d²€ÄÃq åKœ ä)BN<öÒí}Ê-ü½èëÝØWW·’}í÷ÙQP0¢Š(¬øçOð<6M®ý½ßQ¹û%¬6VÓÏ/—$¥V+tw8H¤bq€äÖ½s¾%ÿ’¯ðÇþÆ+ý3êT_þŸÿ@á¬ò%ð¸4ÿúøóÿ½cÿ‘+Û¨ ÿ…Á§ÿÐÇŸøEëü‰Gü. ?þ€þ<ÿÂ/XÿäJöê(ÄápiÿôñçþzÇÿ"Qÿ ƒOÿ ??ð‹Ö?ù½ºŠñø\ýüyÿ„^±ÿÈ”ÂàÓÿèãÏü"õþD¯n¢€.é7úå†-·‰l.uIZ S¨øsP°Ši'” –x7yqHØÝ’âºz¯ûDÿÈÃðÓþƉôϩՊ(¢Šñø(×ü™§Œ¿íËÿK­ëãOø%×üŸ_¿íÿÿM÷5ö_ükþLÓÆ_öåÿ¥Öõñ§üëþO¯Àßöÿÿ¦ûšý}¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ð¿n+ñ¿n(¢Š(Á¼{ÿôøñƒöÆ›âïÆïøOÆ—6þÓt-ÃZðüÍ¢Miyyto-ç›vÇswáQJýNãœ/™|Lÿ‚Wj_?jù¾!xÆþ¾ÓWÆšG4äÔ¼o¼E¢›f³lµ‡¾ÖÆCi#â¶VÍÔ›™Ô²¿ØÔS¥'FQ”4qw^O™JÿøOðÛAÔ~ÕIKí$Ÿ¢\«ÓM4õÜøïJÿ‚bø’ׯ^=Ôn|qàH4¿iZ¾žº ‡gƒDÔåÔ.#™®µÝ1õI-5)T#¡xb³i>Ñ;3eðµ§ÿ‚Mê-ý›µOüEø›t·×þ,¶ñÖ‡cykaáËU·K+­?K¶»Ô.¦´ŽæÉ¯¢b.HG¾’DEÀCöm ŠI-­ø>e÷= ƒ™Ý´õ×ñVzÐùãþ %£éV_ŸÀ+}#Qñ'‹´xQŸKZxAôÛãª[Ù}œL¿jµ:•Æ¥pц„ì½hЧ–]oÃߨGZÓöOøG¦Ðb³´¶k©^Ú4·{w/$Ó³¼Oœ é+hÕœU¯÷ëüªúõ|±»ÝÙ\/k¥ÖÿïòÕútè|§ñþ ãâ¿|bÔîüñ'GÒ¾x‹âñ+XÐ.ü,÷ºœÚŽžö/äÛêBú4†ÞFÓ-œ†·••‹€ÅEú#Á^ñ‹âÝxÓİëzf©¨%ƉdšbZ6‡l-âF·iUØÜ–™&›Ì`¤ Bc é(©Sq‚¤Ÿº¶_(Çò„Rì•–îé®is=ÿà·ø¶Ûî÷ÙQREP\ï‰ä«ü1ÿ±ŠãÿLú•tU‘âÿiþ9†Éuß·£é×?kµšÊþâÆx%ò䈲Ënèã),ŠFpCŠõº+ÄáOéÿôñçþšÇÿ%Ñÿ Oÿ Ç?ð´Ö?ù.€=ºŠñøSúý¿Ûÿþ›îkì¿ø(×ü™§Œ¿íËÿK­ëãOø%×üŸ_¿íÿÿM÷4úûEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPà~ÜWâ=~ÜPEPEPEPEPEPEPEPEP\¼ÿ4.§‡ÌÔä{iž ZMܨ£éVÃ)Ž+¨¯*ðßú­GþÂúþ–Í@_ü. ×ZÿÁ%ïÿ£þF…ë­à’÷ÿŒ×)áŸéþ1µ¹ŸÃ—iŠÒîk[c&É¡s‹†8e##ƒŽ £@_ðº4/]kÿ—¿üfø]®µÿ‚Kßþ3\Þ¡¬A¦\ÙÅwço¿›È‡d/ ß±Ÿæ*Aµæl àg$j€:oüJÒ¿Ûÿþ›îhõöŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( À:ý¸¯Äzý¸ Š( Š( Š( Š( Š( Š( Š( Š( ¼«Ãêµû ê?ú[5z­y¼>ñ>—q|–º Ä_]]Fòj2ÆåežI@eìÀ8'¥x…—…|koðïÇ>Ò4 WM½Öõ ^æÃY[ÛAj«<²Éùg3!`Ár#Ê–Œ9¯|6¼ðÿ‚üMeáë_øQÿ²~Ñ ßjv¶°êF‚nwI BhÚ8rÌ …FüÏÓðŠx³þþÿÁ´ßü‹Hþñ\¨VM;ÃŒ§‚«1ÿ%i[kt·á·õ°i·«ûÏœ¾høºÞ KÀz=®›¢[øîæùmìÚÞÛû) ÌN„$‹ç0R"Ü¡‹%WutŸ³çÀ{Ï…zç….ÛKû ¿ðŠÉi®Íö••æ¾ó-™C¼™6ªÎŒª/Êí)áÄbÓ¼8ª£ V`þJÒÿÂ)âÏúøwÿÓò-R|­5Ù/º<¿ð}Aë{ÿZÜ<)ÿ%gOÿ°Eïþ޳¯D®#Á¾ ×-¿Ûÿþ›îkì¿ø(×ü™§Œ¿íËÿK­ëãOø%×üŸ_¿íÿÿM÷4úûEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPà~ÜWâ=~ÜPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPˆÿÁF¿äÍ1ñޝ•?‡4ÍÃú”ZLö·±Êo®ËA†HåLùªJ>ý¤îã ö8ø­}ãß i:SE¦¡ÙÅ,WÉ"ê7ò4K‹˜Á c†U˜ÈA?(_™­¯+þB¹íôWˆü\ño‰¼ñWÆZÏ€¥Ñ¾…á+=Fî B)d3¬s_±H¶:ˆÙ•X;±…ùO$Jhë¯ì¼-¢Ú¾‡£jÖÚ]Ú̈²²Ê‘3OçµÊùxóDò_ÌpÀ¶Eó4¿­íùƒv¿õÒç´Ñ^!¯ü}ñ†…àÍc_’ËÃòX®¹6§Er™VA~mR{†i€¬J»Žß½ïÁøƒÅZ. >$XÁeaxmÑ£T‹ílGWhVi¼–ùÊí26vî0Åó+¯ëoó_ÕÆôvþºÿ“;*+À|ñ?Æ–öz[êÚ Õ爼Uªiv×wV“ʺh‚{¹H Ædܱ*E)µq’ØçÔ~xêëâ'Ã¥Ô5´³[Èî.ì§{6-m;ÛÏ$X‹d„sà $ÆN2eËÝæò¿áÔvÖÞvüÿÉmó_‚>;x‡Ã_¬Ï‡N‰¯‚ü¦ë7Ë©¬>®%ÉŽ Eq Påd˺¼sÕë_´&¸ž8¸M2OÙév>%°ðãiבHڕߟäJª€,ùUØù³Ø^òä[ÿÁ·æ-mëkþG´Ñ^'£|HñF£¨Ùè¿ —@±šúóÄ3K6¤·7j‚ÓPX—hóƒeüÞFà«ü v¼gñTñgìq¨ø£D‘tVûÂ爫Ÿý;öòÙYYX|Û[<qƒÞï7õ×ü˜-eËçcÔ¨¯ ñ/ÇOø^ß]Ûuá)Ç‚ôX5«÷’ÖhƲ’´¤Gl|öò°íóÍÝ#”aûHkZ¶›ðºÚïÁ×ñiW-«éjóL { mއiÜ á“zñ»"žŽÞvül$ô¿•ÿ þ¨ô:+Á,Ôu;m+MÑ5[ 6âòìXÍ{žé€hKE6ëO¼HäV.2F)§v—õ×ü»_úíþg»Ñ^/ðßãß‹¿Ûÿþ›îkì¿ø(×ü™§Œ¿íËÿK­ëãOø%×üŸ_¿íÿÿM÷4úûEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPà~ÜWæ7ü:ëã¯ýßùYÓÿù"¿R¿áÔ?çßÿ_ñ  ê+Gþ=Cþ}ÿñõÿ?áÔ?çßÿ_ñ  ê+Gþ=Cþ}ÿñõÿ?áÔ?çßÿ_ñ G^ø]á¯ëöÚ¯‰¼=¢j:¥žß"îæÊ9g‹iÜ»]”‘‚Iðy°|2ðݯ‹[_µÐ4Xõ×ÉmE,£LHÚI”.âHã9éÅu¿ð‰êóïÿ¯øÑÿž¡ÿ>ÿøúÿÔâì~øGK»Ô.4ß øvÞ}V7†öHôèU®ã¾’¿:·prz›Å <5ã‹‹i|gáýV–ÈbÝï,b Îº£ p=+®ÿ„OPÿŸü}ÆøDõù÷ÿÇ×ühXÑlüC¥Oc¯Ú[_Y\§—5½ÄK,R¯£#ö5—§|+ðÆ‘¥‹+Úµ˜†k"+–?.m¾jm ¯±7´g8×ÿÂ'¨Ï¿þ>¿ãGü"z‡üûÿãëþ4ÉÞ|4ðæ¡âh5«ýEŸX¶P°ßIe\Ä,…w dãŒÕ›èúeÍ”Ún•¦ÛͦۛKGŠÕ­a8ÌQ2‰ò¯Ê08q]ü"z‡üûÿãëþ4Â'¨Ï¿þ>¿ã@þÓuG¼mOO±¹mBÜYÝ`G70 ØŠL?y'Êr>vã“Yú§Âß ë~#·Ö5Ÿèwzµ¦Ï"ökžâ‡)¶B»†ÓÈÁãµuÿð‰êóïÿ¯øÑÿž¡ÿ>ÿøúÿsÓøKJ¹ÑntÛ3O“N½iâÕ­ÐÃ9‘‹È]1µ‹33G$’j? ø#EðœÖ~ÒtÝÑÜÊÐÙ[$Î@Š œ3×]/ü"z‡üûÿãëþ4Â'¨Ï¿þ>¿ãFÀqzÁÿ êçQþÕðÎru‰[ã.ŸÇ\•ir¿; œ’2kkJÑí4-. ÖÞÎÊÙPÛÁÇH8 ¨  ­¯øDõù÷ÿÇ×ühÿ„OPÿŸü}ÆŽ–·8ëï„þÔäÓQðÞƒ;hª©§™,"o°ªà¨‡+û°Æ0+žñ_ìë¥øÓ╟Š5ûË™%±ž ˜m–ÒÑv¼$4cí´¡öy»KvÇê_ð‰êóïÿ¯øÑÿž¡ÿ>ÿøúÿ4ûjÎ~Óº]…ÚOa¦ØAÿøúÿð‰êóïÿ¯øÑägŸüiÊžðØ]‹Ø¦Ã‹2[y1|¿!ÝóqŽyë[šæ…câm&{YÚê7K²k{˜–X¥pÊÀ‚8ksþ=Cþ}ÿñõÿ?áÔ?çßÿ_ñ£}Ìæ,|¡iši²Ót]&ÞÌÉ ¦í#XËÄDÛ@ÆäDõ_-q£Eð¿ÃPx¹µø<=¢&ºÄ±ÔVÆ!tI]¤ù»wd©ÆsÓŠë¿áÔ?çßÿ_ñ£þ=Cþ}ÿñõÿÝ_ŞмyºxãFÒµ…´2{iÀ…½T88=:U?øSÞþÕ±¾ðð½ÒÒ8ìçt>eªÇ÷6Û” ü c±]§ü"z‡üûÿãëþ4Â'¨Ï¿þ>¿ãFÁ¹ÈÇð»Ã0øµµø¼=¢.¸ä–ÔŒBè’»IóvîÉSŒç§­¦ivÚ&žo¥¥ª¡‚ÄqÄ€`*¨á@+cþ=Cþ}ÿñõÿ?áÔ?çßÿ_ñ <ÎCDøWá jw—¾ðî…ay¨«%ÔööE%ʱËePXÉ©ëPé<# iwö:…¼;geª(KËx4ècŠíFp$P¸p2pq“]¯ü"z‡üûÿãëþ4Â'¨Ï¿þ>¿ãGyœ\¼%kaakmáÇm¥Ïö«8—O„%¬ÙÌŒÂ>@;‡< }÷ jri¨øoA´UTÓÌ–7ØUpTC•ýØãØÿÂ'¨Ï¿þ>¿ãGü"z‡üûÿãëþ4ÏÏám2çíiÓ¬$û\ñÝOºÝ4{<¹#æuò£ÚÇ‘±qÐTšVƒc¡“¢YZY›ÙÚêãÈ…cóåln‘ö¹ÎXòp+sþ=Cþ}ÿñõÿ?áÔ?çßÿ_ñ  ê+Gþ=Cþ}ÿñõÿ?áÔ?çßÿ_ñ  ê+Gþ=Cþ}ÿñõÿ?áÔ?çßÿ_ñ ÿ‚ÉšxËþÜ¿ôºÞ¾4ÿ‚]Éõøþßÿôßs_|~ÚŸ|Sñkögñ/‡¾iÚÆ¡ö_³Ûý¦¼Í—pÈß<Žª0¨Ç’:z×Ìß°_ìñcà¿íaáO|Kð§ön‰¦ý¯í7?Úvsy{ìç>Hæg9wAÀ=rxÉ Ñê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ó_øžÿÐ×­à=—ÿ#W¥WŸÐ_øžÿÐ×­à=—ÿ#Qÿßúõ¯ü²ÿäjžà•Êœ§ŸÂ¼ Áž8ñ?‚ü7¡ßë:¬N•â++b/üIv×ÑGp¶ï,’ J¾X›÷aPÈ1µþPp¬¯»}?àÿísÝ¿â{ÿC^µÿ€ö_üGüOèkÖ¿ðËÿ‘«Áµ_Ú3Ä~&ð¯ˆc¶m?IÔA}FÖ T¥b‰ÜÊâ}ñ0Þà, û¤3àƒkÅ>4ÕâêgÄ}æŸe‰2ÚËs“}ªêEyöÇu±×ä$‡Ü …\€{Ù«õ·ã %}¿«[üÏoÿ‰ïý z×þÙò5ñ=ÿ¡¯ZÿÀ{/þF®á/Æiüi¢k:‡ŒRÃM‹G†94Y<^Ysv<À‘ Æ6çÙbr«ÂøoãGˆüowÿ ÇÚ4é|E,¥Æ¶¶Òã–o.a„“ýLAí°£;¥;¶Œš:òÿZíúýÚ‹¥ÿ¯ëo¼÷OøžÿÐ×­à=—ÿ#Qÿßúõ¯ü²ÿäjñ#âïˆì<×z ö‹©ýš×XÕæºž¥KÄ‚ùÕ Mû´eo”–} (…O㿌^"ð“´z’éwš–—©On’@'··˜f”ß•·a›i XpØÁÒÿÖöüí¿­®zÿüOèkÖ¿ðËÿ‘¨ÿ‰ïý z×þÙò5sÿ|U¨ê²xŠÏÆRص΃|-šâÖ‚)­á˜6Çw*GœTüÇ;sÆq\‡ÁˆZ5ÓxƒQÒ|I%߇í`¶]CU7—+!f¦`ìÏJí¬mŽP°U Š»v¿Þ.züOèkÖ¿ðËÿ‘¨ÿ‰ïý z×þÙò5y¿Ã_iÞ øÙ­Càý~âîÒÎâ½µ»ÕLí=ל¤´ÎÅ¢Š!º2ʺ€nêÅ×|B.>1ÞiךíÕÔÚ…ø²¶‹Jñ Åw¦£@¬šqJ+oÌ 06FÞ­­×üíýykß¡ì_ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕá·^,ñÄ L±jÚ–y¡½‡‡nç·%7jR_B—㣅Eˆ¯b³¸îkÐ>x¿Qñ•·‰&ñBMoyi«}’[g$­´‘ÚÛ‰<ÿË3'˜Ê{†Ïzi^öþ¶ÿ4ÉÛúþ¿¤v_ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕj¹Ÿ‡wóÞê^)[ɦ™mõ—Š îXDžDjç ËÇ&’ÕµåÅ/ÔoEë¯ùŸñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üX~¿žoŠ^$·šižÞ KŽ&rR2Þ~â«ÐµsޏÓP_øžÿÐ×­à=—ÿ#Qÿßúõ¯ü²ÿäjò]gÄV71ñ"øóÅšŽ‡­Yê ‘§Å©5°’Ü$f2–àí¸¹pÌUˆÉ©^)Yülñ/ƒ< zÙÓoîcÓ4‹¤¼ò]RÖ;¦’7{“,àHWÉÉrñ_£šIÝ_Óñ¿ùkØŽÞ¿‡õ¡ìÿñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕäžøñªx¢e·Õõ? iN`8÷y²ë;žeó,Þ;‚‹åT͵‹F:?þ$êž-ø^ÿÚÒE£¦é6Æ(îƒËu.mƒ ©‰a½%l•Ú…²û·* ÙIöÿƒþCJí.ç¥Ä÷þ†½kÿì¿ùøžÿÐ×­à=—ÿ#Wƒx ã·à¿ è¶÷Ú†›yuug§^[Ãq-þ­ö¼y’@ò\6ó0U*v?+Òañæ·¦ü ŸÄúúé“_ÿgI"¶‚E†$1+íl¹fÇÌK ¼cŽ9¦¬ä»hÅÛÌì?â{ÿC^µÿ€ö_üGüOèkÖ¿ðËÿ‘«Ì5¿ÚíRÈÞÖü)g¥¶´úlzµÛ­kb—ÊÊŠÌdfN;ž¹:ÏÆýW_¸Ð-/®ôß\]I¢\=ƒ‰÷QûEÄfA2.Ø×XrFàÛx%-Z]íøìüÿÙâ{ÿC^µÿ€ö_üGüOèkÖ¿ðËÿ‘«Áq+C¼ùeÄðÅzd#=y4-Z]ïø&ÿ@{7ýocsþ'¿ô5ë_øeÿÈÔÄ÷þ†½kÿì¿ù§¸b¶ò8!I•|éá‹Ú÷€|..5)/<ÝGLÒçu{Ãx®d8¸¾WyV!¾0c2 V*NÀÀ²¾¶ôüoþ_Ò»NÚ_úþ¿­ì} ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_ü^%῎ž 7ž$Ôµ­G@‘mt(õ ;q*\ˆå¹GšŽwqg _nå]ß.çêíþ2_xË[¿ ®´ ›iµ©4èoˆ{˜LIb— ÃËmìÉÃê9«koë{ úü.züOèkÖ¿ðËÿ‘¨ÿ‰ïý z×þÙò5p¿þ%kšçŒ¬í|F4³e«A¨Ël–ÐH’Ûý–é!ݤ`ûÖLð«‚;æ°n>,kÕ¼g£¬èªm5ë{XEä-"ÖhàÅÄÀJ ‡æ }À_q.ÂÊwiwÿ4¿6;oåþW=cþ'¿ô5ë_øeÿÈÔÄ÷þ†½kÿì¿ù¸)~0_§Â+MqÛJ†[@ض¢èçOŽ!pÑ Â¡óå2¨p ó¯Ïš°ãø—¯YxšãR±Õ´=_JΑo?Ùâ•¡¹ûEÔ-œV, sæn*qÍ5¯ßoëúýInǬÿÄ÷þ†½kÿì¿ùøžÿÐ×­à=—ÿ#WX~Ò:Ö¿âëÝ/áÈé ¶y`Ä–`Þ-¹GtìNÖÜy$íû£gVWŽü}⵿[]jhì<;oya¦ÈغI N®ñ˸8*»ÊƒÃ ùHË TŸëúüC¿õä{üOèkÖ¿ðËÿ‘¨ÿ‰ïý z×þÙò5xÿ>2ëþàÔN>¥¤êóÙ‰üÙl,åÙ†å ŠÓÀ/´‰oå+Ôx?ân¯ão‡ð^h¶_ožè\Â÷Ð$QAm"3*·–.dó sŽÏådߕƕíæwñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕâZwí«èÿ <7q.³áË˹t3$³ÄåµK” Œ[fâç,C˜î#u¸ñïÅ_ÀšZ꺗‡ncÓ`¹6Ó¦ô–y·«!œ›ËŒ†ýèuùËei-vþ­§õ÷í¨=7þ¿¯øèzßüOèkÖ¿ðËÿ‘¨ÿ‰ïý z×þÙò5yÍ¿Äßh¾&x|W.‡uaiª¾•?Øì&ŽiØ à•7Làc„Ùƒ»“¸}Úá#ý¨õVÖ;›uÒ/fµ•ž -ähâmÖ7„š8n¥RU¢VsŒƒµXBÕ]y~;[@ÿÄ÷þ†½kÿì¿ùøžÿÐ×­à=—ÿ#W¢ü@ÔÏÄ:oН4Èõ‹ ó¦YO»ÅÔ¯h—HÇpÞÃùÙž3Çšé¿5}2ÃÀ×÷:ö›vuÇ{y)ace+\Y¡–é\4‘ïtbY>f?p½æ’ëoÅ7ú~#µÕÿ­?¯À÷ÏøžÿÐ×­à=—ÿ#Qÿßúõ¯ü²ÿäjæ>ëSø‹áÄWš…üzœ“_ßâê"Æ)”^Lǹ˜„Úѹ°¸8®Æ›VWþ'¿ô5ë_øeÿÈÔÄ÷þ†½kÿì¿ù­QH ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF¢­Q@\?öM×üû\ß³þÜQ@?öM×üû\ß³þ£Ý0ÃZÎG¼Gü+¹¢€8oì{ I³ä÷òøR"è [ûö»Š(‡þɺÿŸkûöƒ¤]0!­n?ôÌÿ…wPý“uÿ>×÷ìÿ…Ù7_óíqÿ~ÏøWqEpÿÙ7_óíqÿ~ÏøQý“uÿ>×÷ìÿ…wPý“uÿ>×÷ìÿ…'ö=Öìý–|ôÏ”»š(‡þɺÿŸkûöÂ웯ùö¸ÿ¿gü+¸¢€8웯ùö¸ÿ¿gü*¶á¤Étúu„Ñ5ìÆâr#oÞHUT±Ï²¨ü+Ðh û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠóë]RæöÞÂeº¼DI¤òÛ2*nÚÓ{~ugû&ëþ}®?ïÙÿ î( è÷D‚mgÈÿ¦Gü)N‘tG6·÷ìÿ…wP ýt1‹Yøéû£ÇéKý“uÿ>×÷ìÿ…wP t{¢À›Yò:(ñúRÿdÝϵÇýû?á]Åç·žû}õÍÝ„Ï6žÌöí±‡”Y àåXŽ}j×öEÖsö[Œÿ×3þÜQ@7ö5Îú,üõýÑçô£ûëv~Ë>zgÊ?á]ÍÃÿdÝϵÇýû?áU›Âõ”ÔÂcy-n²ùm‘0b¾œ•SøW ÑG˜?öM×üû\ß³þ"èŽmn?ïÙÿ î( h÷CµŸŽîøR"éFÖàÿLÏøWqEpÿÙ7_óíqÿ~ÏøR峺Ös‘ƒû£Ïé]ÍÃÿd]ce¸Çýs?áGöEÐékqÿ~ÏøWqEpÃGºŬã<ÿª?áY+øYmãsnQåð®æŠáÿ²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ î( û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠáÿ²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ î( û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠáÿ²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ î( û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠáÿ²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ î( û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠáÿ²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ î( û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠáÿ²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ î( û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠáÿ²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ î( û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠáÿ²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ î( û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠáÿ²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ î( û&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð®âŠáÿ²n¿çÚãþýŸð¢»Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ã‹Ú—†¾~É–ºÿ‡´+ŸÍkki˸¤w34p«¿<üò)Çzæ?foÙ¯@ñ…Í÷Çë½{RÔ&`bXR2p°‘ŽON€b½ÇâoÁã§ìÁ{áˆ/$Óî¯ì¢k[¥BM´ñì’'Æ9Û"!ǵxçÃ_Ûëà= Ðh‡>"¾×¬”÷^¹Óçµ¼ÇIÜ\ÂÑäs·Ò€=~Èß ¤‘ˆ´ñ 'þBZ‡ÿ¿Iì‹ð‰ÿDñSÿ1=Gÿ‹¬ôÿ‚šø<—á_ÄîÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@þÈ¿ ØŸôOõ?óÔøº#ý‘~±?èž!êæ'¨ÿñuž?া>üMçýÿ–tø)¯„O…yÿgGÿåhGû"ü'bÑüMçýÿ–t¡ì‹ð‰ÿDñSÿ1=Gÿ‹¢?Ùá;þ‰â§þbzÿYãþ káÓá_ÄÞÙÑÿùg@ÿ‚šø@tøWñ7ŸötþYЄ²/Âv'ýÄ=OüÄõþ.ˆÿd_„ìOú'ˆzŸù‰ê?ü]gø)¯„O…yÿgGÿåþ káÓá_ÄÞÙÑÿùg@ñOì£ð­<5rºt~#´»òßÊš=Føº78?;éÔb¼·özøo}«øPðç‹ \ÍižÞw{¡$Þ¤sï^ªÿÁEHãü…tßµ_ |5Ñâš÷D³¾Ô/åÚn›ki]jW"‰H ,ÌHTPÌÄ*’3>[éž# ØÜjÓFÓÝGg Ç—.÷—’V••Àe˜ë\V»ðŸÆÚþ³{¨ø®ÖâçPº°-s¦ÞEžA96’ÎêmÕŠ©žîO-߸ù|€]ð×…¬uióëº.…ôöÑÉp–±¤Ð$…Aa…tœ1#йà}1ô_èöw6\––PÂÖVMºÚЬj P’«˜×TíÀéEÿÙpostfixadmin-3.0.2/DOCUMENTS/screenshots/postfixadmin-admin-create-alias.jpg0000664000175000017500000020362510676263533025734 0ustar daviddavidÿØÿàJFIFÿíPhotoshop 3.08BIMÿâøICC_PROFILEèapplmntrRGB XYZ × :acspAPPLöÖÓ-applrXYZ,gXYZ@bXYZTwtpthchad|,rTRC¨gTRC¸bTRCÈvcgtØndinì>desc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀ_"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔ*|‡Â‡Çz¯ƒ|e©ø-lì¾j6v·7I¤Ã”0°ޯÉbc¹I^F‘ã,â\ëuß Þhß¶f•¬iú£â­NþâÎ×Q—RðÍÆÍ %´e’ëOÖ0!H¾`ß’ÎïŒƶŒåîlö¿õºû]{mÆ-½Ò¿ÝoϧWÚúÙñöбðWÃËßiRñÛjI£Gk`ÉæÏz×Kh ʪ‘3…băé[> ø‡©x¢9ã×4B¼´Xü讂4ewb)”—oBTà:×ÉÐþÍž“áæ¿ [ü8º‹V³ø‘iw8:‹ÆžÚÉ1IÛ6MYË*¶Ö>Z3Ú vúçÁý7ÁúGÆ-+OðV½>‡¨Ë¦ÿcéÚE´™î¼„ %¬Š6ÂR}ŽÓ ,eK±àÖNV§ÏøÛ±›‘výã…ôW׿×ä¯ó¹ôÇö¥Çüõ»®'â—í+ |ñW„ôoêW–×þ4¾þÏÓP.àòqËœü«¹ã\ó˯Ôyçìuá_øFóÅÿ´,Z¶£ãæ’¶kþYk VÐ!éi ¼ ä9ó®3ãoìóã/ÚwÆþ?¿³û&e¬^Ð_U³¹1˜$ŽéïmY$AûŠ ¸[!åxj•¡%ÕníÛ­¼ï§“ô&>ú}ÊýûúZïÍ/3ê{Ýz{+Ify.ØD…ð'8•cü3ø¢>(|8Ð|M¤ÿhÛZkú|Œ1O·Ì%]U°HÈ Á"¾[ñ÷?<Ò%:fákï }’7–Ýe‚ÂÖY  1Vbc` Èûpj­ïò½5Kïi}Úþ ºæòoîWûÏ´†«; ‰®ãKý©qÿ=nëãÛoËám'ÄÇÂo x¿Kð·‹¼?¨Xi1é71\m‚T7×ús ™#?&T ,cvƒ“=Ï„õ¯Œž7šóÞ;Ò´ß|GÑn#Š{iìnäÓÖ(åœÃÇØÜ–YCle`®+™¥æ—ßɯ§¼ÿðòMò«¾ÏðæÓð_ßõ×ö´øÏu­sÉñgʼn<$#ÔþÕ’º¹¸Êù%f‹g]Û²¹éŒµóÆïøAøó©xwÄþñ¹¢YxÕt/CÒn®íí&7WÀ~î܆VÎ#•Âí;ð듛ڿÉð¯®l¬F´Þ4ÿ…Oo¥›ðíºMAec$Bçpyù·ç$6{Ô_i%¦¿‚Ÿãx¯½w-«^=}ß•Ü/ò´ž¾O±õˆÕg=&º?UœfºÉ÷¯˜ÿexaø9á¯k:^›âéíš $ðþ›à;Í !˜ošÚÚâWLÊSÍhÜÝ+s“aü)¦[~Ö$½øïàïx‚îóPÓåð~«ý‘>©e§@±B¥c’5d±d¹Y$vqA Y‡KjÒQþ¾]ü»¢ºoúùÿ[ýçÒŸÚ³çuÖ~´¿Ú—óÖî¾<ð¿ÃíB/h‰má[ü\ƒÆow¬ø‘´ùÒÞãKû[»îÔò¥·{3ilʰUØ OøÑã[»í_ÀÞ%¶ðÏŽá]C¨ÄšT³]…•åªÝEAÞXIc*êUÀÄ«r¦ßõ¦¾—vù1ËFÿ®ú~sG©|@ø³ÿ úm/ãÔîOˆ5htˆŒ%rò+°wÜGÊ<³œdò8®‹ûRãþzÝ×É×~ñÏ>G?…´sÃ>!¾ø•q©Ù WOkƒ¦ÂÂo.yãFÛ°¿0b€‘Ëc×?dË¡ü$‹MÕ4?èzÞŸs$zÈÕ Í-ýé;¦º[¦n’V;„‰òà…Âmت›æ‹æÑéøÆ.ß&Ú/;9û²²Û_ÂRWù¤­ý_Õµ.?ç­ÝÚ—óÖî«ÿàEøLEíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëw\ßÄoÚ7Âkkj×6BòC´I—ܰ"(bV‘Ȫq[Ÿø^ñ´Ùx#ö•ÒüUñ&ê}/òhi§[j’¦môû…žY%?"/13`(Œä@xýµ¼GøëÿÝcÿ‘+cÀµ†>$x€i>ÕõHõGF–;MCMºÓ§™WïÒæ(Ëœ â¹!ûIü$ ñ£Â>ßñ8¶ÿâëŽñω<7ñ¯âG‚mþx’ê^·k¨Íw¦H·éÖñJ­9’dùStaã ĸã®>©Ñå…‰ÿPü$)ÿ¢mãoüÑÿù>±õ S×µy}ð³Ç xÊ®-õ]2ÚV ñjJ[ çŽ+Þè  РÖ|3«¡|,ñ•¿žÛ¥q}¤³Ê{vÔ 62q“ÆN*ìú׉®ax®~øÎHäRŽy£²º‘‚7ø Ž1^ËE|ô¾¹UØ¿ ‡ªhWËueð·Ç/vŠQn.5].âT¨V“Qb½HãqÒ½êŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøHÿÁ"4Û‹áÝÇŽÿà ²ø·^ñ޽9’Ó]‹XÔt-^A0­âÛÛÉ qJ©¾Q áh„Žï jþÚ~%Ô¼û|ZÖ<q¥ëWƒ5‹ËØl¶sÇc3Ç*̬ªÀúŠùWöÿ‚·EâK Á¿µãÅa«Þ$š_ŠãF[ ]œ¬q%ò’ßbºrÈ,ðÈìuvXÏæÏí9ûr~ÔðG_?f_‹:ÇÇ¿ƒúß….æðÜÚõÖýzÓE¼†kx¤KÜ‘­Êû?ö–¥ö+‹Ï³y÷[Eû›hä•·MÞ"~ øsLÛ«éÿIC“C¸ÞÙ«.#,Рmãï½'Vµ×´»kíæÞöÊö%žÞâ ‘OÊèêHe ‚8 æ¾ý‡u›c­Ç§xŽÖ&‚òÝ¢»C”$ŠpC#1 @Äùó‘5ÙùϺÿÁ0õYmÿd-ÂÄæ}Sáeõÿ€ï7°þË»–Òo÷í¢¶â@jŒ «ùñÿ‚²ÿÁr¿kOÙkþ ¿¯|ý—ü[©àÝ7Ä´Òü&‡¥²jæïOÓf’ůdµ7(.&¸•K‰C'›òÚ¸þƒ«ùQÿ‚Ùx³Ä>ÿƒ©µmsá‡/‰üW¢ø×À÷ú.m}Zö-7Fx-”ö2H¨€ÿµ@O~ÚŸðXø(_ü«ö¶ðUÇüVøkãxÖ6Ô£Ðt :Ó^Ý$U¹µ·»ûÿÿпlŸÿÁ |?¯~ÒúÏÃÿÿb}¦/ŒþÓÒ)á Ýât4ùSìÙ²+‰BÜAþ´‚­)8¿k¯ÿÁ=>%øÄ–?³ÀÚwáçÆ »i‹¦-äiv·ä/Î[‹«‰ÌAñ¹5b2§~ƒü!ý”?ioŒ_ðiWÅ?ü|Ѽe«xîþö=WÂZ.«Òë_Øv—úmâÁäÉ™·i~ÑDFâ¨ÁA@2ÿÁ½?¿o¿ŠŸ±‰õø%wÆÿ…ÿ ~Ãã[«}CLñ%„3ÝOª –tgÒ.ÈŒÀöˆ˜£1·È3¹´àó|eÑ?kêÿü[ jÿuÏ·ÿ¶Ðí!U¿ðÿ•g¤&«öÇÑ—ó®ŠIé§Â‚•÷OEÿ½Áe<ûø>Ù—ã·„>!ÿÂqñ?✠¤ÝXØÛ;Iuôý9ðOq±–Ü3ŽCµŽF{ÿÎÍ®ÿÜ×ÿ¸Z<ãïø('üïþ•¨|lñoÇ_‡ó|2ÓþxWþ¶•¥hÖW¯‡¾×©èQZ}¥gÒ%Ù¦KynûæŸç”7ÎÀH¿AÿÁkOÚ»þ ¹ÿiø©â]/ãGöOÇ]Ç7ºo†wÒá¸8†k¡UÎåùKí‘Á<޵ðwÅ´/ýPÕõŸ ¹Óbiåðýýƒß£-E,wàáD…‰àdàVìÏû}|[ÿ‚’~Éÿln4ŸØkÞ±Ó›‡m®ašê;‰. Ò,ò–c ³*…Á;ˆç#ðgMðd¿|s¦ø¿áÏŠµâ{þ ‘áÉþ3ÙXéþ'OhV÷ñY1kvxšÒ!$E¹Û"¢Èèõwüö¥ñçìÓÿü)=wûûkûCí¿èV÷>w•ö_/ýto·lŸwÝÎp1ò‡‰|y¨üOÿ‚£øs_ñ>‰}áÛSÅÚɧޮˈ Ýh 2/ð³D#r;Å{wüSþioýÅ¿öÊ€1>-~ן´§Ãÿ‚>ø‘¬j¾Ó<;¯¤°ÛÅe ·’y%¼û•h°žpŠI‰”@Âñ~Ú´/Ž¿gø[žo øCÁºl±YÍ0¥ÍÕì›Ò'xÜŒí´ÊËÓæÁcköýÿ‚W|Çý@ÿôÑ=cþGÇþhhÙ~þØšïÇ/ø'ÿŒüvÿgÓ¼Yá}3T…ç‚%1}ªÞÓÎŽe÷/Gˆ•9\ƒÆ8®oþ AûRøóö–ÿ„ûþf»ýµý‹ýŸö/ô+{o'ÍûW™þ¦4ÝŸ*?½œmã9óïØ þQ]ñ¯þã¿úh‚ø!güÕ/û„ÿííq¿²wíÃûE~Ð?n¼1á {GÖu Ý6VŠ]RÂÚÞÛKÚñ“rÆÞÌ@ÌaNåÌ •8¯Hý…¿n߉'ýªo>þÑ÷Vz½ÓËyf“Çk Z]Z‡g\ª®„C(ås§=Aòø"xÏíS¯çþ…Ký,³£ögÿ”Ëê_ö5ø“ÿE_Pê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@Q@Q@Q@Q@Q@Q@|¿û!‚dëN˜þÖ»ÿÓ‹×Ôòÿì† ý“­:cûZïÿN/@¿ðSoù$_ ÿìsúfÕ¨£þ mÿ$‹á_ýŽcÿLÚµõ•sŸþè?¼/‡¾%ZM}¤ËukzÑÃy5¤‚kkˆî`u–I¤ÐÄü0ÎÜ‚Aèè ÅÏø*oÁ‡ŸðH_xKÆà Ÿø;Åɨ›»ý;E:u;§´6ö·VQ­‚5ظ¼u’[x›’eäù™}GöHøßñƒö¾ÑàÔ`/Ù÷á?‚ü1òÇ‹üwãø5Ùb|goövŠÌáÁè²JóŽ•ú¥_0übÿ‚E|øãù|F04#ÄþÔn<9wqØû\vRGàË|åf!B†Šø£ö‚ÿ‚þÐÿ´WÆüLøÿñ7áÿŽ|Uâ *ÏH6šTøjÆÆÚÙ¥uƒìÓAkiÜ•»ˆÚ6²äãÁ§ø7ãÙÅúoí!£Þx:ïCo+OººYmì#üzuñ›ìÑ)Ìvš¦˜GñZ‘Å{í;ðÎïÿ>9x3âwÆOˆŸµÏ„þЮ¼!q¯ëŸdºÐ.nîâmBòÔÙ˜^K„†æÌÅ,ÞkÆAPJ³)úƒöWý¿ÿhߊ¿³/Ãívçö`»ñ¿ü$ÄÚî—ñC[-HÉn¬ó˜çx¥Œ–ÈxŒyG,ƒp]ÔÍ~Ãmo¬Ýi:Énò‰`’«–û͈£É=䊷;®¥ê}ïþ Æd:×íd„Åü.MgÊ&MÆQöK ¶?‡æÞ1èï^ãÿÙçâ×ÄË­üýÀÞÎþˆÚt:{ËÚmKL·¶¹·¾Oïo¥#!]¾³ý‡> ø»àoìûm§~Ð÷¾Õ¾"jÚ¦¥®x›Rðå‹ÙØj—w³NOÞ¼†r[l*8ëÕøãû]ÿÁ½?>?Á}ôŸÚ£ÁÞ'ø_mðöÃÆ¾ñ$š}î£|šÉ·Ò¡ÓRáIdÐùŒleØ<àdÜË“·ö:Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+åÿÙ û'ZtÇöµßþœ^¾ ¯—ÿd0OìiÓÚ×úqzÍÿ‚›É"øWÿc˜ÿÓ6­EðSoù$_ ÿìsúfÕ¨ ¬¨¢Š(¢Š(¢±þ!ØÞêž×m¼9plõ >â+YÄ‚V‚>åù— AÈäcŠØ¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¼{öOð7Œ¼ý¿ÿ oÄ2kßiû?Ù7_Ïuämówÿ­nw'N»yè+ö£øqãÿøþÎçá_Š¥ÐôôÓÒ) ]NæØ<¢II}±)S•d<ü¾Â€=æŠø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû Šø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû Šø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû Šø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû ŠùWáçÁÏ‹_ô;Ÿøê{Í>ßP·–ê­^H'‰dRéµ—keA<ó^õñóCÖ|Ið›V²ø¨¶•«Íäýžégx Xš6ož0XeC:ç vWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTW~Éþñ—ƒ?·ÿámø†M{í?gû&ëùî¼¾nÿõ mÎäé×o=cþÔ<âÿÙÜü+ñTºžšzE$ ©ÜÛ”I)/¶%*r¬ƒ'Ÿ—ØP¼Ñ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüE}UñÆ÷Tð»má˃g¨\i÷ZÎ$hÌ´l÷/̸bG#PÅñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñÆ÷Tð»má˃g¨\i÷ZÎ$hÌ´l÷/̸bG#WÊ¿ð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQXÿ,ot¿hvÞ#¸7š…¾ŸoÔæFÏ*Æ¡ßs|Í–äòsÍ|«ÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöò¯ÃσŸ4¿èw>#ñÔ÷š}¾¡o-ÔZ¼OÈ¥Ók.ÖÊ‚0x9æ½ëãæ‡¬ø“á6­eðÿQm+W›Éû=ÒÎð±4lß<`°Ê†uÎ:ì(¯áG|eÿ¢‡qÿƒëïþ"øQßè¡Üàúûÿˆ °¨¯áG|eÿ¢‡qÿƒëïþ"øQßè¡Üàúûÿˆ °¨¯áG|eÿ¢‡qÿƒëïþ"øQßè¡Üàúûÿˆ °¨¯áG|eÿ¢‡qÿƒëïþ"øQßè¡Üàúûÿˆ °¨¯áG|eÿ¢‡qÿƒëïþ"¶>|ø±¥øÿC¹ñާ¼Óíõ yn :Õä‚x–E.›Yv¶TƒÁÏ4õUÇü|ÐõŸ|&Õ¬¾ê-¥jóy?gºYÞ&›çŒPÃŽ¹ÇC_6ÿÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|ÝðáWÄ¿ üZÒo~ xÊmWH‡ÎûE«j×S‰s Š¿$Šኞzc=E}#@Q@Q@|¿û!‚dëN˜þÖ»ÿÓ‹×Ôòÿì† ý“­:cûZïÿN/@¿ðSoù$_ ÿìsúfÕ¨£þ mÿ$‹á_ýŽcÿLÚµõ•Q@Q@WÕ¿äsÿ\Ÿù±Uõoù\ÿ×'þF€8z(¢€ (¢€ (¢€ (¢€:ÿË×üÿfªþ6ÿ¬õÈ6«ÿ—¯øþÍUümÿ!Xÿëþm@ôQEQEQEQEXÒä+mÿ]SùŠêwØþÿœ°´mó8Ûä«Ï;¾ðÇ&·k×ÿn·å¿È4¿õÝ~—ûŽŠóö‚ð¦™âÕÐu-MÓTZH«gpÐÃ4Ê­<â?- ‡]»˜dœA÷Ä/ˆà}[ÂÖÑZ­Èñ®º[1“g K¼ ßêqŽ:õ¬mCàgÛíuØ¿µvmkšv³Ÿ³gÉû ³_ßù·ýïq3¡ÛÍÿ‹ß ¯þ!Ç KáZÛG¿ðþ¨ºœ2ÜX›È¤"bØÑ‰c8"brµ>ÏÍ}Ú_õ3\Î/½¿àxâÎàßêVþ)»µ‚ÖÂÒÒp±¬Ó]»ÜM,H¢$ŒïÜÑEBÎNàTp[%¿híOx{H²¶Õe‹Ä×2¤çM»G‚H¦ŠÂ`Ü™is>ÐnMeøö}Ö|`uKŸk¾ÔoõKK;9o±³+o=Ä ˜MÑ`OÚ ²+)Œ0<àKá?€zσî<1u§ø¥n/43{ Á»³–â)í®fŠF‚÷H‚QšI0:ƒÒ”oxr¿CÜ| ÿ/_ðýš«øÛþB±ÿ×!üÚ¬xþ^¿àû5Wñ·ü…cÿ®Cùµ2ÚKÄmŽ©¯kÓŸÂN·>‘wum©»^ÚGÃ@×On` È… =®ßIøãá}sÅí¡éš“=ÿ™4(M¬Éoq,#2Çà ŠWAÈŒXa²>SŽ?þ«V¼³Õt]cű·„u­ZëS»Óí´¯&êá'œÌÖïtfoÝäí%cV###5wŸ³Õç†õÍ.)5è¦ð߇õ+ÍWM°[ —)5À˜–àÈDˆŸj›h¤årNÞfíEw·ãeúßüÐwõü5·éý\š?ÚëÀ3Û mµ{Ù‘áûD^^‘zÆâ!ÒD9‘s.BcæÅmkßÌdço›·9çÀÎ*7+ïoÆËõ¿Ü$Ý×oøøyƒáŒ¯â?‚~ñlðXéï­µhgšFŠ#<ñÅ´:FX·Ï…Ê€XÅFXAâÿÚcÃÞðLjï´C{ªMáû;›­‰cr–÷mØé×”c|HB±BÛ9'…8ÅðÇìíâMáö‘á][ÅúUÞ‰¢Ëe$"=á¸o³]E:†Ý°9òŠŸ”}ìöÁ†ßöT¹–ûÄgP×ím¬üC§_XK—§=šN×)ÿÿðýW ðãOÔô«2߯Öš–¡ в\[ZXä¸ÄfG ãùŽNH îüSÿ )ÿà?úª•¯ £{.mÏ&Õþ"¾…ñgJðî©kvzÖŸ=Å¥ç›ËO )xJc÷o¼ó±øã5ÏxWö…ƒXÑlõŸ-–“£ÞØêZ¬FG•îÊÖXÕ.,{v´n$#v὆ËÔøñðy¾3øF;WŸ@Ôm.<û]B„²[îGŠ@°Îø¥‘:ñ¸ÕKÇ¿³õ·‹t¨,t[ÕÒ¬í<5á¸"[4EÊ@Šãç_õbÜ|¿Å»¨Ç3­¾ÿÉ»ýö_yOuÛ¯åù][þÔžÔüs¢é:Ô/­u˜'‘/bÓîÊ+Fð*…:0œ“(`ŠdüÀ×MÅÏO¦X^[_™ Õ4Éu‹C¼®×±ˆËȨq MËÇwóTüUðãPÕ|eáÍkÃzµ½ŒÚ-¼ö7ÏfnîÞf„È!ón¸o˜ œ©®ËöW׆ƒ›¨øÜ-¶—áëŸérYifÚ{hå0âY$óÎ÷Ý…é´ä‘ß[yþ¶ý?QFí«ù~—ýN£Zý ´ÛŸ Ü^xžâîÇUÓ´û»Kë9ìç·W0Ä¡™ÆRVel`•ïƒ[¿¾ ?õo [Ej·#ÄZºélÆMž@0M.ð0w©Æ8ëÖ¸ ~ÉÍáû}`M©è–Ï«Ýi7&-+C6ðý‚çÏÆÏ9‹´Ÿt»1#¯ ¯Åï†×ÿãÐ%ðέm£ßøT]Nn,MäR ±lhıœ19 Ú«EoU÷iÔNí;vÓ×_øž#ø³§x7Äz•¿Šní`µ°´´œ,k4×n÷K(‰#;÷4AQP³“¸ÉoÚ;F“ÇÒ,­µYbñµÌ©9ÓnÑà’)¢„Fð˜7&ZGÜÏ´ @[‡SY~#ýŸuŸRçÅšï‡õýRÒÎÎE›ÃìlÊÛÏq(&tXö€,ŠÊc 8øOà³àû ]iþ)[‹Í ÞÃpnì帊{k™¢‘ ‡}Á’ ‚Tf’L ô©ïï¯Ð÷ÿË×üÿfªþ6ÿ¬õÈ6«ÿ—¯øþÍUümÿ!XÿëþmL£Æl¿h)îüa1Ò¢#ºñðÔšjÜXgI˜HÞfÌíXçÎÞW¹­Føõ¢èÚX›ÅJóË{}o:]¥ÕüŒ–Ó´r9Ž8|Àj‡m»Ž0*LŸà´øó7?´¥ki"iSJòG•ëF=Ø}ßxÁÇ·ov9湿þÉI©j·öŽ“5ýµÎ¥#.©¤ÛI"¼»kžP™ ¼l@Êó:Ù~?‡ê›ô~@÷þ¼ÿK/Tw7?ü%gi%ÅÆ¹h¶ñ¥œ†\1B—lVÙ•€Ã+pF@ÁÎ0koDñ]‡‰­ïdðüërº}̶s¬¡fŒáÓ$sƒÁ## ŽÆ¼×Ä_²^—âûÝüGxm¦èm£ÝYÚÚ {kÃå¼qJ±†"/(OpQFpd·žÛáGÿøV?¬t9/¤Ôç€H÷7²&ǼžWi%•—'Øã'ÆiËá•·Öß§åšìÄž«ñûµü'ݾ øÝaªüÒ|mã=š=®¡kÄ‘©iÊ4„*ÆWtŒX€W$&¤?ü(<2º¯ö…Á…¯Nš-Å…Á¾ûP0}“Ëó¼Í¿6Ý™Ûó}ÞkŒÒfØ|:Ñü3yã*k=µÆ™"hÑOo*ÉÊMÛ,‹•!”*ä#5~ ëÞ²‹ÄšUÝîµãA®¶ªÓéšlDaí>ÈÈ-n.Ä1¢çÎ/¸îädS“Õöé÷¯ø?rßaÅh“߯Üÿà±àÏé¿<9­á+†¹°¹.¨íÄÙGdpRE ¤2° €r+Ó5où\ÿ×'þF¼?örðž¯à¯„mŽ×f®Ó]]Ü®PÓÝK7Íå’± ÈRT€HÁ¯pÕ¿äsÿ\ŸùoF…ü~øÅwðcBÒotMpß_ýžh#—d‘ÂM<² ÁÞËBq“Æj/Ú/F:†³ý¤ÿè6w6–út¶qËy6«ö‹D¹_*‘Ž×' åRÇtž2ð@ñnµá»¶¹ò‡õ#¨lò÷ý£6ÓÁ³9×îÏ?wç#ÉÛö!³±Žè躼SY:®›o¨iÿk´³ˆÀa6š¦Hœ) …6®3Že7­ÿ­¯úÛçä—ã¯ü¿ÔôañïÂ'F:ƒk1% ÓçÕÞT­¼.#˜•+Èä#FFðÇs[~ñ¶—â«ëËo^Gw-€…§ØÔÆ$æÆQ•¸'‚3ÔWž]þËVºÖ“á;}nòÂ/øG/¥¹¸‡NÓE¥¦¡ ’‰šØÃæ6Ô2G1f}ÞYÏÞÈé>|·ø!á[­2Æú}Gí7qçJ¸eŒ*E ]NDpÅ`ç™ÀÎ*—[ÿ_Òƒî„勵¯êߊìÎ=ÿi/i¶:¦½¬xcNi:ÜúEÝÕ¶¦í{iW ]=¹€+ B@$ô»}'ã…õ϶‡¦jL÷þdС6³%½Ä°ŒËW ‚)]w"1a†ÈùN8ÿøf­ZòÏUÑuÆÞÖµk­NïO¶Ò¼›«„žs3[½Ñ™¿w“´•XŒŒŒÕß ~ÏWž×4¸¤×¢›Ã~Ô¯5]6Ál6\¤×`V[ƒ!"}ªm "“•É;y‹µÞß—ëóCïëøkoÓú¹4µ×€g¶Ûj÷³#Ãöˆ¼½"õÄC;¤ˆs".æ\„ÇÍŠÚ×¾Ÿ  Ÿís?ü#~›Ã¿ñí·í>g‘ûï¾vãìÿsœîûÜsÄø¿ö*ŸÅžšÞ#Óe¶¶Ð,ôE{ýí’Ù›t*f³ÌámÚL‚Ü3 £ éK}{þÿ’ûüƒ§õåÿî=Xøã£xF÷U_ÞÁvš¤zUºZÃqs<’½ª\Ú4ˆŸ0«17‚6󸕂üi¦üAðå¾­á+µXÜ–æ6ƒ+edpYYYJ°k—o‚YñáÖÆ§Œøuß'ìÞšgØ|­Ûÿí¦ì³â­ï‡~ ÿ„Eº³ûWÚþÓ©^êü¿/oÚ.dŸf2s·ÌÛžøÎqJ7¶¿Ö‹õ¿ÜMßõóÿ÷ž­«È*çþ¹?ò5á¾1]üд›Ý'F“\7×ÿgšåÙ$p¤O,ˆ0w²Çœdñš÷M[þAW?õÉÿ‘¯)ñ—‚‹u¯ ݵϟçoË_šBו÷ÿ‡üôù3fÿö‡Ó.~(è^ð“5û^ê67Óý’qieeŽã`ŠIãUeVb2rGû]x{a-¶¯{2ÕçÿÂE÷—åíû>Ûh ÛœÙò7gïcdèívºko½[ð¿Ügy_îüµüOVÒämÿ\“ù ó/x¾×À ÕuÍl‘i¤ÚIw(YQK`{œ`{šôÝ'þAVßõÉ?¯øÁðÂ?Œ‹CÕ.ÞÛL–ò ïãE;¯!Ø«)s*eÆHÉÈ–›V_ןȸÙ;³áçím¬ü,¼ñÄûaዽíì5[&spÖ“†v®éÖHŠ…RI“Px[ö–Ò5-3]Ôëí·öxeÛöSœdÌ’|¡>êg§5Ÿ©~ÊVö×Z´¾Ö¯4ñu§ê%ãM¨ùö’YÝæ˜¼Šè#£$p€†a-gmvÚáuƒâ=üU½6¹ßö; 1æÙ­£ÀmþѸ¯–€†óÈùiÝ·nŸ¬ûo•·nÂJÊÍÿZÿÀùùjv_¾"?Å_‡Ðk“B° ›«¸‘:.+©bBUÀeb±© €A$`t¬†Ÿ´ø…ñ'Ä:i†ÎÖÁd—I¼3o]Z8fk{‡Uå 2…êr+ká×Ã}Cáÿ¶ЗYŽëUcy7ö²òÐOq4³oò7ž¥û»ùÛÔgŽ_Á¿²n‘ðîûÂw¾ Ô5{ï#Áq%ÅÌ÷1êK,Ê"yJB^R“e'CÙJ÷víø¾¿.¾Oa»[Nÿ‡üŸ™wáÿÇøõÏÙê¾-X!è:v¯4\Ý\£Ý4‹ q±dÝifá·×´…_ÃÐêPßÝKÅãééos%é¸@Yâ6‹˜:ª– § Éãšãnÿdùσ¡Ó4ÿ’ IÒI{0]-Œ²ÈDѬÀ¼S Š´a†ûÇ8ªö¿²4ö ŸL¶Ô¼.Ís¬I«”>hmmÙ Ž ¶ñÃt_,é&Nây%·ñ~zý/÷ +kÿZ™í~ÖmüDšeþí%­ç•4LÈÑ–VÁV”àô ÜWeâŸùOÿÿÐ…p ü37ƒXšÖ7O-¡Y8Ø>`jc²¿õ½¿KÓúÛþ ¿÷Àú®µ©h-'Ä2×IÔa•ãx­®¾Ó Чå’7*§kpÊèköºð öÂ[m^ödx~Ñ—¤^±¸ˆgt‘dEÁܢù±]Ÿ„4[LÐ 5Õ¢Ö5wg¸ŠÌZF¡‰Ú‰f (À嘞¤×#áO€'ÃÂçû\Ïÿ߆¦ðïü{mûO™ä~ûï¸û?Üç;¾÷©¹-—OÑþ¶ûû·_ëUú_îîjkÿ¼'᯲KTfŠîÒ;ñ5½¤×0Ám!ÂO<‘#,78y ©ÁçâÑøÇáïøK¤Ñöw½…ÌRºÙÎÖ°È#óLotÉGüÛKƒ‚8äWšßþÆÊ©§'QÐn%‡B³Ñ.ί ý½%û4exSÏO)ˆc”%Ôñ‘Ç;w_³¥üÿŸÄ6z£Èò:ÙioÅØ0´KÓ &â5%[æ‡qØ£pRÝÛm=?éüË_Äé4¿~ÖôKÍGJŸUžÒÍ"”²è×›§I[loy;§F#†ˆ0Ç9Ç4Þÿ„Y5uÔgky/Nš°-Á½7C9ƒì‚?;ÌWfBüÝ9®ÓöFÔm¼/ªéðøžÎÒ+æ´h쬴é Ò¿s)‘ĶtÙÖ7‰vÅT½ýõ?…·¿ð3µö¿iâ u{eÑ4[h-­kAo$bÎ[¨Ðǵ:‰C†`yÃw¿õªý/÷×úòÿ3ѧý¡¼'‡´ýN+ûË›}PLm£¶Ó.§¹e…ŠLÍn‘Qca†fPàHÏiá^×ÄL¿Ñ."º³½ò§‚h›rJ‚¬¤ukÀ|1û)êš×‚ü3{âÉ´˜$ü0Ö›öy-­çXÕ¤™Œ­çJ@Ú#_”œe¸}Ïìïâ v=bçÅ~-±¸Õ¯àÓ"´šßF0ÃfÖMshÌìd íó Ëß uVÛþ ý-÷îC½´þ¶ÿƒ÷Éà N-jêÂòÄL!ºÍO6†M¥ £pO³Gq]ÅpþŠê«×&‚æñcÄòà †9aÉT,ÅA=fÇ©®â©QHŠ( ¾_ýÁ?²u§Lk]ÿéÅëê ùöCþÉÖ1ý­wÿ§  ßø)·ü’/…ö9ý3jÔQÿ6ÿ’Eð¯þÇ1ÿ¦mZŠúÊŠ( Š( ™q¹·’9 "•8ë‚1O¢€1ÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ Ø¢€1ÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ Ø¢€1ÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ Ø¢€1ÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ Ø¢€)é:$Z?™öf‘¼Ìgq¦}½3TðôµÀ’å¥VUÛò2OqïWè  øBmç¥Çýô?ÂøBmç¥Çýô?¶+Á¾<üBÖ¼+ãä³ðÝòÙÛµ˜”ZA)gk‹…$´‘±èŠ1œqXb1ÂÓujl¿áŒqᆦêÏeÿ {ü!6¿óÒãþúáGü!6¿óÒãþúá_5ÿÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×™ý¿„îþãÌþÞÂwqô§ü!6¿óÒãþúáGü!6¿óÒãþúá_5ÿÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒÑý¿„îþàþÞÂwqô§ü!6¿óÒãþúáGü!6¿óÒãþúá_5ÿÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒÑý¿„îþàþÞÂwqô½¿„-­®HÞrѰa–È9ô«÷öI¨Ú<3– øÉ^¼ÿJùgþŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¨4-Ìû3HÞf3¸ƒÓ>ƒÞ™ªxz ZàIrÒ«*íùH'¸÷¯˜¿áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úSþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯šÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úSþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯šÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úSþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯šÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úSþ›_ùéqÿ}ð­[ˆͼ‘ÈHY©Ç\Šù[þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»û¥?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ù¯þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüfíü'w÷öö»ûªn 6òG!!dR§pF++þ›_ùéqÿ}ð¯šÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úSþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯šÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úSþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯šÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úSþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯šÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸úSþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯šÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆhþßÂwpoa;¿¸ú¦Þmn‘ÆIXÔ(Ï\ŠÊÿ„&×þz\ßCü+æ¿ø\~*ÿ ÏþSìÿøÍð¸üUÿAŸü§Ùÿñš?·ðßÜÛØNïî>”ÿ„&×þz\ßCü(ÿ„&×þz\ßCü+æ¿ø\~*ÿ ÏþSìÿøÍð¸üUÿAŸü§Ùÿñš?·ðßÜÛØNïî>”ÿ„&×þz\ßCü(ÿ„&×þz\ßCü+æ¿ø\~*ÿ ÏþSìÿøÍð¸üUÿAŸü§Ùÿñš?·ðßÜÛØNïî>”ÿ„&×þz\ßCü(ÿ„&×þz\ßCü+æ¿ø\~*ÿ ÏþSìÿøÍð¸üUÿAŸü§Ùÿñš?·ðßÜÛØNïî>—·ð…µµÂIÎZ6 2Ã>•~þÉ5G†rÁ_+׃Ÿé_,ÿÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒÑý¿„îþàþÞÂwqô§ü!6¿óÒãþúáGü!6¿óÒãþúá_5ÿÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒÑý¿„îþàþÞÂwqô§ü!6¿óÒãþúáGü!6¿óÒãþúá_5ÿÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒÑý¿„îþàþÞÂwqô§ü!6¿óÒãþúáGü!6¿óÒãþúá_5ÿÂãñWýòŸgÿÆkÒ?fïê¾/Ö54ñ=ÚÞ}ŒÛ˜OÙ¡ˆ¦õ¹Ü?v‹œùk×=+£ šáñ“ötÛ¿¡Ñ†Í(bçìé·CÓ?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ Ø¢½#Ñ1ÿá µÿž—÷Ðÿ }¿„-­®HÞrѰa–È9ô­Z(û$ÔmË|d¯^¥fÿÂkÿ=.?ï¡þ±EcÿÂkÿ=.?ï¡þÂkÿ=.?ï¡þ±EcÿÂkÿ=.?ï¡þÂkÿ=.?ï¡þ±EfØx^ßN»I y‹&pŒr1éïZTQ@Q@Q@|¿û!‚dëN˜þÖ»ÿÓ‹×Ôòÿì† ý“­:cûZïÿN/@¿ðSoù$_ ÿìsúfÕ¨£þ mÿ$‹á_ýŽcÿLÚµõ•Q@Q@Q@Q@Q@Q@Q@Q@|ÛûKÿÉPþÁÉÿ¥WUô•|ÛûKÿÉPþÁÉÿ¥WUågîU>_š<¼ëýΧËóGEWÀQEQEQEQEQEQEâßµíâO‡>4ð‚¾iZV§ãK/úœŒ¶–pÄy$ÁˆÁèÃ)öšòŸÚGödŽ:·†õßx’÷Â,ð”Ï.›©Áܪ«íÞ’BÄ(q‚À†Šß 骱u~øÛt½¯ätá]5;ÔÚÎ×½¯m/mmsçö“ñ'ìùàVÔ?l­3M†kj-*ÂãÂè÷]¬™ž\¯æ. H§#$Ž‚ g‰¿à Þ ðÝ£dxÆöö{ µK>1RëN´ŠGŒÍp’ȘÉ%¶•$Ã0ëÿ±ÿ‰¾ x[J¶ø­ñ*ë_ÔôïZxío¤$1‚2‚Ú(P±»%Æyä©'4~Ð_°ü?~/Aã_ ë^Ÿªawm«èkVWÊëÄä7 ™mݫ꒒ö]ok¥²¶–¾¯þÇ]5ƒ”¿xûí{^ûZ×µµû´4<{ûuø[ÀÞÒõ¨4Okš«§&¨š¦›¦+ÚA3.$’Ik©S¹Hã"¹ýGööŠ/ÚDðæ‰áýcRð¶³ [ëßÛiÒ<ø˜†Y°X¶Da¾B>VWîÖŽ¿àšrxÂöÎxb¥«b@A•,ÅXÈé®aëÛ?x+S🠄þðÄ>ÔUô•™5k4ûûA”ÁaXŒŒtQÀÅi+¿{{ùÚúzmßb”pQŠ÷®ÚóÑéå¾ë·¡¯ðûö÷ð?Äé:&oâh¼E,Ðhú¥Ý’Åcª¼G ±6ó 9àoE玸×|uý ¬þZYM«øwźôw«+–Ѭám„aI3;º*gwœ­Ž•å?àžç௴‹­7ÄZ þ¢ß=äÜxJÐꮤ6ØßQÏ™ò³Ü<```«ö ýäý¢PÀnˆ®çöhøÿ ïðOKðwö§öÇöiœý³ìßgó<ÙžOõ{Ûß¼sŒñÒ¼×Â?°0ð·þhÇņà|?ñkþwöfÏ·æ_3ÊÛç/7e¾”¡'µ¨¤ß-ýÝöÖïnšÂ8oÞ)7»åô´¬önlßÿÁ@|aã¶ÑÞ=zKÕÆ…&¸–‹ý—ï?º2q¼¯|ãš’oÛëÀVZU¥Îªu‹6¹ñžkyíÑf¶ºo˜Ò ø/˜™`Iç¥qÖÿðNH´ˆš†¥áMB]RÕ—U’×Sð¦¥{oûÀòC ì§z#cã+Ôe²ÆçŒÿàœz7Œþ)xëÄWºÛ-¿‹ì§ŽÒÀØîM"öe‹}â7›ó¾ø‹`*»¸µQÀ{·“Û]÷ÓMºë®Ú}ýk);ißÏËutßM[žÃð§ãf‘ñŽ÷Ä‘x>+ï/Âú¬º5ÔóD©×ýñ K(ÈäÔWª~Û¾ð÷Å{O ø¯@ñ¦‘5þ¨t{]FóKØÝO¿bùmæodc¯³ç×Oû4|ƒörøKgá›mAõ{ˆæšæïPx|§½šG,]—s`ãjòÇ…׊ØÿÁ4ä²ø•»ÿ •¤°Ûø­|P¢_Fú„¤Hìï}æù…8ì6î%Š“ŒeJGZJr÷Ñë®Úþm]SŽºœÒ²û;ë¿ü û‰í“âa.ºº½æ“`šwÄÑáf]1çómO™…`%s°~ó ÁùyãÑ5OÛwÃ~ø¯iá?è4Ò&¿Õk¨Þib;©÷ì_-¼ÍìŒqµö`ƒœãšæõ/Øj?Ú9ñYO·øý|sÿ ÌìÆÿô_õÜýÿõ¾ßr°,àšrY|J‡]ÿ„ÊÒXmüV¾(Q/‡£}BR$öw¾ó|œvwÅIÆ:#õ–ç•´ìûGË¿7ôΉ¬ùŸ5·¶ÎÝ=7=¶¿†©§j7:mÌí§Ÿ±Ã$Ëœ1P­å°\òN8¯;Ô¿àÓßÝê*xæê?‡z¯ˆá#¹Ð³PÜ4ÇŒ^oÜ?‡€S–>«ðàü(ýSÆ×#VþÓÿ„Ç_¸×6}›Éûšsåg{oÇ÷¾\ú *,§x¶åmµßÝòÿ‹K%©8ˆàáì›o¦þz½7ÚënÌg‹ÿjo øÇúÿ‡šúûí^EqBÖ‰)‰—– %¬ Áæ±uïÛ»Ážð—‚õ›Ë?Ímãȧ—LŠÞÀO?îJ†Wİ.ï|k‘»ÿ‚z]xrçÃÏð_Ç×ÞþÊðìž¼i4¸¯šþ &’iç`´’¹èq…Áç£ð·ì[ÿÌŸ[þS7ü*¥»_ùíþÔóÀóÔù;qþÞ}©¸`“º“µüïoÊÚûŸ‰8HÙ©7£Ó[ß—Eµµ—ª;ïüðÿÃo‚Ëã¿›ë í!ºÉdÌd^Vx—©89 G‡ø[þ ‹ñGÇS|NÓõ? x;ÚM­å­¦£¥µ¾®f”Æ¡0ì{9ÛÐ`‚HšöÚkà-·í%ðŠÿÂÚ…üÚSÜIŽäiæyc`ÊÅ27 ŒŽ¼kÆõ¯ø'.¡ñ_|_ø‰>¹¬ø¦ÊÖ½ƒEŽÌÙËnÈc“bJVA„ÚW IÈ<…ƒú§,wk»uvZj´µ÷ÞÝ Â¬³~Ùêýt÷£¶–Ûšï~‰|?ðPOCáOê>%Ò¼_ ÞxV+{‹í#SÓVßQòg’8ã•"2dÝ*gædqÈÎ]ÿü»Á:l:¿Úü;ñ .tUŽk›VЊ̖òVå·8XâùÓæ¡;׿³¼KÿûÔþ$i3¸ø«ãæÕ¼Uâë+M4jqèéVÐO ÛEºÊ³4 –ܸÉã®w¼_ûëþ=¾ÿ„œÁÿ ¿‡ít//û;ؼ•‰|Üù£ÌÏ•÷p¸ÏSZ(àîÝü¯m—•õwþ¬ÊŒp\Íþ?Ü¿Mµ›]}Õß]¯Š¿¶Ÿ‡¾išn£{ xÏWÑõ=2]5=7MW³Š s·|’H˜lÅH 9¬½[öº²±ø­lÖºˆŸÂrøü`-ÓMoµM—më+H;ýYPsüC÷’ÛÉ|a¾lm; kÙ+Ä|ûÂ#ãO†Àñ!œü7ÑfÒ_`Ùý d‰£ówy§ÊÆüíÃtë^‡ð[Àº×ß[é^?ñ=׌58¥‘ßS¸·òUf%WföÆÐ@ëÚ¹qQÃÞôÿšK·ò¤þ~§&"4ozOM4×Îý<—ß¡ÕÑEÆsQ@Q@Q@Q@Q@Q@zÇì—ÿ!ísþÜÿôºòzõÙ/þCÚçý¹ÿè7uíäïkÑžÎEþö½ïQE}ÉöáEPEPEPEPEPEPEP_/þÈ`ŸÙ:Ó¦?µ®ÿôâõõ|¿û!‚dëN˜þÖ»ÿÓ‹ÐoüÛþI¿ûÇþ™µj(ÿ‚›É"øWÿc˜ÿÓ6­E}eEPEPEPEPEPEPEPEP^;ñàv¹ñÅ驸j])`[o²²ÝO$o¹g‰c`F$ûö*ñ/Û_öÙðïìð_|DÑüKâD}HÙZhþ´[½OPsæÍ/‘ :‡[AsrüäGo!#E*uáìë|.Ë{uV×N¶3«‡Ž*œÕÖíkÓ^­s þWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ®“âß훤ü4ñ&c£irøŠ{ÀºçŽìn­õKH.-ôçþèMu$p¡˜jq–Yc‰B1wUäuþÕ? åøËÇø‡àdø$"ãþC¯Úh!ŒK»ìBO4,ïÈ\ùºs\O"Á§gK]zË£iõèÓ¿¡çcàœTù4zÞîÝ:ßÍgÿ «âÏùíáßü ›ÿŒQÿ «âÏùíáßü ›ÿŒW«øWöŽøy㿊šß|ãÏë>6ðÒyš¿‡ìu«kSK_”n¹´G2Â>tåÔ}åõÙÔÿb`¬Ÿ³Ñù¿óìlÚäÛÍÿ™ó¯ü2¯‹?ç·‡ð2oþ1Y>2ø'ðëLŽûâˆ|¡YK(.5a­by,<€X…cޏSé_PWñ¢î+|1žúXá‚ÜI$’0TF‰ªÌO3šK‚Zº‹ÿ1ÿbàßü»ü_ùŸ<ù^ÿ¢™ð‹ÿ ¸¿øŠ<¯ÑLøEÿ…\_üE}ðÇö«ø_ñ·ÀÚ¿‰þ |Hð‹|5á÷xµM[Fñ¥ýŽšÈ‚G[‰á‘’"¨ÁÈb0¤‡4¾ýª>|Uøm?Œþ|Fð'ˆü!k?Ùg×4Í~ÖïN†mÊž[ÜÇ!_s¢í-œ²ŽâìL¿»óÝÿ˜<—¿åß–ï¼ùßÊð÷ýÏ„_øUÅÿÄQåx{þŠgÂ/ü*âÿâ+Û—öòøö t¿>›iuÓᄘx®ÃË}XNžÎÁºÁÈûü–º_þÑ_¼ñ[Eð'Œ¼sàý'Æþ$¦Ò|=y¬ÛÁªjˆ¡‰k{Gq, ~QHùÐÒþÅÀéîoæû_¿m}û¯û½¼ß§~ú6y^ÿ¢™ð‹ÿ ¸¿øŠ<¯ÑLøEÿ…\_üE}C¤|dð‡ˆ#ðûè>*ðÝêø´JÚ·Ôá”k"5/!´ÚÇÏØ ³lÝ€ 8âþ0ÿ‚øáÏí+¨xcâGŠ|áÿéþMvOê>&·¶´[ãªÏ§=‹<„D¬’[²ŸÞnB€­5’à¥(ÅCW{jú'.ý“ü·’àÔe7OEkêúÉEuî׿ôLἯÑLøEÿ…\_üEW‡¿è¦|"ÿ®/þ"¾ø‹ûK|9ø?sá¸~,øÿÁ~—Æ7 k &­­ÛY6·3m  –EóØ™ âw¯¨«:§ÇÏèŸìü#¬øÓÂvž+Ô&6öº,Ú½ºjä¢[ó„Ó`.v)oº3I䨼<·{öÜ?±poþ]ùîöï¹ó?•áïú)Ÿ¿ð«‹ÿˆ£Êð÷ýÏ„_øUÅÿÄWÒŸho~Ñn£{ðÇñÅžvÚ}üþÖ-õ(ì®Ta• vÈc`àƒŠìiÿb`ž¾Ïñæظ?ù÷ø¿ó>:ò¼=ÿE3áþqñy^ÿ¢™ð‹ÿ ¸¿øŠûŠ?±0_óïñæظ?ù÷ø¿ó>:ò¼=ÿE3áþqñy^ÿ¢™ð‹ÿ ¸¿øŠûŠ?±0_óïñæظ?ù÷ø¿ó>:ò¼=ÿE3áþqñy^ÿ¢™ð‹ÿ ¸¿øŠûŠ?±0_óïñæظ?ù÷ø¿ó>:ò¼=ÿE3áþqñy^ÿ¢™ð‹ÿ ¸¿øŠûŠ?±0_óïñæظ?ù÷ø¿ó>:ò¼=ÿE3áþqñy^ÿ¢™ð‹ÿ ¸¿øŠûŠ?±0_óïñæظ?ù÷ø¿ó>HðÏ„l|k®A¦x7Ç 5mJçw“ieâ5¸ž]ªY¶Æ‘–l*±8Ojëá•|Yÿ=¼;ÿ“ñŠôÿ‹ßòP~ÿØÑ?þ™uJîèþÄÁÏ¿Åÿ˜bàÿçßâÿÌù×þWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ¯¢¨£ûÿ>ÿþaý‹ƒÿŸ‹ÿ3ç_øe_Ïoÿàdßüb¸½WFÑô-RæË[ø‰ð¦ÎöÎV‚âÞ¤rÁ"’¬Ž*À‚<‚+ëêàÿggü<ÔšBWÄþ!$“€öÕíظ%ÿ.ÿþaý‹ƒÿŸ‹ÿ3ço+ÃßôS>áWÿG•áïú)Ÿ¿ð«‹ÿˆ¯}ð¯í‘ð‡Ç^Ô|CàŸŠŸu}GÔãÑoõ;/ÙÏge#¤qÚK2JQ'w–%X˜†f‘@°Î;øÀ âãÏøSD>ÓâÕµÁ«ÛÛcYJdX®nüÇD.a˜,’mV18í8?±pM_Ùéêý{öö.þ}þ/Ó¿sæ_+ÃßôS>áWÿG•áïú)Ÿ¿ð«‹ÿˆ¯¢|1ûSü1ñ·Ãkx;â75ojw ig®Yëö“é×S®ýÑGr’Ý×Ë“*‘±²85—áoÛwàÇŽn¼'‚¾-ü3Õçñãφ£²ñ=”ïâŠL¶!%&äÆÀ«÷m ƒƒOû{{=}eþbþÆÁZüšz¿ó<+Êð÷ýÏ„_øUÅÿÄQåx{þŠgÂ/ü*âÿâ+èk¿Ú·áu‡Ä½7Áwß<Œ5›‰¬ì4'ñ¢êW³Ã‘4Q[<É<ʪJàä ã~þÚú7ˆ¾|Mñ_Ç‹¯ |=ðïßêÞŸSÔu„†ËȳaK™çœF´…ÆP’ lÔ¬›+ÚÝìœSëÞKïÉ0‘Jôú¨î÷jMi~Ñ—––Ý£Êü¯ÑLøEÿ…\_üEW‡¿è¦|"ÿ®/þ"¾°ð?ŽtO‰¾Ó|CðßXÒüA k6éwa©i·QÝZ_Bã+$3FJH„rI¹ ~Ôß |ñcYð~"øZñχbyµ_ØëÖ·®›2+½Å¢He‰U¤ŒÊ. õؘ+ÛÙëêúo× –MƒjþÏOWþgÎÞW‡¿è¦|"ÿ®/þ"+ÃßôS>áWÿ_C|7ý«þüdÓüCwð‹âO€¼Skáu×fÒuÿ†UñgüöðïþMÿÆ(ÿ†UñgüöðïþMÿÆ+èª(þÄÁÏ¿Åÿ˜bàÿçßâÿÌù×þWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ¯¢¨£ûÿ>ÿþaý‹ƒÿŸ‹ÿ3ç_øe_Ïoÿàdßübøe_Ïoÿàdßüb¾Š¢ìLüûü_ù‡ö.þ}þ/üÏá•|Yÿ=¼;ÿ“ñŠ?á•|Yÿ=¼;ÿ“ñŠú*Š?±0_óïñæظ?ù÷ø¿ó>uÿ†UñgüöðïþMÿÆ(ÿ†UñgüöðïþMÿÆ+èª(þÄÁÏ¿Åÿ˜bàÿçßâÿÌù×þWÅŸóÛÿø7ÿ®çàgÂ=[ᆧ}/Š$ÓŸûAàX…¬¯&<´¸'vä\¬Æzõ¯{ÿ6ŸõÔÿè·­ðùn ?iJ~¯õfÔ2Ü>|ô£gêÿVX¢Š+¸î (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ùöCþÉÖ1ý­wÿ§¯¨+åÿÙ û'ZtÇöµßþœ^€3à¦ßòH¾ÿØæ?ôÍ«QGüÛþI¿ûÇþ™µj(ë*(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ù§öšýŠ—þ Uñ&?ÙwJølÞ%ð¶§„>ø÷á>‡{w?qi©Í§Ç¡Iw²×¢²ÓÒ;’Š@p já¾[_ÿàžßþ.þÕöZ÷‰õ_ jÐ>!xÆ Þ4Õ¬gÒl,ˆŸNþÀ·³739†ÿ—Jån@‹ ÑýíEn«ÍN»‹O^ê|÷õæím.¶m5;N“£ovÒ^ŠJÍzY[[÷Ý&|…ûþÇÿþþÓº¦©«¯„ü+ð»þ'—I¡iž&¹ñÔïõA.þÙ ^é°Í¤sö—–Þ+»˜]î0DjÇëÚ(¬V‘QìVåßP¯ý¼|mñ+ᾑáÝg×~0³×§Õtéô+[Ô±ŸZŽo뵬wè°¼¡ŒbFt XÀ q¯5ý¤¶yû'ü%¿Û?ÛÇû#þïìÿµ}£û>÷~ïíÜygûNsÎvãš™ÁT‹‹Ù—Nn”Ôãºwûƒô_ØÃöø¡ûüJøyã j—Úâo ê^ðßÄ Ý |Aâ +J¸°º¼Ó5[½½Œ‰1´’$—,Ay C-¿Œ±/įÚÊßöñ\Ÿ›áíÅmÁþ´ðn§©ém¨ë¿Ùš¤··×¦ÊæKHÔÛ]y ÃÈÉlA ”Vúãþ.ýWü²èÿ‹ÿUßÿ,ºÖ¤ÝVܺþ|ª-ù¶–·º½Ý¯©”b¡è—m>×2VZ$žÖKK-’>bý«¿à•Ïã[¿Ûûá7Â_=ÿÄ„Ú_„|,úu³ÉuµúÉmf_²(“û3æ-“ ˆ†ÎSâÏü“â-ïíûãwÆÚÅ|>ø‰âÏ ø¶Æoë~¶³Óî4˜¬QcÖWV…uÖ ¬|å:}Ä‚H¤d£–}‘ÿþ«¿þYtÅÀÿªïÿ–] £ŒÔú¯ó¿ç¯®£iJ. iùh—ä­gug¶ÖøâüïöðWŒþ ø¿à‰ jÇÀ/K­~Î6’êiWÐë7ò^ëÐÞ¡ºHÕ;¦³ˆKåa`ùFv÷ÿÁ+áïĽ¿é>-Ó¼ð¼¤kÚ’ÚÍ4Úì×½ä¡$mé-ÏšdyŠ…>sß3ôü\ú®ÿùeÑÿþ«¿þYuÍì!ì•ðÙù½iÊ›wwwjM¾œÖv²±¬ªsMÔkV×á8Í+mdã÷7Þëó¯ÆðJoŒQø3á¬|1ñG_ðî¯û=è U›ó÷#µ¶ÒÚ[Å?à’¿²ßо øÏÄž!øßá‹þñ]ß…´_ ÝÜø³Xð¥Þ“4V rbƒKOÅ 4Q™q5Ü1HÈñ®Ò«÷xGü\ú®ÿùeÑÿþ«¿þYuU*:®òßþ ÿ¯ó3…8ÓÒ*ËOÁ$¿{½áñp?ê»ÿå—Gü\ú®ÿùeÖežïExGü\ú®ÿùeÑÿþ«¿þYtîôW„ÅÀÿªïÿ–]ñp?ê»ÿå—@ïE|ñsâÏYøªÏB¼Ôþ3Å­ê6—öš{Üx!n®­àxRy£ˆïouj®à¦x ºçCþ.ýWü²èÝè¯ÿ‹ÿUßÿ,º?âàÕwÿË.€;Ï‹ßòP~ÿØÑ?þ™uJîëÂ4/í_øZþÿ…«ÿ gþB“ÿelÿÂ9öµÿg^gÌþÎýÿú´ãøwmÏj÷z(¢Š+æÿ‹µŸÚkþ ßñŸá×ÃÍFßI×¼s4->òáÝ!·žçPÔbF‘ ¹Æâ 3€z¤+Ï,~ßhOzžø…ãM&ÊòþïQA¥I\ÜIq(FšÅäÛæLäf gŠŠU`àöjÅÓ¨éN3[§¸øàìWñÿ³ïŨ|oðKâW‹<}ã_hþ—Iøƒâ/7…ï#î"Œ[ mÜÙZ}²iši¡K§ˆ"D†E ¶¾ þÅ?´WìMû|Yøqà}-¾)øæç_Ñõ{_‰wVZÇŽtó-´w1µ¾±q,pêz}¥³Ål.wZ–Ì2ÞjWß?ð¨¼AÿEOÇŸø ¢ÿòºøT^ ÿ¢§ãÏüÑù]ZMÊrœïg$“óJ\ËñmùÝÞæJJ1KH»¥ÛÝåü’Gç'Àø'ÇÅ_iúi?…:Õæ…¬þкOÄûøJµ]P]GHm)!”ÝÅ`鹆{XÌÐG‹2 ‰®YëÑuÿø&F«cÅ}[Á ¼7mâþÑ^ñÅ…õºØEu>…c}¢Í5À›x1¬k¬âVBd—j›çû[þˆ?è©øóÿ4_þWQÿ ‹ÄôTüyÿ€š/ÿ+ª¨Oêî. n[.žï±·þ˜‡ß.êÕYûfÛê¬ÿò£ëçVOä»;þdh¿üIûQÞüsð/‚¶ßk׿h·Õn~-.¡¤¬LZ^­iu)™LÃQQ%¼¶ÑE,§ÏÏ›´˜ôÚoþ õñÆ MÿÃÍ;W‡Wð¯íª|K‡MÑõ]&WWÒfŽê§ÓäÔ"¸°Iö¥™"¼EË`Z'ÚÃî‹Ú¾–%gį[‹‰Zy|« <Éï;cMåry5cþˆ?è©øóÿ4_þWV4 ©FœbõŒcÿ‡Ùk÷Ò»&÷Ñ«œ•IT¼W,¥)[ü^ÑY÷Ò«¾É´šI]? ý‡þø³öuøàÿxCáÇÄM?Gñ^¯â=KÄ:§Œ|E¡¶±áynfžñ.%·ÒOÙf73¸Hm‡‚àá_³_ìwñSLÿ‚^x³öR×~AðóÄöŸõ¯ ÛüE·Õ´Ù¼?âéÑ¢K˜Í¼ßÚ*n̦yLÖ¨T«†.Ûw}Õÿ ‹ÄôTüyÿ€š/ÿ+¨ÿ…Eâú*~<ÿÀMÿ•Õs^Ó™=¤¬þI¥÷]é·tì…Jn“R[©s|ïw·~û®]ßácû(|Pøíâéµí+à:|‹Áß øû|ðWÅ{ì¿øGÀú>«YùñÏö[«{(¢–?2&d}®Œ7#2œd9¯Bñü|Çøÿ!Xÿð¨¼AÿEOÇŸø ¢ÿòº¼ããWü¿Aý¢5k;ߌž8ø‡¬Í§Äa¶â V9b±Ef¨°¹ln!TB¨VªëÔ•InÛx¡N*+¦‡Ÿ~ÈðJï¿°—Åÿˆ>9ý™<aáï|Fºó¯$Oš=.܈٬täÆ--dk†…8.ʿ꡷Š¿ðFoù5ÍoþÆ‹ý%´£þÍð»þƒ~<ÿÀë_þE¯rý™ÿf}öUðׇ~]j×–7—層ê2Ç$¢FŽ8È8ÐmÄKÆ3’yôÌ£Ñ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*½ïü|Ú×Sÿ¢Þ¬U{ßøù´ÿ®§ÿE½X¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯—ÿd0OìiÓÚ×úqzú‚¾_ýÁ?²u§Lk]ÿéÅè7þ mÿ$‹á_ýŽcÿLÚµÁM¿ä‘|+ÿ±Ìé›V¢€>²¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯“à£þ7|ðï‡üQû5øÛáæ¢jž'м'>•¯x*çW¸ûF©®C§›Åº‹T¶#[ÈßÈ1Æ"<Åß”úʼ÷ã—ìû¢þÒ¾ÓôÜêv¶š_‰´ÏÂö$r5ΙªC1tpcimcWP°VRC¹àå·4oþ®oÂÿðàÛQ’[ÙÛÖÚ~6é#(²ÄIùÅyí)ÿâð×í'ñ_×/|y¹ðMî“ã NËEÖtŸø‡ÅV–çDðÎ¥ªy?`µºi'K‰_µZÖðL‘}¦?5£Ëmíÿï­¿hôÿ„¼éGö‚ðM—ƒ‰þÊóÿ°~Íü?hÇœ¿hÝý¡»ËýÖ<¬n;²¾yã?ø#¾?í·ªüdð ß‹»Ÿ_éZž±¾ZxŸRÓîla‚7DÔÍÌiæHm¢ÊÈ.9WÍE²±x¦ß/_ëÓ¶¼Úü>ê©]ÁòïoòÛæÞÛ•ZüÚ¾Úoø+€¡ø‰%‰ð¿ÄVð4>.“âÒbÿ„f=tÝ ?±—óþ×·íd[¡möQ)Ûçwª—ßðW¯Øüe›ÂgÁÿ_NÓüvŸ õ_ÿaÆš“­M2Ám— 8yVi$CÁ¢?1<ï$0Ï9yÿ¥ñÖ©7„¿ál øqñþdž>S®}»ûPkÈkjØ,Ž¢<í¿d3lÌ~v>jêü]ÿÔÿ„¯áÕî€Þ50}¯ã5¯ÅÁ?öFížN«¡ýŸ·ÏÝäy~~F7nòÎ6˜¡¬éûM´æûé_îN«V¿ÃÝüN¯Ûäîíéj–í»T“¿óKeµ¯ÿÁW>ø—ãô^ ´Òü_“yâ KÂ61šÒÝt G[Óâš[Í>"'7[ã[K±ç=ºÛ»[H©+6ÐÞ¿·—ÄOŠRǯ?n>ÏâKÝ*/ xrßÀO¬éºLZ½ÂÛè¿ð•Þ¸·7Í$µ¥¬–²ZÇq·¿WðÃþ½£|ý¦|QâïÜ|)¾ðß‹õÝWÄm¬|1µ»ñ¥Œš’Ìnm¬üKÄr%¿›q#'›o4ˆŒbó í+äžý‡8ý–¼s5ßìk{û@Þx“Å~mÄ:—‡|? êv¾)»mFþðHf¼š!¥_­NöV›ÉkUŠç›£P¾éû&ÿÁ8õ_„Ÿ ¼޼Goµ¥| ÒþêVö~lP\@„Ét“yƒÌPÒ2ˆöŒ…Îþp"¤›ŒåMj›·Ÿ»ZÉysF’}W3nÉ«hã5ÿ—mt½.kù¨Ê£]4KV÷?g¯ø*¯‚io.•à?üT³µÕü%?ü+©jžû¿´¸æ—L‰äûAe{«e qA4oøØ9çÿÁ 5‡¶Ÿ-ÄO‡š^™ñ;Eðþ¦øWáŒzŽ›q£j?j·šÒµd‰æIVS$,‚E‘D½hÓö’…7îëfúÚsåìÓpP¾–¼žÖicg)hôÓå ¯4›ŸU²ÞêÿKþΟ|EâÏÛKö‰ð÷‰õ‹›í —žE±‘#é«>”“L#*›|„¹ÞÍ‚xÀâ£Õ?à Ußí=ªü-øKðÿâWÄG—–6,Öt+DѼ%5ÚÇ$IuqyuLË ÑÎéh—l (bÏ­~É~)Òü]ñ¯Ä¿¾#/„|OñbM&[A¼? <:Ö6ÑÛ±òe—eךˆÿx&ÍÿÅŒžzÇö&ñ÷ÃÚóÆ?gŠzVኦ›«øÇÃ:ß„ÿµÚk›X ´’M6ö;»v´3ÚÛC RåQ—z¨ÉZÆ•ù£Ï·ü6ýmkÞÚÞÞe»r»oýmçëekë{'Roø+€¡ø‰%‰ð¿ÄVð4>.“âÒbÿ„f=tÝ ?±—óþ×·íd[¡möQ)Ûçw¬ˆÿðZO‡ üe«éú§€þ3ê:7‡|a'€õ_é~7ºm¦µ¶ö‘ˆ¥7oq!H£û43mycY|¢ã9÷ŸðJ_Ýj“xKþÊWáfIácá•:çÛ¿µ°l†±ö­‚Èê#ÎÛöC6ÌÇçcæ®æóþ Ø/<#s¥?Œáø´%þÊû¾^£ïö~ß?œù[<üÿï/ŒS ¹¥MUÑiÍÝ^T“$êµkü1Nïâ*û¼îêíæ­RÝ·j’wþih—Ãçßÿk/ö·ÿ‚”øçKðÇŒ<­ø/Àß<;¯xÄö°A¨éw‹¨xåUþÍ4к¼Vò«Ç+‚²A¶+ä‡ÿ².«ðkþ Õ7læÔ5âƒãjîå4ÇŠ×A¸”xÊ ).2<’¦‰u:gË,Pˆ™×ÔÝ­ü±¿ø¹W7Ý+Ûó{“Õú»z]Ûð (¢Îâ÷ü”…¿ö4Oÿ¦]R»ºá>/ÉAø[ÿcDÿúeÕ+» Š( ¾ ý²?à§¾?ý–.¾*höÚ6ªø‹Â>2Ó.4{²Ê>ÓáÑ›X¿º‘D¿4é“â(QÁU2C*só}é^?ãOØ{À¾?ý¬-þ1øžBãÄðø>çÁ[Sû>êÆy¼ÒòÄSsL›§x.fR§p!]§t¯ùiï.w×–OU¹Qåi©m徺;>&䮚ºWG‚øçþ ã­3â ž¥à} Oø6÷ã-Ï€t;öQ\j¾!²µð½åÕÇ—%ÅÄp¬ƒXµš/1ž$Hí›{¹«£ñ‡ü?áß„ü á-B? øÒóľ,þØ?ð‰¼ºF™«iCH¼û¥ö©5 BÞÏte` Ì36a g^ïàoü›ÀŸ³çƒž ð÷‰äÒþ kWþ=åäS]jWwº…´Ò_Éå7xÕ®¤;g~à«ax›þ yá{­KJÖ>øãâhþ6ñE¯‰|'¤øé5{$&™§hº“ΰ]ÞO<‘ù²»DG›µIT}®+ö>ÿ‚ªü9ýµ>%Eᯆv:þŸ6­¡ÉâÝ_ͧKˆ´¸å‚7ºŠ;;Éæ´Á»´o"ú;YÊΤG•Gé^ý•t?ø×Sñ£ªëþ$Ôõ¿i^ ÔdÕå‚E¾µÓ侑&‘c…žVÔî<Â0„Ú‰ƒ»—ý“?aKoÙâÒÏÁŸ~#kÞÑt¿ì]ÃÉÒßOЭÇåEÖö^\yIÄuq;ÎK1-Uûµ9.¶ÿɺù{¶Ó_zö÷mœ›²·÷(߯~kë·-¯­ü§öÐÿ‚ƒx÷à§Ž?hO |>ð^¢öÿ ¾§ô­½¤–¶Wï¶ûï—ä·-¥ÛƉ¹0M¿÷eºKßø+ƒ| àß_|pð‡Ä?jž M×I×lìmï&x'TÐG‰ kÝ"}6Iïí5íWûVþÚCwc0‰~Ó€’ÛˆfHþ_0Ÿš·tÏø&O€4é:]†§â¸í4] Á~¶Qsn¶ð®¤úŽœN-ñ¾I¤+1@ÍZSö\îRÙN-/îÞWO¾Šëw%­“)¥um­øóGîvæ½®´Ž×hï¿iÚ{Oý™´Ï 6¡á¿x»Vñž°tHðí´^_^ ;«ÀƒíEkåYO™$‘QN 2®Xx§Œ?à±ÿü'àO jøgÆ—ž%ñgöÁÿ„MåÒ4Í[JEçØu/µI¨jö{ »+H®di™³‘:ý ñ?àŽ•ñcÅÞÖ¼Eq¨Cuðë^i©m",sÜ6Ÿ{§•œ21hü­Bf”;Õì­âþ&ÿ‚^x^ëRÒµ†~8øàOi—ˆ¯bñ’t»›¹mõÍMµ;ëa¿°¸µ’ßíF7Œ˜|Øü”ÄœÉæao?êÚvë¾·¶ÚïO–É­ôüå¹rÛÍ»èsÿà·_þXèz‹kÞ$Ñ5/ éþ;Ô5±¶MC¾YÚò{{ë»{›‚ÉĆÞÎ+›…XIhhÄ’~Ô?ðRï üAÓü+û;øWŬZoÄo ø;ÄÞ1k[/øGt™5 û>ÅŒ×Iu-ÃYßF–öòÇ—+:°p_à›v!ñ½Ÿ‰üñS⟃|M'‡¬|3¯jºShóÜx®ÚÈÊm¤½ºlñÇp†æçZ¥»bv1^8ÿ‚cøÆ_%ñMŸÄ‰:‡¨x»Jñæ«á >};ûXÖ´ãj`ºœÍc%Òîû¡x⸡´9f=(׃š÷Ó~Šqv{]rsvnVM(ÜÆN\G~_Ç—¦»ó|¹vÔéfÏÛ¿@ýª¾&øŸBø]áŸÃ·Úcø–vÓÿ³nî쮭ͺÃãÞۺ̒ûU´E )Vn;â×üYþ~Õ¼9ñwšͿÃ/‡Óý¦~!ëš×ŽuÿYé¾1ð›x/ÅZ„ö˦ø›N_µµºÜ-Þxd‚MBæH嵚ÜÃyukž;Býýlíúm§®¦±å½Döº·¥ã{|®µÝö[n~͵շí âøsÄñ×Ã_x^ÖËQ¼Ð*×~ üGÿ„sÅÞ%Òü]­ø9tÕÐu=KM‚Ê+I]þÃöåE:e”݈Ýᔡdk|¾Ñ[ᲿßüìžÝ|…rË›åÞý|·½¯Ó}Lï…¿ðVo†_i{_†Þ·ÖÉÕµKÚF¾Óéϧêúžž· wk¼wÁe{¶{‹H`“ìÍåÈûâ2öµí× ~Ì_¼#àÉü5â¯x»Æv·z…†‘¡¾Ÿ æÒÕàK‰÷j–ÑÊU® ^IÛy+*±Z?`;àʼnu¿…ßþ!iþ}_P×#ð?üJßC‚êùæ–䤯ÃûCÊiîfœBnÌhïò¨@¨³~Û_°V•ûth ¡üDñ·ŒtO \ÙM§jº&›m¤\Ùk0KÞgö†Ÿs$…Ü«=«Á*‡$>B••;-zôè÷ÞÚÚö¾›Yê‡g)ô]>þžvïo{ËC–ñ¿ü«á—ivøk¨Zë·Ùkú…5Mn´å²Òu{ñnmläµ’ñu KÛ5i­í&‚6¸Q$‹²_*îÿ4ðÿˆ¾)Aá½'á÷Äÿ±jzÞ·á]+Ä2éöI¤êúÖ“öãs§@ÆóÎótËÆId‰ o/i•_*/ÙÁ;´ üt¿ñŸÂ?ˆ?<c®ê–zÖ»á­-´É´­nòÚ-ÄÒÉwc5ä&X--¢”[ÜÂ$@vv~‹Aýˆ|'áäð’Ùßø†Aàßk_¬„“Â|ÛýWûWíKˆ†m×ûnïb®×"Üí†ßN1•;_Þ³ûì½v|Öî­utîEïu¯ü ~o•?¼²¿aڻĿµ/ì=ቿ<¬höµá»MZ[KTV–K(®M=ä»`w‘’1q$rqó…1ò_€ŸðVKÇ_³§ÂmWÅÿþ$ëŸ>!øI|Xþð;–k­¬ÞïT·ûV¨,Ä×ðCRÍö§gBÁY‡ÐŸ²‡ìÇmû%ü¶ð'‡¼Wâ¿xwHž‹¼Ö&‡`‘¤pØA%µ¼-$1*aZs,Ç't­Ð?à“:gü9á{_†Ÿ>2xkSðFwá½Y²—E{ý+Ã×"Ûvˆ¦}-ã’ÙÊÙãšXä»FL‹Œ ”“œœVo-%dýdãÍo²¥Ë¯-érÚÍë½Ã^Þm_KŸHü$ø©¡üsøWá¿ü2¼mCÞ-Òíµ.é¡xMÅ­ÄK,NcBQÔ•`t ŠèkÍþ~ÌZ?À»¯ Ûü3Ö|SaáxJéžmCÎÒb·“ʹtu2½Ò¤kšÒ¡9ÕéTäæn]ÚûÚî×õV35}Ÿ—åþz|‚Š(¨U{ßøù´ÿ®§ÿE½Xª÷¿ñóiÿ]Oþ‹z±EPEPEPEPEPEPEPEP_/þÈ`ŸÙ:Ó¦?µ®ÿôâõõ|¿û!‚dëN˜þÖ»ÿÓ‹ÐoüÛþI¿ûÇþ™µj(ÿ‚›É"øWÿc˜ÿÓ6­E}eEPEPEPEPEPEPEPEPUôÏøöoúë'þŒj±_ ÿÁa¾)jÚþ™à?‚ ¼Añ+Âú¿Ä õ]sTÖ<¦j†·£éÚl.Ðʉ§Å,È’j—DLÅv4fd$n©”¹m¥ý7¶îË­•Ý¼ŠŒy¯ýz}ïO™÷Uð§Ãoø(ßÄړÿ4/€_ð„xÆ_|ªx»Ä—Þ4Ò.ïít›Ý&âÎÃPÑÒÊ«I>ÑíÜÂGyG’–Ç19“™oŽ_ôÿ|r½ø‘â xŸÃZwÆé6Z=Æ©o.Ÿöñá-¯iy »lÔ^O!€D#¸•¤iŽY!nc/iìüÚ¿{O“ÿJº^—Ñ4È…ç$µ²vítž¿&¶¿ßt~ˆÑ_|3ÿ‚øŸÇ?´Ï›Ÿ i¿ðü>Ô|AsñÚÚ9¤K Ñô«‹A¿"mI/´ÉbW,»c¿NZŠðNÛƒãWíX<;âO‹ž𭇀¾#x-¼_¢^ÚE“h2“lÑXJÿÚ—2jŠÑ]1kµ·²µ«„‘cÉEµÍÒÜß&›ZùòÊÞi­ìÎ.•ï{~)~©ßªi«­O´«'Æ^о"é‘Ù|AÑtvÊ)Déo¨ÙÇuHPá$RÌ3× }kàŠ5Ÿ|ð®¯ñûž»©i\_ÝøVåî´K‰™w±šOžH ÎÆnHÁ5×Ó”y[L”ï©òÇŠþ7þÉÞñF¥¢øŸJð%®§¤]Kewü!NþTѹG]ËhU°ÊFA ã‚k_á/Œÿfo޾1@øOá¯ë:¬‘<þT~ hÖ8Ðeä{UD^@Ë0™TrÀµý ¾2þÍŸðŸkß³GÁÿø]^¼ø¥âm+ZÑ4ÍMl5Û]F±&‘sÍûìÿ´y°^Èß=¼wÝÑ[N­õ¯ìÃá߈þø'áÛoÚçÄ~ñOÄi~Ów­ÞèV c¥C,÷̶vQ¹25½¬rGk²þöT·YdGaR¯øe¯†?ôN| ÿ‚ Oþ7Gü2×Ãú'>ÿÁ§ÿ®îŠá?á–¾ÿÑ9ð'þ-?øÝðË_ èœøÿŸün»º(„ÿ†ZøcÿDçÀŸø ´ÿãtÃ-|1ÿ¢sàOüZñºîè þkáýŸà‚ÓÿÑÿ µðÇþ‰Ï?ðAiÿÆë»¢€8Oøe¯†?ôN| ÿ‚ Oþ7Gü2×Ãú'>ÿÁ§ÿ®îŠá?á–¾ÿÑ9ð'þ-?øÝðË_ èœøÿŸün»º(„ÿ†ZøcÿDçÀŸø ´ÿãtÃ-|1ÿ¢sàOüZñºîè þkáýŸà‚ÓÿÑÿ µðÇþ‰Ï?ðAiÿÆë»¢€8Oøe¯†?ôN| ÿ‚ Oþ7Gü2×Ãú'>ÿÁ§ÿ®îŠä¼3ðÀ¾ × Ôüà¿ i:•¶ï&îËH·‚x·)VÛ" eʳƒÈ$w®¶Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ª÷¿ñóiÿ]Oþ‹z±UïãæÓþºŸýôbŠ( Š( Š( Š( Š( Š( Š( Š( ¾_ýÁ?²u§Lk]ÿéÅëê ùöCþÉÖ1ý­wÿ§  ßø)·ü’/…ö9ý3jÔQÿ6ÿ’Eð¯þÇ1ÿ¦mZŠúÊŠ( Š( Š( Š( Š( Š( Š( Š( ±´¯i1ø’m}4½8k²ÂÚ{ê"Ù>ÖöË<’,lo1‡w`™Ú‰ÆI­š¯¦dz×Y?ôcQÖáÒÇŸ|Gý¾übð²h_þü9ñFˆš¤úâéú·†¬ïmVþvwžìE,L¾|$Œòãs—bÄäæÕ÷ì£ð»Tñêø«Søoà+Ÿ¥¥­‚êÒè|¶ö³ÅqmœÇ¿Ë†{x%s„xce¢‘ßÑB÷u_Ö–ü´ôwwÖ·üõõ2tÿèZGŒµ?éZ.“kâjÞ ]CTŠÎ4¼¿†!‚9§ ¾DŒÍ6ÅbBùŒn9ä>~Çÿ ~xó\ñWÂ…ÿ<1â WWÕôŸÙÙ_j‚Wó%ż¡Ü`ÄînNO5è´Qÿ ÷‰ë¿õm¾ã/Á^ Ñ~xGMðÿí#KÐ4Ý-,4Ý6Ö;[KPmH¡†04P  µ(¢†î [Dr¿ >hÿ á×Â?kVñ³w¯_¼³oin®_s0¨@åAœ±fn™m‚ȳ±2sRQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@àŸü9§xƒã}Çöõ…•÷“¡ÙyheÙ›‹Üãp8Îä+™ÿ…qáïúèßøÿ@PÑ_-]xÃ66ï5î‹¡C `³»ÚDª€w$ŒEÇ€ü3hŠ×z6…»*){H”c€GRHw ©h¯—¿á\x{þ€:7þEÿÄÔmà? ¥Ò@ú6„&‘K¤fÒ-Ì£1’åÉ÷´õ-ò÷ü+ÐFÿÀ(¿øš?á\x{þ€:7þEÿÄÐÔ4WŒ~Ì-žƒã¯áÚZÙDÖs”‚%Ky—£$(8Ÿjöz(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*½ïü|Ú×Sÿ¢Þ¬U{ßøù´ÿ®§ÿE½X¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯—ÿd0OìiÓÚ×úqzú‚¾_ýÁ?²u§Lk]ÿéÅè7þ mÿ$‹á_ýŽcÿLÚµÁM¿ä‘|+ÿ±Ìé›V¢€>²¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªúgü{7ýu“ÿF5Xªúgü{7ýu“ÿF5X¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ä~2Éo¼ÿ°þ”^×Ëßµ,ž#ø‘ãèôß…ºv©¨Éà#ÖÙÍG¨Ì¯n“ dBê!IITÜ~¼tÏÔ_­îí~0Íu—­ÝÛO£ZD’Ùé—I½'»,¥¢F"}á\çÛn?è â¿ü'¯¿øÍ'}Ý~ð7õ}ÿ¯ëcæÚãâxÿÀúêŸi‡…-¯´»"}zKƒ(–&gFoÝìT""¥ 31ÀãWâ§Ä‰õï‰ãGñ‰>Á>›ãMÖÃÂÓ-„–Òý©œ¡——gÃ+ª,!›Ÿ¢MÜå:Љü#×Üä>×>íߨ~*Î1ŸøG¯³ÿ¢i­$¥ÙÞß4×åožÁvßÖÖÿ‚x×íu¡ñ2]7À>²Õ/ÍìRjº¢éÓAÐA+nwNè˜k“cvHð:×%âψ÷^6ðEŽ­­Akv>ñ-¦§o4I"Åy³Ždt9R ¡;NAVA¯¤þÛqÿ@Oÿá=}ÿÆhûmÇýÖÿ?Ïð<óöˆžÇöƒÓ´{_m?ûHiWºuñ´‰›*I b??i—ËG+3”T<ê?e_Šwßôíj×Å:¸×µ-&X¼ëëI­§Óeó-e‚48rc”pŽA¯O7S““¡ø§>¿ð_ñšQwp¿wCñPÏm?ë©ÿÑoV*½ïü|Ú×Sÿ¢Þ€,QEQEQEQEQEQEQEQEWËÿ²'öN´éík¿ý8½}A_/þÈ`ŸÙ:Ó¦?µ®ÿôâô›ÿ6ÿ’Eð¯þÇ1ÿ¦mZŠ?à¦ßòH¾ÿØæ?ôÍ«Q@YQEQEQEQEQEQEQEQEU}3þ=›þºÉÿ£¬U}3þ=›þºÉÿ£€,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU{ßøù´ÿ®§ÿE½Xª÷¿ñóiÿ]Oþ‹z±EPEPEPEPEPEPEPEP_/þÈ`ŸÙ:Ó¦?µ®ÿôâõõ|¿û!‚dëN˜þÖ»ÿÓ‹ÐoüÛþI¿ûÇþ™µj(ÿ‚›É"øWÿc˜ÿÓ6­E}eEPEPEPEPEPEPEPEP\NãëË›{½ñÛ'P¼p­ÊÇs*~n¸QŸzí«Ë|1þ£Qÿ°¾£ÿ¥³PUÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾OøÖ=±ÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾OøÖ=±ÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾OøÖ=±ÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾OøÖ=±ÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾OøÖ=±ÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾OøÖ=±ÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾OøÖ=±ÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾OøÖ=#d©Ø@8à‘œPÀÙÿ„ÚëþyÛÿß'ühÿ„ÚëþyÛÿß'ükâ?†_hUý´ü[àOŠ_þ\x[áx«S¸µøswgq©Zß\jQÉn’6·"Û4i¥“ç”;ýXÙózgìÍûx{ö›ñn—¥é^ñß…bñV‚þ+ð•þ½gm¯‹ô„’{Û3oq+ÄÚìßÉ»Ky¶]FÞ_£%¦ý¾ÿò—£'²l®ßð?Í}èúCþk¯ùçoÿ|Ÿñ£þk¯ùçoÿ|Ÿñ¯ø›ûfØxã‹ü?ð_‚<{ãýsL²³Ôü@Þ¶´’ Z]Ë,VÓ]››¨ZMæÚå„VË<¡ f1€S%â_ø*¼'àßø[ðçmü=á=nãÃS¸Ó µ´Õõxµ1¥­”³Ü"Èò\«3l·PË4~\g¥ÿ®ß›Iwz-FÓ[ù~7’oÓW¡õWü&×_óÎßþù?ãGü&×_óÎßþù?ã_$ZÁT¼©þÏzÏô xšäxgÄðkšAÕü?o6tmÒåZ[ùõTÓ^&†{wä™ó•q¼:&g…¿à¨Ÿþ'|›à†5|7øŸá-kÄ7:¬)h²éOc§Z3Hò^¢`ûUќƳýÉ€È7eÙ§gÿárNû[•^ûy‰jÒ[ëø;?ún}•ÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾Oø×Ë?²Wüÿá÷íñ/|8²×l&ÕtYnÂcÞ –è¿doۻõöµâ]Ã:FµáÏxRK»í3S»Óo$û-ßœ-î}2òê܇k[”1™D¨Ñ衼E9+®×ù?ëõ؆í{÷·Ïúizé¹ô7ü&×_óÎßþù?ãGü&×_óÎßþù?ã_1|Qÿ‚’x/à·í] |&ø›¥ë:N¡â‹ûm+JÕ¤¿ÒZÖöêå7CY­ùÔJ–ýÙ›ì~R¸åÂüÕ/‚?à¡þñÏÆ/ÂV¾ ø…c§kž!Õ¼%§x¢òÂÙ4[Ý_MkÏ´Ù¡[–¸ÎÝ:ñÖV€BÂ2¾fü "œÒqÙßðµÿ5÷®èr÷nŸK~)µø'÷>Ìúcþk¯ùçoÿ|Ÿñ£þk¯ùçoÿ|Ÿñ¯žj GãU·Ä¿Ãû2YØMáÉc âî¹hˆÖtU*žk†ÉÓd×\mn2wlVóO‡?¶/ÆÿÁ@µÏ‡$øn¶ ìÄ‚ÇÆ"ËPÅû«_„Ú=²µ©cO¶M)´“ìy…˜ÞB¡-R¶ú»u÷wÿßKjËp´\ÞÚ~?×õf}£ÿ µ×üó·ÿ¾OøÑÿ µ×üó·ÿ¾Oø×ÏŸ°ö£ñŸTøy{7í³iacâ]-­ ´ûcÝ£Ø5ê·ì¤®¤ÚŠŽHÚ«´•ÃCÿ‚šxóöµºø7â½7ZðçŠoÞÂK»í*é5E³C,Ì–ÖWÓÞ[(4ˆn­àÞ£æÂ—4¡'ú7åd®õØ™.U4¾ý¨ÿá6ºÿžvÿ÷Éÿ?á6ºÿžvÿ÷ÉÿðOØëöÑÑÿm_Mâ?‡>ñF“ṡ‚ïJÕu94ù-µËiƒ–±ÝÎñ(- ÊÁ2oPñ©ÈïÅø)'‚þ ~ÕÚÂo‰º^³¤ê(¿¶Ò´­ZKý%­on®St1¥šßD©oÝ™¾Çå+Ž\/ÍMÂJj›^óÑ/>Þ½-½ôÜŽeË)ôZ·åßÓ­ö¶»NÿÂmuÿ<íÿï“þ4Âmuÿ<íÿï“þ5ñïÁOÛO[Öu¿'Ç—/©\$ß§HÓôˆ„Ú¶ƒâì-Äwr\Ç2$Æ…™¥Þe„DD•|%ÿ”øU⯃þ7ñSÚkvw~Õ4ÝRÑþ}rnµ)V+ÖòÏP›NQ,°´—q¬EI˜Ä9)&ÿ÷¾Uê綾R潜œeݯšßå£ÕŸfÂmuÿ<íÿï“þ4Âmuÿ<íÿï“þ5À|ø•'Å߇Zˆ.¼?®xZKðû´Í\Û5ݱWeùžÒy pÛw+Å+«+ tô4âìÉMI]ð›]Ï;ûäÿð›]Ï;ûäÿcÑHfÇü&×_óÎßþù?ãGü&×_óÎßþù?ãXôPÇü&×_óÎßþù?ãGü&×_óÎßþù?ãXôPÇü&×_óÎßþù?ãGü&×_óÎßþù?ãXôPÇü&×_óÎßþù?ãGü&×_óÎßþù?ãXôPÇü&×_óÎßþù?ãGü&×_óÎßþù?ãXôPÇü&×_óÎßþù?ãGü&×_óÎßþù?ãXôPÇü&×_óÎßþù?ãU¥ñ½Ü¾'Ð-Z;.öõâ…;€³ÉÇ=sü3T*¯üÏ^ÿ°Œ¿úEu@•EPEPEPEPEPEPEPEP_/þÈ`ŸÙ:Ó¦?µ®ÿôâõõ|¿û!‚dëN˜þÖ»ÿÓ‹ÐoüÛþI¿ûÇþ™µj(ÿ‚›É"øWÿc˜ÿÓ6­E}eEPEPEPEPEPEPEPEP^[áõý…õý-š½J¼·Ãê5û ê?ú[5iQEQEQEQEU4ñŸ-ÿÙc¾³kÅ|‘2™2:¹Îjå~[ü!ø5«ü(ø=ûDüzøKðÇà·‰|uáO|CÔ<;'þÕâóy©_éë&ùUHqåFªÍ#’“¼ùzY¿¹ÅuÓ¯V‘\Å5»’Šù©;ÿ俉ú‘E~uèß¶o¤ð7Ä/Ù¿ãÅ—ÆMÇSð–ñ ãHÓ/¢°¿ÖuŰÔtç:lVöw"sk8ˆ*ÍÛv¼œÆWêßÚ3Åþ9ý™ÿa¿øƒÁ÷×?|yáO_ê677šl{ïn$’2ö–‹‘cýÜaYÖÖÿgïøŸâ-ÇÂßh?¥:Ÿˆ¶X m$M jðE<ó_A,1,‰n¬ãa7X ·–U¥(rÊöæj?zVü*i×Y.®ê)Î-ÿuËîíßì«ôÛ{Ÿñ+ö0µñ§Çi¾!xǾ>ø{­êö6z_ˆ#ðä¶ÚÙË,¶ÑÜ‹Ë9Þ"Ÿi¹A-³A!I˜;P¤>.ý„|âÙïWø}©ê!·Ó¯¼Qwã[}V+˜SQѵYµi5t¹¶ÄcEÜ™dŽE($‚Û¾lýš?mOx÷ö®ð®“¯|PXñ>¿ãOh>+øQýaŸè–K¨ W0·Ð~É¥“qu4–óÿjþét;;¿ø)í%uð§âO†<1ão‹‰ðáþ³á}kU¹ñaƒN2jš•»Z¥¾“Ú”Û¡x®.f1ˆŒÓ@‰”$›±¬åBš’ݦ׬o-ÿíÛ¦›ÖÊ>ö…Å9Éž×ëÞ«^š½5:Ý_þ ókñ?Á¹¼øÓñ;S×ü/¯?ŠôBšº¦°’É’(KþÏh ä ý˜¸gÞ5ÃÿðMÏ øCNð>ñl.| q­¼3ØÜMâ+Mbýoõ+-DMhñÉóÇ/E0 òʤ³‰tßÛÆ¿f/‡úN“ñ&?…Wøá sáß…šÂÆóþ¾µ-œ«6•¶æ.nÂ5µ…·‘`ðΦûÌg;¢Ûí´_Çߌ–> ë~ø™wá½3Áÿ|)à /§‡ôû«9-µ›}.&¹–XÄ’Å&±4±–% €H%C±{qXYS­<:÷—3Mm%MwZó$ÕÞï›}r§6àªÞÖ÷è×3Û×GëÊô>‰ý–?b;Ù6âÒÓÁÿ> ëžÑ´ßì}ÃZ¹ÓÃD´RžTqÍŒWsùIÄsq;ÎK1-\Ïí/ÿØð·í)ñKÅZÞ±ãßx_þ'† ðω´}}5mõëV¸1k«)®"Úo¥ –4pP:°ÈoŸ>2þÙ^5øð×Ä~ ø™ñƒYÒumâ̾ Ó~!jrh†KQáø5•]^öãKžÆØfæHá±/+C… ÎÕ‘iûs|CÕÿf¯ üF×äð¤Þ?Ò¾ |PÔ†·•ÃI{£j:m´ÛÍ$(ëÞRÍ$A!IHŒ¼)å¢&\µ[N¶RZêù ê'ç¦÷ê\)75B*Îw^ZK—媺·nCï/Ú7öxÑi¯…íá]jºh†úÏVÓµ=2TŠÿH¿³¸ŽæÖîݤGO2)¢À‘]Y”ø‡‹ÿa-Æ<3ÿ íñ9¾(hÚ>§i%è¾ÐSYÕ´‹é­žâ&¶þÍòíáW³VkH`‘rÃÌ%³]ì¯â_øsö¤øƒà‹þ>¾ø…aiámÅ–wÚU•„út·÷¬ÚÄ,âZÙ³ahÄ‚IW{†–Nù¯â]ç‰g߉ŸµWįx®}>ò‰þðÞ¥­ÜhÚdãÁÚ=Ö›áÑuª‰^Û~,­nn ‰í)–XßËÙ^~ÍõOÒòj÷µ¯t¤öåV—»ª)¹J7Žé/¹®e÷'t·Mé©ôNµÿ²ð&µáÝ;@}ÆpxU>Zü3ÖtH®-§‰´‹Hn#´lmŒ±M»žD–ÒKs½†íÊŽ«Áß±kiz¯„õŠ?~%üDÔ¼¯iw:üš\f)›y§,l-Ñ£òµ ܾkH´…WaùÃáçíKñ#â>ŸáŸ|øÁoâYøÇ?ƒt‰-¡Ø^¿‰4TðÍΩ3ÆmãŠÊyb½†{Eº·bͨܒ2Ê$‡ã¿íÓñö\øÍâÿkòÍâŸ| k/ø£W“I†9o¼5­µ¤ˆ<¥Tkz5«ßݨÌZY1Aºµ$§ÍRZË[»ë}½´²nM»hº&{9+EvïÓZi|ùTRóü¾Ðø5ð;Fø!ákÝ#Ãyyo}®ê¾ w¾d’D¸Ôoç¿Tª(²Üº Á!B‚X‚ÇÇ~ÿÁ2<5ð‡â–‘â+Ç?µ/Ã^"Ö×u+«ÍÁ>ð9‡Q½·wK :Kß±K"Ç4­yp¬Ü#˜Ô")VÏ?ñ7þ Ñ¢üMø½«xžoüGÑ´¿x‹Eñn­á:æÅtKTÒ¤²kk‰ ¶orM6Î7‰'XØG»hœ|sàŒF·ñGã»ðçâî‘ûE@u/„lÞ&¿³Ñ¯í£–_\¬–±Åak²¼ p&ö4ÐÉ23|HWÙ<û@|_‹âGƒ¼[u㻯é-ø£ã/6ao`–ºhñÙÉÒD.¾Õ»F·Bí)ˆ¤Œ [‡˜t¬§N^Ù»µ­üíí×Y+y«é¡IJ´\ÖÏMûE¿¹(÷¿KnJÕ¿à”¾ñï#|;ñÞ¥ãjžÔ¦ðö‰-µíä-âÙBÐÅ¢ÚÏ}"ÙÀe·1ý™Ùã†ÉxÖ•ҽݒMߦ›/+÷z-Û7TÔ䣿*ù½þKïwØûz?iÒëO¦ÅdÚŒiæ=¨Lê¿Þ)À{â¾jð?üSÂüy¥ëßð²~ ®‘¢øV×|?¡Þ^iéÚ>£¬‹È® 2%’\Í#>©8ˆÏ<®¤¢©Æåo†m¼¤Éà¹àVã½ZöÒïWÕ|¨hŸ &Ômžx-§ŸC×àñd6ïïõ–ÒK—’ý’OµOÑÆ¢@Þ©û\~Ñ×þ?ý§àð‡ÆŠ‘øgYð÷Æi¾øT‘iз‰4ñy¤^6®í,/}8Ivë%¼Ñ@¢ÈDêÎ$ÝÑF‹©Z•+ÙÍÅ?%)F/µÚæÛ¥¯t¯lNZs“µ¢ÞÍ=b›ßù_I_–Z­t¿Ø¿²çì/£~Ì_‘ñçüïáçÄk:‰u/5޹¦ø¿K¸ò¯ GXüM©E¨ß2Ÿ#†ŠxCœ…L‰¤æ™áßø'¾™§øÉ¡øÇñFûÅ~,·ÒôýKÄ®„×vðiís$Éh4±d!+}2´OlÊÊÁ€K·Æÿ´§üâ‘àø“Á;±ð‡"ø[á¿_øOW½Ó,4ÏK}³Ok.s¨_È ‘Ò›8áÌE¥fõã_Šþ5»ý¤.ð–©‹a¼Ö¿±µ+ë_µc‹ìË8·¶ŠW2ùÚ€ƒâÙ×ãv¯ðŸöoøEâ~+ÿ…ŸãŸ‡?|]Òæ¶µžO ê–‘øP>“=­”qJZÝ×sA)7 ¥þeÆ1\Ò”{+ü¹dôÚÖåK¢Wé¢uMÝu»O®·ÖýîïÞú³õ“Pñ†‘¤ÜM«ªiÖÒÛ˜©-Ê#E繎Àœ1ÁDÏÞ`@É«>³gâ-*ÞÿÃ÷v×Ö7q‰`¸·•eŠd<†GRCê ~zþÆþðíûI|l²µøß{ñÓH´±øuªIâÛ)´€~Ù§jšž¤–éÖ±Ûˆ–Hbf ¡nY ›•JýCñ1tø'ïü»Y‹Á’ø›ûá/‚$†ÊkmîõXà³´Ú’"J¾KÊ«oÞ/—K ¹ëÁPNîïGòqOõ°©%Y¨ÃvíýZÿçóÐ÷*+ò÷á¿ü'âMçÁŒ¶Òürøc¨ÛxbóÃ3hÞ?»ñ>•sk ®£q1©pÅAeÈŒÒ× Q@{k ‰UTt` uzó_Á_Ø×Á|uâÿÂ[ªx‚þÐéÿÚ$ñn«â)ìíL‚F¶µmFæcm:£2E´9DÝ‹·Ôš5gVeRˤŽGÒ½ ŠwvK¢ù›“Ýïæy÷–¾fý£v1œsJYŠ€ rH~µè4RÏè¯@¢€<Âß²—Ã|R»ñÇ‚¾xHñûÍ%ιe¡Û[ê70Q3½Â vi®æ'-´g8ÞùkæoÚ»ñ·v9ǦkШ¡h’[ z»³ÏDj®X*†n Ç&^EyñK†* .@8äf–½ŠóúE@™ØÉÉÀêkÐh =Ž5…Īª:0:½ŠóÕ‰-ŠªÚôÅ*¨E@pí^ƒEyáa‘Ý»§_­>½Šóú+Ð( ?¢½Šóú+Ð( ?¢½Šóú«ÿ3×…?ì#/þ‘]W¥Q@Q@Q@Q@Q@Q@Q@Q@Q@|Ÿû7êÑÛGvõ…| ¦_x—áSZ]6…ªêšV¤žu¥Æ\qžcdL°`}¹ë@dëºì'FO™{w¢¼gá0ñoÅM×þ*Òu @µà Åò®nÜŒ±Ÿ™Tg$°0;Ñ@KÑEp¿ð²Êˆ¸x5¸bÙZ`žsÛ§::8daØ©¢£ø;¥ø?á÷Âä|#ðÌ~ÓÆo±Øxn]2ß{¹¶Qw œdâŠöóúô óúlÎc‰˜rT^Cðëö‘¿×¡¶MWM]vãQµ‚æØhpìÞ7’hÜJtA,$çÌA´õ÷PêCrÁ®Tø[¢êÚ™¦Íos ¶Œª–Mmy5¼ÖÊËÂ͉0P•9nG\Ò×_ë¿üèqZ·íW¥Ýxg^¼ð=•ÍüÚ>›ý ‚i!ˆJ¥#qû¦”Lƒ¸Æí` 8Þ!øÝ¬éÿþ×=ŽmçÇ5¬SÏ$·s´kt»UCòík€CpL>øcd‘Ëa<°=›éëo%õÃÁª®ÄÒ‹*ª2OjÌÿ´¨Ø^[]Lò PÓI}pÓ1¶vx É»r³±ÝœœòN>©¯/ø?€+uþ¶·ê;À?¬>$Au6üpÙ2Å;ÜÃäˆæÆ^ ÎøøÆÐN$q~ý§-¼Oª÷°Cu"ÝĺU¶›"Ë5令!÷8T”˜¤f T*•'ÛhŸ ô i—Ö^°û®¥ÛÜÇ Ò*Ȫ…7pÜ9Sƒ öXàboà߆õõµûnš"kÞÚKiä¶’WG]­)Z$!³‘‚Ã|¿«ÿÀOëúõþ­ÍÙ~Ðß`ðØ»ñ6‰«=Àþй¸ŠÒ8Øm­nšiwM‚ÊäF_'vÐEK®þжš)6©aªiÆÚòk[Ë9íR[–Ùf×K°Ç1A”ØAËwRò:_„´ÑžÂ+Ú[[‹']M#¼Wy“vrij’K»ÐŠv½ð›Ãþ&¸–]sOóäšspçÏ‘s!ƒìäü¬?å—ËŽúóGOë¿ù~!×Ëþù“ø/ÇøÒ-@%î›w¥Üý–æÖóËó#sH¼Æî¤‘ zàò++á§‹õ}w_×tïK¤ß ŸlÓ`’(DÌÉnC»åãÂCË@ ©WGcá«-6ëRšÆº¼¢{¶6eqD_—äËŽ™ë“X¾ø9 øGB}3@‹R‡Ov„ ªÝÈ‘”0yaå>_ÍÉÛÝ"…çÛþ:¼?âýb_Š·Ú­.‘{k£Ý“e ‰&™@†)Ù•ÚHË0ÀB<¶ùH Ö6·ñC^·øƒ{¥Bú>–¢³iñj:}Љ0†WK°ÂL„¯”c±¹ñÕxWá~à­^ò÷ÃqßÁ6¡,“Ü#j72Ã$’0g%ä1†$˜( p8âšÿ ôi|H5Y£¿’án>Ô"}FáíVlq ¶2yA‡PBðyëÍ ¥ÿ­ËOÒã¾öþ¿¯ëφֿh cPðýµßÃí6ÆâçìRÜAtÌ<»»«¤-·6•Ûrœà„íœö? þ%Gñ>ÓT¼°Tv×i ¹Áµ­ ”‰<:¼®„vÛŽ Õ›…z—úiúrDºž¤º½ÈY÷·Jé"É÷¸ÃƧhÂðxäæÿ‡<¦øEµáËD´þÔ»{û „‘,î3àž Ú2~¤ÓO{ÿ[Á_w™6þ¿¯ë#J±<âIüA{®Çz±*éš“YŰYQ>[$äæCÓ§·Y~ðÊøvçU•&iN«z׬ ãË&8ÓhõÿV}é-Ýö·ãuú\ooŸèÿà•ÇÙüTò<u=ZÎk‹™5k.ÚÖÍA’åÒîX# ½‚‚V=ijcÀ®Â¹+‚¹ûPxµP·SµÑEÕï8¦i|ã,H%Û ù™mÈŒœpH ÌûÚLÔîR;+[uŽê+ é<¸Bé—NmÖ)³.Y¼ÀA1 9ÁY?h]Ú»BËV¶Óà´¸½†öHãò¯£‚D‰Ì@H\|ò Õ3œŽ9ªš‡ìå§Ëâ­.ïE¸þϰÓå†âXÎyïeŠfZYZm²#ZHÝùl8ÝOÐÿg› ?ê÷ºôÑ^ØêP\ZG§¤rÇ1O(–A‡™Àmȧ1†rÛrr®þ–Ÿˆ¿àÁ3u¯Ú†Öë½ǂ4­FïUÓm.'–öyb³¢‘$²$û2]x‰ÝŽc*@ì¾%üO²ø[¡C®C-ÂM'–±Ã4ÈÇk1*'–0Ø xR[Û®(j?ü5¬[µhµ‹¯’H]åÖ¯^I£“nè¤Í¹ã;ìbT99ØñÃÝ/Ç‘[/ˆ£º&б‰í¯&µ‘C.Ö]ðº¶ÖÎ áÓq«_]ŒŸ|nÒ~ xªãJðüW^e¼ pe•¡r²#ŒBdó°D‹‡1„88cTüIûEh>ñuæ¬GyçYÆÍæBÐN²º¢¿–#ILªä0:('¡ägo@øS¢xgY‚ÿJ‚ïÏ´€Û[ ¯§ž+XÈPDQÈå#ÈEÉP ǹÍ=Wà_†5ÍNòïV±¸ïŒ­,mp Ý"lwXD›Êÿ¨lóœóMÚúvA/3'Nøát³ßǬxwXû`Õ›O´Óáæä³ŠáŒ­çù_Ääý6Œg4Öý¡¬¯tˆî­¬µ=5d}>hÍåª?Ú­®æ1£ Žo—;\|äà”#ƒÒh? ôO º>otó%ËÞy×7³ÜÊÓ ÃÉ‹K¸[«Uó¤o*AÙÃd±Ïî¾\Žýy¦ºßåýz_ð m§õýiøœÇÄ/Z—…¯|km¥i;¿áÑ¢Ô »”«BîâS¶EÁòð0?…³´¶—…þ-¿Œ|ic¤é÷Pé67wÞ\"(½hf‚,ÂBÁ?xùÞŠOÊW"®Ü|ðíÜSGsitñÜéãK ýÁà± ó>r7¾²ÃqÁ©ü5ð£Cð†½&¥ [\Eté,jöyb…eI"ŹHÃ:†!sIhÕüÿ[~ƒvkOëoø'GX“ø’xþ#Ûi ±}šm6kÆl0:KqŒH{g s[u—/†V_Á¬™˜<6RY¶ðCÈ»>ÞX÷¡|K¶¿“·ãa=ŸËó_¡©\F¹âÏë^8Õ4‡Ø Ö§“QŽY>Ó,»ÊD¾[¯–¡S&Bï )Á®Þ¹ï|-Ѽaª}·WŠö;¦„[É%¥ýÅ™ž I /“"ùŠ 6gŽ:œFrºíom£ÝMãû Í9­¡½ºYÕÈ»ŽÚçÉaó îâ8PK8éoÿ´6ŸâÙÅ¿†t}nþö6asonm¤6¨»?xÒ ü·Sæ.nìpÃRíÇÂ_ÝÙ¥½Ö›Gosj¨Ò9;‰I‡Þþ'Elõ\|¤Uqð[Bó ‘ÿ¶^âܶۆ֯vV*Lo)›{Ç”Så±+‘œrr-Õöþ¿àÓÏúÿƒýhSøEñp|G–ÒÂ^óN¹º†îKtŽ¾Ë™#Š6fbL­+3€rvîPyß þÑ·-k©^x³HÔÚnçT´¶…M…•¼ï M3›–ó9CŠ(ûQ€ {Ï|5Ñ<)ªßÙ}’åÖDwI¤ýè’V™·‚Ø|;¹RÀíÞÁp CPøáNÞn,&X¡3‚±^O™g”Ë,ríqæÆÎKß+Ûâ’éøÿ_Ö—õ)Û_Ãúþ¿Bß…>#[ø»K¾¿²°Ô­ìlšEYçDUºòÙÑÌ@9bŒòÁAÈÆyÆ}ïÆ½6ÚÆ9mlµK¹&·°¸ŠcO2Axî¨ÜáAÌm»$Ç&º]'Ãöz•ö-.Ž×tå’XìÎÿxž¬Ìä&ýžt4±è'Q±GšÍäí™dò­¤/Q»Kº˜ …qš}~ïÏ_À]<õÿ€Pñí ¶ ¾ºð¶ª\jÖÖWw2[IXÓ»´L×Í TH¤b6v` PqQüNý¦,|6³aac=櫦ZIalœžæŸ©| ðα©Þ]jv75ø›Î‰¯®>ÎL±ùr2Â$òÕ™ •AïœóGüø׿5¿õ±KQøÿ¤èþ-²Ñ5{=BßPºû:Í=¹6o;m]DŜ穈HXÍwUÎEð§GƒVµ¾„j‰wj‘Æd]Rè‘%>щ?Ò1“Ì›¸8éÅttbxÄ“é)ðõ²ÄÑj×E1`K(HA´ƒ€rƒ¨ž¶÷F„¥˜¬†` ]»pTñŒ‘¡á¯ÚFxÞ;EѯÚÑlîg»›Í¶slñŠ9™v̹(Xå”v}½F«ðÃzݲC©é‰*F×,?{ 'í Ï2’%YضÓÀ`¤UH,~h¶ö—H5I®¬¼Ñ×­ÔîË @ñ¹’RdC塨ÙPT3Í-¯ŸüévS¼øÙ¦ZÙG46š¥ËMoas0¦IãºB vcmÙ8r{&™ñž×PñTUÆ‘­Y´÷FÃí¬>JÜ‹´NÙKƒó+FêŸÃß<9átÛ¤ÙÝcu³/Ÿqqå‹vfSÌ‘¶ªl(ÂóÐÖ¡ð&’Ú„wfÓý"+ã©«ùÅÁ„Â_Çú²W;ã<ÕiwÛþþáæK½¼ÿáÿà~'=ªüdÿ„ƾ$°Öt»ÏìíO¶¼û\;ÊÒ™Œ&ýı@«…ê8K_¶ø³eÿƱ©kzŽ&…'“{g2#ÜG!DuP"wG.²Ç·kópAÞ»ðËEñ.§yw­ZÉ,º…˜°ºæTŽâX¨xÕ‚–Rïµñ¹wIeðÇE²ðÍþÖ²ÜÙj…šóíW2ÜËrÅB–ydbä…UîÈ ¸ÆOõøÿ‘N×þ»™Ìxãµ×…µdmkÃZݽ„ZuÍõÜL¶íqj°¼@ÊYg1˜ö»)f$p8"§ñ/í¡x[Ä×Ú^¡ ì²ØÀó—·{y„»"”²™¶ž<Ä@qÁägi>è_Ù×6·p^ÞGyi5ŒÍw¨\\K$2íóÉ$…°v/9ÈǪן<3¨j—w¶W2=ÉvxÍýÀ€3¦Çe„I±Y—‚ÁA>´ÖÉ??¾î߀ºßúéÿ­Çiw[Ç¢k­¬%ãÙ¶–ßí!–œ¹o;Ê åȇ>gV⩟Ú_ÿںMª¥é:¬—É…~Ì.ÕC v'#>Z¸PrÄjïÄO‚ö¾0¶™´)aÓ5 «Ñ{5Û,ò9 @vysÆÉ˜Õ€ÛHelš·¢|Ñt!¥=˜ÔãIµ·´Yb¾šµ$ùñÄê“cŸ¾¤rGN(^~_–¿ˆÁüôü Ëñ_øÖÓNðu°Õ¬.´»«ã}ˆc…áx× ‚Tyƒ8å—Ås´¿Ú]øRÎçZ±½Ò¯öé’Î’Ú,ÂxîäØŽbÀYÜw.(Ýs­ø#Mñµg¨jqLo,c–¤ŠæHs›w£„`NÅ;X•sT.þøvú$K<•ŠKtÛq*•KWg€?#3õ9ç4•Òû¿7ÂÈnÍÿ^_ðJ>øñ x³ÃQj¯8Ómg¸°ý¦âi\¨`?s,NÜbr¢³¼1ñâm_Ö×7ÞÕßP½¿»³¶³µkvyÖÞI¤¦ ¡D`6æ\±ÂîÖxKÀºw‚Rëû .Œ—Ò n&¹»šêi˜(QºI˜€ªÀ¬ËŸ‚Þ¹¶h„𩼒ý •Ì/²nó L’¾÷܈BÇ"œ¿»ýmÿKÏúßþ¼7y¦ÙÝi׿iŠé­CˆÀÝj·DO2’ )i¸,21’3ÓöÑç{]?Y—NãŽkõŠ1&YZ8 ÌØHB²•VÂÈŒÛAã ñ_ÃÛ_|5»ðÆåéö_Ùè âv„©8È^ìpyÅAsðo×Z•­Ô– ­g$Is*[ºÂs™ °ŽCåK©#Œt¥ä Ì«yñ³Lµ²Žhm5K–šÞÂæ8a…L’ Çt…@,ìÆÛ²p8äö¿âˆCÃvzhþÊÕ.õ-XŸˆÎ»S{ïf‘c]ƒ‚wà’ÎEVð÷ÁOx]6é6wXÝlËçßÜ\ybÝ™ Tó$mª…› 0¼ô5gÄ ô_]4úÄW¿hiÅÀ–Bâ #q”v4r)E)ò•\êA<Óž©òü½4ÿƒøÑ«œÖ…ûB[Ÿi:ý…ô=„úݬh-,¦ºUòЇ“yÜÌÊhe,@9©´ßÚÏP–ÛÌðÿ‰- ¸ræŽßdQ]¿—¬bÛYò0eÁ, sZ¯ð?Ã/-› •,`‚Ú8–òu…Òõ>laöÊcê¬áˆ<ç Uñð×DXke„Ú[çIþ®ÖC$ïsÔ÷ȧ¥Ûé}=ÑXäuOÚWIMbëO²Y¡¸±½†ˆ.ãå`mžLä¡ÜÀ~ók.A(pVº?‡¿m~"M4VÚ~§¦Ë­½ò%êÆ­5¼ûü¹ËvÀ&7l0Ç#š«À ÇpÒ5…Ì™utI5 —Ž L&$i ƾb«mPÆ8­Døg¢Ä˜‚ÒH³kme˜îeFòmœ¼)ÙùY›ž­œ6G£ðûÛÿ_ð?Ëwúþµüi ›mEÔõý&M:ÎóV¿°¸ «4’¤ s³ÈÈ~rð"élq†®Ïá¿o|g6¼5­:m-´ÍDZGm6Ã2'Ùà“÷†9 &V «tÛžsP_|ðƧg-¾£§Ë=¼·3ÝùOy9Ž)gWYZ5߈÷ d8\͸pk_Â> Óüks‡Öëý2´Ï%ÍÜ·RÍ&ÅMÍ$¬Ì~TA×P´ß·ã§üÊÏoësZŠ( AEPEPEPEPEPEPEPEPEPÇ‚¿ä+'ýr?ÍjOøGI¹ð¦—%Η§I$–‘33[!f%$’95‚¿ä+'ýr?ÍkÄ_ð”êþ Ð4†ñ½„wöoµ ñÓâX×)o¶^áó„fZ`³@G_øH4M[â„~ð†¤ß¥ƒ0Ö¯LQ¤:{™ã·C´ù· v1Œ}ÈòÌA(®[á/Â]cÞ0ðÝæ±áÄ´±µ[—µµ{ô’/ ÆÈÀ»Ìך•ÃÉ™g9EF•VBI3”ÿÙpostfixadmin-3.0.2/DOCUMENTS/screenshots/postfixadmin-user-vacation.jpg0000664000175000017500000026546010676263533025101 0ustar daviddavidÿØÿàJFIFÿíPhotoshop 3.08BIMÿâøICC_PROFILEèapplmntrRGB XYZ × :acspAPPLöÖÓ-applrXYZ,gXYZ@bXYZTwtpthchad|,rTRC¨gTRC¸bTRCÈvcgtØndinì>desc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀüú"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔj£öðœž)ÐüM¨Þé7šÕÞ‰á­_Ã7^!³¸´’f6v·É-k2ÂЬR;þèR8 ^+y_ׯžú¥»^z Fò²óým×Ñ7²~GØíñÕuû­(ê2ÿhÙZ%ôöàæHàvuYô-€ºkø9ûF_|]ÑôKþhúoˆb7ZeÍÇ“,s[ì’Êbvò7†]ªüœûò{ÿ„:&»ûJM©üIøy1¹ñW‚m­£˜iM{omx©t—PKrˆV6ò·9Q"€ ž•Sö~ø oðÜ|Ô4ß ^iƒÃ â)#ÓÞ78>[ ;Ëù€+Œçp敬›}?ÎKô_R/v’ëgø'ú¿»¦§Ô¿Ú—óÖ‹ÿ4ïß5_|@¼¾ƒIÑâNÈ¡²ÁUQxË32€3Ô×γ׀YT¢ÚJrn;io›†þŠOî}‰~ì]÷I¿[)mëe÷£ìA«Nq‰®¹éÏZ¡¡øÎ}r}A jÓû>èÚ–¹„Æ·Uo2"~üg~êõ|§ì¿má&Õµ/ø_Z¶¿Ðþ$ißðˆ’ãf™¦5Å“\›(³¶+vÞ ¬7n$ ÛÐx¿áf«ã)µ];[Ó|MýŸ¨|S†êCn'žÃì1H˜e„²²£9¥ÍgÝ/ÅÓü¹ÝÿÂÂ~ííÒÿ;)ÿò?‰ôØÕnâk£Ký©qÿ=nëÇ?e?ÉðÖãâg¥_èº ¿Š¥}×ÈhmÒÙ­-X›e#Y”Ì~O—vþù®¢ãÃ^;›‹_èÑè¿kY“xvFœ[î¢ûGÛÞFà$òð2ÓŒù|ÒzOð¿à7¥ü›_qÝVàfº£ûRàÿË[ªñ_Ú×ÃÏ­Üø&_húψ¼e«I'ˆôÛ;9/Zt6ò-»Ëkg¸‰'1³F¹Úäa yž‹ðb÷Æðæ“©øÄÐxëâ,·zv“qð½†ýpMwÛÛµÆüC&IU ¨m-¯4¿[ú&6’W}›üý-óGÖßÚ³œbk®zsGö­Àë5×5ñwÇßi?,®»»º—I‹É¼wñ¶Ä€+É ³Š7r‰Ké<_ð MJÿÆÞ,m Ä7^)·ø§M¢Ü2ÎÒZÙùÚpšKD葲} Hè0Ê„1!Rž«m8¯ý»n–a4ãýzÿ—â™õoö­Æ×]Qý«>qç]gÓ5ñOÆ 6®kw_<âïÞøûO–ÃÅ ŠmaÓRµû<1Ü(LFm•IÞK•#2 =ᇈíkKÍOâ%νeª§‹Mî›}gá »ç¾ÒÜlŠÕµhä0Áj#b¯ Æ›]wüĆ%?ÞrùÿöºzëªòaRÐR×oø:ú;oæ±?µ.?ç­Ý'ö´øÏu\×ϵ‹-ÛÇPé×vqÚËíüQùÈÏn·™,.àPåÓ8â¼êãÂÒè~×íü+ðÿPo†º÷‹ m7MÕ«ñ_Å¡á?ø_E»MNiüUs=´FWd+y'%òAÁXÈ’;s]ö¬äñ5×õògìéᯄþÙjz7‰¬®ü+¯ëÖ×+{¦Knº|MçÙ¾ðeì–R¬è8EbWû.|5×»´MNà•o´]êí<_¸es¦l¯ÂŒ¨u$©¦û+úèßü?k”£v—¿ÃijÎN×Yô¿Ú—óÖî¾+ýž¼±kðþ÷àç†|e¦êŸðˆÜjz…µÍºjÆ[X#içùnØÌQã(̱"6 -lü2¾×|c¯ü?‚ ø÷N‹Ã õ "úçQÒ'´ˆß´v+ä'˜fÃckm­¶«/eηåü~-¿ð¿íåóΟ•ô‡Ãþmü¾ï®¿µn ÿ]u\÷¾-‡òè }§uÿ ­“„®"yØ;î#åYé“Èâ¾[ñÂ?ü,ýŸþ ÁâŸx’vÖu9¼Km7WZ¦£'öUÐtùÒ„$†‹Õ.Ѷ¶>ü9Ô,4»ðo‡¼K¥xIþ&éhzeÍœÑI¦éâÔ¤’ùóÛ@×gT`›D€áwU(rÔqÝ)%øÅ?ÂNÞ…ÿwÍÕÅ¿ÂVüc¯›Hú·ûV|ãκÏÖƒªÎZk >µñÿìñðÏ]пhÈï¾%¾»eâ˜5­Q®ç·ð…æÝjÖ_8Ä.5‘3ÛÉnìílªch’0=oljcøâŸ‡¾ øà¿ê¿ãMJ-OE—Išæ[{Íñ¥¬÷zt[žXñûNÉùˆØ£¤_ÃúÛ×B­ïIvþ¿àúj¯±ô™ÕgfºçÞ—ûRãþzÝ×ɼ¢Ýx¯S—Æžñ~± ÝxRÆßÀVÖZÔ‡D•V_2:uÎæµ>l†,*(Ü<¶®ïÇÐø¯_ý”µÏkúWˆõ?Ÿ‡û®oV֗ׯÄðG88yüÄ$®§<Óz&ßOø?•µõ@•Ú_×Oóüí6ñãø#Áº¾µ{ý¡q‘e5ì‘DW|‹*»ˆ!p2@©|1ã4éšå׉/ôËW±×ÚA§ =#E[NEœ±9bñ9Ý);÷61ÁÝ´þ_|×â’~Kåu-kç÷Aþk×ðúûRãþzÝÑý©qÿ=nê¿þQÿÀ±ý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nê+ß¶›g-Æ£w4ð!’Ydp©’ÌÇ€’iŸø^yûVxRÿÆß5í;ö÷·sËöy^Þ0 ÜÃÌRMƒÔ¼I"ßv;Ð#öÛðLÜéú—Šï¢?v{/ j—PH=RX­Y{©"†ý¶ü:†¥â»‡Þž÷Ã¥¬W–[UEä\ׄÿh…VµƒPø§áýh£ Ö7—±ZOmÇÝx¥*ÊG¡þÐÿ õ]çüSðþ·4‘•[;è®ç¹Ïð¤Q–w'Ð@ï¢ø­® †ëN¸’êÞáH¤F’) ¤pAŠé#ñ|5óǯP\ùÓE$q6õB’ºcw|mä÷9éZTQ«ôãR4šôcŒ”’hóeŽÙWbü1ñзÿŸoí[³õÏú¯í-Ÿ†1Û¥t|MÔí¡H­¾xÎ(£Pˆ‰q¤ª¢€ØÕÔÑZ âuÿM☢O|4ñ•ÏÛâcw¥«Ä}QÖü2ç8#8æ«èúÁЯ–êËá·Ž^í¢Ü\j:uĨP­& Åz‘Æ8ã¥wÕCWÕßK¹„,FX™Y¤Û÷Ô£ wûÝ)6’»¡ÿ SVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕÑÚ^En“YȲÆã*Êr ILcþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“«§¢€9øZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¬¯Šÿ-~êöÚ&ƒhu¯_EçÇb³’Þ•óîe ùQ–F3ÁU¶¶Þx|Eñðc)›Âg"×ì7#O?Ïý|¯Ãµ{˜NÅã)*É(ÅíÌíE«·›²ó>g0âÌ_]áí)Î?*º«m+ÿu7%ÕjŽÛþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“«ÌuÛ2k gBÑdð½í®µ¬Yi÷Í+‰,- žê(±N1ç2©…aµ‹ª€û­rcòœVV¡õ˜ró^Ú§·]Ó·}Ö‡vUŸ`³·Q`çÍÉkèÕ¹®ÒÕ-Uµ][¥ÌÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuixƒÄƒLqoc²Kǰßv%þóãñÀêO°$gÿoj{7}£NÿÀWÿãµæ9${‘¥)+ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+JÿäêÒðÿ‰¦æÞø$wˆ7a~ì«ýäÏá‘Ôb զȔ\]™ÌÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òu]ø‡ñEøQà½GÄ_õ }/GÒ¡3ÜÜÌØTQجÄà$$×çÔÿðXïŠw$i tƒð=TX™$Iÿá ’ÔŒ}´/”¶HO,ö]ÿ0c\M:-)3§ƒ«‰MÁh¿«zŸ|ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuxßüËöñÿ†çðïŠ/Ã×zxrîr'{rf#3‚‡«£Ž2}ÛÇ7÷ÚW‚u‹¯ EÔ­¬g–ÐÝ#<eŠyФ1MÀd Áj¨W§‰‚©IÞ/¨cpU²êÒÃâ#Ë5k§æ®¿fÿÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òudjþø¿á¯ É«x«Å¿ôÝ>Þ>{›.ú( @2Y®ðÍr ~,ø‡ã®±q§üøÃûàšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ  ¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ  ¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ Z èW~:&»ø7â)µÁr/Ô’éNÂuP‹0S´HTÆàæºÿøZš·ýÿàV•ÿÉÕü*Ÿÿô0|*ÿÁ5ÿÿ%Qÿ §ãý  ¿ðMÿÉTt°u¹W^ñT¾'{ñÃ/^6™t—Ö†Yô–û<è,‰þÃÌ3îkCþ¦­ÿDÿÆßø¥òuCÿ §ãý  ¿ðMÿÉT©øßÿC¯ü_ÿòUA¾¤ßðµ5oú'þ6ÿÀ­+ÿ“ª;߉Ž£g-½÷ÃÏKèc‘çJ!ԌӺi¿ðª~7ÿÐÁð«ÿ×ÿü•Gü*Ÿÿô0|*ÿÁ5ÿÿ%Ri5f ÛTG¡øâïÃ:-ž›áÿ†þ0³°ÓàKkh"¸ÒV8#E ¨ _píV¿ájjßôOümÿZWÿ'T?ðª~7ÿÐÁð«ÿ×ÿü•Gü*Ÿÿô0|*ÿÁ5ÿÿ%U6Û»¾¯âùõû› µ¯†ž/º—J¸û]›É>’ÆÚm˜ŸéÜ6ÉsèÆ¯ÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ¤ßðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_üPÿ©øßÿC¯ü_ÿòUðª~7ÿÐÁð«ÿ×ÿü•@ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuCÿ §ãý  ¿ðMÿÉT©øßÿC¯ü_ÿòUMÿ SVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕü*Ÿÿô0|*ÿÁ5ÿÿ%Qÿ §ãý  ¿ðMÿÉT7ü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'T?ðª~7ÿÐÁð«ÿ×ÿü•Sx1<`‘ê6®¼7.§¦Þ5»Ë§ZNJ»Ô…’RÊq&'¦{àðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_ü[_fÕ;ÜXà;ÿñuÅÖ¡¦)’ö8.¡^XÀ¥]®ÒN@?ðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_ü]%µÊ]À’Û0x䕇B*¶½®ÚøgHžûZ”Cmn»±“è’IÀu&€1?ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¹?|Qñ~k¤ÝÃaaáË?_gik{¥ßk·óy\m¶#r~êÚwäœ+.O‰ž<ˆ¨–úÉKýÜü2ñ ÝÆxçÓŸ¥EZ° Ò«%««éuv®¯ººjýÓ]z˜Ê[J‘Oͤzü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'WáøÿÆÞ1Oé:ç…íµ‰l濊ÛRðN³¦´ðDñG+Æn¦Œ8F¸€¤‘æ/­v_ð¬þ1Ðgáïþ ®ÿù2ŠuaU^Myjk ‘«8;§Õjƒþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ª”¿ ¾9y­äë_ ¶dí·yœ{ÿ§R²øéÿA¯†?ø#½ÿäê²Ëßðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_üTáY|tÿ ×ÃüÞÿòuð¬¾:Ðkáþïù:€/ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuQÿ…eñÓþƒ_ ðG{ÿÉÔ²øéÿA¯†?ø#½ÿäê½ÿ SVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕGþ—ÇOú |1ÿÁïÿ'Qÿ Ëã§ý¾ÿàŽ÷ÿ“¨÷ü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'UøV_?è5ðÇÿw¿üGü+/ŽŸôøcÿ‚;ßþN  ßðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_üTáY|tÿ ×ÃüÞÿòuð¬¾:Ðkáþïù:€/ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuQÿ…eñÓþƒ_ ðG{ÿÉÔûo†_<õû^µðÐÇßf‡xë}@ÿájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¹‰¾ ñ‡ÁM> ¿Œ¿þ xJÒéÌpÍ­E%„s0ÆUZkõ FGÖ´|%mñ#Æ^µ×| â…þ.ÑnÔÉúLSnÔf;…º•È# Öÿ…©«Ñ?ñ·þi_üGü-=[þ‰ÿ¿ð+JÿäêŸÂ>7—Z¾ŸLñ>Ÿ6‹®Y®é¬åmá—8߀7¦xÎÀ®‚€9AñPóN<_Ïý6Ò?ù:üFÔ3ðãÅù¤qÿ“ÕÓÜßÁg4ÝÍR]9Žw em¥¶¨?xíV8”žÕKÂ^/Ó|wáø5_ÝÅ}§Ü–Ov¾Ö*ØÈÏ ¤~•ÿ OVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕÓÑ@ŸÆïˆ—Ÿ ¾êZÝksÙ&ã 8ÄKÞYÞ1§VرÛ#ç‡ÿ"ÖïŸXñ÷Ú5{äK–CU޹ êu<’Çæ¯¬ä‘bRÒ°P;“_ ~Ôÿ³·Ã»Û¯|!xÿ±§v›RÒaå´÷'-qlƒ¬dä¼CîòÉÆV¾/Œ0ìE(×ÂIµ \;ù®ívû5Ué5^Án»{ÏÏ·¥ÎƒÄŸl´ÛyŸK¾ÔüÉå1ÛjwQF]˜³,W,I8OJîÿd_j¾7øeâ[©g“T¾³Õå†Ùo/$)Ÿ²Ûȱ™X;"nó†ÆIÁ<$ø û,xwãWà {Äž7ñE½åü÷A °º³[tD¹–4ØÙ›,rI¯¢~üÒþøRóK𦣪êßÞµô“êDòï1GŠ4]¡aNÙÎy®.Êó*uéâñ^ÉÃD›ê“ZzeÿY¯RÜmM«îµºÓc‚ý™jïü|øâ= Å çð}¿…\Ûj7wÇÚ6\ÿ (‚Ý„¯Ï¹[JœëŸt¦Eo#Bˆ3oª€]°O©ÂŸ@)õú ôñ#ijé/†(§¸HMª1D•]Æx#Ÿ”UX¼Q|ï<®àIÈÆâ}OJèü_ðâÇźš]êWW¶ò$BBè€X¼§Ÿ˜× ãï [xFîÂ-òîí¯Šc‘‘˜°)´(UÇ­rU„Órèc&ãv_²ñìº&°‡GG¸2%ºŽ&cÝGg÷ïßÔw>0×ï|=ት LmFhHö¦aíþ,ƒ® 8áÇ`ðê ÍQâ›R‘qÁÊÛƒü+ê}[¿AÅuýkjQ”cïúœ÷Ã?ÝøûÃI©êZaÒã¿p†5¥OïýÕÀ'8õëÓÐÒGÄŠ±(UQ€ÀÐRÖ¥Ÿ—¿k{ÿ üpø½ªjà\^Yëšœ0g 2XÉ%¬1-º“Ž…Ýº’kÝÿi/‡:÷ xvÇáïü-_xóUtžÿÄzÛ®´:%Á—:|Yµa& qÂ#ÜÞò?‚ÁNeíOà§Æ=kÆÚ£Ýø+ų›ë¹£Më¤ÞI2\uÛ®L‹!Âî‘à…Ýìáûcø¾ÓÀúw†®|a¨>e ÛÞK2B¸ Ú y¥¹ãŒãŠþŽ­„þÔËp9–M(¸A%86ÕÚŠJ/•7î´ï¤´½ÕäÜ.`ò,ç4Ê8†œùªNND”¬¥)Jñæi^I«M]ÆÍhÎÞI~#øÛã_aµð-ô¨¼U¤\ÞÝ]è70E1_Á#³3  ª¨X±Ç _¢uä³F¹wã]2-By‹Xû·'‰ÛýŸP=zg\zý~?ÅÙÌóJð¥8F>Í5îß[¾·ê~óÀ¼=O$ÃU­N¤åíš—¿k«+$¬–O,¶ñbé^,¿’ùâ8ïç,®~ðY@'ÐôÀíÅzÖ~™šÜÑÜýb‹CÜŒy9^£“Ðqç9Ðî~ø¬k6ËÝŒ·&ã÷ƒ>LŒÄ•ol±*ÝŽ3ÈÎãEòkÍ|Ó†Fù ¶ÿÝìÏzöºçÛŠøÅ¦çéN›ª“‡oéOâ·x§OkEè×ð•T'å *©úaˆú½Z¼áφni3™à¶[ÈäSO2TIæòØ•VXËà0 åªýö£í~ü,·ð/ü*±¨øaµ¶ÜÖþÔê-þæî6›÷•ò /n<³Ÿö¨øÓ­Ühº¬§LŠk‰.VÍvBŒì}³$€:~ñy÷¯“tírGÿ‚ÃÍ%Ö›¬;·‚Õá™dÙ \ÿÂ4§ËhŒ%öoDŠrÀãå!¼ óT«IZí´¾óÝÃÂXš+[(Å´—ucgö[ý›üwû~ÕÚoÁí.ßTðG‰¦Ž]QDÑEöhUÒ?8<ŒQÊJãsáLl¹ Ãí?È—¬×”ßú-«Šø)âõ›€5H§·’&¹ÂLŒŽÁ…®týÛsí]¯Ž?äKÖ?ëÊoýÕée±JÖÏð<œÒ¬ªV÷÷I+÷¶ßñ¯ü3ö:íÏðÁŸ`ûgÃmÊÓ]Õ,]D–דÏ%ÄQKseeHÚ7 Àæ3uU#Å?lOÛvÏâ^¥¦¿Ão·iw:-ÂQ•í*bâC,‰òB©"BÓ!FÛ_yþÞðOåý«í<=âÝYiþ6ðå§Ù¢7hZÛR¶l?‘)®%Xt,݉¯ž<ÿ¾ø¿ñ#N> ø°<9àŸ‡óß›ÍEìnÖöþö<«`eU†`ijlÁúyË Æe™æ>Ö¥5ìjÑGN„¥7'|³ð÷Û4¿ØM¦Knš{¤rB4û«{¨K£›ícVÉRÀpG›üjÿ‚qx[ã‹|Iâ;oxç¾'×üI£x®WG¸³2éÚ]±µ·khîmf…‘¢yDž9ƒo$mÂãÇ›æÄsÅ{ŽQví4åoXÝvüϽŠýÇ#~ÿ,µï' Fû襮š¯=$ðüçâܺoŠ_Ç´=Jõ~,Ý|1𭦃âÕêoÝ9šèÜÀ©ĶÊÎáØ²´…#Ê*Kì_³í“â_Ú3ÃZ´Rü8'Œ|ãwð_tcâ®môFH"¹kË[¿)~Û †æÑÕ|¸\ù¤2£!ç?à˜:¦¥¯A'À߉¾:ÐluÏŠ|BÔ€¼ÓÒ_ Nl¯c¹ŸGwÓägyçžÜ¼fhJyŠªŠJ?®|ý‹4ï€~ w„/½‘BH—ûm„+FF"¶Ž‰o¡P§&Z½z¥óQ¥Ìûò·íoÕû¼ºÞÅ}$ýšÑó>›9U²ò’^ÊËkÞîÛ­·Åø»öþºðW†/Œð?ÓUñf…ö£©Þ”ÓÂÌTº ÒõdR–ÎA¥~ß^/Ò´‹í[BÐ_Çš—ÅO‹Ÿ¾h2ÝC£YÛ[i–³Es=åÿ•#­»K¢ê÷‚Qò2M Gp²|9ø â?†ð|g×4Ý[J¸ñ¿Ä½nëWÓî%Y ¦ž±ØÁc§Bã¶$v‘I _ùi,Åz×7qÿñÐof„¾²ñGŠ|9­|K+x³DšÕl¯ ³{Inqu ÐMçÅqt’¤ðÈŽ.‘»k-BVŠºé×÷¥Ï.Ÿ-É{¯uÙ7º©jÚ][·eËUçi7ÏÕÝt^ëà´ø*мs«xsÂ_~ Ý_üO¾ÖµÏkÚlj¢µ°ðÝæ”¶’O+êg³’+ëy"š8|Æó¡ +wÀÿðRËoÿÁBî>ëºw€þ×<Œ¶3è~;·Öu{Cd!f]_IŽm3ÍI‹Å™e܆òØ…®ÃàGüóÁß¼SáÿhZ¿Šuikw×Ú®©u—>"½ÕÞÕï//¼¸QLŸè6ê‹ Åh»6… È|"ÿ‚Uxkà·Ç ƾøñBhü1¯kºæ‘ Ý]iÏ¥XÿmK,ú…°U±I“Ì$,¯2yH«*¡uuÝsv×·5¢ºÙJí_[owd)Û•¸ï};òÞM_¥ùySé}WSδø-Dú'ƒlüiñÛàö»àÿ‡Ú炵ïhš”zå¾£©®Ks²DQM‚KyZ\Èù‰WtŸÿà±:ïì˦ø‹þ á§oô¯ i>!³xÖÚþÆs©ê«¦[Áuvö𭘊Y#k‰˜•cýµ,³êÁVÄM$rO0<²¼Éå"¬ª…ÕäÒà–úÃëÿ _üøñWá¾­áï Ûx>öûD¹Ó&é¶ÒÉ-´wÑ^ØO’'¸¹Ù41à .â ^ý.g¢ø¼÷ûµi;vvOKë6¹+F;¿…ö×ü®Õô»IÛu‡ûOÁP»¥vÖÓG òÞ5YŒF!Ö0Ìyj†?àšþ°ðï#ø‹ãoˆ9ñ/Ä OEÔ5¯ëW+©ÎšEÌW‘¥­¤6°ÛÆñ¾R8±¸™‹o}Ã:J~Ïß~÷,~rÑÉéçuÚÝ/©RpUŠ÷yÝ¿Ã}Oû¿>gÛCÏ>Ágüû@þÛÏðÃZ~†Ö³®xvÆX~Ï?âÄiú–µ 7úêèZF—§X5²\\]Þùd¾µŠ8â·”³IólPZ¥ø1ûÛ~Ïÿµm{á_Ĉº„u^ÿ_ŸÀM6?‡’úô¼—2ÄÒY5ôJóË%Ï’—K•Ø„ vV'Žàœö>0µð þ™ñcâö‡ã߇+©[iž7¶Ô¬nuË›;ù—6W‚îÊk[˜ ŽÛh{rÉöXJ°!‹h´;êíïzÙü··ý»ç¡šøêmk¾]ì—O;Û¾Òï_ñKþ ®ü3ñŽ/Ÿá4×ß>jZv‹ñÄ â8ÖïG»ºµ´º”éúx·&þÞÖ-BÙæ•å¶;K˜’b…kÝþ=þÑü ñ½"ãJ“S?¯}uwqnÓÞ^ËQÅ$‚ X–@Ï™9|—,U Ç—ŸWx¿/v7iùJJÏMT’\©I½+Ê-7OûëÎÎVƒóq‹¾»rëÍ{?|Pÿ‚|Hø±ñCá|Ÿ¼!qៅ×ßá—ÄÇÄ5ö¸¶/¨ÚÞÇ6˜`&Y.¬Ý#q;JÞVæŽ WwxŸðTŸöÜ×¾ XøsÀzÖ½™«Þh¶úÄ+}KWyì"ŠAo«é©lIû@”˜É? w„béhÿðJ/èŸ4¿ZxÿâŸö‡üoqñ FðqÕm°t½ZæIå¹tO²ý¢Hå–îâO*YÝci[ÊòÁÅ/Âø%W†¾ ürмmá?ˆß&Âúö»®i ÕÖœúUöԲϨ[[4‘É<Â@òÊó'”вªWšiû7;6äïë i?””––éwgu9â´VVî”êIýñq‹o_;#ñ_üwMø§ðë—¿luëxËö‰#–[»‰<©gu¥o+ËjW­N\¶ŠqmÛêM>öâº;k{°©ü ŽíI'×X8§~—•¥Þ;'uw«ñ¯ö¨×>~Ò^:,?‚¾ |,ºñ‰4ñký­u,aÜ”gˆÅ©Uàý¶`ØP8kø+UßïøJ¥ý­¾k_àÒ¾ÞüTÑ£¶Öíu«­[H³1-ÔGDµ¾F¸¶P’X˜JŸåp¾ƒâOÙ_»ø)ûJZC¤ê>1øÜÚ«Ù4ÎñÙÚFúTznŸm#fTX­ây0¬<Éfe<à|4ÿ‚VøZ k‘~Ò~/ñ÷Å«ïx¾NÞ&Ô-˜i:,À›+6²µ¶?¼uŒµÌ¾eÃùæOTS»oŸem¯Í%Qµ~ñ“‚íÊžî×¹¸§ 7“½¶´]%ëiGÚ>í¿²¾?â_üŸÅ³Ïƒüfß´×Á–ðÇŠô/ ZøËHÓì|Pº¦¨is_Ac,·—éh¿bk9na’ïlSÇ-æG$à0:§üâ¶µñövÓþx áOŠ´¿ŒVZÍî«w¦|B{ë Hì¼¶I4íF;·hc>L*X°O“isÙx7þ À¾¸Öõ™¾4|aÕþ jZ5§‡4ÿjèÒêú™op·ÒÖ5ÓÍ–Y3I=´ÒÊ1¹ÎÔ+Ãÿø%ß„¾iß ÿá]øËǺN¯ðÃ^Õ¼A« ºyŸ_—V§Ôá¾…¬Í°†âG$­´0€‹r´•¶wý]¿òVœ¿¼Ÿ*i˜ZKÏÿÙÿòe.]>ïY£çø'¯í?ñ»Ä~ ð‹>$[ëÞ!ñÅ=Å^#Ó|1qã YôQìe¶6öâC¦«i{í­QagB‘‰e21ù=Ÿáü·Lý£þø÷âÁ?ýƒÃôÛxõ=CÇzÊøJÆË]'ý3H»žx\Aö1ý¢è # á"°m½æÿåð·„þxGÞño|>þðîµá½V±¼´]FÖ-UâyçöÌž|f18@’UŽà®ÿà‰¿t êÚÀGÆ ´Sûóû/Ã76‹cm«h×QÜÙë+Õ¬Ê÷ì`Š9ä“zÜ*)•EYEɶ¤¬´JÝ7»×}6WÖVÖ1Nýäqž·w¿]|¿;imåµ/‡_ðWøÇû=ø7^øAàmÄþ;ñߎïþé:Fã§ðõÅõ”WW3Ý®º¶Ä=Ùl¦™fKf‘²ˆ!ÜH\€?·ÇÄŸ ü×µ_‰ÕücãoüqÖ|¥xf-nÕNŠgxb…7·…m™™ÈÞ#fl3(»ûoø$߇´ÿ?Jø§ñrÛÄ~9›â&“â‘{¦¶¯£ê÷Ïmxñn°6òÅp“Ýo†xeAö†XÄj±ªußà>ø;á}LÓ|Eãiô]|FÚ¾¥Õåö©s ÄRý¢_$oˆ‹¹[h À…Ãmiê§u³QOÿ¤åo’©fÕõVµÚ2“æ‹VÙɯüª‡7ÎTî“¶½Rg—üÿ‚«x·âwÄ_iŸ¾ Üx7AñGµo†—ZÏü%pjiÑßÉ*ZÀ+ÜØ7öe ©>Ï'™ö}Ÿ¼®¯þ sûTüVýŽü¥x»à†á-gÃ&O²jÿÚvW3Oa+ÝIº+ˆÇ”ßs•á¶òw€;þ ýà¿Â1ö=KįÿŸÄ[â…žû˜™©ê?Ú>|Rb›eþֹ؃k‘æFÃnõÿx'Hø“áGAñå…¶©£êÐ5µÝ¤ëº9£n úz‚9"ˆß‘s|_ð#ü›™/$½Bi)¾WîôÿÀ¥o¾<­ùßm%ý€¾0üHý >ZxËöÓ<;£M¯?Ÿ¤ÙéV³À~Ç–Y|é¤$ÈrÊ>M§ÜkKt°xÓÄáÈÏö=éÞõ[[hl-c‚Æ8á†ÇjcP0@à8Åx‰¯>Ïñă=oÁÿÈSÅ´ïÚAt¨õi¬5U°½±Öµˆ&†åZâÒTƒR»ˆLƒÈ€ï”¼ë&1^—ðöƒƒã·†§Ô ѵ --™\IûË Grólnp¿i‡œy›W$+̼9ûøBÓÆ:¦·ã¶¹ñT×ú¥Ö§–¢TéÖ-5ÄÓ¶ª6ÌAŸïOæ•d –x¯`“YËt²·ÝEå˜×ÇðÞY›`êNxêËÙÝòÁk¥ônOgmZŽ—Õ¶ÏŸÊpÙ„–"J1JÜ»·¥®úG]}ÛÞúÙènècûdpãËŠà„窶?64’xy<[ñÃÖZŠï³€Í~è~ë¼aõÁ”·ÕG¥?Ãú|š~žÙiXÉ&:{~¬I4Úf§e¨Ø)’[ 2²Fà £ß¡ê+ì 9OÛóÇïð‡Eø{⛾×5mR(v4×å TH;1€A種öGý”>|lý–¼ñöŽð߆~%x·ÇÚ-¯‹uMsÄÖ0ê2E5í¼w]£Ì¤Z[D¥cŠ8¶*¬aŽd.íë´„¿%øw©x?E“Ŷžñ׺®— ¶É<–ÒèÚ“ —RÇ~òö U˜|¥Ž1_:ü5ý•þ*~ÏþÖ~|´Ôïþ^´Ë¦øSÇžÒ_G£j^6ÕÚÁµG¶O‚;yn%hÑÁC)Xv®ðGÌN8ÍÖ|}/ìï ø‚M[ÅÚ¿ÄR´ûK]äØAymqw)†y Š ‰+ºüò/6#<ƒÙ|dø3¥|lðõ­—ˆn5 2ò=CNÔtùü›½:å2Xœ‚3†e!•”†9ÈÙ LÕ,¼N|oâ뺯ŠMƒÍ©Í%µµÍ”–NÏk%¸·‚4FGmÙ*Ù dZº¿¯á¦‹Ïs‘Ûðün÷òÛÌÊ›ö¿Õlµé|'¨x+oÄ%ÕmôÈ´¤ÕÃXJ“[Ër—?nhTˆ„VóîIpÉ´)ÎišG퉪ø³V³ð÷‚¼%ßRçP·Õ´ËY-­´ß±y"V[£yÁÍÍ¿—ˆÆá&[`µßö<Ñçš}NóÄž*—ÅóêpêÃĦ[eÔ#–ZÑQ`þPŠIPÆb*DIÈä~&~È×^°Ñæø1·¨ëËws©ë_ð•P¼k³”LñÚÈ’$†4"ÄcòÆAèõ_×’ýoÀ4{[ßô·ãçmûr½¥½ÇŽ5ë+‹]&ç–0h²^ ŠɵK«@ÏpÊ(›¤# ªN >Åû7|~¶ý¢<ªX[Z[K¥jsiWc¾[û9dŒ# -îUWÍ’D!Š©ÎAsÅ|?ý†ôm3ᙡxÞþýµH4=*k:äͳ[ÝIx—®Ë½dIåb¬Ù*åzƒë^ðçƒty-µßë>'žIL¿kÔÖÝeAµ@EðÄFÜýÒrÇ$öÑÙ]zÛÿÓðý5%êîºÛÿIIþ?û›´Q‘ëFG­@Š2=hÈõ Š2=hÈõ Š2=hÈõ Ï¿Ýü>¼ÿ‚¦|U_Û+MÑõ›»m'J‹À6ž%1=lM¹7¯j“ƒ´oÜ@,ì`n­ø%O‰|2ÿµ÷í £~Ì÷6 ð¾Ö}.æ×OÓ§WÓlõI#”^ gdAŠü›”à úÓãwì¹ðÿö¶µ‹ão„ü?âd²bÖÿÚ6QÜ Æí…Á+œ ãÀÍ|»ûEÁ(äðÿÆ|Lý€uá7‹<.ðØ^ǰM+QÓwþò9m£Ú‚“Çðe!d@§¾;øn6}[´@·¶ñC½G/¬#u>£ ŸøôªukÆÞ$OßYÛiŒ$³²M4£îË *©î9ϨV€¸ùÚ¢Š(_[N…fÒ.ÿÂcQÿäzöª(ó爬ü5â땟Å>Öµ•v,—¾‘Õsœm³Œ“ÅfÿÂàm»áÔöÿwþëü~_f¯¥h¨tâõhµRkDÙóç‡lü5á–ŸÂÞÖ´év4–þ¾Ùzà•¶Î2Õ­sã [Ëy!»Ñ¼W,R©GGð¾¢ÊêF Ûòí^ÛERJ:$K“–­ž¾#Ó‘B¦â`Àš†þKÒÿÂM§ÿÐÄÿøJêü^ãE1ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=Bum ³1ð׈w1ËøD¯òO©ÿF¯w¢€<'û_I<7â/ü$¯ÿù¦µñ=…‰?bмQzìð® ¹ü­ëÜ( ÿ„æúø»ÿ Gÿ‘èÿ„æúø»ÿ Gÿ‘ëÚ¨ —Å63˾} ÅÿÞo êþg£þ{úx£ÿ ]Cÿ‘ëÜ( ÿ„žÃþ€^(ÿÂWPÿäz?á'°ÿ Š?ð•Ô?ù½ÂŠðÃâ 4œŸø”“ÿR¦¡ÿÈôoéŸô/x—ÿ =Cÿ‘ëÜè  þßÓ?è^ñ/þz‡ÿ#Ñý¿¦нâ_ü$õþG¯s¢€<3ûLÿ¡{Ä¿øIêüGöþ™ÿB÷‰ð“Ô?ù½ÎŠðÏíý3þ…ïÿá'¨ò=Ûúgý Þ%ÿÂOPÿäz÷:(Ã?·ôÏú¼Kÿ„ž¡ÿÈôoéŸô/x—ÿ =Cÿ‘ëÜè  þßÓ?è^ñ/þz‡ÿ#Ñý¿¦нâ_ü$õþG¯s¢€<3ûLÿ¡{Ä¿øIêüBø‡MC•ðÿ‰AõÔ?ù½ÎŠðÿøIì?èâü%uþG¦·‰4÷ûú‰×š‡ÿ#×¹Q@(¾7TÒ|Zè†5?ò^—þ˜èâïü&5þG¯j¢€V!®u@G÷üƒ_<~ÎÿðZŸ‚?<­ä:Þƒ¥qåÅ{y§˜lƒ7A¼1*©W×ÓK¦^ÌóZ¼2E).Œ¯ÊyÖø¼'/©ì±T¥ ö’qs³1Ãâ¨âãÏBjQîškïG¦ÑE#0A— œ×)¸´Wç³ûWxïþ ûL]øök×üGàß„ºUÝÏØ¼EáGû7TñvRý–÷Q7Ì$X ©ÖÚ8¢wº’ÞâMñ¤97ÿ ñ·íYÿÓ´Š~(x«ö“ø5¨G¥xBø‡åÝj:,’6Ûi"Ô-Ñ% #1yRªþXd}ãOx×þ «{û:þßß< ñâÄÞ|7Òn4جu:÷žé¶“È÷0*ï¹…åžCº"òG·ýY_˜}¥àßé|+a®øT°Ö´]V¹³¾±g·º‰†Uã‘ VSê ~x7ãûÁZ¿iíGÆ¿³¾˜|­øëSSè>+¼KešæÃA·-k Ähû¤gUd.ƒ"Y?S?à“ßüGð?öKþÉø¯ ê^×.|I¬_ϧ_I ’Â$½—cæ $Œ‰,¹W`|Ìç$×% •¥Rj¤}ÞüÏ¡Íp¹e,¦¬f—´‹Z&ÕÓ‹íÒÞ‡ÒÔQEuŸ<QEQEQEQ^_á¯Ûwà¿>2ÉðçÁß¾êß¡»¹°“Ã^*±ŸYK‹a!¸„Ù$Æa$BK¦Ì ÷´àÔ(ªÚÖµgá½ïQñÕ½…„/sss<‚8­âE,îìxUU’xWå_Åø<ƒöJø{ã+Ý+ú_Åï[YÊÑ.©¢h6‹esƒÑý²ö JžÅ£Zý]¢¾øÿ |øýÿ.½ý•üáŠß¬é¿¾ø{NÕ£ºÕb>%»¿„Å,ŸiYaÓ­g –iÃÅÏÍvL6|€Êý7ý‰¿oo޳î‹aeâ¯íÚ/áß’¦Ãÿ ¶“`XdCäk°ª†û®'È $™²+óËájê>%ñ%ΟâXòÛM¨\Ë5ìò_Àî-ЛË[»#u*ÚÆËq¨ÃqeÔ#Ø“/Þ²¿ˆœ_ÚÜjsÍz׊·q݉I¸ºDàOæo›í*¸Çžd¾E Fò в6¯QT’k²_rKô?P¾~Ñ^ ý¨~§Š~ëÖúþŒ×ÙÊëOiqÄ–÷6ó*Mo2nŠTG\Œ¨ÈÏk_+üÔ¢ðGü*y­J%ÆŸ‡ÐjeÀÚ·Zž‹säM Ã0g{]RÓ,²-‡Ì@Í}QTb|!ÿ ÁP<}ÿšý‹ü1ñötÒ<­kz×m|7<$µ¹¹µKyloîÑmî!q {8€%ÈÁo”’ø#Jÿƒ“¿mŸ‰°=¯Çƒß³Oo|#áGžx²u¹:[Ê·Nìýn„1ÀöÂYËL‚_7;q^Ñÿ«Ê,¼ÿeWNÿÓF±_þÈŸð[oƒŸÿàÚÏ~Ïß—Z´ø§©xwÄ~ÑtãÎa×!Õ.¯ßÇtÈÂ×S#npÛ­*±Å~ÁÿÁÿà²~ÿ‚¥þÇÇÄ}jÆÛÁße{_iÒ]y–ÚiH¼áu¬6ïf€*c‘Ní›Ûá+Oø9—öý¿¿i=ÁðE?Ùç@ñ¾™áèÞåµÎâK«e}‚æEûU¬6aÉ#yÛë•^þ iý‚ümñþ QûZ\ÜE>‹gû@h²øKÂ÷A¢Iž-?P·{´ÏX¼íESxãt?„×Ïðnü3ÀÿðDïÚg㟀à¤öšïÛßC§ÛKss£ÜÝI¥ÝØ=Ömæ†Þ7—­îåuFSå)Îýÿ‚[ÁÊïí ûgKû8ÁEþZü(ø°÷³iv“XI(±šþ0XÙÍÌϰCåÈ%‘$%@Æå-Ì~Ñ?ðp—íñ‡þ 7ãßÙ×þ ð3Â><×>ÜÞÙêW^&¼`×Me:ÛÝÌ«ö»H ‰'q—•‹åO¶‚~˨Áh?àèh>0~Éú°žÑ-ê¿´Á?†>øwy¬i%Ó´ýB¶Ó<ÚÍw«ÀˬJ äs™PK#aGú3}ãùMÿá|Pý°>jïà“¾üS¼¸G‡ÄÓø¢â$Ò7ÆÙmšMJÌâb. æ¨;p7@ßµ÷íGàOÛGþyñçâ_ìÑ®ÿÂKàŸü*ñ‡ön¥ö+‹?´ùöÒþææ8å]³A*üÈ3·# ‚0?àÆ?ùº/û•?÷5@ì=ÿ9ÿ…•ÿ-ë_?ážÿf ìßiµ}önøW¦kF—ä¬z¾§t#Šô¼)#yjÓB0¬ìœ3r‡¡àp³ÿü·Åwß´d ¿jŸiþ×.îVÅ%±gAopê$’7y7,›—¯™N92þÔþ3Ÿâíí®h_µŸˆüE¡ø.ÇWžÛÁäû’†6ï ;X|ëå1`ŒNòØ=+Œøq¥xgBý¾|kðb]n ÇâÝû:}YBÝÜFg·>cˆ6¹,Ëòƒ±—<æºÏýý¿o¿cÍK³ðÞo¬x£\W–Þ‡e·µ…N ²…Ã6XíUg r1ƒòWíãûD|Pø§û4xjÇö‘ð>þÔÕáÖ4½FÍñosÛΦ9!iâ“£Ì ¾QŠè¿à· uHþ%øOÅé²hÓéÙ *©)ñÍ, 1ì]fã×ËoJÏÿ‚ŽþÛ¾ ý§g¯ é_ Åì×j0ê{9"M-żÈ-ÙØfbîFÂÀˆ‰Í} ûxÚïá§üžÓÄzvòßxD×5+tKDòCs{"‡ A*JŒ€AÆyäÿ¿à¨>9i¾!³ðïx‡]Ó Žî&³Ymí¬àüÖœKpL¬O””œ?ÞàW ~Ìÿò†KþÅOèÛêóÏø!lJïñE™A`4¥Ûr?AùPŸÁø+Žþ5éÒxsÁ¿lµÏˆ—/ºÅ,î q„+$˜Jû“ncÌÃnûÊ@ Ø~Å_ðR/|nøçwðï㿇tÍ_hŽÓÄ‘ªÏã,Ç#¹ $;ƒuB1ÎkçÏø"”k'íU®—”ð­ÉR{µÙäM;ögÿ”Ëê_ö5ø“ÿE_P¨|rý§¿áÿ‚˜Ùx7þçÂíCÌñ‰iý¹{ ùºÊùÑÚ0\ùƒGæaoÊ:âºø(wü;Æ¿²WÆ/ßt¿ ÞØÞè‘jNú•´òJ$yî# çA·¯ÎIçÓÁÿiùL¾›ÿc_†ÿôUð[ù:þÅKý,¼ Oø¿ÿIø©ðoÅÚ%÷¾éš7„|EÛ4Øo&vÔ.ío5$)˜e%<®áœðOÜ> ñU§Žü!¥kš 3Xë6pß[3 ¨I¸a_ÿÁsâXSábÄ¡UFª Ð±`WØŸ²güš¿Ã?û4¿ý#Š€=Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿;ÿà§P™ÿ࣠ü :Çþ–Ù×è…~{ÁJ¥ÿÁH>–ÿ¡XÇþY×Õp[¶oOü5ôÔω?ä]SÖ?ú\O9ý—ô)›YñÎø7—gÿzåþ ÉðýlÿôBW¤þ˺¼ «ø€l\ý®ì}~w¯6ø%ÿ$cÂ?ö³ÿÑ _MâuIO‡R['ùDùâ¢ñVïý¼ýw¯Ì_ø*ü#Àº_¼oñÛUó¼G'€4íwÆ7pÝݵ–¨±.µKÈmnâSnéÑ"ŠâÕÜܪ·ôêŠü¼ý,ü=ý–¿kO€¶™-·Àþ6xŸNZýÁû}™m¡· T8€ 'iv`r§å¯`ý¸goÚÏþ û-CðËÃ?<ð¿Àº¶›¬^¦¹ãÛmGÄ“Ãkr—Tp¥³ÙÇ+y`m™¥L¶ŒãëÿŒ?ðG/€¿.cÕ>xVo„/´ù¬|QðÒèøWU±“vã 6aœœEÄR©‘ÀLJþÕžý§?cïhÐÏûLÁ¯xWľ Ò|"·º¯ƒ¬ÿá"·‚îUK›¨nm–(Ræ(áÑäŠe%e çÇ¿cßþÅ×úEŸÇ jÐ#¹ÙzŽ£ ¥–›g18 ­ÜÚuœÍü/k}¢³v⾘ýš£û^«oÐa5üËrU‘Œ·’Ž“h÷ܸç÷Â=EÆ8¾Nµë?³íûâ/‚>5ü"øÛáŽ|1áM]bÒ/¬t_øK/l-äžîÛì·òDiSb×¼‘0U•ãi0¨ Ýüø™Û~~Í?µÃmjäù©©xSáÄÞ•ÛÖâÖ]¶×îÝC öÍz—ˆÙ­¿kOÙ(:LòϨø¦7d€_ìWbÒ6÷?y#»Ûrr8û>¾ý‡üñ»âWí+á­cö¢ð ±ø{ðçFÕdð‰5o+H×ïï¯ηš5µÔñÂRÚ;å.YüÔag}Ñ@œðtìñcþ %ûøCÁ_±×…?á0ñ>—ñÏ[º²þÓ³Óü«8ôíJ—̼š(Î$¹v†,wä GIÿzÿ‚[響à”?þÁG>øWñÏΰfÓüE¦éž :a¸Öo®¢ò¦tCtSÄÿ»sØ8`@û¢è¶~Ò-tÿÚ[XXXİ[[[D±CoŒ*"(T`\7ÆoÙ'áOísÿ´7Ã/‡¾<šÕvA'ˆ¼;gª4+œá ÄNTdž­zÎ|/ø=á‚]à¿…¼9á ºØhšl:}ª±ÈŠUÎ;W+ñkö*ø7ñ÷U7ÿ~ü2ñ­óu¸×¼/c©JàsÄÇõ¯M¢€9O„ŸüðA“JøàÏ x'L•ƒ½žƒ¤[é°;1ÀФûâ°~4~Æß?iV ïÚ#áWÃoÞÛF"†ãÄ~²Õe‰ÈU{ˆœ¨É<Þ½&Šãü5û=xÁäøsàïø?Iø{5¥Í„ž²Ñ­ ÑžÞäÈn!6H‚¦iK¦Ì9‘÷¸ç?àgìð³ö_þÔÿ†høiðÿáßöç•ý¥ÿLJ¬ôí+•çýš4óvy²íݾcãŽ}Šòÿ ~Ä_üñ–OˆÞøCð¿Iø…5ÝÍüž'²ð­ŒËÜ\‰ÄÆõ"%J÷åĸÇ9žÿ‚uþϾøkâÏü ø9£xªÆëíÖÚÍ‚ôÛ}BÞã$ùÉp L’w†'­{ãž,ÿ‚vþÏÞ=øuâßü ø9­xªúè_\ë7þ Ónu ‹€A=ÃÀdi2ÞXœÍuúÏìÝðïÄ_“ÅÞ ð‚ï¼WðÝ&µq¢[K¨,°…H.Z3 tÆ·ev.1]¥§šI_ÔèÃâëá• Ž-«;6®žéÛ§‘Îø»á„þ j0^x÷ÂþÖîíFØg¿Óa¹’œáZE%yôª×Ÿ<¨ø¶-Pðo…'×`’)cÔdÒmÚî7ˆ(‰–b›Á@ˆƒ• ¸ÆutUœå=ÃÖ*ÒfÓüQcg©X\³[]B³C(ë†FõÎKû>xo oøAôeœ] Ñ­°˜+(E³nð®Ãv3†#½uôP>™ðóÃú/ƒÚ6‡£Úxyâ’Ò᲎;&ŽBÆD0ØU˾áŒÇ9ɪþøMá_…ßjÿ…gáŸøwíÛ>Óý™§Ciö›¶oò”nÛ½ñœãqÇS]Ëø'à‚¾j²_ü9ð‡…ü?},F¸Ót¨-%xÉV(^4©*§ÆTÔiŸü¢øÍ¼G£xCÂöž!ydµHt¨#½i$ $s8Måœ;î9ÉÜsœšê( _Søà­kÆkâ=g»ñ KëªM¥A%êÉQ‰Êo iÎFÑŒ`Qãoþ ø—ªÇñÂñôQãRÒ »•#˜ y ³gb{×QEsþ;øMá_Š?eÿ…™áŸø‹ì;þÍý©§Cwö}ûwìóTíݱ3ŒghÏA[N“i iVÖµ½•”I½¼ˆâ‚4Uª0ÅX¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ üïÿ‚Bgÿ‚Œ|0T8?ð€ëú[g_¢ùíÿ*”Cÿ ø^[þ„ cøg_UÁnÙ½?ðÕÿÓS<>$ÿ‘uOXÿéq<çö_ЦmgÄ?;àÞ]Ÿü}ë—ø%ÿ$cÂ?ö³ÿÑ ^“û.êð.¯â±sö»±õùÞ¼Ûà—ü‘ÿØÏÿD%}7‰Õ% ð/„|1¢ëÚÄb+ýJÃJ‚Úîù³…šd@òì͆'–'©®žŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠóŸÚrÿƺw€­àCìÕΠ‹1Ä÷\›¿×ü¿xGÓŸÃ4èÔWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uEd|?—RŸÀZ#øÄçW}>¾?/3˜×ÌûŸ/ÞÝ÷xôâ¾\ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWËŸüIñöè‰ã³¤>¡ß šw0ÌûƒwÝÝ÷yôæ½×ã½×‰,¾ê²ü$m¾!_'ì‡~ùÿ­ù>æþ¿‡8 ºŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠÈø.¥?€´Gñ‰Î®ú| |~^g1¯™÷>_½»îñéÅ|¹ÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾\øâO³ø÷DOÍ!õølÓ¹€È¾gܾîï»Ï§5î¿î¼Ieð§U—á#mñ ù?d8ˆã÷ÈýoÉ÷7õü9ÅuÔWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü+¯ø¯ük½ø­¥Eñn]Þo;ícm€Ïî\§ú¡¿ïìéøñšú.Š( Š( Š( Š( Š( Š( Š( Š( ¿;ÿà§P™ÿ࣠ü :Çþ–Ù×è…~{ÁJ¥ÿÁH>–ÿ¡XÇþY×Õp[¶oOü5ôÔω?ä]SÖ?ú\O9ý—ô)›YñÎø7—gÿzåþ ÉðýlÿôBW¤þ˺¼ «ø€l\ý®ì}~w¯6ø%ÿ$cÂ?ö³ÿÑ _MâuIO‡R['ùDùâ¢ñVïý¼ýw¢Š+òóô°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬È*?úê?“VÅcøÛþAQÿ×Qüš€9z(¢€ (¢€;'þAVßõÉ?®»'þAVßõÉ?®€ (¢€ (¢€ (¢€ (¢€ (¢€,i?ò¶ÿ®©üÅu)ÿÿðýW/¤ÿÈVÛþº§óÔx§þ@SÿÀô!@}Q@Q@Q@Q@Q@Q@Q@Q@Æ“ÿ «oúäŸÈW]Æ“ÿ «oúäŸÈW@Q@Q@Q@Q@Q@Q@4Ÿù Û×TþbºÿÈ øþ„+—Òä+mÿ]SùŠêŠ( Š( ´<-ÿ!è?à_ú ¬úÐð·ü‡ ÿè&€; (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ üïÿ‚Bgÿ‚Œ|0T8?ð€ëú[g_¢ùíÿ*”Cÿ ø^[þ„ cøg_UÁnÙ½?ðÕÿÓS<>$ÿ‘uOXÿéq<çö_ЦmgÄ?;àÞ]Ÿü}ë—ø%ÿ$cÂ?ö³ÿÑ ^“û.êð.¯â±sö»±õùÞ¼Ûà—ü‘ÿØÏÿD%}7‰Õ%Ö*ùê§FFiŸg›/ŠÞ7Õ®|o¶M"öÃO‚%‚R— -¼×Nù;pã¹òÎJ¼ƒŽ pþ ýšüa-µÍž™q£]éWךÄòYjÝi¨¿k¸ó!w’Þ-òªÆYZ ªŽOiM¥ªïùþ«E÷½ôoWe¶Ÿ—ùÿ—¯²ßxúÃHÖ/`×g³±´²µ·¹kÉïaHÏ$ˆªT¾åæ00 ۤÀ[ð¿‹ôŸéBûÁšžŸ«Ù1‹‹+„ž"è܄ŒJòOøf­^YØêSè÷ á½6u‘ÝÒfÓï{Œƒ*èØ\ŽNCסü>ð¾ ñ7‹îœZ%®¿ª%õ´pdÔZ[ÂÛÆÐ…ÏÈ ç$v³k×óVû×äBm½»~_æ{“ÿ «oúäŸÈWx_µð§‡ïµMrA –o%Ôî‚4RÌ kÑtŸù[×$þB¼Wã¿Ã«ï‹>oéWick©Üš”ÛŠÊ,Æ•aùX`¡0Ãn‰Î0eÞÖE«_]‡ü-øÑ¥|Pð :ük6ܵ”ÖÚ‰XgµœK判Àvb˜ÉÞ½Î)þ9øßះZ–mâ½ZÂÕõ ã`Yî¢E´@Ó“1w`AÜæXøÃ\£û:ø‹H·ñT>Ö¢Ö"Ö¯tÝrÜêî±Èo­®#yþÏ¢Ç$vð(eRA õ#üñÖ¥7ˆ/í|'&´|PšêX}¶cj`h²1´æ ÁÇßÈŒƒ´tνßÝú_õù"5Õzþ¶ý>g¨éÿ´ _Ä×.•­é:Ūy“XÅyܼrцÜ̼‘üCÔV'į‹Òxĺ>‘¤ø{Vñ¡¬Ãss62@…#ƒËÞIšDþõp$ó\w>xƒÃþ'Ð!Õ×@þÉðÖ³¨k1j1M#ê7æèN<©Ī˜ûIÜûÛw”Ÿ(í»ñ—àKü^ñ¾…ws¨]éú~§j6“Ic}5¥âÉp!Ñ´x –ä«§åʰÎ%ÞÊßÖŸç¡]mýoþZÿÃZoÇ/ Ý|=ÑüO­jöZ•®D’Z¾«q£Ã;öÆáƒ è{sZš¯ÄOèZµ†·®èöwÚ¦>Ço=ìqËw“å#6_'€rkÇõ/ÙÓÅrÛøZfþÁºŸÃzuΆ֖zÖ‘oqlíŽthbc…bHv²ðÜR¿ìõâm3\ÐdðTZŠ–vzm•ÜÐê³Ì†f¡kIíÝg ˆäßÙ'н¼¯økÿüíº'U;~:Áû»³añ+ú·‰_FÒõýçWŒ9k¯c{…ØJ¾c ¸m ƒÇÓt¿ŠÖÿ´ÿ±¼C¡Ýÿb‚u&ú'ûÉ› û°6·ÞÇÝ>†¼{Á_üAã+À5K-3AÒ´ïë:¢_ÆÒ.«vd–î$[DªŠVmÁüÇ܉ϰý›B ŠÃ¼ýœ|erº¥«_XëŒöw6‡W›NQ ÄË"‘umn ®\´*$ÎNåÝëýWü:²S½¯ýÃ~'Ðz$«>¡hð2º<ˆÊÊr0A®«Å?òŸþÿ¡ óß„~> ð¯‡4—‚ÚØé–öö¦y^X¢Øv£Éó²Œ`䎵è^)ÿÿðýU=€®Ö§üHø°¾Õô'HÒ5kºçšÖ–6f4>\@%’IYR4]Ê2NI`$ÖBþÑÚv“©i–ÿ,¥ðp¾‚òI_Z¹†ÝmÞÞH#Û¸9Iý eb_ÊßÄ_ëçâ⿆‡J¹¾ÓìçÓn¬u¤‚+›y^92“"9Õá^¨Á#ŒU`øu®ø·Æú»ñ>ÛÃFM2ÇRµ’ÚÙ¤"7[ù[XÆò#†@í„ûø ‚j.í_Öß~Ÿ?¸réo/ø'M¨üRðΑ«XØj¾"Э¯µDI,í忉%»W8F eÃÉéO»ø—áËÅ¢ßkú,:Äò£±{Ø–åܨ`¢"Û‰Ã)Æ:ë^âßÙSÆúç€ì¼:·š-Ý¥¿‡lt¸÷j÷vqXÜ@™!ŠÒÃ…<Ò•?'¯ x‹à5Ö±}â{¨†‘ö­gÄšV¯m3ƒæG§Ø÷£6̆ÿGŸh¼#sbúüÿ ¥ù]ü‰m¥¦öý?¤w0|Hðí׋A¶×´i5Èþþœ·±›¥Âî9‹vï»ÏNœÓü;ñAñ~£{gáMoIÔîôÖÙw ¥ÜsIlÙ#*’TäÎ9v¯Ÿü'á hü^Ñü-ejòi¯¬ßO«¦ymt¿i†éCË,Ь.wÜ ’oÚ­ò…5ÙþÏõ…ÚÞ˜Þ(µÓ%]I}& øµ«»™&BѶÖXÄvêÞPfPφ/©Ý¯Ûüÿ¯Ÿ‘s÷t_Ö¿Ó=ZçÄúm¿7š…Œ_ÙQ‰ow΋ö4*X4¹? Ú Ë``Ueø‰ Aâ‹}}sHMfí<Ø,ò1s2`ËíÌ0 Èô¯3øßð¢ãÇŸ|5.ãÓ5›VÄûa&ÞêÎÖXæ‚'~ÚVhöõhä—°¥Ö¾k÷~2Õb³ º.µâ[/I¨Ï,ŸÚfßÈ>Dqö¶M¸U1v¬Ž6žî.öþºÛò»ù[ª´½¿­?Ïðiž¬ž%Ó¥˜µ &½¬XO™2oßó˯—&Tr66z‡Ãþ4ѼZÓ/…um3SkuF”Z]$Æ à”-°œ‘ž¸â¼ÃFø=âû?iPÝhþ&Ôuô¹[©äët·{cò|­ŠU®È'yÈè{_ß Sá?ÂÝE{}:+Û`¼’Î0±ÜL«ó¾v©l±c’9$òiGUwåý|„Û½¿­ÿÈÃðWí5¡ø²o]ß]hºW‡´³d5+fß÷Ò <´`þéY‘¼²Ç.9W_}ñ'Úf™k{©kú-½ü^}´òßD‘\GòüèŰËó§##梼æ:Þi¢Þø}tKÝKAñ6¥­%ÄÏ ­ÜWR\ì (‰ŠJ‰p¤Œ5/€?gyô]gÂ÷~/‡@»]"-bi­ãˆ¼V·×qN«l>äj%qÚpG1‹n×þ´¿æ9iv¿­_ü¼ô˜¼e¤Oo«¦ºM³FËr„]Iº_Jlò€O–$Ý´¶;sž+•ñWƒ¼kñWÃ3iž=°ð…§Û4ë…†Þò{Ï_š6fÇΜŒ˜zŠ5ÿŠ^ð©²ÿ„£ÄZý¦»í>Õ?j^>h÷0Þ9Œõµç_ ÿgßÛøB?¦‰u‡lu‹i"G’áQ¯.£–/(Ê›ˆXÕÑ™Žîqódšó‰ !hÖl´í{\Ò,µ OÎÚâò8æºÉÀòјÉà`kËþ(~ΚŞ¥|*ŽÄxr;;Èn¬nu‹»'’âvVûD·«Írï7Fî¡‹IíBßöxñn‘á¦ðôÚ=¤Ú~¥iú…úê2¸ºK]¾bÉe%»G7ü´òÜï6š{^K»*ÊêXŒŒÕ_þɚ凊4SÆô3O ךñ…˜›OdñC<9P¤Wr'ðŸÜÃÇ\$Ý®×OÇ]?½¯;SµÚóÿ/óû“ò¿¯iü5­ÿiÿcx‡C»þÅêMôOö3“6÷`mo½º} U×>4xO@Ð&Ôõø~;H¥{o5õUu]Æű¿;zóÒ¼®Ãölñ=߃IÕ“Âö ¥x2óÂvZM+E¦XÀžã1/’£ÉS±|úG9õèüuðWT°ñ‘©ü'Ó|/ ²Ñ®´f°¾v´¶·ó¼¢'‹Ê…ù-Œ¸RF)Nö|¿Ööûì½/®Á]_úÛüß­¼ÏIøUâÅñ熼9®CÛ&³mm|°³nh„ª¯´žänÆk¿ñOü€§ÿ€ÿèB¼ãà§…n< à_ èš«Ã-Öcge3ÄIÞ8Ñ© 2§ûW£ø§þ@SÿÀô!ZÔ²“åØ˜ÞÊç™jþ>¶Ñþ èÞž†ºÖí®®¢•vùq¬-Á¹ÎOœ¸À= MsñA²ñ\: 浤Ů\¦ø´÷»n¥\•ˆÄaXð;Jå¾(x/Ä·ß|1âO‡PhWm¢Ú_ZÏo©^ËjÏò6²4pËœy' ÔW$>x³PÖïWXƒÂéi­øŠÇÄ·w«w4×v2[ùÛÀ¦)6áVBɵdq´÷Î.ö¿õ¯ùkò¶ì—ü>ïóÓñèzœ<;uâÇÐmµíMr?¿§-ìfép»ŽbÝ»îóÓ§4Í3⇆µ±©Ä:ØÑA:†ú'ûÉ› û°6·ÞÇÝ>†¼¾Ö›âæ‘ák;W“HÑ5}fö}]4ÛË{¡ö˜n”<²Í Bç}ÀPÑI&ýªß(S[úOìÕâKß dx€xkN]/Á·~²¸²’I_P3,`O81§”£É åƒ'Í#Þªî×·OÑÿÀ_?&[I;_¯ëþZù¥ñãð¿KûWŠõ h”Ok GçIJ ¸—ÊI;.!Ø·÷bŒí"»êvÚÕíæqÝ¥Êaž‘Ê… ¬8`G ŠðgàÏühÚÖ£âX<'k¨Ím£Gak äóÂÍax÷,&‘ R¡÷íU° ã'Ý~›–ŸO:ÌÖ×f/ßCo)–(ŸaÊ£•RÊ•\ú•K­ûþi¶õ_ðýNæŠ(  ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯Îÿø)Ô&ø(ÇÃCƒÿ±ÿ¥¶uú!_žßðR©D?ðR…å¿è@Ö1ÿÖuõ\í›Óÿ _ý53ÃâOùTõþ—Îeý fÖ|Có¾ åÙÿÇÞ¹‚_òF<#ÿ`[?ý•é?²î¯êþ ?k»_ë; ÉðýlÿôBWÓxRSÄaÔ–ÉþQ>Cø¨¼U»Çÿo?]袊ü¼ý,(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*ž·¤ÿlZ¬^g—µÃgn{ëïW( þ_úzÿÈ_ýz?áÿ§¯ü…ÿ×®‚Šçÿáÿ§¯ü…ÿ×£þ_úzÿÈ_ýzè( í û-¬Qgw–sŒg‡ÿ/ý=ä/þ½tP?ÿ/ý=ä/þ½ð‚ÿÓ×þBÿë×AEsÿð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½tP?ÿ/ý=ä/þ½ð‚ÿÓ×þBÿë×AEsÿð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½tP?ÿ/ý=ä/þ½ð‚ÿÓ×þBÿë×AEaÚx3ì·qKöÞ[†Ç—ŒàçÖµ5[í; ß³~>lg ôü*ÅÏÿ ÿO_ù ÿ¯Gü ¿ôõÿ¿úõÐQ@ÿü ¿ôõÿ¿úô ÿO_ù ÿ¯]Gsuœ&KÉ#Š0@,ìN'Ü@ð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½tP?ÿ/ý=ä/þ½ð‚ÿÓ×þBÿë×AEsÿð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½tP?ÿ/ý=ä/þ½ð‚ÿÓ×þBÿë×AEsÿð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½tP?ÿ/ý=ä/þ½ð‚ÿÓ×þBÿë×AEGiÙmb‹;¼´ œc8¬?øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€0í<ö[¸¥ûNï-ÃcËÆpsëZš­ö„oÙ¿63Œz~bŠçÿáÿ§¯ü…ÿ×£þ_úzÿÈ_ýzè( þ_úzÿÈ_ýz?áÿ§¯ü…ÿ×®‚Šçÿáÿ§¯ü…ÿ׫_…?³/ãŸíögåÙŒä×>õ±EQEQEQEQEQEQEQEQEùßÿ:„Ïÿø`¨páÖ?ô¶Î¿D+óÛþ U(‡þ Að¼·ýÆ?ð:ξ«‚ݳzá«ÿ¦¦x|Iÿ"êž±ÿÒâyÏì¿¡LÚψ~wÁ¼»?øû×/ðKþHÇ„ì gÿ¢½'ö]Õà]_Äbçíwcëó½y·Á/ù#ÿ°-ŸþˆJúoªJxŒ:’Ù?Ê'ÈxwŠ·xÿíçë½Q_—Ÿ¥…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ŸâÝ^ïÃþÔ¯ô-*ó]¾²µ’{}6ÒHbŸP‘T•†7Ò%w (2: $n`2GÌ0ÿÁNuQáoŠš¾¹ð+â>‰aðzÎþoÜê¶„a´¸µÓSQ¿èú„²;I ÐmxÑÐFæ[ʬ`ìû7×e»þ»®èíÂåõñ©º);4¾(§w¢Ñ´ÝÛ¶‹sêê+Íl¿jïø³ÂwZ¯Â?xkÆË¦ë6Z£â ?³nn.b·)<:¢I¸Â[Í}»#G‘•Ã?<ã_ˆºÇ„<ã/ jÞ,ðúîÕ4[=ZÞ}GM7ÈæH†Y~òŽ£Ö©I7dÿ­ôÃÕIÉÅÙo¦ÛoÛu¹Õך~Õþ+ø‡àï…‚óödÒ·â_¶Å¶E¾©û‚{y7¶˜œ¿7Úr3Â6r»%øã¢xÄ~#ƒâ%æ™áíÂúE®±{­j:µ½¤1O-̼V›Í…SìÙóeD¼Ì#»$6ü ñ@ø¥á ?|2×4h:Š-5-2ò;»K•‚ÑÍp# žA¨¨•h¸©5é£ßõ·ÍQçÂÎ5œI­Õâî¯gÑèïcçÿ†h}Wà_ŽuˆžkOéâøGlÿáÓíÞOï?Ñ£ñmÄsàÏKÛä¸ñmÿ›ŸùæÿfSÞt¯eøKûE|>øûý£ÿ +Ç^ñ§öD‚+ïì-fÛQûœáeò¶ƒ€ØÎ¥ÿh¯‡ßµË/⿎¼áOS–lí5]fÚÎ{·™bXã•Õœ»G PÜQ€Î2t£+OÚ;5môÙ«¯=o~éŒñ•[©Aá`¤ÝÚäw­¢ì´Õy¾çˆ~Ì_¿hÿ|^±²ý£<Ú?…d†f¸¹>Ó´Ý®˜ÇŸŒ5\¶«ƒÐ²}áÇÁUô+ÿÚsÅ> øáÿ øŸÆZV¥i}â¯Úh7––—Zà ÛiÛ¦»¸‚5'P¸Šå“q:kaXÇÔš·íà=⽇€õßøJËǬ?h²ðôú½¼z­ÜXc¾+Fq+®#ä)FþéÆŒ?|3s[ø‹B‘.m®/!e¿ˆ‰`·`—© ÊD̪ì8BÀ1ÑR„jÒTå'Ë­ÝõÒï~–v~ŠÚ=UÓÌ«añqÆG£._u$ãSJVÝõi¦µIßKü1ý¡>'þÔºOÁ_ iž8Ô¾x‡Uðg‰[ÆÒiÚ]…õí¶¿¢^éZ}Ä)ö¸æ‰\Ïyœ+‡B6Jȼ^±û_|dø™û=êþ=ðçÄá;üð÷ÅItû Æ{}kT¸‹Všxnæ9-dtJR&GÊȸ!¿An|e¤YØi×wz®›®¯$PØL÷(±Þ¼£1¤,N$g¨\–íšÅñÇǯ|1ðöµ«üHñŸ…#xg\ñD:w‰~!M6ƒfž ‰´ë‰Ò¾ƒN’ÂÛí[ÆæÖFÎòË–'O·®ÿhOiŸ´ïë4ðŸŽukµÙørmbÝu[˜¶³oŽÔ¿˜ëˆä;•HÂ1Îâ=ö…øyâOˆòø'ÃÞ7ðmÿ‹£Ši¤Ðmµ‹iuHähåfµW2²+£¼2y•ZnZBVéÕ½$äÖý½Þö[ÛE²Ìéé9`—Yl’q’´]¹4QèÕ“i¹)&xOã_Åo:WÂÏèŸ4«I5ß x¿Z½ñOƒ­4ýYuŸì½KN·±xæ¹´û9sÛyí'3ÊTRŒœÇ„ÿlŽ~øaã[-foˆÚ÷ÄWŸ´ýô;x­tMZßû;dikÏ4.º“²K#q±—yQ÷ÅÏ^ýŸ´kMCã·Œü)à>úqiks®êÖút7XGÎê¶« çž‚¸=WöÐÒOí™eðcÂ6ºf¥¬¦‘·ª\Ë®ÚÛ5¤3›Ÿ)-íK®åÛhò:ª¨Ž9"rÇxÜW7Å«¼V®×qž¶ÛKÆ_öâÚú|w4O©EÓW›ºKÝS»\Ü©Ù7èü’´¬|·ðóöÀøƒ«|ñtÿþ9x/âuÿéÚf·a}¦kú†ŒÚ®· ê]-•…¨ŒÃ"´Q4~r1—{cËž8ñ6ãßY||øÕªéz?­£¿Žo´ýÒKkkÏKu ·Ìmœl·“Z#ùQ£ „ ¦MŒ>“ý¥?à¡ZìÏñ7ĸøuã¯Øø;ÂÐxÓĺ¶ˆtï³èšl³]Çç«z­ìıٳ‰Yv£¶BôF?Âp©òÔÚWi®ý$º]$•úû×½šz}nXvæð‹–q“Ó’é:q‹wPv´eÌÓI{êMlÞ?íOâ߈^øIïìÅ¥Äw y#H¶Õ7@Co&}[L²üßiÈ϶r¾kðÏâ¯íªü ñΡñÂ-iã=héÕKB_ÙÏâ¯í âvñWü/ß¶’,ôigѳá ?OûMèû‘þãÅ·þnç›ý™OyÒªþÌ_¿hÿ|^±²ý£<Ú?…d†f¸¹>Ó´Ý®˜ÇŸŒ5\¶«ƒÐ²}áôü-Ÿ ¥œóÜøA…-5´›’ÚŒ8¶¾” ŽÑÎì,ìfˆ,gæc"`Ã9´OÇ=/ölø5­øÏÅÖº†¡m¤$k„k%æ¥s,© ½­º3ÓM4±DŠH¤Q‘Và¨Z¤¦íßN®ï»×ÇO)R†©d­Yè½Ýt¿_3µ¢¼×µǀµïÙ«Aø³âé~ð^»§Û_ý·Ä7éÑØùÛ@†áåp‘ʲ7”P·ßFMsßo߆>-ø§üAñÇ‹ü'à¿ê÷º•µ…Ö³¯Z[ÛßÃg¨Icö˜fwT’)Y"ue$m¸Ÿ˜g¡Ê*ú­<΀ÄÊ<Ê›·7.ßkWo]¡ítWœêŸµ_æðÿçøsâ ø¿WðŸ%þ­¤iž °ûU¦"i'igXíw„ <ïK0‘¥ûGü>Ñþ!iþ×|sàûê²y6šúÕ²jW2ÖSvæO1ØG">•Ôô ”§mwüoÛ¹›ÂÖ_aõ{kd“m®ŠÍ;íc´¢Š*ŒŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿;ÿà§P™ÿ࣠ü :Çþ–Ù×è…~{ÁJ¥ÿÁH>–ÿ¡XÇþY×Õp[¶oOü5ôÔω?ä]SÖ?ú\O9ý—ô)›YñÎø7—gÿzåþ ÉðýlÿôBW¤þ˺¼ «ø€l\ý®ì}~w¯6ø%ÿ$cÂ?ö³ÿÑ _MâuIO‡R['ùDùâ¢ñVïý¼ýw¢Š+òóô°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¾øµñ?âdž>ü|OxëÄZÝý·Æ/ø#I7×–Z{hzmôš#K¬ðØ1Wc¬Kn%‘dxãÙ -$GÍú{âGÅydOÙ¯H×üka¨êÖ ÓíüA<º³^Ï¥ÚÉ,q\^És$j×)oædvTcnü´Ägx©5dÔ_þ%墒»Ùu±êâ2Š´#)9;$ºéÖÏ^k%k¶´éZ¢¾fÔÿà¡W~$:m§À¿Ùø‹RñõxF[ýpéún²4Ûi¥¿¿šå-¦x ŽK;è$S4­ 0ÂI¹z¶úücñGƒô=C—:&¯â ;Äój0µú\&•{ ê–ºeݲ: óãyî\Ç6)%¾Õ=¤wò¿ÊÜß–ýž]©”bèÇžp²×ª¾œ×Ò÷û^±kt{Íó‡Æ_ÚcQø‡ÿ—ñ_Åÿ†ëyá}[XøYyâÍ0G8yô©ßK{˜¶Ë´hد̀ \â²5ÛïÅ>Ò|u§ü]ð/†<7â¿ Øhšž—ksã '²Ö­µ[«‹[d{ˆ4÷–;Ï2ÊáM´6÷›ËXÚMù ¥UJRŒô·“óütØpÊ15#ͯÌâÕÒi§Õíy¥u·[#êj+åÏ„ÿðRûoø[Ãڗįê[¯Íà ~K™."‡ÃÚ‡Ù~Ñi+‹Ë[iþÏs¾Þ4y¡ƒÝ@6àœ?ÁS/î¼5à>ü;}_Zø‰¤j>+Ó-5 ûÛx°­îc†ÚíÞÏN»•f»K›YR„" I*•PéÖ„b¤övüb¤¿òWMz2ÖEŽ”ù=ž¾©-9º·k{¯[Ûnêÿ_×Í4ýŒüOâ?ƒ_µw‡l¯ôyñÖ}B]äšQ ¸ðýžš‚ðˆ‰LMk#,Iò#,JS»ý ¡¶ý•ÏÄýSM D|6<@úwŠgþÇ}8›q0·¿‘•þÌÊHG;_aål`ø7ƒ¿à¨Ú–³ðëÆw>%øgwiâÿëÓHŽöòÚ×V[¾ŽÊÒâÞãSÓìæØ%iC3[É…‚; •*r*’„·µŸ]]»´2Ú8êW­†ŽŠQ]>%$Öïnk]íª×Scâ÷ì%¬ø·âf¹ªü>>Òt½JßáôQ[öåO‡üE>¥u¹#„¨ m,QÂr˵¼µ¨ý”¿e_‰?h}CRÕÿáðçàºÄÉ¢iÞ ¸×Eýíõò]}ª¼°Š],gí$ÜÜDï8ÀQ“wÃ_ðPKíôÙþÑ^ ±ðtÚGŽÀ¾"½³ñÔt½âãM‚þÆãí2[ÀÏâîÚܳGI¥Eú½CàGímñ›ör±ø›¨é—ƒ«ZO¬Y$Òe—K ímv˵J­–9ü¬‚P¤’ K•6½µôÛéñ$õùYÛïZiµiãèPtjÁ8Ë•-žª<‘jͦùadìí{¦¹“~KûUþƾ&ø½ñGÆ~$ðÎárkFð­¦e}â+í âÞóHÕ5;ãp·––Ó4 {jñ0IC4n®pO¥þÌ üð÷ötþÄøÑâ :ÿÆ“M¨N/m’;ˆìÄ÷ÉoȶöâíâG^sFfFfPX×éÿðSmMø©ø§âOÃ+MG¹øgªüTðÜvÞ'ûeÙ-³ù±ý‘#³¸t½·;c–á±ÛnO_ûJÿÁB¬¿g]{ÄzEdž/5mSLÓ|5>™w«©Þkší…½»ùpÉ$I–%ä‘VØçdNÊÔ©ÆnWJW]V­´ôÑó^-wV²ß]+áóцTÓÕ4ÓOáP¦µ»½è©[Fõ•ù}ÞöýŠþ)| øõ§øïö¹ðüš¿‚_ÂÚŇŒ5=uõ»¿´ÛN.Ö »X ÓáÌW%m­‘U<ìüy}gíIûê¿uߎ×Ú`ð³Oñ'áM·t9oÙloc}aÚI˜BÆ8 j6mº2ìL,Jev&«ÿ"ñV‡ð^-w[øOs§kcÄïáË™5 ½JÓÃV±­ŸÚÆ¢ú“é_jKFR° ^Å@¹ÝQæžSâ/íÅñ}WâÖ¯£[é2ü:о é¾7ŠïÃþ(µšïN–xu¹çM¸:|±]ÔN4]JÒD¸°º ½D70@åz2¡SH¯ž|Qÿññäßþ_Úêú.³ñOÃ^/½ñߊ#þܾÑtïêZ…­Õ½ÊÁ¨[Å%Ͳ[¥ÚÇlæ'"hâe‹/«~Ä¿¶ßíhšÒø“@Ðü'¨i°ZÞc&»-Öµ§Å?™¶=RÂ{;ilgSR M`á%}„ÖįÛë^ø}ñGÅ6ëðòÚïÀ>ñ†àÝw_>!ß%ƧšÐKm§ý˜‰‘$ÕíÖMóFB‚È$9Asöu5oâ¶»í%¯þ£{颾Çæ8IKN+Üm¸Þ?j<^êüÑ•’‹½ß»ïþþÁÓxOâ½oƾðM•—‚tGs¥Çª]kßeÔ5NÆñg¶º½·G”•‚óÌ‘„D4ûQ61 çw¿ðO¯‹Z¿†~-ø_F›Á~ð‡Œ¼)â­+OÒ£ñÖµkuªjò#¼iÓ’}*0ï;Í SÜ£4ß*-I—ÿðQo|9Òb𾋠Ëñ Æú¯‰¼szƒQ¼½¶¶²ÒtÏÜØÅ›eay)“[CU6ÆÅåBIÓ|tÿ‚©MðjÇÃÚÊ|>¹¼Ðî|9§x›Ä–\_§‰¼)mvÍŸµéÖútð[ùJ®Ì÷wv¨LR€NÂL^•EŸ•—÷¯§¬ü“Zô=ÓÍéWj0R—3jîú¤½äœ·r”’rWw÷uÔ‡Ä_°§îþ*x†ÃL¹ðW‹þ#h_îüCy{qý¿¤É¦®œ~Áof-Œr«)#Kƒs—Ô£Êb£Kà/ØkWð†«ðúý¿áKï |ZñG5+˜7‰®¬uA®,1«ù ¼àj–!ÕˆP!p¶&íGöûmö«Õ|âßé^Ðô©$†=GZÖ¥±Õ5£‡Û^}2Áí<›ëp»£-Ù”4Ræ©“Wö,ý¿õÚ×Äö1ê õ?xwÄžÿ„›BÕÒKÛˆ¾ÌZj =…¼6÷OÌR$vòÝÆÁ'Ä¿»ô¡RœšŒßåe/º }]º»œu噬3æŠTÔSz­T¡('¾­Å»¥µ“²ë©ûQþÏþ9ñÇÏ üFø¦øÅWºo…µoÜè~,Ô§Óì’+é­&û\rÃirY³¼&5$ŸënŸ±ïì_©~Ì>2±›UÔô½fÃJøcá_Át‘´wsÜé-©yÓ´dn—°mF?+‚U-ÄÁEÿlx;ÀŸ¼5û4è–‚óÀ çˆ_‹¥¸òÂÙ-¦7“¢ZÍ3#µº#Q#;:~Ùº¯€~+x“þðÖ¹ãmgPø•oà› +­bÖÎÚÍÛÂÐëHŸÈS¸Tº¹š]ï+!`c„:n0»í~Ï»]¿š£×]û%bTs ˜Ò´y\]õWå‡%Däïee$ÖÍ«Þú~-ÿÁ=4¯ÚöÄñþ4Ë{à½SÁZ_†—F±ñ¥§.¡-½î£<é¨ÛZÉ7–Íä*#˜Ê§÷  çä¼Wû xæïâç‰tÿEàGð‹þ$hç×®®ç]wFm4iÄiöÖKlb‘XéINncòâ¹”yM´oÒ¶ÿ‚’뺇ÇÙ¼%£|/¾Ô´ÍÄñí…ÕõÝÖŸ©\Ãm$¯ozq¶šÎØÞÃæÏ-Õ¼›Vg‹æb|dý¼>'ø³öGøÃñö|ð>¦øOú‰G‡|Oqâ5mMnô³q]K¥Ibñ,^u­ÃD¦iYÄq‰#ŒHÞ^PöT’«O¥ÝÒ½ìÕOž¶qï²m])fîp„¬””"¹¤­¤¡e}%îÝ«]Ù·b¯üÏâˆ4ŸŠžk¿x7Àž3ðÇŠ4«]:Û\¹ñ 3j:¼¦D¾Hî¬"›LEwžIm⹞7y€P¾Z“ÕøÃö5ø‹ñÁ'ñ݇ÃÏxâÂh< gi¦ê—7Öv7Ñ6¶<׸{(œ@éªZ’V2À‰WkV“Ð?jŒ?>Á;~%xâÃNÑü=ñ ÃþÔõKXíu1¨[XË ¼s¬ÒÚ*ÊÊŠ%òÞ¥‡–NÓ¾¼wâ?íŸñàoÆ_ˆšß‰| ¤kZ‚þh¾+×ôˆ;g…õyßÉÂëQ}¦xáq(¶O È<ã$>—û`~ÌúÿíCªü;Ó4ÏáO xkÄ â]^æÃÊmNââÖ66À—ó[”[—K‡iàÛFImÉÁ_ÿÁHï¯i-CÂ~j¾"ðÎâ[/ kµ³^½ô—1ÛHÓCkƒÛ=¬öÜÍ$·Èª³2ÄÊŠe£?üGÇš§4­?Á_ô›Í;Å~-×| áÛË¿‹i.õ=*[å–K¨VÉþÏhñé—.$V–PÀ/’C):JìåÍ¥÷¼]üµ³VêôÑiÏìs>juœbœ ¢®á¤9$Òw{¨)=uI]ô0´OØâGÁ›- ~jžñõ·Ã¿ˆÚŒ|3aâ­A¬Ž¡m©ØÎ·Ky5­ƒGms õýôд0:yLX•Úøûx¯Â÷u‹ëà‹›ßh~8¶Ô-ìåšîÞÚ÷^Ö-oám5º QEq 3`T+b=¯ö}øù}û@þÎqxÇOÐbÒµÒuôyu2}FÆê{9àKÏÚ-¤U›Êå0Û?†¾tý›ÿoo‹Þ3øðwJøkÆ?|mà$ñ´ò\ø³û.ÎóN† ’êI"ÓYa»žæùUm#ÌgP—(SŠ•)^ÖÚÝ9\z-ÔbÛê’æèÙ¼kfx¯h­xÉ©]¤ïûÆïv£kÊm½5–íY([þ ‹â«OÙ›@ðv‡yàË=[Oø«ü*½’'š;k­Vî+Áeƒs[+Û]1v_3÷ù’Í]Ï‹ÿagÄWîíÏ…?´¼]ñ3Â^2°»“ –ºž)$òK,§û.ûËU,¿¿L²o}½ÇÿÚ«SÖ¿à—>*øÓû8¤º~¥{ðêhFüD³iûì Ìo"–6’%;¼²“i;[pòŸˆÿ¶Åÿ¿~"k~%ð.‘­h^ øi¢ø¯_Ò ñ‰X4x÷^ûLöNÖ ÝÝKoiyL&`Úe)}çQS¨£%¬|´W”ªn¿¼Ÿ¢hT¥™âàªEÆêRI6“¿=­ZêáoF·i?®¾¿ŠÜëŸðµ#ðô`j³û*IŸvòù&çÍQ‹ƒóï ”`žk¡¯–/ÿà¤w׿´–¡á‡¿µ_xg@ñ-—„µZÙ¯^ú ˘í¤i¡µŽÁížÖ{nf’[ÈdUY™beE2úïí5yâ›?hÇáÐ×Å“jJºÜš 0KªEiåIͺN “æùA¶‚áI*)BjPR‹ºÑ_î×ñ½öì|þ/ [ Ó«^eÌ’kmöMÙù=OJ¢¼'Â_žßBðüñŠ’¢¹¸>&ÚEð‘|aâ+kÝ"É4¯ík›{ÈŒwh"ó$NΣ Q^û:þÙrEàŸßüX×ì|Kq¤éxªÓš"öÐ\'ͧ€‡à™DycŸÞ©$v}Zíý~ü½µI®¿×ê¾óê:+çøþ=xÇÁÞ1ñ½ß¼?nn­-|; †…i­y𽻸·Ü.å™ ¤~è|Ø9zgíMâ5×Þ×Å^ ²³´Ó|Eká­Væß]g¹¹ò¼— fý" ż²7œÚhZË•o·åþk樂Ö×ÿ3Ûh¯Ó¿h-xOk¥xÃÒx“SÔouöSÖc´[xì/ÄoKs•>j„]¥” Íó=zÃÅñ;áÎ…â;$µ‡]°†ý!†h„ˆi#‚FqŸjQ|Êëú¿ü3Õíëø´QE1…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~wÿÁN¡3ÿÁF>*ø@uý-³¯Ñ üöÿ‚•J!ÿ‚|/-ÿB±ü³¯ªà·lÞŸøjÿ驞Ⱥ§¬ô¸žsû/èS6³âðo.Ïþ>õËüÿ’1áûÙÿ脯Iý—uxWñعû]Øúüï^mðKþHÇ„ì gÿ¢¾›Äê’ž#¤¶Oò‰òÅEâ­Þ?ûyúïEWåçéaEPEPEPEPEPEPEPEPEPEPEP’è¿°÷ÃmãÅR[iZÝÇü&¾"±ñ^®—¾&Õ/c¸Ôìî"¹¶¹Hç¹u€¤–Öÿ,A’£ehÑPu¿>^|_øã è7öZ]ç‰ôk½&+Ë»©ž‹Ì{feß„€ØÁà×[Eg:P7I¯u«[Êַݧ¡ÕõìC«Ò›rM4Þº«[{öKÑ%±ä’~Än~x/áÅÆ›¨A ü>‚Ö-ãNÕn´½KKx 0,Ð_ZKñHѼŠìŽ ¬²Èb =oþ ùð£\ð„ôOøGõ>ËÁ)u–úf¿¨é÷B;§Y.ãžêÞá&º[‰d™gyÎ7ɹ¹¯g¢Jpªäçï«ÓqÃ0ÅSIF´•›kÞ{»Ýï»»»ó}Î!?gGû:¦Mÿá>þÊû\ÿò 6ÿfò<ÿ3ÎÿUòïß¿¾ìóXÿÿc‡'Õ'ø‰¢]O{«[iV³^Zj×–Q.™u5݃Á5¼ÈöòC=Ìî%ˆ£øfeO¢®^û¼µ&ž3J\Щ$ï}ÞéßÖñ‹õIôGIû|'¼øâ†:×…äÕ¼ã[“{®YêzµíüÚÆ!ýü·sÎ÷\Û@Þ`6ä Ù'câ÷ì“à_ÃÃïã?U±¼ð¬R[i7ú¹ _ØÁ"¢Én—Z|ðÍ上-З(Æ4%rŠG¤ÑYºPk•Å[EòZ%òZ.Ý XüR’’«+¦Ú|ÏyYIï¼’I¾¶WØã¼OðÂ~5øwðÛźQÔ|}¤âÂâîwim ~^Ƹ/çnÛÿ-wù™ù·næ¸ÿþÁß |¦jvÖzF·¨¶µ}¥jW÷Z¿‰uMVöòãLºv/%ÍÕÌ’·“2«Ý´€A¶½†Š·åÎÖ½ú÷üɆ3NÎ5$£{Ù7ké­»èµòG‰þÓ±‡?h?ƒþ=ð… ·Ò-¾*k—‹&–½:’Aö(¥XÑä i§ÃȘ°…. >Ëm¥ÛYé‘ÙZÁ vqD Hch@½1Ž1éSÑIB*úoo¹h—¢è‰©Š«V§97¶×“j)þŠôHù¿ÂðL_‡Ÿ¾)\j>·»_ê¾ Ô¼©ø_PÔoµ;IínçµuŠßíW.¶VÑÇñ‹h#Äüc`½¡ÿÁ8¾è~ñ•&¬êø²ÒÆÏS¹Õ¼OªêWÒÇc4“Yîînžh$·’gx¤‰Ñã! °Ø›}ʼÓö¯ðïÄ_ü,ß²þ¨t}¶'3V×LýÀ ½|ë­'S’Wåû6N8uÁ ŒãN=!t´²Jörmú«É¿#¾žaÆT9b»Z¹4®¬Ó“ÝÚ²ìŒi¿`ÿMàø4SsñRÞýõ%¿Oˆ¾ MU¦x–ߨ ñrñ˜ÑÊi ch!A¨uÿø'—Â/ØYÙÏá{›+ ? ¿‚ ž›­_éö×z3E4BÎæ+yÑ.Qæà¡”;FÒ³£+ÕÈü3øuûEé¿üseñÅuã[Ñü#—_ð•éweÁýçúD~·Š ùëeyžÛ:Òþοh¿·Š¿á |Pú¹Ñ¥‡EÅz]ÿ‘|~ãÿ£øJÃÊÇ÷ßí(;ÀõðRþÚ÷·dì½m¢^vêv8âéÆsXÕîÊÚTww³mwWwoÉö;ýgö øiâ‹ñxãTЯ_ZKÛmRHY¾M.êúÙ;{Û5g“ÜıÄy"iʈ†4+WâgÂoƒŸþYê_‘ᯠx{ÄwÞ"‚óSÖeµ·µÕ5V»†âS+Ê36­x‚6%Î6*•M¼ìÅðÛö“ðçÅë¿ÚGÅOªxQ!˜\[ŸiZˆw(Dgȶð~!Ã`ä]&:•qòœŸø(·Á~Ö|ðïÂ~ Ò,ø¦ãÄ7× úé áù"×¥ÒÕµÙ¦€¬ºPRFØÑÆŒ‚©„éòß•]ôôQüR•Ÿf¤º áñÔé{Zx©|.Ms4ìã)·¾±”¢•þÔÚV¾ÿAŸØÛÀücO_Øë·ÚÜ7’jPAyâ=JëI´»xÝ®`Òå¸k8f1I"y‰ ¶$~rÌJ|ý|û9ëíðŠÏÄz­³ÙÚØOâmNûKÒàwWhl¬..^ÚÎ=ȘX#@¡B®b¾:ðÏ€¿h‡ü-¬|#Ôþ-êŸümð7T¿×"ñ-ýÕìV^'…4ƒh‰oy˜,.ñs©*B1#FLŠæ6j±ñQµcð“ñþÌ·´ÌßÅMâ[?\ë±ÁýŸqåý‘Hµ–·û`´óþÂáè ~x*R ykÓ¬œwíevû[CG—Wª¹)Ê.ñÒïH]Ù«îÝÕ(ý·…ŸX|}ý„~~Ó^&}[âþ«Ý^\YE¦Þ?ÄZ–“«m,PÞÅeq]¤o$Œ‹0p¦GÆ7ô‡ögðCx÷þs¢Äóþ!âÏ´ý²ãþBcKþÉ<ÍŸñãû˜Ùü{wüõòŸ„¾øóâÞ“ð¯ÃÞ.ñ‡ÆÛÏ ÇáOÜÞjvë¬xJúââ=KND7¬ò Õ‘-Þáb3È&¸X]äߺU<Ç„ü#ûCøCàm†³ðÂûâ~£ñÇŸ¯5m^?Ý\\Caâèÿ³¾Î[]bßO¹+u¨n«1…w©(ÍWr7Ë +7Ñl¥/½º{r!­Z*—×-¼m¨¤åÊïw¤ZÚåÛ•5®Ÿ]kß±‡Ãÿ|b—ÇsXëÖ> ºº¶¾½o‰u=:ÃT¸·!šòÂÚå-näEŽ5ß4NJÆŠI ajŸ±—ÁŸ x»Q“ÄOjßäÔ4×Ðï«=ôI|–ÚCÜýO4Iu, "BÎO.Çæ/‡:Oï~ ø¾ÏáO‹>:\Zêž ðdÛê>ñ>©èé&· z´Öךô³ÝÊ͉™c&Þ‰œcÌ’‹µÏø·O‡Ç_ð¾µÏ‡¿ >2´û»-G^Õu¨4kÏ•y¡žÝÞúò$Õ/5 ­y£ÜH¢9!$½Åo•µpRé³O~©kbéa+¹JZâ—¼¥îÁJ1åm;óIEG¿7+Úÿlh_³Ï…t?×'´Ôu^XÜi—6šÞ­w«Ëum8u–)nnå’i¬Œ 3«…\æô_Ø{á¶‹àŸø}´cRÓü]áµðŽ°Ú§ˆµ-FêûKW¼u¶k›‹‡˜:à®,CHÂÜý©ü=ñÅ #¶ý—594ý®óÛU¶ÓÈ·©šïIÔÓ'+ò›mÇ}pCy¯Ã?‡_´^›ð/Ç6_¼P÷^5½Â9uÿ ^—qö\Þ¤Gá+x Èÿž¶W™í³­Tê¨Êo‘Ý-í½º.û½=O/ EJ*¬qJ<ÓZ9´ù®½ö¼Ÿ6ú_¡èZ¿ìUðóWø¸Þ7õ†»=Å­åÚé¾&Ôôû N{`‹×–÷)mw",Q.ù¢rV4RHE_Lý—ü £ÝhiÚŽ_ ø‹Rñ^˜ßl¸o²êz‡ÚþÙqÌŸ?™ý£yò6Q|ß•WjmòÙÏá×íáöñWü4ŠR:4°è ø¯K¿ò/Üô XyXþûý¥xªþÌ_ ¿i?|^±»ý¤|Tú§……Źñv•¨‡r„F|‹oéÒ6EÒc©W)têFê* _]´Ný|ýÔþãJØjñ…H¼\Z‚JÜíÝrµh®©)8ÛÍ­›>ƒøwðÏCøOávÑ~Ø.Ÿ¦5åÝù€Hòƒ=ÝÌ·W—b~y§•ñœ Øò#ÿÍø?„´ýNÒÚN±©iþ.ðÚøGXmSÄZ–£u}¥«Þ:Û5ÍÅÃÌFðW@¡‚¤a}jЦ”¤ä÷{¾ûÿ›ûÙÅ×¥XTi^öMîšiú¦“¿t»S«þÅ_5‹ãqa¯Xk³ÜZÞ]®›âmOO°Ôç¶°Myaor–×r"Åïš'%cE$„P;_ˆ_ ´Š–qx¶;ÒtéþÓk5ýÅŒöòmd,²Ûº8ʳ3ƒšèh¤¢¢¬—ŸÏ¹+ԭʧ&쬮ïeÙv^G#áß^𭞦2ÿfj2jðË-ÔÓL÷rDð¼óJî^g1Êë™ qî®1¡ý”<i¦ÙZéÖZ½ši’HöR[k·ðOd² 2¤áã„„_Ü©ä·<×£ÑTdsú¯ÂÍ \øv<)¬Y=΀ ŽØÚÉq)/eJ«É»{”gsÃ!² Ë|að›ÃÞ>¿>/Ó"½˜i÷:Q,îªö·<Ø™U€eo- •#+ƒšè¨¡ûÛ‚ÓcðïìÉàß Ã~¶V…ÃjsY\]K{«Þ^K+ÙËæÛ~òi™€À!Aô Ž+bãàï‡.¥¾yôÐÍ©jÖúíÉóåeäW•/ÞãoÙáùFíäœôÔQ}o×þü—Ü»¿¯ëÔæô_„~ðö± þ§ù7væøÇ'Ÿ+mûlë=ψ;åEnGËŒ.ÑÅjxO¶ðÆŸ£xZ²éºUºZÚýŸÊ*®æ%Ž$“ZP´Ñº…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~wÿÁN¡3ÿÁF>*ø@uý-³¯Ñ üöÿ‚•J!ÿ‚|/-ÿB±ü³¯ªà·lÞŸøjÿ驞Ⱥ§¬ô¸žsû/èS6³âðo.Ïþ>õËüÿ’1áûÙÿ脯Iý—uxWñعû]Øúüï^mðKþHÇ„ì gÿ¢¾›Äê’ž#¤¶Oò‰òÅEâ­Þ?ûyúïEWåçéaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ÿðS¨LÿðQ† ‡þcÿKlëôB¿=¿à¥Rˆà¤ ËЬcÿ¬ëê¸-Û7§þ¿újg‡ÄŸò.©ëý.'œþËúͬø‡ç|˳ÿ½rÿ¿äŒxGþÀ¶ú!+ÒeÝ^Õü@6.~×v>¿;×›|ÿ’1áûÙÿ脯¦ñ:¤§ˆÃ©-“ü¢|‡‡qQx«wþÞ~»ÑEùyúY[VA% YeicFõ¯•ì~4ø®æÊ$Ö@iXãO´ÆHÏüñ¯ªu?øö_úëþŒZø¿IÿU·ýrOä+Áϱ5pÔàéJ×g‡žbjá©ÁÒ•®Î³þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüf¹º+æµqóñŸ5ý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¢í\_üüaý©‹ÿŸŒé?áqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆk›¯)ý°>>ê³ÿÂë{ÏØÛê¾(Öõ}+G²D¹žFèUXüªØÁ1_ZºyŽ6¬Ô#QÝ»QÇã+ÍB5Ùï_ð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã5óGÂ_ÛcKñ?ÀÏø›ÇÖ²Ûê~&ÖãðÅŵŒ[–ÓQfuÃ+¾R2?%˜^µ[öƒý·­¾ü8ñÕÿÃÝ&óQÖ<©ÛiW)un~ȲJAÞ̸G´0Üq󔿷úÆcí=Ÿ;½íåº_uÚ×ÌÚ5óÏÙ©;Þß;ÛóLúƒþŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüf¾^¿ÿ‚„øoFÓìPð¯Ä j}=õ;Í.ÛD?jÓmn'Gu  Ù'iR@ ¹ï¼IñÊÎÿölÖ> ü,šÛR¶‡C¹Õldo.FŠ'`²(*à …YrÁ¦¦+0¤¯94¯oëîq?ZÌ/ä×3²=þŠ¿è3ÿ”û?þ3Gü.?Ðgÿ)öüf¾øû{øËÆ_¼¥øüü6Ô´ßÚMs(ðõÄæóBÆd&õdwXÈå};†9ôÏÁA|ã_iúm´zý–´× ¥ê÷¶K†¤`ÿX"mæAÿE玸Zµ3*NÎmé}>äþæ]JÙ6×3z_OŸù?ºûJÿÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×Í^ý¾|'ã­?SÔt Æ­¢i¶WwÃU}, +”¶FyH$%X„m« BOT>ÿ‚ˆxÄZ€‹Z¶ñG†íæÒ¤Ö-o5}0Áoj]ÌYŒ„nƒ T…$àxŒÉ_Yi¯õ÷?¹“íóu–‡Óð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã5óG„¿à ~ ñ:_}¿Kñv„öú4ÚýšjºjÛbÎ$gi-˜Dƒj3 •Èät8³ð·öïðoÅ_ÚèÖV(Ñ¥¿ÓV³¸Õ´ï³[ÞÀ€³´M¼–ÚÎìm; iK™Fí¹i«üÉýÌ%ˆÌcvÜ´þ¿Sèïø\~*ÿ ÏþSìÿøÍð¸üUÿAŸü§Ùÿñšù·À߷σÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3¤ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ®nŠ?µqóñ‡ö¦/þ~3Û?fïê¾/Ö54ñ=ÚÞ}ŒÛ˜OÙ¡ˆ¦õ¹Ü?v‹œùk×=+å?ø)Ô&ø(ÇÃCƒÿ±ÿ¥¶uôÇì—ÿ!ísþÜÿôºù»þ U(‡þ Að¼·ýÆ?ð:οaðꤪc°ó“»p©ÿ¦¦{¥IUÉœæîß/þ—Îeý fÖ|Có¾ åÙÿÇÞ¹‚_òF<#ÿ`[?ý•é?²î¯êþ ?k»_ë; ÉðýlÿôBWÙøRSÄaÔ–ÉþQ>wø¨¼U»Çÿo?]袊ü¼ý,¯©ÿDzÿ×Xÿôb×ÅúOü‚­¿ë’!_hjñì¿õÖ?ýµóͧìâË[X¢ûG‡[Ë@¹û\Ã8ÿžáç˜:ØÈAQÚ}ÒüÏ:ÂUÅ ”nÓòýO=¢½þWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ¯œþÄÆÿÏ¿Å™ó¿Ø¸Ïù÷ø¯ó<æŠôoøe_Ïoÿàdßübøe_ÏoÿàdßübìLoüûüWù‡ö.3þ}þ+üÏ9¢½þWÅŸóÛÿø7ÿ®GÄþÓü®O¥øÓÇ¿ ôN×oi{âE·ž-ÊwFñ†\«+ ŽA½ؘßù÷ø¯óì\güûüWù˜ôUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔUœøoþŠÂü+"ÿâ(φÿè§ü ÿ²/þ"ìLoüûüWù‡ö.3þ}þ+üÊÔWAàÏCñT’Çáç>ë×±Dg{};ÄêTŒ¥ÊG!AeÆ2Àw®›þWÅŸóÛÿø7ÿ£ûÿ>ÿþaý‹ŒÿŸŠÿ3Îh¯Fÿ†UñgüöðïþMÿÆ(ÿ†UñgüöðïþMÿÆ(þÄÆÿϿŘbã?çßâ¿Ìóš+Ñ¿á•|Yÿ=¼;ÿ“ñŠ?á•|Yÿ=¼;ÿ“ñŠ?±1¿óïñ_æظÏù÷ø¯ó<æŠôoøe_Ïoÿàdßübøe_ÏoÿàdßübìLoüûüWù‡ö.3þ}þ+üÏ9¢½þWÅŸóÛÿø7ÿ£þWÅŸóÛÿø7ÿ£ûÿ>ÿþaý‹ŒÿŸŠÿ3ÎkÈ~?~ÉV_´oÄÏ j¾?Õî‡ü1Ähð#Â÷3ÉŒKö”•Y6•Œ€?!ç“_RÃ*ø³þ{xwÿ&ÿãÃ*ø³þ{xwÿ&ÿã¥,§FJp…Ÿ¬z«w4¥•ãè¾hBÏmã׿|1wÿÛþÇÐu]3áŸî´-=¼EiâmÓþÒt{˜ÐåÞ\Ì:òpG–¹ÝÎvbý„.µO…ß4øÞmgPø‹so{>¦4¤¶ki¡*Ê|¤“k‚Ê>Q³Ž:ó_gÃ*ø³þ{xwÿ&ÿãÃ*ø³þ{xwÿ&ÿãÒð™«Vqíü·ÒÖײ½m©ÒðÙ£i¸êþÎë_ÏSâ]KöñŒºÈ×4ŠB×Ä·ÚøwU¼>‰¢½´$lÙšNªnçh?/;½3Cý›ì<+û/ÏðÇÃ7ÓÃg.s¥­ìщ\4êûæ(ç•›nG¦{×Ñßðʾ,ÿžÞÿÀÉ¿øÅðʾ,ÿžÞÿÀÉ¿øÅE\eZ<²†›ý•ß·k»z™Ë™K–ñøu_M¾í—e¢Ðø«Iÿ‚yYx>÷ÁÚßÇ¡êú›ý‘­M–&¶eÚë<+2ív¾}ÌßtõE"‡Âßø'T¿ 5ë3¡x£C›KÓn&¸µiüg&¬»•Â+_“¼ìf £;vð¼¹?á•|Yÿ=¼;ÿ“ñŠ?á•|Yÿ=¼;ÿ“ñŠ·…ÍZi­ÿÃæÿWn×пªæœ®.:Û¿×Sóõÿàœ·ÞÓüQ¯Øk–š®²þÔt«K EHQ–ky#tYZ2Iq…UEÜÿ2ü)ÿ‚|ê~9ð/‡¥ý¤!ÑÿàŸú¥ükÿ GÇòkÒi>¹ð¶‚cÒÕ4è¦àódU”™˜#ã®p2Ùæº-ö,}_øu¨Zø©„¿´ þ¯Âq7öo‹ôæƒGºÓ4ûëZYêòÊ›#¹–éÌ•£‰ó–9æ¾Öÿ†UñgüöðïþMÿÆ(ÿ†UñgüöðïþMÿÆ*¥†Ífš”tjßcmÍ•,6i5iFëþÝ<ƒáç‡oü%à}+LñF¯6½¨ØÛ$7Œ±ùoxàs#.æÚO¦OÖ¶kÑ¿á•|Yÿ=¼;ÿ“ñŠ?á•|Yÿ=¼;ÿ“ñŠã–MŽ›rt÷óùœ_ØØÇÿ.ÿþgœÑ^ÿ «âÏùíáßü ›ÿŒQÿ «âÏùíáßü ›ÿŒTÿbcçßâ¿Ì?±qŸóïñ_æyÍèßðʾ,ÿžÞÿÀÉ¿øÅðʾ,ÿžÞÿÀÉ¿øÅؘßù÷ø¯óì\güûüWùžsEz7ü2¯‹?ç·‡ð2oþ1Gü2¯‹?ç·‡ð2oþ1Gö&7þ}þ+üÃûÿ>ÿþgœÑ^ÿ «âÏùíáßü ›ÿŒQÿ «âÏùíáßü ›ÿŒQý‰ÿŸŠÿ0þÅÆÏ¿Å™ç4W£Ã*ø³þ{xwÿ&ÿãÃ*ø³þ{xwÿ&ÿãbcçßâ¿Ì?±qŸóïñ_æyÍèßðʾ,ÿžÞÿÀÉ¿øÅðʾ,ÿžÞÿÀÉ¿øÅؘßù÷ø¯óì\güûüWùžsEz7ü2¯‹?ç·‡ð2oþ1Gü2¯‹?ç·‡ð2oþ1Gö&7þ}þ+üÃûÿ>ÿþgœÑ^ÿ «âÏùíáßü ›ÿŒQÿ «âÏùíáßü ›ÿŒQý‰ÿŸŠÿ0þÅÆÏ¿Å™ç4W£Ã*ø³þ{xwÿ&ÿãÃ*ø³þ{xwÿ&ÿãbcçßâ¿Ì?±qŸóïñ_æyÍèßðʾ,ÿžÞÿÀÉ¿øÅðʾ,ÿžÞÿÀÉ¿øÅؘßù÷ø¯óì\güûüWùžsEz7ü2¯‹?ç·‡ð2oþ1Gü2¯‹?ç·‡ð2oþ1Gö&7þ}þ+üÃûÿ>ÿþgœÑ^ÿ «âÏùíáßü ›ÿŒQÿ «âÏùíáßü ›ÿŒQý‰ÿŸŠÿ0þÅÆÏ¿Å™ç4W£Ã*ø³þ{xwÿ&ÿãÃ*ø³þ{xwÿ&ÿãbcçßâ¿Ì?±qŸóïñ_æyÍèßðʾ,ÿžÞÿÀÉ¿øÅðʾ,ÿžÞÿÀÉ¿øÅؘßù÷ø¯óì\güûüWùžsEz7ü2¯‹?ç·‡ð2oþ1Gü2¯‹?ç·‡ð2oþ1Gö&7þ}þ+üÃûÿ>ÿþgœÑ^ÿ «âÏùíáßü ›ÿŒQÿ «âÏùíáßü ›ÿŒQý‰ÿŸŠÿ0þÅÆÏ¿Å™ç4W£Ã*ø³þ{xwÿ&ÿãÃ*ø³þ{xwÿ&ÿãbcçßâ¿Ì?±qŸóïñ_æyÍèßðʾ,ÿžÞÿÀÉ¿øÅðʾ,ÿžÞÿÀÉ¿øÅؘßù÷ø¯óì\güûüWùš_²_ü‡µÏûsÿÐnëæø)Ô&ø(ÇÃCƒÿ±ÿ¥¶uõÿÀÏ„z·Ã Nú_I§?öƒÀ± Y^LyipNíȸÿX1Œô5ò?üªQüƒáyoú5Œàu~»áÝ9ÐÇP„Õš…_ý53ÔÍiJŽNá5f¹oÿÄóŸÙB™µŸüïƒyvñ÷®_à—ü‘ÿØÏÿD%zO컫Àº¿ˆÅÏÚîÇ×çzóo‚_òF<#ÿ`[?ý•ö^'T”ñu%²”Oœðî*/nñÿÛÏ×z(¢¿/?K+êñì¿õÖ?ýµâzüWá·Š>)ÿÂ-á‘ã}DoKáíëoj³xxj‘Ja’Ôê«nmƒ,ÊЗó<±*˜÷oG¶jñì¿õÖ?ýµðgƒþü^ø{ûK[Û~Ë^ ø¿ð·@ºñõÆ·â5Õ¼]¡kµ]>âù§Ô'µµ’yµKiîQ¥–8-â´Ž;‹†gÊÞCÞ«½Ÿù¥«è¬ßFúÙ¤ÐOJr’Ý|ú>‹[ÞÞ[Ý­÷̲bgláA'Ê|øÑ¢üwø'á¯øí²è,Ñ­µÝ5xšÏÃ?ÛøoÁ_¼Yã[ï?ˆ4ÖÓ/ô­NIf°[‹£x쯫YÄñÉÝ]è7¯†~Ì_²ž•û*ü1ðæ·ûXü&пgßøGá5ǃþ(ë>.×´OìÿˆÚ¬ßÙÑYkKéÖå!{[¯.K¿*Dû\p„;ªçV~Μ§åu÷IÛïIYÙöNæñ¥>Nm¯ÿo5§É'¦šêÒW?Süâ»xGIÖ´ø5+}fÒ+Èmõ)lo!Y8Ií¦U–@8häUt †‚+EäXÁ.q€Oà+òOØCâOÇ„¿Ïâ߀|á]O\ñ€þéÚFi-õõÜÚ¢ÇkH^Iù|*ª±'ÐWÆÿ‡ˆÿà¢?´÷Œ¿güAÒ<3ð÷á'Œ|<5øróÃW^&Õu{{d·Óìí5ṑ"û+Hó4b!#FªÅƒmâ¬4_~Üi{ ÃðŸâµ‡‡ ý˜õo<ž/ðÍÞ‰oªk²½†-.‚8•‡uPÿ3FΨÌ0•IrJÑ÷”[ë­•i-7×ÙÅo«¨š²i:ЦªSR—»)%é­$õÛþ^I®Ê ;µ&¿@<5û<| ñ‡4ý_Ãøy{¦j¶ÑÞZ\E Z¸†EާËä2°#ëWGì¯ð´±áÇ€IGü#öœä:òÿø&?…ü9áÏø'¿¬¾xSøZŠ‚çBÕ<5?‡®¬uO(-ËOiÎ#$cÊòöü¸¯(ýŸþ6êŸðOOü]ø[ñoàÿÅOø£PñljÃCYìá7ï5ÛÆ%ßÂëAÝ‘\Wýžþ(ü7ý¡%ŸRÑeéì|sâYü3£xˆøwHº‹T’ÞòòÎâæKh§³¶Ž[̳¢²Ä@˾#ûÁ*m~~Ñ¿³¨ý£¾iZæ¹à?7N§®¾Ÿö»M;V[ûª]à¡’(&½Š<˜¼Ý£i4~Ê¿±þÏ?²gÀ›…¿ ïü#ª¿Ç›cÄ–ö:,¶× c£­%½Íâ °-³Z*HøAˆ´­o(Â*›_j|½ôu;»[h$üï}š¶NWF·Qæíª¥Ïe~ò²×U¶ë_½¿á•þïÛÿ ãÀ;±œÂ?iœߺì¯ð¹˜ðãÀ$Ž£þûN?ò|Gûü(мû^xøþÓÿüuyûH^xóÄw¾øªxRûWÓ—G›íM¦›=}c’ÖÆÑ,-¾Èd„¬›“É,Ùo:ÿ‚!þÍž4øQûBiŸíÞ/ð÷ÄÛ/ êZOŽláN«¥Ãâ{滂A¨jÞ,’öâÃ]™]%kibÚæ;©€XÀh×V©ËwkÇ›ðn˽ž’Û•½Mj¯gÍnŽß¯èÖ±ÞëåÒ/øeO…ÿôMüÿ„ý§ÿ£þSáýá?iÿÆë½¢‚N þSáýá?iÿÆèÿ†Tø_ÿDßÀ_øOÚñºïh  þSáýá?iÿÆèÿ†Tø_ÿDßÀ_øOÚñºïh  þSáýá?iÿÆèÿ†Tø_ÿDßÀ_øOÚñºïh  þSáýá?iÿÆèÿ†Tø_ÿDßÀ_øOÚñºïh sÁ ü/ðÊòè|6ðÞƒáï¶¢ý£û3O†ÓÏÚNÝþZØÜØÏMÇÖº:‹þ_àÖ¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷¿ñóiÿ]Oþ‹zü÷ÿ‚Bgÿ‚Œ|0T8?ð€ëú[g_¡¿ñóiÿ]Oþ‹züþÿ‚•J!ÿ‚|/-ÿB±ü³¯ªà·lÞŸøjÿ驞Ⱥ§¬ô¸žsû/èS6³âðo.Ïþ>õËüÿ’1áûÙÿ脯Iý—uxWñعû]Øúüï^mðKþHÇ„ì gÿ¢¾›Äê’ž#¤¶Oò‰òÅEâ­Þ?ûyúïEWåçée}Oþ=—þºÇÿ£¬U}Oþ=—þºÇÿ£¬PQÜÚÅyŽò8åŒà•u 9’Š(¢Š+Íþ|¾ð?Ç¿‰¾2º½µšK¦ kTVÝo¥ ˆ³±ãs;Éò€@TS¸–*¾‘_~Ñß ­¼]û@þо$_†ú7ÄÝOÁë¡]G§j~+ºðäPÚ1ÞæE¸¶†bòböÆÑàŸâNIŠ•#J.svKúþ»:F;Ÿ{~ÿþ™~´~ÿþ™~µò'ì¥ûü6øëð'AñwÅŸƒšg‚õÛ¦¡o¦Xø×QÖ-eE’{‚ Ä…n@„+dqó|Yý›?e_ÿ¼à½°ñÄ‹‹‹O[ÆÚåÔwÒÀ‚I•§ž(6FL„Êè6$¨åv©J~Îz;ÚÞ}½|ŒéMV‡´†ª×¿—N·>¹ýÿý2ýhýÿý2ýkà¿‹^ý•|?ð¿ãïÃýöMwáþÏÕ¼í'Åwöú^¡4!íL°Ú#MuoûÈewµ…¼Âʤ5oxçöðD±µ¯>x?ÀºŸ‹#ðôÜòÜêšÚh· [ ¦6ê.|ôGçËß–Àœ×<«BFýؤÛò’m?¹7éµÍ#)ÆšÞWKådÿo]ì}­ûÿúeúÑûÿúeú׾/ýŠ|¬~Å–þü=ð´>%¹ðÝ¿ˆÞ×YÖuv°Ö¢âX†äIœª w¿ÿàŸÿþ)üð‰õEkqâ=ÏT–õ­D¤-< )U&ã$ä úWD©Ê©Mï“ùó[ÿI—Ýèc ±©s‹Òiµè¹oÿ¥/¼úw÷ÿôËõ£÷ÿôËõ¯…ÿm¿Ù÷àwìv~k>#ðV‰oáxº/k÷—ºÎ¬g²ŽkK© {T†f2Ê÷C±˜° 6‘û·ÁŸøN¬­¥¼Ò°¾[_íùµÖÕYC7ûI¿žYó ±€J±æFP€°Ê3Œù¬öv~¾ïÿ$¾nÆÎMFÛ«¯Kµÿ¶¿’¹÷Oïÿé—ëGïÿé—ë_(~Ïÿ²§ì¹ûPx*}{àLJdÔ-,odÓ/íî¯5}>ÿI¼Œ)’ÖöÊæHçµC£¦k£ck)6þ8~ÆŸ³oìñðöçÄÿ<«2ÚX Ù¥nk“I+„"´²ig•‹0D8'*^îþ_ŽßBcïü:ŸR~ÿþ™~´~ÿþ™~µð®£þÅ~&‡‘éZn¦gø¥}}¥øz´ñK-勽¶ºFØÍI ‘ÝyL¢)¨åmë^ýŽô[o»xwÄW²ü2Õ-t_Zéú_‰¯n ¼¹Ux!·‚i/ ¤‘¸ku•v:¹!X1WKúôÿ5÷®èvnß×òsì}¿ûÿúeúÑûÿúeú×’韱M·€| â[Í?P‡Jø“â1á }·ˆþÑ&³ç4O¸·ͳeŽDd¸XŠ˜ß8 Hí¾þÌŸ²Çí%ãoƒ~¼Ôåð½qáwÎ}rÅlõÀ­rщ¶ä|ñO˜Ç"ªÏUýtÿä£÷®è]/Óþÿ‘sìÏ­ÿL¿Z?ÿL¿Zø«öóýžÿgߨköLñÇÄí{áÓê¯ám&æòÏOƪ«¨\Ç ’EËÈaWdÚee*¹É®Áýž¾~ÌÉñöÝѼ1¡h÷úèË«hCÅGL²óª5é¹Q%¤bMê×S·Ë%Ô¶(J龋þù¯¼|¯EmïøjÏÐÿßÿÓ/ÖßÿÓ/Ö¾ _øbvøYyã¤k©£[ë‘ønÙMñ2ßëWòF²Å™bWí:ˆ’&óQíc•Ü6Ôb1RA‹ão„ß±÷€¾YxëXÓZëÃú¶ 43û6}kQ¾ÕïK0¶v6Î÷7S~îC²(Ø…Ü€¨Ì'ožŸæ¾ñ¥Íd¿«_üŸÜû3íJ+óïÄ:g켟 ¬WwqûØ|Óü}}eªÃáKIJø:)¤ÓüN·1ë4ˆÖ3ZûD™"hÔKo¢&æ‘‹õþº/Í¥ó]Ê啯oë_þF_ø ìϾè¯Î/Žž.ýŽþ~ÉÚ_ÅÝÂÒk:­âk/ Åkw¨kZMÜ72jé÷i<þú mD“Jð˱ò ñ¸5wÿ>~Íý’|Qñ?áîƒî›§Y\-Ž¡~"Ö-ã»ÅOi§™.Þ˜¯šcBU± ÂjÍR„§-£¿ÜŸê¾ð„}¤£÷ÿ†ýÜûoQ_xçöðD±µ¯>x?ÀºŸ‹#ðôÜòÜêšÚh· [ ¦6ê.|ôGçËß–Àœ×sðOþ ÿðOâŸÁŸøŸQðV·#ÑlõIaZÔJBÓÀ’•Rn2@.@Ï¥k(8ʤ:Á¤þ|ÖÿÒ_Ý©Œj)FþtÚùZÿúRûϨ¨¯’hOÙƒöOý•<ž ý ¬4¿ é×3‹K1q­ê/s©Ü°%-¬í£¦»¸|°B#cåS^s¡xoöa±ø'7Ä |qðŸ@»Öÿ±|?kâ“©Ç­ø¡Œaâ{-"ÚâkÆiq6Ëf‰nJÂìÑ(Ó¿—ü =uZnjÓJïú¶ïÑ[W²>ü¢¿3¿e;Ùãâ·À_‰¾?ø¹àX?°ü ñóÁ¶7%ÕfÕ£Ala+§ kÁqºäÅ$B#±âá«cãç‰?cïƒ_²~‘ñwEð³k:µâ; Amu©k:]ÔWêé÷i<~úÞkMóÈð˾mÊ|¤‚)¦’oª‹ÿÀ’qôo™iæ.¯ÉÉy{­§®ÚYëåsôfŠø¯Æß ¿cï|²ñÖ±¦µ×‡õm@igölúÖ£}«Þ–`-lìmîn¦ý܇dQ± ¹Q˜qþ!Ó?eäøUa㟅?>"üDðÄzÌš‰?áµÖ'Ö<:(gþÓÑeš=B2»ã/Û¼ª²$†=Œ§¥ü·ò½·íº×Í•»Yo·»wÙì~‚Q_*|ýÿeŸÚSÀ‘ø›à6¤x«D’V·k›_Éöy“ïÁ2}£t3!8x¤ èxeŠì?áØŸèHÿÊΡÿÉÚkrSRWG½Ñ^ ÿÄøÿBGþVuþH£þ‰ð7þ„ü¬êü‘Hg½Ñ^ ÿÄøÿBGþVuþH£þ‰ð7þ„ü¬êü‘@÷Ex'ü;àoý ùYÔ?ù"øv'Àßú?ò³¨òE{ÝàŸðìO¿ô$ågPÿäŠ?áØŸèHÿÊΡÿÉïtW‚ñ>ÿБÿ•Cÿ’(ÿ‡b| ÿ¡#ÿ+:‡ÿ$P½Ñ^ ÿÄøÿBGþVuþH£þ‰ð7þ„ü¬êü‘@÷Ex'ü;àoý ùYÔ?ù"øv'Àßú?ò³¨òE{ÝàŸðìO¿ô$ågPÿäŠ?áØŸèHÿÊΡÿÉïtW‚ñ>ÿБÿ•Cÿ’(ÿ‡b| ÿ¡#ÿ+:‡ÿ$P½Ñ^ ÿÄøÿBGþVuþH£þ‰ð7þ„ü¬êü‘@÷Ex'ü;àoý ùYÔ?ù"øv'Àßú?ò³¨òE{ÝàŸðìO¿ô$ågPÿäŠ?áØŸèHÿÊΡÿÉïtW‚ñ>ÿБÿ•Cÿ’(ÿ‡b| ÿ¡#ÿ+:‡ÿ$P½Ñ^ ÿÄøÿBGþVuþH£þ‰ð7þ„ü¬êü‘@÷Ex'ü;àoý ùYÔ?ù"øv'Àßú?ò³¨òE{ÝàŸðìO¿ô$ågPÿäŠ?áØŸèHÿÊΡÿÉïtW‚ñ>ÿБÿ•Cÿ’(ÿ‡b| ÿ¡#ÿ+:‡ÿ$P½Ñ^ ÿÄøÿBGþVuþH£þ‰ð7þ„ü¬êü‘@÷Ex'ü;àoý ùYÔ?ù"øv'Àßú?ò³¨òE{ÝàŸðìO¿ô$ågPÿäŠ?áØŸèHÿÊΡÿÉïtW‚ñ>ÿБÿ•Cÿ’+¢øSûü/øã‹}{á… Óõxâ’îd»¸ºhU† žGÄew( µ™s† €zïü|Ú×Sÿ¢Þ¿=ÿà§P™ÿ࣠ü :Çþ–Ù×èEïü|Ú×Sÿ¢Þ¿?¿à¥Rˆà¤ ËЬcÿ¬ëê¸-Û7§þ¿újg‡ÄŸò.©ëý.'œþËúͬø‡ç|˳ÿ½rÿ¿äŒxGþÀ¶ú!+ÒeÝ^Õü@6.~×v>¿;×›|ÿ’1áûÙÿ脯¦ñ:¤§ˆÃ©-“ü¢|‡‡qQx«wþÞ~»ÑEùyúY_Sÿeÿ®±ÿèÅ«_Sÿeÿ®±ÿèÅ«QEQEWÈzïÃ|\ý ?i¿|ñW‡¼ªëxzÒ}GXðôºäÚM.t‘VÚ+ÛR$!W2¸å<}y_š¿·öŸ¨IñkâÕׄµÿèzŸü,†ºZ/‡|auá™u/ç†ÆæÚK›yí{{™€-’¶DÚê¬&TV%ƃWçqþÔu¶¶×_.béÍÓniÙ¤ßÜ›>äý“þø¯àoÀOøC㊴Ojž³‹N‡TÒô4Xf¶†4Ž ÖÏwr|À©ó8'!Tq\wüöÓoƒúW…u½nïÃ’izÔ7âþÖ6i^ÒH¥³ÔlÆ×B¢ïM¼¿´.)ö  ùãÃ~.ø«ûü/øqáMRŸMñíãD³Ó?áfx—Qñ•ŸÃ}š¸¹´’ö[±>¦ÒK¦]"YàV{ÎXÈ{^-ÿ‚‡|dð¿ìññBçJ_ƒúÇÄ‚¿4¯êWb+È|=ã(oFžU-OÚZM.èZäÞ÷« Á!Û pZÒöÒs›»Ñ½<ã}·³’M}«ìÕÅB‹ÃrÒ¤í¥•›Ò餯£MÙ¥mšÝ+7Þü$ÿ‚nø¯önýŒµ¯…ß³×ÄÝ×[ñ©u&¥âOø^mm§ÓšÛì6–¢õvóm´û}6ÕngÜ,Ë4dÉòôÚì¹ñ§Fý‹¿áWÉñoáÜÞ ‚Ò=ÛÄð®n–Õ4¥³[cØmî{’A´ …A<ž2}3öo‡âŠxoT“ö¦Õ¾jÚ…Åñ—L>°ºµ¶µ´1§î&73ÊÓÈ’y£Î_,:í>RŠÃýªþš4hß±Zü/‹_&ñ½šh–þ!?n–Õt¥´[o*Kí­ÏrpÏöp©ÈO>ƒû!ü$ñ·À¯úG„¾9xÇÞ7½ðüéö†á©tpÁQ¤ÐI}w¾\ÆìÒ+¢à×n[嫯ø(gÆ$ý‡üaã¯ÜüÖ¼qð÷⬾»E¶¼¶Ñð´¶Ü«j^mÉ’ö_:Ñíb -¨¸’âû’J%YÊR©{ºœùó[“}›çòÝóo¨ðÊŠPKJ|ñVéÊýÿ_…w¾–½´ôÏÛÇöWñÇíI ø >üGÒ>k>ñe·Šã¾¿ð¯ü$)vðE4kna7vá„î²[å(Øaâþ<ÿ‚@êÿü?7ˆ>&|IÑuÏ‹Óøò?I«ÜxD¯†¤ž='û;&Ñ’ôMöe±ÀÝöß;Î_3oî«„¹ÿ‚©|`Ÿá5“xz/…^!ñ7¾.Þ|2ðæ­á«+­SF³‚ÊÆk™ï7¾„êHlî IíÂ3…//”Z^®×öèý¡/>éæ}á~‹ãÛ‹Ÿ.gÕí¥û±cuf;õ±¶Ôd—MZåÚM<ÌËnÀ2 ÑãΚRV‚¿;ƒ^n~ÉF×Ú÷§¦Ÿr•œêÙ9IÙEI?(ÅÔ½û«©÷üc¢b?ÙFoÙ3áî¹§kwÞÔuëRëz„þðÀðõƒJñE nn.%v fY®%v?Ä*-Ûóö<¿ý³¾øDÐ|C£hçA×WŸO×ô7×|=â(…µÄ eªé©snnàÿI*T `…ˆ`¸?3þÔ?µ_Ç=Sö×/4WÀÚoÄü[Ò<â_IžûL±¼…,Ó.ü?á1 :ÏPk„Ö4´‚+ÆA ͦ£ªZFÑù~Dw²Ý8Ý.Ÿ ¬¤åk¿ÿ‚˜~Òß¿gÛ߆¶²Þ¡ðâÆóÆ×š½•Ëx¯H¼Ô65žwª£À¶×–ýWMž O7¸#aI(éþñÌ’ÙG²×ÅÖº{2 ;‹¥‰' xÅÔñˆ¥˜,²7z—ügã—ÅŸ~Ä¿Ú? ¼CðòÃÆz7<7§x‚m[¼éÑK¯éȰ#A"y‘Ì‹:Hy2ÉÀ€\^šlÜRô´lו¥õÑ_dB¦›‹qwNwï{»§Ý¦—K»?yžëû{~Íþ"ý¯¿eü2øsâí+ÁøßO›G¿Õ/´ÖDvsÄṉ̃@—vÛe*ãl…Ø.9FÏgíû'übý£¿eoø“âÏÃÛ?É­ÙêZž¹Û‰,/m­n㻆Ù4çÖKFLB²H×O1B!`ÉÈ~×·_Ä/<¡xë<ãsàÉ&ÒüÝgMðë‹+­@´¶†{Yg¸k{]«nÓÁ–”6⫵ùcöøø÷áïØ»Å^-Õt†v?ðÄ Koª‡·²ñu•ÌÖQFëóI¢\ÈÚŒk¶y.ü± 9ÖU¹¯E½½¹{}ñºZµ{'iÅIÊ oÓñµý\]¯µ•íxßÙþ2~È?>3xCᆷ«üHðÕÆ_…ÝÆ¹¥øŽÓÁòí§·¹³– MEå15¥Û!)z®$E‘YFc>[ªÁ(üoâ/iþ,ñÆê¾,¿ñgŒ&OºYêïqáóáøml ]D °y2½Û¼ÛdfÂùg_ö†ý¡¿hÙÇà&™s⯄ž"ñϼok¢h§@Òg’-:Âky%‘cÓîõKwÖ.â6ó‘\Û2ˆ³…ýþ ÁûIø£ö›ø ªj&Ð߯^ñ6§áÍ^-/C¾Ñc·’ÚÝ,–w²K$R˜p²Ëç;$eÁª_¾ö‘}škÉòó/Oz)ÛK»w%ÍÑös¾ûäöÿÒd×Uké¡'ìOûkŸ²túùñGŒôßůiš ³¥¶€Úa†ëNÓ!Ó¤œu01Í­»ˆq˜˜IûÉžñ÷öfðíGáK}ã÷…tŸYØ\‹Û¹Œ­Ö“t …º²¹B³YÜ(c¶x$Lü¬+Î?ࢿ´Ä/Ùká6‡ã߃ñxN_ è ±oˆk77Si¾yÒ;ËûAñüöѳLû÷(]ðJlÑà¢_üiàÞhCáf–Ÿ~%ê^øgâ-CJ½]6Ëöð^Ý[j7öÿm ys{ ƒx¢–ÙdÅ!+Ìt9:ómë&ÛùÝ?ÅËOI[ávšqÅÙ$­å§Úû(ë×Xõ’¿¬|Kÿ‚ukwZ®~ |]ñ]¿‹þøž_xKSñ´#ÅpXE=„º}Ær –÷W4²Ë5Ó\¬ŽÎeQydŸðH?ˆº÷Ÿé¾5xGÆZ¿Š¾%Éñî-KáË/‡5?7Nû º^§¤Çª·YªˆfZe+,3ù»kcáÿü3â<^7Óü+ñ5¾]Ýxcã ? øŇÅ:êø ðä!¬æ²k)ô¡¨‰¢1\ÌÛþܲ‰J8`«åÓööý¥ü_ð>o…þøÿ–Ÿâ¯‹~*ÿ„fË]ñRM.‹¡²º½’I¡†HžâiÍá†,[ä‘Ip«xï‹nŸ‹ÿg½^Ã]Ö>x§ã-ïÄGð…SÁVRêö“Ç`—ÒGsg6©³¾û<7²´7Ð$@D Ž ´³k§åoÁÂ*Þi¸/5ßP·"Jú;·ÿos]·Ùò˽ŸEu~ÿáüQ¼%ð‚óÂþ5ñåö”5ïMâ}~iÿðƒÛkeíãmå’)§ÔBÃ4©|³;( '—ˆ‡»üø à¿ÙÓÁç@øáºL—y5¾l°ýªáñæ\NÃæšg –BÎÇ–bkã_ÿÁD~3üTý‹<âÏÚü1Ó> jŸæøm­Å«ÚË.žá5­<ÜÞ£(†PÑE9‰nnQ‚¼k/γ'Ò?°ÿÆ¿übøwâ[O á©üeà_ê>Õ.ü? ¶úv Öî­ÄPK,²@^ ¡-Hû_x F T©ÌáÛ§T•?Á)Óßù¶º•²œÔc=ö{¦Üÿá=¿—µ¯ö¼ýžu¿ÚÁþÿ…Yâ›?ø»Á~#´ñ6‰©Þé-«Y¤ð¬±Éo êe¾¸Õ›Ëýèn ¹UvùëÓ?ooÚ_Åÿæø_á_€ÿð‰iþ*ø·â¯øFlµß$ÒèºK+«Ù$šd‰î&‘,Þ`žI—J·‹j·OƯéð>»®~Ïן!@dVp<²C/S⯀Ÿ¼_ûñ½ï‡à‡O°Ô4 K  ³†¢&‚Kë½òæ7f‘]ïF»rÞIûQ~Ù>4ø=ðN³ðmç€õO>$ñ2ø[IÒ´[i5ÛG¼òe½ks·–*“ i¥ÅÍÕ´`—9U%ðüÿâŸÄÿÙ‹áZhö|=ñOâGÄ­cá´Úε?‡´itÆÔK™-m/¥ó'š-4Ǥw̆i†.WæÝT•Z•ÖRå¿­gÙ[_o‰½nÌ•R…5´b¤–ú+6ï×Umþ.ˆû+ãïìÍàÚ–ú7Çï é>&³°¹¶s[­&éA uer…f³¸PÇlð:H™ùXW‹|Kÿ‚ukwZ®~ |]ñ]¿‹þøž_xKSñ´#ÅpXE=„º}Ær –÷W4²Ë5Ó\¬ŽÎeQxíKûI~БþÞ)¾_ü›Æøµáÿ Þk Õ¯`µ[«h˲áY¥³žVºu¹µ’O’Þb3 !¤û‡à¿Œµ?ørê/_x>ëÄšUÛÚêPørùî­¬Ÿ‡HÜȤž[ÆÅX¼àƒJ)¥Í½Ÿªj2Oîi}ëg®­É+4ú¯Í=|íù?OŽdÿ‚AüE×¾ø¯Hø¥ñ«Â>2ÕüUñ.Oˆ÷qj_Y|9©ùºwØeÒõ=&=P}ºÍTC4jÓ)Y`‰ŸÍÛ]_Ãø%6«ð÷öñ_Ávøƒáõ‡PñZøÇ×úO‚×Kµðýâê±k ØGxÑÏl·°€"­ñnÜ<ÓêßðPŽŸ~|³Õ?d_†ƒâ.±w¨%®£+Ld_ Yc&¤tøˆ¹Õ<¢ý Õ–is… ×Î~ý³¼iáƒþÒ>üdðçÅ_ˆß~!É᫟xËÃo èÿç]2Kù,%Тò.à”Ch +©–áäºV’b0A9·Ë½£‹EÈ¢—d’Žº+­ïqÊ:ª’}e//µ)7ѽe¦®ÏkXô¿ŸðNÿþÔ ¼,>=|Pð®¹ñÀþ,>)ÐïWÀí‡! g5“YO¥ @ÜMŠæfßöå”JQÃ_(èü#ÿ‚j7„¾^x_ƾ<¾Ò†½â)¼C¯¯ÃM?þ{ml½¼p-¼²E4ú‚(Xcf•/–ge¤òñóCöéøÕáÝ#Þ×uÏÙúóâG>(Ý|>°ñN÷7~Ña¶Ò¤d¿±žzê2ˆe4ósVš#æ:®ékÞ~ß¿¥ð¶«áÏIðróÇþ ø½¦ü1Õu¯±ß7‡õ¸o¬­îæÖ»óm.`7± mZkºÞD¦UxŽ]¢•ùùmçÌ饿œ í¿[I‘6é®i»ró7ä£Ïw§¤ÚµöéxßéÙ¿em3á§ìÛâŸ~Æm¤üÔu»;¿°k:^ ËiÚŒñ•Œ°¹òpû]šV-!_™»×_ðSÂ:ÿ€>xcCø«â™|oâm#K·´Õ|A%Œv/­\¤j²Ýx‰H|Æ Û¹ÆN3_ ~Ô?µ_Ç=Sö×/4WÀÚoÄü[Ò<â_IžûL±¼…ÉûQ~Ù>4ø=ðN³ðmç€õO>$ñ2ø[IÒ´[i5ÛG¼òe½ks·–*“ i¥ÅÍÕ´`—9Uyç¼yÖ©òÛÍ4œZ¾¶jk·šÑb¶ÚÎIöM6¥v´ÑÅ÷òzŸUQ_Ÿ~ÿ‚ŸüSøŸû1|+MÃá)üHø•¬|6›YÖ£gðö.˜ÚƒIs%­¥ô¾dóE¦˜â´ŽùÍ0ÅêüÔ¿j_ÚKö„öñMòø·à¤Þ0ð‡Å¯ønóXð^­{ªØ[F]—’Í-œòµÓ­Í¬’|–ó™ %¨óm¶y¦â¯ßíÅëÓÑŽÏDÓ¾©®ªÜËó„—ªWµÕÿDh®?࿌µ?ørê/_x>ëÄšUÛÚêPørùî­¬Ÿ‡HÜȤž[ÆÅX¼àƒ^Kÿý¦»>]òxé¾öNÒµ*rrŒ:¾Ÿ}¾÷—M5²jÿxÑ_~Ðß´7íû8üÓ.|Cuð“Ä^9ñ·ítMèLòE§XMo$²,z}Þ©núÅÜFÞ`+›bñæQc0¿ àßø)WÅOüø yÿtÿ‹~:øŸ«|8ºÖu?êzf…á§²·º¾Ss¥Ït'’ò[[h‘-ÒïËigÊÌȘgê7­WOüðNqMíwk“+AFRvOü¤ýv„·ÓmQ÷ýðeçíûñº_ j¾ðäŸ/<àÏ‹ÚoÃWZûóx[†úÊÞánm`[¿6Òæ{–Õ¦¸­ä@êeW‰¿k/ê?³à¹ñÿÆ]áůøûQ𢧆ü7‰4ïˆ3[/˜¶ñø}^]BO2ÖHåh­góaevó™RRNQwZ?“TÝõìªÃMýë$Úi-¤¡-üýû-/¿³ž»{º´š¿Þ´W†~Ì´ÇŒµÙRñçíëàí7à¼þk©¯žóV¬äÓ ]ÃS}Çu”r g6ó“$@mrO5ë¾ñæ‰ñKÁZW‰>êÚ~»áývÖ;í;Q°g¶½‚E ’Å"®¬¤AÁÍ[Vvôüvôôzîž©“)+ÿZoëê´ê´fµQH ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¨¥ÿ˜¿åRÔRÿÇÌ_ò ^ÿÇͧýu?ú-ëóßþ u Ÿþ 1ðÁPàÿ¬ém~„^ÿÇͧýu?ú-ëóûþ U(‡þ Að¼·ýÆ?ð:ξ«‚ݳzá«ÿ¦¦x|Iÿ"êž±ÿÒâyÏì¿¡LÚψ~wÁ¼»?øû×/ðKþHÇ„ì gÿ¢½'ö]Õà]_Äbçíwcëó½y·Á/ù#ÿ°-ŸþˆJúoªJxŒ:’Ù?Ê'ÈxwŠ·xÿíçë½Q_—Ÿ¥•õ?øö_úëþŒZ±Uõ?øö_úëþŒZ±@Q@Q@|Ÿ¥~ÍiÛ#ãÖ™ûGøÁ_tÝ:]ZZx—CµÕ ¶—û6Uó#Žâ7T}¤À‚E}a^ û>ÿÉñþÐß÷-ÿé¾JM'¸Ó¶Ç§xçà>'ü+ø“à¿ xƒÁ"m‡‡õ&ÞëKX¡Ûä µ‘ AcØ›@\.ÑŒ`W3­~ÃüIð“Hð‰>ü.Ô|  \½3÷~±ŸJÓ§!Á– GˆÅ„K&]T½¹ùŽ}NЦܝ~º¿2RI$¶[yÿÂï„þøàk/ üðׇüá­3ØôN‡O±´Þí#ùpBª‰¹ÝÜà ³y&™ñ[á„þ;øóÃü1áïøkP(n´­oN‡P²¸(áм+#eVäWGE)>wyj5îìxÏü;“özÿ…||%ÿ àÏü"¨`è¿ð…i¿ÙæôDb_fò<¿;Ë&?3ní§nqÅkx·öPðÁý™u…Ÿtïü5ðìð46VÚ/†ôç°ÓwÍç9Nž´mî\²¼Dìß{šõ (—¾šo}Á{­5ÐðŸ‚ßðOü:ý›5†_mm¾,èÚþ©>µ®éê÷’Ê$.ÖPÛÇi!HÖ8â…UiŽAcÔYþÄßtïè^°øIðÊ x_SÖ¤'…ìVÇI¿‘wm‹d3‚Ì|ÔþcÏ&½:Šwè¼¼¶Ñ}ÖÓ·Ar«Yù¿›ßᄑΠGý•¾x{ÁÞ*ðîðãÀV>ñÔó]x“L·ðý¤V~!ša‰¤¾…c rò¤ Xu&µ>ü ðWìõàÔðçÀ/x_ÁŽW4ÍJƒM³YåœC*ncÉ8Éï]M–›z êqÿ?g¯|i×tSã¼âÝOÂÒ¼ú-Þ³£[_ϤHûw½¬“#4 ÞZd¡ì\ôÌk?°wÀÿxJç@×~ ü+¼Ðï-ì­'Óåð¥ƒÚÍ u³‰¢0í)n$D¤b0ì œú½¬­o˜î÷ù|»}áïÙ/áW„| â øSáŸÃí/Ã>.]šî“iáÛ8,u¥ò„X»# 8òÕcÆùT/AŠ“Â¿²¯Âÿü¿øyàŸ‡Ñüª$±^øjË@´·Ò/Q‰V[4ŒE â §w|×{E7­ïÔ””mn‡™Û~Å¿l¾ \|5²øQðÚ‡wrý¢ Çá«$Ѧ—x1¬Ä^I}ê­¸®ws‘TµØ'àf¯ð£Oð¯ðcá=ß´‹ÆÔl|;?„tù4«;¦ x­JDŽ ª†!ÛžMzÍouýi·Ü>Èó gö#ø1â?ƒzgï|#øc{ðûD¹7ºw†'𽌚5„äÈL°Ù¼˜Ü™æ;•AÌ®sóõ þøGà/m`gnw|Ýy­‚³‡ÃÏÙ§A»Ò¿g/x3áþ—¨\}®êÏÃz%¶•os6Оl‘ÛÆŠïµUwN ñ]ù›»¾ûù“ed»ïÅ_„>øíàkÏ |mðLJüaá½CoÚ´­oO†þÊãkRðL¬ŒU•X8 È®_RýŒ¾k?-þêß þÜü;³”O†%ðÝ›hðH°t³1ùJÁ‹Ás’Ozôª)[tUÞž_®ç•[þŸ-4È,­~ ü*ŠÎ×Uƒ^†ð‚Å£~T7ª¢-Äq€‰0ùÕFŠë>üðWÁ5ÖÁŸø[Â#Ä7òjº¨Ñt¨,§y&7ÜÜy(¾lÍ™,qÉ®¦Š<ÿ®Ÿä¾äJŠ[/ë_ó{9ߊ¿|'ñÛÀמøÛáøÃÃz†ßµiZÞŸ ý•ÆÖ ¥à™Y«*°$p@#‘\ôß²/›‚ð¬§øeðýþ cÂÇÃÖ‡F?˜ؼ¿'!À|íÎ5ètQm×r®îŸm6OØ×á ü9á5øWðãþoß®« èçÃVFÃE¼RÅnm 1l‚`]È‘¶]Žy5sGý•¾x{ÁÞ*ðîðãÀV>ñÔó]x“L·ðý¤V~!ša‰¤¾…c rò¤ Xu&»Ú(—½vúÿ_¢û‰IGoëú»ûÏ,Øgà£üÿ…pß~¾ûWÛ¿á±GÚ3Ÿ;ì~W•ægûwg½H¿±/Á”øw­øB/„Ÿ “ž%š+_FO Ø®ŸªKEŠK‹q—+ Ž0¬à•¸#ŸEßÌkFšÝmäqZ'ìÛðïÃ_¦øsáßx2ÇáõÅ´–røfßE¶G–3æDÖj‚GÜw)\6Nsš¹ðào‚¿g¯§‡>xCÂþðür¼é¦hTmšÈç,âSsIÆOzêh¦Ûm¾¬I$’]¹ÏŠ¿ü'ñ×À÷¾øÛáxÃÃz‰Su¥kZt7öW%X2—†edb¬ªÀ‘ÁŽEttT´žŒ¤Ü]Ñç“~È¿ n>²Ÿá—Ã÷øp1 Zþ`?bòüœ‡ó·;¾n¼Ô)ûü!áÿ‡<&¿ þÂ-àûõÕtøjÈØh·ŠX­Í¤-L ¹ V˱Ï&½&Š®g«¿ô¶û‰²²´ÿ=Î Gý•¾x{ÁÞ*ðîðãÀV>ñÔó]x“L·ðý¤V~!ša‰¤¾…c rò¤ Xu&²_öø(ÿ?á\7†ð¯¾ÕöïøFG…ìF‘öŒçÎû•åy™ç~ÝÙï^§EM–ßÖ›}Ãþ¾ýþóÌö%ø2Ÿõ¿Eð“á’xSijEq«èÉá{ÓõIb±Iqn"òåtÆœ¡`ckDý›~økàÔß|;à/Xü>¸¶’Î_ Ûè¶ÑèòÃ&|ÈšÍPBÈûŽå+†ÉÎs]­Þ·O¨%k[¦ÞG-ðào‚¿g¯§‡>xCÂþðür¼é¦hTmšÈç,âSsIÆOzóŸÛö0_Û[Â~Ò/¼U?†í¼3­m˜¿±,5{mMÅ´öâ+›{èd‰âÛs!Û·“´ö¯o¢”¢§nmvsºûš[…ùtºkäÕŸÞ™æð~Çß ÇÀXþ_ü6øsðõUwøhønÉti8“Ø/ 0yœ' Èæ³µØ'àf¯ð£Oð¯ðcá=ß´‹ÆÔl|;?„tù4«;¦ x­JDŽ ª†!ÛžMzÍRnWo®ä¥Ê”VËcÌ5ŸØàLjþ 韼AðáïÃíäÞéÞŸÂö2hÖ“!2Ãdbòcrg˜îU2¹ÏÌsecß„«ð3þ‚ü/øz>nßÿ¯ü#¶ŸØ»¼Ï7wؼ¿'w™ûÌíÎÿ›¯5èÔPÛ•ï×?R®Õ¼¶ò<Ù?c_„1ü?ðç„×á_ÃøE¼~º®ƒ£Ÿ Y ñK¹´€Å² w"D Ùv9ä×AðÇào‚¾ `|ð…¼"bü•2÷þ>m?ë©ÿÑo_žÿðS¨LÿðQ† ‡þcÿKlëô"÷þ>m?ë©ÿÑo_ŸßðR©D?ðR…å¿è@Ö1ÿÖuõ\í›Óÿ _ý53ÃâOùTõþ—Îeý fÖ|Có¾ åÙÿÇÞ¹‚_òF<#ÿ`[?ý•é?²î¯êþ ?k»_ë; ÉðýlÿôBWÓxRSÄaÔ–ÉþQ>Cø¨¼U»Çÿo?]袊ü¼ý,¯©ÿDzÿ×XÿôbÕŠ¯©ÿDzÿ×XÿôbÕŠ(¢Š(¢Š+Á?gßù>?Úþå¿ý7É^÷^ û>ÿÉñþÐß÷-ÿé¾J÷º(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Š_øù‹ñþU-E/ü|Åøÿ*eïü|Ú×Sÿ¢Þ¿=ÿà§P™ÿ࣠ü :Çþ–Ù×èEïü|Ú×Sÿ¢Þ¿?¿à¥Rˆà¤ ËЬcÿ¬ëê¸-Û7§þ¿újg‡ÄŸò.©ëý.'œþËúͬø‡ç|˳ÿ½rÿ¿äŒxGþÀ¶ú!+ÒeÝ^Õü@6.~×v>¿;×›|ÿ’1áûÙÿ脯¦ñ:¤§ˆÃ©-“ü¢|‡‡qQx«wþÞ~»ÑEùyúY_Sÿeÿ®±ÿèÅ«_Sÿeÿ®±ÿèů,ð·íñðCÆÿ§øiá‹¿5/ˆv÷sØIá«Z¾ª·nó¡û(“Ì2GåÈYåB1 `àZ»-Áè¯Ðõº(¬K¿ˆúÄkÝêvÑø—SÓ®5{]<“çOio,M2vê}åZi]ÙoþJïîI¿DfÝQH¼ö}ÿ“ãý¡¿î[ÿÓ|•ïuàŸ³ïüŸí ÿrßþ›ä {¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¨¥ÿ˜¿åRÔRÿÇÌ_ò ^ÿÇͧýu?ú-ëóßþ u Ÿþ 1ðÁPàÿ¬ém~„^ÿÇͧýu?ú-ëóûþ U(‡þ Að¼·ýÆ?ð:ξ«‚ݳzá«ÿ¦¦x|Iÿ"êž±ÿÒâyÏì¿¡LÚψ~wÁ¼»?øû×/ðKþHÇ„ì gÿ¢½'ö]Õà]_Äbçíwcëó½y·Á/ù#ÿ°-ŸþˆJúoªJxŒ:’Ù?Ê'ÈxwŠ·xÿíçë½Q_—Ÿ¥•õ?øö_úëþŒZüð7ÿ]üjÒ4m;NøË}®xOö’Ö|cgá}Sá¥Í§„WM¹×/R]Lø†KX‚i×÷W„¼“|ÞZy2®~±jñì¿õÖ?ýµbˆ{•cWµ¿ FKñŠ¿•ýJ”›¥*k¯äã(µóSðV‡çÀÛŒKûPi,Çã|ŸŒý•þ0üDýªÿbÏ‹?h?øXÞƒÅZèÚ‡~Ý5î«§[éÖòÁw£"+,··Zƒ_½¼ª­æ[Å`Gq_oølçöûiÿFþ?.>èÿ[þß÷½óQx3ÁšGïé~ð—§èš‰kŽŸ§ØÛ¥½­¼j8¢‰TEU @iSœÔ¤ÚZiøuùïÚûÛÊþ{ÚÊýl•®õ}B¼ö}ÿ“ãý¡¿î[ÿÓ|•ïuàŸ³ïüŸí ÿrßþ›ä¬Æ{Ý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@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@E/ü|Åøÿ*–¢—þ>bü•2÷þ>m?ë©ÿÑo_žÿðS¨LÿðQ† ‡þcÿKlëô"÷þ>m?ë©ÿÑo_ŸßðR©D?ðR…å¿è@Ö1ÿÖuõ\í›Óÿ _ý53ÃâOùTõþ—Îeý fÖ|Có¾ åÙÿÇÞ¹‚_òF<#ÿ`[?ý•é?²î¯êþ ?k»_ë; ÉðýlÿôBWÓxRSÄaÔ–ÉþQ>Cø¨¼U»Çÿo?]袊ü¼ý,¯©ÿDzÿ×XÿôbÕŠ¯©ÿDzÿ×XÿôbÕŠ(¢Š(¢Š+Á?gßù>?Úþå¿ý7É^÷^ û>ÿÉñþÐß÷-ÿé¾J÷º(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Š_øù‹ñþU-E/ü|Åøÿ*eïü|Ú×Sÿ¢Þ¿=ÿà§P™ÿ࣠ü :Çþ–Ù×èEïü|Ú×Sÿ¢Þ¿?ॗ)mÿ!ø^eeü?ÖHÉÿ§ë?óø×Õp^™½?ðÕÿÓS<>$ÿ‘}OXÿéq<ëö_ЦmgÄ?;àÞ]Ÿü}ë—ø%ÿ$cÂ?ö³ÿÑ ^û.ëö‹«ø„f,‹Ë pÝN÷¯9ø%ÿ$cÂ?ö³ÿÑ _MâtåÿÉñþÐß÷-ÿé¾J÷ºðOÙ÷þOö†ÿ¹oÿMòP½ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETRÿÇÌ_ò©j)ãæ/ÇùP/ãæÓþºŸýõùÿÕñÕçÀoÚ§á‡ÄwÑï5}Iðåö‰ª}˜ö¢îtxå9ã­6œÿz¿OïãæÓþºŸýõó§í_áÛüo²ÓüIio}eu¢Å°OxäS4ù §‚+ØÈ3U’céc9Ônœok©EÅ«ôvnÏ£8s,ö†xu.W%¾ö{­=OËßÙïö§µŠN÷Gµ’âãVši-mWæ’G‘˜¤`§,}qð«öN×tO…þ²»…–[M.ÖraPQ_N|ýˆþ|=¹]_Á~ðî›~á-½”q•>ØW Ë$¬@:W·Æ|U(¯NtirB ¤›»ÖÛýÊLJÂÜ6øzE:œÓ›WiYi{~lô (¢¾0ú¢¾§ÿËÿ]cÿÑ‹V*¾§ÿËÿ]cÿÑ‹V(¢Š(¢Š(¯ýŸäøÿhoû–ÿôß%{Ýx'ìûÿ'ÇûCÜ·ÿ¦ù(Þ袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*)ãæ/ÇùTµ¿ñóãü¨—¿ñóiÿ]Oþ‹zðÚ?þNKÿ°<_ú:z÷ëßøù´ÿ®§ÿE½xíÿ' ¥ÿØ/ý=z×ä?Ýþ•?ú÷ÿxÖä?Ýþ•?ú÷ÿxÐ{EP}Oþ=—þºÇÿ£¬U}Oþ=—þºÇÿ£¬PEPEP^ û>ÿÉñþÐß÷-ÿé¾J÷ºò„ß õ¿~Òÿ¼Y¬Cé^0—HMÄÀË"ÚÙl‘ÙGÝRò;‰ŽÚXÕ証Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  h¨¼Ùç—þ<(óeÿž_øð  j)ãæ/ÇùQæËÿ<¿ñáIóÉ:3¦Ð¹ïšmïü|Ú×Sÿ¢Þ¼öÿ“†ÒÿìþŽž½ú÷þ>m?ë©ÿÑo^ûGÿÉÃiö‹ÿGO@µà_ù÷¥gOþ½ÿÞ5£à_ù÷¥gOþ½ÿÞ4ÞÑE_Sÿeÿ®±ÿèÅ«_Sÿeÿ®±ÿèÅ«QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWͲË{ªëzÜ×z߉C gP‰V-nò$DKÉ‘Q%  *¨Ò¾’¯›ì¿ä#­ÿØsTÿÒéèûÇýüWÿ… ÷ÿ£ìWôñ_þ7ßüz¼3Àš®›­è·>.ø¡¯x•õ¡â§ÒÚÎÏW¸†*A}öx-M´R,e6ùLÅÕ‹$’ lø_ãÞ½¬øƒF¸Ô"ѱËÄö:}ÚHÚ•çž!gž6ª¨ 1*¾[dFÌO«·¼£×þ ¿7úì.—þ¶¿ä{Ø®?è7â¿ü(o¿øõb¸ÿ ßŠÿð¡¾ÿãÕä_µßŒõXôÍ/¿ou­?XÖ¼Û¹nô«9î®líà]Àì€UyÚÞ2ØÆÖ|Ö6³ûZë‰á-ëÃ=­Þ§â½ ®›i"Hux®+›iFá…@ìØùN!~y•%kÿ_ÖzéÔmY¥ý]}5=ÛìWôñ_þ7ßüz±\ÐoÅøPßñêùë^ý²µ=K—šïÃÑ¥5¤VÓê–—tÓMymPyÒ4¢hÒÉ,;ˆrJ #s]¦›ñëX¾ø°<ö6K¬Kí„rycFò¢ç¯úÍì-úã~N1ÅUµ·õý“ìMô¿õýš=‹À3Þiß<(‘êþ š+»Ù¢š+^êæ)TY\¸ ’HÊpȧ§ <=æ£ñcÅi&¯âb´½†(b¶Õî­¢‰M•³©Š£,ìzrI£ÂòVüÿaÿô‚îÿÉ[ñŸý„`ÿÒ JC3¾ÅqÿA¿ÿáC}ÿǨûÇýüWÿ… ÷ÿ¯!Ñt»Šÿü~¿õýrÊ__Gggae­O§%…¯Ùã‘nJÀé¼ÈÏ!ß&áò…Á©5¿æ›â]Vm=4c¡h>!²ðì¶S$‡R½7çÇ “hÁ¹R¨cmëËž¾kyÙü­ù —»/ëôg­}Šãþƒ~+ÿ†ûÿQö+ú ø¯ÿ ïþ=^5ÆOk>"°ƒIÂözÖ½©èVfh.$–²4äO&$²–Ò/”6äímà«™§þÑ!¾Ð›ZÒì´çÕ¯t]D¶šâqeç]êÛ>qއpRÝ7o  [yÛñØ—þºØ÷±\ÐoÅøPßñê>ÅqÿA¿ÿáC}ÿÇ«Çeøïâ{)ÓCÕeðŶ´þ&“AmVKyWN‰Åo7˜ Á˰o,/š<çøj䟵?~Çž%ñ,—Vêi¥êÂ+½)Ý"Ý\F“@Û‹DJàîï‘I»EË¥¯÷«þE(ê£ývýVûÇýüWÿ… ÷ÿ£ìWôñ_þ7ßüz¾føoñ‡_ð[kº3ê³G®Ïug&¦j¯7ˆBö-+2OçÆFöŠG"GU‰TõÜô†¿üEño_Ò-ôoøGôXFƒ§kz€»†Yå»ûQmÉlT«å°óÌê6ñÍ5irßúµÿB/¢o®¿Š_ªò=gìWôñ_þ7ßüzº?‚7v¿aµ“TÖîí§Ñ®åx¯5;‹¤Þ“Ú`²»@‘ÆF>ñ¯ÿgÏŠ·úÇÄ=_Â̱Û[éÚŽ¯w$·ÛÌú:•Â"ÙüØ1Å·Ç8%T(5}ðoþK}Ÿý€ï¿ô¢Ê¥;¥.ãê×c›–[ÝW[Öæ»ÖüJk:„J±kw‘""^Lˆª‰(UU@”ï±\ÐoÅøPßñê,¿ä#­ÿØsTÿÒéëÃ>Í®êþ5Ödº¸I¬5]f+ýWÄwSiñùsº¤réâED‰˜€¹°]+ß³u¿Ì;y»çö+ú ø¯ÿ ïþ=GØ®?è7â¿ü(o¿øõx‡?hÍKâ·ÃK­sìPé0Á¬h¶ d.%KÄynm¼Ù$de>S‰‡–07¢’ÙWØ;?ÙÓÅ$ñn“âþ!ê:}ù´×o¬-E½‘·h’‰ wÃvðó3“š®Wv¿®Ÿü’'™~ŸŸù3èOÙ¢òæãEñZ…î¡|¶šÏ• ^]Ërñ¡³µ}¡åflnw8Ïñôšó?Ù—þAÞ,ÿ°àÿÒ:ôÊEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ïãæÓþºŸýõó¯íI©.ŸûAifCŒèñü=}{ÿ6ŸõÔÿè·¯Ÿjƒ÷ÿ>-,~¾[ cMÐ⸵itRŸ>`QÇ¡ãžÄ}h»ð7ŽíãÐÇ™"Œ/­gOãËfÊÉÁc^IðÛà?Äk1Øx×YÑtm6ÛplŒ³]8TET'×-z÷ü+§é­¥¥¬^U¨ò“r†;W“Üàu K¢Š(¾§ÿËÿ]cÿÑ‹V*¾§ÿËÿ]cÿÑ‹V(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯–äñ®¤kºõ¾««é–·ëšžø¥ºDuÍìäeIÈàƒø×Ô”PÇš–“ðÏXñJkš¼ºÖct‘o¥[W¸VLlo0üÙ\ ä`c¥Y³‡ÚwŠ.5Í=¼µv¥g¿ŒÛ-ÌÀã!¥1ÎSØzW×TPŸ$-×€RÂKD“ÂÖkD°’ÖÞ[Û¦í•èc]ï„è7MrÞ'ðƒ<_ñ6×ĺï‹ld{9 ž;U}=4$4jn_h(D› »w˜â¾à¢…£Oª*xIuvÔTðè¿xE»\‹˜|æˆ1`…󡙎Üã$žõR GÀ–·1Mm?„£š ™/#‘^Ü4sÈ’U#îƒ0äääœ×Ö´PÇZ–‡ðÃY²³¶Õ­<um§y‚Ö)c´t¶ÞrþZžqäã<š4?øsÆÓëºf·£¥Ãé¶úE¼+wnXÚÂÎË*¸* >H$ýÕWØ´P´Ø»Ÿ8|;ñf•¯|cðt:§§ÞÊ·ó¹H.F ö ¡’“Œ‘Ͻ2ø‹¥x?â‡n4äñƒ¥­íÚÞ]<)§Ü}®@¡A•.c‘áSæ+¸l\ U¯Ûø'Á_bðÌΦåI–öò MßšÌò™W…;ÚG%B…ù°WØtQÒùñªøWáJiOM;áòØ Å×Ù– 1š›Æì7c88©F‹ðÄ 0 oãEs&ž6Zÿ ±}äÃÿ<Îÿ›åÇ<õ¯±h GÉk©ø.­§K ‰¬§–æÞA%¾è%”“,ˆz«9fÜÖÜsœ×sðÄzwˆ>7Ûÿ`ßÙ_y:ï™öyÖ]™¸²Æv“ŒàþF½îŠùnOèÚF»¯[꺾™kq¹©ïŠ[¤G\ÞÎFTœŽ?sSø_áMΩs}s§|>’öðÈn.ÞÌË9“!˹mÛ›9<äç­}“E|—sªxöök›ËŸ Ëqqäù²¼–ìòy-¾-ÌNNÆù—?tò0iÚNµàS¿½Ð¯<-eyª8’öx&‚9.Øg +)ÈÉä穯¬¨ ,ý•u+}_CñMÆ•q Õ¼šçÉ,NV€á‡Gá^§EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^÷þ>m?ë©ÿÑo^wâkåÓ?h «™ÖwŽßÃQÊÉ M,ŒyÎvã…’x½÷þ>m?ë©ÿÑo^gâûRÚ-¿á³°»oøGaȹ¼{p?Òfî±=|Áÿéý°¾,|ký®¾$é_´GÃ?øGúµÑÔ|-qªxrêÎ >Ñ#û$Ò¼aCº*J <¹”ó ¯®/ÿãúoúèßβ<5©x©¾ ^}«Fðú Ã%5™˜‘}m]½šøÞ;ÞÐíœ\1ïÿ\èÑh¯4µý¦ì®´4Ô‡…ü_‹Â.ÒZÀª#+»q&n9æ¼Uÿ‚ê|ÓüQw£i×4Öõ Væ=ÃÓj¢8Ã5®ð:z×f/Åf2pÂQ•Fµj1riwvLƶ"–)UšŠói~g×úŸü{/ýuÿF-X¯Ž.¿à¶omÙ4?‹Œw#ÞÔ@8`pu‘ÓÒ‘ÿà·¿ c8“ÿT_jCÿhWúµœÐ_ü?ò9µ°;}bøÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÝà·Ÿ _îxwâ©úx+Rÿã?ü÷áLgxw⪑ëà­Hí ?Õ¬ßþ€ªÿà¹ÿk`è"øÌû"ŠøÎãþ ‘ð’Ò–ïBø£J2Îþ ÔB¨îIò8Ûüÿ‚¥ü9øûáÓªü!MO[²VØí”&þë£8d>Ì®lVM˜`iû\NpŽ×”$•û]¤¨ã°Ø™rÒ«>ɧù3éZ+Æá´ôúüAÿ|ÅÿÅÒÃiéô/øƒþù‹ÿ‹¯4ê=žŠðûÿÛ¯Ãúdeïô?GŒ–òã ~O]ûM'ˆ´Èot xŽòÒá7Å4+ ¤ƒÔ& z…çö¸=<â¿ûõÿPÚ~Ò^Ïs ñY{IDR~ê.¢¿÷ÿºë@‹{ÿ6ŸõÔÿè·¯;ñ5¼—Ÿ´Ô—ÚK7†£Dž%VxIžpC‚¤ƒÈ ãGçø÷,×´þ ñj¬L\í‚&'åaŒ­sPx³^ñïÅC\øwṘiÚtZ]Å®«r¶SG.÷˜0 $ …%^sœƒÅ|÷ÿê²ý¦.ÿk¯‰6ÿ¶/fÔü+àÛ£¥ØF4K 4׿tI#¹G†Ý\F°þÄ[ÜA$yYQ£”Œ÷×ç×~Aû<üC¾Òþ x›Å>Ó ™Ö9mî"‡<íA<´}+ï¸;Œ(ðí FKš^–½ã{'v´ÖûèÏŽâžÄgs¥[ UFP¾Žö×®‰ëò.øoCø…0]ñiX=Ñäãÿ"U_èß­Ñ„qéC½¼œÿäJ}ޝã[$_²üHñbc§ú&–•6ò÷ÆWà‹¿ˆþ,|õÿEÓò²¯¡ˆYj©Ìðºz/þHù—ÁY»½¼oþ)ò%Ÿ è§ ¾-+ž¿èòqÿ‘*¯ŠtoˆVèÂ8ô¡ƒÞÞNò%Ik«øÖËfø“âÅÇý:igùÙS//|e~»øâÇÏ_ô]0+*#âZªs<.ž‹ÿ’àœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ùφô?ˆS…ß•Ï_ôy8ÿÈ•WÅ:7Ä+tazPÁïo'?ù¤µÕüke³|Iñbãþ4³üì©——¾2¿]üGñcç¯ú.˜?••ñ -U9žOEÿÉàœß–ÞÞ7ÿ¿ù+T²ø‰k§™ZW Ïú<žÿôÒ¸Ÿø%'ÁíWÃðPÛÇ¿û;]Òf¹Ô¡Aˆ¼ÿ9o@~i@öÍzGÙ¼UªÿÄ?Iü¬¿gÓW#ê,ÁzŠú·ö"ø |Ðnu_ Çsq«ê¤5Ýõä¾uÄǶ[v\ÙLjLf[_†Ã¸º©'t’²ißwª¶ŸyèäÜŽÁãib±UÓP»Vm·ukj–Ÿyì?ð¤íçšÒ7Á;R§÷iÒ·¿á"ºþøü©ÄW[OÎ:zWå'èç’|QøEm§ØJÍõÏþ÷:Ɖà/6‹¾Ó£Ö®c±‚YY# $dí}­´y 8§C^…ñÉ⻈tûù¥Š ·¹ˆ…p\+­ðŠAà_ Úé>´¶µ±³M‘ƪOrI$œ’I$“Ôšùöbý ÿiÿÁE¼G¡~Õ^Ã>¶ð¥åƉa¦æm*âE½²U˜^ìÌò„w6¡ÏîÓ8¯¨|âm@x—Æ´Å êñ‘ûÓÇúŸû5ÖÂYr:,÷Çÿ^¨é!šÛPÕ$„5ÅÒÈÿ/Säľ¾Š(ãÏø$ÏíûJüMømæþ×>‚O-¸m+]Ôd6:½÷M»í„dJ„r%a<Þg#ë€bæOxÞãTf»½·—hè£È ü·nËy?Ú.m±.Yw7˜ëÑ›sd‚rsšä­ÿfMÃB»Õ¬?³-$·Òü©c쩤Ýç^ÅæFÛîäÞwO7˜Ü¶1½÷w‹†ô+-;M3µ½„ÛDf•¦¢(Q¾G%°Y‰$òNhÿÙpostfixadmin-3.0.2/DOCUMENTS/screenshots/postfixadmin-admin-create-mailbox.jpg0000664000175000017500000023643010676263533026276 0ustar daviddavidÿØÿàJFIFÿíPhotoshop 3.08BIMÿâøICC_PROFILEèapplmntrRGB XYZ × :acspAPPLöÖÓ-applrXYZ,gXYZ@bXYZTwtpthchad|,rTRC¨gTRC¸bTRCÈvcgtØndinì>desc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀá"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔ*|‡Â‡Çz¯ƒ|e©ø-lì¾j6v·7I¤Ã”0°ޯÉbc¹I^F‘ã,â\ëuß Þhß¶f•¬iú£â­NþâÎ×Q—RðÍÆÍ %´e’ëOÖ0!H¾`ß’ÎïŒƶŒåîlö¿õºû]{mÆ-½Ò¿ÝoϧWÚúÙñöбðWÃËßiRñÛjI£Gk`ÉæÏz×Kh ʪ‘3…băé[> ø‡©x¢9ã×4B¼´Xü讂4ewb)”—oBTà:×ÉÐþÍž“áæ¿ [ü8º‹V³ø‘iw8:‹ÆžÚÉ1IÛ6MYË*¶Ö>Z3Ú vúçÁý7ÁúGÆ-+OðV½>‡¨Ë¦ÿcéÚE´™î¼„ %¬Š6ÂR}ŽÓ ,eK±àÖNV§ÏøÛ±›‘výã…ôW׿×ä¯ó¹ôÇö¥Çüõ»®'â—í+ |ñW„ôoêW–×þ4¾þÏÓP.àòqËœü«¹ã\ó˯Ôyçìuá_øFóÅÿ´,Z¶£ãæ’¶kþYk VÐ!éi ¼ ä9ó®3ãoìóã/ÚwÆþ?¿³û&e¬^Ð_U³¹1˜$ŽéïmY$AûŠ ¸[!åxj•¡%ÕníÛ­¼ï§“ô&>ú}ÊýûúZïÍ/3ê{Ýz{+Ify.ØD…ð'8•cü3ø¢>(|8Ð|M¤ÿhÛZkú|Œ1O·Ì%]U°HÈ Á"¾[ñ÷?<Ò%:fákï }’7–Ýe‚ÂÖY  1Vbc` Èûpj­ïò½5Kïi}Úþ ºæòoîWûÏ´†«; ‰®ãKý©qÿ=nëãÛoËám'ÄÇÂo x¿Kð·‹¼?¨Xi1é71\m‚T7×ús ™#?&T ,cvƒ“=Ï„õ¯Œž7šóÞ;Ò´ß|GÑn#Š{iìnäÓÖ(åœÃÇØÜ–YCle`®+™¥æ—ßɯ§¼ÿðòMò«¾ÏðæÓð_ßõ×ö´øÏu­sÉñgʼn<$#ÔþÕ’º¹¸Êù%f‹g]Û²¹éŒµóÆïøAøó©xwÄþñ¹¢YxÕt/CÒn®íí&7WÀ~î܆VÎ#•Âí;ð듛ڿÉð¯®l¬F´Þ4ÿ…Oo¥›ðíºMAec$Bçpyù·ç$6{Ô_i%¦¿‚Ÿãx¯½w-«^=}ß•Ü/ò´ž¾O±õˆÕg=&º?UœfºÉ÷¯˜ÿexaø9á¯k:^›âéíš $ðþ›à;Í !˜ošÚÚâWLÊSÍhÜÝ+s“aü)¦[~Ö$½øïàïx‚îóPÓåð~«ý‘>©e§@±B¥c’5d±d¹Y$vqA Y‡KjÒQþ¾]ü»¢ºoúùÿ[ýçÒŸÚ³çuÖ~´¿Ú—óÖî¾<ð¿ÃíB/h‰má[ü\ƒÆow¬ø‘´ùÒÞãKû[»îÔò¥·{3ilʰUØ OøÑã[»í_ÀÞ%¶ðÏŽá]C¨ÄšT³]…•åªÝEAÞXIc*êUÀÄ«r¦ßõ¦¾—vù1ËFÿ®ú~sG©|@ø³ÿ úm/ãÔîOˆ5htˆŒ%rò+°wÜGÊ<³œdò8®‹ûRãþzÝ×É×~ñÏ>G?…´sÃ>!¾ø•q©Ù WOkƒ¦ÂÂo.yãFÛ°¿0b€‘Ëc×?dË¡ü$‹MÕ4?èzÞŸs$zÈÕ Í-ýé;¦º[¦n’V;„‰òà…Âmت›æ‹æÑéøÆ.ß&Ú/;9û²²Û_ÂRWù¤­ý_Õµ.?ç­ÝÚ—óÖî«ÿàEøLEíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëw\ÄÚÃÿ ï-­|m«ßE{x†Xm-l羺‘Áq¼o&Üñ»n3Þºoü¯Ÿ5íSFøMûNx³XøË«ÿÂ5câí_LÕ¯p–¦íã 3•J²¾Ö#>`#<à»ÿ†Öðü÷ñ×þºÏÿ"WEðßöˆð÷Å{Û›_ê÷Ó^Ù –k;«9쮣BpÁqI·æR•`T`39 [kmç‡Ä_2™¼ Fr-~Ãr8ôóüÿ×Êü;W¹„áü^2’¬’Œ^ÜÎ×ôZ»y»/3æs,ÀåõÞÒœãñr«¨ú¶Ò¿÷Sr]V¨í¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¼ÇWý³&°Öt-O ÞÚëWúÅ–Ÿ|Ò¸’ÂÚ î¢€Kãqc! ˜VXº¨?º×&?)ÅejY‡/5íª{uѽ;wÝhweYö ;u|Ü–¾[ší-RÕ[UÑèõº\Çü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'V—ˆ?¤ûFöö§³wÚ4ïüþ;^c’G¹R’¸ßøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN­/øjnmï‚GxƒvîÊ¿ÞLþAö Zi܉EÅÙœÇü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'U߈ô_… Ô|EñP·Òô}*=ÍÌÍ…E€êÌNQ’IM~}OÿŽø§qâGñæ‘ð×H?ãÕE‰’DŸþ -HÇÛAùA d„òÏeßó8ÕÄÓ¢Ò“:pø:¸”Ü‹ú·©÷Çü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'WÿÁ<¿oønø¢ñ¼=w 7‡.á·"w·&a"1àAs8(z°ê8ã'ݼs}¥x'XºðÁ´]JÚÆym Ò3À&Xا˜ªCÜ@ ‘œÖª…zx˜*”âú†7[.­,>"<³Vº~jëðfoü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'VF¯á?‹þðÜš·Š¼[ðMÓíáóç¹¹Ò%™ÚïÜ×!ð§âψ~:ëÁŒ?³ÇŠïíi­ô•¸»–  eŽô2@ük¢4ç(¹$ì·8HŨ¶®ÏFÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪂ɿájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ  ¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ  ¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òu2ãâf§wÅsð÷ÆŠQÕ®t¢‚úu3þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪾Œ69‡¾Ñ~ßËwðóà÷‰4«© [Vžt¯0B§+±¿%c€…ö®·þ¦­ÿDÿÆßø¥òuCÿ §ãý  ¿ðMÿÉT©øßÿC¯ü_ÿòU6Û Xªàšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*£»ø_ñ¾ÚÖY?á øT|´-ìkþp?ëî€-ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òu\ðÍÖ³¬øoO¼½—LŽk»hæ‘*¬Ê —Éš¼-µN÷øÿü]bÿÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òukj\i³¤zìq„”íYâÎÍÞŒ+šÑ cþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªïŒ¼i„ #·¸Ô5 Ö1ÚY[€e¸aׯ £»ä+ÎüOñ/ÇZW%Ñ.EÓ58,`Ô¦Óà𾱯Koo<“G É5˜»žÖpþìñŒd—»Mü1Õ¾‰]-_MZ^­.¦u*нI$¼ÝŽßþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“«ÏÇÄÏLbúȺ€Jÿ²ñ&@<Ž3ì#é[¿n~#üV´Ôeðf¿à—:Eçö}ì7~Ôìn-gòb›dÜ\¤ŠLSÂã+‚$VÄÑ©.XÍ7êˆ¥Š£ˆv¥5'äÓüŽþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“©²ü3øËå·“¬ü;߃·:-Þ3ïþ›TÿáY|tÿ ×ÃüÞÿòunn^ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê£ÿ Ëã§ý¾ÿàŽ÷ÿ“¨ÿ…eñÓþƒ_ ðG{ÿÉÔ{þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªü+/ŽŸôøcÿ‚;ßþN£þ—ÇOú |1ÿÁïÿ'PïøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þNª?ð¬¾:Ðkáþïù:øV_?è5ðÇÿw¿ü@¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¨ÿ²øéÿA¯†?ø#½ÿäê?áY|tÿ ×ÃüÞÿòu^ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê£ÿ Ëã§ý¾ÿàŽ÷ÿ“¨ÿ…eñÓþƒ_ ðG{ÿÉÔ{þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªü+/ŽŸôøcÿ‚;ßþN£þ—ÇOú |1ÿÁïÿ'PïøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þNª?ð¬¾:Ðkáþïù:­[ü4øÌ°¶ë_|Îåt[°¿­íIÿ SVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕÂøS⦯ãÏ?†ü ñsàµâ$.K±—íªWïfÔ Œ`çŽ+°¼ÔüsðÕßt3PÓúÝCFYìÿí5¼Œä¯©Hô4kþ¦­ÿDÿÆßø¥òu6_‰ºœØóþxÍñÓuÆ’qùßWKgy¡iö2$°Ìãu9WR25%rŸð²5ú'/ÿ¿ºGÿ'RÅñ3Sƒ>GÃÏÇž»n4‘ü¯«NhÖúÖ›§I©Z›Í^Iâ³_yàÿ\ Œ€SHÁëZôÌÂÔÕ¿èŸøÛÿ´¯þN¢ºz(“øÝñóáWÃ]K]Ñ4{­n{$Üa‡‰{Ë ûÆ4êÛ6;c$|ïðÿãÄZÝóë#¾ûF¯|€IrÃ(cê±Ã·!"Bާ’XüÕõœ’,JZV rkäÚŸös¶øw{uâ„/ö4îÓjZL<¶žäå®-uŒœ—ˆ}ÞY8Ê×Åñ†ˆ¥øI6¡«‡5Ý®ßqâfª½&«ÃX-×oïyùöô¹Ðx“ã-–›o3éwÚŸ™#¼¦;mNê(˳c…*å‰'©é]ßì‹ãÍWÆÿ ¼Ku,òj—Öz¼°Û-åä…3ö[y3+dMÒpØÉ8'ƒäŸ¿eüjøac¯x“Æþ(·¼¿žè4Vknˆ—2Æ›Û3`¢!åŽI5ôOÀ_ú_À_ ^i~Ôu]RûÖ¾’}BHž]æ(âÀ1F‹´,)Û9Ï5ÅÂù^eN½<^"KÙ8h“}RkOC,¿ë5êB»©µ}Ö·Zlp_³/í]âߟüG¡x¯áœþ·ð«›mFîãXûFËŸá…[ •ù÷+`)S’sî”È­ãähQ¦mòP ¶Éõ8P3è>¿A>€à¾$x–}#ÅðÅ÷ µF(’²K¸ÏsòŠ«Š#oç•Ü É#¹ã8ÜO éé]‹þXø·SK½JêöÞDˆCˆ] ÷”óóá<}áKoÝØE£^]ݵà‘Lr236… £“¸õ®J°šn] dÜnËö^=—DÖèè÷æ@$·QÄÌ{¨ìþýûúŽçÆý16¡£i¨Í‰ÔÌ#}¿Å‚ÃÐuÁÁ'ãü8ð,AyªÞàN<µÀ•ÕÃŒvP@ÉöÀîG®UCc S2K¡ñíeð[â?í}ûCZø[âEö'í&s<Ëy‘êiæJ‰<Þ[ªËb¼µ_¾Ïô}¯Âÿ…–þÿ…V5 6¢ÖÛšÀßÚE¿ÑüÝÆÓ~ò¾A/åíÇ–sþÕu»U”é‘Mq%ÊÙ®ÈQ€O¶dOÞ/>õòn®HÿðXy¤ºÓu‡vðZ¼3,›!KŸøF”ùm„³¾Íãh‘NX|¤7^j•i+]¶—Þ{¸xKEke¶’î¬lþ˳Žÿc¯Ú¢ûMø=¥Ûêžñ4Ñ˪(š(¾Í ºG瑃J#YI\n|)—!X}§ãùõúò›ÿEµq_³p©öòD×8I‘‘Ø0µÁŽŸ»n}«µñÇü‰zÇýyMÿ¢Ú½,¶)QºÙþ“šU•JÞþé%~öÛð>5ÿ‚¦~Ñç@ý¹þø3âlløm£ÙZkº¥‹¨’Úòy上)nbl¬©ÛFáX<Ænª¤x§í‰ûnÙüKÔ´×ømöí.çE¸C£ê2£C}¥L\He€±>HU!HBºd0(Ûkï?ÛÏþ ü¿µ}§‡¼Qà«-?ÆÞ´û4Fí [jV͇ò%#•Ãd«…›±5óÇ‚?à—ßþ$iÇÁ‡<ðþ{óy¨½ÚÞßÞÇ•c ª¢Ì–`̓€@?O9a°8̳<ÁÇÚÔ¦½Z3¨éÂ0”¦çˆŠQ—´¨””T³ÓXò¦~cšåy–/Z”~ 5(ÉZêÉ{¯]j÷ÿ3ß?hoÚŰÁ*ôŠÞMNßÅZŸ…µW´Ò?µÝCOóí-ÄÄ&ù’Y`]ì£÷£,¿xp?à©_t=fÏÃ>ø'á›?ØüLÒ¼«èÚ¯ŒËÚ-GNkë[˜/¡´!e* :˜ÜDñHœ¥ýañ/öqðçÄï‚v~¾ûf—áû ´ÉmÓOtŽHFŸuou)t`}¬jÃ*Xó_ðN/ |cño‰´Ð|Z¢]Mâ[§3]˜ X–ÙYÜ;V¤yEI}‹öcý²|KûFxkVŠ_‡Dñ‚,x“^»¹´}GÅ÷²(Iÿm°…`hÒÄVÑÀ-âT*äÃ+C÷¯T¢¾j4¹Ÿ~Vý­ú¿w—[د¤Ÿ³Z>gÓg*¶^RKÙYm{ÝÛu¶ø±â~ß×^ ðÅñƒÂ>ð:j¾ ƒìѰ¾Ôu;ÒšxYŠ—C^¢ÌŠ@"òÙÂãÈ4¯ÛëÅúV‘}«hZ øóRø©ñcSð7à [¨tk;km2Öh®g¼¿ò¤u·it]^ðJ#žFI¡HãnöO‡?;|×|ðû\ðV½ã R\·Ôoõ5ÑãInb6HŠ"I¢Io+K™Ÿ1!Êî“âü']ý™tßÃa|"´ð-þ•á­'Ä6bÛ_ØÎu=UtËx.®ÞÞ³K$mq3Ž%PÌô¿ˆßðLŸøƒà'…ü"muOZ|=ðn·áM#IÕ5qem­Á¨Ù­´‘_ÜÁndrƪ&…s0G ð_Ù×þ âox‹â©ûmj~%€ø‹Ãz&¢Ýˆ×%ñ•>&¡ ô:ƒXÚAlmî>Çä"[±so$×Gš@b’“²›ÑoµÞ’Õl¹¯ËnÒWeÕPQrŽíéÛâ†ýyyyî÷»Ñ·¢ú‡þ ùûpi·ŸÁÍ[Äþ¶Ñmçðö½sáÛöÑ5ØõÝæâŠC.Ÿ¨¤q‹»vIã"Clz²¦¼ÓPÿ‚¢kÚĸ?á#øC}gð¼üIo…³x»þ;wœjo|lmç‹Mï{F¸) ’4‰$nÇlRÆ •ì¾ý™5­3Áz.—㌿¼M}£øŠ6¯u6—ey~‘?³®ÆÂ^ÉðKÆ#1'2tÇ|'ÿ‚b\Ü|KÔ|CñÿÇž0ÔtX>'j_´¯Ú_Ú·†ÖäßK>Ÿu'ú^y‘‡Šv·ûAƒí$ØÄn:ÂÏm ’æó³§;´êYti]òêc+Æ„­¬ÛÓmU-ådÕ;¾Ïkèmx'þ Wmâø(eÏÀMoNð!ºž F[ Çvúίjl„,Ë«é1À¦y©1x³,»‚Þ[µóf…ÿÛÒ¿foƒŸ ´Om¦x›ÅøHñ_‰¯uŸZèúž£íÌÖÈ4{&ˆZð5´Ò< `UM˜³„¯¤þÁ*¼5ð[㎅ã_ üFø¡4~×µÝsHÐn®´çÒ¬¶¥–}BØ*؉¤ŽIæ–W™<¤U•Pº¼šOüßBø}ákÿ€?¾*ü7Õ¼=á›oÞßh—:dÏâ=6ÚY%¶Žú+Û à2D÷;&†8dâEÜAb ߥÌô_žÿv­'nÎÉé}f×%hÇwð¾Úÿ•Ú¾—i;n°ÿiïø*ˆ?go|NŸMøAâO‡ÿ¤°—Æ^%OÛÚÉmiskËÉedñ—ºšç$LЩ@ Hî|¡Ô|Cÿ‚Yx ŠòÂ+szŸ ¼o៱Kõ_í6Ö†Råv|µ‹ûe2Ÿ1o$ò»¾^Wâ'üëö‚øûñwTøÍãßé¿>!êzD·>Ðõ TÓ|QggaiÅ©‰lšâóÁ"8µ¸Íƒb9#å]¿Ž_ðJoüvøÉ¬x¯VñïÅOñ¿¢x«VðÖ©Ú[èúž«¤›aku:½«Ìã˲·‰áó|–«ùbTIT¦šŒy·¾¾JñíåtºÝëä7½:|›·Þµß¥­e½óüGÿ)ñFƒá/Š>+ƒàÞ¡yàÿ‡!“Âv—qøŽÝo¼S©.­œ#²¶h¤dÎy<±bXÚ[Æ«1ƒ(Ä:Æ-OðÇü_ÃVñ¤|mñÇ>%ø©èº†µâ}jâÅu9ÓH¹ŠâÂÒ4µ´†ÖxÞ7ÊG–71mï¸gIOÙûïÞåÎZ9=<î»[¥õ*N £q^ï;·øo¢iÿwçÌûhyçÀø,ÿƒÿhÛyþøkOÐÀºÖuÏØËŠ-îuè¯4ƒ(¹“QÑV1%¤¦Ú"s,†M©º8¼ÅÏ­~Ô¿µÏ‰¾ücðGÃOÙçáâ|Cøã?RÖ¡†ÿ]] HÒôë¶K‹‹»ß"â@L—Ö±GVò–i>mŠ T¿?aûoÙÿâö­¯|+øñOðŽ³«ßëóø ¦Ó§ðò_^—’æXšK&¾‰^yd¹òRéb»NÊÄñÏüžÇƾ¿Ó>,|^Ðü{ðåu+m3Æöڕιsg ’æÊð]ÙMks1ÛmnY>Ë V1m‘§}]½ï[?–öÿ·|ô3_M­w˽’éç{wÚ]ã«âþ)ÁQµß†~"ñÅóü&šûáçÁíKNÑ~"x2ÁZ,>|OðO‰¼LšÎ“áïíø" ÚKÍß5Í7U²Ótë{U*¹¸žQ9 *¢Êí#mFu÷ŸÚãgŽ´o üÐt‹koüDø£âÍ.ÃP¶µš=^ÚŸSÕ¢I ¬ªlì.­-q%ÌL¡Nä(|/“à÷„.<3ðºûãoü ²ø˜ø‚¾×Åõ[ØæÓ Ãk%Õ›¤n'i[ÊÜÑÄ îïþ ƒ3þÛš÷Á+xZסÓ5{ÍßCø…o©jï=„QH-õ}5-ƒi?hƒ'áNðŒB-þ EáâÆ—â OüSþÀðÿî>!hÞ:­¯ö—«\É<·.‰ö_´I²ÝÜIåK;¬m+y^X8¥øCÿªð×Á_ŽZ¼'ñâ„Ñø_^×uÍ#AººÓŸJ±þÚ–Yõ `«b&’9'˜HY^dò‘VUBêóM?fã'fÜýaM'ò’“²ÒÝ.ìâ£N§ÓNš+ˆdG–sý¨’`l¥ÁWxÙp¾(Á@¾$|Xø¡ð¾OƒÞ¸ðÏÂëï¿ð‚Ëâcâû\[Ômoc›L0 ¬—Vn‘¸¥o+sG+»×þÿÁ*¾ü,ðwÄ­Àíâ+oŠ~5ƒÇ:¬‚î&–Öêèoãµµ&""³»ˆHb>Ñ>s´ø%„tO‹_ˆ-<ñOûÃþ7¸ø…£x8ê¶¿Ø:^­s$òܺ'Ù~Ñ$rËwq'•,î±´­åy`â­Jõ©Ë–ÑN-¯û}I§ÞѼWGmov?RÝ©$úëïÒò´»Çdî®õ~5þÕçÃïÚKÇCE‘çðWÁ…—^/ñ&ž"µ¯î¥‘ì"[’Œñ Ñõ"ʼ¶ÂÌ  oÿj»øuÿ T¿µ·ÂmkáÜWÃ{ߊš4vÚÝ®µu«if%º‚hâ–·È×ÃÊK Aü®Ð|Iû#ë÷?iKHoôGÆ?›U{&™Þ;;HßJMÓí¤b¬Ê‹¼O&‡™,̠眆ŸðJß Cá­r/ÚOÅþ>øµ}âo·ÃÉÛÄÚ…³ 'E˜sefÖV¶Ç÷ޱ–¹—̸"Éò Šwmóì ­µù¤ª6¯Þ2p]¹SÝÚ÷7á¦òw¶Ö‹¤½m(ûGÝ·öWÃÇüKÿ‚³ø£öyðŒÛöšø2Þñ^…á‹_i}ŠTÓµ .kè,e–òý-ìMg-Ì2]íŠxâ…¼ÈäœGTÿ‚‚|VÖ¾"þÎÚÂ/|)ñV—ñŠËY½ÕnôψO}ai—–É&¨Çbí rÉ…K òm.{/ÿÁ8ÂÞ³7ÆŒ:¿Ä KF´ðæŸãMB]]_@Ó-îàZZƺbÙ²Ë"æi'¶šYF79Ú…cøÿ»ð—­;áü+¿x÷IÕþkÚ·ˆ#Õa—O3ëòêÓ´úœ7е™¶ÜHä•¶†BÑb®V’¶Îÿ«·þJÓ—÷“åM3 Iyÿû1¿þL¥Ë§Âýë4|ãÿõý§þ7xÁ^ñgÄ‹}{Ä>1ø§¢x«Äzo†.‘ª=Œ¶ÆÞÜHtÕm/cݵª,,èR1,¦F?'³ü ÿ‚¶éŸ´Àÿü@ø'á°xoáþ›o§¨xïY_ XÙk¤ÿ¦isÏ ˆ>¦?´]$aœ$BV ·¼Ñ¿àœ¾ðŸÃoøsÀ~-ñï‡ßÀÞÖ¼7£êÖ7–‹¨ÚŪ¼O<áÞÙ“ÏŒÀ†'òJ±Áßü7áƒá=[@ø¨øÃávƒª`ÞeøfæÑlmµmê;›=e`ºµ™^ýŒG<’o[…E2£È« ˆ¹6Ô•–‰[¦÷zï¦ÊúÊÚÆ)ߢ\Ž1³Öî÷믗çm#Í£|¶¥ðëþ àÿÿg¿ëß< £xŸÇ~;ñÝÿÃÝ'HÓ¼aþ¸¾²Šêæ{µ×V؇±û-”Ó,ÉlÒ6Q;‰ ðöøø“á?‚úö«ñ#Á¿Œ|mâŽ:Ï€´¯ Å­Ú©ÒLï Bð¢Æöð­³39Äl͆e·mÿ›ðöŸàq§é_þ.[x‚ÏÇ3|DÒ|R/tÖÕô}^âÙí¯-ÖÞX®{­ðÏ ¨>ÐËV5N»áü§Áß|/ éšoˆ¼q­>ƒã˯ˆÂûWÔ¢º¼¾Õ.a¸Š_´Käñw+mX¸m£m=Tî¶j)ÿàTœ­òU,Ú¾ªÖ»FR|ÑjÛ95ÿ€ÕPæùÊÒvÑ·ªLòÿðUoüNø‰à­3âWÁ;è>'ñ®­ðÒëYÿ„® @Aâ-:;ù%KX{›þ̸Au'Ùäó0>ϳ÷•ÏZÁTüiá_š ç€~k߯ì¾Åñ/\Õoõë ʱYnRT—ʶ×n¶²4QÅ Ç# Ð*ï>û¡Á?¼áÿøF>Ç©x•ÿáø‘«|P³ßsó5=GûGÏŠLB3l¿Ú×;mq²<ÈØmÕ<ÿåð?‚~j^Òµ_Icª|<ᤲKune]5턪D ŒßÍ– §ÊŸ'w=G[•8Zúß³|š/Oi§~TµêtÓTy¤¤ß-ãnöö7ëì¬ûstÙ(ü{ûGë¾7øëðCÃÿ® Zx«FÔü{¬Ç4(î‘oe6öo#£v–ûUÓä£vÛI‡MÀó_ðN?Û§Ç_µ_Ã?Þ~Ñ^ðï„ußiηj4]mïížÛO»±µÜRHQ¢gkóòo}¢w3l~‡ðöW?>4ø‡Ä×Z¿²o h^ ðôÅ¥±ÓtØçrÓ3K=ÜÅÊ ÅŒ ?²ßì þÊRèËá_xÏ_²ðž±§èVšÌÖrG£ØêWVWRÚFðZÅ$‘Ç.Ÿ¦y$Y»›:17»ö=úöçéçÉdï}Sµ´9ðº¨ýc¤zwäëä§{5gk_Eeó×íÙÿ øûû(~ÒV¾ð…< ®i't>ôË׸¾Á<†ÙvÌŽÁHd26`Ú¾ o?ÂÛøµý•ÿ 3ØÔ—L㳎r¹dˆ;»mRvä±Î3Æp-x“áþ‡ã oDÔ¼Q¦Y__ørå¯4ÉæŒ3ÙLÑ´lè{ŽÃò=T£ª‘ý™sÏü²oäiˆùÇâg‹ÿáý”|AªÛmi´¯ ÜÝ"’9hìÙ€üÖ¸?þÖvßî^çLÔ-õ 4Ü‹°_Ìë!grÛ\•,d9;aHdl*¼bºßxq>"ü¿ðÜ÷&Ñ5ÝM5§ ¼Â&·1–Û‘œnÎ23޵‡ðönðŸÂ Eu;n5ŸËý³ªÈ·ˆ¾V*Çl¤9R HÃ…]ûˆÍ|Žw–f¸ÌÂLUNš‹ç“Õï¢QÚW»¿3Kmö<,} u\Jú³J6^ó{4Ýì–­ê¢í«ïêñœ>Ùêr麶Œº­°—ì:­¿Ù¯msü3E“±Ç¦MlhÓµÎi$œ´£©Pk›[¹ui>ͦeä~‡Ýˆw$ÿJê­ ¶ñÅÝB ¯¬‚qŠRw}Ïjš”`”ݵ{_ÎÄ¿ ü7§ñ]Õõ5ˆŠÆÛpÏ–žZÈÄ}ZNÝ•óoüâÆ±ðïãî¡¡x#VºðõßÄóðÿÀÒêö¸:dú·ˆc–kwÏáxmï®á2‚KHäº1ÅrÿðŒheJö+ Á[îÁè~iøÓû*|oý¤ÿgÉþþÐâÏÆZd¶ÒZ&·¨|8Ñ^´,»‚qâ³Ãzˆçlél 7;;WÓ_±ÿíSáä>>> Ðu/Ùê¾ µ›J¶Ô.-f¸{H4-&Ä;ý–Y#\Éc0Û¸3€Ï™›×Ž%áÿÚåZJR½ãRÑ\¶Oš¢‹÷»[MW ÅRäÆÁRöw§^.<ÏÚÓv]ÚW}ì›¶Œ‹ö$ý¥“mewª›Û‹¶·vŠyûD>XùòÀWE¦~ÇÚO‡<9áË_øŸÅš6©á”½ŠßX¶šØÞ\Gy)šâ9–HV“kÝ‚¥©9©'ì?á› -?ÀÚߊ¼3i&ý…©&Ÿu :Í®ù$?h3DäHZiÏ›ÇýóŒàŒšÛ믧[|¶¿]ìíü¿]_罺w1!6ÇTÕãÒíá³²¹*°¤Ì¾Sº4Ž ¼òK(1|Yý‹u_øê]/᥋è^ ¾¸Ó$ºòüS*Xȶ¾B—}4[å¦@"Qçùm¶7q¹F=KRý”t–Õ`Õ<)âx{\¶Ôu B=JÆks./¤ón-Ù%…âxK„* )E!³œÓ¶ñó_úM¿ü…ÒÏ{§åkJÿ=WϦ‡}à?[|Bð>¯èÉ4všÝŒ7ð$ÊDIcWPÀ††FO5­Ut[Ò4{K[‹»›ù-¡Hšæä©šàª€^MŠ«¹±“µ@É8qV²=iÊ×vØQ½•÷ (Èõ£#Ö¤aE´dzÐE´dzÐ_:ÁY¯üA§Á>¾#IðÕõ(õiLöûBÙ›˜…áLr?ÑŒù>™¯¢ò=j+ÛH¯íž¥WÆ<ƒ@•?·F±û8xOö"Òõ/Ù^ÇÁ:ŠôÉ,¦ð.­¢Ok~³&ÖÞŸ¼oâ2™I’ØlWê?‡|ÍkÂÛÂ)f¸¶O?n 3±íœ×†øÇþ oð+Åš>¿n~øBÊ_ÚËiqsg¦Cop‹ ùš9A³‚pA×1ÿúýŸ|mûü8ñ‚þ/xêxbÊÿo‚m¶Ô,l¶’a™óƒóµ’0Eð–ŠörìÝÙlWY§Ú›[e„°M™_• &€'¢Š(_[N…fÒ.ÿÂcQÿäzöª(ó爬ü5â땟Å>Öµ•v,—¾‘Õsœm³Œ“ÅfÿÂàm»áÔöÿwþëü~_f¯¥h¨tâõhµRkDÙóç‡lü5á–ŸÂÞÖ´év4–þ¾Ùzà•¶Î2Õ­sã [Ëy!»Ñ¼W,R©GGð¾¢ÊêF Ûòí^ÛERJ:$K“–­ž¾#Ó‘B¦â`Àš†þKÒÿÂM§ÿÐÄÿøJêü^ãE1ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=#øNu*ú‰ˆ# j?ù/^åExBêº:¨ ᯀ8xJÿü–¥þ×Òè[ñþWÿü^íEx•¿Œ--#Ùk¢ø®5“Âúˆ¥½?þ˜èâïü&5þG¯j¢€&°#Añ9þ¥]Cÿ‘é¿Ûúgý Þ%ÿÂOPÿäz÷:(Ã?·ôÏú¼Kÿ„ž¡ÿÈôoéŸô/x—ÿ =Cÿ‘ëÜè  þßÓ?è^ñ/þz‡ÿ#Ñý¿¦нâ_ü$õþG¯s¢€<3ûLÿ¡{Ä¿øIêüGöþ™ÿB÷‰ð“Ô?ù½ÎŠðÏíý3þ…ïÿá'¨ò=Ûúgý Þ%ÿÂOPÿäz÷:(Ã?·ôÏú¼Kÿ„ž¡ÿÈôoéŸô/x—ÿ =Cÿ‘ëÜè  þßÓ?è^ñ/þz‡ÿ#Ñý¿¦нâ_ü$õþG¯s¢€<3ûLÿ¡{Ä¿øIêüN_éè0º‰ÀôÔ?ù½ÆŠðÿøIì?èâü%uþG¥ƒÅvV¬M¶‡â˜ÉêWÂÚˆ'ò·¯o¢€hìlí’K™ä PC:šú*¼/þ MñÏÄ¿³oìiâ¯| ¹°´ñ‘s¥¥´·Ð™­ÕfÔí ”:€N SH2#9+åßþÀŸÿkƒö¿¡ý¨>>|3ñ‡‰"m[KŠ BÜé ëæDÓh-¬g*VßÏ‘Ñk6ìªü/â_ø.ůh8ý’?à©¿L_`ñ—á±âÏD±A=Êjv“#Ý["¤±ªÈ“ÃòèL@ÔTn0n;ØéÁS…\E8Uø\’vÞÍëo‘úõûÁE|û^Û®‘: üA¶·óï|5{:¼®€ ÓÙÊ>[¨#,¸tÈ$d€~„¯ÈOØ7öSø‡âߌ?> ŦÚxÁMâ{»ùu­#P…ÛCû:ê1,:„$£Ç(ÄP‘XÈû¼ vWëÝe…•YS^Þ6‘ßžÑËèb䲺®t]šrVkº~ú ¢Š+ ñŠ( Š( Š( Šãþ5þоýšü+o®þÑž8ð€4K»µ°ƒPñ&³m¥ZÍpÈî°¤·ˆÒŠVHŽ0§ ~,xWã,|SðSÄÞñ‡†uO3ìZ¾‰¨Ã¨X]ùr4RyW³FûdŽD;IÃ#È"€: +åø)‡ü?à—ü‡EÑ%ý¨õ]^mgÄ‹$šf…¡Ù ÍJî(È.ÖtŽ8Ã0]ÒH›ŽBîÚØùgEÿƒºÿfÝwà‰¾#Yø'ãzèžñ“Ỹ_GÒÅÔ—•¶§qÆ£SÚcTÑ®ƒ’ÊAx°¬ ýN¢¼ö ýµ¼+ÿý“¼)ñेˆ4¿ øÃíŸbµÖà† ø¾Íy=œžjC,±ŒÉm!dl©Rpr°PEPEPEàÞÿ‚‡x+âí3?­KñD^!ƒP½ÓZâkhÈÉh²´„8œ¾Ò }§fNF@çóEPEÇü|øÙ¥~ο µoxÚßPºÓ4'ΊÆ4yÛÍš8Wj»¢ŸšU',8¯BØQ^mû.þÔ^ý­|yâ?‡6zÅ•– úk¦¥qÊdHâ#‘ÆÜL¼ç9_I Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Í2[Äò\2¢ ,ÌÇ@êI¯æãöý¶¯Wþ U7‰~èÖ“ëú´¾!Ê "ÕíµC 9-Ù×HdMÐKÙ\×î·üâ$Ÿ?c?.—v¶:—‰¡‹Ã3îÚÐM¨Ê–~rŸX–w˜ú‰í_ÌÂ}bããïí9ãéÐ:éÞ'ÖgŸM‰ÉO*Á[Ë´‰O¢[G Œá Þ/Ùþ uñoƺmŒz÷…´ïˆöÒ ËC4:.²y)¸ýŽèõlóŽjü¶ý¿ írÕù_û4é“èÙÚys[ÝÞÚÃwua(k…»Ž4™£’7’hÓ-ÉKøbÔl×~ÿðg“öý”þ"x Og7Þ*ðíÄšYóLÁoÒ2ö—q9‘É)p‘0”It¹^.˜ü¢ŒOÐJ+…ý˜~0ÅûAþÎ>ñͦÕ_è6Z«¢ÿË'šwOb¬Ì¤z©®ê€?üAÿIþÑzüsÇ?|#ðÀtÇ> ðn…¥hÖ·¶šö¯%´÷vÖîå¼x#̱[¼ò6ˆÄÄà¯_ðgþkøãðþ %¦üÿ‚À|ð—ÃXµ»Ûkµh’Ì%Ñ>Ô@·¹–F¹¸†òÜ–PòBÉ´oa’…çÂïÚŸBýŠ?àéˆþ(Ùj7¾ð·Åÿ>«öGºšÒÖiµKyn„H 2À“4í´&#¥t?ðXÏšüŸþ YðÿJÿ‚|&§â+ ½'Kð}–¦4ù­MÛ%ÕÍÌ÷¦)UeŽRí·<Ф-»61‚@?pà¸?ð] Áü  Z§‡ÛÆßüd’Ë£èŸjû-½¼¯uw(VesTUÝ!V¨VaðÏÄOø8göùý•>xgãí}û*ø Oø9â‰`6—6²ÜÙÞ²L»â¹½¸{Vt)žÙ8ÀɼÏþWýük{ñÓá¯ÆýK¿Ô< †ÂzÜ´‘iq^\ÜFg#ýX™ov« BFs´Ïø-ÇüMû>þÝ_ðGû†¿.5k¿ˆ^?:GÛôIt‰í×Âßfº‚î]÷ †_šÛÉ_%äÈ“'4÷wí!ÿü=økÿ‡Ðÿjoƒ>½ñ7ü%š¬~Ó|=y8µ’ÇW+3Ëo{"ر%´Ï•ÌQ6‰/Ï??à­?ðT?Š t/‰¾ý¾xΈlbÕ´Ïìëã£{g*‰#‘#mUæù‘”‚m¹9¯ý”gŸ„¿±ü‡£èð[oøÏLðƯ‰­ªi°éÖ¬5 O6Ÿþ‡tPð“•q&HvÝ*´d;ñŸíãÏÙóö-ø8úÿüûöèøýsâ» ¨³¼ú^©¦Dñ4«æù·b;ku …Ü-Õ۷ ¸}…ÿi|søýñkö/øuñáv—àσž&´ðÿ‰µIîçι¡xÊ{TÍ¢H:Hb†ÕØ–k5ýâd÷c ÿƒx¾>þßzì­û?øcàOÁ…ú×ìÀþ ’ÞçÅ÷·ð¦³—.»puIÄGWüÈ]ïB²DI„“9|Ïø-/Œ~/~Öðk7ìýñ öœÒï¤ñ¼^.ÓõŸNÖ~CýëÙÚÞͨùéq`䀫ºà` ^ùÿ´ÁT~Ïû üý™fñŒÐ|k‚MyÃï£ß¸nÔuMév°›`«ù¥S”+Œàʯø:sÇ?I0§½à¢_ðPÏÛölÿ‚yM®ÁTÿdÿÙe,ìüw hž Ðu½hÒ$šn¹%ÔÂÖ-^àC<ÒÊ8ß1á.gP?'Ìÿðz·ü¥7À?öJ´ïý;ë÷ÿü­ÿ(²ðý•];ÿMÅmü ý¼?h'ÿƒyþ|}ÿ‚zü*ø ¥ëšoöÍþ·à+·–š:iðj×ÐÉ&‘ik}ŠUòMÄ‘³?š^f\6þÿˆÙ>.Ã!ÿÁB¼?àoëž.Û¢h^Óo,å²ÓÙs—¿j»œù²ä8vìB»²ÌU=×ãÇõï‡? u]cᇇeñf½m䥦—”k–’hã' Wg>Èr@ä|Ñðïþ #àÏðK3ûM|Ò†¿mg¬Ÿ‡_P×]ûÜÁm=œÓßkFn†ÙûÄØÀà7ñçü{ŵçü‹^ñ÷ÂûÀ’Ùø¹|;¨‹MPÞK ¶Žf˜N±Dc $ðÄ@3ó|Ø’ÇPŽ!a\¿xÕíg·{íÓ¹ïÒá|ζO<þo„„ý›Ÿ4t“åå¿6ÒZ¨Û]÷:¶·í3ðCïâ_Š |'§xff‘f3x_:i"XȉAó$PWŸ±¿à—>¹ø…ÿóø™ iï[ÔuM>'^]6Ú59íË ë<ž ÿ‚|RøÿñkQ°ý—þézöƒ¥ƒ<‘\ÌÑÞ=¸liŒ«LÝ“kž nÁ¯ý‰üT|wÿ[¶×ÎãN:ι®ßK‰m|Ûk×òßý¥Ýƒî _ÿ‚fþÓ~ý޼qãÝ+ö‚ûn‡&£ïk9%x'¶iƒ@èŠYY¼îãNH¬ï؃ÄãÆÿðU;-i-f°]_Z×/E´É²K2Öñü¶^Ì»°G¨ ¤¿à¡ßðPïþÉ_t¿|9Òü/{c{¢E©;êVÓÉ(‘縌€cÜB¼c9'ŸN_âçüâ¯ÁŸh—þ=øc¥èþñfóM‚îw:…Õ°+’eI Føu%,ÃŽçËÿà¶òu:ýŠ–ÿúYy]÷ü>%…>,JTjªûjü`ÿ‚¢|QðŽ‹¥xÓà tÛ†úåɃL¼ÕÝžîÿŽO•(òKb2Œ Àf½{ã×íEeâÿø'MçÄïø{BÖm¯­¬åþÈ×í~Ûdd7ÐÁ$rÇ•ó<·ÞTä|È­ŽÕ៷Ìkü³à B‚t3Àît‹‚SNÿœŸúhÒb¿ÚVï_ý…þ#øãBðŸü1}á‰u9íì4-,ÙióÉo§Ã:¼Ñ,„³B± UQÆ3^qð;þ ‡ñ—ã~—â+Oü:ð÷ˆµÝ6ï!k–ÞÚÎßæ´âK‚eb| ˆŒ¤üÿ{S`/ùEwÆ¿ûŽÿé¢ oü¶%wø¢Ì °RƒŽÇí¹ ü¨׿àž_ðP‹ßÚïVÖtˆ:NŸ¦kú]°¾ôýâÞæ áä‘™‘•ž?â ïíŽ~¦¯Ëßø"üN¿ÿb¥Çþ–Y×êQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyWíyû(i?µ÷ë=ź枚eÜ·öþ\i-½Ä¯euhê&¤‡mã±XÞ7*•Í~4üjøAð þ %ûSÇðÇã`ÔôÛk"ÃYÓï&¯&£mwwyh‰m¦Ï›•xšÂF‘×;UÓrBþõ× ñÓö^øoûNé6Ö?´W€ü!ã‹{•lÆ·¤Ázö>j…‘­ÞE-0UËÆU¾U9ÈüþøñãÅôå¿àŸŸ²?Åí]-£¿ñ"îhóã€ñC0–æe?ìÄ=~Zùsã/ü3ö£ñWíñãWůèßð™xÓX¿•à«èo­¬`[X`XcºûMŽ« ˜€–òžxŸpÌ rè˜ÿ‚Tøƒöu¹¾ºÿ‚nüløƒð²Âè ¾Õ®Sľ‰]Ïm¡ÓÚ‡b±J’TòwÇÿÚ¿ãÏÂ|Eø•ã‹:‡‰|OðgǰøZßMðíŠhþÔ,-¬dº¹{Ý>S/Ú&¹š‹BæeíG‹Ë ‚óïÀ8~Ëys¤]Ú-¥æŸyæj:CŸÓî—’÷VQÚ£C0äùóé6r÷çï×é7ìÚ¼E§ÝÂâhî¦óPâDšNì%ódY_±o>òAŒPqU¾*~׿ h-í¾=~ÉüE¨F¥ûWàô·ÏdË‚V;À5 ž)v¶ F f¼¾ËPøƒðÛÅjÿðMß…?'½wó„þ%hñZèSF0YcÕï/öÄ€Ðíu@Uƒ€>œÿ‚AËçÁ?<V9£U¿ÖãA*íb‰­_*vRª»ÙÅ}-^_ûü#¼øû%ü=ð·Š4Û]#]Ót;wÖí-®Úîµ9Wξòæn]MÔ³°< €£z…~þÅ_ðE¿Ú;á‡ü¡¯üyø«ðÊ;_ƒz—|m«jM{J¸Iìu+}Z;Wk4ºkŒJnà [—Ìù€Øý¢øIû&|+ø¯ßêß>ü?ðN©ª©[ÛÍözmÅà'$K$«8Èæ'‘^EVÖ4{OéW:ý­µõ•äm ö÷,±NŒ0UÑ ¤pA5åž ý€>ü8ñ”~#øyðOáƒâdó£Õ4ïéÖ·¨ùÎám3GyœÉ3ZÚ´&8 ŽÌÎQT³1'$Ôãöø&>‡cà÷ÂÏøWæ÷ûDøgþKìµÏ±y>O›þÞÝÞõêtP˜xö%ø1ð»Á:φ¾|"øaáÏxŽH¥Õ´­/ÂÖ6vZ£ÄÁ¢kˆ"ˆ$Å¥Á*FF+ªðGÁŸü2ð½Ö‡ðßžðþ‹}#Ms§éºd–·ʨÎñFYŠ¢)$BÐ éh¨öqrç¶½ú ^4^T~Í»¸Ýòß½¶¿™ÈZ~Ͼ°Ñ/´ËxB7SÛöËHôku‚ïk_60›_ ªÃp8 ¢µüðóÃÿ 4©,>èz?‡ìe”Îöúm”v‘<„*—)€X…Qœg jØ¢¬ç9Ícà÷„|Câxõ½ÂÞ¾Ö¢ ¥ýÆ› ·HGLJÊXcsQiŸü¢øÍ¼G£xCÂöž!ydµHt¨#½i$ $s8Måœ;î9ÉÜsœšê( _Æßüñ/UŽÿâ?„ðþ§¢iž_Øôë½:­-<´(ž\,¥j£`¦ð¯ü ð‹Â3áÿøF?èýØ?Öy¿ñï·ËÿYóýß½Ï^k ¢€9ÿü&ð¯„ü+{¡x[Ã>Ó4MOÌûfi§C ¥ß˜Ì…T#î@ä€âü&ð¯Âïµ³ðχü;öíŸiþÌÓ¡´ûFÍÛ7ùJ7mÞøÎq¸ã©®‚Šåüð?Á_ 5Y/þøCÂþ¾–#ÜiºT’¼d«/T•SŒã*jê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óícöJøUâ(õ¥ñÃ/‡×ËâK–¼ÕÅLJlå¬í¿t·;£>sŸ:\³äŸ1ùùŽ}ЇNÓ­ô}> M&mmmcXa† (£ ª£…P5r?î¼Ieð§U—á#mñ ù?d8ˆã÷ÈýoÉ÷7õü9Å|çÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øWº~Ìwþ5Ô|vÿß~®5XN ¸òãÛþ£åûÆN¼þ F¢¾tøï¯ük²ø­ªÅð’]¾_'ìƒmÇîP¿úÑ¿ïïëøqŠä?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ëþkÿï~+iQ|[—w‡›ÎûXÛ`3û—)þ¨oûû:~‹¢¼çöœ¿ñ®à+Gøû5s¨"ÌqýÇ—&ïõÿ/ÞôçðÍx_ü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiá^éû1ßø×QðÛüw}ú¸Ôa8€~ãËoú—ï:óøb€=ŠùÓ㾿ñ®Ëâ¶«ÂIvøy|Ÿ² ¶¹BÿëFÿ¿¿¯áÆ+ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ×øâO³ø÷DOÍ!õølÓ¹€È¾gܾîï»Ï§4õÈüwºñ%—ÂV_„·Ä+äýâ#ß õ¿'Üß×ðçóŸü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯—>ø“ãìþ=ÑÆ3gH}B¾4î`2/™÷ï»»îóéÍ{¯Ç{¯Y|)ÕeøHÛ|B¾OÙ"8ýòÿ[ò}Íýq@uò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð¯¨þ Ë©Aà-müq«¦Ÿ;XŸ—‰Ämåýÿ—ïmûÜzñ@ôWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð®¿àF¿ñ®÷â¶•Źwxy¼ïµ¶?¹rŸê†ÿ¿³§ãÆhèº+ÎiËÿéÞ´³W:‚,ÇÜyrnÿ_òýáN ×…ÿÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠùÓàF¿ñ®÷â¶•Źwxy¼ïµ¶?¹rŸê†ÿ¿³§ãÆkÑiËÿéÞ´³W:‚,ÇÜyrnÿ_òýáN УQ_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð¯Fý˜õ¯‹:nÓã¼»ô§»B6Ùßù‘íÿP7}Ó'^?PºQEQEQEQEQEQEQEŸâŸùOÿÿÐ…qõØx§þ@SÿÀô!\}QEQEQEÔx+þAR×Sü–¹zê<ÿ ©?ë©þK@þ)ÿôÿðýV}hx§þCÓÿÀôYôQEQEQEV‡…¿ä=ü ÿA5ŸZÿôð/ýÐÇ¿äýuÉ«—®£Æßò þºäÕËÐEPEPEP]G‚¿ä'ýu?Ék—®£Á_ò “þºŸä´âŸùOÿÿÐEgÖ‡Šä=?üÿAŸ@Q@Q@XÒä+mÿ]SùНV4Ÿù Û×Tþb€:ÿÈ øþ„+®ÃÅ?òŸþÿ¡ ã袊(¢Š(¢Š(¢Š(Æ“ÿ![oúêŸÌWQâŸùOÿÿÐ…rúOü…m¿ëª1]GŠä?üÿBÇÑEQEQEQEWq«È*çþ¹?ò5Ã×q«È*çþ¹?ò4ÃÑEQEQEV‡…¿ä=ü ÿA5ŸZÿôð/ýÐÇ¿äýuÉ«—®£Æßò þºäÕËÐEPEPEPEP‡…¿ä=ü ÿA5±ãoùGÿ]GòjÇð·ü‡ ÿè&¶€t‹Km@ø|Çîoö}ãM.åTÀÌeU1žWhÔºÀ{­"ûBºÆ·:w‹u-zæhÁKȼ¡¶eœ ˆ„8'hÉÖß×OóoäKn×Kú³äŽ×Wñõ¶ñFðìðÜ5Ö·muu«·Ë`1n Îr|åÆèj+ï‰úF€5i|e}§h–zUÚYµÕåü ŒÑ$ƒ'îÏï1µö±Æ@ÚA8?<â[ñ'è4+¶Ñm/­g·Ô¯eµçùY8eÎ<“@ê+ñ?À¿ë×Wú¤–ºÕ¯5”Õa6ºåÍ£éì4ø-IŠqjÁÉ1È ¼EYtÖ$o'n2MMÚoKíúßþ{ïç÷ôþ¿#Öt¿ŠÖÿ´ÿ±¼C¡Ýÿb‚u&ú'ûÉ› û°6·ÞÇÝ>†ªEñÃÁs´bxeÌ·?c@º¤¼Ü~è|ü¿#åëȯ,°ý›xpW'äè6Š}|¿áÿ;-:_È]¯/óqé-ñ#ëâïøGÛ^цºæöØþ×÷w©Ý¿îüÝ:sÒ¨Ëñ‡@Ñô¦»ñ¶«¤hý¦âÝ>Û©[¨“ɘÄÌ9vås¹K`"¼ÛƼ]âß‹1êw·:eΙkâ-^Òi5k¨ZÖÞ/t"Ê8ü—”í”yÎÌH`>^Û¾ø u§xÇO¿ñÒ/-l¤×ä(ÀÈÀßÞ¤ñ ˜È]_‘‚Ø&¦ï•;k¯äšýW˨KGoO×þ;¿øâÓÁßõ?ÊöÇL°“Q?geci쿵¿á:7š¾Ïæ›síÛwlÏ}¹ÇnÕ—qðûÆþ*ƒÃx¶ÃÂ6ønãÎßS¹¸ûPû ͶZÚ=¿4Ñž¦îrjZ9[ÊßÿBui7Ùýú[õ:/þÑ~ ðî‡>¡ÿ }¥í½…ÇÙ/àÛI4¢5ó>p/Ì퓱¹ÁÚk¿ð§m­^ØÞh÷]Ú\¡–áI¨PÊÆr¯žtOÙÏÆ^ Ôtæ“D‚ oìÇÒ4Ùµ/ቭ.–r†éí’d…•2%Û’sÎ+èO‡¦å§ÓγµµÙ‹÷ÐÛÊeŠ'Ør¨åT²ƒÀ%W>ƒ¥>Ÿ×õþAvÙÐøÛþAQÿ×Qüš¼Ä|TÓíü[â-#XI¬$ðå”:”³M´E=´‚BeB 8VŠEl‚=¯Nñ·ü‚£ÿ®£ù5x7íð'Qø«¬iW>¾´°Y¢}#\ów»Òå’7–8ʃûÌÅ…Î$~j]Þ‹úíøÚþW-[¯õßð½¼Î‹Â_¬|G¥[ßêÐÿaÚ\é¶š{û¸#xÅË:ÆŽË#eW–1mªIV½íà½CÅ÷:=·ˆôc5µ’_yÿÚy¡3nÂL³ ÙÆ0ªTçž1>(|»ñçˆõY¡þÉm;Q·Ñ-½Æâ¬–z„—3+¦Â¥Z' £œœƒÍCñ/à†«¯ø‡ÄkàÛ}+Å>:¯+¼2éò(º)$q¤edV7@0Ü„Ï=ßTº¿»[¯³òý/úž‰­øßEðÕ½ÌÞ#Õô½>+(£šáîn£‰`ŽF*ŽåˆÚ¬ÊÊ à@éYWô·o Iá‰íu«/ê-§Áwgr’Â…`žbÛ—!¿ãÝ—ðOµyηð—â/Š$Öµ§ðÖ•}g¥YGoe¨Î|èmn&’ek“nq1ÚèŒTûƆ?³Ö¹á94ùufÒà0x¾oI ZÍîÈdÓÞÛ`žtß,žcî%°$äp´Ö­ßúÕ~ð~Bmò߯üó=/Wñõ¶ñFðìðÜ5Ö·muu«·Ë`1n Îr|åÆèj+ï‰úF€5i|e}§h–zUÚYµÕåü ŒÑ$ƒ'îÏï1µö±Æ@ÚA8?<â[ñ'è4+¶Ñm/­g·Ô¯eµçùY8eÎ<“@ê+ñ?À¿ë×Wú¤–ºÕ¯5”Õa6ºåÍ£éì4ø-IŠqjÁÉ1È ¼EYt7_2Ê5ÚÄ 3¼¹l(@6 ù™Ez'Šä=?üÿAã_ þjø“¬jµå”ú-²\[ønÖ-Ûì"ºœÜ\‰Ì«´Ÿ‘N•.úÿ[tùéèSÛúë×åøu¯Åý-+B›Å¶‘¢Ýx†–ÎÖëR·ß1`>XÙ\¬¼°BÀ’0NEl¯Š4ǸX“Q±2µÉ³.qœ)sûáAb½p3ŒW€Mû$x†ËJ³·Æ“­Çqá›-þÚmróO†'·W¯“yð·˜NÆAn8Ûøû.k^%ñƵ¬øWX´±>\:ž‹3…µÖB<˜S˜ÌV±ÇüD‰eùsŒ¶íÓ¿õ÷~-.쿇õ÷½|“=WÅ?´ÿ |<Õ|M ‹¨éÚUœ÷¬m$Y<å‰Y˜#gi?!zÔÚ4Âë^*Ô,ô}6XãÏ}:Aoª³1ÆN@Æz×7ª|!xfÛ¯xnXvðüš<LJÆÒ {Ü€HŽâ@'“Ås:—ÃÿëRxNóTÓ<ö\ ííSX¸xu ÛÉof´&PáÑ‚¿9ÍFÒò·ãÐI·gäþý-úž‰¬|Oðׇt+=S_ñ‡e¦j~Ëw=ôQÁs¸dyr3|Žx'Žk ðåì:•Í…Î4W÷ ‘K‡IC+ ‚¯š+þõû]¦“¤CáøôíFÎÒi_76ÑÈ,ž)ne‰î$}ÌA&8ò8wÑ|¿--<ݬ_Îß~Ÿð}.{m®¯k~— §\AsöY„Rò¤^¨Ø<0ÈÈ<ó^màoÚŽÓÅáÉ5¿ øƒAÓü\Þ^“¨]›y-n\©eš)Y¢víWQ»k¤ø/àï‡ÿ ­ôÿÜ[]ëWO{©\@—=Ôò¼²2ä·s2q^oáÙ÷ƚß x7Ç·^Ó4/ f{.æk›Ëé`;¢Ç™ k‡ÚÄäíÀÆI¤î›¶»~·ÿ€÷·ÑkÿþæzΗñCÃZßöŸö7ˆt;¿ìPN¡äßDÿa93a¿vÖûØû§ÐÕH¾8x.vŒAâï ¹–çìhT€—›ÝŸ—ä|½yå–³g‰îüúN¬ž°m+Á—ž°šÒiXê-2Æ÷‰|•J‹æÒ9Ϯǎf‰¼B|oýƒñ†­4m<4e>Í4&rY¶Æv'Ï äüÑO¯—ü?çe§Kù_ëËüßÜzK|Hðêø»þö×´a®Ÿù‡}¶?µýÝßêwoû¿7Nœôª2üaÐ4})®ümªéi¸·O¶êVê$òf13G]¹\îRÁXȯ6ñŸÀ/x·âÌzíΙs¦Zø†ËW´šMZêµ·‡ËݲŽ?%å;es³—¶ï…~]iÞ1ÓïüF4‹Ë[)5ù 0207÷©Í)‚_*@þTƒFÁá†FAçšñ~È—>+þõû]¦“¤CáøôíFÎÒi_76ÑÈ,ž)ne‰î$}ÌA&8ò8ô…~Ö~ü#û Üú}ïŠ'7×Så–Ú{éÝåbH]Â=ïŒíÎÐ8íTôMúÿÀüŸÞ¼ÁjÒþ¶×óüÌðÇ]'âÄ?øsG†ò+¯°i,W ;G#@s–Ê 5%¿Çß ßüD—@Òu]*ïìZmΣu üOœ ’$d›÷g÷¤åˆÆÆü8_þÊZ·€î‰üÝŸëËó}“³¿nž—_ð~ï3Ö"øáà¹Ú1‹¼2æ[Ÿ± ]R^n?t>~_‘òõäT÷´MPøºûNÑ­´Û¡iö‹Ëø%cÍýü¡ Çå}­…-¤ç¾9ýš&ñ ñ¿ö4: Ä´Ñ´ðÑ”û4ЙÉfÛØŸ<8+“òtEiß| ¾Ô¾"Vù´¹ìOŠ¢×¼© ;yI¤ýŒ ¥1æ €q΀sž(ëoët¿+².í{V¿ç§Èôm]²ñ6“ÿ‡/-oìn—|7ò¬±J¾ªêH#é^…«È*çþ¹?ò5ãÿü ?ÃÏ Ýi÷¦×÷š­ýìKo‰÷rÍà‚E€AÁ#šö [þAW?õÉÿ‘£q£Êþ%xú×á‚oõÍb+‹ˆ¬•vÁn»æ¹‘Ø$qF½ÙÝ•@õ"ªh_4 _á–ŸâÝCQµÒtmB›ÎÔ'HÜyr36ÐᲤgï+7ã?ÂíGâµß†í,õGÒt­3QäÖì¿ki"RmÖ5’7Œ)ÛÁÿV¸9E—ìëâ_.œ<9y¦ø‚ßÞ#¸ÖtËmVàÃöˆîmÝe4PŽDži¤BˆFSÑ'½ÿ­¿ÍýÞe>–þ·ÿ%÷ù®‹ûCønûá¤^)×u-/HÓ®®.­í^êþ$K³ ÒÄ r1 ÛÄ[Æ3Ãwë]'€|Zž;ð&®Å ZǬXA|"vÜaF¯´žøÝŒûWiº[ÿ&ÿ€ïçê6£Ì•ôÿ†ÿ‚QðßíG£øÃá§‹üIáë+󄣚g·¸)/"H|èæ¯îå^Uˆìx®–ãâæ‹¢Aqã]CLÐm,®£´ºŒ¤Îð$À}ü£aÏÈáX…ÜÒ ók¿ÙKSð펹càM~kû wÂRørHõg l³dû=º‚вL¬Xà néVücðCųêZÇ…nô÷¶Ô5ȵ í¥>ž÷0. °_µCI bÝ„ûÉÁa’)7®ŸÖ¶üV¾DjÚùþI¯ÇCÒuŸŠ>ðî•c}âhv6Z˜Îââþ(¢» nÌðAàžµÖøT†×-Êœƒ»ÿA5ó2þËþ.Ñ>è:…Î…o¬év·ö«}¯qÚ­ÅÓÌ#1Ëo*ÝÂǹ% ħÞç5ô§á{mBÊ;§YeŽ=®ê»‡$(éŸJ­5õþ¿¯=ïoëúÿ#wÆßò þºäÕâ_h5øqâmCN‡ÃZÞ´š>’ºÞ¡qg%²­­±iWvÙ¥Fr<—8POJößÈ*?úê?“WÍ¿ÿgGâ'Å+½jßAðwˆl®ô8´´Y½¸­dY¦s"¬P¾àD‹Ñ”ü½GZ‰_KyþNߊVëåù«þU®|zE×,4¿‡¾ÖƒS‹K½²ÊòÛì3%Ô1’̰–dxl¹Ü+ÐõO‚~+ñ-¾¿ª^ÛxWJÖoF޶–6—2ÉhÿÙ÷Fà4Óy(À¾â€ÎÅUå»WgÓþ Wû’vßP•ÖÛÿÀ_æõò;ßüoðÏíKN¶ñ^­ajú…ñ°,÷Q"ÚH iɘ»‹° îs,|a¯Cð;ÔÝ‚ $‚:V¾ƒ¾3ºÔ¦ñý¯„äÖŠ]K¶ÌmLMF6œÁ¸8ûùvŽ™ÀúÀÙþÒ0ÞIÈ ­ mwÿ€¿[ŠúùÁ¥Ž¦Š( aEPEPEPEPEPEP}VÇûNÂH7ìß›Æ=? Çÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õëSDÒ±íZ/3ÌÜå³·€õö«”P>«áOí;ù'ûFÍøùvguϵWÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õëɾ!|y×ü+ãKí7HM9­ìÄ!Zqpò1x#’Vu\ôŠÆÿ†—ñGüóÑïÕ×ÿ$×W6ÂЛ§9Ù¯'þGŸW5ÂÑ›„çf¼Ÿùåÿ/ý=ä/þ½ð‚ÿÓ×þBÿë׆ÿÃKø£þyè¿÷êëÿ’hÿ†—ñGüóÑïÕ×ÿ$ÖÛx/ùùø?ò3þÚÁÿÏÏÁÿ‘î_ð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½xoü4¿Š?çž‹ÿ~®¿ù&øiÏ=þý]òMÛx/ùùø?òí¬üüüùåÿ/ý=ä/þ½XÒü)ý™ÿhß³?.Ìg ޹÷¯ÿ†—ñGüóÑïÕ×ÿ$Ñÿ /âùç¢ÿß«¯þI£ûoÿ??þAýµƒÿŸŸƒÿ#èmoIþصX¼Ï/k†ÎÜö#×Þ²ÿáÿ§¯ü…ÿׯ ÿ†—ñGüóÑïÕ×ÿ$Ñÿ /âùç¢ÿß«¯þI£ûoÿ??þAýµƒÿŸŸƒÿ#Ü¿áÿ§¯ü…ÿ×£þ_úzÿÈ_ýzðßøiÏ=þý]òMðÒþ(ÿžz/ýúºÿäš?¶ð_óóðäÛX?ùùø?ò=Ëþ_úzÿÈ_ýz?áÿ§¯ü…ÿׯ ÿ†—ñGüóÑïÕ×ÿ$Ñÿ /âùç¢ÿß«¯þI£ûoÿ??þAýµƒÿŸŸƒÿ#Ü¿áÿ§¯ü…ÿ×£þ_úzÿÈ_ýzðßøiÏ=þý]òMðÒþ(ÿžz/ýúºÿäš?¶ð_óóðäÛX?ùùø?ò=Ëþ_úzÿÈ_ýzÔÑ4Ÿì{V‹Ìó79líÇ`=}«çŸøiÏ=þý]òMðÒþ(ÿžz/ýúºÿäš?¶ð_óóðäÛX?ùùø?ò=ëUð§öü“ý£fü|»3Œ:çÚ«ÿ ÿO_ù ÿ¯^ÿ /âùç¢ÿß«¯þI£þ_ÅóÏEÿ¿W_ü“GöÞ þ~~üƒûkÿ??þG¹ ÿO_ù ÿ¯Gü ¿ôõÿ¿úõá¿ðÒþ(ÿžz/ýúºÿäš?á¥üQÿ<ô_ûõuÿÉ4mà¿ççàÿÈ?¶°óóðä{—ü ¿ôõÿ¿úô ÿO_ù ÿ¯^ÿ /âùç¢ÿß«¯þI£þ_ÅóÏEÿ¿W_ü“GöÞ þ~~üƒûkÿ??þG¹ ÿO_ù ÿ¯RZx3ì·qKöÞ[†Ç—ŒàçÖ¼'þ_ÅóÏEÿ¿W_ü“Gü4¿Š?çž‹ÿ~®¿ù&í¼üüüùöÖþ~~ü¢µ[í; ß³~>lg ôü+þ_úzÿÈ_ýzðßøiÏ=þý]òMðÒþ(ÿžz/ýúºÿäš?¶ð_óóðäÛX?ùùø?ò=Ëþ_úzÿÈ_ýz?áÿ§¯ü…ÿׯ ÿ†—ñGüóÑïÕ×ÿ$Ñÿ /âùç¢ÿß«¯þI£ûoÿ??þAýµƒÿŸŸƒÿ#Ü¿áÿ§¯ü…ÿ×£þ_úzÿÈ_ýzðßøiÏ=þý]òMðÒþ(ÿžz/ýúºÿäš?¶ð_óóðäÛX?ùùø?ò=Ëþ_úzÿÈ_ýz?áÿ§¯ü…ÿׯ ÿ†—ñGüóÑïÕ×ÿ$Ñÿ /âùç¢ÿß«¯þI£ûoÿ??þAýµƒÿŸŸƒÿ#Ü¿áÿ§¯ü…ÿ×£þ_úzÿÈ_ýzðßøiÏ=þý]òMðÒþ(ÿžz/ýúºÿäš?¶ð_óóðäÛX?ùùø?ò=ÚÓÁŸe»Š_´îòÜ6<¼g>µ©ªØÿiØIý›ñóc8Á§á_:ÿÃKø£þyè¿÷êëÿ’hÿ†—ñGüóÑïÕ×ÿ$Ñý·‚ÿŸŸƒÿ þÚÁÿÏÏÁÿ‘î_ð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½xoü4¿Š?çž‹ÿ~®¿ù&øiÏ=þý]òMÛx/ùùø?òí¬üüüùåÿ/ý=ä/þ½ð‚ÿÓ×þBÿë׆ÿÃKø£þyè¿÷êëÿ’hÿ†—ñGüóÑïÕ×ÿ$Ñý·‚ÿŸŸƒÿ þÚÁÿÏÏÁÿ‘î_ð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½xoü4¿Š?çž‹ÿ~®¿ù&øiÏ=þý]òMÛx/ùùø?òí¬üüüùåÿ/ý=ä/þ½ð‚ÿÓ×þBÿë׆ÿÃKø£þyè¿÷êëÿ’hÿ†—ñGüóÑïÕ×ÿ$Ñý·‚ÿŸŸƒÿ þÚÁÿÏÏÁÿ‘î_ð‚ÿÓ×þBÿëÖåÜjµ–,íó®qœdb¾qÿ†—ñGüóÑïÕ×ÿ$Ñÿ /âùç¢ÿß«¯þI£ûoÿ??þAýµƒÿŸŸƒÿ#Ü¿áÿ§¯ü…ÿ×£þ_úzÿÈ_ýzðßøiÏ=þý]òMðÒþ(ÿžz/ýúºÿäš?¶ð_óóðäÛX?ùùø?ò=Ëþ_úzÿÈ_ýz?áÿ§¯ü…ÿׯ ÿ†—ñGüóÑïÕ×ÿ$Ñÿ /âùç¢ÿß«¯þI£ûoÿ??þAýµƒÿŸŸƒÿ#Ü¿áÿ§¯ü…ÿ×£þ_úzÿÈ_ýzðßøiÏ=þý]òMðÒþ(ÿžz/ýúºÿäš?¶ð_óóðäÛX?ùùø?ò=Ëþ_úzÿÈ_ýz±¥øSû2þ9þÑ¿f~]˜ÎAsï^ ÿ /âùç¢ÿß«¯þI£þ_ÅóÏEÿ¿W_ü“GöÞ þ~~üƒûkÿ??þGÐÚÞ“ý±j±yž^× ¹ìG¯½eÿ ÿO_ù ÿ¯^ÿ /âùç¢ÿß«¯þI£þ_ÅóÏEÿ¿W_ü“GöÞ þ~~üƒûkÿ??þG¹ ÿO_ù ÿ¯Gü ¿ôõÿ¿úõá¿ðÒþ(ÿžz/ýúºÿäš?á¥üQÿ<ô_ûõuÿÉ4mà¿ççàÿÈ?¶°óóðä{—ü ¿ôõÿ¿úô ÿO_ù ÿ¯^ÿ /âùç¢ÿß«¯þI£þ_ÅóÏEÿ¿W_ü“GöÞ þ~~üƒûkÿ??þG¹ ÿO_ù ÿ¯Gü ¿ôõÿ¿úõÎ|ø¨|DÒn®¼B-Òk{©m€ƒÌÊ#Á"GsœÊízzTç±SŽÏTzPœjEN;=Nþ_úzÿÈ_ýz?áÿ§¯ü…ÿ×®‚вŒ}/ŸٗñÏöû3òìÆrëŸz¹­é?Û«™åípÙÛžÄzûÕÊ(Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^®hžþÇ»i|ï3rÆÌw×Úµ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ”þ1ÿÉTÖí×ÿHà®nºOŒòU5ŸûuÿÒ8+›¯Îó_÷ºž§çÙ§ûÝOP¢Š+Ï8Š( Š( Š( Š( Š( \\%¥¼’ܰHâRìÇ¢€2M|íà?Û{Å_®ÓVøið—ZÕ|&¤ºzkcR'u2,m2Ùì.È¥²v’VË 0Bêz|Z¾qi|»¡º¢‘}U~F¾nø/û>üjø¥Úø7Àž"ð%Çìõ>ë¨'þÖŠÕ¥ó$‰c bÜÙ~¥±¼á‡{pj“Sö–¾–»iyí×k|÷;(*N”œ­ÍæÚÒÎí[­í¿Üz§íkðâ÷Æ7žźbjút×0][˾#nÖÈÏ9vu ª‹’äíùN ÅAáÛá·Ž—U>ñE¼ßض2jw^e¬ðj™ß4bH×ÍAƒóG¸tõÂxkö+»—Á¿t¯ÝéOñY½¾Ó¯­PÍ-”3d “z)È'æE$`œ× ð÷öñ÷†¬%ó&ð†“®XxrãFÓuû-gU¸¼˲,$Ìb·i“>ZåKet­£C (ËßwIvÞ×}6¾–ß®§JÃàå{MÞöé¶šíë¶Ö=rëöóøkwàkדU›Ã:{jÙ5¼ö³L¹ Ñ©!ãMà ‚x¨<û|7ñ?Ã7ÄzÞ·—%ó‹y4ñ ×71\lWx•#Œ¼»®]¨Ü2FEy‡ÂÏØ?ÆúˆüC}ñRðò¶½à‹Ÿ K=¾§}¨\Ës.Ñö™MÒô8$ª2¨àêÆßì/ñ3Sðÿ€gÕo|ú·ÃØ_L¶µ·Ôu X/¬ÙÞ×0„š),0Ÿ+3€ ¶ïMÅO¶·ò~Vwiz^ý~Ãðó¿½*Óko}áÏ«üñDø¥á ]áþ¥oªiªZ˜²Á ‚H ‚¤ÁÆü8ý±>|Zñ|:€|Oî­rŒð@ö·ÿi o)åVLc…'€Oj‹ölø#}ðgà|þ0hš¥q5ÔêºD×7V¶­&B2µÑ29!9àp1^1ð3ö%øážñOÅM_@ÕÂïz/o¶u ÛÝ@M‰ p¾ZÞÔÙÀ$–8š0ÒTæì¾µÑúßT–þîXÑ ãU¹ê¯ËçkÚþº-ô'ÅÏÚÁŸÀ|[×`ÑN¨%k_6)Î/ŠqëÁëjŠ~ÕdøU—Äö_ð\OöX®¼¹Ë6Hò– ¾i“‚vÝœcšÊøÕð'Uø“ñïáwŠt‰ôØôïÜ^Í}øšQ4qªyJ© ¡Îæ\qŒ×‹j?ðOÜü]¦± Å­é~3¸ñ6›Ïr–RA"Æ/$j’ÂÃfwGÓ  ʨQÃNœ]Iµ.¿ø»vבt¨áesͧ×ÿ&Óm6ŽºüG½xöµøwâ‹m"]Ķò®¹¨"ÍZÞhÝ®Æ?pèè'ù—@¹Ï©[ö¨ø~4éî×Ä–¯¾´<<å!•ÏÛÎq¨L±88` œkî¿`ÿêµû]: økÆw ´×ô«›-SP¼Š9áàÉq=Öù ‡ÌœåTŒ•Ïr#ømÿåÔüñƒÁ›êºl¾Ñ¢µÔõ«?:V–óY†9@¸Z<ÞêÙ,7 ½+e‡ÁjÝG§§dßê—¶E:NY5QÝ^ËMmÓçunš3銟<3ðKB·Ôþ)êÐèöw+gÒ£²´¬¬Á~E8áäàqÖ¸K/Û÷àö ¶&×Ç:i:É´…L«Èu1æ4É‘¡çƒVÿkZ¯Ç Â6ž¸ÓmÛAñ=ž³söÇuY ˆHSj6\ï®H¯#ø…ûø§Å~øŸg¦_øj9¼kâÈ5Û’Y€†y¬¤BHÞppëÍg„£…©íäÓ¿~—Šìú6ÿíÒhQÂÎ Ô›Rÿ‡òôûÏfñÏí‰ðÛᯎ¦ðߎ|O«Ûð‡Æ?xgã,¶~´Ò­ì%³»-5ÃÞ=Ä +)Hã;Boqã¹Åvþ7ý³~ü:ñM¶âÿé¶Ú…ÔqJª‹$ñ¢HF’XÑ’ ÊÊÀ»/ÊÁºkÆ~&þÆ?u¿xþOÞøhß4í;K¹{ùnZêÖ;x"Þ4X¶n,ŒFXÿ àô¡¬~À~9ð‹¼7ðŸVðï†YgpÃB„骕d×½oÉßÒ׿žÂ£‡¡*pI4ÛjÞ‰¾Ú'x®ºÝô=·ÃÿµÃÏxgMÖ4Z\XjÚ¬z%³ˆeW7²gd/@ñ±Á#xQŽsŠ»­þÑÞ ðæ™âkÍk]† o\Ei¬¹‚R,¥¨E &[%”er9¯žµoØcâ©£êþ#]WÂVþ<Õü[Ó|c¨ø8xâ6£e ÙËr–Py2#:¶ø‹¯@Æüñ’;jðØ[ÝTÓN½Ü/Ó['-|‘VÂó/Þit¾WÕíÛ©ôOÃ_‹~øÃ¢\j_ µ{]bÂÖá­%ž ìYUUŠäœS‘‘Íy»ÿðÿÆ_øKá݇‰Û\ÔßNÔn#ibK mÚñ¹dÀînUˆùzó^ŧøÚÏáãh6ÑÁd“Øý’V´Œ bò˨s鑨WÊž ýƒ>$Û'ÃýÆŸÇ…¼y,SؽÊj7Q\6Y™Z#qžF;–ëQ…§†”ææô[&÷Ñë·{i¦ûèg„†q”ª»odú{®ÏÍÞݼï±ïÞ ý±¾üDñëxgÁž.ÓïõΉG*Ç;',"™G)Ç8FlŽFEdZÁ@~ÞÝbñÖ˜®by³$3Æ»S9š0qÂgsq€r+Ë>~Þ=Òo¾h~<Ôü <)ðËTŸT±»ÓÖoíEž_5Ut Ý÷°ÇŒ˜Õcá§ì!âŸh¿mõ{ï K/€5ÛÝSQh¥•„ñÍ"2I„a³Û@8Á5³Ã`TšöŽÝ5õ×o%¦êûšÎ†<Ö›}µ]¤÷·[Em§7[Äß¶ÃqðÆ×Æ+âh_÷·§N†å-.Þà+7•äˆÌ¡¶©8*8ÁèFr|Oû`èžð÷ˆ>j:&·§ë>!ƒB–K¹æ´ò]Õ‰]¦"âPŽ«sž™òØÿb‰øM&‰àÏhö³Íã[\ÛA©]ÙÁ¨YHˆ¢ '†5•å9Uù²** ~ÀÞ0Ò¾Úh×W¾†êˆ±x½–»©!KEˆ!‰^XÌ&zo'#’äÑ> ;óõ]zi{軽WaË„‚mT¾¯îÖÝ7Ñyj{>¡ûmü,Ò¼j|;¨ø¾ÊeuÒÞÝíç]¾Žþ^Õ¸ÞH_zõJùCÆŸ°Š¼Iðçâ•eá´¿ñ_މ¬&y¦Ûoo¼®ÂV\1PG'ææ¾‚ð¾Ÿã8>)øŽ_hÓxBhíÆ‰m°¼Â8ÎJA|•Ã7•ÉZéK^·~Qziݵÿnœ¸šTa­_}ýRÓEÞÿ&u´QEqaEPEPEPEPEPEP¹~É?ò,ê_ö›ÿDZW¯WþÉ?ò,ê_ö›ÿDZW¯WéX÷j_áäѰ?îԿ¿$QEuAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÎÿþx§Ä><Ô5 F–îÊímÚ)Væ Ú$<<‡ÌŒ9‡ÿ ÆŸô.Üàe¯ÿ¯¡´h—züÞ¶Õ´ù5ý+LµÔ¯4åMÍ­¬í4pÏ$yܱÈö·*¬Fà tâׂ5êþ'Òü!a£_Ïv4[ëûyáõ ÒÝ™l]d“zËÎB‰Ž$ØNÏïì/g÷œ§ü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ{Oü3Ÿ‡ÿè!ãÏü-õ¯þL®Cã¶‹ð÷öoø_¨xÇâ¶³ñÓBÓ%¶†â[ë×R+\\Go#Šé˜æI£À$œMØNÏïì/g÷œ/ü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ{Oü3Ÿ‡ÿè!ãÏü-õ¯þL£þÏÃÿôñçþú×ÿ&Qý„ìþðþÁÂvyâßð¡¼iÿBíÇþZÿñê?áCxÓþ…Ûü µÿãÕí?ðÎ~ÿ ‡?ð·Ö¿ù2øg?ÿÐCÇŸø[ë_ü™Gö³ûÃû Ùý狆ñ§ý ·økÿǨÿ… ãOún?ð2×ÿW´ÿÃ9øþ‚<ÿÂßZÿäÊ?áœü?ÿAáo­òeØNÏïì'g÷ž-ÿ ÆŸô.Üàe¯ÿ£þ7?è]¸ÿÀË_þ=^Óÿ çáÿúxóÿ }kÿ“(ÿ†sðÿý ñü+¿¶ai·‡‘ý½ŸåDÒlßæ¹ÛŒàã= ØNÏïì'g÷š¿ð¡¼iÿBíÇþZÿñê?áCxÓþ…Ûü µÿãÕ걄4O þÍ^è¶Ö›m«Ü[ÚyŒ†ââä‘‹Êï#òB‚îÄ*ªç 1ê4`a;?¼?°pŸÞ|·ÿ ÆŸô.Üàe¯ÿ£þ7?è]¸ÿÀË_þ=_RQGö³ûÃû ÙýçËð¡¼iÿBíÇþZÿñê?áCxÓþ…Ûü µÿãÕõ%`a;?¼?°pŸÞy¯ìåà½WÀú%Ý¿‹¬ÚÆââòiÒ6–9 O.ÙAÌlê7ÏéU^_ù Ãÿ\¤þiV+×¥MR„a’·ÜzÔéªPPŽÉ[î (¢¬°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ãïŠfý”?n_xÇÇþ ø—®ø_Æß ´='H¿ð—„u‰5:ûX–k9£Óá–Ki=RÕ£y•"|H<ÀPŠù»ÀÞø­ð Uý›<7­i¿u}WÂþ ðN…/ƒ4ˆüG¤i5Ò2¦§w&³¦,š5þÈÛ÷Öºž[Ú(¥ò´n×VÞ¶²_›ÿ²„$ý¹EÇÇü^Ó&ðþáÛ­CL†ëÆÅ5y/#{;eE¾¸WŠÉ$±‘ É’˜öþ˜QD&£&®ÛNýn¹µõ|Êí[à‹Ý6É5)ó%eª·—4eoEËdþ)tv?9¿h_†ß~h?ü=û9ê¿õ ÜÁà}m¯¯¯õ={VH®5+ØüNš<ÆQsæ kgû%”‘É”›UŠY#ÛþÍqêºwì‘­Gâ~Ñšþÿ J:´ð¶¿¥ø‹Mµk;u®uö›S»Ó|óp÷ vÛÍq°Ž#î**½­¤Ú[ÛðåÓÓÝÒÚ§)kgc;>X«íþO_W}{Ùv¸QE‘AEPEPEP_ ÿÁvµ(´oÙoÄ—ºŒú<6ž¹šKøaKb«¯øqŒÉVÈà»[qP6¶p~è®âG†%|Kø5c¤x>çÄ>6MiüYsákÛ­oÊ×_M»uq ‘èßéRÁ ²Z’$Xá$ §û@ücÒµÙ¯ö®Òÿfï‹~-ø…û?xoAð}öâ»ÝrG¢k’jìul5[£4—†;xô놷i.)$ w˜Ïêzk¿#Gàÿ($“] “ÔÿÈ*’=kâT1„‹Á¾Tx¶èß§öUU—#‡¯ãÑÿv?e+[Mz Kߥ×ám¯}eoyë{½7¿É¿ðLÿ‰^%ý´þ(i?²ÿÅÏ|kø%oáMþç]Ö¡,ò\Ïe $IgEQfÜå‰.8â½€ (¢€>|ý‰e¸‡IøàúDk-Ú|LךnŽáaÚ#©Çq_žðMÚ/Å?¤×5_ÛWãö‘áVŸáîºß<=/Å-]¼_£êKmEt[‹+uð¹²SuOå8–¦]©!ý:ý–¾k ¡ø„þ.‚>)ñÆ«¯Y¤seµ™Ñb/Ž0‹~ÐN×8mʾ¢»–Fu·PÏēޙ5:É÷MkÒé«î»êºÙ=E©+%Ù§¿g¿MMSNçå'ìûjüT🆾+k¿ðQSâ|^ ð?ÂËcáç†ìí†ãO ª´¯M M$O¯¶‘ͪ›©X×ígÊ>þÛ>#¼øqûOøSáÆ;Ëu‚õß\i¿u/ͦ½Î¨lµK;XÕ¡Šk´F6‘̈o¬c8f‘Oí§›/üòÿÇ…1ÄAŽÙªí `z}*ß¼ÝÞ–·žòwmo{¦ôÝ6¹oe÷Wïÿ¤ôÿ·Z^NÎömþMþÕŸldHYáˉëg›/üòÿÇ…q¾ ø øâ§|eáÛ;¥×> Meq«¼·,Nö–ÂÚlJň”° Ç“Í*‘öŠÛz}Úvk£ÖÖIl­P’Œ”š½ºwøwî´wïÌç'í-ñSâßÃ?…_µï‰~.¡¦üB‰þzm1%]´–6+«K[Ãq,";g»&hašHUZDVdìðKïÚ“Høð{\›â÷ÆøãÞ$ø…iáß/‡|w©|C,÷Ö¶þ^•q­ÝZÇs4p.&_<%'T.T»|Ùç—þ<)±n…6Ãn¨£²TZŒ§+/y¯’ºm/’÷wåm½SiçËû¸Bîñ[¾®ÖM¯_‹_yYhÕÏÎÏØ›ã6…ãÚçÇñþÓÿ|moûGé~=ñ›áÿ†úŠï4?û"µf‹_¤‘[_[=€ŽçíoÅŸ.f €/™~Â_´~«âŠ¿³+ø3ãÄo|qñ•õê|wð^©¬\^AáØM¼{“w¢¸òt³jIeí¼ÀáO¼“úÁóy»þλñ·vFqéšrHΖêñ¹ltÉïJâŠ}_wé/¶¾×tõ.«öœöêßm/%ðý›ZÝž–ü›øðÇÇ¿´ÏÙOWñWíñìÝ|qÔo† |;á¹.~Øt 6ÛNûG—åùþL)ý™;wlÎ2qœd×G@Q@Q@åÿ¬?õÊOæ•b«Ëÿ!X딟Í*ÅQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|ýñãþ Kð§öPñ˜ð¿Æ›ïÚßiÚ¿ˆµ;­;Â:®«§èšt²M ]ßÞYÛI œ[ín2ó2#bpkß,ï¡Ô-¢žÂXæ†tÆèÁ–D#!”Ž ‚9÷¯Œ¾;ÿÁ=üMûSþÚ>2Ô¼MâÏx7áG‹~èþÕ—Ãóikÿ ^ÛíYîôû†¹¶žêÞ1oyóm»rÁe,¿'|`ý‰>(øŸþ 5cã_ü+ºÐåð¯¼=>ã=|5mg¨xV¬a¼‡Q¼žF×'¸òΡ¶É·)GŸ–W‡^ÖP„ôæv¿D¹ùnþMKә蒹ˆýß<¡ªŠNÝ[勲ï¯2vZ4–®öý1È$€yeNE~bøgö#ø‰§üDøßý‹ð‹Æºnã¯øš OÅ_xrÓÇZ½Íõìomo£ëÖ·ìn`Xš)ukxMºEkê&ð_ì]ñÇÂÿ²òËû8ü8ðןø[â»ð–™†• K>™}¥ &ú÷V²Ò¯çÓ¼ÈMä÷¡-å_;û>ݬ­ƒ)óE4µi}î\¶}­»}¶c·¼Óz]ëä£tþoD»õ?M)ƒ¨(AdÞ¿2/¿àš_t/…_|7¨A}ã/ x?Rð߆|#¢\kQx&ÃWmZúÆW–aÍqmyý”ërÑ­ÀÒÓÍaÛ«¬ømÿÿ×ü_¦x[LÕ>]|=øOqñ¦Eð÷ûjÖð®ÿµÍ™ŠXtû¦¶Ž+_7-ci,Ñ‘zK©Ý2®Ñ§¦Ô½:ixÙëå-·N2M$”™mü“ûÒw_6¬žÍ4÷|§Ûÿ~6h_<=¥ê$¹Ž×W×tÏÛ˜!2±»Ô/a²¶Šf¸ˆ3$ö®¶¿4~-~À~'_ÚÉeÒ~¯Š¯-~)xG^ðŸÄ¨ï4³xÂZsi~v• ]]­í¶Ág¨)·µ£—í~ibìê>ãøà±áŸŠï‡n|(uïÁvuYu¡~¾-Û¦ÚEöØà7Ø•<¯³y$&ãndÚ|ÍÌF0tTïï6ôì¹i´šïyM7w¬ZWIÈ™;O—É}÷—ádšòjöm#Ò袊ÈaEPEPEP^û`xßá—Ã?ˆñíquàûéÕä–ïÄÆÝl-æ{Í(‰{ŸÝ£³Kå©$røÏ5ïÕã¿´GÁýãÿÄ};Á-f½ðï‰|¯Øj6ÑÜIn×=ÖŽ3$lS‚2  L“jÉ•_ÞØðÝCöãý‡tŸ…þñ~«®|µÑ¼eC"Á$1Ö™%Šæ9!£ ÙšíÿÁ§ÿ®îŠá?á–¾ÿÑ9ð'þ-?øÝðË_ èœøÿŸün»º(„ÿ†ZøcÿDçÀŸø ´ÿãtÃ-|1ÿ¢sàOüZñºîè þkáýŸà‚ÓÿÑÿ µðÇþ‰Ï?ðAiÿÆë»¢€8Oøe¯†?ôN| ÿ‚ Oþ7Gü2×Ãú'>ÿÁ§ÿ®îŠòm+áo†>~Óžÿ…sáÍÃÿmð¾³öìÝ>+O?eÞ“·–£v763Óqõ¯Y®Ä?òsžÿ±_\ÿÒ½»º(¢Šð/ÿÁL~|=ø÷¨|:ñ–¥â{gIÕì4 íE¼'ª¾ƒc¨_G––³êéll¡–U»¶ ¯2äÊ‹Ô^ù¸ ‘ÔzWÅúoü‹^øµû`|nñÆïxÏGømâOø{ĺg…ôéôµÓޱÂ]â«÷0û‹äY\ORïX¿ÿiÝà×ÄxB÷Kñ6¿âo™tý?EÓšéâµ¶ktº¼¸rV8`…¯-C36âfPŠçñ/À?ØŸÆÞýºþxÆ%Å^ñ÷‹5ß|c’ÿH›þm&ö×V‹M´¾ÖÚ‘D[Í6/³¼ ¿ØÂ&P+WÑ¿´ì}ÿ £öêøkãæðÆ‹y„üâM>-~î y¥ÑuY®ôytÙù…“ÈÔ]„ÂT¸ÝJ*œ–·Mµè¤ì¯mì’NÛôШ¥)J7·Dÿ_×Kÿ—Òaƒ´‚AÁö¤’Alòpª =ø¯ÊÏ„¿ðOŠ^ø ã À_.þxÈü×¼âÝ\kÚho‹þ/¹ŠÜZj«%µÛ´ì%‡Q—íÚ—ÙîûOnÐ »?G~üðÏìûðãûáNm?úMÒ ¤ž[«“#Í<Ò³<Ò°HìÌØÉ$óF" ”$á$ݭզד³I5tžªé ù|Û¿•”;µÛG¯Eå¿à«_¾?,¯á_ëš-¸ðõÇ‹mî¼OáOÃÖšŽ‘o³íöwöñEuBH˼LáC©8¿ðþ [ð«öñΉáß\ø·MÔüW£Mâ//ˆ|'©èqø—N‰Is`÷¶ñ¬ê¢Xœ¨;öJ’mØÁË_¿à~,Öà›~øáã_]|Qÿ…C¨xFѵÉôã¡ø!µ xEÍ´GL¶G¹žÖÖ7–inœGØÙf-ì6ú/Å_ÚËãÿÁ]Câ?Á}Cá—ðoP½×õ;ý[ZÒïÆ§u.‘y¦%Ž’4û™]­ÏÛÞfžå-ŽØ"Qfo(|©5»IÿíÖõÚ:'Ý}¨ÙTV~ëÒïÏn[/›æWitv´]ûƒŸðV/‚ß,nn<©øÊ‡.|]fšŸ‚5­:MwJ¶ ç]ikqh‡RTó"m|Ö&DÀ;†{ÙëöÑðWí+®xHðd~,Ñuß ÛZ_jºO‰ü3áûë[k±)¶¸òo¡š)>Ï8 ¹Úк¶ÖR+çoø'WìâßÙ;ömøqâÿÚ‡ŽüyñKáÇÃÉ´=ÁWWú4>y’ .4û­!†9^W²µˆOyq>Ñ"E ì|ç\ø[ñGP×¾1ÉgàŸˆ¿‡í3s øÁ0øçÀ~ðbøÊMCâ_†¤ñ‡‡å“Â×âÊóIBºkÁ ‚%ýå¹Úò+µ[‚ Ê€äè_ðV€¾$ýœ|ñ_FñÌrø'â'‰¢ð~ttû¥žûU–æKeµû1ŒJæE!%‹¼¤™â†~(ð×ü—áïÃÿ†šÉøgᯆZׄŸ_´¼ÒâÓ´©î®ô¹í û3Ý­ÙDGxÉŽÝ”5ÄÊùËšGü›Ä~ý•¾êZU¥äž=°Ó|ý£à¶»µN¯a}¢&³«$æ_-î[NÑíàùm¥ò÷µËÙ“ŒenúôýåEªó„bï­œ“øB)8¾m›k¼Uõv½¤ïÓÝM|M{YþØ5ÚÆïà…§ˆ#‰–>'›Iû<¸[*Å¿ÎÛå $DÄxYŠí`kŽðüÇá'Ä_Ž#áö‰©xž×]Ÿ]Ô<3es¨øOU±Ò5MNÀÌ.ìí5I­–ÒâhþÍp|¸å$ˆœ€pkæo~Ã?´6ñkCøå{{á™|S7Źüc©x.-9TE½4'²“Y:Ù¤[};K³ Á†žÌ*»6½ö;ÿ‚qkÚõþÒ>(ñ™ƒBø­âÏxWÁž~–4K¾¿ÔÛQó-mþ×,’Z_JþT÷NˆnbVE …?{“›·½äïeè¤ÒßšQoE²¨¹c>]ù¬¼Õ§®÷µã},¤´oCí(¢åÿ¬?õÊOæ•b«Ëÿ!X딟Í*ÅQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÒämÿ\“ù ±_þØ¿ðQŸ~Ì?|i¦ü3øuàÿøcáOÃkOˆþ(¼Õ|_6|örM¨FÐØB,'Ši•4É f…Xº®GZöwý»~ØüTÑ|â+¿é߈Ö )¯ü-ªA¤Mss Í ªêímö¸t`+p\·Ên(ƒö–åêíç»[z¦¾AS÷M©ie+Y=öÚQoµÑì4W‹éÿðP„šÿ‹Ñ|Myo§øÖúóWÖ®ô-B×BHì¤ò¯ÐÇÃ=.Ï[ñ¯¼G§øWönéo%Õ̹–yŠ Æ+kX®îÜ. %«¨ Cä—*•´rä_â÷tÿÉ¢¯µý]]«ì¹Ÿ”uÕùY7è®zÍåÿí¥àün±øuãmC^Ó¼KsŸÍÏ…µ[}êòh„‘[G«½·Ø î§å„\'ä·K¿·ç¯|p?<-âBóÄMw¤Ã*hˆÒo/­I.í-õSoö)î X&ó!ŽfxÚ)€d`%{ÚÇ]ÿ þë«ö¸›åßM¿¾þÏd¢¾|½ÿ‚Žü>ñ߈º‡Ã}JâË^ð†nüM%—4 kÂÐÉk rµŸµØ å²›^âÚ€¹áYŠ«kxþ !ð“ÁßàðŠéíõ[”QnâØ„vuu_¬ªe›ê¯÷”ÛTìxGü.¿Ð{ÿ0ωù&ø]~.ÿ ÷þaŸÿòM{½#<#þ_‹¿è=ÿ˜gÄ¿ü“Gü.¿Ð{ÿ0ωù&½ÞŠðø]~.ÿ ÷þaŸÿòMðºü]ÿAïüÃ>%ÿäš÷z(Â?áuø»þƒßù†|KÿÉ4Âëñwý¿ó ø—ÿ’kÝè ÿ…×âïúæñ/ÿ$Ñÿ ¯ÅßôÿÌ3â_þI¯w¢€<#þ_‹¿è=ÿ˜gÄ¿ü“Gü.¿Ð{ÿ0ωù&½ÞŠðø]~.ÿ ÷þaŸÿòMðºü]ÿAïüÃ>%ÿäš÷z(Â?áuø»þƒßù†|KÿÉ4Âëñwý¿ó ø—ÿ’kÝè øYâkŸüuÓî¼c¯ý§R°Ðu¬ìáÕ<=æÃ%Åš_6úWYv4Vëµ0G“^Ñ\'ˆäç1ý™5_üJø¥t·ú‡‹í¼Ieu Ø^Úiþµ[d±»Ó´›[ÍFêk8î¬Zþ+rB=ü’"(ÛtT(F)$¶·þJù—Üõü63»iêïø«?½h|g?üãFÒ,~%¿Ã¿>©xŸÆ:?Œ|"Ï¥ ìüú]ùÕmì~Î&_µZ6§s©ÜÏ+/¿ß|Oûißmÿá,0üDðÇsý™»ì?ØÃCdÇœ<Ï;ûýo˳í?qü¿ŸèŠ+OoQrë¶ßø?þ•¯á¶€›k«¿Í¤¿(¯»ÍŸ4øCàïÄ¿|ký |wßð«µé6ð5ÝÝ­¶¯%µ¶›öécÖ¦µI¶8–ïV¹)lò+m¢/å´Œ‰ô†› ÖÚu¼z”âæâ8Õe˜ ŒJà[hû¹98íššŠÆú[ÓðëóÕ»i•“ÖNOÏô²ôI$¯we¾®åQ@p*µŠ÷ö•ð”W‘¤±·…õÌ£¨e?éz?Pk¿¯&øù£¿Š~'xWLÐt?íeô½Nê+¿øKu}–Ý%°Ycó,cv—ÌymÎÖ'=hÓåÐ질Ç=«¡ó>V‰HýæwñâÉÏ®NiçL¶k¡;[Àg Iåà…*zçk0ú;ׇÿ”ñwýó3x—ÿ‘¨ÿ…)âïúÿæfñ/ÿ#P¸Zi–Ö M¼’¡ Ž0¤¨$Ç`YŽ=XúÔõáð¥<]ÿ@üÌÞ%ÿäj?áJx»þ€?ù™¼KÿÈÔîôW„”ñwýó3x—ÿ‘¨ÿ…)âïúÿæfñ/ÿ#P»Ñ^ÿ SÅßôÿÌÍâ_þF£þ§‹¿èÿ™›Ä¿ü@ïE|Ñã-Pøâ? é>.ÓþɨxçU“DÑ"ÿ…¿â™>Ûx–7wíä´"ׯ:Ùµ+ýP–Îûþ­SÄ>T1ÜX ¢ò¯¢E‹{KnÛ“$ù85íQEQEQEQEQEQEQEQEQEQEQE^_ù Ãÿ\¤þiV*¼¿ò‡þ¹IüÒ¬PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿ´7íYñöÿ‚‚®§/ˆ‹üðoƒ¼2Þ0ОÒ¶ ¬jÅ¡ÖÅÆÏ5E¬¶j—òÖÚK™Ì`צÁa¼Gðögøi®|CÐl~&ªx/Nñ/Žu BñõÝ2 å’6¼{ &kH¡Ù ’‰®®¬¢q¡OÈM}½}û<ø3Æ7¾"Õ|Y ZêW~9ðÕ·…uárï,:ž™ ºhíd…˜Ç·:…æHPÌ%!‰ ¡|‡Qÿ‚>þϺ†‰¦iKàýnÏGÓ<7gá/ìÛkvvWúe˜”ZA}7ª—Æ´M²K#©rCd ÒŒãÍð§vº´÷^VÝuÕ«¤’4­(Ê3äVm+y4¢¯×zý4‹³mµÍüyÿ‚—x»á7ÄÏYxCá%§ˆü%à¿èÞÔ5WñjXÞÜêZ½¾šö_f²kVVˆM«ÚÇ3É<[.‚b c#Å?ðV-wÁ>]Å? ¬!øÀß.~Úë÷wú"]A¤®²×gR¶Ó$ºk°I|– •Äe†•~Œñ/ìðóÆ^ÿ„ÃÂçþoi~3Ô³}r¿iÕ´Ñd,®~YÏ/û.Ç÷kˆÛÉùÕ·¾ìŸ‰?°ÂïŠöÔ^+ðýäW÷‰cñŒúŽ›­_éš¶®–qX­í¥õ¬ñÜYÉö[xà>D‘†z°"G påQ|×nÊÞ·§ýË÷Ãͨ•›MNÒü/ÊþOÑÓøûNxÇãgÂχÞ#µøQ­éxX»Ò¼Kg¨^ý‰ü1±»¯£[¨¢šöÚYíb‘RIÜR´q€Ê¾Õ^iáïÙÀ¾Ðü§ÚÙë·q|;Õf×49µjZ…ÔW³Gq“\\Ü\<·…–òàbáåP\D+étMŶ⭯á§üþ¯¤+é~ß«ý-þ]YETQEQEQEQEñ·ü/â&³ð§à¾¡¯x W×ô-RËÃköˆ\j0¤šï‡c—ìÞX.dhÝÔ*‚IlIÅ}“_5þß¿ ¼ñÊóLðWÇMà}ľÕ þ×¶Ôm¬.­§‹QÑnb6òÝ#Åæ· †GÈVãÒ*&âìT>%såŸÙ;þ ⟄Þ'ø›àÿ KñâÖ§¬üQ³ðgÃo |B¼]ÄZ`—E:ÄÚÄ“[ «M8}šùà–h%šHáó¸õ?´Ÿíçã‰ð|ñ‰ñGá‡Ç}ž!ðŽâXÞÛXž]2K¸R Dù =”ÐÞ[JMÄqÚÛáÜŠgþGö{»Ô5_ø‹ö‹ñ&³ñ[PÖtívßâ-ïô“¯éWÜÁj–±GXGÃ{@m r-Ìžb»meÐÕ?c€š¯Â·Ñ$ý¢u¸¿§Ûékâxmì4kf‚âYµ€ù–Eãr'HL… d@ÎþX·àOø+‰>8x?á]‡À„Që¾#/ˆ¥¼ÐµO.¤xz=üiúŒ’ê‰k3̦êHR.Ô™œDÿÙƒöbøû+ßx>_ üs—_‹ÀZ§ˆ5=-sź]ÏÙ¿¶™$»†IV$šu¬’£Êí.éŸsºíUòOÚ ölømðËÁ¿m¿dÏE¯jþÔ¼M}½§üh²ð¦¹`šÕᾺ³Þ¶ÏÕ¤Ó¾ÒVH¼eä©É¨»î·ôÓnº_}ݶe$›iwv¿o{WªÖÖ¶¶¾éõïþþÙ:ŸíAûC~;0Ö4sáô3ÏñJÖ|6úÇÚÒ9´™–žÑör!¸e{Yp!s±Þl?Ù[þ ýáÚ—[Ö×Á¾´ÕíO‚5oè…üOˆŸs-£^·É-ÅÄñÆ0»B…'~y®–vµ¬Ÿ›êÓIhõ»ØPqvoù¼þÿ–KöÕkÆü/ýµgý¼5ÙGÆÓÚü<´·“âíÜpGá/ŸÇ·€|O)ŠñÚÊÕ­.ÈQíÚ2Wî;°>þ¯Ï½öxøqðGöŠøoã|b±øâKâiñO Ñ+Ѭ4û? Ùxkþ¨-äÑtûé¢Ô%½´’ø—–y‹˜›!%M„»¯ûHÿÁGo¼Sûü6Òõ/ ëß~ø›â†ò¼Þ–ÊÂÂHâÎÁæHV„ƒÊw }iàσ~ø}ãkþÓE¦­ãÛøu=z>Y>ßq¤6q¾×b±âÞÖÚAÙ’ OxSþ =ð'Á–º½¾‘á=bK=gÃzŸƒžÖïÅšÅݵ–¨ù?jÓ졚í’ÊݾÏÔ·XÄ[w³'.¢”jj­ó¿+_s•ï¢OMlmNpEQ«ê´òO_ÃïüMoÙâ¹ãoŒ?ì|[ª]ê~ñ¦Ÿa¥Å3elmßÃ%ÓÇ¢™în$?íJÕÃøþ 7â?üdÐ,¼MðÒÃFøsâx‹À%o$·¿ÚZAÕIfÓþÌ«¤‘è·X—íEr Å³¢¼ ðÃß uïê~ ÓþÅ}ã-B-SX“Ï–O¶\Çgod’a؄Ž´{P*Ÿ/q™˜óq~ÈßáÓô‹AáÈÞ×Añ&§âë(¤»¸‘"Ôõ!|/g`Ò0J5[ðb}ѯŸòªíMµRIëåKçd¯÷§ú£((¨(Ë}5ÿ·_ç._•Ï—~ÁgåÖ4ˆ÷?¾ÛÛ§„~j_4Ý VÔ/´é¶;|ä·Ô/´›(ä|ÍjD–¢î ³©óyPö~"ÿÁT~'|%ºøˆŸ>è6ëð£C°ñ¿‰šßâœÁá»¶º 5¸þÎv¢ƒO½/gòÈ×mÛ—½_áÿü›àoÃO jú7‡¼3¯Üéš×…n¼ 4§Œu­PA¡\,i&›ln¯$6¶û`ˆ"@còöü›rsßøïö>øsñ2oÉã-û|IðÝ·„2¼¶Ô m{Yob™erVHšD‹HèÝO„?à ´޾|bÖ¼-᯴xÏörð%þ…â+ûžxò"ì^Ò0Ïi­µ½â$$yé¬Ä€ï‹å÷9ÛÒÜß+^þ—´oµålÛZÎŒ£QÃÎß>g÷ò·ÖÉ7ëú-E~|þÊ?¶½ã/€?õmsö¡ø{âx[ÂÐk6²¼ÓEÂÈåLxûçÃw_nðí„âè_ùÖÑ¿ÚD~X¸Êƒ¿oðîëŽÙ§:n §åøßü¿Êæ jI4÷¿áoóùu¶—»ETQEQEQEQEQE|ëáø(æ—ã} SÁŸ þ6júeÖï&îËÃ)q»X«m‘'*Øee8<GjôO‚Ÿ´;üjÕïm—À_|)Œ"V¹ñ&”š|R–lŒYݸbv©U óYC|WðgÿµeßìßðâÛöñÃûOøçJ»ðî¥{¯Ø />^&«3øŽÒ0q«y¶®Ö¢Â]ª—QXK»ÈkÁ_zü'ðü*‡>ð·ö߈ ÿÂqð+Å^ø¡¢GâÂwø_]µÔaµºÔu;;K º©ŒßG+!!Š:Ší,iÿ†ºŸÅ­WÀ:oÄ?ÜxïB¶7º—‡#×m_VÓà ¬ežÐIæÆd‹2€©ÎËåv½¿¤“ƒOÐv×ÝùÍç~ý¯>üVøu}ã…ÿþøÂZeØÓï5½/ÄVwzu¥É(.cÆ’,XBÀŸ10>aš^ ý¸~ |HÕ¼3aðïâïÃzÿÆžü#öÚwŠ,n¦×<‚Âo±¤r“qå”pÞXm»NqƒG+½­¯ôÿ-EÒýQ¢¸­ö”øuâ_ŒšŸÃ¯xûÁz‡Äµj¶Öí¥Ö,bÂ2k5s4k‰b;™@ĉýá—|dý£>þκDz‡íã¿xÂe-Lj5«m2'ãBCÎê4JqÐȃ« ®Ï¾Þc³½ŽÎŠà´Ú«áНüWkáˆþÔn| n.üK®¿i3øz –ùVBm¢3n“h“œYzWí…à/ˆ_ SƳç‰ü)ñ3CmjËC{¿x“N¸µŠk‹¸-ŽnZáaÝÚCs+€4’GDa+»//ÅÙ|›êKvßúëo[£EyŸÁ?Ú“Ãÿü,5BK_MqâÝoÁö—÷±,Ú•Þ—¨^YÉäG˜\XM0EËŸºMze6š)§â÷Wü¿4Š(¤#À¿4?†~°Ð|¦Á¦idBkhs¶5É$’I,Ä’ÌÌK3Ä’I­ˆíÒ&Ìc§Zù+öaÓ>9~Ñÿt?ÂòþÆþÙóÿÐÿá Óî<Ÿ*âHÖ|›³ånû£Ç8É÷‚Ÿ ¼{à}nö_Œ¿gñÔ3@ÖØhš\Ví»,ìb ò6æU¶C¥@="Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  òÿÈVúå'óJ±Uåÿ¬?õÊOæ•b€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€>7ý¸c/þП­5¯‡ ¾ëW'ñiV^/ºñÆ·àßè-æ<Œ‹w¤ÚI-Õ¨c«Ÿn7‰ÎýÃϾ9ÿÁ,¾&x—Å·—WúÆ{O|3Ñ~x¸øŸÇ¿„$¸“ObK²ºe­À¼ŠèßË#ÀæŽDÊÊ|ÂSôIÿU·ýrOä*Å:oÙ«.÷ÿÒ¾ï‰ífô»vVrnníô·äÿöÕ¾‹¢Wwù'ÇÿðO}gÅ×ÿ¯í‡ƒÆ§ã_о ñ¾›w7˜g·°Ñ‡‡üèe—É.³ì‹ÿ)T²þý2é½öò¿`ï‹_ þ?ü8µÖm~7ÆÞ?ñWŽˆíµ›¿øIÀ Gõ|I'ÚßÌû28Uûƒî*+HV”4[køÆ1ü¢¾b—½ß×ê|Óÿ0ýˆ5¯ÛkÁ Ó¾júf‹y¢ø…F³%épº‡‡¯-æ±Ö,P¢1ó&³¹“fp<ÈãË(U¬Á#µïY~ÖZ5ÿŒ4ý3Ãÿô[­Àëj’Ë'…­¯žòÿQ7¼ýOR¹r‘¾ 1Ä»”Œ/ÝtVVѯ_—2IÛ¶ŠÚkg%³e©µd¶Ñú¸¶Ó}ìß^˲>ð‡üëâ/ˆü5⯈>ð…<[«ë>ž[ÛOˆºßŠÆ¡e kÉ©I=ý„f ¹X#D|´¸’@ §sÿÛøŸ¬þÍ_>ê±|0‹Á^1>.ºÓ|ý¡u?‰ZmnæîéVçM6K”kׂi–õÌÑD0ˆd+Þ´Uʤ¤­ë÷´—è¼¼¬L³I.?»Eøh|=­~ÀŸ~=]øÛÄ?4O„žÕ¼[wà ðö‡©]jÚdºw‡5ã©ÜMqu5…¹’i⸞íþϱU¥!ØÇ·®ÿÁ7u»ß|KÔô‡ðe¥ÏŒ>7xWâVpŠé=¾›¥¦†·HËVwþÌÔ*–B.Fç_2@¿cQWN¼©TXîškÕJüéÇñîL—4yßý«þ’ì|1û0ÿÁ7ümð3öŠÑçñ®™áoxKÂÞ7ñŒôoÍãÝeuH$Õ›P‘ðÿÙ~Ä'QªMnó}¨¬ˆ<ß-d!Sß~5þÌ7??jxÞâ=çHð·ƒ|M <7Èd¸[½N](Ã,*ce#°ºGmÊÀJ  Û}ªŠÂIN dšù4ãù?Ô¸ÍÂn¢Ýÿÿ;ŸøGþ ‰ñCáOìûðçHø'â/x_Ç^ýŸµ† ©Á ÉlúìÇI’°­m‰m–M>ð—’2àÜn1gGáüâl ñTñŸü"Úÿ޼AðÿYǚ׋¼¯øGõÁ{w$º†£i¦Im’$Ž8ãHU‘Wj Ò¿èÒñ3””´×nõOý)¿–†j)(¥ÓôŠŠü®ýœþþ˾-øW£xbÆóJøiâ±üPñGŒ/nõ%škÃS¾ÕîíåÒØÃò_…¿·†MÛPG%Ê«·Ë¿èÊ(¬›ßúÑ/й799½ÝÿßæØQE„x¿ìà­cáì‡àÝǺe晪ÛÅs4¶³&%…eºšd¹Ê¶É•8e' bŒ—[¶º˜äc½MEQEQEQEW—ø·ãæ«¢xÛXÒt?i÷‘i3Gž}YíÚVh"›!ÝÀLÞ窗ü4OˆèUÑ¿ð}/ÿ!ЮÑ^Eÿ âútoüKÿÈtÃDø‡þ…]ÿÒÿòzíä_ðÑ>!ÿ¡WFÿÁô¿ü‡Gü4OˆèUÑ¿ð}/ÿ!ЮÑ^Eÿ âútoüKÿÈtÃDø‡þ…]ÿÒÿòzíä_ðÑ>!ÿ¡WFÿÁô¿ü‡Gü4OˆèUÑ¿ð}/ÿ!ЮÑ\—Â/‰7´½N]WN‡L¸Ó/¾ÄñÅtnQÿs¡ƒ˜Ðô˜ mþµÖÐEPEPEPEPEPEPEPEPEPEPEPEPyä+ýr“ù¥XªòÿÈVúå'óJ±@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ôŸù[×$þB¬U}'þAVßõÉ?«QEQEQEQEQEQEQEQEQEQEQEQEà/ÿ’·ã?ûÁÿ¤•æÞ8øÿgàŸŒ>ð¥ÅŒÓ¦¯µn¯Õñšòï[Tq´äÌñH£‘£®kÒ|_ÿ%oÆöƒÿH-+Ç|_û&éÞ9o_kú¶¢uý~è\Û_A<ðǧyAE û2Ì#—É*,2ÌÌ~\à âWÛ¯ùzõí ú>ÿÖ¾†ÇÄ_ÚJðwˆm4]!šûW—V°ÓgŒ[NÐ[}¦TRuCH#râ6`ÄcŒEßí¥]|Oм5áFkùu BæÆîcm:à ‚ÞYG9A®¯£*±+“¬‹ïÙÛX¹ñ4³[ø¦Ú-"÷^²ñíŸöNéf¹ƒÉÜ«1›äͺ66’§Äd<%û<ê~ñ~‹;x– ü?áÝNÿS²Ó¿³6ÎZég ²\y§vÃrûHAyÉÁv÷¼ÿ(þ·ýlÝ?­ÿàÁ5µo6ÚíiàMVÈ·ºAÔ¢ÔZoÈ_ÜÛ€|¸%}Ûº!ã5‹àÚçAñOæ×üMk¨è¶"öâ˜Z\]"-„\LÑBD Ë*7Ï€3÷Z¹ñsöh±øÅ­j7Zæ§yf/ml­â6ƒËžØÛÉrY–Lô’;¹## òsÍø÷ö?ºñbj–úO‰â³ÓuW½/c6šÓAoç¬J¯,è¾lkUv s…SÉQoíyþz~/Äúy~_çÿí5Œkã;]+O·³™d׆+‰™Ó^ô9VÈUÀ,6œç'jçü(ý¨ü5ñÁöWš¶¡~t‘ªÞÇ$RÅo*©˜Ç4ˆU›kfÚx856ðx|CoªjzÄS\¦µµ*ÅdcGuÒþÀQA‘Š‚s $œ}Þ~õsv_²UÖ©á=â'‰¢Ô¬4}N6zoØä‰%–ReHÊ Œ(G9&Uÿ®ŸæDnÚ¿õ¯ù­¯í á­÷RmNkk]5à[³uasm%¨˜’G,jég‰H €NìŽÃž/Ó¼]öãụ»]:éì§tVس •XŒ>ÝÀ¤€À©9çà.µâKãÛM©øŽÆßG¸¸³Ò¾Ïv´†Hãæ|K šPd$…Ü0œsÓ|øb>xQ´-:÷íZE¬ò6›C²K(î³î>nÖ-‡ HÜkM¯ëú칞¶_×õ¯õ®žÍû2ÿÈ;ÅŸöúCg^™^gû2ÿÈ;ÅŸöúCg^™HaEPEPEPEPEPEPEPEPEPEPEPEPyä+ýr“ù¥XªòÿÈVúå'óJ±@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ôŸù[×$þB¬U}'þAVßõÉ?«QEQEQEQEQEQEQEQEQEQEQEQEçþ'ýžìüKâ­GV^ñŸ.©"K46ÆÔÄbŽ WÌØeb_âëš§ÿ ËoÿCgŠÿ+þE¯L¢€<Ïþ–ßþ†ÏþV?ü‹Gü3-¿ý ž+ü¬ù½2Šó?øf[úv°8å=*åPEPEPEPEPEPEPEPEPEPE…ã_j>û7ö…•÷»ÌûEã[ìÆ1±>ìäúc®xÝ¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘hº¢¸_øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù€;ª+…ÿ…‘â/úh¿ø9—ÿ‘k³Òîd½Ó-æ¼"šX•Ý˪1€Xß>‚€'¢Š(®Ç_òëÿÿÙk ®Ç_òëÿÿÙhŸ¯<øÙñ_RøwªXAáÿìÇ{‹+«µ‚æ)d–þHš[x<¶Èwó›kòkÐꬺ%¬úÜŒ±föÚ -£“qùc‘‘qœ˜£9##oNN«úéþ`p:í9£èöçWÓ5›k{€Íg,‚ŠùRd…Ù¥ «ÈŸ4Æ0C2*Ÿˆ¿h‹» /O£èWÁ¢èVúµ¼æX$BÓ,„,›&åAAʯÏÜ-Ó/ÀïÅs4ÖêVÒÌ\«AªÝCömïæ8ƒd£ÉVp•6† d qøá±½²iò¥´ÚpÒe…/'Xæ·Š«¨|; ï‡9q¸óÍ­F¬ŸõÝ~—9Ý ãéÒR[Oˆ×òêbóì ]5bY®|¨\[.%_4‰·\&¹ù «ß¾5¢·ÒŒ `òÝJóÜ%ÔÂ2-!§1r7K†@«ÎIèqZÚ§Á? kZ•Ýæ§¦y×7’ÍÌ ¤„D<Èðÿº“E‡M¬6 µ±yàý3QÕä¾Ôl⸺’×ìLÒåÇ“¸±@¤àdžH8ÎÝ—øçøy¯ë·ãørº—Æ þ1Ó¬t ©´×¿šÎïQeO!š;Ig1ÃûÀåÁDùŠá†ìÔZoíg¨KmæxÄ–Ð\ 9 óGo²(®ßË‚V 1m¬ù²à–P9­-àG†4 BÞãJ±º‰­Gî£:…ËB‡Èò ùFB…Ì_)r7¹Ï5¤>è‹l°‚Kp<é?ÕÚÈd€}ïàbNzžùÕ¿/ø?¥„îrÚí gu0†îÇS¹T½—°ÛGµ©’ò[XC‡˜¹ËÇ´• ýâ _Œž/Õü ¡G¨øf]#‚Òê $ŸR™Šˆíà(ëµÛæ*ø8;p «¶Ÿ¼;ckq ¦œ;«ˆîå_>CºXîå–ã»68#T¾.øc£øãU±¾ñwßlÓEµš×P¸´xCà> 2/P>ÜR]/ܧ»ì7ân¹}ῠͨhú†¥­¦e¸¸Ô ’h•Ÿ”,n„±m€s߀NgøÇ:ÖðšËY³Òž-Zê+V¸¶kin~Àe(%f†!æH# Īཪç‰þh^0>¿ôŽ·QÞ«G¨ÜÂÑÌ‘ùhècm!}1Ï=y«ú·‚lu¯æj ¨{}†7Kùã¸RŸu¼õq)oR['œæŽþ«þßý4.ß×õýhpvåÒmÚçÅ:F£`l/'Žâ mÙ®-ˆf·xebÑÈѸ! '(ÜœŒU´øõ®i~#›Iñ¥†™Ù¼Ó¬­Þþ\²ÉöOµÇË™Ødç•?tç´“à׆î4{;í=®¡±¿]R6¸¹–iZéO¼¬åänß9 Œ `Võ?†š³qæêšzM/ö”Z¸fwÊÝDˆ‰(ç‚4AÉËM]7¶ŸŸü:ù.ìO_ëúþ›ò7kÇ^$ŸÃ6Z|– µÞ¥kfþ`$–UF#s‚qÛØÖÝeø¯Ã+â›k8䙡—°^‚;ŒR íœc4–ñíuK«þèýå¡©X¾(ñ,Ú½áÛ[dÓX¿{YKg(«m<À®]Шç<[U“âÏiþ6‚Ö=ynÿЦûD[^Mi,O±“+$.¬>WqŒàƒ@çˆ~?i>Ô.£Õlµagmpö+|‘#Aqt‘™ ¼`?˜_€%wfž¿``Ð _þÖ[Dz:f-Æä…'gÞ'ò‚äCŸ3«x£VøáíBÞóʶ•®.atSwwquÊÐù>sBòá¥ÙÁ“‡#?6I5ˆföO5ŒZÈmNmEõ/åŽåÙ¡•Œ‹‘(Ê*ƒ¾WÝÎàAÀZÙú~:Áÿ‡Ôz_úþ¿¯‘nóö¡ðÕÞÀ½Xïím®ÞSå²%ÀÌ[ÐÉæ1Ç-å«…,@æµ~|L¹ñçŠu($Ó.ôË,,ï-EÚ¢Ï:ÌÓüøI"$°WváÒŸ¦|ÐtÛ}5/‹éÖpX–KÙ¡[Èá]¨.#‰•&ÀϤrF1Å_ðOÃáãÎÞ†ê6¸Š(§½žèˆâÝ対s¶Å]í…\jôMþî—õýu9]Oö£ðþ“{ªÛÝ[ß4·Z9­^)¿}ä–óû"ˆÏœÑàyâº}kâ]–…ðþ/^DæÖhâ‘bûM²9ó €¢G”BOÍÚB>RxÍ>xrÎye±V¶’@Ê­³yY÷•‹l£ÊRÜ•LÓ­¯†:-ß„,ô/³K§˜ÚÙ`º–`dû¬³# uù·dä䜚•ð«îSø´Øä¤ý£-õû >_麅Ê\ÝØÃuq4qˆl÷+ I?z >7ãË(%I8<ؾý£,ì–y‡¼K-¼]\yɾÉ!¶“ËžUpÛQŠð@fÜ6†çvŸ<-cwi5•ämfÑH jW;%x¥2Æó/™‰™]™ƒHóéZr|1Ðå³ky,s[]Y•ó¤ÿUráç\îÏÌÊzŒpE?NïòÓñóòÿ‚rÚ—íg êšÜV:ž¤ºCÍ,Ígm-¥´Q@îò4“ øû@?(Ž|¹4¼sñ¿V±ñMí—ƒ-­žßNdŽI$¶7c1ˆcçÅåFxÓp¹;ÈL'Í×Ëð‡Ã³Éª´ºp-­Ã-½éóåýòH‘£½òåaŒepFÞ9'9Þ*ø¡x·Äi©_‰QÁF–* ¢œ®Á’&ʱF¤ÆPŠs•Rû7í¯¯ù~`úÿ]¿àþmçÇÖ¼²Ó‡t›Ç¸¸ŸNŽþFÖÚoÚgHÌnÅÕð_€;K`±?í¦Ã4j4zAzå4ÖX¡Æ«¶tŒ9”mä™6eX0ÈÉ|9y¬ZÞ›!–Ì[ˆã·»šÙÛtáÄo°ýÝÊqÓ¥6Ëெôý[í¶ö3–o> ÷“¡¤ë:jAkwr¯xm¢IM¬‚9ãçVW`¹r¨y!ˆ¬«OÚ{LÔïm™g©L·X~ÅIpó¬öñ(Y–+oúBž 6w.Ò]¨ü&Ð5[¶¾°--ÊàO"‘ö™DÓCd"«9R>\Um7à†´»øn౸–î LË=ÅýÄò—/–g’BXî‚#Î~î: ‰_oëô¹WÄ_EŸÁ[Åzpòé‘ܲ¸(²G,24r#•b¿+#d«ÆxÎ}ÏÇ?Ç·š5Ö‰=ËYZÜYØ@±½Ò †—Ív˜B)Ñú¶b@®’ëáVƒ{¦Ígsdíkp.ı}¦P’}©‹Ï¸ä³Aþü»j¦¡ð?Ú¥ÄsÞÛê yqD·kª]%ÖØÖEPfYCŸ–iAÉùƒsœ )&Ó¶ãMuóý,j|9ñ þ.ø}¡êº’Ä—žŸÔ«!«'–¿uPÀd›æ=꿆~ø{Â7Ð]h¶—iµÀ†Yïg¸hUQÑcS#¶VIOº7<ÔÞ8øY¢|Ex›Å–÷2´PÉo˜o'¶ó"“ixßÊuÞ„¢­‘Å=/åÿüļÌûŸz}—‰&±¿°Õ`µ·¹{'Ô]#û(™-ÍÁNÉþ¬1ݳnF3šÈµøþMbóZÒo,4Ë++ «Xîd¶‚âëí2L¡ƒ=ÀŒ)¦ÙÀŒàVÞ›ðsJ¶ñF¡«j¾}ýÅåÛÝG³Êmí÷B°°1îØoÚFqQZ|ðÅŽ-µ­¶¢«'‘‰«vÓB ,aJeßO1ÀTaˆ¤¶WßOø?ð?¦¯—õÿ `è?´Ý–±6µ{6›¥ipj&ñ¼¢À»L¦6Q!9ÝU+J±$ ¥ºÿ‡,¾&é7z4SÁöKƒm4r¼RpªÜ<.ñ¸*êr¬{ƒ‚í~xbÎ b†Âc Å™°š7½Öâ"îÿ¼ !ÞÁ¥‡l°,pEnxkÃÞ°k}.KùQÜÈZòúkÉ ¿3³cqœ{riéwýuÿ }?®ŸæhÖ'ÃÏOâÏ G}©,I3\\DD@…ÄsÉðI9 ó×5·Y~ ðÊøC@K¦iÂM4ÛÊí$É+ÈF=·ãð¤?ñ«â-Çí3K–ÆïKÓÖúñ –ëP†I¡Þi²V7S’b œñ’pkþ†ÃOÓôȵÝ2ö=böÂÚæ{hÞ[K:þî=²H²6N9U!CûFqèÚžƒi¬\ÙÍ©B%“O•§€– #´o8)#ŒŽ}q\þðKÚ5äh¶·¶Fª#·ÔnbŠEVfD’5,ˆ¥˜*0*ªv€Š–›M!Ý]3;Ãmï|e¬xŸN¾°šmµÙaQ) !Îs¼ ƒ½´ñVµ_6ºmæ¡Z6»vº}äzy–¢Ù=Ć0±Ç¾U$þùIbŒ‘ŽKÏ€¾Ñ,ôë›M@ÙØA%¤(º­Ú‘íÝ0—sEò&#bTm·ŸÁ\‚]ö¹ó¯“RÞ?Íp›6¿^ÞZqÓŽjÝ›]¿àÿò7ù‹eývÿ?Àç¼Eñ„YüÕ¼W¡é×.™Àk+‚‹$rÃ#G"9V+ò²6J±ÈgŒËwñ–×OÖ"´Ôtb 5´w“2ÂÑiÒÜ>Èc”¬¤–,T,8]ÊIæ¶[ÀZCøbÿF{0Ún¨× u ‘È”ÎÌòÙÈÜÎÇ‚1ž1Tàöƒ&­i{<²ÜY¬ 4š…ÉÌ,Z&ZB'dbJ´ˆ8ç…Õ|¿à‡O¿þk¿FŸ¯]éšF—©_Íe ÉssÇö{2êÅ›¤Wl…ÉØ­€A8ÍsÞý¡íæð[_ø§L¾±½¶±²¼–d¶€\­ÎU’p¡K¤˜Y_q’êµ_†ÚF³â#ªÝÃt—Ž‹¦ Ù ŽáW;DÑÆá%Û¹±¼f«j|=©@‰5œÑ˜ ¶¶ŽH/&†X’ܹ„$ˆá”©‘þ`A;ˆ$ŠJúßËîÖÿ >–þ¶ÿ‚bi_´~‘­}ŽM;MÖžÒäÛ,·F8DVmq3AÉûÜ“æ!S凃œsSIûBèöÐÝÜêZµ¶Ÿ¥Åì7²G•}$NbBãç‘Þ©œäqÍkiß¼;¥i†ÎÎÁÄ ðJÁ ˜Ïg,H‘‹ryÏ9V‡û<ØYøŸW½×¦ŠöÇR‚âÒ==#–8!ŠyD² <ÎnE9ˆD3–Û“Þ¯Ë_ËOÄŸ—üÖ‹û@èzþ‹<Ö¬Ð_£Ë V3M Kq""¾ØÞ9'Ètä9œ aÚþÑ—phš«®xP[ýõ›Ä€Dò[*˜‰—&` [db™(9èž𥧆4Ù-,úx¥bîoof¼v$ó;60Ç·&²¬þxzËA:dvs½‘°—KË{<¥mdÆè•™Ë*üªÊ…£¿õ³ým÷êßÖëô0Ïí§Xøæ] ýf¸¹“Q6p2,6ÑÆp7/4ãÎlÎ#±üe­øƒãM½¯‹4-7Â0nhêØ^}šX÷Y²C$œïuýÙ$u[í z÷࿇u B[›‹[½×)yÂÃQTÒ¤0Mw""Û´›Q¶!ß¹ŽÙÎÜpyÏ÷ö{ð®¥jb¿´Ô%.%Ju[¿>ídg”K¾U"(†×$ŠWA'‚ôé-/!òdHõ •¼¸òç‘å]˜mÊÀõIÀ 0G'4º_·ãò¿ÌOÈãeý a]xÉýyv—OÔà…Eº¬…°ZV‘q(AÆM?Pý£lt·¼ŠûAñÞiqË>£l#·gÓãbvw"m¬6O9 ‘Œ‚´?<1 ·­ö ÝoážÚH¤½áŽ9œI*ÅHV Ρ¾@¸#ŒT¶<;gi{ØçŸûJÞ[[¹n/gžk˜å<®åØ‘c$ä%Òþ~¶ý.7ÖßÒ2uŸÚNðöƒu{®iz­¤öW¿bšÊim"¸ a†]÷ÙN™¹ÆÞ('í3§Cý§"Yjº½’½Û=¥ªF-m yYä2Ì7.ü Ð&W'©ñÂ-Å2Ϫ[],óMç¼¶×ÓÛHÌbXOÏ© cER àã$gšŠÓà—†,m/àµÒÂE©Ú½•Êý¢SæBñÇ.wñ”‚!‘ƒòç9$‘nïýiþ…âþ¿­ñÏÄ+ ø“ÂÖZf›6¥ˆ.ä·v‰ãS ¬&á½Ô¹“þʶ9Ú!¥~Ð÷š®›Zi’\^Ç­¦{sj,ìã}I­6ùC™%ÏÈe,8®ëSøi£ê÷±ÜÞCuöˆn’ò9#½ž6ŠT‹ÊJ¸Ú d©Q…`NàsY±|𽾩Ý­…Ä2Ç:ÝŽþá"–U§W’1&É ÊîÃp8Î-×kþû:ïoÇ_øaEPEPEPEPEPEPEPEPEPEP]Æ“ÿ «oúäŸÈW]Æ“ÿ «oúäŸÈPŠ(¢€ Ž{H®±ö¨£“oMÊ?:’Нý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þbНý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøUŠ(¿öM¯üû[ÿß±þdÚÿϵ¿ýûáV(  ÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…X¢€+ÿdÚÿϵ¿ýûáS¢Ð,`*¨À`KEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQñEäšw†µ‹6Ù4²H€v°BAÁ㨨¿°n¿è5©ÿß»þ3GäMÕ¿ëÊoý«ŒøÕñ¤øCÏѼ=„zÚZ›ËÛÛÃþƒáÛNswvr?ºÂ8²VR2]Ôq5»y|rÞ·ñ©.­ŸÛæŠ8`amðŠea¹-±X‚Â9ÈC‚¼çöi¸û7Ž®í~ѨÛ}®Áõ±ÞC»QÔ<É#_í-VM¿¹š]›`¶ù6D’ ¿/— @áEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPgäMÕ¿ëÊoý«NŠ(¢Š(ÿÙpostfixadmin-3.0.2/DOCUMENTS/screenshots/postfixadmin-user-overview.jpg0000664000175000017500000023733410676263533025142 0ustar daviddavidÿØÿàJFIFÿíPhotoshop 3.08BIMÿâøICC_PROFILEèapplmntrRGB XYZ × :acspAPPLöÖÓ-applrXYZ,gXYZ@bXYZTwtpthchad|,rTRC¨gTRC¸bTRCÈvcgtØndinì>desc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀá"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔ*|‡Â‡Çz¯ƒ|e©ø-lì¾j6v·7I¤Ã”0°ޯÉbc¹I^F‘ã,â\ëuß Þhß¶f•¬iú£â­NþâÎ×Q—RðÍÆÍ %´e’ëOÖ0!H¾`ß’ÎïŒƶŒåîlö¿õºû]{mÆ-½Ò¿ÝoϧWÚúÙñöбðWÃËßiRñÛjI£Gk`ÉæÏz×Kh ʪ‘3…băé[> ø‡©x¢9ã×4B¼´Xü讂4ewb)”—oBTà:×ÉÐþÍž“áæ¿ [ü8º‹V³ø‘iw8:‹ÆžÚÉ1IÛ6MYË*¶Ö>Z3Ú vúçÁý7ÁúGÆ-+OðV½>‡¨Ë¦ÿcéÚE´™î¼„ %¬Š6ÂR}ŽÓ ,eK±àÖNV§ÏøÛ±›‘výã…ôW׿×ä¯ó¹ôÇö¥Çüõ»®'â—í+ |ñW„ôoêW–×þ4¾þÏÓP.àòqËœü«¹ã\ó˯Ôyçìuá_øFóÅÿ´,Z¶£ãæ’¶kþYk VÐ!éi ¼ ä9ó®3ãoìóã/ÚwÆþ?¿³û&e¬^Ð_U³¹1˜$ŽéïmY$AûŠ ¸[!åxj•¡%ÕníÛ­¼ï§“ô&>ú}ÊýûúZïÍ/3ê{Ýz{+Ify.ØD…ð'8•cü3ø¢>(|8Ð|M¤ÿhÛZkú|Œ1O·Ì%]U°HÈ Á"¾[ñ÷?<Ò%:fákï }’7–Ýe‚ÂÖY  1Vbc` Èûpj­ïò½5Kïi}Úþ ºæòoîWûÏ´†«; ‰®ãKý©qÿ=nëãÛoËám'ÄÇÂo x¿Kð·‹¼?¨Xi1é71\m‚T7×ús ™#?&T ,cvƒ“=Ï„õ¯Œž7šóÞ;Ò´ß|GÑn#Š{iìnäÓÖ(åœÃÇØÜ–YCle`®+™¥æ—ßɯ§¼ÿðòMò«¾ÏðæÓð_ßõ×ö´øÏu­sÉñgʼn<$#ÔþÕ’º¹¸Êù%f‹g]Û²¹éŒµóÆïøAøó©xwÄþñ¹¢YxÕt/CÒn®íí&7WÀ~î܆VÎ#•Âí;ð듛ڿÉð¯®l¬F´Þ4ÿ…Oo¥›ðíºMAec$Bçpyù·ç$6{Ô_i%¦¿‚Ÿãx¯½w-«^=}ß•Ü/ò´ž¾O±õˆÕg=&º?UœfºÉ÷¯˜ÿexaø9á¯k:^›âéíš $ðþ›à;Í !˜ošÚÚâWLÊSÍhÜÝ+s“aü)¦[~Ö$½øïàïx‚îóPÓåð~«ý‘>©e§@±B¥c’5d±d¹Y$vqA Y‡KjÒQþ¾]ü»¢ºoúùÿ[ýçÒŸÚ³çuÖ~´¿Ú—óÖî¾<ð¿ÃíB/h‰má[ü\ƒÆow¬ø‘´ùÒÞãKû[»îÔò¥·{3ilʰUØ OøÑã[»í_ÀÞ%¶ðÏŽá]C¨ÄšT³]…•åªÝEAÞXIc*êUÀÄ«r¦ßõ¦¾—vù1ËFÿ®ú~sG©|@ø³ÿ úm/ãÔîOˆ5htˆŒ%rò+°wÜGÊ<³œdò8®‹ûRãþzÝ×É×~ñÏ>G?…´sÃ>!¾ø•q©Ù WOkƒ¦ÂÂo.yãFÛ°¿0b€‘Ëc×?dË¡ü$‹MÕ4?èzÞŸs$zÈÕ Í-ýé;¦º[¦n’V;„‰òà…Âmت›æ‹æÑéøÆ.ß&Ú/;9û²²Û_ÂRWù¤­ý_Õµ.?ç­ÝÚ—óÖî«ÿàEøLEíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëw\ÄÚÃÿ ï-­|m«ßE{x†Xm-l羺‘Áq¼o&Üñ»n3Þºoü¯Ÿ5íSFøMûNx³XøË«ÿÂ5câí_LÕ¯p–¦íã 3•J²¾Ö#>`#<à»ÿ†Öðü÷ñ×þºÏÿ"WEðßöˆð÷Å{Û›_ê÷Ó^Ù –k;«9쮣BpÁqI·æR•`T`39 [kmç‡Ä_2™¼ Fr-~Ãr8ôóüÿ×Êü;W¹„áü^2’¬’Œ^ÜÎ×ôZ»y»/3æs,ÀåõÞÒœãñr«¨ú¶Ò¿÷Sr]V¨í¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¼ÇWý³&°Öt-O ÞÚëWúÅ–Ÿ|Ò¸’ÂÚ î¢€Kãqc! ˜VXº¨?º×&?)ÅejY‡/5íª{uѽ;wÝhweYö ;u|Ü–¾[ší-RÕ[UÑèõº\Çü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'V—ˆ?¤ûFöö§³wÚ4ïüþ;^c’G¹R’¸ßøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN­/øjnmï‚GxƒvîÊ¿ÞLþAö Zi܉EÅÙœÇü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'U߈ô_… Ô|EñP·Òô}*=ÍÌÍ…E€êÌNQ’IM~}OÿŽø§qâGñæ‘ð×H?ãÕE‰’DŸþ -HÇÛAùA d„òÏeßó8ÕÄÓ¢Ò“:pø:¸”Ü‹ú·©÷Çü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'WÿÁ<¿oønø¢ñ¼=w 7‡.á·"w·&a"1àAs8(z°ê8ã'ݼs}¥x'XºðÁ´]JÚÆym Ò3À&Xا˜ªCÜ@ ‘œÖª…zx˜*”âú†7[.­,>"<³Vº~jëðfoü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'VF¯á?‹þðÜš·Š¼[ðMÓíáóç¹¹Ò%™ÚïÜ×!ð§âψ~:ëÁŒ?³ÇŠïíi­ô•¸»–  eŽô2@ük¢4ç(¹$ì·8HŨ¶®ÏFÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪂ɿájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ  ¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ  ¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òu2ãâf§wÅsð÷ÆŠQÕ®t¢‚úu3þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪾Œ69‡¾Ñ~ßËwðóà÷‰4«© [Vžt¯0B§+±¿%c€…ö®·þ¦­ÿDÿÆßø¥òuCÿ §ãý  ¿ðMÿÉT©øßÿC¯ü_ÿòU6Û Xªàšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*£»ø_ñ¾ÚÖY?á øT|´-ìkþp?ëî€-ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òu\ðÍÖ³¬øoO¼½—LŽk»hæ‘*¬Ê —Éš¼-µN÷øÿü]bÿÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òukj\i³¤zìq„”íYâÎÍÞŒ+šÑ cþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªïŒ¼i„ #·¸Ô5 Ö1ÚY[€e¸aׯ £»ä+ÎüOñ/ÇZW%Ñ.EÓ58,`Ô¦Óà𾱯Koo<“G É5˜»žÖpþìñŒd—»Mü1Õ¾‰]-_MZ^­.¦u*нI$¼ÝŽßþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“«ÏÇÄÏLbúȺ€Jÿ²ñ&@<Ž3ì#é[¿n~#üV´Ôeðf¿à—:Eçö}ì7~Ôìn-gòb›dÜ\¤ŠLSÂã+‚$VÄÑ©.XÍ7êˆ¥Š£ˆv¥5'äÓüŽþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“©²ü3øËå·“¬ü;߃·:-Þ3ïþ›TÿáY|tÿ ×ÃüÞÿòunn^ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê£ÿ Ëã§ý¾ÿàŽ÷ÿ“¨ÿ…eñÓþƒ_ ðG{ÿÉÔ{þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªü+/ŽŸôøcÿ‚;ßþN£þ—ÇOú |1ÿÁïÿ'PïøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þNª?ð¬¾:Ðkáþïù:øV_?è5ðÇÿw¿ü@¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¨ÿ²øéÿA¯†?ø#½ÿäê?áY|tÿ ×ÃüÞÿòu^ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê£ÿ Ëã§ý¾ÿàŽ÷ÿ“¨ÿ…eñÓþƒ_ ðG{ÿÉÔ{þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªü+/ŽŸôøcÿ‚;ßþN£þ—ÇOú |1ÿÁïÿ'PïøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þNª?ð¬¾:Ðkáþïù:­[ü4øÌ°¶ë_|Îåt[°¿­íIÿ SVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕÂøS⦯ãÏ?†ü ñsàµâ$.K±—íªWïfÔ Œ`çŽ+°¼ÔüsðÕßt3PÓúÝCFYìÿí5¼Œä¯©Hô4kþ¦­ÿDÿÆßø¥òu6_‰ºœØóþxÍñÓuÆ’qùßWKgy¡iö2$°Ìãu9WR25%rŸð²5ú'/ÿ¿ºGÿ'RÅñ3Sƒ>GÃÏÇž»n4‘ü¯«NhÖúÖ›§I©Z›Í^Iâ³_yàÿ\ Œ€SHÁëZôÌÂÔÕ¿èŸøÛÿ´¯þN¢ºz(“øÝñóáWÃ]K]Ñ4{­n{$Üa‡‰{Ë ûÆ4êÛ6;c$|ïðÿãÄZÝóë#¾ûF¯|€IrÃ(cê±Ã·!"Bާ’XüÕõœ’,JZV rkäÚŸös¶øw{uâ„/ö4îÓjZL<¶žäå®-uŒœ—ˆ}ÞY8Ê×Åñ†ˆ¥øI6¡«‡5Ý®ßqâfª½&«ÃX-×oïyùöô¹Ðx“ã-–›o3éwÚŸ™#¼¦;mNê(˳c…*å‰'©é]ßì‹ãÍWÆÿ ¼Ku,òj—Öz¼°Û-åä…3ö[y3+dMÒpØÉ8'ƒäŸ¿eüjøac¯x“Æþ(·¼¿žè4Vknˆ—2Æ›Û3`¢!åŽI5ôOÀ_ú_À_ ^i~Ôu]RûÖ¾’}BHž]æ(âÀ1F‹´,)Û9Ï5ÅÂù^eN½<^"KÙ8h“}RkOC,¿ë5êB»©µ}Ö·Zlp_³/í]âߟüG¡x¯áœþ·ð«›mFîãXûFËŸá…[ •ù÷+`)S’sî”È­ãähQ¦mòP ¶Éõ8P3è>¿A>€à¾$x–}#ÅðÅ÷ µF(’²K¸ÏsòŠ«Š#oç•Ü É#¹ã8ÜO éé]‹þXø·SK½JêöÞDˆCˆ] ÷”óóá<}áKoÝØE£^]ݵà‘Lr236… £“¸õ®J°šn] dÜnËö^=—DÖèè÷æ@$·QÄÌ{¨ìþýûúŽçÆý16¡£i¨Í‰ÔÌ#}¿Å‚ÃÐuÁÁ'ãü8ð,AyªÞàN<µÀ•ÕÃŒvP@ÉöÀîG®UCc S2K¡ñíeð[â?í}ûCZø[âEö'í&s<Ëy‘êiæJ‰<Þ[ªËb¼µ_¾Ïô}¯Âÿ…–þÿ…V5 6¢ÖÛšÀßÚE¿ÑüÝÆÓ~ò¾A/åíÇ–sþÕu»U”é‘Mq%ÊÙ®ÈQ€O¶dOÞ/>õòn®HÿðXy¤ºÓu‡vðZ¼3,›!KŸøF”ùm„³¾Íãh‘NX|¤7^j•i+]¶—Þ{¸xKEke¶’î¬lþ˳Žÿc¯Ú¢ûMø=¥Ûêžñ4Ñ˪(š(¾Í ºG瑃J#YI\n|)—!X}§ãùõúò›ÿEµq_³p©öòD×8I‘‘Ø0µÁŽŸ»n}«µñÇü‰zÇýyMÿ¢Ú½,¶)QºÙþ“šU•JÞþé%~öÛð>5ÿ‚¦~Ñç@ý¹þø3âlløm£ÙZkº¥‹¨’Úòy上)nbl¬©ÛFáX<Ænª¤x§í‰ûnÙüKÔ´×ømöí.çE¸C£ê2£C}¥L\He€±>HU!HBºd0(Ûkï?ÛÏþ ü¿µ}§‡¼Qà«-?ÆÞ´û4Fí [jV͇ò%#•Ãd«…›±5óÇ‚?à—ßþ$iÇÁ‡<ðþ{óy¨½ÚÞßÞÇ•c ª¢Ì–`̓€@?O9a°8̳<ÁÇÚÔ¦½Z3¨éÂ0”¦çˆŠQ—´¨””T³ÓXò¦~cšåy–/Z”~ 5(ÉZêÉ{¯]j÷ÿ3ß?hoÚŰÁ*ôŠÞMNßÅZŸ…µW´Ò?µÝCOóí-ÄÄ&ù’Y`]ì£÷£,¿xp?à©_t=fÏÃ>ø'á›?ØüLÒ¼«èÚ¯ŒËÚ-GNkë[˜/¡´!e* :˜ÜDñHœ¥ýañ/öqðçÄï‚v~¾ûf—áû ´ÉmÓOtŽHFŸuou)t`}¬jÃ*Xó_ðN/ |cño‰´Ð|Z¢]Mâ[§3]˜ X–ÙYÜ;V¤yEI}‹öcý²|KûFxkVŠ_‡Dñ‚,x“^»¹´}GÅ÷²(Iÿm°…`hÒÄVÑÀ-âT*äÃ+C÷¯T¢¾j4¹Ÿ~Vý­ú¿w—[د¤Ÿ³Z>gÓg*¶^RKÙYm{ÝÛu¶ø±â~ß×^ ðÅñƒÂ>ð:j¾ ƒìѰ¾Ôu;ÒšxYŠ—C^¢ÌŠ@"òÙÂãÈ4¯ÛëÅúV‘}«hZ øóRø©ñcSð7à [¨tk;km2Öh®g¼¿ò¤u·it]^ðJ#žFI¡HãnöO‡?;|×|ðû\ðV½ã R\·Ôoõ5ÑãInb6HŠ"I¢Io+K™Ÿ1!Êî“âü']ý™tßÃa|"´ð-þ•á­'Ä6bÛ_ØÎu=UtËx.®ÞÞ³K$mq3Ž%PÌô¿ˆßðLŸøƒà'…ü"muOZ|=ðn·áM#IÕ5qem­Á¨Ù­´‘_ÜÁndrƪ&…s0G ð_Ù×þ âox‹â©ûmj~%€ø‹Ãz&¢Ýˆ×%ñ•>&¡ ô:ƒXÚAlmî>Çä"[±so$×Gš@b’“²›ÑoµÞ’Õl¹¯ËnÒWeÕPQrŽíéÛâ†ýyyyî÷»Ñ·¢ú‡þ ùûpi·ŸÁÍ[Äþ¶Ñmçðö½sáÛöÑ5ØõÝæâŠC.Ÿ¨¤q‹»vIã"Clz²¦¼ÓPÿ‚¢kÚĸ?á#øC}gð¼üIo…³x»þ;wœjo|lmç‹Mï{F¸) ’4‰$nÇlRÆ •ì¾ý™5­3Áz.—㌿¼M}£øŠ6¯u6—ey~‘?³®ÆÂ^ÉðKÆ#1'2tÇ|'ÿ‚b\Ü|KÔ|CñÿÇž0ÔtX>'j_´¯Ú_Ú·†ÖäßK>Ÿu'ú^y‘‡Šv·ûAƒí$ØÄn:ÂÏm ’æó³§;´êYti]òêc+Æ„­¬ÛÓmU-ådÕ;¾Ïkèmx'þ Wmâø(eÏÀMoNð!ºž F[ Çvúίjl„,Ë«é1À¦y©1x³,»‚Þ[µóf…ÿÛÒ¿foƒŸ ´Om¦x›ÅøHñ_‰¯uŸZèúž£íÌÖÈ4{&ˆZð5´Ò< `UM˜³„¯¤þÁ*¼5ð[㎅ã_ üFø¡4~×µÝsHÐn®´çÒ¬¶¥–}BØ*؉¤ŽIæ–W™<¤U•Pº¼šOüßBø}ákÿ€?¾*ü7Õ¼=á›oÞßh—:dÏâ=6ÚY%¶Žú+Û à2D÷;&†8dâEÜAb ߥÌô_žÿv­'nÎÉé}f×%hÇwð¾Úÿ•Ú¾—i;n°ÿiïø*ˆ?go|NŸMøAâO‡ÿ¤°—Æ^%OÛÚÉmiskËÉedñ—ºšç$LЩ@ Hî|¡Ô|Cÿ‚Yx ŠòÂ+szŸ ¼o៱Kõ_í6Ö†Råv|µ‹ûe2Ÿ1o$ò»¾^Wâ'üëö‚øûñwTøÍãßé¿>!êzD·>Ðõ TÓ|QggaiÅ©‰lšâóÁ"8µ¸Íƒb9#å]¿Ž_ðJoüvøÉ¬x¯VñïÅOñ¿¢x«VðÖ©Ú[èúž«¤›aku:½«Ìã˲·‰áó|–«ùbTIT¦šŒy·¾¾JñíåtºÝëä7½:|›·Þµß¥­e½óüGÿ)ñFƒá/Š>+ƒàÞ¡yàÿ‡!“Âv—qøŽÝo¼S©.­œ#²¶h¤dÎy<±bXÚ[Æ«1ƒ(Ä:Æ-OðÇü_ÃVñ¤|mñÇ>%ø©èº†µâ}jâÅu9ÓH¹ŠâÂÒ4µ´†ÖxÞ7ÊG–71mï¸gIOÙûïÞåÎZ9=<î»[¥õ*N £q^ï;·øo¢iÿwçÌûhyçÀø,ÿƒÿhÛyþøkOÐÀºÖuÏØËŠ-îuè¯4ƒ(¹“QÑV1%¤¦Ú"s,†M©º8¼ÅÏ­~Ô¿µÏ‰¾ücðGÃOÙçáâ|Cøã?RÖ¡†ÿ]] HÒôë¶K‹‹»ß"â@L—Ö±GVò–i>mŠ T¿?aûoÙÿâö­¯|+øñOðŽ³«ßëóø ¦Ó§ðò_^—’æXšK&¾‰^yd¹òRéb»NÊÄñÏüžÇƾ¿Ó>,|^Ðü{ðåu+m3Æöڕιsg ’æÊð]ÙMks1ÛmnY>Ë V1m‘§}]½ï[?–öÿ·|ô3_M­w˽’éç{wÚ]ã«âþ)ÁQµß†~"ñÅóü&šûáçÁíKNÑ~"x2ÁZ,>|OðO‰¼LšÎ“áïíø" ÚKÍß5Í7U²Ótë{U*¹¸žQ9 *¢Êí#mFu÷ŸÚãgŽ´o üÐt‹koüDø£âÍ.ÃP¶µš=^ÚŸSÕ¢I ¬ªlì.­-q%ÌL¡Nä(|/“à÷„.<3ðºûãoü ²ø˜ø‚¾×Åõ[ØæÓ Ãk%Õ›¤n'i[ÊÜÑÄ îïþ ƒ3þÛš÷Á+xZסÓ5{ÍßCø…o©jï=„QH-õ}5-ƒi?hƒ'áNðŒB-þ EáâÆ—â OüSþÀðÿî>!hÞ:­¯ö—«\É<·.‰ö_´I²ÝÜIåK;¬m+y^X8¥øCÿªð×Á_ŽZ¼'ñâ„Ñø_^×uÍ#AººÓŸJ±þÚ–Yõ `«b&’9'˜HY^dò‘VUBêóM?fã'fÜýaM'ò’“²ÒÝ.ìâ£N§ÓNš+ˆdG–sý¨’`l¥ÁWxÙp¾(Á@¾$|Xø¡ð¾OƒÞ¸ðÏÂëï¿ð‚Ëâcâû\[Ômoc›L0 ¬—Vn‘¸¥o+sG+»×þÿÁ*¾ü,ðwÄ­Àíâ+oŠ~5ƒÇ:¬‚î&–Öêèoãµµ&""³»ˆHb>Ñ>s´ø%„tO‹_ˆ-<ñOûÃþ7¸ø…£x8ê¶¿Ø:^­s$òܺ'Ù~Ñ$rËwq'•,î±´­åy`â­Jõ©Ë–ÑN-¯û}I§ÞѼWGmov?RÝ©$úëïÒò´»Çdî®õ~5þÕçÃïÚKÇCE‘çðWÁ…—^/ñ&ž"µ¯î¥‘ì"[’Œñ Ñõ"ʼ¶ÂÌ  oÿj»øuÿ T¿µ·ÂmkáÜWÃ{ߊš4vÚÝ®µu«if%º‚hâ–·È×ÃÊK Aü®Ð|Iû#ë÷?iKHoôGÆ?›U{&™Þ;;HßJMÓí¤b¬Ê‹¼O&‡™,̠眆ŸðJß Cá­r/ÚOÅþ>øµ}âo·ÃÉÛÄÚ…³ 'E˜sefÖV¶Ç÷ޱ–¹—̸"Éò Šwmóì ­µù¤ª6¯Þ2p]¹SÝÚ÷7á¦òw¶Ö‹¤½m(ûGÝ·öWÃÇüKÿ‚³ø£öyðŒÛöšø2Þñ^…á‹_i}ŠTÓµ .kè,e–òý-ìMg-Ì2]íŠxâ…¼ÈäœGTÿ‚‚|VÖ¾"þÎÚÂ/|)ñV—ñŠËY½ÕnôψO}ai—–É&¨Çbí rÉ…K òm.{/ÿÁ8ÂÞ³7ÆŒ:¿Ä KF´ðæŸãMB]]_@Ó-îàZZƺbÙ²Ë"æi'¶šYF79Ú…cøÿ»ð—­;áü+¿x÷IÕþkÚ·ˆ#Õa—O3ëòêÓ´úœ7е™¶ÜHä•¶†BÑb®V’¶Îÿ«·þJÓ—÷“åM3 Iyÿû1¿þL¥Ë§Âýë4|ãÿõý§þ7xÁ^ñgÄ‹}{Ä>1ø§¢x«Äzo†.‘ª=Œ¶ÆÞÜHtÕm/cݵª,,èR1,¦F?'³ü ÿ‚¶éŸ´Àÿü@ø'á°xoáþ›o§¨xïY_ XÙk¤ÿ¦isÏ ˆ>¦?´]$aœ$BV ·¼Ñ¿àœ¾ðŸÃoøsÀ~-ñï‡ßÀÞÖ¼7£êÖ7–‹¨ÚŪ¼O<áÞÙ“ÏŒÀ†'òJ±Áßü7áƒá=[@ø¨øÃávƒª`ÞeøfæÑlmµmê;›=e`ºµ™^ýŒG<’o[…E2£È« ˆ¹6Ô•–‰[¦÷zï¦ÊúÊÚÆ)ߢ\Ž1³Öî÷믗çm#Í£|¶¥ðëþ àÿÿg¿ëß< £xŸÇ~;ñÝÿÃÝ'HÓ¼aþ¸¾²Šêæ{µ×V؇±û-”Ó,ÉlÒ6Q;‰ ðöøø“á?‚úö«ñ#Á¿Œ|mâŽ:Ï€´¯ Å­Ú©ÒLï Bð¢Æöð­³39Äl͆e·mÿ›ðöŸàq§é_þ.[x‚ÏÇ3|DÒ|R/tÖÕô}^âÙí¯-ÖÞX®{­ðÏ ¨>ÐËV5N»áü§Áß|/ éšoˆ¼q­>ƒã˯ˆÂûWÔ¢º¼¾Õ.a¸Š_´Käñw+mX¸m£m=Tî¶j)ÿàTœ­òU,Ú¾ªÖ»FR|ÑjÛ95ÿ€ÕPæùÊÒvÑ·ªLòÿðUoüNø‰à­3âWÁ;è>'ñ®­ðÒëYÿ„® @Aâ-:;ù%KX{›þ̸Au'Ùäó0>ϳ÷•ÏZÁTüiá_š ç€~k߯ì¾Åñ/\Õoõë ʱYnRT—ʶ×n¶²4QÅ Ç# Ð*ï>û¡Á?¼áÿøF>Ç©x•ÿáø‘«|P³ßsó5=GûGÏŠLB3l¿Ú×;mq²<ÈØmÕ<ÿåð?‚~j^Òµ_Icª|<ᤲKune]5턪D ŒßÍ– §ÊŸ'w=G[•8Zúß³|š/Oi§~TµêtÓTy¤¤ß-ãnöö7ëì¬ûstÙ(ü{ûGë¾7øëðCÃÿ® Zx«FÔü{¬Ç4(î‘oe6öo#£v–ûUÓä£vÛI‡MÀó_ðN?Û§Ç_µ_Ã?Þ~Ñ^ðï„ußiηj4]mïížÛO»±µÜRHQ¢gkóòo}¢w3l~‡ðöW?>4ø‡Ä×Z¿²o h^ ðôÅ¥±ÓtØçrÓ3K=ÜÅÊ ÅŒ ?²ßì þÊRèËá_xÏ_²ðž±§èVšÌÖrG£ØêWVWRÚFðZÅ$‘Ç.Ÿ¦y$Y»›:17»ö=úöçéçÉdï}Sµ´9ðº¨ýc¤zwäëä§{5gk_Eeó×íÙÿ øûû(~ÒV¾ð…< ®i't>ôË׸¾Á<†ÙvÌŽÁHd26`Ú¾ o?ÂÛøµý•ÿ 3ØÔ—L㳎r¹dˆ;»mRvä±Î3Æp-x“áþ‡ã oDÔ¼Q¦Y__ørå¯4ÉæŒ3ÙLÑ´lè{ŽÃò=T£ª‘ý™sÏü²oäiˆùÇâg‹ÿáý”|AªÛmi´¯ ÜÝ"’9hìÙ€üÖ¸?þÖvßî^çLÔ-õ 4Ü‹°_Ìë!grÛ\•,d9;aHdl*¼bºßxq>"ü¿ðÜ÷&Ñ5ÝM5§ ¼Â&·1–Û‘œnÎ23޵‡ðönðŸÂ Eu;n5ŸËý³ªÈ·ˆ¾V*Çl¤9R HÃ…]ûˆÍ|Žw–f¸ÌÂLUNš‹ç“Õï¢QÚW»¿3Kmö<,} u\Jú³J6^ó{4Ýì–­ê¢í«ïêñœ>Ùêr麶Œº­°—ì:­¿Ù¯msü3E“±Ç¦MlhÓµÎi$œ´£©Pk›[¹ui>ͦeä~‡Ýˆw$ÿJê­ ¶ñÅÝB ¯¬‚qŠRw}Ïjš”`”ݵ{_ÎÄ¿ ü7§ñ]Õõ5ˆŠÆÛpÏ–žZÈÄ}ZNÝ•óoüâÆ±ðïãî¡¡x#VºðõßÄóðÿÀÒêö¸:dú·ˆc–kwÏáxmï®á2‚KHäº1ÅrÿðŒheJö+ Á[îÁè~iøÓû*|oý¤ÿgÉþþÐâÏÆZd¶ÒZ&·¨|8Ñ^´,»‚qâ³Ãzˆçlél 7;;WÓ_±ÿíSáä>>> Ðu/Ùê¾ µ›J¶Ô.-f¸{H4-&Ä;ý–Y#\Éc0Û¸3€Ï™›×Ž%áÿÚåZJR½ãRÑ\¶Oš¢‹÷»[MW ÅRäÆÁRöw§^.<ÏÚÓv]ÚW}ì›¶Œ‹ö$ý¥“mewª›Û‹¶·vŠyûD>XùòÀWE¦~ÇÚO‡<9áË_øŸÅš6©á”½ŠßX¶šØÞ\Gy)šâ9–HV“kÝ‚¥©9©'ì?á› -?ÀÚߊ¼3i&ý…©&Ÿu :Í®ù$?h3DäHZiÏ›ÇýóŒàŒšÛ믧[|¶¿]ìíü¿]_罺w1!6ÇTÕãÒíá³²¹*°¤Ì¾Sº4Ž ¼òK(1|Yý‹u_øê]/᥋è^ ¾¸Ó$ºòüS*Xȶ¾B—}4[å¦@"Qçùm¶7q¹F=KRý”t–Õ`Õ<)âx{\¶Ôu B=JÆks./¤ón-Ù%…âxK„* )E!³œÓ¶ñó_úM¿ü…ÒÏ{§åkJÿ=WϦ‡}à?[|Bð>¯èÉ4všÝŒ7ð$ÊDIcWPÀ††FO5­Ut[Ò4{K[‹»›ù-¡Hšæä©šàª€^MŠ«¹±“µ@É8qV²=iÊ×vØQ½•÷ (Èõ£#Ö¤aE´dzÐE´dzÐ_:ÁY¯üA§Á>¾#IðÕõ(õiLöûBÙ›˜…áLr?ÑŒù>™¯¢ò=j+ÛH¯íž¥WÆ<ƒ@•?·F±û8xOö"Òõ/Ù^ÇÁ:ŠôÉ,¦ð.­¢Ok~³&ÖÞŸ¼oâ2™I’ØlWê?‡|ÍkÂÛÂ)f¸¶O?n 3±íœ×†øÇþ oð+Åš>¿n~øBÊ_ÚËiqsg¦Cop‹ ùš9A³‚pA×1ÿúýŸ|mûü8ñ‚þ/xêxbÊÿo‚m¶Ô,l¶’a™óƒóµ’0Eð–ŠörìÝÙlWY§Ú›[e„°M™_• &€'¢Š(_[N…fÒ.ÿÂcQÿäzöª(ó爬ü5â땟Å>Öµ•v,—¾‘Õsœm³Œ“ÅfÿÂàm»áÔöÿwþëü~_f¯¥h¨tâõhµRkDÙóç‡lü5á–ŸÂÞÖ´év4–þ¾Ùzà•¶Î2Õ­sã [Ëy!»Ñ¼W,R©GGð¾¢ÊêF Ûòí^ÛERJ:$K“–­ž¾#Ó‘B¦â`Àš†þKÒÿÂM§ÿÐÄÿøJêü^ãE1ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=#øNu*ú‰ˆ# j?ù/^åExBêº:¨ ᯀ8xJÿü–¥þ×Òè[ñþWÿü^íEx•¿Œ--#Ùk¢ø®5“Âúˆ¥½?þ˜èâïü&5þG¯j¢€&°#Añ9þ¥]Cÿ‘é¿Ûúgý Þ%ÿÂOPÿäz÷:(Ã?·ôÏú¼Kÿ„ž¡ÿÈôoéŸô/x—ÿ =Cÿ‘ëÜè  þßÓ?è^ñ/þz‡ÿ#Ñý¿¦нâ_ü$õþG¯s¢€<3ûLÿ¡{Ä¿øIêüGöþ™ÿB÷‰ð“Ô?ù½ÎŠðÏíý3þ…ïÿá'¨ò=Ûúgý Þ%ÿÂOPÿäz÷:(Ã?·ôÏú¼Kÿ„ž¡ÿÈôoéŸô/x—ÿ =Cÿ‘ëÜè  þßÓ?è^ñ/þz‡ÿ#Ñý¿¦нâ_ü$õþG¯s¢€<3ûLÿ¡{Ä¿øIêüN_éè0º‰ÀôÔ?ù½ÆŠðÿøIì?èâü%uþG¥ƒÅvV¬M¶‡â˜ÉêWÂÚˆ'ò·¯o¢€hìlí’K™ä PC:šú*¼/þ MñÏÄ¿³oìiâ¯| ¹°´ñ‘s¥¥´·Ð™­ÕfÔí ”:€N SH2#9+åßþÀŸÿkƒö¿¡ý¨>>|3ñ‡‰"m[KŠ BÜé ëæDÓh-¬g*VßÏ‘Ñk6ìªü/â_ø.ůh8ý’?à©¿L_`ñ—á±âÏD±A=Êjv“#Ý["¤±ªÈ“ÃòèL@ÔTn0n;ØéÁS…\E8Uø\’vÞÍëo‘úõûÁE|û^Û®‘: üA¶·óï|5{:¼®€ ÓÙÊ>[¨#,¸tÈ$d€~„¯ÈOØ7öSø‡âߌ?> ŦÚxÁMâ{»ùu­#P…ÛCû:ê1,:„$£Ç(ÄP‘XÈû¼ vWëÝe…•YS^Þ6‘ßžÑËèb䲺®t]šrVkº~ú ¢Š+ ñŠ( Š( Š( Šãþ5þоýšü+o®þÑž8ð€4K»µ°ƒPñ&³m¥ZÍpÈî°¤·ˆÒŠVHŽ0§ ~,xWã,|SðSÄÞñ‡†uO3ìZ¾‰¨Ã¨X]ùr4RyW³FûdŽD;IÃ#È"€: +åø)‡ü?à—ü‡EÑ%ý¨õ]^mgÄ‹$šf…¡Ù ÍJî(È.ÖtŽ8Ã0]ÒH›ŽBîÚØùgEÿƒºÿfÝwà‰¾#Yø'ãzèžñ“Ỹ_GÒÅÔ—•¶§qÆ£SÚcTÑ®ƒ’ÊAx°¬ ýN¢¼ö ýµ¼+ÿý“¼)ñेˆ4¿ øÃíŸbµÖà† ø¾Íy=œžjC,±ŒÉm!dl©Rpr°PEPEPEàÞÿ‚‡x+âí3?­KñD^!ƒP½ÓZâkhÈÉh²´„8œ¾Ò }§fNF@çóEPEÇü|øÙ¥~ο µoxÚßPºÓ4'ΊÆ4yÛÍš8Wj»¢ŸšU',8¯BØQ^mû.þÔ^ý­|yâ?‡6zÅ•– úk¦¥qÊdHâ#‘ÆÜL¼ç9_I Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Í2[Äò\2¢ ,ÌÇ@êI¯æãöý¶¯Wþ U7‰~èÖ“ëú´¾!Ê "ÕíµC 9-Ù×HdMÐKÙ\×î·üâ$Ÿ?c?.—v¶:—‰¡‹Ã3îÚÐM¨Ê–~rŸX–w˜ú‰í_ÌÂ}bããïí9ãéÐ:éÞ'ÖgŸM‰ÉO*Á[Ë´‰O¢[G Œá Þ/Ùþ uñoƺmŒz÷…´ïˆöÒ ËC4:.²y)¸ýŽèõlóŽjü¶ý¿ írÕù_û4é“èÙÚys[ÝÞÚÃwua(k…»Ž4™£’7’hÓ-ÉKøbÔl×~ÿðg“öý”þ"x Og7Þ*ðíÄšYóLÁoÒ2ö—q9‘É)p‘0”It¹^.˜ü¢ŒOÐJ+…ý˜~0ÅûAþÎ>ñͦÕ_è6Z«¢ÿË'šwOb¬Ì¤z©®ê€?üAÿIþÑzüsÇ?|#ðÀtÇ> ðn…¥hÖ·¶šö¯%´÷vÖîå¼x#̱[¼ò6ˆÄÄà¯_ðgþkøãðþ %¦üÿ‚À|ð—ÃXµ»Ûkµh’Ì%Ñ>Ô@·¹–F¹¸†òÜ–PòBÉ´oa’…çÂïÚŸBýŠ?àéˆþ(Ùj7¾ð·Åÿ>«öGºšÒÖiµKyn„H 2À“4í´&#¥t?ðXÏšüŸþ YðÿJÿ‚|&§â+ ½'Kð}–¦4ù­MÛ%ÕÍÌ÷¦)UeŽRí·<Ф-»61‚@?pà¸?ð] Áü  Z§‡ÛÆßüd’Ë£èŸjû-½¼¯uw(VesTUÝ!V¨VaðÏÄOø8göùý•>xgãí}û*ø Oø9â‰`6—6²ÜÙÞ²L»â¹½¸{Vt)žÙ8ÀɼÏþWýük{ñÓá¯ÆýK¿Ô< †ÂzÜ´‘iq^\ÜFg#ýX™ov« BFs´Ïø-ÇüMû>þÝ_ðGû†¿.5k¿ˆ^?:GÛôIt‰í×Âßfº‚î]÷ †_šÛÉ_%äÈ“'4÷wí!ÿü=økÿ‡Ðÿjoƒ>½ñ7ü%š¬~Ó|=y8µ’ÇW+3Ëo{"ر%´Ï•ÌQ6‰/Ï??à­?ðT?Š t/‰¾ý¾xΈlbÕ´Ïìëã£{g*‰#‘#mUæù‘”‚m¹9¯ý”gŸ„¿±ü‡£èð[oøÏLðƯ‰­ªi°éÖ¬5 O6Ÿþ‡tPð“•q&HvÝ*´d;ñŸíãÏÙóö-ø8úÿüûöèøýsâ» ¨³¼ú^©¦Dñ4«æù·b;ku …Ü-Õ۷ ¸}…ÿi|søýñkö/øuñáv—àσž&´ðÿ‰µIîçι¡xÊ{TÍ¢H:Hb†ÕØ–k5ýâd÷c ÿƒx¾>þßzì­û?øcàOÁ…ú×ìÀþ ’ÞçÅ÷·ð¦³—.»puIÄGWüÈ]ïB²DI„“9|Ïø-/Œ~/~Öðk7ìýñ öœÒï¤ñ¼^.ÓõŸNÖ~CýëÙÚÞͨùéq`䀫ºà` ^ùÿ´ÁT~Ïû üý™fñŒÐ|k‚MyÃï£ß¸nÔuMév°›`«ù¥S”+Œàʯø:sÇ?I0§½à¢_ðPÏÛölÿ‚yM®ÁTÿdÿÙe,ìüw hž Ðu½hÒ$šn¹%ÔÂÖ-^àC<ÒÊ8ß1á.gP?'Ìÿðz·ü¥7À?öJ´ïý;ë÷ÿü­ÿ(²ðý•];ÿMÅmü ý¼?h'ÿƒyþ|}ÿ‚zü*ø ¥ëšoöÍþ·à+·–š:iðj×ÐÉ&‘ik}ŠUòMÄ‘³?š^f\6þÿˆÙ>.Ã!ÿÁB¼?àoëž.Û¢h^Óo,å²ÓÙs—¿j»œù²ä8vìB»²ÌU=×ãÇõï‡? u]cᇇeñf½m䥦—”k–’hã' Wg>Èr@ä|Ñðïþ #àÏðK3ûM|Ò†¿mg¬Ÿ‡_P×]ûÜÁm=œÓßkFn†ÙûÄØÀà7ñçü{ŵçü‹^ñ÷ÂûÀ’Ùø¹|;¨‹MPÞK ¶Žf˜N±Dc $ðÄ@3ó|Ø’ÇPŽ!a\¿xÕíg·{íÓ¹ïÒá|ζO<þo„„ý›Ÿ4t“åå¿6ÒZ¨Û]÷:¶·í3ðCïâ_Š |'§xff‘f3x_:i"XȉAó$PWŸ±¿à—>¹ø…ÿóø™ iï[ÔuM>'^]6Ú59íË ë<ž ÿ‚|RøÿñkQ°ý—þézöƒ¥ƒ<‘\ÌÑÞ=¸liŒ«LÝ“kž nÁ¯ý‰üT|wÿ[¶×ÎãN:ι®ßK‰m|Ûk×òßý¥Ýƒî _ÿ‚fþÓ~ý޼qãÝ+ö‚ûn‡&£ïk9%x'¶iƒ@èŠYY¼îãNH¬ï؃ÄãÆÿðU;-i-f°]_Z×/E´É²K2Öñü¶^Ì»°G¨ ¤¿à¡ßðPïþÉ_t¿|9Òü/{c{¢E©;êVÓÉ(‘縌€cÜB¼c9'ŸN_âçüâ¯ÁŸh—þ=øc¥èþñfóM‚îw:…Õ°+’eI Føu%,ÃŽçËÿà¶òu:ýŠ–ÿúYy]÷ü>%…>,JTjªûjü`ÿ‚¢|QðŽ‹¥xÓà tÛ†úåɃL¼ÕÝžîÿŽO•(òKb2Œ Àf½{ã×íEeâÿø'MçÄïø{BÖm¯­¬åþÈ×í~Ûdd7ÐÁ$rÇ•ó<·ÞTä|È­ŽÕ៷Ìkü³à B‚t3Àît‹‚SNÿœŸúhÒb¿ÚVï_ý…þ#øãBðŸü1}á‰u9íì4-,ÙióÉo§Ã:¼Ñ,„³B± UQÆ3^qð;þ ‡ñ—ã~—â+Oü:ð÷ˆµÝ6ï!k–ÞÚÎßæ´âK‚eb| ˆŒ¤üÿ{S`/ùEwÆ¿ûŽÿé¢ oü¶%wø¢Ì °RƒŽÇí¹ ü¨׿àž_ðP‹ßÚïVÖtˆ:NŸ¦kú]°¾ôýâÞæ áä‘™‘•ž?â ïíŽ~¦¯Ëßø"üN¿ÿb¥Çþ–Y×êQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyWíyû(i?µ÷ë=ź枚eÜ·öþ\i-½Ä¯euhê&¤‡mã±XÞ7*•Í~4üjøAð þ %ûSÇðÇã`ÔôÛk"ÃYÓï&¯&£mwwyh‰m¦Ï›•xšÂF‘×;UÓrBþõ× ñÓö^øoûNé6Ö?´W€ü!ã‹{•lÆ·¤Ázö>j…‘­ÞE-0UËÆU¾U9ÈüþøñãÅôå¿àŸŸ²?Åí]-£¿ñ"îhóã€ñC0–æe?ìÄ=~Zùsã/ü3ö£ñWíñãWůèßð™xÓX¿•à«èo­¬`[X`XcºûMŽ« ˜€–òžxŸpÌ rè˜ÿ‚Tøƒöu¹¾ºÿ‚nüløƒð²Âè ¾Õ®Sľ‰]Ïm¡ÓÚ‡b±J’TòwÇÿÚ¿ãÏÂ|Eø•ã‹:‡‰|OðgǰøZßMðíŠhþÔ,-¬dº¹{Ý>S/Ú&¹š‹BæeíG‹Ë ‚óïÀ8~Ëys¤]Ú-¥æŸyæj:CŸÓî—’÷VQÚ£C0äùóé6r÷çï×é7ìÚ¼E§ÝÂâhî¦óPâDšNì%ódY_±o>òAŒPqU¾*~׿ h-í¾=~ÉüE¨F¥ûWàô·ÏdË‚V;À5 ž)v¶ F f¼¾ËPøƒðÛÅjÿðMß…?'½wó„þ%hñZèSF0YcÕï/öÄ€Ðíu@Uƒ€>œÿ‚AËçÁ?<V9£U¿ÖãA*íb‰­_*vRª»ÙÅ}-^_ûü#¼øû%ü=ð·Š4Û]#]Ót;wÖí-®Úîµ9Wξòæn]MÔ³°< €£z…~þÅ_ðE¿Ú;á‡ü¡¯üyø«ðÊ;_ƒz—|m«jM{J¸Iìu+}Z;Wk4ºkŒJnà [—Ìù€Øý¢øIû&|+ø¯ßêß>ü?ðN©ª©[ÛÍözmÅà'$K$«8Èæ'‘^EVÖ4{OéW:ý­µõ•äm ö÷,±NŒ0UÑ ¤pA5åž ý€>ü8ñ”~#øyðOáƒâdó£Õ4ïéÖ·¨ùÎám3GyœÉ3ZÚ´&8 ŽÌÎQT³1'$Ôãöø&>‡cà÷ÂÏøWæ÷ûDøgþKìµÏ±y>O›þÞÝÞõêtP˜xö%ø1ð»Á:φ¾|"øaáÏxŽH¥Õ´­/ÂÖ6vZ£ÄÁ¢kˆ"ˆ$Å¥Á*FF+ªðGÁŸü2ð½Ö‡ðßžðþ‹}#Ms§éºd–·ʨÎñFYŠ¢)$BÐ éh¨öqrç¶½ú ^4^T~Í»¸Ýòß½¶¿™ÈZ~Ͼ°Ñ/´ËxB7SÛöËHôku‚ïk_60›_ ªÃp8 ¢µüðóÃÿ 4©,>èz?‡ìe”Îöúm”v‘<„*—)€X…Qœg jØ¢¬ç9Ícà÷„|Câxõ½ÂÞ¾Ö¢ ¥ýÆ› ·HGLJÊXcsQiŸü¢øÍ¼G£xCÂöž!ydµHt¨#½i$ $s8Måœ;î9ÉÜsœšê( _Æßüñ/UŽÿâ?„ðþ§¢iž_Øôë½:­-<´(ž\,¥j£`¦ð¯ü ð‹Â3áÿøF?èýØ?Öy¿ñï·ËÿYóýß½Ï^k ¢€9ÿü&ð¯„ü+{¡x[Ã>Ó4MOÌûfi§C ¥ß˜Ì…T#î@ä€âü&ð¯Âïµ³ðχü;öíŸiþÌÓ¡´ûFÍÛ7ùJ7mÞøÎq¸ã©®‚Šåüð?Á_ 5Y/þøCÂþ¾–#ÜiºT’¼d«/T•SŒã*jê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óícöJøUâ(õ¥ñÃ/‡×ËâK–¼ÕÅLJlå¬í¿t·;£>sŸ:\³äŸ1ùùŽ}ЇNÓ­ô}> M&mmmcXa† (£ ª£…P5PEPEPEPEPEPEPEòçÄ|}ƒÇºÚx:li ¨N¶#fÄFòþøÝ÷výî}y ¨è¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þèß³µñgQñíÚ|w—~4÷hFÛ1ûÿ2=¿êïºdëÇãŠ÷J+È¿jWâ>™ýƒÿ ý&ÍÿhûËjs+Ëÿï'Ýü{W‘ÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+Îf;ÿê>»Žï¿Wƒ¬'ÜyqíÿQòýã'^ W|w×þ5Ù|VÕbøI.ß/“öA¶Àã÷(_ýhß÷÷õü8Å}E|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ôoÙZø³¨øöí>;Ë¿H{´#m˜ýÿ™ßõwÝ2uãñÅ{¥ä_µN«ñLþÁÿ†~“fÿ´}¿åµ9Ç•åÿÇÀ÷“îþ=«È¿á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWœþÌwþ5Ô|vÿß~®5XN ¸òãÛþ£åûÆN¼þ¯:øï¯ük²ø­ªÅð’]¾_'ìƒmÇîP¿úÑ¿ïïëøqŠú.ŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…}ð"ëÄ—¿ t©~-¶ï·ö³ˆ†|á?Õ|ŸsgOÇœÐ]EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\>­ÿ![ŸúêÿÌ×q\>­ÿ![ŸúêÿÌÐz(¢€ ØðWü…dÿ®Gù­cÖÇ‚¿ä+'ýr?ÍhÇŽ¿å×þÿ²×?]Ž¿å×þÿ²×?@Q@Q@Q@Q@Q@G‚¿ä'ýu?ÉkÅ?òŸþÿ ŠØðWü‚¤ÿ®§ù-cø§þCÓÿÀô@ôQEQEQEQEQEQEQE±à¯ù Éÿ\óZÇ­ÈVOúäšÐ˯üÿe®~º˯üÿe®~€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€:È*Oúê’Ö?Šä=?üÿA±à¯ùIÿ]OòZÇñOü‡§ÿ€ÿè"€3袊(¢Š+°ð·ü€ ÿèF¸úì<-ÿ (?à_ú  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ó/Š>-‡À>ñ¹©E,öú<²Ç7ºÆ¬ä.H!{šôÚòo޹ñç€|[¡é wzÅÝ”/1"5yÑK ,3€Oµ)^Îî®qvµW‡u ï[YC~÷>:ó<ˆ¶(m<Æu¹¾FWW?2?¥t‰ñú¿‡5CÁ΋â¢[¼÷Yjví³ Ì¹p‘çiœªŒ®3Ä?³Px¢ËZø},Z”šÜzµü— ]# iq @¸æ[†”©Àfw$ôÈh?²çŒf´×ÅSèâÿSðu߇Zãûfî÷íW2”+)I!T·‡*äGü»º7g{ÝzþW_ŽŸ’˜ëkù~zþžÝ7ÄïZø‚ "û^Ñ`Ö.XGƒßD.]ʆ #ݸœ2œЃÜWkà¯ù Éÿ\óZñ _à Þ¢þ"™FöÍWÄ:F­o;æG  ²¬Û2ý} d~ðdÍoðWü…dÿ®Gù­?®Ëþä(¶÷E˯üÿe¯*ñoÇ]'Áßô/êPÞ=€ÛÚßå,¬OSª€’¦½WÇ_òëÿÿÙkç/~ÌçŽukoâiì5½Nö &Þ¬bxk/<¼PD›Ýü¶÷„ ÝÅñ+í×ÓüúüŠ ¶ý=Èö ¼I§[ùþ}ý’}–t¶›tê<™_fÈÛŸ•ÛÌ y;×ErÞý¢¼âMQÔ“Ä:=¦•w%¥Ó]_ÀžK,ϳaÈUÆÅ #rqÚ¹/|"ñ–«âm^=-<3ý¯ëºV¹s<·“‹‹²ý“̉#•|ýrË÷°@ê*þ+Ò5k;*×Ãiáï_kvK{,K¨ÇvnK$ø¼™"û@ØÃÌ…ëI_¯õ·ù¿¸Wºþ¼ÿàz\öM?WµÖ4¨¯´kˆ/,î#C4 #™Èd`pÀŽ„WŸü+ý¤mþ&êz=´þ×tTñŒº†•qvmä†ö(ÊÁŠVdaæ!ÃÁ­Ïƒ^»ø{ðí4Íi¬~Ù-ÍÝä±Ù‚-­ÚââIŒQn”O7h$ œ àyÇÃÙcXøa†¥Óu+{›˜´wÑu„¸¼žeµWËôבI…ƒmÌAQ÷J䚦ôÿ‡³ýl¯°oýtºý.ìzΑñ/Þ ¸ÔbÐuýö]?oH/b‘¬±œù¡XìÆÖÎìt>•Z/ŒžŸÃÇWƒÅ>}(J`7‹©BmÄw”ó7mÜÆsŽzWø?öYÖôo ͤø‡Lðþ¥öm] ‰¼A¨:ÞFÍËäù`Z+·6Æ«co˯¾øÛÃÑø\j¶ºwˆ.×Å‚òÚÒêíîb´tÛ„ÍÍòÚ+±Ê»ÄJ“î=Còôüíùkoé´¯nÿ•ÿ=bÔþ,x[Eðýž­¬ø“A´Òõ¥ä×ñGÉÿ¦rÚÝBzTž øá¿ ÞÁmâŸhšmÅÎà WWÑBòï$&Õfî*Àc®¥y>“û=ø£Á×–ZÆ‹…µ}JXuXnôËÉå‡O´7× 96ì!veM»(»ÔŸ»Ò¬·ì¹w‚u(ͤ^Íqà[_ Y\Ü! “Ä·!¤?+Œ™a#icòtùFUݯoë]?¯Ÿßõ÷­=éÎ)ÿ³ßÀ=cáv·¦7Š-tÉWDÒ_I‚þ-jîæI´Dmµ–1º·””3ဠÆiÇ]ÿ¯ënïq6ÿ¯ëþú3Á_ò “þºŸäµâÙ-jå¤!UB’IÀh­ŸÈ*Oúê’ÖŽìST½¿¶¹Ü#¹Ê}§ €ÇšRºNÛ”­}O.ðoí7Že°¼Ñ|âSá½ZfŠÏXa— ±+B%óc‰¶®ÉÈ*HŠÒøiñïÃ_|©i«éó :=JþÌê<º\lÏŸƒò’À ÈøaáøEÑ<5¨Çá+Elޤ—3‹«›XФxµò¶$˜ ¸ù¬½H‡;ìݯè~ðí§‚îô-3YÑü!y¡Ér‘’u/ÙJ¸ýßÌ› ˜–a\¤“Mé{jºwÙÿÀþ·y’þ·ÿ#Ô4ÏŠ~Ö¼?6­£øBºÒ­äËy üOo’V6ÐIJŒŸ˜zÓSâÏ…¤ð£ëÑø“Am7ò›PñU|ãi—vÜäŒç‘^I ~Ìzô–Þ%ÿ„†="%ñÞ‰1·—W»Õw¥•×›75Ä@±xÀUP¡8 €92|Uøo{ðû_ŸÅšbX̱x¡uk;ewsôÔµc2ZÁ#ÆêÉ#«„eÉ[èÿ¯/óp+·ývg«j?¼+¤xv×WÕ|M [i7í²Úö]B·¸nrBÛXðzÐúV½þ·g¥i}ª]ÚÛY*†k‰eTˆ€ rqƒ‘ù×ξø âø3ÂzãZÅüjÐÝé7ÖŒ;ËÖ^7Š7‘>P Å"ò¬Ã.+ÚtŸ‡Vq|·ð¯‰ìíÖÁ4¦ÜÛ[I$Ѥb-Œ‘»ìà7pZM´›koø?×Ì­’¾Í½SźV‡ö¿í­OO³ûêëϹHþÍ ,’n?*Œ”úTZ7Ž´OéÖWžÖ4»ëMJF†Òk{¤’;§PÅ’6RC°ä’6·¡¯øyð#Ä>)ø¡âk?Æž¡a«:걘EÄNŸfµ¹P hãÞà VI\y¼> ø²ÖA¯XÛøe5×ñQñikw*Y*dcÆB˜_ʱ#Ëz;]?ÍýÞh—{][ÿÀûüKÔþ#ø{D€K¬ëÚ-¤LÒ y¯bKFâ9KuW!Xvbæ°¾7|l´ø3¥iq¥Õþµx,ìà¸Ô"±‰ŽÆvy&”áUqœ™‘q–Ìü=ø©Yx‡@Ô¾$CáÛÙtæ×.'Ž Ó$s_^G£~n…ÀIŒ,xûIÜâGÝå'Ê;C©þË×Ãà…|=á 'Dñ&‚° oícÚŽL/otÊÁ34sÎT°¹ã’ ¶¶×OÇôCÑ;t×ðÿ3Ôo¾%xwKÒÅö§¯è¶öFÝnÅÄ·Ñ$F`«.âØØY•Ct$Þ’?‰ž—ÃÐjñøƒDm*é™!½Ñ}žVPłɻi #’ãiô5ä6ÿ²×ˆxoÂ:=¬:¦•¨ë—vPZÙß,W3$k:&It÷ä §žõéÞ ÿ¬ŸõÈÿ5¯ŸuŸ€þ%O^§‡áðÔš¥â?ÄR^Ü\Iõ¼vþFm’%„«äa p¹kè/ÈVOúäšÑcw½ÿEù;¯=ö±OGoë¯üÇŽ¿å×þÿ²×x—ãÄÖ,Õô¯øOÄ(o¬gTšÅ D·gO0E›"™¥ØC@q¹Fr@¯añ×üºÿÀÿöZñ7ðo¼âï\|/‹Ãžâk¡¨ªê—sÚËaraŽ'Ï—‚hÈ… ÆA$g4ºÿ[éÿ4±¯áϵâýCCÕ/,´NÚî+[kK˸㹾/m ÆRCdyáHåMmé|;âÝi½¢Þê¶;¾ÓgìR\[í;[|jÅ—ƒ‘Áë\³ðÿX›ÄwWاPÖ|E¤êñOµƒ$V‚ËÌRÛ )ͼûT?x2FæÆ…¾x¾/ŒzF¿ã2ê=#PÔnìj·O%Ä7Ì‘¤vF5‚ßhx·m,X¡;B_Mº~‹õ¿ÜLom­ÿà}ç«hü5âË»˜<-âRžÎ!4ñÚßE3Cä;…cµ}Ïñk¾!Ò/µ ĺ톘»¯.`Ô!’AÏ2:¶py$t5äºçì½umðŸIÓdžÂÅ´Ÿßhš„ÖI,“O ¶pÉFd-o.W†müXãžÐþx—ãì0º¸±³Ð™Ž‰ö¶we,Ò´DÍ S…ùÔy‹ víÜPå¾¶þµµþíl5ª»þ´Z~?ôg†¼U¦xÏHPð†£cªØJHK‹IÖh˜ƒ‚© x>•Áè?´­®¯âø´ëÏë–V7zÅÎ…kªH`{Y® 2nB©)‘ò_ŽÕ©ð?À7¾Òµc¯ØÚXÝê·æòA­q©´§Ê7É4è„¿îñ€ `§&°¾þÍxr÷TÕ5ùšã\—XÔu=5ÍíÄö–âI r-«°ˆJL1 œ“ó懣¿K~:iùþ½…«V[ßüÿàZ¿‡~)xgÅð^Ëá?hZ¤Zrï»{Kø¦[eÁ9«ƒånN:J>2xBO >µм8ÚxÚçÃñjI§Þjš£^X1×åŠïMO³AÉeþÇ2²Âß#ÜqIè¿®öüµ_‰]®×üôüf‡Ç:%Í·o¬irCˆ[Ì[¸Êâb'9Çï ½ž3UµÿŠ>𥩟Å!ÐôèÁ´2]_E‰€É,Ào’½@¯%ñ'웬xÜè©â½nÐDt$²ÖþÉ‘ö«Ø_²M¢¨ —2¿ðó.2º?ìýâ¯Å¢j–#Ã^!ׯŸ¨Ûjðêɤ·³¬òO,.H (»“#¡»_çÿï·Êé÷Öß/ø?ŸÎÏÊþ½¨xãDÒu;{-WXÒí¯.Ìb%»%˜ÈHMŠN[qVH8éXzGÆí Ä¿‡…¼+}§ê·1XÜ^]Iiyßch¥Š?*ERJ±2“Î>áNkÀ³‘ðµì'XšÆìÙøOOðõ­êÅþ•°üÉ#Ü–§ÌˆŒ19N~è&§Àÿƒž&ðGŠô |[má‹];Ã>}Ó®e’k×2ÀÞtˆÐ¢ "J†bÏ'>Oƒz„5{oy^’Îê£Õ.$]BKiÒUŠhšÔÂHf*ppzUü<Öü ^1Ö ÒF¬|PúÏöE­µåý‚o±£sÛÛ4¾`ù¾w’ö#†ª“ÕÛnŸzÿ7÷y¢b›JûõûŸü¿Èö Gâß…4ÚjÚ¯‰¼?m¥_±K[ÉuRÞå†r#¶Ö#¡=¥j]x—M²&÷P²„Y[‹»óªùØ•ò~T;æ<|­Ï¼áÂ_/„¼7â ='D—Tû±gs¤ë -œ¥íó\,¨¾TŽ¿(Pbu Q¶’"¯kß³·‹ôÜh~›Ã·ðê~ µð¥ÍΡq5»@Ð,ëæ¢$roV$m*:ô)ß]?­É}öèSµôzÃÁûRð§ÆøÏÆ:ޡꯪèSùÛý¢#$Ÿ»ÚHÑ\±E2ª aÕ—·>¯áoùAÿÿÐx¯Ãÿë ø“â[™àÒ%ѵé"¼K„™ÅÜR¥´4F//iCäß¼q·¸ö¯ È øþ„iôDE·¹¡EPPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV߃>Õw,¿iÛæ9lyyÆN}krŠçÿáÿ§¯ü…ÿ×£þ_úzÿÈ_ýzè( þ_úzÿÈ_ýz¹¢xoûí¥ó¼ÍÈW1Ü_jÔ¢€3õÝ ûkÊýï•ågøwg8÷ö¬ÿøAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (ž‰¤ÿcÚ´^g™¹Ëgn;ëíTõ_ ißÉ?Ú6oÇ˳8À®}«bŠçÿáÿ§¯ü…ÿ×£þ_úzÿÈ_ýzè( þ_úzÿÈ_ýz?áÿ§¯ü…ÿ×®‚Šçÿáÿ§¯ü…ÿ×£þ_úzÿÈ_ýzÜQ“’?8.óá¸.qœuÆA椠þ_úzÿÈ_ýz?áÿ§¯ü…ÿ×®‚Šçÿáÿ§¯ü…ÿ×£þ_úzÿÈ_ýzè( þ_úzÿÈ_ýz?áÿ§¯ü…ÿ×®‚Šçÿáÿ§¯ü…ÿ×£þ_úzÿÈ_ýzè( þ_úzÿÈ_ýz¹¢xoûí¥ó¼ÍÈW1Ü_jÔ¢€3õÝ ûkÊýï•ågøwg8÷ö¬ÿøAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€)èšOö=«Eæy›œ¶vã°¾ÕOUð§öü“ý£fü|»3Œ:çÚ¶( þ_úzÿÈ_ýz?áÿ§¯ü…ÿ×®‚Šçÿáÿ§¯ü…ÿ×£þ_úzÿÈ_ýzè( þ_úzÿÈ_ýzØÒì³,#ƒ~ý™ù±Œä“Óñ«PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEä¶?íW{û ü7ºñ|Ÿ¼]ãèö7Z–µy¢]é±c[ÀªååŽòî—r— B²ݶ@Ê8óKc|6¦2¬hÒW”´Jé]ö»i]ôîôZž¿E|õ'ü'Fð‰<9cûTèüƒÄz^©ªÇuãi0ÃvSi°€Ó[ÝKfmQv/˜÷-•åkÓuoÚþÕuÖñ†¥£èÞÐ4K=vã_¼Öl¢±\Ip›3y‘"‹mÞtб?˜;”!í#kßþûöÙîi< x$Üt{5fžª>ëWRÕ¥¥ûìwV7þ"h?<iâ/†Þ‘âM PŒËi¨éw±]Ú]($ѱFddä4Ú¿À·£ñߊ<+áO|B±‚÷GÐuØ5õé‘TùvþLî—d ¾Ý¤F?u˜M9$ìÿ«˜Æ…I^ÑzoÝ[}<¬ïØòÚâ×íá?‹×¶_³—ƒŸXð´pÂÖ÷CÁÚv¥½Ê óî¡ð÷Â-yã]@Ïÿ ˜ð†Ÿqö<Ýÿ£IâÛxàÈÿžw·›»ìé^™û(x¯â'Œ~µçí9¤Ä‚öXŹÒ-ô¿Ü»É·Õõ4ä–ù¾Ó“ŽQq–Øðí#ðïâžµªi¿ |{àÏê:Ýj6º^µmw5„2.ä’dÉy À9χ_´ÇÃŒþÖøMãÿx£K7ë¥}³I×-¯mÍãVÛÌŠF_5ƒ)çq9­8¥9MJüÝ/tµKEê­êÚêeˆ«ZtaÔy]Ü”Z–·i7ÚÏEÙ.ÇÀÞøâHm?ö•¿ðo‰àðo‹|i7€O‰¦¼³þË>˜Ã¦é¦;quöŸŸY·Šéekp¾^¡!ÜT†¯\øgñÏâÇÅoxÄŸ.u=Æ_ü]à |0Ú5ŒVVvZ{kÍkÐOAYÓÃû8(s=:í¿-ö²»iɾòlîÄæñÅ^?VIÛ•u´RœbµMÞ.QÕ5~H«-Ï€<5ûZüvð7À øÚ/\|I×þ#ü Õ> Zèw´ŠßIÕ,ÓH1‹D³&š6]RVx¤yÚ%òÌa¶ ­#öà×|àψ:ÃߌÖÿüá CÁRøö[9â°Ký`A­ÙK>ŸV½‚GrÇË[­Ù29Âû7Qý¡¼£üRÓ| «xã¾5Ö ûU†.±nš¥ì$1Ej_Í‘HŽC¹TŒ#á8ƒUý¢¾x~ `k~:ðM”z ¼×Z¨ŸZµtèc”Ã,—qå"K˜ÙŸ>TóÅh҃挬•÷»ÚNZÝôZ=•›¶†²ÌiÔŠŒ°Jòiè’ºr‹I{¢âšÑÞM©3åY?lŸþÑdÑ¿g‰vvž×~0/ƒ´ïè¶ZM,x(ê²}•æá‘ìnË3,‹‚8tžVoÛ#Ævö¾ ðÿíñ±>xné÷¿¥°Òm¤×µ ]m:ÊÎC{o%”2Kj’ܼqÄ+BD^Z«©ûGß´†|e©ø|ü<Ôô]Þ!Ò/u{m{NÖl§±ò­d·¶›Ì•I¸9’$xãòˆ‘‘ž0íðíAðÇâO€®üSàˆ~×¼/§Ý­•Ö¯a®ÚÜØ[\b’t¢HL±aIù‰¼3.+KTµ½í¢Q¾5®º;]ëu{ÌqЇ-°k–6[E»þñjÜ»ºÒI«ÃE®ŸIûiüFÔ?lÉ4 ïŠ^ ðÄZw‰´M/HðƵ{g§è×6öo6£‹ØI}q4Íqx!{{¸áŠKtŽHþI‹êY|YøÉãŸx.K_‹Ú¾§|GøŸâÿµ§‡´§D±Ó&ÖžÞâÕå¶wk½ºLq—˜ÉY 0–]çí†<'ñ¿Â°ø‡à׉|=âíWxbÔ´mBûWu8uY¡fRA +./Ú[áÌþ=×|+oãïIâ Z=þ±£®·l×úUº*³MsnÌ…] gêIäer%í'ÝÞöÓFöòOmÛI"^`¥xRÁ¥(ÆÏÝNÍFQ»N?Ï(Ë[»ÅE·}>ø…ûoüSÓ¼ ðËMñ¿Ä3áæŸ|KMkO€À&‘^Îîc »·b“¬g‘œi6¥?‹Þ[«+I¯ÏE¥ùUÓz³ÄÙÍÇìåï/qý¾f­ÊÛ÷c(6®¢¯%d¬s±¾±™ûwþÐúGˆ~!NÚæ§¯Ûk–Þ¸KžâÊM EEÔ£Q ÜÉnh\ŘÈpÒ厧í?ñköŽðŸÅëÛ/ÙËÁϬxZ8ak{¡àí;RÞåy÷0Ó°Ù6¨@Ï÷°ø_ö©ø[ã†Ú¯¼ñÀZ·„4&hµ-zÏ_´ŸNÓÙB³,÷I!Ž"£Ì8e=ÅrÚßü+àöƒã¿h·~?ð“[øãF½×4­a5Ë¥Ï ­Åµ¹QpgžI.±@Á¾Ï? ¦ «rB|¶ÚÎ×Vv½ï}5óµÖš}*¸¬{E…R’Š‹RÕãwd••íºO©ÇþÑho  ÿ„ð‹jÆóFŠ}kÓõ³^Ÿ¿ïü[aäãþy§ÚTvèø•ñWö‡Ò¾øPø{á¼ñ® gÿ„†ÌxCO¸ûîÿѤñm¼pdÏ;ÛÍÝöt«Ÿ²ÿü[Aý£ü¦ø²òÃGðÇ„u­:ëWµÔî¼Y¦Nm-aûô)6ûiȾBÑ"ô,²#I¿¾Yø³JÔk¶zÍÆ·ãXŒ‚þÞ{ ºÎmRòBÀÆ×MgxáNæ‡fOÚö×ðìýã/xW^×ôÏxŸYÒ´»? ¦¯o¯$w×±Ú‹µ´fó^÷¼ŒÁq¶'烩Î59T]îÔœ´Võ¾þ·Øâ«ƒÄâ+]R³šçI-9[z¥Ò:;_¡ë´Wœë¿¶ÂO kš¦™â_Š?ôýKC¶–÷Q´¹ñœSØA¦%™PÑ¢J lÌ œ*ïü4†ç½Ñ.4­OF½ðÆ· ÞxŠ?C¬Ù=--ͶdÌHÙnwùÑ«D‚3æ:Œ8§³þµÿ'÷ï YZðjýÕ¼ÎæŠåþüoð_ƤÕà狼1âÅÑ.Ž¢Ú6©ð°¸a˜ÂíåÈ;«`ûWQTšjèÆp•98ÍYù…QL¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¹ÿŠö7Z—ÃÁ¡êº†‡{&8ƒQ°ò¾Ódþ[m–/:9#Þ§oG\ŽTŽ+⯄^?ø±ñkQý‘4OÅ:xËáÜþ=ñ=ø×bÒ/5+µ}Ϙ¶Ö8’¥ Ke1¬ÂLHÙˆ%I¶Ò[8¯ü ™þ ý6Ôôp¹l±T¥UM$¯t÷Ò.^šÚÛÞý-©÷­ã_´¿í§áÿÙ'ÄökñªÚ];Ãú©«Ã­‰CF×6,òiþV2g’ßΖ /öyT »Í¾%ÁEüUà+]vâÛáT7 ð×Ášw¾#[\x˜[Ýè÷iq!µÓÐZ²j1Eevì${XÎÄUr\ì^Ò/òôß~ËG«ÒÖ}UÝ £‰Q•8i-ÒOUkíIGÕ¥»>®¢¼7Ä߶ͯ‡müs*øzâá<ãÏøˆ» öÆÕ¿±ÊÜ“äm¦Pä·y†*þܼkðÛÅ£øhš®§âM¦Ï¥M©ÿfÚê‘`kˆî.<©Lq,¶ðÌJÆíû‘µXáK”Ôb¥m.–Ýíú4Ìéeõª´´WRi¶­îß~š[}5שï”WÇÞ5ÿ‚Ÿë¾øIáýkÃßô½SÅW3ëֺυ£×o®µy4{籺6éúUÔ—‘¢p³Ë´ct[Ù áz/ÿÁO4C{«_j:÷„t?x&Õ®UÆU¸[Hlâ`¬"–;©ì£”1cKÈd?)©…XÔmG[Ylú¦×®‘{v:GŽV½=Û[­Ô”_]=çoÇdÙôýyí¥ð[Tý£¿d‰>ðMÅ…¦±ã_iS_;¥´SM F+"³†J«t¥yF¥ÿÔ¤ý¥µx'áÆ¥âxsÄÖ^Öõ[9/¥½·¾¸ŽÙÞh-ã°ki--ÅìYe¼‚EU™ÄL|ßJý¯ÿi+ïÙ·Áz=߃ô½_×5ÝLiÖZ^£©ÞZIx|™e³Gca{ss"¬Yòã·o—sP¦¢u)Γ›~ëÓï·çuf:,nEÂ6©¤¢›]=å}tÚí;; ñïìá7Ž¿i¿xËV‡B½Ñü%á-{Bž ´2ÎnoæÒš9!VŒ®Á…Ò;VÄŠ`Í·çM+þ ¯ãŸ|!Ò4›Ûox›PÑþøÃQÀ|K¨h¡5-êþæK¨/­í$’¯ulð±‰÷ÝdTä÷þÿ‚Šø“âß„¾?ì÷ð½uoøÿC×5y4Í_m=ô‹Û[+»yä6’˿Ϻ(£ÉVÌ`:Ç–1Ç?üSD·ø¦ê÷ÔaÔ Ó%½fñ\Ú¤ÑÚ¦Ÿ"9¡º¹³ŽVÕê9~îàå›q[ÝtÖ÷›VÓWñm{[Ðôp´óL-5FÓHÚêë–¦ÎÒR¿}tÑ7{&ׯ~ÉŸŸ=þ‘& Ю§º·†9ï®'Š$šà ¤Ç4iºL¹Ùó3±ò_ÁQîìµ-;CøOàíß_^ø™^Î÷P¼†Ö=Wm*I¼ë->î_6y¼³fŠ÷Ê¥TI³«ÁF¯->&øGºðxWIñ–•¤jS^øßS—ÃÓÅ&¢å…¢5¤°\ß@T m¤¸·pÒF©æã5*R»¿ÄÒûç~Ít4«ƒÌV8ySJ1mî®ù\“m_£“IÚòVWj*ÞªÿÁ)õÏ~Í>ð jÞðõ΋ðSXøk¬êjHLº…èÒJψã3[ïÓîÌ›Ìn|á—b·áýƒ|}â¿„¿_ZѼá?‰:µ¦‡7‡µHüq«øšÔtk¹/´÷¹{ËHZÞÙ.YG—HÆ9$ [åZÁïÛDzi~Ô?hÛsaa{ñSÅ^¶»ÑµxfûMµ‡ü$oö{ËvÓÓ÷E¥Ã4R,³­ðÏSø©á²ñ¾ŸVÓ,c·–K{å6Ñ‹²—ÖL6¹÷’31üó%Nº”µW]M]JkUª–²åZ;§dÚ=)¼ÝOØ%8͵f¬ß´Õ-Ršr¦›M>T®ùu/~È_ðN{ÿÙ‡ö‰“Äwþ!‡\ðÕ‡‡Œ:L37±k7ÂÓûníÆÀndÒ¬î >mÍç AÔý¬¿a]cãïí á¯ø?\°Ò|'­ÛÛhÿôÉ„žo‰4Û±aA@´[ÊKkéÔ’UQñüÆ~ÓüwiñáAâ Úh𥕆“®Ë«ZÜXj·w°ÜÞO‘–Ô@öwp"‚äGîC(¯iý›¾7¯ÇÏ‚º‹?âš2]5ÄS.® gOY!•âeŠïʈ¾ ‡Š7Fʲ†R+U:jÉ}‹´­²»ÒßʯËm’÷vG•_˜áçõÊ^IB÷‹NñRNɽv¨¥üþõùuÿØ ÅËûSxŸ\ñgƒ£ã][KºÑn,ã±EŒi–Öïo|bm>9!wš¿åº•L¾¾±ûj:ìÑâ_éðFµâÝgâ§ãA7öÍÞ‚Ò‰uéõ;9N§kk$ñÝC´Æb•7A°î@¸/‰ßðRøÏöJñ­{àÁðî|×~ xV°ñÔ®ãû„¸º‹ìÑ‹iTßÚÉG˜0 »Ëa°ú!ÿ‚j7?´5׃¼ðïUñ'‡|=â+ëzų^½ô7×[HóÃmƒÛ=¬ö4’ÞC"ªÌËS.táM%J.ϧFµKªÒÎ1Õë³mèz5¡›(ÂRŠ´]Ý¥§îÒî¥myùmãµÑÆx»þ Çñ?ã_ÂH4oŒÞ2ÐF±{àoxbòöçIk&³§\YFZ+[u¼H¡±x§œÇÊHm™v+¯®þÃÿ¾6]x¿^ø»¤ü2ðÖ§â‹Ï[6…¤_ÜjZl–:¶uåžâ[( “MÓBùUa…ZBŠt^ÿ‚‘Íâ/Ú…<«x>ÞçCÕïum;Bñ}©[ÞÝié,²[M$ºtk;Go?îmîîY'W ´°æt/ø+SKðc\ñ7‹¼¥XkÐ^hú~—á[}~â}j;RçìÖÐko§Çq§:Éþ³ËŠép’ùM; V!VŠäiéekß]]·Õ»¶ºÞýìÁÿl%ì•$µM[•[žjVI;YÎ ü<¶÷UïïŸ~Þ|!ø“ñ{U»:ZiÞ?ñ\:ö žàÐDº>›dâe(ª²4ÖS¿ÊXu$î$ øCû øóÁŸ¼¦ø< Þ øuã?øÎÇÄÞO6¿¯¾¬º’ý’æÕ­’;pŸÚÎd˜\Mæý’ݦã³Û¿d¿ÚYý¡¼«^øÿÁ÷¾Õ´=Uô¹¢oµ=– QL·63]ÚÚÍ4%gYíã+,r¦@Íâÿ¶/Ž~3~Ñ?n|+¢[xkáN»ã/h–ÚŠë¦mKÄÆÃLÕP­Æž-DvЋ9&þÓ#‘oèйTÒ¢ƒQOn_ü•%÷tí®ýQņúóxŠk—Hû͵öiÍig«pçZ]jåÑ5îß²ÁKÿÙïöHøwà>›.±á? Xh×ÓXki® µŽxÙ‘Y”² *’1óÃOø#Ö—áØ o‡ºö«tßµ‡²ø.o\kº–µa¥™¢A4z|’mµ´’HãßÁ½AjÕþÎÿ·†³ã¯x'OÐ3—Lº°ƒÆÆúÏVµþÂÔ®Öº}(InË-¨vd‹¬ª³¬¯³¹ý²~0üDø_ãï‚V4íQoø¾ãKÕm/õ1eäI¢jwI›ì“´kæZ¬¾b(lÛª`¬¬V=œÞº´¾rå»·ši7ÓT¬Lëc…+SÖš÷®”a ÖüÎÞìµ÷Ÿ+”›Zy÷ƒ?aÏü7øYðŽÃE¶øu®êßþêž¾°Õf¸N«¨Ý&ŒªdÛlÍ%™þ̸nEv ƒoÌÅ;ø'Ÿìk¬þþñ„5][Oñ^‰<ö×¶!åþÞ¿³¤2A¨R¯ã·q+ƒË„¨òD’ùßìóûoxÛÂ:µ§Ço ÇwàßüBñ§‡, =~Æ?ï¾1êãÃÖŸn<)âωzÄ]S\ºÕî¡×,…‡ö™§Ãn–Mƒ§mŽWžiúF§ÿ ‹ît­R×PÔ…Œw°¦‰©Ý$_²\4kæZ¬¦D³n©ÊÊÅm((&–¥·x¨§èâÓOfµANiKIÅJÒš»½ßiQß]ï%£¶ñ½•™Ÿ³ÇŒ~ücñÏŒ¿gÛ_[Üëžð燴«ó5µªÜi÷š“Î× oV?³ßı”É-R@'ßNzׯ_³Ïí½ãoêvÖŸ¼7߃|Cñ Æž°ñGöø¸¾†K ífæ(_Oãm²Zi’B²yÅ÷D Ä‡=¯ìYû뵯‰ìcÔþê~ðï‰x1th¬þÐ~1]ø«¢^Þß5¬V‰m¬ßXÚëV±HÒÇm¨Û[Lê+¼„Er’ ó$ð>«EJ§wn·ùÙ+ýÉ#Xcñ4”:Ž<©¥gk&îö¶ï®ûtJÞ=ãØ/áwÄO‹øÓÅz§.·q¨iú¼éˆ5[ ›ë…­.屆ám¥ž?³@¢GŒ±HÕ +ò×¢x¿áž‰ãÍwÃZ—‹,¾×{àýIµ}"O:HþÉtÖ·†L#ÿ¸»¸M®~|ãpR7h§¨+EY^ÿ>þº-Hž.½D”ª7ee«ÑZÖ^VÒÛ[CÄücÿïøK㛫9õmXµšÎmZ_3Lñ.©¦½Òê—Ÿn¿†á­®PÜA5ÏïLîˆU~Zéo?d_‡†§ðÒ÷Pð­•ÅçÁähü<²ÊòhŠÖÂØª1|È Jƒoåþú«G¢ˆÂ1Ùvü.×ÜÛkµßsIf©ÙJ¬ŸÄ¾'´¯Í×í]ów»¾ç•ëß±‡Ãÿ|b—ÇsXëÖ> ºº¶¾½o‰u=:ÃT¸·!šòÂÚå-näEŽ5ß4NJÆŠI k|zý™¼!ûJYè‘|TµÕÚo Þ¶¡¥Þé:åö‹}a3C$b»±š)”*ií¨è÷ϯ\Km4RÅ"ËÐÏ ,°Ë‘£¤‘²º2‚¤^1àø&—‚4xŸÃž+¹×õmSñ¡ñž‹*kÚ¶¯ Ü-¦¬·föIXÇtÍ1˜[¦Œ‚£Ÿ£h©öPrrqWjÏEµÔ¿8§òƦéR¨Ôo{'׺ìí¥Ö¶ÓcÄgÿ‚vü&ÿ„?@Ñt}\Ñað½ÅýΙy£ø§VÓ5KV¿®/ûBÚé.š)¥mïJP•C·äM·µØKᮽâ PÖ4ÿ\.‚– „ž+Õ›K¸6,¯h÷Vëì×rDé‰'ŽG,ˆÅ‰PGŸþÓÿ ÿi?|^½»ý›|TúW…E½¸ñv•§m "çÂŒƒ-““tàõ ƒå?h¿‡_´^¾<'ÿ ÿâ‡Ó~Ë£E·ÿ^—aö‹á÷ßý#ÂWþn¿Ùö+›ÚÃY{'u%Ó[«Ùú+hü×s×,]GNøØûêOZKÙÉK³“z®®÷= @ýŠ>øgDzøHÑ/Öýõù|PÉ­ßËam©MÜÜÁbó›xZTÔo<À‘ªÈÒïpΪËáø'? h^#ÒôÏ ßͦø£A¸ðµÅµæ¿¨ÞEc¤Î§éë5Ãg[7ŠÓÉ_’<ݦÞ[âWïÚ/Qøà{‡~({oYÿá"»ÿ„¯K·7Y?»ÿH“ÂWOÿ<ì¬ñßZôÏÙCß¼/ðµ­¿jQµ}¶WV×SÄ.Åó­t2>o—ìÙåÛ .ÔÜ9Ü-Ê´v²µ’²ù;z&Œ+TÆQ£õ­Ý·k)·/u»6»'ª~iõ1~ ü"øEñoã±áÏjF/ˆWº›=宑â«Ý+Z‡M²¹¹6s'ØîcšÖ{Ë¡æ¦ÝþaW,»øMð[Ãß>'†~ÙËc¦$·,n.潸¸¸žG–iç¸ÞYå’IÞI™™‰&¾ðŸÃ?Œšgí+¤þÑZŸÃÛh¢×~!Ü[ßD“ÞIâ”ð¥âãÛ[K¥ý‹Cµ°Õdyhñ3R]G ü3ø{ñ'Fø­àojz¯ÅËKZø§âí\Óïµ ét›o+kϧ¹ÓÛ÷EºÛJ1]lÂXÔHRDZÊö°s”7½ûëÊíßí$ú^2i»#¯—J>O¬Þ1IÚüËž1Ò³¶‘…¢ûJ «·}û8ÿÁ->|økàÏ[êž1¼¹ðXðF±¨ê:Ö¥8¹±xV;¨lbžî_ìÈge ÐÚ4`mþy¦ß@Õÿb¯‡š¿ÅÆñ¸°×¬5Ùî-o.×Mñ6§§ØjsÛX&¼°·¹Kk¹b‰wÍ’±¢’B(xkáÿíðûà…õ„ú§ÅÝOâ7þê—Úì^#¿º½ŽÇÄð¦m8/3…Þ.u%X‚ÇæÉ‘\ÆÍ[>½ã_ xâ©û7¯íwðëG¿ðN¡jž)¶ÖîÿîØLø%8¥ÅŸ4Ohß´ÅÇí /ÂÝãÆzj]xXëÓxŽâîß]ht7¿›KS¨Oi‹+G3“ ¬Qæg&"rjœn &¼¶åR×¶ö]妗#ê¸Ê’^Ó'7ÊÚM¹}¹%º¼“ƒÓ£qiöû{àßÁ àG‡ntÏIâ ˆ¯nMåÄúÖ¿­ÝÍ)ELµÍüóJ@XÐß´c€+ŒðÏìðÃÁÿ"ñ÷‡´m^ZÞÞê6±ŸjO¦XÜÞ«­ÜÖúk\H^o6Rì‚Í#7Þ$×Êò§ÅK¯Û=åñ§ˆ¾0h-‰´Vð¢Ûøk_ÔôËß{/´Czlæ]")dê)q%ô^|,ÂDm©Ö_>"øÏÇÞ Ô|Wâ޶éâÿ‰þ/ÐüO ¿ˆ5K+[? Å6µ.²(ÙVÊ&6ºhŽò1¬³*,ÛdE«æö‰5 ´ÖÚ|*Ýmºæ[«=•ñx*´#*×_Úî>s—mÿ;6¯ÿàŸÿ ¾éš¾› hZ¬úµ¥Üh“hZˆµ-GE¶±œ6Ö×N¹¹{kH›h ¨ ¸P|ƒñOøÉoà?†ZGÅ]OâõôÁâ­2ïPÓ,|I¨kr]Ûë ‹5ùÐæ‹Q‘MÝ&rðHì`ÌÑ5u~|\ñ×ÃïêâWzï‚þ hšÏ†'Ò–û@犑u‡™åÓmÎÙ®]¡°ó,ÌP%ExÎP‡)*®MÂí]kkÙó_¾öz}¤ÓÙ»lòìD%®3Y4›¼¬Üf©ÅÞö•®›ëê“=ÿIý‡>xÃz…ôÛëx{Z·»žwøƒ¬Þë:üvŸ¹XïÚù®ì˜ZÞqI1\’T¬„·£ümýž|+ûCxkMÒ¾(Zj3C£_G©é×6µÞ—}§Ü¢ˆàt¿ÙÀº5¶‡Ÿ¡Þ"ÔwûÀðÄt©uÏ€~ñwi¨hñ¥½å…¦šéÒ[ˆíí$im–/-—Ê1»³+&ÖsÀÇaEUºÏSƒ‹ökð”ü:œúÄw‘µ»ÊS\¾T½xˆ¤ºA6Û™"ò‡fÀÜN+§Õü¦kÞ%Ò5}^ÔO¨h&f°”ÈÀ[´©±Ø ;KÊä‚@-ŒdçVŠ<€â¼Iû=øOÅS^Ë©i÷0Üßê)«Iqi¨\ZÌ—K€M‘H­€FØWpÎìæ¦ðÀ øËL·ðƘÖñhö·vv›î癣ŠêU–áKHä¹wEmÌIà€MuôR²µºÀ·å§¦çýw8×ýŸü#'‡í´§Ò3ag¡Ká¨bûTß&Ÿ(ŒIíù9Çó“¼má†NnÜü!ðíäZ„w:väÕu ]Vèyò6æÛÈòdá¸ÛöX>Q…;9'=-üÿ­ïùë먬¿¯¸(¢ŠQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyoí7ûZxcöNŸÀÓü_¼ÓôÆZôº$úÆ£¨Cac¢ˆôËý@Ü\Í1 ±íÓž>Hù¤Sбã/Û3áï†þ üUøq¡x3Å,‰¢ëÚ‡‰lítÍ\º—Amu$¢9‰Ufð¤ô¸ïÛ¯ào¾-ÍðŸ[ø¢øĺ·ÃOͤx¯UŸK²Ô"þÊÔ¬v¥Ì6WmÉ%üR¡0‘˜ºƒƒ_?x?þ Õñsà†³á|;Ó~ø»ÅígãKMkšέy§xwJÿ„“X‡Us§ÝG§ÜI*Û´ÝÕí¡ûJ;>a?»*-¶Ó]ÿt¿íç§6ÑÝÝN1´Z}×ÎW%˧ھ›3é/þÞ¿~~Ò·Ÿ ¾0øŸÃ»þÇѵ=.÷Z×-lc×fÔ®ux­-WV–`tÆm«¸‘*`u¬OÚWþ /áoÙÓâTžºÓÛP¼Óíí®5mJ÷ZÓt=F{¦u³µšûP¸‰îãÉ”Çm‘ i<µxÚO›ügÿ±ø©áχSü?øckðÅš‰~h_õ/xŠþîÇPÐÍÔc¸¿µÓ㱸K˜Ú=B9Ý®­òöè¬àâÇíSû übø_ûA\ø·ökÑ‹íµD¹’Ïì];\’Íî´m7K¼ŽëO½Õô¬ÈSB±{{È®¥#íwËDzBV÷9¹]ìÝ´øµi/îégͪéb”!)ÛšÊËåîÇ<•º[]>§ø{ûy|9ñWÀ ïˆßµ«?†š&ƒ|ÚV¾ž0¿´ÓO‡ïU‘~Ïs?œÖ世ŽHåxæŽxd‰Ý$F>á¯~ ñ¤\¾ño†uhµÍ,ëškÙêNº†ž ƒyG>m¾d÷«”ùמE|Oâø%§ÄøeðÿZð—ˆtkÇ^ñ]—ŠåÑî.îüez‘xb? s{`÷³ÚÜG Äëö…gßlküaÿ‚Iø³ãßìíà%·€>CáKÍÄ÷3XkzŸ‰fŸS¿¸žOìÉ..¡·’ëI¼ûdí¨#ÌÊ))&Õã9(;Ù¯ý&íëç{$ÞÜ·m¦sÓ|Ñ…÷jïÉë§ä¯¥ïÍd“G׺·í“ð‡AñO…´=sâ¯Ã‹=kÇ0CuáÍ>ÙGu¯Ã1")l¢2î¹G …hÃ<jÏ‹¿k…¿þ Aá?|Jð‰â›Ÿ7ÉѯüAim/• Ï&ÛwHvBé+qÂ0cÁ¾8ý»¿àŸŸ¿l+}OIY>YøsÄ> Ó4È4ûoë=Ÿƒ5›v¸’âX­ì´õÜ ígå Æ#ò 6çs+úÇø&ö±ñfóâ…ÆÏÍ?޾.ø7Ç0IzŽît­t¹¶¸>C5¿²ïü¸ÆèÏž»7¾ÑSM¥Ì¾&½4R$ÜŸF£¥®;µÍþ×­®ÕÿéïçïÖÿ¶'Â;¿„|Bµø¥ðêO]<±ÃâEñ%™Òfh„*­ç›å1A Å€l¨ó§¬?kŸ x‹âÏ€ü?à[Ý?Ä:/Ä êÞ-Ó¼G§jÜi­ka6• YOíDeum DÙê+åÚ#öSø‡ð³ã‡µ„ð—Žn›«¶Ž'’×E¿ñV«a¨G ’4q›‹8>ÍqŽæ—!„iæŽm%}9oé'MK—ÎÒ|·_ËýãeóF.[þ\ÒWû£:ói¢×íO‚Ÿ´_ÃïÚSÃ×z¿ìëã¯øûJ°¹6W7¾ÖmµK{y†1<–îÊ®•¶“œ0=¦jß´§Ã­ãFðß]ñ÷‚ì¾!êöæîÇÂóëvÑë7°…vó"²g:mŠS¹TŒFçøN>xý›ÿf¿Œì~!ø®×Á¿ ´_‰þ Òt}"Æ{ŸˆúÿŠ,u쥹m·R]XÀö±F·“˜’äbdþƒã¿ø'ïÄgã·Œmt4øywðÿâÅO|T½ñ.¡sÿ ‰.”ºYþζ±[CáÎ%Ë]ÄbŽîQå9AæÔcUA¿wM~qOîMË_ååøšfw‹oøŽºi½ù¶>¤Ô?io‡LšÊjŸ<lþ´¸¿Õ–]rÕ—mo!Šyî“÷1Å (îøT`Uˆ.xv_ Ïñâúõ…«i×ÚtrZ®•¦Y "¶Ô`·¼D2YL7O-! (RD©B5îìãù7x$¾|ÒÓÝ·´•®²tÚkX¹4Ÿt¹¿Eÿo¥ÑßêÚ(¢³QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESe•`žfTD™˜à(õ&^=ûcê·Z¯„t_xM½Ö®ük©Gmucg2C<ºt$MyµätEݲοë€ÎH¤Ûéý]F•Ï`G hÈeaAÈ"–¾døYñ¶÷á'Ãè~>œøb x¥ü5­ÿi¼'ȰûÄÖ^tỂ”k%Þ¯‚ÊFpMeÚüY»ñ‡Äø²ëÅíi×ü$ÖIXmb‡U1ê [0òÄpÓÅ/9òR±bRIé·ü ¯¾ëBnô]àµú3êú†mFÞÞå!žxRi>älà3}S^û/üjÖ|{ãMÚÿÅË⳪øuõ=zÈZAü"·âHUms +F̸O*rò£nÏ-ž7öÁð5Ï~4øÉ4¿i)–/Ù¯›:ï¾ÒCÝÞ)¹²Ë&YQw>Á$Dù`I I{­yßð¿Ë¦ûu¸Ó½þ_¿ÌúÒŠùKâ¯í/®Zø†Ò/‡>5Ðt_ÅáëMCEÔ5+ÈmíüC!.%2yÖÒ¼Á|´F†'ŠU.I$‘·¦·ø÷«¯íKý…¨xš+»+›æ´µÒ´™,æ궆Fûm¼‘­äd:³ùèíhÉË“³?ÁØW´nû/Å\úŠù Á´ÿŒîüš·‚™¢¾añÿÆ?ü<°Öt}OÇv´_}„êWòXi—÷¶­§AuåE,Ð1*Éqüh»‘HkÆßµ‹ä›I}3Äö^³ ÙjÚuLjž×NþÝžMþiž3o/˜d`Ãlñ0ó7)!—jOšÖòüUÿ!ÿ_®h¦[Hf·ßnYA8éÓ¶iôÞ‚NêáEP0¢Š(¢Š(GR·ÑìeºÕ®!µ¶…wI,Î#¬Ç€>´iú¾¯eΕ<7Vó ÑˇG¡‡¾Gÿ‚Áø{Â:·Ã¯†:Æü2ð~—á¿Cª¥ŸÄ{FŸÂ>%‘l¯#Z‹y‰$y¦âe,«=¼GËvÀ¯šöοøaû øjÙ£Ãÿ~xÄ?ï4/xßÂůü!±[1îWSÒ5+ý-¬ííîïRÞÈÜMbÐùÂtR^Dž”?7—ùÁkó–ÊïDígtæ¹yuÝ?ÁI¿Â;í­¯ugú«E~hü=øÅ«x³ö‘ý•Ÿý¯ÿ&¿õŠŠüý¿ý¼üE¡ÁKµø‹â®›©XK¨Í§éžðÅÎ}oŠ×oqâ:[uÖ­ˆž9X]ÛM%³#Ú¡YÙ“|2ÿ‚¤x†ßö]ø‘ñãV©âŸiËሮücáMGÂwþðÍæ©¨5«=U,vYZ£(icÕmg¸¶£™™²pO™&ºÛñÙZvlJî\¶þ¿áþgêÝùuð×þ #ñ'Äÿ³†’¿~/hÞð¼?/<­übÐŽŸ¬Ek£®Œº•Œéy&›Ÿ¾âæ{{/¶>žíHËËÍ“âŸø(ïÅSáÁæ×þ0i¿<-â¡ã17Ľ^çGððÖnô½u¬t»IgÔ4»›y&²YnžßìÐË)„mŠTmeMÅ)6µå¶¿Íu·—}oeÕ^a%So?Â\¿={^Ýl~­Ñ_8|Fý¡þ#øWþ O¨üPðE·†¼gñNÏáÏöýºø~ îôSR"S%œGlÓ[™2éé…àšù£Dý¶üs/€¾#XþÌ¿´Æ­ÃTø}c£|G¹Ñ´»ø¬5o^]?SÓ\éq[YÝm­À„*OÛ¶¼œÆR½„½¤©­ÓKæß/ËÕÙtWz~šÙÿÀÿ5µú½‘úMEx¿í ñSý’ax«ÇÞ$ñWŠ5øoQÕ.5?L±«ìŽIHm¼µµßۀ鳂á¾lüEð#þ WñMøKñvûÄßü%ãÿ|=×¼ ¨CãM?TÓµø-´mOY[mb;»Û 2ÂÍ–ÞÚÚéÚH­È]‰Ù—œcÍ&¯¢¶¯E«åü/wå¨;¥×ÄÚ^©_úµþãõŠü½ý ÿl];öˆøŸ¢xÖÇ㕇…~|7øöšFŸã]-t·ÒôË;<‹;ÞÞ[ËnÊ××ó@“>co¶ª‚Hˆ¯cû.þÜ^9ø…û]xOH×þ*Ç­x«Ä>8ñ?‡ü[ð‹û7OÏ4+ÔNŸ«fþ/Øô¢n.¦’Þãû[÷H›¡Ùp¥)ÛÍ_ÿ%Œ–Úí%ä·m&›ª‘äIî­ÆJÞ­ôµÏÑ+çoÚcŵÏÛáoïƒÞ9ÿ„Gñ…¼I®ë0èÖÚÝÃXÜèÑ@5Àd„çQ”–) +‘·qWO—fÿÛß⇎¿l;Í?âWŇÚ¡‰¼M¤k 5}NÍu #M±[óaui¦C§.¥æ¼vÖOq5äÖÓAs3F‰ºL¾Ê“ê¤þQvŽ‹ñ°8´®ü¿ÿ‘úWE~R|2ÿ‚ŸxÊ?Ùwâ±âŽšn½¯x~óÁO­xÎÂoë~ðÜz®»•ÿö}ÝŒ:$p4Ò]I Ä1ù.Ò¾âÕÑÛÃÆøN øÿæ|¸ø¦ÞoÚ¬ôHöi#ÃÿoÊÝOìƒ\0^ý˜ÅÖ,yø’«‘»Û§ù¥××®ú¥wdÔS’æ^‚¿ÏNÚõÛSôæ«kŧ‡ô»‹í~êÚÆÊÒ3,÷¬QB€d³»É$â¾øGñïãíSaðÂúÅíOÂø«AñÖ¤þ2Ò<3¦µïŠlô}sO²Ò58¢½·–Ú%»´º[—háò¥YËD±«Fcù·öØý½|GñãöÕ-?i?‹¶? ×Å´Oèþµ´Óm‡Å­_T¶ºö‘É} Ò˜‘¢¶„AdÐÍÚüÇ“kE·jxw:Š ÚòKïrW³³ÞM–ör\©Éì·ù;o·£½¼ö?eúÑ_œ^>ý¸þ'ÚÿÁFõ¿êü ðê-Ç&…¡xÄZµ…—ü&ZÌ6-q} ¤štš…õÄsÚ^ErÚ$rÆvNdúSöñWÄ/‹çÆ~0ø·ã£ªéøÇÅ>Ò|?o¢ÛZAam§ë·VVòIp Í<Â;B7nD*ã(]|ÆÊ炨¶jÿ‚{æ^Ž÷±÷oäÒûù¿uþ¹îrx÷B‹Æ‘øn]kI_KjoSK7‘‹×€6Ó0ƒvón7cã5­_™Ÿo|Oû:|Qý­~(xÅ×uåÇÅO øgT×ntM.qà½ëKðÚÝêË+Úù˜²´º¸*'w¶Œ)šh¤Ä¬ý?ÃÚÃâgÄÝ7ÂÞø-ñžßÅžÖþ4Ïàâsh:}óøŸCO \곆ÓX¿Šk(ÙÚ2I¨[,jª‘\\[%ÀŒÆ,Í0¹Sò¿Œ¿nø·à'Ⱦ,ñûüøQñ¿Ç÷MŒ%±Ó —ÀÞ]6åô™$›P†[XeÔç³¶”Íw‚!©ˆYl²—75žß«Vûõ·WË.¶Ny_*—{þ ·÷i~žôu×OÐê+à?‚¿ðRëÿYüÕj߈z‡|a¥øÞÎj–1iVþ1ŸOÖl­ôÈ›j žûNûMÒET¸ÞÏ {*ë~Â_´7ÅÏÚóÆgñÄHô|ðGu«K?Ú4ºö£©Ë©ý¤¤Söx,Lq¦á¸xö°}=‹mÛdìü¾-ÖëánÖ½šÓ±$ãIôéßÞQÓ£Õ­vó>梾cý³üOñ ^ý¤| ð÷à¿ÄmWᵆ¹àÏøŽÿPÒ´>þúY´ë-Ò3ÑF¿ñ0›~cmÊH§Í? ÿo_Š~ø¢|Iøíã¯x£Jø‘û;jnl4é‘Ká ûEÒ¾M!|‘æ#&¬ìVúKºØ6BJΜ%U7Ñ¿¹TЧ;z.è¯fï·•­óq_œ—è~—\ÝÅe{Éc‰ *v 1FOrHw&¢Òµ«=zÙæÐîí¯aŽY-Ùà•dU’7)"¤€ÊêÊè*AäWå×ÁOÛ{ÆÿþüBÑ|yãüdÑü/㟆sè~!ŠïJñD©â[{kˆ$¹´Òìl¤žÝíZHÞb`‘ЉÞHÿwõ/üïã†|àSáOj¶ö^ ñ·Å?ˆé¢Y21}A­¼MªÍ8BQ²?˜î#Û&­Ñ”S“þ´‹ü¤gsÓö‹nn_ý+ÿ‘üOªh¢ŠÈaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEÀ|vñþ¹á™|1¡ü1rkÞ.Õ>Á Íüm,0¤2O4æ5e22Ç ›”a“Š•ÎùÑdR$ìFE ¡±¸ƒ‘žÕã2ñ÷þ\øf/MkâÅÕ»a‡oâ;›Ý>Ö6‚ÎÂ3lÒy’£p!v(¶@8l\Ö?iý#Lñ‹i–z?ˆ5 (5[]ëW¶Š°Ú^ܘÄp±yVF?¾‹qD`»À'9­¯/]¿~zzè+«_úïùkèzK b7pr2:R<+&wó ¤÷ǦkË|'û_øSÆâðÆŒ.ÚK«»‹ [ß6Ù¡º¸€9•k1ò¥ÃÉ#l;Xåwu^1øÇ¢øÄñiž0–[;LºÕ’êEÝ¢¶ÚfPÙÎõG·w$!´ãw³ÿ+þEYÞÝàÛó6<áxSNÑòÎw+BíÀ À¨ó©?hcDøÁãYü]·†|5{o¡éúu­…«RòhíŒj²™¼Ã4r6®1 °l…”îÒï¯õëunãïåý~}w¢¼ÂÚŸK³Ò"’÷Ãþ+MYõ£áùtd³Žkè.þÎ×!X$¦6F…C‰Ùpà’m¯_Ú»Ã6úņ›âu]#R¾ÖC6—¢Ém;ÛÅ:™6»„\@›?<Š=éïýw·ù¯½ßׯù?¸ôÊ+Æ|SûqxSÁº6ƒªø‚ÇX¶ÑüCkå½ä²YŶ$(­ä=ÈžN¹G!ÀõÈþ ý§tO ø‡Ä–z¦™â!eá-«j«f¦Â×ý.@ó7îve‘"+6æ€I6ü í¿­OG¢¼ËàïÆ câGÅiúöªøzÇKÓ´Ë‹[N8è4æë|„Ã,ƒk£KeJ° wôÚm[p (¢財Ye=AÆ­ÆU(F6ãŒzb¼+öâøëㆯð×Á¿³:xzüXñGü#öZ–½k-æ¡[Ceuy{-´RÄ÷ –öR$q c ,±î` çÎ~1üxøçû#ê_mþ+\iWÅŸ_Fµ·ð_††ªêÚqðþ©x¶ÍåóÁÂÞYBMÇŸ^P%„`1£^«­—žÛuë¾×ºZ¦ŠåíÑ7òI¿NMöèÓ>¼1«¹AÚr8éCF®Tº‚Tädt>¢¾Oø¡ÿzðOÂoÙËAøâøÚ S»Õ4ýN »Ý JºðÕÖ›s%µåµØÔ5KtšTšÐ%£Ü™<¦)¸-¥ñþ µà…Ú{j>ð—Äè6~ Ó¾!jº¿‡´Ëw´Ñ|?{ö£¡qö›˜d!VÆwhbI'*2±¾kQr½º;|Úm}é6žÚ>Ì—£·[_ñQûîÒ¶÷kº>Ÿ¢¾uñü›ÂÞøÉ?†,<#ãÝkEÓ|K¥ø3Vñ}µÐôgQkQke!šî;©\ý¾ÏsÁo,hgUg W+áoü›á—ÅßÚ^×á·…-õ²umgRðæ‘¯´úséú¾§§­Ã]ÚÇoã_ðY^ížâÒ$û3yr>øŒµJi4·½¾I?ÊQkºi­Ð›JîûÁÿ'~ÖwÙŸN´jì¬ê¤¡Ê’9J<¥ó7í]øÛ»ãÓ5æÿ?k| ø‡oáï‹7“è_kðÞ§â˜õ;¨ÂéÆ×MòšñLÙùeŽ9Òm„ Æ;o’øóþ ½áXCzþø§©ØižÓüsã í4Ë@ß´{Ñ+AqªÃ-ÚLϲÚîG‚Í.¦D¶²  y‚u>/Æé_·Â÷ìÊq}¿­6ïñ/½Q„ Ĩ·SŽM VBꪆ Ç&¼“Ä?¶¿ƒ|5Œ$¾YtðOŒt_j+e`÷ú·ögÙZ/Ÿæ‡þ'V{Üà®$À;Feøû]i_´‹üG§x ÂÞ8¶Ó|1©êz-λ¨é©k¥Ü^Ø^µœðÛÈeß?ï#‰ xFë j-ôþ¬Ÿä×Þ»‰ég¶‹æöüŸÉ6zÅ5#XËÕT±ÉÀÆO©¯˜¼{ÿføeðÿöœ—á–£o­ÝKaâ ?ÂZ¦¹úp°Òµ{áÙlä¶’ñoæ,olÕ¦·´šÚáD’.É|ªšÇü{@³ñÌ:'‡þ|b×F«¯êþЯì´íÔÍ|ެÂîQq:Åm¶epPJ÷¢¤¶{~æ­ÞêÛ¡ÉrÞý?àÿ“¿k;ìϪ© ሀÀ8çò—Å?ø+¿~~Í^ø©®øSÆ-á­}õ/’{íK¹ðåÅ„ïoymxºŽ§n’OÐÜGåZµÃ;@û ¥ª|qý½îAyðÄ·š~¡oð×V±Žm¨:wˆ¼LÚ|³ý¥æÌ†kTuXL´ rò6Eq§)Ï‘-y”_“{_ÖÏÖÎÛ1v]ÕþWKðm_µ×t}p±ª³P rH~´µóOü{ö‚øðx|%ðßìíc¬SâoŒNƒw©iºuŽ¡u§[E¦__¿ÙᾺ‚3ýˆÒoEŒLv—«XøSÿ!ðÇÄ_ŠZO†-¼3ãØôM{WÔ¼/ øâêÆÑtêúbÜÛ[qË]DËö Cl“Ûà †Ò_.GÌ~dÅs&û_ðI¿ÏæôC’qiwWüZÿÛ[ímYôu#F®Au©ÈÈèkæÏ†ŸðTŸ|Dð‚¼Káψ>ðŸÄ0Ç@×|@øUu⯅Ú7‹¼E‡…-<_w`‘Ùi×66÷7×+os%ýÔö÷ =ð‘%™bÖ]ÌÐÄ“î¶ßËFõù'÷•éýuQüÚ^¬úcË_3~ѿݎqéšo›v&×ÎáŽ=së_-ü>ÿ‚»|5ø¥ðcþ0ø£øË]“Äž1ŸÀ0èº=µ¦¯± ¤÷oIeu-¬‘ù6Ìÿh†y!PÀ³¨W)ÏþÐ?ðS=VÓÄšð#Àž7G·ñÿ„¼)â¿jšzèþ›R½ÓÍÆ—>ëÁ<—d¾7ÚÃ<1ÍÍ)Ñ•Z¥¬œRíï8¤ïÛÞŽ¾kº¾nqårodßÝtôïxÉ[}go¥>9ü Ñÿh?E¡xÏQñ†•k Ê]Çqá¯j^½WUeíZuÄ2”öc,Pœ¤ª‘oàÿÁŸ |øg¥x?áVš4ßèÈËoÏ%ÌŒÍ#I$²Í34“Jò;ÈòÈÌîîÎÌÌÄŸ‹þ ;†tëM>þ>ø±â½gWñ|Z~›áMÒÊam¡k_Ù÷ âóPXG“çÀ‚f™~ÐPºÇH”ê( j\1PYxŠZ( €À†äDEƪŒ´P?ñcá†ñ³áˆ|ñ›Å:túV¥ ½Ü¶’Mm4f9Qf…–HË#0ÜŒ¬3Á­¥hvz‹m¦èö°[iöP¥´ñ X¡‰*¢¨à(=Z¢¯çúÿ¼¶òým¾ËîC^%“o˜ªÛNFFp}E:Š(¢Š(#b@±(UQ€À´Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s¾ØüVÓ,bÔ®õ-2÷J»[í?QÓ¦]XΪ˹ +)ѕՕ•ˆ ×O\ÿįŠ:/ÂO&¥ã{™a†{ˆìí↠...çâ8aŠ5/#±ÎAèO@M'ý~ƒWèbi’ßPÒï|Sâx†ûIÕµ ›PšŸe–ÛËÅ "G²wl"©-‚IèpµÙH½Ôá½ÐüAâ}õ¤²Og%±’X¯îMÌñæX`+¦× ÁcÖ¶ü;ûFxÄ×öv°ë–·×ÚŸöIµ¾Ó&³žÚ³Kt<Ä™T„1Bä2îüÞ0FCž´8©oý]~¨”í·õ«ýnyÔ³oá-GFŠëWšŸ…m¼!+y±ïKHtGSåàJEËäW…ÂŽsÃøÓöcñ±ñ¦ÚïÂS +­®Xk×Éý´ÍäÖÞQ,Ö?d•Ì(¹>På7ŒW¾– ÷ˆ¨Ü7c#'œU]óóõ½ÿþzŽÖM[[òÐóßþζüYöï ëþ ¶ÒÖò{äÑA¶6I$ÅÌ€7‘çìß#8ÍÚð1PþÑÿ×ã寅tíB+6Ó´Ýn=CPy]„†Ý#<1…o7rÆÁˆºœW¤n±‘‘Î+øŸñÓAøG©é¶^+]^k½V)ç‚?K¸¿.žk²ÀŒUWÌL“ëSt­åk|µý>àÞþwüá̯‰?³^—ñ#Ä•ô𯽤G¯ØÅ¦ëvº|°¤:Í´eÊÇ1x™Ó‰dBÑ21W#=1‰¿eí;ľ1ºÔÿá!ñ=…þ¥c«ÝiV³@,înm<‘¶øZLbÚT8h8wžñfã Xk»Š÷MÕ [›YÓ!f†AàŽ;ïZ9çéÛ•ù¯ó¿çø‹I«ÿ_ÕŒ_xÓáîse¢És,WW÷z‹ÙY„—7Nàmå+:€I<ž{ųÞâ«O¥ÕÖ§þ Õ­µ¿´Ã" tû»xàŽ-ÉBß³FØpà’ÙÈ8Ø9éE+_wù!íýw<ÿß³¾›¡ÞXÞꮹ«j¶ºãø‚{ë¹"óo®šÑ혱ƨ±¬.R5@6/^wSø…û'øOâWˆüK«xoÒûÅ:LzMÌJªmÕ$Yhr§lÛ£€î9¸Ž},0a• ý+#âŽ,~x'T×üJfû‘l÷SùI½ö $í\Œœ”4ŸõåoËA«ßMÿàßó<çÆ±¦âÉ.ÓOÖ¼G¡XêZ=¶…{g§Il#ºµ· "RÒÀî˜AʬÈ<ç«Ö>h~ Ñ|i§ë?l¸´ñÜžn¢",‹h­‡’B‚¸X;ˆlž˜²pw¥¦õ½úßñÕ‰ifºmòÓò8Ÿ…ß—á·ˆµbûÄ~!ñ.©®Cmo=ƪÖùŽ;3ËXÖc ?|ä䓞¹ÏmEÛ¸QH6ý¦¿eýö¡ðÎkâSÄ>Ö¼-ª&¹áïèImªh7Ëùöí"Iî†yâx¦ŽH¤I]]æ|#û&ªxOTø¥ñ7âgÄMoÁÞ(oÙjýÆžŒg:eÞ›ö"ÊÊ#·ßNûbŽ72mfv±ý£ÿi¯þÊcñ7ƽFîÊÂîþßI±·²Óî5+ýRúáöAiigk“ÜÍ#gÆŒpœ*’9þß¾ø…¯hÚNoã=/YÖ|LÞ];[ðÅöwk|4ÛLy‘^EZÖÎgYÓ|lpœ:n×åïøéøü7ëk_KIÙ7ÙýÖwù|^[½ÎÅ?ðJ_ ê~.ÒµïüBø›à½gN›ÄÞuæ>˜òßZëú¨Õ/íÝXL!Apª±ËŠtŒm2±ù«~Ïþ §à+„~$ð]ž¥â˜ô|,Ó~\²Ü[‰`Ò,a¿†b>FÕº+©Ï¹Ê´d¤xpÁ¾…óh;†¡ÏZ‚ýâN9ªŒå¸'£ý9¿YIúɾ¥:’sö—׿Í?Î+îKd|-ñ“þ ÍñÆŸ¶m®¥ðÎ{O ü(»ñ¦ã­q$š=VÿLû™›BþÈn%û¼;—SÜ à íŸ?`;àʼnu¿…ßþ!iþ}_P×#ð?üJßC‚êùæ–䤯ÃûCÊiîfœBnÌhïò¨@¨¾û¸‘’2z7År7’;ѸAAl›zŠüb—d•Œä”ímû¯ø¶Û}ÛgÏðPߨŽÛ³IøcáßYéxwÃÞ5¶ñ½-Ôò%ɰ†Úåeµ·DR²‹³"ZM…PÛ\\um¢—ö’ÿ‚pøkö’ñþ¿­ÝøÃÇž·ñÖ‡oái^¸³ŠÓÆš\;EixÓÚË4 -åÜF[9m¥1Ü2—á }HX)ˆ¸ô£'eÞÿ6’û¬–›}å¹6Ó¿K|“rûî÷ßnÇÍß?àšį‹ú¯‰Gĉz¯øCñn«á]2êÁt}GUÒÅ­n$2ÙÉr ¦—eÄ“¬l±îÚçÃð;àŽ•ðÂ:†‹àëBæ×R×µJ÷²#È·–¡q¨NªQyk-ÔŠ€‚B˜‚DZ¢…&£ÈžŸðߢKÑ$KÕ[Óðº_›ûϸý€tí7ö‡Ö<ðÓâÄ/Câf×Ä!ðæ•ý–úN¹PÃçH×V]ÁæÃko«mq ¸ˆgfÓÑ`ÿhZŸîíu¼¾ñÞ»ñ Oq _êãT1MˆFèûfëËUÚãd[ðÛý¯#8Ï'µFn)El¿KYz++-—@~õï×Å}ú»¾·>X×à“Þ—Yðö§ðëâÄÏêšñ$ {¤O¦É=ý¦½ªÿjßÛHnìf/Úp[q ÉËæóVî™ÿÉð‘áÝ'K°ÔüW¦‹¡x/ÃÖÊ.mÁÞÔŸQӉž7É4…f ÈAù«èªMÀ±\ÀdŽõQ«8ÞϪ4ä×ã)?Y7Ôm¶îý?ÿöÕ÷%²8ÿ‰ÿt¯‹.ðµâ+B¯‡Zóø‹MKicžá´ûÝ<¬á‘‹Gåj6¡Þ¨w`o&øoÿØð¿Ã?‹šoˆ4¿øòïÃ~×5OøwÁW6cAðî«© ‘ywncµK¹ hjb¸¹š(þ×&Ä\GåûgʼnÚÁ†¾"ñ‡Ä»ïìßøOL¸Ö5[¿&I¥¬4²ÉåĬ﵎ÔVcŒO·ësI ÊH¡”㞆¢îÖéþ×ù ·eOºÿü“¿®»žã¯ø&ßÿ‰_±wƒ>xÖM~ûÁ~‡H·²™®b[û˜´ï-V9äež(Þ Â¢‡Šy”lÝ‘Ïøãþ 9ðßÅš_ĸôMKÅ^Ô>&xÇLñÔú†Ÿ-£Ë£jZ|ñ\ÛýŠ+‹i`òMÔs]<3Ç2¼·—,~ø ôðpÙÚAÚpyéFñ·vF:烢j^0Òü{ªø;M›NþÃÕõ­<Ú˜.¦ó¬¤ºPß`´/W£4!ö‡,ÇéB@ ÉéE8Õ”e ÅÙÆÉy(òò¯EË—x§ºD5Ìœ_[þ7oïæ—ÞÖÌñ¿†?±„þ|FÒüOáÝCÄ3_é â·†;™áhXø‹VƒU½Ü'döȰౖæ6|ŸûUÿÁ"5Ó<%Ì—^×G‡ua,%.Í•¥î#'ﯓnwå‡jëj\\muºMz5tþi¦¼‰µ´þ´ (¢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@Q@Q@yÏÇß kZ–¥àïøLMzãÂ:»_K¥™Ò¼ŠKi­ØÄòa<Ôóƒ¨r í#p8¯F¢§ýzž3ãßjß´M×…#ñÿ€çÓ´M/Äh»´Ô¯mf’âÔX]'™,pJ˷Ζ4òù`IeÛšóˆ_³W‰¯ü!¥xq¼ÚŽ…§Í¯-ŠÙ2[Ídñ7ì¿®xûÁºÇô1ªø–ÛáΧisÜ^FòíD—fFGó0²‰çŽN«–ø–iŸ´Œ:oˆ¬4wÅ÷þ2ÑnìµDÕ-¤Ôt«û3=¨´ÞnT$îÅPFÉ)vläWؔϳGö7ËO7wí±éŸJÑK÷Чíÿos~zz|ï)Z-y[ðKúó>kø?ð Ä~øõ±ãM+^ŸR‹XÔ.g×íåÓÎþÖa7”³8?m‘B´( `U5*B¨¯AøÏð“_øƒñ·Áz…µMOAÓô½7T·½Ô¬ ©ž#1µòã p’ŸË™P‘³¨ÈÏ«QP’J+·ùXoVßó¹òOíû,ø®¡Ò~xZòæÓÃÚ§†µ[)4Õº‚x¤‘ÛíWWgÏkleû0MÛØºKá‰bý¦®üC¢xVæê;«¹d›RÔ^È´‹6‰~ÁyÂêÌ|‰"hÁwl޵ôm5}üÿÁöôü“üû<øÇÃßüI†|*šeöœšn¥£K~–Vúž©i;Må\ËgpðÎ@Cq ÛÎmÙÔÖÿ²ÇĈ,|A`uråt Ë&ôÝmoíA!ûb­¹^ ‚”^œTãêª)÷óÓïV§Ü¾bѧæŸÝý?½ü¾e‹ö|ÔõÏx–ÓÂ~¸ðO‡µ{Ÿ Ð–þÞ‘­¯•ïn×ìÓ‹0lMÊâGò3ŒíÍ/Úöa¼žé¾ø{‰ôëÝ+ ˜n-b‡Ã7>lÏpûn%RŒí$ry‘†fÙ´à úžŠ³¿ÿ _ä÷®ßð Â{ Z( IYX(¢ŠQE|ùûvü*ñ‡ˆõÿ„>ø/á¸|q¨ü"ñlž ¸ðɽ†ÊãX·ŸK¾Ó¤û× ° ¨…ø–5™ã¶2™Âøáð£ÄßðP{„Ñüyø©xsÁÞø‡%þµ¢x§VÒ¯'¼ÒÿáÕ­üë¨,nç…¢k»Ëx~βÌάK M¾À¢švÑ«ëu~›—õ¥ßM4qõMIíÝ<¼ïùUñçþ Ññ \øEà߆·ŸŸÄžе&ŒÚ*øbóWðŠÜë®úÛK¯I$6ÙÎëX¥ºƒÈ…cÛ´ö?¿àšþ;øûðSÄ×_|‹>$i¿³×‡tO __jIqcã‹Xu–¸žÖV¸"Þí'¸°azX}ÿ–b<Êý$¢®8É%»Nýn¹µ¿ý¼ïè¼ïNIÔç²ôénhÊÖíx¥nÍú¯ÉÚJ]@ÿ‚’/†¼e¥x/Åÿõß‹ž Õ´Câm2ïÄÞðú)ît”ÒÚc©[DßPš_&jÐ]Épòï.•ê_²7ì'㟆·d>,øÉà¯Üx®×Æ"Õo>#é×^Iñ•zoZÊÒöq ÖîaŠì¢[c0Á5”-yPÆOè¿Ø¡û_Ú<¨¼ý»<Í£~ßLõǵKNgN‚èå÷8Â6ÓÊõm·vÛ2œ®–Í/[®k»ùóhºY%±ñü‹HñLJ˜lF¢…øò๠ÍÏ’þÙ¿ðN?‹õ­áWÂ[¯ˆúqøm£ø7ሶ,`oƒzµ›Þ+êo5ÝÌwVÌÆ]6äÝØ$÷ Œ¿,{¿J%wVuRÈr¤ŽWŒqéN©¥7Eiü×ÿ%¦ªÍÊWM;ÍëcW6Úk·®·Nþz(ÆÎêÑó>øÛð—ãHø³ñÃøoâè¾<ø§àZø¶Û_ÓmôÝ;MÓßÃɨC,3]%Й±ï$ò£…’D—‡.LgÙ¿aÙ‚Æ~*ø…áï±øÿľ1ñMÓjÆöwÒ®µÛ«›(ão5ÖZÛì’y °+Y…ëèš(Gòþ=mh«zZ+ñ½É“抃ÚéüÒkõ¿­­çñû.êÚ7ü#Æ~*øÑð>çâV©¯x®ÛVðoÅÔ4°žÑ—L¶·:wïîÒþÜGqó˜-`’þÛ¹Û/(OÓÿfÏÚdzv‹à=Ká_‰¼;©ü>ýü[ðÔj—~(Ò¤‡Äšýž œ–~MëH"”Ø\:Or°²n"E ·éí©ÉÁ(î’µ¿í×ó³m½äõ•Í#VQ©í÷Oîw·§—Eµµÿø&„®ÿh…öÞŠ†^ðψŸ\‚]RW†ëY¹—C[i/Qç2ßÈñYÞò‰T4A؇òØøçìŸûøçá—í¾)øÁàŸÜø²Ûž#Ôîþ#i×^‹Iñ•zo•¥ìâA­ÜÃ3ÙD¶2Æa‚k8Z6ò¡ŒŸÒ (”å.½$¿ð'wþKËGs*kË×Kÿýu?/,ÿà:õ§ì³¢x{Âÿ4]'Åþ3ýµï|@¸šþþÖñKÁ¤fhÊ%svñM£åÜ1aPÁYU‘OП´Uœÿ‚(|b_ü8¹ø*,>x–UðÌaºD¢Êé™÷é³Ín7¾f ’ûÀ[kîQõý6HÖhÙ&Uta†R2ô"гuc(ìŸá¬¥ùÉèú![–¤*5¬]ýomÿð~`ê_±·.¾|VÔ>~Í¶Þ ðoŽ,¼)§_ü9ÖeÐ5+ÏÍo©Í6±­Gj/¥Òä¼6—,r^\n¸’ÐЄŒ>>•ÿùø¤~Çßð‡øÃáGÄ­ÃÚoÄûÏxwÁ’ŸjPÚi’éQ,pjº3ÜÚèóÚ-ì×®¶Ö¯A*Ã${Š™Ÿõbо;/‰[Ï⌷õÜÚÚÉsÛH'ö{iw—oMú·«mÞÿ™šßìqñbïã7Á/ê_ô½OÆ>Ð|)¦ÝÍs¨øÁ¢ÖäÉ~t–ŸQMcI¹Häoµ[¨§0Ú+ïT$VøÇÿñý£®5OƒÚœözv®j~ðLI¬¢5׆¼O5ÄúÍô„Ìo§Í¨Z5¼d,t±† ŸÓÊ(æ|ÜÏ]dìõ^óWÑ÷IÇ¿,¤¯®Ž?»V†šE]n¹SQ³ékßÕ.Çç'‹ÿ`¯Xþ×zæ‡ðª]__“â'†õßü[]RÂðO„ì"ÓRóCÜ÷QŒ4ÿ‚||1ñ‡ì»àŸ~Ï“|<Ð|yñ]o´Ïéh–ð‹hréšu´×ì–7Û`Ois1¶…̇ÍÀ©û.Š)N£šIôQ_(Æ1_úMÛݶúY(Q³mu»ù¶Ûüíè—[¶QEQ@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@Q@y—í­Üh¾*ø^,ï'´ŠïűÁq²cͲ¼;]ʧŒ^›Y>2ð…ñLK/ˆ:.“®ÙÅ ™ Ôl㺉…‘H †až¸'Öš}šs¸šæMwM}èòoŒ¿´_ˆ<+âOÿ ÞLð‰o®^¦¤’<ºÒÊÓfiEXp eV\Èê»Fjxƒö™ñ ncÒ$ðÅŽ‘§ø¯Nð»é—°ÈÚ­é¹û9{ˆØL«…¸Ê¯–ù³:Löð_ÙÞO‚¼&ƒGs-ˆ]"ÝE›–ÞZ ä;€lŒr3Ö°|eû/hþ<ø¿eâï_]K6Ÿ=½Ô6«ed^1ö¡oö£ucó¶–í–ˆi(ßkë÷¦ÿ «|Êz§ýt·ç¯às>ý£!Ò|?¢[kתVãQŠÊ$»œd<¡w6p3“Î¥Uо ø7Â÷×w>🆴û›ô’+™môÈc{„“DvU•¶ŒƒÁÀÍG+q³}?F¿7•‚þÿ2Úÿ­ÿ-?÷Ãé59¼bþ.½Óu÷sÜX@ðÁ <®Õy$oºFIs““Æp6k;¾Ò¼ ¡Ã¦x+M°Ò4ÛrÆ+[+t‚Ë1fÚˆ$“Ç$šÑ­$îÛDArÅ&QE"‚Š( Š( Š( Š( Š( œoOê>ø³û1Ç£j÷ÚU¦¯ñ],u‚ííã½·>Öäòg ÀI’(›cdnD8ÈóÛ?þ ñá/Ä‹cà{ü8µð×ÀØxû^ƒÄv×3ÝxÎ+™5 Ùi÷0ÜÄ–SK–1pñ]†šâ5ò€ŒùŸSühýŸ¼ûHøV öˆðG„<{¢[Ü­ìZˆô{}VÖ)ÕYVUŠá…‘Ô0Øg“\¯üûà=Œ~K‚Ÿ `À·wá´‹Â:z.3Ê&i,€‡îeU´{Ip¨Í:/‘ûßÍÂ+n»^Û;—'Ó·ÙI­¶”¥¿švîžþ ÿÁE¾ X|}Ö#ðµÏÃ}3Á¾ø£áß…óøkS²¸ŸÄúÌš˜ÓMBÖò8í’8õMé ¶Ÿ|v²HdPÛRÇÁø(/Ĉ|ªø¦?‡Éð÷â‡|QðÿJðäwPø—@›F]T‹Û«·¹h®„§D›Ì·[X "òÞɰù¾“ñkþ ¡á_ßµæño∵›«êÂö×FFÐâ‰d±u–ÙN¦ºpÕL+p‹p`ûo–dê» Œú¿‡f†¾øËªüEð§ÃïéŸ5ØŒ—‰­t;hu{øÎ̤׋–E>Ty Ä-?º1p”}Š‹^ÿ½¯—,ù¹)ËûªI+ÙZ$­'­Õ—–¾÷åx¯ï8»îψ?iø(ÿ~'Á>ôÛ߇7Þðߊ¾#~ÍÞ&ø™u{¦ÜOööÒ×K*- s¬‘ êWa$-¹$‚3“±”ûßíŸâˆ^ÿ‚K|_×#ñnƒÿ îð÷ZÔ-õí ÆæÊÚ–sH’[!»’XåX€Û/žq ’½OÀ_±—Áÿ…~!Õµ†_ ¾x{V×’ê=J÷MðÕ­Æ —Lr“IA¤Yš(ŒŠÄ‡1¡líÙð—ìñàü“áçüá À2ÛÜY¿†¬´{x4‡‚๞&³DÉ!u+†ÞÙ&¦§%H8µkï÷ÉÛÑ&•úÛSzuT*S¾7ê½ßÇG÷ýÿ0| ñÄ_Ùëâ1øAðÇLøhžøyà+ÆzõÕµ–¦o5&¾¾ÕRK{ynå"G‹LÏ4îD¬II˜ð—ü/â¶‹ðøóâD? 5ȼoð3ZøÕá}3Eµ»µ›ÃbÂ+9WMÔ¤’ê_·«JûTKióÚÎ?8òþü³ðn‘§xšçZÓô­6 föÒ ‹øí‘ng¶…¥x`y@ÜÑÆ×²!;TÍ!9â|#û|"ðøÅ| ð·áÖŒ¿ÒHüR,¼9gñ"Iæo[ð‘µ+yÓdK¸1ó÷Žtu¥'%{ß×i~® vä·Û‘ N7Z.[®öQ¿ÞÔŸŸ6»#ãÿŒŸ·‡íð:ïãøŽo‚Z’|ð†™ñ/Rû.ƒªDÚ¶•v×á´˜7_Ÿ*æ5Ò®¿mÈæX´L1¯{ÿ‚¤x¿Æ ý–ôÝGàŸ‰-<)«Ÿx>ÖKû•£óø‹N‚HßÈžòœJU߉!2Æq¿rûN·ðkÂ&—[xSÃzƒø›M‹GÖçL‚SªØÄe1ÚÜ–Sç@†âãlO•_:L½³sÇ¿´о Ô|9ñ?DÒ|Gáíbm¦jv‘ÝÙÞÄzÇ,2ާÑ3”Z*ÕJûïfš_…¿ïy¥xµÌïÿ ¯øÝüÒ胴OŽ~üyøÁâí‡zï„ìþ/xCÃ>#±—K¿KËÙ5]'ÂöK¥ÉöÆŽÂ¥¾)äÈLŠ^3ûÆëÿe?ÛÛã7íñúÒðx3B‡á&©âÿøBDkx­u-és_[¥Ü·¯ª3^I4ÚxV²]>ˆ]«y², ÒýQáßÙÓá÷„<)ýƒáOø;LÐþÑcwýŸk¢ÛCkçÙ-ºYKå*ßn¶Vkc1‹hBå®3¬¿do…:oÇ ¾&éß ¾Áñ"ã&_GáëEÖ¤&?(–½ùĘÿvNîTéÅ8Ê1²ÞÊßù,VÞªMvæÓdUGÍuYéúþ;?;YîÏÿ‚‹þÖß¿fKý"çáU®ƒ§x3Oѵ Åž'Ô+~Þ´7„~+jÞø9¢xÇçÿé¾1Ö&‡H6¶¾,Kéï„6¶³]kqÿeÆ‘iûùþÞ¦Y²bcÛ'×>ý>|,ñOˆõφ_ ¾øwZñŠK½¦xrÎÒçZYX¼«w$q†œ;33'q$œšÂÕà³ö»áhšßÀß„º7ƒŒÇA°ŸÁÚt–Ú/'›7ÙbhJÁ¾OÞ6À77Ìry¢“ååæéoÛ¾û¯[keaͦ—Vþþ_»ák­¯}÷ðÚöïøÕàˆ¾7ºø]mð¹|!àŸˆþøuýŸ«XßK©jSkvÚ7—tná¹X Kiõ¥b‚LÉ 0œHÞéûüoñ§Åk?‰>ý ŸÃ7ž,ø_ã|+w©x~Â}?OÕ”éö:„3Çk<óÉòµ(ãd3H7ÄÌ ô½Càׄ5a|5_ xnäjz®·yæé?Úïí|³]Ë•ùç‡ì–¾\­—O³Å´‹MÂZW†o5;iš~Ÿq­Ý}»Q–ÚÝ"{û*8¼é™@2Iåà {Û'lh¹Â€4§(F2RWmYy?ÝëøTÿÀ×ò«L¯+[Ëÿn¿ßxýÞzèQEŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( °¼kâMGÃßfþÀ°²¾ó·yŸh¼k}˜Æ1¶'ÝœŸL`uÏµÏøëþ]àû-bÿÂÈñý4_üËÿÈ´ÂÈñý4_üËÿȵ yçÆÏŠú—ýRÂÿf;ÜY]]¬1K$·òDÐ*ÛÁå¶C¿œØ;_8ëG[é?ð²¥3ÛÀQ×k·Ì2UðpvàBÔ:Øíÿádx‹þ€/þeÿäZ?ádx‹þ€/þeÿäZæ>&ë—ÞðœÚ†¨hÚZÚf[‹J &‰P)ùBÆèKØ=øàVˆüs­iß ¬µ›=)âÕ®¢µk‹f¶–çìR‚Vhbd‚0ÌJ® ÛÚøˆv;øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù¼žÃãܺM»\ø¢çHÔl …äñÜXA-»5ű Öï ¬Z97!$å“‘жŸµÍ/Äsi>4°Ó »7šu•»Â_Ë–Y>Éö¸ùcó » œò ç®Ò_Ö¶vþ¿¯ëÐö/øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù¡¬Ox’ ÙiòX,N×z•­›ù€YUŒÎ ÇocKª]Ú_{°û³¡ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘jÅñG‰fÐõïÚÛ$nšÅûÚÊ[9E[iæpzî…G9àšè?ádx‹þ€/þeÿäZ?ádx‹þ€/þeÿäZàñ?”G"ùX3Å+é˜íÐï?ádx‹þ€/þeÿäZ?ádx‹þ€/þeÿäZó;ÏÚ‡ÃV7ztwõc¿µ¶»yO”>È—1oC'˜Ç·–®±šÕøyñ2çÇž)Ô “L»Ó,`°³¼µj‹<ë3Oóá$pˆ“ Á\Û‡J«oä-ŽßþGˆ¿è¢ÿàæ_þE£þGˆ¿è¢ÿàæ_þE¯0Ôÿj?é7º­½Õ½ñ“Kp…£šÕâ›÷ÞIo0O² ŒùÍçž+oÅÿfÒ| ¥k^²’ïûJêÎ1l¦9%dšERªË'–[ Ão)žrE%­šêÒûô¥Óþ¬vŸð²™+ J$Ä–Wsˆüäò¤l«' ‚\Ûø{ñÓFøa¨Üé«sk™]JÓ´N .•óŽÙFîå6M¾›ÿ_×^ÁkÛÏúþ½Ws¹ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘kέh;;«Û[5ЛY°°±žóUÓ-$ž0³Û´2ºF$*Áe2G…bNô\…8É+v»±êŸð²‘âŸXÛ,M­q4S²„äH8(:ƒÆkn€&ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘kÇ4ÚBKoë+â¦Ó¥Ó4¸ïæœYÁ"ϧ­½Ñ‚!)f+!˜WnÜÑ:Ãä­È·ûA„í”±a?0R¹nª³»]Wüó_z&ê×;øY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù¸Wã'ü#þ5ñ%†³¥Þgh}µçÚáØæV”Èa7î%Š\/PÙÀÚZý·Å›/øF5KX³Ôté4)<›Û9‘â9 #ªº9u–=»X˜‚ å5m¿þGˆ¿è¢ÿàæ_þE£þGˆ¿è¢ÿàæ_þE¯3ñÇk¯ jÈÚ׆µ»{´ë›ë¸™mÚâÕax”²Îc1ív8RÌHàpEOâ_Ú7B𷉯´½BÙe±ç/nöó vD%(e2#m;xnóM³ºÓ¯~ÓÓZ‡ºÕn ˆže$RÒ =pXdc$g§í£Î öº~³.Ç×ëbL²´p™°…e*­…‘¶ƒÀݵ`•ö=þGˆ¿è¢ÿàæ_þE£þGˆ¿è¢ÿàæ_þE®"óãf™keÐÚj—-5½…Ìpà ™$Žé €X Ù·dàqÉíÄÿ‡†ìôÑý•ª]êZ°& >v¦÷ÞÍ"Æ»ïÁ$œŠ%îݾ€µµŽ£þGˆ¿è¢ÿàæ_þE£þGˆ¿è¢ÿàæ_þE¯2пhKsáÍ"ç_°¾‘§±°ŸQ»µ¥”×J¾Zòo;™€ùCí ¥ˆ56›ûCÙêÛyžñ%´ÎC<ÑÛìŠ+·òà•‚Ì[k>F,¸%”iÛV»; ú\ôøY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù¼»Tý¥t”Ö.´û%š‹Ø`y‚î9Ñ®VÙäÎJÌï6²ä‡k£ø{ñV×â$ÓEm§êzl±ÚÛß"^¬jÓ[Ͽˑ|·lcq†Ã r9¤µW_×õú1¿ws®ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘kÈö¹¶Ñ4]O_ÒdÓ¬ï5kû €Ê³I*@—;<‡ç/! :–ÇjìþøÖ÷ÆskÃZÓ¦ÒÛLÔE¤vÓl3"}ž ?xc‘Ð’eb ·M¹ç4-?ËüÆ×.çYÿ #Ä_ôÑðs/ÿ"Ñÿ #Ä_ôÑðs/ÿ"Ô4P"oøY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù¡¢€&ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘j(oøY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù¡¢€&ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘j(oøY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù¡¢€&ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘j(oøY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù¡¢€&ÿ…‘â/úh¿ø9—ÿ‘hÿ…‘â/úh¿ø9—ÿ‘j(oøY"ÿ ‹ÿƒ™ùøY"ÿ ‹ÿƒ™ù¡¢€&ÿ…‘â/úh¿ø9—ÿ‘k³Òîd½Ó-æ¼"šX•Ý˪1€Xß>‚¸jî4Ÿù[×$þB€,QEW?ã¯ùuÿÿìµÐTsÚEuµE›znPqùÐUeÑ-gÖàÔe‹7¶ÐIm›ËŒŒëŒàäÅÉxêsè_Ù6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…xÊüðìW3Mi¥m,ÅÊ´­Ô?fÞþcˆ6J<•g™ShbAÀ§þûÛ&Ÿ*[M§ &XRòuŽkpXªº‡Ã°Þøs—<ײdÚÿϵ¿ýûáGöM¯üû[ÿß±þ-4AÖçŽêŸü1­jWwšž™ç\ÞHfw72‚’ó#ÃþêLA6°Ø0zÖÅçƒôÍGW’ûQ³ŠâêK_±3K—NâÅ“’y dàg8ô¯ì›_ùö·ÿ¿cü(þɵÿŸkûö?‹iaÝž1£üðƨ[ÜiV7Q5¨ýÔgP¹hPùA(ÈP¹‹å.Fã×9æ´‡Ã]`­–Cin'ú»Y ½ü IÏSß"½Wû&×þ}­ÿïØÿ ?²mçÚßþýð§v#Èí>xvÆÖâM8$wWÝʾ|‡t±Ü5Ê7-Æ%vlpF8©|]ðÇGñÆ«c}âï¾Ù¦,‹k5®¡qhð‡À|d^ }¸¯WþɵÿŸkûö?Âì›_ùö·ÿ¿cü)ä^'øI¡xÂ@úüÒ:ÝGz­£s G2G壡ŽA´…ôÇ<õæ¯êÞ ±Ö¼?™¨6 míöÝ/çŽáJ}ÖóÕÄ¥½Ilžsšôïì›_ùö·ÿ¿cü(þɵÿŸkûö?€<~Oƒ^¸Ñììo´öº†ÆýuHÚâæY¥k¥«ý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøQëîÿ%÷ 8zËñ_†WÅ6ÖqÉ3B-/`½.w¤Û8ÆkÓ?²mçÚßþýð£û&×þ}­ÿïØÿ :§Û_¸<޲|Yà­?ÆÐZǯ-ßúßh‚KkÉ­%‰ö2ed…Õ‡Êî1œkÓ¿²mçÚßþýð£û&×þ}­ÿïØÿ ñ[à‡µ {Ï*ÚV¸¹…ÑMÝÝÅÔ +CäùÍ Ë†—gNŒüÙ$Ö!ý›Ù<Ö1k!µ9µÔd¿–;—df„BV2.D£(ªù_w;èŸì›_ùö·ÿ¿cü(þɵÿŸkûö?•®Öÿ÷ì…\ÊÏж¨ñ?|ðö‰áË}>þÞmHƶ‚Y®î¦™¥kcº/¾íµe„@ìˆÆ Íý#ቢZ¥½”z‹ÛÄêñÃ>§uÖÿ÷ì…Ù6¿óíoÿ~ÇøSn÷o¨-4<ƒÃ?|=áè.´[K´ÚàC,÷³Ü4*¨è±©‘Û«$€'݉k7ÀßcðoÄ íwí«"ÍðÚÚC‘Ãl“L²¿+Œ–EÿV#_¼J’r=Çû&×þ}­ÿïØÿ ?²mçÚßþýð¥}yº‡K=eËᕗưk&f ”–B-¼ò#îÏ·–=ëÓ?²mçÚßþýð£û&×þ}­ÿïØÿ :ßúÚÁÒÇ\÷Š>èÞ0Õ>Û«Å{ÓB-ä’ÒþâÌÏ$„—É‘|Å›³ÇN}gû&×þ}­ÿïØÿ ?²mçÚßþýð $¸øKáÛ»4·ºÓc’íîmUG Gq"É0ûßÄè­ž«”Š®> h^d?öËÜ[–ÛpÚÕãNÊÅIå3oxòŠ|¶%r3ŽN}û&×þ}­ÿïØÿ ?²mçÚßþýð£mC¥*ð÷Ã]š¡½ðí—Ù.]dGtšOÞ‰%i›x-‡Ã»•,Ýì‘T5þÔíá†âÂeŠ8+äñ –yL²Ç.×llä±ò½±Ž+Ù?²mçÚßþýð£û&×þ}­ÿïØÿ ;sÎôŸÙèZWØ´¸;]Ò7–I`K³;ýâz³1ük›öyÐ`Ò>Ç FÅk7‘ÿ´ne“ʶ¼qFí.èTn`6ÆkÜÿ²mçÚßþýð£û&×þ}­ÿïØÿ ?¯»PécÅõ?€ÞÕ´è-nìn„0E4ÊÔ.byÒWß*Ìé iƒ?Ì|ÂÙ9=Í?RøácS¼ºÔìn&kñ7_\}œ™còäe„Iå«2 *ƒß9æ½—û&×þ}­ÿïØÿ ?²mçÚßþýð $‹áN­k}ÕîÕ#ŒÈº¥Ð7"2J}£¤c'™7pqÓŠèë¸þɵÿŸkûö?Âì›_ùö·ÿ¿cü(Ìõ¯ ®³¯è÷ï3Ft‰¤™P.D¥âxðOloÏáZ•ÜdÚÿϵ¿ýûáGöM¯üû[ÿß±þäZ¯Áÿ ëvɧ¦$©\°ý쀟´3<ÊHl•gbÛO‚U ±øI¢Ø_Ú] Õ&º²óDs\j·S»,ÆæII‘–‡ceAP@Ï5ë¿Ù6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…+ xgPÕ..ïl®d{’ìñ›ûgMŽË“b³/‚‚}kÙ¿²mçÚßþýð£û&×þ}­ÿïØÿ 6Ä~"|µñ…´Í¡K™¨]^‹Ù®Ùg‘Ëù³Ëž6Lƨ¤Ú@Ã+dÕ½à΋¡ )ìÆ —M­½¢ËôÐ}© ÏŽ'T›ýõ#’:q^Çý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøP´Ûú°=O1Öü¦ø‡Z³Ô58¦7–1Ë REs$9ŽM»ÑÂ0§b¬Ê‚9ª|;}%ΞJÅ ¥ºm¸•J¥«³À Ÿ‘™Žzœóšõßì›_ùö·ÿ¿cü(þɵÿŸkûö?Â‚ç—øKÀºw‚Rëû .Œ—Ò n&¹»šêi˜(QºI˜€ªÀ¬ËŸ‚Þ¹¶h„𩼒ý •Ì/²nó L’¾÷܈BÇ"½û&×þ}­ÿïØÿ ?²mçÚßþýð¡ë¸-6<ŸÅm|AðÖïÃw—§Ø\Yg Xƒˆ!Ú ¤ã!x±ÁçÏÁ¿]jV·RX2µœpD‘%Ì©në Ì>d*Â9 g•.¤Ž1ÐW¯ÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þ=uaäx燾 xsÂé·I³ºÆëf_>þâãËìͧ™#mT,ØQ…ç¡«>#øW¢øªé§Ö"½ûCN.°êIˆ¼£±£‘J)O”ªà7R æ½kû&×þ}­ÿïØÿ ?²mçÚßþýð¡ë£·ÙL}Uœ1œä ¾>è‹l°‚Kp<é?ÕÚÈd€}ïàbNzžùê¿Ù6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…;îŠÅð±Ü4as&]]MBåム€‰B±¯˜ªÛTÆ1Ž+Q>è±& ´’,ÚÛYf;™Q¼›g/ d6~Vfç«g ‘Åz·öM¯üû[ÿß±þdÚÿϵ¿ýûáIh¬ë¹ãWß¼1©ÙËo¨éòÏo-Ì÷~SÞNcŠYÕÖVwâ=ÂY3n×ð‚tÿÚÜÅáõºÿLŸí3Ésw-Ô³I±SsI+3•uÇéßÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…Ôáè®ãû&×þ}­ÿïØÿ ?²mçÚßþýð Šî?²mçÚßþýð£û&×þ}­ÿïØÿ áè®ãû&×þ}­ÿïØÿ ?²mçÚßþýð Šî?²mçÚßþýð£û&×þ}­ÿïØÿ áè®ãû&×þ}­ÿïØÿ ?²mçÚßþýð Šî?²mçÚßþýð£û&×þ}­ÿïØÿ áè®ãû&×þ}­ÿïØÿ ?²mçÚßþýð Šî?²mçÚßþýð£û&×þ}­ÿïØÿ áè®ãû&×þ}­ÿïØÿ ?²mçÚßþýð Šî?²mçÚßþýð£û&×þ}­ÿïØÿ áë¸Òämÿ\“ù ?²mçÚßþýð©Ñh0T`0 ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Š/$Ó¼5¨ÜY¶É µ’Dlµ‚EEýƒuÿA­OþýÛÿñšdesc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀüú"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔj£öðœž)ÐüM¨Þé7šÕÞ‰á­_Ã7^!³¸´’f6v·É-k2ÂЬR;þèR8 ^+y_ׯžú¥»^z Fò²óým×Ñ7²~GØíñÕuû­(ê2ÿhÙZ%ôöàæHàvuYô-€ºkø9ûF_|]ÑôKþhúoˆb7ZeÍÇ“,s[ì’Êbvò7†]ªüœûò{ÿ„:&»ûJM©üIøy1¹ñW‚m­£˜iM{omx©t—PKrˆV6ò·9Q"€ ž•Sö~ø oðÜ|Ô4ß ^iƒÃ â)#ÓÞ78>[ ;Ëù€+Œçp敬›}?ÎKô_R/v’ëgø'ú¿»¦§Ô¿Ú—óÖ‹ÿ4ïß5_|@¼¾ƒIÑâNÈ¡²ÁUQxË32€3Ô×γ׀YT¢ÚJrn;io›†þŠOî}‰~ì]÷I¿[)mëe÷£ìA«Nq‰®¹éÏZ¡¡øÎ}r}A jÓû>èÚ–¹„Æ·Uo2"~üg~êõ|§ì¿má&Õµ/ø_Z¶¿Ðþ$ißðˆ’ãf™¦5Å“\›(³¶+vÞ ¬7n$ ÛÐx¿áf«ã)µ];[Ó|MýŸ¨|S†êCn'žÃì1H˜e„²²£9¥ÍgÝ/ÅÓü¹ÝÿÂÂ~ííÒÿ;)ÿò?‰ôØÕnâk£Ký©qÿ=nëÇ?e?ÉðÖãâg¥_èº ¿Š¥}×ÈhmÒÙ­-X›e#Y”Ì~O—vþù®¢ãÃ^;›‹_èÑè¿kY“xvFœ[î¢ûGÛÞFà$òð2ÓŒù|ÒzOð¿à7¥ü›_qÝVàfº£ûRàÿË[ªñ_Ú×ÃÏ­Üø&_húψ¼e«I'ˆôÛ;9/Zt6ò-»Ëkg¸‰'1³F¹Úäa yž‹ðb÷Æðæ“©øÄÐxëâ,·zv“qð½†ýpMwÛÛµÆüC&IU ¨m-¯4¿[ú&6’W}›üý-óGÖßÚ³œbk®zsGö­Àë5×5ñwÇßi?,®»»º—I‹É¼wñ¶Ä€+É ³Š7r‰Ké<_ð MJÿÆÞ,m Ä7^)·ø§M¢Ü2ÎÒZÙùÚpšKD葲} Hè0Ê„1!Rž«m8¯ý»n–a4ãýzÿ—â™õoö­Æ×]Qý«>qç]gÓ5ñOÆ 6®kw_<âïÞøûO–ÃÅ ŠmaÓRµû<1Ü(LFm•IÞK•#2 =ᇈíkKÍOâ%νeª§‹Mî›}gá »ç¾ÒÜlŠÕµhä0Áj#b¯ Æ›]wüĆ%?ÞrùÿöºzëªòaRÐR×oø:ú;oæ±?µ.?ç­Ý'ö´øÏu\×ϵ‹-ÛÇPé×vqÚËíüQùÈÏn·™,.àPåÓ8â¼êãÂÒè~×íü+ðÿPo†º÷‹ m7MÕ«ñ_Å¡á?ø_E»MNiüUs=´FWd+y'%òAÁXÈ’;s]ö¬äñ5×õògìéᯄþÙjz7‰¬®ü+¯ëÖ×+{¦Knº|MçÙ¾ðeì–R¬è8EbWû.|5×»´MNà•o´]êí<_¸es¦l¯ÂŒ¨u$©¦û+úèßü?k”£v—¿ÃijÎN×Yô¿Ú—óÖî¾+ýž¼±kðþ÷àç†|e¦êŸðˆÜjz…µÍºjÆ[X#içùnØÌQã(̱"6 -lü2¾×|c¯ü?‚ ø÷N‹Ã õ "úçQÒ'´ˆß´v+ä'˜fÃckm­¶«/eηåü~-¿ð¿íåóΟ•ô‡Ãþmü¾ï®¿µn ÿ]u\÷¾-‡òè }§uÿ ­“„®"yØ;î#åYé“Èâ¾[ñÂ?ü,ýŸþ ÁâŸx’vÖu9¼Km7WZ¦£'öUÐtùÒ„$†‹Õ.Ѷ¶>ü9Ô,4»ðo‡¼K¥xIþ&éhzeÍœÑI¦éâÔ¤’ùóÛ@×gT`›D€áwU(rÔqÝ)%øÅ?ÂNÞ…ÿwÍÕÅ¿ÂVüc¯›Hú·ûV|ãκÏÖƒªÎZk >µñÿìñðÏ]пhÈï¾%¾»eâ˜5­Q®ç·ð…æÝjÖ_8Ä.5‘3ÛÉnìílªch’0=oljcøâŸ‡¾ øà¿ê¿ãMJ-OE—Išæ[{Íñ¥¬÷zt[žXñûNÉùˆØ£¤_ÃúÛ×B­ïIvþ¿àúj¯±ô™ÕgfºçÞ—ûRãþzÝ×ɼ¢Ýx¯S—Æžñ~± ÝxRÆßÀVÖZÔ‡D•V_2:uÎæµ>l†,*(Ü<¶®ïÇÐø¯_ý”µÏkúWˆõ?Ÿ‡û®oV֗ׯÄðG88yüÄ$®§<Óz&ßOø?•µõ@•Ú_×Oóüí6ñãø#Áº¾µ{ý¡q‘e5ì‘DW|‹*»ˆ!p2@©|1ã4éšå׉/ôËW±×ÚA§ =#E[NEœ±9bñ9Ý);÷61ÁÝ´þ_|×â’~Kåu-kç÷Aþk×ðúûRãþzÝÑý©qÿ=nê¿þQÿÀ±ý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nê+ß¶›g-Æ£w4ð!’Ydp©’ÌÇ€’iŸø^yûVxRÿÆß5í;ö÷·sËöy^Þ0 ÜÃÌRMƒÔ¼I"ßv;Ð#öÛðLÜéú—Šï¢?v{/ j—PH=RX­Y{©"†ý¶ü:†¥â»‡Þž÷Ã¥¬W–[UEä\ׄÿh…VµƒPø§áýh£ Ö7—±ZOmÇÝx¥*ÊG¡þÐÿ õ]çüSðþ·4‘•[;è®ç¹Ïð¤Q–w'Ð@ï¢ø­® †ëN¸’êÞáH¤F’) ¤pAŠé#ñ|5óǯP\ùÓE$q6õB’ºcw|mä÷9éZTQ«ôãR4šôcŒ”’hóeŽÙWbü1ñзÿŸoí[³õÏú¯í-Ÿ†1Û¥t|MÔí¡H­¾xÎ(£Pˆ‰q¤ª¢€ØÕÔÑZ âuÿM☢O|4ñ•ÏÛâcw¥«Ä}QÖü2ç8#8æ«èúÁЯ–êËá·Ž^í¢Ü\j:uĨP­& Åz‘Æ8ã¥wÕCWÕßK¹„,FX™Y¤Û÷Ô£ wûÝ)6’»¡ÿ SVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕÑÚ^En“YȲÆã*Êr ILcþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“«§¢€9øZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¬¯Šÿ-~êöÚ&ƒhu¯_EçÇb³’Þ•óîe ùQ–F3ÁU¶¶Þx|Eñðc)›Âg"×ì7#O?Ïý|¯Ãµ{˜NÅã)*É(ÅíÌíE«·›²ó>g0âÌ_]áí)Î?*º«m+ÿu7%ÕjŽÛþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“«ÌuÛ2k gBÑdð½í®µ¬Yi÷Í+‰,- žê(±N1ç2©…aµ‹ª€û­rcòœVV¡õ˜ró^Ú§·]Ó·}Ö‡vUŸ`³·Q`çÍÉkèÕ¹®ÒÕ-Uµ][¥ÌÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuixƒÄƒLqoc²Kǰßv%þóãñÀêO°$gÿoj{7}£NÿÀWÿãµæ9${‘¥)+ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+JÿäêÒðÿ‰¦æÞø$wˆ7a~ì«ýäÏá‘Ôb զȔ\]™ÌÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òu]ø‡ñEøQà½GÄ_õ }/GÒ¡3ÜÜÌØTQجÄà$$×çÔÿðXïŠw$i tƒð=TX™$Iÿá ’ÔŒ}´/”¶HO,ö]ÿ0c\M:-)3§ƒ«‰MÁh¿«zŸ|ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuxßüËöñÿ†çðïŠ/Ã×zxrîr'{rf#3‚‡«£Ž2}ÛÇ7÷ÚW‚u‹¯ EÔ­¬g–ÐÝ#<eŠyФ1MÀd Áj¨W§‰‚©IÞ/¨cpU²êÒÃâ#Ë5k§æ®¿fÿÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òudjþø¿á¯ É«x«Å¿ôÝ>Þ>{›.ú( @2Y®ðÍr ~,ø‡ã®±q§üøÃûàšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ  ¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ  ¿ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¡ÿ…Sñ¿þ†…_ø&¿ÿäª?áTüoÿ¡ƒáWþ ¯ÿù*€&ÿ…©«Ñ?ñ·þi_üGü-M[þ‰ÿ¿ð+Jÿäê‡þOÆÿú>àšÿÿ’¨ÿ…Sñ¿þ†…_ø&¿ÿ䪛þ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ªøU?ÿè`øUÿ‚kÿþJ£þOÆÿú>àšÿÿ’¨oøZš·ýÿàV•ÿÉÔÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ Z èW~:&»ø7â)µÁr/Ô’éNÂuP‹0S´HTÆàæºÿøZš·ýÿàV•ÿÉÕü*Ÿÿô0|*ÿÁ5ÿÿ%Qÿ §ãý  ¿ðMÿÉTt°u¹W^ñT¾'{ñÃ/^6™t—Ö†Yô–û<è,‰þÃÌ3îkCþ¦­ÿDÿÆßø¥òuCÿ §ãý  ¿ðMÿÉT©øßÿC¯ü_ÿòUA¾¤ßðµ5oú'þ6ÿÀ­+ÿ“ª;߉Ž£g-½÷ÃÏKèc‘çJ!ԌӺi¿ðª~7ÿÐÁð«ÿ×ÿü•Gü*Ÿÿô0|*ÿÁ5ÿÿ%Ri5f ÛTG¡øâïÃ:-ž›áÿ†þ0³°ÓàKkh"¸ÒV8#E ¨ _píV¿ájjßôOümÿZWÿ'T?ðª~7ÿÐÁð«ÿ×ÿü•Gü*Ÿÿô0|*ÿÁ5ÿÿ%U6Û»¾¯âùõû› µ¯†ž/º—J¸û]›É>’ÆÚm˜ŸéÜ6ÉsèÆ¯ÂÔÕ¿èŸøÛÿ´¯þN¨áTüoÿ¡ƒáWþ ¯ÿù*øU?ÿè`øUÿ‚kÿþJ¤ßðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_üPÿ©øßÿC¯ü_ÿòUðª~7ÿÐÁð«ÿ×ÿü•@ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuCÿ §ãý  ¿ðMÿÉT©øßÿC¯ü_ÿòUMÿ SVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕü*Ÿÿô0|*ÿÁ5ÿÿ%Qÿ §ãý  ¿ðMÿÉT7ü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'T?ðª~7ÿÐÁð«ÿ×ÿü•Sx1<`‘ê6®¼7.§¦Þ5»Ë§ZNJ»Ô…’RÊq&'¦{àðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_ü[_fÕ;ÜXà;ÿñuÅÖ¡¦)’ö8.¡^XÀ¥]®ÒN@?ðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_ü]%µÊ]À’Û0x䕇B*¶½®ÚøgHžûZ”Cmn»±“è’IÀu&€1?ájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¹?|Qñ~k¤ÝÃaaáË?_gik{¥ßk·óy\m¶#r~êÚwäœ+.O‰ž<ˆ¨–úÉKýÜü2ñ ÝÆxçÓŸ¥EZ° Ò«%««éuv®¯ººjýÓ]z˜Ê[J‘Oͤzü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'WáøÿÆÞ1Oé:ç…íµ‰l濊ÛRðN³¦´ðDñG+Æn¦Œ8F¸€¤‘æ/­v_ð¬þ1Ðgáïþ ®ÿù2ŠuaU^Myjk ‘«8;§Õjƒþ¦­ÿDÿÆßø¥òuðµ5oú'þ6ÿÀ­+ÿ“ª”¿ ¾9y­äë_ ¶dí·yœ{ÿ§R²øéÿA¯†?ø#½ÿäê²Ëßðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_üTáY|tÿ ×ÃüÞÿòuð¬¾:Ðkáþïù:€/ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuQÿ…eñÓþƒ_ ðG{ÿÉÔ²øéÿA¯†?ø#½ÿäê½ÿ SVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕGþ—ÇOú |1ÿÁïÿ'Qÿ Ëã§ý¾ÿàŽ÷ÿ“¨÷ü-M[þ‰ÿ¿ð+Jÿäê?ájjßôOümÿZWÿ'UøV_?è5ðÇÿw¿üGü+/ŽŸôøcÿ‚;ßþN  ßðµ5oú'þ6ÿÀ­+ÿ“¨ÿ…©«Ñ?ñ·þi_üTáY|tÿ ×ÃüÞÿòuð¬¾:Ðkáþïù:€/ÂÔÕ¿èŸøÛÿ´¯þN£þ¦­ÿDÿÆßø¥òuQÿ…eñÓþƒ_ ðG{ÿÉÔûo†_<õû^µðÐÇßf‡xë}@ÿájjßôOümÿZWÿ'Qÿ SVÿ¢ãoü Ò¿ù:¹‰¾ ñ‡ÁM> ¿Œ¿þ xJÒéÌpÍ­E%„s0ÆUZkõ FGÖ´|%mñ#Æ^µ×| â…þ.ÑnÔÉúLSnÔf;…º•È# Öÿ…©«Ñ?ñ·þi_üGü-=[þ‰ÿ¿ð+JÿäêŸÂ>7—Z¾ŸLñ>Ÿ6‹®Y®é¬åmá—8߀7¦xÎÀ®‚€9AñPóN<_Ïý6Ò?ù:üFÔ3ðãÅù¤qÿ“ÕÓÜßÁg4ÝÍR]9Žw em¥¶¨?xíV8”žÕKÂ^/Ó|wáø5_ÝÅ}§Ü–Ov¾Ö*ØÈÏ ¤~•ÿ OVÿ¢ãoü Ò¿ù:øZš·ýÿàV•ÿÉÕÓÑ@ŸÆïˆ—Ÿ ¾êZÝksÙ&ã 8ÄKÞYÞ1§VرÛ#ç‡ÿ"ÖïŸXñ÷Ú5{äK–CU޹ êu<’Çæ¯¬ä‘bRÒ°P;“_ ~Ôÿ³·Ã»Û¯|!xÿ±§v›RÒaå´÷'-qlƒ¬dä¼CîòÉÆV¾/Œ0ìE(×ÂIµ \;ù®ívû5Ué5^Án»{ÏÏ·¥ÎƒÄŸl´ÛyŸK¾ÔüÉå1ÛjwQF]˜³,W,I8OJîÿd_j¾7øeâ[©g“T¾³Õå†Ùo/$)Ÿ²Ûȱ™X;"nó†ÆIÁ<$ø û,xwãWà {Äž7ñE½åü÷A °º³[tD¹–4ØÙ›,rI¯¢~üÒþøRóK𦣪êßÞµô“êDòï1GŠ4]¡aNÙÎy®.Êó*uéâñ^ÉÃD›ê“ZzeÿY¯RÜmM«îµºÓc‚ý™jïü|øâ= Å çð}¿…\Ûj7wÇÚ6\ÿ (‚Ý„¯Ï¹[JœëŸt¦Eo#Bˆ3oª€]°O©ÂŸ@)õú ôñ#ijé/†(§¸HMª1D•]Æx#Ÿ”UX¼Q|ï<®àIÈÆâ}OJèü_ðâÇźš]êWW¶ò$BBè€X¼§Ÿ˜× ãï [xFîÂ-òîí¯Šc‘‘˜°)´(UÇ­rU„Órèc&ãv_²ñìº&°‡GG¸2%ºŽ&cÝGg÷ïßÔw>0×ï|=ት LmFhHö¦aíþ,ƒ® 8áÇ`ðê ÍQâ›R‘qÁÊÛƒü+ê}[¿AÅuýkjQ”cïúœ÷Ã?ÝøûÃI©êZaÒã¿p†5¥OïýÕÀ'8õëÓÐÒGÄŠ±(UQ€ÀÐRÖ¥Ÿ—¿k{ÿ üpø½ªjà\^Yëšœ0g 2XÉ%¬1-º“Ž…Ýº’kÝÿi/‡:÷ xvÇáïü-_xóUtžÿÄzÛ®´:%Á—:|Yµa& qÂ#ÜÞò?‚ÁNeíOà§Æ=kÆÚ£Ýø+ų›ë¹£Më¤ÞI2\uÛ®L‹!Âî‘à…Ýìáûcø¾ÓÀúw†®|a¨>e ÛÞK2B¸ Ú y¥¹ãŒãŠþŽ­„þÔËp9–M(¸A%86ÕÚŠJ/•7î´ï¤´½ÕäÜ.`ò,ç4Ê8†œùªNND”¬¥)Jñæi^I«M]ÆÍhÎÞI~#øÛã_aµð-ô¨¼U¤\ÞÝ]è70E1_Á#³3  ª¨X±Ç _¢uä³F¹wã]2-By‹Xû·'‰ÛýŸP=zg\zý~?ÅÙÌóJð¥8F>Í5îß[¾·ê~óÀ¼=O$ÃU­N¤åíš—¿k«+$¬–O,¶ñbé^,¿’ùâ8ïç,®~ðY@'ÐôÀíÅzÖ~™šÜÑÜýb‹CÜŒy9^£“Ðqç9Ðî~ø¬k6ËÝŒ·&ã÷ƒ>LŒÄ•ol±*ÝŽ3ÈÎãEòkÍ|Ó†Fù ¶ÿÝìÏzöºçÛŠøÅ¦çéN›ª“‡oéOâ·x§OkEè×ð•T'å *©úaˆú½Z¼áφni3™à¶[ÈäSO2TIæòØ•VXËà0 åªýö£í~ü,·ð/ü*±¨øaµ¶ÜÖþÔê-þæî6›÷•ò /n<³Ÿö¨øÓ­Ühº¬§LŠk‰.VÍvBŒì}³$€:~ñy÷¯“tírGÿ‚ÃÍ%Ö›¬;·‚Õá™dÙ \ÿÂ4§ËhŒ%öoDŠrÀãå!¼ óT«IZí´¾óÝÃÂXš+[(Å´—ucgö[ý›üwû~ÕÚoÁí.ßTðG‰¦Ž]QDÑEöhUÒ?8<ŒQÊJãsáLl¹ Ãí?È—¬×”ßú-«Šø)âõ›€5H§·’&¹ÂLŒŽÁ…®týÛsí]¯Ž?äKÖ?ëÊoýÕée±JÖÏð<œÒ¬ªV÷÷I+÷¶ßñ¯ü3ö:íÏðÁŸ`ûgÃmÊÓ]Õ,]D–דÏ%ÄQKseeHÚ7 Àæ3uU#Å?lOÛvÏâ^¥¦¿Ão·iw:-ÂQ•í*bâC,‰òB©"BÓ!FÛ_yþÞðOåý«í<=âÝYiþ6ðå§Ù¢7hZÛR¶l?‘)®%Xt,݉¯ž<ÿ¾ø¿ñ#N> ø°<9àŸ‡óß›ÍEìnÖöþö<«`eU†`ijlÁúyË Æe™æ>Ö¥5ìjÑGN„¥7'|³ð÷Û4¿ØM¦Knš{¤rB4û«{¨K£›ícVÉRÀpG›üjÿ‚qx[ã‹|Iâ;oxç¾'×üI£x®WG¸³2éÚ]±µ·khîmf…‘¢yDž9ƒo$mÂãÇ›æÄsÅ{ŽQví4åoXÝvüϽŠýÇ#~ÿ,µï' Fû襮š¯=$ðüçâܺoŠ_Ç´=Jõ~,Ý|1𭦃âÕêoÝ9šèÜÀ©ĶÊÎáØ²´…#Ê*Kì_³í“â_Ú3ÃZ´Rü8'Œ|ãwð_tcâ®môFH"¹kË[¿)~Û †æÑÕ|¸\ù¤2£!ç?à˜:¦¥¯A'À߉¾:ÐluÏŠ|BÔ€¼ÓÒ_ Nl¯c¹ŸGwÓägyçžÜ¼fhJyŠªŠJ?®|ý‹4ï€~ w„/½‘BH—ûm„+FF"¶Ž‰o¡P§&Z½z¥óQ¥Ìûò·íoÕû¼ºÞÅ}$ýšÑó>›9U²ò’^ÊËkÞîÛ­·Åø»öþºðW†/Œð?ÓUñf…ö£©Þ”ÓÂÌTº ÒõdR–ÎA¥~ß^/Ò´‹í[BÐ_Çš—ÅO‹Ÿ¾h2ÝC£YÛ[i–³Es=åÿ•#­»K¢ê÷‚Qò2M Gp²|9ø â?†ð|g×4Ý[J¸ñ¿Ä½nëWÓî%Y ¦ž±ØÁc§Bã¶$v‘I _ùi,Åz×7qÿñÐof„¾²ñGŠ|9­|K+x³DšÕl¯ ³{Inqu ÐMçÅqt’¤ðÈŽ.‘»k-BVŠºé×÷¥Ï.Ÿ-É{¯uÙ7º©jÚ][·eËUçi7ÏÕÝt^ëà´ø*мs«xsÂ_~ Ý_üO¾ÖµÏkÚlj¢µ°ðÝæ”¶’O+êg³’+ëy"š8|Æó¡ +wÀÿðRËoÿÁBî>ëºw€þ×<Œ¶3è~;·Öu{Cd!f]_IŽm3ÍI‹Å™e܆òØ…®ÃàGüóÁß¼SáÿhZ¿Šuikw×Ú®©u—>"½ÕÞÕï//¼¸QLŸè6ê‹ Åh»6… È|"ÿ‚Uxkà·Ç ƾøñBhü1¯kºæ‘ Ý]iÏ¥XÿmK,ú…°U±I“Ì$,¯2yH«*¡uuÝsv×·5¢ºÙJí_[owd)Û•¸ï};òÞM_¥ùySé}WSδø-Dú'ƒlüiñÛàö»àÿ‡Ú炵ïhš”zå¾£©®Ks²DQM‚KyZ\Èù‰WtŸÿà±:ïì˦ø‹þ á§oô¯ i>!³xÖÚþÆs©ê«¦[Áuvö𭘊Y#k‰˜•cýµ,³êÁVÄM$rO0<²¼Éå"¬ª…ÕäÒà–úÃëÿ _üøñWá¾­áï Ûx>öûD¹Ó&é¶ÒÉ-´wÑ^ØO’'¸¹Ù41à .â ^ý.g¢ø¼÷ûµi;vvOKë6¹+F;¿…ö×ü®Õô»IÛu‡ûOÁP»¥vÖÓG òÞ5YŒF!Ö0Ìyj†?àšþ°ðï#ø‹ãoˆ9ñ/Ä OEÔ5¯ëW+©ÎšEÌW‘¥­¤6°ÛÆñ¾R8±¸™‹o}Ã:J~Ïß~÷,~rÑÉéçuÚÝ/©RpUŠ÷yÝ¿Ã}Oû¿>gÛCÏ>Ágüû@þÛÏðÃZ~†Ö³®xvÆX~Ï?âÄiú–µ 7úêèZF—§X5²\\]Þùd¾µŠ8â·”³IólPZ¥ø1ûÛ~Ïÿµm{á_Ĉº„u^ÿ_ŸÀM6?‡’úô¼—2ÄÒY5ôJóË%Ï’—K•Ø„ vV'Žàœö>0µð þ™ñcâö‡ã߇+©[iž7¶Ô¬nuË›;ù—6W‚îÊk[˜ ŽÛh{rÉöXJ°!‹h´;êíïzÙü··ý»ç¡šøêmk¾]ì—O;Û¾Òï_ñKþ ®ü3ñŽ/Ÿá4×ß>jZv‹ñÄ â8ÖïG»ºµ´º”éúx·&þÞÖ-BÙæ•å¶;K˜’b…kÝþ=þÑü ñ½"ãJ“S?¯}uwqnÓÞ^ËQÅ$‚ X–@Ï™9|—,U Ç—ŸWx¿/v7iùJJÏMT’\©I½+Ê-7OûëÎÎVƒóq‹¾»rëÍ{?|Pÿ‚|Hø±ñCá|Ÿ¼!qៅ×ßá—ÄÇÄ5ö¸¶/¨ÚÞÇ6˜`&Y.¬Ý#q;JÞVæŽ WwxŸðTŸöÜ×¾ XøsÀzÖ½™«Þh¶úÄ+}KWyì"ŠAo«é©lIû@”˜É? w„béhÿðJ/èŸ4¿ZxÿâŸö‡üoqñ FðqÕm°t½ZæIå¹tO²ý¢Hå–îâO*YÝci[ÊòÁÅ/Âø%W†¾ ürмmá?ˆß&Âúö»®i ÕÖœúUöԲϨ[[4‘É<Â@òÊó'”вªWšiû7;6äïë i?””––éwgu9â´VVî”êIýñq‹o_;#ñ_üwMø§ðë—¿luëxËö‰#–[»‰<©gu¥o+ËjW­N\¶ŠqmÛêM>öâº;k{°©ü ŽíI'×X8§~—•¥Þ;'uw«ñ¯ö¨×>~Ò^:,?‚¾ |,ºñ‰4ñký­u,aÜ”gˆÅ©Uàý¶`ØP8kø+UßïøJ¥ý­¾k_àÒ¾ÞüTÑ£¶Öíu«­[H³1-ÔGDµ¾F¸¶P’X˜JŸåp¾ƒâOÙ_»ø)ûJZC¤ê>1øÜÚ«Ù4ÎñÙÚFúTznŸm#fTX­ây0¬<Éfe<à|4ÿ‚VøZ k‘~Ò~/ñ÷Å«ïx¾NÞ&Ô-˜i:,À›+6²µ¶?¼uŒµÌ¾eÃùæOTS»oŸem¯Í%Qµ~ñ“‚íÊžî×¹¸§ 7“½¶´]%ëiGÚ>í¿²¾?â_üŸÅ³Ïƒüfß´×Á–ðÇŠô/ ZøËHÓì|Pº¦¨is_Ac,·—éh¿bk9na’ïlSÇ-æG$à0:§üâ¶µñövÓþx áOŠ´¿ŒVZÍî«w¦|B{ë Hì¼¶I4íF;·hc>L*X°O“isÙx7þ À¾¸Öõ™¾4|aÕþ jZ5§‡4ÿjèÒêú™op·ÒÖ5ÓÍ–Y3I=´ÒÊ1¹ÎÔ+Ãÿø%ß„¾iß ÿá]øËǺN¯ðÃ^Õ¼A« ºyŸ_—V§Ôá¾…¬Í°†âG$­´0€‹r´•¶wý]¿òVœ¿¼Ÿ*i˜ZKÏÿÙÿòe.]>ïY£çø'¯í?ñ»Ä~ ð‹>$[ëÞ!ñÅ=Å^#Ó|1qã YôQìe¶6öâC¦«i{í­QagB‘‰e21ù=Ÿáü·Lý£þø÷âÁ?ýƒÃôÛxõ=CÇzÊøJÆË]'ý3H»žx\Aö1ý¢è # á"°m½æÿåð·„þxGÞño|>þðîµá½V±¼´]FÖ-UâyçöÌž|f18@’UŽà®ÿà‰¿t êÚÀGÆ ´Sûóû/Ã76‹cm«h×QÜÙë+Õ¬Ê÷ì`Š9ä“zÜ*)•EYEɶ¤¬´JÝ7»×}6WÖVÖ1Nýäqž·w¿]|¿;imåµ/‡_ðWøÇû=ø7^øAàmÄþ;ñߎïþé:Fã§ðõÅõ”WW3Ý®º¶Ä=Ùl¦™fKf‘²ˆ!ÜH\€?·ÇÄŸ ü×µ_‰ÕücãoüqÖ|¥xf-nÕNŠgxb…7·…m™™ÈÞ#fl3(»ûoø$߇´ÿ?Jø§ñrÛÄ~9›â&“â‘{¦¶¯£ê÷Ïmxñn°6òÅp“Ýo†xeAö†XÄj±ªußà>ø;á}LÓ|Eãiô]|FÚ¾¥Õåö©s ÄRý¢_$oˆ‹¹[h À…Ãmiê§u³QOÿ¤åo’©fÕõVµÚ2“æ‹VÙɯüª‡7ÎTî“¶½Rg—üÿ‚«x·âwÄ_iŸ¾ Üx7AñGµo†—ZÏü%pjiÑßÉ*ZÀ+ÜØ7öe ©>Ï'™ö}Ÿ¼®¯þ sûTüVýŽü¥x»à†á-gÃ&O²jÿÚvW3Oa+ÝIº+ˆÇ”ßs•á¶òw€;þ ýà¿Â1ö=KįÿŸÄ[â…žû˜™©ê?Ú>|Rb›eþֹ؃k‘æFÃnõÿx'Hø“áGAñå…¶©£êÐ5µÝ¤ëº9£n úz‚9"ˆß‘s|_ð#ü›™/$½Bi)¾WîôÿÀ¥o¾<­ùßm%ý€¾0üHý >ZxËöÓ<;£M¯?Ÿ¤ÙéV³À~Ç–Y|é¤$ÈrÊ>M§ÜkKt°xÓÄáÈÏö=éÞõ[[hl-c‚Æ8á†ÇjcP0@à8Åx‰¯>Ïñă=oÁÿÈSÅ´ïÚAt¨õi¬5U°½±Öµˆ&†åZâÒTƒR»ˆLƒÈ€ï”¼ë&1^—ðöƒƒã·†§Ô ѵ --™\IûË Grólnp¿i‡œy›W$+̼9ûøBÓÆ:¦·ã¶¹ñT×ú¥Ö§–¢TéÖ-5ÄÓ¶ª6ÌAŸïOæ•d –x¯`“YËt²·ÝEå˜×ÇðÞY›`êNxêËÙÝòÁk¥ônOgmZŽ—Õ¶ÏŸÊpÙ„–"J1JÜ»·¥®úG]}ÛÞúÙènècûdpãËŠà„窶?64’xy<[ñÃÖZŠï³€Í~è~ë¼aõÁ”·ÕG¥?Ãú|š~žÙiXÉ&:{~¬I4Úf§e¨Ø)’[ 2²Fà £ß¡ê+ì 9OÛóÇïð‡Eø{⛾×5mR(v4×å TH;1€A種öGý”>|lý–¼ñöŽð߆~%x·ÇÚ-¯‹uMsÄÖ0ê2E5í¼w]£Ì¤Z[D¥cŠ8¶*¬aŽd.íë´„¿%øw©x?E“Ŷžñ׺®— ¶É<–ÒèÚ“ —RÇ~òö U˜|¥Ž1_:ü5ý•þ*~ÏþÖ~|´Ôïþ^´Ë¦øSÇžÒ_G£j^6ÕÚÁµG¶O‚;yn%hÑÁC)Xv®ðGÌN8ÍÖ|}/ìï ø‚M[ÅÚ¿ÄR´ûK]äØAymqw)†y Š ‰+ºüò/6#<ƒÙ|dø3¥|lðõ­—ˆn5 2ò=CNÔtùü›½:å2Xœ‚3†e!•”†9ÈÙ LÕ,¼N|oâ뺯ŠMƒÍ©Í%µµÍ”–NÏk%¸·‚4FGmÙ*Ù dZº¿¯á¦‹Ïs‘Ûðün÷òÛÌÊ›ö¿Õlµé|'¨x+oÄ%ÕmôÈ´¤ÕÃXJ“[Ër—?nhTˆ„VóîIpÉ´)ÎišG퉪ø³V³ð÷‚¼%ßRçP·Õ´ËY-­´ß±y"V[£yÁÍÍ¿—ˆÆá&[`µßö<Ñçš}NóÄž*—ÅóêpêÃĦ[eÔ#–ZÑQ`þPŠIPÆb*DIÈä~&~È×^°Ñæø1·¨ëËws©ë_ð•P¼k³”LñÚÈ’$†4"ÄcòÆAèõ_×’ýoÀ4{[ßô·ãçmûr½¥½ÇŽ5ë+‹]&ç–0h²^ ŠɵK«@ÏpÊ(›¤# ªN >Åû7|~¶ý¢<ªX[Z[K¥jsiWc¾[û9dŒ# -îUWÍ’D!Š©ÎAsÅ|?ý†ôm3ᙡxÞþýµH4=*k:äͳ[ÝIx—®Ë½dIåb¬Ù*åzƒë^ðçƒty-µßë>'žIL¿kÔÖÝeAµ@EðÄFÜýÒrÇ$öÑÙ]zÛÿÓðý5%êîºÛÿIIþ?û›´Q‘ëFG­@Š2=hÈõ Š2=hÈõ Š2=hÈõ Ï¿Ýü>¼ÿ‚¦|U_Û+MÑõ›»m'J‹À6ž%1=lM¹7¯j“ƒ´oÜ@,ì`n­ø%O‰|2ÿµ÷í £~Ì÷6 ð¾Ö}.æ×OÓ§WÓlõI#”^ gdAŠü›”à úÓãwì¹ðÿö¶µ‹ão„ü?âd²bÖÿÚ6QÜ Æí…Á+œ ãÀÍ|»ûEÁ(äðÿÆ|Lý€uá7‹<.ðØ^ǰM+QÓwþò9m£Ú‚“Çðe!d@§¾;øn6}[´@·¶ñC½G/¬#u>£ ŸøôªukÆÞ$OßYÛiŒ$³²M4£îË *©î9ϨV€¸ùÚ¢Š(_[N…fÒ.ÿÂcQÿäzöª(ó爬ü5â땟Å>Öµ•v,—¾‘Õsœm³Œ“ÅfÿÂàm»áÔöÿwþëü~_f¯¥h¨tâõhµRkDÙóç‡lü5á–ŸÂÞÖ´év4–þ¾Ùzà•¶Î2Õ­sã [Ëy!»Ñ¼W,R©GGð¾¢ÊêF Ûòí^ÛERJ:$K“–­ž¾#Ó‘B¦â`Àš†þKÒÿÂM§ÿÐÄÿøJêü^ãE1ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=ð“iÿôñ?þº‡ÿ#׸Ñ@ÿ 6Ÿÿ@ÿá+¨ò=Bum ³1ð׈w1ËøD¯òO©ÿF¯w¢€<'û_I<7â/ü$¯ÿù¦µñ=…‰?bмQzìð® ¹ü­ëÜ( ÿ„æúø»ÿ Gÿ‘èÿ„æúø»ÿ Gÿ‘ëÚ¨ —Å63˾} ÅÿÞo êþg£þ{úx£ÿ ]Cÿ‘ëÜ( ÿ„žÃþ€^(ÿÂWPÿäz?á'°ÿ Š?ð•Ô?ù½ÂŠðÃâ 4œŸø”“ÿR¦¡ÿÈôoéŸô/x—ÿ =Cÿ‘ëÜè  þßÓ?è^ñ/þz‡ÿ#Ñý¿¦нâ_ü$õþG¯s¢€<3ûLÿ¡{Ä¿øIêüGöþ™ÿB÷‰ð“Ô?ù½ÎŠðÏíý3þ…ïÿá'¨ò=Ûúgý Þ%ÿÂOPÿäz÷:(Ã?·ôÏú¼Kÿ„ž¡ÿÈôoéŸô/x—ÿ =Cÿ‘ëÜè  þßÓ?è^ñ/þz‡ÿ#Ñý¿¦нâ_ü$õþG¯s¢€<3ûLÿ¡{Ä¿øIêüBø‡MC•ðÿ‰AõÔ?ù½ÎŠðÿøIì?èâü%uþG¦·‰4÷ûú‰×š‡ÿ#×¹Q@(¾7TÒ|Zè†5?ò^—þ˜èâïü&5þG¯j¢€üPñWí'ðjÿPJñ…ñ˺ÔtY$m¶ÒE¨[¢JFcò¥Uü°ÈûÆ>žñ¯üV÷öuý¿¾&xãʼn¼øo¤Üi±Xê:tï<<%Óm'‘î`Ußs Ë<‡tEäoú²¿0ûKÁ¾3Ò>"øVÃ]ð©a­hº¬+sg}c:Ïou «Ç"¬§Ôü0ðoÇöÿ‚µ~ÓÚg}0ø?[ñÖ¦,§Ð|Wx–Ë5͆ƒnZÖˆÑ÷H뻃 \2#D$²~¦Á'¾ øàì—ý“ñ_AÔ¼3®\ø“X¿ŸN¾’%„I{.ÇÌI(Yr®Àù™ÎI®J+J¤ÕHû½ùŸCšárÊX<5L%Y:Í/i´M«§Û¥½¥¨¢Šë>x(¢Š(¢Š(¢Š(¢¼¿Ã_¶ïÁ|e“áσ¾/|/Õ¾!Cwsa'†,¼Uc>²—ÂCq ²IŒÂH„2—M™AîiÀ¨QUµ­jÏÃz5ޣ⠫{ ^æææyq[ÄŠYÝØðªª $ð¯Ê¿Šðyì•ð÷ÆWºW‡t¿‹Þ2¶³•¢]SDÐmÊç£ûeì•=‹F´ú»E|!ð?þø/ñûþ ]{û+ø;Ã-¾!Xxƒ[ðÜš…îbš1¸Ò£»{‡¥ëMå°±—aòA%“r®N߻袊(¢Š(¢ŠóoÚ‹ö¢ðÿì•à ?üG³Ö/louÓQ4Ø£’Q#Ç,€‘$ˆ6âç9ÉzzMÇüøÙ¥~Ñ ´Ÿx&ßPµÓ5;ÉŠú4I×ÊšH[r£ºš&# x#§AØPEPEx7Žà¡Þ ðí3­gKñD¾!ŸP²ÓVâhÈIv±4d¹œ>Ð'MÇfFã>ó@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@Q@Q@Q@Q@Q@|½ûF|"Ó~4þÜžÓ¼b$—OÓü)5ø‰[nùÉA’9þ<þõ xŽN?à Z?ô#ÜéjÐøoönÐ|uá½{Ã~!¶It‹´žÆHÙC,’£î8 ö øgàßÅïËð‡Â¬º­Ú†ÑíϸJý0ø\syª×Ì¿ú0×åÇÁ ?áLxGþÀ¶ú!(õâ¿>?àâ?–ÿ dè4ûˆmï|¨¯|Q=•—·½û i œ3 #tmªjS$0õ¯Ðzþ~à迳|GøàÞðìí(›T±Ð6DK¶Ó`…Ù v{½[NŒÿµaŽÔ¥ÿ«ÿ‚‹üFøUà}@øU¢h°@"µÑ^ÀÝèî7<Œ"†GV±ï–W.š5.Åbçô‡ü¿öÀñƯø#OÅ]'â¿Âý{C¸Ö-ôÔµÖôY—ZÐÚUÔìß÷’ª¥Å¡;H_>RÄ(v$gá?ØÁ÷mµŸ› ½|Èœä(<åy÷Güèþ7ã¨bg2júׇ­F,[WµùH¿Ýè?Þ^ ó[àçÃ]7â׿iÚ´wZ¬GÄ·w𘥓í+,:u¢,ð4Í8x¹ù .ɆÏy_¦ÿ±7ííñÃö}Ñl,¼Uý±ûEü;òTÂÂXá6Ò` Ë ˆ|vPßuÄùD“6E~y|-]Gľ$¹ÓüKÞ[i¡õ ™f½žKøźykwdn¢E[XÙn5n#캄{eûÃöWñ‹û[Ny¯ZñVî;±)7Hœ üÍó}¥WóÌ—È£¨À>A1VFÕê*’MvKîI~‡êÀ/Ú+ÁµÃÔñOÀzß_Ñšâ[9]b’ í."8’ÞæÞeI­æCÑJˆë‘•íkåƒZ”^ÿ‚…O5©D±øÓðú L¸VëSÑn|‰¤f ïkªZeƒ6E°ùˆ¯ª*ŒO„?àáoø*¿à“_±†>#~ΚGƒõ­oZñ­¯†çƒÄ–·76©o-ýÃ:-½Ä.$g¹-ò’Ai_ðrwí³ñ#öµøáð{öið-ï„|(óÁãON·'KyVéÂý‚À_­Ð†8ØK9iKæçb®+Ú?àõoùE—€ìªéßúhÖ+âŸÙþ mðsàüYâ¯Ùûâ2ëVŸõ/øÃú.˜tyÌ:ä:¥Õà[øî‚y8ZêdmÎu£V8 Ø?ø#¿üO¿ðT¿ØãXø­XÛx#[ð,¯kã :K¯2ÛM)œ.£•€&Ýã À°Lr)ݳ{|%iÿ2þÑ¿·÷í'¯ø#þ§û<è7Ó<=ܶ£â¹ÜIul¯°\È¿jµ†Ì9 $o3»}r«ÀÁ­?°_¾ Á*?kK›ˆ§Ñlÿh _ x^âè4I3ŧêïv™ë¨ªonÇðšùïþ Ãÿ‚†xþûLüsðüžÓ]øs{â(tûinnt{›©4»»ºÍ¼ÐÛÆòâU½Ü®¨Ê|¥9Ã@¢ÿðKoø9C]ý¡¿légø(¿Ã+_…öm.Òk %3_Æ 9 ™™àv|¹²$„¨Ü¥¹Ú'þý£¾0ÿÁFü{û:ÿÁ">xGÇšçÃ{›Û=JëÄ׌鬧[{¹•~×i$î"Rò±|©ãvÑðOÀuø-ü ÆÙ?CÖÀ:'´ÞêrÚ´1ÙéÚLV¨²Ü‘µÓXac?13àŽ¿ÿƒþ »ñ¿öóøâ|høÉû7|dÐ|Q¨é"¸Òt[«› íJÖâKk‹¸–Ö ÝL6å–-Û·2f ЯÙöòý¼¾#ÂÏðŸíSû,xÁ~8Ñ~ê¾ ðf«i|dÐu½v),ô¹˜]ÉùÒO¸“y ò]??dO‰´¾…ÿ÷Õ¼Qð'áïƒõ¯Ú}ükâË‹ŸÞÜÆš4z¤°êCT€Jo£O.{Ò‡ídaäÎîïø7¯ößø·«ÿÁbï>üøÕñö‚ýO¾šãYñMµÒ›;xìÌ]$WO$¶éž]°]ê² €Ÿ8|7øïáÏø'ü{ãˆ?µíÅï…¼+¢|Kñ…ýõѱšåà¶ÔàÔ…¤âQ¤tqlùEcµò Ô/Û[ö„ý¿õŸø!çŽWöƒø'ðÇÿ®ï5#ĺvŸ¨BÖÚg@™®õxu‰A¼Žs"ª dl(ÿFo¼)¿àÜ/ж­Oâýïücà÷ߊw—èðøš\CšBføÛ-³I©YœLEÁp<Ïõçnïèö¾ý¨ü ûhÿÁ><üKýš5ßøI|â_…^0þÍÔ¾ÅqgöŸ"ÂþÚ_ÜÜÇ«¶h%_™vädOæüÇÿ7Eÿr§þ樠ý‡¿à§?ð²¿àå½kàçü3ßìÁ }›ât¯øN4o}—ÆRýŽ U¾ÒúŸÚn'û>'“Ëýàša¿ø(¿üKûXÁ(?o¸þþÕ? ¾k¿ æ½Ký?VÑtJÎóÄ#I‚öÒ˨ÉWH¹GGF "ô(ÊÍòGüOþW$ñý•_ˆÿúK®×yÿqÿÁHü?ûXütð§ìÓû<èÖ>)Õ¾ë>f­«Û[ «ßíi—ÈU“(-Æõó•s¾a`4${ÿ‚sÿÁÄŸµüƒöú—áÿì­ðÛá…ðÞ׿Ô5mkIÔ¯/Õ¼¬ïÒµk›Qkz5xWÈ:Uë0 ÎÆ«cdÆDÁi€®?¿à¯_ð©¿à öŸ?á^ÿh}«\Ò4oíÏíï+oÛÒټϳ}™³åý«|Ï›gUϘ¼u c*ò²m%£z½–—ì{ü=ÂùŸU«C+£í'N©%ÍÚi9{Î)ÙÉh®õщñïãŸÇÍ/â–¯¢~Íß ôÍcHÒü•WÔî„q^—…$o-ZhF“†nPô<öÿ‚–ø®ûöŒƒá—íSá ?ÚåÝÊØ¤¶,è-îCD’Fï&å“ráÕñó)Á#æ_ÚŸÆsüBý½µÍ ö³ñˆ´?ØêóÛbØ<Ÿb²PÆÝá‡k|¦,‰Þ[¥qŸ4¯ è_·Ï‚m~ K­Ïáxü[£ÿgO«([»ˆÌöçÌ`×%™~Pv2çœ×Yà¡ß·ïíãìy£iv~Ó­õkŠòÛÃpì¶ö°©Á–P¸f˪ ŒáŽF0~Jý¼hŠÿf XþÒ>‡ÃÚš¼:Æ—¨Ù¾-îb[yÔÇ$-#¼Rbt` 7Ê1]üãᮩÄ¿ ø½ –M}/û!¥U% ž9¥”=‹¬ÜzùméYÿðQßÛwÁ¿´ïìõá=+áx½šò FCRg$I¥¸·™»;¬Ì]ÈØX9 ¡bO]ü4ÿ‚SÚxBŽÞ[ïèšæ¥n“©hžHnodPáH%IQ8Ï"¼ŸàwüãGÇ-7Ä6~øuáÏëºtÝÄÖk-½µœšÓ‰n •‰ò‚"2“‡ûÜ ôÙŸþPѩةâOý}^yÿ-‰]þ(³(,” ã±ûnGè?*Óø#ÿcñ߯½:Ox7áÍ–¹ñå÷X¥ÁƒN0…c$“ _rmÂŒy˜mßyH»Ø«þ EâßîþüwðëãíÀúx’5YàÜe‚Xäw!‚¤‡pn¨F9Í|ùÿRdýªµÒàž¹*Ocö»1ü‰§~Ìÿò™}KþÆ¿è«êõŽ_´÷ü#_ðS/ÿ¼ø]¨yž Ñ-?·/t7Y_:;Cæ Ÿ0bHüÌ#mùB'\WQÿÿ‚‡x×öJøÓ¥øsáΗá{ÛÝ-IßR¶žID=Ädè6âãÉ<úx?í1ÿ)—Óìkðßþб£þ aÿ'S Ø©oÿ¥—”éÿÿà©?> ø»D¾ñ·Ã3Fðˆ£ûf› äÎڅݰ#-椅#“ ¤£G•Ü3ž û‡Á¾*´ñß„4­sAfkfÎëfa‚c•©#× +àßø.|K |,X”*¨ÕT:ö, ûöLÿ“Wøgÿb¦—ÿ¤qP QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWøäãþ ¡“ÿB=Çþ–­{åxŽN?à Z?ô#ÜéjÐ¥ü.9¼Õ?ëæ_ýkòçà—ü‘ÿØÏÿD%~£|.9¼Õ?ëæ_ýkòçà—ü‘ÿØÏÿD%~»×æ/ü?þ à]/ÀÞ7øíªùÞ#“Àv»ã¸nîÚËTXŒ—Z¥ä6·q)·tè‘Eqjî€nU@ÛúuE~þË_µ§À [L–ÛàwÃÏ(øit|+ªØÉ»q@°ÎNH"â)TƒÈàcÃÿjÏþÓŸ±÷´hgý¦`×¼+â_i>[ÝWÁÖð‘[Áw*¥ÍÔ76Ë)s pèòE2’€²ƒÐóãÆß±ïbëý"Ïãdž5 èÜì½GQ†ÒËM³˜œÖîm:Îfþµ¾ÑY» ñ_L~ÍQý¯U·Šè0šþe¹*ÈÆ[ÉGI‚´{î\sûá¢ã_'ZõŸÙ‹öýñÁŸþ|mð‡ÇŒ¾𦮱iÖ:/ü%—¶òOwmö[ù" 4‰)±kˆÞH˜*Êñ´˜TÇ‹îþ |L‡í¿ ¿fŸÚƒá¶µr|ÔÔ¼)ðâoÊíëqk.Ûk÷n¡{f€=KÄlÖßµ§ì”&ygÔ|S²À/ö+±i{Ÿ¼‘Ž]‰m¹9}Ÿ_ þÃþ øÝñ+ö•ðÖ±ûQxØü=øs£j²xGÄš·•¤k÷÷×g[ÍÚêxá)mò—,ˆþj0‚3‚>è Îø:ö ø±ÿý|!à¯ØëŸð˜xŸKøg­ÝYiÙéþUœzv¥ Ëæ^Mg\À»C;ò#¤ÿ‚=Á-ôχ_ðJƒ ¿à£Ÿ| «øçÀçX3iþ"ÓtÏ0Ük7×QyS:!º)âݹÆì0 }÷EVÑt[? 麇m-¬,,bX-­­¢X¡·Fª0®ã7ì“ð§ö޹‚Úá—ÃßMj» “Ä^³ÕÎp†â'*2OÖ½ Šç>üðÁ .‰ð_ÂÞð†ŒŒ]l4M6>ÕXŒdE ªƒÀç«•øµû|øûª›ÿŽ¿ ~xÖùºÜkÞ±Ô¥?ð9âcúצÑ@§ÂO€þø É¥|ðg…<¦JÁÞÏAÒ-ô؇˜àER}ñX??co„´Ž«÷íð«á·om£Cqâ? Ùj²Ä€ä*½ÄNTdžï^“Eqþýž¼࿃r|9ðwü¤ü=šÒæÂO YhÖÐhÏord7›$A ŽS4¥ÓfÈûÜsŸð3öNøYû/ÿjÃ4|4øðïûsÊþÒÿ„cÃÖzGö‡•¿ÊóþÍy»<ÙvîÎß1ñÇ>Ey†¿b/‚þ øË'Äo|!ø_¤üBšîæþOÙxVÆ eî.D‚âcz‘ Œ’‰¥ûòâGÜNãœÏ Á:ÿgß|@µñgþ|ѼUcuöëmfÇÁzm¾¡oq’|ä¸H‹&I;Ã“Ö½ŽŠñÏÁ;gïü@ºñoŽ~üÖ¼U}t/®u›ÿé·:…ÅÀ ‰žáà24™ï,N@æºýgönøwâ/ˆIâïx ÁwÞ+Žxn“Z¸Ñ-¥ÔXBˆ¤-:ã Û²»À®ÒЉÓM$¯êtañuðÊ…GÕ›WOtíÓÈç|]ð‡Â5/<{áëwv£l3ßé°ÜÉÎp­"’¼úUkÏÔ|[¿¨x7“ë°I±ê2i6íwÄDË1Mà D AÊ…\cºº*Îrž¿áëi3iþ(±³Ô¬.FÙ­®¡Y¡”uÃ#úŠç%ýŸ<7†F‹7ü ú2Î.…ƒhÖÆØL”H"Ù·xWa»ÃÞºú(LøyáýÁáÍCÑí<<ñIipÙG“G!c"ì*åßpÆãœäÕü&ð¯Âïµ³ðχü;öíŸiþÌÓ¡´ûFÍÛ7ùJ7mÞøÎq¸ã©®‚Šåüð?Á_ 5Y/þøCÂþ¾–#ÜiºT’¼d«/T•SŒã*j4Ïþ Ñ|fÞ#Ѽ!á{O¼²NÚ¤:TÞ´’9œ&òÎ÷äî9ÎMuP/©üðVµã5ñ³á Ýø…%ŽuÕ&Ò ’õdŒ(Äå7†@‰´ç#hÆ0(ñ·Àÿ|KÕc¿øá ø‚ú(„ q©iP]Ê‘‚Ì<ˆHPYŽ3Œ±=먢€9ÿü&ð¯Å²ÿÂÌðχüEöÿfþÔÓ¡»û>ý»öyªvîØ™Æ3´g ­'I´Ð4«k ÚÞÊÆÊ$‚ÞÞÄqAªˆŠUb¬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@Q@Q@Q@Q@Q@xŽN?à Z?ô#Üéj×¾Wøäãþ ¡“ÿB=Çþ–­z_Âã›ÍSþ¾eÿц¿.~ ÉðýlÿôBWê7Âã›ÍSþ¾eÿц¿.~ ÉðýlÿôBPë½Q@sÿþøWã‹›ñsÃ^ñVmp·pÚët7ÐÅ2«*Ê©*²‡ î†y5ÐQ@Ç„þ x3À>.Ô|Aà_øcE×µˆÄWú•†•µÝòg 4ÈäÙ› O,OS]=PEPEPEPEPEPEPEç?´åÿtïZ?À‡Ù«Acˆî<¹7¯ù~ð§?†hѨ¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠÈø.¥?€´Gñ‰Î®ú| |~^g1¯™÷>_½»îñéÅ|¹ÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øQÿ Oíÿ=ÿñÍ/ü(ëª+ä_øJhïùïÿŽiáGü%?´wü÷ÿÇ4¿ð ®¨¯—>ø“ãìþ=ÑÆ3gH}B¾4î`2/™÷ï»»îóéÍ{¯Ç{¯Y|)ÕeøHÛ|B¾OÙ"8ýòÿ[ò}Íýq@uò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕ‘ðþ]Jhã]ôøøü¼Îc_3î|¿{wÝãÓŠùsþŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|‹ÿ Oíÿ=ÿñÍ/ü(ÿ„§öŽÿžÿøæ—þõÕò/ü%?´wü÷ÿÇ4¿ð£þŸÚ;þ{ÿãš_øP×TWÈ¿ð”þÑßóßÿÒÿÂøJhïùïÿŽiá@]Q_"ÿÂSûGÏüsKÿ ?á)ý£¿ç¿þ9¥ÿ…}uE|¹ðÿÄŸgñ1›:Cê-ðÙ§s‘|ϸ7}ÝßwŸNkÝ~;Ýx’ËáN«/ÂFÛâò~ÈqÇï?úß“îoëøsŠë¨¯‘á)ý£¿ç¿þ9¥ÿ…ð”þÑßóßÿÒÿ€>º¢¾Eÿ„§öŽÿžÿøæ—þÂSûGÏüsKÿ úêŠùþŸÚ;þ{ÿãš_øW_ð#_ø×{ñ[J‹âÜ»¼<ÞwÚÆÛŸÜ¹OõCßÙÓñã4ô]Q@Q@Q@Q@Q@Q@Q@Q@xŽN?à Z?ô#Üéj×¾Wøäãþ ¡“ÿB=Çþ–­z_Âã›ÍSþ¾eÿц¿.~ ÉðýlÿôBWê7Âã›ÍSþ¾eÿц¿.~ ÉðýlÿôBPë½Q@Q@Q@Q@Q@Q@Q@Q@Q@cøÛþAQÿ×Qüš¶+Æßò þºäÔËÑEQEÜi?ò ¶ÿ®Iü…põÜi?ò ¶ÿ®Iü…pôQEQEQEQEQEcIÿ­·ýuOæ+¨ñOü€§ÿ€ÿèB¹}'þB¶ßõÕ?˜®£Å?òŸþÿ¡ ã袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šî4Ÿù[×$þB¸zî4Ÿù[×$þB¸z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š±¤ÿÈVÛþº§óÔx§þ@SÿÀô!\¾“ÿ![oúêŸÌWQâŸùOÿÿÐ…qôQEQE¡áoùAÿÿÐMgÖ‡…¿ä=ü ÿA4ØQEQEQEQEQEQEQEQEWøäãþ ¡“ÿB=Çþ–­{åxŽN?à Z?ô#ÜéjÐ¥ü.9¼Õ?ëæ_ýkòçà—ü‘ÿØÏÿD%~£|.9¼Õ?ëæ_ýkòçà—ü‘ÿØÏÿD%~»ÑEQEQEQEQEQEQEQEQEV?¿äýuÉ«b±ümÿ ¨ÿë¨þM@E¬|uÑü=ñ†?ë‹qku.–uD¼(µ* ™Œ¶rd>ÆØØçŠÎðíMàÿøÓ_ÕuK? Új3Û[G¬]Ci,æ'ÚÅC?=Tã¨ÈÍ3âìóeñ[ÆúµÏöɤ^ØiðD°JRá%·šéß'nYÁÉWqÁ®Ä³_Œ%¶¹³Ó.4k½*úóXžK/í[­5íwd.ò[žUXË+A•BqÉí)´µ]ÿ?Õh¾÷¾êì¶Óòÿ?òõö[ïXiÅììöv6–V¶÷-y=ì)ó¤‘J—ܼÆfX¶’ ~ñ~“ã}(_x3SÓõ{"æ1qep“ÄXu‘‘é^Iÿ Õ«Ïáë;J}ábѼ7¦Î²;ºLÚ}ãOqcå] ‘ÉÈ`£šô?‡Þ—Á¾&ñ}Ó‹Dµ×õD¾¶Ž ƒ‹Kx[xÚbð¹ã9ä.ÖmzþjßzüˆM··oËüÏaÒämÿ\“ù ó¯ëö¾ðýö©®H!²Ó­äºÏðFŠYä z.“ÿ «oúäŸÈWŠüwøu}ñgÀ-áÝ*í,mu;˜SR›qYE˜pÒ¬?+ì&mÃ19Æ »Úȵkë°ÿ…¿4¯Š‡_fÑâ{–²šÛQ+ ö³‰|±ƒ8ÌS9;×¹Å?Ç?ü3ðëRÓ­¼W«XZ¾¡|l =ÔH¶’rf.ãbì;œË`k‚Ôg_iþ*‡Ã:ÔZÄZÕî›®[]Ö9 õµÄo"¿ÙàTXäŽÞ ªH 䤃¾3ºÔ¦ñý¯„äÖŠ]K¶ÌmLMF6œÁ¸8ûùvŽ™Àw»û¿Kþ¿$Fº¯_Öß§Ìõ?â«øšãEÒµ½"çXµO2k¯#{˜WŽZ0Û€ù—’?ˆzŠÄø•ñzOø—GÒ4ŸjÞ!Ô5˜nnc†ÆH¤py{É3H€ŸÞ®$žkŽð'ÀxÄú:ºèÙ>Öu f-F)¤}FüÝ Ç•"•Si;Ÿ{nò“å·~2ü ‹Þ7Юîu ½?OÓ´íFÒi,o¦´¼Y.!6€òÜ•s´ü¹VÄ»Ù[úÓüô+­¿­ÿË_øckMøåá{¯‡º?‰õ­^ËCҵȒKWÕn#´bXgaÞØÜ0r=nkSUø‰áý V±°ÖõÝÎûTÇØí罎9nòp<¤fËäð0Mxþ¥û:x®[ Lߨ7SøoN¹ÐÚÒÏSºÒ-î-£1Î Lb¬@IÖCž€*Wýž¼M¦kš ž ‹CÑRÎÏM²»šVyÃlÀ´-i=»¬áAq›âq»$ñW£—•ÿ à?·Dê£çoÇOø?wcÖl>%xwVñ+èÚ^¿¢Üêñ‡-cìop» WÌa· ¤xàƒšn—ñCÃZßöŸö7ˆt;¿ìPN¡äßDÿa93a¿vÖûØû§Ð×x+à߈•À|Aýž¯5}ORŸÃ:#[ÜØiVðۋٴ׊k9î$óX"o-”Kõ‡ÈAP1XwŸ³Œ®WAÔµkëcS±‚þÎæÐêóiÊ!¸™dR.­­Á•¢«–…D™ÉÁ»½¯êÿ‡VJwµÿ¯øoÄúD•gÔ-WG‘YNCF5Õx§þ@SÿÀô!^{ðÃgÁ¾ðæ’ð[[2ÞÞÔÃo+Ë[®Ôy>vQŒֽܑ Å?òŸþÿ¡ §£ÐÚÔò‰À𾓤éF£â w\óZÒÆÌÆ‡Ëˆ$²I+*F‹¹FIÉ,šÈ_Ú;NÒu-2ßâE”¾Ð^I+ëW0Û­»ÛÉ{w) ´¬¬A ù[ø‹à|üAѼWðÐéW7Ú}œúmÕŽ£4Eso+Ç&RdG1º¼+Õ0$q€j¬µßøßA×~'ÛxhɦXêV²[[4“¤FâK+cKÞDpȰŸpMEݯëúÛïÓç÷]-åÿ鵊^Ò5k WÄZµö¨‰%¼·ñ$·jçÑ¡l¸cÀ#9=)÷ü9aâX´[íE‡XžAv/{Ü»• D[q8e8ÇB=kÁü[û*xß\ð—‡VóE»´·ð펗í^îÎ+ˆó$1CúXc°§š@R§äõô|ºÖ/¼OuÒ>Õ¬ø“JÕí¦p|Èà´ûôfÙßèóí#÷ƒ$nl__Ÿát¿+¿‘-´´Þß§ôŽæ‰ºñcè6Úö&¹ßÓ–ö3t¸]Ç1nÝ÷yéÓš‡~ è>/Ôolü)­é:ÞšÛ.á´»Ži-›$bERJœ‚9Ç ŽÕóÿ„ü!­‹Ú?…¬­^M#CÕõ›éõtÓ¯-®—í0Ý(yeš…Îû€¡¢’MûU¾P¦»?Ùïà±ð»[Óźd«¢i/¤Áµws$ÈZ"6ÚËŽÝ[Ê ÊðÀã51»µûŸõóò.~î‹ú×úg«\øŸM²æóP±‹û*1-îùÑ~Æ…K—'äA9l j¬¿4•æþ\xóão†¡ÒÜzf³jÑøŸl$ÛÝYÚËÐDïÐ;JÍÞ­’öº×À~ïÆZ¬VcA—EÖ¼KeâI5å“ûBÌÛùÈŽ!ÖÉ· ¯æ.Õ‘ÆÓÝÅÞß×[~W+uB–—·õ§ùþ 3Փĺt¢¡dÂâwµ‹©ó&Mûã^yuòäÊŽFÆÏCPøÆš7‹Zeð®­¦jmn¨Ò‹K¤˜Ä…¶€À3×W˜hß¼_gã *±áÁáíÄÚŽ¾—+u1¼n–ïl~O•±JµÙï9#kð;áª|'ø[¡è¯o§E{cc ’YÆ;‰•~wÎÕ-–,r@'$žM(ê®ü¿¯›w·õ¿ù~ ý¦´?Mâ+»ë­Jðöƒvl†¥q¬ÛþúA#G–ŒÝ+27–XåÇ ëï¾$øsLÓ-ou-E·³¿‹Ï¶ž[è’+ˆþ_¶~täd|ÃÔWœÏð'[Ñí4[ß®‰{©h>&Ôµ¤³¸™áµ»ŠêK¥1IQ.ƒ±€`@àæ¥ðìï>‹¬ø^ïÅðèk¤E¬M5¼qŠÖâúî)Õmƒ§ÜD±î;Nãæ mÚÿÖ—üÇ-.×õ«ÿ÷ž“Œ´‰ãáÕt×I¢–hÙnP‡Ž"W<ªŠO8ªvßü1{âH´k?èRêó ’;$¿‰®$R›Ã,a·P†ŽzW‹øÃö7Ö5ëýzm+\¶µò&”™`¶šuÙ˜ê° ò5Ô¥zŒÃ+Î4¼Wû=x«Ä?`¾i´©t{ ~ÇT±‘µ[¨ ¬V`[ãò^O’@%vbCòöp×–ým/ødÿårZ^ß×õoÅyÛÖdø™á¸¦¼Ž_h‹&ŸÍt¦ú m£FØï Ýò*·ÊIÀƒÍRøañ_Mø³µ?„å·º±Òu§¥Ý½ÂÏ Þ!ŠRèÉÆ?}·<©®Uýœî›áÕý®•„u¹¼O'ˆ2êV E?´ ÒAs Œ±1Ÿ•°Qq¸(®§àŸƒ5¯ Gâ[¯E¤[^øƒY}M`Ó§’x`C.ñ¡-û’IÛŽsìk~nß»þm|¯ÕòïþðÏɞߤÿÈ*Ûþ¹'òå_~!Xü-ðeæ·â$º–Þ×b¬6Ñù“ÜHî8£LÎÎÊ dry s^«¤ÿÈ*Ûþ¹'òãŸ|wñÁ‚××PYê¶7–Ú•„·^>Þe•UR F)´ãFHÅ'ýzuü·0oþ?ÞxsL¸¸ñïƒõŸˆ&³M÷—6Ínéqt–û¼è¤uVŒÉ¹•±À냚é_ã/„"ðÊkRø§Ã«£É1·Kã©B-žP òÄ›¶–À'nsÅr¾*ðw~*øfm3Ƕ±´ûfp°ÛÞOyçˆo"šo1žZ8ʪml“ËY5øâwÖukM¦%ާâÕ%±MBm1®!|Vø70DÏ £.B}å8, "¯—ù¿¸•{ÿ]Ÿëýu=Zø§áiV·þ ñ…cc}mqqq\'ËóFÌÀ8ùÓ‘‘óQF¿ñKÃ>6_ð”x‹BÓ¿´×}§Ú¯â‡íKÇÍæÇ#‘ž£Ö¼ëá?ìã{àûGâ´Ñ.£ð펱m$Hò\*5åÔrÅåSq º31ÝÎ>l“^añ/ᇈþxA¼9¡Ú[ëÚ¯ˆ<%a Ì«§_N-Þ1?ÑnVÞX‰ž-…UÎAÅVîÞçþKï×úôÿ7÷M]üAÐtÿA¡_ëzL:ÝÒï‡O’ò5º•y9X‰ÜG Ðv>•›ñSâü++m#ìúEþ·y­ê §ZÚÚI nòä“–™Ñ@Ûu>•皟ì笊ږ¤‘XjÚN­­Úk[îu»»W³x„#oÙbŒÇ9_$غuÚÜ{_Ÿ 'ø®ÞŠ —µ·Ñõ¤Ônš+¹­g1'Ë_t«Ñ—Üö2®Ô_š¿á»_ÌMÚöíþðÐ?h¯ ê>·Ô¼Q©Úx]§ºžÈÚëWPÚN“Á!ŽXð\«lr¤ŽG­t:ÇÄ-ÃúÍ–¯kšE–¡©àYÛ\^G×Y8Z3ù< ÍyÅÙÓS¸³Ó´¯…QØGgy Õαwdò\NÊßh–ây®AýæèÝÔ1`I=¨[þÏ-Ò/ü4Þ›G´›OÓ´­?P¿]FWIk·ÌY,¤·hæÿ–ž[‡‰”¾N1N/›~ëõ¿ä¾O¸=ùþ–þ»®Ç¬ÿÂÔðÇö­ýü$zÛtµ/{oöø¼Û@Ê»²ƒ,£œrG­hIâ2+‡†]FÅeŽá- ÂYC,Dg‡ee!zA¼sBýœ5éõ {O×›LÓ¼/¬Xê6òYÛßÉ|[§ÝæÂ³@¯kÉweY]K€1š«àßÙ3\°ñF‘ªxÃ^‚æiášó^0³q©ìž(g‡*TŠîDþû˜xë„›µÚéøë§á÷µçjv»^åþr~Wõí/↵¿í?ìoèwØ Cɾ‰þÂrfÃ~ì ­÷±÷O¡ªºçÆ èÚž¡â_Çi¯mæ¾£ £N«¸Â¶7ão^zW•Ø~Íž'»ðcé:²x^Á´¯^xNÂkI¥c¨´ËÜf%òTy*v/˜wHç>½޾ ê–!Ò5?„úo…äZ5ÖŒÖÎÖ–Öþw”DñyP¿ E±—*@ÈÅ)ÞÏ—úÞß}—¥õØ#k«ÿ[›õ·™é? ¼X¾<ðׇ5È`{dÖm­¯–mÍ•Uö“ÜØÍwþ)ÿÿðýWœ|ð­Ç¼ á=UxeºÑìlì¦x‰1»Ç#$FTã jôÿÈ øþ„+Z–R|»Ù\ó-_ÇÖÚ?ÄóÃp×ZݵÕÔR®ß.5€Å¸79Éó—¡©®~ h6^+‡A¼Ö´˜µË”ßž÷q­Ô«‚r±¸Œ+cé\·Åø–ûâo†Ó Ò‡–Y¡H\ï¸ )$ßµ[å kIýš¼I{á/ì iË¥ø6ïÂvWRI+êeŒ ç4ò”y!¼°dù¤s»Õ]Úöéú?ø çäËi'kõýË_#Ô¾"|`Ð>éjñ^¡m‰íahüø–DùI#eÂd;þìR¤Waà=NÛZ½±¼Ñî »´¹C,3à ’9P¡!•‡ ä^¬üñ¿ZÔ|K„íu­´hì-a¼žxY¬/å„Ò4 T>ý ª¶ädû¯ÃÓrÓéçY‚ÚÚìÅûèmå2Åì9TrªYA૟AÒ©u¿ÀÍ6Þ«þ©ÜÑEQEQEQEQEQEQEQEà~98ÿ‚hdÿÐqÿ¥«^ù^ã“ø(†Oý÷úZ´é Žo5Oúù—ÿFü¹ø%ÿ$cÂ?ö³ÿÑ _¨ß Žo5Oúù—ÿFü¹ø%ÿ$cÂ?ö³ÿÑ @®ôQEQEQEQEQEQEQEQEQEO[Ò¶-V/3ËÚá³·=ˆõ÷«”P?ÿ/ý=ä/þ½ð‚ÿÓ×þBÿë×AEsÿð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½tPv}–Ö(³»Ë@¹Æ3ŠÃÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€0í<ö[¸¥ûNï-ÃcËÆpsëZš­ö„oÙ¿63Œz~bŠçÿáÿ§¯ü…ÿ×£þ_úzÿÈ_ýzè( þ_úzÿÈ_ýz?áÿ§¯ü…ÿ×®‚£¹ºŠÎ%ä‘Å v '“î@  ?øAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€9ÿøAéëÿ!õèÿ„þž¿òÿ^º (Ÿÿ„þž¿òÿ^øAéëÿ!õë ¢€#´ƒì¶±EÞZÎ1œ Vü ¿ôõÿ¿úõÐQ@ÿü ¿ôõÿ¿úô ÿO_ù ÿ¯]Ïÿ ÿO_ù ÿ¯Gü ¿ôõÿ¿úõÐQ@ÿü ¿ôõÿ¿úô ÿO_ù ÿ¯]Ïÿ ÿO_ù ÿ¯Gü ¿ôõÿ¿úõÐQ@ÿü ¿ôõÿ¿úô ÿO_ù ÿ¯]Ïÿ ÿO_ù ÿ¯Gü ¿ôõÿ¿úõÐQ@vž û-ÜRý§w–á±åã89õ­MVÇûNÂH7ìß›Æ=? ±Esÿð‚ÿÓ×þBÿëÑÿ/ý=ä/þ½tP?ÿ/ý=ä/þ½ð‚ÿÓ×þBÿë×AEsÿð‚ÿÓ×þBÿëÕ/ŸٗñÏöû3òìÆrëŸzØ¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ð?œÁ@´2èG¸ÿÒÕ¯|¯ñÉÇü C'þ„{ý-Zô¿…Ç7š§ý|Ëÿ£ ~\üÿ’1áûÙÿ脯Ôo…Ç7š§ý|Ëÿ£ ~\üÿ’1áûÙÿè„ ×z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +?ź½ß‡ü-©_èZUæ»}ek$öúm¤Å>¡"©+ o;¤Jî@Pdt@HÜÀd˜aÿ‚œê£Âß5}sàWÄ}ÃàõüÞ#¹Ô5mÃiqk¦¦¢-Ñõ dv’ Úñ£ 2Ì6¶3•XÁÙöo®Ëwýw]ÑÛ…ËëãStRvi|QNïE£i»·mçÕÔWšÙ~ÕÞ ñg„îµ_„~ ð×—MÖl´-F-ÄfÜÜ\ÅnRyuD’?;q„·šûvF#*6ÿ†~!þÑ_¾k–:_Åx?Ã:ž§,0ÙÚjºÍµœ÷o3:ıÇ+«9vŽ@ ¸£œdéFVŸ´vjÛé³W^zÞýÒ=ã*·RƒÂÁI»µÈïÙiªó}Ïý˜¾-~Ñþ,ø½ceûFx9´ É Íqr|§i»\!1>j.¹l W¡dûÃŽÿ‚«èWÿ´çŠ|ð3Ãþñ?Œ´­JÒûÅ^+´Ðo--. µ†¶Ó·MwqjN¡qÊ&âtÖ° ©5oÚÀzÅ{ë¾5ð•—Ž5X~Ñeáéõ{xõ[¸°Ç|VŒâW\G!ÈR0ýÓ~(øfæ($·ñ…"\Û\^BËÁnÁ.%R”‰™UØp…€b ¢¥Õ¤©ÊO—[»ë¥Þý,ìý´z«§™VÃâ㌎F\¾êIÆ:¦”­»êÓMj“¾–>9øcûB|Oý©tŸ‚¾Ó)iÞÖLðŸÆ¿Šßt¯…žÑ>2iV’k¾ñ~µ{âŸZiú²ë?Ùz–obñÍsiöræ+¶óÚ(Nþg”¨¥9 þØ?ü5ð6ÃÆ¶ZÌßµïˆ?¯>%iú èvñZèšµ¿övÈ,ÒÖ5žh]u&&)d–F6ãc.ò£î‹Ÿ¼ û?hÖš‡ÇoøSÁ:}ôâÒÖç]Õ­ôèn& °Ž7Ô3mV;AÎ=pz¯í¡¤ŸÛ2ËàÇ„mtÍKYM" oT¹—]µ¶kHg7>R[Ú–3]˶ÑäuUQrDåŽð)¸®o‹Wx­]®ã=m¶—Œ¿íŵô0øîh:ŸR‹¦¯7t—º§v¹¹S²n1Ñù%iXùoáçíñVø)âéþürð_Äëþ Ó´ÍnÂûL×õ µ]nÔº[+ ;Q†Eh¢hüäc.öÇ—Š|qâmǾ²øùñ«UÒô„?ßiú=¤–Öמ –êo˜Ú 8Ùn5&´Gò£FL›}'ûJÁB´ÿÙŸâoˆj.¹l W¡dûÃèø[>K9ç¹ñƒ Zji7%µqm})A£ØYØÍXÏÌÆDÀ;†rÿhŸŽz_ìÙðk[ñŸ‹­u BÛHHÖ+ÖKÍJæYR{[tf¦šib‰ H£"­ÁPµIMÚ+¾]ßw¯ÝcŽž*R¥ Ký[HÓ/Õdòm4)õ«dÔ®d¬¦8íÌžc°ŽD|(?+©èA)N.Úïøß·s7…¬¾ÃêöÖÉ&Û]šwÚÇiEUQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@xŽN?à Z?ô#Üéj×¾Wøäãþ ¡“ÿB=Çþ–­z_Âã›ÍSþ¾eÿц¿.~ ÉðýlÿôBWê7Âã›ÍSþ¾eÿц¿.~ ÉðýlÿôBPë½Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ð?ů‰ÿ<1ðÏãâx#Ç^"Öïí¾1xÁI¾¼²ÓÛCÓo¤ÑXíg†ÁŠ»b[q,‹#ÇÉi">oÓß>+Ëû"~ÍzF¿ã[ GV°ÐNŸoâ åÕšö}.ÖIcŠâöK™#V¹K0Ë#²£ãwà¦#;ÅI«&¢ÿð8©/-•ÞË­W”U áÉIÉÙ%×H¾¶zóY+]µ§KúÕó6§ÿ »ñ!Óm>ø6ÏÄZ—‹üo¨ø3Â2ßë‡OÓu‘¦ÛM-ýü×)m3ÁrYß@"™¥hQ†MËÐ| ý·×ãŠ<¡ê¹Ñ5iÞ'›Q…¯Òá4«ÝTµÓ.í‘ÕŸÏræ9°™HÁ(¥ö©í#¿•þVæü·ìôzèEL£F<ó…–½Uôæ¾—¿Ø’õ‹[£Þh¯œ>2þÓÄ?ø$¿Šþ/ü7[Ï êÚÇÂËÏi‚9ÃÏ¥Nú[ÜŶ] 3FÅ~lJ瑨~ß~)ð“ã­?âï|1á¿øNÃDÔô»[ŸI=–µmªÝ\ZÛ#ÜA§¼±Þy–W m¡·¸ÜÞZÆÒoÈU*ªR”g¥¼ŸŸã¦Ã†Q‰©h%~g®“M8.¯kÍ+­ºÙSQ_.|'ÿ‚—ÛxÇÂÞÔ¾%x7PðŠÝxÞokò\Éq>Ô>Ëö‹I\^ZÛOö{öñ£Í ê°‡áø›þ ™uá¯Éð—áÛêú×ÄM#Qñ^™i¨_ÞÛÃý…os6×nözuÜ«5Ú\ÚÊ´!HÂITª‡N´#'³·ã%ÿ’»úkÑ–²,t§ÉìõõIiÍÕ»[ÝzÞÛwWúþ¾hñ§ìgâüý«¼;e ‹Ï޳êè/$Òˆ­LJìôÔ„DJbkYùbO©bTzßí ·ì®~'êškøj#á±âÓ¼S?ö;éÄÛ‰…½üŒ¯öfRB9Úû?+cÁ¼ÿFÔµŸ‡^3¹ñ/Ã;»OøGXðDw·–Öº´zÝôvV—÷žŸg6Á+JšØFL,Ød©S‘T”%½¬úèÚíݤi–ÑÇR½l4tRŠéñ)&·{sZïmVº›¿a-gÅ¿5ÍWáñ𦓥êVÿ¢ŠÜo·*|?â)õ+­É%@kibŽ–]­å¨ Gì¥û*üHø1ûCê–¯ÿχ>Ö&MNñƺ/ïo¯’ëíP­å„Réc?hy Žæâ'yƈԛ¾ÿ‚‚_hw¦ÏöŠð]ƒ¦Ò3ñ'†tï këZ7…m4ë+ï_hW÷šF©©ß…¼´¶™ dkÛW‰‚J£ut ‚}/ö`øgãÿ‡¿³§ö'Æi×þ4šmBq{l‘ÜGf'¸–KxÞE··oøWÆ:W€5Ï>º"Õ ÕoþÄ‘¼oÙŠMl’êv1É)¸þiY"qÞxCöþñˆ>'hÖº¿ÃD´ðOˆü[¯ø#MÕíüB·Z•Æ¥¤H±:ÙÕR SH¹ÚþypåTÇ´‰ û:QQ–¶W¶f¡å³-›ÖQm]¦ÅK›Ñ¦ªA$”cÕ}˜¹'g'ir&ÚI4µ²¾¾£ûS~ÏQþÐ?³ž·à¿ݦ…©a¹ðþ Šq¢êV’%Å…ÐUê!¹‚+Ñ• œ‚E|óâø'&ø/ðÚþ×WÑuŸŠ~ñ}ïŽüQöåö‹§x‡RÔ-n­îV BÞ).m’Ý.Ö;g19ÛG( Y}[ö%ý´nÿkDÖ—Äš‡á=CM‚Öóû5Ùnµ­>)üͱê–ÙÛKc:˜Ê•h‹ +ì&°~%~ßZ÷ÃïŠ>)·_‡–×~ð/Œ4ëºùñŽù.58´Ö‚[m?ìÄL‰&¯n²oš2A!Ê Ÿ³©«µßi-ð%ßMö8ð1ÂJX q^ãmÆñûQäj÷W挬”]îýßx§ðGö›Â>ë~5ðß‚l¬¼¤x²;.=Rë^û.¡¬jv7‹=µÕíº<¤¬ždŒ"!§Ú‰±ˆ_;½ÿ‚}|ZÕü3ñoÂú4Þ ðŸ„ÖSáõÍæ‡sáÍ;ÄÞ$°šâý"ý…<wñSÄ6`ð5Ï‚¼_ñBøwâËÛíý&M5tãö {1lc•\éI\˜ü¸®¥Sú_~ÃZ¿„5_‡×íÿª_xcâ׊Úóé–iäß[…Ýh®Ì¡¢—0…Lš¿±gíÿ¬~Ö¾'±Søo©øsþ$ðÿü$Ú®’^ÜEöbÐìƒPiì-á·ºxîb‘#·–î6 >%ýØ/¥ ”äÔ`îÿ+(Ù}Ð[êíÕÜã¯,ÍaŸ4R¦¢›Õj¥ A=õn-Ý-¬—]OÚöñψ>>xoâ7À½7Àþ*½Ó|-«xFçCñf¥>Ÿd‘_Mi7Úã–K’Ì ˜á1¨‘$ÿX»pÌýbýKöañ•ŒÚ®§¥ë6Wà ø ¤£»žçImKΣ ˆãt½ƒh1ù\©n#þ /û`øãÁÞø½á¯Ù§D´žðX×½uw:ëº3i£N#O¶²[cŠÇJHÒss—Ì£Êm£~•·ü—]Ô>>Íá-á}ö¥¦h> °ðŸˆïl.¯®î´ýJæi%{x£Ó´ÖvÆö6yn­äÚ³8„„_3ã'íáñ?ÅŸ²?ƈ¿³çô}7Â~ÐüJ<;â{«jkw¥›ˆê]*K‰bó­n%3JÎ#ŒIbFòò‡²¤•Z}.î•ïfª|õ³}“jèè¡K7s„%d¤¡Í%hÝ% +é/víZî͸³àžüA¤üTð£]øCÁ¾ñŸ†xsÄþAàK;M7T¹¾³±¾‰µ±æ½ÃÙDâMRÔ’±–J»X"´žûSüaø‰ðÓþ Ûñ+Çváïˆ^ð†§ªZÇk©BÚÆX`•ãf–ÑVVTQ/–ð,<²võã¿ÿlÿ‹ÿ~2üDÖüKà]#ZмðÓEñ^¿¤Aã°hð-î½ö™ì¬A»º–ÞÒò™ LÁ´Ê>RíB³wvVî¶ŸéuÙi °øŒÃOÛÒP¿6š«¹)ÑoW/{šN™·{4šºO¦×aOê_·Æ»Y<æi7–Zl^’[ƒg¨iñÛ ÙhKðãTðÏ­¾üFÔ|cá›j du mNÆuº[É­l;k˜o¯ï¦…¡ÓÊ`˜BÄ®×ÀØ3Å~»ø{¨|__\ÞøsCñŶ¡og,×vö׺ö±k³i­Ð˜bŠ+ˆY˜#Ê¡X3í³ïÇËïÚös‹Æ:~ƒ•®“¨ØÏ£Ë¨yÛê67SÙϺX¾x¾Ñm"¬ÞW)†Ùü5ó§ìßû{|^ñŸÀ߃ºSøÃ^1ø£ão'§’çÅŸÙvwšt0X¬—RIšË Ü÷7Ê«h‘c:€¹BœT©Jö¶ÖéÊãÑn£ßT—7FÍã[3Å{EhóÆMJí'Þ7{µ^Sm鬷jÉBßðL_Z~ÌÚƒ´;ÏYêÚÀ _áUì‘<ÑÛ]j·qX® ,šÙ^Ú鋲ùŸ¿ÈŒ–jî|_ûë>"¸øwn|)ý¥âñ•…Ü›üèl´…ЄñI'’Ye?ÙwÞZ©eýúe“{íè>?þÕZžµÿ¹ñWÆŸÙÅ%Óõ+߇Sø»B7â%›Oß`ncy¤±´‘)ÝåÈì›IÚÛ‡”üGý³þ/ü øËñ[ñ/tkBð_ÃMÅzþ‘ŒJÁ£À·º÷Úg²v±îê[{HÊd3Ó(ùKï:ŠE-c墼¥SuýäýB¥,ÏR.7R’I´ùèÝj×W z5»IýuðýüVç\ÿ…©‡£UœhÿÙRLû´ï—É7>jŒ\ŸxL ãó] |±ÿ#¾½ý¤µ|=øuªø‹Ã:‰l¼%¬jÖÍz÷Ð^\Çm#M ¬vlö° Ûs4’ÞC"ªÌË*)—×i«ÏÙøsF?†¾,›RUÖäÐa‚]R+O*NmÒpTŸ7Ê ´ IQJR‚”]ÖŠÿv¿ï·cçñxJØfXòó.d“[o²nÏÉêzUá>ø¬öú‡àðÿˆ|Qâ[¹üKq¦yzźiW–Ò.™=ÂÚß#[e·*#|èrÁJ¾„¿l/i_ <‰ü;i¬x£Ä:ëÒòsöË Í ¶±s²I.Kps àº×åø«þ_ð48ºÛúÞß™ô•ÍÁñ6Ò/„‹ã[^éI¥k\ÛÞDc¸³A˜É"vuzŠðÙ×öË’/øÞÿâÆ¿câ['LƒÅP¦œÑ¶‚á>m<8ßÊ#ËþõI#³ê×oëôoåè5ªMuþ¿U÷ŸQÑ_?ÇñëÆ>ñîü}áûsuikáØl4+MkÏ€=íÝžápð G,Èm#÷CæÁÈÓÓ?jo®¾ö¾*ðM•¦›â+_ j·6úè¸û=ÍÏ•ä¼`C4én-呼à6ÓBÖ\«}¿/ó_x=5þ¶¿ùžÛExžûAkÂ{]+À>“Äšž£{¯°:ž³¢ÛÇa~ #z[œ©óT"í, (fo™ëÓþøæ/‰ßt/ØÁ%¬:í„7é „3D$@ûI3ŒûR‹æW_Õÿᘮ¯o_ÀÝ¢Š)Œ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ÀürqÿÐÉÿ¡ãÿKV½ò¼Ç'ðP- Ÿúî?ôµhÒþÞjŸõó/þŒ5ùsðKþHÇ„ì gÿ¢¿Q¾ÞjŸõó/þŒ5ùsðKþHÇ„ì gÿ¢€?]袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šò]öøm ÜxªKm+[¸ÿ„×ÄV>+ÕÒ÷ÄÚ¥ìwÄW6×)÷.°’Úßåˆ"²Al­*·ãçëϋÿüaá=þËK¼ñ>w¤Åywb/àµ3ÂÑylÌ¢`»ó°<ëh¬çJ¦é5îµkyZÖû´ô:¾½ˆucZSnI¦›×Uko~Éz$¶<’OØáíÏÀ/ü8¸Óu4‡ÐZÅ \iÚ­Ö—©ioš ëIcž)7‘]‘Áu–@Ù A§­ÿÁ?>kžðž‰ÿþ£§Ùx%.¢ÒßL×õ>èGtë%ÜsÝ[Ü$×Kq",“,ï ™Æù775ìôS©N\œâõzn8fªi(Ö’³m{Ïw{½÷ww~o¹Ä'ìãàÈÿgOøTÉ£cáÿü#çÂßÙ_kŸþA¦ßìÞGŸæyßê¾]û÷÷Ýžkâßìqðïã„ú¤ÿ4K©ïukm*ÖkËMZòÂê%Ó.¦»°x&·™ÞHg¹Ä±s¿ Ì éôUËßw–¤ÓÆb)Kš$ï£{Ý;úÞ1~©>ˆñé?`„÷ŸüQðÇZ𼚷‚ükrouË=OV½¿›S¸Ä?¿–îyÞàË›hÌܳ»$ì|^ý’| ñ¸x}üc§ê¶7žŠKm&ÿ@×/ô û$TY-ÒëOž¼—EºåÆ„®QHôš+7J r¸«h¾KD¾KEÛ¡KŠRRUetÛO™ï+)=÷’I7ÖÊûw‰þøOÆ¿.þx·J:ƒ/´“¡ÜX\]Îí-¡ËØ×üíÛå®ÿ3?6íÜ×áØ;áƒtÍNÚÏHÖõÖ¯´­JþëWñ.©ªÞÞ\i—BîÅ乺¹’VòfU`»¶0(6×°ÑV✹Ú׿^ÿ™0Æb)ÃÙÆ¤”o{&í}5·}¾Hñ?Úcö!ðçíðǾ´úE·ÅMbÃRñdÒÂ÷§RH>Å«<`‘í4ø`Y6P¥Á'Ùm´»k=2;+X!ŽÎ(„  ¬`m¦1Æ=*z)(E_Mí÷-ô]51UjÂ4ç&ãÚòmE?Â1^‰7øCþ ‹ðóá÷Å+GÂ÷kàÝWÁš—ƒ5? êö§i=­Üö®±[ýªåÖÊÚ8àž1m$xŸŒl·´?ø'ÂÃ>#Ò¤Ð5RZXÙêw:·‰õ]JúXìf’k#ÝÍÓÍ–òLï‘:ÚïFh¦ˆYÜÅo:%Ê"ÜÜ2‡hÚVtesº¹†¿h½7à_Žl¾#x¡î¼kz ÿ„rëþ½.ãì¸?¼ÿHÂVñA‘ÿ=l¯3ÛgZ_ÙÏá×íáöñWü4ŠR:4°è ø¯K¿ò/Üô XyXþûý¥x£ž _Ã{^öì—­´KÎÝNÇ]8Îk½Ù[JŽîöm®êîíù>ǬþÄ S“ÿø/ã/ÚÏâ‚>øOÁšG‰|¦Xj^!ñ!ñ íÆ™¤^Í-´šu•¨¹ŠÖãÌ•~×wuå„ùÚ,¤¦â¥GW§ ¶þ¥ú¾úÚ7ù!Ò£SëQÃWÅÞœc~hÎé$¤”Sm$ÝÜRÛÞ¶Ížáð7öQðWìñªêZÃ{}zmOV¶‚Êâÿ[ñ£¯^}š#Cl—…ÄÒG 4ҲČ4Œq’Mq7üÓ´o~$|I›Sñ ÿ‰³¥\izާªZj'‰5=Q‚mJåî¯ÕolîcŸÊžw24ü¬ªaÄÛ™ãŸø&÷ˆڜw^,ÐuÉOö=¦ƒs *Õ­­õ;;O3ìÉ} WJ—)Y'YÎì€G€øÖçâlŸµn¨×-ñ•|yÿ Bÿ„R=551à¿øD Xi}°(þËó6gy¸ÿKˆ\kwÀ¾#^üYð?‚5M3âÊêºGÅŸÜx†úãA¿]!¼?$ZôºZ¶¢cû4ЗJªHÛ8Ñ‚0U0>[ò«¾žŠ?ŠR³ìÔ—A<>:/kO/…É®fœe6÷Ö2”R¿Ú›J×ßè3ûx_Œiã«ûvû[†òMJ/*6¬~xv?Ù–ïö™áûø¢㩼Kgã v8?³î<¿²#ɲÖÿlžØ\ =ÏJQ¡¯"Mzu“Žý¬®ßkhhòêõW#Å9EÞ:]é »5}Ûº¥¶ïð³ë¿°Ã/ÚkÄÏ«|_Ñõ{«Ë‹(´Ûѧø‹RÒbÕm¢‘¥Šج®"K´ä‘‘fÈøÆãžþÌþoÿÂNtOøžÂD˃ûÏôˆü%oóÖÊó=¶uªUMò;¥½··Eßw§©åáሩEUŽ)GškG6Ÿ5׾ד³æßKô= WýоjÿÆâÃ^°×g¸µ¼»]7ÄÚžŸa©Ïl`šòÂÞå-®äEŠ%ß4NJÆŠI k韲ÿt{­m;BËáj^+Óí— ö]OPû_Û.9“çó?´o>FÊ/›òªíM¾Oû9ü:ý¢ü>Þ*ÿ†ñCêBçF–éwþEñûþá++ß´ ïÕ_Ù‹á·í'áÏ‹Ö7´ŠŸTð¢C0¸·>.ÒµîPˆÏ‘màý:C†ÁȺLu*ãå.HÝEA«ë¶‰ß¯ŸºŸÜi[ ^0©‹‹PI[»®V­Õ%'yµ³gÐþè ü.Ú/ÃûÓôƼ»¿0 Pg»¹–êáòìOÏ4ò¾3»Dà™¿ãð–Ÿ¢iÚGŠtû %îFŸöëV“éö÷ Mcox{Ç×âçÅúdW³ >çJ%Õ^Öãg›*° ­å¡ä¤eps]?{pZlp>ý™<á˜oÖÊÃP¸mNk+‹©ou{ËÉe{9|ÛoÞM30¸( „Ål\|ðåÔ·Ï>šµ-Zß]¹>|£Ì¼ƒÊò¥ûÜmûÏÿŒ×7Ex?Ú¸¿ùøÏûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7^-ûrþÑZßìÓðËGÖ< †×Z–µ™#êÑÍ%´¼R±r!un kÈÏàœV”³ miªq¨îô5£ŽÆâ&©Â£»>ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ¯‘>þÝË¥ü3¾ñÆmSž$’MV-'Kµð=¥ì³ÝÎé¸ÅåÝ…,øÁ¼ã;ˆšð÷íÙâoÝkêbÛ[øîÓÃÖ–÷º3›´·˜LLSÇç ’þírÜàƒÁÏjY“r\ïK~6]¼ÑÑís 7Îì¿àÿ‘÷ü.?Ðgÿ)öüfø\~*ÿ ÏþSìÿøÍ|Ëû.~Ø¿|âÍZ𶳦®‹©ÜÛÚÝ>D·Ž(ØÔŒÄGrs“ô>•¥ñ—öÙðïÀŸO¦øÿÃþ4ŠÊÖH¢—XL §)‘UY œ Ø;°Ak‰Ì}¢¤¦ùšO§S7‰ÌGK™ó.‡Ñð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã5ó_Å_Ûë ÏÿŒ×Ë’~ÝÚO‹<5ã›Oé>"ÐFà1@UŠž}Ž3þ~×LjC‰I ÒIþ.x×Ûæ)6æÕ¿É¿Ñš¼F`•ÜßõoóGÖð¸üUÿAŸü§Ùÿñš?áqø«þƒ?ùO³ÿã5ów„oxŽû_µñ ‡ŠÏÿŒ×|ý¤´/Ú3O»»ð–½oki2yÚ…‰¶IüÐø1$I´ÆCÈŒšçbý¸¼7‡Òñmõátþ&ÿ„Kû4Ú ½ÿÝ1ù˜ÛþÖî¼uâ³úÞcÎéóJêÚzìcõÌ}Úæw[ý×ü‘ô?ü.?Ðgÿ)öüfø\~*ÿ ÏþSìÿøÍ|Õÿð.ãiô¹­¼LÚU®©ý‹?ˆ—NÎ çxZãvrêŒ|ÙÛóVÖ£ûcøOL𶻫ÜA¬›_x”øVè-ºk°Ê»oÁ.>bAëÅ?¬æ:{ÒÖÖùÚßšûÑRÄæ0ÞRþ¿á{ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ¯Õl/ i_n~}ƒÄ—Zõ¥Í¥´­m§™­£ûB£,"·ÈŠ$]ÌÀcœg£ñËöšÐ¾jš&›­XëÚæ·âu±Òô[/µÞL¨wÙ¹~UÏ®O8õÜÃÝ\ÏÞÕy«_òÔ_[Çó(ó;µ–÷ûiÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ¯~ÁCWPøO¥_üUÓu]kÅZö«yi§èÞÒÌ·“CR\ÄÒ`m s–ìpÖ#³¸ÿ‚ƒxþÏ ê%ŸŠ5wñT—Vö¶6oŸyöá K|‰?z˜ ¸ç8æ¶\ÎåæoÓúòq¬êæP“3ݯº÷üŸÜÏ¥ÿáqø«þƒ?ùO³ÿã4ÂãñWýòŸgÿÆkæÁE< ãýwÃ:NŸâèÅW_Ùö÷—:_—iÞ@û<’ï Éó'ïzäŽq«ª~Û¾ð÷Å{O ø¯@ñ¦‘5þ¨t{]FóKØÝO¿bùmæodc¯³çÔºù’|­ÊÿäD±Œ[NR½¯ùÿ“>‰ÿ…Çâ¯ú ÿå>ÏÿŒÑÿ Å_ôÿÊ}Ÿÿ¯•tïÛvÃÁV^,½ø5æ©o¦øÒO YÅ¥i%f…ðìˆÊe>o‘½pIÆšô_€´Ž‡ûCÛë_ð‹YkzUþÅa«Z}šêÝðHܛᆠÈ*rLñY„"ææì­¯­¿Í}äÔÅcé')MÛkžËÿ Å_ôÿÊ}Ÿÿ£þŠ¿è3ÿ”û?þ3\ÝÏý«‹ÿŸŒÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÒÂãñWýòŸgÿÆhÿ…Çâ¯ú ÿå>ÏÿŒ×7EÚ¸¿ùøÃûSÿ?ÚxKâ׉o|a£[ßê‹=½Ö£m±µ…¨2+ ¬@Œ†<‚ })¤ÿÈ*Ûþ¹'òòO‚¿ä{ð÷ý…ì¿ô¢:úÛIÿU·ýrOä+ê²,ELM J¬®ù¿D}NI^¦"„¥RWwýbŠ(¯höŠ( Š( Š( Š( Š( ¼Ç'ðP- Ÿúî?ôµkß+ÀürqÿÐÉÿ¡ãÿKV€=/áqÍæ©ÿ_2ÿèÃ_—?¿äŒxGþÀ¶ú!+õáqÍæ©ÿ_2ÿèÃ_—?¿äŒxGþÀ¶ú!(õÞŠ( Š( Š( Š( Š( Š( Š( Š( ;ý§ä•ßÿÛý,¶¯œëèÏÚwþI]ÿý°ÿÒËjùξC‰‰OÑþgÉqñ)ú~¡EWÍ8QEQEQEQEQEQEQEåÿµ_ìíqûIx7FÓt ÝèºÄ:Ä7fÀ^ñ$Ы峠ë <’>\`æ½BŠºu%JJqz£JUeFJpßúî|óâÿØ×Æ_<3§|UmCľÖaÖ4]V? ÛZ¥‹ Ã#ÛÆáf v¶Xñ´ H9V?ðOé!¹“Å>=þÓÔo¼aiâ뫯ìE‡Í’(h¶,ø]æbwt×ÓtWTsñV‹KÑGËËÉýz·/*zz/?/7÷žKðkölÕ> ü^ñnµ£x³í>ñn¡>­6‹&˜‚H®e –[Ë6hàŽã'Í>7Á6døÁñÆÌ^1´³‹ÅÒÛÌËwáèïîìL@ \´ªÑ¡ÆM¤€ªIçêZ*iã«Rš©{ÖKe²µºy-wÐ!ޝNn¤e«ßEÓäxg‹ÿbïøJõߊw¿ð’›øYzmž³û?wöw‘¦üù£ÍÝ·8ù1ž¦»MoàRë_³Aøru{‹u: z'öŒQm’Ìò÷t;yMÜ‚F{×Eg,MYÅE½¿eøõª·‹¿ÂÓ[n’KðŠû½O—¾ÿÁ8åð+ëowâÝ6VÕüqá ¶^ŽÉc€Ì›&ÌÒ ¹bÿ3÷€ Ÿø'ºÝ[ÙFÞ1¸ˆYøø/t:~Æ|»?Úsçp컌ü×ÒVÓÌqm¹~ ÏËÍšhb9¹¹µô^^^HùsáÏü’óÀÅ¿Œ´qávðÒ}ŸÂvñD ÉyóFde¹b#!üÀKî9`®ý–bÅýœ¼®xŽ}rÞöçZµKCe§ißÙÖ1ªÛÌ^l™rW‚ …Üø7ëE3EE%)n¬ô[}Â©Ž¯V.–}Kyy#È|Oû$YxÏÆÿµ?jó=ŸÄm*ÛK’Ö<¹,|˜ö‰RÄ9' ‚  `äW £ÿÁ?õKø×þäפÒ|/sámǤ-ªiÑMÁæÈ«)30GÆ \àe³Í}1ED1•¡XËK[eÚß“h#ޝ»t]KðŠO½µ9ƒáPü(ðÿ†>Ùý£ý…cŸÚ|¯+ÏØ1»fæÛŸLŸ­x?…ÿe+«ïø(v¿ã›ý&êÇÂÚ|I}hÒÈžMþ¤ð¬m,qƒ21,3¼Ðñôý©âêSœê'¬“Oç¹5w^ñi'±ð¿ˆ+)öÿ¯Žä˜ßþ‹þ»Ÿ¿þ·ÛîVëþÉš¾—¨üQÔ< ã› Uøyiu ä~çÒ IQûÑæïVeÏÉ€zöÊ+?®Öµ¹¿ý×Ûû±û¼ÙYï/Áw¿nä:u¼–z|ÝL×Å£ÊF „ #ß­MEÌÝÝÙÊ•´ (¢Q@Q@Q@Q@Q@Q@Q@^ ÿ‘ïÃßö²ÿÒˆëëm'þAVßõÉ?¯’|ÿ#߇¿ì/eÿ¥×ÖÚOü‚­¿ë’!_kßîÒÿü‘ö\=þí/ñ?É(¢Š÷Ïx(¢Š(¢Š(¢Š(¢Š(¢Š+ÀürqÿÐÉÿ¡ãÿKV½ò¼Ç'ðP- Ÿúî?ôµhÒþÞjŸõó/þŒ5ùsðKþHÇ„ì gÿ¢¿Q¾ÞjŸõó/þŒ5ùsðKþHÇ„ì gÿ¢€?]袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šó¿ÚwþI]ÿý°ÿÒËjùξŒý§ä•ßÿÛý,¶¯œëä8—ø”ýæ|—ÿŸ§êQE|ÑóEPEPEPEPEPEPEPEPEPL¸¸KKy%¹`‘Ä¥ÙEdš}A©éñjúmÅ¥òï‚ê&†EõVùNöÐqµÕö>b›þ 7ª7†çñ¦ŸðÃY¸ø]m}ö6ñö”Kp˼Gæ­™]Åw¿{nx,@ôÏ~Ü ¼«=‹|_kgx‰µ¸v 4k,mòFr :¶z Œâ¼gþ§âÍ—Â+Ÿ„z_‰|ÿ â{Ã"ê2A?ö¼vÆa1ËÊ'xÏÞç'æàt^)ý‡µ»ûï‹‹¡ÝèfÇÆº›¤èÂêY °XcŒµÆ"!yˆSqèp+Û< 릶³wkݵîšOW²[Äé`å4›²»Ù½¹¢“w¾¶rmyt=sâgíMàƒòX§üGmk&£möÛxà†[·{~Ó¬gÀ)ÁÁà×[kã]"ó â mNÅ´7µûp¿ó”[ùwù¥ÉÀP¼äôò×ÄØ#ÅW¾#ðî³áÛŸkREá;o k:v£©êÊb‰Qž9í ¼‘¶Þc`Œ’ #g°ÛþÎ-û!Ÿ†º„¶:<÷;X»éæY­­el±1ùÍæƒ«KahÞDzkH’9™ÔmURò¶Ó÷ò}9ÖXlZªånfí­ÒI]_KêþãG‡ÂN³„dÒÕÞ÷I'~Ýc·“¾çÓ6¼?ª|3>1²Ô¼6,ŸP7¦)~ΊY¤ØT>0¤ôÉí\lÿ…ÿu‹«øÇL¸¹²³{ù„«%º$»÷ÊŠ§jå˜J€IW>:øN-öTñv…àë7òm<-wcekm«jéh£’pWÌ¿ ÿb_||ð„n¾,Þè¾Ó4ͤé1YC9¿Ý'‚oì[5;¡%­Ä$ZÇóF$L¨0~h÷ž¢·>ü|ðÇz~k¶šØÓ–'¹òÇ’% P6å'cqÔcœWÍß¿`¿éEõ·Š­|/cð¥÷‡¬õXuVæâF–Š,Å91Cå•‚~UŠú'ösøRÿ~ øwÃúœzwöž›aµäÖkû¹äAË*¬Ã$òÀMª8ZQ~ÊM½-ªó»û’ìõ'OM?dÛwî¼»o×±æß¶ÕíÔºÊ6‘¢Ùÿex÷þÕk­BD[„ùÿz»b?¼;8CÇ_›Ž{=CöÛøY¥xÔøwQñ}”:Êê ¥½»ÛÎ<»…}…ü½ª7q¼¾õå¿ì3âÍCûWÊÔ|:>Ýñ9*ñ'߈zU•ÿ†ÒÿÅ~8>&°™æ›m½¾òB»IYpÄaAŸ›šÞ4°SqR•–—³ïÈ›Öû^OätJŽR~õ——«õòûÏjø‡ûYü;øUâã¡x÷ÄÖ¶:¢ÌÑf™m<Â6yòFŒgr‘æàƒÓšô8¥YâW•ÑÀee9 B |•ñ›ö ñ7ˆþ.øÏZð€ð®¿£xØE4ÖzÖ©©X}’tn[& p¾a¿‘ÀÁ-ïŸ <-ã ø»R¶ñ5æ†þ ¶±³¶Ð­mCýªÝ£…Vo9yÛó1Æ3ƒ\µhÐT£*s÷­w–‹­Óï¾÷9q4¨Â1te}5¿Ëo½èú#»¢Š+„ã (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€4¼ÿ#߇¿ì/eÿ¥×ÖÚOü‚­¿ë’!_$ø+þG¿Ø^ËÿJ#¯­´Ÿù[×$þB¾×‡?Ý¥þ'ù#ì¸{ýÚ_â’,QEïžðQEQEQEQEQEWøäãþ ¡“ÿB=Çþ–­{åxŽN?à Z?ô#ÜéjÐ¥ü.9¼Õ?ëæ_ýkòçà—ü‘ÿØÏÿD%~£|.9¼Õ?ëæ_ýkòçà—ü‘ÿØÏÿD%~»ÑEQEQEQEQEQEQEQEÄüyðÕ÷‹üw§øjÜÝÞ̱´qT.æn\…*“É+ÄáCxÓþ…Ûü µÿãÕôw‹ïYñMÔ6:f“aqyws+mŽÞ»»Ð*©$ûWÁŸà¨?ü}û~Ñ~&ø“cá|Aðg€äø¡à«k;ycðþ¡¦\]iú9Xk;¨nH]Ñ W+-£˜Jõn+§žËÕÙµ~‘}Ž+jž]ÅͦiVš©Õî4æIºN‚Þ ’p÷ýœ´‘ã(²ÄOßãµísâ¯Ùïö¨øuáÏx+ÅŸô¿xOÄz¥Ö…á›['Ô¦¸²ºÑ’D··6ðÅG}w¸4£s4j¡›j˜y4šz߯dÛüŸü1¬r ,’ÏòfWü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõUñüáÍ—‡m5ïøoâ|-oáx—YÑtÛ#Áz%ïš`»Ôa¹¸ŠáŽÛk¹ X®gD¶´c(•·üŽëáÇí'ñGß|)ãGÁ:t Ùx³KÓíNáäÔtí£¾v¹[™[íI×|0J"Yc2˜Ó Wþ¯aok>½{4¿6­ÑôbþÀÂÙ»?¿úî´ßTkÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿW˜|_ÿ‚†üJÕ~,xâ„›t øHÜǶÞ]r{X-nç°›XÖãT²òìÞþÊþÚKE’æD²’ãxÀ²Ö?à®'Ÿ†¾ã?…u+¯‰Ú×ö;£á QÓ Kwѯ~Á©\Ãu«ÝÙÂößiòÄ*dóåY¬Gl›%dNU6š¿woøk[[ü:óY§aäe)AÅÝhõÙ½—«Þ?̵WM_wþ7?è]¸ÿÀË_þ=Gü(oлqÿ–¿üz´5Ÿø*ÇÂÍ&ÛÂ2[§Š¯ßâ_‡l|Gà(m´¢Òøö;²m´Åf®b@óE7“äÇ(™ÊÄ’H’üSÿ‚x#àŸíkáÏ„_t}wEÔ¼Yi¤éZ¬ÚŽŒÖ·—w1î†$²M@êEKf#7Øü•ps _š«ý]Ãs¨r»·Ë¿Tío[émï¦ä¼¹»Ù+½zwôë~×}•ÿ ÆŸô.Üàe¯ÿ£þ7?è]¸ÿÀË_þ=PëðUíÏÇ0èžøUñ‹]®¿«øGB¿²Ó´ñiâ-oL–é.´ûS5ò:°[ ¹EÄë¶Ø\•ÁA à¨·àÏ_|0øoñSÆ~ ñÝŽ³{ká*ÆÁ5M=´‹È,u(.Úæö+h¥·¹¸LÊìŒ#g%Ïö—šÎÞ¾MþJþšìÑ_Ø^g ;«õí£ün½S]Wþ7?è]¸ÿÀË_þ=Gü(oлqÿ–¿üz¹«¿ø+…<;âOø×XÔ¦¼øS7ÃïxÃVñZ%¾£¨_뺖­g¾n5åk[(ñ;Ç$HÒ: v_oý¿l ~ÙþÖõoÙêZEç†5wе­.þ{;™ôÛµ†€†âÂââÒuh.­åW‚y%]]ÿÕÌ6ªÏMõÛ[~«Òêû žC…ƒ´“é׺æ_‡äûkÿ ÆŸô.Üàe¯ÿ£þ7?è]¸ÿÀË_þ=[Ÿ?à¤Þø™ñƒOðæ“áOZx{Ä:Þ©áŸøÒæÎ×ûÄz®š. 屎å®ãdû¡¶[‹xa—ìrùr>có1<=ÿUð×~øKÅømñwV?æ··ðV•ý‘igâ×–Ö{·kQuwqE ½¬²¼÷2C]†7—ÌMÓþ¯am{>{è¿á¾`ò *viýÿ×g÷ ÿ ÆŸô.Üàe¯ÿ£þ7?è]¸ÿÀË_þ=^Óû6þÐWí=ð†ÇÆ>Óõ}&ÖîîûOšÃUŽ$¼±º³¼šÊæ„2IäžÚd%ÔíÈ$îè—a`ÜZw^d¬ %tŸÞ|·ÿ ÆŸô.Üàe¯ÿ£þ7?è]¸ÿÀË_þ=_RQKû ÙýãþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyòßü(oлqÿ–¿üzøPÞ4ÿ¡vãÿ-øõ}IEØNÏïì'g÷Ÿ-ÿ†ñ§ý ·økÿǨÿ… ãOún?ð2×ÿWÔ”Qý„ìþðþÁÂvyó_„¾ø¾ËÆ5Åþƒ4öº´òÈ×vÄ"$ÈÌp²’pð5ôf“ÿ «oúäŸÈUН¤ÿÈ*Ûþ¹'òèa0tðPp¥µîz\%<)í{–(¢Šê:BŠ( Š( Š( Š( Š( ¼Ç'ðP- Ÿúî?ôµkß+ÀürqÿÐÉÿ¡ãÿKV€=/áqÍæ©ÿ_2ÿèÃ_—?¿äŒxGþÀ¶ú!+õáqÍæ©ÿ_2ÿèÃ_—?¿äŒxGþÀ¶ú!(õÞŠ( Š( Š( Š( Š( Š( Š( Š(  öø¤þÓ¿ 5ÿ‡Þ?ºÕm4i³iº™Ó§X.&µvŒM«mYcßl‘¶•l0òÿÁ&~ k— †þ´øg‹<«øZƒÁz}Ž‘©§ê" Ï›4º}êèQhL‘C}cq‰ìáù‘;¬¬]xQÏ|Aÿ‚BxOâìÿ§ü/¾ø‹ñ. ÕF¯a"h—ÿð‘ÿi^Í{s%ÓÞi“4Sy—3…¸µ6ò¨|ï,ÇÖ´S”œ×,µZhõZ+/•´¶Â»V³µ••´ëÏgº9 |$O |I½ñ‡ˆ|Q5Öe£C Ü^¬šM€¶y˜\AMââA8I¤`Ë @T–á¿iØé¿hOˆžñw…þ%üDøcâ_ éšžo}á_ì·k›MAìÞâ)“Q°ºO½§Û²ºe œó^Ï_ÁDŠ]5t GQÓ`²†ÎG°ý¹QN™c#D·b7xFå(YÍ®¿jÿÙþ? F,¾_Ïño'ÃàÍ6/k}ˆj$‘lü¥²?j7BèÛùc‰Y°§Šø·ûHü;›Ið»ðçàúhWºGÄè| ãïÞü>ÓîüD’Üi“ÜAmÂ^,³=„ës ÒBa‘‰‘B¹Ku_4dÞ·V{üRŸš¼¢ôºW]Õéó$ïü­ùÚ)·¾ÎÑk£|­kgn×ã×üô|Kø·©k>ñ”G†õû™î5çûrÚUlº·ŽçEÖ´ï>Ùîe¼ºX/c»\^Îñ²Ææ ôßÿÁ4|!®^x[Sø?âo|1ñ/„ãÕ-à×t9ìõ Ûë}Néo/á¼Å­ìW>uÔqÜ3*ȹWPέóÏíaûN|#Ócø£Á~ÓþëÞñ%Ÿ†ü\šß€´ùõÏ#GíÔ©k²kk©¿³Ù¤‚Dk‹vy#c檴f/ÿ´ÏÃ/…°‡„üaûUü1Òu¿ëž4Öü ¥iGÞ´ÖõË«SP¶‰n™$‹K‚àZéí-Ä‹ˆ”¹×³}UµßDÕõVI¯-WWqÑ`ÿhZŸîíu¼¾ñÞ»ñ Oq _êãT1MˆFèûfëËUÚãd[ðÛü¯Æ?ðL}^‹¿&ø ñ7Æ¿ü5ዾ¥ªh÷tšåÅ߈u‹M E½Ó®-þÌ$Žôî “G²Ø+7Îkί?à _³ÝßìýàOˆ_g]WÆö>=¾Ö4«k?øsÃ×RØÞiI<—pÍ1½[w+;ÙRh%š)Ù¶¹-¼þý½gÿ|?Òµõýš¼[Ö¼Siá[]0xK›Q2ßi©©i÷ s±\ÛËÓËÄÌDéGer›jÍè­§~dã^kµæÖ×I”¥)>u»æ$Û“}­wvö¿FÑìzïüwáf¥àgðþ‡'‰ô;+oxkúD–7ègÐ?Ἲ½Ó/mdš) ]%Åã»´þtrlPñ°2 ;þÉÚ—…<§išçÅïŠzýå‰-üE.§<š]ÅòĪ¿ÙÒÅaa¿ØŸn^5‰]‰$ÉÍx¥ü¿iŸÙŸâ.£ðÀú_Âü:’h5­3ÄžÓdÔ´K¸­ð[Ï·•%†hf‚Y#e“(䃉~!|]ø-û8~É¿ |kñ£á„õ¯|G¶Ó,ô½#JÐ4¸.5JâËí.‘½ÛCm,qÏ+<ÓFб‘¸±UcÚ9s6öp}îçw»ß“æ’Z«4å(Æ[ÉKÊÊ &ík)-ôZ½;ï†ÿðM ü3ø¹¦øƒKñ.ü7áÍsTñ?‡|qsf4꺹—væ;T»·ö†¡¶+‹™¢írlEÄ~_5ûD~Â:®ƒû&ü%ðg쎗·~&ø+%¿…õ‹Ï¯‡µ+ xl%±’Oµ®“Ï$ž,ü¶³-ãŒØßÅ_¿m¯ë:×ÃO†^Óoëà[xWÆž ÒåÖüq:ÂÑÍsJVê—Vޝb÷M"Ü'–®C„ÕÕ>;ü"ð·Ã¸µŸþÌ~&Ð5kÄcÃ>ð½ß‚4£®xÆá­ñÆæhâŒÁ ó]Éoåy |²0]IóÉ˽¶þõ­n÷ºåïÒöfq,WÏ+Þý­mo·[]dQ_6þÊ:‡ÂÚÛGñMï†>GáXü%®KáÛ¨üMá>Êi®áHÚaHÎû¤ò÷¸@ÅK&øÊ»z¿ü2×Ãú'>ÿÁ§ÿ©èŸtšôjéüÖ ¤¥{tm|Ó³_'¡ÝÑ\'ü2×Ãú'>ÿÁ§ÿ£þkáýŸà‚ÓÿÐ3»¢¸Oøe¯†?ôN| ÿ‚ Oþ7Gü2×Ãú'>ÿÁ§ÿ îŠá?á–¾ÿÑ9ð'þ-?øÝðË_ èœøÿŸün€;º+„ÿ†ZøcÿDçÀŸø ´ÿãtÃ-|1ÿ¢sàOüZñºîè®þkáýŸà‚ÓÿÑÿ µðÇþ‰Ï?ðAiÿÆè»¢¸Oøe¯†?ôN| ÿ‚ Oþ7Gü2×Ãú'>ÿÁ§ÿ îŠá?á–¾ÿÑ9ð'þ-?øÝðË_ èœøÿŸün€;º+„ÿ†ZøcÿDçÀŸø ´ÿãtÃ-|1ÿ¢sàOüZñºîè®þkáýŸà‚ÓÿÑÿ µðÇþ‰Ï?ðAiÿÆè»¢¸Oøe¯†?ôN| ÿ‚ Oþ7Gü2×Ãú'>ÿÁ§ÿ îŠá?á–¾ÿÑ9ð'þ-?øÝðË_ èœøÿŸün€;º+„ÿ†ZøcÿDçÀŸø ´ÿãtÃ-|1ÿ¢sàOüZñºîè®þkáýŸà‚ÓÿÑÿ µðÇþ‰Ï?ðAiÿÆè»¢¸Oøe¯†?ôN| ÿ‚ Oþ7Gü2×Ãú'>ÿÁ§ÿ îŠá?á–¾ÿÑ9ð'þ-?øÝðË_ èœøÿŸün€;º+„ÿ†ZøcÿDçÀŸø ´ÿãtÃ-|1ÿ¢sàOüZñºîè®þkáýŸà‚ÓÿÑÿ µðÇþ‰Ï?ðAiÿÆè»¢¸Oøe¯†?ôN| ÿ‚ Oþ7X:WÂß |4ý§<5ÿ çÚ‡þÛá}gíÙº|Vž~˽'nÿ-Fìnlg¦ãë@³EPEPUôŸù[×$þB¬U}'þAVßõÉ?  QEQEQEQEQEQEà~98ÿ‚hdÿÐqÿ¥«^ù^ã“ø(†Oý÷úZ´é Žo5Oúù—ÿFü¹ø%ÿ$cÂ?ö³ÿÑ _¨ß Žo5Oúù—ÿFü¹ø%ÿ$cÂ?ö³ÿÑ @®ôQEQEQEQEQEQEQEQEW—þB°ÿ×)?šUН/ü…aÿ®R4«QEWËŸµ‡ìakûhüyk GâÄ_‡sø2x›O¿ðuÝ­Û]Ãq­¤^cÝZ\Œ _( U÷)*~£®Ãßòsž/ÿ±_CÿÒ½b“IÛɧóNéüš¸Ôš½º¦¾MY¯šÐñeÿ‚SxTxi.âÅø—ŠâCßÙ7‰S6_Ùû¶}ìGØ?Ñ>ÍöO$Æ3³ÌýåføÓþ  xÓÀö¶MñwãV•â¿øMaøƒ©øÏOԴصÍsV‚Õm {‚Ú{[GVéKoű6²¶çÝõµMßðùY¦­ÚÎ1zuK²gù¯“ºwï£{÷}Ùó¡ÿ¼ðÎ¥ðÅžÖBÑàÑcðô?ð·¾4ÝÙxsÅÇ‹¢¶º»Ñå[«ÝZÚ{kÿ=Ιæ2J—·çÔ£]ɰ¨X„~yûMÿÁ-¼Yáø:ÛöMÖ¼oâ›»?xTÕfÔpпà¶úOÀïxoKø£ñcLñ/Ä}Gû_ž/zUÞ½¬ÊmRÐÀæ}9ìâ…mâ†[{Xv¬JWi,Z…ÿü÷G×¾øCÁ0ø£ñG]¿øuªÅ«xCÅ7ãEm_Ù²X#Hôij¹„ÛÉ:2Ý[N[Ïr[rÆSéê*¯g&´½¿ò_†Ý¹z[k¾îño†úÚûùï÷é~ö]‘â~ýŠ-ü?û2øËáµßÄo‰wòxâȯ94 âoøŸRñ-Õ´zõƾÖBêPR)5+ˆ¢’î@¨¥¤ò£PÌU"­} EZZ1JÉ$—’I$¾I/38Ç–ï»mú¶ÛüXQEŠ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ á¶]’»Jíëd¯vú$Æ×º­½ÿFô]ô²ókçú E|EðãZOÙÓÆŸm›ö˜O‡Ãâ~–¿ÞX5ݪ”yUý=uIë٫ٮ1=íêí~\'‡¿äç<_ÿb¾‡ÿ¥zÅwuÂx{þNsÅÿö+èúW¬TÝÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW âù9Ïد®é^]Ýpž!ÿ“œð‡ýŠúçþ•èôÝÑEQEU}'þAVßõÉ?«_IÿU·ýrOä(ÅQ@Q@Q@Q@Q@Q@xŽN?à Z?ô#Üéj×¾Wøäãþ ¡“ÿB=Çþ–­z_Âã›ÍSþ¾eÿц¿.~ ÉðýlÿôBWê7Âã›ÍSþ¾eÿц¿.~ ÉðýlÿôBPë½Q@Q@Q@Q@Q@Q@Q@Q@åÿ¬?õÊOæ•b«Ëÿ!X딟Í*ÅQEÂx{þNsÅÿö+èúW¬Ww\'‡¿äç<_ÿb¾‡ÿ¥zÅwtQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÂx‡þNsÂö+ëŸúW£×w\'ˆäç4ÿÁ õoÚÛáOÃÿ xÓâ‡þ?ÂO‰×(³¼ðÅÎÅ6»mÖ-@ ¸ac© ƒm­Ð-öUy³­+5~—@Âk†tméÖ€'¢¾Rÿ‚¢èÉã]oöu𮵬ø—HÐ<]ñN=7Y'ˆ¯´ïm†…¬Î!k»á™PÍ ´8¢ç5ó]¿íãÙ/㿊¾ ~Éþ"Ô~)hïŽ4ýÂÞ%ñ5ÜÞ+ÿ„>îmPÔuç¸Ô-¤Ôå€i¶ïRßG$cT ÎþBÇ"ƒçæ·GnŸÜÿä×}í¥îPå¶½9¾W’ùü-ú|íúƒE~mþÑ_´Ä ¼§ø³ãï‡áѼS£ü ø¯qªèš~±5¥¦¡.Ÿy¢Ç ë%…ãKff‰<Бܴö¿hhÄÅйö]_þ â ö§_Pè7ü,M[ÄzMLJ•„Ïmuàù­æóW˜oܲÔì~öß´µ‘`ಣ'kuû¾'Ó›Ê7nÖ¢ãw¶·òåµÿ’¶í¤¯sëú+â/ÙoöúøÍûCüv‚ý<¡Eð—Qñoˆ|"ñµ¼VºŽ€t¹o K¹o_Tf¼’i´ð­dº|Ý« dX¥öø'ŸÆŸ‰´¯ì×áOˆÿ ðFŽô;\ÒôßÇtÍb—ù¬.&¸Þ3+ÄBª(Œï]Òà9…(s­¬Ÿß{/].).V×goëæš=ÚŠüéø%ûUüsðç†ô Eã‡Ú·ˆ~)ügñ—ƒ´}kYÑ5 Ø<-†¡¯ÝÈ·1M^ì<:tVö–©-°… åå…o«?d¾#ý¥ÿei|E® Ùø¶ÏP×<;=Öš²Ï£Ý^éšÞœo ŒÈ$û<ÒYùÂ#)dY6y®WÌ3;“«Ù'o•ý<¿- ”j8>«üÚÿÛ_Ýè{Uùyû-xËöƒø‡ ~ɾøðÿSñ—ˆ~ ëš™Õuí'SÔ-Œ#þS›øWR__ù*µÁš<éË$“§?ðUÿßm´¿f?‡Þ–úÃá_‡>%ëZUôI:ëo«%Ó›kÙµ+%Ó¡ì2'ÛžÁ¾aº$.®“NÞvüd¯éî;ÿÃ\”Wþ·JÞ­´~ŽQ_?ÿÁG5‹«Ù§D¹Ò縲š_ˆ>Fhf*Û$ñV’Ž›”ò¬¬ÊGF AÈ5ã_ à£ßõïxSľ.³ð4ÿþ ø×Å~Ó<-acuŠôit8õgûT÷OrÐÝ™¿°æl¶°~ÛïdØ|ص¡*’vI´þJ/§{Ù`êEJ:ßü›ü“>墾ðŸíññZëö/о.øëÅ_l›âÞ•¡_xCÒü1¨jWÚUÞ«uo¾Ÿr¿Ú‘®¨ÇíqÀgVÓ£I†\*³'áGíqã¿ÚGÅáøé¥Eá¯x/ãÖ§àÝj-?Ë··ÔÖ/ê÷‘ÈÐA}{`­Ì¡w!$ˆåéDÒ4')ʵŽþVqŒ•ö¼\£uýäÕÓ¹ ¤¹º4ÚùEÉ|š‹³îšzè~Q_:þ×ßþ(øcãwƒ¾þÌÒµx[Ä%¹Õx›âv¡ñïÁVß<]áM Y’÷ã[Iwã k½SMŽ oXͬví#"~í •V(ÙÈ Œåym¯á/ÉÿÃ…8º°ç]íÿ¥ò:w¹úeE~pÝÁ]~(|@ø3ªüCøe¥|7ð¶“ðãá…ñgĺOˆa»»ŸÅK¨­ìc¥ÞGq Ù¢®›*%ÜÝy’\Ä<•Dž·â¯ø(o‹´/ø(NŸð ßMðhÜYj¶%šiE¥†žöòÍ6“u“'[qk4–ñT’Ùžà¯ú;E1*n FZ6íý~/äü¯2N Ê]?àòKïòvûŠ¡¡x«KñC^ êV‰ÓnžÆðZÜ$ße¸@ Ã&ÒvH¡—(pFFG5~ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( «é?ò ¶ÿ®Iü…XªúOü‚­¿ë’!@(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ÀürqÿÐÉÿ¡ãÿKV½ò¼Ç'ðP- Ÿúî?ôµhÒþÞjŸõó/þŒ5ùsðKþHÇ„ì gÿ¢¿Q¾ÞjŸõó/þŒ5ùsðKþHÇ„ì gÿ¢€?]袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯/ü…aÿ®R4«^_ù Ãÿ\¤þiV(¢Š(¢Š(Î~6þÖÿgNÆÇã'‰-´«ÝF&ž qm5Ô¦0vïd…¢“ «­ŽŸá·Å/üað¼Z×à fÃ[Ó%Àó­eå1E.EûÑÈИÜ]à WοðMï‡ÐøŠÏÆ>4øÉký¯ñVßÅ7šf¯©jE$útÐD‘˜-dWuXÂJ˺!!¼¼ úá·Âïü$Óntφ=†‰§Os-ì°ZD#FžFÜÍø(UQ@UU>4~ÏÞý¤|+…ûDx#Â=Ñ-îVö-?Äz=¾«kꬫ*ÅpŽÂÈê €ì3ɬýcöPø[₱ü6×~x óáÜ*‹…æðý£èшØ:²1ù+µ€eÂð@#¼‹þ yûQø¿öcð¯ÂÔø=­h^»ñ÷Ž¡ðÅæ«ªxZóÄÉanúv¡u¾=:Êâ¦s%œIò¾;1½—üÞþ{OŒ1x£âÕ÷…ô8üYãøCÁ_ðé¾Ñ®'¸K{«Ý7QÔZó„³»vŠØ]M²ÖI H5rœ}¥Ô{Ûçdÿ&µvENñq[¶®½qüZjË¿™ô>û+|/ðç‚í|7áÿ‡±ð펗{¢[ivþ´ŽÊÞÂñ‘¯-Œ"Á;GK$(¥À®–O‡º¾4´ñ$ºŽÞ"ÓìdÓ-uCg½¶´‘ãy-ãŸnô‰Þ™£)1¡#*1áÿà¤þøk¯|N·»ðŸÄ}SKø;\ø³[ÓôxßKÓ£dZžVg™LíöiД‰]Ô‘¹T23_Òÿà£ß 5ÿŒ7þðíέ¨x–ÃŶ¾ û<–æê{ ‹áZúh¹½¿ÊýÚÓöEøQañ¾‰–? ¾Cñç>wŠ“ÃÖ‹­K˜ü¢ZôGçcýÙ%¹_—§ÙøSÂzW€ü1§èžÓtýFÒ-£³±°±·K{[(#P©Q *€¡T ùkÀðY?†>0¼ø£câ'ľÖ¾x^ïÆZ¾•q{£jwré–»„Ò Òõ¥†Ee ä\´å×äÆâ»~?ÿ‚’C¢hºu§‚þübÖ¼câ ý[Kðìz]…ž¥ý™h–þf©:ß^Á½¸’òÞ!Ò%Ã;2¬'c•ÎSä§Ïömu请¥¥~Ö•ígf£y¸õ½Ÿ®Ÿçwæ¯uKñgìIðgÇŸð–ÿÂoð—á®±ÿ ìö÷^&7¾²œø†krL^ïˆý¥â,ÅMÅI8#5Þx7Áz?ß éºÃÝ'Mд-Ý,ì4í:Õ-m,`E ‘C `$h @ _7_~Ù>/ð‡üšßãÛXéþ#ñÕ¿Â8Åu~t¤ºg1y±³‰ vU‘[Ë -€Yã¯ø*¦‰ðÇíiãO…ÿ_ èPøŸÇ&ÚÓLœxJškˆá½Ôj fG[;¹ÄV_k™a…™ãRU[¢®t*Ï÷‹å}®®¾åg艋ö‘U¯5íßìþ|ËÕžÛðßö_øiðoX¸Ô~|=ð?…µ ¹îîfºÒ4+[)¥–ìÂnž(Ô–˜ÚÚ™ 9soìì\cøÿöø+ñ_LðÅ—Å„? k±5/ZhvÐê÷ñ™I¯1,Š|¨òˆ>ZtcË¿áé_‡Ã«?WRÿ„fo‡RüQ½ÔȲhÚ:UûZ)2Gq+™Ò8Y­.W¬dkÀÿðWÿ‡¾/ð7‹õ[ÿ xÛKÕ|u¡Áw !Òõ}Bå5›ß°éÒÀú]ýͳù—HÌFa4f&ß‚…ß,“vß_Ï‘þ)§éä;;(¿->I­=5ݨ¿°À”±ñmª|øP¶þ>u“ÄÑ Xñ ,¾rµèòÒH›÷ É»ó›šé<û3ü8øU£ézwÇþ ðæŸ¡ßiéÖÚ^‡kgŸwöciöˆ(ÀŽ_³3Aæ( å1Lí8¬Ùö¡³ý§4o²x[ž×¼¬ \Ð| ð̺/Â…¿¼3£Ï=­Ô¶ZW†ììíåšÖàÜÚÈÑÇVxg&hØŒ¤„ºÜÕŠ±ÁÚ]•Æo„ |[e¦ÝÝêk±¾ŽÖæîo>îhÖX˜$“ËûÉ\`Èß3<×—ø¯ö¸×mÿj- ÂÕínldøº¾ ÕmßEû;ZÚ7‚gÖÄ)9žO´1œ[Ë焇 æ,ì2ÉÖ~Üß·¿‡`oiºÿÅ?ëz®‹{çµÅå–©¢ØE§¤*¬ÆCªjžkbV+:FØØN™‰¾X©Mèí¿šNÿuµý P”_,VêúzÉ}îÏÍßÌí¾!~Ê¿ >-x›Ã:×ÅO‡>ñ.±à¦Wðõö© ÚÞ\hl¬¬¦ÎI#- l6ÁE#1¥yðÀÚŠÞ®¡à¿ κ–µ‰.ÄšE» ­R+É¿“)óÝGö{}³œÈ¾Lxa±qò×íÉÿX‹áßìéã Kö@ð¢¾z»ÿ‚‹h#ãç‡>èþñî£â½_GÓuÝVÒ1¦A'…­/ä’(ò|=¼âO°¥ß–"%È …¹ÿÁ]þ|Eý¡WÀZ$:âÃyªjš™â.Ÿ-†«¨é©p÷–ÑÛCvú„[îÙ§´Š~ÌÞ\¾/4jÛùÿä»ÿ]zŸ6Þ_Ž«ðÖÛ¥«>¥¢¼Wö.ý·´oÛ“Á“x—á§…üW¤xbh`¼Ò5mRM:KmzÚ`Å&ƒìW— ‚Ð],¦õœ…âŸø)…‡¢¾sðü“Þ8øÏ§xFÇÁ_´ý;\ñ³á 3Åwº}ªhwÚΖo~Óe[–¹ÎÝ2ñÖV€BÂ"¾g™”gìíÿIÐ[ö?ðÿ‰ÿh¶Õ?á2³øgáÏj°YéÊ¿ð6ªžLI¥ÆK%ê›aT¬“B§‰ŒÆ.JëËçtÚ·Ê-új[ƒM§ÑÙýöüôõÓsëú)°Hf…Ñ£, ”ln_c‚F~„Ó©õ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¯¤ÿÈ*Ûþ¹'òb«é?ò ¶ÿ®Iü…X¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯ñÉÇü C'þ„{ý-Z÷Êð?œÁ@´2èG¸ÿÒÕ Kø\syª×Ì¿ú0×åÏÁ/ù#ÿ°-ŸþˆJýFø\syª×Ì¿ú0×åÏÁ/ù#ÿ°-ŸþˆJýw¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¼¿ò‡þ¹IüÒ¬Uyä+ýr“ù¥X Š( Š( Kn²°bX0î4±Â°ƒåŒfEpßgýãgŠ>jþ+¹Ôíî~xx£L[IQ{Ÿ°ÝÙlœ21hü«ùޡ܍w`o2ý¥?àœ^ý¤þ kúåçŒøgâG¼ðàÖ¼+%€»¼Ó.Ì/=¤Ë}gsÓ%¬,‹É!Øêƒ{}u'*©)»ïÿ“ssà\Ò¿~g}Ø'guým÷[–6íem1²ý’¼'mûCð.ëûJëÀñx9| Þdê—’éâÈYs$j HbyUFî@+ǼWÿÒ|wiyŒ~/ü`½“Å:>ñÌÂm ~ i0KrðZj-š¾HHïn­üë²ÌÑJCÈÌ×êú*¥Vs©*²w“wo»×½Š>äT#²ÛËoò_r<ƒößø yñÿöjÔü9àm: ÏYÝXêšmyô°¿³º†âÞæ+ô´»òd‰¢.ëi‘ʈäFÜW’~ÅŸðOøD´ñíY®Ý_xê‰W_Qlõ•ÕBÜI¡a»¾{_µ³4’~êÚÕQŒq¢ùq ÿ]QJ”Ý'ä¬þø·ón1»ßÝK`vqŒmµþæš·¢NV^lùÏÂðK„^ðÆï®™ªê7Ç뛩¼Ikw|XZÁqæ»ÙØ:{[a=ÝõÒF¬JOy;©€Yü;ÿü<uáÿŠß>(ü@¶—Wе‹yu‘£[Ëe&‘¨Ã¨[ªgé¶èâImâYžUy¡ÁBÑBœ“R¾ªßù.ßw}Ç&äî÷»7¿Þqß ~é_ %ÿ‚+øXðâè^øƒñOÞ¼ø}¤|4Öôí>ãKdñ•¦C<6‚æk>I£p·Rïï rñ½È?cÑZªõÒëšrœäþlOÞ½úÿÀÿäWÜxãþÄ^Œ‡ÇPñö±ñÊxÿÊóáû?Û×Ãßðˆ¶ù[¼²3níþwÍ¿gîë™ý°?dïü[ø¹á?xŸâŸ‰þøFÑõÅu¤_ivçUÓnåµ–æÝ¿´-'òÎûX?}oåJ¡ˆ7 }^EûDÿÉCð¯ýƒµ/ýcYOßIK¢·ÊܶôqÑ÷ZªI;ߥ¾IÝ}ÏUÙê|íñþ ÏðSÆ?áð¯ƒ~:x›Àþ»ð>—ð÷Ä6z½¢mñf“§G$V‘Þ›«)¶H±Ï:3ÛyÒR­•T Óøïö?øOã_“øªÏã–» èz‹ô¿ê¾ÓµÝûWÖ´ój`º›Î´’éC}‚̼q\FŒÐ‡Ú³ß|Gð÷Ãÿ³ÿÂy¯hº'Ú÷yo½ŠÛÎÛÛ<Ʊ¹sŽ™µjûÅzn›¦Z^Þ^Û­¥ô°Ão0pÉ;ÌʱaÁÜY@=ò+o¬T•EW™ós^ýnÚ—þ•Òî“Z¤cÉN–·ÊÖü´o{hEâßÙÏàŸŒgm_ᾡñ ,5ÝøÞ×Tƒ_²]OFÕçÖ$ÖRæÕÊÁ‚ò\ƲG"”@’‰A}ؾ%ýœ¼1âïƒçž#ý©<[{,ÚŒ—÷Z̾ïcxV#i-ŒšCXÀãÂ@ä·˜rAéôíV×XåÒ.mî¢I^xd«"1GBAá••”Ž ‚"™ªkÖ:Z®·{if×Ó­µ°žeŒÜJÀ•7¹Îrpkï'³ÿùÙ/4’ØÑɹsß]_çÅ·äõÜóGþ ýðCPÒ¾èã¤<ð¶4Ÿ IªhWFM*Xåµ›ísY5ý»™!„Éö[¨ÂmÚ°n£áìÍðßà·Ä+ýGáwÇÏhÞ½Ôu-^?Ûë:öEÖ ÓIrðÜ3¨*îf¸XÙ$o•B*¢ë^øÓIÓuY¬µ-FÎÚêÝ ’D–P›Dò4Pòp2ò#"ޤŒqZt^÷}ïžÿ’ôèO—k~~oÖú˜ß²ìýð·öXø‘âÏŸ‹ÿðœø¿ÆVVzn¡«ë—š¤ïmhó¼(É¥YÚE+ﺙšyRI[pö¨ú¯ì/ðóâ/Å-kǺÄEàÍOÄö>5ñ'…tÍSO>Õ5½9-Z ë©~Î×q²}‡O•áŽê(]­£i#mÒyšÕ£á¿ù7ÿ‹ßöûÿ¦›z¨ÉÁ©GF¿Í?ý))‰)n®>þåoËOM61ô/‚¿mþ«ý«öˆ¥Â À¿Ûw{v¸Ùçl6ÿ,Ö¿bï…süXý—b±ñoƒo|û6è·Ö×:ˆ }[Tš(¬¢Ó ž8Õa–’Ùo™ÎÒ·6VŒˆâ=SRÔ­ô}>{½^âXÚY¦™ÂG (Ë31á@’O³¼%ñ@ñüSIàMsHÖã¶!fk ÈîDDô QŽ ÁëéN3’i§ªiüÒi?•ô*S”¯w½×ÞÛ}ßÞz†|_à¿ üHñ?ˆ¤ø«¥‰VÑSI½ñ¤šnäFÈM”@ŒË»t›™÷2©qŠé¿á{x#þ‡/ ÿàÚßÿ‹¯—Uµ‡S†Êk›t¼¸åŠ eD*•s’ºGr稫“è; ø5[n´É¢¹¶¹eŠXœ:JŒ2¬¬8 ‚#®jZå~ÿÉðoý€ì¿ô+ª Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( «é?ò ¶ÿ®Iü…XªúOü‚­¿ë’!@(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Á|jªà !v GçÀõÿMïUò'íÙ¤x†/ÚÃÚ硃YÒôe@ŠÛ|øži·§é·:ÏÀÏYèöó]ÝÝh—‘C (^I pªª9bIɯ-}SÄן ô›O†·>0ºñ…í¯Ùÿ@ŸH²AåâHïCIn%Éå·´{NâµôOü"-ÿ¡3ZÿÀËþJ£þÿЙ­àe‡ÿ%RïçoÁ•Õ>×üO›ÿ ÿwúVtÿëßýã@íQ@Q@Q@Q@Q@Q@Q@Q@åÿ¬?õÊOæ•b«Ëÿ!X딟Í*ÅQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE_IÿU·ýrOä*ÅWÒämÿ\“ù ±EPEPEPEPEPEP_6þÔš’éÿ´–d8ÎÿÈó×ÒUó¯íQð~ÿâçÅ¥Â7Ëa¬iºW­"îŠSçÌ 8ô|ø‘â­f;ë:.¦Âûn ‘–k§ª€èª„úå±ï^á…tý"5´´µ‹ÊµRnPÇjð2{œ´étQEQEQEQEQEQEQEQECqiçÊŽ’É * ãqê ¦ýŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ4}ŠOùû¸ü“ÿ‰«P±Iÿ?w’ñ5-¼ÚÝ#Œ’±¨Qž¸ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯3ñ5ò韴ÕÌë;Çoá¨åd†&–F <ç ˆ ;q€I<^™^WâûRÚ-¿á³°»oøGaȹ¼{p?Òfî±=|Áÿéý°¾,|ký®¾$é_´GÃ?øGúµÑÔ|-qªxrêÎ >Ñ#û$Ò¼aCº*J <¹”ó ¯®/ÿãúoúèßβ<5©x©¾ ^}«Fðú Ã%5™˜‘}m]½šøÞ;ÞÐíœ\1ïÿ\èÑkÿ…½á?ú<;ÿƒ(øªå­i»+­ 5!áÇbð‹4–°*ˆÊîÜI›Žy¯Ñoø¦þkoé1×õ§iFéœ}äb1Áç¥}ÿ {Âô4xwÿPÿñTÂÞðŸý ÿÁ”?üUx9ý¯4àÄ|MÊœø¦æÿAû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНµöšs|Mãþ¥¹¿Æû_i§8ðWÄÞ?ê[›ühÞáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿН“ö¾Ó"¶y¦ðgÄ´Š<îfðä .:÷¦øWöÒðŸmÞO Úk—3µ×ȉ^3èÊdÈühÞÿáoxOþ†ÿàÊþ*ø[Þÿ¡£Ã¿ø2‡ÿНÿ†™Ò?èâûóÿ¤ÿ†™Ò?èâûóÿ eÿ…½á?ú<;ÿƒ(øª?áoxOþ†ÿàÊþ*¼Fÿö±ðþ™{ý7ÄÆ£%¾Ïò’º ãx‹L†÷Að÷ˆï-.|SC .’PD¸4éßð·¼'ÿCG‡ðeÿGü-ï ÿÐÑáßüCÿÅWˆ÷§…|Wÿ€±ñÚ†Óâ´—³ÜÇ…¼V^ÒQŸè±pÅÿç¯÷]hÒÿáoxOþ†ÿàÊþ*¸‹rËÆŸoƒõ{yUü8 ËbŸìòyór Ü›—r¶Ó ƒTâMÀÿ™WÅgþÝbÿ㵓ám_Ä^'ø™©ëðëÉö (´Û‹mNélåŽMÍ(`pÊVAÎsx  ÿ‚uY~Óµ×Ä›ÛƳj~ðmÑÒì#%…škó:$‘Ü£Ãn®#X6ÀaóÊŸ‘Ö¾¸¿ÿé¿ë£:ÄÐ,|wo­M}­è>dç%aÔP…àTv‹ÆSÜÈë¡@±aÿûŸ¥x/ío¨ëZGìлKo§ØÃaì±­ Ф¥ˆèLäý+²ý”| wðûÂB/-“Z^…›;7ù@J‘F+ÑtY!ñÂeÒ|Mggy§ßØ‹{ˆ$+*4`2‘žàšøÇÄz‡‹¿eŸ\økàÄ/è'0Y:XêÛ)çdFîÖVEà@uGeâbÄ´V]Oü°_÷èŠÃÄ œÇeÁ?òÁý߯†ö›øÆÊ ø»âüèü®¥ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@sEaâPNc²àŸù`þ¿ïч‰A9ŽË‚åƒúÿ¿_ ÿÃLücÿ¢»âüèü®£þgãýßàŸCÿåu}͇‰A9ŽË‚åƒúÿ¿DV%æ;. ÿ–ëþý|3ÿ 3ñþŠïŠ?ðO¡ÿòºøiŸŒôW|Qÿ‚}ÿ•Ô÷4V%æ;. ÿ–ëþýXx”˜ì¸'þX?¯ûõðÏü4ÏÆ?ú+¾(ÿÁ>‡ÿÊê?á¦~1ÿÑ]ñGþ ô?þWPÜÑXx”˜ì¸'þX?¯ûôEaâPNc²àŸù`þ¿ï×Ã?ðÓ?ÿè®ø£ÿúÿ+¨ÿ†™øÇÿEwÅø'Ðÿù]@nêCÅV2ŠÇ<˜_ÿ‹¯š¼ð¾=3ö¨¶‚¿hÖ¡¸žî$àm ò;|Çûšó«ÚKãÔ¢;‹~(d•‡öFˆ2¸Ó²+è_ÙCÀ6Þ¶¹ñÅÞ£«øƒUíZŽ£7<€tP@TvUJôÏøRv¿óÍià©Sû´é[ßð‘]|~Tâ+­§ç=(É>(ü"¶Óì%f€zŠçÿaÛcDð‰E€_iÑëW1ØÁ,¬‘2v¾ÖÚ<ÆÓ¡¯Bø„dñ]Ä:}üÒÅÛˆÜÄB¸® ÖøE ð/†ítŸ Ú[ZØÙ¦ÈãU'¹$’NI$’IêM|‰û1~дŠà¢Þ#пj¯ GáŸ[xRòãD°Ós6•q"ÞÙ*Ì/vfyB;‚aPç÷iœWÔ> ñ6 desc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀ_"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔ*|‡Â‡Çz¯ƒ|e©ø-lì¾j6v·7I¤Ã”0°ޯÉbc¹I^F‘ã,â\ëuß Þhß¶f•¬iú£â­NþâÎ×Q—RðÍÆÍ %´e’ëOÖ0!H¾`ß’ÎïŒƶŒåîlö¿õºû]{mÆ-½Ò¿ÝoϧWÚúÙñöбðWÃËßiRñÛjI£Gk`ÉæÏz×Kh ʪ‘3…băé[> ø‡©x¢9ã×4B¼´Xü讂4ewb)”—oBTà:×ÉÐþÍž“áæ¿ [ü8º‹V³ø‘iw8:‹ÆžÚÉ1IÛ6MYË*¶Ö>Z3Ú vúçÁý7ÁúGÆ-+OðV½>‡¨Ë¦ÿcéÚE´™î¼„ %¬Š6ÂR}ŽÓ ,eK±àÖNV§ÏøÛ±›‘výã…ôW׿×ä¯ó¹ôÇö¥Çüõ»®'â—í+ |ñW„ôoêW–×þ4¾þÏÓP.àòqËœü«¹ã\ó˯Ôyçìuá_øFóÅÿ´,Z¶£ãæ’¶kþYk VÐ!éi ¼ ä9ó®3ãoìóã/ÚwÆþ?¿³û&e¬^Ð_U³¹1˜$ŽéïmY$AûŠ ¸[!åxj•¡%ÕníÛ­¼ï§“ô&>ú}ÊýûúZïÍ/3ê{Ýz{+Ify.ØD…ð'8•cü3ø¢>(|8Ð|M¤ÿhÛZkú|Œ1O·Ì%]U°HÈ Á"¾[ñ÷?<Ò%:fákï }’7–Ýe‚ÂÖY  1Vbc` Èûpj­ïò½5Kïi}Úþ ºæòoîWûÏ´†«; ‰®ãKý©qÿ=nëãÛoËám'ÄÇÂo x¿Kð·‹¼?¨Xi1é71\m‚T7×ús ™#?&T ,cvƒ“=Ï„õ¯Œž7šóÞ;Ò´ß|GÑn#Š{iìnäÓÖ(åœÃÇØÜ–YCle`®+™¥æ—ßɯ§¼ÿðòMò«¾ÏðæÓð_ßõ×ö´øÏu­sÉñgʼn<$#ÔþÕ’º¹¸Êù%f‹g]Û²¹éŒµóÆïøAøó©xwÄþñ¹¢YxÕt/CÒn®íí&7WÀ~î܆VÎ#•Âí;ð듛ڿÉð¯®l¬F´Þ4ÿ…Oo¥›ðíºMAec$Bçpyù·ç$6{Ô_i%¦¿‚Ÿãx¯½w-«^=}ß•Ü/ò´ž¾O±õˆÕg=&º?UœfºÉ÷¯˜ÿexaø9á¯k:^›âéíš $ðþ›à;Í !˜ošÚÚâWLÊSÍhÜÝ+s“aü)¦[~Ö$½øïàïx‚îóPÓåð~«ý‘>©e§@±B¥c’5d±d¹Y$vqA Y‡KjÒQþ¾]ü»¢ºoúùÿ[ýçÒŸÚ³çuÖ~´¿Ú—óÖî¾<ð¿ÃíB/h‰má[ü\ƒÆow¬ø‘´ùÒÞãKû[»îÔò¥·{3ilʰUØ OøÑã[»í_ÀÞ%¶ðÏŽá]C¨ÄšT³]…•åªÝEAÞXIc*êUÀÄ«r¦ßõ¦¾—vù1ËFÿ®ú~sG©|@ø³ÿ úm/ãÔîOˆ5htˆŒ%rò+°wÜGÊ<³œdò8®‹ûRãþzÝ×É×~ñÏ>G?…´sÃ>!¾ø•q©Ù WOkƒ¦ÂÂo.yãFÛ°¿0b€‘Ëc×?dË¡ü$‹MÕ4?èzÞŸs$zÈÕ Í-ýé;¦º[¦n’V;„‰òà…Âmت›æ‹æÑéøÆ.ß&Ú/;9û²²Û_ÂRWù¤­ý_Õµ.?ç­ÝÚ—óÖî«ÿàEøLEíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëw\ßÄoÚ7Âkkj×6BòC´I—ܰ"(bV‘Ȫq[Ÿø^ñ´Ùx#ö•ÒüUñ&ê}/òhi§[j’¦môû…žY%?"/13`(Œä@xýµ¼GøëÿÝcÿ‘+cÀµ†>$x€i>ÕõHõGF–;MCMºÓ§™WïÒæ(Ëœ â¹!ûIü$ ñ£Â>ßñ8¶ÿâëŽñω<7ñ¯âG‚mþx’ê^·k¨Íw¦H·éÖñJ­9’dùStaã ĸã®>©Ñå…‰ÿPü$)ÿ¢mãoüÑÿù>±õ S×µy}ð³Ç xÊ®-õ]2ÚV ñjJ[ çŽ+Þè  РÖ|3«¡|,ñ•¿žÛ¥q}¤³Ê{vÔ 62q“ÆN*ìú׉®ax®~øÎHäRŽy£²º‘‚7ø Ž1^ËE|ô¾¹UØ¿ ‡ªhWËueð·Ç/vŠQn.5].âT¨V“Qb½HãqÒ½êŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøHÿÁ"4Û‹áÝÇŽÿà ²ø·^ñ޽9’Ó]‹XÔt-^A0­âÛÛÉ qJ©¾Q áh„Žï jþÚ~%Ô¼û|ZÖ<q¥ëWƒ5‹ËØl¶sÇc3Ç*̬ªÀúŠùWöÿ‚·EâK Á¿µãÅa«Þ$š_ŠãF[ ]œ¬q%ò’ßbºrÈ,ðÈìuvXÏæÏí9ûr~ÔðG_?f_‹:ÇÇ¿ƒúß….æðÜÚõÖýzÓE¼†kx¤KÜ‘­Êû?ö–¥ö+‹Ï³y÷[Eû›hä•·MêÚ\~V¨¾+{4N!“JÔÔ}ZÞ#ÿ¢·à¦ßòH¾ÿØæ?ôÍ«Q@YQEy×íqñ~_€Ÿ³'Ž|]¦úŽ‹£Ï&óïY|»X±êó¼H?Þ Áø+÷푪kÿðP4‹áÔÚdñëºö£sÍ­µÔw¶s.•§s*³FŠÚn¡t#ƒy¹H&¾¼ý„m/—Vmá[^!"?°x¥¦Õ¬&8Çîçi>Ûð0ÆiÔvŒŽ+ò3UÒn>2þÚþ.Õ<,òj>u…ôÛ•jOo¦Æ–Bn3į³ƒ“)=ëõ3þ Ýàùmµí-d€F‘KCÀuܽ?@hæŸø8 Tñ‡ÅŸø(߆ï~/øþýKDøV¿h]?SV°šÝµ¢·«2Á¾(K¹ž(æHÁY žøE¤ø³ãv¹®#êº_ˆô}^êúÇ_ÐõÓµ ™Öé ¼0‚„n•E£`‡ÈòW ÿ‚ôMoªÁdôë#å%õŸÂíÚĨ„Ýžîù·[)¹¶ºóÏ6W 8íÊJVGìú·¾ñö#WÓïZóQ¼ÓÖ[8´û¹“,‹+ÂöRÀo»EÏð‹Ù× e­S5U§(wiý×ÿ3ô{ö^ÿ‚‚üTøá5_Û3N¸ø•ðÿO·ˆŸˆ>Ó6êúDE¿ãã_ÒPäÀî7¶jˈË4(xûïIÕ­uí.ÚûC¹·½²½‰g·¸‚A$SÆÀ2º:’H ‚9¯„?aÝfØëqéÞ#µ‰ ¼·h®ÐÅå "œÆHÌh1>cEüäMv~sî¿ðL=V[Ù Fð†±9ŸTøY}à;ÍÇ,?²îå´›ýûh­¤¸£#è*þ|ିð\¯ÚÓöZÿ‚ïëßÿeÿǪx7Mñ†m4¿I¡élš¹»ÓôÙ¤±kÙ-MÊ ‰®%RâPÉæü…v®? êþTà¶^,ñ€ÿàêm[\øG¡Ëâè¾5ð=þ‹£ÆÛ_V½‹MÑž e=Œ’* ?íPÓß¶§üþ ÿjý­¼qÿÕ¾øßÁ^5µ(ôN4×·InmmîþÏÜw‰#Á‘¥Lºdúÿ˜ÿ‚éhÿðNOØ[À¿> év~,ñ7Æ8#ŸÁvÚd´ïmÃ^ܪ0fŽ4žÜyjÊY¦A¸ ‘øíÿ¼ý¸*þ×_uïˆWŸH†…ÆÍŸS¾ÑcœÚ³Ïlb‘‘öêws´.™Xíb™%0aŸÛ þ _ÿ#øgkñ'ö{ý¥?g 2ßQ»ž(|¨¦›ª†)Z=lºtÒÄ®SÌY«t`O Áô/Û'Æ¿ðBŸëß´¾³ðÿÂ?ØŸi‹ã?†ôôŠ_øH7x†ÆM>Aû6lŠâP·­ «cÊ_Î/ÚëÇ¿ðOO‰~ñ%ìÅðöøyñ‚îÚA¢é‹yš]­ùËó–âêâs|nDXŒ…)Á ÿeÚ[ãüUñOÀ4ojÞ;¿½U𖋪Ç4º×ö¥þ›x°y2fmÄÚ_´Q¸£Dª0PPÌ¿ðoOÀ/Ûïâ§ì_â}Cþ ]ñ¿áÃ_‡°øÖêßPÓ$k¯‡´Ïëé¬6ñYC-ÅäžIo>åZ,'œ"’@"e0¼gGÇß¶‡í ã¯Ùßþ瀛Ã~ðn›,VsA )su{&ô†IÀž7#;m2²ôù°XÚý¿F?à•ß1ÿP?ý4O@ÿ‚ñßÿšö_€ÿ¶&»ñËþ ÿã?¿Ùôïx_LÕ!yà‰L_j·´ó£™c}ËÑâ%NW ñŽ+›ÿ‚P~Ô¾<ý¥¿á>ÿ…Ù®ÿmbÿgý‹ý ÞÛÉó~Õæ©7gÊïgxÆN|ûöÿ”W|kÿ¸ïþš £þYÿ5Kþá?û{@oìûpþÑ_´Ä›¯ xC^ÑõB÷M•¢—T°¶·¶Òö¼dܱ·„33S¹s(%N+Ò?aoÛ·âG‰ÿj›Ï…ÿ´}Õž¯tòÞY¤ñÚÖ—V¡Ù×0ª«¡Ê9\ä)ÏP|£þž3ûTëùÿ¡RãÿK,èý™ÿå2ú—ý~$ÿÑWÔú‡EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_/þÈmÙ:Óµ®ÏþT^¾ ¯—ÿd6ÇìiŽ¿Ú×gÿ*/@¿ðSoù$_ ÿìsúfÕ¨£þ mÿ$‹á_ýŽcÿLÚµõ•sŸþè?¼/‡¾%ZM}¤ËukzÑÃy5¤‚kkˆî`u–I¤ÐÄü0ÎÜ‚Aèè ÅÏø*oÁ‡ŸðH_xKÆà Ÿø;Åɨ›»ý;E:u;§´6ö·VQ­‚5ظ¼u’[x›’eäù™}GöHøßñƒö¾ÑàÔ`/Ù÷á?‚ü1òÇ‹üwãø5Ùb|goövŠÌáÁè²JóŽ•ú¥_0übÿ‚E|øãù|F04#ÄþÔn<9wqØû\vRGàË|åf!B†Šø£ö‚ÿ‚þÐÿ´WÆüLøÿñ7áÿŽ|Uâ *ÏH6šTøjÆÆÚÙ¥uƒìÓAkiÜ•»ˆÚ6²äãÁ§ø7ãÙÅúoí!£Þx:ïCo+OººYmì#üzuñ›ìÑ)Ìvš¦˜GñZ‘Å{í;ðÎïÿ>9x3âwÆOˆŸµÏ„þЮ¼!q¯ëŸdºÐ.nîâmBòÔÙ˜^K„†æÌÅ,ÞkÆAPJ³)úƒöWý¿ÿhߊ¿³/Ãívçö`»ñ¿ü$ÄÚî—ñC[-HÉn¬ó˜çx¥Œ–ÈxŒyG,ƒp]ÔÍ~Ãmo¬Ýi:Énò‰`’«–û͈£É=䊷;®¥ê}ïþ Æd:×íd„Åü.MgÊ&MÆQöK ¶?‡æÞ1èï^ãÿÙçâ×ÄË­üýÀÞÎþˆÚt:{ËÚmKL·¶¹·¾Oïo¥#!]¾³ý‡> ø»àoìûm§~Ð÷¾Õ¾"jÚ¦¥®x›Rðå‹ÙØj—w³NOÞ¼†r[l*8ëÕøãû]ÿÁ½?>?Á}ôŸÚ£ÁÞ'ø_mðöÃÆ¾ñ$š}î£|šÉ·Ò¡ÓRáIdÐùŒleØ<àdÜË“·ö:Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+åÿÙ ±û'Zc¯öµÙÿÊ‹×Ôòÿì†Øý“­1×ûZìÿåEè7þ mÿ$‹á_ýŽcÿLÚµÁM¿ä‘|+ÿ±Ìé›V¢€>²¢Š(¢Š(¢ŠÇø‡c{ªx]¶ðåÁ³Ô.4ûˆ­g4f Z6û—æ\1#‘Ž(bŠø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû Šø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû Šø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû Šø÷þwÆ_ú(wø>¾ÿâ(ÿ…ñ—þŠÇþ¯¿øŠû ŠñïÙ?ÀÞ2ðgöÿü-¿ɯ}§ìÿdÝ=ב·Íßþ´ ¹Ü:íç ¬ÚáÇü_ãû;Ÿ…~*—CÓÓOH¤u;›`ò‰%%öÄ¥NUdóòû ÷š+ãßøQßè¡Üàúûÿˆ£þwÆ_ú(wø>¾ÿâ(ì*+ãßøQßè¡Üàúûÿˆ£þwÆ_ú(wø>¾ÿâ(ì*+ãßøQßè¡Üàúûÿˆ£þwÆ_ú(wø>¾ÿâ(ì*+ãßøQßè¡Üàúûÿˆ£þwÆ_ú(wø>¾ÿâ(ì*+å_‡Ÿ>,i~?Ðî|Gã©ï4û}BÞ[¨µy ž%‘K¦Ö]­•`ðsÍ{×ÇÍYñ'ÂmZËáþ¢ÚV¯7“ö{¥à1bhÙ¾xÁa• 8ëœt4ØQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ^=û'øÆ^ þßÿ…·â5ï´ýŸì›¯çºò6ù»ÿÖ·;“§]¼ôûQü8ñÿ‹ügsð¯ÅRèzzié.§slQ$¤¾Ø”©Ê² ž~_a@óE|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñõWÄ;ÝSÀí·‡. ž¡q§ÜEk8‘£0JѰGÜ¿2áˆ9Œq@WÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTV?Ä;ÝSÀí·‡. ž¡q§ÜEk8‘£0JѰGÜ¿2áˆ9Œq_*ÿÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…Ecü<±½Òü¡ÛxŽàÞjú}¼WS™C<«‡}Íó6X“ÉÏ5ò¯ü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÊ¿>|XÒü¡ÜøÇSÞiöú…¼·PjòA¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠ?áG|eÿ¢‡qÿƒëïþ"€>¢¾=ÿ…ñ—þŠÇþ¯¿øŠØøyðsâÆ—ãýçÄ~:žóO·Ô-庀ëW’ âYºmeÚÙPF<ÐÕTWñóCÖ|Ið›V²ø¨¶•«Íäýžégx Xš6ož0XeC:ç |Ûÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöówÀ?…_ü7ñkI½øã)µ]";í­«]N%Ì2*ü’(S†*yéŒõôQEQEòÿì†Øý“­1×ûZìÿåEëê ùöCl~ÉÖ˜ëý­vò¢ô›ÿ6ÿ’Eð¯þÇ1ÿ¦mZŠ?à¦ßòH¾ÿØæ?ôÍ«Q@YQEQEU}[þAW?õÉÿ‘«_VÿUÏýräh‡¢Š(¢Š(¢Š(¢Š( ð/ü½À?öj¯ãoù Çÿ\‡ój±à_ùzÿ€ìÕ_Æßòþ¹æÔEPEPEPEP'þB¶ßõÕ?˜®£Å?òŸþÿ¡ åôŸù Û×TþbºÿÈ øþ„(¢Š(¢Š(¢Š(¢Š( ð/ü½À?öj¯ãoù Çÿ\‡ój±à_ùzÿ€ìÕ_Æßòþ¹æÔEPEPEP]Æ­ÿ «ŸúäÿÈ×]Æ­ÿ «ŸúäÿÈÐEPEPEPEPEPq«È*çþ¹?ò5Ã×q«È*çþ¹?ò5ÃÐEPEPEPEPq¤ÿÈ*Ûþ¹'òÃ×q¤ÿÈ*Ûþ¹'òÃÐEPEPEP'þB¶ßõÕ?˜®£Å?òŸþÿ¡ åôŸù Û×TþbºÿÈ øþ„(¢Š(¢Š(¢Š(¢Š(«Oü…m¿ëª1UêÆ“ÿ![oúêŸÌPQâŸùOÿÿÐ…qõØx§þ@SÿÀô!\}QEQEhx[þCÐÀ¿ô]…qþÿôð/ý×a@Q@Q@|¿û!¶?dëLuþÖ»?ùQzú‚¾_ýÛ²u¦:ÿk]Ÿü¨½fÿÁM¿ä‘|+ÿ±Ìé›V¢ø)·ü’/…ö9ý3jÔPÖTQEQE_VÿUÏýräjÅWÕ¿äsÿ\Ÿùò/‹ŸáŸ.µK+3¨ßoŠÖÆÌH#7—3H±EcÓ.ë“Ødö¬ŸþÐ5ç­ÄÞ'2éÇX"ÛìQC%ÕÀ»–Kx㉠ÈÈñÈÕè„5kâ§Áû‹š†€¾#¼¹JÑnÚþKKw’ .¦”…„ñ:¼~Yvo—’vò1Ï)kû/ÍáIá›á¾¿ö4ÍjmcKKûyoãµóíÌ7HZpófynVVcל¥}oýmÿîCvÓúïÿïe¿ þÔºžÓ5oË5ŒúÄú‡Ù-íôû©å–[—ˆ¿”‘³©#f </ŸÚOÃÞ­Üx+U¶¸¸Òt©uUk¸.`¶š2¬žQ2Äaš øô'×ð'À G£¶©®­ýÖ›g«[Ï*Yyåïî’ᤠæ6À…Û“œç#4åý˜üßXhÇ\?è> ¹ðö?¿ç,í|Î6ùêóÎï¼1É­ÚõÿÛ­ùGïò /ýw_¥þ㢼ý ¼)¦xµtKStÕÄ’*ÙÜ40Í2«D8ËBá×næ'@½ñ âøVðµ´V«r<|oŒþ†ÇNÕçÐ5K>×P†!,–û‘â,3¾)dN¼nµRñïìýmâÝ* õt«;O _øn–ßÍGr"¸ù×ýX·/ñnê1Ìëo¿ònÿ}—ÞSÝvëù~Wdÿµ'‡5?èºN€5 ë]f äKØ´û²ŠÑ¼ ¡@‡Œ'$Ê"…?05ÓEñsÃÓé––׿h5M2]bÐÇo+µÅ¬b2ò*ÜHGòãqÝÀ<Õ?|8Ô5_xsZðÞ­oc6‹o=ÄsÙ›…»·™¡2Ĉc|Û®æ'*k„²ý•õá Á¦ê>7 m¥øzçú\–ZY¶žÚ9L8–I<ó½À·E!B:m9$wÖÞ­¿OÇÔQ»jþ_¥ÿS¨Ö¿h-6çÂ÷žg¸»±Õtí>îÒúÎ{9íÅÕÌ1hfDq”•™[%{àÖïÄ/ˆà}[ÂÖÑZ­Èñ®º[1“g K¼ ßêqŽ:õ®Â_²sx~ßXjz%³ê÷ZMÉ‹JÐż?`¹óñ³Îbí'Ý.ÌHëÈGkñ{áµÿÄ8ô |3«[h÷þÕS†[‹y„C,[1,gLNCvªÑ[Õ}Ú_õ»NÝ´õ×þ'ˆþ,éÞ ñ¥oâ›»X-l--' Í5Û½ÄÒÄŠ"HÎýÍTT,äîG²[öŽÑ¤ñLJ´‹+mVX¼Ams*NtÛ´x$Šh¡¼& É–‘÷3íáÔÖ_ˆÿgÝgÆT¹ñf»áýFÿT´³³‘fðû2¶óÜJ „Ýý Ë"²˜Ãξø¬ø>ãÃZŠVâóC7°Ü»9n"žÚæh¤h!ßpdˆ ¤“¨=*c{ûÁ+ô=ÇÀ¿òõÿÿÙª¿¿ä+ýrͪÇåëþÿ³UÈV?úä?›S(ñ›/Ú {¿XLt¨‡ˆî¼D|5&š·–Òf7™³;Vyó·•Ç®kQ¾=hº6–&ñEÒ¼òÞß[Å—iu#%´íŽcŽ0Ú¡ÛnÅc€Ì “§À8-><ÍãOí)ZÚHšTÒ¼‘åEzѤvwÞ0F±íÛÝŽy®oÄ?²RjZ…­ý†£¤Íms©H˪iöÒH¯.Úçg”&B¯ÆFr¼àN¶_áú¦ý=ÿ¯?ÒËÕÍÏÇ? YÚIqq®Z-¼ig!— P¥Û¶e`0Êä0sŒÛÑ‘wum©»^ÚGÃ@×On` È… =®ßIøãá}sÅí¡éš“=ÿ™4(M¬Éoq,#2Çà ŠWAÈŒXa²>SŽ?þ«V¼³Õt]cű·„u­ZëS»Óí´¯&êá'œÌÖïtfoÝäí%cV###5wŸ³Õç†õÍ.)5è¦ð߇õ+ÍWM°[ —)5À˜–àÈDˆŸj›h¤årNÞbíEw·ãeúßüÐûúþÛôþ®Míuàí„¶Ú½ìÈðý¢//H½cqÎé"È‹ƒ¹—!1ób¶µïðб}^þå-u!ºŠö; ‰l–)ŽØÞK”ŒÅcÝÙz‚x5•áO€'ÃÂçû\Ïÿ߆¦ðïü{mûO™ä~ûï¸û?Üç;¾÷ñ>/ýЧñF‡g¦·ˆôÙm­´ =^ÿDûd¶fÝ ™¬ó8[v“ · ÃhÃzRß^ÿ†¿ä¾ÿ éýyÁûFÖ>8èÞ½ÕWÆw°A¦©•n–°Ü\Ï$¯j—6"'Ì*Ì@Mà¼î%GCà¿i¿|9o«xJãíV7%‚9£`ÊÅYVVVR¬åÛà–|xu±©ã> ]wÉû7¦™ö+vÿûi»ìãø«{áß‚áÑn¬þÕö¿´êWº†ÿ/ËÛö‹™'ÙŒœíó6ç¾3œRí¯õ¢ýo÷wý|ÿà}ç«jßò ¹ÿ®Oüx_ÇïŒW4-&÷IÑ¤× õÿÙæ‚9vI)ÓË" ì±Àä'=øDèÇPmf$´|ú£;Ã*•·…Äs¥r„hÈÞà®kÎ[ö!³±Žè躼SY:®›o¨iÿk´³ˆÀa6š¦Hœ) …6®3Žw®ÿe«]kIð¾·yaü#—ÒÜÜC§i¢ÒÓP†IDÍlaój#˜³>ï,çïd6ï·õ¢üžýí§@ÛúõüÖÞºž‡áÿi~*¾¼¶ðõäwrØZ}€íA,bHþl`å[‚x#=Eq¶ÅßÇù|tÆ]5UíbÕ|ܬº‚D—jb îÏUaŽ+OàgÁ›‚ºÓ,o¦Ô~Óx÷tˆX¤PÅÔäG QFyÙœ â¹[/ÙÂÆÞÎþ-cP>*¶Öÿ·¤Ô̳ýžiÚbòÿ¡yÞR‡‰šŽB‘ÉîôæO§ùÛò׿µå}ÿáÿ=>LÙ¿ý¡ôËŸŠ:†ü$Í~׺…ÍôÿdœA†ÚYYc¸Ø"’ExÕYU˜Œœ€AÄQþ×^žØKm«ÞÌÚ"òô‹Ö7 î’ !̈¸;™r6*Ÿ…¿g}SÃ^*Ñx’Ö_xwQ¿ÔltÿìÂ.w],ଗ&b!¹“Œ:óÍhøSà ðÁð¹þ×3ÿÂ7᩼;ÿÛ~Óæy¾ûçn>Ï÷9Îï½Ç9·+]-møÙþ¶_=Ëv¿—üò×ä_Ôþ9èZ×·zÖ©§Ç¡ÛéÖ:‚\ÇçK#-Ô²GXÊìbŠ«’Û‚€ mxâ>‘ñ/M¸ºð…ÄÓ%¥ÃZΓÛKm4€¬Qâ•UÔíe<À× eû3}I°µÞ~æh:vÿ±ãöeѸß37;qürÝ+·ðŸ‚áñ‰µµyÿð‘_Ç}åù{~϶Ú6ç'v|ÙÀûØÇ:;]®šÛïVü/÷ÞWû¿-Õ´Ÿù[×$þB¼ËÇ^/µðƒ5]s[$Zi6’]ÊVTRØçæ½7IÿU·ýrOä+Ç~0|0ã…"ÐõK·¶Ó%¼‚{øÑNëÈcpæêÊcÜÊ™q’ rr%¦Õ—õçò.6NìÅøyû@Ûk? /ØxbïF»{ VÉœÜ5¤á€D]«ºFu’"¡T’ddÔý¥´KL×u}¦ÊÎË]þÅÓãþϺûmã}žvý”Çç3$Ÿ(Oº™éÍgê_²•½µÖ­/‚5«Í<_Ýiú¤ xÓj>Eý¤…–wy¦/"ºãhÉ !‡K_ÙÛ]¶¸]`ø§OG¯M®GwýŽÂÌy¶khð´n+å !¼Àr¾ZwmÛ§ëþÛåmÛ°’²³Ö¿ð>~Z—ÁoˆñWáôäЬæêî$@Ž‡ËŠêX•pX¬jH I+á§í>!|Iñ†Úa³µ°Y%Òo Û×VŽšÞáÕ@ùBL¡zœ†ŠÚøuðßPøð­´%ÖcºÕXÞMý¤,¼´ÜM,Ûüç…i~îþvõã—ðo웤|;¾ðï‚õ FÞûÈð\Iqs=Ìz„RÄË2ˆžR—”¤ÙA€ÉÐöR½Ý»~/¯Ë¯“ØnÖÓ¿áÿ§æ]øñþ=sÂ6z¯‹VDº«Í„7W(÷M"àClY7G…ÚY¸mÁ@µÇíáWðô:”7÷RÇqxúz[ǧ\Éznx¢Æfª¥ˆ)Âòxæ¸Û¿Ù>sàètÍ?Ä$ƒGÒt’^ÅŒKc,²4k0/Âb­a€>ñÎ*½¯ì=‡ƒgÓ-µ/ ³\ëjå‡h#ˆ-¼pÝ#ÀWË$:I“¸ƒžImü_‡Þ¿KýŠÚÿÖŸæ{_ƒµ›&™¤;IkyåM24e•°FU€e8=wÙx§þ@SÿÀô!\¿ ÍàÏè:N£¨Ýêóéñ×·,L·L¸Ø’NIõ$ûžµßø§þ@SÿÀô!NV»°£v•÷<ãÇ ¿…Þ*ðþ•¥'†£:ÔsµÖ¹«:Ú•ò‡¾Y¼ÞÝ5Ÿ¦~Ñ:¿Ž«­jZ IñLµÒuexÞ+k¯´Ã"©ùdÊ©ÚÜ2‚:ããý®¼=°–ÛW½™´Eåé¬n"Ý$@C™pw2ä&>lWgá #VÓ4uhµAÝÙî"³‘¨bv¢Dˆ 09f'©5ÈøSà ðÁð¹þ×3ÿÂ7᩼;ÿÛ~Óæy¾ûçn>Ï÷9Îï½Ç*nKeÓô­¾þÀ­×úÕ~—û»ššÿÇï økì‡RÕ¢»´ŽüMoi5Ì0[Hp“Ï$HËMÎBªpyÀ8´~1ø{þé4E½ïas®¶sµ¬2üÓÝòQÄ6ÒààŽ9æ·ÿ±²ªiÇIÔt‰aЬôK³«è?oI~ÍDžóÓÊbå u'³´Šù­;+-:h4¯ÜÊdq-£]6DÀ„uâ] qU/g}OáG…íïü í}¯Úx‚]^ÙtMÚ kEšÐ[ɳ–ê41íN¢Pá˜pÄïýj¿KýÀµþ¼¿Ìôiÿho Ãáí?SŠþòæßThí´Ë©îYab“3[¤FTXØa™”8’3ÚxGWµñÓ/ôKˆ®¬ï|©àš&Ü’£`«)Að ~Êz¦µà¿ Þø²m&ië¨-Ü:®šº´©uv÷?4qL%RTæ7* eù† {§ÃoÂ'£hzYkg:|pÛ–·¶Ñ  ¤JHxáA8f…ÖÿÖÿðï¦ÇwâŸùOÿÿÐ…yN½ñôoоðâÚ¬‰®YÞÝ5Á“naÂ…Ç;¼î¹ÛÞ½[Å?òŸþÿ¡ ñ‰? 5øç@ñ‚5ÛûB·»¶Ûw¦5ôs­Ç•žxŠ‘äŽç9üΫ·üúØNöз¨üoðÆ•ãUÐ/µMDÏ£k3[Å<‹º8d¸ å$®*ŒáŽWæe‡Ç jž2Ž£,—í<Ö¨ßbœZÉ4JÏ,krSÉg@­¹C’0Aä\­·ìí¬Já5/ÙI¤êºÅ®¿ª[Ť˜æ¸»€ÂØŠV„Q;ÛBÅJ» 0 ã•ðïÁ¿ÿÂ×Ó4‡¶Õ#ð&…¨j—iöÈmcn¢¸LE=i ,™¦Y¯®â—OÛC ÌÉ ÝÁ…%ÊFÙÆÉˆP2Åð]sÌ鿳 ôÞm'Åþ&ŽöÊËÃW>ҾϦýžKkyÖ5i&c+yÒ…†6ˆ×å'nsû;øƒ]X¹ñ_‹ln5kø4È­&·ÑŒ0Ùµ…Ó\ÆZ3;;|Ãr÷ÁU¶ÿ‚ÿK}ûïm?­¿àýDzxS‹Zº°¼±n£óSÍ…á“iBFèÜSìÀÜWq\?€"º†êÁ5É ¹¼Xñ<°ÂaŽGØrU 1PO@Y±êk¸ªcAER¢Š(¯—ÿd6ÇìiŽ¿Ú×gÿ*/_PWËÿ²cöN´Ç_ík³ÿ•  ßø)·ü’/…ö9ý3jÔQÿ6ÿ’Eð¯þÇ1ÿ¦mZŠúÊŠ+Æ¿kj:.¡áÄÐõFÁfŽí¤·RAæ0mݱ†q¹±ŸSXâ+Ç NUe²1¯Z8zr©-‘ì´WÈ?ðšëßô0ø‹ÿ·ü]ðšëßô0ø‹ÿ·ü]xßëùe÷/ó<õ‹ ü²û—ùŸ_S. 6òG!!dR§pF+áïþÐZß‚µÍK¶›â¿©ë¾wÙ-4{›‹©äò•Yÿv% p­»€xV'¨?á|ü@ÿ¡öƒÿÁeïÿ®ºY¢¯:t¦Óò_æuÒÌÕh©Â”Ú~KüÏ´ÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ø³þÏÄú¿h?ü^ÿñÚ?á|ü@ÿ¡öƒÿÁeïÿ­>½/ùó?¹òFŸ^—üùŸÜ¿ÌûOþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯‹?á|ü@ÿ¡öƒÿÁeïÿ£þÏÄú¿h?ü^ÿñÚ>½/ùó?¹òAõéÏ™ýËüÏ´ÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ø³þÏÄú¿h?ü^ÿñÚ?á|ü@ÿ¡öƒÿÁeïÿ£ëÒÿŸ3û—ÿ$^—üùŸÜ¿ÌûOþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯‹?á|ü@ÿ¡öƒÿÁeïÿ£þÏÄú¿h?ü^ÿñÚ>½/ùó?¹òAõéÏ™ýËüÏ·ô-Ìû3HÞf3¸ƒÓ>ƒÞ™ªxz ZàIrÒ«*íùH'¸÷¯ˆÿá|ü@ÿ¡öƒÿÁeïÿ£þÏÄú¿h?ü^ÿñÚ>½/ùó?¹òAõéÏ™ýËüÏ´ÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ø­¾>xù>ÿ‚?h!Ÿ]6÷ÿŽÒÂÿñçý ?´þ o?øí^—üùŸÜ¿ù úô¿çÌþåþgÚ¿ð„ÚÿÏKûè…ð„ÚÿÏKûè…|{á_‹ž9ñ-ô±Þè?´+kxŒÓ^ëâÊÚ%ܪ÷›,Å@U Ü“ªÄzw…¼ ãx~ÛR±ñeô0]nسëWjÿ+9‘ÔzÖÚ‹ŸÙ{)óZö²Ûkîgý¦¹ýŸ²Ÿ5¯k-¾óÝ?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ñ¿øT¾6ÿ¡ÊoüÞQÿ —Æßô9MÿƒÛÊÓëÒÿŸ3û—ÿ$iõéÏ™ýËüÏdÿ„&×þz\ßCü(ÿ„&×þz\ßCü+ÆÿáRøÛþ‡)¿ð{yPj<[¢é·šÏŽ…¥¥¤M4óÍâ ¨ã†5³»@’xQõéÏ™ýËÿ’¯Kþ|Ïî_æ{u¿„-­®HÞrѰa–È9ô«÷öI¨Ú<3– øÉ^¼ÿJùOø‘ªk6^hž)×îì®ãY­çMNíVhØe\+°` á€<òâ¦ÿ„×^ÿ¡‡Ä_ø5¸ÿâëñ.Î2û—ùœ/ˆ0ñvq—Ü¿Ìú›þ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯–á5׿èañþ n?øº?á5׿èañþ n?øº?Ö<7òËî_æ/õ‹ ü²û—ùŸSÂkÿ=.?ï¡þÂkÿ=.?ï¡þòÏü&º÷ý >"ÿÁ­ÇÿGü&º÷ý >"ÿÁ­ÇÿGúdžþY}ËüÃýbÃ,¾åþgÔßð„ÚÿÏKûè…ð„ÚÿÏKûè…|³ÿ ®½ÿCˆ¿ðkqÿÅÑÿ ®½ÿCˆ¿ðkqÿÅÑþ±á¿–_rÿ0ÿX°ßË/¹™õ7ü!6¿óÒãþúáGü!6¿óÒãþúá_,ÿÂk¯ÐÃâ/üÜñtÂk¯ÐÃâ/üÜñt¬xoå—Ü¿Ì?Ö,7òËî_æ}e¤è‘hþgÙšFó1Ä™ôôÍSÃÐj×K–•YWoÊ@É=ǽ|¡ÿ ®½ÿCˆ¿ðkqÿÅÑÿ ®½ÿCˆ¿ðkqÿÅÑþ±á¿–_rÿ0ÿX°ßË/¹™õ7ü!6¿óÒãþúáGü!6¿óÒãþúá_,ÿÂk¯ÐÃâ/üÜñtÂk¯ÐÃâ/üÜñt¬xoå—Ü¿Ì?Ö,7òËî_æ}MÿM¯üô¸ÿ¾‡øQÿM¯üô¸ÿ¾‡øWË?ðšëßô0ø‹ÿ·ü]ðšëßô0ø‹ÿ·ü]ëùe÷/óõ‹ ü²û—ùŸSÂkÿ=.?ï¡þÂkÿ=.?ï¡þòÏü&º÷ý >"ÿÁ­ÇÿGü&º÷ý >"ÿÁ­ÇÿGúdžþY}ËüÃýbÃ,¾åþgÔßð„ÚÿÏKûè…jÜ@.mäŽBBÈ¥N:àŒWÈŸðšëßô0ø‹ÿ·ü]ðšëßô0ø‹ÿ·ü]ëùe÷/óõ‹ ü²û—ùŸSÂkÿ=.?ï¡þÂkÿ=.?ï¡þòÏü&º÷ý >"ÿÁ­ÇÿGü&º÷ý >"ÿÁ­ÇÿGúdžþY}ËüÃýbÃ,¾åþgÔßð„ÚÿÏKûè…ð„ÚÿÏKûè…|³ÿ ®½ÿCˆ¿ðkqÿÅÑÿ ®½ÿCˆ¿ðkqÿÅÑþ±á¿–_rÿ0ÿX°ßË/¹™õ7ü!6¿óÒãþúáGü!6¿óÒãþúá_,ÿÂk¯ÐÃâ/üÜñtÂk¯ÐÃâ/üÜñt¬xoå—Ü¿Ì?Ö,7òËî_æ}MÿM¯üô¸ÿ¾‡øQÿM¯üô¸ÿ¾‡øWË?ðšëßô0ø‹ÿ·ü]ðšëßô0ø‹ÿ·ü]ëùe÷/óõ‹ ü²û—ùŸSÂkÿ=.?ï¡þÂkÿ=.?ï¡þòÏü&º÷ý >"ÿÁ­ÇÿGü&º÷ý >"ÿÁ­ÇÿGúdžþY}ËüÃýbÃ,¾åþg×w ›y#²)Sޏ#•ÿM¯üô¸ÿ¾‡øWË?ðšëßô0ø‹ÿ·ü]ðšëßô0ø‹ÿ·ü]ëùe÷/óõ‹ ü²û—ùŸSÂkÿ=.?ï¡þÂkÿ=.?ï¡þòÏü&º÷ý >"ÿÁ­ÇÿGü&º÷ý >"ÿÁ­ÇÿGúdžþY}ËüÃýbÃ,¾åþgÔßð„ÚÿÏKûè…ð„ÚÿÏKûè…|³ÿ ®½ÿCˆ¿ðkqÿÅÑÿ ®½ÿCˆ¿ðkqÿÅÑþ±á¿–_rÿ0ÿX°ßË/¹™õ7ü!6¿óÒãþúáGü!6¿óÒãþúá_,ÿÂk¯ÐÃâ/üÜñtÂk¯ÐÃâ/üÜñt¬xoå—Ü¿Ì?Ö,7òËî_æ}MÿM¯üô¸ÿ¾‡øQÿM¯üô¸ÿ¾‡øWË?ðšëßô0ø‹ÿ·ü]ðšëßô0ø‹ÿ·ü]ëùe÷/óõ‹ ü²û—ùŸ]ÛÀ-­Ò8É+…ë€1Y_ð„ÚÿÏKûè…|³ÿ ®½ÿCˆ¿ðkqÿÅÑÿ ®½ÿCˆ¿ðkqÿÅÑþ±á¿–_rÿ0ÿX°ßË/¹™õ7ü!6¿óÒãþúáGü!6¿óÒãþúá_,ÿÂk¯ÐÃâ/üÜñtÂk¯ÐÃâ/üÜñt¬xoå—Ü¿Ì?Ö,7òËî_æ}MÿM¯üô¸ÿ¾‡øQÿM¯üô¸ÿ¾‡øWË?ðšëßô0ø‹ÿ·ü]ðšëßô0ø‹ÿ·ü]ëùe÷/óõ‹ ü²û—ùŸSÂkÿ=.?ï¡þÂkÿ=.?ï¡þòÏü&º÷ý >"ÿÁ­ÇÿGü&º÷ý >"ÿÁ­ÇÿGúdžþY}ËüÃýbÃ,¾åþgÕ6þ¶¶¸I#yËFÁ†Xc çÒ¯ßÙ&£hðÎX+ã%zðsý+äøMuïú|Eÿƒ[þ.øMuïú|Eÿƒ[þ.õ ü²û—ù‡úņþY}ËüÏ©¿á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ùgþ]{þ†àÖãÿ‹£þ]{þ†àÖãÿ‹£ýcÃ,¾åþaþ±a¿–_rÿ3êoøBmç¥Çýô?ÂøBmç¥Çýô?¾Yÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿXðßË/¹˜¬Xoå—Ü¿Ìú›þ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯–á5׿èañþ n?øº¥â_ŠzÇ…¼9¨jz†¿âg·Ó­¤º•cÕ'.ÊŠX…@3€q’)®"ÃÉÙF_rÿ1® ÃÉÙF_rÿ3ë?øBmç¥Çýô?ÂøBmç¥Çýô?¾$Ò¿hïkÚ]µö‡àÿw¶W±,ö÷X]Éñ° ®Ž³ÊApAÍXÿ…óñþ„oÚÿ—¿üv»¾½/ùó?¹òGw×¥ÿ>g÷/ó>Óÿ„&×þz\ßCü)öþ¶¶¸I#yËFÁ†Xc çÒ¾)ÿ…óñþ„oÚÿ—¿üvø_??èFý ÿðY{ÿÇhúô¿çÌþåÿÉ×¥ÿ>g÷/ó>忲MFÑᜰWÆJõàçúVoü!6¿óÒãþúá_ÂùøÿB7íÿ‚Ëßþ;Gü/Ÿˆô#~Ðø,½ÿã´}z_óærÿäƒëÒÿŸ3û—ùŸiÿÂkÿ=.?ï¡þÂkÿ=.?ï¡þñgü/Ÿˆô#~Ðø,½ÿã´ÂùøÿB7íÿ‚Ëßþ;G×¥ÿ>g÷/þH>½/ùó?¹™öŸü!6¿óÒãþúáGü!6¿óÒãþúá_ÂùøÿB7íÿ‚Ëßþ;Gü/Ÿˆô#~Ðø,½ÿã´}z_óærÿäƒëÒÿŸ3û—ùŸlØx^ßN»I y‹&pŒr1éïZUð§ü/Ÿˆô#~Ðø,½ÿãµÔÙxßÅ/cšík™âIšÊûR™.`WPÊ$E•‚1R§i;—8`1¯›G j´¦—¢ÿ3Ù¬pñæ©JIz/ó>¢¾Aÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿ„×^ÿ¡‡Ä_ø5¸ÿâë›ýcÃ,¾åþg7úņþY}Ëüϯ¨¯á5׿èañþ n?øºõŸÙCÄ޵¨x5ÍGQ¿Xc´hÅÕÔ“ùeŒû¶ïcŒí\ãÐWN8£©ì üíþgN7£Œ©ìàüíþg²×Ëÿ²cöN´Ç_ík³ÿ•¯¨+åÿÙ ±û'Zc¯öµÙÿʋ׬z¦oüÛþI¿ûÇþ™µj(ÿ‚›É"øWÿc˜ÿÓ6­E}e^û`ÿÈWÃõÊ÷ùÛW¸W‡þØ?òðÇýr½þvÕçæ¿î•= ÓýÒ§¡ãôQE~v~|fxþOàßýÆÿôÞÕôíû}|&ý“¼Qe¢üwñQÒu+ËOí)!·Òï5ìË4EöýA­a‘l,Ä™Curb„oŸål|ýà_ù>?ƒ÷ÿÓ{V_ü+þ _âOÚ3ö²¿ø“à/Ã~<Ðü[à˜|â kŸ»¢hþ6ðß|1i¬øó^²¶Ó ÓÎYtq¥[Úµ‚´“Ãu/ö£Ç<Ø”Gåµ¢ö)ÙÊœeÖv—”9’æë«ån–³Õ«ú»ÛùS_⳺ôNÊú^÷Ù6¾ˆø…ÿ€ý›þøûPðßÄ_Š^‘¨hÚ¤ú&«5ÅâØh×Ñ#¹¶½¾ò~Ïk+¬RyK4ˆfÚD[ÍiYÁS¾\ü—â&¡ãÄÒ|)mâøE.§Õ´‹ý6êÇUÙæ ;‹;˜â Y ²¬‘®àé·;×>{ÿðñUÿ€ïô¹/<&./¾?[|WsæÌQôèµX/<¦>FM×—иٸ(óeûd~ÌŸ>x¶|+±ð׈µßˆ´—‡üc [\ýµì­m¡ðýµ‹ÿiÉ»½¨ó4ùñ2,¨žd,wc©£yŸ>’“‚jÛ9:7ÓËž¢ÿ¸wò.¥“©É´UF¯ÕGÚ¸ýêoÊG²x·þ K¡|PÐ~êß²6·i©ÙëŸ,| âkm_E¼±Ô4Å’ÞâY –Êé`¸´¸Â@êe0V ½'ÃÿðP„~)ý¡_ávâÑsâõ½¹ÒÑWL¼l÷öÑù·êf±Ë{ažKD™¦@ŽYÆÛà>ÿ‚x|Mñ7Ä»‰î¼ ¥xÏÅ?t_ë:>‘¨Ý^iºV™¥éM¦Ãmmw-¬r]\º…•™á2å@?;û9Á&üIû?þÙW#Ö´o xßÂ1øÿXñ拯ÞüCñ÷‡_Q7R$~Î?´ƒû@j?>Ø|ÔüQñáæ›àÿèÚæµkc ßYËy4wvpØÉ%í¾íJá b¶gFÁÓqU–ß%Ò¼®ÿ)r¯ûy¨ûÛFö{\»G¯eÿ¥$úiewm[µÓ×”ô¿ðT_€ÿ³Ý¶•/Ĉmý½ 'Š´¸ô}>óZ—TÒ['íÖÉc Í< ªÎÒ `‘íµ>jÒýž¿à£ÿj߉w¾ýž¼ueâbÓN:´mkir¶Z•šÊ°Éqazñ-½ôqÊëm$¢9ÇÚÜWþÏðL]köu´Ð´­+]Ñu?ßm¾ÛßÎowq}Ò;Ü‚8ŠÝ÷¡À‘Ø‚hcÒþÍÿ°×‰¾ üBý5=fûÃcðàåßÃÍV;IeÝq+heeµS†€dÜeœ£üñü‡-·zqŒ¥.g¥åo5zÖÿÒ)ßM}¦ÈÆRi+-tü©·øÊiƒ©ô§ŠdhôòѱV8=E|Oñ7þ «û5üý¡¯¾|Eøƒâ;‰¤z+øu|â‹éîäeÅE`ßhó¼ÈÌMõ•d£.®¤ý•ñ;ÄÚoƒü)>£âÝBËKÓíöù·W“¬ŹÕWs¹ 2Ì dòHó—ˆ-go~ÐÞø³â;ÿ…w¿<)¥ÜèºOˆ¥ÔíúÆÒá’$3þºc–n.U ­ÄÂL‹)éúÅÞ«ñ¯ö‡Sº¹¹ŽÊ/ Án²ÊÎ-ã1<…ò®ù$l7;¤×±ü+ÿ’Q¢ÛýÕàß¼M¦øÃâÇí¨øKP²Õ4ûøF¼««9ÖxeÛ +mt%NX"½çá_ü’þÛÿèæ¯+þf_÷ÿn<¿ù˜ÿÜ?ý¸óßÛ§ö¨?±Ÿì˯xòÇÃ×~.Õ­f³Ó4}Úeõ}Föê+;Ks+"Vžâ ÎAÚ»Ž€=ð]øÿàKɼAûnkÿ-|k¢Í¨ê§A³Ôtéü=4`HCÝÝÝK Õº —|ì–Äl °!zÛ§ö`¹ý¯¿fÝ[Áž×ÛÂÚçÛl5Vû8¹KBÂòÛW–G™mtÈ%K`ƒŠùÿâ·ì§ûFþÛ¶—þýªgøuð÷Ãÿ¼Eá @øCÅZޱ­¨êqÚG ói×6Ѭp yÊ«Í#;(a–jô¯%4½ímé˧•Ü®»ín§¯JqŒ´Ž—}ož–ÚËù¯Ð÷ïÙëöóøWûRø¢ãDø1â[‹Íb«Ee¨h÷ÚLú…ƒ8A}f—°Dní 2¯Ú`ó"˨Ýó.z¯Ú[þMËâý‹zþ’É^ðöiøÁâ?Ú›ÁŸ?kHþhKðÓÁ·ÞÒl|%¨]ê?Û3^Ëd÷³½Íµ¿ÙcUÓ¢Û(˜ƒ+“/Ê{¯í-ÿ&åñþŽGÿId­¦¢’åóüݽ/;n¯gg¢ÆOâVÛòWû×gk£çòH¼+ÿ`{Oý•ÐË*ÁI;*"ÌÌp¤šç¾ÿÉ"ð¯ýí?ôJVÆ¿¢Áâ] ÷NÔÃmBÞKiB¶ÖØêU°{Í~Y‰¿<í½ÙùÍ[:ÒæÚÿ©ñG„ÿ༠¼Sâ½i<ñ?Møoâo·†4¯ˆ7ºJE ]ÞÚ™æoH؃†+œÜ«²MŸ_[üeð}Þ—c}kâ¿ Ëeª_fY\&§Eww’>χÃË•aå©-xâ¾Òÿà”_¯¿gŸ ~Î^2ñwÃGøáG©&¿k ÒøžûOŠäÝ¥£Z²}ž9L¬ÀÌ$l(Sµ°Á» Á"µýöê×|Q}â2?‚©©êž/ðç‡mžO·iž"Ôm"¶žå•£òÄi‰å‹lŸ#²áG$ú5èàíû¹íÌ×÷’Qµÿ–R÷•¶M.ŽçezXYI¸K–Ýä·’Vm'ü—ò»µýÓëöšøoâŸkúG†~ x+QÕ|+Í­YÛkvÒϤ"d;ÜÆ²…T‚ pÇ8­ãoƒâÞV[ƒ@-Rcq€U‰Ÿg” •ݸb¯øKö¯ø[ãí>êïÀß|¬ÚÙ^ǧ\Me¯Ú\G Ì™ÀÌ’$l¨y88¾]ñgü:â{½oÃÿ5Í3@ð]çÀÔøSe8>¡ Ø»’f¹–ª‡ËâPÌÌã;«Ê´ø"ǼOð_Æø—mà-3Ä—^µðƯØx¯XÔežöÊâÞâÊgŠâÝÊ’Û$F&p%`2• #ÕÔÑvZÚò×V•죦ŸìĨШ¯Ïo‡åußѹ^ßÊôÕ[ôRûâÿ„´µ¾:ŸŠ<;n4˸ôûÃ.¥ }’åñ² rß$‘„8c‘^_ûyþÝ~ýƒ¾hz׋tùuÍOÅ:Õ¾£éq_ÛXµÝĹ;ž{—Há…üò±Ú»—qä|…ðsþ‹ñ´ÃüOñî®é7´^6ø§f'˜·ˆ¼Qm=õťݪù ¾JµêFS÷ V,˜Øê_ø(ìm©~Ø–_âðÀðÏüPt¯jCX EÆŸndûDíŠMÏ dj6ß™†CÃá¡Zœ}§4\’“ÛK¤ß£|ÖëËg£vUXjuÒræ‡+}µ³²õÚþn×=Lý©ü©ám âŠü#áøªÂÞö×Ã7ž ³mEÌ©‘"È|ñ¸:‡r¾ÂT‘]DŸ|3ŠN…/ˆ´%ÖÖd·:y¿ˆ] 3*§•»væYÀÆJ‚G5ðíOÿ†øƒñ{âWÆ ‡³ü-OühÕtMNojQÜ/ˆü"¶>Xx,£ŽŽdÛ ˆÿ}Ðî¤cšú'áìaá_Û§âÇÆ‰š7ƒu˿ͣÉáKù-EÆ­¢‹]8ZÜþòH‡daÿ,·/ÞÇJ'G áíõjöÿÀ4ù9Ik¿%ú£*”hÂ/–wvûÞŸÛ¶êÞhö‰ÿ´€þ Ýé–ÿ|ká? Ï­Iäéñë:½½‹ß>@Û•ÔÈrÊ0¹ê=jkÿŽ> Ò­5kSƶƒ@™-õ9%Õ`DÓ¥s„Žr_3¶ í_þÞ?ðL~Ð?µ†©ñáüžñ6â/ƒõok¾!Ôt%†5˜Ê$ŽæÆ)Œ±¶âEç$7Il4æÖ.Q¼EfÞÉ_c]8ó>XCü¦CòƒÆs_hŸðKïúÏí—àß|UÖ¾êg„@ÔÖÉÍ*šÛo>YKóJ>¯¶£©‡ÃÓm{Kí·¬“×Ñ&¼¥ªº³û›Xý¢>ø{ ×üsàû-V³}FÇR¸Öm£´¼¶EÓÅ38I# ÊÅÔ•ƒœäüCûbøzÃãÂ?xQbñŸÆ =NûJÖôëØ¦±Hl­ãœ¸e$J²,ªãŒ×Âw°_Å_€Öß±Ÿ€t x â&¿à ;Åðj“jñ^Oá[w¸D’#=ÊÚ;DH|&ø—{¡Q¼=köjÿ‚QøÇà~û;iÚÇŠt+”ø]§x¶-~{&šIõ¤Ê.šž^ p»8Üæ"B† l]ªa0Ôy¤ªs/—¥íí~÷¾Þõa¨Fœ%9ë$ôíñ$þM-:óy3ìþÐ~ø‘ãm[Ã_t1¹xðÜÀ`ñÖ¤ø™ñãÀÿ¤Ó—㌼+á6Õæö#XÕ ±7²‰œë½½—&¾ ý¿à“ÿ?dí[Ã3èãᎭ¬ü5Òµ»/ x’óÄZËý¢K¸§òm$D!·ŒÍ,Fm²ÊvÆv ÄÜ|]ýƒ¾2øŸãõ¿ÅH´Ùÿ≼IðêßÂ$Ò<_ïöN›z„¼“iäA+Ëi#É hdXب?Ìq”°¸iÆ­ãßoæ·¥ÒW¿ÂÝ÷qõz\òJztÕy|º¶»ÚÛŸ\YþÑ?õгxOñÇ„'ñ½ºy’ø~=bݵH×h|µ¨4 ¬­Êô ô5÷í+ðçKñ\:¥ãÿ[ë—2\EŸ.¹l—R½ºî¸UˆÉ¸´K’à  å±_ xGþ ñEø¹ Ù_^|/‹Á¾ø¸ÿÅV©r¾+¿RÆ_ìé¢0ùx.Å_<‚ˆ‡fFÚÓ×¿àš‡‰ü]g«ø‹Oøau'Ç«¯‰¤÷0<Ó_ø~_0­„ŒÖ¤É(gÀÇÉÎNóÞ¡…·j»¯¹¾_ÊòºßÝóARŽ ¸Îþ_)¿Ç–>œö{3îχ_¼7ñƒÂvúÿÂ_èž(ЮˬŽ‘}í¤Å«š&db¬ œ Öå|ûÿìý‘µØãÀ_4OI øûXñ6•_Ȳ°ºt0@ÊÑÆÑSÄWÐUÃ^0„íMÝY~)6¾OO‘Ç4£9(»¤Ú^jú?šÔòoÚköÄð×쯭x.ÇÇVzÍüÞ3ÕÁŸʺ\H¡’þïs.Ö)nmQäÚgN1œ_ñOí!o់:ׄ†‘qus¢Øè7Ï?Ûm­£‘u]FæÅ3È‹˜£ÈWqy^B¨Þ_ûHÁ?õÚÇâß5O‰8Ö¼;áÍ_Âð…év:µyZÒáš[÷¹7v’ìieª¢¤-¢1|° Ÿ©~ÇŸ&»Ö-!m"ûíf 5g°·½‚ÚUH!D"å 1ùªXå ötN}#wÑ]´ßwef•¯®¶¶¤¨RŒ¤¹ôOïé£óÞú$·×Cê¹j?†p|'‹Ç³üDð2xi<˜üBÚí¨ÒžMæ=‚ìÉåÞ ãvw:×I¦üAÐu›.#[Ò.å×,ÛPÓRÈämBÙvfxoÞÆ<زë•bóó ü¡©~Åþ:“Á1j:'ƒ<aãøKåñG›Åe§¶´ÄÓÅÚêsi’f0©‰­ä´0˜È9/’}³á'ŸxB_†£â:xÄ7þð´Úf¹â±û6¨o[ì¿-‚GǬ¦)ZU^Lpa0X©J”~~+ùoÓ{=/¥û_ljS„Uã.ÿžŸ‡ßÓEw«ûSþÓÞý‘¾ê>1øšä6ªÉi¦é–æçQÕ§ò-aÈû#‘ÏEDŽIª#0îô-Y5íÎúÝ]#½'UlnPÊŽ3Íxíû·í?a{©øcž!ðߊ-¼+«xwLX$µm=…ôj®gK‹YÊn1F,!dïPyÅnüCðÿ~~Çòè /u/xò-&NÔ®R•.æ)n·³ãŠ3O=ö¢e!l)cƒ’Œ]=¾ÚÓnëÓ³¿­¥ÝJ9*JÕ·Í~Ÿ ¾Z¿»îê~üc·øëáÝwB±¹³Ó#ÕïôË9f`N¡¥Ì–Æåé’C#'÷“k/Úö‹Ñÿe/‚÷Žüu§øƒTÓtg¸’×FÓ¤¾º—j3`" "ü§2HV4»(É­ß…ÿ 4Ÿ„? ôx*)-ô_ éi6Iæ1‘!†%2ùÜ[jŒ¶rO9ÍyÅoÙŸTðÿì³ãŸþÎ2^ëz¯ŒlnløãÆúµôvÂâÈ·W"öe§p…+yRŪjrs>MUÕ¼õëÚë䟒Q©Z>ÓH9kä¯ß]—­ûžÍ¡jɯh–wÖêéì :«cr†PÀqžjÕs_­5ý?ᆇmñBËGÓõëKD‚î *þKûDdùAŽy`Ü Ç1. #œn=-b£9(ívqÛ•soÔð}_þ à|Rø»á?Úkº}ÿÁý.=ZòY-ÐÅ­ÄÖÐÜHºv×-<‘}ªÎ7B‡»€ ùŠkcáWíÕðÏâ_‚¾jzŸŠô ê¿ô»mWDðþ¹«ZÚj÷1Î?v«le-#•ù7À€I®vãöÑüuñ¯Ä~.ø´]Éÿ Å¿‹|>-'e`‘èúm™‚ôãûV›Ï” ){kW'(T|õâßø&—Æ}oà‰ðâ}cÂ:–‹eà=+Ãðʾ,Õ4ˆôMRÔÌÓ\‹k[Lj‘ÈÆÔ ºuHÌL|¦ÉÝN–§"r³÷/ÛX¾k|÷O¶[/NT°Óƒq•šKï²OÖÏ^[-•þ»ñ7í)máˆúO‡nô{†“WñYð¬W {m"‡,Ú¯žÉŒñ®Ø/.UŽBHp¦6Gzÿ³7í‰à_Úáæ›¬xÄ>:¤Ú-ž·ªh‘jö÷7Ú\³"^G±–  q—_²Wˆæý dñZ^èƒN‰kã?,Í/Ÿö1á¢yxòöùßiùöîÛås»wÉ^- Á4~"xóàF—àoŠÇáï‚ן u?‡–†¯îu)5¹¯’Í^êí%³µòbÅY¡S)‘§r]vüñT%œ¬íßgfÞu²²õÑ\<£ÎÚFï³nWÓ}¹vÛsë¿~Ò¾'øgûk᯼âê ¤ý»MÖí®íãí mæÇ!_9¼ÄÄyÜw®"®xÃ㟂~øwXÕü{ã èšW‡®ÓU¼¿Õ`··ÓgpŒ‘\Hî'a,D+H‘0>aŸœüGû!üGøÁ üQ¹ø‰¢ü,ðî«ñ3DÑ<"Ú~Ÿu©YiÖVs]´š­-Ú[Å[÷0C墯ְ7'fV£ÿÿñÞ…ðÀZ/…µ WÔþxÆó\Ó%›\¾Ò&ñ…µÍ­Ô s©ß[ÀòÛêy¾•ÞtYÖg˜„”…:yšSíÛÊÿ¿ý™*4t¼¾Z-÷Ûâ÷o¶œÛ3é?þÓ<á- _ñ—Äé:Š Q½×-`´Õ‹®äû4Ï I·) 6‘È®¦ßÅe߈'Òmuu[X#ºšÉ'F¸† ,r4`îTc€1%†¾9ñŸì/ñ×Ààn…àŸø¶ÊÇ\µmNjW#E}Nûís—ZlÑêð¼&’+ˆ ùÓj2+e~Ÿð·ƒu}+âþ©ªêºoƒÿ³î4; õ{kv[½ž). ‘Ü›² ¢PìCK>@È':´©E^/«íÑé·—^­é¢»Ê¬!xÊÿðëóMévôwÒÇûEþÜZoìùâÝcMñ?Š!ðŽƒŠ|Uy¥›a‡tÉ%–5žEšdy˜‹k¹<¨ƒ¶Ëw8ÉEf»×¬¬4)uKÛ¨bÓ¡·7R\3DqrÝ…ç>•óíOû0üEñ׎~ Íð=¼6—ñÁ–þ Öæ×.æ·¸ðòÂ×Ê/-¢ŠÚU¾ÌZœßèò<<)ûÌ;míÿjφگ>iŸ ¼kwu§øÂòÓúÝÚ¢ËFÁk÷‘R¦[Xe¶R¼‰.£ `©ÂQ„`ìÛµýwºè“ÛºÔÒP¥xYé¯7¢Q}ùÕ¼’W½ßqð7âü.¿ƒÞñ‚éWº$^'ÓáÔà±¼ÇÚmá™CÆ%…rŒ„¯ð’G8®ö—ý¨tOÙwAÐï¼g¦x‹S!Öl´KeÒôé.V)nnb·Y.%Go´ÊKÈËœm]ÎBžãÄžµñG„ït[Ǿ´²¾¶kGm>ök ˆ‘—oîgÒXX+)Á^)ûF~ξ,ÙÊËÀß³,6:Ó®¯e¨Mqãê“M[ßC{w,³ÎY ò»(El‚B„2½œª]+Fûy_fý:ØÊ„aRqU4¾ýó»íÛ¯{žûEUÐæ¾¸Ñ,äñ-½­¦¢ð#]Akp×C)Q½#•‘E ¢%W8«¬ìc¹ÊhŸ<â_k>ð猼+¨xŸÃ±ùÚ®‘m«[˦'k‹urñ™y`Ì=k/Dý«þø—áΩãüIðÿ„´9¾Ï¨ëvþ ´—N°“åù&¹Y q·ï#á˜}E|Ñ©Á>~#øßDø—àùµ?xÀž1ÐüCa ®­ÜkÂkíNàL/+«(eÓÓsNÒÛÅu4rÈv+V”_²OÅ¿ø@ü]{áí7Á¾ñθt Yf·ø«êÃZ°°»–Y­ZöæÁ_M ó¤RC ²!—;†Õ+بQq^þºvÒîÍ¿+kevºö;½…ÛŸ¯–ÚuÚîï]RµŸsé?ã×µoØx£KñŸ….|3ªz´Z½»ØÝ•WfNc±JN À‰û§¦ý¤~ÃãM#ÃMã¿ÿÂIâE¿ÒtŸí«o·j–ì¬ë5¼÷Ë*;@A H8¾uø5ÿø×ô|>>&ÛxR{;?Š·n´¹u›ïG2hSY,ius:Þȳï”(,¥H×·ð7ìïão…¼kqááö½àŸxšO©êWóëè†; [O³Ah¶á>Ćâ-‚VÀ]T£F7åýÛ­·ÓÝok«½v|¶_¶n%{Jú?/´Òüvþö›kÛ~ÌŸ¶ÿjoéz§€|A >±s¢Ùkz–…­os¨hIu ̉wlZ#‡ÆXq]Ä/iþ.ø ¯êž¾³ÔôÛý æ{[»I–h.ch«Ç"¬¤r$ñïÙßö0Õ¾ ‚Ï2xSÎøwðÖÿÂÇÙC…¾½´§Gû¥2B^Â陟kfU;IfÛè¶~Ô<û!ɤø¯K𶉩iÞ–ÞçOðÔme"Û0hìÕÑY`R0 ªœÀ­% 1¬'§7þÝ%ù$þz–áN5£ìÝÕôûÏ·ÿe_ù5ï†ÿö+iŸúIwµÁ~Ê¿òkß ÿìVÓ?ô’*ïkôCô0¢Š(¢Š(¢Š(¢Š(¯—¾<ÿÉWÕíþ‰Jú†¾^øóÿ%_Uÿ¶?ú%+Àâ?÷hÿ‰~Lðx‹ýÚ?â_“9 (¢¾(øÐ¯`ý¿ä+âúåeüîkÇëØ?cïù øŸþ¹Y;šöò÷µèÏg"ÿ{^Œ÷ ùöCl~ÉÖ˜ëý­vò¢õõ|¿û!¶?dëLuþÖ»?ùQzû“íÌßø)·ü’/…ö9ý3jÔQÿ6ÿ’Eð¯þÇ1ÿ¦mZŠúʼ?öÁÿ¯†?ë•ïó¶¯p®ãÕÖ™¢xJM[Äš5Ž´ºbnŽˆ¢c—–(ÎÖ’7Û÷8íÏ‹¡õª2¥{\ÃCë4¥Jö¹óEÔÂúð¿ý­òµÿäZ?á}x_þ‰Ö‹ùZÿò-|ïú³ÿOò_ø'Ï«ô÷ÿ%ÿ‚rÚ h?ôO¥¼w¯‡¢¹ŽÃÍgBÓ¢£¹Te,Û”d•Øà¥}+þ“Ä_óï¥ß¹øåsßð¾¼/ÿDëEü­ùø_^ÿ¢u¢þV¿ü‹]”²œE¨SÄ´——ü®–Uˆ£bKËþ ÐÿÃRx‹þ}ô¯û÷/ÿ£þ“Ä_óï¥ß¹øåsßð¾¼/ÿDëEü­ùø_^ÿ¢u¢þV¿ü‹Zgbÿè)ýßðM?³ñôþïø'Cÿ Iâ/ù÷Ò¿ïÜ¿ürøjOϾ•ÿ~åÿã•ÏÂúð¿ý­òµÿäZ?á}x_þ‰Ö‹ùZÿò-ÙØ¿ú wüþÏÅÿÐKû¿àü5'ˆ¿çßJÿ¿rÿñÊ?á©úWýû—ÿŽW=ÿ ëÂÿôN´_Ê×ÿ‘hÿ…õáú'Z/åkÿÈ´gbÿè)ýßðCû?ÿA/îÿ‚t?ðÔž"ÿŸ}+þýËÿÇ(ÿ†¤ñüûé_÷î_þ9\÷ü/¯ ÿÑ:Ñ+_þE£þ×…ÿèh¿•¯ÿ"Ñý‹ÿ §÷Áìü_ý¿»þ ÐÿÃRx‹þ}ô¯û÷/ÿ£þ“Ä_óï¥ß¹øåsßð¾¼/ÿDëEü­ùø_^ÿ¢u¢þV¿ü‹Göv/þ‚ŸÝÿ?³ñôþïø%¯|d‰dv_<7á=zÊ)Déo¨éÿj‰$¨p’1€fë†>µÌù>ÿ¢]ð·ÿ ¸ksþ×…ÿèh¿•¯ÿ"Ñÿ ëÂÿôN´_Ê×ÿ‘hþÎÅÿÐSû¿à‡ö~/þ‚_Ýÿηñ%†áýGMðo…úWýû—ÿŽW=ÿ ëÂÿôN´_Ê×ÿ‘hÿ…õáú'Z/åkÿȵßý‹ÿ §÷Á;¿³ñôþïø'Cÿ Iâ/ù÷Ò¿ïÜ¿ürøjOϾ•ÿ~åÿã•ÏÂúð¿ý­òµÿäZ?á}x_þ‰Ö‹ùZÿò-ÙØ¿ú wüþÏÅÿÐKû¿àü5'ˆ¿çßJÿ¿rÿñÊ?á©úWýû—ÿŽW=ÿ ëÂÿôN´_Ê×ÿ‘hÿ…õáú'Z/åkÿÈ´gbÿè)ýßðCû?ÿA/îÿ‚t?ðÔž"ÿŸ}+þýËÿÇ(ÿ†¤ñüûé_÷î_þ9\÷ü/¯ ÿÑ:Ñ+_þE£þ×…ÿèh¿•¯ÿ"Ñý‹ÿ §÷Áìü_ý¿»þ ÐÿÃRx‹þ}ô¯û÷/ÿ£þ“Ä_óï¥ß¹øåsßð¾¼/ÿDëEü­ùø_^ÿ¢u¢þV¿ü‹Göv/þ‚ŸÝÿ?³ñôþïø'Cÿ Iâ/ù÷Ò¿ïÜ¿ür¸øžãÆ~!¸ÔµD†9îvîX6¨Q€I=w­oø_^ÿ¢u¢þV¿ü‹Gü/¯ ÿÑ:Ñ+_þE¬käÕñ1嫈m‡þ lž¾"<µ1 ¯Oø'/Euð¾¼/ÿDëEü­ùø_^ÿ¢u¢þV¿ü‹\¿êÏý=ÿÉàœßêßý=ÿÉàœ½{ì}ÿ!_ÿ×+/çs\?ü/¯ ÿÑ:Ñ+_þE¯øM§i‰á˜uiVWö¤\:[Ag ¸V1¢ïÚd` Ï­våù/Ôjû_i};[õgn&ú•_kí/ò·êu5òÿì†Øý“­1×ûZìÿåEëê ùöCl~ÉÖ˜ëý­vò¢õîžÙ›ÿ6ÿ’Eð¯þÇ1ÿ¦mZŠ?à¦ßòH¾ÿØæ?ôÍ«Q@YWœ~ÔßòH5oúåþ•[ףל~ÔßòH5oúåþ•[ÐÉTQErš§Ç è¿tÏjšÕ´>1Öl$Õ,´²®ežÚ2Uå.ÐrA£àçÇ ~Ð>“]ø7­[kÚD7sX=Ì ê‚x›l‰ó¨9SÇLW1âo‡>2Ôko xŸHÀÇÀú~‡qg~÷6E¼@.ÙÉŒ[Oå¶ø#rï\‘Ðæ—öEøsã/† .tïŽQø=jMZîå„쥇ÙÝód1Ç™Šòí·“Üõ¥}û?½JËð×Ï}6 i{w_w-ßã§–Úîx¯íÿnðÿÀOÛë¿oü3q¨Úk2XÙêþ%ŽûdåñZ[É…·3í‰i &àÓGÅßø)¥ÿÉÿ|7‡ü3lŸít+¨µg[–ÎÓP‰p™’ÞCÏ0… >ã´¹Èðÿ‰ðCÿürð¿ÆO|Lø¡>Ÿñâ/ˆ[]°°Òosáåû1oìÄ»y->ÒL+$‰º<p¯:ÿ¿à•Ÿ>7xwöƒ¸ñN¹ðò?ügðÿ„ìahï¯>Í îš-ÍãÊ~ɹcwŠCUrA‚sYÅË’-ü[¿šM/X»§ßGÕÛun£W÷tWôšR~Ž-µèü¯ôߎ¿à¥ß¾xÞ/ ü[ñ͆‡â[ayÙÝÉga$ñ$±¬÷«‘d‘LŽ™VÄŸø(Á„Á^?ñæeâH^î-’Þââ;Ÿo’—3ÅElÒo]«+¡`AŠøçöÏÿ‚K|vý¥¼CñÒ߯>Ö<9âô“áÔÖ|Q­ZÇáÃj±,ñ&mZH$(ÄI"ÈFÚ‹/KñÃþ ñoÇ_µ†³ãOƒ:Ï„¾®¹­Ø^]ø“Dñ.¯ ýõ•¼q¯“}¤6—Re HˆÊrÊI|õEFRöo_OwîµÝ÷ÛKé~YsF›iûÖümúôÛÎÇèMœóEdXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÚ¿ÿäšè¿ö´ÿÒh«âªûWàßü“]þÁöŸúMtõòÿì†Øý“­1×ûZìÿåEëê ùöCl~ÉÖ˜ëý­vò¢ô›ÿ6ÿ’Eð¯þÇ1ÿ¦mZŠ?à¦ßòH¾ÿØæ?ôÍ«Q@YWñßÃRøÏÀ×zUŒööóÞÆ7œ°Œš9*¬z!íÖ»Zçüuÿ.¿ð?ý–€>rÿ†UÖ¿è/ ßËþ3Gü2®µÿA}þþ\ñšöÚ(Ä¿á•u¯ú è÷òãÿŒÑÿ «­Ð_@ÿ¿—üf½¶Šñ/øe]kþ‚úýü¸ÿã4Ã*ë_ôÐ?ïåÇÿ¯m¢€#x\—ÀŒËâD°×­n[Ãåw†ûhIÙ°a”3n oýÓŒ‹oÛŸàì%ŸÆ…ò½Ö³ÿä*ž*±c.§Çú /Ísó/îGÏÈãšvm¥éøí÷ô Œ_øe]kþ‚úýü¸ÿã4Ã*ë_ôÐ?ïåÇÿ¯m¢%ÿ «­Ð_@ÿ¿—üføe]kþ‚úýü¸ÿã5í´P‰Ã*ë_ôÐ?ïåÇÿ£þWZÿ ¾ÿ.?øÍ{mâ_ðʺ×ýôûùqÿÆhÿ†UÖ¿è/ ßËþ3^ÛEx—ü2®µÿA}þþ\ñš?á•u¯ú è÷òãÿŒ×¶Ñ@%ÿ «­Ð_@ÿ¿—üføe]kþ‚úýü¸ÿã5í´P‰Ã*ë_ôÐ?ïåÇÿ£þWZÿ ¾ÿ.?øÍ{mâ_ðʺ×ýôûùqÿÆhÿ†UÖ¿è/ ßËþ3^ÛEx—ü2®µÿA}þþ\ñš?á•u¯ú è÷òãÿŒ×¶Ñ@%ÿ «­Ð_@ÿ¿—üføe]kþ‚úýü¸ÿã5í´P‰Ã*ë_ôÐ?ïåÇÿ£þWZÿ ¾ÿ.?øÍ{mâ_ðʺ×ýôûùqÿÆhÿ†UÖ¿è/ ßËþ3^ÛEx—ü2®µÿA}þþ\ñš?á•u¯ú è÷òãÿŒ×¶Ò1*¤€XÐw¡è‰ÿÃ*ë_ôÐ?ïåÇÿ£þWZÿ ¾ÿ.?øÍr ¿à ¾*øƒûF]|4½ýþ*hzÆ‘o§êÅÍæ±á·µÒ,oe¸Š © «´ˆZÊë) É rŸ2îö†_´_Ãï^!ñ‘ðsÇ^ñf«áIþË­ÙhÚ͵õÆ6ç_.ê8]šÝ‹µÀ9ÇU8¥Õ×õý\³q}þWZÿ ¾ÿ.?øÍðʺ×ýôûùqÿÆkÛh©Ä¿á•u¯ú è÷òãÿŒÑÿ «­Ð_@ÿ¿—üf½¶Šñ/øe]kþ‚úýü¸ÿã4Ã*ë_ôÐ?ïåÇÿ¯m¢€»eH-ñÞUÓáé¿ þ3éâ(ä²°Ô º¿ˆXRÎîâH-oe´7@[M »D p’,r+"»5¿õ¢“¿¦¡/wëV¿4שÀÿÃ*ë_ôÐ?ïåÇÿ£þWZÿ ¾ÿ.?øÍuÞ&ý«þø.ã‘xÃâO€´©|xTxi/*xæ÷Q´·Ðü{àÃ6e•þßi=”ú»Í+)@Š»u(6ìK#ä.o)ý†¿boˆ_|sðÖ_ŒVŸ´Ý+àÇÙ¾è÷^½¸º¼ñ\rK§·Ûo#–Ö±ÚºZ0¶GºýåÔ§ÍA“íñà`Ã+wéŸÿ^øAéëÿ!õêá7M¶¿­$¿)É|û¥a»ÿ^ŸüŠû½N~Šè?áÿ§¯ü…ÿ×£þ_úzÿÈ_ýz€9ú+ ÿ„þž¿òÿ^øAéëÿ!õ蟢ºøAéëÿ!õê¶±áÛOéwÚþ©mcei–{‹±E ’ÎìÀ(’IÅdQ]ü ¹ÿ—¯ü‡ÿ×£þ_úzÿÈ_ýzç讃þ_úzÿÈ_ýz|!Ý< ™;FnU$€HÝ VÁö>”‡Etð‚ÿÓ×þBÿëÕkÿÙéw6êz­µ´Ú„¦ÞÕ%Ús Fr‘‚ÙvÙ¶N@h"Š×ZE«Å§ÉªÛ-üнÄvÇhšHÑ•]Õ7dª™ºƒÔUŸøAéëÿ!õ蟢ºøAéëÿ!õèÿ„þž¿òÿ^€9ú+ ÿ„þž¿òÿ^øAéëÿ!õ蟢¯Ík¤ÛÎñ\kÚtr£di2‘ÁoàÖü ¿ôõÿ¿úôÏÑ]ü ¿ôõÿ¿úõKXÒ4ÿù?ÛúÍ•Ú_Ë‡í ±y­ýÕÜÃ'ØPeРÿO_ù ÿ¯Gü ¿ôõÿ¿úôÎ\Æf·‘u gé_ü>ý—j¿~Ã~ø5¤Y|Ò‚,4›$ÖtÏêbë^‚Îêݧ¶;´0tãql“¨¹‰å’*Ps½?BµÙø~ÁîµíVÚÊÖ?¿5ÆØã_«3)—:>Ÿek ÷šÍœPÜ ÑH쪲Œg*K`Œxõ¤–¼ÞŸ†ªýýfš)Jß×ßÿºèÑùÑáÏø&ÏÄïü-œèÚ/ƒîüXß/ |yð·‰—J?#ñß’òJÓý…|ý‚cÚaÛçý¨ 6îÛå Û÷ü•õ¥¾aw«Mai¬YË}n¡å¶FVš%= lîE?WðýŸ‡ìë^Õm¬­cûó\mŽ5ú³0·–&rnRz»¿½¦ÿŒãîÝ.ªßz·ßcó×ÅÿðM‰:Œôø_ xQÓ5Ãs¡ÜxÃSðÍ³Øøƒ_þÕŠxõ ;9¤"E S[´ ïlIûµ2f|`ÿ‚h|Q´øgâO ~ÎÚ/Âq§ü@øQ¢ü5»LjõÛÁ §¥ÚcMŸìßBVô•4$]‹o!?F5-7LѴȯu}nÆÖÎr‹ó:$Rû¡\¶{c­]“Á+3KxTd“§æ¨§RTmËÑßî»×ç&û«Ù4´ Ÿ½“›ÝÝüÛZþ ˽Î}j{ RÖ–¦iºÆ›-î“­ØÝYÀXI<.e~ðf ŽùéLzIðïöÀ×´ã¤ìó>Ûæ'Ù¶ç¼Íûqž3šÌ¶… +JçKÓlíà–ïZ±Š+•ß »ª¬«€r¤·Ì0G#Ö­Ûx>+Ût–Îù%ŠA•t@ÊÃÔÜЧa¤éÚ­ýÅ®™¬Ù\ÝY³Ã+Éôu •?Z”xrÐÙ¥ÀÕ-ͼ„*KÆÆ$àÛ°I<}hŠ¿®“u:Em¯iÒK! ¨²!f' ?&´áÿ§¯ü…ÿ× !ý©¼ âωÿ³¯Œ¼3ð?U±Ð|Uâ-.m.ÃT»gé†qå=ÈØ¥™âGyx ê ²‚X|›â¯ø#®·£øsÆÞøIñ?Y¸ðÄ?„ðÒüø‚;Cq¥}ˆmÑšÚ+ ;xå‚8®µ(¦Y{$‘…cƒÑøAéëÿ!õé’ø1!(&½D26Õ ˜Üzà|ÜžåD[‹n/òi}ÜÎݯ¡\ß új¾ôÿ8¯¸ø«Æÿ>5üD°ð?‰ïüð'Dñ—ï[êöz5—‰o¥Óõ»UÒ¯ôé}Dé %»/ö‰’(Ŭʢ¥¾|§+ñOþ —ñÄÿ tؾxÃCðwŽ×Åþ/†­m$ì¯á_ê·W7Ö°¸Œ2ÞǶW1]©ufƒqFf?}\øjÖȰ¼Ôíâ)ÛÀ]¹Î3–ïƒùdú-…­‡Ú®u‹Híwmó˜¨>›‹c5J}Õõë¯d×£¶«Í®£Œå¶ÝþÕ¾k™Ùï³è?iÿø&N¿âO‹:ý×ÁÂ>#ðŒü¥ø ÷ÃZ¯µo A£Ziíx#H†›k8¼·’;æòLm+!óϸ¬á6ö‘FØÊ S‚HàzžOã]~ Y£W†ñ]eXGG¨;©ßð‚ÿÓ×þBÿëÐæÚ³}[ûõþº™(¤Ó]­ø%ù%÷ýРÿO_ù ÿ¯UÛö‰w,ª[‰áÒFvïŒ9! Ùа¤t©(Ç¢ºøAéëÿ!õê ÛÚ\AÞ£ RÝ1HQÔ+LÁK ·ÌB«ÀžÔ‹]G‚¿ä'ýu?Éj•ÿ… Ò즹Ôõ­­­ÐÉ,²¨D‰@ÉfbØ’MjxrÈiöóÄ®$ .CŒåÿZѯ—ÿd6ÇìiŽ¿Ú×gÿ*/_PWËÿ²cöN´Ç_ík³ÿ•  ßø)·ü’/…ö9ý3jÔQÿ6ÿ’Eð¯þÇ1ÿ¦mZŠúÊ«Ëÿ!X딟Í*ÅW—þB°ÿ×)?šPŠ)$q39¨É>•ðïâ‹ñkÀZ/Š>j6ú¿‡üEe¥¦ß@IŠòÞT©ÖVR8èhÜ3öÍøÊŸ³Çì—ñ'ÇS¶»xO×ڡ“E¶†çP‡ÊÛÌ‚+€ag\nPSåù\ŠüÎÔ¿mO|Yý•¾0i¿þ1x7Å^ðŒ~kšOÄ=cL×-ô¸n¼Omöƒuyg§iö3 WÓ̤,1WšBGúûY³x«HÓ*O„þñ…·Æþ¸Ö¼u$VÚ·eâ¯Á§x†{=.-.Ó[¶{mF!k I-áh.å‘íÊÉó0oÕ#o‡Ë1§—ÓnÑ·ò§8L|]ñãã©ñÃÞ#ñ‰¤ºÔ´ë»{…Ÿð¶¢ðjW0YèŠý†øé`Ñ×HÔWì¢éõYîDŒwÇ_¯N¨ùåùaßšòï~Î_¿jËßøÿžøiñàÙÃ>‰â;*ËUgµ,³ÂÖ×etE¶J¥X®v°çœeg Å4¯~í4—£Ù»=.ô²M8’r§8½Ý¬û4ÛÓ^·¶·Ñuvqøâ¯í7ñ'ökðÂoÂÁ»ø'ðîî?7Æž/¾³Ñ.çŠÃWX4-2{ÍvÂö$/¦HÓìž$¹¹Kea"™_ªøÍÿ ø­à[φðé¾:ðuþâŸ蚟ÄÿhZI½Ò¾}¦XÑuÛW’0fµ¾-uq݆ë¼x§Fý xÖEÄŠuÁ¯-ñwíÁðwÀ>9¼ð×~&ø#K×4˸,/­.uxcm:æ}žD$¶Ø%—ÌdrgÞ›AÜ2ÔÛi=_5üÞú?^d´ì¾ÕšskÞ’I+=:-žšô³²möwâþ'øÝÿñ…ÿखÞøQñ&Ý´Ý#âà­kÀ:ö¥¤Eu}gŠË¨éºl:a¿–:„R‹ÙµbÞ’¢Ã ¬¿~8øïâg€eÓþ5ëz—ñOâ×>¶gáH¼?a¥É¯Imwi$Ö¯#_mÑbˆÉ;KIX›vuÞߢ‚5ó …ˆÆqÉ™üihƒŒi¨I]Ýë}ß×nfºjOÞrqÒö·•”—ãÌŸýº¯{éù—­~ß>'°ðÂ-ö‘ý£ì> Yë6¿tý[Æ·6-­Ö»yáï[i¶L‚þÝí"šx<ùž(áÃåÄjŸ!NkÅŸµÿÅßøKįl!ðÇÄM{á£â«éì~Êž¶¼×uØõMàž)…°·‚i§>|R¥¾7ˉ¡ý4ÕþhïÅ­Ç¥›Éâ_iwÚ6Ÿsö‰!µ½–Ò[„1òܳéö„3)eòÈR6zZnkV•›wù^NÞ4­¢ïfiΔ\TwVüS¿áÖïÎ×OäOØ'öË‚ëàÕÕçÇߌ¾øc㸼#á_hšµ®³&¡%ͽ»Ãe{u¦Ù[YÉv'’áCAh"‡ýàr|6?ø(ÄðÆŸhÿíµŽž·ñ€°øt­:fÒbÓ§¸O¹6ÑBº«–¶†ÖìÊ÷ ȺÛ(x¶þ–",H0G€+Âÿ´?øƒÄZo…u kÝG—ɦkÇö7-m ÒE&GSÔ g‰EK—3nËk|­ÒÝnÛÑê¬ÓMÊ ùm}uOñnÞ–²ù>ŽËóÛÃÿ¶Ï'ð?ÄKÙÇöƒãW‡ìuo‡Ö:OÄvÒt›Á§ßëzòéú¦›¿N‚ ƒ ©µ¸ybh~ÜŽsÛº?Æ¿Ž|}âi5¿ŒÞ ñn—ð¯ãw‡>>Ÿ¨xsG‡þ7X]¦ŸP–ÚÎ6Yíÿ·ÊkAl›mSÍIK1¯ÑXãX—*¨Îp:µ§V«’ÒiÛºNÚ+j£(íöîîÕÜÉsC•içÿnµë½¥¾ëKQX (¢Š(¢±|/ñDñ¦»â-3ÂÚ½íÿ„ï“LÕà;¬.^Ú¥‰ò>ñ‚êÞN3Ä‹FàmWæ—ìñÿñ‡Äßø)—០|E·ñ‚üSâ_xgUðf±¨é/¯xEôèïÞ ›N±Ó!žÂ}6DF¼¿¹’h¥G)ÜÑþ–Öo‰|U¤xNÞ1Ô´ÝÒ{«{1qyp–ñÉ<ò¤E½ÈI%’(‘s–wU’'+ß[¦¾õdýWAËÞ‡*ÞéßÓuóõõLü‹ý‰ÿlßø#ö,дïÙ?ã%·ÅË ösÔõ½CÃö:^›z>kZnŸdº]§ú"Q,Î÷qµµóM,ÍjÏEGJ÷ŽðUñO‰òþÉ¿þÚxO@ðÇ‚®!ñ=Ωe›§Ýj¶«¤"Ôæ†{XîšÖÎáûJIs…'.µú(±ª³P rHŸ­"À‰–ˆ¡1 qùV’Ÿ3»ßÛë{«;k}®ÛZ+œÔ¯ËoøòÛËK=’VoKÝ¿ÊÏÁIð®·©xlëzÖµài4 o Éy¯ÞØëì:]Õ¼0Ã"i1é·“¨·©3‰Q·N­ßC£ûH~Ó¢ý?j=SÅ¢?xò8~$hú^¨^\E¡á’mU£³:l»$*­4vܪùd̃ïï|=Ð~ø3Nðçà Jðï‡ôˆE½Ž›¦Ú%­¥œc‘C ‹Éà9®sâ×í3ðóà§¥éßücáßj:ÄR˧X]Þ"]ÞÅß6H`ÌxãÞ›ÝTªn]ÄdSœ“oçg³W*]­]’Mݦڲ$ãge¢×ÏK_Õîú_T“gåïíÿyø“¤|)øsâ_üGÓ|1ãË_…ñö¥á}ZóJÓ4ŸÍz³Kq™g.›u¨_ɶÚut‚êÊ87DZa–eúGã/Ç¿‹z_Æ¿ˆ¾&ðÇÄ«½7à ~.ø?Á6þMO’ÇV°Õãðê]›»—„ÝyŠu«‰"he‹c(ßæ© ¿i|?øá ÓÓvÿ·£+z$œvÙ½4±>ënKái-þW¿›{ïæÏÏ…?··Ä wö¹ð¶ªüH»Ôüc¯x×Åš½ð„é6¶þÓôû-^m2E˜Úý´Mp,4ùDÒÜ´w vòC‰@Cþ ‡ûp|^ý¡¼BeÖ¾&ü3øƒâWÀ·Þ±ðêóÄV–š—„|@’[±0Yi u¤ÚFó][L—æúá8J3‘.ÿ²<;ûxÿ_â[ÿÂc«ø¡&º¹²׌5m[NÑ¥¹ ³É§é×WRZÙ3#¼y‚$+º.ÔfSë «1U·$×ëQ¨¨éömó÷µW½÷[Ýû«]Û*jß.׿ªºß]6¶–Zõ>øíâ¯hÿ·×ìçâ/ÚŸÅÚ?Á;Í[Ã^'ÐÃHÖ­5}#T¾“RОßLQÔtÈ$y¯b‰ÿt‘Ç/ú1¶C³üûðÃâÄ?€_ðM¯ éÚסñׄ¼cû(ëÞ(µðÖ½á2]3BŸJÓt”·†$X]A$Z”‹7€pr2:ZšmB<­_ÇŸ}úÎëµ´µÛ6…TšrWJÏî—Gß­Ï€ü9ûoxŽ/ø)ü^Ö>&ÙkVWú¯öF“à ^h·L·Mí-/ˆ,&·]^;В‘yo4–»$µC—b_ûyøËÇö±üñoíy®øcöxÓü9ñ>Qw­øwÄÖúþ§ÛÍáÍ^nî¯5mÞ+f3Ê-•^&Œ›¡–.SgÙþ9øÑàÿ†–>%½ñψ´m8x7Fþß×K…3ézn&"êh—.Ÿ²Üír0Æ ÉCü@Ð| áè5Oêº~—¦]]ÚXÅqy*Å—SÇom-ÁyfšÑz³È rE _ ì׿¿g½ý\"½•ﳋ_|Z¿É4ú~'À¿³/íÉãßþÖ^ÒuoŠpë¾/ñ¼Q x¯áiúzÿ ¡Ø¦¢tíT´âþßÍ6zI77RËo?ö·îc]ЄõïÚgö¯øÉû.ü ²ø»ûAxOÂÞð×u䓯z'…5ɼT÷Þš# ÞÅ4úu”‘Mks,3´hŽfä³(_­j²UPÌ0N95Ä|kð7þ6ÛXx ã¶7§Qš~ÛE}DÛϨ.›wm?›å#«ÏWÏÌR3æ"H“k—2ŠŽ–·àîüÞšjÛ·ÚZ5jÎMµ¦»yß½ìÕôé¢ÑêŸÄŸ¿j¿Š_4o„¶OÆXfËøO]ñv³âe£…°Öͬš†º¼Ö­äZ^N*}¢ìØŽE@Ù߿ା,ø)ðÅ:¯íâ?ü6ñÞ­û:é8𦋩X 9nÓu‰®¯ ´Ì«-óÈ«Ff‘X"|›ÿ‹ý²í~ |9ø¯áÍ[ãD|«|%²Öü £Å|`›S«-²Ío$ϤVQy6~Dñ›Ã#¾=¿ª´Ö‰YÕ™T²çi#‘ŸJtêªuaRß.ž—½ûÝÙ«í®ú[;Z6[Ûü¬ü¶w³»ºÕYßóÇâgí¿ã­öÕ×ôñF=Äú/Ä¿xSÃ?Ž›§Ì|gá«Èôã{­íhN£!o5I…Õ¼émÒöËm›|Kñ—ãŽþ&x]?ã^·¡éþ-xÓá«iÖ~Ñä‹Ãö\šô–×v’Mjò5öÝ(Œ“´°•‰·g]íú&cS r«¼ Ç zf±¼yñCøa¥ÙÞü@Ôí´«MCQ³Ò-圲ÝÝÜ%µ´#Å$ÒÇû°©ƒ‹Œ)¸Ýè½[Q_{i¿Y5–…IÞ-%n¾šKðWOþÝÕ¾Ÿ˜ß¿à¢ÿ¼?ðáÆ‹ñ€xâ5ÃxÒÙñFµá« ø“GÕ.·ˆþ ü(Ô?á#ø{âíV7>ÓåþÔÔ“UðþËÛП:å~Óq‰Ÿ.<é0~vË<9ÿ7Ôµ?‰ž øy¦ø·@Õ~(?Åÿxw]ð’$1êi¢ÙÛøŽãKI¡ÛºÙdŽÇItœ…3)Ü j÷¯ÁTÿfŸxçPðÇŒ¾=|%ÒüG¥^¾›{¦]x¢Î+»[¤sÃ$M&å‘\*FA¯{HÐ1xÕA|e€å½3N7ö0‚øR’MwrrMtÑ4­gt–ËB¥$§;¯yµ¾úEÆÏg«÷½Qùéÿýµ>"þÒÿ4Õø½ñ{Àž+»Öü&±â¦©c&¹àmefµVµOµÓ­î4ûxŒ×vòèÍs8x Û#+6üþ—€¿l½cÅõßÙ—Æ´¨¾|d/bþLww’™ô+ÖŠáL—>iŽX"´–F{[\ºü þ•,j¬ÅTÜ’_­yÇÏÛ7áìÁ«XY~Òüà»ëøòÖ kU‚ÖW+Nر d8PHæ§ÕN[YZýÝK¿“¶·v_r¦Üy¯­íø5ÛÍt¶¿À?´§íïñ+À.ðΉàÏøköaÐì¾h#ðv‰ãÝZÇLƒ^Ô'çL¿{Ý>ê{Õ³XÛËmc-­Òý ¹v2Eåö_¿o/hß¶G<5àïzt0ð¯Ä xÃß­ôý6{i…–‹.¡s*´'PháKÝNu¸…âH~ÊÍ/˜ŠQD´½NÏÄZ]¥þ‹qm}ew\Û\@ë,SFË•’7\†R¤ÀàƒX~øE |:ñW‹õ¿ Y½¶¥ã­R=gZ•®$”]]%•µ’º«±X€·²¶M¨IBÄnf'yT½Ni.­ùë$íw½’k[újE;($¬×*]–Ë];Úú5¾Œðø+/Ç߀ÿ³—ìý¡øƒöóðφ|g§ÿÂC¿…tMrÒÖkkíqá™`eî-mvÆ×Ý\2G †bÀ€ľ2øGð3Jý’g;ÿ‰_ÿdKÍÂø»S°Ó|ai‰|©½åК}3Iv¹|½9¦ŽÚÜ"!6ÔŸŽŸ´o€¿f? Ûk¿´7Œ<;à½"öñ4ëk­bú;Xî®Y’‹‘æJË‹–!ãƒ\—¿à ~ü6ð¿Œ>%|]øm¢øOƈÓxW¿ñ¬6ZÀLki™öË·rçi8Ï8®i+ÂJýV½é¦Íß]zY%½öOÞŽ%óZÞÝ’]¼Ýö²~Éþ!°ñ·ì%à=W\ðu¿Â/Vðm¥Õdž¬ÉÓbð¤2Z+=¼E#n°«X™ŽŒƒ> é ~.ÿÁ+¾*ø;öwø•ð»Ä>ðÅ‹ÿjñøŸÆ«u¤jšD~'m@[kZ™7-µôÈ¿i™f+q*—ôûÀŸ4?ŠÓý…</„þübñ—‡uoü øu⿌Aðׇ¢oxoP‚eÒ-n—JßijBóí0ùñ±¬óÍ,m*,ÁI¢ø%¨~Ø^µøj~ ^|gO‰¾½ñF“ec |NÔ+‹&¶’Âà,6ðÚâK‚ñ´Mf.I bõ÷çÁïÞý |¾!øâmÅzžKO¶éwis Mm’(NɆ §‚ršÿí¹ðoÂßbøkâo‰Þ°ø‡$ðY.q¬ÛǨ‰îÌ‚ mÂYSçHÎÇ*­`ÜjRik»¾U%ÖÞîÛj¬º¸~õ*ŠOF¤›ÒÊíêûÚöèÛÕ½l|]¯EðJÿþ íðƒþ<üÔ øûãeçÿ|Nð«ãë;‹›; ÓY·—PYí†n!ò•·4ƒ™#hÇÞºŽŸ´o€¿f? Ûk¿´7Œ<;à½"öñ4ëk­bú;Xî®Y’‹‘æJË‹–!ãƒYÿ˸+éßþÞ_ î–Í-ìßT¬õM:²ik}W]Ý­z«ít¶NÍ~bøAø ðóÂ߳ĵÿ>ø«à4>ñéŠ÷íÖº‡€4í~óS²4«™¿rZÖÊmVÎÕYUÚ&ˆw ûö_Ô´oÁüsûs‹´ð¾—ð¶ãñ¤²OýœšxûBÞÁ†•œÛ‚$Œ†rK)¸¯QñÇíÍðWÀü=ã¯|Oð‚¼YóhºÌúÄÇU +4î+ DÝŠä F-€=Yø‰ xwÀ^,×õ½&ÏÂöZ{j·¼×q¥Œ6k•®Zrv„`¹rvíÎ*êIòN;wõ¼Ÿ½}[\ÖWi¨«;îE&”¡×¯´^ïdíw£NZé±ùáüøëû9|cø…û6Mð×Âß ¼Y¯x#k¾6øƒâ |OøNÏV³Ó4ûí^úkkÛ8î"}š]µ„ z6mI-¬áTáâõÏÇ/€:×ìÇÿšñWÃOبkŸÛ¾ øos¡xQ¬ÛÌÕh,Z(^qºä•ܸÆd#âºßÿÁF>ü+ð_…|Cñã/Ã-@ñ½«Þx{P¾ñ¬ÚÔ ´<–²3…•TÈ€•'€8¯OðÄ]âtßü8ÖtÝsÃšÍªÞØjv7 =¥ä 2²Ç*’®„rYÎ?»œ=¾»+k¶·ærÙÉ·}•ššu£Uo«IzWvþí¹TV¶KMÏÍïÙÅŸ²½‡íuð'¿°§Ã¯‚ºéšuì> ðïˆ^x\¦“znˆ4•°¬.XÃ!¾ºßö»˜Ùâ5󟃿cïx7þ ¥ð-/.Áø£ê_>"è­á7g_Õum" Ë #É-g “ê·à¾CIªÄж¿Y>ÿÁ@>üqø‚žø/ñsΈ¼Ky³A§ézý­ÅÍòBXJð*93ªyrdÜcdŒݲý¯>ê_ 4_éß|?‚üG•¥k‘ë6Ÿ¨Ý¼ín–ðNd’™‘ã¤ÊF2 o:É¥&´n;ꟿ&­ÛV­oµëvŠNPSƒß­÷Vï}ãtïö[µ´·Ê³ïìð7Á¿ðW¯Šíá/ƒ 4£áoø3ZÑ Ÿ„tø?²/ä¿ñ’î×d#ÈþÏoºTÚçÉ'ä\}é^àø*ìÕñ+Æúo†~üyøK­ø‹Y»K 6ËÅsÝ^\;mH£‰d,ÎX€ “^ùPÛpoÃúÛð3—ñ$Þî×ﵿ4ÿ®;ãÏø¾%ü4¾´35–¡c·QÓ/‘I§ÞAûÈf@}`âRÊxc]P×|Q¦ø`Ù_ZØÿhÝ%•¯Ÿ O>wÎÈ×=Y¶œ§œ“’²v}=z~%ÅÙÝ­?N§È_´›;߀ÿ -øåàï=âøÓÄú&–Ú|Ñ[Ü‹›´È–Ti#GÉᙘÉ=*†£ûHü>±ð•¦¹¨ø¿Ã«£ßÊðÚÜ›Ähî>øæ+ßÇzn×vÚÿv‰%ø"Úúé÷îÛüH¿eý^Ï]ø¡Ýx{@Ã62‰Œ|.Ïkçɇ„º©1Iþ±2«ò:àŠíu«©ìt{¹ôÈ ÕÌ0»Å8óœ)*¹í“øÔ^ñ6ã- ÛTðõ¦¥§^&ø.m¥Yb•sŒ«) òúнEDåu³V{Ÿ"ü:ý¨"´ø2ÞMNâÖÎhÃ>§ xÕ!‰bD›”àº3›r>·’ ÝN:Ö%÷ÄMDÕ.ì5 JÒÖæÃì¾|nvy_j•¢·ž3$ŠÊïõiuòüïÿ¿ä'ðµýtÿ/Äó/Øêámm¼_¦]øªm_RÓüE©ý§K™-£“Mߨ\²ÊËjãÏR$Ë’§øæÚwÅ«ÿüsðlúç‰ÿ‰ì¼A®¯ü!‹¼Ù)ôP’U<íΫÞîU¼ìª€>¨Òµk=n'Ñ.mnãIdä‚E‘VHØ£¡*~ò²²‘ÔAäT:§‰4í WÓ¬õKˆ ¼Ö¦k{4 "yYFdÛžËSm¿K~Zÿ_yqi6í»oóº>EÒþ8x›âgÁoGãoèZ¡¿ð.§w}£-Ô/{¤Ý,@EmÛÆ»Þ6IÞWÊ¡ ~b~ºðßüyûgÿ¢’â?Xø;Ã÷ú¿ˆ§KM?Nî®§`HŠ4RÌÇ' ü*M:UšK—ˆîW0> Æ•ZtòýÏð3¶©·ßôÿ/ĵ_/þÈmÙ:Óµ®ÏþT^¾ ¯—ÿd6ÇìiŽ¿Ú×gÿ*/AFoüÛþI¿ûÇþ™µj(ÿ‚›É"øWÿc˜ÿÓ6­E}eUåÿ¬?õÊOæ•b«Ëÿ!X딟Í(KÅ-i(PI(@¿ùgð›ö}øõû6þÈ>öW¸ø¾¾7ñìçª}·JׯîîìtOÚA¢®™oog{›m.é}J8àUˆJb&UÆÎ?T)‚Ä FzSƒPmÚ÷ÿ)/ýºþ©F|¶M]^ÿqù•,þ+ÿ…EñjÙãÄ?µ.ðªhü*º}÷‹(h¾ Ô/¼¿x‡M½ÕôûAŒ.-l䵊æO0)v=ý Ú̼ܨ!X«rs•Öÿý­ºè¯ËÒ:»=Yš[iÓúûÝœº¶–©h~v|ý”~'øâƒ¶Ÿ¼_ûN[Aãïƒ7šïdokv2Yø¢ßû$YC½N™0zú,>OŸä2LcrxÚâOíâ_‡ÿ/tÝ/㇆~-è ü3¯Z]iz'Šõ/kï²ê67V:lðéV3E$!&:œW,ËrªŠ­úädQÌ:óÒ‚À ==ëXÖQwå_—¥œÝ—Êj>Šè´SOªkïåü=×ó“i¦|¨ÜxçSÿ‚ ê:|ßðºäûçþ²MŸÚš c[œ€ÂÔ^ãî«Kø/í!žÆh¦‚åCÃ$n%R2 ‘ÁríRÕÊ£sæ–üÍüÛ»Þïþ ‹ég.ÓO—DÒJÝ4¶Ý:9.º~i~Î~/øÁ­ÿÁIt½ZÖÇã‡t=WÄÞ'Ò|cá­kLñUîcewͧ^EªjW ¤í–[KI"L¶‰Q.Äm3p’ÁðOöQøŸãˆ~Ú|Zñí9m¾ Þk¾=‘¼a­ØÉgâ‹ì‘eôu:dÀ]ê?è°ù>LÉ1Éý3Ü Èê=(2(ÎæyéY4œ–VÓÒjëÑÉIvq‰|ÖœåoŠIýÍiçt¬û£òkâïʼnþ9Ó,4/ˆz‡íÆfýŸ|¯xoGðm¦³oomãk“«¤’ë eµ¶æetÔÙ-JE/˜¬";;OÚgÂ|9âoˆ7V6~<Ò<â‹úuׯ¼1¥kS_Þé‹à}2šÍti!Ô¦´´Ç+ØI½|¦˜–u¯ÑÛ躌ï|Gk¥é°øƒT³·Ónõ%·E»º¶æx ’\nhã{›–T' f€ äøã6‰ñ#ÅÞ8Ñ<6÷?mø}«Å¢êþt[.$°µ¿_-³ó¯‘}ÝýâõoRª«:“QKšîËd¹Ô´ü"ü¬ºd⬺$¼þÆÿ|n»6÷¹áŸ²OÄø+öhð'†uY>%xçľ$ìZF¿âêZXÓã·–â[(õ~Íwn¢/"Þ9®ÉšçËùw&¾UðeßÄ ?c`úßµ¯ü-©!ðÙøÌ58|D¾\_ÚVÃÄðùéä ßùCBãÉÚaýà·5ú‘HàŽ:ûV|ïÚ:›Ý§®»6ìöº•ýõö¬¶±*ê¾»yþ«ìö×sóÇáׂ¾ |Rм5ᯠê_´F›ðYøËsm¦]ê×ÚÖ›âtð ð¥Ô’-ååÞÝVÞѵ´™"–í’p­ÕLYý‘¾üYøñàψ¼M¬|pÔ®nüãø’×ÄzÆ¥{a…í¶4k‹‹IÏ”®ÆÇH)¨ºùóý£æšA0¯ÐPà¦àAR3œñŠ‚p'ëÚ´U’wµÝ­®ïÝQ»îô½û·Ý…OÞ[¥¿ÎOÿn_ø { EVðÄÙãÇWí ñ‡â_ÃË‹šn»oñ«Á§H²Ò¯ïáѵ}"[? Ùj·éÑþâþoöøäšTAöWdhš7jûþ¸  è3Öª›Tê*–½­ÿ¥Eþ6·£e)Y8½™ùÅð>ÿâ½§í?¥M¯¿íÿ -=xÅz›â(Ãz^‡âÝïÅ·Pê•=Þ­¢‰¥Ó®M¤í‹SóídfIdÆf­ïøðÛÇ¿´”ŸôgŒüaâ¯øŽIl½¨éóøUíÕ4xjöV´’ç^3jRÙ>£xº¹mÊ÷ .¾\,<ïöÖñBþÊ¿µÆ¼ÿï|kª[Åm§_ZüA³ðž¯®i¶ºE˜ÒÖ=wR¿±K‹{MB?Owh·m9{ÛiæŠXd~ª«PÈAdÐ×–ü\ý¬¼ð×âM¿õ;ø›ÅÓéãY}@Ðnµ{‹+=ì‰st`£¶GxåXüÖC+E(Œ9öÅfê.Tìß^º%ª}I»î““ݶiNj JI;+yk&þýRù.É Ùxâo¾øVÿÆZ?Å/ü(ñ—Ä5Ï[xî{ß½”އͻ·>’k¤‚ëÄ1µÌÆÆF•ÄÏ+³ —ã'ìíâoÁñgÇnÿi].ïÃ4{¿\M}¬éÚα¬YÝøš{h/ãp³êWï´ÍØ‘™n“ωÔÐO‚?ü/ûCü:¶ñOÂ]Aï´‰åšÕüûI¬®lî ‘¢žÞæÚtI­§ŠHÞ7†TGFRAý/ã.‹«ük×<h×_ðx{FÓõÛ°Ñbm}=ìm“?3Ó®r½€SüU½J®srå¶ÖK¥£e÷-¶K¢Øš2ä§gªI'çi¦Ûó“V—W×SóçãŒþ1êðQÛ+ÿ‡V¼9q¡øûÃúeΞš_еOx“óEb—×ÿhûBè1(º¹1m5Ð’ÑܼY/sàŸ…ÿ´_‰¾ ñö›¬ü`¹ñ>·ñ[ÆÚ§¦jú¦¡/‡­¼:£ÄO¥<ºk£ÛÛù¶º;Ey°HÂXÑehäD¯½÷ ØÈÏ\Q¸nÁ#$g•ײöv×]Vú¨§nÚÅËM/)Y$ì ¥&Ú¾‹%$›ïñ/?v7m«Ÿ’_ ¾ ün¶´Ö<=ðóã¬_u€~ ÕõË?Þ^Émyã8®t¨–}ÞúC`©“Þ¬mf‰dÂXPÛ~€ÿ‚èßoü7ñ¿|qn×VúDºd?>øÂ[Mð=ÇÛ]Ä”W×4Bh ¹[x%uÊêßT| ý‘>~Ìz†³uû7|6ð€îõöCªMáí ×M’ü©b‚f¸Rî@9{ÔçÑUƒŒ¡œqZ:©Å+YÙ§m³”ì¼—2Š]£z(êÔ^—º¾ûE]ÿyòÝ¿ïK¹ù›ûw|ñIø¡ñÊoX|Mñ_Œ~!þχDÑ.¼¥ëßðŒkÕµ¯ˆ–êÖK+y®`¶Ê^Z4÷’0if>S<ÌÄ÷Þ)øWñGö~ñÿŒ´/‚ºÇÆ­{Ã×óü3Ö!¹Õ5=C[uºŸÅ3C¯%½ÄÛÌPÿgAn×±†˜°Ž$sŸ«¾-~Õ¾ ø/añ_jFãá…ƺý­½œ²Ko¥°¼òåC´$ŒÇM½5bÀÅÈ”·[â¯ÚøKÃÖú宯y ÅÕ¥šÅ§iÓ_N­s«ñRóöÀø…§é_õ›ýVÏÄ âÏé>*Ó¼?áéþßöm“èÏ™x©²%Æs–+Vy0gó+kö‰øUãÍ ö¹øãŽ÷¾&ñF»káïøy5‡z>¿¦hPj·ú=Æ—¡aiyvðZ:ÚÜ æ¸Û?’¾qU¨û« ’äW?©üSдŠ7ƒ5+ã‰|A¦Þêö~DçÚÙÉkÌž`_-v=ý Ú̼ܨ!X®*.Њné5u¾Ò»]šMÙôµÝõ&.Ó”¬Ýí÷oßoÑXø/þ ߎCÆ$:£ñªÃÅw î‡Äû¯Š:~³{áëOyÖ?f}:ÞúX#–ÇYÝ,vm·—÷v_·?Ä/ÚöZðÇïxW_ðߎ¼sâË«¿‡é:VŸ>‹¡Í©å´Ul..îäÍ”ð(ŸlÌZÚk™0J«÷`Äí p}«+ÄѲ×hÿêþøm£Ù|Õ<+.¯sm«x²6¼K»Éd ›´’®’Ïý±þ‰ä4ÛÌÕÞ|møëñCÂ~"øÇHøÉu­ë¿ü¨øjóHðÞ£y£Ûxp¿‡£Õ1©C[[ÀdM ȯ¶I¦Æ.>î,€ÄÜzZ¥]ó)Iu»['ï)mÒí$ü´²Ê˵»ôK^û]y¶õ¹òìà~Ò+žø'û(üOñÄ?m>-x¿öœ¶ƒÇßo5ßÈÞ0Öìd³ñE¿öH²‡z:2`.õôX|Ÿ?È&d˜Æäþ™îˆdrGqA‘Fw0ëÏJÊOš¾VôÒKNÖrR_ÞŠfœú·n©ÿä××ÿIÿ‡äoí?ñ'ö‹ñ/Ãÿ‡—ºn—ñÃÃ?ô?„þ×­.´½Åz—‰µ÷ŽYu«6xt«¢’“N+–e¹UHÅVú[⯄>)üVý¡5O ꚇÅ'ÀڷƘ-fºÐîï´Ï/ÿð€‰dÞÁµà³mYvcuÅÃWYq· @$dô÷¬¯xÊßĺƻeik«[ÉáûŲžK½>khn]­âœ=´²([˜‚Ϊeˆ² HÉߪïR¼jNräI7)Yl¯(ËEåk|Ì ¹/ç?…«þ-®«¾Çο².½âO|Ò>üfÓþ-j×ÚLjücáý;\¾†òk›*ËS¾M>mCSb%ŒËb¶¢ §bóŽ™·ŸŒ~|/ø¡ðïöbøuì·áŸŒV?>| ñ†îω´ýP¶•âUÂè–Ú|šªrŒm'kU€µ¤ ìÜ\~¶F\Ÿ” äsÅy¿€ÿkOüP×>ÙøþëRâ…®|cáÛ¡g,0Ýé°Ò°•Uâcý©hB:†!› m"²„Ÿ<šÝ«?ük_““·[_£5Œ­v–—oÒýà—’>iÿ‚\xSM´ýª>6kß ô¿ŽQø;Sðç…,­u_Š6¾"MOR¾õ–ºX%×À¸xc6Ĥx‰$–MªdýÁ\—‡þ6h^'øÕâéR\·ˆ|#¥éºÆ  -½ü—‘Û”“£1m:äü8_ZëjëÍÎW’¶‹ðIÆ<·¸QE‰GÎß¼­^ÿÁU¾xŽÏHÔæðþðÇÅš}Ö¦–®Öv·3j^x`’`6$’$²¡ °ŠB Øðÿ üuø·yñCÁ¿ôíâ÷ü%z7ÅÿÜëZ†¡áÍI<<ú¶Þ#›FYµSÙg´>nŒ#‘ü¶Ž4`ŽO´øÏþ ðÓÀäø{®è?dñ`k£¥§ÂŸ]-ô6ÓG ÷6ÒÅ`Éql4ÜFÍï£;°ëŸ¤ÈÏ­5wJ ìÚI5ç'+§äÝŠs唣ozë~–-­æµõ±ùáÿ‹‹âwü-->þ(øÈþ'ŸÁò/´/xWıiMâ5®ë‹]KSžM5 9½D‡G m4S ±Ò~Ü×z—Á?Úã]ñÏÀKⶉã¿x6ÃEš>ßx÷ž%ŠÖæò[hKIlîQ®îQüË»xŠÜFÌ­°²ýÔ1!H%NµxßÇ_Û¿ÀŸ>!¿„üG¼AâKm-5Ëí?¾Ô¼C>—bòIwBÆ |•‘á˜"·ÎþL…U‚1ˆ¨§Ëv£ºÒÝT¶½öMÚüÖK²ÑSæ3Þöß^ª×ïv–Öm¾ûü=ûV7Ç_â‚~#Mñ/á·ü+m o [|8ð߈üI¦x{Äßé'S‚k}t·œÂÿÙéZªKg$(Á1›Œí|Rñqûn|HÒ~ko¾$øWâ…­<5k¦G¬'‚4íM3A¸Õ×Qt_ìœ5¼º›´WNÓ+I·Q$Š_ôsÂþ)°ñ§†4ÍgÃsý£NÖ-b¼³”£FfŠDµÀeÊp@#¸…ཚƳ}á½/MÓ¯üKv·ú¤ööéºÂÁºÍ;(W[ÁfÉ /Eo)¸Ô¼£k6íÙ¹'Ö丹»hDqÑÝ4—àµóÚöîÛ¿CÇ?ࡵ±û&üÓõÿ†ß <[ñKņ«—¤Zhš î­4±È þ ,`žæ8?˜ðÃ,¼F¨KñòdŸ¼1ð“à7ÁOøgÄŸ´Î‰â \x¯T·Ö<9ðOS¸›QÔõ;¡q¨­æ‰u¥\Ma×Èmãu‹1‚s·yûÇãïí ¢þÎ~Óõ/é¾/Ö?µ¯×L³³ð߇/µÛÙ¦hä“ýEœR: Hd-+…p2À‘Ÿ1Öÿà¨ÿ 4ŸøÄ:dþ8ñÞþ-ÇAðN±«ê¯-ƒùw±Oakj÷ò[ɺ9XÔ«+È5ÌÕã-z­{v]¼üúÝ$own羿/Á^Önçwð Xñ_Ž?d _þ×Ú¥ŸŒuo [ÍâíÒÕ§Š;©-º·X¤-ó_-ZOî‚üñ?ÀÏ…>ñwüÓâ…>øwÇ tÿ‡.Új’èêZfŸsxÚ¥ê^ý`±‚(Ú[Æ–è¬Qy*þiu)¸04çÊ«N¬t’Kåï©E¾ºI%·}ÉR½(SzÇšþ¾ì“JýÔ›{ì»9þÌ>ñì_ >/|AøùmñGÿ…§ñ_CÖttð…®ü?¬ÝZC‘`·7:EÔ×7VÓ=›‹¡3,†Õd•Ò û#Üÿ‚…ø‚÷âçÆÏx áNñ>ûUÐ>!xwZÕ´Tðä~ñ,PÝÙ]ëŸ}˜C²Ž/9|» Ï-ªÛ¼R†òÏÔ_³çí+á_Úkú¶¡ðÆmQ%ðö§&‹«éú®™q¦j:Eìh’46·(’FÆ9¡‘I]%GRÊÀžGâ'üáïŸŒÑø'Ç‘xæÂéõ}?@:Ãx7Um=BÿËû%³j¢ØÚ…2$*¯*#²³­axÎ’KTâ⺻rrúÞËeg}ЖïN£“ÒÒMö»wû“k{«]·©áèçÒ>x‹X“ZÒuŸ^h~Ñ\éú…³k–ÚÔ¶Ñ%ìÒÉr!ަ¸ŽT»’_-Z?57~.þÔú·ì¥û,Oâ†? ~<üWñF¡ãÍ[JÒmµï_j7z4òÞ]ƒ}p¶VÒÜâÂÄ2A²=»@ˆ®dÝ^¯ Á@>ë߬þKŽt­sVÕo´=*ïUðn«§é:Íõ”rKs¦¡=²ÛÎ˺²¹Y2Ùöœv_hMösðÖŸ©xÇMñ~±ý­~ºeŸ†ü9}®ÞÍ3G$Ÿê,â‘ÑC!i\,k–Œç´#Ùþ7kçm-½Õôz$´ºu–Ý;YJ×ûïÑ;j®Û |'ÐtŸÙc[ø)ãý_ükà»? øëKÕï øc­Ã©/ˆµ^ÃSšFðïÙöÎÚåàÔR1˜ã_*7‰Ûé_Ù'BÕ?dßø%,>2ø?ÄZ¶§à/‡vÉ©øWL´Æ«9·²éÐ@‡mÌøQE;Y†Ç5{Zÿ‚žü%Ó>xGÅz=çŠüAoãuÔKÓ4o j7úÉ]=™56âßì²)ŠQ")I Ç‚îªÞ«Ç ^ü_‰z¤Ú¿‚åÐLjíïôÛY¯ZòÄÁö…–!F–bÑàª"3± $â®m¸J;[KöÖr×ç)Zû%e³¼Áëë}}v^½í»Õô?8¤›Äµ§Ãˆ¿¼gðïâ…‡Žuoø YÖ¼'€uÍ)ô¿ èZò_ $¿²„kZŠÅ%ü󭲸f)o ¸Xä›~çOÔn¾<ŸÐøâXøVŸâñKÚ jCZ’Õ|ÚÕ†öo·˜† Ñ®ß#ÎÚ†ão”7WÕš7ü×áN¡à/kÚýÏ‹¼2~Gc6³¤ëþÔô½f4¾c‰‡OžÝn. Ì¡¡‰bF/*´xÞ ‰—þ MðÀü.“ÄÍ7ŠÖxüL<Þo ßl˜ÄÂÇû3ÊûAÀEÎvìò»Ëùª•GMÙ+[_NgëgË®þ'‰«©_ªkä“ùh›áVøS<áöŸñ3@ý„%ðŸÀÏ xËÂ>$øïñ#ăE»¸Ó%Šhš®­~úµìlƒì2%“I,0L…ÕÅ´.¡‹…÷oÚ“öV¸ÿ‡fxçàÏì“e‘2øï¾²Šëì¢ ,š!Ÿõe†Ì= n=éÚ‡ü“áÔ? <3ã韼O¡ø©nü‡ðçÃwZšÂ[YŒ0_Ãig#ØÏË$MÂÆû¢cälz7ÂïÚ3Áß?gÍ⟃u˜‡5Í|CmªÞÆöQ‹‹Íȳh”Góà`uÅc8Æ4碲M»="¬“¾ŽÞóÕjܯ¦‰©¹ÖEñ6ÚK¼¥ÌíÕ^ñV[%º¿“~|wÕþ$þÑß|%ðoá6¡áÿ‡^³ž½Ä¿µ}ûá«Ã¤ÝÀ’Yø‚y—M—s¼V"(æ-Ĭ²´yaòÿ†ÿà•6ðì;ðŠþ ;W›@Ñäø}â»/‡«¤Ïý¥áïɨhÖúÕülÌ1Ggms1nVkýNY1Gè/Áoø)ß¿>)ð–™àƒãÛh¾ Å,þÔõoë^•âDŽ nI´½¹µH\µ½¼Ó¢–VxкR ­¢ÿÁXþø‹öoðWÅÇ 7‚~!ø–/è_Ù×K=ö«%Ì–ËköcœæC!%«¿;H'ª¥Y'Í%fڽﯿ+-nõ“²»mJ*Ú¥b»Œ¡máeEî§}¯n’|,ð>µ§ÁR~3x‡PÒ584 Wáçƒì¬µ9-]lîç‚÷Ä-<1LFÇ’5žt•ÆH—?D×Íÿà©¿ ~'|gáÿ†´x«6¦âÒûáW‰,WNŠæI#‚âîYì-­Ý œ åeŒù2|ß#cé ÅÝÅ;iý™IÉ=ôºù%ús_<kñ7ᦱ¢êë>Û»rÑ<lÐLŸðf¯¯kÞi±Ñ,å½¹.ù<¸Ð»m\Œœšµ¥Î·&âHó¶GVô1¡ª¿o/×üÌífŸ¯éþ_‰n¾_ýÛ²u¦:ÿk]Ÿü¨½}A_/þÈmÙ:Óµ®ÏþT^‚Œßø)·ü’/…ö9ý3jÔQÿ6ÿ’Eð¯þÇ1ÿ¦mZŠúÊ«Ëÿ!X딟Í*ÅW—þB°ÿ×)?šPïŽ,¦'ûü«ñïö9ýŽ~#|yýŒü=â/Ù'Àÿõï|¼Ðõ/]ë–QÏñ/X¾µ°:uâɧÝOq²%·»e¹»Xg·Š‘Gá?a/¯ Ó,¦¹ÔæŠÞÚÝYe•Â$H£,ÌÇ€’zVü-ŸÙؼŸð“xr+kk }IÛûFŽ+IÙ–ÞàØX¤duGû¬T…'ˆ+JO{«~_ŠoMµMF£‚V]o¯“_/Õif™ùÛ?ì/­j¿þ-Z|1ýüið‹áÏŠcð¤ß îæmFþM=¯_G–Úâ'Óíg†k„’òIŠ?w»_áìGâøÓöwñÅŸÙÇÂwƒÂPx—@}#Ãöz=ƒø6+ÍbÆïHÔ¥´–ýíâ0Åiq$ÑØÜNb–ἄ`Hsi´Çíâö­ð÷Þ=ðf£ñC¶7š‡†-µ»iu‹(p‡ÌšÍ\ÍâHŽæP?xŸÞáÿe?ø(WÂïÚÇàåŠ|ã/ÚßGá»/xƒDÿ„‚Ò{ï Aul· 5I3oµIËH|¤ôªrsn_?•¹n¯äš¿N–ÒÑ˵ÖÚ~~Í«÷¿Ç¿¿à:rÃðrÓã_ÂÞX\|¼Ó>%Åysotº·ŠÓû$X½ø7Û§„.¬!¸>b@ ñæ:óïÚ{öý þ/|>ø{e¯ü0ÔµoˆÞøMá›=Æú4Þ}OJñ=¬r¾¡§ªêrµì1¬éncm,!”Í6é×;“ôj×ööø}%ºY|føS3Ýëð@©âË3j¼ (|×?2þä|ÿ0ãšÞÚáš|m â'‡Äsÿ©×­¶¶y~fï°ùžv<¿Ÿ;>ï=9­a]Åéñ)-:®yiåj–ÿ ‡mf­ªÆ|ÝUŸ’|«óŠßK·åouØÿÅš¯üPñ|äÖ4Oê³.¹âÏ[èz„šIÑšÓìúõ½èÕ-ã’Qm>æÒK|Ëw e,¬|Lÿ‚fxÓOø#ðOþ/ýµ{¯ ü=ðí÷†|Wá-!<~uíÈÓc‡Å0Áª];ˆÞ+K¸yšø|ß– !¯Ñ/ŒÿðPσ¿|)ñ2ÿ\ñÿ„µ]Wá‹q®ø—ú^¹e>·a 1ïØö:´r9hãA)@Ï,k‘¸V¼¿·Á‹k_ KñkᥲøövµðØ—Å*uéÖAÅgûÜ\:ÊËX÷ä/RaN-(¨öK×F—ëeµõJéZù¬ÛîþëY¿M¿•º^þû<þÂwR|Ð ‚¾Nø[ð'âþð—ˆ>hºÇŒ<;{ XÛkúõ§ˆcm:ÞÆ⽃NÔm4[í=¬u9mn5 &–ú 7jMÜBT\þ¥kŸ| á¯O£x‡Æ~±Öm–W—OŸV‚;¸ÄP ™I„¾ñ²Y›Ž†?)Í|Û¤Ác¼}¨ZÜjþ×´­çì÷SMuªi#WÒ´»‚>Ϭßèkxu M>Ed“Ìx|Ø£o2hbD‘£·9Vªšî¥o6ÛNîö»¿ø’i¦“"RP§8ËíG—ÎÊ*>½¯kY½¹ó?Ç¿ø%ßÄHõŸ i^=ðŸŒ>)hºÂíÂ^Ô<uáØîü¬X …»»³›Ä2$Ú{Jd²’+ë"Óÿ¡ªÈ¿º„hñ·ì“ñ7Sÿ‚ƒ'Ä/Â:„ÿSÄZ_öÇ‚ÛÄVÉÿ ©¾Ôñ€‡Í…µg‚&²wGœÚ›¯,Íol²ýs­þÒŸ¼5ñLøuâ/x.Ãâ·Ú´ï ÜëvÑkñaÏ™ ›8šEÄRœª‘ˆÜÿ Æ¥‡Æ jÐiRé~)ðíÌzíäú~šñjPºê0‰LÐ@C~öHÄ—EË/•&@ÚqN¤›Uw.»¹]þ*ÝÖŽüÊ2NwÔº¤¶[[u¦š+é£W_ iþzþα¯Å­þ I¥|M×~]xàø›Å ã [HO Ùh%Ònc¾þΑM¤¬_ÊΚd²÷ ¯&È@ù¢‡à—ü§NX~Z|køCáÛË ƒ7šgĸ¯.mî—VñZd‹¿fûtð…Õ„7ÌH!<Ç_vü6ý¯þ|fÒ|C¨| ø¡ðóÅVRúíÎâ;;ète˜›·ŠVÎ\¯Þ†²íoo—Ò[¥—Æo…3=Þ·ÿÔ ž,°c6«Çú7Ísó/îGÏó9¬¬¥M/³eÞÍI/ý.ëÍG¶µÎÔç>ò»òi§oÂÎúÚççÅÙ«ÆÿµÅøcñ/á«ñCã‡ìãà:ß\›]ÓV‡'g×mÛXžâ{Ä•eKˆÌ¢îÂ;™ÇÙ\ ùÔ?«þÕÿ°oÅoê¾+»½ðÝ÷޼!wñZÃĺ߆ìäѧŸÇ\~ °ÒÄËkª¿Øfò58<ï³^˜Ã}›ÌO!-÷6³ûLü3ð×Å­?Àþ øàkk2›k-ã\µ‹V½tf1ÇjÒ ]„r$›B’Ãt ž7Cý¿þéÿ n|gñÛÅ^ø_¢ÅâÝkÁðÜx£]µÓ¡»ºÓu+»òå™ÑXÈl¤•PÁO= oR´«Êu,¯6Û¶ÚÍJÉlµ²îÖí»4Õ⬖‰(í¯À—å×E­’»¿û$ø Æß?f|<ðg‚¯oöˆ¯š[³Wæê‹l\]dڲ˷õûBÜØ}¯Ï‡ì¾_›ço^Ìgvî˜Ç9éŠòí?öñø«ü)Õ¼w¤üeøWuàíl5/ÃâË 4½>劅†{¥˜ÅŒ]F`Çzàr+>y{ITëtÝõÙ»^ý~òÚZ)'dˆŠ|Š=5üá´íº¶çÉÿàžú¿Žt_ hÞ)ø?ƒ~_|f¹ñGü+[ëû¶ðׇ…n¬Z‹KK‰,Ö+X›“cm$Ñÿ¦îuæ`¶doø&®µû=ü@ø3â­Àšw‡¼Eá߈1´ñ£ì rž ˜kcE°.²±{4΄b³Lˆ6!òã)&>Áñ·íwðŸá¯Ãý+Å¿~'|=Ð|+¯Z-þ™¬ê>"³µÓõv1…š ‰$Ë3À«|ÔçæÓø}ûCøâ׋õß|+ñÇ„ÿÁ6üoÿ Ëã \þÏÖÇHÓõk–v~&µðí·‹üqw¥ë u© û½7P›O¿–K4hÖöçì²Í%ÌÂ_‘·Ò/~Öß ¼©øfËÇ>è·ž5¸kOA}âKy5Ù–AGf¯ 7$eB±î!˜/Rs>ý¼>ë´W‹>x¯Ä¾ð×4G išN¥­Úèx•›J±Ôš[+Vq,Š©¨*ªÜÄÇ¥8¶ùmÑ+v÷]öÛG%î¥e½·»›r|Ò^{¾¾OU~Î×Úß!|Cÿ‚b^|X‡Å)Óþ Ááí~ëâ_‚¯øsðGGñ7Á˯Œëz…ô›ÞÜhÚøzÜ,ú=†·*é¬ý¯zN¤¢O4‘Åómø‹öÝø/ájú?‹>.|1Ó5oÙͨê–W~(±†ãM¶†S ³ÏJ(ÒU1³°\$)þ3ýµ~ ü8ð—†5ÿˆ_~h:IáÝGQñ=•­¦¼¤) e,’…¸‘c,0ëê*£?u¤•¤’üakyÞ–žn}ôW´®ú/ÉI7òR×Ñtßó«Ç¿°Åóû&|Ð@Ü;ן|6ÿ‚–|ø‘ðËÅ^/ÿ…‘à½BðV³y¢kwLj,-“M’ßP¸°Ifa;,Q\Kjí;)•’¡9¹IÏÍ¿/‰6½9­u×gtÝâœTŒz$¿ >vNϦ¶éo™>ÿÁ<¯õ|<ðÜÿ üyá_Ûü]ŸÅÏ…µíOCÓâÓ4Ãá«Ûl[Yx~ãì°YI¨=»5œLæI'žI#Ù#Æ~Üß³Þ¯ð{ãæ¨Wá6™ãïjrý«GÒïô­nÿ@*º.Ÿah²LÔæ‚ëL—K»’¦µHu’ÐL· ?¡×ÿ´¿Ã+ÂGˆuOˆ ¶Ð'jz_À»O ^ÛüÓ´…ú-Þ§c%Ï„üCmq⢊ÒHnZKˆ æšRáG˜R)¶,•ö,?·‡Â;€Þø“ñǾð„üPÿg´¹ñv£„ÑÝ‚ë%”«véåÝDñMŸ))ª ý¿>xŸãï‰þkþ)ð·‡üY¤kÑhZ>®ÚÇyâ’úU†¦f°¶.$™=Eí Ìlz]*Î¥Y6µ¿ÜÒQémR~¶zZ:)£'NœzÅ$µZ4¤¥¯Í$ï¿]u>;øÇûü]ñÿürËâ›ð¾óIÕ¼?ãï^ØxÛB_ ÚÚj~Š+¯ãÔ¯&ësÜmF#m“lR(Ž%û²÷ ÿ‚sø‡Â¿üñÃ~µÐ¾'7ÅÞkÞ)[¸%¿O ß9e“Î&k_2çF•l×;k˜Ñ–F_¯|ûR|2ø•ñ;[ðO×üeá­ÿÚú¯ZÝjzVÇÿiµŽC$;X…;Ô`4Ÿÿjo†?¼E¬i þ"øÅ·‡mâ»Õl´zÖöãM†EÝ·Å#4HˆV`"°R^ÅSIYÝß­šŠz®žåý[ù òɾº-z4¤–ý}þ½£eßò;öEðEÏÇ×ñ_€¿aè¼áOŠ¿µßx£ÆþñŽŸ­¯Š0øKãÏ­ ý³àŸ¾(ñÄߊ÷šÃK¯‹¾"ø‹ð=ü¤øöå´+Ký;\·´×"y/ƒ5¯”בj6P,–” ȱF»‡Câßø'^¯ð«âŒ­¿dïÚøsÂ>"Ÿáž¯%¾™¬7Ú–›â©®õ»¹ciƒ5ÇözÚ4³8ßpT4®¥G°|Aÿ‚¨|,ðV»ãÍ×XÓo é^ý«¼ñ7Kðv«ð'_ðçÄøÇY›E‡YМ~hþ øEâí‹àÞ­f÷Šú›ÍwsÕ³1—M¹7v =ĆÃc/ËîïãoÂ_#âÏÄ_ x;Ὲ|C¢øó⟂ñÿö)ñ·Œ¿m[íwVø!/Ž|Cyño¾*ðÿÅG¿Ò?øbÊM1î´ØÖîíomÊ›]D-`håûa”±vux ã„~*ÍwÂÿxsÄ’XG ·K¥êpÞ5²L¥¡iLÛDЬÊNHÎ+ͼkû}|9ðÇíS௃Z‰<9âˆ*Ôî4ûÝOÖ­eÔ¼;ZeÖ¡ö›Û5s4q2Û$aŠºâ.~a•BR§^H-af—KEÆ{ÛºÚÚ6¶lU{·ÚM·ë+¯×Dï­·i,þα7| û]xsY×¾M¥øËFñÇŠußü^:¦žÇÚ òêCNÒ¿up×÷_Ú´€-®àŽ oì¯Ý9Ûþà—ü§NX~Z|køCáÛË ƒ7šgĸ¯.mî—VñZd‹¿fûtð…Õ„7ÌH!<Ç_yx/ö²øYñ"ãű|<ø•àz_3/‰ÓNñ¥Óxt©0¾È~˃ Àù»pb|ýÓŒk_ÛÛàeô–éeñ›áLÏw­ÿÂ5§‹,ͪñþ€ Mó\üËû‘óüÃŽk).x¨5ÒËÑ©E[¢øî’Is(´»èê;¹yßî|ßð÷ÖÚœ¿´÷ìûAü^ø}ðöË_øa©jß¼!ð›Ã6zôi¼.úž•â{Xå}B=OUÔåkØcYÒÜÆÚXC)šmÓ®w'Òß?a¿|lý¡uDø¯á8¼CðãZøÓ‰u KÛø$´¾ÐÓÀ#LfšßÍÌQV&¶e%ùv£%ÔOûQü3O£á£üDð0øŽcó¿á:õ¯öÖÏ/ÌÝö3ÎÇ—óçgÝç§5‰ªþÙß>øãÄ?ü[ᆺ|:ž£§$ž"ñ>›oÂÎù¬ÚU™n0ü£°°’32G*G.èÆõ1N¬¥QÅ{ÎRÛKÊQ“·£Š·mL¢½›vþU—+Kçk¾Ý•6ý‘~x«àÁ}#á>µðÜ\x/Qñ'ŒmZÑì¼3 ¾§}6‘ÙŒŒÒÁ-¤¶Ð¤çÈMªêv”>ÿÁ<>,xkö`ðÇ„~ |1?¼_á?ƒ¾,ð-ö­«¦ÛG­ë÷øv;}FÞâÂåçT»]6è-̉ñy;ù{ÿD¿hÚ?Âÿ³ìá⯊ž<»øOÂZúýĶrÂÍyqÛ´’$nòaV0]C3¨Ï5Èø'öóø{ãÏx²ÓDñ‡_Â~ðžâë¿®µjú0¶ººÔíZá\ÆžCéyŽ_hÝŽ šÉ9)N]mg÷IkòrßF÷LÚ2kފѶ×Í­•å§‘ãðLoÙ²oƒ_þ.x‹Â¿³ûþξñ.‰á­?LÐd“Eó5 Û3ªËÇIº¸@Ì·v‘¿•¸õ8û:¼—öMý²|!ûgYøãQø§kžðw‰[Ãkzn£¡§ël¶6wm=¬ð3#"›ß$à’ éŠõªºòœ¤¥5kÆ-z8«?š³9à’ºO«ûö{QX–xWŽ> x“Xÿ‚’|6ñþ§yžÐ>ø—B¿¾ûDCȼ»Ô49­âò‹y¾;¦ÜªU|¼1”7Ï~ø9ñÇþ‡ƒ|ÃïiO„>/ø¿ÆSxêMwL—K›NÕ-¼Fö ato$1É«ÙFñIhÁ]è7¯ªø÷þ /âÏþÓ–ÿ -fï‹Z¾·ª[jž“uk¬øa-5]:ÊâÞÞ{è̺º-xǾñ]ƒäÑ<]â)/|5ý…ã­OεfÔ$m:C©jwñ\ÍÖ£sF—3«åå`;¯Û¯àçŒçý¢¯|[û8ü=øçŒ5? ÚéxÓá猴+[Ÿ&{‰aµÕ´Ínq$/;²Ü-­Ä›.fUÛ€§éÿ†_´§Ã¯~*ñ…ðoÇÞ ñn·áþÍ®éú6·m}u£K¹—˺Šf·G"áÀ9FTãÎþ4~Û—¾øå©|;ø3ð³Ç?üMáí×ÄzÜZ%Ö™e™ku5Ä6«æjp ¦•¬®ÊÇ@Ì»”1^¤ªr¹6´v¶š5'òVok+~* Óçù^úõIo¾©o}OŽ¿kïØ'ãÆŠºV¹ûGxWÄÿ¯/>hš=–©à |7m7üInn_R¾±}yã“M3Ë5¬±^ØfaöEY÷P‚x×à.¯ûB~Ýÿbøuð«PÔüm់>ºÓþ*ͪiÑÛøÎßFðåÞ¡h›®…úÉ=º\FÑ[Û4WmE•ÂÙ÷ψÿk/‡_Oƒ-¾2øÇÃ^Öþ $_Øz'‰õkm/T¿šAú¹k«}*Ä’”ŽÕ¤ÈÂ'𬧡¯<•Kµö’ÚüÊM+mk[K;[^óîÞ÷÷R×µ’»O½µ½Ó×Cˆý¿þ$üiøsðRßþOáéñ÷ŒuJ->i>Ýaü#vn®eÔ–ÞúêÖ;çjªZùñowRΪ­Ÿ›¼Iû2Ë ~ÏŸ ãÑ?g¯ÚGQñ'„›^¸·¸Ò>#hš'‰´ÝFúe–æ÷R¸µÖ¡´¸û|ÒM;žhÐä4AöOÇßŠÞ øKá­>ëáŸÃ¯|KÕ5õ²v‹uajÖˆc‘Úæy¯®!!_,)Ã3–‘£dãÂÏüJ×Ä>øksð“áįø“âEÞ»§§†ìî4{;íëEœÛj0ÝKy ±1Ì’ h¦‘_fTFyœSŒ½V½Wkv]nºîôVÒúÇE³ô{ÞþvÙuKE¬¯í³nã¿þʾ ²ý¥.£ñWÄ}7Ãv±xŽk?(.©¨¥º‰ü²DqòˆI9ÂòÇÃo€¾-ø‘ûüNðÿÅß„?>êÖï>!xZ'TðÄšÄ× ¬¾©dö$_ÜX‰áuˆIáX\±\Ȥ‘öo‡6Ð5 Ý6ŸöëÝãʼ¾ÓˆMï}ŽI£–EÁ…ä F¶F|'ÿðT x¿öH»ø¹á øö{Fñ\ž Ò¼=s§%†¹¬jÚ¿ÙpB¶÷RF-Ì·OúKDcBZQÖ¦Ô«JQ~ý´¶êó‹N6×›™EGw}µ[T£ðó'®Í¨IYßKr¹7¶›èywÀOÙ+â‹ðƒâ?ˆi¯ xâWˆþ(üKÐüQ‡µ-wKÓ5}ÎÌévÐO}u¥­½‹Ël, ÛAo½^8Ò÷Y¤èn|Fý£~ëžñ~×´¯]ÚFöwÓGo-¨ŽxfxfKˆïmZ&G%Œ¡ ‡ÇÛ¦ûàÅ[M/Ç_ > Ýø‹Gð²øÖ+(éÏy©Ë ì–Æô^<+qs H ù]‰UuVapøé(®±k³v‡/ßhúÞÝ’‡gS™»Y§}Ò»½ºéª¶¶KÕžsãO|Føçÿøgâ¤øaã¿ é 5mM5 gÄ>%Ó/¼1©éÍgym ú^™o{4ñê3<ð‘s%½³Å¸‰Ýƒùog⦫ñ£ö~ý”¯­?a€wQøÇÄ9ÕR{)üQ§ê £ÙÜß]M/ˆoo¡Šé¦ÊÏŸö˜v”F1¬l£½_Û¦ûEý¤|7à‰ÿ > øKNñ¾½¨xsÃ~%¾¹Ò¥±Õ®¬ín.Ëù÷²]C ÐYܼO$JHA½cÜ»»_Šß´5ׇ<iª|ð~­ñŠêëX}KO jzj-„‘y¢y.n.5‰àhC4‚FUNq÷"º~/TÝíª½µÛ{èìÍ9¯Q»|ºm$­}®ìõ½¬î®ŸÉþø'ãÙ›SøCñá7À¯‰#O øcÅ^Ö¼7©kÞ>,’ÿUÔluÖ.g]EtéVææÆåæO½ Üe! ßÿf†ž4ý¿à›~ð¾•á«?ü@øàˆm¢ðþ©%¾«¨ÁkÅ”7—8XãiG”³H Gjä ÿ‚¨é¾,ðG‚§ø;ðÇÇþ.ñŸŒc×¥[ɧZê:2èw_bÕ>Ó4÷Km˜¯;dòåq+Ê…NÍξÕàŸÚ7Iø­û/i¿¾iº×Š´}{Ãiâ]#N²†4Ôu8ä·óâ·Ž9g|„Úîªá˜H¹·(ItZiÒîoN99tjêÊÉXšo–I[}Z}me¯TÒ²¶«×SáÝàÆßÿ|W»ø»ÿ ÿ ‡XKȾ-Gâõø|u]/þI4µð“øtÏæý»û8]ù²}£Éû^Ï!ßç.½vãþ ‘aàÿøú? <}àÏø47_ \O¦^ßk‡[º{--,çµ»’ؼ×qKnD’ ³/fÿ‡žX'‡^‡3OŠ ã…ø|<ntó~ú›Xi‡Bçì¿eþÎÍßæp€¦ß4yuJnì›Ùk«äO»nÊ êڽݤù…üÍõM>šY¿DµrOg²¼UŽJý™¾.k±c|:¶ðûø6óãÄ sTñœ–Úµ¹¸ð/‡uMF÷P¹ˆK¤M}%»¥–ëc"Å=ãJ¬Ñ½ÿöºý—ã§ì+ãÿƒ¿ Ž™áȼGàû¿ i*ѱ°Wµh!’>D mR™Ç8®ࢺ—ˆ¾é~<øQðOâ/‹,<ÍVÓÄ–°êÞÓfðmÞ™rö·–÷í¨jpFÅ%‚ày<±•ˆ¶à¬…½Àµï†ñô\iZ毗$V`[Mr‹©Û[^Ëq§´‘@vù±í$q;$²¼ÛÃ_ð\ï…)ý–>|Q²Ðüm|Dñ•§‚-|;-œ#XÓo.dA×q‰ŠEn`žÖèK¼†Šî݆LªL¥8]òÙû·Þÿ’ºß╵ÚÑ٤ ӋQ~î›=4WÑ­ô]7Õ;Ý£×~|ñ&ÿø±ãÝ[Nò¼)âox[GÓo¾Ñ}¢îÊó\’æ?(7˜»úÔîe Þf’¬Ýkåφ?ðQo|Fý¥®þÞþÍÿ´kF¶Óµjê÷YðÌ–º5…ô×1[ÝÈ`ÕäyPµÖR’P"ååÝõdîâŸBÇ%×KýÉ~JÿT‹ñÁÖŸ¼¬hšíª^Zj–r[É ܤ á à† €A­ªæ¾*|MµøIáÈuÛ]K¦ Èm¯.!Û·OŽG ö‰wû¥f]Äd€wc‘œ£Î¹{é÷—âù—MO×þøŠÇöyøU§Zhšåöµ¢jðêþ"‹NÖb·Ôžw¶¸ûL¢îIÐ4†yù"LÇÅõ[­7Ãwvø­¥`—‘¦¡kâË)5›#Æ|©L÷- ðɱXï°Æ£hÍv>'ý©­t›ù­ü1á½sÄ ý¾<5hÖ²[Ä—÷‚ &˜DÓJƒl^SFÌÄ á”gi©õŸÚ SÒn4}.?xŠoë0ÜÝG£ Ëð[ÀÑ«Ë$þ’2Ɔ,sÈW»rîï÷¥·ÊÏÓÈÍ%.Êß‹ßçuëæt?í|Qgð¿KãË?ˆq!¸lÆÎªdcÈÑ*ÆÒ,f5v@°b8æº=jÚâóG»‡Jœ[]K ¤3Ýå9R±ßÕSÁ~#—žµÔ/ô½GEžpÂK+åUžÝ•ŠÛ”ò¹IAæµ(¨¹®™P|¶hùá×ìÏã_ø+_µÒtÏh~,»ð½Î™q©µÖ›–©xZ2$ó-Úf‘È”¬ó€ñ‰$“[žø«Çqây| ðéü ¦ßÞxY­¬ Í’´ÿbÔ ×sÌ ˆÈûÇsíîN+è|Pð׋oµ_ ø‡CÔîtrVþ+[è¦{" ÍUbS•aóc•>†¹=öžðÿ‹¼C­Úx ãN×ítS¦#ßYj–Ïo#ÞÏ$;—?,1]Å›p ¥Š†i꟧çuøü„׺Óþ¶ÿ#?ö`øZ>Üx®ÊoáM6±wpš¤?g1êÖÒÝO, ¾[™•Š›dU¢çœyÇ„þxžÓâÞ‹ywá¶×ìujóRñ³ÜZ8½†â ´´ ¾iœªù¶ëå” žV׺|+øÛáÏŒ¶ÚƒøRµ»“K»šÒ渊I¢1Í$BFXݱ†&dcÊAÇj§®|ðö™ñWBðv›¨iºŽ»«]Kmqio}\i¡-¥¸ß4 —ˆ‚ò.¿Œ(Ý%åo•–¿Ö…©YÉ®÷~ºŸ>xödñN‹ð÷ÅV×íüE¨ø6ÿGº¸{),u«ÙBH^Ü;¾öY®v²pÇ,kêÝ&··’9† +B"Jå¼Oû@øgJð_‹µ_ êúGˆn|c=åý†¡“DbGcI1’Q—æ} uzEÇÚÄò#«ãÓ1¡ª½ÿ×þ ’k¾¿§üå|¿û!¶?dëLuþÖ»?ùQzú‚¾_ýÛ²u¦:ÿk]Ÿü¨½¿ðSoù$_ ÿìsúfÕ¨£þ mÿ$‹á_ýŽcÿLÚµõ•W—þB°ÿ×)?šUŠŽ{H®±ö¨£“oMÊ?:.­£½¶’´Y"™J:0Èe#éŠüåøaÿPñ‡‚õ¯‡×ÿ4këmÄ–úf¹l_.óÁEŭׇt؋繷ŸH°y áâa©€ìýþɵÿŸkûö?Âì›_ùö·ÿ¿cü)ÁºuXî¿Gó_á”–Òwm·úÿ&»4šÕ#áßÙ«þ ·ão‚_´—'ŒôÏ ø£Â~ñ¯ˆüe£x¢ë+ªA&®Ú‹°>û/Ø„ê5I­Þoµ‘›å¬„*p~ ÿ‚TübñìÙaào‰V<%{àoþ øS¡^x{Y½¿_^j¶Ö‘ÝA¤ÓmÚÎ{‘¢AtÎó»n“ô{û&×þ}­ÿïØÿ ?²mçÚßþýð¤´ItJ߃_“ð嬩ÏÚG{ßñ¿çÿøÓö‰ÿ‚ajŸ.ÿhWð,^Ò×âÂ=À>/ DÚMõ“jÌÒÉåÀ|¨¾±(b,Ù·?"ìLá|qÿ‚|jøÓû`Eâ?꾿ðv‹ñAñŸ‡õñž­cq¤éö?bóôã [Ú ™œÅ‹Ë‰¥r·  G…hþèþɵÿŸkûö?Âì›_ùö·ÿ¿cü+e^JpšÞ/™zó)~q_+­›Ogg*]·Ë——òï§]Ò>·ÿ‚i|ZñŸñÁò]x+À¿Öÿ÷ì…Ù6¿óíoÿ~ÇøVP|–òÿƒþvÓ¥­cIIÉ5æßßÊÿ8§­õõ>h½ÿ‚zÅâË_Ú<±³Óµ«{5º¿Óì†ì´ —XÁ`“Áy"ŽФÙ$3¸5xsö+ø÷ñƒÅºï‚~%é6^ðƽyâmKPÔŸÂÚv³n·:ݤÐÞù´züwP{:Ú‰ôˆ]c†q—ý,þɵÿŸkûö?Âì›_ùö·ÿ¿cü*”䤥³Ën–Óü‘\òQŒœ²R^M+'÷ ëŸðMOØþÖ~*Ömôß øÛÀ5ñæ‰ã×¹Õ|}¬è׺ ÆŸÆ4›KY-µiQM <¿•"”L¾ÏÁ¯ø'ŸÄ…ß¶ÇŠ¾4Gyðþ¯ˆ“jöú†‹Ú%µðtR$ki¨håáKÛ¯±Û>¢®­Ã4e_ý}§ì¿ì›_ùö·ÿ¿cü(þɵÿŸkûö?³jñK²kªÑ¥·”R¾ú^÷!i~×Oæ›kñw¶ÞV¹ù±àoø%/Ç?x[dz|pÔü¾/ñ_Á-oá…Æ¢ž;ÖuÈuÍNì[˜µ·¹±Š *ÛÌK¦û-”[cc÷¿/—럴Oü Tø©wûB¿bð&–¿~èþðÙxZ&Òo¬›Vf–O.å@ õ‰Cf͹ùbgì¿ì›_ùö·ÿ¿cü(þɵÿŸkûö?º#ˆ”yl—»{hºÊRÛmå-6IÙ+ K™·ÝßÿH_?‚;Ýé©ðˆ¿dÿ‰¿¿j_Žúá?è~Ö>+øOÄ—2Õn.â×™4/Ã×~^™gö&ê6šÉ [Ÿ¶ ‰äºýÛ´e]Þ5ÿ‚büNÑúþɵÿŸkûö?Âì›_ùö·ÿ¿cü+¤cËÿmQ|U¿®¦Ž¤¥^—Oî½¼úÿKC埈ÿ±?~"~ÃW¿³×‡Ï‚|àMCá1ðlSX__êWzF¨![xáŒÜ*›9aKÈë<‰<ýš>8üKÔþxóTð'À­ÆŸ ¼Lº¶Ÿá­?Å7Òé>#·:EîšÆçRm$µ–í–[IÂÊýîèþÅþɵÿŸkûö?Âì›_ùö·ÿ¿cü*åRRnMêÝÿúúÛÓÏS8®T£Ñ&¾ô“ûí_-¾ÿÁ8¼Cà-{áî©ñxæMFñûj66QHöšf£â]fÓRHtñ,#u½º%ݹ™„NêTˆ€‘‘5?bø'Þ½û0j_³ýγ?…ü.ø5?ÃÍ|i^`þÑÔ^mUžaO2Ú}éß&ÇÝpÌ»ãêßì›_ùö·ÿ¿cü(þɵÿŸkûö?ª9sEwüUEùT—áØu©ñ?éµ'øÅ(ªÿÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…dŠøSö¨ÿ‚Yxëâ§íñÇŸ¼]¡hSM ŸŒ<kteTÓüs v¶ÏzR&"Õìt«+B#ÜÆ;Ý@Ë!?qÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þ.7j]Wõø;5ÚIIj“*2qºþ¿ážÍuM­™ùÝñ'þóâ ]ÿdü#Óü1ãïëÿ ôO†šÆ“¯øóXð§ÙbÓâ™s¦ÚN/â¸ò»ÄþC$‰¹d>iòûoаÅ|rø‡ge¤ü*‡À?¾ ø[Æóx¦M^íüK¤Å£[èÿè‘XgùR;Í£¸Žcz¢5ºw(Ì6?ÛÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…jê9Kïvþö¥¶Û«þǯDµÕè’¾½l•ïë¹ò†ÿà›š¶™â¯…Z–«æügñwÄ]ü¶y/lõQ®‹EB`ùîcþÓÓ÷‡*«övÚíåÇ»Îü{ÿÕøÑÃø#Á—þ Ö¼fñªkü&:¿…"ˆkì·Ö¥Þ™h×71ÛÙÏ,Xo·‰‡ÎÁU‡èöM¯üû[ÿß±þdÚÿϵ¿ýûáQS÷”Ý'ðÿö®?“Ó³³Vi5j£U^¯_Ü¿6ývwGÁZ/ü«ã7€|Kð¨ü0ºð^‘{ ø[ÁÞñg‹Å7sK«[èÎ{yt.[KÅm÷b•žÎd7EŽ j ><ÿ‚oü_¼|~‹ÀÁðç⦷ñÃ+‹õ=_Á¬¾®ÓÛßMk`ÒisÚ c÷3BnÖ_-•’ ä¾ÿ²mçÚßþýð£û&×þ}­ÿïØÿ Ò­YVœªKvÛù¶¥ò³Z|û™SЧMRÃd¾è¸þM¯ºÖ±ò_ìýÿî›Áßþëß<'à:ËÀZOŒ¾Õ¤C¬^x“ìz¦¹ªØÞ­Í­æ¡l’JÅ`¾óee„†¹(‰±Žß øéûünðgÆéŸt$Ôü;ã´¿ÓÛ\ƒÃºf¹Z}î¹u¬h®uÍ*m:ê;Zõ$xÒö9൴—äLGô£û&×þ}­ÿïØÿ ?²mçÚßþýð¥í%Í'ðßO[Þÿ{^…¶åJT^ÒµþNëñÔø×Zýƒ>&|"ø±àïˆá\|Jñ›câí?WÑüQsqáÍ/wˆ5xuYnìž [÷¢x>ÎÑ:1š'ÜÒ«)¡¯Á;uÿiÿ.&·øi­x¿âo‚|ie-²H‰ce¢'‡…Ÿo#|l‘¨w.',›ßo×_Ù6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…êJ›MtÛÊÒçÿÒµùÛb¥799½Þþwêþãá_…ðO¿_ðÚþø‰ñãUð¾¥màx“PX·ñž­<Ú¶™¨Á­ªh i§4+=‚Èñ¼²JÖìæ^YeÈñßü“VÓÿcøSU¿ðîŠ|û?ø‡áψ¯t-2çQ¸»¾»H“Í·³†–þ}2ð¼_$Ò™ÕU HÅ@²mçÚßþýð£û&×þ}­ÿïØÿ JrŒl»[ð’ÿÛØFIMÍ­»_åúocòïÁ?>'ÿÁHtߌ~ ¼ðþŸà ™O€Ãð ú6¯sáÝJ÷Q’Í›Q°³ÔR73A»ŽÐ,E£‰šÙÃ}GðömKá‰ì¿h-7Wð.¯âŸÞüañ<÷7Ó {%–ëVO°\JÆ;uSAòãl3‚ÕõöM¯üû[ÿß±þdÚÿϵ¿ýûáU*œÎNÛïÿ’ÿòÓekï©’ŽÚíùkeò»×–‡Æÿ?`oxËâÅ-#H±øwðÿâ7¼%ラêwGT‰´©ô»Óç´6rGÖÿ÷ì…M»ß]|îÝõwßéhD%íåò³M[·Â½zÞìùgáìaâÿ‰>ø“â¯ÚÒËAðþ9Ðü?áÈôŸ†>2Õ­¥Š&kéÖéõ‹xtû•y_P1y1  º+I vUàÿk_ØVçÇ¿µÏÁ¿ |/¸ñZx/Äi¿f¿k­V=@Ñ®íïtû[ÝRé¤ynd¼íÊÊï$ö·º†IÙšû‹û&×þ}­ÿïØÿ ?²mçÚßþýð§Îý¤juNÿ;5úë}ºØKf»«|•­÷YYôi=Ï‹|yÿýø¬|vñ•¦Ã˯‡ß>*x{â¥ç‰5 ëŸøHôI4¥ÒÏöuµ‚Ú§thÑ.MÜ^Twr)Ê6_~ÅŸtž ±Õâød>ø⿉¾#AªÅ¬^¶·©E¬A®•·kd!á›\[í.$Hˇäo³²mçÚßþýð£û&×þ}­ÿïØÿ JMASè•¿Å}Ñ„Rô»»mº”Ü“]õûù¯÷óKïÒÖG€~ʳ'‹?c¯ØëàçÃÿ„úWÃhµß ZégŒgQ5½­ä1Ä¡shÑB¯5ËÈ^D3*gfr 5âß ¿àžü3ñgÁ:&°¿m¾øƾ/ñxñU†µv¾)ÖÛ\·ÕÒ5šÄØ#–'Ö>y~ÖþgÙ£p«÷ÝÙ6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…9ÍÔsr×›šþ’VkÓ·›~VWwRZ5oÂÿìü¬~xøcþ iñkTýŸdð/bøM¡7‚>ëŸ|/¨i…åÄž(kølâPÔÕì£þÏ?³bso¼;î§"C°yž‡ûDÿÁ0µOŠ—´+ø/ikñGáà —…¢m&úɵfidòà>TßX”1lÛŸ‘v&~ËþɵÿŸkûö?Âì›_ùö·ÿ¿cü+_¬Ï™MïvöêÜ›7)>ÚÙ$´Ö*=ßù/ÿ!áŽ?ðOï_l¼Gâ=WÂ÷þÑ~#h>3ðþ þ3Õ¬n4>Çì^~œt {Acs3˜¯ñyq4®VáTð­yð_þ õ­x3ã†|Gñþý[LЧø“;BCÜH­âO[jVmÉPÉkñLr0Òm_1Yš¾¬þɵÿŸkûö?Âì›_ùö·ÿ¿cü+Ë–—²é¯þMøEk»wní¶W7½Íéøs[ÿJzmÑY+'h±WĶÿ‚wÚ~κýï€ Ð[à™ðΫ —SÜîýˆY #¢D{›ŸqÛ.àÀ:qß`¯‹ßÿµüUã=;á^‰âytÏ5¿†­µ»½CCÔ/<;â KTkk«—Óâu¶¹ŠêÔ ÑK¸˜ä©—î/ì›_ùö·ÿ¿cü(þɵÿŸkûö?­՛Ÿ´¿½~kù©9'ÛFúéd“ërR拃^뺷“åºùò¯ÆÖ¹áß°—Á?|)‡â¦·ûGYx;IñįÉâ„Ó<1ªÜj–lLÓ¬R/´\Z[;ȳÚG" »¤$uÀ÷š¯ý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøRœÜùSè£é¢¿ˆJ×}Û{»üËUì›_ùö·ÿ¿cü(þɵÿŸkûö? g“x¿ö|ÖuÿÛÏÀ_¬î´ÅÐÖÿ÷ì…Ù6¿óíoÿ~ÇøQ¼TÉ5oñIÉþ-Ø¥9+ÙîÓû£Ëù;Á6?àŸ5ý“|QàØ~1h~º‹áŸ‚dð>â‹k:¥Þ¥jd²95Õ¬vÚjJ,!•ãIî6H¡Q¶îfÙý½ÿc/þП×ZøqðÛá.µrt4Ò¬¼_uãoÁ¾+Ð[ÍyïI´’[«PÆ9V>Üoû‡×Ù6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…:²u­Ìûí¦÷¾ÖµîþNô¯É¦ß+ZÞ»-î~|sÿ‚Y|Lñ/‹o.®/ôŒöž6øg¢ü>ñqñ?Ž5Iq&ž.Ä—etË[yÑ¿–GÌ-‰•”ù„£µŸÙ+âoÇÚw㟇ôÿ ø+Bð«ñWÂ^#¸ñ–©syºÉ¤é^»òôËCbbº¦²hèÞ ‰ä¹ýÛ´e_ïÿì›_ùö·ÿ¿cü(þɵÿŸkûö?¯ڷ>w½Ûí«’–ËM×ô…Ȭ»%÷$¾û%÷m}Oý¿ü%ñ×Ç¿-ô_ØVðfƒâ-KRŠgQ×µ ì'¶ÒŠ¿Ÿý›qÚÃzÇËT–[yR0ÎÛ‚ŠñOþÃÞ+×?f߆þ‡ösý™|<ýþ%x“öYø£àïÚ‡À¿ µ C_ñmïŒü=g¡|DÕàísêO¨ÄTJ·¹Ó¥¶›É1ÜÛ¤®YwmL`ýý“kÿ>Öÿ÷ì…Ù6¿óíoÿ~ÇøSšö“•G»Mz]©içt»ìL[Œ#²iüÒi~{[CäOÙÛöñ—Áƒ^2}zøÓÇüy¦x·SÓ|[­jž%ÒtK{f°„Eo¨_¬——wöö&h&•"Qs°*A*¦‡íuû,üOý§hŸ\ÚøkáV x Äún»¡x÷û~ùüW¤[BðK{k˜,¾ë¡öŒíxSȘ³FÌ6ªÿ²mçÚßþýð£û&×þ}­ÿïØÿ ¤í(É}–šõV·ž–Zîõ½îÉ·»(½nšûÛoË­­²Z$¬•5ÙgâÅ/ÛûÁ|qᯅ^±ø{¨Å‰ô-~úÿÄ>)Ñå†â}*êÎ[`µˆ¼Ð\ÊEÅÆ%µA·¬ÿþ~ѧöa¹ðÏìwÁ/ø³Zñ…ýÆ©qcwu¥Ã‡=ÝÄ­=œë§Üµ‰Õáig–ÚhÖYgp$!Iú“û&×þ}­ÿïØÿ ?²mçÚßþýð©·º£ÓóÕ=}mªÙÝévËç|îkúÑ¥÷_G¾ÚÙ#ãM öGø¿ðZ…+ý|ðsJñ/€|5®x2ãÂ^5ÔçÒMž¡set—é­¾’×SÝ ´èÞe–ØÍ̬ÓoPÒ{OÁ€þ1ý–¿`]áßÁ{ÿ ëž?ðgƒãÒt›Ýj)m4{ÝN+m©%Äv᥊٦)X'“Í{öM¯üû[ÿß±þdÚÿϵ¿ýûáU&çÿàjÛ·«“oÍù+(>F­ÿmûÙ+zøöøï­~Ïþ*ƒã­·ÂÙ>0j>"ðÿŽÅqø¶ûX‹Åz®“¨Á{•Ô2iÃJÓUm–Þí„æ™ä+,¾cϽ/ìQñ¢ëÅçã$Ö¿ ×âÌSÆñøDkwG@ûøu¼=ö#¬ÿgùþy‚GºûGذìÙûÚû[û&×þ}­ÿïØÿ ?²mçÚßþýðªU$´Z~Zò§e¶ª1^ŠÝ]×;§èï§ÞÛõ×±ò~Àÿ<]û(éÿ þ"jþ‚Ïâ޵/üUNš*M2úúëQ¸Ñ´Ö0©%’Kk)f˜Bd·k— ®ê‹ôíQû=Y~Ô²ÿ޾ßÞÉ¢Yx×@ºÐ¾×o ÈlDдk"Äß+„$‡ƒÁ®ïû&×þ}­ÿïØÿ ?²mçÚßþýð¨Ú<±ÑyhÕ’JÏud´í«Ý¶S“u=«ÖZ¿VÛ“o¥Ûzü–É#ü=ýž¿h~Õžñ¯ÇËŸønË–×6Úì¾øâ+Í;Æhl®-á_øFn-â°Óÿ}Öÿ÷ì…Cw°º·ßü’ý CÅZ^(ðÆ£¦_Å ðj6²[I˺9ЩVÁ‘SÿdÚÿϵ¿ýûáGöM¯üû[ÿß±þŠšq}G8´Ñàþ$ý”u;Ùçᇄôý;ÂZ¥Ç‚n­®µ+ÙåƒOÔ [M»] v%¥›~Z1žIçƒ/‰?gmOTð¦ƒcÃφ~V˜×R}’ß[½²}>IH’Òö+Q"î¼Åع!HcŠ÷?ì›_ùö·ÿ¿cü(þɵÿŸkûö?­»¶û»ÿ_q)(¤—Eoëï9¿þ Õþ|/ÒôŸj¬j–¢C5Á–I‚î‘bY%&I5eŒ;Ì‚p:=kN:Æwh&–ÜÝBðù±œ<[”Ê}Fr)²mçÚßþýð£û&×þ}­ÿïØÿ ™¥4Óê8·š>ið×ì_â(¾ßøs[þȶš? \ønÏX‹^¾»iUÌ[ÐåŒGoù@ÈŠïƒÂñ],_üeâG_¿ñ]§ƒôIu9ü9ökM6öiâŽ-6ôÜJ]šÞ<3+€)($c5î?Ù6¿óíoÿ~ÇøQý“kÿ>Öÿ÷ì…Uõ¿§àïùŠÊܽ?á¿ÉWÀïë_ˆtý~ßEþÍŸW¼Ôtû»IÜÜN—72Üž&‰De<Р«¾ïöqÏøgöjñv™âÆõ¼9‡ô=cYÕ¯ä¿Ú÷¿nŠéT´^@Et7Csy‡>Z‘Œb½çû&×þ}­ÿïØÿ ?²mçÚßþýð¨åMYík|‹Rqm®÷üÿÌù»Â?±÷‰t‡Ú¦ƒ©A ý©^:ý¢@mb–)-"œtÈKý“kÿ>Öÿ÷ì…K¼vÈVÙ5'8Ugð«½ÿ¯_ó3åKúôÿ$>¾_ýÛ²u¦:ÿk]Ÿü¨½}A_/þÉn–ß²M£þ&·dCý çŠ3à¦ßòH¾ÿØæ?ôÍ«QLÿ‚—L.þü-òyÛã@·üIµZ(ëZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÌÔ|i¤i%Ó´mWS±·Õµu‘¬¬ä™Vk±Üæ4'-´rqÐV|±ñ›ÀÞ>ñÅ?|@ð·†mnÁwÖi¡‹™gƒSš -ò]-­¸„Ëtn'ˆë¼"`”‘|I=ºù-¯ø¯íî¶·éæûLx‹Åµ‚\ÇkÍÔ6Q3ççši8Ðc»;(ühÕ|Qa¢jše–«s7ZÌÏoeg7,o+(Ç¢FíÏ÷k毉ú׊þ.cÄÖ_nuñ¦q£Cmm}ý‰’’ZÈǪ̀>Î0¸.e̊ʸ‰< §ëzÏíàûŸYøöãĶ#Ö%Õ¤¸†ôèVVŸg¼Ž×ìå‡ÙTh²|çsî98$=ä›ß_Ê/ïÕ§Ù¦ºImýoøi§{®çѾ/ñ¦‘à MOÇ•–“§BÊsw2Å`ª 1ÀÉ ~5‰~"hžºø§R¶±°ÜjDÌJªÛ[ìó¥-Ð*y±ç'ø¾µåµg€|Añ³Æð¯‡ôWA³·ºÕuCªÍ-¥Œò4MmoÏ2æE3K6ͼyhIgŒ¾¶ñíçíkí/Äø³Ã¾ñ.‹-Í­¼Å侉ìâ‚Xd 4þA–29nJô8›»7ë÷$ÿUo; ’³KúMµúj}G‹,jñÊÃ Ž„R×Ë^.Ö>jqëëâýRÎå/¦–ÿPMJÂÞÌyèb­.TÚ1 J¤–Œ2¨Å—æÍZ\Ö·Ÿà“ý~û­È½•ß—ãý~Ocè*(¢‘AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_Ÿ cñ·€Z{? G}ªxböé¯E¼1‚F;˜<ãw#ú'_-~ÌÃ0EŸóÒ€1eøqâßÚ#^Ðåøƒ¥Ï¢x[Ã2Iwo Ñh½ºxZ!PHUD’@;äš+éÍpcGLzŠ(£¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯“ÿfýZ;hâ¾°¯tËïü*kK¦Ðµ]SJԓδ¸Ó kŽ3Ìl‰– ·=hìw]„èÉó/nôWŒü&-ø©ºÿÅZN¡ h¼x¾UÍÛ‘€3ó*Œä–¦z(éz(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ùãÏíQ¡þÇ_ðO«øÒ¯.-í~ͤسìmBùËyQƒÎØŽB#‘’1_\WÌV~øñKözÒ,¾4x.ßűX[I-´zŸ„fÕ"·r/{wU$q‘@û;|jÑh¯Ù§@ñ¯ÃÙüý'ÄÑÜÅ’7ÂÙÃÄøèèᑇb¦Šàî—àÿ‡ß ‘ðÃ1øcL¾Çaá¹tË}ìFæØ!EÜp2q“Š(ØkÍâ{ÿC^µÿ€ö_ü^•^@â{ÿC^µÿ€ö_üGüOèkÖ¿ðËÿ‘ª{‚V*pBž ð¯†~!ñ–›eáÑÛ[Åâ«$ŠmrwÔϳÍ4¨‰ eY dv¹Ú•ívúÁÿ!Úç·Ä÷þ†½kÿì¿ùøžÿÐ×­à=—ÿ#W†x‡ã׊õ_‡ZôðÛh+ªhjZ<Áç)RH|á>C î6´*ÊC67|i¬ø†ËâÄ­ªA7öxÑ-cеÛAæ]]È!‰.¶°ù9W ¸\€}5f“ëoÇ@Jéµýmþg³Ä÷þ†½kÿì¿ùøžÿÐ×­à=—ÿ#W ðSã<ÿü=¬êšÚØ[Ûhïöw[a#dŒ<“àŽJ&ÝÀ˜äáxO|lñ œÒZê¦a}âÉío´çÔ¶Í ŠÜÊctD†L´Q©ƒj–BZFÎÑ’ ]¨­Ý¿¾ñ=ßõmþãÝâ{ÿC^µÿ€ö_üGüOèkÖ¿ðËÿ‘«Ç->)ø£@ðlïau¤ÞO§ÛëZ¥Ü×vó?ÚEµû Š!çf%*p7ØŒSüyñÄ>vS].ïRÒõ)íÒHöÖóìÃr›â¶ì3m!‹[«ÿ[Ûóµ·õÜöøžÿÐ×­à=—ÿ#Qÿßúõ¯ü²ÿäjÀøuâ}KY¸ñ ‡‹žÊ[½ üZ™ìàhc•ZÞØîäçûÇ;sÆqX?u{mWYÓïõk Þ40鯩^Iw4î¬é,ãy/;P‡òËmPØ¡kýwKïüOèkÖ¿ðËÿ‘¨ÿ‰ïý z×þÙò5pßämcâ–·yá{í^ãD²óì¯~Û{$ÑÍæ«.O”±.ô%B«o\Ûº±ããV¿'†¬®¼Bšcµêhš¸³óí¼”»¸dhœ‰I“nÀsò«d‚¸ë-¥fü¿¤Ùì_ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕä’ü\ñ5ç†.`Õe°ŽòöÃI½‚ãN€ÄÖ©{3ÄÈ®áva\€2à•ÂóÉ|>øùq¥.­w¡êƒYŠ 7í/o4· LRÝ–B×O$Ÿ#NQ‚`„R9«;µÛúþžÄÝ;yŸDÄ÷þ†½kÿì¿ùøžÿÐ×­à=—ÿ#W•é^7ñ5‡‰uûOI›T½×e€^Me3Z@‘iÖóŽÛÏܹ$ÿËLg{u!L>øÏâ߈ÚEÞŒ|;§[ëwkesYÍpöìlá‘™f@ã†@¸^ ç‚¥o÷'òvÿ1½7=kþ'¿ô5ë_øeÿÈÔÄ÷þ†½kÿì¿ù¼ŠOÚ \Ô"ÑgÓì­ÎæÚÅuAäMt„*o<6Êqå÷Á"𖡬k£MX÷Ü-œDáE,©û×g!‰Ø§å Žy9ãœÿ…׫jÚ} ÐSKŽâúËD$š8ÞúIÉPêX(E*2''Ñ­]—’ûöü…Òý5ü-þg¤Ä÷þ†½kÿì¿ùøžÿÐ×­à=—ÿ#WŒxÏ㈵Ÿk6z}Ö—aya¥ê“Ý^Ço6n>ÍpöÃìê%8ݹ™ö’0’ñ—ã‰tè|C„ü‹}:(nímïZ×dÐÜ[Û‰\«‹‚_£€LH üØù…ªºó%§ç í­¼íóþµ=§þ'¿ô5ë_øeÿÈÔÄ÷þ†½kÿì¿ù¼þˆ~-ÿ…‘ý‹¤Xé÷öúRÙiΰ„¢vmÎ…î3URB혱¹½*â{ÿC^µÿ€ö_üGüOèkÖ¿ðËÿ‘«Æ7óÛxçÂ1[M4q\ÝÜ,È®Bʬ¬Ã@<÷×M@â{ÿC^µÿ€ö_üGüOèkÖ¿ðËÿ‘«Á⮳à=YÔg}Fd[}fx¡¼¾kˆ5‡Pò¢ò£Éû8‰H 2»ƒ<¯O¢xËÇOñJÞÛÅÆÂÆ4«ëƒoö\ Ñ}©s ‰ó)Qó¿ Ç8Ù.I$ßfþëßò-Û_/ËüÏTÿ‰ïý z×þÙò5ñ=ÿ¡¯ZÿÀ{/þF¯75mRÂÓû,\ÞÙh³£L’Ñ洛_ 0$(E*2''ÒΛñ'ÄPøîÒÏ[m]>]e´7X-eŽc"Ø›“0v•€]ÊWfÒpAÝ‘WÊùœ{~–ÿ5÷“t•ÿ®¯ôgÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_ü^mâÿˆ:qã{˜®­'Ót}ÆâÞÒh_ $­:ï.¯À `–@Ák÷?5OxÆZúéך‡…nE¨šž {‚ÐÃ*³F]ÙBùà0 ÙÚHë7ÿ?Ц¬ÿ®×;¯øžÿÐ×­à=—ÿ#Qÿßúõ¯ü²ÿäjò¯ˆ/ñƒ5‹‹µÔôK©tm ûP¸l§ŽÞåbxX(‹Ï;$ •ó >û¼"ñŸí¯hšæ¢Ú ”úDbæÞÝî-Ìena·]gf‘s¸ÝGìN9kÞI¯7÷; èíýmsÖ¿â{ÿC^µÿ€ö_üGüOèkÖ¿ðËÿ‘«Ìæø¹â+]nmò} =NN[C¨šÛËKîø·nÞD…sæ„'© Pøkã_Šüe«icú=”ö«§é—šˆ ~Ö»œ£´êc l”±%x4-Ç`þ¾íRÿ‰ïý z×þÙò5ñ=ÿ¡¯ZÿÀ{/þF¯;Õ|Wâ[ï‰Ö0:ÊMþækÂÏ#´r@¡ÖH¥Ú­ûÁƒÎ샸æ¬~*ø‡Hðž›gâ²Ô.– î byí™–êvŒ¤Î$f+%¸ ¸‚„pRwWôü[_£Vvþº™í?ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕÄ|?ø•â-[O»ƒÄÚ)¹×,.ã†òÖÙ"¶[5x–@ÛšæE”r~e`HÆQM`x7Çþ+é6“jZDºŽ³«jGwuc+¤ÛK?ÈQfÉòð§r…Qƒ¸€YÉòêÁ.mVÿ‰ïý z×þÙò5ñ=ÿ¡¯ZÿÀ{/þF¯?oš¨øcgâ›­ ìzrÚÚjrÉ2H¯o C1„+o Šå†åù‚Œ‘ŒH¾>xŠâÁõ?³èÐÚ@t÷k6†Gžxïæ+ ‰¡HÚ2À«neqò ¦”Ÿ%Ûè slzßüOèkÖ¿ðËÿ‘¨ÿ‰ïý z×þÙò5y¸øÙ«j–ŸØ0ébæöËEdÆ}$ªù!B)Qy9>›~6ñƧ¦^èÚ.‡u¥Ç«_™#¹»žÒW‚&ŽÜÌÛ!Y‰nß¼ùFrXà;ÁI¾Žßwü8£ï4»oüOèkÖ¿ðËÿ‘¨ÿ‰ïý z×þÙò5x߇¾4ëº_‚´™á{›}7MÑí.’Ynïä½ ž`›x ´œá•‹Ù+jþ—ñoÅåmn5WðÜ–æßH½š(l§Ghïç0ùjæbG´¶ò¤6@Ú½iÛÞqìì+Ù'Üõ_øžÿÐ×­à=—ÿ#Qÿßúõ¯ü²ÿäjñ]sãö·%úùÖ*îî ´Ù‚=¤Ô#€‡òî\¸!Áù„`à†Beð»â~«¬ÝKßLùô?U‰ì­äbM*ùLܹ ùÆÜîè1J>òæ_×õg÷~æÿ×õtwñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕàú¯Å_xGÁ^Öu½F;ù—^Õ¡òÕd‚7HÖñg÷˜ŠÈ¬€ª9a¸úÂ;ÍNãPñl^,¿‡Pº´ÖD!á‰á…WìvͶ8ÞG(2Ä‘¸‚Kô-~ëþ_æ9._ë×üާþ'¿ô5ë_øeÿÈÔÄ÷þ†½kÿì¿ù­Q@Š¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠ«ÿßúõ¯ü²ÿäj?â{ÿC^µÿ€ö_üV¨  ¿ñ=ÿ¡¯ZÿÀ{/þF£þ'¿ô5ë_øeÿÈÕjŠÒðö—öÄ¿ÛÞ¡©EäœEdesc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀ_"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔ*|‡Â‡Çz¯ƒ|e©ø-lì¾j6v·7I¤Ã”0°ޯÉbc¹I^F‘ã,â\ëuß Þhß¶f•¬iú£â­NþâÎ×Q—RðÍÆÍ %´e’ëOÖ0!H¾`ß’ÎïŒƶŒåîlö¿õºû]{mÆ-½Ò¿ÝoϧWÚúÙñöбðWÃËßiRñÛjI£Gk`ÉæÏz×Kh ʪ‘3…băé[> ø‡©x¢9ã×4B¼´Xü讂4ewb)”—oBTà:×ÉÐþÍž“áæ¿ [ü8º‹V³ø‘iw8:‹ÆžÚÉ1IÛ6MYË*¶Ö>Z3Ú vúçÁý7ÁúGÆ-+OðV½>‡¨Ë¦ÿcéÚE´™î¼„ %¬Š6ÂR}ŽÓ ,eK±àÖNV§ÏøÛ±›‘výã…ôW׿×ä¯ó¹ôÇö¥Çüõ»®'â—í+ |ñW„ôoêW–×þ4¾þÏÓP.àòqËœü«¹ã\ó˯Ôyçìuá_øFóÅÿ´,Z¶£ãæ’¶kþYk VÐ!éi ¼ ä9ó®3ãoìóã/ÚwÆþ?¿³û&e¬^Ð_U³¹1˜$ŽéïmY$AûŠ ¸[!åxj•¡%ÕníÛ­¼ï§“ô&>ú}ÊýûúZïÍ/3ê{Ýz{+Ify.ØD…ð'8•cü3ø¢>(|8Ð|M¤ÿhÛZkú|Œ1O·Ì%]U°HÈ Á"¾[ñ÷?<Ò%:fákï }’7–Ýe‚ÂÖY  1Vbc` Èûpj­ïò½5Kïi}Úþ ºæòoîWûÏ´†«; ‰®ãKý©qÿ=nëãÛoËám'ÄÇÂo x¿Kð·‹¼?¨Xi1é71\m‚T7×ús ™#?&T ,cvƒ“=Ï„õ¯Œž7šóÞ;Ò´ß|GÑn#Š{iìnäÓÖ(åœÃÇØÜ–YCle`®+™¥æ—ßɯ§¼ÿðòMò«¾ÏðæÓð_ßõ×ö´øÏu­sÉñgʼn<$#ÔþÕ’º¹¸Êù%f‹g]Û²¹éŒµóÆïøAøó©xwÄþñ¹¢YxÕt/CÒn®íí&7WÀ~î܆VÎ#•Âí;ð듛ڿÉð¯®l¬F´Þ4ÿ…Oo¥›ðíºMAec$Bçpyù·ç$6{Ô_i%¦¿‚Ÿãx¯½w-«^=}ß•Ü/ò´ž¾O±õˆÕg=&º?UœfºÉ÷¯˜ÿexaø9á¯k:^›âéíš $ðþ›à;Í !˜ošÚÚâWLÊSÍhÜÝ+s“aü)¦[~Ö$½øïàïx‚îóPÓåð~«ý‘>©e§@±B¥c’5d±d¹Y$vqA Y‡KjÒQþ¾]ü»¢ºoúùÿ[ýçÒŸÚ³çuÖ~´¿Ú—óÖî¾<ð¿ÃíB/h‰má[ü\ƒÆow¬ø‘´ùÒÞãKû[»îÔò¥·{3ilʰUØ OøÑã[»í_ÀÞ%¶ðÏŽá]C¨ÄšT³]…•åªÝEAÞXIc*êUÀÄ«r¦ßõ¦¾—vù1ËFÿ®ú~sG©|@ø³ÿ úm/ãÔîOˆ5htˆŒ%rò+°wÜGÊ<³œdò8®‹ûRãþzÝ×É×~ñÏ>G?…´sÃ>!¾ø•q©Ù WOkƒ¦ÂÂo.yãFÛ°¿0b€‘Ëc×?dË¡ü$‹MÕ4?èzÞŸs$zÈÕ Í-ýé;¦º[¦n’V;„‰òà…Âmت›æ‹æÑéøÆ.ß&Ú/;9û²²Û_ÂRWù¤­ý_Õµ.?ç­ÝÚ—óÖî«ÿàEøLEíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëwGö¥Çüõ»ªÿøGþPíKùëw\ßÄoÚ7Âkkj×6BòC´I—ܰ"(bV‘Ȫq[Ÿø^ñ´Ùx#ö•ÒüUñ&ê}/òhi§[j’¦môû…žY%?"/13`(Œä@xýµ¼GøëÿÝcÿ‘+cÀµ†>$x€i>ÕõHõGF–;MCMºÓ§™WïÒæ(Ëœ â¹!ûIü$ ñ£Â>ßñ8¶ÿâëŽñω<7ñ¯âG‚mþx’ê^·k¨Íw¦H·éÖñJ­9’dùStaã ĸã®>©Ñå…‰ÿPü$)ÿ¢mãoüÑÿù>±õ S×µy}ð³Ç xÊ®-õ]2ÚV ñjJ[ çŽ+Þè  РÖ|3«¡|,ñ•¿žÛ¥q}¤³Ê{vÔ 62q“ÆN*ìú׉®ax®~øÎHäRŽy£²º‘‚7ø Ž1^ËE|ô¾¹UØ¿ ‡ªhWËueð·Ç/vŠQn.5].âT¨V“Qb½HãqÒ½êŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøHýà  eñƒIÓüK¤hCÅ2Iäêö=ý¥Í­Ü²¨?i†XŒG÷ J¥±æ3)ZЍIÇ{X(Óž"”j«ÅÉ_Òúþë·ì1ÿJÓ?h KNð_Ç»K_ üC¹+I .t8Fr-%~bŸj;Y>l+ÚeVeúê¿"à™?³ß~#ü4øƒð—Ç~ ñƉáÞKâí3í­µá ˜úGlñ|ÿhÚÙUœÂÁwï²^¿]«,/¶öiW·7–Ìîϳ^.RÊy½ƒ³Jvæ‹ê®ºjôµÛwaEWAã…Q@Q@Q@ãÿ¶·íëðŸþ Ûð²ÃÆ¿¶/ŠÿáðΩªÇ¢ZÞÿf^jmäÍ2EåÙÃ,ƒ1ÛNÛŠ…0NH ý—?j?~Ú?t/‰Ÿ³F»ÿ /‚|KöìÝKìWiò.%¶—÷71Ç*íš WæA¹èWÁ_ðYÏø/¯€?à^Ð|Gám_ÇÞ;ñU£êVš-âXÃmh®cÜ\º9@ò+ªÉòß;p3ó¿à迉_d}[âÇÇߨ¿Ç>³ƒÄú/‡´kOx†ëNÄ)¨Yê×Osmq>ŽÄJ…J¢¸?lBY6 ì-àðKÛŸþQû øã_ü"ßð…ÿÂiöÿø“ihý캅͗ü|y1oÝö]ÿê×ö󌟠Š( Š( Š+åï†ðROøX¿¶eÏÂ?øC>Çö}[RÒÿµ¿µüÍßcYÛ‘ä oû>6ïùwu8äê(¢€ (¯?ý©~:ÿÃ4ü×|mý—ýµý‹öô/´ý›Îón"‡ýfÇÛ7wÝ9ÛŽ3èW~Äÿµü6'½CÄߨðŽý‡V“Kû7Û¾Ù¿d0Ë¿—3çãnÝÎyÀö(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯«êÖÚ•u}¬Íµ”O<óHp‘F ³3ÀOá_ÌçíûexŸÄ¿·ÕÏü!²Ù@%aohý.Ù1*€ÈY­Ý C6èOß?ðLÿ ¼^)Ó|èLHY[)Ìdvrúb¾ ÿ‚…j7¯ü¿öŽŸÁ¯m‰­u½.==…¿Ú®WÉÒ¬É>MœÑêM !w­ºÝÆÃ"[cÃÔÉs&hTTªFo£OîgEû5|+†ËÄxÃá¾·¯xÆšy+‹<9yö[Ë!,ŒéîáåθbÚö8ăýLs“æŸÕ?Ù—þ %ã¯ZéÚGíûáû_ìëËØ4»‰´dÐÚYD[´wi´{‡  wÛ”2,?™ß³<1hºv“w¦Ok³ÿ@KÛ •-c€$·ŽD•bŒ»guºKe3ç÷ºeËg?¡¿üoñïàĆ×ðÇiÿ o‡o4µ<”¶žHbÌf4º9Gц3öUûÆŒ¾è¯3ýŒ¾3·í û(|<ñã}¯è—éÞÏ)Væ2;™eR=V½2€?œ‘ÿËý¸¼Kÿ¾ñïÀÏÙßźŒ,"ø‹â øoÂú·¦ÛiðC ×Ð[IswªÝ˜­4¸b%ß ¶!‹n ö1ÿÁrlø%7üFøMÿv×|ã¯ë’Ù½äúN™mm žŸw!/ôûˆ-à‘Ö'Y%ÂÂå%\|]ð×ãLjfø:â/¾x+\ø‡©xcâ׎næðþ›¨ßYyšªÞ›hÿŽXíæUOâ1Þ»/Û?Å~(ÿƒšÿà³^?³ÃÏè>Ò¬4ï ^\êöb9´]6 ™î.¯5UË´jÛ^¥Ú`ñyrÝ$FïËßÛYýо-ø9ìà–Ÿ?j üikëvÓ,¯."ºÓ­ˆ•L‹±n.nä}›‚(Áö’Ĭ÷‡ü¥áÿÚ_Yý‹þø³ö‹×<¤ü=»´ðý§‰üamugãÆ±Õe»¹†Q “f°`P/ròÛýiè?àÞ/€_·Þ½û+~Ïþ(øñ¿á~‹û0'ˆ$¸¹ð…í„/¬É¥Å®Ü R)Ò$2gKÒ‡í`*aãÆCþ µû'þÑ?¿à×O‚ÇÅ&ø­à zËÄ^(µ–9/5x4åT·®fG–+{Û79eÙ#?Ýb7?à×ø-7Ëoƒ?cM_Ã<·ø› ºòE© KS¢²ùÚŽ°L’:0‹|{D-óÎ *ùÉÿMø;ã/ƒ¿à©šˆý±¼[ x°jšTºÿ²¡Xÿ±¼/&¯©ÿgØ\í¶ƒuÄ[fÞÇÎ'rægí÷ÿü—öÿ‚ÿÁ$`KïþÔß´ÃýÄÞ#ø¡h~¼ðƧ\}†ÌéÚä×ñOƽ’1•¶ÈÃÈp `ÿ0Áêßò”ßÿÙ*Ó¿ôï¬Wßÿðz·ü¢ËÀ?öUtïý4k·ð/ã¯íûtÿÁ¼ÿ~3~Êÿ.-ÿh(¿¶u+Ð<5£KŒmíµkëaf ’ÌÅë¼^SD¨“käɽ?)ÿâ+ïÛ3þ‡ü Ÿð‘éÿð±?á ó¿á,ÿ„oOþÓû6Ï/û7ìeû.|ß›Ìò¼Ïá÷¯Ñø'×ü#Ã?ðJø5£áŽüOö]GÅšŸü$:w„´9 «j^ÔÊ–äAýä¬1…AÞèáö_ÇÇ ûdÿfë?e~Ö|iöXþÏÿ ›öíÞ^6íó9ÎÏ+wîúü´ýjÿÁ"¼#ûEèÿ²F—­ÁO¼wqâ߉ž)Û©I¦OÓ£ð½»/îìȲ·‹ÌŸt¬û‚±Ø¼!g÷?÷þ/Ó>êóü‹K—ÅH"Ú,Õ™¯!, ˆÊÝz¨àô? üÿ‚êZþÕðGÝkãçÁK]?ˆÞ û›â_ß %·Ó5 níà”IC©3Ë oéò’Z7Qˆ¿µ_Å/ø(¯üľ'¼Ò´Û}KHñ§öv¡iáÛyãK6+He%£’Yˆšå°qµÇž)fcŠX7ñµÍåmzü§£Â9…|†§Á/«B§²nþ÷=¢þÖ’ÔÔøÁûPü}ø/¢Ë®j?þkâÚTY´]îÂæíw0_õ&‘€$gkO@Hú¯öCý°"øûû.\ø÷Æöðé³èi‹Y[pLJÖñ‰]ã’‘°IÁ$dã5ùŸamàCöEÔ†ð÷Ä—~=ÒçY5/¼ò 7N®•Sj,› °xáØÑç.Ì€Ø?ðJ_ÂÊý¾"xpÊ þßÕµ-7Ì?òÏÎÓ­cÝønÍvŸ0rŸÿl?ÚöÍø»­Éû>ÝøkDÑ4U-a¨[FÖË1E$Þ[LÒ8VåJ•Ê1^_ûkZˆÿ૚‹¬—MÕ¯õ½ræöÍ[pµí¯ZHÁî‹.}ªÿì=ñËTÿ‚}|\ñ…þ0x3Ä·wºêÃÚiöÂK–žGå«$ÄÏó©?Â@9ª±­¨ëßðUkKïX¶—«^ëzä÷¶lrÖ“µµëI>ªÅ—ð iÿ‚¢~Ùÿÿg_ÚF‰ðoÄŸØúeׇᾖìû[Ó5ÍÊÝ4NÃå‰Ç99çi?Û'öŽýš¼Uáwâ-׆,ôŸÄ÷¶š½ªM… A<Œ‚Q Ç’²“Áì9ø-‡üNÿb¥¿þ–^W ÁtÆ?áVãþ¢ßûe@>>þÙ?´O„þxw⭵LJ¼5à¯Ý´Ý"x®çDdy"7 ,[˜‘³G^?…r{‡ÅÚ÷_×ÿà™’üXøu4zˆæ¶µ!ã…'Ky†¡¬ûRUe*q( 0î3^=û~ Á+¾ cþ úhžùÁùÿ¡†€=öAý©|yñGöø¡ãok¿nñ?‡µ¿³¯~ÅoÙü:)¢ýÚF#m²;7̧9ÁÈâ¼{öUý­ÿioÚcNñf™ðëZÑ5ý:Þ³¨ê6VÐ}G™û˜V(B¼“`Ȭ D~îI®ƒöÿ”W|kÿ¸ïþš £þX9ø¥ÿpŸý½ Óþ yûvø·ö‘ñ^»áOÛjz……ö¥üvÉníȑȒ,`!æXÈ!Gñg%Ó-5÷F°: _ÜIwu ݛܟø–$–ÑAi3[mÂî<¢Œýʨu:ßXÓç´Õ †êÒê6†hf@ñÌŒ0ÊÊxe Aàƒ@š¿³?ŒhÿÚwÃqkÿ±·ÁŸŸ<)qtÿx³ÅãÅ÷ט8-tg«âIøîJñ¿Šßðo×ÇoøÛÇ>8ø‰ã¯|MñwŽua®j/t{9eH"†8².í¯,¥ °.ÙC[Ì7ÞŒ_qxûþáð¡ücªø¯ö^—Äÿ¼a­/¯þë:%ñ~k6 ÒW·Ïå†,ر¯Ï?Ú_ÄúÏÂß|_ñŧÅøïâŸÁ_ˆ±èÚ»¯kB í3J³±žACiåÀVkëKˆçwšh\«îÚ¤rZ&…®þϾ._´Už¡à¿Â>Á*kfâÒVŒqåÃuu>nmÏ@°ê×ðžŸcpþ‰~Á©.¹£ËcµcT0ªD\G•F™ç ¤g‚Ï5ÑÛ~Ø´‹tˆ!Ô?díRÃQƒ/soñ'@¹Ó.P…!£g‘^Hœ6T˜ e•rxî¥û3|u»ñ4Z¿ì[ðgIýœos@“E|ÝñóáWÄ¿|ZÕ¯~øÊm+H›Éû=ªê×P± jß$jTeƒ:ç=Mqßð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEð£¾2ÿÑC¸ÿÁõ÷ÿ@aQ_ÿÂŽøËÿEãÿ×ßüEv?þ|KðßÅ­&÷⌦Õtˆ|ï´Z¶­u8—0È«òH¡N©ç¦3ÔPÒ4W›~Ô~ñ7‹ügmð¯Y}PMA%’u»–ؼB9AMÑÇ,Èpxù}…x7ü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿ^óû.øWÄÞðå·ÅMeõÍAõ–9Úî[’‘â7J 2¹Àãæ÷4é4WÍß>|Kñ'Å­Z÷áÿŒ¦Ò´‰¼Ÿ³Ú®­u‹Æ­òF¥FX1ã®sÔ×ÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄVÇÃσŸ4¿èw>#ñÔ÷š}¾¡o-ÔZ¼OÈ¥Ók.ÖÊ‚0x9æ€>ª¢¸ÿš³âO„Úµ—ÃýE´­^o'ì÷K;ÀbÄѳ|ñ‚Ã*q×8èkæßøQßè¡Üàúûÿˆ °¨¯áG|eÿ¢‡qÿƒëïþ"øQßè¡Üàúûÿˆ °¨¯áG|eÿ¢‡qÿƒëïþ"øQßè¡Üàúûÿˆ °¨¯áG|eÿ¢‡qÿƒëïþ"øQßè¡Üàúûÿˆ °¨¯áG|eÿ¢‡qÿƒëïþ"øQßè¡Üàúûÿˆ °¨¯•~|ø±¥øÿC¹ñާ¼Óíõ yn :Õä‚x–E.›Yv¶TƒÁÏ5ï_4=gÄŸ µk/‡ú‹iZ¼ÞOÙî–w€Å‰£fùã†T0ã®qÐÐaE|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñõWÄ;ÝSÀí·‡. ž¡q§ÜEk8‘£0JѰGÜ¿2áˆ9Œq@WÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿGü(ôPî?ð}}ÿÄPØTWÇ¿ð£¾2ÿÑC¸ÿÁõ÷ÿ]À?…_ü7ñkI½øã)µ]";í­«]N%Ì2*ü’(S†*yéŒõôæßµ…|MâÿYÛ|+Ö_CÔPIdnå¶/ŽPSt@±Ë2>_a^ ÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöñïü(ôPî?ð}}ÿÄQÿ ;ã/ý;ü_ñöówÀ?…_ü7ñkI½øã)µ]";í­«]N%Ì2*ü’(S†*yéŒõéµ…|MâÿYÛ|+Ö_CÔPIdnå¶/ŽPSt@±Ë2>_a@“E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñÂŽøËÿEãÿ×ßüE}…E|{ÿ ;ã/ý;ü_ñé?²ïÃøCÇ÷—?)‚Æ}.ÊûGïtÖ¼T°¸œKA|õ&Hvª‰ ÃÊÕÇý˜÷x SÐ×\ j>²ð¯ö?õgYÇŸ·ÌçwŸ÷21·ïðÛÒM/Eÿö·ü;‰-Ößðmý#n?ú¿£\Üø6ú $±¾²´¸Kû{›M‚ædŽ6 Ño`áÏ–Áv1ÆX °µ£|}ð¦¿ã1 iZ”²jMs=š©²!iáÝæÂ&d™#¡³žœÖ‰þÂG®êw§U0Hèß!¶ÝåÿgݵÇ]ã>fí½¶ã?7J—Lø'ýý‰Oö?‰/¼Aÿøó~Óö¿Üýÿ—oÛ>ÿ9Ù÷Fî¾_ðßðImÛOëGúÙÚ÷ÄѾ*ø{Ëj²&¹g{t×LM¹‡ îóºäcoz¥¨üjÒ¼7©j°xžæ=Öz’éÖÖö6÷7—s9µŽà©‚8‹ ìß»¡%ÈüIøa¬x§Ç:ˆ<®Øè÷ڽݶ۽1¯£n<¬ð³ÄT$w9ÏçÌx“öjÔüMm~ú®µ ^ßjz’js=·!‰$[8m³—v²Âß¹.eÏÎTç­N¶þ»ÿúùÀÿ3£ð÷ÇÝ+Ä¿†ôè/ØK¦Zê6×_b¹Ù(›Î;_1ˆ*ħs°Ë9LB+Øüÿ ©?ë©þK^+àƒz·¼U¥êþ&mJ8´km#Sö5Æ¡ä4Ì’¤Þh1±iß!„™ çšö¯È*Oúê’Õéùþz~Wëåùkø˜¾./Y¹`3´ø¯ ð'í'¯jZG„µŸˆÓl<9ã {û-MîÂYòVæ'…6‡a´2³H¨¯sñjyšÕÊç€øè¯ ðÇ쵨ÅáMÃüVš¿†|:¨mì,ôϰµÌ‘çËk‰LÒ3„'pUØ *“œb§[ýß­ÿK£ßÏþÖhÿ´_ƒµÛ]F{ YÄeŒšœ²Kg<+-ªd=ÄãhŒñoŽ~ašö²ð–óu{¨ö24«´Fä™Éˆl…‹ LØCÙ«Óö_Ôn<-&‘â_Áumeᛟ i/ÉkX'XÔË>fo:@°Â>_-~SÆ[Ïüÿ„½¼bN®mÿá-ЭôCþ¿ì¾WŸûß¾7çÏû¿.6õ9áõòÿ‡ÿ÷‹úü¿àýÆî¥ñ“Ãú?Œ¢Ðuk›ËkùçKXÞ]>á-d™ÓzD·F?$»Š$ñ׊ȹý¢]ümv (Ý\߈ÿeküT>!»ÖôÙbÕ¦±¹ÑüýBÜ@c?eŠé¦ýÔ$ÆN0~s’Ã9é¼#ðCþ_ZjcTóþÊÚËy_fÙ¿ûBò;ž»Î<¿/oO›9ùqŠ›¾Túëù+~7A-ôÛOÖÿ¡­ã‰vÚ/ÁÝOÅþòµKKM"]ZÛQ.‘a2¯Í‚@`8ã=)Ú—×NµðÄ×OcjšüÂ7¸*>Í,äFU,<¢~r‹´1Îp§6/ƒž_ìð|uçA:'Û¾Ïë‹Íò·{çnïl÷¬¨þ ø›SxÃÅZEä^ŸÏµÚ @Xý’{oŸ}̿׆èÉŒ|Ü9håËåoÆÿ¡:´¯Ùß×K~¢ø“ö¦ðî™á#«è ©êP­ÝŒ:mä"Xîg¬Ñ3@|ÔÛ½@ÁÊ….¹õ?jqkWV–"a Ô~jy°¼2m(HÝ€Ê}˜;ŠðýöSÔ4jÖpx’ÊÑ®ÞÆk(,4ÙaӬ浹o²Is Ü쨬#h×jð3Í{‡€"º†êÁ5É ¹¼Xñ<°ÂaŽGØrU 1PO@Y±êjº[ù¿äýuÉ«È5?ŒÐx_Æž(Ó|cvVºšä"RÆî×&;p6˜Þ<`èxÎ+×ümÿ ¨ÿë¨þM^-ñ·àµyµ)tѧJc½Há NÉÞ7–Ñþaµ]¡ˆîçŽMKM迯?“ü VëýKB=+ãÜV‰ý¡ñ`éÞŽ#OÔ®á2M,¶/w$‘ªIû »w"¨`IÈ}Á@«ÚþÕ~ŸÅš••ÀÔ Ó´í)5V¿}6ñSfn<Àê`ZªÛd39b«’¼èøãà—ü&^)¾ÔƧö_¶&ž_Ù·ìûóÝõÞ3æoÙÓåÆ~n•Ä‚wž9ñ·qa­Ãc§ø—A:¥nö>t…¸òä†O1B07-ÊÀŽ:·º]_Ý­¿{?/Òÿ©ÑëŸô_K{¡qpóiöÐ]Í µœ×2ˆ§‘㉖8‘™÷¾_ð?Ìèü=ñ÷Jñ/Åá½: öé–ºµ×Ø®vJ&óŽ×ÌAb ±)Üì2ÎSŠö?È*Oúê’׊øàÞ­àoiz…¿‰›RŽ-ÛHÔÅý£Mq¨y 3$©7š lZwÈa&@9潫Á_ò “þºŸäµz~žŸ€•úù~Zþ'=ñ k«iµ)4Hc¹¼ŽÐE#ìIdüªÌÚ ÀÎ+̼?ñù<[cà&ðõ‚Éu㥹¸‰å#û2(b&rÄ/ÌRc8ÀÉ~دVñOü‡§ÿ€ÿè"¼·áÏÀ>üFñ½¥-äZ¶õÓìÚ©¤$²´÷¸îLÛÏœT;ëýjº|úù"Þß×^¿.ž£­hï ØxsGºñV£Ï©iÐê3=…­ÕÕ­¬2p³K(„y0–È0;OLn?Åß ÇªÇe.«]Í©#ee-v"y\ùæCû§pä€|¾ØÁm Óÿ²u=æhtK]íµ}íé'ÙÕ•&…<ôò˜‡ ©.§ŒŽ9Øøƒû&YøïÅzî°šÅÅÞ§c v^\9]2ö6ˆ‹ØÆá—"ÚÙp6ü±°Ý†á·¯ßÿï_‹]íýmþ‚óGaâ_‹VuoxH¦«gc¦Üj6ü´Kt"Fld®@%1œtädUsâ–•á? éš§‹$–ßûWËK{x –êyåtßåÅJÏ!1ùW€¤œj¾±ð¢Úóà…Ï‚4›ƒgk.ŠÚ,3˜üà < år79ÆF}k–¸ø%âëÉ4 «ÿhRê^I¥Èž’8†ax$YÓí„È¥ Hâ›ÑÉ-´·ãÐJîÍö~–ýNƒPý¡|#§èf¥ý©-Ͷ°’Ih¶–WSȱq+41FÒ Œðå”l<6Ùx+]´ñ<N¥¡L.,u†æÞPÆøe`dy¯ñßÁü<Óô»Ï†ë¿ˆå·Ô­¯ï-¬mþÙp._0Ïs‡÷Ä”e2mPCà×±üðÍÏ‚¼á Xòþפéövsùm¹7Ç#m=ÆTóDuM½ôýà}û èÕ¿­¿àž“âŸùOÿÿÐ…x_ÆOŽíð‡Æ~³¼Ó>Õ¤ê«4Ú•ð›iÒáI-â”ÇÌî£Ür6¨'œWºx§þ@SÿÀô!^Oâÿ…Ö¾6ñ}ž¡®:Me•}¤ÜY<[–ê;£b[< #9ßÔc”îškúÓüÀıý£4‹[+ÇñrÜZÏ«a ½¬÷óͬ¥s³ª´³µwžFuî~9øJÎÒK‹rÑmãK9 ¸b….Ø­³+†W àŒƒœ`טéß±(Ñ4Ý+ìšíŽ­¨éx6¹¤›èn¡¸•eÃÆ'FóPªþð8Ý–ÊóÆÿˆ¿d½/Å÷º#øŽñÛMÐÛGº³µ´öׇËxâ•c D^Pžà¢ŒàÈ#o.ú/—å¯ÍýɾÀ÷;}ú|’ùéÜô­Åv&·½“Ãó­Êé÷2ÙÎB²…š3‡L‘ÎŒŒ‚;òÏ~Òzö¥¤xKYøá­6ÃÞ1‘ ·¿²ÔÞáì%%nbxShvC+0€zŠïþ|;ÿ…cðêÇC’úMNxs{"l{Éåv’YYrpYÝŽ2qœf¸ ~ËZŒ^Ð|7ñÅi«øgê†ÞÂÏLû \É|¶¸”Í#8Bw]€²©9Æ)=šíÿþG]ôß×Ëþ Öhÿ´_ƒµÛ]F{ YÄeŒšœ²Kg<+-ªd=ÄãhŒñoŽ~ašö²ð–óu{¨ö24«´Fä™Éˆl…‹ LØCÙ«Óö_Ôn<-&‘â_Áumeᛟ i/ÉkX'XÔË>fo:@°Â>_-~SÆ[Ïüÿ„½¼bN®mÿá-ЭôCþ¿ì¾WŸûß¾7çÏû¿.6õ9áõòÿ‡ÿ÷‡õùÁûÝKã'‡ôE ê×7–×óΖ±¼º}ÂZÉ3¦ô‰nŒ~Iv>I㯑sûDxÖþ3¾n.nïà·‹O´º¼iVÒsŸ*C»r|»øÚìQº¹¿þÊ×#ø¨|Cw­é²Ä5«Mb#s£ùú…¸€Æ~ËÓMû¨IŒœ,`üç%†sÓxGà‡ü"¾*´ÔÆ©çý•µ–ò¾Í³ö…äw=wœy~^ÞŸ6sòã7|©õ×òVün‚[é¶Ÿ­ÿCºð^¹iâxt­K@.¬oÄWó'Ý–7Ã+b5Ùø§þ@SÿÀô!^wðoÁð®|á­í?lþƶ·²óü¿/Îò®í¹;sŒã'µèž)ÿÿðýUÊ×vØJöWÜ𿌟ÛáŒü7gy¦}«IÕViµ+á6ӥ’[Ä%)™ÝG¸ämPO8¥±ý£4‹[+ÇñrÜZÏ«a ½¬÷óͬ¥s³ª´³µwžFvü_ðº×ÆÞ/³Ô5ÇI¬¡Ò¯´›‹'‹rÝGt`,Kg€c;úŒsåºwìJ4M7Jû&»c«j:c^#M®i&ú¨n%Ypñ‰Ñ¼Ô*¿¼7e²¼ñogçùéø~o±Nߊû­þ’ó=:ç㟄¬í$¸¸×-Þ4³Ë†(RíŠÛ2°erÈ9Æ nxÅ6)K¶Ð.ÊØÝIe9 À$Ñœ:d§‚FFAàךx‹öKÒü_{¢?ˆï­´Ý ´{«;[Aomx|·Ž)V0ÄEå î (Î €‚6ó×|=øiqðëá<^Óug¸Ô’‹ê“A¹¥º•žG¸h÷s™$fÛ»Û=꞉¿[~Ÿ—â»2UÛKïûµü'ÝŸ h%ø‡ñ3Äúi±³°I¥Þ´Á—UŠšÞåÀÇÊ#™Bõ9 ^Çö¢ÐµÉo¤NÏáë= óY»Ô¤²¸6Á,)ºd <{^Cº=ãå<ŒÒð÷ì}¡ø@xmü1©Ãq¢Á-ãÍwqpšŒBÉ:Þ]¬¹Œ`2j¶²æ±&‰>›âOZ]ÙÃá;Ÿ iÂÃ%¼2ˆ€šVóÏšáa@@21ͦ—dþnÎÏïåùße½+6ßGø-?àþôèOíeà5-æê÷Qì(d2iWh"È 3“Ù ™°‡³VޱñÇFð3½‚í5Hô«tµ†âæy%{T¸´i>aVbomçq*3ügð þöñ‰:¹·ÿ„·B·Ñú6ÿ²ù^ï~øßŸ?îü¸ÛÔç‹-ðK><:ØÔñŸ.»äý›ÓLû•»ý´ÝöqüTuþ»¯Òì‹»_¯üóÐê<ãM7â‡-õo \}ªÆä°G1´lX£+#€ÊÊÊÊU€ ƒ^™«È*çþ¹?ò5å?üÿ‹ugö¯µý§R½Ô7ù~^ß´\É>Ìdço™·=ñœ â½[VÿUÏýrähó<‹âçÄøgàK­RÊÌê7Ûâµ±³ÍåÌÒ,QFô˺äö=«'Ãÿ´yð«Dñ7‰ÌºqÖ¶ûPÉup.Áe’Þ8âBò2Í/ìÿl5vµ)£Ã£> ¶ùfcX¤ewÊYó¥ç½yeß§þMÿü†íÌ»ÃÁ9/ ~Ô·.øOã}ytQ¦ßøjÅõ[[‰K‹Û7·i­gl´HQÓiæºóñ–ÇJþÕ$K è¬R=2Êîþà;ÚÇ>$Š(IS‡'+¹víË%G1©þÉU¨Õ#ð£}¤[k>¹ðõÔ7\j Èê†i‰O'÷˜AÁòõ¥ñÇìËqâ›»¹ìµ»-·zÄz¤–Z†šnì.lc´òç„Lžn BU$€©Æi?.ß­¿-HÕµ?É[ñÐé¯?hOÚhÚeüzœ×vú¼umö+ ‹¹ (BÉ#Çlñª1 ÅÂ…nè~q.µlÑœ« ú¦¾~»ýï4mIñ“o&’—kúè¯ Õ«Opó´x.c0mÞ&]Õ;xÅ{÷‚­Í¦¥gI$Æ$(dåßFX÷&«M}w¹¹ãoùGÿ]GòjùÓã§í;yðÆº†›eiᇇKÑZêšÑ°šð™|›eòœI'îx¸ô_¿äýuÉ«Âþ$| Ôü_ñó^ðÞµ¢Ù}¿GHš CAUI%}èLè Ÿ8Œ2°ùFsÒ¢WÒÞ“·ãb•¿/Í_ð©ü_ñˆ|Wo¢|)Ð,f¼M& _P›W¼{X¬DÅ„VäG³JÛ$'€'rq]e¯Œ$Ò~¶¹ñ&Õt³´{­F/ÚVÌ %ðè¿8IÈ#µqš_ìý©|?ºÓ§ø;âHôÉ-´{mí5-;íÑ^ÇlC) $L’¨w ´†o®£Ä~½ñwÁíKÃ>"Ö>Óªésióê_eTÜòFÈe©»;CvÆ{ÕÏgËçoÆß…¿«“×7—䝸ÜÁ?µ—€Ô·›«ÝG°¡É¥] Š7 $ÎLCd,XbfÂÍ[šŸÆ¯ é/ýü«}çÇjì¶“=´3ÈŽ.U QÈá—j3†;—™s‰ã?€_ð—·ŒIÕÍ¿ü%º¾ˆÑ·ý—Êóÿ{÷ÆüùÿwåÆÞ§žãHÑfkŸ¦¢¾±Ñµ(u=ûV{x¶ -Ï›Óó0!·+¤Ž9­ïëø{ßä¾ýºƒI^Ÿð~ãè Úå¹Sw`ÿÀMlxÛþAQÿ×Qüš±|!“¬Z§*‘ÀÀû§·jÚñ·ü‚£ÿ®£ù5«ÛSÌlþ =ׯ+ÿ UXì´‹}P\ùŸ3™fš=›1Æ<œç=úTWÇ/ ë^/mOÔ™¯Ä“B…­¦Kyä„fXâ¸dJè܈ĭ‘òœfø«á_ˆn~*OâxLÒ¤»ÒáÒæ·½ÑÚô²ÈYn"ÁýñÁéùcx{öjºÓ§Óì5Í~Ï h÷·º…¥ŒVƒ-Òή$¸2¶ä_µO´Vù—,vó7|¾zþz~êïåùkø‡ûFx;ÄR];WeŠÎÊ]Eî'³žÞÞKXØ+ÏÒ"¤±‚ÀnFaÏTúÇŸ xƒN¸¹²Ô'…m.-­¦ŽêÆâÖxÚåÕ-ɆXÕöHΡ_nÓÏ<x÷¾ø›ÇZ/Ä…Õ¬¼3cáY¼5c%ݵ¤1–_³ÜL&*¶ë¹ÛË…9jï5/€߉¬µ«¯xžÎoj#NKk«m+ɵµ[ƒs`i™¤-#9sæ.9®ß×Wú[ïÝ„´ÑoÿÁûˆ´>‹à?iú|‰w}$ú©Ò¯>Íiq3Y?Ù Ð;"‰Ì„©‡å^ÒŸ‘€õ_°}MÙsƒ <Œ«Ú¼E?gÿ %Ôåñ^žþ#®¾—?ØÄZ!?c0˜Æâ¾Y$7˜qœõ>Ýà`F¤âB y'$ då{P¶×ø õ¸µ¿—üúXêh¢ŠQEQEQEQEW~Óž'Õ4¯‰Ð[èú®«eö\2yv·²À…Œ³‚Ä#NF}…y÷ü&º÷ý >"ÿÁ­Çÿ^>+:¡„ªéN.ëµ»_¹äⳚJ®”Óºín×î}}E|ƒÿ ®½ÿCˆ¿ðkqÿÅÑÿ ®½ÿCˆ¿ðkqÿÅÖëùe÷/ó9ÿÖ,7òËî_æ}qdš£Ã9`¯Œ•ëÁÏô¬ßøBmç¥Çýô?¾Yÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿXðßË/¹˜¬Xoå—Ü¿Ìú›þ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯–á5׿èañþ n?øº?á5׿èañþ n?øº?Ö<7òËî_æëùe÷/ó>¦ÿ„&×þz\ßCü(ÿ„&×þz\ßCü+åŸøMuïú|Eÿƒ[þ.øMuïú|Eÿƒ[þ.õ ü²û—ù‡úņþY}ËüÏ©¿á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ùgþ]{þ†àÖãÿ‹£þ]{þ†àÖãÿ‹£ýcÃ,¾åþaþ±a¿–_rÿ3êoøBmç¥Çýô?¯éz\zM¹ŽØ»+6s€;}+䝸Muïú|Eÿƒ[þ.øMuïú|Eÿƒ[þ.õ ü²û—ù‡úņþY}ËüÏ«/ü/o¨Ý¼Ó¼ÁŸ F8ôö¨á µÿž—÷Ðÿ ùgþ]{þ†àÖãÿ‹£þ]{þ†àÖãÿ‹£ýcÃ,¾åþaþ±a¿–_rÿ3êoøBmç¥Çýô?ÂøBmç¥Çýô?¾Yÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿXðßË/¹˜¬Xoå—Ü¿Ìú›þ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯–á5׿èañþ n?øº?á5׿èañþ n?øº?Ö<7òËî_æëùe÷/ó>¦ÿ„&×þz\ßCü(ÿ„&×þz\ßCü+åŸøMuïú|Eÿƒ[þ.øMuïú|Eÿƒ[þ.õ ü²û—ù‡úņþY}ËüÏ©¿á µÿž—÷Ðÿ šÃÂöúuÚMÌY3€Äc‘OzùOþ]{þ†àÖãÿ‹£þ]{þ†àÖãÿ‹£ýcÃ,¾åþaþ±a¿–_rÿ3ë]SKV·Ü—UVÝòpG­Pÿ„&×þz\ßCü+åŸøMuïú|Eÿƒ[þ.øMuïú|Eÿƒ[þ.õ ü²û—ù‡úņþY}ËüÏ©¿á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ùgþ]{þ†àÖãÿ‹®Ãµ‹g÷/ó>Óÿ„&×þz\ßCü*þ—¥Ç¤Û˜í‹²³nùˆ'8·Ò¾ÿ…óñþ„oÚÿ—¿üvø_??èFý ÿðY{ÿÇhúô¿çÌþåÿÉ×¥ÿ>g÷/ó>Ù¿ð½¾£vóNó|d)àcÓÚ¡ÿ„&×þz\ßCü+âÏø_??èFý ÿðY{ÿÇhÿ…óñþ„oÚÿ—¿üv¯Kþ|Ïî_ü}z_óærÿ3í?øBmç¥Çýô?ÂøBmç¥Çýô?¾,ÿ…óñþ„oÚÿ—¿üvø_??èFý ÿðY{ÿÇhúô¿çÌþåÿÉ×¥ÿ>g÷/ó>Óÿ„&×þz\ßCü(ÿ„&×þz\ßCü+âÏø_??èFý ÿðY{ÿÇhÿ…óñþ„oÚÿ—¿üv¯Kþ|Ïî_ü}z_óærÿ3í?øBmç¥Çýô?Ÿoá kk„’7œ´le†2}+âŸø_??èFý ÿðY{ÿÇhÿ…óñþ„oÚÿ—¿üv¯Kþ|Ïî_ü}z_óærÿ3î[û$ÔmË|d¯^¥fÿÂkÿ=.?ï¡þñgü/Ÿˆô#~Ðø,½ÿã´ÂùøÿB7íÿ‚Ëßþ;G×¥ÿ>g÷/þH>½/ùó?¹™öŸü!6¿óÒãþúáGü!6¿óÒãþúá_ÂùøÿB7íÿ‚Ëßþ;Gü/Ÿˆô#~Ðø,½ÿã´}z_óærÿäƒëÒÿŸ3û—ùŸiÿÂkÿ=.?ï¡þÂkÿ=.?ï¡þñgü/Ÿˆô#~Ðø,½ÿã´ÓñÿÇ àø'öÏýƒo?øí^—üùŸÜ¿ù úô¿çÌþåþgÚ¿ð„ÚÿÏKûè…ð„ÚÿÏKûè…|Uÿ ÿÇŸô$þÐ?ø-¼ÿãµ½iñ;ÅKáíOˆ “¥¦«{5½ÛF…sœJQÀ´œgJ“LÑQ\Ó¥4½ù™ÔÌÕÍ:SKÑ™õ¿ü!6¿óÒãþúáGü!6¿óÒãþúá_-ÿÂCãïxÏÿƒÿ’hÿ„‡ÆÿÞñŸþÿ$ÖŸ^—üùŸÜ¿ù#O¯Kþ|Ïî_æ}Ooá kk„’7œ´le†2}*ýý’j6 傾2W¯?Ò¾Iÿ„‡ÆÿÞñŸþÿ$Õuñç‰bÔe´Õ5OY\EK²]^FܬX Lê7Zήh¨EÎ¥)¤¼—ù™ÕÌչΔÒ^KüÏ«?á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ùgþ]{þ†àÖãÿ‹®:÷ö’ññŽ­¢xSOø·âk½Éûcè¢æö8|ÔÞ›ŠM•ÈÎ2J¶3ŠÆ†wK.ZTäߢÿ3*9Õ,D¹iÓ“~‹üϵÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ø³þÏÄú¿h?ü^ÿñÚ?á|ü@ÿ¡öƒÿÁeïÿ®¯¯Kþ|Ïî_ü‘ÓõéÏ™ýËüÏ´ÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ø³þÏÄú¿h?ü^ÿñÚ?á|ü@ÿ¡öƒÿÁeïÿ£ëÒÿŸ3û—ÿ$^—üùŸÜ¿ÌûOþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯‹?á|ü@ÿ¡öƒÿÁeïÿ£þÏÄú¿h?ü^ÿñÚ>½/ùó?¹òAõéÏ™ýËüÏ´ÿá µÿž—÷Ðÿ Õ¸€\ÛÉ„…‘JœuÁ¯…ÿá|ü@ÿ¡öƒÿÁeïÿ£þÏÄú¿h?ü^ÿñÚ>½/ùó?¹òAõéÏ™ýËüÏ´ÿá µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ø³þÏÄú¿h?ü^ÿñÚ?á|ü@ÿ¡öƒÿÁeïÿ£ëÒÿŸ3û—ÿ$^—üùŸÜ¿ÌûOþ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯‘<+ñCÆÞ!K™u­/⿆mmŠ)Ÿ\{‹•ßqTŒ4ۜᒪBãæ ²†Õÿ„×^ÿ¡‡Ä_ø5¸ÿâë’¶{G.J’~‹üÎZÙÝ*ä© 'è¿Ìú›þ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯–á5׿èañþ n?øº?á5׿èañþ n?øºÏýcÃ,¾åþf_ëùe÷/ó>¦ÿ„&×þz\ßCü*k Ûé×i41dÎŽF==ëå?øMuïú|Eÿƒ[þ.øMuïú|Eÿƒ[þ.õ ü²û—ù‡úņþY}ËüÏ­uM.=ZÜGr]U[wÊ@9ÁþµCþ›_ùéqÿ}ð¯–á5׿èañþ n?øº?á5׿èañþ n?øº?Ö<7òËî_æëùe÷/ó>¦ÿ„&×þz\ßCü(ÿ„&×þz\ßCü+åŸøMuïú|Eÿƒ[þ.øMuïú|Eÿƒ[þ.õ ü²û—ù‡úņþY}ËüÏ©¿á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ùgþ]{þ†àÖãÿ‹£þ]{þ†àÖãÿ‹£ýcÃ,¾åþaþ±a¿–_rÿ3êoøBmç¥Çýô?ÂøBmç¥Çýô?¾Yÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿXðßË/¹˜¬Xoå—Ü¿Ìú›þ›_ùéqÿ}ð£þ›_ùéqÿ}ð¯–á5׿èañþ n?øº?á5׿èañþ n?øº?Ö<7òËî_æëùe÷/ó>¬°ð½¾v“@óLà1äcÓÞ¬êš\zµ¸Žäºª¶ï”€s‚;ýk䝸Muïú|Eÿƒ[þ.øMuïú|Eÿƒ[þ.õ ü²û—ù‡úņþY}ËüÏ©¿á µÿž—÷Ðÿ ?á µÿž—÷Ðÿ ùgþ]{þ†àÖãÿ‹£þ]{þ†àÖãÿ‹£ýcÃ,¾åþaþ±a¿–_rÿ3êoøBmç¥Çýô?ÂøBmç¥Çýô?¾Yÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿ„×^ÿ¡‡Ä_ø5¸ÿâèÿXðßË/¹˜¬Xoå—Ü¿Ìú›þ›_ùéqÿ}ð«:_‡ Òn –Í+3.ߘ‚1{jùCþ]{þ†àÖãÿ‹£þ]{þ†àÖãÿ‹£ýcÃ,¾åþaþ±a¿–_rÿ3ëê+äøMuïú|Eÿƒ[þ.øMuïú|Eÿƒ[þ.õ ü²û—ù‡úņþY}Ëüϯ¨¯á5׿èañþ n?øº?á5׿èañþ n?øº?Ö<7òËî_æëùe÷/ó>¾¢¼ËöWÖou¯j®^ÞßI¨Ñ£Ý\<Ϋä@v†rN2ÌqîkÓkÛ¥QV„jGf“ûÏj•EZ©šOï (¢´4 (¢€>uýª¿ä¬Ãÿ`ˆ?ôuÅyÍz7íUÿ%fûAÿ£®+Îkà3¿÷ÚŸ/ɾTù~H(¢Šò,(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ò?àœþ!³ð—üïÂú¯ˆfÚ~™o©ÝÜÊT·•w·Lí…œ('^o[³ƒ|añþ "tÙ÷ÄPøGÇ:·­Yè:Ô©½4»Ù.®ÖØc…r§!XŒdF+éøzN¯(«´—þÜ}_ ¥)TRÛÝýNïÂ?ðS_‚~0øsãÂas¡i? 㷛ċâMRðýî—È&ÕÚËP¶†áÖr ÂR6¸(›œ¯1øaÿqð?Œ>9üj¹ñ/ˆàÑ>|*𷆵;»íg@Ô4mGG¾Ô.õ8gKûkÈ£ž$Ùm`ë¾ÂMæn(Àô¯ø$ÇÛËŸŠz–¡sð×MÕ¯yybâc‘^…âÛ3Ã? µß‹·ÿ|Wá-Áÿ [K7WQ¥ßÚ4˜ï Ã_³GåážU(ЖUC—*AÇ–þÔ_ðOÏ|lOÚѼ'¨xbÞ_´ïè/w4Èlîm­µ8™¯ BÅ!-¨DAÌ8òƒ€`øïÿòñwÅmö…²Óïü(cø¹wáYtÔ»šo.(´µ´[¤ºx· PრÛrq•K¥îoý~CVº¾ÝóqÚ/ükàïˆþøëÅ¿ µOÅòxìíeÑm4«›=OUº¿q™ ”7‘Ãö…¾™’;yИ%$•…b<ËKÿ‚—øÃÁþ"‚ãâ½ÏÁnÚÊø¬<1ábâïVð%¢ÝÅguxod R;‹ˆñR+c2½Föi?ØÓÇÚ_í%ñ?ã?€mm|KÚøÿKðîzÐjšÐoïn/­ñ"¤;ä‚ó÷ eÚò Y kóžþ~ÉÚçí ¦xoÀZÅojº&ðßUøi}¥êÖt½~ÛB¾½±–ööño$Q§,vÃöy£EI§P¶Bu>ŠîýtQº}4”ïuI]5fÜTN7×K+5Õ¿‰w÷UšÕ&ÛMKD¾”ý¯à­>øaâ=/Á¿üIiªxåþ#xwÁW«.‡>’$ºÕìíµ õ%lÚþ+[‰ä6ë9–3fŒ„`=F_ø)_Á8>8Ÿ‡’øÞ!⬠ìËã®®xYÕüŸ°‹òH_²üíÄ.ÍÜWÌ·ðNÏÚLÓ_ៅõƒgá=§Æx>)C¬ÜÝj â ë3âXuÙt÷´Ko"£Ü*ÜùÒ¬‹Hc‹Ìi"ѽÿ‚nücŸF¹øCÿÃAðjïâ×ü,÷ñ1º»%X?·†¾tÏìÑmös/ÚÇ‘öϵcÉù¼ÃmMÅŸ>òwzì­JýíkÔ}nã¥î“ª®Üî k¥¯K=µ½ ¼¹µZ;{OÄ/ø,ìßð§ÇÚ‡†þ"üPÒôCFÕ'Ñ5Y®,oÃF¾‰͵í÷“ö{Y]b“ÊY¤C6Ò"ÞkwÿðRŸ„/ø%{ñš׉5= NÖφî­m<¬Í­[jAC›Y4t³7é&ÆY0`»`ÿpî¯3Ôàž)¿ð.¡¥›Ï ï¾?Û|Wf2M±ôèµX/<§>FM×—и)¸(ó029ÏŽŸ°gÆë­â.§ð#ÄzZxçâÍ¿/tUñ~­ág×4tðå–™ö9õm6Ý®¬ä[Û5¸+e’8Õðî••&ÝÎzJÊëͪ7ù':‹þáßÈu,§(ÃTœ­æ“¨£ój0ö÷CÞ<ûhxkãGŠ>Ýü ñ?†uO üL¶Õç·76÷°êW¦ÅP:[ÆÑ Ã'˜“ÇsåÈ…v…Ü ïƒ?ðT€ÿ´'Å/Á?<}o­ëúغ]8êÞ[wO’Þ÷I×n­„Z…¤ÞdR$°Nq,N<Ä!VÏ"€Òo-æÕ£ÑuM&+{¿²I*¤ÝÛÂ$•ÇafŒIm¾b‡Åònþÿ²{§ÿé1©ïo~ ~Ï¿±.±ð×ölÖ<¡øsCð­ö›£hÚn¯ãtð˜Ï4²HìììZId‘™‰0x£þMßÀ_öOtÿý&5åæÿÁø£ùž^oüÿŠ?™ßøŸÄ¶^ ðåö­âIÖÛOÓ`{›‰H'˳O žÕÏxâ׌eGÔ<'âMÂkcwî¥öd“ŒD¤ˆlíu^ÎÅ^ø±àþ)ü6Öü;s9µ]^ÑíÄÁwy,GÊûr7a€8ÈÎ1^y↟~,iÚW®ôÆçÃ÷Z\§M¾šá/.¤1lœÂð§–€$€®ö8Œ÷¯Ní_úïÿþOZËOë·ü»ïõ øßEñÕ”—>Õô½fÚ'òÞ[¨îí,„€pAǽrÞ3ÿ’‡sÿ`ëoýqMøYà oKñÖ³â/z\ú…ž›Ž“;ÏÛs)ó]Þ(Écçm ·åT'³¼gÿ%çþÁÖßú6â¼ÌóýʧËÿJG‘œ¶ðu>_šÿ†*WCÿ÷ÿ“ƒøÝÿp/ý&¸®zºø'¿üœÆïûé5Å|ÿ¼Ëü/óG…Ãßï2ÿ üÑõ}Q_h}QEQEQEQE埵wü‰_õüŸú.Zð*÷ßÚ»þD‹/úþOý-x|.þöýñ÷ûÛôAEWŠxÁEPEPEPEPEPEPEPEPEPEPEPEP½~ÈŸò"köý'·¯V¯)ý‘?äDÖ?ì.ÿúOo^­_¥`?Ý©†?’?FÀÿ»Rÿ üQEÔuQ@:þÕ_òVaÿ°Dú:â¼æ¾¨ñ·ü…cÿ®Cùµc×Ⱦ¹ZU½¥¯m-}•»ž7$úåiVö–½´µú[¹ó}ô…Éþ¬ÿÓßü—þ Ëþ­ÿÓßü—þ ó}ôE¶±iyw$wVòÏúÈÒEgNÜ€r*ÅêÏý=ÿÉà‡ú·ÿOò_ø'ÍôWÒQþ¬ÿÓßü—þ«ô÷ÿ%ÿ‚|ßE}ÔWJI¼-²EVÆpv8 óØŠ’õgþžÿä¿ðCý[ÿ§¿ù/üæú+é (ÿVéïþKÿ?Õ¿ú{ÿ’ÿÁ>o¢¾¢õgþžÿä¿ðCý[ÿ§¿ù/üæú+é (ÿVéïþKÿ?Õ¿ú{ÿ’ÿÁ>o¢¾‰¿Ôí´¨Dš¥ÄÑ“´<²R}2jX¥Y£W…•ÑÆU”äê êÏý=ÿÉà‡ú·ÿOò_ø'Î4WÒQþ¬ÿÓßü—þ«ô÷ÿ%ÿ‚|ßE}5ÔVòF·F3lŒ3dl…õ8ãÐ’õgþžÿä¿ðCý[ÿ§¿ù/üæú+èź‰îZ’32(vŒ0ܪI‘ÔTóìjJ?ÕŸú{ÿ’ÿÁõoþžÿä¿ðO›è¯¤(£ýYÿ§¿ù/üÿVÿéïþKÿù¾ºOƒ¿î¾|4Ò|)à+;ô­#^w›$²3;;»·™Ìîìp‚ØP£{eÑC#­†¿²ÄZÿÝÿ‚tPÉjá¯ì«Úþ_ðO8ÿ†¤ñüûé_÷î_þ9Gü5'ˆ¿çßJÿ¿rÿñÊôz/!’YR9cgƒb†Ç‘‘¸vãžk£û;ÿAOîÿ‚oý‹ÿ —÷Á<óþ“Ä_óï¥ß¹øåðÔž"ÿŸ}+þýËÿÇ+»ÑüCaâ+HgÐ/¬ï ¸….b’Þe•%‰ó²E*H*Ø8aÁÇrìÜ_ý?»þgâ¿è%ýßðO8ÿ†¤ñüûé_÷î_þ9Gü5'ˆ¿çßJÿ¿rÿñÊôz(þÎÅÿÐSû¿à‡ö~/þ‚_ÝÿóøjOϾ•ÿ~åÿã”ÃRx‹þ}ô¯û÷/ÿ¯G¦Í2[Bò\:Ç`³3©'°£û;ÿAOîÿ‚ÙØ¿ú wüοá©úWýû—ÿŽQÿ Iâ/ù÷Ò¿ïÜ¿ür½ ¯à_'tÑ´E—½8ÏËëÇg•ûͽv|ØÇ5¥Göv/þ‚ŸÝÿ?³ñôþïø'œÃRx‹þ}ô¯û÷/ÿ£þ“Ä_óï¥ß¹øåz=gbÿè)ýßðCû?ÿA/îÿ‚yÇü5'ˆ¿çßJÿ¿rÿñÊ?á©úWýû—ÿŽW£ÑGöv/þ‚ŸÝÿ?³ñôþïø'œÃRx‹þ}ô¯û÷/ÿ£þ“Ä_óï¥ß¹øåz=VÓõ«=X¸Ò®í®LÊ•_o׊?³±ôþïø!ýŸŠÿ —÷Á8øjOϾ•ÿ~åÿã•ÈøŸÄš'µÉõ?øá毩]mó®ït8î'›j…]Ò9,ØUP2xÕîµ^ûW´Ó.-bÔ®­í志ȶIdTk‰63ì@OÌÛÛ' Ç 4gbÿè)ýßðCû;ÿA/îÿ‚x“áú%ß 𛆓ÇÚÃxëMKQk§évöúxÓm ²ƒË‚Þ% V<à €ô-L§U%úWýû—ÿŽQÿ Iâ/ù÷Ò¿ïÜ¿ür½Š?³±ôþïø!ýŸ‹ÿ —÷Áo¢¾¢õgþžÿä¿ðCý[ÿ§¿ù/üæú+é (ÿVéïþKÿ?Õ¿ú{ÿ’ÿÁ>o¢¾¢õgþžÿä¿ðCý[ÿ§¿ù/üæú+é ŽK¨¢¸Ž)de”ˆX|uÀ?ÕŸú{ÿ’ÿÁõoþžÿä¿ðOœè¯¤*6º‰.R’14Š]c,70É©pÏÔQþ¬ÿÓßü—þ«ô÷ÿ%ÿ‚|çE}!EêÏý=ÿÉà‡ú·ÿOò_ø'ÍôWÒQþ¬ÿÓßü—þ«ô÷ÿ%ÿ‚|ßE}!EêÏý=ÿÉà‡ú·ÿOò_ø'ÍôWÒQþ¬ÿÓßü—þ«ô÷ÿ%ÿ‚dþÈŸò"köý'·¯V¬¿ÙÃm£¶Š8ÞáÌ’²¨Vû»˜Ž§j¨Éì v­JúZ½…(Ó½ì’û‘ôt)ûq§{Ù%÷QZš…Q@¿¿ä+ýrÍ«·<]i-ÖªŸfŠI6Ä3µIÇ-éYÙ7_óíqÿ~ÏøPz*ÇöM×üû\ß³þdÝϵÇýû?á@ŽO¤|×¼ñF/ƒÖ¾›öÇÓ~1øžûÂGö¿Œ£¿O\ýß< 箚Ñ:¤ípDÙß$|¤} û<þÚ¾9ñ·íWáÍ+ÄcÔüW®xÏÄÚŠþ:Ã>ÑlWQ6§î¡Ð>Ç¥“qu4Oý©û¤]Ñlý þɺÿŸkûöš4[…rÂÒ`ÍÁ>QÉý(§îRTû+_þÝŒomWK÷ìÖîêOÚJr¶í¿5w'kéµôéu¶§æÇÁŸŠ_¾1CðŽÛRø÷â2_Œ.þ"Ý\YøWDÝ ÞÙÿe‚ÄIhËäËý¨Æo´ ÙŒ#Êh`p¿´§üâ‘àø“Á;±ð‡"ø[á¿_øOW½Ó,4ÏK}³Ok.s¨_È ‘Ò›8áÌE¥f¬Ù7_óíqÿ~ÏøRä¸ci9eÈÊ9ü+xÔ„]Ü/ï'¿Dç§£RŠÿ·Ýé?x¥m.š^Wåÿ'ÙûÚ>ÿ ø×â¿nÿiø7á/ˆ,¼'‹>6[ø^óZÒ´ uiÿ þ-H»átšäKo¬ó¬…Q#B4 ^õû|Cñ/ÄoÙñäø¹¬Ÿëº‰üCá™ugµŠÖ]N=7Y½°†y¢…V%•ⵟËTB努‚{öM×üû\ß³þdÝϵÇýû?áY©%Tº/Á%›·™SjV²µ¿‰¿¾ëÿó+ÑV?²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ ‚JôU웯ùö¸ÿ¿gü(þɺÿŸkûö€+ÑV?²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ øÃþ 'è`ýž_ö´ ?×â¬?Û_ð•¥»èâ3¡k!>Ò.A‹o›åc¶÷Å|è|pŸöbÔüH`MbÛáßì¹ãŸi°ÁãÖúfƒá«—Òïæ¿mæúÎæÎ×O¸ºƒG‰nÚ[_>æé"*î­ëoöM×üû\ß³þ£\È¥^Öv`ƒ þ” ¹9¼Ýÿô?ò_ÇË[”ù¹|£nýdî»?{ðó?/¾4ÁBŸ¦¤Þ4ÒåÓ-®>Þéq _ÊÒO=ây–³G ?cØêÅ%-öóh—kIŽÓ‘˜ÛŠ_ìk’û¤û€Æ|£ŸåTäÛo½þWwº·T´Wº³zmlíý_ðûk½þ øñ7â‹þþÈÞ9øéâ½+Æš¯ÅMnÓPx¦ðżZ›áMné‹i"™ˆ`ùeªˆã•ã¯Sö¸ñ×í}ûx·Mð‡ÆƒñrïÇ5ísÆzF¤ér«Çgl-ìSì–ûá{£6¡ [Ý4’¹ž(!õòMæXÙ^Öà« Ý·JçþüÓ¾|/ð÷ƒ~éWvð®›o¤é¶ÎòÎÐ[AÅd,îB"ÌÅŽ2I4ç%9M¥döòºkËm<Ý·OSzucNqšŽÖü$߯[vÓTև矌¿kýC–ž-×g¿‰zŒty|+àH¯~)A¦iWZF™{â]jÏQ¿’{[t·’->”¢J »¤²J™÷õý§>!üTÑü;áo…§ñ‡õï‹÷> Ñþ'Zhú]Õ׈4eð½Î©$°²[>ya¿†kAs "m0Ñ»,ÿ@×E¸TÚ¶“éÇò¥Mæ4 ¤êª0ˆ€?JÓÚE¹^;»þ1vôÑì•ùb”U’éoŸ/-ýo¯m;êxìñÄ¿¿gÇ“âæ²|G®è'ñ†eÕžÖ+Yu8ôÝföÂæŠX–WŠÖ6-Q –*ªQìõcû&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð¬äùÁÚîÛ]ü•ô_-ŠôU웯ùö¸ÿ¿gü(þɺÿŸkûö¤ x¦ÃÀÞÔõ¿\Çe¥èö’ß^\HpCwcØROÒ¿4¿`/øÛá‡ím |FøÏðïÅþ ¶ý¬m53­j:½åœ\ê‰$ú—‡àŽnäšØÅ£ ËFó¡„–·…HßÁýEþɺÿŸkûöÂ웯ùö¸ÿ¿gü*m¬Ÿt×ɦ¥~ýèœS³v³•¥;ü×ÃéÖýÓµÖçåÂ/Ú‚oÙ×ö=Ðn ÔG„Ä?þZÁâM:ÏK¶¼Ó$¿Ô5;O6÷Q¿·š(¬cÚ¤´ñÍIäH˹ݩ¤ÿÁCþ"ßþÉbïÆ¾è£Hø•wáÉ|e‰tkiüK¤&—ôÙzž¡¦E¤Íwæ]B¬ÒY[Ç,PËå`홿R_F¹‘ Éi;+ b$ùR>‰q"m’Òf_C#ùVÕ*)ʤ­¬¯o/z2ý$¼ù¼µuœ”¢­ßÏÝåüýîºýçå§Æ¯ø(ÏÄËWÂï¡üPÒ>é÷? ´OxZãâú_‡Ç޵+“sö¨µ¤±ºóÄ^MšÉk¦Km2}¬º» !Ùì:/í¡¯ÿÃÐÀž"ø™i«ØjÉÒtßøRïG»þÌ·]$ܼÚíÄ «[7ž’²ÝÁ3Û{T1©v'î¶Ñn\‚ö“’§#1åGö-Ï™¿ì“îÆ3åãÓ¥.}on¯·VŸn‹OÊÛ8Þ<·è—Ü­›Ô‚¼?þ j¡ÿàœ_C Àü;ׯ=â]={ÇöM×üû\ß³þdÝϵÇýû?áY´š³:(Ôö5#S³Oî?+õïهƿ³¿ÇßÙ¨üO¸¸¾ðÂOKῆpÚ\‹«Ý"ãAÖ/®¢ÏÍ-´PXi°ï%ØYK)?éÍü5ÿ‚ŒxËã/Á¯I7Žü9ñS·ÀÍ{ÆÖvšÄÚ6¹{áûØ"ˆgjÖv:]­¬;â½A%„ÍzÀÄÁäP@“õÓû&ëþ}®?ïÙÿ DÑncË´rI8ˆŒ“ߥi %9JjéÝüÜynû»ÚWòµ’Ú.½ÆÖ«—É59ZËdÓå·ÍÜü»ý¢<]¦ø3ãÖ«ªø·â%‡Â;ý¡¬VÜ(âÑ|Ï…ép×ÊÖÈÌ\F*²uÊ·Ý7¿á»s"•{YÙX`ƒ Ê‘´;‡PÎb‚ˆðGNÔœ®ïåktøToêšæ]:4õ½9§+j’Wôr~šóktÞŠÍj~p|Eÿ‚…|]ðýÃu-VËÃðxÃÀš±ñNáü>sðNK¦Œiw~¬>‰q&<ËI›iÜ38>½+žÓþ iš_Å}_ÆöZUÚø—\Òì´[Ë¢ò²Ëki-Ô¶è"'b•{û£¹T3o‰  .kîºôè½ïU¼–ú%£Ü¨IB6jûo×ÞO¥ž©4ímôhù×þ «ðþÇãÇì¾ø·a Ó|câézÍœS4n±\øKŠxÖE!”…‘À`AA¯•µ?ƒúŸÃïÚóÃ^#ÿ‚¯jzF©§¿ÂøWWšy|Û ßi£Æ/ç‰>T¹¾k‹Ë·DO #-~«dÝϵÇýû?áGöM×üû\ß³þ3Qœe•›“ï¼yTÚ}ÇJ£„cïoK½ŸgmRzuIù??à•Ñë¶_µh?lؼAŨ¼)gˆ>Öþ WVâ¬AÕ<óö˜\4YçäòM}çV?²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ ¹Ïžß×Vïêïyw“oKÙsÓ‡"·õéè¶K¤lµµÊôU웯ùö¸ÿ¿gü(þɺÿŸkûö ЯEXþɺÿŸkûöÂ웯ùö¸ÿ¿gü(½cû&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð  ôU웯ùö¸ÿ¿gü(þɺÿŸkûö€+×Ê?ðT/‰~ø7â¿Ù«ÄÿuÝÃ>Ò>,G%ÝGkif­ kH­$Ò¨ º.I°õ·öM×üû\ß³þdÝϵÇýû?áI­b×FŸÜÓýš´“ë/ü 5ø\ü½ý¾ÿà­ÃMñõÖ§û|gðÕÅ¿…¼;i¯Ûé’ëÚ7ö/ŽC]ݤÐiÉýŸu{©L«e4R¬6qÀ|²ÒŒ±_MÔ¿kÿ_ÁJ5‡7¿VâÛVÔæÑ4 xBãC½›D„híp×:ÞŸumý§o"β:ÝE,¶ŒÕ!½‹}èt[’á¤å— (ägð£ûçÌßöI÷còŽqéÒ‡áÉþ+ùÞß•»_ï™k'%¦‹ð¾¿7«üoÓäø#N½cªÿÁ9<a§xù¼q}áí ÇHÕmdûËá;Ø, I´‰cµŠ6ŠHr—¦þf ­|àÿÙ3ƾÿ‚s|7ñe4}GÀ´–ð›¿ííSUÒa»±’<å­"’mRøàɩĊ¶Å~Ø.r™Ùi8ÉÉÄG“ùRÿdÝϵÇýû?áZʧ4å6µn/ÿmþviîšWoSU;EÁl߯—[òonŸ¿¿nˆ>$ý¥4›)þ ¯ˆükªø·ÅZ/‰> ­…‚·ƒt‹õÓµÑB·Öæcg¥qw4–óÿjþét[<Çöž—âý·Šüm­üVѾ.xâßöbñޱâO ÞiZTšw€u _J–M"]:;q'–dŠHžÛP{‰qhCŸ·~Ä á\°´˜3pO”rJD¸>]¤Ë¸î8ˆŒŸ^”èÔT¦¥kÙ5÷Æq~m7{¿u+Ù±9'+ÛK§nö’•¾åm4Öí3ókSð|Þ ø«ûAøîêöÇ]½¸øÍà lõoiwP[Å?ü"%^9×ÎW….dXy¶6 *8y†ÇìñûrüSñçísu§x³â‚áÖ£ñ'‰4Cáö­c«kcf/¿³¤±ÓÓO[õžU¶°®g¼–ÚXnetTÝ §èÿöM×üû\ß³þŸØ·!Ë}’}Äc>QÎ?*‰Jñ厚5Ýü1WÖûYµë嬫(¥mt×Ó§‘ù­ÿæøúhßÛ³á÷ˆ|Mñ†/‰¾3»ø9«_xŸB† :Ö/‡7÷–†òékok \C‡Ic1ÞÉ<ëö>XmߤU2h—çË´™wÇ“ëÒý“uÿ>×÷ìÿ…iVª©AFÊ7üg)õíÍmÝívîÈI©I·{ÛðIzt¾‰/"½cû&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð¬J+ÑV?²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ ¯EXþɺÿŸkûöÂ웯ùö¸ÿ¿gü(½cû&ëþ}®?ïÙÿ ?²n¿çÚãþýŸð  õùyûl|Bñn½ûdø—ãׂüâíòö«¦éšn¿gygig’O»A%Üw¬¯RåA(i ¹XԿ웯ùö¸ÿ¿gü(þɺÿŸkûöˆ· ‘¨·Ž«Öë~ê×Mit÷µÓnÓ„©Ëihý<®ìÓém»|7§~ÔzÄÛCƾñÏǨþê:v¿àÏAe¤É'Œ´©ô»yÓUAuo%åË<óÝ…–ÞE‚/±‘¬»ü[öñ§‰µßŸü)û5|Cðÿ‰þ!ißüEgΩ¥ésÜø+\±Ã(º$ϺÍm K.'‚Rel£9&8Šþ¦c\—Üm'Ü3åÿ*F¹Lì´œdäâ#Éüª¢ùS^Vù¨´ž·ÖíÉô¾‰EhRš½ä“ÖöÖÞ›í·Ÿõ?:üKÿø£ñ[ö;ñÏÆß„¶w~ ð„š¾á}>=ZÂ8®<1ÝCˆµ›–’6}’[›«\˰Ät§¸h䉘7Ð?ðM/ŒzçÆO„ž%¸ñįüX´Ò¼C%–“¯èZ½¦«$–¿f·—ʾº°´µ´’á%–q›xQ|¯$02'éO웯ùö¸ÿ¿gü)F¹Çi:¨à~•^Ñ{Þê×ðøv½û7ßÞjöÐÎJö·OÇ{_ÎÖ¿FÕì› ¢¬dÝϵÇýû?áGöM×üû\ß³þ˜ÊôU웯ùö¸ÿ¿gü(þɺÿŸkûö€+ÑV?²n¿çÚãþýŸð£û&ëþ}®?ïÙÿ ê<-ÿ (?à_ú­ ¡á”1謀«)`A î5~€ (¢€ (¢€+Çÿ!Y¿ë”ÍêKËÈ´ûIn/¤X¡ ’;P2I>€ Ž?ù Íÿ\£þoO¾²‹R²šÞþ5– „häFWR0Aö šR½Ÿ.ãV¾»IàÛOÃ_^ù<%¦k·³[é’kpAöYçÕ-£eVhbŽáš7ùЈ¦HC )9ZÇö¦ð÷ˆ<¬x‹ÁVÚž·¢hÉ5ì-îLŽ9.ewDL…ŠªW;••bð—ìÇ‚t;/ÃÞ4ñ¾›ýžúe”)%š¶™ mÁŠQmæ3¢®ÔyZB úóU¦ýŽü1oáÍ Â÷šÖ‹¤Ïyg¨ÛZ[Mé×V̬³B³Fà—(¦E“z¹¶†fbßõ÷õùvëä%çýiþ‡†h¶?‡|Uà‹ gÂ:^½¬M¨ëRx~=>Åm§¸‰ ÌWÌYÌ ž\e¼Å•“ ÅŸ~ÕÚWuý*Ê/ø«K‹Z–êÒÖòúÖ$·{»evžØ”•˜:¥¶ì&6 çwÂ?³f™ák«[›gĵõ¾¾þ${«Ùa2\]=›Yâ8•D~[d*…ÁhÛVt_ÙïFðôZ Ó®u&mVÔ5«_2T!ç¼"E| ʵɴ …É89™¶“k·ãeúßð¿õçÿñùpþ#ý±aÖþëz‡„´h×¾ñ‡îõ[HD:‚ÁbѪJçå2DvÈplÚھý±|-£|C‡Ã7ßk–åo-´Ë«Èä¶ÛÝÎdF&˜NüÉ/LŠ\a†Û“ðÛö8ŠÏá]†“ñ__Öõ{øü/'†Â‰àû>‘ñ*\ =°!9Ø€<ÂF Š=sÔ¯ìÝeaã«kÂþ ñ¡w ýõ…©µ6דƨ»É’–=ë+ˆÝØ’MÚÓòÿ‚ÿNÝmÐZ¿õ²ý{ô¹¿ñ7âµ§Ã(ô¸¦±ÔµS\º6zv›§¬msy F‘öù®ˆª¨ŒÌÎêr@<–½ûYi~ÿ x¼ÿeØG©ë¡m!ÝáÛwwU{¥3e¿ÕJø„Jv!nAÕñ'ìûmâFK‰¼Iâˆu[=b]gMÔEÄ2O¤¼±˜ž‘4g(̾[«}âsœ“¯þÉÚˆþÓöïø¸bÂ=3^ežÜ?ˆmÑäe[–ò2‡H™‡Ê;o@1*ÿ×§ùïø;^¿å·â;Ƶ–“à¿jVøwź…¾“}o¦\ßÙZE%²ÜÜED¹”;³ùñ/ʧ ÃvÐA=oÂÏŠVßôÍF[m;TÑï4‹çÓ¯¬un-fUGÁ1»£’FÁ•ˆ!…fk?³î‰­ÿjý¦ãRA«ë–:ü¢9žÑm–$L¡ÄdZG¸“–à ŒoøGÀV~ Ôõû­.K™$ñ£ý§r%e!%ò!ƒ €0»`Cƒ“’yè‡^nß»ÿÛ~km­ÿà~&ÝQ@Ïà¢ÿµß>þÐÿüðƒÅ:ƒl¼u¥kúþ©ðûSñ¬ÁìNEžu‘« Ù‹JĨأ‚Ã=ÿðR üÓ|%áß³ø\ñ¿Št+]CÃæÃÂSé'â Ì’,2Ûé:}ÌÏ,7;ÄòÛ\º4J%‘ü¤’Tì¿iŸØ¾?Ú+â‚ük |Gø‰ðÓŲԴÛÿ -šâÞüÚµÄsÇ©X]ÆÃ66åJª‘ƒÉÏßÄ¿ø&¯‡~3êÚFµñoÇ¿õïø_L´²ðψ侲·Ô<-w ¾lšŠÛÙÇn——$D“³ÂñIB(BòÇ"§ue-¯¯{k·žÛÙoêTìõ[ÛN׺ßË~ï³è'Å?ø)ׂ> þÖ¾øEñWG×t]KÅ—öšN•ªÍ¨èÍkywsèbK$Ô¤T¶b3}ÉW2ù«Xÿ‚¯h~9‡Dðÿ¯ŒZèÕuý_Â:ý–§‹Okzd·Iu§Ú™¯‘Õ‚Ø]Ê.'X­¶ÂàÌ® ºßü×Ã:ßÇ-kÆ-ãÿ‰Úoˆ¼c¥xûQð¼éƒI»Ö´ï±.ÚÀÞÿ‰m±0ý§Ês"£m+Ùh¿°„4-OÀ÷vºˆÞ_øï]ø…§‡¸„‰¯õqª ˜¦Ä#t ý³uåªíq²-ÎømúAEÓ\ïÞ»¿¥£ø§Î—t¢ÚNè™èåÉåoºWûß%û^VmY®@ÿÁP4 oÁž¾øaðßâ§ŒüAã»fö×Ã:U‚jš{iXêP]µÍìVÑKosp"8™•ÙFÎJä.ÿà¬>ðï‰ý±ü5ûgø#[Õ¼g©ižÕßBÖ´»ùìîgÓnÖn‹ ‹‹IÕ º·•^ ä\H•ut_•¯?n/ÚÁÿ >!|qÔõ…úÿŸ‡uÝ\ð¤^¼³Öít 3X¸°žúßTþÒx¦¹Š~ÒakEtR¬W?cþÏŸ/¾øJïNñŽü]ñ îöðݾ¥âtè'(ˆ"Ž-6ÎÖŒlÎ[‹3ÇËc埸bßfžæX˜|®Ž8©ÑVŒ¾Í•ýo÷O¢’[Úûý¢^ͦµæùòÚ]}y_Ën†çÃoø)?„þ'|^Ó¼;¤xWÇ–žñµªxgþ4¹³µþÀñ«¦‹ƒyglc¹k¸Ù>Á¨m–âÞeû¾\˜üÎBÿ‚Æè^0±Òeð?ÁoŽÚÄž)ðÉñ† ƒKÒÒ_iùi»¶óu,êØ2ܘO:?!f vÿ ÿà›øeñsLñ•âÿ]økÃzæ©âø*âæÌh>Õu!r/.íÌv©w!oí ClW3EÚ䨋ˆü½¯†°ƒ~Ü|3—ú—‰go…_î¾é?i¸¾Ñ§\<¼·a]×û.ß ›ç“(r»T¾ Ç{uïi5û{•;iÊß]U{·~«îæÖßöïµäp¿à° ÿg á÷ˆ¼ke®KàoˆÚE†¹§øž;Ý"ÞÖ+[ÖQ ;«øµ †HÝ’ÖÖvUqÆrïŒ?o{…^9ñ†‘©é¾*ñæ©`ðN‡ øsB†+ßµ¿†àÖE¿qz±N/>O´¹¶Dól DÓ¿â_ø"¿5.…á߈?ü9áëχÚGÃMoNÓî4¶OiZd3Ãh.f¸Óäš7 u.ñnðÇ/ÐŒƒìûxQþ2CÄ?ÚÇÇ)ãÿ+χìÿo_Â>"Ûånò>È|Í»·ùß6ýŸ»­êF‡<Õ6ùo+7½¹£Ë~—åæ×ï3…õæþUnÜܯçñn¶ÓGÛ¦ýšh=/ö øCgâÿ iºÞ‰×wºmÞ—¬@ßéw¶wrÙÝZα»Ç¾+‹y´nèÛr¬ÊA=íqß¾é_|#¨h¾¸Ô.mu-{Wñ¯{"<‹q©j„ê¥G–²ÝH¨$ PYˆ,{ÆV¾ƒjÍ¥µÝ½/§ÎÛ…|Íÿ.ý·õ¯ÙSá6§¦þÎÚvâ/‹wÞÔüA¥Xj³ Ô´Ú Á~ñ·ºUÖ‘o©Þi—zŽ“Âw³žâ)<—‡ E$VÔå õ×òvüm+Ù§f¶Ã¸*‰ÔZ]~zþ·žé­ãÁ>*çÃ'[Ö&·Aw¦Ã{<ªvÄ»¢Í’Nd÷àWœþÃÿõ￳}ÄoˆòÙÃcãK«Íw@Ž8„+m K;¶–Òrd{o<…º<μ™ñöK¶ñìcyð_àDšwô ý. gj-ÒËIwH¯RÚ;p‹Ïhn6P¡$‘_>»¥évÚ&—oe¤Aµ¥¤KÆ»R(ÔUQØÚºj8¹Ô”6éé»Óÿ·ý¼ºœ´”•*qžý}mmþný6v}>mý¦¿nÑ­þÃ?þ$ÿÁ4%×¼_&n-†­­%¢ß] 'gš,íàƒ*»P‰2–Ë šu/·»o¹ó|¶ß[ߥgf©ÛuÍŸ//ÍZWé·™ÓQEÄñ¯í»û[|`ðį‹~Í2xNËHøðæÓâ«k¬hÓ_Ëâég—Qa§C4w 5ú<ãÍÛ+y—1»c+'ÙUóçíEÿëð÷íCãWY¿ñ—<‹´ü'ã?Ã×6q[xÏGŽY¤K+Óqk,°…û]ê ­$·›eÔ«æ}‰ߦý;'gf×U~ŸžÏJn þñ]i{ok«¤ú6®“ü·^—ñCãö…ðös×~'xáäµðç‡|?7ˆï3"ÛÅngeur£¤€+3àÏŽõß~ÊñGí¥«xÃþ!²Ð#Õ¼_y$ÑØéz4Æ/:åL®Á dó¾ì{˜òMWý¥?g‰¾=xSÁþ±½µÒü)¥ø—MÕõËAoÔl´ù>Õœ[H ­w–ýÙV…%L|ù¤è²¡Yea‚È5m§ÎãÕé~‰-þw³¾¾î–¾¸ÅI();»jÖͽ-ÝZÍöjKªÓæÚÓöÛÖ¬?g? üEýõ†¼-¨ø³IÒu}y5á}imeqªÚØÎÖBÐ4wSƒ;¦Öš1Žò¾[}A^Kû]~ÉÑþÖß í|)7Žümà : BÛQ™ü.š`šñíçŽâߨÝ(Tž¤ýÚ¡%0Ä©*}7ÃzTú‡l,µ=J÷Y¹³·Ž oï%¸¾uP ÒˆcŽ îAb#DL“µT`Š~õö¾Ÿr¿ËNºÝ¾…»ißþŸ?N–.ÑEÄQEá_·_í/­þÇÐ>%ÜÛÛÞ|.ðíù_ˆ‹Ÿ=Þ¥¦ér¡DÔ­VY–Ö)çËrmÚg\4A_Ýk‰ý¤¾èÿµ'ìýãO†ÿn5+MÇz-Ö…>Ÿ"Gw 4Nдˆè®É‘†qzRwÒß×—Ïný¬Ê+v–ßË϶ëºgÅ?ÿoŽþÖ~ Xx“Uð¯ÂÛŸŒ^&ñ/‘uðÛVñ…Úͧ2ÂâÎÂö)×Ù¯KÜÌO–“Œ/{ãWí÷ñÀ~;д_|Vð ?týzˆ.øgªÁ£x¯Tžââ)íÊÏ}zBÀ°Û3ZÜN× öÅ úCöý‰¡øùñÀÞ/ðßĈ¿ |Mà ?QÒ¬5 )žâÚøÚã5 ¸Û› r ªAäçŒÿˆ?±ˆ|{ œPþпôhŽ‹«¥”º]}~뉖m)ÖÚâA#+Éf-²àªBšº´WmzZV»Õÿ-Ý›¾¼¯p‹M'=í­»Ý6’zw²¾‹Nd{?ÃíZç_ð‰­]i×—º|Ïs¥Hd°¸‘£Vg¶bIhX’P’IR9­zÀøWðÇDø)ðÇþøgbºg‡<)¦[èú]¢»8µµ·‰bŠ=ÌK6ÔE$“Œ’MoÖÕ\\äáµÝºièeM5¥½‚Š(¬Ë (¢€9¿‹š7ŠüAðûP´ø!¯è¾ñ<Û>Å©êÚ3ëvØ‘Kù–‘ÜÛ4»:ŒL˜,œm?'~ÆßµÏÅ?øSWÿlÿx3\ðÓxÚïáåž“áoϦ]G~ž)>·»’æmVà4RH«#D#S”üïåüÿjׄÞÿÁ?<'/컬ü*ÒµÏéÚf©âk¯A«[Ý@5=/S›\}q&·v€ÅˆoYZ4’)¤j² >bÕ ùš¾ßuÕí}/kÛÏ_1¿y(¾ÿ…ŸëoêæOÇÏø)×ÃßÙþë\ÓõÛMsSñ‘âØ¼o¤Á%œº¶¢úD:Á\ß]AkIe8‘¥¸šÜŒƒs˜Õýömý§tÚ¿àÄ„ßKa|níþÅuå­Í½Ý¤òÛ\ZÈÑ<‘3Çq±"’H›nèÝЫ›þ EáÛÍ&òëRø™ñNódzøÁOð¿áu·†µoø—Å·‰¼ÝkW6±ê&Gw%¾ÇG·~ÕDUTÆJš^ÎI?zËïåW·ý½}ü¼Âëš6Zuûßém¼ü¿`ÛçÆ<]áÇøóñ[áN¯jZ5Ϋâo…W¾¾ðïŠ<(Q™"kÛÃ-Ò[:ùRÊm„rÒ£"íSÔü.ÿ‚Ù|#ø§ ø£V°°ñUŽ• ø*ÿâŸs+i×'Äz’ÆÓÝ[Ci{,ÖÎ{f÷éi9§îò²ûÁ;ìôßø{]øÝñKâ—ÅØü—#úw‹¦ÒÞÛI{‹i-%›u•…¼×R›iç‡}Ô“²¹ûçup~&ÿ‚Y_xö?ø™ð×àoÄÏë:v¹ðóVð?„|7âiôäѼ>—ª«M9/¥H@Ž%’âk—Xóíó´“iigeçïnõw¿-¾+®dÚѧO•ÔJ[9+¿-/kYZÜ×ÑkkG{û'ìíûcéÿ´Ä/xKRðoŽ|âoÙZjÿÙ¾'µ¶†mGL»yã¶¾€Û\N¾[½­ÂähçŒÇ‰"MËŸ6ý«þ3übýŸ~<ø*óÃþ-ø{«øgÇ>5Ò<3£øxjàkº…œÞZê7K¨ý»KXþÕzqj#H-й%·¯£~Ìÿ±äÂïS´´’K[xÓpÀ– Ÿ÷›|¶šßöMOöÑüuñ?âÄïYø[Y»ñ‡!Xè:øEà †ž´ñ–¤øÖ"·îežðMca;^@"–QÀ qÎþ}ô%—hT—êé>0jÿ޽áÿ…>©£ø„xVß[ÒuÝoH’oµÅÚΰBdŽD7Bð«Í20I#à àŽsö€ýŠ`ý¦¼7¢ø{âßÄ?ÞxFÛOwˆt8?³-íük?ö”±Ø‰ÐJGg-¬r+²Øv×_ârë>"ñV¡¦xÛÇ2ø›ÃÑx~ ; ØÏÃí¸"ÿO‰àaÙûB†wó‹xFÌ)ÝirÅÅë«ý~zémt¶Êí üÒMi¶ÿöïO+Júk~¶GÍ?³çíñ»ãŒþ9ü:Ѿ |:Ôµï‡Qh‹aâÛ¯‡º†—¥Üò\ÿhC.‹.¢&»‰!¶W·¹Šd†Fœ ’S •»ûþÜþ(ø‹ðsÇzçÅ [ψqx_âx;I¾ð§„®´ÍCRµ”X¯Ú¯4k™ÞâËìó^N%i6¿ÚU<·RÝw…?àŸ’øf?ê·_¾/jügi§i²xææM5.ÊÂy'·´´‚-5,/2{’ûí]¤ûCîc„Ù§ðïö²øuà_XYüFø›wâxžÏÅ~!ñ|—öpkzÕÅ©µT‚O³ÚÇm«[ØÁhÐÃ`üpîÒ í+Ëk%óæŽ«þÝRO®»Ës9GM;·çnW£ÿ·­mZÓhÞËŠý«þ3übýŸ~<ø*óÃþ-ø{«øgÇ>5Ò<3£øxjàkº…œÞZê7K¨ý»KXþÕzqj#H-й%·¯%ð³öÒø·â?‹¾ ñGŠÂÏð³â7Äÿü6³Ð!ѦTÑ£Ó¿µ"¶ÔžüÜ”˜Í6‰6ø¼•P—qmlÄL¾‡¬ÿÁ6á½ý´uŽ:ÆOŒ:?ˆõ¨m,dÒâ}óL´°ƒË-§Ù‹Ý.k‹+iÞ1$Éohó&ãÖÚ7ïFév|©Ù÷midÏ5ñ×íÛñ^OøËÆß¿áƒá_ßø_Á¾»Ñ¥›UÖâÕ#ÒZêý/ÖåR€ë¶å#ò]XYÊ¿z ]n»ñCãÇ‚à ~ø|¾>ømãø¥õ=XÑ­< u¦ßøkð+¤3Ë©Zd’f»šÊÙÙ“ÎÿHu"eW?àšñÆ+¿EâŸi>Öµ½+ÄÚïìf³OëÚ®˜¶ëew>ûV»B‚ÆÃtPÜÅ Ÿc‹Ì¿yæzwÃoÙÏDøiñâlîµmSÄ¿g³7×:„©'Ømm [ØZEò­Qšâp‡q2ÝÎåŽü ÷oï­ýØß^Îw’Mi«««cfé´ß½¦«mûwåÒý]üÇö¸øùñ Mý¡¾ü*ý›o¼%᛿i:¯‹|MâŸÙIm¡hÚ{ÚÂëol“Â$¹š{øi$Çs9B©ùÿâgükâßïÙÏÂ^(ø3âï_´<÷¿$ÑçÔ|²Ã­ø~ÓCºÕï †¯nßXÛcsQ‰å‰·$/šU>³ý¤¿d=3ö‡ñ'†|K¥ø£Åÿ¼uàáqâ \[Ç}mosåý¦ÖX®àžÖêÞS ÑOŠÝvº+sá‡ü×ß.ô-G\ñgŽ<[â-'ÇüAºÖu‰ì…γªK¤M£Ÿ´Emk Ù̪±Á?4(ı/½Ðq‚n[Û®©¾tÖŸËÉ£Öíßu+Çg(¶®´³ò –ýùši´ÒVÓÝ×çï†ß·ßÅßÛ_ö…ø«¤~É^$øsá_‡^Ð4Ïø/ÄzŸ†.|@Þ'²iõ;;¹LQê#{½9Ä2+c‹~J¥}Óþ …ñ+â¯Ç¿Ù;ÁŸÿiïx3[›âG‡4¯éöð¼ú2è‹sl'’ d–þçíDP Ü'iÝò÷~ý‘¼à¿‹úÇŒ|úLú¿„,<ý—f°Á¦XéöSÞM·#[çP™OÌSj  0Kn~Ο´ŸÙ“à‚¾ø ãQ»Ðü¡Ùè|÷ò$—SAk CLÑ¢+9XÁb¨ œà•4ùa .ºZú¿Šw×»\›Yn’JèέåQ5·Ýöaÿ·sï~—oC³¢Š*@*¶± ÕÆ‘u‡ü·øy­júµæ¯¬xƒ\×)w¨jMšÑÂE¤Ç*ù’\’Oëêž ŽoâÏÅ]'àÏ‚§×|bò X¤ŽŽ2¢Iå‘ÂG—ePY˜ ³*’ÄHã4oÚûÃþ#ðä7>Ó5­GV¹Õ[E‹F´6³ÝËr°ùìTœÛ”‘!M´ Ýò×iñOáŽñsÂ/¤xî Ab|¼ðû¿ÚîÓÇ»“áìwf¯¦jÚ,0]=­Öm¯oâ‡p{i¥æO9q¸:È££~Æš ¥¤Ö~%×õòcFfl(É8liß³Œ)¡Íaâox£\…îl.Ý›8Ú³¸[ˆñä[Fs"‡f Ìj•´íøüMýü¶]·K §v´ßþýoç±ßéŸñìßõÖOýÕb«éŸñìßõÖOýÕbŠ( Š(  ñÿÈVoúåóz±Uãÿ¬ßõÊ?æõb€>}ø×âÿ\~ÒWZ‡¯~".ÓÖ·âß±é¥Ög¹¹Fiêž Æ€?Âk«Ú6çJø»kðþã÷rxŠìAsfÓ^F"¹ÓJŸ6òGTù$’D0…%ŸfÒU‹'GãÙûÂÿ¼Yý»â(5hõch–-qa­ßiìð+³ª0¶™Ò9äÍ+þÏÞ—WmF])ŸRmBSí­y;] áËŒ‰Œ›ÂÊù`ì!œ;Û$4I?ë_òÿ-4iI]¶¾_rÿƒùë³ã¼1ûY6¹ñž Ýhq6¨]^ÙXêö70<ÖÊîRG{Xá ɇlSJU”†’1´Ú߯'¶ÑÛGøw§ùÞ#Фñš’x”(kXü¿3Î"Øìrf‹b¨|ïùŠ`ã¿ð÷ìËàÏ x¾ß\ÑtÛÈאַ..mõK¹-¬ä¸ç˜mÚSAüÙ €e³Øc[Fø1á¯#û#Mò°t§Ñ,Ò%o"Íü½Ñrçv|˜þfË|½y9†¥Ê­½¿?Öß+”íÌû_ðºý/ó<ë^ý­µ/샪x ªiV~³ñ…ü·²ÚË­À™¼¸ãòŸÌ”-» *ž…‡ËÔ?j)ü âo%´:íÆ³âH,´KIže†Úì{K© ašEA™ ’ÏÐ °ê¯?d ê¾/[].¤Ð­t ÓHŽúêD6²LÁgÙ0HD¨»%V!Îwé¼Kð ž+[Ïím6Uš÷PU{‹kÙí®"ºŽ%†X^F©û² ŒäœÛø›[~œßüŠ#[ëýiþwþ‘káGÄ)þ$ü<´Öõ="óD¹›ÍIl®UÕ£häd%K¢3#lܬQIVRTåº_í§ucá(¼Añ'Â'GÑõ Ïâm9­uE½žâ8L¢’?-lßi‹iÜÃæÚAÓ´Ÿ‚~ÑeÐä´µ½’o½Ì–2ÜjW7#\&iIÌ[qæBØÏ¦§À¯ ®¦éÒhÐËc¤éhV°K,’¢YJ"BÁ˜ï ‹–Ë|¼NT¯­¿­ëoĨô¿õ¯ùOâÚ‡Æ:Ï€ïeÐ<.4}^ÇXÑ ¼×Îê«Ô‰âYn¬£o3¬nD"ÊYˆ ^ù£Mws¤ÛI¯[Áizñ+O 3ã‰ñó*ÈUK€r\ú â­fo[xgQÒ&¶Ö.ìuD‚9–ó\¾ºxÖó!É,Ìðì˜Ê@=…vš.“ƒ¤[YXµÃÃiÄ<ïq+ä‘‹»z³ORMVšÿ] IÞìµER(ø»þ Kñ/âígðOÀßX"‘.žX•âxÄ¢iU!“Ù¿h¿Ø§á÷íSâ_ ë_­~×ÚwÃýCÁºf¹á¯éž¾ñ‰ªj7÷:¥¨$"õ—Jû ó®`M’ê+;,Ñ:ÂÛÕNV¡ÿ7ø‹ñFÓ<ð[E¿Ò¼eã?|=ðÅõ玅¤·º¾‘&¢%’î°“ì¶/“vÂey¦¡»ZÕÿà›¿5ßW>?Ôôqõû½nÏÄÓB¾*Õ£Ò¥ÕmºÁ¨6˜·BÌÜ…³¶S1‡s¬xbÁ›=nû$|=Òo|5q§øxG7„ÇÅ(ú>ƒâ=_Fº¾¼×u ;û™ÛP±½†(Ëov^Ù‹ÆæåH "Q]çˆÿ`O„)𦡡ê~ÓâÒ5-IðÃZÙÜOg¥†•4×lv‚ ì’[Ms,‘O—*6ƘÓkn7m.»y^Zy7w×_#KÑÆÚÛñæOò]-Õ[[£ö0ý¥µïÚgÀZÝïÄÏ_xZðö°úDð“y.Ÿ©3¥ÖŸq{gg<ð¸XË=´EfŠdÃßêÿ¾5xöwø«ûEéŸüQ¨ÁðÏâ_ˆín¼ªéº;h:¶…¦ë×GOµ’;½Šñ­£Q Ÿi}Ó„VR®q÷¯À¯Ù÷ÿ³§†.ôŸ‡Røžæû³}sq¯ø›Rñ ìò”Hò×z•Äó`,hoÚ1À9ó þ …ðO@ø¡7‹¢ð¶«}¨Í¯Ïâ¡e©ø£VÔ´X5i® ÓßC¤\ݽŒ7y2¬‘À¬Œr…MMãí£;{¶W^w‹oÏiuëmÒýÛ‹ßšÿ+IZû­ã·kî‘Æüÿ‚’ë?¾&øaî~ÛX|-øƒâ½sÁ^ñ$~"óõ[KJ•¯t³j‰km/ö>¤"’;©äù!ó"Í>_ àø*¯ÅŸ‰öžÿ„à‡^óâ_%ø‰á(o~#}2Ûìj[÷]5þË>uO%#@äÈÖûX üûü)ðÆÙ> øcÃ×ñkÿl½Ô­¡—]Ô'ÒtËËÐÂòòËJ’ᬬîgMæO1ÈþtÙcæÉ¿kÁ_±÷߇’ø1üáÑfÿ¼)?‚4öû™>Á£ÍöC-¯Ï)ó7gÚ~òMÒ+†›r•œ=ÝíøÚV¿{’í$¹oî§½^7ziu÷skÿ’é×^¶>eøçÿ£µø]àx×Á>·ñW‚u¿i:×R×R¿—Ä>Ó5]&–ÂÓK¸¶Š4ˆ;ù×—–q·•(Vù ®ÓÆ?¶ö¿ðÿâ׌<3ðË×޼I©|P·ð.‘§ë ·Ó4Û)[Âk{ãž;6’P±É½]nfó$•²˜à^ÅŸðIŸ€þ3¶Óíµo ë0iÚ†l<tûë67úU‚H–V÷¶Ö÷‰ï³J#’ádußÙLoÙ[ÀMñþ¶Ðâÿ 2øÃí_m¸ÿªé?ØÂãg™³þ>Ëñ/ÃÚü^&kë­V¤×/æÒl/îÇu}i¥<æÊÖîdi—Â’?›6æ&Y Ý6¢¢­ªµúßHsoüíIÿrþíîÂmJ2VÕÞÝ-¤”ðâÿ¿mmd{QRHQEW‘þßßµ¿ƒÿ°§Æü5¿}+Ä^ð>µªéw©HÖ—PXÍ,R‘Y«¢œ0 ãEzåa|Qøg¢|høiâüK²þÓð犴Û#T´ó¤‡íV·4RÇæFÊ鹆åeaœ‚4¤”“LÖ„ã ‘”•ÒjççÄoø)ÅÙÃÂÚχî{àGüÓáGìáã«_|1Ñ5¦ÕôËÒô™5Ÿjšä~³r»í´È¯îfO‰¶F [,jUHÚª”§É&ä¯ÿ ×¢½Óvµ›Ñ{‘0’½8õþ÷g¾ï•Ý+Þéjýé[Ú袊‚‚Š( Š( oâ瀯¾'|>Ô4O ø·Äž½½Ùåëz´:…–ÙÏ”/-î ù‚”;â•›8añWì]ñÇ ÿg+ÿŠß~(üJø±-×Ä‹¿†ðhš°Ñ­,m#>4>¶½Ce¦Ã)™"Há¤(çÌ ‰¹v}ó^[ªþÅ¿ u€ºÏÃ;¿ºø3^Õ.µ»«8µ+¸¦[ëEõ9.¡ºYDðJ/dk„x¤S…òöP#æµöüÕý.®¯Óq»I(½¯•ŸëcÇhŸø*8ø9ãMkÂðLšïŒ¡ñä~Ñíî/nb²¾“þë}zk»‰,ì®® Š;yÞ=±ÛNí"§ ŒÏ´þÌ5Ú/ö{Óü[¬xGTðN½vo-¦ÑuhæCŽĶåãibŠI-¥h|Øeh¢i!’71¡bƒŠƒþ ðbÛáý÷‡aÐ#ø7­é¾²øqñ7@¾·º¾‘o,­¡Žu²Ô¥¹ÓmíìïfŠxž4¶šú& qûÒ"Oxø5ÿìøSð'Æ–ÿ‚t¯Þê4Úé ¯ø¿Xñ®…©åȺ}¶£w46[£&2`D>Y)¤­qþ/ÿ‚S|;µøñ+ÁŸeñ„ŸÇ~Õ¼b—~$ÕõÃP_ÂÑ‘c£ÜÞ›[X‘ŠºB J/rVztvK£÷»ÝõŽ÷µžYŸ/:æZs+ë}=ÛúiÃTõ:¿Ù·ö­ñWÄßÞ*øyñëÀVñ.‰¢éþ(°];Ä#[¶¾Òïfº‚#,Ÿf€Ãt’XÌ$„,‘€ÈRi;|¿ö´Õ|mà/ÚïÀ–ß>1xÓTñ§Œ|M¥ÜEðÙ,ôÉt; C$1k—alþÕ B/>Eº’àféíá;¼¶÷OÙÃö<ð/ì®5IþÙëRêÚìvðêZ¶¹âG_Ô®â·VBo5+‰çX#ó%)qd* »ÊêŸðM„Z—í¯|Z·Ó|g¥ø÷Å767zÍö“ãíKƒV{$Xí…Í­üvÓG.ÑÄP†|©ÞÙ»Æ5a%²w~vwJÏ£Ú]Zº\¼ÞîjîœÓÝ«/'d›¿­Ú²ÓE­®ü?á7޾%x'öè¹¶ý¯üeñçÃzWŠ|}ªé^ÓþÇá¹|â E‚ââÒÔËom&§ Ÿg·¸”ä€1€ ÌNÖõïø)—‹þ&|;ø% ëÿ³Ÿ‹t¯ ¥‡‹´uï´i?mºÔ¬.5{+imí¤i[3,îFŽRT»‰©ð¿ìðÏÂWâ=¦ŸâmCÄö÷·š•—ö·‹u}SNÒn®Ã‹‰ìt뫹-,äu–TÝQ•Ij»)Ûý¦dï~×¾´ðÿÇH|Iu¤Y]Ç|i>)Õ42hÙ^6•ôë˜PŽˆê®YUÑ\ÊÂÒT¡¼mø[wÕ»]ììÖ÷ոʴæþ7¦Û¶ì¿•YÙjÚîô·ÇðU_ÚwâWìùãoŠ:ýŸŒ¾(xÃÞøs‰<ÞðDšîƒâ^9/d½ZºO¹ò"EƒOˆ£Ëj©ÌÓÊï‡ìñ'~)Å­èvZM÷‚tíK–×ZWŒ­®í.¦·Ôn–u’(¬fF!íBÛÊdhä2…Úv¸ªÿb‡ßÂÉñRÓÄž °ðŒAi¦ßx«U›M¾2´m©Yµ×“ª:´jÂKÄ· Ä“ÍnxŸölðw‹üQâÝk\ÓïÛTñLJâð¾±<µå¹ŸOŒÜŽ!Ê-Ü˃çB_™~‘6ÔU¢âõÕýÚÛ»»ºº½£m4ОkÉ=¶óþ[éµ’NÚ{ÜÎöѯ•?goøYÞ8øÉñïá¹ñwã.‹oáý;@»Ðµ?éú x±ç½[Ûý=¡±6rXÝ­¢CMI«sû¨€‹;¿°—ÇߊZ‡ÃoŠVºÅŒ~!ëžø•ƒa¡xºçLÒ|O¡èóÁ¦»É©ImÚKå¥ÍÕì^Q‘¦¶0¡s)e_Tð×üƒáO…<â­K²ñ¤‡Æ­fu}bëÇzí׈.ÎO2Ò4Öe½kèc…Ë2GèŠd“÷»O¿°GÂß|*¸ðn“¡j’éþ ¶ñUü÷ž!Ô¯5=ST·ž ẻÔf¸k»—Vµ¶\K+©Ž$ˆƒÙZA¨ÊïUd¶þô[~Z&´ÞûÆîÑ(ÝiÝ¿—+V¿]uÛKugË¿´Çü>-+þ à_ø_â_‚üàßøòßž-±Õ®-£Õü[yu¥ÜN±À“¸{kwk%7 ¤Ü\L"B‹ §øAñçâÿÅ?†ÿ%|dñOûÏIˆÒ4í.ɵ¨,žÐ¬à]#èpÊîÓ6ï´ÜPyoxßá~…ñPðí׌ì~Ùqá=Uu­)üé#û-ÚÃ4\#ÿ»¹™v¾åùóŒ€Gø[öøYàϲüKðö‰šúëU†)5Ëù´› û¤1Ý_ZiO9²µ»™A%Ä0¤æÍ¹‰–BñGÜIKW{ß}- «t»R³»pOFîÍ+rÎü«N[[³ýåúÛš ­šÕ$•ùoø(õßü" ñV©ñ§Çÿ ,tˆç´µ±ð•¦sâRãbXÚÅÕÌ·3ùŠË­¸V•¥ÃnUÅ|Ññƒã?í ©øÇW~0øsðïÇ?>è~>Ô´Í=¬5¯\G©Íy '†BÖ`èÞ@H^5ÅÄÌp£úÿöšý¾~×¾9ð‰þ8é^!ŸÄ^cÃÚžâÍ_Ã÷z_Ú‘àÇ.›wfDP’IÛ0Ëø“ÿÔø?ñu4ø‰¢x‹SþÁÒ£ÐXÉâí`6¹§G'š–ZË ½ÚŸ»yWæáI’\Þɏޒ¿¼Þ~[)YÛí6ÝÚzi|õsCš-«¥ºÚþô[W[hšO}ZÙéóOioŠZï‰þ"|Wðçµ=Føgñ7Áþ ³ð\IbÚF§§jhM~oH Á¹s¯Ìce•6[}ªAIèz†ñ Jÿ‚šxGÂ_ þ9|Qñ&“i ç­-Œ¶yuyuq$÷rIä€yï T-6ºTÓæÞÚu»çRM§²Q\¶[ÛWiI¹¦ÕÕÕž›}™-Ö¿½Þ«d¯³ã‚?´ÅoÛ÷öø©6“ñC⿆מ Ñ|oðþÏEÒ´Ë]V ¸Õ¬Œ—ƒR±¹%oÃíA +,f ᾇÿ‚JEã/þÄŸ¾!üqøŸã_ˆÚ÷Äß hÞ!ºMr2+}&yíic²K+r#f›¤Í+‹†ë»Ü?áHx_þ®±ãì±ÿ F¿¢[ørþ÷íÿ¤X[Ëq40ù{üµÛ%åËoU |Ì (~ü)Ð>ü+ðç‚~XexcÂZe¾¤ÙyòOöKX#X¢Ì•šGÚˆ£s³1ÆI'ššn0„£m]­×Ni·«êӆݞÊ×ίï*)-¾ï³·ne&®Þ_]º*(¢¤«k/ªiVÖ×SÙIq Ä—mó`,¤MÀÃ9dr Y¢“WVvw>e—â¿Ä]SÀ:¹Öo_FºøS ê7·$,ºî¬°ŠåA ²%ƒÉ˜&/pT‚#æÞ—ªüC“á§wà÷ø«s¬M Œ¤ë0èåÄ *–ÓÖ ¦ ¬Ü}Üs^Ùsð—ÃךW‰ì®týÖ¾2gma<ùÛ À°1Èl¦bäÛÓ=rkßö_ð}¿‡ît±¿-•Ï“”ŸÄz”Æ ‡‰¡g¸- +AŒ©ã8£Wño§ß«'}<´ÐMk¦ÚýÚ[ð_y™û6x¦=Vë]Óω Ñ<;k¤ØhÀéövÚdQKw<ßè÷’,—(ÌîKùŽŠK1,1Á5ÐøCÁVð¼>†/$°·VD[Ëɯ$ÚI;L“»;p$€04í$·é÷¿Ñ¡o$Þ×vŸäϵN³câ[_øïI}Âà{ïÙXÛj?kžýö^SM–‰Û%(yóˆÝÁÍýWöŠ×ügà{Áu¢_x^ûOÖô6ïrÖ÷PÜêPÇ$K%Å´ \(t‘BÚêCÜw~ý”ü áIîßLÑç™o4Ù4g†óQº»‚;)3[G Ò²GU~TQŒ`qVôOÙÏš›-¤6úµÜËi.Ûíjöô¡µ˜MnÍ3Tµp0ÀŽ*•—/eÿÉ7ùY§ªvßþ_æv:gü{7ýu“ÿF5Xªúgü{7ýu“ÿF5X¤0¢Š(¢Š(¼ò›þ¹GüÞ¬Uicž;×’Ù"utUùœ©=”ÿz—̺ÿž6ÿ÷øÿñâ7Ÿ´gŒµ/Z¶—á Î_øw\µÑo„ñ¢Lë*ÄÏqö‡ºO+pR?"O0!Ál,þ ý¦µ}sãF±àýy|;lž’òãPÕ"iBÚ5FHí#ÜHž/5À%ÄepóÏFÖ¾ø{Äž+·×¼Cá? _ëv… …ŬrÝBPå ÊÑO#ƒÒ¬ÚøJ±[²ðç‡ádÒÜY„…ZI.ï5âÄ#>÷ÜW·6s“R®¢—[?¾Ë_¾îß+ØnÍ¿—Ý®Ÿv—ùîx7†l?6•â;éÚMÌ1x.ëÅÚ%ÚÙ}‰nV¸¼žCù‘²³ù pÃgqsÅß¾'x)ü[ý¤Þ¹ÿ„3FµñЊÊí>ׯ\ÛFLçk¨·—÷Ç å?v9Ç­h_<%áx¯Ã^ðvžšŒ[]­½„1 ˜dÆøäÛܵr§ àqÅkßø6ÃTûwöž…¡ÜÿiÛ-盿Úà]Ûb—1üè7¾ä ÍÇ&«ªþ»ÿÀõ·˜·×—ù?KùQãÚ Åžñ¯ˆ¦±ÿ„]¼;á¯išØÉ ÇS¿û\v„´r B+)»$ ¸#—<ŽñÏÅ^’ ü0±ŽïRÕ5jâêÔ]©H5iPCmuo“ûÀK EQ„lå}—Gø  éuo\èz=ÿˆ5K´»K먣’âÄ­¼P‚_'z.سŒõwõÅhø‹á‡|_¥%‡Šü#ámJÊ;™/ÞêÒ9bYäbÒJ¢ ;31fêKç&¥'e¯¯Ü¿UÃazÿ[þõÜçü]û@7ƒ~\ø£W³²ÿ„ŽÓÿÛrè‘_$̇`Ýó!;¢W;LªÀÍrZ×Çÿø6ÛÄ:V¤Þ×5ý4èRÙÝZE=µ‹®¥yöo*h̲º2lgîWC³Œ7¬Úø K±–9,¼; BðØÿeÆÉ )KLçìàˆø‹ ~ïîûUO|%ð÷„´i4ß xKÂúvŸ-Â]½µµ¬qBó#+$¥ «"ØÈ*¤c©ë+ôÿƒþV²’ßþþÞyÅÚ?ljmînü k}à­Z÷í6“…ÖÞy&Åh¦áLaV¥É´ŒP:ý‡r{Šòߎ?³%—ÇíjÎãÆw ––Ðýíb‚Í̈X³¸–Ñî!/±ŠDÊŒkÒÄ—@`CoÇý6oþ"šÛ]õ)Úú[Á,QUü˯ùãoÿÿG™uÿdÍŸ*¬L1‰²6òߌ?·'Œb¯ü*øM¤øÁèßôK+ ïPñ=EÔV¯6½¨\?Ÿ{g1¸Ž;k‚b’âí³3 £ú“ã—ì­ðãöžM5i_…ÿ>!®Œd:xñ6‰k« &ß3ÉûLåïòãÝ·عβ·Ã+ÂZ–¥ü/øqm¡k:U¾…¨i±h–©i}§[‰½”Ј6IošP°(žcíqʦ¹,žÉÝ®ë]<·Zë·b¦Ô¶ÞÖO³º×ÏÓEùŸ0ü^ÿ‚|@ø}ûeZè¾³Ð<[ðºÏÇú?ý¬ëz]õî“φu»]&W´³KØd\4²Ë¶Iɉ%¤(Cù\ŸðSOéö÷ß|-áèF¹ñáÂȬ4™îãJÑïuÍ{[³7LH°¡™fH Â8Ëàéõ÷Æ/ø''Âo¿ü#­|`øyà¯iž ³Ö`±ð楣Ù^h­>©uiuszÖÓZ°^m™"U*OÚ® n/‘éž$ø)á_Øë¾.ðWƒõ[oiQèZ¬W–ΚžŸ”Çgp¯ Û¡¸œ¬O”t˜se¹E¶í»½¼¯-/Òñih´µ÷4抃ŠZÚ×ìù“NÝmn»í±ÃþÄŸ~'|IðOˆàý«t-/Hñ‡µ·Ó­®¬!ŠÉ5«Cmñܵ‚_^µ‹†žHL/s)o#Í,ª«ðG‰VO‡ÿ³gÄÿŽ~ø¡ñLøÏáߌ¾$³ðÞ•7Žõ[½;Åímâ[›[_aÍtÖŽ—0„µAã,’©J> |ðoìÝá'Ð?gx/Àz“µÓéÞÓáÓ-^f ­+E*¥ÈEˆÉ 9â±|)ûü*ð'Ż߸áÂíÇš”³OwâKÙÛê÷RLÛ¦y/ÜJí#X–%'57J´jtIykx¶ô}yZ}5ÚÞé þíÅïÍ+ZJßù2-ïf|íð;þ ñ'âÅj¾+‹áô¾(xóÄþÒü9Ô>%ðüÚ2ê¤^Ý]½ËCt$:$ÞeºÚÀa~öM‡ÍâþþÝ?´×Æ;†ÐèW_t›ßŒ_ ®>&èï?‡µ[˜¼=§öp–ÎåF †õ§:¬%eCn òän>R~ÌðÿìÉðÿÂõoˆžøoà 7Çúô&ßRñ-®“o¯¨Fve&¼XD²)òãÈf ùkŸº1«¢üðφ›F>ðo„´óáÍ)ô-$ÛYEö^œþVû+}±&ݾÍo˜S|˜ò>E–°²ÑÚÞŽÒ·¯¼âîú'·®hÝéÕ}Ü×~žï»§®çÁŸ¿à±_4…ø‹ðDÐ5#Oøuáψž7ðÄÚ){.×VW•u‰µkXã-Sˆã‚ÊþfxNcùÑO§xËö¤ñׇþ>xÃÁÿ³ý§…l5ÿüc¶ð\z—ˆäÔµK+XÏ`ÖM×ÙékqÙíÚŸ–;d’I»x·öø;ãí_CÔÿÄž;ñ'„çø)ðJÃÅþwˆ/t¨´ýVIõ©$Ôy/›¦iÐí•e]»£Ù‰˜?èg™uÿŸíZþµ¥ÛßÜèÒîGßk,гBÛ¢‰²„sª1 _É÷ê´jëÍZÙšSšƒ÷£u¦šm?&•Ÿ¯Utð?ioÚ'Qø ûjþ9‹OKß&ÞJsåikw†;{!»î™¯n-áç¦þzV÷À/‚7??f? ø ¼Eª_êZ…›qâ ÜM{yv"Ä×Ìe W”¼ÇpeÜÜ‚8«ÿ¾ißµ Ïã‹SpžÖâñ Œ zé—qE,p´È¬fc*«p%Ž'ûȤtº“k|öš½Õ¥Ôm ÐÌûã™ÊÊS ¤<iÔ´ÕM-ÌûôKK=Ó»•íÑEëel©§M7~U«îúÝlì’jýe%ëùÜ5oøþ £âø“⌵«›Ž‡ÁzÏŒ/õ6‡WþÉ»ñ¬67'íVÁ¡6“¼Jð–ãË]¿AÿÁ<í‚~%þОðÞµªë>ðŽ­ìôÔ5;N]!.4M2òâÄ]\»ÈËÍÌλyb}ƒ ª«èžý‰þ|)ðW‰<5ð»àß xsÆ0}›_Ò´¯YYYk‘mdòï ŠÝRávÉ"í0ðîkªøEðoÃ_³ÿm|/ð'Áþðg†¬YÞßJÐí#Óì gbîË 1*Ìʼn$’O4é¾Hr½]’okÙAZÛY8¶ºÞo¥ïRjR”’²r“Kµå'§š‹éd¾]u_̺ÿž6ÿ÷øÿñy—_óÆßþÿþ"‹ù±û@ëz”ß~3üG›ÆÞ%°ñ×Ã_~ ð…tèuëØ,¡Ò®Ó@Ù6˜’.àÕµMÎñ¹c°†1þù—_óÆßþÿþ"¸o~ÌþñgÆ+âGŠ>ø Rø…¡Aöm;Ä×Z]¼ºÅ„XpÆ„Ë, `˜ÿÞ9pj3Skþ½uçdã®–“½ön땦¿àèô~Zß½Ò8_ø(׌õK/Ùñ|ðÒúëNñ—Æ=Rè—6’ùWV&ð?Û/alŒ=¦Ÿ¡z;æÔÉéþ6øk&«ðnëÂ~ñ±à†:zéö:¾– ’÷JUPªðýª9b.p ˆã¾3Px›àöâÿ‹>ñŸˆ-MƱàÛkë})MëýžÝ®Ö$–o+fo.ÈyTšeHÙÕñß´ÏŠ^Ô|;ñ7Ãúˆü?¬BÖ×úf©^YÞÄÝcšc)"žêÀƒYÎ<Ôå¯å¥¬–µiïï>ÃOÞ‹è¾z·«¶ÚÙ+yoÛà_ßê¿aÿØ_Á¿¼eâ{â³k¦x·S:Ýݶ¡âo ê—‘[Ï ‚lÍwel\y€Ë´ÆI U¾Œÿ‚\k÷º¯ìǨéúŽ»¨xŸOð·¼QáÍT¾¼–úâçM±Öï-­K©‹Ipb†$‡Íffo'%˜ågiû|!Óþ ßü7Ó~|)µøyªÜ‹ÛÏ AáÛ8ô{«€Q„ÒY­¸…¤(ˆr»N~QŽóÁ ÓþøCMð÷ÃDÐ4Ý-4ý7Nmm,aA„ŠcŒ$h @V·Ý÷ßÍé«óVit³z'{Ì­$’­ø%ͧ£æMõ¼VêÖÝ¢«ù—_óÆßþÿþ"2ëþxÛÿßãÿÄTbНæ]ÏûüøŠ<˯ùãoÿÿ@+Å?à¤þ!Ô<#ÿîøïªøJþûJÕtχÚõÕí”ïosi2ió²K¨C#«Á”‚W±ù—_óÆßþÿþ"¨x£ÃvÞ8ðÖ¡¢ø×HÒ5W¶’ÎúÂô ‹kØ$R’E,OY•в° ‚A¥$¤šf´f©TŒÚÑ4ÏÊß?´çÄÿÙfã_øWaâß_üBø7ð£Æúç‡uˉ®æñ%¶Ÿ&«\ÆK-åÅ›¥å£´Ý¤²’Lbã î~ øeáïÙKö¢ý—ì»ñGÆþ1âd:Ž—âK][Æ—Þ%‹ÅÚRi7Ëâ[‰åHåŽö8þÓDÛ¨ù] J¿j]|;Ñï¼gaâKß xvoéVSiÖZ£Û£^ÙÚÌÈÒÁæ-é´1E!XÆ„ƒ´c—ø=û&|4ýž|I¬k?þü8ðF¯âù _h:-¶q¨üÅÿ$+Ióß1<’zšÒ”Ý6Ûë×Ñ5øÞîÖÖú|<¸IsSŒ;_ñ³¿ýºÓå½ô²ÓÞæôª*¿™uÿïÑ2ëþxÛÿßãÿÄW)©| ð–±ðßUðn­à\øG]{™5-K[NÔægžá¦¶1yr4³I$®YIwvfÉ$ÕB^Íó%®Ÿ=U×ÍièÆí$£-“¿àÿ[?‘òíÿ2ñLJþ'ë>ø£øvó\ºøªŸ´mY­?´íìÑ<+o®Í$ö¦úÑnnL=²B.­ñÃÍŽO£¿e¿‰^7ø£û6Úë´“¥øCƱ½ý•üv³E%ª5½ÌÐGv'™`YcŠ9Í»M+CæžGd,c‹ö$øCÂKÿAðsáRxUž+«ß¯‡¬Æ•y4IE,¶¢ßÊy UÙIQFÑŽËá¿ÂÝàß,¼-ð‡Âžð¯†tähí4Ö;Uf,Â8"‰Qff ’Äž´¦“§(-ÚZù¨¤ß•ÝßÏÈ9›”]´_æþý-÷y³óûö/Ô®eÿˆ àý§ô¯‰z¯ÄŸhúˆÆšÅ9ü[áo‰PØÏwq!ÓåºW„I q,R(Ç M‚ªú¿¿à¨.Ô5ÿ€_ >ø#]ÕÅ{¨è ¦›uv…·•’X Vu,N ë\·ŽàœüMà‰Ú_‚þøÀº·ÅÍ QÐþÍÞý—ü->‹û9|?ð?€ô«¹¾Óskáí2ßK†êmªžt±ÛŠòEˆÎ€W?âÏØOàÇ>+7 ý‘¾ü6ø»ª|@øwð«á¶ƒã½pÌuéÚ%­®«|f}ó®ã€K!‘Àg,Çqœ‘Wþ7~;ý¦tk-7öøsàˆ:v›1¹´µñ.“o«Ck)R¦HÒæTb¤ÀƒŠçåj” ·­òµ½^—oíuë}[‹­:U&ïçvÛôZÙ+¾^¢øcþ Þ9øa©üWø‹ªØ|Y¼Ð4_‡V§áÞ­àÏÁ¥ZøSÄ1ÏxÒË{a&¥jo%šVÒ‚(†ïÍŽ) HË9Žo±'Öu¯ˆZ—Šü-ñc^ð¾‰á«¯YËrºV³>Ÿâ&æä]Gwq+£/Ù ‘ù£G9ÈØ¦¶õÙgáÖ¯â_k:¯Ã/‡—:¿Ãëu´ð½ìº=³ÜxnV; ­TP" ­wà÷†¼Q¨ë·ž&ðw„µ¿ék¡ëSÝYE4š¾ž¾nÛ;¦h‰žÜ}¢ã>PyÒqó6m%¸Úé·úþ.êþ‹Was9IIé¶«³»•ÛüOkéñÏì‹ð×WÑ?iÏÚGáG†üYão‡Vqø{Ã×:v¾3¸ñœš\I©D5ˆnõ,øÑ¥|HñGßj_´(>ͧxšëK·—X°‹CxЙcP%”¬óûÇ=/‡|§øBÿW»ð–ƒ¡éw^ ¼þÑÕ&´`“Rºò£‡Ï¸dŒeò¡†=ï–Û.p  æâÒµº.ü±Wï«NnÎÜÖViÊøòÞ›ƒwnÚõÞþ›{«­›Öé.~Ý,>&þÛÿ>|IñG‰<=à [Cñˆ›JÑuÉt9üs¬Ù5ŠZiMw°»¢Ãu{tmD¨%6êϺ8œš¼|šÿ>øGÁß±_ˆþ8ü5ñv“ñÞ{HôxÄkiš—ƒîõ{}"kËkûÓq¤O46O,s)ÅÍ€"§éÆ‚~ý¡¼/†þ>x+Â>7ðôò$Òišõ”Z›È‡(æâdܧØÈíTþ~ÍþøMáDøYðïÀ~Ѽ1{&££ØézU½¶•u$rÅ%Å´qÂZ9çF‘b²È !Ž] ª)÷¶wçRRwÓD¹Rµ¬“ÓU-œîÓjé'£ÛXÊ>»»Ý4õ~Vøàƒ|_ûd~×_nÿlkŸŠž²ñ/ÃýÇ' ñ†© Mà…û^·e.t˨XM,6‰qÿ„'Nÿ„ªó]þÀп·5 (ôÛ­GÊ_µÜÚÆò ñNƒ§i>'ðö§¥‹Iot½K\þ×··‰v=¼Þt¥w„bÈJŸ•ÑœŸa¬xLøq¥µ—ÃïèZœŽeh,"[hÙȱTŒpÏ^kù—_óÆßþÿþ"©»‚V8¯ÚCâÅïÁ¯†mªøvÎ;Ûû›ë]:ÜJ3 /q2Ä$@UwçÐ1Âî\î-§Ç¯›mCÖôýHñ&·¯Ë¤Á¨^Ûÿ¢%ºZ¯6KH®’V ѬF~HßœµìºÞŽž&Òn4ÿiºn¡av†9í®O› Êz«£! =ˆ®u>øJ/ I Eà.‡,âåôõ±ˆ[< $1ù[Kà»À©I«ßúÛþßn…>Ÿ×øqóŸü'Úî™ðS¤êl¿‡|k|5[{‹”¼šå T›ìcvÞÑá6¶7úwþ¥¥ü6Kÿ\Øê÷¶ö¯s$š]»Åêe£É#Û÷ÎOhÚ&og£xgÖ–––óZA6ñÇ0ÌÁ¦‰E…IT²Ž€NqV¼-á[Ohpéž Ñ´#M·,bµ³cÜK6ÔHÀ$“Ç$šv’O_ø/§Í í)>ïñ·_‘óbþÐþ$Òõ«Oˆ>-}Tþj ²Ñô¥–?²«\Y2Gq#Èþa€e 6ËòñÆæ¹ñ7Æ~+ðÔl­-D߆îl¯-#KCr“j°CÝÜ£`Ä›ÀpøÚ6œû†þxgÁºåáM.óPGŠê{K8¡–á‚Èì±ÊHƒÁ"›áÏ‚Þð}¬ðxOÁžÓ º–)æŽÖÊ(VY"}ñ;ˆQÀe'îžF R²·eÿÉ9~©_ËÌS÷–›ÿÀKôzy>™ÿÍÿ]dÿÑV*^ |O·qvbä ±=qïSRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|Ûímâ1|Smâk]&+•Öž?L‘?—wg²ºuÌrÜÍ(ùdL§)-d£ÕƒÑ\úJŠò]öÊð§‰> 7‡ôhµ ‰džêÎÒæ9-/®-•ÚX’%˜ÎŸê¥ òFˆÅåK:ÛöÍð]ðUÓßR¸žM/OÕb‚8É2ÞËQD£wúÐÓÛïRFÑ2œðGß·/_ø/ò@ýÛß§ùÛóÐõŠ+οh_øƒÂ­àí?áÅæ›§ÞøŸ^M)î¯lšñ ŒÛ\JXD²Ç“˜T}áÔ×3¢þÒú¿‚üSªxCâÞ–5¿[^Á—‡  rÞx¥•%T¸›lÚãÌ.ѳ‚w();ßîü¿Íü?Ë_ò=®Šò»ÏÚÃJV7‡ü9âÝbóY‚úa§ÚÚB.l”©ÒN%™9o C…'+ºO~ÕzOŽ­§h>'·ŽMüC¦½Õ¼1 fÑ †k|Ëòœ¼|Kåñ"ŸºsEÓÛúßüŸÜÃúþ¾ôz…ãZí¡|FðƧqàù®tëÍWÒôûÈäK]Gh»ºŠ$ÚÖ×-Ô°”´dPà+nxwö›Ó ðí΋6› ð} ^¸ñ¹iTîš\~éþNaO.ßbŒöx²N}bŠ–·Oøô_p=o~¿ðÍýç%ñká¿Å«m\êÚÆ‰u ê+ªYÝé­š9„REÈš)®ÙŸ‚¾•Ì/ì—¢À±^Øë~$ÅQ_KþWžõ7—Êhv·™Bbò¤tÂrkÕ(¢Öþ½?É}Áý_{8/ ~Îú/„_J’ÊïW¸ŸL³Ôm ׫½ã_Í÷3Ìv ÈÒDmÚ£s ¸Àz—ì“áWÁ6íÖ²ÖZw…åðœL'ŒHmd0#  ÛFAÆÞ[*AÀõ)Y_?óx'Êî¿­¿É_¤þËm¯öœšÿˆ|K¬Ýê³isMqtÖ¨Pi÷h·Ž4†DMĆP¼‚pA%«sNø¤iÙg¸ÔOö.¿yâ(7HŸ=Å×Ú|Ä“˜ÇÛ%ÚÚ¹cƒžÒŠ~×OòBåV·õÛõ (¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@VÄ[¨h‘#Í{†Ýkw-³Ÿ•¸-)#ž™ÇOA@ôW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW–ÿÂ1ý|EÿƒËßþ=Gü#ÿÐGÄ_ø<½ÿãÔêTW– FßwQñ Çk·¿üz—þˆÿè#â/ü^ÿñêõ*+ËO†cuàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÄôñþ/øõz•å¿ðŒGÿAàò÷ÿQÿÌyÇöˆ³ÿaËßþ=@¥Eyoü#ÿÐGÄ_ø<½ÿãÔÂ1ý|EÿƒËßþ=@¥EyiðÌ`dê>"ÿÁåïÿ£þˆÿè#â/ü^ÿñêõ*+Ëáþ‚>"ÿÁåïÿ£þˆÿè#â/ü^ÿñêõ*+ËO†c'Qñþ/øõðŒGÿAàò÷ÿP©Q^[ÿÄôñþ/øõðŒGÿAàò÷ÿP©Q^[ÿÄôñþ/øõðŒÇŸùø‹ÿ—¿üz€=JŠòÑá˜ÏMGÄ_ø<½ÿãÔÂ1ý|EÿƒËßþ=@¥Eyoü#ÿÐGÄ_ø<½ÿãÔÂ1ý|EÿƒËßþ=@¥EyiðÌc®£â/ü^ÿñê?áþ‚>"ÿÁåïÿ R¢¼´øf1×Qñþ/øõÃ1¨%µ:ŸíÛßþ=@¥Eyoü#1žšˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„f<ãûGÄYÿ°åïÿ R¢¼·þˆÿè#â/ü^ÿñê?áþ‚>"ÿÁåïÿ R¢¼·þˆÿè#â/ü^ÿñê?áþ‚>"ÿÁåïÿ R¢¼·þˆÿè#â/ü^ÿñê?áþ‚>"ÿÁåïÿ R¢¼·þˆÿè#â/ü^ÿñê?áþ‚>"ÿÁåïÿ R¢¼·þˆÿè#â/ü^ÿñê?áþ‚>"ÿÁåïÿ R¢¼·þˆÿè#â/ü^ÿñê?áŒôÔ|EÿƒËßþ=@¥Eyoü#ÿÐGÄ_ø<½ÿãÔÂ1ý|EÿƒËßþ=@¥Eyoü#ÿÐGÄ_ø<½ÿãÔÂ3ý|EÿƒËßþ=@¥Eyoü#ÿÐGÄ_ø<½ÿãÔÂ1ý|EÿƒËßþ=@¥Eyoü#ÿÐGÄ_ø<½ÿãÔÂ1ý|EÿƒËßþ=@¥Eyoü#ÿÐGÄ_ø<½ÿãÔÂ1ý|EÿƒËßþ=@¥EyiðÌc®£â.ê9{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨ>ŒGÄ\uÿ‰íïù€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿǨÿ„b?úø‹ÿ—¿üz€=JŠòßøF#ÿ ˆ¿ðy{ÿÇ«¾ð]¨³ðÍ´k%Ì¡w|óÎóÈ~v<¼„±üOŽ”©EPXþ6ÿTõÔ&­ŠÍñE„ÚŽž‰f›ØHŒÆ¯Ö€9àþ:xNçÆ+á«K 6ÓUA©»Íà³*ýŽä”¢±1L}í£ kÓ?á¿ÿžøúÿð‹_ÿÏü}Æ“WÜ/cç†Ô¼wà»C¤iÚž·u}¦†²-.‰$öBÕ-?wv³$NòJÓ7ÈFæ6Û¸ÚÐo¿ãC\Ûöý¿ã÷ýÃNÛ_×õÜùƒÁzgŒ~øzÖ‡ÚEáÔeÒ4é^'Ñ".eh®Zág™R<ìV>…ñGÄ·Ö”qê~ ¸6ÑéO}$º—má½=2éüÉ­ÖÍÁÜѵÊ9#°¤´¿õòôÕ†Ýÿ¯ëúÞç‡Oñ+ÆÚ¯†´kŸ ^j-k1¿U¿þÌ3Iq,W)q’•R‚B¬99ùÔŒWCðÊ÷[×þ.A{âñ®‹}?Q‚â+0ÛÙX1º·òã·›Ê_82G»&I2#nH¯d±ðEÆ™g¶›e½¼#Ž(Š"F `*¨8Â¥ÿ„Zÿþxãëþ5KG_Çúþº§ª<ƾ=ñ¼_5{o bÒÆ4žĺL—pE¶cž6ŠÓœ¾@Q,Ç“˜øÚ:}ÅÚó| ¾Ô®­5ɵ˜#¸X–HÕnæ!Ø$ˆ¿eN1†· @ûŒO>¥ÿµÿüðÿÇ×ühÿ„Zÿþxãëþ4º[ÊßðGÖþÒ>cñŠ¿ãGü"×ÿóÃÿ_ñ¤¶³òþ¾cëtyž‹}­ÙYø‡IñúÕü†üØéš²A##Ú$žcãXÂ,†EÞWh )Éëæškø›EÓ¼{f¾)/m ?U½“Hy.ôüÜY‰"0üì¡))!*¬ÿ¼Á'éøE¯ÿç‡þ>¿ãGü"×ÿóÃÿ_ñ¡hÓôü_ÝÇ}-ý[Xóï—"šß‰d¾¾—uí·Ùî%W¼™Õäjì,¬T|Ü]hÂ-ÿ¿ãS%Ìšvw>qÒü§ÝøÃöþÐüG¥xº)¬ÿµu'Ò§™¤–iʸmÀº¿ï‘…È7¼Gâÿˆz}„òjpˆ¤¿‡í§LižîH®Š[ùñÃi)ЀÙUˆ>I¼ úþkÿùáÿ¯øÑÿµÿüðÿÇ×üj¯¯ÎþZÙ~„Øù÷Ä·Þ*ñ7‡ˆt×/µûmfÒs¥\ifßOµ1ß¡CÊ×b‚ϾO—-òô¾9Òuoˆô{MHêò^Þê¶I©¤šdi Oµ§œGO)9 üêU,êIoeÿ„Zÿþxãëþ4Â-ÿ¿ãKWuî.·<Oñ÷‹oõÍ"Ú[½i55±Ñ¦žÂ=!Ló1ûYº—ÊýÆÔV!wÆA^tªÑx‡ÄïâKý^ößÄ÷Z¥†©ÂÖÃJò ±”ÜÛˆ’ÖSnÂl¢oÉ3ä&Bó¶½ú?\Åu$ñYƳLd ás´œœdãÓ&¤ÿ„Zÿþxãëþ4ÛÖþ¿Š·à ü¿çêÞ3Ô"›ÄR¬vº¥ }1¢†ñÃ[É ÜnµŒÆ­™¤Yò€e·ö³ïˆ§â{kí?_Õ{©lu¬l.|³É–èá£;¾q—Ú»x ïÿð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãD½àZ7êþ/ñݲA¨Çg©Ù]Ýil·ŸeÑŸíWsyW&HVAi8FP쑱¹7döŸcñ>¥áˆe·[‹;mGO¹ß¦¹Ô1¿ãGü"×ÿóÃÿ_ñ¡ï;ŽûzXñ¸|ye Ë)kdV#*dñµkØ?á¿ÿžøúÿEÿ=ÇÛר¢ûIÊó~Mû3»³œgœRjö_Ößç«ÿ-û¿ëúþ·Ôð¿ |IñV™¨ØÜk£Å:–ŠV}$Þt¹†éà¸2BÅv‰dKp+_F:Oë>(»1j^7›U†ÖÃB³ºšÆ=5CÞ\¼2×7—V û´Á ßê¿ð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãTÝïýwÿ?ÈHðÍWWñ½ñRÊO']y4ÝJâ[;ÒÌzrAý0Šfºò³½¤“aQ‚Åv2að¶¹ãê–6Qjž&·°¸HžòþçDŠÚâÚãÈ¥Hyjén•~\¨víï?ð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ãRÖ–òþ¿àÿ–ƒ¿õý_=OxçEð{˪˯ÝÜßéÚeÑ’=9M2y^ApЉk)eEXò†9näŒäQðMïŽüMâ;EÕ©£ûhóRGŽ9ä/±¹¦‡’¶ç ƒg »ëè_øE¯ÿç‡þ>¿ãGü"×ÿóÃÿ_ñ§-SBZ3Äüg­kÞ%øAáÃ}ˆ´ýn¤êZœ–Zs4ˆ¦dO-·:aœÄÊ•$KÇ‘øŽ)¿ãH”¬¬gÑZð‹_ÿÏü}ÆøE¯ÿç‡þ>¿ã@Ìú+Cþkÿùáÿ¯øÑÿµÿüðÿÇ×üh>ŠÐÿ„Zÿþxãëþ4Â-ÿ¿ãGü"×ÿóÃÿ_ñ  ú+Cþkÿùáÿ¯øÑÿµÿüðÿÇ×üh>ŠÐÿ„Zÿþxãëþ4Â-ÿ¿ãGü"×ÿóÃÿ_ñ  úì<-ÿ (?à_ú®þkÿùáÿ¯ø×I ZÉe¤ÅÒíuÎFAÇÌOj¹EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\ß„|#¤ÜøSK’çKÓ¤’KH™™­³€’Išé+ÎüEÿ N¯àGøoØG`†ûZ}>%r–ñ;eî8Faå¦ 1$pÿ„ƒDÕ¾(GáÏhMúX3 jôÅC§±‰ž;t;O›pÇcÇÜ,ÄÊå¾ü%Ö<9ã ÞkKKU¹{[W¿I"ðÜlŒ ¹ Íy©\<™–s”TiUd$“9@ÿÙpostfixadmin-3.0.2/DOCUMENTS/screenshots/README.txt0000664000175000017500000000013210715711016020555 0ustar daviddavidRandom Screenshots taken on 2007/09/25, using a version of Postfixadmin from subversion. postfixadmin-3.0.2/DOCUMENTS/screenshots/postfixadmin-inital-welcome.jpg0000664000175000017500000043415310676263533025227 0ustar daviddavidÿØÿàJFIFÿíPhotoshop 3.08BIMÿâøICC_PROFILEèapplmntrRGB XYZ × :acspAPPLöÖÓ-applrXYZ,gXYZ@bXYZTwtpthchad|,rTRC¨gTRC¸bTRCÈvcgtØndinì>desc,ddscmþmmod(cprt¸-XYZ q0D¼eXYZ a¹¡˜)(XYZ #íÇš˜XYZ óRÏsf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlcurvÍcurvÍcurvÍvcgtu” ! ¡ ! ·>œ“ ›%¤&œs ì"]#×%Q&Ê(@)¾+5,›-ï/V0Á263¡5 6}7ä9M:©;î=L>¨@AeB¿DEzFÙH6IYJªLMXN®PQ]R­TUTV›WíY9Z|[«\×^_+`Wa~b¡cÄdèf g/hTi‚j¤kÊlòno7pTqor–s¶tÐuìwx(yIze{{|›}°~ÄÝ€ñ‚ƒ„.…>†N‡^ˆo‰Š…‹—Œž§Ž°»È‘Ғד۔á•è–ï—õ˜ûš››þœÿžŸŸù ã¡Å¢«£…¤f¥J¦-§§í¨Ç©¤ª«`¬=­­õ®Ï¯¦°y±N²$²ü³Ð´œµn¶@··Þ¸ª¹wºB» »Ö¼œ½c¾)¾î¿²ÀtÁ7Áú¼ÃyÄ6ÄóůÆlÇ)ÇèȦÉ^ÊÊÏˉÌBÌùÍ®ÎdÏÏÕÐÑBÑóÒ ÓEÓçÔ…Õ$ÕÅÖd××§ØGØèÙŠÚ.ÚÕÛwÜÜ¿ÝdÞ Þ­ßSßúà¤áNáøâ£ãMãøä¥åSææ²çcèèÆé{ê1êåëœìSí íÈîƒï?ððëñ©òió5ôôâõ¦öy÷Sø&øëù½úžûrü:ýýùþ»ÿcÿÿʈ » ] ó›;Üpü‡!´AÉLÌ!Y"Û$S%Î'I(¿*2+ª-.…/õ1[2½4(5€6Ü8C9š:ïê@1A€BÉDEUFGæI0JmK¨LæN'OhP£QãS T[U•VÌXY=Zm[•\»]ß_`(aJbfc‚d¡e¼fØgøij4kTlrmŒn¡oµpÉqàrõtuv'w:xOy\zf{z|}ƒ~’–€™£‚§ƒ§„§…¨†©‡¨ˆ¡‰ Š™‹Œ‰…Ž~p‘d’Y“Q”G•<–2—&˜™™öšé›ÝœÉ©žƒŸa <¡¡ø¢Ù£·¤—¥n¦I§&¨¨â©Áª «{¬U­.®®ä¯Â°ž±r²K³'´´Øµ­¶‰·`¸6¹ ¹âº´»Ž¼c½6¾ ¾Ý¿²À„ÁUÂ%ÂõÃÃÄ“ÅeÆ7ÇÇÖÈ¡ÉoÊ>Ë ËÕÌžÍiÎ5ÏÏÔЙÑ]Ò ÒßÓÔBÔöÕ«Ö_××ËØ}Ù0ÙåÚ›ÛPÜܼÝrÞ(ÞÜß‘àEàûá²âiã ã×ä‹å@åöæ°çgèèÙéêHëë¹ìqí)íâîžïYððÍñˆòCòþóºôwõ4õîö¯÷nø,øêù¥úbû ûÝüœýZþþÎÿkÿÿ-@[v‹¢ º ½ £ œ ¬»Ñë"(ðõ.<R^T !"%#5$;%C&O'Y(`)V*+,-./01233Ø4µ5³6³7²8±9¯:®;«<§=¡>œ?–@‹A}BmCXDIE8F$GG÷HáIÊJ´K¡LM{NjOXPCQ+RRùSãTÌU²V˜WXgYXZ:[\\é]Ì^°_‘`sa[b:ccødØe¸f–gphRi,jják¾lœm{nRo)ppÜqµrsltAuuév½w”xryKz'{{ä|Â}¡~j€H&‚‚߃¾„ …{†\‡<ˆˆõ‰ÎЍ‹ˆŒgAŽŽôÒ®‘†’_“:””í•Ç–Ÿ—v˜Q™+ššÚ›³œež<ŸŸê ¿¡—¢q£L¤%¤ü¥Ò¦©§ƒ¨[©0ªªÛ«³¬Ž­i®?¯¯ö°Ý±Á²ª³…´dµB¶¶÷·Í¸¢¹zºO»"»ô¼Ç½œ¾t¿LÀ$ÀüÁ×®ÎÄnÅOÆ4Ç!ÈÉÉüÊ÷ËüÍÎ Ï%ÐCÑfÒÓ»ÔúÖ@׊ØàÚTÜÝ‰ß àâä+åÚçšé¹ëŒíeïfñ¬ó³õÁ÷ÝúKüƒþ~ÿÿndin6žWeM(†Â(!GP T9ó3£×¡G*6DSdu‡›³Ìäþ6RoޝÐó>e‘»å?l›Ëü/a•Ë@»ø6s³õ7y¾L•å 9 … Õ % v É  s É x Ñ , œ ý]¾ ƒèO³‡ò^Ð?¯#š"ª2»HØjü'½Ué…!½[ý ¡!I!ô"˜#A#ñ$¡%R&&µ'g((Ü)’*R++Õ,™-a.).ñ/¾01`2333Ü4¾5•6w7Z8>9"::ì;Ù<Ê=»>¬?ž@”A‹BƒCD…E‰FŒGŽHšIºJëLMUN‹OÀPùR9SƒTÌVW^X¯Z[X\·^_…`êbTcÓeGf¾h@iÊkQlänvpq´sXuv¶xiz{ç}®}Lƒ„í†Òˆ¹ŠœŒ‹Ž„{’o”h–t˜–šÜ9Ÿ¡í¤F¦©©«]­Å°$²Š´ò·X¹¶¼¾xÀÝÃ<ŘÇöÊNÌ«ÎüÑUÓªÕûØGÚ•ÜßÞ»á ãQå8çié¯ë´íËðò9ô2öyøÁú¡ýÿÿ $/;HWgw‰œ°ÅÜô)D`}œ¼Ý$Jp–¾èAnÍÿ2ešÑ C}ºù8w»E‰Òhµ  S ¥ û O ¦ ÿ Z ¶  p Ï / ” ûcË4ž yèYÌ@·/§"¡%ª3½IÕeù$½Xò*Êi ± [!!¶"d##Ç$%7%ð&ª'd(&(ë)ª*v+E, ,Þ-³.ƒ/Z0611ó2Ô3·4£5Š6y7l8_9Q:D;8<:=;>ÂĸÆþÉ:ˆÍÈÐÒeÔ³ÖüÙGÛŸÝðàIâäñçQé ëûîWð¿ó"õ‰÷íú\üÛÿÿ  /BWo‰©ÑôBk–Äõ(^ªä"a¢å+pºsÆnÇ"}Û<Ÿ , •  o ß S Ç = ´ 3 àaähïx ´Ià|Àk¿o$Ú“O ƆFÏ ›!k";# #á$»%•&q'G(-))÷*ã+Ð,Á-¶.¥/¡0Ÿ1ž2Ÿ3£4°5¶6É7Ü8ð:;<:=]>€?¤@ÐAòC%D\E•FÏGþI7JmK¢LÚNOOPQÁSTOU—VÚX+YtZÂ\]s^Ó`)aƒbédSeµghŒiýkllãnXoÔqSrÌtNuÔw[xàzk{û}$€º‚Lƒß…y‡ˆ½ŠZ‹ÿ­[‘’«”V– —º™Ršòœ‹žBŸð¡¥£b¥)¦ö¨½ª‘¬l®E°±ï³Ãµž·p¹M»¼ç¾µÀuÂ'ÃÖňÇ3ÈËÊfËüÍÎùÐqÑäÓQÔ½Ö×eضÚÛEÜ}ÝނߟàÅáåã ääóåâæ÷èéêëëÌìží™î’ï‡ðsñXò(òéó³ô—õzöX÷5øøæù úZû"ûòüÊý«þ·ÿÿdesc Color LCDmluc itITÄfrFRBØnbNOesES,fiFI>ptPTNzhTWfjaJPtnlNL‚deDE˜koKR ¨enUS´svSEÆdaDKÖzhCN òLCD coloriÉcran à cristaux liquides couleurFarge-LCDLCD colorVäri-LCDLCD colorido_i‚rm²fv˜oy:Vh0«0é0ü LCDKleuren-LCDFarb-LCDÎì·ì LCDColor LCDFärg-LCDLCD-farveskærm_i‚r LCDmmodœ*¸MrtextCopyright Apple Computer, Inc., 2005ÿÛC      ÿÛC  ÿÀ®ø"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ýÎÖ!ñ~§£|ðܾ.“E”Ûß^]êÃL²IGÞŽ9<™ZF^„…ÆA¯WÿÀŠñ¿ÙwॾŸàe±¸–U¿°v‚üÙÁ;Ù‡\“–÷Îh¥øIûL·ÄÞøgÅú~¡á¯iñ}¡ôùg[ˆî"Î L($6©`×Uñ'âÝÂoßkþ6¾»¶Óì3•]ï#…DQË;1ÔšóOáL:oí%á{Í%åk­-.§º(rE»ÀñcèdxȺûV‡íGáño„ô#¨ÆŸ¦ë^^gîùb9PöI{mÍcÿÃTü@þÉþÜÿ…ksÿæÏ7ü$1ÿiy~¿dò6gãÎö¯OømñjÇâÏ‚ìuÿß]Üé÷èY .ÇÃ#©å]X ô"²Óàí«ø_wžæ3Aó8Æ+ý—üžð®½ýžgþÏÔµÉï,öýß,ǾÆHäo}Ù  Ÿÿi¦øâ»/ øCOÔü>¹¶ý¼E¥øSÁÞ.Ò~97‡î­õmjëNž+Jàºy¢=]³¦R‹l§n€¡p'›À‘Üé^?ÙŸÁ¾+ðÇ…î>_Ù]éòè×:iÔufOô*ÖUW–uA*¼ª¿1t]Î@Û2ÓîoËfþçk'Ý—Ý¥¶¶üRûõ½¼ž§ØVœg3]qÇZ«8#3]sÓšøÿÄÿ²“'Œ¼Ug„µ›_‡‘Nˆÿh–ýd5Êù²ä‘qxªS û¤]ÀŒdæþ#|1ñgˆõÝ ëâ§ü$Ö¶òø;IM+Q‡Á÷ºõþ¨F…®|“o2½×™å1‘ã"@’<² %wo5ÿ·/Î?ŠîEöô¿áÿ·kÚÌûWÄþ<·ðf‰6¥â­BKr¢Iål"`‹“îÌ£êjùÕgfºüëÈlߟˆ³6½dtkÿËÛÞ­ŒPy³\ù3Ç#ã³”WG\ã½y‡ÄoødøÚŸøŚπdð•¼Óì´ ©“J¼ÎÓ ³DepÊöÛeuL :àŠÍ»_úèßÞídRÕ_úÝ/¹^ìúÅ>6ÿ„CÃ:Ž­«Ë}öM.ÖK¹¶ Ͳ4.ØÎ×ðÏö¦Òþ&ø±t+kèú¼ÚjëöÚ¥‰€ÝÚUó¢pYèݸn…¢øoÄÖÿ±2i?S¾ñjø=­o#.nn&ºû!R…—&G-Á ’ǹÎkϳ…¡‰õKË †eˆË1Á¿Í•Šì?*àoøô!ª\þ¶î¾<ñïìÏey'Ç­[Að5ÑÔnÆoÜ&˜âyì0—6¿.âD›ò£nœÖ—íðûÄ:ÏÆ]WSð&ƒâ§ðµ”~<Óí‘ÒO€Tƒe Œ´ÞT{c_=?r7"ŸX'×-/¯’Ø—¢”¿§éæÏ¬µ.?ç­Õqÿi=ãõ¦·?Ã]Föî?ê’é7e—oïcÆYyù‘Ê·~}*‡í¬kšoÁ]N?„öz¤úþ­zf›äÛ³9.a("BÊÄ€Œæ¾z¿øñö}¸Ôl>[Gu‹< /‡`—ösÛ‹FÆÙÍÄÏ$¯å´ŠÒÆ$$â<œJ½¹›Ù~v¿ù/7%ؤ“²ïùmÿåæ}Qñel>)i~‘u&¼ÕtÛ­N9†ß)Þ[xÝ[œî&éÀÇÊsŽ3Ð^qœÍuÀÉç¥|‰ð£Á:Aø«oðgáß<+§/5;;Ùï´{‹¹¾w²*…%Áyð¯º]¿½Ç'–vIðÏö@Ñe×>Áâß kSY_ø"Y¼J/MÃ&¡¨!°òcÔ JÑï¹òâ—„Ùò(òÆÛqå^Ÿý¾ß(¯[®äs^Ï¿ÿkúËðgÕã9ÓÅi~F´L¶¯uö¡ 6«µÕ|¶“ îÈ^à1íWÿµn3þºê¾aø7àÿYèž î™â8å¶øYsaqöˆ% Ù’Ûl/¸dK…l)ù°§Ò¦ý¾ªñ¯Â½CEÑuë;ÍKÁ—)â{Ë3Ë5Ð[^HÿƧÏTFÆÕVUW%uëy¯Ê+ïCwNßÖÑoóqôÏö¥Çüõ»£ûRãþzÝÕü£ÿ) ±ý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nèþÔ¸ÿž·u_ÿ(ÿÀбý©qÿ=nëÇt߆^}SÇz¬šuŠºÄ$“$Èìp¨ˆ ³±ìª >•£ÿ⿵Nœ¶>:ð‰±õ S×µy}ð³Ç xÊ®-õ]2ÚV ñjJ[ çŽ+Þè  РÖ|3«¡|,ñ•¿žÛ¥q}¤³Ê{vÔ 62q“ÆN*ìú׉®ax®~øÎHäRŽy£²º‘‚7ø Ž1^ËE|ô¾¹UØ¿ ‡ªhWËueð·Ç/vŠQn.5].âT¨V“Qb½HãqÒ½êŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH½ŽŠñÏøH|CÝas%œòAgdé¨vºù‰rTàñqï_LWÆ_?ly>x·Ä>øs¢oøŽó[¾šá^aq´î{íc¹¹8 xæ€=ËãõÞ£jÓÙü=øˆñ(Éo.À`~7tWðwöÛ};ÄÖ^øûàé4ðWˆu©õÍX'•b·¸ŽÉ¢¬²ß U•”+d蟊¿ðR_~Ê¿ðR?‹:GˆRãÆ­nt¤}[eöŠ¥YÈÒéÌÍåÈYä™Þ <°Çdå?vüøÛáÚáÕŠþj±jú%ùtIU9!‘¤Í€ðÊŽ¬¯ª²° €kð‹á¿íWüWã”4ý¡5 ~Ͼ%ñ¾¿ý‡4úÓ\h÷÷öú ºÛCó¼EbðèY·«*(iÚÿ±?ðM/ÙÓÄ_³ìÆžø­‘o¯O®jzÀÒïZöÕÒk§h]&hãfÌ""r‹ƒ‘Ž+’ƒ¯í'í-ÉÓ¿£>‹5†R°xo©ó¬BKÚ'nWuu(»·ÖÍ;t²Ñ·ïôQEuŸ:QEQEQEQ_0|4ÿ‚ÌþÍŸ?l›ŸÙûá×Äí‹¶š®¥¢K ÿÂ?ªC²óOYÞò/µIj¶ÇË[Kƒ¸Kµ¶|¥²¹ú~ŠÈøãÍ'ág€µ¿øöò=;Bðå„ú¦£w %-m ¥–FÇ8TFcJürðÿüÕâÚâ&¹¥~ÁŸ±·ÅOŒznŠC½ÆŸ©ÍöÔ…˜ªK=¥–wä*q™B3Å~ÒQ_˜³Oü…ÿ ÿ’Ô¿dŸøS_ØÿÙþ+ñ†?á+ÿ„·ígöDWÒyÿaû ãÎû6yçg›÷ŸoÍú@Q@Q@W~Ûµü1ß½?Äߨð‘}»VKû7۾ɳ|3K¿—&qäcnÞÎxÁö+Ïÿe¯Ž¿ðÒß4/eÿbÿm}£ý í?iò|«‰aÿY±7gÊÝ÷F7cœdúQEWËß?टð®¿lËo„ð†}³í¶›¥ÿkkù{~ذ6ÿ#È9ÙöŒmßómê3ÇÔ4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÉŸ ~èž$ñ·ÆÝsY³‚ëT‹Å7°C4Ÿ3@¨ŠÊÓ—'ò¯¬ëæ¿€£:—Ççêú&:çno‡ö6?±}ƨ°·éšö…5¤½mVÒaîcšEÿQ]íñÿ&)ªãþƒ~ÿÓå…ô¥~oÁÇ¿´™ø9û6ZYéŨévWÞ'„¾Æ]ª¦›§VÈb/5XîrlIÇË_¤5üïÁÌŸ¤ø×ûPxno´ uÈ4ð¨@"ÏG·,üg£j:ÅÒS`?»@üGö½øŸáË ð‡‰o|>󯙻Lx­­æs÷¦º°ÚÖ.ÌI$‹t‘ü´šúÃþ ñëâçÄÏø#ÅK?‹>ð¯‰4MV 2ÝüG ^>{þÓ³(n´Û–lï`u½ÄŸ3±W;~/ý…þ^hieí¨,và:˜åÚ:àðsé‚kíø,Š®ƒÿñ¬7`í-wÃÖîf(¡Õ­I,ÎŒ¸s¹z†Pç?‡VŸ ¬´OiAo¿|·Úv­ D ›ÊÍéo¹2( )„±eÇžÌß ?°ïÄ/Œß²\QiŸ³¦þ/ð•‘Š þxÓP™³Ô|½'SDÚt¬¹ ixžSdH— _ ü ¶™¯ôcÚwö Êé¢Bµ¼,žZȶ3[ßY#d‰G•¥\ç;÷iήÑWÝ¿²¶¤º'Ùâ(­m§8²XdP¿ÙìÇ?g]«Ù‹Ÿ³ùv,Ç®›1ùŒÅYÖ¨ªÉ5Ù/¹%ú¦ß³OíI ~ÓþÔî<5aâkž»:~»áÏÙ}‡XЮ6†T¸€3)WB®’ÆòE"œ£¶=*¾Søq®Çàø(/‡¯‹ùŸþ¾(l&£¡Ý‡Œ0Ú¸vµÕ§àª[ò£VUœðtíëñcþ ÛûøCÆ¿±×Šÿáñ>©ñÏDº½þ̳Ô<Û94íJg‹Ë¼†XÆd¶· 6`Àžÿ‚ÁO¾>Á(“ö‹ø_âßéÞ ðWòë›èú{x‡ÅÐÁw)žñmZÈÚGom…ȵ‘þv5ôçü­ÿ(²ðý•];ÿMÅ|û=ÿÁhµÙ_þ ÙŸà¾øõõˆš/ˆ4xª;XÿáÕ4ýBöò+¹à¾ÿ´C4×ш•%#$¨jý^ÿ‚ÿÁp×þ ûxïÇ´üZn‡âÏ‚Èòx¾æÂ"–·6Ko%ÄwéIŒ²Ap0HÝ À`«ðçÀø,wííÿÅý¦¼c¢Á,ï|ðoÁ~„]µÆ³cÙ··‘ÙmÖòâ{k¢÷ì…†P#n~]Íè¿ðlßü_Æšüëö‡‹ö°Ô¼/í7¤?‡´ë[ûvŠêßN[Ëd½x[ ßR˜¨` ,JÃåu'ãŸø$ßísã/ø6+öœø³á?ø(‡Â ÆðYÛµöf“ g±{"k9fx º·‘næË, ‚Œ†Pö?üCþ ûñïáÏüÉ¿dÏø+¶›áûï]ëÃÖž"Ó-c´šßPt l%HBÃ=½Èh„n‘ÆÀÌ…„ã?i?ø-GíkûZÁY>$þÏ_°¿Ä„_4Ÿ‡º–£¥[j>2[H—U67ÞG{‹Ë{òË!gŽaÊ9ØÏ^%û þÏÿà·_ð_¸?j˜¾øƒÀÿ té¾+“SÔíÚ(|­.+t±µŠBÜ\Iö+o1b,;±8Û»Ðଵ'ìGãŸÚÿâ%¿ü›öEøéáoèºý/ð©«â˜-gx ¿ÄÓÚÅ(š(£‘\¤‡k(:€HÞ±†‰ÿ"—Nø•á¿Ú£Æß¼Gi«|>Õ[À~>Ð…»GeâsåG§™Ñ-=°ó'•óg ýÈ9Øÿƒ²'ÃOÚ_^ÿ‚ûêÞøñ Áú/í>ž5ñe½Ï‹¯m£}MR(u#ªN"62'—2%èAö@•0‘ã)ö_üKà/Íÿ~Õ|Eûèü9û'5éÔÓÅî w1µ‘[t™âQm-×Û|·AçHCÌ7³x×ÄoˆZ§ü—þmñoÆÚ«Á^/—ÂxóÄþ!¶:}šïÕ¬5xo֬䙒ŠA 0a£t$0 ~œþÛŸÿoÏ ÿÁ ¾.éÿ´WÆÿ†÷Ä+ ½gYñ>©ac Zê>OÌ·zL*ºDAoq+«ˆã`¤¯Ý•ÿðm÷Á¯Û'âÙøÊà’>ü/:ö'ü%_ð“ÙÅqý§¿ûCì~G™¦^mòö^nÇ—Ÿ1>þ>_Ýÿ¿¶·…à¢_ð@þ XxƒKðÏŒ>xÓìVºÜÁÙ­59<Ô†Yc’ÚB6ÈÙR¤àäÎø1þn‹þåOýÍPAûÁfi?ŒðrÞµû?|Eø‘ý£ðŠÓâtH´øGô¸vYéðj¯gÚ£µ[“åµ¥¹ÜeÜÛ>bÙlóŸðXø)íåÿfý»ô§ñÄßøXuýCûWéá]Þ-VÍ$ >•usmd’ÇMû4ÁEþ èßµŸð÷ãÞµáŸiúµôzbjÚAãYe ä¼3[…ŽD,ê¬ ädô*TøÏíE¡?„¿à¡ZÍ÷íe¡x‹]ð½î¯4ÑÁhÌ²ßØÂÙ-äÜ „ UX}Æ\ƒ\ï†ôÝ7Iÿ‚ˆx6øWPðN’|Y¢Kg£_I$—6¼¶Î†C#3‘XJT±Ûæc ®Ó涿ষv³û.A£øsá(µÄšÔ-y-Üñ E¸bŠR6ùYÝ•ÆX ›ÿníSã­¿ìÑá‹_ÚÁ´-ONÕõXu+[ËDX®ì&[y‡Ù®R8Ò<²LÌ6ƒƒ Æ»ÿø-ìù¯xƒÄ^øá‹­CL³Ó¿²µfCe²Y%ŽGç8ÝÐýáŸ?ý»¿myÿk?Ù«Âé£xG]Ò´ý?T†MSR»Vѯ¾Ï2¬6î óS;Bds@I~Ç~)¿ð7üHk~Ÿìº¦áý~úÎmŠþLÑ\^º6Ö[  à‚9¼;öUý­?iÚrÃÅz_íwD¾¾Ó­á»:–£cmØyƒÉ…bƒkÉ1Æ<Å`G•É5ì?³?ü¡£Rÿ±SÄŸú6ú¼ûþX9ø¥ÿpŸý½  oÙwþ ñßöšx#þ»ïÝ)ºÄð, §Û >a’(“cÍRà±[ ¯eû þÝ¿¼KûS^ü,ý¤nlõ{Ã-åš\ÇmZÝZ‡gLÂªŽ„C(û¹ÈSœdW’ÿÁj=¼)qÿ¥–t¿³?ü¦_Rÿ±¯ÄŸú*ú€=Cã—íŸñ/ÁßðS/‡Þñ'Ù¼!7ˆ4K°þϵ|Ãq¡™|ÖˆÉódçvFîÀÁÿDý³þ%þο´à߉?±ô˯Ã},?Ùö·¦k›”-ºh‡Ë Ž:rsåÿ´Çü¦_Mÿ±¯Ãú*Æø-‡üNÿb¥¿þ–^P]ûK~Ù´wìÝâ¿ ë¿®<3§é*‰¯lô;{XçŠB… žFA( cÜVLe¸=‡ß_ üiÄŸ‡zˆ´øÚ}N·ÔbŽJ,Ñ,€ß€¯…ÿàºcð«qÿQoý²¯°¿dÏù5†ö*iúGzQ@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@Q@Q@Q@|×ðgRøãœñâýCÿDÇ_JWÍFu/Ž9Ï/Ô?ôLt~ßòbš®?è7áÿý>XQGíñÿ&)ªãþƒ~ÿÓå…ô¥|'ÿÿ‚[ø'Zø=ãˆß |$|Iã? ézljtßÜiòjí­_±ºÔ%·´‘¿·–êæM¢;yüÌ6Û±$7Ý”Páoì]ÿо2êòx/ö3ý›ÓâŒá˜ÚÛ·ˆ|{§ørÆ`ª H,îñ{ò¶á±bfùGÍÍ};ûQÿÁ5?kÛÓཟƒ¾6xçà/Ãß®¥c¬Ïá? é:¤ïq%¬é:A&°ó¤Ñüñ¨2ÁrTqÏÜ?µì?ð“öÑð×ö_íCðÿÞ0Š5U·º»¶Ù¨Xmmá­oc+qjÁ²wC"7'žN~ ý¼¿d»¿Ø“ág‡î<-ûCüv°ð/ˆüQ¤xVë@Ôkªio½õ”< Û1IúP§ˆà’Ûö®ý‘£‚"CÅ™\"Cö#à…€üÛ ª0I2~ͯ‹ÿa¯ÙC㟅?h ~Õ:—†åð†ô]BÛÂ:õÚk¾'Ðï/%³%έ­¼RªÁi4jÁd›mË+Ìü×Úð‡ü-ÿ¿ñ÷ü›ö/ðÇßÙÓWð~‹­è¾5µñ$óø’êæÚÕíⱿ·dF··™Ì…ï" ¾`@Ô?àŒÿ±WŠ¿àßðMŸ†ÿ>5êÕø£{ðKÂ:w…4èõ»½>ÇÃŒšŽ·iç¦[iŸS)#I]’Oõƒä<ã¢4¤ëKö£¿•¯wò³¿£1œÔ(Çöe·­ÒKÕÝ}êöÖß³ÔWçÿÇ_ÚŸöªÐà­^ø ð?^ø¨xSÅZ%ߌï®/¼-¨SÂÚ4+„Õ\I,Ž‘$б+9bQBóúYÇß§ýtvŠk娹{•%Mô¶½5W_ƒOæºÜ(®Sã”2¹øK®¯ìù¨x{Jñ˜¶/¥\ëºtº†ž’©¬ÐC<Á”2‚²®ÒÁ°ÁJ·åGüÅÿîø×ÿXý¬ÇìQREPEPEPEPE|Ýð£þ }ðÿã‡ü[Æÿ³Â£6³â‡^Ö¿«A*5ÏÚ"…´ñŽ^d#9*Püêá~‘¦•áô’ºóWjÿzðÀô” ÷Z?-üš (¢øóÿøÿ‚É~ÕðG‹^>|Uàˆí¨K¡¥ç†õ(õ-1mZ ÐÝ2êB9ŽÛ¨±* Cþí03Œÿਿ·ƒÿà“~ý­ô{/Ù»Ä~½´XÕ¼3má½b;Ý;O’%fYޤVR¹V‘B¯–¥˜ jc5*n³Ò)Ùù=wûž»uعAªŠ’ÖOUn¾Ÿ~ÛßMÏØÊ+àßø!üFÿ‚Çü8ñY»ð£ø#Ç>’ØjúdwfòÒâ'“so1D8- ªÑ°%_™ƒ_yV³ƒ¦ìý¯ëËsMTNÞŸ×õ®ë@¢Š* +æÿø)§üóáÿüëྛ⟌æmKTñ§‘ èrªÞ뻨r›¸XâF2<‡€6¯,è­Ý~Ûÿµf—û~ÈŸ>-x¾Ê}JÇÀÚ4ºŸØ¢m{(b„>Íò´i¿(là⢥HÒ¥*ÒøUîýoîM}åÂHÒKÞ•­çvÒüS_#Õ¨¯ç^ßþhý¬-¿d ÚFö/†7~ºø•'›ÁpxRä[Çv^´¯©ý°ÉŒ&XÑ 6J»žc}?ÿÿÿ‚ÍþÖŸ´¯ü§QøEñá@ðÿÂygÔ·Ã'†îí®|?cËew%ãœ9™’Üà$†‘T•zt§R\–³¶·éî©þ1ié;T’§w·O?yÅÛÑ®º¾‰Ÿ±4QEfPQEQ_˜¿²üÆßö‹ÿ‚è|Uý›¯dÒtèeÒü}{n.õm=s¨FïÑÖB.Êv h1õúuD}êpª¶’ºô»_ KÝ©:ox»?['úÛÔ(ª*·Ôï<1©Eà»»-?Y–ÖT°º¼µk«kiÊ’À’FÒ¢¶ÒÈ$BÀs‘øÃðãþ ÝûKø{þ ¤þÉß,þ ë*x­4 CYÑ|?¨ØÜ\BÖþrÉ Í¨Ê±>A ‘“ÖŠ½­ â–ßz_ª Ÿº£*ïe¿}¯øÙýÚô?kh¢Š(¢¾lÿ‚»~Ò¿dOø'ŸÄ_ˆ_²7†×Å>=ðõ½³ØY5„·ë=Ô1O9·‰•äBòËÁÀÙ¹U`b¤Õ8¹3JTÝY¨-Ùôñü öàøÍû~ÂÒøãöÜðÌ^ñ$> ¹Ó´û˜´¹tÔÖ¬R(.„2?ÖK4[Ó|žCWÛõ½ZNŒ¹eÙ?½'ú˜Sš¨®¼ÿ`¢Š+2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¾kø 3©|qÎxñ~¡ÿ¢c¯¥+æ¿€£:—Ççêú&:?où1MWôðÿþŸ,(£öøÿ“ÕqÿA¿ÿéòŠúR¿ÿàóïØÉ¾(þÇ>øÑá«f“Qø]«3TeÀÿ‰n Q¿;.¢¶Uãí.kö‚¼ËöÏýšôÏÛöNø‡ð»Å»ÏÇ: ֓沆û4²FDSŠ9<¹º æÅÆN›”åWº|Õ×ÌèÂÉF¢Rz=£Òÿ-ýQøÉûÁIµÏŒ_ðn‰ð—á½ãËñƒ_ñ44/½¾5Ôèî¾L•ŽßL–Þt×’+âoØïAÔ?à„¿ðr6àj’øwMñ@ð¬÷’â?íUEK[‰¸ ò­Å¤ï·€ð01^ïÿ‡ÿÁ=uÍKööø‹ãߌz}Õ¥¯À–ŸDŠÎlùqø‚o6ÚB9Ú^ tºVà‘öˆÎGAÿƒÓaû›¯ü"øáà-:[™õÌøWX³Ëp ÜXa@Ë3«^&éœcÒ»ªUöXŠ8˜G™ÔjéuRI%ÿoK™«nªöHä¥IÖ£W 'e ÛÊI¶ÚéîÆË}=,Û¿è÷ü¾)?i_Ûö¢ý£uQ,º~¹â„økàç“k"èúhfšùwò]9÷ˆWÅ^1ÿ‚Âø÷þ ÿϸýœþ|Z¹ø ðOÀwº¦ŸªjZd¶–Zω®tôq0[»ÈœE™âuD@?t²;nllýRÿ‚nþÊß°ïì'ð·á]„p$þÐ-íõ…v¤÷Î<Û¹@ÿnâIŸþ_ÌÞ§£xCþ ÿx®?ø)_€t¯|0½ñv­sk­hi¬ZM¤êO;ÙêQA,dL±a‘ŒhÌ<©‘Aq¶¥S„1tð®WŠŒ’{)I$”´ë)7-ívÛ}Ss•\=JñV”œ]–ê/¦½¢”o¾–VØýTÿ‚+ÁY~"xÛþ OñËöOý¦+ý½~4øwQÕ¬tûü9Ôtí9'•c’í¤¼¶$D­Ë²¦ç*8Rq€iá¥8UºWš¡5{[™¨ÔIÛÎÖói½w.¿,°Õ¢ëRivÓvô½ü®±?a¿ø)/Æoø/÷ü—â&ð›â‡Š¾ |øq¥Ï}¦[øF;[}sZc0‚Ò[››¨e*Òó4a<´TXŠ–&Sü—þ ûUþÈ?±wí-âïø+_„¼g«Z|‚Í|-yâô«­WR¸íO7K -Ì>wí8GhÕÙ‹0hÔ|1ÿý®íÿàˆðU¿|=ý½à—Á–弞×.î`o/F¾Št’ÚæFÆï²¸Ü )8|(ÿ‚x]ÝüU×<¦Øx¢çVðülÐå–Þò)Ž›âd\ß=ºÍ"Cº2³*¶d©a©º.éÁ¦úüM¹ù5 vì—X²’ukÔ…Egι{l’ŠòrÑüÛ}WÎ?±ÅÿÚ£þ gÿÏøíûSk¿´§¼%ã_Üê²øK¾¶°´ðô#O³KÃÍ´–Îó«ùžRfBÀ(iRH®óö ÿ‚ÒüIÿ‚Á~:j×^6¿øqñïö|Ю5ësÃÚ}“Eâ"²¹šÖI­®íå‰W¶•&H‚Ñ«£F²ycÍ¿àƒŸµ¯„>Áµß´u·5ý×Rð0ñ\ióÜ-½Âý·OAf¬’gž(Ès €¤W‰ÁgÍkàÿüËöàøÉñTÃáïx÷ÀwÞðìúƒ}˜j³[X߉^ D2ÜÅ2“ºT•Ì„Uã"é¼L`½Èѧ$ï´šnþ­Ù5Öúí¦¸û_«Î§Å*Ó‹[^<ÉY®‰E¶¶µ´;ø#Wíû{Áf|#ñ_Ãý¥´ïZø6ÚÊúçijºÖ$žat ²µXc†8`Âí,Çt¨b‹fUk;þ}ÿ*ý¹?à¦Þ)ñ§À?üiÑô›{/íÛ¿ëš$:¦µá»H¥ÉocìŽæI¥žºcû¤YY6ÁZ¿ðdç4Ú‚OjÚf˜‘iÚã›»¤‡liù’Ä|‰½77Eܹ#"¼×þ Õñ~“£ÿÁK¾*®±ªiÖo©xëì‰=ÂF×[u YË Fý¨¬Ç' 5Ø©Sx¯d׺és?U5ø¤­³·œ¯Ë):xiU‹÷£R1^’·7­¯§köJßDÿÁ¿¿ðT¿Ú;ÄÿðVψ?³Oíñþ(èš'öݾ¾¶'´½Ó.LFkyUÌR„pb°B»H`ûÞ1ÿ‚Âø÷þ ÿϸýœþ|Z¹ø ðOÀwº¦ŸªjZd¶–Zω®tôq0[»ÈœE™âuD@?t²;nllùWþñ@Ó?àé‰×wúΙŸˆ|Cã[}2àÜ)†þI/'’5Š@v¾ôFeÁÃÆr3âúžáø&?üUâ¸ÿà¥~Ò¼AðÂ÷ÅÚµÍý®µ¡¦±i6“©<ïg©E±‘2Äe†F1£0ò¦EÆÚä •ia=§Û§'®‰ÎíFí~[wÑ]¼V%C¤â´ÝFÉ»žýÞ¿«?ðDø+/ÄOÁM>6~Éÿ´Ç-þ,Øø6ïR›Áž2eµ[Ë›{+•‰­®Õ;†hdßÊñ̤²•þ¡þÒ µŸŒ_¼Sá‡þ2Ö~kåƒÚ[ø‹IŠ9/´¢ØÝ$@T>ÝÊ‚»·)Vaßÿ±Œÿm‹? Á/~|;Öõí;DŸP×üwà_ XÙi¾·†ÞãPHã/-ËnU†íû·.F+÷Ýè-g(PI(p$ñQŠ‹–1š»äi½¹­u{/K>í_[ÝëJn5å8è¹®—edí®ýþgò³ÿ´|ñçÇOÛÿâMŸÂŒž)øW«ØøN{›í[KÓlõ+Y?´mCE*ß$¨2Ä>ð¥ò>ö ýÿ‚¿ÿÁg~)x“þ µà/ØÏöñQøký£®é:7‹¼c”wŠÍ|bo"ÐLŒ‘¤pO™oy(hÕÌüïÿƒh¿n?‡ðO?ÛoãGŠiíRçH…¼}kaa³I}¬^Çm"ØZÅÆë™<¶TŠ‚Ü0Mz¿íùàMgö>ÿƒ ~|iø×§]x;À_¼O xžÇPÖ¢TŽÂ†ÚÚò ©˜£žÚMþb«°Z7,U=´¹kÏ/§/á»_µÜÝ£äœSvZ-þÖ±ŒR¡,ÁÓø¢åËÕ¤£{¶›I7w½¶ÓéÛcþ _ñ‹þÿJð/ƒ>'|Rñ§Æß€:Ñí5-E þÌ)oâo¿†­t¹"²”Ü-”÷w“Ëþ’#V0¤Vá.dc÷a}ä?ч„ô?øF<-¦é¢O7û>Ò+møÆýˆ8÷Åra¹ç„SªµçšOºR’µŸºi¦& –!B8E¿&ãøÝßÓïüÿƒä¿äû6×oè:eV´ý¼|Añ þ ¸ðWÀ?Ù7àLj>=ñ„#ðÌ׺ÃýF]Æ#tËq/Û„~\ù\!ˆº†`\®ÖZÊÿƒÞ¾(xsÄ>"øá]Ò¯¼C¡®»u¨éÖ÷)-Í„R›‰¦E$Æ¡˜.ìgË|}Ó_¦¿ðn¿Å¯ üJÿ‚?ü´ð½¥êמÐMÕ-í®UçÓ®c–Eh§;£aÁ€È*à ‚cIWÂVƒÙÍ^ÝW½—Gù£L]WF¾Qø”%¿GÍu§{j—o#óóþ û1xëþ Çÿ‚m~Ð?´·í¿¡ý‹Äzõ–Ÿm£x0N¯pÒEj/&ˆºÄg¸½ˆ»ŒQ¡fË6ÄìAñö¨ÿ‚™ÿÁ3þ;~ÔÚïí)ãï x×Á·:¬¾𯅭¬-<=ÓìÒðÁsm%³¼êþg”™° F”’+ôþ$ý•Áµß´u·5ý×Rð0ñ\ióÜ-½Âý·OAf¬’gž(Ès €¤TÕ«*”±“ûP§î-­¬u^m¹'úuThÚ®¼jT´Ÿ}²IGõ¹½û9Áο>(Á¾5|CÖì4)~=üm/K’ì[yvZ„Z•ÊZÛj†Ü ‚T>yxW÷eâF¤žZó¿²ßíñŸöñÿ‚s\ø³ö ý·> x‹öªµ±–óÄŸ 5ˆ´hÅÚ«þþ*ÒKE–±ÉGu’FX>K1üéÿ9ðU‡ì‹ÿ ý¤><~Ù~‡Å_¾"ê~ðTúeÿ›ö¥‡ö—Ùïï *›˜[ý¹LOÏnê¬áÈÿÁeàŽ_ÿàœžð?í ÿÒøæ5ÿ xŸ^·‹Ãöj±K«ØÌë$ñÜé×ö®­!øÄâïXjºj^ƈžïn –‰UòÐÀ$Ý€ììʼn'u~’ÁÁ_³Æ†_ðCÿ/?hßxê×FÔíu u5o ipËâ+9¯,!·±ó-cì©ëö"w,Èß.6þqÿÁк׉âý²¿f{ö†·º²ñ,Ÿ¼?sâ{}¥/–òéïjü»–FlªôÈÅ~’ÿÁo?ࣟ ?mø"í!/À NãQðö‰¡èv>!˜G™â{Ã}§ÜÍ–Í'›p`G .cP6ÝÁXŒ+ÁRÀJ”Zn5*'mU”à“ù½/¼¶mêuᦥ™P“Ò2…'®Žò…å¯tµ²øwV±áðg—Àω4ý”ügâ? |hÖ<+ðú?jZe烬|9§N×7Ï¥ZÔ“Q¸ŽIb’3, ±lhɶ•ƒ°ªÿðLø*í-âßø8OVý¾;|fÖ¼wðûÃ:÷‰ôS î¥ÚÉ~–]ˆ$•í­Qƒfs±”:cŠõø2ÃÇz%·ü¿âFs¬iQêöß.¯æ±k¸ÅÌVí¦Ø™¢'pŒ˜¥ÈÁ1·?)ÇÄ_ðK¿‰Þ›þâñ^²šÞ›ý‘­øïÆ‘i÷¾xû=ãJ—â!Ÿu·œ9ÃÉ#>Œ¬óA꽋ó×Ù¦¾wnß$¶IyîßP©8¿yTÝÍ.o•’¿ßÕßÔ¿à¶Ÿ·OíÁÿý¶tÝTøõã=wàß‹u-S] CKû‹Dtvm'ö”·PîÀm…JÉ •ùŠ/Úÿ²/ÆŸŒðUÛ*oþÅ_¾+ø{öQð¾›cö£ªx{GŽçÅzÚž}ž˜³éŠñCÜÏ pfiR•£Êÿ‚Ô6‰ÿ¤ø¯cû~ËZ§îüEáT“Æ~.ñ…ó‹¸|`ã·±µ¸/wq$¡%Ÿ& ä«1Â|9ÿ¼ÁQµ/ØCö¥ñì›û`ê1é^Öõ«‹-[ËÄkkñHb–ÔK¸§“rÈTb¾r¡P|æjóòÉsûV®àßÛ[uÞÚ¥½ä“×™'¾bµuVÎÊi}›ët•¹[Ñ¿å‹vµ´þ‘ëçø*—íiwû~Ã7ñ‚£k¯]@š„l‘wË­ß8µ±9r&•\¨þØö¯¡ëòŸöøñ߀ટðXO†Ÿ³,ßeÒÒÖéÌŽê×ÎkƒåüËæ‘Ã/Ëœáí¥?Í¿~T¯+yò§gÞÆ”åì¯Uýžú«í×Tåkù\ücÿ‚œþþ2ÿ‚ÿÁCþx“áæ³©j×1Xi^1Ó5‹§$]êp]FÝÝp] Â9+×ɺX±$Ÿêãörý¢<=ûMþÎ>øŸðþàxÇD·×-ÈÝ rÄ$)&::Êó)«ñ»þGÿ‚5xá¿üÓTø“§|Wø¯â?|>º‚ëN¶ñÿÄq.-gž(.¡´ŽñÉIød>_-öu\Š‹þ úÿ‚‡ØüDýš¼aû1üBÖlí|Eá·¸Õ|Ôª¦òÆës\ÁŸ¾a¸f˜’Vè0‡R«*˜zÔc¬àÜ¢¼ŸD½,¿íÆe^ •Z5äýÙZ-ù®­÷¿ã4q¿³/üÏö›ÿ‚÷ÁX¼Gà¿ÙSã«ð'àׄ­.õ[gÑtÈ.n$Óà!ŠYŒª ·7/4D£°Ž5Ý„b‡Ìùƒàw†&xööÕô¯†Wç÷Þšó_»K kø/-æÙ$ómDI#†FŽFeWù6çÌ\òzí‰ðÓÇŸðuU·Åý+Æ=¯Ã9¾"$ëâ;ùÖÎÀA¨·3´²©t$; ÇÕá:xœ ƒºq»o¿:W¿K¤´¾öÐÏå<>1MY§d¼¹Ë®·WÜúÏþ:ÿ‚ þÓŸðLø(f“á¿Ù³ã‰?áñg‡áñ:h÷ú>‘,Zd’^]Bmb”Y Ü tÆöi0X Ãkþ IûWþÞŸðIï|$ñÿÿiK=~ëâtwz„ÞÑ|=¦ OlmÙôøâ—{]Ûí»TY¤ +%¾l1òOø<¯ÆZGŠÿà§^ÿ„_UÓµ/°ü=±Žçì·)7Ùݵ ù¾Òv’Žƒü,§¡í¿ðz¿Žt_x_ö_¶ðÞ¯¦j3ýZ¾òín’fû<©¦ˆ¦ùIùcín´àœåƒtð´ê/‹ÚJ:öW²ÿ‡íëJ­*u1N÷]>gnü‰ü¯'m;Û¢³¿à­¿¶íÕû8þÉ¿ÿj}GöÒü'cñbòÔXü=𮋰ðÌ6Oyjêád7îÑDL¾jádr¨]1­¿mÏÛÃãOŒàÝ~Ôÿþ"j? >#Xh:f«©A£iÖ7:vµ%Í彜ÂXï-åhÔyPFË´±VÞ0GÉ¿ðqw4/Á½Ÿ±ÄÖôFi_ÃòF–בÊÒ$^¸ŠVUS’Bð± px®çãÇÅï _Á—:%µŸˆ4™ngðþ‘£Çܯš÷‘k–þm¸Lî2 Ø®8U-÷y®Œ|#J8¸ÒÚb£ä»_­ß{Üá˪2x“Oø©ðþû_ÔôÍzÏLÒ•¥OÓ"¹ŠÊh^Í¢0;³n*‚^xp8?6Á ?m/Ûßþ à‹ú†ÿiM7ÁVž±µÔîµëŸ YÜjÒÏ"Ýy6¢H-åò¥Ÿ *£Ù¹YÒ»/ø!gÅ è¿ðk÷íOe­kúEå’x®)ḻH^'¸Ñ![u!ÈæVùSyQ’Wü‹ãMÂ~ý«‡Šµ}/L'FÑ®Òîãƒ÷Q®©æIó°ùznn‹¹rFE^61SÄòýš0’ÿ*»ý_w½îîðÊøz3—ÄêÎ?öï2I}Òi|­²=Ûþ <ÿ‚»üeý¸¾$üMøkû_xÆãÇBÒ ×ô[ëët[ÛuóÄ3ÄÓFŠ$Be…†ü²@$p¿¶õüÈÿÁ•zÝ–™ÿøm©^Z[ÜßøXíb–eI.X_Ù±XÔœ¹ gf¿¦ê×Q’ÝÆïךKòHåÃɹՋÙKOü/ól(¢Šä:‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¾kø 3©|qÎxñ~¡ÿ¢c¯¥+æ¿€£:—Ççêú&:?où1MWôðÿþŸ,(£öøÿ“ÕqÿA¿ÿéòŠúRŠ( [á—Á/|›ÄR|'ðæ‘áçñn±?ˆ5¦°¶XN§¨LKu6ß¿+„L±äâ¤ø£ðw¿4[;âç‡ô¯Øéš•¶±iýºÌ–÷–Ò `ttu t´PÕí~–·•¶û¬­Øm·vúÞþwßïêæß´GìqðŸö¸°±¶ý¨>x+ÇñilÍduÝ ç³-ÞSÈ¥£Ý¤g9¯I¢“Iî µ±æžýŒ>xà­÷Ãü.ø}§|>Õ 7Þ‡Ãö‹¥_’T“=¯—åÊIE$º’JAXß ÿà³ïÁ¿Øx›áÀ¯ƒ~ñ&”í%–«£ø/M±¾³fRŒÑO èJ³)*FCÐײQNþ÷7^þ›eËËÓüÏ"ý¢¿`O‚_µÆµe©þÓŸ |ã­ONɶ½ÖtX.®a$ùbf]û2IÙ¹9Åvß> x;ö|ð%¯…þxWþ ðÝ‹3Ûéz& …œLÇs²Ã ª†f$“Œ’I95ÓÑD}ÔÒÙûÎìð/‰ßðJÏÙ¯ãGÄ[¿|Wøð«Ä%Ô&ûEæ£{á»Yf½“û󒟾c’û‰ï^•ñ'öqøyñ—áÅ·ƒ¾/øÁž+𑉭ô=cD¶¾Ó`1)XŠ[MF¥¸_” WgE+.^^‡wÍÍÔño ÿÁ7go.¨< ðà¶Š5Ë 4­HXx#L¶…œ…L–Óì€y°¹D-eNÑp)žÿ‚i~Î?uøõ_þÏÿô=RåŠ;Í?ÀÚ]µÂ$±´R¨’8ñÈèÃ8evSH¯l¢†“Ý i±ážÿ‚_þÍñŽ­á?Ùãàf—ªéwÝÙ^ÚxJ‚âÒhØ7|ð7í-àI¼/ûBøCÃ~7ðìò,¯¦ëztWÖÞbý×ʤ\œ0ÁuôTÙr¨ô+™ó9_WÔòÙÇöø1û ÞßÝ~Ëß | à;ÍUW—Z.¥ÅÔ`ä#Ê‹½B“ŒóŒ×¬QESmîJIlx¯Ž¿à›_³¯Åj>!ø™ðைµýbv¹¿Ôõ?i—w—²·Þ’i¤€¼Ž{³Mtß¿d?„ÿ³Þ£?ì×ð¿áßÃÉõ„Ž;ù<3á»=%ïV2Åcm—rgŽ:šôJ)Er«GAËÞÕ…xÄïø%gì×ñ£â-ß‹¾+ü øUâê}¢óQ½ðݬ³^ÉýùÉOß1ÀÉ}Ä÷¯}¢••ïÔwv±Êxßà_‚þ%|=¶ð—ü)áýcÂÖrZËwa¶15¬‰-¾Ø ì7Š6QŒƒŠóOÿÁ/¿g‡¿í|oà? 4oXÜ»mRËÂöpOm>sæÆV1²L’w®Ö½ÚŠkIs-ûÿ^„Ù5ËÐóoÚö9øOû[Úé°þÔ üñ4c#XF‚ý¬LDžKJ„Ç»bnÚFv®z Sñ_ì)ðGÇ¿¼;á|ø]®øS ɡhÚ—…lnì4`À°K$;°3° ãšõZ)YZÝ7ù•ÌîöÓåØñ߇¿ðOÙÿá±s¨ü)øðwÃ…åœÚt÷:Oƒ4Û)§¶™vM¼P)häRU¬8 ŠÍð÷üûöhð–¿cªøSöwø¦jšeÄwvw–žÒ¡¸´š6’Å"[†GVPÁ”‚÷J)õ¿_ëüÅk«t<ÁßðOo€_üvdË…!c\*äà öš)(¤’¶Ãm·~§‰êÿðM/ÙÇÄ“¥kß³ÿÁ;í/@ŽH´»;irÛé©$,‹mXƒÈììY‹’M$ŸðLÿÙÂ_Eáégï‚M AxúŒzað6–lã¹tHÞu‡ìû¬‘Æ…ÀÜU€+Ûh£•ZÖþ·üõ ësÄtÿø&wìá¤økQÑt¯ÙûඬI ×öxKKkç‡y…¦ˆ[íÇæI´°%w¶1“Iáÿø&_ìÝá5¿ýŸ~iƒU´{ Ñià].ylä‚]¶ã|lUIFÊ£#Šöú(qM5mÄxßÃø'_ìûðoÆö&øCð+àß…|I¥;Ieªèþ Ólo¬Ù”£4Sú¬ÊJ‘Ät5ì”QNýÝBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¾kø 3©|qÎxñ~¡ÿ¢c¯¥+æ¿€£:—Ççêú&:?où1MWôðÿþŸ,(£öøÿ“ÕqÿA¿ÿéòŠúRŠ( Š( Š( Š( Š)©*ÈXFÊÅÖÁÎÓè1@¢Š ÀÉà (¤ŽE•DÁ•†A QK@ØæI0²¸84ê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+æ¿€£:—Ççêú&:úR¾kø 3©|qÎxñ~¡ÿ¢c öøÿ“ÕqÿA¿ÿéòŠ?où1MWôðÿþŸ,( ¥+ù·ÿ‚¯ü-Ó?à—ðp7ÃkÅË©Ü~Ïß5+vçD¾Õ.[G³If6ºŠˆÚB6Á!‚?¸¾djPþ’+òwþýŒíÿÙ³øáËA>»ðgWMEÝ#-)Ó.ÊÛÝ(Ça!´™@°1¬§Wêµibmu+®é»?MlÛò6…?¬B¦ÿvõ¶Ÿ=Òõ> ÿƒ¦uMödÿ‚•ø[Ä_³”%Kdµ±Õ¼}ck{tž½Ô..n'†Ìo¶;‹«{iÚHÆÝñªº‚wšý,øÁðwá?üöæý“t/…z< á ÀñT}>yí’}$Phšl¦PнÕ̳ˆß ­”«‚¬õà/üÅßµßüUâý[ö€–ãÄ¿þ'XÁñQ/§·Oµ¼ÖV±G¦[ TP¬Ú]¬p`C]K’I$úGü3ðÄÒ~À·_¾4_Üjº§Œ¤‡Ã–fɳðîŽf‚ÖÝ*­Ôú—©#i$àÕFÕÜðïzRSíñ)$½cSk}˜JÚ3–¥W]C•½¤y>î]}% »èù¤¿–çÇß?k ÿÁ8ÿàæ¯öÞ-—Çø"ÃMÔ¬ô/ h6·úì÷7“Gcv`³³BûI u&NÈÑU†äP~¯~ÍŸð]ïÙÃöœýø:kûÛé^¸Ô5ŸHÚm×ll¢C,Ö1H‚HÁó nü$@·äÏísûC[xÿ°u߈>.|;ÖtÝÒvðO†ã† 7áE’^ié­ÅIJIxó5ðÆððøåñ,ºŒ_ÙOoq¥j‚ –ä1£Ëdž޸'"º£M)Ò”—=H»ÿv-Æý/£ZhÞ«c•Ožlµöq—Í»4ºÛf®“[>çî³ø­G醪éö· !jÂù‡—¿ÊòKü;î+ñßþ ñöyýþ#~Øß<ñÇÆþ*ÓËâ¿GâÜh‡Âöë=üÍçfi^òç-*3,q±1€#Ëí°?~#i_>è~,ð|·-¢x‡NƒU²–îÖ[9M¼Ñ¬ˆÒC:¬‘Œ GUeè@"¿œOø$î³ð÷\_ø*3üv½ÕeøªØ\>£sá÷†[ÿ±>¡©ƒsh$`’$ƒ'ià皤§K%i{:›ôµŸ“i_Ó¦¦Š1©B.Z®z{u»µ×¯m÷ÙŸ²¿¿àµþ?x³á®Ÿ¤ø ã7‡´ïŒwÒÙx'\×|0¶ºWˆÖ(&§ŠuŒQ˜àvU™c’Eâ2e†¿üÓZð®ÿÂø³cñ»[ño…ü+â!´}G]ðöŒú½Î‹ä ¸–ÕKpÛVA¹AG ²ƒ¸~B~Ç~øûÿtý¾f/…ð|Dðoíû<|dñ¹ðHµòõ(¬c`±ËªØE)wÒæŠ+édÝo+ÂñÉ>Y‹6ß×ø/¯i£Á¿hY5‹›{Xæðuݼm4É ˆ êÌ̪RHža°•*%§¾¬ô~êW‹Z4õÕ龖ج“ÄÂGî½6Õ½Sê´ûÓZŸø#þ G¡Á"¿àÜ/ë°õç>3BûUÐtê>—MÓôk§½ŸuÍì $¢Ú(ÝÊC ;yΠdÛ}7âˆþ?ÿÁ]?àžðÿìusãýâæ™áè|O«ø¢ÞëÂíâ˜M¢Iy-ìˆ¢ê ¤(ÆX˜$‰½wÅá}Jæ9¿àÊ="’7x¼lUÕX‡ûzC‚;p{kõçþ±ûeü6ø›ÿÕøg¤ü6ñ=®¿{ð¯áŸ‡ÇŠE„RM‘0ÓÈki& åý¥ ¤»à d@c,ª$BÛÕŒjÃ:ÒÚTŸÉCü®í-5M'²1¡'KØÆšÝTûùÜWÏEnÎöÜüÈÒ>j²¿ü ð¯À_ðN > DþѦø·áÿ¼«áèdû<¿o3Ûn$+–Ò pË,l Êà7ô_ŸðAÛ[àWí³áÿ~"ý´Yk—ž5¸×|U}â½6ÎßS¿“P–ií—ε’A$Ưo3n!Žw7è%i9OÙÂE¯ÅéÏir¯îÇhüÞ—²Î´œ ôøð«¿ïKwòZîQE`lQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEó_ÀQKãŽsÇ‹õý})_5üÔ¾8çÉm;Fó…ˆ$ê÷¾N lXäé $Ýôþ´Û¾ëa¿v×ëÿü¿«£èZ+ À_|3ñRÆòëᇈ´/[i÷Ocu.—â[\ ¡‘¢f ¤¡Á‡׉~Ý¿ðQÿ þÁ^0øI¤üG³¸¾?¾ð>›iâÈu-7_òŽÛE ¹”φÁ Æ”}æâ·Jÿ+Æ?œ’﨤ùRo«·ÎÍþQoä}+Ey¶ûeü ñZxa¼/ñ[ᶤ¾7¸’Ïæ×ÄÖS ~xÎ$ŠËl§í.‡ï,{ˆîdøö¯Ó¥¾ñ’ürÔ¾ø:×DñdžÑæ_ZÝR?& "iÔìû-Ó™Èû#p»$8¡jíýn—ßï-7Kÿ] »¿EsŸ ~0øGã¿‚m¼Mð?Å>ñŸ‡/YÒßUе(uÙ£„ždb¬¬¤Ákðíg¦XØøÿRý¡5?‡¾м%â§Ð,µñ­Ä7P˜`’.Ù¶-•̆ferÎ#d‡Új\¯{_ñKï»Zo÷0Z«¯OÏü¿«žÃEfé1Òx×Â^7°°™mînt ^ßR†ÞVeT‘àv Æ9#p¤‚UÔô Ñgv»n«ô:Ú+μIû`|%ðmƱ‹þ(ü:Ò¥ðõÊYj©yâK8L÷lŠà< Äíå¾ðNÆÀàÖÂü}ð#Ýk°'|$fð½„Z®³Ö-÷i6r£IÍÐߘatGu‘ð¬ªH$Sug.ƒåmÚÚÿÁ·ç§©ÖÑ_4ü~ÿ‚‘øsá·Á}wá%Ï‚|}ðûâÇŒ—ÂW>*±ñdaÑAµ¹¹ûJ xÛÂ>0}ao¨®‰¬[êÂB2q ·–Äsµ°qB÷’’Ùßðm?¹¦Ÿš°Úqv~_Ž«ïZ£®¢¸ß‹?´WÃï€ri ñ×Ç^ ð[ø‚çìZZëÚÕ¶šu)øýÕ¸×Í~GÊ™<Ž)þ.ý¡<ðÿÇz?…¼yãhž&ñQ¥iú͵µþ¦[v½¼Ž$—;ÎÓèhZÚÝíóíê/ø‘×Ñ^âÿÚÇágÃïÅ¡xûâ_Ãý[žþ *=?Pñ µÔ—“îò-–)$ f“Ë}‘¹¶6Á¯ž>>ÿÁTeÐj½gáì§að¯Ç^*ðu߈lµ¿ˆÖÚÖë™.CÛÙ'“0š{Xl¥¹¸ŽSHÞn/Âo•_×ðWrü×q¥{ÿ[è}Ey.û`ø;ß>x“ö’ñw߇ú—tûI­­®<]g-•ÍÜÑÆÍoaxí_(y¬‘œ |ºCöŸøi¤ÿkÿjüCð5·ü#öÑ^jžn½jŸÙ°JÁc–ã2~é™UYð°œÕN<§Ñµ÷nL_5­ý\îh®#Ä´Çà Ãc'Š~ x#LSKW³k½vÖv·N±Û‹H7‰Ñc#;Ù”.IkÀ_¼ ñSźþðÃÆ¾ñ&»áY¾Ï­éº^±oyw£Ë’<»¨bvx ®ðiu·] þî¡u¿õ®ßyÖÑ\wÄoÚ'áÿÁïé?Å¿x;ÂÚ¿ˆcÒìu}jÚÆçRf•" o®­)2Ë` 9iz°‡‹ÿk…Ÿ¼S…ãï‰ô=n{ø4¨ôýCÄ6v×R^O»È¶X¤1šO-öFæØØšNV·]>Ó÷w=Šù¯þ Wÿ!ðßüßàž£®µßµ¿Û­´Ö^Õ|[‹¨j°Kr–í%¬f)d™”¾B,xm¬7)¯ øƒà}SÅš$«£¢Úk¶³ê61*©5²Hd‰V2‚H>•oÀ_¼ ñSźþðÃÆ¾ñ&»áY¾Ï­éº^±oyw£Ë’<»¨bvx ®ðioo5—MP7mý>}¿­¢¸ïˆß´OÃÿƒÞ#Ò4‹~:ðw…µ:Ç¥ØêúյΤÍ*DÞ)]ZRe–(À@rÒ"õ`ÿ ýª5Øö=ñ¿ÅøWNñ£xÁµ[Í*ó[}#϶™Ls¥­Çïû¨P+wu©œÕ8:’Ùuôßîê\a)ÉA-Yí4WÊ? ?à£>&ö§ð/Â?ÚÛáž›àM{⦃wâj~ñQñ“©GirÝ[Ï$¶VsÛOr£`ÀÑ0?,¥¾Qï_¿i‡­5¹þx÷Á~&ƒÃLSW“IÖí¯SJ!w‘rb‘„'h-óãŽkIEÃâóüOîi¯Te )ü.û~)5÷¦™ÚQ^ñþ cû?ü,ð~‰â|bøpšˆµ¨ü?c¨CâI­d¼eWdi’Bˆ7Y™€Ee$üÊÀüoÿ¿ñwÄïˆ_ì_¤|ø‰¡ü5¼—MÕîµO‹6zÑ’+n¤½Š3o,Ma·PY¼æPË?˜ ™2®ÛK¦ÿ%ÿ Eú4öeò½<öüÉüÕ·>ïVý®>ønïQµñWÄ¿‡šeöŒU5;{YÇ&œì@ 0iŒ’@€É"¹_ø(ík¨þÅ?³|¿¼9á›Åk¬é:eյƮtá 7÷ðY}¡dÊ$1½Ìnc!7(oœi6ÒîÒ^­Ùkó'™Y¿+ùýÛü·=ºŠátڋ៊¼ ¯x§Ã| ©xcÂÒ˵«Úëö“XiEþµ.®C ˜ùƒ•+ßÅýª~·ÂõñºüHðð[Ý5ŠëãÄŸÙmp²šuæy^`‘Y nÈe#¥ý}û}åYÿ^[ýÇ{Epž$ý¨þø: Éâÿˆ¾Ò£ñÙEðÓ^kö– Ê,KÈ>ÕèG•»!‡¨¯&ÿ‚•ÿÁH|7ÿ÷ø'¨ë­wàmoÆvëm5—„u_âê¬Ü¥»IkŠY&e/‹k Êi¥y(õnß>ßÖÝIº³~Wùw>”¢¨øƒÄº„|;y«øºþËJÒôèêîòîu‚ÞÖ$]Ï$’9 Š X5Êh´ïÃ_øMñg…¾!øRð¶³8µÓõ›]zÖm>úbÛDpÜ,†9w˵XœñJúµýk·Þ;Ý'Üîh¯6Ð?l¿„+O 7…þ+|6Ô—Æ÷YøtÚøšÊa¯ÏÄ‘Ym”ý¥ÐýåqÀ­m+öø{®üP¿ð>‰ãÏ^x×KŽIo|?·m&©h‘ˆÚF–Ñ\ÊDð’Y@TÏÞ7þ»jþàþ¿OÌì诓ô?ø(OŒ‡Ä¿€šŒ|à¨í>2ø‡_ðõÝþã…ÕÆ‰>› ýÄ{V‚+6+¿÷Ñ´23FUŠ“_C|Tøëàv6w_|eá_[jme×5k}=.\.⑴ΡØ/$ œsBM¤ûŽIÆ\¯ø-~Œê¨®CZý ¼ΈúO‚û]¼Ï£h®GÆß´€¾_ÇiñÆþðýÔÏopêZޤŽ×,P(Yd‘•0Q’qSüHøÙàσv‹qñ{ÅÞ𬠷 &±ªAb†8£i%pfuQÝ›¢ª’p¥}. WdtôW á¯Ú‡áŸ<[¢èø‰à][]ñ&›ý³¤iÖZõ¬÷z¥?éVФ…惃ûÔxëLðÇíUð¿Æ×>!‡ÁŸ<«Íá%/®¥—ˆ-.EQ$‘vB`d3&dÛóF㪧ãøo÷uï+¯/Ço¿§s½¢¼çBý°¾ø¦=yü3ñKá΢ž·¶ºÖš×ĶS "• o%ÑYO’«)F|ÎksDøéàêš-‡ø/P×-ûÅñÇ.…os®ZÅ.¶’2¬mh 7ÙÐ)Œ6K(È¥zÖþ¿«?¸oMÿ¯êèíh®>Ûö†ðïÅ=CÀ¶~9ð|Þ6Ò-Eõ÷‡“Y¶mVÊÜ€Âimù±Ç‚öP0G5¨þÙôˆïVø­ðÚÕtè`¸º3xšÉ´s»ÇÉ™~E‘╜hØ p“NÖëý~Õ®ß×êzMKÃ~$Ó¼eáû-[ÂöZ®•©À—Vw¶s¬ö÷q:†I"‘ WFR`H ‚*íSM;0Nú ¢Š)QEWÍFu/Ž9Ï/Ô?ôLuô¥|×ðgRøãœñâýCÿDÇ@íñÿ&)ªãþƒ~ÿÓå…~ßòbš®?è7áÿý>XQ@JWæìûø+öÅý­k¿j/|n‹Ãþ#ø…µ¦éºÄ^)ðÇ…üQa”I-›ìöWÿé6ò‚’+—DŒ•hšý<¢§‘só=tkïqœPÛn<«ºrkõ?(hßWÚW€n¯„?¾x·ÄÞ$øÕu£ðÖ÷KðÅþ™¬Bt«;*Õua’ÞÁ´ëË|•¹xDLëˆ÷8ÓðŸÂŠ_ à¡Z$ÿôÿx¢Ï\ñn—kñÃþ&ðmÝÆŽ—qøf9<[¡xÀ±Æý’H$•üÇ3&2èê]p²IK[(ÇÕE$¯æÒ´»»IZQ‹SVóMAÛâùs­mÚÎܾW‹æŒ¤Ÿãßì“>¹àŸ~Á>ñ·Â?^¥ðoÄÚ¾›âé$øm«Ék¦¼šV£f²™âµxÞÜÏuh>Ð ˆ‰7"9L{"ø+ÿ “áOíOð‹Ã þ"èÚÆÑÜø+Vëz6Ÿá¶û˜Ä‹x-#X’ÖâÆêUeuó¤DBÊ“ù•úÙE~ÖRœ·•ÓùÊœº­a£»jú;¤Í}£I(ôµ¾\û÷øÿ6|ÿeñ^¶bÁ_|âOø×áµÅLJõñ©h·öVÞ$»Žy<ÍjÒæòÚùoÛuãÍ–s%Ãï$Íâÿecþ ³ÿ -©|CÖ<ðóÂú ø}£é·ÃÉãžãJ±Av5 xõ O9Þ}FYä i’ÑÚYt•_Ò )b/‰”§=ÚkM-'dä­åÌ­·½ä‰¥/c¤{§ßDî–·Ù¨»ïx®ìü™ð·ÇoŒ¿fØÏâgí)ð“âî¥/Á/IgñG@—ÀÚ‰Ö'¹]2çO±ñ ¾Ÿ5¼s^B’\GvÍo¼fV‡…€á/þ‹þºo|ø›.‡­~×±øÒÒÓYøY©JÓx~S¹½–ÌÚ4–ð?”åÄÉàà “ûCEiVöýnŸ–“¥7§›¤¾M®ÖÎQæ£ìzYÇåËV+îUe½ö^wü~ø—ðƒÃºO‡¿j-WÂ>"¦»ª~Ð^ñsið›XkíCN³¹Ñ%¸º´’+ÒÛ¤–ºã‚„ŒJÇŸ´/™ãÿ„Žóà—Ä;ý ûö¸Ñ¼akm?ÂMkìm¡6Ê »ãéá¹’ •rFÄÊOìÕ[£(I}•¿íÇI«úº*þM®Æ•%í!Ríó_þÞUàª;yüÏ‘¿à”úT^×ÿi;M+Á^+ðV•yñ{RÕ´¸µ ^hêVÓÙØ«]Ú ˜M—]ÉžÇ2çã}{á§«ø›â¨øe¥|jø?®AûC]xÃÀÞ,Ò~ê—–[7…ÒÏí—Zt–»°¸xõ gxÇË$Ñ9;\ý¢—ò®ÔãOåggëû´ûjô+©¯æ“——½ÏugÓß~gÅ­qã¿ÁuXþ%ü±¼ñ½×à Û†zmµÝ•½é6²Â–Q[FËuÉÂ-‘–då®<Ïþ -?Œ-¿o‹zŸÄÝã,ö^:ð„æÓµïøO é’Icý¡Í¥´Bû,p½ÜQÅovò]²s$èÍú=Ejª%R¤í¤ºv·5¿ô¯¹y“y:Q¦ÝÚëÕëÿ¶ëÞýÒ?7à¤ÿðN||ý«+ðÝþ¥«ëNšmýµÖ¤<5ä5ÔpE$¶do•‘ÜEåÄ’ËõwüËà‘ðÄÚ+ƾ ðŽ¥à/‡¼oo­øSF¿Òåѧ•K´†òý´É‘%²ûMÚNÁ%Ž9XF\ýE]6©EÂ*ÊÖòJÔÕ¾^Í[¢Méµ¢iÔ”dÞËõ›¿«sw}tÛ[þ=k²øƒá‰_ tσ~+³øçªþÒrøçEñDÞ ¼´³±ÓGˆ ¼]`xŒÀ-NóÐF—f-å,{Ž*…SÇð~Ú¿ µÍcá7ÆÍBð¯Æo¶¡á­Àw‡@Ò£ÔíµH`ÔßS’).¯e¿žèM%Ü2‹ xä åC±_Ù:*cîÂ0è£ËÓùiÇ·jiõÕ·µ’ÕÔnS›ÞRoÒîmë¾óvµ´VÖí¿Ã/ƒ|ð-áׂþ*üKøAðþx–Úÿ\xc⟤iÚ¤“7„Èš“YšÄw"}å#$JŠ}sÄÇ€>1|6øÝð;à·ÇKá¯ÅøKý­¾~КÅ_…~:×üA=åå…ÓxQíu ››‹ÍZ+èbxïÅÅÙˆééçM4íäùJ¤õ抎UÉ5~U¯ýØÓŠùM7¶îÖi4T~ÒR“ë{üåROÿNI}Ý.Ÿâ﯀ZOÂø$ïÁ­ àŽ´?ˆÅÝ"ë^·°øIª/ˆJ°ñ\š{ˆá±3µºY¸•7eN≙2ƒgöÞ>:Õÿj_ø[áoÆ3DÐþ4øÆYxSáíî£iâý>ÑtÏ?[¼¾–$–Hc-£°Ó¼‡ˆÀÍ(ü(ðL¾ñï‹ãŸLÐü?mk–ÖR²µ„¸º…%‹Ê2t²IlI¿N(¬éÅSwÝÙ}ê.)®×Œš}öÙ$¦«uåÝ¿¾JNýí%xöwz¶ÛüÁÿ‚±üø‹ã¿Ú—ã.“ðCÁ^2Ôõ?‹ÿ³êø?ú¶—¤I.Ÿ&¥¥=ÅÞ 1 ‰’ÖuUk‡_ÌÚ¥› } à_‡àý ࢟þ'üøqãhÞ øYªø{ÆM®xRóÃ&Ùf’ÈiÚ/—soÚš m¯dÛ’(•U²Ñ>ü¢´£?d’]/øûOþXþåÒéªß¾m¾¶ü5øû8þ>Vüïý§f½øeÿ øÍoûIü ø“ñ—á·Ç?‡zG†¼;qámõx#û+ß-æ‹w*:8\K|“,ó<0ðYå_/)ä¾ëz_Á_Û_áÆŸƒ~)Õ¼iñ¬[j_äÒðN—£êºÃSP›Ä:µ¥²¥Üº}à´ÿH u¼’HŽTùaÛ8Í}©êö^"ý·?kKÿü8ø—¨xoÆ_ ¼?k¦Ü]|1Öæ³Õî-bÕ<ûh·X•šeûuŸî€,İPLnôZŠx‹â¡(Oª’ÓO‰5¦ýïo"píašå[rï»åqjïþÝKæ~êp_Yø7áwu¿|G²¹×ÿdË?†¾7²¼øY®k·’iLK…¤h‚u–ßPf¦ÖÞS¾£öߊéß |k¬êß³oÃ?‰¾4økãïÙpxÂ~ð=;¡es¨n°¼·Š$:tûn”ùw Þ²§.Ã÷oÅïø&ÿÃŒ/¾"_Þ|GðÏŠµ›;m?X¹ð5Ÿ &¹·™öu¼M:ê”Æ&”+œ8FìcÍà¯i_|%§è^±ƒMÒ4¨ÚÒÖ„…`žIîIÉ$’I'5X™}j3Sû\÷·iû[ýÞÖMyïr¡5J¤eRäß¼=–¿?d“òÚ×gä¿ÂÏÙ:/‹´WÃý+Å?5ËÛþË6¾]wÄî“OÒüUlöÏj’ê3Zæô“y)å…>Ô>‰ÿŽøa¥ÝxÃàÝî¯ð_ãׄ>(ü(ðL¾ñï‹ãŸLÐü?mk–ÖR²µ„¸º…%‹Ê2t²IlI¿N(ª•Nz’¨Ö­Éú9J¤®»QóŠŠé¯’O„úºêš•ìp˜[—³¾)ÒÕæ¾V‹/Ê~ÎQSJN”TWFÝý[v¿ÕÍêKÚ;µ¦šz(­{ü+]útVühý²bñ§Â¯Û?À~*ø-ñ{Æ~4ø×âÝÅ^Ö4‡÷ú¦·¤ùzdv–²ÝG l>Å>ønÌ }Ê s_gÿÁn<&ÿ¿à”:Ó4¿xꦻo§>¡ÚxfçXÔVµÁ'6–ñK"2 “smÂà‚Fyû"Š—­8ÓíʾQJ*ýÝ¢®ú½|‰Rj|þ¯M5zý×ÙvÒçäíQû?x+Yø“ûh7ÿ€ž0x‡à&•áÏÍið—TX®ïÖ IÓMt°Y|í 2!œ vòü÷ãž«ã¿|H¾Ö<5ð“ãÞƒ£èÿ>xÂ}3Døe©J¥¡i~»>ТÔàÕ!‡V“Sš9.od½šëÏ’î)–ÂäØbƒb<¿±5GÄÞ°ñ—‡5 #ű_iš­´–wvÒŒ¥Ä2)GFÃ+~µå*4ã«Ù[^¾å(jìúROmäßdSjr“—Únþ\Ò«'oWmvV{³ñ7ö Ò4‰Þø;ˆ‡Š4OxAñ–‡ð§XÕþêÖ‘êWìÏ&—uyâ-ΟÊÅa%»ºM5Óyr·ü·ú#þ ðÃKºñ‡Á»Ý_à¿Ç¯|QøQà™|â+ßÇ>™¡ø~Ú8Ö9-¬¥dk qu K”d éd’6Ø“}oû;Á3þþÌz–/Ãùþ"êV~aÐ4¯øóZ×4Ÿ¢GåÆ,¬/.ä·„ÇÈŽ¼jHVPN~ª\±“’×קŪìß<ùµÕ4º;ÅWí_–öõiÙ÷K–<ºhîúÙ~KÿÁq|'ñâ7įŽ~øQðçâŽïü °²²Õ¼àùõ§ñܰÞßJtË«éR[[{Q4“aH¯nuòæ;#†O¨?à­Ö¡ñþÉñ2‡þñþ±­øóÁ†ËIÐí<-¨]kr\\ľ\sXE OnÃ??š‹åœ‡*kìŠ+)ÁTü;Ùß_&äßç§k_[šª­UT¾òŠ×¿ÃëgkèοðLÏüNÿ‚püAñ/ì­¢|BÔ>4ø×á„þÑï<{­ksë–°¼#ÍÓ!\˜É¦‰ÊÉ(Xƒ‰\óŸÚ+á–‘û`xÓEñÃߴ/èãånK~>Zh_¼;¤xCVøÛáo|Tðᅫú¸¾6Ó~_éž$ñV’t ›G¹½Ð„âim –6<0üëà˜œ‰~6è—ß?b/ø(6ˆ~üX¸×|yãõ é÷ 5—ŸS3iZm´2Ùÿ¡²ÈÉsgr ÆHM‚BÁ¿_¨§ÏnkuM}þÊÿ$þlÒœ7 -½-Q¥ÿ•ôHü›ýµ|;­øöïð'í#ðcàÿÄm î4ÇøK^·Ô>!Ç;I%½õ®’Ö ]¶†òÇu+:æ&¶‰Ÿëø,·/ÿhø&7‹l| áMsÆ?oºÐ5It(4y§¿¾±‡X°º¹û=ÐK#‹x¦&ܧ˜pSnï–¾´¢’• ¡ÑIÉ_»jM5Õ]zÙÙ·eiWRRO[%ÿ€èŸ“¶´½–§äGí5ð¢{ßüiøÃû |ñ|?×´¯hÆÆçÀZ¾q«éúû\K­Eá¤[KûÁ¦Û 6’5œ¦À^$—<§„¾xß\â­ÄŸµümmñâOø7â>§ð²M@Än<.-b½Ôtë==mçµb¼¶’8¢íÚ{a8Ù”þÑQDZŠ”{«.êòŒÞº}¨+vZ;¤’m[MwÓGh¸-?ÂõóÕr¶ïø«á?†Þ(ñ6§©i¿ðR/Ùóã;x{ã?¿èÚnðÇEº›J¶:sÝ#è—0c~¾Kˆ®¢ q œI*yGj~Ò>ø…ðóöuý®>|Tøñ_Äÿþ)ëþ×<#¨h>½ñVŸªiÑÛéP[Ù¶µ %M=¬.CµÑƒ;üÔÊE~ÕÑJ S©*‘ZÊ÷ôçç[[TôOµíg)6îÚ6­YÝïuçf–ªýµ²I|{ÿ‚ð÷‹¾#~ÄÞÖþxKÆ~)ƒÃ^/ðï‹uÿ è‹åëú–—gyÌðÛ@sæÜÆËËûÍÞOä_Ÿ³¿¾ è×~üøÏªx{Æ?<5â­rãÆ> Ôµ;ýXÆ®š­ôºA´y4ûA¶‰å™",„dD’_×Ê*iÅR©íüñšù:n×þWìãuêý&^ü9ò¸ýêJöþo~ZöÐü~ø—ðƒÃºO‡¿j-WÂ>"¦»ª~Ð^ñsið›XkíCN³¹Ñ%¸º´’+ÒÛ¤–ºã‚„ŒJÇŸ´/™™à+¯Éûhü&ñ/ŠþünÐ|%ᯌ¾5›VðÎðÚþm I¶Õ-µH¡Ô庖 /5 o¥»ó¥š)”1Éå˜!Ú/ì¥T_²qòŠÉFœuó´ßäi)ósy·~ºóìú[ÿÃ6~D~ÇšN¯á#ûiOðÓâÖ‹ƒ¾.øûUÔ¢—áž»gm¢i÷ßÛ‹c,ŬV8"j6ArT(s¢96{ü³áçŠuïxOijòøÖßÇžðoˆíìR]x¿ÂÞ.³¸kµxoX···‘­Íï‘•6øð"˜rv‘ú E){ü·éÿÈòÿÁÖéìÓM¦ÝYsº‹ú÷Üÿ[&¬Ö5$™ùáÏ„Zß‹>1|Ið‡í±ð7ã¾­ã¯øóHøáQáÙn„î'[+$´ë‘!Om5í)<×ˉ|¤äT“ÑcOø'oÃOÚ—áGí{áoˆ_'ðUÏŽ<âK}ZÖ~M¡_&—okä]iÓ]ÚÆæ1<@¨xxT²Œ©oÓª*y"”’V¼\4ìýž¿âµ8«îÕü­7*|­;µ%+¾ëŸNÖ¼ÛJÖGäÏ>ü{ñü~×â‡íàoø‡âÅ¿Œ¼-qã x|íÍCþ¼ò„vHP™%¹K½b8Þ7›T° ?ñÛà/<_cà¯|7ýŸ¾7êúGоI5%uæ”ÚOWk&ÞçÈ?ðWO…V~ÿ‚@üWðìýà[ùÖóÂòè¾ðÏ„<3=ã,¯*(,¬acgø¶*'V+Ö¼—[»±ð×í©ñ'Æ?´/È>*ø_ñ§àö“¢xnh~jz”¶kjo›PÐï,Õîle¸7pʱÜCLË·%Ð-~ŒQQ(©©)=ïøÆQ?zÿ+Y¦ÍUKEG¶¿>hI~0_švkò/þ Ýû¯ƒ?lžý¯þ _k:·…ÿgÛ=VÖuͪi:Õ¾¥Õ¥£êïlÖ¯sojŠŠé!T0ùjÀ…SôÏüá†ãoø)o앬x·áέâí;Ã^!¹ÔõH|w­Yé ú~Û3qu ´‘À~ԪȔ«€à½_mÑZÔ¨êr¾ÎOç)ʃ•—’F1Š7šKîŒaø¨ÞÝÙøçðá–“ð—àßÀCÀ?þ%iºþ‡û@x³^½>kÑé·QëÑYËy(±S2C{¢Åæ¿Èªª»ˆüÛá'†¼es§èÏñàÿÇhôKöoñW€“Âéð«R]‹Ig-¾‰h†Þ[ù•RÛþ?/e˜\M†…Ô–†/ÝZ+M8Î-é$×¥éºZ|›k·K+ߦ5Ü**‰+¦ŸÝQÔõßO5ºnÍ~^þÃ_³ç‡Ç¿ƒ>Ö¾ ø³BÐuŸÙ„øCÅó]ü>Ô4­*KÉn,¤“O¼ž[d‰n]IÙ\‚L‡$³¨>ÿgøãk>%Ó¿h)-µ+?ÙÔÝ|ð¢$ɨéQ\-ÓÞ3 ®öÿضnƒ;$Ò¤îfUûcã­/ãÂýwÂ>4—T‡Jñ £Ù]I¦ßÍavˆÃ“Ä,²DÞŒ¬ªßþxköpøW¥x7á%Œ–²–[‰.gžYdi¦žyåf’y¥–I%’YÞFf$’k®X‰Nr›ÓâÛ¼ç9ßþÝSœê§®ÚñÆ’§N4ã·»÷FŠûÜ ÛVøm³Óàÿø(´Þ#øUûnüW×m~üOñž•ñ/öw¸ðŽwá? \kQMªÁy¨Êl®E³´w±º¶#á±pø¿ˆ~üPð ø1â€Þø‹Žô‡_¼=âox‹À—þñ´W²mˆj oQÓn{¯5æU Ð9CgöŠÆ‹T­¥õ‹ÿÀeR_µ’~VÒúšW½gu£³ûÚ¦¯åoe£Þþ‡äoì“ðVÚÛÄú…?k?‚¿u¯ŠŸ <ârmJk+·ð}Å­õÕÔ÷zÌñBɨ%ÍÑì %ži›ÉòUI+ðö<±Ð¿à›¿õ‡^ø‘ðãG‡¼o«Égâí3áÕÆ© Ì­5¡ÖtÖ±3Ýi“ZÞ´!±±ê?˜ê?g(¬aMB‹Ë]ÒJúy%óþí¢ª£ö·Öûë£æv×ÎOóø®ßÌ?°gÇi¿þø/ã—ÂOx7Å~(ð•ÅÕêhšøkÂßbò‘-®ZF`óÇ,o «©eÛ$m´ÇƒôõVõ&§'$­{þ-¿Áiò" ÅZNÿð߫׿QEAAEP_5üÔ¾8çøÃ\ø‰­]hÚZk^4·Ñ´ý|#סÖF™Ä;-a$“ì–Ó´o8X‚N¯pëäà¶ÅŽN’BMßOëM»î¶÷m~¿ðËúº>…¢°¼ñGÃ?,o.¾x‹Bñ%¶Ÿtö7Réwñ^%µÂZ&`’ÊJ¸qÍx—íÛÿðŸìㄚOÄ{;‹ãñCÄñhsM …W@³r¶§qò‘öt»ºÓmر@ âÙXIÊQŠÞM%æÞß×̲”žÉ6ý»ü¶ß¦çÑTV?¾!øáO„o|AñG]Ñü5 éÊïRÕoc³´µRBƒ$Ò²¢H$r@¯ý‹à¤>ý©¼ãxÆïÀÞÒ¼/ãëïé·öž,‡RÓuÿ!`1Ü[Ý´P«™Lø¨l€ÌiGÞn+t¯ò¼cùÉ.úŠO•&ú»|ìßåþGÒ´W›h¶_§†Âÿ¾jKã{‰,ü:m|Me0×çŒâH¬¶Ê~Òè~òǸŽàVO€jý:[ï/Ç-Káÿƒ­tOIáÍeñ…­ÙÕ#ò`’&NϲÝ9œ²1g ±²CŠ®ßÖé}þòÓqô¿õ×ðÑë±ëôW9ð§ã„~;ø&ÛÄßüSáÏørõ-õ] R‡Q±‘Š8IàfF*ÊÊ@<Aæ¨/íðõ¾2‡K㿟ˆ+möÃá­[lˆ1Ÿ7ì[üí˜çvÌc½7Ÿ+ZŠê×èvTWáÚ«á®|Cƒ>$x W›ÂJ_]K/Z\6Š¢I"&ì$„À<ÈfLÉ·æÇU YøgûH|;øÕ¯êšOÁ¿ø/ꦉ ½Æ£g£kv×÷Ü'™Ï23F²'ÌŒÀ^FE 7²ó÷]™ÚQ\wÄoÚ'áÿÁïé?Å¿x;ÂÚ¿ˆcÒìu}jÚÆçRf•" o®­)2Ë` 9iz°Ë|ûq3þÕß|ñ·KðÏ‚¼;ð‹GÑ5ØüK7ˆ·Ái¨›À$ºA YÍ‘|ÉTîjK_ÇðÜn-+ú~.Ëñ>ƒ¢¸_ö¬ø]áÿ…xç^ø“àÝJÐÃâ ZE¥M"–VE»iLÀÇ 6AFô5ÓÝxŸûWÀ²ëN›®™ìšïM+zÒü”-úB,c—÷Н€rt*RPRo¦þ@—3Iu5诞?àŸ_ðQO~Ýü­ÿixOÃþ=ñV„¾ »ðD#ƒPÕ4‹w‘ÑYã%dù?Ö•IÎ+Ö¼ñûÀŸ<[¯è mWŸá¿Ý×±M5¿õ}¾ó¯¢Š(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÍFu/Ž9Ï/Ô?ôLuô¥|×ðgRøãœñâýCÿDÇ@íñÿ&)ªãþƒ~ÿÓå…~ßòbš®?è7áÿý>XQ@JWæìûø+öÅý­k¿j/|n‹Ãþ#ø…µ¦éºÄ^)ðÇ…üQa”I-›ìöWÿé6ò‚’+—DŒ•hšý<¢§‘só=tkïqœPÛn<«ºrkõ?(hßWÚW€n¯„?¾x·ÄÞ$øÕu£ðÖ÷KðÅþ™¬Bt«;*Õua’ÞÁ´ëË|•¹xDLëˆ÷8ÓðŸÂŠ_ à¡Z$ÿôÿx¢Ï\ñn—kñÃþ&ðmÝÆŽ—qøf9<[¡xÀ±Æý’H$•üÇ3&2èê]p²IK[(ÇÕE$¯æÒ´»»IZQ‹SVóMAÛâùs­mÚÎܾW‹æŒ¤Ÿãßì“>¹àŸ~Á>ñ·Â?^¥ðoÄÚ¾›âé$øm«Ék¦¼šV£f²™âµxÞÜÏuh>Ð ˆ‰7"9L{"ø+ÿ “áOíOð‹Ã þ"èÚÆÑÜø+Vëz6Ÿá¶û˜Ä‹x-#X’ÖâÆêUeuó¤DBÊ“ù•úÙE~ÖRœ·•ÓùÊœº­a£»jú;¤Í}£I(ôµ¾\û÷øÿ6|ÿeñ^¶bÁ_|âOø×áµÅLJõñ©h·öVÞ$»Žy<ÍjÒæòÚùoÛuãÍ–s%Ãï$Íâÿecþ ³ÿ -©|CÖ<ðóÂú ø}£é·ÃÉãžãJ±Av5 xõ O9Þ}FYä i’ÑÚYt•_Ò )b/‰”§=ÚkM-'dä­åÌ­·½ä‰¥/c¤{§ßDî–·Ù¨»ïx®ìü™ð·ÇoŒ¿fØÏâgí)ð“âî¥/Á/IgñG@—ÀÚ‰Ö'¹]2çO±ñ ¾Ÿ5¼s^B’\GvÍo¼fV‡…€á/þ‹þºo|ø›.‡­~×±øÒÒÓYøY©JÓx~S¹½–ÌÚ4–ð?”åÄÉàà “ûCEiVöýnŸ–“¥7§›¤¾M®ÖÎQæ£ìzYÇåËV+îUe½ö^wü~ø—ðƒÃºO‡¿j-WÂ>"¦»ª~Ð^ñsið›XkíCN³¹Ñ%¸º´’+ÒÛ¤–ºã‚„ŒJÇŸ´/™ãÿ„Žóà—Ä;ý ûö¸Ñ¼akm?ÂMkìm¡6Ê »ãéá¹’ •rFÄÊOìÕ[£(I}•¿íÇI«úº*þM®Æ•%í!Ríó_þÞUàª;yüÏ‘¿à”úT~×ÿi;M+Á^+ðN•yñ{RÕ´¸µ ^hê6ÓÙØ«]Ú ˜M—]ÉžÇ2çÀbôÖ4 .×áGíû6|Añ7Åÿ†ÿ|GâèT’3wræoís|ìÒóµŸVÛjí¶~+~Ï¿±®·ãïÙ‹ö]ð7ìýð›Å~=ü¾Ö.üUâmKÁ·ž‡FI4íRÞUþÖšÝ"ÔMÝÔÖ²\nÌl"“^ãÿŽøa¥ÝxÃàÝî¯ð_ãׄ>(ü(ðL¾ñï‹ãŸLÐü?mk–ÖR²µ„¸º…%‹Ê2t²IlI¿N(£™sÊvß_GiGÝþUi4Ö·ï½Ê—©nnšz«©{Ýß2º};œ_ðQi¼Gð«öÝø¯®Úü1øŸã=+â_ìïqáïÂ~¸Ö¢›U‚óQ”Ù\<‹ghïct3lGÃ…bà)ñü5ø¡àðcÄ?¼'ñ?èÿ¾x{ÄÞñ€//ü5ãh,¯dÛÔß>£¦Ü4÷^k̪ r6†Ïì-Qj•´¾±ø ªKñö²OÊÚ_P¯zÎëGg÷µM_ÊÞÊ/G½ýÇßÙ×ö|ñ´–žñçÂߎðþÑŸ üiâ}SDñ5Ḵðe¬ÚŒ÷r·ˆ"Öncš´ÓsK$§Ë1¢+Ëߨ·PÖÏĿزüøÅá]{àn“®ø{Çw7Þ»³Ó´k§ÒÖɧ™ŒZÝEuv¦àI²oWó¿]h¨Ã¥‡‹ŠÙòßÍÆ.)éµÓwï¢Ù$ª¬Fß_{ÿ&w׫³ÛæÝÛmü?ÿ0ð׊4ÿÛcà‹<áêÐEáïx]u]C›T:&¥¨ÚØ®Ÿ%Ï’¤ÛBd‚BnlQí˺kÁf?ƒ:·Ž<ûxCà ügொ?³¦¶ÐøÞïRðÍΗm£YA¥]Zê{5F„[ÞǨ]Kjè-¦“ícHr"”§êÕ¥{'óOÿr’üg.oæV].ÕOÞEǺkå%gø%nÎï[èQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEó_ÀQKãŽsÇ‹õý})_5üÔ¾8çSMäG8v“ÊŽI6[j3cš¦œwôùöÐ먯š¾ÁH<;ñËöÿÔþ ü"ºð?‹4=7ÁMâ§ñ'‡üY©$3­ôvcsi EmØg fbÀ}Õæ½£âGÇï|Öô-7â÷|%á]GÅdÑ­ubÞÆ}^n?uj“:´Ïó/Ê€žGÒZÆ3[Jöó´œô¤Ð›IÉ.þWJ_“Lëh®Æ´ÿÃO‡"‹Gø‡ñÀÚ­=ä|vZ޽kks%ÌáÌ0,rHÉ ŽBˆæØØ’Ãö¢øgªé-Ô4¿ˆ¾¹°ð ¯‰îb×íH€–K÷bÕ”H”©æëòÿ5÷¢¬Û·_øòs;ª+Ǿ ~Özd¿¼+â_ÙËSø{ãÝ#_ñU—‡ç¾ÿ„ÆÖÒÆ(¤ºû5ËÛÜ1.nb•mT‡’OÜUØËö®Öÿi{âþ•ãÿ éžÔ>xæ°ÖT‡PD²³»KŸ1í (YoTö¥HÜÝiÅ96–êíú.[ÿéqûü“Ñ'Ñþ¼ßü‹þš=ŠñŸ†ðPï‚´ÿ^xâŸo,~j-¦xŠåµ«háÒä |¬ÎDÒnel#´n¶3^›ðÿâ/‡þ,øBÇÄ? 5ÝÄÚ§›g©éW±ÞÙݦqº)¢fGM$ù’’٤ףWOÑ­Wq´âÚ{§ošÝ4W ß´€—âÂø ¼oá㧈ξ:Í¿ö±Œ(bâÏ›´++gn0À÷¯›~ ÿÁdþCñÁÚGÀ-sÀþ=Óõ/ˆ‹ð÷Å7°ø¢;y|+)µ¹¸Fùб\ǽž-*Î ‹S’‚Ýÿšý/$›Ù6® 5M­mü“’nÛ»h}ƒEpµÂÝGà£üKÓþ%x‡1/â¨üChÚ"m“Êlß <‘‰CóðÜuâ¦×iðe§‰­ê#¶³ÑõF‘ @#¾,ce“ ›ò2@lb”Ÿ"mì·ÿ/Q¥Íku;ú+æ¯Ùgþ EáÏÿ°O…þ8|b»ð7Ã;_5äÐê¾-…t£/xrxËíº±}¡ëÞŠëOþͳ¶[‹Wº†;iÝ.`”„‘$ÜK#ÄyÅý§¾ êÍáÛÇágÅß…Þ3ñ‹þ:_.¯ðóT±ðµÎ¥c¯#év–zdÚQC$RX^Û–atðˆUŒãîqõ„à¡þ<ý¨¾%xóMÿ‚|,ð÷¼+ð×XŸÃš·Š¼[ã |5§êš¬ûE¦”¶úuô·+ `<‹ {øC Ë@øûoØë³·Ä_Û'LÓgùÿµõ=ûLñf½o vÚ_ÜÚ®o$òâ“ÍKo9Y2…_(θvTâ•(ëî¨(ïfÓå´—›ä‹O]ÿ¼yœjJV÷¹Ûïi{ÍÅ÷JòºÒÍYê™ò?ìwûø3âgíßûIi´×Á·ÕSðï…ì“ÄÚ瀮!²Ö/¢Ò®luy¬5;«UYdgŸ ,oºQ!e.7㟿aÿÚŸAÕ¼ |mîl/´[{ßÙšêú#¼›ÁŠÓ4~0iü²ë:y0ù19h÷*°#ÏzýZñ§í/ðãᾇgª|DøàLÔläÔm.õvÖÖ «TŒÊóÇ$’x–5g. P ±8¯ý²?à¨Þý´?†ð|6ñOÂÍ{Ä.xjMgƶÚVˆöIiqvÚŒ÷¨³0´+m䤱Å"´Ó™· ¥ÏÌÖí&­£z«[Î.p·iK²¶0¡Ë²ÑßT’ZßüJ¾—qKfÓø¯þ 7ð¯Æ7þ"øÅàÙïáoÄ­?L»ø-¥èº-ï¼6°ÖÍ$y<ˆR+Ûƒ2æ;#†L?‹ÿ²´¿¶¹ûrê_¾x‹Mñ¯¼áëïjÞ)ømu¡ÏzšmÄ:”vw—öѯ&01®Zlä…r¿£_³í©ø«àçŠ|Uûbéÿ>·„õ²ÔRßÇ–šÕ–œ¦ÖÚRo/BE´‚K‡O-ðJ¬oÒ@+½ð÷íKðÇÅÑx~O |Fð§‹&†Öšý¤ÃY%ChRC礓w52¼©òÉÝ»»õNmÉ~kGÙß]´…UNQpI(Ú˧º¢Ÿ¯Á¿gÕ$|OûüN¿àª¾ñ—ÿ‚¿<á‘øZêçÄ_ï|9m£ß.¥Äzc5ÄQ£˜bŽE$@à+×%ûvü&Rý¾>1iµ‡Âï¾üiðN‰¥ø~XM¨ÙÜý…î|íù¢P4÷k‹¡qÒ¼PüîÏ*%B´¿Úcá¾·áµÖt_ˆ>¼Òíôõ¾ƒ]µ’Ù®Qw<U“i‘T‚S;€9"©èŸµÏÂøÃ:?‡>'|<Ô5Ù KÃÖ6Þ#³–ç^µ9ÅÅ”K)k˜ŽÖùã ¼x©¬£ˆP„–‹›MïÎç6µ¿ó¶·Ñ+Ý^ùÓýÓZi+r(Eé =µÚÎÖü©ý¥?f{mGÃÿ·zê¼muâŸ|9ð΋á×±ð§­O¨êqéíñYj‚À}¿eâÙ™náü¡)ÆÜ®ïí¢Áà‹^9Ÿödýžük¡j?þ[ØÇoð§_‹LÓ¦Ó|C=ËÜ-´6Æê}>Þ{ ň‘üŸ)ÁX¥EýWø…ñŸÁßçÒâø­âÏ xb]r²éÉ«jY6¡7»€Jëæ¿Ì¿*äò=k+ĵÃ? ÚëÓø«â/tÈ|-y­Iw¯ÚBºEÔÇAtZ@ •ÉQðÍØ©MÊJwÕ;þ zý¾÷×{»•®_f–OÆéo±m¬ÕÕ­¡ùiáÅá¯ÙøßáÏíâml~Ô^ø¦kšÿÂÛÉ/ï4qýn5:nž°Cû« ’ñÇnŠ9Qem‡îßø%åÝìÿ?j›_Þ6ÐmüCñZmkJ—^ð¶¥£G©Ù'MµÛµå¼Bd3YÜ/ÈIÂû¬…¾‚ñgíQðÃÀ_ 4ÿøçâ?€ô_jëØø’ÿÄ–ÚEêÊ3ŠñäHr¥Xîíšw‹j/†~½ðõ·Žþ"øD¹ñrÆúWúý¥³ëK#ÇfÑdÃ<Р1îËH€rÃ:ÂN„WNO?†Š·­¨ÇKu~Vu&êêÿÅøÍ¿—ï}–§åÖàÿü+øÛ¤Þx³á/ÄíGŸ ¿i_øßÅZø6êî 7UKèôZÁcލ-Þí&e´Y¥€̨Usö'üá-ç„>3þÓ^2ðï‡uO |<ø™ãøµŸ Xj|º\·nše¬† ,&Ž9 K‹È¦`ΊÓóyGFn·ãü§À:ÇÅ/ üñOÿ|Wø]cÝÿ†5_Ûhq¡b»Ök©w–%`d}Œ±³¢1 عâoÚ#À^ñž‡áŸˆ7ðv‡âþËÑïµ»h/µ"ÙÀ¶Ü<Ù*øØ§;O¥gF|´ãëx¨§ÝZ N÷öko?+*Ñs›¨ôÖOÓÞœŸ¥G¿’ïË™þx¯Ä²=ÏÀ¯|7ñ˜øÿ¢ü~_Xx¼5tšuÊÉâS©ÿÂEº°µ² Ò̰±3 Õ[mÑ£dx—ÀwöÞ1Ð~|Nø%ñOZ´Ñk­KÆú³'ÃGTÐäÑ.ŸQ{[Ñs»Á< ÝÛ»-åàï @õ?ÅÿµÂχÞ)‹Bñ÷Ä¿‡ú·=üTz~¡â;k©/'Ýä[,RHÍ'–û#sllƒT&Ð>&|>¾ðÝÆ 4ˆµ[YËc-é$}•gY ²òÁݑҰþ5~Þßÿg߇Þ(ñ7Å/‰>±Òüy›¬”Õ –]>òW)¬±«–Žfe`€?#“€¬FPŒirókeë½”aüùbûkk?vÎruŸvß͹¿Ãš_uÿšþ/ÿX]WÁÚGÀeø_àŸÝÙhþ;ˆ¾¿á Üø†ÿáôL¾·¶z]²²<…&kT’â)íà3‰ J¢×ÄðOùü{û.üOø1âÏÚCáÇSÁ^·ø…á+?Ãë­KVðæ³©x€êpêYÙ@ÆXn¬BÛý®Æ'·;Æ#~ÉxKÆZ?¼)a¯xUÓu­U·KË-FÂå.m/ uÜ’Å2ŽŒ!”AÈ5ÃEûf|#¼ð/мM¤|Oø}¨h>Bþ ¾´ñœÖú6qu"˶F0$+œŠ®aÎæõ¼›¿KÑßåûzÏ¥]ÔŠ§¦‹îm¯ÅíÚöµÙùgûÃãÙjÿöañÇÇß‚_âø{ xKÆ~e¯€ï5SÁ𮡭 ø.æÒí£’ê(®,c[a$qŒLoµXÖwì‘û:XøÀ~Âúí û9xßÉÐ.üqiâ+o|/»¹³Ñì5xÚ|wîm^"wž6ÿÁz<%ðËÆŸ¯üß |KðëáÅÖâ ÁñÊÛÄ—Pé©vLÓY wµÍŶœ¸Y>ÒÒ.ÌFw{ìûlx÷ãïÅQ£üIðßÁÛO Ýéw𖙝øCâ|>#¸‚[Xó §Ùa—ËWžâ)d#ÉnçÌSXáá¤í{Ù·ª½£½Õµi&š´“V‹Iò…~gt¯u²oã½µ½ÒwN-8´ù¤›JGÀ~Ò~+èÿ|âŸÛÛá¯Åx÷Iñ—€ç×>x6úÞêþ{½N+—Ö¯¼:5Í¢j±DâFH¹•€T”½ã¯€ž5øãO‡÷ß±ÇÃ߉¾¿Ð¼9á=o†þ*ðåÏŠth–úåܶK­Ã &“ªé‚ctäÜ4pîˆntÿP|ûVü.øáÿjß ~$øÄ:WƒÝãׯ4ÏÚ]Û茀³­Ü‘ÈVܨV$HWô­ß…ßü)ñÃÁ–¾$ø-âox¿Ã·Å…¶©¢j0êWNdð³#`‚®—-7o†Ï³jòzÛM\¥m,“j)QJnMËY_ÎÏM¯ªµ£}y›I¶Ûwè~´Wj?†CǺ¿…OÄ_ÂQáûy¯5Mû~Óíúl¤o4·þg™F³BÌΠ(‘ 0ÊÁûPü3º“OKoˆž‘õ}6]bÅS^µc{cs%Ô@IûÈE)iW*m’6œKi.g¶ÿ-uüÜûr»ÚÚÿÚûÑÝQ^'ðÏþ ?ð#âÏÀÖø•á/‹_×ÀÑÞɧK¬ÞkÖ¶–¶÷[÷S<²(‰ÙÌT}¬Q•±ƒ^Á¦xOÖô5]þÎïK¹€\Ãy ë%¼±Ü$YÚÈWÀãÕ5kß§ü?ä.ÞeÊ+Î5/Ûá¦ëºÇÅO‡–~²‡QÕg›Ä¶QŦZÍ#E÷ eÄQ<‘º+¾™H"®xŸö¤øeàŸè¾$ñŸÄ_iñ"îÒuKÝ~ÒÞËTwæÚw$ÃoÍòÇ=)/{oëú³¶þ¿­QÝÑ^}ãÚÛáOÃÍzßJøñ7áö…©Þ_Å¥Ág¨xŠÎÖyîåŠÙ#’PÍ+€JÆæÇÖ—Œ?h/|=ñæ‘á_x߉üBBéz>¡¬ÛÛ_êD–[ÛÈâIIØøØ§îŸCFöóÓçØ;}çþ/ý¬~|>ñLZ¾%ü?Ðõ¹ïàÒ£ÓõÙÛ]Iy>ï"Ùb’@Æi<·Ù›c`Ô¼øóàm?â•¿¯ügá8”¢Š(¢Š(òÃþ Ÿÿ0øÑÿ>ý´> |Fý>2éþÑ<iœð^\ßEuᛄ¾ûCjúBÛå$¼thRö§:}·ïÈ ÁúŸEùÅÿõñþ­ÿ¦‹âWÁÚ»ÀHOjÞ%ð_‹|1à½[Åz‰ôÝBå®9_K·¹š ØÝ$K•RF®ãšë>/øÃÄ_ðð?ß¾.ü.øÃ?øDüIá5¶: ëZ‡„õ »»G¶Ô/,lòÛGyki$~`Ra,wQvQìÿ·oü°WŒ>i?ìî/ÅÅ¡Í42]ÍÊBÚÇÊGÙÒîëM·bÅ7Šwdorñ÷Ä?ü)ðïˆ>(ëº?†´9CÝêZ­ìvv–ªHPdšVT@I$ŽH©®HB{¨{‹µ”9k«å’×këk¡Í®yÇù½÷ßY7£ÖË™=7¶—³»üŽý¿dQðããŸì»/ÄŸƒž*>Ó<{ñ#ÄúMœÞ¿Ôað~¨4òèðݬvŒštŒû%KYI 8 ¨á€Ôý™-.üá_Ø~Ѿ|aÑ4ÿ|Iñœú…Œß µÄ>Ó¯Z‚ÅîTY‘Möë8 Å›9 }ÁûÿÁH¼9ûJ| ø›ã¯ˆW~ðw…>ø×Pð§öä-‡PÑoà¶[r—ÃPx VCpÞB‘Ìkšø;ÿRµø§û#üqø­‡´+»_„¾#Õü;¥ÛøÄ‹¬ZøºKH 6¦Öð[Æ»®¦¸ŽPµ˜ ¹­cQÙ-ÒŒgçËîY¾í©Fú]·{oeu)KUyJP¿÷Ÿ=×’OšÝ·ïð×ÆÛ«…)ãÛÿø/â‡õ#ûZi^/ð†œÿud²×í¢Ò-ÅÌËd¶«=ì!,uIÙIÑC+ŒÃ¢Ð¼+á¯|ð7Œþx?Ç~%Ôü-ûJ‰Ÿ´Í/á–§¤ëš5¾§¤©$ZEÄ+{wm^ÁBˬª¡Z(þðø÷ðÓà·í½ãïø'â׋ll¾/|>Û¶š„ü{6“⟠¼öæ¤ìgŠéa’)Z2YB:°$tÇŸxö¢økû-þÙŸ>~ÏWšn¾ O¬?е›ß‰kþ(Ñ.ôû#0ŒwF{™•%2Ü ˆ ‹ T$èòB/XòÛ³TÕ$þOث۪²zجMH×¼ÚѦ¥~œþÕ«uM*®ËæÖ‡ÅÞ1ø}qñ7Ãb÷âÀŠ—‹ª~שã;kMOá•þ¡<f‚;›ÙR;yDVì±ÁˆÞ aXŒ¦ÏöVÒ| ûAü[øMñ;àGÆm@_üK°ñÏÃQàë94ï]ý¬zsI©ÛÄ!ÒNŸöFIB¥cAåG3º¤Ÿsxþ Wà;à öœñ?ï|Bø¨êV>‡gâûmV ‘kw5º»Pˆ^Ciåà0Ì 3#c¢ðÏíÓàé|Uñ6/ŠÏ…¼á߇ÚÔš=¾±¬kÐZÇ« {+{‹ë€%Ø#ŠÞ[‡·fÜÀ=¼¹ÛŒVTiF :¨¥¿h*0¿“‹¥}Ô¥-¯¡Y9¹óuoæå*²·šj¤´ê’} ø*?ìÅ©þÕ?±—‰4Ÿ†x‡â…å·ñw‚®‚†’Ó]Óe[»2„ƒòEä±þäÎ;×Êß<3ãïþÎÿüqã_‡~)‹âĉcÇž3Ö4 Ýø‹Yøg=æ“uF:"ií¬š×II®¡š¶ d‚F µ÷Ö‹ûI|:ñ'Ä‹ŸøwÇÞ ¿ñ}•’êW¶¹m.¥«(e¸{eȱe`åvAÏ5œŸ¶Â9uk«¾)ü9kë:mbæØx–ÈËoc ¼rÝ:y¹XQã‘ZR«#Aœ_"m;+§ÿ€»Ëÿäï·"ìÁË™(èìšïñ+Gîæv[>4~Nþš§ÿe/|(ñ?íðCãç‰üáë_ˆ Ô`“À³_ëÔõ?iÅ~ö6Ñbx.ì‚@×VQ½¸rÑ«$ßðPo„3†|û?~Ï¿~éšÀý;MÐô¿ xj_\ëé õüÑhºŽ¢â{+³Švš[kô¹e¸ÙÔ¢8’o×=Wö«ø_¡|$°ñþ·ñ#À6~Õ@k/Oâ Hô‹ÀCb¼iO÷XýÓèjüÿ´€­|I h×>7ð„z¿Šà[ŵ›qs¬DÙÛ%¬E÷N‡ ÅZ“N)oþö¦ìûë94ºGÝÛR½³æu{ë夢î¿ð›¾þõî~OþØ:^¯ão†ÿ·’ÿ~0k7ÿtøƒÁE~êW¢á—B´¶ùÊ[¹¶¼Žê6F‚@³Fr쪪î½Æ/†úŠ> þÛ>(|(øƒâŸþлðçP_ßË·ºEž—m%Ó[ÓfÓï`,Éz`0)3áS{Ò{öÂøIáo·‰üOñKáÎá¤ÔΊڵ׉l¡±[ðpm í(O< Yßí]Íïˆôý;A}WP¿²ƒLŽ´5䓪À±c;Ì„í Žwg¡Ê-Ê]9y]ŸOu­zJÑ‹æí{+=&tÕ8-âî½v׺ºzwë¡øÙûK~ͳ[i¶Óx£à׎ü_ã]gÂ> Òô}WOøqªjx‡V´¶T»—O¼Ÿén¢·’IÊŸ,;g¯oý°þxçö‘øIñ[âχ¼ âm~øá5Â’èóA«x‹Á¾¾†{›a§Ý"<-äÚÅÂBË™ã… YE}Ãsûnü³ÒõÛë¿‹ß â²ð¼÷:ÍÃøªÅbÒ"¸ Öò]9—,¡Ð£9ùȭo~Ô? þÞøzÛÇŸ< ¢\ø¹#“BŠÿ^µ¶}idxã­Iœ3Í )vZT–§9Îq“ø“M.Š\ÊKOûu«^Í9-ìÖpŒaEµš}Üym¿u£½´itÐüÅýº>x‹ö‚ñ_í'ñoöXøkãËß k~ð—V?ðŒ]éZ¯‹õ}'Ä ¨ÜËk¥ÞC ÷3[éË {ÙrÏû”%ã‘V·í3¦ø»ö”öÊñg€~|`]+Ä7_ µ} =OÁw–WšìMå¼÷Íii2 e‘"$ù%D§k.ÌŒWÚ?¶§üÅÿ²—ÃÿŽ~&ðÏüâ­?àþ‡§ë[¿ŽVÖÿR†a7Ú¼ûX­&’ÐÄa-ãmÇχM†¾“ñôøãÄŸ5]3Ãú&ŸiöËëýBé-­,¢ ¹žY¤!Qvb¥Ú1åÚ.êýîž»]^)-´Òû5rƒrÕk+mÖÊ*ßu¼îïä|aûoüøùûYþÆ_'øñítOˆ> ¿‡Ã~Ô|š­n;i¯&¸YayH6Ml¾pYa^aâ½>×ãí àoŠŸ¾üDðŽ‹à¯Þ!ð׌méwƒí+i™¡EcöA-üÍãˆíÖXâUWÈÄ_ïø?iφ×_®þ [|Bð<žÓÌ«uâE×mN‘lbÅ ’ðIä¦ÉFË ¬8?_۳ᵫü,øÑá½ Âÿÿ±¼Åó|¶A&ä`QU)¹ÆQ{´×—½'7§ø›¶ºEòë¹ͧÑ4þ踯ÁëÝëä~#|ýš&øû&~Êÿô€4aðÿƾ µñí§†¼ >—ãK8.eÔ¢Ó/œڭÍõµºßn 6GråWr°^¯ã—ìÍsðóà÷†u؇Àß~ÞézWŒ¯<5¦x“Á—Þ0Óø'üCûgø#Å5sãÅïxbÓN²Ñ<s«ÙÚëwˆáŸYж°6÷Œ“´÷3B ”38Ùø‰û:ø—Á¿³çí—ðOö†øoã/|Bø½ogwà}vÃÃ7Z­‡‰œh¶6|Ú‰ ÙÉclÎ~Öðù*Æàa 8ý'øWû"øcàÿíãï‰^¾ñ4ž$ø˜Öí¯-æ«%ÅÁ¶O.ÜÅnß$TyŒyar§æÜpG©VŠÞóÛY¥¥•î”w³OikuÑIºJ }‡tôÕÙ&墺v½´³ê~/þÒß³lÖÚ_í´Þ(ø5ã¿ø×Yð‚t½UÓþjš„Þ!Õ­-•.åÓï§ú@[¨­ä’Dr§ËÙÆkÒ>8xâµ×íÏâ}gö/Óüw,üJƒYðÿ‹| }k§é7’x]mmü[£kïl‹fÑAåZKm+³yžt{w2(ýX¢¦¯ûEý§TöÑkkþ_-×¼¢Ò¦•>^¯áåZ÷_ޱw‹q_þxkâOì¡k§üDýŸjK?øàî­ðçÅðÜÛ\Ø®™§›3Å–ˆL-·-ÍÄk-²B³(_ÞHèÛ#›ìßø$<_ôkŠš?í ÷'°Óu»! øöÿÁ×Õ|kÓàR÷úuÄq±žÕ#‚ÔÜ**È"–«ìŠ+NuyJÊòZÛEw'&íêßÞÛl…Tž‹¾­«%«Ýè–ý–ˆ(¢ŠÌÐ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+æ¿€£:—Ççêú&:úR¾kø 3©|qÎxñ~¡ÿ¢c öøÿ“ÕqÿA¿ÿéòŠ?où1MWôðÿþŸ,( ¥(¢Š(¢Šü°ÿ‚çÿÁ >4ÁO¿mƒ_¿gOŒº€´OZEg<—7Ñ]xfá/¾ÐÚ¾¶ùI/ T½©ÎŸmûò0~§ÑE~oü_ý”uø*Ïü4¶¥ñXñÿÃÏ ê6ƒáö¤jß'Ž{*ÅØÔ-ãÔ-<çyõg5¦KGieÒT|çÂß¾0|Zýš?c?‰Ÿ´§ÂO‹º”¿¼e%ŸÅ_j'XžåtË>ÇÄ6ú|ÖñÍy IqÛ5¼Nñ™[ íÏÛ·þ ?á?Ø+Æ 4ŸˆöwÇ⇉âÐæš ®få!mNãå#ìéwu¦Û±b€Å;²·¹xûâ‡þøF÷ÄuÝÃZœ¡îõ-Vö;;KU$(2M+* $’G$ T¯N IèœWý½y¿.g&Ý­«ÓX«UYsIÆ[µ/ük’ß%µÖÑWß_ÈÃãüIÓ>)ÏðKâüŸ <=ûNxƒÆÚžˆþ¼V¹°Ô4£e§ëéF.¥K{¦–gU„ÌÖP™zoìaá¯ükø‹®øFo…ÿ<àŸþÐúÏÅ;ÉüKá;Í+ÝÂ+k‹' &øëâß¼áO‡~5Ô<)ý¹‹aÔ4[ø-–Ü¥ðÔ(#UÜ·¤csæ¾ÿÁT­~)þÈÿ~+Eáí î×á/ˆõévþñ"ë¾.’Ò( ©µ¼ñ®ë©®#…T#íf.jé?f£ËöiA­uä^Ö^nð¦í¿¼ÓVÑ*“öí©5ïNIÿ‰º×W{%ÏS[ÙY4×_ÿgoÙóÄZÒZxÇŸ ~;ÃûEü3ñ§‰õMÄןh´ðe¬ÚŒ÷r·ˆ"Öncš´ÓsK$§Ë1¢+Ë¿d½OROþÂ>׿gÿŒžÔ¾è^!ð÷Ä'½øuzš~™3é"ÊIEð„ÛßGwt­86òLdY7°Üq_©^ý¡<âˆoàY|_àßøXö61Þê~µ×-î5==T—{`ÂaXbFA3^=ãÏø)?†´OÛËá§Á/‡—¾ñdþ2:ÌZäö>.†MSÂsiös²çMŽ'!_7¼±•9O"¨/g>k7æá«iµïßE{%Tªª^£Ó_yÞÎúß[«í«i¶Ûüÿý™®5ÏÙnßöuñþ«ð_ãÚ'ÃíGâ½Þ™§|6Õ…ý‰ÔµA{¥'ØZÕeŽ  O–`žTdívB™âŸØÏL±øÿûhŸ´WÂ+ŸjÆßÄú—ÄHxç]Ñm5 jÎk‹…½¼û+¾§sp$a°2³_š¾»ðü¯Àv'Àí9â‡^ø…ñQÔ¬4}ÏÅöÚ¬"Öîkt+v¡¼†8ÓËÀa;˜@fFÇEáŸÛ§ÁÒø«âl_5Ÿ x'ÿµ©4{}cX× µVöV÷×K°G¼·n͹€{ys·¦š’WÕ%÷$ß7Ïšj÷ÚÑVZ·u¼žÍ·ÿ;µ÷$ímõ{Ÿ_±7À -ľð?íðGã­ßÄÿƒ~>×µXïšÎæ/}Žòêæk^Úþ(LW‘Ogsåý|É¥”ù>J i"åÿdßÙ§ÂþøYûZxËöñ®£áω¾&Ö7ð„z¿Šà[ŵ›qs¬DÙÛ%¬E÷N‡ ÅU/ÝB–ðJ+å.}|î»E¸Ù¡Ô—<¥S¤›“]5N:ZÚZVzÞöwLüæý¤?fÝGöUøëðiþ2x[âçĆ×ßµß x“Xøy£Íª]Ûx‹T½ŠÿS¼¼Óí"yD‹¬Á¥NÐyúCSø9§xþÇâéÿ|O¥é6õ+HðmòKâbÞ Éck,P,¯-ÀV·ÌQù¢&ùÝc}Ë^ý°¾x[ÀíâüRøs§xi53¢¶­uâ[(lVüC;JσwûW Û^ÃygŤ±Ko* T`ÈêFCG9¬*Òj)=¥tÚÝ)9Jß.vãÙ5êî•WF¼*îãggåe¢é~UÍmÚ?(¿fÏ€¾ð—ÇÙnëÆ?8æºçYÔ’Äl›œ—oŽ­ïä¥9/E½™Ü~î:¸ò-uÚ4Úùµ½6oº?+kôÔ>!éß¶õïÄßRO‹Ÿ ¼+§è‘Gð¯^Š}sTA¨yñ°[št–‚Bç+’-ö}©ÿAñ«­ÿÁ:áÔ¾|?Ö"xD¹ñrG&…þ½klúÒÈñÇZ,’8gšSì´¨,3n~ìwºkäÛKç¶–zi©JZ®É?ý&1o¶Š)êš×[­È߆ð´>|{¹ñç‹>~Ñ?<àÏ×^6ÖÓVð)‹ZÖ,5/ æØkvöVÖÐCtÖ× 3¼ÑyÖèÈe‰%o´Üj’þϵßï‹ÚoìÑñFÛà_‰´Oii¤i>¸Ö5ÍUÕoí/%ÕïôXƒÜY-úÛO–ž41¬«Hð'ÝCöŸ¶ðׯ/ˆ:OÅË¿ø_Â>³Ó.mu«ŸÛ}¦vº‰Eå›6*XÝ܉¾}¸ØEoh?µ/ÃxGÄ~ ðÇÄojZƒ®¤±×õ+]~ÒkMâ‰û" ß¼ß 5;çÂŒØE2Z2µÙ‡Ï@ˆûÊ¾Þøª–>Ôm<-¥Û|gø;ñÓSÐ~!þÈzW€o`Ð<z5[mBÏíƒP²“u¹ûÚC6bYÔ,͵#ó *·ìU¼ë:’›’¿3“küN»·þW’ôŒ}NxSä‚‚{(«ÿ…QIëuÿ.c}:¿#ãø$<_ôkŠš?í ÷'°Óu»! øöÿÁ×Õ|kÓàR÷úuÄq±žÕ#‚ÔÜ**È"–«ìŠ(¨œùÝü—à­žã„\›þº/E² (¢ °¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯šþŒê_sž<_¨è˜ëéJù¯à(Î¥ñÇ9ãÅú‡þ‰Ž€ÛãþLSUÇýü?ÿ§Ë (ý¾?äÅ5\ÐoÃÿú|°¢€>”¢Š(¢Š(òÃþ Ÿÿ0øÑÿ>ý´> |Fý>2éþÑ<iœð^\ßEuᛄ¾ûCjúBÛå$¼thRö§:}·ïÈ ÁúŸEù¿ñöQÖ?à«?ðÒÚ—Ä=cÇÿ‘«|<ž9î4«cP·P´óçÔež@Ö™-¥—IPóŸ |vøÁñköhýŒþ&~ÒŸ >.êRüñ”–t | ¨b{•Ó.tûÛéó[Ç5ä)%ÄwlÖñ;Æel(xXzÔ?િ´ÏþÐhÿ< w ~Í·jž&¹¶ø¡(¾½µ6 ¨ùö6óè±Bì¶Ò)h渄C°Ò¾ ý¶¾ø³ö}ð‡ÄÍź„<3ãOAâ«ñ£o¦IŒ°$æI„²]ˆãy UyçÒ¥zpR‹Ñ*o笔­ºç÷›µ¼­Ê­U'í$Ó[ûHí¥šPq½¬ÜRŠÖïE}Ýÿ/üü?ñ'Lø§?Á/‹ò|(ð÷í9âjz#øò=ZæÃPÒ–Ÿ®C¤Iº•-îšYV2YBdq鿱‡†¼Kñ¯â.»á¾üDðo‚|cûCë?ï'ñ/„ï48¯tk­®,œ$ñ#G$Ú¼z|‚)UãŠfÚpÀ~‹YþÒõ‰vþ Óü{à¹ücwl/ УÖí›SšŠâTµy¬›p\aΧèß´OÃÿüU½ð'‡¼uàëÿé¨ò]øzßZ¶—UµT—i-̨O $¨À•3÷†n—¹Ê£Ò*+W´=–¾m:1oÕ§¥¬ªÉÖærêÛöó«ÿËeo•¬ÏÊïÙÛö|ñ´–žñçÂߎðþÑ üiâ}SDñ5çÚ-<k6£=Ü­âµ€‚˜æ†í´ÜÒÉ)òÌhŠòÄïÙ/SÔ“Åÿ°…õïÙÿã'‡õ/zˆ|=ñ ï~^¦Ÿ¦LúH²’Q|!6÷ÑÝÝ+N ¼“Mì7WÝ~8ÿ‚‘xsJý½¾|ømwào]xÕµˆ5¹´ÿÃ.«áYì-ã˸Ó#‰Û`&÷–2§#iâ½{ôÇÃxçÄ^ðgÄjþ%ð‚—×´›-vÖâûDQÔÝÀ’·Ö@µž*4íT’oÏ•8_M´nýôוE¤ùæÛÝ6¿ð'{7Õ§·g{¦Û¿äÿìÍq®~Ëvÿ³¯õ_‚ÿæÑ>j?ìîôÍ;ᶬ/ìN¥ª Ý)>ÂÖ«,pM|³ò£'k²@ôÏþÆzeÇÿØ‹Dý¢¾\øóV6þ'Ô¾$jCÀ—:î‹i¨kVs\\-íçÙ^…õ;›€©# •˜"üÕúáOÚÇág<¬x³Àÿþë>ðñ ªë6>!´¸ÓôÂcI¸¸I qe$þv+©èErþ!ÿ‚Šü ðÏüáíGâ·€ÛSø›,ÑxhC®[I¨bcyr¬›fB€ròŠ KkÉ]è—´ôó•ï}tŠ·VÉÉ·)wroÕ¿ý·oW¯cóÓö&øe x—Â~ý£~üu»øŸðoÇÚö«óYÜÅ௱Þ]\Ís«Û_Å Šò)ìî|¿°/™4²Ÿ'ÉD $\¿ì›û4ø_Ã_ ?b O~Ïþ3µÔ|9ñ7ÄÚLjÖ„Z¢.—ê‰is¨°ÌyšM£’L£d õÇâçÇ?üðä:ÇÇøWÁ:EÅÊYÅ}¯êÖúm´³¾vD²Îê¥Û NPøûNü5ø?jgø·ñÀÞ€[%á“W×­lP@¹–Eå‰t-"€rÃ1BÔ­mZjï«iG;E>ëÑ$”ýæüÓù'Ì¿'ëëvÿ/c½QøûaxKÇ~5øSñ:Ûá>‘¯|Kðý¬/ðëVVð½Î±â¿°¿[µóť͂´ÃGï.VŒ1³¡~Å>ÿÁ:ôˆÿ³Ÿ€5;ˆ?>-ë¿þx2{w´¾ _êWú3ۘĖBçNº’Cm±^6òÕÑdVQúc¡~ÐÿüSã=_ÞñσµøzÎ=GTÒíu«i¯tÛY2Oq¹x¢e ‡pƒk…øûjøfûölñ‡Žÿdÿü1ø™?…ãQ±j:}̲\ÅjšN…ƒÙ‰5 `¹‚ê@,±Â_ K?Ýß ÿà£ÿ>,ü o‰^øµðý| ìštºÍæ½kikop…¿u3Ë"ˆ‘|ÅGÚÅ[5ìZ.·eâ]×QðåÝ®¡a}Ïmsm*Ë Äl2®Ž¤†R ƒ‚ ]hûZs¦î®¤·zsûVÿôëµú%çy¥/c8Mtåk³QT—þâŽÖ[鵿)ÿfÏ€¾ð—ÇÙnëÆ?oi¢úûÃɬÛ6«en@a4¶üØãÁ{(#šÆÔl¿ƒúDw«|Vømjºt0\]¼Md‚Ú9ÝãäÌ¿"ÈñJˆN4lH8%5;5Ù/[+_¶¶w¶—½’Z 1iÊîîíú]ÞÝôºµÛmY¶Û»ôš*‡|O¦ø¿Ã¶ZÇ„õ SIÔ­ÒêÒöÒtžÚêPÉ$r!*èÊA Šà¢ý³>ÞxÅ^&Ò>'ü>Ô4¡_ZxŠÎk}8º‘eÛ#ÎEDä©ß›Kn\S¹zž—E|Åÿýý¿µ?ÛKᦩñÄ?€4†¯¥Yë:V±¥øÖ-Z{Tš'¸šÏXƒÈŒi×vÐg•7ȃÏÀs°“Êi_ðZo…~3øÏðòÏᯉ|«|,ñ®•â ûÿIâÈm£ðôºGe†îÝãÛ È—pH¯,ѰFÉI·8=Ö­vÝëÛgný7BO™s-¿á¿Í_·[YŸdQ\Š¿jo†>øc¤xÛÆÿü£x3ÄHÒõûí~ÒßKÔ¼åÝÙîžA¾`åv1Ü9®ÊmnÊßEmJâòÕ4ä€ÜµÓJ¢ˆ.ã!|í ·ÙÆ9©~íïÓGäüÁkdº–¨¯7Ò¿l„:îi¨è~Þéú…áÓín ñ5”ÜÜ…F0Fë) Yb;-‰ãæÐñí7ðÛÁÖšÌþ.ø…à}*]Ça«Iy®ÚÀš]Ä™òá¸/ Èø;QðN¦ÓZ?ëoó_z¯õývqÜQ^Caû|üÕ¾?i 4‰^ »ñ¶½¢¯ˆ4ý:Z{Û7£xH|J^=Òª¦âbF“pNÿ„ÿjÿ…¾=ðF©âo|Jðµá½á­5ZÃÄ6—66/ÞŠyÒB‘¸î¬A”–º¯?Áò¿ºJϳÓpzoåø«¯½ké©ßÑ^csûl|³Ò®/îþ-ü1ŠÆ×YžáüSb±C©’@±w2ánròIßÇݯN#Š?¯×òiüÃËúíùèQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEó_ÀQKãŽsÇ‹õý})_5üÔ¾8ç1ü ø{ñçãoíÃ'íðoö™×ÄÍgNObxÅöqëfÓF†ÙY$ŽÞ; «z‰.ÊÄÀ%£Á¯PºýŸ|CñâoüÿOÿ‚‚|#»ñ׌´kÄÃàÖ´,\éM´…Õµ«ÙÆ ÁT¦íˆä¹ ‡y÷;þ Ëã_Š_¾.Aû1ü%ðÿ¼/ðKÆŸð†xš&ñ£Úø±7…nµ }4éV[XüÉÊfå$ŸìÒ„]Ãm}k¯|~ð'…¾)é^ñ?|%§xÛ]„Üi¾ºÖ-áÕu†s$ŒâYTml²©J!XÓm|JóQƒQin›Œ®ßUÓAÔ^Îs‹Þ.wòr’ºájÉtgåm§ìÛâ+ŸØÔþÏÓü/ñeŸÇO |yÅZN¹…îaÒ^&ñ'öŠëðkiµŽ%Ò¼Èï–e1­¶Ðí7-©hÿµÚwÀ÷Þ øqñ—ÁSh_<}ZNà+Æðç‡&Õlµk{-f]JXä¹¾{Ë«´¸–ê)–ÂßaŠ ˆòþ¬~϶ÂÏÚÃYñnŸû;xçÃ~-½ð>¤úV³òÙ̼dV-å–"É®Ñ>ÒÁsZÚ¯íAðÓBø¥ÿ6¹ñÀ¶~6Ä'þùõëXõ\LÁbÿDi¿9 /ËóÍ )ÓŒ[n2}Ô£M]?8Á4×W}’Fœîœç$µ»ºkgyÝyk7òVw»¿åÀËøŠÇö-ð7Ãß‚_| ãÿƒ~ñG…¼O©ßøîËMðî©6ŠlïûPÄ-nb¹¾äK²îVóŠê~¼Þ3ÿ‚nYxKRý~"j_¾ üÖ|«Úx‡H»Ò,.ìVÚæÏO¹·pú¹Ôgecfo/Ìs4R¼k?é¦ûPü3ÖGm'â'n‡ˆ¯¤Ó4£½jãS»ŒªÉoo‰?{*—@cL°,жߴ€—âÂø ¼oá㧈ξ:Í¿ö±Œ(bâÏ›´++gn0À÷§ZOê9oS{w÷ÝãÛJ’º[¦¯¶³N^Ë’ÛAþ[÷Ö*ÏKYõ? ôßx£âOŒ~6CñoFý©VÓÇþøo¢xÂÓáMÅŒº-ö•ªLæk=2+6aoas5«ýŠëͼ{x¦s$ª«;zÀ >-øWãÿìÓãÚkᧈu“áýoâ†nõÿ xîÐë=“Yk7ºYA&–/¥ŠîW’UŽ}Ò³"H }Ùàø)'À_‰–0¼ð¯Å߇¯eà=\hzÝÌúý¬XÝ3ˆÐ;I ¼»£G8Y7[ë~ ñ®ñ#Âzv¿ðóWÓ5í X·K» GNºK«Kè\e%†hÉI2’èkhÖR~ÝFüÚߥ¤•šóqÙõ½ÚiE,g i ;ZÊÖ¶±N6~I´íöZ´yT¥ƒ?à§^Ô<;ûyü>ñwÅo|_ñ gÀ:ׂnî>i—ÍÞƒ}wqo4Ÿk±¶ŠI¾Ïuon°™cF!¢E;AÉñÿ~ËÞøyûVhð“~Ï~?Óü%á¯ÙÓQÐ,a¾ðu÷Š/,¯˜ÚØ6¥¬ÑI~tæd0G,¦=ín®àߦžý¢þxÇÇ׆<#ã¿ê¾%ðÜm.¯¤ÙëVÓßih¬TµÌåá•.#µTðOíQðÃâ_Žcð¿Ãˆþñ‰e²}I47Ä—wÏj’˜^à[Ç!sÊ­|m ¥IÈÅqF‚p厺O^êqªû¨ûI¸ö·­÷u-6ß÷~\²¦ôí~Hß¾çäJü+? dŸÙþÇÀ?³_uÝzËöjño…¼Káåøq®iq_ê×VÚak Fâ hž9'žÓTmÞb¼Œå‘Ã\FÏ‹ñcÂ~5ñï¿ÚöÓÆ_þ?øêûâÂo Gá[­Oáå¤7:•™¿í¬l­¬Ùì–ÞK¸Ò»/t¨­#M,`Nß´ß>6x3àÝ¢Ü|^ñw†<+C-ÂɬjX¡Ž(ÚI\FÔDwf誤œk3Ã_µÃ?x·EÐ<ñÀº¶»âM7ûgHÓ¬µëYîõKÒ­¡I Í÷¨ ñÖºåUÎu&þÛ-g-<ýçòOÌšSö µ½]¹:ÿÛ©?UÙ›´‡ã¯í ûBIyáÚCÑð­â5•Ο£]ê7}£Ûº©²gÕ¾ÎÊ­µÕ\2rýœ?j¯~Ò~·›ÀÞ(ð–£â]6Îó]Ñ´½j ë[ˆQ ÊFÛâ ?b© goßµÂÏèþ­á‰õ]/ÂŽ[¼³ñ ¤öú;`]H’€œŽ¯ZÖ¿2S¥-RO¯Å'6úßÞo•ì£îë¹4ç¼µ#µÓû£Ê»5î½Víë¦ÇäìyãüJð¿ã¯…ßt} >ø‹Ák¡[ü,Õ#Ѽ}çÙMf‚Þ]FuX­˜»Ég2àÀÀ³A¸ÿÁ7-uÝöŒý‘í¼Oà_ŠZ(ðŸìÝ'„5«SÀzÕ…ž—«ô†û÷3Ú$1É‹ £ó8"óûÈ÷~‡x+öˆøñ'X];á׎¼¯ê du!k¦ëV×SPÁMÀHÜŸ+q ¿r@ÍQð¯í]ð·Ç^Ö|WàŸ‰^Ö|-áÉ^[Y±ñ ¥ÆŸ¥ÈŸ}..C,¹ÀŽõP«ìÚilŸãí“}i|Ò»n÷ª’u]ôÿÒòÚšÚË{$­oˆà¢ÓxáWí»ñ_]µøcñ?ÆzWÄ¿ÙÞãÂ:5ß„ü1q­E6«æ£)²¸xÎÑÞÆèf؇ ÅÀSâþ!økñCÀ'àLj~xOâ,~;Ñþ|>ð÷‰¼ â/^_økÆÐY^ɶ!¨%¾4}GM¸iî¼×™T+@äm ŸÖÏüEðÿÅo Ûk¿ µÝĺ%áqo¨iW±ÞZÎQŠ8IbfFÚÊÊpx*AäVÍgK÷6MlâÿðT—ãídŸ•´¾¤×½gÍmÞÕ5Uì¢ô{ßÐüý’~ Û[xŸAð§ígðWãîµñSá'üC®M©Mevþ¸µ¾ººžïY‚þ(Y5¹³º1ýD³Í3y>J i#å~~Ç–:üwà^£ðëÀ¿>ühð÷õy,ü]¦|"º¸Õ4‘õ¦´:ΚÖ&{­2k[Ö„66#ÝGóGìåŒ)¨C‘yk³ºI_O$¾Ý´UT~Ѷúß}t|ÎÚùÉþÛøkÆ? >/~Òð@M_Áö ±ðů|6ŸK‡Âúlm¦ÛÁ'–Ñ­¤1LÁ­Ð(Q ¤|í§[â½>×ãí àoŠŸ¾üDðŽ‹à¯Þ!ð׌méwƒí+i™¡EcöA-üÍãˆíÖXâUWÈÄ_ôÞŠÒ²U]W·:kÒñœ)¿»³iºSpTîîâï~úÂNþ® ñÝÙ¯›à“—0ÿÁ/þ è¾$ðÿˆü9¬h>Ó4=WJ×ô;­öÚòÚÎ8'I-îâÈÞŒí(ã ¬ÊA¯ÏÏØƒÁ³ÁãŸØwÃ_>|VDø+áïèÞ#ŸVøc©Ï¦hú¬‚Ûìò,ÿfhœ0·”%Äe‘‹¨VÉ;eh­ªÖukN³ZÉßçi/ý¹üíÛ\áJj ¦Ÿ/é‡ß³—íwá^ð“Søãðö‰‹áš7¼4ïx;S·„Ρâ9oà[!­È³»Ó…´Bh‘´i+†¯Ð­KàV‹áïø#.½ðêûá×Ä]'‹àCE‹Á¶WçWñU¾˜ðÍV±:¬»ï¾ÎɈÎT“‘T3}oEsòGÙºm^û·»ÖOW¥õœ­Ù;y½å*¾Û­ïä¶Ù;ÛH«÷jçåû2üVøóû üwѾ*^E©ø¯ágˆ4Ï|.ø¥¬xB_j^!ÔôË.-§Ôl®âd-¼Z|—A^-ÀäÆÕÑ|Lø?â±·Â/ˆúÔÞ?øiñ«â/Ž$ø ž!ð·„çñJx+Q¹Ñ¶Õ´èí¤yìãÓ [¹TÄ‚7;w2×Ý?µìyàÛFÑ4ÏŽöúÍþ“¢^›ß°ZkV6ºd1½½ìPH«wlè̯»£pHe }AT"…@‚´”œ”ÓëËo’\ÎýäãNDõ½–vj0î•úwºK[é䭵ѤÏÅ‹Ÿ ¾8|Aøu¨[]|ñ&ãOŠ¿³E‡„,´¿ èW6Ú<–Zµì×:l·HÒ<í:D ËFGž ºí­ÚŸáG†?hÿØËãWŒ~~Ïÿ´lþ'ñÇ…´-+T3ð¦¢úŒ×Ö·ð=­…®Š–Ìóµ¬kß~‘ˆcVHÒYKÈ"ý˜¢”¹e.km{y^S”Úùvm:¼›¼›oKúÆ0Wùò&þ}l×äíQû?x+Yø“ûh7ÿ€ž0x‡à&•áÏÍið—TX®ïÖ IÓMt°Y|í 2!œ vòÿP~ë©âo‚¿·´Õ¬çGµo³jštúuäÊPRk[„IapAUê+­¢Ÿ6þvüŸãÍý\M]ÇÊÿŠ‚ÿÛ½XQE# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ù¯à(Î¥ñÇ9ãÅú‡þ‰Ž¾”¯šþŒê_sž<_¨è˜èý¾?äÅ5\ÐoÃÿú|°¢ÛãþLSUÇýü?ÿ§Ë (éJ(¢€ (¢€?,?à¹ÿðCðSïÛCà×ÄoÙÓã.Ÿà-ÀV‘YÏåÍôW^¸Kï´6¯¤-¾RKÇFˆ/js§Û~ü‚ ©ôQ@Ž·ŸÃ+¿¾;oŠŸ±§Â¯Œ n-Æ ¡éú†‹áVÓ@ñ®Ÿo«CqªjFßû6{l ûFù¦Y0‘¡óËÕx«à•έûWüjð7íEð‹ãÏŒ¼EâO‰ö?| ¨ø{íxSX oi„×ÌqìÓZÃ쌒‰YHËIÝÕíÛ·þ ?á?Ø+Æ 4ŸˆöwÇ⇉âÐæš ®få!mNãå#ìéwu¦Û±b€Å;²·¶øë⇆~ÛZOñ3ÄZ‡a¿mm¤Ôïâ´[™˜ácŒÈÀ3’@ 2Nh¤¹! Y4¥%å{Ó–šq‹MlÜ­«ÑUJRq{´ŸËߊ½·VrV}oK,ÿÁ(mu_‡ZçÇ¿x×Á~0ðæ¥oñ[ÄÞ!ŽúÿB–ÓKÔ,oõžÎK;ÖQÞøœ±—1ãl%|?¥x£ZøaàŸƒh†¿ôŸ‰ºWícµ¬xžó“G¡kæïW¾»‡S‡WÁ7›o xŸÂŸðYßꚯÄ(LÓ¾ üT¸¶Ð.|ã7¾°Õ.ôÕ‚K]Qná†(ÌìD$4`ä7™ÁQn©iü5Mµ³å§:Zúén·òº+Kž•hÞÞÑÎÝ}鮞–”µè—]ŸÊ†ãO kðü7›àïÆ+[Eý¯$ø>¡gàû©ôoì)õ ï£Ô"¿E0ËG!R‹£†WTÊ––€+ñìsð+Ä üf>?è¿—Æ#o ]&r²x”êð‘G®¬-l¨4³,,LÂudÛC´hß§“þÔß m·£|@ðGŽ´­oŶQIã ´ËÑ=Ö©}umt "C:”»ÌÖ À_xŒáHZØ~Ñõ_i^'ÒüuàëŸ k¿ò Õ¢Ö­žÇQàŸÜNd¼)û¤ô5›¢~×? h²Á<¾x›áÞ¹áÙ÷\ðO‰§Ô¼wà–ÖonaÓþË¢$wÐ[µÛî‹Pc2‡·Œ¸Ì¹q^ó¥£üAý­~|høcðsâVáO‡?õ½ ÇzT¿u û¸¦k%Óü=žöªúŒ±ËozDP‰!‰pÅ•eŸô–ŠªµG&´¿7Ë›Ú_M­û×eÙ+Þòæå¥eA»òÛæ—³ßÏ÷q××O‡—ñ3àçì©ñsàì‹ûNþÏ:WÃÜx‹âW„-¼Kà}^ÚÛWžÊ"XË¿eÖn  nö1ýªQO¶ÈvE#²ŸIñ?Âo~Ñß <[ÚÝÆ³&™2«ÙËvï,Î…T33H ,‚¾—¢Š©Ë§n‰}Ê×í®úYvIhLSWmÞí¿½·nú^×m·Õ·vQEIAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_5üÔ¾8çŠ(óâÿ죬ÁV᥵/ˆzÇþx_Q´´}#Vøy ñ·‹?mø'oì•íwðc↣ñ ÁŸü=iã-cá–±p틊ºRöi-í’T•ýtüßKX¬ý³»þnoÆ£ÿܲü<ÏÆ~Íž¾ø7ñzsö}ñ¥üþ ýªtÍv8"ø?ªLú‡âÔležáãyi¬¾Êº¨à>k(ˇê|oàSÁŸðP½sÇ^øMñ&çá_‚~9Øø»Y°´ø{ª$WvÒøB%5‹f¶oš’Ìî¶«,«Ÿ=Pœþ»QSK÷Q§ååõ|±¥ü¯æÝ­d:T”ܾ×5ü¹ÜÛ·þ i~7Ôügøçû2[ê¿uÃð[ÆZÏÃßþÓ¾ñn‡¦§Ã½BþH4û{+k}wVšÅlËÙ[Ü\«±3"5ÊÅæ*È¥ôV²¶“àoÚâßÂo‰ß>3jÿâ]‡Ž~Yɧx*îíícÓšMNÞ!’tÿ²2H’+*9Õ$ýv¢ŠiSqÒö¶þJ’_5ìbÓ[7+n­5µ½úþ:Ôm>éûFšëe}ñ¯ížž ;ßð·ã.ª| ¯iZ fødÜo›ÿ³¦iŸ¼i´·ûWúD¿/—äMò¶Ñž×áÇÆuøñÇ^_ xÏC>¿·°:–¯¦}—N×¼ëhî<í2mÇí1'›å;ávÈŽ¸8Éí(¦´Zÿ[“ûü‰³¾ÿÖ¿æ¾ï0¢Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEó_ÀQKãŽsÇ‹õý})_5üÔ¾8甜æEN(¢“ÆáWy¥ê¬ôó[~ZÿTÄÛùßu¯®çï¿„<#¦xšn‡à«}3GÑíc²±³·M‘ZÄHÑ{*¨A_‘ðMEø7âOø8Ëãߌ~üTø“ñ/ÄZV¡©àM{Áóii£f²Ž_2ýçap¨aA P‘pÌûþ ÿiðwì¥â߇~k~ñ_ÆO‰þ/Ñü9¥øynEÛéö×W±Çq}y2+ÅCçl$ÒlÀ*²ü¾ý–ç¹ñ·üIû^[|*Ô­³©ø'_°Òn#•]Eð¶ÓãP¤0Ë$ªr 6HÁ#m(ÖöÑW´*ú¶£ÒõæWÓ®K(º*œšW/DœšMúYÛÓUk¢ÿàáo€¿u¯>Ÿgñ Æžøg©[èþ1ñ§†ôh®ü=á«Éåò£†Yäž9.ÉòŸ²Å8#"½ãßüàÏÀû…¶Ú-î¿ñÅl Ô¼ á iÆ÷Wñ ¤Ê¯ÊÇ+E¼E[>eÄ®CŸÝÉ·ñÃþ ¦øÝû;ÙþÈŸ?fø)ü¾ðÏâA¯_i~6¼]* ô†8c–òÈ….-f°È È7dgcìÈÿ‚–xûÁ_¿à»¿²×įëþ)øIð'Vð>gáOèúJY#Lòîí–°êv²Gq,ñY`b±H$ ó£fã*P“¿<¡ï-¬âÛßDù“K{$Ó»W3纫;[‘KÝ{ÝI%æôwjËV­kŸ±¾ÿ‚Ü|ñOìã/Œ!ñÄÚÃ]Tè¾4ÒG†î?·|#t¼H·ö8Þˆ‡†• Æq»ä}¾+®ÿÁÖ_²†‘àýÄv|RÕ<3ªê'I¹Öm¼tº~tÿ"âyv+Iåbo.3ì íÏó?Ä?€³gìýû~ßú÷ìSñ¯ÅuøQoüe¯_ê}þ‡.¥q%ܱÇm{ai³Ý;ÜÊÏl屫¸ñÇýB×þ!øSÛ} ü_¼ßºù„ƒ¬Ts¬{ìEc:©JV[*nÞr—$—¥î×[Y3xRSqK«šùFkçÑýöè~úühÿ‚½|.øcñ‹Áÿ>i~:ø¹ã¯hø²ÃEð&ºŒÑhÒ)dÔ'–ia†8™T<Ã#e@B^0ÿœð_oÚËöxÿ‚ŒþÉŸu_о/üðÌ^-ÔçÓµðúâý/n¬K+›i ûD-ku«2õV|Çóž[ñ¯ö¼ý¹-kpMu§XA§l´ó.5V‚¨Ò½ÅÓ¤Ò¢…yU˜òƵÆÒö©½9õì«(E®öÒëù“¾—K4XÓm[ž:úºNROµõ·÷|õ¼¿µ‡üàü§Æ¾ðgíS©xçAmsJµ½Óuy|7uwe}lÊ Ê'‰XÈÉ‘æ*‚êHùNåÌŸ²üsàWí›ûTêÿ<¾:ð§ô»y.âÓü[áù4wÔb®Ð¬Œ]H‰„»&XÜÆw ~hÿÁÃúþ›yÿÿ‚yª_ió,ésÎ<ôaO©éû]ùá+ákz“VÔôk¿ø=CÄþ%Ô"‚ÃPÑe°’E—·„2‡_ºÀô9ëU Õœ¯Þ¿—ðÓjþ¶×çòŠk÷^êÚ¥ßãqM/DÛë±÷æ»ÿ ~Ï6Z‹¼Aàû/‰ž.ømàJ#Ä_4? ›Ÿ éWSIåĆf•f™YºI 2& Ø’=ÿUþÈ?µÿ‚?n‚V??g‹^ûšœÒCgu¨i7:k]l Ž;”FxÉ8SƒƒÁ¯æÇö@þÆñ?üÏö˜ý›?g¿³Ž—ð×ÇÞ=·}ÅßünÞÖ¥¶µkIÂé ZH¥[xd- ²å[ôKÿÁø¡þÍ_ðOß„þøqãM7â&‹áÍkoi× =ž° gi­Ýd‘L%‚ì…ñNœS¤êI=y-ugïEIÝt³Ñ->v»*s*‘Šï;õø]£gç»ßn—ÓÞ(¢ŠÌ°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯šþŒê_sž<_¨è˜ëéJù¯à(Î¥ñÇ9ãÅú‡þ‰Ž€ÛãþLSUÇýü?ÿ§Ë (ý¾?äÅ5\ÐoÃÿú|°¢€>”¯Ô?à•ß³¯=Þ«û8|ººº‘¥ši~é/$®Ç,ÌÆß,I$’y$×½QJÊ÷ê;»XñÿÁ7ÿg…>2Ó¼Gð»à/Á ø‡H˜\XêšW‚4Ë;Ë)áž(ãnO*Aæ­xþ óðáÄKoü4ø!ð‡Ã¾-²™îmõ½3ÁÚu¦£®^D¹Ž"³pX6HbS^½E>©öF»ÿ_©ãŸ?àÿ>+üYÿ„óâwÁ…Þ!ñ¡–9ß[Ô|1gs},‘€#‘æxË;¨U ÌIW`c«øïû2ü9ý¨¼)o¡~Ò>ð4kI…ͽž¿¤Á¨Co(D‘¬ÈÁi#ràà‘Ð×qE++rô3¿5õ<µ¿aÏ‚Òüµømqð‹á”ß,®~Û†%ðÅ”šDWcç-›DbeÜïÛ»,Ny5ÏKÿÁýšgðìDÿ³ÇÀÇÒmnd¼†É¼¥xg‘cI%Xþϵ]ÖU˜ ‘HQs¢›Õ¶÷`›V·õý\ð=kþ Wû2x‡JŠÇXýžþ MeoÅð†i˺+ÊácQóÎØ\ Ò¹êÇ;>-ÿ‚vþÏþ?Ñô;Ç¿~ë¶±fo¨ø7N»Iµ XAl²BD1nfm‰’N2kØè¥e¿þ}ýBìñÁ3fÿOi/‹ÿgß‚:¬¶éöÏyà].v·¶…CeíÎØã@PaT¡ñ?ü{àUεâ |ø+kãã#ê6:üž Ó ìŽKÅvn>Îdó]¯¿–ÈÏ&½ÒŠRŠ’kkßmõýG8µåoM6??f?ø7ZËá‡Â&ð×í“ûë¿þ%ÇutÍã? |X³Ò|=¨,’ÈГnomæ´HТ–Rœ.à§;ôûþ…ÿüñü?þ ý |1øµªizŸˆ"Ôouk±¦Ë$Ö–FæRëo²*´._bŰ;Ÿ®h­!.DÔz¤¾JÝ6Ý.—üLåwy;êßÍß®û7¥íÞí+QEIAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_5üÔ¾8çøÃ\ø‰­]hÚZk^4·Ñ´ý|#סÖF™Ä;-a$“ì–Ó´o8X‚N¯pëäà¶ÅŽN’BMßOëM»î¶÷m~¿ðËúº>…¢°¼ñGÃ?,o.¾x‹Bñ%¶Ÿtö7Réwñ^%µÂZ&`’ÊJ¸qÍeèß´OÃÿüU½ð'‡¼uàëÿé¨ò]øzßZ¶—UµT—i-̨O $¨À•3÷†D›v^¡Ñ³±¢¾hñïü£Ã:íãð×àŸÃÛßx®f-vâÇÅÐɪxNm>Ñ®J\鱯ä+à&÷–2§#iâ½E?l?„rê×V|Sør×Ö:tÚÅͰñ-‘–ÞÆxåºtór°£Ç"´¤VF‚ +®U>_’¿ù?–»W«ó}?¿CѨ¯!Ö¿jË SÅ? &ø9¨xÅ~ø…-ïŸâü_kÇ6’Ϻ|Jj[žV¸òÑ^BHS]‚j†üs…þ|GðˆSMä$,áÚO*9$Øí¨ÍŒkÆ?k?ø(öðŸö#ø‰ñ“öP¼ðÆ{†ðÉ6§i§x¾$·AtfæÖ³ 9²®î…“­+¯ëåþkï*1rj+w·õògÒÔWyûDxDø…¡ø3Å>4ðŽ—ãÚ‹Í;÷:żZ¥üx9x-YIJ¨Ã|ʤp})ú7íðûÄ/| áïx:ÿÆúj<—~·Ö­¥ÕmUeÚKEs*ÂI*0%LýᚵݗŸá¿ÝÔˆµ%uåøí÷Ãøoöœømã+\øCâõ[o#I®Ëg®ÚΚ"®ýÍvÉ!àyRäÉ·[ÿtá4ßÚ{᮳ðyþ!èÿü wàÔ³xšzÖM@`„›Ñ'’âïu8ëKúûöûÆôþ»nw4WÁ??nÿnŸü@ÖìtïYXø/Æú„mnôO rÃXŠÕ e¼Šéa‰JÉçŸ+ÛÍÖ½Ný¨~ë £¶“ñÀ·CÄWÒišQ‡^µq©ÝÆUd··ÄŸ½•K 1¦XŽE;|?ÞI¯I$×Þšûí¸®µòm?X¶ŸÝg÷ÕçößµÂËψ„í>%ü?—ÅZµÌöV:2x†Íµ ÙàE’x¢·y’øƒÿ“øiÄ?iµÏø÷OÔ¾"/ÃßÞÃâˆíåð¬¦Öæà]Oç@~ÅsöxP´d«8 ¬ÿjÿ…ºÁGø—§üJðÿb _ÅQø†Ñ´DÛ'”Ù¾y#‡çá¸ëÅ Þ§íWæ½5JIú5$ÓÙô“Œý›^÷o›_}âÕ·Ðïè¬m#â'‡üAàX¼Q ëº5÷†g´:„z½½ìrØIlwž· Æ3Ð[x;p3šùgöVÿ‚¬iµŠüQâ…_<<ú¼ž,­dÔ4ùmu±ïì<¡½½é†æki–áÃE[W«Wåëýj+Þ*kg·Ï¯è¯¿j?Û΄ ~x×à=—„þ&xCâ´O Ë«Yx”,6°êW±Z%Ý£AÑÞlyyO2!Þ”ÿÙ¯öë_‰vŸ®?h?Âß -~ øÞoÝ^ÉâAs§ÜF¶vW1Ý=Ôð[w‹äS\+ n´GÞRk¥ïòä¿þ—¿É§_­¿oþF_w¡ô5Á§íMðÆ_ øoYâ7€ÛHñ”¢ økö†Û\YËæm¸l1c’*/ö¸øQ®é?oÑ>'|=¼±¬:Ú`ñœ‘hLq žõ”´HxX³½»M&Ý–ÿ×ù¯¼_×õ÷3Ш¯ ðí_§K}ã%øå©|?ðu®‰âÉ<9£Ì¾0µ»:¤~LDÓ©Ùö[§3‘öF,áv6Hq]&ûQü2ñÁ·ø‹á¿ø}rþ'·×í%Ñ#ùm›ÕÂ6¸Ø~~ƒÍ%¬yúY?½]_³×g¨=+ß_Ãþs»¢¹ÿ†ÿ|+ñ“Ãk?|Máÿi1¤ÐßhúŒ7ÖÒ£Œ«,°³)V‚jù·áßü7Æ8ŸÇ6z—|£ê¾ø½kðÖî+Ÿ¬V×RÃe3jOqi–ãeüal‚nwBH%¤Üýµÿí£ÎKÒ÷Ù0û<Ý?à7ù'ùocë*+_Ú/áë|d?—Ç~ ?VÛí‡ÃZ¶þÙc>oØ·ùÛ1Îí˜ÇzƒBý§þx£SñE—†~!øQ¼ðCñºõ¬Òè ^ªÈM±Èо&xv=_á¾µ¤øƒI–YaKÝ6ò;»w’))PI,’#£ åYXE 4ìĤšM3ZŠ(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯šþŒê_sž<_¨è˜ëéJù¯à(Î¥ñÇ9ãÅú‡þ‰Ž€ÛãþLSUÇýü?ÿ§Ë (ý¾?äÅ5\ÐoÃÿú|°¢€>”¯Ì?Ù;ö-ðWí‹ûZþÖ1~Ô^øÝ‡üGñ kMÓuˆ¼Sá ø¢Â+(’[7Ùì¯ÿÒmå$W.‰*Ñ…5úyEO"çæzè×Þâÿ8¡¶ÜyWtþä×ê~PþÑ¿¯´¯þÝ_~#|&ño‰¼Iñªê=Gá­î—á;‹ý3X„éVv:UªêÃ%½ƒi×–ù+rðˆ™×îq§á?…¾ÿÁB´Iþéþ0ñEž¹âÝ.×â‡üMàÛ».ãðÌ6rx·Bñ!cŒ#û$I+ùŽfLeÐÔº*ád’–¶QªŠI_Í¥iwv’´£¦­æšƒ·ÅòçZÛµ¹|¯ÍI?Ç¿Ù&}sÁ>ý‚|-ão„4½Kà߉µ}7ÅÒIðÛW’×My4­FÍe3Åjñ½¹žêÐ} n Dr˜ö&›k³ÓNÍù ”ýŒybºÝ_^’VÿÉ·½Ý¬ïv~?~Éú†¢|Wû øWÄ_³÷ÆMPø ø‡ÃßÚ÷áÍêéÚlϤ‹)d¢o}åÊ´àÛÉ1‘dÞÃqÁÅý“fŸ økágìAiã/ÙÿÆvº‡>&ø›XñÏð‹TEÒâ’Q-.uÖ3I¢´rI€¢l1þÍÑZN´ªUö²Ý»»i¯76•öíêf•¡È¶³_zjþ¶gãÿÁ_ ÚxsãgÀ©âø;ñOMÓü#ñÃâF£{,Ÿ 5èãÓôJ=`Ù6ïìþ-f7ö€ ;rܨòÛk¿à_m¾§ì<¶?> øc_ѼOãvñ ñøiªiÿØÖב_ÅnÚ”ïhžRÌ_MUyN6¢œ…BGëõéF1ì’ù$—ãkú•YûVÝ·mú6äÿf—’GÅðQýÎý¹¿e-kIðG‹Ô4ÿêÿ ´ÿhëáoÆ~¹ðÇŠ|.‘Í8‹Â÷Ï,¦¦-I¤YãOÊÙ8•~ŒQE&©¶Ú½þíšÛç{ïu¦ŽJJ³uRŠvI%礔·íÑ­­gñF.?ÿµoìYÿ ñ«öü‹áGÁûŸëºƒqá cRðLúT:åݽ¥Ä:¤zf­qj±™åI$r3Ïʳ.æZ¿¼+¤|aýŠ?h¿~ÏŸ?i«OüJøkmá}Lø§Ãzšêw·èʶZe¾¹{³£N$¾TX#e“tžOìœ ¡gÙ[ÓIEµÚê]úvm==§¼¥mþç¿§ÿ&¿"l~ü}ø«á_Ú3àïíâ½gÅÿtψÞ¾Ól¯´ßjˆ¶¶qéò^êO [²š;Ž‘ Ç3¸ð¼*ž?‡öÔø]®k? ¾6hz…~3xݵ èþ¼:•§mªC¦Úœ‘Iu{-ü÷Bi.á”XA|˜v#Ëû'ETb ”Vܼ½5V‚»ÓW˯ÕëÑ"c.Tû·úOEÙ^m«mªÕ6~Ù|øÛàh¼ñWâ_‡ðx#ĶÐßø*ãÃtý#NÕ$™¼&DÐDšÌÖ ›¸Ùï)"TSëž øv<ñ‹á·Æïß¾<ê_í~+ÿÂYã«msD¼ºñ³©\h÷VëørHÅÌpYM5¾é!,ŒTˆ¤1Ë/ë•i¨Ëš+[ß»Þ-«ïgÉÞë™·-HÖWçw¼y|­Êãt¶NÒ—’O•%’øÃþ×.£q§~зú¯€¼qàM3Å?õ¯h‰â_ ÜhRêv7)n©r–×(’®÷‚V!Ñ[HËWÊ:†ã? kðü7ŸàçÆ+[Eý¯$ø>¡gàû©ôoì)õ ï£Ô"¿E0ËG!R‹£†WUÊ–ý}¢Šrös¥$¾M/û†éÊ?{¦¯äÞÚYÔýì*Æ_mÎ^Žj¢/Þ?šG㮕ð{Mð‹x£YÑþüD‡]ºý°,|Scyið³WK¤Ñ£¹·wÔw‹ ÆÍb7ø|•ýëqšZ<7ðoÆ þ$|ø¿ªüWðGí8|mâ-sOðåÖ“¬ØIªÞ^r^8Í«#ZÝCÖ˜L f"€-~ËÑE :¥Ô«‚¢•ÿðJ¿~iyYÕ~×Ú]||ßù?µ¿þž•½ÿ#?d‚ÖÐx›@ð¯íeðWãöµñSá/üC®Í¨Ïcvþ¸µ¾ººžïX‚þ(Y5¹³º1ÿg¨–y¦o'ÉT $IÁ?gï|%ýƒü9x>MðãÇ"ãUÓucªø6Ok3[Zò{d—Ï‚9¥‡Êž'O¼£v8`À}ÃEgF*Œ9W–»]Ù+¿T¿¥dŠÚ>gß׫›ð÷oñÃľ¿¶ñŽƒðóâwÁ/ŠzÕ¦‹û]j^7Õ™>j:¦‡&‰tú‹ÚÞ‹˜­Þ áîÝØ©o/xR4u_ø¯áçÇŸxßÃß ~9§ÂŸ þÑÚψo4ßøKP²Õ"¶Ô|=m§Ã®iÖ3[†¾/F _ÈÊ“´>e5û;ET=È(®‰/[{ÿðJûÛÞÍ:’u')>­¿½ÕW¿D“ëœ?àšÿ ü7ð/öY½¶øYàoxÁ’ë:ޱ¥iž&içÖ®aüénd°e2Ù™¦k‰Ì0+)dŽIþøáøoàìñâÍwá‡Å ü1ð㟊µïø~çÀZ¤œVšÎ²t½^ 6{ežö+íiÙ£–H·“´4NõöŠq´e¶-—ø\Zü#m-kém,®œ%öœ¯ÿo)'ßù›ÖþwÖÿ‘?¾ë~—âGŠ>|;ø~"þÒþ ñ‡‡ô½7ÁZ´÷ÛO“MmgW—N‚ÐËg ³[\È$™§ò÷®ñ$eâmÅvßµ®¯ñ.ÿá¯Å]Wáß„?i[ŸêöøVK›­: ÛéVšÍ¥œÖ«%òZß$¬E²K*(*íëÝT§ì­n–ü=ÿ)ŽÖÝÚÚYÎ^ÑJ2ë{ÿÛÞÒýÿçãÞû+ß[þYx‡ö%ñ7Äo„ÿµoÿgÏêÚŸð³ôï‹ 4ÛÍ2m:ëPÖ4‹F»¸ŽÂXã–Ô.`¼¶Ë i–S&º_Ø{ö6øÍáÏÛ îÚ\6_ ü]¨ÃñóT‚ÝUm´Ï]Ç5«xxVx­[ȼóŽÙ{X%`L_¥R„Ý6¹vI/º*7õ¼)ËÉÂ6²¹µ‹Rë{üÛvô´ªGÍT•îì~4|Gø3câÿx£KÔ~ |@Ô4K¯ÚëGñuµ´Ÿ µ—±}iÖV÷—ÁM‡–mŒ\«·FÆãÊÆ_wÒ|/ð/Šnþøâ'…õ /Úî×Å^Ò®~ê‚ÛÄ­„r]\Ç`° ›Ûb–º¬ÊmGYcÈHϘ¿²Uåµ'ì_àÚú IñY|Ic«x2ö]CAÖ¼;âÝUÒ&–‚SÝ”±Ê«$Rhzo…|3áÛ߬4OöC¼ðŸŠÇ‡~jZmÌ÷²=¤’iñÈöb?í.¥"ÆêKÈàÆE´/ŽÞ ñ‡ƒ¼Oñ¿Ã¾*ü7ø]ñ%g¹ñ—…< wáÿxŽ ¿}†ÛUºÐdeº—NÞ–rOYhÉ!Y¢b?h(®ÊÕ}³rkvßßVU98­šO{œ”©{(¨Å蕾JœiïéÚwW[Xùßþ ‹ð§Ãÿÿf©´ß„^ñ§€|!{®ßêš>⻉N­qÄ‚Y.¦´”o°NÓȶ­‡UegXÚ(û?Ø¿ZðνðÆ„_ õÏ„:Ô5¡ðέáøô+«iöu–sg*‹<‚K…px³+žZ½VŠËEd•’I/’I~ eeÙ%dkÑù»ý÷¿â÷ßÍÝ…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|×ðgRøãœñâýCÿDÇ_JWÍFu/Ž9Ï/Ô?ôLt~ßòbš®?è7áÿý>XQGíñÿ&)ªãþƒ~ÿÓå…ô¥WÇðùï /Œmtéþ|m‹I½¿[X5öÓô“¦ÉlÚ²i ƤgæòXÓ6Ößåm @½é(-Þß-_ܵôM오ÔUßõwe÷¶—«Kv±è¯ øû}x/ãÄïxÅšŸ‡<#ñ'D×õ/ ÝxŠÎ}[Q†Ók ØmÑüÆŠH¤IÛ•†åN:/ þÓ6~2ý­uÿ†^—Â:¬^ÐaÔu«‹?ZO«iÒˈìî´„&âx ̳¾Õ`Á@=h½Éo´®¼Õ¹¯÷~:nÒÒç»ø]Ÿ­ùm÷öé®Êç©Q^lß¶WÂ$øæ>?Å/‡câIqð©ñ˜Ö‹˜Ì»—™çòÁ“nÜíùºs^“BÕ]l7£³Ü(¯>ðÇíið«Æþ4³ð߃>&|>ÕüE¨µÊÚiv^"³¸½º6Ò®Dp$…ÜÅ"²I€v2Ø#KQý¶~ i:Êiڟů†jx€øMm_ÄÖBc¬‚Óvy¹ûX, Ûã̇ËÈ¡kªþµ·ç§¨Újþ_ðÿ’=:Šóø¿k…³ür†0üHð#üH<ÇðªëÖ§YUòüÌ›/3λ!þïÝ;ºsKâÏÚ¿ág€¼mqá¯|Jð‹â;Cj'Ò¯üCim{ ºEl:ùÒ2¤y;«’qBÖÖë·Ÿ ž—¿MüŽþŠóGöÙø5¤ë)§j¾A¨Iâá5µY ޲MÙæçí`²ƒo0/"¯ÙþÕ¿ õŽ ¬>#xˆÖ‘§ð¼zí«k0 A!g³yª2¿+÷HnœÑ{ÿ^WüµôN7¿Oó·ç§©ßÑ^3á¿ø(Çìûã?Ùh~øåð‡WÖuË}:ÒÆËÆ}ÅÅÍÍÀf‚ãI‰i$ Û[^ÍNÎ×è'£å{…å¾ý¦lüeûZëÿ ¼#/„uX¼) Ã¨ëW~*´ŸVÒ/¥—ÙÝiMÄ ð™g}ªÁ‚€zÕ–ý²¾'Ç1ðÁþ)|;Kˆ‡…Oˆ¬Æ´\ÆeØ,¼Ï8·– ›vçoÍÓšQ|Ê-u½¾M¯ÍiÝY­`ôrO¥¯óIïó׳Ñêš=&Š+æÿÁF4›oÛI> |2Ñ´ÿjÚ|:túíûx§M±M4^\]BÃo,¾}ÝÄbÊy$…S$¸ZqNMEoý}ÀôN]ô…æ:í³ðkIÖSNÔþ-|4ƒP“ÄÂkjþ&²d›³ÍÏÚÁeß`,>^E^ö°ø]7ÇGøaķĘãó[£]µ:ʯ–%ɳó<Ñû²îýÓ»§4–º/ëKþZúIÆ÷é¿ßoÏO]@¢¼þ?ÚÃátßá„_ü ßcÍo vÔë*¾X—&ÏÌóGîÈ»÷Nîœ× QÑ>‚z6žáEy³~Ù_“ã˜ø`ÿ¾‰%ÄC§ÄVcZ.c2ì^gœ[ËM»s·æéÍY‹ö°ø[?Ç'øcÄ?ĈÓÌ ®½ju•_/Ìɲó<áû²îýÓ»§4/zÖêݽú~»}ç Q_7ø³þ 1¤Û~ÚIð[á–§ø›VÓáÓ§×oÛÅ:mŠi¢òâê†yeóîî#SÉ$(€ª˜ù%Â×{ð»öËðÅÏ‹>?ð_…uË1­ü:աѵšîÜ-ÔÒØ[ßlBÒ"Çr‰U!ãc ’í¢×M}5Zìï Ú³iïþÖÇ©Ñ^okûdü!¾øi,¾*ü7›ÁÓß.—ºž&²m2K¶­ºÝ |£)mÇ=*ÕíYð¿Tøã?Ã-7â7®>#ÚÄf›ÂÑk¶¯¬Â„µ˜“Í_‘•ù_ºCt9¤½íõ¥ÿ&Ÿ¦¢z^ý?Îßžžºõæ:í³ðkIÖSNÔþ-|4ƒP“ÄÂkjþ&²d›³ÍÏÚÁeß`,>^E^ö°ø]7ÇGøaķĘãó[£]µ:ʯ–%ɳó<Ñû²îýÓ»§4-t_Ö—üµô“ïӾߞžºEQ(Ó‰Œ5¬ µ›´'ÚD;¶ù¾VwlÝòîÆ3Æjõ +̇í­ði´¿·/Å¿†FÈëk៴ÂQcåj²î]?›µù„óçm]‹ö°ø[?Ç'øcÄ?ĈÓÌ ®½ju•_/Ìɲó<áû²îýÓ»§4/yÙZ_ò×Ðm4®öÿƒoÏOSÐ(®Ëö£øe©júŸ§|Eð%ÅÿН¯4ÍÚ=~ÑæÖ.ìØ¥Ý½ª 3<°0+,h£ †×wE´¸š¶ÿ×OÐ(¯6ÔÿlŸ„Z/ÆGøu¬üRøwiãôxco Mâ;8õeyŠ,(mO7s™b »rÞb`Ã6ì¿jφŸÇþé¿| qñÖ#4þ‹]µ}f$%ìÄžjüŒ¯ÊýÒ¡Í Þ³]Mþà~íÓéoÇo¿¡ßQ^qáÏÛá'Œ~&Cà¿|Qøw«xÂæK¨bÐìüGg>£$–®Ér‚Ù$2‰ÒEuÛ”(Á€Úqèôn“èë]BŠóGöÙø5¤ë)§j¾A¨Iâá5µY ޲MÙæçí`²ƒo0/"¯GûX|.›ã£ü0‹â?[âLqù­áQ®ÚeWËäÙùžhýÙ÷~éÝÓšº/ëKþZúIÆ÷é¿ßoÏO]@¢¾~ý¦?à¢> ýž>+x+Á–7ZŠ|Iâ_i~Õ4‹/ÙG«xuu<«{ɬüé!2`«œe¹Ub:ÿ þÓ6~2ý­uÿ†^—Â:¬^ÐaÔu«‹?ZO«iÒˈìî´„&âx ̳¾Õ`Á@=h¾“ŽÍµóŒTŸÜšù´–®ÂŸ¹~nÉü›å_Š$ÛÓSÔ¨¯6oÛ+á|s â—ññ$¸ˆxTøŠÌkEÌf]‚ËÌó‹y`É·nvüÝ9ªß ¿lo|cø»ãßx;Zµ:÷ÃÍ^ þ)n ÅÜòØ[ßjFic¹TbUH’9.H½í¿­¿Í}àôºg©Q^c¨þÛ?´e4íOâ×ÃH5 <@|&¶¯âk!1ÖAé»<Üý¬PmñæÃåäT~ý¦lüeûZëÿ ¼#/„uX¼) Ã¨ëW~*´ŸVÒ/¥—ÙÝiMÄ ð™g}ªÁ‚€zП3Q]oø.oËïºKV®Ir&åÒß‹åÛ×î³oDíêTW‰~Îß·Wƒþ8kwžñ¡ xKǶÚî³¢ÅáKÍ~Ò]Vñ4ÛÉ-dº†`ïùk !NÕ‘C`×eeûQü2Ôµ}OÓ¾"øâÿÅWךf‰m¿hókvlRîÞÕ™žX–4 ÑCh¾£(êšMy§°ÚiÊ/tÚ~M^ÿuŸÜwtW–ü*ý±¼ñâï|àíjÔëß5x4Kø¥ºƒsËao| ¨Y¤UŽåQ‰U"Hä\¹:QþÖ ¦øèÿ "øàVø“~kxTk¶§YUòĹ6~gš?vCýߺwtæ…ïZÝvüÿ!=.ßMÿ/ÏO]@¢Šòß þÓ6~2ý­uÿ†^—Â:¬^ÐaÔu«‹?ZO«iÒˈìî´„&âx ̳¾Õ`Á@=hZÉEnïø&ßå÷ÙnÒ¤\žÊß‹I~/ä®öMž¥Eyo¯ÛÀ_þ.ø÷ÁÖ­N½ðóWƒD¿Š[¨1w<¶÷ÀÚ…‘šEXîU•R$ŽEÁ “êTn“îG`¢¸/ڳᆧñƆ:oÄ_\|GµˆÍ?…¢×m_Y… {1'š¿#+ò¿t†èsU¼9ûb|$ñÄÈ|áŠ?õo\Éu ZŸˆìçÔd’ÕÙ.P[$†BÑ:H®»r…0N­­×`~íïÓõØôz+çïÚcþ #àßÙãâ·‚¼cu x§Äž%ñV—á­SH²ñ”z·‡WQ“Ê·¼šÁßÎ’&Ú¹Æ[•V#­øáûGMðÓã?Âïø3I‹]ñÄmJäË \ù+¤épou0¬YQä³·UÀÝ-ì ½%³—/ÏFþå$ÛÙ-^ÌSjÔ»s|µKæÚi-ÛÙjT¢¼þ/ÚÃálÿŸáŒ?<ÿ#O1ü*ºõ©ÖU|¿3&ËÌó‡îÈ»÷NîœÕGöÙø5¤ë)§j¾A¨Iâá5µY ޲MÙæçí`²ƒo0/"Ò}ÿÎßžž¥4ÕïÓü¯ùké©éÔR3RX€$žÕã^ÿ‚Œ~Ͼ3ñM–‡àïŽ_u}gQ¼·Ó­,l¼a§Ü\\ÜÜh Ž4˜–’@­±@%±À4Òæ|«q=“Øöj+Ïâý¬>ÏñÉþÃñ#Àñ"4ó«¯ZeWËó2l¼Ï8~ì‡û¿tîéÍy÷í1ÿðoìññ[Á^ ±ºÐ,ÿ‚Œi6ß¶’|øe£iþ&Õ´øtéõÛöñN›bšh¼¸º…!†ÞY|û»ˆÅ”òI *¦>Ip´A:œ¼½vûíòWZ7£Ñ­¹/wšÿf×ù¤þ{ôÙÝ=S>¢¼È~Úß›Kûrü[ødl޶¾ûGü%>Wö«.åÓ÷ù¸ûQ_˜AŸ0ŽvצÒßQ´ÐQ^[á¿ÚfÏÆ_µ®¿ðËÂ2øGU‹Âš :޵qgâ«Iõm"úYqÖ„Ü@¯Y–wÚ¬(­ ¿lo|cø»ãßx;Zµ:÷ÃÍ^ þ)n ÅÜòØ[ßjFic¹TbUH’9.Iy&ºÝü“·ç÷èÖ1=O¥¿Ÿäõíªz§oR¢Šá,¿j?†Z–¯ éúwÄ_\_øªúóLÑ-£×ímbîÍŠ]ÛÚ “3˲ƚ2` ]Ù¿¯Äîè¯8ðçí‰ð“Æ?!ð_„>(ü;Õ¼as%Ô1hv~#³ŸQ’KWd¹Al’ Dé"ºíÊ`Àm8áiø(ƒgŠÞ ðeÖâŸx—ÅZ_†µM"ËÄvQêÞ]FO*Þòk:HL˜jçnUX‡Ï(Eo&’ómÙ[ç =›û)·ä’»ü h¯?ö°ø]7ÇGøaķĘãó[£]µ:ʯ–%ɳó<Ñû²îýÓ»§5GQý¶~ i:Êiڟů†jx€øMm_ÄÖBc¬‚Óvy¹ûX, Ûã̇ËÈ¥½Ÿõ½¿==FÓW¿Oò¿å¯¦§§QEyo¯ÛÀ_þ.ø÷ÁÖ­N½ðóWƒD¿Š[¨1w<¶÷ÀÚ…‘šEXîU•R$ŽEÁ ’níýZ‹¥ÏR¢¼/àíõ࿌_¼Aàj~ðÄ_Ôth¼'uâ+9õmFM¬/a·Gó)"‘$nT•8í#ý¬>MñÑþEñÀ­ñ&8üÖð¨×mN²«å‰rlüÏ4~ì‡û¿tîéÍ ÞQki$ךj÷û„ÚNKù[OɧoÏO>‡ QEyo¯ÛÀ_þ.ø÷ÁÖ­N½ðóWƒD¿Š[¨1w<¶÷ÀÚ…‘šEXîU•R$ŽEÁ ’níýZ¥ÏR¢¼þ?ÚÃátßá„_ü ßcÍo vÔë*¾X—&ÏÌóGîÈ»÷NîœÕ KöÛø3£êë§ê¿¾[ß¿ˆ„Å´ž'²Y¿¶é»<Üý¬P`ǘ7—‘GKÿ[ÛóÓÔm5{ôÿ+þZújz}ã>ÿ‚Œ~Ͼ3ñM–‡àïŽ_u}gQ¼·Ó­,l¼a§Ü\\ÜÜh Ž4˜–’@­±@%±À5ºß¶WÂ$øæ>?Å/‡câIqð©ñ˜Ö‹˜Ì»—™çòÁ“nÜíùºsNÏO?ëõ_xŸ»{ôßÈôš(¯?‹ö°ø[?Ç'øcÄ?ĈÓÌ ®½ju•_/Ìɲó<áû²îýÓ»§4–®Ëpz&úE|ßâÏø(Æ“mûi'Áo†Z6Ÿâm[O‡NŸ]¿oé¶)¦‹Ë‹¨Rmå—Ï»¸ŒYO$¢ªcä— _HS³²—GýÃwèFâ÷ ù¯à(Î¥ñÇ9ãÅú‡þ‰Ž¾”¯šþŒê_sž<_¨è˜é~ßòbš®?è7áÿý>XQGíñÿ&)ªãþƒ~ÿÓå…ô¥|»?ìÙñ_Û¶×\ÿ„àÏü)K] ôE„ëw?Ú»ÍÜZ’Þ /û+ì¢E½‹…ûOq6ðãË?QWÉ¿²wícñkâŸí‹ñÛ¼r¾ðwŒ,´:ðjÚv4;WÐìnˆtŒ‰góe™¦ïe! =ªCø±kt›]µ\¯ð“_6÷IŠqR§$övõÑ©/Æ)ü­ÖÏoØ[âÒø¶ç^µð·Áxµ«¯ŽñüFþÐ__ ¤Ñ’Þ;R<Á¥†kÖ·Y"1" !_4Œ×u/ÃOÚ /Ûð|BÓ¼ðE<tÇð¼“Âq©.±6ž×ñÎ/ZÜh~Q¸Xlg)¸ãÏæ®àímñ'á?ÇŸø[↵|3¼ø¿}àë?j^&YµM2[›xîmaM=m@k(æsj$iétùArß ÿÁbõ/|w‹MðoÂGWøw?Ž¥ðjÖw·ê\Åzöê2i˧ý•4于@Òý¼È±/˜b÷BpÉZƒ†ºEÆý9©S…ŸŸ³”ý½Ì·¹5c:Ê]Úzÿ-Z“ºòöŠOnœ®Öhæüÿäø×¤þØ6~& ð÷Ãþ´ø«¨øøÜØøºÿSY­.áY@¾ÒÞ+;ëˆg -Å­üJ®òȪw2?èEù»á¿Úâ§Ä-/Ã?üIûCiß¼?âŠ÷:§¦ðÝ«èsøzÃ^m&[9/ÍŒ÷cUœÆeÇÉ2ˆ™ó–é-)ÐŽ×Jý¾«ù$–‹K&í{ßZ¾ûž&[ë§Ž~›¹jßT¯e§ ðöz×ÿk/‰<'à?|1Ð|?Ç9> _ø›Rðþ«§ø²Ê;=igƒì‰-Š[ݼâÄÄ—ivžU¼ûLR—úoàwì™ñÃ_·¿Åˆ¾|¹ðïÄMRÝã×­|Awwâ=:ÆÊÒ8­#û4º2Dì÷-è¹ALØiLj_æ?o¿¾ø²>|Vø«{¦jƈ´_ëI£èûüs¡/ˆ­ôWJº‰¬ÄqÝØ¤ßiVƒË’HeI™åJ+Ò´ŽŸdýž‰µ> :²~ÒÀŠƒÃš(YtOøJWCûϱç‹}×p>o™“»Ë)`(ûZ_f´’Œc~­ÆŒ.í³Jp^ª[õ¼\§N®#Ú4¯Ù{Õ'e}õ„š~‹Mm¥iÿÎø§‡Âë›_„ÏðþÛâ·ü,Ôø‚onÛÆ ·¶¼“§ýÊ›ØïÛHò>o+'Êkâo€šÃÛ›Á_ <3¦ø{Æ‘§Æy~(MªGðïU:ÞŸo|÷wÓµîºÑÿg*Àn 0˜É$Bq²–?©•ù»á¿Úâ§Ä-/Ã?üIûCiß¼?âŠ÷:§¦ðÝ«hw°×›I–ÎKóc=ØÕg1‡YDñÄòL°¢&|åt¢ÝjIiiEߣ|Ôíœ!{+òÅÚͶe]{Jy¶iéæã;µÒö”÷v¼»mì_¿dψ¾ý½þ(|Cøµð»à χ~"j–ï½kâ »¿éÖ6V‘Åi٥ђ'g¸nEÊÚfÃJcRþW«Á8~=ÝþÙÄkëø…|'ñ*ïÅÐjþ>Öí©¥Î—¶ÐÙ Ó¬®-m/‘>ÒòÜU$~k2öÿ‚Åê^:øï›àß…ޝðîKàÕ¬.ïn5Ô¹Šõì%ÔdÓ—Oû*iÉu¥ûy‘b_0Äî‡Wáoø(¯Ä ߎ¢øãàæŸ¤xßâ4ÿ gñ·ŒåÏÛ ~mÒXý‰3o h#“2«Å,¥Bʈdh£ÉÒäÝmëÍŸ«” –×r¶­±âeeQTv[=ºFIúÚ1—{rßF®xÿ”øÆž{­s@ø mâx?µ®­dµÖï^1<þ4¶ñ5´~qÒQÑ Ç-¬Ž²˜a‘VM̱þ›ÆXƦP±È cÆkáÏ ÿÁbõ/|w‹MðoÂGWøw?Ž¥ðjÖw·ê\Åzöê2i˧ý•4于@Òý¼È±/˜b÷CÐ4_ÛCã/Œÿi?|?ð/À"òÏáÿ‰lôýSÄxî8l¥ÒtžÞ3eæ½òÁ0•ìÙ%tìÀSŒ”£ lïo›ç~—s¿ÏMIÍ5*ï{¿¹GO$£m>z²~~ÐQ~߃âà‚)೦?…ä›þIu‰´ö¿ŽqzÖãCòÂÄ„ c9MÇx5yƒÿàœŸôŸÛÏÄÁ>øÂŸu›_êk5¥Ã\+"hÚ[Åg}q áe¸µ¿‰UÞYNæGïàÿ‚¯ÜÏûxi_ -< o©x']ñ-ǃì¼a¦_j7H5(-.g•&c¥®œ¥$±º·xcÔd¸GL´#æ èþ·Õ|ÿ!Õ4¸¼SâGBñä×H¿¿3ØX]%ü0†µˆ¯îAF`@$æŒ3JTT6÷ìý/Y§ê×5¶»I®]bZŒ+)}®[¥çû”×¢vï¥Ö»ý_%ø#ölø¯áø)7Ž>&_xàŒ¾ñ…–‘¤Gzž#¼þß°‹O“S“í¢ÔèþS\Lu%Ví*@?zù}i_švŸ´¯Ç öÊñw‡< ñOÇ>?»ðÇÅí7Âßðˆ\|2Š}O Ý[éw——kVV¥•ͤ:•Ó#ËvU£µ…Z$—sm‡æ•^H»]k}­Íë»[t»z!ÍÚ”›Ûþ~>û.§¶|ý“>"økö÷ø¡ñâ×Âï€7>ø‰ª[¼zõ¯ˆ.îüG§XÙZG¤f—FHžâ¸u(#i› )KùOƒ¿à“¿|3ñr-3ÄvÞñ?€­þ+ÍñB vóǽµôS>¨ú”`èPÙˆæ Jo„n¨²4]a¯j³ÿ‚Œx‘ï|ú—ÃM>-7Äÿ5…º¼ñx§Ì›DžÖâê[È¢ûQÎ,Ù ÄÐï@<ÞHó‚?·GÄ6^/‹^ ñ‹þhu/ÍãK¿ÛIªZ ½qm,|­;Ëk8ò gs*L¢<¤3/ÏXP”yértWOÏšœ“}ç '¢Ø×Ç™OvìÒßjùüµ~VÔç<ÿøƒáŸ‹‘iž#¶ðw‰üoñ^oŠk·ž8Õí¯¢™õGÔ£B†Ì@÷0³ùS|#uE‘¢ë ~‹WϾ·Õ|ÿ!Õ4¸¼SâGBñä×H¿¿3ØX]%ü0†µˆ¯îAF`@$æ›áx†ëþ eâ Æš~©¦épø9´µñ|—z^©½A4÷:;ZF¶—‹,žZ̳ϾÙ÷C¢Ó§FœU”¹þø)Eߦԭè“ècVvY=ââ¿ð7zïRþºu¹ó߃ÿàœŸôŸÛÏÄÁ>øÂŸu›_êk5¥Ã\+"hÚ[Åg}q áe¸µ¿‰UÞYNæGšÓþ ñN-…×6¿ Ÿáý·ÅoøY©ñÞÝ·Œÿnÿmy'Oû”/7±ß¶‘ä|ÞVO”=+ÀðPOŠ¿¼_o¬|ø ž!ø?wãi|ž$ÿ„Æ(u„KmAì/ui4Ÿ²°[(¦‚èöƒ3Ñš(ÕË'×¥4éBZE«w¼TÓunXYh®ž—æ.³s«>o‰ïÛyßÊ÷”ÓÝÙ¯îŸ%ø#ölø¯áø)7Ž>&_xàŒ¾ñ…–‘¤Gzž#¼þß°‹O“S“í¢ÔèþS\Lu%Ví*@?zùQð·ìEãOß¶÷Ž|gð3Àß®ü-ñÄ:wˆ.u½U¦¶×¼4b°‚Êî ;8,Y'2‹c*ÌnàÃÜ˹¼¿û/|@ño~8üz»ý§¾6jÚÿƒ¼âÛ? é6𯗤iÖ°ë "öyím"•æóõci/µ“ÊÜ­!.zÿ x»Ä7_ðS/hþ4ÓõM7K‡À‘Í ½¯‹ä»ÒõHê §¹ÑÚÒ5´¼YdòÖež}ð€Ϻe)JŠ{¸þ övÓh§§ù ­xF¤ÞÞêòÕ¨«uûV×Ó­Ïš4ø#Ä]/ö—ŠUø§Ÿøéµeð/˜âÑt‘¨ŸDâÜC°_.¼Ín[vÓ§…BK|µ>«ÿáø÷wûdøâ.¡qà?/…>%]øºBÿÇÚݨÕ4¹ÒöÚ1 ÃbÚu•Å­¥ò'ÚGŸ-ÁµPòGæ³/®xþ ñWã7‹íõ‚ŸSÄ?îüm/ƒÄŸð˜Å°‰m¨=…î­&“öV eÐ]>Ðfa3E¹däü'ÿ‹Ô¼uñÞ-7Á¿ 5_áÜþ:—À «X]ÞÜk©sëØK¨É§.ŸöTÓ’ê9Köó"ľaˆÝN-{(®Dß_Ýï}V¼»ÛW/ï ºru\÷þN½4\ËEt”v´YÒ|ý“>"økö÷ø¡ñâ×Âï€7>ø‰ª[¼zõ¯ˆ.îüG§XÙZG¤f—FHžâ¸u(#i› )KùOƒ¿à“¿|3ñr-3ÄvÞñ?€­þ+ÍñB vóǽµôS>¨ú”`èPÙˆæ Jo„n¨²4]a¯]ð·üWâïÇFÑ|qðsOÒ< oñ†³øŽÛÆòçí†?6Îé,~Ä™·4É™Uâ–R¡eD26%¯üƒ]ÛvÏá~³ðëBм;}ãKÇ©ë^'¸Óu‰(%‘/`±ŸM[K¸'’ ‘-µü²°pÌŠË$qÎÍÒ•5w§/ß §äï*r[n˜Vž•9ÞÛùYN/×HÎ/}šÜíüðÇQñ'ü³Æ¾6Ÿá¯†´½Ã?ôÿÁãk­.á5½vòæê[‰-mnŒÂ³·Š8wâæY‚ù€#%};_ øOþ ©xëã¼Zoƒ~j:¿Ã¹üu/€V°»½¸×Ræ+×°—Q“N]?ì©§%Ôr—íæE‰|Ã?ºrS†´¢ÖÚþ>÷þÝý;„ô©$÷Òÿ%Ëÿ¶Ÿ›¿~ xgã·ü·Çß WPàσom>(]h—¾»Óìïü{,w:l·6³Ï $ðÃo W.«‘ö¹£™XØè-?à™ßâÐàø]skð™þÛ|Vÿ…šŸMíÛxÁöïö×’tÿ±ùBóqû½ûiGÍådùCªñ«ñ#ÃðRx{À?|QãÍCRׯõøN |;àß=•ÊØ¥Â¬-J×åÈ¿­Øëßž¥jT›9T›ÿÉœßàº#7áOüëâ7Ã?ÚxVÿÂø‹¨\xÄ áO‰W~.‡P¿ñö·j5M.t½¶†Ìh0ضeqki|‰ö‘çËpmT<‘ù¬Ëú)_i_ðTY\êº×Äo‚ ¥ü:ðçÄ)>jþ!²ñ…½íÄ7MªG¦ÛÞAbÐFÓZ™® ’ñË3Šu_0‘—ï!«U÷Á]ôZ¨.‹ïaR.¤''´¾rSm%Ö÷œºÙê­dbØ7â­¯Œ¯µ­'Â_-õ+¯|H‚x‚õ.ÿ²·l°Ò³öæ^3ï+l¬<Ò3»îŠùNÏþ 1âG½ðê_ 4ø´ßüTÕþêóÅâŸ2m{[‹¨mo"‹ì`]G8³ft/C½óy#Î>þÝ~Ùx½þ-x7Ä/øi¡ü]Ô¼7.üKm&©h.õÅ´±ò´ï,¬à{È-Ì©2ˆòÌ¿=M G–að´šùFŒßOuÓzé­÷b«FT¦ç/Ší5ë:ÒzŽ5–»t±Ùüý“>"økö÷ø¡ñâ×Âï€7>ø‰ª[¼zõ¯ˆ.îüG§XÙZG¤f—FHžâ¸u(#i› )KùOƒ¿à“¿|3ñr-3ÄvÞñ?€­þ+ÍñB vóǽµôS>¨ú”`èPÙˆæ Jo„n¨²4]a¯¥<3oªø;þ Cªiqx§Å:Ž…â?É®>‘~g°°ºKøa k_Ü‚ŒÀ€H9Í7Ã.ñ ×üËÄ?4ýSMÒáð$sh/kâù.ô½Rz‚iîtv´m/Y<µ™gŸ| ³îŠÃÚøyEjùíë I·ëÍNêÖÙ;n…Z§ñ”¾Ë‚öòŠ_ù-Kk~Ýn|¯âø%ÿÇMQð¯‡>ø{öyÖ|?áâ¢xÏZÔõ oê°ËªË¨Ko$Qi²,Wa'k_´ý¢E’Ð1 ô¿ ?h(¿oÁñ NðGÁðYÓÂòMÿ ƤºÄÚ{_Ç8½kq¡ùFábB±œ¦ã<š¹[_ø+ºÿ¶íŸÂýgáÖ…¡xvûÆ— SÖ¼Oq¦ëš¶—pO$A"[kùe`á™–Hã£ðö¶ø“ðŸãωü-ñÃZоÞ|_¾ðuŸŒ5/,Ú¦™-ͼw6°¦ž¶ 5”s9µ4áÔº|Œ ¹ºçt”|åõrTé[ÕÆqŠÙk§¼N-Fþ×vÒ}ô•J·ùJow§òÜæ|ÿäø×¤þØ6~& ð÷Ãþ´ø«¨øøÜØøºÿSY­.áY@¾ÒÞ+;ëˆg -Å­üJ®òȪw2?£x[ö"ñ§ÀïÛ{Ç3øàoW~øâ;Ä7:ÞªÓ[kÞ1XAewœ,“™E±•f7paîeÜÞs¾ÿ‚Åê^:øï›àß…ޝðîKàÕ¬.ïn5Ô¹Šõì%ÔdÓ—Oû*iÉu¥ûy‘b_0Äî‡!ûAþÞ?þ7ëÿ |QðÃ"ð¯ÂÃñ·NðrøžßÅé7ˆ"‹V—L¿KÝÀÍö)&‚Xâa?»lHã eFörŒSÿ³ŠO²·&ŠÛ;+ób[R­V¦éI¾»sÍÛ}[ç×äݬzŸÀïÙ3â/†¿oŠþ-|.øsá߈š¥»Ç¯Zø‚îïÄzu•¤qZGöitd‰Ùî [‡Qr‚6™°Ò˜Ô¾´¿ ?h(¿oÁñ NðGÁðYÓÂòMÿ ƤºÄÚ{_Ç8½kq¡ùFábB±œ¦ã<š¾ª¯ƒ>þÝ~Ùx½þ-x7Ä/øi¡ü]Ô¼7.üKm&©h.õÅ´±ò´ï,¬à{È-Ì©2ˆòÌ¿=eIÆ5©Á/z*MvÕ¨;ôWU-}·ÞÌ+EÕ§'%¤¥¦÷IÊ>¿îÝ—Kœ¶—ÿÖøáâŸx³EøáÙÓGð¯Šþ1Åñ?þý+QÔ/~ÛÞ8ñŸÀÏ| »ð·ÄoéÞ!¹ÖõVšÛ^ðÑŠÂ +¸,ìà±dœÊ-Œ«1»ƒs.ä|~óÊüÿøƒáŸ‹‘iž#¶ðw‰üoñ^oŠk·ž8Õí¯¢™õGÔ£B†Ì@÷0³ùS|#uE‘¢ë {'ìûXüZø§ûbüvð‡Ä/\¯„üã -'N¼¶Õô;¢#"YüÙfi;ÙEÈB@jñÿko‰? þ<øŸÂß|5¨ø«áçÅûïYøÃRñ2ͪi’ÜÛÇsk iëjYG3›Q#NK§ÈÊ š¡nzj;ÙJ7ÿ5äùœ9vÕ[W¼b'É JOKÙÿà~~ê•÷ÑßmO¸«åY~~ÐQ~߃âà‚)೦?…ä›þIu‰´ö¿ŽqzÖãCòÂÄ„ c9MÇx5p¾ÿ‚Åê^:øï›àß…ޝðîKàÕ¬.ïn5Ô¹Šõì%ÔdÓ—Oû*iÉu¥ûy‘b_0Äî‡Ü”S³p®º^ß8Ùùë[çÝhUÔèKÊÿ)]k·Å÷[kßãß ~Ä^4øûoxãÆ< ð*ïÂß¼C§x†ç[ÕZkm{ÃF+,®à³³‚Å’s(¶2¬Æî =Ì»‘ñûϰ«ó«ÀÞ:ý¡|sûnxïÁþø·ñJöÏÁ¿cµµK¯xz/ ϣʼn¨^Y^_¦žnÅÓ[j×±Aå²nû4{›pwqÑmŒ¾3ý¤ümðÿÀ¿t‹Ë?‡þ%³ÓõOMã¸á²—KºŠÒ{xÍ—š÷ËÂW³dX”Ó³M%S÷I¥äã¼¶kÏG~åÎ.òŸm­Ñ´ôß~¶ðçÿ~Ï:χü!ñ üTOëZž¡mâVuYu mäŠ-6EŠì$íköŸ´H²C!>Âø7ð+Ä~ÖŸþ)|bjÔ£´ð·ƒíàŸÎ~ƒošI€{›éî^@3˜íìÁ9Jöªüì¹ý¦¾.Z~ÙZxø©ñ;ÆÞÑî~)·‡ìt/øA­¯ü¯è^{ÚZÁˆmìg’ßSž_/+qwnDûí„I…vÖ”œ¥ jÛ³ó—%;÷¿*Q²û<ÚªN3¬×¯œêéWwk—ThÚÁ3¾)Å¡Áðºæ×á3ü?¶ø­ÿ 5> ›Û¶ñƒíßí¯$éÿcò…æãö#{öÒ<›ÊÉò‡¡|ý“>"økö÷ø¡ñâ×Âï€7>ø‰ª[¼zõ¯ˆ.îüG§XÙZG¤f—FHžâ¸u(#i› )KÖ´ÿ‚¥ø–êÞ?/‹sð Gâ•ñB{íWþÅÍ£P‚ËûC1ñvgòñ/“ü6ëÄÿ¾2ÿÁX¼KᛩÚlí;pOlšüÈÐ?à’ŸÓÃu®h­¼OöµÕ¬–ºÝëÆ'ŸÆ–Þ&¶Î:J:!X嵑ÂS 2*ɹ–?¡?e?ÚËâçÅÛãÇ„|wà øE¼âû='L»:¾žD¶} Æël‹ïfóe™¦ÏÎÈ.Bqåík¡ÿÁr“Wðݶ7€t~9Ëâ$Ñåøt¾/•åŠÛþ3á׺ßÙÁÒõCÀE¸⢒ugEy5î鯽<ùfîº+¾—EOÝÓ”¥ðŦ߸_2×µãóÑ'ª¼VðLÿбø~ßá}õ§ÂVð·Å_øY£âÛ®ßÅäÿnÿmy?`6b!y¼ý‹í¿mÁƒæòr|¡Ëxƒþ ñÓAÔ|+áχ~ýžuŸøCãAø¨ž3Öµ=BÛÅ:¬2ê²êÛÉZl‹ØIÚ×í?h‘d†$4 B{¿ü~êÛÃJøYkà[}KÁ:ï‰n<gã .ûQºu(-.g–9Xék§)I,n­ÞÔd¸GL´#æ Òè¿¶‡Æ_þÒ~6øà_:EåŸÃÿÙéú§ˆ&ñÜpÙK¥ÝE é=¼fËÍ{å‚a+Ù²,JéÙ€§B·#§8wR^«‘«ú(ÃM4Z§¨«EÍTŒûkÿos¦×¯4ûÙ¾šËðÓö‚‹öü´ï|O1ü/$ßðœjK¬M§µüs‹Ö·”n$ [Ên8óÀùª¯‚?fÏŠþÿ‚“xãâe÷€þËàOYiDw©â;Ïíû´ù59>Ú-Nå5ÄÇRUhþÒ¡D÷¯á?ø,^¥ã¯Žñi¾ øQ¨êÿçñÔ¾MZÂîöã]K˜¯^Â]FM9tÿ²¦œ—QÈ_·™%ó @þè}ÉJ„:Päøu^·j£¿]å~›µÒÉT_¼¨žòµþK•[u´Rùy»þnü ø%៎ßðVß[|5]B?ƒ> ½´ø¡u¢^ø^ïO³¿ñì±Üé²ÜÚÏ<(“à ¼1\º®GÚæŽebCcôŠ¿:¼ ã¯ÚÇ?¶çŽüáO‹¯lüñ;[Tºð‡‡¢ðœújÇð·ìEãOß¶÷Ž-7Äÿ5…º¼ñx§Ì›DžÖâê[È¢ûQÎ,Ù ÄÐï@<ÞH¥áoø(¯Ä ߎ¢øãàæŸ¤xßâ4ÿ gñ·ŒåÏÛ ~mÒXý‰3o h#“2«Å,¥Bʈdl°öj”iùÛÏšP•Ÿø¥R lÛšKMˆ^ÂUeSF÷òåR†›ì©IzE¾·\×ÀÞ6ý„¾<[übð݇Ã'àçà üj—⥾©©k×öºçÙ®šyn¬ÒÎ-2HRU–ö䬿h"D¬¨K0Åý ÿoˆÿõÿ„¾(ø áxWáaøÛ§x9|Ooâ‹t›ÄE«K¦_¥îŽ`fû“A,q0ŸÎݶGŽ$w¥Aÿ_¹ŸöðÒ¾ZxßRðN»â[ÙxÃL¾ÔnjPZ\Ï*LÇK]9JIcunðǨÉpŽ™hGÌ©Gß…eñs8¤û§J{t÷œ,žº5k=J²q„èËk]üÕZo×ÝçÚêÎû­0ìñVׯWÚÖ“á/‚–ú•×Lj¾$ Aø@gÝnŒ¨FŸ”—ý¹N7ôT£§“ßS:Ñ-YO^þߜӷάìöÕ-¬Ï›|ÿøƒáŸ‹‘iž#¶ðw‰üoñ^oŠk·ž8Õí¯¢™õGÔ£B†Ì@÷0³ùS|#uE‘¢ë z·ÀïÙ3â/†¿oŠþ-|.øsá߈š¥»Ç¯Zø‚îïÄzu•¤qZGöitd‰Ùî [‡Qr‚6™°Ò˜Ô½kOø*_‰n­ãñòü(·?§ñ¸ð$~)_)×¾ÐuìQ|Ú1µ,¿´3f/ù?À4<-ÿø{ñÑ´_|Óô[üFŸá¬þ#¶ñ€¼¹ûaͳºK±&mä rfUx¥”¨YQ Œ©$œ)Åk­–Úµkµž´â¶½ÒÕÜÒ´Ü=¤¦ýzíÍ7mú©IÛk=‘õÍ|{áo؋Ɵ¿mïxÏàg¾]ø[â7ˆtïÜëz«Mm¯xhÅa•ÜvpX²NeÆU˜ÝÁ‡¹—r>?yõçö¿ö‡Ù<ø~ÕåùÞNñælÎ7mëŒñž™©¨ZII^_zA}{Ÿ ·ì-ñi|[s¯Zø[à¼ZÕ×Çxþ#h/ˆ¯…ÒhÉo©`ÒÃ5ë[¬‘‰¯šFkðwüwâ†~.E¦xŽÛÁÞ'ð¿Åy¾(A®ÞxãW¶¾ŠgÕRŒ 1ÜÂÏä MðÕF‹¬5ú-E*)Qäåû6·ýº©ÅyéìàýUú²d¹œ›ëÅÎOËz“ù;tA_ø[ö"ñ§ÀïÛ{Ç3øàoW~øâ;Ä7:ÞªÓ[kÞ1XAewœ,“™E±•f7paîeÜÞ}…E5¤”–ÿðÏôE_Ýqî~tø;þ ;ñÃ?"Ó+øcþ M㉗Þø#/XQ\í5ñ2ßâgÁ+h'íZlju.Xâ,ÑCk}Ü’¶:.-öäõ,( ±kÇ|eû|/ñïÇañÄz6²|N÷——"×ĺž™¨ÜZ([k‹Í2”³»š%TU’h]€Ž1œ"mö*(Ù§Õôk£<%ÿà›?¤f2i>+bþ7›>7×>}tmÅÓ¦òƒbbÜþàmޤ¶ÿ‚qü$±ø²þ1Ó´_Z_I­>—oâÝ^>¦Ïæµëh‰v4ó;Kûæso–—÷§2ÕîTQÝÛ—Km÷%ùF+Ñ%Ñ ¤ï翞­þroÕ·Õ…x¡ÿÈø3ñZ§‡µ»+ÛÍ~Ýé–>*Õ¬ô Ý^’xõ ôhn–Âk‘4QJexšDWl°Ý^ùE8¾Y)-×_ÇóKî÷¢âög‚hßðLŸ‚Ú$é,^Ôï^GñÛûGÄÚ® ,uô–I¾Ýl.nœ[3¼ò—Ž-‘ɼ‡VBø'—Âk_Ú_‰vú¨ž#ŸWÿ„…퇈u/ìVÕ<‘öö?Ú>Ãö¿,ö#ÌÏÍ»wÍ^×E(û–åÒÛyiùF+Ò1ì‚^ÿ76·ßÎí½{ë&ý[î¼Pÿ‚d|¿ø­?‹ÓÃÚÝ•íæ¿ŠîôËjÖzî¯ É—oâÝ^>¦Ïæµëh‰v4ó;Kûæso–—÷§2Õ?ßø'×Ã?„ÿu‰¾‡ÇVÞ.×ïåÔõ9&ñþ¿ua¨\I „´Út×íi XˆHÕ¡+¤b0‚4ÛítS‹q²]4_=ÆÝï~»Ÿ;_ÿÁ*¾ê?“Å’ø{İêÖþ “ÅvikãMnÖËKÕ%‘åžîÎÊ+Õ·µ’g–c/“ „Ò‰ 6¾¡ÿéø_©þÐÉñRé>!Gp.î?‰#ŽÕGœ³ùÅuj-ŒˆŒm|¯!±ƒW¹QJ Ù¸¸ém­ÓKiÛD— ¤”¯~»ùÛUG¨W“| ýˆþþÍß|Yâÿ„–Þ,µÖüqu%ö¶oüc¬ê¶··yA§û%åܶñ˶c$jËk€-zÍâÜ_2ÞÖù=×£²û†õV{o÷;øÛþ YðGâÆÈ~ ø›Ã¾$>$¶ñ>/„Zx×\²Ó¡Ö#EŒ_¦êZ,숪î"ýàÜvæÍ/Á!þøâÅ×4_ kÓk7Þ$o]èxË[Ôt˽d¶åÔ&Óno^ÒK„`¬ŽÑD)´¢úVŠP~Ï——Kh¼–›vÙ}˲ >kß®þ{ï÷¿½÷g†êðNŸ…úŸí Ÿ.“âñ´wánãø‘â8íTyË?,WP¢ØÈˆÆ×Êò1‘ÅCqÿÜøYuñü|O™~$-Ѻcâg‰Eºæà\˜Ô~Ì-Lª¬m<¯ €ËÛÅ{ÅC÷|ª:rÞÞWÞݯÔ%ïóskÍkùÛk÷·CÂ#ÿ‚i|‹ã?ü'iá[ïía®ÂP¶ðjGAM_vÿí%Ñ~Óö»ó›çˆ7ùŸ¼ÎòZ½ÞŠ(ZEEmÛî_’Kä¾fä÷>h_ø$OÀßøLouÛ/âÕî©®[x’þ+¯‰Þ(¸³Ôu g…íç¹´“Rh'1›[`«$l¡`@ÚŠýÇüsáe×Çññ>eø|h·Fè]‰ž%ë›p`cQû0µ2ª±´ò¼‚_/oïQs•ÇKmå¥´í¦žƒ›uRÕ=üúêxDðM/ƒ|gÿ„í<+}ý¬5ÏøJÃþ Hè)«îßý¤º/Ú~À·~`ó|ñÿ3÷™ÞKT¶ßðN?„–?_Æ:v‹â Ké5£âGÒíü[«ÃáçÔÙüÖ½m.Æžgi|ÎmòÒþôæBZ½ÊŠqnåÒÛymþKî]…'Í{õßÏ×ï<&ø&×Â;›©f›Jñayün¿\Âo®muH+u·í¸Ø6®-ñä £÷| ƒÃðLƒ¾ø¯ÿ Ž£ø§ûCþ[>ãÆšÝ΄ºÌò¼²_®-ãX¬Þd²:°€lbpÀï´R¹g-·•’KîQŠÿ·Wd'ÓMh÷óøž¿9Kÿ—vxm·üá%Å—ñŽ¢ø‚ÒúMhø‘ô»êðøyõ65¯[DK±§™Ú_ß3›|´¿½9–¯r¢Šw²Qè†õw{žà¯ø&7Á¯‡´§ñGÁÚ‰ìüc­k²øšþ_øMµÉ4ûÝFHÚ&¹—M{Ófì#rŠ $"…*ãßh¢¥%¨­—OÃòI|¾i9=ß_Çómüϯÿà•_u‰IâÉ|=âXukIâ»4µñ¦·ke¥ê’ÈòÏwgeêÛÚÉ3Ë1—ÉÂiD„Žç†ÿà™|'ñ_þGñOö‡ü$·1}Ç5» u™åyd¿][ƱY¼ÉduaØÄ2á€#ßh§Én]-·–Û}Ëî]Is)'×=÷ï»ûßvñìåÿ›Óü/ñÛÅþ6ý§í|#âÛ­WÆw^6ÒWLŸXµ·Kénžhf¾Ó¤½{ ¹í“ìé Ã[ù‰ä©\}¡E(¥ª‹âI«ú´ÿ4¾à—¿Mítþi5ù7¡ó¿¿à•Ÿ~ ül‡â‰¼;âCâKoÃâøE§uË-:b4XÅúiÐ^¥¢ÎÈŠ®â/Þ Á÷nlÒð‡üàþ,]xÓEð–½6³}âFñ…Ü:‡Œµ½GL»ÖKn]Bm6æõí$¸F Èí1”B›J!_¥h§ìùyt¶‹Éi·m—Ü» “æ½úïç¾ÿ{ûßvxn¡ÿéø_©þÐÉñRé>!Gp.î?‰#ŽÕGœ³ùÅuj-ŒˆŒm|¯!±ƒT7ðMÏ…—_ÇÄù—âAñ¢Ý¡v>&x”[®nÁ€YGìÂÔʪÆÓÊò|½¼W¼QD?wÊ£§-íå}íÚýB^ÿ76¼Ö¿¶¿{t< ÃðLƒ¾ø¯ÿ Ž£ø§ûCþ[>ãÆšÝ΄ºÌò¼²_®-ãX¬Þd²:°€lbpÀ;ÿÁ6~HÌdÒ|VÅün>#6|o®|úèÛ‹¦ÿMåÄŹýÀÚ1{µ%ËktÛÊÖœbÿíÕÙ iUmÏV÷¿[Ý?¿šWÿîÏ ¶ÿ‚qü$±ø²þ1Ó´_Z_I­>—oâÝ^>¦Ïæµëh‰v4ó;Kûæso–—÷§2ÕËø×þ÷û?|@ø‘Š|GáxjÞ%OZÚÙxÏ\°Òìu¥“ÍþÑ·Ó­ïRÖ†“.ò$J]™Ù²]‹}5ET$鸸»[ktÛnÛ/¹v÷¯~»þ?æþ÷Ü+æ¯Á!þøâÅ×4_ kÓk7Þ$o]èxË[Ôt˽d¶åÔ&Óno^ÒK„`¬ŽÑD)´¢úVŠ•îÉMo߯Gù¤þHm·³éýz¿½Ÿ3|ýŒü[¤ÿÁA¼iñçö‚¾ø{«êš§„í|áÕÑ4‹‹[½O†òâéÖY¦™ÄÍ3OöqäF»wÓ4QEýÕ‹üÛüÛÖN}]¯òI/Á$x`¯…þ=øì>#øFÖO‰ÞâÒòäZø—S³Ó5‹E mqy¦Cr–wsDªŠ²M °Æ3„M¹oÿÙøE#1“Iñ[ñ¸øŒÙñ¾¹óë£n.›ý7”ç÷hÄuîÔRK–Ítÿ4ÿ8Åú¤ú!M*šO__F¿&×£kfÏ ¶ÿ‚qü$±ø²þ1Ó´_Z_I­>—oâÝ^>¦Ïæµëh‰v4ó;Kûæso–—÷§2ÕîTQU{%ˆoWw¹å?ÿb¯‡ÿ³‡Ä¯ø·á5·Šmu¿]½þ¸×þ/Ö5[kÛ—òÁ˜ZÞ]ËRl†ÃÆŠV8Ò0B(Q•ðçþ õðÏá?ÇÝ_âoañÕ·‹µûùu=NI¼¯ÝXjBa-65ûZH"5hJÄ©Œ 6û])5k=•—’ì¼¼ƒù¼õ~oϹá¶ßðN?„–?_Æ:v‹â Ké5£âGÒíü[«ÃáçÔÙüÖ½m.Æžgi|ÎmòÒþôæBZ‹oø'ÂK‹/ã;Eñ¥ôšÑñ#évþ-Õáðóêlþk^¶ˆ—cO3´¿¾g6ùizs!-^åEnåÒÛym·Ü¾äÞ½úïý|ßÞó÷†?à˜?|#ñUü_¥i+’õüKqãìÛ¯kWZ ë3Nó½øÑå¼k0–F‘XAò>×]¬ªGÐ4QË%%ºëøþ‹î¬\^ϧ޿&×ÍžüCàÄ?¿á4Â×ÿoþÜ>(Yñ¤|<º¹3ûDh†çû<]ùŸ½óžÿ4™sæ|õ{Jÿ‚~|3Ñ?ikÿ‹ºU¿áñæ«,rÞÝëÆÎìGæùQI§ï²<1ý¢rLherª &½ªŠ"ÜmËÓo-¿É}˰?z÷뿟õsÇ|eû|/ñïÇañÄz6²|N÷——"×ĺž™¨ÜZ([k‹Í2”³»š%TU’h]€Ž1œ"md_ðO¿ƒðüp"ðUˆñ¢øüb5/´O¼j¦1§Ù¿f ª…òöìßûݾgÏ^ËEJI^iþi?T» “æßúѯɵèÚê|íÿªø#¨üJOKáïë[ø‚OÙ¥¯5»[-/T–G–{»;(¯VÞÖIžYŒ¾Lh&J$ $pÛßàŸ_ þü}Õþ&ø[x»_¿—SÔä›ÇúýÕ†¡q$&ÓiÓ_µ¤b!#V„¬J‘ˆÂÓoµÑN»IGKÀ_’Käƒvß}üýO ¶ÿ‚qü$±ø²þ1Ó´_Z_I­>—oâÝ^>¦Ïæµëh‰v4ó;Kûæso–—÷§2ÕîTQNöJ==]Þç”ü ýоþμ_âß„ÖÞ)µÖüyv÷úã_ø¿XÕm¯n_Ëakyw,I²c)XãHÁ¡G;üCàÄ?¿á4Â×ÿoþÜ>(Yñ¤|<º¹3ûDh†çû<]ùŸ½óžÿ4™sæ|õïP¤ââÓøU—’[%Ù+ jü×뿟¯sçÁ+>üAøÙÄxwćĖÞ#‡Åð‹Oë–Zt:Äh±‹ôÓ ½KE‘]Ä_¼ƒîÜÙÒŸþ µðŽæêY¦Ò¼X^¯ÄWð›ë[]R Ýmûn6 «‹|yhýß½ÚŠQ÷TRÙmåfš·k8ÅúÅvBœUK¹«ß¿ÓûÔ¤¿íçÝŸ2ø×þ÷û?|@ø‘Š|GáxjÞ%OZÚÙxÏ\°Òìu¥“ÍþÑ·Ó­ïRÖ†“.ò$J]™Ù²]‹hßÿÁ*¾ê?“Å’ø{İêÖþ “ÅvikãMnÖËKÕ%‘åžîÎÊ+Õ·µ’g–c/“ „Ò‰ 7Ñ4SMÅE.›ym·m—Ü»!ÉsÝK[ÿÁÿ7÷¾ìñß~Á_ ü{ñØ|Gñ¬Ÿ½Å¥åȵñ.§g¦j7ŠÚâóL†å,îæ‰Udš`#Œg›rn?à›Ÿ .¾?‰ó/ăãEº7Bì|Lñ(·\Ü ƒ³Ù…©•U§•äù{x¯x¢”}Æœtko+ï÷„½ôÔµN߆ßwNǃÅÿÐø1ÅïøM#ðµÿÛÿ·Š–|C©.®_ÌþÑ!¹þÏ~gï|ño¿Í&\ùŸ=:ø&×Â;›©f›Jñayün¿\Âo®muH+u·í¸Ø6®-ñä £÷| ÷j(^í­Óo-SÓç¿X®ÈSŠ©~eøf¿&×£k«<Ô~È_‡íb~8ÿÂ:§â‘ðßü"_Ûfòà‘¦yÿhò¿™äæüÞg—æcØâ½*Š(è—EþwüÛ~¬}oývü‚Š( Š( Š( Š( Š( Š( ¾H?ôüZñE¿‹l`¼u»²»×%žüƒÔ¥}o_0ø?þKGŠì5wÿ£Þ€=3Á¼)ðãN–óÂZ=­µäËóÏ·tõcÍØMÿ"áÿvŠè«çÁT¾ |8ø‹ªxkÄž#×ÞãB×-ü3©êv>Ö/ô=7UáHì.uk{G²‚àµÌÇ$ÊPÈ¡¶“Šú¿?jµ½ýƒ4O‰ÿ´ÿì#âí7âOÀoxòkO‹¿Ò´i½žŸ6â•û-^¶zÛ¥ØT”aJRÞKeÝ$Ûù謺«ët“ý¢¿+|Sñ߯ÿ?iŒÚôŸ´™ð—Yøñ6ÓNƒB½ÔoÀ]Afb³“ÃñȰê'Syfòî)n ²ˆíØlE§~Äüoñûâ?‚>.xŸöƒÒô-^oˆÚÏ„¼YàIµ+ûÇÔÓ®`¶ÐÓA2y6ÚÃ3 ¨aYZ(ž{‡hÌŒ0£7[ÙÙ|vkÒ\–ù:Mnši'îó=Î{kËuó\×_.Wn4î—3ꉼOeá"{ívI"’]‘BóÏ(Dib†5i%}ˆÄ"+1ÁÀ5Ï~Ïÿü+ûPüðÿÄ‚:Œš¿„üQmöÍ2ñí&µk˜·2‡ògD‘2Tðê§Ú¾Gý¿<-£jÿðV_ÙRøÄ.Ÿã ß.ÛÅ7šE£Ïi$EÒãI8šeul‰cùd ‹ñ×ì?â_~Éÿ³'ìY㟃ß|wâ[¿øwÅš]ÿƒ¯5†¹Ðïc´ÑõBÖ+}6,G]XÅœˆga3$’6BÕ9Æש¢Zé¯Y¯½¸ü»³HÒuf¡¯üÿ }tÛSöº¼Ÿö ýµþþÈvR|h¾ÖD×Ö·:‚YèÚî·z–VÞ_Úo$¶±†YRÚ<æe¦XÁ9`ÅÿðJˆž%ø‡ã/ƒõÚGKñ¶ŸñwÁr>µá/í[ÝfmcWŽžãP†ÞY=ìÒo·–eicˆ¨•¢ÝÔ~ÖžX¿à³>ñ‰uã½kNø%âMsOÒíȶáQ L$ÅpÈêZ¶›ñ‡âÝÝ ý®hâñSG]ÌÒ¼~­Ï*›E´Ò×XÚö邏NÚê½(ûh®G«W]µŒÚ¿m`î®ôiÜýˆ¢¿+~|Uñޝð³öø¡á‹ž=ñf³ûEê+áÿˆºdúô÷VªÝi7×w’ÚZ'îô©tû‹WU{!m±Sl¾aZòXkïˆÿ²7Å ÇñsYøÍâë?ÙSƺ–ñ~ñ¼C©ÜÅâ-'W‡†/  b·×.àvD8ŒFUуűʛ„Ý9=SkK½SIÛMW½>·òf|ÊQ掩«¯Ÿ5¾~ä¿çë÷Ž>8x{á×ÄoxSÅ3ßÇ­xúâê×FHt니e’ÞÝ®%Í4vàFŒA•1ùW'Šë«à cþ|BýŠ4ñ߯ïŠ/Õ¾,ê~6ðî¿¥øƒÄ&çLÔíì“QžÕã²À$…ìPùʦ]³2yj‘©ÉÊä¤ö¿žËmOÖö³ûêMZ2Ž©«ü¯-_m#·-¿Y«ÉhÛ{áçì±âï h?nüSo«xÆG‡E·Ò¼¬kgR•™¡‰´ûI”Êü¬ïÚ¥¶í¯ƒ?à˜Ú×ÅÏÚOãGÂOë=ø”ööñx¡¾(;ø©.¼3â‹Ë}GÉÒ_H´•ÝRÎE7.­cºÿÁA>üLñÿ†ü3¢Kã½;VñƒÉˆ5߇þ ЭµGŽÚK¦Hn¯ì!…ÛȆYB‡ÉTbÅt_´ímàÙŠMßã¹%¶­âišßEÑ´ý>çUÖ5—@ ‹M>Î9nn ˜ã`€‚Ä àg¿ƒÿm¾"øÄŸþ i>+ð5Ÿƒ&·LI]=íu)ZÈÁt¡E›ý/#ÞY aÈPÂgÛâöZå—Ãoø87Z—ã„‘YIã¿…–zwÃÛÛÐ#†äÛÞ3ߨÚÈĆŸs¤Ím˜%HÁ?3C†òŒn6´0Òœ©Ñ¡:²ŒgÍ9ÊiÆ2taËhÚr½9Z1›M¦¬¡‰©ì=¬Öü¶íï8«îôMùmm7>€ð/üCá_Äh¾3R¥(¥EÃ÷œï÷ØyÕJ˹¤çezqQ•œ¯ «ˆ«òSI¿{ËáTÚë¢|ú½zh}³û0þ×þý±¼1©k_³ö¡­jš^‘{&›sq}áÝKHU¹ŠÉ}ºÞ#FÊÊálaµ°x®[ã'ü«à§ìÿñzü\ñ¬zF»-ݵ„ÎÚmäº~sr¡à‚òþ8ZÖÒY«ˆæ•c+”Ÿ$ÿ‚H|AÐ~~Â>/×¾ êún‰¡èž>ñÕííåÂCog zÝë»»±T('žÕ[öÛø‡ðËö”ð²üÐõÏxgHñ¨Ó¼eãíOUž 5ô]%¦Žò=ðÎQÿ´/>Ê#@à#Ifr¦8c›Ï åðâ\V_Rgƒ§9Cž24Z朥ìœeev©Æ1”ä㻵Í~Ún”¬×?½m;;-/w¯*Ýoº>Ù¢¾cÿ‚¡xãQ?ðNßx³à¿Ž5ÏÏiš…–½¥È¶ÓCo-ݺ³7œ‡j¦bC#¹5òßíñ\ý’>5ümð>ñ“âÞµàýCBð†¯ûÝ\j𾓬jZÛÙ¶™eq<#NKûkvùŒÑ-¨•¦‹`USæðïUâ:« êspäq›~ì¨FM´¬¿–ï•­-î¦%RNMh’mÝuvÒíz·¢KVì™úE~Qi_µÄ 3àŸŽt]gÅ—3ÙøöŒ°ðŽ¡¦h>;ºÖµ‘¡\[YËs§išÄâÙÝ.g™Ý³‘EÒ+¢B íj0ø—ðcÂß |)ñâw‰´¿ü[ø£®évz‡‰¼U,WVº×-¢é¯¬Y¸ºµšä¬RàÝ;"Æî¥¤AìϬM='Š‚“nѵå(ª~ÖVI»ÍC^TÜ[²UîDñjœ¹d»ßäç-/víkÆýmú‡^GðÛöáøwñs㮡ðóÀúÝþ»aóý¨hɤ]›„¶½ŽÛShE¤ò[ÜH°È‘ÊÌ®Hʶ9ߨ+LÕçýœõ_ üLøŸÅ{Í WÔ4IÍ»®†ÅøK§x×öÄý¢~ xKÅŸþ3èZ‰ÿg]Ç×ö¾ñ$Z|·:½í”rÊn6Ù·ºÍó巰ȧ»P_’¬ßþ˜“ù¤ewyy?¿Ù[ÿOGîg膹ûQx#ÿ<1ðËSÕnŒ¼ec}¨é©§\Éow ‘ tEÚÆmÕâf@Ñ´Áuùy¯@¯Ä/ØàΉñNØB²øãý>óÅ> ñÖ£®\iÞ5º}Q¤uÓÕà‚âI^]=ÄîVÐÂÁ£‘”«ô?¿ioˆß´.‹ðoàÇÄ·ú¾¡áÅ¥xŸQñ=ö‹¨x·RÒ|G6›g3j–RG%ÔöÖVâv·22\y¯$Ë QNºö6†ò|Úwå罯¦Ñ²»Ö_Êž–£xºûªß'-Þz¶–‹½™û9\Ž>8x{á×ÄoxSÅ3ßÇ­xúâê×FHt니e’ÞÝ®%Í4vàFŒA•1ùW'Šüéø-¥øóö–ýµ>øÆµ7Äh¯ð†ßÅ—ZŸ‚®àÐ쯯#ømûpü;ø¹ñ×Pøyà ýnÿ]°ŽùþÔ4 äÒ.ÍÂ[^Çm©´"Òy-î$XdHåfW ¤e[ßðOMSÇzŸì‘â‰_~-x²ÿã%÷Ž'üHø©àÿˆz÷Ã= ã‡Äë? x7ö‘ð¿€ôe5(¦Ô®4­cM·¸¹Ò®5 ˜K·¶’ã $Œó1|ÇíÛ›ûCøâ/ÀÝ öÇ´ð÷í'û@ÝÃ5ø'Ú߃n5_«Ho~ÁqpÒ_°Ò/|FFs¢ÝÍio.Ÿ%’…Ž’ër™´fÑylÒ3}!ÿœðvãsöZ´ñn¹â=K¾øÏ§X^>•âKÍ Éšv£ Ý5¬Ñ0q$pÁÔä)ŽU8ûZtjEé9B>œêœ¯çhÕ]µMhµÿw:±—ØS~¼Ž¢{¦þMuº> ýŸ?i_~ÔžÕ5¿‚º…棧hºÍç‡ïZëLºÓå‚úÒO*â†ê8ä$I+‚AÁ5ÞWãgÂ¥Õ~h?¾|UñŵÇü6ç†WBµñþÀÔtÝGÄdº·šÍË·–´ §ódFEhÊ.sè±'Ç?ü~ø‘à‹~'ý ô½X—â6³áxmJþñõôë˜-´4ÐŒžM„ö°Ç ÂêVVŠ'žáÚ3#}SåZË•5Õ7R¿§ïcæµVo—™UN›¨·år·šŒªG}¯joÉÝ=3èoÄ_Ú“ÁŸ ~7xáߎ/u;OüK–æDº=ä¶—¯mo%ÄÈש·‰Ö(d.IØ ªšÕøñ¿Ãß´WÛoü-žþãE»¸¹µï4ë‹ Œ–÷[Ê 7’$…À%pÀ‚ ùÇþ j×ÿ·/ìgoó[<Þ6×ÐK H³ámTn\‚23‘F{ùöTý§õ_>.øUð‹öÁø¿ã Ã(±ø‰}m®Ï jž'Õ´ïÉgiluKY ™~Ëd²Ê-áxãpWzR¥;µ¯›ð7ßdÒ¾ò²º¹¬é¨Çžú{·ù¹/Í/EsõÚŠü‚Ô¾0ø»ãïÄ?|9пk‹Ÿ†´sÁþ=ÔõkuÔÝvo¼Jöðɶ³lÍP²Ü­|´IS&s#Rý§'2ñõ+ÁZ†|Oq.™£êëáÂcðÆ»áàU ÏpÍ|—±¤’n–ÜÙò&·ü¿â_ˆ¼uâσ¿õÚOIñ–—ñgÁ2Ë®xQµkÝb][VŠžçQŠÞY- Z¸x&‚†ÕZDŒ¨‘¢Ý4ßµWKK&ü®œ—à·]âÕá.`¨ÔIݽ—’v~Zzô’Òqq?J¨¬øÿAø©àí;Ä_ 5½#ÄžÕáž—yåìG¤Í2H§ûÊH­z¦šv`šjè(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ù‡ÁÿòZøuàm;ⱊûÄöÚ¬ZÅâ0Ue–ñc¸!Xä"ç ®öŠkM¿«ï÷‰ë¿õmŽ7ãìéðûö…ƒJ‹ãï|㈴+¯¶éɯèÖú’ØOŒy°‰Ñ„oŽ7. s^ýƒ¾x&÷ÃW> ø3ð£H¸ðdò]x~[/éöï¡K#’K6HA·v`š=¤ æ½^ŠºîûÊÏc‚øQû*ü0øâÍ{^ø!ðëÀÞ×"øáßuˆ:Zì¼Os Úˬ٨VP±^´fd]Ƈ Gs]Õ/vÖé·_=üÏ8ð§ì{ð›Àž6Ö|Kெ>ÒaKîÚ1‰á¿ø'ìÿàÛýëÂ>éW>¹kÍ"k?i°I¥NÅKKlÉ0¹(„²`«Ï½ŠŠiµktØ%ï_›[žà/Ù;áw¿ˆÚŒ>|9ð7‡¼W«½Ä—ºÆ›¡ÛZß]=Ã#Ü3Ïc+EHI˘жJŒt×ÿ ü=ªKûOAÑ®¶f†çPól£·KÏ&I²¿¼hü¨¶³d¯–¸ÆmQIê’{!¶Ûo«8_Š_²÷Ã?Ž^&Òu¯ü ã gA ºeþ· Úê:pc–K4lÑzí#5É·üëྉ¢é±ü/øUðå¼1ªi~Ób¸ðµÌãæº°ýÆ!“~×%@ÜTnÍ{5.)§ý´ü‡Ìî›ÖÝõüÏÏÏØ§þœß³§<©üKàÅׯ†[?ø?á‹è^/×ç†#ŸRÕ¤Ô',f íp©3 º¡e kø'_†k¿‰z/Š|m®Þi—þ´Kk‹Â~ÕþÎË+KçG>±£^\Dä²ñªƒËR6æo ¨¯W,Î1y=¬àçË=uå‹ÝYèÓZ¥mŒªÓfÜõ¾ÿ-6|Íñ[þ ÃyñÛñèÿ¾9üNñ†“ ¦â;-oÿ·I oqÞe åË*gÛ#„×5üçÃpü(>_‰*>k¿··‡ÛÀ¾m1®ç¹µ>òÌŸí•Ýï__Q^Õ8Î0ÔãJ•HF)ó$©QIIlÒT쟞ä<<%½þ÷þgÎþýƒ¼Cð»Â6>øgûB|\ðÇäÙiºg‡¼iih™'lPÅáÀˆ¹$á@ÖwÅ¿ø'çÇß >ñÏãŸÄïho"ÊÚ~·áßÛ_ºþ\ÞeÜ;dv¯¦h¬!ÅÙ•:ßY³U/~ocGšûÞþÎ÷¿]ÁP‚\ªöõæ|áø$V‡ðÿᾯàï|Oñ†‘á/ º¦‹gàC§êcÒâÝ|2oø5³àø&{ü(ø}qá/…¿~"øk·~oŸ£i^ð-žŸ7š6˾Ú/ ,m¼pÙ_˜uÍ}?Eo[Ž3ŒB’«Ræ|Îô¨»Éh¤ïOV–—zŠ8jp·*µ¼ßùŸ ÿÄ>Ðcÿ1wßþe«_ÇðE|RñUæ»ñ7Æš¿ˆõ½AÄ—Z†©ðïáíåÕËU $²ø\»ª«’O jû6Šë~$qš¨ñ+™&“ötÕù6vWïeØŸªRJÖüYñÇí—ÿØø¡ûF~κǼ'ûJøúu× ÜÁâøbïK{t•dd’ÞÏF·–L˜Ô"óón\£/ƒ?àÚO‡~ ÝøüGñáyÒï[ðöà¦t#ÛÂ0R(ö³®à#N›F>Æ¢²¥ÇùÍ $pT¥N4ã?h’£E{þï½¥=×,lú[KjWÕ¡Ì¥­Ö›¿ó?;ÿjø!çÄŸ[Züø¹o¢ê+©Z__Câ?†>¿Ó5uµµšÖÙ.m¬t‹A?‘È„þtqÿ jÁ]6>ÿÁ SÀ_u|Wø½¨j–ž&ºŽ÷YÒt‡^Ó<5u,_êd]*ãFºfQ´4À†}ˆHT/ßW£/8–x8à]x{5%%ûš×VkÞö|Ö‹I¥}VÙZ ‹’•¶ÑjôßÏÍýç~ÏŸ³§À?ƒ£ÀÓkº‹´(CAk«¥iQYZÕ>Ƕ—cil \í1ÌŽ Ú«Ÿ¥~Ât…zÇtƒ¿ tÿxŠánõM×¶0išŒêT¬³Ú¤B9$RˆC²–W^«E|&+WZxНߛ»i%w{ì’[ë¢ßS¦ Ù¥ì¶<·Vý†þ ëþÐô/ü!øc¨è¾¼—QÒ,nü/c=¾—u,žd·ñ¼DE4’eÚE™ŽâIæºÏ‹¼ñëÁRøo㟄¼3ãOÎé$šV»¥Á¨ÙHÈrŒÐNŒ„©ä8í]5ÌõÑ;;£ËÊM7A¶¼ðµŒðè¶²&É-íâ"™~RˆHàŠ½á_Ùá/~#ZxÇÁ ¾hÞ.°´ºÝ†ìíõ+k`»ܤBDo˰0\qŒW¢ÑO™Þ÷ª·õýh¾ãÈ4Ÿø'¿À=Åi¯hŸ>Zk‘]\_&£ƒ´ä»K‰Æ'˜L!ÞAörÂH¦ê_ðO/€:ÇÃ+jŸ>Oàí2ùõK= ü§6Öí×kÜGmäùi+/Ê\($pIì4RZ+-êî÷8M?ö\øe¤üY‡ÇÚWï[xêÚÑl!ñZ¢jÑ[,b5o~hŒ 6УÅ/Å/Ù{áŸÇ/i:ׯ¿‡~ñ†³ †]2ÿ[Ðmu 81Ë%š6h=v‘šî¨¡ëk;lyÿþø áåЗ@ø%ðŠÅ|.óI£ iÑ !¦9™­vÂ<“!åŠcw|Õ+öø# ü+Ö<  |ø[§ø+ÄW wªh¾±ƒLÔgR¥ežÕ"É"”B”°*¸< õZ)¦ÖÀ›NèòÝ[öø+¯øWCмCð‡áŽ£¢øfò]GH±»ð½Œöú]Ô²y’Ü[ÆñÒI—if;‰'šO~üq©ø–÷ÆŸ~kž417ˆ'½ð…ĺ鉃Foá&ãc*•ó7m*Æ+Ô襸¶¯£Ø\xjÊk}.õÜÈ÷Vñ¼Eb™ÚUÙ˜±$œ×¦ÑEô°Ûoêûýç!ð¯ö|ðÀ«j_‚>ð‡ƒeñ%Ù¿ÕßCÑ­´æÕnI$Ïr`Eó¤%›ç|·'žk;þ;áwü.Wø‹ÿ çÀßðŸI*NÞ#þöþÕiR$7[<Âë ’DvàŽÈÒAô (M­Pº5Üò)?àŸŸfâ›àÂ'ŽM_û}Ðø;N*Ú—#í¤y<Üò}÷ù<×kñ{àƒ?h?‡><øKÃ>5ðô³Gpú^½¦A¨Ù¼‘ÈæÕ²žAÇÔQK¢]¿¯Ñ}Á}oÔñäÿ‚xüMû~-Ÿö ×<àÍ4Eý Ñy·ÈÇÚ0Hó~þ;×G ~Ê¿ <)ñ§Qø“á‡^Ó¾!êñ˜¯¼Om¡ZŬ^! ¬²Þ,bW" „\ôßQFß×õØ,p¿?eï†üU¤k¿~øÅú߇•—KÔ5½ÓP»ÓCX[Í4lñ@'aÅr÷ðO€7ÿbð}çÀï„xJ óªÇ¢ißÙÑÞÚnÛÉòÄ¥r¥öî ã8¯b¢…¦ß×_ÏQÝÿ_wå¡ç¿ÿdŸ…%ñ³ðgá¿<'¬x¹‹ë—Ú>ƒkcq¬ÌäÝIjÓeØï'–cÔšô (~öâIGcáÿÃÍá7‚ôï ü,Ðô ø{G„[Øiš]œv–vQމ1€ˆ¼žÍlQE6Ûw`’JÈ(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ù‡ÁÿòZ"ƒÁúxÔÆýš;`ÁÆ Ýlòc¤Ú¹Ú{õaEo'eÚý¿®Ì%îRW´Uß{_™ûE~#Áx?à­ß´_ü¯öóðo…üñsB¹øoãèZ–ÞO Ø\k´7ѨÚ<äTRay9rŽ­’…›í¿Ú»âÆXjÿÙ¯á¿ì½ñ•àÿ…§ÝÞø¦âãÃuð}'N$ŸUC±|©®&¹³¶U\Ä á–<#TŸ¶„f¶rqôkvü•®ü®ÕÒvuS¥7N[¨©z§k[ÍÝiæ–í_íê+òGö1ÿ‚«üb_ø.ׯÙ÷ö¦øáÍOáWÃ-QÔãÔï4{=áTk'‰în ¢4»d-•V#q Ôÿ|Vð¿Å'ˆ~ø“@ñ..íšž•¨Cyfû~ö&‰™;óÅj¥8Ô[I_äûýÁ%ÉRtÞñvù«=>ó~Šà>þÖ >0øºóÃÿ >%xÅ:öœíÞ›¤x†ÒúîÕ”e–Hb‘d1šù«ã÷ü»á·Âoø)ŸÃ/ÙŸÃzž…¨øƒÄRÞËã Jâýa´ð”1ióÜÁ ’ÝK$Q,Ÿ‘HË¥4ùœb·{ e'ÛsíJ*´ÚÅ¥¾’Ú…ÅÕ²X$&á®ZU¬aw/œÇ9Î1ÍqÚ§íCðÏCð½î¹­üDð-ž‹¦´kw¨O¯ÚGkjdÏ–$•¤ …¶¶2Fvœt¡é¸-v;ª++@ñÞ‡âÏAâ k:V§ ]Aö¨u;K¸æ³šgÌY””dÀ'p8⹯ƒÿµÃ?Ú÷S¶øñÀ¾8¸Ñ$1j1x_´ÔÞÁÁÁY– ÆsÆ‹kn¡ÒýêŠã¡ý¢~\\I:ðsË Èò"ëVÅ‘cRÎHßÀUV$ö IéM‹öŽøy=¼ÒÃãÏ|=Ò~Kâ­Ǻ?…­5«mcR1$±µÕÅô2Û›®Sm¾ÙDÿ[óY¿àÙoø+OÄŸø*WìÛãøj¸ôËß|;Ôíl¶ìmÌkO 2´ðFv,êñK¹£Hã*èV%Ñ‹¯J=õíÌáÿ¥'½´ÔUd¨Ê1—WoŸ*Ÿþ’Ó?Lh¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ù‡ÁÿòZ9|o±òfðG„t¯‚þ’Fy{=4›ËÀìMÄ“Ù#c?5Ž 8ý6ðì÷áO‡_³Æ“ð³ÃÚ\?ð…hú~†Â@Å-Å¿–ÿÞÌc÷É®[öýŠü%ÿóý•|+ð‹à”š…LJ¼*“ˆ®oÝ^îîI§’ye•‘UK•ºÀWg4aV³‡ÀíËëg߬O»œ™Æ£)R¤¥ñ+©†êJ>v’V{Ú)\üJø9û(ü;ý¯ÿàíÚÿ´Ï…4¿è^™}«C¦ê*dµk”µÓâG’0Bɵg“²lnU#Ààïákÿø#'íÓᎿ5?„þ¹Ôü=öŵŒú£[É%Ä¡ ŠÊ)ciÚå`ŠÝÀu.v!¯ÚO…¿ð@ßüý´üWû@ø7ãGǵøãKkë]SPŸPÑ%ŽTºŒ! Òv¯”RŒ ŒÊ[Í~Á©ÿ>|ø›ðûDøƒñÂóÃ? ³ŵ0K«;>Öò#œæÆÍ2€Å£ežMÈX#'ºxodÖ®œcóSRù*²}잇|§]Õ¿ü½çZ}•­®×ník¶×?$¿kŸˆ:„þ ůøáÍï€týZi¾ñµãZXøƒÆÖ–wZj »« ]âÎ%vf…^ârë;¶pÛ¤ú÷ö»ý›þxÛþ øaáøÁš¿†¼Yá·Ôµ½&÷E¶¸±Ö.Ž—ªHgº·t)<¥â‰‹¸,Yç WÓ~"ÿƒM>ø§áÏô=sâßís{ðúáŸDÕfñdSO¥[’¬¶¶P½±‚Î$‘Ša[y%™¾P¾±ûWÿÁ½? ¿k/Ú7ÀÿµßülðÇ‹ü¡Úxy5 Åe/u;ketW¸½š9.LòG,‘É2Ê­ rOÌKµQFP•®ÔæõꧯòvºKWªV±Ç.Y©=éÆ+Ö/ü›³néhÙ÷=¾ƒ¦Ÿ ¦—kecýöaj–‰ }›ÈÙ´F#nÍ¿.Üct¯åëþ Ñû|*øÅ¬ÿÁKõ‰~Ðuiþxg_ G$mü>þf¨Ë%´+„Óìvá  R˜é·Ã_ ôŸ‡ÿ¬|ð¡d𖉣i ¢iLXÃèðG† J®›£P»w«®Tn 2ÂßàÛ߆_³Æ“ñŽÓá¿Æ/Ú1ñãI›Gñ„·:¦‹<·ñÍ+I,ªÍ¤ü’°–æ2ßݸ“ÛY8ëÓs«)GnI«õ¼¶-ßkés«8Â4ÔÖÓƒk¥¢ï%óZyÛSð¿XøÿãoÿÁ°¾ðÇ„uíRÇAñ_ÆOKÕ!ŽfâÎ=:•´Îx…§-+ Àg\žùû‹þ !gìÿ ÿ‚|k¿±¦—gàÍoû.Ë@šÛH·0ɨحՔ"Òà ýú:\ϳìO%M}ùðwþ ¸øð£ö0ñ·À=oWøão‡3ÕbñZøƒP±kŸj‘Åå ý:âÖÊŠfE[Ì2!XöìÚò,WÁßø!ß|ûB|<ø—û@|Cøñ³Ä4˜tÅã+«&³ðäq«™b³µƒí+Çïç29*Žré'zœ>´ª­”©ËmÔ)r5ë͵ôiÞëc†t¿pé§wË5óE4ýß­ÖÇä÷ü;AÑà†¿ðpuÇÄaðâÛÅÿ ~:xsPqáËm" •ºšö‚êÎÞ)@Æù •ÀÇînÚ0ì$ÿ‚\~Íþ0øGû[ü_ý>>xKM¿ñÅ]_@]{R¶µŽâÛDÒlXêZ‹¤ì‹"}¢ÉÒ(™@Û,ˆAVÚkú!ý®àŸ?m_ˆÿ¼Qñ®Ê{Oàlj—Å#E° f "mÊI„È–óR¤½´y8È64Ø+À^ý½|AûEéö·ð°|EáKoÜ1)öt·†c)•@]Þt€[ÆÌX–ñ€Í»›‡äRÕ+ÆÚ[•{Ð[j¹¯+굺:1Ruœœto–WþÿÃ'ë˪}ô×sƒÿ‚¨Ïá߇ðOmsÀúo¼ðGKñTv^²ÔµmbßÃözvŸ4±Åy‹¾g]9o 1¨Àd^Š ûþÄ_ ?`OÙïMð?ì{¢Zé>vþÐk”¸7Së3H‹›¹îI&guTÃghPªQUG ÿTÿ‚O|>ÿ‚¸üðÿƒh gÅš ¯†µ¬ÙÝèE?™å[—þ 5û<Ùj¾"¶×4ïM,7w6ºŽS•äiµ?;Ë{gŽêIc˜”iá4ãÌäç¢Wü9.ßþ·WÕ Úr¨½]¿«~Ný¯£v?gëÏ?hïÚŸÁ?²g„­uïŽ÷ú¦•£ÝÜ¥š]Zèwúœi+°TI>ǾQveUß´3£'Šüì×>=øçãŸíñ‡Ä7?´•ð—[ø#ñ*ËO‡C»Ô¯Ê.…äY˜¬ß@ŽEƒRþÓyfòî). ’ˆíØlE¯ª?à´¬°ÅÙv ŸxoœÌfÐ×VUB8ìFTÔjN F¯iòÙ§®¶–©­jÖ³uO–U^©_ËU{­WF·Õ4ÓO·®|2ý´>ü[ø¿ðÿšΣmãm7OMV}XÐõ ôÚ¹L‘_A•r@%7m'H~Ýÿ âÒþ ßêú橤X|,s‰îõ_jZu¾›&„b[‹dYäe’&T„»:ËPDˆ[çÛ'öBºý¨?iø£öyÖ­¼9ñ¿á6Ÿ j~Õ‘ÆD„j,ú}Øïmp‡i›'r—Gä¾|Eð_íÅû|q›öÑÒuo‡Z_Ĉv~×à2$3è:´V:-ˆo4çj%ýºíiG ´:íÍ{²¼-h*±r²PRŠiÉ9J YYs)FNËF¤¬Ýšo¶z/–ro’êû]ujÝn“q~©§m~¡´ÿ‚Ž|'’ÇÄ“jú§‰ôY|#cm©j¶z¿„5:ú {™þÏo"ZÏh³N$—ä_)šÈ_ø*¿Á/íÍSM¹Öücky¡OkmªÇuàÛ"K¢°»i,[y»C)PÀäW’~Æ:ßþ~ÚÚ¿ÀÛçÃÿo|7àø|Má¿5€MHéâþ$K]E[pó„ðG26âÙ·YØ‚?ì—¥Øø—þ CûeXk–öš…ÍÏ…"¸¶ž5–)TèÄtl‚LW<·IÕrRqŒDÔ•¤œá°ºøžé4Õ¬÷yÊ•8*—Nñµ¬ô×—Ë͵³µ“W¹ô·ÄøG©xbÓâ6±m¥\xËWAÑÒPÇí·¯’$ €B–X_°3…ÎæPp¿hÏÚ·Àÿ²~ƒ¦êŸoõm3OÕ®ÖÂÚ{MPÕ®…H˜ÙÁ/–ÎÌãyárAñ¿üáoÿoŸxü| ðÒk1|#Š-#ÂZÂë©búg‰¢–ßP»º‚6‰Äåv6€å ²ÞG‘¼•µûOþÓö¶ü+àÏÄ[ ´ú׎ü(Ú…¸8þϾTŠ;¨yÁ%I$W¡¬pÙ=:±ÃJM¾iÆ3I«ÅNÜoº»Õt°þ­Ù½UöÒJ<ÖòÓK=oô±÷Œ~*èþøeuâÿ^-ÊÌ_Oåh÷—‘B@$µœQ5À*Y|½ÊÜ(|øýáoÚkᥗŒ> Þ_ê>Ô²m/.´«½;íJ1ûÈ㻊7xÎx)VçàÖíñoÃz„õ jº¥¯ü$>"ðþ«-–ž¹’i"‚ÑÚYYT‘.QK¶tˆ¹ÜÊ”Á>>0xoà×ü¿àιñ+W¶Ótè|)¦ÀÉwšWTŽ8brÒHîÊ‹‚ÌÌןOªa§UF\ÜÐQìÔ¹úZíÞV}ô9Ü¥umýÉ/ó>¡¹»ŠÊ0÷’dz¬`»˜…Uç¹$;’I_ÁOõ? üMñÀí x¾x[Lø·¦éZõ¾‹âytùôÿ;O»àÚ̧˅ãf*à6P€ç>eà¿Þxkþ ¥má-WâÄWàÖ·¨´þ¿:æ£-œ¾#ŠÒ9ÃÒ_ƒöÂ9Zè.>yBÀ]ü¹cn¬.Lñ4UE+>YJÖ{FÛ>í;«¤´ßTiõ{ÆéëËÌþù+/üïk+½“?E¡»ŠæIRÞXähË”+clÚØèpÊp{{×Ï¿à¨ÿf¯j>øªø¯4y>Ë>‘á-WX²²»û/Û>Ç5Õ´‘GtmJÏä3ØèØù—$‹ÁÖ~!µøIáïx–âY!CÓ.ïõ”ºšK”ù­C® 7 «D'2#+ª°û'þ ¯¤ëž½ø›áüa²ø¯k¤ë_évñ_^køBÖêé¦Üj÷rI-ë|žr‰¤iÒ9ã/òI<±÷ܬ´Ó~k—窒iê´’m4¯Í7Ê⻨¿E%MÓO®±v³Óê:(¢…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@Q@Q@Q@Q@Q@Q@|Ãàÿù-)ÿ°Õßþzúz¾aðü–ÿØjïÿG½{äßò.÷h¢oùû´PEEP^IûjüRøIðÇàŒëûhZé:¿ƒõû˜ô±¢ßh2x€ë· D¶‡LФ»}±<›'*±;‡­×–þÖ_ü û-|;âƘìãH˜iú9ooõ ²!†ÊÉæeUšáÊÇ’è€e¤e]—:²PÛíùþ}¼Í)')$—éøœ¯ì©¨þο¶ì—¤ÙkBø}â„)x>É£Ûxv+];O»µeúl°§Ù§ŠdI¼HêÁX†½ðŒŒA¯’?àžÚ¯€?f߃5¿øñáÁñ'‹&þÏ^øŸñ·â¢èw~=ø—àkýSCÕF‘uã-/FûBY\ÏqHZ`#hšâ›Õ–Uó(øuáÛÚGý€§øÃñ âŠ/×Çž4ð¬úÜ^2Ô,®uHtûM~ÞÞâIm.#ÝuåÚ¢|æV‘YØ;×–ê-KFã÷Jí;w×ï“ù͵ÖÊWíxÝ[ÓÜû’ù~ˆ| øÏðþ ð Wµø}¥Á⯇¬WD¾Òõß ÜYYÜ#[Ap°›;ø#ó"ò®!þ åz©ÐÁ8g‹mTÓ-þ|NÖã·‹Qµ_é‚ ô·ÁgO#l‚-£``B`mÅ|ñKöˆø‹à?üVÓ¯¼yãwBÓÿj=+Á×ðÅ­›_Üøz}+N–];HšÄË,æfò)î_Ì;ÕÝ"ÿâgìß်×Å¿ŠŸSOñ_í.¦Å¯ø¸\ÿÅ'4:’éÖ7ÎŽDï(·³ýªI®7²«2³´þÑÒ­âB‘Emsåù¢#2ª¡C0 ¬ŸÚÃö8Ðkë Óâ£5¥®‡$ÒÇðþ…«Ç3ÈneÕôÛÁP„–HvÝ» ·óŽÿ㟋|]àk‹_†_¼a¥Cû\§Ã¸/4ߦ¡4º%Ђ/±ý®ég‘•ÉåüÇ [;ˆá¿õï[xûâ>™?íO«x_Zýš¾!Xø~ãßꮣ Ç§“ö‘G¯.¨ÒÍ²í¡’å¥”G|ˆ´ðxšŠtëRÑ»5¶œÑ¥&ìôm{h_«÷š»I6å,,›†ñº^mJ¤ùû9Zú+Å;^ëèïŒß¾ÿÁ2`±ñ·Œ>,|Hðž%º‡ÃÑj¾øUáÛÛ›™edXm$}+²Ⱦcˆ‘Lpª¹l Òø7áO‡¶ÒøßÂÞý ¾$k·Ö·¶÷¾/ð¿ˆ<á½/TŠãl_g¸Ôt­KÃQ\VÚ.YbÁÇ´£ ÿóûsþÅþºÓìuFø«àÁeqOkßÛvÛh–HÙãVÁeWBTO#È?no_?d=WÄ´wÅÏŠ¶Røãâ©á?…ÚŽ¹á}þý;À¾Ÿ[‡ír·77nnÎàÝÉ!òÌ ¢¦ÐGU<ßZ¢sjî\‰òÇGh8ÝÛny+ö^÷K=ªb'z6¿*“Ñl¥$útŒn»½:ŸSü!ÿ‚nÛþÏö—°| ø©ãé:Évš'†<`·, …2¼>»° =2qU|ÿ×Ñþøò|?øâ xŸ[ic›SÓü%à›;ûöre‘Zhü<²HX¡vœí,zf¾Yý¤u‹¿hŽ?¿e¯‰zËáßø£Ãöž*ñUë\Xê7ºäÖ÷:> “}ݯö½›Ç’gh¤˜žÁÂh´÷ísû/¿ÅM[ã?§Ð'ø‘¥øƒDñÄ=BÞûAÕ,f±˜ÙFÞé ìP-ä¤å‹Mn±¬»¶6†g‹Ä7(´ù“½ã¢µ¿»­•¼ÓvR4ÔÅ86§%«]·\Ëð»×všWå—/´øwÆßþ|J½ømð÷ã_ÅýokRh÷CøQ ÄÿkO¹F¾¶ð¯Ù.Z+™Ö ØÈÂ6Þ­^ø#¯$ðìz<ž$½m&–¼ŽÈøÀ†Ù'eTiDðŽmUKc$*Œà øßösÑõo_ðN†¾&øEã߉n¥«~Ññè²?Šï/¡Ô¬ßÇ—v²Ã*\É&Ï69ÊÑÞvbÓ4™9íü1ñ^ðüÜ|?ñ·ÅO‰×¿õí^Y|3y&¯©}“þø,ã’_ M~×&9­R$½XöójÒ?“,,ðù¶&mrÍ]·¯,uå…9mgÒv‹¾öŽ«ëWV”¦ïµÞËù§ïoîÝöW{^ßGiÿðHoø6Îý4¯ÝiVúÌM½xÀ%ôO*0‚P<8ˆÒ$GcdTã RèðGxS]²Õ ø¥ã3ñ_FøÜ<'sá¸õ¹nôI¬Äñé) ¾7[±6A2ÜûYvó~ч9ªÖ:³·´ÕË—áŽß»I½;Ôµ»-Û|¤ÖÆT¤µ–ñæÙÓÏÒ“û×Kµö¯‹¿à™Úíu¨$º†ûVŽÿÂ~ ¸]Râ ·ü>D®ˆ«>JÅS»ÿ‚Vø~ÿÃÖšEÿ“§ß¾«ke'‚¼Öö×÷îcŒøwjLØǹªðS¯‰º‡Â/ˆß²ö§£x«T𽞱ñ‚ÃÃÚ·•ªÉgg©ÙÝX_“mt›Är†š m¡ÁmÀ#{ù&ÓãgÄÿü#ñݧì½âýS℞ý¢uÍ:ׇâ5Þ›ªøÃA´ÒŒ‡Iӵő¦ŽH¤&éP̻Ť¨Y†äliç«>V’Þ‘Žœ®”[øz*‘ùEöASRšŠo{[EÕUïßÙµÿo#ôOö|ý”ôïÙÿž,×â×µë¾3x%ÔµGEÑ,næh¼Ì3Ë¥éÖ9>g>y—Fݹ}Õ&ÿ‚{ü¸²ñ µÇÀÿ„mâéÒç]‰¼§Ö¥GiKµò1;+»°i7ÌHäšüÆðWíi¯þÜójºÃßÚ\ø7mào†ñ„5_ë×Z>®…MÒêzΧ S%¾²Rke¶ž;“-²y[ÕTÊXþ†þ×_¼uûRÿÁ9õ[Ù߯úç†~%j^‡Wðö½£=΋$ÚŠÀ³F¯âH¡³E*îE—šóªêU©ötÙl›Ž‰väz[¢µÝÔsŒj±\ßµÙ^ÊÛ¥¥¤µ·}³—g§þÁ_4‡×Hø1ð¢ÑüO§#Xh<%§ÆÚ­UAmrVf„*"ùo•¨Ç»„üû>xßü'á¿xrÑÞXt½ M‡O³‰Ý·;,0ª fbI8É<šü¾×o_|eýŽ.?h_k¾;øqàïø‡Á? ®Þ¥p¶¦öÞjq%Ùe†qqu.›ö—MÊl ÊA¹­û~|VñÏìñ㟄~üUø‚¾ðž•àX]ê>'¼º¹ðÍÿ‰ŽŸ{hú¤ò¤´¸´ŽY R̨74~XQ#I΢¦žòå_r—ÝË$ÓÙ»­õ|÷÷9­­“·]_%½y´kt•ßcõÆŠü•ý·ÿiŸøjÛÅþüjñ^Š¿ ‚õm];ÄK|4Yî‹}ºþÓç,9‘KDü€_”ýaû]\x«þ ·ÿ«øÉâ/„^4ñ÷޼SáÍ/T×ìu¿^G¬ê:sÏ!vuÌJ ¨‘äŽBŠ‘?(Ås9¥RZ+_ðOî×wÛÌÚ0çœ`º»zzýëE}Ï~ý£?io~Ê?Å_õ Í/B“PµÒÅ;™u¶âêe‚u¶‰Ú5y]Ìp¨ÔÞWä·ü/Oð=¿ìYñÿgïÚ;Å~;Ñ|acà}i4ëßÉâq¡3ø¢Å¶ã¾»’e´ÀKCåÛ“i+GT#h¿Ž¾=ý‰þ,|ø}á‹_/<ÿ Ã9/|C¯ë‡SÔ|g¯_ÜYëÛÝ܇¨ñÚÄȸXíÚä´IÚFÑ…ÒOw.UÚ÷Šû“m·ÑZé;¥œZ”\ÖÉ]÷¶ÿªVî›»M_õ®Šü»ý¤u‹¿hŽ?¿e¯‰zËáßø£Ãöž*ñUë\Xê7ºäÖ÷:> “}ݯö½›Ç’gh¤˜žÁmàÚÿĵOÄü—Æþ=ø(&Ò<\n,=|Sµðï‰ÿj/ˆÚ®‘kû9j>"ŸÄ> Õ¤ðæ›¬jÖ:™´Mb/(+„-%ß‚)‚’¬ÐJUþ›øÍûaøóá¿ü1¾6øîMW⬟.š«¶áåŠáæ9i£)˜Þ4Í*UÚiû²Ñz·I'×GíVÚÝ;]Zõˆ±‚•õºû¹j·èÓ§×çg{~ËÑ_’_lï·üáž¡á‰:Õç„W§®Þv‹jrQ·WËŸðM}'\ðïÄßø¿ã —Å{]'X‚ÿK·ŠúóXŸÂ·PïM6ãW»’Io[äó”M#N‘Ï’H‰õ/‚þ"øÿǺþ›ñoá£àM/ý«ÜxŠÃQMc”]Û;IäOÞ€@ë*ײÚêúôÒö}.¶Ñ»½®f›³o½¿ëg¾Ú-ìzùƒûP~Ô¿?fÛïÄþ ñ8ñ—‹¼â#¤ø+Pðωî%Ót}]|8L~×¼< ©Yî¯Rö4’MÒÛ‚û>Dñh¿k¿‰Ÿ ?b Ú á_í1¥ø£UñÏ»›Ëß‹«ßO.°‘Å%Þ¹ Œ­$Z?öyi„¶ÐÅ o.'Míl•[ÁÔ·º•ßK^.Kåe¿œ^°—1n6œißÞ~¯NnVô¾Ï§”—Çöž¹/üsð·‚þ&ø{Áºþ¨Äþ'†æîÇO† '”[[¦é®§òÕ…½ºfyJGæKaŒ’"·ËŸðNhõ ü{ñ½‡Ç½+⇃ügá›/较]¿ñDÚ0ßå¶ 5[Ée’8.Ëü–ÎÊ›¡À¡c”/=à~)|cÿ‚€?/5x5‹K­;Ãö—–:”ún£a¥Aá«[ËX­ç·t–ÅÕî¡(da¹¦—$ò(­QЄ§(íI¯ð¾_?µo•ïË-E{iÆä’ÿ·•Óû¿›VoéÙ¿öÜø}ûXëšÅ‡Á;Ývù´kK]Kí7ž¿Óìõ+£(¶¼±¹¹…"½·—ìò”–u!AÎIõªüšý‚ã’ÿBý‹~ ê¾4øƒáï‡ß¾Ëã EŒõK­{[‚ÓJ…lí¯–´ZÁmm-ÅÀ³´’óó*¤W?ðׯ_ÿi_ü øoñö‚ø·¤é>#ñŸÄ߇SëžÔ-t½Cĺ~Œ.Eø¸¹k´òvˆÂçÉ'·;uV¥É9B:Û›çË7éï-7º|ÝÒÎ2¼TŸ[~0çû­~Özk¹û E|MÿBø¹¬ü#ñìãðÖ?Má? üFñÖ…®ø‡PÖ®´‰µ'ƒL•ìì¤Õìš9¬å¹¸ þd/’<"0vÈê~`ý­üMñà¯ì'á­Köøõ⌿¾xÇSÒm,´5)í;üZ½ñ/Ư٣ľ2Öå¹ÖbxmõkM&îÒçO´X…½›Göéâ&•¥EVy7HÝŸ'ñgÂߌÿ  ð÷ƈ¿tÏŒß5¯øÓLñ»ý¯eo-¥•ÙukHþ倚[Ùa"±Ë´3«=gŠr «E|PRôºö¯îµ)>ûi»N„UYR¾Ó…é§ÿ§¯½Ÿ’¤ÿþ-è?~xgÇ ®ÞÿÃ^0Òíµ*åàxâÖâ%–'1È¡(êv°gMðGÆ?|Cñg‰t êMoÁ÷)k«ØO–×6†Eßž\ª¥á‘CæMÑ¾Ç Ä£üoý›>(øÏãWÁ ü6Ó¾=ðŽ•®øbVŸM֬ῴ‘£hÚHe@èÅXRUÁŽõùkÿQð¶Œß¶í7¨x«Ä~ ´žËöT¼½ÓlŠo-l%¸šMZÕÓìK:Ã:²¤?ºddó6É·Ì!«ˆø­ñ·â'üÓÂ2ßü ø­ã¿~Ì-ãcׯÿ¶­´-BÒóK¶V±² a¶D¶Ônà i ý•ÕÈf¬)´é9ÏMíÛÝöͦüãJþMÙÝ{Ë¢¤9jF~¿5FÖµööº÷¶šèÿdëÈþ2þÜ?þüTÒ<ãÛýnMW’Å/@¾ÕcÓõɵ²’þ[XdK(ç$Ž7œ¢±ŽL#áðNhõ ü{ñ½‡Ç½+⇃ügá›/较]¿ñDÚ0ßå¶ 5[Ée’8.Ëü–ÎÊ›¡À¡c”/ε業~Í?µŸíÝñOàv­ãñÇ~xsÄ,oâ;û«;9¥Mq$•¬$­æ‚ß:[ÉÇe@Y²¤ý’R¨¬­&×_v÷K§Ùzô[¤î”у¯xÇvݽçŸþL´õ³jÍþŸ|Pø“¥|øy¬ø§ÇM¨& Z=õëØé×:ÂBƒ,Émk“J@íDc€x¯6ø7ÿø]ñóâ…|-ðÇXÕ¯5Ÿø2?èÉ>ƒio}£H` qÌÐ,,Ùº€4Ä_çU¯’¼O­k??ix{à×Äß|@øsñà·‰uýnÓ^×fñk=½‰¶Öm§˜³Z-ÇÛš6Ž'Kf,¥!Væ¾fÔ~7ø·ölýš¾øóàP#ÅÞýˆuGM”@³ýŽE—Ãßé>[‚¯å.év°*|¾Aùy%.}•ÿâßûÔU¼›½žÎŒV"1pzÊÛùºVÚý*;ù¥k­ÿmh¯Î]ÁÞ$ƒöªøuð×özø×ñ;Vð_íð‹]Ôïï®O=øñUî‡/ˆ¢„iרÙÇ:@ìn‚y þd¨EÑ– €MuÕùÉûYŸüøúþð_Å¿‰cMÒÿf_êq\\ky—TÓfÓ#‡TiKÉtÛä-$¬ÿë.ÝÇ<ìëã?ˆßNŸyáÿþ.×uÿˆ?²”ß%ÿ„ÿÄ‚óLÒuÛah Ô‚Ì<«8@½+!DDqù|ÇÜæ$¤ì¤ýy]w×ov„¾mmwm•9JpŠVæ¶ý/ìV¶óªžÞÊÿªôWç‡üBÛâÅ‹z?ï|Qñ†‡:—à òÿBñŸ‰´šçÅwa¾™`¸’[ˆ"XÙ„q˜-ÃÎvE¸:Ç·û[ü3Ô¾4ÿÁE¼[à¿|yø­ðãÁRüÿ„l|7â¡®y£$-¨Å4j²¨‰6p\¡Ý‰F*^!,4Ô$ÿžÿö✟ޠÜvºi»_LhËÛAÍ-=ÏüÁ/¹Í)Zöi­l}éE~|bÿ‚‚üVñì9eã[Ÿ‰(¼#ð/Ãþ.¼–ãÄÒø?KÑ®®/î>Ï©-ØzûPX­°žØZªFÀ̆çÉ“èOÚÃâÅÚö¾ø³á‚><ñÖŸâ]OÜxQðŠÒËBÑ,¯¶"Õ iE¬×FµÜ…¹ŠåÄMhbP΋&Ž“MGûÒ¥¤ãù«¾Ë»Ð§¤TŸdÿ¾—þeóò³ªtWåF³ñÇh‹ú”ß´UŸÃkàÄ«-+SÕ/ÝåÐRÞÌEm6ƒ¤›j$Å.LR\f۰؉^ƒû|wñ·†ÿà¤W>ý¤/Žß;´üôkutù¢î®íú-Ey~£¥h?ðÙ:]õÇÄíVßÄ£Â6ðü=ä e{jnágÕÎ9åÂÀ.Ø«)Le«Ô)­b¥ÞÿƒkôùmºÑµéø¤ÿ_Ô(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+æÿÉhñOý†®ÿô{×ÓÕóƒÿä´x§þÃWú=èß&ÿ‘pÿ»EȸÝ¢€:*(¢€ âþ6~Íßÿi]ÏMý£|à¿éÚ|ÆæÖ×Äš%¶«´¥J#KˆÝQг.àÁ#¡®ÒŠM'£n.èó? þÅ¿| ðÖçÁžøOð×Eð}棯q¡XxfÊÛMžö&‰âº{hâ´ÈÐ@Ë!]ÀÄ„”cÓ(¢©¶÷þº~Id,øéû |ý§¼Gg¬~Ñÿ ¾ø÷VÓâò-ï|AáËMFâóŸ,I4lÛ2IÛœdô­Ïˆß³?ß‹þ Ò<;ñSÀ~ñƒá颹ҴýGG·¹¶Òå‰vÅ%´n…atRUY•]½)$¬¶ßçÜ«»óuÛäyÅ÷ìsð‹Sºð´ú—¿‡xÏû;ÃrKá«'ÚíÙäX“m¢ÛòìjãŒVŸÿíýŸ´˜´(ô¯-£ð½Ë^èË‚ôÔDìêí5¨~âBèŒY0IPs+ØëäÛçâ¿Æ_üSÔ-þÜü@°û7… ½ø{aá¿.·¥xëÅká6•âKÃcsý•§¯•¡¨¸3é@¦¡zßko$½¥)4ù“מâò*~Ú¿ðH¿ ük°ðô¿³?†>ø:}?įâOhºïëmO@ñÌÍisn‡V·¶’ÚYä„ÝÉŸðú÷IÔüEm‹´›_‚Ú§‡<¢ê*%ºIk{öÖÓå1¸ž}ÒŸ-Uªþ’WçOÃÿÙ÷ǵ/įÛÀž ñ¿†|%àÿxçû7^ó|=&£«¼2i¶‹(¶˜ÝÇ ;ãÌ`¼2;˜àO*Ãa뺫ÚŒb¥£·Û„–]Õ–èì§V\õÛÑ¥^fú;½_kÝß¡õ«~Á|K¢éë'Áƒú†oxu›|#§M W/†7Q~ä#p|ÅäñÍtzïì©ðÃÅ4߉%øsàmCâÃaâk Ö]^É0UŠñ£2 Ü ¬0€êkáoêzÖ‰ðOö“Ã_¼gàÏ~ÌžF›à>ÓZx-´Ý6ÇI·šÑîo¾ÚâpÍu»†{6ŒjÇñ¯Æëû]èwŸ®þÄøÞ{Ïkĺ¼pxïTV‚FÒõ"­Gt>ÆÅ¢q˜„dî™yÞàúÄÍcÆú—Á/Ú$xcâgÄã|YM3ÀÈ5kƒ&«3ÙiŒ`¶xƒÁ3K*q·Ê ódcÓ_"¡F¤ð¼íÊîí«-** »{ßtí²{ qÂZé«Ò×s_-avï§åõ·Šÿf/€¿ÿg/éÞ%øiðÛHøceöö»¦Â3jÚl‚Ê$u¸šÕb++ì[ VeÆTÕhoØÃZð妃ã_øjü8×G–ºß›û]ÂZ¬Ì{Ïs§-µŒîÒ‡óб6NàO1ð‹Ç°þÑ¿±GÂo Gâx‡Ä_üZ¶þ4X¹¹šãG6N÷ÚÖœÐÜ;5µ² 3§¤gø.bf.Ò|‡ÿ³çÿj_‰_¶<ã øKÁÞ'ñÏön½æøzMGWxdÓmQm1»ŽwǘÁxd*w09ÀK*¡Nua“Nïo†tá†M¯yò»}”D0Ô¡­VÓNÏѹ-¬Ýï]yën¿VéðOOÙÚ_Ûi:'Àï‚ÍáÃzºÕ½œ Ó ‘º(nÒ5ƒgšP(»h8­›ÿ؇ྫá}?CÕ>ü/¹ÑtVMvÇO—¶/kg¨Èr÷±DaÛÓ2€äõ5ñGŠõ=kDø'ûNÉᯈÞ3ðgˆ?fO#MðNŸi­<Ún›c¤ÛÍh÷VC÷7ßmq8fºŽ]Ã=›F5cø×ãuý®ô;ÏW4oøïW°Ñ4ýGÃ'»¶µðæ§q ¨—AÕ4}ê"-,Ò^%â•[ÈýáPU0y,¥Í:u/hó.®XJ6×VÓ]l¯îófð²å¼ÞÊWõм—ž’é¾­«]Ÿs|Tø;àÚ;Àòxãg…ü+ã¿ Ép²É¦ëZt“M œ1†ed.ޤr25“ì‘ð®Ûâÿü,o†ÞÇ{Ò_øHWBµŸ˜´ 'ÚD~fõ†I" œˆÝ¤ŠüÙýšümÿwì«û+è±xÇÇ7>ñìzÝÏ‹ì4]®¼.…¼Ÿe¸„­ÊÍmg‘ÊÒ$/~l‘ïWg*Þÿ‹WRþÊÞøåñ«â–‹®üNÓ%“Ãþ'¿Òlocµ·ñB#‹Qk%YQâo’Ft.ŽÄºôbC5ì*û“Õ_ª¼ÖîÉ»Á­m£MÛÞQµƒæšQ—T—£»Þ–ÛÞÉ&ô>âñ7ìsû5|+øâ]Å? ¾ èÿl˜ø›]ҥ𮜚RøÄ9ðv™káß˪ø"!pš}Ìna²76Ãí­GŒñmÅ{‚þxcá¿Ãû_ ü;ðæƒ xVÆÝ­-´m;OŠ×O·„ç1%¼j#T;›*O׿?Ç}Eþê¶âþÏßü[¦jú%§‚¯lï—Ä’êzœ+$m‘ý®í¦œÇ‰³Ë’»× »¿|[ðÿ]ý¦ôÍãÆ6´øiðòÇÇz*7Š·V’Aæ‘Q\Âͧ#}Ym€¸|D?w媹6“KFJ/TîÛ…9Km7©¢»ë¯WP¼“„­µ¯çÈ¿9Çåè¯ôçÂÙ;öcð¿Äø+àßÁO…z³§é°[ø’ÚXÁyg}»ay…²Çu¢Ê­g¬q]f›ûüÐ4»«Mà·Âk+;½¼;q>ÓãI´Æ—Îk'  neýáˆü…þb3Í|Kû^|`øƒ¤øoö—ºðßÄßéÒè¾ð>¹¥Ki¨,+¦Kysr—+l#@±¬«Œ‘–8_˜…P;oøÄ¿|OûH|.ð¿Ä/ø¦÷_O i}sTmJ÷EÔuáqg<±1æ8ÐGöÃ…Ž5ö"-g<Ž^Îñ¨®ì­®­û4õ²Òõ~뮺å"’U´t~‰ªm¿üš/徉¾¿[ƒö#»²ÐÂ|)øcâ;ψ´¹²Òt…ŸÛ:¦££[ùbÒIl-ldlãò!4±¬cÊŒ'Ý\zoìËá¯Ù»öø—¯üYýœ| à9¼u£j’èÚ¿‰GƒK×­¯D¡šk‹hîD‚)cGÏ#”<«(ñø&î‘ | ÿ‚€þÒ^ñøKáGˆ­ôâ/ÄvÑþ"j¾¿—rßE£ïµÓ漈‡‚iü‹(É’m‘ª]ÜÝ|UP¡ÎÛŠš“jÖ’RwJ=Ÿ.Y­•즦 Ê/ÝWwÕZ1æíÙ{ºê­òö™?`ßÓxšãZ›à×§Ö.õ”ñ÷Íá;s6¨…Š_4¾Næ¹S$„LNð]ˆ9&¬ø_ö'ø7àk~ð_Âo†ºG‡|Kfºv¯¥ÙxfÊ -NÕwí·¸" ,C̈ØÛæ9ø‡PøÅã/„¿´e‡„oþ"x®÷Â> øõ¤ø[OÔµjr×v¡¢Éy6—{pÌè†!U§ó&‚—;°rî~-ø›Ä~šÓÀ_|qi§/í6< Õ—ˆEìϣܬ(-ÅÍÀ™ÙPïòþb7ÈcÑG‡êN0Q¨¹d¢ÖŽÖ—%¯çiÇMmªÙðRrrok»ÿàÇ÷þíüÚ>òýŸ¬¾|&ÕõÏ…³o†´oÃà„·½¼Ñ´mû+M¶ûo™"<^\IŒþ[–òË~ö ¯N¯ÌŽÿ|qûüFø‹à‹‹>9Ô¼1`ÞÒ.ô·šßsï(e߆–ßåñõ¿ÃÏÇã©æ2ø‰t+QªË0‡ìâVºù¥Ä?º [!>Líâ«ü7ý‘¾ü×|Kª|$øià ê~3Ýý¿w¥x~ÒÎ}os30»x£pY݈rr]Rkáãðá–‹á§×üG⃢Û-·ö¶¿yöÍNûýåÌûWÌ~yl âºJð*F*N1wJé?/N—ìp­?3‡øû2ü8ý˜4+Í/ölðƒ>麌ÿj»µðæ‹m¥Ãu6оd‰(vÚääàÒ¹ˆ_±—…¾ |r¼ñ¦¥m§ÜEâ |3ãM QÓ¢Ô4¯iñ4²Z-Ìü¢kyf›d¿01Ï4nû¦‡×è©zïýioÈq“…Ôzÿÿ5]O-¸ý‡~ Üü0Ò¼ÿ >/ƒ´+ÿíM3CÃ6QéúmÞXý¦ÞÝb Ùv>bß1ç“VÛö9øDúï„uGøWðáµ?[Ggá{Ãá«#qá¸#ÿW„žVëT_áXŠØW£ÑO™Þ÷ëž×õ°žªÏÓå¿æs> ø7ö„ð5dž><øSÞ4ðÝÛ¤³iz曡g+£FhfVBÊÀqFEehß²ÏÃO¡Ëáÿ‡>±—ÃTºŽöú¤m¤éÒŒIglV0a·qÃD˜Fî w”TÙ_wå _úü=O"ÓÿàŸß´7@²Ò¾ ü$µ³ð¥Ü×Ú%¼>Óã‹H¸›o›5ª, C#ùqîd¶ÅÉ;F!Ñ?àŸ³÷†P¯‡>ü°S¦Ë£oàÍ6,ØÊÌÒÚ°Ü;I#4_u‹± ä×±ÑUvÕºKòÐ6×úïùê|ßñ÷þ ¡ðÃÅßõ} àÂÿƒžñl~¿Ðs'†ão XlÐÈ%&É|œ[“"«þïoÌ¡ºŒÖ‚f»=ö†ñ'Åjw!ñf±fº.™$ЬPxsHW}†Î1’<ÙTM<¬KÌëvÇ1ÇétP›O›®¿ŽïZ7Ùµ³aÑ®öü5_޾ºô<÷ãì‘ð§ö‰Öìµ/ÚáŸÃÿjm´¶V—>!ðõ¦§-¬ŒKo;Ö¢x5Ûø~Ò-^þ7 &¼XIJ+PC1hÏA]å_[ü¾[ÑYWáØ_à§€|)¯è>øEðËIмUl,µ:ÓÃQZj¶áäAq ŲXƒÍ3Ø +2Ä”ðWì)ðGᯊtÍsáÏÁÏ…Z·¢Ú5†Ÿ¨i¾°µº°·;³ 2Çhã>d™E |íÇ&½VŠm·«þ¿«ƒ×sø-û+|1ý›å¾Ùïáç‚| ú’,WM è–Úq¸Ey$Do%(¯4Πi\€ zH¾øz+ÉÐtdò5Ö#Ûeòï_~û¥ùx™¼É3'Þ;Û'“[TPÝÝÞÿÓüÕÆÛw¿_øoÉ´y¯Ä¯ØËà÷Æo\xㆾ+ñ Ý‘ÓgÕ5Ÿ Y_ÞMjASnóÍ;DA#a;pHÅyÏíÿÅøiñGàOŠü9ð'žøUã gÂW>Ò<[£x>À_è3FÑ›x "8·+$ŠaGŒmvÚTÃé *\SN=?áÿÍýåF¤¡%4õV·ÊÖü—Ü|mûÁ+áýš~2Yøóź'ìÿáÍkI±žÂÒ?…__Â_lI‚«ÿhO%õÃÝ …a5Wػٵñ·þ ³§þÒ¿ðPo‰¿´o‡>üAø{cáðͧ‡|Iá„Õ/,§[–ºû|S\³˜ŒkÊ`—$m¯«è«æ|ñ©Ö7·•ÓOðoÒút3I(Ê iZÿ&šüb½m¯SÎ~$~Ç¿ >2x©uß‹¿ ¾ø§[]1ôEÔ5YÞÝ ¯h%–&o!„’vì1óügñ þaŒ~7xÖù¬ÿfÍgÁ/»…¬—Äÿ#Õ߆ߦžK²·˜iß±‡Â«_økƯÃÿk>;ð–Ÿ›¦x¯SÒ-îõëx¡ŒÆ˜¿‘ Û¶³üÁùÛûƵ<û.ü4øWã›ÿü0øyàx“T{‰/5]3Bµ´½ºk‰· $ÑÆŒ²*»’rì¡›$]ÝNmÉÊúëøï÷õ1PŠŠŠZ+~}Ý 9þxnçâ-¿Œ.|?¢ÉâÛM=ô˜5¦±ˆê0Ù¼‹#Û-Æß1aiÆie¹E+Eeýuüõ-ë¨QEQEQEQEQEQEQEQEWÌ>ÿ’ÑâŸû ]ÿè÷¯§«æÿÉhñOý†®ÿô{оMÿ"áÿvŠ&ÿ‘pÿ»EtTQEQEQEQEQ_ ~ß?þ2øâž¡oð>çâ‡Ù¼)ïÃÛ øAu½+Ç^(3_ ´¯^Ÿì­=|­ EÁŸJ5 Öû[y%í>¿¯Îok>xßÅ7þøáñ;À¥Ž¢4_kpü!ÑtK{K§ua¡© G e™‘‡( ¹XOèÍ~tü?ýŸ|qûRüJý°| à¿øgÂ^ñG޳uï7ÃÒj:»Ã&›h²‹iÜpþ<Æ Ã!S¹Î÷r9A:ʬ­ÞßÏëxO¤›Ñn‘Ý…äP“¨ì¯ùô³»VÓcÞ|OÿÜÓ>+xÇMñ‹þ*xÃÄZõ¬P›fëà º¹XÑÄÐùs·‡ËWĉƒ…l2àóVSþ ¹mÄÇñ¤¼j¾0’Q;ëƒÂ¾ ‹È"òC›ŸøGüÂÂ,Ç»vv¹ÇógŠõ=kDø'ûNÉᯈÞ3ðgˆ?fO#MðNŸi­<Ún›c¤ÛÍh÷VC÷7ßmq8fºŽ]Ã=›F5cø×ãuý®ô;ÏW4oøïW°Ñ4ýGÃ'»¶µðæ§q ¨—AÕ4}ê"-,Ò^%â•[ÈýáPU=cŠq~ʬZQº\‘MŨÉ$­mT•Õ÷M+û¼ÖÕU~Ki_EöRmy«=-ÒîÉ&Σâ÷ìð“à6›§øÆ^6ñ ÷—:Ô¥¦•ð×Áº¦©w©üÒÊÖ°ÛxiæyÔZ¼ŽÈ7(·,Äáÿ²¿ì‡ð«öƒ¶ŸÇ_³oÄo,Úv®³Pü5ðŽ•x·Æœ\#Oá˜å2ywJ|ÑÎ]†s‘_<þÊ_ |=ã…ÿ±ŸÅ~7žóÄZƱ.¯;Õ ‘´½H«D‘ݱ±hœf!;¦^w¸>£ñ3Xñ¾¥ðKö‰ø™ñxßÁŸSLð2 ZàɪÌöZcÅ£-ž ðLÒÊœmòƒ<Å€Y÷W…Z5%…öךm]Æ)$ª* ‹oW}Ö›&ô:&¥5¥ñnÚVÕÍj­·ºîï¥þïk¹ý‚<1û/Xø‡â5Åx8èÖºž¯­iÞðmµÂÁ´Mu$‡ƒÈX@¬ÝKN+‹ý¾ ü-ñÏį'ì‡ñŸÇ:ŒôŽßÅ1Úü;𿇵HÌŤAp&ðÄ2Ê®ÈÍŸ™IÏ#9Ÿ¼{íû|&ð”~ ñ'ˆ|EñÅ«oãHõ‹›™®4sdï}­iÍ Ã³[[ ³:zF‚æ&bí!wóŸÚÅRþÅ_¶v»ûNü4Òµ?i2xÎëáï´½ý"êútû°dŒ¸E–;¥œàŸ25{œ(R¯R­\%YþöÒQ÷afã(¨¦œnÔå)F:¯y&Õ›2´åCí¶ú+;7½ÖÜ–î÷¶‡­ëÿ¾übý³eðgˆ¾5ø÷Å_|+gÍÃÉà _Ühð ·0yú‡ü#- 1I^U!Ù €ÄgÑu¯ø'Γá?_üG×þ.ø·N×ì•õ ßÍáŸÅyŽ<—gÃáÆØC!rÜ&Fvñ_?~ÍŸ³N©aûvüOð·ŠuËÍ â~Ùjþ$×4KÇŠæÓ\¼Ôîå–[yT†Ù´QD§&‚¼Tß³wÅ9þ7|ñWü6M×m<9ð?Àú—¾%ÆÚµì°ëš«É47—¬ãÏ1Y@.€5E Ì(qªÂ+ØTMF+›Ýƒ¿5ÓåI/uÊ*)k¬¢Û×A¾i»JðN ev¥µen·v]×¹å~1ýŽüûZüJðnû&üc–Ê÷W´Ôµë+| ÓSMñ3ý•®5;"t[;K—+°óŠË!R6º)`ÝÃß‚¾*®±ñŸÅÚ¶¯ðãQxu?øwá.‡sáÿ j„’¤7£Ã×pé*ŽáÞ!t'vwÚY‰ÛøY£|Bý‹~?ü<ø'‰tÿŒ|sáÝjãán¿*¢ëÞ 6º{®#ù$¶1K)( ão–ˆ#>¡ÿ¨ø‰àÿÁ"ô1ãk+GÓü ¦ê:wŒío‘bm*î)æû\7°¶ HK(ãs ®ážì~2® çNNtW/*JÒR•TÛ~ÎêÎ.-?yïk_jµ¥5·ÍÒV³Ñß_‡Võ²im/ž7޾ü-ýŸþ9øsĺ·ÆŸ‰Vþ<ø¤4è |=©Üø„H€íMFÇÂò FªÅL™(·½À?ðJ ü$ñ|^#øcãÏøo]¶„Ã¥¦ø7Á6—0Ç·iU–?PTm8<Ž:WÊŸ²7…¼CàoÙóþ ógñV+»=Hø»X¸‚+ÂDÑYÍk¨Éj¿7*¦ !Ú½”¨ì}£ûrþÑZnðçÄ?>ë‰ÿ 'Ŷ–º.Ÿ¦e›LmNé4øîä+Ä~_›4à1–ÒfˆØ?0XŒ5u„ÃOšMÊ嚌œc¢ŽŠÛ«µ®‡=IÊ3Œ¯®ådÕ¹åíðÚ)¯]Ï‹ÿiþÍ?¶„‹}ñ¿ã·Ç?jÒàÕÿµ[ᬠž7ï žòæÓÃ1‰,ƒ óeòÒsHú+ÂðO‰iŸ…º=çÇo'â.¼1qkðûÁçN´³tP¢¹Ò®Ô’ ñ˜Á ƒÆé? |aü‹âçƒ?eoxCÀö–_ ü5¤ùš¯‡åÕÞÚÙ~×FÖ$»£_ùè$RJdc!ª|ýŸãøwñWÅ?³Œ_|sáO ü$øo§ê>›M×$Ò./..§¼’÷X›È*ns¬1ˆeó-Ц6,IÞ¾&0 • ¶QJi8ÆV‹O™¤ ¹]ù~¹uÚs“iBVåQzٵΩèŸ*ë=–é_{'ê¾ÿ‚Cx;À×sàjú%ÌžVù´ÿxÖGò§Šâ0Z?‚BÍž$nª«ñ¯ö4ð5‰¾*|_ø¹âëŸhÛ[Ç®·ƒ|}­ÇrÌ‘ÛAo"xu®vy¢HãL¹2(Qȯ›4oÚãâ~­à¿„¾:ê+Õü&þðÌÞ%›ÂÚìÚU÷…ï&ÔåÙ¨Þi åèÚj(Âà DÆ5€øWß 4߃þ"{¿øÑõiiøôÙíÏõ!›HüC *æÜ\…WUxÏŸ´Hb}û•Ñ`ñ‘¬–"²¿7#qŒ^¼ñ‹Wi5£OUµši™ÇšÜó–öZ$ïxÊNïþݵŸ^–³Jx#áçƒà¢VúŽ‹sñ§ã‹Gƒ®!»¸²ñG€<9lÚ]É’xU‘o¼4»fG·¸BSæ\pg¸ñ'üãEñ–¢iÞ-ø…âOOðÕ«Xé×^ðTÐévì46èÞ"(ÈD!@#^]ñ*ÖÿHøûOxK[øµñÃ^ð‡¼9¨hŸöíÝÅχn]5%V‡c nšG†Ñ»I-ÃaK3ÛçßhÍj?ø'‡Žu_>4ø ü`_éÞñ>‰ üâïEœÞ[ÅŸ§ý®ñVÊ;Ëc¹µ<×3H² q§$iשïa¦£áeÉ×´²¾‘[^Ò²Òékͺ©¹ZµÒÙix©ïd­g¾š­lµ>Žñ×ü»@ø£¯Üê¿<}â?jw–±ÙOwªx3Á7“Ml"g—ÃÌYª¤à_A^ð›ö øKûLÛk^ñ߈5eðmäÞ ¼ûwÃOZK`öè¾e’¥Ï†QÄH³Ú£Ëä‘^;ð¿ö²ñF¡ñ Lø]ñGÆ÷Z/…uoºŸ†µý7Æ÷ŒÚ}¤Z2ÿ‚[ü2ø1ðÄ×Þ+ñ¥þ“àÝ6ÎM[ZAà›c ²ZYb_0¢¡aÁ9s^7>‡û5êÚ‹gÕ¾&üGß§ôŸ^Þ| ÑR U’JêOˆâV8X œ TFè®»ÀwúŸ‹|!âO—‹ð Å­ü ,O•‘bàd°c®¿Fÿ‚\è¾ñÄ>'ðçÄ?éÞ$·•fUµð‚ ½WXšo=<<"'tð¬@â¾@ýü[¬xSÂþÒ<3­x#à—Ç/ž “D»±šM!äÐͣ˧ÙÚ8Û-Œ7WP¢#„++¼îï~#\üOÑ~ü·øyãx‚Ûömñ½†µ¡9×®ÖçXÒ…¥µö£¢^]#½Xâ’P­)yØ ‡uk^Ž.5¥KÛ¤´ø£"å5--xÊIIvMöAV_hés§{¥¢×YE}îl®µzÛ诌ðM /Ú 8þ<|Qñ¿Œ—N,ÖŸÛ>ðméµ-ÞY—Ãä¦p3Œg5%÷ün×SøN¾Ô>)xÖo"ª/‡ßÂÞ :b}ê¯ü#þXÀà Ãr9æ¾zø…ñÏÄZÜ uåñžµá_~Ò>6¿½†m_ÄZ…½ž• ‹.“e ÔR,šh¾hÅé´N^QvµÃŠš…߯Ï|ý¥~<ßjþ‡H×ä‹Å&·u¡Ë­ê¶÷6«žú´r$·2Y[Í9s¸‘ÆÙ·jñßí â f/ê¿t}WËmfãO´¿º›S»µó>Ä’$2,ÈIålòÌŽ$T TÖ‘¥Œ§’öËÝÕÚ íµ'®–üJöqÚÍè¢r©J”¤½Ô’[Ë“ôž¯ÉéÔúPÿ‚\èš¶¹¯jš§Ä/Üj~*·k]jòOø%®5x[£ºø{tÈv®UÉhôM¿à’Þ é:¾4×$Ñt äºÓ,Á{m>i/,Ÿíت–e’£'Šú¶Šðq‹­%§÷cÓEÓ¢9þµS¿à»[·m= ^Ҧм;ac¨ê7š½Å´pK}v¥Åë*…3J°GAÜ‚ÄG $íUíWšÝÝÎp¢Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÊ~ÖÇãWŠC0ãZ¼þÿ½}Y_üIø}ã /ø‹Äß,£Öl¥Öïa¹µ¬RÛ²Ìß2–•_Z+ÅþxǾ>»Ÿìáðö‡b¦ßíI=ÍÙ„ýÓUÎ2wdŽ1E}CEPEPEPEPEòíóñ_ã/þ)êÿî~ X}›Â^ü=°ðß„[Ò¼uâƒ5ð›Jñ%á±¹þÊÓ×ÊÐÔ\ô SP½oµ·’^Ðëúüæð6·ðàGüSàO޼ªXê#Eñ6·ÂD·´ºwVê‘ð”pÆY™yÒ€Û•9þŒ×çOÃÿÙ÷ǵ/įÛÀž ñ¿†|%àÿxçû7^ó|=&£«¼2i¶‹(¶˜ÝÇ ;ãÌ`¼2;˜àw#”¬ªÊÑQMíüñŽ·„úI½éØ^E :ŽÊñ_ŸK;µm6=çÄÿðMÍ3â·Œtßø¿â§Œ/~Á_ >iºˆüeãoÏys­HÚZi_ |ªj—zŸÍ,­k ·†žgE«Èìƒr‹rÌ@Nû+þÈ ¿h;iüuû6üFñrͧjë9ÕÃ_éW‹|aIÅÂ4þŽS'—t§ÍåØg9óÏì¥ð§ÃÞ0ø_û üWãyïЮ£¹Y{Yn`¸ðÄ-+,‘´‰&kÀ‚Aª¼{íû|&ð”~ ñ'ˆ|EñÅ«oãHõ‹›™®4sdï}­iÍ Ã³[[ ³:zF‚æ&bí!wóŸÚÅRþÅ_¶v»ûNü4Òµ?i2xÎëáï´½ý"êútû°dŒ¸E–;¥œàŸ25{œ(S¯R­\%YþöÒQ÷afá((¦œnÔ¤Üaª´’vµÌ½ùEÃíÝôVvæÞëGîËw{ÛCÐõ€Þ ¼ý«üSáÙçㆿoûJØX›ùõY>xnõôæšË&¡¨[xv=¡ãeZåƒ¨ä¨øcöÖ~üñ"|ký üsrž#ŽãTñ½Ïö'…âÒµ9$RêY"»Ò&+“¦Ç‘•cŒ/ 0<+ölýšuKÛ·â…¼S®^h_|kð~ËWñ&¹¢^÷5¿dχgø¯iiû+|[øŸá?øßL—R±º‡á_‡ü:üLøË{ãoütø§ªøÇáþ¥‡‹­ü¦ê¾ÑïàÚTj÷~‚–S<”´Ê|pÅÒ|,Ѿ!~Å¿þ| “ĺÆ?‡¾9ðîµqð·_•Quï›]=ŠF×ü’[¥Ž”ñ·ËDŸPÿ‚T|Dð?ÿà‘zñµÆ•£éþÓu;Æv·È±6•wó}®Ø[$%‹q¹„‹×pÎØº²Àóc¨IÉZ*-r)IJU#«öwVö|Ž.?ÞÖ½s¸Kš.êM-,îšëîë{Y&–ϱÂühøàÔ|mûx|pñ/ÄïxÊ?#ÃZµ—Á¯êÖZ¤NÍ$qY¸ðõø_ï+öƒ‘™0ªkÙ| ÿ«ðïÂ{è¯~x÷Ä~¹·¹Kä›Jðg‚l]'H¦‰%݇”ïXîn7P³H sòìáoøö|ÿ‚|ÙüUŠîÏR>.Ö. Šð‘4VsZê2Z¯ÍÊ©‚Hv¯e*;_hþÜ¿´V›§|9ñƺâÂÉñm¥®‹§Ái™fÓSºM>;¹ ñ—æÍ8 Ae´™€"6#Ÿ2–'Y`°ÓNòœ~r»M¤ÔTl—Wº2«9)FŸ5àÕÛ²q·<£u§Ãh¦½O—ü=ãÙûMø›©øçÂÿ~+Ûx¶=>=oRñ=§Á ]Åct™KÛF?åmå@Ožòle-€qïž!ýƒ¼;û^øoÃþ$ñgÆoüGҞ٧ѵÏø/SˆÁ:€þD 7É"€†W•é? |aü‹âçƒ?eoxCÀö–_ ü5¤ùš¯‡åÕÞÚÙ~×FÖ$»£_ùè$RJdc!ª|ýŸãøwñWÅ?³Œ_|sáO ü$øo§ê>›M×$Ò./..§¼’÷X›È*ns¬1ˆeó-Ц6,Ixš”ÔUZ5-(ÅI^1mBÎö´#kid›ºr½­®“ošð•šQof×:§o²ºÏ¥ôWßGî>#ÿ‚jÙxÇÆV^"ñoÄÿjž ÓR­5+¿ x.k»d…üÈU&o—Q’è·#šà~=ÿÁ<¾øoDñŒ~:üAÖ5Cq}j—>ðV¥{¨ß9X­ã(<8òÜ\»\"F€3±˜7> £~×õoü#ø¥ñ×Pñ^¯á7ðdžfñ,Þ×fÒ¯¼/y6§.ÍFóHO.FÓQD†`Š&1¬|¾øi ÞüñÝø¯Æ«KûOǦÏn|o© ÚGâaW6âä*º«Æ|ý¢@ËïܨFô°XºTjÕJÒä÷a¯U«”n籕á-/²º¼TÖ¶KD÷ÒÍke©ô<¿ðI¯ O¡êºd¾6×N®‹eÔ­á ðG“~-†Ûa2Â;‰<¡Ä{³³øqQ[Á"üg¢Úi¶ž.ÕbÓ¬.…õµªxÀÂ{ÒhÐxw 'û`ï_2iÿ> x³ÁSøj‰Þ!ðõΛûFØø7ñ{k²Úi—P[<¶£R½ƒÏ¹Hçy™PÛã!‘ŽƒXÓ<]ðÓEøŸ¬i¾*^¯Â/Œz‡´ k¿Isl,/n4ƒsozÎ<Ëì®§4é//—ä¦Í§y{ mã WŠrq²äOg{+_÷Z7¢vnÉ5Vi&¥5§KŠ=¿»÷3Ñþ6þÁ_ >M¤Ù|`ñÖ¿ü,ß[i¯ü+?^E«jÒ³ˆMËÇá–E™%"YÊýçÃrjÏÃ?ø&÷Âωú·‰WÀž/×ïÂ~"{Iåøià»S§ $†Di<4¾k2‘21Ãu¯×~*Ûüqø}ð‹âwůëiã_øhËm#TЮ|E"iÚpjWQA`Ú`[ÆÑ[Go'šcó‰rí! ]'įxúûX×ô‹/Šß¬/ÚgLðŠ][j‹ÀÒîtû7{TÄ{5gfU ·–ܳ¬)bš?ki»§xÇ–êT¢­h»¯yk×F´ZëVX'mUï¢Þ.¢vÓosMzùéï·°G†?eëüF±ø¯âßÂ÷SÕµ; ¶¸[}¢k©$x<<BÂfêX êq^#âßÙ£ösðŸÄë‹ñ¯Šõ¿ØÅ³¨Ãáÿ‚Þ×uÍıÍ|,|'+ÚHÙÞÛõÇzÜðö§âïx“àF¥âÏxÎÛTøßsáˆîµFMNößÃöv¶ºÅåµÅÄŒÒIÅ’ËtŒOúZ)=êà‹šÎáÏ |cðwŒä†×â–ñY¾ñeµÆ#¼¹3Ì ÂŒK˜$nÇ%ÚHb aÖÃÒ©^u.Ò‹IF1nåånñvW“MwVó2¨ç‡Œ¥'wÍgdµMÉ&ôï¬ÿš;uê¼ð+Bý¼?gË{ÿüø‰ñáθòÁWþð¤–WFÚá¢?è÷>rXi+ü!—Œì|û j?< '¸Ð~x£Fñ>ºdð†µ&•ÿ ˆ"¿na[ÛGIKDÓÞÎé ŠBKî ä?³Çïê?¾h~#ø‚ïB¸¼øá õ;­j]>/YéSEÔ†&Š6¹ä}¦%I–X±)¸sªëÓ“¦Ô`Ôæ£(E»EOu'/Ý´ô[§ÝG9ª‘Z=ÑY]]6ºn£}¬ôôú‡ÆŸðOVø‘ðò/üAø»ãýo°$QÅ£ßxkÁ×,@‚ÀúEÛòàcÂh?°ï‚ÿhïßx,|Lñ¶¹áφzËèƒFÔüá°Ò®â‹XgðàhI” "b<×Ï|]ã?ÚCÀŸ²–‡wñ·ân™iñ0xÏHÖ/4]}öílÚî[i–êHä“ÎEXÀrÇ«Œu6µoŽ~6ðÅCá§Š~'këámWã&¡á©õïë×2ùx~Ê{M7ûFÏÊ{15̬àÂbwdÛ“æI»¡a1t§*>Ö<ËšVPKá©ìܾ[³²º{kÐÛØÕ¤¬¤´»Ñ-æ½´[ò>ËMwÓêo‰ðLی˥‹Ÿ¼gâq¢FðiãTð¯ƒ.þŨWŽ/3Ãçb2€¬ƒ ÀAº¿ ~Äi?|3ãx÷Äþ8Õü%Ðiƒ\ðÿ†AµŽHž2‘\ZèðÜ£~ìE4y# ¹K+|†šO޼Uñ3àÂÝoö“ñ¦³k¯j^,ðÆ¯¬xGPr̶–î[Ébv¸º·2y/p¬ÜÆU¶Ê’×郥 B²±k«»ãg@nnœ<÷T.ùÛ'$ž+ËÌ*b0tàHµ$Ú´´[”[øU¹¬öîq×JJ1m4ÓéÒî=“Õ§ÛÏ]º(¢¾|ä (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ù£â÷í/¢þÈß³ïÄÿøïdÖú>±¨ kBÛZþåæe†ï󹑫¹º_K׉ø3ÇRxJÿÅ0]躌Ìúõû©[‹8·©™°ÀMp„ƒØâ€<ãþ UûhÛ~ÛŸ²:k÷m‰ôœéúý¤?*Ãr«‘")$ˆä\:ö²ä•4W«ü>ø–¯áÉáÔ´›ëhð Åݧ¢Ü±ý( \¢Š(®ãÿíáÙÁ¶úçÅëûÛk{ë´Óì-tý2ëUÔuK¦Wq¥œR\\ɲ9d+lU#‘یù¬/ˆ^»ñW‡."𦡉®4ýYìc¼“LwZHã“å-´‘ƒÇ¨afm¥xÿ_‘Pµýí¿¯Sölý¦<û]|$±ñÇìÿ¬sÚ„ÓÛ$ïi=œÑM­ ÐÍop‰,2$ˆêÈè¤Ó®ò¾,ÿ‚%Xx£á×Âߌ¿ þ1êÚ_Š|Cð¿â¦³¦ÞxžÖÄÙMâ™/c¶ÕÞúêÌ©;>¨êʇbˆÕW…ý§ZÍGÝ”ÓQ’ô”T—nþ¤.dånœ—ÜÚóíÜñÏ·¿Ã/Ú[â޼+ðwPñ>¡¯|5˜Ûx’ÚëÁúΜ4ɱ‘ ’îÎ4’V\:Ç32Ê NïìËûWx+ö¾ðMÿˆ¾Üë÷šN›©Üh÷ê¾Ôô7[»w1ÜD±j6ÐHæ)UârªBÉ¡!‘”|åÿ¿¼[Û?öÞÒåíÿìï‡(R}NØë¸yg#&¼wöÏø»âÿÙ»þ qñCá´³Ëះ{ùÑ *e-íÑå凤÷è ~c|ñGÅŸø*>›©ØþË¿|kà+ÀÿüwágXÕ®áÕ¡¼¿µžæ]GU‚Êa­4‹Q<^lŒ²(i××ðWøÓáüo⧈|-ã [Ã~8ð·„ÞÿûkÃî,äk¸£Ìeƒ´q»náHpÂ3D®¹ü½ukðµÚìÕ›w²¢•ZŒ]Ô­¯ÝÝyÙ;nÒVoê[}F ¹LvòÆÒ¬i+GŸóµ™z€v¶2?„úù¿áÏüNÇà÷ˆõ cá'ÄÏø[WÕ[ëí#Â^ ±¹½·‘,±xyZ@[æù‰çžµæðO‡VÿðóÚóÄ7š¿‹¯/¬µ_ÙÁ ׈ïç°Ž+ÎåÀ³yŒ¬®û¡hÕÙª’ÜuÙGW A¯y&Õ“Ý^Ú¯>ÈTkÉEòìü—å©ó7Œÿàš?|yeâŸüOñ¦·â]9cKmVûÂÞ ¸¼…cK¬ÏáòÀ$€H£?+Ú•?à›–ÑüLGñKÆ«ã %¾¸<+àÁ¨¼‚/$9¹ÿ„Ì,"Ì{·gaÛœq_JQ[,ו“Vµ¾ì÷[lÍž&£ÑÛ¶Ëü“#ÿ‚Bø2VèüYª ë{ÖÔâ¹ÿ„ÀÞtWLÊÍ:¿ü#¹YK"àîÊ/< ¹¡Á)¼7ᦷáŸëúvµïö’_Úø'ÁÝ%×Íþ%_†üïóçwÌyä×ÔôUÿlâínuoðÇü‡,]Y^ï%þG̾ÿ‚eéß ¼]>¿ðÛâ_Œ<=®]yþ~¡¦xOÁv—3ùì1y"ðøf.ÑFX’wéIàïø&>—ðîF?‡ÿüW¡G«ÜÁ{~šƒüj·³Á/ ³ü<<ÇŽP$Fl•o˜y¯¦è©y¾)ï%ÓìǦ«§G°ž&£¾ßrÿ#äÿÁ2/´ý{Xñ§ÁoŠš¶ñZê9ÓÄ×þðtÓùî»K\M‡ÄŠË•lJ¤ƒ×µhü;ÿ‚yx›Gøo¬i?þ<üAÕï¼fòÝø´A x`iúÝÌñ,3“os¤NÞSGD#g`F}?E7›â\y[EðBö[+òíÖÛ]&7Ѝí{wÙ—N®ûŸ0ü.ÿ‚`é_üC}«|ø“âï êššywwz?„¼c5ÂnݵÞ/©+»œtÏ5Äüuÿ‚+xã¯Äëx“â§gñþ‘,W6Z­Þ‹á¹!y¢9ŠKËX4˜Rô¦0¾qb£€@â¾Ô¢ªÖ2Ok¥-¯ËÛµí·Ö.¬[iヒ_]5>IÕÿà–—_4û ¯ÚûâÆ¡ñ'Äö1¼ ©Ü|;ðpŽ8K–XâŠïFº’03ÈóH-“œ þÿ‚Tø{áV£ ßÂßøÃ7P]%ìsi> ðM‹¬éÑ$¹‹ÃÊw¬w7¨Y¤†9úžŠu‹qpæJ=”b—Ü£oÀORK•½;Y[ò>hÒ?àšv>øŸqã}âg‹ì¼ivÎÓëöþðTz¤ÅÆ×/t¾±aÁËr:ÒüVÿ‚lZüu¹°›ã_Å?ø¶m-dK95 ø6õ­–@ˆ†_’ªàÊ8` ×ÒÔVÚ¸•%+«¥dùc¢ì´Ø>µQ>këè¿Èù£ÄðM[/øÊËÄ^-øŸã-SÄjC¦¥wáOÍwl¿™ ¤Íáòê#r]8Vä`óXþ,ÿ‚HøKǺ֧©xëÆ:η¨k7 w¨]jð=Ì׳*•Yey<:K¸ À3Fæõ5õ}QÍñP³Œ’·÷cëÛº_pGR;?Á‘òÿügº®¿q«jž3Ö®u[Çç¼—Àþ{‰Ú2¦2òîb¥©'‚«Ž‚¬x‡þ a ø·Pñߊ|}âMJïÅŠ‹­ÏsàÏË.°ÕÐ];xx™ö¼q°ÞN )_RQGöÆ-[ÞZv>^^KîAõª‹[þ ¦Ý“$ÿ‚Bø2k±<Þ+Õq$‰À~,ÙÿæA>T?Â8ëÿø$WƒµX58µ?ê·1ëWBûPI| àg[û€\‰¦ß¼$!Û'çny5õ_ÛXÏç_ø |¼¼—Ü?­Õ]þGÊWßðIo ê~7>&Ô¼i®\øŒºIý©/‚<÷‘B£yÇûò9ØT'þ àÃ~÷GÅz™º’ðj/7ü ~óèDå¿áÉ”c¿ïryæ¾³¢’αŠÞúÓO†;}ÂúÕNÿ‚ÿ#æ_Á34ï†.›Ä >%øÃúíÏŸçj_„ügs7œÈÓ’/«1vŠ2Ä“’ƒ=*ŸÅ¯ø%fƒñï^¶Õ~7üCñ_‹µ;HÄ0Ýëð]ìé$„/‡ÉÛ’NÜã“Å}MEJÍñJj¢’æ[>Xßï°,UH¾dõô_ä|ÛãŸø'_|'¦h?>+øï[Ñ4I#›M±½ðσg·Óž5ÛAhDʤ¨(8¨›wá/Íi¤².Ô6з‡ÊCµxÀâ¾™¢’Íq1µšÞÿ wï¶âX‰¤’¶žKü•´¿ø%†´=[E¿Ñ¼q¯Z_xlƒ¤\ÃàŸ$ÚY ¸wÝ ÜK|„rsÖ¢¸ÿ‚JøRëEÖ´é¼i®ΗZµ¸ðG‚zœÈÅÒK…Ä®¬ÌÁ›$$kêê*¿¶q{ó/ü=ïÛ¾¾ºëUw¿à¿Èù~/ø%΋©áËè¾!x™o|A Üø'ÍÑ#F,‰hÿðfÝU™˜Ê€I=M}AEˉÆUÅÛÚ»Úýß}’2IT·7O$QEsQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE™á/ùËÿ_·úQ%iׯé>!ñ„³þ_Úé y©]Gy¨¾ZâÊ>]ÍmR1áT¹ ›·ûv0|iÿŠê×Að]Å„ig¨ZÁ­êwgýÈÉ"²‘æ]ͽT ?»WÝQ$+Ÿð·ì÷¬xk]Ñ®ìÆ:F E•£K5Ä:U™bf¸]ÊëP¹ƒÜJWË6Ýø8 ÿÙpostfixadmin-3.0.2/DOCUMENTS/DOVECOT.txt0000664000175000017500000001312212267512143016372 0ustar daviddavid# # Dovecot configuration for Postfix Admin # Originally written by: Massimo Danieli # Revised by: Sampsa Hario for Dovecot v1.0 # Revised by: David Goodwin for Dovecot 2.1.x (2014/01/02) # More complete Dovecot documentation: http://wiki.dovecot.org/Quota http://wiki.dovecot.org/Quota/Dict http://www.opensourcehowto.org/how-to/mysql/mysql-users-postfixadmin-postfix-dovecot--squirrelmail-with-userprefs-stored-in-mysql.html Here are the relevant parts of Dovecot v2.1.x configuration for Postfixadmin setup. Please refer to Dovecot documentation for complete information. The setup gets userdb and passdb info from MySQL as well as quotas, and uses dict backend to store used quotas as key=value pairs so that they can be viewed real-time in Postfixadmin. 1. Dovecot setup ----------------- A basic /etc/dovecot/dovecot.conf is as follows, this was generated using 'dovecot -n' on a vanilla install and then changing to talk to a PostgreSQL or MySQL database. # BEGIN /etc/dovecot/dovecot.conf: # Change this to where your mail root is, this needs to match whatever structure postfix expects.... mail_location = maildir:/var/mail/vmail/%u/ namespace inbox { inbox = yes location = mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { special_use = \Trash } prefix = } protocols = "imap pop3" # change to 'no' if you don't have ssl cert/keys, and comment out ssl_cert/ssl_key ssl = yes ssl_cert = MD5-CRYPT # md5 -> PLAIN-MD5 # cleartext -> PLAIN default_pass_scheme = MD5-CRYPT # Query to retrieve password. user can be used to retrieve username in other # formats also. password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1' # Query to retrieve user information, note uid matches dovecot.conf AND Postfix virtual_uid_maps parameter. user_query = SELECT maildir, 1001 AS uid, 1001 AS gid FROM mailbox WHERE username = '%u' AND active='1' # MYSQL : user_query = SELECT CONCAT('/var/vmail/mail/', maildir) AS home, 1001 AS uid, 1001 AS gid, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1' # PostgreSQL : (no Quota though) : # user_query = SELECT '/var/vmail/mail/' || maildir AS home, 1001 as uid, 1001 as gid FROM mailbox WHERE username = '%u' AND active = '1' #END /etc/dovecot/dovecot-sql.conf 3. Dovecot v1.0 quota support (optional) ---------------------------------------- Please note that you need to use Dovecot's own local delivery agent to enforce and update quotas. Then you can view real-time used quotas in Postfixadmin. Add to dovecot.conf: ## IMAP quota protocol imap { quota = dict:storage=200000 proxy::quota } ## POP quota protocol pop3 { mail_plugins = quota } ## Local Delivery Agent protocol lda { mail_plugins = quota } ## Dictionary DB proxy dict { quota = mysql:/etc/dovecot-dict-quota.conf } ## Default quota values plugin { quota = dict:storage=200000 proxy::quota } Change dovecot-sql.conf to return quota values: for MySQL: user_query = SELECT maildir, 1001 AS uid, 1001 AS gid, CONCAT('dict:storage=',floor(quota/1000),' proxy::quota') as quota FROM mailbox WHERE username = '%u' AND active='1' for PostgreSQL: user_query = SELECT maildir, 1001 AS uid, 1001 AS gid, 'dict:storage=' || floor(quota/1000) || '::proxy::quota' as quota FROM mailbox WHERE username = '%u' AND active='1' Create file dovecot-dict-quota.conf: driver = mysql connect = host=localhost dbname=postfix user=postfix password=postfix default_pass_scheme = MD5-CRYPT table = quota select_field = current where_field = path username_field = username Create database in Mysql: (This is automatically done by postfixadmin's setup.php) Enable quota support in Postfixadmin config.inc.php: $CONF['used_quotas'] = 'YES'; $CONF['quota'] = 'YES'; Note: The above text describes the configuration for dovecot 1.0 & 1.1 quota table format. If you use dovecot 1.2 or newer, - use the 'quota2' table (also created by setup.php) - set $CONF['new_quota_table'] = 'YES' postfixadmin-3.0.2/DOCUMENTS/LANGUAGE.txt0000664000175000017500000000115410777765753016501 0ustar daviddavid# # Postfix Admin # by Mischa Peters # Copyright (c) 2002 - 2005 High5! # Licensed under GPL for more info check GPL-LICENSE.TXT # If you want to contribute a translation, please follow these easy steps: - download your language file from SVN http://postfixadmin.svn.sourceforge.net/viewvc/postfixadmin/trunk/languages/ - search for lines with '# XXX' comments and - translate the line - remove the '# XXX' Note: The file is utf-8 encoded. You can also use htmlentities. - post your translation to the Sourceforge tracker http://sourceforge.net/tracker/?group_id=191583&atid=937966 postfixadmin-3.0.2/DOCUMENTS/POSTFIXADMIN.txt0000664000175000017500000000225611004714031017166 0ustar daviddavid--------------------------------------- The different parts of PostfixAdmin Postfix Admin has a concept of a "global" administrator (think 'root') and domain administrators. When you install PostfixAdmin, the setup.php file will ask you to create the global administrators account. Using this global account, you can (if you so wish) create domain administrators who are limited to making changes within the domains you specify for them. Historically when you logged in as the 'global' (or superadmin) user, you'd access /admin; with version 2.2.0, this 'functionality' was removed (as there was excessive code duplication) and everyone uses the same login.php script. Needless to say, as a global administrator, you can do all kinds of bad things - like deleting domains and stopping delivery of mail to a particular mailbox. So - take care, and if you're unsure take semi-regular backups. If you login, and you are not an administrator (i.e. you are a 'regular' user who just has a mailbox on the server), then you will only see functionality to modify your own account - e.g. change password, edit forward records and specify whether you are on vacation (out of office) or not. postfixadmin-3.0.2/DOCUMENTS/FAQ.txt0000664000175000017500000000301311135623530015670 0ustar daviddavidFrequently Asked Questions: 1) Why isn't PostfixAdmin creating my mailbox? - PostfixAdmin is only a web interface for storing configuration settings. It does not (by default!) have the ability to create mail folders on disk. In a normal setup, sending the 'Welcome' email accomplishes this task - as Courier/Cyrus/etc do it (and have permission to do so) 2) I've deleted the mailbox from PostfixAdmin, yet it still exists on disk? Why? - This is related to #1 above - namely, PostfixAdmin (which is a php web application) does not have permission to modify the mailbox files on disk. You need to either manually remove the directories (e.g. rm -Rf /var/spool/mail/vmail/something@example.org) or install the postfixadmin-mailbox-postdeletion.sh script (See ADDITIONS/) and modify config.inc.php appropriately. 3) How do I have to setup sudo to run the $CONF['*_script'] scripts? - run visudo to edit the sudo configuration file - add a line like this for every script you want to run: wwwrun ALL = (courier) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postcreation.sh (replace usernames and path according to your setup) 4) I try and create a mailbox, but it keeps saying "Invalid email address"... ? - Postfixadmin, by default, attempts to verify an email address is valid, partly by checking that the domain exists. For most people this works as expected, but if it doesn't for you, try editing $CONF['emailcheck_resolve_domain'] to 'NO' in config.inc.php and try again. postfixadmin-3.0.2/DOCUMENTS/SECURITY.txt0000664000175000017500000000302111615361035016531 0ustar daviddavidSecurity and PostfixAdmin ------------------------- While the developers of PostfixAdmin believe the software to be secure, there is no guarantee that it will continue to do be so in the future - especially as new types of exploit are discovered. (After all, this software is without warranty!) In the event you do discover a vulnerability in this software, please report it to the development mailing list, or contact one of the developers directly. DATABASE USER SECURITY ---------------------- You may wish to consider the following : 1. Postfix only requires READ access to the database tables. 2. The virtual vacation support (if used) only needs to WRITE to the vacation_notification table (and read alias and vacation). 3. PostfixAdmin itself needs to be able to READ and WRITE to all the tables. 4. PostfixAdmin's setup.php additionally needs permissions to CREATE and ALTER tables in the PostfixAdmin database. For PostgreSQL, also permissions for CREATE FUNCTION and CREATE TRIGGER are needed. In other words: setup.php needs all permissions on the PostfixAdmin database. Using the above, you can improve security by creating separate database user accounts for each of the above roles, and limit the permissions available to them as appropriate. FILE SYSTEM SECURITY -------------------- PostfixAdmin does not require write support on the underlying filesystem with the following exceptions: - the templates_c directory where Smarty caches the templates - PHP's session.save_path to store session files postfixadmin-3.0.2/DOCUMENTS/SUPERADMIN.txt0000664000175000017500000000127411615361035016741 0ustar daviddavid------------------------------------ Recreating a superadmin account When you run setup.php you will be required to enter a super user name and password. This user will be able to login and modify any domain or setting. Hence, superadmin!. With that login you can create new superadmins (and you should delete or change the password of admin@domain.tld). If that user is no longer there or you didn't use the .TXT files, you could add another manually from the database. In case you forgot your superadmin username or password, you can create a new superadmin account using setup.php. If you also have forgotten your setup password, you can use setup.php to configure a new setup password. postfixadmin-3.0.2/DOCUMENTS/UPGRADE.txt0000664000175000017500000000713011512140301016341 0ustar daviddavid# # Postfix Admin # by Mischa Peters # Copyright (c) 2002 - 2005 High5! # Licensed under GPL for more info check GPL-LICENSE.TXT # REQUIRED!! ---------- - You are using Postfix 2.0 or higher. - You are using Apache 1.3.27 / Lighttpd 1.3.15 or higher. - You are using PHP 5.1.2 or higher. - You are using MySQL 3.23 or higher OR PostgreSQL v7.4+ READ THIS FIRST! ---------------- This document describes upgrading from an older PostfixAdmin version (>= v1.5x) It's recommend that you install Postfix Admin in a new folder and not on-top of the old install!! (At the very least, make sure you have backups of the database and relevant filesystem!) When upgrading Postfix Admin, make sure you backup your database before running upgrade.php. 1. Backup the Database ---------------------- When you install from a previous version make sure you backup your database first. There are a lot of changes in the database structure since Postfix Admin 1.5.4. $ mysqldump -a -u root -p > /tmp/postfixadmin-backup.sql or $ pg_dump -ad -u postfix postfix > /tmp/postfixadmin-backup.sql 2. Unarchive new Postfix Admin ------------------------------ Make sure that you are in your WWW directory and then unarchive the Postfix Admin archive (whatever the filename is): $ tar -zxvf postfixadmin-X.X.tgz 3. Change permissions ---------------------- Since the database password is stored in the config.inc.php it's a good idea to have change the permissions for Postfix Admin. $ cd /usr/local/www/postfixadmin $ find -type f -print0 | xargs -0 chmod 640 $ find -type f -print0 | xargs -0 chown root:www (the last command assumes your Apache is running with group "www") Since version 2.4 we use smarty templates. That means the templates_c directory needs to be writeable for your webserver. $ chown -R www-data templates_c/ (if your Apache runs as user "www-data") 4. Configure ------------ Check the config.inc.php file. There you can specify settings that are relevant to your setup. Comparing config.inc.php with your previous using "diff" might save you some time. You can use a config.local.php file to contain your local settings. These will override any defined in config.inc.php - and save some time when upgrading to a new version of PostfixAdmin ;-) 5. Run setup.php ---------------------------------------- Access setup.php through a web browser. It will attempt to upgrade your database, and also allow you to create a superadmin user. (In case the database upgrade fails, you can run setup.php?debug=1 to see the last executed query.) From version 2.3, you need to specify a setup_password in config.inc.php - setup.php should guide you through this process. If you do not have a setup_password, type one into the form, and setup.php will echo out the hashed value (which needs to go into config.inc.php). The setup_password removes the requirement for you to delete setup.php, and also closes a security hole. Since version 2.2 of Postfixadmin, setup.php can perform the needed database updates automatically . If you update from 2.1 or older, also create a superadmin account using setup.php. Note that admin/ has been merged into the main directory. Login with the superadmin account to setup domains and domain admins. 6. Upgrade your postfix config ------------------------------ Since version 2.3, PostfixAdmin supports alias domains ($CONF['alias_domain']). If you want to use them, you have to add some queries to your postfix config - see POSTFIX_CONF for details. 7. Done ------- This is all that is needed. Fire up your browser and go to the site that you specified to host Postfix Admin. postfixadmin-3.0.2/DOCUMENTS/BACKUP_MX.txt0000664000175000017500000000233311210564410016631 0ustar daviddavid# # Postfix Admin # by Mischa Peters # Copyright (c) 2002 - 2005 High5! # Licensed under GPL for more info check GPL-LICENSE.TXT # Please follow these steps if your mailserver is used as a backup MX for some (or all) of your domains. Note: The setup described in this file only checks the domain, not the full mail address. You should use "reject_unverified_recipient" in your postfix config or setup "relay_recipient_maps" with a list of valid mail adresses on the primary mx to avoid that your backup MX accepts mails for non-existing recipient adresses. Without this, your backup MX might become a backscatter source. 1. Modify main.cf ----------------- In order for Postfix to use MySQL for relay_domains add the following to your main.cf relay_domains = proxy:mysql:/usr/local/etc/postfix/mysql_relay_domains_maps.cf 2. mysql_relay_domains_maps.cf ------------------------------ You will need to put this into a text file for postfix to pickup. user = postfix password = password hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = '1' 3. Restart Postfix ------------------- When you are done make sure to restart Postfix so the changes take effect. postfixadmin-3.0.2/users/0000775000175000017500000000000013046702635014332 5ustar daviddavidpostfixadmin-3.0.2/users/edit-alias.php0000664000175000017500000001037712717673234017075 0ustar daviddavidassign ('smarty_template', 'users_edit-alias'); authentication_require_role('user'); $USERID_USERNAME = authentication_get_username(); $ah = new AliasHandler(); $ah->init($USERID_USERNAME); $smarty->assign ('USERID_USERNAME', $USERID_USERNAME); if ( ! $ah->view() ) die("Can't get alias details. Invalid alias?"); # this can only happen if a admin deleted the user since the user logged in $result = $ah->result(); $tGotoArray = $result['goto']; $tStoreAndForward = $result['goto_mailbox']; if ($_SERVER['REQUEST_METHOD'] == "GET") { if ($tStoreAndForward) { $smarty->assign ('forward_and_store', ' checked="checked"'); $smarty->assign ('forward_only', ''); } else { $smarty->assign ('forward_and_store', ''); $smarty->assign ('forward_only', ' checked="checked"'); } $smarty->assign ('tGotoArray', $tGotoArray); $smarty->display ('index.tpl'); } if ($_SERVER['REQUEST_METHOD'] == "POST") { if (safepost('token') != $_SESSION['PFA_token']) die('Invalid token!'); // user clicked on cancel button if(isset($_POST['fCancel'])) { header("Location: main.php"); exit(0); } $fGoto = trim(safepost('fGoto')); $fForward_and_store = safepost('fForward_and_store'); # TODO: use edit.php (or create a edit_user.php) # TODO: this will obsolete lots of the code below (parsing $goto and the error checks) $goto = strtolower ($fGoto); $goto = preg_replace ('/\\\r\\\n/', ',', $goto); $goto = preg_replace ('/\r\n/', ',', $goto); $goto = preg_replace ('/,[\s]+/i', ',', $goto); $goto = preg_replace ('/[\s]+,/i', ',', $goto); $goto = preg_replace ('/\,*$/', '', $goto); $goto = explode(",",$goto); $error = 0; $goto = array_merge(array_unique($goto)); $good_goto = array(); if($fForward_and_store != 1 && sizeof($goto) == 1 && $goto[0] == '') { flash_error($PALANG['pEdit_alias_goto_text_error1']); $error += 1; } if($error === 0) { foreach($goto as $address) { if ($address != "") { # $goto[] may contain a "" element # TODO - from https://sourceforge.net/tracker/?func=detail&aid=3027375&group_id=191583&atid=937964 # The not-so-good news is that some internals of edit-alias aren't too nice # - for example, $goto[] can contain an element with empty string. I added a # check for that in the 2.3 branch, but we should use a better solution # (avoid empty elements in $goto) in trunk ;-) $email_check = check_email($address); if($email_check != '') { $error += 1; flash_error("$address: $email_check"); } else { $good_goto[] = $address; } } } } if ($error == 0) { $values = array( 'goto' => $good_goto, 'goto_mailbox' => $fForward_and_store, ); if (!$ah->set($values)) { $errormsg = $ah->errormsg; flash_error($errormsg[0]); } $updated = $ah->store(); if($updated) { header ("Location: main.php"); exit; } flash_error($PALANG['pEdit_alias_result_error']); } else { $tGotoArray = $goto; } $smarty->assign ('tGotoArray', $tGotoArray); if ($fForward_and_store == 1) { $smarty->assign ('forward_and_store', ' checked="checked"'); $smarty->assign ('forward_only', ''); } else { $smarty->assign ('forward_and_store', ''); $smarty->assign ('forward_only', ' checked="checked"'); } $smarty->display ('index.tpl'); } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> postfixadmin-3.0.2/users/calendar.js0000664000175000017500000003120511275611272016440 0ustar daviddavid// Tigra Calendar v4.0.2 (12-01-2009) European (dd.mm.yyyy) // http://www.softcomplex.com/products/tigra_calendar/ // Public Domain Software... You're welcome. // default settins var A_TCALDEF = { 'months' : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], 'weekdays' : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], 'yearscroll': true, // show year scroller 'weekstart': 1, // first day of week: 0-Su or 1-Mo 'centyear' : 70, // 2 digit years less than 'centyear' are in 20xx, othewise in 19xx. 'imgpath' : 'images/calendar/' // directory with calendar images } // date parsing function function f_tcalParseDate (s_date) { var re_date = /^\s*(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s*$/; if (!re_date.exec(s_date)) return alert ("Invalid date: '" + s_date + "'.\nAccepted format is dd.mm.yyyy.") var n_day = Number(RegExp.$1), n_month = Number(RegExp.$2), n_year = Number(RegExp.$3); if (n_year < 100) n_year += (n_year < this.a_tpl.centyear ? 2000 : 1900); if (n_month < 1 || n_month > 12) return alert ("Invalid month value: '" + n_month + "'.\nAllowed range is 01-12."); var d_numdays = new Date(n_year, n_month, 0); if (n_day > d_numdays.getDate()) return alert("Invalid day of month value: '" + n_day + "'.\nAllowed range for selected month is 01 - " + d_numdays.getDate() + "."); return new Date (n_year, n_month - 1, n_day); } // date generating function function f_tcalGenerDate (d_date) { return ( (d_date.getDate() < 10 ? '0' : '') + d_date.getDate() + "." + (d_date.getMonth() < 9 ? '0' : '') + (d_date.getMonth() + 1) + "." + d_date.getFullYear() ); } // implementation function tcal (a_cfg, a_tpl) { // apply default template if not specified if (!a_tpl) a_tpl = A_TCALDEF; // register in global collections if (!window.A_TCALS) window.A_TCALS = []; if (!window.A_TCALSIDX) window.A_TCALSIDX = []; this.s_id = a_cfg.id ? a_cfg.id : A_TCALS.length; window.A_TCALS[this.s_id] = this; window.A_TCALSIDX[window.A_TCALSIDX.length] = this; // assign methods this.f_show = f_tcalShow; this.f_hide = f_tcalHide; this.f_toggle = f_tcalToggle; this.f_update = f_tcalUpdate; this.f_relDate = f_tcalRelDate; this.f_parseDate = f_tcalParseDate; this.f_generDate = f_tcalGenerDate; // create calendar icon this.s_iconId = 'tcalico_' + this.s_id; this.e_icon = f_getElement(this.s_iconId); if (!this.e_icon) { document.write('Open Calendar'); this.e_icon = f_getElement(this.s_iconId); } // save received parameters this.a_cfg = a_cfg; this.a_tpl = a_tpl; } function f_tcalShow (d_date) { // find input field if (!this.a_cfg.controlname) throw("TC: control name is not specified"); if (this.a_cfg.formname) { var e_form = document.forms[this.a_cfg.formname]; if (!e_form) throw("TC: form '" + this.a_cfg.formname + "' can not be found"); this.e_input = e_form.elements[this.a_cfg.controlname]; } else this.e_input = f_getElement(this.a_cfg.controlname); if (!this.e_input || !this.e_input.tagName || this.e_input.tagName != 'INPUT') throw("TC: element '" + this.a_cfg.controlname + "' does not exist in " + (this.a_cfg.formname ? "form '" + this.a_cfg.controlname + "'" : 'this document')); // dynamically create HTML elements if needed this.e_div = f_getElement('tcal'); if (!this.e_div) { this.e_div = document.createElement("DIV"); this.e_div.id = 'tcal'; document.body.appendChild(this.e_div); } this.e_shade = f_getElement('tcalShade'); if (!this.e_shade) { this.e_shade = document.createElement("DIV"); this.e_shade.id = 'tcalShade'; document.body.appendChild(this.e_shade); } this.e_iframe = f_getElement('tcalIF') if (b_ieFix && !this.e_iframe) { this.e_iframe = document.createElement("IFRAME"); this.e_iframe.style.filter = 'alpha(opacity=0)'; this.e_iframe.id = 'tcalIF'; this.e_iframe.src = this.a_tpl.imgpath + 'pixel.gif'; document.body.appendChild(this.e_iframe); } // hide all calendars f_tcalHideAll(); // generate HTML and show calendar this.e_icon = f_getElement(this.s_iconId); if (!this.f_update()) return; this.e_div.style.visibility = 'visible'; this.e_shade.style.visibility = 'visible'; if (this.e_iframe) this.e_iframe.style.visibility = 'visible'; // change icon and status this.e_icon.src = this.a_tpl.imgpath + 'no_cal.gif'; this.e_icon.title = 'Close Calendar'; this.b_visible = true; } function f_tcalHide (n_date) { if (n_date) this.e_input.value = this.f_generDate(new Date(n_date)); // no action if not visible if (!this.b_visible) return; // hide elements if (this.e_iframe) this.e_iframe.style.visibility = 'hidden'; if (this.e_shade) this.e_shade.style.visibility = 'hidden'; this.e_div.style.visibility = 'hidden'; // change icon and status this.e_icon = f_getElement(this.s_iconId); this.e_icon.src = this.a_tpl.imgpath + 'cal.gif'; this.e_icon.title = 'Open Calendar'; this.b_visible = false; } function f_tcalToggle () { return this.b_visible ? this.f_hide() : this.f_show(); } function f_tcalUpdate (d_date) { var d_today = this.a_cfg.today ? this.f_parseDate(this.a_cfg.today) : f_tcalResetTime(new Date()); var d_selected = this.e_input.value == '' ? (this.a_cfg.selected ? this.f_parseDate(this.a_cfg.selected) : d_today) : this.f_parseDate(this.e_input.value); // figure out date to display if (!d_date) // selected by default d_date = d_selected; else if (typeof(d_date) == 'number') // get from number d_date = f_tcalResetTime(new Date(d_date)); else if (typeof(d_date) == 'string') // parse from string this.f_parseDate(d_date); if (!d_date) return false; // first date to display var d_firstday = new Date(d_date); d_firstday.setDate(1); d_firstday.setDate(1 - (7 + d_firstday.getDay() - this.a_tpl.weekstart) % 7); var a_class, s_html = '' + (this.a_tpl.yearscroll ? '' : '') + '' + (this.a_tpl.yearscroll ? '' : '') + '
' + this.a_tpl.months[d_date.getMonth()] + ' ' + d_date.getFullYear() + '
'; // print weekdays titles for (var i = 0; i < 7; i++) s_html += ''; s_html += '' ; // print calendar table var n_date, n_month, d_current = new Date(d_firstday); while (d_current.getMonth() == d_date.getMonth() || d_current.getMonth() == d_firstday.getMonth()) { // print row heder s_html +=''; for (var n_wday = 0; n_wday < 7; n_wday++) { a_class = []; n_date = d_current.getDate(); n_month = d_current.getMonth(); // other month if (d_current.getMonth() != d_date.getMonth()) a_class[a_class.length] = 'othermonth'; // weekend if (d_current.getDay() == 0 || d_current.getDay() == 6) a_class[a_class.length] = 'weekend'; // today if (d_current.valueOf() == d_today.valueOf()) a_class[a_class.length] = 'today'; // selected if (d_current.valueOf() == d_selected.valueOf()) a_class[a_class.length] = 'selected'; s_html += '' d_current.setDate(++n_date); while (d_current.getDate() != n_date && d_current.getMonth() == n_month) { alert(n_date + "\n" + d_current + "\n" + new Date()); d_current.setHours(d_current.getHours + 1); d_current = f_tcalResetTime(d_current); } } // print row footer s_html +=''; } s_html +='
' + this.a_tpl.weekdays[(this.a_tpl.weekstart + i) % 7] + '
' : '>') + n_date + '
'; // update HTML, positions and sizes this.e_div.innerHTML = s_html; var n_width = this.e_div.offsetWidth; var n_height = this.e_div.offsetHeight; var n_top = f_getPosition (this.e_icon, 'Top') + this.e_icon.offsetHeight; var n_left = f_getPosition (this.e_icon, 'Left') - n_width + this.e_icon.offsetWidth; if (n_left < 0) n_left = 0; this.e_div.style.left = n_left + 'px'; this.e_div.style.top = n_top + 'px'; this.e_shade.style.width = (n_width + 8) + 'px'; this.e_shade.style.left = (n_left - 1) + 'px'; this.e_shade.style.top = (n_top - 1) + 'px'; this.e_shade.innerHTML = b_ieFix ? '
' : '
'; if (this.e_iframe) { this.e_iframe.style.left = n_left + 'px'; this.e_iframe.style.top = n_top + 'px'; this.e_iframe.style.width = (n_width + 6) + 'px'; this.e_iframe.style.height = (n_height + 6) +'px'; } return true; } function f_getPosition (e_elemRef, s_coord) { var n_pos = 0, n_offset, e_elem = e_elemRef; while (e_elem) { n_offset = e_elem["offset" + s_coord]; n_pos += n_offset; e_elem = e_elem.offsetParent; } // margin correction in some browsers if (b_ieMac) n_pos += parseInt(document.body[s_coord.toLowerCase() + 'Margin']); else if (b_safari) n_pos -= n_offset; e_elem = e_elemRef; while (e_elem != document.body) { n_offset = e_elem["scroll" + s_coord]; if (n_offset && e_elem.style.overflow == 'scroll') n_pos -= n_offset; e_elem = e_elem.parentNode; } return n_pos; } function f_tcalRelDate (d_date, d_diff, s_units) { var s_units = (s_units == 'y' ? 'FullYear' : 'Month'); var d_result = new Date(d_date); d_result['set' + s_units](d_date['get' + s_units]() + d_diff); if (d_result.getDate() != d_date.getDate()) d_result.setDate(0); return ' onclick="A_TCALS[\'' + this.s_id + '\'].f_update(' + d_result.valueOf() + ')"'; } function f_tcalHideAll () { for (var i = 0; i < window.A_TCALSIDX.length; i++) window.A_TCALSIDX[i].f_hide(); } function f_tcalResetTime (d_date) { d_date.setHours(0); d_date.setMinutes(0); d_date.setSeconds(0); d_date.setMilliseconds(0); return d_date; } f_getElement = document.all ? function (s_id) { return document.all[s_id] } : function (s_id) { return document.getElementById(s_id) }; if (document.addEventListener) window.addEventListener('scroll', f_tcalHideAll, false); if (window.attachEvent) window.attachEvent('onscroll', f_tcalHideAll); // global variables var s_userAgent = navigator.userAgent.toLowerCase(), re_webkit = /WebKit\/(\d+)/i; var b_mac = s_userAgent.indexOf('mac') != -1, b_ie5 = s_userAgent.indexOf('msie 5') != -1, b_ie6 = s_userAgent.indexOf('msie 6') != -1 && s_userAgent.indexOf('opera') == -1; var b_ieFix = b_ie5 || b_ie6, b_ieMac = b_mac && b_ie5, b_safari = b_mac && re_webkit.exec(s_userAgent) && Number(RegExp.$1) < 500; postfixadmin-3.0.2/users/images/0000775000175000017500000000000013046702635015577 5ustar daviddavidpostfixadmin-3.0.2/users/images/calendar/0000775000175000017500000000000013046702635017350 5ustar daviddavidpostfixadmin-3.0.2/users/images/calendar/no_cal.gif0000664000175000017500000000021311275611511021260 0ustar daviddavidGIF89a¢¥MJJM¥JMJ¥¦¥ÖÓÖÿÿÿÿÿÿ!ù,PhºÜ60Ê)F¸8LX3ÞCUÇQ#ZŽ"Y¢giaËw Ø­*¯Ö 5ú‚´mù8yÓËëÉŠ/aî°$à­Ì'$JÏUzÍn ;postfixadmin-3.0.2/users/images/calendar/prev_year.gif0000664000175000017500000000010511275611511022021 0ustar daviddavidGIF89a ‘¥ÃÙ¢ÂÙH†³ÿÿÿ!ù, œaw’À΄OØ`¶cßEa$];postfixadmin-3.0.2/users/images/calendar/next_year.gif0000664000175000017500000000010611275611511022024 0ustar daviddavidGIF89a ‘¥ÃÙ¢ÂÙH†³ÿÿÿ!ù, Ä>v¢ÃûÜÔPvƒj©qˆ8|‡Y;postfixadmin-3.0.2/users/images/calendar/cal.gif0000664000175000017500000000017711275611511020575 0ustar daviddavidGIF89a¢¥MJJM¥JMJ¥¦¥ÖÓÖÿÿÿÿÿÿ!ù,DhºÜ60Ê)F¸8LX3ÞCUÄX’æ(¢ìyVD,Ç@ Ä«;»:¤,^A›Él7B¨+,[À¢qªüA¯ÏæKÀíz¿‚;postfixadmin-3.0.2/users/images/calendar/shade_bl.png0000664000175000017500000000027111275611511021611 0ustar daviddavid‰PNG  IHDR+<ígAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<KIDATxÚ\Í;À ФacèÀý/ʯu½€ôb‘àfVé…Æ¬å£:”ÈÊôÁ‹3Ï´š:›+{ð¥šiæ_~­ÿ®¯c¨su”IEND®B`‚postfixadmin-3.0.2/users/images/calendar/pixel.gif0000664000175000017500000000010311275611511021144 0ustar daviddavidGIF89a‘ÿÿÿÿÿÿÿ!ÿ ADOBE:IR1.0Þí!ù,T;postfixadmin-3.0.2/users/images/calendar/shade_bm.png0000664000175000017500000000024411275611511021612 0ustar daviddavid‰PNG  IHDR5Y ^gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<6IDATxÚbd``ˆb$ñˆÿàSðˆ™ñ)øÄLø¼%¤d#. n|  €ŠA;ðžöIEND®B`‚postfixadmin-3.0.2/users/images/calendar/shade_mr.png0000664000175000017500000000023311275611511021630 0ustar daviddavid‰PNG  IHDR5ågAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<-IDATxÚbf``b9 bN fa€€ÿL@‚Š™ ˜ŠÁœ`ÐI^s¯#lÙIEND®B`‚postfixadmin-3.0.2/users/images/calendar/prev_mon.gif0000664000175000017500000000007311275611511021656 0ustar daviddavidGIF89a‘¥ÃÙ¢ÂÙH†³ÿÿÿ!ù, œq2 šŠjDc ;postfixadmin-3.0.2/users/images/calendar/shade_br.png0000664000175000017500000000031411275611511021615 0ustar daviddavid‰PNG  IHDRÄRWÓgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<^IDATxÚLŽA€0‰xñ^}”ÿÿCšµ.¸M ™˜ª"²ƒ ¬`³üÕ'<4`àñæÀå .†îˆE¼pYبÄ(E9=î6®IåÏ,Ý áõ 0õv)ïìþX×IEND®B`‚postfixadmin-3.0.2/users/images/calendar/next_mon.gif0000664000175000017500000000007411275611511021661 0ustar daviddavidGIF89a‘¥ÃÙ¢ÂÙH†³ÿÿÿ!ù, Ä.6’ËÀD`aÕqG;postfixadmin-3.0.2/users/images/calendar/shade_tr.png0000664000175000017500000000031011275611511021633 0ustar daviddavid‰PNG  IHDRÄRWÓgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ZIDATxÚLŽQ €0 C ÿ¼ÿ%Eæ:í …ÇJßH 3[ì¯1_•šBÖ> ï’;éä!-úÎPä ˆX¤¡áAnr%)ºdM¢% ¹%QâúoÅ+Àb:!'y72•IEND®B`‚postfixadmin-3.0.2/users/css/0000775000175000017500000000000013046702635015122 5ustar daviddavidpostfixadmin-3.0.2/users/css/calendar.css0000664000175000017500000000352411275611272017407 0ustar daviddavid/* calendar icon */ img.tcalIcon { cursor: pointer; margin-left: 1px; vertical-align: middle; } /* calendar container element */ div#tcal { position: absolute; visibility: hidden; z-index: 100; width: 158px; padding: 2px 0 0 0; } /* all tables in calendar */ div#tcal table { width: 100%; border: 1px solid silver; border-collapse: collapse; background-color: white; } /* navigation table */ div#tcal table.ctrl { border-bottom: 0; } /* navigation buttons */ div#tcal table.ctrl td { width: 15px; height: 20px; } /* month year header */ div#tcal table.ctrl th { background-color: white; color: black; border: 0; } /* week days header */ div#tcal th { border: 1px solid silver; border-collapse: collapse; text-align: center; padding: 3px 0; font-family: tahoma, verdana, arial; font-size: 10px; background-color: gray; color: white; } /* date cells */ div#tcal td { border: 0; border-collapse: collapse; text-align: center; padding: 2px 0; font-family: tahoma, verdana, arial; font-size: 11px; width: 22px; cursor: pointer; } /* date highlight in case of conflicting settings order here determines the priority from least to most important */ div#tcal td.othermonth { color: silver; } div#tcal td.weekend { background-color: #ACD6F5; } div#tcal td.today { border: 1px solid red; } div#tcal td.selected { background-color: #FFB3BE; } /* iframe element used to suppress windowed controls in IE5/6 */ iframe#tcalIF { position: absolute; visibility: hidden; z-index: 98; border: 0; } /* transparent shadow */ div#tcalShade { position: absolute; visibility: hidden; z-index: 99; } div#tcalShade table { border: 0; border-collapse: collapse; width: 100%; } div#tcalShade table td { border: 0; border-collapse: collapse; padding: 0; } postfixadmin-3.0.2/users/css/default.css0000664000175000017500000001267211275611272017266 0ustar daviddavidbody { background: #ffffff; color: #000000; font-family: "BitStream Vera Sans", Verdana, Arial, Helvetica, sans-serif; font-size: 11px; font-weight: normal; text-align: center; } a { text-decoration: none; color: #888888; } a:hover { text-decoration: underline; color: #888888; } a:visited, a:active { color: #888888; } table { /* border-spacing: 0; */ /* padding: 0; */ border-collapse: collapse; /* for IE */ } .button { border: 1px solid #aaaaaa; color: #777777; background: #dddddd; padding: 3px 3px 3px 3px; font-size: 11px; } .button:hover { background: #BCFF36; color: #888888; } .flat { border: 1px solid #888888; } ul.flash-info { border:2px solid #AFE1A6; /* medium green */ padding:1em; max-width:730px; margin-left:auto; margin-right:auto; list-style:none; } ul.flash-error { border:2px solid #FF6347; /* tomato */ padding:1em; max-width:730px; margin-left:auto; margin-right:auto; list-style:none; } .error_msg { color: #d01313; } .standout { color: maroon; padding: 3px 3px 3px 3px; text-align: center; } #login_header { width: 750px; margin: 0 auto; padding-bottom: 10px; text-align: left; } #login { width: 750px; margin: 0 auto; } #login_table { border-left: 8px solid gray; border-right: 8px solid gray; background: #eeeeee; width: 350px; margin: 0 auto; border-collapse: separate; border-spacing: 10px; } #login_table h4 { font-size: 13px; } #menu, #tabbar { width: 750px; margin: 0 auto; padding-top: 10px; white-space: nowrap; } #menu ul, #tabbar ul { padding: 0; margin: 0; margin-left:auto; margin-right:auto; list-style: none; } #menu li, #tabbar li { float: left; background: #efefef; margin-right: 3px; border-top: 4px solid #aaaaaa; } #menu li:hover, #menu li.sfhover, #tabbar li:hover, #tabbar li.sfhover { background: #BFFF00; } #menu li ul, #tabbar li ul { position: absolute; width: auto; left: -999em; background: #FFFFFF; border:2px solid white; border-top:none; } #menu li:hover ul, #menu li.sfhover ul, #tabbar li:hover ul, #tabbar li.sfhover ul { left: auto; } #menu li ul li, #tabbar li ul li { float: none; margin-right: 0px; border-top:2px solid white;; text-align:left; } #menu a, #tabbar a { display: block; width: auto; padding: 20px 5px 5px 5px; color: #888888; } #menu a:hover, #tabbar a:hover { color: #888888; } #menu li ul li a, #tabbar li ul li a { padding: 5px 5px 5px 5px; } #main_menu, #edit_form { width: 750px; margin: 0 auto; } #edit_form table { margin: 0 auto; padding-top: 10px; text-align: left; width: 500px; border: 1px solid #efefef; } #edit_form h3 { text-align: center; font-size: 12px; margin: 0; background: #AFE1A6; /*#b4004a;*/ border: 1px solid #bbb; line-height: 25px; color: #555555; } .hlp_center { text-align: center; } .help_text { background: #efefef; border-left: 1px solid #bbbbbb; border-right: 1px solid #bbbbbb; text-align: center; padding-top: 5px; padding-bottom: 5px; } #main_menu table { margin: 0 auto; text-align: left; padding-top: 20px; padding-bottom: 20px; } #main_menu table td { padding-left: 30px; padding-bottom: 5px; } #main_menu a { color: #888888; padding-left: 8px; } #main_menu a:hover { color: #40B33C; /*#CD6A6A;*/ text-decoration: none; padding-left: 4px; border-bottom: 1px solid #40B33C; border-left: 4px solid #40B33C; } #overview, #admin_domains, #admin_virtual { width: 750px; margin: 0 auto; background: #AFE1A6; /*#9ACD32;*/ border: 1px solid #bbb; } #overview h4, #overview P, #overview FORM, #admin_virtual h4, #admin_virtual P, #admin_virtual FORM { display: inline; padding-right: 10px; line-height: 30px; } #alias_domain_table, #alias_table, #mailbox_table, #overview_table, #log_table, #admin_table { width: 750px; margin: 0px auto; border: 1px solid #efefef; } #alias_domain_table .header, #alias_table .header, #mailbox_table .header, #overview_table .header, #log_table .header, #admin_table .header { line-height: 20px; background: #efefef; color: black; } #alias_domain_table .hilightoff, #alias_table .hilightoff, #mailbox_table .hilightoff, #overview_table .hilightoff, #log_table .hilightoff, #admin_table .hilighoff { background: white; } #alias_domain_table .hilighton, #alias_table .hilighton, #mailbox_table .hilighton, #overview_table .hilighton, #log_table .hilighton, #admin_table .hilighton { background: #D9FF43; /*#D6FF85;*/ /*#ffdddd;*/ } #alias_domain_table tr:hover, #alias_table tr:hover, #mailbox_table tr:hover, #overview_table tr:hover, #log_table tr:hover, #admin_table tr:hover { background: #D9FF43; /*#D6FF85;*/ /*#ffdddd;*/ } #alias_domain_table h3, #alias_table h3, #mailbox_table h3, #overview_table h3, #log_table h3, #admin_table h3 { background: silver; text-align: left; font-size: 12px; font-weight: bold; padding-left: 20px; line-height: 25px; margin: 0; } #alias_domain_table td, #alias_table td, #mailbox_table td, #overview_table td, #log_table td, #admin_table td { text-align : left; } #footer { width: 750px; margin: 20px auto; border-top: 1px solid #bbbbbb; background: #efefef; color: #999999; line-height: 20px; text-align: left; padding-left: 15px; font-size: 9px; } #footer a { text-decoration: none; color: #999999; } #footer a:hover { text-decoration: underline; color: #777777; } div.setup { width:700px; margin-left:auto; margin-right:auto; text-align: left; } div.setup li { padding-bottom:1em; } div.nav_bar { text-align: left; width: 750px; margin: 0 auto; } postfixadmin-3.0.2/users/password.php0000664000175000017500000000474412717673234016724 0ustar daviddavid 0) { flash_error($validpass[0]); # TODO: honor all error messages, not only the first one $error += 1; } $mh = new MailboxHandler; if(!$mh->login($username, $fPassword_current)) { $error += 1; $pPassword_password_current_text = $PALANG['pPassword_password_current_text_error']; } if (empty ($fPassword) or ($fPassword != $fPassword2)) { $error += 1; $pPassword_password_text = $PALANG['pPassword_password_text_error']; } if ($error == 0) { $mh->init($username); # TODO: error handling if($mh->change_pw($fPassword, $fPassword_current) ) { flash_info(Config::Lang_f('pPassword_result_success', $username)); header("Location: main.php"); exit(0); } else { flash_error(Config::Lang_f('pPassword_result_error', $username)); } } } $smarty->assign ('SESSID_USERNAME', $username); $smarty->assign ('pPassword_password_current_text', $pPassword_password_current_text, false); $smarty->assign ('pPassword_password_text', $pPassword_password_text, false); $smarty->assign ('smarty_template', 'password'); $smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> postfixadmin-3.0.2/users/main.php0000664000175000017500000000206312237726354015775 0ustar daviddavidcheck_vacation()) { $tummVacationtext = $PALANG['pUsersMain_vacationSet']; } else { $tummVacationtext = $PALANG['pUsersMain_vacation']; } $smarty->assign ('tummVacationtext', $tummVacationtext); $smarty->assign ('smarty_template', 'users_main'); $smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> postfixadmin-3.0.2/users/vacation.php0000664000175000017500000000112412237726354016652 0ustar daviddavid postfixadmin-3.0.2/users/index.php0000664000175000017500000000117212237726354016160 0ustar daviddavidlogin($fUsername, $fPassword)) { session_regenerate_id(); $_SESSION['sessid'] = array(); $_SESSION['sessid']['roles'] = array(); $_SESSION['sessid']['roles'][] = 'user'; $_SESSION['sessid']['username'] = $fUsername; $_SESSION['PFA_token'] = md5(uniqid(rand(), true)); header("Location: main.php"); exit; } else { error_log("PostfixAdmin login failed (username: $fUsername)"); flash_error($PALANG['pLogin_failed']); } } $smarty->assign ('language_selector', language_selector(), false); $smarty->assign ('smarty_template', 'login'); $smarty->assign ('logintype', 'user'); $smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> postfixadmin-3.0.2/tests/0000775000175000017500000000000013046702635014333 5ustar daviddavidpostfixadmin-3.0.2/tests/RemoteUserTest.php0000664000175000017500000000172411171453612017775 0ustar daviddavidassertTrue($this->user->login($this->username, $this->password)); $this->assertTrue($this->user->changePassword($this->password, 'foobar')); $this->assertTrue($this->user->login($this->username, 'foobar')); } catch(Exception $e) { var_dump($this->xmlrpc_client->getHttpClient()->getLastResponse()->getBody()); } } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/tests/RemoteTest.php0000664000175000017500000000207311540506513017133 0ustar daviddavidxmlrpc_client = new Zend_XmlRpc_Client($this->server_url); $http_client = $this->xmlrpc_client->getHttpClient(); $http_client->setCookieJar(); $login_object = $this->xmlrpc_client->getProxy('login'); $success = $login_object->login($this->username, $this->password); if(!$success) { var_dump($success); die("Failed to login to xmlrpc interface"); } } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/tests/RemoteVacationTest.php0000664000175000017500000000477011171453612020627 0ustar daviddavidassertTrue($this->vacation->isVacationSupported()); } catch(Exception $e){ var_dump($e); var_dump($this->xmlrpc_client->getHttpClient()->getLastResponse()->getBody()); die("fail.."); } } public function testCheckVacation() { $this->assertFalse($this->vacation->checkVacation()); } public function testGetDetails() { $details = $this->vacation->getDetails(); $this->assertFalse($details); // empty by default (thansk to tearDown/setUp); } public function testSetAway() { try { $this->assertFalse($this->vacation->checkVacation()); $this->assertTrue($this->vacation->setAway('zzzz', 'aaaa')); $this->assertTrue($this->vacation->checkVacation()); } catch(Exception $e) { var_dump($this->xmlrpc_client->getHttpClient()->getLastResponse()->getBody()); } $details = $this->vacation->getDetails(); $this->assertEqual($details['subject'], 'zzzz'); $this->assertEqual($details['body'], 'aaaa'); $this->vacation->remove(); $details = $this->vacation->getDetails(); $this->assertEqual($details['subject'], 'zzzz'); $this->assertEqual($details['body'], 'aaaa'); $this->vacation->setAway('subject', 'body'); $details = $this->vacation->getDetails(); $this->assertEqual($details['subject'], 'subject'); $this->assertEqual($details['body'], 'body'); } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/tests/RemoteAliasTest.php0000664000175000017500000000406611171453612020112 0ustar daviddavidassertEqual($this->alias->get(), array()); } catch(Exception $e) { var_dump($this->xmlrpc_client->getHttpClient()->getLastResponse()->getBody()); } } public function testHasStoreAndForward() { $this->assertTrue($this->alias->hasStoreAndForward()); } public function testUpdateRemoteOnly() { $this->assertTrue($this->alias->update(array('roger@rabbit.com'), 'remote_only')); $this->assertFalse($this->alias->hasStoreAndForward()); $this->assertTrue($this->alias->update(array('roger@rabbit.com'), 'remote_only')); $this->assertTrue($this->alias->update(array('roger@rabbit.com', 'fish@fish.net', 'road@runner.com'), 'remote_only')); $this->assertEqual($this->alias->get(), array('roger@rabbit.com', 'fish@fish.net', 'road@runner.com')); $this->assertFalse($this->alias->hasStoreAndForward()); } public function testUpdateForwardandStore() { $orig_aliases = $this->alias->get(); if(!is_array($orig_aliases)) { $orig_aliases = array(); } $orig_aliases[] = 'roger@robbit.com'; $this->assertTrue($this->alias->update($orig_aliases, 'forward_and_store')); $this->assertEqual($this->alias->get(), $orig_aliases); $this->assertTrue($this->alias->update(array($this->username), 'forward_and_store')); $this->assertEqual($this->alias->get(), array()); } } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/tests/common.php0000664000175000017500000000032011171453612016322 0ustar daviddavid 0)) $fDomain = $list_domains[0]; } elseif ($_SERVER['REQUEST_METHOD'] == "POST") { if (isset ($_POST['fDomain'])) $fDomain = escape_string ($_POST['fDomain']); } else { die('Unknown request method'); } if (! (check_owner ($SESSID_USERNAME, $fDomain) || authentication_has_role('global-admin'))) { $error = 1; flash_error($PALANG['pViewlog_result_error']); } // we need to initialize $tLog as an array! $tLog = array(); if ($error != 1) { $table_log = table_by_key('log'); $query = "SELECT timestamp,username,domain,action,data FROM $table_log WHERE domain='$fDomain' ORDER BY timestamp DESC LIMIT 10"; if (db_pgsql()) { $query = "SELECT extract(epoch from timestamp) as timestamp,username,domain,action,data FROM $table_log WHERE domain='$fDomain' ORDER BY timestamp DESC LIMIT 10"; } $result=db_query($query); if ($result['rows'] > 0) { while ($row = db_array ($result['result'])) { if (db_pgsql()) { $row['timestamp']=gmstrftime('%c %Z',$row['timestamp']); } $tLog[] = $row; } } } for ($i = 0; $i < count ($tLog); $i++) $tLog[$i]['action'] = $PALANG ['pViewlog_action_'.$tLog [$i]['action']]; $smarty->assign ('domain_list', $list_domains); $smarty->assign ('domain_selected', $fDomain); $smarty->assign ('tLog', $tLog,false); $smarty->assign ('fDomain', $fDomain); $smarty->assign ('smarty_template', 'viewlog'); $smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> postfixadmin-3.0.2/config.inc.php0000664000175000017500000005612213002233165015712 0ustar daviddavid' Allows to add or override $PALANG interface texts. If you add new texts, please always prefix them with 'x_' (for example $PALANG['x_mytext'] = 'foo') to avoid they clash with texts that might be added to languages/*.lang in future versions of PostfixAdmin. Please also make sure that all your added texts are included in all sections - that includes all 'case "XY":' sections and the 'default:' section (for users that don't have any of the languages specified in the 'case "XY":' section). Usually the 'default:' section should contain english text. If you modify an existing text/translation, please consider to report it to the bugtracker on http://sf.net/projects/postfixadmin so that all users can benefit from the corrected text/translation. Returns: modified $PALANG array */ /* function language_hook($PALANG, $language) { switch ($language) { case "de": $PALANG['x_whatever'] = 'foo'; break; case "fr": $PALANG['x_whatever'] = 'bar'; break; default: $PALANG['x_whatever'] = 'foobar'; } return $PALANG; } */ // Database Config // mysql = MySQL 3.23 and 4.0, 4.1 or 5 // mysqli = MySQL 4.1+ or MariaDB // pgsql = PostgreSQL // sqlite = SQLite 3 $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'postfixadmin'; $CONF['database_name'] = 'postfix'; // If you need to specify a different port for a MYSQL database connection, use e.g. // $CONF['database_host'] = '172.30.33.66:3308'; // If you need to specify a different port for POSTGRESQL database connection // uncomment and change the following // $CONF['database_port'] = '5432'; // If sqlite is used, specify the database file path: // $CONF['database_name'] = '/etc/postfix/sqlite/postfixadmin.db' // Here, if you need, you can customize table names. $CONF['database_prefix'] = ''; $CONF['database_tables'] = array ( 'admin' => 'admin', 'alias' => 'alias', 'alias_domain' => 'alias_domain', 'config' => 'config', 'domain' => 'domain', 'domain_admins' => 'domain_admins', 'fetchmail' => 'fetchmail', 'log' => 'log', 'mailbox' => 'mailbox', 'vacation' => 'vacation', 'vacation_notification' => 'vacation_notification', 'quota' => 'quota', 'quota2' => 'quota2', ); // Site Admin // Define the Site Admin's email address below. // This will be used to send emails from to create mailboxes and // from Send Email / Broadcast message pages. // Leave blank to send email from the logged-in Admin's Email address. $CONF['admin_email'] = ''; // Mail Server // Hostname (FQDN) of your mail server. // This is used to send email to Postfix in order to create mailboxes. $CONF['smtp_server'] = 'localhost'; $CONF['smtp_port'] = '25'; // SMTP Client // Hostname (FQDN) of the server hosting Postfix Admin // Used in the HELO when sending emails from Postfix Admin $CONF['smtp_client'] = ''; // Encrypt // In what way do you want the passwords to be crypted? // md5crypt = internal postfix admin md5 // md5 = md5 sum of the password // system = whatever you have set as your PHP system default // cleartext = clear text passwords (ouch!) // mysql_encrypt = useful for PAM integration // authlib = support for courier-authlib style passwords - also set $CONF['authlib_default_flavor'] // dovecot:CRYPT-METHOD = use dovecotpw -s 'CRYPT-METHOD'. Example: dovecot:CRAM-MD5 // IMPORTANT: // - don't use dovecot:* methods that include the username in the hash - you won't be able to login to PostfixAdmin in this case // - you'll need at least dovecot 2.1 for salted passwords ('doveadm pw' 2.0.x doesn't support the '-t' option) // - dovecot 2.0.0 - 2.0.7 is not supported $CONF['encrypt'] = 'md5crypt'; // In what flavor should courier-authlib style passwords be encrypted? // (only used if $CONF['encrypt'] == 'authlib') // md5 = {md5} + base64 encoded md5 hash // md5raw = {md5raw} + plain encoded md5 hash // SHA = {SHA} + base64-encoded sha1 hash // crypt = {crypt} + Standard UNIX DES-encrypted with 2-character salt $CONF['authlib_default_flavor'] = 'md5raw'; // If you use the dovecot encryption method: where is the dovecotpw binary located? // for dovecot 1.x // $CONF['dovecotpw'] = "/usr/sbin/dovecotpw"; // for dovecot 2.x (dovecot 2.0.0 - 2.0.7 is not supported!) $CONF['dovecotpw'] = "/usr/sbin/doveadm pw"; // Password validation // New/changed passwords will be validated using all regular expressions in the array. // If a password doesn't match one of the regular expressions, the corresponding // error message from $PALANG (see languages/*) will be displayed. // See http://de3.php.net/manual/en/reference.pcre.pattern.syntax.php for details // about the regular expression syntax. // If you need custom error messages, you can add them using $CONF['language_hook']. // If a $PALANG text contains a %s, you can add its value after the $PALANG key // (separated with a space). $CONF['password_validation'] = array( # '/regular expression/' => '$PALANG key (optional: + parameter)', '/.{5}/' => 'password_too_short 5', # minimum length 5 characters '/([a-zA-Z].*){3}/' => 'password_no_characters 3', # must contain at least 3 characters '/([0-9].*){2}/' => 'password_no_digits 2', # must contain at least 2 digits ); // Generate Password // Generate a random password for a mailbox or admin and display it. // If you want to automagically generate passwords set this to 'YES'. $CONF['generate_password'] = 'NO'; // Show Password // Always show password after adding a mailbox or admin. // If you want to always see what password was set set this to 'YES'. $CONF['show_password'] = 'NO'; // Page Size // Set the number of entries that you would like to see // in one page. $CONF['page_size'] = '10'; // Default Aliases // The default aliases that need to be created for all domains. // You can specify the target address in two ways: // a) a full mail address // b) only a localpart ('postmaster' => 'admin') - the alias target will point to the same domain $CONF['default_aliases'] = array ( 'abuse' => 'abuse@change-this-to-your.domain.tld', 'hostmaster' => 'hostmaster@change-this-to-your.domain.tld', 'postmaster' => 'postmaster@change-this-to-your.domain.tld', 'webmaster' => 'webmaster@change-this-to-your.domain.tld' ); // Mailboxes // If you want to store the mailboxes per domain set this to 'YES'. // Examples: // YES: /usr/local/virtual/domain.tld/username@domain.tld // NO: /usr/local/virtual/username@domain.tld $CONF['domain_path'] = 'YES'; // If you don't want to have the domain in your mailbox set this to 'NO'. // Examples: // YES: /usr/local/virtual/domain.tld/username@domain.tld // NO: /usr/local/virtual/domain.tld/username // Note: If $CONF['domain_path'] is set to NO, this setting will be forced to YES. $CONF['domain_in_mailbox'] = 'NO'; // If you want to define your own function to generate a maildir path set this to the name of the function. // Notes: // - this configuration directive will override both domain_path and domain_in_mailbox // - the maildir_name_hook() function example is present below, commented out // - if the function does not exist the program will default to the above domain_path and domain_in_mailbox settings $CONF['maildir_name_hook'] = 'NO'; /* maildir_name_hook example function Called when creating a mailbox if $CONF['maildir_name_hook'] == '' - allows for customized maildir paths determined by a custom function - the example below will prepend a single-character directory to the beginning of the maildir, splitting domains more or less evenly over 36 directories for improved filesystem performance with large numbers of domains. Returns: maildir path ie. I/example.com/user/ */ /* function maildir_name_hook($domain, $user) { $chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $dir_index = hexdec(substr(md5($domain), 28)) % strlen($chars); $dir = substr($chars, $dir_index, 1); return sprintf("%s/%s/%s/", $dir, $domain, $user); } */ /* *_struct_hook - change, add or remove fields If you need additional fields or want to change or remove existing fields, you can write a hook function to modify $struct in the *Handler classes. The edit form will automatically be updated according to the modified $struct. The list page is not yet updated automatically. You can define one hook function per class, named like the primary database table of that class. The hook function is called with $struct as parameter and must return the modified $struct. Note: Adding a field to $struct adds the handling of this field in PostfixAdmin, but it does not create it in the database. You have to do that yourself. Please follow the naming policy for custom database fields and tables on https://sourceforge.net/p/postfixadmin/wiki/Custom_fields/ to avoid clashes with future versions of PostfixAdmin. See initStruct() in the *Handler class for the default $struct. See pacol() in functions.inc.php for the available flags on each column. Example: function x_struct_admin_modify($struct) { $struct['superadmin']['editable'] = 0; # make the 'superadmin' flag read-only $struct['superadmin']['display_in_form'] = 0; # don't display the 'superadmin' flag in edit form $struct['x_newfield'] = pacol( [...] ); # additional field 'x_newfield' return $struct; # important! } $CONF['admin_struct_hook'] = 'x_struct_admin_modify'; */ $CONF['admin_struct_hook'] = ''; $CONF['domain_struct_hook'] = ''; $CONF['alias_struct_hook'] = ''; $CONF['mailbox_struct_hook'] = ''; $CONF['alias_domain_struct_hook'] = ''; $CONF['fetchmail_struct_hook'] = ''; // Default Domain Values // Specify your default values below. Quota in MB. $CONF['aliases'] = '10'; $CONF['mailboxes'] = '10'; $CONF['maxquota'] = '10'; $CONF['domain_quota_default'] = '2048'; // Quota // When you want to enforce quota for your mailbox users set this to 'YES'. $CONF['quota'] = 'NO'; // If you want to enforce domain-level quotas set this to 'YES'. $CONF['domain_quota'] = 'YES'; // You can either use '1024000' or '1048576' $CONF['quota_multiplier'] = '1024000'; // Transport // If you want to define additional transport options for a domain set this to 'YES'. // Read the transport file of the Postfix documentation. $CONF['transport'] = 'NO'; // Transport options // If you want to define additional transport options put them in array below. $CONF['transport_options'] = array ( 'virtual', // for virtual accounts 'local', // for system accounts 'relay' // for backup mx ); // Transport default // You should define default transport. It must be in array above. $CONF['transport_default'] = 'virtual'; // // // Virtual Vacation Stuff // // // If you want to use virtual vacation for you mailbox users set this to 'YES'. // NOTE: Make sure that you install the vacation module. (See VIRTUAL-VACATION/) $CONF['vacation'] = 'NO'; // This is the autoreply domain that you will need to set in your Postfix // transport maps to handle virtual vacations. It does not need to be a // real domain (i.e. you don't need to setup DNS for it). // This domain must exclusively be used for vacation. Do NOT use it for "normal" mail addresses. $CONF['vacation_domain'] = 'autoreply.change-this-to-your.domain.tld'; // Vacation Control // If you want users to take control of vacation set this to 'YES'. $CONF['vacation_control'] ='YES'; // Vacation Control for admins // Set to 'YES' if your domain admins should be able to edit user vacation. $CONF['vacation_control_admin'] = 'YES'; // ReplyType options // If you want to define additional reply options put them in array below. // The array has the format seconds between replies => $PALANG text // Special values for seconds are: // 0 => only reply to the first mail while on vacation // 1 => reply on every mail $CONF['vacation_choice_of_reply'] = array ( 0 => 'reply_once', // Sends only Once the message during Out of Office # considered annoying - only send a reply on every mail if you really need it # 1 => 'reply_every_mail', // Reply on every email 60*60 *24*7 => 'reply_once_per_week' // Reply if last autoreply was at least a week ago ); // // End Vacation Stuff. // // Alias Control // Postfix Admin inserts an alias in the alias table for every mailbox it creates. // The reason for this is that when you want catch-all and normal mailboxes // to work you need to have the mailbox replicated in the alias table. // If you want to take control of these aliases as well set this to 'YES'. // Alias control for superadmins $CONF['alias_control'] = 'YES'; // Alias Control for domain admins $CONF['alias_control_admin'] = 'YES'; // Special Alias Control // Set to 'NO' if your domain admins shouldn't be able to edit the default aliases // as defined in $CONF['default_aliases'] $CONF['special_alias_control'] = 'NO'; // Alias Goto Field Limit // Set the max number of entries that you would like to see // in one 'goto' field in overview, the rest will be hidden and "[and X more...]" will be added. // '0' means no limits. $CONF['alias_goto_limit'] = '0'; // Alias Domains // Alias domains allow to "mirror" aliases and mailboxes to another domain. This makes // configuration easier if you need the same set of aliases on multiple domains, but // also requires postfix to do more database queries. // Note: If you update from 2.2.x or earlier, you will have to update your postfix configuration. // Set to 'NO' to disable alias domains. $CONF['alias_domain'] = 'YES'; // Backup // If you don't want backup tab set this to 'NO'; $CONF['backup'] = 'NO'; // Send Mail // If you don't want sendmail tab set this to 'NO'; $CONF['sendmail'] = 'YES'; // Logging // If you don't want logging set this to 'NO'; $CONF['logging'] = 'YES'; // Fetchmail // If you don't want fetchmail tab set this to 'NO'; $CONF['fetchmail'] = 'YES'; // fetchmail_extra_options allows users to specify any fetchmail options and any MDA // (it will even accept 'rm -rf /' as MDA!) // This should be set to NO, except if you *really* trust *all* your users. $CONF['fetchmail_extra_options'] = 'NO'; // Header $CONF['show_header_text'] = 'NO'; $CONF['header_text'] = ':: Postfix Admin ::'; // Footer // Below information will be on all pages. // If you don't want the footer information to appear set this to 'NO'. $CONF['show_footer_text'] = 'YES'; $CONF['footer_text'] = 'Return to change-this-to-your.domain.tld'; $CONF['footer_link'] = 'http://change-this-to-your.domain.tld'; // MOTD ("Motto of the day") // You can display a MOTD below the menu on all pages. // This can be configured seperately for users, domain admins and superadmins $CONF['motd_user'] = ''; $CONF['motd_admin'] = ''; $CONF['motd_superadmin'] = ''; // Welcome Message // This message is send to every newly created mailbox. // Change the text between EOM. $CONF['welcome_text'] = <<= 1.2, set this to yes. // Note about dovecot config: table "quota" is for 1.0 & 1.1, table "quota2" is for dovecot 1.2 and newer $CONF['new_quota_table'] = 'YES'; // // Normally, the TCP port number does not have to be specified. // $CONF['create_mailbox_subdirs_hostport']=143; // // If you have trouble connecting to the IMAP-server, then specify // a value for $CONF['create_mailbox_subdirs_hostoptions']. These // are some examples to experiment with: // $CONF['create_mailbox_subdirs_hostoptions']=array('notls'); // $CONF['create_mailbox_subdirs_hostoptions']=array('novalidate-cert','norsh'); // See also the "Optional flags for names" table at // http://www.php.net/manual/en/function.imap-open.php $CONF['create_mailbox_subdirs_hostoptions'] = array(''); // Theme Config // Specify your own logo and CSS file $CONF['theme_logo'] = 'images/logo-default.png'; $CONF['theme_css'] = 'css/default.css'; // If you want to customize some styles without editing the $CONF['theme_css'] file, // you can add a custom CSS file. It will be included after $CONF['theme_css']. $CONF['theme_custom_css'] = ''; // XMLRPC Interface. // This should be only of use if you wish to use e.g the // Postfixadmin-Squirrelmail package // change to boolean true to enable xmlrpc $CONF['xmlrpc_enabled'] = false; // If you want to keep most settings at default values and/or want to ensure // that future updates work without problems, you can use a separate config // file (config.local.php) instead of editing this file and override some // settings there. if (file_exists(dirname(__FILE__) . '/config.local.php')) { include_once(dirname(__FILE__) . '/config.local.php'); } // // END OF CONFIG FILE // /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/images/0000775000175000017500000000000013046702636014437 5ustar daviddavidpostfixadmin-3.0.2/images/arrow-u.png0000664000175000017500000000055510601151304016526 0ustar daviddavid‰PNG  IHDR‘h6sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ< pHYsÄÄ•+ÖIDAT8O•’¡ƒ0†Ùû?KSSX ƒ! ™Cv!a ¢û²¿é CÐSíÝ}÷ß]{rÎeIdYœ=½¦ÇýV×õõk¸âŒs~€µ–ŒËŸá$P†€1FùeYVU¥3NBAÇH‡ÒEQô}?ŽÏXŒ‰x n†Úóü&;9¯FT½üœS…aP“Ÿ„}€î5tÂ`[@êÔkÛvY0®ˆ &‘mKš2l°ë:µÑ4 j‚·C« 1ñrtÝY+¥=œ6ö5~ÁÕç;Â|Ž«o9)–×NIEND®B`‚postfixadmin-3.0.2/images/postbox.png0000664000175000017500000001041110601151304016620 0ustar daviddavid‰PNG  IHDR00Wù‡bKGDùC» pHYs  šœtIMEÔ ,(›ëtEXtCommentCreated with The GIMPïd%nmIDATxÚÕš}T”eúÇ?3 ó Œ¼ˆB`–È'ƒhu _SC(«cëË©\›»¢¹Ç°·SÚ‹V§ÌŽ™e¦dÚz¶–ˆÚB`â² Š0 ¨¼ÌÀÌ0/÷ïÖç¿l5ng»þ|žg®çùÞ÷u]ßëúÞ#B~Å&ÿ¥^ôì³ÏRZZzÃý*~)¤­­‰'þëÛ­VKKK Ë–-ãØ±c¿>~~~§§SÜßÏþð^zé¥_ßÒRôññ¼:k•••äææÒÑÑñë Püoº…µ¶²)05,\¸¿ýíoÿýI<<<ü£kúøx^‰‰aYa!J¥’©S§þ2ž~úi:::èèè »»›èèhÆŽËĉ¹ÿþû¯ø¥RyÅëa­­Œ?žæææ_ÀÎ;©¬¬Äjµ¢Óé0›ÍÔÔÔH÷_{í5{ì1.\ˆt=88º»émn–Vÿ²Éd2 Ã6„Ìf3K–,ÁétòðÃsçw€Çã¡©©‰ÚÚZvìØAMM ¹¹¹dffòØc1wîÜï“M.Çõ»ßÑÁO<ÁšœæÖÕàããsÝÜpMIìr¹Xºt)§OŸæ­·Þ`ß¾}\¼x‘Q£F‘™™Iaa!»wï&((€òòræÍ›Gnn.§OŸ& €ÖÖVf̘ACCËÏ£;&†¡¡!t:Ýõ%—¸{ñÅ <(V®\)òóóEOOϟݼy³„\.þþþaaa"!!AÔlØ Äk¯½&„â“O>YYYB¯×‹Ó§O‹ë±«hhh*•J,_¾\?~\˜L&át:òy—Ë%fÏž- ¢££…Á`€¨Ù°AüéO’!Äàà ())/^¼q¼^¯GL›6MFÑÓÓ#–/_.^}õÕ«:­­­jµZ$&&Š´´41aÂ%j6lkÖ¬&“IÔÕÕ‰aòŸJØéÓ§“——ÇáÇIIIÁ`0››ËÊ•+¯–qqq„‡‡c6›Ñét¤¥¥(ݯ®®Æd2ñÄOpéÒ¥ÏÄ¥¥¥èõzæÏŸÏ’%Kèèè`ãÆŒ3¹üêy¯ÑhðóóÃëõÒÙÙÉW_}%1ñÀÀ™™™¤¤¤P\\Ljj*{÷î•~ëñxþÿ*++ÉÉÉÁb±0qâDÖ¯_Ó餠 €Å‹³sçNzzz~Ò©*• ‡ÃA`` ™™™ð¡¡!ôz=·Ür h4-ZĬY³¨ªªÁ׎½½\ºt‰¸¸8V¯^ÍÐÐ&“‰É“'“››‹Ó餺ºšO?ý”˜˜fΜIFFƈËd2©µZ­”––{¹êaµZÉÌÌÄb±°hÑ".\È|ÀôéÓYµjÅÅÅ× À§¨¨¨è‡ª««1›ÍŒ3†wß}— & R©0›Íœ¸öðz½TWWGUUÁÁÁ8~~~h4„Èd2t:‡žžÂÂÂX¿~=o¿ý6¼óÎ;´´´`³Ùˆˆˆà·¿ý-/^À`00gÎöïßOUUÙÙÙøûûÓØØÈàà †üü|Þ{ï=Μ9Cdd$ëׯ¿6mmm!¦½½…B¯¯/F£½^Z­Æår¡T* A©T¢T*BpñâEÔj5K—.åÀDGGιsç(++#..€ææfÊËË)(( ++‹íÛ·ÓÑÑÁÌ™3±Ûí4773<<Ì„ ())¡¸¸˜]»v‘——wuGŽ!&&†Ó§Oc6›B —ËÆf³aµZ¥900€ÝnÇívãr¹p¹\ K!g³ÙðññaÍš5,Y²„o¿ý€ÐÐPL&O>ù$ÕÕÕ<õÔS¤¦¦²sçN©` ÑÐЀÃáà÷¿ÿ=GÅf³Q\\ÌÿUF¨¨¨ !!ÒÒR„(•J 2™ —Ë…ÃáÀét200€ÛíF&“¡R©FT …BAww76›3gΰ|ùryä‘G¨¯¯§¢¢‚üü|bbbøóŸÿL}}=k×®%22’={öàõz‰‹‹£­­ÖÖVÂÂÂX¼x1eeex½Þ+ ­­qãÆQSSƒJ¥B.—ãõzñx<èt: AAAøûûãt:±Z­¸\.|||ðõõÅ××Wrìt:IMMeóæÍtuu±fÍÊär²³³¹ë®»xþùçijjbݺuhµZV¯^Ãá`ÕªU( jjjFbJJ —.]¢««ëʾùæôz½T%´Z­ôQ …BJæËu^¯×KCÈÐÐ^¯W"+!¾¾¾9r„×_»ï¾›§žz «ÕÊ_|ÁÙ³gyóÍ7INNfãÆ °víZúúúxá…Ðétäääàv»ijjb``€±cÇb4¥êø#ååå$%%qâÄ d2~~~«* <2™ ¯×‹ÝnÇn·KmC@@Z­VjœN'v»ììlRRRذao¼ñü1‰‰‰Øív–-[†ÍfcË–-ñÌ3Ï V«Y±bf³™;wHrr²´8III?Ò”$uuuüæ7¿¡¢¢…BR©Äßß|}}¥X—ÉdÈår)/Ün7n·¹\ŽJ¥’vdxx˜£G¢×ëÙ¶m÷ÝwŸT(&MšÄ–-[èêêâÑGE&“ñÜsÏáp8غu+‘‘‘Ì;—üãTUUIÌž’’Â7ß|ócíííX­VÔj5õõõ"—Ë¥U«Õ„„„ ÓéËå(•JT*!jµzD Ñ×ׇÇãaüøñìÙ³‡¥K—rþüy^yåV­ZÅ®]»X·nIII¼ôÒK\¸puëÖ@AAíííìÝ»—¨¨(8þ<Lš4‰žž,ËH&®¬¬dìØ±œ9s†¾¾>ÆGHH¨T*¼^¯´jµZ ¥R‰¯×+•¸Í(•Jüqùë_ÿÊ<À´iÓxüñÇæÃ?dÇŽ,^¼˜¼¼<ÊËËÙ²e YYY¤¥¥ÑÐÐ@{{;)))h4¢¢¢Ðjµ#˜]ðõ×_“””Dii©´â—CÈ`0àïï/…ÇåY&“Iñ¯ÑhP(#Zm™LFcc#ÕÕÕÜqÇäååñÈ#ðù矓ŸŸOBBK–,Á`0pàÀÊÊʘ5k>ú('Nœ`ÿþý¤§§3zôh.\¸€ÇãaôèÑ$&&räÈ233Ñh4ȇ‡‡ùç?ÿÉ”)SÐëõèõzñõõ•Y«ÕŒÑh$22’ððp”J¥b—Á\Ö~Ün7B.\ȦM›0±qãFÆŽË;ï¼CVV[·nåÅ_dÒ¤Ic·ÛyýõבËå,X°‡ÃÁ±cÇÐjµèõzŒF#mmmh4šïÊétŠôôtæÌ™CVV …‚ãÇsìØ1T*¡¡¡¡Óé¤7 hµZär9ÒŽ…„„pàÀî¾ûn¢¢¢X°`&“‰ÎÎNIfŸ1c÷Üs‡ƒC‡ÑÙÙÉœ9sÈÈÈàÔ©Sœ:uŠ[o½•ÄÄD\.*•ŠÈÈHŠŠŠhll¤¤¤ä{^¯W\N¾eË–¡T*¹í¶ÛHNNÆívc±Xp8Ft:z½BBBFWww7'Ož¤¦¦†ýû÷óí·ß²iÓ&Nž<ÉÁƒ¥I,//½^ÏçŸNee%111äææKUU Ü~ûídddÐÛÛ‹Åb!**Š›o¾NÇÓO?Íwß}Çûï¿ÿ=€+1mÛ¶êêjHOOÇd21fÌF%=ÓÙÙI]]'Nœà‹/¾ ¡¡ .ŒÈ|ôôt¢££iooçÈ‘#?~???fÏžMvv6gÏžåðáÃ\¸p™3gb2™°X,´´´Åøñã%Bˆˆàå—_æë¯¿–ÆPÙ¿;#“Éd<óÌ38š››IMM¥¯¯ÊÊJŽ;F?€4´Œ5Šøøx”J%ÃÃÃTTT`6›9þ<:Žˆˆâãã ¥ªªŠºº:’’’˜?>£G¦¶¶–S§N1aÂî¸ãüüühkkC§Ó^¯ç¹çžãÃ?¤î_ªžâjÃyoo/f³™’’vïÞ-5l ¤¦¦rï½÷’‘‘!qÀmÞ¼y/X,ÊÊÊØ±cZ­–‡~˜µk×rôèQ>ùäìv;S¦LaéÒ¥Øl6Ž?ŽR©$99£Ñ(ùïïï¡p\qœN'*•jÄG%$$™™ÉwÞÉí·ßNLLÌuÉ ½½½¼ñƼõÖ[3}út1477ÓÖÖFpp0éééDFFJ²Ktt4ÁÁÁÑÑÑÁ¶mÛ®BsæÌ¡¡¡!FÃäÉ“yðÁIII¹n=§§§‡ŠŠ ¾üòKš››éíí%66–´´4n¹åi¶ÐëõÄÄÄ€¿¿?EEEœ;wŽíÛ·_€ÚöíÛ9|ø0%%%¸\.¦M›ÆŠ+˜9s¦Ä?´}ûöññÇJAA¤L\É, õõõìÛ·S§Na2™˜;w®¤ZkµZ¢¢¢(,,¤¯¯O™¹^IoåÊ•’x;nÜ81oÞ<±bÅ ñì³ÏŠ¿ÿýïâå—_áááâÉ'Ÿ‹-±±±¢¥¥åš|755‰µk׊I“&‰ùóç‹C‡ —Ë%„¢  à牻W³’’±yófñÐC‰©S§ŠñãÇ‹   áãã#öïß/\.—(//“'O«W¯þY¾{{{ÅÖ­[EBB‚˜>}º8tè˜1cÆðC â½÷Þ±±±¢»»[ô÷÷‹œœQXX(¦M›&l6ÛÏöm±XDnn®„L&qï†ò-X°`„8|ë­·bµZ •f믾úФ¤$î¹çžÍ!€Ãá@&“ICÑÐÐn·›þþ~ºººðz½Ìš5ëGb×ä”ò2Éœ={–ØØX"##BÏý÷ßÏž={°Ùl„„„P__ÏM7ÝĨQ£$ÝI­VŽŸŸ¡¡¡,X°€œœœ_î˜õrÿÒÙÙ À˜1chiiA©TòÇ?þ‘ÂÂÂÿî¿tvvÒÕÕEYY'Ož¤»»ǃÕje×®]7ô]ÿð#‘ÞyËIEND®B`‚postfixadmin-3.0.2/images/logo-default.png0000664000175000017500000001030510757370236017531 0ustar daviddavid‰PNG  IHDR2‡ÎÄhsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ>(¥tEXtCommentCreated with The GIMPïd%nIDATxÚíy˜UeÇ?3ÃÀ°C"É® b)ˆ„˜ šä––Yî–™šÛ•…Zà¤(î)ð˜•J*æŠ+*‚ˆ– *¦²‰,‚éÃÀpfúã÷=Ý3‡sïÜ;sgax¿Ïsž™{öû.ß÷û[Þ÷‚ƒƒƒƒƒƒƒÃž†‚xæµ@+`…+~‡¦f ðÌSžÀ;ÀWMù ðÌm@`p„«G0¹Dé4X0Ú·?wÕààà&g£ÚÀGÓà)à(`6ÐÍU‡ƒƒ#˜Ú¢<øg8ðüwž‘Ë#À‰®JÁÔÍ£;¤fž¦Ç¹jqph¨mé72mº5Àj,Bô—×$âv‡€}]Õ88ìÝsæ?i ”½¡¡ãWé³+´ÿ  óV#ÚÀG¡c•À\µ88ì½Ó¸hÜ̶`I{C€‰lf/‹h×õKá¹Ñ°ð‡Þ€:¶ —ãàÐd­¦˜ ô.Ѿ3€}€OE&S€³Í:>xLdÓOdf= ô=^ƒUX†o‰«‡½¿”óm,‡å SŠs®sw‰4*À;ÓÀ¦—ëÜÓ0¿ËÀA®˜ö>éP`pfÞ ’:I¤8ÿVàXà s·Ò}"®–Ây8烩/´.N:DÚCž…(òšjxž·Û÷õ}?ϽSÝLÐ(Ãü(›ë€ÉÀiȈ|‹,•¨—…ŽŸ,–`Sæ¸~_/h¼îŠÂ¡.Q¦·”Ń"ŠÅR³Û3¸ÿrÌiÛ[³øoèø0`‘ˆèK®:²FeÌ– ®säâÐfP <ŠEŽº¿>–ÙS¶¥zNà!Ó¨æ^ Œ^¾º¶ÀUOáô˜}WÈlÊkÊfCã2‘Ž’¿¤+–<÷w`00]æÒ³À\à³×ïvER.ïJµ€ùcбèÓ`$ð7,£w𚫞:CϘ}3bL^G4 Œ=Éß’-Át”Ù²¸Q„°H¶F»aXDi•ˆáUª&Õ’½KȬ 5Þ¶R1]E.çÈ,»YÊÆ!÷h³/áŠÅ¡> æpùOöÙ,•©3| ²)Å¢¿ÆÂØóD6ȪÐöˆèXÝ¿x8øX&¥3øº$û‰Ø”ƒi9ôY3JÔ»Zc¯G0gö–jîÙ ¸›CÕ_e•‡…ÜßÅÂï³Hk¥ëOQ9v”È}WÄþ¬Èžj|-é"?Ù\W]ipQÌñ§õ]žNŠ9g&ð“L*Ìó¼o©M ôÒÀ”'½\ƒÔ=¾ï¯¬æ^í0ÿÓ÷¤âJ1¿àM¾ï¿’i#JÙñ<ïàz×`ÕÆÙÀß÷K=Ïk¦ï}¡Ú zÿÙÀTß÷Ë2}V†ï3Lýòh•Ù:Y!|ßß\“N~]« è Œ”ʯ²I¨L&PàÌí Ú_ŸŸÔ}ºÈŒ*ÖOƒù£á@,ÙîÏ"ºAºÏZ,¢–°wÆ>§Žf¼¶8,ù¬Mqü2à&5¦tØ\ ÜÙß ‹æôͲ¾*kXÏ•Y^“Ž`ŠÔ9¥(Ó<`\̱GªÝÔ¨3§@¸Ä÷ý?¥¸OwQŸ×&db¢¤x§IØÜ¼8,é>€ù!ã08Î÷ýò\ŒˆtRŠ>¾êûþöº&˜ü4û‡©ƒ ™i H&h€%˜Cv_ÏïÄÒ¯?V…¶Árg^‘"B#úÀwõŒ¹ÀVR­õŒ[óEXëtï\c|šcb´ü òŽ È%P)w` †aܘ¹46”I |ןc¾+:÷ŒLÉ¥fß ÏóÄB¾TBŸ4×O¨å󓿨aÀ{iÈ©ŒKsX“ÓˆÀ•õÑHòÓ8™ß]¦ÎN,·X«P£Æçú›Ð5ûèøL,CwÔLàøÌï+µ3]fÕEÑŸÆroúªÑ¼§†<Ë›y0ÇeP,ßPŠ/Ž?[G8j>F;ÐN,3¹–gr™öEIi`èó ‘ãW‹¨ $i¿ ü@eôQDEä¥QÑ­&×e‚Õª“ʘv½Gp®®ÉobYáƒål&Â<còÿ,æ§i‹Öûñiê=[|£¶;5æx;=c„Þ?Îì?;‡íz³žÕ‹Gñ½†ôÁŒ”¿¤–òI ¤¹ÔH¾ «T·sîjk®{·ÔùeÀ ²ŸÏÇ"RŸé$Ù<Ìò;,”iÕ_²z–L®Y"›‰50R)˜çõÿ‹"["çœ+Û5ÀU1ä|}ĺ‹dX?Üñ® ù¢êç^6*Ó÷µ=Œn¤Jf.–Ç4®šó|à™loîûþ˜ÝÛ%žç](EÆQ1çÇ™×ã|ß!¨wÏóâê=ËWõçK1Ý)ŸÞnfTàëñ÷§Ø÷Û4×.£jÂÛR’ò5"—e9úžu _ŽÍÒPÍ[ÏóN‘ R[h­v‡¸¥WãHê© ê=„ï·>ƒsÖ©ß„•^ûÖÉ‘gÅ)ª1‘Ú©?Ä–\Ø!õ’/é^"ÿÉf²-$à ÕvFLƒXÝ/D47Œ¶ûÍÕˆ6Fl:YÎÐE`7‹¤†R5ao±¤ò~9*ƒO"ŸãºÑgu9ge†ûz„þª°®R77Êg°Tåü0U×ÚilÌŸ¸ŽµAfTE ˆ¥¥çys5üH¾ƒiÈ…>±/×°Þ³Ášˆ*•IȸÌë\æ¼|úG “¸AfTI;,ʳ-Då$½¨€ŠI†`[éž¡/±S&×åR0žéX™L—oi¤o'Óø•Èì!)­ƒu|µ|ACØó18Y¤™ md// >äÛXÐGþ£(ö•©]ŒM£Š—„óýD„<âÎ)ËÐZ/ïÓP3xøš¤Tûw‰` ´?_>––!»x‹© ¤^ZJ­,–~–ª¾TÇf¨]Er2ep·ü?`YÀo…Èëmr÷›J=2P'Ÿf0ÚõÎpß'1æÃP©¤Ó0GïtIÜð¼­ê&Š– ´—â*La†? A#[Ä9='ªÍt5€1ûºgPïu@0±¸ý1"”„L¡­R#¯¥R=ðË4ÓV’d­0‡ï×¥t.ù*Fb‚«Ô¹îн®‘BºR¶ããØ1ÃC’r1ñù5ATÄý²Á›‘Ï/gèHŒÛ÷JšNð8E®©Æ Xž…_­.qÔn*ôÂ¢Š»³m÷î•Ñ­Ê ¡$±LUì5¬w‡Z¢Y ‹·•‚8L#hEˆHʰ(G™ö%D&2‡ÊB¦µ °Å¼ÏÁ<Œ…{È6o®zŸFðÉ2¥¦cyƒ°èÎ:ÙÒ»ÔáÇÈg±¾–e0s¦.ÀBÒ~Ì9QîmÀ#}ÞåþÐè;&ÆWqkèó‡!u·Lê¦Dß± »gÊF³/7© ¢£þƒì"¯+\FÕIª©p:–}{÷þ<ÆÿõSÏóîÂÒffxŸûÙ=Ú4Áó¼÷±heªzwÈ1Á%Çþ"‡UÉ[D$ù!3¥,d%Ô) ¨šäT$€ßcÞÿS°ìÝ´¯9p–œxUç!e3O  ¿Èo±L± Û÷°Ì—ô.©ðÉõ„¼¥9>´¯‹ÝY ™½úÜ—ìí¢yóUvaܧ­>œy0g|%RW#û§ŠÈ—dxÿÇI.ÍàæÏL‡Ç°éÃBûöÁýzE½›HGªŒ )–ÀDÚ òùc,–š ¿Ï¨‚}¿KX\QÃvà‚iŽ¥Æ¿$I±ÂN’ŽÞmXÆâF™,D@ M"¤ò°‰ƒ¿Ôu㱈Ñjl*Á<ù[®–é3V¤q¹î;Gø=¿8ä³è©çÕãD¨O`É 5Ä)2ÏÒ…/ï”Úƒ%ëmùî)¾ Ó©—3Š>ꌳôÝ7…Ô`°¼Å}òÇÇî ¢¿§w¼ËÙVmçâ£C÷H…>*S2Š~)Ê"Ž6ÉÏr»ê¡‹X>œêûþu"¾¿Ve5Eõ›P}?Œò}œ£ƒÜ#/B0 TàóT™ƒÕ±w¨26«‘Šå?jÔêâ ²QO#™»Vd±Hþ…SEÏJúa!Û.z‡W¯h[&ÅR¨wY'¢:”ìRž÷ª5fÁ„gÏ‹ýK¦I3Ì™X$åP"%±Udv(vÆ¢CeÞ z9D¤¬d÷ îqœ|?«$ŸWb£þÀ?D4õüµ©K°Ée_żÁ884r‚‰ÃÅrŒµ“ºY„e†óBº`¡í¯aÉsý©úS&•’ù °lÇîò –éõ$Ié…M:ë„¥Ë/©ô±ü›dÂßz,”{$™E0Á884B‚ wÌë¤`úb©ÿ¤<Ž 9‡âu,êó)6û7!Óë,éìËRëuü3©•˜sùQ,T;D¦Ñ{XC©Ì©]W,߯YTìÆÁ¡!Ó¤¬í2SzËçdX–cŽÈ×±lÍWStâÇô·ƒTÉñXXz6ëøz,ï;˜ƒ÷%,Ç¡”NB¦ÚÆÐýÛS5ÓÕÁÁaS0-0§j˜4Þ•e¾|$«jøìŽX’Ö%XdêyÌ‘»Q*©§ö/ÀœºÁÏš¬ÑþñX¦çÅ®öl ,²Ó_×l×öšü+‹kñûÊ„:ZÄÒsô.Ä2lƒµeŠEf[0çòx,ø"WM ‘üeÇJ©ï“:ê ,]{:ñÃèŠÍ ™)›*:H[0)m –ÿáààЄqÉ·ÿË{ù#愈Í;Z/Å1Krêá½ûaÙšo`94'‘ôMsEïà°÷àtlíÔYXëû2kÊ1çm3)‘…RÙ –jÿðœˆæWä{'ÑK œ'Ų/–Kó7lmÞçÉ|>J]°½`©‡FŒºX;dNèÿÞXš[’ó|ʱeÞÆ¦D—ó+‹VµÒ{¶Ç&:æck›¾îªÏÁaï#˜0‚$¸^Xdh…úûÅÆ3±\—ϱ¥V`IzÁï.•aKEPs°%4ÁüþP}þKýO`NÚ)® š.òëøþ]dÖùd:“üQ±ó\ñ;888888ÔÿOj[ôIˆIEND®B`‚postfixadmin-3.0.2/images/arrow-l.png0000664000175000017500000000055310601151304016513 0ustar daviddavid‰PNG  IHDR‘h6sRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ< pHYsÄÄ•+ÔIDAT8O•’1 ƒ0…íÿÿ :uruqÌ’%téæ˜"T,dH?z’FÍ`‘óî½w/g.Þû"+ dE£ç÷üì]×ÝAÂ'Åó'XkAÜA‘Và¬dhÔuðäUU5MC…V˜³K4 8¼Ñ CVBl†|ÇeùLÓK)%B7‘iÛ ÞäñL ޱ6’r‰=!XÂ=ÚâÞ9gŒI[Úº¼–Èk­YhúÐǵ"Ì4A'ÖÊò~œl ïjœ¼‚›Ëw†óxÚo9³™zïIEND®B`‚postfixadmin-3.0.2/images/postfixadmin2.xcf0000664000175000017500000001635712517235667017753 0ustar daviddavidgimp xcf file2BBS gimp-commentCreated with The GIMPgimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) Î ¶ 4gõˆ2mailboxÿ     †2¦ ’ ž ª2Æ R b r ‚]ý¾<ü¾Ê;þ¾ÊÊþ¾9þ¾ÊÊþ8þ¾ÊÊ9¾Ê9þÊ9þþ8þ=þ=þ=þ=þ=þ=þ=þ=þ=þ=þ=þ=þ! € €œýyF<üÇ—;û½ºµ5:ú²~ÄÉq9ø²ÄŸ~®©7ý®ÄŸŸüÄÈI6ý´ÄŸŸü~ÓC(ø{–±Ç©‰\ý®ÄŸŸý«h'ú^¸Å¸éÿÿüÇVþœÄÄŸýªT%æ"ÂÉa#@vÖÿÿ¿Nš~dæoŸŸ§;$ø¿é/aw(ý/ïÿÿô©'Œ~…Ÿœ¼~±.$ùsÿM”’ðqÿýóÿéÓ~jO½î&#ù,øš3Æð³ÿñáëÿ~Œj R ÷ »èšmõ5÷ÑÄÔã~ˆÆ/$÷#Ūÿ±CóÞó·™Ô~ˆÿö‚"øi´YŸÌ|$ïÓõÐÕÐ~–¿¿ÿÚUõ¦_srOƒµ¥^ðÌýÁ•Î~ ®–Ñÿµ:ñ¸;êô»^e—«Š@ïÌòÎÛ¹~¡»nˆ{~ØõƒÜBŸNûͽÁ»”]R}¶³q'Êð§†È~”’¬^f\“îÌpÛyn„ûÑÆ½§•†bIY™¹ TÍæÑÖ¼~¢Ãfjœx\RR«õ¦Ø²J¾éÙβž–Œye^Cc¶ðò·—Ï~Žv·¤Slˆ]I>RÆåƒ× ³8ÚåÔ·¡–›†f_XD/ÒÙÔÜ«~³¶Hb¶‡>fnD'bߨÕa’_üæÒ½­£’{th\I4ÞÖ]|Ù~ž}É›4Oœp5NT!´}Õ f¥ýà첫™‰xgUF4$êöø¨p~ͼ\zÀ~$UŒP0?!YÂÔ¾@ÝöÞп¥—‰}tZC/$ñ¾jÀù|„tÓ¢Ft¯]Lh6"ÔÔ@­NþìÙË»­Ÿ‰|n`ZM1%ìÿÔpw‰Æ“:p‚7m?:>½QÔ€}ýáÙÈ·°ž‹…w`Q?',õ¶ïàÛ˜œÖ|/r±e)aq+ †Ô°NÀùÛͼ²©›ŠƒveUC%6ûíŒT†ÛÙgC”Åq)m•F#QFV¸Ò½FïêÙË»ª–Žˆ}ohV;%FþÅãñJgÃÉd6…¯_&bx5(!ÍÒYfÿÙÆ¸±¬˜Œ€oe_S>'Gÿ¿juÁí©JP¨Äi-m“Q'TQÃIÑ”m¬þÑÀ¬˜Œ……€tdVE5#GþëøÂjX›Ý±Q=Œ®c)\x<.•Š Ñ¸,›íÜ»¡˜‚sne[^TD4Kÿ˜k«êÔ{?o½±W+l“Z&DT$ ~¨ÑÊ};7k ™„tg^P<20!Oÿÿã‘Xq¿Ý–BJ•®a$MvL#­ðœ–e37QYB5$ãAyÊøk–äò²ZIŒÉ¨Q/i–b%6P4 {¥ùež¬p7úI|¾ëÿÿçþ dFb£×Ì€7Vš®d+EhL$p«Øÿy¦n~»ðÿÿÇŒtOIOŽ°Çº {f Ð O2h‘f0%C6xÐüöЬÿÿúûÏ—>ê*oÏÅ](_Ÿ¨g.:d^,‡ÁýÿÿûÓ“U! ízàΉ[Di‡u900€›ø³àáØÏ•7 ïT’·È¦kBHL; €øc§úÿ»U ûT¦‘"óIÆ?&&Ššñ”óÿÙ°™x0o怩Ý"÷'‡Ê®J!óRqž¼×ïüP?ÅŠ ùkÓºJ¸#ôRN+\ݪ‰» û¨ÿþ&öM³"¤…÷Û‡€€ôˆ‡ŠŠ”˜§¿Á´|&ê}³A‰†ÒvÍÙÆõÒº±²ª‘‰ƒU)—ùZjÌ6÷°¯Ÿ+€Ùb_ € € € € € € € € € € € €°°°°ŒF #2mailbox white backgroundÿ      w2 —   (2 · Ð à ð  €ÿ €ÿ €ÿœýyF<üóÕ0;ûîìê_:úè¾ñô°9øèñÛ¾åâ37ýåñÛÛüñó}6ýéñÛÛü¾÷t(øíøýþõÈ—ýåñÛÛýã¦'û×ýþþÿÿüóþÙññÛýãŒ%ûoþÿíÿÿòï„×¾¡ý®ÛÛáh$ýþÿ ÿôâH˾ÅÛÙí¾çT$þòÿ ÿõý÷¾Ï¨†îþF#þœÿÿ÷¾Ë¨Š# ü/ ÿÿûøÇòU$þ…ÿÿýá#"þùÿÿúþ´ÿýýŠþWÿÿûýÿÿâþÕÿÿþæþüÿ ÿþþþÿ$ÿþŒÿ$ÿþþþöÿ%ÿýú(ÿþþTÿ'ÿþÝÿ'ÿþþÿ(ÿ*ÿþÿ)ÿþáÿ)ÿýüýÿ)ÿþ@ûýûþÿ(ÿûÿõöÿ(ÿúýüÿ'ÿþ÷ÿ&ÿý!-ÿ%ÿý!-ÿ%ÿ-&ÿ%ÿþþÿ ÿÿþþ!þÿ$þýýþÿÿ'÷þÿÿþÿþÿÿþþ ÿþú&ùþÿþûýýÿ ÿûýùøé)ÿùþêûýÿÈ6ÿùþóüýÿè_ €ÿ €ÿ €ÿ € €ÿ €ÿ €ÿ € €ÿ €ÿ €ÿ €°ÿ°ÿ°ÿ°ŒF # !dotÿ      +gimp-text-layer(text ".") (font "Bitstream Vera Sans Bold") (font-size 28.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgba 0.890196 0.111711 0.111711 1.000000)) (justify left) (box-mode dynamic) (box-unit pixels)  !3 !CkãkkêÿÿÿÿÿO\ adminÿ     ¦ /gimp-text-layer(text "admin") (font "Bitstream Vera Sans Bold") (font-size 26.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgba 0.494118 0.494118 0.494118 1.000000)) (justify left) (box-mode dynamic) (box-unit pixels) L\ dé\ xû~~~]ÿ:ÿ:ÿ:ÿ:ÿ:ÿô$k¢ÎíúûëLJ"÷ˆÛùî³?ÿÿÿîHºñûØ hÉööÒ{ ÿýù_ýÜÿÿþ~ÿÿÿþ„ÿÿüÐÃÿÿýÁ ÿýû.ýÅÿ ÿ ÿþñÿÿþk÷Êp3 /«ÿÿþþQÿÿúîDCîÿÿÿûí>Œÿÿûî? ÿÿþÄ þ ÿÿþÚþ«ÿÿþmþmÿÿÿûo#ÿÿûsÿÿþïúKŸÑïúÿÿþõþáÿÿþ"þ"ÿÿÿû$ ÿÿú(þÿÿþþý ·ÿ ÿþøÿÿþþÿÿÿûÿÿþþýÿÿþ†ÿ ÿþøÿÿþþÿÿÿÿÿþßÿÿû€ÿÿþáÿÿþ!þ"ÿÿÿÿÿþúÿÿû 9ÿÿþ«ÿÿþkþkÿÿÿÿÿþçÿÿûq .ÖÿÿþQÿÿúìBBíÿÿÿÿÿþ™ÿ ÿýÆÿ ÿÿÿÿýÞÿÿþ†ÿÿýÜÿÿþÿÿÿÿÿ÷”ãûë·Mÿÿ÷‰Üùê²Eÿÿÿÿÿ€~€~€~ŽÿÿÿÿNÿÿ÷9¯íúßÿÿýyþÿÿýÑ ÿ ÿþuÿÿûï? ŸÿÿþÈÿÿûr#ÿÿþðÿÿû%ÿÿþþÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇ.f postfixÿ     9 1gimp-text-layer(text "postfix") (font "Bitstream Vera Sans Bold") (font-size 26.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgba 0.000000 0.000000 0.000000 1.000000)) (justify left) (box-mode dynamic) (box-unit pixels) Þf ö|f  ëöÿ:ÿ:ÿ:ÿÿ÷A´îùÛˆõu¸åö÷å¹vò k·âöüïФk$ÿ ÿÿþÿÿýÛýiõÿÿýõiýÚÿÿ ÿ ÿýÄþÿ ÿþ~þ¦ÿ ÿ ÿÿúîECîÿÿþPý1ýÿÿùúihúÿÿúý0îÿÿ÷s )UÚÿÿþnþmÿÿþ«þžÿÿþ‚þƒÿÿûœøÿÿþ ÿÿþ"þ"ÿÿþßþÞÿÿþ(þ)ÿÿûÜÎÿÿùå›tV-ÿÿþþÿÿþ÷þúÿÿþþÿÿúùRþÿÿüó¬8ÿÿþþÿÿþ÷þúÿÿþþÿÿþùýIÈÿÿýüJÿÿþ"þ"ÿÿþßþÞÿÿþ(þ)ÿÿþÜùNs²ðÿÿþÍÿÿþlþkÿÿþªþžÿÿþ‚þƒÿÿþþÿÿþøþûÿÿþÿúíCBíÿÿþPý2ýÿÿùúhgúÿÿòý0Ú‘Z0ÿÿþèþåÿÿý] ÿýÅþÿ ÿþ~ ÿþ”þ§ÿÿÿþÿÿýÜýiõÿÿýöj ÿý¾ ý+óÿÿÿ÷E²êù܉õvºæøøç»wó"eÊéùüðÓ¡Mû%™Øõÿÿÿ:ÿ:ÿ:ÿ:ÿ¹ÀÀÀÃúnÀëûÿÿþÿÿýÎÿÿþÿÿþ‰ÿÿþÿÿþÛÿÿýjÿþùÿÿþÿ ÿþÿÿþœÿÿûµµÿÿþœ ÿþÿÿýÍÿÿý€ÿÿýÌ ÿþÿÿý íÿÿýýþÿÿýí ÿÿýIþÿÿýýHÿÿþ€ÿÿþÿÿý·ÿÿý¶ÿÿýåÿÿýæÿÿý5úÿÿýû9ÿÿýÞÿÿýàÿÿþªÿÿþ­ÿÿþiÿÿþkÿÿý.÷ÿÿýòîÿÿýø/ÿÿý ØÿÿýXQÿÿýØ ÿÿþ¡ÿÿûš“ÿÿþ¡ 32 Backgroundÿ     ;2[Ë×ã2{‹›«» €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ €ÿ°ÿ°ÿ°ÿ°ÿŒF #postfixadmin-3.0.2/images/postfixadmin.png0000664000175000017500000001364410601151304017642 0ustar daviddavid‰PNG  IHDRç2(e[ëgAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<5IDATxÚì̱00àÿƒUì\ÍAUe&€X{OwÛ–´ IÆ9#€X.\¸œœÌÌÌL¹YÊÊÊiii›7o>qâÄÏŸ?É0˜…”””–/_L÷£q3 p€bùòå 0áRÅ,iiéË—/sqqñóó=zôëׯdòéÓ'`=1£ &  –YoÞ¼9þ¼ŸŸ_`` y†°³³ÆÊ(Àˆ‰Šf}ƒoß¾› sæÌ155 ßQ@ @ÔLµÀÆÆÇ ƒ²²²iÓ¦M™2¥°°p4ˆGÕ@Q3Õ¾zõêùóç@77÷Ö­[###mmmW®\ lïŽô( " ’S­£££‰‰ Ö`zýó礭|ïÞ½   `ÿlíÚµžžž£a= ¨ˆ…¤!‚‚‚77·={ö\¸páÖ­[×®]ûüù3\Á¯_¿®_¿Ž6XÛÒÒräȑɓ'e÷îÝ;⣀r@ĦZ…èèh`QúàÁ+++ CUUØxÿþ=DÍÿÿÿ]1`êD›b8pàÀ7€ŠGSí(   bS­°‘ÊËË ,\•””,,, â'Nœèïﶀ͈Ȼwïþýû§¨¨ÈÌÌ|çÎx‚~óæÍhpª€"Ü®¦ÑC‡eggûUqqq±±±úúúÀÖmyy9°=L¾@q`›ÁÏÏ¢˜d¿ÿîìì Ô•ŸŸ™ž¦iHGmŒÊ@HµÀ47wî\uuõ´´4 7$$DXXøÅ‹ÀJ¿««+22òÇ@q‡7“/På§OŸXXX€eíÎ;uuu·oßìŠqqq!·€GÁ( B^^0EËÑÔÔT`!ÚÔÔ„\Ñ_¼x(Ò××”¶hÀŠ_½zµpáB` øôéÓÓ¦Mó÷÷/))144üñãǰM`a wvvÂ¥€UÓàqç»·oßÃâQPDDHX˜Z&ß½yóéãÇÐ¬²º:-Ü@øR­ŽŽNkkëìÙ³Ÿ={fddL‘ÀžššÉ“';99ùøøî£G€e*P°¬ýóçD° Þ½{·‡‡Ç0n×û£³fÍBìèè ÎT{åüù]›6AØn~~v..Ô2˜d‘M¦Qª ,-FFF`âcbbv³€ €ªªªôôôåË—c&YðêD`q ,Gyò2jlÕ‹áuëÖ{iC4Qººº2¼4EÀJ-ÉŽš€bÁÚýZ´hÑÓ§O]\\6mÚ,# Öýû÷ã2âÎ;ÀžPב#G®^½jmm ™e°´´<~üxOOÏ„ †n’%Ξ=‹œ” `óàÞ½{@¶ õʰ¡8¹¸àå+M#[KªussVyëׯÿúõ+°;USS³bÅ <«¿ÿT)...)))''÷û÷o  °ÇdÔÖÖFDDTWW¯^½Èeff†‘ ³¶,¤U€ÜT­úS++ ¢µ-(3{¡ W¢g¼AŠvbá!<˜×°²R«6±Ó:…B¬l vù’…Çc~¶x<ÖÝe‹aœÑ7¨ Ĺ®Û¶m–e¾ï'I‚T(˲(Šiš^êAẮŽãÌóÜukÛ6èãˆc‹¢(MÓ<ÏQÉÈ Ë²š¦pÿ—g˜÷Áz`…$¬ŸÉ÷me¡ü¡ Œã˜–¯••œdLÞ0«¹3ŠGf7 bqcл:#5Zëá²Æž—ºöýã†Û²냯:[†£æ\×ø$î¯ZSt=Q§ª’Fº€£ ×ÉkY¼çó¤X‚=Íý øËÞ`ÔŒQ„b0Làæê$ž¦«¸98 ž ›»›ƒ“k‹GŠ“ž@Üz`?†m¡Bã{ÿKò«—¾ï©.%#lQÔZG‹}ž"„ÌuÝeYÀ^V2á^Ã0AÀ¨à8»ˆ{š¦à¾ë:®ëºRbã8ö<¯,K¦ß÷§ib ϳr†ã8ê0q£5T¯CGF@m]תQžKiÌ”é«@"÷¡ö×Úø– Å]¿nÛvHŒd°1àBl8¯ìóÛ$ã97h8V;€ØT•añKk6†¥Á =¤íõy!°ã8É24÷¦Ñ€ÜîEçÜ4ò-ÏÍ>J’GÛjÒ&2ñÿDí[ÚÍbˆ¢µ•…‡ØNðâ}¬â <ÅVi·Ü“Hn³’UÒä×à ñýŸBÎÛ˜1†!U)Å#Û¶ Õ9×¾,€/@ƒ`Œ‘ ^–åµ»¶ý.†¨'´¤”0JY­ÕZ îli„nJ)çì½!0Qh­K)tBÜ7·~݇¸ì#y#d[ž±9õd®ëžá0Ú‚ü½«—ñj!;(|Ö•ÀëÉ7Gv"à;"Û ¯×†¤&|ßï|‚¾û;ðá_ý`ÌŽQ¢( oÁ-ØJ Óè‚`cëº\‚+ìòàtY‡K°Î‡†!y§ÃÍÍu ?çœÁ÷„ж-lš&DRb« Ù¨ëZ ¨Ó4Eæ®ë ¾®+L÷}¯ª Ü۶ѹ¶,Ëyž Á®_iø=Ö8Ž¢Â²,òÆ0 }ßc÷|`ð¯Ó§°õäÝà‹©ž#«™kÓü+Ü#ŠŸ‘T[bˆæ©Û§`Z2n`ùöçXIb# |aŽØ{D ´qZ3ó3›™'‡“½\¯>ÃXACädÏÇãv¼ªü»ßs>ÙqîÎß—á\>ïŒ}ˆbδºóœÇ.âGHL°?y{ ÀˆÜ0A­‚.(€6 ÚáŽh6R Žô'­2"$ø–½6â{vÖ_ÔRV®tY0©ú¥i6²ÀE-+×7M³ï; Sé6Ž£Œo. »m[×uH5‹Çíûþ8fC¡Ö¶-o ô4›â–úrÃ0¬ëúP«üÔ™ô Aè æ¬X^‰Vžm²(/â/`Å#X^ ¨ËCgÑß›3µ·˜°v¥ZH¢0=ÇOüÛÒî况ˆ¡a¹4ûüëhð-µïH$²&•—3&ƯχGÝŸ´D@ída$n¥ :& !‹QOØí1@°'„€¼ckÔZí!¸N#®A)ÅRºðŠœ3—ÇrøŽ1zï(Yø«ðûº£D`{¥i¤µ¼¦Vð¨³{ùÞBêYX è·Ðúimkî&ƒ@ÝÁÊ ÄMR¦Í¶)ì$ 8+¸‚SXØ¥É#’IBº\)ÈY<w§+@ I9g S¸D´Ô¦£¥”Z+ìâ]8†Úy¶—uljŒ‘Rb,¥VŒ£h­s´bÞ{è!:)š¼I‘RB°ñÅéÏ“Ôwª¦-ã:ÝKÕK¯öy´¯ —«òäY§îÕ*¢ê‡aœ&cm·ýýC,‘jŒŒ€A éû$QS@F ‹`  fÀ‚¨غÈÊÊÚ°a°=LÙNNNòòòÀ ÷ܹs555@c‰C@@ ´´˜ €!`± LÐ@q`Øz†ŒZ€e!f{­ñŠk ¨ì=ËZ`ÖÚ½{7ÐwÀ¢¹´£iY L²˜LÁ·‹½š4 ‚><¹ƒÔZ…LDáªd‘Çí‰1B 5gp1Dѽ¦ ‹² Ö ¤›H'j9{Ê5|02»,,䲃§AœƒŸÏŸ¯ÌZš§R ׯýilŒF€A·dÀèrÅëzÂÕÜÍD‚hÉC®°fJ)„à½o­‘Ì9#bŒú…C÷ &Ѹ½w-èS÷×á †«8SxQK­AÆæm‚mdhäç¤ñ>ЇGô®qgGÑÙÁUômÛ×Uë¨õ»SkÝ%çŒÿ:v¾‹àÿŠSfÎØ†a ¢M¢¦Ï l@Çö.Þ¬AÅ.ÀOœD‘"ÛU~‡ø¦°Nç»Ôcj­ˆQЍ=ZA¢R±W7Ï!^­X²%ÞÅ–á«xÝÞû”’Œ])¼òé1ò ƒ³C¨Ûœ3*ÂZ«Ä¸Ãô)êÝ Ï¤&¨‰U'Kp©ÐaŒ¸º‚¤AG)n1£*èni$`:Õæœ{&!4£§³p|÷…Óîoû‚TÐäs¶§ð–žmY0pÛºÞ þ°N˜9{†A ŒŽ„``¥rÏìÀ,¬àš ,ª,Átì]„Žâ(U\X6:Åóý|‡üÒk1„u|!e^Pz] ÅHk;¯ ,ÿœ#%#ÞÂqŸÁR •Ô¦”BÖZï=4S¢íûîœ#»%ˆ1®ë £9gðUJñIÀ7aZk]k½Üñ¹7©]㔞-Hup'Ä`Ê4Îü±f§–çÑ »É/‹§)DŒÞ´«³“‚ËÊoWŽ do»Eíç7’⡇ã#¥TkEíÞ{Î)8K)¬w­ÅksέµsŽ`ÖÛq¢ì• QyØØø»þ¾¾°kEƒ0|â1À` ÄHA.p ¶Ó™¾ûoùÃk9ö&\³Y@©µÒ`TÍlŒ‹Ô#€#÷Þ$"ø¢Ïd!ÆHv¦”ÀÄ{ï"RJáµ%Œ-xjëîsNÞÖœsk ³ÄkI8: c&„ë}B4ú÷ÿ¿þõÍu`çŒma ØDHô¬Á ž…¼“ ‹} b N²”&$E(Ñ—Ïý[®¸o0ç„‹Ðtïsn­19Q=Ió1ÆZ+Ô@”Ð'v鬵ÖRJìc;ðŒÞÌ謸YU!¨»ƒ^/AÜ{§¿rp3~¥õbÐøÏqJ ¨3Þï{Ÿ þb•ü×wÖ€;¦ ¢0¼.°€Dtà‹(À=:öË6›\r ¡y¼™Bx_**Ù¬qÙ1†Æ£äœõšsNuœžH?]ÏGI­5jÞ{³I‚Cr¥” žszïX¹ÂdÍ+s…\)¥ZëZËv2¥f‹e©;ȵ‰1j¬?†P߯@ÿøÍ¸`çŒma ˜¼x:/ÆžÀmä™r‘¢ŒÀ@õ<÷–ÅëZhò^¢0Ñ9ˆ½Z0åÑï½_kQ†tÄpzÎùéLî^³[¢TUÍ ¦áÑú[k€,c ñzf‚u—\Æý íï7£GG[ì›± À ñ„ÀP²…×°+ÆpOke„œR'™€ï@‚†ãu¼üv¬9'™CHÅS×Z¡þow=¡¶Ý]UÇÝ™  ´)€\bïÍPDbÆUEUÓÓ¨6ÚpÎæä+·ìœ± À0‹ÌKÐÑ3d*b ¦ÈIn,WÀ?4Öé^¶üÐôßí¥ú‚.Å RÎ ÎùTÕÝE„6Æiû3—j« 103L73qeô »q™EL[Ÿ‡Fœ^÷s,:$áæfÏ'€Ð÷è¢ mmm`ØT–‚uÀ~ÚÅL!!!À61°-;qâD¬«¥€-}}} 2MMM`'oÓ¦MS©Ø3ëêê¦ZÈv `ÞÏ£`× j€A(YÈÀÁ'ØÙ%ûìÅ P ½6|\û ïúª ˜’æÝMèà UE33ÜŒ#aÖù¥ZD Þ;#DÍbvw˜„»ž™ Ên«AG‘j!@QQÑÐÐØý×ÕÕ¶€ S`y ¬Ù…è–-[¬­­ÛÚÚŽ=ZVV†ß`É‘‘,qI6//ïÁƒÀ&ĤI“€éx´]; ð€b!U0m±°°{T>–‘wïÞ&âÆÆF`JåââÊÎÎö´ŒŒŒ€ Süw;;mS§N]·n]ÿÖ­[ÿÿÿ9`áÓ§OT¹u c€½3¶ ŠÀpbÅ[Go;“D©2Ï}‰ .¹êå”D÷…_×Ô‚×^<8ç @-"f†êˆ¨Ým33ëîÌ$„“IÎÝéþd-‘ð úªJ¨­*<€Î4öÉ+êß.¶G±¡˜¶î€ÍÆÆf``dÛ À¶ìÓ§OiîöíÛK–, öÏ€½+`' X$¿xñr®0][@C€ XÖB6ýêéé™››[ÿþMµ£?  ¯Z&SSSS`¿JRRÈ6”••%.°©ÚÕÕì½999ÕÕÕa=ö€éX0Ó1äÎòÑXø@±ððð Kòš’ÀÆ€””0½«~WW׋/Љ‰¶bbbNŸ>}ðàA`3¨ h¼…¯%‡´7~ÿþ ì„A––¹clF#fàÄÙÒHv¥ ÙÑÑL@.0åAv•AJq —TÃ!׿Œ‚Q€ òA;nÃèIEND®B`‚ postfixadmin-3.0.2/images/calendar/0000775000175000017500000000000013046702635016207 5ustar daviddavidpostfixadmin-3.0.2/images/calendar/no_cal.gif0000664000175000017500000000021311274564457020136 0ustar daviddavidGIF89a¢¥MJJM¥JMJ¥¦¥ÖÓÖÿÿÿÿÿÿ!ù,PhºÜ60Ê)F¸8LX3ÞCUÇQ#ZŽ"Y¢giaËw Ø­*¯Ö 5ú‚´mù8yÓËëÉŠ/aî°$à­Ì'$JÏUzÍn ;postfixadmin-3.0.2/images/calendar/prev_year.gif0000664000175000017500000000010511274564457020677 0ustar daviddavidGIF89a ‘¥ÃÙ¢ÂÙH†³ÿÿÿ!ù, œaw’À΄OØ`¶cßEa$];postfixadmin-3.0.2/images/calendar/next_year.gif0000664000175000017500000000010611274564457020702 0ustar daviddavidGIF89a ‘¥ÃÙ¢ÂÙH†³ÿÿÿ!ù, Ä>v¢ÃûÜÔPvƒj©qˆ8|‡Y;postfixadmin-3.0.2/images/calendar/cal.gif0000664000175000017500000000017711274564457017453 0ustar daviddavidGIF89a¢¥MJJM¥JMJ¥¦¥ÖÓÖÿÿÿÿÿÿ!ù,DhºÜ60Ê)F¸8LX3ÞCUÄX’æ(¢ìyVD,Ç@ Ä«;»:¤,^A›Él7B¨+,[À¢qªüA¯ÏæKÀíz¿‚;postfixadmin-3.0.2/images/calendar/shade_bl.png0000664000175000017500000000027111274564457020467 0ustar daviddavid‰PNG  IHDR+<ígAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<KIDATxÚ\Í;À ФacèÀý/ʯu½€ôb‘àfVé…Æ¬å£:”ÈÊôÁ‹3Ï´š:›+{ð¥šiæ_~­ÿ®¯c¨su”IEND®B`‚postfixadmin-3.0.2/images/calendar/pixel.gif0000664000175000017500000000010311274564457020022 0ustar daviddavidGIF89a‘ÿÿÿÿÿÿÿ!ÿ ADOBE:IR1.0Þí!ù,T;postfixadmin-3.0.2/images/calendar/shade_bm.png0000664000175000017500000000024411274564457020470 0ustar daviddavid‰PNG  IHDR5Y ^gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<6IDATxÚbd``ˆb$ñˆÿàSðˆ™ñ)øÄLø¼%¤d#. n|  €ŠA;ðžöIEND®B`‚postfixadmin-3.0.2/images/calendar/shade_mr.png0000664000175000017500000000023311274564457020506 0ustar daviddavid‰PNG  IHDR5ågAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<-IDATxÚbf``b9 bN fa€€ÿL@‚Š™ ˜ŠÁœ`ÐI^s¯#lÙIEND®B`‚postfixadmin-3.0.2/images/calendar/prev_mon.gif0000664000175000017500000000007311274564457020534 0ustar daviddavidGIF89a‘¥ÃÙ¢ÂÙH†³ÿÿÿ!ù, œq2 šŠjDc ;postfixadmin-3.0.2/images/calendar/shade_br.png0000664000175000017500000000031411274564457020473 0ustar daviddavid‰PNG  IHDRÄRWÓgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<^IDATxÚLŽA€0‰xñ^}”ÿÿCšµ.¸M ™˜ª"²ƒ ¬`³üÕ'<4`àñæÀå .†îˆE¼pYبÄ(E9=î6®IåÏ,Ý áõ 0õv)ïìþX×IEND®B`‚postfixadmin-3.0.2/images/calendar/next_mon.gif0000664000175000017500000000007411274564457020537 0ustar daviddavidGIF89a‘¥ÃÙ¢ÂÙH†³ÿÿÿ!ù, Ä.6’ËÀD`aÕqG;postfixadmin-3.0.2/images/calendar/shade_tr.png0000664000175000017500000000031011274564457020511 0ustar daviddavid‰PNG  IHDRÄRWÓgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ZIDATxÚLŽQ €0 C ÿ¼ÿ%Eæ:í …ÇJßH 3[ì¯1_•šBÖ> ï’;éä!-úÎPä ˆX¤¡áAnr%)ºdM¢% ¹%QâúoÅ+Àb:!'y72•IEND®B`‚postfixadmin-3.0.2/images/postfixadmin2.png0000664000175000017500000000363510601151304017723 0ustar daviddavid‰PNG  IHDRæ2Hŧ‚bKGDùC» pHYs  šœtIMEÔ 2¡(yìtEXtCommentCreated with The GIMPïd%nIDATxÚí›wŒEÀGá!Q`DQA E Ø%ÅØˆ"à79"J‹” €XP)ŠB $A¨ w(¢ J?šìwɲ7»·ûîyï¾_²ÉÛi;;³ß|eæ¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Š¢(Šræ’£C˜ZÀ  Ð8¨ÓSgÒXcʽ¯µ6Gû”:5TΑ ¬ÚêP(*˜é'U6\…R© ªé$¢#í11osÔ5PTcf†‹i3Rõݳ‹ÿ“?©³òœåH+ÕaQ2¥1Ã|²›g€ë€ºÀà}`ðOm6]«€Òæ^`°˜ üR¿ŽÔ¿/:ÚHg?°]ÚøøØñqüÎ$õ*ŠÊÎrä,ï°èá(3 x8΄cZ·×WÍ€zÒ}2&«€ÖÚm´U_üë¾b5>&XkWÇýØÂ"¥Æ˜îÀÓÒ×:@0o­=hŒ©!ï=@¾¤ÿóBk푸ϊٟNÀ³À2f;kí¾ªÌœJæ(¹\l¡- É LIˆâ0˜Ho‚m™ð=O¥8>§Ö‰̳å£n2¦9@¾#ïk 3p4U!¡h­}3¤<àæ!õó‚8¦dHŸÆ#BÚÞ ‹Õ<àú2k€®ÖÚãéLY€Æ†ÈÆF £µöp6›²£"òZo‡´ŸL!”eZq*`é¯$Êlãˆhž½.9p¼+RöθB™‚y>ÓÓÆ!HÕD+5¨_PÉçˆÈ»Ø!”ˆV”Æñ¡°ÚC²ÝÇü è&à¹÷ÓèHkëøðŽâmÔçŠ6=ææk|÷ÝùCÆ@u1=®î&?´VN„¦ ^©Ô‹Ã/ÀýÍZÍÑÆI ¿ÔIÂzà) =ÐPÜ–:2Žï9\š'mô7%8ï·FÌ{Rö7µBG~}yFéÿ«Ž2ýÒ(ûäYõ€9Žü¾Ùäc†iÌeò{…Ïk2ýÅ6/ãqÇbðRÀT.¦êÈÀ;Äç_µí`ü>l‘ë]àÉ,ÕœŸ6Äl=Í–&mÜZÛÁ‘|Ø`Œ ØÏ Žò÷¹,kíò²y7Ƹæ=aWíÑÐÓ$fQÎÜ-óe1…Ž9mÆyí{ÖàÁ@þåÙ.˜‹÷KÔ>pßÅÑÎÜ´‘u¿çôþ<ùAP[¤Ì‰,7k­<ºGïèT7Æôl'A›º@ÍâMi.á^cÞ“àoï×evŠ¥á·,rÓ8'‹Ïrið¬ÌâÀ½+ÐsAà>ÏQf[Ì´¦¾ßcÄ+›œ‹(­<€‘|™¥‚Yf¦~'ïàç71wO¦ µæÏ9?ÅyOÂŽ€ÿfú—©×S´ÉqÖÒÁvßï£!®KVû˜™dÐXQæñÖâÞzÈš‹¤1Ð*Å6_H(”™3¬-õ ]H™#UõÝÆéO¶ fÓÚpWŒÕõ²˜iÅ3¯£håÞš$¦Èß¾rÕ+cþÇäâE=k†X3ó$(–W0¤h [q-¥ßiy1æ]É )ۘ컿ÝQf}à~p©#À`bVG|< þRIDpà¸ãÝkHzU2Ã1~šá*( ,ÎË+·š7-)ɉð_öí¿uˆÙ¿¯( ±0¥‚yW2(˜dY‹·5bcv&4õ0qúçúVûç¾Øë¾ûEc®“ O1Þ‰ŸÀ…”?Y<­±ÛáÓõÃÛ{=VEc?¸+F¹>xå§$h{ÿÄ3oÿwVÌvæR>z[`ŒÙ‚wH"lÞ• fC`yDþçMöLä(_ZM¼í’i,ßúî[’ì€Apßn po í-¹ªÂÉoLt¤ï­Ý ^( à†˜í/Ò&†<3ŠðŽ5vò¥‡·=¦d©µR÷àŽ(à(8ã‡E[TfU^ <HƒµÍuwð6èƒ Ä}޶–ø¢u~ŽÈ1f ä$ÞA¢¿%‚™wògðÞ™Ë"`<Þ¾YT}p‰˜¬Ëð¶ŽÊµK4ñ0ñ±¦:ê7—x¶ø±»åù'$ð³I´_/¼Còûõ7KßÀÛûw´u†˜Ò|÷2Z…Œ…K v‹9Eæá8ÞŸ–½¬µÃc¯¾Ö–ÈX—ù-•ù^t³Öæ«¥ŸÊb×ÿ*JjLEQT0ESQLEQEQEQEQEQEQEQEQEQEQEI;ÿ>μQÀ"~GIEND®B`‚postfixadmin-3.0.2/images/quota-colors.png0000664000175000017500000000075411620026507017573 0ustar daviddavid‰PNG  IHDR**… ÿgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<uPLTE³ÿ³ÿxzúüºåù ßÀ7'ó èíÙÌ,"ü$Ó$Þå ô ç³Ê"ìòòöF˜ÿ˜ÐÚÿ-0üãé ð Õ$ù¿ÐßêøúžpÿpCÿCÿfhîÿKNõøtÈÖ×ß D¬ýIDATxÚb`€ 0`0`.0 d… Hʃ0p"00"ƒ@2E „ºì$“Eàɨ/ÀŽD² °ÇF€ Äþ„ÖF:°qÿ%]àÊІ0,Ã1lÞ! ×|è¢c@ˆ¡ ©A¢B(ûÉömðþ`¼øépˆÔ™Dš]"%“HßE¤ú òÅ&òPù­È rº7„œF,ô= ŸýGdW„o†„ ]ãÔÈ·Æ¢±kq`qu¯Æ¡qiüŸFÕâæãMcÕ(M#iÇWzÞ\¸IEND®B`‚postfixadmin-3.0.2/images/arrow-r.png0000664000175000017500000000062710601151304016523 0ustar daviddavid‰PNG  IHDRóÿa^IDATxœ¥“±OÂ@Åhº`¹‘åX@ݚȟ/N§[Š˜&”Ú4ÁÁpRª‹|ãå½wß{÷®²ßï÷œ1窧É6aµy]FDQ€‚›Žàº+i4|åØÂf³Ak1æ×Û<ÏC)E«Õ*[H¶‰%»®Kš¦äy^í5É6) ¬!ÆÇaô0Â÷}¤”¤iúã·ZÅÃj–^—ß~³,ãùå!®¸»»g<ãy^a“ŽB<AÐn·¹½àû>qüÁããëõº€ýó]×¥V«á8—¤é'QôÎn·+áìB›~¿ß§×ë‘}f3g:2›Í¨×ë[¸éb·ÛEkÍ|>gù¶Ämº–|ÀÆö Ù&Lž&V$Žã Ïs¤” C[(»A£Ù@)€1¦DR¢”*´±rú™Îªòæìßøòz³ŠÆè²IEND®B`‚postfixadmin-3.0.2/images/index.php0000664000175000017500000000027410715711016016252 0ustar daviddavid postfixadmin-3.0.2/images/mail_bg.gif0000664000175000017500000003015311617051126016513 0ustar daviddavidGIF89a,æ¥ÓÔÕæèèñôôñÊÊÈÕòùýýôúúüþþñ¼¼Õßóùúú¿Îîôææíïðáéöó÷÷úüûöòòöööüýüøúûÉÈÊÝßßõíîøùøóÙÙöùùøûü÷úû÷úúõøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ù ,,æþ@pH,ȤrÉl:ŸÐ¨tJ­FX‹v°z¿à°xL.›«Y-€›îžßð¸|Ncj€žÝh nu„…†‡ˆ`xyzŽZ‰œžŸqw‹zŽ ¬­ƒ µ¶·¸Ci[¥¦§¨•²¹ÎÏСi{[¾¿À©“á²³ÑèéêL»[îX} ×Àôô© áüšôÐZG°`®Eî´ÀûÓ¡ÀæÕ³é7~á4ø $РLjڭáã'߇¬"0p4Q[|“öaôÐÁ sÍ@êÜi!þ)= ”ôgÌŸ¾I³µÀ ›óuÐ`TNžX³>¹ÃˆÔ‚4ÐðÊUb S©t"Ójeö«ù ª EZóê%"’¿¾†uð@ƒ Æ4Uû`e[Š,>®UñÝ´·3Èv ý70xˆÊoŸy-!Øðtu>(X$ôfÏÀÑ~‡%`°Ç˜nð@Öá&½–¸’ÚFÅåÖP—Ëxƒ‹¯µkä]?4LØ Àxà¯ðÁŠU ú¤ ÔÝBŠ©ª‡K€ðÖÀrÕxRžyw UÀð€ÆÅß`8g[TÒþá÷˜KMÕQÃh`—BZئaÏqj”O] Ϩ4šžZ´éI1Ý­!ÔP¯xÞ¬„r• UåG'S »aFþª{)4Њ{¬4Ûlä{Ô%yÞèϘÈêP8DÜ^Yž”à\ò|ˆŠ’’±ö¦ºk²ÛÀ?Cúë1Q³]Bïi  2Ôž¡ü[žyK B ð_+Û61ũ鄖®+ŽÚXòž'p¿ýz|²nxX[R>Ç8T€/ìŒz0K¾z¬ô:W×ÔEý¼‰Y…·©€´G§ªQbG7”‰ZøNaUi@çhý×?aꄬ,=ÙâRt6Ú>Ç£¤%ЦepÇ­yQ{æUï0wÛ1LpÀ$°†à §Ç¢%þs‡!£“F6"\“Øæ/î•fšÄ—tŒæÈ›X¤ m€™*ïm22¦Ѐê³îŒH YÖøCa ðAé3b©xɽºþqìt ~<¨Lñw rD –T“â8²HÁİ¢ì8q⪽$G‰I1VϾíhû$U©ð嫬š•åLgú?d„‰VŒ^,e&”Iôœ°ê¦1ÔL)­`(ï„¶~x@@»”rNSÒ’å+_–YL(áĬŽp«ˆíªeNV lptR`ÀzêS:Ò€´¡þƒ’@LwìÙL:ð sfLc“:åb’¦4¦öšÙ\¥VH‘‘0€dÚ 5ø—SVâ1¤ñùËI¸=\«FFC–åjÔäÂüðayØ®¨í‚¥ÌS¤¬YJ‚Òö»ÿk¥m͸þ*œð7:…¨‰É&¯qVc '¦‡cqÓ™ Ïj3¨P9aq߯ÞD—>Žò”†µßw·Þÿ‰ìa’ÐMÅJ5­Ž³Ài0¨Bõ¥kÉKu]H£œ¤1 Ý†S:e›‹0î+žñP…È)Éx ®M©?¿„ÔQ’¹Ì‘: ÓLôº‹Ìèxç+& éóü¡éN‡ºˆ¿5€¢ñ‰;n…sëÔ]ÇÄ6›˜CR§Ê™c¾&ÑÚ&½Ý°r$Ýí^w¼ã%(4îc)S"æz“Ç +Oxë[w@é)”"GÂbÄW˜1¾ã1i¢AzC5>4fЧ‚Ò7t"ƒ‘¨ŽëXƒ7ÈŽd!Ph¸|Sq©X Ìé4€ÉFeö‘;™´p6CBLdnûGÙ…H‘è(‰©‘@ùVg¤[Æu\ý#gà5’È 4ì—ˆ×kð•$íwPDudG;%fgrnþ¹h޽Vií‡Gõžg`P„‹aéˆÙ“>I‰jÙ˜AyFùø‘Sóq]˜4I‘(y¦K{0WC6⇯† ¾¤$1Q?MD˜!t˜:Ùn=i‘¦ç˜°i‰Ø‘Ä é}þ×Rh _Æ%e2Üö)£uÖàO¦¢Џˆ[È…«Y–й˜“›ÔYƒ‰s8 o6FIdjÈkJ£:Ó›o€sA·¡OÊ*š÷,M3Ž8¹k^Ñii®YøÙY³™E ’€'}J“ÐHå©z¤â…þ…d#Uÿø¢—ÀÏG˜òHßÉnôYŸö9h™ŸÁhíx€7e-ÆYŽ˜4Wv’aðfw=ÅGôâ î™7Ùœ 棧¡lö“›{hdÄXŒ(Z™ùš,ªªgjR1‡•Àd82#’`u¡9¶£¼¨ŽÁx‘?Ú˜A*&²#²`—I?”™›gÑIáF¨™kà‡R3D&$„,üÁœVª‹È£æ£_ ¦a:¨búUòg*pXº`Qª4»9äÙÌ p"¦F™ÌIŽˆ˜ê§Å¥*¨„:ª€‰`—&ú–HYqÇ ¥àm‰‚—kþœ2§5ÃY(Žå¸ªq ~z–¡ú˜£:¬{!‘i¦FúŸj꡹{Kª™ŽEß`© óPz?qÇ«’Ö©žú©À¬kI¬âÚ °P¢š55Úºn°ëÚ¦ã’(oúyC ¨S«¸·YIS&%”"ÉšÝê­¨‘ª‰tÖ9®Ä:¦‡Š¬¶ÉA‹Ê¨T4רuðZŠ‚ð'aÐЧ2ÿ`ƒ|Ê­õéš ®ìˆ°([_ÂwÛ™ª·™¦ÒW5ä«Öð”e°r:P±± ±ÀMÁz}Z‘  Œ•h²š²J{‰-›¨GÚ…2‹váOKIŽEh”›þ¼(8ćJ‰¡ÝJ²G‹´'»´h+¢žÅ {¢¸©‹šÀ`™éQ!#<›—ÚJÁ‰bË£d[²f›´i»´ÆÊ¶ÜÙ8)– Qh °GÎ(Þ$)ýqD\{¯”Ú k*Eÿú§Œ™¸&X°‹Ûºa !Ùé¸.;™0ëˆqËßær¤x„“Ú¹È0‡«!“€Àµ3C#–à§Û£E«ºúéºÎë ¹°»¹o µ“+µcâl¥8«¾ÛB~?àÀ³£À ÌH¤{ ¾šŽßj´eû£¬KºÍû¼Î »¦Zm&¹Q[œ–+~c‡/¢ þ!háƒ?RÃË5y# 5LD»¼Ì‹ƒô{ÁA »в.pûkމq. ÐZ™Û¢²Ð‰ó$ã4@U8$[›Å{Câd:.7¸—Ö¾iYÁeˆÁ>L®cê¸$¦+i!|5È`Á'² ’oõP04,$å·1\¾Üi3f‘ÀÊÃóûÃ` Ä`EùëŸE¬J7f R š8ÇÍc~6;ÀÁIGZjÂ.™¢#ZÃ]=?ûVF§¼\Áa\ÈЛÒû¸ú[»ß•Æ÷3øÁ(J3„çw‡y³·ÙydòÑS×'ñº¡»tKu„¼[ÁñkȪüºˆ 8øþû¸nËÈhìÈ1Åðª0·Jžx·VÀ°²À5ð%´³[K¼ÅKy6l‚;ìÅ«̓j¬o†¬gº[EËÑ'¥—I·sD†úÄÝ;ÇÂŒLfÌwúÉWÜÇ5£eqˆ¨bÒÃÒ\Ï"údúÊ&J½éšnÚœJR*×ðKÃðÙ²-fÀ ü:„Lìò8’Ÿ Ê¡‹¨B1 š¸ö¼Ñ¬°e:½oY½žûÏi< h' Mô X#Àc Ð2…øæz„{̶pÛÇÑ#&¿àÊÑ>}È|W¦mËrFÒÚÌFò%`ËFQx•ÊÒb`|ô4;Oþ+¨ÎëŒÓœ°k°@úÓb­²°K¢§:ÃÝYaFMÒÊsvPþ&\Tµ(IÀ ýb±®ú:ËõaÓ[¢ª'’å .ç˜c}Øb¼}ðÊCLÄkÍÖþ’ïù`=ªãËhÂÂ^ÙfB…*VÜÀX\”^ýÕc"”ˆÚ=Œ§:Ô!ýØÙ(ØÔФ:ñêǪœ,N3-[}ÌÅ¥2d¡ÚÆ}F°›Ü÷ÎúÜØœÛYiUjfE‘ •Žõ1´3¥ÕÃ[Ñí« Ü§ýÅÇýÃÉÞ¢ÁºÕÜN;:ÐMW¸ˆwJ<è„ÙT—–jHL´õ¹þr¿Y~¦mÁç}Áêà þ÷‹ª6ÄÏÐ ŸÈ“Dák)v‰ßT à3ydáß/2ù×€Í $Á$LŽà ¾â`Öîí´8ªÍ®9.T–ãE·m²PYðñgˆäáŒÜß_RΦ⇼â+®Ø­MF‹œšò=ãs”uÝ7‹¿fgÀyt¼ÚG4äXìà]=)ð†äIŽâ@Ìä N›ON´{cT>Ž•ðBîqK.;ŽV"¦¶.ä}£ØÈ­æh¾ÚjÎæ+ÞàÔãñIPs~‹¤ów¾€V³&¿mÄîׄÎŒ]â…§ä‰Îèªþ¾à¥êÊ~®ÈéË3éTn¤¥FïÇš{ªç4ržzœÃ¢^\©š!‡žâ«žìê}¬Öܰh*åZHë”NL"‡N9žß‹Ýë )ãè_>ÑÃNäÖÁä}ÜÊ~î+ú Ë!-íîž*v,ïqíÎë¥á-QºêÂÍ5¨:î:}ì©îÊN¦oîÜ#øîsîuSˆq‡öÞé —ŽH7ÂþÝ£Ž€]ÚGÞºê½ä¿æ¯ê ûêïð /ᚢa'\ÏŠ·ö~Î@’’+£5Ýïå‹¿f*râõ›Þ ?òBŸ.nò¶ù²)ïîRf¦%vîUŠ›Žo«þgüíî£ýê]}êåž¶ä=ô`OÍ­môiôïn6Žm¦Á P/b³Ab5ïÏB.æZ¢óRƒH]?ª¨ôaöc¼ØvÏîHoö´>)¤öþ;óyØç¡A‘$ x€@†@6Õ d p`0Á-vРl4j­aûØ`¦HB$Ûý€e\¹Ž$( oÛ¶™¡ä]ãù° <©u« ôrú˜Ê F(Ð!ÂÕ¬¸^þ4RÏÒT;2\¼ sY£›¥P»‚6qâѶ÷϶yô÷n¥ƒ†~ l9xK¸ÀDzРCåd2 Ø|Á2¯¡¹Ã‹‡´ÞQP2Ù@‚‚”­ÙCâÅ.æìq8LíÐ-nÚ8yûöÊ”Àå- Hn¨˜sʹ<.3¬¬c&;Ϻãn¬þï®1+¯´N§­(hÄ^Ûä.ùæÓ` d ¸ï6Ünêï¿ïÐ@Zz€£?H©Ú" ¾(€:ë¬ÓJí>»0¬ ©4m@r޼µØ2é-F(1® x)E™DÑgŒÊÔÜ ýöÛÐÆqœzòHîç„lŠH/>è@3%µŠ@;(åQD;2ë¬ü°üœÇ)L•&¨Ë‚Câ3sÁ(@FÍ5 »’¯Ý:Š• UõK¸YŒï ð@Ï=’ÌOˆ$\’³B õ.Ñ`§¤2¼+Ý)¯¤D ø²Òs$€­LNqÒàÓ© Õ26cœI7þàD•ØUUµÆþJ;ó¨(l½•‹b&XFI^/èêW`…½—,X³o¼AHÚ2žEš½äDãËmEZdìZl‘T„M­QÜŠW-‹?XuÑ — ×Åb˜…>À ¢x'¼€ 8¸ß–%v_cÕú`˜X’K_úd6Ú,CB¶Ã 2Å»%1@  áü”†öÌ4Çc‹8Þ⼕¸MS0<ÓϬGÃ:ŒN<Ú|üÂC3–vA¼ÝAPDømþ­ óÊï.Œ=Ñ& yÇHbÓ. Ì¥.kAž´xd@/ÒZ–± êpXª2šq‡åƒW¼ÀÆÈT@P‚BbUÂ@Ç:‚‹C4É NEÌ)O°¢%& LõqSq£VéEl±)b{ƒ¤÷ìqÂc €!L&‘ T„žü$(K)®l‚ÿÎó€UR( d(ö ÃZ~3{Ù‚˜£¸ù½]þ͇¤d0Ù÷’bne ɤ£íçDr&¢>$—•õŽä)ÏAŒ˜À@ :P``L(ڦĪGKp"R{ãÜËŒÌyÎU¡ñ}ñ¢%Ý)¨­y` s !=íLJ½`þ1–Iæ>KÙ¯ãÁRZŠøH7ø(¼Ìdž|èNéV•QÝS‡­˜ù€¿5 3S˜<"H76’þŞ݈GJ³ÕµEÓŸgËbó)jÞ´6kàéXIW\†Dbj €Œj´’–lc!äå$É=U'z¸R𠽩XuŸüÚ#²øÇ¿ 2‡H+$ÉZKÆÒÍ2©ëÞnÖj> V~êc'¤øy&CxµQ(—2 øÕZ]ëKõ8ØÂr¶°ü*X_´Æ"¹uÑcÿ 1QöœŒPf5+×@`Ò˜@GB+Zÿ8­t®E:¬,°2ó†aѦ9ýÑV0þl¸-nu[€Ü>6T,Âܶµ˜ÈÀáäZD&PŸÍu.`î·WL@h¥{†mZ*ÍiÁî(§`l;ÞÒ—·4”Σ:Y÷ª³q ÆQ1¸‰\`(Ÿ)†µ_¨V87úÂé®gUŽDÓÀFð¦»":øÁçÝ©öÖ»ŸlDrv˜åg:f\H$(ÀØ|¢¯˜ª& e¨[7ì¥ìªü4% õGcÕFa%k„*•P{£T«ë0jD­ˆ© F¶ðvŠï@¹§zZK6PÀ+znmV%×ê™kˆƒ!Œcý5ufîë0ÊÁ¬€øqþæ(®¾PНf7b2ž+W`DgÅ<0¨ùcÂðMql™ËÜèñŠ7{KNsPÙl]Å70@­Ø¨.tú? ÊŠDHêá5sª kÊÍ¡A¿ZÁi­íaoÓZÕl÷¸qM: “êLÉ7¡M`9–C¨¡€!¸Š¯bsöð ¾¢6Ü葵ɉm®¾©¡‡ü¶­Ln‡;\Ú¾íž÷ÖŒ Ùý0£HfC[Õeä…T¦“ööbx„Õî»u‡¬¨{Û¤`—µsSC­²ZkᎦáÃy.nssÅj&Þ÷øc> kå@a •IŒK$ó²ÁÉþJ@˜wr”ƒ§¥“ømÅ­²,ó¨|Ù›¼èÝzÛÑ=WûÚ}n­Þó&?¾[0Ü“XÄf#‘M´ÂLýU½úh¤ì–é¶<í.Žy^?#·܉gûäyN: X—¡»/ ž6ÞÅæ‚8°¬{g@|üÕûË­ì ^çÙ ^¼ÆËýñåŽ=åyß{ñJåƒin/£6(fàóÊÑt±£Ð |‰ÿHý @Ö‹qÊÒŽ=Îÿ¼RŒeüLð+æ[ûýk7³eî’¼È]UIBòýF¤¦?GŘ@ˆB}ë“úôŠ[ølë¶Oö¨,,æþFâˆʬÒ#Ðá`d¯&í²$‚¼åÔÀþêË$úÊ0øÏ8ªoßú‹œHö 0µÆÍë…*¦Mg÷ TªûÒ ü°aÎÀ|²!:ò¤ãämô¾`ä’@ Fðÿð¬õJ«>RPÍMÜ(@eª° ËO÷d·÷ÌË"8€ÕE—À .€?²áù„ÃØG2Šaf¡l!ÈJ°ð– £p*t ýüŒ ÿP׎Âht0üî§›ø¡È8Š>À¤ÿ@ê õ -ª‰åj-ò.Â*ï¡ÑÏ µìýÌ ürª0–Âã r å:¬þn¿L›ìæ›Ðn†r΋<ñÊB'¯‡‘­ÐÇM¢â XqÓ Bâ0͹Vå"w‘á°‡?1µ¤0Ñ爑qæòâ¤Boˆ$c1 éP´Ä…{Pªº­¼tNû‘ÜȱÍQ ’ÜVj¦º%üpâ‡Pô P o V𤋮‘œ £Çl%Ïû ‡q CÒÃÀ¶’â§Nñ Ó.hˆBÆäq Š›Èoö@ªÆ!9Qõ:ò‡ñÏ>’ E’(‰² Éåövð4@jäª ûF-0Ôí6œ):‰¼v’#þ}2rö„²(Çr,»î$ã® :`Ãäª*ÀâðN­ÙòŒ‡î±"¨kÏnÎ+Ã,…r(ÉR0½Æ l0·\ ìä ôîŸò%‘ ÿh„vé"D+Íkáòœú²#s0?“,åÀ€á(ÎrR:`÷Î1ÜO2ùm­ô,¤2+35ó›8Ó=4{s GsáºFeb¥²‰éÑ-_R"O0ú#6-r6«k/¹N7w };GR4ª &@½˜Ñ~ì*7 q^ÂæêÐ9ŸS6£K:§³±ªÓ:Ë1;ërà`ç莀?ó-·ÔËâø€!‘Ê”`þˆÂ…=›KRJå3ÅÒ>í,Â$ù€?éäúOa®+_^aÖ°<7A šsA-ò£1psç ysB³S#†Q8‚‚NtD×à ª¤2í8E/9‰B&1|R´ ãq F¿RBgT å@aŒQ#r (4Ôà’H ¨“âÈë¢)…=MI‡nEÇá 7³Ii0AJASJU+,Pb‚â1c1¾‚ö2$Ž*cÈq2å@sAàŽTA-êÓÄ ýpM#´Mß”(IÒæÆ-µäéI¢)`N¤1"qˆfOÇBaa-ë«pu õPwiL¦¬6Éþ¬Q¹PF!õ3Ý€RŒ,ê@,Ö€hˆ;•¯B¤DMe’Cù‚´% a?€ÆåHu[äZ²°'c•MŸ”VC³ Y° 9B"\#àgîS4GS R4)„³ìÈÍ—/Y‹°œõYÏ)Z„abp×T×nV³µ(1â+ÊMŸ¾Õ –.@äô Æ‚Ø$åqÕC¼Ô$*ÃD6 P?ÆØèÌ/È\+‚U+­õáúUíþ`E2#Âlµ ö`åkƒä ;|§©ê€¤îW#2ð®«Á ÄÂÈ$cc×¥c•ìÒ‰¶Bd_çÔdÇ ¥ö#W–J ³þ ów&UÌ@¾¾vƒ°#€EÈU¤ìMS&ûm" ‡d¬h?fÞ–­|íkÍUÝo1(jÙ®j­64ß ?§ì¾0B6ÈÍ6Éke&€c„BbÙÀà*µdŠ•?n^­¡ÒŽopÌè^[ôû¶çþp²ü¾-Téh8Àî7âÉ‘b|õ0²ÔêDÞöhfsØ’ B&< |ˆJl3Pvvh<ù*M×ÕdUöt¯Vpˆ;Œh¬îR{´>ð¾Þˆl§´¹ö!·ÎwÏ—(ŒÇr§è»dx§ jLr‚vgP–wdA‚ö5z±uzµ3 R?YJþæ@|1,¾æ¥*Væ+¶õ€Â|%V ¶ mk&Þ· øÎ+DÌîŒÉ~Ç'Z+dt½Rzû× +ô¼( C3”?QÊlI<À€ãŘ*„€c¡Ô Ür‚½Ë¦ö‚AfôXDÄÔ‰ƒ'H| ÏAZD>G˜„µ#h/p4Gs×8¸&5†=êÂLžd­E¾äºd‡»‹}³ ‚8!š¯B ÝމV ñµZuÓ‰!•{©WÊGRGŽÀZ3V.¢“º†ßJ†·FBÅÔ$iʌϊâV/ø-ã×x%ãØuÄCXïp󊣡Cë´pXõþTàtµp7`‹•D‘-ö"ëQ¤»Ú÷à*™9pe&I“<ϲ¬ÒQð±ª:“WÖK'•`Uk{ç ·nr#— @U¤Êîuã‹`¹*LŠ|צv™—mÅ—1 Ý®ƒ“-FrPZëx õ‰õŒjµt•Öh˜šQê(¸EÐ'k$1À2ÚäŸk¶Äyœ– “¹8­‘”<™abT”G™$Y]=@¾U¬…ÝÀ\#6]™ ?¸X“á{µ™&e«j"ºÁj°Æˆ¶&¢çŽQ¸i1@9e“9ž«˜Eæ viVÈŽ¨Å¦(VŸñ”H÷¡0þÓ¤2&à¡yGzP#¡X¦Ÿ1²Y^rZÚSYdeý¨ƒ:¤ãÀ‹9:b6"0p©ŸAJWg9u(ŒCrk;¬2 «­“̘‚+ø«ßר€9‘/€¬-ŽŸ­§¶t×zz³¶”V¬Ô+3Vfzk˜º©Ÿºú8fg‚ nc¥ƒêâ} Û°ÃÙ«»’‘7c“piФܹ²é“­¯vp§¡{1ˆÂ6‘7© îšW¯‹ƒÏ&¡ Ñ‚®"Y—›¶:d÷€—wÍJ©}úd¯3¨S÷¼¶h`ù*,­óò‰¹Ò)(ÀN}owW<²$—e;þ¦³;»; ~”w˜Uå óM«µM“„¡8»óED-r ”Á½;]¿£¯€l÷-³”(ÀVÑ9Öw‚ýû\Å/ÉÍpziöe”Œâ œÁûw‘¿ŽG !ž2CÈ´™Pª"½½t¼3ª ´D ¥Mü…`-ÅWÊY|À‘ÏÍÚù¬—]ƒ»­ßà€JŸR¸?郷×ÐLj:Ï6nülØ^1•呇a"¶ºú¿£Ü΃—˜ûs)kB÷ µ¼„¥áÏVˉøó!7” H³Ç@½û‚ÜR‰¼ºB0­ûº±ûÎ3~éJkrÛ,>QœôzÒÆ«úqÚþZOÅ­2Ôq—Hsê">£{% –7ƒP&Õ^ÄWËØÒc Ó5؃—ÓåeèvPÊL«ë¦7‹»nW­—‚â¥1°8½SºÖ`k®E,bp¹¿êɃ]Ü«à¸d˜>·JúÜú §ûâð™áÀJë[b%ò¿HTÙ@Û³ù…íÉxøûÄ<ÜÇÝàÉ=©ÆúÆûj²|F³Øq•½4 ¨Wß|m™`Z™§pÚ;³¶Àj·«zXzþàW>qèjl'ˆá}OJ¹×áVÊ`Ó¥ã ):€Ò7^Z©KeMa,ܽ7è ZµwÁùÐ~埾}þ\~k.î±/Ái^0Á¨áZ®™aa…Zp3þ´Ĥ_¤;°¯Ý‡™Þ× êß> ì ‰¾ÏØE½·!>ë1‚™5©6l½>ɵ'àÈ£²(Ž‚öÀ8ío›°c»éëî#?î !Û-+æÑ¢S’]0ARïÖ“ú³¹8;îó©' ŒHºS™ ‘OgÚdz]å%_öb$¢ª"! ޝ°>$ñӀ͔æ‘û€¹ÈRqv€bì“ÐG¶]Ĩ»ñ)yö«?dº !._7Cµ~ “¢çHÐ}ªÖ1°>·(€ÃŸýW9É¡•ª™¡§Çé«ÿ×xþô²ŸáuCÑ„:Âa‡²@&ÊÏBÑx<"qZ(t.™¢ëí2 ɦÀÑ@¥IÀAXÀ ryÂa(L<€ÅT Vüõõ$€06:>BFJNRVZ^bfjnnòX4l–6œ6hlp¸rPQÌÒ¢y<”>LÅv¸²jq}y…]p°žM¹R@´ÉÁ-¼I×òùþ*&r~ƒ‡‹“—;ú4—’¢ <oðv5m@áž:8PKÍVcA0aÂŒ¹âª×†>ˆâ7ç´BÚþ¤í…næ>‚ )r$¥k¡F±CÕÞ«yZÝÐ`_‚šþtxðŠ‚…  ‡—à ´Š„]üÄÑ#ɪV¯b½àÏÉ”îèÁâ…„ÍL~5—Ns àŸ¢/7ôÜb̘vïÚ-@C›<…º Õ¬†#¶ê)«wíN ðP4, Mú¢¥§Ž*'m¡Ä‹ûóK˜¢†X@à € ܱpâÚ¶o‡ó`ʃ|%·¤²„›6% –‚'hÜ=÷`†Ë:à’™èƧ ÓÆ-~ $lang_name) { if ($lang == $current_lang) { $selected = ' selected="selected"'; } else { $selected = ''; } $selector .= ""; } $selector .= ""; return $selector; } /** * Checks if a domain is valid * @param string $domain * @return empty string if the domain is valid, otherwise string with the errormessage * * TODO: make check_domain able to handle as example .local domains * TODO: skip DNS check if the domain exists in PostfixAdmin? */ function check_domain ($domain) { if (!preg_match ('/^([-0-9A-Z]+\.)+' . '([-0-9A-Z]){2,13}$/i', ($domain))) { return sprintf(Config::lang('pInvalidDomainRegex'), htmlentities($domain)); } if (Config::bool('emailcheck_resolve_domain') && 'WINDOWS'!=(strtoupper(substr(php_uname('s'), 0, 7)))) { // Look for an AAAA, A, or MX record for the domain if(function_exists('checkdnsrr')) { $start = microtime(true); # check for slow nameservers, part 1 // AAAA (IPv6) is only available in PHP v. >= 5 if (version_compare(phpversion(), "5.0.0", ">=") && checkdnsrr($domain,'AAAA')) { $retval = ''; } elseif (checkdnsrr($domain,'A')) { $retval = ''; } elseif (checkdnsrr($domain,'MX')) { $retval = ''; } else { $retval = sprintf(Config::lang('pInvalidDomainDNS'), htmlentities($domain)); } $end = microtime(true); # check for slow nameservers, part 2 $time_needed = $end - $start; if ($time_needed > 2) { error_log("Warning: slow nameserver - lookup for $domain took $time_needed seconds"); } return $retval; } else { return 'emailcheck_resolve_domain is enabled, but function (checkdnsrr) missing!'; } } return ''; } /** * check_email * Checks if an email is valid - if it is, return true, else false. * @param String $email - a string that may be an email address. * @return empty string if it's a valid email address, otherwise string with the errormessage * TODO: make check_email able to handle already added domains */ function check_email ($email) { $ce_email=$email; //strip the vacation domain out if we are using it //and change from blah#foo.com@autoreply.foo.com to blah@foo.com if (Config::bool('vacation')) { $vacation_domain = Config::read('vacation_domain'); $ce_email = preg_replace("/@$vacation_domain\$/", '', $ce_email); $ce_email = preg_replace("/#/", '@', $ce_email); } // Perform non-domain-part sanity checks if (!preg_match ('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_{|}~]+' . '@' . '[^@]+$/i', $ce_email)) { return Config::lang_f('pInvalidMailRegex', $email); } // Determine domain name $matches=array(); if (!preg_match('|@(.+)$|',$ce_email,$matches)) { return Config::lang_f('pInvalidMailRegex', $email); } $domain=$matches[1]; # check domain name return check_domain($domain); } /** * Clean a string, escaping any meta characters that could be * used to disrupt an SQL string. i.e. "'" => "\'" etc. * * @param String (or Array) * @return String (or Array) of cleaned data, suitable for use within an SQL * statement. */ function escape_string ($string) { global $CONF; // if the string is actually an array, do a recursive cleaning. // Note, the array keys are not cleaned. if(is_array($string)) { $clean = array(); foreach(array_keys($string) as $row) { $clean[$row] = escape_string($string[$row]); } return $clean; } if (get_magic_quotes_gpc ()) { $string = stripslashes($string); } if (!is_numeric($string)) { $link = db_connect(); if ($CONF['database_type'] == "mysql") { $escaped_string = mysql_real_escape_string($string, $link); } if ($CONF['database_type'] == "mysqli") { $escaped_string = mysqli_real_escape_string($link, $string); } if (db_sqlite()) { $escaped_string = SQLite3::escapeString($string); } if (db_pgsql()) { // php 5.2+ allows for $link to be specified. if (version_compare(phpversion(), "5.2.0", ">=")) { $escaped_string = pg_escape_string($link, $string); } else { $escaped_string = pg_escape_string($string); } } } else { $escaped_string = $string; } return $escaped_string; } /** * safeget * Action: get value from $_GET[$param], or $default if $_GET[$param] is not set * Call: $param = safeget('param') # replaces $param = $_GET['param'] * - or - * $param = safeget('param', 'default') * * @param String parameter name. * @param String (optional) - default value if key is not set. * @return String */ function safeget ($param, $default="") { $retval=$default; if (isset($_GET[$param])) $retval=$_GET[$param]; return $retval; } /** * safepost - similar to safeget() * @see safeget() * @param String parameter name * @param String (optional) default value (defaults to "") * @return String - value in $_POST[$param] or $default * same as safeget, but for $_POST */ function safepost ($param, $default="") { $retval=$default; if (isset($_POST[$param])) $retval=$_POST[$param]; return $retval; } /** * safeserver * @see safeget() * @param String $param * @param String $default (optional) * @return String value from $_SERVER[$param] or $default */ function safeserver ($param, $default="") { $retval=$default; if (isset($_SERVER[$param])) $retval=$_SERVER[$param]; return $retval; } /** * safecookie * @see safeget() * @param String $param * @param String $default (optional) * @return String value from $_COOKIE[$param] or $default */ function safecookie ($param, $default="") { $retval=$default; if (isset($_COOKIE[$param])) $retval=$_COOKIE[$param]; return $retval; } /** * safesession * @see safeget() * @param String $param * @param String $default (optional) * @return String value from $_SESSION[$param] or $default */ function safesession ($param, $default="") { $retval=$default; if (isset($_SESSION[$param])) $retval=$_SESSION[$param]; return $retval; } /** * pacol * @param int $allow_editing * @param int $display_in_form * @param int display_in_list * @param String $type * @param String PALANG_label * @param String PALANG_desc * @param any optional $default * @param array optional $options * @param int or $not_in_db - if array, can contain the remaining parameters as associated array * @param ... * @return array for $struct */ function pacol($allow_editing, $display_in_form, $display_in_list, $type, $PALANG_label, $PALANG_desc, $default = "", $options = array(), $multiopt=0, $dont_write_to_db=0, $select="", $extrafrom="", $linkto="") { if ($PALANG_label != '') $PALANG_label = Config::lang($PALANG_label); if ($PALANG_desc != '') $PALANG_desc = Config::lang($PALANG_desc ); if (is_array($multiopt)) { # remaining parameters provided in named array $not_in_db = 0; # keep default value foreach ($multiopt as $key => $value) { $$key = $value; # extract everything to the matching variable } } else { $not_in_db = $multiopt; } return array( 'editable' => $allow_editing, 'display_in_form' => $display_in_form, 'display_in_list' => $display_in_list, 'type' => $type, 'label' => $PALANG_label, # $PALANG field label 'desc' => $PALANG_desc, # $PALANG field description 'default' => $default, 'options' => $options, 'not_in_db' => $not_in_db, 'dont_write_to_db' => $dont_write_to_db, 'select' => $select, # replaces the field name after SELECT 'extrafrom' => $extrafrom, # added after FROM xy - useful for JOINs etc. 'linkto' => $linkto, # make the value a link - %s will be replaced with the ID ); } // // get_domain_properties // Action: Get all the properties of a domain. // Call: get_domain_properties (string domain) // function get_domain_properties ($domain) { $handler = new DomainHandler(); if (!$handler->init($domain)) { die("Error: " . join("\n", $handler->errormsg)); } if (!$handler->view()) { die("Error: " . join("\n", $handler->errormsg)); } $result = $handler->result(); return $result; } /** * create_page_browser * Action: Get page browser for a long list of mailboxes, aliases etc. * Call: $pagebrowser = create_page_browser('table.field', 'query', 50) # replaces $param = $_GET['param'] * * @param String idxfield - database field name to use as title * @param String query - core part of the query (starting at "FROM") * @return String */ function create_page_browser($idxfield, $querypart) { global $CONF; $page_size = (int) $CONF['page_size']; $label_len = 2; $pagebrowser = array(); if ($page_size < 2) { # will break the page browser die('$CONF[\'page_size\'] must be 2 or more!'); } # get number of rows $query = "SELECT count(*) as counter FROM (SELECT $idxfield $querypart) AS tmp"; $result = db_query ($query); if ($result['rows'] > 0) { $row = db_array ($result['result']); $count_results = $row['counter'] -1; # we start counting at 0, not 1 } # echo "

rows: " . ($count_results +1) . " --- $query"; if ($count_results < $page_size) { return array(); # only one page - no pagebrowser required } # init row counter $initcount = "SET @row=-1"; if (db_pgsql()) { $initcount = "CREATE TEMPORARY SEQUENCE rowcount MINVALUE 0"; } if (!db_sqlite()) { $result = db_query($initcount); } # get labels for relevant rows (first and last of each page) $page_size_zerobase = $page_size - 1; $query = " SELECT * FROM ( SELECT $idxfield AS label, @row := @row + 1 AS row $querypart ) idx WHERE MOD(idx.row, $page_size) IN (0,$page_size_zerobase) OR idx.row = $count_results "; if (db_pgsql()) { $query = " SELECT * FROM ( SELECT $idxfield AS label, nextval('rowcount') AS row $querypart ) idx WHERE MOD(idx.row, $page_size) IN (0,$page_size_zerobase) OR idx.row = $count_results "; } if (db_sqlite()) { $query = " WITH idx AS (SELECT * $querypart) SELECT $idxfield AS label, (SELECT (COUNT(*) - 1) FROM idx t1 WHERE t1.$idxfield <= t2.$idxfield) AS row FROM idx t2 WHERE (row % $page_size) IN (0,$page_size_zerobase) OR row = $count_results"; } # echo "

$query"; # TODO: $query is MySQL-specific # PostgreSQL: # http://www.postgresql.org/docs/8.1/static/sql-createsequence.html # http://www.postgresonline.com/journal/archives/79-Simulating-Row-Number-in-PostgreSQL-Pre-8.4.html # http://www.pg-forum.de/sql/1518-nummerierung-der-abfrageergebnisse.html # CREATE TEMPORARY SEQUENCE foo MINVALUE 0 MAXVALUE $page_size_zerobase CYCLE # afterwards: DROP SEQUENCE foo $result = db_query ($query); if ($result['rows'] > 0) { while ($row = db_array ($result['result'])) { if ($row2 = db_array ($result['result'])) { $label = substr($row['label'],0,$label_len) . '-' . substr($row2['label'],0,$label_len); $pagebrowser[] = $label; } else { # only one row remaining $label = substr($row['label'],0,$label_len); $pagebrowser[] = $label; } } } if (db_pgsql()) { db_query ("DROP SEQUENCE rowcount"); } return $pagebrowser; } // // divide_quota // Action: Recalculates the quota from MBs to bytes (divide, /) // Call: divide_quota (string $quota) // function divide_quota ($quota) { if ($quota == -1) return $quota; $value = round($quota / Config::read('quota_multiplier'),2); return $value; } // // check_owner // Action: Checks if the admin is the owner of the domain (or global-admin) // Call: check_owner (string admin, string domain) // function check_owner ($username, $domain) { $table_domain_admins = table_by_key('domain_admins'); $E_username = escape_string($username); $E_domain = escape_string($domain); $result = db_query ("SELECT 1 FROM $table_domain_admins WHERE username='$E_username' AND (domain='$E_domain' OR domain='ALL') AND active='1'"); if ($result['rows'] == 1 || $result['rows'] == 2) { # "ALL" + specific domain permissions is possible # TODO: if superadmin, check if given domain exists in the database return true; } else { if ($result['rows'] > 2) { # more than 2 results means something really strange happened... flash_error("Permission check returned multiple results. Please go to 'edit admin' for your username and press the save " . "button once to fix the database. If this doesn't help, open a bugreport."); } return false; } } /** * List domains for an admin user. * @param String $username * @return array of domain names. */ function list_domains_for_admin ($username) { $table_domain = table_by_key('domain'); $table_domain_admins = table_by_key('domain_admins'); $E_username = escape_string($username); $query = "SELECT $table_domain.domain FROM $table_domain "; $condition[] = "$table_domain.domain != 'ALL'"; $result = db_query ("SELECT username FROM $table_domain_admins WHERE username='$E_username' AND domain='ALL'"); if ($result['rows'] < 1) { # not a superadmin $query .= " LEFT JOIN $table_domain_admins ON $table_domain.domain=$table_domain_admins.domain "; $condition[] = "$table_domain_admins.username='$E_username' "; $condition[] = "$table_domain.active='" . db_get_boolean(true) . "'"; # TODO: does it really make sense to exclude inactive... $condition[] = "$table_domain.backupmx='" . db_get_boolean(False) . "'"; # TODO: ... and backupmx domains for non-superadmins? } $query .= " WHERE " . join(' AND ', $condition); $query .= " ORDER BY $table_domain.domain"; $list = array (); $result = db_query ($query); if ($result['rows'] > 0) { $i = 0; while ($row = db_array ($result['result'])) { $list[$i] = $row['domain']; $i++; } } return $list; } // // list_domains // Action: List all available domains. // Call: list_domains () // function list_domains () { $list = array(); $table_domain = table_by_key('domain'); $result = db_query ("SELECT domain FROM $table_domain WHERE domain!='ALL' ORDER BY domain"); if ($result['rows'] > 0) { $i = 0; while ($row = db_array ($result['result'])) { $list[$i] = $row['domain']; $i++; } } return $list; } // // list_admins // Action: Lists all the admins // Call: list_admins () // // was admin_list_admins // function list_admins () { $handler = new AdminHandler(); $handler->getList(''); return $handler->result(); } // // encode_header // Action: Encode a string according to RFC 1522 for use in headers if it contains 8-bit characters. // Call: encode_header (string header, string charset) // function encode_header ($string, $default_charset = "utf-8") { if (strtolower ($default_charset) == 'iso-8859-1') { $string = str_replace ("\240",' ',$string); } $j = strlen ($string); $max_l = 75 - strlen ($default_charset) - 7; $aRet = array (); $ret = ''; $iEncStart = $enc_init = false; $cur_l = $iOffset = 0; for ($i = 0; $i < $j; ++$i) { switch ($string{$i}) { case '=': case '<': case '>': case ',': case '?': case '_': if ($iEncStart === false) { $iEncStart = $i; } $cur_l+=3; if ($cur_l > ($max_l-2)) { $aRet[] = substr ($string,$iOffset,$iEncStart-$iOffset); $aRet[] = "=?$default_charset?Q?$ret?="; $iOffset = $i; $cur_l = 0; $ret = ''; $iEncStart = false; } else { $ret .= sprintf ("=%02X",ord($string{$i})); } break; case '(': case ')': if ($iEncStart !== false) { $aRet[] = substr ($string,$iOffset,$iEncStart-$iOffset); $aRet[] = "=?$default_charset?Q?$ret?="; $iOffset = $i; $cur_l = 0; $ret = ''; $iEncStart = false; } break; case ' ': if ($iEncStart !== false) { $cur_l++; if ($cur_l > $max_l) { $aRet[] = substr ($string,$iOffset,$iEncStart-$iOffset); $aRet[] = "=?$default_charset?Q?$ret?="; $iOffset = $i; $cur_l = 0; $ret = ''; $iEncStart = false; } else { $ret .= '_'; } } break; default: $k = ord ($string{$i}); if ($k > 126) { if ($iEncStart === false) { // do not start encoding in the middle of a string, also take the rest of the word. $sLeadString = substr ($string,0,$i); $aLeadString = explode (' ',$sLeadString); $sToBeEncoded = array_pop ($aLeadString); $iEncStart = $i - strlen ($sToBeEncoded); $ret .= $sToBeEncoded; $cur_l += strlen ($sToBeEncoded); } $cur_l += 3; // first we add the encoded string that reached it's max size if ($cur_l > ($max_l-2)) { $aRet[] = substr ($string,$iOffset,$iEncStart-$iOffset); $aRet[] = "=?$default_charset?Q?$ret?= "; $cur_l = 3; $ret = ''; $iOffset = $i; $iEncStart = $i; } $enc_init = true; $ret .= sprintf ("=%02X", $k); } else { if ($iEncStart !== false) { $cur_l++; if ($cur_l > $max_l) { $aRet[] = substr ($string,$iOffset,$iEncStart-$iOffset); $aRet[] = "=?$default_charset?Q?$ret?="; $iEncStart = false; $iOffset = $i; $cur_l = 0; $ret = ''; } else { $ret .= $string{$i}; } } } break; # end switch } } if ($enc_init) { if ($iEncStart !== false) { $aRet[] = substr ($string,$iOffset,$iEncStart-$iOffset); $aRet[] = "=?$default_charset?Q?$ret?="; } else { $aRet[] = substr ($string,$iOffset); } $string = implode ('',$aRet); } return $string; } // // generate_password // Action: Generates a random password // Call: generate_password () // function generate_password () { // length of the generated password $length = 8; // define possible characters $possible = "2345678923456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ"; # skip 0 and 1 to avoid confusion with O and l // add random characters to $password until $length is reached $password = ""; while (strlen($password) < $length) { // pick a random character from the possible ones $char = substr($possible, mt_rand(0, strlen($possible)-1), 1); // we don't want this character if it's already in the password if (!strstr($password, $char)) { $password .= $char; } } return $password; } /** * Check if a password is strong enough based on the conditions in $CONF['password_validation'] * @param String $password * @return array of error messages, or empty array if the password is ok */ function validate_password($password) { $val_conf = Config::read('password_validation'); $result = array(); $minlen = (int) Config::read('min_password_length'); # used up to 2.3.x - check it for backward compatibility if ($minlen > 0) { $val_conf['/.{' . $minlen . '}/'] = "password_too_short $minlen"; } foreach ($val_conf as $regex => $message) { if (!preg_match($regex, $password)) { $msgparts = preg_split("/ /", $message, 2); if (count($msgparts) == 1) { $result[] = Config::lang($msgparts[0]); } else { $result[] = sprintf(Config::lang($msgparts[0]), $msgparts[1]); } } } return $result; } /** * Encrypt a password, using the apparopriate hashing mechanism as defined in * config.inc.php ($CONF['encrypt']). * When wanting to compare one pw to another, it's necessary to provide the salt used - hence * the second parameter ($pw_db), which is the existing hash from the DB. * * @param string $pw * @param string $encrypted password * @return string encrypted password. */ function pacrypt ($pw, $pw_db="") { global $CONF; $password = ""; $salt = ""; if ($CONF['encrypt'] == 'md5crypt') { $split_salt = preg_split ('/\$/', $pw_db); if (isset ($split_salt[2])) { $salt = $split_salt[2]; } $password = md5crypt ($pw, $salt); } elseif ($CONF['encrypt'] == 'md5') { $password = md5($pw); } elseif ($CONF['encrypt'] == 'system') { if ($pw_db) { $password = crypt($pw, $pw_db); } else { $password = crypt($pw); } } elseif ($CONF['encrypt'] == 'cleartext') { $password = $pw; } // See https://sourceforge.net/tracker/?func=detail&atid=937966&aid=1793352&group_id=191583 // this is apparently useful for pam_mysql etc. elseif ($CONF['encrypt'] == 'mysql_encrypt') { $pw = escape_string($pw); if ($pw_db!="") { $salt=escape_string(substr($pw_db,0,2)); $res=db_query("SELECT ENCRYPT('".$pw."','".$salt."');"); } else { $res=db_query("SELECT ENCRYPT('".$pw."');"); } $l = db_row($res["result"]); $password = $l[0]; } elseif ($CONF['encrypt'] == 'authlib') { $flavor = $CONF['authlib_default_flavor']; $salt = substr(create_salt(), 0, 2); # courier-authlib supports only two-character salts if(preg_match('/^{.*}/', $pw_db)) { // we have a flavor in the db -> use it instead of default flavor $result = preg_split('/[{}]/', $pw_db, 3); # split at { and/or } $flavor = $result[1]; $salt = substr($result[2], 0, 2); } if(stripos($flavor, 'md5raw') === 0) { $password = '{' . $flavor . '}' . md5($pw); } elseif(stripos($flavor, 'md5') === 0) { $password = '{' . $flavor . '}' . base64_encode(md5($pw, TRUE)); } elseif(stripos($flavor, 'crypt') === 0) { $password = '{' . $flavor . '}' . crypt($pw, $salt); } elseif(stripos($flavor, 'SHA') === 0) { $password = '{' . $flavor . '}' . base64_encode(sha1($pw, TRUE)); } else { die("authlib_default_flavor '" . $flavor . "' unknown. Valid flavors are 'md5raw', 'md5', 'SHA' and 'crypt'"); } } elseif (preg_match("/^dovecot:/", $CONF['encrypt'])) { $split_method = preg_split ('/:/', $CONF['encrypt']); $method = strtoupper($split_method[1]); # If $pw_db starts with {method}, change $method accordingly if (!empty($pw_db) && preg_match('/^\{([A-Z0-9.-]+)\}.+/', $pw_db, $method_matches)) { $method = $method_matches[1]; } if (! preg_match("/^[A-Z0-9.-]+$/", $method)) { die("invalid dovecot encryption method"); } # TODO: check against a fixed list? # if (strtolower($method) == 'md5-crypt') die("\$CONF['encrypt'] = 'dovecot:md5-crypt' will not work because dovecotpw generates a random salt each time. Please use \$CONF['encrypt'] = 'md5crypt' instead."); # $crypt_method = preg_match ("/.*-CRYPT$/", $method); # digest-md5 and SCRAM-SHA-1 hashes include the username - until someone implements it, let's declare it as unsupported if (strtolower($method) == 'digest-md5') die("Sorry, \$CONF['encrypt'] = 'dovecot:digest-md5' is not supported by PostfixAdmin."); if (strtoupper($method) == 'SCRAM-SHA-1') die("Sorry, \$CONF['encrypt'] = 'dovecot:scram-sha-1' is not supported by PostfixAdmin."); # TODO: add -u option for those hashes, or for everything that is salted (-u was available before dovecot 2.1 -> no problem with backward compability) $dovecotpw = "doveadm pw"; if (!empty($CONF['dovecotpw'])) $dovecotpw = $CONF['dovecotpw']; # Use proc_open call to avoid safe_mode problems and to prevent showing plain password in process table $spec = array( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w"), // stderr ); $nonsaltedtypes = "SHA|SHA1|SHA256|SHA512|CLEAR|CLEARTEXT|PLAIN|PLAIN-TRUNC|CRAM-MD5|HMAC-MD5|PLAIN-MD4|PLAIN-MD5|LDAP-MD5|LANMAN|NTLM|RPA"; $salted = ! preg_match("/^($nonsaltedtypes)(\.B64|\.BASE64|\.HEX)?$/", strtoupper($method) ); $dovepasstest = ''; if ( $salted && (!empty($pw_db)) ) { # only use -t for salted passwords to be backward compatible with dovecot < 2.1 $dovepasstest = " -t " . escapeshellarg($pw_db); } $pipe = proc_open("$dovecotpw '-s' $method$dovepasstest", $spec, $pipes); if (!$pipe) { die("can't proc_open $dovecotpw"); } else { // use dovecot's stdin, it uses getpass() twice (except when using -t) // Write pass in pipe stdin if (empty($dovepasstest)) { fwrite($pipes[0], $pw . "\n", 1+strlen($pw)); usleep(1000); } fwrite($pipes[0], $pw . "\n", 1+strlen($pw)); fclose($pipes[0]); // Read hash from pipe stdout $password = fread($pipes[1], "200"); if (empty($dovepasstest)) { if ( !preg_match('/^\{' . $method . '\}/', $password)) { $stderr_output = stream_get_contents($pipes[2]); error_log('dovecotpw password encryption failed.'); error_log('STDERR output: ' . $stderr_output); die("can't encrypt password with dovecotpw, see error log for details"); } } else { if ( !preg_match('(verified)', $password)) { $password="Thepasswordcannotbeverified"; } else { $password = rtrim(str_replace('(verified)', '', $password)); } } fclose($pipes[1]); fclose($pipes[2]); proc_close($pipe); if ( (!empty($pw_db)) && (substr($pw_db,0,1) != '{') ) { # for backward compability with "old" dovecot passwords that don't have the {method} prefix $password = str_replace('{' . $method . '}', '', $password); } $password = rtrim($password); } } else { die ('unknown/invalid $CONF["encrypt"] setting: ' . $CONF['encrypt']); } return $password; } // // md5crypt // Action: Creates MD5 encrypted password // Call: md5crypt (string cleartextpassword) // function md5crypt ($pw, $salt="", $magic="") { $MAGIC = "$1$"; if ($magic == "") $magic = $MAGIC; if ($salt == "") $salt = create_salt (); $slist = explode ("$", $salt); if ($slist[0] == "1") $salt = $slist[1]; $salt = substr ($salt, 0, 8); $ctx = $pw . $magic . $salt; $final = hex2bin (md5 ($pw . $salt . $pw)); for ($i=strlen ($pw); $i>0; $i-=16) { if ($i > 16) { $ctx .= substr ($final,0,16); } else { $ctx .= substr ($final,0,$i); } } $i = strlen ($pw); while ($i > 0) { if ($i & 1) $ctx .= chr (0); else $ctx .= $pw[0]; $i = $i >> 1; } $final = hex2bin (md5 ($ctx)); for ($i=0;$i<1000;$i++) { $ctx1 = ""; if ($i & 1) { $ctx1 .= $pw; } else { $ctx1 .= substr ($final,0,16); } if ($i % 3) $ctx1 .= $salt; if ($i % 7) $ctx1 .= $pw; if ($i & 1) { $ctx1 .= substr ($final,0,16); } else { $ctx1 .= $pw; } $final = hex2bin (md5 ($ctx1)); } $passwd = ""; $passwd .= to64 (((ord ($final[0]) << 16) | (ord ($final[6]) << 8) | (ord ($final[12]))), 4); $passwd .= to64 (((ord ($final[1]) << 16) | (ord ($final[7]) << 8) | (ord ($final[13]))), 4); $passwd .= to64 (((ord ($final[2]) << 16) | (ord ($final[8]) << 8) | (ord ($final[14]))), 4); $passwd .= to64 (((ord ($final[3]) << 16) | (ord ($final[9]) << 8) | (ord ($final[15]))), 4); $passwd .= to64 (((ord ($final[4]) << 16) | (ord ($final[10]) << 8) | (ord ($final[5]))), 4); $passwd .= to64 (ord ($final[11]), 2); return "$magic$salt\$$passwd"; } function create_salt () { srand ((double) microtime ()*1000000); $salt = substr (md5 (rand (0,9999999)), 0, 8); return $salt; } /**/ if (!function_exists('hex2bin')) { # PHP around 5.3.8 includes hex2bin as native function - http://php.net/hex2bin function hex2bin ($str) { $len = strlen ($str); $nstr = ""; for ($i=0;$i<$len;$i+=2) { $num = sscanf (substr ($str,$i,2), "%x"); $nstr.=chr ($num[0]); } return $nstr; } /**/ } /* * remove item $item from array $array */ function remove_from_array($array, $item) { # array_diff might be faster, but doesn't provide an easy way to know if the value was found or not # return array_diff($array, array($item)); $ret = array_search($item, $array); if ($ret === false) { $found = 0; } else { $found = 1; unset ($array[$ret]); } return array($found, $array); } function to64 ($v, $n) { $ITOA64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; $ret = ""; while (($n - 1) >= 0) { $n--; $ret .= $ITOA64[$v & 0x3f]; $v = $v >> 6; } return $ret; } /** * smtp_mail * Action: Send email * Call: smtp_mail (string to, string from, string subject, string body]) - or - * Call: smtp_mail (string to, string from, string data) - DEPRECATED * @param String - To: * @param String - From: * @param String - Subject: (if called with 4 parameters) or full mail body (if called with 3 parameters) * @param String (optional, but recommended) - mail body * @return bool - true on success, otherwise false * TODO: Replace this with something decent like PEAR::Mail or Zend_Mail. */ function smtp_mail ($to, $from, $data, $body = "") { global $CONF; $smtpd_server = $CONF['smtp_server']; $smtpd_port = $CONF['smtp_port']; //$smtp_server = $_SERVER["SERVER_NAME"]; $smtp_server = php_uname('n'); if(!empty($CONF['smtp_client'])) { $smtp_server = $CONF['smtp_client']; } $errno = "0"; $errstr = "0"; $timeout = "30"; if ($body != "") { $maildata = "To: " . $to . "\n" . "From: " . $from . "\n" . "Subject: " . encode_header ($data) . "\n" . "MIME-Version: 1.0\n" . "Content-Type: text/plain; charset=utf-8\n" . "Content-Transfer-Encoding: 8bit\n" . "\n" . $body ; } else { $maildata = $data; } $fh = @fsockopen ($smtpd_server, $smtpd_port, $errno, $errstr, $timeout); if (!$fh) { error_log("fsockopen failed - errno: $errno - errstr: $errstr"); return false; } else { $res = smtp_get_response($fh); fputs ($fh, "EHLO $smtp_server\r\n"); $res = smtp_get_response($fh); fputs ($fh, "MAIL FROM:<$from>\r\n"); $res = smtp_get_response($fh); fputs ($fh, "RCPT TO:<$to>\r\n"); $res = smtp_get_response($fh); fputs ($fh, "DATA\r\n"); $res = smtp_get_response($fh); fputs ($fh, "$maildata\r\n.\r\n"); $res = smtp_get_response($fh); fputs ($fh, "QUIT\r\n"); $res = smtp_get_response($fh); fclose ($fh); } return true; } /** * smtp_get_admin_email * Action: Get configured email address or current user if nothing configured * Call: smtp_get_admin_email * @return String - username/mail address */ function smtp_get_admin_email() { $admin_email = Config::read('admin_email'); if(!empty($admin_email)) return $admin_email; else return authentication_get_username(); } // // smtp_get_response // Action: Get response from mail server // Call: smtp_get_response (string FileHandle) // function smtp_get_response ($fh) { $res =''; do { $line = fgets($fh, 256); $res .= $line; } while (preg_match("/^\d\d\d\-/", $line)); return $res; } $DEBUG_TEXT = "\n

\n Please check the documentation and website for more information.\n

\n Postfix Admin
\n Forums "; /** * db_connect * Action: Makes a connection to the database if it doesn't exist * Call: db_connect () * Optional parameter: $ignore_errors = TRUE, used by setup.php * * Return value: * a) without $ignore_errors or $ignore_errors == 0 * - $link - the database connection -OR- * - call die() in case of connection problems * b) with $ignore_errors == TRUE * array($link, $error_text); */ function db_connect ($ignore_errors = 0) { global $CONF; global $DEBUG_TEXT; if ($ignore_errors != 0) $DEBUG_TEXT = ''; $error_text = ''; $link = 0; if ($CONF['database_type'] == "mysql") { if (function_exists ("mysql_connect")) { $link = @mysql_connect ($CONF['database_host'], $CONF['database_user'], $CONF['database_password']) or $error_text .= ("

DEBUG INFORMATION:
Connect: " . mysql_error () . "$DEBUG_TEXT"); if ($link) { @mysql_query("SET CHARACTER SET utf8",$link); @mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'",$link); @mysql_select_db ($CONF['database_name'], $link) or $error_text .= ("

DEBUG INFORMATION:
MySQL Select Database: " . mysql_error () . "$DEBUG_TEXT"); } } else { $error_text .= "

DEBUG INFORMATION:
MySQL 3.x / 4.0 functions not available! (php5-mysql installed?)
database_type = 'mysql' in config.inc.php, are you using a different database? $DEBUG_TEXT"; } } elseif ($CONF['database_type'] == "mysqli") { if (function_exists ("mysqli_connect")) { $link = @mysqli_connect ($CONF['database_host'], $CONF['database_user'], $CONF['database_password']) or $error_text .= ("

DEBUG INFORMATION:
Connect: " . mysqli_connect_error () . "$DEBUG_TEXT"); if ($link) { @mysqli_query($link,"SET CHARACTER SET utf8"); @mysqli_query($link,"SET COLLATION_CONNECTION='utf8_general_ci'"); @mysqli_select_db ($link, $CONF['database_name']) or $error_text .= ("

DEBUG INFORMATION:
MySQLi Select Database: " . mysqli_error ($link) . "$DEBUG_TEXT"); } } else { $error_text .= "

DEBUG INFORMATION:
MySQL 4.1 functions not available! (php5-mysqli installed?)
database_type = 'mysqli' in config.inc.php, are you using a different database? $DEBUG_TEXT"; } } elseif (db_sqlite()) { if (class_exists ("SQLite3")) { if ($CONF['database_name'] == '' || !is_dir(dirname($CONF['database_name'])) || !is_writable(dirname($CONF['database_name']))) { $error_text .= ("

DEBUG INFORMATION
Connect: given database path does not exist, is not writable, or \$CONF['database_name'] is empty."); } else { $link = new SQLite3($CONF['database_name']) or $error_text .= ("

DEBUG INFORMATION
Connect: failed to connect to database. $DEBUG_TEXT"); $link->createFunction('base64_decode', 'base64_decode'); } } else { $error_text .= "

DEBUG INFORMATION:
SQLite functions not available! (php5-sqlite installed?)
database_type = 'sqlite' in config.inc.php, are you using a different database? $DEBUG_TEXT"; } } elseif (db_pgsql()) { if (function_exists ("pg_pconnect")) { if(!isset($CONF['database_port'])) { $CONF['database_port'] = '5432'; } $connect_string = "host=" . $CONF['database_host'] . " port=" . $CONF['database_port'] . " dbname=" . $CONF['database_name'] . " user=" . $CONF['database_user'] . " password=" . $CONF['database_password']; $link = @pg_pconnect ($connect_string) or $error_text .= ("

DEBUG INFORMATION:
Connect: failed to connect to database. $DEBUG_TEXT"); if ($link) pg_set_client_encoding($link, 'UNICODE'); } else { $error_text .= "

DEBUG INFORMATION:
PostgreSQL functions not available! (php5-pgsql installed?)
database_type = 'pgsql' in config.inc.php, are you using a different database? $DEBUG_TEXT"; } } else { $error_text = "

DEBUG INFORMATION:
Invalid \$CONF['database_type']! Please fix your config.inc.php! $DEBUG_TEXT"; } if ($ignore_errors) { return array($link, $error_text); } elseif ($error_text != "") { print $error_text; die(); } elseif ($link) { return $link; } else { print "DEBUG INFORMATION:
\n"; print "Connect: Unable to connect to database
\n"; print "
\n"; print "Make sure that you have set the correct database type in the config.inc.php file
\n"; print $DEBUG_TEXT; die(); } } /** * Returns the appropriate boolean value for the database. * Currently only PostgreSQL and MySQL are supported. * @param boolean $bool (REQUIRED) * @return String or int as appropriate. */ function db_get_boolean($bool) { if(! (is_bool($bool) || $bool == '0' || $bool == '1') ) { error_log("Invalid usage of 'db_get_boolean($bool)'"); die("Invalid usage of 'db_get_boolean($bool)'"); } if(db_pgsql()) { // return either true or false (unquoted strings) if($bool) { return 't'; } return 'f'; } elseif(Config::Read('database_type') == 'mysql' || Config::Read('database_type') == 'mysqli' || db_sqlite()) { if($bool) { return 1; } return 0; } else { die('Unknown value in $CONF[database_type]'); } } /** * Returns a query that reports the used quota ("x / y") * @param string column containing used quota * @param string column containing allowed quota * @param string column that will contain "x / y" * @return string */ function db_quota_text($count, $quota, $fieldname) { if (db_pgsql() || db_sqlite()) { // SQLite and PostgreSQL use || to concatenate strings return " CASE $quota WHEN '-1' THEN (coalesce($count,0) || ' / -') WHEN '0' THEN (coalesce($count,0) || ' / " . escape_string(html_entity_decode('∞')) . "') ELSE (coalesce($count,0) || ' / ' || $quota) END AS $fieldname"; } else { return " CASE $quota WHEN '-1' THEN CONCAT(coalesce($count,0), ' / -') WHEN '0' THEN CONCAT(coalesce($count,0), ' / ', '" . escape_string(html_entity_decode('∞')) . "') ELSE CONCAT(coalesce($count,0), ' / ', $quota) END AS $fieldname"; } } /** * Returns a query that reports the used quota ("x / y") * @param string column containing used quota * @param string column containing allowed quota * @param string column that will contain "x / y" * @return string */ function db_quota_percent($count, $quota, $fieldname) { return " CASE $quota WHEN '-1' THEN -1 WHEN '0' THEN -1 ELSE round(100 * coalesce($count,0) / $quota) END AS $fieldname"; } /** * returns true if PostgreSQL is used, false otherwise */ function db_pgsql() { if(Config::Read('database_type')=='pgsql') { return true; } else { return false; } } /** * returns true if SQLite is used, false otherwise */ function db_sqlite() { if(Config::Read('database_type')=='sqlite') { return true; } else { return false; } } // // db_query // Action: Sends a query to the database and returns query result and number of rows // Call: db_query (string query) // Optional parameter: $ignore_errors = TRUE, used by upgrade.php // function db_query ($query, $ignore_errors = 0) { global $CONF; global $DEBUG_TEXT; $result = ""; $number_rows = ""; static $link; $error_text = ""; if ($ignore_errors) $DEBUG_TEXT = ""; # mysql and pgsql $link are resources, mysqli $link is an object if (! (is_resource($link) || is_object($link) ) ) $link = db_connect (); if ($CONF['database_type'] == "mysql") $result = @mysql_query ($query, $link) or $error_text = "Invalid query: " . mysql_error($link); if ($CONF['database_type'] == "mysqli") $result = @mysqli_query ($link, $query) or $error_text = "Invalid query: " . mysqli_error($link); if (db_sqlite()) $result = @$link->query($query) or $error_text = "Invalid query: " . $link->lastErrorMsg(); if (db_pgsql()) { $result = @pg_query ($link, $query) or $error_text = "Invalid query: " . pg_last_error(); } if ($error_text != "" && $ignore_errors == 0) { error_log($error_text); error_log("caused by query: $query"); die("

DEBUG INFORMATION:
$error_text

Check your error_log for the failed query. $DEBUG_TEXT"); } if ($error_text == "") { if (db_sqlite()) { if($result->numColumns()) { // Query returned something $num_rows = 0; while(@$result->fetchArray(SQLITE3_ASSOC)) $num_rows++; $result->reset(); $number_rows = $num_rows; } else { // Query was UPDATE, DELETE or INSERT $number_rows = $link->changes(); } } elseif (preg_match("/^SELECT/i", trim($query))) { // if $query was a SELECT statement check the number of rows with [database_type]_num_rows (). if ($CONF['database_type'] == "mysql") $number_rows = mysql_num_rows ($result); if ($CONF['database_type'] == "mysqli") $number_rows = mysqli_num_rows ($result); if (db_pgsql() ) $number_rows = pg_num_rows ($result); } else { // if $query was something else, UPDATE, DELETE or INSERT check the number of rows with // [database_type]_affected_rows (). if ($CONF['database_type'] == "mysql") $number_rows = mysql_affected_rows ($link); if ($CONF['database_type'] == "mysqli") $number_rows = mysqli_affected_rows ($link); if (db_pgsql() ) $number_rows = pg_affected_rows ($result); } } $return = array ( "result" => $result, "rows" => $number_rows, "error" => $error_text ); return $return; } // db_row // Action: Returns a row from a table // Call: db_row (int result) function db_row ($result) { global $CONF; $row = ""; if ($CONF['database_type'] == "mysql") $row = mysql_fetch_row ($result); if ($CONF['database_type'] == "mysqli") $row = mysqli_fetch_row ($result); if (db_sqlite() ) $row = $result->fetchArray(SQLITE3_NUM); if (db_pgsql() ) $row = pg_fetch_row ($result); return $row; } // db_array // Action: Returns a row from a table // Call: db_array (int result) // function db_array ($result) { global $CONF; $row = ""; if ($CONF['database_type'] == "mysql") $row = mysql_fetch_array ($result); if ($CONF['database_type'] == "mysqli") $row = mysqli_fetch_array ($result); if (db_sqlite() ) $row = $result->fetchArray(); if (db_pgsql() ) $row = pg_fetch_array ($result); return $row; } // db_assoc // Action: Returns a row from a table // Call: db_assoc(int result) // function db_assoc ($result) { global $CONF; $row = ""; if ($CONF['database_type'] == "mysql") $row = mysql_fetch_assoc ($result); if ($CONF['database_type'] == "mysqli") $row = mysqli_fetch_assoc ($result); if (db_sqlite() ) $row = $result->fetchArray(SQLITE3_ASSOC); if (db_pgsql() ) $row = pg_fetch_assoc ($result); return $row; } // // db_delete // Action: Deletes a row from a specified table // Call: db_delete (string table, string where, string delete) // function db_delete ($table,$where,$delete,$additionalwhere='') { $table = table_by_key($table); $query = "DELETE FROM $table WHERE " . escape_string($where) . "='" . escape_string($delete) . "' " . $additionalwhere; $result = db_query ($query); if ($result['rows'] >= 1) { return $result['rows']; } else { return 0; } } /** * db_insert * Action: Inserts a row from a specified table * Call: db_insert (string table, array values [, array timestamp]) * @param String - table name * @param array - key/value map of data to insert into the table. * @param array (optional) - array of fields to set to now() - default: array('created', 'modified') * @return int - number of inserted rows */ function db_insert ($table, $values, $timestamp = array('created', 'modified') ) { $table = table_by_key ($table); foreach(array_keys($values) as $key) { $values[$key] = "'" . escape_string($values[$key]) . "'"; } foreach($timestamp as $key) { if (db_sqlite()) { $values[$key] = "datetime('now')"; } else { $values[$key] = "now()"; } } $sql_values = "(" . implode(",",escape_string(array_keys($values))).") VALUES (".implode(",",$values).")"; $result = db_query ("INSERT INTO $table $sql_values"); return $result['rows']; } /** * db_update * Action: Updates a specified table * Call: db_update (string table, string where_col, string where_value, array values [, array timestamp]) * @param String - table name * @param String - column of WHERE condition * @param String - value of WHERE condition * @param array - key/value map of data to insert into the table. * @param array (optional) - array of fields to set to now() - default: array('modified') * @return int - number of updated rows */ function db_update ($table, $where_col, $where_value, $values, $timestamp = array('modified') ) { $where = $where_col . " = '" . escape_string($where_value) . "'"; return db_update_q ($table, $where, $values, $timestamp ); } /** * db_update_q * Action: Updates a specified table * Call: db_update_q (string table, string where, array values [, array timestamp]) * @param String - table name * @param String - WHERE condition (as SQL) * @param array - key/value map of data to insert into the table. * @param array (optional) - array of fields to set to now() - default: array('modified') * @return int - number of updated rows */ function db_update_q ($table, $where, $values, $timestamp = array('modified') ) { $table = table_by_key ($table); foreach(array_keys($values) as $key) { $sql_values[$key] = escape_string($key) . "='" . escape_string($values[$key]) . "'"; } foreach($timestamp as $key) { if (db_sqlite()) { $sql_values[$key] = escape_string($key) . "=datetime('now')"; } else { $sql_values[$key] = escape_string($key) . "=now()"; } } $sql="UPDATE $table SET ".implode(",",$sql_values)." WHERE $where"; $result = db_query ($sql); return $result['rows']; } /** * db_begin / db_commit / db_rollback * Action: BEGIN / COMMIT / ROLLBACK transaction (PostgreSQL only!) * Call: db_begin() */ function db_begin () { if (db_pgsql()) { # TODO: also enable for mysql? (not supported by MyISAM, which is used for most tables) db_query('BEGIN'); } } function db_commit () { if (db_pgsql()) { db_query('COMMIT'); } } function db_rollback () { if (db_pgsql()) { db_query('ROLLBACK'); } } /** * db_log * Action: Logs actions from admin * Call: db_log (string domain, string action, string data) * Possible actions are defined in $LANG["pViewlog_action_$action"] */ function db_log ($domain,$action,$data) { $REMOTE_ADDR = getRemoteAddr(); $username = authentication_get_username(); if (Config::Lang("pViewlog_action_$action") == '') { die("Invalid log action : $action"); // could do with something better? } if (Config::bool('logging')) { $logdata = array( 'username' => "$username ($REMOTE_ADDR)", 'domain' => $domain, 'action' => $action, 'data' => $data, ); $result = db_insert('log', $logdata, array('timestamp') ); if ($result != 1) { return false; } else { return true; } } } /** * db_in_clause * Action: builds and returns the "field in(x, y)" clause for database queries * Call: db_in_clause (string field, array values) */ function db_in_clause($field, $values) { return " $field IN ('" . implode("','",escape_string(array_values($values))) . "') "; } /** * db_where_clause * Action: builds and returns a WHERE clause for database queries. All given conditions will be AND'ed. * Call: db_where_clause (array $conditions, array $struct) * param array $condition: array('field' => 'value', 'field2' => 'value2, ...) * param array $struct - field structure, used for automatic bool conversion * param string $additional_raw_where - raw sniplet to include in the WHERE part - typically needs to start with AND * param array $searchmode - operators to use (=, <, > etc.) - defaults to = if not specified for a field (see * $allowed_operators for available operators) * Note: the $searchmode operator will only be used if a $condition for that field is set. * This also means you'll need to set a (dummy) condition for NULL and NOTNULL. */ function db_where_clause($condition, $struct, $additional_raw_where = '', $searchmode = array()) { if (!is_array($condition)) { die('db_where_cond: parameter $cond is not an array!'); } elseif(!is_array($searchmode)) { die('db_where_cond: parameter $searchmode is not an array!'); } elseif (count($condition) == 0 && trim($additional_raw_where) == '') { die("db_where_cond: parameter is an empty array!"); # die() might sound harsh, but can prevent information leaks } elseif(!is_array($struct)) { die('db_where_cond: parameter $struct is not an array!'); } $allowed_operators = explode(' ', '< > >= <= = != <> CONT LIKE NULL NOTNULL'); $where_parts = array(); $having_parts = array(); foreach($condition as $field => $value) { if (isset($struct[$field]) && $struct[$field]['type'] == 'bool') $value = db_get_boolean($value); $operator = '='; if (isset($searchmode[$field])) { if (in_array($searchmode[$field], $allowed_operators)) { $operator = $searchmode[$field]; if ($operator == 'CONT') { # CONT - as in "contains" $operator = ' LIKE '; # add spaces $value = '%' . $value . '%'; } elseif ($operator == 'LIKE') { # LIKE -without adding % wildcards (the search value can contain %) $operator = ' LIKE '; # add spaces } } else { die('db_where_clause: Invalid searchmode for ' . $field); } } if ($operator == "NULL") { $querypart = $field . ' IS NULL'; } elseif ($operator == "NOTNULL") { $querypart = $field . ' IS NOT NULL'; } else { $querypart = $field . $operator . "'" . escape_string($value) . "'"; } if($struct[$field]['select'] != '') { $having_parts[$field] = $querypart; } else { $where_parts[$field] = $querypart; } } $query = ' WHERE 1=1 '; $query .= " $additional_raw_where "; if (count($where_parts) > 0) $query .= " AND ( " . join(" AND ", $where_parts) . " ) "; if (count($having_parts) > 0) $query .= " HAVING ( " . join(" AND ", $having_parts) . " ) "; return $query; } // // table_by_key // Action: Return table name for given key // Call: table_by_key (string table_key) // function table_by_key ($table_key) { global $CONF; if (empty($CONF['database_tables'][$table_key])) { $table = $table_key; } else { $table = $CONF['database_tables'][$table_key]; } return $CONF['database_prefix'].$table; } /* * check if the database layout is up to date * returns the current 'version' value from the config table * if $error_out is True (default), die() with a message that recommends to run setup.php. */ function check_db_version($error_out = True) { global $min_db_version; $table = table_by_key('config'); $sql = "SELECT value FROM $table WHERE name = 'version'"; $r = db_query($sql); if($r['rows'] == 1) { $row = db_assoc($r['result']); $dbversion = $row['value']; } else { $dbversion = 0; db_query("INSERT INTO $table (name, value) VALUES ('version', '0')", 0, ''); } if ( ($dbversion < $min_db_version) && $error_out == True) { echo "ERROR: The PostfixAdmin database layout is outdated (you have r$dbversion, but r$min_db_version is expected).\nPlease run setup.php to upgrade the database.\n"; exit(1); } return $dbversion; } /* Called after an alias_domain has been deleted in the DBMS. Returns: boolean. */ # TODO: This function is never called function alias_domain_postdeletion($alias_domain) { global $CONF; $confpar='alias_domain_postdeletion_script'; if (!isset($CONF[$confpar]) || empty($CONF[$confpar])) { return true; } if (empty($alias_domain)) { print '

Warning: empty alias_domain parameter.

'; return false; } $cmdarg1=escapeshellarg($alias_domain); $command=$CONF[$confpar]." $cmdarg1"; $retval=0; $output=array(); $firstline=''; $firstline=exec($command,$output,$retval); if (0!=$retval) { error_log("Running $command yielded return value=$retval, first line of output=$firstline"); print '

WARNING: Problems running alias_domain postdeletion script!

'; return FALSE; } return TRUE; } // // gen_show_status // Action: Return a string of colored  's that indicate // the if an alias goto has an error or is sent to // addresses list in show_custom_domains // Call: gen_show_status (string alias_address) // function gen_show_status ($show_alias) { global $CONF; $table_alias = table_by_key('alias'); $stat_string = ""; $show_alias = escape_string($show_alias); $stat_goto = ""; $stat_result = db_query ("SELECT goto FROM $table_alias WHERE address='$show_alias'"); if ($stat_result['rows'] > 0) { $row = db_row ($stat_result['result']); $stat_goto = $row[0]; } if (!empty($CONF['recipient_delimiter'])) { $delimiter = preg_quote($CONF['recipient_delimiter'], "/"); $delimiter_regex = '/' .$delimiter. '[^' .$delimiter. '@]*@/'; } // UNDELIVERABLE CHECK if ( $CONF['show_undeliverable'] == 'YES' ) { $gotos=array(); $gotos=explode(',',$stat_goto); $undel_string=""; //make sure this alias goes somewhere known $stat_ok = 1; while ( ($g=array_pop($gotos)) && $stat_ok ) { list(/*NULL*/,$stat_domain) = explode('@',$g); $stat_delimiter = ""; if (!empty($CONF['recipient_delimiter'])) { $stat_delimiter = "OR address = '" . escape_string(preg_replace($delimiter_regex, "@", $g)) . "'"; } $stat_result = db_query ("SELECT address FROM $table_alias WHERE address = '" . escape_string($g) . "' OR address = '@" . escape_string($stat_domain) . "' $stat_delimiter"); if ($stat_result['rows'] == 0) { $stat_ok = 0; } if ( $stat_ok == 0 ) { if ( $stat_domain == $CONF['vacation_domain'] || in_array($stat_domain, $CONF['show_undeliverable_exceptions']) ) { $stat_ok = 1; } } } // while if ( $stat_ok == 0 ) { $stat_string .= "" . $CONF['show_status_text'] . " "; } else { $stat_string .= $CONF['show_status_text'] . " "; } } // POP/IMAP CHECK if ( $CONF['show_popimap'] == 'YES' ) { $stat_delimiter = ""; if (!empty($CONF['recipient_delimiter'])) { $stat_delimiter = ',' . preg_replace($delimiter_regex, "@", $stat_goto); } //if the address passed in appears in its own goto field, its POP/IMAP # TODO: or not (might also be an alias loop) -> check mailbox table! if ( preg_match ('/,' . $show_alias . ',/', ',' . $stat_goto . $stat_delimiter . ',') ) { $stat_string .= "" . $CONF['show_status_text'] . " "; } else { $stat_string .= $CONF['show_status_text'] . " "; } } // CUSTOM DESTINATION CHECK if ( count($CONF['show_custom_domains']) > 0 ) { for ($i = 0; $i < sizeof ($CONF['show_custom_domains']); $i++) { if (preg_match ('/^.*' . $CONF['show_custom_domains'][$i] . '.*$/', $stat_goto)) { $stat_string .= "" . $CONF['show_status_text'] . " "; } else { $stat_string .= $CONF['show_status_text'] . " "; } } } else { $stat_string .= "; "; } // $stat_string .= "    " . // "    "; return $stat_string; } function getRemoteAddr() { $REMOTE_ADDR = 'localhost'; if (isset($_SERVER['REMOTE_ADDR'])) $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; return $REMOTE_ADDR; } /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ postfixadmin-3.0.2/broadcast-message.php0000664000175000017500000000576612717673234017312 0ustar daviddavid 0) { mb_internal_encoding("UTF-8"); $b_name = mb_encode_mimeheader( $_POST['name'], 'UTF-8', 'Q'); $b_subject = mb_encode_mimeheader( $_POST['subject'], 'UTF-8', 'Q'); $b_message = base64_encode($_POST['message']); $i = 0; while ($row = db_array ($result['result'])) { $fTo = $row[0]; $fHeaders = 'To: ' . $fTo . "\n"; $fHeaders .= 'From: ' . $b_name . ' <' . $smtp_from_email . ">\n"; $fHeaders .= 'Subject: ' . $b_subject . "\n"; $fHeaders .= 'MIME-Version: 1.0' . "\n"; $fHeaders .= 'Content-Type: text/plain; charset=UTF-8' . "\n"; $fHeaders .= 'Content-Transfer-Encoding: base64' . "\n"; $fHeaders .= $b_message; if (!smtp_mail ($fTo, $smtp_from_email, $fHeaders)) { flash_error(Config::lang_f('pSendmail_result_error', $fTo)); } else { flash_info(Config::lang_f('pSendmail_result_success', $fTo)); } } } flash_info($PALANG['pBroadcast_success']); $smarty->assign ('smarty_template', 'message'); $smarty->display ('index.tpl'); // echo '

'.$PALANG['pBroadcast_success'].'

'; } } if ($_SERVER['REQUEST_METHOD'] == "GET" || $error == 1) { $smarty->assign ('smtp_from_email', $smtp_from_email); $smarty->assign ('error', $error); $smarty->assign ('smarty_template', 'broadcast-message'); $smarty->display ('index.tpl'); // include ("templates/broadcast-message.tpl"); } /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?> postfixadmin-3.0.2/main.php0000664000175000017500000000140312237726354014631 0ustar daviddavidassign ('smarty_template', 'main'); $smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> postfixadmin-3.0.2/edit.php0000664000175000017500000001730012717673234014636 0ustar daviddavidwebformConfig()[prefill] when creating a new item */ require_once('common.php'); $username = authentication_get_username(); # enforce login $table = safepost('table', safeget('table')); $handlerclass = ucfirst($table) . 'Handler'; if ( !preg_match('/^[a-z]+$/', $table) || !file_exists("model/$handlerclass.php")) { # validate $table die ("Invalid table name given!"); } $error = 0; $edit = safepost('edit', safeget('edit')); $new = 0; if ($edit == "") $new = 1; $is_admin = authentication_has_role('admin'); $handler = new $handlerclass($new, $username, $is_admin); $formconf = $handler->webformConfig(); if ($is_admin) { authentication_require_role($formconf['required_role']); } else { if (empty($formconf['user_hardcoded_field'])) { die($handlerclass . ' is not available for users'); } } if ($new == 0 || $formconf['early_init']) { if (!$handler->init($edit)) { if (count($handler->errormsg) == 0) { # should never happen and indicates a bug in $handler->init() flash_error($handlerclass . "->init() failed, but didn't set any error message"); } flash_error($handler->errormsg); header ("Location: " . $formconf['listview']); exit; } } $form_fields = $handler->getStruct(); $id_field = $handler->getId_field(); if ($_SERVER['REQUEST_METHOD'] == "GET") { if ($new) { # new - prefill fields from URL parameters if allowed in $formconf['prefill'] if ( isset($formconf['prefill']) ) { foreach ($formconf['prefill'] as $field) { $prefillvalue = safeget($field, safesession("prefill:$table:$field")); if ($prefillvalue != '') { $form_fields[$field]['default'] = $prefillvalue; $handler->prefill($field, $prefillvalue); } } } $form_fields = $handler->getStruct(); # refresh $form_fields - a prefill field might have changed something } else { # edit mode - read values from database if (!$handler->view()) { flash_error($handler->errormsg); header ("Location: " . $formconf['listview']); exit; } else { $values = $handler->result; $values[$id_field] = $edit; } } } if ($_SERVER['REQUEST_METHOD'] == "POST") { if (safepost('token') != $_SESSION['PFA_token']) die('Invalid token!'); $inp_values = safepost('value', array() ); foreach($form_fields as $key => $field) { if ($field['editable'] && $field['display_in_form']) { if (!isset($inp_values[$key])) { $inp_values[$key] = ''; # newer PHP versions don't include empty fields in $_POST (noticed with PHP 5.6.6) } if($field['type'] == 'bool' && $inp_values[$key] == '') { $values[$key] = 0; # isset() for unchecked checkboxes is always false } elseif($field['type'] == 'txtl') { $values[$key] = $inp_values[$key]; $values[$key] = preg_replace ('/\\\r\\\n/', ',', $values[$key]); $values[$key] = preg_replace ('/\r\n/', ',', $values[$key]); $values[$key] = preg_replace ('/,[\s]+/i', ',', $values[$key]); $values[$key] = preg_replace ('/[\s]+,/i', ',', $values[$key]); $values[$key] = preg_replace ('/,,*/', ',', $values[$key]); $values[$key] = preg_replace ('/,*$|^,*/', '', $values[$key]); if ($values[$key] == '') { $values[$key] = array(); } else { $values[$key] = explode(",", $values[$key]); } } else { $values[$key] = $inp_values[$key]; } } } if (isset($formconf['hardcoded_edit']) && $formconf['hardcoded_edit']) { $values[$id_field] = $form_fields[$id_field]['default']; } elseif ($new == 0) { $values[$id_field] = $edit; } if ($new && ($form_fields[$id_field]['display_in_form'] == 0)) { if ($form_fields[$id_field]['editable'] == 1) { # address split to localpart and domain? $values[$id_field] = $handler->mergeId($values); } else { # probably auto_increment $values[$id_field] = ''; } } if (!$handler->init($values[$id_field])) { $error = 1; $errormsg = $handler->errormsg; } if (!$handler->set($values)) { $error = 1; $errormsg = $handler->errormsg; } $form_fields = $handler->getStruct(); # refresh $form_fields - set() might have changed something if ($error != 1) { if (!$handler->store()) { $errormsg = $handler->errormsg; } else { flash_info($handler->infomsg); if (count($handler->errormsg)) { # might happen if domain_postcreation fails flash_error($handler->errormsg); } # remember prefill values for next usage of the form if ( isset($formconf['prefill']) ) { foreach ($formconf['prefill'] as $field) { if (isset($values[$field])) { $_SESSION["prefill:$table:$field"] = $values[$field]; } } } if ($new == 0) { header ("Location: " . $formconf['listview']); exit; } else { header("Location: edit.php?table=$table"); exit; } } } } if ($error != 1 && $new) { # no error and not in edit mode - reset fields to default for new item $values = array(); foreach (array_keys($form_fields) as $key) { $values[$key] = $form_fields[$key]['default']; } } $errormsg = $handler->errormsg; $fielderror = array(); foreach($form_fields as $key => $field) { if($form_fields[$key]['display_in_form']) { if (isset($errormsg[$key])) { $fielderror[$key] = $errormsg[$key]; unset ($errormsg[$key]); } else { $fielderror[$key] = ''; } if (isset($values[$key])) { $smarty->assign ("value_$key", $values[$key]); } else { $smarty->assign ("value_$key", $form_fields[$key]['default']); } } } if (count($errormsg)) flash_error($errormsg); # display the remaining error messages (not related to a field) with flash_error if ($new) { $smarty->assign ('mode', 'create'); $smarty->assign('formtitle', Config::lang($formconf['formtitle_create'])); $smarty->assign('submitbutton', Config::lang($formconf['create_button'])); } else { $smarty->assign ('mode', 'edit'); $smarty->assign('formtitle', Config::lang($formconf['formtitle_edit'])); $smarty->assign('submitbutton', Config::lang('save')); } $smarty->assign ('struct', $form_fields); $smarty->assign ('fielderror', $fielderror); $smarty->assign ('table', $table); $smarty->assign ('smarty_template', 'editform'); $smarty->display ('index.tpl'); /* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?> postfixadmin-3.0.2/upgrade.php0000664000175000017500000021062513006175670015336 0ustar daviddavid 0 AND NOT a.attisdropped AND a.attrelid = ( SELECT c.oid FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relname ~ ' . "'^($table)\$' AND pg_catalog.pg_table_is_visible(c.oid) ) AND a.attname = '$field' "; $r = db_query($sql); $row = db_row($r['result']); if($row) { return true; } return false; } function _mysql_field_exists($table, $field) { # $table = table_by_key($table); # _mysql_field_exists is always called with the expanded table name - don't expand it twice $sql = "SHOW COLUMNS FROM $table LIKE '$field'"; $r = db_query($sql); $row = db_row($r['result']); if($row) { return true; } return false; } function _db_field_exists($table, $field) { global $CONF; if($CONF['database_type'] == 'pgsql') { return _pgsql_field_exists($table, $field); } else { return _mysql_field_exists($table, $field); } } function _upgrade_filter_function($name) { return preg_match('/upgrade_[\d]+(_mysql|_pgsql|_sqlite|_mysql_pgsql)?$/', $name) == 1; } function _db_add_field($table, $field, $fieldtype, $after) { global $CONF; $query = "ALTER TABLE " . table_by_key($table) . " ADD COLUMN $field $fieldtype"; if($CONF['database_type'] != 'pgsql') { $query .= " AFTER $after "; # PgSQL does not support to specify where to add the column, MySQL does } if(! _db_field_exists(table_by_key($table), $field)) { $result = db_query_parsed($query); } else { printdebug ("field already exists: $table.$field"); } } function printdebug($text) { if (safeget('debug') != "") print "

$text

"; } $table = table_by_key('config'); if($CONF['database_type'] == 'pgsql') { // check if table already exists, if so, don't recreate it $r = db_query("SELECT relname FROM pg_class WHERE relname = '$table'"); if($r['rows'] == 0) { $pgsql = " CREATE TABLE $table ( id SERIAL, name VARCHAR(20) NOT NULL UNIQUE, value VARCHAR(20) NOT NULL, PRIMARY KEY(id) )"; db_query_parsed($pgsql); } } elseif(db_sqlite()) { $enc = 'PRAGMA encoding = "UTF-8"'; db_query_parsed($enc); $sql = " CREATE TABLE {IF_NOT_EXISTS} $table ( `id` {AUTOINCREMENT}, `name` TEXT NOT NULL UNIQUE DEFAULT '', `value` TEXT NOT NULL DEFAULT '' ) "; db_query_parsed($sql); } else { $mysql = " CREATE TABLE {IF_NOT_EXISTS} $table ( `id` {AUTOINCREMENT} {PRIMARY}, `name` VARCHAR(20) {LATIN1} NOT NULL DEFAULT '', `value` VARCHAR(20) {LATIN1} NOT NULL DEFAULT '', UNIQUE name ( `name` ) ) "; db_query_parsed($mysql, 0, " ENGINE = MYISAM COMMENT = 'PostfixAdmin settings'"); } $version = check_db_version(False); _do_upgrade($version); function _do_upgrade($current_version) { global $CONF; $target_version = 0; // Rather than being bound to an svn revision number, just look for the largest function name that matches upgrade_\d+... // $target_version = preg_replace('/[^0-9]/', '', '$Revision: 1881 $'); $funclist = get_defined_functions(); $our_upgrade_functions = array_filter($funclist['user'], '_upgrade_filter_function'); foreach($our_upgrade_functions as $function_name) { $bits = explode("_", $function_name); $function_number = $bits[1]; if($function_number > $current_version && $function_number > $target_version) { $target_version = $function_number; } } if ($current_version >= $target_version) { # already up to date echo "

Database is up to date

"; return true; } echo "

Updating database:

- old version: $current_version; target version: $target_version

\n"; echo "
  (If the update doesn't work, run setup.php?debug=1 to see the detailed error messages and SQL queries.)
"; if (db_sqlite() && $current_version < 1824) { // Fast forward to the first revision supporting SQLite $current_version = 1823; } for ($i = $current_version +1; $i <= $target_version; $i++) { $function = "upgrade_$i"; $function_mysql_pgsql = $function . "_mysql_pgsql"; $function_mysql = $function . "_mysql"; $function_pgsql = $function . "_pgsql"; $function_sqlite = $function . "_sqlite"; if (function_exists($function)) { echo "

updating to version $i (all databases)..."; $function(); echo "   done"; } if ($CONF['database_type'] == 'mysql' || $CONF['database_type'] == 'mysqli' || $CONF['database_type'] == 'pgsql') { if (function_exists($function_mysql_pgsql)) { echo "

updating to version $i (MySQL and PgSQL)..."; $function_mysql_pgsql(); echo "   done"; } } if ($CONF['database_type'] == 'mysql' || $CONF['database_type'] == 'mysqli' ) { if (function_exists($function_mysql)) { echo "

updating to version $i (MySQL)..."; $function_mysql(); echo "   done"; } } elseif(db_sqlite()) { if (function_exists($function_sqlite)) { echo "

updating to version $i (SQLite)..."; $function_sqlite(); echo "   done"; } } elseif($CONF['database_type'] == 'pgsql') { if (function_exists($function_pgsql)) { echo "

updating to version $i (PgSQL)..."; $function_pgsql(); echo "   done"; } } // Update config table so we don't run the same query twice in the future. $i = (int) $i; $table = table_by_key('config'); $sql = "UPDATE $table SET value = $i WHERE name = 'version'"; db_query($sql); }; } /** * Replaces database specific parts in a query * @param String sql query with placeholders * @param int (optional) whether errors should be ignored (0=false) * @param String (optional) MySQL specific code to attach, useful for COMMENT= on CREATE TABLE * @return String sql query */ function db_query_parsed($sql, $ignore_errors = 0, $attach_mysql = "") { global $CONF; if ($CONF['database_type'] == 'mysql' || $CONF['database_type'] == 'mysqli' ) { $replace = array( '{AUTOINCREMENT}' => 'int(11) not null auto_increment', '{PRIMARY}' => 'primary key', '{UNSIGNED}' => 'unsigned' , '{FULLTEXT}' => 'FULLTEXT', '{BOOLEAN}' => "tinyint(1) NOT NULL DEFAULT '" . db_get_boolean(False) . "'", '{UTF-8}' => '/*!40100 CHARACTER SET utf8 */', '{LATIN1}' => '/*!40100 CHARACTER SET latin1 */', '{IF_NOT_EXISTS}' => 'IF NOT EXISTS', '{RENAME_COLUMN}' => 'CHANGE COLUMN', '{MYISAM}' => 'ENGINE=MyISAM', '{INNODB}' => 'ENGINE=InnoDB', '{INT}' => 'integer NOT NULL DEFAULT 0', '{BIGINT}' => 'bigint NOT NULL DEFAULT 0', '{DATETIME}' => "datetime NOT NULL default '2000-01-01 00:00:00'", # different from {DATE} only for MySQL '{DATE}' => "timestamp NOT NULL default '2000-01-01'", # MySQL needs a sane default (no default is interpreted as CURRENT_TIMESTAMP, which is ... '{DATECURRENT}' => 'timestamp NOT NULL default CURRENT_TIMESTAMP', # only allowed once per table in MySQL ); $sql = "$sql $attach_mysql"; } elseif(db_sqlite()) { $replace = array( '{AUTOINCREMENT}' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL', '{PRIMARY}' => 'PRIMARY KEY', '{UNSIGNED}' => 'unsigned', '{FULLTEXT}' => 'text', '{BOOLEAN}' => "tinyint(1) NOT NULL DEFAULT '" . db_get_boolean(False) . "'", '{BOOLEAN_TRUE}' => "tinyint(1) NOT NULL DEFAULT '" . db_get_boolean(True) . "'", '{UTF-8}' => '', '{LATIN1}' => '', '{IF_NOT_EXISTS}' => 'IF NOT EXISTS', '{RENAME_COLUMN}' => 'CHANGE COLUMN', '{MYISAM}' => '', '{INNODB}' => '', '{INT}' => 'int(11) NOT NULL DEFAULT 0', '{BIGINT}' => 'bigint(20) NOT NULL DEFAULT 0', '{DATETIME}' => "datetime NOT NULL default '2000-01-01'", '{DATE}' => "datetime NOT NULL default '2000-01-01'", '{DATECURRENT}' => 'datetime NOT NULL default CURRENT_TIMESTAMP', ); } elseif($CONF['database_type'] == 'pgsql') { $replace = array( '{AUTOINCREMENT}' => 'SERIAL', '{PRIMARY}' => 'primary key', '{UNSIGNED}' => '', '{FULLTEXT}' => '', '{BOOLEAN}' => "BOOLEAN NOT NULL DEFAULT '" . db_get_boolean(False) . "'", '{UTF-8}' => '', # UTF-8 is simply ignored. '{LATIN1}' => '', # same for latin1 '{IF_NOT_EXISTS}' => '', # does not work with PgSQL '{RENAME_COLUMN}' => 'ALTER COLUMN', # PgSQL : ALTER TABLE x RENAME x TO y '{MYISAM}' => '', '{INNODB}' => '', '{INT}' => 'integer NOT NULL DEFAULT 0', '{BIGINT}' => 'bigint NOT NULL DEFAULT 0', 'int(1)' => 'int', 'int(10)' => 'int', 'int(11)' => 'int', 'int(4)' => 'int', '{DATETIME}' => "timestamp with time zone default '2000-01-01'", # stay in sync with MySQL '{DATE}' => "timestamp with time zone default '2000-01-01'", # stay in sync with MySQL '{DATECURRENT}' => 'timestamp with time zone default now()', ); } else { echo "Sorry, unsupported database type " . $conf['database_type']; exit; } $replace['{BOOL_TRUE}'] = db_get_boolean(True); $replace['{BOOL_FALSE}'] = db_get_boolean(False); $query = trim(str_replace(array_keys($replace), $replace, $sql)); if (safeget('debug') != "") { printdebug ($query); } $result = db_query($query, $ignore_errors); if (safeget('debug') != "") { print "

" . $result['error'] . "
"; } return $result; } function _drop_index ($table, $index) { global $CONF; $table = table_by_key ($table); if ($CONF['database_type'] == 'mysql' || $CONF['database_type'] == 'mysqli' ) { return "ALTER TABLE $table DROP INDEX $index"; } elseif($CONF['database_type'] == 'pgsql' || db_sqlite()) { return "DROP INDEX $index"; # Index names are unique with a DB for PostgreSQL } else { echo "Sorry, unsupported database type " . $conf['database_type']; exit; } } function _add_index($table, $indexname, $fieldlist) { global $CONF; $table = table_by_key ($table); if ($CONF['database_type'] == 'mysql' || $CONF['database_type'] == 'mysqli' ) { $fieldlist = str_replace(',', '`,`', $fieldlist); # fix quoting if index contains multiple fields return "ALTER TABLE $table ADD INDEX `$indexname` ( `$fieldlist` )"; } elseif($CONF['database_type'] == 'pgsql') { $pgindexname = $table . "_" . $indexname . '_idx'; return "CREATE INDEX $pgindexname ON $table($fieldlist);"; # Index names are unique with a DB for PostgreSQL } else { echo "Sorry, unsupported database type " . $conf['database_type']; exit; } } function upgrade_1_mysql() { // CREATE MYSQL DATABASE TABLES. $admin = table_by_key('admin'); $alias = table_by_key('alias'); $domain = table_by_key('domain'); $domain_admins = table_by_key('domain_admins'); $log = table_by_key('log'); $mailbox = table_by_key('mailbox'); $vacation = table_by_key('vacation'); $sql = array(); $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $admin ( `username` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `created` {DATETIME}, `modified` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`) ) {MYISAM} COMMENT='Postfix Admin - Virtual Admins';"; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $alias ( `address` varchar(255) NOT NULL default '', `goto` text NOT NULL, `domain` varchar(255) NOT NULL default '', `created` {DATETIME}, `modified` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`address`) ) {MYISAM} COMMENT='Postfix Admin - Virtual Aliases'; "; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $domain ( `domain` varchar(255) NOT NULL default '', `description` varchar(255) NOT NULL default '', `aliases` int(10) NOT NULL default '0', `mailboxes` int(10) NOT NULL default '0', `maxquota` bigint(20) NOT NULL default '0', `quota` bigint(20) NOT NULL default '0', `transport` varchar(255) default NULL, `backupmx` tinyint(1) NOT NULL default '0', `created` {DATETIME}, `modified` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`domain`) ) {MYISAM} COMMENT='Postfix Admin - Virtual Domains'; "; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $domain_admins ( `username` varchar(255) NOT NULL default '', `domain` varchar(255) NOT NULL default '', `created` {DATETIME}, `active` tinyint(1) NOT NULL default '1', KEY username (`username`) ) {MYISAM} COMMENT='Postfix Admin - Domain Admins';"; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $log ( `timestamp` {DATETIME}, `username` varchar(255) NOT NULL default '', `domain` varchar(255) NOT NULL default '', `action` varchar(255) NOT NULL default '', `data` varchar(255) NOT NULL default '', KEY timestamp (`timestamp`) ) {MYISAM} COMMENT='Postfix Admin - Log';"; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $mailbox ( `username` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `name` varchar(255) NOT NULL default '', `maildir` varchar(255) NOT NULL default '', `quota` bigint(20) NOT NULL default '0', `domain` varchar(255) NOT NULL default '', `created` {DATETIME}, `modified` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`) ) {MYISAM} COMMENT='Postfix Admin - Virtual Mailboxes';"; $sql[] = " CREATE TABLE {IF_NOT_EXISTS} $vacation ( email varchar(255) NOT NULL , subject varchar(255) NOT NULL, body text NOT NULL, cache text NOT NULL, domain varchar(255) NOT NULL , created {DATETIME}, active tinyint(4) NOT NULL default '1', PRIMARY KEY (email), KEY email (email) ) {INNODB} DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Virtual Vacation' ;"; foreach($sql as $query) { db_query_parsed($query); } } function upgrade_2_mysql() { # upgrade pre-2.1 database # from TABLE_BACKUP_MX.TXT $table_domain = table_by_key ('domain'); if(!_mysql_field_exists($table_domain, 'transport')) { $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN transport VARCHAR(255) AFTER maxquota;", TRUE); } if(!_mysql_field_exists($table_domain, 'backupmx')) { $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN backupmx {BOOLEAN} AFTER transport;", TRUE); } } function upgrade_2_pgsql() { if(!_pgsql_object_exists(table_by_key('domain'))) { db_query_parsed(" CREATE TABLE " . table_by_key('domain') . " ( domain character varying(255) NOT NULL, description character varying(255) NOT NULL default '', aliases integer NOT NULL default 0, mailboxes integer NOT NULL default 0, maxquota integer NOT NULL default 0, quota integer NOT NULL default 0, transport character varying(255) default NULL, backupmx boolean NOT NULL default false, created timestamp with time zone default now(), modified timestamp with time zone default now(), active boolean NOT NULL default true, Constraint \"domain_key\" Primary Key (\"domain\") ); CREATE INDEX domain_domain_active ON " . table_by_key('domain') . "(domain,active); COMMENT ON TABLE " . table_by_key('domain') . " IS 'Postfix Admin - Virtual Domains'; "); } if(!_pgsql_object_exists(table_by_key('admin'))) { db_query_parsed(' CREATE TABLE ' . table_by_key("admin") . ' ( "username" character varying(255) NOT NULL, "password" character varying(255) NOT NULL default \'\', "created" timestamp with time zone default now(), "modified" timestamp with time zone default now(), "active" boolean NOT NULL default true, Constraint "admin_key" Primary Key ("username") );' . " COMMENT ON TABLE " . table_by_key('admin') . " IS 'Postfix Admin - Virtual Admins'; "); } if(!_pgsql_object_exists(table_by_key('alias'))) { db_query_parsed(' CREATE TABLE ' . table_by_key("alias") . ' ( address character varying(255) NOT NULL, goto text NOT NULL, domain character varying(255) NOT NULL REFERENCES "' . table_by_key("domain") . '", created timestamp with time zone default now(), modified timestamp with time zone default now(), active boolean NOT NULL default true, Constraint "alias_key" Primary Key ("address") ); CREATE INDEX alias_address_active ON ' . table_by_key("alias") . '(address,active); COMMENT ON TABLE ' . table_by_key("alias") . ' IS \'Postfix Admin - Virtual Aliases\'; '); } if(!_pgsql_object_exists(table_by_key('domain_admins'))) { db_query_parsed(' CREATE TABLE ' . table_by_key('domain_admins') . ' ( username character varying(255) NOT NULL, domain character varying(255) NOT NULL REFERENCES "' . table_by_key('domain') . '", created timestamp with time zone default now(), active boolean NOT NULL default true ); COMMENT ON TABLE ' . table_by_key('domain_admins') . ' IS \'Postfix Admin - Domain Admins\'; '); } if(!_pgsql_object_exists(table_by_key('log'))) { db_query_parsed(' CREATE TABLE ' . table_by_key('log') . ' ( timestamp timestamp with time zone default now(), username character varying(255) NOT NULL default \'\', domain character varying(255) NOT NULL default \'\', action character varying(255) NOT NULL default \'\', data text NOT NULL default \'\' ); COMMENT ON TABLE ' . table_by_key('log') . ' IS \'Postfix Admin - Log\'; '); } if(!_pgsql_object_exists(table_by_key('mailbox'))) { db_query_parsed(' CREATE TABLE ' . table_by_key('mailbox') . ' ( username character varying(255) NOT NULL, password character varying(255) NOT NULL default \'\', name character varying(255) NOT NULL default \'\', maildir character varying(255) NOT NULL default \'\', quota integer NOT NULL default 0, domain character varying(255) NOT NULL REFERENCES "' . table_by_key('domain') . '", created timestamp with time zone default now(), modified timestamp with time zone default now(), active boolean NOT NULL default true, Constraint "mailbox_key" Primary Key ("username") ); CREATE INDEX mailbox_username_active ON ' . table_by_key('mailbox') . '(username,active); COMMENT ON TABLE ' . table_by_key('mailbox') . ' IS \'Postfix Admin - Virtual Mailboxes\'; '); } if(!_pgsql_object_exists(table_by_key('vacation'))) { db_query_parsed(' CREATE TABLE ' . table_by_key('vacation') . ' ( email character varying(255) PRIMARY KEY, subject character varying(255) NOT NULL, body text NOT NULL , cache text NOT NULL , "domain" character varying(255) NOT NULL REFERENCES "' . table_by_key('domain') . '", created timestamp with time zone DEFAULT now(), active boolean DEFAULT true NOT NULL ); CREATE INDEX vacation_email_active ON ' . table_by_key('vacation') . '(email,active);'); } if(!_pgsql_object_exists(table_by_key('vacation_notification'))) { db_query_parsed(' CREATE TABLE ' . table_by_key('vacation_notification') . ' ( on_vacation character varying(255) NOT NULL REFERENCES ' . table_by_key('vacation') . '(email) ON DELETE CASCADE, notified character varying(255) NOT NULL, notified_at timestamp with time zone NOT NULL DEFAULT now(), CONSTRAINT vacation_notification_pkey primary key(on_vacation,notified) ); '); } // this handles anyone who is upgrading... (and should have no impact on new installees) $table_domain = table_by_key ('domain'); $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN transport VARCHAR(255)", TRUE); $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN backupmx BOOLEAN DEFAULT false", TRUE); } function upgrade_3_mysql() { # upgrade pre-2.1 database # from TABLE_CHANGES.TXT $table_admin = table_by_key ('admin'); $table_alias = table_by_key ('alias'); $table_domain = table_by_key ('domain'); $table_mailbox = table_by_key ('mailbox'); $table_vacation = table_by_key ('vacation'); if(!_mysql_field_exists($table_admin, 'created')) { db_query_parsed("ALTER TABLE $table_admin {RENAME_COLUMN} create_date created {DATETIME};"); } if(!_mysql_field_exists($table_admin, 'modified')) { db_query_parsed("ALTER TABLE $table_admin {RENAME_COLUMN} change_date modified {DATETIME};"); } if(!_mysql_field_exists($table_alias, 'created')) { db_query_parsed("ALTER TABLE $table_alias {RENAME_COLUMN} create_date created {DATETIME};"); } if(!_mysql_field_exists($table_alias, 'modified')) { db_query_parsed("ALTER TABLE $table_alias {RENAME_COLUMN} change_date modified {DATETIME};"); } if(!_mysql_field_exists($table_domain, 'created')) { db_query_parsed("ALTER TABLE $table_domain {RENAME_COLUMN} create_date created {DATETIME};"); } if(!_mysql_field_exists($table_domain, 'modified')) { db_query_parsed("ALTER TABLE $table_domain {RENAME_COLUMN} change_date modified {DATETIME};"); } if(!_mysql_field_exists($table_domain, 'aliases')) { db_query_parsed("ALTER TABLE $table_domain ADD COLUMN aliases INT(10) DEFAULT '-1' NOT NULL AFTER description;"); } if(!_mysql_field_exists($table_domain, 'mailboxes')) { db_query_parsed("ALTER TABLE $table_domain ADD COLUMN mailboxes INT(10) DEFAULT '-1' NOT NULL AFTER aliases;"); } if(!_mysql_field_exists($table_domain, 'maxquota')) { db_query_parsed("ALTER TABLE $table_domain ADD COLUMN maxquota INT(10) DEFAULT '-1' NOT NULL AFTER mailboxes;"); } if(!_mysql_field_exists($table_domain, 'transport')) { db_query_parsed("ALTER TABLE $table_domain ADD COLUMN transport VARCHAR(255) AFTER maxquota;"); } if(!_mysql_field_exists($table_domain, 'backupmx')) { db_query_parsed("ALTER TABLE $table_domain ADD COLUMN backupmx TINYINT(1) DEFAULT '0' NOT NULL AFTER transport;"); } if(!_mysql_field_exists($table_mailbox, 'created')) { db_query_parsed("ALTER TABLE $table_mailbox {RENAME_COLUMN} create_date created {DATETIME};"); } if(!_mysql_field_exists($table_mailbox, 'modified')) { db_query_parsed("ALTER TABLE $table_mailbox {RENAME_COLUMN} change_date modified {DATETIME};"); } if(!_mysql_field_exists($table_mailbox, 'quota')) { db_query_parsed("ALTER TABLE $table_mailbox ADD COLUMN quota INT(10) DEFAULT '-1' NOT NULL AFTER maildir;"); } if(!_mysql_field_exists($table_vacation, 'domain')) { db_query_parsed("ALTER TABLE $table_vacation ADD COLUMN domain VARCHAR(255) DEFAULT '' NOT NULL AFTER cache;"); } if(!_mysql_field_exists($table_vacation, 'created')) { db_query_parsed("ALTER TABLE $table_vacation ADD COLUMN created {DATETIME} AFTER domain;"); } if(!_mysql_field_exists($table_vacation, 'active')) { db_query_parsed("ALTER TABLE $table_vacation ADD COLUMN active TINYINT(1) DEFAULT '1' NOT NULL AFTER created;"); } db_query_parsed("ALTER TABLE $table_vacation DROP PRIMARY KEY"); db_query_parsed("ALTER TABLE $table_vacation ADD PRIMARY KEY(email)"); db_query_parsed("UPDATE $table_vacation SET domain=SUBSTRING_INDEX(email, '@', -1) WHERE email=email;"); } function upgrade_4_mysql() { # MySQL only # changes between 2.1 and moving to sourceforge $table_domain = table_by_key ('domain'); $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN quota int(10) NOT NULL default '0' AFTER maxquota", TRUE); # Possible errors that can be ignored: # - Invalid query: Table 'postfix.domain' doesn't exist } /** * Changes between 2.1 and moving to sf.net */ function upgrade_4_pgsql() { $table_domain = table_by_key('domain'); $table_admin = table_by_key('admin'); $table_alias = table_by_key('alias'); $table_domain_admins = table_by_key('domain_admins'); $table_log = table_by_key('log'); $table_mailbox = table_by_key('mailbox'); $table_vacation = table_by_key('vacation'); $table_vacation_notification = table_by_key('vacation_notification'); if(!_pgsql_field_exists($table_domain, 'quota')) { $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN quota int NOT NULL default '0'"); } $result = db_query_parsed("ALTER TABLE $table_domain ALTER COLUMN domain DROP DEFAULT"); if(!_pgsql_object_exists('domain_domain_active')) { $result = db_query_parsed("CREATE INDEX domain_domain_active ON $table_domain(domain,active)"); } $result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN domain DROP DEFAULT"); $result = db_query_parsed("ALTER TABLE $table_alias ALTER COLUMN address DROP DEFAULT"); $result = db_query_parsed("ALTER TABLE $table_alias ALTER COLUMN domain DROP DEFAULT"); if(!_pgsql_object_exists('alias_address_active')) { $result = db_query_parsed("CREATE INDEX alias_address_active ON $table_alias(address,active)"); } $result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN username DROP DEFAULT"); $result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN domain DROP DEFAULT"); $result = db_query_parsed(" BEGIN; ALTER TABLE $table_log RENAME COLUMN data TO data_old; ALTER TABLE $table_log ADD COLUMN data text NOT NULL default ''; UPDATE $table_log SET data = CAST(data_old AS text); ALTER TABLE $table_log DROP COLUMN data_old; COMMIT;"); $result = db_query_parsed("ALTER TABLE $table_mailbox ALTER COLUMN username DROP DEFAULT"); $result = db_query_parsed("ALTER TABLE $table_mailbox ALTER COLUMN domain DROP DEFAULT"); $result = db_query_parsed(" BEGIN; ALTER TABLE $table_mailbox RENAME COLUMN domain TO domain_old; ALTER TABLE $table_mailbox ADD COLUMN domain varchar(255) REFERENCES $table_domain (domain); UPDATE $table_mailbox SET domain = domain_old; ALTER TABLE $table_mailbox DROP COLUMN domain_old; COMMIT;" ); if(!_pgsql_object_exists('mailbox_username_active')) { db_query_parsed("CREATE INDEX mailbox_username_active ON $table_mailbox(username,active)"); } $result = db_query_parsed("ALTER TABLE $table_vacation ALTER COLUMN body SET DEFAULT ''"); if(_pgsql_field_exists($table_vacation, 'cache')) { $result = db_query_parsed("ALTER TABLE $table_vacation DROP COLUMN cache"); } $result = db_query_parsed(" BEGIN; ALTER TABLE $table_vacation RENAME COLUMN domain to domain_old; ALTER TABLE $table_vacation ADD COLUMN domain varchar(255) REFERENCES $table_domain; UPDATE $table_vacation SET domain = domain_old; ALTER TABLE $table_vacation DROP COLUMN domain_old; COMMIT; "); if(!_pgsql_object_exists('vacation_email_active')) { $result = db_query_parsed("CREATE INDEX vacation_email_active ON $table_vacation(email,active)"); } if(!_pgsql_object_exists($table_vacation_notification)) { $result = db_query_parsed(" CREATE TABLE $table_vacation_notification ( on_vacation character varying(255) NOT NULL REFERENCES $table_vacation(email) ON DELETE CASCADE, notified character varying(255) NOT NULL, notified_at timestamp with time zone NOT NULL DEFAULT now(), CONSTRAINT vacation_notification_pkey primary key(on_vacation,notified));"); } } # Possible errors that can be ignored: # # NO MySQL errors should be ignored below this line! /** * create tables * version: Sourceforge SVN r1 of DATABASE_MYSQL.txt * changes compared to DATABASE_MYSQL.txt: * - removed MySQL user and database creation * - removed creation of default superadmin */ function upgrade_5_mysql() { $result = db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} `" . table_by_key('admin') . "` ( `username` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `created` {DATETIME}, `modified` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`), KEY username (`username`) ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Admins'; "); $result = db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} `" . table_by_key('alias') . "` ( `address` varchar(255) NOT NULL default '', `goto` text NOT NULL, `domain` varchar(255) NOT NULL default '', `created` {DATETIME}, `modified` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`address`), KEY address (`address`) ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Aliases'; "); $result = db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} `" . table_by_key('domain') . "` ( `domain` varchar(255) NOT NULL default '', `description` varchar(255) NOT NULL default '', `aliases` int(10) NOT NULL default '0', `mailboxes` int(10) NOT NULL default '0', `maxquota` int(10) NOT NULL default '0', `quota` int(10) NOT NULL default '0', `transport` varchar(255) default NULL, `backupmx` tinyint(1) NOT NULL default '0', `created` {DATETIME}, `modified` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`domain`), KEY domain (`domain`) ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Domains'; "); $result = db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} `" . table_by_key('domain_admins') . "` ( `username` varchar(255) NOT NULL default '', `domain` varchar(255) NOT NULL default '', `created` {DATETIME}, `active` tinyint(1) NOT NULL default '1', KEY username (`username`) ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Domain Admins'; "); $result = db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} `" . table_by_key('log') . "` ( `timestamp` {DATETIME}, `username` varchar(255) NOT NULL default '', `domain` varchar(255) NOT NULL default '', `action` varchar(255) NOT NULL default '', `data` varchar(255) NOT NULL default '', KEY timestamp (`timestamp`) ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Log'; "); $result = db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} `" . table_by_key('mailbox') . "` ( `username` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `name` varchar(255) NOT NULL default '', `maildir` varchar(255) NOT NULL default '', `quota` int(10) NOT NULL default '0', `domain` varchar(255) NOT NULL default '', `created` {DATETIME}, `modified` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`), KEY username (`username`) ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Mailboxes'; "); $result = db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} `" . table_by_key('vacation') . "` ( `email` varchar(255) NOT NULL , `subject` varchar(255) NOT NULL, `body` text NOT NULL, `cache` text NOT NULL, `domain` varchar(255) NOT NULL, `created` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`email`), KEY email (`email`) ) {MYISAM} DEFAULT {LATIN1} COMMENT='Postfix Admin - Virtual Vacation'; "); } /** * drop useless indicies (already available as primary key) */ function upgrade_79_mysql() { # MySQL only $result = db_query_parsed(_drop_index('admin', 'username'), True); $result = db_query_parsed(_drop_index('alias', 'address'), True); $result = db_query_parsed(_drop_index('domain', 'domain'), True); $result = db_query_parsed(_drop_index('mailbox', 'username'), True); } function upgrade_81_mysql() { # MySQL only $table_vacation = table_by_key ('vacation'); $table_vacation_notification = table_by_key('vacation_notification'); $all_sql = explode("\n", trim(" ALTER TABLE `$table_vacation` CHANGE `email` `email` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_vacation` CHANGE `subject` `subject` VARCHAR( 255 ) {UTF-8} NOT NULL ALTER TABLE `$table_vacation` CHANGE `body` `body` TEXT {UTF-8} NOT NULL ALTER TABLE `$table_vacation` CHANGE `cache` `cache` TEXT {LATIN1} NOT NULL ALTER TABLE `$table_vacation` CHANGE `domain` `domain` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_vacation` CHANGE `active` `active` TINYINT( 1 ) NOT NULL DEFAULT '1' ALTER TABLE `$table_vacation` DEFAULT {LATIN1} ALTER TABLE `$table_vacation` {INNODB} ")); foreach ($all_sql as $sql) { $result = db_query_parsed($sql, TRUE); } } /** * Make logging translatable - i.e. create alias => create_alias */ function upgrade_90_mysql_pgsql() { $result = db_query_parsed("UPDATE " . table_by_key ('log') . " SET action = REPLACE(action,' ','_')", TRUE); # change edit_alias_state to edit_alias_active $result = db_query_parsed("UPDATE " . table_by_key ('log') . " SET action = 'edit_alias_state' WHERE action = 'edit_alias_active'", TRUE); } /** * MySQL only allow quota > 2 GB */ function upgrade_169_mysql() { $table_domain = table_by_key ('domain'); $table_mailbox = table_by_key ('mailbox'); $result = db_query_parsed("ALTER TABLE $table_domain MODIFY COLUMN `quota` bigint(20) NOT NULL default '0'", TRUE); $result = db_query_parsed("ALTER TABLE $table_domain MODIFY COLUMN `maxquota` bigint(20) NOT NULL default '0'", TRUE); $result = db_query_parsed("ALTER TABLE $table_mailbox MODIFY COLUMN `quota` bigint(20) NOT NULL default '0'", TRUE); } /** * Create / modify vacation_notification table. * Note: This might not work if users used workarounds to create the table before. * In this case, dropping the table is the easiest solution. */ function upgrade_318_mysql() { $table_vacation_notification = table_by_key('vacation_notification'); $table_vacation = table_by_key('vacation'); db_query_parsed( " CREATE TABLE {IF_NOT_EXISTS} $table_vacation_notification ( on_vacation varchar(255) {LATIN1} NOT NULL, notified varchar(255) NOT NULL, notified_at timestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY on_vacation (`on_vacation`, `notified`), CONSTRAINT `vacation_notification_pkey` FOREIGN KEY (`on_vacation`) REFERENCES $table_vacation(`email`) ON DELETE CASCADE ) {INNODB} COMMENT='Postfix Admin - Virtual Vacation Notifications' "); # in case someone has manually created the table with utf8 fields before: $all_sql = explode("\n", trim(" ALTER TABLE `$table_vacation_notification` CHANGE `notified` `notified` VARCHAR( 255 ) NOT NULL ALTER TABLE `$table_vacation_notification` DEFAULT CHARACTER SET utf8 ")); # Possible errors that can be ignored: # None. # If something goes wrong, the user should drop the vacation_notification table # (not a great loss) and re-create it using this function. foreach ($all_sql as $sql) { $result = db_query_parsed($sql); } } /** * Create fetchmail table */ function upgrade_344_mysql() { $table_fetchmail = table_by_key('fetchmail'); db_query_parsed( " CREATE TABLE IF NOT EXISTS $table_fetchmail( id int(11) unsigned not null auto_increment, mailbox varchar(255) not null default '', src_server varchar(255) not null default '', src_auth enum('password','kerberos_v5','kerberos','kerberos_v4','gssapi','cram-md5','otp','ntlm','msn','ssh','any'), src_user varchar(255) not null default '', src_password varchar(255) not null default '', src_folder varchar(255) not null default '', poll_time int(11) unsigned not null default 10, fetchall tinyint(1) unsigned not null default 0, keep tinyint(1) unsigned not null default 0, protocol enum('POP3','IMAP','POP2','ETRN','AUTO'), extra_options text, returned_text text, mda varchar(255) not null default '', date timestamp, primary key(id) ); "); } function upgrade_344_pgsql() { $fetchmail = table_by_key('fetchmail'); // a field name called 'date' is probably a bad idea. if(!_pgsql_object_exists('fetchmail')) { db_query_parsed( " create table $fetchmail( id serial, mailbox varchar(255) not null default '', src_server varchar(255) not null default '', src_auth varchar(15) NOT NULL, src_user varchar(255) not null default '', src_password varchar(255) not null default '', src_folder varchar(255) not null default '', poll_time integer not null default 10, fetchall boolean not null default false, keep boolean not null default false, protocol varchar(15) NOT NULL, extra_options text, returned_text text, mda varchar(255) not null default '', date timestamp with time zone default now(), primary key(id), CHECK (src_auth IN ('password','kerberos_v5','kerberos','kerberos_v4','gssapi','cram-md5','otp','ntlm','msn','ssh','any')), CHECK (protocol IN ('POP3', 'IMAP', 'POP2', 'ETRN', 'AUTO')) ); "); } // MySQL expects sequences to start at 1. Stupid database. // fetchmail.php requires id parameters to be > 0, as it does if($id) like logic... hence if we don't // fudge the sequence starting point, you cannot delete/edit the first entry if using PostgreSQL. // I'm sure there's a more elegant way of fixing it properly.... but this should work for now. if(_pgsql_object_exists('fetchmail_id_seq')) { db_query_parsed("SELECT nextval('{$fetchmail}_id_seq')"); // I don't care about number waste. } } /** * Create alias_domain table - MySQL */ # function upgrade_362_mysql() # renamed to _438 to make sure it runs after an upgrade from 2.2.x function upgrade_438_mysql() { # Table structure for table alias_domain # $table_alias_domain = table_by_key('alias_domain'); db_query_parsed(" CREATE TABLE IF NOT EXISTS $table_alias_domain ( `alias_domain` varchar(255) NOT NULL default '', `target_domain` varchar(255) NOT NULL default '', `created` {DATETIME}, `modified` {DATETIME}, `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`alias_domain`), KEY `active` (`active`), KEY `target_domain` (`target_domain`) ) {MYISAM} COMMENT='Postfix Admin - Domain Aliases' "); } /** * Create alias_domain table - PgSQL */ # function upgrade_362_pgsql() # renamed to _438 to make sure it runs after an upgrade from 2.2.x function upgrade_438_pgsql() { # Table structure for table alias_domain $table_alias_domain = table_by_key('alias_domain'); $table_domain = table_by_key('domain'); if(_pgsql_object_exists($table_alias_domain)) { return; } db_query_parsed(" CREATE TABLE $table_alias_domain ( alias_domain character varying(255) NOT NULL REFERENCES $table_domain(domain) ON DELETE CASCADE, target_domain character varying(255) NOT NULL REFERENCES $table_domain(domain) ON DELETE CASCADE, created timestamp with time zone default now(), modified timestamp with time zone default now(), active boolean NOT NULL default true, PRIMARY KEY(alias_domain))"); db_query_parsed("CREATE INDEX alias_domain_active ON $table_alias_domain(alias_domain,active)"); db_query_parsed("COMMENT ON TABLE $table_alias_domain IS 'Postfix Admin - Domain Aliases'"); } /** * Change description fields to UTF-8 */ function upgrade_373_mysql() { # MySQL only $table_domain = table_by_key ('domain'); $table_mailbox = table_by_key('mailbox'); $all_sql = explode("\n", trim(" ALTER TABLE `$table_domain` CHANGE `description` `description` VARCHAR( 255 ) {UTF-8} NOT NULL ALTER TABLE `$table_mailbox` CHANGE `name` `name` VARCHAR( 255 ) {UTF-8} NOT NULL ")); foreach ($all_sql as $sql) { $result = db_query_parsed($sql); } } /** * add ssl option for fetchmail */ function upgrade_439_mysql() { $table_fetchmail = table_by_key('fetchmail'); if(!_mysql_field_exists($table_fetchmail, 'ssl')) { db_query_parsed("ALTER TABLE `$table_fetchmail` ADD `ssl` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `protocol` ; "); } } function upgrade_439_pgsql() { $table_fetchmail = table_by_key('fetchmail'); if(!_pgsql_field_exists($table_fetchmail, 'ssl')) { db_query_parsed("ALTER TABLE $table_fetchmail ADD COLUMN ssl BOOLEAN NOT NULL DEFAULT false"); } } function upgrade_473_mysql() { $table_admin = table_by_key('admin'); $table_alias = table_by_key('alias'); $table_al_dom = table_by_key('alias_domain'); $table_domain = table_by_key('domain'); $table_dom_adm = table_by_key('domain_admins'); $table_fmail = table_by_key('fetchmail'); $table_mailbox = table_by_key('mailbox'); $table_log = table_by_key('log'); # tables were created without explicit charset before :-( $all_sql = explode("\n", trim(" ALTER TABLE `$table_admin` CHANGE `username` `username` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_admin` CHANGE `password` `password` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_admin` DEFAULT {LATIN1} ALTER TABLE `$table_alias` CHANGE `address` `address` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_alias` CHANGE `goto` `goto` TEXT {LATIN1} NOT NULL ALTER TABLE `$table_alias` CHANGE `domain` `domain` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_alias` DEFAULT {LATIN1} ALTER TABLE `$table_al_dom` CHANGE `alias_domain` `alias_domain` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_al_dom` CHANGE `target_domain` `target_domain` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_al_dom` DEFAULT {LATIN1} ALTER TABLE `$table_domain` CHANGE `domain` `domain` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_domain` CHANGE `transport` `transport` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_domain` DEFAULT {LATIN1} ALTER TABLE `$table_dom_adm` CHANGE `username` `username` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_dom_adm` CHANGE `domain` `domain` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_dom_adm` DEFAULT {LATIN1} ALTER TABLE `$table_log` CHANGE `username` `username` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_log` CHANGE `domain` `domain` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_log` CHANGE `action` `action` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_log` CHANGE `data` `data` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_log` DEFAULT {LATIN1} ALTER TABLE `$table_mailbox` CHANGE `username` `username` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_mailbox` CHANGE `password` `password` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_mailbox` CHANGE `maildir` `maildir` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_mailbox` CHANGE `domain` `domain` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_mailbox` DEFAULT {LATIN1} ALTER TABLE `$table_fmail` CHANGE `mailbox` `mailbox` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_fmail` CHANGE `src_server` `src_server` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_fmail` CHANGE `src_user` `src_user` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_fmail` CHANGE `src_password` `src_password` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_fmail` CHANGE `src_folder` `src_folder` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_fmail` CHANGE `mda` `mda` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_fmail` CHANGE `mailbox` `mailbox` VARCHAR( 255 ) {LATIN1} NOT NULL ALTER TABLE `$table_fmail` CHANGE `extra_options` `extra_options` TEXT {LATIN1} NULL DEFAULT NULL ALTER TABLE `$table_fmail` CHANGE `returned_text` `returned_text` TEXT {LATIN1} NULL DEFAULT NULL ALTER TABLE `$table_fmail` DEFAULT {LATIN1} ")); foreach ($all_sql as $sql) { $result = db_query_parsed($sql); } } function upgrade_479_mysql () { # ssl is a reserved word in MySQL and causes several problems. Renaming the field... $table_fmail = table_by_key('fetchmail'); if(!_mysql_field_exists($table_fmail, 'usessl')) { db_query_parsed("ALTER TABLE `$table_fmail` CHANGE `ssl` `usessl` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0'"); } } function upgrade_479_pgsql () { $table_fmail = table_by_key('fetchmail'); if(!_pgsql_field_exists($table_fmail, 'usessl')) { db_query_parsed("alter table $table_fmail rename column ssl to usessl"); } } function upgrade_483_mysql () { $table_log = table_by_key('log'); db_query_parsed("ALTER TABLE $table_log CHANGE `data` `data` TEXT {LATIN1} NOT NULL"); } # Add a local_part field to the mailbox table, and populate it with the local part of the user's address. # This is to make it easier (hopefully) to change the filesystem location of a mailbox in the future # See https://sourceforge.net/forum/message.php?msg_id=5394663 function upgrade_495_pgsql() { $table_mailbox = table_by_key('mailbox'); if(!_pgsql_field_exists($table_mailbox, 'local_part')) { db_query_parsed("ALTER TABLE $table_mailbox add column local_part varchar(255) "); db_query_parsed("UPDATE $table_mailbox SET local_part = substring(username from '^(.*)@')"); db_query_parsed("ALTER TABLE $table_mailbox alter column local_part SET NOT NULL"); } } # See https://sourceforge.net/forum/message.php?msg_id=5394663 function upgrade_495_mysql() { $table_mailbox = table_by_key('mailbox'); if(!_mysql_field_exists($table_mailbox, 'local_part')) { db_query_parsed("ALTER TABLE $table_mailbox add local_part varchar(255) AFTER quota"); // allow to be null db_query_parsed("UPDATE $table_mailbox SET local_part = substring_index(username, '@', 1)"); db_query_parsed("ALTER TABLE $table_mailbox change local_part local_part varchar(255) NOT NULL"); // remove null-ness... } } function upgrade_504_mysql() { $table_mailbox = table_by_key('mailbox'); db_query_parsed("ALTER TABLE `$table_mailbox` CHANGE `local_part` `local_part` VARCHAR( 255 ) {LATIN1} NOT NULL"); } function upgrade_655_mysql_pgsql() { db_query_parsed(_add_index('mailbox', 'domain', 'domain')); db_query_parsed(_add_index('alias', 'domain', 'domain')); } /* function number too small for upgrades from 2.3.x -> adding activefrom and activeuntil to vacation table is now upgrade_964 -> the tables client_access, from_access, helo_access, rcpt_access, user_whitelist are not used by PostfixAdmin - no replacement function needed Note: Please never remove this function, even if it is disabled - it might be needed in case we have to debug a broken database upgrade etc. Note: there never was a function upgrade_727_pgsql() function upgrade_727_mysql() { $table_vacation = table_by_key('vacation'); if(!_mysql_field_exists($table_vacation, 'activefrom')) { db_query_parsed("ALTER TABLE $table_vacation add activefrom datetime default NULL"); } if(!_mysql_field_exists($table_vacation, 'activeuntil')) { db_query_parsed("ALTER TABLE $table_vacation add activeuntil datetime default NULL"); } # the following tables are not used by postfixadmin $table_client_access = table_by_key('client_access'); db_query_parsed(" CREATE TABLE IF NOT EXISTS $table_client_access ( `client` char(50) NOT NULL, `action` char(50) NOT NULL default 'REJECT', UNIQUE KEY `client` (`client`) ) {MYISAM} COMMENT='Postfix Admin - Client Access' "); $table_from_access = table_by_key('from_access'); db_query_parsed(" CREATE TABLE IF NOT EXISTS $table_from_access ( `from_access` char(50) NOT NULL, `action` char(50) NOT NULL default 'REJECT', UNIQUE KEY `from_access` (`from_access`) ) {MYISAM} COMMENT='Postfix Admin - From Access' "); $table_helo_access = table_by_key('helo_access'); db_query_parsed(" CREATE TABLE IF NOT EXISTS $table_helo_access ( `helo` char(50) NOT NULL, `action` char(50) NOT NULL default 'REJECT', UNIQUE KEY `helo` (`helo`) ) {MYISAM} COMMENT='Postfix Admin - Helo Access' "); $table_rcpt_access = table_by_key('rcpt_access'); db_query_parsed(" CREATE TABLE IF NOT EXISTS $table_rcpt_access ( `rcpt` char(50) NOT NULL, `action` char(50) NOT NULL default 'REJECT', UNIQUE KEY `rcpt` (`rcpt`) ) {MYISAM} COMMENT='Postfix Admin - Recipient Access' "); $table_user_whitelist = table_by_key('user_whitelist'); db_query_parsed(" CREATE TABLE IF NOT EXISTS $table_user_whitelist ( `recipient` char(50) NOT NULL, `action` char(50) NOT NULL default 'REJECT', UNIQUE KEY `recipient` (`recipient`) ) {MYISAM} COMMENT='Postfix Admin - User whitelist' "); } */ function upgrade_729_mysql_pgsql() { $table_quota = table_by_key('quota'); $table_quota2 = table_by_key('quota2'); # table for dovecot v1.0 & 1.1 # note: quota table created with old versions of upgrade.php (before r1605) # will not have explicit "NOT NULL DEFAULT 0" for the "current" field # (shouldn't hurt) db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} $table_quota ( username VARCHAR(255) {LATIN1} NOT NULL, path VARCHAR(100) {LATIN1} NOT NULL, current {BIGINT}, PRIMARY KEY (username, path) ) {MYISAM} ; "); # table for dovecot >= 1.2 db_query_parsed(" CREATE TABLE {IF_NOT_EXISTS} $table_quota2 ( username VARCHAR(100) {LATIN1} NOT NULL, bytes {BIGINT}, messages integer NOT NULL DEFAULT 0, PRIMARY KEY (username) ) {MYISAM} ; "); } function upgrade_730_pgsql() { $table_quota = table_by_key('quota'); $table_quota2 = table_by_key('quota2'); db_query_parsed('CREATE LANGUAGE plpgsql', 1); /* will error if plpgsql is already installed */ # trigger for dovecot v1.0 & 1.1 quota table # taken from http://wiki.dovecot.org/Quota/Dict db_query_parsed(" CREATE OR REPLACE FUNCTION merge_quota() RETURNS TRIGGER AS \$merge_quota\$ BEGIN UPDATE $table_quota SET current = NEW.current + current WHERE username = NEW.username AND path = NEW.path; IF found THEN RETURN NULL; ELSE RETURN NEW; END IF; END; \$merge_quota\$ LANGUAGE plpgsql; "); db_query_parsed(" CREATE TRIGGER mergequota BEFORE INSERT ON $table_quota FOR EACH ROW EXECUTE PROCEDURE merge_quota(); "); # trigger for dovecot >= 1.2 quota table # taken from http://wiki.dovecot.org/Quota/Dict, table/trigger name changed to quota2 naming db_query_parsed(" CREATE OR REPLACE FUNCTION merge_quota2() RETURNS TRIGGER AS \$\$ BEGIN IF NEW.messages < 0 OR NEW.messages IS NULL THEN -- ugly kludge: we came here from this function, really do try to insert IF NEW.messages IS NULL THEN NEW.messages = 0; ELSE NEW.messages = -NEW.messages; END IF; return NEW; END IF; LOOP UPDATE $table_quota2 SET bytes = bytes + NEW.bytes, messages = messages + NEW.messages WHERE username = NEW.username; IF found THEN RETURN NULL; END IF; BEGIN IF NEW.messages = 0 THEN INSERT INTO $table_quota2 (bytes, messages, username) VALUES (NEW.bytes, NULL, NEW.username); ELSE INSERT INTO $table_quota2 (bytes, messages, username) VALUES (NEW.bytes, -NEW.messages, NEW.username); END IF; return NULL; EXCEPTION WHEN unique_violation THEN -- someone just inserted the record, update it END; END LOOP; END; \$\$ LANGUAGE plpgsql; "); db_query_parsed(" CREATE TRIGGER mergequota2 BEFORE INSERT ON $table_quota2 FOR EACH ROW EXECUTE PROCEDURE merge_quota2(); "); } function upgrade_945_mysql_pgsql() { _db_add_field('vacation', 'modified', '{DATECURRENT}', 'created'); } function upgrade_946_mysql_pgsql() { # taken from upgrade_727_mysql, needs to be done for all databases _db_add_field('vacation', 'activefrom', '{DATE}', 'body'); _db_add_field('vacation', 'activeuntil', '{DATE}', 'activefrom'); } function upgrade_968_pgsql() { # pgsql counterpart for upgrade_169_mysql() - allow really big quota $table_domain = table_by_key ('domain'); $table_mailbox = table_by_key('mailbox'); db_query_parsed("ALTER TABLE $table_domain ALTER COLUMN quota type bigint"); db_query_parsed("ALTER TABLE $table_domain ALTER COLUMN maxquota type bigint"); db_query_parsed("ALTER TABLE $table_mailbox ALTER COLUMN quota type bigint"); } function upgrade_1050_mysql_pgsql() { db_query_parsed(_add_index('log', 'domain_timestamp', 'domain,timestamp')); } function upgrade_1283_mysql_pgsql() { _db_add_field('admin', 'superadmin', '{BOOLEAN}', 'password'); } function upgrade_1284_mysql_pgsql() { # migrate the ALL domain to the superadmin column # Note: The ALL domain is not (yet) deleted to stay backwards-compatible for now (will be done in a later upgrade function) $result = db_query("SELECT username FROM " . table_by_key('domain_admins') . " where domain='ALL'"); if ($result['rows'] > 0) { while ($row = db_array ($result['result'])) { printdebug ("Setting superadmin flag for " . $row['username']); db_update('admin', 'username', $row['username'], array('superadmin' => db_get_boolean(true)) ); } } } function upgrade_1345_mysql() { # $table_vacation = table_by_key('vacation'); # adding and usage of reply_type field removed in r1610 # db_query_parsed("ALTER TABLE `$table_vacation` ADD `reply_type` VARCHAR( 20 ) NOT NULL AFTER `domain` "); # obsoleted by upgrade_1610() # db_query_parsed("ALTER TABLE `$table_vacation` ADD `interval_time` INT NOT NULL DEFAULT '0' AFTER `reply_type` "); } function upgrade_1519_mysql_pgsql() { _db_add_field('fetchmail', 'sslcertck', '{BOOLEAN}', 'usessl' ); _db_add_field('fetchmail', 'sslcertpath', "VARCHAR(255) {UTF-8} DEFAULT ''", 'sslcertck' ); _db_add_field('fetchmail', 'sslfingerprint', "VARCHAR(255) {LATIN1} DEFAULT ''", 'sslcertpath'); } function upgrade_1610_mysql_pgsql() { # obsoletes upgrade_1345_mysql() - which means debug mode could print "field already exists" _db_add_field('vacation', 'interval_time', '{INT}', 'domain'); } function upgrade_1685_mysql() { # Fix existing log entries broken by https://sourceforge.net/p/postfixadmin/bugs/317/ $table = table_by_key('log'); db_query_parsed("UPDATE $table SET data = domain WHERE data = '' AND domain LIKE '%@%'"); db_query_parsed("UPDATE $table SET domain=SUBSTRING_INDEX(domain, '@', -1) WHERE domain=data;"); } function upgrade_1685_pgsql() { $table = table_by_key('log'); db_query_parsed("UPDATE $table SET data = domain WHERE data = '' AND domain LIKE '%@%'"); db_query_parsed("UPDATE $table SET domain=SPLIT_PART(domain, '@', 2) WHERE domain=data;"); } function upgrade_1761_mysql() { # upgrade_1762 adds the 'modified' column as {DATECURRENT}, therefore we first need to change # 'date' to {DATE} (mysql only allows one {DATECURRENT} column per table) $table_fetchmail = table_by_key('fetchmail'); db_query_parsed("ALTER TABLE `$table_fetchmail` CHANGE `date` `date` {DATE}"); } function upgrade_1762_mysql_pgsql() { _db_add_field('fetchmail', 'domain', "VARCHAR(255) {LATIN1} DEFAULT ''", 'id'); _db_add_field('fetchmail', 'active', '{BOOLEAN}', 'date'); _db_add_field('fetchmail', 'created', '{DATE}', 'date'); # If you followed SVN and got upgrade failures here, you might need to # UPDATE config SET value=1760 WHERE name='version'; # and run setup.php again (upgrade_1761_mysql was added later). _db_add_field('fetchmail', 'modified', '{DATECURRENT}', 'created'); } function upgrade_1763_mysql() { $table = table_by_key('fetchmail'); db_query_parsed("UPDATE $table SET domain=SUBSTRING_INDEX(mailbox, '@', -1) WHERE domain='';"); } function upgrade_1763_pgsql() { $table = table_by_key('fetchmail'); db_query_parsed("UPDATE $table SET domain=SPLIT_PART(mailbox, '@', 2) WHERE domain='';"); } function upgrade_1767_mysql_pgsql() { # 'active' was just added, so make sure all existing jobs stay active $table = table_by_key('fetchmail'); db_query_parsed("UPDATE $table SET active='{BOOL_TRUE}'"); } function upgrade_1795_mysql() { # upgrade_1761_mysql() was added later (in r1795) - make sure it runs for everybody # (running it twice doesn't hurt) upgrade_1761_mysql(); } function upgrade_1824_sqlite() { $admin_table = table_by_key('admin'); $alias_table = table_by_key('alias'); $alias_domain_table = table_by_key('alias_domain'); $domain_table = table_by_key('domain'); $domain_admins_table = table_by_key('domain_admins'); $fetchmail_table = table_by_key('fetchmail'); $log_table = table_by_key('log'); $mailbox_table = table_by_key('mailbox'); $quota_table = table_by_key('quota'); $quota2_table = table_by_key('quota2'); $vacation_table = table_by_key('vacation'); $vacation_notification_table = table_by_key('vacation_notification'); db_query_parsed(" CREATE TABLE $admin_table ( `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `superadmin` {BOOLEAN}, `created` {DATE}, `modified` {DATE}, `active` {BOOLEAN_TRUE}, {PRIMARY} (`username`)); "); db_query_parsed(" CREATE TABLE $alias_table ( `address` varchar(255) NOT NULL, `goto` {FULLTEXT} NOT NULL, `domain` varchar(255) NOT NULL, `created` {DATE}, `modified` {DATE}, `active` {BOOLEAN_TRUE}, {PRIMARY} (`address`)); "); db_query_parsed(" CREATE TABLE $alias_domain_table ( `alias_domain` varchar(255) NOT NULL, `target_domain` varchar(255) NOT NULL, `created` {DATE}, `modified` {DATE}, `active` {BOOLEAN_TRUE}, {PRIMARY} (`alias_domain`)); "); db_query_parsed(" CREATE TABLE $domain_table ( `domain` varchar(255) NOT NULL, `description` varchar(255) NOT NULL, `aliases` {INT}, `mailboxes` {INT}, `maxquota` {BIGINT}, `quota` {BIGINT}, `transport` varchar(255) NOT NULL, `backupmx` {BOOLEAN}, `created` {DATE}, `modified` {DATE}, `active` {BOOLEAN_TRUE}, {PRIMARY} (`domain`)); "); db_query_parsed(" CREATE TABLE $domain_admins_table ( `username` varchar(255) NOT NULL, `domain` varchar(255) NOT NULL, `created` {DATE}, `active` {BOOLEAN_TRUE}); "); db_query_parsed(" CREATE TABLE $fetchmail_table ( `id` {AUTOINCREMENT}, `domain` varchar(255) DEFAULT '', `mailbox` varchar(255) NOT NULL, `src_server` varchar(255) NOT NULL, `src_auth` varchar(255) DEFAULT NULL, `src_user` varchar(255) NOT NULL, `src_password` varchar(255) NOT NULL, `src_folder` varchar(255) NOT NULL, `poll_time` int(11) NOT NULL DEFAULT '10', `fetchall` {BOOLEAN}, `keep` {BOOLEAN}, `protocol` {FULLTEXT} DEFAULT NULL, `usessl` {BOOLEAN}, `sslcertck` {BOOLEAN}, `sslcertpath` varchar(255) DEFAULT '', `sslfingerprint` varchar(255) DEFAULT '', `extra_options` {FULLTEXT}, `returned_text` {FULLTEXT}, `mda` varchar(255) NOT NULL, `date` {DATE}, `created` {DATE}, `modified` {DATECURRENT}, `active` {BOOLEAN}); "); db_query_parsed(" CREATE TABLE $log_table ( `timestamp` {DATE}, `username` varchar(255) NOT NULL, `domain` varchar(255) NOT NULL, `action` varchar(255) NOT NULL, `data` {FULLTEXT} NOT NULL); "); db_query_parsed(" CREATE TABLE $mailbox_table ( `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, `maildir` varchar(255) NOT NULL, `quota` {BIGINT}, `local_part` varchar(255) NOT NULL, `domain` varchar(255) NOT NULL, `created` {DATE}, `modified` {DATE}, `active` {BOOLEAN_TRUE}, {PRIMARY} (`username`)); "); db_query_parsed(" CREATE TABLE $quota_table ( `username` varchar(255) NOT NULL, `path` varchar(100) NOT NULL, `current` {BIGINT}, {PRIMARY} (`username`,`path`)); "); db_query_parsed(" CREATE TABLE $quota2_table ( `username` varchar(255) NOT NULL, `bytes` {BIGINT}, `messages` {INT}, {PRIMARY} (`username`)); "); db_query_parsed(" CREATE TABLE $vacation_table ( `email` varchar(255) NOT NULL, `subject` varchar(255) NOT NULL, `body` {FULLTEXT} NOT NULL, `activefrom` {DATE}, `activeuntil` {DATE}, `cache` {FULLTEXT} NOT NULL DEFAULT '', `domain` varchar(255) NOT NULL, `interval_time` {INT}, `created` {DATE}, `modified` {DATECURRENT}, `active` {BOOLEAN_TRUE}, {PRIMARY} (`email`)); "); db_query_parsed(" CREATE TABLE $vacation_notification_table ( `on_vacation` varchar(255) NOT NULL, `notified` varchar(255) NOT NULL, `notified_at` {DATECURRENT}, {PRIMARY} (`on_vacation`,`notified`), CONSTRAINT `vacation_notification_pkey` FOREIGN KEY (`on_vacation`) REFERENCES `vacation` (`email`) ON DELETE CASCADE); "); } function upgrade_1835_mysql() { # change default values for existing datetime fields with a 0000-00-00 default to {DATETIME} foreach (array('domain_admins', 'vacation') as $table_to_change) { $table = table_by_key($table_to_change); db_query_parsed("ALTER TABLE `$table` CHANGE `created` `created` {DATETIME}"); } foreach (array('admin', 'alias', 'alias_domain', 'domain', 'mailbox') as $table_to_change) { $table = table_by_key($table_to_change); db_query_parsed("ALTER TABLE `$table` CHANGE `created` `created` {DATETIME}, CHANGE `modified` `modified` {DATETIME}"); } $table = table_by_key('log'); db_query_parsed("ALTER TABLE `$table` CHANGE `timestamp` `timestamp` {DATETIME}"); } # TODO MySQL: # - various varchar fields do not have a default value # https://sourceforge.net/projects/postfixadmin/forums/forum/676076/topic/3419725 # - change default of all timestamp fields to {DATECURRENT} (CURRENT_TIMESTAMP} or {DATE} # including vacation.activefrom/activeuntil (might have a different default as leftover from upgrade_727_mysql) # including vacation.modified - should be {DATE}, not {DATECURRENT} # https://sourceforge.net/tracker/?func=detail&aid=1699218&group_id=191583&atid=937964 # @todo vacation.email has 2 indizes postfixadmin-3.0.2/common.php0000664000175000017500000000607512720362345015200 0ustar daviddavid postfixadmin-3.0.2/ADDITIONS/0000775000175000017500000000000013046702636014510 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/postfixadmin-mailbox-postcreation.sh0000664000175000017500000000341211076676002023710 0ustar daviddavid#!/bin/sh # Example script for adding a Maildir to a Courier-IMAP virtual mail # hierarchy. # The script only looks at argument 3, assuming that it # indicates the relative name of a maildir, such as # "somedomain.com/peter/". # This script should be run as the user which owns the maildirs. If # the script is actually run by the apache user (e.g. through PHP), # then you could use "sudo" to grant apache the rights to run # this script as the relevant user. # Assume this script has been saved as # /usr/local/bin/postfixadmin-mailbox-postcreation.sh and has been # made executable. Now, an example /etc/sudoers line: # apache ALL=(courier) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postcreation.sh # The line states that the apache user may run the script as the # user "courier" without providing a password. # Change this to where you keep your virtual mail users' maildirs. basedir=/var/spool/maildirs if [ ! -e "$basedir" ]; then echo "$0: basedir '$basedir' does not exist; bailing out." exit 1 fi if [ `echo $3 | fgrep '..'` ]; then echo "$0: An argument contained a double-dot sequence; bailing out." exit 1 fi maildir="${basedir}/$3" parent=`dirname "$maildir"` if [ ! -d "$parent" ]; then if [ -e "$parent" ]; then echo "$0: strange - directory '$parent' exists, but is not a directory; bailing out." exit 1 else mkdir -p "${parent}" if [ $? -ne 0 ]; then echo "$0: mkdir -p '$parent' returned non-zero; bailing out." exit 1 fi fi fi if [ -e "$maildir" ]; then echo "$0: Directory '$maildir' already exists! bailing out" exit 1 fi maildirmake "$maildir" if [ ! -d "$maildir" ]; then echo "$0: maildirmake didn't produce a directory; bailing out." exit 1 fi exit 0 postfixadmin-3.0.2/ADDITIONS/import_users_from_csv.py0000664000175000017500000001520311615633467021521 0ustar daviddavid#!/usr/bin/env python # -*- coding: utf-8 -*- # Script takes a CSV list of users and does a 'bulk' insertion into mysql. # # Copyright (C) 2009 Simone Piccardi # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or (at # your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # import csv import getopt import sys import re import time import random, string from datetime import datetime from crypt import crypt try: import MySQLdb except ImportError ,e: print 'Cannot import the needed MySQLdb module, you must install it' print 'on Debian systems just use the command' print ' apt-get install python-mysqldb' def usage(): print "Usage: inspostadmusers.py [options] users.csv" print " -h print this help" print " -t test run, do not insert, just print" print " -u DB user" print " -p DB password" print " -D DB name" print " -H DB host" print " -q Quota in Mb (0 => no limit)" print " -n char in seed" print " -d debug info on" print " -A create default alias for each domain" print print "the users.csv file must contains the user list with a line" print "for each user, first line should be a title line with at least" print "the following column names: " print " * user - user part of the email (like user in user@domain.com)" print " * password - cleartext password" print " * domain - domain name (like 'domain.com')" print " * name - full user name ('Name Surname')" print print "the 'name' column is optional, other columns will be ignored" print print "Known restrictions:" print "* this script only works with MySQL" print "* mailbox paths are hardcoded to domain/username/" # option parsing try: opts, args = getopt.getopt(sys.argv[1:], 'u:p:d:D:H:htdA') optval={} for opt, val in opts: if opt == "-h": usage() sys.exit(0) else: optval[opt]=val except getopt.GetoptError: usage() sys.exit(2) # # Setup DB connection # MYSQLDB="postfixadmin" MYSQLUSER="postfixadmin" MYSQLPASSWORD="" MYSQLHOST="localhost" # settings by command line options if optval.has_key('-u'): MYSQLUSER = optval['-u'] if optval.has_key('-p'): MYSQLPASSWORD = optval['-p'] if optval.has_key('-D'): MYSQLDB = optval['-D'] if optval.has_key('-H'): MYSQLHOST = optval['-H'] if optval.has_key('-q'): quota = optval['-q'] else: quota = 0 if optval.has_key('-n'): seed_len = optval['-n'] else: seed_len = 8 # check arguments, only the user list file must be present if len(args) !=1: print 'Need just one argument' usage() sys.exit(1) # MySQL connection (skipped in test run) if optval.has_key('-t'): print "Test Run" else: try: connection = MySQLdb.connect(host=MYSQLHOST, user=MYSQLUSER, db=MYSQLDB, passwd=MYSQLPASSWORD) except MySQLdb.MySQLError, e: print "Database connection error" print e sys.exit(1) cursor = connection.cursor() # # Main body # NOW = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # read and convert CSV data lista = csv.DictReader(open(args[0])) def gen_seed(seed_len, chars): return '$1$'+''.join([random.choice(chars) for _ in xrange(seed_len)])+'$' def insert_record(cursor,table,record): columns = record.keys() query = "INSERT INTO " + table + "(" + ','.join(columns) + ") VALUES (" + ','.join(len(columns)*['%s']) + ")" try: cursor.execute(query, record.values()) return 0 except MySQLdb.MySQLError, e: print "Database insertion error" print e print "Record was:" print record.values() print "Query was:" print query # defining default values for tables (mailbox, alias and domain) mailbox = { 'created': NOW, 'modified': NOW, 'active': 1, 'quota': quota } aliases = { 'created': NOW, 'modified': NOW, 'active': 1 } domain = { 'description': "", 'aliases': 0, 'mailboxes': 0, 'quota': 0, 'transport': 'virtual', 'backupmx': 0, 'created': NOW, 'modified': NOW, 'active': 1 } # list of default alias def_alias = ['abuse','hostmaster','postmaster','webmaster'] domain_list = {} chars = string.letters + string.digits # loop over the CSV for row in lista: # create domain if it does not exists if domain_list.has_key(row["domain"]): if optval.has_key('-d'): print "Domain " + row["domain"] + "already exixts" else: domain_list[row["domain"]] = 1 domain['domain'] = row["domain"] if optval.has_key('-t'): print "Inserting domain" print domain else: insert_record(cursor,'domain',domain) if optval.has_key('-A'): for i in def_alias: aliases['address']= i+'@'+row["domain"] aliases['goto']= aliases['address'] aliases['domain'] = row["domain"] if optval.has_key('-t'): print "Inserting alias" print aliases else: insert_record(cursor,'alias',aliases) # build query data for mailbox table mailbox['username']=row["user"]+'@'+row["domain"] encpass=crypt(row["password"], gen_seed(seed_len,chars)) mailbox['password'] = encpass mailbox['name'] = row["name"] mailbox['maildir'] = row["domain"]+'/'+row["user"]+'/' mailbox['local_part'] =row["user"] mailbox['domain'] = row["domain"] # build query data for alias table aliases['address']= mailbox['username'] aliases['goto']= mailbox['username'] aliases['domain'] = row["domain"] # inserting data for mailbox (and relate alias) if optval.has_key('-t'): print "Inserting mailbox" print mailbox print aliases else: insert_record(cursor,'mailbox',mailbox) insert_record(cursor,'alias',aliases) sys.exit(0) postfixadmin-3.0.2/ADDITIONS/cleanupdirs.pl0000664000175000017500000001071111177341326017354 0ustar daviddavid#!/usr/bin/perl -w ################################################################################ # # cleanupdirs 1.2 by jared bell # # display/remove maildir & domains directory tree's not listed in the postfix # mysql database. currently setup for use with postfixadmin, but can be # adapted. edit settings where it says 'change settings as needed.' by default # this program will display a list of directories which need deleted, nothing # is actually deleted. to change this behavior, look into the command line # arguments. # # command line arguments: # --delete # force automatic deletion of directories. instead of displaying a list # of deleted directories, they will be logged in the specified logfile. # --print # display deleted directories as well as log them. only valid when # '--delete' has been specified. # # settings: # $root_path = "/home/vmail"; # if maildir is '/home/vmail/domain.tld/user' then '/home/vmail' is the # $root_path. if your maildirs are '/home/vmail/user@domain.tld' then # this program will need to be modified in order to work right. # $logfile = "/var/log/removed_maildirs.log"; # the logfile to use when $delete_old_dirs is set to 1 # $db_* = "*"; # sets the host, port, database, user and pass to your mysql server # # version history: # 1.2 - removed uneeded settings. added '--print' command line argument # 1.1 - added '--delete' command line argument # 1.0 - initial release # ################################################################################ use strict; use DBI; use File::Path; use Getopt::Long; ### change settings as needed, see notes above ################################# our $root_path = "/home/vmail"; our $logfile = "/var/log/removed_maildirs.log"; our $db_hostname = "localhost"; our $db_port = "3306"; # this script currently supports MySQL only our $db_database = "postfix"; our $db_username = "someuser"; our $db_password = "somepass"; # instead of changing this script, you can put your settings to /etc/mail/postfixadmin/cleanupdirs.conf # just use perl syntax there to fill the variables listed above (without the "our" keyword). Example: # $db_username = 'mail'; if (-f "/etc/mail/postfixadmin/cleanupdirs.conf") { require "/etc/mail/postfixadmin/cleanupdirs.conf"; } ################################################################################ ### begin program ############################################################## my(@dirs_to_delete, $logfile_open); my $delete_old_dirs = 0; # do not delete by default, use cmdline to change this my $print_also = 0; # also print items when deleting, use cmdline to change this GetOptions ('delete' => \$delete_old_dirs, 'print' => \$print_also); my $conn_info = "DBI:mysql:database=$db_database;hostname=$db_hostname;port=$db_port"; my $dbh = DBI->connect($conn_info, $db_username, $db_password) or die $DBI::errstr; opendir DOMAINDIR, $root_path or die "Unable to access directory '$root_path' ($!)"; foreach my $domain_dir (sort readdir DOMAINDIR) { next if $domain_dir =~ /^\./; # skip dotted dirs next if (! -d "$root_path/$domain_dir"); # skip everything that is not a directory my $full_domain_dir = "$root_path/$domain_dir"; opendir USERDIR, $full_domain_dir or die "Unable to access directory '$full_domain_dir' ($!)"; foreach my $user_dir (sort readdir USERDIR) { next if $user_dir =~ /^\./; # skip dotted dirs push @dirs_to_delete, "$full_domain_dir/$user_dir" if &check_dir("SELECT maildir FROM mailbox WHERE maildir = ?", "$domain_dir/$user_dir/"); # end slash needed for checkdir } push @dirs_to_delete, $full_domain_dir if &check_dir("SELECT domain FROM domain WHERE domain = ?", $domain_dir); } closedir USERDIR; closedir DOMAINDIR; $dbh->disconnect; if (@dirs_to_delete) { foreach my $to_delete (@dirs_to_delete) { if ($delete_old_dirs == 1) { $logfile_open = open LOGFILE, ">> $logfile" or die "Unable to append logfile '$logfile' ($!)" unless $logfile_open; rmtree $to_delete; print LOGFILE localtime() . " Deleting directory '$to_delete'\n"; print localtime() . " Deleting directory '$to_delete'\n" if $print_also; } else { print localtime() . " Need to delete directory '$to_delete'\n"; } } } close LOGFILE if $logfile_open; sub check_dir { my($query, $dir) = @_; my $sth = $dbh->prepare($query); my $num_rows = $sth->execute($dir); $sth->finish; ($num_rows eq "0E0") ? 1 : 0; } postfixadmin-3.0.2/ADDITIONS/quota_usage.pl0000664000175000017500000001020511136633551017355 0ustar daviddavid#!/usr/bin/perl # vim:ts=4:sw=4:et # Virtual quota_usage 0.3 # Contributed to Postfixadmin by Jose Nilton # # See also : http://www.russelldare.net/media/perl/dirsizeSource.pdf # License: GPL v2. # Usage: # perl quota_usage.pl --list # perl quota_usage.pl --list --addmysql # for add mysql database postfix # # Requirements - the following perl modules are required: # DBD::Pg or DBD::mysql; perl perl-DBD-mysql perl-DBD (may be named differently depending on your platform). # and the 'du' binary in $ENV{'PATH'} (see below). # # You will need to modify the postfix DATABASE to add a quota_usage column. # Mysql: # ALTER TABLE mailbox ADD quota_usage INT(11) NOT NULL DEFAULT '0' AFTER modified, # ADD quota_usage_date DATE NOT NULL DEFAULT '0000-00-00' AFTER quota_usage; # PostgreSQL: # ALTER TABLE mailbox ADD COLUMN quota_usage INTEGER NOT NULL DEFAULT 0; # ALTER TABLE mailbox ADD COLUMN quota_usage_date DATE NOT NULL DEFAULT current_date; # use strict; use warnings; use File::Path; use DBI; use Getopt::Long; ##EDIT## my $db_host = 'localhost'; my $db_database = 'postfix'; my $db_user = 'postfix'; my $db_password = '123456'; my $root_path = '/home/vmail'; # Pg or mysql my $db_type = 'mysql'; ##END EDIT## (help()) if (!$ARGV[0]); $ENV{'PATH'} = "/sbin:/bin:/usr/sbin:/usr/bin"; my($domain_dir, $full_domain_dir, $user_dir, $usage, $email, $sql, $dbh); my $list = 0; my $insert_db = 0; my $total_mailbox = 0; my $total_domain = 0; GetOptions ('l|list' => \$list, 'i|addmysql' => \$insert_db, 'help|h|man' => \&help) or (help()); (list_quota_usage()) if ($list == 1 || $insert_db == 1 ); sub list_quota_usage { opendir(DOMAINDIR, $root_path) or die ("Unable to access directory '$root_path' ($!)"); if($insert_db == 1){ $dbh = DBI->connect("DBI:$db_type:database=$db_database;host=$db_host", $db_user, $db_password) or die ("cannot connect the database"); execSql("UPDATE mailbox set quota_usage = 0"); } foreach $domain_dir (sort readdir DOMAINDIR) { next if $domain_dir =~ /^\./; # skip dotted dirs $full_domain_dir = "$root_path/$domain_dir"; #print "$full_domain_dir\n"; $total_domain++; opendir(USERDIR, $full_domain_dir) or die ("Unable to access directory '$full_domain_dir' ($!)"); foreach $user_dir (sort readdir USERDIR) { next if $user_dir =~ /^\./; # skip dotted dirs $email = "$user_dir\@$domain_dir"; $total_mailbox++; my $i = `du -0 --summarize $full_domain_dir/$user_dir`; ($usage) = split(" ", $i); if ($usage < 100) { $usage = 0; } elsif ($usage < 1000) { $usage = 1; } else { $usage = $usage + 500; $usage = int $usage / 1000; } if($insert_db == 1){execSql("UPDATE mailbox set quota_usage = $usage, quota_usage_date = CAST(NOW() AS DATE) WHERE username = '$email'");} print_list() if ($list == 1); } } close(DOMAINDIR); close(USERDIR); (print_total()) if ($list == 1); } sub execSql { my $sql = shift; my $ex; $ex = $dbh->do($sql) or die ("error when running $sql"); } sub print_total{ print "---------------------------------------------------------\n"; print "TOTAL DOMAIN\t\t\t\tTOTAL MAILBOX\n"; print "---------------------------------------------------------\n"; print "$total_domain\t\t\t\t\t\t$total_mailbox\n"; } sub print_list { format STDOUT_TOP = Report of Quota Used --------------------------------------------------------- EMAIL QUOTA USED --------------------------------------------------------- . format = @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<< $email, "$usage MB" . write; } sub help { print "$0 [options...]\n"; print "-l|--list List quota used\n"; print "-i|--addmysql For insert quota used in database mysql\n"; } postfixadmin-3.0.2/ADDITIONS/pfa_maildir_cleanup.pl0000664000175000017500000000621210715711016021014 0ustar daviddavid#!/usr/bin/perl # ## ## pfa_maildir_cleanup.pl ## ## (c) 2004 by Stephen Fulton (sfulton@esoteric.ca) ## ## based on a script by Petr Znojemsky (thanks!) ## ## Simple script to remove maildirs/domains not listed in a MySQL database. ## Set up for use with those using PostfixAdmin, but can be adapted. ## ## Edit the variables between the ##EDIT## to match your setup. ## ## USE AT YOUR OWN RISK. I ASSUME NO RESPONSIBILITY. ## use DBI; use File::Path; ##EDIT## $root_path = "/home/mail"; $logfile = "/var/log/removed_maildirs.log"; $db_host = "localhost"; $db_database = "database"; $db_user = "username"; $db_password = 'password'; ##END EDIT## $connectionInfo = "DBI:mysql:database=$db_database;$db_host:3306"; ## Read a list of domain directories in the root path /remote/mail1 opendir(DIRHANDLE, $root_path) || die "Cannot access directory $maildir_path: $!"; my @directories = (); foreach $directory (sort readdir(DIRHANDLE)) { push (@directories, $directory); } closedir(DIRHANDLE); ## Strip the "." and ".." from the directories array ($dot, $doubledot, @directories) = @directories; ## For each of the domain directories.. foreach $domain_dir (@directories) { $complete_domain_path = "$root_path/$domain_dir"; ## Get a list of user directories within each domain directory... opendir(DOMAINHANDLE, $complete_domain_path) || die "Cannot access directory $complete_domain_path: $!"; my @user_directories = (); foreach $dir (sort readdir(DOMAINHANDLE)) { push(@user_directories, $dir); } close(DOMAINHANDLE); ## Now remove any "." or ".." directory entries and construct a domain/maildir variable ## valid for one iteration of loop. foreach $user_directory (@user_directories) { if( not($user_directory eq '..') && not($user_directory eq '.') ) { $short_user_dir = "$domain_dir/$user_directory/"; ## Here is where the $short_user_dir is compared against the DB entry. $dbh = DBI->connect($connectionInfo,$db_user,$db_password); $user_query = "SELECT maildir FROM mailbox WHERE maildir = '$short_user_dir'"; $sth = $dbh->prepare($user_query); $rows = $sth->execute(); ## If there are no rows that match, then directory is orphaned and can ## be deleted. if($rows == 0) { $maildir_path = "$root_path/$short_user_dir"; open(INFO, ">>$logfile") || die "Cannot write to the logfile: $logfile."; rmtree($maildir_path); print INFO localtime()." Maildir ".$maildir_path." has been deleted.\n"; (INFO); } $sth->finish; $dbh->disconnect; } } $dbh2 = DBI->connect($connectionInfo,$db_user,$db_password); $domain_query = "SELECT domain FROM domain WHERE domain = '$domain_dir'"; $sth2 = $dbh2->prepare($domain_query); $domain_rows = $sth2->execute(); if($domain_rows == 0) { open(INFO, ">>$logfile") || die "Cannot write to the logfile: $logfile."; rmtree($complete_domain_path); print INFO localtime()." Domain directory ".$complete_domain_path." has been deleted.\n"; close(INFO); } $sth2->finish; $dbh2->disconnect; } postfixadmin-3.0.2/ADDITIONS/delete-mailq-by-domain.pl0000664000175000017500000000255011616351201021254 0ustar daviddavid#!/usr/bin/perl use strict; use warnings; use Getopt::Long; $ENV{'PATH'} = "/sbin:/bin:/usr/sbin:/usr/bin"; my ($domain); my $list = 0; (help()) if (!$ARGV[0]); GetOptions ('l' => \$list, 'd=s' => \$domain) or (help()); (list_queue()) if ($list == 1); (delete_queue()) if ($domain); sub delete_queue { my $ids = `postqueue -p`; my @ids = split /\n/, $ids; for my $id (@ids) { next if $id =~ /^[\s\(-]/; chomp $id; next unless $id; $id =~ s/(.*?)\**\s.*/$1/; #print "$id\n"; my $match = `postcat -q $id | grep '$domain'`; next unless $match; #print "Deleting ID: $id\n"; my $saida = `postsuper -d $id`; print $saida; } } sub list_queue { my %hash_mail = (); my @queue = `postqueue -p`; my($queue,$key,$total); foreach $queue(@queue) { chomp $queue; if ( $queue =~ /^\s+.*\@(.*)/ ) { $hash_mail{$1}++; } } print"\nTOTAL\tTO\n"; print"----- ----------------------------------------------------------------\n"; foreach $key (reverse sort { $hash_mail{$a} <=> $hash_mail{$b}} keys %hash_mail) { $total += $hash_mail{$key}; print"$hash_mail{$key} - $key\n"; } print"\n$total -> TOTAL QUEUE\n"; } sub help { print "Usage $0 -l To list a row of E-mail Usage $0 -d domain.com To delete the mensgens the Domain\n"; } postfixadmin-3.0.2/ADDITIONS/postfixadmin-domain-postdeletion.sh0000664000175000017500000000357210715711016023524 0ustar daviddavid#!/bin/sh # Example script for removing a Maildir domain top-level folder # from a Courier-IMAP virtual mail hierarchy. # The script only looks at argument 1, assuming that it # indicates the relative name of a domain, such as # "somedomain.com". If $basedir/somedomain.com exists, it will # be removed. # The script will not actually delete the directory. I moves it # to a special directory which may once in a while be cleaned up # by the system administrator. # This script should be run as the user which owns the maildirs. If # the script is actually run by the apache user (e.g. through PHP), # then you could use "sudo" to grant apache the rights to run # this script as the relevant user. # Assume this script has been saved as # /usr/local/bin/postfixadmin-domain-postdeletion.sh and has been # made executable. Now, an example /etc/sudoers line: # apache ALL=(courier) NOPASSWD: /usr/local/bin/postfixadmin-domain-postdeletion.sh # The line states that the apache user may run the script as the # user "courier" without providing a password. # Change this to where you keep your virtual mail users' maildirs. basedir=/var/spool/maildirs # Change this to where you would like deleted maildirs to reside. trashbase=/var/spool/deleted-maildirs if [ `echo $1 | fgrep '..'` ]; then echo "First argument contained a double-dot sequence; bailing out." exit 1 fi if [ ! -e "$trashbase" ]; then echo "trashbase '$trashbase' does not exist; bailing out." exit 1 fi trashdir="${trashbase}/`date +%F_%T`_$1" domaindir="${basedir}/$1" if [ ! -e "$domaindir" ]; then echo "Directory '$domaindir' does not exits; nothing to do." exit 0; fi if [ ! -d "$domaindir" ]; then echo "'$domaindir' is not a directory; bailing out." exit 1 fi if [ -e "$trashdir" ]; then echo "Directory '$trashdir' already exits; bailing out." exit 1; fi mv $domaindir $trashdir exit $? postfixadmin-3.0.2/ADDITIONS/mkeveryone.pl0000664000175000017500000001002010715711016017212 0ustar daviddavid#!/usr/bin/perl # # Generate an 'everybody' alias for a domain. # # Create the file /etc/mkeveryone.conf # chmod 640 /etc/mkeveryone.conf # Example of mkeveryone.conf # # userid=postfix # passwd=postfix # db=postfix # host=localhost # port=3306 # domain=domain.tld # target=everybody@domain.tld # ignore=vacation@domain.tld # ignore=spam@domain.tld # ignore=newsletter@domain.tld # ignore=root@domain.tld # # Save this file in, for example, /usr/local/sbin/mkeveryone.pl # chmod 750 /usr/local/sbin/mkeveryone.pl # # Run the script! # use DBI; use Time::Local; use POSIX qw(EAGAIN); use Fcntl; use IO; use IO::File; my $timeNow=time(); my $DATFILE = "/etc/mkeveryone.conf"; my $FILEHANDLE = ""; # database information my $db="postfix"; my $host="localhost"; my $port="3306"; my $userid="postfix"; my $passwd="postfix"; my $domain="domain.tld"; my $target="everyone@$domain"; my @ignore; my @dest; open (FILEHANDLE, $DATFILE); while ( $LINE = ) { if ( length $LINE > 0 ) { chomp $LINE; $RETURNCODE = 0; SWITCH: { $LINE =~ /^ignore/i and do { $LINE =~ s/^ignore// && $LINE =~ s/=// && $LINE =~ s/^ //g; @ignore = (@ignore,$LINE); }; $LINE =~ /^userid/i and do { # Userid found."; $LINE =~ s/^userid// && $LINE =~ s/=// && $LINE =~ s/^ //g; $userid = $LINE; }; $LINE =~ /^passwd/i and do { # Passwd found."; $LINE =~ s/^passwd// && $LINE =~ s/=// && $LINE =~ s/^ //g; $passwd = $LINE; }; $LINE =~ /^db/i and do { # Database found."; $LINE =~ s/^db// && $LINE =~ s/=// && $LINE =~ s/^ //g; $db = $LINE; }; $LINE =~ /^host/i and do { # Database host found."; $LINE =~ s/^host// && $LINE =~ s/=// && $LINE =~ s/^ //g; $host = $LINE; }; $LINE =~ /^port/i and do { # Database host found."; $LINE =~ s/^port// && $LINE =~ s/=// && $LINE =~ s/^ //g; $port = $LINE; }; $LINE =~ /^target/i and do { # Database host found."; $LINE =~ s/^target// && $LINE =~ s/=// && $LINE =~ s/^ //g; $target = $LINE; }; $LINE =~ /^domain/i and do { # Database host found."; $LINE =~ s/^domain// && $LINE =~ s/=// && $LINE =~ s/^ //g; $domain = $LINE; }; } } } print "Connecting to database $db on $host:$port...\n\r"; print "Target email address is $target...\n\r"; my $connectionInfo="DBI:mysql:database=$db;$host:$port"; # make connection to database $dbh = DBI->connect($connectionInfo,$userid,$passwd); # Delete the old message...prepare and execute query $query = "SELECT username FROM mailbox WHERE domain='$domain';"; $sth = $dbh->prepare($query); $sth->execute(); # assign fields to variables $sth->bind_columns(\$username); my $ign="false"; while($sth->fetch()) { $ign = "false"; foreach $ignored ( @ignore ) { if ( $username eq $ignored ){ $ign = "true"; } } if ( $ign eq "false" ) { @dest = (@dest,$username); } } # Delete the old aliases...prepare and execute query $query = "DELETE FROM alias WHERE address='$target';"; $sth = $dbh->prepare($query); $sth->execute(); print "Record deleted from the database.\r\n"; $sth->finish(); $goto = join(",",@dest); print "$goto\n\r\n\r"; # Insert the new message...prepare and execute query $query = "INSERT INTO alias (address,goto,domain,created,modified) VALUES ('$target','$goto','$domain',now(),now());"; $sth = $dbh->prepare($query); $sth->execute(); print "Record added to the database.\r\n"; $sth->finish(); # disconnect from databse $dbh->disconnect; postfixadmin-3.0.2/ADDITIONS/virtualmaildel.php0000664000175000017500000001024610715711016020232 0ustar daviddavid // // You can run this from your crontab with something like // // 0 4 * * * * vmail php -q virtualmaildel.php >/dev/null // // Setup location of postfixadmin config files. Needed to login to mysql // $conf = '/home/httpd/mail/admin/config.inc.php'; // // Where's the homedir accounts stored. (GET THIS RIGHT OTHERWISE IT THINK NONE EXIST AND DELETES ALL) // $homedir = '/home/virtual'; // // Make sure everything is everything before continuing // if ( ! file_exists( $conf ) ) die( "Cannot find config file $conf\n" ); if ( ! is_dir( $homedir ) ) die( "Cannot find home directory for virtual mailboxes in $homedir\n" ); // // Load mysql authentication from postfixadmin // include( $conf ); // // Recursive Delete Function // function deldir($dir) { $current_dir = opendir($dir); while($entryname = readdir($current_dir)) { if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!="..")) { deldir("${dir}/${entryname}"); } elseif($entryname != "." and $entryname!="..") { unlink("${dir}/${entryname}"); } } closedir($current_dir); @rmdir(${dir}); } // --- Main Start --- // // Get list of directories // $fr = opendir( $homedir ); while ( ($domain = readdir($fr)) !== false) { // // Check if it's a dir // if ( $domain != "." and $domain != ".." and filetype($homedir .'/'. $domain) == "dir" ) { // // Open the (assumed) DOMAIN directory // $ff = opendir( $homedir .'/'. $domain ); while ( ($user = readdir($ff)) !== false) { // // Check for directories assuming it's a user account // if ( $user!="." and $user!=".." and filetype($homedir .'/'. $domain .'/'. $user) == "dir" ) { // // if the dir 'new' exists inside then it's an account // if ( file_exists($homedir .'/'. $domain .'/'. $user .'/'. "new") ) { $dir[$domain][$user] = ""; } else { // // Alert that the dir doesn't have a 'new' dir, possibly not an account. Leave it. // echo "UNKNOWN : " . $homedir ."/". $domain ."/". $user ."/new NOT FOUND. Possibly not an account. Leaving untouched\n"; } } } } } // // OK, got an array of accounts from the dir, Now connect to the DB and check them // $conx = mysql_connect( $CONF['database_host'],$CONF['database_user'],$CONF['database_password'] ); // // Is there a problem connecting? // if ( $conx != false ) { // // Select the database // mysql_select_db( $CONF['database_name'] , $conx) or die ("Can't access database postfix : " . mysql_error()); // // Select all mailboxes to verify against dirs listed in array // $query = "SELECT * FROM mailbox"; $result = mysql_query( $query ); // // Query the mailbox table // if ( $result != false ) { // // Fetch the list of results // while ( $row = mysql_fetch_assoc( $result ) ) { // // Pull apart the maildir field, needed to figure out the directory structure to compare // $strip = explode("/",$row['maildir']); // // Unset the array if it exists. This stops it being erased later. // unset( $dir[ $strip[0] ][ $strip[1] ] ); } // // If there are results. unset the domain too. // if ( count($dir[$strip[0]])==0 and mysql_num_rows($result)>0 ) unset( $dir[$strip[0]] ); } else die( "Failed SELECT in mailboxes\n" ); } else die( 'Cannot connect to the database!\n' ); // // OK, time to clean up. All known users/domains have been removed from the list. // // // If the array still exists (incase nothing there) // if ( is_array($dir) ) { // // Go through each dir // foreach ( $dir as $key => $value ) { // // Is this a user array? // if ( is_array( $value) ) { // // Go through and nuke the folders // foreach ( $value as $user => $value2 ) { // // Nuke.. need any more explanations? // echo "REMOVING : " . $homedir."/".$key."/".$user."\n" ; deldir( $homedir."/".$key."/".$user ) ; } } } } // // And we are outta here.... // echo "Cleanup process completed\n"; ?> postfixadmin-3.0.2/ADDITIONS/mailbox_remover.pl0000664000175000017500000000744510715711016020241 0ustar daviddavid#!/usr/bin/perl # # by Petr Znojemsky (c) 2004 # Mailbox remover 0.1a 23/10/2004 - the very first version for MySQL # removes maildirs from disk when they are not found in a database # # Added subdir support and pause --- Alan Batie 2007 # Lists directories to be deleted then pauses for 5 seconds for chance to abort # $Id: mailbox_remover.pl 211 2007-11-11 23:36:46Z christian_boltz $ # # All your maildirs or other directories could be accidentally removed. # Use it at own risk. No warranties! use strict; use DBI; use File::Path; ########## # Set these variables according to your configuration # when mailboxes are removed, save their tarballs here my $archdir="/var/archive/mailboxes"; # expected to support z option, tweak invocation if you want different my $archcmd="/usr/bin/tar"; # trailing slash not needed my $maildir_path="/var/mail"; # find out if we need to check subdirs for mailboxes or just maildir_path # $CONF['domain_path'] = 'YES'; my $pfadmin_config="/usr/local/www/postfixadmin/config.inc.php"; # database information my $host="localhost"; my $port="3306"; my $userid="dbuser"; my $passwd="dbpw"; my $db="dbname"; ############ my $connectionInfo="DBI:mysql:database=$db;$host:$port"; # make connection to database my $dbh = DBI->connect($connectionInfo,$userid,$passwd); # prepare and execute query my $query = "SELECT maildir FROM mailbox"; my $sth = $dbh->prepare($query); $sth->execute(); # assign fields to variables my ($db_maildir, %db_maildirs); $sth->bind_columns(\$db_maildir); # load up directory list while($sth->fetch()) { $db_maildirs{$db_maildir} = 1; } $sth->finish(); # disconnect from database $dbh->disconnect; # # find out if we need to check subdirs for mailboxes or just maildir_path # $CONF['domain_path'] = 'YES'; # my $use_subdirs = 0; open(CONFIG, "<$pfadmin_config") || die "Can't open '$pfadmin_config': $!\n"; while() { if (/\$CONF\['domain_path'\] *= *'([^']*)'/) { $use_subdirs = ($1 =~ /yes/i); } } close(CONFIG); # store maildir list to %directories # key is path, value is username to use in archive file my %directories; opendir(DIR, $maildir_path) || die "Cannot open dir $maildir_path: $!\n"; foreach my $name (readdir(DIR)) { next if ($name eq '.' || $name eq '..' || ! -d "$maildir_path/$name"); if ($use_subdirs) { opendir(SUBDIR, "$maildir_path/$name") || die "Cannot open dir $maildir_path/$name: $!\n"; foreach my $subname (readdir(SUBDIR)) { next if ($subname eq '.' || $subname eq '..' || ! -d "$maildir_path/$name/$subname"); # db entry has trailing slash... if (!defined($db_maildirs{"$name/$subname/"})) { print "marking $maildir_path/$name/$subname for deletion.\n"; $directories{"$name/$subname"} = "$name-$subname"; } } closedir(SUBDIR); } else { # db entry has trailing slash... if (!defined($db_maildirs{"$name/"})) { print "marking $maildir_path/$name for deletion.\n"; $directories{"$name"} = $name; } } } closedir(DIR); print "Ctrl-C in 5 seconds to abort before removal starts...\n"; sleep 5; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); # yyyymmddhhmm my $tstamp = sprintf("%04d%02d%02d%02d%02d", $year+1900, $mon+1, $mday, $hour, $min); # compare two arrays and erase maildirs not found in database chdir $maildir_path || die "Can't change to maildir '$maildir_path': $!\n";; my @args; foreach my $maildir (keys(%directories)) { my $archive = "$archdir/$directories{$maildir}-$tstamp.tgz"; # quick permissions check open(TOUCH, ">$archive") || die "Can't create archive file $archive: $!\n"; close(TOUCH); print "Archiving $maildir\n"; @args = ($archcmd, "cvzf", $archive, $maildir); system(@args) == 0 or die "Creating archive for $maildir failed: $?" rmtree($maildir); print localtime() . " $maildir has been deleted.\n"; } postfixadmin-3.0.2/ADDITIONS/cyrus/0000775000175000017500000000000013046702636015655 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/cyrus/README-ES.txt0000664000175000017500000000040111352416230017641 0ustar daviddavid Configuración ------------- - Edita el fichero cyrus.conf y modifica las variables $cyrus_*. El usuario debe tener permisos sobre todas las cuentas. - Edita los ficheros cyrus-*.pl y cambia la ruta de cyrus.conf (linea require '/path/to/cyrus.conf';) postfixadmin-3.0.2/ADDITIONS/cyrus/cyrus-mailbox-postcreation.pl0000775000175000017500000000142711374326204023522 0ustar daviddavid#!/usr/bin/perl # Cyrus Mailbox creation # # Iñaki Rodriguez (irodriguez@virtualminds.es / irodriguez@ackstorm.es) # # LICENSE # This source file is subject to the GPL license that is bundled with # this package in the file LICENSE.TXT. # # (26/10/2009) use Cyrus::IMAP::Admin; require '/etc/mail/postfixadmin/cyrus.conf'; use strict; use vars qw($cyrus_user $cyrus_password $cyrus_host); my %opts; my $mailbox = mailbox_name($ARGV[0]); my $client = Cyrus::IMAP::Admin->new($cyrus_host); die_on_error($client); $opts{-user} = $cyrus_user; $opts{-password} = $cyrus_password; $client->authenticate(%opts); die_on_error($client); $client->create($mailbox); die_on_error($client); $client->setquota($mailbox,'STORAGE',scalar $ARGV[3]) if ($ARGV[3] > 0); die_on_error($client); postfixadmin-3.0.2/ADDITIONS/cyrus/cyrus-mailbox-postedit.pl0000775000175000017500000000134111374326204022636 0ustar daviddavid#!/usr/bin/perl # Cyrus Mailbox edition # # Iñaki Rodriguez (irodriguez@virtualminds.es / irodriguez@ackstorm.es) # # LICENSE # This source file is subject to the GPL license that is bundled with # this package in the file LICENSE.TXT. # # (26/10/2009) use Cyrus::IMAP::Admin; require '/etc/mail/postfixadmin/cyrus.conf'; use strict; use vars qw($cyrus_user $cyrus_password $cyrus_host); my %opts; my $mailbox = mailbox_name($ARGV[0]); my $client = Cyrus::IMAP::Admin->new($cyrus_host); die_on_error($client); $opts{-user} = $cyrus_user; $opts{-password} = $cyrus_password; $client->authenticate(%opts); die_on_error($client); $client->setquota($mailbox,'STORAGE',scalar $ARGV[3]) if ($ARGV[3] > 0); die_on_error($client); postfixadmin-3.0.2/ADDITIONS/cyrus/Changelog0000664000175000017500000000020111352416230017446 0ustar daviddavid Version 0.1 -- 26/10/2009 --------------------------- * Public Release. * Postcreation, Postdeletion and Postedit hooks. postfixadmin-3.0.2/ADDITIONS/cyrus/cyrus.conf0000664000175000017500000000071711352416230017664 0ustar daviddavid#!/usr/bin/perl # Config $cyrus_user = 'cyrus'; $cyrus_password = 'cyruspass'; $cyrus_host = 'localhost'; # unixhierarchysep => 1 (yes) / 0 (no) $unixhierarchysep = 1; # Common routines sub mailbox_name { my $mailbox = shift; if($unixhierarchysep) { $mailbox = 'user/'.$ARGV[0]; } else { $mailbox = 'user.'.$ARGV[0]; } return $mailbox; } sub die_on_error { my $cyradm = shift; if($cyradm->error) { die $cyradm->error; } } 1; postfixadmin-3.0.2/ADDITIONS/cyrus/README.txt0000664000175000017500000000033411352416230017341 0ustar daviddavid Configuration ------------- - Edit cyrus.conf and set $cyrus_* variables correctly. User must have permission over all accounts. - Edit cyrus-*.pl and change path to cyrus.conf (require '/path/to/cyrus.conf'; line) postfixadmin-3.0.2/ADDITIONS/cyrus/cyrus-mailbox-postdelete.pl0000775000175000017500000000140511374326204023154 0ustar daviddavid#!/usr/bin/perl # Cyrus Mailbox deletion # # Iñaki Rodriguez (irodriguez@virtualminds.es / irodriguez@ackstorm.es) # # LICENSE # This source file is subject to the GPL license that is bundled with # this package in the file LICENSE.TXT. # # (26/10/2009) use Cyrus::IMAP::Admin; require '/etc/mail/postfixadmin/cyrus.conf'; use strict; use vars qw($cyrus_user $cyrus_password $cyrus_host); my %opts; my $mailbox = mailbox_name($ARGV[0]); my $client = Cyrus::IMAP::Admin->new($cyrus_host); die_on_error($client); $opts{-user} = $cyrus_user; $opts{-password} = $cyrus_password; $client->authenticate(%opts); die_on_error($client); $client->setacl($mailbox,$cyrus_user => 'all'); die_on_error($client); $client->deletemailbox($mailbox); die_on_error($client); postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/0000775000175000017500000000000013046702636020515 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/0000775000175000017500000000000013046702636021754 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/de_DE/0000775000175000017500000000000013046702636022714 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/de_DE/LC_MESSAGES/0000775000175000017500000000000013046702636024501 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/de_DE/LC_MESSAGES/postfixadmin.mo0000664000175000017500000000636511334633761027555 0ustar daviddavidÞ•",/<ø7ù17 Tbgw’ ° ¼8Ç  -DL ]j:}=¸ö5þ?4tw—¯-Ë(ù$" Ghˆ$G²ú,.EU,eP’ã!òM b r @~ ¿ È Ù æ Sû ;O ‹ +“ `¿  (# UL U¢ 2ø =+ .i ,˜ (Å î     "! *Additional forward-aliase always recieve messages BBC!AliasAlias successfully changend!Auto ResponseBodyChange PasswordChange your login passwordChange your mailbox password.Coming BackEdit AliasEdit an alias* for your domain.
One entry per line.ForwardingGoing AwayHere you can create and edit E-Mail forwards.OptionsPassword currentPassword newPassword new againPlease sign out and log back again with your new password!Set an OUT OF OFFICE message or auto responder for your mail.SubjectThe email address that you have entered is not valid:The passwords that you supplied don't match!
Or are empty!ToUnable to change your password!Unable to locate alias!Unable to modify the alias!You already have an auto response configured!You didn't supply your current password!Your auto response has been removed!Your auto response has been set!Your password has been changed!backProject-Id-Version: 0.3-1.4 POT-Creation-Date: 2004-01-28 16:32+0100 PO-Revision-Date: 2004-01-28 16:32+0100 Last-Translator: FLORIAN KIMMERL Language-Team: GERMAN MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit *Zusätzliche Weiterleitungen erhalten alle Nachrichten als Kopie (BCC)!E-MailWeiterleitungen wurden erfolgreich geändert!Abwesenheits-AssistentNachrichtentextPasswort ändernÄndern Sie Ihr Zugangspasswort für POP3/IMAPHier können Sie Passwort ändern. Nach der Änderung müssen Sie sich neu anmelden!Ich bin zurückE-Mail Weiterleitungen bearbeitenBearbeiten Sie hier Ihre E-Mail Weiterleitungen*.
Ein Eintrag pro Zeile.WeiterleitungenIch bin wegHier können Sie E-Mail-Weiterleitungen erstellen und bearbeiten.OptionenPasswort aktuellPasswort neuPasswort neu nochmalBitte melden Sie sich hier ab und loggen sich mit Ihrem neuen Passwort erneut ein! Hier können Sie den Abwesenheits-Assistenten konfigurieren.BetreffDie angegebene E-Mail-Adresse ist ungültig:Die beiden neuen Passwörter stimmen nicht überein!
Oder die Felder wurden nicht ausgefüllt!AnIhr Passwort kann nicht geändert werden!Ihre Weiterleitungen können nicht angefordert werden! Versuchen Sie es später erneut.Ihre Weiterleitungen können nicht modifiziert werden! Versuchen Sie es später erneut.Ihre Abwesenheits-Nachricht ist bereits aktiviert!Ihr aktuelles Passwort wurde nicht angegeben oder ist falsch!Iher Abwesenheits-Nachricht wurde deaktiviert!Ihre Abwesenheits-Nachricht wurde aktiviert!Ihr Passwort wurde ergolgreich geändert!zurückpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/de_DE/LC_MESSAGES/postfixadmin.po0000664000175000017500000000727411616351201027545 0ustar daviddavid# postfixadmin - Plugin for Squirrelmail. # Copyright (C) 2004 FLORIAN KIMMERL # This file is distributed under the same license as the PACKAGE package. # Florian Kimmerl , 2004. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: 0.3-1.4\n" "POT-Creation-Date: 2004-01-28 16:32+0100\n" "PO-Revision-Date: 2004-01-28 16:32+0100\n" "Last-Translator: FLORIAN KIMMERL \n" "Language-Team: GERMAN \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: setup.php msgid "Forwarding" msgstr "Weiterleitungen" msgid "Here you can create and edit E-Mail forwards." msgstr "Hier können Sie E-Mail-Weiterleitungen erstellen und bearbeiten." msgid "Set an OUT OF OFFICE message or auto responder for your mail." msgstr "Hier können Sie den Abwesenheits-Assistenten konfigurieren." msgid "Change your mailbox password." msgstr "Hier können Sie Passwort ändern. Nach der Änderung müssen Sie sich neu anmelden!" #: postfixadmin_changepass.php msgid "Alias" msgstr "E-Mail" msgid "Change Password" msgstr "Passwort ändern" msgid "Change your login password" msgstr "Ändern Sie Ihr Zugangspasswort für POP3/IMAP" #: postfixadmin_forward.php msgid "Edit Alias" msgstr "E-Mail Weiterleitungen bearbeiten" msgid "Edit an alias* for your domain.
One entry per line." msgstr "Bearbeiten Sie hier Ihre E-Mail Weiterleitungen*.
Ein Eintrag pro Zeile." msgid "The email address that you have entered is not valid:" msgstr "Die angegebene E-Mail-Adresse ist ungültig:" msgid "Unable to locate alias!" msgstr "Ihre Weiterleitungen können nicht angefordert werden! Versuchen Sie es später erneut." msgid "Unable to modify the alias!" msgstr "Ihre Weiterleitungen können nicht modifiziert werden! Versuchen Sie es später erneut." msgid "*Additional forward-aliase always recieve messages BBC!" msgstr "*Zusätzliche Weiterleitungen erhalten alle Nachrichten als Kopie (BCC)!" msgid "Alias successfully changend!" msgstr "Weiterleitungen wurden erfolgreich geändert!" #: postfixadmin_vacation.php msgid "Auto Response" msgstr "Abwesenheits-Assistent" msgid "Going Away" msgstr "Ich bin weg" msgid "Coming Back" msgstr "Ich bin zurück" msgid "Options" msgstr "Optionen" msgid "Out of Office" msgstr "" msgid "Subject" msgstr "Betreff" msgid "Body" msgstr "Nachrichtentext" msgid "Your auto response has been removed!" msgstr "Iher Abwesenheits-Nachricht wurde deaktiviert!" msgid "Your auto response has been set!" msgstr "Ihre Abwesenheits-Nachricht wurde aktiviert!" msgid "You already have an auto response configured!" msgstr "Ihre Abwesenheits-Nachricht ist bereits aktiviert!" msgid "back" msgstr "zurück" #: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87 msgid "The passwords that you supplied don't match!
Or are empty!" msgstr "Die beiden neuen Passwörter stimmen nicht überein!
Oder die Felder wurden nicht ausgefüllt!" #: postfixadmin_forward.php:70 postfixadmin_forward.php:152 msgid "To" msgstr "An" #: postfixadmin_changepass.php:101 msgid "Unable to change your password!" msgstr "Ihr Passwort kann nicht geändert werden!" #: postfixadmin_changepass.php:75 msgid "You didn't supply your current password!" msgstr "Ihr aktuelles Passwort wurde nicht angegeben oder ist falsch!" #: postfixadmin_changepass.php:96 msgid "Your password has been changed!" msgstr "Ihr Passwort wurde ergolgreich geändert!" msgid "Password current" msgstr "Passwort aktuell" msgid "Password new" msgstr "Passwort neu" msgid "Password new again" msgstr "Passwort neu nochmal" msgid "Please sign out and log back again with your new password!" msgstr "Bitte melden Sie sich hier ab und loggen sich mit Ihrem neuen Passwort erneut ein! " postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/cs_CZ/0000775000175000017500000000000013046702636022755 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/cs_CZ/LC_MESSAGES/0000775000175000017500000000000013046702636024542 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/cs_CZ/LC_MESSAGES/postfixadmin.mo0000664000175000017500000000631211334633761027606 0ustar daviddavidÞ•$<5\071io ŒšŸ¯Ê è ô8ÿ 8 C-N]|Ú âð :!=\š5¢?Ø>Zz’-®(Ü$ *K/k&›ÂÇâ ö  & &5 \ f E† Ì Ù +ã c s } ‹ › ¦ 1· Eé / "7 /Z Š A Ñ ê  ' B )^ (ˆ ±  #! $  "  *Additional forward-aliase always recieve messages BBC!AliasAlias successfully changend!Auto ResponseBodyChange PasswordChange your login passwordChange your mailbox password.Coming BackEdit AliasEdit an alias* for your domain.
One entry per line.ForwardingGoing AwayHere you can create and edit E-Mail forwards.I will be away from until . For urgent matters you can contact .OptionsOut of OfficePassword currentPassword newPassword new againPlease sign out and log back again with your new password!Set an OUT OF OFFICE message or auto responder for your mail.SubjectThe email address that you have entered is not valid:The passwords that you supplied don't match!
Or are empty!ToTo remove an alias, simply delete it's line from the text box.Unable to change your password!Unable to locate alias!Unable to modify the alias!You already have an auto response configured!You didn't supply your current password!Your auto response has been removed!Your auto response has been set!Your password has been changed!Project-Id-Version: PACKAGE VERSION POT-Creation-Date: 2004-01-29 17:35+0100 PO-Revision-Date: 2007-07-20 20:46+0100 Last-Translator: Michael Heca Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 8bit Dal¹í aliasy dostanou e-mail jako BBC!ÚèetPøesmìrování bylo zmìnìno!Automatická odpovìïTìlo mailuZmìnit hesloZmìnít heslo k Va¹emu e-mailovému úètuZmìnít heslo k Va¹emu e-mailovému úètuJsem zpìtEditace adresy pro pøesmìrováníEditace pøesmìrování pro Vá¹ úèet.
Ka¾dá adresa na novém øádku.PøesmìrováníJsem mimoZde mù¾ete vytvoøit a nastavit pøesmìrováníNebudy k zasti¾ení od do . Pro naléhané po¾adavky prosím kontaktujte .NastaveníMimo kanceláøStávající hesloNové hesloNové heslo znovuProsím odhla¹te se a pøihla¹te se s novým heslem!Zde mù¾ete nastavit automatickou odpovìd, pokud nebudete k zasti¾ení.PøedmìtZadaná e-mailová adresa je chybná:Zadaná hesla nejsou stejná a nebo jsou prázdná!KomuPro odstranení pøesmìrování sma¾te v¹echny øádky v textovém boxu.Není mo¾né zmìnit heslo!Neni mo¾né nalézt úèet!Není mo¾né zmìnit úèet!U¾ máte nastavenu automatickou odpovìï!Stávající heslo neodpovídá!Va¹e automatická odpovìï byla odstranìna!Va¹e automatická odpovìï byla nastavena!Va¹e heslo bylo zmìnìno!postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/cs_CZ/LC_MESSAGES/postfixadmin.po0000664000175000017500000000712111334633761027610 0ustar daviddavid# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2004-01-29 17:35+0100\n" "PO-Revision-Date: 2007-07-20 20:46+0100\n" "Last-Translator: Michael Heca \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: setup.php msgid "Forwarding" msgstr "Pøesmìrování" msgid "Here you can create and edit E-Mail forwards." msgstr "Zde mù¾ete vytvoøit a nastavit pøesmìrování" msgid "Set an OUT OF OFFICE message or auto responder for your mail." msgstr "Zde mù¾ete nastavit automatickou odpovìd, pokud nebudete k zasti¾ení." msgid "Change your mailbox password." msgstr "Zmìnít heslo k Va¹emu e-mailovému úètu" #: postfixadmin_changepass.php msgid "Alias" msgstr "Úèet" msgid "Change Password" msgstr "Zmìnit heslo" msgid "Change your login password" msgstr "Zmìnít heslo k Va¹emu e-mailovému úètu" #: postfixadmin_forward.php msgid "Edit Alias" msgstr "Editace adresy pro pøesmìrování" msgid "Edit an alias* for your domain.
One entry per line." msgstr "Editace pøesmìrování pro Vá¹ úèet.
Ka¾dá adresa na novém øádku." msgid "The email address that you have entered is not valid:" msgstr "Zadaná e-mailová adresa je chybná:" msgid "Unable to locate alias!" msgstr "Neni mo¾né nalézt úèet!" msgid "Unable to modify the alias!" msgstr "Není mo¾né zmìnit úèet!" msgid "*Additional forward-aliase always recieve messages BBC!" msgstr "Dal¹í aliasy dostanou e-mail jako BBC!" msgid "Alias successfully changend!" msgstr "Pøesmìrování bylo zmìnìno!" msgid "To remove an alias, simply delete it's line from the text box." msgstr "Pro odstranení pøesmìrování sma¾te v¹echny øádky v textovém boxu." #: postfixadmin_vacation.php msgid "Auto Response" msgstr "Automatická odpovìï" msgid "Going Away" msgstr "Jsem mimo" msgid "Coming Back" msgstr "Jsem zpìt" msgid "Options" msgstr "Nastavení" msgid "Out of Office" msgstr "Mimo kanceláø" msgid "Subject" msgstr "Pøedmìt" msgid "Body" msgstr "Tìlo mailu" msgid "Your auto response has been removed!" msgstr "Va¹e automatická odpovìï byla odstranìna!" msgid "Your auto response has been set!" msgstr "Va¹e automatická odpovìï byla nastavena!" msgid "You already have an auto response configured!" msgstr "U¾ máte nastavenu automatickou odpovìï!" #: postfixadmin_changepass.php:81 #: postfixadmin_changepass.php:87 msgid "The passwords that you supplied don't match!
Or are empty!" msgstr "Zadaná hesla nejsou stejná a nebo jsou prázdná!" #: postfixadmin_forward.php:70 #: postfixadmin_forward.php:152 msgid "To" msgstr "Komu" #: postfixadmin_changepass.php:101 msgid "Unable to change your password!" msgstr "Není mo¾né zmìnit heslo!" #: postfixadmin_changepass.php:75 msgid "You didn't supply your current password!" msgstr "Stávající heslo neodpovídá!" #: postfixadmin_changepass.php:96 msgid "Your password has been changed!" msgstr "Va¹e heslo bylo zmìnìno!" msgid "Password current" msgstr "Stávající heslo" msgid "Password new" msgstr "Nové heslo" msgid "Password new again" msgstr "Nové heslo znovu" msgid "Please sign out and log back again with your new password!" msgstr "Prosím odhla¹te se a pøihla¹te se s novým heslem!" msgid "I will be away from until . For urgent matters you can contact ." msgstr "Nebudy k zasti¾ení od do . Pro naléhané po¾adavky prosím kontaktujte ." postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/da_DK/0000775000175000017500000000000013046702636022716 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/da_DK/LC_MESSAGES/0000775000175000017500000000000013046702636024503 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/da_DK/LC_MESSAGES/postfixadmin.mo0000664000175000017500000000600011334633761027541 0ustar daviddavidÞ•#4/L7 AG drw‡¢ À Ì8×  -&]T² ºÈ Ùæ:ù=4r5z?°ðó+-G(u$ž Ãä9U[j s~‘$®Ó â>ð / = 3J b~ á ï ý  # /9 Ii ³ !¸ 0Ú   - E '` /ˆ ¸ Í ä  "   !# *Additional forward-aliase always recieve messages BBC!AliasAlias successfully changend!Auto ResponseBodyChange PasswordChange your login passwordChange your mailbox password.Coming BackEdit AliasEdit an alias* for your domain.
One entry per line.ForwardingGoing AwayHere you can create and edit E-Mail forwards.I will be away from until . For urgent matters you can contact .OptionsOut of OfficePassword currentPassword newPassword new againPlease sign out and log back again with your new password!Set an OUT OF OFFICE message or auto responder for your mail.SubjectThe email address that you have entered is not valid:The passwords that you supplied don't match!
Or are empty!ToUnable to change your password!Unable to locate alias!Unable to modify the alias!You already have an auto response configured!You didn't supply your current password!Your auto response has been removed!Your auto response has been set!Your password has been changed!Project-Id-Version: 0.4.3 POT-Creation-Date: 2004-01-29 17:35+0100 PO-Revision-Date: 2007-11-09 16:07+0100 Last-Translator: JESPER MEYER Language-Team: DANISH MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit *Eksta vidersendingsalias modtager altid meddelelser BCC!AliasAlias ændret!AutosvarMeddelelseÆndre adgangskodeÆndre din login-adgangskodeÆndre adgangskoden til din postboksKommer tilbageRediger aliasRediger et alias* for dit domæne.
En modtager pr. linje.VideresendingTager afstedHer kan du oprette og ændre email-videresendinger.Jeg er ikke tilstede i perioden til . I nødstilfælde kan kontaktes.IndstillingerIkke tilstedeNuværende adgangskodeNy adgangskodeNy adgangskode (igen)Log af og log ind igen med din nye adgangskode!Tilføj en 'ikke tilstede' besked eller et autosvar til din emailadresse.EmneEmailadressen du angav er ugyldigAdgangskoderne er ikke ens!
Eller er tomme!TilKan ikke ændre adgangskoden!Aliaset eksistere ikke!Kunne ikke ændre aliaset!Du har allerede et autosvar indstillet!Du glemte at skrive din nuværende adgangskode!Autosvar er fjernet!Autosvar er aktiveret!Din adgangskode er ændret!postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/da_DK/LC_MESSAGES/postfixadmin.po0000664000175000017500000000674211334633761027561 0ustar daviddavid# Danish translation for Squirrelmail Plugin Postfixadmin. # Copyright (C) 2004 Florian Kimmerl, 2007 David Goodwin # This file is distributed under the same license as the Squirrelmail Plugin Postfixadmin package. # Jesper R. Meyer , 2007. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: 0.4.3\n" "POT-Creation-Date: 2004-01-29 17:35+0100\n" "PO-Revision-Date: 2007-11-09 16:07+0100\n" "Last-Translator: JESPER MEYER \n" "Language-Team: DANISH \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: setup.php msgid "Forwarding" msgstr "Videresending" msgid "Here you can create and edit E-Mail forwards." msgstr "Her kan du oprette og ændre email-videresendinger." msgid "Set an OUT OF OFFICE message or auto responder for your mail." msgstr "Tilføj en 'ikke tilstede' besked eller et autosvar til din emailadresse." msgid "Change your mailbox password." msgstr "Ændre adgangskoden til din postboks" #: postfixadmin_changepass.php msgid "Alias" msgstr "Alias" msgid "Change Password" msgstr "Ændre adgangskode" msgid "Change your login password" msgstr "Ændre din login-adgangskode" #: postfixadmin_forward.php msgid "Edit Alias" msgstr "Rediger alias" msgid "Edit an alias* for your domain.
One entry per line." msgstr "Rediger et alias* for dit domæne.
En modtager pr. linje." msgid "The email address that you have entered is not valid:" msgstr "Emailadressen du angav er ugyldig" msgid "Unable to locate alias!" msgstr "Aliaset eksistere ikke!" msgid "Unable to modify the alias!" msgstr "Kunne ikke ændre aliaset!" msgid "*Additional forward-aliase always recieve messages BBC!" msgstr "*Eksta vidersendingsalias modtager altid meddelelser BCC!" msgid "Alias successfully changend!" msgstr "Alias ændret!" #: postfixadmin_vacation.php msgid "Auto Response" msgstr "Autosvar" msgid "Going Away" msgstr "Tager afsted" msgid "Coming Back" msgstr "Kommer tilbage" msgid "Options" msgstr "Indstillinger" msgid "Out of Office" msgstr "Ikke tilstede" msgid "Subject" msgstr "Emne" msgid "Body" msgstr "Meddelelse" msgid "Your auto response has been removed!" msgstr "Autosvar er fjernet!" msgid "Your auto response has been set!" msgstr "Autosvar er aktiveret!" msgid "You already have an auto response configured!" msgstr "Du har allerede et autosvar indstillet!" #: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87 msgid "The passwords that you supplied don't match!
Or are empty!" msgstr "Adgangskoderne er ikke ens!
Eller er tomme!" #: postfixadmin_forward.php:70 postfixadmin_forward.php:152 msgid "To" msgstr "Til" #: postfixadmin_changepass.php:101 msgid "Unable to change your password!" msgstr "Kan ikke ændre adgangskoden!" #: postfixadmin_changepass.php:75 msgid "You didn't supply your current password!" msgstr "Du glemte at skrive din nuværende adgangskode!" #: postfixadmin_changepass.php:96 msgid "Your password has been changed!" msgstr "Din adgangskode er ændret!" msgid "Password current" msgstr "Nuværende adgangskode" msgid "Password new" msgstr "Ny adgangskode" msgid "Password new again" msgstr "Ny adgangskode (igen)" msgid "Please sign out and log back again with your new password!" msgstr "Log af og log ind igen med din nye adgangskode!" msgid "I will be away from until . For urgent matters you can contact ." msgstr "Jeg er ikke tilstede i perioden til . I nødstilfælde kan kontaktes." postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/nl_NL/0000775000175000017500000000000013046702636022756 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/nl_NL/LC_MESSAGES/0000775000175000017500000000000013046702636024543 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/nl_NL/LC_MESSAGES/postfixadmin.mo0000664000175000017500000000647211334633761027616 0ustar daviddavidÞ•$<5\081jp ŒšŸ¯Ê è ô? B M-X]†ä ìú :+=f¤5¬?â"=%cƒ›-·(å$ 3T3t#¨ÌÒì   < 'S { @‹ Ì $× 'ü p$ • œ ª ¼ Í /ç , D )N Lx Å 3É (ý && $M .r %¡ *Ç +ò  !#$   "  *Additional forward-aliases always receive messages BBC!AliasAlias successfully changed!Auto ResponseBodyChange PasswordChange your login passwordChange your mailbox password.Coming BackEdit ForwardsEdit an alias* for your email address.
One entry per line.ForwardingGoing AwayHere you can create and edit E-Mail forwards.I will be away from until . For urgent matters you can contact .OptionsOut of OfficePassword currentPassword newPassword new againPlease sign out and log back again with your new password!Set an OUT OF OFFICE message or auto responder for your mail.SubjectThe email address that you have entered is not valid:The passwords that you supplied don't match!
Or are empty!ToTo remove an alias, simply delete its line from the text box.Unable to change your password!Unable to locate alias!Unable to modify the alias!You already have an auto response configured!You didn't supply your current password!Your auto response has been removed!Your auto response has been set!Your password has been changed!Project-Id-Version: postfixadmin-squirrelmail 2.1.0 POT-Creation-Date: 2007-11-16 17:35+0100 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: Johan Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 8bit Aliassen ontvangen altijd per BCC! AliasAlias succesvol aangepastAutomatisch beantwoordenTekstVerander wachtwoordVerander uw login wachtwoordVerander uw wachtwoordIk ben terug, schakel Out of Office UITBewerk aliassenBewerk uw alias(sen) voor uw emailadres.
1 alias per regel.DoorsturenIk ben weg, schakel Out of Office INHier kunt u uw doorstuur adres bewerkenIk ben niet aanwezig van tot . Voor dringende zaken kunt u contact opnemen met .OptiesOut of officeHuidig wachtwoordNieuw wachtwoordNieuw wachtwoord nogmaalsLog uit en opnieuw in met het nieuwe wachtwoordConfigureer hier uw automatisch beantwoordenOnderwerpHet ingevoerde adres is geen geldig adresDe wachtwoorden komen niet overeen!
Of er is geen wachtwoord opgegeven!AanVerwijder de regel om de alias(sen) te verwijderen.Niet in staat uw wachtwoord te wijzigen!Niet in staat opgeven alias te vinden!Niet in staat de alias aan te passenAutomatisch beantwoorden is al geconfigureerd!U moet uw huidige wachtwoord opgeven!Uw automatisch beantwoorden is verwijderd!Uw automatisch beantwoorden is geactiveerd!Uw wachtwoord is gewijzigd!postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/nl_NL/LC_MESSAGES/postfixadmin.po0000664000175000017500000000730411334633761027614 0ustar daviddavid# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: postfixadmin-squirrelmail 2.1.0\n" "POT-Creation-Date: 2007-11-16 17:35+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Johan \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: setup.php msgid "Forwarding" msgstr "Doorsturen" msgid "Here you can create and edit E-Mail forwards." msgstr "Hier kunt u uw doorstuur adres bewerken" msgid "Set an OUT OF OFFICE message or auto responder for your mail." msgstr "Configureer hier uw automatisch beantwoorden" msgid "Change your mailbox password." msgstr "Verander uw wachtwoord" #: postfixadmin_changepass.php msgid "Alias" msgstr "Alias" msgid "Change Password" msgstr "Verander wachtwoord" msgid "Change your login password" msgstr "Verander uw login wachtwoord" #: postfixadmin_forward.php msgid "Edit Forwards" msgstr "Bewerk aliassen" msgid "Edit an alias* for your email address.
One entry per line." msgstr "Bewerk uw alias(sen) voor uw emailadres.
1 alias per regel." msgid "The email address that you have entered is not valid:" msgstr "Het ingevoerde adres is geen geldig adres" msgid "Unable to locate alias!" msgstr "Niet in staat opgeven alias te vinden!" msgid "Unable to modify the alias!" msgstr "Niet in staat de alias aan te passen" msgid "*Additional forward-aliases always receive messages BBC!" msgstr "Aliassen ontvangen altijd per BCC! " msgid "To remove an alias, simply delete its line from the text box." msgstr "Verwijder de regel om de alias(sen) te verwijderen." msgid "Alias successfully changed!" msgstr "Alias succesvol aangepast" #: postfixadmin_vacation.php msgid "Auto Response" msgstr "Automatisch beantwoorden" msgid "Going Away" msgstr "Ik ben weg, schakel Out of Office IN" msgid "Coming Back" msgstr "Ik ben terug, schakel Out of Office UIT" msgid "Options" msgstr "Opties" msgid "Out of Office" msgstr "Out of office" msgid "Subject" msgstr "Onderwerp" msgid "Body" msgstr "Tekst" msgid "Your auto response has been removed!" msgstr "Uw automatisch beantwoorden is verwijderd!" msgid "Your auto response has been set!" msgstr "Uw automatisch beantwoorden is geactiveerd!" msgid "You already have an auto response configured!" msgstr "Automatisch beantwoorden is al geconfigureerd!" #: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87 msgid "The passwords that you supplied don't match!
Or are empty!" msgstr "De wachtwoorden komen niet overeen!
Of er is geen wachtwoord opgegeven!" #: postfixadmin_forward.php:70 postfixadmin_forward.php:152 msgid "To" msgstr "Aan" #: postfixadmin_changepass.php:101 msgid "Unable to change your password!" msgstr "Niet in staat uw wachtwoord te wijzigen!" #: postfixadmin_changepass.php:75 msgid "You didn't supply your current password!" msgstr "U moet uw huidige wachtwoord opgeven!" #: postfixadmin_changepass.php:96 msgid "Your password has been changed!" msgstr "Uw wachtwoord is gewijzigd!" msgid "Password current" msgstr "Huidig wachtwoord" msgid "Password new" msgstr "Nieuw wachtwoord" msgid "Password new again" msgstr "Nieuw wachtwoord nogmaals" msgid "Please sign out and log back again with your new password!" msgstr "Log uit en opnieuw in met het nieuwe wachtwoord" msgid "I will be away from until . For urgent matters you can contact ." msgstr "Ik ben niet aanwezig van tot . Voor dringende zaken kunt u contact opnemen met ." postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/pl_PL/0000775000175000017500000000000013046702636022762 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/pl_PL/LC_MESSAGES/0000775000175000017500000000000013046702636024547 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/pl_PL/LC_MESSAGES/postfixadmin.mo0000664000175000017500000000661711334633761027623 0ustar daviddavidÞ•$<5\071io ŒšŸ¯Ê è ô8ÿ 8 C-N]|Ú âð :!=\š5¢?Ø>Zz’-®(Ü$ *K+kš—2 8 J X ^ 'j '’ º Ï Eî 4 B >V q•   ) 4 %G Hm ¶ +¼ ,è  n ‡   ¿ &Þ  &# %J p  #! $  "  *Additional forward-aliase always recieve messages BBC!AliasAlias successfully changend!Auto ResponseBodyChange PasswordChange your login passwordChange your mailbox password.Coming BackEdit AliasEdit an alias* for your domain.
One entry per line.ForwardingGoing AwayHere you can create and edit E-Mail forwards.I will be away from until . For urgent matters you can contact .OptionsOut of OfficePassword currentPassword newPassword new againPlease sign out and log back again with your new password!Set an OUT OF OFFICE message or auto responder for your mail.SubjectThe email address that you have entered is not valid:The passwords that you supplied don't match!
Or are empty!ToTo remove an alias, simply delete it's line from the text box.Unable to change your password!Unable to locate alias!Unable to modify the alias!You already have an auto response configured!You didn't supply your current password!Your auto response has been removed!Your auto response has been set!Your password has been changed!Project-Id-Version: PACKAGE VERSION POT-Creation-Date: 2004-01-29 17:35+0100 PO-Revision-Date: 2007-07-20 20:46+0100 Last-Translator: Krzysztof Laska Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 8bit *Wszystkie dodatkowe adresy zawsze odbieraj± wiadomo¶ci przesy³ane jako BCC! Ca³a poczta jest przekazywana i nie jest przechowywana na koncie podstawowym!KontoZmiana zachowana!Autoodpowied¼Tre¶æZmieñ has³oZmieñ has³o do swojego konta pocztowegoZmieñ has³o do swojego konta pocztowegoWy³±cz autoodpowied¼Edytuj adresy do przekazywaniaEdytuj forward* dla swojego konta.
Ka¿dy adres w nowym wierszu.PrzekazywanieW³±cz autoodpowied¼Tutaj mo¿esz ustawiæ i edytowaæ opcje przekazywania wiadomo¶ciNie bêdê odbieraæ poczty pomiêdzy a . W sprawach pilnych proszê kontaktowaæ siê z OpcjeAutoodpowied¼Bie¿±ce has³oNowe has³oPowtórz nowe has³oWyloguj siê i zaloguj z nowym has³em!Ustaw wiadomo¶æ wysy³an± nadawcom podczas Twojej nieobecno¶ci (Vacation)TematAdres e-mail jaki poda³e¶ jest niepoprawny:Has³a które poda³e¶ nie pasuj± lub s± puste!Do¯eby wy³±czyæ forward na dane konto po prostu usuñ liniê z adresem na który nie chcesz ju¿ przekazywaæ poczty.Nie mo¿na zmieniæ has³a!Nie mo¿na zlokalizowaæ aliasu!Nie mo¿na zmodyfikowaæ aliasu!Masz ju¿ skonfigurowan± autoodpowied¼!Nie poda³e¶ aktualnego has³a!Twoja autoodpowied¼ zosta³a wy³±czona!Twoja autoodpowied¼ zosta³a w³±czona!Twoje has³o zosta³o zmienione!postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/pl_PL/LC_MESSAGES/postfixadmin.po0000664000175000017500000000742611334633761027625 0ustar daviddavid# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2004-01-29 17:35+0100\n" "PO-Revision-Date: 2007-07-20 20:46+0100\n" "Last-Translator: Krzysztof Laska \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: setup.php msgid "Forwarding" msgstr "Przekazywanie" msgid "Here you can create and edit E-Mail forwards." msgstr "Tutaj mo¿esz ustawiæ i edytowaæ opcje przekazywania wiadomo¶ci" msgid "Set an OUT OF OFFICE message or auto responder for your mail." msgstr "Ustaw wiadomo¶æ wysy³an± nadawcom podczas Twojej nieobecno¶ci (Vacation)" msgid "Change your mailbox password." msgstr "Zmieñ has³o do swojego konta pocztowego" #: postfixadmin_changepass.php msgid "Alias" msgstr "Konto" msgid "Change Password" msgstr "Zmieñ has³o" msgid "Change your login password" msgstr "Zmieñ has³o do swojego konta pocztowego" #: postfixadmin_forward.php msgid "Edit Alias" msgstr "Edytuj adresy do przekazywania" msgid "Edit an alias* for your domain.
One entry per line." msgstr "Edytuj forward* dla swojego konta.
Ka¿dy adres w nowym wierszu." msgid "The email address that you have entered is not valid:" msgstr "Adres e-mail jaki poda³e¶ jest niepoprawny:" msgid "Unable to locate alias!" msgstr "Nie mo¿na zlokalizowaæ aliasu!" msgid "Unable to modify the alias!" msgstr "Nie mo¿na zmodyfikowaæ aliasu!" msgid "*Additional forward-aliase always recieve messages BBC!" msgstr "*Wszystkie dodatkowe adresy zawsze odbieraj± wiadomo¶ci przesy³ane jako BCC! Ca³a poczta jest przekazywana i nie jest przechowywana na koncie podstawowym!" msgid "Alias successfully changend!" msgstr "Zmiana zachowana!" msgid "To remove an alias, simply delete it's line from the text box." msgstr "¯eby wy³±czyæ forward na dane konto po prostu usuñ liniê z adresem na który nie chcesz ju¿ przekazywaæ poczty." #: postfixadmin_vacation.php msgid "Auto Response" msgstr "Autoodpowied¼" msgid "Going Away" msgstr "W³±cz autoodpowied¼" msgid "Coming Back" msgstr "Wy³±cz autoodpowied¼" msgid "Options" msgstr "Opcje" msgid "Out of Office" msgstr "Autoodpowied¼" msgid "Subject" msgstr "Temat" msgid "Body" msgstr "Tre¶æ" msgid "Your auto response has been removed!" msgstr "Twoja autoodpowied¼ zosta³a wy³±czona!" msgid "Your auto response has been set!" msgstr "Twoja autoodpowied¼ zosta³a w³±czona!" msgid "You already have an auto response configured!" msgstr "Masz ju¿ skonfigurowan± autoodpowied¼!" #: postfixadmin_changepass.php:81 #: postfixadmin_changepass.php:87 msgid "The passwords that you supplied don't match!
Or are empty!" msgstr "Has³a które poda³e¶ nie pasuj± lub s± puste!" #: postfixadmin_forward.php:70 #: postfixadmin_forward.php:152 msgid "To" msgstr "Do" #: postfixadmin_changepass.php:101 msgid "Unable to change your password!" msgstr "Nie mo¿na zmieniæ has³a!" #: postfixadmin_changepass.php:75 msgid "You didn't supply your current password!" msgstr "Nie poda³e¶ aktualnego has³a!" #: postfixadmin_changepass.php:96 msgid "Your password has been changed!" msgstr "Twoje has³o zosta³o zmienione!" msgid "Password current" msgstr "Bie¿±ce has³o" msgid "Password new" msgstr "Nowe has³o" msgid "Password new again" msgstr "Powtórz nowe has³o" msgid "Please sign out and log back again with your new password!" msgstr "Wyloguj siê i zaloguj z nowym has³em!" msgid "I will be away from until . For urgent matters you can contact ." msgstr "Nie bêdê odbieraæ poczty pomiêdzy a . W sprawach pilnych proszê kontaktowaæ siê z " postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/pt_BR/0000775000175000017500000000000013046702636022762 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/pt_BR/LC_MESSAGES/0000775000175000017500000000000013046702636024547 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/pt_BR/LC_MESSAGES/postfixadmin.mo0000664000175000017500000000622111334633761027612 0ustar daviddavidÞ•",/<ø7ù1 N\aqŒ ª ¶8Á ú -]>œ ¤² ÃÐ:ã=\5d?šÚÝý-1(_$ˆ ­Î/î1P lz ƒ§ Ä ÎFÛ " - *4  _   / ; F =\ 4š Ï J× >" a &f  $ª ,Ï 1ü . N #m  !   " *Additional forward-aliase always recieve messages BBC!Alias successfully changend!Auto ResponseBodyChange PasswordChange your login passwordChange your mailbox password.Coming BackEdit AliasEdit an alias* for your domain.
One entry per line.ForwardingGoing AwayHere you can create and edit E-Mail forwards.I will be away from until . For urgent matters you can contact .OptionsOut of OfficePassword currentPassword newPassword new againPlease sign out and log back again with your new password!Set an OUT OF OFFICE message or auto responder for your mail.SubjectThe email address that you have entered is not valid:The passwords that you supplied don't match!
Or are empty!ToUnable to change your password!Unable to locate alias!Unable to modify the alias!You already have an auto response configured!You didn't supply your current password!Your auto response has been removed!Your auto response has been set!Your password has been changed!Project-Id-Version: PACKAGE VERSION POT-Creation-Date: 2004-01-29 17:35+0100 PO-Revision-Date: 2008-10-16 20:30+3 Last-Translator: Julio Covolato Language-Team: BRAZILIAN PORTUGUESE MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit *Alias adicionais sempre recebem mensagens em BCCAlias alterado com sucesso!Auto respostaMensagemMudar SenhaMude sua senha de loginTroque a senha de seu email.DesativarEditar AliasEditar um alias* para seu domínio.
Uma entrada por linha.EncaminharAtivarAqui Você pode criar e editar alias.Estarei fora do escritório entre os dias e do mês de .
Qualquer mensagem urgente, favor enviar para o email .OpçõesFora do escritóriosenha atualNova senhaConfirme a nova senhaPor favor, saia e entre novamente no webmail com a nova senhaConfigurar mensagem de férias para seu email.AssuntoEste endereço de email informado não é válido:A senha digitada não confere!
Ou está vaziaParaImpossível alterar a sua senha!Alias não encontrado!Impossível modificar o alias!Você ainda tem uma auto resposta ativaVocê não forneceu a sua senha atual!Sua auto resporta foi removida!Sua auto resposta foi ativada!Sua senha foi alterada com sucesso!postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/pt_BR/LC_MESSAGES/postfixadmin.po0000664000175000017500000000710711616351201027606 0ustar daviddavid# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2004-01-29 17:35+0100\n" "PO-Revision-Date: 2008-10-16 20:30+3\n" "Last-Translator: Julio Covolato \n" "Language-Team: BRAZILIAN PORTUGUESE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: setup.php msgid "Forwarding" msgstr "Encaminhar" msgid "Here you can create and edit E-Mail forwards." msgstr "Aqui Você pode criar e editar alias." msgid "Set an OUT OF OFFICE message or auto responder for your mail." msgstr "Configurar mensagem de férias para seu email." msgid "Change your mailbox password." msgstr "Troque a senha de seu email." #: postfixadmin_changepass.php msgid "Alias" msgstr "" msgid "Change Password" msgstr "Mudar Senha" msgid "Change your login password" msgstr "Mude sua senha de login" #: postfixadmin_forward.php msgid "Edit Alias" msgstr "Editar Alias" msgid "Edit an alias* for your domain.
One entry per line." msgstr "Editar um alias* para seu domínio.
Uma entrada por linha." msgid "The email address that you have entered is not valid:" msgstr "Este endereço de email informado não é válido:" msgid "Unable to locate alias!" msgstr "Alias não encontrado!" msgid "Unable to modify the alias!" msgstr "Impossível modificar o alias!" msgid "*Additional forward-aliase always recieve messages BBC!" msgstr "*Alias adicionais sempre recebem mensagens em BCC" msgid "Alias successfully changend!" msgstr "Alias alterado com sucesso!" #: postfixadmin_vacation.php msgid "Auto Response" msgstr "Auto resposta" msgid "Going Away" msgstr "Ativar" msgid "Coming Back" msgstr "Desativar" msgid "Options" msgstr "Opções" msgid "Out of Office" msgstr "Fora do escritório" msgid "Subject" msgstr "Assunto" msgid "Body" msgstr "Mensagem" msgid "Your auto response has been removed!" msgstr "Sua auto resporta foi removida!" msgid "Your auto response has been set!" msgstr "Sua auto resposta foi ativada!" msgid "You already have an auto response configured!" msgstr "Você ainda tem uma auto resposta ativa" #: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87 msgid "The passwords that you supplied don't match!
Or are empty!" msgstr "A senha digitada não confere!
Ou está vazia" #: postfixadmin_forward.php:70 postfixadmin_forward.php:152 msgid "To" msgstr "Para" #: postfixadmin_changepass.php:101 msgid "Unable to change your password!" msgstr "Impossível alterar a sua senha!" #: postfixadmin_changepass.php:75 msgid "You didn't supply your current password!" msgstr "Você não forneceu a sua senha atual!" #: postfixadmin_changepass.php:96 msgid "Your password has been changed!" msgstr "Sua senha foi alterada com sucesso!" msgid "Password current" msgstr "senha atual" msgid "Password new" msgstr "Nova senha" msgid "Password new again" msgstr "Confirme a nova senha" msgid "Please sign out and log back again with your new password!" msgstr "Por favor, saia e entre novamente no webmail com a nova senha" msgid "I will be away from until . For urgent matters you can contact ." msgstr "Estarei fora do escritório entre os dias e do mês de .
Qualquer mensagem urgente, favor enviar para o email ." postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/build.sh0000664000175000017500000000015511334633761023410 0ustar daviddavid#!/bin/bash for f in $(find . -name postfixadmin.po) do msgfmt -o $(dirname $f)/postfixadmin.mo $f done postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/hu_HU/0000775000175000017500000000000013046702636022764 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/hu_HU/LC_MESSAGES/0000775000175000017500000000000013046702636024551 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/hu_HU/LC_MESSAGES/postfixadmin.mo0000664000175000017500000000730111372013367027610 0ustar daviddavidÞ•&L5|PRQ¤ªÆ àîó < H S•` ö - ]:˜° ¸Æ ×ä:÷=2p5x?®>î-Me-(¯$Ø ý'>df Ë Ò ç ý   %2 8X ‘ ž » †Ø _ o > XÀ  0 7 B R \ 8q Qª ü ! =$ Ub $¸ Ý ô # !0#R&v#  !%#"& $  A copy of each message will go to both your mailbox and the forwarded address(es).AliasAlias successfully changed!Another copy also goes toAuto ResponseBodyChange PasswordChange your login passwordChange your mailbox password.Coming BackEdit AliasEdit ForwardEnter an email address (or addresses) where you would like an additional copy of messages addressed to you sent.
Enter only one address per line.ForwardingGoing AwayHere you can create and edit E-Mail forwards.I will be away from until . For urgent matters you can contact .One copy always goes toOptionsOut of OfficePassword currentPassword newPassword new againPlease sign out and log back again with your new password!Set an OUT OF OFFICE message or auto responder for your mail.SubjectThe email address that you have entered is not valid:The passwords that you supplied don't match!
Or are empty!To remove a Forward, simply delete its line from the text box.Unable to change your password!Unable to locate alias!Unable to modify the alias!You already have an auto response configured!You didn't supply your current password!Your auto response has been removed!Your auto response has been set!Your password has been changed!Project-Id-Version: 0.3-1.4 POT-Creation-Date: 2004-01-28 16:32+0100 PO-Revision-Date: 2004-01-28 16:32+0100 Last-Translator: FLORIAN KIMMERL Language-Team: HUNGARIAN MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit Minden Önnek címzett levél meg fog érkezni a saját postafiókjába és a továbbított e-mail címekre is.E-mailA módosítás sikeres!További másolatok ideAutomatikus válaszLevéltörzsJelszó megváltoztatásaBejelentkezési jelszó megváltoztatásaItt tudod megváltoztatni a belépéshez szükséges jelszót.VisszajöttemLevéltovábbítás szerkesztéseLevéltovábbítás szerkesztéseSorolja fel azokat az e-mail címeket, amelyekre az Önhöz érkezõ leveleket továbbítani szeretné.
Soronként csak egy címet adjon meg!LevéltovábbításHázonkívül vagyokItt tudod létrehozni és szerkeszteni az E-mail továbbításokat.Házonkívül leszek és között. Sürgõs esetben értesítendõ: .Egy másolat mindig ideOpciókHázonkívülAktuális jelszóÚj jelszóÚj jelszó mégegyszerKérjük, jelentkezzen ki, majd újra be az új jelszavával!Itt lehet beállítani az automatikus válasz levél szövegét, ha az ember távol van.TárgyAz E-mail cím amit beírtál hibás:A jelszavak nem egyeznek!
Vagy üresen hagytad a mezõket!Ahhoz, hogy töröljön egy továbbítást, ki kell törölnie az adott sort a felsorolásból.A jelszó megváltoztatása sikertelen!Hiba az e-mail címmel.A módosítás sikertelen!Már létezik egy automatikus válasz!Az aktuális jelszó nem megfelelõ!Az automatikus válasz törölve lett!Az automatikus válasz be lett állítva!A jelszó változtatása sikeres volt!postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/hu_HU/LC_MESSAGES/postfixadmin.po0000664000175000017500000001003311616351201027600 0ustar daviddavid# postfixadmin - Plugin for Squirrelmail. # Copyright (C) 2004 FLORIAN KIMMERL # This file is distributed under the same license as the PACKAGE package. # Florian Kimmerl , 2004. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: 0.3-1.4\n" "POT-Creation-Date: 2004-01-28 16:32+0100\n" "PO-Revision-Date: 2004-01-28 16:32+0100\n" "Last-Translator: FLORIAN KIMMERL \n" "Language-Team: HUNGARIAN \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: setup.php msgid "Forwarding" msgstr "Levéltovábbítás" msgid "Here you can create and edit E-Mail forwards." msgstr "Itt tudod létrehozni és szerkeszteni az E-mail továbbításokat." msgid "Set an OUT OF OFFICE message or auto responder for your mail." msgstr "Itt lehet beállítani az automatikus válasz levél szövegét, ha az ember távol van." msgid "Change your mailbox password." msgstr "Itt tudod megváltoztatni a belépéshez szükséges jelszót." #: postfixadmin_changepass.php msgid "Alias" msgstr "E-mail" msgid "Change Password" msgstr "Jelszó megváltoztatása" msgid "Change your login password" msgstr "Bejelentkezési jelszó megváltoztatása" #: postfixadmin_forward.php msgid "Edit Forward" msgstr "Levéltovábbítás szerkesztése" msgid "Edit Alias" msgstr "Levéltovábbítás szerkesztése" msgid "The email address that you have entered is not valid:" msgstr "Az E-mail cím amit beírtál hibás:" msgid "Unable to locate alias!" msgstr "Hiba az e-mail címmel." msgid "Unable to modify the alias!" msgstr "A módosítás sikertelen!" msgid "Alias successfully changed!" msgstr "A módosítás sikeres!" #: postfixadmin_vacation.php msgid "Auto Response" msgstr "Automatikus válasz" msgid "Going Away" msgstr "Házonkívül vagyok" msgid "Coming Back" msgstr "Visszajöttem" msgid "Options" msgstr "Opciók" msgid "Out of Office" msgstr "Házonkívül" msgid "Subject" msgstr "Tárgy" msgid "Body" msgstr "Levéltörzs" msgid "Your auto response has been removed!" msgstr "Az automatikus válasz törölve lett!" msgid "Your auto response has been set!" msgstr "Az automatikus válasz be lett állítva!" msgid "You already have an auto response configured!" msgstr "Már létezik egy automatikus válasz!" #: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87 msgid "The passwords that you supplied don't match!
Or are empty!" msgstr "A jelszavak nem egyeznek!
Vagy üresen hagytad a mezõket!" #: postfixadmin_changepass.php:101 msgid "Unable to change your password!" msgstr "A jelszó megváltoztatása sikertelen!" #: postfixadmin_changepass.php:75 msgid "You didn't supply your current password!" msgstr "Az aktuális jelszó nem megfelelõ!" #: postfixadmin_changepass.php:96 msgid "Your password has been changed!" msgstr "A jelszó változtatása sikeres volt!" msgid "Password current" msgstr "Aktuális jelszó" msgid "Password new" msgstr "Új jelszó" msgid "Password new again" msgstr "Új jelszó mégegyszer" msgid "Please sign out and log back again with your new password!" msgstr "Kérjük, jelentkezzen ki, majd újra be az új jelszavával!" msgid "I will be away from until . For urgent matters you can contact ." msgstr "Házonkívül leszek és között. Sürgõs esetben értesítendõ: ." msgid "One copy always goes to" msgstr "Egy másolat mindig ide" msgid "Another copy also goes to" msgstr "További másolatok ide" msgid "Enter an email address (or addresses) where you would like an additional copy of messages addressed to you sent.
Enter only one address per line." msgstr "Sorolja fel azokat az e-mail címeket, amelyekre az Önhöz érkezõ leveleket továbbítani szeretné.
Soronként csak egy címet adjon meg!" msgid "A copy of each message will go to both your mailbox and the forwarded address(es)." msgstr "Minden Önnek címzett levél meg fog érkezni a saját postafiókjába és a továbbított e-mail címekre is." msgid "To remove a Forward, simply delete its line from the text box." msgstr "Ahhoz, hogy töröljön egy továbbítást, ki kell törölnie az adott sort a felsorolásból." postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/it_IT/0000775000175000017500000000000013046702636022764 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/it_IT/LC_MESSAGES/0000775000175000017500000000000013046702636024551 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/locale/it_IT/LC_MESSAGES/postfixadmin.po0000664000175000017500000000740411340776322027621 0ustar daviddavid# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2004-01-29 17:35+0100\n" "PO-Revision-Date: 2010-02-19 11:30+0100\n" "Last-Translator: valentina \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: setup.php msgid "Forwarding" msgstr "Inoltro E-MAIL" msgid "Here you can create and edit E-Mail forwards." msgstr "Qui puoi creare e modificare l'inoltro dell' E-MAIL." msgid "Set an OUT OF OFFICE message or auto responder for your mail." msgstr "Imposta un messaggio OUT OF OFFICE / ASSENTE o un risponditore automatico per la tua mail." msgid "Change your mailbox password." msgstr "Modifica la tua password di accesso alla mail" #: postfixadmin_changepass.php msgid "Alias" msgstr "Alias" msgid "Change Password" msgstr "Modifica password" msgid "Change your login password" msgstr "Modifica la tua password di accesso" #: postfixadmin_forward.php msgid "Edit Alias" msgstr "Modifica Alias" msgid "Edit an alias* for your domain.
One entry per line." msgstr "Modifica un Alias per il tuo dominio.
Un record per linea." msgid "The email address that you have entered is not valid:" msgstr "L'indirizzo email che hai inserito non è corretto:" msgid "Unable to locate alias!" msgstr "Impossibile trovare l'alias!" msgid "Unable to modify the alias!" msgstr "Impossibile modificare l'alias!" msgid "*Additional forward-aliase always recieve messages BBC!" msgstr "* L'inoltro ad un alias aggiuntivo comporta l'invio del messaggio in BCC!" msgid "Alias successfully changend!" msgstr "Alias modificato correttamente!" #: postfixadmin_vacation.php msgid "Auto Response" msgstr "Risponditore automatico" msgid "Going Away" msgstr "Going Away" msgid "Coming Back" msgstr "Coming Back" msgid "Options" msgstr "Opzioni" msgid "Out of Office" msgstr "Out of Office/Assente" msgid "Subject" msgstr "Oggetto" msgid "Body" msgstr "Messaggio" msgid "Your auto response has been removed!" msgstr "Il risponditore automatico è stato disattivato!" msgid "Your auto response has been set!" msgstr "Il risponditore automatico è stato configurato!" msgid "You already have an auto response configured!" msgstr "Hai gia configurato il risponditore automatico !" #: postfixadmin_changepass.php:81 #: postfixadmin_changepass.php:87 msgid "The passwords that you supplied don't match!
Or are empty!" msgstr "Le password inserite non coincidono!
O i campi sono vuoti!" #: postfixadmin_forward.php:70 #: postfixadmin_forward.php:152 msgid "To" msgstr "A" #: postfixadmin_changepass.php:101 msgid "Unable to change your password!" msgstr "Impossibile modificare la password" #: postfixadmin_changepass.php:75 msgid "You didn't supply your current password!" msgstr "Non hai indicato la password attuale!" #: postfixadmin_changepass.php:96 msgid "Your password has been changed!" msgstr "La tua password è stata modificata!" msgid "Password current" msgstr "Password attuale" msgid "Password new" msgstr "Nuova password" msgid "Password new again" msgstr "Insierisci nuovamente la nuova password" msgid "Please sign out and log back again with your new password!" msgstr "Per favore fai log out e riaccedi alla tua mail con la nuova password!" msgid "I will be away from until . For urgent matters you can contact ." msgstr "Mi dispiace sarò assente dal al . Per richieste urgenti vi prego di contattare . I will be away from until . For urgent matters you can contact ." postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/postfixadmin_forward.php0000664000175000017500000001131612301116073025444 0ustar daviddavidgetProxy('alias'); do_header(); // Normal page request (GET) if ($_SERVER['REQUEST_METHOD'] == "GET") { $row = $alias->get(); if($row === false) { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); $tMessage = _("Unable to locate alias!"); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); exit(0); } } if ($_SERVER['REQUEST_METHOD'] == "POST") { $pEdit_alias_goto = _("To"); $fGoto = $_POST['fGoto']; // reform string into a list... $goto = preg_replace ('/\r\n/', ',', $fGoto); $goto = preg_replace ('/[\s]+/i', '', $goto); $goto = preg_replace ('/\,*$/', '', $goto); $array = preg_split ('/,/', $goto); $error = 0; // check that we have valid addresses in the list foreach($array as $key => $email_address) { if (empty($email_address)) { unset($array[$key]); continue; } if (!check_email($email_address)) { $error = 1; $tGoto = $goto; bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); $tMessage = _("The email address that you have entered is not valid:") . " $email_address"; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } } if ($error != 1) { $flag = 'forward_and_store'; // goto = $USERID_USERNAME; $success = $alias->update($array, $flag); if(!$success) { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); $tMessage = _("Unable to modify the alias!"); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } else { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); echo "

". _("Alias successfully changed!"). "\n

"; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); echo "

". _("Click here to go back") ."

"; exit; } } } bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); if(!isset($tMessage)) { $tMessage = ''; } echo "
". _("Options") ." - ". _("Edit Alias"). "
". _("Edit an alias* for your email address.
One entry per line."). "
". _("*Additional forward-aliases always receive messages BCC!"). "\n
" . _("To remove an alias, simply delete its line from the text box.") . "
". _("Edit Forwards"). "
$tMessage
". _("Alias"). ":\n " . $_SESSION['username'] . "
   
". _("To"). ":\n
   
 
"; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); ?> postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/postfixadmin_vacation.php0000664000175000017500000001437211334633761025626 0ustar daviddavidgetProxy('vacation'); $VACCONFTXT = _("I will be away from until . For urgent matters you can contact ."); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); $VACCONF = <<getDetails(); if($vacation->checkVacation()) { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); $tMessage = _("You already have an auto response configured!"); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); echo "
". _("Options") ." - ". _("Auto Response") ."

". _("Auto Response") ."\n
$tMessage

 

"; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } else { $tSubject = "Out of Office"; $tSubject = $details['subject']; $VACCONF = $details['body']; $tMessage = ''; bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); echo "
". _("Options") ." - ". _("Auto Response") ."

" . _("Auto Response") ."\n
$tMessage
". _("Subject") .":\n      
". _("Body") .":\n     
     
 

"; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } } if ($_SERVER['REQUEST_METHOD'] == "POST") { $fBack = null; $fAway = null; foreach(array('fBack', 'fAway', 'fSubject', 'fBody') as $key) { $$key = null; if(isset($_POST[$key])) { $$key = $_POST[$key]; } } if (!empty($fBack)) { $success = $vacation->remove(); if(!$success) { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); $tMessage = _("Unable to update your auto response settings!"); echo "

This may signify an error; please contact support (1)

"; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } else { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); echo "

". _("Your auto response has been removed!") ."

"; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } } if (!empty ($fAway)) { // add record into vacation $success = $vacation->setAway($fSubject, $fBody); if(!$success) { $error = 1; bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); $tMessage = _("Unable to update your auto response settings!"); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } else { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); echo "

". _("Your auto response has been set!") ."

"; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } } } ?> postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/LICENSE.txt0000664000175000017500000000304511334633761022342 0ustar daviddavid 2007/03/29 : Before I (David Goodwin) customised this plugin, it contained the following within all files as a header. /**************************************************************************************** Author ......... Florian Kimmerl Contact ........ info@spacekoeln.de Home Site ...... http://www.spacekoeln.de/ Program ........ postfixadmin Purpose ........ Allows you to change your postfixadmin settings within squirrelmail ************************************************************************************* The Original Code is Postfix Admin. The Initial Developer of the Original Code is Mischa Peters . Portions created by Mischa Peters are Copyright (c) 2002, 2003, 2004. All Rights Reserved. Contributor(s): This project includes work by Mischa Peters and others that is: Copyright (c) 2002,2003,2004 Mischa Peters All rights reserved. ****************************************************************************************/ Contacting the author provided no success, so I took over maintainership. Please note: 1) Changes made by myself (David Goodwin) will be licensed under the GPL 2) PostfixAdmin has itself been relicensed under the GPL; however this took place _after_ this plugin was written. 3) Squirrelmail itself is released under http://squirrelmail.org/wiki/SquirrelMailGPL (GPL) The GNU public license can be found online at : http://www.gnu.org/licenses/gpl.txt postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/0000775000175000017500000000000013046702636021737 5ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/control0000664000175000017500000000132211334633761023340 0ustar daviddavidSource: squirrelmail-postfixadmin Section: mail Priority: optional Maintainer: David Goodwin Standards-Version: 3.6.1 Package: squirrelmail-postfixadmin Architecture: all Depends: squirrelmail, php-pear Suggests: postfixadmin Description: Plugin for Squirrelmail to integrate with Postfixadmin Postfixadmin is a web based interface for managing mail domains and users. This package integrates Squirrelmail with it. Users can change their password, forwarding and vacation settings from within Squirrelmail when this package is installed, and enabled through the ./squirrelmail-configure command. . For further information see http://squirrelmail-postfixadmin.palepurple.co.uk postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/files0000664000175000017500000000006611334633761022766 0ustar daviddavidsquirrelmail-postfixadmin_2.2.0_all.deb mail optional postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/postinst0000664000175000017500000000042611334633761023547 0ustar daviddavid#!/bin/sh echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" echo "WARNING: You need to read /usr/share/doc/squirrelmail-postfixadmin/README.Debian!" echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/changelog0000664000175000017500000000160711334633761023615 0ustar daviddavidsquirrelmail-postfixadmin (2.3.0) stable; urgency=low * Using XMLRPC backend (no SQL here) -- David Goodwin Mon, 01 Feb 2010 09:56:00 +0000 squirrelmail-postfixadmin (2.2.0) stable; urgency=low * Changed DB backend to use prepared statements * Changed vacation handling to match that of Postfixadmin (vacation.active etc) * Changed vacation page to support UTF8 -- David Goodwin Wed, 20 Aug 2008 15:25:00 +0000 squirrelmail-postfixadmin (2.1.1-1) stable; urgency=low * Add NL language support * Better db error logging (e.g. if wrong mdb2 driver specified etc) -- David Goodwin Wed, 12 Dec 2007 16:00:00 +0000 squirrelmail-postfixadmin (2.1.0-1) stable; urgency=low * Initial release. -- David Goodwin Thu, 8 Nov 2007 20:00:00 +0000 postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/conffiles0000664000175000017500000000006211334633761023630 0ustar daviddavid/etc/squirrelmail/plugins/postfixadmin-config.php postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/copyright0000664000175000017500000000042411334633761023672 0ustar daviddavidThis package was debianized by David Goodwin 2007/11/08 It was downloaded from: http://squirremail-postfixadmin.palepurple.co.uk Upstream Author(s): n/a Copyright: Copyright (C) 2007+ by David Goodwin License: GPL v2+ postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/docs0000775000175000017500000000006011334633761022611 0ustar daviddavidLICENSE.txt README INSTALL debian/README.Debian postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/rules0000775000175000017500000000262311334633761023022 0ustar daviddavid#!/usr/bin/make -f # debian/rules makefile for squirrelmail # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 build: build-stamp build-stamp: dh_testdir clean: dh_testdir dh_testroot dh_clean install: build $(checkdir) dh_testdir dh_testroot dh_clean -k dh_installdirs dh_install mkdir -p debian/tmp/usr/share/squirrelmail/plugins/postfixadmin cp -a *.php version debian/tmp/usr/share/squirrelmail/plugins/postfixadmin cp -a locale debian/tmp/usr/share/squirrelmail/plugins/postfixadmin cp -a po debian/tmp/usr/share/squirrelmail/plugins/postfixadmin mkdir -p debian/tmp/etc/squirrelmail/plugins/ cp -a *.sample debian/tmp/etc/squirrelmail/plugins/postfixadmin-config.php mkdir -p debian/tmp/DEBIAN cp debian/postinst debian/tmp/DEBIAN/postinst chmod 555 debian/tmp/DEBIAN/postinst ln -s /etc/squirrelmail/plugins/postfixadmin-config.php debian/tmp/usr/share/squirrelmail/plugins/postfixadmin/config.php find debian/tmp -name .svn | xargs -r rm -r # Build architecture-independent files here. binary-indep: build install dh_testdir dh_testroot dh_installdebconf dh_installdocs -X.svn dh_installexamples dh_installman dh_installcron dh_link dh_compress dh_fixperms -X/var dh_installdeb dh_gencontrol dh_md5sums dh_builddeb # Build architecture-dependent files here. binary-arch: binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/postfixadmin-squirrelmail.dirs0000664000175000017500000000015511334633761030037 0ustar daviddavidusr/share/squirrelmail/plugins/postfixadmin usr/share/doc/squirrelmail-postfixadmin etc/squirrelmail/plugins postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/debian/README.Debian0000664000175000017500000000103011334633761023772 0ustar daviddavidSquirrelmail PostfixAdmin Plugin for Debian =========================================== After installing the package, you will need to : 1) Edit the config.inc.php file to point to the PostfixAdmin server. 2) Ensure the xmlrpc interface is available and enabled on the Postfixadmin server 3) Run the squirrelmail-configure script. Where to get help ================= See http://squirrelmail-postfixadmin.palepurple.co.uk Try also : david [at] pale purple dot co dot uk Or #postfixadmin on irc.freenode.net might be a good bet. postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/version0000664000175000017500000000002311334633761022120 0ustar daviddavidpostfixadmin 2.3.0 postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/INSTALL0000664000175000017500000000413012421276552021543 0ustar daviddavidInstalling the postfixadmin Plugin ====================================== Requirements: ============= - PHP 5.[234].* with php5-xmlrpc installed (if available; it should be available by default anyway) - http access to a local/remote postfixadmin interface - Zend Framework (1.12.x) - needs adding to the include path within common.php, or installing in a system include path directory (e.g. /usr/share/php) (e.g. from within the directory containing this file ... wget https://packages.zendframework.com/releases/ZendFramework-1.12.3/ZendFramework-1.12.3-minimal.tar.gz tar -zxf ZendFramework-1.12.3-minimal.tar.gz mv ZendFramework-1.12.3-minimal/library/Zend . ) NOTE: This plugin is _not compatible_ with Zend Framework version 2.x. Installation : ============== - Copy this code into the Squirrelmail plugins directory - your life will be easiest if it's in a directory called 'postfixadmin' - Install Zend Framework (see above under Requirements for example) - Edit config.php and specify the remote URL for the Postfixadmin XmlRpc service. - Edit common.php and (if you need to) change the include path(s) so they are correct. - Edit the remote Postfixadmin's XmlRpc service config file and ensure 'xmlrpc_enabled' is set to boolean true. - Enable the plugin through 'squirrelmail-configure' or 'config/conf.pl'. Choose option 8 and move the plugin from the "Available Plugins" category to the "Installed Plugins" category. Save and exit. Security : ========== - The XmlRpc client needs to get the user's mailbox password before it will be able to connect to the XmlRpc server (postfixadmin). The plugin prompts the user for their mailbox password, and caches it in their session ($_SESSION['password']). This password is then sent once on every page load to the remote XmlRpc server. - You should consider doing any of the following : - Using https if the server and client are on seperate servers. This will probably require a signed certificate etc, and may require changes to the Zend_XmlRpc_Client's HttpClient. - Using something like stunnel to encrypt traffic between server(s). postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/functions.inc.php0000664000175000017500000000553212301115445024000 0ustar daviddavid"; } function _display_password_form() { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); do_header('Postfixadmin Squirrelmail - Login'); echo _('The PostfixAdmin plugin needs your current mailbox password'); echo "
"; echo _('Password for'); echo " " . $_SESSION['username'] . " :"; echo ""; echo "
"; do_footer(); } /** * This returns a Zend_XmlRpc_Client instance - unless we can't log you in... */ function get_xmlrpc() { global $CONF; require_once('Zend/XmlRpc/Client.php'); $client = new Zend_XmlRpc_Client($CONF['xmlrpc_url']); $http_client = $client->getHttpClient(); $http_client->setCookieJar(); $login_object = $client->getProxy('login'); if(empty($_SESSION['password'])) { if(empty($_POST['password'])) { _display_password_form(); exit(0); } else { try { $success = $login_object->login($_SESSION['username'], $_POST['password']); } catch(Exception $e) { //var_dump($client->getHttpClient()->getLastResponse()->getBody()); error_log("Failed to login to xmlrpc instance - " . $e->getMessage()); die('Failed to login to xmlrpc instance'); } if($success) { $_SESSION['password'] = $_POST['password']; // reload the current page as a GET request. header("Location: {$_SERVER['REQUEST_URI']}"); exit(0); } else { _display_password_form(); exit(0); } } } else { $success = $login_object->login($_SESSION['username'], $_SESSION['password']); } if(!$success) { unset($_SESSION['password']); die("Invalid details cached... refresh this page and re-enter your mailbox password"); } return $client; } function include_if_exists($filename) { if(file_exists($filename)) { include_once($filename); } return; } global $optmode; $optmode = 'display'; // // check_email // Action: Checks if email is valid and returns TRUE if this is the case. // Call: check_email (string email) // function check_email($email) { $return = filter_var($email, FILTER_VALIDATE_EMAIL); if($return === false) { return false; } return true; } postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/setup.php0000664000175000017500000000377612301115404022363 0ustar daviddavid _("Forwarding"), 'url' => '../plugins/postfixadmin/postfixadmin_forward.php', 'desc' => _("Here you can create and edit E-Mail forwards."), 'js' => FALSE ); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); if($AllowVacation) { $optpage_blocks[] = array( 'name' => _("Auto Response"), 'url' => '../plugins/postfixadmin/postfixadmin_vacation.php', 'desc' => _("Set an OUT OF OFFICE message or auto responder for your mail."), 'js' => false ); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); if($AllowChangePass) { $optpage_blocks[] = array( 'name' => _("Change Password"), 'url' => '../plugins/postfixadmin/postfixadmin_changepass.php', 'desc' => _("Change your mailbox password."), 'js' => false ); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } } ?> postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/postfixadmin_changepass.php0000664000175000017500000001135011334633761026127 0ustar daviddavidgetProxy('user'); global $username; do_header(); $USERID_USERNAME = $username; $tmp = preg_split ('/@/', $USERID_USERNAME); $USERID_DOMAIN = $tmp[1]; $stMessage = ''; $tMessage = ''; $pPassword_admin_text = ''; $pPassword_password_current_text = ''; $pPassword_password_text = ''; $error = 0; if ($_SERVER['REQUEST_METHOD'] == "POST") { //$pPassword_password_text = _("pPassword_password_text"); $fPassword_current = $_POST['fPassword_current']; $fPassword = $_POST['fPassword']; $fPassword2 = $_POST['fPassword2']; $username = $USERID_USERNAME; if(!$user->login($_SESSION['username'], $_POST['fPassword_current'])) { $error = 1; bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); $pPassword_password_current_text = _("You didn't supply your current password!"); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } $min_length = 0; if(isset($CONF['min_password_length'])) { $min_length = $CONF['min_password_length']; } if (empty ($fPassword) or ($fPassword != $fPassword2) or ($min_length > 0 && strlen($fPassword) < $min_length)) { $error = 1; bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); if(empty($fPassword)) { $pPassword_password_text .= _("The passwords that you supplied are empty!"); } if($fPassword != $fPassword2) { $pPassword_password_text .= _("The passwords that you supplied don't match!"); } if($min_length > 0 && strlen($fPassword) < $min_length) { $pPassword_password_text .= _("The password you supplied is too short!"); } bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } if ($error != 1) { $success = $user->changePassword($fPassword_current, $fPassword); if ($success) { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); $tMessage = _("Your password has been changed!"); $stMessage = _("Please sign out and log back again with your new password!"); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } else { bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); $tMessage = _("Unable to change your password!"); bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); } } } bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale'); textdomain('postfixadmin'); echo "
". _("Options") ." - ". _("Change Password")."

" ._("Change your login password") ."\n
$tMessage
$stMessage ".$pPassword_admin_text."\n ".$pPassword_password_current_text."\n ".$pPassword_password_text."\n
". _("Alias") . ":\n {$_SESSION['username']}
". _("Password current"). ":\n
". _("Password new"). ":\n
". _("Password new again"). ":\n
   
 

"; bindtextdomain('squirrelmail', SM_PATH . 'locale'); textdomain('squirrelmail'); ?> postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/config.php.sample0000664000175000017500000000123611334633761023755 0ustar daviddavid Author: Sam Brookes - Initial conversion to MDB2 - Fix SQL Injections etc Author: David Goodwin - Subsequent tidyup + testing etc Author: Krzysztof 'Mad Max' Laska - - Polish Translation. The Initial Developer of the Original postfixadmin Code is Mischa Peters. Portions created by Mischa Peters are Copyright (c) 2002, 2003, 2004. All Rights Reserved. REQUIREMENTS o SquirrelMail 1.4x o A working Mail-System "Virtual Domains and Users with postfix+Courier-IMAP+MySQL" (or PostgreSQL) See http://high5.net/howto/ o POSTFIXADMIN version 2.2.0 or higher. See http://sf.net/projects/postfixadmin o This plugin only uses the postfixadmin database o Pear MDB2 database abstraction layer - see http://pear.php.net o PHP installation with register globals TURNED OFF (huraren on IRC reports that the MDB2 driver isn't happy with it turned on) INSTALLATION See the included file INSTALL BUGS o Probably vulnerable to cross site scripting, certainly when setting the vacation message. o There may be some remaining SQL injection holes. TODO -Code Cleanup -Tranlation TRANSLATIONS Translations are welcome! Send the *.po-File to: david@NO.codepoets.SPAM.co.uk ACKNOWLEDGMENTS Thanks to the SquirrelMail team for building such a great app and for all the work they do to keep it running. Thanks to high5.net for writing the great Postfixadmin tool postfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/index.php0000664000175000017500000000151211334633761022334 0ustar daviddavidpostfixadmin-3.0.2/ADDITIONS/squirrelmail-plugin/common.php0000664000175000017500000000242512301115507022505 0ustar daviddavid, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2004-01-29 17:35+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: setup.php msgid "Forwarding" msgstr "" msgid "Here you can create and edit E-Mail forwards." msgstr "" msgid "Set an OUT OF OFFICE message or auto responder for your mail." msgstr "" msgid "Change your mailbox password." msgstr "" #: postfixadmin_changepass.php msgid "Alias" msgstr "" msgid "Change Password" msgstr "" msgid "Change your login password" msgstr "" #: postfixadmin_forward.php msgid "Edit Alias" msgstr "" msgid "Edit an alias* for your domain.
One entry per line." msgstr "" msgid "The email address that you have entered is not valid:" msgstr "" msgid "Unable to locate alias!" msgstr "" msgid "Unable to modify the alias!" msgstr "" msgid "*Additional forward-aliase always recieve messages BBC!" msgstr "" msgid "Alias successfully changend!" msgstr "" #: postfixadmin_vacation.php msgid "Auto Response" msgstr "" msgid "Going Away" msgstr "" msgid "Coming Back" msgstr "" msgid "Options" msgstr "" msgid "Out of Office" msgstr "" msgid "Subject" msgstr "" msgid "Body" msgstr "" msgid "Your auto response has been removed!" msgstr "" msgid "Your auto response has been set!" msgstr "" msgid "You already have an auto response configured!" msgstr "" #: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87 msgid "The passwords that you supplied don't match!
Or are empty!" msgstr "" #: postfixadmin_forward.php:70 postfixadmin_forward.php:152 msgid "To" msgstr "" #: postfixadmin_changepass.php:101 msgid "Unable to change your password!" msgstr "" #: postfixadmin_changepass.php:75 msgid "You didn't supply your current password!" msgstr "" #: postfixadmin_changepass.php:96 msgid "Your password has been changed!" msgstr "" msgid "Password current" msgstr "" msgid "Password new" msgstr "" msgid "Password new again" msgstr "" msgid "Please sign out and log back again with your new password!" msgstr "" msgid "I will be away from until . For urgent matters you can contact ." msgstr "" postfixadmin-3.0.2/ADDITIONS/fetchmail.pl0000664000175000017500000000747712752603775017027 0ustar daviddavid#!/usr/bin/perl use DBI; use MIME::Base64; # use Data::Dumper; use File::Temp qw/ mkstemp /; use Sys::Syslog; # require liblockfile-simple-perl use LockFile::Simple qw(lock trylock unlock); ###################################################################### ########## Change the following variables to fit your needs ########## # database settings # database backend - uncomment one of these our $db_type = 'Pg'; #my $db_type = 'mysql'; # host name our $db_host="127.0.0.1"; # database name our $db_name="postfix"; # database username our $db_username="mail"; # database password our $db_password="CHANGE_ME!"; # instead of changing this script, you can put your settings to /etc/mail/postfixadmin/fetchmail.conf # just use perl syntax there to fill the variables listed above (without the "our" keyword). Example: # $db_username = 'mail'; if (-f "/etc/mail/postfixadmin/fetchmail.conf") { require "/etc/mail/postfixadmin/fetchmail.conf"; } #################### Don't change anything below! #################### ###################################################################### openlog("fetchmail-all", "pid", "mail"); sub log_and_die { my($message) = @_; syslog("err", $message); die $message; } # read options and arguments $configfile = "/etc/fetchmail-all/config"; @ARGS1 = @ARGV; while ($_ = shift @ARGS1) { if (/^-/) { if (/^--config$/) { $configfile = shift @ARGS1 } } } $run_dir="/var/run/fetchmail"; # use specified config file if (-e $configfile) { do $configfile; } if($db_type eq "Pg" || $db_type eq "mysql") { $dsn = "DBI:$db_type:database=$db_name;host=$db_host"; } else { log_and_die "unsupported db_type $db_type"; } $lock_file=$run_dir . "/fetchmail-all.lock"; $lockmgr = LockFile::Simple->make(-autoclean => 1, -max => 1); $lockmgr->lock($lock_file) || log_and_die "can't lock ${lock_file}"; # database connect $dbh = DBI->connect($dsn, $db_username, $db_password) || log_and_die "cannot connect the database"; if($db_type eq "Pg") { $sql_cond = "active = 't' AND date_part('epoch',now())-date_part('epoch',date)"; } elsif($db_type eq "mysql") { $sql_cond = "active = 1 AND unix_timestamp(now())-unix_timestamp(date)"; } $sql = " SELECT id,mailbox,src_server,src_auth,src_user,src_password,src_folder,fetchall,keep,protocol,mda,extra_options,usessl, sslcertck, sslcertpath, sslfingerprint FROM fetchmail WHERE $sql_cond > poll_time*60 "; my (%config); map{ my ($id,$mailbox,$src_server,$src_auth,$src_user,$src_password,$src_folder,$fetchall,$keep,$protocol,$mda,$extra_options,$usessl,$sslcertck,$sslcertpath,$sslfingerprint)=@$_; syslog("info","fetch ${src_user}@${src_server} for ${mailbox}"); $cmd="user '${src_user}' there with password '".decode_base64($src_password)."'"; $cmd.=" folder '${src_folder}'" if ($src_folder); $cmd.=" mda ".$mda if ($mda); # $cmd.=" mda \"/usr/local/libexec/dovecot/deliver -m ${mailbox}\""; $cmd.=" is '${mailbox}' here"; $cmd.=" keep" if ($keep); $cmd.=" fetchall" if ($fetchall); $cmd.=" ssl" if ($usessl); $cmd.=" sslcertck" if($sslcertck); $cmd.=" sslcertpath $sslcertpath" if ($sslcertck && $sslcertpath); $cmd.=" sslfingerprint \"$sslfingerprint\"" if ($sslfingerprint); $cmd.=" ".$extra_options if ($extra_options); $text=<quote($ret).", date=now() WHERE id=".$id; $dbh->do($sql); }@{$dbh->selectall_arrayref($sql)}; $lockmgr->unlock($lock_file); closelog(); postfixadmin-3.0.2/ADDITIONS/change_password.tgz0000664000175000017500000001740310601151304020372 0ustar daviddavid‹ŠëîAì=ëzÚH²ówxŠ6À,æN°qÂ`’pÆ/àÉä8Y>5XkµäËîäÝOUwëÊÍÞÏn‚2ŸAêêªêêªêêª3¾R)Y*c·¦­åø W¡P)ìW«ðɯø'ÿ^,÷ËÕZµR¸bi¿RþT¿3ñËeŽjòƒmšÎ:¸Míÿ¥×86ÿ­ß[×G͹ó_.×öwóÿײùïoy¨…b¡P«TVÏ­›ÿJ©\ú¶ÉĪë;ŸÿºÅ¨}Cíºj˜ÆýÜtÙ«ñ ˱IΠN=ßqàyöÉÕm›Îæª>KüÙ<ï®í]KíŸZ&ÓÓ¾ßö_©ÆìŸ‡;û‚+lØykæNuƒåcJ±3øo÷ZfÿmñuʶFc“ýWª¥øú¿_*îìÿ)®|¿Ý<>m狹b~à¤kÞb+õR­^-’R¡PÎçù±iLôiκ²´”?5 Ò´lR,‘Â~½P®Ã­ èÄ5ÆŽnLBW–@W|hÝÐè݃ M+Œµº–Qǵ$dy-$Ä> ÐòQ T‡¼¦—¤ôœ÷ëår½PõàŽ¿Q'¸Æþs'æt+46®ÿ¥øþ> ;ûŠ«IŽó—êøšZ®oTËwת+nÿb9Ø.Mö¿_+Çó?µâþÎþŸâ:U™CmÒâj@Τ±Hì­»‰wo›ÃÔ€ ßv/Ã+É~¾©dJ j«32±Õ9¬×dbÚ„êåL7¦Ä¹¢Äe@Û1B `È_ÁOs¤ãu63oï«é“ µ©á鲎I,jCÛðUGe×Vû’ÝÃç,—H †Íáù qLoèÌ´æÐ˜H´zÝ×7çýæ°Óë&Úšîp¾&úŒ’ ä D¼IR&÷¦KnU m0Œ\âÌ6/ah÷YÞdPªyݘ9÷°‘Õf$Få˜f"í9áCèmË›#$žÖi¶~mw‰=þ/‘hžßöúø–Hv´:f›…Ø-'c¶b1Žã®uãš´ï,’Œºø¸ý{llSÇ“ÿ­–jÿ—qýßå¿þµjþ·Yx|þ¿²_­íæÿ)®uó¿­:ÀãóÿÕÚnÿÿ4×.ÿÿ}_kíKu€ö_çÿ÷ñÑÎþŸàzHþßSŠá{×:ûßV`“ý—Ëñü­\ØÙÿ“\‘ü{4SûÆõR)ŸÃnþzi kõò‹òž}š­‚Œà´L UO{0ìã­™êЇpû­æë·}­²_-¶@ccþ¯R‹Û?ìwöÿ×áK˜ãD"ÿóÏ ò3ñgnð¾eZ÷¶>½rHzœ!Å/^ìar‰ ¯(ÈÈá"rf›ÿ c‡ ©:ÇŽ'ú˜ŒjÄŒ6Ïv½éž“7g'9òÚ´ÉÄ͈Cí9#ŒÒ çÖê½ïtßä$}žSä LÛ¿'ŽzMQ{¢:èxúíF§·„™®=X@¼†Æ³É(¢²¨iGb3Ó”llSjäHÓÙCËÔ ‡¦žÍUŠD%ú1a‹ÚÌäyNÀ4…q˜ Óñøæ99_˜KËA·WXŸ:¥2ÊàY>‘¸¢À‚VṈŠÐz.˜§’9ÀÙ#–M瞀”lʘ~CÉ•{õ’÷y´Æ®²ßÙoAÇÖÛ±TZ¨ÿ׊»óOs û—抓.sñžFø©v¡Ù¯TLÊ&mí èF5H{vMùí+zC÷˜9qnU›æÆæüˆ÷va¾^q£‡à¿pá˜×îl­UW̽ôÇO+q¥—#jYwñ|:3/ÕIr>F®=ËzßM,Àç?Pù)4¯onj.„SÝÞ¨7àJÔËý)•%íÑù Ýµûý^?s ða,—]¥ùH³d”VV£!çX#æs[Œ~R2>R©Q!öYˆr|‚ô’ðüžQÇ„ . YuÒ;Žà#’1ÉÅ…¼ A¿=<ïw‡ýfwðºÝÏ’â¦ÃÎi»w>ÈÂFæ@–gDñ•¯.”LÙÔõuïV‡“^‹—¶}¶’º3ǽ£cÞ1„n<ƒÙ{èé slËdiÙªФÉ]#x]<²’!‡G¤€z³nÖUƒ»§Ø¼’t‡‰Ó©È]®Û®Íõàž§ÈË IÑÌf}}C‚ Ûœ×Éáë^ÿ”œ¶‡o{Ç å¬7*¤ÙB¹4éßùzüR×ê‹ò~•Ò*­Tªûðíù~Q«Ò"PV_Ôʪª 5€á/XŽ’ §%gÇr/9 üÉ’B–x²ä÷Êî¯þôÄÐ ×eXc %“->‚ Z=W"EŠîö Siì =‚xÙC”3 Í[A ;ΨÿÀ½ä̪9@5`§1lÿ~ð?$,^+a=»xôYs0x×ë+ÁèåpØE´Ú™’ÁmEô9Wñ@ŸÃZ=¢~ó¸Ó‹1¹šËÖÛvë×_z¿Ãí³g¡ÖB§š˜Àía™,έ4×Ͼα EÄwÊGxÒˆoO(ÏÛ|äPžEÄ xX¨ ·""7ã9µH³ç;]Eáà]Râ,>R†ròšÞ“ÆIÂÖÁ¥!¥çs æÜPà/8ijŒM z -Ï”ð¸%A0“9w$¨ÞÏ”À5µbÎâ b?±„l‚ŨáÁÝ££ÁqÚzF^wÚ'ǃ¬S$°k|aX÷–8צñ`îÑ~w9ãkÿ ·} ÏüÍ_Ä”’νE½ I|M „~­^íàè]Zb‹/²¾ªeIJI…dôSt‰$Ü}4ÈD…MTÓ7.¯$¼®"ë ‡ÓNG Dˆøã¨cçLÌÆb yãö&†/¥áy‰9G9'VáÃ1gæ-““¼cÑgó’˜c»tQ780òðggJ¿Íkeþß+ánƆüµT(ÇÎÿÖJ…Ê.ÿÿ——ÿ'§÷ƒ¿Ä}y(ùOš<ñ_Çìî?ùU7®á–9äkX¯ÂiåœiO˜†G5‰#ˆYïd—*£þÓþ6º6âñ{Ö Íd›Ÿó­Þã¹j¨SjôÅG<Äñ2ü\2Ãá üdÊOî§1N±\Ÿ3Ñï‚FÎ5¶ L.Í»T@÷  þKcžÄecgîÜ`‰%cF”~âѧ9i¤¼!²òu ¬YÂ&¾ˆßêÄrs°‘å_–I,oé0AbóûÞyß ÿ‘òcKÉÓæ›N CÍd1‰õ‘ΰ׬UðA._(–Ê•jmÿù‹æ/­ãöë7o;ÿûëÉi·wö·þ`xþÛ»ßßÿŸz9Öèd Jz=›¦õ tÔ½¹½»ÿ'T¾f…¥Á+$?ŠòˆÐ]ydWùz呈ŽEÊ#[«<¼@ò€ ÉÚÉúÉò" ÙúJòå« Ç !« èŽÚ–^ÎäZtr»ÀlDÎF¬Ý” ’8]ÇÞ"5t­Å[Ǿ'xœÎU•öh2eÁi{œÏéH»L/ xÛÈœÏ ²81]ðK ÉB«™€ä§O¸º Ú'íÖ¤x•fqaÌ‘T6Ô¾ðüÊ àÉë~ï>‚^\EV¿{Ûî·×‘o(Ø(Ú(«áFÕ˜¦}Û€Ý1ìÄplIèÈ'Õl2„º(pq(ÅFÙR”'½âó‚÷|ZžKrcçNH‹{ÎzNtíÝPñLý+]‚oNƒ°¸œ<0ü„½AÆ«ÆA£Þå —9 Iý¨€÷ÅZàsø8t\Gj™&!C¹Çœl! P‹:¸®GR÷” ¡tQ¨ ØÂ§^uÙ(,°ö —8ýø p"<øm€æÂwH QÂÐB ¬$ ˆ ¯pÔ‹…~þõ¯áª½sW *ŸË-Jn¸,n’©ÄôRcòõ ³¿œÚRn6MäRLk„UŒޏEkT¼€Ï1kØ¡À?ž’8až2äð•Žüm©‰–ç ÅÒGX+3YRÉ<ŒFq%ý•4ʤQZIãùJ•GÒ(¯¤ñb%ê#iTVÒ(VÙH#‚fÃ_†äB WÇõûCRöW¢«BÈ7“´\˜ùËtZ3]ˆ3s}l›Ž>’ù¹(jH™¥Ž—«¯è\ȾW&öÄ~™“›\˜ß°*I¢ 94l„ QJ ŽG>;¡Oi”BN|D1¥Ex¡plp Ùð¨üå.tñçÜb_´§ÀÉyƒ0еbb’7xÈ!¶šŠ´ºwrÀ ˜—Þè=ô)G‘ÝNÒØÛó¹Â~èB®‹ä x¡Â]y8åtÊ7è”k‹üÂ'g÷Ï.}×תúoøÅÜ/¥±áýÏýÚÂï¿Õjûµ]ý÷)®èûŸgrÖ×ÔÃ/ ¨sEúà`1ßrÈàÎ~5×3Ý™:»^8ö XXµ–¿Æ_äþšoÉçù›nxL²Ë‚¬,ùòò›d–h*Ãl×À² /Ru&DwR¢ŽÇ°èuÞGŸ«ñ’üøcpXuÝÓ ÅªÉåL5®9ž/ö" °]?ÂJ¨‚xLa•¥°FÙâÕY^ræÇ‘üf_¼õ ¡úJ ×¼ Ê‹ þ8BuÐÇ`çï¢fïÕÿ%˜9¯4 áœciƒ¿7,ƒD3ùKÃR÷ü*+vÖÕ™þOUÖ»~&47͉3Ï(;›"³-eÉ%Å£â àXšƒ¿B º¢Ãn^½?èUa—Tï"CHã"ûyW$Þ‰·]$^°AY'&ßU¸ã¦‚ÇŽ¥çô_/‹Ø3jPÀ ¾àõOús#NÏÈS„hDàS3Èg‰_Ú’§‚ÇÚêS°lü¯•ÆåaÄL°y'Kž%½¹÷Þð#¡§øÓ•‰g¿7Vº½–(ã¡ó ׌'–ë°( xHçƒýÁð6,Îi(³fX°ãÓ&—ñ1y’׎7LX¼”Ë# ^oóLâ½éHÍI„¡èÑY‰d2¥ñÁ ¥J&´ãñ°Ë“¶þáYÄ ¶–åÌ׈i²¤Z(øyšôO<'pR”Ä&˜&vp’+ Ý¿™ÙÙ¯ÜBq§U`ÇÞÝñ¾Ì>3;;«Îq‰HfG¥d‚¿¸¥Ȩ̂åðH•柭Îÿ.þ3‡Þl®ŒÚóKç¿ýzàã?n…ôúßš# ½¬rš;ÕÊ©ó‹7gÅœO=*z¤ÒÄr,êyÌ:ð辉”Jë{Ú)Xžs p³ s”¢8ëì¢ÔSY¢³)mÀC@O0ŸÁ `Ç4N'K qtj?~6OO9C ¢¿?}üòêìôÿì¡àŽÿÂá*£füŸ—ÖÿNüþï­PqýÿOÄd€ë’÷2ÊHI´{‚f2<Í °È8O!$ÇŒ… Ê€Ju¶¤þÅ™éAM†‚àô¸„ÉhF…¹²%Úm ä©a²—ªXšÝhœ±çp±½@‘*÷5Î3 ÔMâå3Êìí •Ð‡- €´ÄÕð…íKUéØš…%¤út²e ™Ø•—”´˜Nò À†\µQ» V™ýuLù*#7ܪ;ÈþÉÅÅï/ÎÖ0]ûæÃˆ3·-Hyuvuõââ¼iÀŠE€Æ}SE[ûb¢Ììéíw§°10Ë}©RÚz5€œfqAÃ@Ãû=q‘Æo€»Ëaô[Ì{NèS-¶›ßààIa5‚>šøÖŸ5,êvù©¦¯Ír8Ô_¨®‚JĦî£ìs©òБ ÃÊ«ý§X9$AìÂÖ+{{èˆbÿp©ÝÊ1ìDcr’ö+º(võ·,æ9(ï•ß´ø­@d‚Rû i·ð¯Ñ$Å4K'ðM­2K·—?Å}B0œ#RÝP‹2iYH›J×’õ„bé£*ê~i4•¦©$>/Ä5Je˜RT$áº%F0{ȈdRÁ¶dA;€TC‡Q¤õMRîLÖV¯S$Å.¥À ¼DXœs¤¦Ö›–iÌÕ¶äV)©µ5 ÛAغÃP…ª¶³2F+—Û[šMËÝË1d–rc@† ¨OÜü(_/(ï˜Å:,œ"ló„v_8s%7ÿ®jÒwv‡£@‘æž_¥`V¾g©³ÕÞHܹâåš0‰U—”]q¿eÆ‚U£…]Ï7¨¾’¬­lÅ¿‰øà¯ç×”P®ðò>@ÁG­„ú¨¶¹·Bg]äã‹ì‡àz–Eqo±Í’å¯r8}¯wÀAýDü9YþtìÜ·ÉsŸÝýü§£ã¿þ»òç?ùóŸìñoÉ·õ±:ÿã“×þwpäíÿ[!ÿJsáÉ.l…ÐÉà°V"ƒ¨x6zãe´Sèlmm]îàÉÙ³kS­‰[õwå`V»¾+y)XjÈ£‘äY–ÏxYá…T™dJë… ˆ¯J˜d!ëò“ÌØÿ´·>J²œò`ê9+Ä Ù½2Þ±%#æ©Ê!A]*s bjˆ-!¤®ÃL\¨ªŒr(·xKS `+»N\‹ϥlÛgÓ Ÿ2¤JdL_†òòtšS”j;2LÓNW†’N8I{L<0±bO§0#Þ½àPÞ/@Àªûäç½`?Àò~w‰Ñ„é4,›’¼a؇G}x>¢+‹èwG}ë=t-..¡MHÒíÀ[N±Óí,£>94‰% @¾vîí‰R-[ª€ ÅìöÿJÙ%Ød× €AÙ§0¦íæ¡Ôx4w†S48,üš{¥sýÇ.’ï@Áô˜<ôZ—ú$j:YÔ 0Jh dˆúbm‚ñúíÙëwáåóK¸~ù44+dKö™aÌ_óÞE_,Ù„H·îÙ@££€M¬üå; ø¹¤†Ì^ :U@îUÐuŒÞŠLß €_áÿÃýꆪA±×1ü݉Õs€+?Ê&[6Ã&qé0ùVW7Á«´Óþ«Qixg8šSÊÖ{6+RîÚŒL2ÍDýÀ]Ï\™nÚí`ÇW#›Þ¡õK ²è ÜãÀÛ°÷î“;¥8ZÍ·«ÿ<(ë'û~ÿ÷VHë¨<‹Sªã5® ¶NÆÎ!ÃdF ó<û;=i(&˜`‡÷èF‰¥5÷‡[;³mל/xùa¬|‰Ù ü!Nr‘ݤJj—}F´Å·Êß¡‚kŽi¸{›¾á#+Õ7 SquirrelMail plugin to change your passwor - cleanupdirs.pl by jared bell Displays a list of mailboxes that need to be deleted - mailbox_remover.pl by Petr Znojemsky Deletes all unused mailboxes - mkeveryone.pl by Joshua Preston Generate an 'everybody' alias for a domain. - pfa_maildir_cleanup.pl by Stephen Fulton Deletes all unused mailboxes - postfixadmin-0.3-1.4.tar.gz by Florian Kimmerl The Postfixadmin SquirrelMail plugin let users change their virtual alias, vacation status/message and password. - virtualmaildel.php by George Vieira Deletes all unused mailboxes - postfixadmin-mailbox-postcreation.sh - postfixadmin-mailbox-postdeletion.sh - postfixadmin-domain-postdeletion.sh by Troels Arvin Examples of scripts relevant to the optional $CONF['mailbox_postcreation_script'], $CONF['mailbox_postdeletion_script'] and $CONF['domain_postdeletion_script'] configuration options. postfixadmin-3.0.2/ADDITIONS/convert-passwd-to-postfixadmin.pl0000664000175000017500000000257212237726354023161 0ustar daviddavid#!/usr/bin/perl -w # # Postfix Admin # # LICENSE # This source file is subject to the GPL license that is bundled with # this package in the file LICENSE.TXT. # # Further details on the project are available at http://postfixadmin.sf.net # # @version $Id: convert-passwd-to-postfixadmin.pl 1558 2013-11-10 15:57:32Z christian_boltz $ # @license GNU GPL v2 or later. # # # Really crude attempt at taking all users from a local # passwd file (/etc/shadow) and creating postfixadmin mailboxes for them. # # The script outputs some SQL, which you need to then insert into your database # as appropriate. # # Notes: # 1) Change $mydomain and $true as required. # 2) Ideally it should parse /etc/passwd, or call the getpw()? function and # populate someone's name if known. # 3) There's plenty of room for improvement. # # Original author: David Goodwin - 2007/10/05. # use strict; open(FH, ') { my ($username, $password) = split(':', $_); next if $password eq '!'; next if $password eq '*'; my $maildir = "$username\@$mydomain/"; print "insert into mailbox (username, password, domain, active, maildir) values ('$username', '$password', '$mydomain', $true, '$maildir');\n"; } postfixadmin-3.0.2/ADDITIONS/postfixadmin-mailbox-postdeletion.sh0000664000175000017500000000432510715711016023705 0ustar daviddavid#!/bin/sh # Example script for removing a Maildir from a Courier-IMAP virtual mail # hierarchy. # The script looks at arguments 1 and 2, assuming that they # indicate username and domain, respectively. # The script will not actually delete the maildir. I moves it # to a special directory which may once in a while be cleaned up # by the system administrator. # This script should be run as the user which owns the maildirs. If # the script is actually run by the apache user (e.g. through PHP), # then you could use "sudo" to grant apache the rights to run # this script as the relevant user. # Assume this script has been saved as # /usr/local/bin/postfixadmin-mailbox-postdeletion.sh and has been # made executable. Now, an example /etc/sudoers line: # apache ALL=(courier) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh # The line states that the apache user may run the script as the # user "courier" without providing a password. # Change this to where you keep your virtual mail users' maildirs. basedir=/var/spool/maildirs # Change this to where you would like deleted maildirs to reside. trashbase=/var/spool/deleted-maildirs if [ ! -e "$trashbase" ]; then echo "trashbase '$trashbase' does not exist; bailing out." exit 1 fi if [ `echo $1 | fgrep '..'` ]; then echo "First argument contained a double-dot sequence; bailing out." exit 1 fi if [ `echo $2 | fgrep '..'` ]; then echo "First argument contained a double-dot sequence; bailing out." exit 1 fi subdir=`echo "$1" | sed 's/@.*//'` maildir="${basedir}/$2/${subdir}" trashdir="${trashbase}/$2/`date +%F_%T`_${subdir}" parent=`dirname "$trashdir"` if [ ! -d "$parent" ]; then if [ -e "$parent" ]; then echo "Strainge - directory '$parent' exists, but is not a directory." echo "Bailing out." exit 1 else mkdir -p "$parent" if [ $? -ne 0 ]; then echo "mkdir -p '$parent' returned non-zero; bailing out." exit 1 fi fi fi if [ ! -e "$maildir" ]; then echo "maildir '$maildir' does not exist; nothing to do." exit 1 fi if [ -e "$trashdir" ]; then echo "trashdir '$trashdir' already exists; bailing out." exit 1 fi mv $maildir $trashdir exit $? postfixadmin-3.0.2/smarty/0000775000175000017500000000000013046702637014512 5ustar daviddavidpostfixadmin-3.0.2/smarty/smarty_version0000664000175000017500000000036612717671461017532 0ustar daviddavid$Id: smarty_version 1841 2016-05-20 20:27:29Z gingerdog $ Smarty version: 3.1.29 ( https://github.com/smarty-php/smarty/archive/v3.1.29.tar.gz ) Additional files (not part of the official Smarty release): - libs/plugins/modifier.needle.php postfixadmin-3.0.2/smarty/libs/0000775000175000017500000000000013046702637015443 5ustar daviddavidpostfixadmin-3.0.2/smarty/libs/sysplugins/0000775000175000017500000000000013046702637017663 5ustar daviddavidpostfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php0000664000175000017500000000200412717671461031271 0ustar daviddavidsmarty) ? $obj->smarty : $obj; $smarty->default_modifiers = (array) $modifiers; return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_clearallcache.php0000664000175000017500000000172712717671461030005 0ustar daviddavidinvalidLoadedCache($smarty); return $_cache_resource->clearAll($smarty, $exp_time); } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_configload.php0000664000175000017500000001613712717671461027350 0ustar daviddavid_loadConfigFile($data, $config_file, $sections, 0); return $data; } /** * load a config file, optionally load just selected sections * * @api Smarty::configLoad() * @link http://www.smarty.net/docs/en/api.config.load.tpl * * @param \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template $data * @param string $config_file filename * @param mixed $sections array of section names, single * section or null * @param int $scope scope into which config variables * shall be loaded * * @return \Smarty|\Smarty_Internal_Data|\Smarty_Internal_Template * @throws \SmartyException */ public function _loadConfigFile(Smarty_Internal_Data $data, $config_file, $sections = null, $scope = 0) { /* @var \Smarty $smarty */ $smarty = isset($data->smarty) ? $data->smarty : $data; /* @var \Smarty_Internal_Template $confObj */ $confObj = new Smarty_Internal_Template($config_file, $smarty, $data); $confObj->caching = Smarty::CACHING_OFF; $confObj->source = Smarty_Template_Config::load($confObj); $confObj->source->config_sections = $sections; $confObj->source->scope = $scope; $confObj->compiled = Smarty_Template_Compiled::load($confObj); $confObj->compiled->render($confObj); if ($data->_objType == 2) { $data->compiled->file_dependency[$confObj->source->uid] = array($confObj->source->filepath, $confObj->source->getTimeStamp(), $confObj->source->type); } } /** * load config variables into template object * * @param \Smarty_Internal_Template $tpl * @param array $_config_vars * */ public function _loadConfigVars(Smarty_Internal_Template $tpl, $_config_vars) { $this->_assignConfigVars($tpl->parent, $tpl, $_config_vars); $scope = $tpl->source->scope; if (!$scope && !$tpl->scope) { return; } foreach (array($scope, $tpl->scope) as $s) { $s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s; if ($bubble_up && $s) { $ptr = $tpl->parent->parent; if (isset($ptr)) { $this->_assignConfigVars($ptr, $tpl, $_config_vars); $ptr = $ptr->parent; } if ($s == Smarty::SCOPE_PARENT) { continue; } while (isset($ptr) && $ptr->_objType == 2) { $this->_assignConfigVars($ptr, $tpl, $_config_vars); $ptr = $ptr->parent; } if ($s == Smarty::SCOPE_TPL_ROOT) { continue; } elseif ($s == Smarty::SCOPE_SMARTY) { $this->_assignConfigVars($tpl->smarty, $tpl, $_config_vars); } elseif ($s == Smarty::SCOPE_GLOBAL) { $this->_assignConfigVars($tpl->smarty, $tpl, $_config_vars); } elseif ($s == Smarty::SCOPE_ROOT) { while (isset($ptr->parent)) { $ptr = $ptr->parent; } $this->_assignConfigVars($ptr, $tpl, $_config_vars); } } } } /** * Assign all config variables in given scope * * @param \Smarty_Internal_Data $scope_ptr * @param \Smarty_Internal_Template $tpl * @param array $_config_vars */ public function _assignConfigVars(Smarty_Internal_Data $scope_ptr, Smarty_Internal_Template $tpl, $_config_vars) { // copy global config vars foreach ($_config_vars['vars'] as $variable => $value) { if ($tpl->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { $scope_ptr->config_vars[$variable] = $value; } else { $scope_ptr->config_vars[$variable] = array_merge((array) $scope_ptr->config_vars[$variable], (array) $value); } } // scan sections $sections = $tpl->source->config_sections; if (!empty($sections)) { foreach ((array) $sections as $tpl_section) { if (isset($_config_vars['sections'][$tpl_section])) { foreach ($_config_vars['sections'][$tpl_section]['vars'] as $variable => $value) { if ($tpl->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) { $scope_ptr->config_vars[$variable] = $value; } else { $scope_ptr->config_vars[$variable] = array_merge((array) $scope_ptr->config_vars[$variable], (array) $value); } } } } } } /** * gets a config variable value * * @param \Smarty_Internal_Template $tpl template object * @param string $varName the name of the config variable * @param bool $errorEnable * * @return mixed the value of the config variable */ public function _getConfigVariable(Smarty_Internal_Template $tpl, $varName, $errorEnable = true) { $_ptr = $tpl; while ($_ptr !== null) { if (isset($_ptr->config_vars[$varName])) { // found it, return it return $_ptr->config_vars[$varName]; } // not found, try at parent $_ptr = $_ptr->parent; } if ($tpl->smarty->error_unassigned && $errorEnable) { // force a notice $x = $$varName; } return null; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_parsetree_dqcontent.php0000664000175000017500000000164212717671461027747 0ustar daviddaviddata = $data; } /** * Return content as double quoted string * * @param \Smarty_Internal_Templateparser $parser * * @return string doubled quoted string */ public function to_smarty_php(Smarty_Internal_Templateparser $parser) { return '"' . $this->data . '"'; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_resource_uncompiled.php0000664000175000017500000000376212717671461026055 0ustar daviddavidfilepath = false; $compiled->timestamp = false; $compiled->exists = false; } /** * render compiled template code * * @param Smarty_Internal_Template $_template * * @return string * @throws Exception */ public function render($_template) { $level = ob_get_level(); ob_start(); try { $this->renderUncompiled($_template->source, $_template); return ob_get_clean(); } catch (Exception $e) { while (ob_get_level() > $level) { ob_end_clean(); } throw $e; } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_foreach.php0000664000175000017500000003001612717671461027012 0ustar daviddavidloopNesting ++; // init $this->isNamed = false; // check and get attributes $_attr = $this->getAttributes($compiler, $args); $from = $_attr['from']; $item = $compiler->getId($_attr['item']); if ($item === false) { $item = $compiler->getVariableName($_attr['item']); } $attributes = array('item' => $item); if (isset($_attr['key'])) { $key = $compiler->getId($_attr['key']); if ($key === false) { $key = $compiler->getVariableName($_attr['key']); } $attributes['key'] = $key; } if (isset($_attr['name'])) { $this->isNamed = true; $attributes['name'] = $compiler->getId($_attr['name']); } foreach ($attributes as $a => $v) { if ($v === false) { $compiler->trigger_template_error("'{$a}' attribute/variable has illegal value", null, true); } } $fromName = $compiler->getVariableName($_attr['from']); if ($fromName) { foreach (array('item', 'key') as $a) { if (isset($attributes[$a]) && $attributes[$a] == $fromName) { $compiler->trigger_template_error("'{$a}' and 'from' may not have same variable name '{$fromName}'", null, true); } } } $itemVar = "\$_smarty_tpl->tpl_vars['{$item}']"; $local = '$__foreach_' . (isset($attributes['name']) ? $attributes['name'] : $attributes['item']) . '_' . $this->counter ++ . '_'; $needIteration = false; // search for used tag attributes $itemAttr = array(); $namedAttr = array(); $this->scanForProperties($attributes, $compiler); if (!empty($this->matchResults['item'])) { $itemAttr = $this->matchResults['item']; } if (!empty($this->matchResults['named'])) { $namedAttr = $this->matchResults['named']; } if (isset($itemAttr['last'])) { $needIteration = true; } if (isset($namedAttr['last'])) { $needIteration = true; } $keyTerm = ''; if (isset($itemAttr['key'])) { $keyTerm = "{$itemVar}->key => "; } elseif (isset($attributes['key'])) { $keyTerm = "\$_smarty_tpl->tpl_vars['{$key}']->value => "; } $saveVars = array(); $restoreVars = array(); if ($this->isNamed) { $foreachVar = "\$_smarty_tpl->tpl_vars['__smarty_foreach_{$attributes['name']}']"; if (!empty($namedAttr)) { $saveVars['saved'] = "isset({$foreachVar}) ? {$foreachVar} : false;"; $restoreVars[] = "if ({$local}saved) {\n{$foreachVar} = {$local}saved;\n}\n"; } } foreach (array('item', 'key') as $a) { if (isset($attributes[$a])) { $saveVars['saved_' . $a] = "isset(\$_smarty_tpl->tpl_vars['{$attributes[$a]}']) ? \$_smarty_tpl->tpl_vars['{$attributes[$a]}'] : false;"; $restoreVars[] = "if ({$local}saved_{$a}) {\n\$_smarty_tpl->tpl_vars['{$attributes[$a]}'] = {$local}saved_{$a};\n}\n"; } } $this->openTag($compiler, 'foreach', array('foreach', $compiler->nocache, $local, $restoreVars, $itemVar, true)); // maybe nocache because of nocache variables $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; // generate output code $output = " $code) { $output .= "{$local}{$k} = {$code}\n"; } if (isset($itemAttr['show']) || isset($itemAttr['total']) || isset($namedAttr['total']) || isset($namedAttr['show']) || isset($itemAttr['last']) || isset($namedAttr['last'])) { $output .= "{$local}total = \$_smarty_tpl->smarty->ext->_foreach->count(\$_from);\n"; } $output .= "{$itemVar} = new Smarty_Variable();\n"; if (isset($itemAttr['show'])) { $output .= "{$itemVar}->show = ({$local}total > 0);\n"; } if (isset($itemAttr['total'])) { $output .= "{$itemVar}->total= {$local}total;\n"; } if ($this->isNamed) { $prop = array(); if (isset($namedAttr['total'])) { $prop['total'] = "'total' => {$local}total"; } if (isset($namedAttr['iteration'])) { $prop['iteration'] = "'iteration' => 0"; } if (isset($namedAttr['index'])) { $prop['index'] = "'index' => -1"; } if (isset($namedAttr['show'])) { $prop['show'] = "'show' => ({$local}total > 0)"; } if (!empty($namedAttr)) { $_vars = 'array(' . join(', ', $prop) . ')'; $output .= "{$foreachVar} = new Smarty_Variable({$_vars});\n"; } } if (isset($attributes['key'])) { $output .= "\$_smarty_tpl->tpl_vars['{$key}'] = new Smarty_Variable();\n"; } if (isset($namedAttr['first']) || isset($itemAttr['first'])) { $output .= "{$local}first = true;\n"; } if (isset($itemAttr['iteration'])) { $output .= "{$itemVar}->iteration=0;\n"; } if (isset($itemAttr['index'])) { $output .= "{$itemVar}->index=-1;\n"; } if ($needIteration) { $output .= "{$local}iteration=0;\n"; } $output .= "{$itemVar}->_loop = false;\n"; $output .= "foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n"; $output .= "{$itemVar}->_loop = true;\n"; if (isset($attributes['key']) && isset($itemAttr['key'])) { $output .= "\$_smarty_tpl->tpl_vars['{$key}']->value = {$itemVar}->key;\n"; } if (isset($itemAttr['iteration'])) { $output .= "{$itemVar}->iteration++;\n"; } if (isset($itemAttr['index'])) { $output .= "{$itemVar}->index++;\n"; } if ($needIteration) { $output .= "{$local}iteration++;\n"; } if (isset($itemAttr['first'])) { $output .= "{$itemVar}->first = {$local}first;\n"; } if (isset($itemAttr['last'])) { $output .= "{$itemVar}->last = {$local}iteration == {$local}total;\n"; } if ($this->isNamed) { if (isset($namedAttr['iteration'])) { $output .= "{$foreachVar}->value['iteration']++;\n"; } if (isset($namedAttr['index'])) { $output .= "{$foreachVar}->value['index']++;\n"; } if (isset($namedAttr['first'])) { $output .= "{$foreachVar}->value['first'] = {$local}first;\n"; } if (isset($namedAttr['last'])) { $output .= "{$foreachVar}->value['last'] = {$local}iteration == {$local}total;\n"; } } if (isset($namedAttr['first']) || isset($itemAttr['first'])) { $output .= "{$local}first = false;\n"; } $output .= "{$local}saved_local_item = {$itemVar};\n"; $output .= "?>"; return $output; } } /** * Smarty Internal Plugin Compile Foreachelse Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase { /** * Compiles code for the {foreachelse} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); list($openTag, $nocache, $local, $restoreVars, $itemVar, $foo) = $this->closeTag($compiler, array('foreach')); $this->openTag($compiler, 'foreachelse', array('foreachelse', $nocache, $local, $restoreVars, $itemVar, false)); $output = "_loop) {\n?>"; return $output; } } /** * Smarty Internal Plugin Compile Foreachclose Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase { /** * Compiles code for the {/foreach} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { $compiler->loopNesting --; // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } list($openTag, $compiler->nocache, $local, $restoreVars, $itemVar, $restore) = $this->closeTag($compiler, array('foreach', 'foreachelse')); $output = ""; return $output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_resource_extends.php0000664000175000017500000000705112717671461027257 0ustar daviddavidname); $exists = true; foreach ($components as $component) { /* @var \Smarty_Template_Source $_s */ $_s = Smarty_Template_Source::load(null, $source->smarty, $component); if ($_s->type == 'php') { throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type"); } $sources[ $_s->uid ] = $_s; $uid .= $_s->filepath; if ($_template) { $exists = $exists && $_s->exists; } } $source->components = $sources; $source->filepath = $_s->filepath; $source->uid = sha1($uid); $source->exists = $exists; if ($_template) { $source->timestamp = $_s->timestamp; } } /** * populate Source Object with timestamp and exists from Resource * * @param Smarty_Template_Source $source source object */ public function populateTimestamp(Smarty_Template_Source $source) { $source->exists = true; /* @var \Smarty_Template_Source $_s */ foreach ($source->components as $_s) { $source->exists = $source->exists && $_s->exists; } $source->timestamp = $source->exists ? $_s->getTimeStamp() : false; } /** * Load template's source from files into current template object * * @param Smarty_Template_Source $source source object * * @return string template source * @throws SmartyException if source cannot be loaded */ public function getContent(Smarty_Template_Source $source) { if (!$source->exists) { throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); } $_components = array_reverse($source->components); $_content = ''; /* @var \Smarty_Template_Source $_s */ foreach ($_components as $_s) { // read content $_content .= $_s->getContent(); } return $_content; } /** * Determine basename for compiled filename * * @param Smarty_Template_Source $source source object * * @return string resource's basename */ public function getBasename(Smarty_Template_Source $source) { return str_replace(':', '.', basename($source->filepath)); } /* * Disable timestamp checks for extends resource. * The individual source components will be checked. * * @return bool */ public function checkTimestamps() { return false; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_createdata.php0000664000175000017500000000250712717671461027334 0ustar daviddavidsmarty) ? $this->smarty : $obj; $dataObj = new Smarty_Data($parent, $smarty, $name); if ($smarty->debugging) { Smarty_Internal_Debug::register_data($dataObj); } return $dataObj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_parsetree_text.php0000664000175000017500000000150612717671461026733 0ustar daviddaviddata = $data; } /** * Return buffer content * * @param \Smarty_Internal_Templateparser $parser * * @return string text */ public function to_smarty_php(Smarty_Internal_Templateparser $parser) { return $this->data; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php0000664000175000017500000001014512717671461027372 0ustar daviddavidloadPlugin() method * * @package Smarty * @subpackage PluginsInternal * @author Uwe Tews */ class Smarty_Internal_Method_LoadPlugin { /** * Cache of searched plugin files * * @var array */ public $plugin_files = array(); /** * Takes unknown classes and loads plugin files for them * class name format: Smarty_PluginType_PluginName * plugin filename format: plugintype.pluginname.php * * @param \Smarty $smarty * @param string $plugin_name class plugin name to load * @param bool $check check if already loaded * * @return bool|string * @throws \SmartyException */ public function loadPlugin(Smarty $smarty, $plugin_name, $check) { // if function or class exists, exit silently (already loaded) if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) { return true; } if (!preg_match('#^smarty_((internal)|([^_]+))_(.+)$#i', $plugin_name, $match)) { throw new SmartyException("plugin {$plugin_name} is not a valid name format"); } if (!empty($match[2])) { $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php'; if (isset($this->plugin_files[$file])) { if ($this->plugin_files[$file] !== false) { return $this->plugin_files[$file]; } else { return false; } } else { if (is_file($file)) { $this->plugin_files[$file] = $file; require_once($file); return $file; } else { $this->plugin_files[$file] = false; return false; } } } // plugin filename is expected to be: [type].[name].php $_plugin_filename = "{$match[1]}.{$match[4]}.php"; $_lower_filename = strtolower($_plugin_filename); if (isset($this->plugin_files)) { if (isset($this->plugin_files['plugins_dir'][$_lower_filename])) { if (!$smarty->use_include_path || $this->plugin_files['plugins_dir'][$_lower_filename] !== false) { return $this->plugin_files['plugins_dir'][$_lower_filename]; } } if (!$smarty->use_include_path || $smarty->ext->_getIncludePath->isNewIncludePath($smarty)) { unset($this->plugin_files['include_path']); } else { if (isset($this->plugin_files['include_path'][$_lower_filename])) { return $this->plugin_files['include_path'][$_lower_filename]; } } } $_file_names = array($_plugin_filename); if ($_lower_filename != $_plugin_filename) { $_file_names[] = $_lower_filename; } $_p_dirs = $smarty->getPluginsDir(); if (!isset($this->plugin_files['plugins_dir'][$_lower_filename])) { // loop through plugin dirs and find the plugin foreach ($_p_dirs as $_plugin_dir) { foreach ($_file_names as $name) { $file = $_plugin_dir . $name; if (is_file($file)) { $this->plugin_files['plugins_dir'][$_lower_filename] = $file; require_once($file); return $file; } $this->plugin_files['plugins_dir'][$_lower_filename] = false; } } } if ($smarty->use_include_path) { foreach ($_file_names as $_file_name) { // try PHP include_path $file = $smarty->ext->_getIncludePath->getIncludePath($_p_dirs, $_file_name, $smarty); $this->plugin_files['include_path'][$_lower_filename] = $file; if ($file !== false) { require_once($file); return $file; } } } // no plugin loaded return false; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php0000664000175000017500000001116212717671461031573 0ustar daviddavidgetCompileDir(); if ($_compile_dir == '/') { //We should never want to delete this! return 0; } $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null; $_dir_sep = $smarty->use_sub_dirs ? DS : '^'; if (isset($resource_name)) { $_save_stat = $smarty->caching; $smarty->caching = false; /* @var Smarty_Internal_Template $tpl */ $tpl = new $smarty->template_class($resource_name, $smarty); $smarty->caching = $_save_stat; if ($tpl->source->exists) { // remove from compileds cache $tpl->source->compileds = array(); $_resource_part_1 = basename(str_replace('^', DS, $tpl->compiled->filepath)); $_resource_part_1_length = strlen($_resource_part_1); } else { return 0; } $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1); $_resource_part_2_length = strlen($_resource_part_2); } $_dir = $_compile_dir; if ($smarty->use_sub_dirs && isset($_compile_id)) { $_dir .= $_compile_id . $_dir_sep; } if (isset($_compile_id)) { $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep; $_compile_id_part_length = strlen($_compile_id_part); } $_count = 0; try { $_compileDirs = new RecursiveDirectoryIterator($_dir); // NOTE: UnexpectedValueException thrown for PHP >= 5.3 } catch (Exception $e) { return 0; } $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); foreach ($_compile as $_file) { if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { continue; } $_filepath = (string) $_file; if ($_file->isDir()) { if (!$_compile->isDot()) { // delete folder if empty @rmdir($_file->getPathname()); } } else { $unlink = false; if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) && (!isset($resource_name) || (isset($_filepath[$_resource_part_1_length]) && substr_compare($_filepath, $_resource_part_1, - $_resource_part_1_length, $_resource_part_1_length) == 0) || (isset($_filepath[$_resource_part_2_length]) && substr_compare($_filepath, $_resource_part_2, - $_resource_part_2_length, $_resource_part_2_length) == 0)) ) { if (isset($exp_time)) { if (time() - @filemtime($_filepath) >= $exp_time) { $unlink = true; } } else { $unlink = true; } } if ($unlink && @unlink($_filepath)) { $_count ++; if (function_exists('opcache_invalidate')) { opcache_invalidate($_filepath); } } } } // clear template objects cache $smarty->_cache['isCached'] = array(); if (isset($smarty->ext->_subtemplate)) { $smarty->ext->_subtemplate->tplObjects = array(); } return $_count; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_template_cached.php0000664000175000017500000001657412717671461025116 0ustar daviddavidcompile_id = $_template->compile_id; $this->cache_id = $_template->cache_id; $this->source = $_template->source; if (!class_exists('Smarty_CacheResource', false)) { require SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php'; } $this->handler = Smarty_CacheResource::load($_template->smarty); } /** * @param Smarty_Internal_Template $_template * * @return Smarty_Template_Cached */ static function load(Smarty_Internal_Template $_template) { $_template->cached = new Smarty_Template_Cached($_template); $_template->cached->handler->populate($_template->cached, $_template); // caching enabled ? if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->handler->recompiled ) { $_template->cached->valid = false; } return $_template->cached; } /** * Render cache template * * @param \Smarty_Internal_Template $_template * @param bool $no_output_filter * * @throws \Exception */ public function render(Smarty_Internal_Template $_template, $no_output_filter = true) { if ($this->isCached($_template)) { if ($_template->smarty->debugging) { $_template->smarty->_debug->start_cache($_template); } if (!$this->processed) { $this->process($_template); } $this->getRenderedTemplateCode($_template); if ($_template->smarty->debugging) { $_template->smarty->_debug->end_cache($_template); } return; } else { $_template->smarty->ext->_updateCache->updateCache($this, $_template, $no_output_filter); } } /** * Check if cache is valid, lock cache if required * * @param \Smarty_Internal_Template $_template * * @return bool flag true if cache is valid */ public function isCached(Smarty_Internal_Template $_template) { if ($this->valid !== null) { return $this->valid; } while (true) { while (true) { if ($this->exists === false || $_template->smarty->force_compile || $_template->smarty->force_cache) { $this->valid = false; } else { $this->valid = true; } if ($this->valid && $_template->caching == Smarty::CACHING_LIFETIME_CURRENT && $_template->cache_lifetime >= 0 && time() > ($this->timestamp + $_template->cache_lifetime) ) { // lifetime expired $this->valid = false; } if ($this->valid && $_template->smarty->compile_check == 1 && $_template->source->getTimeStamp() > $this->timestamp ) { $this->valid = false; } if ($this->valid || !$_template->smarty->cache_locking) { break; } if (!$this->handler->locked($_template->smarty, $this)) { $this->handler->acquireLock($_template->smarty, $this); break 2; } $this->handler->populate($this, $_template); } if ($this->valid) { if (!$_template->smarty->cache_locking || $this->handler->locked($_template->smarty, $this) === null) { // load cache file for the following checks if ($_template->smarty->debugging) { $_template->smarty->_debug->start_cache($_template); } if ($this->handler->process($_template, $this) === false) { $this->valid = false; } else { $this->processed = true; } if ($_template->smarty->debugging) { $_template->smarty->_debug->end_cache($_template); } } else { $this->is_locked = true; continue; } } else { return $this->valid; } if ($this->valid && $_template->caching === Smarty::CACHING_LIFETIME_SAVED && $_template->cached->cache_lifetime >= 0 && (time() > ($_template->cached->timestamp + $_template->cached->cache_lifetime)) ) { $this->valid = false; } if ($_template->smarty->cache_locking) { if (!$this->valid) { $this->handler->acquireLock($_template->smarty, $this); } elseif ($this->is_locked) { $this->handler->releaseLock($_template->smarty, $this); } } return $this->valid; } return $this->valid; } /** * Process cached template * * @param Smarty_Internal_Template $_template template object * @param bool $update flag if called because cache update */ public function process(Smarty_Internal_Template $_template, $update = false) { if ($this->handler->process($_template, $this, $update) === false) { $this->valid = false; } if ($this->valid) { $this->processed = true; } else { $this->processed = false; } } /** * Read cache content from handler * * @param Smarty_Internal_Template $_template template object * * @return string content */ public function read(Smarty_Internal_Template $_template) { if (!$_template->source->handler->recompiled) { return $this->handler->readCachedContent($_template); } return false; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_tplfunction.php0000664000175000017500000000755212717671461030014 0ustar daviddavidtpl_function[$name])) { if (!$tpl->caching || ($tpl->caching && $nocache)) { $function = $tpl->tpl_function[$name]['call_name']; } else { if (isset($tpl->tpl_function[$name]['call_name_caching'])) { $function = $tpl->tpl_function[$name]['call_name_caching']; } else { $function = $tpl->tpl_function[$name]['call_name']; } } if (function_exists($function)) { $function ($tpl, $params); return; } // try to load template function dynamically if ($this->addTplFuncToCache($tpl, $name, $function)) { $function ($tpl, $params); return; } } throw new SmartyException("Unable to find template function '{$name}'"); } /** * * Add template function to cache file for nocache calls * * @param Smarty_Internal_Template $tpl * @param string $_name template function name * @param string $_function PHP function name * * @return bool */ public function addTplFuncToCache(Smarty_Internal_Template $tpl, $_name, $_function) { $funcParam = $tpl->tpl_function[$_name]; if (is_file($funcParam['compiled_filepath'])) { // read compiled file $code = file_get_contents($funcParam['compiled_filepath']); // grab template function if (preg_match("/\/\* {$_function} \*\/([\S\s]*?)\/\*\/ {$_function} \*\//", $code, $match)) { // grab source info from file dependency preg_match("/\s*'{$funcParam['uid']}'([\S\s]*?)\),/", $code, $match1); unset($code); // make PHP function known eval($match[0]); if (function_exists($_function)) { // search cache file template $tplPtr = $tpl; while (!isset($tplPtr->cached) && isset($tplPtr->parent)) { $tplPtr = $tplPtr->parent; } // add template function code to cache file if (isset($tplPtr->cached)) { $cache = $tplPtr->cached; $content = $cache->read($tplPtr); if ($content) { // check if we must update file dependency if (!preg_match("/'{$funcParam['uid']}'(.*?)'nocache_hash'/", $content, $match2)) { $content = preg_replace("/('file_dependency'(.*?)\()/", "\\1{$match1[0]}", $content); } $tplPtr->smarty->ext->_updateCache->write($cache, $tplPtr, preg_replace('/\s*\?>\s*$/', "\n", $content) . "\n" . preg_replace(array('/^\s*<\?php\s+/', '/\s*\?>\s*$/'), "\n", $match[0])); } } return true; } } } return false; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_cacheresource_custom.php0000664000175000017500000002340412717671461026207 0ustar daviddavidcache_id) ? preg_replace('![^\w\|]+!', '_', $cached->cache_id) : null; $_compile_id = isset($cached->compile_id) ? preg_replace('![^\w]+!', '_', $cached->compile_id) : null; $path = $cached->source->filepath . $_cache_id . $_compile_id; $cached->filepath = sha1($path); if ($_template->smarty->cache_locking) { $cached->lock_id = sha1('lock.' . $path); } $this->populateTimestamp($cached); } /** * populate Cached Object with timestamp and exists from Resource * * @param Smarty_Template_Cached $cached * * @return void */ public function populateTimestamp(Smarty_Template_Cached $cached) { $mtime = $this->fetchTimestamp($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id); if ($mtime !== null) { $cached->timestamp = $mtime; $cached->exists = !!$cached->timestamp; return; } $timestamp = null; $this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $cached->content, $timestamp); $cached->timestamp = isset($timestamp) ? $timestamp : false; $cached->exists = !!$cached->timestamp; } /** * Read the cached template and process the header * * @param Smarty_Internal_Template $_template template object * @param Smarty_Template_Cached $cached cached object * @param bool $update flag if called because cache update * * @return boolean true or false if the cached content does not exist */ public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false) { if (!$cached) { $cached = $_template->cached; } $content = $cached->content ? $cached->content : null; $timestamp = $cached->timestamp ? $cached->timestamp : null; if ($content === null || !$timestamp) { $this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp); } if (isset($content)) { /** @var Smarty_Internal_Template $_smarty_tpl * used in evaluated code */ $_smarty_tpl = $_template; eval("?>" . $content); $cached->content = null; return true; } return false; } /** * Write the rendered template output to cache * * @param Smarty_Internal_Template $_template template object * @param string $content content to cache * * @return boolean success */ public function writeCachedContent(Smarty_Internal_Template $_template, $content) { return $this->save($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $_template->cache_lifetime, $content); } /** * Read cached template from cache * * @param Smarty_Internal_Template $_template template object * * @return string content */ public function readCachedContent(Smarty_Internal_Template $_template) { $content = $_template->cached->content ? $_template->cached->content : null; $timestamp = null; if ($content === null) { $timestamp = null; $this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp); } if (isset($content)) { return $content; } return false; } /** * Empty cache * * @param Smarty $smarty Smarty object * @param integer $exp_time expiration time (number of seconds, not timestamp) * * @return integer number of cache files deleted */ public function clearAll(Smarty $smarty, $exp_time = null) { return $this->delete(null, null, null, $exp_time); } /** * Empty cache for a specific template * * @param Smarty $smarty Smarty object * @param string $resource_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param integer $exp_time expiration time (number of seconds, not timestamp) * * @return integer number of cache files deleted */ public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) { $cache_name = null; if (isset($resource_name)) { $source = Smarty_Template_Source::load(null, $smarty, $resource_name); if ($source->exists) { $cache_name = $source->name; } else { return 0; } // remove from template cache if (isset($smarty->_cache['template_objects'])) { foreach ($smarty->_cache['template_objects'] as $key => $_tpl) { if (isset($_tpl->cached) && $_tpl->source->uid == $source->uid) { unset($smarty->_cache['template_objects'][$key]); } } } } return $this->delete($cache_name, $cache_id, $compile_id, $exp_time); } /** * Check is cache is locked for this template * * @param Smarty $smarty Smarty object * @param Smarty_Template_Cached $cached cached object * * @return boolean true or false if cache is locked */ public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) { $id = $cached->lock_id; $name = $cached->source->name . '.lock'; $mtime = $this->fetchTimestamp($id, $name, $cached->cache_id, $cached->compile_id); if ($mtime === null) { $this->fetch($id, $name, $cached->cache_id, $cached->compile_id, $content, $mtime); } return $mtime && ($t = time()) - $mtime < $smarty->locking_timeout; } /** * Lock cache for this template * * @param Smarty $smarty Smarty object * @param Smarty_Template_Cached $cached cached object * * @return bool|void */ public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) { $cached->is_locked = true; $id = $cached->lock_id; $name = $cached->source->name . '.lock'; $this->save($id, $name, $cached->cache_id, $cached->compile_id, $smarty->locking_timeout, ''); } /** * Unlock cache for this template * * @param Smarty $smarty Smarty object * @param Smarty_Template_Cached $cached cached object * * @return bool|void */ public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) { $cached->is_locked = false; $name = $cached->source->name . '.lock'; $this->delete($name, $cached->cache_id, $cached->compile_id, null); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_setfilter.php0000664000175000017500000000376012717671461027412 0ustar daviddavidvariable_filter_stack[] = $compiler->variable_filters; $compiler->variable_filters = $parameter['modifier_list']; // this tag does not return compiled code $compiler->has_code = false; return true; } } /** * Smarty Internal Plugin Compile Setfilterclose Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase { /** * Compiles code for the {/setfilter} tag * This tag does not generate compiled output. It resets variable filter. * * @param array $args array with attributes from parser * @param object $compiler compiler object * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { $_attr = $this->getAttributes($compiler, $args); // reset variable filter to previous state if (count($compiler->variable_filter_stack)) { $compiler->variable_filters = array_pop($compiler->variable_filter_stack); } else { $compiler->variable_filters = array(); } // this tag does not return compiled code $compiler->has_code = false; return true; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_clearcache.php0000664000175000017500000000231312717671461027304 0ustar daviddavidinvalidLoadedCache($smarty); return $_cache_resource->clear($smarty, $template_name, $cache_id, $compile_id, $exp_time); } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_config_load.php0000664000175000017500000000643312717671461027655 0ustar daviddavid true, 'parent' => true, 'root' => true, 'global' => true, 'smarty' => true, 'tpl_root' => true); /** * Compiles code for the {config_load} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * * @return string compiled code * @throws \SmartyCompilerException */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->trigger_template_error('nocache option not allowed', null, true); } // save possible attributes $conf_file = $_attr['file']; if (isset($_attr['section'])) { $section = $_attr['section']; } else { $section = 'null'; } $_scope = Smarty::SCOPE_LOCAL; if (isset($_attr['scope'])) { $_attr['scope'] = trim($_attr['scope'], "'\""); if (!isset($this->valid_scopes[$_attr['scope']])) { $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true); } if ($_attr['scope'] != 'local') { if ($_attr['scope'] == 'parent') { $_scope = Smarty::SCOPE_PARENT; } elseif ($_attr['scope'] == 'root') { $_scope = Smarty::SCOPE_ROOT; } elseif ($_attr['scope'] == 'global') { $_scope = Smarty::SCOPE_GLOBAL; } elseif ($_attr['scope'] == 'smarty') { $_scope = Smarty::SCOPE_SMARTY; } elseif ($_attr['scope'] == 'tpl_root') { $_scope = Smarty::SCOPE_TPL_ROOT; } $_scope += (isset($_attr['bubble_up']) && $_attr['bubble_up'] == 'false') ? 0 : Smarty::SCOPE_BUBBLE_UP; } } // create config object $_output = "smarty->ext->configLoad->_loadConfigFile(\$_smarty_tpl, {$conf_file}, {$section}, {$_scope});\n?>\n"; return $_output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_registercacheresource.php0000664000175000017500000000222112717671461031610 0ustar daviddavidsmarty) ? $obj->smarty : $obj; $smarty->registered_cache_resources[$name] = $resource_handler; return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_extension_clear.php0000664000175000017500000001203512717671461027056 0ustar daviddavidclear() method file cache file resource * * @package Smarty * @subpackage PluginsInternal * @author Uwe Tews */ class Smarty_Internal_Extension_Clear { /** * Empty cache for a specific template * * @param Smarty $smarty * @param string $resource_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param integer $exp_time expiration time (number of seconds, not timestamp) * * @return integer number of cache files deleted */ public static function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) { $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null; $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null; $_dir_sep = $smarty->use_sub_dirs ? '/' : '^'; $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0; $_dir = $smarty->getCacheDir(); if ($_dir == '/') { //We should never want to delete this! return 0; } $_dir_length = strlen($_dir); if (isset($_cache_id)) { $_cache_id_parts = explode('|', $_cache_id); $_cache_id_parts_count = count($_cache_id_parts); if ($smarty->use_sub_dirs) { foreach ($_cache_id_parts as $id_part) { $_dir .= $id_part . DS; } } } if (isset($resource_name)) { $_save_stat = $smarty->caching; $smarty->caching = true; $tpl = new $smarty->template_class($resource_name, $smarty); $smarty->caching = $_save_stat; // remove from template cache $tpl->source; // have the template registered before unset() if ($tpl->source->exists) { $_resourcename_parts = basename(str_replace('^', '/', $tpl->cached->filepath)); } else { return 0; } } $_count = 0; $_time = time(); if (file_exists($_dir)) { $_cacheDirs = new RecursiveDirectoryIterator($_dir); $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST); foreach ($_cache as $_file) { if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { continue; } // directory ? if ($_file->isDir()) { if (!$_cache->isDot()) { // delete folder if empty @rmdir($_file->getPathname()); } } else { $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string) $_file, $_dir_length))); $_parts_count = count($_parts); // check name if (isset($resource_name)) { if ($_parts[$_parts_count - 1] != $_resourcename_parts) { continue; } } // check compile id if (isset($_compile_id) && (!isset($_parts[$_parts_count - 2 - $_compile_id_offset]) || $_parts[$_parts_count - 2 - $_compile_id_offset] != $_compile_id) ) { continue; } // check cache id if (isset($_cache_id)) { // count of cache id parts $_parts_count = (isset($_compile_id)) ? $_parts_count - 2 - $_compile_id_offset : $_parts_count - 1 - $_compile_id_offset; if ($_parts_count < $_cache_id_parts_count) { continue; } for ($i = 0; $i < $_cache_id_parts_count; $i ++) { if ($_parts[$i] != $_cache_id_parts[$i]) { continue 2; } } } // expired ? if (isset($exp_time)) { if ($exp_time < 0) { preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match); if ($_time < (@filemtime($_file) + $match[1])) { continue; } } else { if ($_time - @filemtime($_file) < $exp_time) { continue; } } } $_count += @unlink((string) $_file) ? 1 : 0; if (function_exists('opcache_invalidate')) { opcache_invalidate((string) $_file); } } } } return $_count; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_call.php0000664000175000017500000000545512717671461026327 0ustar daviddavidgetAttributes($compiler, $args); // save possible attributes if (isset($_attr['assign'])) { // output will be stored in a smarty variable instead of being displayed $_assign = $_attr['assign']; } //$_name = trim($_attr['name'], "'\""); $_name = $_attr['name']; unset($_attr['name'], $_attr['assign'], $_attr['nocache']); // set flag (compiled code of {function} must be included in cache file if (!$compiler->template->caching || $compiler->nocache || $compiler->tag_nocache) { $_nocache = 'true'; } else { $_nocache = 'false'; } $_paramsArray = array(); foreach ($_attr as $_key => $_value) { if (is_int($_key)) { $_paramsArray[] = "$_key=>$_value"; } else { $_paramsArray[] = "'$_key'=>$_value"; } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; //$compiler->suppressNocacheProcessing = true; // was there an assign attribute if (isset($_assign)) { $_output = "smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});\n\$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n"; } else { $_output = "smarty->ext->_tplFunction->callTemplateFunction(\$_smarty_tpl, {$_name}, {$_params}, {$_nocache});?>\n"; } return $_output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_clearallassign.php0000664000175000017500000000141212717671461030215 0ustar daviddavidtpl_vars = array(); return $data; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_loadfilter.php0000664000175000017500000000421112717671461027356 0ustar daviddavid true, 'post' => true, 'output' => true, 'variable' => true); /** * load a filter of specified type and name * * @api Smarty::loadFilter() * * @link http://www.smarty.net/docs/en/api.load.filter.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $type filter type * @param string $name filter name * * @return bool * @throws SmartyException if filter could not be loaded */ public function loadFilter(Smarty_Internal_TemplateBase $obj, $type, $name) { $smarty = isset($obj->smarty) ? $obj->smarty : $obj; $this->_checkFilterType($type); $_plugin = "smarty_{$type}filter_{$name}"; $_filter_name = $_plugin; if (is_callable($_plugin)) { $smarty->registered_filters[$type][$_filter_name] = $_plugin; return true; } if ($smarty->loadPlugin($_plugin)) { if (class_exists($_plugin, false)) { $_plugin = array($_plugin, 'execute'); } if (is_callable($_plugin)) { $smarty->registered_filters[$type][$_filter_name] = $_plugin; return true; } } throw new SmartyException("{$type}filter \"{$name}\" not found or callable"); } /** * Check if filter type is valid * * @param string $type * * @throws \SmartyException */ public function _checkFilterType($type) { if (!isset($this->filterTypes[$type])) { throw new SmartyException("Illegal filter type \"{$type}\""); } } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_subtemplate.php0000664000175000017500000002051712717671461027770 0ustar daviddavidtplObjects) ? $parent->smarty->_getTemplateId($template, $cache_id, $compile_id, $caching) : null; // already in template cache? /* @var Smarty_Internal_Template $tpl */ if (isset($_templateId) && isset($this->tplObjects[$_templateId])) { // clone cached template object because of possible recursive call $tpl = clone $this->tplObjects[$_templateId]; $tpl->parent = $parent; // if $caching mode changed the compiled resource is invalid if ((bool) $tpl->caching !== (bool) $caching) { unset($tpl->compiled); } // get variables from calling scope $tpl->tpl_vars = $parent->tpl_vars; $tpl->config_vars = $parent->config_vars; // get template functions $tpl->tpl_function = $parent->tpl_function; // copy inheritance object? if (isset($parent->ext->_inheritance)) { $tpl->ext->_inheritance = $parent->ext->_inheritance; } else { unset($tpl->ext->_inheritance); } } else { $tpl = clone $parent; $tpl->parent = $parent; if (!isset($tpl->templateId) || $tpl->templateId !== $_templateId) { $tpl->templateId = $_templateId; $tpl->template_resource = $template; $tpl->cache_id = $cache_id; $tpl->compile_id = $compile_id; if (isset($uid)) { // for inline templates we can get all resource information from file dependency if (isset($tpl->compiled->file_dependency[$uid])) { list($filepath, $timestamp, $resource) = $tpl->compiled->file_dependency[$uid]; $tpl->source = new Smarty_Template_Source(isset($tpl->smarty->_cache['resource_handlers'][$resource]) ? $tpl->smarty->_cache['resource_handlers'][$resource] : Smarty_Resource::load($tpl->smarty, $resource), $tpl->smarty, $filepath, $resource, $filepath); $tpl->source->filepath = $filepath; $tpl->source->timestamp = $timestamp; $tpl->source->exists = true; $tpl->source->uid = $uid; } else { $tpl->source = null; } } else { $tpl->source = null; } if (!isset($tpl->source)) { $tpl->source = Smarty_Template_Source::load($tpl); unset($tpl->compiled); } unset($tpl->cached); } } $tpl->caching = $caching; $tpl->cache_lifetime = $cache_lifetime; if ($caching == 9999) { $tpl->cached = $parent->cached; } // set template scope $tpl->scope = $scope; $scopePtr = false; if ($scope & ~Smarty::SCOPE_BUBBLE_UP) { if ($scope == Smarty::SCOPE_GLOBAL) { $tpl->tpl_vars = Smarty::$global_tpl_vars; $tpl->config_vars = $tpl->smarty->config_vars; $scopePtr = true; } else { if ($scope == Smarty::SCOPE_PARENT) { $scopePtr = $parent; } elseif ($scope == Smarty::SCOPE_SMARTY) { $scopePtr = $tpl->smarty; } else { $scopePtr = $tpl; while (isset($scopePtr->parent)) { if ($scopePtr->parent->_objType != 2 && $scope & Smarty::SCOPE_TPL_ROOT) { break; } $scopePtr = $scopePtr->parent; } } $tpl->tpl_vars = $scopePtr->tpl_vars; $tpl->config_vars = $scopePtr->config_vars; } } if (!isset($this->tplObjects[$tpl->_getTemplateId()]) && !$tpl->source->handler->recompiled) { // if template is called multiple times set flag to to cache template objects $forceTplCache = $forceTplCache || (isset($this->subTplInfo[$tpl->template_resource]) && $this->subTplInfo[$tpl->template_resource] > 1); // check if template object should be cached if ($tpl->parent->_objType == 2 && isset($this->tplObjects[$tpl->parent->templateId]) || ($forceTplCache && $tpl->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_AUTOMATIC) || ($tpl->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) ) { $this->tplObjects[$tpl->_getTemplateId()] = $tpl; } } if (!empty($data)) { // set up variable values foreach ($data as $_key => $_val) { $tpl->tpl_vars[$_key] = new Smarty_Variable($_val); } } if (isset($uid)) { if ($parent->smarty->debugging) { $parent->smarty->_debug->start_template($tpl); $parent->smarty->_debug->start_render($tpl); } $tpl->compiled->getRenderedTemplateCode($tpl, $content_func); if ($parent->smarty->debugging) { $parent->smarty->_debug->end_template($tpl); $parent->smarty->_debug->end_render($tpl); } if ($tpl->caching == 9999 && $tpl->compiled->has_nocache_code) { $parent->cached->hashes[$tpl->compiled->nocache_hash] = true; } } else { if (isset($tpl->compiled)) { $tpl->compiled->render($tpl); } else { $tpl->render(); } } if ($scopePtr) { if ($scope == Smarty::SCOPE_GLOBAL) { Smarty::$global_tpl_vars = $tpl->tpl_vars; $tpl->smarty->config_vars = $tpl->config_vars; } else { $scopePtr->tpl_vars = $tpl->tpl_vars; $scopePtr->config_vars = $tpl->config_vars; } } } /** * Get called subtemplates from compiled template and save call count * * @param \Smarty_Internal_Template $tpl */ public function registerSubTemplates(Smarty_Internal_Template $tpl) { foreach ($tpl->compiled->includes as $name => $count) { if (isset($this->subTplInfo[$name])) { $this->subTplInfo[$name] += $count; } else { $this->subTplInfo[$name] = $count; } } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_clearassign.php0000664000175000017500000000205512717671461027530 0ustar daviddavidtpl_vars[$curr_var]); } } else { unset($data->tpl_vars[$tpl_var]); } return $data; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_continue.php0000664000175000017500000000452112717671461027231 0ustar daviddavid true, 'foreach' => true, 'while' => true, 'section' => true); // check and get attributes $_attr = $this->getAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->trigger_template_error('nocache option not allowed', null, true); } if (isset($_attr['levels'])) { if (!is_numeric($_attr['levels'])) { $compiler->trigger_template_error('level attribute must be a numeric constant', null, true); } $_levels = $_attr['levels']; } else { $_levels = 1; } $level_count = $_levels; $stack_count = count($compiler->_tag_stack) - 1; while ($level_count > 0 && $stack_count >= 0) { if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { $level_count --; } $stack_count --; } if ($level_count != 0) { $compiler->trigger_template_error("cannot continue {$_levels} level(s)", null, true); } return ""; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php0000664000175000017500000001427612717671461030043 0ustar daviddavidsmarty = $smarty; // get required plugins $this->lexer_class = $lexer_class; $this->parser_class = $parser_class; $this->smarty = $smarty; $this->config_data['sections'] = array(); $this->config_data['vars'] = array(); } /** * Method to compile Smarty config source. * * @param Smarty_Internal_Template $template * * @return bool true if compiling succeeded, false if it failed */ public function compileTemplate(Smarty_Internal_Template $template) { $this->template = $template; $this->template->compiled->file_dependency[$this->template->source->uid] = array($this->template->source->filepath, $this->template->source->getTimeStamp(), $this->template->source->type); if ($this->smarty->debugging) { $this->smarty->_debug->start_compile($this->template); } // init the lexer/parser to compile the config file /* @var Smarty_Internal_ConfigFileLexer $lex */ $lex = new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $template->source->getContent()) . "\n", $this); /* @var Smarty_Internal_ConfigFileParser $parser */ $parser = new $this->parser_class($lex, $this); if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { $mbEncoding = mb_internal_encoding(); mb_internal_encoding('ASCII'); } else { $mbEncoding = null; } if ($this->smarty->_parserdebug) { $parser->PrintTrace(); } // get tokens from lexer and parse them while ($lex->yylex()) { if ($this->smarty->_parserdebug) { echo "
Parsing {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n"; } $parser->doParse($lex->token, $lex->value); } // finish parsing process $parser->doParse(0, 0); if ($mbEncoding) { mb_internal_encoding($mbEncoding); } if ($this->smarty->debugging) { $this->smarty->_debug->end_compile($this->template); } // template header code $template_header = "template->source->filepath . "\" */ ?>\n"; $code = 'smarty->ext->configLoad->_loadConfigVars($_smarty_tpl, ' . var_export($this->config_data, true) . '); ?>'; return $template_header . $this->template->smarty->ext->_codeFrame->create($this->template, $code); } /** * display compiler error messages without dying * If parameter $args is empty it is a parser detected syntax error. * In this case the parser is called to obtain information about expected tokens. * If parameter $args contains a string this is used as error message * * @param string $args individual error message or null * * @throws SmartyCompilerException */ public function trigger_config_file_error($args = null) { $this->lex = Smarty_Internal_Configfilelexer::instance(); $this->parser = Smarty_Internal_Configfileparser::instance(); // get config source line which has error $line = $this->lex->line; if (isset($args)) { // $line--; } $match = preg_split("/\n/", $this->lex->data); $error_text = "Syntax error in config file '{$this->template->source->filepath}' on line {$line} '{$match[$line - 1]}' "; if (isset($args)) { // individual error message $error_text .= $args; } else { // expected token from parser foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) { $exp_token = $this->parser->yyTokenName[$token]; if (isset($this->lex->smarty_token_names[$exp_token])) { // token type from lexer $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"'; } else { // otherwise internal token name $expect[] = $this->parser->yyTokenName[$token]; } } // output parser error message $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect); } throw new SmartyCompilerException($error_text); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_setdebugtemplate.php0000664000175000017500000000202212717671461030565 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (!is_readable($tpl_name)) { throw new SmartyException("Unknown file '{$tpl_name}'"); } $smarty->debug_tpl = $tpl_name; return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_resource_php.php0000664000175000017500000000631512717671461026376 0ustar daviddavidshort_open_tag = ini_get('short_open_tag'); } /** * Load template's source from file into current template object * * @param Smarty_Template_Source $source source object * * @return string template source * @throws SmartyException if source cannot be loaded */ public function getContent(Smarty_Template_Source $source) { if ($source->exists) { return ''; } throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); } /** * Render and output the template (without using the compiler) * * @param Smarty_Template_Source $source source object * @param Smarty_Internal_Template $_template template object * * @return void * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled */ public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template) { if (!$source->smarty->allow_php_templates) { throw new SmartyException("PHP templates are disabled"); } if (!$source->exists) { if (isset($_template->parent) && $_template->parent->_objType == 2) { $parent_resource = " in '{$_template->parent->template_resource}'"; } else { $parent_resource = ''; } throw new SmartyException("Unable to load template {$source->type} '{$source->name}'{$parent_resource}"); } // prepare variables extract($_template->getTemplateVars()); // include PHP template with short open tags enabled ini_set('short_open_tag', '1'); /** @var Smarty_Internal_Template $_smarty_template * used in included file */ $_smarty_template = $_template; include($source->filepath); ini_set('short_open_tag', $this->short_open_tag); } /** * populate compiled object with compiled filepath * * @param Smarty_Template_Compiled $compiled compiled object * @param Smarty_Internal_Template $_template template object (is ignored) */ public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template) { $compiled->filepath = false; $compiled->timestamp = false; $compiled->exists = false; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php0000664000175000017500000001757212717671461030747 0ustar daviddavidgetAttributes($compiler, $args); $output = $parameter['value']; // loop over list of modifiers foreach ($parameter['modifierlist'] as $single_modifier) { $modifier = $single_modifier[0]; $single_modifier[0] = $output; $params = implode(',', $single_modifier); // check if we know already the type of modifier if (isset($compiler->known_modifier_type[$modifier])) { $modifier_types = array($compiler->known_modifier_type[$modifier]); } else { $modifier_types = array(1, 2, 3, 4, 5, 6); } foreach ($modifier_types as $type) { switch ($type) { case 1: // registered modifier if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier])) { $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0]; if (!is_array($function)) { $output = "{$function}({$params})"; } else { if (is_object($function[0])) { $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; } else { $output = $function[0] . '::' . $function[1] . '(' . $params . ')'; } } $compiler->known_modifier_type[$modifier] = $type; break 2; } break; case 2: // registered modifier compiler if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0])) { $output = call_user_func($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0], $single_modifier, $compiler->smarty); $compiler->known_modifier_type[$modifier] = $type; break 2; } break; case 3: // modifiercompiler plugin if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) { // check if modifier allowed if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler) ) { $plugin = 'smarty_modifiercompiler_' . $modifier; $output = $plugin($single_modifier, $compiler); } $compiler->known_modifier_type[$modifier] = $type; break 2; } break; case 4: // modifier plugin if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) { // check if modifier allowed if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler) ) { $output = "{$function}({$params})"; } $compiler->known_modifier_type[$modifier] = $type; break 2; } break; case 5: // PHP function if (is_callable($modifier)) { // check if modifier allowed if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler) ) { $output = "{$modifier}({$params})"; } $compiler->known_modifier_type[$modifier] = $type; break 2; } break; case 6: // default plugin handler if (isset($compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier]) || (is_callable($compiler->smarty->default_plugin_handler_func) && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER)) ) { $function = $compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0]; // check if modifier allowed if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler) ) { if (!is_array($function)) { $output = "{$function}({$params})"; } else { if (is_object($function[0])) { $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')'; } else { $output = $function[0] . '::' . $function[1] . '(' . $params . ')'; } } } if (isset($compiler->parent_compiler->template->compiled->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) || isset($compiler->parent_compiler->template->compiled->required_plugins['compiled'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) ) { // was a plugin $compiler->known_modifier_type[$modifier] = 4; } else { $compiler->known_modifier_type[$modifier] = $type; } break 2; } } } if (!isset($compiler->known_modifier_type[$modifier])) { $compiler->trigger_template_error("unknown modifier \"" . $modifier . "\"", null, true); } } return $output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_getautoloadfilters.php0000664000175000017500000000247212717671461031141 0ustar daviddavid array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type * was specified */ public function getAutoloadFilters(Smarty_Internal_TemplateBase $obj, $type = null) { $smarty = isset($obj->smarty) ? $obj->smarty : $obj; if ($type !== null) { $this->_checkFilterType($type); return isset($smarty->autoload_filters[$type]) ? $smarty->autoload_filters[$type] : array(); } return $smarty->autoload_filters; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_getconfigvars.php0000664000175000017500000000313412717671461030075 0ustar daviddavidconfig_vars[$varname])) { return $_ptr->config_vars[$varname]; } } else { $var_array = array_merge($_ptr->config_vars, $var_array); } // not found, try at parent if ($search_parents) { $_ptr = $_ptr->parent; } else { $_ptr = null; } } if (isset($varname)) { return ''; } else { return $var_array; } } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php0000664000175000017500000013335212717671461030103 0ustar daviddavidsmarty = $smarty; $this->nocache_hash = str_replace(array('.', ','), '_', uniqid(rand(), true)); } /** * Method to compile a Smarty template * * @param Smarty_Internal_Template $template template object to compile * @param bool $nocache true is shall be compiled in nocache mode * @param null|Smarty_Internal_TemplateCompilerBase $parent_compiler * * @return bool true if compiling succeeded, false if it failed * @throws \Exception */ public function compileTemplate(Smarty_Internal_Template $template, $nocache = null, Smarty_Internal_TemplateCompilerBase $parent_compiler = null) { // get code frame of compiled template $_compiled_code = $template->smarty->ext->_codeFrame->create($template, $this->compileTemplateSource($template, $nocache, $parent_compiler), $this->postFilter($this->blockOrFunctionCode) . join('', $this->mergedSubTemplatesCode), false, $this); return $_compiled_code; } /** * Compile template source and run optional post filter * * @param \Smarty_Internal_Template $template * @param null|bool $nocache flag if template must be compiled in nocache mode * @param \Smarty_Internal_TemplateCompilerBase $parent_compiler * * @return string * @throws \Exception */ public function compileTemplateSource(Smarty_Internal_Template $template, $nocache = null, Smarty_Internal_TemplateCompilerBase $parent_compiler = null) { try { // save template object in compiler class $this->template = $template; if (property_exists($this->template->smarty, 'plugin_search_order')) { $this->plugin_search_order = $this->template->smarty->plugin_search_order; } if ($this->smarty->debugging) { $this->smarty->_debug->start_compile($this->template); } if (isset($this->template->smarty->security_policy)) { $this->php_handling = $this->template->smarty->security_policy->php_handling; } else { $this->php_handling = $this->template->smarty->php_handling; } $this->parent_compiler = $parent_compiler ? $parent_compiler : $this; $nocache = isset($nocache) ? $nocache : false; if (empty($template->compiled->nocache_hash)) { $template->compiled->nocache_hash = $this->nocache_hash; } else { $this->nocache_hash = $template->compiled->nocache_hash; } // flag for nocache sections $this->nocache = $nocache; $this->tag_nocache = false; // reset has nocache code flag $this->template->compiled->has_nocache_code = false; $this->has_variable_string = false; $this->prefix_code = array(); // add file dependency $this->parent_compiler->template->compiled->file_dependency[ $this->template->source->uid ] = array($this->template->source->filepath, $this->template->source->getTimeStamp(), $this->template->source->type); $this->smarty->_current_file = $this->template->source->filepath; // get template source if (!empty($this->template->source->components)) { // we have array of inheritance templates by extends: resource // generate corresponding source code sequence $_content = Smarty_Internal_Compile_Extends::extendsSourceArrayCode($this->template->source->components); } else { // get template source $_content = $this->template->source->getContent(); } $_compiled_code = $this->postFilter($this->doCompile($this->preFilter($_content), true)); } catch (Exception $e) { if ($this->smarty->debugging) { $this->smarty->_debug->end_compile($this->template); } $this->_tag_stack = array(); $this->_tag_objects = array(); // free memory $this->parent_compiler = null; $this->template = null; $this->parser = null; throw $e; } if ($this->smarty->debugging) { $this->smarty->_debug->end_compile($this->template); } $this->parent_compiler = null; $this->template = null; $this->parser = null; return $_compiled_code; } /** * Optionally process compiled code by post filter * * @param string $code compiled code * * @return string * @throws \SmartyException */ public function postFilter($code) { // run post filter if on code if (!empty($code) && (isset($this->smarty->autoload_filters[ 'post' ]) || isset($this->smarty->registered_filters[ 'post' ])) ) { return $this->smarty->ext->_filterHandler->runFilter('post', $code, $this->template); } else { return $code; } } /** * Run optional prefilter * * @param string $_content template source * * @return string * @throws \SmartyException */ public function preFilter($_content) { // run pre filter if required if ($_content != '' && ((isset($this->smarty->autoload_filters[ 'pre' ]) || isset($this->smarty->registered_filters[ 'pre' ]))) ) { return $this->smarty->ext->_filterHandler->runFilter('pre', $_content, $this->template); } else { return $_content; } } /** * Compile Tag * This is a call back from the lexer/parser * * Save current prefix code * Compile tag * Merge tag prefix code with saved one * (required nested tags in attributes) * * @param string $tag tag name * @param array $args array with tag attributes * @param array $parameter array with compilation parameter * * @throws SmartyCompilerException * @throws SmartyException * @return string compiled code */ public function compileTag($tag, $args, $parameter = array()) { $this->prefixCodeStack[] = $this->prefix_code; $this->prefix_code = array(); $result = $this->compileTag2($tag, $args, $parameter); $this->prefix_code = array_merge($this->prefix_code, array_pop($this->prefixCodeStack)); return $result; } /** * Compile Tag * * @param string $tag tag name * @param array $args array with tag attributes * @param array $parameter array with compilation parameter * * @throws SmartyCompilerException * @throws SmartyException * @return string compiled code */ private function compileTag2($tag, $args, $parameter) { $plugin_type = ''; // $args contains the attributes parsed and compiled by the lexer/parser // assume that tag does compile into code, but creates no HTML output $this->has_code = true; $this->has_output = false; // log tag/attributes if (isset($this->smarty->_cache[ 'get_used_tags' ])) { $this->template->_cache[ 'used_tags' ][] = array($tag, $args); } // check nocache option flag if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args) || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args) ) { $this->tag_nocache = true; } // compile the smarty tag (required compile classes to compile the tag are auto loaded) if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) { if (isset($this->parent_compiler->template->tpl_function[ $tag ])) { // template defined by {template} tag $args[ '_attr' ][ 'name' ] = "'" . $tag . "'"; $_output = $this->callTagCompiler('call', $args, $parameter); } } if ($_output !== false) { if ($_output !== true) { // did we get compiled code if ($this->has_code) { // Does it create output? if ($this->has_output) { $_output .= "\n"; } // return compiled code return $_output; } } // tag did not produce compiled code return null; } else { // map_named attributes if (isset($args[ '_attr' ])) { foreach ($args[ '_attr' ] as $key => $attribute) { if (is_array($attribute)) { $args = array_merge($args, $attribute); } } } // not an internal compiler tag if (strlen($tag) < 6 || substr($tag, - 5) != 'close') { // check if tag is a registered object if (isset($this->smarty->registered_objects[ $tag ]) && isset($parameter[ 'object_method' ])) { $method = $parameter[ 'object_method' ]; if (!in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ]) && (empty($this->smarty->registered_objects[ $tag ][ 1 ]) || in_array($method, $this->smarty->registered_objects[ $tag ][ 1 ])) ) { return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $method); } elseif (in_array($method, $this->smarty->registered_objects[ $tag ][ 3 ])) { return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method); } else { // throw exception $this->trigger_template_error('not allowed method "' . $method . '" in registered object "' . $tag . '"', null, true); } } // check if tag is registered foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) { if (isset($this->smarty->registered_plugins[ $plugin_type ][ $tag ])) { // if compiler function plugin call it now if ($plugin_type == Smarty::PLUGIN_COMPILER) { $new_args = array(); foreach ($args as $key => $mixed) { if (is_array($mixed)) { $new_args = array_merge($new_args, $mixed); } else { $new_args[ $key ] = $mixed; } } if (!$this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 1 ]) { $this->tag_nocache = true; } $function = $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ]; if (!is_array($function)) { return $function($new_args, $this); } elseif (is_object($function[ 0 ])) { return $this->smarty->registered_plugins[ $plugin_type ][ $tag ][ 0 ][ 0 ]->{$function[ 1 ]}($new_args, $this); } else { return call_user_func_array($function, array($new_args, $this)); } } // compile registered function or block function if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) { return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); } } } // check plugins from plugins folder foreach ($this->plugin_search_order as $plugin_type) { if ($plugin_type == Smarty::PLUGIN_COMPILER && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) ) { $plugin = 'smarty_compiler_' . $tag; if (is_callable($plugin)) { // convert arguments format for old compiler plugins $new_args = array(); foreach ($args as $key => $mixed) { if (is_array($mixed)) { $new_args = array_merge($new_args, $mixed); } else { $new_args[ $key ] = $mixed; } } return $plugin($new_args, $this->smarty); } if (class_exists($plugin, false)) { $plugin_object = new $plugin; if (method_exists($plugin_object, 'compile')) { return $plugin_object->compile($args, $this); } } throw new SmartyException("Plugin \"{$tag}\" not callable"); } else { if ($function = $this->getPlugin($tag, $plugin_type)) { if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this) ) { return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function); } } } } if (is_callable($this->smarty->default_plugin_handler_func)) { $found = false; // look for already resolved tags foreach ($this->plugin_search_order as $plugin_type) { if (isset($this->default_handler_plugins[ $plugin_type ][ $tag ])) { $found = true; break; } } if (!$found) { // call default handler foreach ($this->plugin_search_order as $plugin_type) { if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) { $found = true; break; } } } if ($found) { // if compiler function plugin call it now if ($plugin_type == Smarty::PLUGIN_COMPILER) { $new_args = array(); foreach ($args as $mixed) { $new_args = array_merge($new_args, $mixed); } $function = $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ]; if (!is_array($function)) { return $function($new_args, $this); } elseif (is_object($function[ 0 ])) { return $this->default_handler_plugins[ $plugin_type ][ $tag ][ 0 ][ 0 ]->$function[ 1 ]($new_args, $this); } else { return call_user_func_array($function, array($new_args, $this)); } } else { return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag); } } } } else { // compile closing tag of block function $base_tag = substr($tag, 0, - 5); // check if closing tag is a registered object if (isset($this->smarty->registered_objects[ $base_tag ]) && isset($parameter[ 'object_method' ])) { $method = $parameter[ 'object_method' ]; if (in_array($method, $this->smarty->registered_objects[ $base_tag ][ 3 ])) { return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method); } else { // throw exception $this->trigger_template_error('not allowed closing tag method "' . $method . '" in registered object "' . $base_tag . '"', null, true); } } // registered block tag ? if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ]) || isset($this->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $base_tag ]) ) { return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag); } // registered function tag ? if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_FUNCTION ][ $tag ])) { return $this->callTagCompiler('private_registered_function', $args, $parameter, $tag); } // block plugin? if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) { return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function); } // function plugin? if ($function = $this->getPlugin($tag, Smarty::PLUGIN_FUNCTION)) { if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this) ) { return $this->callTagCompiler('private_function_plugin', $args, $parameter, $tag, $function); } } // registered compiler plugin ? if (isset($this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ])) { // if compiler function plugin call it now $args = array(); if (!$this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 1 ]) { $this->tag_nocache = true; } $function = $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ]; if (!is_array($function)) { return $function($args, $this); } elseif (is_object($function[ 0 ])) { return $this->smarty->registered_plugins[ Smarty::PLUGIN_COMPILER ][ $tag ][ 0 ][ 0 ]->$function[ 1 ]($args, $this); } else { return call_user_func_array($function, array($args, $this)); } } if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) { $plugin = 'smarty_compiler_' . $tag; if (is_callable($plugin)) { return $plugin($args, $this->smarty); } if (class_exists($plugin, false)) { $plugin_object = new $plugin; if (method_exists($plugin_object, 'compile')) { return $plugin_object->compile($args, $this); } } throw new SmartyException("Plugin \"{$tag}\" not callable"); } } $this->trigger_template_error("unknown tag \"" . $tag . "\"", null, true); } } /** * compile variable * * @param string $variable * * @return string */ public function compileVariable($variable) { if (strpos($variable, '(') == 0) { // not a variable variable $var = trim($variable, '\''); $this->tag_nocache = $this->tag_nocache | $this->template->ext->getTemplateVars->_getVariable($this->template, $var, null, true, false)->nocache; // todo $this->template->compiled->properties['variables'][$var] = $this->tag_nocache | $this->nocache; } return '$_smarty_tpl->tpl_vars[' . $variable . ']->value'; } /** * compile config variable * * @param string $variable * * @return string */ public function compileConfigVariable($variable) { // return '$_smarty_tpl->config_vars[' . $variable . ']'; return '$_smarty_tpl->smarty->ext->configLoad->_getConfigVariable($_smarty_tpl, ' . $variable . ')'; } /** * This method is called from parser to process a text content section * - remove text from inheritance child templates as they may generate output * - strip text if strip is enabled * * @param string $text * * @return null|\Smarty_Internal_ParseTree_Text */ public function processText($text) { if ((string) $text != '') { $store = array(); $_store = 0; $_offset = 0; if ($this->parser->strip) { if (strpos($text, '<') !== false) { // capture html elements not to be messed with $_offset = 0; if (preg_match_all('#(]*>.*?]*>)|(]*>.*?]*>)|(]*>.*?]*>)#is', $text, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) { foreach ($matches as $match) { $store[] = $match[ 0 ][ 0 ]; $_length = strlen($match[ 0 ][ 0 ]); $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@'; $text = substr_replace($text, $replace, $match[ 0 ][ 1 ] - $_offset, $_length); $_offset += $_length - strlen($replace); $_store ++; } } $expressions = array(// replace multiple spaces between tags by a single space // can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2', // remove spaces between attributes (but not in attribute values!) '#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5', '#^\s+<#Ss' => '<', '#>\s+$#Ss' => '>', $this->stripRegEx => ''); $text = preg_replace(array_keys($expressions), array_values($expressions), $text); $_offset = 0; if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $text, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) { foreach ($matches as $match) { $_length = strlen($match[ 0 ][ 0 ]); $replace = $store[ $match[ 1 ][ 0 ] ]; $text = substr_replace($text, $replace, $match[ 0 ][ 1 ] + $_offset, $_length); $_offset += strlen($replace) - $_length; $_store ++; } } } else { $text = preg_replace($this->stripRegEx, '', $text); } } return new Smarty_Internal_ParseTree_Text($text); } return null; } /** * lazy loads internal compile plugin for tag and calls the compile method * compile objects cached for reuse. * class name format: Smarty_Internal_Compile_TagName * plugin filename format: Smarty_Internal_TagName.php * * @param string $tag tag name * @param array $args list of tag attributes * @param mixed $param1 optional parameter * @param mixed $param2 optional parameter * @param mixed $param3 optional parameter * * @return string compiled code */ public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null) { // re-use object if already exists if (!isset($this->_tag_objects[ $tag ])) { // lazy load internal compiler plugin $_tag = explode('_', $tag); $_tag = array_map('ucfirst', $_tag); $class_name = 'Smarty_Internal_Compile_' . implode('_', $_tag); if (class_exists($class_name) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) ) { $this->_tag_objects[ $tag ] = new $class_name; } else { $this->_tag_objects[ $tag ] = false; return false; } } // compile this tag return $this->_tag_objects[ $tag ] === false ? false : $this->_tag_objects[ $tag ]->compile($args, $this, $param1, $param2, $param3); } /** * Check for plugins and return function name * * @param $plugin_name * @param string $plugin_type type of plugin * * @return string call name of function */ public function getPlugin($plugin_name, $plugin_type) { $function = null; if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { if (isset($this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) { $function = $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ]; } elseif (isset($this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) { $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ] = $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ]; $function = $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ]; } } else { if (isset($this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ])) { $function = $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ]; } elseif (isset($this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ])) { $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ] = $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ]; $function = $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ]; } } if (isset($function)) { if ($plugin_type == 'modifier') { $this->modifier_plugins[ $plugin_name ] = true; } return $function; } // loop through plugin dirs and find the plugin $function = 'smarty_' . $plugin_type . '_' . $plugin_name; $file = $this->smarty->loadPlugin($function, false); if (is_string($file)) { if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'file' ] = $file; $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ $plugin_type ][ 'function' ] = $function; } else { $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'file' ] = $file; $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ $plugin_type ][ 'function' ] = $function; } if ($plugin_type == 'modifier') { $this->modifier_plugins[ $plugin_name ] = true; } return $function; } if (is_callable($function)) { // plugin function is defined in the script return $function; } return false; } /** * Check for plugins by default plugin handler * * @param string $tag name of tag * @param string $plugin_type type of plugin * * @return boolean true if found */ public function getPluginFromDefaultHandler($tag, $plugin_type) { $callback = null; $script = null; $cacheable = true; $result = call_user_func_array($this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable)); if ($result) { $this->tag_nocache = $this->tag_nocache || !$cacheable; if ($script !== null) { if (is_file($script)) { if ($this->template->caching && ($this->nocache || $this->tag_nocache)) { $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'file' ] = $script; $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $tag ][ $plugin_type ][ 'function' ] = $callback; } else { $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'file' ] = $script; $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $tag ][ $plugin_type ][ 'function' ] = $callback; } require_once $script; } else { $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found"); } } if (!is_string($callback) && !(is_array($callback) && is_string($callback[ 0 ]) && is_string($callback[ 1 ])) ) { $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name"); } if (is_callable($callback)) { $this->default_handler_plugins[ $plugin_type ][ $tag ] = array($callback, true, array()); return true; } else { $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" not callable"); } } return false; } /** * Append code segments and remove unneeded ?> \s*$/', $left) && preg_match('/^\s*<\?php\s+/', $right)) { $left = preg_replace('/\s*\?>\s*$/', "\n", $left); $left .= preg_replace('/^\s*<\?php\s+/', '', $right); } else { $left .= $right; } return $left; } /** * Inject inline code for nocache template sections * This method gets the content of each template element from the parser. * If the content is compiled code and it should be not cached the code is injected * into the rendered output. * * @param string $content content of template element * @param boolean $is_code true if content is compiled code * * @return string content */ public function processNocacheCode($content, $is_code) { // If the template is not evaluated and we have a nocache section and or a nocache tag if ($is_code && !empty($content)) { // generate replacement code if ((!($this->template->source->handler->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing && ($this->nocache || $this->tag_nocache) ) { $this->template->compiled->has_nocache_code = true; $_output = addcslashes($content, '\'\\'); $_output = str_replace("^#^", "'", $_output); $_output = "nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n"; // make sure we include modifier plugins for nocache code foreach ($this->modifier_plugins as $plugin_name => $dummy) { if (isset($this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ])) { $this->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ $plugin_name ][ 'modifier' ] = $this->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ $plugin_name ][ 'modifier' ]; } } } else { $_output = $content; } } else { $_output = $content; } $this->modifier_plugins = array(); $this->suppressNocacheProcessing = false; $this->tag_nocache = false; return $_output; } /** * Get Id * * @param string $input * * @return bool|string */ public function getId($input) { if (preg_match('~^[\'"]*([0-9]*[a-zA-Z_]\w*)[\'"]*$~', $input, $match)) { return $match[ 1 ]; } return false; } /** * Get variable name from string * * @param string $input * * @return bool|string */ public function getVariableName($input) { if (preg_match('~^[$]_smarty_tpl->tpl_vars\[[\'"]*([0-9]*[a-zA-Z_]\w*)[\'"]*\]->value$~', $input, $match)) { return $match[ 1 ]; } return false; } /** * Generate nocache code string * * @param string $code PHP code * * @return string */ public function makeNocacheCode($code) { return "echo '/*%%SmartyNocache:{$this->nocache_hash}%%*//*/%%SmartyNocache:{$this->nocache_hash}%%*/';\n"; } /** * display compiler error messages without dying * If parameter $args is empty it is a parser detected syntax error. * In this case the parser is called to obtain information about expected tokens. * If parameter $args contains a string this is used as error message * * @param string $args individual error message or null * @param string $line line-number * @param null|bool $tagline if true the line number of last tag * * @throws \SmartyCompilerException when an unexpected token is found */ public function trigger_template_error($args = null, $line = null, $tagline = null) { $lex = $this->parser->lex; if ($tagline === true) { // get line number of Tag $line = $lex->taglineno; } elseif (!isset($line)) { // get template source line which has error $line = $lex->line; } else { $line = (int) $line; } if (in_array($this->template->source->type, array('eval', 'string'))) { $templateName = $this->template->source->type . ':' . trim(preg_replace('![\t\r\n]+!', ' ', strlen($lex->data) > 40 ? substr($lex->data, 0, 40) . '...' : $lex->data)); } else { $templateName = $this->template->source->type . ':' . $this->template->source->filepath; } // $line += $this->trace_line_offset; $match = preg_split("/\n/", $lex->data); $error_text = 'Syntax error in template "' . (empty($this->trace_filepath) ? $templateName : $this->trace_filepath) . '" on line ' . ($line + $this->trace_line_offset) . ' "' . trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ])) . '" '; if (isset($args)) { // individual error message $error_text .= $args; } else { $expect = array(); // expected token from parser $error_text .= ' - Unexpected "' . $lex->value . '"'; if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) { foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) { $exp_token = $this->parser->yyTokenName[ $token ]; if (isset($lex->smarty_token_names[ $exp_token ])) { // token type from lexer $expect[] = '"' . $lex->smarty_token_names[ $exp_token ] . '"'; } else { // otherwise internal token name $expect[] = $this->parser->yyTokenName[ $token ]; } } $error_text .= ', expected one of: ' . implode(' , ', $expect); } } $e = new SmartyCompilerException($error_text); $e->line = $line; $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ])); $e->desc = $args; $e->template = $this->template->source->filepath; throw $e; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php0000664000175000017500000004270212717671461027601 0ustar daviddavidfilepath = $_template->source->uid . '#' . $this->sanitize($cached->source->resource) . '#' . $this->sanitize($cached->cache_id) . '#' . $this->sanitize($cached->compile_id); $this->populateTimestamp($cached); } /** * populate Cached Object with timestamp and exists from Resource * * @param Smarty_Template_Cached $cached cached object * * @return void */ public function populateTimestamp(Smarty_Template_Cached $cached) { if (!$this->fetch($cached->filepath, $cached->source->name, $cached->cache_id, $cached->compile_id, $content, $timestamp, $cached->source->uid)) { return; } $cached->content = $content; $cached->timestamp = (int) $timestamp; $cached->exists = $cached->timestamp; } /** * Read the cached template and process the header * * @param Smarty_Internal_Template $_template template object * @param Smarty_Template_Cached $cached cached object * @param bool $update flag if called because cache update * * @return boolean true or false if the cached content does not exist */ public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false) { if (!$cached) { $cached = $_template->cached; } $content = $cached->content ? $cached->content : null; $timestamp = $cached->timestamp ? $cached->timestamp : null; if ($content === null || !$timestamp) { if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp, $_template->source->uid)) { return false; } } if (isset($content)) { /** @var Smarty_Internal_Template $_smarty_tpl * used in evaluated code */ $_smarty_tpl = $_template; eval("?>" . $content); return true; } return false; } /** * Write the rendered template output to cache * * @param Smarty_Internal_Template $_template template object * @param string $content content to cache * * @return boolean success */ public function writeCachedContent(Smarty_Internal_Template $_template, $content) { $this->addMetaTimestamp($content); return $this->write(array($_template->cached->filepath => $content), $_template->cache_lifetime); } /** * Read cached template from cache * * @param Smarty_Internal_Template $_template template object * * @return string content */ public function readCachedContent(Smarty_Internal_Template $_template) { $content = $_template->cached->content ? $_template->cached->content : null; $timestamp = null; if ($content === null) { if (!$this->fetch($_template->cached->filepath, $_template->source->name, $_template->cache_id, $_template->compile_id, $content, $timestamp, $_template->source->uid)) { return false; } } if (isset($content)) { return $content; } return false; } /** * Empty cache * {@internal the $exp_time argument is ignored altogether }} * * @param Smarty $smarty Smarty object * @param integer $exp_time expiration time [being ignored] * * @return integer number of cache files deleted [always -1] * @uses purge() to clear the whole store * @uses invalidate() to mark everything outdated if purge() is inapplicable */ public function clearAll(Smarty $smarty, $exp_time = null) { if (!$this->purge()) { $this->invalidate(null); } // remove from template cache if (isset($smarty->_cache['template_objects'])) { foreach ($smarty->_cache['template_objects'] as $key => $tpl) { if (isset($tpl->cached)) { unset($smarty->_cache['template_objects'][$key]); } } } return - 1; } /** * Empty cache for a specific template * {@internal the $exp_time argument is ignored altogether}} * * @param Smarty $smarty Smarty object * @param string $resource_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param integer $exp_time expiration time [being ignored] * * @return integer number of cache files deleted [always -1] * @uses buildCachedFilepath() to generate the CacheID * @uses invalidate() to mark CacheIDs parent chain as outdated * @uses delete() to remove CacheID from cache */ public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) { $uid = $this->getTemplateUid($smarty, $resource_name); $cid = $uid . '#' . $this->sanitize($resource_name) . '#' . $this->sanitize($cache_id) . '#' . $this->sanitize($compile_id); $this->delete(array($cid)); $this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid); // remove from template cache if (isset($resource_name) && isset($smarty->_cache['template_objects'])) { if (isset($smarty->_cache['template_objects'])) { foreach ($smarty->_cache['template_objects'] as $key => $tpl) { if ($tpl->source->uid == $uid && isset($tpl->cached)) { unset($smarty->_cache['template_objects'][$key]); } } } } return - 1; } /** * Get template's unique ID * * @param Smarty $smarty Smarty object * @param string $resource_name template name * * @return string filepath of cache file * @throws \SmartyException * */ protected function getTemplateUid(Smarty $smarty, $resource_name) { if (isset($resource_name)) { $source = Smarty_Template_Source::load(null, $smarty, $resource_name); if ($source->exists) { return $source->uid; } } return ''; } /** * Sanitize CacheID components * * @param string $string CacheID component to sanitize * * @return string sanitized CacheID component */ protected function sanitize($string) { $string = trim($string, '|'); if (!$string) { return null; } return preg_replace('#[^\w\|]+#S', '_', $string); } /** * Fetch and prepare a cache object. * * @param string $cid CacheID to fetch * @param string $resource_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param string $content cached content * @param integer &$timestamp cached timestamp (epoch) * @param string $resource_uid resource's uid * * @return boolean success */ protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null) { $t = $this->read(array($cid)); $content = !empty($t[$cid]) ? $t[$cid] : null; $timestamp = null; if ($content && ($timestamp = $this->getMetaTimestamp($content))) { $invalidated = $this->getLatestInvalidationTimestamp($cid, $resource_name, $cache_id, $compile_id, $resource_uid); if ($invalidated > $timestamp) { $timestamp = null; $content = null; } } return !!$content; } /** * Add current microtime to the beginning of $cache_content * {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}} * * @param string &$content the content to be cached */ protected function addMetaTimestamp(&$content) { $mt = explode(" ", microtime()); $ts = pack("NN", $mt[1], (int) ($mt[0] * 100000000)); $content = $ts . $content; } /** * Extract the timestamp the $content was cached * * @param string &$content the cached content * * @return float the microtime the content was cached */ protected function getMetaTimestamp(&$content) { extract(unpack('N1s/N1m/a*content', $content)); return $s + ($m / 100000000); } /** * Invalidate CacheID * * @param string $cid CacheID * @param string $resource_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param string $resource_uid source's uid * * @return void */ protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) { $now = microtime(true); $key = null; // invalidate everything if (!$resource_name && !$cache_id && !$compile_id) { $key = 'IVK#ALL'; } // invalidate all caches by template else { if ($resource_name && !$cache_id && !$compile_id) { $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name); } // invalidate all caches by cache group else { if (!$resource_name && $cache_id && !$compile_id) { $key = 'IVK#CACHE#' . $this->sanitize($cache_id); } // invalidate all caches by compile id else { if (!$resource_name && !$cache_id && $compile_id) { $key = 'IVK#COMPILE#' . $this->sanitize($compile_id); } // invalidate by combination else { $key = 'IVK#CID#' . $cid; } } } } $this->write(array($key => $now)); } /** * Determine the latest timestamp known to the invalidation chain * * @param string $cid CacheID to determine latest invalidation timestamp of * @param string $resource_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param string $resource_uid source's filepath * * @return float the microtime the CacheID was invalidated */ protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) { // abort if there is no CacheID if (false && !$cid) { return 0; } // abort if there are no InvalidationKeys to check if (!($_cid = $this->listInvalidationKeys($cid, $resource_name, $cache_id, $compile_id, $resource_uid))) { return 0; } // there are no InValidationKeys if (!($values = $this->read($_cid))) { return 0; } // make sure we're dealing with floats $values = array_map('floatval', $values); return max($values); } /** * Translate a CacheID into the list of applicable InvalidationKeys. * Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... ) * * @param string $cid CacheID to translate * @param string $resource_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param string $resource_uid source's filepath * * @return array list of InvalidationKeys * @uses $invalidationKeyPrefix to prepend to each InvalidationKey */ protected function listInvalidationKeys($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null) { $t = array('IVK#ALL'); $_name = $_compile = '#'; if ($resource_name) { $_name .= $resource_uid . '#' . $this->sanitize($resource_name); $t[] = 'IVK#TEMPLATE' . $_name; } if ($compile_id) { $_compile .= $this->sanitize($compile_id); $t[] = 'IVK#COMPILE' . $_compile; } $_name .= '#'; $cid = trim($cache_id, '|'); if (!$cid) { return $t; } $i = 0; while (true) { // determine next delimiter position $i = strpos($cid, '|', $i); // add complete CacheID if there are no more delimiters if ($i === false) { $t[] = 'IVK#CACHE#' . $cid; $t[] = 'IVK#CID' . $_name . $cid . $_compile; $t[] = 'IVK#CID' . $_name . $_compile; break; } $part = substr($cid, 0, $i); // add slice to list $t[] = 'IVK#CACHE#' . $part; $t[] = 'IVK#CID' . $_name . $part . $_compile; // skip past delimiter position $i ++; } return $t; } /** * Check is cache is locked for this template * * @param Smarty $smarty Smarty object * @param Smarty_Template_Cached $cached cached object * * @return boolean true or false if cache is locked */ public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) { $key = 'LOCK#' . $cached->filepath; $data = $this->read(array($key)); return $data && time() - $data[$key] < $smarty->locking_timeout; } /** * Lock cache for this template * * @param Smarty $smarty Smarty object * @param Smarty_Template_Cached $cached cached object * * @return bool|void */ public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) { $cached->is_locked = true; $key = 'LOCK#' . $cached->filepath; $this->write(array($key => time()), $smarty->locking_timeout); } /** * Unlock cache for this template * * @param Smarty $smarty Smarty object * @param Smarty_Template_Cached $cached cached object * * @return bool|void */ public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) { $cached->is_locked = false; $key = 'LOCK#' . $cached->filepath; $this->delete(array($key)); } /** * Read values for a set of keys from cache * * @param array $keys list of keys to fetch * * @return array list of values with the given keys used as indexes */ abstract protected function read(array $keys); /** * Save values for a set of keys to cache * * @param array $keys list of values to save * @param int $expire expiration time * * @return boolean true on success, false on failure */ abstract protected function write(array $keys, $expire = null); /** * Remove values from cache * * @param array $keys list of keys to delete * * @return boolean true on success, false on failure */ abstract protected function delete(array $keys); /** * Remove *all* values from cache * * @return boolean true on success, false on failure */ protected function purge() { return false; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_resource_stream.php0000664000175000017500000000465012717671461027102 0ustar daviddavidresource, '://') !== false) { $source->filepath = $source->resource; } else { $source->filepath = str_replace(':', '://', $source->resource); } $source->uid = false; $source->content = $this->getContent($source); $source->timestamp = false; $source->exists = !!$source->content; } /** * Load template's source from stream into current template object * * @param Smarty_Template_Source $source source object * * @return string template source * @throws SmartyException if source cannot be loaded */ public function getContent(Smarty_Template_Source $source) { $t = ''; // the availability of the stream has already been checked in Smarty_Resource::fetch() $fp = fopen($source->filepath, 'r+'); if ($fp) { while (!feof($fp) && ($current_line = fgets($fp)) !== false) { $t .= $current_line; } fclose($fp); return $t; } else { return false; } } /** * modify resource_name according to resource handlers specifications * * @param Smarty $smarty Smarty instance * @param string $resource_name resource_name to make unique * @param boolean $isConfig flag for config resource * * @return string unique resource name */ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) { return get_class($this) . '#' . $resource_name; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_include_php.php0000664000175000017500000000666412717671461027711 0ustar daviddavidsmarty instanceof SmartyBC)) { throw new SmartyException("{include_php} is deprecated, use SmartyBC class to enable"); } // check and get attributes $_attr = $this->getAttributes($compiler, $args); /** @var Smarty_Internal_Template $_smarty_tpl * used in evaluated code */ $_smarty_tpl = $compiler->template; $_filepath = false; $_file = null; eval('$_file = @' . $_attr['file'] . ';'); if (!isset($compiler->smarty->security_policy) && file_exists($_file)) { $_filepath = $compiler->smarty->_realpath($_file, true); } else { if (isset($compiler->smarty->security_policy)) { $_dir = $compiler->smarty->security_policy->trusted_dir; } else { $_dir = $compiler->smarty->trusted_dir; } if (!empty($_dir)) { foreach ((array) $_dir as $_script_dir) { $_path = $compiler->smarty->_realpath($_script_dir . DS . $_file, true); if (file_exists($_path)) { $_filepath = $_path; break; } } } } if ($_filepath == false) { $compiler->trigger_template_error("{include_php} file '{$_file}' is not readable", null, true); } if (isset($compiler->smarty->security_policy)) { $compiler->smarty->security_policy->isTrustedPHPDir($_filepath); } if (isset($_attr['assign'])) { // output will be stored in a smarty variable instead of being displayed $_assign = $_attr['assign']; } $_once = '_once'; if (isset($_attr['once'])) { if ($_attr['once'] == 'false') { $_once = ''; } } if (isset($_assign)) { return "assign({$_assign},ob_get_clean());\n?>"; } else { return "\n"; } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_block.php0000664000175000017500000003261512717671461026504 0ustar daviddavid */ class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inheritance { /** * Attribute definition: Overwrites base class. * * @var array * @see Smarty_Internal_CompileBase */ public $required_attributes = array('name'); /** * Attribute definition: Overwrites base class. * * @var array * @see Smarty_Internal_CompileBase */ public $shorttag_order = array('name'); /** * Attribute definition: Overwrites base class. * * @var array * @see Smarty_Internal_CompileBase */ public $option_flags = array('hide', 'nocache'); /** * Attribute definition: Overwrites base class. * * @var array * @see Smarty_Internal_CompileBase */ public $optional_attributes = array('assign'); /** * nesting level of block tags * * @var int */ public static $blockTagNestingLevel = 0; /** * Saved compiler object * * @var Smarty_Internal_TemplateCompilerBase */ public $compiler = null; /** * Compiles code for the {block} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return bool true */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { if (!isset($compiler->_cache['blockNesting'])) { $compiler->_cache['blockNesting'] = 0; } if ($compiler->_cache['blockNesting'] == 0) { // make sure that inheritance gets initialized in template code $this->registerInit($compiler); $this->option_flags = array('hide', 'nocache', 'append', 'prepend'); } else { $this->option_flags = array('hide', 'nocache'); } // check and get attributes $_attr = $this->getAttributes($compiler, $args); $compiler->_cache['blockNesting'] ++; $compiler->_cache['blockName'][$compiler->_cache['blockNesting']] = $_attr['name']; $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][0] = 'block_' . preg_replace('![^\w]+!', '_', uniqid(rand(), true)); $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][1] = false; $this->openTag($compiler, 'block', array($_attr, $compiler->nocache, $compiler->parser->current_buffer, $compiler->template->compiled->has_nocache_code, $compiler->template->caching)); // must whole block be nocache ? if ($compiler->tag_nocache) { $i = 0; } $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; // $compiler->suppressNocacheProcessing = true; if ($_attr['nocache'] === true) { //$compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->taglineno); } $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); $compiler->template->compiled->has_nocache_code = false; $compiler->suppressNocacheProcessing = true; } /** * Compile saved child block source * * @param \Smarty_Internal_TemplateCompilerBase compiler object * @param string $_name optional name of child block * * @return string compiled code of child block */ static function compileChildBlock(Smarty_Internal_TemplateCompilerBase $compiler, $_name = null) { if (!isset($compiler->_cache['blockNesting'])) { $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ', $compiler->parser->lex->taglineno); } $compiler->has_code = true; $compiler->suppressNocacheProcessing = true; $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']][1] = true; $output = "ext->_inheritance->processBlock(\$_smarty_tpl, 2, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, null, \$_blockParentStack);\n?>\n"; return $output; } /** * Compile $smarty.block.parent * * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param string $_name optional name of child block * * @return string compiled code of child block */ static function compileParentBlock(Smarty_Internal_TemplateCompilerBase $compiler, $_name = null) { if (!isset($compiler->_cache['blockNesting'])) { $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ', $compiler->parser->lex->taglineno); } $compiler->suppressNocacheProcessing = true; $compiler->has_code = true; $output = "ext->_inheritance->processBlock(\$_smarty_tpl, 4, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, null, \$_blockParentStack);\n?>\n"; return $output; } } /** * Smarty Internal Plugin Compile BlockClose Class * */ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_Inheritance { /** * Compiles code for the {/block} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return bool true */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { list($_attr, $_nocache, $_buffer, $_has_nocache_code, $_caching) = $this->closeTag($compiler, array('block')); // init block parameter $_block = $compiler->_cache['blockParams'][$compiler->_cache['blockNesting']]; unset($compiler->_cache['blockParams'][$compiler->_cache['blockNesting']]); $_block[2] = $_block[3] = 0; $_name = trim($_attr['name'], "'\""); $_assign = isset($_attr['assign']) ? $_attr['assign'] : null; unset($_attr['assign'], $_attr['name']); foreach ($_attr as $name => $stat) { if ((is_bool($stat) && $stat !== false) || (!is_bool($stat) && $stat != 'false')) { $_block[$name] = is_string($stat) ? trim($stat, "'\"") : $stat; } } $_funcName = $_block[0]; // get compiled block code $_functionCode = $compiler->parser->current_buffer; // setup buffer for template function code $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); if ($compiler->template->compiled->has_nocache_code) { // $compiler->parent_compiler->template->tpl_function[$_name]['call_name_caching'] = $_funcNameCaching; $_block[6] = $_funcNameCaching = $_funcName . '_nocache'; $output = "template->source->type}:{$compiler->template->source->name} */\n"; $output .= "function {$_funcNameCaching} (\$_smarty_tpl, \$_blockParentStack) {\n"; $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n"; $output .= "\$_smarty_tpl->cached->hashes['{$compiler->template->compiled->nocache_hash}'] = true;\n"; if (isset($_assign)) { $output .= "ob_start();\n"; } $output .= "?>\n"; $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode); $output = "tpl_vars[{$_assign}] = new Smarty_Variable(ob_get_clean());\n"; } $output .= "/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n"; $output .= "}\n"; $output .= "/* {/block '{$_name}'} */\n\n"; $output .= "?>\n"; $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); $compiler->blockOrFunctionCode .= $f = $compiler->parser->current_buffer->to_smarty_php($compiler->parser); $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); $this->compiler = $compiler; $_functionCode = new Smarty_Internal_ParseTree_Tag($compiler->parser, preg_replace_callback("/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", array($this, 'removeNocache'), $_functionCode->to_smarty_php($compiler->parser))); $this->compiler = null; } $output = "template->source->type}:{$compiler->template->source->name} */\n"; $output .= "function {$_funcName}(\$_smarty_tpl, \$_blockParentStack) {\n"; if (isset($_assign)) { $output .= "ob_start();\n"; } $output .= "?>\n"; $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode); $output = "tpl_vars[{$_assign}] = new Smarty_Variable(ob_get_clean());\n"; } $output .= "}\n"; $output .= "/* {/block '{$_name}'} */\n\n"; $output .= "?>\n"; $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); $compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser); // nocache plugins must be copied if (!empty($compiler->template->compiled->required_plugins['nocache'])) { foreach ($compiler->template->compiled->required_plugins['nocache'] as $plugin => $tmp) { foreach ($tmp as $type => $data) { $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$plugin][$type] = $data; } } } // restore old status $compiler->template->compiled->has_nocache_code = $_has_nocache_code; $compiler->tag_nocache = $compiler->nocache; $compiler->nocache = $_nocache; $compiler->parser->current_buffer = $_buffer; $output = "_cache['blockNesting'] == 1) { $output .= "\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 0, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, " . var_export($_block, true) . ");\n"; } else { $output .= "\$_smarty_tpl->ext->_inheritance->processBlock(\$_smarty_tpl, 0, {$compiler->_cache['blockName'][$compiler->_cache['blockNesting']]}, " . var_export($_block, true) . ", \$_blockParentStack);\n"; } $output .= "?>\n"; $compiler->_cache['blockNesting'] --; if ($compiler->_cache['blockNesting'] == 0) { unset($compiler->_cache['blockNesting']); } $compiler->has_code = true; $compiler->suppressNocacheProcessing = true; return $output; } /** * @param $match * * @return mixed */ function removeNocache($match) { $code = preg_replace("/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", '', $match[0]); $code = str_replace(array('\\\'', '\\\\\''), array('\'', '\\\''), $code); return $code; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_hhvm.php0000664000175000017500000000146712717671461026410 0ustar daviddavid 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE'); /** * storage for assembled token patterns * * @var sring */ private $yy_global_pattern1 = null; private $yy_global_pattern2 = null; private $yy_global_pattern3 = null; private $yy_global_pattern4 = null; private $yy_global_pattern5 = null; private $yy_global_pattern6 = null; /** * token names * * @var array */ public $smarty_token_names = array( // Text for parser error messages ); /** * constructor * * @param string $data template source * @param Smarty_Internal_Config_File_Compiler $compiler */ function __construct($data, Smarty_Internal_Config_File_Compiler $compiler) { // set instance object self::instance($this); $this->data = $data . "\n"; //now all lines are \n-terminated $this->counter = 0; if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) { $this->counter += strlen($match[0]); } $this->line = 1; $this->compiler = $compiler; $this->smarty = $compiler->smarty; $this->configBooleanize = $this->smarty->config_booleanize; } public static function &instance($new_instance = null) { static $instance = null; if (isset($new_instance) && is_object($new_instance)) { $instance = $new_instance; } return $instance; } public function PrintTrace() { $this->yyTraceFILE = fopen('php://output', 'w'); $this->yyTracePrompt = '
'; } private $_yy_state = 1; private $_yy_stack = array(); public function yylex() { return $this->{'yylex' . $this->_yy_state}(); } public function yypushstate($state) { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } array_push($this->_yy_stack, $this->_yy_state); $this->_yy_state = $state; if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } } public function yypopstate() { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } $this->_yy_state = array_pop($this->_yy_stack); if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } } public function yybegin($state) { $this->_yy_state = $state; if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state); } } public function yylex1() { if (!isset($this->yy_global_pattern1)) { $this->yy_global_pattern1 = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[0]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state START'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r1_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); } break; } while (true); } // end function const START = 1; function yy_r1_1() { $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; $this->yypushstate(self::COMMENT); } function yy_r1_2() { $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; $this->yypushstate(self::SECTION); } function yy_r1_3() { $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; } function yy_r1_4() { $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; $this->yypushstate(self::VALUE); } function yy_r1_5() { return false; } function yy_r1_6() { $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; } function yy_r1_7() { $this->token = Smarty_Internal_Configfileparser::TPC_ID; } function yy_r1_8() { $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; } public function yylex2() { if (!isset($this->yy_global_pattern2)) { $this->yy_global_pattern2 = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[0]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state VALUE'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r2_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); } break; } while (true); } // end function const VALUE = 2; function yy_r2_1() { return false; } function yy_r2_2() { $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT; $this->yypopstate(); } function yy_r2_3() { $this->token = Smarty_Internal_Configfileparser::TPC_INT; $this->yypopstate(); } function yy_r2_4() { $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES; $this->yypushstate(self::TRIPPLE); } function yy_r2_5() { $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING; $this->yypopstate(); } function yy_r2_6() { $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING; $this->yypopstate(); } function yy_r2_7() { if (!$this->configBooleanize || !in_array(strtolower($this->value), Array("true", "false", "on", "off", "yes", "no")) ) { $this->yypopstate(); $this->yypushstate(self::NAKED_STRING_VALUE); return true; //reprocess in new state } else { $this->token = Smarty_Internal_Configfileparser::TPC_BOOL; $this->yypopstate(); } } function yy_r2_8() { $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; $this->yypopstate(); } function yy_r2_9() { $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; $this->value = ""; $this->yypopstate(); } public function yylex3() { if (!isset($this->yy_global_pattern3)) { $this->yy_global_pattern3 = "/\G([^\n]+?(?=[ \t\r]*\n))/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[0]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state NAKED_STRING_VALUE'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r3_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); } break; } while (true); } // end function const NAKED_STRING_VALUE = 3; function yy_r3_1() { $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; $this->yypopstate(); } public function yylex4() { if (!isset($this->yy_global_pattern4)) { $this->yy_global_pattern4 = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[0]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state COMMENT'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r4_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); } break; } while (true); } // end function const COMMENT = 4; function yy_r4_1() { return false; } function yy_r4_2() { $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; } function yy_r4_3() { $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; $this->yypopstate(); } public function yylex5() { if (!isset($this->yy_global_pattern5)) { $this->yy_global_pattern5 = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[0]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state SECTION'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r5_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); } break; } while (true); } // end function const SECTION = 5; function yy_r5_1() { $this->token = Smarty_Internal_Configfileparser::TPC_DOT; } function yy_r5_2() { $this->token = Smarty_Internal_Configfileparser::TPC_SECTION; $this->yypopstate(); } public function yylex6() { if (!isset($this->yy_global_pattern6)) { $this->yy_global_pattern6 = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern6, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[0]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state TRIPPLE'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r6_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[$this->counter]); } break; } while (true); } // end function const TRIPPLE = 6; function yy_r6_1() { $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END; $this->yypopstate(); $this->yypushstate(self::START); } function yy_r6_2() { $to = strlen($this->data); preg_match("/\"\"\"[ \t\r]*[\n#;]/", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); if (isset($match[0][1])) { $to = $match[0][1]; } else { $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); } $this->value = substr($this->data, $this->counter, $to - $this->counter); $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_gettemplatevars.php0000664000175000017500000000760312717671461030450 0ustar daviddavid_getVariable($data, $varName, $_ptr, $searchParents, false); if (is_object($_var)) { return $_var->value; } else { return null; } } else { $_result = array(); if ($_ptr === null) { $_ptr = $data; } while ($_ptr !== null) { foreach ($_ptr->tpl_vars AS $key => $var) { if (!array_key_exists($key, $_result)) { $_result[$key] = $var->value; } } // not found, try at parent if ($searchParents) { $_ptr = $_ptr->parent; } else { $_ptr = null; } } if ($searchParents && isset(Smarty::$global_tpl_vars)) { foreach (Smarty::$global_tpl_vars AS $key => $var) { if (!array_key_exists($key, $_result)) { $_result[$key] = $var->value; } } } return $_result; } } /** * gets the object of a Smarty variable * * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data * @param string $varName the name of the Smarty variable * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object * @param bool $searchParents search also in parent data * @param bool $errorEnable * * @return \Smarty_Variable */ public function _getVariable(Smarty_Internal_Data $data, $varName, Smarty_Internal_Data $_ptr = null, $searchParents = true, $errorEnable = true) { if ($_ptr === null) { $_ptr = $data; } while ($_ptr !== null) { if (isset($_ptr->tpl_vars[$varName])) { // found it, return it return $_ptr->tpl_vars[$varName]; } // not found, try at parent if ($searchParents) { $_ptr = $_ptr->parent; } else { $_ptr = null; } } if (isset(Smarty::$global_tpl_vars[$varName])) { // found it, return it return Smarty::$global_tpl_vars[$varName]; } /* @var \Smarty $smarty */ $smarty = isset($data->smarty) ? $data->smarty : $data; if ($smarty->error_unassigned && $errorEnable) { // force a notice $x = $$varName; } return new Smarty_Undefined_Variable; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_data.php0000664000175000017500000001773112717671461024615 0ustar daviddavidext = new Smarty_Internal_Extension_Handler(); $this->ext->objType = $this->_objType; } /** * assigns a Smarty variable * * @param array|string $tpl_var the template variable name(s) * @param mixed $value the value to assign * @param boolean $nocache if true any output of this variable will be not cached * * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for * chaining */ public function assign($tpl_var, $value = null, $nocache = false) { if (is_array($tpl_var)) { foreach ($tpl_var as $_key => $_val) { if ($_key != '') { $this->tpl_vars[$_key] = new Smarty_Variable($_val, $nocache); if ($this->_objType == 2 && $this->scope) { $this->ext->_updateScope->updateScope($this, $_key); } } } } else { if ($tpl_var != '') { $this->tpl_vars[$tpl_var] = new Smarty_Variable($value, $nocache); if ($this->_objType == 2 && $this->scope) { $this->ext->_updateScope->updateScope($this, $tpl_var); } } } return $this; } /** * appends values to template variables * * @api Smarty::append() * @link http://www.smarty.net/docs/en/api.append.tpl * * @param array|string $tpl_var the template variable name(s) * @param mixed $value the value to append * @param bool $merge flag if array elements shall be merged * @param bool $nocache if true any output of this variable will * be not cached * * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty */ public function append($tpl_var, $value = null, $merge = false, $nocache = false) { return $this->ext->append->append($this, $tpl_var, $value, $merge, $nocache); } /** * assigns a global Smarty variable * * @param string $varName the global variable name * @param mixed $value the value to assign * @param boolean $nocache if true any output of this variable will be not cached * * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty */ public function assignGlobal($varName, $value = null, $nocache = false) { return $this->ext->assignGlobal->assignGlobal($this, $varName, $value, $nocache); } /** * appends values to template variables by reference * * @param string $tpl_var the template variable name * @param mixed &$value the referenced value to append * @param boolean $merge flag if array elements shall be merged * * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty */ public function appendByRef($tpl_var, &$value, $merge = false) { return $this->ext->appendByRef->appendByRef($this, $tpl_var, $value, $merge); } /** * assigns values to template variables by reference * * @param string $tpl_var the template variable name * @param $value * @param boolean $nocache if true any output of this variable will be not cached * * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty */ public function assignByRef($tpl_var, &$value, $nocache = false) { return $this->ext->assignByRef->assignByRef($this, $tpl_var, $value, $nocache); } /** * Returns a single or all template variables * * @api Smarty::getTemplateVars() * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl * * @param string $varName variable name or null * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object * @param bool $searchParents include parent templates? * * @return mixed variable value or or array of variables */ public function getTemplateVars($varName = null, Smarty_Internal_Data $_ptr = null, $searchParents = true) { return $this->ext->getTemplateVars->getTemplateVars($this, $varName, $_ptr, $searchParents); } /** * gets the object of a Smarty variable * * @param string $variable the name of the Smarty variable * @param Smarty_Internal_Data $_ptr optional pointer to data object * @param boolean $searchParents search also in parent data * @param bool $error_enable * * @return Smarty_Variable|Smarty_Undefined_Variable the object of the variable * @deprecated since 3.1.28 please use Smarty_Internal_Data::getTemplateVars() instead. */ public function getVariable($variable = null, Smarty_Internal_Data $_ptr = null, $searchParents = true, $error_enable = true){ return $this->ext->getTemplateVars->_getVariable($this, $variable, $_ptr, $searchParents, $error_enable); } /** * Follow the parent chain an merge template and config variables * * @param \Smarty_Internal_Data|null $data */ public function _mergeVars(Smarty_Internal_Data $data = null) { if (isset($data)) { if (!empty($this->tpl_vars)) { $data->tpl_vars = array_merge($this->tpl_vars, $data->tpl_vars); } if (!empty($this->config_vars)) { $data->config_vars = array_merge($this->config_vars, $data->config_vars); } } else { $data = $this; } if (isset($this->parent)) { $this->parent->_mergeVars($data); } } /** * Handle unknown class methods * * @param string $name unknown method-name * @param array $args argument array * * @return mixed * @throws SmartyException */ public function __call($name, $args) { return $this->ext->_callExternalMethod($this, $name, $args); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_registerclass.php0000664000175000017500000000264412717671461030113 0ustar daviddavidsmarty) ? $obj->smarty : $obj; // test if exists if (!class_exists($class_impl)) { throw new SmartyException("Undefined class '$class_impl' in register template class"); } // register the class $smarty->registered_classes[$class_name] = $class_impl; return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_registerobject.php0000664000175000017500000000710112717671461030245 0ustar daviddavidsmarty) ? $obj->smarty : $obj; // test if allowed methods callable if (!empty($allowed_methods_properties)) { foreach ((array) $allowed_methods_properties as $method) { if (!is_callable(array($object, $method)) && !property_exists($object, $method)) { throw new SmartyException("Undefined method or property '$method' in registered object"); } } } // test if block methods callable if (!empty($block_methods)) { foreach ((array) $block_methods as $method) { if (!is_callable(array($object, $method))) { throw new SmartyException("Undefined method '$method' in registered object"); } } } // register the object $smarty->registered_objects[$object_name] = array($object, (array) $allowed_methods_properties, (boolean) $format, (array) $block_methods); return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_data.php0000664000175000017500000000322712717671461022714 0ustar daviddaviddataObjectName = 'Data_object ' . (isset($name) ? "'{$name}'" : self::$count); $this->smarty = $smarty; if (is_object($_parent)) { // when object set up back pointer $this->parent = $_parent; } elseif (is_array($_parent)) { // set up variable values foreach ($_parent as $_key => $_val) { $this->tpl_vars[$_key] = new Smarty_Variable($_val); } } elseif ($_parent != null) { throw new SmartyException("Wrong type for template variables"); } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_unregisterobject.php0000664000175000017500000000206212717671461030611 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (isset($smarty->registered_objects[$object_name])) { unset($smarty->registered_objects[$object_name]); } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_updatescope.php0000664000175000017500000000364712717671461027764 0ustar daviddavidscope) { return; } foreach (array($scope, $tpl->scope) as $s) { $s = ($bubble_up = $s >= Smarty::SCOPE_BUBBLE_UP) ? $s - Smarty::SCOPE_BUBBLE_UP : $s; if ($bubble_up && $s) { $ptr = $tpl->parent; if (isset($ptr)) { $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; $ptr = $ptr->parent; } if ($s == Smarty::SCOPE_PARENT) { continue; } while (isset($ptr) && $ptr->_objType == 2) { $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; $ptr = $ptr->parent; } if ($s == Smarty::SCOPE_TPL_ROOT) { continue; } elseif ($s == Smarty::SCOPE_SMARTY) { $tpl->smarty->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; } elseif ($s == Smarty::SCOPE_GLOBAL) { Smarty::$global_tpl_vars[$varName] = $tpl->tpl_vars[$varName]; } elseif ($s == Smarty::SCOPE_ROOT) { while (isset($ptr->parent)) { $ptr = $ptr->parent; } $ptr->tpl_vars[$varName] = $tpl->tpl_vars[$varName]; } } } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_template_resource_base.php0000664000175000017500000000712412717671461026517 0ustar daviddavidunifunc; $level = ob_get_level(); try { if (empty($unifunc) || !is_callable($unifunc)) { throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'"); } if (isset($_template->smarty->security_policy)) { $_template->smarty->security_policy->startTemplate($_template); } // // render compiled or saved template code // if (!isset($_template->_cache['capture_stack'])) { $_template->_cache['capture_stack'] = array(); } $_saved_capture_level = count($_template->_cache['capture_stack']); $unifunc($_template); // any unclosed {capture} tags ? if ($_saved_capture_level != count($_template->_cache['capture_stack'])) { $_template->capture_error(); } if (isset($_template->smarty->security_policy)) { $_template->smarty->security_policy->exitTemplate(); } return null; } catch (Exception $e) { while (ob_get_level() > $level) { ob_end_clean(); } if (isset($_template->smarty->security_policy)) { $_template->smarty->security_policy->exitTemplate(); } throw $e; } } /** * Get compiled time stamp * * @return int */ public function getTimeStamp() { if ($this->exists && !isset($this->timestamp)) { $this->timestamp = @filemtime($this->filepath); } return $this->timestamp; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compilebase.php0000664000175000017500000001447412717671461026170 0ustar daviddavid $mixed) { // shorthand ? if (!is_array($mixed)) { // option flag ? if (in_array(trim($mixed, '\'"'), $this->option_flags)) { $_indexed_attr[trim($mixed, '\'"')] = true; // shorthand attribute ? } elseif (isset($this->shorttag_order[$key])) { $_indexed_attr[$this->shorttag_order[$key]] = $mixed; } else { // too many shorthands $compiler->trigger_template_error('too many shorthand attributes', null, true); } // named attribute } else { $kv = each($mixed); // option flag? if (in_array($kv['key'], $this->option_flags)) { if (is_bool($kv['value'])) { $_indexed_attr[$kv['key']] = $kv['value']; } elseif (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) { if (trim($kv['value']) == 'true') { $_indexed_attr[$kv['key']] = true; } else { $_indexed_attr[$kv['key']] = false; } } elseif (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) { if ($kv['value'] == 1) { $_indexed_attr[$kv['key']] = true; } else { $_indexed_attr[$kv['key']] = false; } } else { $compiler->trigger_template_error("illegal value of option flag \"{$kv['key']}\"", null, true); } // must be named attribute } else { reset($mixed); $_indexed_attr[key($mixed)] = $mixed[key($mixed)]; } } } // check if all required attributes present foreach ($this->required_attributes as $attr) { if (!array_key_exists($attr, $_indexed_attr)) { $compiler->trigger_template_error("missing \"" . $attr . "\" attribute", null, true); } } // check for not allowed attributes if ($this->optional_attributes != array('_any')) { $tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags); foreach ($_indexed_attr as $key => $dummy) { if (!in_array($key, $tmp_array) && $key !== 0) { $compiler->trigger_template_error("unexpected \"" . $key . "\" attribute", null, true); } } } // default 'false' for all option flags not set foreach ($this->option_flags as $flag) { if (!isset($_indexed_attr[$flag])) { $_indexed_attr[$flag] = false; } } return $_indexed_attr; } /** * Push opening tag name on stack * Optionally additional data can be saved on stack * * @param object $compiler compiler object * @param string $openTag the opening tag's name * @param mixed $data optional data saved */ public function openTag($compiler, $openTag, $data = null) { array_push($compiler->_tag_stack, array($openTag, $data)); } /** * Pop closing tag * Raise an error if this stack-top doesn't match with expected opening tags * * @param object $compiler compiler object * @param array|string $expectedTag the expected opening tag names * * @return mixed any type the opening tag's name or saved data */ public function closeTag($compiler, $expectedTag) { if (count($compiler->_tag_stack) > 0) { // get stacked info list($_openTag, $_data) = array_pop($compiler->_tag_stack); // open tag must match with the expected ones if (in_array($_openTag, (array) $expectedTag)) { if (is_null($_data)) { // return opening tag return $_openTag; } else { // return restored data return $_data; } } // wrong nesting of tags $compiler->trigger_template_error("unclosed {$compiler->smarty->left_delimiter}" . $_openTag . "{$compiler->smarty->right_delimiter} tag"); return; } // wrong nesting of tags $compiler->trigger_template_error("unexpected closing tag", null, true); return; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_nocache_insert.php0000664000175000017500000000333112717671461026657 0ustar daviddavidassign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>"; } else { $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>"; } $_tpl = $_template; while (isset($_tpl->parent) && $_tpl->parent->_objType == 2) { $_tpl = $_tpl->parent; } return "/*%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->compiled->nocache_hash}%%*/"; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_debug.php0000664000175000017500000003532512717671461024771 0ustar daviddavidindex ++; $this->offset ++; $this->template_data[$this->index] = null; } $key = $this->get_key($template); $this->template_data[$this->index][$key]['start_template_time'] = microtime(true); } /** * End logging of cache time * * @param \Smarty_Internal_Template $template cached template */ public function end_template(Smarty_Internal_Template $template) { $key = $this->get_key($template); $this->template_data[$this->index][$key]['total_time'] += microtime(true) - $this->template_data[$this->index][$key]['start_template_time']; //$this->template_data[$this->index][$key]['properties'] = $template->properties; } /** * Start logging of compile time * * @param \Smarty_Internal_Template $template */ public function start_compile(Smarty_Internal_Template $template) { static $_is_stringy = array('string' => true, 'eval' => true); if (!empty($template->compiler->trace_uid)) { $key = $template->compiler->trace_uid; if (!isset($this->template_data[$this->index][$key])) { if (isset($_is_stringy[$template->source->type])) { $this->template_data[$this->index][$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\''; } else { $this->template_data[$this->index][$key]['name'] = $template->source->filepath; } $this->template_data[$this->index][$key]['compile_time'] = 0; $this->template_data[$this->index][$key]['render_time'] = 0; $this->template_data[$this->index][$key]['cache_time'] = 0; } } else { if (isset($this->ignore_uid[$template->source->uid])) { return; } $key = $this->get_key($template); } $this->template_data[$this->index][$key]['start_time'] = microtime(true); } /** * End logging of compile time * * @param \Smarty_Internal_Template $template */ public function end_compile(Smarty_Internal_Template $template) { if (!empty($template->compiler->trace_uid)) { $key = $template->compiler->trace_uid; } else { if (isset($this->ignore_uid[$template->source->uid])) { return; } $key = $this->get_key($template); } $this->template_data[$this->index][$key]['compile_time'] += microtime(true) - $this->template_data[$this->index][$key]['start_time']; } /** * Start logging of render time * * @param \Smarty_Internal_Template $template */ public function start_render(Smarty_Internal_Template $template) { $key = $this->get_key($template); $this->template_data[$this->index][$key]['start_time'] = microtime(true); } /** * End logging of compile time * * @param \Smarty_Internal_Template $template */ public function end_render(Smarty_Internal_Template $template) { $key = $this->get_key($template); $this->template_data[$this->index][$key]['render_time'] += microtime(true) - $this->template_data[$this->index][$key]['start_time']; } /** * Start logging of cache time * * @param \Smarty_Internal_Template $template cached template */ public function start_cache(Smarty_Internal_Template $template) { $key = $this->get_key($template); $this->template_data[$this->index][$key]['start_time'] = microtime(true); } /** * End logging of cache time * * @param \Smarty_Internal_Template $template cached template */ public function end_cache(Smarty_Internal_Template $template) { $key = $this->get_key($template); $this->template_data[$this->index][$key]['cache_time'] += microtime(true) - $this->template_data[$this->index][$key]['start_time']; } /** * Register template object * * @param \Smarty_Internal_Template $template cached template */ public function register_template(Smarty_Internal_Template $template) { } /** * Register data object * * @param \Smarty_Data $data data object */ public static function register_data(Smarty_Data $data) { } /** * Opens a window for the Smarty Debugging Console and display the data * * @param Smarty_Internal_Template|Smarty $obj object to debug * @param bool $full */ public function display_debug($obj, $full = false) { if (!$full) { $this->offset ++; $savedIndex = $this->index; $this->index = 9999; } if ($obj->_objType == 1) { $smarty = $obj; } else { $smarty = $obj->smarty; } // create fresh instance of smarty for displaying the debug console // to avoid problems if the application did overload the Smarty class $debObj = new Smarty(); // copy the working dirs from application $debObj->setCompileDir($smarty->getCompileDir()); // init properties by hand as user may have edited the original Smarty class $debObj->setPluginsDir(is_dir(__DIR__ . '/../plugins') ? __DIR__ . '/../plugins' : $smarty->getPluginsDir()); $debObj->force_compile = false; $debObj->compile_check = true; $debObj->left_delimiter = '{'; $debObj->right_delimiter = '}'; $debObj->security_policy = null; $debObj->debugging = false; $debObj->debugging_ctrl = 'NONE'; $debObj->error_reporting = E_ALL & ~E_NOTICE; $debObj->debug_tpl = isset($smarty->debug_tpl) ? $smarty->debug_tpl : 'file:' . __DIR__ . '/../debug.tpl'; $debObj->registered_plugins = array(); $debObj->registered_resources = array(); $debObj->registered_filters = array(); $debObj->autoload_filters = array(); $debObj->default_modifiers = array(); $debObj->escape_html = true; $debObj->caching = false; $debObj->compile_id = null; $debObj->cache_id = null; // prepare information of assigned variables $ptr = $this->get_debug_vars($obj); $_assigned_vars = $ptr->tpl_vars; ksort($_assigned_vars); $_config_vars = $ptr->config_vars; ksort($_config_vars); $debugging = $smarty->debugging; $_template = new Smarty_Internal_Template($debObj->debug_tpl, $debObj); if ($obj->_objType == 2) { $_template->assign('template_name', $obj->source->type . ':' . $obj->source->name); } if ($obj->_objType == 1 || $full) { $_template->assign('template_data', $this->template_data[$this->index]); } else { $_template->assign('template_data', null); } $_template->assign('assigned_vars', $_assigned_vars); $_template->assign('config_vars', $_config_vars); $_template->assign('execution_time', microtime(true) - $smarty->start_time); $_template->assign('display_mode', $debugging == 2 || !$full); $_template->assign('offset', $this->offset * 50); echo $_template->fetch(); if (isset($full)) { $this->index --; } if (!$full) { $this->index = $savedIndex; } } /** * Recursively gets variables from all template/data scopes * * @param Smarty_Internal_Template|Smarty_Data $obj object to debug * * @return StdClass */ public function get_debug_vars($obj) { $config_vars = array(); foreach ($obj->config_vars as $key => $var) { $config_vars[$key]['value'] = $var; if ($obj->_objType == 2) { $config_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name; } elseif ($obj->_objType == 4) { $tpl_vars[$key]['scope'] = $obj->dataObjectName; } else { $config_vars[$key]['scope'] = 'Smarty object'; } } $tpl_vars = array(); foreach ($obj->tpl_vars as $key => $var) { foreach ($var as $varkey => $varvalue) { if ($varkey == 'value') { $tpl_vars[$key][$varkey] = $varvalue; } else { if ($varkey == 'nocache') { if ($varvalue == true) { $tpl_vars[$key][$varkey] = $varvalue; } } else { if ($varkey != 'scope' || $varvalue !== 0) { $tpl_vars[$key]['attributes'][$varkey] = $varvalue; } } } } if ($obj->_objType == 2) { $tpl_vars[$key]['scope'] = $obj->source->type . ':' . $obj->source->name; } elseif ($obj->_objType == 4) { $tpl_vars[$key]['scope'] = $obj->dataObjectName; } else { $tpl_vars[$key]['scope'] = 'Smarty object'; } } if (isset($obj->parent)) { $parent = $this->get_debug_vars($obj->parent); foreach ($parent->tpl_vars as $name => $pvar) { if (isset($tpl_vars[$name]) && $tpl_vars[$name]['value'] === $pvar['value']) { $tpl_vars[$name]['scope'] = $pvar['scope']; } } $tpl_vars = array_merge($parent->tpl_vars, $tpl_vars); foreach ($parent->config_vars as $name => $pvar) { if (isset($config_vars[$name]) && $config_vars[$name]['value'] === $pvar['value']) { $config_vars[$name]['scope'] = $pvar['scope']; } } $config_vars = array_merge($parent->config_vars, $config_vars); } else { foreach (Smarty::$global_tpl_vars as $key => $var) { if (!array_key_exists($key, $tpl_vars)) { foreach ($var as $varkey => $varvalue) { if ($varkey == 'value') { $tpl_vars[$key][$varkey] = $varvalue; } else { if ($varkey == 'nocache') { if ($varvalue == true) { $tpl_vars[$key][$varkey] = $varvalue; } } else { if ($varkey != 'scope' || $varvalue !== 0) { $tpl_vars[$key]['attributes'][$varkey] = $varvalue; } } } } $tpl_vars[$key]['scope'] = 'Global'; } } } return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars); } /** * Return key into $template_data for template * * @param \Smarty_Internal_Template $template template object * * @return string key into $template_data */ private function get_key(Smarty_Internal_Template $template) { static $_is_stringy = array('string' => true, 'eval' => true); // calculate Uid if not already done if ($template->source->uid == '') { $template->source->filepath; } $key = $template->source->uid; if (isset($this->template_data[$this->index][$key])) { return $key; } else { if (isset($_is_stringy[$template->source->type])) { $this->template_data[$this->index][$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\''; } else { $this->template_data[$this->index][$key]['name'] = $template->source->filepath; } $this->template_data[$this->index][$key]['compile_time'] = 0; $this->template_data[$this->index][$key]['render_time'] = 0; $this->template_data[$this->index][$key]['cache_time'] = 0; $this->template_data[$this->index][$key]['total_time'] = 0; return $key; } } /** * Ignore template * * @param \Smarty_Internal_Template $template */ public function ignore(Smarty_Internal_Template $template) { // calculate Uid if not already done if ($template->source->uid == '') { $template->source->filepath; } $this->ignore_uid[$template->source->uid] = true; } /** * handle 'URL' debugging mode * * @param Smarty $smarty */ public function debugUrl(Smarty $smarty) { if (isset($_SERVER['QUERY_STRING'])) { $_query_string = $_SERVER['QUERY_STRING']; } else { $_query_string = ''; } if (false !== strpos($_query_string, $smarty->smarty_debug_id)) { if (false !== strpos($_query_string, $smarty->smarty_debug_id . '=on')) { // enable debugging for this browser session setcookie('SMARTY_DEBUG', true); $smarty->debugging = true; } elseif (false !== strpos($_query_string, $smarty->smarty_debug_id . '=off')) { // disable debugging for this browser session setcookie('SMARTY_DEBUG', false); $smarty->debugging = false; } else { // enable debugging for this page $smarty->debugging = true; } } else { if (isset($_COOKIE['SMARTY_DEBUG'])) { $smarty->debugging = true; } } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_variable.php0000664000175000017500000000161712717671461023571 0ustar daviddavidvalue = $value; $this->nocache = $nocache; } /** * <> String conversion * * @return string */ public function __toString() { return (string) $this->value; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_resource_eval.php0000664000175000017500000000537312717671461026541 0ustar daviddaviduid = $source->filepath = sha1($source->name); $source->timestamp = false; $source->exists = true; } /** * Load template's source from $resource_name into current template object * * @uses decode() to decode base64 and urlencoded template_resources * * @param Smarty_Template_Source $source source object * * @return string template source */ public function getContent(Smarty_Template_Source $source) { return $this->decode($source->name); } /** * decode base64 and urlencode * * @param string $string template_resource to decode * * @return string decoded template_resource */ protected function decode($string) { // decode if specified if (($pos = strpos($string, ':')) !== false) { if (!strncmp($string, 'base64', 6)) { return base64_decode(substr($string, 7)); } elseif (!strncmp($string, 'urlencode', 9)) { return urldecode(substr($string, 10)); } } return $string; } /** * modify resource_name according to resource handlers specifications * * @param Smarty $smarty Smarty instance * @param string $resource_name resource_name to make unique * @param boolean $isConfig flag for config resource * * @return string unique resource name */ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) { return get_class($this) . '#' . $this->decode($resource_name); } /** * Determine basename for compiled filename * * @param Smarty_Template_Source $source source object * * @return string resource's basename */ public function getBasename(Smarty_Template_Source $source) { return ''; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_unregisterresource.php0000664000175000017500000000206212717671461031172 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (isset($smarty->registered_resources[$type])) { unset($smarty->registered_resources[$type]); } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_appendbyref.php0000664000175000017500000000337112717671461027536 0ustar daviddavidtpl_vars[$tpl_var])) { $data->tpl_vars[$tpl_var] = new Smarty_Variable(); } if (!is_array($data->tpl_vars[$tpl_var]->value)) { settype($data->tpl_vars[$tpl_var]->value, 'array'); } if ($merge && is_array($value)) { foreach ($value as $_key => $_val) { $data->tpl_vars[$tpl_var]->value[$_key] = &$value[$_key]; } } else { $data->tpl_vars[$tpl_var]->value[] = &$value; } if ($data->_objType == 2 && $data->scope) { $data->ext->_updateScope->updateScope($data, $tpl_var); } } return $data; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_registerplugin.php0000664000175000017500000000374712717671461030311 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (isset($smarty->registered_plugins[$type][$name])) { throw new SmartyException("Plugin tag \"{$name}\" already registered"); } elseif (!is_callable($callback)) { throw new SmartyException("Plugin \"{$name}\" not callable"); } else { $smarty->registered_plugins[$type][$name] = array($callback, (bool) $cacheable, (array) $cache_attr); } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smartyexception.php0000664000175000017500000000044712717671461023643 0ustar daviddavid Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- '; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_template_config.php0000664000175000017500000000704112717671461025141 0ustar daviddavidhandler = clone $handler; // Note: prone to circular references $this->handler->compiler_class = 'Smarty_Internal_Config_File_Compiler'; $this->handler->template_lexer_class = 'Smarty_Internal_Configfilelexer'; $this->handler->template_parser_class = 'Smarty_Internal_Configfileparser'; $this->resource = $resource; $this->type = $type; $this->name = $name; $this->smarty = $smarty; } /** * initialize Source Object for given resource * Either [$_template] or [$smarty, $template_resource] must be specified * * @param Smarty_Internal_Template $_template template object * @param Smarty $smarty smarty object * @param string $template_resource resource identifier * * @return Smarty_Template_Config Source Object * @throws SmartyException */ public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) { static $_incompatible_resources = array('extends' => true, 'php' => true); $template_resource = $_template->template_resource; if (empty($template_resource)) { throw new SmartyException('Missing config name'); } // parse resource_name, load resource handler list($name, $type) = Smarty_Resource::parseResourceName($template_resource, $_template->smarty->default_config_type); // make sure configs are not loaded via anything smarty can't handle if (isset($_incompatible_resources[$type])) { throw new SmartyException ("Unable to use resource '{$type}' for config"); } $resource = Smarty_Resource::load($_template->smarty, $type); $source = new Smarty_Template_Config($resource, $_template->smarty, $template_resource, $type, $name); $resource->populate($source, $_template); if (!$source->exists && isset($_template->smarty->default_config_handler_func)) { Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source); } $source->unique_resource = $resource->buildUniqueResourceName($_template->smarty, $name, true); return $source; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php0000664000175000017500000001227412717671461030507 0ustar daviddavidlexer_class = $lexer_class; $this->parser_class = $parser_class; } /** * method to compile a Smarty template * * @param mixed $_content template source * @param bool $isTemplateSource * * @return bool true if compiling succeeded, false if it failed * @throws \SmartyCompilerException */ protected function doCompile($_content, $isTemplateSource = false) { /* here is where the compiling takes place. Smarty tags in the templates are replaces with PHP code, then written to compiled files. */ // init the lexer/parser to compile the template $this->parser = new $this->parser_class(new $this->lexer_class(str_replace(array("\r\n", "\r"), "\n", $_content), $this), $this); if ($isTemplateSource && $this->template->caching) { $this->parser->insertPhpCode("compiled->nocache_hash = '{$this->nocache_hash}';\n?>\n"); } if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { $mbEncoding = mb_internal_encoding(); mb_internal_encoding('ASCII'); } else { $mbEncoding = null; } if ($this->smarty->_parserdebug) { $this->parser->PrintTrace(); $this->parser->lex->PrintTrace(); } // get tokens from lexer and parse them while ($this->parser->lex->yylex()) { if ($this->smarty->_parserdebug) { echo "
Line {$this->parser->lex->line} Parsing  {$this->parser->yyTokenName[$this->parser->lex->token]} Token " .
                    htmlentities($this->parser->lex->value) . "
"; } $this->parser->doParse($this->parser->lex->token, $this->parser->lex->value); } // finish parsing process $this->parser->doParse(0, 0); if ($mbEncoding) { mb_internal_encoding($mbEncoding); } // check for unclosed tags if (count($this->_tag_stack) > 0) { // get stacked info list($openTag, $_data) = array_pop($this->_tag_stack); $this->trigger_template_error("unclosed {$this->smarty->left_delimiter}" . $openTag . "{$this->smarty->right_delimiter} tag"); } // call post compile callbacks foreach ($this->postCompileCallbacks as $cb) { $parameter = $cb; $parameter[0] = $this; call_user_func_array($cb[0], $parameter); } // return compiled code return $this->prefixCompiledCode . $this->parser->retvalue . $this->postfixCompiledCode; } /** * Register a post compile callback * - when the callback is called after template compiling the compiler object will be inserted as first parameter * * @param callback $callback * @param array $parameter optional parameter array * @param string $key optional key for callback * @param bool $replace if true replace existing keyed callback */ public function registerPostCompileCallback($callback, $parameter = array(), $key = null, $replace = false) { array_unshift($parameter, $callback); if (isset($key)) { if ($replace || !isset($this->postCompileCallbacks[$key])) { $this->postCompileCallbacks[$key] = $parameter; } } else { $this->postCompileCallbacks[] = $parameter; } } /** * Remove a post compile callback * * @param string $key callback key */ public function unregisterPostCompileCallback($key) { unset($this->postCompileCallbacks[$key]); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_unregisterplugin.php0000664000175000017500000000223612717671461030644 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (isset($smarty->registered_plugins[$type][$name])) { unset($smarty->registered_plugins[$type][$name]); } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_if.php0000664000175000017500000002626312717671461026012 0ustar daviddavidgetAttributes($compiler, $args); $this->openTag($compiler, 'if', array(1, $compiler->nocache)); // must whole block be nocache ? $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; if (!array_key_exists("if condition", $parameter)) { $compiler->trigger_template_error("missing if condition", null, true); } if (is_array($parameter['if condition'])) { if ($compiler->nocache) { $_nocache = ',true'; // create nocache var to make it know for further compiling if (is_array($parameter['if condition']['var'])) { $var = trim($parameter['if condition']['var']['var'], "'"); } else { $var = trim($parameter['if condition']['var'], "'"); } if (isset($compiler->template->tpl_vars[$var])) { $compiler->template->tpl_vars[$var]->nocache = true; } else { $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); } } else { $_nocache = ''; } if (is_array($parameter['if condition']['var'])) { $_output = "tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] . "$_nocache);\n"; $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; } else { $_output = "tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; } return $_output; } else { return ""; } } } /** * Smarty Internal Plugin Compile Else Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase { /** * Compiles code for the {else} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache)); return ""; } } /** * Smarty Internal Plugin Compile ElseIf Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase { /** * Compiles code for the {elseif} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code * @throws \SmartyCompilerException */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif')); if (!array_key_exists("if condition", $parameter)) { $compiler->trigger_template_error("missing elseif condition", null, true); } if (is_array($parameter['if condition'])) { $condition_by_assign = true; if ($compiler->nocache) { $_nocache = ',true'; // create nocache var to make it know for further compiling if (is_array($parameter['if condition']['var'])) { $var = trim($parameter['if condition']['var']['var'], "'"); } else { $var = trim($parameter['if condition']['var'], "'"); } if (isset($compiler->template->tpl_vars[$var])) { $compiler->template->tpl_vars[$var]->nocache = true; } else { $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); } } else { $_nocache = ''; } } else { $condition_by_assign = false; } if (empty($compiler->prefix_code)) { if ($condition_by_assign) { $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); if (is_array($parameter['if condition']['var'])) { $_output = "tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] . "$_nocache);\n"; $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; } else { $_output = "tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; } return $_output; } else { $this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache)); return ""; } } else { $tmp = ''; foreach ($compiler->prefix_code as $code) { $tmp = $compiler->appendCode($tmp, $code); } $compiler->prefix_code = array(); $tmp = $compiler->appendCode("", $tmp); $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache)); if ($condition_by_assign) { if (is_array($parameter['if condition']['var'])) { $_output = $compiler->appendCode($tmp, "tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] . "$_nocache);\n"); $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; } else { $_output = $compiler->appendCode($tmp, "tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"); $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; } return $_output; } else { return $compiler->appendCode($tmp, ""); } } } } /** * Smarty Internal Plugin Compile Ifclose Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase { /** * Compiles code for the {/if} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif')); $tmp = ''; for ($i = 0; $i < $nesting; $i ++) { $tmp .= '}'; } return ""; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_updatecache.php0000664000175000017500000001465712717671461027721 0ustar daviddavidhashes[$_template->compiled->nocache_hash]); if (!empty($cached->hashes)) { $hash_array = array(); foreach ($cached->hashes as $hash => $foo) { $hash_array[] = "/{$hash}/"; } $content = preg_replace($hash_array, $_template->compiled->nocache_hash, $content); } $_template->cached->has_nocache_code = false; // get text between non-cached items $cache_split = preg_split("!/\*%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*/!s", $content); // get non-cached items preg_match_all("!/\*%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*\/(.+?)/\*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%\*/!s", $content, $cache_parts); $content = ''; // loop over items, stitch back together foreach ($cache_split as $curr_idx => $curr_split) { // escape PHP tags in template content $content .= preg_replace('/(<%|%>|<\?php|<\?|\?>|)/', "\n", $curr_split); if (isset($cache_parts[0][$curr_idx])) { $_template->cached->has_nocache_code = true; $content .= $cache_parts[1][$curr_idx]; } } if (!$no_output_filter && !$_template->compiled->has_nocache_code && (isset($_template->smarty->autoload_filters['output']) || isset($_template->smarty->registered_filters['output'])) ) { $content = $_template->smarty->ext->_filterHandler->runFilter('output', $content, $_template); } // write cache file content $this->writeCachedContent($cached, $_template, $content); } /** * Cache was invalid , so render from compiled and write to cache * * @param \Smarty_Template_Cached $cached * @param \Smarty_Internal_Template $_template * @param $no_output_filter * * @throws \Exception */ public function updateCache(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $no_output_filter) { if ($_template->source->handler->uncompiled) { ob_start(); $_template->source->render($_template); } else { ob_start(); if (!isset($_template->compiled)) { $_template->loadCompiled(); } $_template->compiled->render($_template); } if ($_template->smarty->debugging) { $_template->smarty->_debug->start_cache($_template); } $this->removeNoCacheHash($cached, $_template, $no_output_filter); $compile_check = $_template->smarty->compile_check; $_template->smarty->compile_check = false; if (isset($_template->parent) && $_template->parent->_objType == 2) { $_template->compiled->unifunc = $_template->parent->compiled->unifunc; } if (!$_template->cached->processed) { $_template->cached->process($_template, true); } $_template->smarty->compile_check = $compile_check; $cached->getRenderedTemplateCode($_template); if ($_template->smarty->debugging) { $_template->smarty->_debug->end_cache($_template); } } /** * Writes the content to cache resource * * @param \Smarty_Template_Cached $cached * @param Smarty_Internal_Template $_template * @param string $content * * @return bool */ public function writeCachedContent(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content) { if ($_template->source->handler->recompiled || !($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) ) { // don't write cache file return false; } $content = $_template->smarty->ext->_codeFrame->create($_template, $content, '', true); return $this->write($cached, $_template, $content); } /** * Write this cache object to handler * * @param \Smarty_Template_Cached $cached * @param Smarty_Internal_Template $_template template object * @param string $content content to cache * * @return bool success */ public function write(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template, $content) { if (!$_template->source->handler->recompiled) { if ($cached->handler->writeCachedContent($_template, $content)) { $cached->content = null; $cached->timestamp = time(); $cached->exists = true; $cached->valid = true; $cached->cache_lifetime = $_template->cache_lifetime; $cached->processed = false; if ($_template->smarty->cache_locking) { $cached->handler->releaseLock($_template->smarty, $cached); } return true; } $cached->content = null; $cached->timestamp = false; $cached->exists = false; $cached->valid = false; $cached->processed = false; } return false; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_resource_string.php0000664000175000017500000000542512717671461027116 0ustar daviddaviduid = $source->filepath = sha1($source->name); $source->timestamp = 0; $source->exists = true; } /** * Load template's source from $resource_name into current template object * * @uses decode() to decode base64 and urlencoded template_resources * * @param Smarty_Template_Source $source source object * * @return string template source */ public function getContent(Smarty_Template_Source $source) { return $this->decode($source->name); } /** * decode base64 and urlencode * * @param string $string template_resource to decode * * @return string decoded template_resource */ protected function decode($string) { // decode if specified if (($pos = strpos($string, ':')) !== false) { if (!strncmp($string, 'base64', 6)) { return base64_decode(substr($string, 7)); } elseif (!strncmp($string, 'urlencode', 9)) { return urldecode(substr($string, 10)); } } return $string; } /** * modify resource_name according to resource handlers specifications * * @param Smarty $smarty Smarty instance * @param string $resource_name resource_name to make unique * @param boolean $isConfig flag for config resource * * @return string unique resource name */ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) { return get_class($this) . '#' . $this->decode($resource_name); } /** * Determine basename for compiled filename * Always returns an empty string. * * @param Smarty_Template_Source $source source object * * @return string resource's basename */ public function getBasename(Smarty_Template_Source $source) { return ''; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_configfileparser.php0000664000175000017500000010202612717671461027216 0ustar daviddavidstring = $s->string; $this->metadata = $s->metadata; } else { $this->string = (string) $s; if ($m instanceof TPC_yyToken) { $this->metadata = $m->metadata; } elseif (is_array($m)) { $this->metadata = $m; } } } public function __toString() { return $this->string; } public function offsetExists($offset) { return isset($this->metadata[$offset]); } public function offsetGet($offset) { return $this->metadata[$offset]; } public function offsetSet($offset, $value) { if ($offset === null) { if (isset($value[0])) { $x = ($value instanceof TPC_yyToken) ? $value->metadata : $value; $this->metadata = array_merge($this->metadata, $x); return; } $offset = count($this->metadata); } if ($value === null) { return; } if ($value instanceof TPC_yyToken) { if ($value->metadata) { $this->metadata[$offset] = $value->metadata; } } elseif ($value) { $this->metadata[$offset] = $value; } } public function offsetUnset($offset) { unset($this->metadata[$offset]); } } class TPC_yyStackEntry { public $stateno; /* The state-number */ public $major; /* The major token value. This is the code ** number for the token at this stack level */ public $minor; /* The user-supplied minor token value. This ** is the value of the token */ } ; #line 12 "../smarty/lexer/smarty_internal_configfileparser.y" /** * Smarty Internal Plugin Configfileparse * * This is the config file parser. * It is generated from the smarty_internal_configfileparser.y file * * @package Smarty * @subpackage Compiler * @author Uwe Tews */ class Smarty_Internal_Configfileparser { #line 25 "../smarty/lexer/smarty_internal_configfileparser.y" /** * result status * * @var bool */ public $successful = true; /** * return value * * @var mixed */ public $retvalue = 0; /** * @var */ public $yymajor; /** * lexer object * * @var Smarty_Internal_Configfilelexer */ private $lex; /** * internal error flag * * @var bool */ private $internalError = false; /** * compiler object * * @var Smarty_Internal_Config_File_Compiler */ public $compiler = null; /** * smarty object * * @var Smarty */ public $smarty = null; /** * copy of config_overwrite property * * @var bool */ private $configOverwrite = false; /** * copy of config_read_hidden property * * @var bool */ private $configReadHidden = false; /** * helper map * * @var array */ private static $escapes_single = Array('\\' => '\\', '\'' => '\''); /** * constructor * * @param Smarty_Internal_Configfilelexer $lex * @param Smarty_Internal_Config_File_Compiler $compiler */ function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler) { // set instance object self::instance($this); $this->lex = $lex; $this->smarty = $compiler->smarty; $this->compiler = $compiler; $this->configOverwrite = $this->smarty->config_overwrite; $this->configReadHidden = $this->smarty->config_read_hidden; } /** * @param null $new_instance * * @return null */ public static function &instance($new_instance = null) { static $instance = null; if (isset($new_instance) && is_object($new_instance)) { $instance = $new_instance; } return $instance; } /** * parse optional boolean keywords * * @param string $str * * @return bool */ private function parse_bool($str) { $str = strtolower($str); if (in_array($str, array('on', 'yes', 'true'))) { $res = true; } else { $res = false; } return $res; } /** * parse single quoted string * remove outer quotes * unescape inner quotes * * @param string $qstr * * @return string */ private static function parse_single_quoted_string($qstr) { $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes $ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE); $str = ""; foreach ($ss as $s) { if (strlen($s) === 2 && $s[0] === '\\') { if (isset(self::$escapes_single[$s[1]])) { $s = self::$escapes_single[$s[1]]; } } $str .= $s; } return $str; } /** * parse double quoted string * * @param string $qstr * * @return string */ private static function parse_double_quoted_string($qstr) { $inner_str = substr($qstr, 1, strlen($qstr) - 2); return stripcslashes($inner_str); } /** * parse triple quoted string * * @param string $qstr * * @return string */ private static function parse_tripple_double_quoted_string($qstr) { return stripcslashes($qstr); } /** * set a config variable in target array * * @param array $var * @param array $target_array */ private function set_var(Array $var, Array &$target_array) { $key = $var["key"]; $value = $var["value"]; if ($this->configOverwrite || !isset($target_array['vars'][$key])) { $target_array['vars'][$key] = $value; } else { settype($target_array['vars'][$key], 'array'); $target_array['vars'][$key][] = $value; } } /** * add config variable to global vars * * @param array $vars */ private function add_global_vars(Array $vars) { if (!isset($this->compiler->config_data['vars'])) { $this->compiler->config_data['vars'] = Array(); } foreach ($vars as $var) { $this->set_var($var, $this->compiler->config_data); } } /** * add config variable to section * * @param string $section_name * @param array $vars */ private function add_section_vars($section_name, Array $vars) { if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) { $this->compiler->config_data['sections'][$section_name]['vars'] = Array(); } foreach ($vars as $var) { $this->set_var($var, $this->compiler->config_data['sections'][$section_name]); } } const TPC_OPENB = 1; const TPC_SECTION = 2; const TPC_CLOSEB = 3; const TPC_DOT = 4; const TPC_ID = 5; const TPC_EQUAL = 6; const TPC_FLOAT = 7; const TPC_INT = 8; const TPC_BOOL = 9; const TPC_SINGLE_QUOTED_STRING = 10; const TPC_DOUBLE_QUOTED_STRING = 11; const TPC_TRIPPLE_QUOTES = 12; const TPC_TRIPPLE_TEXT = 13; const TPC_TRIPPLE_QUOTES_END = 14; const TPC_NAKED_STRING = 15; const TPC_OTHER = 16; const TPC_NEWLINE = 17; const TPC_COMMENTSTART = 18; const YY_NO_ACTION = 60; const YY_ACCEPT_ACTION = 59; const YY_ERROR_ACTION = 58; const YY_SZ_ACTTAB = 38; static public $yy_action = array(29, 30, 34, 33, 24, 13, 19, 25, 35, 21, 59, 8, 3, 1, 20, 12, 14, 31, 20, 12, 15, 17, 23, 18, 27, 26, 4, 5, 6, 32, 2, 11, 28, 22, 16, 9, 7, 10,); static public $yy_lookahead = array(7, 8, 9, 10, 11, 12, 5, 27, 15, 16, 20, 21, 23, 23, 17, 18, 13, 14, 17, 18, 15, 2, 17, 4, 25, 26, 6, 3, 3, 14, 23, 1, 24, 17, 2, 25, 22, 25,); const YY_SHIFT_USE_DFLT = - 8; const YY_SHIFT_MAX = 19; static public $yy_shift_ofst = array(- 8, 1, 1, 1, - 7, - 3, - 3, 30, - 8, - 8, - 8, 19, 5, 3, 15, 16, 24, 25, 32, 20,); const YY_REDUCE_USE_DFLT = - 21; const YY_REDUCE_MAX = 10; static public $yy_reduce_ofst = array(- 10, - 1, - 1, - 1, - 20, 10, 12, 8, 14, 7, - 11,); static public $yyExpectedTokens = array(array(), array(5, 17, 18,), array(5, 17, 18,), array(5, 17, 18,), array(7, 8, 9, 10, 11, 12, 15, 16,), array(17, 18,), array(17, 18,), array(1,), array(), array(), array(), array(2, 4,), array(15, 17,), array(13, 14,), array(14,), array(17,), array(3,), array(3,), array(2,), array(6,), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(),); static public $yy_default = array(44, 37, 41, 40, 58, 58, 58, 36, 39, 44, 44, 58, 58, 58, 58, 58, 58, 58, 58, 58, 55, 54, 57, 56, 50, 45, 43, 42, 38, 46, 47, 52, 51, 49, 48, 53,); const YYNOCODE = 29; const YYSTACKDEPTH = 100; const YYNSTATE = 36; const YYNRULE = 22; const YYERRORSYMBOL = 19; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; public static $yyFallback = array(); public function Trace($TraceFILE, $zTracePrompt) { if (!$TraceFILE) { $zTracePrompt = 0; } elseif (!$zTracePrompt) { $TraceFILE = 0; } $this->yyTraceFILE = $TraceFILE; $this->yyTracePrompt = $zTracePrompt; } public function PrintTrace() { $this->yyTraceFILE = fopen('php://output', 'w'); $this->yyTracePrompt = '
'; } public $yyTraceFILE; public $yyTracePrompt; public $yyidx; /* Index of top element in stack */ public $yyerrcnt; /* Shifts left before out of the error */ public $yystack = array(); /* The parser's stack */ public $yyTokenName = array('$', 'OPENB', 'SECTION', 'CLOSEB', 'DOT', 'ID', 'EQUAL', 'FLOAT', 'INT', 'BOOL', 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING', 'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END', 'NAKED_STRING', 'OTHER', 'NEWLINE', 'COMMENTSTART', 'error', 'start', 'global_vars', 'sections', 'var_list', 'section', 'newline', 'var', 'value',); public static $yyRuleName = array('start ::= global_vars sections', 'global_vars ::= var_list', 'sections ::= sections section', 'sections ::=', 'section ::= OPENB SECTION CLOSEB newline var_list', 'section ::= OPENB DOT SECTION CLOSEB newline var_list', 'var_list ::= var_list newline', 'var_list ::= var_list var', 'var_list ::=', 'var ::= ID EQUAL value', 'value ::= FLOAT', 'value ::= INT', 'value ::= BOOL', 'value ::= SINGLE_QUOTED_STRING', 'value ::= DOUBLE_QUOTED_STRING', 'value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END', 'value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END', 'value ::= NAKED_STRING', 'value ::= OTHER', 'newline ::= NEWLINE', 'newline ::= COMMENTSTART NEWLINE', 'newline ::= COMMENTSTART NAKED_STRING NEWLINE',); public function tokenName($tokenType) { if ($tokenType === 0) { return 'End of Input'; } if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { return $this->yyTokenName[$tokenType]; } else { return "Unknown"; } } public static function yy_destructor($yymajor, $yypminor) { switch ($yymajor) { default: break; /* If no destructor action specified: do nothing */ } } public function yy_pop_parser_stack() { if (empty($this->yystack)) { return; } $yytos = array_pop($this->yystack); if ($this->yyTraceFILE && $this->yyidx >= 0) { fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] . "\n"); } $yymajor = $yytos->major; self::yy_destructor($yymajor, $yytos->minor); $this->yyidx --; return $yymajor; } public function __destruct() { while ($this->yystack !== Array()) { $this->yy_pop_parser_stack(); } if (is_resource($this->yyTraceFILE)) { fclose($this->yyTraceFILE); } } public function yy_get_expected_tokens($token) { static $res3 = array(); static $res4 = array(); $state = $this->yystack[$this->yyidx]->stateno; $expected = self::$yyExpectedTokens[$state]; if (isset($res3[$state][$token])) { if ($res3[$state][$token]) { return $expected; } } else { if ($res3[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) { return $expected; } } $stack = $this->yystack; $yyidx = $this->yyidx; do { $yyact = $this->yy_find_shift_action($token); if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { // reduce action $done = 0; do { if ($done ++ == 100) { $this->yyidx = $yyidx; $this->yystack = $stack; // too much recursion prevents proper detection // so give up return array_unique($expected); } $yyruleno = $yyact - self::YYNSTATE; $this->yyidx -= self::$yyRuleInfo[$yyruleno][1]; $nextstate = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, self::$yyRuleInfo[$yyruleno][0]); if (isset(self::$yyExpectedTokens[$nextstate])) { $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]); if (isset($res4[$nextstate][$token])) { if ($res4[$nextstate][$token]) { $this->yyidx = $yyidx; $this->yystack = $stack; return array_unique($expected); } } else { if ($res4[$nextstate][$token] = in_array($token, self::$yyExpectedTokens[$nextstate], true)) { $this->yyidx = $yyidx; $this->yystack = $stack; return array_unique($expected); } } } if ($nextstate < self::YYNSTATE) { // we need to shift a non-terminal $this->yyidx ++; $x = new TPC_yyStackEntry; $x->stateno = $nextstate; $x->major = self::$yyRuleInfo[$yyruleno][0]; $this->yystack[$this->yyidx] = $x; continue 2; } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { $this->yyidx = $yyidx; $this->yystack = $stack; // the last token was just ignored, we can't accept // by ignoring input, this is in essence ignoring a // syntax error! return array_unique($expected); } elseif ($nextstate === self::YY_NO_ACTION) { $this->yyidx = $yyidx; $this->yystack = $stack; // input accepted, but not shifted (I guess) return $expected; } else { $yyact = $nextstate; } } while (true); } break; } while (true); $this->yyidx = $yyidx; $this->yystack = $stack; return array_unique($expected); } public function yy_is_expected_token($token) { static $res = array(); static $res2 = array(); if ($token === 0) { return true; // 0 is not part of this } $state = $this->yystack[$this->yyidx]->stateno; if (isset($res[$state][$token])) { if ($res[$state][$token]) { return true; } } else { if ($res[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) { return true; } } $stack = $this->yystack; $yyidx = $this->yyidx; do { $yyact = $this->yy_find_shift_action($token); if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { // reduce action $done = 0; do { if ($done ++ == 100) { $this->yyidx = $yyidx; $this->yystack = $stack; // too much recursion prevents proper detection // so give up return true; } $yyruleno = $yyact - self::YYNSTATE; $this->yyidx -= self::$yyRuleInfo[$yyruleno][1]; $nextstate = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, self::$yyRuleInfo[$yyruleno][0]); if (isset($res2[$nextstate][$token])) { if ($res2[$nextstate][$token]) { $this->yyidx = $yyidx; $this->yystack = $stack; return true; } } else { if ($res2[$nextstate][$token] = (isset(self::$yyExpectedTokens[$nextstate]) && in_array($token, self::$yyExpectedTokens[$nextstate], true))) { $this->yyidx = $yyidx; $this->yystack = $stack; return true; } } if ($nextstate < self::YYNSTATE) { // we need to shift a non-terminal $this->yyidx ++; $x = new TPC_yyStackEntry; $x->stateno = $nextstate; $x->major = self::$yyRuleInfo[$yyruleno][0]; $this->yystack[$this->yyidx] = $x; continue 2; } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { $this->yyidx = $yyidx; $this->yystack = $stack; if (!$token) { // end of input: this is valid return true; } // the last token was just ignored, we can't accept // by ignoring input, this is in essence ignoring a // syntax error! return false; } elseif ($nextstate === self::YY_NO_ACTION) { $this->yyidx = $yyidx; $this->yystack = $stack; // input accepted, but not shifted (I guess) return true; } else { $yyact = $nextstate; } } while (true); } break; } while (true); $this->yyidx = $yyidx; $this->yystack = $stack; return true; } public function yy_find_shift_action($iLookAhead) { $stateno = $this->yystack[$this->yyidx]->stateno; /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */ if (!isset(self::$yy_shift_ofst[$stateno])) { // no shift actions return self::$yy_default[$stateno]; } $i = self::$yy_shift_ofst[$stateno]; if ($i === self::YY_SHIFT_USE_DFLT) { return self::$yy_default[$stateno]; } if ($iLookAhead == self::YYNOCODE) { return self::YY_NO_ACTION; } $i += $iLookAhead; if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) { if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) { if ($this->yyTraceFILE) { fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " . $this->yyTokenName[$iLookAhead] . " => " . $this->yyTokenName[$iFallback] . "\n"); } return $this->yy_find_shift_action($iFallback); } return self::$yy_default[$stateno]; } else { return self::$yy_action[$i]; } } public function yy_find_reduce_action($stateno, $iLookAhead) { /* $stateno = $this->yystack[$this->yyidx]->stateno; */ if (!isset(self::$yy_reduce_ofst[$stateno])) { return self::$yy_default[$stateno]; } $i = self::$yy_reduce_ofst[$stateno]; if ($i == self::YY_REDUCE_USE_DFLT) { return self::$yy_default[$stateno]; } if ($iLookAhead == self::YYNOCODE) { return self::YY_NO_ACTION; } $i += $iLookAhead; if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[$i] != $iLookAhead) { return self::$yy_default[$stateno]; } else { return self::$yy_action[$i]; } } public function yy_shift($yyNewState, $yyMajor, $yypMinor) { $this->yyidx ++; if ($this->yyidx >= self::YYSTACKDEPTH) { $this->yyidx --; if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt); } while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } #line 255 "../smarty/lexer/smarty_internal_configfileparser.y" $this->internalError = true; $this->compiler->trigger_config_file_error("Stack overflow in configfile parser"); return; } $yytos = new TPC_yyStackEntry; $yytos->stateno = $yyNewState; $yytos->major = $yyMajor; $yytos->minor = $yypMinor; $this->yystack[] = $yytos; if ($this->yyTraceFILE && $this->yyidx > 0) { fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt, $yyNewState); fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt); for ($i = 1; $i <= $this->yyidx; $i ++) { fprintf($this->yyTraceFILE, " %s", $this->yyTokenName[$this->yystack[$i]->major]); } fwrite($this->yyTraceFILE, "\n"); } } public static $yyRuleInfo = array(array(0 => 20, 1 => 2), array(0 => 21, 1 => 1), array(0 => 22, 1 => 2), array(0 => 22, 1 => 0), array(0 => 24, 1 => 5), array(0 => 24, 1 => 6), array(0 => 23, 1 => 2), array(0 => 23, 1 => 2), array(0 => 23, 1 => 0), array(0 => 26, 1 => 3), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), array(0 => 27, 1 => 3), array(0 => 27, 1 => 2), array(0 => 27, 1 => 1), array(0 => 27, 1 => 1), array(0 => 25, 1 => 1), array(0 => 25, 1 => 2), array(0 => 25, 1 => 3),); public static $yyReduceMap = array(0 => 0, 2 => 0, 3 => 0, 19 => 0, 20 => 0, 21 => 0, 1 => 1, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 14 => 14, 15 => 15, 16 => 16, 17 => 17, 18 => 17,); #line 261 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r0() { $this->_retvalue = null; } #line 266 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r1() { $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = null; } #line 280 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r4() { $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = null; } #line 285 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r5() { if ($this->configReadHidden) { $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor); } $this->_retvalue = null; } #line 293 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r6() { $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor; } #line 297 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r7() { $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, Array($this->yystack[$this->yyidx + 0]->minor)); } #line 301 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r8() { $this->_retvalue = Array(); } #line 307 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r9() { $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + - 2]->minor, "value" => $this->yystack[$this->yyidx + 0]->minor); } #line 312 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r10() { $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor; } #line 316 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r11() { $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor; } #line 320 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r12() { $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor); } #line 324 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r13() { $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor); } #line 328 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r14() { $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor); } #line 332 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r15() { $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + - 1]->minor); } #line 336 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r16() { $this->_retvalue = ''; } #line 340 "../smarty/lexer/smarty_internal_configfileparser.y" function yy_r17() { $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } private $_retvalue; public function yy_reduce($yyruleno) { if ($this->yyTraceFILE && $yyruleno >= 0 && $yyruleno < count(self::$yyRuleName)) { fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", $this->yyTracePrompt, $yyruleno, self::$yyRuleName[$yyruleno]); } $this->_retvalue = $yy_lefthand_side = null; if (isset(self::$yyReduceMap[$yyruleno])) { // call the action $this->_retvalue = null; $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}(); $yy_lefthand_side = $this->_retvalue; } $yygoto = self::$yyRuleInfo[$yyruleno][0]; $yysize = self::$yyRuleInfo[$yyruleno][1]; $this->yyidx -= $yysize; for ($i = $yysize; $i; $i --) { // pop all of the right-hand side parameters array_pop($this->yystack); } $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto); if ($yyact < self::YYNSTATE) { if (!$this->yyTraceFILE && $yysize) { $this->yyidx ++; $x = new TPC_yyStackEntry; $x->stateno = $yyact; $x->major = $yygoto; $x->minor = $yy_lefthand_side; $this->yystack[$this->yyidx] = $x; } else { $this->yy_shift($yyact, $yygoto, $yy_lefthand_side); } } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) { $this->yy_accept(); } } public function yy_parse_failed() { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt); } while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } } public function yy_syntax_error($yymajor, $TOKEN) { #line 248 "../smarty/lexer/smarty_internal_configfileparser.y" $this->internalError = true; $this->yymajor = $yymajor; $this->compiler->trigger_config_file_error(); } public function yy_accept() { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt); } while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } #line 241 "../smarty/lexer/smarty_internal_configfileparser.y" $this->successful = !$this->internalError; $this->internalError = false; $this->retvalue = $this->_retvalue; } public function doParse($yymajor, $yytokenvalue) { $yyerrorhit = 0; /* True if yymajor has invoked an error */ if ($this->yyidx === null || $this->yyidx < 0) { $this->yyidx = 0; $this->yyerrcnt = - 1; $x = new TPC_yyStackEntry; $x->stateno = 0; $x->major = 0; $this->yystack = array(); $this->yystack[] = $x; } $yyendofinput = ($yymajor == 0); if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sInput %s\n", $this->yyTracePrompt, $this->yyTokenName[$yymajor]); } do { $yyact = $this->yy_find_shift_action($yymajor); if ($yymajor < self::YYERRORSYMBOL && !$this->yy_is_expected_token($yymajor)) { // force a syntax error $yyact = self::YY_ERROR_ACTION; } if ($yyact < self::YYNSTATE) { $this->yy_shift($yyact, $yymajor, $yytokenvalue); $this->yyerrcnt --; if ($yyendofinput && $this->yyidx >= 0) { $yymajor = 0; } else { $yymajor = self::YYNOCODE; } } elseif ($yyact < self::YYNSTATE + self::YYNRULE) { $this->yy_reduce($yyact - self::YYNSTATE); } elseif ($yyact == self::YY_ERROR_ACTION) { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sSyntax Error!\n", $this->yyTracePrompt); } if (self::YYERRORSYMBOL) { if ($this->yyerrcnt < 0) { $this->yy_syntax_error($yymajor, $yytokenvalue); } $yymx = $this->yystack[$this->yyidx]->major; if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sDiscard input token %s\n", $this->yyTracePrompt, $this->yyTokenName[$yymajor]); } $this->yy_destructor($yymajor, $yytokenvalue); $yymajor = self::YYNOCODE; } else { while ($this->yyidx >= 0 && $yymx != self::YYERRORSYMBOL && ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE) { $this->yy_pop_parser_stack(); } if ($this->yyidx < 0 || $yymajor == 0) { $this->yy_destructor($yymajor, $yytokenvalue); $this->yy_parse_failed(); $yymajor = self::YYNOCODE; } elseif ($yymx != self::YYERRORSYMBOL) { $u2 = 0; $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2); } } $this->yyerrcnt = 3; $yyerrorhit = 1; } else { if ($this->yyerrcnt <= 0) { $this->yy_syntax_error($yymajor, $yytokenvalue); } $this->yyerrcnt = 3; $this->yy_destructor($yymajor, $yytokenvalue); if ($yyendofinput) { $this->yy_parse_failed(); } $yymajor = self::YYNOCODE; } } else { $this->yy_accept(); $yymajor = self::YYNOCODE; } } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php0000664000175000017500000000770112717671461033467 0ustar daviddavidgetAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->tag_nocache = true; } unset($_attr['nocache']); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { if (is_int($_key)) { $_paramsArray[] = "$_key=>$_value"; } else { $_paramsArray[] = "'$_key'=>$_value"; } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; $this->openTag($compiler, $tag . '->' . $method, array($_params, $compiler->nocache)); // maybe nocache because of nocache variables or nocache plugin $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; // compile code $output = "smarty->_cache['tag_stack'][] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } else { $base_tag = substr($tag, 0, - 5); // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } // closing tag of block plugin, restore nocache list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag . '->' . $method); // This tag does create output $compiler->has_output = true; // compile code if (!isset($parameter['modifier_list'])) { $mod_pre = $mod_post = ''; } else { $mod_pre = ' ob_start(); '; $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';'; } $output = "smarty->registered_objects['{$base_tag}'][0]->{$method}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; } return $output . "\n"; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_registerfilter.php0000664000175000017500000000471412717671461030273 0ustar daviddavid true, 'post' => true, 'output' => true, 'variable' => true); /** * Registers a filter function * * @api Smarty::registerFilter() * * @link http://www.smarty.net/docs/en/api.register.filter.tpl * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param string $type filter type * @param callback $callback * @param string|null $name optional filter name * * @return \Smarty|\Smarty_Internal_Template * @throws \SmartyException */ public function registerFilter(Smarty_Internal_TemplateBase $obj, $type, $callback, $name = null) { $smarty = isset($obj->smarty) ? $obj->smarty : $obj; $this->_checkFilterType($type); $name = isset($name) ? $name : $this->_getFilterName($callback); if (!is_callable($callback)) { throw new SmartyException("{$type}filter \"{$name}\" not callable"); } $smarty->registered_filters[$type][$name] = $callback; return $obj; } /** * Return internal filter name * * @param callback $function_name * * @return string internal filter name */ public function _getFilterName($function_name) { if (is_array($function_name)) { $_class_name = (is_object($function_name[0]) ? get_class($function_name[0]) : $function_name[0]); return $_class_name . '_' . $function_name[1]; } elseif (is_string($function_name)) { return $function_name; } else { return 'closure'; } } /** * Check if filter type is valid * * @param string $type * * @throws \SmartyException */ public function _checkFilterType($type) { if (!isset($this->filterTypes[$type])) { throw new SmartyException("Illegal filter type \"{$type}\""); } } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_function.php0000664000175000017500000002524212717671461027235 0ustar daviddavidloopNesting++; // check and get attributes $_attr = $this->getAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->trigger_template_error('nocache option not allowed', null, true); } unset($_attr['nocache']); $_name = trim($_attr['name'], "'\""); $compiler->parent_compiler->tpl_function[$_name] = $compiler->parent_compiler->template->tpl_function[$_name] = array(); $save = array($_attr, $compiler->parser->current_buffer, $compiler->template->compiled->has_nocache_code, $compiler->template->caching); $this->openTag($compiler, 'function', $save); // Init temporary context $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); $compiler->template->compiled->has_nocache_code = false; return true; } } /** * Smarty Internal Plugin Compile Functionclose Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase { /** * Compiler object * * @var object */ private $compiler = null; /** * Compiles code for the {/function} tag * * @param array $args array with attributes from parser * @param object|\Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return bool true */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { $compiler->loopNesting--; $this->compiler = $compiler; $saved_data = $this->closeTag($compiler, array('function')); $_attr = $saved_data[0]; $_name = trim($_attr['name'], "'\""); $compiler->parent_compiler->tpl_function[$_name]['called_functions'] = $compiler->parent_compiler->template->tpl_function[$_name]['called_functions'] = $compiler->called_functions; $compiler->parent_compiler->tpl_function[$_name]['compiled_filepath'] = $compiler->parent_compiler->template->tpl_function[$_name]['compiled_filepath'] = $compiler->parent_compiler->template->compiled->filepath; $compiler->parent_compiler->tpl_function[$_name]['uid'] = $compiler->parent_compiler->template->tpl_function[$_name]['uid'] = $compiler->template->source->uid; $compiler->called_functions = array(); $_parameter = $_attr; unset($_parameter['name']); // default parameter $_paramsArray = array(); foreach ($_parameter as $_key => $_value) { if (is_int($_key)) { $_paramsArray[] = "$_key=>$_value"; } else { $_paramsArray[] = "'$_key'=>$_value"; } } if (!empty($_paramsArray)) { $_params = 'array(' . implode(",", $_paramsArray) . ')'; $_paramsCode = "\$params = array_merge($_params, \$params);\n"; } else { $_paramsCode = ''; } $_functionCode = $compiler->parser->current_buffer; // setup buffer for template function code $compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template(); $_funcName = "smarty_template_function_{$_name}_{$compiler->template->compiled->nocache_hash}"; $_funcNameCaching = $_funcName . '_nocache'; if ($compiler->template->compiled->has_nocache_code) { $compiler->parent_compiler->tpl_function[$_name]['call_name_caching'] = $compiler->parent_compiler->template->tpl_function[$_name]['call_name_caching'] = $_funcNameCaching; $output = "compiled->has_nocache_code = true;\n"; $output .= $_paramsCode; $output .= "\$_smarty_tpl->_cache['saved_tpl_vars'][] = \$_smarty_tpl->tpl_vars;\n"; $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\n}"; $output .= "\$params = var_export(\$params, true);\n"; $output .= "echo \"/*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/tpl_vars;\nforeach (\$params as \\\$key => \\\$value) {\n\\\$_smarty_tpl->tpl_vars[\\\$key] = new Smarty_Variable(\\\$value);\n}\n?>"; $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\n\";?>"; $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode); $output = "template->compiled->nocache_hash}%%*/ \\\$value){\n"; $output .= "if (!isset(\\\$_smarty_tpl->tpl_vars[\\\$key]) || \\\$_smarty_tpl->tpl_vars[\\\$key] === \\\$value) \\\$saved_tpl_vars[\\\$key] = \\\$value;\n}\n"; $output .= "\\\$_smarty_tpl->tpl_vars = \\\$saved_tpl_vars;?>\n"; $output .= "/*/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%*/\";\n?>"; $output .= "template->compiled->nocache_hash}', \$_smarty_tpl->compiled->nocache_hash, ob_get_clean());\n"; $output .= "\$_smarty_tpl->tpl_vars = array_pop(\$_smarty_tpl->_cache['saved_tpl_vars']);\n}\n}\n"; $output .= "/*/ {$_funcName}_nocache */\n\n"; $output .= "?>\n"; $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); $_functionCode = new Smarty_Internal_ParseTree_Tag($compiler->parser, preg_replace_callback("/((<\?php )?echo '\/\*%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/([\S\s]*?)\/\*\/%%SmartyNocache:{$compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", array($this, 'removeNocache'), $_functionCode->to_smarty_php($compiler->parser))); } $compiler->parent_compiler->tpl_function[$_name]['call_name'] = $compiler->parent_compiler->template->tpl_function[$_name]['call_name'] = $_funcName; $output = "tpl_vars;\n"; $output .= $_paramsCode; $output .= "foreach (\$params as \$key => \$value) {\n\$_smarty_tpl->tpl_vars[\$key] = new Smarty_Variable(\$value);\n}?>"; $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); $compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode); $output = " \$value){\n"; $output .= "if (!isset(\$_smarty_tpl->tpl_vars[\$key]) || \$_smarty_tpl->tpl_vars[\$key] === \$value) \$saved_tpl_vars[\$key] = \$value;\n}\n"; $output .= "\$_smarty_tpl->tpl_vars = \$saved_tpl_vars;\n}\n}\n"; $output .= "/*/ {$_funcName} */\n\n"; $output .= "?>\n"; $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $output)); $compiler->parent_compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser); // nocache plugins must be copied if (!empty($compiler->template->compiled->required_plugins['nocache'])) { foreach ($compiler->template->compiled->required_plugins['nocache'] as $plugin => $tmp) { foreach ($tmp as $type => $data) { $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$plugin][$type] = $data; } } } // restore old buffer $compiler->parser->current_buffer = $saved_data[1]; // restore old status $compiler->template->compiled->has_nocache_code = $saved_data[2]; $compiler->template->caching = $saved_data[3]; return true; } /** * @param $match * * @return mixed */ function removeNocache($match) { $code = preg_replace("/((<\?php )?echo '\/\*%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/)|(\/\*\/%%SmartyNocache:{$this->compiler->template->compiled->nocache_hash}%%\*\/';(\?>\n)?)/", '', $match[0]); $code = str_replace(array('\\\'', '\\\\\''), array('\'', '\\\''), $code); return $code; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_unregisterfilter.php0000664000175000017500000000264412717671461030636 0ustar daviddavidsmarty) ? $obj->smarty : $obj; $this->_checkFilterType($type); if (isset($smarty->registered_filters[$type])) { $name = is_string($callback) ? $callback : $this->_getFilterName($callback); if (isset($smarty->registered_filters[$type][$name])) { unset($smarty->registered_filters[$type][$name]); if (empty($smarty->registered_filters[$type])) { unset($smarty->registered_filters[$type]); } } } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_for.php0000664000175000017500000001464212717671461026200 0ustar daviddavidloopNesting++; if ($parameter == 0) { $this->required_attributes = array('start', 'to'); $this->optional_attributes = array('max', 'step'); } else { $this->required_attributes = array('start', 'ifexp', 'var', 'step'); $this->optional_attributes = array(); } // check and get attributes $_attr = $this->getAttributes($compiler, $args); $output = "tpl_vars[$var] = new Smarty_Variable;\n"; $output .= "\$_smarty_tpl->tpl_vars[$var]->value{$index} = {$_statement['value']};\n"; } if (is_array($_attr['var'])) { $var = $_attr['var']['var']; $index = $_attr['var']['smarty_internal_index']; } else { $var = $_attr['var']; $index = ''; } $output .= "if ($_attr[ifexp]) {\nfor (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$var]->value{$index}$_attr[step]) {\n"; } else { $_statement = $_attr['start']; if (is_array($_statement['var'])) { $var = $_statement['var']['var']; $index = $_statement['var']['smarty_internal_index']; } else { $var = $_statement['var']; $index = ''; } $output .= "\$_smarty_tpl->tpl_vars[$var] = new Smarty_Variable;"; if (isset($_attr['step'])) { $output .= "\$_smarty_tpl->tpl_vars[$var]->step = $_attr[step];"; } else { $output .= "\$_smarty_tpl->tpl_vars[$var]->step = 1;"; } if (isset($_attr['max'])) { $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) min(ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step)),$_attr[max]);\n"; } else { $output .= "\$_smarty_tpl->tpl_vars[$var]->total = (int) ceil((\$_smarty_tpl->tpl_vars[$var]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$var]->step));\n"; } $output .= "if (\$_smarty_tpl->tpl_vars[$var]->total > 0) {\n"; $output .= "for (\$_smarty_tpl->tpl_vars[$var]->value{$index} = $_statement[value], \$_smarty_tpl->tpl_vars[$var]->iteration = 1;\$_smarty_tpl->tpl_vars[$var]->iteration <= \$_smarty_tpl->tpl_vars[$var]->total;\$_smarty_tpl->tpl_vars[$var]->value{$index} += \$_smarty_tpl->tpl_vars[$var]->step, \$_smarty_tpl->tpl_vars[$var]->iteration++) {\n"; $output .= "\$_smarty_tpl->tpl_vars[$var]->first = \$_smarty_tpl->tpl_vars[$var]->iteration == 1;"; $output .= "\$_smarty_tpl->tpl_vars[$var]->last = \$_smarty_tpl->tpl_vars[$var]->iteration == \$_smarty_tpl->tpl_vars[$var]->total;"; } $output .= "?>"; $this->openTag($compiler, 'for', array('for', $compiler->nocache)); // maybe nocache because of nocache variables $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; // return compiled code return $output; } } /** * Smarty Internal Plugin Compile Forelse Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase { /** * Compiles code for the {forelse} tag * * @param array $args array with attributes from parser * @param object $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code */ public function compile($args, $compiler, $parameter) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); list($openTag, $nocache) = $this->closeTag($compiler, array('for')); $this->openTag($compiler, 'forelse', array('forelse', $nocache)); return ""; } } /** * Smarty Internal Plugin Compile Forclose Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase { /** * Compiles code for the {/for} tag * * @param array $args array with attributes from parser * @param object $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code */ public function compile($args, $compiler, $parameter) { $compiler->loopNesting--; // check and get attributes $_attr = $this->getAttributes($compiler, $args); // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('for', 'forelse')); $output = "\n"; return $output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_compilealltemplates.php0000664000175000017500000001010412717671461031267 0ustar daviddavidcompileAll($smarty, $extension, $force_compile, $time_limit, $max_errors); } /** * Compile all template or config files * * @param \Smarty $smarty * @param string $extension template file name extension * @param bool $force_compile force all to recompile * @param int $time_limit set maximum execution time * @param int $max_errors set maximum allowed errors * @param bool $isConfig flag true if called for config files * * @return int number of template files compiled */ protected function compileAll(Smarty $smarty, $extension, $force_compile, $time_limit, $max_errors, $isConfig = false) { // switch off time limit if (function_exists('set_time_limit')) { @set_time_limit($time_limit); } $_count = 0; $_error_count = 0; $sourceDir = $isConfig ? $smarty->getConfigDir() : $smarty->getTemplateDir(); // loop over array of source directories foreach ($sourceDir as $_dir) { $_dir_1 = new RecursiveDirectoryIterator($_dir); $_dir_2 = new RecursiveIteratorIterator($_dir_1); foreach ($_dir_2 as $_fileinfo) { $_file = $_fileinfo->getFilename(); if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { continue; } if (!substr_compare($_file, $extension, - strlen($extension)) == 0) { continue; } if ($_fileinfo->getPath() == !substr($_dir, 0, - 1)) { $_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; } echo "\n
", $_dir, '---', $_file; flush(); $_start_time = microtime(true); $_smarty = clone $smarty; $_smarty->force_compile = $force_compile; try { /* @var Smarty_Internal_Template $_tpl */ $_tpl = new $smarty->template_class($_file, $_smarty); $_tpl->caching = Smarty::CACHING_OFF; $_tpl->source = $isConfig ? Smarty_Template_Config::load($_tpl) : Smarty_Template_Source::load($_tpl); if ($_tpl->mustCompile()) { $_tpl->compileTemplateSource(); $_count ++; echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; flush(); } else { echo ' is up to date'; flush(); } } catch (Exception $e) { echo "\n
------>Error: ", $e->getMessage(), "

\n"; $_error_count ++; } // free memory unset($_tpl); $_smarty->_cache['template_objects'] = array(); if ($max_errors !== null && $_error_count == $max_errors) { echo "\n

too many errors\n"; exit(); } } } echo "\n
"; return $_count; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_getstreamvariable.php0000664000175000017500000000236512717671461030742 0ustar daviddavidsmarty) ? $data->smarty : $data; if ($smarty->error_unassigned) { throw new SmartyException('Undefined stream variable "' . $variable . '"'); } else { return null; } } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_getincludepath.php0000664000175000017500000001150112717671461030434 0ustar daviddavid_include_path != $_i_path) { $this->_include_dirs = array(); $this->_include_path = $_i_path; $_dirs = (array) explode(PATH_SEPARATOR, $_i_path); foreach ($_dirs as $_path) { if (is_dir($_path)) { $this->_include_dirs[] = $smarty->_realpath($_path . DS, true); } } return true; } return false; } /** * return array with include path directories * * @param \Smarty $smarty * * @return array */ public function getIncludePathDirs(Smarty $smarty) { $this->isNewIncludePath($smarty); return $this->_include_dirs; } /** * Return full file path from PHP include_path * * @param string[] $dirs * @param string $file * @param \Smarty $smarty * * @return bool|string full filepath or false * */ public function getIncludePath($dirs, $file, Smarty $smarty) { //if (!(isset($this->_has_stream_include) ? $this->_has_stream_include : $this->_has_stream_include = false)) { if (!(isset($this->_has_stream_include) ? $this->_has_stream_include : $this->_has_stream_include = function_exists('stream_resolve_include_path'))) { $this->isNewIncludePath($smarty); } // try PHP include_path foreach ($dirs as $dir) { $dir_n = isset($this->number[$dir]) ? $this->number[$dir] : $this->number[$dir] = $this->counter ++; if (isset($this->isFile[$dir_n][$file])) { if ($this->isFile[$dir_n][$file]) { return $this->isFile[$dir_n][$file]; } else { continue; } } if (isset($this->_user_dirs[$dir_n])) { if (false === $this->_user_dirs[$dir_n]) { continue; } else { $dir = $this->_user_dirs[$dir_n]; } } else { if ($dir[0] == '/' || $dir[1] == ':') { $dir = str_ireplace(getcwd(), '.', $dir); if ($dir[0] == '/' || $dir[1] == ':') { $this->_user_dirs[$dir_n] = false; continue; } } $dir = substr($dir, 2); $this->_user_dirs[$dir_n] = $dir; } if ($this->_has_stream_include) { $path = stream_resolve_include_path($dir . (isset($file) ? $file : '')); if ($path) { return $this->isFile[$dir_n][$file] = $path; } } else { foreach ($this->_include_dirs as $key => $_i_path) { $path = isset($this->isPath[$key][$dir_n]) ? $this->isPath[$key][$dir_n] : $this->isPath[$key][$dir_n] = is_dir($_dir_path = $_i_path . $dir) ? $_dir_path : false; if ($path === false) { continue; } if (isset($file)) { $_file = $this->isFile[$dir_n][$file] = (is_file($path . $file)) ? $path . $file : false; if ($_file) { return $_file; } } else { // no file was given return directory path return $path; } } } } return false; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php0000664000175000017500000000422412717671461032342 0ustar daviddavidhas_output = true; // check and get attributes $_attr = $this->getAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->tag_nocache = true; } unset($_attr['nocache']); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { if (is_int($_key)) { $_paramsArray[] = "$_key=>$_value"; } else { $_paramsArray[] = "'$_key'=>$_value"; } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; // compile code $output = "\n"; return $output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_clearconfig.php0000664000175000017500000000171612717671461027514 0ustar daviddavidconfig_vars[$name]); } else { $data->config_vars = array(); } return $data; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_append.php0000664000175000017500000000327012717671461026654 0ustar daviddavidrequired_attributes = array('var', 'value'); $this->shorttag_order = array('var', 'value'); $this->optional_attributes = array('scope', 'index'); // check and get attributes $_attr = $this->getAttributes($compiler, $args); // map to compile assign attributes if (isset($_attr['index'])) { $_params['smarty_internal_index'] = '[' . $_attr['index'] . ']'; unset($_attr['index']); } else { $_params['smarty_internal_index'] = '[]'; } $_new_attr = array(); foreach ($_attr as $key => $value) { $_new_attr[] = array($key => $value); } // call compile assign return parent::compile($_new_attr, $compiler, $_params); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_parsetree_code.php0000664000175000017500000000157112717671461026663 0ustar daviddaviddata = $data; } /** * Return buffer content in parentheses * * @param \Smarty_Internal_Templateparser $parser * * @return string content */ public function to_smarty_php(Smarty_Internal_Templateparser $parser) { return sprintf("(%s)", $this->data); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_parsetree_template.php0000664000175000017500000000772212717671461027570 0ustar daviddavidsubtrees)) { $this->subtrees = array_merge($this->subtrees, $subtree->subtrees); } else { if ($subtree->data !== '') { $this->subtrees[] = $subtree; } } } /** * Append array to subtree * * @param \Smarty_Internal_Templateparser $parser * @param \Smarty_Internal_ParseTree[] $array */ public function append_array(Smarty_Internal_Templateparser $parser, $array = array()) { if (!empty($array)) { $this->subtrees = array_merge($this->subtrees, (array) $array); } } /** * Prepend array to subtree * * @param \Smarty_Internal_Templateparser $parser * @param \Smarty_Internal_ParseTree[] $array */ public function prepend_array(Smarty_Internal_Templateparser $parser, $array = array()) { if (!empty($array)) { $this->subtrees = array_merge((array) $array, $this->subtrees); } } /** * Sanitize and merge subtree buffers together * * @param \Smarty_Internal_Templateparser $parser * * @return string template code content */ public function to_smarty_php(Smarty_Internal_Templateparser $parser) { $code = ''; for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key ++) { if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Text) { $subtree = $this->subtrees[$key]->to_smarty_php($parser); while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Text || $this->subtrees[$key + 1]->data == '')) { $key ++; if ($this->subtrees[$key]->data == '') { continue; } $subtree .= $this->subtrees[$key]->to_smarty_php($parser); } if ($subtree == '') { continue; } $code .= preg_replace('/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/', "\n", $subtree); continue; } if ($this->subtrees[$key] instanceof Smarty_Internal_ParseTree_Tag) { $subtree = $this->subtrees[$key]->to_smarty_php($parser); while ($key + 1 < $cnt && ($this->subtrees[$key + 1] instanceof Smarty_Internal_ParseTree_Tag || $this->subtrees[$key + 1]->data == '')) { $key ++; if ($this->subtrees[$key]->data == '') { continue; } $subtree = $parser->compiler->appendCode($subtree, $this->subtrees[$key]->to_smarty_php($parser)); } if ($subtree == '') { continue; } $code .= $subtree; continue; } $code .= $this->subtrees[$key]->to_smarty_php($parser); } return $code; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_shared_inheritance.php0000664000175000017500000000324412717671461031225 0ustar daviddavid_cache['inheritanceInit'])) { $compiler->registerPostCompileCallback(array('Smarty_Internal_Compile_Shared_Inheritance', 'postCompile'), array($initChildSequence), 'inheritanceInit', $initChildSequence); $compiler->_cache['inheritanceInit'] = true; } } /** * Compile inheritance initialization code as prefix * * @param \Smarty_Internal_TemplateCompilerBase $compiler * @param bool|false $initChildSequence if true force child template */ static function postCompile(Smarty_Internal_TemplateCompilerBase $compiler, $initChildSequence = false) { $compiler->prefixCompiledCode .= "ext->_inheritance->init(\$_smarty_tpl, " . var_export($initChildSequence, true) . ");\n?>\n"; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_codeframe.php0000664000175000017500000001076712717671461027376 0ustar daviddavidcompiled->has_nocache_code; $properties[ 'version' ] = Smarty::SMARTY_VERSION; $properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); if (!$cache) { $properties[ 'file_dependency' ] = $_template->compiled->file_dependency; $properties[ 'includes' ] = $_template->compiled->includes; if (!empty($compiler->tpl_function)) { $properties[ 'tpl_function' ] = $compiler->tpl_function; } } else { $properties[ 'file_dependency' ] = $_template->cached->file_dependency; $properties[ 'cache_lifetime' ] = $_template->cache_lifetime; if (!empty($_template->tpl_function)) { $properties[ 'tpl_function' ] = $_template->tpl_function; } } $output = "source->filepath . "\" */\n\n"; $dec = "\$_smarty_tpl->smarty->ext->_validateCompiled->decodeProperties(\$_smarty_tpl, " . var_export($properties, true) . ',' . ($cache ? 'true' : 'false') . ")"; $output .= "if ({$dec}) {\n"; $output .= "function {$properties['unifunc']} (\$_smarty_tpl) {\n"; // include code for plugins if (!$cache) { if (!empty($_template->compiled->required_plugins[ 'compiled' ])) { foreach ($_template->compiled->required_plugins[ 'compiled' ] as $tmp) { foreach ($tmp as $data) { $file = addslashes($data[ 'file' ]); if (is_array($data[ 'function' ])) { $output .= "if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n"; } else { $output .= "if (!is_callable('{$data['function']}')) require_once '{$file}';\n"; } } } } if ($_template->caching && !empty($_template->compiled->required_plugins[ 'nocache' ])) { $_template->compiled->has_nocache_code = true; $output .= "echo '/*%%SmartyNocache:{$_template->compiled->nocache_hash}%%*/smarty; "; foreach ($_template->compiled->required_plugins[ 'nocache' ] as $tmp) { foreach ($tmp as $data) { $file = addslashes($data[ 'file' ]); if (is_Array($data[ 'function' ])) { $output .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n"); } else { $output .= addslashes("if (!is_callable('{$data['function']}')) require_once '{$file}';\n"); } } } $output .= "?>/*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%*/';\n"; } } $output .= "?>\n"; $output .= $content; $output .= ""; $output .= $functions; $output .= "[\n]?<\?php\s*/', '/\?>\s*$/'), array("\n", ''), $output); } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_registerresource.php0000664000175000017500000000322312717671461030627 0ustar daviddavidsmarty) ? $obj->smarty : $obj; $smarty->registered_resources[$name] = $resource_handler instanceof Smarty_Resource ? $resource_handler : array($resource_handler, false); return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smartycompilerexception.php0000664000175000017500000000133212717671461025370 0ustar daviddavid Smarty Compiler: ' . $this->message . ' <-- '; } /** * The line number of the template error * * @type int|null */ public $line = null; /** * The template source snippet relating to the error * * @type string|null */ public $source = null; /** * The raw text of the error message * * @type string|null */ public $desc = null; /** * The resource identifier or template name * * @type string|null */ public $template = null; } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_resource_recompiled.php0000664000175000017500000000211212717671461026025 0ustar daviddavidfilepath = false; $compiled->timestamp = false; $compiled->exists = false; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_debug.php0000664000175000017500000000206312717671461026472 0ustar daviddavidgetAttributes($compiler, $args); // compile always as nocache $compiler->tag_nocache = true; // display debug template $_output = "display_debug(\$_smarty_tpl);\n"; $_output .= "unset(\$_smarty_debug);\n?>"; return $_output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php0000664000175000017500000001517112717671461032136 0ustar daviddavidpropertyPreg = '~('; $this->startOffset = 0; $this->resultOffsets = array(); $this->matchResults = array('named' => array(), 'item' => array()); if ($this->isNamed) { $this->buildPropertyPreg(true, $attributes); } if (isset($this->itemProperties)) { if ($this->isNamed) { $this->propertyPreg .= '|'; } $this->buildPropertyPreg(false, $attributes); } $this->propertyPreg .= ')\W~i'; // Template source $this->matchTemplateSource($compiler); // Parent template source $this->matchParentTemplateSource($compiler); // {block} source $this->matchBlockSource($compiler); } /** * Build property preg string * * @param bool $named * @param array $attributes */ public function buildPropertyPreg($named, $attributes) { if ($named) { $this->resultOffsets['named'] = $this->startOffset + 3; $this->propertyPreg .= "([\$]smarty[.]{$this->tagName}[.]{$attributes['name']}[.]("; $properties = $this->nameProperties; } else { $this->resultOffsets['item'] = $this->startOffset + 3; $this->propertyPreg .= "([\$]{$attributes['item']}[@]("; $properties = $this->itemProperties; } $this->startOffset += count($properties) + 2; $propName = reset($properties); while ($propName) { $this->propertyPreg .= "({$propName})"; $propName = next($properties); if ($propName) { $this->propertyPreg .= '|'; } } $this->propertyPreg .= '))'; } /** * Find matches in source string * * @param string $source */ public function matchProperty($source) { preg_match_all($this->propertyPreg, $source, $match, PREG_SET_ORDER); foreach ($this->resultOffsets as $key => $offset) { foreach ($match as $m) { if (isset($m[$offset]) && !empty($m[$offset])) { $this->matchResults[$key][strtolower($m[$offset])] = true; } } } } /** * Find matches in template source * * @param \Smarty_Internal_TemplateCompilerBase $compiler */ public function matchTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler) { $this->matchProperty($compiler->parser->lex->data); } /** * Find matches in all parent template source * * @param \Smarty_Internal_TemplateCompilerBase $compiler */ public function matchParentTemplateSource(Smarty_Internal_TemplateCompilerBase $compiler) { // search parent compiler template source $nextCompiler = $compiler; while ($nextCompiler !== $nextCompiler->parent_compiler) { $nextCompiler = $nextCompiler->parent_compiler; if ($compiler !== $nextCompiler) { // get template source $_content = $nextCompiler->template->source->getContent(); if ($_content != '') { // run pre filter if required if ((isset($nextCompiler->smarty->autoload_filters['pre']) || isset($nextCompiler->smarty->registered_filters['pre']))) { $_content = $nextCompiler->smarty->ext->_filter_Handler->runFilter('pre', $_content, $nextCompiler->template); } $this->matchProperty($_content); } } } } /** * Find matches in {block} tag source * * @param \Smarty_Internal_TemplateCompilerBase $compiler */ public function matchBlockSource(Smarty_Internal_TemplateCompilerBase $compiler) { } /** * Compiles code for the {$smarty.foreach.xxx} or {$smarty.section.xxx}tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code * @throws \SmartyCompilerException */ public function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { $tag = strtolower(trim($parameter[ 0 ], '"\'')); $name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false; if (!$name) { $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true); } $property = isset($parameter[ 2 ]) ? strtolower($compiler->getId($parameter[ 2 ])) : false; if (!$property || !in_array($property, $this->nameProperties)) { $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} property attribute", null, true); } $tagVar = "'__smarty_{$tag}_{$name}'"; return "(isset(\$_smarty_tpl->tpl_vars[{$tagVar}]->value['{$property}']) ? \$_smarty_tpl->tpl_vars[{$tagVar}]->value['{$property}'] : null)"; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_gettags.php0000664000175000017500000000400312717671461026666 0ustar daviddavidsmarty) ? $this->smarty : $obj; if ($obj->_objType == 2 && !isset($template)) { $tpl = clone $obj; } elseif (isset($template) && $template->_objType == 2) { $tpl = clone $template; } elseif (isset($template) && is_string($template)) { /* @var Smarty_Internal_Template $tpl */ $tpl = new $smarty->template_class($template, $smarty); // checks if template exists if (!$tpl->source->exists) { throw new SmartyException("Unable to load template {$tpl->source->type} '{$tpl->source->name}'"); } } if (isset($tpl)) { $tpl->smarty = clone $tpl->smarty; $tpl->smarty->_cache['get_used_tags'] = true; $tpl->_cache['used_tags'] = array(); $tpl->smarty->merge_compiled_includes = false; $tpl->smarty->disableSecurity(); $tpl->caching = false; $tpl->loadCompiler(); $tpl->compiler->compileTemplate($tpl); return $tpl->_cache['used_tags']; } throw new SmartyException("Missing template specification"); } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php0000664000175000017500000000313212717671461027573 0ustar daviddavidsource->exists) { if (isset($_template->parent) && $_template->parent->_objType == 2) { $parent_resource = " in '$_template->parent->template_resource}'"; } else { $parent_resource = ''; } throw new SmartyException("Unable to load template {$_template->source->type} '{$_template->source->name}'{$parent_resource}"); } if ($_template->mustCompile === null) { $_template->mustCompile = (!$_template->source->handler->uncompiled && ($_template->smarty->force_compile || $_template->source->handler->recompiled || !$_template->compiled->exists || ($_template->smarty->compile_check && $_template->compiled->getTimeStamp() < $_template->source->getTimeStamp()))); } return $_template->mustCompile; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php0000664000175000017500000000575712717671461033215 0ustar daviddavidhas_output = true; // check and get attributes $_attr = $this->getAttributes($compiler, $args); if ($_attr['nocache']) { $compiler->tag_nocache = true; } unset($_attr['nocache']); if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) { $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag]; } else { $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag]; } // not cachable? $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[1]; // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { if (is_int($_key)) { $_paramsArray[] = "$_key=>$_value"; } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) { $_value = str_replace("'", "^#^", $_value); $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; } else { $_paramsArray[] = "'$_key'=>$_value"; } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; $function = $tag_info[0]; // compile code if (!is_array($function)) { $output = "\n"; } elseif (is_object($function[0])) { $output = "smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n"; } else { $output = "\n"; } return $output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_testinstall.php0000664000175000017500000010276712717671461026256 0ustar daviddavid\n"; echo "Smarty Installation test...\n"; echo "Testing template directory...\n"; } $_stream_resolve_include_path = function_exists('stream_resolve_include_path'); // test if all registered template_dir are accessible foreach ($smarty->getTemplateDir() as $template_dir) { $_template_dir = $template_dir; $template_dir = realpath($template_dir); // resolve include_path or fail existence if (!$template_dir) { if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) { // try PHP include_path if ($_stream_resolve_include_path) { $template_dir = stream_resolve_include_path($_template_dir); } else { $template_dir = $smarty->ext->_getIncludePath->getIncludePath($_template_dir, null, $smarty); } if ($template_dir !== false) { if ($errors === null) { echo "$template_dir is OK.\n"; } continue; } else { $status = false; $message = "FAILED: $_template_dir does not exist (and couldn't be found in include_path either)"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'template_dir' ] = $message; } continue; } } else { $status = false; $message = "FAILED: $_template_dir does not exist"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'template_dir' ] = $message; } continue; } } if (!is_dir($template_dir)) { $status = false; $message = "FAILED: $template_dir is not a directory"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'template_dir' ] = $message; } } elseif (!is_readable($template_dir)) { $status = false; $message = "FAILED: $template_dir is not readable"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'template_dir' ] = $message; } } else { if ($errors === null) { echo "$template_dir is OK.\n"; } } } if ($errors === null) { echo "Testing compile directory...\n"; } // test if registered compile_dir is accessible $__compile_dir = $smarty->getCompileDir(); $_compile_dir = realpath($__compile_dir); if (!$_compile_dir) { $status = false; $message = "FAILED: {$__compile_dir} does not exist"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'compile_dir' ] = $message; } } elseif (!is_dir($_compile_dir)) { $status = false; $message = "FAILED: {$_compile_dir} is not a directory"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'compile_dir' ] = $message; } } elseif (!is_readable($_compile_dir)) { $status = false; $message = "FAILED: {$_compile_dir} is not readable"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'compile_dir' ] = $message; } } elseif (!is_writable($_compile_dir)) { $status = false; $message = "FAILED: {$_compile_dir} is not writable"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'compile_dir' ] = $message; } } else { if ($errors === null) { echo "{$_compile_dir} is OK.\n"; } } if ($errors === null) { echo "Testing plugins directory...\n"; } // test if all registered plugins_dir are accessible // and if core plugins directory is still registered $_core_plugins_dir = realpath(dirname(__FILE__) . '/../plugins'); $_core_plugins_available = false; foreach ($smarty->getPluginsDir() as $plugin_dir) { $_plugin_dir = $plugin_dir; $plugin_dir = realpath($plugin_dir); // resolve include_path or fail existence if (!$plugin_dir) { if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) { // try PHP include_path if ($_stream_resolve_include_path) { $plugin_dir = stream_resolve_include_path($_plugin_dir); } else { $plugin_dir = $smarty->ext->_getIncludePath->getIncludePath($_plugin_dir, null, $smarty); } if ($plugin_dir !== false) { if ($errors === null) { echo "$plugin_dir is OK.\n"; } continue; } else { $status = false; $message = "FAILED: $_plugin_dir does not exist (and couldn't be found in include_path either)"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'plugins_dir' ] = $message; } continue; } } else { $status = false; $message = "FAILED: $_plugin_dir does not exist"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'plugins_dir' ] = $message; } continue; } } if (!is_dir($plugin_dir)) { $status = false; $message = "FAILED: $plugin_dir is not a directory"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'plugins_dir' ] = $message; } } elseif (!is_readable($plugin_dir)) { $status = false; $message = "FAILED: $plugin_dir is not readable"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'plugins_dir' ] = $message; } } elseif ($_core_plugins_dir && $_core_plugins_dir == realpath($plugin_dir)) { $_core_plugins_available = true; if ($errors === null) { echo "$plugin_dir is OK.\n"; } } else { if ($errors === null) { echo "$plugin_dir is OK.\n"; } } } if (!$_core_plugins_available) { $status = false; $message = "WARNING: Smarty's own libs/plugins is not available"; if ($errors === null) { echo $message . ".\n"; } elseif (!isset($errors[ 'plugins_dir' ])) { $errors[ 'plugins_dir' ] = $message; } } if ($errors === null) { echo "Testing cache directory...\n"; } // test if all registered cache_dir is accessible $__cache_dir = $smarty->getCacheDir(); $_cache_dir = realpath($__cache_dir); if (!$_cache_dir) { $status = false; $message = "FAILED: {$__cache_dir} does not exist"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'cache_dir' ] = $message; } } elseif (!is_dir($_cache_dir)) { $status = false; $message = "FAILED: {$_cache_dir} is not a directory"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'cache_dir' ] = $message; } } elseif (!is_readable($_cache_dir)) { $status = false; $message = "FAILED: {$_cache_dir} is not readable"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'cache_dir' ] = $message; } } elseif (!is_writable($_cache_dir)) { $status = false; $message = "FAILED: {$_cache_dir} is not writable"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'cache_dir' ] = $message; } } else { if ($errors === null) { echo "{$_cache_dir} is OK.\n"; } } if ($errors === null) { echo "Testing configs directory...\n"; } // test if all registered config_dir are accessible foreach ($smarty->getConfigDir() as $config_dir) { $_config_dir = $config_dir; // resolve include_path or fail existence if (!$config_dir) { if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) { // try PHP include_path if ($_stream_resolve_include_path) { $config_dir = stream_resolve_include_path($_config_dir); } else { $config_dir = $smarty->ext->_getIncludePath->getIncludePath($_config_dir, null, $smarty); } if ($config_dir !== false) { if ($errors === null) { echo "$config_dir is OK.\n"; } continue; } else { $status = false; $message = "FAILED: $_config_dir does not exist (and couldn't be found in include_path either)"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'config_dir' ] = $message; } continue; } } else { $status = false; $message = "FAILED: $_config_dir does not exist"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'config_dir' ] = $message; } continue; } } if (!is_dir($config_dir)) { $status = false; $message = "FAILED: $config_dir is not a directory"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'config_dir' ] = $message; } } elseif (!is_readable($config_dir)) { $status = false; $message = "FAILED: $config_dir is not readable"; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'config_dir' ] = $message; } } else { if ($errors === null) { echo "$config_dir is OK.\n"; } } } if ($errors === null) { echo "Testing sysplugin files...\n"; } // test if sysplugins are available $source = SMARTY_SYSPLUGINS_DIR; if (is_dir($source)) { $expectedSysplugins = array('smartycompilerexception.php' => true, 'smartyexception.php' => true, 'smarty_cacheresource.php' => true, 'smarty_cacheresource_custom.php' => true, 'smarty_cacheresource_keyvaluestore.php' => true, 'smarty_data.php' => true, 'smarty_internal_cacheresource_file.php' => true, 'smarty_internal_compilebase.php' => true, 'smarty_internal_compile_append.php' => true, 'smarty_internal_compile_assign.php' => true, 'smarty_internal_compile_block.php' => true, 'smarty_internal_compile_break.php' => true, 'smarty_internal_compile_call.php' => true, 'smarty_internal_compile_capture.php' => true, 'smarty_internal_compile_config_load.php' => true, 'smarty_internal_compile_continue.php' => true, 'smarty_internal_compile_debug.php' => true, 'smarty_internal_compile_eval.php' => true, 'smarty_internal_compile_extends.php' => true, 'smarty_internal_compile_for.php' => true, 'smarty_internal_compile_foreach.php' => true, 'smarty_internal_compile_function.php' => true, 'smarty_internal_compile_if.php' => true, 'smarty_internal_compile_include.php' => true, 'smarty_internal_compile_include_php.php' => true, 'smarty_internal_compile_insert.php' => true, 'smarty_internal_compile_ldelim.php' => true, 'smarty_internal_compile_nocache.php' => true, 'smarty_internal_compile_private_block_plugin.php' => true, 'smarty_internal_compile_private_foreachsection.php' => true, 'smarty_internal_compile_private_function_plugin.php' => true, 'smarty_internal_compile_private_modifier.php' => true, 'smarty_internal_compile_private_object_block_function.php' => true, 'smarty_internal_compile_private_object_function.php' => true, 'smarty_internal_compile_private_php.php' => true, 'smarty_internal_compile_private_print_expression.php' => true, 'smarty_internal_compile_private_registered_block.php' => true, 'smarty_internal_compile_private_registered_function.php' => true, 'smarty_internal_compile_private_special_variable.php' => true, 'smarty_internal_compile_rdelim.php' => true, 'smarty_internal_compile_section.php' => true, 'smarty_internal_compile_setfilter.php' => true, 'smarty_internal_compile_shared_inheritance.php' => true, 'smarty_internal_compile_while.php' => true, 'smarty_internal_configfilelexer.php' => true, 'smarty_internal_configfileparser.php' => true, 'smarty_internal_config_file_compiler.php' => true, 'smarty_internal_data.php' => true, 'smarty_internal_debug.php' => true, 'smarty_internal_extension_clear.php' => true, 'smarty_internal_extension_handler.php' => true, 'smarty_internal_method_addautoloadfilters.php' => true, 'smarty_internal_method_adddefaultmodifiers.php' => true, 'smarty_internal_method_append.php' => true, 'smarty_internal_method_appendbyref.php' => true, 'smarty_internal_method_assignbyref.php' => true, 'smarty_internal_method_assignglobal.php' => true, 'smarty_internal_method_clearallassign.php' => true, 'smarty_internal_method_clearallcache.php' => true, 'smarty_internal_method_clearassign.php' => true, 'smarty_internal_method_clearcache.php' => true, 'smarty_internal_method_clearcompiledtemplate.php' => true, 'smarty_internal_method_clearconfig.php' => true, 'smarty_internal_method_compileallconfig.php' => true, 'smarty_internal_method_compilealltemplates.php' => true, 'smarty_internal_method_configload.php' => true, 'smarty_internal_method_createdata.php' => true, 'smarty_internal_method_getautoloadfilters.php' => true, 'smarty_internal_method_getconfigvars.php' => true, 'smarty_internal_method_getdebugtemplate.php' => true, 'smarty_internal_method_getdefaultmodifiers.php' => true, 'smarty_internal_method_getregisteredobject.php' => true, 'smarty_internal_method_getstreamvariable.php' => true, 'smarty_internal_method_gettags.php' => true, 'smarty_internal_method_gettemplatevars.php' => true, 'smarty_internal_method_loadfilter.php' => true, 'smarty_internal_method_loadplugin.php' => true, 'smarty_internal_method_mustcompile.php' => true, 'smarty_internal_method_registercacheresource.php' => true, 'smarty_internal_method_registerclass.php' => true, 'smarty_internal_method_registerdefaultconfighandler.php' => true, 'smarty_internal_method_registerdefaultpluginhandler.php' => true, 'smarty_internal_method_registerdefaulttemplatehandler.php' => true, 'smarty_internal_method_registerfilter.php' => true, 'smarty_internal_method_registerobject.php' => true, 'smarty_internal_method_registerplugin.php' => true, 'smarty_internal_method_registerresource.php' => true, 'smarty_internal_method_setautoloadfilters.php' => true, 'smarty_internal_method_setdebugtemplate.php' => true, 'smarty_internal_method_setdefaultmodifiers.php' => true, 'smarty_internal_method_unloadfilter.php' => true, 'smarty_internal_method_unregistercacheresource.php' => true, 'smarty_internal_method_unregisterfilter.php' => true, 'smarty_internal_method_unregisterobject.php' => true, 'smarty_internal_method_unregisterplugin.php' => true, 'smarty_internal_method_unregisterresource.php' => true, 'smarty_internal_nocache_insert.php' => true, 'smarty_internal_parsetree.php' => true, 'smarty_internal_parsetree_code.php' => true, 'smarty_internal_parsetree_dq.php' => true, 'smarty_internal_parsetree_dqcontent.php' => true, 'smarty_internal_parsetree_tag.php' => true, 'smarty_internal_parsetree_template.php' => true, 'smarty_internal_parsetree_text.php' => true, 'smarty_internal_resource_eval.php' => true, 'smarty_internal_resource_extends.php' => true, 'smarty_internal_resource_file.php' => true, 'smarty_internal_resource_php.php' => true, 'smarty_internal_resource_registered.php' => true, 'smarty_internal_resource_stream.php' => true, 'smarty_internal_resource_string.php' => true, 'smarty_internal_runtime_cachemodify.php' => true, 'smarty_internal_runtime_codeframe.php' => true, 'smarty_internal_runtime_filterhandler.php' => true, 'smarty_internal_runtime_foreach.php' => true, 'smarty_internal_runtime_getincludepath.php' => true, 'smarty_internal_runtime_hhvm.php' => true, 'smarty_internal_runtime_inheritance.php' => true, 'smarty_internal_runtime_subtemplate.php' => true, 'smarty_internal_runtime_tplfunction.php' => true, 'smarty_internal_runtime_updatecache.php' => true, 'smarty_internal_runtime_updatescope.php' => true, 'smarty_internal_runtime_validatecompiled.php' => true, 'smarty_internal_runtime_var.php' => true, 'smarty_internal_runtime_writefile.php' => true, 'smarty_internal_smartytemplatecompiler.php' => true, 'smarty_internal_template.php' => true, 'smarty_internal_templatebase.php' => true, 'smarty_internal_templatecompilerbase.php' => true, 'smarty_internal_templatelexer.php' => true, 'smarty_internal_templateparser.php' => true, 'smarty_internal_testinstall.php' => true, 'smarty_internal_undefined.php' => true, 'smarty_resource.php' => true, 'smarty_resource_custom.php' => true, 'smarty_resource_recompiled.php' => true, 'smarty_resource_uncompiled.php' => true, 'smarty_security.php' => true, 'smarty_template_cached.php' => true, 'smarty_template_compiled.php' => true, 'smarty_template_config.php' => true, 'smarty_template_resource_base.php' => true, 'smarty_template_source.php' => true, 'smarty_undefined_variable.php' => true, 'smarty_variable.php' => true,); $iterator = new DirectoryIterator($source); foreach ($iterator as $file) { if (!$file->isDot()) { $filename = $file->getFilename(); if (isset($expectedSysplugins[ $filename ])) { unset($expectedSysplugins[ $filename ]); } } } if ($expectedSysplugins) { $status = false; $message = "FAILED: files missing from libs/sysplugins: " . join(', ', array_keys($expectedSysplugins)); if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'sysplugins' ] = $message; } } elseif ($errors === null) { echo "... OK\n"; } } else { $status = false; $message = "FAILED: " . SMARTY_SYSPLUGINS_DIR . ' is not a directory'; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'sysplugins_dir_constant' ] = $message; } } if ($errors === null) { echo "Testing plugin files...\n"; } // test if core plugins are available $source = SMARTY_PLUGINS_DIR; if (is_dir($source)) { $expectedPlugins = array('block.textformat.php' => true, 'function.counter.php' => true, 'function.cycle.php' => true, 'function.fetch.php' => true, 'function.html_checkboxes.php' => true, 'function.html_image.php' => true, 'function.html_options.php' => true, 'function.html_radios.php' => true, 'function.html_select_date.php' => true, 'function.html_select_time.php' => true, 'function.html_table.php' => true, 'function.mailto.php' => true, 'function.math.php' => true, 'modifier.capitalize.php' => true, 'modifier.date_format.php' => true, 'modifier.debug_print_var.php' => true, 'modifier.escape.php' => true, 'modifier.regex_replace.php' => true, 'modifier.replace.php' => true, 'modifier.spacify.php' => true, 'modifier.truncate.php' => true, 'modifiercompiler.cat.php' => true, 'modifiercompiler.count_characters.php' => true, 'modifiercompiler.count_paragraphs.php' => true, 'modifiercompiler.count_sentences.php' => true, 'modifiercompiler.count_words.php' => true, 'modifiercompiler.default.php' => true, 'modifiercompiler.escape.php' => true, 'modifiercompiler.from_charset.php' => true, 'modifiercompiler.indent.php' => true, 'modifiercompiler.lower.php' => true, 'modifiercompiler.noprint.php' => true, 'modifiercompiler.string_format.php' => true, 'modifiercompiler.strip.php' => true, 'modifiercompiler.strip_tags.php' => true, 'modifiercompiler.to_charset.php' => true, 'modifiercompiler.unescape.php' => true, 'modifiercompiler.upper.php' => true, 'modifiercompiler.wordwrap.php' => true, 'outputfilter.trimwhitespace.php' => true, 'shared.escape_special_chars.php' => true, 'shared.literal_compiler_param.php' => true, 'shared.make_timestamp.php' => true, 'shared.mb_str_replace.php' => true, 'shared.mb_unicode.php' => true, 'shared.mb_wordwrap.php' => true, 'variablefilter.htmlspecialchars.php' => true,); $iterator = new DirectoryIterator($source); foreach ($iterator as $file) { if (!$file->isDot()) { $filename = $file->getFilename(); if (isset($expectedPlugins[ $filename ])) { unset($expectedPlugins[ $filename ]); } } } if ($expectedPlugins) { $status = false; $message = "FAILED: files missing from libs/plugins: " . join(', ', array_keys($expectedPlugins)); if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'plugins' ] = $message; } } elseif ($errors === null) { echo "... OK\n"; } } else { $status = false; $message = "FAILED: " . SMARTY_PLUGINS_DIR . ' is not a directory'; if ($errors === null) { echo $message . ".\n"; } else { $errors[ 'plugins_dir_constant' ] = $message; } } if ($errors === null) { echo "Tests complete.\n"; echo "\n"; } return $status; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_nocache.php0000664000175000017500000000413412717671461027005 0ustar daviddavidgetAttributes($compiler, $args); $this->openTag($compiler, 'nocache', array($compiler->nocache)); // enter nocache mode $compiler->nocache = true; // this tag does not return compiled code $compiler->has_code = false; return true; } } /** * Smarty Internal Plugin Compile Nocacheclose Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase { /** * Compiles code for the {/nocache} tag * This tag does not generate compiled output. It only sets a compiler flag. * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * * @return bool */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { $_attr = $this->getAttributes($compiler, $args); // leave nocache mode list($compiler->nocache) = $this->closeTag($compiler, array('nocache')); // this tag does not return compiled code $compiler->has_code = false; return true; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_extension_handler.php0000664000175000017500000001426012717671461027407 0ustar daviddavid 0, 'DefaultModifiers' => 0, 'ConfigVars' => 0, 'DebugTemplate' => 0, 'RegisteredObject' => 0, 'StreamVariable' => 0, 'TemplateVars' => 0,);# private $resolvedProperties = array(); /** * Call external Method * * @param \Smarty_Internal_Data $data * @param string $name external method names * @param array $args argument array * * @return mixed * @throws SmartyException */ public function _callExternalMethod(Smarty_Internal_Data $data, $name, $args) { /* @var Smarty $data ->smarty */ $smarty = isset($data->smarty) ? $data->smarty : $data; if (!isset($smarty->ext->$name)) { $class = 'Smarty_Internal_Method_' . ucfirst($name); if (preg_match('/^(set|get)([A-Z].*)$/', $name, $match)) { if (!isset($this->_property_info[$prop = $match[2]])) { // convert camel case to underscored name $this->resolvedProperties[$prop] = $pn = strtolower(join('_', preg_split('/([A-Z][^A-Z]*)/', $prop, - 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE))); $this->_property_info[$prop] = property_exists($data, $pn) ? 1 : ($data->_objType == 2 && property_exists($smarty, $pn) ? 2 : 0); } if ($this->_property_info[$prop]) { $pn = $this->resolvedProperties[$prop]; if ($match[1] == 'get') { return $this->_property_info[$prop] == 1 ? $data->$pn : $data->smarty->$pn; } else { return $this->_property_info[$prop] == 1 ? $data->$pn = $args[0] : $data->smarty->$pn = $args[0]; } } elseif (!class_exists($class)) { throw new SmartyException("property '$pn' does not exist."); } } if (class_exists($class)) { $callback = array($smarty->ext->$name = new $class(), $name); } } else { $callback = array($smarty->ext->$name, $name); } array_unshift($args, $data); if (isset($callback) && $callback[0]->objMap | $data->_objType) { return call_user_func_array($callback, $args); } return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args); } /** * set extension property * * @param string $property_name property name * @param mixed $value value * * @throws SmartyException */ public function __set($property_name, $value) { $this->$property_name = $value; } /** * get extension object * * @param string $property_name property name * * @return mixed|Smarty_Template_Cached * @throws SmartyException */ public function __get($property_name) { // object properties of runtime template extensions will start with '_' if ($property_name[0] == '_') { $class = 'Smarty_Internal_Runtime_' . ucfirst(substr($property_name, 1)); } else { $class = 'Smarty_Internal_Method_' . ucfirst($property_name); } if (class_exists($class)) { return $this->$property_name = new $class(); } return $this; } /** * Call error handler for undefined method * * @param string $name unknown method-name * @param array $args argument array * * @return mixed * @throws SmartyException */ public function __call($name, $args) { return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args); } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_validatecompiled.php0000664000175000017500000000732712717671461030755 0ustar daviddavidsmarty->compile_check) || $tpl->smarty->compile_check == 1) ) { // check file dependencies at compiled code foreach ($properties['file_dependency'] as $_file_to_check) { if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'extends' || $_file_to_check[2] == 'php') { if ($tpl->source->filepath == $_file_to_check[0]) { // do not recheck current template continue; //$mtime = $tpl->source->getTimeStamp(); } else { // file and php types can be checked without loading the respective resource handlers $mtime = is_file($_file_to_check[0]) ? filemtime($_file_to_check[0]) : false; } } elseif ($_file_to_check[2] == 'string') { continue; } else { $handler = Smarty_Resource::load($tpl->smarty, $_file_to_check[2]); if ($handler->checkTimestamps()) { $source = Smarty_Template_Source::load($tpl, $tpl->smarty, $_file_to_check[ 0 ]); $mtime = $source->getTimeStamp(); } else { continue; } } if (!$mtime || $mtime > $_file_to_check[1]) { $is_valid = false; break; } } } if ($cache) { // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc if ($tpl->caching === Smarty::CACHING_LIFETIME_SAVED && $properties['cache_lifetime'] >= 0 && (time() > ($tpl->cached->timestamp + $properties['cache_lifetime'])) ) { $is_valid = false; } $tpl->cached->cache_lifetime = $properties['cache_lifetime']; $tpl->cached->valid = $is_valid; $resource = $tpl->cached; } else { $tpl->mustCompile = !$is_valid; $resource = $tpl->compiled; $resource->includes = isset($properties['includes']) ? $properties['includes'] : array(); } if ($is_valid) { $resource->unifunc = $properties['unifunc']; $resource->has_nocache_code = $properties['has_nocache_code']; // $tpl->compiled->nocache_hash = $properties['nocache_hash']; $resource->file_dependency = $properties['file_dependency']; if (isset($properties['tpl_function'])) { $tpl->tpl_function = $properties['tpl_function']; } } return $is_valid && !function_exists($properties['unifunc']); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_security.php0000664000175000017500000005564312717671461023663 0ustar daviddavid" tags in templates. * possible values: *
    *
  • Smarty::PHP_PASSTHRU -> echo PHP tags as they are
  • *
  • Smarty::PHP_QUOTE -> escape tags as entities
  • *
  • Smarty::PHP_REMOVE -> remove php tags
  • *
  • Smarty::PHP_ALLOW -> execute php tags
  • *
* * @var integer */ public $php_handling = Smarty::PHP_PASSTHRU; /** * This is the list of template directories that are considered secure. * $template_dir is in this list implicitly. * * @var array */ public $secure_dir = array(); /** * This is an array of directories where trusted php scripts reside. * {@link $security} is disabled during their inclusion/execution. * * @var array */ public $trusted_dir = array(); /** * List of regular expressions (PCRE) that include trusted URIs * * @var array */ public $trusted_uri = array(); /** * List of trusted constants names * * @var array */ public $trusted_constants = array(); /** * This is an array of trusted static classes. * If empty access to all static classes is allowed. * If set to 'none' none is allowed. * * @var array */ public $static_classes = array(); /** * This is an nested array of trusted classes and static methods. * If empty access to all static classes and methods is allowed. * Format: * array ( * 'class_1' => array('method_1', 'method_2'), // allowed methods listed * 'class_2' => array(), // all methods of class allowed * ) * If set to null none is allowed. * * @var array */ public $trusted_static_methods = array(); /** * This is an array of trusted static properties. * If empty access to all static classes and properties is allowed. * Format: * array ( * 'class_1' => array('prop_1', 'prop_2'), // allowed properties listed * 'class_2' => array(), // all properties of class allowed * ) * If set to null none is allowed. * * @var array */ public $trusted_static_properties = array(); /** * This is an array of trusted PHP functions. * If empty all functions are allowed. * To disable all PHP functions set $php_functions = null. * * @var array */ public $php_functions = array('isset', 'empty', 'count', 'sizeof', 'in_array', 'is_array', 'time',); /** * This is an array of trusted PHP modifiers. * If empty all modifiers are allowed. * To disable all modifier set $php_modifiers = null. * * @var array */ public $php_modifiers = array('escape', 'count', 'nl2br',); /** * This is an array of allowed tags. * If empty no restriction by allowed_tags. * * @var array */ public $allowed_tags = array(); /** * This is an array of disabled tags. * If empty no restriction by disabled_tags. * * @var array */ public $disabled_tags = array(); /** * This is an array of allowed modifier plugins. * If empty no restriction by allowed_modifiers. * * @var array */ public $allowed_modifiers = array(); /** * This is an array of disabled modifier plugins. * If empty no restriction by disabled_modifiers. * * @var array */ public $disabled_modifiers = array(); /** * This is an array of disabled special $smarty variables. * * @var array */ public $disabled_special_smarty_vars = array(); /** * This is an array of trusted streams. * If empty all streams are allowed. * To disable all streams set $streams = null. * * @var array */ public $streams = array('file'); /** * + flag if constants can be accessed from template * * @var boolean */ public $allow_constants = true; /** * + flag if super globals can be accessed from template * * @var boolean */ public $allow_super_globals = true; /** * max template nesting level * * @var int */ public $max_template_nesting = 0; /** * current template nesting level * * @var int */ private $_current_template_nesting = 0; /** * Cache for $resource_dir lookup * * @var array */ protected $_resource_dir = array(); /** * Cache for $template_dir lookup * * @var array */ protected $_template_dir = array(); /** * Cache for $config_dir lookup * * @var array */ protected $_config_dir = array(); /** * Cache for $secure_dir lookup * * @var array */ protected $_secure_dir = array(); /** * Cache for $php_resource_dir lookup * * @var array */ protected $_php_resource_dir = null; /** * Cache for $trusted_dir lookup * * @var array */ protected $_trusted_dir = null; /** * Cache for include path status * * @var bool */ protected $_include_path_status = false; /** * Cache for $_include_array lookup * * @var array */ protected $_include_dir = array(); /** * @param Smarty $smarty */ public function __construct($smarty) { $this->smarty = $smarty; } /** * Check if PHP function is trusted. * * @param string $function_name * @param object $compiler compiler object * * @return boolean true if function is trusted * @throws SmartyCompilerException if php function is not trusted */ public function isTrustedPhpFunction($function_name, $compiler) { if (isset($this->php_functions) && (empty($this->php_functions) || in_array($function_name, $this->php_functions)) ) { return true; } $compiler->trigger_template_error("PHP function '{$function_name}' not allowed by security setting"); return false; // should not, but who knows what happens to the compiler in the future? } /** * Check if static class is trusted. * * @param string $class_name * @param object $compiler compiler object * * @return boolean true if class is trusted * @throws SmartyCompilerException if static class is not trusted */ public function isTrustedStaticClass($class_name, $compiler) { if (isset($this->static_classes) && (empty($this->static_classes) || in_array($class_name, $this->static_classes)) ) { return true; } $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting"); return false; // should not, but who knows what happens to the compiler in the future? } /** * Check if static class method/property is trusted. * * @param string $class_name * @param string $params * @param object $compiler compiler object * * @return boolean true if class method is trusted * @throws SmartyCompilerException if static class method is not trusted */ public function isTrustedStaticClassAccess($class_name, $params, $compiler) { if (!isset($params[2])) { // fall back return $this->isTrustedStaticClass($class_name, $compiler); } if ($params[2] == 'method') { $allowed = $this->trusted_static_methods; $name = substr($params[0], 0, strpos($params[0], '(')); } else { $allowed = $this->trusted_static_properties; // strip '$' $name = substr($params[0], 1); } if (isset($allowed)) { if (empty($allowed)) { // fall back return $this->isTrustedStaticClass($class_name, $compiler); } if (isset($allowed[$class_name]) && (empty($allowed[$class_name]) || in_array($name, $allowed[$class_name])) ) { return true; } } $compiler->trigger_template_error("access to static class '{$class_name}' {$params[2]} '{$name}' not allowed by security setting"); return false; // should not, but who knows what happens to the compiler in the future? } /** * Check if PHP modifier is trusted. * * @param string $modifier_name * @param object $compiler compiler object * * @return boolean true if modifier is trusted * @throws SmartyCompilerException if modifier is not trusted */ public function isTrustedPhpModifier($modifier_name, $compiler) { if (isset($this->php_modifiers) && (empty($this->php_modifiers) || in_array($modifier_name, $this->php_modifiers)) ) { return true; } $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting"); return false; // should not, but who knows what happens to the compiler in the future? } /** * Check if tag is trusted. * * @param string $tag_name * @param object $compiler compiler object * * @return boolean true if tag is trusted * @throws SmartyCompilerException if modifier is not trusted */ public function isTrustedTag($tag_name, $compiler) { // check for internal always required tags if (in_array($tag_name, array('assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin', 'private_object_block_function', 'private_object_function', 'private_registered_function', 'private_registered_block', 'private_special_variable', 'private_print_expression', 'private_modifier'))) { return true; } // check security settings if (empty($this->allowed_tags)) { if (empty($this->disabled_tags) || !in_array($tag_name, $this->disabled_tags)) { return true; } else { $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", null, true); } } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) { return true; } else { $compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", null, true); } return false; // should not, but who knows what happens to the compiler in the future? } /** * Check if special $smarty variable is trusted. * * @param string $var_name * @param object $compiler compiler object * * @return boolean true if tag is trusted * @throws SmartyCompilerException if modifier is not trusted */ public function isTrustedSpecialSmartyVar($var_name, $compiler) { if (!in_array($var_name, $this->disabled_special_smarty_vars)) { return true; } else { $compiler->trigger_template_error("special variable '\$smarty.{$var_name}' not allowed by security setting", null, true); } return false; // should not, but who knows what happens to the compiler in the future? } /** * Check if modifier plugin is trusted. * * @param string $modifier_name * @param object $compiler compiler object * * @return boolean true if tag is trusted * @throws SmartyCompilerException if modifier is not trusted */ public function isTrustedModifier($modifier_name, $compiler) { // check for internal always allowed modifier if (in_array($modifier_name, array('default'))) { return true; } // check security settings if (empty($this->allowed_modifiers)) { if (empty($this->disabled_modifiers) || !in_array($modifier_name, $this->disabled_modifiers)) { return true; } else { $compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", null, true); } } elseif (in_array($modifier_name, $this->allowed_modifiers) && !in_array($modifier_name, $this->disabled_modifiers) ) { return true; } else { $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting", null, true); } return false; // should not, but who knows what happens to the compiler in the future? } /** * Check if constants are enabled or trusted * * @param string $const constant name * @param object $compiler compiler object * * @return bool */ public function isTrustedConstant($const, $compiler) { if (in_array($const, array('true', 'false', 'null'))) { return true; } if (!empty($this->trusted_constants)) { if (!in_array($const, $this->trusted_constants)) { $compiler->trigger_template_error("Security: access to constant '{$const}' not permitted"); return false; } return true; } if ($this->allow_constants) { return true; } $compiler->trigger_template_error("Security: access to constants not permitted"); return false; } /** * Check if stream is trusted. * * @param string $stream_name * * @return boolean true if stream is trusted * @throws SmartyException if stream is not trusted */ public function isTrustedStream($stream_name) { if (isset($this->streams) && (empty($this->streams) || in_array($stream_name, $this->streams))) { return true; } throw new SmartyException("stream '{$stream_name}' not allowed by security setting"); } /** * Check if directory of file resource is trusted. * * @param string $filepath * @param null|bool $isConfig * * @return bool true if directory is trusted * @throws \SmartyException if directory is not trusted */ public function isTrustedResourceDir($filepath, $isConfig = null) { if ($this->_include_path_status !== $this->smarty->use_include_path) { foreach ($this->_include_dir as $directory) { unset($this->_resource_dir[$directory]); } if ($this->smarty->use_include_path) { $this->_include_dir = array(); $_dirs = $this->smarty->ext->_getIncludePath->getIncludePathDirs($this->smarty); foreach ($_dirs as $directory) { $this->_include_dir[] = $directory; $this->_resource_dir[$directory] = true; } } $this->_include_path_status = $this->smarty->use_include_path; } if ($isConfig !== true && (!isset($this->smarty->_cache['template_dir_new']) || $this->smarty->_cache['template_dir_new']) ) { $_dir = $this->smarty->getTemplateDir(); if ($this->_template_dir !== $_dir) { foreach ($this->_template_dir as $directory) { unset($this->_resource_dir[$directory]); } foreach ($_dir as $directory) { $this->_resource_dir[$directory] = true; } $this->_template_dir = $_dir; } $this->smarty->_cache['template_dir_new'] = false; } if ($isConfig !== false && (!isset($this->smarty->_cache['config_dir_new']) || $this->smarty->_cache['config_dir_new']) ) { $_dir = $this->smarty->getConfigDir(); if ($this->_config_dir !== $_dir) { foreach ($this->_config_dir as $directory) { unset($this->_resource_dir[$directory]); } foreach ($_dir as $directory) { $this->_resource_dir[$directory] = true; } $this->_config_dir = $_dir; } $this->smarty->_cache['config_dir_new'] = false; } if ($this->_secure_dir !== (array) $this->secure_dir) { foreach ($this->_secure_dir as $directory) { unset($this->_resource_dir[$directory]); } foreach ((array) $this->secure_dir as $directory) { $directory = $this->smarty->_realpath($directory . DS, true); $this->_resource_dir[$directory] = true; } $this->_secure_dir = (array) $this->secure_dir; } $this->_resource_dir = $this->_checkDir($filepath, $this->_resource_dir); return true; } /** * Check if URI (e.g. {fetch} or {html_image}) is trusted * To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}". * So "http://username:password@hello.world.example.org:8080/some-path?some=query-string" * is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}. * * @param string $uri * * @return boolean true if URI is trusted * @throws SmartyException if URI is not trusted * @uses $trusted_uri for list of patterns to match against $uri */ public function isTrustedUri($uri) { $_uri = parse_url($uri); if (!empty($_uri['scheme']) && !empty($_uri['host'])) { $_uri = $_uri['scheme'] . '://' . $_uri['host']; foreach ($this->trusted_uri as $pattern) { if (preg_match($pattern, $_uri)) { return true; } } } throw new SmartyException("URI '{$uri}' not allowed by security setting"); } /** * Check if directory of file resource is trusted. * * @param string $filepath * * @return boolean true if directory is trusted * @throws SmartyException if PHP directory is not trusted */ public function isTrustedPHPDir($filepath) { if (empty($this->trusted_dir)) { throw new SmartyException("directory '{$filepath}' not allowed by security setting (no trusted_dir specified)"); } // check if index is outdated if (!$this->_trusted_dir || $this->_trusted_dir !== $this->trusted_dir) { $this->_php_resource_dir = array(); $this->_trusted_dir = $this->trusted_dir; foreach ((array) $this->trusted_dir as $directory) { $directory = $this->smarty->_realpath($directory . DS, true); $this->_php_resource_dir[$directory] = true; } } $this->_php_resource_dir = $this->_checkDir($this->smarty->_realpath($filepath, true), $this->_php_resource_dir); return true; } /** * Start template processing * * @param $template * * @throws SmartyException */ public function startTemplate($template) { if ($this->max_template_nesting > 0 && $this->_current_template_nesting ++ >= $this->max_template_nesting) { throw new SmartyException("maximum template nesting level of '{$this->max_template_nesting}' exceeded when calling '{$template->template_resource}'"); } } /** * Exit template processing * * @internal param $template */ public function exitTemplate() { if ($this->max_template_nesting > 0) { $this->_current_template_nesting --; } } /** * Check if file is inside a valid directory * * @param string $filepath * @param array $dirs valid directories * * @return array * @throws \SmartyException */ private function _checkDir($filepath, $dirs) { $directory = dirname($filepath) . DS; $_directory = array(); while (true) { // remember the directory to add it to _resource_dir in case we're successful $_directory[$directory] = true; // test if the directory is trusted if (isset($dirs[$directory])) { // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup $dirs = array_merge($dirs, $_directory); return $dirs; } // abort if we've reached root if (!preg_match('#[\\\/][^\\\/]+[\\\/]$#', $directory)) { break; } // bubble up one level $directory = preg_replace('#[\\\/][^\\\/]+[\\\/]$#', DS, $directory); } // give up throw new SmartyException("directory '{$filepath}' not allowed by security setting"); } /** * Loads security class and enables security * * @param \Smarty $smarty * @param string|Smarty_Security $security_class if a string is used, it must be class-name * * @return \Smarty current Smarty instance for chaining * @throws \SmartyException when an invalid class name is provided */ public static function enableSecurity(Smarty $smarty, $security_class) { if ($security_class instanceof Smarty_Security) { $smarty->security_policy = $security_class; return; } elseif (is_object($security_class)) { throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security."); } if ($security_class == null) { $security_class = $smarty->security_class; } if (!class_exists($security_class)) { throw new SmartyException("Security class '$security_class' is not defined"); } elseif ($security_class !== 'Smarty_Security' && !is_subclass_of($security_class, 'Smarty_Security')) { throw new SmartyException("Class '$security_class' must extend Smarty_Security."); } else { $smarty->security_policy = new $security_class($smarty); } return; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_capture.php0000664000175000017500000001030412717671461027044 0ustar daviddavidgetAttributes($compiler, $args); $buffer = isset($_attr['name']) ? $_attr['name'] : "'default'"; $assign = isset($_attr['assign']) ? $_attr['assign'] : 'null'; $append = isset($_attr['append']) ? $_attr['append'] : 'null'; $compiler->_capture_stack[0][] = array($buffer, $assign, $append, $compiler->nocache); // maybe nocache because of nocache variables $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; $_output = "_cache['capture_stack'][] = array($buffer, $assign, $append); ob_start(); ?>"; return $_output; } /** * Compiles code for the {$smarty.capture.xxx} * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code * @throws \SmartyCompilerException */ public static function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { $tag = strtolower(trim($parameter[ 0 ], '"\'')); $name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false; if (!$name) { $compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true); } return "(isset(\$_smarty_tpl->_cache['__smarty_capture']['{$name}']) ? \$_smarty_tpl->_cache['__smarty_capture']['{$name}'] : null)"; } } /** * Smarty Internal Plugin Compile Captureclose Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase { /** * Compiles code for the {/capture} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } list($buffer, $assign, $append, $compiler->nocache) = array_pop($compiler->_capture_stack[0]); $_output = "_cache['capture_stack']);\n"; $_output .= "if (!empty(\$_capture_buffer)) {\n"; $_output .= " if (isset(\$_capture_assign)) \$_smarty_tpl->assign(\$_capture_assign, ob_get_contents());\n"; $_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n"; $_output .= "\$_smarty_tpl->_cache['__smarty_capture'][\$_capture_buffer]=ob_get_clean();\n"; $_output .= "} else \$_smarty_tpl->capture_error();?>"; return $_output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_parsetree_dq.php0000664000175000017500000000601212717671461026350 0ustar daviddavidsubtrees[] = $subtree; if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { $parser->block_nesting_level = count($parser->compiler->_tag_stack); } } /** * Append buffer to subtree * * @param \Smarty_Internal_Templateparser $parser * @param Smarty_Internal_ParseTree $subtree parse tree buffer */ public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree) { $last_subtree = count($this->subtrees) - 1; if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof Smarty_Internal_ParseTree_Tag && $this->subtrees[$last_subtree]->saved_block_nesting < $parser->block_nesting_level) { if ($subtree instanceof Smarty_Internal_ParseTree_Code) { $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, 'data . ';?>'); } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) { $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, 'data . '";?>'); } else { $this->subtrees[$last_subtree]->data = $parser->compiler->appendCode($this->subtrees[$last_subtree]->data, $subtree->data); } } else { $this->subtrees[] = $subtree; } if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { $parser->block_nesting_level = count($parser->compiler->_tag_stack); } } /** * Merge subtree buffer content together * * @param \Smarty_Internal_Templateparser $parser * * @return string compiled template code */ public function to_smarty_php(Smarty_Internal_Templateparser $parser) { $code = ''; foreach ($this->subtrees as $subtree) { if ($code !== "") { $code .= "."; } if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { $more_php = $subtree->assign_to_var($parser); } else { $more_php = $subtree->to_smarty_php($parser); } $code .= $more_php; if (!$subtree instanceof Smarty_Internal_ParseTree_DqContent) { $parser->compiler->has_variable_string = true; } } return $code; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_getdebugtemplate.php0000664000175000017500000000132212717671461030553 0ustar daviddavidsmarty) ? $obj->smarty : $obj; return $smarty->debug_tpl; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php0000664000175000017500000000453012717671461033520 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (is_callable($callback)) { $smarty->default_template_handler_func = $callback; } else { throw new SmartyException("Default template handler not callable"); } return $obj; } /** * get default content from template or config resource handler * * @param Smarty_Template_Source $source */ public static function _getDefaultTemplate(Smarty_Template_Source $source) { if ($source->isConfig) { $default_handler = $source->smarty->default_config_handler_func; } else { $default_handler = $source->smarty->default_template_handler_func; } $_content = $_timestamp = null; $_return = call_user_func_array($default_handler, array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty)); if (is_string($_return)) { $source->exists = is_file($_return); if ($source->exists) { $source->timestamp = filemtime($_return); } $source->filepath = $_return; } elseif ($_return === true) { $source->content = $_content; $source->timestamp = $_timestamp; $source->exists = true; $source->handler->recompiled = true; $source->filepath = false; } } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_rdelim.php0000664000175000017500000000202112717671461026652 0ustar daviddavidgetAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->trigger_template_error('nocache option not allowed', null, true); } // this tag does not return compiled code $compiler->has_code = true; return $compiler->smarty->right_delimiter; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_getregisteredobject.php0000664000175000017500000000251112717671461031256 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (!isset($smarty->registered_objects[$object_name])) { throw new SmartyException("'$object_name' is not a registered object"); } if (!is_object($smarty->registered_objects[$object_name][0])) { throw new SmartyException("registered '$object_name' is not an object"); } return $smarty->registered_objects[$object_name][0]; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_resource_custom.php0000664000175000017500000000554412717671461025230 0ustar daviddavidfilepath = $source->type . ':' . $source->name; $source->uid = sha1($source->type . ':' . $source->name); $mtime = $this->fetchTimestamp($source->name); if ($mtime !== null) { $source->timestamp = $mtime; } else { $this->fetch($source->name, $content, $timestamp); $source->timestamp = isset($timestamp) ? $timestamp : false; if (isset($content)) { $source->content = $content; } } $source->exists = !!$source->timestamp; } /** * Load template's source into current template object * * @param Smarty_Template_Source $source source object * * @return string template source * @throws SmartyException if source cannot be loaded */ public function getContent(Smarty_Template_Source $source) { $this->fetch($source->name, $content, $timestamp); if (isset($content)) { return $content; } throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); } /** * Determine basename for compiled filename * * @param Smarty_Template_Source $source source object * * @return string resource's basename */ public function getBasename(Smarty_Template_Source $source) { return basename($source->name); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php0000664000175000017500000001231612717671461032425 0ustar daviddavidgetId($_index[ 0 ])); if ($variable === false) { $compiler->trigger_template_error("special \$Smarty variable name index can not be variable", null, true); } if (!isset($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedSpecialSmartyVar($variable, $compiler) ) { switch ($variable) { case 'foreach': case 'section': if (!isset($compiler->_tag_objects[ $variable ])) { $class = 'Smarty_Internal_Compile_' . ucfirst($variable); $compiler->_tag_objects[ $variable ] = new $class; } return $compiler->_tag_objects[ $variable ]->compileSpecialVariable(array(), $compiler, $_index); case 'capture': if (class_exists('Smarty_Internal_Compile_Capture')) { return Smarty_Internal_Compile_Capture::compileSpecialVariable(array(), $compiler, $_index); } return ''; case 'now': return 'time()'; case 'cookies': if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals ) { $compiler->trigger_template_error("(secure mode) super globals not permitted"); break; } $compiled_ref = '$_COOKIE'; break; case 'get': case 'post': case 'env': case 'server': case 'session': case 'request': if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_super_globals ) { $compiler->trigger_template_error("(secure mode) super globals not permitted"); break; } $compiled_ref = '$_' . strtoupper($variable); break; case 'template': return 'basename($_smarty_tpl->source->filepath)'; case 'template_object': return '$_smarty_tpl'; case 'current_dir': return 'dirname($_smarty_tpl->source->filepath)'; case 'version': return "Smarty::SMARTY_VERSION"; case 'const': if (isset($compiler->smarty->security_policy) && !$compiler->smarty->security_policy->allow_constants ) { $compiler->trigger_template_error("(secure mode) constants not permitted"); break; } if (strpos($_index[ 1 ], '$') === false && strpos($_index[ 1 ], '\'') === false) { return "@constant('{$_index[1]}')"; } else { return "@constant({$_index[1]})"; } case 'config': if (isset($_index[ 2 ])) { return "(is_array(\$tmp = \$_smarty_tpl->smarty->ext->configload->_getConfigVariable(\$_smarty_tpl, $_index[1])) ? \$tmp[$_index[2]] : null)"; } else { return "\$_smarty_tpl->smarty->ext->configload->_getConfigVariable(\$_smarty_tpl, $_index[1])"; } case 'ldelim': return "\$_smarty_tpl->smarty->left_delimiter"; case 'rdelim': return "\$_smarty_tpl->smarty->right_delimiter"; default: $compiler->trigger_template_error('$smarty.' . trim($_index[ 0 ], "'") . ' is not defined'); break; } if (isset($_index[ 1 ])) { array_shift($_index); foreach ($_index as $_ind) { $compiled_ref = $compiled_ref . "[$_ind]"; } } return $compiled_ref; } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_unloadfilter.php0000664000175000017500000000255612717671461027733 0ustar daviddavidsmarty) ? $obj->smarty : $obj; $this->_checkFilterType($type); if (isset($smarty->registered_filters[$type])) { $_filter_name = "smarty_{$type}filter_{$name}"; if (isset($smarty->registered_filters[$type][$_filter_name])) { unset ($smarty->registered_filters[$type][$_filter_name]); if (empty($smarty->registered_filters[$type])) { unset($smarty->registered_filters[$type]); } } } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_break.php0000664000175000017500000000451212717671461026471 0ustar daviddavid true, 'foreach' => true, 'while' => true, 'section' => true); // check and get attributes $_attr = $this->getAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->trigger_template_error('nocache option not allowed', null, true); } if (isset($_attr['levels'])) { if (!is_numeric($_attr['levels'])) { $compiler->trigger_template_error('level attribute must be a numeric constant', null, true); } $_levels = $_attr['levels']; } else { $_levels = 1; } $level_count = $_levels; $stack_count = count($compiler->_tag_stack) - 1; while ($level_count > 0 && $stack_count >= 0) { if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) { $level_count --; } $stack_count --; } if ($level_count != 0) { $compiler->trigger_template_error("cannot break {$_levels} level(s)", null, true); } return ""; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php0000664000175000017500000000223512717671461031234 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (is_array($modifiers)) { $this->default_modifiers = array_merge($smarty->default_modifiers, $modifiers); } else { $smarty->default_modifiers[] = $modifiers; } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_assignglobal.php0000664000175000017500000000223712717671461027704 0ustar daviddavid_objType == 2) { $ptr->tpl_vars[$varName] = clone Smarty::$global_tpl_vars[$varName]; $ptr = $ptr->parent; } } return $data; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php0000664000175000017500000001412012717671461032442 0ustar daviddavidgetAttributes($compiler, $args); if ($_attr['nocache']) { $compiler->tag_nocache = true; } unset($_attr['nocache']); if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) { $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag]; } else { $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag]; } // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { if (is_int($_key)) { $_paramsArray[] = "$_key=>$_value"; } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) { $_value = str_replace("'", "^#^", $_value); $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^"; } else { $_paramsArray[] = "'$_key'=>$_value"; } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); // maybe nocache because of nocache variables or nocache plugin $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache; $function = $tag_info[0]; // compile code if (!is_array($function)) { $output = "smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } elseif (is_object($function[0])) { $output = "smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } else { $output = "smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } } else { // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } $base_tag = substr($tag, 0, - 5); // closing tag of block plugin, restore nocache list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag); // This tag does create output $compiler->has_output = true; if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) { $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; } else { $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0]; } // compile code if (!isset($parameter['modifier_list'])) { $mod_pre = $mod_post = ''; } else { $mod_pre = ' ob_start(); '; $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';'; } if (!is_array($function)) { $output = "smarty->_cache['tag_stack']);?>"; } elseif (is_object($function[0])) { $output = "smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_cache['tag_stack']);?>"; } else { $output = "smarty->_cache['tag_stack']);?>"; } } return $output . "\n"; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_undefined_variable.php0000664000175000017500000000120212717671461025600 0ustar daviddavidsource->filepath); $_cache_id = isset($_template->cache_id) ? preg_replace('![^\w\|]+!', '_', $_template->cache_id) : null; $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w]+!', '_', $_template->compile_id) : null; $_filepath = $_template->source->uid; // if use_sub_dirs, break file into directories if ($_template->smarty->use_sub_dirs) { $_filepath = substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS . substr($_filepath, 4, 2) . DS . $_filepath; } $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; if (isset($_cache_id)) { $_cache_id = str_replace('|', $_compile_dir_sep, $_cache_id) . $_compile_dir_sep; } else { $_cache_id = ''; } if (isset($_compile_id)) { $_compile_id = $_compile_id . $_compile_dir_sep; } else { $_compile_id = ''; } $_cache_dir = $_template->smarty->getCacheDir(); if ($_template->smarty->cache_locking) { // create locking file name // relative file name? if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_cache_dir)) { $_lock_dir = rtrim(getcwd(), '/\\') . DS . $_cache_dir; } else { $_lock_dir = $_cache_dir; } $cached->lock_id = $_lock_dir . sha1($_cache_id . $_compile_id . $_template->source->uid) . '.lock'; } $cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . '.php'; $cached->timestamp = $cached->exists = is_file($cached->filepath); if ($cached->exists) { $cached->timestamp = filemtime($cached->filepath); } } /** * populate Cached Object with timestamp and exists from Resource * * @param Smarty_Template_Cached $cached cached object * * @return void */ public function populateTimestamp(Smarty_Template_Cached $cached) { $cached->timestamp = $cached->exists = is_file($cached->filepath); if ($cached->exists) { $cached->timestamp = filemtime($cached->filepath); } } /** * Read the cached template and process its header * * @param Smarty_Internal_Template $_template template object * @param Smarty_Template_Cached $cached cached object * @param bool $update flag if called because cache update * * @return boolean true or false if the cached content does not exist */ public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false) { /** @var Smarty_Internal_Template $_smarty_tpl * used in included file */ $_smarty_tpl = $_template; $_template->cached->valid = false; if ($update && defined('HHVM_VERSION')) { return $_template->smarty->ext->_hhvm->includeHhvm($_template, $_template->cached->filepath); } else { return @include $_template->cached->filepath; } } /** * Write the rendered template output to cache * * @param Smarty_Internal_Template $_template template object * @param string $content content to cache * * @return boolean success */ public function writeCachedContent(Smarty_Internal_Template $_template, $content) { if ($_template->smarty->ext->_writeFile->writeFile($_template->cached->filepath, $content, $_template->smarty) === true) { if (function_exists('opcache_invalidate')) { opcache_invalidate($_template->cached->filepath); } $cached = $_template->cached; $cached->timestamp = $cached->exists = is_file($cached->filepath); if ($cached->exists) { $cached->timestamp = filemtime($cached->filepath); return true; } } return false; } /** * Read cached template from cache * * @param Smarty_Internal_Template $_template template object * * @return string content */ public function readCachedContent(Smarty_Internal_Template $_template) { if (is_file($_template->cached->filepath)) { return file_get_contents($_template->cached->filepath); } return false; } /** * Empty cache * * @param Smarty $smarty * @param integer $exp_time expiration time (number of seconds, not timestamp) * * @return integer number of cache files deleted */ public function clearAll(Smarty $smarty, $exp_time = null) { return Smarty_Internal_Extension_Clear::clear($smarty, null, null, null, $exp_time); } /** * Empty cache for a specific template * * @param Smarty $smarty * @param string $resource_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param integer $exp_time expiration time (number of seconds, not timestamp) * * @return integer number of cache files deleted */ public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time) { return Smarty_Internal_Extension_Clear::clear($smarty, $resource_name, $cache_id, $compile_id, $exp_time); } /** * Check is cache is locked for this template * * @param Smarty $smarty Smarty object * @param Smarty_Template_Cached $cached cached object * * @return boolean true or false if cache is locked */ public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) { if (version_compare(PHP_VERSION, '5.3.0', '>=')) { clearstatcache(true, $cached->lock_id); } else { clearstatcache(); } if (is_file($cached->lock_id)) { $t = @filemtime($cached->lock_id); return $t && (time() - $t < $smarty->locking_timeout); } else { return false; } } /** * Lock cache for this template * * @param Smarty $smarty Smarty object * @param Smarty_Template_Cached $cached cached object * * @return bool|void */ public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) { $cached->is_locked = true; touch($cached->lock_id); } /** * Unlock cache for this template * * @param Smarty $smarty Smarty object * @param Smarty_Template_Cached $cached cached object * * @return bool|void */ public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) { $cached->is_locked = false; @unlink($cached->lock_id); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_foreach.php0000664000175000017500000000271412717671461027051 0ustar daviddavidgetIterator()); } elseif ($value instanceof Iterator) { if ($value instanceof Generator) { return 1; } return iterator_count($value); } elseif ($value instanceof PDOStatement) { return $value->rowCount(); } elseif ($value instanceof Traversable) { return iterator_count($value); } elseif ($value instanceof ArrayAccess) { if ($value->offsetExists(0)) { return 1; } } elseif (is_object($value)) { return count($value); } return 0; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_assignbyref.php0000664000175000017500000000225112717671461027547 0ustar daviddavidtpl_vars[$tpl_var] = new Smarty_Variable(null, $nocache); $data->tpl_vars[$tpl_var]->value = &$value; if ($data->_objType == 2 && $data->scope) { $data->ext->_updateScope->updateScope($data, $tpl_var); } } return $data; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_section.php0000664000175000017500000004265212717671461027060 0ustar daviddavidloopNesting++; // check and get attributes $_attr = $this->getAttributes($compiler, $args); $attributes = array('name' => $compiler->getId($_attr['name'])); unset($_attr['name']); foreach ($attributes as $a => $v) { if ($v === false) { $compiler->trigger_template_error("'{$a}' attribute/variable has illegal value", null, true); } } $local = "\$__section_{$attributes['name']}_" . $this->counter ++ . '_'; $sectionVar = "\$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}']"; $this->openTag($compiler, 'section', array('section', $compiler->nocache, $local, $sectionVar)); // maybe nocache because of nocache variables $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; $initLocal = array('saved' => "isset(\$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}']) ? \$_smarty_tpl->tpl_vars['__smarty_section_{$attributes['name']}'] : false",); $initNamedProperty = array(); $initFor = array(); $incFor = array(); $cmpFor = array(); $propValue = array('index' => "{$sectionVar}->value['index']", 'show' => 'true', 'step' => 1, 'iteration' => "{$local}iteration", ); $propType = array('index' => 2, 'iteration' => 2, 'show' => 0, 'step' => 0,); // search for used tag attributes $this->scanForProperties($attributes, $compiler); if (!empty($this->matchResults['named'])) { $namedAttr = $this->matchResults['named']; } $namedAttr['index'] = true; $output = " $attr_value) { switch ($attr_name) { case 'loop': if (is_numeric($attr_value)) { $v = (int) $attr_value; $t = 0; } else { $v = "(is_array(@\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop))"; $t = 1; } if (isset($namedAttr['loop'])) { $initNamedProperty['loop'] = "'loop' => {$v}"; if ($t == 1) { $v = "{$sectionVar}->value['loop']"; } } elseif ($t == 1) { $initLocal['loop'] = $v; $v = "{$local}loop"; } break; case 'show': if (is_bool($attr_value)) { $v = $attr_value ? 'true' : 'false'; $t = 0; } else { $v = "(bool) $attr_value"; $t = 3; } break; case 'step': if (is_numeric($attr_value)) { $v = (int) $attr_value; $v = ($v == 0) ? 1 : $v; $t = 0; break; } $initLocal['step'] = "((int)@$attr_value) == 0 ? 1 : (int)@$attr_value"; $v = "{$local}step"; $t = 2; break; case 'max': case 'start': if (is_numeric($attr_value)) { $v = (int) $attr_value; $t = 0; break; } $v = "(int)@$attr_value"; $t = 3; break; } if ($t == 3 && $compiler->getId($attr_value)) { $t = 1; } $propValue[$attr_name] = $v; $propType[$attr_name] = $t; } if (isset($namedAttr['step'])) { $initNamedProperty['step'] = $propValue['step']; } if (isset($namedAttr['iteration'])) { $propValue['iteration'] = "{$sectionVar}->value['iteration']"; } $incFor['iteration'] = "{$propValue['iteration']}++"; $initFor['iteration'] = "{$propValue['iteration']} = 1"; if ($propType['step'] == 0) { if ($propValue['step'] == 1) { $incFor['index'] = "{$sectionVar}->value['index']++"; } elseif ($propValue['step'] > 1) { $incFor['index'] = "{$sectionVar}->value['index'] += {$propValue['step']}"; } else { $incFor['index'] = "{$sectionVar}->value['index'] -= " . - $propValue['step']; } } else { $incFor['index'] = "{$sectionVar}->value['index'] += {$propValue['step']}"; } if (!isset($propValue['max'])) { $propValue['max'] = $propValue['loop']; $propType['max'] = $propType['loop']; } elseif ($propType['max'] != 0) { $propValue['max'] = "{$propValue['max']} < 0 ? {$propValue['loop']} : {$propValue['max']}"; $propType['max'] = 1; } else { if ($propValue['max'] < 0) { $propValue['max'] = $propValue['loop']; $propType['max'] = $propType['loop']; } } if (!isset($propValue['start'])) { $start_code = array(1 => "{$propValue['step']} > 0 ? ", 2 => '0', 3 => ' : ', 4 => $propValue['loop'], 5 => ' - 1'); if ($propType['loop'] == 0) { $start_code[5] = ''; $start_code[4] = $propValue['loop'] - 1; } if ($propType['step'] == 0) { if ($propValue['step'] > 0) { $start_code = array(1 => '0'); $propType['start'] = 0; } else { $start_code[1] = $start_code[2] = $start_code[3] = ''; $propType['start'] = $propType['loop']; } } else { $propType['start'] = 1; } $propValue['start'] = join('', $start_code); } else { $start_code = array(1 => "{$propValue['start']} < 0 ? ", 2 => 'max(', 3 => "{$propValue['step']} > 0 ? ", 4 => '0', 5 => ' : ', 6 => '-1', 7 => ', ', 8 => "{$propValue['start']} + {$propValue['loop']}", 10 => ')', 11 => ' : ', 12 => 'min(', 13 => $propValue['start'], 14 => ', ', 15 => "{$propValue['step']} > 0 ? ", 16 => $propValue['loop'], 17 => ' : ', 18 => $propType['loop'] == 0 ? $propValue['loop'] - 1 : "{$propValue['loop']} - 1", 19 => ')'); if ($propType['step'] == 0) { $start_code[3] = $start_code[5] = $start_code[15] = $start_code[17] = ''; if ($propValue['step'] > 0) { $start_code[6] = $start_code[18] = ''; } else { $start_code[4] = $start_code[16] = ''; } } if ($propType['start'] == 0) { if ($propType['loop'] == 0) { $start_code[8] = $propValue['start'] + $propValue['loop']; } $propType['start'] = $propType['step'] + $propType['loop']; $start_code[1] = ''; if ($propValue['start'] < 0) { for ($i = 11; $i <= 19; $i ++) { $start_code[$i] = ''; } if ($propType['start'] == 0) { $start_code = array(max($propValue['step'] > 0 ? 0 : - 1, $propValue['start'] + $propValue['loop'])); } } else { for ($i = 1; $i <= 11; $i ++) { $start_code[$i] = ''; } if ($propType['start'] == 0) { $start_code = array(min($propValue['step'] > 0 ? $propValue['loop'] : $propValue['loop'] - 1, $propValue['start'])); } } } $propValue['start'] = join('', $start_code); } if ($propType['start'] != 0) { $initLocal['start'] = $propValue['start']; $propValue['start'] = "{$local}start"; } $initFor['index'] = "{$sectionVar}->value['index'] = {$propValue['start']}"; if (!isset($_attr['start']) && !isset($_attr['step']) && !isset($_attr['max'])) { $propValue['total'] = $propValue['loop']; $propType['total'] = $propType['loop']; } else { $propType['total'] = $propType['start'] + $propType['loop'] + $propType['step'] + $propType['max']; if ($propType['total'] == 0) { $propValue['total'] = min(ceil(($propValue['step'] > 0 ? $propValue['loop'] - $propValue['start'] : (int) $propValue['start'] + 1) / abs($propValue['step'])), $propValue['max']); } else { $total_code = array(1 => 'min(', 2 => 'ceil(', 3 => '(', 4 => "{$propValue['step']} > 0 ? ", 5 => $propValue['loop'], 6 => ' - ', 7 => $propValue['start'], 8 => ' : ', 9 => $propValue['start'], 10 => '+ 1', 11 => ')', 12 => '/ ', 13 => 'abs(', 14 => $propValue['step'], 15 => ')', 16 => ')', 17 => ", {$propValue['max']})",); if (!isset($propValue['max'])) { $total_code[1] = $total_code[17] = ''; } if ($propType['loop'] + $propType['start'] == 0) { $total_code[5] = $propValue['loop'] - $propValue['start']; $total_code[6] = $total_code[7] = ''; } if ($propType['start'] == 0) { $total_code[9] = (int) $propValue['start'] + 1; $total_code[10] = ''; } if ($propType['step'] == 0) { $total_code[13] = $total_code[15] = ''; if ($propValue['step'] == 1 || $propValue['step'] == - 1) { $total_code[2] = $total_code[12] = $total_code[14] = $total_code[16] = ''; } elseif ($propValue['step'] < 0) { $total_code[14] = - $propValue['step']; } $total_code[4] = ''; if ($propValue['step'] > 0) { $total_code[8] = $total_code[9] = $total_code[10] = ''; } else { $total_code[5] = $total_code[6] = $total_code[7] = $total_code[8] = ''; } } $propValue['total'] = join('', $total_code); } } if (isset($namedAttr['total'])) { $initNamedProperty['total'] = "'total' => {$propValue['total']}"; if ($propType['total'] > 0) { $propValue['total'] = "{$sectionVar}->value['total']"; } } elseif ($propType['total'] > 0) { $initLocal['total'] = $propValue['total']; $propValue['total'] = "{$local}total"; } $cmpFor['iteration'] = "{$propValue['iteration']} <= {$propValue['total']}"; foreach ($initLocal as $key => $code) { $output .= "{$local}{$key} = {$code};\n"; } $_vars = 'array(' . join(', ', $initNamedProperty) . ')'; $output .= "{$sectionVar} = new Smarty_Variable({$_vars});\n"; $cond_code = "{$propValue['total']} != 0"; if ($propType['total'] == 0) { if ($propValue['total'] == 0) { $cond_code = 'false'; } else { $cond_code = 'true'; } } if ($propType['show'] > 0) { $output .= "{$local}show = {$propValue['show']} ? {$cond_code} : false;\n"; $output .= "if ({$local}show) {\n"; } elseif ($propValue['show'] == 'true') { $output .= "if ({$cond_code}) {\n"; } else { $output .= "if (false) {\n"; } $jinit = join(', ', $initFor); $jcmp = join(', ', $cmpFor); $jinc = join(', ', $incFor); $output .= "for ({$jinit}; {$jcmp}; {$jinc}){\n"; if (isset($namedAttr['rownum'])) { $output .= "{$sectionVar}->value['rownum'] = {$propValue['iteration']};\n"; } if (isset($namedAttr['index_prev'])) { $output .= "{$sectionVar}->value['index_prev'] = {$propValue['index']} - {$propValue['step']};\n"; } if (isset($namedAttr['index_next'])) { $output .= "{$sectionVar}->value['index_next'] = {$propValue['index']} + {$propValue['step']};\n"; } if (isset($namedAttr['first'])) { $output .= "{$sectionVar}->value['first'] = ({$propValue['iteration']} == 1);\n"; } if (isset($namedAttr['last'])) { $output .= "{$sectionVar}->value['last'] = ({$propValue['iteration']} == {$propValue['total']});\n"; } $output .= "?>"; return $output; } } /** * Smarty Internal Plugin Compile Sectionelse Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase { /** * Compiles code for the {sectionelse} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); list($openTag, $nocache, $local, $sectionVar) = $this->closeTag($compiler, array('section')); $this->openTag($compiler, 'sectionelse', array('sectionelse', $nocache, $local, $sectionVar)); return ""; } } /** * Smarty Internal Plugin Compile Sectionclose Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase { /** * Compiles code for the {/section} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { $compiler->loopNesting--; // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } list($openTag, $compiler->nocache, $local, $sectionVar) = $this->closeTag($compiler, array('section', 'sectionelse')); $output = ""; return $output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_insert.php0000664000175000017500000001311612717671461026711 0ustar daviddavidgetAttributes($compiler, $args); $nocacheParam = $compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache); if (!$nocacheParam) { // do not compile as nocache code $compiler->suppressNocacheProcessing = true; } $compiler->tag_nocache = true; $_smarty_tpl = $compiler->template; $_name = null; $_script = null; $_output = 'template->tpl_vars[$var])) { $compiler->template->tpl_vars[$var]->nocache = true; } else { $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); } } if (isset($_attr['script'])) { // script which must be included $_function = "smarty_insert_{$_name}"; $_smarty_tpl = $compiler->template; $_filepath = false; eval('$_script = @' . $_attr['script'] . ';'); if (!isset($compiler->smarty->security_policy) && file_exists($_script)) { $_filepath = $_script; } else { if (isset($compiler->smarty->security_policy)) { $_dir = $compiler->smarty->security_policy->trusted_dir; } else { $_dir = $compiler->smarty->trusted_dir; } if (!empty($_dir)) { foreach ((array) $_dir as $_script_dir) { $_script_dir = rtrim($_script_dir, '/\\') . DS; if (file_exists($_script_dir . $_script)) { $_filepath = $_script_dir . $_script; break; } } } } if ($_filepath == false) { $compiler->trigger_template_error("{insert} missing script file '{$_script}'", null, true); } // code for script file loading $_output .= "require_once '{$_filepath}' ;"; require_once $_filepath; if (!is_callable($_function)) { $compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'", null, true); } } else { $_filepath = 'null'; $_function = "insert_{$_name}"; // function in PHP script ? if (!is_callable($_function)) { // try plugin if (!$_function = $compiler->getPlugin($_name, 'insert')) { $compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'", null, true); } } } // delete {insert} standard attributes unset($_attr['name'], $_attr['assign'], $_attr['script'], $_attr['nocache']); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { $_paramsArray[] = "'$_key' => $_value"; } $_params = 'array(' . implode(", ", $_paramsArray) . ')'; // call insert if (isset($_assign)) { if ($_smarty_tpl->caching && !$nocacheParam) { $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}',{$_assign});?>"; } else { $_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl), true);?>"; } } else { $compiler->has_output = true; if ($_smarty_tpl->caching && !$nocacheParam) { $_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>"; } else { $_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>"; } } return $_output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php0000664000175000017500000000600212717671461032306 0ustar daviddavidgetAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->tag_nocache = true; } unset($_attr['nocache']); $_assign = null; if (isset($_attr['assign'])) { $_assign = $_attr['assign']; unset($_attr['assign']); } // method or property ? if (method_exists($compiler->smarty->registered_objects[$tag][0], $method)) { // convert attributes into parameter array string if ($compiler->smarty->registered_objects[$tag][2]) { $_paramsArray = array(); foreach ($_attr as $_key => $_value) { if (is_int($_key)) { $_paramsArray[] = "$_key=>$_value"; } else { $_paramsArray[] = "'$_key'=>$_value"; } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)"; } else { $_params = implode(",", $_attr); $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})"; } } else { // object property $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}"; } if (empty($_assign)) { // This tag does create output $compiler->has_output = true; $output = "\n"; } else { $output = "assign({$_assign},{$return});?>\n"; } return $output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_setautoloadfilters.php0000664000175000017500000000420312717671461031147 0ustar daviddavid true, 'post' => true, 'output' => true, 'variable' => true); /** * Set autoload filters * * @api Smarty::setAutoloadFilters() * * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj * @param array $filters filters to load automatically * @param string $type "pre", "output", … specify the * filter type to set. Defaults to * none treating $filters' keys as * the appropriate types * * @return \Smarty|\Smarty_Internal_Template */ public function setAutoloadFilters(Smarty_Internal_TemplateBase $obj, $filters, $type = null) { $smarty = isset($obj->smarty) ? $obj->smarty : $obj; if ($type !== null) { $this->_checkFilterType($type); $smarty->autoload_filters[$type] = (array) $filters; } else { foreach ((array) $filters as $type => $value) { $this->_checkFilterType($type); } $smarty->autoload_filters = (array) $filters; } return $obj; } /** * Check if filter type is valid * * @param string $type * * @throws \SmartyException */ public function _checkFilterType($type) { if (!isset($this->filterTypes[$type])) { throw new SmartyException("Illegal filter type \"{$type}\""); } } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_cachemodify.php0000664000175000017500000000464412717671461027721 0ustar daviddavidisCached() && !$_template->compiled->has_nocache_code; $_last_modified_date = @substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_SERVER['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3); if ($_isCached && $cached->timestamp <= strtotime($_last_modified_date)) { switch (PHP_SAPI) { case 'cgi': // php-cgi < 5.3 case 'cgi-fcgi': // php-cgi >= 5.3 case 'fpm-fcgi': // php-fpm >= 5.3.3 header('Status: 304 Not Modified'); break; case 'cli': if ( /* ^phpunit */ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ ) { $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified'; } break; default: if ( /* ^phpunit */ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ ) { $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified'; } else { header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); } break; } } else { switch (PHP_SAPI) { case 'cli': if ( /* ^phpunit */ !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */ ) { $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT'; } break; default: header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $cached->timestamp) . ' GMT'); break; } echo $content; } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_unregistercacheresource.php0000664000175000017500000000214212717671461032155 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (isset($smarty->registered_cache_resources[$name])) { unset($smarty->registered_cache_resources[$name]); } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_parsetree_tag.php0000664000175000017500000000341612717671461026524 0ustar daviddaviddata = $data; $this->saved_block_nesting = $parser->block_nesting_level; } /** * Return buffer content * * @param \Smarty_Internal_Templateparser $parser * * @return string content */ public function to_smarty_php(Smarty_Internal_Templateparser $parser) { return $this->data; } /** * Return complied code that loads the evaluated output of buffer content into a temporary variable * * @param \Smarty_Internal_Templateparser $parser * * @return string template code */ public function assign_to_var(Smarty_Internal_Templateparser $parser) { $var = sprintf('$_tmp%d', ++ Smarty_Internal_Templateparser::$prefix_number); $tmp = $parser->compiler->appendCode('', $this->data); $tmp = $parser->compiler->appendCode($tmp, ""); $parser->compiler->prefix_code[] = sprintf("%s", $tmp); return $var; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_resource_file.php0000664000175000017500000001470712717671461026532 0ustar daviddavidname; // absolute file ? if ($file[0] == '/' || $file[1] == ':') { $file = $source->smarty->_realpath($file, true); return is_file($file) ? $file : false; } // go relative to a given template? if ($file[0] == '.' && $_template && isset($_template->parent) && $_template->parent->_objType == 2 && preg_match('#^[.]{1,2}[\\\/]#', $file) ) { if ($_template->parent->source->type != 'file' && $_template->parent->source->type != 'extends' && !isset($_template->parent->_cache['allow_relative_path']) ) { throw new SmartyException("Template '{$file}' cannot be relative to template of resource type '{$_template->parent->source->type}'"); } $path = dirname($_template->parent->source->filepath) . DS . $file; // normalize path $path = $source->smarty->_realpath($path); // files relative to a template only get one shot return is_file($path) ? $path : false; } // normalize DS if (strpos($file, DS == '/' ? '\\' : '/') !== false) { $file = str_replace(DS == '/' ? '\\' : '/', DS, $file); } $_directories = $source->smarty->getTemplateDir(null, $source->isConfig); // template_dir index? if ($file[0] == '[' && preg_match('#^\[([^\]]+)\](.+)$#', $file, $fileMatch)) { $file = $fileMatch[2]; $_indices = explode(',', $fileMatch[1]); $_index_dirs = array(); foreach ($_indices as $index) { $index = trim($index); // try string indexes if (isset($_directories[$index])) { $_index_dirs[] = $_directories[$index]; } elseif (is_numeric($index)) { // try numeric index $index = (int) $index; if (isset($_directories[$index])) { $_index_dirs[] = $_directories[$index]; } else { // try at location index $keys = array_keys($_directories); if (isset($_directories[$keys[$index]])) { $_index_dirs[] = $_directories[$keys[$index]]; } } } } if (empty($_index_dirs)) { // index not found return false; } else { $_directories = $_index_dirs; } } // relative file name? foreach ($_directories as $_directory) { $path = $_directory . $file; if (is_file($path)) { return (strpos($path, '.' . DS) !== false) ? $source->smarty->_realpath($path) : $path; } } if (!isset($_index_dirs)) { // Could be relative to cwd $path = $source->smarty->_realpath($file, true); if (is_file($path)) { return $path; } } // Use include path ? if ($source->smarty->use_include_path) { return $source->smarty->ext->_getIncludePath->getIncludePath($_directories, $file, $source->smarty); } return false; } /** * populate Source Object with meta data from Resource * * @param Smarty_Template_Source $source source object * @param Smarty_Internal_Template $_template template object */ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null) { $source->filepath = $this->buildFilepath($source, $_template); if ($source->filepath !== false) { if (isset($source->smarty->security_policy) && is_object($source->smarty->security_policy)) { $source->smarty->security_policy->isTrustedResourceDir($source->filepath, $source->isConfig); } $source->exists = true; $source->uid = sha1($source->filepath); if ($source->smarty->compile_check == 1) { $source->timestamp = filemtime($source->filepath); } } else { $source->timestamp = false; $source->exists = false; } } /** * populate Source Object with timestamp and exists from Resource * * @param Smarty_Template_Source $source source object */ public function populateTimestamp(Smarty_Template_Source $source) { if (!$source->exists) { $source->timestamp = $source->exists = is_file($source->filepath); } if ($source->exists) { $source->timestamp = filemtime($source->filepath); } } /** * Load template's source from file into current template object * * @param Smarty_Template_Source $source source object * * @return string template source * @throws SmartyException if source cannot be loaded */ public function getContent(Smarty_Template_Source $source) { if ($source->exists) { return file_get_contents($source->filepath); } throw new SmartyException('Unable to read ' . ($source->isConfig ? 'config' : 'template') . " {$source->type} '{$source->name}'"); } /** * Determine basename for compiled filename * * @param Smarty_Template_Source $source source object * * @return string resource's basename */ public function getBasename(Smarty_Template_Source $source) { return basename($source->filepath); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php0000664000175000017500000000563512717671461030272 0ustar daviddavidsmarty->autoload_filters[$type])) { foreach ((array) $template->smarty->autoload_filters[$type] as $name) { $plugin_name = "Smarty_{$type}filter_{$name}"; if (function_exists($plugin_name)) { $callback = $plugin_name; } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) { $callback = array($plugin_name, 'execute'); } elseif ($template->smarty->loadPlugin($plugin_name, false)) { if (function_exists($plugin_name)) { // use loaded Smarty2 style plugin $callback = $plugin_name; } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) { // loaded class of filter plugin $callback = array($plugin_name, 'execute'); } else { throw new SmartyException("Auto load {$type}-filter plugin method \"{$plugin_name}::execute\" not callable"); } } else { // nothing found, throw exception throw new SmartyException("Unable to auto load {$type}-filter plugin \"{$plugin_name}\""); } $content = call_user_func($callback, $content, $template); } } // loop over registered filters of specified type if (!empty($template->smarty->registered_filters[$type])) { foreach ($template->smarty->registered_filters[$type] as $key => $name) { $content = call_user_func($template->smarty->registered_filters[$type][$key], $content, $template); } } // return filtered output return $content; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_templateparser.php0000664000175000017500000046177412717671461026746 0ustar daviddavidstring = $s->string; $this->metadata = $s->metadata; } else { $this->string = (string) $s; if ($m instanceof TP_yyToken) { $this->metadata = $m->metadata; } elseif (is_array($m)) { $this->metadata = $m; } } } public function __toString() { return $this->string; } public function offsetExists($offset) { return isset($this->metadata[ $offset ]); } public function offsetGet($offset) { return $this->metadata[ $offset ]; } public function offsetSet($offset, $value) { if ($offset === null) { if (isset($value[ 0 ])) { $x = ($value instanceof TP_yyToken) ? $value->metadata : $value; $this->metadata = array_merge($this->metadata, $x); return; } $offset = count($this->metadata); } if ($value === null) { return; } if ($value instanceof TP_yyToken) { if ($value->metadata) { $this->metadata[ $offset ] = $value->metadata; } } elseif ($value) { $this->metadata[ $offset ] = $value; } } public function offsetUnset($offset) { unset($this->metadata[ $offset ]); } } class TP_yyStackEntry { public $stateno; /* The state-number */ public $major; /* The major token value. This is the code ** number for the token at this stack level */ public $minor; /* The user-supplied minor token value. This ** is the value of the token */ } ; #line 11 "../smarty/lexer/smarty_internal_templateparser.y" /** * Smarty Template Parser Class * * This is the template parser. * It is generated from the smarty_internal_templateparser.y file * * @author Uwe Tews */ class Smarty_Internal_Templateparser { #line 23 "../smarty/lexer/smarty_internal_templateparser.y" const Err1 = "Security error: Call to private object member not allowed"; const Err2 = "Security error: Call to dynamic object member not allowed"; const Err3 = "PHP in template not allowed. Use SmartyBC to enable it"; /** * result status * * @var bool */ public $successful = true; /** * return value * * @var mixed */ public $retvalue = 0; /** * counter for prefix code * * @var int */ public static $prefix_number = 0; /** * @var */ public $yymajor; /** * last index of array variable * * @var mixed */ public $last_index; /** * last variable name * * @var string */ public $last_variable; /** * root parse tree buffer * * @var Smarty_Internal_ParseTree */ public $root_buffer; /** * current parse tree object * * @var Smarty_Internal_ParseTree */ public $current_buffer; /** * lexer object * * @var Smarty_Internal_Templatelexer */ public $lex; /** * internal error flag * * @var bool */ private $internalError = false; /** * {strip} status * * @var bool */ public $strip = false; /** * compiler object * * @var Smarty_Internal_TemplateCompilerBase */ public $compiler = null; /** * smarty object * * @var Smarty */ public $smarty = null; /** * template object * * @var Smarty_Internal_Template */ public $template = null; /** * block nesting level * * @var int */ public $block_nesting_level = 0; /** * security object * * @var Smarty_Security */ public $security = null; /** * template prefix array * * @var \Smarty_Internal_ParseTree[] */ public $template_prefix = array(); /** * security object * * @var \Smarty_Internal_ParseTree[] */ public $template_postfix = array(); /** * constructor * * @param Smarty_Internal_Templatelexer $lex * @param Smarty_Internal_TemplateCompilerBase $compiler */ function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler) { $this->lex = $lex; $this->compiler = $compiler; $this->template = $this->compiler->template; $this->smarty = $this->template->smarty; $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false; $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template(); } /** * insert PHP code in current buffer * * @param string $code */ public function insertPhpCode($code) { $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code)); } /** * merge PHP code with prefix code and return parse tree tag object * * @param string $code * * @return Smarty_Internal_ParseTree_Tag */ public function mergePrefixCode($code) { $tmp = ''; foreach ($this->compiler->prefix_code as $preCode) { $tmp .= $preCode; } $this->compiler->prefix_code = array(); $tmp .= $code; return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true)); } const TP_VERT = 1; const TP_COLON = 2; const TP_PHP = 3; const TP_NOCACHE = 4; const TP_TEXT = 5; const TP_STRIPON = 6; const TP_STRIPOFF = 7; const TP_LITERALSTART = 8; const TP_LITERALEND = 9; const TP_LITERAL = 10; const TP_RDEL = 11; const TP_SIMPELOUTPUT = 12; const TP_LDEL = 13; const TP_DOLLARID = 14; const TP_EQUAL = 15; const TP_SIMPLETAG = 16; const TP_ID = 17; const TP_PTR = 18; const TP_LDELIF = 19; const TP_LDELFOR = 20; const TP_SEMICOLON = 21; const TP_INCDEC = 22; const TP_TO = 23; const TP_STEP = 24; const TP_LDELFOREACH = 25; const TP_SPACE = 26; const TP_AS = 27; const TP_APTR = 28; const TP_LDELSETFILTER = 29; const TP_SMARTYBLOCKCHILDPARENT = 30; const TP_CLOSETAG = 31; const TP_LDELSLASH = 32; const TP_ATTR = 33; const TP_INTEGER = 34; const TP_COMMA = 35; const TP_OPENP = 36; const TP_CLOSEP = 37; const TP_MATH = 38; const TP_UNIMATH = 39; const TP_ISIN = 40; const TP_INSTANCEOF = 41; const TP_QMARK = 42; const TP_NOT = 43; const TP_TYPECAST = 44; const TP_HEX = 45; const TP_DOT = 46; const TP_SINGLEQUOTESTRING = 47; const TP_DOUBLECOLON = 48; const TP_NAMESPACE = 49; const TP_AT = 50; const TP_HATCH = 51; const TP_OPENB = 52; const TP_CLOSEB = 53; const TP_DOLLAR = 54; const TP_LOGOP = 55; const TP_TLOGOP = 56; const TP_SINGLECOND = 57; const TP_QUOTE = 58; const TP_BACKTICK = 59; const YY_NO_ACTION = 527; const YY_ACCEPT_ACTION = 526; const YY_ERROR_ACTION = 525; const YY_SZ_ACTTAB = 2021; static public $yy_action = array(242, 10, 131, 178, 255, 76, 157, 5, 83, 293, 12, 149, 152, 116, 292, 93, 331, 217, 284, 295, 221, 331, 226, 36, 21, 169, 35, 43, 308, 99, 26, 42, 39, 294, 235, 244, 30, 200, 187, 80, 1, 251, 320, 206, 442, 123, 53, 242, 10, 130, 98, 255, 194, 399, 5, 83, 442, 240, 298, 107, 116, 310, 174, 220, 217, 36, 295, 221, 399, 208, 135, 21, 26, 161, 43, 399, 8, 174, 42, 39, 294, 235, 218, 331, 200, 187, 80, 1, 312, 320, 11, 290, 313, 53, 242, 10, 133, 306, 255, 205, 187, 5, 83, 264, 266, 267, 211, 116, 353, 220, 52, 217, 298, 295, 221, 206, 226, 220, 21, 290, 290, 43, 321, 36, 249, 42, 39, 294, 235, 244, 26, 200, 206, 80, 1, 11, 320, 283, 52, 52, 53, 242, 10, 132, 248, 255, 205, 455, 5, 83, 84, 301, 151, 455, 116, 323, 92, 36, 217, 2, 295, 221, 331, 226, 26, 21, 290, 304, 43, 137, 36, 111, 42, 39, 294, 235, 244, 26, 200, 187, 80, 1, 225, 320, 320, 52, 123, 53, 242, 10, 133, 98, 255, 193, 175, 5, 83, 177, 280, 273, 234, 116, 310, 23, 278, 217, 13, 295, 221, 320, 203, 223, 21, 290, 442, 43, 138, 187, 326, 42, 39, 294, 235, 244, 216, 200, 442, 80, 1, 4, 320, 329, 52, 15, 53, 242, 10, 134, 91, 255, 205, 176, 5, 83, 293, 12, 16, 90, 116, 292, 300, 99, 217, 241, 295, 221, 320, 226, 215, 28, 213, 201, 43, 105, 187, 286, 42, 39, 294, 235, 244, 215, 200, 214, 80, 1, 105, 320, 11, 135, 285, 53, 242, 10, 133, 8, 255, 205, 164, 5, 83, 442, 215, 19, 239, 116, 99, 105, 331, 217, 6, 295, 221, 442, 192, 311, 21, 182, 289, 43, 308, 443, 32, 42, 39, 294, 235, 244, 296, 200, 17, 80, 1, 443, 320, 262, 107, 26, 53, 242, 10, 133, 122, 255, 191, 172, 5, 83, 183, 188, 148, 231, 116, 223, 168, 331, 217, 181, 295, 221, 331, 226, 206, 21, 331, 141, 43, 308, 206, 38, 42, 39, 294, 235, 244, 331, 200, 188, 80, 1, 187, 320, 155, 206, 308, 53, 242, 10, 133, 25, 255, 198, 188, 5, 83, 206, 145, 160, 308, 116, 228, 146, 206, 217, 180, 295, 221, 331, 226, 286, 21, 331, 359, 43, 179, 289, 38, 42, 39, 294, 235, 244, 250, 200, 271, 80, 1, 272, 320, 122, 94, 103, 53, 242, 10, 129, 3, 255, 205, 144, 5, 83, 185, 289, 170, 99, 116, 270, 322, 331, 217, 184, 295, 221, 331, 226, 99, 7, 171, 35, 43, 308, 89, 105, 42, 39, 294, 235, 244, 120, 200, 328, 80, 1, 187, 320, 82, 223, 4, 53, 242, 10, 134, 142, 255, 205, 107, 5, 83, 309, 324, 302, 20, 116, 316, 206, 291, 217, 290, 295, 221, 33, 226, 277, 28, 399, 243, 43, 257, 219, 189, 42, 39, 294, 235, 244, 110, 200, 140, 80, 399, 147, 320, 253, 327, 258, 53, 399, 14, 236, 220, 207, 154, 113, 65, 108, 319, 159, 238, 311, 98, 471, 471, 330, 237, 279, 471, 210, 325, 245, 299, 310, 86, 308, 143, 268, 263, 259, 260, 269, 177, 204, 287, 136, 242, 10, 150, 87, 255, 320, 139, 5, 83, 293, 12, 22, 195, 116, 292, 247, 258, 217, 153, 295, 221, 220, 207, 36, 126, 50, 104, 109, 112, 88, 26, 98, 246, 397, 330, 237, 85, 212, 210, 325, 245, 258, 310, 102, 299, 299, 220, 207, 397, 113, 65, 108, 320, 299, 134, 397, 98, 222, 442, 330, 237, 299, 299, 210, 325, 245, 258, 310, 299, 299, 442, 220, 207, 299, 126, 69, 108, 299, 288, 31, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 80, 310, 299, 320, 299, 258, 299, 299, 209, 299, 220, 207, 299, 126, 69, 108, 206, 299, 299, 455, 98, 299, 206, 330, 237, 455, 365, 210, 325, 245, 299, 310, 355, 227, 258, 299, 299, 299, 199, 220, 207, 36, 126, 64, 104, 299, 214, 36, 26, 98, 299, 442, 330, 237, 26, 299, 210, 325, 245, 258, 310, 471, 471, 442, 220, 207, 471, 126, 69, 108, 293, 12, 299, 299, 98, 292, 299, 330, 237, 299, 299, 210, 325, 245, 36, 310, 163, 299, 258, 299, 299, 26, 202, 220, 207, 299, 126, 44, 108, 471, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 134, 299, 299, 252, 220, 207, 206, 126, 72, 108, 299, 299, 299, 299, 98, 299, 396, 330, 237, 299, 299, 210, 325, 245, 258, 310, 299, 299, 299, 220, 207, 396, 126, 74, 108, 254, 299, 80, 396, 98, 320, 299, 330, 237, 299, 297, 210, 325, 245, 299, 310, 299, 242, 9, 299, 299, 255, 299, 258, 5, 83, 299, 299, 220, 207, 116, 126, 68, 108, 217, 299, 295, 221, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 258, 299, 299, 299, 299, 220, 207, 299, 100, 70, 108, 299, 303, 29, 299, 98, 299, 299, 330, 237, 299, 297, 210, 325, 245, 299, 310, 299, 242, 9, 299, 299, 255, 299, 299, 5, 83, 299, 299, 299, 299, 116, 299, 299, 258, 217, 299, 295, 221, 220, 207, 299, 126, 66, 108, 299, 299, 299, 299, 98, 293, 12, 330, 237, 299, 292, 210, 325, 245, 299, 310, 258, 299, 299, 305, 29, 220, 207, 299, 126, 60, 108, 299, 293, 12, 299, 98, 299, 292, 330, 237, 299, 299, 210, 325, 245, 299, 310, 232, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 49, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 230, 210, 325, 245, 299, 310, 258, 167, 299, 299, 299, 220, 207, 299, 126, 58, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 97, 299, 81, 45, 106, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 63, 108, 299, 186, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 197, 299, 114, 59, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 55, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 57, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 95, 299, 81, 48, 106, 233, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 78, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 18, 299, 220, 207, 299, 96, 61, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 207, 299, 126, 47, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 75, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 64, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 207, 299, 126, 56, 108, 317, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 115, 46, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 79, 108, 299, 190, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 207, 299, 126, 62, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 207, 299, 126, 71, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 101, 67, 108, 299, 318, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 207, 299, 126, 77, 108, 299, 41, 40, 37, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 196, 299, 126, 54, 108, 299, 299, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 299, 299, 258, 299, 206, 299, 299, 220, 207, 299, 126, 73, 108, 299, 274, 299, 299, 98, 299, 299, 330, 237, 299, 299, 210, 325, 245, 299, 310, 258, 299, 299, 299, 299, 220, 224, 299, 118, 299, 108, 299, 41, 40, 37, 98, 299, 299, 299, 261, 299, 299, 210, 325, 245, 299, 310, 258, 299, 256, 275, 282, 220, 224, 299, 128, 299, 108, 299, 299, 299, 299, 98, 299, 299, 229, 315, 206, 299, 210, 325, 245, 299, 310, 299, 471, 471, 307, 27, 299, 471, 455, 526, 51, 265, 266, 267, 211, 299, 299, 220, 299, 36, 299, 409, 409, 299, 299, 299, 26, 299, 299, 299, 299, 41, 40, 37, 206, 299, 455, 299, 455, 299, 471, 299, 455, 299, 299, 299, 299, 299, 256, 275, 282, 229, 299, 299, 117, 299, 442, 299, 409, 409, 409, 471, 471, 299, 299, 299, 471, 455, 442, 299, 299, 41, 40, 37, 299, 409, 409, 409, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 256, 275, 282, 299, 299, 299, 299, 455, 299, 455, 258, 471, 299, 455, 281, 220, 224, 299, 127, 299, 108, 299, 299, 299, 299, 98, 299, 299, 299, 299, 299, 299, 210, 325, 245, 258, 310, 206, 156, 299, 220, 224, 175, 121, 299, 108, 299, 299, 331, 299, 98, 23, 278, 299, 299, 299, 299, 210, 325, 245, 34, 310, 36, 299, 299, 187, 299, 299, 299, 26, 299, 299, 258, 299, 41, 40, 37, 220, 224, 299, 125, 299, 108, 299, 299, 299, 299, 98, 299, 299, 229, 256, 275, 282, 210, 325, 245, 299, 310, 299, 471, 471, 258, 31, 299, 471, 455, 220, 224, 299, 124, 299, 108, 299, 299, 299, 299, 98, 299, 299, 299, 299, 299, 299, 210, 325, 245, 258, 310, 206, 299, 299, 220, 224, 455, 119, 455, 108, 471, 299, 455, 299, 98, 299, 299, 229, 299, 299, 24, 210, 325, 245, 299, 310, 299, 471, 471, 299, 471, 471, 471, 455, 299, 471, 455, 206, 41, 40, 37, 299, 299, 299, 471, 471, 299, 299, 299, 471, 455, 299, 299, 276, 299, 256, 275, 282, 299, 299, 299, 455, 36, 455, 455, 471, 455, 455, 471, 26, 455, 299, 206, 403, 41, 40, 37, 206, 455, 299, 455, 299, 471, 403, 455, 403, 299, 299, 403, 299, 299, 256, 275, 282, 299, 403, 299, 403, 299, 403, 299, 299, 299, 299, 299, 299, 299, 299, 223, 41, 40, 37, 299, 299, 41, 40, 37, 299, 299, 299, 299, 299, 299, 299, 299, 173, 256, 275, 282, 175, 314, 256, 275, 282, 299, 331, 166, 299, 23, 278, 175, 162, 299, 299, 299, 175, 331, 299, 299, 23, 278, 331, 187, 299, 23, 278, 158, 299, 299, 299, 175, 299, 299, 187, 299, 299, 331, 165, 187, 23, 278, 175, 299, 299, 299, 299, 299, 331, 299, 299, 23, 278, 299, 187, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 187,); static public $yy_lookahead = array(12, 13, 14, 80, 16, 17, 71, 19, 20, 12, 13, 71, 91, 25, 17, 75, 81, 29, 30, 31, 32, 81, 34, 26, 36, 28, 15, 39, 93, 18, 33, 43, 44, 45, 46, 47, 28, 49, 98, 51, 52, 70, 54, 1, 36, 74, 58, 12, 13, 14, 79, 16, 17, 11, 19, 20, 48, 86, 64, 48, 25, 90, 75, 69, 29, 26, 31, 32, 26, 34, 46, 36, 33, 71, 39, 33, 52, 75, 43, 44, 45, 46, 47, 81, 49, 98, 51, 52, 53, 54, 35, 22, 37, 58, 12, 13, 14, 103, 16, 17, 98, 19, 20, 63, 64, 65, 66, 25, 11, 69, 41, 29, 64, 31, 32, 1, 34, 69, 36, 22, 22, 39, 53, 26, 95, 43, 44, 45, 46, 47, 33, 49, 1, 51, 52, 35, 54, 37, 41, 41, 58, 12, 13, 14, 14, 16, 17, 46, 19, 20, 102, 103, 71, 52, 25, 11, 75, 26, 29, 36, 31, 32, 81, 34, 33, 36, 22, 17, 39, 14, 26, 48, 43, 44, 45, 46, 47, 33, 49, 98, 51, 52, 70, 54, 54, 41, 74, 58, 12, 13, 14, 79, 16, 17, 75, 19, 20, 8, 9, 10, 50, 25, 90, 84, 85, 29, 13, 31, 32, 54, 34, 46, 36, 22, 36, 39, 14, 98, 53, 43, 44, 45, 46, 47, 46, 49, 48, 51, 52, 36, 54, 53, 41, 21, 58, 12, 13, 14, 36, 16, 17, 75, 19, 20, 12, 13, 15, 35, 25, 17, 59, 18, 29, 22, 31, 32, 54, 34, 74, 36, 76, 77, 39, 79, 98, 99, 43, 44, 45, 46, 47, 74, 49, 76, 51, 52, 79, 54, 35, 46, 37, 58, 12, 13, 14, 52, 16, 17, 71, 19, 20, 36, 74, 15, 76, 25, 18, 79, 81, 29, 35, 31, 32, 48, 34, 92, 36, 94, 95, 39, 93, 36, 15, 43, 44, 45, 46, 47, 53, 49, 26, 51, 52, 48, 54, 89, 48, 33, 58, 12, 13, 14, 96, 16, 17, 71, 19, 20, 14, 98, 71, 17, 25, 46, 71, 81, 29, 75, 31, 32, 81, 34, 1, 36, 81, 71, 39, 93, 1, 2, 43, 44, 45, 46, 47, 81, 49, 98, 51, 52, 98, 54, 91, 1, 93, 58, 12, 13, 14, 28, 16, 17, 98, 19, 20, 1, 91, 71, 93, 25, 18, 71, 1, 29, 80, 31, 32, 81, 34, 99, 36, 81, 11, 39, 94, 95, 2, 43, 44, 45, 46, 47, 89, 49, 65, 51, 52, 68, 54, 96, 80, 79, 58, 12, 13, 14, 36, 16, 17, 71, 19, 20, 94, 95, 71, 18, 25, 53, 96, 81, 29, 75, 31, 32, 81, 34, 18, 36, 74, 15, 39, 93, 91, 79, 43, 44, 45, 46, 47, 17, 49, 17, 51, 52, 98, 54, 17, 46, 36, 58, 12, 13, 14, 51, 16, 17, 48, 19, 20, 17, 34, 17, 42, 25, 17, 1, 34, 29, 22, 31, 32, 23, 34, 37, 36, 11, 17, 39, 5, 17, 17, 43, 44, 45, 46, 47, 17, 49, 51, 51, 26, 27, 54, 11, 53, 64, 58, 33, 13, 14, 69, 70, 17, 72, 73, 74, 53, 91, 81, 92, 79, 12, 13, 82, 83, 9, 17, 86, 87, 88, 104, 90, 79, 93, 91, 3, 4, 5, 6, 7, 8, 100, 101, 79, 12, 13, 91, 79, 16, 54, 91, 19, 20, 12, 13, 13, 14, 25, 17, 17, 64, 29, 91, 31, 32, 69, 70, 26, 72, 73, 74, 78, 76, 79, 33, 79, 34, 11, 82, 83, 79, 15, 86, 87, 88, 64, 90, 67, 104, 104, 69, 70, 26, 72, 73, 74, 54, 104, 14, 33, 79, 17, 36, 82, 83, 104, 104, 86, 87, 88, 64, 90, 104, 104, 48, 69, 70, 104, 72, 73, 74, 104, 101, 15, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 51, 90, 104, 54, 104, 64, 104, 104, 97, 104, 69, 70, 104, 72, 73, 74, 1, 104, 104, 46, 79, 104, 1, 82, 83, 52, 11, 86, 87, 88, 104, 90, 11, 18, 64, 104, 104, 104, 97, 69, 70, 26, 72, 73, 74, 104, 76, 26, 33, 79, 104, 36, 82, 83, 33, 104, 86, 87, 88, 64, 90, 12, 13, 48, 69, 70, 17, 72, 73, 74, 12, 13, 104, 104, 79, 17, 104, 82, 83, 104, 104, 86, 87, 88, 26, 90, 28, 104, 64, 104, 104, 33, 97, 69, 70, 104, 72, 73, 74, 50, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 14, 104, 104, 17, 69, 70, 1, 72, 73, 74, 104, 104, 104, 104, 79, 104, 11, 82, 83, 104, 104, 86, 87, 88, 64, 90, 104, 104, 104, 69, 70, 26, 72, 73, 74, 49, 104, 51, 33, 79, 54, 104, 82, 83, 104, 5, 86, 87, 88, 104, 90, 104, 12, 13, 14, 104, 16, 104, 64, 19, 20, 104, 104, 69, 70, 25, 72, 73, 74, 29, 104, 31, 32, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 58, 59, 104, 79, 104, 104, 82, 83, 104, 5, 86, 87, 88, 104, 90, 104, 12, 13, 14, 104, 16, 104, 104, 19, 20, 104, 104, 104, 104, 25, 104, 104, 64, 29, 104, 31, 32, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 12, 13, 82, 83, 104, 17, 86, 87, 88, 104, 90, 64, 104, 104, 58, 59, 69, 70, 104, 72, 73, 74, 104, 12, 13, 104, 79, 104, 17, 82, 83, 104, 104, 86, 87, 88, 104, 90, 50, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 50, 86, 87, 88, 104, 90, 64, 27, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 37, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 2, 104, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 37, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 73, 74, 104, 38, 39, 40, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 73, 74, 104, 104, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 104, 104, 64, 104, 1, 104, 104, 69, 70, 104, 72, 73, 74, 104, 11, 104, 104, 79, 104, 104, 82, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 104, 104, 104, 69, 70, 104, 72, 104, 74, 104, 38, 39, 40, 79, 104, 104, 104, 83, 104, 104, 86, 87, 88, 104, 90, 64, 104, 55, 56, 57, 69, 70, 104, 72, 104, 74, 104, 104, 104, 104, 79, 104, 104, 2, 83, 1, 104, 86, 87, 88, 104, 90, 104, 12, 13, 11, 15, 104, 17, 18, 61, 62, 63, 64, 65, 66, 104, 104, 69, 104, 26, 104, 1, 2, 104, 104, 104, 33, 104, 104, 104, 104, 38, 39, 40, 1, 104, 46, 104, 48, 104, 50, 104, 52, 104, 104, 104, 104, 104, 55, 56, 57, 2, 104, 104, 21, 104, 36, 104, 38, 39, 40, 12, 13, 104, 104, 104, 17, 18, 48, 104, 104, 38, 39, 40, 104, 55, 56, 57, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 55, 56, 57, 104, 104, 104, 104, 46, 104, 48, 64, 50, 104, 52, 53, 69, 70, 104, 72, 104, 74, 104, 104, 104, 104, 79, 104, 104, 104, 104, 104, 104, 86, 87, 88, 64, 90, 1, 71, 104, 69, 70, 75, 72, 104, 74, 104, 104, 81, 104, 79, 84, 85, 104, 104, 104, 104, 86, 87, 88, 24, 90, 26, 104, 104, 98, 104, 104, 104, 33, 104, 104, 64, 104, 38, 39, 40, 69, 70, 104, 72, 104, 74, 104, 104, 104, 104, 79, 104, 104, 2, 55, 56, 57, 86, 87, 88, 104, 90, 104, 12, 13, 64, 15, 104, 17, 18, 69, 70, 104, 72, 104, 74, 104, 104, 104, 104, 79, 104, 104, 104, 104, 104, 104, 86, 87, 88, 64, 90, 1, 104, 104, 69, 70, 46, 72, 48, 74, 50, 104, 52, 104, 79, 104, 104, 2, 104, 104, 2, 86, 87, 88, 104, 90, 104, 12, 13, 104, 12, 13, 17, 18, 104, 17, 18, 1, 38, 39, 40, 104, 104, 104, 12, 13, 104, 104, 104, 17, 18, 104, 104, 53, 104, 55, 56, 57, 104, 104, 104, 46, 26, 48, 46, 50, 48, 52, 50, 33, 52, 104, 1, 11, 38, 39, 40, 1, 46, 104, 48, 104, 50, 21, 52, 23, 104, 104, 26, 104, 104, 55, 56, 57, 104, 33, 104, 35, 104, 37, 104, 104, 104, 104, 104, 104, 104, 104, 46, 38, 39, 40, 104, 104, 38, 39, 40, 104, 104, 104, 104, 104, 104, 104, 104, 71, 55, 56, 57, 75, 59, 55, 56, 57, 104, 81, 71, 104, 84, 85, 75, 71, 104, 104, 104, 75, 81, 104, 104, 84, 85, 81, 98, 104, 84, 85, 71, 104, 104, 104, 75, 104, 104, 98, 104, 104, 81, 71, 98, 84, 85, 75, 104, 104, 104, 104, 104, 81, 104, 104, 84, 85, 104, 98, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98,); const YY_SHIFT_USE_DFLT = - 13; const YY_SHIFT_MAX = 236; static public $yy_shift_ofst = array(542, 364, 82, 82, 82, 411, 364, 411, 35, - 12, - 12, 82, 82, 82, 82, 82, 82, 176, 82, 82, 129, 82, 82, 82, 317, 82, 82, 82, 82, 82, 82, 270, 82, 82, 82, 82, 176, 223, 223, 458, 458, 458, 458, 458, 1734, 1603, 1862, 1862, 1862, 1862, 1862, 542, 749, 803, 1897, 1448, 1531, 1199, 1643, 1826, 1365, 950, 1282, 1033, 1116, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 660, 1902, 1089, 1089, 594, 666, 131, 202, 865, - 3, 703, 551, 551, 233, 202, 202, 131, 131, 357, 97, 484, 144, 920, 505, 42, 768, 189, 232, 11, 232, 278, 324, 428, 39, 372, 324, 39, 351, 384, 391, 294, 155, 114, 114, 114, 114, 417, 417, 114, 114, 114, 114, - 13, 1786, 1659, 1600, 1844, 1841, 1858, 552, 897, 519, 618, 24, 101, 39, 101, 24, 39, 24, 39, 130, 39, 39, 24, 39, 24, 24, 193, 24, 39, 39, 39, 24, 39, 39, 39, 130, 39, 39, 39, 130, 39, 130, 39, 231, 39, 39, 114, 114, 114, 526, 404, 417, 404, 114, 417, 390, 114, 417, - 13, - 13, - 13, - 13, - 13, 1630, 1888, 576, 178, 694, 191, 69, 8, 100, 275, 212, 243, 297, 265, 255, 150, 98, 165, 55, 123, 493, 479, 468, 456, 434, 482, 483, 473, 461, 502, 489, 457, 452, 466, 422, 421, 449, 442, 444, 462, 432, 467, 440, 464, 446, 390,); const YY_REDUCE_USE_DFLT = - 80; const YY_REDUCE_MAX = 190; static public $yy_reduce_ofst = array(1558, 451, 556, 640, 586, 506, 531, 615, 995, 939, 1078, 723, 1244, 968, 856, 912, 1354, 1134, 1105, 1161, 1051, 1217, 1022, 1188, 1300, 1466, 1383, 1271, 1327, 1437, 1410, 757, 698, 669, 885, 829, 785, 1493, 1520, 1761, 1706, 1669, 1644, 1736, 1880, 1665, 1896, 1911, 1665, 1891, 1922, 40, - 29, 48, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 81, 119, 119, 119, 112, 2, - 60, 184, - 6, 264, 358, - 65, 217, 213, 218, 197, 284, 269, 166, 363, - 13, 363, 295, 342, - 13, - 13, 349, 281, 310, 295, 310, 323, 310, 316, 272, 236, 273, - 13, - 13, - 13, 320, 374, - 13, - 13, 366, - 13, 338, 310, - 13, - 13, - 13, - 13, - 13, 465, 465, 465, 465, 465, 465, 474, 450, 465, 465, 437, 469, 447, 453, 437, 447, 437, 447, 463, 447, 447, 437, 447, 437, 437, 481, 437, 447, 447, 447, 437, 447, 447, 447, 478, 447, 447, 447, 511, 447, 504, 447, 503, 447, 447, 241, 241, 241, 530, 300, 29, 300, 241, 29, 361, 241, 29, - 79, - 77, 314, 340, 436,); static public $yyExpectedTokens = array(array(3, 4, 5, 6, 7, 8, 12, 13, 16, 19, 20, 25, 29, 31, 32,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 30, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 52, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 54, 58,), array(12, 13, 14, 16, 17, 19, 20, 25, 29, 31, 32, 34, 36, 39, 43, 44, 45, 46, 47, 49, 51, 54, 58,), array(1, 24, 26, 33, 38, 39, 40, 55, 56, 57,), array(1, 11, 26, 33, 38, 39, 40, 55, 56, 57,), array(1, 26, 33, 38, 39, 40, 55, 56, 57,), array(1, 26, 33, 38, 39, 40, 55, 56, 57,), array(1, 26, 33, 38, 39, 40, 55, 56, 57,), array(1, 26, 33, 38, 39, 40, 55, 56, 57,), array(1, 26, 33, 38, 39, 40, 55, 56, 57,), array(3, 4, 5, 6, 7, 8, 12, 13, 16, 19, 20, 25, 29, 31, 32,), array(14, 17, 49, 51, 54,), array(5, 12, 13, 14, 16, 19, 20, 25, 29, 31, 32, 58, 59,), array(1, 38, 39, 40, 55, 56, 57, 59,), array(1, 11, 38, 39, 40, 55, 56, 57,), array(1, 11, 38, 39, 40, 55, 56, 57,), array(1, 2, 38, 39, 40, 55, 56, 57,), array(1, 21, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 53, 55, 56, 57,), array(1, 11, 38, 39, 40, 55, 56, 57,), array(1, 27, 38, 39, 40, 55, 56, 57,), array(1, 37, 38, 39, 40, 55, 56, 57,), array(1, 11, 38, 39, 40, 55, 56, 57,), array(1, 37, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 38, 39, 40, 55, 56, 57,), array(1, 11, 18, 26, 33, 36, 48,), array(1, 38, 39, 40, 55, 56, 57,), array(38, 39, 40, 55, 56, 57,), array(38, 39, 40, 55, 56, 57,), array(14, 17, 51, 54,), array(1, 11, 26, 33,), array(1, 26, 33,), array(14, 36, 54,), array(5, 12, 13, 14, 16, 19, 20, 25, 29, 31, 32, 58, 59,), array(12, 13, 17, 26, 28, 33,), array(12, 13, 17, 26, 28, 33,), array(12, 13, 17, 26, 33,), array(12, 13, 17, 26, 33,), array(18, 46, 52,), array(14, 36, 54,), array(14, 36, 54,), array(1, 26, 33,), array(1, 26, 33,), array(1, 2,), array(11, 22, 26, 33, 41,), array(1, 11, 26, 27, 33,), array(11, 22, 26, 33, 41,), array(12, 13, 17, 50,), array(13, 14, 17, 54,), array(1, 11, 26, 33,), array(1, 11, 26, 33,), array(8, 9, 10,), array(12, 13, 17,), array(15, 18, 48,), array(12, 13, 17,), array(15, 18, 48,), array(14, 17,), array(18, 48,), array(26, 33,), array(1, 18,), array(14, 17,), array(26, 33,), array(1, 28,), array(1, 53,), array(1, 11,), array(26, 33,), array(14, 54,), array(1,), array(1,), array(1,), array(1,), array(18,), array(18,), array(1,), array(1,), array(1,), array(1,), array(), array(2, 12, 13, 15, 17, 18, 46, 48, 50, 52,), array(2, 12, 13, 17, 18, 46, 48, 50, 52, 53,), array(2, 12, 13, 15, 17, 18, 46, 48, 50, 52,), array(2, 12, 13, 17, 18, 46, 48, 50, 52,), array(2, 12, 13, 17, 18, 46, 48, 50, 52,), array(12, 13, 17, 18, 46, 48, 50, 52,), array(13, 14, 17, 34, 54,), array(12, 13, 17, 50,), array(12, 13, 17,), array(15, 46, 52,), array(46, 52,), array(46, 52,), array(26, 33,), array(46, 52,), array(46, 52,), array(26, 33,), array(46, 52,), array(26, 33,), array(14, 54,), array(26, 33,), array(26, 33,), array(46, 52,), array(26, 33,), array(46, 52,), array(46, 52,), array(13, 36,), array(46, 52,), array(26, 33,), array(26, 33,), array(26, 33,), array(46, 52,), array(26, 33,), array(26, 33,), array(26, 33,), array(14, 54,), array(26, 33,), array(26, 33,), array(26, 33,), array(14, 54,), array(26, 33,), array(14, 54,), array(26, 33,), array(15, 22,), array(26, 33,), array(26, 33,), array(1,), array(1,), array(1,), array(9,), array(2,), array(18,), array(2,), array(1,), array(18,), array(36,), array(1,), array(18,), array(), array(), array(), array(), array(), array(1, 2, 36, 38, 39, 40, 48, 55, 56, 57,), array(11, 21, 23, 26, 33, 35, 37, 46,), array(11, 15, 26, 33, 36, 48,), array(36, 46, 48, 53,), array(12, 13, 17, 50,), array(22, 41, 59,), array(22, 41, 53,), array(28, 36, 48,), array(35, 37,), array(36, 48,), array(21, 35,), array(35, 37,), array(15, 46,), array(35, 53,), array(36, 48,), array(17, 50,), array(22, 41,), array(46, 53,), array(35, 37,), array(36, 48,), array(5,), array(17,), array(23,), array(37,), array(15,), array(17,), array(17,), array(53,), array(53,), array(11,), array(17,), array(51,), array(34,), array(22,), array(51,), array(46,), array(17,), array(17,), array(17,), array(17,), array(36,), array(17,), array(42,), array(17,), array(34,), array(36,), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(), array(),); static public $yy_default = array(335, 510, 490, 490, 490, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 393, 525, 360, 393, 357, 393, 369, 332, 525, 525, 525, 525, 525, 525, 525, 525, 525, 398, 525, 525, 525, 513, 405, 395, 404, 489, 398, 374, 400, 511, 488, 414, 432, 512, 421, 420, 525, 407, 393, 525, 525, 393, 393, 393, 393, 502, 525, 525, 393, 393, 383, 422, 407, 422, 455, 525, 407, 407, 525, 455, 445, 455, 445, 525, 445, 393, 387, 525, 371, 407, 407, 407, 393, 525, 417, 425, 389, 410, 499, 445, 423, 411, 407, 424, 497, 444, 444, 444, 444, 444, 444, 525, 457, 455, 471, 449, 448, 366, 450, 451, 379, 453, 378, 525, 368, 367, 452, 364, 483, 480, 455, 481, 358, 380, 362, 482, 373, 356, 361, 525, 382, 370, 377, 525, 372, 525, 354, 525, 381, 376, 439, 413, 384, 348, 492, 477, 491, 388, 503, 455, 390, 500, 455, 496, 496, 496, 455, 432, 428, 432, 432, 456, 422, 422, 432, 525, 440, 525, 525, 428, 525, 432, 525, 422, 428, 525, 525, 340, 525, 401, 525, 525, 525, 525, 435, 525, 525, 525, 525, 430, 422, 525, 428, 525, 525, 525, 525, 501, 525, 434, 525, 525, 471, 412, 391, 402, 418, 375, 352, 394, 435, 436, 460, 459, 471, 479, 437, 419, 442, 351, 443, 363, 504, 342, 438, 341, 343, 416, 441, 339, 334, 333, 336, 337, 338, 344, 468, 349, 347, 350, 476, 505, 469, 406, 415, 345, 346, 466, 506, 486, 385, 487, 495, 508, 509, 478, 426, 429, 474, 475, 427, 386, 507, 524, 523, 520, 518, 517, 493, 514, 494, 515, 516, 522, 473, 446, 447, 454, 470, 485, 519, 498, 458, 434, 461, 464, 472, 467, 484, 521, 431, 433, 465, 463, 409, 462, 408, 392,); const YYNOCODE = 105; const YYSTACKDEPTH = 500; const YYNSTATE = 332; const YYNRULE = 193; const YYERRORSYMBOL = 60; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; public static $yyFallback = array(); public function Trace($TraceFILE, $zTracePrompt) { if (!$TraceFILE) { $zTracePrompt = 0; } elseif (!$zTracePrompt) { $TraceFILE = 0; } $this->yyTraceFILE = $TraceFILE; $this->yyTracePrompt = $zTracePrompt; } public function PrintTrace() { $this->yyTraceFILE = fopen('php://output', 'w'); $this->yyTracePrompt = '
'; } public $yyTraceFILE; public $yyTracePrompt; public $yyidx; /* Index of top element in stack */ public $yyerrcnt; /* Shifts left before out of the error */ public $yystack = array(); /* The parser's stack */ public $yyTokenName = array('$', 'VERT', 'COLON', 'PHP', 'NOCACHE', 'TEXT', 'STRIPON', 'STRIPOFF', 'LITERALSTART', 'LITERALEND', 'LITERAL', 'RDEL', 'SIMPELOUTPUT', 'LDEL', 'DOLLARID', 'EQUAL', 'SIMPLETAG', 'ID', 'PTR', 'LDELIF', 'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO', 'STEP', 'LDELFOREACH', 'SPACE', 'AS', 'APTR', 'LDELSETFILTER', 'SMARTYBLOCKCHILDPARENT', 'CLOSETAG', 'LDELSLASH', 'ATTR', 'INTEGER', 'COMMA', 'OPENP', 'CLOSEP', 'MATH', 'UNIMATH', 'ISIN', 'INSTANCEOF', 'QMARK', 'NOT', 'TYPECAST', 'HEX', 'DOT', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH', 'OPENB', 'CLOSEB', 'DOLLAR', 'LOGOP', 'TLOGOP', 'SINGLECOND', 'QUOTE', 'BACKTICK', 'error', 'start', 'template', 'template_element', 'smartytag', 'literal', 'text_content', 'literal_elements', 'literal_element', 'tag', 'variable', 'attributes', 'value', 'expr', 'varindexed', 'modifierlist', 'statement', 'statements', 'foraction', 'varvar', 'modparameters', 'attribute', 'ternary', 'array', 'lop', 'scond', 'ns1', 'function', 'doublequoted_with_quotes', 'static_class_access', 'object', 'arrayindex', 'indexdef', 'varvarele', 'objectchain', 'objectelement', 'method', 'params', 'modifier', 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent',); public static $yyRuleName = array('start ::= template', 'template ::= template_element', 'template ::= template template_element', 'template ::=', 'template_element ::= smartytag', 'template_element ::= literal', 'template_element ::= PHP', 'template_element ::= NOCACHE', 'template_element ::= text_content', 'text_content ::= TEXT', 'text_content ::= text_content TEXT', 'template_element ::= STRIPON', 'template_element ::= STRIPOFF', 'literal ::= LITERALSTART LITERALEND', 'literal ::= LITERALSTART literal_elements LITERALEND', 'literal_elements ::= literal_elements literal_element', 'literal_elements ::=', 'literal_element ::= literal', 'literal_element ::= LITERAL', 'smartytag ::= tag RDEL', 'smartytag ::= SIMPELOUTPUT', 'tag ::= LDEL variable', 'tag ::= LDEL variable attributes', 'tag ::= LDEL value', 'tag ::= LDEL value attributes', 'tag ::= LDEL expr', 'tag ::= LDEL expr attributes', 'tag ::= LDEL DOLLARID EQUAL value', 'tag ::= LDEL DOLLARID EQUAL expr', 'tag ::= LDEL DOLLARID EQUAL expr attributes', 'tag ::= LDEL varindexed EQUAL expr attributes', 'smartytag ::= SIMPLETAG', 'tag ::= LDEL ID attributes', 'tag ::= LDEL ID', 'tag ::= LDEL ID modifierlist attributes', 'tag ::= LDEL ID PTR ID attributes', 'tag ::= LDEL ID PTR ID modifierlist attributes', 'tag ::= LDELIF expr', 'tag ::= LDELIF expr attributes', 'tag ::= LDELIF statement', 'tag ::= LDELIF statement attributes', 'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes', 'foraction ::= EQUAL expr', 'foraction ::= INCDEC', 'tag ::= LDELFOR statement TO expr attributes', 'tag ::= LDELFOR statement TO expr STEP expr attributes', 'tag ::= LDELFOREACH attributes', 'tag ::= LDELFOREACH SPACE value AS varvar attributes', 'tag ::= LDELFOREACH SPACE value AS varvar APTR varvar attributes', 'tag ::= LDELFOREACH SPACE expr AS varvar attributes', 'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes', 'tag ::= LDELSETFILTER ID modparameters', 'tag ::= LDELSETFILTER ID modparameters modifierlist', 'tag ::= LDEL SMARTYBLOCKCHILDPARENT', 'smartytag ::= CLOSETAG', 'tag ::= LDELSLASH ID', 'tag ::= LDELSLASH ID modifierlist', 'tag ::= LDELSLASH ID PTR ID', 'tag ::= LDELSLASH ID PTR ID modifierlist', 'attributes ::= attributes attribute', 'attributes ::= attribute', 'attributes ::=', 'attribute ::= SPACE ID EQUAL ID', 'attribute ::= ATTR expr', 'attribute ::= ATTR value', 'attribute ::= SPACE ID', 'attribute ::= SPACE expr', 'attribute ::= SPACE value', 'attribute ::= SPACE INTEGER EQUAL expr', 'statements ::= statement', 'statements ::= statements COMMA statement', 'statement ::= DOLLARID EQUAL INTEGER', 'statement ::= DOLLARID EQUAL expr', 'statement ::= varindexed EQUAL expr', 'statement ::= OPENP statement CLOSEP', 'expr ::= value', 'expr ::= ternary', 'expr ::= DOLLARID COLON ID', 'expr ::= expr MATH value', 'expr ::= expr UNIMATH value', 'expr ::= array', 'expr ::= expr modifierlist', 'expr ::= expr lop expr', 'expr ::= expr scond', 'expr ::= expr ISIN array', 'expr ::= expr ISIN value', 'expr ::= variable INSTANCEOF ns1', 'expr ::= variable INSTANCEOF variable', 'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr', 'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr', 'value ::= variable', 'value ::= UNIMATH value', 'value ::= NOT value', 'value ::= TYPECAST value', 'value ::= variable INCDEC', 'value ::= HEX', 'value ::= INTEGER', 'value ::= INTEGER DOT INTEGER', 'value ::= INTEGER DOT', 'value ::= DOT INTEGER', 'value ::= ID', 'value ::= function', 'value ::= OPENP expr CLOSEP', 'value ::= SINGLEQUOTESTRING', 'value ::= doublequoted_with_quotes', 'value ::= varindexed DOUBLECOLON static_class_access', 'value ::= smartytag', 'value ::= value modifierlist', 'value ::= NAMESPACE', 'value ::= ns1 DOUBLECOLON static_class_access', 'ns1 ::= ID', 'ns1 ::= NAMESPACE', 'variable ::= DOLLARID', 'variable ::= varindexed', 'variable ::= varvar AT ID', 'variable ::= object', 'variable ::= HATCH ID HATCH', 'variable ::= HATCH ID HATCH arrayindex', 'variable ::= HATCH variable HATCH', 'variable ::= HATCH variable HATCH arrayindex', 'varindexed ::= DOLLARID arrayindex', 'varindexed ::= varvar arrayindex', 'arrayindex ::= arrayindex indexdef', 'arrayindex ::=', 'indexdef ::= DOT DOLLARID', 'indexdef ::= DOT varvar', 'indexdef ::= DOT varvar AT ID', 'indexdef ::= DOT ID', 'indexdef ::= DOT INTEGER', 'indexdef ::= DOT LDEL expr RDEL', 'indexdef ::= OPENB ID CLOSEB', 'indexdef ::= OPENB ID DOT ID CLOSEB', 'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB', 'indexdef ::= OPENB INTEGER CLOSEB', 'indexdef ::= OPENB DOLLARID CLOSEB', 'indexdef ::= OPENB variable CLOSEB', 'indexdef ::= OPENB value CLOSEB', 'indexdef ::= OPENB expr CLOSEB', 'indexdef ::= OPENB CLOSEB', 'varvar ::= DOLLARID', 'varvar ::= DOLLAR', 'varvar ::= varvar varvarele', 'varvarele ::= ID', 'varvarele ::= SIMPELOUTPUT', 'varvarele ::= LDEL expr RDEL', 'object ::= varindexed objectchain', 'objectchain ::= objectelement', 'objectchain ::= objectchain objectelement', 'objectelement ::= PTR ID arrayindex', 'objectelement ::= PTR varvar arrayindex', 'objectelement ::= PTR LDEL expr RDEL arrayindex', 'objectelement ::= PTR ID LDEL expr RDEL arrayindex', 'objectelement ::= PTR method', 'function ::= ns1 OPENP params CLOSEP', 'method ::= ID OPENP params CLOSEP', 'method ::= DOLLARID OPENP params CLOSEP', 'params ::= params COMMA expr', 'params ::= expr', 'params ::=', 'modifierlist ::= modifierlist modifier modparameters', 'modifierlist ::= modifier modparameters', 'modifier ::= VERT AT ID', 'modifier ::= VERT ID', 'modparameters ::= modparameters modparameter', 'modparameters ::=', 'modparameter ::= COLON value', 'modparameter ::= COLON array', 'static_class_access ::= method', 'static_class_access ::= method objectchain', 'static_class_access ::= ID', 'static_class_access ::= DOLLARID arrayindex', 'static_class_access ::= DOLLARID arrayindex objectchain', 'lop ::= LOGOP', 'lop ::= TLOGOP', 'scond ::= SINGLECOND', 'array ::= OPENB arrayelements CLOSEB', 'arrayelements ::= arrayelement', 'arrayelements ::= arrayelements COMMA arrayelement', 'arrayelements ::=', 'arrayelement ::= value APTR expr', 'arrayelement ::= ID APTR expr', 'arrayelement ::= expr', 'doublequoted_with_quotes ::= QUOTE QUOTE', 'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE', 'doublequoted ::= doublequoted doublequotedcontent', 'doublequoted ::= doublequotedcontent', 'doublequotedcontent ::= BACKTICK variable BACKTICK', 'doublequotedcontent ::= BACKTICK expr BACKTICK', 'doublequotedcontent ::= DOLLARID', 'doublequotedcontent ::= LDEL variable RDEL', 'doublequotedcontent ::= LDEL expr RDEL', 'doublequotedcontent ::= smartytag', 'doublequotedcontent ::= TEXT',); public function tokenName($tokenType) { if ($tokenType === 0) { return 'End of Input'; } if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) { return $this->yyTokenName[ $tokenType ]; } else { return "Unknown"; } } public static function yy_destructor($yymajor, $yypminor) { switch ($yymajor) { default: break; /* If no destructor action specified: do nothing */ } } public function yy_pop_parser_stack() { if (empty($this->yystack)) { return; } $yytos = array_pop($this->yystack); if ($this->yyTraceFILE && $this->yyidx >= 0) { fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[ $yytos->major ] . "\n"); } $yymajor = $yytos->major; self::yy_destructor($yymajor, $yytos->minor); $this->yyidx --; return $yymajor; } public function __destruct() { while ($this->yystack !== Array()) { $this->yy_pop_parser_stack(); } if (is_resource($this->yyTraceFILE)) { fclose($this->yyTraceFILE); } } public function yy_get_expected_tokens($token) { static $res3 = array(); static $res4 = array(); $state = $this->yystack[ $this->yyidx ]->stateno; $expected = self::$yyExpectedTokens[ $state ]; if (isset($res3[ $state ][ $token ])) { if ($res3[ $state ][ $token ]) { return $expected; } } else { if ($res3[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) { return $expected; } } $stack = $this->yystack; $yyidx = $this->yyidx; do { $yyact = $this->yy_find_shift_action($token); if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { // reduce action $done = 0; do { if ($done ++ == 100) { $this->yyidx = $yyidx; $this->yystack = $stack; // too much recursion prevents proper detection // so give up return array_unique($expected); } $yyruleno = $yyact - self::YYNSTATE; $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ]; $nextstate = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno, self::$yyRuleInfo[ $yyruleno ][ 0 ]); if (isset(self::$yyExpectedTokens[ $nextstate ])) { $expected = array_merge($expected, self::$yyExpectedTokens[ $nextstate ]); if (isset($res4[ $nextstate ][ $token ])) { if ($res4[ $nextstate ][ $token ]) { $this->yyidx = $yyidx; $this->yystack = $stack; return array_unique($expected); } } else { if ($res4[ $nextstate ][ $token ] = in_array($token, self::$yyExpectedTokens[ $nextstate ], true) ) { $this->yyidx = $yyidx; $this->yystack = $stack; return array_unique($expected); } } } if ($nextstate < self::YYNSTATE) { // we need to shift a non-terminal $this->yyidx ++; $x = new TP_yyStackEntry; $x->stateno = $nextstate; $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ]; $this->yystack[ $this->yyidx ] = $x; continue 2; } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { $this->yyidx = $yyidx; $this->yystack = $stack; // the last token was just ignored, we can't accept // by ignoring input, this is in essence ignoring a // syntax error! return array_unique($expected); } elseif ($nextstate === self::YY_NO_ACTION) { $this->yyidx = $yyidx; $this->yystack = $stack; // input accepted, but not shifted (I guess) return $expected; } else { $yyact = $nextstate; } } while (true); } break; } while (true); $this->yyidx = $yyidx; $this->yystack = $stack; return array_unique($expected); } public function yy_is_expected_token($token) { static $res = array(); static $res2 = array(); if ($token === 0) { return true; // 0 is not part of this } $state = $this->yystack[ $this->yyidx ]->stateno; if (isset($res[ $state ][ $token ])) { if ($res[ $state ][ $token ]) { return true; } } else { if ($res[ $state ][ $token ] = in_array($token, self::$yyExpectedTokens[ $state ], true)) { return true; } } $stack = $this->yystack; $yyidx = $this->yyidx; do { $yyact = $this->yy_find_shift_action($token); if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) { // reduce action $done = 0; do { if ($done ++ == 100) { $this->yyidx = $yyidx; $this->yystack = $stack; // too much recursion prevents proper detection // so give up return true; } $yyruleno = $yyact - self::YYNSTATE; $this->yyidx -= self::$yyRuleInfo[ $yyruleno ][ 1 ]; $nextstate = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno, self::$yyRuleInfo[ $yyruleno ][ 0 ]); if (isset($res2[ $nextstate ][ $token ])) { if ($res2[ $nextstate ][ $token ]) { $this->yyidx = $yyidx; $this->yystack = $stack; return true; } } else { if ($res2[ $nextstate ][ $token ] = (isset(self::$yyExpectedTokens[ $nextstate ]) && in_array($token, self::$yyExpectedTokens[ $nextstate ], true)) ) { $this->yyidx = $yyidx; $this->yystack = $stack; return true; } } if ($nextstate < self::YYNSTATE) { // we need to shift a non-terminal $this->yyidx ++; $x = new TP_yyStackEntry; $x->stateno = $nextstate; $x->major = self::$yyRuleInfo[ $yyruleno ][ 0 ]; $this->yystack[ $this->yyidx ] = $x; continue 2; } elseif ($nextstate == self::YYNSTATE + self::YYNRULE + 1) { $this->yyidx = $yyidx; $this->yystack = $stack; if (!$token) { // end of input: this is valid return true; } // the last token was just ignored, we can't accept // by ignoring input, this is in essence ignoring a // syntax error! return false; } elseif ($nextstate === self::YY_NO_ACTION) { $this->yyidx = $yyidx; $this->yystack = $stack; // input accepted, but not shifted (I guess) return true; } else { $yyact = $nextstate; } } while (true); } break; } while (true); $this->yyidx = $yyidx; $this->yystack = $stack; return true; } public function yy_find_shift_action($iLookAhead) { $stateno = $this->yystack[ $this->yyidx ]->stateno; /* if ($this->yyidx < 0) return self::YY_NO_ACTION; */ if (!isset(self::$yy_shift_ofst[ $stateno ])) { // no shift actions return self::$yy_default[ $stateno ]; } $i = self::$yy_shift_ofst[ $stateno ]; if ($i === self::YY_SHIFT_USE_DFLT) { return self::$yy_default[ $stateno ]; } if ($iLookAhead == self::YYNOCODE) { return self::YY_NO_ACTION; } $i += $iLookAhead; if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[ $i ] != $iLookAhead) { if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback) && ($iFallback = self::$yyFallback[ $iLookAhead ]) != 0 ) { if ($this->yyTraceFILE) { fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " . $this->yyTokenName[ $iLookAhead ] . " => " . $this->yyTokenName[ $iFallback ] . "\n"); } return $this->yy_find_shift_action($iFallback); } return self::$yy_default[ $stateno ]; } else { return self::$yy_action[ $i ]; } } public function yy_find_reduce_action($stateno, $iLookAhead) { /* $stateno = $this->yystack[$this->yyidx]->stateno; */ if (!isset(self::$yy_reduce_ofst[ $stateno ])) { return self::$yy_default[ $stateno ]; } $i = self::$yy_reduce_ofst[ $stateno ]; if ($i == self::YY_REDUCE_USE_DFLT) { return self::$yy_default[ $stateno ]; } if ($iLookAhead == self::YYNOCODE) { return self::YY_NO_ACTION; } $i += $iLookAhead; if ($i < 0 || $i >= self::YY_SZ_ACTTAB || self::$yy_lookahead[ $i ] != $iLookAhead) { return self::$yy_default[ $stateno ]; } else { return self::$yy_action[ $i ]; } } public function yy_shift($yyNewState, $yyMajor, $yypMinor) { $this->yyidx ++; if ($this->yyidx >= self::YYSTACKDEPTH) { $this->yyidx --; if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt); } while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } #line 214 "../smarty/lexer/smarty_internal_templateparser.y" $this->internalError = true; $this->compiler->trigger_template_error("Stack overflow in template parser"); return; } $yytos = new TP_yyStackEntry; $yytos->stateno = $yyNewState; $yytos->major = $yyMajor; $yytos->minor = $yypMinor; $this->yystack[] = $yytos; if ($this->yyTraceFILE && $this->yyidx > 0) { fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt, $yyNewState); fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt); for ($i = 1; $i <= $this->yyidx; $i ++) { fprintf($this->yyTraceFILE, " %s", $this->yyTokenName[ $this->yystack[ $i ]->major ]); } fwrite($this->yyTraceFILE, "\n"); } } public static $yyRuleInfo = array(array(0 => 61, 1 => 1), array(0 => 62, 1 => 1), array(0 => 62, 1 => 2), array(0 => 62, 1 => 0), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), array(0 => 66, 1 => 1), array(0 => 66, 1 => 2), array(0 => 63, 1 => 1), array(0 => 63, 1 => 1), array(0 => 65, 1 => 2), array(0 => 65, 1 => 3), array(0 => 67, 1 => 2), array(0 => 67, 1 => 0), array(0 => 68, 1 => 1), array(0 => 68, 1 => 1), array(0 => 64, 1 => 2), array(0 => 64, 1 => 1), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 4), array(0 => 69, 1 => 4), array(0 => 69, 1 => 5), array(0 => 69, 1 => 5), array(0 => 64, 1 => 1), array(0 => 69, 1 => 3), array(0 => 69, 1 => 2), array(0 => 69, 1 => 4), array(0 => 69, 1 => 5), array(0 => 69, 1 => 6), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 8), array(0 => 78, 1 => 2), array(0 => 78, 1 => 1), array(0 => 69, 1 => 5), array(0 => 69, 1 => 7), array(0 => 69, 1 => 2), array(0 => 69, 1 => 6), array(0 => 69, 1 => 8), array(0 => 69, 1 => 6), array(0 => 69, 1 => 8), array(0 => 69, 1 => 3), array(0 => 69, 1 => 4), array(0 => 69, 1 => 2), array(0 => 64, 1 => 1), array(0 => 69, 1 => 2), array(0 => 69, 1 => 3), array(0 => 69, 1 => 4), array(0 => 69, 1 => 5), array(0 => 71, 1 => 2), array(0 => 71, 1 => 1), array(0 => 71, 1 => 0), array(0 => 81, 1 => 4), array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 2), array(0 => 81, 1 => 4), array(0 => 77, 1 => 1), array(0 => 77, 1 => 3), array(0 => 76, 1 => 3), array(0 => 76, 1 => 3), array(0 => 76, 1 => 3), array(0 => 76, 1 => 3), array(0 => 73, 1 => 1), array(0 => 73, 1 => 1), array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 1), array(0 => 73, 1 => 2), array(0 => 73, 1 => 3), array(0 => 73, 1 => 2), array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 73, 1 => 3), array(0 => 82, 1 => 7), array(0 => 82, 1 => 7), array(0 => 72, 1 => 1), array(0 => 72, 1 => 2), array(0 => 72, 1 => 2), array(0 => 72, 1 => 2), array(0 => 72, 1 => 2), array(0 => 72, 1 => 1), array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 72, 1 => 2), array(0 => 72, 1 => 2), array(0 => 72, 1 => 1), array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 72, 1 => 1), array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 72, 1 => 1), array(0 => 72, 1 => 2), array(0 => 72, 1 => 1), array(0 => 72, 1 => 3), array(0 => 86, 1 => 1), array(0 => 86, 1 => 1), array(0 => 70, 1 => 1), array(0 => 70, 1 => 1), array(0 => 70, 1 => 3), array(0 => 70, 1 => 1), array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), array(0 => 70, 1 => 3), array(0 => 70, 1 => 4), array(0 => 74, 1 => 2), array(0 => 74, 1 => 2), array(0 => 91, 1 => 2), array(0 => 91, 1 => 0), array(0 => 92, 1 => 2), array(0 => 92, 1 => 2), array(0 => 92, 1 => 4), array(0 => 92, 1 => 2), array(0 => 92, 1 => 2), array(0 => 92, 1 => 4), array(0 => 92, 1 => 3), array(0 => 92, 1 => 5), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 3), array(0 => 92, 1 => 2), array(0 => 79, 1 => 1), array(0 => 79, 1 => 1), array(0 => 79, 1 => 2), array(0 => 93, 1 => 1), array(0 => 93, 1 => 1), array(0 => 93, 1 => 3), array(0 => 90, 1 => 2), array(0 => 94, 1 => 1), array(0 => 94, 1 => 2), array(0 => 95, 1 => 3), array(0 => 95, 1 => 3), array(0 => 95, 1 => 5), array(0 => 95, 1 => 6), array(0 => 95, 1 => 2), array(0 => 87, 1 => 4), array(0 => 96, 1 => 4), array(0 => 96, 1 => 4), array(0 => 97, 1 => 3), array(0 => 97, 1 => 1), array(0 => 97, 1 => 0), array(0 => 75, 1 => 3), array(0 => 75, 1 => 2), array(0 => 98, 1 => 3), array(0 => 98, 1 => 2), array(0 => 80, 1 => 2), array(0 => 80, 1 => 0), array(0 => 99, 1 => 2), array(0 => 99, 1 => 2), array(0 => 89, 1 => 1), array(0 => 89, 1 => 2), array(0 => 89, 1 => 1), array(0 => 89, 1 => 2), array(0 => 89, 1 => 3), array(0 => 84, 1 => 1), array(0 => 84, 1 => 1), array(0 => 85, 1 => 1), array(0 => 83, 1 => 3), array(0 => 100, 1 => 1), array(0 => 100, 1 => 3), array(0 => 100, 1 => 0), array(0 => 101, 1 => 3), array(0 => 101, 1 => 3), array(0 => 101, 1 => 1), array(0 => 88, 1 => 2), array(0 => 88, 1 => 3), array(0 => 102, 1 => 2), array(0 => 102, 1 => 1), array(0 => 103, 1 => 3), array(0 => 103, 1 => 3), array(0 => 103, 1 => 1), array(0 => 103, 1 => 3), array(0 => 103, 1 => 3), array(0 => 103, 1 => 1), array(0 => 103, 1 => 1),); public static $yyReduceMap = array(0 => 0, 1 => 1, 2 => 2, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 17 => 9, 18 => 9, 43 => 9, 66 => 9, 67 => 9, 75 => 9, 76 => 9, 80 => 9, 90 => 9, 95 => 9, 96 => 9, 101 => 9, 103 => 9, 104 => 9, 108 => 9, 110 => 9, 115 => 9, 176 => 9, 181 => 9, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 16 => 13, 14 => 14, 74 => 14, 15 => 15, 91 => 15, 93 => 15, 94 => 15, 122 => 15, 19 => 19, 20 => 20, 21 => 21, 23 => 21, 25 => 21, 22 => 22, 24 => 22, 26 => 22, 27 => 27, 28 => 27, 29 => 29, 30 => 30, 31 => 31, 32 => 32, 33 => 33, 34 => 34, 35 => 35, 36 => 36, 37 => 37, 38 => 38, 40 => 38, 39 => 39, 41 => 41, 42 => 42, 44 => 44, 45 => 45, 46 => 46, 47 => 47, 49 => 47, 48 => 48, 50 => 48, 51 => 51, 52 => 52, 53 => 53, 54 => 54, 55 => 55, 56 => 56, 57 => 57, 58 => 58, 59 => 59, 60 => 60, 69 => 60, 157 => 60, 161 => 60, 165 => 60, 166 => 60, 61 => 61, 158 => 61, 164 => 61, 62 => 62, 63 => 63, 64 => 63, 65 => 65, 142 => 65, 68 => 68, 70 => 70, 71 => 71, 72 => 71, 73 => 73, 77 => 77, 78 => 78, 79 => 78, 81 => 81, 107 => 81, 82 => 82, 83 => 83, 84 => 84, 85 => 85, 86 => 86, 87 => 86, 88 => 88, 89 => 89, 92 => 92, 97 => 97, 98 => 98, 99 => 99, 100 => 100, 102 => 102, 105 => 105, 106 => 106, 109 => 109, 111 => 111, 112 => 112, 113 => 113, 114 => 114, 116 => 116, 117 => 117, 118 => 118, 119 => 119, 120 => 120, 121 => 121, 123 => 123, 178 => 123, 124 => 124, 125 => 125, 126 => 126, 127 => 127, 128 => 128, 129 => 129, 137 => 129, 130 => 130, 131 => 131, 132 => 132, 133 => 132, 135 => 132, 136 => 132, 134 => 134, 138 => 138, 139 => 139, 140 => 140, 182 => 140, 141 => 141, 143 => 143, 144 => 144, 145 => 145, 146 => 146, 147 => 147, 148 => 148, 149 => 149, 150 => 150, 151 => 151, 152 => 152, 153 => 153, 154 => 154, 155 => 155, 156 => 156, 159 => 159, 160 => 160, 162 => 162, 163 => 163, 167 => 167, 168 => 168, 169 => 169, 170 => 170, 171 => 171, 172 => 172, 173 => 173, 174 => 174, 175 => 175, 177 => 177, 179 => 179, 180 => 180, 183 => 183, 184 => 184, 185 => 185, 186 => 186, 187 => 186, 189 => 186, 188 => 188, 190 => 190, 191 => 191, 192 => 192,); #line 225 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r0() { $this->root_buffer->prepend_array($this, $this->template_prefix); $this->root_buffer->append_array($this, $this->template_postfix); $this->_retvalue = $this->root_buffer->to_smarty_php($this); } #line 235 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r1() { if ($this->yystack[ $this->yyidx + 0 ]->minor != null) { $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); } } #line 242 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r2() { if ($this->yystack[ $this->yyidx + 0 ]->minor != null) { // because of possible code injection $this->current_buffer->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); } } #line 256 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r4() { if ($this->compiler->has_code) { $this->_retvalue = $this->mergePrefixCode($this->yystack[ $this->yyidx + 0 ]->minor); } else { $this->_retvalue = null; } $this->compiler->has_variable_string = false; $this->block_nesting_level = count($this->compiler->_tag_stack); } #line 267 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r5() { $this->_retvalue = new Smarty_Internal_ParseTree_Text($this->yystack[ $this->yyidx + 0 ]->minor); } #line 271 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r6() { $code = $this->compiler->compileTag('private_php', array(array('code' => $this->yystack[ $this->yyidx + 0 ]->minor), array('type' => $this->lex->phpType)), array()); if ($this->compiler->has_code && !empty($code)) { $tmp = ''; foreach ($this->compiler->prefix_code as $code) { $tmp .= $code; } $this->compiler->prefix_code = array(); $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp . $code, true)); } else { $this->_retvalue = null; } } #line 282 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r7() { $this->compiler->tag_nocache = true; $save = $this->template->compiled->has_nocache_code; $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode("yystack[$this->yyidx + 0]->minor}';?>\n", $this->compiler, true)); $this->template->compiled->has_nocache_code = $save; } #line 289 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r8() { $this->_retvalue = $this->compiler->processText($this->yystack[ $this->yyidx + 0 ]->minor); } #line 293 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r9() { $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; } #line 297 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r10() { $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 302 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r11() { $this->strip = true; } #line 306 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r12() { $this->strip = false; } #line 311 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r13() { $this->_retvalue = ''; } #line 315 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r14() { $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; } #line 319 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r15() { $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 335 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r19() { $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; } #line 341 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r20() { $var = trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), ' $'); if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) { $this->_retvalue = $this->compiler->compileTag('private_print_expression', array('nocache'), array('value' => $this->compiler->compileVariable('\'' . $match[ 1 ] . '\''))); } else { $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $this->compiler->compileVariable('\'' . $var . '\''))); } } #line 351 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r21() { $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $this->yystack[ $this->yyidx + 0 ]->minor)); } #line 355 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r22() { $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor, array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor)); } #line 378 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r27() { $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[ $this->yyidx + 0 ]->minor), array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\''))); } #line 386 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r29() { $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor), array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 3 ]->minor, 1) . '\'')), $this->yystack[ $this->yyidx + 0 ]->minor)); } #line 390 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r30() { $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor), array('var' => $this->yystack[ $this->yyidx + - 3 ]->minor[ 'var' ])), $this->yystack[ $this->yyidx + 0 ]->minor), array('smarty_internal_index' => $this->yystack[ $this->yyidx + - 3 ]->minor[ 'smarty_internal_index' ])); } #line 395 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r31() { $tag = trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length)); if ($tag == 'strip') { $this->strip = true; $this->_retvalue = null;; } else { if (defined($tag)) { if ($this->security) { $this->security->isTrustedConstant($tag, $this->compiler); } $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $tag)); } else { if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) { $this->_retvalue = $this->compiler->compileTag($match[ 1 ], array("'nocache'")); } else { $this->_retvalue = $this->compiler->compileTag($tag, array()); } } } } #line 417 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r32() { if (defined($this->yystack[ $this->yyidx + - 1 ]->minor)) { if ($this->security) { $this->security->isTrustedConstant($this->yystack[ $this->yyidx + - 1 ]->minor, $this->compiler); } $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor, array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor)); } else { $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor); } } #line 427 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r33() { if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { if ($this->security) { $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); } $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $this->yystack[ $this->yyidx + 0 ]->minor)); } else { $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor, array()); } } #line 440 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r34() { if (defined($this->yystack[ $this->yyidx + - 2 ]->minor)) { if ($this->security) { $this->security->isTrustedConstant($this->yystack[ $this->yyidx + - 2 ]->minor, $this->compiler); } $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[ $this->yyidx + 0 ]->minor, array('value' => $this->yystack[ $this->yyidx + - 2 ]->minor, 'modifierlist' => $this->yystack[ $this->yyidx + - 1 ]->minor)); } else { $this->_retvalue = '' . $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor) . '_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[ $this->yyidx + - 1 ]->minor, 'value' => 'ob_get_clean()')) . ';?>'; } } #line 453 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r35() { $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 3 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, array('object_method' => $this->yystack[ $this->yyidx + - 1 ]->minor)); } #line 458 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r36() { $this->_retvalue = '' . $this->compiler->compileTag($this->yystack[ $this->yyidx + - 4 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, array('object_method' => $this->yystack[ $this->yyidx + - 2 ]->minor)) . '_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[ $this->yyidx + - 1 ]->minor, 'value' => 'ob_get_clean()')) . ';?>'; } #line 464 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r37() { $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length)); $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[ $this->yyidx + 0 ]->minor)); } #line 469 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r38() { $tag = trim(substr($this->yystack[ $this->yyidx + - 2 ]->minor, $this->lex->ldel_length)); $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, $this->yystack[ $this->yyidx + 0 ]->minor, array('if condition' => $this->yystack[ $this->yyidx + - 1 ]->minor)); } #line 474 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r39() { $tag = trim(substr($this->yystack[ $this->yyidx + - 1 ]->minor, $this->lex->ldel_length)); $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[ $this->yyidx + 0 ]->minor)); } #line 485 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r41() { $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array(array('start' => $this->yystack[ $this->yyidx + - 6 ]->minor), array('ifexp' => $this->yystack[ $this->yyidx + - 4 ]->minor), array('var' => $this->yystack[ $this->yyidx + - 2 ]->minor), array('step' => $this->yystack[ $this->yyidx + - 1 ]->minor))), 1); } #line 489 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r42() { $this->_retvalue = '=' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 497 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r44() { $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array(array('start' => $this->yystack[ $this->yyidx + - 3 ]->minor), array('to' => $this->yystack[ $this->yyidx + - 1 ]->minor))), 0); } #line 501 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r45() { $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array(array('start' => $this->yystack[ $this->yyidx + - 5 ]->minor), array('to' => $this->yystack[ $this->yyidx + - 3 ]->minor), array('step' => $this->yystack[ $this->yyidx + - 1 ]->minor))), 0); } #line 506 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r46() { $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[ $this->yyidx + 0 ]->minor); } #line 511 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r47() { $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array(array('from' => $this->yystack[ $this->yyidx + - 3 ]->minor), array('item' => $this->yystack[ $this->yyidx + - 1 ]->minor)))); } #line 515 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r48() { $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[ $this->yyidx + 0 ]->minor, array(array('from' => $this->yystack[ $this->yyidx + - 5 ]->minor), array('item' => $this->yystack[ $this->yyidx + - 1 ]->minor), array('key' => $this->yystack[ $this->yyidx + - 3 ]->minor)))); } #line 528 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r51() { $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array(array_merge(array($this->yystack[ $this->yyidx + - 1 ]->minor), $this->yystack[ $this->yyidx + 0 ]->minor)))); } #line 532 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r52() { $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array_merge(array(array_merge(array($this->yystack[ $this->yyidx + - 2 ]->minor), $this->yystack[ $this->yyidx + - 1 ]->minor)), $this->yystack[ $this->yyidx + 0 ]->minor))); } #line 537 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r53() { $j = strrpos($this->yystack[ $this->yyidx + 0 ]->minor, '.'); if ($this->yystack[ $this->yyidx + 0 ]->minor[ $j + 1 ] == 'c') { // {$smarty.block.child} $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler); } else { // {$smarty.block.parent} $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler); } } #line 550 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r54() { $tag = trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), ' /'); if ($tag == 'strip') { $this->strip = false; $this->_retvalue = null; } else { $this->_retvalue = $this->compiler->compileTag($tag . 'close', array()); } } #line 559 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r55() { $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + 0 ]->minor . 'close', array()); } #line 563 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r56() { $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 1 ]->minor . 'close', array(), array('modifier_list' => $this->yystack[ $this->yyidx + 0 ]->minor)); } #line 568 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r57() { $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 2 ]->minor . 'close', array(), array('object_method' => $this->yystack[ $this->yyidx + 0 ]->minor)); } #line 572 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r58() { $this->_retvalue = $this->compiler->compileTag($this->yystack[ $this->yyidx + - 3 ]->minor . 'close', array(), array('object_method' => $this->yystack[ $this->yyidx + - 1 ]->minor, 'modifier_list' => $this->yystack[ $this->yyidx + 0 ]->minor)); } #line 580 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r59() { $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; $this->_retvalue[] = $this->yystack[ $this->yyidx + 0 ]->minor; } #line 586 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r60() { $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); } #line 591 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r61() { $this->_retvalue = array(); } #line 596 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r62() { if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { if ($this->security) { $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); } $this->_retvalue = array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor); } else { $this->_retvalue = array($this->yystack[ $this->yyidx + - 2 ]->minor => '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\''); } } #line 607 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r63() { $this->_retvalue = array(trim($this->yystack[ $this->yyidx + - 1 ]->minor, " =\n\r\t") => $this->yystack[ $this->yyidx + 0 ]->minor); } #line 615 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r65() { $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\''; } #line 627 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r68() { $this->_retvalue = array($this->yystack[ $this->yyidx + - 2 ]->minor => $this->yystack[ $this->yyidx + 0 ]->minor); } #line 640 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r70() { $this->yystack[ $this->yyidx + - 2 ]->minor[] = $this->yystack[ $this->yyidx + 0 ]->minor; $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor; } #line 645 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r71() { $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'', 'value' => $this->yystack[ $this->yyidx + 0 ]->minor); } #line 652 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r73() { $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 2 ]->minor, 'value' => $this->yystack[ $this->yyidx + 0 ]->minor); } #line 676 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r77() { $this->_retvalue = '$_smarty_tpl->getStreamVariable(\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '://' . $this->yystack[ $this->yyidx + 0 ]->minor . '\')'; } #line 681 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r78() { $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . trim($this->yystack[ $this->yyidx + - 1 ]->minor) . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 695 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r81() { $this->_retvalue = $this->compiler->compileTag('private_modifier', array(), array('value' => $this->yystack[ $this->yyidx + - 1 ]->minor, 'modifierlist' => $this->yystack[ $this->yyidx + 0 ]->minor)); } #line 701 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r82() { $this->_retvalue = (isset($this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ]) ? $this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ] : '') . $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor[ 'op' ] . $this->yystack[ $this->yyidx + 0 ]->minor . (isset($this->yystack[ $this->yyidx + - 1 ]->minor[ 'pre' ]) ? ')' : ''); } #line 704 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r83() { $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; } #line 708 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r84() { $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . $this->yystack[ $this->yyidx + 0 ]->minor . ')'; } #line 712 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r85() { $this->_retvalue = 'in_array(' . $this->yystack[ $this->yyidx + - 2 ]->minor . ',(array)' . $this->yystack[ $this->yyidx + 0 ]->minor . ')'; } #line 716 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r86() { $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 728 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r88() { $this->_retvalue = $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' . $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 2 ]->minor, 1) . '\'') . ' : ' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 732 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r89() { $this->_retvalue = $this->yystack[ $this->yyidx + - 5 ]->minor . ' ? ' . $this->yystack[ $this->yyidx + - 2 ]->minor . ' : ' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 747 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r92() { $this->_retvalue = '!' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 768 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r97() { $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 772 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r98() { $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . '.'; } #line 776 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r99() { $this->_retvalue = '.' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 781 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r100() { if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { if ($this->security) { $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); } $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; } else { $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + 0 ]->minor . '\''; } } #line 798 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r102() { $this->_retvalue = "(" . $this->yystack[ $this->yyidx + - 1 ]->minor . ")"; } #line 813 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r105() { self::$prefix_number ++; if ($this->yystack[ $this->yyidx + - 2 ]->minor[ 'var' ] == '\'smarty\'') { $this->compiler->prefix_code[] = 'compiler->compileTag('private_special_variable', array(), $this->yystack[ $this->yyidx + - 2 ]->minor[ 'smarty_internal_index' ]) . ';?>'; } else { $this->compiler->prefix_code[] = 'compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor[ 'var' ]) . $this->yystack[ $this->yyidx + - 2 ]->minor[ 'smarty_internal_index' ] . ';?>'; } $this->_retvalue = '$_tmp' . self::$prefix_number . '::' . $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]; } #line 824 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r106() { self::$prefix_number ++; $tmp = $this->compiler->appendCode('', $this->yystack[ $this->yyidx + 0 ]->minor); $this->compiler->prefix_code[] = $this->compiler->appendCode($tmp, ''); $this->_retvalue = '$_tmp' . self::$prefix_number; } #line 841 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r109() { if (!in_array(strtolower($this->yystack[ $this->yyidx + - 2 ]->minor), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess($this->yystack[ $this->yyidx + - 2 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler)) ) { if (isset($this->smarty->registered_classes[ $this->yystack[ $this->yyidx + - 2 ]->minor ])) { $this->_retvalue = $this->smarty->registered_classes[ $this->yystack[ $this->yyidx + - 2 ]->minor ] . '::' . $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]; } else { $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . '::' . $this->yystack[ $this->yyidx + 0 ]->minor[ 0 ] . $this->yystack[ $this->yyidx + 0 ]->minor[ 1 ]; } } else { $this->compiler->trigger_template_error("static class '" . $this->yystack[ $this->yyidx + - 2 ]->minor . "' is undefined or not allowed by security setting"); } } #line 860 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r111() { $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; } #line 871 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r112() { $this->_retvalue = $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''); } #line 874 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r113() { if ($this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ] == '\'smarty\'') { $smarty_var = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ]); $this->_retvalue = $smarty_var; } else { // used for array reset,next,prev,end,current $this->last_variable = $this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ]; $this->last_index = $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ]; $this->_retvalue = $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor[ 'var' ]) . $this->yystack[ $this->yyidx + 0 ]->minor[ 'smarty_internal_index' ]; } } #line 887 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r114() { $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[ $this->yyidx + - 2 ]->minor . ']->' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 897 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r116() { $this->_retvalue = $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 1 ]->minor . "'"); } #line 901 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r117() { $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable("'" . $this->yystack[ $this->yyidx + - 2 ]->minor . "'") . ') ? $tmp' . $this->yystack[ $this->yyidx + 0 ]->minor . ' :null)'; } #line 905 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r118() { $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 1 ]->minor); } #line 909 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r119() { $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[ $this->yyidx + - 2 ]->minor) . ') ? $tmp' . $this->yystack[ $this->yyidx + 0 ]->minor . ' : null)'; } #line 913 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r120() { $this->_retvalue = array('var' => '\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'', 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor); } #line 916 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r121() { $this->_retvalue = array('var' => $this->yystack[ $this->yyidx + - 1 ]->minor, 'smarty_internal_index' => $this->yystack[ $this->yyidx + 0 ]->minor); } #line 929 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r123() { return; } #line 935 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r124() { $this->_retvalue = '[' . $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\'') . ']'; } #line 938 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r125() { $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + 0 ]->minor) . ']'; } #line 942 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r126() { $this->_retvalue = '[' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 2 ]->minor) . '->' . $this->yystack[ $this->yyidx + 0 ]->minor . ']'; } #line 946 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r127() { if (defined($this->yystack[ $this->yyidx + 0 ]->minor)) { if ($this->security) { $this->security->isTrustedConstant($this->yystack[ $this->yyidx + 0 ]->minor, $this->compiler); } $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']'; } else { $this->_retvalue = "['" . $this->yystack[ $this->yyidx + 0 ]->minor . "']"; } } #line 957 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r128() { $this->_retvalue = '[' . $this->yystack[ $this->yyidx + 0 ]->minor . ']'; } #line 962 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r129() { $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']'; } #line 967 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r130() { $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[ $this->yyidx + - 1 ]->minor . '\'][\'index\']') . ']'; } #line 971 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r131() { $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[ $this->yyidx + - 3 ]->minor . '\'][\'' . $this->yystack[ $this->yyidx + - 1 ]->minor . '\']') . ']'; } #line 974 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r132() { $this->_retvalue = '[' . $this->yystack[ $this->yyidx + - 1 ]->minor . ']'; } #line 980 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r134() { $this->_retvalue = '[' . $this->compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 1 ]->minor, 1) . '\'') . ']';; } #line 996 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r138() { $this->_retvalue = '[]'; } #line 1006 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r139() { $this->_retvalue = '\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\''; } #line 1010 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r140() { $this->_retvalue = "''"; } #line 1015 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r141() { $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . '.' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 1023 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r143() { $var = trim(substr($this->yystack[ $this->yyidx + 0 ]->minor, $this->lex->ldel_length, - $this->lex->rdel_length), ' $'); $this->_retvalue = $this->compiler->compileVariable('\'' . $var . '\''); } #line 1029 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r144() { $this->_retvalue = '(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; } #line 1036 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r145() { if ($this->yystack[ $this->yyidx + - 1 ]->minor[ 'var' ] == '\'smarty\'') { $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[ $this->yyidx + - 1 ]->minor[ 'smarty_internal_index' ]) . $this->yystack[ $this->yyidx + 0 ]->minor; } else { $this->_retvalue = $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 1 ]->minor[ 'var' ]) . $this->yystack[ $this->yyidx + - 1 ]->minor[ 'smarty_internal_index' ] . $this->yystack[ $this->yyidx + 0 ]->minor; } } #line 1045 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r146() { $this->_retvalue = $this->yystack[ $this->yyidx + 0 ]->minor; } #line 1050 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r147() { $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 1055 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r148() { if ($this->security && substr($this->yystack[ $this->yyidx + - 1 ]->minor, 0, 1) == '_') { $this->compiler->trigger_template_error(self::Err1); } $this->_retvalue = '->' . $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 1062 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r149() { if ($this->security) { $this->compiler->trigger_template_error(self::Err2); } $this->_retvalue = '->{' . $this->compiler->compileVariable($this->yystack[ $this->yyidx + - 1 ]->minor) . $this->yystack[ $this->yyidx + 0 ]->minor . '}'; } #line 1069 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r150() { if ($this->security) { $this->compiler->trigger_template_error(self::Err2); } $this->_retvalue = '->{' . $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor . '}'; } #line 1076 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r151() { if ($this->security) { $this->compiler->trigger_template_error(self::Err2); } $this->_retvalue = '->{\'' . $this->yystack[ $this->yyidx + - 4 ]->minor . '\'.' . $this->yystack[ $this->yyidx + - 2 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor . '}'; } #line 1084 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r152() { $this->_retvalue = '->' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 1092 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r153() { if (!$this->security || $this->security->isTrustedPhpFunction($this->yystack[ $this->yyidx + - 3 ]->minor, $this->compiler) ) { if (strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'isset') === 0 || strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'empty') === 0 || strcasecmp($this->yystack[ $this->yyidx + - 3 ]->minor, 'array') === 0 || is_callable($this->yystack[ $this->yyidx + - 3 ]->minor) ) { $func_name = strtolower($this->yystack[ $this->yyidx + - 3 ]->minor); if ($func_name == 'isset') { if (count($this->yystack[ $this->yyidx + - 1 ]->minor) == 0) { $this->compiler->trigger_template_error('Illegal number of paramer in "isset()"'); } $par = implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor); if (strncasecmp($par, '$_smarty_tpl->smarty->ext->_config->_getConfigVariable', strlen('$_smarty_tpl->smarty->ext->_config->_getConfigVariable')) === 0 ) { self::$prefix_number ++; $this->compiler->prefix_code[] = ''; $isset_par = '$_tmp' . self::$prefix_number; } else { $isset_par = str_replace("')->value", "',null,true,false)->value", $par); } $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" . $isset_par . ")"; } elseif (in_array($func_name, array('empty', 'reset', 'current', 'end', 'prev', 'next'))) { if (count($this->yystack[ $this->yyidx + - 1 ]->minor) != 1) { $this->compiler->trigger_template_error('Illegal number of paramer in "empty()"'); } if ($func_name == 'empty') { $this->_retvalue = $func_name . '(' . str_replace("')->value", "',null,true,false)->value", $this->yystack[ $this->yyidx + - 1 ]->minor[ 0 ]) . ')'; } else { $this->_retvalue = $func_name . '(' . $this->yystack[ $this->yyidx + - 1 ]->minor[ 0 ] . ')'; } } else { $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" . implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ")"; } } else { $this->compiler->trigger_template_error("unknown function \"" . $this->yystack[ $this->yyidx + - 3 ]->minor . "\""); } } } #line 1131 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r154() { if ($this->security && substr($this->yystack[ $this->yyidx + - 3 ]->minor, 0, 1) == '_') { $this->compiler->trigger_template_error(self::Err1); } $this->_retvalue = $this->yystack[ $this->yyidx + - 3 ]->minor . "(" . implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ")"; } #line 1138 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r155() { if ($this->security) { $this->compiler->trigger_template_error(self::Err2); } self::$prefix_number ++; $this->compiler->prefix_code[] = 'compiler->compileVariable('\'' . substr($this->yystack[ $this->yyidx + - 3 ]->minor, 1) . '\'') . ';?>'; $this->_retvalue = '$_tmp' . self::$prefix_number . '(' . implode(',', $this->yystack[ $this->yyidx + - 1 ]->minor) . ')'; } #line 1149 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r156() { $this->_retvalue = array_merge($this->yystack[ $this->yyidx + - 2 ]->minor, array($this->yystack[ $this->yyidx + 0 ]->minor)); } #line 1166 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r159() { $this->_retvalue = array_merge($this->yystack[ $this->yyidx + - 2 ]->minor, array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor))); } #line 1170 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r160() { $this->_retvalue = array(array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor)); } #line 1178 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r162() { $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor); } #line 1186 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r163() { $this->_retvalue = array_merge($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor); } #line 1205 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r167() { $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, '', 'method'); } #line 1210 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r168() { $this->_retvalue = array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'method'); } #line 1215 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r169() { $this->_retvalue = array($this->yystack[ $this->yyidx + 0 ]->minor, ''); } #line 1220 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r170() { $this->_retvalue = array($this->yystack[ $this->yyidx + - 1 ]->minor, $this->yystack[ $this->yyidx + 0 ]->minor, 'property'); } #line 1225 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r171() { $this->_retvalue = array($this->yystack[ $this->yyidx + - 2 ]->minor, $this->yystack[ $this->yyidx + - 1 ]->minor . $this->yystack[ $this->yyidx + 0 ]->minor, 'property'); } #line 1231 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r172() { $this->_retvalue[ 'op' ] = ' ' . trim($this->yystack[ $this->yyidx + 0 ]->minor) . ' '; } #line 1235 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r173() { static $lops = array('eq' => array('op' => ' == ', 'pre' => null), 'ne' => array('op' => ' != ', 'pre' => null), 'neq' => array('op' => ' != ', 'pre' => null), 'gt' => array('op' => ' > ', 'pre' => null), 'ge' => array('op' => ' >= ', 'pre' => null), 'gte' => array('op' => ' >= ', 'pre' => null), 'lt' => array('op' => ' < ', 'pre' => null), 'le' => array('op' => ' <= ', 'pre' => null), 'lte' => array('op' => ' <= ', 'pre' => null), 'mod' => array('op' => ' % ', 'pre' => null), 'and' => array('op' => ' && ', 'pre' => null), 'or' => array('op' => ' || ', 'pre' => null), 'xor' => array('op' => ' xor ', 'pre' => null), 'isdivby' => array('op' => ' % ', 'pre' => '!('), 'isnotdivby' => array('op' => ' % ', 'pre' => '('), 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '), 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '), 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '), 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),); $op = strtolower(preg_replace('/\s*/', '', $this->yystack[ $this->yyidx + 0 ]->minor)); $this->_retvalue = $lops[ $op ]; } #line 1261 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r174() { static $scond = array('iseven' => '!(1 & ', 'isnoteven' => '(1 & ', 'isodd' => '(1 & ', 'isnotodd' => '!(1 & ',); $op = strtolower(str_replace(' ', '', $this->yystack[ $this->yyidx + 0 ]->minor)); $this->_retvalue = $scond[ $op ]; } #line 1275 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r175() { $this->_retvalue = 'array(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'; } #line 1283 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r177() { $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . ',' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 1291 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r179() { $this->_retvalue = $this->yystack[ $this->yyidx + - 2 ]->minor . '=>' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 1295 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r180() { $this->_retvalue = '\'' . $this->yystack[ $this->yyidx + - 2 ]->minor . '\'=>' . $this->yystack[ $this->yyidx + 0 ]->minor; } #line 1311 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r183() { $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor->to_smarty_php($this); } #line 1316 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r184() { $this->yystack[ $this->yyidx + - 1 ]->minor->append_subtree($this, $this->yystack[ $this->yyidx + 0 ]->minor); $this->_retvalue = $this->yystack[ $this->yyidx + - 1 ]->minor; } #line 1321 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r185() { $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[ $this->yyidx + 0 ]->minor); } #line 1325 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r186() { $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)' . $this->yystack[ $this->yyidx + - 1 ]->minor); } #line 1333 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r188() { $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\'' . substr($this->yystack[ $this->yyidx + 0 ]->minor, 1) . '\']->value'); } #line 1341 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r190() { $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)(' . $this->yystack[ $this->yyidx + - 1 ]->minor . ')'); } #line 1345 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r191() { $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[ $this->yyidx + 0 ]->minor); } #line 1349 "../smarty/lexer/smarty_internal_templateparser.y" function yy_r192() { $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[ $this->yyidx + 0 ]->minor); } private $_retvalue; public function yy_reduce($yyruleno) { if ($this->yyTraceFILE && $yyruleno >= 0 && $yyruleno < count(self::$yyRuleName)) { fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n", $this->yyTracePrompt, $yyruleno, self::$yyRuleName[ $yyruleno ]); } $this->_retvalue = $yy_lefthand_side = null; if (isset(self::$yyReduceMap[ $yyruleno ])) { // call the action $this->_retvalue = null; $this->{'yy_r' . self::$yyReduceMap[ $yyruleno ]}(); $yy_lefthand_side = $this->_retvalue; } $yygoto = self::$yyRuleInfo[ $yyruleno ][ 0 ]; $yysize = self::$yyRuleInfo[ $yyruleno ][ 1 ]; $this->yyidx -= $yysize; for ($i = $yysize; $i; $i --) { // pop all of the right-hand side parameters array_pop($this->yystack); } $yyact = $this->yy_find_reduce_action($this->yystack[ $this->yyidx ]->stateno, $yygoto); if ($yyact < self::YYNSTATE) { if (!$this->yyTraceFILE && $yysize) { $this->yyidx ++; $x = new TP_yyStackEntry; $x->stateno = $yyact; $x->major = $yygoto; $x->minor = $yy_lefthand_side; $this->yystack[ $this->yyidx ] = $x; } else { $this->yy_shift($yyact, $yygoto, $yy_lefthand_side); } } elseif ($yyact == self::YYNSTATE + self::YYNRULE + 1) { $this->yy_accept(); } } public function yy_parse_failed() { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt); } while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } } public function yy_syntax_error($yymajor, $TOKEN) { #line 207 "../smarty/lexer/smarty_internal_templateparser.y" $this->internalError = true; $this->yymajor = $yymajor; $this->compiler->trigger_template_error(); } public function yy_accept() { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt); } while ($this->yyidx >= 0) { $this->yy_pop_parser_stack(); } #line 200 "../smarty/lexer/smarty_internal_templateparser.y" $this->successful = !$this->internalError; $this->internalError = false; $this->retvalue = $this->_retvalue; } public function doParse($yymajor, $yytokenvalue) { $yyerrorhit = 0; /* True if yymajor has invoked an error */ if ($this->yyidx === null || $this->yyidx < 0) { $this->yyidx = 0; $this->yyerrcnt = - 1; $x = new TP_yyStackEntry; $x->stateno = 0; $x->major = 0; $this->yystack = array(); $this->yystack[] = $x; } $yyendofinput = ($yymajor == 0); if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sInput %s\n", $this->yyTracePrompt, $this->yyTokenName[ $yymajor ]); } do { $yyact = $this->yy_find_shift_action($yymajor); if ($yymajor < self::YYERRORSYMBOL && !$this->yy_is_expected_token($yymajor)) { // force a syntax error $yyact = self::YY_ERROR_ACTION; } if ($yyact < self::YYNSTATE) { $this->yy_shift($yyact, $yymajor, $yytokenvalue); $this->yyerrcnt --; if ($yyendofinput && $this->yyidx >= 0) { $yymajor = 0; } else { $yymajor = self::YYNOCODE; } } elseif ($yyact < self::YYNSTATE + self::YYNRULE) { $this->yy_reduce($yyact - self::YYNSTATE); } elseif ($yyact == self::YY_ERROR_ACTION) { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sSyntax Error!\n", $this->yyTracePrompt); } if (self::YYERRORSYMBOL) { if ($this->yyerrcnt < 0) { $this->yy_syntax_error($yymajor, $yytokenvalue); } $yymx = $this->yystack[ $this->yyidx ]->major; if ($yymx == self::YYERRORSYMBOL || $yyerrorhit) { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sDiscard input token %s\n", $this->yyTracePrompt, $this->yyTokenName[ $yymajor ]); } $this->yy_destructor($yymajor, $yytokenvalue); $yymajor = self::YYNOCODE; } else { while ($this->yyidx >= 0 && $yymx != self::YYERRORSYMBOL && ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE) { $this->yy_pop_parser_stack(); } if ($this->yyidx < 0 || $yymajor == 0) { $this->yy_destructor($yymajor, $yytokenvalue); $this->yy_parse_failed(); $yymajor = self::YYNOCODE; } elseif ($yymx != self::YYERRORSYMBOL) { $u2 = 0; $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2); } } $this->yyerrcnt = 3; $yyerrorhit = 1; } else { if ($this->yyerrcnt <= 0) { $this->yy_syntax_error($yymajor, $yytokenvalue); } $this->yyerrcnt = 3; $this->yy_destructor($yymajor, $yytokenvalue); if ($yyendofinput) { $this->yy_parse_failed(); } $yymajor = self::YYNOCODE; } } else { $this->yy_accept(); $yymajor = self::YYNOCODE; } } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_php.php0000664000175000017500000002315112717671461027726 0ustar daviddavidgetAttributes($compiler, $args); $compiler->has_code = false; if ($_attr['type'] == 'xml') { $compiler->tag_nocache = true; $save = $compiler->template->compiled->has_nocache_code; $output = addcslashes($_attr['code'], "'\\"); $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("", $compiler, true))); $compiler->template->compiled->has_nocache_code = $save; return ''; } if ($_attr['type'] != 'tag') { if ($compiler->php_handling == Smarty::PHP_REMOVE) { return ''; } elseif ($compiler->php_handling == Smarty::PHP_QUOTE) { $output = preg_replace_callback('#(<\?(?:php|=)?)|(<%)|()|(\?>)|(%>)|(<\/script>)#i', array($this, 'quote'), $_attr['code']); $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Text($output)); return ''; } elseif ($compiler->php_handling == Smarty::PHP_PASSTHRU || $_attr['type'] == 'unmatched') { $compiler->tag_nocache = true; $save = $compiler->template->compiled->has_nocache_code; $output = addcslashes($_attr['code'], "'\\"); $compiler->parser->current_buffer->append_subtree($compiler->parser, new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->processNocacheCode("", $compiler, true))); $compiler->template->compiled->has_nocache_code = $save; return ''; } elseif ($compiler->php_handling == Smarty::PHP_ALLOW) { if (!($compiler->smarty instanceof SmartyBC)) { $compiler->trigger_template_error('$smarty->php_handling PHP_ALLOW not allowed. Use SmartyBC to enable it', null, true); } $compiler->has_code = true; return $_attr['code']; } else { $compiler->trigger_template_error('Illegal $smarty->php_handling value', null, true); } } else { $compiler->has_code = true; if (!($compiler->smarty instanceof SmartyBC)) { $compiler->trigger_template_error('{php}{/php} tags not allowed. Use SmartyBC to enable them', null, true); } $ldel = preg_quote($compiler->smarty->left_delimiter, '#'); $rdel = preg_quote($compiler->smarty->right_delimiter, '#'); preg_match("#^({$ldel}php\\s*)((.)*?)({$rdel})#", $_attr['code'], $match); if (!empty($match[2])) { if ('nocache' == trim($match[2])) { $compiler->tag_nocache = true; } else { $compiler->trigger_template_error("illegal value of option flag \"{$match[2]}\"", null, true); } } return preg_replace(array("#^{$ldel}\\s*php\\s*(.)*?{$rdel}#", "#{$ldel}\\s*/\\s*php\\s*{$rdel}$#"), array(''), $_attr['code']); } } /** * Lexer code for PHP tags * * This code has been moved from lexer here fo easier debugging and maintenance * * @param $lex */ public function parsePhp($lex) { $lex->token = Smarty_Internal_Templateparser::TP_PHP; $close = 0; $lex->taglineno = $lex->line; $closeTag = '?>'; if (strpos($lex->value, 'is_xml = true; $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE; return; } elseif (strpos($lex->value, 'phpType = 'php'; } elseif (strpos($lex->value, '<%') === 0) { $lex->phpType = 'asp'; $closeTag = '%>'; } elseif (strpos($lex->value, '%>') === 0) { $lex->phpType = 'unmatched'; } elseif (strpos($lex->value, '?>') === 0) { if ($lex->is_xml) { $lex->is_xml = false; $lex->token = Smarty_Internal_Templateparser::TP_NOCACHE; return; } $lex->phpType = 'unmatched'; } elseif (strpos($lex->value, 'phpType = 'script'; $closeTag = ''; } elseif (strpos($lex->value, $lex->smarty->left_delimiter) === 0) { if ($lex->isAutoLiteral()) { $lex->token = Smarty_Internal_Templateparser::TP_TEXT; return; } $closeTag = "{$lex->smarty->left_delimiter}/php{$lex->smarty->right_delimiter}"; if ($lex->value == $closeTag) { $lex->compiler->trigger_template_error("unexpected closing tag '{$closeTag}'"); } $lex->phpType = 'tag'; } if ($lex->phpType == 'unmatched') { return; } if (($lex->phpType == 'php' || $lex->phpType == 'asp') && ($lex->compiler->php_handling == Smarty::PHP_PASSTHRU || $lex->compiler->php_handling == Smarty::PHP_QUOTE) ) { return; } $start = $lex->counter + strlen($lex->value); $body = true; if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) { $close = $match[0][1]; } else { $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'"); } while ($body) { if (preg_match('~([/][*])|([/][/][^\n]*)|(\'[^\'\\\\]*(?:\\.[^\'\\\\]*)*\')|("[^"\\\\]*(?:\\.[^"\\\\]*)*")~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start)) { $value = $match[0][0]; $from = $pos = $match[0][1]; if ($pos > $close) { $body = false; } else { $start = $pos + strlen($value); $phpCommentStart = $value == '/*'; if ($phpCommentStart) { $phpCommentEnd = preg_match('~([*][/])~', $lex->data, $match, PREG_OFFSET_CAPTURE, $start); if ($phpCommentEnd) { $pos2 = $match[0][1]; $start = $pos2 + strlen($match[0][0]); } } while ($close > $pos && $close < $start) { if (preg_match('~' . preg_quote($closeTag, '~') . '~i', $lex->data, $match, PREG_OFFSET_CAPTURE, $from)) { $close = $match[0][1]; $from = $close + strlen($match[0][0]); } else { $lex->compiler->trigger_template_error("missing closing tag '{$closeTag}'"); } } if ($phpCommentStart && (!$phpCommentEnd || $pos2 > $close)) { $lex->taglineno = $lex->line + substr_count(substr($lex->data, $lex->counter, $start), "\n"); $lex->compiler->trigger_template_error("missing PHP comment closing tag '*/'"); } } } else { $body = false; } } $lex->value = substr($lex->data, $lex->counter, $close + strlen($closeTag) - $lex->counter); } /* * Call back function for $php_handling = PHP_QUOTE * */ /** * @param $match * * @return string */ private function quote($match) { return htmlspecialchars($match[0], ENT_QUOTES); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_assign.php0000664000175000017500000001051112717671461026665 0ustar daviddavid true, 'parent' => true, 'root' => true, 'global' => true, 'smarty' => true, 'tpl_root' => true); /** * Compiles code for the {assign} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param array $parameter array with compilation parameter * * @return string compiled code * @throws \SmartyCompilerException */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter) { // the following must be assigned at runtime because it will be overwritten in Smarty_Internal_Compile_Append $this->required_attributes = array('var', 'value'); $this->shorttag_order = array('var', 'value'); $this->optional_attributes = array('scope', 'bubble_up'); $_nocache = 'null'; // check and get attributes $_attr = $this->getAttributes($compiler, $args); // nocache ? if ($compiler->tag_nocache || $compiler->nocache) { $_nocache = 'true'; // create nocache var to make it know for further compiling if (isset($compiler->template->tpl_vars[trim($_attr['var'], "'")])) { $compiler->template->tpl_vars[trim($_attr['var'], "'")]->nocache = true; } else { $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_Variable(null, true); } } // scope setup $_scope = Smarty::SCOPE_LOCAL; if (isset($_attr['scope'])) { $_attr['scope'] = trim($_attr['scope'], "'\""); if (!isset($this->valid_scopes[$_attr['scope']])) { $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true); } if ($_attr['scope'] != 'local') { if ($_attr['scope'] == 'parent') { $_scope = Smarty::SCOPE_PARENT; } elseif ($_attr['scope'] == 'root') { $_scope = Smarty::SCOPE_ROOT; } elseif ($_attr['scope'] == 'global') { $_scope = Smarty::SCOPE_GLOBAL; } elseif ($_attr['scope'] == 'smarty') { $_scope = Smarty::SCOPE_SMARTY; } elseif ($_attr['scope'] == 'tpl_root') { $_scope = Smarty::SCOPE_TPL_ROOT; } $_scope += (isset($_attr['bubble_up']) && $_attr['bubble_up'] == 'false') ? 0 : Smarty::SCOPE_BUBBLE_UP; } } // compiled output if (isset($parameter['smarty_internal_index'])) { $output = "smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, $_attr[var], $_nocache);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];"; } else { // implement Smarty2's behaviour of variables assigned by reference if ($compiler->template->smarty instanceof SmartyBC) { $output = "tpl_vars[$_attr[var]])) {\$_smarty_tpl->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];"; $output .= "\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value = $_attr[value]; \$_smarty_tpl->tpl_vars[$_attr[var]]->nocache = $_nocache;"; $output .= "\n} else \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache);"; } else { $output = "tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache);"; } } $output .= "\n\$_smarty_tpl->ext->_updateScope->updateScope(\$_smarty_tpl, $_attr[var], $_scope);"; $output .= '?>'; return $output; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_inheritance.php0000664000175000017500000001640712717671461027737 0ustar daviddavidblockNesting || $this->state == 3)) { $tpl->ext->_inheritance = new Smarty_Internal_Runtime_Inheritance(); $tpl->ext->_inheritance->init($tpl, $initChild, $blockNames); return; } // start of child sub template(s) if ($initChild) { $this->state = 1; if (!$this->inheritanceLevel) { //grab any output of child templates ob_start(); } $this->inheritanceLevel ++; } // in parent state {include} will not increment template index if ($this->state != 3) { $this->tplIndex ++; } // if state was waiting for parent change state to parent if ($this->state == 2) { $this->state = 3; } } /** * End of child template(s) * - if outer level is reached flush output buffer and switch to wait for parent template state * * @param \Smarty_Internal_Template $tpl template object of caller */ public function endChild(Smarty_Internal_Template $tpl) { $this->inheritanceLevel --; if (!$this->inheritanceLevel) { ob_end_clean(); $this->state = 2; } } /** * Process inheritance {block} tag * * $type 0 = {block}: * - search in inheritance template hierarchy for child blocks * if found call it, otherwise call current block * - ignored for outer level blocks in child templates * * $type 1 = {block}: * - nested {block} * - search in inheritance template hierarchy for child blocks * if found call it, otherwise call current block * * $type 2 = {$smarty.block.child}: * - search in inheritance template hierarchy for child blocks * if found call it, otherwise ignore * * $type 3 = {block append} {block prepend}: * - call parent block * * $type 4 = {$smarty.block.parent}: * - call parent block * * @param \Smarty_Internal_Template $tpl template object of caller * @param int $type call type see above * @param string $name block name * @param array $block block parameter * @param array $callStack call stack with block parameters * * @throws \SmartyException */ public function processBlock(Smarty_Internal_Template $tpl, $type = 0, $name, $block, $callStack = array()) { if (!isset($this->blockParameter[ $name ])) { $this->blockParameter[ $name ] = array(); } if ($this->state == 1) { $block[ 2 ] = count($this->blockParameter[ $name ]); $block[ 3 ] = $this->tplIndex; $this->blockParameter[ $name ][] = $block; return; } if ($type == 3) { if (!empty($callStack)) { $block = array_shift($callStack); } else { return; } } elseif ($type == 4) { if (!empty($callStack)) { array_shift($callStack); if (empty($callStack)) { throw new SmartyException("inheritance: tag {\$smarty.block.parent} used in parent template block '{$name}'"); } $block = array_shift($callStack); } else { return; } } else { $index = 0; $blockParameter = &$this->blockParameter[ $name ]; if ($type == 0) { $index = $block[ 2 ] = count($blockParameter); $block[ 3 ] = $this->tplIndex; $callStack = array(&$block); } elseif ($type == 1) { $block[ 3 ] = $callStack[ 0 ][ 3 ]; for ($i = 0; $i < count($blockParameter); $i ++) { if ($blockParameter[ $i ][ 3 ] <= $block[ 3 ]) { $index = $blockParameter[ $i ][ 2 ]; } } $block[ 2 ] = $index; $callStack = array(&$block); } elseif ($type == 2) { $index = $callStack[ 0 ][ 2 ]; if ($index == 0) { return; } $callStack = $block = array(1 => false); } $index --; // find lowest level child block while ($index >= 0 && ($type || !$block[ 1 ])) { $block = &$blockParameter[ $index ]; array_unshift($callStack, $block); if ($block[ 1 ]) { break; } $index --; } if (isset($block[ 'hide' ]) && $index <= 0) { return; } } $this->blockNesting ++; // {block append} ? if (isset($block[ 'append' ])) { $appendStack = $callStack; if ($type == 0) { array_shift($appendStack); } $this->processBlock($tpl, 3, $name, null, $appendStack); } // call block of current stack level if (isset($block[6])) { $block[6]($tpl, $callStack); } else { $block[0]($tpl, $callStack); } // {block prepend} ? if (isset($block[ 'prepend' ])) { $prependStack = $callStack; if ($type == 0) { array_shift($prependStack); } $this->processBlock($tpl, 3, $name, null, $prependStack); } $this->blockNesting --; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php0000664000175000017500000000564212717671461027437 0ustar daviddavid_file_perms : 0644; $_dir_perms = property_exists($smarty, '_dir_perms') ? (isset($smarty->_dir_perms) ? $smarty->_dir_perms : 0777) : 0771; if ($_file_perms !== null) { $old_umask = umask(0); } $_dirpath = dirname($_filepath); // if subdirs, create dir structure if ($_dirpath !== '.' && !file_exists($_dirpath)) { mkdir($_dirpath, $_dir_perms, true); } // write to tmp file, then move to overt file lock race condition $_tmp_file = $_dirpath . DS . str_replace(array('.', ','), '_', uniqid('wrt', true)); if (!file_put_contents($_tmp_file, $_contents)) { error_reporting($_error_reporting); throw new SmartyException("unable to write file {$_tmp_file}"); } /* * Windows' rename() fails if the destination exists, * Linux' rename() properly handles the overwrite. * Simply unlink()ing a file might cause other processes * currently reading that file to fail, but linux' rename() * seems to be smart enough to handle that for us. */ if (Smarty::$_IS_WINDOWS) { // remove original file if (is_file($_filepath)) { @unlink($_filepath); } // rename tmp file $success = @rename($_tmp_file, $_filepath); } else { // rename tmp file $success = @rename($_tmp_file, $_filepath); if (!$success) { // remove original file if (is_file($_filepath)) { @unlink($_filepath); } // rename tmp file $success = @rename($_tmp_file, $_filepath); } } if (!$success) { error_reporting($_error_reporting); throw new SmartyException("unable to write file {$_filepath}"); } if ($_file_perms !== null) { // set file permissions chmod($_filepath, $_file_perms); umask($old_umask); } error_reporting($_error_reporting); return true; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_template_source.php0000664000175000017500000001720612717671461025200 0ustar daviddavidhandler = $handler; // Note: prone to circular references $this->smarty = $smarty; $this->resource = $resource; $this->type = $type; $this->name = $name; } /** * initialize Source Object for given resource * Either [$_template] or [$smarty, $template_resource] must be specified * * @param Smarty_Internal_Template $_template template object * @param Smarty $smarty smarty object * @param string $template_resource resource identifier * * @return Smarty_Template_Source Source Object * @throws SmartyException */ public static function load(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) { if ($_template) { $smarty = $_template->smarty; $template_resource = $_template->template_resource; } if (empty($template_resource)) { throw new SmartyException('Missing template name'); } // parse resource_name, load resource handler, identify unique resource name if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]([\s\S]*)$/', $template_resource, $match)) { $type = $match[1]; $name = $match[2]; } else { // no resource given, use default // or single character before the colon is not a resource type, but part of the filepath $type = $smarty->default_resource_type; $name = $template_resource; } $handler = isset($smarty->_cache['resource_handlers'][$type]) ? $smarty->_cache['resource_handlers'][$type] : Smarty_Resource::load($smarty, $type); // if resource is not recompiling and resource name is not dotted we can check the source cache if (($smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) && !$handler->recompiled && !(isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/')) ) { $unique_resource = $handler->buildUniqueResourceName($smarty, $name); if (isset($smarty->_cache['source_objects'][$unique_resource])) { return $smarty->_cache['source_objects'][$unique_resource]; } } else { $unique_resource = null; } // create new source object $source = new Smarty_Template_Source($handler, $smarty, $template_resource, $type, $name); $handler->populate($source, $_template); if (!$source->exists && isset($_template->smarty->default_template_handler_func)) { Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source); } // on recompiling resources we are done if (($smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) && !$handler->recompiled) { // may by we have already $unique_resource $is_relative = false; if (!isset($unique_resource)) { $is_relative = isset($name[1]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/') && ($type == 'file' || (isset($_template->parent->source) && $_template->parent->source->type == 'extends')); $unique_resource = $handler->buildUniqueResourceName($smarty, $is_relative ? $source->filepath . $name : $name); } $source->unique_resource = $unique_resource; // save in runtime cache if not relative if (!$is_relative) { $smarty->_cache['source_objects'][$unique_resource] = $source; } } return $source; } /** * render the uncompiled source * * @param Smarty_Internal_Template $_template template object * * @return string * @throws \Exception */ public function renderUncompiled(Smarty_Internal_Template $_template) { $this->handler->renderUncompiled($_template->source, $_template); } /** * Render uncompiled source * * @param \Smarty_Internal_Template $_template */ public function render(Smarty_Internal_Template $_template) { if ($_template->source->handler->uncompiled) { if ($_template->smarty->debugging) { $_template->smarty->_debug->start_render($_template); } $this->handler->renderUncompiled($_template->source, $_template); if (isset($_template->parent) && $_template->parent->_objType == 2 && !empty($_template->tpl_function)) { $_template->parent->tpl_function = array_merge($_template->parent->tpl_function, $_template->tpl_function); } if ($_template->smarty->debugging) { $_template->smarty->_debug->end_render($_template); } } } /** * Get source time stamp * * @return int */ public function getTimeStamp() { if (!isset($this->timestamp)) { $this->handler->populateTimestamp($this); } return $this->timestamp; } /** * Get source content * * @return string */ public function getContent() { return isset($this->content) ? $this->content : $this->handler->getContent($this); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_eval.php0000664000175000017500000000370312422277771026334 0ustar daviddavidrequired_attributes = array('var'); $this->optional_attributes = array('assign'); // check and get attributes $_attr = $this->getAttributes($compiler, $args); if (isset($_attr['assign'])) { // output will be stored in a smarty variable instead of being displayed $_assign = $_attr['assign']; } // create template object $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);"; //was there an assign attribute? if (isset($_assign)) { $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());"; } else { $_output .= "echo \$_template->fetch();"; } return ""; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_undefined.php0000664000175000017500000000231312717671461025633 0ustar daviddavidcached->valid = false; } else { $tpl->mustCompile = true; } return false; } /** * Call error handler for undefined method * * @param string $name unknown method-name * @param array $args argument array * * @return mixed * @throws SmartyException */ public function __call($name, $args) { throw new SmartyException(get_class($args[0]) . "->{$name}() undefined method"); } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_resource_registered.php0000664000175000017500000000612012717671461027736 0ustar daviddavidfilepath = $source->type . ':' . $source->name; $source->uid = sha1($source->filepath); if ($source->smarty->compile_check) { $source->timestamp = $this->getTemplateTimestamp($source); $source->exists = !!$source->timestamp; } } /** * populate Source Object with timestamp and exists from Resource * * @param Smarty_Template_Source $source source object * * @return void */ public function populateTimestamp(Smarty_Template_Source $source) { $source->timestamp = $this->getTemplateTimestamp($source); $source->exists = !!$source->timestamp; } /** * Get timestamp (epoch) the template source was modified * * @param Smarty_Template_Source $source source object * * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp */ public function getTemplateTimestamp(Smarty_Template_Source $source) { // return timestamp $time_stamp = false; call_user_func_array($source->smarty->registered_resources[$source->type][0][1], array($source->name, &$time_stamp, $source->smarty)); return is_numeric($time_stamp) ? (int) $time_stamp : $time_stamp; } /** * Load template's source by invoking the registered callback into current template object * * @param Smarty_Template_Source $source source object * * @return string template source * @throws SmartyException if source cannot be loaded */ public function getContent(Smarty_Template_Source $source) { // return template string $content = null; $t = call_user_func_array($source->smarty->registered_resources[$source->type][0][0], array($source->name, &$content, $source->smarty)); if (is_bool($t) && !$t) { throw new SmartyException("Unable to read template {$source->type} '{$source->name}'"); } return $content; } /** * Determine basename for compiled filename * * @param Smarty_Template_Source $source source object * * @return string resource's basename */ public function getBasename(Smarty_Template_Source $source) { return basename($source->name); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php0000664000175000017500000000241512717671461033203 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (is_callable($callback)) { $smarty->default_plugin_handler_func = $callback; } else { throw new SmartyException("Default plugin handler '$callback' not callable"); } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_templatebase.php0000664000175000017500000002653712717671461026356 0ustar daviddavid_execute($template, $cache_id, $compile_id, $parent, 0); return $result === null ? ob_get_clean() : $result; } /** * displays a Smarty template * * @param string $template the resource handle of the template file or template object * @param mixed $cache_id cache id to be used with this template * @param mixed $compile_id compile id to be used with this template * @param object $parent next higher level of Smarty variables */ public function display($template = null, $cache_id = null, $compile_id = null, $parent = null) { // display template $this->_execute($template, $cache_id, $compile_id, $parent, 1); } /** * test if cache is valid * * @api Smarty::isCached() * @link http://www.smarty.net/docs/en/api.is.cached.tpl * * @param null|string|\Smarty_Internal_Template $template the resource handle of the template file or template object * @param mixed $cache_id cache id to be used with this template * @param mixed $compile_id compile id to be used with this template * @param object $parent next higher level of Smarty variables * * @return boolean cache status */ public function isCached($template = null, $cache_id = null, $compile_id = null, $parent = null) { return $this->_execute($template, $cache_id, $compile_id, $parent, 2); } /** * fetches a rendered Smarty template * * @param string $template the resource handle of the template file or template object * @param mixed $cache_id cache id to be used with this template * @param mixed $compile_id compile id to be used with this template * @param object $parent next higher level of Smarty variables * @param string $function function type 0 = fetch, 1 = display, 2 = isCache * * @return mixed * @throws \Exception * @throws \SmartyException */ private function _execute($template, $cache_id, $compile_id, $parent, $function) { $smarty = $this->_objType == 1 ? $this : $this->smarty; if ($template === null) { if ($this->_objType != 2) { throw new SmartyException($function . '():Missing \'$template\' parameter'); } else { $template = clone $this; } } elseif (is_object($template)) { if (!isset($template->_objType) || $template->_objType != 2) { throw new SmartyException($function . '():Template object expected'); } else { /* @var Smarty_Internal_Template $template */ $template = clone $template; } } else { // get template object /* @var Smarty_Internal_Template $template */ $template = $smarty->createTemplate($template, $cache_id, $compile_id, $parent, false); if ($this->_objType == 1) { // set caching in template object $template->caching = $this->caching; } } // fetch template content $level = ob_get_level(); try { $_smarty_old_error_level = ($this->_objType == 1 && isset($smarty->error_reporting)) ? error_reporting($smarty->error_reporting) : null; if ($function == 2) { if ($template->caching) { // return cache status of template if (!isset($template->cached)) { $template->loadCached(); } $result = $template->cached->isCached($template); $template->smarty->_cache['isCached'][$template->_getTemplateId()] = $template; } else { return false; } } else { ob_start(); $template->_mergeVars(); if (!empty(Smarty::$global_tpl_vars)) { $template->tpl_vars = array_merge(Smarty::$global_tpl_vars, $template->tpl_vars); } $result = $template->render(false, $function); } if (isset($_smarty_old_error_level)) { error_reporting($_smarty_old_error_level); } return $result; } catch (Exception $e) { while (ob_get_level() > $level) { ob_end_clean(); } throw $e; } } /** * Registers plugin to be used in templates * * @api Smarty::registerPlugin() * @link http://www.smarty.net/docs/en/api.register.plugin.tpl * * @param string $type plugin type * @param string $name name of template tag * @param callback $callback PHP callback to register * @param bool $cacheable if true (default) this function is cache able * @param mixed $cache_attr caching attributes if any * * @return \Smarty|\Smarty_Internal_Template * @throws SmartyException when the plugin tag is invalid */ public function registerPlugin($type, $name, $callback, $cacheable = true, $cache_attr = null) { return $this->ext->registerPlugin->registerPlugin($this, $type, $name, $callback, $cacheable, $cache_attr); } /** * load a filter of specified type and name * * @api Smarty::loadFilter() * @link http://www.smarty.net/docs/en/api.load.filter.tpl * * @param string $type filter type * @param string $name filter name * * @return bool * @throws SmartyException if filter could not be loaded */ public function loadFilter($type, $name) { return $this->ext->loadFilter->loadFilter($this, $type, $name); } /** * Registers a filter function * * @api Smarty::registerFilter() * @link http://www.smarty.net/docs/en/api.register.filter.tpl * * @param string $type filter type * @param callback $callback * @param string|null $name optional filter name * * @return \Smarty|\Smarty_Internal_Template * @throws \SmartyException */ public function registerFilter($type, $callback, $name = null) { return $this->ext->registerFilter->registerFilter($this, $type, $callback, $name); } /** * Registers object to be used in templates * * @api Smarty::registerObject() * @link http://www.smarty.net/docs/en/api.register.object.tpl * * @param string $object_name * @param object $object the referenced PHP object to register * @param array $allowed_methods_properties list of allowed methods (empty = all) * @param bool $format smarty argument format, else traditional * @param array $block_methods list of block-methods * * @return \Smarty|\Smarty_Internal_Template * @throws \SmartyException */ public function registerObject($object_name, $object, $allowed_methods_properties = array(), $format = true, $block_methods = array()) { return $this->ext->registerObject->registerObject($this, $object_name, $object, $allowed_methods_properties, $format, $block_methods); } /** * @param boolean $caching */ public function setCaching($caching) { $this->caching = $caching; } /** * @param int $cache_lifetime */ public function setCacheLifetime($cache_lifetime) { $this->cache_lifetime = $cache_lifetime; } /** * @param string $compile_id */ public function setCompileId($compile_id) { $this->compile_id = $compile_id; } /** * @param string $cache_id */ public function setCacheId($cache_id) { $this->cache_id = $cache_id; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_append.php0000664000175000017500000000543512717671461026511 0ustar daviddavid $_val) { if ($_key != '') { $this->append($data, $_key, $_val, $merge, $nocache); } } } else { if ($tpl_var != '' && isset($value)) { if (!isset($data->tpl_vars[$tpl_var])) { $tpl_var_inst = $data->ext->getTemplateVars->_getVariable($data, $tpl_var, null, true, false); if ($tpl_var_inst instanceof Smarty_Undefined_Variable) { $data->tpl_vars[$tpl_var] = new Smarty_Variable(null, $nocache); } else { $data->tpl_vars[$tpl_var] = clone $tpl_var_inst; } } if (!(is_array($data->tpl_vars[$tpl_var]->value) || $data->tpl_vars[$tpl_var]->value instanceof ArrayAccess) ) { settype($data->tpl_vars[$tpl_var]->value, 'array'); } if ($merge && is_array($value)) { foreach ($value as $_mkey => $_mval) { $data->tpl_vars[$tpl_var]->value[$_mkey] = $_mval; } } else { $data->tpl_vars[$tpl_var]->value[] = $value; } } if ($data->_objType == 2 && $data->scope) { $data->ext->_updateScope->updateScope($data, $tpl_var); } } return $data; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_compileallconfig.php0000664000175000017500000000160312717671461030542 0ustar daviddavidcompileAll($smarty, $extension, $force_compile, $time_limit, $max_errors, true); } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php0000664000175000017500000000725512717671461031616 0ustar daviddavidgetAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->tag_nocache = true; } unset($_attr['nocache']); // convert attributes into parameter array string $_paramsArray = array(); foreach ($_attr as $_key => $_value) { if (is_int($_key)) { $_paramsArray[] = "$_key=>$_value"; } else { $_paramsArray[] = "'$_key'=>$_value"; } } $_params = 'array(' . implode(",", $_paramsArray) . ')'; $this->openTag($compiler, $tag, array($_params, $compiler->nocache)); // maybe nocache because of nocache variables or nocache plugin $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; // compile code $output = "smarty->_cache['tag_stack'][] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>"; } else { // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } // closing tag of block plugin, restore nocache list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, - 5)); // This tag does create output $compiler->has_output = true; // compile code if (!isset($parameter['modifier_list'])) { $mod_pre = $mod_post = ''; } else { $mod_pre = ' ob_start(); '; $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';'; } $output = "smarty->_cache['tag_stack']);?>"; } return $output . "\n"; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_addautoloadfilters.php0000664000175000017500000000405012717671461031104 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if ($type !== null) { $this->_checkFilterType($type); if (!empty($smarty->autoload_filters[$type])) { $smarty->autoload_filters[$type] = array_merge($smarty->autoload_filters[$type], (array) $filters); } else { $smarty->autoload_filters[$type] = (array) $filters; } } else { foreach ((array) $filters as $type => $value) { $this->_checkFilterType($type); if (!empty($smarty->autoload_filters[$type])) { $smarty->autoload_filters[$type] = array_merge($smarty->autoload_filters[$type], (array) $value); } else { $smarty->autoload_filters[$type] = (array) $value; } } } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_templatelexer.php0000664000175000017500000010357712717671461026563 0ustar daviddavid */ class Smarty_Internal_Templatelexer { /** * Source * * @var string */ public $data; /** * byte counter * * @var int */ public $counter; /** * token number * * @var int */ public $token; /** * token value * * @var string */ public $value; /** * current line * * @var int */ public $line; /** * tag start line * * @var */ public $taglineno; /** * php code type * * @var string */ public $phpType = ''; /** * escaped left delimiter * * @var string */ public $ldel = ''; /** * escaped left delimiter length * * @var int */ public $ldel_length = 0; /** * escaped right delimiter * * @var string */ public $rdel = ''; /** * escaped right delimiter length * * @var int */ public $rdel_length = 0; /** * state number * * @var int */ public $state = 1; /** * Smarty object * * @var Smarty */ public $smarty = null; /** * compiler object * * @var Smarty_Internal_TemplateCompilerBase */ public $compiler = null; /** * literal tag nesting level * * @var int */ private $literal_cnt = 0; /** * PHP start tag string * * @var string */ /** * trace file * * @var resource */ public $yyTraceFILE; /** * trace prompt * * @var string */ public $yyTracePrompt; /** * XML flag true while processing xml * * @var bool */ public $is_xml = false; /** * state names * * @var array */ public $state_name = array(1 => 'TEXT', 2 => 'TAG', 3 => 'TAGBODY', 4 => 'LITERAL', 5 => 'DOUBLEQUOTEDSTRING',); /** * storage for assembled token patterns * * @var string */ private $yy_global_pattern1 = null; private $yy_global_pattern2 = null; private $yy_global_pattern3 = null; private $yy_global_pattern4 = null; private $yy_global_pattern5 = null; /** * token names * * @var array */ public $smarty_token_names = array( // Text for parser error messages 'NOT' => '(!,not)', 'OPENP' => '(', 'CLOSEP' => ')', 'OPENB' => '[', 'CLOSEB' => ']', 'PTR' => '->', 'APTR' => '=>', 'EQUAL' => '=', 'NUMBER' => 'number', 'UNIMATH' => '+" , "-', 'MATH' => '*" , "/" , "%', 'INCDEC' => '++" , "--', 'SPACE' => ' ', 'DOLLAR' => '$', 'SEMICOLON' => ';', 'COLON' => ':', 'DOUBLECOLON' => '::', 'AT' => '@', 'HATCH' => '#', 'QUOTE' => '"', 'BACKTICK' => '`', 'VERT' => '"|" modifier', 'DOT' => '.', 'COMMA' => '","', 'QMARK' => '"?"', 'ID' => 'id, name', 'TEXT' => 'text', 'LDELSLASH' => '{/..} closing tag', 'LDEL' => '{...} Smarty tag', 'COMMENT' => 'comment', 'AS' => 'as', 'TO' => 'to', 'PHP' => '" '"<", "==" ... logical operator', 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', 'SCOND' => '"is even" ... if condition',); /** * constructor * * @param string $data template source * @param Smarty_Internal_TemplateCompilerBase $compiler */ function __construct($data, Smarty_Internal_TemplateCompilerBase $compiler) { $this->data = $data; $this->counter = 0; if (preg_match('~^\xEF\xBB\xBF~i', $this->data, $match)) { $this->counter += strlen($match[ 0 ]); } $this->line = 1; $this->smarty = $compiler->smarty; $this->compiler = $compiler; $this->ldel = preg_quote($this->smarty->left_delimiter, '~'); $this->ldel_length = strlen($this->smarty->left_delimiter); $this->rdel = preg_quote($this->smarty->right_delimiter, '~'); $this->rdel_length = strlen($this->smarty->right_delimiter); $this->smarty_token_names[ 'LDEL' ] = $this->smarty->left_delimiter; $this->smarty_token_names[ 'RDEL' ] = $this->smarty->right_delimiter; } public function PrintTrace() { $this->yyTraceFILE = fopen('php://output', 'w'); $this->yyTracePrompt = '
'; } /* * Check if this tag is autoliteral */ public function isAutoLiteral() { return $this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false; } private $_yy_state = 1; private $_yy_stack = array(); public function yylex() { return $this->{'yylex' . $this->_yy_state}(); } public function yypushstate($state) { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); } array_push($this->_yy_stack, $this->_yy_state); $this->_yy_state = $state; if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); } } public function yypopstate() { if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); } $this->_yy_state = array_pop($this->_yy_stack); if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); } } public function yybegin($state) { $this->_yy_state = $state; if ($this->yyTraceFILE) { fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[ $this->_yy_state ]) ? $this->state_name[ $this->_yy_state ] : $this->_yy_state); } } public function yylex1() { if (!isset($this->yy_global_pattern1)) { $this->yy_global_pattern1 = "/\G([{][}])|\G(" . $this->ldel . "[*])|\G((" . $this->ldel . "\\s*php(.*?)" . $this->rdel . ")|(" . $this->ldel . "\\s*[\/]php" . $this->rdel . "))|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*)|\G(\\s*" . $this->rdel . ")|\G((<[?]((php\\s+|=)|\\s+))|(<[%])|(<[?]xml\\s+)|()|([?][>])|([%][>]))|\G([\S\s])/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern1, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[ 0 ]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state TEXT'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r1_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; } while (true); } // end function const TEXT = 1; function yy_r1_1() { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } function yy_r1_2() { preg_match("~[*]{$this->rdel}~", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); if (isset($match[ 0 ][ 1 ])) { $to = $match[ 0 ][ 1 ] + strlen($match[ 0 ][ 0 ]); } else { $this->compiler->trigger_template_error("missing or misspelled comment closing tag '*{$this->smarty->right_delimiter}'"); } $this->value = substr($this->data, $this->counter, $to - $this->counter); return false; } function yy_r1_3() { $obj = new Smarty_Internal_Compile_Private_Php(); $obj->parsePhp($this); } function yy_r1_7() { if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false ) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; $this->yypushstate(self::LITERAL); } } function yy_r1_8() { if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false ) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->yypushstate(self::TAG); return true; } } function yy_r1_9() { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } function yy_r1_10() { $obj = new Smarty_Internal_Compile_Private_Php(); $obj->parsePhp($this); } function yy_r1_19() { $to = strlen($this->data); preg_match("~($this->ldel)|(<[?]((php\s+|=)|\s+))|(<[%])|(<[?]xml\s+)|()|([?][>])|([%][>])~i", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); if (isset($match[ 0 ][ 1 ])) { $to = $match[ 0 ][ 1 ]; } $this->value = substr($this->data, $this->counter, $to - $this->counter); $this->token = Smarty_Internal_Templateparser::TP_TEXT; } public function yylex2() { if (!isset($this->yy_global_pattern2)) { $this->yy_global_pattern2 = "/\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*[0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/](?:(?!block)[0-9]*[a-zA-Z_]\\w*)\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[$][0-9]*[a-zA-Z_]\\w*(\\s+nocache)?\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/])|\G(" . $this->ldel . "\\s*)/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern2, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[ 0 ]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state TAG'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r2_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; } while (true); } // end function const TAG = 2; function yy_r2_1() { $this->token = Smarty_Internal_Templateparser::TP_LDELIF; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; } function yy_r2_3() { $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; } function yy_r2_4() { $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; } function yy_r2_5() { $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; } function yy_r2_6() { $this->yypopstate(); $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG; $this->taglineno = $this->line; } function yy_r2_8() { $this->yypopstate(); $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG; $this->taglineno = $this->line; } function yy_r2_9() { if ($this->_yy_stack[ count($this->_yy_stack) - 1 ] == self::TEXT) { $this->yypopstate(); $this->token = Smarty_Internal_Templateparser::TP_SIMPELOUTPUT; $this->taglineno = $this->line; } else { $this->value = $this->smarty->left_delimiter; $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; } } function yy_r2_11() { $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; } function yy_r2_12() { $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->yybegin(self::TAGBODY); $this->taglineno = $this->line; } public function yylex3() { if (!isset($this->yy_global_pattern3)) { $this->yy_global_pattern3 = "/\G(\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*(([!=][=]{1,2})|([<][=>]?)|([>][=]?)|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor|(is\\s+(not\\s+)?(odd|even|div)\\s+by))\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G(([!]\\s*)|(not\\s+))|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|])|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern3, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[ 0 ]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state TAGBODY'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r3_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; } while (true); } // end function const TAGBODY = 3; function yy_r3_1() { $this->token = Smarty_Internal_Templateparser::TP_RDEL; $this->yypopstate(); } function yy_r3_2() { if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false ) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->yypushstate(self::TAG); return true; } } function yy_r3_3() { $this->token = Smarty_Internal_Templateparser::TP_QUOTE; $this->yypushstate(self::DOUBLEQUOTEDSTRING); } function yy_r3_4() { $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; } function yy_r3_5() { $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT; $this->taglineno = $this->line; } function yy_r3_7() { $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; } function yy_r3_8() { $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; } function yy_r3_9() { $this->token = Smarty_Internal_Templateparser::TP_ISIN; } function yy_r3_10() { $this->token = Smarty_Internal_Templateparser::TP_AS; } function yy_r3_11() { $this->token = Smarty_Internal_Templateparser::TP_TO; } function yy_r3_12() { $this->token = Smarty_Internal_Templateparser::TP_STEP; } function yy_r3_13() { $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; } function yy_r3_14() { $this->token = Smarty_Internal_Templateparser::TP_LOGOP; } function yy_r3_19() { $this->token = Smarty_Internal_Templateparser::TP_TLOGOP; } function yy_r3_24() { $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND; } function yy_r3_27() { $this->token = Smarty_Internal_Templateparser::TP_NOT; } function yy_r3_30() { $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; } function yy_r3_34() { $this->token = Smarty_Internal_Templateparser::TP_OPENP; } function yy_r3_35() { $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; } function yy_r3_36() { $this->token = Smarty_Internal_Templateparser::TP_OPENB; } function yy_r3_37() { $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; } function yy_r3_38() { $this->token = Smarty_Internal_Templateparser::TP_PTR; } function yy_r3_39() { $this->token = Smarty_Internal_Templateparser::TP_APTR; } function yy_r3_40() { $this->token = Smarty_Internal_Templateparser::TP_EQUAL; } function yy_r3_41() { $this->token = Smarty_Internal_Templateparser::TP_INCDEC; } function yy_r3_43() { $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; } function yy_r3_45() { $this->token = Smarty_Internal_Templateparser::TP_MATH; } function yy_r3_47() { $this->token = Smarty_Internal_Templateparser::TP_AT; } function yy_r3_48() { $this->token = Smarty_Internal_Templateparser::TP_HATCH; } function yy_r3_49() { // resolve conflicts with shorttag and right_delimiter starting with '=' if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter ) { preg_match("~\s+~", $this->value, $match); $this->value = $match[ 0 ]; $this->token = Smarty_Internal_Templateparser::TP_SPACE; } else { $this->token = Smarty_Internal_Templateparser::TP_ATTR; } } function yy_r3_50() { $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE; } function yy_r3_53() { $this->token = Smarty_Internal_Templateparser::TP_ID; } function yy_r3_54() { $this->token = Smarty_Internal_Templateparser::TP_INTEGER; } function yy_r3_55() { $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; $this->yypopstate(); } function yy_r3_56() { $this->token = Smarty_Internal_Templateparser::TP_VERT; } function yy_r3_57() { $this->token = Smarty_Internal_Templateparser::TP_DOT; } function yy_r3_58() { $this->token = Smarty_Internal_Templateparser::TP_COMMA; } function yy_r3_59() { $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; } function yy_r3_60() { $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; } function yy_r3_61() { $this->token = Smarty_Internal_Templateparser::TP_COLON; } function yy_r3_62() { $this->token = Smarty_Internal_Templateparser::TP_QMARK; } function yy_r3_63() { $this->token = Smarty_Internal_Templateparser::TP_HEX; } function yy_r3_64() { $this->token = Smarty_Internal_Templateparser::TP_SPACE; } function yy_r3_65() { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } public function yylex4() { if (!isset($this->yy_global_pattern4)) { $this->yy_global_pattern4 = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" . $this->rdel . ")|\G([\S\s])/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern4, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[ 0 ]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state LITERAL'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r4_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; } while (true); } // end function const LITERAL = 4; function yy_r4_1() { $this->literal_cnt ++; $this->token = Smarty_Internal_Templateparser::TP_LITERAL; } function yy_r4_2() { if ($this->literal_cnt) { $this->literal_cnt --; $this->token = Smarty_Internal_Templateparser::TP_LITERAL; } else { $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; $this->yypopstate(); } } function yy_r4_3() { $to = strlen($this->data); preg_match("~{$this->ldel}[/]?literal{$this->rdel}~i", $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter); if (isset($match[ 0 ][ 1 ])) { $to = $match[ 0 ][ 1 ]; } else { $this->compiler->trigger_template_error("missing or misspelled literal closing tag"); } $this->value = substr($this->data, $this->counter, $to - $this->counter); $this->token = Smarty_Internal_Templateparser::TP_LITERAL; } public function yylex5() { if (!isset($this->yy_global_pattern5)) { $this->yy_global_pattern5 = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/]literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*[\/])|\G(" . $this->ldel . "\\s*[0-9]*[a-zA-Z_]\\w*)|\G(" . $this->ldel . "\\s*)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/isS"; } if ($this->counter >= strlen($this->data)) { return false; // end of input } do { if (preg_match($this->yy_global_pattern5, $this->data, $yymatches, null, $this->counter)) { $yysubmatches = $yymatches; if (strlen($yysubmatches[ 0 ]) < 200) { $yymatches = preg_grep("/(.|\s)+/", $yysubmatches); } else { $yymatches = array_filter($yymatches, 'strlen'); } if (empty($yymatches)) { throw new Exception('Error: lexing failed because a rule matched' . ' an empty string. Input "' . substr($this->data, $this->counter, 5) . '... state DOUBLEQUOTEDSTRING'); } next($yymatches); // skip global match $this->token = key($yymatches); // token number $this->value = current($yymatches); // token value $r = $this->{'yy_r5_' . $this->token}(); if ($r === null) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); // accept this token return true; } elseif ($r === true) { // we have changed state // process this token in the new state return $this->yylex(); } elseif ($r === false) { $this->counter += strlen($this->value); $this->line += substr_count($this->value, "\n"); if ($this->counter >= strlen($this->data)) { return false; // end of input } // skip this token continue; } } else { throw new Exception('Unexpected input at line' . $this->line . ': ' . $this->data[ $this->counter ]); } break; } while (true); } // end function const DOUBLEQUOTEDSTRING = 5; function yy_r5_1() { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } function yy_r5_2() { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } function yy_r5_3() { if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false ) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->yypushstate(self::TAG); return true; } } function yy_r5_4() { if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false ) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->yypushstate(self::TAG); return true; } } function yy_r5_5() { if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false ) { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } else { $this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->taglineno = $this->line; $this->yypushstate(self::TAGBODY); } } function yy_r5_6() { $this->token = Smarty_Internal_Templateparser::TP_QUOTE; $this->yypopstate(); } function yy_r5_7() { $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; $this->value = substr($this->value, 0, - 1); $this->yypushstate(self::TAGBODY); $this->taglineno = $this->line; } function yy_r5_8() { $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; } function yy_r5_9() { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } function yy_r5_10() { $this->token = Smarty_Internal_Templateparser::TP_TEXT; } function yy_r5_14() { $to = strlen($this->data); $this->value = substr($this->data, $this->counter, $to - $this->counter); $this->token = Smarty_Internal_Templateparser::TP_TEXT; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_template.php0000664000175000017500000003034712717671461025515 0ustar daviddavidsmarty = &$smarty; // Smarty parameter $this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id; $this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id; $this->caching = $_caching === null ? $this->smarty->caching : $_caching; if ($this->caching === true) { $this->caching = Smarty::CACHING_LIFETIME_CURRENT; } $this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime; $this->parent = $_parent; // Template resource $this->template_resource = $template_resource; $this->source = Smarty_Template_Source::load($this); parent::__construct(); } /** * render template * * @param bool $merge_tpl_vars if true parent template variables merged in to local scope * @param bool $no_output_filter if true do not run output filter * @param bool $display true: display, false: fetch null: subtemplate * * @throws Exception * @throws SmartyException * @return string rendered template output */ public function render($no_output_filter = true, $display = null) { $parentIsTpl = isset($this->parent) && $this->parent->_objType == 2; if ($this->smarty->debugging) { $this->smarty->_debug->start_template($this, $display); } // checks if template exists if (!$this->source->exists) { if ($parentIsTpl) { $parent_resource = " in '{$this->parent->template_resource}'"; } else { $parent_resource = ''; } throw new SmartyException("Unable to load template {$this->source->type} '{$this->source->name}'{$parent_resource}"); } // disable caching for evaluated code if ($this->source->handler->recompiled) { $this->caching = false; } // read from cache or render $isCacheTpl = $this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED; if ($isCacheTpl) { if (!isset($this->cached)) { $this->loadCached(); } $this->cached->render($this, $no_output_filter); } elseif ($this->source->handler->uncompiled) { $this->source->render($this); } else { if (!isset($this->compiled)) { $this->loadCompiled(); } $this->compiled->render($this); } // display or fetch if ($display) { if ($this->caching && $this->smarty->cache_modified_check) { $this->smarty->ext->_cachemodify->cacheModifiedCheck($this->cached, $this, isset($content) ? $content : ob_get_clean()); } else { if ((!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) && !$no_output_filter && (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output'])) ) { echo $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this); } else { ob_end_flush(); flush(); } } if ($this->smarty->debugging) { $this->smarty->_debug->end_template($this); // debug output $this->smarty->_debug->display_debug($this, true); } return ''; } else { if ($this->smarty->debugging) { $this->smarty->_debug->end_template($this); if ($this->smarty->debugging === 2 && $display === false) { $this->smarty->_debug->display_debug($this, true); } } if ($parentIsTpl) { if (!empty($this->tpl_function)) { $this->parent->tpl_function = array_merge($this->parent->tpl_function, $this->tpl_function); } foreach ($this->compiled->required_plugins as $code => $tmp1) { foreach ($tmp1 as $name => $tmp) { foreach ($tmp as $type => $data) { $this->parent->compiled->required_plugins[$code][$name][$type] = $data; } } } } if (!$no_output_filter && (!$this->caching || $this->cached->has_nocache_code || $this->source->handler->recompiled) && (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output'])) ) { return $this->smarty->ext->_filterHandler->runFilter('output', ob_get_clean(), $this); } // return cache content return null; } } /** * Compiles the template * If the template is not evaluated the compiled template is saved on disk */ public function compileTemplateSource() { return $this->compiled->compileTemplateSource($this); } /** * Writes the content to cache resource * * @param string $content * * @return bool */ public function writeCachedContent($content) { return $this->smarty->ext->_updateCache->writeCachedContent($this->cached, $this, $content); } /** * Get unique template id * * @return string */ public function _getTemplateId() { return isset($this->templateId) ? $this->templateId : $this->templateId = $this->smarty->_getTemplateId($this->template_resource, $this->cache_id, $this->compile_id); } /** * runtime error not matching capture tags */ public function capture_error() { throw new SmartyException("Not matching {capture} open/close in \"{$this->template_resource}\""); } /** * Load compiled object * */ public function loadCompiled() { if (!isset($this->compiled)) { $this->compiled = Smarty_Template_Compiled::load($this); } } /** * Load cached object * */ public function loadCached() { if (!isset($this->cached)) { $this->cached = Smarty_Template_Cached::load($this); } } /** * Load compiler object * * @throws \SmartyException */ public function loadCompiler() { if (!class_exists($this->source->handler->compiler_class)) { $this->smarty->loadPlugin($this->source->handler->compiler_class); } $this->compiler = new $this->source->handler->compiler_class($this->source->handler->template_lexer_class, $this->source->handler->template_parser_class, $this->smarty); } /** * Handle unknown class methods * * @param string $name unknown method-name * @param array $args argument array * * @return mixed * @throws SmartyException */ public function __call($name, $args) { // method of Smarty object? if (method_exists($this->smarty, $name)) { return call_user_func_array(array($this->smarty, $name), $args); } // parent return parent::__call($name, $args); } /** * set Smarty property in template context * * @param string $property_name property name * @param mixed $value value * * @throws SmartyException */ public function __set($property_name, $value) { switch ($property_name) { case 'compiled': case 'cached': case 'compiler': $this->$property_name = $value; return; default: // Smarty property ? if (property_exists($this->smarty, $property_name)) { $this->smarty->$property_name = $value; return; } } throw new SmartyException("invalid template property '$property_name'."); } /** * get Smarty property in template context * * @param string $property_name property name * * @return mixed|Smarty_Template_Cached * @throws SmartyException */ public function __get($property_name) { switch ($property_name) { case 'compiled': $this->loadCompiled(); return $this->compiled; case 'cached': $this->loadCached(); return $this->cached; case 'compiler': $this->loadCompiler(); return $this->compiler; default: // Smarty property ? if (property_exists($this->smarty, $property_name)) { return $this->smarty->$property_name; } } throw new SmartyException("template property '$property_name' does not exist."); } /** * Template data object destructor */ public function __destruct() { if ($this->smarty->cache_locking && isset($this->cached) && $this->cached->is_locked) { $this->cached->handler->releaseLock($this->smarty, $this->cached); } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php0000664000175000017500000000225312717671461033152 0ustar daviddavidsmarty) ? $obj->smarty : $obj; if (is_callable($callback)) { $smarty->default_config_handler_func = $callback; } else { throw new SmartyException("Default config handler not callable"); } return $obj; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php0000664000175000017500000001610112717671461032547 0ustar daviddavidgetAttributes($compiler, $args); // nocache option if ($_attr['nocache'] === true) { $compiler->tag_nocache = true; } if (isset($_attr['assign'])) { // assign output to variable $output = "assign({$_attr['assign']},{$parameter['value']});?>"; } else { // display value $output = $parameter['value']; // tag modifier if (!empty($parameter['modifierlist'])) { $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], 'value' => $output)); } if (!$_attr['nofilter']) { // default modifier if (!empty($compiler->smarty->default_modifiers)) { if (empty($compiler->default_modifier_list)) { $modifierlist = array(); foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) { preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array); for ($i = 0, $count = count($mod_array[0]); $i < $count; $i ++) { if ($mod_array[0][$i] != ':') { $modifierlist[$key][] = $mod_array[0][$i]; } } } $compiler->default_modifier_list = $modifierlist; } $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output)); } // autoescape html if ($compiler->template->smarty->escape_html) { $output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')"; } // loop over registered filters if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) { foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) { if (!is_array($function)) { $output = "{$function}({$output},\$_smarty_tpl)"; } elseif (is_object($function[0])) { $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)"; } else { $output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)"; } } } // auto loaded filters if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) { foreach ((array) $compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) { $result = $this->compile_output_filter($compiler, $name, $output); if ($result !== false) { $output = $result; } else { // not found, throw exception throw new SmartyException("Unable to load filter '{$name}'"); } } } foreach ($compiler->variable_filters as $filter) { if (count($filter) == 1 && ($result = $this->compile_output_filter($compiler, $filter[0], $output)) !== false ) { $output = $result; } else { $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter), 'value' => $output)); } } } $compiler->has_output = true; $output = ""; } return $output; } /** * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * @param string $name name of variable filter * @param string $output embedded output * * @return string */ private function compile_output_filter(Smarty_Internal_TemplateCompilerBase $compiler, $name, $output) { $plugin_name = "smarty_variablefilter_{$name}"; $path = $compiler->smarty->loadPlugin($plugin_name, false); if ($path) { if ($compiler->template->caching) { $compiler->parent_compiler->template->compiled->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; $compiler->parent_compiler->template->compiled->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; } else { $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path; $compiler->parent_compiler->template->compiled->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name; } } else { // not found return false; } return "{$plugin_name}({$output},\$_smarty_tpl)"; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_ldelim.php0000664000175000017500000000216212717671461026652 0ustar daviddavidgetAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->trigger_template_error('nocache option not allowed', null, true); } // this tag does not return compiled code $compiler->has_code = true; return $compiler->smarty->left_delimiter; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_cacheresource.php0000664000175000017500000001502012717671461024610 0ustar daviddavid 'smarty_internal_cacheresource_file.php',); /** * populate Cached Object with meta data from Resource * * @param Smarty_Template_Cached $cached cached object * @param Smarty_Internal_Template $_template template object * * @return void */ abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template); /** * populate Cached Object with timestamp and exists from Resource * * @param Smarty_Template_Cached $cached * * @return void */ abstract public function populateTimestamp(Smarty_Template_Cached $cached); /** * Read the cached template and process header * * @param Smarty_Internal_Template $_template template object * @param Smarty_Template_Cached $cached cached object * @param bool $update flag if called because cache update * * @return bool true or false if the cached content does not exist */ abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null, $update = false); /** * Write the rendered template output to cache * * @param Smarty_Internal_Template $_template template object * @param string $content content to cache * * @return boolean success */ abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content); /** * Return cached content * * @param Smarty_Internal_Template $_template template object * * @return null|string */ public function getCachedContent(Smarty_Internal_Template $_template) { if ($_template->cached->handler->process($_template)) { ob_start(); $unifunc = $_template->cached->unifunc; $unifunc($_template); return ob_get_clean(); } return null; } /** * Empty cache * * @param Smarty $smarty Smarty object * @param integer $exp_time expiration time (number of seconds, not timestamp) * * @return integer number of cache files deleted */ abstract public function clearAll(Smarty $smarty, $exp_time = null); /** * Empty cache for a specific template * * @param Smarty $smarty Smarty object * @param string $resource_name template name * @param string $cache_id cache id * @param string $compile_id compile id * @param integer $exp_time expiration time (number of seconds, not timestamp) * * @return integer number of cache files deleted */ abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time); /** * @param Smarty $smarty * @param Smarty_Template_Cached $cached * * @return bool|null */ public function locked(Smarty $smarty, Smarty_Template_Cached $cached) { // theoretically locking_timeout should be checked against time_limit (max_execution_time) $start = microtime(true); $hadLock = null; while ($this->hasLock($smarty, $cached)) { $hadLock = true; if (microtime(true) - $start > $smarty->locking_timeout) { // abort waiting for lock release return false; } sleep(1); } return $hadLock; } /** * Check is cache is locked for this template * * @param Smarty $smarty * @param Smarty_Template_Cached $cached * * @return bool */ public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached) { // check if lock exists return false; } /** * Lock cache for this template * * @param Smarty $smarty * @param Smarty_Template_Cached $cached * * @return bool */ public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached) { // create lock return true; } /** * Unlock cache for this template * * @param Smarty $smarty * @param Smarty_Template_Cached $cached * * @return bool */ public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) { // release lock return true; } /** * Load Cache Resource Handler * * @param Smarty $smarty Smarty object * @param string $type name of the cache resource * * @throws SmartyException * @return Smarty_CacheResource Cache Resource Handler */ public static function load(Smarty $smarty, $type = null) { if (!isset($type)) { $type = $smarty->caching_type; } // try smarty's cache if (isset($smarty->_cache['cacheresource_handlers'][$type])) { return $smarty->_cache['cacheresource_handlers'][$type]; } // try registered resource if (isset($smarty->registered_cache_resources[$type])) { // do not cache these instances as they may vary from instance to instance return $smarty->_cache['cacheresource_handlers'][$type] = $smarty->registered_cache_resources[$type]; } // try sysplugins dir if (isset(self::$sysplugins[$type])) { $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type); return $smarty->_cache['cacheresource_handlers'][$type] = new $cache_resource_class(); } // try plugins dir $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type); if ($smarty->loadPlugin($cache_resource_class)) { return $smarty->_cache['cacheresource_handlers'][$type] = new $cache_resource_class(); } // give up throw new SmartyException("Unable to load cache resource '{$type}'"); } /** * Invalid Loaded Cache Files * * @param Smarty $smarty Smarty object */ public function invalidLoadedCache(Smarty $smarty) { $smarty->_cache['isCached'] = array(); if (isset($smarty->ext->_subtemplate)) { $smarty->ext->_subtemplate->tplObjects = array(); } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_while.php0000664000175000017500000001042112717671461026511 0ustar daviddavidloopNesting++; // check and get attributes $_attr = $this->getAttributes($compiler, $args); $this->openTag($compiler, 'while', $compiler->nocache); if (!array_key_exists("if condition", $parameter)) { $compiler->trigger_template_error("missing while condition", null, true); } // maybe nocache because of nocache variables $compiler->nocache = $compiler->nocache | $compiler->tag_nocache; $_output = "nocache) { $_nocache = ',true'; // create nocache var to make it know for further compiling if (is_array($parameter['if condition']['var'])) { $var = trim($parameter['if condition']['var']['var'], "'"); } else { $var = trim($parameter['if condition']['var'], "'"); } if (isset($compiler->template->tpl_vars[$var])) { $compiler->template->tpl_vars[$var]->nocache = true; } else { $compiler->template->tpl_vars[$var] = new Smarty_Variable(null, true); } } else { $_nocache = ''; } if (is_array($parameter['if condition']['var'])) { $_output .= "if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->smarty->ext->_var->createLocalArrayVariable(\$_smarty_tpl, " . $parameter['if condition']['var']['var'] . "$_nocache);\n"; $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>"; } else { $_output .= "if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});"; $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>"; } } else { $_output .= "while ({$parameter['if condition']}) {?>"; } return $_output; } } /** * Smarty Internal Plugin Compile Whileclose Class * * @package Smarty * @subpackage Compiler */ class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase { /** * Compiles code for the {/while} tag * * @param array $args array with attributes from parser * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object * * @return string compiled code */ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler) { $compiler->loopNesting--; // must endblock be nocache? if ($compiler->nocache) { $compiler->tag_nocache = true; } $compiler->nocache = $this->closeTag($compiler, array('while')); return "\n"; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_extends.php0000664000175000017500000001123412717671461027056 0ustar daviddavidgetAttributes($compiler, $args); if ($_attr['nocache'] === true) { $compiler->trigger_template_error('nocache option not allowed', $compiler->parser->lex->line - 1); } if (strpos($_attr['file'], '$_tmp') !== false) { $compiler->trigger_template_error('illegal value for file attribute', $compiler->parser->lex->line - 1); } // add code to initialize inheritance $this->registerInit($compiler, true); $file = trim($_attr['file'], '\'"'); if (strlen($file) > 8 && substr($file, 0, 8) == 'extends:') { // generate code for each template $files = array_reverse(explode('|', substr($file, 8))); $i = 0; foreach ($files as $file) { if ($file[0] == '"') { $file = trim($file, '".'); } else { $file = "'{$file}'"; } $i ++; if ($i == count($files) && isset($_attr['extends_resource'])) { $this->compileEndChild($compiler); } $this->compileInclude($compiler, $file); } if (!isset($_attr['extends_resource'])) { $this->compileEndChild($compiler); } } else { $this->compileEndChild($compiler); $this->compileInclude($compiler, $_attr['file']); } $compiler->has_code = false; return ''; } /** * Add code for inheritance endChild() method to end of template * * @param \Smarty_Internal_TemplateCompilerBase $compiler */ private function compileEndChild(Smarty_Internal_TemplateCompilerBase $compiler) { $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser, "ext->_inheritance->endChild(\$_smarty_tpl);\n?>\n"); } /** * Add code for including subtemplate to end of template * * @param \Smarty_Internal_TemplateCompilerBase $compiler * @param string $file subtemplate name */ private function compileInclude(Smarty_Internal_TemplateCompilerBase $compiler, $file) { $compiler->parser->template_postfix[] = new Smarty_Internal_ParseTree_Tag($compiler->parser, $compiler->compileTag('include', array($file, array('scope' => 'parent')))); } /** * Create source code for {extends} from source components array * * @param []\Smarty_Internal_Template_Source $components * * @return string */ public static function extendsSourceArrayCode($components) { $resources = array(); foreach ($components as $source) { $resources[] = $source->resource; } return '{extends file=\'extends:' . join('|', $resources) . '\' extends_resource=true}'; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php0000664000175000017500000000137412717671461031266 0ustar daviddavidsmarty) ? $obj->smarty : $obj; return $smarty->default_modifiers; } }postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_parsetree.php0000664000175000017500000000162112717671461025665 0ustar daviddaviddata = null; $this->subtrees = null; } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_runtime_var.php0000664000175000017500000000207012717671461026225 0ustar daviddavidtpl_vars[$varName])) { $tpl->tpl_vars[$varName] = new Smarty_Variable(array(), $nocache); } else { $tpl->tpl_vars[$varName] = clone $tpl->tpl_vars[$varName]; if (!(is_array($tpl->tpl_vars[$varName]->value) || $tpl->tpl_vars[$varName]->value instanceof ArrayAccess) ) { settype($tpl->tpl_vars[$varName]->value, 'array'); } } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_internal_compile_include.php0000664000175000017500000003725712717671461027044 0ustar daviddavid true, 'parent' => true, 'root' => true, 'global' => true, 'smarty' => true, 'tpl_root' => true); /** * Compiles code for the {include} tag * * @param array $args array with attributes from parser * @param Smarty_Internal_SmartyTemplateCompiler $compiler compiler object * @param array $parameter array with compilation parameter * * @throws SmartyCompilerException * @return string compiled code */ public function compile($args, Smarty_Internal_SmartyTemplateCompiler $compiler, $parameter) { // check and get attributes $_attr = $this->getAttributes($compiler, $args); $hashResourceName = $fullResourceName = $source_resource = $_attr['file']; $variable_template = false; $cache_tpl = false; // parse resource_name if (preg_match('/^([\'"])(([A-Za-z0-9_\-]{2,})[:])?(([^$()]+)|(.+))\1$/', $source_resource, $match)) { $type = !empty($match[3]) ? $match[3] : $compiler->template->smarty->default_resource_type; $name = !empty($match[5]) ? $match[5] : $match[6]; $handler = Smarty_Resource::load($compiler->smarty, $type); if ($handler->recompiled || $handler->uncompiled) { $variable_template = true; } if (!$variable_template) { if ($type != 'string') { $fullResourceName = "{$type}:{$name}"; $compiled = $compiler->parent_compiler->template->compiled; if (isset($compiled->includes[$fullResourceName])) { $compiled->includes[$fullResourceName] ++; $cache_tpl = true; } else { $compiled->includes[$fullResourceName] = 1; } $fullResourceName = '"' . $fullResourceName . '"'; } } if (empty($match[5])) { $variable_template = true; } } else { $variable_template = true; } if (isset($_attr['assign'])) { // output will be stored in a smarty variable instead of being displayed $_assign = $_attr['assign']; } // scope setup $_scope = Smarty::SCOPE_LOCAL; if (isset($_attr['scope'])) { $_attr['scope'] = trim($_attr['scope'], "'\""); if (!isset($this->valid_scopes[$_attr['scope']])) { $compiler->trigger_template_error("illegal value '{$_attr['scope']}' for \"scope\" attribute", null, true); } if ($_attr['scope'] != 'local') { if ($_attr['scope'] == 'parent') { $_scope = Smarty::SCOPE_PARENT; } elseif ($_attr['scope'] == 'root') { $_scope = Smarty::SCOPE_ROOT; } elseif ($_attr['scope'] == 'global') { $_scope = Smarty::SCOPE_GLOBAL; } elseif ($_attr['scope'] == 'smarty') { $_scope = Smarty::SCOPE_SMARTY; } elseif ($_attr['scope'] == 'tpl_root') { $_scope = Smarty::SCOPE_TPL_ROOT; } if ($_attr['bubble_up'] === true) { $_scope = $_scope + Smarty::SCOPE_BUBBLE_UP; } } } // set flag to cache subtemplate object when called within loop or template name is variable. if ($cache_tpl || $variable_template || $compiler->loopNesting > 0) { $_cache_tpl = 'true'; } else { $_cache_tpl = 'false'; } // assume caching is off $_caching = Smarty::CACHING_OFF; if ($_attr['nocache'] === true) { $compiler->tag_nocache = true; } $call_nocache = $compiler->tag_nocache || $compiler->nocache; // caching was on and {include} is not in nocache mode if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) { $_caching = self::CACHING_NOCACHE_CODE; } // flag if included template code should be merged into caller $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || $_attr['inline'] === true) && !$compiler->template->source->handler->recompiled; if ($merge_compiled_includes && $_attr['inline'] !== true) { // variable template name ? if ($variable_template) { $merge_compiled_includes = false; if ($compiler->template->caching) { // must use individual cache file //$_attr['caching'] = 1; } } // variable compile_id? if (isset($_attr['compile_id'])) { if (!((substr_count($_attr['compile_id'], '"') == 2 || substr_count($_attr['compile_id'], "'") == 2 || is_numeric($_attr['compile_id']))) || substr_count($_attr['compile_id'], '(') != 0 || substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0 ) { $merge_compiled_includes = false; if ($compiler->template->caching) { // must use individual cache file //$_attr['caching'] = 1; } } } } /* * if the {include} tag provides individual parameter for caching or compile_id * the subtemplate must not be included into the common cache file and is treated like * a call in nocache mode. * */ if ($_attr['nocache'] !== true && $_attr['caching']) { $_caching = $_new_caching = (int) $_attr['caching']; $call_nocache = true; } else { $_new_caching = Smarty::CACHING_LIFETIME_CURRENT; } if (isset($_attr['cache_lifetime'])) { $_cache_lifetime = $_attr['cache_lifetime']; $call_nocache = true; $_caching = $_new_caching; } else { $_cache_lifetime = '$_smarty_tpl->cache_lifetime'; } if (isset($_attr['cache_id'])) { $_cache_id = $_attr['cache_id']; $call_nocache = true; $_caching = $_new_caching; } else { $_cache_id = '$_smarty_tpl->cache_id'; } if (isset($_attr['compile_id'])) { $_compile_id = $_attr['compile_id']; } else { $_compile_id = '$_smarty_tpl->compile_id'; } // if subtemplate will be called in nocache mode do not merge if ($compiler->template->caching && $call_nocache) { $merge_compiled_includes = false; } $has_compiled_template = false; if ($merge_compiled_includes) { $c_id = isset($_attr['compile_id']) ? $_attr['compile_id'] : $compiler->template->compile_id; // we must observe different compile_id and caching $t_hash = sha1($c_id . ($_caching ? '--caching' : '--nocaching')); if (!isset($compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash])) { $has_compiled_template = $this->compileInlineTemplate($compiler, $fullResourceName, $_caching, $hashResourceName, $t_hash, $c_id); } else { $has_compiled_template = true; } } // delete {include} standard attributes unset($_attr['file'], $_attr['assign'], $_attr['cache_id'], $_attr['compile_id'], $_attr['cache_lifetime'], $_attr['nocache'], $_attr['caching'], $_attr['scope'], $_attr['inline'], $_attr['bubble_up']); // remaining attributes must be assigned as smarty variable $_vars_nc = ''; if (!empty($_attr)) { if ($_scope == Smarty::SCOPE_LOCAL) { $_pairs = array(); // create variables foreach ($_attr as $key => $value) { $_pairs[] = "'$key'=>$value"; $_vars_nc .= "\$_smarty_tpl->tpl_vars['$key'] = new Smarty_Variable($value);\n"; } $_vars = 'array(' . join(',', $_pairs) . ')'; } else { $compiler->trigger_template_error('variable passing not allowed in parent/global scope', null, true); } } else { $_vars = 'array()'; } $update_compile_id = $compiler->template->caching && !$compiler->tag_nocache && !$compiler->nocache && $_compile_id != '$_smarty_tpl->compile_id'; if ($has_compiled_template && !$call_nocache) { $_output = "makeNocacheCode("\$_compile_id_save[] = \$_smarty_tpl->compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n"); } if (!empty($_vars_nc) && $_caching == 9999 && $compiler->template->caching) { //$compiler->suppressNocacheProcessing = false; $_output .= substr($compiler->processNocacheCode('\n", true), 6, - 3); //$compiler->suppressNocacheProcessing = true; } if (isset($_assign)) { $_output .= "ob_start();\n"; } $_output .= "\$_smarty_tpl->smarty->ext->_subtemplate->render(\$_smarty_tpl, {$fullResourceName}, {$_cache_id}, {$_compile_id}, {$_caching}, {$_cache_lifetime}, {$_vars}, {$_scope}, {$_cache_tpl}, '{$compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['uid']}', '{$compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['func']}');\n"; if (isset($_assign)) { $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n"; } if ($update_compile_id) { $_output .= $compiler->makeNocacheCode("\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n"); } $_output .= "?>\n"; return $_output; } if ($call_nocache) { $compiler->tag_nocache = true; } $_output = "compile_id;\n\$_smarty_tpl->compile_id = {$_compile_id};\n"; } // was there an assign attribute if (isset($_assign)) { $_output .= "ob_start();\n"; } $_output .= "\$_smarty_tpl->smarty->ext->_subtemplate->render(\$_smarty_tpl, {$fullResourceName}, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_scope, {$_cache_tpl});\n"; if (isset($_assign)) { $_output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n"; } if ($update_compile_id) { $_output .= "\$_smarty_tpl->compile_id = array_pop(\$_compile_id_save);\n"; } $_output .= "?>\n"; return $_output; } /** * Compile inline sub template * * @param \Smarty_Internal_SmartyTemplateCompiler $compiler * @param $fullResourceName * @param $_caching * @param $hashResourceName * @param $t_hash * @param $c_id * * @return bool */ public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCompiler $compiler, $fullResourceName, $_caching, $hashResourceName, $t_hash, $c_id) { $compiler->smarty->allow_ambiguous_resources = true; /* @var Smarty_Internal_Template $tpl */ $tpl = new $compiler->smarty->template_class (trim($fullResourceName, '"\''), $compiler->smarty, $compiler->template, $compiler->template->cache_id, $c_id, $_caching); if (!($tpl->source->handler->uncompiled) && $tpl->source->exists) { $compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['uid'] = $tpl->source->uid; if (isset($compiler->template->_inheritance)) { $tpl->_inheritance = clone $compiler->template->_inheritance; } $tpl->compiled = new Smarty_Template_Compiled(); $tpl->compiled->nocache_hash = $compiler->parent_compiler->template->compiled->nocache_hash; $tpl->loadCompiler(); // save unique function name $compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['func'] = $tpl->compiled->unifunc = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); // make sure whole chain gets compiled $tpl->mustCompile = true; $compiler->parent_compiler->mergedSubTemplatesData[$hashResourceName][$t_hash]['nocache_hash'] = $tpl->compiled->nocache_hash; // get compiled code $compiled_code = "source->type}:{$tpl->source->name}\" =============================*/\n"; $compiled_code .= "function {$tpl->compiled->unifunc} (\$_smarty_tpl) {\n"; $compiled_code .= "?>\n" . $tpl->compiler->compileTemplateSource($tpl, null, $compiler->parent_compiler); $compiled_code .= "\n"; $compiled_code .= $tpl->compiler->postFilter($tpl->compiler->blockOrFunctionCode); $compiled_code .= "source->type}:{$tpl->source->name}\" =============================*/\n"; $compiled_code .= "?>"; unset($tpl->compiler); if ($tpl->compiled->has_nocache_code) { // replace nocache_hash $compiled_code = str_replace("{$tpl->compiled->nocache_hash}", $compiler->template->compiled->nocache_hash, $compiled_code); $compiler->template->compiled->has_nocache_code = true; } $compiler->parent_compiler->mergedSubTemplatesCode[$tpl->compiled->unifunc] = $compiled_code; return true; } else { return false; } } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_resource.php0000664000175000017500000002261412717671461023633 0ustar daviddavid 'smarty_internal_resource_file.php', 'string' => 'smarty_internal_resource_string.php', 'extends' => 'smarty_internal_resource_extends.php', 'stream' => 'smarty_internal_resource_stream.php', 'eval' => 'smarty_internal_resource_eval.php', 'php' => 'smarty_internal_resource_php.php'); /** * Flag if resource does implement populateCompiledFilepath() method * * @var bool */ public $hasCompiledHandler = false; /** * Name of the Class to compile this resource's contents with * * @var string */ public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler'; /** * Name of the Class to tokenize this resource's contents with * * @var string */ public $template_lexer_class = 'Smarty_Internal_Templatelexer'; /** * Name of the Class to parse this resource's contents with * * @var string */ public $template_parser_class = 'Smarty_Internal_Templateparser'; /** * Load template's source into current template object * * @param Smarty_Template_Source $source source object * * @return string template source * @throws SmartyException if source cannot be loaded */ abstract public function getContent(Smarty_Template_Source $source); /** * populate Source Object with meta data from Resource * * @param Smarty_Template_Source $source source object * @param Smarty_Internal_Template $_template template object */ abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null); /** * populate Source Object with timestamp and exists from Resource * * @param Smarty_Template_Source $source source object */ public function populateTimestamp(Smarty_Template_Source $source) { // intentionally left blank } /** * modify resource_name according to resource handlers specifications * * @param Smarty $smarty Smarty instance * @param string $resource_name resource_name to make unique * @param boolean $isConfig flag for config resource * * @return string unique resource name */ public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) { if ($isConfig) { if (!isset($smarty->_joined_config_dir)) { $smarty->getTemplateDir(null, true); } return get_class($this) . '#' . $smarty->_joined_config_dir . '#' . $resource_name; } else { if (!isset($smarty->_joined_template_dir)) { $smarty->getTemplateDir(); } return get_class($this) . '#' . $smarty->_joined_template_dir . '#' . $resource_name; } } /** * Determine basename for compiled filename * * @param Smarty_Template_Source $source source object * * @return string resource's basename */ public function getBasename(Smarty_Template_Source $source) { return null; } /** * Load Resource Handler * * @param Smarty $smarty smarty object * @param string $type name of the resource * * @throws SmartyException * @return Smarty_Resource Resource Handler */ public static function load(Smarty $smarty, $type) { // try smarty's cache if (isset($smarty->_cache['resource_handlers'][$type])) { return $smarty->_cache['resource_handlers'][$type]; } // try registered resource if (isset($smarty->registered_resources[$type])) { return $smarty->_cache['resource_handlers'][$type] = $smarty->registered_resources[$type] instanceof Smarty_Resource ? $smarty->registered_resources[$type] : new Smarty_Internal_Resource_Registered(); } // try sysplugins dir if (isset(self::$sysplugins[$type])) { $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type); return $smarty->_cache['resource_handlers'][$type] = new $_resource_class(); } // try plugins dir $_resource_class = 'Smarty_Resource_' . ucfirst($type); if ($smarty->loadPlugin($_resource_class)) { if (class_exists($_resource_class, false)) { return $smarty->_cache['resource_handlers'][$type] = new $_resource_class(); } else { $smarty->registerResource($type, array("smarty_resource_{$type}_source", "smarty_resource_{$type}_timestamp", "smarty_resource_{$type}_secure", "smarty_resource_{$type}_trusted")); // give it another try, now that the resource is registered properly return self::load($smarty, $type); } } // try streams $_known_stream = stream_get_wrappers(); if (in_array($type, $_known_stream)) { // is known stream if (is_object($smarty->security_policy)) { $smarty->security_policy->isTrustedStream($type); } return $smarty->_cache['resource_handlers'][$type] = new Smarty_Internal_Resource_Stream(); } // TODO: try default_(template|config)_handler // give up throw new SmartyException("Unknown resource type '{$type}'"); } /** * extract resource_type and resource_name from template_resource and config_resource * @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including). * * @param string $resource_name template_resource or config_resource to parse * @param string $default_resource the default resource_type defined in $smarty * * @return array with parsed resource name and type */ public static function parseResourceName($resource_name, $default_resource) { if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]/', $resource_name, $match)) { $type = $match[1]; $name = substr($resource_name, strlen($match[0])); } else { // no resource given, use default // or single character before the colon is not a resource type, but part of the filepath $type = $default_resource; $name = $resource_name; } return array($name, $type); } /** * modify template_resource according to resource handlers specifications * * @param \Smarty_Internal_Template|\Smarty $obj Smarty instance * @param string $template_resource template_resource to extract resource handler and name of * * @return string unique resource name */ public static function getUniqueTemplateName($obj, $template_resource) { $smarty = $obj->_objType == 2 ? $obj->smarty : $obj; list($name, $type) = self::parseResourceName($template_resource, $smarty->default_resource_type); // TODO: optimize for Smarty's internal resource types $resource = Smarty_Resource::load($smarty, $type); // go relative to a given template? $_file_is_dotted = $name[0] == '.' && ($name[1] == '.' || $name[1] == '/'); if ($obj->_objType == 2 && $_file_is_dotted && ($obj->source->type == 'file' || $obj->parent->source->type == 'extends') ) { $name = dirname($obj->source->filepath) . DS . $name; } return $resource->buildUniqueResourceName($smarty, $name); } /* * Check if resource must check time stamps when when loading complied or cached templates. * Resources like 'extends' which use source components my disable timestamp checks on own resource. * * @return bool */ public function checkTimestamps() { return true; } /** * initialize Source Object for given resource * wrapper for backward compatibility to versions < 3.1.22 * Either [$_template] or [$smarty, $template_resource] must be specified * * @param Smarty_Internal_Template $_template template object * @param Smarty $smarty smarty object * @param string $template_resource resource identifier * * @return Smarty_Template_Source Source Object */ public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null) { return Smarty_Template_Source::load($_template, $smarty, $template_resource); } } postfixadmin-3.0.2/smarty/libs/sysplugins/smarty_template_compiled.php0000664000175000017500000002447312717671461025500 0ustar daviddavidsource->handler->recompiled && ($_template->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) ) { $_cache_key = $_template->source->unique_resource . '#'; if ($_template->caching) { $_cache_key .= 'caching#'; } $_cache_key .= $_template->compile_id; if (isset($_template->source->compileds[$_cache_key])) { return $_template->source->compileds[$_cache_key]; } } $compiled = new Smarty_Template_Compiled(); if ($_template->source->handler->hasCompiledHandler) { $_template->source->handler->populateCompiledFilepath($compiled, $_template); } else { $compiled->populateCompiledFilepath($_template); } // runtime cache if (!$_template->source->handler->recompiled && ($_template->smarty->resource_cache_mode & Smarty::RESOURCE_CACHE_ON) ) { $_template->source->compileds[$_cache_key] = $compiled; } return $compiled; } /** * populate Compiled Object with compiled filepath * * @param Smarty_Internal_Template $_template template object **/ public function populateCompiledFilepath(Smarty_Internal_Template $_template) { $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w]+!', '_', $_template->compile_id) : null; if ($_template->source->isConfig) { $_flag = '_' . ((int) $_template->smarty->config_read_hidden + (int) $_template->smarty->config_booleanize * 2 + (int) $_template->smarty->config_overwrite * 4); } else { $_flag = '_' . ((int) $_template->smarty->merge_compiled_includes + (int) $_template->smarty->escape_html * 2); } $_filepath = $_template->source->uid . $_flag; // if use_sub_dirs, break file into directories if ($_template->smarty->use_sub_dirs) { $_filepath = substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS . substr($_filepath, 4, 2) . DS . $_filepath; } $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; if (isset($_compile_id)) { $_filepath = $_compile_id . $_compile_dir_sep . $_filepath; } // caching token if ($_template->caching) { $_cache = '.cache'; } else { $_cache = ''; } $_compile_dir = $_template->smarty->getCompileDir(); // set basename if not specified $_basename = $_template->source->handler->getBasename($_template->source); if ($_basename === null) { $_basename = basename(preg_replace('![^\w]+!', '_', $_template->source->name)); } // separate (optional) basename by dot if ($_basename) { $_basename = '.' . $_basename; } $this->filepath = $_compile_dir . $_filepath . '.' . $_template->source->type . $_basename . $_cache . '.php'; $this->exists = is_file($this->filepath); if (!$this->exists) { $this->timestamp = false; } } /** * load compiled template or compile from source * * @param Smarty_Internal_Template $_template * * @throws Exception */ public function process(Smarty_Internal_Template $_template) { $_smarty_tpl = $_template; if ($_template->source->handler->recompiled || !$_template->compiled->exists || $_template->smarty->force_compile || ($_template->smarty->compile_check && $_template->source->getTimeStamp() > $_template->compiled->getTimeStamp()) ) { $this->compileTemplateSource($_template); $compileCheck = $_template->smarty->compile_check; $_template->smarty->compile_check = false; if ($_template->source->handler->recompiled) { $level = ob_get_level(); ob_start(); try { eval("?>" . $this->content); } catch (Exception $e) { while (ob_get_level() > $level) { ob_end_clean(); } throw $e; } ob_get_clean(); $this->content = null; } else { $this->loadCompiledTemplate($_template); } $_template->smarty->compile_check = $compileCheck; } else { $_template->mustCompile = true; @include($_template->compiled->filepath); if ($_template->mustCompile) { $this->compileTemplateSource($_template); $compileCheck = $_template->smarty->compile_check; $_template->smarty->compile_check = false; $this->loadCompiledTemplate($_template); $_template->smarty->compile_check = $compileCheck; } } $_template->smarty->ext->_subTemplate->registerSubTemplates($_template); $this->processed = true; } /** * Load fresh compiled template by including the PHP file * HHVM requires a work around because of a PHP incompatibility * * @param \Smarty_Internal_Template $_template */ private function loadCompiledTemplate(Smarty_Internal_Template $_template) { if (function_exists('opcache_invalidate')) { opcache_invalidate($_template->compiled->filepath); } $_smarty_tpl = $_template; if (defined('HHVM_VERSION')) { $_template->smarty->ext->_hhvm->includeHhvm($_template, $_template->compiled->filepath); } else { include($_template->compiled->filepath); } } /** * render compiled template code * * @param Smarty_Internal_Template $_template * * @return string * @throws Exception */ public function render(Smarty_Internal_Template $_template) { if ($_template->smarty->debugging) { $_template->smarty->_debug->start_render($_template); } if (!$this->processed) { $this->process($_template); } if (isset($_template->cached)) { $_template->cached->file_dependency = array_merge($_template->cached->file_dependency, $this->file_dependency); } $this->getRenderedTemplateCode($_template); if ($_template->caching && $this->has_nocache_code) { $_template->cached->hashes[$this->nocache_hash] = true; } if (isset($_template->parent) && $_template->parent->_objType == 2 && !empty($_template->tpl_function)) { $_template->parent->tpl_function = array_merge($_template->parent->tpl_function, $_template->tpl_function); } if ($_template->smarty->debugging) { $_template->smarty->_debug->end_render($_template); } } /** * compile template from source * * @param Smarty_Internal_Template $_template * * @return string * @throws Exception */ public function compileTemplateSource(Smarty_Internal_Template $_template) { $_template->source->compileds = array(); $this->file_dependency = array(); $this->tpl_function = array(); $this->includes = array(); $this->nocache_hash = null; $this->unifunc = null; // compile locking if (!$_template->source->handler->recompiled) { if ($saved_timestamp = $_template->compiled->getTimeStamp()) { touch($_template->compiled->filepath); } } // call compiler try { $_template->loadCompiler(); $code = $_template->compiler->compileTemplate($_template); } catch (Exception $e) { // restore old timestamp in case of error if (!$_template->source->handler->recompiled && $saved_timestamp) { touch($_template->compiled->filepath, $saved_timestamp); } throw $e; } // compiling succeeded if ($_template->compiler->write_compiled_code) { // write compiled template $this->write($_template, $code); $code = ''; } // release compiler object to free memory unset($_template->compiler); return $code; } /** * Write compiled code by handler * * @param Smarty_Internal_Template $_template template object * @param string $code compiled code * * @return boolean success */ public function write(Smarty_Internal_Template $_template, $code) { if (!$_template->source->handler->recompiled) { if ($_template->smarty->ext->_writeFile->writeFile($this->filepath, $code, $_template->smarty) === true) { $this->timestamp = $this->exists = is_file($this->filepath); if ($this->exists) { $this->timestamp = filemtime($this->filepath); return true; } } return false; } else { $this->content = $code; } $this->timestamp = time(); $this->exists = true; return true; } /** * Read compiled content from handler * * @param Smarty_Internal_Template $_template template object * * @return string content */ public function read(Smarty_Internal_Template $_template) { if (!$_template->source->handler->recompiled) { return file_get_contents($this->filepath); } return isset($this->content) ? $this->content : false; } } postfixadmin-3.0.2/smarty/libs/plugins/0000775000175000017500000000000013046702637017124 5ustar daviddavidpostfixadmin-3.0.2/smarty/libs/plugins/function.html_image.php0000664000175000017500000001231712422277771023576 0ustar daviddavid * Name: html_image
* Date: Feb 24, 2003
* Purpose: format HTML tags for the image
* Examples: {html_image file="/images/masthead.gif"}
* Output:
* Params: *
 * - file        - (required) - file (and path) of image
 * - height      - (optional) - image height (default actual height)
 * - width       - (optional) - image width (default actual width)
 * - basedir     - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
 * - path_prefix - prefix for path output (optional, default empty)
 * 
* * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image} * (Smarty online manual) * @author Monte Ohrt * @author credits to Duda * @version 1.0 * * @param array $params parameters * @param Smarty_Internal_Template $template template object * * @throws SmartyException * @return string * @uses smarty_function_escape_special_chars() */ function smarty_function_html_image($params, $template) { require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); $alt = ''; $file = ''; $height = ''; $width = ''; $extra = ''; $prefix = ''; $suffix = ''; $path_prefix = ''; $basedir = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : ''; foreach ($params as $_key => $_val) { switch ($_key) { case 'file': case 'height': case 'width': case 'dpi': case 'path_prefix': case 'basedir': $$_key = $_val; break; case 'alt': if (!is_array($_val)) { $$_key = smarty_function_escape_special_chars($_val); } else { throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); } break; case 'link': case 'href': $prefix = ''; $suffix = ''; break; default: if (!is_array($_val)) { $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; } else { throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE); } break; } } if (empty($file)) { trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE); return; } if ($file[0] == '/') { $_image_path = $basedir . $file; } else { $_image_path = $file; } // strip file protocol if (stripos($params['file'], 'file://') === 0) { $params['file'] = substr($params['file'], 7); } $protocol = strpos($params['file'], '://'); if ($protocol !== false) { $protocol = strtolower(substr($params['file'], 0, $protocol)); } if (isset($template->smarty->security_policy)) { if ($protocol) { // remote resource (or php stream, …) if (!$template->smarty->security_policy->isTrustedUri($params['file'])) { return; } } else { // local file if (!$template->smarty->security_policy->isTrustedResourceDir($_image_path)) { return; } } } if (!isset($params['width']) || !isset($params['height'])) { // FIXME: (rodneyrehm) getimagesize() loads the complete file off a remote resource, use custom [jpg,png,gif]header reader! if (!$_image_data = @getimagesize($_image_path)) { if (!file_exists($_image_path)) { trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE); return; } elseif (!is_readable($_image_path)) { trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE); return; } else { trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE); return; } } if (!isset($params['width'])) { $width = $_image_data[0]; } if (!isset($params['height'])) { $height = $_image_data[1]; } } if (isset($params['dpi'])) { if (strstr($_SERVER['HTTP_USER_AGENT'], 'Mac')) { // FIXME: (rodneyrehm) wrong dpi assumption // don't know who thought this up… even if it was true in 1998, it's definitely wrong in 2011. $dpi_default = 72; } else { $dpi_default = 96; } $_resize = $dpi_default / $params['dpi']; $width = round($width * $_resize); $height = round($height * $_resize); } return $prefix . '' . $alt . '' . $suffix; } postfixadmin-3.0.2/smarty/libs/plugins/modifier.spacify.php0000664000175000017500000000137612422277771023102 0ustar daviddavid * Name: spacify
* Purpose: add spaces between characters in a string * * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual) * @author Monte Ohrt * * @param string $string input string * @param string $spacify_char string to insert between characters. * * @return string */ function smarty_modifier_spacify($string, $spacify_char = ' ') { // well… what about charsets besides latin and UTF-8? return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, - 1, PREG_SPLIT_NO_EMPTY)); } postfixadmin-3.0.2/smarty/libs/plugins/modifiercompiler.unescape.php0000664000175000017500000000223612422277771024776 0ustar daviddavid * Name: unescape
* Purpose: unescape html entities * * @author Rodney Rehm * * @param array $params parameters * * @return string with compiled code */ function smarty_modifiercompiler_unescape($params) { if (!isset($params[1])) { $params[1] = 'html'; } if (!isset($params[2])) { $params[2] = '\'' . addslashes(Smarty::$_CHARSET) . '\''; } else { $params[2] = "'" . $params[2] . "'"; } switch (trim($params[1], '"\'')) { case 'entity': case 'htmlall': if (Smarty::$_MBSTRING) { return 'mb_convert_encoding(' . $params[0] . ', ' . $params[2] . ', \'HTML-ENTITIES\')'; } return 'html_entity_decode(' . $params[0] . ', ENT_NOQUOTES, ' . $params[2] . ')'; case 'html': return 'htmlspecialchars_decode(' . $params[0] . ', ENT_QUOTES)'; case 'url': return 'rawurldecode(' . $params[0] . ')'; default: return $params[0]; } } postfixadmin-3.0.2/smarty/libs/plugins/modifier.escape.php0000664000175000017500000001632012422277771022677 0ustar daviddavid * Name: escape
* Purpose: escape string for output * * @link http://www.smarty.net/docs/en/language.modifier.escape * @author Monte Ohrt * * @param string $string input string * @param string $esc_type escape type * @param string $char_set character set, used for htmlspecialchars() or htmlentities() * @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities() * * @return string escaped input string */ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true) { static $_double_encode = null; if ($_double_encode === null) { $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>='); } if (!$char_set) { $char_set = Smarty::$_CHARSET; } switch ($esc_type) { case 'html': if ($_double_encode) { // php >=5.3.2 - go native return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode); } else { if ($double_encode) { // php <5.2.3 - only handle double encoding return htmlspecialchars($string, ENT_QUOTES, $char_set); } else { // php <5.2.3 - prevent double encoding $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); $string = htmlspecialchars($string, ENT_QUOTES, $char_set); $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); return $string; } } case 'htmlall': if (Smarty::$_MBSTRING) { // mb_convert_encoding ignores htmlspecialchars() if ($_double_encode) { // php >=5.3.2 - go native $string = htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode); } else { if ($double_encode) { // php <5.2.3 - only handle double encoding $string = htmlspecialchars($string, ENT_QUOTES, $char_set); } else { // php <5.2.3 - prevent double encoding $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); $string = htmlspecialchars($string, ENT_QUOTES, $char_set); $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); return $string; } } // htmlentities() won't convert everything, so use mb_convert_encoding return mb_convert_encoding($string, 'HTML-ENTITIES', $char_set); } // no MBString fallback if ($_double_encode) { return htmlentities($string, ENT_QUOTES, $char_set, $double_encode); } else { if ($double_encode) { return htmlentities($string, ENT_QUOTES, $char_set); } else { $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string); $string = htmlentities($string, ENT_QUOTES, $char_set); $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); return $string; } } case 'url': return rawurlencode($string); case 'urlpathinfo': return str_replace('%2F', '/', rawurlencode($string)); case 'quotes': // escape unescaped single quotes return preg_replace("%(? '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', ' '<\/')); case 'mail': if (Smarty::$_MBSTRING) { require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); return smarty_mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); } // no MBString fallback return str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string); case 'nonstd': // escape non-standard chars, such as ms document quotes $return = ''; if (Smarty::$_MBSTRING) { require_once(SMARTY_PLUGINS_DIR . 'shared.mb_unicode.php'); foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) { if ($unicode >= 126) { $return .= '&#' . $unicode . ';'; } else { $return .= chr($unicode); } } return $return; } $_length = strlen($string); for ($_i = 0; $_i < $_length; $_i ++) { $_ord = ord(substr($string, $_i, 1)); // non-standard char, escape it if ($_ord >= 126) { $return .= '&#' . $_ord . ';'; } else { $return .= substr($string, $_i, 1); } } return $return; default: return $string; } } postfixadmin-3.0.2/smarty/libs/plugins/modifier.debug_print_var.php0000664000175000017500000000754612717671461024624 0ustar daviddavid * Name: debug_print_var
* Purpose: formats variable contents for display in the console * * @author Monte Ohrt * * @param array|object $var variable to be formatted * @param int $max maximum recursion depth if $var is an array or object * @param int $length maximum string length if $var is a string * @param int $depth actual recursion depth * @param array $objects processed objects in actual depth to prevent recursive object processing * * @return string */ function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, $depth = 0, $objects = array()) { $_replace = array("\n" => '\n', "\r" => '\r', "\t" => '\t' ); switch (gettype($var)) { case 'array' : $results = 'Array (' . count($var) . ')'; if ($depth == $max) { break; } foreach ($var as $curr_key => $curr_val) { $results .= '
' . str_repeat(' ', $depth * 2) . '' . strtr($curr_key, $_replace) . ' => ' . smarty_modifier_debug_print_var($curr_val, $max, $length, ++ $depth, $objects); $depth --; } break; case 'object' : $object_vars = get_object_vars($var); $results = '' . get_class($var) . ' Object (' . count($object_vars) . ')'; if (in_array($var, $objects)) { $results .= ' called recursive'; break; } if ($depth == $max) { break; } $objects[] = $var; foreach ($object_vars as $curr_key => $curr_val) { $results .= '
' . str_repeat(' ', $depth * 2) . ' ->' . strtr($curr_key, $_replace) . ' = ' . smarty_modifier_debug_print_var($curr_val, $max, $length, ++ $depth, $objects); $depth --; } break; case 'boolean' : case 'NULL' : case 'resource' : if (true === $var) { $results = 'true'; } elseif (false === $var) { $results = 'false'; } elseif (null === $var) { $results = 'null'; } else { $results = htmlspecialchars((string) $var); } $results = '' . $results . ''; break; case 'integer' : case 'float' : $results = htmlspecialchars((string) $var); break; case 'string' : $results = strtr($var, $_replace); if (Smarty::$_MBSTRING) { if (mb_strlen($var, Smarty::$_CHARSET) > $length) { $results = mb_substr($var, 0, $length - 3, Smarty::$_CHARSET) . '...'; } } else { if (isset($var[$length])) { $results = substr($var, 0, $length - 3) . '...'; } } $results = htmlspecialchars('"' . $results . '"'); break; case 'unknown type' : default : $results = strtr((string) $var, $_replace); if (Smarty::$_MBSTRING) { if (mb_strlen($results, Smarty::$_CHARSET) > $length) { $results = mb_substr($results, 0, $length - 3, Smarty::$_CHARSET) . '...'; } } else { if (strlen($results) > $length) { $results = substr($results, 0, $length - 3) . '...'; } } $results = htmlspecialchars($results); } return $results; } postfixadmin-3.0.2/smarty/libs/plugins/modifiercompiler.strip_tags.php0000664000175000017500000000132012717671461025344 0ustar daviddavid * Name: strip_tags
* Purpose: strip html tags from text * * @link http://www.smarty.net/docs/en/language.modifier.strip.tags.tpl strip_tags (Smarty online manual) * @author Uwe Tews * * @param array $params parameters * * @return string with compiled code */ function smarty_modifiercompiler_strip_tags($params) { if (!isset($params[1]) || $params[1] === true || trim($params[1], '"') == 'true') { return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})"; } else { return 'strip_tags(' . $params[0] . ')'; } } postfixadmin-3.0.2/smarty/libs/plugins/modifier.replace.php0000664000175000017500000000150112422277771023045 0ustar daviddavid * Name: replace
* Purpose: simple search/replace * * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual) * @author Monte Ohrt * @author Uwe Tews * * @param string $string input string * @param string $search text to search for * @param string $replace replacement text * * @return string */ function smarty_modifier_replace($string, $search, $replace) { if (Smarty::$_MBSTRING) { require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'); return smarty_mb_str_replace($search, $replace, $string); } return str_replace($search, $replace, $string); } postfixadmin-3.0.2/smarty/libs/plugins/shared.mb_unicode.php0000664000175000017500000000277612422277771023225 0ustar daviddavid * Name: count_characteres
* Purpose: count the number of characters in a text * * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual) * @author Uwe Tews * * @param array $params parameters * * @return string with compiled code */ function smarty_modifiercompiler_count_characters($params) { if (!isset($params[1]) || $params[1] != 'true') { return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)'; } if (Smarty::$_MBSTRING) { return 'mb_strlen(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; } // no MBString fallback return 'strlen(' . $params[0] . ')'; } postfixadmin-3.0.2/smarty/libs/plugins/variablefilter.htmlspecialchars.php0000664000175000017500000000053712422277771026165 0ustar daviddavid * Name: capitalize
* Purpose: capitalize words in the string * {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }} * * @param string $string string to capitalize * @param boolean $uc_digits also capitalize "x123" to "X123" * @param boolean $lc_rest capitalize first letters, lowercase all following letters "aAa" to "Aaa" * * @return string capitalized string * @author Monte Ohrt * @author Rodney Rehm */ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false) { if (Smarty::$_MBSTRING) { if ($lc_rest) { // uppercase (including hyphenated words) $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET); } else { // uppercase word breaks $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert_cb', $string); } // check uc_digits case if (!$uc_digits) { if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) { foreach ($matches[1] as $match) { $upper_string = substr_replace($upper_string, mb_strtolower($match[0], Smarty::$_CHARSET), $match[1], strlen($match[0])); } } } $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert2_cb', $upper_string); return $upper_string; } // lowercase first if ($lc_rest) { $string = strtolower($string); } // uppercase (including hyphenated words) $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst_cb', $string); // check uc_digits case if (!$uc_digits) { if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) { foreach ($matches[1] as $match) { $upper_string = substr_replace($upper_string, strtolower($match[0]), $match[1], strlen($match[0])); } } } $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst2_cb', $upper_string); return $upper_string; } /* * * Bug: create_function() use exhausts memory when used in long loops * Fix: use declared functions for callbacks instead of using create_function() * Note: This can be fixed using anonymous functions instead, but that requires PHP >= 5.3 * * @author Kyle Renfrow */ function smarty_mod_cap_mbconvert_cb($matches) { return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, Smarty::$_CHARSET); } function smarty_mod_cap_mbconvert2_cb($matches) { return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[3]), MB_CASE_UPPER, Smarty::$_CHARSET); } function smarty_mod_cap_ucfirst_cb($matches) { return stripslashes($matches[1]) . ucfirst(stripslashes($matches[2])); } function smarty_mod_cap_ucfirst2_cb($matches) { return stripslashes($matches[1]) . ucfirst(stripslashes($matches[3])); } postfixadmin-3.0.2/smarty/libs/plugins/modifier.date_format.php0000664000175000017500000000435212717671461023727 0ustar daviddavid * Name: date_format
* Purpose: format datestamps via strftime
* Input:
* - string: input date string * - format: strftime format for output * - default_date: default date if $string is empty * * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual) * @author Monte Ohrt * * @param string $string input date string * @param string $format strftime format for output * @param string $default_date default date if $string is empty * @param string $formatter either 'strftime' or 'auto' * * @return string |void * @uses smarty_make_timestamp() */ function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto') { if ($format === null) { $format = Smarty::$_DATE_FORMAT; } /** * require_once the {@link shared.make_timestamp.php} plugin */ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') { $timestamp = smarty_make_timestamp($string); } elseif ($default_date != '') { $timestamp = smarty_make_timestamp($default_date); } else { return; } if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) { if (DS == '\\') { $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T'); $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S'); if (strpos($format, '%e') !== false) { $_win_from[] = '%e'; $_win_to[] = sprintf('%\' 2d', date('j', $timestamp)); } if (strpos($format, '%l') !== false) { $_win_from[] = '%l'; $_win_to[] = sprintf('%\' 2d', date('h', $timestamp)); } $format = str_replace($_win_from, $_win_to, $format); } return strftime($format, $timestamp); } else { return date($format, $timestamp); } } postfixadmin-3.0.2/smarty/libs/plugins/function.cycle.php0000664000175000017500000000632712422277771022573 0ustar daviddavid * Name: cycle
* Date: May 3, 2002
* Purpose: cycle through given values
* Params: *
 * - name      - name of cycle (optional)
 * - values    - comma separated list of values to cycle, or an array of values to cycle
 *               (this can be left out for subsequent calls)
 * - reset     - boolean - resets given var to true
 * - print     - boolean - print var or not. default is true
 * - advance   - boolean - whether or not to advance the cycle
 * - delimiter - the value delimiter, default is ","
 * - assign    - boolean, assigns to template var instead of printed.
 * 
* Examples:
*
 * {cycle values="#eeeeee,#d0d0d0d"}
 * {cycle name=row values="one,two,three" reset=true}
 * {cycle name=row}
 * 
* * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle} * (Smarty online manual) * @author Monte Ohrt * @author credit to Mark Priatel * @author credit to Gerard * @author credit to Jason Sweat * @version 1.3 * * @param array $params parameters * @param Smarty_Internal_Template $template template object * * @return string|null */ function smarty_function_cycle($params, $template) { static $cycle_vars; $name = (empty($params['name'])) ? 'default' : $params['name']; $print = (isset($params['print'])) ? (bool) $params['print'] : true; $advance = (isset($params['advance'])) ? (bool) $params['advance'] : true; $reset = (isset($params['reset'])) ? (bool) $params['reset'] : false; if (!isset($params['values'])) { if (!isset($cycle_vars[$name]['values'])) { trigger_error("cycle: missing 'values' parameter"); return; } } else { if (isset($cycle_vars[$name]['values']) && $cycle_vars[$name]['values'] != $params['values'] ) { $cycle_vars[$name]['index'] = 0; } $cycle_vars[$name]['values'] = $params['values']; } if (isset($params['delimiter'])) { $cycle_vars[$name]['delimiter'] = $params['delimiter']; } elseif (!isset($cycle_vars[$name]['delimiter'])) { $cycle_vars[$name]['delimiter'] = ','; } if (is_array($cycle_vars[$name]['values'])) { $cycle_array = $cycle_vars[$name]['values']; } else { $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']); } if (!isset($cycle_vars[$name]['index']) || $reset) { $cycle_vars[$name]['index'] = 0; } if (isset($params['assign'])) { $print = false; $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]); } if ($print) { $retval = $cycle_array[$cycle_vars[$name]['index']]; } else { $retval = null; } if ($advance) { if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) { $cycle_vars[$name]['index'] = 0; } else { $cycle_vars[$name]['index'] ++; } } return $retval; } postfixadmin-3.0.2/smarty/libs/plugins/modifiercompiler.upper.php0000664000175000017500000000125312422277771024324 0ustar daviddavid * Name: lower
* Purpose: convert string to uppercase * * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual) * @author Uwe Tews * * @param array $params parameters * * @return string with compiled code */ function smarty_modifiercompiler_upper($params) { if (Smarty::$_MBSTRING) { return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; } // no MBString fallback return 'strtoupper(' . $params[0] . ')'; } postfixadmin-3.0.2/smarty/libs/plugins/block.textformat.php0000664000175000017500000000622412422277771023132 0ustar daviddavid * Name: textformat
* Purpose: format text a certain way with preset styles * or custom wrap/indent settings
* Params: *
 * - style         - string (email)
 * - indent        - integer (0)
 * - wrap          - integer (80)
 * - wrap_char     - string ("\n")
 * - indent_char   - string (" ")
 * - wrap_boundary - boolean (true)
 * 
* * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat} * (Smarty online manual) * * @param array $params parameters * @param string $content contents of the block * @param Smarty_Internal_Template $template template object * @param boolean &$repeat repeat flag * * @return string content re-formatted * @author Monte Ohrt */ function smarty_block_textformat($params, $content, $template, &$repeat) { if (is_null($content)) { return; } $style = null; $indent = 0; $indent_first = 0; $indent_char = ' '; $wrap = 80; $wrap_char = "\n"; $wrap_cut = false; $assign = null; foreach ($params as $_key => $_val) { switch ($_key) { case 'style': case 'indent_char': case 'wrap_char': case 'assign': $$_key = (string) $_val; break; case 'indent': case 'indent_first': case 'wrap': $$_key = (int) $_val; break; case 'wrap_cut': $$_key = (bool) $_val; break; default: trigger_error("textformat: unknown attribute '$_key'"); } } if ($style == 'email') { $wrap = 72; } // split into paragraphs $_paragraphs = preg_split('![\r\n]{2}!', $content); foreach ($_paragraphs as &$_paragraph) { if (!$_paragraph) { continue; } // convert mult. spaces & special chars to single space $_paragraph = preg_replace(array('!\s+!' . Smarty::$_UTF8_MODIFIER, '!(^\s+)|(\s+$)!' . Smarty::$_UTF8_MODIFIER), array(' ', ''), $_paragraph); // indent first line if ($indent_first > 0) { $_paragraph = str_repeat($indent_char, $indent_first) . $_paragraph; } // wordwrap sentences if (Smarty::$_MBSTRING) { require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php'); $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); } else { $_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut); } // indent lines if ($indent > 0) { $_paragraph = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraph); } } $_output = implode($wrap_char . $wrap_char, $_paragraphs); if ($assign) { $template->assign($assign, $_output); } else { return $_output; } } postfixadmin-3.0.2/smarty/libs/plugins/modifiercompiler.count_sentences.php0000664000175000017500000000135612422277771026374 0ustar daviddavid * Name: count_sentences * Purpose: count the number of sentences in a text * * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php * count_sentences (Smarty online manual) * @author Uwe Tews * * @param array $params parameters * * @return string with compiled code */ function smarty_modifiercompiler_count_sentences($params) { // find periods, question marks, exclamation marks with a word before but not after. return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)'; } postfixadmin-3.0.2/smarty/libs/plugins/modifiercompiler.strip.php0000664000175000017500000000145512422277771024336 0ustar daviddavid * Name: strip
* Purpose: Replace all repeated spaces, newlines, tabs * with a single space or supplied replacement string.
* Example: {$var|strip} {$var|strip:" "}
* Date: September 25th, 2002 * * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual) * @author Uwe Tews * * @param array $params parameters * * @return string with compiled code */ function smarty_modifiercompiler_strip($params) { if (!isset($params[1])) { $params[1] = "' '"; } return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})"; } postfixadmin-3.0.2/smarty/libs/plugins/function.html_radios.php0000664000175000017500000001570512422277771024001 0ustar daviddavid * Type: function
* Name: html_radios
* Date: 24.Feb.2003
* Purpose: Prints out a list of radio input types
* Params: *
 * - name       (optional) - string default "radio"
 * - values     (required) - array
 * - options    (required) - associative array
 * - checked    (optional) - array default not set
 * - separator  (optional) - ie 
or   * - output (optional) - the output next to each radio button * - assign (optional) - assign the output as an array to this variable * - escape (optional) - escape the content (not value), defaults to true *
* Examples: *
 * {html_radios values=$ids output=$names}
 * {html_radios values=$ids name='box' separator='
' output=$names} * {html_radios values=$ids checked=$checked separator='
' output=$names} *
* * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios} * (Smarty online manual) * @author Christopher Kvarme * @author credits to Monte Ohrt * @version 1.0 * * @param array $params parameters * @param Smarty_Internal_Template $template template object * * @return string * @uses smarty_function_escape_special_chars() */ function smarty_function_html_radios($params, $template) { require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'); $name = 'radio'; $values = null; $options = null; $selected = null; $separator = ''; $escape = true; $labels = true; $label_ids = false; $output = null; $extra = ''; foreach ($params as $_key => $_val) { switch ($_key) { case 'name': case 'separator': $$_key = (string) $_val; break; case 'checked': case 'selected': if (is_array($_val)) { trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING); } elseif (is_object($_val)) { if (method_exists($_val, "__toString")) { $selected = smarty_function_escape_special_chars((string) $_val->__toString()); } else { trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE); } } else { $selected = (string) $_val; } break; case 'escape': case 'labels': case 'label_ids': $$_key = (bool) $_val; break; case 'options': $$_key = (array) $_val; break; case 'values': case 'output': $$_key = array_values((array) $_val); break; case 'radios': trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING); $options = (array) $_val; break; case 'assign': break; case 'strict': break; case 'disabled': case 'readonly': if (!empty($params['strict'])) { if (!is_scalar($_val)) { trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE); } if ($_val === true || $_val === $_key) { $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"'; } break; } // omit break; to fall through! default: if (!is_array($_val)) { $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"'; } else { trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE); } break; } } if (!isset($options) && !isset($values)) { /* raise error here? */ return ''; } $_html_result = array(); if (isset($options)) { foreach ($options as $_key => $_val) { $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); } } else { foreach ($values as $_i => $_key) { $_val = isset($output[$_i]) ? $output[$_i] : ''; $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape); } } if (!empty($params['assign'])) { $template->assign($params['assign'], $_html_result); } else { return implode("\n", $_html_result); } } function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape) { $_output = ''; if (is_object($value)) { if (method_exists($value, "__toString")) { $value = (string) $value->__toString(); } else { trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE); return ''; } } else { $value = (string) $value; } if (is_object($output)) { if (method_exists($output, "__toString")) { $output = (string) $output->__toString(); } else { trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE); return ''; } } else { $output = (string) $output; } if ($labels) { if ($label_ids) { $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value)); $_output .= '