ࡱ>  z{|}n F%C%MPNG  IHDRbKGD pHYsod IDATx{PgEB-B@%BțۛIBVϔ=mbut 2:::66666s-gE3&-lF[w آ \Jh ! n8|?_w EEm=w~lgEx ֜Ǻ`vgϞ=y{wW^y}Æ ---MMMuuu0 t:T*ˋP( ťr\*j^_[[|5k>M6ر7|;;;Ϝ9sAx~cϞ=q]v=mmmWY|E]]bQD.Db@ H$RTP0\_p8---6lxwqÇ;v/ oF$@>u̙#G߿Ν۶m֭\t6  T*+JRJ555 W~7mk۷㣏>:s|`0#JHh"d`nGGG{N8?}7te˖0 2㣣/^)**jű)))4㕕i4Z#lݺu޽Oxv{,4!> EE3-ܒ~pDA[tN xnrn0 ~?wĉ;vhkkkhht<JHott4MJJȠfff BRi7l/ٳ/~4 c#1mHF8B- W!M4 zAյktz@d2SRRbccXa_;&&&))J+ʕ+Wn޼yΝGzj *kR U3m+GJ-+$1#8.jx|>r:;?ڼk Xd2cbb0(t98.11`*+Vlڴ78zϧO900022_'@.ڛ-PH(pñ Rc )'ϝ;'{ݲe˚5kt:H$bXIPx 4-//MMM<ݻ=_|>`0,zBkJÍN=hCJ^lƵkHbFEfGFF.\}^xᅇzH&ɩ8Y`08BJJ LNKKRL&x윜`0l6rl6l&`0T*B!SDbRRbﰽ`'LCxcX'''#NKKKII!H$LN-***//|>RT* HP(x '7|&@ zG{{{O:[o=MMM$$$,P䌌 Ae0BpժU6d2FB!*+jh4zݬfhZVFIu:D")bqiiiX\T\bT*L&a Q(@hXwK. {<^$R(\ὮHI#61BzȢ.\$.#<o/СC7ov8 ./RaXТ"HJ:Nr</''dgg|r***֮][_lZJPH$\hT*JT(21߼,Cd2`,;_G/Rbڳ %bsQ#[?XvL+dlz~m/ 'Oܷo_[[RLLLo-Y,H B.W,YT&}E0 FQu:`abh4L:N Fd2-KMMbZ5VfZmNt666:h4t:Ri% 77JHd:^ PlϞ=֭ (333!!!::z>~1LLLLBBBrr2DJKK\n&ܼL&b W45mܸtFRBQ [= Vk4 za ðh4-F 0 L&PF#T*BdR@MSRRbcc{]x<d۷ᱞF;@v#ꬬD 3}bD"J*((Z`jJdK.%%%%%"@P,|`0F---s+ sZ&rFcXF#ln>['0viu:ɤh5Jd"d0iiiD"tEGG~VEEŪU^~?gll,#K- a?ЋޱwttO:w"J9N||Ă Hht:f:76.w8:^ArRRL&dBhTAԠ;R`Gd2gsRdZVnvp444Xp8ZaZA\JIiiiaQQAA\.FyåΆ[~`x N &0155hDdlkt^@k7K^D?x} z,^{ԩ]v=rfolllRRRjj痔 =99FS( `0 j߲j,JY,d6\n"~4J3bqtҩSںdR sQ0@$ FVVS)&`0Y,\xg֭[h6[@[YY)zd655VZVVWWWr\PTUWWCht:fdkXf#f bt}hY[[WSS04_TTHJJJBaIIIqq1^8$BH$@$XlJJJaaa}c۶m3=884<fkooҪdzÆ ]]]>P(=z_>j= vKc=K/_~e`Zs 'P k CmmR5Hw6u+++@ k~+ 4ݴiS{{{OOj:N t||ffd0GFFvsȑ|(J2İH$)H ) S4X,FQA/O@AA!i9VHt&ɬi 4`Ib1[y< s\Pyû܊bONL&Ffx~zNr'N>_9kېP&7mX{mˍ?I mFЯ逾/_~w|ݻ3===*xlb0&&&I$_(r|>_(B!ˁaDdjzJ8n7dHNSSS>p(\>LFQ4A(TYYb1ÍT*qFH$D0 i:dE,pٳ^x4 fݰaCkkhEa4APO`YPeY%)#"fD4B)Ąt8NfX,&EC۷OEQST$AQtvvðt: iβ(+ʥrYeabEQPG1, W@\~5Adx4\>rLy ۻm۶76[ZZL&S0Z\\z'|˗?uNl O}fEo: Eϝ;s---MNNfHX,H&&SQgfg`ottt`vO:tl4MGQAQZ<@o>SP(rL2$E8a( H$q(FNYӵNv-I(JUIV" ap0,OOO{^t:ǫ Xmmml6b?|СbAoFFFlٺjefٲѣ^}.\X# g$П}[o3,,,~МpBAAVgff"h2@[ | dYUUBTT*RP(JN4 7DcEѠ`Y6^WA .I!#I ,H$^Pccd2uvv9njUU=~ӯ^ty@uǟ@_|̙3?U*s@h46^zа AC-LW\N I QM r0x(o (:==O0@pddDhƑ#G.ɲ""lי:~t:-(jN<` ] ܢ8TitԊJ}UV:dq< 9~Pjn+rĉ_O>Y#}z| xx_|$eXhٴiT@q٬(?hhߖ[ AHa <ש@r9EQ3$I@s5 Pt\jKNv<{L&( IR333RiX㰘|0???7\.˕r\(EQJRt< ,|#Zuhj7Z` SH&'P(L| SSldj6o04-Ҹ׷m۶UW={L`Ozul6+.&fݻ^ _ra-moҶKUKA*__|ٓ'Obw7nt"²(|K\>@KH!Ak gh4z}{w}X, ,n`^hN^d&T*;wܱcUU8tE D%I A8.J'UMd,^wt:]Py PƱ];~;e9ͦl,ZD'˲iXU 0<`Lx` Ұ9G"D" i/T*K'd.۱T*U*b(rei( FH`A7N$ Fe@3 CAszjj{>19٬yׯommZ;vW[Q\Hzޕ?HF7.ᖶv^km^~… /qټjedقMǁH?-:hkb;7v4qı;_NK|k!I;hB- tV0 ڇrҬ,XfhZ1+AB }@ YiWh~>ihY Չ}] 5>.3d2H)t8v̇Fdl6{1|c1gPbuƥF ~KQ` B6ݷo\T, t]&^/HfmnAx'*8nFF#c=g?K&SF_)rYNAeC_Nj\}}}ZnM\./3g.]tի4AGdB>H׷Q_OTAʘURnYwI 7Ο?G}4 Z9lԤ醆l,d(DhQ@CC,Bۇ^tVNk.R)/qTpXQ`}<aNt,ݿ<Xz|<;::*qQ銧V.Nh4Ns\.nlf3$’YZmEeZ|ɉ|>LpSb|>i6U*5iZ>8ϟ={J͛Uݔ<]!^Ւ[?SU;~_V9-/ׯ_zuey?^{G} ~qݶm[Kfy^040cb"eXjB!Q)*ݫӕ?E?nw VX/}>v86j CwNSTHGk<=qDPK2*B 'b}>Eq\:rSSSRiϞ @8˲viv%@31 Á@_hzl6 f[wuuT*>ԞB144T._~~ڵDwHD/5$U>CJ+0χq\^/ q0K~ r86}ppl6=q>桡:xȞRT0 qdK@48&ց@㸰 b~RY+}bLN}|>+W@w,] C.=O^ĺ힯ߔo݅ƍٗ^z~vcGJ^//R >vjX6¥ `jMLNO.,d2t:x.2ˆ(kkkdY,g}viiŋ++++WqKb_5û{jŽ3ZfHɐdb ҕK.={ԩSpjVІy888yp%e@H  q/ڼ & 2= l Dt:f`@ Bsss]]E;x>o߾t:L Tp=NWO$B<?.jh. rybbX,fݻwÑP(Ovr4DZQAG1\.[ d1 Nhoooooh4FT" Ab̙_AV!~7Xݲs;B-E ]x4Clk-[455 ~yhhCٓH$}T Y0&aNb!䍮. 2X,;vx4Es\  B {fC@ ؖZjF"BP.ى\.NgR4l%a0_ b EQsh600gl `0LNN?~P,†rA?'h`*[TTA, ]Ţ隚 Z6:.xlŴpX,PvܩT*F#qBaffT*ˌTD 0>/=8O8NRlHDFNZ6~˿=|p&KYWfnˆF+DR?<OY`۬4h4yF@/p_ 0(l^'Z@UV̨2KhhD;d2N}Gp8yzC!(0˲ if@>rX9cu4@ q0~DXDpH|iܐ555566*JP(߯h6o\+ܸqc{{ ğzoqҥkΝ; /_~}hlm2 5 BNEw'WUGޱ$):fc$`>@RB0ѣGRBSE +9'#qP(ZVg׮] BP xR޽{KR'r9XbE"gYⵂ1س_'A#h:;Z[[+3XB<O> lb0K;r|>Xldd$r|>L&yi$8mR>qbZ{キtS뭷.\rڵ7nJ#ImPPuxxퟯ*A~Zў_UњH'\{w_}Ç,R5#/H|Xx~1OrIL#h$j ;U+ϕj{zL:cΝ2 )6ȑ#KRt$A\ 4- m=rE@ P(gff&l6$h4&yݕ|>,h NAq"zlW]Zm[KK >BKסC9f B^/x`@ńy>|*444Y .k߾/s._%V*Gmo^oxO*Wh-U¥ڵk~;YUU[1\W(ZmVݵk8tl._c@vsST>d7`[(877==], 㣣X>Ƹ[YB!$4LzGjL&\.?~X[4# rweC<0zq nݺh4&_^_iR))^[#'/Ֆ횸wloWߦxPwH"D+5o|ҳ>7;;kXrywÆ (aFѡ@miij\ĉ|>J.W+R<{ll5;0)0@ z3ՄD`0bIQnc(@0D'| L;^pF޹s\.zl6Oo^pPIޡԅ/5{[*xMýCϭE$s_$ʖUdoheeՕ URipp^&ߺ}ݺu>cD|I,#EN!ŜN><44dX{L& ՝Jyĉǧ@ZfHR鬸#Gf KKRljjR(T*^bqvv\.OMM$JxҔpVaDEd2uuuծR@}voaaĉdjl,q(hĻ'& |D"$G t:C!A B<&#fskk֭[ku6mh4@ٻ65/AiƎ'[s=elngw'v;BrJڂ8gEuVĊgY@BHT*v.MiR(v]j~3L] JCK,/{7?_~EY&ѡ౭UO[Uc%?txtE / xcc>t~00m=HжZ[[GGG?q!e0`vIn$%Βpds|>?[(fL&dX, aڈ6r$C 6BYo0h Fݟ^]X\Bt:NTG(``0nztl6bdh FGGl%9J%SH$]jgn;N׋):zHJ=+ BJk``X,{'|1pr9]+փ`0t:M&@GGGMMͽ\YYy뭷 <?K+ g[p{oNjIW:1KCyI|ƍ/?~ϟ?H$IdOzv8>oZGH+Ekv2R!=MQՊ7GT*UooogggCCCmmmCCO>z/8cS8Y, ME{bV0 >xZYBłYd2A Vrryqnn~ff&JSNa(2௏d2ѱ)rP ottp'Y'MVmj iXc"b~N'Dp G">,D FL&C644tR/^؄1OHкK?#ŧ?ÂS]v(Uw?|t_|QnZ__}G#GvL&V'Kh4 k"/WLsd2لVJ怂3B0\DhH>&HVXPk4*1ҡRFB^ʱcǒ$˲Xv3999e\.eJVhWW}{w )AKB+=߫ێ[wŇio67o#y7?W^yE E>!_߿ |tv4-I|x|>aIb ޺늿94S jo|| ̇:$0 s|>|0QE-p3b4*x@z^D~twwL&kmm4Nfze٥ffgq/i2SN=z4)ĸ1;Ȥ l b9P(r\.Nc1#qġhHG%ISe[t:Lp1Wl{سg\.xߙ3gsɕݱX Yx> pnAZQk4}*Uww\.l}}CkkkZNr\(0 >F`0j0 B[[N[^^>uT6eY8b,:dy>A<>K+Ҥ'Tzý{Vһwd.駟~?䓍_{~ŋۿ8nppZE/T###& q)@_J.744 Sӝ{晅9bp8}S ɣEx'''͓fp L&ss KKKRy~~>a:d2`zd*Z B099iA냿;\TǏvzzVr =tPb0*p EQ* \Pl6T,!_L$i%@nL--T`DlZWQȦ6n6WZ9~< 6mRL8~L^t:= W8+㯽ڵkܹc׮]wyO n{ݽ{wSSR4 nnCiRrnK}~ŷ]_L==󡮮U;vCd<΂Nd2,nkPoP<,$CP,LMMi4|!\d@iR(24~BakSf9n^?6^"Ưmmm8v؉'L"8=(J* ?C%\SS3<<̲ٳg/^ bX!jVEd)r?*},J&iH ׉Ν;nm!bqNӵVKvܹo>LvAvEC-aU?,J'OD$alSp0 AyrR T펎R YJryqaaXCo*{aDQ=G(;2 =wnnna}r8>ؓ ( Z4X__ܬRnlaqqP(3L|} Uxk2[Z o`B9RקOgsx8>X3yrt¿ NLo6!6])0Gydpp3۷Iϕ1,j?aVr\T%z.E׮]t /X.z}KKKuرGE07 bxmhh | А\.l6pOMY "t:it. 9A(A T]]]ĺ+ɜ.ZB_[[[__Rs=777wwZ.>H`Z28'F=xTJ3d*04D:&A M`p8xsT&&&P'ݻwwuulÇ#<޴0z]R*ߛ}HA*pI db&毿u7xgeFRT;vسgPd}AhooO2 X6t)wtzfvP,Ί~RinnP(/dd"H&dzkn7xd& ###8춴qgΜf @!dZMf*l8x1L< 1 F'޾̅ ZRc[щtYBqX,#jDXNӒ9YR-,(@R@P(Zǭ<1kd4țuf̏}Pȣ{d\>ڵrw$h(wDbec3P(ɤhtNzϞ="(>_|pǚ;clqS?ߥsc$;V?4wǧqǪ1s4OoW\)JJС;#"ŶX,xzbb7ЩT*ͥ|b6'^xjԑH8@n;pvȑC=zt]ticsO`0h ZX,.J׮];yЂl6 Cv<|Z|>d&H$GNK$~cc ZB4RkYbJ"LkZƲbNgh5 WA|4{뮻'H"ȉ'/=o ӷ y]BaqLsoFܴ;}n1k+o/f;nuǏ_z饿oEV{СXj_%H0t:l4HJȕ:鶷O:U,!e4E @|>ۿ̲KGu/۝Njcd>ԘAe;h:QY LMMK.?~8q>_$A8ycDEwb/tI׻|oK/}[ٹT*8p;p=:thvvVl6V*E CFqZ6P&pd$iyG0I" Z::uMT 2Wƅ 9v&Zj@ KT*n,hmmm}4-/{>jV.ch4ECK:.X[AFA( rEvב n+JVk0F0zԈ_R)0`b8zͭ!j):"CҴ. fI%Dŋg@K}z<*ْUzө7B!%0Rz $Ptj:DޱDfo&RqriKM8r uQGOr~oF5>R# 2o駟|rX\\:4q˻:v~t:H$Ϩ4Qao/E _/S\ci@8M`GYti&&&Gv(Y|++iYL5kې)Ju:L6o4 q@mXL&!biC(Vqѣfe2ntJ@>c6Jx<.l?rb^j| "RRn6,IG"%&zlnllH0C"jĸZi>4d6Fٌ avvv]]bD|g_{C7 c]C5oa}w߱_%cЊKO/=ѽqƇ~o?WrEh4#G{キ!(A*L&EEu6d6[68<;;[T 4p|`00io+2-T?nXxPh6KKK~}}] Cunl6j2L"/`iRtyyHX T*RL˜LSoJX*zlv͎M 8A[h#P@F~^o ߘfCgpn?~G[Z5FNAuJ0X`jzKKnwhry8pб|^oV Fdp*J,8p>Ͼׯܾ_qXmoo-3{`|)E '#˿ Qt7wWՋ//{~~iV\.ZX,j\:nwI2} B:! 3tP0qۃ %Lc^_,JBM G F͉AL?FMOO/.jl6[<T*n&6~nv{<&4ivܹFYq(K d GXXXZV7:.@Uz=+ 8[pZV(3'sjjJ(t|0 VVVz^m4R9LӾp8lv;p=h6@ G"LJdJhZf\.')Ġ[e8R\.e/8NZ ;> dzss'+7q-Ƣ%lk|t/~T d jwC ޸qƍ|ok?x̙\.RX?OC fs(fsr$deO<>ts=Ǘsz=$i4({jRIUCd@`j>ڇj`.PUHDxիm"HK${.luO KKİr^zRTVP( rN'x觭Vj5  Lfْ$Fx<- ˗{4Tw^D&MM`6ʀl@zH$*\X㞂N<d24 b>G8ga:R;h0߿#2w^PhںkOo;i?W^y{ޟٟmll!Tߨ{Ϟ=`(bD"#1?/$|jjJӝ;wnk8E` Xl7ܫ\fs 9cXI;@  J`0`0F_[_X_::^ii F3N|>e2޽uW\YYY:VD"VN8v킬Jf 8p:vbqbZRTr*){8vFIN HY&\.Ʉc$JeZ}'VWWzV2,Bp*OA+i1ϸL67RdI(єJjjah4j@t{%={Z??λ=47n󫯾ӍX,6??("ßtn;LHZӨz<,!%|Pxh WWWy&dR>}x q1??~5R P877' 6B cbFxχ{M&$h4`A"jp8Y,d0BX Lr . ؛~FvjjXͳTj5;ZMFiaa`0,h.v{<8fT*D"D"AB}>lZ03#DdҥK[M0xw~; 3`Y&DVT*DPrFu@!xCYES>|m2aGNo<$HdQgx={=z`0r'Nk/~… vP|S- (6 z!ũ rʕ+F!>H<Jfp8zZIԑ#GJ@ hVk8FVGhuuu0Xnw:W/l6HB!e4:v`|Yݢz@ Lfs9>,4)R"6VMR-..z|ӊS1[)=JO-h<~fz />w//|_t:^W,ٳKh+FHR-ƴ'<} svj%l LR;;țt a(W402LjzqQCJѹ hvvV `k4I^ }>q+ry,`0V/* 1d`aVEb. "^h4r&pLbY?RV*vFZ+YB!_|>O #>=ff@w'J$p#ralg邚Zr`0d2R$wdMLLRt̙z~~ƍ(R%Smo/U_7:N_gei" ze~_=__]ll6}nS"WRY`0}}/'Dw5 hmm8˃^ ZVQ0ǁh|2T80d (Hdի^^#f .7iZ.ZBxa6ZMК@4?$c3d褓T v PUFS)sE%1Lj"2L 0x{{~|h4druu駟я~ꫯ~ x3<×|RhJNnf`F[[7Fp8KӁ 0xb)NG1cٴZ-PTO?t)4]dZ%i.-b=VRbU(*vcOH:IqXؠ@OW* řva0?/ ,bD"*V~z` dʪX,ry.Jdu(Keö 0uG;+`0X]uvS@x{!L CwIzvpf^RFR Y;x \^⅒'!p.ڼ^dj>3̩T\zꩧϿ/7}]j<}-N//M/s=}'`mm-N[,X|sӌNbXX[y 9\ eIB1.pPpE @E$U*Ջ;;P(Ng0 &O]e2X;B!"ɰE(B ™%J&5v=cOR@tjZlu:`0­u:nZsM"L$X,\>L&m6vhA2JRDq-B$x<4>h#0 omR\2N;` ~y8'xl X,v;dHduuuuujXdT D[EHtRG- DvǍuGL8p`Ϟ=s@,q~z=JwW^y_ :X@#|/z~K_O<1rw,߿ȑ#"Hպ\.t{DRHRl,"z?E*E.'tvZ ΥKV cH$I= zwlixTNStzNg0 D~N?zwr#TYA^w49TWVVPv8X hIbJ6^ Z<0SI Y*NdRc9e27^Zkz>٢ )v9sڵkvhr0L MG"QdIT3jr<\q3BJB!vT*s<4m<=nJ[Tjfh5۷O(zW>S^|^{wo~Eӿy`iIo\޸q|W^y^xg/G][[KR6M$>|/&^tfF1hd2'n'X &2Mz\63~^Y,R~X533CJN'#RiÕx߬.^4бXDΊDb&~䑋ڤH3a;äIU-QH8jX>‰=F6AtVfs\Nraxy-FkkNaȃp`!$'8ctRTCbhZxm 9b p2X^vhL`0V4C\;beNh,^XXHD"F.\ٹ;<*/u(N1L6`᳞szO}T*ZPe+N=#Wo>_~W^yzw}_;]{]w|^{|3}sŋ|VNL&wOBH ILjbs28Y& z+J؍y/^\[[qJjR/wux 6(\.GOIpP>Q()ED"cf_aoEF0i*Päq"ͫՋ~@̕+9]$u XtZm6PLI 2%அ`2a+i!loool@R*"(@ހO%%N]Dîow8r9ε@ 0͵ 1 >@ a@kY}^Pd.d,ЄM&ȷλnG/H6rө_!=p]bFJrĉ?_7ͿW_{_o~#zx_W_}_s}[z駿/\zӭV;Jy<{c_B0L`&I 3CۅKKn.A p drrD" ]e(h e\.HP4qq`3W*x*J._X,TP(rɡ:ᅋjf̈D"0 T YO___L&H `|P(LxG.pTLX{s](1H=WԬl2T( 6yxXl0x^?y _77=^x_W^y7~{(~L ~o_W_}?xg?S;;N~h0R)Á{ࡏ޽{>|jŇt"TIx F0SZ0h}w虙p!& &S ah4V+R ~0,#Vq(@t@Fb1͡x<.9_A1' ƴ`[0ɔJEbet6Lb P\r}>Ftal60:tbjp!|Nvcu,"T1BEe+Zh,e@+Z%T899%Rh4_Tt.`Eŀg?aO=>|,$<O ρPh,&+r7pd2f *6hXlE; #5 p8Y.qheb1p8wޱ B|D"}\,h,--A =Y^d2z~aaA- }C% NgՂ]bJ&7ÊFdHxAtlT"ϸ̠Rz=("r@8|,N[bQ*߻w/ORq_?Os={Y勋P~pVNЩqݛߘ"yD$_VѨ5 :wh48T.x "(+J,KvJvciUo Ev< h7^o0e>`Fh4!cm 0f "u2ZQ0>cݔNg#9X{ƛC#p8N:NRź9E<'&& I{W+5¸;77OV\aFg[\ x.UXIvz+$ %^E 4Eh kAI8af _ xd2.p8@n s8fl6CrPsq)J;vL*Ћ7dV vXN |e?Bad'q IDATa$ $<ٰ6)|-aFoRXGr9r@>P(bϜ9FZȵ@ <j:۔J%<j Bb~fvHE`(DmC_$ΕJK/CB߱&% $[`;'xN UP5FBpvvV$͑DS Lc]( zQk:hFb6l6Vnw\^rݯ`GqrI1waSablvf[V fYӫjt5 `4j4T&fmnnn?L&MH('0 yR|#|`"\.d!cfKY[[NVeb4TP=[TKr\.JaSS`jBK&%ѭ:x /E>_Ίb\ ]c:`0PBBñs -%X Bc/qvhӁZjm|d(0 AabBG㮻Cg4K# pNC;W߶UxuǰT*f3Ltnb1[,|N]c+ezn U"g6EYv`P3lʋFah4 qA>699y:p}>?:tq=2==4F@Nghł}1f! ¸d.aIu.fs~ӉTD"R.hiQ(-^Z5(!<\.ed6Fۢ#{j:N<ݎ.pdXVȋQT`1q< Pq-tzF ^̩7ﭨ|K׫j՚:."8 ^"R)D= G"xajZlAtMՂApx,Fc4 ;<79k6v`jQ |BB KQ', I^?DAE.ƪ]jpi,2}"\xR$"ΤӦ؉ZVW׋D{P3~9@kpdVx-)՘D"Y HQTI$RJjϟ?}4Cp$ cc׍ f| ;&\b(J C 9Ӹq\>hpV-n7*&p^jfZ&-,,jFc0ZVf3TpzT_|ro7r99/J% .YÎH1Uzm"TbD,`h۽^RrW,˜Q u@Lc5*u/bv5 ,r90puu؂Gd:LC- 6S[v7(XtNh4,0axs\44CGRK#GhE ՠc# ]Fb)hx{T ’@0xm6l.IRai31115uT&K.ai0 *c(Jć`V{ ~w:Zz̲SĞ*ɦRLa9_ N@ WR!vءWg5M&df5 N3M6bCpł2cFX\6p8,V+H$STMj,[)g% aZpekk\.bjZDҙL:zj"Xc2vn(!40X,H$~T*C\.V{*fB!Z,DPkD ]077gZk:zvj'a(;J.MZZxc#t:kwrG( 3?~H* KiZ,CE{"&G_ee^7zWǰI"sqƒ+-ZRt~~fh=:|:آv 2ر4 _9A6 t|qSU~Qi4VRQ( pX,vB:HunxYAH W*Ӊ'HH_._C@T*4& +>dbA;R`?@&BFc',C5 e#H2JӍF6[`nz=f0&B![N'Yq|~?Kq7_,[պR^Q*k5.Q]: vq7\.'(-@<rzUNݳL&1SSS33`0x/Rr<#3΄B oLP,>!RTW lfW&IP.42L:L/Ft`x@Huc?===;+L$W\FY #!IeYVyk\LP@ : Bu CG"<?l z?.N݁>95B:~W8]Z%VT B n*RZ O{ ꃑL@>bh.'rn+++X xFp8"h.gJPL1h"$ؘbΰ2r0Q?Ri0r|oZjvPjIhv>G l(|Sa t"B@R7fT\_rbއ'666WWG; RhVjJm8|o!M^z^Kt¥Om6e[*v0;;k2\.7(JBTcZz"7L`0*J:.i1IT*̈%d*•qT`2 :zT*&p&T*WrN'ope2C|T\.Vt<`0/χiqqt&S) .`la9x-z tzm6ݥfYT$Mp::mװ;QRnwvmcc8/.WV{,6`4L&H& 1G]\\,KÕN[zS('}/ugI-..jp JT._ 5|0_(J$*b@0@(z5RIW8C fNCL+y@놽hg07gNOO+ͭG0\i^"B\n6Njqu$ǵ$)Y881L:ۉ ..FK d9XVɴAkb^?w& "a]y* .YZ|x;[.Lj*@ /m+<Xi=>D.tKK=XFJta&.zlvB( bo / 4gj$PԼ^`vr^IHxh4V,**r00͍Dz=|tUP`:`>aTu DVHp J2\YV;c1Z>daCEɒC .͎T*'VNǮmnnrq\:F CtaꝌ dh(BV6_Hs1G5C xgROT*wvvO38frIxPh4zcyyyu8ÕUs Drߓh4-@-`"#mbzXm6 3%H F#z>pq9ED**N$ e6Q`peej,0KbPV)Ch4^!ݥ`r `%13#:mG<t:iDa>Xo0fp:!.+N x<TFsBO*uk_|^@F|c42A|bBvp8 b[YY K>+&_0.--zNuAECjIOP`:ah /X #*<|aFNWT"lZq I{|hw,iP1OTV$ [$ /d*1v,[fy1xW`8xfflmmy< #nJrZdLf3T:: FCu'hry8YRjhT,hⓖ $d8燅k**hz?(J*رc4F ؓ\.`BvD].xPaT by76W@c+L&C!A^&Ep8v`{˟H$O$h !N | 6;5MNN͉&裏9s|>o.\bDbIJlT~bat_PLYS25½j:n^ Br `1Ji-JRiۃy[[h4Z]MOOK_2@ku:@nv/],4f3v(<˲J B#axzPh Jh@qXj2.ȟ8e*xo7l^Bܾ}&& sJh4 3LeZ^_ Ph~~X~dy[ $z.a,aG&,H Y<QȊi^_.An6r0 f;VRI)P(x;;;=X%CŸRa8 .//^TUH#(݄=%ܵ:yȥ㨋E.c OcRyGnG>C(KE,˶ZV\ ra4QQ&qMn2 i:m{^t6"DDW`Nf08KKnS* vx"wLb@ HdY =: =NjTVW7A\BfW9Q4Ӕ4)J +LtaH:]Y҆~#NG1O %t:h4A:yb9x m6O&e1 cZR@0KE`g>B5`(y`0K>Np8<Z1DRcǎY,F}NөVW_m?)j{@OO9 zk"N]4yV*d8pМHVB$O>d25H8n ZӬe*f]u׊#")i>{`PHj<OW=/~pe)r̐mZh2ŋ2@kfC/KBC86n@Vww }nFFzا$V|uJP?2i`4گ~?H[&A-εB"(B!APsV*h4oW>\8CfJU^`0/V^߾}ͷ(:vwwONN///Бjcr: F#qi2P(dX#($wn4UX۷l"GJeѲUk0͖ql4LLz}KpRh4 !JT* cX:+IF^YdE|r i0dwrrJ  Pq-H$e6M"d8( bIaVMk=|+;NG3BO&1O@p~Ch4^zի˻>dG"\>/LK ~N\I3Zm "`0fM(,JRظ^_4M3Ev5\{2ڂװ|~ww\.۝N6z:`ssS'^=,n=* Ji6BQbRŠWAR7UTӧH$Bv4Fg:T*Xc!wۈmٮ`~) /K*ҥdGC1`QT\nXfn<l6 >Pwwwfjw:B\Pxx<.EpjjXi FX`gվ%[Z" nU(B~&:W<0؅s|>JcxHiJrƘ1NbDf9F`8v{OfE 0 !rdovio޼o6[?NGVx% ;,Qx"qNP,z=҂^FG%> %۝d2Nm6_-$U܃~e;3۝~g`0fgggįB|e͡F1#JmIpIA4eSt(&j:tx<^,X>s 8 bL&^#4KJ% XD11M(  ``@.i-hp4z^xcwQVVv?`5dE|2^v=IVkɷ^(hP0%煴kP,qNH+t:iXobWp{{G/jW_} lP\]C &R\pRTkv5 4\`0Lp,@' e$r9F:lBRAN6@+ƹ\.qG:h4f>}. o߾6T$.B3Hfvd2Z%_>'O#ghF'Ѣ˓"C#r:]bv$+wdoor5@v߫VA;?ooW0e!+e"5TIi 'Xgx2斕-z>? qF +KTcTFeXaիW~(xϹ8Ju.ϗ+jƓ 4/ڝN8珹iq2F"|Ej4 C:ď?8 z*Dx9kۭ",+ˑHRsV*| ~Fx*p8Lz}ooo988!T*4x?s]F$]'V= zz h0US2kOܯާҕJL@$ObXDnN1"lmml~G{@ cS 9C2e♑ ~(b1ϗ|>ͦd2Sl`Z-4{ae6[0Ѣ`0rZieKO$ްbzO&vP%Lv{^zNmAs(됐#D"Y.d2}xxl$ JծPǩ-dN;bqsww7JR`}&2t tBZ5ZV.WI}Ax3X,JW*h<ƓӧONdrD"˅BaɄ.Жl6U?4)YiZ<|B(d2drE"M?9ha˒I( xn߼y#^x*4 ib{#$F"DS\N^oX$IU*jE:,Pf*vjz/]^榰*-|s}rlќLa6s nf" *L\.G tL&Z.>_|-?0d9l6CJ/W#@gWLS#QAuJNbR `+0:kk7>|Ft#,h(@Z[)3%qi^|4Ùf\.v9qeL3Nw4M{^_yH&2=X"(BR\)MeۜL~ttj2 @'!(\`edO7Nh׋ G x qI.ɆDgs>\G\D.f(no2߮Vv5F1`0d>JӱXsttwttTV{"/Ux`P _zl|!FEV1@XdITÇ嫯z-\.G`HNjZz^$aZɩZzIR{3SLDPN3L&ݝJZۻ0[,n9`鄌KMdYdv8%NjJ$ONNOOϮXD^;fh4zf2FYXd,b]VUXWbM&h^.W9qer^W "+~rVJ(w:JvCDY,6!tp|  XaxY/_>W*CҐ ;\.2w2VwɤZR”9 2S7\E6p88@ *ǏO>1R).uu`P 9XHNnfbX,1}D@ZFh4'N&)cD )bzk?ud)q("Edu[vb(j덆g$WR|yp8D9l/_%{X7}ϡ l l6g0fN'Lݍ :8841 M6@+;`pM|Vp</oo?K]d2lv˜P<($3Nj5ON\eFZ@ј4LB)p:5ƒ9NNNt:N B,27ɉw_vo% l H(vbQt+h,د4==U*U#GGG=(VH2Hj!Pttuw7ҙb=??s=WT>hp\o.Il⢸ mC j C4OOONBiU*Agu:p .A.!XJ;aTTRH$,9 b(dǰLxq8F,7VZ͉z%p8M&R}uu5?3f@cx1{G|)DStF>G"QI^kzz0BrG{{{ ;_CM{<Beڏ?sV5-r`Y{f'''GGGGGH!l#3"ږo+_%H4ʋDRtZ}||ԲXVRP"Hg2b)Ynw0`vDvㅗXzwV4p7d$^`0L B׃V}ŋ1뜞^^P(?e\׶>e9,Ƀ`X,L&j9#cT,"v') >IZ ed $u#jX,g &q"=&_FzZ",C;}/)ISK$~n#۷fsXfp(Qb4_oBDQ^~~|j$6[%ab4 `V5rLZvoo7$_$3zl)GdJ9%r5C}v;JK&fk6D\nD&[[[&c<@7UDRƫ'/?^Dovlvވ~q?t:by #"29,K)EXLZSlZ1DJb<ݻw緷?s[:"`'FHA`t:OWWWP-$# ="!|Acev8r3?x"zV4rZ҄p}XW=N;è-[ .//z}Z'bT+j:9?R('Hl6ÃFjooGIexoi "D0Kv`D 0nnnceggGRSFn\._,ʕ Zoh<GӧOjuss7|y||]L&z!T+j'Np}ttt~4@\ZP 8P<.K]\\P F>墉;z}Nކx߷fs>Fc ~$k:U*Fa A+ch6\.ʮJ^vi1„G&F T*h4},X,E`0Dίh)L~zv vh4Rߞu_~nls@RL\"(SXz.@'q7eՂ_x<A\!Ir\ZXL<O8I$l Gr9NO0土_z"vUzR)vtNܦd6/jⓂdC0}rrB;)3HdBZŬ# l6\VxիWHt:ju:](Bp$%es9dC^zޓS9`DLsMURf,/n!Ꮗ/ϧRJ4zt cWǠf6zJ:::>99j'''G_uuwaFH$d;'?R 5LMZVFC L@`8-K|d&$B'2I$QMLWD6ZF-@E>|z6"AV@ @|r$PM ryj L5-zVk`0l;\>L!ݮUj5)oLo߾VYTBΈ) x(wBhF=vFCCGՀ_ D&!ոJFJkN~&_G<7EZd80~V{||B&4r8J)8>%upppzz >2eGGGc5dfn.l(=JR&J(9Ƙkc 1N`xU kzC^W_}~.v|Rct:}~2j:RG*?D"hTC/^CC{^K ʀ$'www JyURP!"݌O< 5죫+q!ʒ4&?O\ͅ*SػǓÃo0T* %\|| /_~7lnn!.[*b8(\9hމEwh\ޮVwRYV}nss@7j>?z!lZJ%yJMNŏ'`0|"J.N/_>~t |>E IbJ!yV)F"QPb0?1}no B0& Vet 2\$; ../a|E^\\F7ʟsHUa0OiJl)Dr ܠZf Bbܒ9ϧ){ER]*J6C= 'gm+t:9BLWX$"B;xZ.//U$ċ%'\%l3 Ro]\x_Ǐ777v;ɰDIB!pqQ_T*tJc0zW_}c%.X^W"~?d0RiZn6%I:$wwwE\Z'z"8`CIUZ6y?˫^;Vd2#UHLSχz v& e;jeJT.W1B(t:H$:<<ۻfɄ['l%T p,0e<`N')$2>hss`4>}˗zn)~,0fE(Bx.%ФR]\\"<==;998r A|Hё~ppC f5^qlv&i~udbf%[* B@' jZVeڧt:ITO&S̵o߾rd\n7B\.ctX)3?Ӳjl:MXVvP,U&JL琕{^ d.v{l<tz`zzz*H\^n[֝@R t3{E$bQ;].EJO#mfhq!sҺvX܌F#ba3,Zm@~~!hLQl,tZkz2[v݁@P~1$Sثm6`jv=Nw]h5ϋTD$ BDhXLPYR4:f<f+uo޼۷*j>+5M(E==}|z/X,1"8].7~[EJ= \nw0lZ`8~lnooׯaZeZ⠏J>`X 2Rlvp8_,Y,#ŝTy nd2nV;vl|?΅VUfBP"dJg2\.\T2۷HJl6juh4jd2 RDj6`k"=V )x<* ?ν=R*t6CFlJr6< bh\xyzوyؔ}qsCLD $s9Kfn_ tݰg:ݕfzemO&~Rd2A|D 0`瀬tM&Z>Lznd2</d\ӧOdvkknRW4`4 AL'(h QzGW9N{nG v ^quЌDzG<@doWU<# R2d0u:3MVse>[6fS0~8rR,\*PXZvooawwyxT6Ñ@0?(+dNdq?N&/d2SpWhE';lX|9@ ZJۛX,*sueśV3 1p8e<[^DViq(Ew,qLT*|1Ly2ݾͷn_.@\/jgTyMd6s&H$P(t:MfF9>>;;;|Vk:-oo' פQ)(8E,F2O4ƠR16n_''''JlηavCp&7%u@F 2"f;??XF{r\Id^˗/G" JE>ip?>ndۗ*FuN8sQ><I^ot:nh6A#AW(h 1l\q\?`0$w_jeD@*d2D~x\ ea8a DA[ XLUe2\.Lܩ=?_,x믷tԜH$L {LTj;f6qZڗf/CK1 g/:-{ d+5K,EE1"3YV.$3M^{{/LSL&*Qd2)ʢh TiRi%XHdޞhf~>_L&^y_h,zEɅj$,^BD1GD_"QK7Z^ P(MRYJVJTI(LwղI'''L3[[ۻrtW9,tiKlQɡeF~p y t8NARt\fxxlۛ@Tg^"eAdB#0/FQQHpZj!b1O'Q*Jx n$b2~|zGGG(XZ$zv݊zT}2,VfƂ 'elL. "jF"~@lC<28NB4 l_.lVU, ,.|^~a4񧟾|jVX$26JY)M2VV8iWWcIvvfۙ(Oq +U/!?3XAd(hӧ޳!L8 r^drWzWZE]!v-T7 :υx\`o]P8QƇB-@txmuG"M|HD"GxvR(DH<.@ &hF!YPPTbBwxxt:D" n7jϤͧZ6:3:r` st[vssSզiLl0ZFDA| LPK9==m6[fXD~?eGI 2Kdh4RM u~~qvvF)|:@!gg}%7( "$JB!׫<[,<\ .nX,fE(#& ,_(p- JV9bTL~zA_~FߩRL&}@LNH)9DTvTddE":z>9JNZjҬ/ JlXBw>>ǩMWfŲfGɟL&ÑBܙ@}4xCqbt:X,PK"MҚU|q4\Zyv>lvhtgggg֠Y\ -˲S-|t +7$%*QI Շ1Û7߲=r~6̈ 8駟^fGDc&xV7M|t*Gic$q_pe ărpȃJh4GGGRN6֤nq I $FQ&+ "P,|^7rv=Ng`;??T7D .kd^@9Ęn'LZx j(W& )}j4p8t:4'''|b|/ B-BVZxÇtEpkĂC"CiQ!n'J!KB!Lj`1&`0bZ>u:]Pph  !Nۯ_@p:߿駟ȞVk%L:XdIAIP(D}@_9M2Abdx|{шI9nXª3ED mr~\.ǘ7aUכVm4Fzn S>_KAT&`( 8" z "noH) jx~|bIW^e*pJh4H^]_`!]itbWٖҎc-µ%9FS2,+d6 zAIF,_"5(HhvSrbV:xnbDE׷h?h ~Q[R+'TZſK sDh4&Up^87B.@ * ^'>×/_2u)(,Fx:SpLT`iDX2a?b'xR%,K3Fxl%v5@2٬֬>777wvv6A4Ӈ"BX>>Aݽl6m\rO˴Gd)8ZFbE-WC7H+Xck6WЁȷpp蚅p{W8HR=xzzzrr }3x7"|Jh.OPHf^7>|h4666+ST*@-+^IәQ%>ҚVDJ;DZ,QEj],ĮT*Q"0"ޮ߼y7{||Vi/f|$&Bv|qz"˩ꍍommm^n`4XZ+܂lN$zZm0x "N D=Sh):888;;w\\P?k4t6L$AǰeX&SQ2rD4b L Z777+5n7RLj2^(-n6+KJhQ)鶬9KTP+j2"nK`.d*^2sRcׯ],;ZT ,lfa=??2;Z}{{?zfaݞ@ JEjZTx,Fl^nK'Qz>999_]]H,$6=J FKjZJ KxL"v=Z-Zh4*iHCyNXG2LќfǏx/9H#C@;Rad{xtB' ;i|jscx.k?<==V+K=(>1NqֻnxEZA'f oRi4X-h$L՚X,FG陖tOL9eV(G"gl:6f4'ɧOJ&f)J(36QX ա*f 7bܡRdہ@~eyML6XNSCx&MrAB;[Nϟf)Z@%y&jVVkf\.ZONNzu٩T]"4OR4Pcz |(_fFa2zL΅bC~nG Bi.ec8_9r|q`6ׯdty(m.|"_~SqaI cRRěNlOPLe\E@*MHrG1F_O>4Fd--ʔю_kH& p7VVe6iNpvv&c+ 3Ln7:vh4Z6¡ J E\QBH{Qj&)VryyID__S=󹿿_*~F^o CZW ÆɸVsV*t:NgL&3HAǥtM:Ng6NjX `t&]E8"E\88=::v?3hVq,.+8v,rj*vCH/;?nWԞ@ ͛7VQlې\2\^*ÙLlM|d2w$a٤N)kkOAyN,"_6A; "FT.r9D"IwC> |}]"|g `Z!%_tFVw:u4(7W#h4Nfonnv~fdl Uk4g׀"͕J%L C3lb5lz/^etA2t*)_)+%e|ci KH0υ X*= ó/^< Bz|PT*@@БXlּ#"H**zJ?t⟌&Z  ApfpCPu~~l6TP.OnƆf{zzs٬TdJfL2G$HGUx]BX=ٙ^ĮN**lv;(fޠMfbq=iwuu€4B+őڧg|RyyyyqqRtWW. )5CrmM'~8l6Wt6{xxyLMrr9AVHh\+j. oQ`JY<)-`S:Wtd6wv{3̢2LlAnkfc_fTJk{כf"j4]9'''6 W,(f/EQç$Dt)\AdŒlnh4,co٘ѹDiŻv8?!:9Dvnh"p*+ZZ>Ћm)m:<Lk~4E~f0d؛7o?~F^(@ J$GǺ(Ky|jj p(YE ct4Epo謨6d$[x8d2\ؗ/_eRt+J)ys:S#~!D"P8T.gZřD2lT vcO<88TT4*BW iKTtsd#mba:ezHMKFA-t6VTE욑 yrbp{<"5%E|:>>_VfŋvaBVV{~\myMsL$)Wta³Z-{0uJ:Xdf~׻YN&R)JB!nV j߼/n^%]l*QE)h%jjbTr>h6>asH 2h4Qrx2B< NWNGҀ(!y4S܂sZM0zL&STgTQ.^cZa%f xM-(< d2JŌ=;*>z1LgZ˗/^x d:+"D/;:߅D RYG*ACIB{ Vd:m6ǫCPRk/ZE*7<;x_tJwJ X2~}}   0g t\sL&?N$/_X9f^U%&?hmrN+NEQFF)cɭf"6%RyO3X ZT&z>wX|ūW)[9OAҕ4ș~Ɣی ^l6[7:hzXyAZ- lv8|tZc?׭M$e}h)Y=9BGD:G1 ;$^Fc,Nl+ ?Cx A, ZQ'pKV_\\Zh P(Tը(ǝNԁd* nbb>_8BNR'5$tD\,ruw\|O::$[\2kBaundkkHE~d:R崽 i2𢱶T;h-/_‹"p9vW|vU'Y"lX\~؏sL(8bLrȮBu]ZVUt7RZJmPBѹ\2qE 8"K"G>.k(>e`8L|>߷~K2|:ZOhBPo4aRK0+>r=[ԳE"QCge?k^goCGBEl2*ڣRNNNerŅD崢bנ7;;;PZ8ʓISlɣ 2%Ls:Nrl6nѱ^w:PHp=n|,2ArRj*xqqa2oV$g6u:KDe/i"/]Hv{WYvY;9LDsNݍs$ N$ْ,*>,|<7"xbg6ՄH ә ~D2z'777Frg=d$EFf'ɡ,<cC_ȳ  d2E]sכNg~B`IĻL5ɚ@} If\OHUTRa. 4RvswdD026)+!d6h4GUU. =vf{pAx(┋U)⏤blu:]PqtM]%s]d2Y,'EgWzjnRAe4Dzݻd2?5=S"M6Il>(]TZK22$jXKLt!"T;8N K&Sr4`;< LAy٪fj7?^&6onnnooww_~,nţM3H]BY\z.8KXF@Ѽ|rgg/kl.;3Q9P2 Z7" fu%؎]/PNrLzU*gjݖDt6iuFJFq\^4g&#gEQ“q(jd$@GW ohVs:@6j-G˷ϏOP|͛(Vk$-nW!bq?`_z|DJ~N@ ;?.O8P@  [Q&J_ 'l^o'>p\?s!Rr| |XP +x"Aͅ(>9>>T:s3 P\.lB:I<jɉ+ tR`0D0 777?KCbO!3VZv;ƪrd輴X,H()#ނ#a|֝m$y׫V;;;G sx2TUVLq)}.Bݻwor~<99Ȕ0vL bWd2Rϟ "!d?s!P&\+476^"Ƹ%MWKSӧ 1 vћpxrrgwwWʓdEfMr:ٯ8Qr8Qh4VˌJ\gy,zj{+cx>ʧ`6[VAC _L#bIʵE6QB2l6eAgZ4ϬʄM&E,o߾1zE"\ODQ#KWWW;^iFk7t0K:*ḁ@l t!FQw"c*+DJTpjFIalnwp8뛛|>`8(T#P(47[t:;~z={?R-6ql6URF0:QGV]L.a;X,N kCZ 'Wh4׋bx2~GK*``mXf3\$ĖRc$2Iͥi]y/}UESf(*JlM99ltZfO򄌥bh +>Ao#DE]$@Uv|R(=0%ɄvTSrRS 4%Ī,_C׫(1#^§dtV#.z6Je>ѭFDr<TZHdpcN5vwoGPI"_j~fVObөj-`T D+Zק`0Ng߾}k6ܦH@:WCG{ǷEsX\i IDATβS Bp@iekT*J$ts+, JuBn7|0UFAa|~X,Y.шZnbn@ H 1 r)vd6c37 }zЕS>@M|n;vgD8 *T5MzMrcdVt(",5(󞢨hm<\V . vRiwQ,kAVKOI_w夛dp&9֣ӧOשT1P.Ͻzd]x|p}}mZcboAkrX؍/F&cJYQ&"Sm"@yvvra R{-K-+Wfbiq&)Zn`0+ne% LVx"dQBS([D"i FBX( բ2Qga%`8 Ex{$ .+lD=p Q -:!STpt:Nn{~_X& jZR +N.O`O&Zcx۷owtT7 I ) 5&r\!ƴX|s ʰ4͢myl~};*JRZF 71L&ij[QGLOaK˒j{l>`nTyF= ܺc&4'0;F&!$Xnw"? P :ĮUBsO1./kPOQ)HOl2熃`0_ #0s~BX0C4'D0\\^o\zTFz[#ZFs4/ˏ?ŸVŗ2SV׻d:]ݝ?qrrr!VłԏDG4"VD ۢrUe v<@pqpyyD5., }(?H#ȄlbB:::B4UfdlO>U*M+ ߬B{c-S@|nRL&T(J$R(=7oF!$+Z6MbCɄ|~X,b__܎ǓR"S3#c.( Et;oVltZp˗L&JX:=8χ<4H uu)*+b )(d2Gj5MIWq(hfs6 tZ.%p8YOm:JQ^2;`vِWY.N¸G4bfHX,F}máJJu")@y'Ϸ?ï^H:>>1],Fmp\.;e5=V8Fcp zO?A zig2X Qa#CL&77?x<̝`BꠋgScciltX)ғIYQņp8DR,=Y# ]t:S[!hf֓&EJ˦mat.@wvxJ-L&ӇJryyIb契w3D,+p w ~5P /,6Ė^uuu'NF#Vd$"dsmP8LV_s#+`Z4 3˗/)clv~6O#l&AQ@ f1se BxJ qRAFnwv"Zm1-ۜxu8W*t:zm6V}iѳ2FHkU4%IΝBFBP,8fo(fn>RL&yܻ^wwwww^͛Db $J(R)d]V7pj!\E\ES#xChDR!x5ju(3^&ڤf |9pzzmggvT6|~[EG+#ALɔNK. &Jc,W*@@6Tre@;'<;Nx||t:~+JFKy6Oe b2l6lF|~M"($Pt zD2WV[.#IŔsuuS`mh.HrXT*B!V:%%MӴB^G"v!BrQw2r NdDYk.+W*㼔qkzS`FB ^K.ݾyEAFÑ[NP x$\BHTUehhw:oTjmm 2ӳ3v(n8~zbq}}JeF:KciҿqU\Ʉl:  nG<4Ng$-/$$:W}p8 >9::f V'iR'H 2{Pq̈6  ݞOMlU伪Vt2Jz_q||rzz8iFl6{~~&|677aΌF a!GX jp«BAnU_EZ\+'ϒ\@:Ni2%C9Vk?P5-Ѩg;_xL& tLH$h4uQJK3\szb0?WAqBh<Q'!pDA=H!qGFf8%xȥ<O5 Jj?ҭTJ@`f <@Bv*9.2R9<f7AB,lׯju":#U$!uOgZv:]hTTL0z>B{j%mKRDHU*FSWjnKrA0fBb h,J˕n; onn˻jr.~<vb}%z9Hq{tz07oޒp\0eEQ\.J͏7sNNNMfqHDH@9F&(^ $*2 <(pZH$7P(zꍔ`M3ry8o߾/^ 4_c xWTZE Z G|ax^UUFQִ4\"ܨ…Eݴ/Vb8>ρH>hE܎Ħ(2&;P8*"ډXxuN"(J BIF^(yI7?~vGя?tɭ#UMd6;E?bAQFQzbrhE%]Mߨ0d2HXb) JIHs"ȦL&h`&l(.ne@22QxD-nMӺ.^rX,jܜL8d[`0b|[ h [墤sيlA+0r\O}Tbh* yw\.']Gvp]`4 ,  zC0?y=]\.ޣ˫+ 1rֈDH6mX+GNE^ު(bV(2췥R2z^`jfGԴC=NG%K! TjRt:Vh`H$&ɭST*FǛ’CݢVѢJj(jO&rj_~ëD[!34% ٜhp$Bć`@GL*r@zWN'{ďY< 4c%CZ DVbt!q)!֋=h|f@RCEY Pj\UL6V1 Gї/_4Ç/^|aoo_zm;GgH$-JI>CaҒoC޸D")wRUTh4& /eKid0^&QS+[;=====3ͣoP:p{*檪*2SK0!kXR8$qM&^d yB DR9%ri u%ݬ^otݛrx)T״14w7 L&iZ+|X8/^CoUU7v;J Mv&=d2DP80c`0xqqg44H9$5(h8 jry=^_"Khl̏:88`:==%@ Y`eB!6VXH2LF 'nrdF7Evz>ۿo!)UCzkb1wvv~߿zjww X^jnn7/v/ FZvKX!!$j&EC)+< ;/-ɧ0^/ yc)x1Po .G6}Zm<zd'˗/?NRt:$D4J \.jVk0CIN6八84 B%St2tU9*. Iy<^tRSV&Py677F#јF6] zлGxd#щUcNOO-K,#t?ДNJEQG‹dZi_7o<{ݻؤL&UL'P(+㘃uKdJ.WU VD&1)B. pR'l\.I'C@ ptJdH'%C rC5&_~e8RÒ'%FBԣ\KR\LVi* MjUմD2m6BTOWWWPZX*Ve…)-!%S4= -_)cIX3 2@ t:BׯׯP J L+|As9|3vX$#B j[|RJfx<pR)j+,JQd2G|>r~rvKR$a~cf4DplWN}u.=M>o61<5-ph^-өMiA2mh4fwwwDLnnxQ5?O,ϰ5*X91Wb9!T^oPX3|>dOś"}C' Na'?d,'[ǝN\.&bP(HjzhkDr%W$SNh۵ZV')WP8J=DUUFXHu;sM}jeGD0 drv{4 Gŗ/_2̛7o:Ө[Vk<7MǻW^Ȅot",z})pS8nH ݞN%X=,xt]!#H tXu[UUz,~ssB: YF`]-=8<:|UdYFP(nyQC srd#L&ST({9>{wohငX>0JӕJ^ׯhAvӮ"^ȏv{`KzkyErtn7tZ6n  lWĂ)Uyݹ*V4AJ%lƙz~:nMfT*C`p88q l6KVnR,uy^Lc_h- )a L&/_~_fza `?VO)zFltސO"5ӴB|2铓8k^\\ȕ[RV8lኣIJc9%҇odjrs=` IDAT"[[[L K|=ۡ\I\ӃK'\gxvvt:VKSUUyXl\dfcc`0`zfXfdhabƵO!PBץ#OD - t: 1fUMk;t2tKDž^PoAQ5LE1h;~>Fg6R&f( &Ōӧo?Ȓt#`0+zʒfFޣ"ʸV#{20iB\.+%`0k4MB˘L&iѾkZAf)m=s׹,JZdD +gJ&!ϙLfcc.Ir$...p&mVѩmussjnr:7(@V/ʽ^ɣRA؍-L'|ϝ iZZm6 lmmmmmmnnFKCѱ]: "_(aZ5I,Jd2a>k6[V[* O|Nմh4>}}y|'ggg[YB-fWS*GA3,`+TMҤ4m0Ǔ`P.-+hFhX2SBb ,rvO[O`0NOpp7? gY(5KY2<(MXuZȎKN KWlJPY9WZ9..'jz&$Z_JҨL˓#a`V=LHy[ -bL8%ƍ29jooWZw$\`FDrvSo@fVU%'41p@@Orfst,! H^X/L".pRH}pppg;S(5zl.WոȐBED |>N"$IUU;|{{:ˡ t]dL&ۜ[-]d ,&?aI~{nHZxGx(&PB!ɘX,$/yex:JIHP($|a"D%CMW0__#[l۵Z^,+ ͑RO)28  vML޾}w)HIZ`p8. D+0noo;IPl5LgVIi]D׫bBWPEE"z'6LzFct~n'jooOt\[N-_ī9oH$gEbs-KTF)D2LT'Y ߿ĬZ(Ib~"$Ѩ'`0L&UqժN4c+q+e a d6ƼTGbQyxxqtt$KД-l6&s=:݊fxVdJXXN&XX,wx2(ܜN4,gA`rµ**C:N_-AtqHfup _Jn6Hj4jlDRQH I[[[))z?S<l\*lP؜) UE*XU/@Ph䥾dbIjl$ /j\.HBDRbO1'"orD"ϝNt<3AѸFīWjiq~vv&3tk%%:й|>NGQ&^?O"wR$ݦPTry4ן|IrD`3+S3ӡ\8Y _ oj;;t+ D"#ev|m \cH4^zD"\S(>b\FZ-Jr#j;G' Z믿fnl6E"LMK Yxh4vzzmV px\.Wp8L77@nAvјm M`T"7T91- @x uj4ATI㧊СP(Odv3bx%V'''l͎Ux !8\}hC !e@pEx Ң`OU왭Vk2 Gp NU8Įni׉xJ$8WWO֨g{+^O?s=Lj+O*TUhoP\قW$b%"ٗ-NFwN \,İ'xc|8(`-Q]1Q5Ly6S,B yI46f2Gh8?,wfxA'ԐeKWX/vUfןNg^oV3QX' 5L`P*K4>mZf',jdLnǕOL!*t:o޼ٹpݲhvr$ZmzyNF,-PCsPN*rcHNAh; nZn~8`~vCDvlX,fpr .{jF^zzLsʝB5/O((R.uIu JJ(iL`B2"1)"aX+<8ZәCeh4׻vnR$B^~ 2˥R)rpS~?fonooONN={ d2Ef3F:x!Fd)@ahZ^o?2Ck)k6 7 2ъ)G?L8G%DU^s"omm tX,q+htdݑMmӵ*d++@08OiX_Y2l 􉛩T*.T*͛W^~unnX`ѝOR^n.4d5ur+;WP@BU'tiՊ1EEhSq҃im4FOZ6S" /^~t>è? |~V.ә #ՊXQ*JP򒐻o߾~CSYpqzy*hCƍ,[bVr;;;Ϟ=ΎAF;X8XGg<_wD=Qx# $EBQ{Xaf4PTnbQG"VjF6s<)Xpb $ypkk_\\,˿/N^o+^X2 Z7BLx}x<\[4U^З2vh4z|||yit8˰Z PFx vzxx8Eo$L S+jްlV5)niaPR# ZtTf)]F `FE۷o_| gX cZ\L&q&/9)5EA(xX,wVʷAK` \ySSU\tc2Fw]D"qxx. h4bBX,Q4~"y/s<ɵá d0+Z.h4ƍF3\\\lmmɼz0>\;rMv\(z2t.Ȓ| ISqvL6ڸd`uX\~||L&dU*y}Apr|&LF4"fbX(AdRJ&HUyEz\"Hat:n,l/h`0hZ"iw:fSwŚWE@Qth<~xxh4ϟ?<::lahXfZM&ΎlaaM\e>,K ,,cBsQOK( Qb1H<4v·L&Cw1NKzt&EݽeN֨?:!rS, 1WR%iZIpeiO%C"FQTA\.:(r"-tG ,gz^8Axӆ㓝wޑ](翌Fc",D+L)|2P( RU ftzV.T* f gۍP,,{q%E|7* .DV- xX\q9>\ֶ$z>/Q`#x V-u>O8 ɤnPWY@Q*&x_9ooQ)3LN3 6R 'g$<EB0m, _| /^x,"0xHRRcGV*\)V/TM|\ed*j}'ЊN=TE&} ,DlKY %7ښ`X.?sV\.fUi4JG,9B/7]-d*B\0,"R"j6[Wё,?F߾X,^)+|F2Z,zvNQ:?mSX !vrHH{>5T*Exe ף(Jonn꬯bU4LN+ɴ;~Zl:,&tP(Y]JEF ޚL&ȴSŊ9y,bqww7*J"$ykk Y__|i|rryyD3,NA$A6X+JztooޞF#T+".*Fgi Lv0F^*3CPVggxɰ|Xړ IUcD" z<^+,pX7771~[m_>>>2y~$qϩ?+ Pq$# g[ZmB>x  2&X,FR6`f+RAʋ2HIrR^t:f YgkDeJ\._[RXͭ>#3k)fUU')σp4p+S<7 |>7Ϟ={OҹHL=WC1zxWPm7Z^.5Mcb^t!-*:88`|d2ӟ*1+ęUC[OZv́(DK{!>:("ID#՛7ovwwE/ݘ ZhUq./~Em4H%zV#m<: Ӭirktk哩0Jcx6մ}ŗnmmFh4jz=DU\~J[$Mȁ:`8L&nǏ9>>6R7TaY)er9 ^^^#ڿttLťnBrK Rު( & UUd2ܹŀ#"h"˝oD ʊ8RJ̈́z(xqk܇b# IDATy"A|4[t,`0-nr/Ɲ!]wmGvv|;[_[[f![$5 ɤ |uRfbp8)@e ͽ2 9JFx?g8f/_O~Ha'pSV1@ t='SU*flF}q\۲!l}}c{{tG"Lr&|?4 vv31X'S/_B42ʈH, vtl6uR6Ǐ25e?8840oD*;5=k sE"rЉFcϟ?tEXCi6nw ub`F9ZvZDDtE SDVo%u%vH 0u,\ϺPcSx p||N=avQ! L4-ִHk:=)n1V{\_d3F0E+0Lc&+RL&Km 31Frh,a>_5`l~1eCjnGXDD  iP(t]"oW^/^\_;5H .Bhs.DzuH=x],E0hۊ~uyy IidJU~? >zwH+oШ8llNSx:ReVFI2cmۍfRhuT&m~v~~xxׯ_~fcc#Of-˺xgG)BW:.JF t;"~e$ ?zD@y:#TB+i/^x>׿ǧRiED"tt`_I X,^O$\ٌFcF+>-F~ꊆLg*!$-mP&NӁ˕J%ڛO>U*ٌ_ Κ 2' bXyg2FFnC2ֲX,v1+@Ug2Rh4ZvzRi~ppH8){{{`(>-V+o/u-=%ohRJח?F\VM&x˗@ ?zjssnW" :T:D/fXURo*³R "J9Hqd> r}}*9#pX p\b\\^$ݻW^p<>>>>~.j ~6+c8c # F1EQfӹ8*:Hf \$Y&O;!):43*Opwa ]__?99)J߯;.4t֋T$ ,A=3xDUVUf5Ofça_uÊWts:evLE=%I j\n4(F&;h"2^o>LWUKZR\lfDB*5M>}v} M!>EמJ9G1bϯ Js=aɺo߭mmm3'qCDZ(d W*fh4zŻwP]^^XpKRVkZNb8s+y^7-hjr<*ѯA"5#8W }K!eOa $^\ti]zB7o޾~f}}=OZ.*d8D`LbIQD"FɉFƽ^ƩjW*qQ[ ]Nٵs9Dh{^hnT`(V+&P(\noo~Ѭ_XCts yFBnGq_,?s*Z[[V 4fـ8EL(tjC;2|~\.ݮyzK NwŚ$/ʞTx/0P-x<>::N\[[;995M8p`P8du.3\5{1pzhts{{ssswwy:(y)1Tef nwϟ?#:t&!YQZ^ݎ<4DdTܲe!Ik"zӭox4zn)Q/ mF&' Y3 szn jb\,׃۝J‡dR"OC:^IPCbwd laz6uÇhe2VFiV pS2YrfeU'P\=_"op  z憐|P(Pzx%x+MS4XfO&b6+DuDRN3!h%sjafٗ_O''' VvކV[4=ϻr9_W*`0$E2|4;;;nHӾ3JĜ@@L@7r`R(K,3ݿ*³~_={nr4BVoLP!XLdͳvbp8 ~e;plnn* ͋0~+uhwBs+PJ+| h /@kξx"r  q|>NJβ*2)&śsE zFnRYTdҋ]"(?4tL&7o45My.Zހ¡I 2Sŋ/^L&r9ZV֞'ckkKfr9$zB/ rezݻw?'Z2V3$Mq DUW t]AAŪ*7D[:axZp(27'JY`:T 1^ >ccsmm?0t:t: t8 GtqN`8|d2y_| Y0!fV R\Vw*Ӫ\5T#pd2޿FvX,*+N:M Zvx<H/xt: ̑BEEIs!p=::\ZZبj| h;Q2bPʢ1`f2xryuuu}=L艬T*`sD2*7d:!PdoQP&BdBtܷdq0{ Y؁BR g&hbXTd2;>|ֶLֺ VKG}AHXLo8TVow /^X, t/L&/U Ϊ8S*m HkZ)fϟ?' #خ_PPA/^ppKKK:]rae1 h^?EGB.ݨ2,yF5dI{ _> 02F+~(0e_IV"|XkfLk;|>~Y0ul6GW톼B亲b6d0ZV&fp2,d$H$x޳3}! 2|2L㏋z6(fX\>_.2VUZ#Y<pO3X1g(M Eg%*QhN^[ ڧЧ\.ǯooH9Z6)k9T6S¹QfsrHbd*/Z|>'b4}嗰 `^O֢bFt}g2S4 gO7]^^F^Gӵ4`ER|!bGd2x{}U1 ∅665:I,|JS> [YYg F뿮w.rl $U T~s! x2wV?*9׫Oz~,j7+O9D4eZW:%+`P7 d2 {>yXiRz,vO$ЍK&05={l6Ǔ}8ςNλ:w ]{& AZc('+RXJX tZU LJrv'r1 E:yj0V%7{$*Ls,9v=oǏizsRlAE @ mgV˗t]F'''B}zj;<O0b!W1pL&Gh4{B{l63Pe2Ej`WM+ ZׇiW4|X$4  /v{777uѹjz 5C Yu(pLV) ,kL%I U"+ xȥyd*믿BP8 f %PVnT8hU5V5 l6N{jU%LEW="ۭS7#e]H#V %X^^ƒRrY_*+ vt:XPT,JEE7327|> CH:4X9N0*+߂Zo4"Hq_JT< U%m^~}yyY(Ĕ#R(*|\N׍d-7߄/ёb9sFE˳*ÿ4V!O Dh4͑6~}K Zjn˒Jm;Z=G6%Ǚ0鉄4cdWf89<<$b,H||~nw #+8nz]X(})ͦReؕScA}=H.[% Ɲ`ӧ`Po4t]!2ND"4ިh4NOOWVV?~Sɔd& ·vnw*ڤHe?KPfX+l),AI.erMJ~T?uwwI;\$zʫD$Z>Lw蝹ӧO? mluz}@ EX_u\,#(/S2IIl0HдB>G2P 1a Xk\TX,Zt:b4Z*5RD7t"7dJX[*Z)j7|hf/\.=;wˏ?kMuވKT _T [eJNJYYY%ٳg~x!/sb%ȞJ|>2yF3\l6.fParB2~RLEPww0bl6~Wr_g8*##%j$ݶm4(xgBgʮق; jh ۷߼zj4Z-M"(PHiR> z#H&5 @כjC`FICKJHfl"#RD]A!%.+Jyf<(nW=`aJGL6ޫCy@T*JVpN^fDa,ܬ*j~o?Zz<(4MӥSS=#L6 Z,$dt:͵4NAe3Dr. 0eY Ve"sv:<:B@ÇKkрW #V*hD2ɋ \]4 zIޗ`@l6zE֓-/<3V:A uX5)Ja.KRJ(t]qf4~} 89D 6#.ђ #d:/_Ek~tttxxdX\.Q ,e`yV,4Q$Iy"wMP:??/d:Jlv8@nѣ,0 .E-k I!~#8z)"g'J>} 4v?~H`MP`3fP#ž R(7L2x<[[[[뫫sb9Xt۽ƽ^juM+QdL@ >x'`8d8ӈ1yjUJ?gS2z' %I<I1FCS*KUG0gI4M} \EQK8F'9h4/^@f_0=rY,2p_0Y(YSI4]ՊV&Dv^,͛7zZ^(x#D"/t:`8xdﯾ7QXOpn/rQ/]“ģV i<$`~YeYb\-=-$C!AE)I[: '%#|>ٙ VE!uӧ_Gq2 \K2?oa g~AY w7hyB1CRPx<n ac )bE#§/__|YMau4YP,0$R.BΔdx3$v|B/tfRUG_T*2_ޟNA[dJrB5gyVc* 'wE>_ a^a pDŽd"s&dp(ȟ:8QHve0˓ޣD2d<,fz\gȪjP|2v8޼yvaArvp|xxb2y oT6)"upD"ozY01Nè4MTIQ ݐ-"D#PO+%,X49>>~ŏ?֪ik.]*R1X) [#p8֞=5\.0...AZlVDH4L<ŸH$ј"BR+++~׿5Ni9<|],">˳jv˫x2Nq8ETZm_`0J%?fRTSWZh cPT*nOys{&6ŝ݅&HPM&txγ3Qs|ozSE`1O-i'\`ZaOFl6VAUx_ бX ț?E袱T7^e6A@SHO,BߐL{ ?~뺮BeY]ڗtDsB"eYzpxȝwxtDQjaQ>88BFc>$j!`_Tt:vwa>xἽh K>yE"א,T:b1 gTJvtU̡$ZM0clr"~;- o6%,#DnXL=[86zw^`>t U*Ndw%G}gq5H$p7op*eߊaz@VuU.(brDQ(5?|] xr>|p{~>svk 6uy<^1%iX2h4L~ӕlRאjTzpp0ɭVkzT*Q0gbJg04R [@<#<l:cĽN&V d!P'RhNHjLs!^_.S4x E$t{|>},MAwxxȋnZA;JPW|>%!R8DaA0mu6]_߼~ XdoOI(>x}E9wp8Ҩlcii/|{~ed   TN= Y׷Jz*fZ^VI3 Ny(r\koOfYIx<^& )^ ^zz9L&o666"zv,k6|:Nh4e] NҮ2I j}R3euxg,l6߯-u @?/%yu]}yȯq:NA Vlw2BJHV5C&™͋Y?Dy2*l6FqfsӌPO.h":W59޼z˟}Çyb~I&Z.] 5Oe7u;.{<$\p2c|>_4#?7࿐poC(1;` ;W>E~Ş^d?uVH0ͪh^6M|pr9JEC6&\=y|pp:|>fw](sޝX=~giiiwwl77/ZV0b⨋${L&p  B\!p8fSR j_e/9{Tkh}ZVv{fS0F{<^T@LFR?++)t)`1rY`*Dxrn>躎o4߾yPsD*zl6SKqL ªFv 5ʓ._ZQ}j :7`(D}ӝL&NѦF͒ $~r|L0"퀯O/(@0v{l6p8AHRX >h4#͊&TtA&-kKy6 h%jmnn>}믿~u0p.ggIN3Pe8fVʄ$JfxgggssS5hʴ<;u}2^\\Ǔ^O-iL&I1D`zDpl6ͤ<~ldztF{7|3?绻ǦpJAv2)\J]l|Q3%D!~XCβd2şN5WZmwww$QSN頄V Rl>9>6nll<|𫯾Z^^N&~߯∐ߔ"bv\ u|l:88888 jmm]^BVt:*x_B^IhW.CX%`''N + \nF"ZKcrODY"IVFD"`PNg< ׷޽ȒOE^H YQp(BڥP%FښHQ$~,W.nu]fsF2۷ox$TMf*>E\fd<*o:NKr>~˗zT*d93$)CO(AFx_n2+x84F'qA\Rr$Z(g ? ߭uaAS˜R'6ǣ# .&[dA1띝]@uѮoxx/ϗH$JJI6Q޵)An@a4&m)isO^+i\.O I$|ZʽzjU{2&^ j Cਡ N S$B.fZ(@/N-0e\Z5h4)Ĕ><<$J,&óLI +oVFERzUE<Vϟ;d2^|yww':c`0D\W.9dcҨ`GWWWwwwONN G뫫|NE/"djMBxIA=HeIf'L*Ơ$\ErUBt:fɉeQ\:\Qծ`@_Ђ,GDJȠ@/2*sQʊ[F}\dPVhJs c8 وD"$Q,fD\.&bw8`>e-AAO7(T6$vޗ e\=:Rd?bՒt}Qi\.;x{! Vet8^7DEV?\ e|yQSa''S); I->vz4Mv{ ̚N2/#f4 YlR!j66BVdZCHt?"|3ENT*U*N;'I׻|ꕪ ƣeCirt)H^]4Jx>hm=:<<|?VӲ=͖,"G50.ײX,*mɉl>Qys{{U+J}vvfl6cn6[R)LR'xUj2SgL&?tX, Ǡ&WC#;L$QrjJe2y}HTj! B$q8q&dYV#my3 =#^"^T{H$'e&&jsO "Њ_q:uݻB-J r22&~(fR$L Z{?ҜͅLf1{__"~XP*Aw dV뺡i sD"nwN1^5l6ӧv]o4r<`Ԫ%xfM˛P(Ngh4fחWd0"f*x<X766---Eb!"r\Y_ꬮT*L 7O'{HC\vzzuuo}^b(/ĐxsEboVPH&m[ OJ w~~NfLcÑTeKO9JedjJJ[^f;??sOl9  {Rp7=Lfjku{{8WHER*Qio{JNԣC*Ŗiؠt%1Nd 0)FbbpA &T!1LLI]D_@nqO> ZQ}BC)#,j:jZ|[[[6p:S+VA}&īmG>|dikkv`0VQC3k"z'OMh4d22VjWϱS|df7!c "Sd*Lez(fbZT4R 5OA  Hh8cdk>NX r h=,5vi}Є Dφ#]eIxU WE/J IDAT1N8t6шVj, &#ܮv\(x\7 G-)LBوB WY=1!nv߫qUyww[Z?BPӹLfJl6a2holl/v)Kg$|X,J@฼g1'z>LDDzFtFW8؍TFmVZ^.t&z^f6mӳ3W2a(67kQv!7P){2>cG rΖSPZ ^7OF|g}KKO47fJEQ&]*?4)h\]hW?&CO49[../Gx2@ͩ*:*ZvnZjQxp58*LӃ2v=z}}w1l BcI{VrCقb|;OO/iVeXj- qf54_0fnVnHmTeuGpJNIDC`ԔtRJYIc^2Fi0 dDr-1VxbFx8P)Pe΁h*0bZY׹<‘>J,}xjK\HHkƒK]DVmRRam ŪLd2y?C׹#x~H,'EtxIHBEB- XXj+gEY_^0v=]7nB)jA;~۝3G!K$܌<& cuUŏtjZ( E^ĚT ՅP\Ϸ--@+Ϟ=c-ѣǤ,//R\S5%fYϟ%?N& B$A FFh4=6M߿=H!%Zн|Pz YRNgdP8` vwvvY~+r*+*lU5qj-i6( ̈$F TkZqZ^T~Ƒy_>_(ƲI#44Tj-H @M*KӤVbr}Phڳl2}뭬ꫯPc[%yzztIW}҃o4"1C+ӦP,Œ%y*$jI"lКVR6G+tRR8݈B.~!LXu !z,<DA*Z_~X,rjp8a  {ok4pV _R9;;6><}>avTnnRF~&镕3U :?SR Fc~Uc+5HKqvcssSDljvuu=N&cydyyeww0?C(^PEX U<k6X,l6'ⱰsYaA7 CxfYB}TttQP(.rHQu(CdW;@ [={~xh44MPZo,b.γ3k?~dIu?|uumkk {~~^(|>l&GA@8v\6m{{iuyyYӴO>!m*u2$ [CjqUU0<׻ttzђNaP%p8@rVhB0aPm(LX鼼d.B:fE'r6c#UR7W^_\\z*&VU Q=""O ̴Zm)i+0~`LL/L+k,5B>'NU4@x99!Dm\=loשּׂ///?}3mkk+ E&\MmHe>xpiښ>}I{E1н sVhr$\.(?vPcaRoqiL&}~f|vQ!G7+hT5EjjEeR)x 2Z,V7 MVvnWau風R-vJBǧϟ?_]]^;Vl~ss3ǽ^p*Fjwwwwss͊Zb(B?dzJmVU) l6R*͐롇ė̩MZmfͻ* ?xJrd* nɼlF$K6Fc7C!%U#8ť(8@"18wKp8d4#$LJDB,D/:fPդW(m2\h4΀z9GV{:G2u1{q Pb4Dӛ7oKzLf^s)dO&y =H \5qV!pr'r|l;z}AT]¿!0*lV] "|>*3RY+ N&Sh|q&xww-~rǏn^o@LN unFNBN:fɉ|έUv ź8wwwf4 [VFvww+ʻwV*r9m|Qiݰz \D Euvv A_(B,6bCMRKKOM&s\NY%JB! f?HnhF y< ,X /K8jR0Pjc,7E +ROjV.JR(NNPGa8HQ.l6^ Bei+V\Lfu:l~yy{1E)Cx!*ZgnmF [B*LӗPR)- 3p_.@Dk_1h*I;B́r@|>ͯ `0 ~t:]}oҾpr%nlƇ:,Em1DuH. ]7bu\<*,Nek`G>k!\'($յ5vz<;d۷ٜX4ގ-Z|/*RI#&RTA`oKKO׃۷ow{ZJp Gx"D<Ou[L׻p3Jd2oTC*o;Ye6Y%/C1lmh[.RIv"즨i%tOyٕ^JK$ΆHKdoZ-xfne!hc##(c=|jBxG"P8Ng^saCgmmm1˂B--=ŗ0H=h[uh>??x__rJ%*TI/shr8)"!:٬ YaMZWKX,@mF~t:].'pp8l^|5U@Tj0!"B E0h^Jg2qWVVvvvU תz]n7`rRJFBU 4lT}RQ怪ІMR,ق=EW2E|EhT{J@}ո4rLݽJ%SA& yv^xQ7j:A@ s) G)0p8l`Z{&W͍ !h\]]& Ϲ복x`0庇Ԟ|c5gU9dSTtf00ʘM&C@Oo~?%eN0ȳJ|>‡Y(ɓv??777fnN"(u!Rh[rY VߑHT*h G#B"TyWZָ; ž)T*ɔtƣ^Dy%̴͢V`.O&$ यjx6^\^h!mN|(JǗe70Ld1]^^`PUy|K@aO !Ȓiy+n/D3yvz$d]z:! 6[-n@0rfdDQhVa~rYz9)n0xYa<@urN'eѠYckk; յMt<|b I0#U2Ӈؿ\.EVpYUe7>991l6lۺnn҅QO~LÓB bwww7Xi:X&%508}*Ny'4M%I!EV^o>S.ܠvtavv!+ y17kݑگ*Uv|?(VVaV*FO E-2T(*`8l;~"XuEn^UIU\PHg2x p('O?|/ be=P^!“$齽=AK$C1PJ8J`bKXգGpmRnQ.cj0rrqqRQT LLD߼{Ri˵wppzYyJI}ؐ*`,@)#Ѥ>VՕUo4\ ɤ^oL 3p8NOZzQ`Z\uЬa0Bf93t:zVVs&S<5 OP ~%'LcbR*'ZV+h^[[T?sөJ B"D_EEƹVU,f/$,mHz~pppp(LQ ˻bg9:":MI ab.{{V!"9Apc-DSΥ0#ә`nE싳3(>~w)J%H?WFJ,e:, J?x"jd2%_4p=!"u"w)h{`aH${^SGGG6i(bM~e,`\.GqժTi$q%SSZP \.w]򗗗Tjuumggj@SsFcWFcS't]gPיԖd(D M&N[*R&uϹ\>JbD1'Da\^Ii9XS Q*>|45? ;u0]^Ng3B«jPH$HvL&.N7ߠO T*ȱR$4FiX,vrrmZAPH CI&f79a.W jLp:Aȃ~6NaIǽ^W5ԕ))MNv[6rh4ҙɉ($<9,f0GѨuMTKoE 6&׋*D0=ˈKKKGGGV_a23@ s9f%Kӱ?o IDATO̼p qgud{II3`n)KNp8l;BC0L%I^V帷Je77R44M/tW^ct:Mi=T.L&H&(P8,V3J+E^6E(RCI+M!vuYmb-TXurl?lJx|Xl hbF#N 3fYc0jYm6|x K~':f9 Ⱥ&,G@0Fc{g2T:?v\\Dv(ChuN3jl6 Fc6lLDZJBjɢXV|U F\N9 \ns|~<#vg ʦ``+CW:CZV? ZTJUhY8I%N'of2dX,r9*–Mt:#xRD^d2/pl2l6X OOOONN.mA<WaPGO&SXl6mo,s)u3Ψpd.!B$,UL&)CuYIVoT=p)JjV{xxh6].7r:L6;㽽}99::RC:_)z1FP 6 Wis$BP@G3@e@ HaXbx^'oP`9LBu:]Nvh4vfh4TꫯZ,m1 ^ARQtI;jFV\.hXl6QGJM>4T=IʖU Ϫ.ʵv^Ϭ1DcB?WnP ZњfjM9x<R3gdPz4)yTX,Zkbdr'vƻw'i B!lDMYZ-+D -B%RX,TdVKaPШ\sѠu6͟~?l6_d2U(V HH;~Yd6;N[}yI+ bISj1ͯ^f kww<@(.//]R (UBJPi}v;NjUIVeIaց[}ٙ?HcI׭Y~m4d-nY*S\:Xl6vV錀I啄:)wUGZ^IK ;ѨO*6xVMm+7  @?"Z8NW)S&w:-P8|~~aڏb|L ?'#`&*nvn=f1 Xϟe/JLŃ`_@a}x\nz}J͛ɤx:::<_Vp4 \HE02KTi4* g烴IU}!:vDž \޼ygN"<`*2z_^;SztZ2 H1ddW}đ|t:N;8uGmccS~W86t wvv0|Ʉ4+ДxnURfbNZn[ +xTednn|>/W*Ak4`h4wm|'DIp*yh|Ҿ'g6ގK5\:Xkkkb0LPRҝC ~*ͺdS,/_xr}}`8rĠ = cT—kGQFQ')h\r]_daѬTG2ud80 2F*N$`rY..8C6RW.NP15Ǖ*,Plon@b|EؼTVLzn7[J/7XWbiY,D r*7Jݎ$!p677 uH&*jp8\n6nw)"DqU?7`~G VeGV Yy<ޠ oT*rX*Jj4gC0^W(x2 S$9M@^l*HkF DfR`089ZFf !T|>8ҍx-!a8R|E~& KGQbȌPSK7LJ<O (:1$j }PLɅQ~3^Y.#|R 뜿 XcTG"%TJ` 5s*fQgS. -F{{sрD4L)pD8Fqyy )wP4M¾F./=T$TnzNk0vww%kGhZNda8d\ :%rn7Nt!p B&N.PrQaݭNFzFbݻwݮȍVAH$N(as #?JBag }NH$gj<SrT*h)ի95e1@28"Xm6xt{{{kk 6?|@|_9O"`%+Y6؜xblNSz* .DRZQ%d#w!#jQ=CXN$|>8bdR2JӞng'qE,]aKRO'/a+T"rQwTr~V!֓p^d2(rvItN.&FQneAJ2@+#(L8RT8fW0GI:Lpl/^h'''N u?9ۊ8xpp܂/d2YV./=]Q@ h.U5:]^^_\XFHk8>_zn2bT*Qp6T/;/d)re"kV[,_ kzTrHӊEٖq##ƪ,wTvm&V/qu\.+d2qX`|>`f^ףѸU*fE%ۊ QקpʣXېuUj+ݒtKFQ!r<<47yNy˵Z V]o4Xv\.fU>a677Mfy{{7j2G?H&#ޕj 펚*h0|p )J5b#EaA E笲JUzhm Qo′ MsFݵl_}^oP`(dhw3͙8K2GhP>-QUC7RB&0 i5="a2 O\lEެD"ijEt>HyR%I6^EQ*ǘ'H@<Gc1JCcN[vz^t$b2יp9JB7٭b;.//ppHUV}a2JRka7E_Y^hyN<<({-LeBU*BeKG2n˵?~-T2fDKT(KfO&l\^d2J:.]ڂ_|>h21ɼD4<>>>=%Qyrzzj6+uxx~lJsvvvz&4j_1Iw9M}^TG6F>id2\]_?y?4MTd'I1  G(14Րsh Jq%#] ܦsҧGCkv|>0 gt䔪Z7M)6T*up7 i?߯f?庅v R4MټEIͱN*c(WE?==C) ..,- "NsUpΔI+ X+-&Z|~ GәLPx0^__Z-^}ppMYB9фjl CkF\&Qd4W˾^[[dj>/W3Nmp8.-.A^XVj?˻wuE[ZVRN 1IB& rTbeDn(=\]H^OӉ\SfvO$l6ؓf Nm6p4"-5% +ekCTzTx~,9@pHa]_dQv~~~~d:;NRdbF&J ٓfV Ex"ZR%i)%3=Tj x_LS*!(\ni /@ʪŋj%τ Ex"f#! xa$%ږDr;:Ix3X@?|~i\d5LP~ٳgϴZmV_GlJzj0Hʕe'lZtF`82S tDoo-2kQdfUU[,>e ̃ΎxzF#cf `TC=991}~nRvSH/A`E9I\n]IVV I2%`tx& . s~^D&a*oTUqMT$+j} s=x8B 18V* t9`0qg l6jwwwnA\.dRb8 IDATj/^d( SzLY͖GqZm6[idd IF(Zonnxёj<8F[LN‹ K8`(?dpP|ѨVk^/rL&tsSj_+wFxp&W4-\Y8 u ^{{{ϟ?֖7?ueXH$-=1*Q "z,Y Y)}rכͦ{^VyrDl>Z0Cft/NT*a!% {p4FMX^I$U5*+آGu @žKVD}:W^ANZ 8f:E U*CJs=3C V߅A4ESDLRǓT*mooz fq2XcFQђr䆫e4d\t5NjZ4%IJj{Qy5,!uѤ<J1j^g۹ %=!o ݗls>jxJj95R,N'Rld}vWWѨL[T0/9'=FvR2ф A$\>~ŗL`7#˲a+ˊ*DWBVUz]4]عe0T3bo>{|mmf}oisOvUR&&Bw:n7l\t:DjXfd2'ggg6P)ng rrYVt:%4S*,Jaj)ƻzER߉/, 1BTj>_vEgQPMN }S4HlZlv{{{{{k۟Vk*. qkA_zP(|1IJuD[U*$-uYXFcʮ NKzx< ._jp8"@9aKCMm9w庀!EBMggFXmll|/_މF?3FQZ=LVQF`J>x}2?׀TULxn6[ =V Pf|R-˸5e`d}qD<FǩL ;~Y^f4TBQ S0LLxzz:~`f, LSXB0D6^OK5LәT4+/ ^@SBϊœ8_.@> +ߏ_PR"Tznzt:NݝL #+_<@(Hl#k8F >TVEoa^6)Y^!Z9X L&Nwpqqd1Z!;u _(JDԈ`2.noL&ӧOzlAO0O&滻l1 Q0`HTZ(Qhz5K&CidFȢĨ3VѨëT*E8 r0 KrN(pY37~CI̋xjS9$d-E4^"h, ziFLY$)d2O$"؏K9$[`fb!R8!בx*LG-|@x4[dz=ƪ!& 1$\\ iN#իWZ4\^dJ%JJ@ =E,wJ>Q͙Lhtx|-ۻ)M&T2חy[l6Rffr\V++{{{;;;>;;?7w}0C))cQN) ^&usPj bTCjP,pCd2bӧt:/ŋPBe•J*jv\.8LmSdlה8.]~ppptd!'@)8>W\.ɼ* RZW*~eju*$1B__>}Z .EPT07+24 X,Fx2a۫jlQadJB!RјhjZ 52, <^/b0JёV/5ݻ~cCcl6Xtw:D+]@TtH:ބB+ڣh4hb⢝)kXޮj?p8T*&''AߔlGq?J,K^r"$L0WdZf59ry4㫫bstdzNuŴSPp1`)H|xWL* 9Tњ>VZ0T^%ikk+LO߿QfU9i%gBe485$GSD8Ԣł$sssnwww KBm*t&רȔhFզ¿rGy7) 9Na 4!p)TG/^/nV6$S8tM=DUUBK 53 p8(g.# _!^_8N$\j+r/>}IVi l*a2^_޶Z >hmJQp8N ˜:zKRf2z«zlrU a֌FcZNnZr9, 5߁8yc{{'?#iyXðaE}_6|ÅB!Jt:pf\N3ЕF؁ܯ*1+lVX,Su`ooossF)l6|i%_rEa^o2%ڕc^ Ք(u"Ԉ*t:_[[LJjb3DJ B @%z)FZM`0Lx<΁\njYi=/+z=)%>U bS0}xx[,F񜜜~OY+yNhs>VXTdVȏ핢!jETh4Gt:lyɓ'OFnxH$U~rY BsՊGy$PSC"nlCVQPd{FcrO&WJ%+(q:؍sppWŻH_~rg2S* ̇~ZFhJb+VR`C2i!-v j 5pu}wacL&Ҿ7NS;RdYI7td e˫ۻkƓh4FѨv]>uaݨjRTXRT-|ӧONwlXtFň))s&S 2}||l4>_^sv!Sj`# onz?"ن6.e9Οvh<_]]=P^ XA桍Aڋ/Y_)p1$8DׄA>#t `0Fɤn#$7 6=bl6d:fł^( E^h_|Ũ϶W /G HEF\rD˕d:Ono>~t:>}+FLH'D$5L΀ߟf772͞3u9880_B!uaUmq8UNg"hZ~zEcJ0hNە s(؉"r dA vj_"y5(H[GLQBxрßjE,baRcߪ4S LTd*/пV?棭;ίݻH3L bk΋<SMl)pX 7-O:q8p$@,Ctq'I;`0Z<&DEcJ= _W0@p8lV+I{Y)o"ZHėJ3lX,T՞ q0ZU5 fÛ뛛bQ}>hY___[[gEj*#hPH&Sl\.S0BČ P x`Zq^]]})ɼxA,6rX,vb,F4q"L&%LVh,!?bQzo V#e+=npun>Y&bt8HjJ\.oF#-UXs Ei~///. {{F׃MbQzb7|Ngp8 d~t9 B?`0VkLQx}&KɌCmr6h<^.wWWWNRĤ׶Zޞ^xzzxJ.J b^DR.x(ͶZ-2䯮?~֞>}uxxtqq(gr1e D =^/_T(R&7G> As,J''LA3l C&Y.ȟVk4{e4n*IA7`Ke-?xRF6f|PX QSPj:NN`2["DG(.j8P̊cS&e1|~ P2-F˄cc JO<.tPK2&V&$BAͶ!v57t@1g0KYf~xruunk4Ng</KÛ|9??G'=@Z^Z" U:0}jUKR>O$ 4PV+ ݻwjmƘ@+t\Ur%EЃ`\~2~lPonnJqr %sW.2l˕i2Qpb.Qjwu:.j-Nam6Ѵ볳~D1d /TV#86@J66hf3Yѩ¢<+UQNJ2⋣w9lh?R<n|4VvڒJGl6K1JNAX^o4[hht:vhTUpi!-VFʹhPy?l~lV*UjqNt&e\zK(JyIv[jLde pG"Q?y#dzuu= `2jz(Z$ݗ2""(="T󟜞ٜܲU83"W8==%blgϞi4Eo<rN:#RBOpA(|~~> ?w<$f9D1UZ OJ-|>d'p~ݩ?c68Ak.5RrՔʰ$sJL,mhAOj5(MKN̊$miPvfzdr8BuT.w:tڸ^,l:caqs\SGGG۷rP(C߉b)?s T?|v7 (j>Vr tIe,drp{wիS;NH-N`ƒ.ydTd2i4`0*r=(Ru*fO$~*HfJ:ꫯZ_|~ttd<O$ X٬h$׆2S)_ωYHKX,NpX "G* N^Vr`!G89L(ʕtjmmMݍD"s&0>bqE*K\G>_hw:%& :z^*&GED(B8sʌHbmP/& mHz0vw@.hɏ?l665'L2*h'uTT*3٬fOO7 }v5j ft&!o$ ɤ\g]B;99%Bb{h:]]]ynXZT*zONNCmكAnVYF$'R|}T]WCD"Y(Z|Ngo޼t?z#bH}>v1$ZywwwuuUTFb.RG)58Zbg'Rj IDAT(#eT''8t}ш lFR)#!G:H+)~nwljvp}s3Y(JjhjHfe2EAKw(^1u8h"(U%tT?-J Y77dP8,ENdX&f5ϯonoh4R#p(Hw!`#@mmm oFLPV0)0#6. s?t(Le$|J~bX&l>}O>8::2L8.Gh* qdl}4&ө*a*rdׯ6665dbd*TbvNJO%S\>t?<<}n?}ӧݬ/ l6l Y}V?;;emnnѝ ɨV0K uzztzww?NC^W?3G3I0I<#TbE(Eb/Or݇n'I 3b.vvv666w}wߑA QjL )&$ũ^VCqBK|ttE^}}3ZEq"õ=)5J ėu%RQGG뛛_~j5M)|p$*%)xML;`x llڈA}Iq䶌㛛dDT RNCl<-tHl3w\tz2e4v8...seMEfhceajqD~ lN$PABȠ[Pz t: Cl6db]./9 ~7`Sߏ W6Y ieccnw|͛7fj1>%o:Iʛ*[)xvww]?@DJ\[[F'LAԜ# ǭVk4ݢf%ͪn__\@0&`ٺp8V^V=8*%JJx߽{h40;-7 -OJy5t.T*nw0\__u=P MF#p %/EiݤKJ1s(>:U"LwvvO?Dϼ@ }M"ř q6]^]]_ߨZV.c'@ vX n"ˎɉVX[[$?c6Q@qkH)Ei\F,(ERjI' pFz:ab1D1k'k_ >~b8#eՋZ{F^Z G#٘br `d:]._}xj(Ò Lg2\TB»ooo*0j:U&1K X(s\">? 3;>|t/^ rxxdGa&uENpx{{jf6OB4̾jL\1yv8Xh eVQ @z+^ʐjm4ᐭD\nl&AV?c:f bX.g #JL6K .ٜJ7ofp8BWs|:-haFDpI3fZ(@2B)=d2矡ryCEIQ39A.#0PxEhsQ` 76DIͯ@)nY )|yy9S2Ira!I0u:f parbln^CuX0|>x"G|~uu`6ĮIX#B=g:VXE"Ѱy](p28hFBJ `t:b|xxԀD VQ*@0 ^OLh;+G `]ǶݭT*t:m6|A8dqT4/!F2ĢL2Yl1yPql/c=`rD=FvvL&Ņ$V!4qA\T>ߏt:2  7ky|zS*-]6hT{nłԒj* **dTwVtZA ؁@U%3Ft:d:>V]qЄBUa*y67 ~eZ?~7߈;2qdBf{OED"QV;p8/77P$x<D'|?~GB'zyyyy 3'4%$oz}@ˍ UB|6CsppLHf :??7Dt|F$_1|tJ{T*JD" 9Nrzzz||bXx0|w7/&I'VE:K'k"c։wÇ_~t:f+SUI]^ht].f(?@2V*_j\X=B^x' V,Z- yt̼NW. # /Kh2><Ff].W&t?dZ*pGV#/uNjL&ˣ)mf?~Hӯ_駟޼y)I/rrO1N8J&W7@ez=CU>;; \.WTt1WPDmR*aÃX,2l7hlggWRs}}}oo/><<\\^5Y2¯02V +O>_z4$S.VÉlbҺNf#W~_~A?غz}Bt\.k2aLRO)oU8U\"(J tGJԌݽ^w T L1U,sO4hZ{bgѥ])-4|<O3.{am#_̊ )R<WU{*91d:(j`A|:wƣѸl G"D]S|"gqQ.IdORo޼9X[s"l60 EeGP*nf Vu>_8::V:?nnnDm*FXf^[[>%ŌGЭS1\=jf V+ 4@v\?۷FSt0@ };E R6OAcXplnnjX,qL<pb1x֊'D`]o;F yRQvZzetFl6Jȑ^.`Ib̢MGGG\ji4Q >::ק8䯶q6N+ C4M^%T* Z"MBd2xkkkD--{p̋2&6H9 (+>,|>L&(YI2&ەm ܌xb1ooooo?;/^Z`0X,զ0^/ 1,VߟNg77nr-'ủpqOP(|rr }<R М"pRh<ʝCUL@72 {bxQaF6Rydj6q"6ey9/,JbIOO 㓓p8j././/ǓIo;髵!&|DPB %H VҴ Fd tm6?Q*hc8"Βt\!\WT5ܮ6ZmGTsp:/_Yi<4ЍF*O`0x)o}}f󫨱5&}d操0t Qi_b&Rh0 B\ zQe2XT, |>c]dph)V&q=9NҕG]!nƨTP_CM۽^X`8`43Bx^5*Jذr+  %9 Qً C[fW;Geq~~G1Q>O$ܭQ X XO'zR tVp|rBiKGGGdr2\]]Fb'*쓁40֕"b}yyYCggV`9Rt:D>$C tWdr6aM &1= `Gݭd:~R~&%,%w:RJ<#@s BP%@`ҕTAt8ZmeA|1tl6W( m8}mnn>{ŋ hH4*IQSL\9|>je1 )(eJpx6F# HQݮHMZ$YBf1@hgx[Ym6p L~;v4Rfjr* 0&ezj/ W666vi@w숓T4Daa%R#1_Jq|nk: hk 4 ].v BVyaU="\1LP"! |7A766Avw涽 ̓^;kG F9T:]`FCV ұX.s?z8U4Hf>JO y62\rIZr|\~G#,n~TB{ b8x \(hO&xX,F+" 1?Fe V>_HbxrrB# +Z'e0.8].XWbZ{xU9!VA >m`Db0]s++H?Dy's#7Ĵ2jRLV&] H [v!Vjˠ(2tMORYXSQk"˝KVj @VtƹnZz&bXèl5y̆jY2bAƙ< t6' Bi<  ɬz^GL"6ƽ]?|rK6ѣѨT*Pi!9%;tNzt~/?_ҕ&f5$7zlB2VfYϕx? Ib9x`۪Floo{<]כ͖(yj0loofX?CV+ajd2ei P* \ ~p]*;6-_( t|/|!#9ʕUVٙ^zwww<ÄS'X,*] ZTtټkc2<8, )@2DP 4rW^I]..mufbJ`t:իW޽[_j\nL嘘_ue B8)彞s"¿T*3ձmۍ1ZIT&K8Jp4gj;_]]UU̩8::1Q >(xy8LxU{&t>W*.?l!,b/F\6SeTѨ7(tuVrl1M*МZ Vt d.KQx[[[u]>Lh"˕ J谋R2TдXb`{WLSRNWRNg7l0v]Gy`(Da8::ڢKx`0׿50p8`GMqg83RVÓS Fft*Y* ܩ1HvDR뀗`0%B\۷o1yfeE e{ ewɶp$Sp$GMQz~CRu"-q.IÍԗ z HՄN:dN'f0L$t:|quuX,1pgѬHV_L*I`EOÇXl6뚦.TIAFnKG&]8s\MbJ+eP|TT1jKEP@D`B[&%-;tFqTR=>>_ի>lo t-RVqh'O]i,rMrӈ{1x|q)?n٤bjFp&F`Z ]8TNlP A&Itu7~"7F!´^,=rYWVv7-Ft:M&#!Cbbq-V+lllZ,BTv1[k^X7Kl?9NTgZV1o%%[*z~׻f'Qmo@*HDN "K%ed<*<<~_JYUl]WdջRl6WTd:%0'X__GLfSӴx69QeC\7nX|έVqn|HV+o ZM&5um8llidIAŭ-,HZ7gfyJEatJ;$0FdNӴW^=Ç,!š.ir+7u/W*>% rfTDRgԴ"P pVk6OS|,ϟ?ʧO BDd;~ BPQ^(dfʕJj;XVjb}ʈB]wrY+ŷ#7h4Lp4[-$+v{0DQX0>}d4p4* t{nZ@ߟH&@( N!rl6C0=@"ORUV-[nOӗdnnw* Feˍ0޼ysxxxyy_#. |Pa>,t`N2b ˥\ؤ ,ՠ %F'F*Q~ lR4pD56r@ txZl}bѺ)2=n{ع&DZKd۲i4~<{<.> v(=VhέVDvh(?}~[p˕ o6WA<,-WUHz=OWߖ[j1:??OR~>/F1qcm.vd:>9"muu\.?liU>cG *=8QG"QoX 2ʪ{T`.&@0HdFÇ?iټ/OA$l.|BQ֦d2}|| TXrٕK$JsV,R>:lWYk @7gsLFAOb. 9F{۝߿u}ee˗ʭrZ(+ ZSCvހY]r,S \<<#H)$r%lF u;.]Sv,&[|>\uuuM¥{xxIRZ'P(ۓYy匃2yk6M~~~~z4's%G$iggh4Z,WWټ?4"ޙLg:B@Hׇ`7enwPKS11ap' 4{mzhYw Q(NRM z:xk+Q+Q-tBATI Iq%DVNz0-Oӹ|K@3)Td2_,1yw+خ l-sf9? @^87Gun7-6٣X,ry.e*#Wy4dh65A4fsBPї_"3eĚH0g;>.knWyRs6)-zJ0rKyI\STy"M?rYur9*VI(E>?قt͗/L;[ v0A!j6-vNO’!i]Q/j*5h` Е/ݧn7///}F˗/%(l95bjIr#& z2^}Z,}t~?H98xS0a zilvvvɉ`0pܖ;$Dua<"Yt!en=^1 ,9NcwwOY/;F"Vuqq1_,au=/Rio4x}|ϯ={hT[A ʶ$^ B6K&SX\$9X_Fz~vv:D)e z[$Nj!ÕE~KȢ$K.) "666&Sݾ\S #dB .kFPZ7WZV"8<<&׭f1 ^DzT*,nW*\466`ss\~jidH51RݘR?88|岠+Cהm5 @7&yC IDATl6[]]$lVN Q$L#jd:C:<<4JU;;+4`$L i]3,Q3}Yx(/?d*aN;ͦuPX_%LL&'f#CD"IQ*u]o6x "g `qu%;"rDpX,:nP`Xd :1Epb2h4Jh4t:f߾}2 /_Z'nxϴ r k18㓃C2?|0鳳3TĢY[xzzD \m4\Pa0|斮翦YuKE1[_FZN6vޞbΕ{h4MPzŇd6DN5nk6[ױRCv{NBd9ZmɁh0d0Œ4TҴb:ːND9r:d{f6+ "*+1Vq(Xsfl:4 $z_= gbXVG|>TٟJro(*5",_J(+ZLXd{qqqww7 ":׋`JR|%jP͍0G2*J?1sXp'f(&G0LJ%f'{(|8~,'Od2rT*R`0h<>_,j\&76fY7NQ[x}z۷oEz1aC!8/-V._4MnyrT}De5!]⸇E`?d GNY:9ND4X,K9VQ +z),Z@ th4rJ4:%1Nq`AR't:Nonnϛ7o Twp=~0Bn4^oX P(G+֖M3݁A+ Áā]IPY|oCv4`p8NOOwx߿'(bd!@u]o4XV*X,FjD*%囁px\,yS5r@eP(M帗ۣ+SI\,.0ԬDOy<".O629 i6eR>Fc_Foh(cZmj ׹VK+Pr[Ob>Gǃ}j5cyX\I(%_1GVbH'*l@!L&SдJºA}D(rIڀ@kƂ ?L&h4zp4k6CfS tIrI."3iZՆryuX,~ŋ;;gf3NjJ`0t||̣HάVGjD9y㛥44D4:L-].>jѤ 4|X,ggfB(@!-ovwwϭD"e[(b5M{>mx_F@ H9\^^>>~ۣA89i,b 4CLO[ XU;LnֈAW0B/r~ &)EE(.b+ëQ\]#F\lV&I"q}U>~h2H,FkR$b~KP0 oZ~'ztp3[,d8<O>N ph4A!ckXq8To߾&I((gtCL[Pd2\.$|Vw2PF)DBn[,y,Bcv`0`믮@=bdټ CSNFC`j&?:MYP"%P,8ݤi~5I&/1VHAONQD?qq41VӥD/U]RalB~%J@fZfYTrrl,J5eF'i4>>~M&Sޭd}]>tqbWWZd2aۮ载}DBI&mA_hG"ggg۬e ؤFpBa-L,ϤA[]&`%~:}n.}Rd* j5͚-IeE*h,VGQmZ'd(.@t:~m:Ngp%w\jN덊Oyawn pA^flSV)vcftNOOׯ_2 L*FQe2%zfsi0`V[%Ѱ*d^W|M X>N'ϟc8c'4pvx( Q$%!E@)U>?@3m۱Wcn;P`$̌Lm,/@4gggp LOs8u̡vp777Uf\0vww77v%V6LrN ۃ y> PUu:V^ J 3~?L777Kle2bzyy9 ^|{Xw& +QF%Ƨ#,ޠzU,L&Sv?v+=Uؓ|TP( wqa-K,c(-b mH`0 z#B:ц'!~ܘ.`0`F9xA`>xEӁ dR@;oD0駟?׀ԣG^SP̳PX j`>X,^\\NSA h4پ(dKwZ?l {p"p8`0X,ncTФҫa?h6F,[S6&RT|82jJ FJTAǥTu/Qgs\ZO&xX|pyyyzz3TGGGVl4mfcm,rƪMnnnwa QqZ Vl6vgRC:Ah2ySWJ-}Kdժ0ߔ tPO?onn4bYEIbWq/^"RKRV > l6X,h`:(_Y=S *o5p.3inlmVCd<>$_@N ᄤŕ* ֫i4L* Ak=v*yE/Jt^myE'IU(nqQJ&EY'bxh%":xjߟL&_| +9?lp i32X.^5[-Zg# |>˕tZr\8EsV,a~ F1 5P8t:iSZ(ZlVt&JChȟJvlX2=e#?p8L2CRrZcF#+[[[~,FH \Zyzl`^LvwwOT]萰hnw&mw:yR ^TP>*#jٝNVU(1L *Ly<^h Kʤړ=yGH$rf6#fs؄YỎEz=ĝG/_D!nX2 {R!Xw{=`w_dB4nc@\zPi\L&Sbq<Og^_<d^H @X&:\4N- 3k4jT}~w RII^RTX12MK$N=ٙjntn]JIǘEXYL&S qAv{f4MlԄ@=e)υV.WП`/͛7Ϟ={-p\ŊٌТj x9> l!c6_ Ɏ M)|\.X|BTGd"h$ EGp8,F)HT_+v=hV8^OEDʞ{D|>>R f  4Ғ(KZx8A=c*_zr% .*H}Xlk5`X'kL" jQX(jxt$4Жx|cTRL_A0⢂nFi:N&C3LRmZm֥B &|*5 5$4[졅T#`8Nv=N///2ؠΊ1H&LD&bw\t:t<_]]}%HzdAf^ɉ\bˈi?,F:d2H^ӴT*u~~Uf|kX.%~ۃf,s] ^__g[ccc쬢T&?js=5r8OYO4LGG~/e p;e4 P8 M~_Nׯ={j3vzzz||b6NyF "Ttbxxx6Ǐޭ{Iyi6#"r&Rc81Wl㝗s oEF!>@`1+M@,L&>SzX,.x-yq2,=w&MH}~?FәTh4fWQ*`KT*Mfkt:xN+Ӧ i,{T`r9Jp^`8Ǔ lz^ق7`L& mzW*S7@A[x*+F8ib^ONl}u4ubH!9)  v bx6cfV=1vCu]]QKa'0IV}BJ5X'{4MbRy# F l>nnnr7b]24/L'W0 mooneuumccfg˄F2)xf~Mhs5z b 9qh{n.0޽{-ɵ[[[n뱢 .犃MH$ iA_l6'1HjT/$ӰSv6mooGR a j`M.*ʰ̏[BiQX'r;{l>::H 8bKLHK%I!ÄZUZh4ZM;wL-wMO"BR0NL&GH Dvq2yDL^IN) ڏЋbtzwwqqy/r5X |B`EED8۰j GxryyyKX\__Z0Q K\ζF@f6}8)mHѮq7,oZ/U;3~ ɥOFx<^eLVRiKR"Q\0C)bE9 RrБ0}2qq@F.PT(l &@  3lՆO'i1FAZZv p8WW_ć|/xm H/%>RW$^&D%נSO-C׫ҔzL`*˱d ˋ`0H+ŲZ]]' KC?n7'f[.' * /H4JNSz?hZv e.8<ׯq ju8Ĩ@:5HB!iTYKA,0j4T(܅Th4dKp8Z,_}>m`EdéhB;"sRUem6%9j#=<<\^^u"6R6 ΅& +^U1cN9&dhM\]Tt龜N 6J&әn{" V,d BFe}4j]0OH)[n.h4e@`^4  /^0L4EpdXyGnZF0Q(= ޗpy$VNG.Cq"Ur Db"BǑI3t޻hZ]]=88/KYoQZyq ~p۝pXNS+<3d[\:zhb0fs)&" f6[V빜R!.nw㝝=nhnwP @Ff! MRC5iӥOzQZkZ1H|~;NۓH&;-j"Tn|؟t{יb'eK"ER콓 `A`AアTe;c+O/>+lgιo~㢵8  #ŵ 3fe2L.X,KTmt\?;;KzT::CB_rqqL&YV]P sx<ap 4rrTIׯgf^1hl+tvZsF);;;;ՕE( \ ٱ*%AYNyPlw:fkff4z2IAdRg){!# uGaſH&UPǏP z> :ۓcJDIse2l p\*f4_vSRpFo2VAφaXEyg>2S~*c&i("tt|>Md KrZ_RTJSM@*rp K%ph65MrCNLRY:n-Ml;v]gkQGD|Ph4NDz2GGGLS) :88חLxCl6fC,cL BB...fffVVVM (]n7 cC^ۻv(d@=r6H&ѨP uzO?8={'R\6s~䱋*FAzZݾo4ngiiIU,RU;w *(Qeɸ. h:fkVv.--.//> Lѷ SG(6˧]rgg|R蘬8o ۔tCzofrӳmP.tG#<2'ܱ@RmtE"+ҭfvݞeYq@K]N3B:Fntx.nF>ˏ+M [O]%nA!NTd[*W"XwEj%M쟗)$RQ^< #@`(' !JoA g>;$fi6Zl6o^|Iu:[v.La& t F# +szP4!\)vkkPRh4関X,CK,^%4ɀlnn+ UP[[[+o.--S< H@PcbGd(.cJgʕJѴ,k͉)V5Jۅ ^=} 1 ~?(R,8a97i`?UL2ըi[ "QG>o6[f^bC9Hxم\{TONOI6\^^C _|yď˅.Ĕ >YFpDeA)4Uth't^Vg1V2)rnkZ2D#wxwhjHx :-i:h,d X,5plZ/_㐉Gnَv8r%ey/.ۘ[a+8ܔKlJ?eg- Ӥ1L&4|pyL]ñ+ͣ#SBRrk0S8F3=VL&R麞dV>||xxp:ϟ?ꫯ^xU3}Q:i$sV=GQ<xz+<8,S5Mz/p!q$q+ZcEY{`)$Fs8yAxPqt%z}qqqnn?lmmaݑ)P ;:´F?rBRB?Ε0`pt)|C0|gff׹./nnD"Yᆂ`@ aԿ*5C3?,|Z~yy e$u+(:LnY$Oܬ@ Ћӛ[#NR,r#Lᓓׯ_OLLxҒȘDDőS2f_~v!kqݮTLF+<'ٜz0R~- ]7(+}x|Ԯz\!xH cRJf>U 1ƉkhiL b4b*xdH!S[xF` ==;cUc4).ȁC27FQTd,c*W$` vGU=aJ`ߗJ奥oٳgLJn<@PDݝJ(9348::BiѨX,f2&&.9dB4Moz\_dׯg)َ\HJ:Mt ŷ=??O64E**+H%ͦWE^Izw9+Ҫs)!<}фጏ4lNCmpf>o6x"h<`$_Z.v2! d! xՙsusssmmmjj/_\^^.JFT| a7*5@%k(4MS{r  #7+]]A*O7p4d90 (4 iRp.IT0A֗9QQL& @/+L""=!>|l4[`Xi%@$#˹R4-ڸLӴَ^{&r)/ӣcߏ]l+L6 OROȺrLx_:Nۻ, /4ӔBv{0 zaY`0ttt4;;+ieUݽŴ@ 4~ H M&Nw,˚?-R D>N7`0rё#NR TV02U&лʕzpp6;;'2? ܰǙ dCԃeYѨA C|8R)qe3*1"Rl- eV^vw~Ѹa{{;˯~c0 dܐ2Gtɐu*1Gz~|>?;;:S$&7 +f5yxR SF)s0DbgwW"{LO L)hK,{fvjǷprqqQ-)T}ӧRTTt]'D"Xz>/+Z p&P:D!ӡCr0 9EE+ ZʢJpsiA@*џ>B*PC9%p8'ELb%駟?N@ @͜GiqHG"Qf\M^zkQX0ZjBS\I%4#Bi3EmXSA"@ H&,fU(Ѩ|kkkaaB , K6o8'.?^ń\G7jvijghRT\1 'PS0L~59ŀQ=S܋a Y@v 1iHCfμ@ !UL*'`{{guuuvvח>}z=9@ @@Lb^$n4-]Mr,ˤJVrLi"{>=FLISj6wml@1bl$&(bX6j |^ V|1n;hd_x8 ,e9- 3twww0ommMObmE4Ԋ\fr /BY8%.T*n>ɶZmٳoy_H&EgHTn6^o8fBq JYʽ$m2 \nw(FK_+O(㟮Rhzdq IDATu?@BiY(&t:lOw@p`2YǕstt̤B$ǏW8s~b"lEZ-JrR,j$K+QlN I5"T= ^^^ylVτ~w_]]}ύFZe9gP8LzF>x<.Sp%PK^7l6 LJ ߄+O!JLSE~X$OZnRǚ&W333+_Lv: F1oAVӴ\J;^(p܍ME&m4%3e\q=x[<؛7N믿~<=|;TXLl6{QVKJ,jG18bӧHs~CG@}Rh)uhoG>/@F_wpp)89ŋSSv_TXK}>+ţoYNJʰ+KXL E:ϭ'M'K)3N3ajR\,y, Ir~]Q' RqZ4Db Ig< &p$st['HD,^,[VV{m0|շ~;1113z~~;t"˔F5M++V6ىI6er*bgg' rd)Mψ=J=={O%>/%I\L^A4ι Ba>\.]fo޼y||Fj5HUj|cssqrrzz*ֺnXO0p8Dy[gHMw2Դ8]51^PlDQR+ #vF!:`:???>+888c~ܜanyAA 1;ilvlQqɤ4AD&HF# j.S;eRh 3\ ;KKSSS*H,B6ROM)ϕ i=V^t`0c.{|,$v]OK!%#4-Kw|>v'!lfAq"pOQJD_R fR)h,(fӒ$~"C̀ r@^o4zanmm---OOOh 3~eeE:\S`(T.9r\XR7ʿJ u^xxx<77rrr*ji,5ժVR$%Oo*V4;hTp*ʽR$)nE(ONN-Y/硘^ǟs|XFn%u!RÐrZUV;Nn6fD&I&->UKxo#2skߙi;lGGSxp Z+ˋ/i~au0tl+!$)dIf=t]7t& ߼y)_;e&6Dx9-C6TPL\li9$ ggg*L|Tb{ M vߎػn}VKBqfonooaJ텅)ZZYTh:"F"x' Y**c%RLS1!n4nW֊Œi)B!(aX"$&e>md0埢4N V3܅D=!HTzxŒ V pc ^apUm#(OSD yDԉ'u)zn@Q3EOzNMv ,9!s4Z %C&%|H5bO†R`Y,!}r P(uݟ9ϓLnm{{;CT5A%itT*eI$UKƆU:V\lqL#1" #$v=A{xxTK_/9Stxif2B6# fY,#ѨԆ-..=uK=? 8c|~M{<^bdR!q͛aΥO@ @h4g89,`Z oZYP9LTmgvՋK*6ÇF iBSmnn;DBVaRUhRɤ y~vN1ɼ|mjeeU/SqZ;;@hvvveeZUk\.DptL?-6,Կa|ۏ?rHX#ȑ[Y4%AF1UF43 fVѵeYGGG !%4D" %Ga(rz~2e CE)*gQrۗOup4jZi^]]K )H^~%"Ѩ.jwU`<GG$Mz7|399977ψc;:R XEbrcYUce^T.#^ӈJ(zJyh-JM#W(rN!"wwwWSݎ 0P(:ȮjFUADHkl Dd EgYEXi8!0:'c].;;V XfRɤuX(PvcLAc^ 0in~wwo]dlGG+=T:x}>-\.`p{wh4Ru8dRVW~,T*L&L&)W+V&5@F8Dodspr!" q;^U΄J:lf׃`4vX)xgpAq@NL=GL6nwt]oiL@BD2I 69zJ8=i,u=A h4덆+`b蹻wppLڛү4``)3܂9f%M&wF\t:-򆅄+  'LZąa磄DfŃ!}%rejjjyy9L~p.'^:CRV\mD?i-:Yp,SQsifsu )/q3Jż FP(TkN{? 1lp&9zY.K-FB>4Mﯭo :$ rF9߼yss9% &M$͚#bd:CꭴD=u{<˕N3~W[[[@S_0SVY!-]?fhvH, Ӗ.tYdz-p*+ɤ- .8Nc'=QIH[N18lLϼssshfgg诿[E"}Z6u'uyyӖus{8Zv,˔>ELݏs]f~q+ _㠔98?J}R??n[o4FCxCI"Hce,6EQyf8nmm={OLLϠ?4{<^F+ tJu,KRh4b33Bommn8x|?8hl6X&/q3$me\D9]%ӹ0zjj -( P4xгKL9)g^%!xH4yiK;vp~Ns{wÇ7od,KF2 pr'Et 8q:GU$ q(Z% nW)b@\n@+W:mU՛nh4kz( #*!P uǠ$IU ( u@Q6ѶӬ_>==}?L \PנbRH'HB2 L6.//ɐW2GֈFzhyF^DDN/#1a A*qHJTQ5XJ`Lu N4j1[+)PzwT*͆hw~~~mm +!.+R ZfV& 98vC!u12rHŜd23eTj( nZ-6Xg֔He$v *ӉTr?XlzSfq9'mll...NOϼ|9_?fuuCr-CsXcB\߿t E~4`0 0՚>S$xLӓS%zi[__'pMr{tzfW!Gl5Z,cwO$JZm|>׳_.,,Ѭsp8./HFP U$i|R yd4#-]JYfc K8~)J%8vp$7獵0p 51CK- .NCBՕfZ^^!fuG1o27Gp`0xf#Rfvvvcc6ˌ@fH )$ ֚*_zDW.SCMz'SpbDèreiGn0$J$K2 yn; `X?{EP\@0AVq^_^^Ñf͛pȞ)'~9~ _#K "8vdQ@(PiNV}nL&'&a$x"=^aKJ:͇ Ø6R^l|C!JҲlL&m /A?uc~~AbJSD1nmmvE1=Q EPJȈiؓ[m|xx8885?99'&MGh@ mIP`fY1A&H 4MY_mBa!siLwG"ds A?uݰLnLԘ3/b,0`*Jρ`By5VoP-TJw!rYV6_u*E&=m[@DgCwFQ%wgkkkqqQNMM~p뺎ŸP(l1l-Yd"R \ࠉ ˁ@JR l62#/(q@UW*kzѬ.zw*5z$'j5f4M>%zay! 0D?dRf?F"/_~wprL ΋nP*S$' D333++B"ruAYjF*J'jFX`z=]j 9Ʈ\.]eWmBX,od LZ@|ΤeW*\.0?݋C+a1&LSAPK$ p=7=WvqqL?Ţee@ 'HkI aronnlTzj )`\#ral\*$@x21lzjaa!sRHzKQ4 躮I]2rxt:'&fV2\auâ92~ir D9^̡V Z32[n߿y&NPh?TEɸv0SA2@L&:htxxdbGJADlѨMEPLjht=t:ɤ 5p&axab[VCP !ajjjcccggG3R;t:29T1rj7VGHx<3xxhK[ JbZ,Pȗa81A 5G٪OCecQ>$QH*g܃ nmmmnnϿzh/pՕ4M ':Kώ ;p$IZF׍FRJ%mŃ!Bx)'ј=b[&Nby,Zp333iӧ[6DqihX,KVP߃DSqE"R)l~t}?Jz0M"-8̄p`0t:Eܵp85MK$ IDATFIVuz|>&''yBm6^@YI$"~ YB!z="k 8MOTF&F!5,QTh4Z__ǘLɳg|rc*B!v%DInNGh4d+Ԅv{{{kkH^׿CP|nIMcDu$ \ܬ{kkk_XX888ju0kZV##/L4-$pXbxC`PBi799I77o8(M3i3S890Ux|FcDBJQFƚd B2t:UZ:5*)a^/˥RYzYD"Ԯ R8"fز,zזJer)r+L4HR#lNjajjj\YIHM bi6I;h{d{{{iii~~assnw"SJ82D")mV1~^YY*{tttyy TJ2,JZT*jT ef$eYwww\LB@  1 "cI&'SY*$RM;BCb.OtZϟOOϜ|w`H(@g{(4Ѩ뽸J@@wppǻn.˹|^^+by2)zF\ܩv@Wx&&&ggg].׻w^rO$PllaN-?:zs<fZl˕S5d1 gdVn~4\q8J9i0 P CpGlZݷx< s d4\`φ̑ _^>SC[|Eb &iMx(1Ln<<<>>>߃e2Y034OLDF#򗿐Jݎ=ц$X,ڜV`K)eF{V[VF-xPȔmeJZ,,+u3F]ɆTeMgߛ$g|HGGG;;;+,Lxh4" z GZ\_̹ U>zP[,J./1ۃS4i5}rrrxh}ZDbZZZrZ^HTz"w?BcJ", 3|~Tj۷`ssoꫯ?>77I<]*Ҁ;I`ыbtX,GQV  VrRRb- %eLMɤ e=H0`j,K~M%e+Ajj O&Ek-_ rF"(O(1 BX(B\&Y??c.z۷h (rŋ:@S꛶$JN[a0*nѾc]1Ij]4n? `qqO?v ė%CG"Q{yuuzz"ilvvvss"` êeI|;֑q+َ1{2=xFǟN.G)7<#%˲hjek iReaX˲21UbYT>T",>jೠ"A#P 5xP(4U*zP(DѰ=/ȫ+2 #{~ٺl]$m)jyUr>)8Y(]y`eRR^otpxs{{wwW0cq TRYCsfripϞ={%C6 y(Ŵƈ,JٌT(s(jV&C DH,"H(P(%ܮ-`kȩŌNގVq-\xWRaeeRKr)ӄifPm?%XO]{\^^SI511իX,j{~Ѩ7J5B?ɫd2HU!U9IW/^SovP,t:-91PTbuCU-!ewL 3u1Ci%d0 R˻ZZ뛛Z d  k%3tyLƴnGVqy@"7|3ޢ}xx("}OӴh4:F@aZâ7l5[-7^jժҘb&eY>~/^x: ݗ ťqr8NNNOOOO''> /+++B˗/Ԡ g'W++˕bӽ4w]얭~p2d L*3f{O?ČL&!].Pn.O `"}Tj0^__7M s' WrT23`ہ:euxVn/GnX2R)I$ '_Jm2RThG7@ \I+g4" c0fjWH$JݲR\TeyFrіpttL/cFj âҜ"%MY ޿qqizzzaaqkk CA{~JT($9œQZ KEn<)Gj@eA*=Z3"%W<1147)F9TN;ә2IMaBӴ~~w K}nnn.|*4!x"]3d1Dhw_~M( b#]׻u#hQx0\˫+S։gC߿KE& =U%4e+t*W*FOS(MF%X$M2C,\.ƚ=< R&\.aGVN-*k PuHvXj6`\ ?=! JXwR*XAj2ibH\)ո/2sc2"{q:aH *H$ M$*qqAg>_hZNgϾV:a d~HR~rЌx"ȁ9==EiƇfRI&bM)LT& RG xbZht<)5-4Z=<<1njjr͛7L;N"2OlfLD^-*nl6ݞ`L&o`rWp cv87 (Pj!GY[[Kӿ&L&=u>_]l\fiO&CK'A MTјI/$4zGnjnæZTeOn EG"yjP<rñFG%$IL7n7 ޿ ǝ]{^hl4u% I ǒdrrRbzl6 zTѢX"'IZ!Ym63LCS7Đb J ?B&#+zv[a*N$ID_ 5jT? gy5677Fkyyٲ/_tJk$]2:#-SxrrTO Bv\j5NC*Q@tkSz~Rj*;;s8Q4"?cB!j çY2x0u2X3c)VMRsss X^~ݎQe\YVF~▙e> ֆ|>q8/ˡP,<]1j{ȝGEn?|PTfff;au8>>L!( ń[ <3De$dD1S<2qC nwLG"TgN'.qOP":@}j)Y% qSh}~qq||ի_LNNSXh4vH$kdNEPF,;9=]__X[[[[[2>IOMM/--bZOջ trR::VWr?7oLdG@)ss!HvC^TJRQѵfm1Me7~RԠ1P, ph]~?P4vP(ݪO^IDo_д%q 43M6/$GLZR&uc\YY)$[YYݗ͠hd\ϪB! "*U4MX!IFt V]* P s=R jZ]_\\_ Db?:>;,t ,iEdXrퟜvݛZf^Q4ykJё|K8 A>06n'e&xhnbvPRmll@1QtS |XHO0)"\d2<*\n=뫫h Acaa82h4^.lhE@8]WWKA kzIRD 駟~bQt 0oy^KDR)@3L2 HQG-oasOOOi99i8Z,Vzh4rLy"S?3a%FaYE4{)7tvjڏojoKښAq) NiRJ)_Aaat;I"cYJHY&QQ?ptwaPuĺ3'q 6m rfC`T2*b{>/!! >dRER&AsSGt9}> X0 ^m:S%@י:LE6d v;,9y|ggnŅHܝBc;{h,r/~i8w F"翭T^擓S&$鴕'''d)("Y*Xjt]>q& s|K4-vH}977J~wFS\@2)2L3rD͂(2[ cOygwoyyYԼz%K"T*ŅtrMNb󞛛?in >aS%J &O$-JNWตJ&ń<X,6ez,X*W*i岜e3D"\\\ɢﳳ3MVQ٬JjS+2C `i`SAYAJ/^~Ç[ ĘCK(fP,V*zQ,L3 P)M(a!]LQ* h>{qt\>RK2 Oc mt6z$ "B!"@l6ˠswwG7|3S<)AbZ&c9**eྎbDDx<@ENkc04-nFZ#{8,--9O~ ッmy/VW:ίJn,P[H.%|*c^e)c@(܂"Kͽ~zww7 QDtjXҹ*5b1.W`33/./_~jyd9 e\(H(vD͂Fu:zVABY<;s27;iN'aЃneY,LPTᔮqa*) HJj!}I^& LKAgV?$IҨ&&&(Vտ''>q)qI̓.EkWqL=&KJ0JXL7 ^/L% U??B}\+"*X݄:bh܁Tor=>sB|rf޽{UC(P1d,2{j'Я U.׋py1 Ϗ\`|~FeKa7X RI 1E5nf9;;wMMM-/#}&1ٙS=WWvL(//M+ZXX_z63{7Ķ HT{Ynɖ5g>&Õ$Eu7|oFخV= XL p4L(Rvij>w$,A*5@ <^lQɓ'V˗}p4vn8S)GUdg`>ndaRaF҇G`fE {2I(0)%/nRRKyOO quuEz'2 @Z Ee(i\XQ@d)I~*UTCGNG6m4~'+Fx<)ॽax?p %$#:PyV brLVJ:MY$EC^s.TuQ.1e2LFREVT*Z-.tPPNU:RbC{^j+3E7 =ݡOdfhzǏ#1igV,\"DHDq'''V`0ͮbXW2LAGd$Z{P0wvv~}sW4bȥSY|`ԡPl6l6l2I&.pK4ɴ7--J ,Q{#eۭr똞p jrIPVD"*:!mqupHL3lP(|>BY6Rb'*G:)bg_z{0OtEb IDAT YudpPZN#|v gR&Ll6 vgϟt8AUfz}_ J \Fp^v]ANYm3`XQ=H$|L\ԛ!ۍ`0?~bp8 j }O&-Wycm ){g$L&/_!h6[|^5J!dŽ;O^T,6-VV%$YQH&tP,z=[o4P3Ld;Bh4ɻw?Fj*2K D"x ]!TEbTɃ.ߴ%"KnEˌ&k⎆RCt{{ױXѣGOnQozL9;;3[,& O-kNxjf?Ns\(')Aˋ|Z__`Z.E_.M. BěH ̂Og0A Z7^rv7-S_PĥLQ47:^s%Vg `"L&$q#M1V+֖F)J7|'mϹ\V+nuB|2t:]DsPn.k#4niz"HPTSVrl67͈PseBH!o3A˻V|9ĸb/^j<{USViMZNGئ79%O03%HŤe2:NSuNFgV}D &j^.r)cF?x$xT`HLh 8 ~34wkk|777 .rjm>D$5LZӧkTqLF:緷Wd t:v)sHi~&10GS5IMuL?h{`ap:wQ,bEPTkǑhZ' |K豘\RK!ɋd[:SZsYA8 :@Jz kJꏫUUdLbn.6)b lfA+G|>ӹ&잌nKQ,_(T*3^kYtTJ&S T@V۷oc8a[[[.tNlo4%\$) z F2AHRI2 Πp|>aPT#UYnE4ʟ<( v3F@,y)YOzrrJ'_|駟^|9 !Icl7p^';ه`W4"X2m6S1 z^9D7ICNbvZ*NuD8 w ǏIR8Nd^&?< z^_1~lr|uuu{{wqq1L:kSFN2< RCB^*ˈy9.ĭP #Hz|L`6>/rYf37B租~ g:<T*MV;b4E3]L&ht8`OU  иOW.CZ~ǟy:) vlrmJ Sd2Jw:t:eVOYTlq+"_"$cMrIwUPdT2re , dLF4GurX,m$6E%rn'$7J@- t:ݎ4EiHgc#~\.e4 FϞѱ//@e&x<βy=u:A@%@T l&h8paeqCH(ByrrrB F'OД2bxVFWWwwWWWWsjdxpGܠHvwwoZsQ~VS9uz`0Q`0B]~d2CbZ C.X..VɤsJCJ| Nm6Oj4Lu]yr7P[VDZjuTJYmYPTOl]ŸVd\.F*5n7Gl6#ca3Vb #)=DjrUtUH%oz$Fٓ+hXVo.˝]Ҩvwwl٥%aR$/Sur⡪{$PqR1=_.wD%I\vԤ]R]L<n6q-/HjKŢhC<܌BH°h4D$4p-=z_?39Sb1%zTZZ-}$7NlNVu8qNt1FLu\*tȪAAG:fY,s\`|>߷~_a(]8M_Tv{>_oǏ?.*kGd2Y(78td7MlĦfbҶTBݑψ%dw^W-HF+ ,Iy,qvKUI^V+dbryd&^ǿdFT*m2Te([f=ub\׫zZ_\\,|v~'Np8v{z] h#4 Uh4lGF:N+FPN@QRp<0̗pKx<^/rL *Ve#8_T[|>OS|uVaӤbFVܲ` ?j4mK⠯J bJpX%L$5%:'k;ێqN*L" bKF5+Zw*b#xTyl.LWUh}?lmm񾳳L r"whUДB (a<ڴoW^.RY.ʧd+D\@"lk{:c"N&b"Vc:QR̜D t[fQf |weiZHOTFSD"`|}@d*GF [yѠe_jzP(tx!rǻ_z,P(RizDPTXFR]h[l`0(yv!YV5Fp}ommi4^d,fs|䬡@Y돎Զr޽{sZ7aVEiNgɤyy -V o(F<`9n7v '(SzjT撉+M$Cl@jz\a,չ\$"D{qZ,ϟ$ ٳgZd2lvi/PS]4.FcSzGkD^?cd1fVD- ]=9J%*`@騁1v|\G2WI$&:g7,GX42X#rv{<. TUvlb@fziZ]/:.{PDlz6Ct10xNxvrIWcbbz3Vn|Z믿L9Xq *J0\jx:^^^ݽ}v2ExbQw ;NpxzN&kЁ57һʕ R]ZR5YK@zvYa6!4bZ*+|>LM1,h4:Fw^+!eY5m90FRu}T:zX[*r𶞟OfY*3lX&tzޞ>}>|xssG&5JcQb?az^W|K$:0Fliɓ'NlVr9 F\NRb0ONNRѣG'''zϷ z]P(ur%hUVRVFc\\\\ Ie f`r))GW8B%:D*f\. M$jMrB ϓ$qFQөiZjB0&j?X./_}ssc2gzYZ F[ }vR#ܨ`~-l6pes4dn&xT`zfs^o2st2t2vq<(;(ʔFj8h47v{Nh4y<r ՙM&A?l:H$r~~~}sJm:|( y<o͆aoo-z={fX..V?swwqZ#:[nhKM; qw:]E1͢]vwܪVf U|!R{|Ϋj ŢL7j9"@ @z.T oUxG Bų٬}6iv2@cPlT:>>>>>>::`6c؋/y%tȧ2%3Em\tU:VT qkXG(X4TdJwt {?CPz@YZ_~RO$t-JhiV"ˏf?`)B i~NO g2f9L-4tO(L2tmN\.;22 ;x "{>YPxFl6B!(iQIyAOX3{;KjFGFz|>Gf!șFѣb/`Hz Lk a񦔨/*/qaݞf//?_^\`-bL2#L2Tet$6_{p6MdB7\^v+B!("ɓdIT  Uh2l4咩Hg31`_F_}?O 0&,tBz f b} R-H'P 2<d^GhX Fi"~ |@tPyF 0`AH A0l8 ThR퓈ٳgh_>ח xc2b!Ę( BPt8F"xOO z^)-)[[[=˯8f& t&v(;}6qH +搹b49ZD"A gé l;[DtFKM'O bH/|G,~/_~ѣ퓓V^ZHNRP d2Zm<, ڦ1J€r~7j1i~Ft^/H4^(܆!Hzs@mǡ0Z1} B,C-jm{C47\\֗|l6j߿ 5fjCwCr"j!S Dx< f.idr:./.`K*jP B-*j8WFRS;=y**5_@gZ˗ϟ?YV?|iw8)ys9q6c<[[[Dӧ`0hZ"luht䅊`!vD"`. <֤0;b; o8.}j5_ѻn˦h<o>n]&,;寫ZVR)ʼg63鶼Ns8]]];VMd_*..dfK>p䁚QjP%*ymn?jg) 9W,V(pd X,uT:<<<<<:>>ƌ?fw8v=jMybv³C_fmwFz]BSY{HĴ)jb\z=GOIAP>Pܯ#p3@iiڲX,޽{9D&=ÙjPl8D2~uttǭܼ :g϶wvv4^7 #Or[WWחWl F̎FF}|f5 $1e@P~KHfK$P=& JmԤp84˅a覝ݽ=Fc4cXVkZ~bh4!r}ן>}*k(OrJJQPS7 XNy0 xKKmPH̞}vv8m5P  "1ƽD2$"el烦P\KJLbXF66͛of m;+)ۍ/bh6nw8"Ufh2)=u6N3n Sٿrګ2b*.Ƕ{&PB.Ĺ33<ՊF`+ cߠ5*Qhr9!3ǩD*joO ߡFsxxxH j,7:TW^,?`0 bq)JJbT`j!ʼRDHh|d{c !>99h4|h4HD-SD?} VFL&gp|$U*$,iYh5/juX%PPKcC׮ 6u}@Rix1VUPnWD¤Ϋ帔I J IDAT`~B!e{/7o >ۇGm6 p|p8J@p{"omEhĖ[Rm2^x1/,^_mRx1&Ϻɮǿ?lFܭZ7t:v~{{wss$gX@I*mb: Bbh`QONN^z;ՀӠ.8GMj9ht`鈦Rx ` z'HIɅyjm<bi|)."Q<^6MsR NݻxwR(brݥRb$~) v;Gxi\.}u}}}=Og^-&2)/V*e7x"D"֤_j%L<{/{SV*~7od:mZ%!E*Z ktt 3nG}>҇C|O.1x2ᰣC_RDUd'HZTR&Xz]  xP/!#:x`HZ10 TI)om=%`t\>YTɤ?ZZj/_r3 #N( $ȜĂ:C?K<3 E 1FD!٣r~z=GNwvv9.ݽm^?L^?UNE !:%C-^vel&:|>L۝oJv?öLVN@*1,67QNi @nwxA@UBI&2Pp!m^V@ Jv||l7X]'T D:F$ p8sϪܕ򆌭Ɍ[0dz~~&PThQ'rϯ7@7C;zFT)J%!"2E-"z.f#ogg'L~Ay"h>gf[YQ'IVt:P5&#?I"Eb>::899!u`02c@݅d2fsBr JZ^ZljZh/0HR P(1H0>fbvj5χeXd15?}i4WUe*L<)l6 ~X,b26M䤩әgmN15loS74 Rl6t:XK&R^C˂zUNa薰ZVk4=Z K%|>jF|>˫z-~lfbqgXZ-OP'd`x2V,NfxiF0g:|j>_q@BV ȯD"J ^ޗ_~bkkkwwOFb^,Պ uEw*Ff 1Ho6[zj5g`gF.`0Z./ 4uڪ8iHk"P|"ƩGk4H$>}Ll? jZhǺ̸߽\.3zz}>_ H&AVs­6(C*]؂&ckP1!%MҦj-K.jF8 =v2!̔r+|>O_ |;===<qO>u?=:ڶ(2!)idMEj\qd69ǪSѐHum„WWWd:m;8( Ҁ=}"`@|K  !Jaw ù|PCPp8LH 򔩩!`#Hs\Xl6[B9ν>V5M6- +U?z}vHzE R4U R?)YXS= ~-ZX WPt:पO"zZ͟Hdz&F[('Oazٙ%Kh z5/r9fPH$>dJFp8^|y}}ÙEYёHP}^U*hzHLr YkyyYzs|* lTQ,?,ҮFQiyV0>ǪFndAeW@ 7o zn/ESm1*VVE`@ pzz {h4W5Tєt"ėK: YBŝNp6h0u{{u@7|d2L[x09Z!owF,4~yyyZ|fx^/*S\HT&i~pF#dLX,qmwf߁@0痗WRi&*.Jp(4Z'ҳg#j /\|ŅZ#pp8{rrrttV$ R`0dۙ|=zv￿z`Lf('wv^=i˗`[-QL,)JeB,#wjl E*"?2D)L$v[˗/x2ڝ$2FS^jF^4|0hV{ߟN.BQ "ik񥸿lޘL& իtvՓH$7;Y:jC3B!yepYJX9q1bl6W_m0B)WLoG2Os@Jٙ #lOj?u:]\yMfQ B`pe%I./w*YsP(d0F/ˀ*(]ZB_T*4P,GA.[u[~~bX7g PB$A#pFb1Άl~ 8Ƃ4B&|~ssX.em%(K kKKd=,v2RϞm&ɧO^zn7dX8T%g Al6nUD:URw3O?c^O3$p:~</+}U[hdp>1g<}1s TaV7evnp\.K8M FKt̲*tkkv777#͆etDW "Od2Y5@5[-T1`"aȾ|h5EK:zQIWW_d$Ӛ*ġR,&ץ4!5ڐمJ[IIx7|}}{z7s\2DD͘7\AcbjyZ:C?@Ԯ&XjCP(Vd]|@  ]U*|`4UXV~5IĤHL* t'%H7od|x~*[<Ʉj^p8j}'a4^YH\.Qo[j"#Z6P(/xn2"Hp,=t(mhTŠe!~|tn7[\p^Zxx<~{{klv{#2_#M<^hzbEhp8P$zSFfu:j R _VEABAzO?tZc9 +^x #,K jbPGZ/D=j??KǪ'Jn?j:`0X,S+\, W !H!bx\I6{0;X,vs [p=Pu BEL|>t8fpG!١Cv31;NxX`<A jt:D~Z`b":5E&?\]_/PZ L%hdICFL'S 5MP޿e0JeȎh,d B^[[Nx ( D"Ȱ  ZD*j.Wu2iriR Z5I$InVxd2}|O&J  LD5u\6ЖD Q2HgR1kdD6tVl>9=LJG_~ap,JTc\dĸtpw0GT:NRtPnCO䦫?[ ΝlX&U^{|o%(#n"a@l0 R)g4m6[,k6XE2 &Bٓd8 CA v_ VMRp42RIrǑ`0D(RCXk6cOt:\Qbg2''/`[dT-LFmdvh4̀U>$ ZM&p8W T|>_`r "7L4xBh4$^U}X,Rp8L ֳ3,K}>"Dx۷>\.5ZIJn`YeJEԛĨ-q='Swݤ:㽽r?//.aTJPl63 9Z tbxEUwPPƒD4r z}~)2j,%Jtl6fw8P+eBx"P !q EQt>$^vKv{8eD?t:fV=8hNnVcGH$rg".C {,y;`nw'>zCL5"M5q S9tl\ C#cfk '< Wl&2@J)rwbAd2S1/HLiY۝NJdxh@{lAq,S!r㏯_Mتt>b:L&|ΈiDGdg䎗NjM & JX#Detoowoog~Bhjxrs z盛nl6NcjJ}A&X,vrrv{g݈`0 4=4y}`0HHpXL$!DvfA!/zm6њ./fM&*T$2әR'*H$JEd2:?b7NUL"H&U<*d\Wit 9jk:D̤wE9iXĄ-.Ad6++J..cl49F,cx߿+ŏϟ{׌YYJλr\V+r"M:%?J%.v[%7`5dd~c,&*|Nd"Vzv6Ͽc~9rVl6J7 fp$]h !7l[r#у(d2}۷áDJ$8C%3f|>Du}rrp8R'L|Iˁlȁ@{}&dG{{{FnWf?99e`KprrՋp$"nG>FD"76M%)2֤ߦ$؊b*O@ fYt#PV}de8㏫pJ 借 ߰:t [; fgzf}yIB)9Od=P|@ xdJ/%+6L{h===Ih0@*$vAu:hQHMb*0ptE  Ẁa 'Ihrdy+ MX,yppxxxp9<>N1W_tlFap8D%I#RdcÏhQ ʯp8"hD$+xl2̫A\g @urr‰qzz I J䖴79Nr{<. I42fxº%G1@J5eR-|vwwwwŞ 0rRI*CZnBvj4[6]k*nxs7& p\^__/Kma,jǃpGڀeMH,,۰:| ޿|. NR݈WZ8 120[6WH2?!FOF)#T:ڳ`0ȸL >t9A=Rԇnoo:r9T*i3 v^WB1sWJao^#T ͙vrrcEK/2;NX*S9@we60 f<?;  ]l&ETJd:'b}lsCryC%z=B f*a0n:l6[\&=,B]\i~pyb@$qx<&ΦR.$>J Y$'ggg׿iX3gYW& c +F&8 ߕ r8cq3Z-$jD="h5ggFsrrJ%?ϝ`0ϟ?M;ifw2%tXVl^_>MfXsOFd2>o1vFE>X7 82%kN/ Xg,^l,8fL}Kd ir8¶;V8MMa'.Aww/^z$oh6 1{Zc5NHaE{{{:nw8\*pd2TAx"A4+j,ZNOOMf3].H)4EGGZt5|VhPl +Uq@\.*nS<"_|I?/QGәx"F% l6Lz }t:P(|mђ#ڮ̥VK>t N BpU=[;72>GGG;; j~fv;Y~82R&͡atVZM8Χ"(j4$R[[[X￿FV/˅O@P"~?HjZᨴoƬ-qÁ`'[wdͶ<{{{Op(~e$888j'''F9#d.Yɠl6xB2JCO4(QVqO2Ib\.WrL) :`06@{,ج_Q~ УѨ^onNgXW+Q%p:b:??vZ(::/X,FA=n7aP@8_qC*"T/Z`[s\VWAo| ҕ`0 ΢h VkpXblw:]bf΍ xDeU$U>;!nӧ_z&UVU`<(5َģRS׹^W"OP(nFl6'd& >ǽ~pV3+'c'8.`:>F`P bc d./ B8n;//nooVj^,-d6;_Ъ$Ѝ-%ocR~ģ#ÁX&Mu|C}rzj0ҕ\y6E侼YFc4XM&6Fx2![hJ Y3 2k/t:X_7-Nwvf CtAp8N F-Z'P8>tTUmP O6^ {u`0Eҙ +ۣ\.Zח<VP(ПiLJȮh[p^8٬,i\.@te&t:MPK*{f%!CPj4\DB6V1 'bggpy?0NaRALۢpVUfJ(n7a3bCPzT|:@4H$l6 '''WWx2銦a#+w&qõe;ftno>LAaCy 'RQ)Z@Fl6^^\b1Dgg6sfeCH&.KfeaO@@bVY EyOrKFq~~\.W/ɗ_~`4n71f3Vod2"=$.fsa{{h$zsgzHc8m+OOO j^h6(s[:ń!˜Y6&X,}y?@EL&q G"V6!PO|}rl}5vJQ4o 8x0T\:K.bb777je}z6 ["[|6;f 4/ތ 2Û{)]@fC\?~u<}pt:D2 c]jh`c4F&q8l}y'/4uL0Һ`C#hȓux<(|||l `^t:p6;zdj!$HNy'*o5z 5p8ݶ(Lb")[(kd2G`Xt=cTE9L& #_X,)C:x@a8_ j54B.fӧϞm Jrss^_NttKrFa. * "SDb@ Vy&V԰5}IO{&?eP^Që#OfIi2DD8Yv!:ɱZV,\"$5 qJ?|^Y;ᅠP-P6xl2X|ur[uw}s^_ VU z1҂ n8T~V jLgϞ@ c04C^Y#x#^)aHTkV_.04ʝdA0^X,/VW^fcZ(OOOv -.px< C$u^!Vh4E$nBa_"|>?d K+ey-ekc=h4],jJdRx\.7.Ύ,aqƥR J&)z1L4”_`0\. qI:'e+D$-\jetM- v^c*!v(juD$I{Fl %R%VUEvݖK$K6q{9%,|;wfg1g44S:Dv(6N)D{^f20"(t9Cti&c'Jl do)mb%*xHhi6DP(ôMt2b;fXP9)Jtt v'92h*W(bZI</ xkZ6x<`CcuLlzgff\fRtf2Yk0π9 Et|>tryaa*\.W& ۍqfu),ymdl-J+K߀P2`bb+ ͖B Ep@Ztdh|VAulcӀ=#VmXa+UucŸLm1 B M&^MX0 C jer:88áAk3;;{ҥ+W30Մuq[%N:xjV. Bp=]N)`|S7-F=;8FFh&lWV D!Hl,x&XR&HMLw cK +`;nO8TJeii^3ӧO:/  =/8'q+r9T̈V Ȩq33(y<jZ37Y.`(  ]v8dfYLk||@"BVT`9h0h#@)Dmf~*62ц&Ftj:W*BH&1!iHeLc*q8Gce&vdeee{gT.tj0vEX,=^/d:h%o5t UI0bTIRa.Fp(Z,9(Q?ZgϞz*X>`uxsuIIn@MF׍Kf`jdr:]P(LZh4P@ BRji Zlw!xl(d2n'@P(W"68xKjoiݴSb0, &dDJ$G'''ѲBek$NOO9p 0RzL(OON;|:NRknc)PGep8f3Y[QVT8&5r(XΉZ& P%Cr 'l6W,F% U  #@a7-^VM&j^/,,hu:L8iDhM&Q.ܩ|>_՛r^FVU"LMM.%*n"$G>g⌣[w%˕*4 vpX,j =@[[lr$rd Dt+nP>^\.X,a\XJ+@"! ChhH $fYA.@L:`զP(B !⡡a@\XuVP@zxVl6ku:$h4ES:Ig28N +@xm="bqFn[m6(JνA,v F0)KMӑhGkaW+p/--Akqq1?_K2 ๋n23c\;O#&TL&Vb"$4K eriZ@"U*u0|&,i/[k/helsZ-###' 8q[,2[W uuu:uǎ;~O8qĉӧO#1zLz= 0"yA2XV4VvL&[T9׋%Ą@ pv$pTGtSp[4dp+B=8`" "vDhvvvbbdBesp8qXFc. mϨGnCPrpX۫ͥRD"hdc8T*=l@G9LbU:g| :NT(|>I &NӹD0[ӁUc:pVj 0s?''' HIo=SO>| i$K(2Ϡ](ࣨh42DimbD"1^/%zOb kt*twwwtt#ڎ;vرG9rÇ~_{:tG9v؉'9O9rOA\Ȳ& v;XXāļJJ:@,LH$ `|fY){--^ȸh bA ajq>XbB͛7WWWV N Bv,$06f2BP+*f2aWGaUeG ݔ @8` jBD@k0-%u&)jR\* b&N"hd8zFQ0BH&D6@* "gd7kX]__:,$ G"D^42l&M&Sxm6;9"e7QC `@n,.;Kjd::: 4@Xt9O&!5/G( ?~ѣC:tqG>~SOH9rѣǎ;uӧQ#9a$-Vm||ԩSSSS@*i4v#xZJ% r܁CK J$`0:(r9\h(O5R.?1ae&FFFpOMm6bSoi!J =Q;w6 tˀ6BBfҘ>^(l7` x<:L tUD5EܭVJS~Ŕ,66hRspHL1s8. 8b1dl6[$d2Zmqqqaaa~~~aah~ b.OәL0)$D"K>.!gZ C.&ٶnxoG T*h6Szؾ D&4#\.LdDJV[9{P( :u }8ӧO8q_(~Q=uT[[[{{;UhXa IDATzp\[C$A8|N7(1(4 Jb apz^(񱱱q+nX"ag41FPӪx"zÇӄG xd¶, ȑ g3g2ٹF0)L! bX6- sssKKK %Iݮh8v DO>vةSm===G,`rNp8CC CE'X*T*DZxs.GD^q9xBR|ddD$l6 ,> jd2Š'@,X6Drr5gϮ4}nwdaJUO4,MbK뢛i.>~m;`Fs\V+JjuqqP+JX ;HWL#=\f]p%SSSD|ceeemm XS\%DJ9#^gST>ѓ`E, /5x}ިTz}uuU*utttuu3L.'H&\& .]]DbH(с=zٺkll td\dT./..+411O, %JJp:ub  ™EXę>8xF*rFQT6E ۵n@`"`-&iw8y\(nQ 8I=0Xn;Njr\.qR:&K)-bT1i=\.;%hm@3˅-X~łf6 {NQfX`.qt GhNW4KRjh,..-/4 |PJr\*/Q +XW78;:Hqb(P~v+nW r @!SS,(0`F 7S=vP(ΒjÇLߣGb3444111==3; r`08@ XZZZ]] hGFFbV ;Lz>Td`f XMC`Z(da'%Ei㉄66s Tdu?<<,Hr b* Wi5j $F# | k.]~xSO>|d2ѠMJ^ˍOh-rRuuub`0]Nj1z~rrdxDOG=~x[[TZ-bş\l6yqOOo{{{[[';F΋y&x(FuWWWww SSd 7ER)n1vD01%«NNmf#G@@qY TZ6 y>٢VCCC:;;Rn-ޠ-b1+E^ZkzzFREFc~aaZfT: H1mi e+(9N+հOrG0\zzٳ/co}Mr{<iBOXVkM\Xz`Ng@}}'5XT*T En~z\j,V+4zPi#eZT'tiZZm(fs 0d*: i~w xp*N rZ=F{{{O>ۋ[b 'O;v 2~X3)0r9fff[(alN@ር Xw>}ȿ9`WC,(,//L&EO$d2{h4bp82Ab?'aT =AɺEpFve2RX,C CrB?zFј/KT:%A]zvj ހ$+|pZ.7pF 6Xz@4=Wk5lb "Xl  uZ:Ct,~EU*5*$ d/B&HҒ5:ٌ 6"> P*DZh:28~8nM6}|wCnfJVL*J^_9{ad2ᧀ:fafJ0?Ȭhd15ryrbyt'''e2Tj5dpkqyz3fQg1^;NѨP(\ZQZ]. LfX_RP j!TJśDZM"c b1G"?\.5QBa*V"j4۝L&bc~rRM w&CyR`y neJR$ j#&s|u2L,)? jhJ@T*lfBe1p8A 6jZ5͙اNB+ۡ#G &''ggJnwKgϮ^pqmWlBnn^k ލW._^xqmurh4 Ra'Z\V].w\^^Yo6hR!X7bx%ie.A.|#3uxwwOook0M1D&BFsT|>TJ %~ @A* !V @"Ѩ6 2*,--/{^PJ\Ak)~A)'*+Rl6Ñ\$e)40n4珍1~/BGA=s 51==#HM&Ft^k6.\Xti}c#9ws荍W7.]zniiy~~anQ(Ѹt8ZN(r8㵷?~ǟ*M}Ѷ6HT|DT*1Cxqȑ#4 ~B|".X6NgZ].7JӧOOMy7X,r<X::d=78=Oh R*̝_"\rem >l`!‘}[-hTTp|e2DZ='><ORl60H"Tossj\T*؜bPM/v)SJH$B 'ټU(ɔǥ`p:]Ak1?$Ф j5`ffFTbĊA~(rWL&\>f8qG2$~U*UN+T*Յ/^rڵ-{{7o"rq}?r>­xymmٹyXmmm>|,lD"%04B`0M)2:DӇB! ɤԮd"k}Z-$$"j5@"h4dr@p'''C7ϟNL<PZn7=j4- YtvP( ᄀɊK֝/hdbD4=~ϖ׷wvv@D. ɖ8m G[wn޼M8nڹvmkmJVO~@7DqV__ |kdXB.W4M&BcQl/ RIO:NX̀|"`@R(D 8بLMaD>\n o6kZT@' Eb0vxxXn\6@6%5mZidBQ_!'gT:{bV+Jb1HD"Q$P :N6"m i5l1~rLf%őp&&R\zٳ]]x"tCaߏYT&ő)pPH*i4(q:u 4,h.`ѓvlQ`~GvvvBI`0Br;;{ȯ;w޽ݻ޽矿^x /ܻ_w ׋/륗ZWIex}r½{g}έ[ww_Z[hg2Y&X,VOOω'hb*7rbDB;7*<4;sB\d / :AʱqvҥKPkJ&N -*`.rҞqڇ En:62 K$X,a|>栒ᯎd6cMFcJqDa ZF.T: 0 ]/,E QzXJۀ kbpp C Tf2^_*qqiiih̡.Km@PRcn6VVVbX 9ZzfZm6b 8h4ڪi-zVcY.TA:::zbr:zhWW1* c$-]X_ۻA}{\?ϿT+E"?sϽ߽۷޼y{o3\xRL&SS"LLL?~~tLMM} ž NRȡT*MtkniJlANPH$n qP\jZ6Kҩt:x}PzDo4X\9]s|7l6#@ * lHhc)*p"1Z e2YX "e7EZRh4Jr.Qa-(xMxgΜZ}\L Ū`Bp ! e{h4P}|FGl&h JO Μ6T*Z,eQzzz8NV\)NccS$r :HD(bTGT*iЊBY"A$I+ڞP@Ahf2x"ADHUD B>T.GGGnѣ?TD;vfk4ZW*UΞ=wo߾DKR/",_~W^y^{^{'?_O~fE>/~ӟ_?yW^yZ|߿"w+{/7 td2s3gδ| t__b#L,-Bt0ӌv`#k2'X#ldoo`## &)J/3X=0 eD` ~}c#FHT(f h4ju:NT*V+H\DZE 'G*68KaL#'X,FDjܹWnDDP½{^D6}W_ pE" _LJ~2.+7T*nP@C `l>Bx~9wLv x@D+ F2ny@# /mt5Z-R8œ``d2^TJ$hHY›|h,O`[B懨|GTPV9 PIXcTϡF^j>-q[CG(NLL駟>~xOO9R`Vtiڵ7oD{ F{Wp_}'^ɕH$ a"-.$\Gr."޽x9A]v…z'F#`x?RpAg2BpPXZZjz[cń7K$l4K@/X6hX<jbv.l 3Vd"(,,,VU |\.mw dH$wwWV` `7 FhU &SvfEZl6fJ%TU;O$hjmhhFc6p:0$@ 텅L&ǡg-F <.R(aT*D!w9xНNj_$2voAd<D,NY^$~RlvݡP8H1995hvL&S|bt܅׷nܸE}>xڃ!Pi?o[ozyw}w{Z?~z<ė{{?xy=o[(I?`{֭;׮mFFizzG^C`0D"l!fפСUCdxm6^o@Z6,PˆxGM DY[l(jJI=1;e,2gW^v=h ;1T(1u`At:7#0B$7 a̜FGǦ.+ w6H{L&5jrNddrՄ<yJRI͠V5Nh FQ"X'fn%+~\cmέ[1K~Q.Ӆ2+7и.pkٖq>xC\Q}wz9)_{^{U_w>`{{WX,n0lNww7KO<ԛbMr|>Fhry6g)t`;|>iA~bl! z-N';;;<\>!UaQrQ@li' j$ MQRŪBPF4![,ZahrʹsfS5\::K"' i#L!S1,9mA I@@n(J9ER BV+ \$8*RCp)fOivK˳P['tg) ?P7y2Xϒ'?yiw%E"-aKA~A>s{}Xxw}w$FU@+~j;;;{W9N__ɓO_ߞ)B2$mPe2\P(qD#nIRoxCt:D>D"hcy V\.e$z<٢P(& |+WdsL&FmttCu4Zd|>?@B|B=55h|i"́$D-VI6ņQ{~wix/} jCBY:@m1n"r .^ h7yt:&'Z5[GOo)), @#-hLZFĹXՌTBL&FݐVuD1}#D"N\.O$xq  Qo;q__?1b87ZV*'UT$ #Y`,a`76ƌ'7ol4d*t$lHՏZtv{b R#qdEc&q&96 }UhꢌB0$A郤;118f>b oR(\"R%J6L2&zroZ=09Lz<NrGFOD9rcllL&Fc~mk[{{j|tpkwwo}R*SO_lN:3<< $|>r5|w:ytt`6:%Z&qK K$h`b>6PҬMD/NHQuBm2Hin&WT\n~٘TB!rx-\g|ٯ~O?3?\ܨ[o[oc-ErO~ / R0Z[nyE\.OXm68K<:@xY~0&Z\h>xH'/["W~+, GGB|_x_UF&aKjksԨZfY޽paP(:NcsCǎkoop8$HJH$'ҙ L&Kv|.5UT2hMt+ccLmhxŋkl6N'Iz`:zJ pBxn`bE7&U,KTflVkr)ܤCmH:NժTj:Bd`r_s;a"n~`H$P:$ @Lۊ.&)+xJ2LA?܈;`m(QL& 7#0ckw8qE3^od2++gvnݺCjJ0*WT| \RbT/E}$`[F"s~Gs.9no!x W_~{ zg E?wikk0j->Jl50vH nwRCEB!`LK ^QќЊf0 (1L`JX|lTo4!Jh<`X,P#rȀ@fRX,l6F""700d2%r`CɱT*XEto2JX%@=@/^xT* nC2 K!6B˱gֽ^/˛R(`'xiBxw/BIt(i^PX,BСLZF W_ޅ8͛[+??/˯wݿۿ_|p/rwW˯>s\?0W5_~zDMRtrL5^dw=P8´\8j2-`X|>g@ CEP@  \Aoi,+nw~֜1H RJ4 Bpr4)FL8CLY\.Sv(k rJLbAB|9N^.L& tF#3G88 H$S)L!rT*T@suz16E?Ƙ,~$d2׋yGrq4>GЌB|H$8h4[ÇOng2j&/,,]^!L0˜>R4zt~G}'O~DKְ//AWk\\$lɷpߒEygG(?$/2F%5"Lu[(m6,+鎎6-C H(VN? F_KvĚ ׋$JQ_;̱1@P./]9w4h鵌r=DmRUTU D('&&4M,dSZ6LEQ3 *a;33ɤ2h-#K'Ji(vع+ DԸ!!.VR BP|lᡙJh ̙!p|*:;;'&&t:}2Z]]~}[S*-. :ɹX<|!L!rє8&1IsI}b_Hh&p eNA&>{v5˛6ѭ?y$h0 a[J"F۪RY*Ng20gHPM0l$DrH$Bg4c1<7SJ #+[[;{{f /#Svd#i׿ 2nk~%?|7~7|7|ӟKd}s3q E_~ U/_b\M6SuVw>7n^Q*UVdGGÇO< m>Q?JjZRtR:!lppfbNgw8l6SP(1v}Cr zbx>_(\.LEcD2JD"ZG88 0E[bppAcX \cnnT* E;N*|K<1<>>.ˣ(,i "i8 ?BGQr=H$hC O?t[[JN$Ν!9aHܺ"2FTϹ%-.fRc)̞ 1GbTH"T aF6|Kkf x ɷ3ٜlx"-o! D" / \ZpurYCtC•Re0)Gk6`}W*U2rFP+'F0 2Vet  UF;z,$a RFŒH$>X,BZEH$FQH$R9I*jsssyy{Hv`f"H-D{6S(low8 u1QK 3rÑH__)}=^###k9rHl6wUЀ{; tWԌ O>*N HE_Kjew"o;??~"_-/ }' _ Ě̽Hn&{dHIzH|]~ŗ_xݻ---{<^P888H,pvUTPP(.4 > [6?$Á[Mղlc[s1IDr\Oy+W6<X,x|6VNg @x(`x xL\ EL6D?p_aN& 9rL&ZMPz~ёH$Rt&W8$IFf[r5 e4JN+JX,b <ZeJ%A`f||z|}}}RΟOӉDEKiZHN2:%h a IDAT^~ gxnwh4HXXYm6qalT*WݞJ\0L&/** Z&qܳ\.|'!~!Q67߿qs1 !_{בYBwdK&S_ͷ~KbD.!iG"|Ak%1Br.FZ~-#9d3KP[AzhظZ|~D200I\ZvK%}JU*+ Zl. l6 r!؁{`0j:SzÑ`zz,󛛛J%Ni `6'eM&!qf &3F1(Z&IV isZ#G0("f'Zl6kzR)њv4`00Jrl6J|>jvDp9tRiXFhKNZB 2? 8@Izꩧ:b@#Uɓ'H$R?P]xR ;;{ o[@ w._(KFibbH>vXww76LBAPZG"jZx>|,VJB-@ф;r\.M9F"Q.J!ץV d ]HmCYOU` 9s9z}nqqR!xW*h'&&Ϝ9u'HRrazuh#V2$Ӑ- !@[]+,4V  =0 q"& \ #>Z PLD'O x_֪jV;{@D>Rh4˥nj`t 1,!OD!AxdYT:OD"t:v{Y({}@GI X,Je~97׀I<D^D*NfddB!2NIFfR9dż^\.p8\.h4(Du:YIByצ#fFcp!oj:ɹ\BtVA ZB!F" F~GG'Odd2u5|4Homlm<̵stGC?Յիn/Jx<B`-u6/ |~P jE`0LN+kک)h#^__=AX=%]w JA8-ՓS|[H4 Uu x PCCY%}>XDXV3T*p80Sk4ͅL6a -t/{_eak-!ɞL&35d2*[]_]@؊UŰ(z{z}ys9"By=K0΢@>n>`0" D<I<)̓f=hOo 47bd:,YLεkްa`AEsYVt}ǯ==KW=KB%ġCLe/Aoоλѣǎ=vlttt}>?ĉ<ܟ||pcxx̉Cokկez 1"Oڵ|wعqn[ܢV Xk̘1 RT*jKKKѨʪ()ldjmQh0!jrcIo-hqJ0|ξNnDՉaWXd2^fٲ  c,fُ8]oQRT&V22FWFdR!Uz<ZE:ܞ$I 6D4td2_XXH /vKJJFckkbɒewݵz͚u֭ 7nٸq-l۶cdd˗ ~d֎QW> IKel@Bmni=vltttCq=y)9G?sss칳gϞ={:w<^9s3gk:u/Ō=z ȑUλ9f@8@_&9 N4Lе;ݺuwt֛t6 2d2z|>CAmCT.W@CI#oMqQr<JYGTn_?DP' WZʐ:EFΆ޹?Y(]3LFQr;NW%td3JALrn-ai [``nӅ =2 Zn#uuuuvvvttd2p'x&4PH9兗e+6l؄p@kn5c#s='.f]СCM>1A ؞>@ܙ3g2w8?s8룏OԩS4'Bq?vlc#yZj//r3܀ӘXHôaæZp8ʺ'joٲeCCC"(''[olhhillJe,P"Kӡ;Q6~2D͑hjT*-bb 2I26D jV͟?:;;3xa ;K=IR.t1I)RC!FKhd}Œ?Fc~JB"݁@ J ,]Tp*Q\YYYPP,O>T'+U3f]ua]uIܨpх$fCoRUsQ0d)^hg-7r1-,lpaK571|Pxy[o&̢xN_o?~90id_Wd2Vk#J7xdΛ7 (W+L!&H4 y^݁n4$LgnP( BL& !p(Ng4@5bw:Xg6L&SJ”C^an"r&:Ɏ"H &?|8Y566^:Jb@0u*Q$x<ܟyҟu .|>B~̙3g/ɓ'O8~;6JW*nyFm~7 Ȁ &Y>~ 0alܸiѢhL,OêlMM---r9Fx .AxZVa *JPh2"H(t:BCŭ cR ϡh4$yy]4MM?ȠaF12QVSXd2!Abҥî.t0pmll4tܱX'!Á\Dj/,H$^hd%/kmm5LeeeJ|=3gNyyEc;زe+,9O>T PqhTx[ne[d_[{' ؞?,>['kv5J#1zk쪱S}0_z ,p7'0iP>PQwعfͺp8 G&/))iJ=o2]dȈ`;w.㫪RNC@Wkkk0T(U ;k0bP gx' j]NU 5[Θi|e… 5wrx8e JSsO:uYcccUSc [o5f lɚZl/ wǎ[nU AX2^Kr9X rbD0LvMd:2LooZY+ԁ)@ rL!Tթ ZhrXʲ ?0P5 6JQ"J¡ bY:BRr&!Uy9tKKK|>xհ1H$UUήa?lZN +V` Ecm؈(r| X<Յ?f&љH$)Q`K:,䬃̙3Ι3ٵiӦ#>(<Mӟ>gc?yy6lH xe$}7Gy*.~h)EsΝ;WBݧ~?˟}9>C3?_e #>ŠBS0IcfW_g{wEcyk c;\LFSIItpP*U~?js80¤^XP(A\.쳼^(B,wi٤R@Pf:N+h-]UU]]ͯ"ȳ\E800F Iz=i9L&cS3l41HDu .BCсk@ss3p82>a'_Ǜo^]/~y?xb/>@6Xk;ώ?Yf]__s̙RW]h@chh(bHC#@,JJFhlz^X[[[[T*n7NBlf$tbv&ht T&Dk(ւ+**A,[ZZX,Fd2iZvj|̚7h4 @ZCCíH$3 dh2-$ɞŋZ]nnnaaaUUT*hC].`Dv'+zoeFqqZ({ tMZ\ZfWWə* Z%%%"\hFD񅛛3L___SSSTZXXh̢"\jThBNjd;cz&$h* ĩP2;ia,zJ  )%[,Du'BRqq1WTuuu Xdi4 ^ś`X! |vv{AVT[[*[&WI:M'Pz{ܹsMv7_O㕨Td2|MfF_&"+VUU99 9 ⍂`"Xpt<77 BR? N&bX$bB^R)|IcXl6x}>? X,A t u7`"LDX* BFFX</K!m4^v0D8>@$CX7 ju:IfZf'?pԨv\K.}xo//O==x=ȞGݳg8Pfͺܹ۶m'N3ye!"tt%2e u?sWOQk땉+Wj篜k_~_~W_]zʕp7uu)({šv:qi&ițolҥ8KhORCP"J2k/ 87oPPLNy馛pJyjp` s'qo.d |d2P`2#($vDDdrN IDAT6#{Z!/Xϟɂb^YYNO$`AvZV5ld tnV>dZbqUUJ vh,2C!5B4i2N====#g2EEEs`P_^JdEo^^D"x<==+WnI"P$Q}}3W^,ERy]tG^e NL/^$ŧ~*s;Y;3% xY˟]|6kX24-܋q,fa˸:&,1ӈ^ 30\JLUy -niJrVTrbD:s8 PΛ_PPPTT@ @8=U*ÑR 9NۭjTXW@0(ҍ6"^hd29>C )hTEC9,8wuuZpfHRVk|1F fT0icZvN9j& xzd2kaI[` Hr8n.F ;w޼:^vk|?6S`XO4!YT#g*-#Ǐx jlej.4Ni \;O#ҧ>\50s˗/_`̝Ag||Eii*Â4*4D!LSÔ&D*j:R)CZR Vf0//j @ Hi2 Ѐ7Jft:JƊMG 9ӟT8zށ.ILfX"x׫ϯ #+WC!wouw^:~߳>3O< 'ػwSO=4=woɽbZ˽ =w=~ìc._hZ'NUn7|oo?|y_ym7`*^Ba j?1 ls?019ib^B(߿FD4Hf_[[fRјLf 31hAƠO  kkku:]$d2d d*F]ĸ]*].7󅴨ddD͙3'77T(%<6Oq^f-.\2 /Rѥ2b _~el[?[e[[T+]5> ' Gh9:/x蜰~=xJ;wع~e˖555+J8xL.,, n#D{ppphh8_y6/ J`0 RX,6LHz#tF`0WN4J#OT!u -ia ,X,͍&Y7yZPj@{)9p[%]@ACwwOKKK*f&FfG‹T*Ũ?K" wI$%Ǫf78"eК,Ozȑ掍AT9s) UY3Y(݉rx-r_0; `1\ꪩҬfKgϜe;>)΁&?|x覄CLza11yzŋ455dr7s>}:ZdFԢE/^l4g͚ 0R3D5551.0Ԃhzhh0l6oİ;|>*H*++lK0$ntUF?pn:h4b獋k]g0qC+ɤR)KRBIAN,[&ʤ2 AH&{zz 7jnnz^$A;Λ7O"D+VnݺmϞǟz^*y^ P=_BC \6n4{ݻJZ"%L1NF/4VbšTo,~w}8N?#}}y/j3YCdŋ.\lsraF AiשDVA5k , C"(//o覛n曧O>s̜|xG" i r? a"aA,F rl6`DfF"P( z\.'1W__m0pj6|(&*s8].4dlSBP.;TGX655bH$G~f3Lvb˖z wٳgʕwV;hL^ 4C13X7Ƿ"JT^`8qZfSW\W_QZv B7T!6^DΟK,KgG*s9ZXNvJxYrkg ǪUkz{<HT7%~o3f̛7֮RQQ 1C\K2DphQTn dQM|5!Gl6ZNI.~q^RR6!bz,ӰT&o=nF/~GZVVq `0i:g2mmm00cfy֬YI7xY+fK:;oI-{q<^&3񆄀.˄;!ͪ\an֔{-*_,S#i0rY_sk..unee *X$@BA -I30vlٺiӖ;\7xZ~&7pg...=6??[n!qJBZ0bXVq.ˠNe0˂;r+J{wnb Ǘ=WqQWrIzơccyq,ɉ{uc1O?wT٪ tK+WҪ[n3''??'!´V*677 0bȉ9hdb@"gvttDѲr4<^ WQQ!T*X,J RfI$\SH1&Ng0,dfk#lRH$jhs{o@ C2f_|Kkk:?@ 6m<4&yO~뭷64HCЪU7oނҋ}q4AČ9R:UQn|i28wuq,rl*vk׃?}۶m_~e57j4 N´irsb4[,x3J2JpRZJ%& st:J0EC([dX@eacmlB[ZBX`AII WZZZZ__/ ?BQ^Z _ׯTy)[EB0#vJFLZҹs"^{*`0pmHa~TVckNkfPȐc+.\x\]KU묥߹z+\:ӊK8 _&o%-0=(S"OUnBp&#!\uU"TuģTSu xֳj-*;u:3/v_/;/>l鼙UA|s(]ZjP;/gr[^o67[,L23%Y$ v@LH\$fqJBP(L @݇xBa:Ij7ojOހhxxΝ?p#G9v'?,YtHH1/((P(uuu V{f!a0!!9;}h/(qZX&UV*`2Ld0tZ-ՒruRPsJEuuuccb67wtt(蘄PXPPXQQV![diii %QQф*Ӱ))HD!͞-W^aً-*/[NH$^fuz{Իehhxdd׾}Ot'Nz6`]pq|||||w 4ccO>=6vzllW;yO:>BD+  |fZ@h`}'7.@'y>/J</4uurӦȗFiBn1`5557755*L3H∊ "(H$BL&˅I]D2QR 5550NNNNHH >+**6˗l ɖ-CL@K%)E$A]ϟo.>d@qh&B@"'I]&* rIQn}vޏf-OүѢ!BCCWT7[,z^"p\DjC5iy0нi*(KK bjAdXVٌ-V)RA"|O6 6nwtvvdD"QQQ\^R Cssnw8&YՖegg$$$ tbH63, reeKL&ʕm޶c)k``˶mwٹs׾}:ɓ>}ܹsHȾuX~[eK1'Ξٳg|<6v?H 队={F]zhUߡXM#|fUxm] IU&.pjyx< .O1D`ѣaLI>^c7Rz{7 99<?88WRbSRR Emm;hlhh40|MJ.w'BjVhoo_bEKK SGb`yҥK% CQ. vwY e$n5d6\!:vqrKhǠ,ˑp¨RY,_ttH$R*UNk͚7nzA"߾}((w;;M&&C/_|{Lu{-}!Ɏ{݅g.;~gہ짿/Kjz!U}Yg4L EQQH\fy#KjjT]׿9<G<Œ-CC[GFv3:::LlpΜO]t ǏYf> #/&{~|Vka&G(1L?b-ILi=pufP@~i&BnwQeq_^h,))rlo DכWZZZYP*jXikT*UUҲ%KJJJRҥ*r9쐐HO B[mmm6[]]]qq1dȸ[tZՋ:3S̴n鬬lVڪju:`P2,77O$|3ۚﲠ\F70)#: IDATx5COvG{DnWcC=$wܹwCoT#Ez]T\3)wŬOT/4rKj3R{=~ۯO]<?..>***,,,8877hbccsrrjku(0۽{:fh1蒀GJl4%6͵kׁYc՗_N>z--(_dZK,|g٥;[oMy}LwդzHaWNMӓ'OJ+ ̓v%-A<䱟}` -[֭[ݽh_x1044t %IMMX03I ݹ"FH***r8S766aRnv#&\^ZZ*ɐtʕl6<))Y,!GFӡ/Zvt:NժRiRRRXXleXh4z{7޽i=L#b6H/~qԩ_"Q.]qѣwO>~drrᴥ"?ܼy[}vW\ps&&&m>SN;*Rw=Aj Х["g{AdsV&4Yz4V66 7B\0>ix4q72k۶}}V6e2PǢ6[l6;::妤B Q,NcYOORFyFF2[l;]]]˖-3UUUEe$(yF',ᆛ E%$$bł…t:}{{ǺuPUw3YS|)P9U(Qn;fnajc; smm<l}B{鷄ܸ aO!uhwOL6/޽`z`I 4Oj1 oԑ#2;2 -5LzzV2YP7rz!!!@"1PTzzBa㤃WFQ*kdr!`08յbŊ|xpԜ%RBPk4Fbq8]]]]]]VUVQXXXڄp6?xY,ւ |~QQh\g7@x??@.^v{ &Ӥiw'rhh ==4'#Zg%nqaёD"Hju{{;&bifMF[ ڝuVWUUZhl6\;//f#9U(N K,+JSҸ\. HIN 6 oݵ{M֡"DBfefw޽5tIGYq?.((T>11~X?"\Rtcê5( J(2 %'4c* "l[ ὁXu`RAͽAp@xǻǷ{Υ߳@ w}̟ $䝥KL: c++k H[[wy J;U Zqrr0a9s- MHH'ᴋ֏''IIQQ+. yvvj֒FeSSSMc'״|||}&M4{lxGDDZ3hggghP7W^SptAiqp``O㉲tʄَ?k찰p6(A`O5:6{KED,5!aMd䊷ߞ8vXWOŁz[PF7vPssw:5(8880pi|MP)j^j!?q)S,X0$<lpL{gaff۫W/u„͏Zظq3K1 {e;w~,8wB t[ەfllls5UgKKOS:#cSO=_jvneAP֎Yqd\_e$<64mN%4z|ZXlO9ii߽,Z `[ٴ1-Lƍĵaa3g5iRرc1,֪|,3)Ol'N%1B?z4iRɾ...666pqg-Zr*H@zЫl޾}0  ϿnH$^YYU]]S+644CE+W2fN' (`+Yґ`Af\т#Ҏȗނ]A 7i3b Nj>0fЖ4Rj,L#Ђظ%KNѣ(ӧI߾}-,, ;5tP;g"K)S 6 0`Ewpp>a8;(ziL2ǯ! }M ~E᧍gצMr"5;^E.j]*wyL͸L3(`s+q4߼yȻ  dY*SRdW-^3_=uȐ!g鏿ldlllffoFИ1c=<==uh]HUt=A1x>}p wz^66?8~,^8&&655]okfVd裝^`K $|^'XX'. ιs0%Km$SJe܇%F\xu!HzZ>ϧI`,.sCڥ ph$'J8ɁϔȥE#b#uO|UxsaV(B̥tqqA p4@r4h͈?.66.44ly_#!E)4Csw!>1cN={NDDdb, cf3sѨ쳽(i>|H~~D}>2zI/veeՅ .)[[џj}k۷yf{{;$ڠWJ\jkkkjj+JJN){}1*y9ڱ=G% A4,k΁~:OCia1 !WO 6=\jq$zdBV؄\2YZ\\|ddԢE0ezq(';gMMM 5d>ASbА!CG2} DFFƮNNl+Cm p,-U-5C/LEtƌSj]"/и}kڪ.VZvenD=DALM{T4fJs9џ`0S"-K2XdyHCd,{|Z`j eeȅ Cf̘ Ū1oPZMy KzyyM0qƌ (fd(@fsEːĿnjI3^c~s:暚9;ܙwC9rc+Ꚛ.*˗[_0r-kэniv}}*+JKKЫW|]' ңDE[KJ4LSsdPv)L_d!^SaZĉ|4WJ=6͞ =23iM &|CjjڵIqqQuΜO0gK/аalll U ☚| K+++[;;;{a#G>?ujЌ3͛KWOLJJr0D@bW3c D^1c7pO<vyyU5uuu,cV*Rkz*0K`k-Vu%jM d7t!ؒH]KZR[ Rju-2Z!EK|gJ\7O:fO^4_brDkbcW3k젠L8iǍCO_33hmmmk;dС>k?rs.>>}}}_{ޚ`AȒ%VNHX#q{3?c;99i'4l\*N暚DEhll"oiFK.Dio!QՅY {ғJQ24ZI;ixC"3u>]PPxX>2?lWiޟƚV JK%[e6o~O`"n@I.֭KOZݹsO /y`lmmmiin~LMM9xE\G2?(Yf, B.#W޺u !]EB%uu Ry׮=yyy-((**:^ZZ F+W|ݻw{n8= 4%Z(OMMOMMKIY61qѱ+V\|yXhheK._d._|yXxxdDDTTUbbbV^v͚dYrL&SۥgUOݓ@$Zĥ$&&OZ w߰VEGGĬKHL\/F fD"nOӓ@J9-Dt . kUbVP744,44|%Kr/[,yݺdra+"dno|M <|͛xdT*UsSں2XYYU]]]]]}B-B/M |/ě["&.v%C¶+G`'Т#R!ؒWVIiX_~["*3IiS)EY` ӌ%`Bj3͗/y=-RW"j&R!! [;v|ĩXD{nA<[p`q Ap]\] Ҟyttt ҺgEZOdgW+/\Q Lҥ,M Jmu>펓ǑOs?Z"4@U"A e-s5å*F4`7lP<2p;o?޵k'={rss AV{<悓@X{W{645]466vvv䓜}ۗ'N,)9Y^^Q[[ؤT۷o?D8g[[*--74}u%]?ݍ.Ee1șITsi'r4^"lxmm-$YМ&\H-DeByyy/8ALD! M&lT۶ڔ_H|m{_ n\%!-A7;;g}'&/G/z̅E`cE4-7s1Xj _~f6Fԓ;zr9],]o׫?faRJ %K\jH XApWfJWR{ 4wV*М>u,Ĺ%WlI`K0є ء df6w;˰|ҼOB.b:#. ]ҫ"njY K7UB/qy1 j$IrE]OݍȮGߟV4! w jy`߹$4 ȧ' ZxE|ZsѢxONϗ$&fUc(ͣOv<,\BL177w,x‹3`d{L9R , sr>˃gJYYٙ3g544*˗/_zƭ[0߿oO?ao*K׮]|MRWUrb>@n>]/:*fzFB8MXP MM!OfOP(b֦qSKQ%N!ʳ+ 7.I\_z>XSR%3I.Z fTE̒e.c^SsZE4Dj5"cftu-j͏]c_$:"9<.ߡ9,3̧qϐSiKKK`DLj$2M*u#&+G|D\Q`'!8E3A[ِ^ƕC CTb+͠v\Rܥ3#5c͕4F[l (_[{{9RJ[ԚȽOSŒ;$/M\YtEY XxIv?PSnv5srv WY h+/NȥI˓6.)Ñ8Ԓ!A(u1trrٻ7С//)9YQQQQQQ[[{⥖+WNݻ_Guݎ[nTsO~\Nأ+NDjoDh,FZȧ/a9QEf.u`d=: n&6@zM=0~!lcZzaC ^ IDATp?}YuG #%qES]Q3ջB J"f|f'hWWɤ ߺS̜Xu??晟m߽;3'`~~VVUU77wun\tS|ʕ+f>ʷ}-w,Læ+3bE#~j,=iׇޓxyٳ73s< IQjS)[bC+V3Jz3dh'N<)M AKONؼɤOe:@Sٳƒ_?~B:=2[s{7-QsvQQz_O KJC$?{>/\Y$uSݒ&7tO[b9/zll^V|V'̓kCr<nԧdºlHW={jy^ʝNM5W^<3iiٓ{P:@ZZZd۷o駟}Y|?߸qC,WVV;M2|0yڱAxٚ&iy*ĥ|,F|)3<KyZ< ;S@Z+D8X"䮷:ƨQuՋDUUgΞ=nAj~fgHt=o#n5f36N\fn*y ӞGɒMϛᓺqI]ӮvY}ɹ'bS>?::NS:&0c١u64sٳ˘|+416:ûܳλ8ii :_XGyW\\|ӧkjj.\.E.9r?쳀/BОo^zʕ+l-up󳧫z#'Y,g[#۪ԋ!fk4Jιu3diD^O)/y//yS+Ϣby 3NJ\mҏw$1ӵ]V|ٻU,WO}>më/ϣg|"w+yJb\똰n΋Owͥ۷oٟ3D>/"@? ZEx@cUIӵ?u2+k/]w̞eusdk ?kw=R3:ONu$({rwm*Ob$WGWvp s ߁6]`4ôg<|C:<بyd4~ U& =Szf'W?1 4Ozۮe6P]R͓֮\"V?&2::4ow?&r{Å18sxt9g~,$VN[yl+]YS^i> :Rʨ*-ܞr/ȿunKy1QϓL$z]?r5@:7 ?;w_ aGTv{?A:Z>pP.֧c+/3Un>>莎7nHsfv\")uuu诳7g~米[Ko?g|,QԪ[rvt8M4iY:wNSr'zr])SiݪXl(wwo#ݯc {︦+ -Qc٬v<8{9Vzx=y!=*cF>ל~e\K=&9޿qx?Ōx|qLX"%sAjzjZ=jgA6JׇVNg1 F/늼=zO ;w>sZ8Yxx6 ]ۇL:G@s6ZS?OMjU(=zVq{ʎmo*?όzo8lzhi&wŎ8fv|̃iMǟ9zr(%OYH|ue?go _zUjo{Mf-Ƕ3\ܻG>m?s?gܞ[n2w>:Nn@@3n;9L6g6ئ+R?OLW|ʚoj&H#ނG,^Xq{׽Q{1jގNg<>>k)Y^[}z^? {;[[b븹W{+i|:Ys~}>s'W#YKίǫݻ3/--z4, иO и xN/ٓ'P^MQg䵻1d;±S-ˎkE#Oy~0{+cr=lӾYzs/8ڨ|[Ĭ_{7]gwT=7'Wvx09k'ב;>#]O.L_:{̄ǩgOoSyQ>>n{(E{|]u/x:ɽl>>O˱⮩~W|c<ھ?mc:*}?hK}m}ėO1.STȹkQ5gr3g8=j5ʯix꯯ ǰپQ7O}p]lo֛}=9~V`_Ωy0}?>\<|/uN姽Eo"@ds$z;_[?Ø4gi{r}['zܾ? 4'/~́?<~`܏ [g/zW8h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, h@, _anhh @[nhhTKJzСa=\ܞWHn a^$@gddJ.)cT[ZZZZZ뫪Δdgdg$$$g?0`~OӟO?C=ׯ~A 2đW23:tРA/__=O?ӟg?{v|W322s JKKTUoiiS?c ~#@{*99[׭[sϏ  2ej`cƌ{x/^xq3hРAW!77^kp/utt&''kJ~G#?z䑿s|_ׯ;tcƌ 8eԐ\֭OMݚUT?;;wz@744H/9s+5@M0a҄ ƌ7r{w:C~aޯWGO<?~Q}YX`].W``Ah& |W`Æ}w{G=r1cM0)(GOL\i蜜|Vܹo97?? |'yPLni4hP%ꩧ{/oo9bO{?3@IOOX :<|vh茠` cǎ5j#}wa  {aou0񅧞zlxn=憅 2D ̏t>td4ׄ4fHY2?=!;-1wGG3RJ6읷~wH N8yi3#"DD̉IHXbŪ7lݚukZf枃Q}K׮]3TO,+( {ݶ-mÆcgϞd IDAT:38xIS&M2~ѣǎ10f}ڑK/<`;:: 7Qff”{1j豣G?~¤ISΜ={sc%@oذq۶m{ࡂ'?ڵk׮]}OvWWW*,,}zhPT;vȑc$C{btW~wvꞑwk]J!CHC?dРv4f)9fu|IlKΔ… ZSN?|8}JIIMJZ"1qE\\|TT̜9#BBf̘:uA&L?~˜1ƌ't 9R`ȑG%gQ6vKd>/a;ΐ!Ch$7?c2:'~O/eߍer$C #F9rw,1cƍ?a„I'M4u괐s̋OL\6%%5=}Wz}>W\|ԩ555555nwӅ }G}t歏?;@kG~sB<$I@~᧞zzxFO?O>O}bkEG=rٻwg UVK'tlfϞ2#8xzPIH } 7.P^cǎx=f8k1b(ͣ~_$ݿCW'r$8_#7o֞a6f1%4JI3a?!0pISO2#,,bG.]$ 2cݻ3>r'kjjkjj֋'ܽҥ/^xbsssmm]EEeiicǎ#mIIk._02rp  9}zԩZ2n&Lf/ԧ5R9]I&~7 G d_|ё,O+9ݪf\ȑ] P#%N#&%[JΜ<9((hԩӦO :Ssd؅oĤ'3sONcKKK+**kkjk뚛/^x廷pK.;w^FA,};wJMݺ~7\jɒe.W|LLQG͝1g֬Й3BCgBy70u4yM2e)S%^k`-Uj9r{8#:"u_´1xozo۲v*4~/zM4{ט=&fҀ1vxGV6S)SKl)9sڴ3g sFΟr/Ylɒe+WZ~Cj֝;wee'#8dt}}}}}s.]iV{ зnݺqFg˗Μ>}tQQqQQ#Gs222mK۸qƍ&&\dY\\ǣb"#ϙ3/"b,N5+\_3g͜6c,iv$젠`SLHwG}LuCCCCC._yƍ7nܸu駟~u kltԔ8QrDɱcڻ7+=}߸qdK/_r.??j޼H}͙3O_gϕTy:((X;@h8E=zX}aZ$1Z=]מz~]C:vIG4͝&f(6wTeP$f)0kqڌ1a$)0KӢrHHe8{칚*ʹ9~TTTLl؅.W||KItNJZqԭ;͒ǎ8QR^^^SSnl1Z~kܥ~I655>“'ˊȖN;SRR%C^Fr,Ylqq &/f–T1Gn"K@tT{wQK6ućwMg5!GyDv0ҭ!]>;w{wYX󙘵Yz ,-C̙aaas4(k>WTTwhBW\\,[dYbիHt޸qSJJt?8WTT,;kk뚚7ohh -W ˥_{x;vnݴiu%ݯ^fU˗'.[\:N'$,r-ZpkBWlBMRu;7R@$RϘ1KDB-%jZzgtXK[;^z`4x2D5{_<  w|e9X顒CCgΘ1+,,B0̙7wndd|3(.\еhQrIl$!aI|%K-[|ĕ+W\Ju7m,};vgdd 7p~~A~~4@k]&@:'waaahp?}%Ҙ } Пy-8~ᇺn*+;U\|رCr?=;wڶ--%%uӦ͛6m޸q'L'^FUWXb*ife˖KBv||:&&֌aDH-m:ûl6[;%IۿO ;rGG}W ]/_jFbLtt=31cjPPi!e\iXp劏O+v-[.21qEbJɖē%4[~M6mNIIݶ-m];wܳCr/.>^\|TeeUmmҢ НWe͛4@_h]*N֭[ׯ_vZGGgJsϞ={ʪғEEG=,{222w%]۶mڕeRlذQ_֭_v줤5k$a'&Hx+N5Oϝ9wn&bi8mZ 4=ei SЬWuczcsd,5KYf ͱ\m_^lDdk$I8^vڵ֭[Rrƍ6n,yִ[ӶmK۱#}]{fݛ%G,-=YYYusε k׮]~֭[2C8;wdyʕ MM2^RRZQQQQQQ]]]__rʕ+ڿq۷oO?}ׯ_zNhg讫'O?~G;|8С\޿}H/霖s;%^oݚU#5k֬IZrUb=#6vattlttԧ͋f3frL0V65F?Yr6nYo9'3f̘eNb={y҂;~TttwK/-˗'Jgʕ֬Iļ~˩[,)9=}Gf”wo־}8;;C>w豣G?~2uui}t߸~, ㏵_u?#Hϟ?ѓ++N:}钒OȺ#G>'yC99Jm$dwVԭ[HC|kkk{{zUo޺շ-* f˗/[[/?n9s̙ꊊSNp [#'Oʼ֧u듓=E Ӛ=]阘XIRk3fҥ-2c'-1ZFednhxWdСCiz.0o{3=,9wo 1b%7' +JIzO2lKNN^'7,ef)0KbМ윜99,8/Iɖf,(((,,O()))=yLʾgT׻Mnw[[/~/_׮]qM)}hEh鄾yrtttH3[ZZntEJAԩeeN,풒ҒR!!ĉOI:?cyyG4RK>(y:5u[j-[R6o޲a&)N]ەˈ/ʴs\0wnniѲE\Z;tvca/~ߦ1) 80 '~kݰav9;jYJt6-D茹s###DF.Rf_xR'ؒƼa&iݲ%%5uْ!y,Iٞ|cF2.***ZIɖ3KJJKKOo:&u+?_{졇01qGбE6 o!ΞE2x.!:d^&)9yڵdzƦMlIٺ5Mdh$fmh#Gm?i\.))p,X\QQQQQi&*2|n,m|A{%MrP?"tB߾}[3k̹dZ^KO>';n'i֮D-Q[uyyFjR;OK]Ғ322WHe .W|cϏrԤCCgN&m2|gbщ0 __|eF#u܏>k ht~_נ5|֛OfY3DG.r%4kn֑su@1ݛ%, Rf,e嚒5tlvKu75577zsK˅ֶK̍k׮[%:;_5CK }uI坝W;;;5FKAŋr˰Dj!;Ν;'yܹ殗t5y %OK\O,,,/Çrsٷo}꡹%5u[JJf5k4I+>&&vhz1g֬pIOmvw9F>0 :CQ~Ezzzzκy[zZ5zitee Γ0]ZZuQIeZF +kG9y+,5鄄%2oѢ؅'-IZVJ-I!im^o)E/G /~hw֪a,9K)pig[ cc.ZhQz2{N3dTsf枬}D*:i,w$7WTTHhk=Mک,ŮHii&ҎNIWvvvuk\~]F6k,. 9hkGil)`kZ[AΝ;'_J Rim>ugG5Dy#[]$O˷v, !aZ<$Fp铎Y ZgHG̘1Kwtq -?-Z0 d|76䚠5lD3fAE.Xc7bdiظq;%4gf[ܵDjғRfI2lϐ|9 zav\HJdᡩ+pvQyHnW}ggWڻaԤoIfԖji<-asO+L%EJYW'WQQ!=$LK.**-=t(W{<;uӦ>iHL\tiEbbb rPVpe8b(_(-{e~{߿rr8~ve?7xbGHÆ?~ĉu\teEq .]3~n6mڜ5-mi=9ɶ?]Y&f>Ui,=uu .fz&Hbd)YcoRqөѰaFgGzv @[o~Bmk ,@ 17Zr){^=} {^Oni=tGcc1V骪3rS 2YJY )%%U7ܹKr faus׬7eT47khhVvbGo1NOq;g?>Hm;p{_U$>tpy>xR֭.f֥-2^{DZcۿwoVFFfzmۺvJւLf) CCgN<=8xzPc {?rI$Z+++{/47ktD! AASO:SFF.V ٹ-YrD-[RmKKO) {fIt>|8رc=Ke`syy,7,YfHfI̺O.:&i AO;@;=^ߕwvigvzhiYDa̙nѕ05^ZeeJJJ O:7vdfiiۥ -v֬IZbtH/\Z`24Z ғ'uhꐷO>D1Hf; >GM4u4:\ٳJ/**F5.]&֬IZnSRR93s7`bW&Y6x*M?#'6tЀ'c=x1tCe4lJ+~⥋/]>aٲ,C7o"9=}GC;RPPP\|TY)FW]]][[ [[/jF]o6:̙۳7kh$:O75iߡ5iϊ:>sZctiiΓ cGzjԭrpժղ|ɒe.W)E-Ǎ :a{㍮l+![_x 7WYr :ˈ:+NvqZZlذ)5uZr޿CHYsEEř32ŹQם/f~?tT N~2g&y'ޛ\4O{h~P___SS+1ZtIIIaa}YvժիV^tY| ]ѱ0"b̙a3d\)SÜ-ZGsx;24$I<:pC rAs dsh %؅ ]2neVNJZ+PRRRo!Ce,C/(,, kjjOC[5$A9s75۷o6;y'[t_i/wv,J4+!PjҞw-͍nњ%F˰cȴ}K{֭i7ow{II+VRVCgEkWcGk[&Ct=lH=z,3gcΜyZxa#yݺ7oٺa###S2aCrݲN,M^s_6|¯OzUo_8?yg.Q7U<tx~'IؕktCxY)hx1e(ԱquV5ಿpy"g˻Ceȝ^.|~7o D!ӎGȠ:Ux>] Ξ7/r eeWZ.9yƍaC͒;G%,%:{Zҵ_r劮;> Rnӏv_f4@{+zѓoݼyS[;Or傣 ]YYUQQq'J#G<$[ Cnذ1))Y\q esg ׎ygivtH243=뒔w=͞fz؅.WyeRR e}mi;wUҰ!+O(9u괔++nnnni}2UCo 4a7m<5D3F{&xtJlёts9ntuuuyyyIIiII-Ccǎm2N؅Q;:ۿeg|| 5C1Y:eچ.Ru iX :6v\tΧKMݶcG `IIiyyyuu&ل"Ugmqyu'ˮ> -ĺW^?A}}6u; 5I;m~̻j瘎#G=|@={e|~ի,_dѢE,;7R0кlő7 K‹{;=˕'Kz6-D6̝9wnы%$,YrcFuu,Ct Τb':#ݳa^*l"h#Fw_1F= kjj*+N>]Rc/ܽ;#-m{ZvIIkWf +>::v޼HpV}ӕUMARxk(&i|Cvn3--5eμѲEݹn]W'JqDIaaQ^ޑԭ+2C; ]s9~}衇G|aљ#FϜ<}zePΪQe99),,٨w`?GÆ 36z[}1zc6:7Zx- Nɸhi֭+2+슎O2CFs7uDv_ՀC/0\I:sC'=gΞ`a܈O0;eƳL(t碢ⲲS2YpKÆ 3KΒ5:6ν/3ܻ muhY桖 Ν/:#hrwќYY222o!]Ѳ{űbc͟efhѺiE~KU@@_`߿~?-SnkQTD pՀN!ʭ%0@H0I `(9 _~mMgsCCCCãsrr rynAAQiJT+kjj.k4WZ-_˖:nٝq4qOkxW^"AAlV<ѣǎ,Lj13=/0jzop:Vn0P/W3sss.w8bL#CCC?PSS R*,T r̙ӧШs?.rh`q ($$4$$4<<2:X+$$&&%&&sK7+0=Iyಠ&/ n?34^gn+WZ.cfTzv|)Cv6VCN~9G" MΞ={n_3i݉AXKasYDԴlya鹦23aegoSSSov݈+&$P~E/ehsss333 mlfh4ww̬TWרՕ%%ʒe~~AVVvjjL/,W_}MۄAH3A;}Z/SSӲ JJjueuuMccR:;{Fh26fffjy{@Նdcwzfo! شl߾_A Л Џfh涃;r8j4뻑/_nAG4//I}N*=Xar֭BA ޺Ç1 ֕VTTVWנ ߳hXp8Hؔp x5݉ӳ&bu)sC3?_vA݃>tCruqܼeBH(a]G;8tA8@)BcbĜ.==377Bqruuu =k=Jn/!{^>/_Xع_f V~q\Nh4cEpŋ!fb;X!88*tA8y073"==+={V iϐ]xrKCz}w?39NӉ c[\dg:?(@?vVW1277YNOO\C144d0zVhh4Wcbt,)>^#GTI(T fV?MA={lٲf[,DnKd$,)--:D/\jz`0 !87Ɯ.פ59==vT ՙ`ug{ЈјYfקۯ_mll0++;%%U*='A׊r1= b~CG"%$R鹔ԔԬ삂Bkkjkۯt>HFFn0c4KLxhhP~~SBfV&&&FGGGGGVhu rr %.7I’::,,ehm{߃  6}-H$ x5.{nhuo`` ::::113[KYd~b C ;NNNp8XBF"RR*UEEtR aP00G㸜o $l&AABh7"#uii99y99yEE Rh4DzZV+'zIDAT|f)oxc<+P~Bl}ѭ[Ҩ AA<rrr8?Q~XᇆK+:^նh+YYϧH2T} MhP$=zlǎ   ᭑@stSqRB&/^TWWҢjZVCl6!s:].dHLO+?3' C_,C߾fbѱ m45^Ԫ%%ʼ̤II%86**V; ر_|qR_  n|pCCãX8V"IHJ:a]]3 FyttlttlIZFtFzGg&E(@{v,CC ?4v o޴AlwPOOoW5``\ ]ZZzZZzbbR\\<&No߾߀  nR)qC BBB+/W7S^>d6o޴aksL|397ho)XXX7333Sݼiyf2vJ(;[-OMMJeg$,?.ص}jqAįd޽/lt̙x)SSӲ充E=ϋ灁AiMuSS333 +g?P&k5ݻgaa֭[Llu9ۯ655 __"Xu244L ޷  _,q 844,44,*$ɉ>755!H됞!ëAǃL hﳎy9xo 'v7PBFT᱂\v̙xܡZAܞ9YjjZjj\[XP*Uhnمƍ7nܸa]IA7Vtmc@y?:޽NQbYz^~RKJJ1ׄK ODaAZAٻws='Daxkv~niѴhۯzH,Ųx~;7~a?NhJ*Ao h0rh|c N'vׯa⻵ -Lq 飧?/vߐs\̦TW466n7ϋ)fl- VA9ЄaF6ŒUVVUVV5affL$%СA[om6oAD=,%eff)IIiee3o@7 `)XqܹsFdh=99511`U.]tZ`ޘ{T& _޽{ns\$.nyHQTP+.]lNtaxx捉)=gz8agfe;w =777773l&ӈ428xK@}̬̬$A, dvT& ;#8oS23 KKUl[tvvl98xdlhn͔~곷\b%7(?FxG1b@|`NlًOlgwg?yO35wѳ)|A}D ɉo( /!\Bk߮V^ajD*7'bbb" 0 43'pS 7[[]]ݏ~(~g0ds^7#}`#H(&t:vj4{faVA4֭ 6;DⲲrZ} ^"=Vn;N<; E\?F}A}D1ЧN}B677" e  4Go7CS@ []yK.S!wUu:B)U(+8wtffZpޥU_ |@s{>*h4ۄ! nQѱnsk kkU5RiA\˻rA7AN$77RiYuuMuu t?澾~XNq8nv///`p#Zs?%@}9 Z{{{{{{ 8WW}Ϣ˵0==c[o8::LMM&FD{|hA݁ S>a|Ht\mWa.!u|zzZx=Uo@7Xg~>>7CC.&l'dE+((hgEAj#v@)JeRY!]X##Olny  Q=W^|ŋp8 ׄntNNNNNNBl6mFc[CCZP( Eɓd  t^pBjF444mfNsx>G^xKtT Qwtƽ!ű _ZZ <|ɠ HqD No,--|~pFuFM @u o4o  輼4пg9u~9W< Mvqፍe$&d4: AP¦X,)*"O@# ;K EEP(:]N`0L^7<裢"DR"U劺z[ 统>=}j׻?@M=U~n!㙝ybY,}fsئ5@  AAwW(&:]-=KXct 7)a; 7zA} )@ v{nĠƬ==&2]]]SZZ.]{B~wo_̙gΜ=}ӧ:}̗_}_/Q( :⋿wS3g~_oΝ?w~wBl\ܥ[2D{?;:Lށ1nj ܄.iZ$|&3JOHIIӓ\z˗/_NOxŋbc( B]x)..>>>N˗\J'ggdff1lv>@AM= 4ىD"^\..z]n ;BrNIIQaeg33_rjrb"=>>!>>!..NBPc 8KL'&ү^MNJJIII~lFN g2 )`{{ Yvn\ hDh hA4 |>׻O gffbnnnZUeeD"%b.bXluFzjjZJJ*\EItOOt2 BPC pHӓ${NMMq#=33+33`Xl.斮n ™ٙYxABLE 4EAM=۠_|s B~yy$&FF> BP( n[d59ZjjZZ[nge1Lfn~>߃*J)?2 B `4d4@@~3hǯ@$!x9NCC 8.efddgܸN^ECD'A<BPc := 8mwwXyW !U:O@x<!A74#@!LnmmB`pceeuee8vaQ`h:^PVWה " lx *:%%59y!Mi B(*:=now xdWBQII)4:[[u:FU*kkjUU*eRiD"K'P( E-EepI$R e9<h[[&Sqna}|~O79:? ? 4U:2A&$SX[[KhgZ:!b6L0Z:JT޿_)+OWVVFP(cJeJކFmLX,Cмo\~.-n@S4Th(>@ ntNOl0=<6ó–VYouuuujV֪Tj'RYP( BPS)FRSuu:^o4 斖֎Swg Ymt:n׻ @,C}/." IENDB`n@K> d_$PNG  IHDRw0PLTEO&ItRNS0JbKGDH cmPPJCmp0712OmIDATxI `olә[0r66 ) ?$oh0eL@LWPI&@h*1t[S+7@ Zrm. !=|3[vXD΄ؼ~膾J'{AñJ!jn[@=fK!T@2] rwA;na 5@8c !O0v1qVbY UdIzdbI] ?ll"F06޷6R[sk1:ޠOId7FC5C qcs."|ॹ9jOCП&( / 0DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 01 ` .  @n?" dd@  @@`` |Y        ,b$F%C%Mc $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks8%%ExampleUML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action a$Metsker ExampleMetsker Example Metsker Example Metsker Example    Challenge .1Complete the diagram in Figure 17.3, which shows the classes in com.oozinoz.check.canada and their relation to classes and interfaces in com.oozinoz.check. Diagram on next slide:@1>D5Challenge 17.1   Solution 17.1  Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/@  ` ` ̙33` 333MMM` ff3333f` f` f` 3>?" dd@,|?" dd@   " @ ` n?" dd@   @@``PR    @ ` ` p>> xp(    6 "  T Click to edit Master title style! !$  0p "  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  0 "``  F*  0H "`   H*  0 "`   H*  tA8޽h ?C:\WINDOWS\TEMP\wwz9154.png ̙33 simplybusiness10 zrPh (  h h 0 P    P*   h 0\     R*  d h c $ ?   h 0   @  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S h 6( `P   P*   h 6$ `   R*  H h 0޽h ? ̙33  $(  r  S p  r  S T `    H  0޽h ? ̙33  0 *(   x  c $ y   r  S y  H  0޽h ? ̙33  @*(  x  c $    r  S   H  0޽h ? ̙33  `*(  x  c $?   r  S l@  H  0޽h ? ̙33j  pp(  pr p S R   H p 0޽h ? ̙33  x$(  xr x S    r x S   H x 0޽h ? ̙33  d$(  dr d S U   r d S 8V  H d 0޽h ? ̙33  T$(  Tr T S $   r T S   H T 0޽h ? ̙33j  X(  Xr X S p   H X 0޽h ? ̙33  `$(  `r ` S L   r ` S   H ` 0޽h ? ̙33j  \(  \r \ S    H \ 0޽h ? ̙33  $(  r  S X-   r  S D  H  0޽h ? ̙33j  L(  Lr L S %   H L 0޽h ? ̙33j   (   r  S h*   H  0޽h ? ̙33  =5 $(  $x $ c $-   x $ c $.   $ </@PD )package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { // ?? } " b   H $ 0޽h ? ̙33  0(0(  (x ( c $,;   x ( c $;p  H ( 0޽h ? ̙33  @,0(  ,x , c $C   x , c $LD  H , 0޽h ? ̙33  PP$(  Pr P S H   r P S PI  H P 0޽h ? ̙33J  `0(  0R 0 s *px 0 c $P   x 0 c $Q  H 0 0޽h ? ̙33  p40(  4x 4 c $j   x 4 c $k  H 4 0޽h ? ̙33  80(  8x 8 c $w   x 8 c $b  H 8 0޽h ? ̙33  <0(  <x < c $p   x < c $@q  H < 0޽h ? ̙33  @0(  @x @ c $   x @ c $@V  H @ 0޽h ? ̙33  D0(  Dx D c $V   x D c $dm  H D 0޽h ? ̙33p   H(  Hx H c $P   H H 0޽h ? ̙33j  t(  tr t S    H t 0޽h ? ̙330 zrl (  lX l C h   r l S ]h @   H l 0޽h ? ̙33r@8.$024.B^EFeJ]LAPRTV{XsZk\CUND;0=@>X9v(5U_]l7 a AR( Oh+'0\R px, HT t  CommandCS490-02 Design PatternsiDouglas E. Jeffries[J:\Documents and Settings\douglas\Application Data\Microsoft\Templates\simplybusiness1.potDouglas E. Jeffries73gMicrosoft PowerPointing@2@{x@0G|GPg  R('& &&#TNPPx2OMi & TNPP &&TNPP     'A x(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___www쒒쒒쒒쒒쒒쒒ݼnrnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmffJssm뒙ݼrm쒼mmݼmmmmnmmmmm޼mmlmm񼼼rmmmmm쒵mmDmmmsmmmlnmmm쒒mmmmfmmmmmmnmmmmmmfnmmmmmm쒼mmfm¶ޘ޼¶ޘޘ¶ޘ¶ݙ޻¶ޘ¶¶ޘ¶¶ޘ¶ޘ¶¶ޘ¶ޘ¶¶ޘ¶ޘ¶޻⓼⓼޻¼ޘ¶ݙ¼ݼ񼼼ݼﶼݼmfCCCCCCfmsrmfCCCCCCgmmݼmCCCCCCImmmCCCDICCCCCCClC<CJfCICCm\gCC"<"CgJgJfCCC=CmmsݼJC!CCJfCCCClDCCmݼmCCCCCCfJCCC=CCCCmCCCln񼼶mCCCCCCCCCfClCCCCCCCCCmmCC=CCCCfDCCCmCCCC! CmmCCCmCCCCIfJCCBCCCIgCDCCCCmCBCCICfmCCCClCJgCCCCBCm뒒mfCCCJfJ<CgImCCCCJfJCCCCCCCCCCCCmDC BDmfCCCgJfCDCCCCCC=CIm쒒CCCCCC=JCfJCCDmCfICCCCDClCCCCCCCCCCCCCCC"lDlCfJCC=lDfJfDlCfJfCmDlD<CCCCCCC" d_$c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %MCommand2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterX%6%5Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action a$Metsker Example Metsker Example Metsker Example  Metsker Example    Challenge .1Complete the diagram in Figure 17.3, which shows the classes in com.oozinoz.check.canada and their relation to classes and interfaces in com.oozinoz.check. Diagram on next slide:@1>D5Challenge 17.1   Solution 17.1  Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi>lmnopqrstuvwxykRoot EntrydO)0G|@Pictures*Current UserYSummaryInformation(@RPowerPoint Document(xDocumentSummaryInformation8@pA?wKZ[Ywĺ]@Q+5@\* NO e9o1hUƖ!zClM]:N n1wJDxv?Xl)|/=C/2S2xN$wYC -APѹApf1 bw]s۔D^Y!N @\S~2Fg Z!ov-@ @ۨN٩:;8>sP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@hP@h_¤Z @\™DR /6*6&D,Ԃ!^]/Ldl/@l浚[.%Eel^m^,kiY+ !Ln*e0}Y mCPgs_*|s^`F>}n @8{ ^_ 3hD6%([ŇB)ľ/zqXF uH&ח8DY1 ":be!,# 0ɟ?Fjǣ 2 D*rf_!L|I ;f5Cp'cA0xݐQWCL@0A(*b|N11e>[87'/ .$7@GY) r(!*W# L6o!Xe0NoIYX5? h\gyb͹>)='.K (1AL͕Q{󞌪E ?_V|A|\㹸5 w~4 hwL,x:",$Ѓ4ˆ8P0M~;Jv<:C2zVq`1I[8\nry7 X&_LWͤO&@h&@h&@h&@h RĘJYpIENDB`n2'zĿ;PNG  IHDRiabKGD#2 cmPPJCmp0712OmIDATxoF"1c}dUx(ETD42R1@ G"ZP Bk%x# yaL čIij&%q+)CJrg&):T4sUqK"'kTLGIT1b"5@uO 0?gx⨉Mh(k1G& KI?AqDEpADA-uOm/ 0DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 01 ` .  @n?" dd@  @@`` |Z        /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks8%%ExampleUML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action a$Metsker ExampleMetsker Example Metsker Example Metsker Example    Challenge .1Complete the diagram in Figure 17.3, which shows the classes in com.oozinoz.check.canada and their relation to classes and interfaces in com.oozinoz.check. Diagram on next slide:@1>D5Challenge 17.1   Solution 17.1  Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  RJpp(  pr p S R   0 p C AJ:\Documents and Settings\douglas\My Documents\class\cs490 - patterns\my presentations\Command\CommandClassDiargram.gif H p 0޽h ? ̙33ra! a˃ A* ( / 00DTimes New Roman|dv 0|( 0tDAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 0t10DVerdanaNewman|dv 0|( 0t" ` .  @n?" dd@ ՜.+,0l  $ , On-screen Showm$Rose-Hulman Institute of Technologyxf Times New Roman Agency FB Courier NewVerdanasimplybusiness1Command OverviewWhat is Command?What is Command?UMLExample In the Wild In the WildVehicle ExampleMetskers Challenge 24.1Metskers Solution 24.1Metskers Challenge 24.2Metskers Challenge 24.2Metskers Solution 24.2 Challenge 1 Solution 1 Challenge 2 Solution 2 Challenge 3 Solution 3 Comments?  Fonts UsedDesign Template+_txDouglas E. JeffriesDouglas E. JeffriesDouglas E. JeffriesDouglas Comments?/  @*(  x  c $   r  S +  H  0޽h ? ̙33r9 + A&( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` !b        /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? % Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterX%6%5Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action a$Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  " Solution 24.2Iprotected JMenu fileMenu() { if (fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {save();}}); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {load();}}); } return fileMenu; }JZJ             Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  $(  r  S |%   r  S @`  H  0޽h ? ̙33   $(   r  S \   r  S 8  H  0޽h ? ̙33  |$(  |r | S    r | S ,  H | 0޽h ? ̙33  0(  r  S _   8 P PZ  s *`PZ  s *` pr  S fP  H  0޽h ? ̙33  =5 $(  $x $ c $@V   x $ c $tE   $ <I@PD )package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { // ?? } " b   H $ 0޽h ? ̙33r$g 0O; ! ' C"A&( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@`` "b         /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? % Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterX%6%5Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action a$Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if (fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z       %   -# Solution 24.2  Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  $(  r  S _   r  S fPP  H  0޽h ? ̙33  $(  r  S 4N   r  S   H  0޽h ? ̙33r"  #A&( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@`` "b         /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? % Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterX%6%5Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action a$Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if (fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z       %   -# Solution 24.2  Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/r p+#A'( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@`` "b         /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %!Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterX%6%5Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action a$Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if (fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z       %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });P % Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  $(  r  S 4N   r  S   H  0޽h ? ̙33r+#BS +.U#A(( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@`` "b         /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %"Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterX%6%5Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action a$Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP % Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  $(  r  S _   r  S fPP  H  0޽h ? ̙33  $(  r  S 4N   r  S   H  0޽h ? ̙33rjU" ;~3 FU#A+( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@`` 0%k"         !"#/Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %%Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterX%6%5Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action a$Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &    Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  $(  r  S H   r  S   H  0޽h ? ̙33   $(  r  S     r  S $  H  0޽h ? ̙33  0$(  r  S 0   r  S   H  0޽h ? ̙33r_$0^J6  ;"&A.( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` 8&n# !      /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %s(Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to Strategy ZfC2fC  Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver"">L%Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &    Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  P$(  r  S |   r  S m  H  0޽h ? ̙33  $(  r  S D   r  S O  H  0޽h ? ̙33  d$(  dr d S    r d S @  H d 0޽h ? ̙33r f'! B'A.( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` 8&n# !      /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %s(Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to Strategy ZfC2fC  Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver"">L%Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &    Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/r! 'A.( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@`` 8&n# !      /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %r(Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  Example UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver"">L%Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &    Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  $(  r  S D   r  S O  H  0޽h ? ̙33r'YF EH'A.( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` 8&n# !      /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %s(Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  Example Menu systemUML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver"">L%Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &    Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  `*(  x  c $t   r  S   H  0޽h ? ̙33rHw ]Hy'A/( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@`` 8&n# !      /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %)Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is Command.execute() Staff are the Receiver Cook prepares the ordered dish Waiter delivers itp .&2 .2  UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver"">L%Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &    Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  `*(  x  c $t   r  S   H  0޽h ? ̙33r?y yժ'A0( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` 8&n# !      /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %*Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]UML   In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver"">L%Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &    Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/  `*(  x  c $t   r  S   H  0޽h ? ̙33r 'A0( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` 8&n# !      /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %*Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver"">L%Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &    Challenge 17.2.Complete the code for CheckFactoryCanada.java:  Solution 17.2package com.oozinoz.check.canada; import com.oozinoz.check.*; public class CheckFactoryCanada extends CheckFactory { public BillingCheck createBillingCheck() { return new BillingCheckCanada(); } public CreditCheck createCreditCheck() { if (isAgencyUp()) return new CreditCheckCanadaOnline(); else return new CreditCheckOffline(); } public ShippingCheck createShippingCheck() { return new ShippingCheckCanada(); } }Z (      !   Challenge 17.3Your system needs only one factory object for Canada checks and one for United States checks. Write CheckFactory.java, including static variables that make it easy for an application developer to access these factories:d lChallenge 17.32package com.oozinoz.check; import ?? import ?? public abstract class CheckFactory { public static final CheckFactory US = ?? public static final CheckFactory ?? public abstract ?? createBillingCheck ?? public abstract ?? createCreditCheck ?? public abstract ?? createShippingCheck ?? }03/ 2     Solution 17.3package com.oozinoz.check; import com.oozinoz.check.us.CheckFactoryUS; import com.oozinoz.check.canada.CheckFactoryCanada; public abstract class CheckFactory { public static final CheckFactory US = new CheckFactoryUS(); public static final CheckFactory CANADA = new CheckFactoryCanada(); public abstract BillingCheck createBillingCheck(); public abstract CreditCheck createCreditCheck(); public abstract ShippingCheck createShippingCheck(); }Z        " Challenge 17.4Write down an argument supporting the decision to place each factory and its related classes in a separate package. Alternatively, argue that another approach is superior.  Solution 17.4 Each factory in separate package Organize software and development Country-specific packages independent Add support for new countries easily Single package Separation nice in theory, but overwrought in practice Single package easier to see at once in IDE Simpler for only a few countriesT!m!m Challenge 17.5gWrite down two reasons why Oozinoz might want to provide different look-and-feels in user environments.F Solution 17.5One set of components for new users and one for power users Different display types/sizes may warrant different standard components Distinguish major release versions Clearly mark beta versionChallenge 17.6QDraw a diagram of an abstract class that will create standard Oozinoz components.=  Solution 17.6  Comments?/r 'A ( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` 8&N       /Xb$F%C%Mb$@K> d_$c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildC javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver"">L%Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &   Solution  Comments?/p    H(  Hx H c $   H H 0޽h ? ̙33r. V0'A ( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|.&j@\./2.狵p^" " ~*uq-rm(9W |Mux7m( 檘]p1kYbXGd$f%Iҫz($ 1?13kspc%ƫ̎.d^4xGRf*0|q)+Y-ԜPc+IJby.kы r%8V5Đ* ܘԣcĸ*ί!gxtm\>n|U'[^3lqLD S=sBi> ǴD\ *.sBAtȕHE|ҥ,ŇI:KGԛi%T be1>8Iߏ>?[|-5J,JJ\zŽ3- qL}qaX?|$>(bYDNjRUD-5 NԀu%NjYJ5 XU- "S5FDADA)b/ʮ lXt\eYk[>YKŕ^EmMG'dB(mb_P!pkM{~ 7{!öz'o.G/wx?b7z"V uw3Fw*4󱐔NM b >g$Uq¹Dz.[U~pkPi(jR(&.{qQd jDmU~l$.~EOĝbz;{F#,[x2b^$팍Y qir/u72F"9czoeI;ow'^cc#- (= ?Al" " ŷhHbm㓕c:b\ad}3P#A~w{KӨAir3GI݇[~pQDAEEp' /h4E}^mmh_K֥h?&14c%R41e16#.EF@ԋaS1D(fLLQB1_U' ~HՕFn {IENDB`dv 0|( 0" ` .  @n?" dd@  @@``  @'Q       $?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %VCommand2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &   Solution  Comments?/  d$(  dr d S    r d S @  H d 0޽h ? ̙33  PH@(  r  S iB  B .  C AJ:\Documents and Settings\douglas\My Documents\class\cs490 - patterns\my presentations\Command\vehicle-example-uml.gifH  0޽h ? ̙33r09Q(%S n0U(A ( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@      !"#$%&'()*+,-./0123456789:;<=j?@ABCDEFGHIJKLMNOPQRSTVeWXYZ[\]^_`abcdUfghijklmnopqrstuvwxyz{|~  @@``  @'Q       $?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %VCommand2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { load(); } });L AP %$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &   Solution  Comments?/rV Uv(A ( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@``  @'Q       $?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); //or load(); } });p HP 2$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &   Solution  Comments?/  P$(  r  S |   r  S $  H  0޽h ? ̙33rv#ė v(A ( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@``  @'Q       $?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4$Challenge 24.3OComplete the assignment statement that times the execution of the doze command.% Solution 24.3Rpublic void testSleep() { Command doze = new Command() { public void execute() { try { Thread.sleep(2000); } catch (InterruptedException ignore) {} } }; long t = CommandUtil.time(doze); assertEquals(2000, t, 50); }SZSP 1  &   Solution  Comments?/  P$(  r  S |   r  S $  H  0޽h ? ̙33r#ƺ ș(A( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@``  @'K       $?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example Metsker Example Metsker Example Metsker Example  Metsker Example   Challenge 24.1The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z  Solution 24.1Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!Challenge 24.2Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "Challenge 24.2protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -# Solution 24.2load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  Challenge Solution  Comments?/   $(  r  S    r  S L  H  0޽h ? ̙33r&   ʼ(A( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman      $?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %@Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example "Metsker s Example   "Metsker s Example   "Metsker s Example   "Metsker s Example    0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  Challenge Solution  Comments?/  T$(  Tr T S    r T S ,v  H T 0޽h ? ̙33j  X(  Xr X S ,   H X 0޽h ? ̙33  `$(  `r ` S P   r ` S   H ` 0޽h ? ̙33j  \(  \r \ S q   H \ 0޽h ? ̙33  $(  r  S [   r  S T\  H  0޽h ? ̙33    $(   r  S H   r  S  d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction Similar to StrategyZfC1fC  UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  Challenge Solution  Comments?/r   f *(AL( / 00DTimes New Romanv 0( 0DAgency FBRoman     $?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called TransactionHfCfC UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  ChallengeCompare Command to StrategySolution  Comments?/  $(  r  S D   r  S O  H  0޽h ? ̙33   $(  r  S    r  S L  H  0޽h ? ̙33r'+& gJ{H +SL(Ax( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@``  @'B     $?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %/Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called TransactionHfCfC UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  ChallengeCompare Command to StrategySolutionSimilarities Both provide ways for actions to be performed abstractly, without having to care about the details of the implementer. Differences Strategy requires the invoker of the action to have a reference to the implementerL w S w S Comments?/   H$(  Hr H S B  B r H S (qB B H H 0޽h ? ̙33rLk oLl(A ( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@`` 0(P)H     $%&?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %(Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction or ActionZfC'fC UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  ChallengeCompare Command to StrategySolutionSimilarities Both provide ways for actions to be performed abstractly, without having to care about the details of the implementer. Differences Strategy requires the invoker of the action to have a reference to the implementerL w S w S)# Challenge>How might Command make it easier to support an undo operation?*$SolutionYour Command interface could be extended to have an unexecute() method, and state could be stored by the command object itself. Store previously executed commands in a history stack.&4 x4 z Comments?/  $(  r  S D   r  S O  H  0޽h ? ̙33  P$(  r  S B  B r  S \B B H  0޽h ? ̙33  `$(  r  S 4+B  B r  S ԢB B H  0޽h ? ̙33r;m'č) $ m*Ab"( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` @8`+N     $%&'(?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction or ActionZfC'fC UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  ChallengeCompare Command to StrategySolutionSimilarities Both provide ways for actions to be performed abstractly, without having to care about the details of the implementer. Differences Strategy requires the invoker of the action to have a reference to the implementerL w S w S)# Challenge>How might Command make it easier to support an undo operation?*$SolutionYour Command interface could be extended to have an unexecute() method, and state could be stored by the command object itself. Store previously executed commands in a history stack.&4 x4 z+% Challenge\Could logging functionality be added in a similar way as undo was in the previous challenge?,&SolutionYes. Simply add load() and save() to the Command interface. State can be restored by reloading the logged commands and executing them in the proper order.:z Comments?/  P$(  r  S B  B r  S \B B H  0޽h ? ̙33  p$(  r  S B  B r  S B B H  0޽h ? ̙33  $(  r  S B  B r  S *  H  0޽h ? ̙33rГ):+ && ,An"( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` . Slide Titles @n?" dd@  @@`` @8`+N     $%&'(?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction or ActionZfC'fC UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  Challenge 1Compare Command to Strategy Solution 1Similarities Both provide ways for actions to be performed abstractly, without having to care about the details of the implementer. Differences Strategy requires the invoker of the action to have a reference to the implementerL w S w S)# Challenge 2>How might Command make it easier to support an undo operation?*$ Solution 2Your Command interface could be extended to have an unexecute() method, and state could be stored by the command object itself. Store previously executed commands in a history stack.&4 x4 z+% Challenge 3\Could logging functionality be added in a similar way as undo was in the previous challenge?,& Solution 3Yes. Simply add load() and save() to the Command interface. State can be restored by reloading the logged commands and executing them in the proper order.:z Comments?/   $(  r  S    r  S L  H  0޽h ? ̙33   H$(  Hr H S B  B r H S (qB B H H 0޽h ? ̙33  P$(  r  S B  B r  S \B B H  0޽h ? ̙33  `$(  r  S 4+B  B r  S ԢB B H  0޽h ? ̙33  p$(  r  S B  B r  S B B H  0޽h ? ̙33  $(  r  S B  B r  S *  H  0޽h ? ̙33r,F&)@lX "D,An"( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` @8`+N     $%&'(?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryZWhat is Command? Quick Example Generic UML for Command Metsker Example Challenge Problems!7What is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction or ActionZfC'fC UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  Challenge 1Compare Command to Strategy Solution 1Similarities Both provide ways for actions to be performed abstractly, without having to care about the details of the implementer. Differences Strategy requires the invoker of the action to have a reference to the implementerL w S w S)# Challenge 2>How might Command make it easier to support an undo operation?*$ Solution 2Your Command interface could be extended to have an unexecute() method, and state could be stored by the command object itself. Store previously executed commands in a history stack.&4 x4 z+% Challenge 3\Could logging functionality be added in a similar way as undo was in the previous challenge?,& Solution 3Yes. Simply add load() and save() to the Command interface. State can be restored by reloading the logged commands and executing them in the proper order.:z Comments?/r x ,A8"( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" dd@  @@`` @8`+N     $%&'(?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $SummaryFWhat is Command? UML for Command interface Examples Challenge problemsWhat is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction or ActionZfC'fC UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  Challenge 1Compare Command to Strategy Solution 1Similarities Both provide ways for actions to be performed abstractly, without having to care about the details of the implementer. Differences Strategy requires the invoker of the action to have a reference to the implementerL w S w S)# Challenge 2>How might Command make it easier to support an undo operation?*$ Solution 2Your Command interface could be extended to have an unexecute() method, and state could be stored by the command object itself. Store previously executed commands in a history stack.&4 x4 z+% Challenge 3\Could logging functionality be added in a similar way as undo was in the previous challenge?,& Solution 3Yes. Simply add load() and save() to the Command interface. State can be restored by reloading the logged commands and executing them in the proper order.:z Comments?/  @ *(   x  c $p<   r  S ,=  H  0޽h ? ̙33rF / " x1,A9"( / 00DTimes New Romanv 0( 0DAgency FBRomanv 0( 0 DCourier Newmanv 0( 010DVerdanaNewmanv 0( 0" ` .  @n?" dd@  @@`` @8`+N     $%&'(?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0ppp@ <4!d!d` 0h<4dddd` 0h <4BdBd 0h? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $OverviewFWhat is Command? UML for Command interface Examples Challenge problemsWhat is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction or ActionZfC'fC UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  Challenge 1Compare Command to Strategy Solution 1Similarities Both provide ways for actions to be performed abstractly, without having to care about the details of the implementer. Differences Strategy requires the invoker of the action to have a reference to the implementerL w S w S)# Challenge 2>How might Command make it easier to support an undo operation?*$ Solution 2Your Command interface could be extended to have an unexecute() method, and state could be stored by the command object itself. Store previously executed commands in a history stack.&4 x4 z+% Challenge 3\Could logging functionality be added in a similar way as undo was in the previous challenge?,& Solution 3Yes. Simply add load() and save() to the Command interface. State can be restored by reloading the logged commands and executing them in the proper order.:z Comments?/  @ *(   x  c $p<   r  S ,=  H  0޽h ? ̙33r1S 1U,A9"( / 00DTimes New Roman|dv 0|( 0DAgency FBRoman|dv 0|( 0 DCourier Newman|dv 0|( 010DVerdanaNewman|dv 0|( 0" ` .  @n?" d     d@  @@`` @8`+N     $%&'(?b$F%C%Mb$@K> d_$b$2'zĿ;"c $@{uʚ;w5ʚ;g4UdUdv 0pppp@ <4!d!d` 0,<4dddd` 0, <4BdBd 0,? %Command2Doug Jeffries CS490 Design Patterns May 1, 20033 $OverviewFWhat is Command? UML for Command interface Examples Challenge problemsWhat is Command?GOF definition Encapsulate commands in objects so that you can control their selection, sequencing, queue them, undo them and otherwise manipulate them. Object-oriented version of callbacks Callbacks are functions registered to be called laterL%6%6'!What is Command?Keeps the invoker of a function from needing a reference to the receiver which implements the action. Invoker often does not care Simply wants to issue abstract command Sometimes called Transaction or ActionZfC'fC UML ExampleRestaurant Customer is the Invoker Waiter is the Command Taking the order is the execution of command Staff are the Receiver Cook prepares the ordered dish Janitor cleans floor after cook spills your food on the floor Waiter delivers it, and probably your bill Paying your bill is another command you will execute Cashier accepts payment Busboy clears the table when you finish Valet brings your car around Z.Z-ZZZ]Z .-  ]  In the Wild!Where have you seen this pattern? In the WildWaiter example javax.swing.Action JButton may be the Invoker no knowledge of Receiver Action is the Command provides actionPerformed() Action delegates to some Receiver#"">L%("Vehicle Example  0Metsker s Challenge 24.1 The mechanics of Java menus make it easy to apply the COMMAND pattern, but they do not require that you organize your code as commands. In fact, it is common to develop an application in which a single object listens to all the events in a GUI. What pattern does that follow?Z .Metsker s Solution 24.1 Java Swing applications commonly apply the MEDIATOR pattern, registering a single object to receive all GUI events. This object mediates the interaction of the components and translates user input into commands for business domain objects.!0Metsker s Challenge 24.2 Fill in the code for the anonymous subclasses of ActionListener, overriding actionPerformed(), noting that this method expects an ActionEvent argument.N1 %  >0 &  "0Metsker s Challenge 24.2 protected JMenu fileMenu() { if(fileMenu == null) { fileMenu = new JMenu("File"); Font f = SwingFacade.getStandardFont(); fileMenu.setFont(f); JMenuItem save = new JMenuItem("Save"); save.setFont(f); fileMenu.add(save); save.addActionListener(new ActionListener() { /* CHALLENGE! */ }); JMenuItem load = new JMenuItem("Load"); load.setFont(f); fileMenu.add(load); load.addActionListener(new ActionListener() { /* CHALLENGE! */ }); } return fileMenu; }Z  jz\         %   -#.Metsker s Solution 24.2 load.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { save(); // or load(); } });p JP 4&  Challenge 1Compare Command to Strategy Solution 1Similarities Both provide ways for actions to be performed abstractly, without having to care about the details of the implementer. Differences Strategy requires the invoker of the action to have a reference to the implementerL w S w S)# Challenge 2>How might Command make it easier to support an undo operation?*$ Solution 2Your Command interface could be extended to have an unexecute() method, and state could be stored by the command object itself. Store previously executed commands in a history stack.&4 x4 z+% Challenge 3\Could logging functionality be added in a similar way as undo was in the previous challenge?,& Solution 3Yes. Simply add load() and save() to the Command interface. State can be restored by reloading the logged commands and executing them in the proper order.:z Comments?/r#V Udx,ARoot EntrydO)!K @Pictures*Current UserMSummaryInformation(@R           !"#$%&'()*+,-./0123456789:;<=j?@ABCDEFGHIJKLMNOPQRSTVeWXYZ[\]^_`abcdUfghijklmnopqrstuvwxyz{|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}k      !"#$%&'()*+,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi>lmnopqrstuvwxy Example In the Wild In the WildVehicle ExampleMetskers Challenge 24.1Metskers Solution 24.1Metskers Challenge 24.2Metskers Challenge 24.2Metskers Solution 24.2 Challenge 1 Solution 1 Challenge 2 Solution 2 Challenge 3 Solution 3 Comments?  Fonts UsedDesign Template'_txClaude AndersonClaude AndersonffriesDouglas E. JeffriesDouglas