From 77df9109b61ec93c28a8120a8d81a045961b24ac Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Mon, 4 Feb 2013 13:46:23 -0600 Subject: [feature/migrations] Remove default values from necessary parameters Clean up some comments PHPBB3-9737 --- phpBB/includes/db/migration/tool/config.php | 34 ++++++++++--------- phpBB/includes/db/migration/tool/module.php | 44 +++++++++++++++---------- phpBB/includes/db/migration/tool/permission.php | 33 ++++++++++--------- 3 files changed, 61 insertions(+), 50 deletions(-) (limited to 'phpBB/includes/db/migration') diff --git a/phpBB/includes/db/migration/tool/config.php b/phpBB/includes/db/migration/tool/config.php index 6ae419d5e7..d9cc20053e 100644 --- a/phpBB/includes/db/migration/tool/config.php +++ b/phpBB/includes/db/migration/tool/config.php @@ -38,12 +38,14 @@ class phpbb_db_migration_tool_config implements phpbb_db_migration_tool_interfac /** * Add a config setting. * - * @param string $config_name The name of the config setting you would like to add + * @param string $config_name The name of the config setting + * you would like to add * @param mixed $config_value The value of the config setting - * @param bool $is_dynamic True if it is dynamic (changes very often) and should not be stored in the cache, false if not. + * @param bool $is_dynamic True if it is dynamic (changes very often) + * and should not be stored in the cache, false if not. * @return null */ - public function add($config_name, $config_value = '', $is_dynamic = false) + public function add($config_name, $config_value, $is_dynamic = false) { if (isset($this->config[$config_name])) { @@ -56,11 +58,12 @@ class phpbb_db_migration_tool_config implements phpbb_db_migration_tool_interfac /** * Update an existing config setting. * - * @param string $config_name The name of the config setting you would like to update + * @param string $config_name The name of the config setting you would + * like to update * @param mixed $config_value The value of the config setting * @return null */ - public function update($config_name, $config_value = '') + public function update($config_name, $config_value) { if (!isset($this->config[$config_name])) { @@ -71,14 +74,17 @@ class phpbb_db_migration_tool_config implements phpbb_db_migration_tool_interfac } /** - * Update a config setting if the first argument equal to the current config value + * Update a config setting if the first argument equal to the + * current config value * - * @param bool $compare If equal to the current config value, will be updated to the new config value, otherwise not - * @param string $config_name The name of the config setting you would like to update + * @param string $compare If equal to the current config value, will be + * updated to the new config value, otherwise not + * @param string $config_name The name of the config setting you would + * like to update * @param mixed $config_value The value of the config setting * @return null */ - public function update_if_equals($compare, $config_name, $config_value = '') + public function update_if_equals($compare, $config_name, $config_value) { if (!isset($this->config[$config_name])) { @@ -91,7 +97,8 @@ class phpbb_db_migration_tool_config implements phpbb_db_migration_tool_interfac /** * Remove an existing config setting. * - * @param string $config_name The name of the config setting you would like to remove + * @param string $config_name The name of the config setting you would + * like to remove * @return null */ public function remove($config_name) @@ -105,12 +112,7 @@ class phpbb_db_migration_tool_config implements phpbb_db_migration_tool_interfac } /** - * Reverse an original install action - * - * First argument is the original call to the class (e.g. add, remove) - * After the first argument, send the original arguments to the function in the original call - * - * @return null + * {@inheritdoc} */ public function reverse() { diff --git a/phpBB/includes/db/migration/tool/module.php b/phpBB/includes/db/migration/tool/module.php index 561faac552..afe1f21ec5 100644 --- a/phpBB/includes/db/migration/tool/module.php +++ b/phpBB/includes/db/migration/tool/module.php @@ -66,8 +66,10 @@ class phpbb_db_migration_tool_module implements phpbb_db_migration_tool_interfac * Check if a module exists * * @param string $class The module class(acp|mcp|ucp) - * @param int|string|bool $parent The parent module_id|module_langname (0 for no parent). Use false to ignore the parent check and check class wide. - * @param int|string $module The module_id|module_langname you would like to check for to see if it exists + * @param int|string|bool $parent The parent module_id|module_langname (0 for no parent). + * Use false to ignore the parent check and check class wide. + * @param int|string $module The module_id|module_langname you would like to + * check for to see if it exists * @return bool true/false if module exists */ public function exists($class, $parent, $module) @@ -131,10 +133,14 @@ class phpbb_db_migration_tool_module implements phpbb_db_migration_tool_interfac * * @param string $class The module class(acp|mcp|ucp) * @param int|string $parent The parent module_id|module_langname (0 for no parent) - * @param array $data an array of the data on the new module. This can be setup in two different ways. - * 1. The "manual" way. For inserting a category or one at a time. It will be merged with the base array shown a bit below, - * but at the least requires 'module_langname' to be sent, and, if you want to create a module (instead of just a category) you must send module_basename and module_mode. - * array( + * @param array $data an array of the data on the new module. + * This can be setup in two different ways. + * 1. The "manual" way. For inserting a category or one at a time. + * It will be merged with the base array shown a bit below, + * but at the least requires 'module_langname' to be sent, and, + * if you want to create a module (instead of just a category) you must + * send module_basename and module_mode. + * array( * 'module_enabled' => 1, * 'module_display' => 1, * 'module_basename' => '', @@ -144,14 +150,19 @@ class phpbb_db_migration_tool_module implements phpbb_db_migration_tool_interfac * 'module_mode' => '', * 'module_auth' => '', * ) - * 2. The "automatic" way. For inserting multiple at a time based on the specs in the info file for the module(s). For this to work the modules must be correctly setup in the info file. - * An example follows (this would insert the settings, log, and flag modes from the includes/acp/info/acp_asacp.php file): + * 2. The "automatic" way. For inserting multiple at a time based on the + * specs in the info file for the module(s). For this to work the + * modules must be correctly setup in the info file. + * An example follows (this would insert the settings, log, and flag + * modes from the includes/acp/info/acp_asacp.php file): * array( * 'module_basename' => 'asacp', * 'modes' => array('settings', 'log', 'flag'), * ) - * Optionally you may not send 'modes' and it will insert all of the modules in that info file. - * @param string|bool $include_path If you would like to use a custom include path, specify that here + * Optionally you may not send 'modes' and it will insert all of the + * modules in that info file. + * @param string|bool $include_path If you would like to use a custom include + * path, specify that here * @return null */ public function add($class, $parent = 0, $data = array(), $include_path = false) @@ -334,9 +345,11 @@ class phpbb_db_migration_tool_module implements phpbb_db_migration_tool_interfac * Remove a module * * @param string $class The module class(acp|mcp|ucp) - * @param int|string|bool $parent The parent module_id|module_langname (0 for no parent). Use false to ignore the parent check and check class wide. + * @param int|string|bool $parent The parent module_id|module_langname(0 for no parent). + * Use false to ignore the parent check and check class wide. * @param int|string $module The module id|module_langname - * @param string|bool $include_path If you would like to use a custom include path, specify that here + * @param string|bool $include_path If you would like to use a custom include path, + * specify that here * @return null */ public function remove($class, $parent = 0, $module = '', $include_path = false) @@ -473,12 +486,7 @@ class phpbb_db_migration_tool_module implements phpbb_db_migration_tool_interfac } /** - * Reverse an original install action - * - * First argument is the original call to the class (e.g. add, remove) - * After the first argument, send the original arguments to the function in the original call - * - * @return null + * {@inheritdoc} */ public function reverse() { diff --git a/phpBB/includes/db/migration/tool/permission.php b/phpBB/includes/db/migration/tool/permission.php index a25fdb345e..001d090f5a 100644 --- a/phpBB/includes/db/migration/tool/permission.php +++ b/phpBB/includes/db/migration/tool/permission.php @@ -61,7 +61,8 @@ class phpbb_db_migration_tool_permission implements phpbb_db_migration_tool_inte * Check if a permission (auth) setting exists * * @param string $auth_option The name of the permission (auth) option - * @param bool $global True for checking a global permission setting, False for a local permission setting + * @param bool $global True for checking a global permission setting, + * False for a local permission setting * @return bool true if it exists, false if not */ public function exists($auth_option, $global = true) @@ -98,7 +99,8 @@ class phpbb_db_migration_tool_permission implements phpbb_db_migration_tool_inte * Add a permission (auth) option * * @param string $auth_option The name of the permission (auth) option - * @param bool $global True for checking a global permission setting, False for a local permission setting + * @param bool $global True for checking a global permission setting, + * False for a local permission setting * @return null */ public function add($auth_option, $global = true, $copy_from = false) @@ -180,7 +182,8 @@ class phpbb_db_migration_tool_permission implements phpbb_db_migration_tool_inte * Remove a permission (auth) option * * @param string $auth_option The name of the permission (auth) option - * @param bool $global True for checking a global permission setting, False for a local permission setting + * @param bool $global True for checking a global permission setting, + * False for a local permission setting * @return null */ public function remove($auth_option, $global = true) @@ -239,7 +242,7 @@ class phpbb_db_migration_tool_permission implements phpbb_db_migration_tool_inte * @param sting $role_type The type (u_, m_, a_) * @return null */ - public function role_add($role_name, $role_type = '', $role_description = '') + public function role_add($role_name, $role_type, $role_description = '') { $sql = 'SELECT role_id FROM ' . ACL_ROLES_TABLE . " @@ -277,7 +280,7 @@ class phpbb_db_migration_tool_permission implements phpbb_db_migration_tool_inte * @param string $new_role_name The new role name * @return null */ - public function role_update($old_role_name, $new_role_name = '') + public function role_update($old_role_name, $new_role_name) { $sql = 'SELECT role_id FROM ' . ACL_ROLES_TABLE . " @@ -332,12 +335,14 @@ class phpbb_db_migration_tool_permission implements phpbb_db_migration_tool_inte * Allows you to set permissions for a certain group/role * * @param string $name The name of the role/group - * @param string|array $auth_option The auth_option or array of auth_options you would like to set + * @param string|array $auth_option The auth_option or array of + * auth_options you would like to set * @param string $type The type (role|group) - * @param bool $has_permission True if you want to give them permission, false if you want to deny them permission + * @param bool $has_permission True if you want to give them permission, + * false if you want to deny them permission * @return null */ - public function permission_set($name, $auth_option = array(), $type = 'role', $has_permission = true) + public function permission_set($name, $auth_option, $type = 'role', $has_permission = true) { if (!is_array($auth_option)) { @@ -477,11 +482,12 @@ class phpbb_db_migration_tool_permission implements phpbb_db_migration_tool_inte * Allows you to unset (remove) permissions for a certain group/role * * @param string $name The name of the role/group - * @param string|array $auth_option The auth_option or array of auth_options you would like to set + * @param string|array $auth_option The auth_option or array of + * auth_options you would like to set * @param string $type The type (role|group) * @return null */ - public function permission_unset($name, $auth_option = array(), $type = 'role') + public function permission_unset($name, $auth_option, $type = 'role') { if (!is_array($auth_option)) { @@ -565,12 +571,7 @@ class phpbb_db_migration_tool_permission implements phpbb_db_migration_tool_inte } /** - * Reverse an original install action - * - * First argument is the original call to the class (e.g. add, remove) - * After the first argument, send the original arguments to the function in the original call - * - * @return null + * {@inheritdoc} */ public function reverse() { -- cgit v1.2.1 -"aGc1j?k jJ[9qKSR90h[mW ]ce03DzXyar&ì*sᚐ7k،8~ sNyLϥcr=wCOtIH\Sli7|\nrԌǺVF%\5k\ bu XY-G[ˆ6޺m<,/\`nb|NmS<1(^se9[s˓73S$3 ) .y22~*j~ 7`&@w z@j,QU/t/Y[hI`>gV/?$g9 ޵fT29*uvɟZnV].0ؓ2bb~ 焺0C+7iOBEڑkb&P* 0DlywH,e3Gq>^zn<ꩴ`aG߆ǼfrR7^0:|1;= r& ]!.*J+O- aeR,RkioLsN 閚 tZ2K76_?Tu b, Dq"LSWuU\Ba=rٿ&@=pxoĬgihƶ,2N2g\S2 s}Aөe's#&ZEw.t 'A 'm S QwCp 3;0GXPN[9{"MЖaץxѰ(h|#: ?>$I.; {#bW}a]kLwE>|GyL#"HƐ6!bGc7Qnm!|NHh VV #O_}=m&-Ft,|س p QOϥa@lK>_X,Ѷ6__<{rबt[p:ÝB%{VWf.1L34ȁrz )ΐs# g(٘`LW̏M x@hQm'&lhM~ 8ڏM6D\">sa(Ps=|DY$!ڤg-jOkNCRWT ̘.f)IE0J]d HAhܬzvmNU[0ٍEi*Кm[m(qaЂ9_X'qH4$/k4t c.S t(0Q;zq;~N>Q]`T#e]畒,B(bYGOڢrs O/1;9?^ -I'd(o^^.j=rG"h%6C̙B?r پET4xҥǢm(9[2-aX#75L9ߨIarWP1-I Ybv^U|"&z'K+ !xi Kmqx[gYP&L'$.-SԩݣuV8pg]ѩT1aj >ӝx5&}WG6-W!k8L |QgXG.]ؿsԎЫTphZ9T}> * ]}SH7y]Q cuFaGxBZVUОB~@;AڤzsMpEF[ o֫ .oc R_"Lxfؠkv;s&:+;ؑdž1ocv|j/-}72HA QZ|y zEpEt%Rldf YkKVE&jv8k ~>  aN9g)ƙIeCdv/V綿Դg*tQ_e%Cp+$P3 W.`Ê0c[8\ ڛALf=GMxF֛g*9(NV C`fb}DX9~}9[ćv3mQ{40%5tN9~Š@]|98tQwjD`!{*IZQ?JQ" dz ]3My#P54ӝ>-pC,=BT@mH pUR_-'ba#0$ؘf(# `W~| z&*y'/9VK!@9 7۟ЧA#Odb"Z:<b &cj}8ñj6p,|)_G&xV $afN?Rf5R7?sk )nQ?;M2)$!|;QlP7B!&eAM qHim}Tziщ#fŜf4O"zP95ٖbRgM9u~h_K!4nL %)C&EKw*ve7c/W66A5ԏ/+0FG %I4I'=34\fLlģ £6_H**?änm${#gܣY+,SO.X3*3/V_. kyX{ްY1QKG&bS]aL-nAS+C ڷ`As:UuY+riz[*d ?!#qlz%j󏸞~A|Zri,27eisDzf_]9lCE8/Rv9f2kŭOI ́U ͵d41<&uK;:h2V⟖N}&5 *}mU)p踶n^̵/y['KQ^8Pp\ E ?g3APhS6* s VONq&YPjB@׳j_L-֚cl@9>9ОpHŽN_OȌt5f_\rirwB_>s¹Ub0%097 곆k85@KMc.vE 06lH,J?_ )ÈH?#Be',dnX1?ցITF׃ӂX9c‘R`ŶezڢmԘ4y&8rnjMNn2>/b%`Vv{)XV5z3ۙy}g1 [ڳ$M/)rzv3 \vc9i[`SX8|r`OOlA§b*Anܓ|v]2"awiSlWz;e%=%] ocon Py@Az})qF P{9n+usrrN,f#!4[^{;ʛ=]i*~{\߼4_ .yT yw"JP?΀\?u̜xyp_AAwh^ M7?vt_d@ &F>lg) gky#3 s3P0A}ŽWwCi8KB\yuT[+E%Rh](Ned2ȕ\DYFSeJbv,.ؖ~R 8!ױ W1zU1=k⹁CHo?X{(6O bI+,U##Ⴅ`j& ֽ=hb=8]MN)%hшI[QN(}cX#hu\SKo'?Xw~&FYoX2Үeǚ!̥;10qzzN:?#t8Ȁj°j744n.cvniIb'8wkK"H)eykjxFjgo+gۀ l!yx4q6y.b1zOelHͲ҃fn/+0F 13Jf^”c1e^}_(eQPQmu5ՙnhL,Ax< <.Ɂ5ƃP+M&lT5d{h0,:G/hX6x[}*f ?D.\ؒC>Ɛޛ)fNGeƨ+o _~…;O,SfU~d}7f[Ņ},ciyb:iLw}ɉCYi*`u ebT'!ta W[Wt;PZ;8o=}u,jC؛N*x WɬXL2]xP%|Oĩ4|A -mx{69eny `H~]?kS3Q)=T=n8c2Q< Tf\IB!,߾# &MD8e,ҍF{'sg8[p^!}g~k1s@pzelj E)j`"/{+łUn~b,5=t*kNHgf~]a;tџ<闀)ɯ=- ΆCp6@3ߩD0{d2vj|$#x˅-_WV(*4H>l/PEu0;1$ZKKՓAt(ru͕=;H hXW,,֔dx ~&VVbDfqnq;<8Y1&lZCV+.Wa6=H0}PO:8SQדB5E /D}#ɥS6_o8[NMԯT.~cmx DLG-F*+W㱋NchZWO]{j֭` Lk\FN} kr Uw[j/XƓpWcdQ 9FE+-~]i[kP7uuMP 0*+ˣvv\y*)Bm5aivkuZQ.RWp5g[4;bW/;,~>p}z:T>S#݀o?ҋ0nsSLjE71h4RK)~ȰgW@P7tgwRx $UfjVhGau'c u`L=3(-@CGhazClR-9Ќ`N; ܩ)qHd !#3ZM*܍2[|'ݑ:<!݆g-h[yVF0k˚.̏Q[ N;hl=nN \`dx)kt5i8dŎ6 @7e2v ¤!}F0I^XZpq"G\O6p!J:jw"&mTtsG^iV0 F R8E3vڢ)>nĝ쉈^Bxox_T,UʂY^J,KsP6N(̀Iʻ3^`u5s(x5#mbڢxȧ'B<9EuZ6!>myR#cE`Z .meDc$sh2':Lw,eA#aB^s#ܠk2K0B:K:dtx%VOߤƠ?.IVrtw?(Ti 3?I\jX8*>Mg+JB J3Oe(b;_쫧k! !u0W*K{:{cՃꟶ p]PC&%N>+} !CN6o 8E8;D턧+K{ rt5H#ca"5Ydۉ|RcօRVRWƂ%h" y3+˪P}2 (^KP"f?Ug" S' ^bc :Al'[>X~2 >,@Mb7' 3#XpI*2Ah{˶#֢p_^f"fzG=Y;ALL4ir!io!٢u? $#Yq 3_#:<쇴zj߈W&S~{)u'$`j\zzH&.Depɐ(%}C0]w%9 oy "dytm|H)h=FLuxQ6Ҡ72S]( a.#i3G5kӍ8$ikGxg\]FB„egm #;sF*#oұ/k|8ӚNe'w{ܷU{ܫZ :uG|?ہ#T')T${jc  tb_&[Mګ?V%,%#|xB04jѱ!sd9/Vmikom P$RN0,duE.Tg_ :rE_@M;w`1}c. t5]7K %(pbGD8G\]CҦͬBh,؟OtE|)RywyACz(;ͷ/Nj\q$Xb菣.z bbPp [.TR."<&V![e]Hyn8[FM:VbF82!#{!Aϵ:}<6 'N ' ˓9&d\%y~^@B >,GeW_QFF:IDГ 9(;V/riEWyuh` G"~2 0/ѬPx3ԛ3rvH;/ÞGzi@B]#nM# .]-cq;-.LI_)fe4og&C"D&ԼB7K0U~/V[3}l*JUplT'-_UtgG7.cp复5 U-ɞPp1Łό٧Gϡi)c1YTa9.!aQ2Lp| FT۩\׭@u$^;g1 (c }JYUr9C /0|"}13$ )zB6qo IP\GS{p^SDX *dbא 29^| ;q Qxk$eԣj`e%K9u0^caMhti2Duۗw7ŵ)Z_[YMҒ^P UEߠByJRZ@^Ә(i*ᐩ"ۖ$y 1CHfv'bM7bqXVOn?[PE3_oZ[QEH~/ẊAld.IAцv 8fms*t"] (/Xt}a'unrT32CPhe j}tu!2I>%+Qb@$^wRIHx&ᭂK.W훷8*ֺU^[c߬ =hzn`2 =whѢ]>OXi*fM*J0}:sbg\VfOWO!+Hmk2wg0xX>EJK1} oBKeOc X cۖ#$qM㋷Oy.k;ɜcB$ )TI;A[h^FQ@*'V7 {ddSVϔ(4(FK m?,lm`]n DSk$A`mtkJs0P]nm.z,κ.H7{6f/#/:jiVތd|HMhubGl\DKZ=O҆k^F!tLM`VX}[DV,SC`Fՠg L ƾCKzVu$ҋ} v3ba7cR.ݲ/(lkWOKBYb> T*9<d0աJX2`fq˨SMrR{mmpO] cmwԺ5H 1 z 6 *"w4,8C~^MPM3 Q|Z0Z8j'o//Lzqh dkdmIW~:|YG}5Ek42-Ryط9ݧU%qEOSps%< CGxA!b:.6I&ʏȢe4dЭu-̕L?gBI^jcySz:;/M*se e3 QrpVjK)`7jl44"K@s|d!LJ>bBƧ&gEz Ì{Sm. K7Pt!ub(0(iT{5\G60;ft! 0#RP ގ7퓿PTk|%u}x<  19s >N}ϚQ_W;L@?./Pe}866_* HE4@ &s||kFW8HʩK r1Qz}p%ZIcd!n$-7z`2GiT[;z2)֛?>Z)3m\f`RMHox5x5*GXo* c5g3C}*J)<#^cOY9iM 8@dZom)AdgH:h05tױ24MYn(U1t|7R=<&j% T^*lfԦJYAuQr =}[bkithˡM}h.zmIU׾+ifN2?Ek*hcimpOGT`wVDbۯ`wDZǷD]Vfx5) L0ųPr|A(a`dKZCuӜR<Eݙ[?;8\`5e/6OޒΜ2UW߰4N5~/Mf/# !N{/r^# 8M됡YngE)b[W>#D[4$3 92{-o爴+&bb-t8O>\H: wŷ+\L7\1%%:@]_эzwΙ҈`_5) ]/3ۇ [k`8Xӵ[:ʭ2 فwkI-k\)z)?K0.e*WiEήK{N:C}jVX\ \/ޓoĭ#=&kb\qZݩF@"k>%OߟLO0Hux`r|g wg]߁ ie ht[Ur$p 8:nQrOz_eiv^oM5d X,5ZEcHsm5!VA򇜍L;_^K 10^[_Asr4|6=B?NJlNj8Om,4H14o&z1GAܮ^ TpmALei)W53Z8pE3K8q̒[r~*2W`ʱ &tNQ?a[ _Um{%f%#jBN,d͑.tpO }KPC"ByL#i3xuK%객LG@u<)d 5Z:]fh٘,1;GGȺ9JbVzEd.Fo`4vtjzDKnwm` MPqY' \iv s7'*L2엍:-10F>5 ]8/,F$ݻ,7Xn`oaSU{i[ "kPFUB貼/P2QhZHMqqn smų)%zxU$iW[},8VZDHCNG!m߷B+,.Pô/posߊL#Ԗ{ds[v?Q㠞;s1qћ)j'D1pjYPq5HMkhD{Mf{z)-i%l%+~#⧥U;ye_Ɂvqx dAN .W 37uVw_e};cH "zVU֦rl" Qϕl򆘊U r\itl'kordebLsJ8(cl|5/Aal~5%ߏ`[#I ڿek,abI;]T'bz_89)}΃1ٓ摣L^5IBM}ޮ|m!|N l_ҝc kVi}FS Elܓ(9=T`Ѿ Hh(v< zs,9<YnmUw?eڔ3 qIseMT5;tVY);PGLyZhk8q[jR8΂/]QZ,] {[JT#TDخ_--]n'ƹ.d+tVE8%[U sϕHv]k5Wq[UPa]N&y't7.=_0pFIqXWv{** Q`Dw})IX@Ҷpř~0xyi>6;^QU§_)5lJ8 ͫRO?Dqk1_}a@0tC.1 56|GO⵿blBmƸyL5:/Ngh{"ۊy7ʔ"uNB|yPE7 9V wc|柺KƢ%713jw觖dꪘ~ H B[ltqѪy0De^KYzj%Hɺ__[{AmE xęiݵ{^hꯁj`XS|ǃp.;:!~AiS,B ̀zր ҜѐziՉi[cK ]6 Pk'^cvT.UhUãJ(%eBVЁ lڊnpXhO8Z"j!ltV{pr, y-юbڞ$ʕ/$,g ;&8daoaT0.k םZQݠCvBs* gZ"v4OժQb)Dv3IcHuuƴXhz@f]^EXʐCE?Ak4*z=aKx,}k6js QHy2m^QI̅1bJ^%/rÔ~d)2Y-f6$ӶݧHe7+OtϭŸJM뷏ע__4Mp9w-v-i9qpݨtDV`2J\ & 'L/[C4再ݻ͸(H׳1Qe7-"xYڅ9? RB" vĠH1T+/r&wuPk+S)ސfP]BX1j#;Wn5hMh\Ru\t$SV\"W9*ʜY,P̀Jz])\b] [ h.$^Yro![&9vto䀄m(aIa)=Ll&2(6VOqRHY"K,I@QP 'g[h9\RTKp8N_q$x/A~yJC,ӴL%(W&nq\3Umԝ8\T{Xh_EU+'$+dP_z4gK] 9} G鹬lvw*C+p٨ej=籐*gp13~tQ Fnr2ckkA.%!%vT", BTu~"[c)1rOLT5m 7dbf>SErC/,٤V@;qND\c7&q `_ņe!"1`ѵ"idy,d/a /˽Hg:TObQwRIiޓ=T~GrtYgG@|*+<Qs@_7-p]wXN鏄I| PCx!c/T6k @:;CVJl榤"fe}9f‘1,4kj`lKdoщ\=ђ{dP@xN0~@.G\x o^J>>u3zOxlk̷Dk%37#ygl )Bˊ!PiyP hwwv Z2X!m>UG“lMb\OsniZ^X `r,*naK\O%b:op>La$_^bmxѠ,z%a ?ɋ0MQ 0CGgsuvچ4zp=_/f+6Q)t޾Ȣʩ"QK),ľ+vWUx3~)@KFaVte& E/ E'zo}膔)c蟫LI3ߥ;@g8)5(vߪD߆yR`Tew^ŧ#whJB#7;T&b@H>#pT3p#--f[Vb8bhnj*kWGy] D4(H 9=,iWe H&[(it?C$i{Jx6%޴r\eϭ˨Q؟"QMB0S umu1[)62>88鰍]aoK@O*ެa#ՉX kb%MABUrJt[XXAtc" WwRJg 請mc(/ݴ4߰ NēSl*̈́0Vo1w$EdHƳ3&P0Aax)VcdCM z_Za$zOI򲚴2-6[p{gBuq0h@ :9*>SL͇>qZWm2"5 6uuN&~4%.h0aCE[%>yNsgkzOD0]'^k\@OiFLMZY㱌X־ڰmb'TAZY@Η3zY~ppsUo4J'~szfRꙍ=jB+3hEwMI%jH$pcyXp/Sbf/ ]_<ᴘ$qC.5{%݅ʏLm GVL5*&Bnʾ -dIkg7IˆاQNıIe2cyjT~ MpF.ʵ˖0QRUvB]JR &obf,]w ~ ʚPDZ h u ?s kƋ ~::ف1CR_mjIӋW]=Epy1.:_tUe^Jz\4lX^PLs{'Y/\wڜCKm.HtVCy/ S1.G)#SP& ^%ںEܨx{/LL*ՔW6zӐvʳOޮkE62͑X -2nb> oˁb@k=f>Ѿ1meDKRĞ3;a)Tٰ* sXʳ1FԐn~%ЎV}&P /C5`tI87r e(7*_6>j[|m|E'`԰uu<1x祚a&W@v[QnV u)U^+Bq&bqX/%ڕ`JEKŀU8 36\JoZkOU-V;zN kw)JR-LmqI X m0k:LhTƃUHwq Ôߋb[b@5^2N҉,A ffOj'PMJ\id|E7TNF/aLA/݋]:=K„ؗ/|Gi$NˌF8;3EKx$ܿt,mc)ɲϮ\PgwC5k.4 6ʯg`ЧB@ Hެe% PìsA~ 2sAb7}{̬a p4cz<Ͳ avmuwn,K8-I, s]  2_~N|^rE QB.lz&q` |lXB3%I2AV.${DqfmXE/ӌN~g"0*:]\G0te?+`f8Aas> e%B޻e}lf2pEm' ְ3 ,A44÷jNVLQ=@pz[&Y5N(aW׮;azLoג'Hd)l6s#'~2qR۵x[HT?l8t";΁Lfrd=UoE[MO(D)MxpLj4vCDҌ4!Łw'ATNK'"\S  'EtjF*PV OSÌ[Ԙ 3o=h0zc28\ePba{dR%/ 7==* &;U:Cz5YВh2Ϡh-ۤAHJG)]ĭPDJ0V .:ߦ?ru61$ʩlz83VN^y>S"chH@]ZǬ;9 ̭>@Xhhl8ҧV.S-;_OB$?tDh<*{жN/18 O`颭 v_+@AV.PHyeAuN>_rbs*x8[o܂WIΎW`vKg&jA. ‚(oh\wo]pNBdٓhdoU&CAp}‡X!N 4> o3&P!1OPCP55<_t@Y>u x|8E; Zz)Qu/p P{g2Xc9AaIZo7iy82#4!V`9#ԏ[ X=Z{WǫH?s0֭W(,"1jPH*! /ĺQ #ۭ-ut0Ppjhw"=cQN[tV ﮕ + ,0Iqj깧. lBag*T+ua3k-#*-xXͷ1 _qA.'2SXXg)ќ8}ǀ@ 06>Ɠ@Dݳ ,ʴ|`\din`I*V^$70;0BM2Cp$!Mjw[YV1IewIP) #Xf92 /'AC&*p1Q8>hC>Z례Cc %^{iᛲ6nsʬ)v^zU(tC\~IK2֯OYG^9F/_$55Dd=K}ހb*T`Ցk'gޛuxP8ɉBxd`"nkp />IgqnaZ $qy_ctw( IB52=B;dHzI"ƥ7M\&:t%vtSjoz""5Tc f_ê`%Ra^Oe}dVK!*7p>'&igPbPiFHڤ=4v aÁ4\XSbi2Ӫ*ںO&{t !Xc;!߽bXu܆= K2h폋^zE?"@ZiOZڸիHikG?~ame䶖8tsܭ}scM@ xﯛ<}`5s7Dͩ@ax`ߠnJǶ/Uo#\Hk d/?}-SdP:+eቩ$pd>)e>j ss[D%gŖOO$(x[8xZ|yj~A6%$'Ȍ(tZ/:wiV"sy{JUCn܌ %), ?#%`: E#H.f[Cչv%^[gf󘹔k*>;}#fHoQʫ`BS~=Kǎ9qmKq,dU2εNvdmf\EO7N[> urMƘ8"4?o%i vT X?s}f1:x"SH+Rn(2SCB랰0Y+1fc;j`I=E657ZP|P26؋-y7`#s*^44Yl 5;FȚG/ϱ%]yp*4[b8 |+@L-NT+ }4QD3Zɫ;?YI,&k"΂z2eqA"|6}#߷8:YuK/Y־?^S =YGTv2y{C*'ٜ{rQ#ee%S,"tTB ȸkxK>"PHoy~JmR}WŲ#1Wac-]RgЕy7]H橐&AH(a\_r h]^ l/;\|Uy5&4)%RkfKr&ubJ睰q=twNۋ- nY=}@d3N,~]HPG'obںM/558֎{Uě-9[3NMeۇd9'mB؜_̆$R1'5lc2lk ~~=qJ7rǡr5K-,=_ADã[p^A뫁$`JCgF8Aع/c`D`V(ΡZ)֟sՊ*s}"ˍ;wO7x;_U1רeKl CԤXaJZzo0_NJ*ssI-b Q'bD0>R|G#? i%V?.^]c +#27?5(wy ;gCQ=0?[##r[fMy:(Uc!9'%͂ať~ZQ ,tg a"Yfǡĉp4͍sH$UZfĩc4VCN敝o=K@@1j+L$ݐ z1;s"{Kuߝ6٫v0XXvq~`]J9aJRC?I5%< }he3O'lӵ΢;aqFwP}F*ڭ  l,5i^ N*Site%w>YO@9!|^l:4t t 搊`P~xόX /T$bh^9!N8.}x9BVۣeu N!.LIz@~s9m3nFb #'Z4UDԙ5m$KD`P߃0wܛ7Ca psHN\S-+| Rvjх}%BDaRrXQӺ:r+P+Q>{ -[,xgޠ?R:pDz`'}t$#=E>0aEQy8O t,)yUԭd|*ĎL(A\Ue+ p@5 U X.yd8vQ)*%n-ʯ -s95>^BN 8VZQ L Jil'ׂW_{&Ĭ|DHEVEsw khl{&ȽM\}9d-@.N ;f)7f軽B|:H%Z<; < ;yJ#1hʀ5S6h&NGxĺWoaK1#fN˼ʧ5-W%, оnRzhF@5ܲ)Xip1I7p.J˵$@Yɰn4H d0.| d.}3 ~p\7aA8N.Sz@1raDŽvdG3l6@M3p&b,UpxѣX;LX[^_*pStO]2v1![5yrq+q54hxFt=)/XĘrB{bŵ敚tx%.و)uJbWb W| y?!ȪhM$`Ҁ1;zh~rnBWh\~ g?\@i0n&)yqU)͋ kfo-'`r^ɾ(oXӝM>G]K^{opTK1*IDfZ(ݠ0&ziX4n:զ*W]KD#ȁ,LAvPPaRv|H3:ֽ.tjKgoң MDff#\v# *ܓ!mC8͕exn)ZB\g _:-0 ES[WuqkO"`!c ʋ'(Ia,F)JGg+={ݽZ,mj;e?Q-;+J[W6||W /u+xoN(Ofa*~?4<ߡ/(7Yow9Cg<YӰr*lLclF[a]u`=[^l@ƳguX\3Aw P@˫@^z~ko#'u?ZuT1ߓmΈ.sآq;"LDS9&{ |ru,I؃8xY[#|*=M']nEG%8v7x.ԛ.,>];Lȼh)IbrX]}wV)5*JE4˗Ȍ?$8)\IM!yj]]zK[}ӡ=$JO<O\v/J`R  b1W=iP(q6!Y_*D@/.&u,Ws!J[G5rڍ6h:U RʲQ ÷ ~ R4M>dOVbb.ו,-p41D1[]HYp2_ :b[Ho"_5QaA芚S*w8Y7\BuˣUDyNv((\#-'+J$Rd6$%?5`kH^:sr"u - TSQV}Ѻ7X Hϳ5ca>mgˀ2"~3LƧDR=uYGqB"ҋ6;K?EmY";(2߹O.b_V{xWa|sQc!3m@tnW5x3mcQQ$$Ot_/RkePҖ/Wfs\]E2AGp!8hp䂫ln~--o5U=F)6^BxOYt;DnPi[K l\#^ 0r33%1s9@R>Y/2!uZ4IfA*YQnPSv)Ǯ2KMiX(#6ih8PnEV ݕymvJ v#{8c H>.1or/ z dۛς .!YqtF7 !T}? Íe1 [f^Kj&+orzHB52eEVP3hA[ ]_6uO|(!tҸɇ՛#n8j{]~ϣkNp ƒwT'"A+Z]&n He&^@9M: 7aچ+9ġ Ͳ:CDy`'e95p]%4`&F̼%H W753U˦93yаxa[_""zLlX֪Af4eݷuv8Wkeftm'v !ӞFEo,/2U]b ϧrRd¶LQd<憁h!8%F~U46)I[aC ݮ&fĺri𬾤* ^HLc YܣR8介 @ =Nc$݇XZR;U:Lrwa>]U{`OJ3GfAkt4?U?EƉ<(H 0`F)7_!tI ꮢWÉ",>h}qL@!7.]P<|. X8(DRNQL?wecD_4]Jīx|Լ1l+jpқ&rNh}C=9)X gf{%O;ez%ށO~ƳC991@wgt,T)";>3'}i7S?eH fn` {\ uZ)mJ6| ־V1Su;"7n *VغSwabA+yoV.hD͜I넝H3:1G(CG}ZcXB:9n5?%q: 1K!j9 ozkYY*ЭLhzry&|> 0:p*ZRҼ#DP~@h7a(oW-jz9ٷFHyYxe֜+GR-,,rܝgidES|7 2UFWc[p ԲuT>_dE<хˊSjg<LЀd? =Y9=#yST!Jca XPܿ1vL\a %[\$Lh'IR}o@ F|͔]ow0] 5d cofA*R1{H! O(Y(b`㎤008{hE8s1MLwbsEL7K\;nɕu7#0)Eֶ$2ׅ溶*ΒO|tXn I^qc㐕y$9[A' ^)+ 6P}s%UüzG@1D"r_,`@'^zyO'RdJgk AiOR'YGt2ٮWl^Ԧun8]B7 dN߼}sؔ0lXBf'$V`~{X=9v2n*)+p3\30gå lG3/&{h@Ly$DVe['3=IA"-T8io]5-xA8/<[QeԶۡݦhz δZ}.%X66ev0Ҩеhd1yGsJ>2YAm.T')^;9ݣ.}y LR $0e +q6SrldDmXⴹ\3< NOwkY-Zo|`gmpM0VUo_r'k0<=<.!G$h Y2J+IM-,X +3< w P'x,HP;2YN̪ gpϾL%$Ev&x#qGqh`_bFy>0MB0D2C`VqGJ^s/ɀE:\c8pE[jcnoSciLzypyڼ{8+3;a'&5Tji/nKR-Ef}DfV5`TPޞذgPgKK۴ NJ ]?p"j!9 t_^Od5ς;PNTY5ea/9_<˼*Z@=T\+ԯIRR3g^ud9y~qUZD/DnnR$A5TRqݥxtw1J$ ,oK{jɮh %yPV?@pYem%ѻi^lC/[Q*6T >YǵK\xC!ŵl噞u^Eƅl awezfE\"/|c as^.Ȍղ O\, Tj?T]f~|qV ~!'/m-oDGL7GweekeD#2,2Sķ`uz)>ٌHL+:mdP{tNrM3?$XҜjN.O701BYTy#MhH7AII[IDY&PnpKDVp䟣TFzJdҪ=OZt]15Ce=Sj/jӄZ"ѡ qy0Rl$LHkh v Qت G 6rMŔr<"j,P;Ž*f[(ݨP-`[kIϝo. [F .iY!n1Yy2Z+B8.-O[OΗ3O!V*%B&Ź)2ϳ[V(2oZobMbyc6e}$X"|tO88/'e̒Q\V| k>PA+k6B2:NMȜԨ7nP]tx$&+7a}'43o"Y}=Ϩx7- ɡ)Ít.QзŜ BKJLmtSՏ{GX,|J}9Q-6V{SJL{!"Iԋ7LyDhB@Zi@i} no(j-̒#+[C늺Z2]Dh HkImajNB0H|x@7$y(Ei;J^qv0hSZ^  ǔvٰ "4g6'(2vbՃ逬,ts+?1bjdIC|ʌˁgwHC{*&]q D}M;7q[dX_A!i-ay%9y}BW>gL R= 6WJD6V:m19%z9 J"x@=C..8= V MDF77V'Ԕ ԏ^jTyc96 ]1P<T~~N}40͋I7StvB誹gRƘвo`IEZ!1I9V>!2w4dwp1] #S]4oydHsQ+,(%I-ZL5}iswҕ(7DcT=jeL=Sb Rd* @dg۬:(N\P|o 3t#nTԷ .DQ=&~䔳GIL"};ΖX&aWLhlx۹uzNR7U>CQ擺2BJ haG Eފ:8 hs-4,cn[G×}h_G-Vq4D x3Wع Г#0I"kp:.1bDa=jjNYbfTl:Z};uf\-Hw!H'\5}xgpVb"- R:O.1odw xO_UW}_W}9z*;!$/]=T캺nhx *:`QDQ>9GFhܳ _TN-rbI4-Eh_I0JN0'5(f_jgT(BvU֦(>n(fjacN0maT\q3Ҿ6Q?w2c u 3$ \,QF֮ JgF/d͈:YqqPeRtjbIA\OPZ2JԞ =d~PxL{ڗIבC8XԢN Њ׭ZtRч0"ׅ))V3Q!_g+6mqm {Jeg)6ke9wWVOڊ)f%~ZH|X '4 -"XM77 -/510uygZxe] nmge>p ͆[CutOXyۺ/*F8`Wv C@b őRTʁwȉ0X_g{fJIǗ V{׃笷?Q(Xv՘,t ~JJ̝钿QmY *Qq׸51qRJ\^VW0hip-y*[dcViK+#Bqy;9_&~KצUԒ -r!cvR]0)~0SS".1![)?Do"`QȚy|sp'R^!KGQ^TDRzQ~Q$Ix1c6|rF%{f0n[cJl|!LS:\0+˗9 ɮ rD*JErO#9DE<k?Mp