summaryrefslogtreecommitdiffstats
path: root/src/root.py
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2013-12-18 22:44:25 -0500
committerSimo Sorce <simo@redhat.com>2013-12-18 23:05:57 -0500
commitee0d1ce71d1f4883aecc426595ac86322a91260e (patch)
treed3f068d9bca5ef9ead0ca77ab3a5ae4c25c1cfbf /src/root.py
parent13a58ef5cb599d3e8e3a9484bd84fa6fae3f3390 (diff)
downloadipsilon.git-ee0d1ce71d1f4883aecc426595ac86322a91260e.tar.gz
ipsilon.git-ee0d1ce71d1f4883aecc426595ac86322a91260e.tar.xz
ipsilon.git-ee0d1ce71d1f4883aecc426595ac86322a91260e.zip
Move template and user retrieval to page class
Signed-off-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'src/root.py')
-rwxr-xr-xsrc/root.py62
1 files changed, 1 insertions, 61 deletions
diff --git a/src/root.py b/src/root.py
index 50247f7..a352641 100755
--- a/src/root.py
+++ b/src/root.py
@@ -17,70 +17,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from util import data
from util import page
import cherrypy
-class Site(object):
- def __init__(self, value):
- # implement lookup of sites id for link/name
- self.link = value
- self.name = value
-
-class User(object):
- def __init__(self, username):
- if username is None:
- self.name = None
- self._userdata = dict()
- else:
- self._userdata = self._get_user_data(username)
- self.name = username
-
- def _get_user_data(self, username):
- store = data.Store()
- return store._get_user_preferences(username)
-
- @property
- def is_admin(self):
- if 'is_admin' in self._userdata:
- if self._userdata['is_admin'] == '1':
- return True
- return False
-
- @is_admin.setter
- def is_admin(self, value):
- if value is True:
- self._userdata['is_admin'] = '1'
- else:
- self._userdata['is_admin'] = '0'
-
- @property
- def fullname(self):
- if 'fullname' in self._userdata:
- return self._userdata['fullname']
- else:
- return self.name
-
- @fullname.setter
- def fullname(self, value):
- self._userdata['fullname'] = value
-
- @property
- def sites(self):
- if 'sites' in self._userdata:
- d = []
- for site in self._userdata['sites']:
- d.append(Site(site))
- else:
- return []
-
- @sites.setter
- def sites(self):
- #TODO: implement setting sites via the user object ?
- raise AttributeError
-
class Root(page.Page):
def root(self):
- tmpl = self._env.get_template('index.html')
- return tmpl.render(title='Root', user=User(self.username))
+ return self._template('index.html', title='Root')
ح*0Nv Lite۝>ƅWP`Zh YvNO ܃P]S!PS62lc^hADf?a뱡C]Ch BcٴKi85;u'ʩ=)Wx?5> ߉N'ɻ{nlP W$}Bt!==zh9||?'l!_/Y4K]_ۇuzqh#=^Tr*`O; XPVhVck7_"bTl?8x 2}5TZ^D $#셇o{ {@j5+C7ägiG 0BH9VX"Z+7$;$UE5- iZmF`7e8 ",w1do p=baѴZ!5a q֜o +YglL܊Pߺ;MUu^j}ޓh{OQǵz@?m%aR<݇皸~!>^78K#~~æG: z~ 9$WTLy>4 o@,]مlE*w{ )5ԗ+F#Y2F`TkO>u:٥?[/,fF+i,M&z߱[\o8r`&wa!?ˎkfえXCͩHZr&M8 niX%V/_#bv1ŭ2 M%/F+}uYa\Pv7M].qe4#&#=5ʇ"୏+ la Yyt8M >~Sqlͱ2 ILW&( t6HQ@Ysgq"(ʯ\oWެҜ8ͰG?6RhR]gBFh[AZgcyTXӶCi / 0vh vL,8e&eL@ys}FZ9/ 5:B>zi"~J_\~azQ(Aڎ;heY ̉ވ"Qz*Pg2o#cc'8f"g+YRYWnХ'ט~& V.أOxx7B3bނ%r2)i P9.e,V0>e%vLXТ0"^fLaEL]r6=72\q zyIґꌉs:6 5HId@H?}v2-Deӑ#Ci%VOk ޔY+;tMyt-zZ--h- P > 瞰FPO]IaW2?K}O  V`@]=ŅZg-e%jy"03#GԸEqZ1 _xHubtCV%4zF$PhzpynPŵ5hS MY Gm6# ߳˙MOZ_`t[s(~M4jrE(NphGD@L^w]A|[r-w?Kآ!D4bG԰Ԕux%e55LU~o5𿞲ٜj~)qf ,^u vA8N5Dr%I-CKinn Y"7$uR82^zی~TzzJsXhl/i4>{"kێgi 0j%u2,v E ?k"eVF˱Kޥp+U5 c&#;|FS@1}- j2'CڦӝAԶY Vu'HM/"<#x؛T͟cy\UPo`f F5gKըn\X@%ɝxClֵ?`"Dfi[.3yLSS= %{Yf^_9Qڙe& TqS{4^F1ՅF27Xhwx: g|&]Q̻iT{~e ?b "t:`e1~tʄ5pA%DjSQulN9aЕ'4.J %iF H?hlۓ"(iF%]D6@4dkq1:a@6xq/aceaHĐ9IbGtD?ոw]I7 Y۞SriOE#Ku=?h] hDb.@y?OB[\VҴWƁ'>%PQw)j%}Zb&&SE? M"+G2gYoANX>\{pC Ť7\?7tG+KpvRᕏ3Zz  PKt=5Vc.g /!6pѻq]P?'ӧC}K9JY,j&"]+)l -d+Ԭs*z,(aT%_xtwżoڒڿdT0yI^h8}k[V~U(Vk瓣r{$0E*%1`h݂$|XzH ӕeO>E z*ڧ-&2ȁ]r~'F&$ i2{'J^6^8"eg%c%[V> 3dƚ"a.әkAYiSocשDRmtIrqנ"Ip UT9 GհJռ>4/rv ik;Ϯ`r 1*aF |I~Li)NY1{?'3LIb+~f\6Ry~|6&jRndwVxwam$^kCKiC-Uz d4p`zB3t(K[_H9"3:ϥ?žfY\q"1Ք2m+1x|Tb2pf9S6EYB?n3`]j*eU;z/тa\f6b;j ϬtB=ad崛-(`$ü| ڜ  `lۋ6QV8ǒj0AS^fsE XIIWLV SIZHm#gh]q0ir!n Sdj"ظ@qQj'O -<)gwX+)f$ +*tT{ bi7ZRa|sWNPۉE'anN," $p]z[7,^#Ἢ>ĸ{=?,ѱ䄪z{RMZjPw!F(&{|P> gƥD'MCt]djJ&\OM .p1:G.m{cFr ^PNsYkp,86lc742ԊƁ淬dGSUs:&o9I 'hsZZ!5Rs]8(QYD\Ԡצ$lCe<TʽbXAp>ͲPen]o"˜ҏZ)[(R<_=QzuR? @xJ${2a*b!a\Iَ a;קmUdz- JH_Y <.V?Nn|K^~I,h3ׯRx?%yyq4wBA5DQyJ%1Q'+'.E@ӊE%Ѐ][J*_ͬOr,sGqAi42&4eU:KWW,MB\n't>6>NH1ZJDVO)yi>\Qn@&`&csΡfPQyУjhuXn̗$MaZջNs :ȫ\+3}1{/ >G3 b[#Q .#Y(Kp" ܼBe٪#SҐϷ[1`Z[H.@?lln~aӸjsE,DA,BA9\Q^FP sgU%=%Ke"՝|ier\4 %o>* hPlfʏ#''$hP l7)'8|jn]J[S: 5c_/1Byưd!zY]#Q@ o'Vԭ53io ##ĻjK@j.pNoN)-~T-눍مIF{Y"z4(,c)C&P,(c边ip)0w18Ekv;|˪nna.O<)€l^&tYBOU'Kx:dႚ˪>i1*In8nmPtV^*+>J!^ hߴ]ky>_yh!;f;U^w[ G,X^G h~K_ӛKQw7 5IG'HE?f lJ,"#͒yP!L*H)J/U[7`s65y$s9U۬O.gkD!JUuܗ>GLG>s<@Od$˻ M@v *ZU6<&{4;f|Q1= 6Yk .[K "EH MV4Y!&#pNK$/K_Bmߞ>񺣖1FpR +.$//*NY.h:&XN -V86<|%D <;W sItpIc?4O/"fB{B,~ԠȪ #[l!߅ VjߵjO]f O=R6IUqqTA 倮=ٴtz5iUWة JVaÍ\as6LiǜsF' ! u.QG`6k*Z"qq ]`f!n1/"c2Ǒ\\0#*-[fBHµGra_NKa>Ynj_9ը`J6_[ k<1~%WCc~xvQ-\nCf좉$`\ڡˏ? pi6f\8yS.Gհa1տjؠ~>ʩAubQ! 1 Zc! $`|c<Q۽(5& l-`2C&Kys4z#q,m^c@D,G]"̭@Uٴa1*]nޒV5]=ST4,T=Dl\)^-{q )'ýsfwr"{:FPCLEoĺW<\WѶF~;Wٕ)Oq(,b ,|tM+b"%^D).}K9]\ $25e2#3KKbmQ; Ya؝좪ƍI60BuoKt#E\?2%šZY"Eڊ㥔lR(Πr*}=9zMsqb$ ,}+ҟWpQ)9E/&Q @^vH:|iaYVN B@ӉY9wMvH(ulcvp+RÇQ83YMSKgf-'>[i(=}!AHο}? #%#Qmr`uWŷ-Zu~"q?2Buu+|ǘ[bj#+1D+(r%C}_S9d ^;5\G#h̦Q/a'vb.78Ϸ\T_kAL,Xc>G)۹ :=K[=f I.uTd_{LvLX<(RlbP/La}&pā*ދ25vAhzcCEI ^sڧMCm݌VT[iw]6ƩNU(YF 3xǸ;Y^4$<4Zo„'D1DO. C6#g"EmmoU8Bi)CX?:KrL~mB ϟx172DIūD: '.WRMӋzׇvzh!nE,TL`gif/x&: .Gjy?=5Vdf=3h/T 'Z1r8_ljSX>W1>:,ר2?zCJBïhkevg(g.\QsR,[g84,pb#_Σ:_}GIrOޱm% Pk-=yevIҳߩ?k]Ih7Ќa(BaШe?A|P) ooc&/k8dD(5s=z1qIF|ȝF{!cs:Q1%?ccYhAn~}HVf0}(Xc"l-&E]z[|bc>> `.ڈs 9Lb)*n+ݬq #pBjjEHɋ 4{Qj>ma/JW9wId\wwǼͤ76/#ud^.`w+S#B.JRPf(J|(4eN`鿕$ćPb;2?>* ~cBS.XqZXs=2 /1.yQ0e0ʺ7Pq6 K5UG(0S/}+&[AU;|%1!; ozMkr\nh[c^8.hyWJ-5"L kBdЌьw`]vr!)e  U"ӟv5&P^kt{r)a$$c0ph')7v~q#Z #Z] o 7~R?)~Eo 6\ YV7YbкnG^RLGJ ij.P6EdnS| *g0 Ϝ0OGCIdz4qQR%i\iA+1e'۹ E,T- tJ_Zn0:*K9Q ;6` N[OjYwRa|DTWdSARk;©{, Ymf3Κ-T{G1L"Շy "742ԍR6|w=HBD:t6{LjàM0s;"`+oB_!<*.5_p7 G)ȝT)0.dxF,\Ke0 ĘKV8zȓE{qa>cWۗ8aYYt\n@jY!U/Bú$;8&MpQWÁ- OV!Ans| >İOeڳnOoYa4W.N='^7 fpo9|^V :Ձ6qf#-2D;SK91oH[aN 8g 4ONɾ."wsc_6Hm;Ad0.x2ypY Yeı1+\uNgc/tz}Y0]ZY*=RW W5+ $jHB>|IVлf\qs_YsfZ}B%mntpjC8_"@a3e׿q~-q5[`v@?͔&vy)a%1H6 f]Ni'߼ r HB0G,tc81rx6VBu=KØzf4 nte8@]d_Mn=K#[FDd$ײij ~kntcU&uM6r N"dȤy05OieSe {ُC'wޏ66J[`17lH \Ol!5AT7eQl30J|oWL-Y'{.3@):F)Icn % D wu0ԏŻ'JMgƱ~5|[_?YUVr[W,Ⱦo(b`銎}ez H`I[˰UE<|wOLKh 0?OQeQӐԹ B - fdgpi}˥=55r~9bp`E/4f\ֺSwIJ" MǸXKRFļw ¾LZTtA( !xG<5v89,%(˜Z6 (C,is#QZ{:&aZ=xt?W8%9(g Q1}݂>*rL<Yp^*?q`L+\6Z?àq娾S{,FQfkG9Y{,]lZ*ϴ1M* wt(O?!w14\qOVV\p=Plgey7|@r5jVK 68͏ocI+(L/!h'qK g&FuDSV5>P9t/` 6ΉGUTu)G7goo (׏Hr)[f#ڷCCUd$yS#F5mjXR.!Z<>"I8C _E9R$%bx9|pt̵N =5gF sLtM?AZ#RuaUli `|{%9|m[Inj .,v2aWdr5&:)/zSݨ,U g<4U'ST^e=ol'8ѐ1$(Ov#V`BRDt+rgB?|Jqc+%nH]Gwzu{J0W"&[lOäϷ6-wKhEyVJQSanL*DDR=g_&-Nyi>yLbj~H Ll? u*fjayW;5 T2!|e^ȉG*eTwEj!zfۿ> 0GD8 ?t5vo!D RK;4&G*CxxNF::M">߇>(tq))wto<3, E&WP3c28%֨n8G6ɪ̞oWo]0ry՘s:lm@A^Wku(3RE!.!Lyփ/6|8DtpSoeʆ{ȵ6ZDh͏BK} `\X X \CL'yE&2 *BBzsOv -mi;|Pz1i87`ltDߝBQ*d+UJ2I6VEǚ!aٛ3`n+5v*0$KXO$nm{j@`Gq9^u Sx&ێʒWon0mRDn|`mꨑW }*%tf\JV [B;繚:0~Q)'mqo򤂡b<5+i3]| =bs 9DEh$k۝V\"pOS-B7p} sR9rCy=rJíƬPvfs` wc8cs@$a<[p1y uvg8"\)4OTڼJH{:>[[5| >-}Ų ٍ0-f) W[e Ί+EhP%ˉsX׀$f[B[ApKW{MQɜJɧxD^Uxv,",/pa9>HB 3SDK쪅j .:9Ø 3m›q^d;" s.j[EƦ3Q#\8WG-\S+ި;KIS2͹¼ ېc>V].Ֆ=a#phD0P>1 x$p㕬թ3HIO(Mx9̄x|iCTز+M+(pĿQ)Y€ͨ&?+qg1_:|A#|^ 0#xB_n\n jWȒfxD |70z+Qgw$]Ck:h3F^lSzy/3`oУI*&Wox??[0zeB9=zʋu#[)pgf;K5e5N5Rx( s>o}#b`Y ʐ**ǫ{jهE Wˋ)2?InK}lWqh7Ƌ)_i 5lHxc!W[E%"9+!gCEt6dR矌)j$gPQ2ݹ.= UA2$|1uĖJ I6?D xI/.7RY. q GicJg3PVYz-#~0͵'^(8+vxj`N k ԋ0bFB\*VwmhL ·KTwG)Db@`5e3VA2|ۈؕvRhBu/ۇ7X 7QgaKWyU+0ӯ\? %]}y3nDsS +sٸ9qV!3X>@wz0?tč}sy'(4ABQ\7Q4" Qנo- 0yRp&^晴` |;pWr*?ODN2jup%R*оAhS)Rr@Y XQ 9$gNTO w9Ye[y :6CH5kFRŮUQtTUXk kLWYUkm ؋ 5+=?n8`'&Pz ]_CzmCp9  W-ٰm>JWB{hè ƜEMRO]ˈdgOImߙF n GѸ`bXZžnL;#KL[4vΟL4B @YRxk.VH|̨^YV xZ>'FҰ,]*CBLȓޥ3DH=01a>1A5v.%bC,Ј~´lt3䓖IG˜87m;cۋ\C3O}4|'͖+.ɡ#|ZL}!lL \J6ZAarO]D-`6(nƏyzV/fdjeN!^r2Ah^5v?s$d UtUSb3ni\5t^ >@xuQR+Zrg91߽_l5sV]Ȋ%fn?@;h3aU$= 9p~ʹ.\yk!F+. Ͷh&sܠ|D!_n.fpEXD!rzJ]MDGM.$EaM''rRq"Rܬ#4c_QQUX͹gw''D$h m3c}VF y ځRYvwqdb4sH} Su!'J&r tJBxxH?3K|:mNhX>ln'IҰ-yo4`ΛG<9˚Ăg:,OKG}ujQ=ckα[#֤y QZtWE}z =ӳ$˅ٍe Ҳ;dW$ "?M +X*! j/jy>ׯTY@> a&mN'CɑOTީf[Gn5$]>0{&3qߗ Dh7[!m; D=MCf!ųS됆G@-1 m1d*Uqs @//H ?+V#)O}\F<+* %}6zo>mjm_0i-a'_;u3D$Y,=g\nผ-$2xL+ U=d[HqX:v|DR+-!9U6C?7C=e(t *Z i'yop4?/a86tQ'i-}} XK1 B'C3pH4Dy]cn#}=U˱,)d]*z*yNikyS&~3ne._f`ol|mJxVw&Nla֚\}{p`h@WU@ X(oqI "z̐J6^g2/VA*SDWk(c]{)1ᎊDIAcG⓽Л~N$:!aE!7WH0fH8,Hi)2^"i/ @vbl[ KO=/-2{J2HJ jU(s{6vDʆS+^aWХ2Ym/~T5 5('s ^( qkyT@v$a\MWx ohb"T-p#ɠ E >'ܸ}uV;eΌ4A8󭆺VP'ٯ8M?qՒӜ&x *m}!6B̾С!Yﻎ|``tzdA,IZUM+>>M}jjZۖ§IH њQ8w!eD8eɖXB)XbcpN.~,T2tJl2֠M:6Ha{'7Qp'~Eeecg_dE1 ]XwN42ɽnx<b%wSa8ohВ.iT*Ψ(4h<̷aڶgle84啾:S˞ZűA-nT=A|b.rA{{T7TYҍB S",\m)VfJ,gQwG['GS8G]t?y%44$k(?%W`.`xosl6e@7jFǩjrZ%ҩ)εN%;Y=(;iJ%Srcv@+Gix4ts-#}d8u5/DU g>T RM껎 +? ]0 )1qIFq=_ ;qY)#Vz d3L)u6$""Pbyddh;O3Y,-+31&i7UVG%uÖ^ŚYgVOiqBxrW+?r1ԘT5!3P@(ӭ '2M]6/Ys@liKdkS`yT:HEuZң7R;4 R.ZM{091ӂzVpyhS/ˆmBmoGacF7}6Ռ?r0Eg˟lϾf,5{%?-,3tep [o"[T?>B6jGs!pңEy2sY%?CRiy4* UDZE4{-%3:=}6 R]'X#DGy5?ߍA =NHޚ/EkYY?.${gF-y IZ5Ь;MR TۢT/  RZMẈdݷ 9AWD]beXHˠ! ˆpQn?R..Xt'^g]FL s٩iWv1G[VwhEf̟>FzdO& ԉO,l?F>ޠ?뙓F6'B@v"-EMڼjŏ"m|Zo]T]ds׷+.qʇssF4< 90[ޝ,0M1/Y^])ϻYnRDĦɰAT53mqNzyy&Lꢰfk~!pz2@p`(4l2>gK"H5ڢNDʻxb>Xi&d{o99GDAz['X1ԣ{du7oe:_CUތ`'?ZTҼ ]=<3Vx.rJHSWh* |ݳ Cwk3U՗z~Z aa4}*&DH$W>wS? d'¢4Lcw+C-ugl"XjT&@w&#_WvZbzFiHmW[# 5q)kG%Jަ]<.Wjprè0>r( y> x%7')[XX5JcP(x3)j ZgQUm"#%;w"D$[iz Ɔ_wJ$"'u0 uC;lR;"ߟ4)8OvSk ܗqߎjeQ=XyL3ok|\CP`_4]rqB<TLBN!W˶$j_hzk,Ob@vls[i}RFgM)X? 6oHs;9*A~ #~Q|-}3'C`XծҵtkXl2¿2B;Xf}9_sF]y[u6<0B@\=A6b/bTuz2_cS[^75!?FLMU.Ccm4ː*4 =鳸>uMWwSn:˳UMeεG1(ܓ1|f_Bt+Yh^1K4t=m#0iqg|e\'vFDR& qj sU4 x:#$Mou16/^?>[OL݌Bk}ȼ~ !?" ".!锝iI@~ (qm_HOpNJDk.k |⡸,5dDs1Wۍ%u(2`(+ۿW*)-Ņ>>NSl:'|%m.tE4=鷝LBHsbxўB{+Dx'tEVmLaAƫѼrWf4%QHQٕK}_O}q,?L^ϒ'kgS4ZrHtF!8¥u2u,d0ʝ"0ԈC4 C{51]5ݗ>RKp5fvOk@D'̈́ 6ZHY9?WgVNbLאvT6RcMYӛiDn[Vx!X=>qqesPAGm_횜bFT,h^?Dh1I*<<vS6ѶӪ%99]2OEWbC 2Egmh.<jh \4?5 !H%uM&\Fʼnfe0*@0' lKD [XlӞM gPQAx{pU /rTy4.KrꮒWM/yͥVt ߽^jnU\@^,E~5|gq?{r|GTAt/WςeREM#Ǫs>csěѤV-(7 (Ŭ/Vۣk ?j*FZ;mV]oG}[`i 6nFh(.'ǎ3kMl"Ǖ)ׁx>숾9C#FD1i2+M@~EeW>7DI jhg=lLdmYBy-cZE:]-SG{))~pj4 TLֿVsGB Jyuc5"<6Fd4mP^qbf%%a(*(^ jxg@" [p|uᶱ1{HX}dvr:mg #sLnmIMC~5=4Dx#P1vl1+ JM]C&.W!U^]i_`w ΉJگQo xx ٤ڥeK-xcV+>VBrᢁz7שMPWLM>hw3meо4Թ/yJ6HC!kOR:t@vݡ`%}4/ yZegt| óƠq]]w)i. J$wpGjQ-rUjcYQH+/ifwRLaނSy\dowdž:!#Ŧ 8Yajv=/[-p5vr1pw H+KeLmnw3ahQL|]!)5uLs҃4KU5w౐_945J/#NcؚOJHPӁX;0" QGxr^ i@=d1Z`H9tD0Bw .\hM*?e+}!"&<" mrN#Ȏ*iްglcI{uibf^w3J4K6t;(:"V *+58O"Q\+nk&X9kd=z0HV'nOZBMD.VT`}L 5VRuE6lu{^|z8P5|y2Å}QjJaRV +PxG*m3-N/-ùŪ{*C[|~wXBZ o?LCl3&|`15ںڛfDcv5GKb? $~@cKJO'=Q/G^?z!^wˬ13lugԄlKMQy,T:H膭<hB`WEw %D)3Y=iOlǁ!M2H.g6B KFiO`Aq,rʙZ9]E\`[EZ|"$n!&>qcdh\ ?QHU\Ng cxuh $oM~s$j}S=[} yrtYrMAr*m\(B 7/PEB|od,(e\0rP昬P~Ӓu8\qFO-r1D-9yl0| gQ!q#<٘.?>FV#7nE:S@o;CC @S-Q;3 Ntrom>@kct] )Km;ZJ?ؿ2\ G$t"nQ jalXOYdȯU{3bh K- 7ԗZO xdl6ls-*mb`aS}&S?t yK |A\Q %Ҁbۚ,5CMqһXиSiH?QfvҲfTg|H8I( Dwi4g#U~P}MH!yeMh2:65콆ݡ܇}jbJ#%2?iPʍin0V.윰Cq0}7 #^t8'Y:Y2]_PD9ΧΠginwRy4 #j$ R  F 'K gREh2}CI1 "}7!ekkE¬rCgYN[YޒFzKjJxxڍwWXH( Fm"# gyn{`rZk5Ӗgֳ3:gY;1sr{h<Ht@Eefd0z(8X ]r:J5ϙXK큩wCdz6BFdƤ*&~9t..; Oc69_ R{@lVo7aZ[bCEyXH޴0W14a'PgըIBXeCLK e5H]2gϜp n$ֈ N@U]syï'V`A!@JRgnLԷf M3eŷ<#͐vrI(xj.Up˭5W%2Wt )G XOV/nebvTWajǾ hI:'dAk#[4\cMG貵{`Ѕd ӒpS}:blAn ߽BQS#DH<™0&ǮJEۅ,7U-<%{i=o5f"`,\iO ܩ`ٯTp<#,]`]!r]v8Nf=y Ȳ'=1~N'?u,*& @{[1}ŌzUξIo[0ů \;I$>j)Ro^t-0UQ) ^/-Ұ -." ǒFt.aW ⫪ !**ND:EweO4P6 #n|r2PrX&S`aDpLѡ/ ;Ldcx!,ZY!s݀+`*I[tnQV+py&)<ǥ+ Wzѩѓ%ʐfo%:K?g~)?>s_i9qI@[ViI5A*Qnıw4Nb^5zHFcve- =UJ1eP 2rR|кC#FT*7 7o'~e{}N}8c?4u!Q_)1vd%vI>}kMT;7.5-o>L"J&8?m %ǟ%"߽q}HqѵxNMu?`^bӠؘw5BeУvM"71MzZ;Ăg{DtU!y.:7#: >>AF*]1ʵ޺D~Z/K#j凴X `A-"$ Y1 nGCzXX%{åK A1]m79pk֧|Q>1'kcdI‹ؠ=^^i] ^ߏ,Ӫ.+=gaO(k_k08H)A0c%# CF6W dH=٣N4K Q?s \ޒI Lb % O":Ed&jog;#V 4elZYï r 2K0tuyJS!k Я^"v</ F zχT\뵳K92ԔC]BFn{R^l"e:0gS2Ãf^O KiP5iwWt㴫Ti(5wKxaQq0m)ɬ_@Ќy"'帅 -ehy )\:?xo$-\x~܌=;_g7*D^)\R YhrيgU5_W ~l6ʸ׍?xep3˦sO0ZUBdę>i[M9kp/ #XtǰjSvO1ZeԹb"}Zi.8F'1'sWva$h4+e\6-Nƫт)gQ&xLP˚S Ai>mxG5+Nu?DC9Mƺ#YP8> :| Cu\^u_L=# [āf!zikwu s|gBiF+GZ3>q!_Bp?ߚYk FLHܽ\]jWp7Ǡ | {I*_&k;LVl'A9ۀ"쑖D&&^pyxn/u;_%߳(dɓA z[,VB|k"XY43vqt LJ[ "mb]^ġ ?YU*|~aJ:F]aomcdZz÷ThM%%.:tń0sҲXOeTfъ:qk6{(I5㹓:1+^"V|T$a Tԩ~vSWҿg>*n{U{G8DrECMS+ 6ߧ⥣f"&ug}dv{?5|`vX7^KBaV/ϥ)?as3?p%^I)X}CV< rud=I+Q.tGj[]W2沓?_:B%t~iB;Q"4WZѴKɊ5:{Nm4N=b5c4t6;HK 8@ `sk ܏X;yߙfRsԸViՈXQA6Ap?c(bJr[Զ@PA}i@R|VÍHu^*Q@kVwL4T҅un'qeEI8z D2$$|] hΩvEK]h|K:aU$(6zǨC+u-Ő#؏ܳL,CtZL ]"b2+ `z.H7{!$1:E(uV`wdoXCZ K&<H,,ʧpfqZ`Cb?d06x[NێiEWQL HJ$)tۇ4>]U0G#qz)/>+A.WV ǽ`PQOF@^D.8SBfx!f{;爻 ᴾ(iӡw/Ь4$+`C'S}ؒm%*e(Γ5)۽9q PsuIF 횖`8qxV#rli%>%Ew}!YUY?[ lc4"= ͐PȧnE%y-&PYu_epZI=W'Lx)LK}ˬfpim `#A7+OOӫ<ꍇF>Vh-1L>Kxљ?VmH|4MH5:DZЮ +&s $YU)~_(k IE/[nS44#o8Duӭ?A7uH7v+e-XipޮgGd<C v^+؞ƪ`8%(c,NJ}sL j?_GFצe&k?z M\lBI s:<ՙڙq+h 47#zO<`n&q{Yq0}[#5“/E"ٚcҭ1,*;؟8Uu>Zvlh{JFҒST^9z!E|a.ׅoME~ l|\9twJ6pqpAEEJtAhRȪĿZ<2;x^Xկ5}D]*7Qv&{y +q!GI|i=S?@De>u*nW3=$ S:s\ ,0Wb}%k\ݗLG~ϚvG&N9h964K6<m2_o`B7L+IJ^SRb/aI-w>ڜPmWХ QέUaFTLm@y$[[/EʛF+.[KV}Л! g=Ts, 3bx*$U›<2ւOTtEe0Uj)(d,<܌n9#դCB\vK$6AiMOoOEl1AƽhW#*"};ƩT# %<=2)wےܤ4EK gXMVj [ųڻVP-) ILVy՗$ 3JV0zr*}mI3 Jϊ4bP>?s]#8! ]_0zsg8izJa3UQ9!Eb\IukxCsʘ^ڪy_dpǖz\dmZAcXYb.j#z3O<)+)F\j8V,CJOnKMuelOKJSAsy&i}vY v G/BX >[ gVC|AQk:'|IC3mȮN X\v尥$^qkL(CT.ғvg-Mmi`}mH{:=ac9`${W/֘Zr\AЀP2<Y#`9fH:kA,2E;s,D)ӯ󹣇Fլ»ۇ+W^)Yw $ +5 jkb+_i}vݿƣc?|Mt6KLE6Z2"]aPqdˠ6iƁc})}9Ĝ+ؐzye+<^oZpQ|񋯠@BXyyɿUQҩo8U 1wUڹc.lD6StFGh  ]+Kd-*< ąl9xӴ:jpR(y37 pY+ڵ1*QYLs&ⶢZbWcC@sWXq/DfCM vպW 5XetH2o,S$͞˝cߝRp nJ,ΈÔ"E(^GkDHDsjP[$ eJ6~^$~OT%:ad6復U+IsGJ|!szҔ?F#0[˗\SۜV[V8>totܠgKLyhFh뷓аXc=(hG+ GP<(C^vLY# JB>FIܱߗhaE'qnͣa>, ?+: 87 *Dt:~ckuasL=y&Wȯ9"~3ɪ}Υo'-ڂoXl*,ekծW\C m-m[dzQs8 X="B/#BP/J^SZbneg;Sݷ[czf}DV qF+;w\y(4kRRV25ugIUQ/rN9vфyJX#Kc-B`FMf>Keh]ۏZLSԹY7m&e-q=a$.ypIĤѭDGM!СL1_n,zڴZeJ"ذBXaFS1 f(y^lPb>ꭡ@09*"VHlԢ),`u]~\6)&aGC3{Q&T\{kLavVWX؃6} ;"Q4ɥaomٵ6/U 'zír`_l;NkwH'.5f7#Ç1nCO-C @შNX"Ϧk%b}ȣ[]Z3Q O.-PmGX8hoNgq&5}z:ϙx\Vϓ q&JuRaPfi`vaeC6BڒΧXy-jGk`qEwi7t4"lP O;~l|[<-SF}C+P2$VR;r:[$r(/%M MO`aSV0giHCS\Y(wo'/ )wG !Ӄ" ܿ\4vV㯈P y _ɤω^(4R8ZcZw[j42JIj%mz=`(B2\8t)lrDі@6ad~4& ȟq>x=:+ CCL\%>bo͈9XFeV9 pVGi;F5 _zy_žvRb1|R&1%8<{}ԶH ^sRI&EzZִ;Si" F6IP"M .(<MOVJm ´tB˓ڧ6=2eGe9C0>*K gvv KwܦxJAxةÛn?>,Kz־B}i?9&ww|6+H\ D=ʲ!؃gAVs ޯTwO($7oT.)+GF!ߚD#fF[LԶLȌ#X8`F@{,YR๶o+Kp+22;`TU|Na^ j֤0"Zg>Hqf?ُplCFeHyW!{]eøLKL.5c40Ҕōu.9Ɋ ľ{2S9s5j՘6V* ~4I'?)C;_Z͐upKi:(&t:n@=V̓{:yo:Ko |gNyvv35x;1Ʌ{hG3`GkК|'? rϗp%&tF%"qK6>I뼹S*WcQder<./4]lN!XAln\%.Q=@6肏Cnx'bB#3<87emçi:-KR( U.ѡ)˛G鱗MrQX1 ߝ=6=MMq4ғsH4h"wG`;Bze L[@щ8/2Tnͩ@s+c*?[ R۝+Dtw2I&~B&Dy6u6B;CՍLjB\hG؅ߊXO9⾯|8N0VX]QF[7srц_,}$]Pü'!g;Q9~^U`+k~!͒XbXv*yt R}H;"'ȏߏ<&%!Ο?0Ga.̐>ЪW>s9j6ڏǘg΃ʯ\7>gm 3c;yZ.'/BER"lo8, EolEٚNw0hɏ,>J hoL運y J\ȇ` PI@1jKr [=킲0wEf0%BPT޴%* ݄6 #Y3fo'9e+-,1@^Wn3CIc`ӼH_wAaL ]|x*@}()@fkIabPq4¸OQHb}`=tm9?=tJmra` 2NU=Bb8}0Α0_ CHLf_uYu;7c~ܖ0-_s䄫sun̛Z&6cM˻U9m$0˻oE?4,E;8%.Q>XR@ xY(4CjXP"G1N=@CBn0wL Ǥ|J ӆ +Ik;CRvц,ŧ>&"չgxNsm(#Bzw!)em)7d_ZAba~a+?#0Ú>{BFӆ1,H1iR U扖3v :\߅T?R"diW[:ۄZH#+c Ń-Jk=E76 CKʼTp0-&:_KE<44MUܗR)XҒ&'oy-s Fj`\Z(iN5w-=Ú| ܓj2#˗o~8B&L$8mܢBVHs@w ' xI9yKax%JCQ(*e?XQ}̾L])VW7nR}rGIpFW2%qW݃,h]!i]rC|B OchnIwT irePa܎Nīm^{*H 6Xec.Oo÷~&Vv/I39d>;ftl3t#Je9oqYC ёl2:`?DdY\[IV ]&DsW{n\kD;Vڷu[ Lk}CY&h|*|gP3`ZCYZOϲ܂/IÁs xo# fZxc ows-SǑ=ᠦHjQWgwsZ1jF Ƥ#({ hG5tQ[%R\i,9C"f>&%$9^c @N\!c'B_,хTo=c0Gq(wg5Ѻ@.XU<3<fun`URq},J%$48$ϛѨt3]Cο~LyO\$UHzǙ{]I5_&ÎBKNu+V+R|`LP#*GXc*,70{eُ %Mn,{SBP{v{<8k^jܰ/w|q4/K|B8 4cNa}^`{G (.L_i ^gCۇgd y.EG:6 3`f5qơ]&"کjXtd% M<Tٜ(\dVTm(Iۜ!4^W[7Q ,T-vq&-}kHtjƗ DʋGㆥDz S%b.>,3^ 7;Z{dN_o@qƛ6MPų9@Kϑv:!*&VgW1wP7Vp֐]$~= *VTt KaGDB}Q Xo=GP4# `.-%Fv/ r*cڿȳCEG@CV-s)|.*" -rA{mi3^FKm`eQoͼLosRL|>@ݣh^v'(pR飗+ᬖ`$\+JnKk|O$yg'2ommzQKOD6lV֡ }W(r{B B)xʇ/?bW) Ol8sK6GM@(XlШCc7^Juݡ4x O+~) '{,xeAr1Bj:H/}7 > č\\s~+ }Zo3۠qep!{Is 1|LÕIzl5?ƀ)r$M+)90rx:+.e1mg9&;at'+d4EE)`v Bj-t]{eM^㎟Eln <'+H[r_P?B%Sހ 9650fgC 4gz%KrR'a 8R┭:ڧ e*3P5e\aj (Wk@,ƭ`|Bq3];PXuF[x.Rq [eS6 G:KB'c26zJ%}KzF<* |O H#IaΉ_@XfvGOhtfxqSvm ݻ\BL0WPCPU5VSQz<೒Q{GۙVw@Y 6MyT0UN-d莲SY76- oT%8Ry̋Ƨn,*&3-u~/reǍSu|(agG.Y+99;q^"߼Ry5fMj"5ƶ">1 $^ j٦>ha]/!PyV$dDeqyB,gP ĝU@9}mGhu4LTg;%!+X7L l:~OyB8nKBFőc i{1QTӋOS&O͞$VںOl*j"/7"۶w4 }g%aeum2H)W㰝F7;\8IhdVʼnke(5, # [_/(9}bĶ@8P2MP" 51O[*w/9 ^Zw*z^c;/DRdS[V0gcMW>=Pܺy*} L{z2ڶa~[i/^D*HP$'4sya \-]Tyo:]TFDM"idd3AQ vkߩNN'>xE*tlsM"^X Xof?s+m^> .;;.-<*,?Cׅ5F~;1p6tuN jWkg'l%Eu,[Υ{jcK+X}kT+%mC9w@ Wd:p~g-f4 ν{u5fj`_~SKz)Kr UY3rG8' ]n8RZJD2U΢f9P+m51P,Z[ÛRw(uփa0`HAԵ"PM~Bk<5jfg:sՅ*wЍv 9+'YKoqβ8|CXo{I3e8Hg>FyψWN+3 Mp@j99'1:RMG|qSJk9" mm,:NFn_f錀D% לҹ4g IJ~D!r-wifq,u=iySeZ*P@" ʚW.x$^͘(C0Hu%`X\/G>g+"ߘl#=7Az͂_+,620|ذfkN^z"rb?ʎs%lB%C"I _3~pu:EBR2Lo#ۦ@8DJI]՞+ͱts Ċ4喡skj]E12܈kHZ;coY876jg}'@NlWh0d$&BS{~ޭ_VJF=- Ҁ`2tjvgh1x3ps#ɯ5GaA!Mc+jMl je