ࡱ>      n,;7V;%OwInPNG  IHDR.gAMA pHYs  O IDATx]ˎ$9dzDUϗ 0@o{/ü*ӕ{PH)D.Qć{{Dq$8WᏏ1|\fl$-"4.T̛ݾ$¤H4 μȊX`ޙ_o~~^F{Q[r61G/ ͬxc\ STIx'wH03ō"9v=8t9[A=#]z4۽8NNncN'Oa&}5YKSM[Vh%Y ꣽsqHFڰNrNu*LRCfd?~MRU3!MvѳaPROKlI>VhkĘƞ&Ku+%S'r/re #cTjPhe8 4X/*nmFn#J-TZn@)닫fPNrx{f2ЎXD(MKҰ7Ti˚01L|ɿ4=lKyqUu+1?=m-HDkW7[LjFZ_-sQA55X+dU׎SutȷwpnḨG !_G*-SLկܔfn)bU wQCɹA.>W &,P#XcGBTL# `SNpL9۵,C]&ߛG͎ ƧK$9ѩJ/[H;$ Z.*QEW ?hV ooq9c&nVX) AEF) 5 U1|uТu[y%i QtͺأFT,flo2AEL(p3\Z%?ܦA;gA!)8Ir,9Lc4䜉s깊]O1ׄ65RRaq7`TRKMe]Ȋ IvQ^\AIejUϬ}@QZֵnxoiHUI-P-ud T 3L>Poh/Pڰmt>̒M ubӡ^:y3K` )kC{50I~mZlCɒ1E@OiĶ=s`]3}A'>g7'_eU҈Ȃg`?FWW Mvٸh]bPn='!Qlq=iAh"A; diVʙdN~ҜZ^ڥҺ;JIX-pxw삘Yl:çUʦS `^^j>MdBmvFfr. +ƎmlND ZJхC$Y F޻e)Ȏ ;HNR@^i=uXiV0,J1ǒZAY$azw:/Rm\+VANB '@sθ %OS i >pڛ-F5~ GIݶa۫? @+Y}ZYXaUHKHg {D\+RΨ(Na}8Th QۧE Hښ(ټ}/x/~63ElZIiJUGBsuL^ 0WIVIi==*VN7i1b_1,j, =M"{oUHq@DZQ7HΛe3;*B<9gطGd=IR-@ tsiG!f}7vc=6' Y36{BiJZ`9);3*Чd4Yu3FX8,y=mg_B@Ե28+fSb\XLVv5ִX9&Ttf~on9z6'7~d5*ӫNcq7 cI45YuܺC'/Qe;Tl425 &fDS+Sh(P0SfٔOBɶn9j}ӑ\&w>$T+%L=Z+PݣTx3)e;(H`B=>1iJ+kiKS‘:ϋO6JٳrT!uN+H|߻uOi)h)90лQS23B65w2gU=>zRKCssc(+hӧ|5睛;_QS9qm&H D8v`Ijxqȹ XIW1w2v{|<4:qȷ40(khs@sgAg^ZHЪiRsm" 4c<3'}h;_Lb) }Dc]T 6z8Fp'" b&.BhBjkD`ʸ&hſ\^T]KIúHU&YK)I>R7S¾g lJu-yypޭZýdmoׅ-uѐp:#ZB" lzݣ.Sm;u٢==Yq2v4N5nR,I6ىm_[u髣ꚦ>" 9ni'7wN'ry }-*vCt3EתW٣y!9qKg3j m4&ZN2hN^ݐ f'e饉Ӟ n ”NW4![2XaWt':5A Y|bd%PاvZ 0ԨxZNݤE3uҐBU@o*üb@*acX+`֗%PEn7vVWIu%2="h YYKGՍv*O}D+ŽPl%eӯh00u:8q 1Bpý.l2}።5BXH&;K+4v<̔W%*"E؄CGa,@ØYI|}zTud )8ztթQ 7djQG0M^;Ҙt&&U  2TOxZ}kS]Qۚs;:VPmA=lv3(NjfRG6[ZF껊-B>BVmU4S :ëCU"~b ;H)HQ$U6"WQ%OX1`}ڣ%&cS24f붖z2*5F@wŮM& g?.VV,4W,&;Ӷ{kge!//=&W^ k6I ~QHE꯫P:CT?nmM&-zC9'RD,o=4!v4ʆ"#6!1/:|ܩ"$u:UN #:ZQ,"o*H-*TQo6I)b\K"Z!Y-GB@] q^/+MD=nFh_TB ؛qfr*WB㟓 @kZcER moS*GQr^3;mk) рw|4IΦ[Iiw 7 c55Ee9:4ЊT|| t=FQST|<;6%P陬yfl?UP9dYy᜕DhIHŋ!h<;> EQX,ScI9jZ#ԒV<lޯZ X B_bnH;Dz2IEEEe}N| ,.,` lVF-ˆ`GDbo.gCKa|8fOKu9ηx'=lARRۅΊL@2ƙFizm hz6-mjfpI>|R 24;le^iPj'Y(p,J*=ڝ 0םRrhf'!; "(s[ȊTuMen'*ܷғn݆CU% 6nV($1rh^T.*6YD-M{x*nVBL6[U1Hv 'dZ]2"\Rv6R]w>dQb1JR͈Us ȘZ3ZjJLϗȥf6 r@|IEOC6Wtoka*YaΌIπ1ߕDMZN޲}ެFRCQF4j,^ OZh+Ξ`TrqhFaxU#6lҹ /^ʤLAhӼݼ+ҪBӺݾ^I{i=GY![9 DoBl_ Jm;PDگ~U!SCUOṮ &e]mgQA!//497XLJY0NYwW 7.zB3liXh'ͼ^*'>†p5 3Ϗ7q淘fI &jsTԕ.aDv E)I(?^u5JLZOPž3ZGmvm~!G['Q@&HPfj1sZG?D*l<ݎ$ >[IG&FɋۍYUbйU)&ZS=AՑ.~ܲr9WևD΍ }P9yNjtS_њ9 i}Vwl[&+=YMsn$̵ʲdJU$@LOXPZ$+€EbB|mr{Zg+4Qe'Y a+K4,k㚤QPkr8 {! ~zi٧XH#x~ybE(9[#o3nƹh9}O̼CeRQr{כq h V`NR7rk 7 XJ8Р xz? }hkb7'0&{ڃ*_l'a5J}tƷ!]aErݙɉ$5$cZ=Im25NrmJT[+r"&8A5 웳PP4g;Un(iR$)ryN.h\?m 4GPZ:*ߏbO-U<>Ofқ-KX JEK|Յ-B@oREyuܓ~@-6Y#nƧ%E2ÛTE3yxJVI$Qet$'E\WIlk3,gHF J9jUAq]+j nsӽM;~7YbՋ?T7Z[T;UY#&ho]"VJ+ ZW&DY劈K9!QH準Sz :&_jo V.,{;C:ÔU~z\||]د__M1FHVx~h~R)Qfn?wy\޸~9o&$3oouM4)7u^`V9skQIkMӈ! 7zs~v||8D#q?->>#_Ic2 0Vʆ_:O@3xn/_J;t,-=/fE\z;to=Z2^$HѤ?x|{3;ϋ6xi)l4?EȞڐ@9/Wss(#,.7)9r9#ҬE`HU&K*jZϿ8)Q`3}~>,(Nm!&%{oׯFp,?kppՁ'⒧$P?SLjAIENDB`n'R5u:ut$ 1PNG  IHDR,gAMAPLTE """)))UUUMMMBBB999|PP֭3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f̙333f3̙333f3ffffff3f̙̙3f̙3f3f333f3333f3fff̙fff3f̙3f3f̙fffffffff!___www˲𠠤X"N pHYs+ IDATx흋&?<^knĥB\tޓ%T V(uv{ B BJtнe)Sׯ_ BS(NSկ鿇5QşKݺ-$Eׁ687t9# '>eqdڏ\Lf$:ty?W~j;@V֨b ytb(C<9= 8*ӿ V 6Hۀ![^ Գ (')ZM-L?Xp:UhvvK!m(EpT_$5'0%70et~Ƿ'_~bs'?[eLB4 ӛ0? GtVcUHt>.]~A ],@ :fx耩gMGNSPq`hS%t3 S:U) :U:U@,<84&5I'Ҕ4* @hJ~PzhgpL*!:d Vb1LdUN,e\Y]Jr40ghofD[O?-WfK&lYYw D5Ea/*}3(H'#*XW}!u*&/++M\+n`m=ToRXfk&m{ҕ*@UdSjN8'#0ʖ+#{Z*_ڊ}%\QrYa|\4#ڦe"jyaMno:wroEI1dtU4 2I2.wHzC>稸P4i29˝T 8 KרY;&0ak39&Le$3o lQId($wi4%&e%&yG4O^de NQjQ0yOҠQ sH#q  JSKm|!B]p3@zw KDRl \26fx h~9FSܱ 6<.8BR8c`j![/w|xʔG%*PcMae_gXwY)oyC @_mHކcNsʃo8е.rKdq *p >п`޵>,(ͺD J׾*x|NQ@b*)N>_Gi~iTI O۟洩%2T+$E/'Ic ~L&v >_1`jZƲҪV Nkl+79XOcLN 8K&PC,TmʴnQ`l*Ճm&f9n[>v` o};hka` tkypL+ 0D;h_ Jyh\ͷoZ a"tB;krscJT6)8>Qg4xǹ 8]qp6a;ʬ f+z g#U?Lh_5/-v@ v}5bz3l泑:ck s m@[@[wm ~[xv?j??΢9@Uv@ 3sK}/x^O,D=]ui$:"MBm!H3K6ۀ1uUp5fՒjLEEU: } :!PLGN7Z*X/ս` *Iy>!jU!p~ b Ő}/j I|zdDt-Fpn,6l3pQq<{4_ D / {[gvhm `Y/k[indg0D\c"в\$[npY+"{ pRs;0=λi .w#+***<:BSnE^w[CwR_Khr+ڀh8BZ`heix oNj<6B/UOi8;@3}MoCvÇ-` &4zs=9.{. ph?3/<&d7& cKoTі+/*`@>i<ֵЯ|j?u8 ʾ}G2}X9Mdsbtbr P|E; 'TUkG8 @԰*ܟ _.Љw@J T58@ e,5;e;)[N/@u@8'K'{W9ޝ^@#6 5\5m@/҇5$0iܐ\%AZgtqe~.i>ZZVXM!p@K Sy\ PGhpi,BUZr0B]qNGꓻ\ ` B}Կ*Bꉔ\@h[5^ @hzT@EcHTTHOPR@h/e~#,7Nn TV|2# u#_ b + Pr$tN:!P:PtBNu8y DjRz`n |PAP&@wMD'jPO/صeyz:֪:=mqPH)gQC^b4"U'){ꀼwB^xgeڀ4x5I0q*(MR8 @]34"` 8ܰ Ofms {Ƃ ^URp@(ARjI)gԒRzIp^ RzIp^+'`|@{!ܕ#!'J =88eJ^PRr@oq*+^CRt@K sWn>'`T<]q`|@ "r0\~>`D^^0O}$ؤ^0/#6AcHlӺ`Y;: EiZ9` 6i@ i4l:|*8?2l 9۴_i8` "_v$Ʃ"]oN $[6(`8ʵ_8z ~lXwW|Z倯W]+wImjs1#@XT-`Vhm: LW*ZRzDZ24y- (@1 Eq8UG [ R"`'l9k6D:?@)v#!h?vဝ4>h%_%P ]`o&k?@)PL  PU_ c#*f&)RHNr!%P&od'#ܳŶ~o?19~?@v9kYC]pǹHg> ~Ɍh%VWw8P`{Bs{XKuc>`V֐j#'\0Pq J$#4'aq|o `}Ώm+b)Gdi(.H/Kޖ>cb-F`9`Ǭ 6Uù1!v9`/S6`W-̓iߘ#0J ]h(f 6bH` m׃"GRm `pfBlt1#ش y Gؑzsmpe^lmp+{-]$`o/XM 綄:J6Ə<-;nw{0L9P +|te)!9Wwfݙ\ [6^ 'aLu>,2`3DA;xu#P;xup/ y?>鯏ՙ0q*ؗ%Ÿ1Mh Y⮸/kf. o׵yq>`/: _?>h@AXj$J0 FN||`$/mmG-X]ltLtBhE0*1?*]^M[[ xX[ܱ/x^y^Hl-v)T#Vf1U*V/{ν>/ްA/8T-82G!qg{SW!olMn Dwf_㱸MxCsɳa(pե-n4p hˉ~̍%IPs~++אzɯeqbxosB$Nb 瀦D`H@9Ջ`I0AS@tB!)f0NhMG'䒒`%\07B| I0 i )f{ze.à u hjp^MRlt%ថ+I  DIpO'J p@-)嬗[{ ZRY/):rK ԫK SEV_ZR//)ڀ(x:$OO/(PR:l%^NRq@{%-pד{ۀ^PRq*$8)xEI H~hxAIb$DI hg%b/+)f0NHVI nj$\0750%@ْ`eb$r`^XRt@33/,):/(!|cA^NRs@}43r`<r`5cJ$'K1,5?( ^OR8`wϔ2-p+J 6`n> ,O;*b]` ?xEIwmIfI $x%IIpOHȉ PKJ9%u@$,EW ֒RzIq> ")f0NI I0 ')6R$l/FBJ Y@8OZRY/)^RjI)gԒRzI% PKJ9%@8rK  ђRzI^R8` J1PKJ9%\K %`?%JeK p@-)嬗ZRY/) 9QRjI)g6rK p@-)嬗ZRY/)^RjI)gZRY/)f0NI Fi')8EDbI@Q8k|=}H>iY; Iٴ젳iQ;t!-+뀦-*:^ @M':A m@kdU0baB 5`LE-.D?oBHtaq ՠ*0\+Ϭh0XAK8`vD \00Бþ@6EmQC tݴpPO*X FB|@hg-7!5\AK%ߔ!t[BJ]s#G+*b{}$7ӽ>6(+ <&Y~WٗdFCFG:_ˆ}~,_eIDATy+u%ܓX;R ͅꜽ̾{۵^`P@3[,3q44HF%Ҭ?a4`ϑa*bXnꜽ〹3*@ Jʞy@b (ERpK 5:m(oNHk\`m@m@{=_v뀗$`*pS] Y+{k0 /iKA3Yaဗ$9[D7z*nVff{}dGH~u_:IE(JBPYJSU!hO@T,c jݵ:O(O^OزU%@W>"5$ėΒb ew2jI*`PZUCvr&'qCE /gD-4{B `D gԦ+$T |OY`>.SP*,jpewq 6`.YTY\ʷV4kq>DAd$p h,ˠ c0EGprW-<=n w8DI'ƄYZ !dDwVO0s].-:tЃ,䗫zV2nWA de)p`J Hr= @rM yS ]l 催 GcѼIc$E0S@ \p]UACU`cLo;l! 3 bH)&|W"U >RL'Qq}IZt$ az'r\!Mʖ!UmekAXm)>s}{:5t&g-28R}FBIg%kgelvrrEX'f/UOz]I]h&IENDB``!n/`bM_npL\&gV~D2(<xU LUs˜GBQP2 5ff=\@5MGEYYsf*Җ:gISQri{  懲1Bsɾ8ծa~# #8^{{F Nx{ނX2``_i:Qd|ٛtX1$GoDG pX[^WWW"Ё4o/sL8x`,;c0d0 pEi#'|(yB=Qüd_+.Xoܥ5/3>ffOP9(i:C!:?èD}* 8e,j< ϻ&aFfs{"Ezc^54HdlأsnP3.vKn?p+,bbKcK=[6~|t_3沄!Vq&r|{d7Qe_"7"#PMV-[mRiV([H^ 2ڞ$}!bĬӛez;MҵJV\b[Vn`ner2=-rD[ j$>6PTy%,sm,bYj \6ײ676lpY~_qTJ;\/iI7BND+\;F[$Gm\li7D,O2EJBw߆𕫫WmFc 555<)os,BYͱR~R6O4k)kx'5Yҕ3-%=+qV.D_2E,DX;qJۡB[BWkDk$Sk_5ԡaVRYz ʖks{ڕ\]xM.#4@o:-`! MlO9)뜬 u@X<xTLU>sE~H1 Me¥9F shIJN -EľSԖIsYT+t1_PЦIL[w{9=9{Q!_,LT{t$f;@<$0 8Wh~8!!$}hPNm~(>KQ72#}C)rE>ʯ~TL{Mmfk1Ӗb[Ev1`_T^z׋.2\tJFKD<@ j*)Q'L92ucq= A gˑjjDQnFuLW{;tK^۵ K].26fu+@/szR;{ZI.!f{5T:4;7q=XiKrZaJz :O]_!qrC:^sT`JAXN\#Ux+g' Tp7<ZiPUyޠ>jQ|R=ʟ+E5ZAj4^%>8yp狟 )"5,|yIzAVI5p^/Nn<>Wi#_\y׼DNk\f5ż}A>utCt9BzPU* 4A_7ia'SCT K4R9E4%Q w9xr&*l T[h+'a#RPvH*YtFQ~ӳwnR_sPxL.O6̓\-wզLEd~j<9^ ߦ[ܧ cUpbQlhOn>}$B賟|`!ܵK H̆ p^@K<xxT{LWUν+t2:I*щW~+ĘHNg&iBK#p:=PrL(\壼ܾu~|}"8д E{&-̊Zo=t@@A&Fޱ[a:(x*b^;Og9201a+ 2FUkF ?G}u(L,D6FC^98a]_'pMtПBz.REKpZDі7((Glfq=m#L͙$tnPB3T`jOrCc~/~fjR4J(1!YdVJy]}frJϗ,KK:aH|G;mo?g&^ibu<Ͻd}R5/ ?D%&g&,h{u8GJ'óHƋ7 ƉXSQ<^4^>O!I[4:snz΋~U DX^W *vE,A,`WLv]D;vGL`(P eD~ɼ =XFٍeY)!([j-[9k"6 "g}Ccec=ϖقm-;<~C^dvC>1? aKcXFȲA8,7a#"#ڝMv_z92vc̼t 1)АXPpN4T"i,H(NrC!b HEN QH+HG! IB]ԥ!|1S(HKv#qL. Db$*M2r$B$zQH ՂVm[RF9r)QGxB#7>|j>]]V$W߃B>o} Y7 ~;[O([ |'ģV+)>g?tv#&3!&2_1ea,VY1UG4@Oh 0'&0_yR1sXXvX͎~eq]'08nKc8rWDm{3xOq5~1+Sxudk)4/_oeA-KC]@gZTXa1"~6 hAq (Nj#ӆb?m%vb7(vnb-iJG-t gb<_/hGbAqjS4#95Gޡ}ZB>\ƇUiYU sC?MOnqIk z](W} 7vW}l+Ȑdfw!,`V4X4E@E!8# "/JEN:ZdDF.—.n6Ӈ!<61KBKFEcnPR -}30NܴKt,IYsk9F#.[ nz#m!9=ds{w=}\"rv>o<*׻VF[(wLe㲡}No}=vj8ggvh$y߃=罡'_)#+&!~1WWRD*+zszjTz D9R4֑&"\qFUqBW#]Xr$}M{ 92Y8"dth|}k_ wN &RސT&%YDJf6bhzȲ,m"g}Lk \qUoGzZ/?yK=ME-=REZUQAU_,W :T*߃% |ǣa_OІsȇ띎7C=Ag~0N ljۏd!5/x߼ɝr\=,z_p?ш(fF_X+m,Gqܥ{LHPW_#)vnhȎv;iWa]] v^v~m`, L4̗b90?Y~ÊqUV?ǴGtGcYbK9 ONL`WynvcxQfLT`\ƹz4XP._~Xőg?nkegͯ<[k8R.f%;y=kl)&Џyo!y{OZM hQޟ}hIBiLКxڔץy-ځ.mړWy:#yYߢS'^.%Z6^H/D%NMsb/jc^R*9!Zzm$:f3Mb X7vPG7=529uAQYǾƑw_7L+Cp|wkny.WdnƷq|א ||Dd@dEVd#L/.ޟ)ދ{k<ޕxDE'At$e(_rrXZfEVKū3$[Yr?Igw+kzo@D/D;cO#͖yg-=ԟ4t'5>M9h@ CO}3Cxu}t2gxҳtLu0UDnX1/+^52bxQQQ8cvcZ{ENSY\WiԱ$ДY)z3 a|ƝOmWHGקLkt+6 Q`;،pM#5=r:M]gT03Pa+G<\)=JPy6EW2ꖮ=[7ytW>ꮞ1pWj0jttBSli йz?^@Aoxc9ZyVb>AtT$V6TQ *[UH PQJf fɛYS` bb-zM{xE`s #5}ċnjP52ML@b9,!v޻qXav+厨ѻ?)ޱ q"s_cz n<P\=$'^]suvDUCg%rZ8G"0jɧ&6'\p7xvb>7zk.FЖ`#t5Ś|郌f\ 4yE팽ftE]}D Tog,h)P u؋ءo6}=<:Sen1+JW=|K-uE uSeLn"eݐ[;?sݮqm U+၊|j+Z8"tQar*11lџ>ѕ"9*=r_K:G FV#eCV&yd%RPV %d9RN%5[!5,Czc YHɪd>X)MٜYَ\5ٝܖ}_ry(#P!nqx7*Y틆ޯI }ʧ7ʴo;~:-de]-x o^ ە|H>y'<'鳇g9Zw%#[f+X`bUN|n#:ZVpZ#j[Y*![ʂ 9v{-urXkO-8XD\GgʹIʽOޣ#(,Ce>"7˱;ʧy| @mݬ<*7[ܑmM_?{8Ǽ$n5_R`!6 u¶\DNm@% ;%8WC xZ tU+(!A@X AÎ *Q (M= & AD(I\興(2lTNcԯoݿUӲ^*9GVE2>˹z28ݯ>^^E0@~}=KxG$wI;~CA.~BfYͣoS]='Yy{XE{XyHVy!m^IR6'9nϩ&<N ,(:Be Oz cΓ1(v46v|Ln]=Zf٠c5v[ {nRvh$Ku1ǎt:YK],:vx6egE81(XaJ1:jk_XP<d8"oSGMk$&t._s1My4|G}\t!oMׁ|}sHF9CC2>ہ@o\)s݇uWήs@nŶžَ[SVjV4OJ~XRV~,P2v{qRVɤ+;~VL:#n:tw)|MIݘ92z! \9- 2\5 u-MA&r+3OP (ϕYc&5ή̩3Q)Ct=UJ~5)W:3:;؋HO]d=![-HY}PSv 2!JsVe!clj;0jRGb⦅Zd&+W񜦋./㎺ۤuGؔƇ4B)xgҧyԱJlIS^ʨsDxIc?@cTӞ{ k"Cx/cSGe풩LRΥvv>uۨ]H)ƎS[7P]O+8ǪH5-NP~z/'a|z+~}ډ<XWbOh{^)O"qMsbc53iՙrwгލn^2o_Cz re&8n-Hdzj[-h&\mNrZqqڎoЎ@W_͚ռi>v\끵@A秡Bм<›:LtZu_{p^ N`mӿT2oi[onX[E:or ^MցY˶\&/R3]޳D nӹ!vD%3n%+䊠׾d^\+Sgy+sXi@{ b s{L1HcްӭmÃ\unY|'NRg!tcbJvbBC^Yin>㹕==Xts/=So}=ӗpΡt]1a|'9lNH,;+wk 4/K,- qoJ"E_")f%8^NC_£v{(NAyNwLoC:`ڃbHa_F8O:_LYHG`lΧ)0mɳgs7s:;OKNЙug] 4চK5v}e"~T€"sVbҺA]:뺯VjGz7ܘHl 2"ǡ]{B_n'ev"7qݜ^n2$5)?{]f簾'wS^)zE9=/{ivE lu,UWK]c%İ@#Pb_| XMJR[%U}Z_ons:DBµ-?T8(!D崫q/GNPǮ0Ụb2eA ^#eUOe?+k8!/tR,]xCw"\\iۨ;-[<^APhaԏqBy 1f4AXFi< Q-iLXEG'7OS Gjذ= 0%WR i2#i'hC1/:?"bu V!Se;Y؈E>á3pekOJnl tWװݡ;}_ͽ%~K`! QféCO?\ WHNh;x XW| JP&D:*uN+ 0͐LM(L%?I))9s~[ibc)~T:%J-=nc{v?_sB(ϱ?p ?XD^( D 2=h (74BŽܐ4 J4~Khoit\7[v!j)ql֭0\v%\"(bKu.Qx$ni^պ?uBxl&pwR4uqpt_(y;a*,p>S`(OC 5Zq䠷65V_D}ܯB΅#j$lWhehO(fVs(K"!7]I-Hng$񟴡bwm7}r*WEDJՎKT[D;Q \Ǡ\-K ۶kzt'.eh!ɨC:aXf87 ,|4H%rMy;&aܾxӜ.i=5dP=tL՝` YP a|iZ`KBūj)xFK?!FEWZc*L:Maj +e&w=*{`%("Kj0r,D@}/&kn9$*TTWM=s*_VC| pe{mGjQezڪ7WtJ]#ϨurdMT\gmV)cU>';wzl3e}A,N[/uHFLd>*g5R/RJi:ZOzz^w:Ys=32Lqh_khOTδjvh;>EOtU'F"$n;>SLX648::Gjԍ(rA'y ]фО\`b`IBo;M%2UAG j)ӂ Á;J%bw~dK$r-r9Н .yYq% ~ 6r,r*ɭx#h.|^ʕ 'B\7 F@-wjk'YA>aee Ʊ<$}tN1&Xolio ÿp2S G0ϼlfpڞ"wD'akI9=m]tq%rZ_Ũ*6W)P|FpEmS.q U+3|IC w!He6t;@1)6#x ?BGZ#< .x`#0KXmx]k 4NdS<~Jۜake2UC3AA'ri t7jra$6V8T~c,@sy2dnhp, j9Pyp#"拡NC" EΖJV1YWlPq;uQٖhPG)ռ%כrI]LsgEK2D6։<ɳ=acOg oʽa-W1"XevpYW~k}&L^mVޱ>|[-%{kA`!k|04o,*FwznQx?N0?; r2@2".ZЉ[otA9+pLP%6sI?±~|Y@&X j#9­H ~l#!}L|X|AaE !zq %EBdY1BRi:`*_MnwWz_ ۡF㲪83 e3-/} lL_Yǜ0Xf6{5kSXZrh&vn) $Qj)L h&J_W|5\y1γ\|5\c|>Ovʧ<(`! V||J{}kO3rh8@8- xWtUU=Gh!iI .MJ $J $> REi@DDf #DQE3QA {f'6ι{}>Su"iU*TMGItg*#52z@ZTj'TF*5E19,$ONLHJ27$!5&1$aZ=+B+ֽ{3`1] r<*W堤JΔK]"q_M"\J* @vz}%S]|9NPVkXf7U[;6*u*N:|V em? ]T:u|rSU[ @:p3/{[ø5kXYLS:_/z"_Zqz.OdrIgyYv^cZS)6 ^X bvNn~ST2DaFD%TْReʐUVjej\Pb1HOG eNzLK$^ Xr>)bwG©Jg\{f vͼxg2}x -ҩ 6g`ZG+ec-} ,*뒉bۑmzŮOo~t~޳p`o'IQ_nIQWy4ߙCy$ZgrF1*vZ^'J?iF_W /H~u#7~444ӐM-Zj4=g:sA6/ bl4eY*Mf堙%89gbG3Q3NH4AK_yJ'%Bzd, RR[ldS䘙-{ >]Vf$D6fr$JoBڛ%osP9g~Ksjj#ݣG;_x"v/* ;vu:JbI)o!@zlNI}sJ5mPm <0u 2Ip G4լ  ~_ o /  j즁r9)W(\XI8'Їq*zbзlI*p$oJ"{P{VsS*f?:^Y+[+_xRSaUkQ)^FLi*XeTm$\S*QQ\ :[c\VV]ɜq*Il\v< ?c#&aKdOՎ*_nMC{S_P: O] W-`OppLlr:GTGsZLuu>XBF/z"MaY{8BGE@?BwH^'z$92A'K'z4<]>IrX@Se3钥%QK&U SxSUy-U_Q'L7fڪm&@m4ZSC4yW2xۈR I4mry'L/^ kg.89\ g8.tsʙNOp94'p(H9PylZDR3ׇ8iӆv@BJ_:4Ƶ?B:CxxPE07dJwZ7!?p54@M&_h]+B$L%TK0n)  }CR?m<~kRa 7Kֽ3e?5sJ}K9ZVO9Qur_0ub O\RzX~xEt?B[BVm8sHFh%uIj)u #PJZHI"7հ`J89'0uԊ)m -䥢RZI ߉Y!tf}R7DXJ߶AP7o`lmu9[/̭TKRI J@7rV͹sXҞ\H;7bu֍BRʵ;is|Ɨ(}mI祔\mi[k66$N0Oj~KJRT V7'V0䢨̪:5l4fT뽕!cIMW'GӣO2,+F(c#èDU6Bb5!aJRTW$SgOKnco4YrB-Y(EUk r|֥^oZ{f~j碕 /~j碕 vDuV u}.Bk^ڈ;c3=~9=_3\Z-i!eEL:̞!.2)AAa't[pmp3ZfpDbK֩*,\CFqtꚬs:$;k=CrK嵲a*t љ%ץe`ˡT]12mn*:o})bSb7:FtTܵMjʉYs$~`1abjlqŶV܄H\qƜKV*y.dծ"UwKY 6Hv"eoTx}_MuKrypZl'VQqqdlf>rZ+p0b맻rر"ມs|R?5O5imH19./USR-J .JUi|RDž[rB7mLHt{rlv^M9>kRa 7Kֽ3e?5sJe?5sJUTr[:5?l@' s8Iz̙T6Lff4[IΒvAlSr/2G5I9ik*JRh$k=(?C̹R** ?LLt4 hKn8Km} #XMP`5]Gyo+=34V1ZLv-d[؃paeGjDw[yPۍ)+Io|bҹ4TzŊc7N& C:qMUri)\)2(9JI'H\pZJ@lGp r|֥^oZ{f~j碕 /~j碕 73tq53n0]9S3vڹM@ߘlvP?0 ~$.<\0*RڒI+RV]ZlbMmjK>ۺH BJEJq _rNcMU"GYVJ/uNIr''Udhi9'R )_+,mZIk_/T%9b m!`JR@P-XYQx_٘MŲԤݢw'AI 6 OstqTf"$fsrX j=c13/9֎C]iꋨ)6M*p&Aw f\zKSnbCR%7ҝDCQ2PVí IQJA&5zױ3e3-+e"DcJnd.`Id/Z>9E+ _>9E+ 3%ۨ JV$ aӳG6*S+!*KX@@ csT~~wOm^`=YCm&3Uu Q*]*:\у¾~2FṚaX/56sEtMF 0l.%P%eZ*HH*7ӫb|ys/IA[Km(Nl,Htm>D#?-z)BUɺQ>uHs/Tۇ YYA҅@)&܍~kɥzLHoʎ bPTo5]Ik[fM9>kRbVUV|XԦMUMf\V Bl;h rں r|֥^y_f P2ۗ /JҠ%WIB-mk x`Ow}w 7 x`Ow}w 7 x`NoOGu=ZR[JHE~8h7SK)RB%V\yj.8u ԫ/k_|w0`?٠FB^! lJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222^"=!15AQu"'2Vaf#Bq$3R.!1AaQq2"B ?j4:\N2ܴ5$p@&%1BImJt:IUV Za)% z+G,-8mÒLEZBse''Qq SD]e,{m>JcP)#?Ϩ|ۃo>Sn(@?Ϩ|ۃo>Sn(@?Ϩ|ۃo>Sn(@?Ϩ|ۇfj]w[yPۍ)+IoawemAC$`!_hSTu8$gSmpp pz)ʹ9tդfp2:tr V]' pz)YZU.mJMAL2˓)N:}Rq d9eegbLXk7o{ڹDz+KJiM9NmKRTVGFu'`8uSU)-L0.ML! R ZJH!$C/zRn^nG찙*)*,*Np@XcHMT癒aO̼(m<I "IXlN.N0t:2yskvonˡJjζ̅)[ЗJOΞq(`b#:HfCu"]%[j;X$*$;f4b0'=Њi&/DBWzE4Ц&^--2F̃Wt:m^컋Δ;A#!3fUZ/0s-3 ֶB1 Po MWmP+VAǻݝ{8eۭhX’FyMog0ʈNR|w;G+RC/ٽG3/Zu6-?sMC/=yij BR%=kйzo,1aI0A䢘Q+sQ=#b\OjT;A bW\rsr4٩ oS 0NHC>F nZIfy&Zi*[sZJ2@((tFWH*N,|Ge{ KKr Ejba   zWtʅ&̔KKq -*e 9 8y}ƬvCTZwX<CA ֈ˸+b4Hm+0tlw?aԄ+k~TӐ[5J ,v#?>Ole;à|E1}Vj=9T]MU<XPPArteqt[ϷsR g|"E/2ith<vgbv~ѪTj$_Ki-P|{~_b2J#G-_4fW`GS!~9zסޣZz-^Z~*碚_zW=0@A!ī%7Qml4FZR6#0rf.!YgHNN87e xw ̮w}zށ_{V颢*6ui\pHh{a15ޢ] |ҕé $(aJ'bq ś?,ou^dA!SޣZz!~9zנB.UE5 pz)`:ۊq(q*SjҰp{?؈V*Ҵ*LJtKBrI; wo"1eOIޓSuE劳/P iYnHvIĹ ipxLI4s{ ~jMyӉ)Z2b'4K. jχgGIA^q ; |Lye?'d.CRfݪ*bMA,qrd9ggvA Km6g HI &D(e湦wsa\HuI*J 5!.J;IqZu3ڕJ9E]L1\mSI;-( *#cdȀ 7K$#L ^a~9zע{ .')KjfYh'/nTvN o+7|V^0F\=~Eז覡UE5 ꀣeM)a)Vp;s&2nJ&ԒK ;o%Z(w =TK-HV9d\6bҥ%?BTg;9;LV͆_caEaSu,^%/\-h JNS`' zOHJ$Ya,K2(m<IܝikOE˕d>V $Q0T^KoFZI%ZH=*zxjz}vDTS1.TDA cȑ񖎩6S&XiM1"M_ ODͲOJp䭵\LStĉ VT{m{:oIz՝YymhjۧhU&(T кJgY1 Gz-/6~;,6\*noC=R1,fX;)@) myN99zסs3K/Ͱ̂Tda1$'B=㰆;7|V^VsBr ^-C`Pͷ7$c)P^kAu@ScyAo7n(@?7!O/p|_SR 0#ho[.jiɩХ̾ ˏ-E#ZFq@n\b;K[^PNG  IHDR`tsBITO0PLTE{bKGDHmIDATxr8zݪxH$Cu,D_dn&\i6ć aC|6ć aC|6ć aC|6ć aC|6ć aC|T /Ah򇙆ѳn=8`a䋑3 '&/ V_ăMEC,VVCɈ~slHC&L3s*҅ 1`C|цC>6ć aC|L^"f3o6ć 1m(o=ѱ!ahDɂ2tƿ!zÆ7dBw4(nȄ87KE| 'im8eC G'}: $\'oB³ABK$6 "plh9" S_WIlx]Y&0!fu#.jh.bK"_ò>VĊSCP>q" .J(E . A"6$R5l#Tl;K4U>Z¯(u T꧎uHP8T"K{,%4OP¡a)#:dhح0bC#:7O1!~ 5wn8&⌃p,bN' pR?EY a20/!3Pq~xD i a6lcᐵ.6*o3h0)!,2(>I ;9ıIL| m4[qKz5MOeS4Z&!1P5(-;. GadGaaJBXbrÎ3*8HK4T2zFElUAXbv–9c=m|%GT(XOaJpџA1GBXaόiZJXQ$<0d4C\/ a!og|y3fS$j=㿥gZFhεFBXdo<鯿[BߘϒCBXs_k63ן5 a>Z|+5" aﱮOKwIxІ?F 47-a]Kٰ5WV,ix6~J¨'~v%:/ϐS$<кSb7$  {6*^_c($ _OƖe:pr=bĕ".hh2nV$<5N(czpxC Æ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆ!>lÆdkxpс6`zpxò~.,װ﹝+%Ї]wsbDƆOͼX'^^e2 6t IlȆ/ o솫$Vܗ?mDlAJ$ID6||,\DX$ckX/7nkDXêU~slQ 5X H5~V.b a 6ֈkxqct\56*n!D`ëG?*bIl<G{mIx:ܥ$%B/swOoe(u}ß-ioUF`a;:ֈw~ֿǒ~k*!ְI06;Ioh0Hߘ/ Lu} Ԋf:T?rC0#%}?77`[%?w7 AXiAùbpV3rzÉ0a ni:7; uHpL !C0݆IFD%Ұ"(aڌyjag;b^yccCB^je_K"^g[S^}W~_f}Gw_oa0[miapў| ๡+%6,B N"eçnN,^d* .v ~k^iJM.,D& o7t쑳m-7tXrmBik?gsG 7tXruBz:kxo 7༆n plxo 7 9Z ߼˾ Kkw{شa9#bٳa-ůJ؈5>ϖ ,?rBGܱan_No(ߛ^5aԢ!& ?. 4 ~\piuBMh 6llZU>A> SѰ1ZEŎ mj lh1ZCɞ m"FKhaC64mg׆`ۆ`߆s p"b}pH9W3lUCJx⇓F`ũ -$~8afpUpl n;:X"[Ú߆`Coǻ%Jkǻ%l$tϳF6/F xNjy6HBxʆ{kF #1h?<z{-6cTЏAc.ox>zELTwb*񎕼UMTX#>5O(5"Cax7, =u#6x]CzF8 rF$w(((=e. }4Ժ76 p %TF"!XN³a{D~`D ƒpq AŴzh$Ұh˾splRP1F'+,Jè6JN]pNnxwqFarg}6q. +/D c|t]56g62xo4Y_FkΡTwm߃wꯢTذ~z3cJE5F %ﵗ!W~P v1?IC% `pvYT 9(- MbhYB} :((^6p_¼CKBuGm`3M ՅN9~wX$<`a;79fvn8~v#Lp ''!X`@C#`&:h{ƻpzþ܈YV%l<6)!LC8l<66ux(QC kWBp!VwC'up䝴~P8=qHհz[c:l>ai6̊0)̆IaCxzN SulCfÌ1&0Ğdv0|!>lx 1/P6D aC|2boX1H%#B2dC2b5Z Y1fZsiȈqh:T\$TlCwCFFT #BUĊ3I1 r%*#IL`C|6ć aC|6ć aC|6ć aC|6ć aC|6ć aC| R"TTIENDB`F F߳Fa"־ruJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222^"6!15uAV"'2fBQq#a(!A1Qaq"2 ?x+Cu'S5;6?l@%E}G[ Q9SgyJm2$ p X`q|TblA؀.;N yjI]ӄMB |6yeQ=C? wʣ񧍽zT~59zT~4P*ƺ 9zT~4P*ƺ 9zT~5ySQO,sA+75"4 n U<G4Hhs^,AB_|6%EӺGAE[]O s4`?v\wڛ|#}naOU,,{3Ys52 *46I:[lw44cvJ&|n8=o겔:Y_5 Mtl8!dSpM_]CI=;R{ݯ ,tnks'@I{HI?[n{cq 64 ?Xet5S ]DbF}>ͰtӲ<=N}txԸUF"#sXy$`F E$2ct1q:W}k'ETD@~%9|3F"ct /Y,)lNm 2R< ow;ef-=Ъ2H+ֱؓ`ipw˫a6u)I\睓eO?<:Q_Wm ڻ*񥥆 JvlAm6ܝX w쬡ERJ2nZX\/ /DEq?xO5ĺٕɼ]laOU*?xStUJDDD@S7\KP)y%̀f9RSe>k'ETD@DDbb>nق2j6&2BQ`#$ "nH6EI8V:ڈBb[PX8G@6YQnaG6 [, y%̴eK-Vc,{i/h/ViЖ_A}?ɼ]l)JRrVdR(K?O6v~uX[]o@Ea7iov 9|ݮov7k"ݧsɲT{ [,bm.7AU?.e: .J ̓=IX{Z ?n oxyZ} R'PNG  IHDR`tsBITO0PLTE{bKGDH aIDATxQr[ݾ7G$q<cZ%Wr@tPC}p>8PC}p>8PC}\/8E-qx:;aƘө3qÍXCpU"|kRY_a {X&9p m,rxpk[;X(wC}V8[;X$w"w`C?8T+x}ߌOvU.ɡms~WKp(h_Tb|3MOu&< ΰ=xU)#^at@8%&=p$xߙ% ^СC9)kTr J<C’/Щăk9t+,'dR I<ÐR_p 8 +,#x*x>xC KH,A$V^KpBa5T%@^IG% npnY&O\2x TE2jS7up((61eG$ nԚp荘3YD(5lQD((5НzwNbyiKGIGFsJ!;x=e(9Gxu=K$xwsVq ]d9$: sE>zY.e-?s6Bqgr~an-, n ;ut=skaapPa>y{}\;G_fqO3pσkGˌ\2t: ۓI{;C#Ks3Bk`a+{pxaz_pm>A/xksmWflW2O0oT~LyqYs8TgndNu=z[s8[tI&Otx5 ۚKƁh7'~Ô׵yiNPF+ĿMBFU68ܟ| Zx xQI(H<F>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8PC}p>8ԧNs$xMOX}<'K9\}k88res84=r s9\g]E:bÕId&v=WSEL(R+oILCd&$ ?~z%L%:'5qO??vze] ?ۗo'Ō+[ o ~۽~֗]?<>-{3fN6{nݻ{+fۖY')pI ~u6{$:g ÏDݽ%Zwq̘Vwoo|{w ~{cnno2fa?mV w!cZM?̭Nc~"b1Fܡ#gѾsk!H̲7gqw-XBF]Fdg%@^r gh.S8|Aq 3[ 9WDh.R3S8]64[;‘ͥ1TƓFo."05yN_;OR91Yl5ୃj,v\AJɧb~b˝)d},Vk~H~;\$N1qYsW{) 6whlV 0s;|: 1gI-pmsr}/UsѪpeL;#Mv?s> qXWêC!r\2LG~8_!C} qXBVůU+aUpO`8PAH.P3Up()H4ġSXC,_xC$ݠp(C!lq0D=/a&kU-HAG PC}p>8PC}p>8PC}p*L`IENDB`n -%a Q˯ȪC{z9PNG  IHDR`tsBITO0PLTE{bKGDH IDATxr$Qns2={8Teb APk)MȾM!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~MUa_3w7l}qԘaK#wof~`hP8455l`0 ̚3\w/QCB#KC~+oe]!jHC~5\z)kwW^nh4pK / pS / w!UZdxi5i%i# 0ݠ;Z`# woQ wn wmS Cw̨jxʛ߾23lẍ5ŵQSޏj룃OlӎHß7p]g ox_ZAܵ#u\vkn + 틵skņں~(e8_;k}7 m!Qv;1aFÇČU 3Sf1l؎@LQði:1gG vT0l^1kZÖ:Fۑn7.blU3w$O#pdzEc)&4^ 1{GR; Bߑf89 bYk ̘ߑdbȌ91fXhxw  QvccT`*+O*"ÖKfO*}k w;6  [,u Þ۞Axb þ'ƿ0 |ahÑ[A8#pG͈5ZwDj <ǯ~aΎNSvT$0cGN WbiN =QW?px8I$>caǿ>d:gޱŖ~?I.^ka=$ܱ6|I6;V˗'3P:[f <@oB ܶ;ZQ!Tp#ZQКӐ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4!? iOC~Ӑ4WֿƆv̨jxc~Ga(jxd|GM:1bubĎ Ĉ- ^Fh:_@vuE/bGjߧS#voD |HĀkD q8Ā=+BѼ|!û Ĉ}OPv;1bF1|NAU 3#ft?AÆĐk6M <[°qzyİ}'+6O/\ÎCw7^1xGǙtew6^q'L/dGS T\񡙆Ӌ!DÉWhzXBkw<(prz;e8=bgħK$Fl/2czGatĠ;|;L};X?}*~\:VXI0A-ځ0Q0a-1qA1-؁1ڑ{w (S4x})?o4ix=80E G"vP Ƈv` o^/]w~) xwOQɰ2灷OQʰ1ljQ˰ 0᫇ Wg|?s ()v*z)*Mr96*|9|t9 6&MsT4lMfv|7yhIÞo*Ď>=iYxGM3 [o\հA ڇ(kDâu|ra4 5 5 e: !/jOC~4NӐ E҇nA0X7C MX'C{xGb Z E̫χU- E{"bneCtt" 4!? iOC~Ӑ4!? iOC~Ӑ4!? i/5"QJKIENDB`kU(Z % N P@.CorelPhotoPaint.Image.7 .CorelPhotoPaint.Image.706Corel PHOTO-PAINT 7.0 Image0*JCClip (MS_ClipArt_Gallery.20,Microsoft Clip Gallery0+KDClip (MS_ClipArt_Gallery.20,Microsoft Clip Gallery0,LEClip (MS_ClipArt_Gallery.20,Microsoft Clip Gallery00NFClip (MS_ClipArt_Gallery.20,Microsoft Clip Gallery05PGClip (MS_ClipArt_Gallery.20,Microsoft Clip Gallery06QIClip (MS_ClipArt_Gallery.20,Microsoft Clip Gallery07RJClip (MS_ClipArt_Gallery.20,Microsoft Clip Gallery08SKClip (MS_ClipArt_Gallery.20,Microsoft Clip Gallery/ 00DTimes New Roman85bbv 0b( 0DCourier Newman85bbv 0b( 01 DCourierNewman85bbv 0b( 0 10DSymbolNewman85bbv 0b( 0 ` .  @n?" dd@  @@``   ? /   ,  $ R(7':1=956< ; !$> 49 Z-' &((',-.$0+2 4- &)%*b$;7V;%OwIn,-$-b$R5u:ut$ 1',-2$R]vE~)LvpT-$-2$MlO9)X-$-$-2$ܵK H\-2$ ܦ.:Ga-2$u¶\DNm> z-$-2$QféCO? /-$-2$k|04o,*FD-2$V||J{}kO3 ϒ-$-$-$-$-$-R$-N ;Q-R$B^! l-b$Vݨޯk-R$F߳Fa"־ru -$-$-b$w: ,[Љ -b$reoFh=K - @0e0e     A@ A5% 8c8c     ?A)BCD|E|| 33|3@3,g4:d:dv 0bppp@  <4BdBd4b 0bb<4!d!d4b 0bbg4(d(dv 0b<p p-uʚ;2Nʚ;<4dddd4b{ 0 bb:2___PPT9/ 0?(% Luca ListaO ==C++ "Luca Lista INFN, Sezione di Napoli0# $Sintassi base del C++*$$ VATipi predefiniti in C++( U> Sintassi C++8 (($ !Controllo di flusso del programma"!"W@ Hello, world!8%Esempio di programma semplice con I/O&%$&& Funzioni matematiche)In C++ non esistono funzioni predefinite 6*# *Variabili locali e scope$Le dichiarazioni possono essere fatte ovunque nel codice Le dichiarazioni di variabili sono valide solo entro un certo scope 48XB Enumeratori `In C++ sono supportati tipi definiti dall utente61* 1"ArrayeIn C++ sono supportati gli array di dimensione fissa6f_ *F Puntatori 'Riferimento ad una locazione di memoria( Puntatori Puntatore nullo#Puntatori e array +In C gli array sono trattati come puntatori6,' *!Puntatori: allocazione dinamica 'Riferimento ad una locazione di memoria(' ($Puntatori: allocazione dinamica &Riferimento a pi locazioni di memoria'& '  Classe Vector*((jUna classe definisce oggetti che contengono insieme funzioni e dati Un esempio: un vettore tridimensionalekkk Interfaccia e implementazione$nGli attributi privati non sono accessibili al di fuori della classe I metodi pubblici sono gli unici visibiliNo8o  Classe Vector*((Come usare Vector:& *  Interfaccia e implementazione$La struttura interna dei dati (x_, y_, z_) che rappresentano l oggetto della classe Vector sono nascosti (private) ai client della classe. I client non dipendono dalla struttura interna dei dati (come lo erano i client dei common block Fortran) Se la struttura interna cambia (es.: r_, theta_, phi_), il codice che usa Vector non deve essere modificato.df *# z U@# Classe Vector*((@Protezione dell accesso ai dati:!ZDSelettori e modificatori$I Selettori (const) non modificano lo stato ( = gli attributi) dell oggetto I modificatori possono modificare lo stato Dz :-* h`Argomenti delle funzioni$>Un argomento pu essere passato come valore o come riferimentoD?%  ?;5Argomenti costanti$YPer evitare di modificare un argomento passato come riferimento, si pu dichiararlo const0ZT *T  Operatori ( dE possibile ridefinire +, -, *, [], ++, ==, . . .3360 Operatori ( Esempio: YCClasse Array a dimensione fissa@ ((((* 71 Operatori ( Esempio: <6Overloading di operatori( ( ( Epossono esistere funzioni con lo stesso nome ma con argomenti diversi,F0 F[EOperatori utilizzabili( =7Argomenti di default(E possibile specificare il default per gli argomenti delle funzioniEDE>8Funzioni e dati statici(CAlcune funzioni e attributi possono essere comuni a tutta la classeDCD3- Ereditariet , Una classe derivata estende la classe base e ne eredita tutti i metodi e gli attributi  Classi astratte,Esempio classico: Shape**qWCerchi e quadratirXCerchiobCerchiotZ Quadrato u[Codice Applicativo (Client)$*v\ Polimorfismo w]Interfaccia astrattaaEreditariet e riuso del codice 4. Ereditariet , fAttenzione: scegliere le relazioni di ereditariet pu essere non banale. Un quadrato un rettangolo?*g \ g5/Ereditariet multipla('Una classe pu ereditare da pi classi (' (+%Superfici e traiettorie(mNel tracking spesso necessario calcolare intersezioni tra curve (tracce) e superfici (elementi di detector)nm * b-'Superfici e traiettorie($Interfaccia delle diverse Trajectory,%  /)Superfici e traiettorie(Implementazione,&Superfici e traiettorie(Interfaccia delle varie Surface*  93Superfici e traiettorie(Surface una classe astratta82Superfici e traiettorie(Interfaccia di Intersection* .(Superfici e traiettorie(<Implementazione dell algoritmo?9Superfici e traiettorie(Intersection usa solo: I metodi position e direction di un oggetto Trajectory I metodi distance e derDist di un oggetto Surface E possibile aggiungere una nuova classe che modellizza una nuova Trajectory o una nuova Surface e Intersection continua a funzionare senza modificare una linea di codice! E possibile rendere anche Intersection astratto...li      B   =   3P   .     X  @:Ritornando al primo esempio ... READKBD e READFL possono essere due implementazioni dello stesso metodo virtuale read di una classe InputDevice WRITEKBD e WRITEFL possono essere implementazioni dello stesso metodo virtuale write di una classe OutputDeviceA< pQ P /z{}~  P3b  ` ̙33` ` ff3333f` 333MMM` f` f` 3>?" dd@ |?" dd@   " @ ` n?" dd@   @@``PR    @ ` ` p>>  (    Zx ԔX s?5  m9Fare clic per modificare lo stile del titolo dello schema: :K  B{  )?  uFare clic per modificare gli stili del testo dello schema Secondo livello Terzo livello Quarto livello Quinto livello: v  0x ``  T*  0؁ `   X*   0 `   V*x  <A ??Pk H  0޽h ? ̙33 *Struttura predefinita0 @ +(     NGYeYe 4  G j* a AAAaa  N 7JYeYe D Z4 G l* a AAAaad  c $ ?*2  JW  N9JYeYe n .,A J uFare clic per modificare gli stili del testo dello schema Secondo livello Terzo livello Quarto livello Quinto livello: v  TBJYeYe   J j* a AAAaa  TxLJYeYe D Z J l* a AAAaaH  0~eI ? ̙33  P(  H ?   ND_Ji_i_ O  J r* 777RRmm   NgJi_i_ C aO J t* 777RRmm  TpJi_i_    J r* 777RRmm  TXlJi_i_ C a  J t* 777RRmmH  0~eI ? ̙33Tf 0|(    S XG0<$D 0 G   S XG@$ <$ 0 G H  0޽h ? ̙33   \ T `  ( o   S |J5<$D 0  J   s *ԂJPv ,$D0 Bint main() { // esempio di programma ... return 0; // fine }vC 2338$ U  s *DJ ` $,$D 0 !int i; long j; float x; double d;." 2!T B  HD>  ,$D 0  s *ȐJ@,$D0 <In C/ C++ non necessario un particolare formato il codice =<=  s *ԕJ ,$D 0 iIl C/ C++ case sensitive .   s *JP $ ,$D0 4Istruzioni separate da  ; :3B  HD> P,$D 0R  s *Jp`D ,$D0 0Commenti con // o /* & */b 3333H  0޽h ? ̙333& <@ %%p&34[%(  4 4 c $J5<$D 0  J  4 <J?,$D0 schar[1]:   4 <J?6,$D0 tint[1].     4 <J?`,$D0 lbool(   4 < 4 || x) { . . . } while( x != 5 ) { . . . } do { . . . } while( x != 5 ) 2p"%& H $ 0޽h ? ̙33   R J  0 ( Trd  0C 0 s *RL ` 0 ,$D0 ! int main() { return 0; }8" 28   0 c $(XLd<$D 0  L  0 c $XL<$ 0 L  0 C BpC DE Fop V@,$D 0  0 68\L ,$D 0 Rdirettiva al preprocessore   0 6@L? `,$D 0 c++ program.cc -o prova*     0 BbL  )?@ Pp) ,$D 0 ]Come compilare:B 0 HDo?p 0 ,$D 0  0 6peLp  ,$D 0 _ end of line  4 0 s *iL ` ,$D0 ~#include <iostream> cout <<  Hello, world ! << endl; j@ 2 3 H 0 0޽h ? ̙33 b bZ (  N  s *4yLPpW,$D0 ( int main() { return 0; }<) 2%8   c $Ld<$D 0  L   c $L<$ 0 L   3 BsC-DEF>s-@ ,$D 0k  s *pLP  ,$D 0 cmath.h definisce sin, cos, ...b  ff8  HL ? 0 3,$D  0 Niente 2**4. Usare pow(2, 4)F T       y  s *@LPpQ,$D0 ) { double r, theta, phi; <* 2&b  s *LPpQ,$D0 P@#include cin >> r >> theta >> phi ; nA 2!~     s *8LPpQ,$D0  #include double x = r * sin( theta ) * sin( phi ); double y = r * sin( theta ) * cos( phi ); double z = r * cos( theta );  2f ff ffB       s *LPpQ,$D 0  cout << x <<  ,  << y <<  ,  << z << endl; F 2  3 3F)H  0޽h ? ̙33P  <@   Px ( -$ P P S Ld<$D 0  L  P s *LH`,$D0 #include <iostream> const float pi = 3.1415396; int main() { int j = 0; if ( j == 0 ) { int k = 5; } j = k; // errore: non compila ! return 0; } void myRoutine( float x ) { int y = x * 2 * pi / 180; cout <<  f(x) =  << y << endl; }Z  2j3uz  /  B P HD>@` <,$D 0 P s *L`,$D 0 j pi globale.  B P HD> ,$D 0 P s *L@ J,$D 0 hj locale.   P S L<$ 0 L H P 0޽h ? ̙33   @ 8  8 (  8 8 c $Ld<$D 0  L  8 c $L5<$ 0 L  8 s *LL ,$D0 ;enum Color { red, green, blue }; Color screenColor = blue; Color windowColor = red; int n = blue; // valido Color c = 1; // erroreX 2h 3 334  ! 8 s *Mp d,$D0 -enum Seme { cuori, picche, quadri, fiori };&. 2-3)  8 C AD:\Users\Luca\Presentazioni e simili\Corso specialistico C++\8clubs.jpg 8 ,$D 0  8 C AD:\Users\Luca\Presentazioni e simili\Corso specialistico C++\8hearts.jpgDH ,$D 0  8 C AD:\Users\Luca\Presentazioni e simili\Corso specialistico C++\aceheart.jpgDX,$D 0 8 C AD:\Users\Luca\Presentazioni e simili\Corso specialistico C++\4dimnd.gifP @ ,$D 0 8 C AD:\Users\Luca\Presentazioni e simili\Corso specialistico C++\7spade.gif@ ,$D  0 8 C AD:\Users\Luca\Presentazioni e simili\Corso specialistico C++\4spade.gif ,$D  0H 8 0޽h ? ̙33   < 4  (    c $ Md<$D 0  M   c $ M5<$ 0 M U  s *Pݸ ,$D0 int main() { int x[10]; for ( int i = 0; i < 10, i++ ) x[i] = 0; double m[5][5]; for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 5; j++ ) m[i][j] = i * j; return 0; } 2)L#  /  0x M  ,$D 0 L indice va da 0 a n-1. Usare un indice maggiore di n-1 pu causare un crash.O3333*G  c $A *?? 8 *$D 0"  s **ML  ,$D0   int x[] = { 1, 2, 3, 4 }; char t[] = {  C ,  i ,  a ,  o ,  \0 }; char s[] =  Ciao ; int m[2][2] = { {11, 12}, {21, 22} }; 2,3, %  B8M  )? @,$D 0 _Inizializzazione:H  0޽h ? ̙33  !+T0 (  T T s *tFM P,$D0 d12 . 2 #T s *IM P,$D 0 d 24 . 2 $T s *DM X,$D 0 l 0x7b03a928. 2   T S UM5<$D 0  M  T S XRMV@`j<$ 0 M =  `P  T# _0 ,$D 0  T 6YM `P  >Z  T s *  p T <\Mr {[ R Sj  T <_M@  W T12 l 0  T0 ,$D 0UT 0t T# 0  T <eM0t >` T 0` T BdhM|f Uptr ~B T ND>M`2 T 0!Pyq T s *lM ` `2 ,$D0 / int main() { int j = 12; return 0; }<0 2.T  T s *qM ` ` ,$D0  int *ptr = &j; | 2F T s *zM ` ` ,$D0 D4#include cout << *ptr << endl; n5 2 ~   !T s *hM ` ` ,$D 0 * j = 24; cout << *ptr << endl; \+ 2bM "T s *$M ` `b ,$D 0  cout << ptr << endl; * 2T B T@ HD> p ,$D 0 T s *M @,$D 0 >indirizzo di memorial 3 +T3,$D 0` (T 03 *T BM T24 H T 0޽h ? ̙33a <@ X(  X X c $4M5<$D 0  M  X c $MV@`j<$ 0 M  X s *YM \ ,$D0 )q#include int main() { int j = 12; int *ptr = 0; cout << *ptr << endl; // crash ! return 0; }nr 2D 3&   > X s *M   ,$D0 $Segmentation violation (core dumped)0% 2$8`l j X,$D 0T  `P  X#  j X 6lM `P  >Z X s *  p  X <DMr {K T Sj   X <M@ { Y T12 CT 0t  X# j   X 6pM0t >Z  X s *` X <pM^h Uptr Z2 X s *tfB XB 6D> fB X 6D>  fB X 6D>  fB X 6D>@ @ fB X 6D>   X c $A ,?? P@8 ,$D 0H X 0޽h ? ̙33  ,Q, (    c $M5<$D 0  M   c $hMV@``<$ 0 M   s *M ,$D0 fint main() { float x[5]; int j; for (j = 0; j < 5; j++) x[j] = 0; float *ptr = x; *ptr = 1.5; // x[0] = 1.5 *(ptr+1) = 2.5; // x[1] = 2.5 *(ptr+3) = 3.5; // x[3] = 3.5 } 2q333"    j0 =#   ,$D 0@  0 < 0 7 <M 0 @` 8 0P 9 6M 9 Ux"`2 ; 0p` : # BC<DEF><@6j7/l   Q ,$D 0  <\M    @`  0   p  6M    XX[0]"  6,M    W1.5"  <M   @`  0 4 Yp  6M  X XX[1]" " <@M  @` # 0 p $ 6`M  XX[2]" ' < M v @` ( 0 'Lp ) 6$O zM XX[3]" , <<O v @` - 0 p . 6O  XX[4]" F 6 O  - W2.5" G 6 O  W0.0" H 6,O z! W3.5" I 6hO  W0.0" p 6 J#   ,$D 0 K 6O 6 @Z L s *`  M 0,OR  : WX+1"Z2 N s *v  O # BC<DEF><@p p 6 E#  v,$D 0 @ <"O 6 @` A 0`  B 6h%OO  : WX+3"`2 C 0v  D # BC<DEF><@pH  0޽h ? ̙33p <@ (    c $8-O5<$D 0  O   c $.OV@``<$ 0 O   s *M P@ ,$D0 hx#include int main() { int *ptr = new int; *ptr = 12; cout << *ptr << endl; delete ptr; return 0; }y 2.B   z PP   U@P,$D 0N  PP    P   6XAO `P  >Z  s *  p   <EOX P / "   <GO@  C T12 =N 0t   P`    6LO0t >Z   s *`  <OO}Q Uptr xB  HD> Z2  s *@  0TTO P ,$D 0 OAttenzione: Non usare delete fa accumulare locazioni di memoria inutilizzate (memory leak) Utilizzare puntatori prima del new o dopo il delete causa il crash del programma  3 3323 3!3 3 33332      c $A +?? p8 +$D 0H  0޽h ? ̙33  ph0'(    c $`iO5<$D 0  O   c $PlOV@@`<$ 0 O   s *sO P } ,$D0 i#include int main() { int *ptr = new int[3]; ptr[0] = 10; ptr[1] = 11; ptr[2] = 12 delete [] ptr; return 0; }~ 28B      e l  'p 0 ,$D 0T  PP  # @    6O `P  >Z  s *  p   < Oc P I "   <OA  X T10 CT 0t  #    6܌O0t >Z   s *`  <ЏOf Uptr ~B  ND>@ `2  0@T  PP  #    6Z  s *  p   <Oc P I " ! <ȚOA  X T11 T  PP  "#  # 6؟O `P  >Z $ s *  p % <Oc P I " & <dOA  X T12 H  0޽h ? ̙33  <@ @$%(  $ $ S O5<$D 0  O  $ S PO@p<$ 0 O Sz P $  ,$D0 $ s *OP  class Vector { }; 8 $ s *OPa dVector.h B  $@ HD>P ,$D 0B  $ HD> 0@ ,$D  0 $ # B5CDE F>5@p,`,$D 0 $ s *O0,$D  0 5 costruttore   $ s *8O@ ,$D 0 ;funzioni o metodi  $ s *O  ,$D  0 :dati o attributi $ s *O ,$D0 gm public: double x(); double y(); double z(); double r(); double phi(); double theta();  nm     J $ 0O ,$D 0 , private: double x_, y_, z_;  -,F  $ s *@O ,$D 0 2 Vector(double x, double y, double z);  3.~  B $ NDo?` ,$D 0 $ s *O `,$D 0 :Punto e virgola!1z P  $ p H,$D0 $ s *$OP v #include  Vector.h Vector::Vector(double x, double y, double z) : x_(x), y_(y), z_(z) { } double Vector::x() { return x_; } double Vector::r() { return sqrt( x_*x_ + y_*y_ + z_*z_); }* &      $ s *4OP e Vector.cc H $ 0޽h ? ̙33 <@ rjP,`(   , , s *`p,$D0 , S  P5<$D 0  P ?l p P ,p P,$D0`  , 0p G` , 0 2B , 0Oz 1PQ #include  Vector.h Vector::Vector(double x, double y, double z) : x_(x), y_(y), z_(z) {} double Vector::x() { return x_; } double Vector::r() { return sqrt(x_*x_ + y_*y_ + z_*z_); }6     , 0\ Pp F e Vector.cc l `@  ,`@ ,$D0`  , 0` `  , 0  `  , 0 s , 6\E@  class Vector { public: Vector(double x, double y, double z); double x(); double y(); double z(); double r(); double phi(); double theta(); private: double x_, y_, z_; };       , 0P`  dVector.h  , s *pp,$D0 , S `#Pp<$ 0 P H , 0޽h ? ̙33     ` (2 ( t*[@E[ ( ( S (P5<$D 0  P z p `  ( p ,$D0> ( s * Ea `  $ #include <iostream.h> #include  Vector.h int main() { Vector v(1, 1, 0); cout <<  v = ( << v.x() <<  , << v.y() <<  , << v.z() <<  ) << endl; cout <<  r =  << v.r(); cout <<  theta =  << v.theta() << endl; return 0; }6*^     U  ( s * 1Pp `  cmain.cc ( BTAP 5j<$ 0 P ^z  `0  ( 0 ,$D0  ( 0BP Z0 'v = (1, 1, 0) r = 1.4141 theta = 1.5708$('*   ( 0HP `0Z cOutput:*B (@ HD>P@,$D 0 ( s *8NP@ 0,$D 0 Minvoca il constructor  H ( 0޽h ? ̙33T <@ p<|(  < < S (SP5<$D 0  P  < S TP<$ 0 P H < 0޽h ? ̙33   - %  h(  h h c $`P5<$D 0  P { p ` h#  ,$D0 h s *bP` ` N #include <iostream> #include  Vector.h int main() { Vector v(1, 1, 0); cout <<  V = ( << v.x_ <<  , // << v.y_ <<  , // non compila ! << v.z_ <<  ) << endl; // cout <<  r =  << v.r(); cout <<  theta =  << v.theta() << endl; }(%D33 33 33QB      x  h s *}Pp `  cmain.cc h BP 5j<$ 0 P   h c $A 0?? `8 0$D 0H h 0޽h ? ̙33  ;3@(  @ @ c $Pp @<$ 0 P  @ c $P5<$D 0  P l p P`  @p P ,$D0Z @ s *p G`  @ s *XEz 1P #include  Vector.h void Vector::scale(double s) { x_ *= s; y_ *= s; z_ *= s; }6T?    @ s *Pp F e Vector.cc l ``@  @``@ ,$D0`  @ 0`O   @ 6PO@  class Vector { public: Vector(double x, double y, double z); double x() const; double y() const; double z() const; double r() const; double phi() const; double theta() const; void scale(double s); private: double x_, y_, z_; };X=0            @ 0E`` ` dVector.h B @@ ND>  ,$D 0B @ ND> P ,$D 0 @ 6P @ ~ ,$D 0 R modificatore   z   @  ,$D 0 @ s *ĴP  Qa int main() { const Vector v(1, 0, 0); double r = v.r() // OK v.scale( 1.1 ); // errore! }jb;3 3b 0 @ s *P   cmain.cc) @ 6`P7  1 ,$D 0 Selettori (const)0 * H @ 0޽h ? ̙33  <@   B (    c $P5<$D 0  P   c $|PpP<$ 0 P   s *lP> @ ,$D0 Ymdouble dotProduct( Vector& v1, Vector& v2 ) { return v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z(); }Xn Hp 8  s *$P.@,$D0 #kdouble dotProduct( Vector v1, Vector v2 ) { return v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z(); }$lkp 8  BpP  )?j,$D 0 JPassare due oggetti della classe Vector come valore (=copia) dispendiosorK!  * $R  B #include  Vector.h int main() { Vector v1(1, 0, 0), v2(0, 1, 0); Vector v; v = v1 + v2; cout <<  v =  << v << endl; cout <<  r =  << v.r(); cout <<  theta =  << v.theta() << endl; }6(^         s *pQp `  cmain.cc\  `0  # `  ,$D0   s *8tQ Z0 'v = (1, 1, 0) r = 1.4141 theta = 1.5708(('*    s *HyQ `0i cOutput:*B  HD> 0 ,$D 0  s *vQ 9,$D 0 ridefinizione di <<6 B @ HD>`  ,$D 0l @ pB  @ pB ,$D 0  0 Q@ ppB  $ v.operator=( operator+(v1, v2) ); $%$F  s *Q@ pz Sintassi alternativa (!#@!?) :2H  0޽h ? ̙33 <@ rj < (  < < c $E5<$D 0  E  P <# ` ,$D0| < s *HEP  class Array { public: Array( int size ); Array(const Array & rh); ~Array(); int size() const; int& operator[]( int i ); private: int* array_; int size_; };nh 3        < s *GP` cArray.hl (  <: ,$D0N < 0 G( Q  #include <assert.h> #include  Array.h Array::Array( int size ) : size_( size ) { array_ = new int[ size ]; } Array::Array(const Array&rh) :size_(rh.size_) { array_ = new int[size]; // copiare il contenuto& . } Array::~Array() { delete [] array_; } int& Array::operator[]( int i ) { assert( i >=0 && i < size_ ); return array_[i]; } int Array::size() const { return size_; }'   3A              +       < 0.G(  dArray.cc   < # BC@DE F>h@@PP,$D 0  < # B5CDE F>5@0,$D 0l   <P `,$D0r < 0p0G  6 int main() { Array a(2); a[0] = 1; a[1] = 2; }j7 F! < 08G   cmain.cc < 3 BC@DE F>h@@0P0 ,$D  0  < s *=Gpp` ,$D 0 Y costruttore   < s *LBG,$D 0 Y distruttore  H < 0޽h ? ̙33  <@ 6 .   (    c $Q5<$D 0  Q   c $QVj<$ 0 Q  p ` # P ,$D0  s *EE_ ` 4. #include <iostream> #include <cmath> #include  Vector.h #include  Matrix.h // matrice 3x3 int main() { Vector v1(1, 1, 0); double phi = M_PI/3; double c = cos(phi), s = sin(phi); Matrix m(1, 0, 0, 0, c, s, 0, -s, c); Vector u = m * v; }hN34z          7   s *XQp `  cmain.ccB  @ HD> ,$D 0B  HD>@,$D 0  s *ģQ@,$D 0 Up grecoH  0޽h ? ̙33   . &   (    S Q5<$D 0  Q   S |QVI<$ 0 Q  P #  ,$D0i  s *QP  class Vector { public: // ... private: double x_, y_, z_; }; Vector operator*(const Vector &, double); double operator*(const Vector&, const Vector&);83      s * QPr s Vector.hh *\ Pn # 0 ,$D0  s *QPn 9 Vector operator*(const Vector&, double s) { return Vector( v.x() * s, v.y() * s, v.z() * s ); } double operator*(const Vector& v1, const Vector& v2) { return ( v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z() ); }::& L  T   s *QP e Vector.cc H  0޽h ? ̙33. <@ u.m./8D-(  D D c $Q<$D 0  Q  D <Q?6,$D0 S+   D <lE?`,$D0 Y-&   D <lQ?,$D0 S*   D <4Q?&,$D0 Y/&   D <Q?Pv,$D0 Y%&   D <Q? ,$D0 S^    D <$Q?  ,$D0 S&    D <Q?@ f ,$D 0 S|    D < Q? P6,$D 0 T+=    D <LQ?` P,$D 0 T-=    D <S? P,$D 0 b*=    D <S? P&,$D 0 T/=   D <S?P Pv,$D0 T%=   D < S? P ,$D0 T^=   D <S? P ,$D0 T&=   D <,S?@ Pf ,$D0 T|=   D <dS? 6,$D0 U<<=   D <S?` ,$D0 T==   D < S? ,$D0 T!=   D < %S? &,$D0 T<=   D <D)S?P v,$D0 T>=   D <|-S? ,$D0 T&&   D <1S?   ,$D0 T||   D <5S?@  f ,$D0 S,   D <$:S? @,$D0 S+   D <\>S? @&,$D0 S-   D <BS?P @v,$D0 S*   D <FS? @ ,$D0 S&   D <KS?  @ ,$D0 T->    D <   (D < _S? ,$D#0 S<   )D <XcS? P ,$D$0 T>>   *D <gS? P,$D%0 T<<   +D <kS?  ,$D&0 T()   ,D <pS?  ,$D'0 T[]   -D <8tS?0 @V,$D(0 T--   /D <pxS?*P,$D)0 S=   0D <|S?* PP,$D*0 U>>=   1D <S?* P,$D+0 U->*   4D s *dS 0,$D,0 5 2 argomenti  5D s *TS` ,$D-0 5 1 argomento " 7D 0S% ,$D.0 rArray v(3); int n = v[0]; Complex c(2, 2); Complex cConj = *c; Vector v; Point p; Vector u = v + p; cout << v; ss   H D 0޽h ? ̙33  {s#0  (    c $S5<$D 0  S   c $ܗSVI<$ 0 S  P  #  ,$D0&   s *tSP j class Vector { public: Vector(double x = 0, double y = 0, double z = 0); . . . };k)      s *SPr dVector.h  P #  ,$D0T  s *XSP  #include <iostream> #include  Vector.h int main() { Vector v; cout <<  v =  << v << endl; }Rd;     s *hSPr cmain.cc  `0 #  ` ; ,$D0  s *LS [0 h V = (0, 0, 0)(  s *S `0v XOutput l  0 # P ,$D0  0   # l$HV1? Vc,$D 0 n loweCorner$   l n p  np,$D 0   # lwDNV1?n )p @B    fD>? ) 2   Z1? X J  # l0QV1?  ,$D 0 zcenterToUpperCorner_&  H  0޽h ? fffN       (    c $t^V5<$D 0  V z P"  ` ,$D0~  s *`VP" #include  Circle.h #include  Square.h int main() { Circle c1( Point2d(2.,3.), 4.23 ); Square r1( Point2d(2.,1.), Point2d(4.,3.) ); Circle * circles[ 10 ]; for ( int i = 0; i < 10; ++i ) { circles[ i ] = new Circle( Point2d(i,i), 2. ); } for ( int i = 0; i < 10; ++i ) circles[ i ]->draw(); return 0; }JQ'33 OH33Q  s *rVP UMain.cc8   `vVԔ?  ,$D 0 t(Come gestire cerchi e quadrati insieme?)))B  @  `DԔ?P ,$D 0w   `({V1?P ` ,$D 0 kCostruisce un vettore di puntatori a cerchi, crea oggetti in memoria e salva i loro puntatori nel vettore. lllB   `DԔ? @ 0 ,$D 0  # lV1?J 0 ,$D 0 4Itera sul vettore e invoca draw() per ogni elementoB5*H  0޽h ? fff  y(    0A?6,$D0  c $V5<$D 0  V    fV1?` v ,$D 0 Tutte le Shapes hanno la stessa interfaccia: draw, pick, move, fillColor..., ma ogni sottotipo diverso pu avere la usa personale implementazioned   +    3H  0޽h ? fff  wo (  z P   0 ,$D0  s *HVP  D0class Shape { public: Shape() { } virtual ~Shape() { } virtual void moveAt(const Point2d& where) = 0; virtual void changeColor(Color newColor) = 0; virtual void scale(double s) = 0; virtual void rotate(double phi) = 0; virtual void draw() const = 0; virtual void cancel() const = 0; };1    |   |  33   |  33  |  |  33  |  |  33   |  |  33   |  |  33   |  |  33   | 1  s *VP UShape.h  c $V5<$D 0  V B   `DԔ?@`P` ,$D 0E   `dV1?0  ,$D 0 )Interfaccia di metodi puramente virtuali&*)*Hz P    B0 ,$D0   s *VP  #include  Shape.h class Square : public Shape { // & . Il resto tutto uguale a prima };\ 33       % 3 \   s *VP VSquare.h  z P    P,$D0   s *VP $#include  Circle.h #include  Square.h int main() { Shape * shapes[ 20 ]; int index = 0; for ( int i = 0; i < 10; i++ ) { Shape * s; s = new Circle( Point2d(i, i), 2.) ); shapes[ index ++ ] = s; s = new Square( Point2d(i, i), Point2d(i+1, i+2)) ); shapes[ index ++ ] = s; } for ( int i = 0; i < 20; i++ ) shapes[ i ]->draw(); return 0; }(   L    @        s *VP UMain.ccH  0޽h ? fff%  0 e(    c $ W5<$D 0  W z P  y ,$D06  s *WP Class CenteredShape: public Shape { public: CenteredShape(Point2d c, Color color = TRASPARENT) : center_(c), color_(color) { /*draw();*/ } ~Circle() { /*cancel();*/ } void moveAt( const Point2d& ); void moveBy( const Vector2d& ); void changeColor( Color ); virtual void scale( double ) = 0; virtual void rotate( double ) = 0; virtual void draw() const = 0; virtual void cancel() const = 0; protected: Point2d center_; Color color_; };      S  3    3          |     |  |     |  |     |  |     |3   s **WP ]CenteredShape.hz   `D-W1?@,$D 0 bNon si possono chiamare metodi virtuali in costruttori e distruttori (troppo presto, troppo tardi)"cEcB @  `DԔ? Bp,$D 0z P,  p,$D0b   s *H3WP, #include  CenteredShape.hh class Square : public CenteredShape { public: Square( Point2d lowerCorner, Point2d upperCorner, Color col = TRASPARENT) : CenteredShape( median(lowerCorner, upperCorner), col), touc_(upperCorner - center_) { draw(); } ~Square() { cancel(); } virtual void scale( double s ) { cancel(); centerToUpperCorner_ *= s; draw(); } virtual void rotate( double phi ); virtual void draw() const; virtual void cancel() const; private: Vector2d touc_; };       U  Z    |  E  |    |     |  )    s *KWP VSquare.h  H  0޽h ? fffq <@  P (     S l^W5<$D 0  W  Pk # @  ,$D0%  s *8hWPk  class Rectangle { public: Rectangle(double x0, double y0, double lx, double ly) : lx_(lx), ly_(ly), x0_(x0), y0_(y0) { } void scaleX(double s); void scaleY(double s); protected: double x0_, y0_; double lx_, ly_; };  n@         s *qWPX g Rectangle.h  B  HD8cP ,$D 0  c $A 5?? 8 5$D 0  S tW@ <$ 0 W  P<  # p`  ,$D0a  s *uWP<  wclass Square : public Rectangle { public: Square(double x0, double y0, double l) : Rectangle(x0, y0, l, l) { } };x   '         s *lWP dSquare.h h   `ćWGH))?g ^,$D 0 RAvere lx_ e ly_ ridondante per Sqare Cosa succede se si invoca scaleX o scaleY ?SH  0޽h ? ̙33  *"`( l)   S W5<$D 0  W   S ȘW<$ 0 W  P  #  ,$D0  s *WP  J: class DrawableObj { public: virtual void draw() = 0; };;  ||T      s *EPr i DrawableObj.h   P   # @ 0T,$D0p   s *@WP  f class Shape { public: virtual void scale(double s) = 0; virtual void moveAt( Vector2d& ) = 0; };g| |||     s *WPr cShape.hB  HD8c { ,$D 0B  HD8c@ P { ,$D  0  C AlD:\Users\Lista\PowerPoint\Torino 19-2-1998\Bord23.wmfPP> ,$D 0l  4   `  ,$D  0  C AlD:\Users\Lista\PowerPoint\Torino 19-2-1998\Bord23.wmf 4 h  c $A 7?? M S q 7  c $A 8??`2 8 8$D 0 P # Y  ,$D0i  s *`WP  class DrawableShape : public DrawableObj, public Shape { public: virtual void draw(); virtual void scale(double s); virtual void moveAt( Vector2d& ); };`    ||  |      s *WPq kDrawableShape.h H  0޽h ? ̙33d <@ p&( (9h   S W5<$D 0  W   S  P  #   ,$D0  s *|[YP  zn class Trajectory { public: virtual Point position(double s) = 0; virtual Vector direction(double s) = 0; };@o  | ||  |     s *4kYPr h Trajectory.h  H  0޽h ? ̙33   (    c $LsY5<$D 0  Y   c $,tYV<$ 0 Y  PT  #  ,$D0D  s *uYPT  P #include  Trajectory.h // & vuoto ...D)3*    s *|YPr i Trajectory.cc  D Pn  # `` ,$D0   s *tYPn  #include  Helix.h Helix::Helix() { } Point Helix::position(double s) { // implementazione }a 3     s *,YPj dHelix.cc # P` #  > ,$D0  s *YP` dn #include  Line.h Line::Line(const Point& o, constVector& d) : origin_( o ), direction_( d.unit() ) { } Point Line::position(double s) { return ( origin_ + s * direction_ ); }< % $           s *YPr cLine.ccH  0޽h ? ̙33 @; bZ(   P #  ,$D0<  s *ĴYP  #include  Surface.h class Plane : public Surface { public: virtual distance(const Point& p); virtual derDist(const Point& p, const Vector& r); protected: Point origin_; Vector norm_; double dist_; };  || ^           s *HYPr cPlane.h| P  # `p,$D0  s *|YP  { class Surface { public: virtual distance(const Point& p) = 0; virtual derDist(const Point& p, const Vector& r) = 0; };X| ||| |        s *4YPq e Surface.h   c $Y5<$D 0  Y   c $YV<$ 0 Y z P  # @ `,$D0   s *HYP \ #include  Surface.h class Cylinder : public Surface { public: virtual distance(const Point& p); virtual derDist(const Point& p, const Vector& r); };J  ||           s * ZPr f Cylinder.h   s *Z@ +,$D 0 1distanza (con segno) di un punto dalla superficie212B @ HD>`,$D 0H  0޽h ? ̙33 p<@ { ( (@b@   c $ Z5<$D 0  Z   c $ZV<$ 0 Z l P #  ,$D0  s *ZP  #include  Plane.h Plane::distance(const Point& p) { return ( _dist - ( (p - origin_) * direction_) ); } Plane::derDist(const Point& p, const Vector& r) { return - r * _direction; }J1            s *(ZPr dPlane.cc { P  #  ,$D0   s *x.ZP J #include  Cylinder.h Cylinder::distance(const Point& p) { /* . . . */ } Cylinder::derDist(const Point& p, const Vector& r) { /* . . . */ } \ 33         s *8BZPr g Cylinder.cc  PQ  # ` ,$D0,  s *pFZPQ  @ #include  Surface.h // vuoto<! 3*   s *lLZPr f Surface.cc H  0޽h ? ̙33  <@  w   (    c $$TZ5<$D 0  Z   c $UZV<$ 0 Z  P # `@@,$D0z  s *WZP " class Surface; class Trajectory; class Intersection { public: Intersection(Surface* s, Trajectory* t) surface_(s), trajectory_(t) {} Point intersect(double s1, double s2); protected: double sIntersect(double s1, double s2); Surface* surface_; Trajectory* trajectory_; };#      , -  L            s *tZPr jIntersection.h B  @ HDjJ@ j,$D 0  s *xZ ,$D 0 _forward class declarationH  0޽h ? ̙33  JB(    c $Z5<$D 0  Z   c $(vE @<$ 0 Z Q  P  #  ,$D0   s *КZP  #include  Intersection.h #include <cmath> #include  Surface.h #include  Trajectory.h const int maxIterations 20 const double sMax 1.e+6 const double accuracy1.e-3 double Intersection::sIntersect(double s1, double s2) { // algoritmo di Newton-Raphson double s = s1; double maxS = max(s1, s2); double minS = min(s1, s2); double d, delta; for( int j = 0; j < maxIterations; j++ ) { Point p = _trajectory->position( s ); d = surface_->distance( p ); delta = surface_->derDist( p, trajectory_->direction( s ) ); double ds = - d / delta; double test = s + ds; Z N      =  3 3 3 3 3            B          '                s *ZPw kIntersection.cc   0`Z ,$D0 Q // controlla che test tra s1 e s2 if( (s1 - test) * (test - s2) < 0.0 ) { if ( s1 < s2 ) s += abs( d ); else s -= abs( d ); if( s > maxS || s < minS ) return sMax; } else s = test; if( abs(d) < accuracy ) return s; } return sMax; } Point Intersection::intersect(double s1, double s2) { return trajectory_->position(sIntersect(s1, s2)); } # 3        T     v,0!      $  H  0޽h ? ̙33 X x(    S  Z5<$D 0  Z   S ZxZ<$ 0 Z   c $A 6?? O8 6$D 0H  0޽h ? ̙33Z g  ( U     S Z5<$D 0  Z    S Z <$ 0 Z    s *8Z \,$D0 pdvoid copy(InputDevice& in, OutputDevice& out) { char c; while ( in.read(c) ) out.write(c); }$ed    H   0޽h ? ̙33W0 XP`(  ^  S  +3   TJ  # lxWTbebe n .,B  T 4Vediamo ora nel dettaglio come scrivere delle classi che risolvono un problema. Ad esempio il classico problema di visualizzare forme geometriche e di manipolarle con una GUI. Abbiamo bisogno di varie forme geometriche: cerchi, rettangoli, esagoni, che si possano creare, distruggere, disegnare, muovere, ruotare etc. Non pretendiamo qui di presentare un implementazione completa, ma di dare solo un idea di come si possa ottenere un certo tipo di comportamento utilizzando la programmazione ad oggetti. Nel nostro esempio assumiamo l esistenza di una libreria grafica di base non OO e una libreria di classi di geometria con punti, vettori in due dimensioni..F=%#H  0~eI ? ̙33:X0 (  ^  S  +3   T  # lTbebe n .,B  T 8fQui vediamo la struttura essenziale di una classe e molti degli elementi sintattici di base: la dichiarazione di una classe con membri pubblici e privati costruttore, distruttore metodi inline metodi definiti in un altra file attributi di tipo  built-in  e di classe Color sarebbe un enumerator ma non si vede la dichiarazione.. come si istanzia un oggetto e come si invoca un suo metodo un loop  for l uso di operatori vari in un piccolo algoritmo l uso di oggetti temporanei (che il compilatore pu ottimizzare) <  17H  0~eI ? ̙33LZ0  (  ^  S  +3   V  # lYVbebe n .,B  V JRepetita juvant!?!H  0~eI ? ̙33v[0 6.(  ^  S  +3   V(  # lVbebe n .,B  V tJUna semplice applicazione delle classi precedenti. Pi dettagli sulla sintassi gi vitsa in precedenza. Si vede l allocazione sull heap (ma non esplicitamente che new ritorna un puntatore) Viene anche introdotto un vettore STL e la sua sintassi di base (ripresa poi in dettaglio in seguito). &H  0~eI ? ̙33R\0  (  ^  S  +3   V  # lVbebe n .,B  V P&Rullo di tamburi& ..H  0~eI ? ̙33]0 x (  ^  S  +3   Vr  # lWbebe n .,B  V La chiave di volta della programmazione orientata ad oggetti: l'ereditariet di un interfaccia astratta per ottenere una gestione polimorfica degli oggetti. In  puro OO la classe di base deve contenere solo metodi puramente virtuali e nessun attributo. Questo e ovviamente sempre possibile farlo. Solo pigrizia e una tendenza a cercare un ottimizzazione precoce ci fanno implementare classi di base che contengono anche parte dell implementazione comune. H  0~eI ? ̙330   ( s X  C  *2   O  S kO n .,A  O "H  0~eI ? ̙33a0 @*(  ^  S  +3   E  # l|PWbebe n .,B  E JIl punto pi controverso dell OO: l'ereditariet pubblica dell implementazione. In questo caso i puristi richiederebbero: Class CCShape : public virtual Shape {..}; Class Rectangle : private CCShape, public Shape {& }; ma per un corso introduttivo mi sembra veramente troppo!!! Posiamo l attenzione su una delle tante trappole del C++: l invocazione di metodi virtuali nel costruttore e distruttore della classe base. @{*0*{H  0~eI ? ̙33:b0 (  ^  S  +3   T  # lxVbebe n .,B  T 8fQui vediamo la struttura essenziale di una classe e molti degli elementi sintattici di base: la dichiarazione di una classe con membri pubblici e privati costruttore, distruttore metodi inline metodi definiti in un altra file attributi di tipo  built-in  e di classe Color sarebbe un enumerator ma non si vede la dichiarazione.. come si istanzia un oggetto e come si invoca un suo metodo un loop  for l uso di operatori vari in un piccolo algoritmo l uso di oggetti temporanei (che il compilatore pu ottimizzare) <  17H  0~eI ? ̙33rtx\puwIHH9$lt`Ad|+@ %S1: >0)! TQ8csة289);u3u3'h}1B3ɸIhاv{{KOJRq}P _).`[_rzq,@wBp׀U&@%R~hp<<<_<\''oW'' <\ O <<< |38<? em`\ ^//׃^^ *vp#N]e#rfp k[_? ׁ׃o? c?xY Qp+x+ؔ?:\w#g|v*#~p Ow?O-?ӲgrAoGňBY|̞Z>.<>ѳ[Ͽ_˿Nc~oMEq|mreM6_}癖ka3Ug7L_q+G 127\:ݮ$rtu(>rsK9𑣫C9(G[ʁ]ʁ(G9ү"J;G9Q2]k|dm OvLϏ}6w<>5\~|G{\K Mq' 7DDqeEMtG]hDq*<*, 4vJ+eDبSn~)umvv;M֝^|bۭq mWޚvc/͢KZ5dY ʺwOM2e?zi+YmgkG:>%?+['*bHv w֝0}"ҲL;P"7"I|31QYm/*׍9 TEd&1zչOy~ӻM֛f~ѻubn9] &[5`tM4xUEPx>|We}88)aZǢNCqqTtZ6&ug!Hg(Uꮪ!"}Ѯm{ϔ@Ψ:[|,ĵΔ:^q_=^gÁ;?YS2aFRuSO|d˩e,"p͚d )~12j}/D1Ee8EO~'V}+k_Zz8H$GT&J(uUDx\ɑ8\izF$EKw{kJVOi=U8[׶kX;Ԙeƺs -q,vDej+6ܓxy)I,_ݾ܊ )]G[7LǞw{A#T-`ӝ9{T=QRI :_:4 L7= l76i:2<.^ ,ʈDj^}Za[f8ޏ`)(6ŬRKܢM )va ʑ K8U;DU{c[46ȼ97|ub61{GNT~q$KdB"=$ ! @U5\N|xSEY<L=9;|Hb#}b=d ~ StVd1֏s,WLS|Z|F> oM)ӳҵ*-;,qhwSn^ %haq=KhVAVD^l=%̍ݼbE#_=*ZEXdR[TV*>'V}4J"ҜH7seB@< P /z 7}DAsiH7%9÷h.+_ύUxx` " >*{sG'Ű]S+M%˳1`\t6Ne4GW=~[CO/RAE.A(7 H)!!f|2]8-PѕW^H3Hf4@fKm#y{t4˥,~U@=ŕEz"e 渥b4=yIEU26 5jHJ{8˰E@;vGonp.B/ ى0pD?F¶tҍjqoµS/(LʠC:#_|vPg4~P=:3҄2% -I7:Gil.s&rBc'*`Ym!26rCw4*3/c3ohNBeǪD&#T6YKzHYzR HeI?$r捻Mzyglw5ʆ񤎳9H9Nk;+f@k>'L/$tDb[*GʶX[rc%b[I]% ~领-8z I*09ƁFul\ߠi"'QJỦmd.S]b㞁,1\+L(-mLn|<ۮ0(HI 2nrܙgb'1)Oang4Y&aMpw^ݐUPyR1QC@RkTƬE ш3X QUh4)l5X}Γ-DPy6S%] tB* v"Uj 4z3ڶ_U|n AmH>~u rQp{y7WxHԸ/K uje(br$99}HZJp+a/TmV6.lt:AEĬxօH7dUNvYK0z<#}z3OՍM˅}كmAoo4xީS9sOzQۘ Wv߼q,޲Gzr|oCCc/ӗ[Wf^nm9 yXk-:gA-/M;Jo4&z5hk/sGcﶭzPնawC]USb\UKQr]5:'>2mk<++(`زRY3'dr}|B4}[-n;ΕHW lx7UR5}oc-i.p_]êZMq}' 1wbfLB/Ͱyfb.-x* ȩ f B7gծ έiNf8HL#|=@NxHvCAJ(Y˩PړUL>U0IJ}քk^Rĩ.ǦՙSS%#b~+ջV1 2F :LaߢqKKC*]J"fTojdRg*)uyH|h RLDh7|&W tPjCY÷;T(kBM%7 ;wry̹3k- !s\ts!$rʬWܴ +т"`q"؀1*H>vmre%\wSM\9&9z; ~8Stsi.CY)%O]:j*\+1)RaKJ-y c}޹`R##Rw4 ^T"{ uFhLXFhܗ2*l] f*][9JSUX5>WTF-} I듭a?9ISr`۠Iskm;KubQEʹ*B!PT*{e^k}ժcd "yOSԝa,=dyGvD#L4Ҟ 3Yj'“D>BO=gij(FJ& 6v~vVu(y}z~W$|y $%3cwէ9JSx PPMD"HD̀ +NL![HI>2Xl9@Ĩ?8qJT;MNSb+QBFn"?@{FRKy^cVJ^Rn"G/{{xJa~Ȧ77 <- 1/~žyD"}<=\^R\|w :ȌNwXʮ5Ȋʕg]t@r?z]y7 GdP/Zi/0Ya^8d%Xn 9rzr< 5{fpA/j8W!Y@ֿϡeηmJ38ilFIG"7v@(A!H` ]sSߋ#eHtAqpͭ#[ }\δzFZ(KhԮ2\0L>bj WÏxe'y)޻}x ǒz:JWRZ6yc'Roph JjsС_*1좂.06[`c9Y-. qc'CͰЂf:-Sɘ^J$i+V/}Aәvwzri}cRLȈ{O{K/W|G<w_mнZ ^e!P\_ i5;]}``늁p #zP=cf︂9<6wP{cO̦L*te!נ`qj2|9KCYBsp2Fg<ʮR2I_hm_gqD"N[ы]Nm;~yi<|.9a(348Mi7m1/^^3 R͖f.mwM? l21iS3#O*z*ɩDc9Zo5hj?tN^k}ʠWx(2Uvn"gʉ'ȌM+kBowu^nIu(7Lgml ל&C&:psK&d YYj@lb>A0C0]0Q<s n.laD&A@5uޡ'? xM4vCKaAMX`׹4ɡ2EWn 9Tqߔg¥"X"7! rWXB,Sh #5\6EasxYB5Y, g6_1%BKUu.U v, oջy  Bnd 2tBBAǟPT1U칋XAV6TM' ؏/0̀j߄UDy-w6|/p_o˧V=p`ꁵcjxOgV'+㑒Fpeq@=?Ju[~ΥƟgq9~79?7zm?} pzߊny-{F[mվ;z˙H\Nο{g֯m g*%}}p~;8:k#6v6D#'w.?8|YݖϫZIolEM=/~EG;_Csj΃Va¢{4x"DsE3+M gfc^ٱcf2 V2*z!EQZDMJ-R A;h$ f8{u♓W}su*xp^k$S f EMh5ciRI~jotDDSjyl'RU #3zSX)KTW'L_ij󢘼iUb(Utm4;t./q霎c _cy}&^ؘpTҊYR,IR6xYLGpt-]*\0>*dO_7"z(.UZF`m$WzpHCw>?G XW$+lrْ]':ԃY\kCB7"oV̷IܝQrijC}}ثre3^i.ÔۄK 5]f5|&@ w(nY꘩z"aq-n Li34_yĚkun/hs1T[_|p[`K?-`6e,*;?cth!E`A;c? \E EV`oJ!M~?K g8iJQZ~#0-]r)yy]yQI?G+^e'E<\\l!n煬uvty~0NAWLhHwcr u<"W]جOWZIJr1BHt̘$n0rVmYFWz5hL/^}٤;rs> ȮH=la7 vC{T/+kkyHsi??Wr r|xYbg ר>zx_ vT`$c8 O{R{)@k# _M_w,`qᰕV/'n3^/^FGʕu}4R$#:=ѢlZu?i9}&_fYf%w:$sO^Fs6H^ 3MG$f=Km \e@7>9x̢SnnWc`'A[ɛn)@JyP"|@}V μHwBt_XyE,?.ipUXQ~\ϛ7>,%Itq6etZ܊il9c<.AM"׋^ڭtv(t@kA!dq(/ ~ ()=y7O*Q鍔+gEOdoWM~"XQ|hb_Y+B~H,f ]WA_\k03[EcYR?!q TϊId a< ?B&,H6;zX >5weIB }ÕfG̬U0=P3`:/6b[`YEIA7<"Q+i[%%2de]dTuxzmoQT[+ߜ0vn^Q? Orp-I`6ۡ'hdIiZ)I2 Au> * 뻌PXPZǫRL F`^X`F2-Hk?dM nf7 +phKd,ZVԨAwq/_R,j YA(Ȫfl;AxsL; 6|Dj$>fK>=&=B9P h1A3cs ɭfE4Ȥ92Y k$zem,57Ggnl- \}ÁjIJL&1-:ŔeR ;ϡDbyc3a%d }V29wc.%?lrH M@84ESR\^ >Bfݺ$H6arB\ 2#5Q3`\,QE=q =owjY# \2c@L5HN.WSOXs|r%t*2FABrEm|"ou,snYIoYp;뵚l&br^S-JAF2MLPA4PY/RoՁ/Iy3_iULY)"Bz^+f$cB#=69x/{ 1anF6s|lk|y+ }T∳XQI )XJ"MM gLo`R.Ə$t꺏J%kJ^7"wQ#[!m&@Ս+ VS]b IO=GȖ^9 gIQ}X+ao禌SIY|D!Igdlf#ޣHesLLL ߁ +Q)W)IRЃM&|f+աʐAuocŸTw` {R}Y#JSCm9_hDU)Vbb/7G!sΖs!3TK_]1)7 mr %sxDM\~6GA\Jo"IDCsۈ]*Kk$ O BIK^."`O=|^tWǶj$f`n $>3[i.Wҷӳw+Lz|^cԄts/V3eK>s9iDžU9c+κl2Qpqe&KԸ灻[DɿVj:Gp=&nQps`8*c>jڍT:X+ j==:yUwm[k=+<~=hzt[ 0V&nhwXv 6*]2l [ LHgdh(jnȠSh<|:<2G֬m7栾K[k&;Xs싐s.8aY]˨ \fH ʼ=jҰJm>s>uKļ].Ȍm4}jzG֎ڴhH7QjSaHdDX,Z հ&| GU9Mv#ʐb8Bcm麱)̟SjLx)W+҇cNW!?r_a.Io$u=f0J~mQ YLf Mϻ) PWGDO ɂ4? HC0q[HjY>$dä$#w_1c5N0^Dz}%8"X5Q %?sR}@1+!vҤcc$J&eOY(IoD5@!IOt/|g\u{U>7¯,kJ7:\n /\g?;=eWffo R%2YǵۤbYo vpJ9Z{|[&O7iOeZ>Q5 $쫡rg~Ʃ-&5 ǦBV:'5 NN^ε&'$Of)d9^%W+N<&hL54.HT*SK7AڗS^Y\\=)SRes6>݂zhUR{6] ,6j?C}Ө#2TrJ=JmfmW]LhQR6yTBys pE BO9Aam:Iz+ecrF=LTloHOz!'XƗr1F&*I,j4(b\*X,?a G.zD=qB%gHR_IK(,2$!t;K:aƈ)h`5#J%@ɁT$mPRi<< Kq,9LUry3>v/DqmΫDʔlCz4+1R\+=Ifsso0yPc`_ݩ7?4ǥʳ3h9CҸN&Rp2{z*ˤ HNhMӃD!W0{[Y $얰ݼn`^١Բ1.)&. RV<qyBH+nEmLYmW:rUV&3㋴G;!3OJo$I:ZGY$ɋ]J Sˉdc\ m1\6t0;Ay;Jޖɧ[8_/-ouua>^s^=+8S5y݈jv6sJy5?w^~y%}p8WWDE3/8?d2޽98<㞛Q_8.cgQ~9ϘGw;?>բ=Uq^4 +\}@_0emʗ)*0BX\ɦM1 J}El%@"[1YN/BP03YT꘧:CE$ج͖1q}K؝0 ;a"&wS`gР2w'I ^2_ m򅆵pM;EW9^ha9(8'+ᄉ.BTՙICSYQuIw7:l+1@e#8#c 6IZ h|:r61G]r4ƷQ$պ\)N6 .Y8t#IK庩8OI*T.[^C LyTcr̄n"@PJuw<|C9xKO_+n2.*ʬrKɉ0D ,}o4bg힔 ^2)eƪPeE-~󣊏50 \+[,+MдD!ZE0zABo|1${ 7{ARۺ薵*O8Y焻2UAm6cBrV#&.s4 /bI e"Wa'/IEHWaj6"yÚ'YңJU\ 7-0DB1G]Kzkf'Oo.D{'l# k6M a6v#ޗyl#c믷շ $PNH(R?򊂺=$*1~Wωn߱̀rEI_e@܌ayp.4aɈ:a;ⅵ B%M'O!I~*}lǫ$83SRt̺ IT@ kǘ/O~jK2U`vq8kxȄg eEf~s+*ŞFDhR'EW6WrIjS@FlHnKN¹Tye2S` G e#ߜJ(vʝ f{DRC/V$wD+nҿ.p1+۪rjl8܇a8hy6ZZQ)@HdKb2B|LYm>:M"ZSwHv {KsB2zTcYPN k\4Mf玳UcCDA7^_kȰEbH8{ϛZ(.Ua\_rW8J,dacqN{&>l?UF`mYOGYQD)9,_׈@"dBrİ A):Mmwu;)E/{6ZTfٲ X- $|xM zܶ8ܾ$0YD/b;J4 ʕehX#ِqc`ټ9y˖4IޙTL{&@_#SΚF]f oli{XX=+T;_BpI/J2S]+V0oʱz\l{[?_BZܻD"EƷInjb'?{#oC6c糜Sn!O~/7cmnzT;4⅛wvJ7IY n0*VgEtr%Pj|w*Qc+NjˍKlw|V)C/m0β#<@r>jȜ H?+96+csT}}klsymiL`38?pػgmշ?q׾O:aNuw}ϋW+uۦ/u\8)[ioA7ے~ٻ=^OfL::C2}\tF5tDm\CK wo'~-yᯞ(1i }ͱبR&gU*Vs>kw㒓װ쓟n oYycno=ܚfxuWꕷVI羦+M_Yrϱ6s#C*,nPѥf+tYkZ`b }xKBMwMmkXm{{!%qc  C*lԴNon\ȗ;ٮ2Czf)w7_'d-Y6w.S~=ikͱ9MM^Ĩ|lgS)֯x=yzکʄ?7-]`WnP -3~2:'f]~n'rۭWħ&d)X~V{{tykqX  8we\d9ap#]݀b]W_] } Z5?/R~s&lPK\8[\76xdhɏzg}˘z |b~XCٴnOiC}&@OoOh䞄l%y܍nrKGP=Nxޟ?=^ϻr{Y2oT‘״A{{~r_,sM}%V@RnUtk{8Q1k/9ysͱ7/-|?80,zz}[c)e)nCUvͽdя:PHXa`։WVt;f_Q]v%^+nix m$]J+ :VVb҃k _ڕt?Jl>%GsvX]/|e/VUkS↲4jWq]%nydMɊGFN,rCF64iZ>xdmks͝:{p#rG=azKVa#ߵuJc4n_S:4f^r:l|vck|c͝GGƞ~6Ɲ+X_l̈2ѯԊcK'nuF%m(ݤ{F~<͏5qۤ'O*SL1׮Sy{(ƌ3Uri?=2WYbEǯ?~}pѯ?}>e:ځ>~ܹA|(jB{&{29 \qOwহ-6Kf>12zcl\|bv􈑟e+y|&~Y׽ZyExN+eWU5w,Vk|^+~}[Gegǂ~դpmO~ԅg뱖|9ɹs TeSzN͝| N:jM}]?_r~&|'q/~˔6Ǐl͚|O'>%=bggL%2{H˓ɱnYĊՎ%'d718OX csIJ%7`W^q}s ZM[olFeﺲDo_hTߕwƶE>`|V:vk3arǽT9M\O~|u?-Kf́3OHÒv:[M\ӢٵfL)k3sU]Q0ґ̱G%%dYbH(]4-vbboےGOGnYÎNO-<^GUli+smۡ'fgKT9%RF^Y+Z`^ǣovXvNo>X*ӰןxĶkg5ڪK1ֽZJs%h?M,q[khHG Rꁔg?FqwvNyްֹo=9ΓһUƆoiт^o|Z[rz =7k^/w1po%QQ挝C2ژ+ V6j@nd{旟]zʢk\KwtQYMط-wX{ߏ/?R*/ע?֬NX[E_}۠Ew9)eI_|}N_nd_4.ou >=cO>yW?#-5qkin { ?=>5'u_{q͟&zl^i[e^^1[zGTy>⡿9]]kV1e=iy>IweN\C5_ۤF,/e~Wo=ů?^,4lo5?xootbRV&?릪$>%ZeG|yx _/1dk3~{t/WNTSW7Oxnу'7!m3߷zw--vݦa= QN/fwžezg/9pQKD趹?nP:?z5jaԩ x>=wu%n=\;2./Xſyʼn+[ַؽyk+oq?M=<6gujFŲ?z^c'l` [ m l` /C` 0؂fWo؂dH^ ބ-H挂mF6w` ۻ f}2lS` {Mm:l3` Ff6̓\!vP|`[ǰ}ۧ}XŖe}rؾml+a[ Vόumlafضl[a[ lpq&ғ¶m7l0RKc`vð}(l` Nv Ӱ ~,llv?b";_a6[2– ̰e-+l-la[z+`ە][ v5l`ks؊V t# R =$JJvcBX lea a+[ͧsf|ܴ.Z'Xͅ=-2}$>޽*!&N2b?!Ǝ뭴xkt1lX| - 瞋w!9sg1kV|ƌ1ujګ*o<vmW_</ia޼ N0!A~Byp֢y މ xWK n=(] 1Z`Gp&6p] ;v7tG 2h0 x`po}Gng\2!Nq}o.nr_5pǹy̘ 1;>T2#vЗi7Ots (L/SOrݶm?6{h*͚ś6 { ;$ԉ~{5kQzrxŊ2@|stxb ǯ:?yijggDA 'gδ˗૮ kg(Z4x9], "4U aCG>/|jU0:]8/k {~ pn=۳HSWwd#31jH7>8Q pA N^7.p-z=_gQg `CpO3c7|P'nsN:81n pk x4Rpq  :wN 81s =\F|pĸqX0{ԁ /pWM2_АA=? <6|S^s"_=;!ٌSet|$"Pp! Bܣ$V;/p D 8Httg%\D 0~|AF7Pp!@dn|fr0|qR  /Ɂ__|$U  .pd|Xq)_W ߭/(\aPxT#|apQ /\ _7T8#as7$!# J l`p.pҡ3$_n@P/5F0$80dzǤL# Rl` D |A$nO+/}|!Q'18 RYK͇ (<cz! z<0B=\' *-I"8a^^=a_ bv/rC?P!]xHZ0#_>@ .f _Pޞ q_0PeF_8sp .YCU*|B ҡ *_'%yX$ $ y5J`C hR;I&ƅg^ npÂ/0OG/8/p;_DLQO_0 .$_D*[Pa `_L`;\N_:AeUU,QBQ)މ7\8paG ~ /P=K0|pa.l x[gpj *_$G/腇_0iS% lA#  .ܻw&G/L@ _~D >!T /F bcQtȠ0B/k0`àLK^sU^². \&a(: P` zB T_ Fp{sx10?B[[`xg3Og(r҈x܇ 6_S/b|E A /T0`B"#LH_ Ul/l 2'B% \D^"|# /rp!¥H  I+0(\xA3#/E_t^8_G(_M/!*>ĠG efV̛[/C0E{Ġa>7/lUet6 .XND^9cw/_0Mj~~0A5VP`|~/`aXf-^bHF}+e;T4I'1/͏Hg<⾠pO80饂;#= +b0p|B(Mj 1l(v\]/&ʦ /X6 `Yт/ s' y;uviI,Kg rT`pA#,PH/_VZK\'M\Pg C͕ b!L+)ަpUX u>$wI/5C > /_1hD]0T-LڐYk\ IoƧ bm(ȣU8&BVR*#L~„ hD7Z0(_Pԅ> y|A,%gxCOG1WgIj7B&G N.%! ΅ 1|(pA/>+axDb0@/F!RC JjĐ1:\|3Tgb\_#ԽfP^|!Tj` :P /\~ w|#/(VÈ1"_=˥ 2%)xZd*/Տ. {vD@a|AT1EV*B"yp!&TO_0PB^=Q_ O/_ Y`r$~!N*a/| L\8pT A/x# _#CHҎhGtp<)S_QL0|P lUt2z(_Mj~DH/&_ZzwJP,9BӬB5tb~g(Y,لBV&//Y~0 \]-ŋP1va]s|'4M'RHa s^ Y@^Op?Ͱ|Af#i: Y*+0B$ "b}M.$V`و b(ũx%G_P@p. p+AM!^HNBJL>5}tիv) |)/pP. y3_jd4?"'QMB}Q/XY vE+4TR#/\0.dEty|(A!4٦N8qM0D`:3 فjy/d:q!H`,da/?\>صK F,|0ԠQX&%K{,HN93?# *Jjj̐cvB j[- .ԩZ}| 4$ ZH@ႶҢnN V ip(%j/$b`K ,Wְ2E?fmB/K:;ӫ_PQ8bD)Z5y_tWMSvP9B^e*\ j|Lx#p Z*G ^ w&bL+dpʄ+]|hC$cLI|/0+$|T ղ)GxZ v3 _9_fF\^CNz"0(h3Į||AܔF 5PCmAo*tàрMCڤCV2'/vF?/Ч# <143Bɂ֚b;d%P_?.L,s')Ɇ:aoˏ ,~a8;} Lm,'ZhrEh { _̈&GXe* St;O!SMz,)jrDM˶|ͣ2u Lũ/Ђ5q% HM0Bm{^Ak$GTp 1|aȠOZ.*YeK.w|!)_nlN)j$T u~a- Ej͈ S-NCPD ּz.Ԇj~gL?_0!0G v&UG'g|)PH.e0VZÂ$f YOE`~ T`%$6_/l(\;/dC-_BESs QYB-X .|| o!#Vg(uVbDR0LQB-NU#["\|%Ri0SUKD`"/`ݷ4AU "%دd^˂df<2XBE B TT>*/^@/7'n1_P &lj~D/X!)^|"*gH??{*tC/0!/)̵_Ȟ/0?"d|T G8'-<.CNݜ.0-B͝>#N=}|ARO@p7>b(nB?,4B /Plev .K-`4zȮ.A`(|L!chL,;lZ'|q E8 zQsS11\0`!y_ 5ߡ!Kg1Ql@<"XԯXmFfKiI`iq4 m} mdCMPP*4b29bH/ST^D;s6G/dF[_ 7l0BR;/A© |P(+dB8i-aX R`=;C-tF 4qCU7dUʘj ⩶2Cx Bz=嬞.0®+4NVJ2POe-<`0œQ 2>,/f8|XIFv|'6#eMPO^? *Gy,[ߌ3w4$_:e,SQB|R%YЅ^?% / 4B >Rf1d~9BCz1^[4Q jH\C1C7l5Bz`> ./$n~iߘKwɊS%_D' )|JkReB$/`eCwvJjPr;|ʅ*[!+B2Ƕ]|D\H6׊x*[|RYK6B,+(SȀ$ 0"j*5zI)F `O; 1`'k1vP*_~$/X] U.|Ӂ}Y$(a\ڞ ހtBa_uْ$l!R'6_ض /ĠsM =a%)Ȍ0Qc*hڹt\.TE 1/1_Y0dw VVm/(_HuuT,]Z)m X +/Rfl2)\9_ȋ_sp̒P D bV1(h~Y+B ] /(b`29;CBK(JKbPB].q/A̗P9,B"T H0.>sj@%HTK^1v[ 5-ºfP/bȌ eIH_UJ2.\0iP[Š1 TW> ԞDl/#lT<* 槐+2QCfF|!#iGd-wdJaH %Om; *^~ o}vCEt3d .e "UР$ 1d 06_`ݷ#ΘW.qbv_SaF~DFD`þ*d_6_…٧V3&ZϘSrWlE`:DM1 -uX21q"Pʐ];TxZ3;X\v-B͉ʿdc)_ nlMPP#Te3w+KmKW(C(!?_HgD0\-)_H/[CliBDXo5qЂ!a/ԅH䢪8H3Sn|!;c5#/".Z(#Ck#:@E j`|!60U".;!"rR }V6^v6D aT2(VbY,%$v CH={xw >1 ZE;^ s1ٙ_МEz|UYX*Ⴎ*]66s<~y20R0eTȂT_Ph%jG K|©c3ժS֘| ZJ ƪP+GԬ"{2" u /3*_@ SV;:%oU&NHEG$_Pl]TW _qAb8ݻϔX U0/34-Z?brDU P #E~Ie *^Ȯ'4 E/[/0_|&k0#]Z]0  &aW&ˡ$ _H ÅI92dq҄\H@Z-%ǡQ04Er%AeD.OVUӷUHX%++̆nwRlzy2#b/ ^kf@,9*ª%$/BEʙr]UVW"$V$t0;iQw)C V*ˉȴHDa|ɥ-!S-N|Qd?T^uAGE }|ag"Z< `kX)J>N 8K0Ĉၭ( &aU1CAݟl!DP=|!Q"4? "AʠvOCJ7jy45?|! صv]g45f/'^ pa+ =->dE7U.PXf dND I*gLFVSMC29e &O ,-`ʅ\SͩDUCE Z|z5B6/rޘb{S.]E}K4vYCE S]Uv@Đ.O a>&|e=Yćr(:kD Zp:a Y҆&z[Y+Z 1(e'_E/ Z<$#/#ЃBP*|eCG`as)ᣞR $"=_wʅ a 7;@vj).Ao5Vٓ?d/nU$'/DI.pʱV?e|Aفf!] \P }.QYYO=bYsˈ3|}KP U5TX nԤYq&g ;#k4eEXbTvF-C SC{-f!Wc×etdtBe<|K\eEdqnuq+cjRB/h5Jq̏Ƞ1t4_D />OD"a}E(_X̕-}ER`~&\`N u\LY Qv|Gz~ʧ4)٦& _VN鰠 0lTO Y0 6̑vܒ4c._~p3#,?bJv! bT Z`r|KE C=~[Mt"aauSbp j!I ,T %VvIVK`/~c9UvuJvpXG"%rƅӑ|,UVJ`ʎ5N7A-# UPef>d[' ٹBZ6/d/dsp٫W &afT"_kX!KBP"2Z3"m5K~J`O̘0Q]aJhxaJӧZEšqjD͘|" r]/h;8VKb1%e]thvSCEa͓`Ϧi0'u2gṣi\@ @M͏+UB}|A-]/|E_PH勝;@@yA&p1]MVРZ-[",6\P|AAdk`sQ~3nrF aˎmY5`%!(}kI႖J(Y=ՌWۣ u%(pxw>B…H ։Chͥ(_, *[̏0PܠOK`OZժ..pD dKQ'-Q@@/r7tK%.tXՕGA?jg,/|)C 0~K653:eu"LHWBV \R ڭjg-/Ԇ,_`p{3/J]2B&ԐRpzt`qhP;Yф 1;UȅTP?6ŠU [M)WfB&QJWe-U2 UGlQf{̂amPs#|phK uQ "bzCUjD p|,.d̒\*blwI/&lF*a Ps"23 v22uТNT*)3B.0o#r%*_ ]~YSE 4?Br*Rrޖ5ө!X ՋwfӪ2BԠa}VąQ-ΚwNePk2&L@p9m2\DŐBtP႙|KȂ0|p 6w<V.-# "t5, U f<`+ C;CR5gBUxLXN zBRDeF%F=C!Cp*Yȥ؍F| ;Q .;|ArF*W/^[T>„l3%9";_rg.FۅkmٸlɞGDQ?:| QVM*_}hEo3% a'^PĐ|Rx4 #ϗEmt98UpT% X85v ֳ̬Z1RbN%JHC͆d1.BtE~aWqɴUs'Q3#O/ؚߔEz#>P#1d-/K"[i>? YD&GvV ʒpA‡2 9a+Y0֞J> fߔ;#"= +Rp!% #{MH6_\Iۅ_B/T/8 =BaN {  9^maH*ET h;0pa>Z"8q.7(;Y=0Twaߔ2Ql5JSE =0osF cv~D.,҄.(_`rdXXH)tT>&?g 8b0 /19BVVl2ԮY: Pu f ''aP1]eI|=S1a" VEB>`F F.BM,$\{h _/V5/XjD _HCǜ9/| [`vG yMA*_H`.}i RQzRl u[rh":Y c Ji-bED` yUP{rDٶ.09¬nve b i_6Mղ);\=2| j4AR6v/%KEI|F0CEG $O{W)F%\'3 / W6q|nr JR+j $b}Ne?[@&u*S5v(Q]ÜfCPUps @n:_a`ʚK`rveVzu&Y HlDfF(n4sؐB"/U$s#~;E 7|T0zae}mh8tg,E7T|jjghC}NCkv|PB`Aj)ksiCpP "l—1 XԚ ~![l1 Oo9afÖl{53Щ.zZ- 4|tdķr* ˎHO=JbQh a(O CÇjS ՈAS$ruUVs$(hՂq*D/, M%>)A 0zoNK'U~a$MlBJv-\~H|/tJסŚ532.! 9(P[R.0¨1"<- l7yX4 _m8}V ?8~y|P|b 漰B&D| 8CU"0 W6Nb lfZNuc[#JBB%+Z*¨UuY/| ƺ$J0Ъ1q[ryjv]I -b/in 8Y,?\v'z̆$.>ewjt|jnj_06_]Dm:<Ӳ$d(_0 $ US!OatHW? | 1dKQ*XXrķęIM|^!>`WL;eY)Wf@Z{)Y%V h2)CilN=S+e92tܫ r|뤏F cۉD vb8XC PÅc<tʆ/:FHhkoߝ*|A!Е_= ]N;#%_QnsvJ )kIS.v5ԕds-9{nPhHJ€ 4;S4QB-rQm>cU:O;[-G¼/pUP5)3#l4*dD(JDnL>>q"X{uvQdU1lC [\/6_t|#=Ӳ/0/yӔ$/s\U;^ /43pYr/?cF02MrmNZY+'| }WQ/{3->rCoppd92}^mO d!k/#ng,h^.o#hҽIwÄ8N4apWaН 9qS#Էŏ#ߺ wqnOPF0<,:X: /.pqc 8xB|z<M"c,|ۗHxY tEt׽ !la "bA@Y  && ٌF A *E\n'i!3MNWuݺU{|Dn(-4]f\_B4W~gTB_$H&8JB % aR҄2rpByBBEB%BeBJnL⢍ }ڈ1 dt^6{p1/)i$-EJwӼZ։,ku◲gT]hZPgѬh@6-aS( D`]' |u }ɃDNLHi.6117"%&9hx/#gX'_ԑ iK~7wR*:9)MJWgXR;T{ؘbtɝŎ[.=Ӱ4B7U\ cڅnitY@J'IV`nT)?2w6|4X@r si^FiwܢpEov]*ZXc`\ЛۭHAnneffjiiiZ߾}h-""Bw?}S۝2W+LB/!Z+H`$M$K)$KHmM!$KB~?ɒbZdI1MGk YCKвI6dIV&eihW-gglFJ T'Y?I}rɦ'4zMO'eh>"0V۾`2ߛwqk^Q}&e [gv pߜq@õyr^}$f) vH\V4 hc>n)k9Pg0O }YC 󡽾YRA}4пzcH'CUtuĊz(V#0\EhDhNV`Uw㱎3!6cK= 髱蛰cC/Ȯ:Qgߣs g(g{J/=q̓Ez=sDyOY k?KTSA$a>f0_gmq&uq ^ G  "`"DM h1#ޢcwIU D;}6XO +vC8&'~y8Ja"TeQAe5STUsDZ$ko|(-ڻNY_g8wD|<q r|61j_*j /yEL^_lZ;%'Z˟R$R{y:GHulp!{E{໐ӏ{ /=q~#߅~FS͋z6O|w7猞5x'Om,0>m> >l^bKGgO ہGYfGq?;y.nvw 9KV^me -6֞uS;X^4udueS==~dKԯlb<[|r&UoQvUP5/Tw3 yɰ2|4R eN|+kiowgw kb LX8]8̏W]:00[`%UVV5`T=VUb5TuVWUUXsUUᬣ*C W'rX#׊r"?;W.\|_|+gsrYf SDL Q&H/j^m }{dƐD*Q0%0S| sZX(6VX-:|!NqS~qDcvxrzʍgTy7~,w5L;_[5C#Oc]M!&T N\!* !"]+<~=Ӽ&uk~/ wl` y |·F밎#,*7&V~ƞ'W x;P.QO;<=xr -q?,dkO!1Z!/:dn˓o_5{}N#;E*?~jy,;yOB[< sáAUwAy> 3!/? @}7 W/GkPnPrE?!+ 1X<aX%_xlI9a;51/wbsǩfly3zcm~yErXcSxU2:# +񨑍猵-.Qf~̋ R[.Qʦ_j&U]dT|I"t9O-kC풹I]Um5VGfXCa:\!؞Q|ِdo16Ȱw<;>`} mvilF'9c3 8 {0+8*ilgK=O}goR_'n;ZC8dU͊9**8mT5'Jqj™M͝! S;40ᒽNٛ` VKa=F3`=_PNV :2 * -lhlm?z[nT/ȥ*EIN&{mN=ƚ%UiXI4RKI9HNYRe)/$Nɪ⼬.~wLHhEwCtuu^A[+D{_9&'VfEXcs^{#mhdE]h6)3jak|זwQKo$f?o%ywفȇxl˓d+*feٔ&7d#.|$l ِ 1B-xS^ґ7% wx$0rt]2/Fge;&w<%Gx#y~5=UސN#}{ElѼ o`9+laol\&ɏd)6Mfʷ9-R:[!Vz9}!Gr$;(ovZ~L$&iV*ڄ&n 3d|,RH^QlU }Puoߪەٙ[/?h{T.SO;*9F8Imtl;ì$IF8)H'5܉oe?V휥E>yF:mϳ"dwU wYe\vf[!{ܾ7ם"xU*)3 sT%u}7~nSj:!ݞ&IH{k{E5!ƒH=Zڶ] ՗~Oɱ3UI;c=%;Xc̀Lg8ةjE@r}+©Nu2,3 *a CHP`DE(’ D茊eDݘ@ QT4@|té$?s^wVHlgr,~A~'K&{1ge_@*TNJw{|1Q3g5ӬiIc/+`fC~4t w$.׏ ^Q'Eޕ=@6eX=klccG9IŽt_w}.:׽.`% ;L `DcKzGnjr?AR'>UX4q7NFG\=%k-C%vpK7bz~6nn A!ěQ+xs(+or~ Q*Y̯ShCqz%6K!喉Csp}p#zѵd{(kF x?hWӁi<>eST%o托4YOG!s J~^WI.s ~5Pn.2A.>(ml珁RжS֣t+C2 X xCrX*~Y'~rE W/"Y,eӒ*Od3/s{.nM;$TK KCI]r>r\lxLxLA ,IKu<H,"۹WڪGoR* X##C|&@K: #l=>i rd +s%"C{=Gj@{imn%K4b&Ĩ_?o\ OQNH! 'n/l\4B], \:#p\1C1 #}Xe!ʭ2`΃u旱GlUbKΧ$ ̠:nj-LH>_fTf;ˌ<)#^1F=fO2vC}}q`|ka?ٽ P'٨j:fN'h$N{#q'0 HsО$bXkNQ78wagQ'qƷ#Tęi3.:YXw^~8ֻ}/f3?)oopdm]튽e޳y,IQE511b.Z/XW[iuVwuU*1ZEfϬiWٯR=L7c̱Ps}eF96Nks<43Q9ܯj'kg/r|;}+\#_Wgs76c~It}Jo=Ue]f56zC3fk+ljӲ`+[^g\2_HxY tEt׽ !la "bA@Y  && ٌF A *E\n'i!3MNWuݺU{|Dn(-4]f\_B4W~gTB_$H&8JB % aR҄2rpByBBEB%BeBJnL⢍ }ڈ1 dt^6{p1/)i$-EJwӼZ։,ku◲gT]hZPgѬh@6-aS( D`]' |u }ɃDNLHi.6117"%&9hx/#gX'_ԑ iK~7wR*:9)MJWgXR;T{ؘbtɝŎ[.=Ӱ4B7U\ cڅnitY@J'IV`nT)?2w6|4X@r si^FiwܢpEov]*ZXc`\ЛۭHAnneffjiiiZ߾}h-""Bw?}S۝2W+LB/!Z+H`$M$K)$KHmM!$KB~?ɒbZdI1MGk YCKвI6dIV&eihW-gglFJ T'Y?I}rɦ'4zMO'eh>"0V۾`2ߛwqk^Q}&e [gv pߜq@õyr^}$f) vH\V4 hc>n)k9Pg0O }YC 󡽾YRA}4пzcH'CUtuĊz(V#0\EhDhNV`Uw㱎3!6cK= 髱蛰cC/Ȯ:Qgߣs g(g{J/=q̓Ez=sDyOY k?KTSA$a>f0_gmq&uq ^ G  "`"DM h1#ޢcwIU D;}6XO +vC8&'~y8Ja"TeQAe5STUsDZ$ko|(-ڻNY_g8wD|<q r|61j_*j /yEL^_lZ;%'Z˟R$R{y:GHulp!{E{໐ӏ{ /=q~#߅~FS͋z6O|w7猞5x'Om,0>m> >l^bKGgO ہGYfGq?;y.nvw 9KV^me -6֞uS;X^4udueS==~dKԯlb<[|r&UoQvUP5/Tw3 yɰ2|4R eN|+kiowgw kb LX8]8̏W]:00[`%UVV5`T=VUb5TuVWUUXsUUᬣ*C W'rX#׊r"?;W.\|_|+gsrYf SDL Q&H/j^m }{dƐD*Q0%0S| sZX(6VX-:|!NqS~qDcvxrzʍgTy7~,w5L;_[5C#Oc]M!&T N\!* !"]+<~=Ӽ&uk~/ wl` y |·F밎#,*7&V~ƞ'W x;P.QO;<=xr -q?,dkO!1Z!/:dn˓o_5{}N#;E*?~jy,;yOB[< sáAUwAy> 3!/? @}7 W/GkPnPrE?!+ 1X<aX%_xlI9a;51/wbsǩfly3zcm~yErXcSxU2:# +񨑍猵-.Qf~̋ R[.Qʦ_j&U]dT|I"t9O-kC풹I]Um5VGfXCa:\!؞Q|ِdo16Ȱw<;>`} mvilF'9c3 8 {0+8*ilgK=O}goR_'n;ZC8dU͊9**8mT5'Jqj™M͝! S;40ᒽNٛ` VKa=F3`=_PNV :2 * -lhlm?z[nT/ȥ*EIN&{mN=ƚ%UiXI4RKI9HNYRe)/$Nɪ⼬.~wLHhEwCtuu^A[+D{_9&'VfEXcs^{#mhdE]h6)3jak|זwQKo$f?o%ywفȇxl˓d+*feٔ&7d#.|$l ِ 1B-xS^ґ7% wx$0rt]2/Fge;&w<%Gx#y~5=UސN#}{ElѼ o`9+laol\&ɏd)6Mfʷ9-R:[!Vz9}!Gr$;(ovZ~L$&iV*ڄ&n 3d|,RH^QlU }Puoߪەٙ[/?h{T.SO;*9F8Imtl;ì$IF8)H'5܉oe?V휥E>yF:mϳ"dwU wYe\vf[!{ܾ7ם"xU*)3 sT%u}7~nSj:!ݞ&IH{k{E5!ƒH=Zڶ] ՗~Oɱ3UI;c=%;Xc̀Lg8ةjE@r}+©Nu2,3 *a CHP`DE(’ D茊eDݘ@ QT4@|té$?s^wVHlgr,~A~'K&{1ge_@*TNJw{|1Q3g5ӬiIc/+`fC~4t w$.׏ ^Q'Eޕ=@6eX=klccG9IŽt_w}.:׽.`% ;L `DcKzGnjr?AR'>UX4q7NFG\=%k-C%vpK7bz~6nn A!ěQ+xs(+or~ Q*Y̯ShCqz%6K!喉Csp}p#zѵd{(kF x?hWӁi<>eST%o托4YOG!s J~^WI.s ~5Pn.2A.>(ml珁RжS֣t+C2 X xCrX*~Y'~rE W/"Y,eӒ*Od3/s{.nM;$TK KCI]r>r\lxLxLA ,IKu<H,"۹WڪGoR* X##C|&@K: #l=>i rd +s%"C{=Gj@{imn%K4b&Ĩ_?o\ OQNH! 'n/l\4B], \:#p\1C1 #}Xe!ʭ2`΃u旱GlUbKΧ$ ̠:nj-LH>_fTf;ˌ<)#^1F=fO2vC}}q`|ka?ٽ P'٨j:fN'h$N{#q'0 HsО$bXkNQ78wagQ'qƷ#Tęi3.:YXw^~8ֻ}/f3?)oopdm]튽e޳y,IQE511b.Z/XW[iuVwuU*1ZEfϬiWٯR=L7c̱Ps}eF96Nks<43Q9ܯj'kg/r|;}+\#_Wgs76c~It}Jo=Ue]f56zC3fk+ljӲ`+[^g\2_2xZ tUs; | H Cأ'i@m4a5("{L( 4 .C3QAm[^TkZ[u}soo7)/ܜx:ksF jlY> pE3̟fmP KKF!Mˀxr s]xEqe7JZSpϳf j`1a-o4T<([K}"}9 اG9Tk5ΚT-ω_wFLk8ziM8OoJ[W3k,f z^1S?V}n/0ힿvysf$=_ތc'Ơx#Ƹcj>k4/[\c +Dr'Νi>5/ycs'gNOϩhEnVVtW>n)rsƍM}(':`SkEc6Q^go;9zh;q} /3Os30#-+-Ŕ Qx\b&jƑ6tмEXӀYa"S64a+i:-kCvnE[QJK 9A?|>+Y:ZA8A7U!P^^nZV 2224 xr+( rpK-S`8 e .H Fp!pLGn4pkkD)@EiF4,S8n W_)~/ $ӈKݹl̵ω~AbGk"6cRMrlO8wu;[!zCYW$*)"D9BL}(8RaB|rbQjsOiP,Ecl>;zɪEo)ޟ/ŲoPg !=Eo73 k[KE88+se/)R0'yjwjhzV:UۯNRwAn%Fo 􍓖rrm\$x/[ .F^#,H:M=ækvg 괯]gP^f݁m;žN)J}Z,ϒT?,mxvMY>5-kh< 7d oKZ}g$ir<Z}0sx-4X_UPbxeb.Czsk,Cz'ܣynq[^{<%1ǐJ<=5jW ӓ9[*vBg{([AZKП `mwh5e^>ZbSW{+w;o8ڦ,;'in[t#ݤ/`j3ubܷ;ubC]4qhc9AGesn#x|ER^4I$J+9*&@:x2e w.sS8Yjڙi;ɴHSh^CK:{O1#3\Ps|m pkWS݊Wu#(~ _%)?liUhOsΡNfPS}zZRX~NJ>`4_0oi|@o}X[oe:'9^]vc_`H%Rϸg+Lns8; h?3Z57\5" Ңnwiw'3iA7_)k@l>:szLd~"zD)J/0z2~vwYړ2zkTG(䏂ȨZJ`b <O휁<y4ʳ- 9 ja{1Wk^CHF;.Rey6Sl%wIĽ*I%NJ6屬aŸ«|>Ot_tDGG!E"3E0{ɦo~VF I:ꡎ#ҋG)G}ZȪk]M] Rz{A_~jMX Ho!E˔]ץ2W"{e,oX06Txo8^}S짿 ߔzX}r6hg*C/x6ڦhPՃF IWG'#Q8sw!g~#.Uڒ5vEWrGܫ~ʮeV}/!OexKđ]8:>Vjy1? 2w ]ǡ1![vrK;/ǽ8p7JߥtWJݔצp^iGAZQ$E`U(6A.x~g M]ҧ }|UӒj>8w#G_D Զt:#3#8aWѮþAtp==S!XۅgetBRUP6PޙsJrs9gΙ(sjњJ6y,V1+' M5ޗ*ф)DRC%D<ߗ-$P&ø۷ T17rp7\vqd񾧂R93Ƕ{J#;<%ۮ]x<^jan,dV\1b?YY u*C5J48(ca,irPk*XXjRڬVj`sj[192̖@ ru<:\QG G} UuՓ-^bY37Dgc/)#x=uМ8gmC>r'xCxړ=f bX=X`ΙCS`My0bm3ۙ8\8à]vhX3E }A7l7ڬ`Q>^f6ogv9 dOb""a[@\/V"}.&>|cL0* \8s1[CGL: тd&D꓁_cEg![C'hL!IagMƱ,Xζ#;˖|vcA=SX(oJ**Ap= ö)XLqM#F<(AqҾYT 1< vX^ed .3(/B˖cfzw3bK,Жt>: p!<@o xG c ԒD N+A"Qw-uyx%ǛixAWmy;=']y6_ QZ7toK(5c΋nt`3nb+SFagDny).P|~}c4H.`"Fqv$ <p/c`){F4/w ;I"avZ`+] k 53@ߛD%]ҊpU)Q=T˝Y؝ym&UE]Fh.u/SQbJz hvО[pM߹uYeg"k,ىfvSsp:;{ YḾPY ~nD̷o, ̶'_l/I3c85/^kbgNMyqLT7kLֿs"}I~z~\ԣz6l7:mC>~93L/v^ғ 4Vg'8m>;l݅|M{ N9>_Lb5؟B[Ȧ9( ,V"\_&1.v#Ы'B[z..w|tjk%"SWc=cC NLHNz>ypBPo|\JG% ꍍ_щޤ!ޔ)M 0W/pkc;7nM/d_}/?, xVklUsfBKXĈP KJ-rRV?*MD 6h ( B(THQgڇ TML46={朝Ǟٻ_+r a( 85Dԓ0=c` 0IΏ_>   W 7nWE'ɘZ]n?-}ǡ8+U투)b?`4LiɶhBis£ِc$ ȇ~|ĀVntcj}=н /VGA@̔ysoE8kܝ6V:6¶(v}gpFps3র2,&.=qž[!> (yƵIRVz0,%fg=,H{'465,N}f4SyڭPO5DRVLm*޵Օ_&7{GsZ%J,c %s(:ͮ$ړd{ʨ1c|1ᵐ̭lõJ:zH?l_+㾡;T2-tTyVZRJHEA_FAXzŮl 8ÙxžXΧx9I&ThJ8g Mr4'4yux*kAk Xލ^d)x=A)Qgtw2Ew9C ?;y9L N2)8ͬE,e~rSh\TLb|9sBt)3SioӃsk]:I\ojtIb*N 4{鴪D w4%+h)ܪT%At1u,tz젥 4E\i>d|w%NƝU7PUIT$<_k\ޥVhAdnU?RgwFtm<6A2ǩR"*7Ӆ)g=zF2zI9 W\} ΢'J <_#(|7 .˼" D8r~xo|7sX؃Ct**⨛au.RE2NU3]O8^||q2N}s5n8Zɹ"G9&;hg8ilC%8SP?I۰.UZqmsν"~D) x*i~@~ycHl鮫$z !< 0:>_}NWO-ŠqY*-M?].9w>$a_<|)Lg7gg8Gxn\yҦ Ӆ?/P8\Saԡ (7ˉ5w}EՕ%59e_Dksg"|̦E_oGa/>s q~I$rVڛ5mMG0 <?Bx`~Qdz?W0K%>P! v8 $9$O:S'\Ͼ/IC=3 D!@K/%_0 FPsL5n\&w"w]dFa̧o"%Z +#Wa9asBSa!S[i0,۴λs'9drytkr7?uާfQeKt^|H78{hO\7;QN6ɹZڹ"e2'/wJ7Q%\3Z02x NwX23D{_!=@3@fa_,A>[na C@&(<̀ہa-kbxpYL#f37omDsGx17wh{3i4ޜKCet-w*mTSNS:a4gʙσW=$L+6Q\KOAwQo$9W&~W4g'BO~-8X7cGZtiF.Φ#|D5gtuؤ: lڦ M?`=iBiMmV&eًEvZI8Z׹Йj#TnPBViT+>RbAzƿCh xytUE:)- Ld`!D 1!$$f$\$ hhH[qu+-4;77.bݽNΩS_]7ov3}&MFSumWnDY~* k4A SfQ>K)&R.l>~7|oiˍno<;Gؒ"zm)Q-~ԽQߕ})b04*;|/H9qΠ@&~?0߰[HL%mG&ړn:39]@W n@j;z^7}A?Sp'A`0a`8FQ61`,0D;LS40 05b!cEvwuL+K_x\)iM7'@aH}zXDRʽ%귛 mn R['zjzۚk\}F.t q6[k-||궅,^e.mӰc6oi'=կ1N3~{R__OW'񞧝;D?WW!z {k% }yk"=&vc|c샘4]|E5kKзqG^np8A~M_;#]~|sOZq f+R,1pz:dH-lɓtS##veL^v= 6$t 3 yu4qi {h}@f-uϛ:_|PEg᲏&4C>{KsNP^ w1\Gy$/qnyRo!Ӓ,*@pYsVJuFq:ƑtLT(rRW ;8SūޔRW4Dzhrqdۯer\j߫U,G!Q EfI?E~YR%_K!*Jvhq^duD6c 3Lh0}nvji4y4'K^-o0<9f5*eXSBA0|tcg9JC{YʿpxUN,;# R'K/9ITȷYB;h3 o msNA{J:],z PDxшx*M05\sDSyA_!nEL:L`7d&. +A%N%VK4"Q/r!j5u΍z\Y/5aFQe䄦gf$\ BbT^Nanf²}s҉vk&y^3\:r&*A߷4Mr?7ɟO/Օ xytUE:)- Ld`!D 1!$$f$\$ hhH[qu+-4;77.bݽNΩS_]7ov3}&MFSumWnDY~* k4A SfQ>K)&R.l>~7|oiˍno<;Gؒ"zm)Q-~ԽQߕ})b04*;|/H9qΠ@&~?0߰[HL%mG&ړn:39]@W n@j;z^7}A?Sp'A`0a`8FQ61`,0D;LS40 05b!cEvwuL+K_x\)iM7'@aH}zXDRʽ%귛 mn R['zjzۚk\}F.t q6[k-||궅,^e.mӰc6oi'=կ1N3~{R__OW'񞧝;D?WW!z {k% }yk"=&vc|c샘4]|E5kKзqG^np8A~M_;#]~|sOZq f+R,1pz:dH-lɓtS##veL^v= 6$t 3 yu4qi {h}@f-uϛ:_|PEg᲏&4C>{KsNP^ w1\Gy$/qnyRo!Ӓ,*@pYsVJuFq:ƑtLT(rRW ;8SūޔRW4Dzhrqdۯer\j߫U,G!Q EfI?E~YR%_K!*Jvhq^duD6c 3Lh0}nvji4y4'K^-o0<9f5*eXSBA0|tcg9JC{YʿpxUN,;# R'K/9ITȷYB;h3 o msNA{J:],z PDxшx*M05\sDSyA_!nEL:L`7d&. +A%N%VK4"Q/r!j5u΍z\Y/5aFQe䄦gf$\ BbT^Nanf²}s҉vk&y^3\:r&*A߷4Mr?7ɟO/Օrl`sUfkZ[_m @Jo_{0I~ pNI)C 8>fî+P!$|U:3pAJ9;`xV$36j&mJ04OjNyP@IyUpɞxq SYt@9z q(y}@j<`^V6q 5 Oh+'0Q hp   Nessun titolo diapositivailista tCdC963Microsoft PowerPointtiv@p@Uø@7ݼ@4\GP;  P('&@ &&#TNPP2OMi & TNPP &&TNPP   @  'A x@(xʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwݧ "--&TNPP & ՜.+,0      rPresentazione su schermomINFNntaP83  :Times New Roman Courier NewCourierSymbolStruttura predefinitaCorel PHOTO-PAINT 7.0 ImageMicrosoft Clip GalleryC++Sintassi base del C++Tipi predefiniti in C++ Sintassi C++Hello, world!Funzioni matematicheVariabili locali e scope EnumeratoriArray Puntatori PuntatoriPuntatori e array Puntatori: allocazione dinamica Puntatori: allocazione dinamicaClasse VectorInterfaccia e implementazioneClasse VectorInterfaccia e implementazioneClasse VectorSelettori e modificatoriArgomenti delle funzioniArgomenti costanti Operatori Operatori Classe Array a dimensione fissa OperatoriOverloading di operatoriOperatori utilizzabiliArgomenti di defaultFunzioni e dati statici EreditarietClassi astratteCerchi e quadratiCerchioCerchio Quadrato Codice Applicativo (Client) PolimorfismoInterfaccia astratta Ereditariet e riuso del codice EreditarietEreditariet multiplaSuperfici e traiettorieSuperfici e traiettorieSuperfici e traiettorieSuperfici e traiettorieSuperfici e traiettorieSuperfici e traiettorieSuperfici e traiettorieSuperfici e traiettorie Ritornando al primo esempio ... Caratteri utilizzatiModello strutturaServer OLE incorporatiTitoli diapositive3_㩫GCdCCdC  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)PicturesCurrent UserSummaryInformation(QPowerPoint Document(wͫDocumentSummaryInformation8