ࡱ> wRdO)5_,@Pictures-PowerPoint Document(x3SummaryInformation(/$  !"#%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvyz{|}~      !"#$%&'()*+-./b .an {\-]5]wSAq40Q D 0r TAfe~rΙC&΄4 }ņ4 hM1LMa;JB!R}G)@ DQ (w;JB!R}ڥJ156mÁ+)i<ަJSJ*}tIRoobcI*:u÷8 T+_mrSMKt;\c\Fc £c*2⚄x6t1Aݻk6O4#  NS!򃒤D& ,006ۤ݌Q|ov0c.cGx2^Aˆt6CĕN&ݳ$kw+Z.;h+KBvݎ_j3Ԯݛ}_FEps~p-="@vlJX_nn?SG]L9!JillZ?PNG  IHDR7gAMAܲ pHYs   IDATxy\M]w[i_ IJj#6ٗ1c~dØc`uRbD!B!"D%YEݶT(h:=9Ix BH(=BX!(=BX!(=BX"r\(a\.0^% jQ4鉧j*|DRG#|!cuz0!GNQ)JB^!,ER!,ER!,ER!,ERLOWv1n5C ÙA+L`#!(CwI 娩:"NU4H!0c5.J]C-m>SV"o"ԬQT[BQ-Qѓn}s !D 45Na)JODa){Q!J2Qy<E(BԈ\JzQʆ4Da)JODaW{brd:q{p;= -xp 1O5:mCQUu6kjo ͹B^Nt+&yhZ utdw{OR/-nˬ.}੣ !o O&'gߏ L1i,k L_.q`Zk +X}'T>z*0l+TF@UD_H+q jlez]kcMiU GXx7~BKĵnka 2e ht2gf?oXGcٱ>* gٱ5B^3ր]}N !ss3,xNq1u u3' !o>USeQrs80RȤ<]Sk-GmJ{|1#sWJ5zBLՓ;]NJ{_H@(O&`z|奴h`GbV\@}'T/9eu?J4VVLДmnGBlC 6vqX3mqQT̗+_Ω dŢ2)WH!FA~#sw5P|pZ\'>T@`jcjFކ r,\-,^'BۇBXZfˊ"D؞Zfˊ"D؞Zd0EՋR6'BKQz"'BK5KL2n󅄼jcKMiΕrP-Sk7PQegfMM^-*0ȓ݀G?!2eA}8pnߗm7W3T˴5Y~B{g섐7ZTd2rrٽ1~bT!o7U* JγsD?c_^Z^@6q_D{u@QHW˄`EWWI ; !BLM^-kIo|@#r>QhpTEQ9:>M^-S.pq1 W *tE鉨OWjjЕ:Bh!^e(BԈ鉪e(BԈLST(eCy{"'BKQz"TT:3dGj5!- 2*D; ?vs 'BTNOOenyڲ3_t{R-s!5U @S Z5!DQ*= FčtP^XoJ+70q3G/ (}jjL>@U| ! kjh!D9%&-Lukq*\0wqV%xy^:nfO_WqAk 1z!?hj.53~aW.9y["CnQƼ!?}3q Ӌd G9;rf lޙJtJT. u6gg_LLt>^.}6a`>X1:zbv[7jߵnw 0#%O4ww=[➴J?W_Z/)^9z}!zl43p9kAaCJ fGn˯~Q+ɦvΫmW8s]SK:{xZ橖)Mܞv8S74Pc{_yxq6>qw+G?~P>&& (wySa%ɉ[cEnzoy낎,jz?l?n$$%$-7(vJ_=+d\fV<| pSmlH51> LO[ eC&vǞ{S;6xu="`eM߲:z޲ bkaә.꿟ꅯx g}F&ip02Uəp1iyMgk!3 vʿaT?z&'xoN6.fpDbS7M<|eEGYĜ)R튵8DѨnǧME´Cپt4P}:>m)JuJTtb]CH=K ǍcK{9S񶈎aݤ)GVXKVs9J[_WͫKNqkҷY@cȟ@e:U#&jϗ$ \1\6׼]P޽{\ cKz/tG[4 ga6zcNE. n:{ĀNCw!*8k]y="ٻN̩;K5O=έ-.9龁uB»ag޳.VTPZqğ)Z I Qi({uȌ!VCYa=hzAЧ1 T B5!DU=vq qEٗ\]L&Mڻs9x+.zxo6XLlH$Y%Bk]ZL"Ac7'&1`I.,yozrrjr߶f ,uy׏79-W&[sqgAN Hݼ8UgZOaey_9]vw?EV\rA#/ޕ8\.eno ^_lA[-ׯwv&tn6YMsuE
[KLIY^7㙧n]3 ]JX>ɝ`DܘPa[bQ F/O WKVEqxa8f=7g_p8=:OҥF~BABRF=j`Ӿśw.=n#3K"=q(" '3vd!sG肑G? l0a^Td7x žu8eiTzH{m0^6CewisWo|;g`',zטgmZ;;&AFǯ+B,|@TU3a̔NmLNo>V\ }iqn; <)Ⱦn//vY{W/PP$PS-SE( UG|s|uVN=xhU` B*LJZ=yy$=W*t8szlK)h45$G*<mko=p𲑱ض%L*K'G<` 1PmɍP(|OI;c gNL.&TՊhKwej8Q&\LX:jM`q͚͛|lڦ;[kYm^KC9gZ_]S~k_;`wd:.ObқFKZD!|7=X8j3x%T^֨%9~+?`gRLLz#fmS1*ܟ);+PѠPX65KtnH9ܓ`]<({{Lɥvz2<:IiM햻#ݻv+nY\Z>j|CT9m*㣣PI#JmؒG=JD:fƚ2-{̶Zţ̲v~;ʵ=]ll|8Nc]d j`cd! @=@O/u0oa-|7WyEV/@k{ߪ @bDZvRD|>n ?Ty.8|Gԭ=;}Ϻ;u4+@e.*6w"+nc[|t'6Z y|lnNoGWtK4՚?F1uˋ)&Yg'7q[[m'16w,3B%Ɏ.ieúWtJâ'YϞPUPuc! *USBtu3 =uLuȕ<1\WHZtjKgskuz i4MՇMݞY1`bae_I 8:znQ^ZqNQ@]kΛWVq'VH;2R3T׿,kR) &Z(HtuUJMKs SBEY3ƫT !=]K 5s˴pv˔,GE<%U5{%P?|%?p%O aai3D2``@j*DlTMn:ίG9Z3\+%=g柳KAh6~"%M촒msMW]wa0U̘Ra,EY)Sۦd*UG).M.ǻwl8ab Oz@n2z:Һ&~U2&kv[,%@Q^K*(f2 ^4FDyuŇi(;ջ'-STq We>.b8rN *kЦZ:c t%l'`8R$ xCWrsse*.~{#YB1SN)BS3ũgSt>^5Z۷v Q+(ޮ[]T>^pB4%*zLY:~u|f%K[iؙ*Z9hWQ/ s9' k߸3K1np*#gWTfYaţ\5},X5-iLV7?;x'k׮q3~g U #'C)"jdCY^9#NnyfmJ$pr!VկLl;O+N㵃0fL*0l@ctcլֺ{+ '9c\45Rng3%G|?U!9WUW k3Ix+!VHy_UC;S(/*CI=5?emUuXO߈a !wD6ΜVI2QUsWII mum z'?[:b:s#Thҙ*@R5IMk~8X`'"Y>u-_}-v6fd{o CArȻ._J2Ω`d'{x(Za ]UoX<3{Ov@{Ӯn\=b)λ$3Zj}+̗.!r9s@SAkМ݋.{ IE+ъHYj('9[x$2;t@TIvrN>b/ `-Bboyxsfzah ;SZs=&H]w\o>1[n/ 8v|f릮>q^2{fk ¦a0.T_[.nkNP6m޻u &֎&%6mdxQcŝ>p7[yWL@CP|UzZIN :'˶-_,;i{KiZ ;kGSjөFLe 5G7s#0"#+K݀'8K|(TAD"gb1nIO/ LRts&N;}qAnLI 3#bɉ  4wO]PIdN3~ ҉ռ9 ϊ%tfn j4%Ā'-ٷ۟f =n j- rIY/mߚ Nq%`g1M`+k-ST2J=9'؊UljϪ wgs/nWXNYn uuڅ׮rNt[&j]8\7^ LESIxvڅx#'P,:-T l IDAT9eO ^zrnmmFܹ"37mI&w]/d웳>=\pT4\:thڶ_;Oe_. ΂37F5I>D-STm@mWJǶDЅp̪Du`wFjE&Uqc;-STmP=B4ҢAף2)\G9Mn}& $2MVLL.LgR̲{_1AYB~zu΅:] }u3Woq(&:o&O ^rL !w :-SUs|0\]aX-STmżV|tpR4d強{J=4wύ%sR_G3~thx׺0ʟzRՁG7 7<7GYN$Oes~_໼$\Hc[[j2aO^TҤ а;/ D$2MįVԊ T7 pjyoĈ"$2LjЊ%h~T-ב×Ub8և.Sٙ}GWݛ0N;iSdڔsG)uTE2ào["{!zO@J`l]^ɱ7}YzcNX_cWiUWn^@}y"kxN} Y >A©,ANPײU*u|fPr"B 9ڣea/Z7 |ꟋxJU#}J" &Ne׮ak=L>įfQ 4=jߦzm*Z&. ,(7HNJ9|+[{mOSNz]6/*dJ#wjfA\V|pW@%zjs.S3zDe*Cq3䤱N5sYM~,0VC/̹Kţ3wXz>u@ȁ};Nd?NˌAޮRn3䋤oICGU@MiC{y@O6![m^ܯy4uaIfP AQQP*HUDPHhݫ}ݫZuԪ SDlTPEf bBbsG.c}bV47X{QdkkK#ecCJZ7.ΝRS#,UH jL: @@zLp G@YPޏb4HdI{}F<eٲ@p}#W._8aAW!]_<)dդµ?]9rp>z97K?xAnwI.USl5|aEh0TW֢FC}UjG*" Tغlע kU| [(n@ i2bEA]o=)I48_hĵ&m65h(=:?2+Oŕ1 $:yиIAl,V~>bԑ_IMTXz Z9UjYz&z&JL>jZlƅLm=7̶TglV'<;/RCW@s NgR#w[uk+='t$j%U^!oOx_-AbnBAbloP\u~3HHx/-y9!Nڠ,em>>}vc3GL o Pw|7e!ΙkĖRxvO$/ 62@X&K2x*@l-%3#Yl #n@UTF C ߦ[f;K@U`Ĩ#-\3X ea`T8&Z@›?7zE2*lqAxu#}nmw;wBkDcB--9~f0RЈ[fJɊP(?9Ps߮OIm"4Cٍ ِX Q0byBsI$4'TSbcHm"HEὄ$Ӿ SUml8{L;?I =tphd~##TiBշ?MRkJrOQeWNܵ7$^jEssOSW'7ҮS}G aƵ# sc=z).2H)N/8URx3oMҙ9'"'L6&¿!w[ P9Ws38ci-o^ {j0Bm7,C]Z>YSS{mlwY];s?hdg 4 6cYcڍ7F/h|Sf_#%-W3I5X*dilBbay_#2!z{z&<?qC: t U-CQG=@)TRSPC'6dkT\b刨,v'"szQyRm[{mzg`DN Q|z)ތFR 㧕T'KE)7\ ;ybD~, '| ݖ)H5&0jт]6' ] ٴ%s;  [fYck]D|m DxRhK8swr)XA 2kRXv3c0.h,P\&r^n+T+ !?&ozRT@:27F-SR wsUX6ZoҡkoOEz)@;064eݐFTk i6\ (–'ZQO՚5:`@+S~{X]T aj`8sJV?1+:wu͠J(I%hJ[;'R!&+lîlJ9pɹMkP28ӑdOv'M,N0mm4ɴ(23|uhcӄtft7=pݙ_͸;ދ{20tϢ>N \l\X grfcyc#mۻ:ێF/:3QYtOW,cÙ n&gX1/J? h-z9TDE=<39]&^2'tJ4T^_2!K';ziQBHUJ ?N֒ay 8g}WR K?ހNi$mxVuGo(<ݹq‚(y^3zɝ,u9vḫe֧֒VvPUQQQPB 4iH5W-lQeE\@ک{>]볂=[&H-bb@Tr|OUAƨ ^eDǷ]ݗ L yAm j8;$5Yg"_n@!WYu]KsM cu׃K?|$R0t(FK"ʍE 6xNQFQۧ'm ű~b- u޽?0#UL`j&L<1zl2/q,s 褢TG9g&uч(ב!zg#W,H p# /$շ^La~"Pu0Exᬐtk+k , a9rk&[pTZWUY97QZwͨ{u `ƁN Z ?Ur ~(U<7#Źc:.~H>*Sn 3L9_~tgj&,]}M@d24t5\MȖE<=6c@l#~;sVeN!CrlWGeao)[7\6,ƨMzO TEi-N՞gؚȋ]l>P/o/Q8J?̂a!Px@ Mˢ+v|{糀UX³;rP5!9qҝ؇u {f@Nҋws Ve+rJ$$׼1le@؂?$01[5wsb=7)[rѰ72,KtdRALA7,NO[C50]<`U25+9AuPq:pۻ(4߹08MpKDd/ 46-]pN"""$5)PQ$B@pp1\|s~>3sa+#V} L Ok298tMDf|)pB^LTI]I 3-N ɋ]ziny (<~mv۴[>x&9~!6` qwYdmޠS;3Ga /,p gE*{q~^9⫾p0y WdR&k'-3tL;^3N~ĜTKϠ39_AU[Z*M5q*:.J0dT&;R(aqSUҌk]ݬ MՍk:.Y :گZ:hT Sh{5~;_jHiPڵ0 8Xl#=*jO#Bu~ Wq}]̲yܮ=Pe|!o'b<Rl_\Bi#b{{󇳇l6G>vWzf^aCާUM?Ur- UJE[Q^ۊ{7 l=&ODZ]}\/Km_y9‘ϙ[tohDH?,NkԝMְkuZ3vZ&@^ pqjMh>_Y"d[톎fO`yZ&sd:y3"+?9eܴL ^9kHu~Eꓹ/޶cʺ ƌhDH޴̄WΕ$i)]eh(xOZcpٛiRQFtFh䆴95W'-D@U՛ɝx)6"J^)EZC{{řwe&_u Lh ź-! *"ӟ8o`mb!֧eB`T1?t\0fZY{0L]]1DFu}ovo9>!i!q9kN~ez*z2'S?z. _]|8jFYYҌi K˸`%ݲܰO<6p1:OV+•-*CWwL[&{8+Qel_Z5s%G/劤eUP 쉐nOp(*y-]?5@eVū3\rul%/ʘZr uqxuRE:+Hpf iP73'࿶e/%;voxL˔pI s}"BmoRFfhn^0d`7:ti򕅭 a5eGܸ^9ʊEMyטimᄖ|[pQPշ RϏVxָ1U46#L{JWS(*{F3/= c`ܽř~^@ %;dRw3J} i aoe CR|,zo;ܢ *;Lp#!kaκ^|Se^6{w`'U &<*Rs>TSٷg_ly2ŷpl\!sNFVw͞S'Qp_X~. u zӲ ,-ה3d2D$ԭ N.@Rۋ}]L̔',0?| #Q\U7="Q~@R?2JJe_&;zA:B v6"؞IJ|.LV)tʿkT/м _*>pԴD,ON_Ϯ8bK:r|mfx r޶ {l+8X:B .z X~=M;L~J9xH~Zpqw Ҹyc'}G v@vԦR7G+2;Ú1W~Lvӹ@Jw#: kMS@,lxŽ6,~yt]U:LJV:B)nOWxO9~?`O>6C*)՗-Bg"tTw/' \9-2<N{r͉>焀O!k3Qo}O_. ܷԘsTmo˽ pvr;UƷ_<ÖtR0ʝyXrLyCy󁺨B J:t~w":4W@[d NZ&mlwKą{q%/gPJ}HL- 3C;z䖙'ml=M5y93у4sdO5V:OɓgP]:sg[nV@~f蚒e `-Sif'VZzTH,aª&ȗ ˶Wz#*9B@[d _p`딨Wna|X9/@lҺ>uv`c*ϥ"hӇ ?T 鷯]yTmTof SogOʟflhi$ <5%: tב,-lKԣ9jst83*%cA `(;EJ6dU YϷEfex 2Fqj^ Qս?7wiXKs*p d95sM`xש{g?02 N/k>Fka7˒㓦G]Jk/j=j@:.. zBL"$|7s,M_WĶ@͵#eIg73z8G )0yۜsRLz_?(kWV]Y0Xv`)ZדD=ZT % mp8A"LW;/߀] sԀj@q:b@Xu{-L9ңJER6P5)&VWK,NƤ>PS c`ھ˽V0&<Hj!;JB!R}G)@ DQ (w;JB!R}G)@ DQ (w;JBN>wPkaGPظհ#Q h']JUQ籱*(n[NEd2J[5@w w;JB!R}G)@d e8m=H[lNIbw[R~J'.76D=sO##T?-qړKgoN9'=vC܉S"==x!S:\&0}fuTtBkk@U̽ pvr;UƷ_<Ö*ڽR]y妫FzϞ>5:a1 _8Ǯ/c`qwx(e'*ܙ%L7d7_k@)TEVbݒp8q^ysKq{9?hP^.ܹνwZ͞6þߜf06|3ODNC';4~>=5o9z䖙'uIkk@UW,CjwTУkG@uht)uֳvjwJV|iI_)t9r늭#Me?VQ` 7K]ryY8jhm D-fXl:%jeEXp:-H[QNţWzu/6J#3R8gJ_X, [wrLFyt{ƪ7|ƢUKE 5i"5Сhk 6xy\y!RQh~ԝ&CҔK~SZڳ Hh祘Gq9_{[%cզ@zFv,Hb նjo:F{ SĤJ+0 gtOJ.<{akuqu|GZ'2+c1S 7SM>^+ea`UPT{NaS2D5:W5}Lw OA>#~v=E}\fp9NaV{Mu2Qc$~wo=p*wZq5^#^M1 G~ѿ_g^>Հʟ2r AY4$"h׋"0kAmTv#?Bx;='64l?k\WKWoEj hky?ԍٝ:tju5mΉfwJD=yͯ͟RPpT:咟Ϛ6~3ߺ!/,fM +JJ`rMY<տ20ڼY+X{w'Yzd~ѪՀjS@(0X\]_\Z[L{ZsodYvW[ Htpsxa5`llpA!Gy $x*FZWJ@XEݫՑ;{Uʹsqi)O}eACODU`Ӣef[mCzL *ZVya2z`reKԋS.)i}0wc` iL*Gxuy/6T_>SJt ?<8* qo@C)@t=衉,&_E{).RMBȥrIX ,%feX[|w.Vوj#ZVRdgLu- 393~g̙ף޽9g9 7YQDŸ^LZܪ.=e7y:ϣ]\_٥_ b!Nm 0P_Y``s}@tt2:ޤ:YkX||q P 0`di Xd~ (tGbֹQ6+ 6ɦz.'rjV@֩:o,/:vҾ+%c'nMDt-05qjh[nw6jx7C5Uxfneª5gnn޳gOŭ\Ak&/5LJ=Y^@': {a7D-@ȫ{VK?#q7T[u\GWTyLt&I7G-@H'NZ,I*}jBZU+'[ZhהGXBTY-idTo?fI,"Qt6kH8]r!n>>mȗ_%ޕyVZy ?p8|{W[NAk& Iٲ̖9[LޔJ@Mf@ ?''_JMSWsv-P.o!s:u[[k>`8`% kTlͻEkק]v?K?S'hF}㽱9juq+.A`'lSOݹ.||j<wcnݮp 댳3m.lknoRl/32;o 80TP |QNxK)6%݆obO_yC"LeTٕ'x8Vy0 <>u~֗j xW8;/0$xwM_J\wbX2w nF}w8_^RZ//s*D"ʉʱϧwskѵ]v! vّ!Xfě'+Zi!`"]@]g j/p-\ŶY)A{^Jco݋P^i[]ұ ޽XKT {3/e^ tLT3`aȻndŶ@εj),f%M1;*;Nz~4Ymf07kmfMְǴC]:?ҎƷNWX]N:s>/MrrT|z~Q] PHmZ2mkc\V%y0jn~4!/=f(&l>w:[vv*]005PS^ݍm 4pe}]g݃Ǚ=q2cU@__{Gw?C\:%ɤPdb@lB>Ucgd]b9{ODW@3̀b[>2ʾP*fХgYM?7J1eKG?/O_U8Gއ@ǏMr 9㣝MXxIDATuNym@J3Pl R@ϡ' LTG;xC'71՗ÚI"o#4E27Uy#(TJYǐEӜIUMZ Z?>cb&@}sԄZ@-TϹx|}C@W!DQ th:jB4!ZMb_T !!! ZyIILHfZ@JJJoUé dDHXP%%%rK5fQ DAB4!ZMG-@ DQ p W6Kd ==VSFzu&\LfZCrMtYp }/=@}iY"JdX';3磃>cC\ .}n\:'QG"xDhPڣ_ wN@ǩFQBrD4 ^Mha1o"+:eF|קRcOS3@-"p{>LZܪ#x@ՍߋS{0JS3@-@}eѪ㣧>a7,w~~'L 85w#Kc"KD8:^|럱vJmU жV@֩:o,/:vIYsY3'75,/wc(f/$)$>QAul .zfI hr P 0SUPSXۿBh.74xPO`nJS[jB4$DQ th:jB4!ZMG-@ DQ th:jB4!ZMBi}mJIENDB`nm~7Y<#x;oX BKc|&PNG  IHDRHgAMAܲ pHYs  IDATxhuPw\DrvcFa]?bE fЈp "jSݮV;&te۹^}?I㯻'/}oHOuo Ht| M =i޲,L^ B#?0ѲU {*JKK Ptp4- m0p8hH$yoޯ޲,- {޲,- {+!/ʅ3m#MѦɹ#_zVj<=twlna؛P֍k(9\Yjξl8|rzkxAðrN3UEw)חe#^޻jZ2imkj_}4xogE_oa[%U,߹@YhmWfgy@,c?wj? `xホ}>[CJ~=1eu3o}ƻZMx嗁xmچ%]36S?H/n{l`YAߙ\u/F^Οd§FGF8<9y.s*z޲,- {޲,- {kHLTP43?{ɲ{%6yd SvMC8ޯ޲,- {޲,- {ZSE?* isyn"/u|bMz3vyʮsZvu"?~rtey4PXsr n80^cO?LiV{d Ջ_ug؟mޟk6s]?οڶgpoIk=w޽|έ[ޯ޲,- {޲,- {޲,C*IENDB`nT+N]dWժy ;Lg{LوmPNG  IHDRHgAMAܲ pHYs  IDATxkLU/Rlu8)®NaD7eÖHdN8#2$qel C)oa7c9\ c\\z'z=7+8^P.za;FKoVBm|m Lu}[T |Lf D86ҲYQJYôOi=]z +@c̓wLWk|*\ꬵGt˫6폟sz۫=ZZ,;vͭNIƵqbo-w^}Wb/񄿞jLcˮ_؝#Xim$ڧL>0}ह/Ӊ"S<=?rҌ2g@5pl(7ve{oN▿Quiv-HJ)2-Wwzrlui+WU~u{ 3*7pe1.kĥz ډ^WF@YhIʣ󌣁A#_b{w HYG S^ P3&Z v[=z=bX[Y,^3xZ-'N$sA~Tݓ.۟sVY?n֒5qc܅D;pg\+:=T3y uR50"wq!q3gϝ; ޛ MEg2&5?x/N.5}1zB rvhX'Dw~ؤr~',f5ÜpHHP;U$^n~7ʗ} = $-Ru[V N/ yF"O7V'N'v/ZSF }FА>8rlQ ACZut|. KN{{UOɆZeraxʛ-tʛ-7[(oPlByf ʛ-7[(o 61kIENDB`nWG> ʿ$T>NXVF5PNG  IHDRHgAMAܲ pHYs  IDATxkPTe]n-\DPvt5/i,J4 sItLI0ɑɴ3+ uE,KZtP{*s^}={ٳ q* ˆ LQ|ByE O  b 1^oNyK\P~!R)G`0 2Mn6fs'!L&_Mk|By ʛ/7_[v%?=|ڜhӾzc'E?0lnmj57vP޲yhEWϧ=7_oʯɉLL.,ʜyۥٸtEg?$.iWafs^ݶBB9"9XpȔo3Wn< K ?[/a]~^6[yd׎/m 37oڢ'nΏ8Pm;o۝?uԄ:\J w~o3((ob{ܒIr+%/ĘJjXY5u={Oۻ{ش+džx:VX{Yɯyf< @Q|љ o|5bA:nj8d>v(I)cD,engge/gq\j탵寯**\d˻n"0|77ܽI}Ep=|qDn]Ƥ߿=uctt 빠P{; |By ʛ/7_k6e*/bX,ŃP҈J?w `;(U7Gk|By ʛ/7_(okZ*r]iI!޽@{kl]ψ۔~芆aΌzTөGxo2VM2+h=gf[0G /Xݔ7c-MS" bLiy8 )e.*{KY+hf*038b Xʬ:?g͔Ԋw~N۝>ˇYyʻ4W4+ڈ!#~5 ʛ/7_(oP|By ͗-o0aIENDB`n> [^?cm*XO hPNG  IHDRW7gAMAܲ pHYs  IDATxg@Sg;X, T 8pj[O[ZѪXGiѢ 2D a|?H]\ij ~9a14HAQU\H!St7! Vt! F)@ DQ (Qu:JBT!RUG)@ DQ /ZanNyc9k7e]]V"Diq݁f+Op@aE.F[E~t 2C۾]XX*ؙ+]Ua`vy^ `}6m5׏'ND7*9D_=kG/hKnI܁3ĉgwIeG.ZȋOd7Zs5]50FSjoDzxX9ݪɦxԨ0۩x 2iQUt ߎFQrZm(b1PzHy|g&zl8`сOutSB{կm,"`0w"?o<1;Fn]|f/w'[9`릆Vkƅޫi:м=_pOlwXo^Qn6U9.ٱgG8C7g>ޑÙ>'o,5\N8N"vK1l4 N~%Gѯy3N>JˡQjEk޾Oq S>aL3am|pYܭSӅ>nfRsʳ/0?%;8,Xnf@MWH ngm=}\ˬ'<8NnZ W%F'$@iR@%MPs£@\Jxs| K.&/@Ϲ5u6-~( I!xFN@,4*7-?xCU!0X(еKz}A_s!ӻz5ߺUWm 4}qo]bp8f 43C5:)"x[vh # F6c\wD!9'(*WPnhz +3s';t{Pg=pZ9eɃE51:L)o:G5fH0@"a^0fRg(q pG/ZwFZt3N=h?Xk5\sK/H{>[^uc<tv޼0c4H^D vg3|\)_~ 8=Xn6%LI݇,EMG>0ܾ=g#a K'K]&GF@M] mJ&XЛCH 3w/~1`dog#4>9ʔ9}M)Ydy}"ʗJ=K]eUBa"36TROSR /J*AijkRUGG:JBT!RU׎SͼW/i|ɺ%UUB1/!s Қ*a˛#h) 2.xBIiW6i#f HOHR%WȂ8jOVc-r/emP%s~aN.ȑu;3Yi]:[« &J,0F44'CkG^x$1ҮH?7; o?g:ޯW JڰܸT3iyF7^0ژUW sٸk5pyQ,y93`i9ځ}> !<7i[\ VSM!9X/_3]޵٫ĭZpt@QC>GRLD=;B[ ) [7H_ӹFv6p VԽ2S`4㫃=`-'?Q:OPcm4 S{MYv:Pw;,/(=^sYZ y iZXgx>Kl,Xzв$e<~ڢ t5i*x ~׺xzj/hY2j3Y&}lG .9`K;WU?Q[v$J^*(O 02kEeɍt޵P}벸gkѳ)UNP H-i|TE1J6')؋s+Lԟ{oAJ]^-lNߪWk=B.΋?s/nf}g"i2d){uN̺6 uK>BCO+AgyUhj[[VRQT dLyRZ 4yl-}-'P,۲yF!MG@&jb J!mCYR@}ީ3%,-9}]c|G '~^'T =w( FPY+tx-S J*+j%l6o##ʲ/@KC[MG6Uo|1zg!q:JBT!RUG)@ DQ (Qu:JBT!RUG)@ DQ (Qu:zXDDfFD݆6J D)*YKS)ڧנP ah/^l{ * mذ6aJO+!2ԕ(Qu:JBT!N)PS]+e"!QKajOc֢b roxQu{<~>$an1SCJwK}y(;`O;l8-Hð3?.&uC=`klR'dxL3,: S G1 Pt_A{LhjQ3- +͕V]wI anJ>Y rgr|@Bxoܷ5}j-]zeCCSfy;3oFX lVqENc98 N2v;@'cSsAz2K,/#N9w's+AS˪99();q{tQ45^ᴰa@ׁ9~O0Q жvܒҠJ1-'7`UWV^rX@fXo>Nu! MMdՖ%.|uX;y؉wBqS>jʭm!{wX돯&O]pmg~1޸.WJ=߶'>r;s$?H)"wwkW6kg*s# w{5$~ Z d~^g% VZ"ѕ32K32ZX/Je5O!Zmn݇}CpzVC7|:ݗnvoewۍ`4㫃=eG؛ʴ?XOZ V}>ν,O&)<"بlCT 0}K]%Qd%u h5c=g ~uf5۶dZO^pE,B^Pظ20( 9s3g~89g'gX噓rƷIJB:.&<.&\)}w]] :h_ >2[5EOXeէ{K@rnI?!m4 =@w1o|{81B/|;Ep,z .(Ж;,fT?Ю5 zH°}P˿6hzpBos-3K|QXocFMF\ZRLNiʌ9zp}ܲjgghM-y?+*ٹՈWTݽeXoVuEE#:~,Zrń los5T_`x:Lf3~>~m8;tNjZ}'yvo} 6A[2++v/*-jE<טoeYwr`rt/m;fU>Lߤ(_ b%Tjؼ![a)&O<Dc )@$:DB ߿zWܿF&jxqqu0:e~oZ)]7SSƍ7ֳ [MaαD|_MUѕ ?2ngX l5A];Fy p[@ug'Lωg0cjyfLX:^eյj'/ />CwlFKS@ J`ڈ\sbws4Z~dL9W0i~hm`ZE\) >PML_"( @}dbҩ X}Rd%0-M`Hw4ȚsIlwHtL"1D SHtL"1D SHtL"1D SHtL"1D SHtL"1D SHtL"DI~jz +JE dX ))e?Uʳ"B) E%&&ZiԴ4+ N) N7d nIBvL" uDc )@$:dKKMtS% +j>+X,Z;dR@dask_ 8]?u8aZWポ6+C6ybAi,=f]Pڡy Eop!W5L_+bxkjV C7eɿzRa2:kntOlV $/@?,Z蒌,,`Th*<a}cH~1/.//wWz{C~]vA\OZڪnjtq' ?enAHlw({iS`8iF^@[Oo~c=]Siݤ&.+Xu6&^@u"{dapuՀs^yšYAt=tztf_~υ?Tsuيaw㓏Ntbab[gPlv"85@)ۦSwMƄ. GG =@w1o|{81B*^eћotAY.Y@ݶs ]=Czp;'(.&1T*UG13jjIh6( Niʌ9z#`RYt{bQ;?^Vz|L߸g ruđmZni2ع^"Mp/ mSd6CrѨ'h޷:,n7/~Q9hQ;K0 RvH@uWΒr87xi]\ RvH㦏+75]MMpnZv驈`#[a);N#Ec'kHtL"1D SHtL"HҶnj˭42Q3^]7SSE?,Ê:ky6nŔ sAd:ٯY -@):ޜ1"1D SHtL[Lk &gCb ؒ Ckw:^}u‡g`9L[1| $;`\z՗m=)) 1;SO2 ٟw'_XU[ϓd&ෆdaJ{ύ'/ />Q|wan 6$Yϳˌjǀȁ lliyNl#/˺) 3sxD3]15< 3 &,]:%ּuU̩57S@ J`ڈ\sbwPϝi– ~9~DSr0P_}:ljߠ#HdW"){`ϖK u?4Gsͫn2# kcG jTٯymP<we bp[@~}N#k%m tnE^N<]}SSɶ+YMj_ >>j~s<i/ er>8d%Nm}wohmZy)N̉[vQ[JneD>Kjo5!y;M5׌ MP|贼WdI51T˶'$OwJ&ՒrΌ)@$e6SHtgAMAܲ pHYs   IDATxi@TekfPLETTH\*5r+2K3-z4+r\4Qp7 eSDTAYE}0O 9\ssa8B;BHlLmBM3Q a&6!D&(ۄ0eflLmBM3Q a&6!D&(ۄ0eftv?P")κV۱3"de~WWS_zwC v J#^^|݇;x6u{&oĺ˝Ku|9SӰԪ>^>^L,Ӯe1y}G#]5Wsd=.ѷ@{W @8ކiRj?|);uAkPrkӐ og@lm_qf L #LtU\'^=sZ_KV,=>>!>Wviw^^2Nn ~:CU;nL|m1@t:\{ PXn"́YG얠J6].qmJ)G>lYׂ.{vq3ƒۤytPv Yy tʅl|=ѲNR/۸t縷8s/Of0靁7f,޵{rk&6VS}_Ephg\l_r7 ȕ%ҝ.^v^<:Fl1g2.d=::Z HZ}#N^c$lȋOݲ#%[b;t@-enڔڼ?jP@ܑfжmUue+>"|Mx^_/l@_ ;tuKmMq nZĖApؠ`C V\v^]?~7.Ԝ>mHPI89JFmKC=y ~i!z\5Ifil{O5wo/^!6oF<]?wB^gE9X/t/╹M덓 &ذ7q_ް:ew?Dϫs`)B ;>ī?uR5BTu;y ;gmoڅIʸ_C4$uӉZEצʒn+ݻ~'cmn4+K0{]S ZĴ6e8]txŁGţ]S#]XTSTTZ/Rӽ|gs$y^F7-4^3Tc+O~孃n? ~{\{(ɼym! ZrpѪv{%`)x?9UT܆,}Fuhѫ?4dgo:'ڜ۫Fbuˠ}n63_>YOվ,Qb=O_/j'Tf )>K{i:t:5nE&#_`"Y\֛~Asp$'ـ*fX#\w{*oOԟN@{>׺ξlY8vtp~ 23 gӡҳ}4m9r}F6^=ٖ_Ѽgndz_afQy/z[( ^2~ܴ p̢c:  x~s4XWÏziZn=UQI=?Ō@_(ppmp0k'f4:o3@u$EJo@lD[u gEu1ׇY?]3P޸Wp8\6Ug5ĪϨx|>XyzMdb |mhÎ/W;1y2k9%Fa!Os֨{w)忬M>;l;]d{5͌134Z tC ,,t<*)\t JY'cR\zUy}iML9\Yl3U3fCkLj5\T+nKdHh9̤|b}8/@]7dBV=TZ&/kfX> 0(Y[j"Ӗjtr -ܿY޸ YF>h4\mW{T5"T!e"ۧո 6@0zV˗ [d!g2_}C;,J$FSFm@)ÑY#&uozA̭k#^B፻!`c@y<ۅriS'-@bTMeB^a]qgIԦ/X>*U,9Ql9ef,p|RB}{֚ 懴q!IΨ>|nF)/ߪD3 ]AsOg9uTfgɘrl/;2:g5췯m^z0a}@S{⇭pi2t2N:k?eﭽ``? g=jr\:toA*\iMnfur[dWg1auŋ!?Emm~­?}`+~…3_e-XHFNk":|\t&}8\%`3k=Yl[P(p;).|svdX0-q"k^wq7*8L+|_n~UEh_}@r *Fi&2@3XUleQq^8{}3 @ȶcMww}m⮀lSM0s7֯DSZNͺ Xx~Z#VtGv.=6fF5YDRAqvH*~ǖP ӧ);yoիW?;Եe5rG 4 "S^RVKm/X֫yfFr}Ks}5YMRRJi,1wyQLQ++Rbv[^Zv%JsЁ<PW*`h"0}*(NJQ9Jz=tjeiL53UWTU'"͠ 3JP\VU <T^ZX&WY5ܜT-P6"1[^RhZ95JY;Hj& ,u 5+ȈD pkod]ZTP,,e5rD#}4Y3.J%ض}$:>tpDfp 5оvmͩÍooHoSmTKqÓ+FVfíHYz31.61>Դq!ςk7K{e˷5gjYNAz=H$ehb.w6PIcBmp׉/NGjۘ6!a&6!D&(ۄ0eflL=Pdd;uN-seV p﨎yNm!ͥLmBM3Q a&6!D&(ۄ0eflLmBM3Q a&6!D&(ۄ0eflLmBM3Q a&6!D&(ۄ0eflLmBM3Q a&6!D&(ۄ0 ʉ~+y+RxNzͷ",,Ju_*w`ǿF/B@eZ[7f ?90Kgnv,2蝘{SI\ڙ'NS Yn^+ٶg1ȹ|4\l^w£lg\yT NO-Fql]ayi`@WPZx[MS n^,TyJjf8ZGWD3dQd7.y(fe1KW/+ZpitX֜ڮ<#`GKL?TFtص5hd(n|:X vII޼PmGѬm㝄B%A#LIrsde u %qQ^k V|!mؘ@*:Ϸv FuD,[ex.wėLv[l=w#I|os(OT bŊ˗/[^s=ʒ߽ ʩofoCTdv:/}3Z%/¬zgR3ڷb&(^T~`S3v1yy84X]EA"O?,0HtL:]eDid\SkfioCov(d#Ӵ\>6=Q۠W#b6u@G7 j՟>IE' t4KHHsyK|yv4L_}`$f[WAal mm c0KQ(rk 3Վ3Gx&Z?5^Ń,3='9=~3vLESa7{R2'T$\OVʼn2K@|\y 0 DY)2Xm B#ZZ$bGAS8kMA0z,031|t3a6szJdt>kI~[> yȻuiCZ&<mlFce{ 6I/#lX&L.0&B| 2 fN5dp\ϭH2 $9XCLh0؜eҶ@h(,&}Oc >Q/fxHFD];3k5qRMBQ~*oz|K4fDM,_7A7犧BJVu huS7{x$B#Yƭ$Vm5T46A2$7I} YQsKz]\ ?-ؙFw\Y \8WSr}j]ٰJu٠_Y "4p5$e5L8P<Ä'rRθ(U Z;z6m6ڀOqf Ct& ~n @C4F]'6 6=)Lacw\J ^YQ:5dO`b`F\K#HO vC5sӨۛ B2 aP"D&Z~:z5'[+p%{p0U@}$g5}b!M%ُ=Ҧl_],R=|mLP @#u-Yw~o]d㾧[:Z* @R!yEڃ`쌪]qqJ9s3 [|dUp5lRgtl4QSmKX^{T4TЌ mDžyo,=|jX8@+6ŧp\lY ʝU;0;xm >9lkg}=X$8*Lu booAl k2L-,LL{+ó+2o}'{ S ?ȟL#;Rjw6u$B`!fu@~1*@^{oT2'JyS@Y;2{v2U7lK@?WL^`~#&bSV6^uw7B@y1/nXkդEN0Y@T\fCcwt udXv|N3ȟyT;矉_S~nr$(IrXXA:Dd]֡X(B9ގh RZZ\Qγn,)(Q 8M턴2%8"wW!Ȳ"T >[NTȕ ك--H/PSL(2%)-)HcKt6ƌQX(WQB)e]{]7NNUÒR%!2q(I̬Pjɢ΀VDHTjVQ"+W,>$ye*S>Ң'ds4ki4N˱)djcd%K*)T+GN&U e҇Y**Ά11򻱹JT&QlfAIn*(6@TZd*€EPDU=`uAsЅj-, |MP4ĠIKFg#UsE5YzX1A{ _D F_ Զ|b9-):^._3YqDz^!-eϻY^YM$H1GgguJMxo:z)^,J[ sSe]:^7UYeQ,4COSsηtxgMV oA" ybd{گ[8RZ 9ʆswQtxP.+ ڎ]ݓiҡk$IYud [t~F\ʔBɒkOнx=-:<bŊ._[sgd_LZg.&AyL6V_a)8m +"e*^; J2 ׸'?^;/e['YwI/"č d[UP% ,r264ӻ dQkUuR@-X[oNw2qMg[qX&VZ;Fރe7_$6f[].ښ =P7|Ś ^KmL)ؔed 2\8MO5AOe*wݨL\MSAīٖs8#鰣IIsݽn{;wcSo-:r%Si1&kĞ-u7Ϗ4\Mz7}GQUQuՆ˲XFryZ>KLjS65w4#A{B^r;&|:%&ٗp Y]܌N"&VelhRNw ߑc2ن&++ ;5as xqZg{&@(;x>}O,\׏7ޖ qZs\j(Nɋؾ(~,Ե_/L ڂ;(" ZР;ps8w%?' v}E6%kWLl=6~`r/r.MJl.W*,\bJlR\`'D;:r e1жq ZJki Zi$A&-+¨$ 5> ☜+"{\M$H B7ln"&DMd t6A&mM$H B7ln"&DMd t6A&mM$H B7ln"&DMd t6A&mM$H B7i 9Б`!_k]E<9bڡ6 2dW5~…6j n F]l#B7ln"&DMd t6A&mMd~_@%(\'Q+UI4gikvjeqQ昚d (),R;t6.~@u44x%w$ۭ:<=l8VQIT |"MU]80fj>hźփ͋Ixr/&)t1HɯեYʞKW[վ+ N }: ;0[l]=l&^dީaLo J-;yYS]OՉ6kݺ,_#TnCf Ҵgs7LJ0j%o7/ 9OMUwZl 9 ktѤ\Τĭ8kQ9Man.h^Mhp&8W'Pmޞ~M\W]]: OH?SޱOg{eѩgu1(k.MU`Yu}mwwO{u@^qbgCDZv*> U3W3Fbl5bBm >Y#=TV3n<ǻсsdpDߚڥs&嵳Iх2qؔ_/[>sP7סأ7KC,+3OGuӭ3/:x0HJsyOs*y-ӑ;KnqR@k%ɥJ#7q_J{hn='Ο̸QmDal]&ro?oU'k#Ǽa37[Wlaud_Q[:!@[ IrI0X-|U^q:ccn˝;__K\~qp8ٿA#YM?S7 ׭~˘t;/$;Doz- 1?WZ­cx䳯R0[$%SXגZ :Ы|러f1J1|e rڙJQ\T o?Z|(pCy0җ[2CaKo'N_5z%?}ְI~wl lSںS6ĪGSS⾞3e%9JddvѳOogWfKfR- Ih\]P!y^V/M'*|{okc ĦU S_4-k}O!(ݾ2dw /cVNܵcqkn/Z޿nn>O ۧVBY{;f{LXƸ1?g|_7G'~q{uQ/O]@O 8Rk  qEm03@?9א`1KL$r9r'~P7%7S?FEu{˘{,}K&#9XỪ!Hk/gmT#0qG`bnlUgoPsA͹j^pq W(}p='64XO]!u71&?B~ v'@MY\pgee*gq M,H4;XSXb\TaXv^pA Mq L}͚5}D\Lt~ ~ }-%-߂'ˆ HZP:a]#/V<:߷[c#NǯdnYh +6pM =Jv I۾0$֤=9Mr&w1d"((Wz /*>=xTu0Z1 E<dzWEĝN;S_(#h6SbGױ ^7N {e7T0 :Y`iGSV``\n%ASloKD4j˪h*5kͥ}Q&Kpm_%XڶCgە5a((l)/s\xN} LΙӾt^4h3-(U75sXcYi6펓F\Xէ~l.@hPN kٛ/-3XJnU(ٜǮ\ԆTU*[{^V@EnbYh*5jX҇QOxb ;SQ'S;}jwhClo5,6{޳)DTVܜ%ĮSI#+CWE]pNƃlU0jDЮG.|SCqgcD6%kWEӮ!{ i=bm|EPӳC埠F%u e?TV b Z!P,=T@ ͑uvv/r||SH%x+&5+yW}9 *5)K_J]8lW4ǰnFai k>5+J *`7X_1;7۱jC7'N@Ԩվuew? ۙ`o# aе"ϖ^ \qv|-Yg8WX쉜O}#/QAނׯ<0fTyPUl'Si#KWQG7p`/oY~30ejE3A2 OZ6'zX"URlSFPd,)J POȣ(@RPtF }cz)TV&VR5iֺ*?(PJ z63jPR<.k/AQE" ((dyYORf2,R<ӾxTihϟx"&"7˲XPT<`k}?3v+zX.(9<{{!0jU:F(WuFFiҠps {VXbڗf0$=mZuQ˅0&K XCEYp Ksjtg .X6p^r"X.d;{Ztq4MyҞ& xuciru82 n?{a)0rpBkXd':olI2bQ2WawġkXN^ 9i8ݸ,G ptj' r+I:v\`(;ig-_d+K9f^ϖ,N֟@![>M@aŌÑʛs_êtNqHW~K;s<ԛu.)0$X!CmCari6olUo9[x/#xڲ j¦ɁuiXNX7YP} !lub(Nե8R]C&$%in3!2rp=0dȠ#>%lBZ矚vqQ)\Os};- 1AH2?6e9K~ p~FKO~ }iBڔ׿]V|:m#e^^ce.Al =15qy`ℐ2X  bIfW5:#+9 t4fl3.&5.!։Mulb(ۄX'6!։Mulb(ۄX'6!։Mulb(ۄX'6!։Mulb(ۄX'6!։Mulb(ۄX'6!։Mulb"1rBRA(|g؈nm0"b(*> jՑ6RMGnV*JÆ@xxeZiQQQmb)t,D&:Q NmBeD&:Q Nt~!;QZi{w負SՖVyRS\/x8qXe7K.UjX;w{7ytJr-_&u7lٱz2ثT1KszϞTbjOsni##>8$x)%.>ÛW.zU1]z~7vm17q!hĦ+ni{ZLJ?xIu'~CV[)7\ez2+{Fq_=1sw GzvK W Ree҈in%Ӛ6{KIvW "ᒾ=@)}ڮ yi6^˯3;ek˵(W(E̹e$+^(?Ο_O|)0rN,O,6Eڼ!" \0B1e4n7zhߧ:WփSnšCPHu+kT|.T3ۆ#&TѤH[1%POֵ!cm|OO]rRIəV?#%o;y6G3O+դxMܷ笙9jM_h8^{FFn(q9öקpqagtrL?:Wҳ?tFƿxW>p5-g*%{]Hzߤi5s լHߑ>&|og o{MK]{kwmkϦ|Bj7JTƽ$~3@`?<.F.`/T-;c>}M=VA[#cTYW 9OT;Y/(6Q- c"c=Q?HnG~ "vW}P$odu H{Ic|i^bs#5f0sS-'Zp&mٍ>u?8tBrԻK CVy z/=ҝI_{ƓZHQiY r .IDATk%c<)|W@t6 _J7sSzOhW^O{ɼQ5/?̀y cf&3tA^C5\_՝szߠՒl3&|Hmص"ʶZStfeՖiY``ƞ{^9{@NDU՞Ӄi=NuV~4aCĄe::狶3Y~nӜnʚ͉^o\ˋG(`ïϒBmIAsˎC8sFnMf)ms2dʧ&?>1~~B$w6^[L*Jwͩזm^D͟^x9]=m~[>ۃ9 mEfa=}Ej5EϱݽzR|:P}Vfv~5Kzx@|kmN1bz׳e: `Y.Y, : ĀAʯ ꌤ\ME&Tfh*qP!@w۰[dg#v/\T_.ImIn"ci/[/56#K"ptߍYxO=pU8mql/PByMW\v x}?*uΡ#ǎB^om[^!^w^S(|qsO&p6W96yh`8 GW )sޚty|. ]ޙvp;`qRylUlٝEk-҃R@-"rD HB %DA1&,z)ض{t=Ekf^o潷XK/lxijjD(/E)lu"$V A>RjW|qRX}Ik>3+eR1t"GP+;^xz=?rM^:/gw#_} c7qBpK^["A ґuEv V1oϢA?^r&0˱ܒo @l]_=/(>pf{YむMqA5W\(3RzN?&3[ߴ_ˋT̏N=~Xҟ5]0}~MXG!c%KSDGr mت߸4c.9}uwm.:1B;Y`簟,/@1.Y&u1sDԣI!7.T-"x=m~8~ O*ney&`_EIb sH TNXVF5_s۰b$*XO hF z۰b$,em^Է=l)K`۰c $ n3f3@8d sʚ;+4ʚ;g4]d]d@t@0pp <4!d!d,gX<4dddd,gXg4`d`d4@@8p@ pp>___PPT9 h___PPT2001D<4X?- 2003 WL Truppel ZCS 12: Intro. Computer Science II " Lecture 7O =C++ Structures & PointersWagner Truppel Lecturer, Dept. of Computer Science & Engineering UC Riverside wagner@cs.ucr.edu http://www.cs.ucr.edu/~wagner http://www.cs.ucr.edu/cs12O  O`a~9Today s TopicsNC++ Structures Pointers Static and Dynamic Memory Allocation Dynamic arraysOO 4C++ structuresvWe ve seen Built-in data types int, float, double, bool, char, etc They are very simple Arrays Also  built-in (kind of& ) Collection of same-type elements Is it possible to have a collection of different-type elements that we can treat as a single entity ? Yes! But why would you need or want a creature like that ? ZZ9ZZ<ZZ <  ' q,5C++ structuresIs it possible to have a collection of different-type elements that we can treat as a single entity? Yes! But why would you need or want a creature like that ? Easier explained with an example Suppose you have to write an employee management program You need to have some data structure to store employees and their data Each employee has First and last names Social Security Numbers Address and phone numbers Salary, etc Z!ZZSZZ' q!S6C++ structureskEach employee has First and last names Social Security Numbers Address and phone numbers Salary, etc These are data of different types Names are strings SSNs are integer numbers Addresses are strings Phone numbers are integer numbers Salary are real numbers It would be nice to be able to refer to an employee and his/her information directly, as a single entity ZSZ"Z{ZjZS"{i7C++ structuresIt would be nice to refer to an employee and his/her information directly, as a single entity Example: instead of having An array of first names An array of last names An array of SSNs An array of addresses An array of phone numbers An array of salaries It s far more convenient to have simply An array of Employees C++ lets you do that with something called a structure yZZ(ZZ8Zy(78C++ structuresBstruct Employee { std::string firstName; std::string lastName; int ssNumber; Address address; int phoneNumber; double salary; }; // ` do not forget this  ; struct Address { std::string street; int number; std::string city; std::string state; int zip; }; // ` do not forget this  ; ZlZZll  2$:C++ structuresNote: you can have a struct inside of another struct How do you access a struct s member variable? Employee wagner; wagner. firstName =  Wagner ; wagner.lastName =  Truppel ; wagner.ssNumber = 123456789; // not really& wagner.phoneNumber = 9095551234; // not really& wagner.address.zip = 92507; wagner.address.state =  CA ; Why is the semi-colon  ; required after the { } ? Because you can declare structure variables at the same time you define your structures eZZ3ZYZR 3W       ;C++ structuresWhy is the semi-colon  ; required after the { } ? Because you can declare structure variables at the same time you define your structures struct Employee { std::string firstName; std::string lastName; int ssNumber; Address address; int phoneNumber; double salary; } wagner, brian, peter; The above declares 3 Employee variables but their member variables haven t been assigned yet.3ZZZZlZZ^Z3Wl@   h<C++ structuresFunctions can take structures as arguments ! using call by value: int getSSNumber(Employee emp) { return emp.ssNumber; } using call by reference: void setSalary(Employee & emp, double salary) { emp.salary = salary; } What s the difference once again ? Functions can return structures too ! Address getAddress(Employee & emp) { return emp.address; } @-ZZ7ZZGZ$Z&Z<Z-   &$  &    3    A  "  f    =C++ structures Initializing structures Similar to how you can initialize static arrays struct Date { int month; // 1 = Jan, & , 12 = Dec int day; // 1..31 int year; // 2000, 2001, etc }; Date myBirthday = { 3, 25, 1703 }; // yes, I am 300 years old !! :)Z1ZZRZJZ0 R+I" >C++ structures&Useful example: a stack of int s struct Stack { int top; // -1 indicates empty stack int array[MAX_STACK_SIZE]; }; void push(Stack & s, const int value) { s.array[++s.top] = value; } int pop(Stack & s) { return s.array[s.top--]; } These functions apply to any stack now !"ZZ@ZyZ*Z@ b!5&V@Pointers5A little review of how variables are stored in memoryAPointersCan we refer to a variable s address rather than to its value ? Yes ! The variable s address is stored in another variable, a pointer variable.HABPointersPointer variables are type-dependent int * px; px = &x; \\ px = 346 (sort of& ) char * pc; pc = &c; \\ pc = 350 (sort of& )\%W*+Z% =CPointersA pointer variable holds the address of the variable it points to (plus type information) Details are platform dependent What matters is that a pointer variable points to a (regular) variable int x = 123; // declares an int variable x and sets its value to 123 int * px; // declares a pointer variable px pointing to an int px = &x; // sets the pointer s target to the int variable xDZZ\%!* DPointersThe notation is confusing at first& int x; // declares a regular variable int *px; // declares a pointer variable px = &x; // sets the target of the pointer *px = 456; // sets the value of the variable pointed to by px (in this case, x) So& type * pointer declares a pointer variable pointing to a variable of type type &var returns the address of variable var (addressing operator) * pointer accesses the value of the variable pointed to by pointer (dereferencing operator)%ZZZZ$  3    %"!)7O \EPointersA surprising  but typical  example: what s the output of this block of code ? char c =  A ; std::cout << c << std::endl; char * p; p = &c; std::cout << *p << std::endl; *p =  R ; std::cout << *p << std::endl; std::cout << c << std::endl;FQZZP e  FPointersYou re used to declaring and setting a regular variable in one step: int x = 123; You ve just learned to declare and then define a pointer variable, in two steps: int * p; p = &x; Can you declare and define a pointer variable in one single step too ? Yes, but it s a bit counter-intuitive& int * p = x; // is it like this ? EZ ZZQZZZGZJZE Q  G  J  HE[|GPointersYou re used to declaring and setting a regular variable in one step: int x = 123; You ve just learned to declare and then define a pointer variable, in two steps: int * p; p = &x; Can you declare and define a pointer variable in one single step too ? Yes, but it s a bit counter-intuitive& int * p = x; // is it like this ? No ! int * p = &x; // it s like this !EZ ZZQZZZGZpZE Q  G  p  PE[|#HPointersrMore tricky stuff& What happens when you write p1 = p2; ?0/Z Z/ IPointersrMore tricky stuff& What about when you write *p1 = *p2; ?0-Z Z- JPointers KThe new operator$ zWhat are pointers useful for anyway ? Recall that all variables you re used to defining so far (other than globals) are allocated in the stack area they re always local variables in some block of code or function How do you allocate variables in the heap area ? You use the operator new new always returns a pointer, so that s the answer: pointer variables are useful b/c they re the means by which you refer to variables allocated in the heapZAZZ& c A%  A@kKLThe new operator$ *int * p; // declares a pointer to an int p = new int; The above line of code: Allocates space in the heap for an int Makes p point to that int But does not set that int s value (*p is undefined) p = new int(123); // same but also sets the value of the new int *p equals 123OZcZZZAZZOJ A!>2MThe new operator$ 2You can use new to allocate any kind of variable struct Employee { std::string name; int ssn; }; Employee * empPtr = new Employee( John Doe , 123456789); How to access member variables ? int hisSSN = (*empPtr).ssn; // these two ways int hisSSN = empPtr->ssn; // are equivalent 2ZZZZZ;Z"ZZZ    ;  !    Z  2 H  N$Static and Dynamic Memory Allocation&%$$0d Regular variables are typically allocated in the stack area  always local to some block of code The variables created with new are always allocated in the heap area Variables allocated in the stack have a well defined life span  they get popped off the stack when the block of code ends Variables allocated in the heap exist until someone deletes them  it s your responsibility to delete them ! What if you don t ? Memory leaks !Z385 OThe delete operator$ You use delete to de-allocate a variable created with new Employee * empPtr = new Employee( John Doe , 123456789); delete empPtr; // now *empPtr is undefined The space in the heap previously reserved for the employee record above is now available for other variables That means: any other pointers to that same area are also undefined Undefined pointers are also called dangling pointers:ZhZZ(] y&.>F0 PDangling pointersIf you try this: int * p1 = new int(5); int * p2 = p1; // p2 points to the same int std::cout << *p1 << std::endl; // prints 5 std::cout << *p2 << std::endl; // also prints 5 delete p1; // that int is now gone ! std::cout << *p1 << std::endl; The result is unpredictable This will also be unpredictable: std::cout << *p2 << std::endl; C++ has no built-in method to determine if a pointer is danglingZZ>Z ZAZ C [ %   ! 7( $CDQMore on new & delete6R Regular variables are allocated in the stack area Dynamic variables are allocated in the heap using new, and deleted from the heap using delete What happens when you call new and there s no more space in the heap ? New fails& Older compilers: A failing new returns NULL Newer compilers following the standard definition of C++ : a failing new raises an exception (which, if not dealt with, terminates the program) we ll talk about exceptions later in the course NULL is a special value& any pointer can be set to NULL, regardless of the pointer type ZZZ;Z"Z4Z0ZXZZ   R;     5  0"mRNULL & dangling pointers(A good practice to decrease the chances of running into dangling pointers is to set all pointers to dynamic variables you re done with to NULL then you can test for NULL pointers If (p == NULL) { /* p is dangling */ } else { /* p is ok */ } Java is nicer than C++ when it comes to memory management It automatically deletes dynamic variables when no one points to them There s a price though: speed But you still need to test for dangling pointersPZdZ>ZZ:ZZP3  > :SMore syntax: typedef( It s often useful to create aliases ( nicknames ) for types that you create This is particularly useful for pointer variables typedef int* IntPtr; int* and IntPtr are identical type names and can be used in each other s place IntPtr p = new int(123); // completely int * p = new int(123); // equivalent This has two major advantages: You declare your pointer variables just as you declare regular variables (no * to worry about) The other has to do with function arguments (more on this later)~ZZOZNZZIZZAZ~OM   ~ ? ~WTPointers & functions(Functions can have pointer arguments Functions can return pointers too ! char* SomeFunction(char * p); Note that even though p is a pointer, it s passed by value This passes the pointer p by reference char* SomeFunction(char * & p); Confusing& used typedef insteadxIZ ZcZ"Z ZI c" >P v UPointers & functions(This passes the pointer p by reference char* SomeFunction(char * & p); Confusing& use typedef instead typedef char* CharPtr; char* SomeFunction(CharPtr & p); CharPtr SomeFunction(CharPtr & p);`'Z"ZZ^Z'"^-   VPointers & functions(Alertness check: what s the output of the code section below ? typedef char* CharPtr; void f(CharPtr pc) { *pc =  Z ; } CharPtr p = new char( A ); f(p); Std::cout << *p << std::endl; Note that pc is a call-by-value argument D?Z{Z*Z?{*t@ -WPointers & functions(typedef char* CharPtr; void f(CharPtr pc) { *pc =  Z ; } CharPtr p = new char( A ); f(p); Std::cout << *p << std::endl; Note that pc is a call-by-value argument, so p itself gets copied into the local variable pc inside the function Being a copy of p, that local variable still points to the same variable as p So the result is that the value of the variable pointed to by p changes from  A to  Z despite the fact that p is not passed by reference p never changed, but the value of its target did! RzZ~Zyl  XPointers & functions(typedef char* CharPtr; void f(CharPtr pc) { *pc =  Z ; } CharPtr p = new char( A ); f(p); Std::cout << *p << std::endl; "zZyl  YPointers & Static Arrays(Recall that array variables are interpreted as addresses to the first array element So array variables are pointer variables ! Well, not quite, but almost. For all practical purposes in CS 12, you can think of array variables as pointer variables int intA[100]; // static array ! int * p; // declares pointer to an int p = intA; // this is ok !!! p[0] = 7; That s the same as intA[0] = 7;ZJZZ(ZZZ J ( !t ZDynamic Arrays(You define a dynamic array the same way you define a pointer for a dynamic variable char * vowels = new char[5]; Compare with the static version char vowels[5]; Recall that I said once that functions cannot return arrays but that there s a way around it& Here it is: char* f(); This function returns a pointer to a char and that s what an array of chars is !TZZ ZZjZ ZRZT j &,{][Dynamic Arrays(4Since dynamic arrays are dynamic variables, how do you delete them from the heap ? Using the delete operator& But the syntax is a little different than what we saw before: delete p; // deletes the variable pointed to by the pointer p delete [] p; // deletes the array variable phZlZ^K 6 !\Pointer Arithmetic(Since a pointer is type dependent, it knows how large its underlying type is An array variable is a pointer variable so we can perform some arithmetic on the pointer variable itself float *speed = new float[10]; speed is the address of speed[0] speed + 1 = address of speed[1] & speed + 6 = address of speed[6] speed is an address addresses are numbers But (speed + n) does not follow the usual arithmetic: what gets added to the address in speed is n times the size of the base typeZ/PsxHH@Rg(HH(dh   ` www3ff` 3fff` ___>?" dF@,?n<d@uA @ " d`  n?" dd@   @@``PR   @ ` `P0p>> - 2003 WL Truppel ZCS 12: Intro. Computer Science II " Lecture 7 X( = 2  Ng?"! :    NPfgֳgֳ ?"`  T Click to edit Master title style! !<  Hfgֳgֳ ?"  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  Npjgֳgֳ ?"`p  Z*    Nkgֳgֳ ?"`   \*     N_gֳgֳ ?"`@  \*   N  6n޽h? ? www3ff $Blank Presentation1  - 2003 WL Truppel ZCS 12: Intro. Computer Science II " Lecture 7 +#  ( |  B  N1?"442  N0e?"! :    NPcgֳgֳ ?"` D T Click to edit Master title style! !  Hdgֳgֳ ?"P  D W#Click to edit Master subtitle style$ $  Njgֳgֳ ?"`p D Z*    Njgֳgֳ ?"`  D \*     N Lgֳgֳ ?"`@ D \*   N  6n޽h? ?  www3ffS< P<f(  < < 00Y "P   ה R*   < 0PY "   ה T*  r < c $ ?"  ה$ < 0pY " @ ה RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S < 6 Y "`P  ה R*   < 6 Y "`  ה T*  H < 0޽h ? ̙33> `D( @ $  D D 0Y "P   ה ACS 12 Lecture 7  D 0`Y "   ה T*   D 6Y "`P  ה ACS 12 Lecture 7  D 6Y "`  ה T*  H D 0޽h ? ̙33  0 L(  P   c $-c "0P D   c $@1c "P  D B  s *޽h ? 3ff|    p( 00//   s *Y"`<$  D   c $Y"0P<$  D B  s *޽h ? 33̙ff   ( --,, l  C  Y`  D l  C Y0@ D H  0޽h ? www3ff   $(  r  S P1K`  D r  S 0K0 D H  0޽h ? www3ff   $(  r  S 2K`  D r  S 03K D H  0޽h ? www3ff   $( 00// r  S 06K`  D r  S 5K D H  0޽h ? www3ff   $( /,la r  S 6K`  D r  S 2K D H  0޽h ? www3ff   $(  r  S ;K`  D r  S p;K D H  0޽h ? www3ff   $( 00// r  S @8`  D r  S 8 D H  0޽h ? www3ff   $(  r  S 8`  D r  S 8 D H  0޽h ? www3ff   $(  r  S 8`  D r  S `8 D H  0޽h ? www3ff   $( 00// r  S 8`  D r  S 8` D H  0޽h ? www3ff(    P( | r  S 8@  D r  S 8  D $  C Afig1.pdf 000F2011Earth B9B583FF:0 H  0޽h ? www3ff(   0P(  r  S 8@  D r  S `8  D $  C Afig1.pdf 000F2011Earth B9B583FF:p@H  0޽h ? www3ff(   @P( 00// r  S `8@  D r  S 8  D $  C Afig1.pdf 000F2011Earth B9B583FF:p@H  0޽h ? www3ff(   PP( 00// r  S 8@  D   S 8 <$ D H  0޽h ? www3ff(   `P( 00// r  S :K@  D   S 5K@ `<$ D H  0޽h ? www3ff%    p M( ff, r  S @  D   s *` @ ) <$ D X  C A fig2a.pdf 000F2011Earth B9B583FF:`Px,$DX  C A fig2b.pdf 000F2011Earth B9B583FF:Px,$DX  C A fig2c.pdf 000F2011Earth B9B583FF: Px ,$DX   C A fig2d.pdf 000F2011Earth B9B583FF: Px0,$Di   0 ,$D  The output is: A A R R 0 n<Z0 uAZ  H  0޽h ? www3ff(   P( 00// r  S `@  D   S  0<$ D H  0޽h ? www3ffT   |( i   S @<$  D   S ` 0<$ D H  0޽h ? www3ff   ( 00//   S @@<$  D   S  0<$ D $  C A fig3a.pdf 000F2011Earth B9B583FF:P H  0޽h ? www3ff   ( |   S @<$  D   S  0<$ D $  C A fig3b.pdf 000F2011Earth B9B583FF:P H  0޽h ? www3ff   .( 00//   S @<$  D $  C A fig3a.pdf 000F2011Earth B9B583FF: 0$  C A fig3b.pdf 000F2011Earth B9B583FF:0 0H  0޽h ? www3ffT   |( 00//   S  @<$  D   S   <$ D H  0޽h ? www3ffT    |(      S p5K@<$  D    S 9K 0<$ D H   0޽h ? www3ffT   |(    S 09K@<$  D   S Y 0<$ D H  0޽h ? www3ffT   |(    S 0R