web/lib/Zend/Validate/PostCode.php
author Nicolas Sauret <nicolas.sauret@iri.centrepompidou.fr>
Thu, 07 Nov 2013 17:56:32 +0100
changeset 983 788ffa17cb01
parent 807 877f952ae2bd
child 1230 68c69c656a2c
permissions -rw-r--r--
Add Muséo#1 & EcologieAttention #2

<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_Validate
 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 * @version    $Id: PostCode.php 24593 2012-01-05 20:35:02Z matthew $
 */

/**
 * @see Zend_Validate_Abstract
 */
require_once 'Zend/Validate/Abstract.php';

/**
 * @see Zend_Locale_Format
 */
require_once 'Zend/Locale/Format.php';

/**
 * @category   Zend
 * @package    Zend_Validate
 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class Zend_Validate_PostCode extends Zend_Validate_Abstract
{
    const INVALID  = 'postcodeInvalid';
    const NO_MATCH = 'postcodeNoMatch';

    /**
     * @var array
     */
    protected $_messageTemplates = array(
        self::INVALID  => "Invalid type given. String or integer expected",
        self::NO_MATCH => "'%value%' does not appear to be a postal code",
    );

    /**
     * Locale to use
     *
     * @var string
     */
    protected $_locale;

    /**
     * Manual postal code format
     *
     * @var unknown_type
     */
    protected $_format;

    /**
     * Constructor for the integer validator
     *
     * Accepts either a string locale, a Zend_Locale object, or an array or
     * Zend_Config object containing the keys "locale" and/or "format".
     *
     * @param string|Zend_Locale|array|Zend_Config $options
     * @throws Zend_Validate_Exception On empty format
     */
    public function __construct($options = null)
    {
        if ($options instanceof Zend_Config) {
            $options = $options->toArray();
        }

        if (empty($options)) {
            require_once 'Zend/Registry.php';
            if (Zend_Registry::isRegistered('Zend_Locale')) {
                $this->setLocale(Zend_Registry::get('Zend_Locale'));
            }
        } elseif (is_array($options)) {
            // Received
            if (array_key_exists('locale', $options)) {
                $this->setLocale($options['locale']);
            }

            if (array_key_exists('format', $options)) {
                $this->setFormat($options['format']);
            }
        } elseif ($options instanceof Zend_Locale || is_string($options)) {
            // Received Locale object or string locale
            $this->setLocale($options);
        }

        $format = $this->getFormat();
        if (empty($format)) {
            require_once 'Zend/Validate/Exception.php';
            throw new Zend_Validate_Exception("A postcode-format string has to be given for validation");
        }
    }

    /**
     * Returns the set locale
     *
     * @return string|Zend_Locale The set locale
     */
    public function getLocale()
    {
        return $this->_locale;
    }

    /**
     * Sets the locale to use
     *
     * @param string|Zend_Locale $locale
     * @throws Zend_Validate_Exception On unrecognised region
     * @throws Zend_Validate_Exception On not detected format
     * @return Zend_Validate_PostCode  Provides fluid interface
     */
    public function setLocale($locale = null)
    {
        require_once 'Zend/Locale.php';
        $this->_locale = Zend_Locale::findLocale($locale);
        $locale        = new Zend_Locale($this->_locale);
        $region        = $locale->getRegion();
        if (empty($region)) {
            require_once 'Zend/Validate/Exception.php';
            throw new Zend_Validate_Exception("Unable to detect a region for the locale '$locale'");
        }

        $format = Zend_Locale::getTranslation(
            $locale->getRegion(),
            'postaltoterritory',
            $this->_locale
        );

        if (empty($format)) {
            require_once 'Zend/Validate/Exception.php';
            throw new Zend_Validate_Exception("Unable to detect a postcode format for the region '{$locale->getRegion()}'");
        }

        $this->setFormat($format);
        return $this;
    }

    /**
     * Returns the set postal code format
     *
     * @return string
     */
    public function getFormat()
    {
        return $this->_format;
    }

    /**
     * Sets a self defined postal format as regex
     *
     * @param string $format
     * @throws Zend_Validate_Exception On empty format
     * @return Zend_Validate_PostCode  Provides fluid interface
     */
    public function setFormat($format)
    {
        if (empty($format) || !is_string($format)) {
            require_once 'Zend/Validate/Exception.php';
            throw new Zend_Validate_Exception("A postcode-format string has to be given for validation");
        }

        if ($format[0] !== '/') {
            $format = '/^' . $format;
        }

        if ($format[strlen($format) - 1] !== '/') {
            $format .= '$/';
        }

        $this->_format = $format;
        return $this;
    }

    /**
     * Defined by Zend_Validate_Interface
     *
     * Returns true if and only if $value is a valid postalcode
     *
     * @param  string $value
     * @return boolean
     */
    public function isValid($value)
    {
        $this->_setValue($value);
        if (!is_string($value) && !is_int($value)) {
            $this->_error(self::INVALID);
            return false;
        }

        $format = $this->getFormat();
        if (!preg_match($format, $value)) {
            $this->_error(self::NO_MATCH);
            return false;
        }

        return true;
    }
}
jIH ë[4ڮ:#I5bVS1 Wt֖rklQ]vbL٫e>lv>bҳ okXQʑD[g!d~KB|aq1W֒wQQ¯mZ:lיG5p71#gxHM.."m<%_S>8.&]sYmMzyl;?v3+APQ3{j׭/Mʙa'F%TSN'EgnU!7 L@~\$oS8`b&cA'%ᲄFwj\R-`UrYVTX]dmRJ8s8yqe\!3ڢR-:J:ai_aO#ͬQcӉ\Mi.'. Њ/%Y Qy|h]-9[Afмb^unrbA.\]wo<"4 k9ZB,T}m~ӉF5iB\;$N68 O"w%tOLl9zWm>4B/ vvqI8~O:][T(9''%m][I TxqY_*Hsg* oa*埖KLdh5bzyr׭}%ӓ(i x:_-HN{+=Q0DJr[.~wA)UraҋT?Cfv,k"041tqyt ^)11Rȋz.Z%x:&e+C+b0q{꽾[⽖x]Oi[Z4h*pi}iڿ9zWֻQW6ŃVO^멽-L5E2ddU|bLa]yE$r[ool#|D^ot[fELQ[,AR6v62eYN#qHJWF=pWPH162=rUe:Mch>KP=5)-3DhJ$$鳥[٦I C)QfciM,rێ@"l3c8/qoc"OO>WV̭\O Ok[~_3Doc9+~ELh-Ҥ<8E Dպ<&a^^_>!~߅U~1Q_<}^_$yb›ܥfJ(v[YJ@$Tl$lI!jD|P 3pᏵTG|.C ˊ73O\9vɿg>O#@1v1q~QC<"atܐJiT#zWN0DS$BIl-0{]Q-.O0_*~8)چ1Sg]ZEH72I]썿{<2V2'sZ1B =|x@bI +l٧];)\Y+G;̯_y֚}o'&ΛN"i?gA^DbOw E >g_:lI4Gjk k%zb485aLeʴ}3j-=.\wԭޮ!\D;țd?-(sm{D=Z2 OuY:TH;nHi#Ŗ޶d Dp"A5׀0ag/ r_Vt*o1eYfK[z4D ǡ1 "3oĦ9AzC4g0k2uUU aI@ܣW{0>>^fǹ.ٸlt=Q@|t̑ WtlM-%H"t~UCTea)uJCRߧDZ* s$ H ڞ.9 VKXӍ}i=]O'yF2n+"/GXF'![еeVQ״9{VƑԛNuvRZnv_Ͽ?ԥ)/_1Q?ٍ7)HT[SiMZe2;Q`ij1?\ˏ܎KmLn"hWJ!T5<" o}LZ'<#n> l;gGѦbhR#{%vE)k)y:<215v|YKg"Cóg/0-V񃇟qf+9} =b^9M@h2 DUƮli_4ȱV|/S [ogŜ͌@)MbyU6ӫҩjy[V*5ܣUXk;ۯ:!s $" &JU3a"půhzwؙSpVx4x893vhijۊETQ&Ѭ8|C3*:o#kߍRqBؼLpM^ \"`zQ;|U6S}IGLLERg!=Q/:pO##}߃vݤ 'm{ JEm,wU&}:?PZkKVv$+t}擩22 ஘NMZmd!j??w<6 AH~LS4S{pZ5h56SfV8yCFߍo{Wdžlϒ8"HU Cb=Sq.\Wr :;>;ޛ-+ł&NI(vvlժCL ˶ R^!~&ȶE.9jv×s !%HnK-yy|= ޫnqslww1O#\&*&鋋h;+ƪMErざ'R 0:aS7722nƅ C9Ñx6h'OM%!p}|8kϗK${î{g\:tv=kKvOOvbA<`%6Ae9Bej"zvF*w;e@GMqT8@؂zv1V,g /̔'=XՙR6^$u‘G.t*9q2Hb1!#ur z #;ikLF].#Zvuߘ'u#<پZ;zM_èPbϷT,SwG;,[TW׏Z{;scFҥzR xbk-OV.uun\19IH M=YE楄sx41Dtb$D>4n P}ci1Kxe1P>Hc;Dþ =A > r 9wOюJygv$BUYk`}>YTbH41p%>v:5./Cp%𔚿qvpѭm+ ^!G%cW'°ѧ $F9ْO${9 jh$Q?A?Q;҉ A]M'xi?ޖS;zP]R[p؈ؑR=CRt\*߽YF{;/YL'7Y8_kv5dte$*BLp'ɜKrc#֘tQٔD{SHDѨqqg0D5JJea X,eOE#]z $PVvTC/ 1F0stb xN}$%!U7e`s"uo5 ec r}gg#Up(ڦ(O! ~4Jj]{dSS;Oyd|Udt;|.UU٫Gd,uUr1Z<oR ;iTSWby_,!.̓ ݩkψi2qm=" 0_)M9&Aj^^ bWyw\_6*==W1\1`;_` wT{ރ0"m+ҡc!!24ɓ!#Q3Py7`f Z٠,_;>0Yc0aWNC/ЕZ`U6lLa[ 6]\Z1+Ɇ~Pcg7'%ט99&Vmw.Xmy\z>2O0$&HJ&@zoFb[e&, p1ŽIW&8gᕖ44WΝrlREeSت׷jzt^}bkC6IL]of礙I0x|ϐ ary#˫AǭHuX)eWGJ4ԣq1qel]Sr KC <E8z"z5،aQb:qOq1lԏeKh!ߦlƶ{2#{uHYvkmʧk tP, 2'a.suMV;039ѩྋ~\D@{"2$QH+;K-3:WwZVAz] K㙎oqFy`j_C7a[^9nX(_?.0K`h'M{Zb 沣 3"bŋ;={ve :΢%nenA]ŗNEd8#WJ8buW4-4 [cs[Jn[u6DkQ"\ǔqT^8PAuE䥄 u4g#9 ڎ;x[Qucy.d3>C.s5_$|"4%)|[V:zxLc;M"z#! ȴf F6uBH-Ibƨm~O/ZlQnk+^[[l5c,<]jo,Rk1PG%; 3Qp6FcCV;i:'y&^>MK,ٟP~7L,g0f_^iJ)3&VY}D== ĜI<" MI9{I?&̝~Y";JNܟ14MIpN6qN `"MPOt?b#?Oӊ?ZI^w~l۷I oc6ms_ ( rD1ݱt wͥv1d߻P4rkJe@. ǔ^v˿;NYg%,g9@|-k VLԕFX,u;~OP a{kFca(2S(6O?$}XDg0 `3ԒC}~7mlwfI!<%M&5Wm2)%ث!LF=Ӧdc F݃"{b /vʉ<^Lv)<PQm *Q/'eykx "+?g]ߧzjƪ6$!L  ě𤤙KER".wDD qGQg38uNe=g+b'<4FZƁC; u`e0֎Y<:' ҵ 73j;Dze{fͱ|X|rVGYfqKp۷rSzB/Xxt`|/ˆm\w7}V?:W?$y'9I%.d&()[}6&z?z>sԸöe.l֚/}B΅ڸD9hubƄ iV>KzWo4 MhJ*zG<;jwTwUuAN_?J,\ksw)}Ukf&}ΪN)|rW>YgR.w|?ٮɝn[/(]6xGm )=.JΆw+W (>ʋY%#STfJVS׉u[T,xI`zNI$Ԕ" |u@ 298qv QL7%_Y.$~V/OU5Qzd@YWWͅm[Y!W`p0-8\RJ|Kjy#/ymok kO*Us ]j3|6_/ϐToC%>WOMbb V SA63HkQS>eKj_ììBXicp}+鉴v~dEo3dݎƌv  OK;!_}c $y"x: <^;]C6$y\z,AK od+4ڸ6ss1Iа MiSpa[1feQ=BhG+)Payksn9%hMd_&X&arTPK*]0 +x&7_UّAW1cɨMn!^xL;Ɍe7Zi%S^ mo ů8z?tP.ʒ=%{w [ /LѷSUZ=g}py}x+<[:8sf֪8&*_Gӽ{,RmB~ȑhtM" ˣcBR]"_ ;f<;p;?Ndz]zgw|\NhUP1kIK=K^zr.Ч>_xʩYvW+VNZݏGDQZN\jS5Xh܊Zؙ,zoJ1mtL ]_,C ]Z4I^YSyi}kR$ug9mJ(VjHi3pd;^6myB\`>O[Mv%)H"r_l-Hs.Bx4]accQe_dw(i{+¸&f.AJԢ\d'tgdR| $7 lᪿK5JWV7bߤӇ/7-tg;7^Ldye?Eos|_u3[}5ݖ.~_<5Õ<ޟeqJy\e=rSĂR#':w=~K$ ZZ]H]W %7K9RT#Kȶw{ 𹺖v7+G,8)=))' jZg$y#zNjXV%,"ǮIQYMr{\IcqB".Jx};<߇Ξyk%ﲖܪ16[D)Q:R뿜*7(S3rQ=6)STy]ruߎ']qugM*G^gQwclsU_^ek\$J86?{R)$Gj$XLznbʫn]9@C0fK0,e U@Yy1iB1J}uYd.6r^o ż|~5RDnڔ7j&}e1sM;uuL ?3XAi4 ٜMcXe Pb`]Y ,5bLfڦۈ_۩w9:fA \ᷱƖX[*}=dǓKX>_\HIi6$۟Uar+O.2i9&\m6C2$⯴y0N617 %z$K>2zmoWVm6r oAnvi򅆹.e'>,~ C:!ݫr.קט Dk {?gb>PyqF"?CKΗcB¢6/8/xh=xuM}xeGkl0YN]^E/yr. ^伢/2{w/yuwTO"1v/2UyE^伢/Bp^]\.S{޾j;KSh{S8x(L*eMᙅMLL, NǂEdqpW pJh:W77-mj)ͨȻ9I^TW_3zRՑR,'>j)RaaayN&"*ae0k2YL'|*s3t/=[00T)+2$S[qp\S.)}\vKKEN&qޏ~)sT.v\OYy+bp^G;IޜIbvNi6S}_< SμYmO3im4I]d9ST<bA ?mݖ-".K.K&9~|uǧaat]p]K . dveEdYMK iO[,̦S)$MD'g+TEdYf*XZYOJ;: <6ySx,,,,Yab}tʚfacMj޵ճ|럎.]o#$hrhMyE:TuOz;>X%Ym6yFiBm CBuКvT9ʓs'ouN8kk.Ra)0JL'Yq7G[h6ڂi !4kޙɗʅ3TEU(2dm ả㢏JnR2Y%iC&"|$0DKNn~N؊ȧG]PN%15Ԟs/v֦MxUٚEV]Q:.zFZhu XCJri+Ǯ+Nȕܫ9n= pU7H3 qZIwNg!OܻL: ' <(^HNSNEO4ҝ#9_NS3ak⭳PXO'hHYO_? @ h CSa4I?:|@I?.eVLT%8. I#7i##IF4H*č6)aaaaavE-_/(El\oXQg[x/b=޼m]TYab-S\2.hs)_x]/:7.^KbEqQl'Y? Ql,.'%d[cR)9ʙ,)1d V'-/)8Ia+0g[m P[FRigɘ /as%@; B*|iMW~UI%n 0w6Ѕz)~.@<#L8[rxsve֞ !}߮ 3ٳfi72E,Ei4"(~ $X4̙p0 "/;\]o+wΌ0p'RhN#b1r,ȴUܴ,ذ,/̴Qiz^Ey/b伕]K yĸ/b.r/yi^ tZ/XZZYEt\E/,/_bEav/|p]˱~R_Qt]v-,/r^Eܹ/z_It^Ƚ".r_Kv. 侲/b/ظ. ."\ļap^//^ .RE_rb}.ť,/av/"]EarZZZ]_QitX_-/]˘e:,,,Uaiv.KذEعصU-. Ȳ/",. K]r].Ņ',//\ȰEix, ^K_何^$\/ذ. _Qr^ఽKXZ^]E_2Uiad\ir,/av,ȻE]ذ/(.zEyK.Uذx/.Ket^ br[l]lX_IlZX^az| KԹ.K̴ zr䰼rм.KAa}Z_2buE|ļ Wv-. ȴd]˹yr.Լb侒_Aw/R.1v. ذ%ܾ/^{. v/b/"/v-\bȹ.KȺ-]ȻE# 'lJJO!)6'O)4L&O94MI))8ܙ#bhĤ&ДM: NNOA=nO); Ms'a8DN ě0Nr'2yVFO6ӢϷ<˿KK̹oY߇m 5 Y_ݔֶ#{ [Jp@k"4IJPC׮/V ՓS!#3'%٦}z%mbI_BTezzDl)xuD8r;OD6d rү: f3bc`uR eśF.lC6gOO x;]OQv{D"eIR^{MdR5ia2Wow?CBc1?Ti d+)HaAay 3(dT6ᑛv&Ktăc*SMdl̒\fN[˳'ATEPSKt24Zg2=Xk I#S$ /ɕ+b*LDya}yE*lҩ@:JJÊUi"ꟾ{bd_0ZT&dtuv7O :/]Иg-2=$O'zA}[B_>~9@A۱fiLmϧTZiZTAbkYxc7d3G@da9!:2W{F}`=͆}bywv{ HR_Q&;!a|QV\ &PU .NKȳ8??߸71 3]Oob#4hlj n|5L [ rmp7W0lr@Ԛ6;8uZLvKL$u!ύRzo:@!#ηvGXb*fIWe51a_=&Ro$t8h,- !u bc&Ff ̼nh@JEBFvfC]Oo昏τJ4;/?YZ'38}i_S mĚ'7vt+ 0Q>ҔVP$ӄ]Hn J+ XyyʷwK4PDvZ1wTODHXBf쳱7,{xDlr-҅sVV21j}]?>`$1.}0>XFƨ.UtOK@8OdC{m&ЮR%!c"v1Eet&V)9xZ^Y@Μ'һmA僁 Q4t-5dy`iNp=kM}fJ#Ixx0!lc<1Z%SdbED+1ݬGqE,|0VbE`(]٥l-wh;׷jnۖYBeuQl.%2Hwt6D)c,p|^ےK^h4VJz'D@)ͶZ,Z%M5%Jek^ɻʵYjKչyۡ鮕K:[ImlYU&ґVԺ[Yb ,J&Ucm+r·VV*mQUd!6 UI̕ƭZ5VulNWf+tk+Q)ijcVSkX֮ښ+2t/*e:t/WeE/iv,,. ,/%రK. KX^E^K/atX_X\z%]zr-/,/tXZYEit_]b|Ky,.Ņ,.őav/|et\r_Qr]w-,/v.ȽK/ȾXX_%)zb\p_Yl^/ظ. ."\ļpZ^_ļ]~/_]r/EشE|Ky, 谾Kqv/X\EX^XYE,Uaix."\| 1l_Aaiap^Ey%apXXXZ_]^ظ*iaw/-/y{KX_䴼-/ypZXX^/r^ʯyr_.KܴX_"i}p_"伋Ƚp\p^el_YatYEaix.KKi}bȴUayrWXZ] X^yظ/]K-//--.w/azx.i|KԸ-.Kb_/qiazX^yr-/2 Kظ/_i{X__Ai}e/2uE|EŅ« p]ȼvUx.K. ^ezZ]Լˢ/RrZ_Ua|K| ^ ؾܽ/b.K໖-,.Ŵ\ .Kr_qar]r/w]؛& 'lMMɢQ4&q%bv ;ɄJND؝IȝОBRDM):C:4Nd'Q:<%'1=dNa5d``Oa7'xqSSJTK)Ni.(M0LD7&I'zuCS*tIII6??Rkbe&7WUNZƱDU}vx5Mjh {# ּثW*|m^6ZKV'mAֹJ UOS*e S}ieLeSAI&nNܛ&ra %"?>fҜ0IOB*QRsEnE.RvI'%'ĤQ),Oj&%&NL 7L4qM✋j`X@j*vT☐yIJL'Mɹ9a )xRSU(t ISL̋1U%GXHl'&P|jF,Y U-QkLūt&Y+flXb,eĐ`Te@>f%#s:_WN,_/e_O8v=OwD MC~ck`!6pL.e>̷M5V|8\jG9HԌsċ'e%ĝ3L&Ĥd. K K t]^ѳ~WGe,#ZŧY q;iix]{˂. b]ڼ_Mڷ,߹w,,,,,,,,,,.pXZZXXXX\ixErX^Eع.K.K..K]x-/!O|jz=S#GՊEb䴾E\_Qt_it_9r]"e\u^eyE^ew,м yuU|7yLffn{Οܾqyw/b/",, g=əS3x1Hc͋Mn>DSHXi幚">O*;^KK"//[r\jUpXXXXZ-pEuYyiiyz.|in}U^E. 4䆐xO bU#V̖hHĚ[|\r(7z]_^m$y$RE|%u6̵u7C ,-ԑ0#$}[RNxܰj ^Io2Zx)x. ظ. /+oԧ/Ē)aQ/f$9hJf$C1B^21UՌCCl?r_]K=H$|HI]{/yiaiiax~. /-/q}入iar6dYaXah葵Xy7Hɻ#n#ğ!̸jȿഴ_}ڵћΝ\Hԩip%;Gli#˶jcUQix^A"$D,,,,,,,/^lظ_|I>iSM/ѣ%HDM-fBob٬VGڢHp|S8[Ue}SퟨGG4|>tyG's$->=^4dy$Xl_y . ߂ >Z{@>懪GD)xAF~77kꀂ:pcBVa=5CYlIvG,mK,/ya{˞ LL;rɺ|4 5Iĉ$wo&>aϋ dͯTwe7qdظ/l~7y//"SS8Փ!$D;?=;i#y>; yR)#r/:Re%\DeGđ~2;]*U.楰Z˔HF$hz/"XZZ_X^" /hj/ԎԞk-%-Yj$VH2\B,}O5сOHf_˜tHR*E1ieLŒbȺ:XwDe8}iUe e[~Xiy{$|=,`U]~B1 He bY(_0yC%-gc8ywI9uq&t,ڱƔ+X8ɱ1>dmIr,Mp<homv$g$r> ⋼\L _Eqzo˫^*ʪ~ws#i~V.2ee^7pmS2G7'fd~>߭j2FJMM!~r/NvO/z.E)30nU,TGp1} .!n=45`,n >"ǚH{R+pm[:6O}59,~?h!tЮD HwCE!0g Xb&LF pNO0jEƱ[15E$pb^,Ca=ZGrow4 8$f])!i1PM%JHDUQZpq}_c@*ZwD%;5<$xHȴ?<]\T˲]|~}s.9Wľ%'P댵`//2sDž_t._6J~߇ْ~+[o̲/$_ެ\KVg.ZT3uR7fog Zp̄ ˣ#Mr'HHHZZ_\_fVKr1~.KStXX]v---.K. KK ʞ/L谰. tiiaaaaaaqpXXXXXXXXXXXXXX\z\%e\Tnŵxğğ2lK~zy^]hKԿYi}%i~[˘U{u?_㳂qm#i?"m}{j8=O;4O)9#z~hNYv//\_.t_Ejz/2Knʋq#زKK`x[mNr9]~͍̳t^రw?ƕe:_{ [7ge$k:cw=R.}^U28H}I7,ӺHNGb*'T_Oý#={ ; _~. db ؿS.K._^{fpr{]T]-bv/O/B//.bjap]E\%غ.ŪŅt]pYz{b ໗ixϔ[e''J,cI$YE . UbȾR{ ̺--/b,.t]jۈKx,*鞯R/WbwV^*QYػhQt]Hz}yM{}p/R#L5Ʈi,ͳi,r+>o''?59JS5;`8LI\ZGo*:NGa,jt,dQ~t2uW/a}`E+~wqX,6/ర-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,/ӵtXY#yrG̑Sj%lnj f[%_+/B׶ywbLUPezRE?I0&p)+^6$d`"";>1zq2v]wrڧiiaaaaaaaaaaaaaaaawO)?Om;}~mu?e?s:+F2|9|f~ugWRz5#Ƥ=o1##"ȥ[WX_ZXZ\uE쾥ŷ_BR򐿍|XXXXXXXXXXXXXX^g_G]ݸ渱|?Moqn{pZh. K/R]Et]bU_UL~+_:/\ŵv=\ť,"Ȳ:mn]c&xwa݌c{o^9Q=lj5igM]moH=zUH;xȲ<8$Xvgc ƿGo=شϟ9bX [,`yU, XLx3z>;ΧbIE~T<#"I%O,m[D"|T&G~o=5^>nL7 _63tVne&G8z.+DydXޭP%M/x𡡠ZsS {c_ 2x>xDvSrM6A'Wu'׳]y̋drnٕ(de@BtT!gL8$ȀPlJ=OG{>{~S'|??t~y"꟩#dSUle1Z$޽ȥ<<BÇ#|n(,dnl?9Ǖj_{Y )o׶mD^=WNZ*JWp;H1m)*C6;kdf{!F3*NFd iZ`[J=5Tk"ɭ{g}/x<$8b eHڶS"Ej)Kz[mmemmwRqJ 10A`B-keyz)^26JC XQx쪆b¶mHڢż0JPOU(q Nl=gg?ưOwKϯ,i,,.T7Ҧ͊3򲋂0.ŗUY_?Ϸ_\ ܼR_;ύ3.bwOY(eAW]ngK"IJ/}mljʚVZ-2,Owtf+W1›`)sPw䰹--,lXY1b.)6rZ\%s"SjsTNإݝV'bC?HPN {-oT%0Y',`TRFb iSw FAɴGLy#2Lda0"Iuߧqf8t|6=UHw)*$4ڱv8*Z H"ԊȐI,-S!4\IYוm.sf]dXAVX"ܒ?yQt+;f_ŪX,1F L3 dV#=T}2OXXX_e;ɖL-jb,-mo/ZKKZZ[iim-,,-iiasM,{};VB#zŶ[-Ho混QIk^ :bJ:>Ykr4HWHT@%U,aaeBD"JO))),%&&R$i>}Eե׶_nuoMjeǨ _&%2}wγ*l7."^[bMŅ]IKNs1`EL/2ewm}LF#Ʀ$k@[_U}DYM/_}÷ xdD@ !=s0;MB=YWߤ}oaK򖴴p\ZXX\jsr\5y2U{SEzϑWV14;hc4U.zXTQij#hRF%bʋ+J~OzLЪsQ1 Y]˙fXY K"k|vS IZ,YX d*H>Umi.r_2O2(0P=bHO_8Զֿ_2R%UK߉~ϯ٫Gr?WߎmK| O]ky)eL.K之btww. - 4G,g 0b&IOjn!=?'gW\x+)Ɓ#Ã)\ ea8}?˽E"Sqze(M4Xm6ʌez,XNk۫ITW׵m----iimiiqVHI51@AW۫?/q{m-,,-f\֖ϞIbQ)_}^tXXX]yQzNJ*"Ua;g yjwHե-,,-ZZXX^zU%I[//7)ZZm6DJi[JP*ć ]I4A1#Sc!{! )uyͯDfrp%S3/{\haaaaaaakQVMmZ+VeIne_q}Ų.i8. kKKM,T.d8#\ظʽU}ȿP "9eO߶|bɌXLK_Moյ|\ 2Z%G ZNIۇFgSԊ!iZ/G*>'3BqSeY4t]ZZ-. K KWWrFIi]$!,S۞,^og̹xs8KՖO;r,.)"ԑ\ %8׺zIf{HbC)!( JrozR}wHJo_mjʜg]5! c*ʋ"((K*KB6 J6eE-Lh*jZ"ۍWJK*aXK#G"ts2DYII+YY$L[v浱|v@Z,. K# K K C6[1+5L&6i5 +qV2iWk{Is{*ޓ rIZc y`&>5jsd$j&?7zM&1Y}VP`HI%."R2PCxuKG޷לMh%쮙6=H2ҦQS*4j$nKo'4)2)b@  17ŏe+ ,cg_RWUezq\7ߧR' zzg1szzc8Ҧx=yū8']WAm! wqnY8[-g'%3( Ҧ?c^)tU nv[8IE1mjyXkyFLF4h(28LXk@ "qhkt.FuLk\xhtmp@U(4k&STSq$a#)HF0 -+.i:x˅9xvut.7xp\BbHm‰dZW4]NՙT'BUj*LDl Eds'*mœvx. \Yf9䦓mVBe<{T*ywG*yffS(0PB g锪bk/SCuFU쥱Faf Uj,ؼȹ[1sE0XXX]"ర-)DKX^A!Ou9/BX^Eҫా%.K/2ظ^ й/_Eعw.b1pYE఼ ]Kظ. 伋K ̹-/z/2. 9,U|K伋ȼx.]^Ezw. %iia| Zp^Z^伋",-,. "\{x/\uWa{Wub.UZXX\x-/2*qOJm8ӽ;Ӊ)0ND< M8rRRvE;jԑ\l4iAC@g[2M l^-!/ 5:ZAaaj6ۦ&'ut[n.cR))-GRތd5K<w.yEҫాE\%^ظ^"໗%ཋWs/b. "X^ ̶/yaw/bസ.Kȴ,.zܹ/". \U%x/R.ť{˒p^\X*. KKZ_W%-]%v.Kع/".pX\Ex,/q| ^ {%/"Ƚl^E]\* zHQ4JN8 MD%'BRؚ'"lMBNRo8tܑ;QlY\s^qy3.ڼ輋aavq8E,.K Z枛YuEae5ȴ)VY=(JME3EjŴ>-q!'i' "jxQ~LrU00jɊ)s%1⃼f)tteIZ/BgRwzIC vS vpc-츿!x2a7dm Y 2(yWMĂƃOz + rbNzX2gNHUW>,,^"ȵF춖HIMg$>/[iimZ[4ե_iMK"'syOlotrR\Rd_ﬕedT,x}s[ԽST2SZLSm{m/~;EGi]dTګ,^Q;g8eEUS=~<}sVM78H\c&$U2v+UZXj~4pF'o4H)Q?i01$B9qX{O[/0),ue@X~8qV(Xb$cBxjɫ})SM[v͒,-I ѨZ6M|;kI)"Y 6<oc<<:ɟ| 4Gk668yrrF$=+p¶F ȍjM@*D;%,Ms  VK\,- KAhaY Aͭ*ABȲ1&CJmsiii2䴴\Ne#iź&4 f8UpsO-dվӜ.3TʲU_ӄ@ZRddKFmLFHIXY Q&KZh 1T&ed6-&VYRhkYKe^:Fc)UHM}IIN~1Bn^@yk&EWK3r&X(w?p./,K/)y G]yY*)Rg V pho͂& X2L(.qCd)y\G8I[&|/NA2y-yPkM=L3XAC@M yɔ[]%0.|KK .p^E]Ey8& V ,Aj]մˬw.KKظ.ܽ]ؼ. Kt^ ./"ഽzS)42/nie2y٘yQevN꼧*﯉q]ۋb>tRO0@Ї(˙*o$粓UOO4tݘ.22#j4NP6"KJ>5UO[lW(SaT)]qXW!_\)S7>{\]1O|ӣ Xu925yo1ϡ88X0>&&0SKQX9Sd r B@"pHz?NKK $WbUx C)0Q`T%ٛNȮ[T]˅Wzqkq{+jkelVV"Vd+TCĮo333!YEdYQc-yr\ok6Edm&斫̪!J. im8*2/9=*|k涾G MdKT}lkroZUw]ifTT-)jJLj-dUSiYZK!PmΑȲ,.--ًtZX\Ei,Bidm* hkiVۭhȵImT!B<$)㋋c,2UֲMYjX;<ی mՊV۷ ʱjzJ#Tٮ=}+yR- $jLGbVVY,~iliimiiaaof38,. -ZZZKKq8. fiio3స KKfQ"$X4iT2_Du"~TFYIe'v<p6DTYK(jwe9*RY ~=2;wKڋ+x[\YpF!pثiIk[ǣ]ڟKnlel}y6Է;dG>+mە,Z@X 6%e-y4m^*5uaB16G]܈:{Mzth@rۉ~#e}SNv`$t>"j'McEdTfX<j/<_U^8p\GN(/G|STxeg2&[$Ui/rH/2WdA \i4,"FDTam:Ջq:bnW%_bT"z2ZJ$d;W{1[}"+"jiC2H4MORg̰R_'UWL'a=# }0?_׈EhSV+FS)-"UEi-F)ɬ̙m5-9X5Xb RVikRUlE5jLkDid+6yIS맄*}3TԯYOI m $-/٨1!1 *^2x֖q+R_;V v~Znk_imiiaawW-JefE1&[_Ekթ3XVee2T;yi-,,/Oe?)w$9;"q$ c̜e'} `cm/kGBF'J۫o,{"4{߄{&koH%DTRRZ@'.m8)U[OJUzf&;Vfe2\gpRse4Gjiu6N\ͱp2OZ\iid&1#dÍɞ%ovęLe2,e'~IdR[H;y;GycѨ 2b׍GC#iMf -»?O%˵(~ae2P"/ի*4Rm4ygS*gڤjIBHGՉmZl1dz>X,^f! KrJzB'I*TL{B$߫y/ CnR 2e(-ڬ 2;z7 QWE Yl =Ts^ll0d( 9PcUWwx#1q>H*-D^ *F}ZGjOXXXUm~+o֕d9K.%-ԊYa$,.$)!ARBDl~ʂ6iͦ[Jy#H)(%I/wEXYE8v?䟭漢$UQ*EH#;{hUPZK""Ȩ?Y=^G?{VUj%lRTTM%bYL$:QfE<.Ȳ4t3/qdRϱZ,x?"3UziD~GsM?pA 3J^|7Y݋MC^]mX>_>5g[jT#K屄vTG摣aWφ>k1<ȼm--KKm-. K K3kj[L-fȗVmUY$[ijidSs,*Ih$1jf o-_'~c7iR;6͡eĽdՒo\"6Rm]wvMFQ%+d2 )VʬFʭ&~P}??:tSXbHoc[kKIqyGg {S'uuJ˚Ud̒%R["Y"s{-]#saddqsర? h_pZH}.=KKS)_?n5I{GDO?"; YdOR]inYYfwEڄOMNj-[d$I5'Ѻ9ώ[&Qa :Q_\\VL_J,XY H?C3,j MIQG[VŹ,-$Rj_{`6Ƙ׼38z^6Fhkl6NJKy !jfFؕKtQf3=ۗRI%K x]rp=$wX9v]Yz}Ԉr,S{\snvךf F] Nt.29Q۹TRYkׯG(AjZȚDd4ixl\1w. .Z\E^ rZXZ]z$D\M bTU޺eNdc31y1p\p]Et,--/2^ ]̵Uީ8IwضUd%x{`6ԓ&K[Y6[ K"V[eK%/Im2"2&,IwƪGkN3UX׌W3,)y>i {H&^v&nfYT,, XXY L$dL%{o¤W߹,s@]7h-\-DxLvVe[mP[%p`@SU1+KHw2/8p]K䲢ȵ H8hN[wx˪v/\r䰹,-,Uv.K .)2O^RqS,ʮb+ȼN?agxBjWcXXX4 G i4Jv/W맜 O!8IGdj'ۑiQ4i3s2>*m*^,-FL:I4zXRzd,n*L"UedNwpMk^P?R]c|=ߣ~p#IqxR:l_[.]!ĴDRRK$wߏO戫+6YYbm2 iJ2<ՌJUTȩ &$N|ڪ/ &MBl$mڶ#;tԑ0z| jݰb`LlK@J )`#+0pl0c #Ye\*8#YrʔK1'Bee+Br$2XB,E !pΦE%WYr\*ur[QS ,i̝8Di#rSwl7<=eD%'?0X 'YPP}ھ3hڣ,R,dXJPfEUvCMG˲F2w%̜B;\2Njt[vo@ 碬4{)."Sj )sS3J'\:[ xBl݈Ij'- XUW,   puiVHi HY !B1S5MSrS)+3id\E\4NIk8EܻE9Rq\bٱ/CIp'l'I۟]|}a%#մ48 %T6m ǾhʫÕ#,'_mdh[C =74#!F DǖmHg }ETGA|Bb-xo<깫j՚ͥVEb/_ ]{>^"EַB6ܙ6ArzW[+uݳRWgkjlL7w~wZL5!vG .4M&}?k׳߀St/[MW^,mqqobOc&J%3P-pfm;&x$z˪cBeۉ2Mk#L^0Q4l^ʹme2|Ŀ#d? -G'#$-RUk,6+Doj]dmԟJ4NIy4ֵċADzYu)6-NcKV_EZTȲR$?OER2Edn}˜&y%I+,Z2Sغiyxvwmve/p\J WQwP窲Ls\ojy]lNHSe^v_ $T 3TK >8YR7 4d@H4~qnqu*f2:2"i@Բ(05[[g$0ij(m27|nQf0>ƅIj*,BȨbBPV"5 }WٙE yZOTm!Ֆ ïukO"DQl=}Zz{mH7m>嶼^yEcJPO ZPY.'s]W0aDF$V-^S%4NwYk[ܵ^͏Uufۚ%yZHZd0ũU*7iD0ŖD*YY2mŠ춪&"Vmee[*mJ8Zrħ OuolRŅڕmu-oki݆F+q*oIVK,TQWVE}|mW:E~Z$1ufQ~m+Y&eOOX6? fE˴$ȍHS*H44Bq":e Y}<ܢAEk)!Y` I (s a٩# #4LxwK8S/xiuQΑUreKtX/U-ȺZ'!T銓 UuPe1&PjPp?Ψ=E!<Ğy%[zeE(훸bJc:*(DJOPH$z b6W&sXCHi; xsu,ad,DGN4,>O |\%eLdqaa`ݭX|eLfd#/ *3J̬ldccR[%ɖZSI$zXOhK+6ckY$C)⸜?^b7nff5FuKF*]Y2&ʥqQ嵗3--Jf=NQ LP"@4tEhI XVٯ.܉UI did UBF2761)"kQmM6f^+Ur-$pz H槲șQV*S[_Z%l}]șYY{%$?Gbj 'x|հUY}ÔI7S_^oG,E)3$Ob_,e[jȷpQh( $eD@mHJxܶ-tQ*%6MVVdU1b ,g%WȲ6D2,, X^{5mIZiP$"Mq?qmQە)ۜ_NmbU~|7bYE,0,శ,,.K \E.""حV2g{~xbZ0I߂*ɼbn PS. e~ +x>ɰUTg1$)ӠVS14Y`Ks,"Fem+e=:hWuvW]f~zYLXTUctV*}NrZVESx ><2/ }wo);Ve}[#vD}ּPUb,I[*J%d dZb2*eT5X/;~2f aaaYP*G/Yǁm="7IdRREz^%GoQXYR՟;ᔡQR(ofODHB=#J08v8=KmW|ڥsHۛv$RN|襒EQ<'$-y=2NI{e R`s28v7ށ2,,)U}ҝ7 TCGyc$)"Ȳ)8<9Xom)fRvḅEˎS$m-{1ֶlf԰1[oȣoh -Xt;fpP I"w=h- 7kYmnHF\i3!3@ 8H` |8hpWtfS2NsT. "\r\ع-.)83t4NpY%iq%p]ѢhHFT&i>AS#'wwH!jG z'{nӋ)S[6N otOНg=8yeY} őXUdT@,TƙVךҲV2x&]Ygڵ*EO+\}eKK n%Ū ltвZBN%II'S/c oQ[RUJZ0# K%X.l3+0-K"f=2VyaĝTιj'y?OϛWc2]uOm:<Ğ%Y"_ׂa$'$iY[錭sԒWl+v\'[J̒ |Bw&Vx;5&F6 x`P`*Go04 x0s.X\&@q}KO>~8N3υe"U:dOI78U>No\e긭ՖO9.KUХ"ؤJ4x2w[˪HdiM R-)a)hU"ڒ т#"Y!FqcKF(X0*(-( RRXc 4J(XvME]I6K APRT Ȇ:>ĉb-7*[_A?f(Xk-#hvo{n]"Jכt_ \mݳK"ilZ,0T(1&3le٣DZ7pXZXXYEab "Z[EܱmJY)VfùFWXZXXYJ, "[EذN KjVv- KKKK)n5I+PTWl\ȬLƤԲ-HU'VGlJ:.T""S%sWYE?ĩjXY ,oiˊbʫ2, +*XX10S )0?u^*#o!S/ZZ}~"G)?%9vHRpnWy]f2jٻw%dUn,*[EXؔ%1<q5\1#i#9ZX'Tv)/?n?,,yxTȿ,eMj|'_m#$YG~w ;'߷Ya7tEBL,߽Fff 9l߬ iXq! 'm[U ϯxd?) ɎqǮF׵R$,YOsqx}j)K/o?wVK///o_1nZ]$^i"2,=۳X (> .L9)vC M[`- k9w2*VX -Ft5n0,A'R1|TLZ7ibSJțYf}Op?f Y&dKcUxw| "OwHے01F7Zj],<]V.dN/!uďHm8!A*wE.UVpq8bSjtvgV2ڧοsgDFԲEH>>YmtdYAIݽa"bصwagI'/M{$ev=4˶K~!2,".g_Pd[Tx&ZRKim~>W}{Q 0YQb+2&KM6DG+Yd{~so22̗cE[ H ehይ w,HlHѴf =P/ $)$JId {d{緛~N tN^4a=ۯǗH=ϿI!f,l\3 6@4t֦H:T>j>e-_<+5YeHܑKy,TiZɬe2 )03`4׉Zw٭kZב!N?,vu>ki඘[OOW[l_2yaIq}ֽ9#$_kCI`2M]Gf\tVi+f. @Ps 3TEc .e`$(X`h=;+8s]Fk X1FDc ]cK+Lq-SD*,LK|c/.iWAW[ tz+TyZT5UD>33)޸SAWCB sˉ 6!4iaѫ ޙ+p=Xx7ؖBF|k{JͥZZ^{"G^yj O wWhN0}lre:ȫ# B5IAשIldR9-JB5e"q[׺MzוK /*Kwy#)psZ[M--L)eMlX\XYp\".),[l\%XYp並qų(bm2e:T6ָeJ' ՛RLS&i%&}-:M1"jI-d 4(Qci5o}5tJJN}*F"H^~zCER,*GT,.Ӣr1Vn\E-.ŅuMJ-.K䰸.qVR,+ifb{&),,,,--K K KKR2E6,UD=ȇ/ BِQuۢABJHB+"Xzdl/s\[IK",Խl>dbP[ *UB?T-x*`9AAA$]t@b)5A)Gf[g5 -YY *U(jLjH)%[$X$UI|b&n3,8 *^qy{U=޼c"*T$)8'7tR&)W$}Roa ~2o*y2Q$Nݱ1'x*)m-jR?N{c,0iAz= XeI!PH%J`,,-,-aapX[ed!2p3S jGLv6fD˔^mEAdTI^Mi"|ʜѿ<{ v:PFG[f+y ]%'%(JP%(KBPy\$TթiE*IJXE%jVE, Gb&9$XlaJyԑ#-E (e5TY:mq͉5L`W\i}p]2uJ]dv.Z\ŏO*>eo-$RITh@Hm=T[2+)cj-"CSVm6dUt8LMԉV[IEȰI/c?.=ɌQUYSO~?=e E#!bRt|Ī,ϐG%I$*<_3_tEX*ĖE$%YRp]>z-FbWmڻThMedX bf&űb,Ջ2̲,dK*&@, d~D/|-"v$#ʑIH=g Hf/$@r?2zv&y+LYWYqv'LXXYLTdVLBĭ4$A4NꃱiU~$,,,,Xq z(|Mz57YQ"]|>ͷY+VQj޵=_m?6m5RRo*8Z:H]}r$\avT^)%xʏŋ,&-ۮr6gk&-'|.1OXh˅甑f4I4]KSe?U֭HLDcxHFH>N\]0R֕fē1-dP)P(Ȳ,#t#AEIVEH;;Jo|SeQ:; UYae0qŔyyԩdXE$YdRY[Z!Ϟ|ɥڒȲ9~5~J7]ZuW$^zmg9$:XjQ 'DçટFMo[-M&7$0fi5a1MLK$pbl'a1L%%&0La0(KBP(JP%(0JJLa0a0a0a))4|*j}.L#rw@- &GdWOW`/rfiW֎&JC񗶮G~qìFnP)Pdڋ8Qhqv둤Dx)G 0/ 4%$pY΄#IE^oDQ{yώy$`H"D,WJu/LQeVB˪m#0*e³bEXdT'ݻk}\Zެ6bFT#$T#JuXzAt$;rߑjeF(_'jsDFn嚴fq8?{k1~Y~Hr,UPGS`y^e5-UJj[܁C12ʑifˍ"ehd!:ķtȰ- \xdPޱLs ^q;v} >^# }r*sI֝4az{ba)h a;Dv1[7ubwY^Ev. K ]tX\xvqS$$V_Qf߭$z$0^Eظ-..K],.K_h *ˉ!=)[Sw7= :x(rH숐76)> !Ca٭W0{U_g*VuRu&',c*ʞL:\$8 MqlYS%0aՆ|!!;ZS|ɓ# 9!0d ։ ?c&lDVRF-5&.L0ڥ܎üu>6 L *:^OҘSGdUy4&dGzwNq&g:w4L]Zs{cHޛǬ!rdԛΔ4ppm&7MjVU%(s" EV\" ,%А-%AcmERUEQJyHaM ZHl]JSpa]͂hE]M2{EĄ"Z4Ϋ lcS IE3lz8?.IŪ$8#6)8X&9ɇ:n=NØ)ʪCf3VdԴSrE8PDc