MatchIt/0000755000175100001440000000000013075407325011627 5ustar hornikusersMatchIt/inst/0000755000175100001440000000000013075401340012573 5ustar hornikusersMatchIt/inst/CITATION0000644000175100001440000000154313060361515013736 0ustar hornikuserscitHeader("To cite MatchIt in publications use:") citEntry(entry = "Article", title = "{MatchIt}: Nonparametric Preprocessing for Parametric Causal Inference", author = personList(as.person("Daniel E. Ho"), as.person("Kosuke Imai"), as.person("Gary King"), as.person("Elizabeth A. Stuart")), journal = "Journal of Statistical Software", year = "2011", volume = "42", number = "8", pages = "1--28", url = "http://www.jstatsoft.org/v42/i08/", textVersion = paste("Daniel E. Ho, Kosuke Imai, Gary King, Elizabeth A. Stuart (2011).", "MatchIt: Nonparametric Preprocessing for Parametric Causal Inference.", "Journal of Statistical Software, Vol. 42, No. 8, pp. 1-28.", "URL http://www.jstatsoft.org/v42/i08/") ) MatchIt/inst/doc/0000755000175100001440000000000013075401340013340 5ustar hornikusersMatchIt/inst/doc/matchit.pdf0000644000175100001440000104635513075401340015502 0ustar hornikusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4305 /Filter /FlateDecode /N 100 /First 814 >> stream x\rܸ}W-3X HR%ɒG^E-O8EӋǞϹ\I=T&Ź+@E,`Q$Bf8˘fLbfÐYJ*sB$dQ` D3zTXd"tYk&Nb&"N,B1.(dBt*TƲtL 61[^Ѝb"d*2[1Wc󆊘E(N| +W׿.7OLGro>ƛj "t%G/x 8c0x$?U^BUh>1xz_9O__WxzݏFndӟ߽̆T]dloZXmZ=77&72zJד:e2MIzzɛN~.Q|̗dyOs>|ۜ)f>|}3qtYtR:tpyȏ'')ƟCK 5/%?ohO55u?U@k3ƿw4tNl2N @脞G!%^{m!lW(A5AMaa4PŃAX"V$  xىa L TOW/NYf nd(4!) ZA#|04vpE) AA &ߟ^&.یat gg=ͱb3xrTUumh`^%kWiք:/by!(ȗ4g%nś? @rfZ̴(65]qLt=Yeo\-?M^Î$Yd1PXj =SGhPmrӋ7`Ň& |LR-(hlR\skƟe% VZy _)$у²u>`{T_?4)1Nh{6mo Z6?Nw醉bmG9;>;{x?ǑĕR#e[jR3ē–ĦӕiH/I2x|^÷ng|<*Š?)enniXg"}JWܼ N,ez׳1F=/ҽb U+n?Ɂ m^x%$>;7}{NJD=v.!{q̓Z:ImSd?l?[ [ٔ`/|ZZRP,齇&‡.S}^{)5RQԑWD]T;a+:=?ru⬩y)FOcZSu#gXde:#>G9{:E6s[aч';Ļx mȨj" mEPk:-R=XP@AaKPbk6䝜8i/ٝjI6^}xqE@P\Iyذhv^ΤWORRVMKh_}Kfh_sV%߲q8%RV[ԼtY Zg7&j<{p;ښG„l,n'4d{QM l-2[[>q`^ڐnT{)GC4LBL/ mZ`z}rx~zHm/Z뢄~+lB_5@?;D{#ڪ*"b>C^dcVIm9MSW{Ҧ[o;DzyK:OMi]>i Q\ξMoQ MftJl,p#zg?_')5YkV]&o5=x+eΡ\Ʃk#b KßUIIuܼ˰nU(,(HM) =P(=@A^6 Ƭb%cVh-!rUV)EU1V^2ZZ~ue֗-033sk/2o[u6kVT 2No5-FfեlZʊ`mV]fm9>_:+uEu+庸d{e zy;9;u[=by{m,VV @' ~Di򣦀ZBIdQRTHN^'PuX s0(̔"Oa[si8"c - L _2kJWg6l:D(e<4)y  (k7&P"oߧz Dю.YCNg>[Dmd?yN~#(eHCY5Ĥ 7ޔF״kTAGjY^c;IX~]F()xňSo*F.c_Mb%.I~K;E D@*:A7etYl[=iRr?pm8}qlz^pwPnYȂo /q^0L58&wkmywǢ\=}T.q("$tJ0F қTQD-lvɗ18/0pn"ЛzO<1}ʻT/,}Y/+:z5 3g7r"YJ"U5ep[vDu[hC#ٚpEfA:{=f}@ kǒ|!I%(-$AYiwCj_&(#ʂ6 uX1e' vWO}P[:Q>螐(l.[U-V S9GZmΑzG,@޳EsQG$Й[ϓJ=¿$::55V[ ra c}wr!m3mԱkEW}x@Ei#b_W1rLg;ƭ.VP;c{OJoa(v7ʆNoD!Koף m#֦e}kx+]QOcSqJ& !Ł:2 ku2˓SlFޗwْ&Ews PFƒ(LE蘙u #t{&ܨN<èendstream endobj 102 0 obj << /Filter /FlateDecode /Length 1508 >> stream xڝWKsF WԡfvvjmLZ-ִV񤿾r2H~ͫ$gJeBxי19]v33,&q8o.i)eIdͯ媘-8 l2U\mjT|Vz(GiQ]6Y 4 Zs=E:pjξ AN~Wp zU|&4SJTt^"P3T6 "HT&ּN|XҒ^0ɭ 9f@}`e1Gj6~xlSG?P:.ZQ@\ 1p>b: 7&"ʂ <*"*?MibL Ĵ? Ҏ5ã$ cl_1 +监 Hs',|=tyXO_Ņ6`;@Zz h ?2I5 ;-vܜ|D16>ó`66uٺ;uݦ̦ñY?.qB$f-Ot?m;j9+:A 4 )?4e(/x,u`|2dʼn*B*[SW{ D'h ARNVmg>iń%2*8*8W=/9 @8!?jϧ 2) HӖD!eR,DwTtaZn_V)}gEK4&Ql$<_B Բ:KrI%TxYAҚ**YO=zIm񈗽%ͱaȱ폗;{ &RQeH,!ُR)*M1vŰ.;mBžnP@4ۄ]_$R=oqZ?==[p,8XX:r[˸q_M}hC'Mюt{ãSC:8+)_uz?endstream endobj 103 0 obj << /Filter /FlateDecode /Length1 813 /Length2 1838 /Length3 532 /Length 2418 >> stream xRi8mN&=eLcka,w4eV31ȒdIBd+) eH"ڐ%eKzG}_=缮>8[CoAl4> 28Pp$LC˄l2fE`CX1˜m152iX:ßI&ym2 XP!&$Q 8A2 o  /DP(HaD˖htLahBL7-4?@Zf]:e"-i\nsT*2ZLFslݜlwFQ_o'-a=a<٠8NH0~Z\<4Som8T7X/jኣ2?x %T;ModяCjV8R*r'wL^؄oЗu~$Ӎm]Edq{5+JVa9M :Q_z#@+cz\7P )RWrfc+IcnԿ<161nޭL}9g\QN !Xbea /+jf8m##q) @A+6vt P#n> Ѯ.pB+:3u[b[#7qmIG4iR# ڲ(G߆X5֟lt0(zxV}ij;<"Χ͎2!4,?T\zJ`:3au$:b탕 N#e!"g]OmېKs?EQMjF^F*M=GAޗ׳Opo qy|Pd$8C:[ؠd2 vjR^q.!BK@Ƴeי %Y752 o758f^"7RZsƇkW`m&~nS{Hpo__ S{L#f CCe<\s5Dk+ZiSƻ4CJW̎X&Ёd$,18f۽Gy٘2𚼇p/0aYQo> JHݴf=7RE6P抨Fz&ct4E+l(ܙm2d֥Ĩt fpfWxy.{Xsx댽v/OBiwD2Y.ni[L};W;{w}ժ:r*:%yo^MRM/IWT{?-\?c3?NDE$$s>v.ɍ> ͨpxI}W "6F/2dGL|6]\Q+_KSAxyb£4py]jI^c;l'~hyu]s⦌sj!ܢ`(a\`ē3ngsZICF>S/Jɶػ y%G]&)kPNu'jxLݑZO[9a#hWt[]Z)}I{U$77 `T/:д8Xɺ\_C* )o68},9FW54{Y W"eʨ:f)&3OJv,gnHܺuz\`)7wN-{> stream xg\)҂AD7H/!ޑ(I@H  *RH"(HQzJ/ RBNt߳w~;e]gZeb& Fha8QDP741q/:!1h !@  PI/qcN8@@]g "`hsF4`( Db* |0Ex"HpD? 1̟aXO)@dR Yc(<G8FR-kyPF0?07$ _ 7w/ b,V?"H/`(* !=  8P_qOQ74sL`H4_ I"}q1qq)t?ji0p$R A h8@ ԓ,vH$Ee_$#u&R_$+M"tIAH CRP #CRQoHRv!$ߐT  y>t0~(TJd$[@~87;"I @"@C0Ǖ9=/՜b^77Їđze}Pʸ@p3Zַo;5S Uʁ5)r㾩OM4i&Țm˛¤eRQ$L= JFN0'ğI[-g^7cad$sXPzlR<4:e[ yJC0:oÚG\BK"-hB~+n²݋|qqe{!aO&t=Q鲧 Yhy}ԉ!\ Zd\r>DqՑkwLL8Ȣ [7׮\b)s9/VjW`GSAri"DecpsP'U>$b7gu.{s_en UA9IY,/k ݽ%m:W>3;^{qxEW!s!G{,%W}͖FivE`{_X/kpOG_y+i匰 {k+ &<(?s>)7 Z̰ʴ"Z򏸱QԢSG4ئٳiʡP|&[۠Ukյ+C="MV:mpWFm *q?cY,Jhމ][j;)Z#FY+˝OeEΣsTAbW\Lg@L o[ !L5iB,hppņU>ט="TRcjSm_2B<MU ]3/, ՇiU*1jNm V>ݧeqs]P)Ի'%8nlչ9Eirvj?-,zS}JL$Ž'MsFs8=2w.kKAlU4>RG7 y4 OjL Io#ڍй^SG* hQM '[k5^oKd{ίjy2jdX[eAxֻXA=5r23gJTZ0o3aKGl8hM9'nJwTO-&'ܬ~~ՙ}qc$Y^=SSA%km+u &hA!UWHZJP9B>~b`u=oC }g<3)sje-cڃP&Hۀfhz B{YfAŰBA*](*яMES,q c 6FXw[9kif 5Ti9ywg:rnRDPL0nzN]swg3]t=ȶ~37q Jo}*xki5dৠIke3P#NlQb}5qLyCyy.}ߢq?UAs>6u N+ 5=mۍ1;Rj%`R^nfo pC1{ >ي`%C^Q4y W˰-K+96gI݂(1ABvrkbUۻqM 79yL"Zqx?Z^ 7$}SqXhل-_`)'rPRG5c\̼H,dc;gA2II>#X3_ uէYc4O?/HL7\8iαQt5$"&pRՍ80I* F|$]?m |qMz r2A);L7sW}>wd( MtŕeXJfiCjU3lk ;:%!#{c5J0sN2S/Bg u}rWDrKw~.|dc&yYk05S5⽍'VᙥGG-wkͪ}ed*^_ 9<҄,6l%GQ5v /\v^u.9ZVcw_ *e\fʼtc>3[bR=vI㷈rbFb;ȝȁ񫢙=V~J[j`T(`ˌ%NفЖХ:{& Gy6OCgxeNsII\N vJ 6 wпx[& Wi^hc寶+A;GjW_&Tɳ!\uDbr}skZ0Q6ԕ.lWS@bYV*:,^]#}{Ϙ~{y~ܥ0g ]f($ #qS Y9Lj\oZQغBMR/Jŏd*2+A˃cn_`kjIhtwdDM=rZ{q%ZuD}eGە[|달Oo,ō> stream xUX\֨$i5HnoW}yy9Q5G7m 6@Gzf/B2, LBGs# 13773)1 13V/LB6nfTBL$؛e ֠FVJ6FG7b++bp V8 FĆSs lb? +3h"_kĺ Al`oo b'`&6\ aF#bPMMl9NЉ3+odddgaV98 }$fŸ AQP9g6&P{ `WGk2HO$fdcmm'Nhfk q HO$av˟qv=O;5:0H+lc U"\毇Icm? Ac`t?A/@k !T?ZZ"@T?rC ?rC ?rq\E\E\E\TE\E? rC,ޣqA%4CF^M&PFS !h!hf!h&-B_C0 3 lB_= AV?/_r AVN!/Y@V!/Y +P)0GU?m\=A-#A3r6}ւ?lb \FKlx-R˼E ʡhM6tv ,Ɓ[HѬ׫?U#A;T=MsKwoWJqmKrpZQ؟u1p'O%[˹;#S]4J%$"j]Y([Ț jboڕKN `s޴og29t f ""iو" 3Z^2X)bSs "-#[xY sA., {%Y tWk&ٓ6u?%&σiK* 98[U䦐d!f/=%ؘT6kL.kiPhՙi}[/t&Ǎcp40[by,e3I%\ҬGxZa@#=.*SHZVw8/42EOf"!Z1XyB*W*9'MQQ\nb3ܮ3Z'uOuRZ2'k>8mkL;Q8K&@L6#ScGB9_í<ŀgK"Xe7+&+ Cf+Z|rg:N)& 5gi )>O{LK%tg:MdGE1H|˚|^*ld@ܢ}> )稢K#5xp9*5.`QFm'ږ'jJ27 n`Y,X^t (`U@STfHi+٨͸sSIG4iިZ(wesNvRxx8YI VB*NW=Xi"Z&q}F8;"w~ pYYh JUGO-4" P` )r.T2I.K:QXI^nzǨlZYRH K| 1b=>#gp`T>Sq#zz@XC TbalP0ZL;~R>گ$$kIEd :@rYɚԝ! 2 n:gNgGi֏ ձv6s皋$,9c8F\*W` 8ൂ9*?{^uϹw.֛{b$^g!,#vo1&1#d`i#%״; w__z 7j jN1B8 SpW*8q&i#+maY&0JQRz(^uYħC^_H>rOX[vdԼWW ?sȔru=>Ki=g`#B}!/g2˘jBXHtUCPsTi0Q!?>vGJG'>a.ȵ !7̙RoSޏ+]wr;IeA_EUپ4PbR 5b:o BXvʝXM?AH#H;1溱]V$}[e6qb/rpVǭ0װ3L`xp4Mdħ.,0) >j#iJ1(;8'KѬ:X+5"'~Yb0/K?:YԆ+v_T^gt9Sm4k*GK–6`>z)!k{]e 3@Fs{E N|:NW؎  hzp*_r,Pp(oq|S&'ƍ^JHmY>#4C:1O/ĩ1aQM;LH޾$!5TNDɡ2?bLz2> g]M~Fۦ<'{1g QxMscMiJ*{9쓐X8V*7Oha.} ;|s7 | aо_|UCev\ Nܾ[O Q5%.m8'/G8__'!S"! i$e>d#rG]'  򽉪*aYq(PoPdZ YI$߳<:+0j ^0ԚX%3ȈF-~'\իm=O5PĖ!zk2D;1!GRErC  eG(I*}c6%ηS_A [C֧}3{T01$7q(rSq3D2"e:4GF_jdE4.ÿesK_ }GOngno>F c"@.#KY #'wo*-M餯Etl}YHn RXǺ|02E^&]TSG- #ڿ2(jytx+\dF]l*Xټ8䀽ahEAcݣkހN-%}z[ĭcr?RiN1ϑf%HUBD(߾ @W4؞њ,8wpqˢI7ҟB>MB8Z¿VH}IP,cDǛfMwh\(ɋ:CVS"iӳ3؜mkW%MN2ղTp"RFei<;fw(j^i7MJcلobO}n5&X͡HK#tVcBUCdtyra􉉀2p]R ہ`e9"Tq nzŸg禈e;c1璆jLz7@Qq"Z]|~2œH(Ҋӯ$c}{} *8UB 0|a}2g͋P2 ֦cm%ѵ_1|ymM; ) &/}<o4 LŨ $NA>'߄8 ?8+@v&k$<2eBE5SXEC;V4/di?on`3 W7'ZODL_ƉjwV;MxX)CTԸ,cN7~ kGls 3 J![ cF}WA|Щ6j0CkL?hAOX xky'˕vuklsɄ F88j]i9'y*]B-XCYHtݮ4h\*6WGz(7sꊢgVxKu^W1pqTÃi7'٘#[Շ`9_|ddҜ?ޜ`B=sG˞صNIJ#k DF<#h+ƕGP,vOk$e/,g@ehS9t~@X`wS-_r!%gn &L_A ZY}Jb& k> ^l+.I5Ym@ǷH؏[yiK l meg7 $a!'睥)A4S :U[W&P};o,^dH?5{8}zDh*6ݭSR Cu:Rg8o<[ǀ}ab0SDM $Ԗ$"|W,!'5Y}POL6̺} d7&WCVҳ3RZbt7V]mW)ؐ\J}%Ej26{b;v ,`d25T2"*j"3"KL.NrD.|!R[ܷ@9ye!|4'0Mhd[]Ĺ:&ŷS,ip  DI$%ue]@6j74'{x>c,`(/|˓ #%2pwOxOw Y.Ic^W-ː#/XRqEv[=;m^ uF/L۪gy5Y$ezX((&̴ uӍV{85cO*^yIR*ro 6y%lr{aM? |cT#_LÇU۰Q8n['% GN:S"Q2 ϲyT[^Sڏ"\rg;F*u9η,` C;R%^$ĥۡ^.JMixd?XxiȨ6)WOG㖮堀6ØW=GJMsB DR;Vc/ =q4i^/:V+ec030s"*%V 7p& *"lZ;v3wp&S_r ?S4ni#,x%*ڕ|I /M^+]~Ka%T4^7FCv/4ig) FrQ | 8z#b7 i#K $E0!,zx2 ʟ [?̑ѫ5(8BkNKxEߠ֝+LO94$)%KtC$+ [H B! f RNW`1J,LMW]J.M6ddŊ 6oc3}1^Bb5!sqa8ܵq![UmSyV _SȊ\?C!k`봺ۣuCP9݌,Yݝje}B͠7EOJɖfBY/p'ݩ)K!b-̸qGDj'_?+BpтyU -hFt;>~SˀHaZ٩(s'"j#>}'e#ԃ¯1#A=R7_/InqٝWψ{ Iম$Ct$: @h$򺁭`WmvOpY~Tq QVHS}~հvҢx͢^l^eB:'#k7rQ`Wp8{skM*mx{k'KϢ8aXC]XHG*rNxrqzVÌŰdBбL"1c`bqtd#8ⷬzgCAZ,fjā ӕ-=gfsm<Cu.<7[ Ʈʭ'֗$ hfVܧ?e<\S}Nlu3@rW0 Β)j5<h':E$%X2JuD zU!f]X V5|Cv6Oݩ4 L=/ϡgX2zvP'9'U۽ 1p/ MZ ;kҾ0.FY }), \MiLb i7%6o" $s61{|brI7F1EyBK6Tt (x;xf@vHI9')b<I5o/+c](_1O ӜKFیQtl\u4 ,gmۨ <ӀihV i(")3+gK\ǟa$5u /* X$Ce3JP]w_=ju6˒eP;ޫw6bWpm&Շ<С~ė[ 9D K)iueu>ڜpwrdIIWJeu%޷ɶ~IM~p%"k\PM7$ǣ*lОRrm+tjhEnGQʁ>#TNWɃ$L|U2'uqw['&7L(۴rS'eKp3vY<5K 9eZ zgbWpJ^O XtҴb`wEU,$`{JޜMɶo [2e짲t#ʼnׇ>#Ac|ahci#TIқ Gb1O MkQe6,E} d ٥k/~BMh> 6$nSlpEK"r׎K77>@"a=ȼ#w'==8_/;Gwӟ?̈ݖY߷QY6e|ԥ dQ̨;m%R4'R{zl4e>Qc@XΧgr 8ѭH]8&Al4} q?a+]($Jq̗=Bͳ6*ovBYЧ-OpP%~[,ih;.iN=Sx,ķH,_m\(l^ :jWp/5Q2}EiO3>7H#y6 &G< :qKg@ ,_\qiRtLBéD%pnXWwF\ rM=2pI k|xࡵ7(Z57;<]Uo7Yͷ_s܇9;v5miK< Xn?n3 uS?/|< Q@~&:EЩ?C3s` %MJBBubO"\ 'x%̱r$P=(!ј{  IUa $c( (?(E-qicRі9n#ڑ =Ldw䓚*{ Q$? A3m- :Oz\G} h: tފQ#fe/<=DD-:) F`ױ>D# ; 37wQ|YsQB~g),LNU'+dkB fI܍ Tn\:*SLePF> R,L3}Abx.# H뎆]CnCHp-]L3b3[R*)Odȍ>%KͣAOMBL@LԠ\h|'1ϐT✁j'_6c~=>H^ `C 魳V@!6a!Qb=b5H>=>Lgs3^l{z(9Ȅo4!< [19K ?W*7@FrnMn0o"/ɩRu]M.f8{m'-8_amQ"xc"M> @CrN#T;V?f>[DGOg r 1E6CbOU|ب2h&o vWY""[21:Idj5:[m1DXGzë:B;qz&ܦ&>)J 7 0<qfL(G`M.;އVFˮJ{k:-;mn}fggsrcYO?Uɸ|nu>8@) ȥ͇At$ &`t\{ CRyQ•Qٞ:x< 8.w&V9=`mZ@1<۩]_Lyc0]Â{*/24UPoÄ5o.0v|}LJBmTGN̂sOh#otInၨKz_ɵm I>Weud/S?縔n%q@*Mp9U 4хt}?J9@Ѽcw*{AQėpe{H-QO돒`"hP$^JϼvvE8bRRTpV4k}~DlQ⯕ gCV늠^^N>򟚈i%k9p $*ಷ2 ey#POUD'!>tD7+ams6 !AZp xo3wF@4 Novm4ޔ { ycr7vkXu5_o6 w/gMtC[oe ;JDz.(";֡:Tn/Mqպ>pBmu+~׽"'8 jrQ̑Mbm@jW2/T੧aW"0R 9(?iumURo4OH712" <<4= F4<׈bBOwǃK020>ݔ:صKA.qxƭfdx馂JrEpwV SBSn @U!70JYR;Zrʀ>BxH ! Fu$$V.s1Q`ʻ߃ 3yo:xKP:Bw4F5Nwq$JVix"# f2沕uYͪmy۲,,ӆ6\{+Z|nS-q{_pg*!1OJ`N)y7j6jd9LQ6 ᩫ0ۀӳ'j[5"(ZפDZc;n|FvE׳03P.!1i_Dǃ~'4LGI1"SݜCL {a+!SOȪ%,M: A8f- =:҉qJ2&ݺ;r~ D: 1tײP:^ k%=ɍCc/;jGlhB"z(- TKsq4™"CDCXHeȎp+[!IK8NL60"]e}KRxv|kjFգJ#IfT4ĵBsvRd1A߫q026ixzٺ- _}cVlo ycN R(lr7'׀S]"o 9Ep0*7^t\D@-jYDƗ+ﹻ[x+[;4b_O 8OGI㸂-GxS88ȾOr(j/oҁѮ#qh+p")fu/7*#ȊEOԻ-dBsxo'V_]V4i\tB hui|ekP=.[|8z9gp8b i~jYʌ{7@Q_%e&M64b/+JmSb#ސD;TYr+_8Ο.o,cU#,NZ^.ؠ3xv(Enzܻ!4<,B=zg&2ךyB̥'4+Bl l6qJ wR2G z.<]&f\.Z/+6]i rFfJ"jF!exv~TsbYw8Y%3 \ʓ*Pđ;UP<)h;:rXכHw'yi-7fت2ct sO/MJUn |aPgdD'vvBt%_ő\qF R~<c 1@(TY%i}_?Sbé )g|y,ݥ⦸eZ'A^WkSzdFz/W} A ND 轪L~&[ۛ{Fym1%%n[(HO~[Q,jiݴRg&, @2lGGnENJ!HI3']COǴFE <D9XE1Y7{rorV;),F񮅫-`3JsSgm"΃X_Qp©_:Qį='h h1o-zO#"]V%l0+Yas尝B) UBFH$vREa n%,k 8ˢtcԕ/_Ŕ; U)'}}QyԎ^~qŊ8;Tu;$]m .`QzG:S:w h'FG=?:wP /~ޑjmC_7[49 3P~*9ŹpEiTb^PMtM Mݢ?D11nh+"$s_j[/e{a(8q~K71Q[A'(Q6yVkۺ9ڎE8 *|G[szv8%'wVbR~Ec;<:(X@ Q$RQ=[cZTp("M+~Y!&W~nA8OR-D"CmoEd}L])}jG6k^!Hbʅ۵ >ڨli?^d{Ol4]@`'7aěZCx/v$t/,DIzD" `iu]:A[qx]TB覎P)n8yduLRsC[ƻ95;;C"=*|VCݜt0\hv]mvy#+4”0 Ə/tQtA[SqU,m5ogH(KPQ&ZbNᯥ$TegN{<^yo+W.]ٷ>Fyyf3EXE,IbЖ≮KW64^O enybirIk"HhIqSZkxģSM?xhy'mk2SôiRً@Q q*XhAD)YW5ww]zZ=ͣ7|Ǎp3MꕍVO*^2SX\_k(,yP\%QeWdStИeӕGM-U&.m h5'm9Ժ$aWX1*ܺ?!ktPq>qc$*<oHk2N(|q{9nn5o8f+'GƧZMtyO =j(0vLcҌRx[5OA {ڣ]w^IO!)avzFIwW}QO.UW#5's'&?PFZ"& rJѠi0V AK&;έw7 ? ``hcm`o `endstream endobj 106 0 obj << /Filter /FlateDecode /Length1 1757 /Length2 12676 /Length3 532 /Length 13669 >> stream xeT\Ͷ w !@㮁kpwvs~߯;nӣG?fTZUM팁v <Q9ef&3"#dg+f 0ss$/7;; "@dn $JO'@219[m5L*v& @ '2 4e@dfL@s-"?JҶfvM]k|&5,ijgk0!2ہ.h.F6ga#Nwq:L3Uo79)J;YLmͭ@N w"`fdWhk?%;/F Ea9 1@ΪOwao/38_G/q[;S9`hzblM;X<o#?`4xE٘F@[k(Pf0-<-B೷ 'O, t0`/g?`#g G_,F3;?VpWX a/WF2EY_)cQpq?.,EEWq-CK!jxwC]?ݕwWCj]k8ϕ 4C`O3x_6\!/Z`[_ !XtFۿa5B_p 6B :`+l /[y G= 0nni~8/6@;qq΄721G`Rļ)VsR8HaZDzt,==gB/Jcg~s{{-rwhm' k#%Z?í|qԔHV dPꆞ:cL|aX{aNªE/xR-wJ(`؃YW $7:s=kiBVcJk`LvQTG{vg_ua>XjgLb{2^g &y {:!-E}zqeezq.6E=6tg"1䞧T\Ű6YR.PiKtg7#F F2R v`߫-FGŅuukI'/o}-V8}Qթmb Wf={O~aѸS$ɑ#Wyv*DPtq#dC^lz)D' d -3y[Zi]%饠Ea? 6 /ˡy:I(ρdф\F{!Yr6ӧoXQHqvG;c&Wϼg{! uh*6)kA ,y6&LVTNԻL-B=,W fiwSGOĄ~ڔB'뚘z| zEVX7Uåt ԫJjMݲK8g+Us3"Й~O1HǘƧF]b6ອsӘn3r@XT,^ho-^=1\a(᫐'oP坙Ү2ZhjaG-Ɋ{kݐX|1Jɝdi( P)I?xjV F}$'qBޣ<-aʛr @ɲDd\ ~8óYdT?Z4䒯_ JI)ے0ZYU^Q$䝱O\RI#;uvaҳN|_E_1GBLM/U~o~ 镍 ?s2HQB%R#a6Iq,%HppM{Ur1P.cJ=Ūm鎠Es1slJ_!W3P:*eJ'Rol3N q&BY2?T/"`i-eq04(uQ.^NѼb1MPu\NN򯧊.\v,j0g`au6/2;T;QۇqQ_ge1BǑZmWnΡ![I%h!xCԛAF>NSR7RՅ?gGPІyi@J4E&l>2bx;smtJT!^;$W 4֚ 9aܰOHvJ +.vNc }4pV@&|&̺]_ze{쮂;^jaid{7_=AoVoe<:RTϽR2/F;K3A2 VU#|x|)URXŷcJi,c:WߍfIE [<#y&IgC @Nb~!(_%ESOp5;#bXօm &?!lev`尶E:(8JZ KԿ} |vsDB,EV4zJhPagM ?)EO򴨐g<{裱5BQR-Lհ`8} 9f6tP ׀zbY)YG ԣ ?ܵp)=NCc/V:*gl%B? 1{򘙱踭@uw/VeˣU X6ͳҺu#FTVmXW9(jz ,qVj]k8`j"=o1FFXa^MՇnu:#9m脟/ /ގW󍔄glFEicA~D:-gLɗ#OgKӬF߱-[6^MK#| YnͰ$e-J?QWeOxZ8nôyV1~kD&0MDIhkRw[UC'{:.daO'A0`ZiN𽆡u\~UG SB.<_AQwS0 M,]2~X&(3~L>;㟛]0n1]-M B}] yOj|4.0ؑ(ǐCN䕜1PʉgM#hW.z/]SU#FD]"wAX>?oh+g~/~3 `8^dL7AlN9xjUʽA#U --/ )M&/ú@}rUkpdg ۧ}9K;Ymwh,8E>}>7v53-PS~—ΰN'!9&%C(CPUci;{"ulIPܴRP`80|uAh^hL4)AՐ6dKB]ݘco!.17ve-QC@QyBU0JGS+M51Zq}Dg$AS~;,TA#RN%nKqZ|-Ylj mfȧL֢~pY BojO|kPؐZIbkL|Ǝ)ǸIfMoW  zOZAkYJVz< cueMZG6y3=;J.*IY nZHL2mr ×> yp̱jI"k&W0"xP?UVל$BFb} 'A(֋Roy עt#₋%M(7m UvE4[IX 1D9|z^# >Ft_ qd^FB)m2qfa cu:Dŏ:>S07N2!n;\Uwud7fmNM."]8JpvMй?pR/|oT?{+éX*JGƲ(8'd2d^oCXbVe%Ct=]axh|&^L_>pΖs>JXF5bi~>_0oz[Dѷ[b)(mu:k EG+~?qC.4sS(teԣMw I[ @[29Kk}w 8mOj<].o>{=o31[ܳRJ Ga`c!'vxan_1E9*6,g:DL9%t=q<ţ[ʋ>OiAAuBf=l1'|zCv q)^cD^ +xֳ#z 5(FLut:?#܆*hCRN HmVnK,.ʅpǤܾ|3x2s_F2cm>Dfc~ e7fEVԆb Ӻ/mƊM^:@iXGRm`OzѶYrBg?}ޒdҬ_Jkm_8kt(1V[NDT2|D*% C_c[qL%M*XNnMW݋)Z<ƛ}8‘M̭/5 'wBݲkН$Zf߇%{B)h`A1E Z I믒e :i'2r8JOSpAS)CTIZRIE|䒚y, V>b]r~|w% H)G3O`ey1*jdھ ˷pCuHz| ts LFzzS~ eXz~{|•ܬo#PP4+-[ŀ#Na+t#fi¿:!I0G0<֪ep1J%%(b\)1MQ)d &Z{`wczW3;& @g/\Cu oC2Qb+S 20 Zj?r8ڛ)]!Iq:zPl (ZIJ$ԙ mfiݐk r9M!hb[?e6*ÀbHSxNj9PaXth9VBJ蹦6|yĵΏwyi3RhwyEG-꟞BS:VKj96%Me+NYV } ^N(0"sۼu VWJљAliO `?˱:@9Ǿ)=7^9yuS9?~"lnf־A[3F}R ŧxD}OwCH?s{V♻E{jؼhhMmD|Sj:e"=#s*ٚa\#IA䷂AbO%gsTrg MO3 foҞۅ^HM Tk;U RCL:NњNKƵ 驨D<لi,M 1!9pa X@]jx(_kwkHal<Kmwh{rag @_sت 8nVj_֛zУV{| 9b\;l`NRVm e3*東}* 8h.\oP3K그$\ܴKyz(!t*J;ҵ ]mڵzۖ6iW`zCo5[h/R<;R_?ƪ5*Ƞ;t]E| 0W"N JOͧS0.>j7{ ÀC颬rosAjJ#h!iP|Nݒ]άsH墾^8^|{ť6@F0mgy4vv㰫5u8:.m8WI9'MT" ~MxVE6*1]۲GLJU|4:Qp޼ J-4Z6y'{#ZS{RNʶLp@/MJFʜ XVv AMW+j>Ha3'RH`;bP\v^cvMP>/n~eY'%# ïRu۲cG\~p) [ɞQ yI]~%qgªx;|Yz]õ&U= dG٫]BiMnIQGC%HWE7NXuN p}eemDչz1~>wZ3VǕbaTP[ Ay7ǀaqo)lh,I-aj:]k^갤)2Mi=v4|zL:7Y TEf/)?> ZJ,鲍sl"UM(}rJ`KfI *_ ~=n:'[2\r.PkFc} ObB>_?v;=M1p`J:Y@8O%'.g=j4$75mʛ~&A9p빦*K!Sy8^S6$l(5)<mܠqDz>ڑ ,U&pC<i䄛N6,0[[&t!4xʀ~܌ԊY$,U]WcFЗnLD^O(KPY_{oyfmL%ˬ72 6_A;y#q%!)0yJw֬ЂZW~Y^^v`B( VabtIXFչwXNEגZ~DAǍLJi󫢗ʏc)uE5yFqO[@QdmkJ .l47HgX3&EwHh#pH*H_TW°]wY! :=|klatNЮlbj*sV<KKS]~_x"1^tȞ[U׹A~]bu~d1nN7P5b~Q2 BMnQב.y\35D13#G54NrY9H=)0˜W}7%Ppw[X v^.hu*~."8*؁2LRhWCzُ:Δ@er{챙@=\@[Cс_~OLKvh6} ȣX ..Ͻ8DgM`vt{$q3.N:7BﱴjQR]F>fW H'q&sJVJf芘kO8 E8) x®QX34>[&|[PT/#GOK+ b 9 ĶM86fT~7Z{)%La 4%cS)G .2{jV:z*'aphk!{"_VoqAWLo/!9[CM瘣(q;ק)v%~hSw(tZ~(xxm9E)$#c 5Q'$YqXeg&BGѳ)tP$3AxACɯB\TFؑカe8A)"<7}~FT/Bع5L@Vj=:(*폥ݪFC$$Wx&SoK"ےh> ),UU,8SU #v =j5#@hT*FR1S*[=3itjFۘŕ$hgF>LW1|&Dhcf{1,¦N>׌QY|%Dd9eV!Oɢ,:"y_̸^tucXjc(I~%-uPޝ*;m'? r+;—6X^erVd2X:POs jϚl8B;6hD$P4MS  Mϴ]quˏt-^o\v$% leWZU> [<}r?eHO|lehf^椌vFbDDM֐R^ڂ00crPIܣ |5 |9nyDB/Uq}ga*V$ck^'XdXBͲ"*'e]\@[ Ytvv:2] a]\6+G8vT Iy #Z.ZPmQf::V\KxҦ@{n ypHB&T EMLN t\tm-BΛ@݆cOPeRr~һbi$->Α8>#OyBhWK4ҒjߎEI+d° "=rlbZtJlꎇ#ۋ!2c떻M63fWsY˿h)E! ՟L]+f!kA<&٤;HƂv^7†iڎǻ\,Q_HeJ?Bt׬Q;H#:?OuINT\07&yiT=4FEIʽT6q%s/;#7NEuܩ:FSVy^edy¯jb ?2k.'f6_ؾ QowwbfIⰐKP{٥N;PFY39~'gM1n(GAۍ2 p fJ$+CDEr?';nDS@0b^s~к$a;|~h$hU A3%ف2*Lδn٫!k$dA&!}@-O23*Ya Yirjg#J_GԾaKXB!ttj{:sWsK¼#.~ Ia~=uoY޷вF"e'w$łϐ5-a kΟ791cd؋.4 _ =^McU8 ד;^&_wώ0V믺Rg11Pj/+FGڬ%Z ;i{XBSs 2LpF%4ٝ{?nR:THKb<ݼ[vw#f6`R[}N> k,]=tl Mys弟=s.?|Gҷb"O1++UyCIv>%Yv;$ M_VY{j6^![S  g=J`ߛIx c uNU|G$d{d lﻧkB!;d~#T²rYHKNϠ~jߙګS/~*!EO&0o{B1a(E[>z)זYB.}"F9^d1hYuBm~R\~_p͒_N\wtOE|c#."(JFޥEUяiVJ PpXpR$}j"ܦ5'X-ZZ%-Zޚ*vnw< #SL:F=I} aBC3p[)*H] Z5+%~@#cˣum̘}J~=XлcX i_%B5K'5g|߭`sq_*̠Xu>8O&}7um=Ϳ;a'KwL%a>?*8̌rJМbTs!v^B2ו #`E- fᐂDy6IW(vN~ o\ . ܨ{nH\tKaY1)Yz#j ̺ ."v䯄3LYH.Zy1㎎43gΧTqy~`N~|W. >h>V渇򳰣%5[a&SOV^HBzWVh,RqN.B|ɱc}1H#u}11 e$=~nX}S*nX]Juaۜzc}{ T"4P* \# e%3IEG0gE y16^89& GP 8TJD)*N`Q/ܦȿmWCct*.W^'OѡWkJ!TvϏ۠)"{(wvWԝEˆb.ֳ#rWYj;qT9\ɩIvKΛ˾W55K8eU X.W-͢ffo4)=R)e"EphG `@Ӗ)~P|sȦkͅ! H:I~|%6J? 8tGa=8 kXG hU9i2Q4VWꔣ_-MǗRoQq1kJw Sm,j%ZV08Q3D^=~hGϬo~N'Z( ML;?_+ Xl3}" endstream endobj 107 0 obj << /Filter /FlateDecode /Length1 856 /Length2 2107 /Length3 532 /Length 2717 >> stream xRy ~#8W]I8 7 w S"do #d}Y3 t՝>=${J*2H"PGޝBIԯ{Iw쀧 @{ ^%)<,/@;'"XgXW<|Ӯ*1YlY>-ϤSgkm`g|,W _~{;yFɎԕo3Ŵ^bh(m%DAR'`Z,*+dAs͋ H<R)9\ιɒsBY+! ܈>/)'㪭zlhԯQЮcT*K8,JA69ΪN:&[8k+c%gfͼeuurv׳_ӣvxŲn1ڎؚݪ3_l^WAy枴X+נ_Q2i$:Q՗4Y`24BTz;gd"KVP@3%ZdIlhC>vs[ >_\x7E;Qa-le2j>k4,!!W!F>EMF j9?'DZPۭœ+Qli6>k$53ʧydz~<]駶eNG=Sj jr?j>N^sp73H.؍6 ddci6d|T,/88 _i9voEIQ!i![ۀچ̜Ⱥjh[y 9Y0Ց#O)n'/slqRzZG\hVz&Q6m/p۶]&wJ'ڷBd@ƍai,Z,}_|RB%go*_w=jas<ւW;Qo7h3)!>#-UDKd99s'i@}nu-qWjG\9^0_/w y]Cvn%rjIA.[8^;5a$琼ФЙ,ܩA2l?0fψa똬wN/9ph 8/jt,vG-L`ڔS:`>Y#B=2Xx+ȅM<[zo2"DaUNu0c]./ل$čI[Y`EYj,|"Ӻ4sA_!W#3g6'.!Z9t\}!<-J_7^]ONK:z;2_i/jM zk48;nA|kB7(W N^/x6-}!92{wJmY!Rϟ!ˋbTldn -֤zfm7ugq:⽨?SSRкIRPD:kIBIȆ:Nx8 k+3n<3vW=J8tgZ|}=vA,m~ Q: ꬩMؿ-"y7 4حw[O[50ٸ2KZ~7b}]̕xM+.yY(U )[/VYSZomWiG~̞3gg,ڐ *[cwe op6],HuTl0-2ϊG/5X\ǛHUa1~X^a54{Zo;| f):B,Qy4$uaA ϳt[frZ]h&upbRVnz0rXP3.dgq'fdhgsm;?+iǮϣSҁl\="~@arw݂ bqHI3/kެ'c^ +)$]Ğpc8's Gc$> U~Ao?a`O1*8Cendstream endobj 108 0 obj << /Filter /FlateDecode /Length1 1268 /Length2 6837 /Length3 532 /Length 7623 >> stream xeX[[;Vww(P];ww(V8B Hv{_9Y1]s̕0hrI[! p+,U`nHEb \!"0@#Dx_l,jm `e+I qZf6D 3{. qHtЁ@!`0j 0XCaaVp–nr8 lkp'b Ԁ#V \hgq7{{ 3Smj_pG7W3@n qg>_rK*C-a_!bu:AC`ع :^pWS2\<W ͈qz@#׿Lc1y  ̜<Ao0 x a 7 @/ WG@GDS]\l p{D'7DfQ銿TMoB&My!&<߄p D?GrV /h"D8@@pR 7"" Dh8 ?"4@xy?22po.>/?@hJpsv\@f+(%@< ؋!ia~Sh2-ݟ:qKFT8V n*3HѶ_QDvh+:ſvFmpxO<{~9:ZlX4}2&]OfBІ' :o&LND] l\p#)K7E@ YhZ1^6 5tY3kzkf/ux"m`sS aL bT*ȷTڹT+xJ)%35!/Xy=ЪN56RN}XFž>ZO:8ϔxE!O\{޵@4F[>7~[:n?12v{!+)(r9C=s˓k^cYc}#Q-ȊioE gVT;D,{tP :-c&lyi^1y}( |㜲C9s:qh`gc;+cu/ryx-U|ok4WFnk!6}y`}ʊ*`rg}whaQF2saE~%/RY9B#;ǀo<˱wsɮ߃4/ 5vB gia["tg,/bW힖pŅz!K~2{+Iڱo|E $oiQ]*$e|앦j4qNqaÍI\Zv[#G(uo'z* ?*iBГ<`f܍RÚv:l^UL`DDŽ NBZHH~j!8dR%bpӻz΁N'ʤp~# iXW6~ideOctY6ߔ7B6L[/U-Ϗfڈ$r3M!wF 6FGf&A薕Ij䬉vX ^Ϝڽ쟰ȓOew$lnjҕ;LA^83 ya"㑌G6 [Jz6(B7v%Byu IȰs4U\85d{Ds)|~>v0#XH/T>]<#*kIXfO*m~ZdgEo oYL-Cqݩ$mȧd&n-R0kvc5տ}EH  t2h262ŃkUVd8W-kX@9y׋>VTDSCw['HqӪz/_ꀒgY`QM<6_M$M(|tނ;1A 5Åk^9xU)&A0\ⷣ|5sޭȲ=n &mDCג?k̳[c|xEfύ6 |l-H\mQsTLǽ>qoSxj$K+AW9p叜ZD9h"kd ~@vA͛ڬb>uECy5n'!J$z1ڲsԥ-+&Vm/KXO q5ec^>Gxf͋NWG PiMgN ~,7#]ꚱkl'CzHaeyi Q8hy, U*IXR/vJvzڞ/yƚ7d>1gr*Q1"=Re&jH&R qTeBjJ Y7ΔI#//05+6Wfa#eӅ ]dh$cq>aOGl>JAҺ0nV![,+~EhAZ8AP <7q%NJZe\f X֮!3Ԩ3xNGDo>>cVl""m4J}nad3Љew!K [,Qnj8r.Ԥ꽦\ Fr-Qvș^SDzBr9(\=OSpx<֯?vAsf6a#CMH{!}w$]$tgRo Q5-qy0kvZ%zL%; Ee/F]o*RHأffi ['t"lZ53P,nKFPtiͲY]^ިҐ$920vz9IDVKgB|ZJVi҃{,_ б6څ5wzrhf TF=$n*8y-P/Y g|2>۪BfAxz)p\Rzrz!%=IpUC.#A~=YCwPt&i|Ψ#+qZaY*'!mO!i_K3qw@TmxA:f|QL%)0ciZ/vʼfR~~E"N4?AXS@ɜ)WiKB;_7UXzLpGhkd|{ze6)ξ})>K3ӯԒPqV)U_*0nG= lpU:׳Hd)QRys ESҒ6fWyݵvYLA=\sWO@Sutg?5u]WLy],O؄\#!f@StdA2\nDp$\, %gAlsbhW#ѐ#.@d@>\f%3Uo'3"UļmDqY3F<`DLoCǣi=h)H9Cߴ~9ɣd_nQovu/$d}pkc&sJ,|~2ҫA̪%7<\x}aQEI&lO푈JgN6FHѲs6ֽĘ4:2EWAttڂ. adqt6`Xu%==Ad211s+?f#('ΐ޳rQQ4\y6f^6&SOMY-Kϻ k.'76Y{rZh8z IMdyRAWvr_o6iU*mm|Bq9}7azn- U!_\ \UfG .o3qڳaҙvV$ߋV1%QSR( ys^`·^Ti`x(Ř''Uq~Gi]!)x@U2DQ6*Ϊrd}bKlf)GrxN˝//ֲ̢q}eSEvOe,)GCw3P }.rC;ys$ vpj^d}Z+ ʱiT-IġN'G(8 6xQ>o#ͲZӵ&'rAA{t9Xo>I{r7n_Ж OTƬ~)SgDhE26_j|F=o:-5`[$MyXdB5ߙȒ6fUe%>gޓr.Qs(]spdL{Ft=qVׄ>Sdyg~C`vL[73BNj27&nHf6C?CVgiߙ1|>̪5,*O݉uv%5CXۙVJb5H/iJ6̩:{nG*6KEܞ-/l.cX0OY wc\ߦs/* J$0R{GU:eL&]ޛˉxw=vcupe ;=D@\tklDߓ~̔ (`"=ۄeQwModЧz7[pGc`Ơ7J„63QÓɾs65%qFiD0h V@,Gt+( ;lxwꐨ/Y9B@l&o]`wDBZ''e`qu)rOHIV,[\ڂU|îr$iiB(|LVrȦ؛%a&di~"ԋH,kg"`~$Q1!U4;j*聆[鵴Wy< 5Z՘6RM3D*?[D {+t&endstream endobj 109 0 obj << /Filter /FlateDecode /Length1 848 /Length2 1214 /Length3 532 /Length 1819 >> stream xR}|ǔM .~ l @*>@' @[9\)"hX8l^$qQ>|H(BȘO(|+$/"A(fR@Q> a(Fa-*rB- K#ާ\BIR",Ƅ2FB),/19 !7D-o& b%DP!EH <0c˩#oy"0*-Ϻ0!0@&ۚ6JF ~8 %`r)}KBX;=|-u) G.h f$| sb+-8$DF P Fb$Tbbb,HkP1NY\+`PL*YD+ 4XՅ 'oB!>, J?ض$G1 +;agKJA[/q#4}KBOtWE RoH{+~>0"yFsw ^i3yz`I:/~TS_[=so >*h_?Vͳ 5t,|3-ܞB~uTYPte'nrJR:C5Bf9%(4)ް_o:q{z啧ھT_. _LxQ +N~:v R'̝YՍzӽ^*Vks*3FY'6wv?NܐTAI VI2p9J~>,8`}U$|}4fb&Xe8R&-(Ɋm-/h&ʶC\'^;8^d:rR Z:(nO).qqa٬e˭׸,ڻ2ƋY-ONIM+_wS3οnadoQc,43"CaYFui>!+2]:96Zt;DyGxv 8{1}{ &NXfhbٽݰʦ4<97r8)f4Bfb3)= kq:=Nj\,+)jYW2:_ÛoV?8^q6[;nL#> stream xKF)etdޏcdq ìQY"ueJ fM{FF?TdFf@1z0,8EK u~S̷'\)L9rK4ڪa2sb@6vxD$MloܢYk6<FZ۲}UtcpRvڬpꂹ UQEK?HIߥdUk_R ՗W?ܧ5kk>d>zw5Efo}-㭥6eΉ!q*׶^s0d _7p(X.cYH @7&5S(y CzſlQ@5ܴ!2\c3zWV|0yR'6Yu W Q;x믗pL4h\q=by٘Γ鯝qmkW~S?Λ>YP}o ^ E .ru4r'?kOaHi_6X&_feU Wí\:H{̨Z'aiI&Gb^}?(wiRЮa=RpZ늲/9kyVexֺ2M]E"C@ ,hl'~B)Zeg!3^,;]s!|=c-*h4>:`ptXRLrL羆0}t~|ͤgtM\yFai ɋP,}k/F{endstream endobj 111 0 obj << /Filter /FlateDecode /Length1 1772 /Length2 10956 /Length3 532 /Length 11947 >> stream xUX\ݲӸw ww . 4;'[ ݂Z{Y5ǘQi[9YeX98z\N6::IQ (8|B:WcC\3h דk6sSi`}~_>gƲzPb k5cvxꍾe0qS`\垧WdaFi\`({BN*1Ol?:(KW6T}B-tzA D"ksFla̷sŖ<=mesDO3GL,If68\jX3Ri|sڳn滲1`ɌsatlNGb Lm_%ŅpgY/)3kؐyሬ)QAh{|\u{, 8WEc!A[,ӈ6GE,eB _9qPm'.] c%CuoZNgr< ), |nhoU)B@KI?&0^!!~)A[܉&kAP~FWK[fYOT~z+NCl.(L8ouz?¨rl{;7F]H̻P${( L\Jo* +:^l*W>G\V7gᾌëb󃮹Hd}zZZb%FO]9sȢ *Pc` 0R`QvnbPZufI5YtmD3<*q28n~^-t}BML:XSO+¢gymU?)3"fejxw]٦Dfpۨe#NM|5 u2@.E}r6^zI{ɧ-o ^ُ , Ě7Ld+% Z .WwZ6]ŗُM=sƩ/B2- (}ZrҢStcX(.߄rkU3JKiUs2!-]ȘAJZŚ~u0L&OsߐIԼƬIBFkfm%}+0o›][z_q tbH#\i2jOJl?)G_i_bazO"vC"05I Sɪf5oN"2Ku`-AGK]Rcؗ/3S{Ct}ݳ+gtò8Uc$Wceʻ\99b*Ͱ/8 V9 LP3x7qHP,ʴC+ƞJV8TšK,5Җ0]nl:{=|1ۍ=fbIS3hCo,ڸLGYʖ*?kXJL(K qvjId!LKm(Y! ^E\Abem S,hz MX/%WQM1 XCU`8Ƴt5dw)T+Nk\v7> 1xLǦ~NlNZ!<&e= eq}4պnOv !]Lxbe ׏.V|5l]Fn7ڏa@*#՗bz?$A%4`@A9 H%2B =J|pyއ?>H_0"vd%Gr+)jmݧCbյ;;ǐ<)B[v6P\&,RsT+B7Ut՚#$W*/.֬0<嫞Sm·+`Xa. ب z"7?*эkfA"  4h^*:]3y2{ң 3nYǬB D~OJ_߻m˝By| eOk O9pmO؂@>683,4 +)[]7weK%sf8kv,wM2$ \Qgl$f}ŅB)ƖQ&ǞVYB9|0e0J:d-SPis7EdG}cթRܤ-9){\ '= ?*Mr,UT CX]㋀=[8o2΍؁=r/8%i꼞&)wK CH?QihW("^۹Hk3SrGZu( lo,1󦭗{Sqݸ^ӫsP'Ey_QPf)"[`֙^=;2N SXosV2?cΈ?hRȭyz/@}PV4#Epoݗ$ 6m 'ddL-RJ"&[k[&V~Rn)*'t&$Yp>xa33Ē(8K8uhM08Qe"[zHI~լvwKl}s)b-ʁU ΀RAgV[#;?CzyųVOEןsD$bkۙ~ĩ=µ-6u g^_"o7o\ M>-aQ)f CҼ'ݪ<12/daj37br.: ]:!uG.3$1N03&j8+LOvMarx:JVr0+W:eT;-mktc kckSȥSigt/\ċ@qRO1+j} zD{fv-zƋOIRHeN_Bјcܝ8PK8J~&ouNkE W[K1w'j4G{s~gFQ@F$uP!= j*%ޜR\S]Dy\TԌѓfcU,""zL/x4yjnE|+Z A`wRY0V~Pt>NC!0btJ Gy9YYii1$LZ: }[Bk"q4MM}׮W@2z-'(_>1#BО3`]\ RHF1PӉ?)M>̐ΐqe!_tѤa?!Xu#R ioرq5{@Ý[_&"~F(N|]ؙL,@ `~KIub#vn r=| eōCkثM\ g?f ǓzhHf~V\&Rk[[c1f s0{~/.OzB`ക,0`_mhAٶy4 rb^мZJ,G'Px:VwV|װܟ-zV%~׮YuI8~dfp^J%U/M:H堿{||@ &2oP4Dg;ؚ^ A/ϯ rfǢp`LiD殍"I |)֏8j7py$鸅M|6Ԃ,|J9t9,#<]`q.Z{a?-L|\۞O!zV&g6?c'Rb80 .J|xq2}a=xFPL ۄh GiN{,GR`\ 5BvOB}-_+PRj'1w;ҿ;<}ΡgU2 S/ّmV*XQp٪|%ܘujR#bԳ,ֆh(a6кUxȑm# G*|*uC#BR1J6c{ Z.[+?97$TfߗU[iA=lnxy=ɿg'#H(x(x(RJvgQ4Sz`_Fv]0kŏ3QxDJmP!%7+?>p>3?P jי6f6kCvHP]d،:SF7*1{Γ>pi Ү{uhJbؠuZeXxt1oWܳ%O\kxI"޻dJ)`9^PT_L㔮M᥋1ޤeE#[a1nʰxXgnV_0 N$z̝Ǔl}p x#ImN)fLd(tT!bH>c藫Vc-@0B~cSč,.HALS̨h|W/Sőni]b-GQ]ϑ~OB42P?_G#_qӁf~n‡f_>f}I?SRFH)h(+I{⣾)7phb,񉥒=RR=uмeITiUT'xCXЂ.ˌe-᭶mYZ ## Cg2jg}$&cb&SR6qh$q{.. p%SG.AlhJ"H0ևDvQ">R΄oW ekZ,@+DFgbkι\Xh!o78uDz1 O [h9;>x h%%R.SYFG(u2KKl|)-~'RM|nLafI~zXȆ[kR xny6V8c/@<},qc,+ӷ[Z_axOcjPeuLS>UZe<<:h;6' (W~<ܺL A_/]}.ET:Bz:^땔v_5H8B ~ҟmiS+Dy'-quvU@irWirejI%Xs~ r'3'{4+fRMveX2S|Bìdm]NS\Ӈdba>԰ ![fիK1SU=d ?Wv❼OA_hZV=Q濫1Mh)k1iD4HR Y fvqjv_jPW]n+eAo~]uѾdPV׽)/sZ 뱶 rL) PvD,qb&G!"zψFZkh y揓|y>zĦ8Uj~,nEи8SdKzI' !P˕~5x&L:Xs]?%ѩh&Fae{WGᲖP/ִ4d{o~~GXQ!hlxa" Ye׾FDQЅ$.u2O.3?Fp}aоg ϐZ"-}y릯'W~#Yxȸfzs+)LB4R*Bhvt` nP9th{=hZI_Z+ۚgH%m]-P$$xᏵ\w>5|EQ~;KF8ЙN c#2 |l?S:#sm>cR}>U]֜}ԧwrGɀ=TT^(hΎM [ v۵wŨb4D 5gz+7|ʓeg7y:C?Sk+W?ki1j"BҌL;lW"FáJpvV^_2n!yS]B;ϼ wzYS`8VhKrg4#Գ0@ y%϶Y! br|VHSYV>UCσGG$Сb,)c7)q7Z@Kҥƞ,bS1%:R_mɈ"#o͜3jmbjL|x s&t[Z Y(wJS_":dL'7Vs2k.0I(&LHL![JM%'ڢc(qvKɨϊlj>EGV`7r$b$--16ŏ96vxxc1fC c#&|R*U Ɇ)3̋aj{ i93dA^o3HwZ,8aŝԿ< vPܡzRFr y_\e`20d|2~HE>uryqkr@j+Ѵ_/νF$q!fuYq_PT;4L#Ɉ1VBtkM0̶IV'D9?~0e{W='9QA ݷ!Uߑ|8'E{2 CwN2<4Vb1ws\k<w:uyqw85'Ct(ܽҏWQeݻ`ًk]L`KFg"[R&y[C} CVGRhSʯ;/\9lX#PuAd_}KvZ({P/]Bft^!nw hXĝgJpd.%5Rr~7-ywD4_W׺ؗfJ&_UP#GzI1hV + ;+:b}j̺ > stream xUX\Ͷwh4; wk%` w nA o<<nxGլ֨1k>R@`WVA'Vdj v4u 88nNv 7 7/ -@lmi `g@l 4u(Z!kM`5Ջ ngP 2gE[]f Kk,{C$Esd¦ ALߐߋK)[y +69;ڠ)̭5P`wEdj :9oHe_AUSkW /1+Cl ggegL_+ln^ 5 X;< O0R?AL; `sr^<67{5 `3ٙ:l g 5&_K;j rY 1ussy @<`{{D */kk"bgby/恈z@]AY^ѵvkDra /WǞy g;C5;kYx!n '7׳ㅸYs^x!_ G I$_ R $+ArɼdrɠJ)$+A)$O >d_jɮJjkE .Zq~%+A\tCW9mA} ,Q2uZ[nD :ίG .^[[eJ/"f?B,B_ ! !N!D/XnbB!/X9+w/X+bB<^d !V^!/#s3wI{ rsprC1 \|.-!D=  ڤ6|,ʛ(g~o\9݆2mW8ĸRs_CHaT4)Nw3Ο4%mGC .xUVKt{3sT%5v(Cyt4j(|q*_xny<&i}l k>e &:1@hq&r֎R-^llbɄiIK.4~a"0#8XKF!u\LB?6R=Pb]jw;Zq=ߦA-l$I6OLz xL i;<'bum:\*ӭ~װ7q?J9m0sXAqhEqy|G.7a׊` ZuO:簹zGe}33cpݎGik 1-eomH#TZK$gg0Pziom O!-CLE f>KѠeL7f8t"s+x)}l1"u5iaMeP2K^0(Q{~ǩR9a l_ wU=.`$á\Y/$8zpERɧV#:3c{۔ی'P3_&PO;}W5A?l,Ŭ$%$ SN-fYl1D5?8`⽛R-qmtn+ vZGXؤ۾&zJ`OG:Wjr}⠀K}^B*A}7Վ]RxӻHzWjg(4;szC@K/ eQTYL>s,*\2׎hjwnWqzjPV qe9D?NOKy1 -0[-xki@BwE궈iάUx)9G3lcɼbaeGH uqEz'𳔑JR8 G#&{,`Yd{X~?H5lO!/))>pUU`oQo-xtk-rH$'Em]X!`J]R3К_qmfGaOQqҼ+<f'4"n V*Sr_%oV-rI9c-Uhz<_[_<*:[_G=N@ ͬMQlFw{}tVrL+d웱QOI) h=Cl%Z#q1*C2|yDK@ 7)JH[Hkvgpy)fh&Cpм"Q#R!0LkN4#{UɒcNZ(J )]N~53)Ѩ9'(DGdS$}AOobF]hou6ߴ>u?/wQ47Ty,&q$pQ~c|SŸ ƚInI8M{٭0O##]q]12*޾M GIфZ$Yx}`{~verRG0OmRcx"審0EVBnyk{6~% P0D2Ҍaм:'!mi*A8kZ̈́v l=Om)ԼC;rhR`ِPh8m8%䜩0* c MI'b4PF#h}Q.)a j\  Soc+)J@uo9'dֳƷՑR8eοuL: J1=L?ŕ`x #׌Y3%j :'{ZVcw`NJ=mDztjN lyL98rąw?״Z!ZoRoLJ&į-GۿkL3dN7{x~ZylRN?AdJΌV4r;q'{cp iYs\eTdF Ԣ"hfi U"XS&M;2y=PGEwG;[JAx9"@ɾ[79(P-0J HS>oErW[V}F 0*IcJF"vТn=||Ch/ pZ)K\}ŤOJBTT44OOu?(KR~q3[MPƽx#~DvD{ w㘡FM+sP|#v1ϘAQ9e{ *(¤c$hsu";8C%ApC%PnM9?vY~\rbO A5ᜨ[ʜ 0כ 2v.d?i@;I:pMDq jJ@/")^pb*KBh:<ɰ 2OE;f$#][5D%(P','#Z*1fD)EMVvwR0yݣ 'aK9n$2M]\S]8C"Lk.˪zn_i]9G' \^)M)ZN싂}J_i+=f,WBکdȘ[ꦏ:SLG!Tj`;bcnRXw kd tS~:Hǿi/hbSŁpBw3ϼoG2CsKmqIJ]z{+#A rxo'*KcZКX 6KA]\` QY}LF naP~G vS@LA_-6nyCwiB ⻤s-IR1 4z{F޳I'7=in zLel-; HEd+sa@34^C?}Cp^R,ʵNH TvΉq3iOoHoojŚב4sR% &6%O]~ȔHd8Q\N ~ 2! وvJ<Ab 靸ۭQe]$wuCt# /Ͷ׮3`m&jUtbJh/OpA[wi jreh%0Jʂ ?3%;ZRgQӅQ셥qgR5/67Os:x*3 .5V<*/"|*1#7}G> [Y|Gۃtdɫ8B~呋>+ۙ_Jm-z?y>R)yET /&G]1dR&KՐ]x[̕_GƪB)_h{6D8}DaLSN čtzƿھJY. FZV_Pclٌn"N*NP7܌Bxzӎbg47xF2,zDmV;>&G8U$eGR}2&ʏůb)kUqxcc]xM8u#dl^}~!Rm+n][+(BN M=-F]6VOe a'S)[>~[wc09 @;EB mݿըPj="_d,e<َRnx"t&'Ȉt6PzKw>fIS3g}c?uL@S]F_ы>,vSTq$ur֨wqB P _x98Gf ӠAR ozi[\+?^TPp҆r֢ %F Mxq79Bt>m$qGVǖ=YEϘZw#3GC+ S'tX~J AѬN_Z?A㜔XԶuC$V_i~K?9D0JN YV@8z# %'u߻?$"p^ FߗޢG$;q㰫Ӱ^P]B1tt̥?X*[֢O TW`d4l Y0nʲ B<1U4;R?E-w7Zћ&M(  iAVmf7cX7<8lC2~ wjnya]bDhrYly ,g"&%B8YiHRi㺱&k)8wټE#d"ܟ.5%CP:a@@t b]f@<{$rSCa /":#`1FXuouF/F& oFB2i<ǎOƞPw _SJ,L[w2B֊gΨ?j% ab`149ѵFn  +ЏF?VhbXTG9n>uOՀ:[?龼+9D؍Od B{JG3{u2Dv~%_E3l ~Gkzj⃢ z|C<H2?& U΋dMQ a5pZl|S<+q2C<SaR.^=f}ֻ}sBh<CM;MZ_;W@=E?R#k8ޜ+#\:8oip?*E< $%vA(>=S3#ר ߺH*࿜y_Or34Ԉ+Tek]k6i)ԸM!<| L_(X]w ^b7_I헮f2znVZ9qnۚa@Erp+ z 0mQ̸BPQt6fG _3=wX_{teg)9HVl3_xuC";=jґsgV^_lϟC`Oe[𯃕`:u8?zuUr |Zv9C(61bZ&Td{).QBΫݟFxI騪[3hE4kz#4G20t y%GUc_כa<bƔ\)}*]f /]-KZv#|?OfMR;_>0|9#nL#{Ǿķv`B%D.y趗ޓ.| UK$_AڻoN-$g(dV@GI6w惛JO+%/&nS+zwY}= w^=;TX`Crhd水n> ];qN :>ޭZ,wǩ hKe ^壆=XPېmbSWL**g5]R7Va?O!h}k-ZqMGC `02 ˽B^9x E# 8s{U.ۻx K.v+;]Ço Zu +E&aIw& els jqH"0UDnJemʞ#ّ]JKzѫC8ݹ5T_cTHX4:} J2nG:/<(]?&oiI,fx\&f<[ P5uC%.b {Myܲ dxg.6jtl6؟xRƫ)1rU-WNz7ǻfئRږ_'FRL"jauJ+i7__E=hy\Q,' E},6F^< G׫T!l"N6e`B}@/&3$ѲI&.-:m7 KNe dSV;TNMxU\LJSd}8JRl0ΧTE(sӤ(z"2(Y56ϨS[;:ϑkF`LP\2f&/弄Dz5/mq[M7q ϹzG\ѵXa럞nHitǔ>M+׃fgY}08VQlLx ˮeXCb/-H6\y)ZdyҊ. ^\&448 ,6={Q61oxӈ [99*!`97aRcnh6~\K_`4e[Cbswdcᅮ-SS 6tlm1bjZ pOI2avl2֠MzaW3׆Y=O"CIqOsρ)#eeSmY \s~5AM9.u=}WHԦkrWYT:r`Rln;4ªDYb(;i^]`k.یtv/5Sl}]F_ec5nLgt(csw׾̔nPOt1;sQG;I P\ 3$ק`ݸp*8/;Wm@ĤMnk|m1'cp@PՉ`|Z떾Ψ>8(rS gqq`"9}ûdz6`wG* m.͵v=v7 `WљWI1*Kk׽s4CjO{DH4iTL{40A`n >{)·8iBzgICu1UWѭ\m\ 7V]عn EZ8M=vX1gqs&9" w4:?ym0p6.Nw(Ϟ&`?Q q}>:\oB1MDXョK#GFqmRljK=ph+s[YgKN6JOSJ\'@SVխvmw_^| A q ޳Q}^8 2x؃u#&QK1\5aJd-ے@ |}+1U1k*D&MRj!KZʉd%3NvB_~O3;Xe˪=RK:3NĪt[8Fc֗LE/±% :I+Xg俸&KJtC#έ3]~ab*Bx?3 (&Ug& H"*jԎi0G|l͵*wn7  opPZ,yïRŋȱD~@d@4M:qvJfԼеgi֌'BH_}}u_v].ګӬ:"9_?UggN`fQ:냍1h6s7S. U"JJ*? nW*8{m0UfxS#;jw섡wۣт2z{--40h^>3>pVJ3b(UB>Z"jbzi =S8Am T;Z  $"-$d~@Y?K7AG*|-zkD`h-Uk0jD K2q+VzO(l"Uf8|)G Ĉ7W[S)ċ\q)˿ۣjRW>ӂH-sxgQc"oC[Kx}(ՍpWЏsG |(Zcx斁Kd̛hQ!hGVܕ/S⤏=OAkX.tWW/aÔnd_.{%6 HxOJf<S:T&hąd.mW|%|'ƾ8KZ9~t:ˈDk4\'rZPHvmj njf*a-~J{OUmR_tgHK{t.Z*Ehj$H[TZg~I&‚,:=zl,yq}m֗W{ꋍEt MGId͜U8HcTk~rjnzc/h!c}&.duж_W޼@0J(oUM˸|P깞rǯky㝒}M"]Lͬ\ 8b%{<;v1}QPzVfVQ}{Wb$ZL}9M=NA8pgoN'C7s9D4m"Fj\!Xql0'\I gmչ ē!Z\47g ʆQ[z椇&8Ro tn͘UJIoY`{$K'隫Zt4qS垥iե Zq"Qm" . $T/2BGlWT3\?Wo-2mDXcɧs_=jyllILP C1ɧhEm &B$@̽SzYj<\bi5ҁ[SA=mϧJ|y-8@d܀LB'c313wzT)m^A_DXM?(Xh2uvۛ:ۢSendstream endobj 113 0 obj << /Filter /FlateDecode /Length 1343 >> stream xYVFWx[ gB΁!',,`"Tu@+g€¶Znn*>|д*ձӥ"Bc*ޜTlO;4"J>| s<# |hM"\c\ldq_cL"*i.gL/WMvp8'#[ h#($2I# $)_G8.e"! gBCn`7Ƽ_,/c1)ї͆ < j6d Rޞǁ1OǙ"cd bl&9?*>"z:JcI$9QpKG;I9$!7CL;ՆryC2" bP" =p"?$,ua6t H"$%d4 3Aҡ=MS}8uz6_< cJ&'8mg& GLPrBdPsb'lĉQ`66}SI=ij=1| 2d Ֆ]K8e- m#tQ]JO3{x3J_Yҋ~A+<"KYq VFWxauOf.%r:3" ڿɰU#ߑUR+.&}+ 2^sz F8?+z)4v=,Ćtbړ`wtYRW]W[?Qd[GGΆYHEV (mAm!ad_ ~uV2W0y}ziێcXl3jLsخ3ܢ/ɻ*;))_sV@6 !E=(?A޽ό}_p1¼)\d.d'NmüOoߎە"'8QLw$t;'xȾ{)Xlg#4Sei^4Q) 罂 ڷ:9T ٯx;ζEVny 3zUJ ?+ɝlK_q%My5lEPP Ix,l`ñJZN2 VCrAn]߹h6wx7mgs B \*fV( |djRy5CMZc{-P ^"P`BSX^&1WJuendstream endobj 114 0 obj << /Filter /FlateDecode /Length 2123 >> stream xڭXK W-*|;'YI*JJNjSN9KP4'|hXM*˗!F|/YIY=lW]e$WͿ787&pzY`??m6I&,֯cL{3A3׼뱈2yhM(#3a aµ74a_h‘ihP[Iql1aVwYhDZgY0X,ťt&JZp̓iaQ0#MvndO-H7D&x{Z&l;Or粒FOQYF42bAhq׶>aWf$a%W7 m$Q欦nQWdOq2fGosra]۸#1ډ# ,AaPq.ȶc;k~όu,|88 $ I"47a3$>^F손QU+8SF|IHDӑ~G(gم{x2^Av!2|dQ@-G1%UT.G$1T8I י ?HzGYPAN?i=nFLCY{m Mfn-vov9tڛ2Xߞî^v[hjeXWF^fY O%nCs7I )~Z (l_TX.Q-eo Q.98+#cy.(KwWC ɹLy.l$$me,_ER!-1 bKuCHe[ /48IUR<"s<-y\eNXf1(C?NB_p=F!cy%w[R8jRU2DcG5Qy\c1a$mwFU-E/LuF\*UvRFieu٤jqLHUoܢU -_c(p~$p~Y@T>(G 801$&HGP.@8q#I?~_{ z˧W$UAqȦyeɋz] `|I{Q/-i&ȥĩ[ЅeV/CA.Ar2U :gzvLٹͳ;rltSlXjߣCȖQ3E~Xk\ゾIiv*\%^6L 8uOm9:!, P*S#XK|;ʰy(~h} 4l#l5 pww5g'7/=f\=첻V> stream xڭWn6}W,$-^t H#E ->+X+-$}Bw]9X}H9xwq}+ %[2\䫻@P:TIm0Eܖ 6…z}#󕔢HzURr.efMF8"p%*nxizpmiÒD&.u?Al7`Yd..cE??Zۃj 4sWlRM$z52&0J.pД-)vح}Ǝ|pažd|t*- 9ϳHlSFF*8nm8п84h܏n_N|Yb{ċ~fAϩ[<FCD" 1 #jIے0XP۪-]PgPӼrY fܖX*Mnf&HξIG]e1f 'lUlEmx3KvCdr[DžhɅtܯ{<@^m*@ߛ%4=U1SU^c)K)W:;t.[\53u &,;x5%Ux-z.~ cH2:7ɀ{S9/lrUȚ-I{fG\FB<[*3e5Ơj+@Bf@bK⮚M_g 1' 喗=)X8oVU< ),3U?A=Z)ql)]/ݬȁץWqf<}<':t!|'>>H^IЕ4~k=ĢRgbr,RX>Q7ֲܳl}dǮr4ŧ/,',[=t@4&{"iz]quuM8f^m:9T/@Ij=8rQq\ }ǟ ŵy岾b5bu.h޺Y~fuCT=t A=xuD>W<}zR@3ޱBLX=-dx!5'>5 M!ץ[)?- [;nCtɲC$,SgTM,=g-J|W"< #Q%r?!FkrY>3GnE^%T:fG/sk}.l/14DQtU;E,EM5&4DA*O<å0R Hx:9 "l`TZ4F= Tҋ_.Sԏendstream endobj 116 0 obj << /Filter /FlateDecode /Length 2833 >> stream xڵZKsﯘSޡ"Vq`l bvgWqlF~~{(:n*jwŹdR۝v6Qi#6;^jE~ ZTuG\%L>maz=^ie 9ÖIUn mc6OWg.U* WvgN%UU]hZ^އEDRUߕmYK^P6y/2L,A3 _bp]hâ=~#SBj}ϔp@ȡo–M ȳe¡+n95(zKB]y.Z IY3!^rT=ac }܅&{irAY7̚AX? |*s+95dAR 1mH:V~hA1GJ-DtGHE@ή Ey4 '}u*SxyMNO& 6@N]/3)LK˴  SuW_y񥨟T?D62'?} Do%9wk#@F(3kǾ:"Q:bDf5mbKHW7FA07]qAŐ.fB<DedM Cq~ nd ±E:FpUǑ|v`̉D2:Ke )"54#L*>aGIIk;9k;Pٸd-Qqk@P*Ɨ,Y<ظ4wn YPTri\-Of P#E4Nhi/Dp1E$!שU#0MuTj39 x1As(ə1,x\3&?̆&S8ơRe|4oWeRm׭ 2d׫ UA1\/(Sw(:!p+ܵKqk3WlOՐ,(Y%qDLf(Vd͝j5;9EQD'R'pㅶd&|ƥ4ϵ +R vUVNpԦԵ| xuNp];Cƣ)^e!FLԵc7 oX- +FT*u䄒K=9E=<,n?#*ۉp?h.2XA#ڌd7xm{/`L pe%.YQĵʐc/ M*x䜴$C+(Ք@W- ,e/0;5Ɔtԙ4i|< s+ Y>IvRͩ\v%(%JQ U= 5^,8O4:0oxi,v$}aT%L>%g.4wCEx5u2"OO+ c>ᴗjgVN]B ,:i朻 ^Cly(Ced.}ԩ;2c$"_x?= Q@A/9zSsh' fΦG;}/afUf4â׎Go/:h;m/i@tQ #f3}>NbCz`  ȥ2ōXj-ɩ+֡d0%Tѭ=(=O~=/iCsU81;"tqpߜJ8?Ԙ]7c2N=!5T#!=8j37g8trһ+A{.?p4jM4?+XЖa%F|M.' tg&\׍i@62ֱ?^~B65X 7H?ܼԏendstream endobj 117 0 obj << /Filter /FlateDecode /Length1 1013 /Length2 5185 /Length3 532 /Length 5886 >> stream xg<]%zD 蝨Q2z35D(A.A"z-$zI"wz>_kc3VDbmQjX0X,PCkWǣ.*p(Oo& |Yx{eT]X$prХ h$t q/.;úu+w@˛"(O 8?KK]?$ .C!0 Ҍe1o(zAȥ|~L%%( ^6H@AW!\Ŀ}9E(7 A>5EH?r|^(P5wXw=գwaU"_?~|KF~MU DAj at]Ti$?Vݙm4)%Zoz#.aی"*? t HA\N&lNBPbY,Χھ8PJFgn%/OϤ]d&Rs$+EKYlK86% `g̪՝2eP|~6Cw/eژdݨV-Q/}4s}m%GD9TvajrYDꬠO,O[jA΄=[ iPM"^,}S"?SfTW$Іn8j<~oOyU4߱: 8gl#=6 JXn 2O@%&LV!  ÈhFYBh"P=ILy$T [fvckGdf'70-u *;:  H-ΐYE|esŁWҡ%)oI 7?i&{oS$z δ8V¿wY 摯8::F<4W\S*Jad6)ʻ܉aEV D}H){ّSkgڝ)QN`b_bX!҃Kd ߋF}$ݡ;,grFSfF8 mL)"jml* vjsq)?B!駚 ␱\kY^K徢$Zʖ6ٜhZ?ӤrCn#n:|B a d1MrĭHo=f3_[>\:Y;R[o-3`JR#:z6vx}h"g{ZfoIdễ"f>5d{n _jmՄ9"DO zRl|SsQ,,T& BfhCx8#^$XH*!]ǵJFت{:#3q* %v;$ci=,A, ;_g+UV"28}IE#*`x5ů¯t;t.V0Yo7YpTa1j"X۠w(rsy0ޣҊhқvzl"oS7ҙ8 Znk1:OcC|ηXέҾZhqk pw,ȡ|mm3Ȳ޲荍)bF gyO/`+熦m CL ]UqAj2 EJyLPhy"[ZwurbJ_E|BC.Fgi*~gH@s|6Oh>dxs\]% iWi1)5v4Lh[GS{Ƌ|v^2x{quE,Tu.dD4PV^JR|sy:#tWEMfM Gxoh Ɗ˴7,팹"uv|xYx)}+m/Weox' %Ѧ`jmNq. kjla ]|Wb<58,?QLdo:S &o'v.cEd(cg59qŔw+FSBH;uq5: j-anɛκIX<m{k2Sݬ]h<#~04|#nhfؤQ3xnTα(=|hN|n_lׯ8>gIK5Tf]XxS'ރ1cT:e{D+NDޱ\+bk Nܰexsp߭.N]ΨxeFJJr**H-Qv1Fb ;V= ɍRhkWqnt8IRչpl*o_N}opؖlWlڰ٪%T^WLXnuv !f(Dv"')͌:l7Md=YPGvNt+CmQ#m=τO?Jbm˼kߵ03M5<}ޗMRzRYa4 kLvā 5+VŠܕVq+dWl(5RW\7~!&3y# AvTa4--(#wg#4&`#t@fXhw-4>d;> stream xgXS۶HST Rz/H !, B%(AzBQt&E"EBS@T4罿s31X3%Drp;h4CKK3uX%$ aDPPP`E%*!72Q}AH7K@!1By~΁ !gUP<("z̰8@GT H~ڔ&=pXLzBp@ [`0VH?i/_8_|$8˛%=kFDb(8 r 0hct0a&O$;ⴍé3gDc!x* ":p` BNcQ84 PTQ2FRTQ4 `a<Go草gpLpQ[ǫ^=?JӸuMW9,r0#n7eD"IpCvdON{0Xp$;P)oOqᣕ7mwR;pf oeO}l]jvз\eaNe5͜Կsi848-(ʝK^+2MN?bF!d-ij>OP.!+N*׍YIgzJ@7WfN4wXJl0bo̬h=.knȦcpBT4f 4J?`o\rA3B̝|w1^'oM1Cf FqMw!a\ˊjGۆ;>vN%DUx)TQi g82.YL>}kɃBk.kƘ^8*SYfMGBXm#(4O $p@nĴ޻f^Af9rJY"R6dzR,uKSjwO},+$3[˘sJ3w%+e>p-Vh7(3И`˟qm[!}ָW|/B"8K]iR?v>twUur*8GJ΄H\-h$ɥEpsZ?ce,6c1ؤfk^ ^Ѡ!fA.̙<>}LrXo8jkHRq.^GfcQ1>n=a:U =">*1]o[jLc@lNkd f8q/_%9h?ϡ2կpZS 3$H ehΨf;6f>,.g3pIqa{r8Ϣ uR ,b:hq6F<$L8n>Կir9#lB9*IBgRmK5xc"3Smojv.a\M GZݤ3r+GyRN\hh H5 o%HwB-wK}vDy΄:m==qx6MYdόkrM&`ca+D[S9=$q(Yz^/iP\t5j7̉/;Gۗ4&/s3vŤ@.Uó&Dь/unb#.dZK, :½&˵cb"Y[/ {K9|77e6?RԶacۗ~R0@ݏ Bi.[u\.w{9*!W?PֵQ͢i̒uX)LJҥLU_5olg9< xd:31$&# krZ$hz1Mk -[tM%zѧ؀Zw1gP^\e޺;==:HjYqDjhْc>+M$ BvS;cTc]["0ݑtc֮gLk͞U&x1 ¸aQz[V5 "8(|uo0Ѱ9S>kZljYr/u|hMNL05vVp;rso_NP$%$]哥5ngdT81Nˑ6,}Ś4q oW3WpE 0TfZqV}jZtbN {6o,ޞ'sa8c6h+'{Bvk«MQaTD¦JmdIn5ɆWsH_;6*EpkZ ׏<>M`qjÉ X!H^ć7&~{,6p@M$h|E2&[*5-]vK-He̗nq%^-mN6[4&?N6>I}C, 3CA8Ta%w #CaS^:uV>aZo);qVz AK;KO+Df5gB J1RޑJcY<?R:gzd)o'Sa(10[S5[~b"nWgBL.ߓ0ƦX"½[(OG?NCKc$6BPOԇjA}&MoU-M϶ !> ;PVxwwd_/UfM[o&7/_EǻGn]`Ra~vCg VNp٭ėJ:Lr-tW}<\+?d%W0LMO[B0yܱ 57stc6w)A|Jg3BQ/S%.Sv >=z%Q׻,g MJu(/4Pp?>/B"I/-endstream endobj 119 0 obj << /Filter /FlateDecode /Length 3271 >> stream xڭZY~_aZ)v @m 2y%ͬ,yuL>uQGMWC( Ty]fAhL{W!Gcxhw[:ڗPWv nʃVQ c[JNgfRђ)RA5"F OLiݲ@GlESm4LƖyFn/|;to;{8H]S$h586<6lnAc]1il}c)e dkk&niDq5uH/)@ ۝;Cڡs%;8 ecLާ޻*At0Ҥ>-;wK3Q:H+[nndvS3ub {K4<6%^x%M45* b48,27I rFxbERkT (7E@ e{<:dfRtol1\%F޿.ydrRpR2C??Oy^$ vnyRs'W~i҆~'& DRS|Em{B#ȴNT UBXQ3Z^-Bcn̄t# x~=R570@;cYk?{|G 8Sk+ơw"<x1)hP3(!`"ja4cJ qQ aώ `Y 6v'(﷡1+; CI ׁV\e}A 4h^7od'q^6VvNuM#)h,ލxK:* }z!H%fR;l[z c_<+DCi !y1Of&J&tAKH]RU Do[͡>zA>V)2m_}ܗ\u>Zj;< UVS9'i4Q v"U<_ib.J#3IT; F s3;+n347a! q+6/WYmyJ2DT=e7{coS8(<tPT1*B›#,ko!r9˥h|KH zcݸ tH`r>e OڤPYmA,/Z. ppCEfYOV x !|HN#G0_Y Y?&tV$9pC Ij˱Gpw %D7pY dp4Si)UA0B=hyNA75AZ$^@Zs}m`g#EM%'KE >acE3%J_n zIzXQr\ B`_a;ƐsϹe%kڞ*$pMqd?;cSa熁VO\_K)cAH q*Ir F8!TZ`7*`H}~O3Qw]$niT &2.٪Sz= ;ե0(prw7ZɖFp\ E~E6,bX넗\Q$bp5 ?cğat}Gk7 4,"?aP Ǭ䬑0V/$*q9)?#Bѿ_:iP !>j:< 2R3[u}meksP_W' 9D#|M͂+X|5*bU#T8% Tu96RZ[?ԚQ\7) ]hsJA!Vd+nRNܔgh1?Ifn``ύl-oaNuPϾos +2Ԓog]sJ`p /ʟMwP~ R[w'guyJ]JS:dF7iKȤ̬Gǩ3C7PiujƛϊГC.K9.z w,mDީRjRA UVI9 [>X?a7Aئ\n{'xeux̩k5W˸VX߃gRfG3.jD 1 2Pfl>HTvTVs4N&?e!Qb$YNr4<zbr ?X.s[C6v۟Gb0{K Xv' Xh}ۢ#Nx&{%ö$(l0O@r9j{d~f IqLE$F,|HUg\0|U?3}L-|[g]pqWaHv5\ƔHމD2 ͥdL~hS(l0 CDqю ~w\endstream endobj 120 0 obj << /Filter /FlateDecode /Length1 1366 /Length2 9549 /Length3 532 /Length 10378 >> stream xUX[Ѻi@q.],hZH.Ŋ^ajڗ\$7ys9'4,03  J*kʃ8 Vv 3 9H]!@??(f9@<ܜ$je dG/P 5;`; qdq Pq~`@@ + buHװO8kAг_ 5\9/yпY/|x>kw͖ x@s?`6Ižy% .$)!)˂X c3L7Gelܫ^l!h8 9H'/03w7N.W޵#V(xs "x8YCMJe(%@wW> `s_ S/&mR?f)(:5H8//,&x_Ÿ/l}ClzܠG;f!=K"ǐ&eS6kÙ | ٴS֥0/Imp\/<^` ;T ZCA`?T_yFA"ROW9L8!χa~,K=I"ڑk#ݎMΪr3 tldIvNzW]ktozAˑ ]3Nvw8'ȪQڛUShv5\Iz {Q$DO9* Ԃb Hpt1ѐ(bx"SWr2GţO\D `ls//o5h"ʟ\A X0>cyz71Q|}s[@a*W3^?^v*齔*<ݰwbYM.՝;Ϧc}~j Q} Gv$ZH=\`cI#"Bh+*BӅq; FAwV-7 P/ <lIZU$ 2nŠ`# 4S-W jV&uL/GៈXPF髄%?i~4绫_c>tƳ"T?;Kb͈҄=j >:& $ؾɆl}>R SY,l!!Rˆ%n-I[}[Ыc]TḢI2($_׷,lvnW]Mӝ$!&Ϧ8GLi.;P6&>NJoE5FxTȇT(dNgE%,Ď1GZjfjcԡۢXM*/ vµl v_lSqXV&:[qJe $e#渖|L98m[rnQNC9H([2>n\uay?ЗD-o#1TEeы(h | %b\ǝ\n ҁ7T~؞ ``Cˠ=f6z:hzƁb1\^}K-&5G,^\Oq EQmo!Ut9ͼv&Jv45}稽xgKGpW(yˬ3(Ie\^3U<*9URYpµq9*zAxzζ9ڎbwRX 4 r:?gRz3f sAвi cf1lĔ+gԠxKDf׮|=^Ȥ4D$M ?+õc bٛvm ׻T>sGZ4hcm5Ux~D/,ZB$_>Hy K,s{UWʆ~SϱqF.ݗN>mvw!”;TpBXϏp'< /3Ez>L땂\ xXxfJJ6F0jW.Mq߻R^f-yk3Z[os+&ĕ7@WOv+҆ZbJKo9.ʹPbBs2B,?KLkHK΢ȋN1rSzhtjJ>Pl9̍`5ćscdKt gWȃQ~=ˁ: ﯷ?Eש|6 I;OK(xN \&]b_DO{0 , 5QL6ˡua_HНKƪF~(o?2#I y- ҿLl@pP5*!(9Qrn-0kYSER-(^wEH(A*˔h, U&o^|1znH(Gtۛ^)LmbF*4a@L{ށ ^}W *K "oGMJ 5TqF EqYym J?u&'wkB'dObCÂ6tqִk.Ny ?͵Q gލQ0D :ƒy_g7xpvc?Hٮ͊ɻˉ/'L[RMx i4 8mp[v!yArg>/C_0 3$&2?A 0N*΢{ÀC¯ec{y+n,\=:o(hg$ʼڛ^Bw B "/%p0{Mk$%{6N4u9](j;1[L2(MF:RcbQu}p 'qmt. 9?.(n>7?PP:2!I%ϺT+VFm^ :nJ˰Y-`ݝ%mZ`RV)$"!Qp&!q(Y r1$0rdʦz6 VMV~&esi#G1gk\O̵"fkb -9#r#ѻ:^נ&},T]el?4(R!{mEtIVBM]^=ƥ(x0B:p]moYn7_V]&$}/VlnLkqk 3Č9^58+l (,\QZ[-g:6qê?;\1.|mr4:%G+_0^.6vz*KG_x# (0R8>7˯%6_f삣;,wp8[_XӞ[!6G9 R"ѢVO%Z0U8{`Rqulv#T-'frΑs4zF:8W5{csHh96y5\D`x ӥpBZ^ףzBTe"/l_p%Ϟ{B,gHԮ(]FK >ȡx8\.d/J>K%y=#ƩIHDG 3~w3d׾j4$UTd^/;\C+֝sCR,!(hfدc{h/⽭O>#>n h%BN_WBEpr r|-c7iz[aVݡJ/DY8xݛM$ŃRTT%^ʽ9KMti+b< ٣}Su]*#MnV,K0R?T2!CO6!Ri}tksK(:4u8uoԜ2.?u\ dl3b*ZJƯ TJ%li= E}~G#^zEjJ0*֫%mS>G066u=wJ*kUjQs:GػzB@\̝/ >@GKl&M ve5k[{WZ+ؖDI1fEۆ[ 0uZ>FPbǭB 9ZVdvU%K먌+Qa{wrU'v"6g_-@,94 02KCYPg̍O;/I:Ł=ЌJ08.^ eҏ5Ge>rQ±v)3#rvܝݢ*=v5F ɽsa_UQ^N;N 4ʜcU\4lٻ"Si_)R_! NwS$|;]֏3+0_/tp \^?~Y^/ʶœz5$~s̍WЊ]]Jo&YgÚKt{Y(v4L%MJ qlި ou"v$dikQsoCi_ka]KӊQlT3U})$a,dsO8$#m9:_&S&m'gs>BhW+UXB%ug |'#ENy,izMl~SH;4ekxCm|)pT&JN@eMgZ嚹+zsI3_ַ_6NnXP*a:l2M%!=KroOM_ٽ{P4sMZn¬bI5 ;)ӊC>YWK^+MH %ga\GPY޼KqSִ=Dp!_Rt3APAt-OR.F4u6bUA,pD` &G= R:OIxЏͳ^qpEEYcv]i:?wힹ:ys@!\ڙCIXP=cK{y}7x#K-  ft}wMwz>O~1acKx-sd+FA#oR]խ;;Ao/9:&EWeAA*ZO^kSxǂI pv7SH[9]T{Ǝw#&xsIα럼"E9޺7gaSNj1>}bk,gdK}|`]BCss=UpD9 sr} jA>`LDAb VS6v^K;D|2V8eQ زrҌX%Z;H. EƝV11{nټ^ VYeÐe)3:L.t^?_H#\h~:.e`1g$MܬY>&es:S3662aTjMZz0~)p T8z,"%B&¼6#LDkWVkz0ZOBM KqT2); 燯NVw<:IBhZ"' oO]?}ͻ0gm#'Zޅ" (YamB|s`\j2$eYģtKS +b]ݕ oG!Fq8uZ+)& }oFĆɬ)c0a {Ql87۩*BhߨEVa?ာ5Dڂo>?^DK蠁z/^PlG(Bĺ ᕛK-e .>\_{|.8NgG{үrЍc~;sЋƕR(uQ3S3h]yMk:hwVC`{w~ g`R]'6bڲw66y7"u]Q`sYQZ~Pm$̈6 &_vM$F0GT\Uͬ vu2icVEÉ d[y4ӵ\1uTvU{ǾDZ.Q}, P; VYNE "~dCjjLg@JRni;p_X+=Q1B?Jw Y *7lBqh?j pn;z:AhgioHhoL 5ћUHVv˦5Ly%žJ®K\JqATlsI)!agn&#S}FukCzݣ'DP4rzrXW fşӽGW#&PGx'iFb\yxf,hZ1if(&IvE{.~ 7r[|ʜa!G&-P;|~LM# HmZ3WjƏ.pCa1K4t/9A,Жھ(6"FWG~_~`[j ݧ"-GMqeoJM-LW` ~r-#VuLo8͓4ȓ] 5eR-X(v4셋h3kh٧siČl7tjHeONR_R~s׍~] ͏t ~x2{X$r]s`59j:%((׋}3ZiMp/ 2nÄ!NPAr3tGy(y] (RYz zl$YwZQJ+O C7jnQyXݘv>NN;W5BFjl$.ts*aNc/{Nܣ<mK Z1dLej$z?Ymrkg~>Y7~:9M2{Rv;]3yïБ e"5苶c+3WQ&NL (f p|@8ݏH§:bQDdH t]~@%.ywT|&f;s*\h8()~ -H~/9S)eW_$QLo1 ޢ e%NmP>cy҂&=~g⋭H%u8NMb^=QkkadQ4đ7eS=RX%FrxMdڨդҼg;~Eo )ʶz`<*(2YNعpCB{\JE"#7B&1,5݀g*i6>rAb iDŜ}唉Jd$f#*}֤u{Ao+J-?/* Qt<,k;4Bnn 9_x@_FLl|$ΐ Av;CB;{`y A?NUZNk1ZQii ,O,TFsBN=U܃kWĨJ$Lm(ׯaf_n(]}ۺ[qI71I"t^ɌMoKvVݕ2MIϲSu4E7=c⃅/i7I眞3w~R?6{"hLg1ҷcx2>Xp\T.h <[݆}_m:O'{2be}6vSh& 4L )f˅"&g"QQ [ 1dR;o|oE+0ɽ1ݨ0]ǘQi;PM^(7;(;4?N\+lҔ.R{_Х1Ƚ1W2Y?6ڂtLUBmy\#0EcLwצV is WT/sFm1ɌO̗ݎ+F-B+F֙ 5d>> stream xڵZKW r%QO9I l# FLn%}*RR66ҢbHV}`ͷ?]\IwwErWDeiy;HC$8N/>v`,>7?ʲ,$R9>;@^^~橞9PhԲ<>JʴeQ跆~|:׾>:a?qi&@q\X /m ?VF?FYT5aNdZ"Y|>9<(>ղ"Κ.5'~0Q<IZó&}>*ᡠﻦNO!P?C"RSY|֓yP'A}Ŀ^=iR;g:cb5/Br=Wdt?_6s;vSCyjҋCT 0v1b1/kVAzCOε<ڗHJv"c K)9z;_p c(Ig8~JNV7v76l"~ 8r59ek~om c8lI$\eZ&F"S4/Ҿq:F$^#90D{hGaeB&BIJRJЋZ,ҡ)>Og.9]eЊ2{1Frp'uv2霩ŠR0*pn ÅG|w&7C癵ȂZ\B8j ᷖ hitN_wԱ b 9;N\/bg5Frj&V$3;0qFV A$k0OHV{y؊heq cc;X{uU{/^NrzPJF U"ٲs@,Mf6Z2Q!!9ȹs>/Jd5E̢a\WtBzhlL( wEe&'"L|xB;S'K6+7R)]oyqŦF$Kָ*C׳E ''Fڮ<_ŚP f4*@Se%&rr"kwΘw|`plk\D7GZxQD_/.gmFbl&G-Ld2\XPiQ\O%CC=EłI$:۪,!k'-Kjv6s/6zhˌ~ZeKv#sԇ$Nd3g ~v0 --2U̫Khhu&鸒Wte7r:u¬%$+ªbPaQv=4F"M$_^nE}D _nt9&).%jlK.kFYy4]bR r1v콬utv'|0[JG;BIJ"WJFDV v}e4ykc[{;INj^mCq3EV~z_RH\D93aVU!Y!yM춴E#<̹paHTE-0/uendstream endobj 122 0 obj << /Filter /FlateDecode /Length1 823 /Length2 1366 /Length3 532 /Length 1958 >> stream xRiXSgM (E/{D!$UDhYzIn•,܄HAeQMQDB"TTPZѲ(nl6`tϙ_;y)2'1|!jcKgkAY2!t+p`S.pxC`f?@[h2i&tD ORc " !ڀ9 n` br 6 H0|! LGa6, 3Lb|837\xI :5 Ad=7\maS!xS`$I}6 `6m+kThNP!@3l`.Dr@,h褭&xmZw<ºBHςr+PX|n@͑˕9RB{VXMaG{mfӲ'8&rB౐<>vz=#G_,1wcmu|RxHi[7f8} gn* ,O' .8|?6tH&WE"'6tw5)s%?]|.sDs/MeTbbpYz"3~YWdVtUз:%uC&I]CjB}"W#ѝyVݛqF"8,L|ᐽh;d4Aw' \="IrSW'. ?$))$OxLpVO1{4ء>@rKFJ˪Eʹ&*ߴN)+Z`魵*Tn+99oR@u1K rg=)?-Dz*j$#iԕ4{y)Tx)]] .r<). YÈ@-9Buufլa9rQnx'=au.K*w{"YT.6$~H>EL6?VȚ;WxD<~5ivfkшܤ6v 1?EtiЁKe5.Jw'<Mg*Ɉ,5~lU厕]:w s+xNYI+V:-5ARy{͔_b2Xki/*<+RseՕ:A,wOy1XU^:B7|A=glAQ-\V_5<]9v+W񯍄G$ ڬG%>GeϑtMݥϖ%TG_Kxw~ۻNY g;''Z8T=R%ze(Kh6=vNvy"y^z+cϋZ8$_:A|kpFt4NXrTpa_/[hHI ^ΤPFPeA\^cJį1+Vy.B9PP/* sɠٚ^Yg=8]H7Mo;J@rXw}]EC^1KZvhIɇE,-q>Mv;}xl&=>w>D/;~ OD48endstream endobj 123 0 obj << /Filter /FlateDecode /Length 2552 >> stream xڭYKϯQ LkEC LE/lln ëOHnM.K,bW/~IكRi]x9Tlc꟞ߞ*O0(7>q/, #dǿSǨҤ!S^s/ HQgVV,pg8+HuƏӼ6|ynfY7ܥ 2uYˑG^cJ*SLm*j/zfTͲ?Ydӳ&9 4328<,OԘ?JA|ď.ts킫x] dSٟyҀ5y>>n D /h DWco(Gצfw Wܠ~3e חɏ @2{R]TJ2"@ŝv\Ԫ)*Cwɫ*QU'?HƢH2O/)8+ "A\;g(R\`ZLV2Y.A`> z|ׁiLHay!pa:cA  2KIA|hJDdht_&~!/D4إ`͓'ٮS$ Jp3Y&_.eT"p's NdOpS:sы䭙{WmR$!Ml %jHX%3LL]=Ddu${oLkVd\_ KcOG4@&6fi6;V$ôCZdei[=ڀ$WV]h LMnpy:9!fitΰ1:]tLd"F 1΄wd-0쫼6Rr^8"PfFDp>C6e~tbCp9Ͳlwƭ‰ w4ml8f{F}mLKBx]2N5ID9l%kM'J^0P4"ohZo]xU?3k {E)LBZ \.&$r(N@("0I-c|,EڝkEShd,ƈĈ6| EIXqIwnzQ>싨p`?c:cIR#;'UE!^)L<@UiQ@qq].^34hcNTc)_aa"99V)`r&cLֻId21.`< KxFٽmCgjUJG+QPڪ˴,VhpzG eLHB*NvTi6]ކ=N!n #vB-/p?g࠻Y!Ơ! " > o^4e}|S96 -صxe!nI!1OCa )~wBp\a564 Ms<05͢iۤA~hFwIߋ9: $͜X{GQ+6o?78 xNV+;r9CBjԺv^8MyBOЅU6t׺m4vQ ~0]L\m_,"1:gk knpQTER"E8!OI(`6}a1b!#/Sh4WB!Ɓ6 "C IC&L,Hum;*SN+eս>4gJmoR덐9'E߹YQ$J*(N7keWς0[YtZCbO-k&V.-`=r꠪%WNUY6̤ab9cʣ0 U""Le`Ax[Z, \cP.F_Cό~k a L~xJ!n )o1bK ~C$v }kF_X~ݼvŕt]ZO![ =|`ޛkj g&n\ .56NnA;ZnGt'e{j@iZ?Zr|q577:$ /3dA,s{fiH؋@G1Tt`o ޟ=NA&@>K}G)aq @U Pa`2@A)]\gvH ?鿑endstream endobj 124 0 obj << /Filter /FlateDecode /Length 2115 >> stream xڭX[oF~ׯ[)l4`@{M*R-ITx>osRK^`Ĝ˙sF?.&vT/۩WS:7j6Ez4M*QZπɪo& mqj#S-38E˙uI#酒֠F I]bHpH!l +n_!cu;s,u$:$Tx/}' 8K~h^/l{=#d2RΥ$`F`DɲvVAG=d!c'5x! : VzhhGlc/ǤT(p76@d\Ԝ)laH`.A %jl|`WنGx1Y*HF8&ⵗ-;6' a/k`\#8B Na7pExka)hNgK:y٨p`SmqwӈN k+Bi-~ڎ"w( ܺ` \w<a|( 5>jK|4]*w|=ަ߅8KaΝ5T0|=:s|$2Ԩ< N2|m9t2ny؋Znz=*#mb1ҋЋ\!:N&8, UjzJ @lj^)gA1^x:6HI7x,:u剈B `s>-θz(uCAddYH\-$yr*Y 0q[oo-,5 p7Ȋuq]hyKَ8E w9 $h7Pi]׼qtޗ:\6_ވ7aHXL4@*Fs1,hwȶu(,!pr%UqGU:\XXQ .t RգUuz괗Sqȴ(VxK{EZԟ8a /\BFǏwן£Vc|GriB0=,HSFr}i 0칸52,_#w/l[,k\F5.S>/\Љ3SȽ:9F8 8&?@#H$ myoB6Vp 8)OԦX p Ci8iei;r-P$=RFWY~ZGjISm pYz!hܩ  8j0EtWC`'O٥KI4.ݤ;q/mJDiU82Vay$ʢ {9oh!:(15σ5lIzO-H¶.I<}3 &iۉL< PXL'zfs'? 6i3бy? d)G/ K!;vH} O ^y;d 8n-MɳBv)銦mv#Yzw Oy 0Qx@+e $I=%A}fV"DPx,(|)- 4vagEF@"#^tY3|@b[5p\7OԸP0 YK>tw› ]VOdbH$px!HǓiwE|endstream endobj 125 0 obj << /Filter /FlateDecode /Length1 751 /Length2 1203 /Length3 532 /Length 1759 >> stream xRiXSWQ#uV Y IHV) ܘB!7Ūq4REeZƊ:0:R8 9Os{{*`:X]G"7H"[ qP}A!: CD@r$ Fdb8.vs$`!1刀/#[. 2` hD q2#H$(`yΏ(e$c+'af`yH <(`wA,@cٿ0ABb h!5`®\(NĂ/F #H됈ۼ@&ÏpVd c0DHˆq".ƒE8P]G,p\` v,ARI1bGIEĸǤgD1dudXGƈ$ hTb%X$w{eI:L{muiek ޜ_6]2,LYʮ֋ļc=##WM|e'F .z\R^pe/=V䚺 WZK%jUĒJv_a}mYlKǑ+3zFtrጠ~Yy2=6s \~nxk9LdW3<ǡD''x%ecՁo?ؕ#_%~;?mni[$_Qr1V)'VMT(^o6綉jҺmTgQ* oj-i1VoWzS{LQj^+Uk{;iZ\waM/]㹧n)V\>I9YOݪZL-mwifϗ-#Vc35&t31>}Z˭rڡCA~?82aQ3/<}eQg6j+5"\WyVk6ff6S՗d5Vc߮e[7 ӟD_.6jUct\> stream xڵYKϯhI$%R6a] i$l-#^=/S/ʒ[i,,YUWdwƨ9{xK]3${;E;}ǿNӠm}obyr8Q>62Xm7MoXk qddЁT{.hq0ߘ3~[O(;V0?#+VifǪ?m{m6湻ۘD%c3ggZ#ge ^)j@kVG$FۛgRtaA;WU~Xi;!e ZI52_ wʽ,؜܌ctdYI|)s=pS>>e"Iʳ  xBZ`Hre$ x |Q$Bky=Mo>&ӄteX$UԳyD߬;l»i*,8ASu>8@tSIu ZmZ >.4Er4J8lx w(&) cruяXy)vꎋ~/Ac^ 5, ('.\/6xܞer7\$G3}Q<'tHP f ;֡mX]E<~p2~6iOU:x¡#=o5Tծl*mz;klҥ: C"g0k%jPrgeh ]Ţ7n-6T&Ȣe:OUgmUf|hgY",:ġ)[TKك=A63xr͌]0 BH 5yq}9J6KNH($36-KYE1`tM `sdv)pqP^Ps ;B]aej㠉%`([],*5L!*<@=BV"öt~A~Z\ = q\iQT3d># EB.%H}ճǃގ>T4w)^\3icn)qh/TEJ- бbJ m͓^Ɔei"]֓3o V@;VZI GzN@I/|zې9yAeYX yi;^XcC -=`aCdf.~lp(̓q/l9M*P5pAG  iVW *4\CI4Z aVIf9erVyoٍ&V޽7q'Sq3fR1y(f-h5HM s*1 ?]W,pX 깅àڷܯB7dVzx /c'fKx1t-v > #e x}$ז|VHItW7RZd??fSnQp Oˆs78 iWw-(&(C1^);8q.xav+%m0M "3z//-J@5wLqTN=?Eph .U) V]ɏh S>l@hz &ST9^ωptJ1y#%t7NWtK/f8 bzqtt;`HCϞդʹwOog1YBv lܗ+L Lȁ-5 = |Bk_yl|3To^q=ood•*ePzs7Ȫ; IB 81XIkc_r/MDPeʦ־xsK>= x~XsH@GymM75[Aq-?Wk%~%AM9 39U.v> stream xYKܸW |R#3Z(ip8rsH{V;䒋D(UO{g*x :$n^_{֡͝6q Z^4h). ϮgT0V%@5U1HȂ=WV-U #ڲc+ <72cDe}xWfͅkƳ Lvw iay(nrr 2 06S&4&[[y3WnhVCY2ٗUiJJ1-k\Cʽ+0i 4yFwEV&&<$تXkb*f3tx#-*&+7Lc = _xԸ|mP79伨ΟajW7jydKE0R CG=lT@mz)WiSCƆ[hNq4(6^ѯ,:4|W_]M6yC4Rlp9"(QEw$h\tN>4[,-@&Tk'[{8Aw{9D-r"ɒ.75BD[EbX4mG4 u*yHX{d ٓ|~ 4f`^fW'Z/6ka ᫩R(؄C:Jps%z6;n8ǜOsTg#o4J7 6aLԂ]O: Dž_Q$ #^Q),tSL_TlykqBg#8 5DYBcȒe2%* ;ƚ}uZDNa59Tlhx/+z(J~59xnX aӳIL5/="q+e(/5|(^bN>b*H5R:謏DBgWs>: q0"G[ )Vaџx' +Ty=jU~AI{V|qT0VQdVNnĩlvLY^"=?'vТC.+l@q2b1p GzA!Ft` ǺIbBz"@ .EB؛]^>xv7{pX3Bx-k e9HAӖv9a,ap{Q9~B {Dgp_a3B`vaX&6l@;!DF 2-۳~9  n:bbȷ*9mc: ځS_P{x"3qNcw+PZ_|Q8\ Zhu8QcDGw!cDA!/u>ʝvY"4tnCYFq8$p`/pL91_$c%;71[KȚa_q%EB=2!R]Y]nQZs >s՜fJ@Dtv-x3ABzkv<8q=]mvKR!Clj?1;R\DH(ZW z*]u͸8DF8002X\ATJEA ZBA.,ݞPt_X]HS@RZ_ɕw4牿.W8MsY'XzG٪kn-#,%f (tkCə||r5j-hI, Ƅ!aWCEv7[8WkB+!-% ؈8!Sy^qcXZsmY:[%Qn~%CGz4xT=Q̈́>1njb$ܻ%VNJ䠐4$۹_˨~*!NG?QQy 96RDz-ӻCy[mHtTE3y1h0PYpc-JN+<[ 0Vl,tfub0:؁kC L5F2ҿ{R6sYF[Hρ3㳝aS+xZjXj2/> stream xYɒ+&xB!v8d;DRЎXst@50t` }eVa4jeݏ*Q͢ȿIK]/ ӛrp ʐ7?U٬ZZM>?qfE4FKTҹ1v9i+GC5χqUa$?vNK4Zih?VX׏k%cEJ#P HO4&C$p[Fw?Zt7JBx&* ؁@D=%۷/GnGKFG\?p ͨwsIj^1 ƥD?#"{jL?hx!/y|%~fŇ๢႙v3рjc*3b7Md-"~d.:pg,^ʥcjYڠ=y}cnzy _$rr["c}Wű'Y9?AyblHFꩰ-22ZC~K{,_zc!+yKp &03t)T-%zIYȚ:~W$X9ݢ2~q&*5`^i\KK7]-96&V2ImUVs9N;^}7Afh9p2:tE9;İ`R31.(2kjL"gG\I!ڽf*gA&soo׏HfO(U9^-,Z5kx9Y[@5ՀiFa(59,+(x&Ο)+-;9F"!Z_Y4(0+u$ Ƴhձ3cѱu7]ŬǾ1DRVcG)mڬf#XZ6і秧l<||6<5ƅrg-cadi- zYPBu%(0Oh+J4,CИk >`rU)eaēJG&Eh拮iV\~kxѠ}#cĂ~oҳ`‡PnZVibwB|@w]Wbr.>bj-f3>Een2S`A #fbSS8M$0_џى5 -E/pkz=3Ryퟥ.ڣWڔ a|rQ/KL M-4h:l-gf\ aત4BͳTATSgľ2y .}̰ RS[2W(p;d9`uP )lH%$G&) rпBٔ_l~-tV2RYBI_%B7 ,_*KgW@-Fd.EYmR[VDQꦉwUY BgR+{>0mdS# Rmb0q{5/45q5[SbQAC3Vb > stream xZmoF~b>8E>9&E?m%Z~=CREI A<3;3ԂI-(I+QjR:4dbҒx'4ʘj|8F$`YQJzT ŏ<8|?h<8j n S )[ZKJḬBL ,c e;A1NTbLOc i!)KZJq*f).,+ұf 4頸 [2LE{2H1W9cACBaKhH`x*!HhZVE:4ؓ=w@Nڂ YsM,XZ` g9NFUHųbJ@ `Sx*zYǬ+(χS, vAĚ*Ҳ9P쪊#UQ@2FafOf72A34SJPQRpg96y0 *ʁYUЙ (zio<*)9>F7WIYPcrRԓ]Lʿp_Y9_xHˬPQ<j 8#$yv<AzMQ^1Op,NF7I>&LߌGoTүSg5RiRfi_~}SأM3`ӫx0lx~#Ic HpYf~ue>hyސ863]72Y|Yz,/JF,Msj#{4HE`8(o*Y+~|li>Ed W\>yi2r׳Owg@[U[]"][~P{_V{ nیsrj'"גkv-ҚjMme1h\i~Vmg_ .qٿn|0 q['=6v;;B#pcq]e}Mr䛲M5jwč 5}Zϔzw]tt20]qv _ 躦ڄ/'*DKnW9{ǮYv5??{T 2'g۽U΍wY17ZW筭oC!#(|GhU7kARDwV/=kџ=2⵬`A Ĵc OhE29AA | Xws@m6TN&myXB*bUkvMd* SgEt'.bG,mendstream endobj 230 0 obj << /Filter /FlateDecode /Length 2729 >> stream xڭYIݸW4|q2A.3F9%ub-/Zק6jyV;#"Y,x?эJB{IMadmzsW30ItVJdTvx:s4yWTYX#欳0IT9%*a|;e{N5 ӄ7PRaܲUg)UA:kGI`fU(=rgXֶ%r~ H4 y&Bt(VC]8HMa%u52%C,Y#l/ 'YBqߔ*BeTw~y:㚛U ֱִG ѱ o03tܛWfoxlIwy:4hQw칪kEވz>{Iaή΃>psɨF3-q4TTr'7\|*ucw)~\QԸC@xI ;t.oH541rZ*i1>8Ɂ43 nfؤ!tGCrݕSuh[87ڛo-2#̄N0m~F]OxI73 _48_"e ˺xRОeex$g5$Rv=&+ƚÙzAUZktZL2_%J$r ͪǩ.F&}[]߼2URh]|'m7+.-*5J(mvi*\#Y J߳#x=m` `7h  / V  GjwHjGgrCC!͹lHHl9ne^LLA >p9=]#K2FQ~2AK==]ݍ:#ʎ$0ǙzyǺ$@{85|Sq H3G^'z;xJSvcP&ABcx\)82p6 BojXOkɌ$~ܣ$$Bd!-('Gi4Sy=k}1AbPЎ0 K n$928R?rgeTveaf.EԖ;C&tY^ 2&={ |(PVz["Fri Uo(@ܕ ^C9T`F9U<e;C C3! - :>-j;x:X-jdn9oE/rTg֠s$4x +(-}A6 Aߪ5k'eYAn82&ΔEV/QS{l ފO<$:AsBC(E.e=KWp`,* +Mf,U+Sz`/̔cbR*~ y 5]pt(*r-AO`($LǡN|FWMQl!|5BXFr(864HYȅm%#sLht:?l D͡37WfId',T^Kʟ6raUGV1 #w&Θww2pK qhʮ,^|e󚷗Fv(*H`I6y[\-JAcB^l}lP|Dw/xG)0RӅ&]`Fȯ4tBK6 0 c3* -I$8 sjwRҀ$EH_4|G)GbI% |?cF&DF# -fe_!+ANpMߡ=R03aO*&^ά>7\_ wk3(%/ %W̒x"a}euF!RFhLUv}KdzU-_ %s%'f ɿ2c}?W.LXJ#;j0W~ ,^Rɳ[Mh+wXЗff3~!yV%͏~2G̗|`!3Pz}G vDq#1g\>3|:3e_8rG&[ymyԲÐӳp4*Wƴl~i.o8-zn均hN J>hnRτÂ/`? sW؊ͰAł40Xij?V|>A>:R~xN4~H3ԱŒIW4È1o+\(&&W7d$@,_LB ê63 ]*1)$=Ƅiz`ݟ7Oendstream endobj 231 0 obj << /Filter /FlateDecode /Length 2976 >> stream xڝYKW |rA`1|s-E*$_pcć'{'?I><LC~s/o܅nܳ.׺> F ￷݅7 -;Xwdd"N'W81{גt4iG.Kku^uS>ρlo[buX=3v>uY+Eapixc7Oq7Q<! iэ2Y+p?ƪ?WU=2~[ˉ&zw`3%t|>o]%Mj%anc=8p4&XweHc [ޝ; 6bA:e0=1FhF/L5/.G'WrWIn0G1k*|Vd+M+bw>deң6љ,`B q t+&#pwK~߆M:% ٲ •fEhX9QBʖQmB*S!l=flK4.V`Tkm5HSZ挽t>r Fxۊ$R3 TЈt) jb~_Ч#7T#}eNq5KaJn&M}6Ec`eTή 7)aG_XQq0Ti;u{hnb /ϲ<[(XKn9Lwk?zKc{ 5Ho+dJܷ{w:e"/6@BI_RwOVҘZ8sz"MQңκo=,%D(;F Ik'C W-[iӰT ; r1mo8]xfB,~āA}g% fHu/zM*./zBⲠ$ qѼr-;.'1A֎g $v$,Jn+w$ ƖBTjgbyF?$No2- DB~ gΣ7qW (XcGEN,)$ľބm!7i*'DMGKBf\R6G?sf8rmNoFEH̘ҝ/1c6bFfѻqBJ؝E" @4"EQ䧙I./v,Ss¯m-,~>v8Hu0uC8J!J+4?Nwsx=h)E6.U tnia΃EݗN72;Ĭ3*1Zw5|`eFq'nbLHx ,^mA2Q2[sQzwOapAgy,:Z7*L%Qj͔ .?mbC9k0SN9dJ#m7`QBjWt&p^PvX(m?J2Lj sp%f0q/w1?%(tj"t*ȋ1/Q1kKQA)Q$w~BGv# j ,8m~Y15lOVsUo] pp -W;`\; En\kF;q2TK`wZKbjFqإ,+'<.u9 3 #Řv%dӛ9x0$ZN<$EWwyіk4%Q,Or.W/hR_+Z+O뒈VHFQC,JB* ɘY2(P^ o$,㫗qTq[m03I|-k6p 7s[YNRS;+3юVӄ- ^#q.Gi)ԞXfFk_M#L^oT! -WY8º}P"cv^ܨ) w-IZxMYWnޢ;Ib+,>*ܪ39QA f|Pd `u6c!JQ{[baQ x ƹ(&7Mω%]eԒ uN/;. "A򸊥(?k˅k +idw=VzEO>"ds[1!n'KкO_𵗊AVd1[ړ0QUǬCPC3 C#|Bq)lQ:Kd6. C[6I21ZYj(cK *b*?(9cFIs?O)xtVEj6@NIjYB31&@bendstream endobj 232 0 obj << /BBox [ 0.00000000 0.00000000 432.00000000 288.00000000 ] /FormType 1 /Matrix [ 1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000 ] /PTEX.FileName (./figs/jitterplotnn.pdf) /PTEX.InfoDict 65 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /GS1 66 0 R /GS2 67 0 R /GS257 68 0 R /GS258 69 0 R >> /Font << /F1 130 0 R /F2 131 0 R /F3 132 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 35546 /Filter /FlateDecode >> stream xlK.Ks%4~€yL[%$$-1@L8[ni۴mTZ+"^g'2ȌK_owJʿ?77/V]Ư2<~_oo_鶰r5~l~{N?F~=__w??_i~˿l+}"ußerK3.us5h Yky;k16 /ۿ?9݂=3 rxN+f;Ϙ7 􍱅_Ƴ#p]ՠ}S~;A_i~#h Y>P.7_ֳga] oxL^ ZBַZY^56HbcOH{gi{z߫MKĻiSƛ{ rRtr{۠VmlioYv6^g5 scYv R,#N" ҳxEڛz9{|Usv^Ex_)hv^xEڛzyV_YU=}Vs]>Ex_ٳGgX/ \!ֳLi,lY]:cd}iYk{mj"{) /y4 ކ-Ͼ Z8?vht.M|vקe`\+EH{^Pk6_.'{ -ZBg-)ho/<"w6l}ka}nq䬱=5 .}Ϭi5_]j) }dcBm|1Au0}vgA8Q}>_LqZxo^ 䋴7\/0GȖI-Y3VI)&%d}kT;h9gs^|w|}Z/ֲ^RlnsT\/Zd5Ļ\5[V|y*赏OH{.fR+̀tw7ܲw;$K+.ri `}FxSgYQU– W V`!n8 ywnDˑ Ӟ6o@몳K7=c1}q|$3|$WFKN=Քc]}/о!'i奜_rr!'} %'Oi\=|ֳT;zF߅-7(eAzwu~-i t`,&F\ak>F G.>+rWC+,>Oàx#IKc-ikgē/|Gn?G/?rG/?r:6.;5cOˏ|DW/>,$3vS,IG`hPC?zYiИfɹJֳTITћ\ka:H%s-нD-]"LjKj^"“r/15QPyǼ#Bnu7]1o7:7{~`ςJ%p4d3)VY.MJ K7?T* >E:@1iKqX2~]eʒ@#edPB GʾŤ#evfx:p4w!G-~ KlK^@DzXbݯ}LJ%v%Lj;H}\.ϗ-?.sv3bHru@GJ7iJeq2ݪ$5b/*V]\^=R%cQdֺ˺] Zz]neM/F릗]sΟP!^aV[A4Nk7'ŵ~ ﰑ-#lלR/WX+lIӿ\a )0ݻ+l|FwWXO?#Ӣ_\.CE}T,Fк3iwt( ?h:<<43;#m0&1@/+,a[?a#ۮ+x[6i"ǜi",חK?Dw'~4q+Md#@Fg{?5̮li02d5̐c|)%з+}G˹B6嶫}>`wîNZAЦAR0i#ho>Ff-1tc ^3GXư MﲋnWEڛnq7Yz_/7_}7z+w}';R N9Ɩ&G{vzi֔m^6 pR: XC9˃6)geFDؔBM:eS }pٔdǦ4#)L7l?JrP:ԉysG;RHzdMKd\{lJU4<{Vulri"ܓwZWZI.\UBמ\/kEӪ'm\bzKZg5inLۭfiWho/~c(,Kz |:;GGR+D:ٯ6ZQo u;TMё7 Y;WԈ0 㝊=#,ƻ08sꏳ29 cW+}Hs4n=o\3u4Js IuҀX~ Mړ+ꊾ=yfy8X~D+{O>LJw)_FC@GSO*J0l9wcho|+GQT~V~b{"ʊg۳twl|=۳^=g٧w1Gs,X1=JX9k+?XX/2^7~k'm/q ˕Jڛzz$D߾}>z{ѠG2J#&a[?v+m_ov+mwTDovG+w|8+gY^geYr r(rcSJ(/U>t'Xë5J(eJJ|ɦtPz#_S2o.-/nA+͐juA/;xK*Ĥ.i d]BGQc=3r~joG۳^=Glz~1Ь,9jRPګYc쑕4ei yy 6F.xEڛo~T U 'eΓ".tr%hʐʞ*vn{n&|[X >scȽ'~goʿb,&J-(|hwZē/|b-۴S_xgŤ?!gIzqLEeg~*Ύc _Uho,]~`Ő90J/Mce-i e!QK8[J=Q1|Wˌw.)yK gDYYsȹ"d*)yKעM4lJ>6m7.'v*e`݈.$rG5kbQ]%EEՆ(_sl)h_|YVt9`|NaႄlQT4L''ˣ2<<=:]8ơ}r˛gV2 OrJ *h:+biYG>d}Rv>ƖfZöE'ޅ!Hbq)[$%ER%Z+}GQ/WWӾd3۬SK5<¢y)kRDKxYd܋RNc'_oUu7 ){6]b|kYVpsw6NV/9!%BJ78j19iqn6 .4߅)tGx o cuwaݱ/JFU.%- go@.]Ɩ?|Y-c/G Jd|z^:{;%c[:(at2+ 1? b^jQS[ LcV X+My+:MG$-N>X|ǞF=9ߣCMwҞjEK(Z ]oҽo@D{0˓- i;<*졫ck{[nH`J9;ho^sZk{9I^Su iyoHE ޷Z_}:l o_>Æ~o;]ٻ[QȄ$-l oNMVjlioXTx j<̦\~`w!-!@[f sdV҆/[5nYG1iK.=K+W~/6|hUOY_[#n1껻_c/@r6̖iWr:z$?E/vE:״9mR /rv_y?|s碘U[Q3+XqPyr`Oiuz~՜AkQ޷G!ē/||^jiTI^٘jy #*nh񼫪K,Ẉe9\86 /]U*nho* »k,0NKړR{2=Yci6ڛoY|^a=T:YƕQxwͭA偽`wdvZ)VNVN7ߒǶkؒ5Y 43ګEEjZBI;ZΊN;ʺIˌRU8_}]y/s.*1jsS#37ߑv>ET12MfW#56U|k4 q$H> )#FtMDδtA:^w&@Ƶ|KWzZؔa oRt*+WP dd 6Ē9vV/ړ|Uy ϚR([ҵv4χΥe'팾"]j|+vn@) Ko. bW-tQ UD ɾ"ZkuYIȔTb!ε 2kȄ32! uqn],;o& £&m&|s,yU'yYԂ⋩+@|Z˒JG{UjOՓOhSͽ,xK1ڛo|kdYtz J3KS9#D+%9 ڌd>6-|v|"k6䋴7رoglV"h:w$nll~|:wN{ Ļ`o95}G9ԲLK~z0`X~3al'焝ؑM5@ 䋴7J,-Cq+mO<%דʜZRjlh_||I[g%[,BPs՜q; ixGr$YQ9|[xEڛϮtѸZl邝\)!4@PP6{˄1=g&ߜR9䋴7Z/M&6f"D]gو!Hs:R\fXzh->6MUx[n_t-CGpȷC\bN2s9Q =j\UeKk]UJ;˦w&+aV6CV) (ZBQ@-v6;k56䋴7,VĹY ˔m6Yz ic܉-Jr]cOH{d H5H4A:Gu&"ق-SR€2O; c ?d}SՒmH +VM1NrsΓP\l#={Q1K7QgÂ2 zJ,L{PPr3~zi 95Ū`9m;;'_w)Z]bnM;i{S]K]G@qEZ&mPq-<"w&&Se@JH8~.£lh E-%H &|[kjWWX4EMq9BT H<$["N[m rs -[/оV988j9~lr#gMǗ3QwзzT8G i3"@7΁;/@<%(V#VK #{Y6X]2l h!􍿮ҠpZH :v/=cช zAѡZ=Sf"9ߗ\%"jY){MjL`MfGz2qH\+NZsJЈw~Q};cOH{b{7t 15xg"ug"i}CW C1L7ɮ'ֳ$-kGmkֻKX!H2"X}G>)PdZ0­nY۾Iг{&H{ cyi^AK((jwC_Hcw5wDUrw[O-\s{HULIV@ڹvkג[O--wqilioUYZOͨXk &]eJ<4_8 `X2{t{ZVe!#:vhwVKL-h;M*/.;[u ;ӅxW 4ܹǤ^TۢK48-@Xrct/^ SS c*RL,HQ^/8SQt0g2f}1;b.tʡhP[nAIG,yuA8{!~ɏiKhE8sjV+ˠ77 wO1Һ*e*ںeSk rcUsΊ+H!*b*|l"/KsRT.\V'(ץ w5Y/շoKAkr]N ./|L7Bǘ\h%-녴ISw)SO/G }yqx7f;bj[x–eΒ"(_+!偪N,=qb"&+Nѽj<E& Yr÷1zur'gE>7vԥ)hT j.Z$$ho%DZEj $Df[TWk*) [DUCyj E“S|z<cwO:7m~4w;ܦ[7Wqn JϢ+dFb-7ZQN?Z!%Z.wgē/|_EG |vO(Kʆ}NQr ;ΗS>ǹs{/t_Ki(HZA#b\R ڦn|kKNgN1kݡ=<$D--B>whlho@¾7tQ}R1&,.g7$u)r\nS^aDV kO5ڛV(fe8XpXCYT yB* v}w H{Eڛo=˒ Xd5^Wpb܂?\M xmo5-%9m; y[ӇY0g WF :57:;9-!MfpS߀,LH=8;jSuѣZ]ָXg齷,H*/=h KhֆӾ}VD1L$ş m+ڈpLRsb2Cz#_dƾe 2[mQB2\d^MOh p$NQ%10-PPM= [>0+P < glhA 3MWbB<"wX'yR ~.sd-Kк`u )Bߗ.Ʊo"R-o.:vYcɂuۿՓkx] 2꥔ z*5s1 siD;ކϭ%\UKE iZJ94:/|_^3yہ,Ƶhwt9_ h- -i956 /E:B^vZ/u?JЌՃRs8k߼%{lVБ]]FR3cF2VjWYS H{}yyis~W-aZ/̓^6sVق^ޯՃ].o1[< gBF׻"xnEf~ac{oSsoqe_|_"$.LZHh^v>2ЈTYa2|;d%Mߓ^3eyGg*Hoz4ij)DztOA[LW}xO=ؓkO>jS^{}O.=ؓkO.=ؓkOgOґ|_H#Ek*sI;H=XTeѣ;8&w^?|>_k?ZOWWkxG@01{;﵏$G"V}GJ:c { J+=ߙk!ǡiU^JUZ)RMfLRɯ5/о}刮x&㙘%9V$gDW^R@cq2$x{߀yVio?kLµf7X}'ުŶ3]BzK)2u,Oû"ϗ 6)F*Ҋ$"u #$o/L#7^\-Юc@y4 VdIiA9qAixr-<9%ͷe;vamqCAiON+SUX1eP)gmeS SPsr𴟑vX0 6-X1Ǧ{5Lj_HdYW;[λ\U{{~u/Ug!5?+%-]UՂT6d*;UՂ* 5[< ?eXZ70Ui)ew[$k iq-!sl9֯eB e3]\xb4 ڭLϒ#:A ,nuē/|tˡy,Q`iSK%~GQ ETCm}bYJ αOhou^ -]1Ԙ-5y-xYVy E>x==@̬_udRx (2kϮ#d"<֡w̱Ɂ1$2̔вHPYkj-oAXhcOH{]XM R._kdj43t @/xXX57W:o Er+w"_-LJQoaGUZ H{% ݱǘvEvEPZRn|v Mp@}LB?> kX*yA +΀)}_x>mG.!7]?|lЫW?IvPڌ{7u#cr|K\/6}ٯmOfžVHf~}-{2Y/'E{r9F[)V`u޷w*0䂶GjoѹO#m·?w˒DGo6bOfŰ^Zܧ OH{ ^:Xy^*޹ig*] qfV~Kee uRׇox,Zh󎵿õO?k }||]sj9<^ʶd,ڛ<)xq;L%R)x1-^8}䱊]v+&_^DJ;hok[ma6^m7Znx˷me_V|9_;wE xIy/ReYΗT };>k8@kV=$2Bi_ޒ, p{|lXI{ /,cǻ#. {65בz]G_ظ~贏=2cNykt}\]o`1UW+;>+ nJRs'_}}H!M!o#C},-Hn#EFycKC~)i Z~ M۟ݷ~86?w˖EVH/d+hiYbq종]H}_(-{ׇ=٬/{rFi_!P^LZBmO>vڌ_wa8^?cy:ckYonج}l>6#sYn }о3aY؞~E:]v=F44(p)i6Bڛp-'wX".[X 6bX;E} >b&W>vG; C|YRa3,<,<":cA{YY ͦW/_1+3Jn/ԞKkC;twh8nj/?:㗠/%Q cK=Γ AU#MQ#%Y^΀bSKV9o6ꈾ]o++k~߱n}7=&$h~e4˥zj/߼"D;{YS @G,\(2&cʵ\ WEz,\(viܼ^+ckY=y39eX/ނDzEY&*3^m)|hBx]+ڴu _}g` ~>bvs91)遆loy%{v]]}lio,˲'lLˢ&Iը@\zߖO x[ hۋVpM/GFsI~$l 4,fz08H~zx%/1e0y0?rl%hGn7ΞknGO5֡& ~{a3Ƣ؟p,h.X\oNSYˮ\doɼhZ¹ ~6.={cg<7n%lfue5K^Yqe_tANҘ]Ֆc@s=/e?OѷNpr{9;~UZOlyG>WeX%>Mk/TdOA,H6peWk:~>|V${V$$敓L ުg43Y3}0WMu~?;ˮ3a~s 8frUa}4,Y5  xք5v,*LcPL}K֘Ă]Rr 2$af) @S4 tφxB+-gLa.^)5ѲE'vYU&&%ۯ#l6ren/X\a O6v/;>#Uy㤱+6vv#~."eMJx 7uX¸k {c_ xVv?[.~'~]oWϳ cWi=4"'V M6┹V æ;-cWClnZ8:@$5fxm(j@3ۚSꙋ= S°x%o3ИĂ]JqYpj9%UIɒnTU hFw&GRcɹ!+ vn7xZv){~/*-Rd"5L XfX pTRompX-^cOۉ ; 8az={dձ 0:kKǮ:x+<[H9ͫ؇2OYSVSnT/fUp@3|}0S6`o,ǏwȢlg)JӍQvrotړ&"DɽOzn4  bDqa:~!_8~wRm؅ϯXF RUle*pl;/]ݒCYA`fS>tMc_ep3txU=Ҭ;N: y>lkbP݌~=1qZ_qRL'l܉ y]{Y8A3i8M]Ԥ!9pCs'3 .6Z D`XwD7 1tPv,'F|$܀3SP:ZnDsqLwރED6XPOFI`]rg:H2vQ-?pYm3Y/pHΈ.hΙ]aePOY<ărZώ|g&a$ F -nkgO1t7'N9>L|Ԡi YS4圱X%F&5V^mQ!#$kqw@ЖTdEc%[_X\3jh ,;O"l&g@U j9f}eݼ*t1#1 $rh"Ivڎ 49t$2i{2M@7L1{^c nHwF Y]x|Q:U&C^4s KBӹ0q4{fܟbö렺.>WNvnjcI'EXHJnZ:{@La .^%FD\ ˿quE439y^OпI3B+>qgLAnT66>KX-?31O$}K qNyE88A*4 >aJI4 '`DkQf-A؍iwMF?s|Kx'5\TU{ă؄l9Yy`)cXR 9;k]:p b1txܽ+`1V67 {ﻱYcJ:~%.Xp @:,7SWΒF劫y#Yk *]t ->1{xHocr\.VKv DA{]S鍤:jQj(g"io 3`bT7!6}@Qp\e_>?+yj)@K6gҙ"^d$ܐBx•e%E]R[BsΊ3za4ٟTvGzamvb +sm2D9eacnk#luIc ϓE8pM.9F$ofQ53ȟ#c*- $ jc eC2T3]ExşN{X!E[2]TiKkE-購`&I?Ż*0 kn[[s3D3 ,UFfz2#N`To >z#ud>sZZ@' 瘖7HS _ d2-oxБWA[uI<ЗvUs^$KFB+0Q6=)mwmlFs s%u{9sI&s{%;u7MlMu9{|n;ҫ:kԚT̉y0v5m.NOT.Dl$M[hFF 5)[ϫ~eXI[Sj| +8Ey:5{Nۅ\֦^$ӵbGݎK[!=q {^ւkD-~LwLfH01Jh=2,:θ%M]o/јK2:}왖`Ўl$2ρ[V_/o iZ:i<]_Snw 6a_vN[-B{M{r=-8L-D:U#K2 >s])~_S%#c'8촔v7a)  53gbѡBcksZ*sjVsNKOGVJp)\5tU-NuRz KEΈG#yNV9k1#ns|hD{s:R<[sѤ 11j3$5`<(FZq5|H ֻ QoK=' f;ls*~hک_x?7E,L2QHGחj @gB,ӡ 95B( 6 [w!j uh :Q$S4?!tNTW#/+rC$* .ƕ@|&SrԴs"5I wێ8&6|=<~)l_wDGX)42'|%б^z GycfV5kY_d(@Ǐ s(1dĴ`r`$ R#GI#~U.d&KB/"o5ɞSRi7\Y7zj'Fucbx[ L4\荥1riiiXcV oЙHuDlΑVNeCDniT^'n}'Co(11ք(&Edm9z 9R$LrWF 'GAnKӯ+NCZؼAw(Yu˵-25 \/akK,!X!.UxaO@VU!X9[HF:vրVrTH+[ %q}@PsK=2=PщJ9Hb$ 9Ý=]evP {~Ek _OҎ?:=345gljA:}Ț"@MNur0_;.74;$A\hj҄Az'0S:fKg% {h\t$荩1u9-y2#K;/Rk u7:N42dތbd520q}|x:zXO4߆VHXq ;|/(;?6i& S#yς}F|Ѯ rE@鹱x.Dkwm9-܁|& f$ϭ}Uʼn[Z/[Fy}UqwQ,J̜He z/ьH핣C2Kh;rہNi `he6PLMԨ󭱩9bN[ŽUMqGa G-TVW<'ҋ;lD$Q2ӎ U?Y5p+Y|uxC'2[JԘb]ڇ}gB$1Hĸ"^Cgv0rk>0dsؗʶH ;?txh&Yذt]6h-o$-R[uC\Î2tFTK4H)[okdcd~#SQ3 9N0|jx㥓utľ)#yx@~\ϓz y?WK_U{m^t`>l=E=6ۧ_~f{3o.Qz˧-3b,q8>hԗ9-m2aU(wT oq[쥲lUD3ܲCNޚQso9^>O[3&_X f6q 3/G\HDvHGo$Ds!M9¥ 3CO_Yk)mbY[sYOF=:5"s}ښybf"͔rG B+ŘG#uSoTu5tF6UXn5B,q(7l/#z+&"MGO9Y8ɦS/忎{+W2+]7zn$ Q?zm <'w҅ qGMs7pVr$;.9:@le >{o hjQBs]ҧD~f6=QQ _=HVoIup$C ]_fyt~:oi7s֣Q3FGlZGM^vωtz0 VM>I$~3ITY~zgf=h:^li<Ši'Xz/6QhCeP I݀νldv;dgNK}ښ.?JI%d:+US(1ۢ_L}i^}u@);hcgX^l56zH(VM=% Z2'3ꧭ RxLu+$[.a'c:%xYkL"oq[$E]F\[yER_I!ȡ o%]v1Ų_dsmh$oXt|ΔH']7!]xDQHQ?m$ =Aﰕq\ӂ%&g \Ɨc58%X%9[;XsAv/jVVР> / 8K>gҔ,uZժыGDxa+{FGqD".~ݱQbh>Ι=%Yw>oFF릢z#mŇ(A1QCs"=^[?X;LPn+^!z z)Iz428[ޛ)zĄr;m}&zAJՂ5!rOοЫiC0>M<רjsс1j.ijH]b@FGGGcH;_Scf6:dyԷs"-C5Uoe^1zmt@zjԄQ^&'GF͜He z6_dϋ6ҧG8@?/v~hLQ`57^Aw,a<{wQ_"ATwj$Ie`}Yg-4sx,Fi :/Fղ5hfڙvfnĢ-x2 7ktmn:D}*'2x/B֌y_<ѡJMKq|, -KkwR㎹e^>X}F=v5RYakد]lAt:/ alMu) R]b.ds&Cz$?pHʟaX"骛B̙mtYM)AHoxL6t'?9P_YZ{ˣt5P>u̽kYT o"sIaS!̴z] Uu_X g:;]Gfr?U}GӿD:Vϻp.'j{?[ @{0\w)+aԒ(DYBﰕK%~XB[º2E_p^ode ՎltesIVIW,su=Yug.p޹PTUЋF?]){Q6洴Q$[ǽwݢǽ ]\qkfxW6zVK5w̉T֠w؊yH$Bi9f=85Yo$@s! 9{7믷c^~atUǚ,nq<,&xT54V'>FgR:bWQE`Ieo-% j̋B+H 9zp2bN[eYvkHrC;ʵ tm>Lzg9%|>m}t)W.肭lvSj;"OŰٖ Dz 0ٵ舍"ţ1'ҋ;4ꧭoB/ "_~6ݥT3LM7$Oǐ Mzxԣao[aSw8_qUIڽRnODoxB}`SQ{_ zO[5VƪPc#ꇷunŅ΂)DDZ+~kjA:}J&i]Zp7Qxa: ,5;:aWg.ɜ{ Y+J`$ݠ{p_1C`ELGUq" PJC!ٲ\ǩHvh;v8g #vu=HAD}DܲN0w>q%SsI"nþ8`_N;/P;A NWJjR?[F;pb~LزDK~vڇ@(.8Ɵͽۮ.W~}E:C,d1\jcSV,RyOzZԬʝkl7%(3DAs;ɛƦEY ->+dpm~!f+f e>-I9ȠDoF%h)C5pœeAK/&cfrrmEPV2 yO\sMLU07@ڇ=SP1W iɨrԉ׷e5c!RrN\iWm.ҾX1p|s??$5")b=6˨>ς-,sht'pyJ'ltUU[Nz~j'RT?@ -:J9kj#$ 7.-gJ[92fF7ߟQg3ìϧ/E).Lǣ &;ɦB6bH+ЫlsIoZգT[5;m1Y**S =dW?T!w.yg[&JfmkQ @\z?y8oYxwy >Y @I᷸/3 $;I~kZVK Ո)r;UAGfiBd2,N#PZ++o}MڅB64#.h̬ FoN4f ei7+dƤn4\iZgzpĖSe)?'A3ֶ; E.[ʡyF'4&)A3e|^zEXJqx{NyDVZ-`|L`R͉Hj1|7*moGu^6hkH|5 LCZa1tfPv)MVjuz;tDc*-f- Tð:xDWz@t5u ut:X\[pocZ.Ç-'n3Qz\ 7))HM|RBCÌP:C#p $X&yR/ZN2a%Aj)j]ޠVBG,~?gTKtujI)a_l%֤cN.J;mݟ8픜{ԋTɼ -+Wfkf{,iN[߯jfm*P5 ˵XFyBWp`9j&xUɐ+{[PPm}SЛ0ب఺hh"!%0=5RtDz](:1hi z)=LP ^}z"xN 7-ؙ@Gdͣ@}9 V}Q#?Iu)g=n [u\SH[lS gԙi_4Oz.x~0H ~G#B猞,ŜH't~j SZ'6"2Ь0 ~uxtt}D0?xs! i7_2Bӣ_VV [VYCjyU\~3QK̉b]OxZ7 "D@֫@a~8m~l~Fl> |Ե>meƙSΛp\ N\k`:Uy+ 'tǭʋ"&֜H'$$O!@ȥL!MQulpkAg<H5 {>_ʏoq8s_~\?~R ĿDG#I?ݟժ"+-U{])yȟ K(&'Wo 4yF?_9nSW?~߿ǿY_|叟PƩw&W7):UUlM׮C&ŪRM ک8C_c?mSB^8/?;*Ǖm~?_~}džuLh1_sFbcAwo_l/{bobG5kV17K?O| endstream endobj 233 0 obj << /BBox [ 0.00000000 0.00000000 288.00000000 288.00000000 ] /FormType 1 /Matrix [ 1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000 ] /PTEX.FileName (./figs/qqplotnn1.pdf) /PTEX.InfoDict 134 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /GS1 138 0 R /GS2 139 0 R /GS257 140 0 R /GS258 141 0 R >> /Font << /F1 135 0 R /F2 136 0 R /F3 137 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 27415 /Filter /FlateDecode >> stream xI-Waje@z /l/ nAGn~~'c.0ra=AƗ$oy3}w_>~oOϏNɏA}G,e ˷_|<>~)7c1ocB =G=u(7yooŬvV@}͏L`5Wo#->@۷߾yonQ).{2>~/Lr_{m H1ϊ}e/ƫ?|b- C~3~<(~<+z[|o`~x̾"i{9sa\p?G{pH"AaI3jFSK5Oo7Mp7Mp7Mp7Mp7Mp7Mp7Mp7Mp7Mp|?h$0AɆ ƍ`K%m'&U&q#(fF; N0-A{z`8q K,PLK0LKP-A #(LKvj %;xPtKvb j 9,Am'K5W N`A q n T71the-C Hn 7WE% 2jZZu 01oE&1CC{R=i؞Tΐe23hR5 uKlR>Rۡh;LЏvȮkytm;t2lCC?ڡ!ytI! bto;mjۡP0 CN2Jc莡 2T;?DA Xay؞uÐ_C !6_j/͝!YԺah`ec0< 1D"g Bt.M*6)d;ŴhgpB{(b>SO;SO3S{w* >WG3WP% 3[O;[sN,p":xPibVGwa)H')j..SD3AAU㠢 lKѬ6f "ڶh-r?(hRS(ۢٶ-qohۢ(i-kvEsm][vѶE<"mm[ hpm1-uoa"۶g[l4qp#""xDPEPDPR`HVqP3(G-#ϝgރ%pPp7sD;b8>M ,Gs&QwZ,G ##Qݤ1agf׆-^4{~X!->Xݑd;D8=% :O֌bVv)$4F)I̝LK2%IGT}l vVi>p:FVRRhӲc7xn.1,ѭAeu5eiѲ4y肚O\vtk غȖeed˒eјJ`Yr,`(am;K;~t˒ei`qy,5,-.̻ҠKaɼL,YK4 ,Kdx{6L/Z-K;Kv㥛L(-xqe/,>ɲiYlē]laӲTѬ;K4iStXu}}>6c9Xu>/剤hx||rv>9>9إ˂e,n#H.S[c2%eJ2'4ҋccDLO/-,ɍ8˨%Ҏ2e\>+ڎ;Kq~l},2]GX>6\Ze)[/)72RMlYx6] KXj,x;<ǦڭO·O'ᓋ||rdqFچ%q\quc))MLUx4gSc7$77c~If{iSlYbbno{cmX9n18x0,}XcW>4EXimoK:|]8Xc)%ʛ}rKvbPԥne_E,)oI\&q=6$.nlR`|;Kr2\ԭ]{Jb<4!]aGbYҰ,E ݽbzUVW̹FɲfY')bwʱW_s1v;bźc>Kc1rp,͵Kr2vkfnXke\4.E:3۹[Ǫ;knuͭ٫;+D 6fp,Xag]k}?Vxѵv+>m 7f-P〢fIَe>h;ff2vj(W22e:mX*K>Mbqon}:)R]D@kXqX{ ;K%W˒Βe5߻2x9㱺c^Mt,=XvnS\3ZAvip+vhRo,6cw;w.vlۥ"[}cA/-;(^iG]?\?13wZ.y\I)bXm+u1Y6,K;K3h'}k%ն[4s[YjYEaX ؛1"{IEtecQK>c 8tMO2e)`YY˕Mb؎bgvH{[#,f=ZޏL͒c1n'Rc7T˒%ޏq"?v?ΏÏeDzcicx֏9睥gnCs,v/n/Ǽ_lÒ,%,}_V8Sfm /&29dX*[3Kن%Kn|<)nex;f167con޷;bRa)S6 jY̝v&lMŲbYLLe;s'~NR;uu4n]7rَGnf_٭,>H71} K+,m^[X[YzY|W7w6-9Ogɱsm%[̒elq0;ѝ{E[,Y/c+,`tv3K5iSU˒7%aYY=Kxxc",ݱ%:K;K%:rt˱?~7d:w&N/lbFw!NoRsu<$yU0Ϋl|RLQNkE:]"]k74^=]KM7k|k㪽T:XuP}|OZB.^A5nneX5># tʒOTHWla>ZBYxwne UX(j>%[39OHWozrtW&\6Hn,R~nfxUӦէem\[ӯkH$(ոld,v|&f䴳@@*,,Y,H; VRBQ9dYrz!e&#Rt͟sI=r^Nu3]Q~.ҵv+ mC_ "ߜ8a~ .KP6<)n?(hC"CXf7 ӭ뉧OY/i"K7:Kb]KR*D JK2M 1 !B]gtCXMgl x fDkC7_R7)cƹlͩKV uS6jksS:OPU(@bXuP>݀F]B}0wū\6HR]f:)h$ 6t(6љHl O8HϬ,{JS[B]g7 t&1M+Oغ>4n.IP6>M).!/ ֊q]kf33,",X넥vRBCBsa.ҵv+KӦtiZ߱At [Gc]% 'u+\6H!k>Eneij/?hZ[ ɛn_puE$A4$֭7~WZV]k lBl}l{%fQ k.IP6PJ([oPU Mbi(B'U5xtS6̃S`E$,",㣩fbe,c$O2p4S0JlݚJ8LN"!OCuZ6JB.ҵv3 :+mr`ejV8U>!u;{iJُvLT6JC46U{u |wk~ٺ6|V%n?@W3+C]zҊ-h>źne)hK)^583u@[#7`]l~zxDl=G.ZSX(eb?XğhpIt 는R"I7•8.$f)"]k7tyf8R0Xo𽯨%X!?KR8R"&MQd.ҵv+ZQL-?S%n EΟI$f]uo|t2`o*.i @ RS~]"e Ƨ)arI}$Սl:er(wXf>z>}Y&ǿº$eY!h;Დx ҥVr{ұ/ifغulHw)6Xw${\7]&;9+>e Kv)&( d)SuER]P1 $)"]k7DE8Kh=pZ_3tf%fj\v^fnewŏq ^79O]C2q>n˱.I] ďqݔOvY2 ӦDvվIֲ%.I]GEb eMbiL̂ 1ӦLXfXզ&~E$1~$Yqr)u=&Y`PXfD|YYe 2D&MfغI~[Wt)PNGMCP/ܿ[Vo27aR`k>RXbz|uEj(# J$q/d)ZϬ=}J^s D%T:h7ʇA/"~8nDb${]+ƞkfE{r"߫ZXbRmJ$EӔPUZ>d|tҗYf,e[i\-%o@ &U) D Y7`tFe)"]k7[Zp AZ%Eغ4?ke))eIM0sIN8ngP,{?}ڔ S~}5LZf(TpJFeg2]&MW7JZk :[ W!$A@b ɡn'H,TB[/iS:LTW}qb%{:ɯTDtIiIY3+.[pݔ/Y \t+%|o_tESiҭqUb=.ҵv3KŹ˾/T,a}}MÒO^tE}KNieYcl.[cp.ҵv3K[6Wa8S%tSb:(bDC$ a8 Dp]b.ҵv3sӦ%.S?^\KU_.K:k:l$5Q4_,]nb ޺ONIRplIk5HBZH>ƞKRMYض㲃tpݔ/Y^|KjO2֥Oغ:4+EKҐ]NMYt#/\6J)_,]kgI.,kJy,Շe|uIUCS#勥k,[`)˯RyP[>Cɲp>ʺ" 9z\#rݔOv{h5z[}[|!)Fp_jl}B̧>O"7/W~e5D?zp bEXbHtT0%?rw^5ML?Q.(j>h'KSQ4x%h>&-~M>K[_zW||3|_gpxw9%_.p_ Hߠg 3ڿ1l=1B]g7fYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfY!,1,1X,K)#rfe,SY"[Mَ5eQ .ѵKe,ݲlYZYZv,ݱ҃cq_?K:Xr}>V>__Rˢ_=c76EXkrKt]]kڥ2\o5;Kt,`8r26Kr,`Ic,u>?f}QZ_3u8Xc,ձ?Fe;Xw~Jp,n^HRlt,ñeXK>Xce,cpXv},},>fb cEG1WvDzccX;Kq}l>6^ytR\eTRe)qg)n~ձōer=cain.xIencT3^HWX1^KYYYL2=,?ekxŒ[%KZ,XrkŸnaŲ=N^QYJݼ\]k-K9ڥ \zTb/YeΏÏXe\i/l,`q>y` ,ɱ4DzXQYRp,ͱYK:X\왺c'K>Kvezxxn$7^'7^/x`Ɏ0,..G cU#n c8Np,ӱ%;X2Kv,`b/+fFVeYű86}Y^z-Ktcc񻽤Kaan쏴D7{ɍ}9&8w~sc_#G7 Vljgr\]k$ӣd_//ǺrќR@}G ӓce,.NɱŖŖEl9>6\~ctX?p}lcccv]ݺ2֕ɭ+p~l~,°D^ٖ,Z-K;KeV˒Rn K!7MT1}~K} YYXcqXr}s{*s`ϒݼ?ܼ?yױRu)^ִ[#.IRy_Wv{E}?yJt8~͖`ɱD7^G=XƟ~\Yį1XcKv,ݱ̝4wݎ1ZyXxigi47^/3,nXK_8E_;)n=K/l%)XŭI[=4)n Ľh%%=awH ŝuwac;wH8:_u%*JAFdiIzM_g]|͜Spº pIluS٭,>AX Z4Ə qSeO._鴿yNGT]<岓|3|9q۰-a* Y7pD+T, K3uᏬ`-AuRNFB_E"]k4zUX(jh+@H2W l>Jt年4MX ,k~bnÂ=*e`]薥xJ,O䱳4ųPĂ=lvv47%eƃe:XR˴,3,tYci'K>]tCJA+ ̉EY+zJ%hkf i[OĦv[Y q;~gSÜne_ՔTT7 !,ڰ,؀WO£Mzٺ6f&_؝8_aͰe$Q|tRq!,U>oD35죀֕OHoR ZGAi>ULf|m=}2Y5,QI* a} -7HWoXIGe$7h~ᖠwMRqEnf<*}JWz1ڤ˃%];\% Kjt+}w7`U:Ŕ% 5R X+fvVeY)1F+-P'[l]laAOqy&km\6H)拗fVFOa6֖%[epX)19ĵ {{2qٔ4N:$;\ [צ$#'WՅIّd"vEڭ,ߝS &l^{m2fQldo\R`[ta[ʖq.v#z>&<ٲ_̡ "e3K6T~$e'R7]kV}dahoY2)4yCua^Nw!uS~<6%Kx,Y W'Kl]ꚟqF!] oe.TJىc#5٭,AcRWjF`tKR1I;+3GR7Gs[Y$e/"?E7 @tI(#݆~nǨ~Eյv3K¹>)cm h_B%.5/pKuI:$%&Յ5-R7勥1mv3KkVb)l}[-O2ew=I$LJjK *$|bHbijRqk]rK4`},3k~gGɫPI+&%E)$fMRҵv+KiYLVX75sL,Cmκ`M̦d)Z6v+%aV+K,<0!H+M+ OS’q$19DolZu?&)i"N5?դs݆]"PU7Ae)_,]k7HJ^N&u֥1+RP䢺#,*;MdZ]@ 7X5tD.FVḐhӢ&t(Tv.ҵv3XU{yRꚨ4 CkbX;+I.KEz @D(meE.uv+KŴօ"KPC$wfdغ%?FOS n52K܊h>مnfhd[KM0\l5^[7槵*$Au@VʖR7櫥0+[%fC`M1c; Ze퓒U\(Q~a ") 4v]%)"]kL|oiRVAW .T; X] qHXvY^u15)"]k7P6$ce)R(7!FESbHa$SI$ a8Cºb.K uS>Enf;02]-w~uі[O 겤3,@kt%)%~O4@X nbJ8:_8.!Zp--%54Ih]LrX(;5!e)_,]k7`^AS&Pm]O>g[KҐ]NMYtW&|*%|r7|tĒ:J օO2a'@;:JP_ƹ.I Ք:T6J"KVݜ/X iR5?>g^(A}]3wJXW$&]uq}D.ҵv/|-=g@ay_Vp%/W~͗|6`w@s|\pr-¨$ք լ4WM+E4* ey z=;/^zcmGKz׊ϏNɏAΰrlp/ǯ~Xq3z. e}eƫ?|bmK.~Fuc &} :/b?"TN)dU,RZ%PϚ& n& n& n& n& n& n& n& n& n& n& ֟p#Zn NP-A ǝ GKP-A !x̝`Zb N0%XL @rK0-|APwjj4)TGPj !Ha#TKP7?7mRl%ݣ 9HSDCSB2 °~bR1 #2w-Cϖ睡ga(sc0b`e;Gwz2<ð z{$3V$a=Ҁ?K:חKKdR;K|%O Vwt `!g0a0l8g igHaXv0aaS:HݳaeH'>鉿cLg7Ӎltc*;9>j vei,C’Xb,,),ɭ>{,do*Keԭ[ʒΒ~N;Kve22eѲcL7nYr?Y. vwL_QHǎBr; KٞŵKqR^K ;Ku+Vݽ,%;X2-Kɖ͎إpnYGGNeᑳxxh<إ+} ϵ<ڥe2cؘ˰,XXvXp,sgIΏ5ڋ>6#e˒eImgIͲt3lǒenU2bOXXeɲ䴳Xc/Íb'ۓdΞ~l8XRp,q,/'NӦuKw,`eFˢ$ۊ8v}X|²Pseɛ+ϒccsGv,ʹ٥k#LiSt~ ˴,ZVwV˴,%,l{IUMukYc~1닊9z𳍬eIݲ+^̲['z~qr[z?~rbwI8$2nY,{qw)۰ds.v+)rp,ñׇb"arFRp,>$n_4bz///ŬŭlK6;O);-U_]GVnƏew2|F[80t.vE|{hg6.ZR"_Rеv+ 톅",Bpk~`OƭDRiJ,.~V.ånrVZL ]6 KssdtEMXhe SvoYHݔ/+7KaJhث:y #劲)F[y;$J_x煜ڭ,B K* , \Xf,3,j&GN]-e-L,%,$,<Kӂ: |J/vE_*ʁQ!md||r`SMBqpB>KC"7҂wHs_ʷI-٨\w\3nf7L9۪hI2rd5E;zkvAu+/$pQ`tʢ3Ӧt.N[2+Kw(ISu+ovQ.2҆@F:SMвC糎wvY7/t՘zE)ZOaW,uh>A 5]{̪8ԦNKh]jfRNw֎űnYr,9,G e;:&-;K[̜"WaU1Coihppc5)j`Sȡb))ES6iS:Ԩ~i@%kT"))nQYbZC!lf)VSۥ`E =g?j풛XwpW.6ܾ ]ۅΩhk]k7eU͟n.IERRW Z/H|#v+; yabžw xYa)ݲP Qv,r-; 𣈧MK+Cغ84F/'<D/#ne3KքY4 &Xb|L$AD{PΓ3 bfdW%)[XpEY:r̒H^5_hRȑ nj}|4ne4%a*ZW ,4%fغc.ˆ5%f5!iX4_,yY% &K䯯,U)La2Xw -%Q.ҵv+ ]-1-bYغ%?-% ,,-%f!9D٭, n²RbΟbd$aAKOSJ.S*|BB[Y :QDE<-EqF$a4&L^O43w KɃSgߩ /aKD+FIz\2xD;.ͬT6J<"0neP uc^xd>1kRw9)e!+i(1 1W٭,bJa/<%͏SHϕ&+)%YIe3ˠB)>?4,MOO:dcM|r |rzϹlf>Ҕ!'9i5z,k>a]l~z`WYuz.duS>EneT_:"1kdغ9?A$E9E^PM֬!F_N v+KWPJǖX˅ˈlŹ(I)ْHaK2"qK,1KOv2e3Q@B,&ccIzMtEAN ne=dg.nf[itƧ)fb)%.VIW$Y3RToeMdZxHB)hVz`S3))DOZR@e$>2j>EneiuSJ3V5hbRQ/c"%U7ɤ;R7]ffI_>6۫: K2n%-EneN^VD# $:_1z%]l|ZR`1`S _v4nfa1eCs ؇JdAuIiJIEu#kۓ拥lv+ 8RF \0+*.\(#!i^EU2K2WftCIۅRh$,ɛ%H(/RnBL] ؽ]k72Y]1}'1^˺$e]RJBxLIWT7[f9FA:~qUL$A4\ZM IL/Ƹ٭,4,S ~\5Dh,u] ']%O3e'})_,Mi[Y&BI|[ J2t;ي0κpݔOvYV[AmCGW}4WWOCKRM(audOb)Z #O2pô*ƺ{$N?iJ4$-jP;OcA01 lnIq>D{ߤgȺx;\77Ulv3B) 1rvԎ.KUn5i t.+G\vd$5YKf}2 !ZMEuor nă}*%~O)J>5u23a]i£[k w?Pb5,:H5h(1K-ϖX݈՜?F) T!EnfIvYWrʀ&.iMeF p>uI겮uJ5MdZ%IqJUCF[g>o%)]8MY2e|t̂ӗZ&)l nZd%JX_;T+Rt&XúβuS>Enfi+0=}ʚ/in}UE<9W{+B)%O샨{vlWݜvX N5~w[U<񼤵j@ +Ⱥ" Rʄit ~F ƺ9b]k7TmF[?NZoo])k(r~º">`.Gqٺ_uS>E_z#k}[|~'\g>yz|׷aopo#f| bEMfaSz)o# }E~E ~k~]ɏpVQ4פ[h =GW}h`W?o^z׸x|3< 9e~>y|)E=R?^DהOjpNj'߸GM䧡=⠟GCG=  >37_cwtSpa)xfYyFieI797Y7¹l(1B]g79fYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYnfYn>mX3ғe }IXZ,,e;,Kl%%%K=XeXcK,)XN(c)S {byg)ɲaYeReٱpReQfKiğğJQ7^8XxnփZɽ,[p=X,Kj;Kr~7>Xr,[_~;?cIctX%,Ώu ?֏>]ձX:Xr~gRǺcEnXnX?/81^/ٍ|p%㥸8y8y˪eFK;Xe)ѲЛfX-ˌe,`Ie8~ززeqh,ñ$ǒ^qtqr刓Gw,ٱ%;X88y8yǦctXq~~8?6KΏMNQ1^/Սzt%8Z%Ν%v].ɭ3B$FK%N_˶eq,zrrzKv2]d[[#òdY[N.ٵK~.,6y87m޷Ѧ٧!<yXQYl;#ݲ,~ϩ;=NfYcq}c>6]SJnO,ǎ=+}>\G>;ue>֕٭+TcI5ǎuoxfYZ,fk",XnY_㥻>1^2ue>֕٭+[Wc-Rbgh"4v?]Ln星?)kba]@)0=ZKAڭ,O",*m] U_gIf=P[IX&A,w*uS~䙾neYް@ كRiYf,,:iYFXRe)d~PT{1sDdLυ.IP6>M)E岫|tBCB(LɒB-4t r/Lg:Au+Rv^a6;k6,2o?mJg>Meh~u.cE-)q.wR߁/ e:^ 8C+΅a,^l}6}\BQD˪ߧⲛ|XD6L21EahOF,Y`Il|;뒤 Unq ʗ]7 K9Xeѱ̃e8XRp,sgᝐv)Kyc?d)1Uk2FS>!fOI$PF'SՔw\Dd)Z itv)`kSfIXYQ e70'Mbiʛ̒;4nJs֌PYϔ5@-COmJIMu\vsݔ/٭,u,؃jSw4] C78,*jXJ^'K;Kž뎥emgbwΒe!KEV~a4q>Pxlk, K*a4s{q}C"Ef,㑞6ePj)<Q쇒V3i嬻bl7C.ҵv|YeIڭ,dRx-q~Ys3JҪ7YWXDu)%a隟+٭,Gsv}k%+F)#8sag=$;Rcv`jZB׎ @RzA-15$eH2R ^a݀;TvsݔOv[Y&,m%n uEJB)&| qϡck>E,ŲT5@tEwsJtz c|e">pL)c8WJl](a e N ǭ)kQ[Q|z2tB3F)عcc?`!1itIi)F\6H2]kV|mK3E~b'. rwغvN%De7v۰צ/[ȒL͟@$([X0F# Ȥbiŭ}R2OXb |ɺ$A4 岣"Mbi*p-);݄39 xbiɧjtU tG|w!,0+@ʲ5HW&%%M줻ϓc֬4wuSg<a(=\^R^S'Kb|PW^VRYtႜ.Y7?.yOT-rvsNս Iʃ1K7xb'ͤ+ĞEoxNtRd7Sg%MEI{KȢጁw:XP>c]&aD)[(JݔOv[Y ބzM!ϴt`orA ;%&F]x?Y|4nek@ 5/  ݎ(3.IMgZɦ쪳]8B6,鮂ʃ>q#?$w=t3T.IrWm%e,iXf7ǟkSS7uC%nEX듮H)Ӑ2נelR6J]{d2e3 ]?Me]@vzU9A[~V뢄eӐ'{IAFY`Rҵv+˺xENIg0ܶKpHbIt"X%,ֽe$~%k>YJneSYӤ\4dY 1F)ꌁgW_`#uQ²RRbiʛ̂W<}JG/K-dMo:h~_ĺ",O=u#\6JB}]kV5zJ8>C,=,%ZitE2,!,%Z= ֭,eX2NIY(e" Q/FkE4uEεb֩e,4Xڭ,kmzo:c/^ CcIzM|D+xƉk,%C6e-6 B/ {(1 KR]NI%n(ʎ)uS>Enf{ mJ_U7.iE%밻Ѧ""^RHt¥bR7]&ޞf]r!hE7~e|tĒ7ӧ\˼.jA0*7.|E_qԹΨcBWm|-=?4Zay~ *S_Vo?~Gx|/Hyo7EW/ Tk%Ҥ'f[TheX hW7o<<.z=a\2> }WoV~D? 5!!ҳcٗ_?}/>BzP~x 컁Q y|x QIPw?=G)h\[Yj^ J'Hh 8Efj;DDGozzf2}Ntո!.v'.nYM:C $"~|2QXWG?6?ᖨQϒA#ǻ1jǜBþd mH{ggdA#AJD7>lOV nu=Ď~zzt'gQkѢn h])F]]-n}&|?}HCga2Q=CXJ#&>d5xK[]D=*[ a L j0sd1d~;mvYT>ܯpo~%Z옜} v1BK[YZ'h7ow?pC~^|5>f$pp1'膆$~gU3ApR|?U?} G>F|*4KV|: QxڇKFՏA#AĨ9Y}*//L.2F/">}: 0 G|*4K;Ϲ{bǽjmјhwMUFW%͞]E>+*//7;_4pTLypG|3d_|_"c׶%>>jX}/Qv&d%/N/-HUJ՗}: 0 G|I>4'///s?ǡG'[h*C=ZVa6dÀ+$௫L/^ہDo> 磏|y_////%߷?|$ՠ+W'j˳5>o>1jcNVd_|_|_|_?q2&3:$>ucq/+6 >/[_|_|_|_|_|l&~K8 b[fj[0Gշ0>1jcΨ&U|_wpocQeEG|3d}s_uk͞{B>}Ǩ}sj/Y_O+{3%+&U}C-a Q;s/yqҗ}]IUhؗτ_ gǥMæ 2G FM|*4KVeۚ`8yp.\PVDXsZWa54Gqި9Ym%Σ~ڹ13i3kT7*/rZbo>x(d%?Tl\_ !8MW#֧$/_7?>STeM/iQ}?Owb7ë<,ҙ0 ږ̽gP.5z̈s*\zu"U.*^ }޿W7/<3_~~2ux[wz]PzOT_ϛ0?^_@~y_O|=b(Eb߯JwwW嗋W+~^ՏRbU _t|?UNknq!^L\[_}Q=Uhؗ]9O~:?Θ~)hy%<-v՞CpF90FmUhؗτف[#A]ãzK#H|$@51'а/Y|LVlCELԎ]*CЎ]zb)oՃg5xޗσon|&K5Q:ہ`!0䨝9Y %O -)'ڑ#Qu`AfiO{q߃g<%kWӷSJ2 yn.nq.MݞCC#B49FKlNV}8]mc6*CffWQ=|Va_72 e/ğ'{j Ǡ}bǜBC~/، ]p,32EG|Q;s U|__o13}9v\D}?f2Em?(Wo1y_/v9={*'9Uq}d~$}Q3j/Y_|_|_|}KHָ-u*CжԍY>#Fm[ƜBþd_| 6%v7=n_p<Ə>p]ʃ9Yʽ/Y_|_|_|_|/~,QY [Dm`  zϷ0Qg1'+*/;q c5rAT}CpĨ9Y %/////sccGW%pQ-V!0䨝9U|}s qQu`E߷ ~/.ce/////3ோmI-7h&p=2ǢE_{_}9KV_|GO)utf7egW`kd%Np6 P5AGՁчGMƿ7L=|V7w+j_X}K1ݯ>7[قDoZ"(je\*~|7φ_Xc+/_7?>4MCӗ5ylOϿG>Q>| Tzd?oW{XOqgklgX/5qzMև[~Yyܿxxp< Ȁendstream endobj 234 0 obj << /BBox [ 0.00000000 0.00000000 288.00000000 288.00000000 ] /FormType 1 /Matrix [ 1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000 ] /PTEX.FileName (./figs/hist.pdf) /PTEX.InfoDict 143 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /GS1 147 0 R /GS2 148 0 R /GS257 149 0 R /GS258 150 0 R >> /Font << /F1 144 0 R /F2 145 0 R /F3 146 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1344 /Filter /FlateDecode >> stream xXˎ7WL5$< 0x`*N n,/`ӜnMj(eT7Gkj?BIv^.W!(??[O6?p^:/x߽*v{o`GiУO}; |FAN0)H7ͣC?,kxFuxPnqoÆIF/wSƟM!L#ϰ~NW>}3,d*a;kD&^dUUrҀ93]I,'1ThJ6ѝε>T(쌎&ܽ@h3AQWa  OξOVK*8v  by{nJQNjnKr4sZdט2AiB3JվO hQ5M8st,qHG݀q:'34ʠ&A!x梗]^!Gc1odh %XH\cTHRYtt=-)ۑ͕+oֽ}znޥ,")a50د.دΠ<<WW#jPP = EC qy[$&ybg&m^r̪v;D"?1Qe#DW8YmqZ(,5 ,!+DOi7d|Tmj@13#8j7h(@7sZF}(K_y2FnCԘ #付 eܱ *]|nBJ"{]Sһ%\&cn1ż\ \U;>C۹,,> stream xڵVK6W(1͡H=z,EKoMZI^lwCI]o ~$$ D 4йYPk E8|j!l*F` y> rK0+bBR;AQ*PcOx cd>_o^U2jP/ 4-1R@ dNۂ橱5isSSvXAL{nHG YBc!%"ܔEཌྷ 9(g\[.PaL.IGYG.XS%u?R(> stream xڥko{~UzQ^AR8͹]ګqE{EJp^rHfUS{u{'Wy\vȨfuF{lMn7]yvFë8Lw]nctta~JkUiW$SI!׿6I=oVIaUzv8IӨz`NvWΧ6[ȡi@ܞgC}պ X~-2ccLf)1=]2`f\{zUnR66+/-Itl򫭶ڔ9k),OO@{7\CH|5# 2Pz<% # zW5#"9r O$c?% ZFh+TO"6D{I nx4 0vǶ%e ) 03K&TIF>_4zMr2$r$0q~Xݡ)/\TUL ~|؛o*Iq_cm4BBYir֬'+`ap[FjvQΓ/[m3Uf!;~q׿%# #]?󘙣@J m=J9ek;FN-VcH cq*q𖩫IaǡBarZJxU&6\9ǫ^|:iԃB 8!I{v#6 &JN'ܺ 7|Fdc=ʝ;5εC\.@5C [n *a QHԄp2 ^8C02Kրx*; wP;21:0yue'sQ q;dV@LBtZ#|(( iy溭2 6_QANBpH\ƳU3@˞)gf%V)YwqnZ< V29+ Cw ~ u~ %6;%Am2`3d k4} @PڱKkk@› z<(|OrF$9(V?Lh(B7@rsSPawM~W5[MD3x(s kl%;ܢ)Y:}-nTFRAcVHy8aoe18(xJPBBDEoE1[H踂ZvhvSSZuKZL v\b<5iCL+hpwl]FT=a<eڧҤ45;~?ض׌gIQ{>|'p>kU v~(Tak8b?fR<4 1݇\' bWeK}k B4 }\P^U[o*X9gd"aVS\ůgB/Ȥ.Jz%l%L]t&} ڳl\f35ֈW={eR[dȆ[a@pI͌E'F6S;>n`ny8׊#vsTR?Q*oʳ[|=tj8)ozfP3.N4%RuUS4-\ֵ{bZ3”s@nw||Uϴ'3c]%I!6fdEF}ۯ F~qendstream endobj 237 0 obj << /Filter /FlateDecode /Length 1810 >> stream xXYoF~ϯ0R h-oIH^o-Ex(R@^VgKAYqz @^NNHEGfdtIu$"ci/U8^{@b'n []E77rz[1ZvDKK=XBYG0JP6l],Wbv8նhej;yz '\@+ك hT'b>]C=:ozi+ <khd.V־S7 r->)220@I4%)˹P귤FE 69^`EƍĐX&GZW:%1q`8\#go~ HrcAӁF?#(vhLTRΥH^AbyQʾ=P g2b [+Zˊo vVVSxCv-ӫ]\wlnS 5B+`b,Jv)ww;i4VGY/e(ND ԛ[pNj z\l>@w˵7ňXS^p!k(WO\fh%p߿߁2۾*OE֮Y)!7ќ"a렌saHYy;haތGp`ikM95%Au&vC Sq;6i^6t&i$[aZUdIs9&^;RW@DÝơ6SMB)v*s1qإUѷ6Opw^O&(Z{3V}ϟNIcorVC/Vg2]C~K{{ٿb׻T VzmT[Zح7[ jmr.ˉQtnjb]A/H輻wGQHw'~q?\ =CZiˀnb>{sO -'endstream endobj 238 0 obj << /Filter /FlateDecode /Length 2232 >> stream xn>_!b6YH$  h@bdM7a.=\4y[I`rj֫W޾_OwJyǻTߥAQݝ{y<3ᨼb0M!<bj;ʛp;#@@΄;W z!{:|TfJGY|O?2` $ʫf(S3/]V{<"wG?Va|wTE1+ NHe4`ْ(xǠHR 1u}E- }9-Z=粒؀7A%ᘪu >{g ^HIZB亻nt vM\l4Ű?\#OL= @j^Ub(2%t\$Yt5 6 oAnJAGrQ:eܶ뢫nT%yS|3 klfoֈ3g: ̈́y K9&t=8,,‚H <G0rxy\moIWNc[)<A|n'3*Dr:6RO[!uj =n  Dt85 zR(r2r\pg :_%qӪLyFk>&Z܈eZ hP8Nf]%~3r/ka@!UO>`CG=:F)V+y \Qέ XXUx eynL4&qn4VEC /:j*aDĺ+DJ =(]ƕ-q!3C-s^Z1X)?k^lA[/ތGwƅ>b篳PD̢+ޡ6 w영@Vw.4h }_|k*ċv[ 8BBG C 0|u;Rc4* NFB"\5ɂGvkʞ>GY)M=[ 5p립E+a ^U5EG]u /w3 V4[)aM Vk$[I"=㻎v7ii_+ }_)! Ll7kgdJ(no3E*jc~MӛMV'_v;%nւK6Fimq鹈q  }H"kH;MeBz[6|ѩ;(_滱GT!e*4֣h~hMW5 <:4<]ƭ oHNn~`"8ԭUG} p> stream xڍXKϯh46mk9fI/H6YbȒG9䷧,y4TXd*/~)?$Itt]~`L~XmGC϶Qٵ.r294uvyec]\zw4&YB ]T+u{]ee7$vSQ]poL"u,51{Me M)MʍyL2!%׵c -}"׶NS?ML?e&;̏ϻ}Շ1 O{,{w|!mD<P5? 3W0XuA݃:;'^7_BQȏDۯEnUr5 #b }Q,k ee_g-38B2 q5P9Oj`8n8d^fejt[a6,T?Z MbB,,>ՒJSL:b۷ a׃ʭc:+>LnӱQ8Ϛ6,~' L9dKxV6D`5 +*d{H MJ$6F4ALJPv0 730WRЅ2|IxƷJ|Tb"}9T>0J>ELK'lQBla mLK4V+#J$- 2w7Ffnh@ ޯs5JI&6e$}Hܱj 5Z#Al,q]z8Cb(\6Kaeyΐ& Ks3*bL8W TqZ1 A}Rna 0zY2!Wh Hyt5lRho7ny}g{jm|-~j>͆Љ#o19ZBw/@ ɞ((Qq{l'Z:IlIM߲Z;PaN]=rF46EuSeEو(M 2Y_'83fi9l%q߄&w~s,€Oџ~V(ozM06ѦTֺ#WK3sXj*%yonᅵUwiQ -_7.IĒC@ ɥ=IP{!s>v ςPp]_rPĻΘfJ8,b?']]T屐̬%5#;eÝnV^r3>WKt,wWӽY؋%KiUl߸ĔRǂBEӾ/:'Lj^,TɎ*lDF+q!=:P{P2j$Qފ0Bn⭜.+Wt0_q|swl8'Ag@ۮY򆥷vDžlւ󝁕0 ܑn32#@ i6s- ua ^n +nC{ǰ/Y99fy&|5,X߽|?Lendstream endobj 240 0 obj << /Filter /FlateDecode /Length 1652 >> stream xڵXMF+ d RER|l 8P{Z㵈%m4!=g*[~^Oۿm<~dgA୓$<?Urqv)>:XQ92)t Km B@cYwO~R;xTyusV?Rw{WY];"rǙ ŋ•ata-B>?Ew@:t״<38ZARu'UdB 3/Bu&A=֫.⑧.KAO;9M6U!< op_ .מq-"ZPfN=֖y{sN~%YM&bl^}xq؝^)q4HG}߱BtFG`zF eO19x ivq;o ,]EŢ>+3x^^AHiFmKLŠȷ x=y#i' 5C 3綬TL!{[ޑJDBpZg,F!n}+ D"dh2 |{S7\S-lYFsOy2 +9*͉G^mk4<:NJ,T6bStU0zA*{qMWӱa͇Q@->wdW .ijg*'mղupJĊ0M-ܮqi:\۳U1oVAl!@90U:rҍd۲:?,5$V%;ǡt겙KQQc{-RUVxU-+ĈiQ W&\#,1]~j-Q)g'9H(L7 0w|SxR%$1:!8^;VQ ׯzB1RZ;5djFxs/g3D^ZƧP\r؞ʐ7(,Zz[kKiТAZ Ruz<NJd<'vL\:Mp\\˒)f5% ݫHLP W4SF@טdEӕ]S)^EE[+?lz]aF-?0p=/QoH nn > stream xmRMO0 WD;efqpnؗN8۱V=ɳl?Hf 5G4X РCk^n -FM~u8]/)ѝ87][*2_ oid~ 4Q Ӟ'!xZ`GKtw>S_8 O>J&D̦f'$ W~y(|`k|UY!aȭp'B2.Iis#u&y_Ujq (nìNz:뼯r3d35tKgB>˔UR$HXendstream endobj 242 0 obj << /Filter /FlateDecode /Length 2268 >> stream xڝXKoϯ0|R#nF|`fK naԏHjC~{AJjz6)**pl~pɛS7Vyv7d?ӰZ,tv63&YRxQ} [\CCuXi7鄒A6J7߈d$sBc Hn߮/yß\bJT7~Zy=S JOuoCkHCJ#o$ydaagŐFJQB1Ri.n o};QR.\G׽cs4w mm>QliU*D2 7ɠ0Y͹ =9ylzX<掼hѠ$#)J*8iyAGZzʙho~ɥxS=)WHqz 04k9mS|4&;P)VR~79<{HEn=!!2lP2Cվ(7LT<  l.R~SyU@Q'eͥmݑi(ДԔ M_X#l4$F0 # =D'M9G1Фxp ЊLP%y *O/Dz^2=r)MGgR~TcL-wKVӹ1#w)vr>SC3fԒUK%K }p[$ J(׹ ,4[f"m\@Ÿ|Fx>Dbs4MñC2wBNz^^;i!Nӳ?WlH_e}DzJ9kr9))sMyi +1+:8 8\ 0l}UH@zv>\4V!l< EN_aK)?r_v oJWZ#y<61]0<65e QԇmKz"!{۶L!L:!!(sSJcR΃$&tհU&g_ h!wJIV ~ BtY߀گC0˵pBy9=:FV[k(R^A3equ\\o$J_E>p墲STKTtbrU,׮paWr,7ªi'|}]WSN:|Ca50M!n$ 3e%<]Uqgk 5&o/UM.ruGa T(]a|*8Jhjh]iչx)Tռe$-R6ر*nf1sJhًDŽl90yҫ,Be_a6Ά*̸M)ӆ>n{%VjbS٤0OZYHSb&KtzVp)Ԫ%~~> stream xYIFW"V.`;0pߒ($Hq-ElS% U-+cRjy[&ih1X$0&Yl~2^zOfE4[ɠnxL+E_f6Z[5y?%w}YYdkQmy+=v຃kxóyjV8b襙0ڎ8Zi8ǥᜬkTjXKcJM0[E`0+nˎ;5g>7Ƈp>9i6m )@E˵2&\e ) lv-g]ekM25ص?U+ Zƾ_>PYcͨxwhiں]Nu,L K{Jݒ.Y* n3c:W໯ܻ-/$Ip$l_t-#Y7:qK l1miDٶ$ 8Se6t*r}FL NƆW2Tox{p'a,MTq6ģxB]QBaǰCY|PI;O`| -3]*#A!yt=f}B,Mh`\}U"!xi,LSVH{p8@I* o?<@`\r 9'jfZSh2M]pۊ_~sv\ƒ;#C wm=.1$q0҄eߎ"C*~;{8@Fh_,Z0?*c*1!xr;o+"KװOٷsbThN'̧[n `4J17$7Ы&6X8 e +[' *> !ݞY./[F;7<~j n7j.۶NlSN-R7tlP#A_@AT3-!OU 5IF "my4zf4a&%zcs@/,]6.zWįHDu 5L~c4#NE ^٦+f\U^\"u(cQ E5-sUh8ovGIAF6#Ɵ8 QWǞTYI8z"RS /Rܪ"Ur㝄8qST5Y@̽\&(jgn Wzn塺 K*w"v̭ݹ>Uf.GK9~>E p~|󞛣TD+# H1 (I+$1 GBJDT|d䋣Э'2M2eCUKb!:ӡɄZ'W+(" uyYN77%|{4SȺax>[13{9\]rìRp잢p Y uy}<8E0:JUEq͝<4SNݏP: !G?}IYC8J_/E_Ac%\6H-O'K CI8ėz2)1 CnM>UPXMoǁKV6iȽHaP )1Dlv7QDibМ/T`XU`pkBsNBcmc%"kʜRUdӴBu$U+Q7r>u*i 6^S`Lp]Ms}DQ&$z_dH;esnC_ |-QzoP=,cr01Q̏?*ۅXNw HlDžL|O_22^-܁`'(%HE7ZPޛ& zyp:QzA쵼4O0Po> stream xڵYIܶWLĩR$|Hl+9yRJDO&\4mHuacy^}V7qin7qbZsc,n(_yk ufIdn"z8S|>yq$TdT*(|[n4u+eIPe]L75|Z!]b/ÉYfKoAz p[7E<8|Ow۝;B嚐.;: seb9ᄬ4҈gP8ǮOVۗ!2`^.w&=k": #[M1 (e-w3|FnI̮ܘ/ pPpW2LA# (BoPhtr/xγP'Q$R4 <IʂqcǮfQc}.ɫzq-I-Lpv0!ypw"2 NTRӳkсl8uSSq(cSXMoo3AS w<_8>xrX#r0_bÁmDZ2{κ ֒)z@V5Ц`d/64~e$B|VmSXDH$>ئ3OϟV=X%9 a!u439+4Ha$w*eCb6P٠5PbsTUcTwwYe ɐ*t(!T% rܩxpW塁l <+{T绻QIgvc < S6bD$]1U9Dpk.`Wf* mlͳ"+YzN%)[kM+/z{ˤ7ICd&yzlY܈>DN/)eV޹]&*O %F֖_ !~yF`TW^{/ :. J DAL칃JY$A^_X4 iqgNqvbHza0Z%{66m*9$HQq(*w)bjF]Ë@Y1n '@,HppJB8@@N((,?0)p?D8mDwB>elp=  ̡V>M:r@he婖 Tülfh-*m= nڇ& G!qʌ };jC0gO<ĨKO-}O-֝#xnw3Ch4]th,S\J18s$bd!F-=vhAw5\!OsN\Xjj.؀8l'׮X{7"1i YZfdw C-Axh5`uSp˞7V8 >7\#x{FKa(K4=]h؋ˈi$!@!VD='o9_L Yi+(},a̅OV(SCO:-D#a0^u9rOU2ٹ:6+V/{VyAOot!(Em*_5H]6^î`ZA6KBgy:؜>r3v-8"\=!HM&G3rj =~J`lBtZ@dzƎOfxYr\? *{+pyAjZ|d-x?~>%:#ulҡ^^ڇ~l-ПF1rW`:s1]b4d=k9P኱ iB4tdDu$ D=8h=҇;+P?*IIHz9nj4@4$*`kJ*C.JfGՋaH/Q0Tv ᜹vřH:>` ɶ`fC)Q|8# m3~BN`dK`ln :zljAT##K2&OJֲjgI٪>2[|X +eW!N<8 G|- ڈbN0`n$]7q/xP0 (HQ9s m) ZSpw;=S0wFN%&OV0,_Qi{ݫ꾥endstream endobj 245 0 obj << /Filter /FlateDecode /Length 2809 >> stream xڭYK6W\d%J$Eh:YYZ-,Hr`IKt fcC}۷Y.25*6"i"Sƺo? ??U&͵F;:wHVg6 4MNfIt/f+<ںMs?Lva3 7?6[a+3fҩֆLs'כLRffv{WǩnQ&y<>|id'Utj|]dzn Нw/Ͷ#%Hn]bS#W `ԎS]iW4.ߵMs 5;>M|yn7nFOqNayջxDKO=ap.!#ɰH&윞f~|-]aD~N cK+'ˍI1}l3 ZgM,tA/)n+7_?M]$n8oTԲr~۲H Lv]5MFLd@̀ۢ4_D~JS&J_Gk؂d B:cA%>«cx cHN~82JL "J8̉2]4S:UHs`:D" p6utMo>̴]L=45 INA{ rQqy.Qw]蝾ǍƉ5EJu- cꮨ_ҭL+ K?QZ~8"I[,z'^Q8hLXOseUp$giy*pt=L 4m'nkpyJ%qSCIFXx?ՙ<\"gQLu;KJ1@U0LQ,P :"!F3$FONW< `ED$Gy}=.&۝El>Rv.Y ;roùI6avM3Hb»L>[V_ޡnTҫ p!|*\'(\9 #](^A8|T) 6NHGbFc7}nqhY:O-Yj.1d4# i`inFF*kW&00hRc}F/=7ףe'dlG\p ^l:nlcɏ v6_ϵt>+;m6ϋpQgIZxohLfrQyzCGk'ĭ89gn$Y4UҝW9sUN<>-F :yZX}MD3YVYA/Ʌur#CrtЍaC^u寯tU$6ѯ"碯Y&98h=% 9@Q7xJ[yse4+%;*z/X"tc*7s\K+ d}&`GM B$Suq  nfsDzFG#wDcD.Ř*7Iܙ¹ۧm(NErq11\e#[T`geboJzA9r#wKS9%T9Ңdq))#_"nOJ9w ޏʶph Kjqw ]W\X@WJK l q-`lyH-f =dy ez}1Z-O7a' Wu,+ 7]{h"rV"44QE0f*ߠ tvO>KA]b_>T)HfvUZ)GPЂ9aQ'N Z &߽ 46Wr%NQ(Fj$ǚYv7(O! FTď;W:89e{.,DyrPLK πݙjl:x# h aq(;+5DaDAHcM{8^2dNB[pЖyj7s \%D3{d D⁼ GB')Jw^P›"8# ^UbGunlb`I3} Δg/|UYsh9񚸡eІ,<FiO@$";IAj2nG%C:L' 9%d_d X~6/ ĉ+Rw+ا\Q~i )wV"R&s0I/6}ٿNNh`[08rso^E 07O -Wn̑wo+2xԤѦ!ț\ ӂo,U}#_, lg8CyX%Y4vy]%%!i:38͏|Iendstream endobj 246 0 obj << /Filter /FlateDecode /Length 3006 >> stream xڭZY~_1z'$:I85" =utд|nY]WEwwoR֪_3/2c?Vd~{3MF6\55<oNv\쇲J-7lu9@Cݵ}b+W[%&y| zm( d<7x4ڞ[WigVpm7vnǢil[s3plm&r ,%M'E%VmǓnʦ>BĖC96ې.@;dymhs>475a8v<{։"n)0gȡ̊eׅBTPm>M{ ^ }AF[NKHƛǥqPGv ]lYF4*iv()\~v'2˯a%QxIʒ\9VIuYE|d9p;4tFIvu8LG3͡1W ׋Vq°ur6АB %x)с,_M[*]@Y;7[q1+t$x@-8E.l.&8pւw\QxxQ~k7SmI k)B'hnpl* W|v!y nM I\|*zZxHpso8Cg`9|jRϯwxX?q/Gz[S9ޕԸ{@ s 8Si7_d;hOѤW"U88^ ,,Nc5{*^y`BqXѦ=Q\vؕ r.y `7$N)khY' 2!y5#7(˖ K\9!Ez'#@d}D39o7u^#m7t\]ݑT!>yo(X:B ?T`(ȍ%VvP1sGTFxEAQj~QoEOnM_!yQmwEtug;,S"w=tԺ߀s( 3!0Zo w`A} f+ש2ጷt"~ّ 0 &@x9 ۉl:>lc]"0ަ펣uuYH[.TH P<"{?!*dB):r\N $n!xZ, 2pu[L1'1J1ՔLh`peb/Z_ Q+J<CM έ`_ѥpԄ>J!liai1$hvˋ!y8JCyw88_g;(/-rsywMdKC!xxbAH ԃoj9= /wH+0h\8.xnCgnGI]r$ʎ]wyD 9P4突+a s@yM'x7vW .x3q@F82[.+NAj6|"2sDp%3>8/\aa ~)<AAg1}Wj2ƹrNMy˴(QEh#]<6!<=h@%xd5Ivf؇H  9jI0Y ;7`GqBw*7c&5En < cvNSM 0xv-.LicK| O ְ3%SY} {yB6`q wPjHR~33&RD+Lr [2b3usTpSOl829%lm*m#i'ypkMC]g\6~qE^f(.xY[=S.( #aIcsTda #,";IJڐJj49%/xAGRr@q~HB:Yo!J^Pr(=V/wcӈ]yrfV諔@בkmtgCm͙QF䆴"H~ _+)jKOiRiE'_ 4A+1w/r8÷}Wendstream endobj 247 0 obj << /Filter /FlateDecode /Length 2429 >> stream xYIϯ!l74+e,U\VR'6EyK7H̀$Fo{ooo^JJ[VLP]$1vӺFFlM7֬8~믠_uxFǷYUWoe:yshLÌmc'l$ ~e.db\5R%l)64u?yQgjʄUm +C쑘$m̌pyg4-vlQes"ߑ,z8xp*=c,+eREB9/"w ie䃎x3e#^ ^Y +4@psK h:zap(8GY48>ȃH坮KElzwg@m0r-K4 xZL{/-B[@s"VHjmɆOO3݅ -Z3!,r\F%T0s2vի&p.8඀%e%GOWPn-AB݅V=@1C4Kq8 =2nfCc`g1e >`)hz$?{p%.P &q?g=ND)ZEJ;zTע3,aN9z*Fo2 BwbbVVݡM}mk ̳uʬGT9kf`nsJ U ,h W %ؐ^\BC1{N&qb4ģ |)C=j=Mq>S@ qRl$,cE(C` aʹ>pW]q9;jX턄|”$T!cMff-V~oӿcF㯝ǂஊ6eBW-]`Ә}`hwN@plL ."M(ϨlS__b90}d;8SvCP:_lQ^ZKi~!e؍fή<w/1hi[#Ef X%ݦ0OKgE4<3sSUOYG% uXdX(N%9y b՗^qJ [=B#70,1HVPӸDR ?+1E$r`{ W,cA2ji.TT]03\HDMw,>q28DYhl/)عjXш C$ vIɱ}?C05&$ѽaffE?v~YRֈ,7KU#;/?yW{| 58y;9!C2 O9?ۃPy -D$-jC*1ZӉpSN`|/,"3tϙҔk"5_LE _Oaoch{IT'q?'ȫr%"&~ǿ("_}kCjR(@AxyLi(]lk<ڥҤ^*a U9/\4 endstream endobj 248 0 obj << /Filter /FlateDecode /Length 2518 >> stream xڝYI8WQbT}H 0&>lUYKv,)mUX-_{#(U77Fsr/rc?٧\՟]烡u^4V26VʓOvZxUjmͪ*9pR}8Q\B7k)\5 a`! ӰOyϦs<,h#BN]*]Z;Qװ]>_a-Qf 5_KI%s>6Za\>몶çxïM:{O~ _pV_Oٝd QEy8\0CE!\!$.LXrXx!Oۙno8a1\uW0"8\-pj(r,{)Nm6$~ZR@5\AO йÇV,%)Drߢ -( ]83B/+恢#FپRy)d~0rJ0 ,mByD cc$FHStyh5ŸtNs{(Ǵ5mg_-FסW—O[ !Afh]i -@?x} o #?]w^Q{o4}(^Z(!2y- ]^GkA`Qu1?ou [ y}w icCVJ*zy~&p #yS/fJLSsM ,gbK!oV̦>6pΈp ۄ!m])Vl̸O@g `~ f=֘m)Ys Yҭy5tՕnf*{mزH6 Ӄ6CQ@TH6tR'wuvx`gzސ5¸g l@Řfʜc2"Ӧ ~>vsB̒5yYOF֟gDZJIGgN{*vLFKpl+Ľ2{ԧl~E7뚫'6v)+C43@ J2vfc;Na!D;ntMzp V‘croV+9LĎT3Wٹw9`drROD" A VVf_!"`klLQT=yc/X)L{X`+q*$fdG9INEn39g*|Ii\A+Sp"|טP.@Y8z'qR3lw(|%C$ ' )s]pL Vp 5,/S'LmJ;Y _P%HT~d@Rua>Z#jbm7]ʰRUFӑ ,`Fu)"YVKt1a2] e0W\$c-D /\ya8ĠJBtK {Eߢ ºic\~ͮ.=6w/^ڸҦ;E60 8h|jcq-wrE%!l5chn6~ +\  ;#/5ښ"׮ƜTB}ChH-ȭU2?(XCB7f*3arUřiHaT~~/LӻKWoh%Y 9aͷA&>3$@R=s$z~G LCl[ӄݲL.ePG玷iZxC=3 ߑea(t`LЀZt`9kg4,-Aɕ©F2{? <cX,@l;,@Dܰ*7y~ Hξ9<KכDML`b?O֩+}n#!吖/ZC\k) aߜ~ HeO ./ǿ,YdwE}lP6pj:J\07~.´j Ϧ Ӧ+-ѡ_f@< Z[粛)C_} #`endstream endobj 249 0 obj << /Filter /FlateDecode /Length 3424 >> stream xZYo6~6fx0f,fd<-VЇ?u-͞i;nK%HUQ___|ɉR"V\Nx6LV\Tӯ ~6xw_vuit_Րk'3r.wRyhH74j}s3hQ<̚jo/gFz{v.Ҕ IL5ëwJW0(m~b۷BE]=a W$\rAKÄ8W3mtߦݚ|az)HvͷHpEUkWy%-^ϢT[\~^5EJmR=Mx%3oLVZEחO_Vyn: fmx}s\4=]03W' 7[(R63,aVj5P~~-%sɅw`'"*BVG0fmqvj;ZZ!Okz?oQiO\x ʟe 2(mei>賸_oޞW1OѡF<3|n`}2MJ B2dMjrE\vX,Hu@zcϱ=Vc?;@Bpzǖe HDV%!yH"ZM~&?vnuǔ nѱ~Rȧghɖ42-ڒN>͛.%B^"H\F,$FOzn7310w+{B(O#lj֤wS/pjn#}7@R4ڂS7d58&/&j >t{~Ć_chp `fhdvne*S8<[੉pr5fBR ffHJ0w~V3u&g7 RqA!珆>D%sߖ vipA81Vި+Ft:d<Ɓ16.6(͂6QƌK'i?.?,V7n0hAJs$nҎ:K-`K`6~ ׋rx'2 @CTx_,O'ڋbTJ+Q6\F&cL\\rjX*'*ʎ*w`30O~f,c+$9Ar AX/nfM(=1~Y7؉Njbx"1H0W }8 ?x_ l0: N(r|N(Ù>ׯeV6^zEÈŷ(0DՀL dU@~2_^zr\ɟ/$!B&ˋ(t:/.^|`8;p Y~͑ C VM*Bȡ=H&}ʅ(t$G^PS5}"<(a †M gf\EP 7ES8 )f}PfGeL@C r y%y.Q}%[Uǹā\.!K3]).a,(=tb\$*l)Ps踨yTT{ߗQR8c݂EÔ|#$$YϦd W<6U顷C U?<<.#-omFJ0[Cr7縼26ʢg!OTtOsӮ -B00m F,^B;QVD#)DiU~TVhK`Aˌ? nE/i {\m:<wR"]ltCVߧ1K4hnojHtԽJei$W8p^>PM6f˹3Qar"9>: w P1w[,?#Tv>|S Fqac8s cDIsTАX^|qtqq!784@+#ztl^|EK|>/-FG7p'1ZtNWb/ޠcW>WQc'`flDfhDj7O⁧4 EsI~o~ $m6UOqWEXJ׫D1 X(V4̕n0ҌCTb.>29wUHt~<$ц:h!SxfdpCM$+ 4x p$dvo>̌i@e)Tk{ӤId}fDZhᵦзʫ(@ 1޳^FxF9aV>{V15B`VIЌvy:B=G (*hwtPOup2ِg+5/e"ͨPAJ5ǂP^}QV dV|)@A#}ְ2;ri?sBS(\)4C .ʢ(DE$Q(x`s)P{fg%`ẖ"o1#QE̱#)_n )t!J]> stream xR{,xABI$-{qՋDgRh4O T-  ˢ")ht l<NQ0I,Ar:p@ )DBT@H$(@\,JBY{*d(`C\ȈB &!EaHȻ2#2(OO"8^F 8X."8 ]?f,BXv|GRo4PB`Lq ``ݻNr<ň`y<ē{ÞGIg2!RH $B,G'8,0I+#(&DHf1 Ad3I JS& 1ɤ$ XJVJ!;JD,aID'~>N$_$~if{2<-v.I%pL0&PrV($%[c9^ɫ&CeߺVn*@IAE+-҇)r~64,3 =`YGYWLqlw˷d!i}fFLajr"5%G{Z:wV6_3R쭳,_yZl[r7񴏕綢`- :Hll#Ѧʹ"FUk+*e+RU7ty^lz^yB S#Z\vqbGRV"b H*|Yvώ￷AgjKYssy#=Z6h46lW!+Ӿƃ>PuͬV.GZux.2Qߔ4ޮjD;߈֗o,փb#YuA5 ~CJ`cowz{-Q9NGsW?tؗo|DTl,)!> stream xRiXSg+K@e~ K "E JHn ܄,@X EP)Re EFpAV5"`aq.X;П3~y~9Z}[2#rb}ػ{ҲgAD;9c-7aoaln1Bi{Ǣpf)C,*w"'#$" 0HT34޼bE@d TATe0'e~NE@,6" "u"̀i<@((C B?Dm'whD&=oD:%Ϡ3do/=}\ Hl`0 *ۉ T)P46C0yĶ- ur>ޚV@_WڭE'0 )D翀maLu0"E䡐@"T E( kh38X( js83` '2`P8&g1b]72Ac͍ & I\ 9[9Pk!( "Ɔ$ƤJci]pSOoN]}Ot-_aόבk^N3yC33ͪ~oy`j,'j|DsEOe񲮢b+;:ND4t$MiG}WX[./2wN)K8zN&"WT*u%{JCoh$dN !9q_^(hnYU7ȃ xǛYC'Tbg~S)??Mi/V5Mʮ HFQ g^A0~7]xx?Ww/el>f-MEݘUX~#3_}'O^zL'<=k,n*uXڗrn{gHȊdB[tjyDv 10b|ǿ^&i؈l{j sò$z,`&%\ZR}#=<)+o3sqYӍœ;_7z<+r8MBד>=VHk:UiLקwx=@k'N}svSx+Nhʥ׹e3+U;z?6]YʳC(NJ }d;YuO[͂Z¯=B {OLMVt)ϷQ3_$4`|0vYK)]WBj,W$^Uw}.8=&*_gw_/b:hn2Gu"6)KaQYV)E*]_̝xњ6ݙbx#xHs$%65_!=٤֙aNezf51(Oij-3ek)5VFqQ *w\"h|P FB;x =(GaVY5ظp#wȒ)Lr0]:M%fن{ GbwKFp>\m9=M;n3n|[[%ե6[I 7Sq'ƾugqWgfEFeQ玧|{*}7ϋV0wA@ADA'P!qendstream endobj 252 0 obj << /Filter /FlateDecode /Length1 803 /Length2 2229 /Length3 532 /Length 2810 >> stream xRy<B03cXcV3CZ oU*DhR2d oIvJET}nu?>9yQe62C 7,H;} **4SVh CaD@G#t:BჂ7`Nix, 1`bڀ9~A\A:H q8 “!oȁGF\Sw$B&F80upO^~ #1o߂[C#Ia  )8Fz a_v 5'A@ QmLg`@ ~dܯN}uD{lx=g @EPAbnD4<i`p.;Zr5KABh+@pOƁLdr Cw & ^P~ C/!('У? 2ÿ‚Œ~*-׍0@ @2FsSA&`MNK.~ZůN-?^\a[OP¢XXj(.1*]gMoݩ^&8`=lNO~ӯ8Aon@ie$ܠHz&R !k_$4yjpߎd??H)vHy/2Cܚktb`MZe`NkԊ3>n]7c-UFT^d̠efo5m9/TۘYCzBB!/h7b 8Av/3:뽐 yuƂLv?щm]{۾wAԪ'>$W=t~'!f[Pځ1'U:o[-㞓|1[a¬wf[%rVVn{#af*td̮$ДS7cL&4zSA}|/\J.IP뗺R>)q.'Ub_DOW3 잿@ZhR|*efin%,V]s)uV׫ɜ'вī>Yh~'To^fMƬ*Dz߉RyVx$E]-]/&ߦgTu?|yTeTw>`C?FF) >IvϟKBOXX%{DL/^8&}UK&wᛉMEKWr]44 rS5K1 !uߊ:T*,ldEYZ/:==)GבwٹgJhoL4z @kvo?=?}Ѿۛ~E9=<9q uuM 9G)"_#x0Pw݇1 t~&":Ka@ZYD^ώYju_UB@u-lv8eդD`7%mWdV9LtsdH\6SK |:}B }p(jib*8W^kaFE-Z士9Fj{kM԰e_Q6jOk$śJNT? Ċvl?$dt NYePBT-C0+! G>u/xiSH1|+B=) /݁Nl{JE^ܝf ֒r27 -)\4=iBOyPL5:g}8~KXi=J)F]l VyC?COLcԖ P#(߸7lhrdߦ~sn2JCw i4u<ɓC 8]LٴZFGyQv䨀%bI|Xذ taʊ''ȣoQLLҹޟ.`WHەx5$*&+e Zi,x|,^OAWkcm)mtep(pq(GcVvcdmk!v䌕MC![D82mv=o-WFs/b"/ D\ok MwQq~쳻xe0x]hWmc~q,DUގikb$M@>4e$>]VN3ޯ-yrit[ɟ}2;`wii b,VfD,ElwwםKԘމAA`ajJ86DöU8a><]_TlU^o_)Fx~4־#|[Y3uHJKzjzuӈv{42Fq>}uPӣ[mmE',{$vb{2#g\U xXSc޽0zGgiIӗss0 ۍU\[+JM3$fkCYoDk⿓<02tU٣]< _l"s"keI:QEb4\hZ+=~J> stream xSU uLOJu+53Rp 4S03RUu.JM,sI,IR04Tp,MW04U002226RUp/,L(Qp)2WpM-LNSM,HZRQZZTeh\ǥrg^Z9D8&UZT tБ @'T*qJB7ܭ4'/1d<(0s3s* s JKR|SRЕB曚Y.Y옗khg`l ,vˬHM ,IPHK)N楠;z`GhCb,WRY`P "0*ʬP6300*B+.׼̼t#S3ĢJ.QF Ն y) @(CV!- f IE Q.L_89WT(ZX(Y*[բK.-*J+'`PiKMHMy-?ٺ%ku/byb˛"vL 6^G[g_J*\Eׯ'"5[,`_Fxes4<͘HjY:7(ן)jq iMR2.xWH+r6ϋ=!zik^J7 ⱼ딥b%h䉪[EK2&R1wz )_$>H]h+#$('i~jTwUa~EO ՕyZ?u54Nf&پqY#4?l9`֖tGm3Iw; j7h:G(W苳i5j{o/[vn?u{\T jR7% (\ sRJsqendstream endobj 254 0 obj << /Filter /FlateDecode /Length 3577 >> stream xZK6Q IH $;@Lj[=_cbe=sۋ-QTXϯﴙ jcak3=Z5׻Ϊ|2\z팇YVTk? .Ec _v9\-aw?v[G]l7xw)ݦwFW8U|qCTS-W7'i8_൯Ml؞ ʹ6>n{n@#,}sCixdsqm*ƅrQ>d^-5}`-l a!3DWoQ^$B]כNljw;7Ձ9B:ˌUf*EyY䤍T )A9S* vXYmqnv[70}'+`8,ߢ%p6#ն{uhQ\56A\ DŞQAK4WV}:DAOwhF"N߮h I= *BSMCŴȥ%Q ?4)})eG !,kՃI-`L:9?[ ]Mլv&-4\Z\:He c.zUdw>-[d$ջ8g,&Wx)r*%ceRڛf;r7Xdgy5Vb}_lyg?pqC3j1[LZͫ<'UU ƕc!1h130YiP6Jt3tDmô [Qk 7J"N B b'8_3e] WC D y M@0fdHZ@RϗNZ6)CM]pxsq碳gq6>k_˾f5ɺfb Y_(s羖 Nt^'M\iJOi:Oyi^!4`#L -1*ǁez@a('"|" b(aGO p㸣OzPY B=190[5@L'Ԓ7VKF'?xMϤ=:q0#R_jD!E)4R|`6oYe1gr-IH~R(WZcd!X{ 'aKs PA\BJdA-:7`6Dliu><<͡SA)qF*$и *] ^ B==MG^o Ǝ!T5PN> خwąd .E=v5:*A~=]vaA ̈""T5O?*(~o"zI ~-,u Md-,Z`Xh NO7;\`=5fov38cR&/ݛ.U#~j{= #?ކ8M  1Me bmV? TJIˆ_$ka5Ȉ1Z gAx0BOTp elps΄KnYl}( [#VxI$%.)]y{l6fݡ pi|7D86BǠch"12"ޠw64BPF۟͟HAŶea)];ldNCw!'1v:õQ5Wr>)H~K2uF>FC ?# }! qQQ8R)ЩxFC$j`% ^2 &s@N:ũr_ebu1m/ ߌ iɢ1^MB΂Ix, }b8*<(4WxTr\dP{qʩɼ6+vsOȁOwȌ_7z2d<=δP_k'f-0*`[? T u -ONJR̡3[n0ꊠ afIO ܦ9$ܘRRCJKJR@!:ʪ06d,J@&%V7 m\0$Ux/Op8Us!A- F||;@0ǵذT(c Dž.Pۯ7eqnyMB,%:/-'Zc砟΂uWwL V1#1%Aa o<(;鼜W^qʾENOjő!jr"Nk#='IbZ6g|NZx KP [~e(/\ִ4%et®%i>aK5z Nj4}pg;@LrAr~SAsU &-!tjR| G'|tnxm-DcN>U4v_1ؾ{P<<>kig L==VL*C~Lޟa>YiJ+x <6Jۉ! Tӭal]e^]q.OrڰP_F)V'I\HBu1Z(ӎUۭ-^Z"G?T{ T.j"\O>hAPnb޺ =>A_Ҋԑ Ϯ_TO&R:|_!釒2bYǫn3z:bF1so{F#)|j,j#X$uRON5|m&>C[XwshJN]g4$uDh~ zFcͿ,M6t3vH%xu9njOe69s4ej.LC Y6k<։큪.m]W6VNW5 m̈MU)s)mR$NP3P3\D_?U_6%mh'>pX&PVI"g`rJ2"8FLac[lOBd|l,.L<~Kt s{$qƧ`jjY`^]M$6^;6;l"2҇ռ<0h,G5ɾ{ɂ e0ǐH6f훡fln#H!'g!00M]Rc;N endstream endobj 255 0 obj << /Filter /FlateDecode /Length 2411 >> stream xڵYY6~Ue1@تlwST*ɾ$)1E}c'[ Ghu7W_ݪF)?Vob}arsuV^*oW6 82.q/|ϗzcgOFk_EQJ}*FyM| |^B-@݀f=}?ֳ0" gӡ{{ٻ DlU臡x)2L@QB$NhZT,4M|9H01抅a57& e1a^쳡̀1b?ӹlj⑏z˪~prm5Z ¥ٝF6@7:l5yXe-PuA?x>#68OYR-⁼A;D[[g}J+&AK]HS:6ύ-D;WCJՠB^!U lǂg<ӫ; zf0IkZְ{x){l5ؔ`b`uNjݢ4ppϱ-BKi?ID1M< Itm9YTGtZ {ZfӲEZcqE f!}*ieWޗ;[kνa "`>p7$@/D˰BBG233 SZYH]$M~11@#5]ѢMҩ]d{0DrJa>U ⌠&ji%cYUNخ}/y@7{ }S)F_hE=A eU)Ҕ4KЬRfؒ#G̴KD#S0vf?&AS#B2"Oyt:[Rj L!9k_R@kC9ꅗn%-$qbhD;%r.,+s$Z旽3:Vl6?lXgi^iܾgR$9׀/H(튃X+FW5K]UX1ϔFvM H'HRy-"I}M|BZ,w _+9+%pRC-Jw1pRe4Z-OlEP=]vsHA"%ig05fv2e j Ga$–Bxծ'2$2eC̍AOD W@ x75ׄy.|Ƌ掗1φ>!Zb2G+s1ǑH<*Fh(/m!cUY*ZՔ(~ 9NEG`p[aSkweO$Jj|2}yzʸH b m9BL$'荊(S(.^[B޴sy_,PTI9w>l 6$cX^ i/S='v"_a4 و^=hVtEfki?p>ى6;΅DcLu:+SGqNNyjƁ| N%ZdڜƧE)SD-FܧZ ~ l1,+rR] 6 wo+M)z+4DT> stream xڥXY~ׯ4mð䐁QXA.3CCyh{ܥ6J꫺^}Cڤjw82˒\$CȈx/#M_l{uFݦo7DG رtvUO2I) kIdWJ4-HĹ9ޫ<2}]c,Ys NXe'rrxdYX-$STQVH-5*޷1NFܺI5U! U.YwSt =i(:*Xm&E&ɢ;\֖]xg#bnl(V=v>ւ`)'l#^Wnߝg0ot.A7G erPuCc%AQu,GZ3Ԃ [h2+x/h沃OMG~x E.N cN!,ȭ՛ʋ_wK ㎣De($\beR m6+C!CUݗ䶟'D(}9ߗgxO}9"z lq2B+JYX%[z#&FAsfDd#񍟆:tw:|~~D)98d?nn_+@o O ˎM7ƮӘfFH$tb]&'i&L*[TGøD\d0~MDUFNg?I%.>y!O܌Q-K0  nkqLP* Qh`m1BJ· ϒ '$z 2lDo?Z¶& Qm􎶯$-cYMCoy/m", pɌ/˅Yգcyr_AiqN\Ogy>O)_ ՁenA{n^~0xCeG08h!@a"FCC2q'+g 4p ޓ.?%s!_8w>OѬymP[{,"WZ((R0TC{WzmK7ys I02L/IEV>Gwx'DjANC Lygk\ԣ}gqZUχ5!K%8A=O\kN#F[ʕcXٌ/xs/vmisj1^z61W^IbRt@H‡|u/W5޿ V&r2(XWu$c# lXoJ\rs`-[Ḁ!F4rѮr[Cv\_.'z _>BΰUWvSw=օXlU $FiՀ" !-m)fhf!C/ڒK.T j=сԛε|K?Y+tz}|op ND+^- F4pëS;endstream endobj 257 0 obj << /Filter /FlateDecode /Length 1769 >> stream xڵXI6WXIQKhmS㢇$ıh1$顿o!exPbs{B{HVBr[%X 0LV'ݯoGjTЌU@kFx ~x~ }%tbVƞlFĻkᄎ2vcYȽp7㖬_<4C.8#sd6+Md村W;╧j౲_T.~J~S.26M}JAiR]E#E(/T>ش7UW[lYn`Z-Z̎~Ma8ܟ:zBȩ0c۲=Y@)h1Dtb5L,fkJفI`c4 6Ym[lr*kKذ)^29hr jq:̲s̞qX"N{dRz@ˑA*ϖ"|0& ڇcIɰ_2L!++e 顯G)`EN A3Ωˍ)C{ZGΩ'',FKhM8OOtk^el2x9esV{,:+ jbŋX5X89@Uђ5dF "A%v1vd"M/(c~6 ȒZa] a!C+`+Er 4S;]]&F" JH |DU螄 /!TݩWƮAaҼt*>ؒa`@d}D71$Fκe=E5Dc+%S{T6\H@}lx_vpsΎU07mSQfY$ ! jZ֪Z񹘤GЩ;P#n(ۡpVUec#LU|ݻ\S ^v}V #Gsz1hJ+ctCa9V(܇g<օ_e)haZ`GA$YW;a]W[n]EdIa')'nI a];wmwOWEFb㧆xpUXyIr|.Q4VvYoki 04dޗ5kx|[/UIh :a=etI#U5T1jd S/q?7t1 4dV q.=N ‡}sR>u~.  {/bOmTNG<d_..Vo7(y6\v Kx,$e> stream x}T;0 +L2l)zCz[IXJ.%E9/]l)}^/^yqRzUu*eYfBTѺξUtfMpbQ,#8K41?#bzC kKDۇdN`d4ʍvzhU^OW)j+ P6^6%M'\BHjG%4n閐X&Z8"dܞy͹a-2Bp+!hpA?Oxj\@a2n;/+y $H[`l?'!u~@<)*ԘiQSH.XxDsB^popLf}Ҙ‘_y> stream xڍX[sۺ~ϯ F=9I|2nci,CBN_߽dS.]ͫ7tLݬfeHf/q0_HQu3am%ԊF};#:ǾjZ yIVKcs䖿>8mzI@!KQ ;rqu4,=/us|_7q(S5ж]S*hISP!.AL( f ўഭdlA[1FmvVB]b_j׵PY= +2&߫{xƲڰՎ,nxWTwb0cQ#TG\\}7\lVOѲ㳗ڢ𿶛:4 Brtkh汯)q&QF(@ZX@#P3@#< uIK,TbA5oء7ysw7K5Nՙ`q<>lTݣpE[Xbc=b{?%p'PP`e)V TsQЪf58vO^/=ri8!JݎzL3A&"kq$*pSt92:OOt|dFkfS&Hvv\`J0R<t#p%֛KtкHփ/w']E{Ɯ:P܁u ?XMr@$DZ\X@,1DA|eçAux3iNRS:Dd5a\htWM2%R AjV?ZkdfV9(Uh'.ZU(uBB Ւqs|RKBąWp\MfT.w1TL`+N%} 'I{aֱ`µ2tT<En96:dh̋L|&!Tn61w,>& bpaThzv يL]l`ES>ReC5  *]&נ#72⊣,O|(9. q'<EX HfO` t%'o 95A#wkJ$+@-FIʻDx vPE8(ԷdɯtYbw,ufBR8In}7.j@m~Pcb+<#v\A/ӟ#!lјtd vک%"ruʌLvd]@02٩A{*MG-r(-D!2[q&qz>ibqn9 AFLHMC zI `4`f{tl 7Dm/r@<=R }!@LO1np.`*y9ᚈgB} (+3 AD mO}]H]ls!Z#^Ol`Z&p܋jJ&j}׃ۆ[Ǵw:N=EKߓx \>=R#-g1 :Wo(I_t܊1(oU!|; Uj#tOEt kځKLu|Q}0-IVz=CT5\| w3Es+pް13` N[q/1hkնVx۩ZD#MZzk]]:&|@i1SK xV 5};dX(n[>?eG;q;tDޣcFx]3J_% > m-KC˥g>B> stream xڍ˒۸P%T%WWR̖=p(jeԒdz_~9^Dn_}^ts{&O81մUQ,fFvi}ݦy9phxi?O۟oLUn<&! |Nl!8i`kSƩVBy=>4CFǤqĻ 05iNec;"gWdpG.Wj&Faj$٥e'IRnvXz]mwƼ$+NT#~Z4ݪr+* hpN$.TmvK3kYTj`ou=TU5?>CV >mKN?l"}wtRAY eqZjt.0 a^ 7# b-2x6^F߅4H3*(udQ@:tu_v#y8FG#E4]<l~j!Aw( 4B<3x3*>o_Uߡ&^hܑc5DTZdG~HqMyYJ_S& <h䠕~˥HYş;)@šĽ~,[&lYa8r><;H tdST]IۜAGZWm\|R<5.<4X*<¡Hx#@!9+U:c1J{iя4YkXG Mݴ FRU< $x?7!:+ፁ4=yK׭hg,NkL()WN[&V$?Nåf@%J(? yeݜլ6ݽ Ҟ)MQ}t,w "IzͺqSW,bF}Nrݍ9Z(xmiRnyu _d~qre"TGQ(]yG;*c>a #HKο1xr ĘpԪJA`9),Ŋ2p,c}y3qXe|Hb(r.3`5Zx?ChPq evXi å?=Fo[2K %tOk?Si\dnW{h K"=>rLkH~K4=m 4(nMs 4ReWDKԌzzXDs0^WL(IIcMĪi]BeM-xP93=5tPtV*K6gUNKzBIؓ@+ͤJc u; AHrWݜo}Arz\)fPₛK(UPc=]\h2Vv@w%(fjq)lI78o:io2Ai,RJzRwɳޱ; ${m\p<:p/m?o=&!=gX6+c\ H1g]ʭ Sv-le%7; ovo{~xR}7f/'LTál3]-혨-U\LI6ڞwA[lfv5x 끟H$Ho)f,+8LH۟'sOKLDoyJB#{386)pG˺=< s߸ gz1l =twƬY > stream xڕXrF}WReNԖN޵-'8M9$Cr$k>8șDya g?&ygכ48K(;.?9k,N@` 8srj4t<ex>ơwhGH<_;[EhҞ+{+"jGvNrND7O)"2H xj*O݀pUW^Z b?oaܑ4v^ҸZN~ u[8#Uw]/Qώ 7ԍ4 f5x5l7 F("HU9-Cr1 ny ڪ"%˰5WgolͤBYkԳEtVg@4v"شDW;ɺ&.2euiHk 6.Έ6Jêܪgn`{#cw(! KfG:,&hq2бt,CwBNݨPl92X;˺ӳ<a-l; (Y;#\M[Bgڊ20ƣ8a/ 㺛'DX%E?sXYz˙!&piI=#c:=ĩgiLV)=[K;%03|y';gVth(\tUҊ@ g ,DPB@(ŋSc]B;Jxɕ odi`L S%^ꑻ8BycWC/Ug3qi ۊe B o z+F>#ʹku*z83b7Fֶl}qA$/\N<+]S/FAňu. 3pg]>"G~q7t-F7> @ # ˆI_ѢT,-9Üxc}@3eg ~6J)|ۚ+ y|[}Fًwј/_j7K3`dx'_#b3!O8b}Aff7ĺ\#R^pʃILB Uඓڮ =TgF]';R蹁>!6J#Da~!D|kF#E) n -#GH&6k4ibIbQv756q]PByɤƣwfLO)^pRpE˅E*X1=yeXaҊS0Z9>(P%f Tq<+K `?s2ݎ O>s+h4KkRB_#}޼9*ΖYzAVGD1H_I[Dp,t4#;K)nTဎ_Y (,>zh(Kig| _.QNi;ss.oqr= e4Ԋ/7'!- ӱ0ɣHbD9%T/S Ε>j|b F>h!  7\dm "^S`ie6k#!pּ"Vڵr;-`W1nz(1i vm1ظL6^CyfӵU{ڿty {4%QQ?veݝ>[Iz\ah,hbtoiBO  ?K{?# G%ĨKM @T,V@ 뎉BZ4 > qIݒSK(g|TSĨ3ڽ.{?F"?s,J4K;=:x~fp`Şq,:ZaF'PNj8cb%xendstream endobj 262 0 obj << /Filter /FlateDecode /Length 1463 >> stream xڅWKo6W=Q@mE6@Z,P`kכK "Ùo|XD&qOC;DeeY{RyĪ qFn !W }fJo`< G n=N~1>8-iV#j&:o@u<B  u:Y/&40)W-h<\n [=4" Z7]ҤPL:6]PF&*7&*v> 4-Z^7~apft} h>c|zH=;"Lg7r{#m=qHcMG} zBn9"G5YqŶ"@5tlE8kXw`6"@PG%ä{,Vg_ZWȣf#;#{}BJj#wأyjNJ7usFssnXIɍTVUKg5ت+ǁOe-Өʇ!9*HRM,4>5S |bWeXEE~z-FpR))5cnkQpRǛ/- ~iH징ehB y#V|xum]ۺFEyA)2<.V^ ACO:x>Y-I0;COnZݯw0endstream endobj 263 0 obj << /Filter /FlateDecode /Length 1522 >> stream xڵWKs6WVj&B б:MŞɡ遦(D|>@c/$,oׯ\LiDήWDbeEdv;xI|!/$?gl2RdyUF&k74sLJQL-ŚʄDCc)lư%Z)ėe{i #o%4پ.p0 P— |#|*쓠x0M#뜻M202Sn/L( l"a}ɓn`3vEY\+YKt iˀBpp}/k8_?}A=юݸ[s}GkKbwMjFA(,S0"BqCW؟^pSHF lrnM%߫t!E~qvIDIQ)gهDz@ h *D@@>3s o$L)4'⃫Mi7|Pl6_rh77JI0l!XnՕD8j:bز}kKmCg_S{ڤR @QqyJL!]#ES#8o=:j)t=UW<RMKK7>U]^%B;&U:lX?>Ÿ+ɢ+/ʌDeSUA4].<۪m/+}|-(-$7zTĬ6?r._( Z|V 7B tW9qGTUDDyHI,1t݇YGd;@ W:n"Tߥи~z@sMY[żGGIy>%6kSwƜ;&$ ~Qxdj~ZH0G9NN@AQ --. Bd՚ M׸פW~]:tS&ڏ"*(7D*z au$/IcwN06R yÅ{cO n:]s5 ߫nI.=ly!:~WktX(8S6ulq- U\VOub)ᕉnR_!$W%0,?84 DiѧA+ m@cٶ[`JVr PFB3B-RZix?eDanY [^gYaB]t#*^~endstream endobj 264 0 obj << /Filter /FlateDecode /Length 2366 >> stream xڵYr6}RUC\IcgRْ=U-B6+%);߾X3/"@ Чiw߿L87F]oβ4 -#(I9')Wyt^6)k 2ܺ/^-E?{٣uokۺr2D?LXh]|&巍$y"p`cgvc F#vm +06ߧ^{_2:ޭ18B-e83Hul)RK#F 3*[&v'Kގ +X! `puu{hLLpIk'\;I)J^}r2U? u_$QN `{K'"11%+PQ'It8GC#P 4м95^LE ~v{O3gApeD;A`eʦ-d0$H\QSW @BlT7jVp/. `&sq00=ag_/fqPeQ>(/TxE#NzulO7u*hW VB~dSrvZONU  >ͻݱhQo)qꖛG$0mgGÚވvo6O31mJh419wmmYYSȘ vo{(uH2m(}ϴDfM~rzy4.!A`,]9 $y[= AJx nv7,Ǹ_~$ǑbI}Gȴ>/Ț&ޥiΕs$ %N7#\KE nl7,OjNkV/Tf^cX< DeEhzPxB84S ͹,7qbD:i~~ y׺] @6^DvrqO+d(e&.r9vQ>BHS @'%#ѯ7)llLw9^QF\?͛EBFj쭍y  |`FxO"}'|dD_Zo-Xsڎtr1u108jnB5phG|_ETNxTԭ>tџ&ϣ۶!{&nיz5^iW:Y(<3.2 4!Ԏ0?S\ecHs5aMYGi;NڛV Tp vñԔ ouݳbێ̔U}}]|+?yz}2ˢ3inƱ}TOdsEƕE\at_1 |}7\2drO\5m;(q%0zzY(=|ft̺ ?Oް?v>9R~\EPDNqſA7 ?=Qܻ+ll}ՄJ Pպ:^@ l2n1Ȍk& (㷤"jfFǬDE*Pr ؜J"AXʋ}L 37|\D2Qf:уAAe4С@hv^(=?Y |ѣLLE8|uKst825}7Orw>x#r'rA?ބjYz9XMzOs9x9}c΁K@ɸU yJƣ73A b*ݰg[|g9a5+{As9L>G|m0aUsx(7V#ʪtLAZ@@yj:~:zendstream endobj 265 0 obj << /Filter /FlateDecode /Length 933 >> stream xڵUM0ﯨ89; 7V^Jo!m6l]=3MQWH+q'x=nv)yeVF3)DɅ1dƾ Yd?f_~tb fxK&sEj4]Xe`,?PLYf*L _p(ɾ&[%;`@4%8:kڑ`v{ ב =ڥ`m}ʰ-N\n%=fi6!/`prxn,0stU&˥_B)OҸr%4bocrc:˭a?evM?\["-;|h3֡A[N^r.WRs }뮷n"|@b&@pvz%TXqRG9D]#'Aii2)n70rw8C{a< --9߇:U6\qv CMp=9v8<@#2iJPk'(DO[G%Jtn`H@Rcb .AĀI Ax<|ӽX1/dPMc vxu}ezAPe/9>"2H v+R6yn˂s5 z lS=9+ƻH ]64h+G% :~% t3Ⱥ.t=? n) tJyET}.2MH&1ptVKk:s sI.˒K o)wp1Do>n,=Dendstream endobj 266 0 obj << /Filter /FlateDecode /Length 2128 >> stream xڝXM6WLaCU8$~岥;6039ERv R eW"@t~u('iNuF''oyq_NW]5͟ߞ]IY)NU^>ϗ=L Om@'W- 7z)ڪu7N~ @4HR ~ 9/vzQ7]t֩~wJuQ0xW-vhiɻڦŌC>cmp̕%q$OR|bIY uLOAyr-y7h]qyyE^K/gXE=!5y#Eۦ0Pt &әߣ˝[X=׽(k+B zJ#wlʺ L%Xk{æiF"R7JIhcg~-5qK"+¾X*9)nnms(R0d~v̼Wn%ZFҷ^!܎yB.+T7E ><"eW3;+GٙW؎{Kvk+Wzۙ뀬 NNs(V=w(zs.,˭ԛhpPheرGJcVVP\rY}4˂yP=ciQX&(wQbCE@׹r(3U@рYV7]fv"G*2uNʗ]. (ȄT, Us r$FoHF"bcd'@| B"޻fK030sR{Rsa@ɯ6ǝ6xDsm]$g_bN,}~&N P|:yax3Jo+FhJR߷g=g>MioE,%yBi#~ʁMod06dȁ3[/ 2\r|Q%I˱+a#; 6]47!X~QtŹꏔVzje%ocQFB^("nUvt,}HI 'hxF_uwSl (׽U(0( 6m \✓!F6*WO+FV,['RW/ߜ*ґD˛ x@G\гb :IGڄG>\jj5&z yk(+1+qz[]e=_+" )/_?¾N+C u]x\K;KޗZHbBƤ+$f z^]_>endstream endobj 267 0 obj << /Filter /FlateDecode /Length 1900 >> stream xڥX[s۶~ϯ'j& t:J&Nvi@KcԐT%g/et3EX~?Hw"ȌQ'7˓TfGt˗rYBYMd{o'S}? Yto{?q.OaX'i>D(m(ڮs t/-E=uyUv_C=>.TjW}Ę(ǝeS3tzEq(Rţhz^^umR{ӥm L̢fUW ;w`k{w`DLPtpSg١.K^td*ىmϒ#?=?"W0xZ[]bOUF찛vk\UWLoԢ[+_$3)ؙ(M(2 Q`%j#,:Kg=3 XG$ xW,-aMw3q~S 3*j 䚏(ȳ *dWVl W&qePATvFGT6~kq -_l0]L5>7.:uݰPcu,hc= #n?KPIĝBŒq w3}eOzެ7Uܿ3$&)9\ZN3[6f5Ϊhdq\]y咀m՗ʯ@M֛-.CFSb2%s@VE(y'E n?n[We5\=Ry^zΗ2e8H Pa{øeK \>1{ 3KѿvEn R'x%cv=E>; *f.]!wO. /j i)sV2=SMl}!{u.zO<3oZxڡFz8mpm#S*N'^hϩ׀36Ҷģy;^@Ǝ)[ deܵ*~_6$.쐣Gi2-1>N?T.\+sA"tO2כWֈ۶\qLKIS7]PP~IJn_5\jd ^:MkFc tﳁ3,Rh,&H/JBa,[` Gӿc1BlifN13TU~7l* EޏX SoP[sa eug q/g[r,C4HazQ1i ;fXXrAH;aE{1k;A,]`e/m{Z#3es;*s-|mȽ{(P|>~#w5G(oQB;,Pb[#fT%Qтx ܫUnoqbe+S#WgMEbQh9X]]I' Zeendstream endobj 268 0 obj << /Type /XRef /Length 275 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 101 0 R /Root 100 0 R /Size 269 /ID [<374aec250924a49e93508620ee1ac3ba>] >> stream xcb&F~0 $8JT#3@ v@-"@$G/d  j "9H`] RDKH^A̮&V0#,2d>0[}8GI&x^Ȟ㠴bkv;8Ā9 "gs8 [F`8XkxWU`59u_8eׂn b3*B,6X, 1.- endstream endobj startxref 281283 %%EOF MatchIt/inst/doc/matchit.pdf.asis0000644000175100001440000000017113075401340016421 0ustar hornikusers%\VignetteIndexEntry{MatchIt: Nonparametric Preprocessing for Parametric Causal Inference} %\VignetteEngine{R.rsp::asis} MatchIt/tests/0000755000175100001440000000000013075246077012776 5ustar hornikusersMatchIt/tests/testthat.R0000644000175100001440000000007213075246077014760 0ustar hornikuserslibrary(testthat) library(MatchIt) test_check("MatchIt") MatchIt/tests/testthat/0000755000175100001440000000000013075407325014631 5ustar hornikusersMatchIt/tests/testthat/test-get_matches.R0000644000175100001440000003016713075246077020230 0ustar hornikusers library(testthat) library(MatchIt) data("lalonde") context("get_matches") test_that("can get correct matches, exact", { # preliminaries m.out <- matchit(treat ~ educ + black + hispan, data = lalonde, method = "exact") n_matched <- sum(m.out$nn[2,]) nms_matched <- names(m.out$subclass[!is.na(m.out$subclass)]) lalonde$id <- 1:nrow(lalonde) lalonde2 <- lalonde[sample.int(500, 3000, replace=TRUE),] matches <- get_matches(m.out, lalonde) matches2 <- get_matches(m.out, model_frame= lalonde, id_cols= "id", newdata= lalonde2) # tests -- no newdata expect_equal(n_matched, nrow(matches)) expect_equal(sum(matches$treat), m.out$nn[2,2]) expect_equal(nrow(matches) - sum(matches$treat), m.out$nn[2,1]) expect_equal(sum(is.na(matches)), 0L) expect_equal(names(matches), c(names(lalonde), "weight")) expect_equal(ncol(matches), ncol(lalonde) + 1) expect_true(all(matches[matches$treat == 1,]$weight == 1)) expect_true(all(matches$weight %in% m.out$weights)) expect_true(all(rownames(matches) %in% nms_matched)) expect_true(all(nms_matched %in% rownames(matches))) # tests -- newdata expect_equal(sum(is.na(matches2)), 0L) expect_true(all(names(matches2) %in% c(names(lalonde2), "weight"))) expect_true(all(c(names(lalonde2), "weight") %in% names(matches2))) expect_equal(ncol(matches2), ncol(lalonde2) + 1) expect_true(all(matches2[matches2$treat == 1,]$weight == 1)) expect_true(all(matches2$weight %in% m.out$weights)) }) test_that("can get correct matches, nearest", { m.out <- matchit(treat ~ re74 + re75 + educ + black + hispan + age, data = lalonde, method = "nearest") n_matched <- sum(m.out$nn[2,]) nms_matched <- c(rownames(m.out$match.matrix), c(m.out$match.matrix)) lalonde$id <- 1:nrow(lalonde) lalonde2 <- lalonde[sample.int(500, 3000, replace=TRUE),] matches <- get_matches(m.out, lalonde) matches2 <- get_matches(m.out, model_frame= lalonde, id_cols= "id", newdata= lalonde2) # tests -- no newdata expect_equal(n_matched, nrow(matches)) expect_equal(sum(matches$treat), m.out$nn[2,2]) expect_equal(nrow(matches) - sum(matches$treat), m.out$nn[2,1]) expect_equal(sum(is.na(matches)), 0L) expect_equal(names(matches), c(names(lalonde), "weight")) expect_equal(ncol(matches), ncol(lalonde) + 1) expect_true(all(matches[matches$treat == 1,]$weight == 1)) expect_true(all(matches$weight %in% m.out$weights)) expect_true(all(rownames(matches) %in% nms_matched)) expect_true(all(nms_matched %in% rownames(matches))) # tests -- newdata expect_equal(sum(is.na(matches2)), 0L) expect_true(all(names(matches2) %in% c(names(lalonde2), "weight"))) expect_true(all(c(names(lalonde2), "weight") %in% names(matches2))) expect_equal(ncol(matches2), ncol(lalonde2) + 1) expect_true(all(matches2[matches2$treat == 1,]$weight == 1)) expect_true(all(matches2$weight %in% m.out$weights)) }) test_that("can get correct matches, full", { # preliminaries m.out <- matchit(treat ~ age + educ + black + hispan + married + nodegree + re74 + re75, data = lalonde, method = "full") n_matched <- sum(m.out$nn[2,]) nms_matched <- names(m.out$subclass[!is.na(m.out$subclass)]) lalonde$id <- 1:nrow(lalonde) lalonde2 <- lalonde[sample.int(500, 3000, replace=TRUE),] matches <- get_matches(m.out, lalonde) matches2 <- get_matches(m.out, model_frame= lalonde, id_cols= "id", newdata= lalonde2) # tests -- no newdata expect_equal(n_matched, nrow(matches)) expect_equal(sum(matches$treat), m.out$nn[2,2]) expect_equal(nrow(matches) - sum(matches$treat), m.out$nn[2,1]) expect_equal(sum(is.na(matches)), 0L) expect_equal(names(matches), c(names(lalonde), "weight")) expect_equal(ncol(matches), ncol(lalonde) + 1) expect_true(all(matches[matches$treat == 1,]$weight == 1)) expect_true(all(matches$weight %in% m.out$weights)) expect_true(all(rownames(matches) %in% nms_matched)) expect_true(all(nms_matched %in% rownames(matches))) # tests -- newdata expect_equal(sum(is.na(matches2)), 0L) expect_true(all(names(matches2) %in% c(names(lalonde2), "weight"))) expect_true(all(c(names(lalonde2), "weight") %in% names(matches2))) expect_equal(ncol(matches2), ncol(lalonde2) + 1) expect_true(all(matches2[matches2$treat == 1,]$weight == 1)) expect_true(all(matches2$weight %in% m.out$weights)) }) test_that("can get correct matches, optimal", { ratio <- 2 m.out <- matchit(treat ~ re74 + re75 + age + educ, data = lalonde, method = "optimal", ratio = ratio) n_matched <- sum(m.out$nn[2,]) nms_matched <- c(rownames(m.out$match.matrix), c(m.out$match.matrix)) lalonde$id <- 1:nrow(lalonde) lalonde2 <- lalonde[sample.int(500, 3000, replace=TRUE),] matches <- get_matches(m.out, lalonde) matches2 <- get_matches(m.out, model_frame= lalonde, id_cols= "id", newdata= lalonde2) # tests -- no newdata expect_equal(n_matched, nrow(matches)) expect_equal(sum(matches$treat), m.out$nn[2,2]) expect_equal(nrow(matches) - sum(matches$treat), m.out$nn[2,1]) expect_equal(sum(is.na(matches)), 0L) expect_equal(names(matches), c(names(lalonde), "weight")) expect_equal(ncol(matches), ncol(lalonde) + 1) expect_true(all(matches[matches$treat == 1,]$weight == 1)) expect_true(all(matches$weight %in% c(1, 1 / ratio))) expect_true(all(rownames(matches) %in% nms_matched)) expect_true(all(nms_matched %in% rownames(matches))) # tests -- newdata expect_equal(sum(is.na(matches2)), 0L) expect_true(all(names(matches2) %in% c(names(lalonde2), "weight"))) expect_true(all(c(names(lalonde2), "weight") %in% names(matches2))) expect_equal(ncol(matches2), ncol(lalonde2) + 1) expect_true(all(matches2[matches2$treat == 1,]$weight == 1)) expect_true(all(matches2$weight %in% c(1, 1 / ratio))) }) test_that("can get correct matches, subclass", { m.out <- matchit(treat ~ re74 + re75 + educ + black + hispan + age, data = lalonde, method = "subclass") n_matched <- sum(m.out$nn[2,]) nms_matched <- names(m.out$subclass[!is.na(m.out$subclass)]) lalonde$id <- 1:nrow(lalonde) lalonde2 <- lalonde[sample.int(500, 3000, replace=TRUE),] matches <- get_matches(m.out, lalonde) matches2 <- get_matches(m.out, model_frame= lalonde, id_cols= "id", newdata= lalonde2) # tests -- no newdata expect_equal(n_matched, nrow(matches)) expect_equal(sum(matches$treat), m.out$nn[2,2]) expect_equal(nrow(matches) - sum(matches$treat), m.out$nn[2,1]) expect_equal(sum(is.na(matches)), 0L) expect_equal(names(matches), c(names(lalonde), "weight")) expect_equal(ncol(matches), ncol(lalonde) + 1) expect_true(all(matches[matches$treat == 1,]$weight == 1)) expect_true(all(matches$weight %in% m.out$weights)) expect_true(all(rownames(matches) %in% nms_matched)) expect_true(all(nms_matched %in% rownames(matches))) # tests -- newdata expect_equal(sum(is.na(matches2)), 0L) expect_true(all(names(matches2) %in% c(names(lalonde2), "weight"))) expect_true(all(c(names(lalonde2), "weight") %in% names(matches2))) expect_equal(ncol(matches2), ncol(lalonde2) + 1) expect_true(all(matches2[matches2$treat == 1,]$weight == 1)) expect_true(all(matches2$weight %in% m.out$weights)) }) test_that("can get correct matches, genetic", { ## this one is problematic -- problematic returns m.out <- matchit(treat ~ age + educ + black + hispan + married + nodegree + re74 + re75, data = lalonde, method = "genetic") n_matched <- sum(m.out$nn[2,]) nms_matched <- c(rownames(m.out$match.matrix), m.out$match.matrix[,1], m.out$match.matrix[which(!is.na(m.out$match.matrix[,2])), 2]) lalonde$id <- 1:nrow(lalonde) lalonde2 <- lalonde[sample.int(500, 3000, replace=TRUE),] matches <- get_matches(m.out, lalonde) matches2 <- get_matches(m.out, model_frame= lalonde, id_cols= "id", newdata= lalonde2) # tests -- no newdata expect_equal(n_matched, nrow(matches)) expect_equal(sum(matches$treat), m.out$nn[2,2]) expect_equal(nrow(matches) - sum(matches$treat), m.out$nn[2,1]) expect_equal(sum(is.na(matches)), 0L) expect_equal(names(matches), c(names(lalonde), "weight")) expect_equal(ncol(matches), ncol(lalonde) + 1) expect_true(all(matches[matches$treat == 1,]$weight == 1)) expect_true(all(rownames(matches) %in% nms_matched)) expect_true(all(nms_matched %in% rownames(matches))) # tests -- newdata expect_equal(sum(is.na(matches2)), 0L) expect_true(all(names(matches2) %in% c(names(lalonde2), "weight"))) expect_true(all(c(names(lalonde2), "weight") %in% names(matches2))) expect_equal(ncol(matches2), ncol(lalonde2) + 1) expect_true(all(matches2[matches2$treat == 1,]$weight == 1)) }) test_that("can get correct matches, cem", { library(cem) m.out <- matchit(treat ~ age + educ + black + hispan + married + nodegree + re74 + re75, data = lalonde, method = "cem") n_matched <- sum(m.out$nn[2,]) nms_matched <- names(m.out$subclass[!is.na(m.out$subclass)]) lalonde$id <- 1:nrow(lalonde) lalonde2 <- lalonde[sample.int(500, 3000, replace=TRUE),] matches <- get_matches(m.out, lalonde) matches2 <- get_matches(m.out, model_frame= lalonde, id_cols= "id", newdata= lalonde2) # tests -- no newdata expect_equal(n_matched, nrow(matches)) expect_equal(sum(matches$treat), m.out$nn[2,2]) expect_equal(nrow(matches) - sum(matches$treat), m.out$nn[2,1]) expect_equal(sum(is.na(matches)), 0L) expect_equal(names(matches), c(names(lalonde), "weight")) expect_equal(ncol(matches), ncol(lalonde) + 1) expect_true(all(matches[matches$treat == 1,]$weight == 1)) expect_true(all(matches$weight %in% m.out$weights)) expect_true(all(rownames(matches) %in% nms_matched)) expect_true(all(nms_matched %in% rownames(matches))) # tests -- newdata expect_equal(sum(is.na(matches2)), 0L) expect_true(all(names(matches2) %in% c(names(lalonde2), "weight"))) expect_true(all(c(names(lalonde2), "weight") %in% names(matches2))) expect_equal(ncol(matches2), ncol(lalonde2) + 1) expect_true(all(matches2[matches2$treat == 1,]$weight == 1)) expect_true(all(matches2$weight %in% m.out$weights)) }) l_treat <- do.call("rbind",replicate(10, lalonde[lalonde$treat == 1, ], simplify = FALSE)) l_contr <- do.call("rbind",replicate(3, lalonde[lalonde$treat == 0, ], simplify = FALSE)) l2 <- do.call("rbind", list(l_treat, l_contr)); rm(l_treat, l_contr) rownames(l2) <- 1:nrow(l2) test_that("correct weights for replace= TRUE", { m.out <- matchit(treat ~ re74 + re75 + educ + black + hispan + age, data = l2, method = "nearest", replace= TRUE) n_matched <- sum(m.out$nn[2,]) nms_matched <- c(rownames(m.out$match.matrix), c(m.out$match.matrix)) matches <- get_matches(m.out, l2) exp_wts <- c(1, unique(as.vector(table(m.out$match.matrix)))) # tests -- no newdata expect_equal(n_matched, nrow(matches)) expect_equal(sum(matches$treat), m.out$nn[2,2]) expect_equal(nrow(matches) - sum(matches$treat), m.out$nn[2,1]) expect_equal(sum(is.na(matches)), 0L) expect_equal(names(matches), c(names(lalonde), "weight")) expect_equal(ncol(matches), ncol(lalonde) + 1) expect_true(all(matches[matches$treat == 1,]$weight == 1)) expect_true(all(matches$weight %in% exp_wts)) expect_true(all(rownames(matches) %in% nms_matched)) expect_true(all(nms_matched %in% rownames(matches))) }) test_that("correct weights for replace= TRUE; test2", { m.out <- matchit(treat ~ re74 + re75 + educ + black + hispan + age, data = l2, method = "cem") n_matched <- sum(m.out$nn[2,]) nms_matched <- names(m.out$subclass[!is.na(m.out$subclass)]) matches <- get_matches(m.out, l2) exp_wts <- c(1, unique(as.vector(table(m.out$match.matrix)))) # tests -- no newdata expect_equal(n_matched, nrow(matches)) expect_equal(sum(matches$treat), m.out$nn[2,2]) expect_equal(nrow(matches) - sum(matches$treat), m.out$nn[2,1]) expect_equal(sum(is.na(matches)), 0L) expect_equal(names(matches), c(names(lalonde), "weight")) expect_equal(ncol(matches), ncol(lalonde) + 1) expect_true(all(matches[matches$treat == 1,]$weight == 1)) expect_true(all(matches$weight %in% m.out$weights)) expect_true(all(rownames(matches) %in% nms_matched)) expect_true(all(nms_matched %in% rownames(matches))) }) MatchIt/NAMESPACE0000644000175100001440000000125613075246077013057 0ustar hornikusers# Generated by roxygen2: do not edit by hand S3method(get_matches,matchit) S3method(plot,matchit) S3method(plot,matchit.subclass) S3method(plot,summary.matchit) S3method(print,matchit) S3method(print,matchit.exact) S3method(print,matchit.full) S3method(print,matchit.subclass) S3method(print,summary.matchit) S3method(print,summary.matchit.exact) S3method(print,summary.matchit.subclass) S3method(summary,matchit) S3method(summary,matchit.exact) S3method(summary,matchit.full) S3method(summary,matchit.subclass) export(get_matches) export(help.matchit) export(is.matchit) export(match.data) export(matchit) export(user.prompt) import(MASS) import(graphics) import(stats) import(utils) MatchIt/demo/0000755000175100001440000000000013060361515012545 5ustar hornikusersMatchIt/demo/genetic.R0000644000175100001440000000101713060361515014305 0ustar hornikusers#### #### demo file for Genetic Matching #### ## loading the lalonde data data(lalonde) ## using logistic propensity score as one of the covariates m.out <- matchit(treat ~ age + educ + black + hispan + married + nodegree + re74 + re75, data = lalonde, method = "genetic", distance = "logit") user.prompt() ## printing a short summary print(m.out) user.prompt() ## numerical balance diagonstics s.out <- summary(m.out, standardize=TRUE) print(s.out) user.prompt() ## graphical balance diagnostics plot(m.out) plot(s.out) MatchIt/demo/match.data.R0000644000175100001440000000204413060361515014674 0ustar hornikusers### ### An Example Script for Obtaining Mathced Data ### ## load the Lalonde data data(lalonde) user.prompt() ## perform nearest neighbor matching m.out1 <- matchit(treat ~ re74 + re75 + age + educ, data = lalonde, method = "nearest", distance = "logit") user.prompt() ## obtain matched data m.data1 <- match.data(m.out1) user.prompt() ## summarize the resulting matched data summary(m.data1) user.prompt() ## obtain matched data for the treatment group m.data2 <- match.data(m.out1, group = "treat") user.prompt() summary(m.data2) user.prompt() ## obtain matched data for the control group m.data3 <- match.data(m.out1, group = "control") user.prompt() summary(m.data3) user.prompt() ## run a subclassification method m.out2 <- matchit(treat ~ re74 + re75 + age + educ, data=lalonde, method = "subclass") user.prompt() ## specify different names m.data4 <- match.data(m.out2, subclass = "block", weights = "w", distance = "pscore") user.prompt() ## print the variable names of the matched data names(m.data4) MatchIt/demo/analysis.R0000644000175100001440000000641713060361515014523 0ustar hornikusers### ### Example 1: calculating the average treatment effect for the treated ### ## load the Lalonde data data(lalonde) ## load Zelig package: if not already installed, try install.package("Zelig") library(Zelig) ## propensity score matching m.out1 <- matchit(treat ~ age + educ + black + hispan + nodegree + married + re74 + re75, method = "nearest", data = lalonde) user.prompt() ## fit the linear model to the control group controlling for propensity score and ## other covariates z.out1 <- zelig(re78 ~ age + educ + black + hispan + nodegree + married + re74 + re75 + distance, data = match.data(m.out1, "control"), model = "ls") user.prompt() ## set the covariates to the covariates of matched treated units ## use conditional prediction by setting cond = TRUE. x.out1 <- setx(z.out1, data = match.data(m.out1, "treat"), fn = NULL, cond = TRUE) user.prompt() ## simulate quantities of interest s.out1 <- sim(z.out1, x = x.out1) user.prompt() ## obtain a summary print(summary(s.out1)) user.prompt() ### ### Example 2: calculating the average treatment effect for the entire sample ### ## fit the linear model to the treatment group controlling for propensity score and ## other covariates z.out2 <- zelig(re78 ~ age + educ + black + hispan + nodegree + married + re74 + re75 + distance, data = match.data(m.out1, "treat"), model = "ls") user.prompt() ## conducting the simulation procedure for the control group x.out2 <- setx(z.out2, data = match.data(m.out1, "control"), fn = NULL, cond = TRUE) user.prompt() s.out2 <- sim(z.out2, x = x.out2) user.prompt() ## Note that Zelig calculates the difference between observed and ## either predicted or expected values. This means that the treatment ## effect for the control units is actually the effect of control ## (observed control outcome minus the imputed outcome under treatment ## from the model). Hence, to combine treatment effects just reverse ## the signs of the estimated treatment effect of controls. ate.all <- c(s.out1$qi$att.ev, -s.out2$qi$att.ev) user.prompt() ## some summaries ## point estimate print(mean(ate.all)) user.prompt() ## standard error print(sd(ate.all)) user.prompt() ## 95% confidence interval print(quantile(ate.all, c(0.025, 0.975))) user.prompt() ### ### Example 3: subclassification ### ## subclassification with 4 subclasses m.out2 <- matchit(treat ~ age + educ + black + hispan + nodegree + married + re74 + re75, data = lalonde, method = "subclass", subclass = 4) user.prompt() ## controlling only for the estimated prpensity score and lagged Y within each subclass ## one can potentially control for more z.out3 <- zelig(re78 ~ re74 + re75 + distance, data = match.data(m.out2, "control"), model = "ls", by = "subclass") user.prompt() ## conducting simulations x.out3 <- setx(z.out3, data = match.data(m.out2, "treat"), fn = NULL, cond = TRUE) user.prompt() ## for the demonstration purpose, we set the number of simulations to be 100 s.out3 <- sim(z.out3, x = x.out3, num = 100) user.prompt() ## overall results print(summary(s.out3)) user.prompt() ## summary for each subclass print(summary(s.out3, subset = 1)) user.prompt() print(summary(s.out3, subset = 2)) user.prompt() print(summary(s.out3, subset = 3)) MatchIt/demo/exact.R0000644000175100001440000000054413060361515013777 0ustar hornikusers### ### An Example Script for Exact Matching ### ## laod the Lalonde data data(lalonde) ## exact matching m.out <- matchit(treat ~ educ + black + hispan, data = lalonde, method = "exact") user.prompt() ## print a short summary print(m.out) user.prompt() ## balance diagnostics through statistics print(summary(m.out, covariates = T)) MatchIt/demo/nearest.R0000644000175100001440000000555013060361515014336 0ustar hornikusers### ### An Example Script for Nearest Neighbor Matching ### data(lalonde) user.prompt() ## 1:1 Nearest neighbor matching m.out <- matchit(treat ~ re74 + re75 + educ + black + hispan + age, data = lalonde, method = "nearest") ## print a short summary print(m.out) user.prompt() ## balance diagnostics through statistics s.out <- summary(m.out, standardize=TRUE) print(s.out) user.prompt() ## balance diagnostics through graphics plot(m.out) user.prompt() plot(m.out, type="jitter") user.prompt() plot(m.out, type="hist") user.prompt() plot(s.out) ## 2:1 Nearest neighbor matching m.out1 <- matchit(treat ~ re74+re75+age+educ, data=lalonde, method = "nearest", distance = "logit", ratio=2) user.prompt() ## print a short summary print(m.out1) user.prompt() ## balance diagnostics through statistics print(summary(m.out1)) user.prompt() ## balance diagnostics through graphics plot(m.out) user.prompt() plot(m.out, type="jitter") ## 1:1 Nearest neighbor matching with Mahalanobis matching on re74 and re75 and exact matching on married m.out2 <- matchit(treat ~ re74+re75+age+educ, data=lalonde, method = "nearest", distance = "logit", mahvars=c("re74", "re75"), exact=c("married"), caliper=.25) user.prompt() ## print a short summary print(m.out2) user.prompt() ## balance diagnostics through statistics s.out2 <- summary(m.out2, standardize=TRUE) print(s.out2) user.prompt() ## balance diagnostics through graphics plot(m.out2) user.prompt() plot(m.out2, type="jitter") user.prompt() plot(s.out2) ## 1:1 Nearest neighbor matching with units outside the common support discarded m.out3 <- matchit(treat ~ re74+re75+age+educ, data=lalonde, method = "nearest", distance = "logit", discard= "both") user.prompt() ## print a short summary print(m.out3) user.prompt() ## balance diagnostics through statistics print(summary(m.out3)) user.prompt() ## balance diagnostics through graphics plot(m.out3) plot(m.out3, type="jitter") ## 2:1 Nearest neighbor matching with replacement m.out4 <- matchit(treat ~ re74+re75+age+educ, data=lalonde, method = "nearest", distance = "logit", replace=TRUE, ratio=2) user.prompt() ## print a short summary print(m.out4) user.prompt() ## balance diagnostics through statistics print(summary(m.out4)) user.prompt() ## balance diagnostics through graphics plot(m.out4) plot(m.out4, type="jitter") plot(m.out4, type="hist") ## 1:1 Nearest neighbor matching followed by subclassification m.out5 <- matchit(treat ~ re74+re75+age+educ, data=lalonde, method = "nearest", distance = "logit", subclass=5) user.prompt() ## print a short summary print(m.out5) user.prompt() ## balance diagnostics through statistics print(summary(m.out5)) user.prompt() ## balance diagnostics through graphics plot(m.out5) user.prompt() s.out5 <- summary(m.out5, standardize=TRUE) plot(s.out5) MatchIt/demo/00Index0000644000175100001440000000103613060361515013677 0ustar hornikusersexact Demo of exact matching, using Lalonde dataset full Demo of full matching, using Lalonde dataset genetic Demo of genetic matching, using Lalonde dataset match.data Demo of obtaining matched data nearest Demos of nearest neighbor matching, using Lalonde dataset subclass Demo of subclassification, using Lalonde dataset optimal Demo of optimal matching, using Lalonde dataset analysis Demo of using Zelig with MatchIt for parametric causal inference after matching cem Demo of coarsened exact matching MatchIt/demo/cem.R0000644000175100001440000000247713060361515013446 0ustar hornikusers### ### An Example Script for Coarsened Exact Matching ### ## load the Lalonde data data(lalonde) ## coarsened exact matching with automatic coarsening m.out <- matchit(treat ~ age + educ + black + hispan + married + nodegree + re74 + re75, data = lalonde, method = "cem") user.prompt() ## print a short summary print(m.out) user.prompt() ## balance diagnostics through statistics; standardize = T for plotting s.out <- summary(m.out, covariates = T, standardize = T) print(s.out) user.prompt() ## graphical balance checks plot(m.out) plot(s.out) ## create some cutpoints for continuous variables re74cut <- hist(lalonde$re74, br=seq(0,max(lalonde$re74)+1000, by=1000),plot=FALSE)$breaks re75cut <- hist(lalonde$re75, br=seq(0,max(lalonde$re75)+1000, by=1000),plot=FALSE)$breaks agecut <- hist(lalonde$age, br=seq(15,55, length=14),plot=FALSE)$breaks mycp <- list(re75=re75cut, re74=re74cut, age=agecut) ## coarsened exact matching with user-given cutpoints m.out2 <- matchit(treat ~ age + educ + black + hispan + married + nodegree + re74 + re75, data = lalonde, method = "cem", cutpoints = mycp) user.prompt() ## print a short summary print(m.out2) user.prompt() ## balance diagnostics through statistics s.out2 <- summary(m.out2, covariates = T) print(s.out2) user.prompt() MatchIt/demo/subclass.R0000644000175100001440000000077213060361515014515 0ustar hornikusers### ### An Example Script for Subclassification ### ## load the Lalonde data data(lalonde) ## sublclassification m.out <- matchit(treat ~ re74 + re75 + educ + black + hispan + age, data = lalonde, method = "subclass") user.prompt() ## a short summary print(m.out) user.prompt() ## balance diagnostics print(summary(m.out)) user.prompt() ## balance diagnostics through plots plot(m.out) user.prompt() plot(m.out, type="jitter") s.out <- summary(m.out, standardize=TRUE) plot(s.out) MatchIt/demo/full.R0000644000175100001440000000114513060361515013633 0ustar hornikusers### ### An Example Script for Full Matching ### ## load the Lalonde data data(lalonde) ## conduct full matching using the propensity score based on logistic regression m.out <- matchit(treat ~ age + educ + black + hispan + married + nodegree + re74 + re75, data = lalonde, method = "full", distance = "logit") ## print a short summary print(m.out) user.prompt() ## balance diagnostics through statistics s.out <- summary(m.out) print(s.out) s.out <- summary(m.out, standardize=TRUE) print(s.out) user.prompt() ## balance diagnostics through graphics plot(m.out) plot(s.out) MatchIt/demo/optimal.R0000644000175100001440000000112713060361515014336 0ustar hornikusers### ### An Example Script for Optimal Matching ### ## load the Lalonde data data(lalonde) ## optimal ratio matching using the propensity score based on logistic regression m.out <- matchit(treat ~ re74 + re75 + age + educ, data = lalonde, method = "optimal", distance = "logit", ratio = 2) user.prompt() ## a short summary print(m.out) user.prompt() ## balance diagnostics through statistics print(summary(m.out)) user.prompt() ## balance diagnostics through graphics plot(m.out) user.prompt() plot(m.out, type="jitter") s.out <- summary(m.out, standardize=TRUE) plot(s.out) MatchIt/data/0000755000175100001440000000000013075401340012527 5ustar hornikusersMatchIt/data/lalonde.tab.gz0000644000175100001440000002263713075401340015266 0ustar hornikusers}]tN_l9&U N (YKdNH'mm[%y__~O˿_ϿG]/?r?{S+fccD~ H{Y_c$TS1*N~Ux 1_}iCZRRmWm&ُ^!+ac~GnV^Id\k[cx%Wkook,x;GcFO$}mn{9=WMARG~%<\'6d\>&K)A.͒/_NG| ~*2\&6נÔ<4^seryK3-IRzuι+/ZZ.#4:罆ofe;'4DAq]a۷'<ܲ^Y4/(C=&:R>O&8qÉ6}[K~à ̂`ooV3? "lKÁ:8/wc@socмw3Й;NPsʟ9~-cЭ7;,\ُhG.k=P[oyD@N;c]{ZkLX_7S̞!JS3th?O UrcE cTF!;kI\ 6Qr[4}=߱@U_8=h>ۛrzIN0}Ԝ7i-w%V,Z3xiQ{j'hV:r{,NpO|M;CugfE/B O;\/ IdkVfq0? kѸoy5#ߒKzv@9f/)4~!ƜK5{=ި1vſq7 #vTWvX Nl"VqE |!EZwnARezM&7 *T]D>ǴX[On@~&F#pHfWo+:!Umؘw0czd`҈Gp/>BwUda 1.`Dv:ڞ,DYih>Yy0L)t#&ІIR_Lu~?4] HwJ] r J7.$"lHBۺyX,ϸY-(U`±YX7VꆓC䄱:& m2塞 r)x8*(|_~"5Jk;?A8xSMV^D0*_BZ _yPjGo*nz قg`_&yۀ= %d$O]3JQkX9JݕdߐpyFpfJ{+.j'S` 4v[djDL^bw$MڄS )3q_Y{̐ԡ <0 B@ `bk8ѽ0n.!0y]9<7h&H=buXq y+dzK`'l:oݜi9pu {(c!dڛI셱ՉMQ!*Aӑ͎Gvܚ.*pߙ+lY~|Q CH c''49ܢ.qLiGn9z7R`oA. Z3м-}ZEN#E9t;SڹV2 H S x/p8 LE$B5 lI8gC$@q3~Ӥ@ :ćFT,tpP慓<;8') Iθ kS6yq)Z/RNo4T@ŹM,'~NAHAoS y- ORl舧lˍAD{`; ب, SLìW[J03]d#6 KMňR֜GZd,l ]OXcaּs\XTh)1vӍpROW<\$߮AE?ol s'p`u cu'ӝt kBBBV*kۻ?􂺂(vBw/ٔ:y&G(L„U9xR 4csx]i 1,%i-*\rR3BRAvI)>!pe0SSd;jjKvxAB}MxB)Oe]nqѻ^`vR J4fZFzęYV/Rc=*JWv85c$ZV]r̤}d9/6 36 -Ub&Osy#aj!+i]=mHyGĐY甥 ίc֘1g[Gw1AorY]/) 1;3lu9v+&c[u_E>Ia~0M+n[ݤ^˽N; -Z Q5l1F0A̞Rއ-/n3yҘY31b .V:º};6$OHX9nn0b)LC!t(܈ `eamuT_VvߏDsl#0 9#!N yX`iEYȈ9Ndx^6>nW,ՅL01QTck|$4c b-´PE*8XXY( ҔX# Z4ML۰ddY8{?<.ZJx>ֵi9g(`Id8@=sUe9fy*sY?Ԍ&Ra.&kEG=vȉFX^p]U}z-t@ u!qq6Ĥv҉M|<38T^FT)t> 6pjF%[>$_/q`NpbI=?\9P%,NVkjΌ܍9CE|ImT?$ ~QVe)6t΂":>lR-XfMxhI&zvT;X&lfSWlb,PeԮdbEh1 }]V*䠳FrX5)!WVuI--$,466 Lٯ8p _5 d5lHI9;P,Ԙ_YM=Ca!fg[BWy]EɂdG[ˬ1jMVNvTN._lԲvs#ga0g2ZDzts+!nЈ!@E,_wA϶\U}2+\>]L!@̾ ÄgLK @ODY08%AIG( \GzY\^ݳ.Rϝ"G}/5`oTNQvyL+Y?@2X(hqwOA?M0)(dV}+GݲEb]+5lwZ\mR0 ܟx)(q [  3 0lL)]_$|3b?veC@}%W5r Apa qע؛d0)J ){FkDr?oF󢏸.2ǖv9ky1vp.Au N&՚PR{}䥑گ7ccx9*Ζ|yqu (3~+퉅h"Oit%^ CmWK E Ta|9d#kx5^t]}ԭ9duO|ܪ8}VS |)~1zeBevXO2W9G zC3G_PLRM4UXeQZ|<~9H$zysu>baigZi\OzVK,ys&Qi:]KL "y>wi @&FkuhO%vo ]x-d);lE6yһ܇A^Nck. SXݎ<#C dXPZ\?W)h f7\E~s>n\ayrĤ']&霆M =Q̋{x^{/E ,/v81pԖP`aAEMt1ṟn ۜ-7-s }O茘?`n~2*Xu|gG?e`mpptf;8봺* Ә@l=QZL<_F6ˤis](Σb,s~+Cjv6@44js~!fEW?Y瞗pcTpNJfrv_He[ [ u캻0r 4| 9K AddҐ67E=fD =0We$Xla*ۇ>^n9l'&OEǍ?+q{z` SԳEؽ߬F\NofnME7:>.y.d7C+@evzfcimy,9Ҫ6>ٽQq(64fu-+lhiYtiPՇ /Ϊ}J"Z_£GNXh,6=X6>Y _[ZQkk["[WsE9IY.:yf"h56t 6#л -)gF Z6s8p'yKaHIPx̟-P}VOFt'Ų|{+"9&/Û/k56L ^}??}jP>Ē>pV]-t.V^^'7Xc)ɃJСܯ쉱ȗ +ݘ`73jHUPIL}1XzC_j`LOaI$:&n 4V]ă}ITZNv?xHA0AրM"3H?ϿC˷>+qɞX*ILE==Ѭd>~{Few[VYUQ#"_ՠ_þ!#>8Jo{uCFK D,0iz ;dEt3xQ(t P; y.aCvRhH:ɡ.96 q7+ϧN6{ kj ^uWY{̢UsB[)1FGQw-"N4@K@(76JP&u̎Qt#vz^QvDΛZzKĮZ Ya ade7X`FM8>w;\|sG~\/\{PIq=D:ce7[Ʀ`JjĞ3=NUwE=C.I3#3$-wdzR!>*$s^ QX֤> onSbR-lcoߙ!!uN9mZO,u7s;fo쑮΄އnՎAq7 []We-RY?M1T{‹jf9mʼnZm N!g`ޜ4g<6yI5g3Vbmz{]MH̩xo#V>OGY d!gޟw;zN0ѫ!(mݑRfM_Mu0bx!9"0q$ao: dp>j6׶rv^YA.Kp10L&/WFQϼxBIٮElanjwPz{.2eK#)TO̦T]uExyeIS>]ҝH~#*zd?~Ŗ =8>J&}ޯmRkYß^w*t1RVڟ0M)>5&J煉/䲓OYU4tXP`o ^JG}ߝn$ے3mn#eeOQ4;}ivU&er͈VMQkq3i_N!RJuwL!c뼅Gg7)(ϢS{ݝ9vo4\a~{AQ1$ b圁kHYܛȿIe<ٍ7smH{<:DgpM]4Xi&ϣuԚ&0tz^ORhM0UϔϾ2˩ dK2Xj|2E<3 1"wvFGԒq^?SV򹭥ܣ,ڶ2fP̀G*gDX N Õawi;y:Z>Zq ͵*lpwt_:Wt)K֓rSf77N6U%bA72͢aQޱF a0:Y`yҳemφs`J䶗]4W4ҙA. '<&ǀ;tip8r=l,\*l4\隆d4]ow~E¯>ݞ 3K}}&p<oa,DX~Z$rCּ) z+x|T5~iϻ5Ry Hf~WV 4WC)-?==wreogbnYyorJ2le~$o%}?qI?Ev{}](,{]Wm~⎽'6!VVnMƏ򒭯)G5DuQV:^7zo]|Bf/T)i?ǽ?XDtR"/]Ϫdo}xco,xlW9N\IGdV(Ƃո"οq@kMatchIt/R/0000755000175100001440000000000013075246077012035 5ustar hornikusersMatchIt/R/matchit2exact.R0000644000175100001440000000111213060361514014677 0ustar hornikusersmatchit2exact <- function(treat, X, data, distance, discarded, is.full.mahalanobis, verbose=FALSE, ...){ if(verbose) cat("Exact matching... \n") n <- length(treat) xx <- apply(X, 1, function(x) paste(x, collapse = "\r")) xx1 <- xx[treat==1] xx0 <- xx[treat==0] cc <- unique(xx1) cc <- cc[cc%in%xx0] ncc <- length(cc) psclass <- rep(NA,n) names(psclass) <- names(treat) for(i in 1:ncc) psclass[xx==cc[i]] <- i res <- list(subclass = psclass, weights = weights.subclass(psclass, treat)) class(res) <- c("matchit.exact", "matchit") return(res) } MatchIt/R/weights.subclass.R0000644000175100001440000000213413060361515015435 0ustar hornikusersweights.subclass <- function(psclass, treat) { ttt <- treat[!is.na(psclass)] classes <- na.omit(psclass) n <- length(ttt) labels <- names(ttt) tlabels <- labels[ttt==1] clabels <- labels[ttt==0] weights <- rep(0, n) names(weights) <- labels weights[tlabels] <- 1 for(j in unique(classes)){ qn0 <- sum(ttt==0 & classes==j) qn1 <- sum(ttt==1 & classes==j) weights[ttt==0 & classes==j] <- qn1/qn0 } if (sum(weights[ttt==0])==0) weights[ttt==0] <- rep(0, length(weights[clabels])) else { ## Number of C units that were matched to at least 1 T num.cs <- sum(weights[clabels] > 0) weights[clabels] <- weights[clabels]*num.cs/sum(weights[clabels]) } if (any(is.na(psclass))) { tmp <- rep(0, sum(is.na(psclass))) names(tmp) <- names(treat[is.na(psclass)]) weights <- c(weights, tmp)[names(treat)] } if (sum(weights)==0) stop("No units were matched") else if (sum(weights[tlabels])==0) stop("No treated units were matched") else if (sum(weights[clabels])==0) stop("No control units were matched") return(weights) } MatchIt/R/matchit2cem.R0000644000175100001440000000345613060361514014354 0ustar hornikusers# matchit2cem - matchit wrapper for cem matching algorithm # # 06/10/2008 - m.blackwell # # this function takes inputs from matchit() and returns the # strata for each observation in the subclass entry and the # weight for each observation in the weight entry. No match # matrix is returned since matches are not unique within # strata. # matchit2cem <- function(treat, X, data, distance, discarded, is.full.mahalanobis, ratio = 1, verbose = FALSE, k2k.method=NULL, ...) { if (!requireNamespace("cem", quietly = TRUE)) stop("cem package is required. Please install it.") if (verbose) cat("Coarsened exact matching...\n") n <- length(treat) # cem takes the data all together and wants the treatment specified # with the column name of the data frame. Here we massage the matchit # inputs to this format. Note that X has its proper columnames, but # treat does not have the original column name. cem.data <- as.data.frame(cbind(treat,X)) mat <- cem::cem(treatment="treat",data=cem.data,verbose=as.integer(verbose)+1, method=k2k.method,...) # here we create a column vector where the matched entry get its stratum # and the unmatched entry gets an NA. strat <- rep(NA,n) names(strat) <- names(treat) strat[mat$matched] <- mat$strata[mat$matched] # here we just add the names onto the wieght from the cem output wh <- mat$w names(wh) <- names(treat) # weighting functions in matchit error-out on these conditions, # so we should too. if (sum(wh)==0) stop("No units were matched") else if (sum(wh[treat==1])==0) stop("No treated units were matched") else if (sum(wh[treat==0])==0) stop("No control units were matched") res <- list(subclass = strat, weights = mat$w) class(res) <- "matchit" return(res) } MatchIt/R/eqqplot.R0000644000175100001440000000102613060361514013630 0ustar hornikuserseqqplot <- function(x, y, plot.it = TRUE, xlab = deparse(substitute(x)), ylab = deparse(substitute(y)), ...) { ## empirical quantile-quantile plot; hacked from qqplot() in stats. sx <- sort(x) sy <- sort(y) lenx <- length(sx) leny <- length(sy) if (leny < lenx) sx <- approx(1:lenx, sx, n = leny, method = "constant")$y if (leny > lenx) sy <- approx(1:leny, sy, n = lenx, method = "constant")$y if (plot.it) plot(sx, sy, xlab = xlab, ylab = ylab, ...) invisible(list(x = sx, y = sy)) } MatchIt/R/match.data.R0000644000175100001440000000252413075246077014167 0ustar hornikusers#' @export match.data <- function(object, group = "all", distance = "distance", weights = "weights", subclass = "subclass") { if (!is.null(object$model)) { env <- attributes(terms(object$model))$.Environment } else { env <- parent.frame() } data <- eval(object$call$data, envir = env) treat <- object$treat wt <- object$weights vars <- names(data) if (distance %in% vars) stop("invalid input for distance. choose a different name.") else if (!is.null(object$distance)) { dta <- data.frame(cbind(data, object$distance)) names(dta) <- c(names(data), distance) data <- dta } if (weights %in% vars) stop("invalid input for weights. choose a different name.") else if (!is.null(object$weights)){ dta <- data.frame(cbind(data, object$weights)) names(dta) <- c(names(data), weights) data <- dta } if (subclass %in% vars) stop("invalid input for subclass. choose a different name.") else if (!is.null(object$subclass)){ dta <- data.frame(cbind(data, object$subclass)) names(dta) <- c(names(data), subclass) data <- dta } if (group == "all") return(data[wt > 0,]) else if (group == "treat") return(data[wt > 0 & treat == 1,]) else if (group == "control") return(data[wt > 0 & treat == 0,]) else stop("error: invalid input for group.") } MatchIt/R/hist.pscore.R0000644000175100001440000000431213060361514014405 0ustar hornikusershist.pscore <- function(x, numdraws=5000, xlab="Propensity Score", main=NULL, freq=F, xlim = NULL,...){ treat <- x$treat pscore <- x$distance weights <- x$weights matched <- weights!=0 q.cut <- x$q.cut cwt <- sqrt(weights) ratio <- x$call$ratio if(is.null(ratio)){ratio <- 1} ## For full or ratio matching, sample numdraws observations using the weights if(identical(x$call$method,"full") | (ratio!=1)) { pscore.treated.matched <- sample(names(treat)[treat==1], numdraws/2, replace=TRUE, prob=x$weights[treat==1]) pscore.treated.matched <- pscore[pscore.treated.matched] pscore.control.matched <- sample(names(treat)[treat==0], numdraws/2, replace=TRUE, prob=x$weights[treat==0]) pscore.control.matched <- pscore[pscore.control.matched] } else { pscore.treated.matched <- pscore[treat==1 & weights!=0] pscore.control.matched <- pscore[treat==0 & weights!=0] } par(mfrow=c(2,2)) if(!is.null(xlim)){warning("xlim may not be user specified. xlim returned to default.")} xlim <- range(na.omit(pscore)) if(is.null(main)){ hist(pscore[treat==1],xlim=xlim, xlab=xlab, freq=freq, main="Raw Treated", ...) hist(pscore.treated.matched,xlim=xlim, xlab=xlab, freq=freq, main="Matched Treated",...) if(!is.null(q.cut)){abline(v=q.cut,col="grey",lty=1)} hist(pscore[treat==0],xlim=xlim, xlab=xlab, freq=freq, main="Raw Control",...) hist(pscore.control.matched,xlim=xlim, xlab=xlab, freq=freq, main="Matched Control",...) if(!is.null(q.cut)){abline(v=q.cut,col="grey",lty=1)} }else{ hist(pscore[treat==1],xlim=xlim, xlab=xlab, freq=freq, main=main, ...) hist(pscore.treated.matched,xlim=xlim, xlab=xlab, freq=freq, main=main,...) if(!is.null(q.cut)){abline(v=q.cut,col="grey",lty=1)} hist(pscore[treat==0],xlim=xlim, xlab=xlab, freq=freq, main=main,...) hist(pscore.control.matched,xlim=xlim, xlab=xlab, freq=freq, main=main,...) if(!is.null(q.cut)){abline(v=q.cut,col="grey",lty=1)} } } MatchIt/R/matchit2subclass.R0000644000175100001440000000716213060361514015425 0ustar hornikusersmatchit2subclass <- function(treat, X, data, distance, discarded, is.full.mahalanobis, match.matrix=NULL, subclass=6, sub.by="treat", verbose = FALSE){ if(verbose) cat("Subclassifying... \n") # sub.by if(!is.vector(sub.by)|length(sub.by)!=1){ warning(sub.by," is not a valid sub.by option; sub.by=\"treat\" used instead",call.=FALSE); sub.by <- "treat"} if(!sub.by%in%c("treat","control","all")){ warning(sub.by, " is not a valid sub.by option; sub.by=\"treat\" used instead",call.=FALSE); sub.by <- "treat"} #subclass if(length(subclass)==1){ if(subclass<0 | subclass==1){ warning(subclass, " is not a valid subclass; subclass=6 used instead",call.=FALSE); subclass <- 6} } else { if(!is.vector(subclass)){ warning(subclass, " is not a valid subclass; subclass=6 used instead",call.=FALSE); subclass <- 6} if(sum(subclass<=1 & subclass>=0)!=length(subclass)){ warning("Subclass ", subclass, " is not bounded by 0 and 1; subclass=6 used instead", call.=FALSE); subclass <- 6} } in.sample <- !discarded n <- length(treat) ## Matching & Subclassification if(!is.null(match.matrix)){ #match.matrix <- match.matrix[in.sample[treat==1],,drop=F] t.units <- row.names(match.matrix)[in.sample[treat==1]==1] c.units <- na.omit(as.vector(as.matrix(match.matrix))) matched <-c(t.units,c.units) matched <- names(treat)%in%matched } else matched <- rep(TRUE,n) names(matched) <- names(treat) m1 <- matched[treat==1] m0 <- matched[treat==0] p1 <- distance[treat==1][m1] p0 <- distance[treat==0][m0] ## Settting Cut Points if(length(subclass)!=1 | (length(subclass)==1 & all(subclass<1))) { subclass <- sort(subclass) if (subclass[1]==0) subclass <- subclass[-1] if (subclass[length(subclass)]==1) subclass <- subclass[-length(subclass)] if(sub.by=="treat") q <- c(0,quantile(p1,probs=c(subclass)),1) else if(sub.by=="control") q <- c(0,quantile(p0,probs=c(subclass)),1) else if(sub.by=="all") q <- c(0,quantile(distance,probs=c(subclass)),1) else stop("Invalid input for sub.by") } else { if(subclass<=0){stop("Subclass must be a positive vector",call.=FALSE)} sprobs <- seq(0,1,length=(round(subclass)+1)) sprobs <- sprobs[2:(length(sprobs)-1)] min.dist <- min(distance,na.rm=TRUE)-0.01 max.dist <- max(distance,na.rm=TRUE)+0.01 if(sub.by=="treat") q <- c(min.dist,quantile(p1,probs=sprobs,na.rm=TRUE), max.dist) else if(sub.by=="control") q <- c(min.dist,quantile(p0,probs=sprobs,na.rm=TRUE), max.dist) else if(sub.by=="all") q <- c(min.dist, quantile(distance,probs=sprobs,na.rm=TRUE), max.dist) else stop("Must specify a valid sub.by",call.=FALSE) } ## Calculating Subclasses qbins <- length(q)-1 psclass <- rep(0,n) names(psclass) <- names(treat) for (i in 1:qbins){ q1 <- q[i] q2 <- q[i+1] psclass <- psclass+i*as.numeric(distance=q1) } ## No subclass for discarded or unmatched units psclass[in.sample==0] <- NA psclass[!matched] <- NA if(verbose){cat("Done\n")} res <- list(subclass = psclass, q.cut = q, weights = weights.subclass(psclass, treat)) #warning for discrete data unique.classes <- unique(psclass) unique.classes <- unique.classes[!is.na (unique.classes)] if(length(unique.classes)!=subclass){ warning("Due to discreteness in data, fewer subclasses generated",call.=F) } class(res) <- c("matchit.subclass", "matchit") return(res) } MatchIt/R/weights.matrix.R0000644000175100001440000000273713060361515015133 0ustar hornikusersweights.matrix <- function(match.matrix, treat, discarded){ n <- length(treat) labels <- names(treat) tlabels <- labels[treat==1] clabels <- labels[treat==0] in.sample <- !discarded names(in.sample) <- labels match.matrix <- match.matrix[tlabels,,drop=F][in.sample[tlabels],,drop=F] num.matches <- dim(match.matrix)[2]-apply(as.matrix(match.matrix), 1, function(x){sum(is.na(x))}) names(num.matches) <- tlabels[in.sample[tlabels]] t.units <- row.names(match.matrix)[num.matches>0] c.units <- na.omit(as.vector(as.matrix(match.matrix))) weights <- rep(0,length(treat)) names(weights) <- labels weights[t.units] <- 1 for (cont in clabels) { treats <- na.omit(row.names(match.matrix)[cont==match.matrix[,1]]) if (dim(match.matrix)[2]>1) for (j in 2:dim(match.matrix)[2]) treats <- c(na.omit(row.names(match.matrix)[cont==match.matrix[,j]]),treats) for (k in unique(treats)) weights[cont] <- weights[cont] + 1/num.matches[k] } if (sum(weights[clabels])==0) weights[clabels] <- rep(0, length(weights[clabels])) else weights[clabels] <- weights[clabels]*length(unique(c.units))/sum(weights[clabels]) weights[!in.sample] <- 0 if (sum(weights)==0) stop("No units were matched") else if (sum(weights[tlabels])==0) stop("No treated units were matched") else if (sum(weights[clabels])==0) stop("No control units were matched") return(weights) } MatchIt/R/distance2nnet.R0000644000175100001440000000047113060361514014707 0ustar hornikusersdistance2nnet <- function(formula, data, ...) { if (requireNamespace("nnet", quietly = TRUE)) { res <- nnet::nnet(formula, data, ...) return(list(model = res, distance = fitted(res))) } else { stop("nnet package is needed. Please install it.", call. = FALSE) } } MatchIt/R/distance2rpart.R0000644000175100001440000000050713060361514015073 0ustar hornikusersdistance2rpart <- function(formula, data, ...) { if (requireNamespace("rpart", quietly = TRUE)) { res <- rpart::rpart(formula, data, ...) return(list(model = res, distance = predict(res))) } else { stop("rpart package is needed. Please install it.", call. = FALSE) } } MatchIt/R/distance2GAM.R0000644000175100001440000000330313060361514014344 0ustar hornikusersdistance2GAMlogit <- function(formula, data, ...) { if (requireNamespace("mgcv", quietly = TRUE)) { res <- mgcv::gam(formula, data, family=binomial(logit), ...) return(list(model = res, distance = fitted(res))) } else { stop("mgcv package is needed. Please install it.", call. = FALSE) } } distance2GAMprobit <- function(formula, data, ...) { if (requireNamespace("mgcv", quietly = TRUE)) { res <- mgcv::gam(formula, data, family=binomial(probit), ...) return(list(model = res, distance = fitted(res))) } else { stop("mgcv package is needed. Please install it.", call. = FALSE) } } distance2GAMcloglog <- function(formula, data, ...) { if (requireNamespace("mgcv", quietly = TRUE)) { res <- mgcv::gam(formula, data, family=binomial(cloglog), ...) return(list(model = res, distance = fitted(res))) } else { stop("mgcv package is needed. Please install it.", call. = FALSE) } } distance2GAMlog <- function(formula, data, ...) { if (requireNamespace("mgcv", quietly = TRUE)) { res <- mgcv::gam(formula, data, family=binomial(log), ...) return(list(model = res, distance = fitted(res))) } else { stop("mgcv package is needed. Please install it.", call. = FALSE) } } distance2GAMcauchit <- function(formula, data, ...) { if (requireNamespace("mgcv", quietly = TRUE)) { res <- mgcv::gam(formula, data, family=binomial(cauchit), ...) return(list(model = res, distance = fitted(res))) } else { stop("mgcv package is needed. Please install it.", call. = FALSE) } } MatchIt/R/jitter.pscore.R0000644000175100001440000000351413060361514014742 0ustar hornikusersjitter.pscore <- function(x, interactive,pch=1,cex=NULL,...){ treat <- x$treat pscore <- x$distance weights <- x$weights matched <- weights!=0 q.cut <- x$q.cut jitp <- jitter(rep(1,length(treat)),factor=6)+(treat==1)*(weights==0)-(treat==0)-(weights==0)*(treat==0) cwt <- sqrt(weights) minp <- min(pscore,na.rm=T) maxp <- max(pscore,na.rm=T) plot(pscore,xlim=c(minp,maxp+0.1*(maxp-minp)),ylim=c(-1.5,2.5), type="n",ylab="",xlab="Propensity Score", axes=F,main="Distribution of Propensity Scores",...) if(!is.null(q.cut)){abline(v=q.cut,col="grey",lty=1)} if(is.null(cex)){ points(pscore[treat==1&weights!=0],jitp[treat==1&weights!=0], pch=pch,cex=cwt[treat==1&weights!=0],...) points(pscore[treat==0&weights!=0],jitp[treat==0&weights!=0], pch=pch,cex=cwt[treat==0&weights!=0],...) points(pscore[treat==1&weights==0],jitp[treat==1&weights==0], pch=pch,cex=1,...) points(pscore[treat==0&weights==0],jitp[treat==0&weights==0], pch=pch,cex=1,...) }else{ points(pscore[treat==1&weights!=0],jitp[treat==1&weights!=0], pch=pch,cex=cex,...) points(pscore[treat==0&weights!=0],jitp[treat==0&weights!=0], pch=pch,cex=cex,...) points(pscore[treat==1&weights==0],jitp[treat==1&weights==0], pch=pch,cex=cex,...) points(pscore[treat==0&weights==0],jitp[treat==0&weights==0], pch=pch,cex=cex,...) } axis(1) text(sum(range(na.omit(pscore)))/2,2.5,"Unmatched Treatment Units") text(sum(range(na.omit(pscore)))/2,1.5,"Matched Treatment Units") text(sum(range(na.omit(pscore)))/2,0.5,"Matched Control Units") text(sum(range(na.omit(pscore)))/2,-0.5,"Unmatched Control Units") box() if(interactive==TRUE) { print("To identify the units, use first mouse button; to stop, use second.") identify(pscore,jitp,names(treat),atpen=T) } } MatchIt/R/user.prompt.R0000644000175100001440000000013513075246077014455 0ustar hornikusers#' @export user.prompt <- function() silent <- readline("\nPress to continue: ") MatchIt/R/matchit.qqplot.R0000644000175100001440000000666413060361514015130 0ustar hornikusersmatchit.qqplot <- function(x,discrete.cutoff, which.subclass=NULL, numdraws=5000, interactive = T, which.xs = NULL,...){ X <- x$X ## Fix X matrix so that it doesn't have any factors varnames <- colnames(X) for(var in varnames) { if(is.factor(X[,var])) { tempX <- X[,!colnames(X)%in%c(var)] form<-formula(substitute(~dummy-1,list(dummy=as.name(var)))) X <- cbind(tempX, model.matrix(form, X)) } } covariates <- X if(!is.null(which.xs)){ if(sum(which.xs%in%dimnames(covariates)[[2]])!=length(which.xs)){ stop("which.xs is incorrectly specified") } covariates <- covariates[,which.xs,drop=F] } treat <- x$treat matched <- x$weights!=0 ratio <- x$call$ratio if(is.null(ratio)){ratio <- 1} ## For full or ratio matching, sample numdraws observations using the weights if(identical(x$call$method,"full") | (ratio!=1)) { t.plot <- sample(names(treat)[treat==1], numdraws/2, replace=TRUE, prob=x$weights[treat==1]) c.plot <- sample(names(treat)[treat==0], numdraws/2, replace=TRUE, prob=x$weights[treat==0]) m.covariates <- x$X[c(t.plot, c.plot),] m.treat <- x$treat[c(t.plot, c.plot)] } else { m.covariates <- covariates[matched,,drop=F] m.treat <- treat[matched] } if(!is.null(which.subclass)){ subclass <- x$subclass sub.index <- subclass==which.subclass & !is.na(subclass) sub.covariates <- covariates[sub.index,,drop=F] sub.treat <- treat[sub.index] sub.matched <- matched[sub.index] ## Matched units in each subclass m.covariates <- sub.covariates[sub.matched,,drop=F] m.treat <- sub.treat[sub.matched] ## Compare to full sample--reset covariates and treat to full data set # covariates <- x$X # treat <- x$treat } nn <- dimnames(covariates)[[2]] nc <- length(nn) covariates <- data.matrix(covariates) # oma <- c(4, 4, 6, 4) oma <- c(2.25,0,3.75,1.5) opar <- par(mfrow = c(3, 3), mar = rep.int(1/2, 4), oma = oma) on.exit(par(opar)) # par(oma=c(2.25,0,3.75,1.5)) for (i in 1:nc){ xi <- covariates[,i] m.xi <- m.covariates[,i] ni <- nn[i] plot(xi,type="n",axes=F) if(((i-1)%%3)==0){ htext <- "QQ Plots" if(!is.null(which.subclass)){ htext <- paste(htext,paste(" (Subclass ",which.subclass,")",sep=""),sep="") } mtext(htext, 3, 2, TRUE, 0.5, cex=1.1,font=2) mtext("All", 3, .25, TRUE, 0.5, cex=1,font = 1) mtext("Matched", 3, .25, TRUE, 0.83, cex=1,font = 1) mtext("Control Units", 1, 0, TRUE, 2/3, cex=1,font = 1) mtext("Treated Units", 4, 0, TRUE, 0.5, cex=1,font = 1) } par(usr = c(0, 1, 0, 1)) l.wid <- strwidth(nn, "user") cex.labels <- max(0.75, min(1.45, 0.85/max(l.wid))) text(0.5,0.5,ni,cex=cex.labels) if(length(table(xi))<=discrete.cutoff){ xi <- jitter(xi) m.xi <- jitter(m.xi) } rr <- range(xi) eqqplot(xi[treat==0],xi[treat==1], xlim=rr,ylim=rr,axes=F,ylab="",xlab="",...) abline(a=0,b=1) abline(a=(rr[2]-rr[1])*0.1,b=1,lty=2) abline(a=-(rr[2]-rr[1])*0.1,b=1,lty=2) axis(2) box() eqqplot(m.xi[m.treat==0],m.xi[m.treat==1],xlim=rr,ylim=rr,axes=F,ylab="",xlab="",...) abline(a=0,b=1) abline(a=(rr[2]-rr[1])*0.1,b=1,lty=2) abline(a=-(rr[2]-rr[1])*0.1,b=1,lty=2) box() if(interactive){ par(ask=T) } else { par(ask=F) } } par(ask=F) } MatchIt/R/distance2glm.R0000644000175100001440000000317513060361514014526 0ustar hornikusersdistance2logit <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(logit), ...) return(list(model = res, distance = fitted(res))) } distance2linear.logit <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(logit), ...) return(list(model = res, distance = predict(res))) } distance2probit <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(probit), ...) return(list(model = res, distance = fitted(res))) } distance2linear.probit <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(probit), ...) return(list(model = res, distance = predict(res))) } distance2cloglog <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(cloglog), ...) return(list(model = res, distance = fitted(res))) } distance2linear.cloglog <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(cloglog), ...) return(list(model = res, distance = predict(res))) } distance2log <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(log), ...) return(list(model = res, distance = fitted(res))) } distance2linear.log <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(log), ...) return(list(model = res, distance = predict(res))) } distance2cauchit <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(cauchit), ...) return(list(model = res, distance = fitted(res))) } distance2linearcauchit <- function(formula, data, ...) { res <- glm(formula, data, family=binomial(cauchit), ...) return(list(model = res, distance = predict(res))) } MatchIt/R/match.qoi.R0000644000175100001440000000561513060361514014036 0ustar hornikusers## Function to calculate summary stats qoi <- function(xx,tt,ww, t.plot=NULL, c.plot=NULL, sds=NULL, standardize = FALSE, std=F){ weighted.var <- function(x, w) { sum(w * (x - weighted.mean(x,w))^2)/(sum(w) - 1)} xsum <- matrix(NA,2,7) xsum <- as.data.frame(xsum) row.names(xsum) <- c("Full","Matched") if (standardize) names(xsum) <- c("Means Treated","Means Control", "SD Control", "Std. Mean Diff.", "eCDF Med", "eCDF Mean", "eCDF Max") else names(xsum) <- c("Means Treated","Means Control", "SD Control", "Mean Diff", "eQQ Med", "eQQ Mean", "eQQ Max") x1 <- xx[tt==1] x0 <- xx[tt==0] ww1 <- ww[tt==1] ww0 <- ww[tt==0] xsum[1,1] <- mean(x1,na.rm=T) xsum[1,2] <- mean(x0,na.rm=T) xsum[1,3] <- sd(x0,na.rm=T) X.t.m <- xx[tt==1][ww1>0] X.c.m <- xx[tt==0][ww0>0] xsum[2,1] <- weighted.mean(X.t.m, ww1[ww1>0]) xsum[2,2] <- weighted.mean(X.c.m, ww0[ww0>0]) xsum[2,3] <- sqrt(weighted.var(X.c.m, ww0[ww0>0])) if(!(sum(tt==1)<2|(sum(tt==0)<2))){ xsd <- sd(x1,na.rm=T) qqall <- qqsum(x1,x0,standardize=standardize) xsum[1,5:7] <- c(qqall$meddiff,qqall$meandiff,qqall$maxdiff) if (standardize) if (!is.null(sds)) xsum[1,4] <- (mean(x1,na.rm=T)-mean(x0,na.rm=T))/sds else xsum[1,4] <- (mean(x1,na.rm=T)-mean(x0,na.rm=T))/xsd else xsum[1,4] <- mean(x1,na.rm=T)-mean(x0,na.rm=T) if(!is.null(t.plot)) qqmat <- qqsum(xx[t.plot],xx[c.plot],standardize=standardize) else qqmat <- qqsum(x1[ww1>0],x0[ww0>0],standardize=standardize) xsum[2,5:7] <- c(qqmat$meddiff,qqmat$meandiff,qqmat$maxdiff) if (standardize) if (!is.null(sds)) xsum[2,4] <- (xsum[2,1]-xsum[2,2])/sds else xsum[2,4] <- (xsum[2,1]-xsum[2,2])/xsd else xsum[2,4] <- xsum[2,1]-xsum[2,2] } if(!std){ xsum <- xsum[,c(1:2,4:7)] } xsum } ## By subclass qoi.by.sub <- function(xx,tt,ww,qq,standardize=FALSE){ qbins <- max(qq,na.rm=TRUE) q.table <- matrix(0,6,qbins) qn <- matrix(0,3,qbins) matched <- ww!=0 for (i in 1:qbins) { qi <- qq[matched]==i & (!is.na(qq[matched])) qx <- xx[matched][qi] qt <- tt[matched][qi] qw <- as.numeric(ww[matched][qi]!=0) if(sum(qt==1)<2|(sum(qt==0)<2)){ if(sum(qt==1)<2) warning("Not enough treatment units in subclass ",i,call.=FALSE) else if(sum(qt==0)<2) warning("Not enough control units in subclass ",i,call.=FALSE) } qoi.i <- qoi(qx,qt,qw, sds=sd(xx[tt==1],na.rm=T), standardize=standardize) q.table[,i] <- as.numeric(qoi.i[1,]) qn[,i] <- c(sum(qt),sum(qt==0),length(qt)) } q.table <- as.data.frame(q.table) qn <- as.data.frame(qn) names(q.table) <- names(qn) <- paste("Subclass",1:qbins) row.names(q.table) <- names(qoi.i) row.names(qn) <- c("Treated","Control","Total") list(q.table=q.table,qn=qn) } MatchIt/R/qqsum.R0000644000175100001440000000120013060361514013303 0ustar hornikusers## Function for QQ summary stats qqsum <- function (x, y, standardize = FALSE){ sx <- sort(x) sy <- sort(y) lenx <- length(sx) leny <- length(sy) if (standardize) { vals <- sort(unique(c(sx, sy))) sx <- ecdf(sx) sx <- sx(vals) sy <- ecdf(sy) sy <- sy(vals) } else { if (leny < lenx) sx <- approx(1:lenx, sx, n = leny, method = "constant")$y if (leny > lenx) sy <- approx(1:leny, sy, n = lenx, method = "constant")$y } dxy <- abs(sx-sy) meandiff <- mean(dxy) meddiff <- median(dxy) maxdiff <- max(dxy) invisible(list(meandiff=meandiff, meddiff=meddiff, maxdiff=maxdiff)) } MatchIt/R/matchit2full.R0000644000175100001440000000206213075246077014556 0ustar hornikusersmatchit2full <- function(treat, X, data, distance, discarded, is.full.mahalanobis, verbose=FALSE, ...) { if(verbose) cat("Full matching... \n") ## full matching for undiscarded units ttt <- treat[!discarded] ddd <- distance[!discarded] n0 <- length(ttt[ttt==0]) n1 <- length(ttt[ttt==1]) d1 <- ddd[ttt==1] d0 <- ddd[ttt==0] d <- matrix(0, ncol=n0, nrow=n1) rownames(d) <- names(ttt[ttt==1]) colnames(d) <- names(ttt[ttt==0]) for (i in 1:n1) d[i,] <- abs(d1[i]-d0) full <- optmatch::fullmatch(d, ...) psclass <- full[pmatch(names(ttt), names(full))] psclass <- as.numeric(as.factor(psclass)) names(psclass) <- names(ttt) ## add psclass = NA for discarded units if (any(discarded)) { tmp <- rep(NA, sum(discarded)) names(tmp) <- names(treat[discarded]) psclass <- c(psclass, tmp)[names(treat)] } ## calculate weights and return the results res <- list(subclass = psclass, weights = weights.subclass(psclass, treat)) class(res) <- c("matchit.full", "matchit") return(res) } MatchIt/R/help.matchit.R0000644000175100001440000000401513075246077014540 0ustar hornikusers#' @export help.matchit <- function (object=NULL) { under.unix <- !(version$os == "Microsoft Windows" || version$os == "Win32" || version$os == "mingw32") sys <- function(command, text = NULL) { cmd <- if (length(text)) paste(command, text) else command if (under.unix) system(cmd) else shell(cmd, wait = TRUE) } browser <- .Options$help.browser if (!length(browser)) browser <- .Options$browser if (!length(browser)) browser <- getOption("browser") url <- NULL if (is.null(object)) url <- c("http://gking.harvard.edu/matchit") if (!is.null(object)) { if (object == "matchit") url <- c("http://gking.harvard.edu/matchit/docs/Reference_Manual.html") if (object == "exact") url <- c("http://gking.harvard.edu/matchit/docs/Exact_Matching2.html") if (object == "subclass") url <- c("http://gking.harvard.edu/matchit/docs/Subclassification2.html") if (object == "nearest") url <- c("http://gking.harvard.edu/matchit/docs/Nearest_Neighbor_Match2.html") if (object == "optimal") url <- c("http://gking.harvard.edu/matchit/docs/Optimal_Matching2.html") if (object == "full") url <- c("http://gking.harvard.edu/matchit/docs/Full_Matching2.html") if (object == "match.data") url <- c("http://gking.harvard.edu/matchit/docs/_TT_match_data_TT.html") if (object == "summary") url <- c("http://gking.harvard.edu/matchit/docs/_TT_summary_TT.html") if (object == "plot") url <- c("http://gking.harvard.edu/matchit/docs/_TT_plot_TT.html") } if (is.null(url)) { cat("Error:", object, "currently not documented in help.matchit. \n Please check http://gking.harvard.edu/matchit. \n", sep = " ") url <- c("http://gking.harvard.edu/matchit") } if (under.unix) { sys(paste(browser, url, "&")) invisible() } if (!under.unix) { browseURL(url, browser = browser) invisible("") } } MatchIt/R/matchit2optimal.R0000644000175100001440000000362513060361514015253 0ustar hornikusersmatchit2optimal <- function(treat, X, data, distance, discarded, is.full.mahalanobis, ratio = 1, verbose=FALSE, ...) { if (!requireNamespace("optmatch", quietly = TRUE)) stop("optmatch package is required. Please install it.") if(verbose) cat("Optimal matching... \n") ## optimal matching for undiscarded units ttt <- treat[!discarded] n0 <- length(ttt[ttt==0]) n1 <- length(ttt[ttt==1]) d1 <- distance[ttt==1] d0 <- distance[ttt==0] d <- matrix(0, ncol=n0, nrow=n1) tlabels <- rownames(d) <- names(ttt[ttt==1]) clabels <- colnames(d) <- names(ttt[ttt==0]) for (i in 1:n1) d[i,] <- abs(d1[i]-d0) full <- optmatch::fullmatch(d, min.controls = ratio, max.controls = ratio, omit.fraction = (n0-ratio*n1)/n0, ...) psclass <- full[pmatch(names(ttt), names(full))] psclass <- as.numeric(as.factor(psclass)) names(psclass) <- names(ttt) mm <- matrix(0, nrow = n1, ncol = ratio, dimnames = list(tlabels, 1:ratio)) for (i in 1:n1) mm[i,] <- names(which(psclass[tlabels[i]] == psclass[-pmatch(tlabels[i], names(psclass))])) if (any(discarded)) { ## add psclass = NA for discarded units tmp <- rep(NA, sum(discarded)) names(tmp) <- names(treat[discarded]) psclass <- c(psclass, tmp)[names(treat)] ## add match.matrix = NA for discarded units tdisc <- discarded[treat==1] if (any(tdisc)) { tmp <- matrix(NA, nrow = sum(tdisc), ncol= ratio, dimnames = list(names(treat[treat==1 & discarded]), 1:ratio)) mm <- as.matrix(rbind(mm, tmp)[names(treat[treat==1]),]) } } ## calculate weights and return the results res <- list(match.matrix = mm, subclass = psclass, weights = weights.matrix(mm, treat, discarded)) class(res) <- "matchit" return(res) } MatchIt/R/discard.R0000644000175100001440000000306313060361514013557 0ustar hornikusersdiscard <- function(treat, pscore, option, X) { n.obs <- length(treat) pmax0 <- max(pscore[treat==0]) pmax1 <- max(pscore[treat==1]) pmin0 <- min(pscore[treat==0]) pmin1 <- min(pscore[treat==1]) if (is.logical(option)) # user input return(option) else if (option == "none") # keep all units discarded <- rep(FALSE, n.obs) else if (option == "both") # discard units outside of common support discarded <- (pscore < max(pmin0, pmin1) | pscore > min(pmax0, pmax1)) else if (option == "control") # discard control units only discarded <- (pscore < pmin1 | pscore > pmax1) else if (option == "treat") # discard treated units only discarded <- (pscore < pmin0 | pscore > pmax0) else if (any(grep(option, c("hull.control", "hull.treat", "hull.both")))) { ## convext hull stuff requireNamespace("WhatIf") discarded <- rep(FALSE, n.obs) if (option == "hull.control"){ # discard units not in T convex hull wif <- WhatIf::whatif(cfact = X[treat==0,], data = X[treat==1,]) discarded[treat==0] <- !wif$in.hull } else if (option == "hull.treat") { wif <- WhatIf::whatif(cfact = X[treat==1,], data = X[treat==0,]) discarded[treat==1] <- !wif$in.hull } else if (option == "hull.both"){ # discard units not in T&C convex hull wif <- WhatIf::whatif(cfact = cbind(1-treat, X), data = cbind(treat, X)) discarded <- !wif$in.hull } else stop("invalid input for `discard'") } else stop("invalid input for `discard'") names(discarded) <- names(treat) return(discarded) } MatchIt/R/matchit2nearest.R0000644000175100001440000002371213060361514015246 0ustar hornikusersmatchit2nearest <- function(treat, X, data, distance, discarded, ratio=1, replace = FALSE, m.order = "largest", caliper = 0, calclosest = FALSE, mahvars = NULL, exact = NULL, subclass=NULL, verbose=FALSE, sub.by=NULL, is.full.mahalanobis,...){ if(verbose) cat("Nearest neighbor matching... \n") #replace if(!(identical(replace,TRUE) | identical(replace,FALSE))){ warning("replace=",replace," is invalid; used replace=FALSE instead",call.=FALSE);replace=FALSE} #m.order if(!(identical(m.order,"largest") | identical(m.order,"smallest") | identical(m.order,"random"))){ warning("m.order=",m.order," is invalid; used m.order='largest' instead",call.=FALSE);m.order="largest"} #ratio ratio <- round(ratio) if(!is.numeric(ratio) | ratio[1]<1 | !identical(round(length(ratio)),1)){ warning("ratio=",ratio," is invalid; used ratio=1 instead",call.=FALSE);ratio=1} #caliper if(!is.vector(caliper) | !identical(round(length(caliper)),1)){ warning("caliper=",caliper," is invalid; Caliper matching not done",call.=FALSE);caliper=0} if(caliper<0){ warning("caliper=",caliper," is less than 0; Caliper matching not done",call.=FALSE);caliper=0} #calclosest if(!(identical(calclosest,TRUE)| identical(calclosest,FALSE))){ warning("calclosest=",calclosest," is invalid; used calclosest=FALSE instead",call.=FALSE) calclosest=FALSE} #mahvars & caliper if (!is.null(mahvars) & caliper[1]==0){ warning("No caliper size specified for Mahalanobis matching. Caliper=.25 used.",call. = FALSE);caliper=.25} #when mahalanobis distance is used for all covars if(is.full.mahalanobis){ mahvars <- X Sigma <- var(X) ## Note: caliper irrelevant, but triggers mahalanobis matching caliper <- .25 ## no subclass with full mahalanobis if(!is.null(subclass)){ warning("No subclassification with pure Mahalanobis distance.",call. = FALSE) subclass <- NULL } } # Sample sizes, labels n <- length(treat) n0 <- length(treat[treat==0]) n1 <- length(treat[treat==1]) d1 <- distance[treat==1] d0 <- distance[treat==0] if(is.null(names(treat))) names(treat) <- 1:n labels <- names(treat) tlabels <- names(treat[treat==1]) clabels <- names(treat[treat==0]) in.sample <- !discarded names(in.sample) <- labels ## 10/1/07: Warning for if fewer control than ratio*treated and matching without replacement if (n0 < ratio*n1 & replace==FALSE) { if (ratio > 1) warning(paste("Not enough control units for ", ratio, " matches for each treated unit when matching without replacement. Not all treated units will receive", ratio, "matches")) else warning(paste("Fewer control than treated units and matching without replacement. Not all treated units will receive a match. Treated units will be matched in the order specified by m.order:", m.order)) } ## Generating match matrix match.matrix <- matrix(0, nrow=n1, ncol=ratio, dimnames=list(tlabels, 1:ratio)) ## Vectors of whether unit has been matched: ## = 0 if not matched (unit # of match if matched) ## = -1 if can't be matched (if in.sample=0) matchedc <- rep(0,length(d0)) names(matchedc) <- clabels ## These are the units that are ineligible because of discard ## (in.sample==0) matchedc[in.sample[clabels]==0] <- -1 match.matrix[in.sample[tlabels]==0,] <- -1 matchedt <- match.matrix[,1] names(matchedt) <- tlabels ## total number of matches (including ratios) = ratio * n1 tr <- length(match.matrix[match.matrix!=-1]) r <- 1 ## Caliper for matching (=0 if caliper matching not done) sd.cal <- caliper*sqrt(var(distance[in.sample==1])) ## Var-covar matrix for Mahalanobis (currently set for full sample) if (!is.null(mahvars) & !is.full.mahalanobis) { if(!sum(mahvars%in%names(data))==length(mahvars)) { warning("Mahvars not contained in data. Mahalanobis matching not done.",call.=FALSE) mahvars=NULL } else { ww <- mahvars%in%dimnames(X)[[2]] nw <- length(mahvars) mahvars <- data[,mahvars,drop=F] Sigma <- var(mahvars) if(sum(ww)!=nw){ X <- cbind(X,mahvars[!ww]) } mahvars <- as.matrix(mahvars) } } ## Now for exact matching within nearest neighbor ## exact should not equal T for this type of matching--that would get sent to matchit2exact if (!is.null(exact)){ if(!sum(exact%in%names(data))==length(exact)) { warning("Exact variables not contained in data. Exact matching not done.",call.=FALSE) exact=NULL } else { ww <- exact%in%dimnames(X)[[2]] nw <- length(exact) exact <- data[,exact,drop=F] if(sum(ww)!=nw){ X <- cbind(X,exact[!ww]) } } } ## Looping through nearest neighbour matching for all treatment units ## Only do matching for units with in.sample==1 (matched!=-1) if(verbose){ trseq <- floor(seq(tr/10,tr,tr/10)) cat("Matching Treated: ") } for(i in 1:tr){ ## Make new matchedc column to be used for exact matching ## Will only be 0 (eligible for matching) if it's an exact match if(verbose) {if(i%in%trseq){cat(10*which(trseq==i),"%...",sep="")}} # a counter matchedc2 <- matchedc ##in cases there's no replacement and all controls have been used up if(!0%in%matchedc2){ match.matrix[match.matrix[,r]==0 & !is.na(match.matrix[,r]),r] <- NA if(r1){itert <- sample(itert,1)} ## Calculating all the absolute deviations in propensity scores ## Calculate only for those eligible to be matched (matchedc==0) ## this first if statement only applies to replacement ratio ## matching, so that each treatment unit is matched to a different ## control unit than from the previous round ## match number = NA if no units within caliper ## Set things up for exact matching ## Make matchedc2==-2 if it isn't an exact match ## There might be a more efficient way to do this, but I couldn't figure ## out another way to compare a vector with the matrix if (!is.null(exact)) { for (k in 1:dim(exact)[2]) matchedc2[exact[itert,k]!=exact[clabels,k]] <- -2 } ## Need to add a check in case there aren't any eligible matches left... if(replace & r!=1) { if (sum(!clabels%in%match.matrix[itert,(1:r-1)] & matchedc2==0)==0) { deviation <- NULL mindev <- NA } else deviation <- abs(d0[!clabels%in%match.matrix[itert,(1:r-1)] & matchedc2==0]-iterd1) } else { if (sum(matchedc2==0)==0) { deviation <- NULL mindev <- NA } else deviation <- abs(d0[matchedc2==0]-iterd1) } if (caliper!=0 & (!is.null(deviation))) { if(replace & r!=1) pool <- clabels[!clabels%in%match.matrix[itert,(1:r-1)] & matchedc2==0][deviation <= sd.cal] else pool <- clabels[matchedc2==0][deviation <= sd.cal] if(length(pool)==0) { if (calclosest==FALSE) mindev <- NA else { if (replace & r!= 1){ mindev <- clabels[!clabels%in%match.matrix[itert,(1:r-1)]][min(deviation)==deviation] } else{mindev <- clabels[matchedc2==0][min(deviation)==deviation]} } } else if (length(pool)==1) mindev <- pool[1] else if (is.null(mahvars)) mindev <- sample(pool, 1) else { ## This has the important vars for the C's within the caliper poolvarsC <- mahvars[pool,,drop=F] ## Sigma is the full group var/covar matrix of Mahalvars mahal <- mahalanobis(poolvarsC, mahvars[itert,],Sigma) mindev <- pool[mahal==min(mahal)] } } else if(!is.null(deviation)) { if (replace & r!=1){ mindev <- clabels[!clabels%in%match.matrix[itert,(1:r-1)] & matchedc2==0][min(deviation)==deviation] } else {mindev <- clabels[matchedc2==0][min(deviation)==deviation]} } ## Resolving ties in minimum deviation by random draw if(length(mindev)>1){goodmatch <- sample(mindev,1)} else goodmatch <- mindev ## Storing which treatment unit has been matched to control, and ## vice versa matchedt[itert==tlabels] <- goodmatch matchedc[goodmatch==clabels] <- itert ## instead of the in.sample, we now have an index with dimensions n1 by # of ## matches (ratio) match.matrix[which(itert==tlabels),r] <- goodmatch ## If matching with replacement, set matchedc back to 0 so it can be reused if (replace) matchedc[goodmatch==clabels] <- 0 } if(verbose){cat("Done\n")} x <- as.matrix(match.matrix) x[x==-1] <- NA ## Calculate weights and return the results res <- list(match.matrix = match.matrix, weights = weights.matrix(match.matrix, treat, discarded), X=X) ## Subclassifying if(!is.null(subclass)){ if(is.null(sub.by)) sub.by="treat" psres <- matchit2subclass(treat,X,data,distance,discarded, match.matrix=match.matrix, subclass=subclass, verbose=verbose, sub.by=sub.by, ...) res$subclass <- psres$subclass res$q.cut <- psres$q.cut class(res) <- c("matchit.subclass", "matchit") } else{ class(res) <- "matchit" } return(res) } MatchIt/R/matchit2genetic.R0000644000175100001440000000242413075246077015234 0ustar hornikusersmatchit2genetic <- function(treat, X, data, distance, discarded, is.full.mahalanobis, ratio = 1, verbose = FALSE, ...) { if (verbose) cat("Genetic matching... \n") tt <- treat[!discarded] n <- length(tt) n1 <- length(tt[tt==1]) xx <- X[!discarded,] dd <- distance[!discarded] tind <- (1:n)[tt==1] cind <- (1:n)[tt==0] labels <- names(tt) tlabels <- names(tt[tt==1]) clabels <- names(tt[tt==0]) out <- Matching::GenMatch(tt, cbind(dd, xx), M = ratio, ...)$matches ## ratio matching does not seem to work with GenMatch mm <- matrix(0, nrow = n1, ncol = max(table(out[,1])), dimnames = list(tlabels, 1:max(table(out[,1])))) for (i in 1:n1) { tmp <- labels[c(out[out[,1]==tind[i],2:(ratio+1)])] if (length(tmp) < ncol(mm)) tmp <- c(tmp, rep(NA, ncol(mm)-length(tmp))) mm[i,] <- tmp } if (any(discarded)) { tdisc <- discarded[treat==1] tmp <- matrix(NA, nrow = sum(tdisc), ncol = ncol(mm), dimnames = list(names(treat[treat == 1 & discarded]), 1:ncol(mm))) mm <- as.matrix(rbind(mm, tmp)[names(treat[treat==1]),]) } res <- list(match.matrix = mm, weights = weights.matrix(mm, treat, discarded)) class(res) <- "matchit" return(res) } MatchIt/R/matchit.R0000644000175100001440000000736313075246077013622 0ustar hornikusers#' @export matchit <- function(formula, data, method = "nearest", distance = "logit", distance.options=list(), discard = "none", reestimate = FALSE, ...) { #Checking input format #data input mcall <- match.call() if(is.null(data)) stop("Dataframe must be specified",call.=FALSE) if(!is.data.frame(data)){ stop("Data must be a dataframe",call.=FALSE)} if(sum(is.na(data))>0) stop("Missing values exist in the data") # list-wise deletion # allvars <- all.vars(mcall) # varsindata <- colnames(data)[colnames(data) %in% all.vars(mcall)] # data <- na.omit(subset(data, select = varsindata)) ## 7/13/06: Convert character variables to factors as necessary ischar <- rep(0, dim(data)[2]) for (i in 1:dim(data)[2]) if(is.character(data[,i])) data[,i] <- as.factor(data[,i]) ## check inputs if (!is.numeric(distance)) { fn1 <- paste("distance2", distance, sep = "") if (!exists(fn1)) stop(distance, "not supported.") } if (is.numeric(distance)) { fn1 <- "distance2user" } fn2 <- paste("matchit2", method, sep = "") if (!exists(fn2)) stop(method, "not supported.") ## obtain T and X tryerror <- try(model.frame(formula), TRUE) if (distance %in% c("GAMlogit", "GAMprobit", "GAMcloglog", "GAMlog", "GAMcauchit")) { requireNamespace("mgcv") tt <- terms(mgcv::interpret.gam(formula)$fake.formula) } else { tt <- terms(formula) } attr(tt, "intercept") <- 0 mf <- model.frame(tt, data) treat <- model.response(mf) X <- model.matrix(tt, data=mf) ## estimate the distance measure if (method == "exact") { distance <- out1 <- discarded <- NULL if (!is.null(distance)) warning("distance is set to `NULL' when exact matching is used.") } else if (is.numeric(distance)){ out1 <- NULL discarded <- discard(treat, distance, discard, X) } else { if (is.null(distance.options$formula)) distance.options$formula <- formula if (is.null(distance.options$data)) distance.options$data <- data out1 <- do.call(fn1, distance.options) discarded <- discard(treat, out1$distance, discard, X) if (reestimate) { distance.options$data <- data[!discarded,] distance.options$weights <- distance.options$weights[!discarded] tmp <- out1 out1 <- do.call(fn1, distance.options) tmp$distance[!discarded] <- out1$distance out1$distance <- tmp$distance } distance <- out1$distance } ## full mahalanobis matching if(fn1=="distance2mahalanobis"){ is.full.mahalanobis <- TRUE } else {is.full.mahalanobis <- FALSE} ## matching! out2 <- do.call(fn2, list(treat, X, data, distance=distance, discarded, is.full.mahalanobis=is.full.mahalanobis, ...)) ## no distance for full mahalanobis matching if(fn1=="distance2mahalanobis"){ distance[1:length(distance)] <- NA class(out2) <- c("matchit.mahalanobis","matchit") } ## putting all the results together out2$call <- mcall out2$model <- out1$model out2$formula <- formula out2$treat <- treat if (is.null(out2$X)){ out2$X <- X } out2$distance <- distance out2$discarded <- discarded ## basic summary nn <- matrix(0, ncol=2, nrow=4) nn[1,] <- c(sum(out2$treat==0), sum(out2$treat==1)) nn[2,] <- c(sum(out2$treat==0 & out2$weights>0), sum(out2$treat==1 & out2$weights>0)) nn[3,] <- c(sum(out2$treat==0 & out2$weights==0 & out2$discarded==0), sum(out2$treat==1 & out2$weights==0 & out2$discarded==0)) nn[4,] <- c(sum(out2$treat==0 & out2$weights==0 & out2$discarded==1), sum(out2$treat==1 & out2$weights==0 & out2$discarded==1)) dimnames(nn) <- list(c("All","Matched","Unmatched","Discarded"), c("Control","Treated")) out2$nn <- nn return(out2) } MatchIt/R/class_functions.R0000644000175100001440000006413113075246077015362 0ustar hornikusers #' @import MASS #' @import stats #' @import utils #' @import graphics in_frame <- function(df, col) { exists(col, envir= as.environment(df)) } int_rownames <- function(mat) { options(warn= -1) rn <- as.integer(rownames(mat)) options(warn= 0) if (any(is.na(rn))) return(FALSE) else return(TRUE) } #---------------------------------------------------------- ### Inheritance #---------------------------------------------------------- #' @title Checks matchit Class #' @description Function that checks if the target object is a \code{matchit} object. #' @param object any R object #' @return Returns \code{TRUE} if its argument has class "matchit" among its classes and #' \code{FALSE} otherwise. #' @export is.matchit <- function(object) { inherits(object, "matchit") } #---------------------------------------------------------- ### GET MATCHES #---------------------------------------------------------- #' @title Get matches from matchit object #' @description Get the resulting matches from a \code{matchit} model object. This function allows the #' user to extract the matches from the original dataset used in model building or from a new dataset #' that has a matching set of key column(s) (\code{id_cols}). #' @param object The \code{'matchit'} class model object #' @param model_frame The \code{'data.frame'} class object used in creation of \code{object}. #' @param id_cols A string indicating the ID for the datset used in the call to \code{\link{matchit}}. #' This can be used in combination with \code{newdata} to return the base dataset. Defaults to #' \code{NULL}. #' @param newdata A new \code{data.frame} object to extract matched observations from. Used in #' conjunction with \code{id_cols}. Defaults to \code{NULL}. #' @return If \code{newdata} is \code{NULL}, a subset of \code{model_frame} containing the rows #' corresponding to the matched treatement and control observations with weights appended. If #' \code{newdata} is not \code{NULL}, an equivalent subset of \code{newdata} is returned. #' @export get_matches <- function(object, model_frame, id_cols= NULL, newdata= NULL) { UseMethod("get_matches", object) } #' @export get_matches.matchit <- function(object, model_frame, id_cols= NULL, newdata= NULL) { # 00. error checking if (!is.matchit(object)) stop("object must be a class 'matchit' object.") if (!is.data.frame(model_frame)) stop("model_frame must be a data.frame") if (nrow(model_frame) != nrow(object$X)) stop("model_frame must have the same number of rows as the data used in the call to 'matchit'.") if ( (!is.null(id_cols) & is.null(newdata)) | (is.null(id_cols) & !is.null(newdata)) ) { stop("For identity returns, both id_cols and newdata must be supplied.") } if (!is.null(id_cols) & !is.null(newdata)) { if (!is.character(id_cols)) stop("id_cols must be a character vector.") if (!all(sapply(id_cols, in_frame, df= model_frame))) stop("all values in id_cols must exist in model_frame") if (!all(sapply(id_cols, in_frame, df= newdata))) stop("all values in id_cols must exist in newdata") } # 01. preliminaries if ( any(grepl(pattern= "replace", x= names(object$call))) ) { idx_call_replace <- which(names(object$call) == "replace") } else { idx_call_replace <- -1L } use_subclass_matching <- base::grepl(x = object$call[4], pattern= paste(c("exact", "full", "subclass", "cem"), collapse= "|"), ignore.case= TRUE) # [deprecated] use_genetic_matching <- base::grepl(x = object$call[4], pattern= "genetic", ignore.case= TRUE) use_newdata <- ifelse(is.null(newdata), FALSE, TRUE) has_int_rownames <- int_rownames(model_frame) # 02. extract pairs, either exact matching or otherwise if (use_subclass_matching) { if (has_int_rownames) { row_idx <- as.integer(names(object$subclass)[which(!is.na(object$subclass))]) match_wts <- object$weights[which(!is.na(object$subclass))] model_subset <- data.frame(model_frame[row_idx, ], weight= match_wts) } else { row_idx <- names(object$subclass)[which(!is.na(object$subclass))] match_wts <- object$weights[which(!is.na(object$subclass))] model_subset <- data.frame(model_frame[which(rownames(model_frame) %in% row_idx), ], weight= match_wts) } } else { model_subset <- get_matches_non_subclass(object= object, model_frame= model_frame, has_int_rownames= has_int_rownames, idx_call_replace= idx_call_replace) } # 03. return if (!use_newdata) { return(model_subset) } else { # using newdata via id_cols newdata <- base::as.data.frame(newdata) # in case of data.table unique_ids <- base::unique(x= model_subset[, c(id_cols, "weight")]) # use of all == FALSE for two cases: # a) newdata contains additional IDs not in the matching data -- most common # b) if model_subset contains IDs that newdata does not have -- less common return(merge(newdata, unique_ids, by= id_cols, all.x=FALSE, all.y=FALSE)) } } get_matches_non_subclass <- function(object, model_frame, has_int_rownames, use_genetic_matching, idx_call_replace) { ## get match weights n_matches <- ncol(object$match.matrix) # get control observations that have matches and their frequency (ie weight) control_units <- object$match.matrix attr(control_units, "dim") <- NULL control_units <- control_units[!is.na(control_units)] control_wts <- table(control_units); class(control_wts) <- "vector" control_wts <- data.frame(ob= names(control_wts), weight= control_wts / n_matches, stringsAsFactors= FALSE) if (has_int_rownames) { treated_obs <- data.frame(model_frame[as.integer(rownames(object$match.matrix)), ], weight= 1) control_obs <- data.frame(model_frame[as.integer(control_wts$ob), ], weight= control_wts$weight) } else { treated_obs <- data.frame( model_frame[which(rownames(model_frame) %in% rownames(object$match.matrix)), ], weight= 1) model_frame$rownames <- rownames(model_frame) control_obs <- merge(model_frame, control_wts, by.x= "rownames", by.y= "ob", all= FALSE) rownames(control_obs) <- control_obs$rownames control_obs$rownames <- NULL control_obs$ob <- NULL } model_subset <- do.call("rbind", list(control_obs, treated_obs)) return(model_subset) } #---------------------------------------------------------- ### PLOT METHODS #---------------------------------------------------------- # Need to account for weights -- how do we do qq plots with weights #' @export plot.matchit <- function(x, discrete.cutoff=5, type="QQ", numdraws=5000, interactive = T, which.xs = NULL, ...){ if ("matchit.exact" %in% class(x)){ stop("Not appropriate for exact matching. No plots generated.") } if(type=="QQ"){ matchit.qqplot(x=x,discrete.cutoff=discrete.cutoff, numdraws=numdraws, interactive=interactive, which.xs = which.xs, ...) } else if(type=="jitter"){ if("matchit.mahalanobis" %in% class(x)){ stop("Not appropriate for pure Mahalanobis matching. No plots generated.") } jitter.pscore(x, interactive=interactive,...) } else if(type=="hist"){ if("matchit.mahalanobis" %in% class(x)){ stop("Not appropriate for pure Mahalanobis matching. No plots generated.") } hist.pscore(x,...) } else { stop("Invalid type") } } #' @export plot.matchit.subclass <- function(x, discrete.cutoff=5, type="QQ", interactive = T, subclass = NULL, which.xs=NULL,...){ choice.menu <- function(choices,question) { k <- length(choices)-1 Choices <- data.frame(choices) row.names(Choices) <- 0:k names(Choices) <- "Choices" print.data.frame(Choices,right=FALSE) ans <- readline(question) while(!ans%in%c(0:k)) { print("Not valid -- please pick one of the choices") print.data.frame(Choices,right=FALSE) ans <- readline(question) } return(ans) } if(type=="QQ"){ if(interactive){ choices <- c("No",paste("Yes : Subclass ", 1:max(x$subclass,na.rm=T))) question <- "Would you like to see quantile-quantile plots of any subclasses?" ans <- -1 while(ans!=0) { ans <- as.numeric(choice.menu(choices,question)) if(ans!=0) { matchit.qqplot(x,discrete.cutoff,which.subclass=ans, interactive = interactive, which.xs=which.xs,...) } } } else { matchit.qqplot(x,discrete.cutoff,which.subclass=subclass, interactive=interactive, which.xs=which.xs,...) } } else if(type=="jitter"){ jitter.pscore(x, interactive=interactive,...) } else if(type=="hist"){ hist.pscore(x,...) } else { stop("Invalid type") } } #' @export plot.summary.matchit <- function(x, interactive = TRUE, ...) { if ("matchit.exact" %in% class(x)){ stop("Not appropriate for exact matching. No plots generated.") } if (!"Std. Mean Diff."%in%names(x$sum.all)){ stop(paste("Not appropriate for unstandardized summary. Run summary() with the ", "standardize=TRUE option, and then plot.")) } sd.pre <- abs(x$sum.all$"Std. Mean Diff.") sd.post <- abs(x$sum.matched$"Std. Mean Diff.") if (!is.null(x$q.table)) sd.post <- abs(x$sum.subclass$"Std. Mean Diff") ases.dat <- data.frame(es.unw = sd.pre, es.w = sd.post) par(mfrow=c(1,1)) plot(c(0.85, 2.15), c(0, min(3, max(unlist(ases.dat[, 1:2]), na.rm = TRUE))), type = "n", xaxt = "n", ylab = "Absolute Standardized Diff in Means", xlab = "", main = "") abline(h = c(0.2, 0.4, 0.6, 0.8, 1.0)) axis(side = 1, at = 1:2, labels = c("All Data", "Matched Data")) for (i in 1:nrow(ases.dat)) { points(1:2, abs(ases.dat[i, c("es.unw", "es.w")]), type = "b", col = "grey", pch=19) } temp1 <- ases.dat[abs(ases.dat$es.unw) < abs(ases.dat$es.w),] for (i in 1:nrow(temp1)) { points(1:2, abs(temp1[i, c("es.unw", "es.w")]), type = "b", col = "black", lwd = 2, pch=19) } if (max(ases.dat$es.w, na.rm = TRUE) > 3) mtext(text = "Some standardized diffs in means > 3 after matching!", side = 3, col = "red") if(interactive==TRUE) { print("To identify the variables, use first mouse button; to stop, use second.") identify(rep(1, length(sd.pre)),sd.pre,rownames(x$sum.all),atpen=T) identify(rep(2, length(sd.post)),sd.post,rownames(x$sum.all),atpen=T) } } #---------------------------------------------------------- ### PRINT METHODS #---------------------------------------------------------- #' @export print.matchit <- function(x, digits = getOption("digits"), ...){ cat("\nCall: ", deparse(x$call), sep="\n") cat("\nSample sizes:\n") #if(any(x$weights>0)) # nn <- rbind(table(x$treat), # table(x$weights>0, x$treat), # c(0,0)) #else # nn <- rbind(table(x$treat), # table(x$weights>0,x$treat)[2:1,]) print.table(x$nn, ...) invisible(x) cat("\n") } #' @export print.matchit.exact <- function(x, digits = getOption("digits"), ...){ cat("\nCall: ", deparse(x$call), sep = "\n") cat("\nExact Subclasses: ", max(x$subclass, na.rm=T),"\n",sep="") cat("\nSample sizes:\n") ntab <- table(factor(!is.na(x$subclass), levels=c("TRUE","FALSE")), x$treat) nn <- rbind(table(x$treat), ntab[c("TRUE","FALSE"),]) dimnames(nn) <- list(c("All","Matched","Unmatched"), c("Control","Treated")) print.table(nn, ...) invisible(x) cat("\n") } #' @export print.matchit.full <- function(x, digits = getOption("digits"), ...){ cat("\nCall: ", deparse(x$call), sep = "\n") cat("\nSample sizes:\n") if (any(x$weights>0)) nn <- rbind(table(x$treat), table(x$weights>0, x$treat), c(0,0)) else nn <- rbind(table(x$treat), table(x$weights>0,x$treat)[2:1,]) dimnames(nn) <- list(c("All","Matched","Discarded"), c("Control","Treated")) print.table(nn, ...) invisible(x) cat("\n") } #' @export print.matchit.subclass <- function(x, digits = getOption("digits"), ...){ cat("\nCall: ", deparse(x$call), sep = "\n") cat("\nSample sizes by subclasses:\n\n") nsub <- table(x$subclass,x$treat) nn <- rbind(table(x$treat),nsub) dimnames(nn) <- list(c("All",paste("Subclass",dimnames(nsub)[[1]])), c("Control","Treated")) print.table(nn, ...) invisible(x) cat("\n") } #' @export print.summary.matchit.exact <- function(x, digits = max(3, getOption("digits") - 3), ...){ cat("\nCall:", deparse(x$call), sep = "\n") cat("\nSample sizes:\n") print.table(x$nn,digits=digits) cat("\nMatched sample sizes by subclass:\n") print.data.frame(x$q.table, digits = digits) cat("\n") invisible(x) } #' @export print.summary.matchit <- function(x, digits = max(3, getOption("digits") - 3), ...){ sum.all <- x$sum.all sum.matched <- x$sum.matched q.table <- x$q.table xn <- x$nn cat("\nCall:", deparse(x$call), sep = "\n") cat("\nSummary of balance for all data:\n") print.data.frame(round(sum.all,digits)) cat("\n") xs1 <- sum.matched cc <- row.names(sum.all) if(!is.null(x$sum.matched) | identical(eval(x$call$method),"All")) { cat("\nSummary of balance for matched data:\n") print.data.frame(round(xs1,digits)) cat("\nPercent Balance Improvement:\n") print.data.frame(round(x$reduction,digits)) cat("\nSample sizes:\n") print.table(xn, digits=digits) cat("\n") } invisible(x) } #' @export print.summary.matchit.subclass <- function(x, digits = max(3, getOption("digits") - 3), ...){ sum.all <- x$sum.all sum.matched <- x$sum.matched q.table <- x$q.table cat("\nCall:", deparse(x$call), sep = "\n") cat("Summary of balance for all data:\n") print.data.frame(round(sum.all,digits)) cat("\n") cat("\nSummary of balance by subclasses:\n") print.table(round(q.table, digits)) cat("\nSample sizes by subclasses:\n") print.data.frame(x$qn, digits = digits) cat("\nSummary of balance across subclasses\n") print.data.frame(round(x$sum.subclass, digits)) cat("\nPercent Balance Improvement:\n") print.data.frame(round(x$reduction,digits)) cat("\n") } #---------------------------------------------------------- ### SUMMARY METHODS #---------------------------------------------------------- #' @export summary.matchit <- function(object, interactions = FALSE, addlvariables = NULL, standardize = FALSE, ...) { X <- object$X ## Fix X matrix so that it doesn't have any factors varnames <- colnames(X) for(var in varnames) { if(is.factor(X[,var])) { tempX <- X[,!colnames(X)%in%c(var)] form<-formula(substitute(~dummy-1,list(dummy=as.name(var)))) X <- cbind(tempX, model.matrix(form, X)) } } ## No distance output for pure Mahalanobis if("matchit.mahalanobis"%in%class(object)){ XX <- X } else{ XX <- cbind(distance=object$distance,X) } if (!is.null(addlvariables)) XX <- cbind(XX, addlvariables) treat <- object$treat weights <- object$weights nam <- dimnames(XX)[[2]] dupnam <- duplicated(nam) if(sum(dupnam)>0){ nam[dupnam] <- paste(nam[dupnam],".1",sep="") } kk <- ncol(XX) ## Summary Stats aa <- apply(XX,2,qoi,tt=treat,ww=weights,standardize=standardize,std=T) sum.all <- as.data.frame(matrix(0,kk,7)) sum.matched <- as.data.frame(matrix(0,kk,7)) row.names(sum.all) <- row.names(sum.matched) <- nam names(sum.all) <- names(sum.matched) <- names(aa[[1]]) sum.all.int <- sum.matched.int <- NULL for(i in 1:kk){ sum.all[i,] <- aa[[i]][1,] sum.matched[i,] <- aa[[i]][2,] if(interactions){ for(j in i:kk){ x2 <- XX[,i]*as.matrix(XX[,j]) jqoi <- qoi(x2,tt=treat,ww=weights,standardize=standardize,std=T) sum.all.int <- rbind(sum.all.int,jqoi[1,]) sum.matched.int <- rbind(sum.matched.int,jqoi[2,]) row.names(sum.all.int)[nrow(sum.all.int)] <- row.names(sum.matched.int)[nrow(sum.matched.int)] <- paste(nam[i],nam[j],sep="x") } } } xn <- aa[[1]]$xn sum.all <- rbind(sum.all,sum.all.int) sum.matched <- rbind(sum.matched,sum.matched.int) ## Imbalance Reduction stat0 <- abs(cbind(sum.all[,2]-sum.all[,1], sum.all[,5:7])) stat1 <- abs(cbind(sum.matched[,2]-sum.matched[,1], sum.matched[,5:7])) reduction <- as.data.frame(100*(stat0-stat1)/stat0) if(sum(stat0==0 & stat1==0, na.rm=T)>0){ reduction[stat0==0 & stat1==0] <- 0 } if(sum(stat0==0 & stat1>0,na.rm=T)>0){ reduction[stat0==0 & stat1>0] <- -Inf } if (standardize) names(reduction) <- c("Std. Mean Diff.", "eCDF Med","eCDF Mean", "eCDF Max") else names(reduction) <- c("Mean Diff.", "eQQ Med","eQQ Mean", "eQQ Max") ## output res <- list(call=object$call, nn = object$nn, sum.all = sum.all, sum.matched = sum.matched, reduction = reduction) class(res) <- "summary.matchit" return(res) } #' @export summary.matchit.exact <- function(object, covariates = FALSE, ...) { XX <- object$X treat <- object$treat qbins <- max(object$subclass,na.rm=TRUE) if(!covariates){ q.table <- as.data.frame(matrix(0,qbins,3)) names(q.table) <- c("Treated","Control","Total") for(i in 1:qbins){ qi <- object$subclass==i q.table[i,] <- c(sum(treat[qi]==1, na.rm=T), sum(treat[qi]==0, na.rm=T), length(treat[qi & !is.na(qi)])) } } else { kk <- ncol(XX) q.table <- as.data.frame(matrix(0,qbins,kk+3)) names(q.table) <- c("Treated","Control","Total",dimnames(XX)[[2]]) for(i in 1:qbins){ qi <- object$subclass==i & !is.na(object$subclass==i) q.table[i,] <- c(sum(treat[qi]==1, na.rm=T), sum(treat[qi]==0, na.rm=T), length(treat[qi & !is.na(qi)]),as.numeric(XX[qi,,drop=F][1,])) } } ntab <- table(factor(!is.na(object$subclass), levels=c("TRUE","FALSE")), treat) nn <- rbind(table(treat), ntab[c("TRUE","FALSE"),]) dimnames(nn) <- list(c("All","Matched","Discarded"), c("Control","Treated")) ## output res <- list(q.table = q.table, nn = nn, subclass = object$subclass, treat = object$treat, call = object$call) class(res) <- c("summary.matchit.exact", "summary.matchit") return(res) } #' @export summary.matchit.full <- function(object, interactions = FALSE, addlvariables = NULL, numdraws = 5000, standardize = FALSE, ...) { XX <- cbind(distance=object$distance,object$X) if (!is.null(addlvariables)) XX <- cbind(XX, addlvariables) treat <- object$treat weights <- object$weights nam <- dimnames(XX)[[2]] kk <- ncol(XX) ## Get samples of T and C units to send to qqplot t.plot <- sample(names(treat)[treat==1], numdraws/2, replace=TRUE, prob=weights[treat==1]) c.plot <- sample(names(treat)[treat==0], numdraws/2, replace=TRUE, prob=weights[treat==0]) ## Summary Stats aa <- apply(XX,2,qoi,tt=treat,ww=weights, t.plot=t.plot, c.plot=c.plot, standardize=standardize) sum.all <- as.data.frame(matrix(0,kk,6)) sum.matched <- as.data.frame(matrix(0,kk,6)) row.names(sum.all) <- row.names(sum.matched) <- nam names(sum.all) <- names(sum.matched) <- names(aa[[1]]) sum.all.int <- sum.matched.int <- NULL for(i in 1:kk){ sum.all[i,] <- aa[[i]][1,] sum.matched[i,] <- aa[[i]][2,] if(interactions){ for(j in i:kk){ x2 <- XX[,i]*as.matrix(XX[,j]) names(x2) <- names(XX[,1]) jqoi <- qoi(x2,tt=treat,ww=weights, t.plot=t.plot, c.plot=c.plot, standardize=standardize) sum.all.int <- rbind(sum.all.int,jqoi[1,]) sum.matched.int <- rbind(sum.matched.int,jqoi[2,]) row.names(sum.all.int)[nrow(sum.all.int)] <- row.names(sum.matched.int)[nrow(sum.matched.int)] <- paste(nam[i],nam[j],sep="x") } } } xn <- aa[[1]]$xn sum.all <- rbind(sum.all,sum.all.int) sum.matched <- rbind(sum.matched,sum.matched.int) ## Imbalance Reduction stat0 <- abs(cbind(sum.all[,2]-sum.all[,1], sum.all[,4:6])) stat1 <- abs(cbind(sum.matched[,2]-sum.matched[,1], sum.matched[,4:6])) reduction <- as.data.frame(100*(stat0-stat1)/stat0) if(sum(stat0==0 & stat1==0, na.rm=T)>0){ reduction[stat0==0 & stat1==0] <- 0 } if(sum(stat0==0 & stat1>0,na.rm=T)>0){ reduction[stat0==0 & stat1>0] <- -Inf } if (standardize) names(reduction) <- c("Std. Mean Diff.", "eCDF Med","eCDF Mean", "eCDF Max") else names(reduction) <- c("Mean Diff.", "eQQ Med","eQQ Mean", "eQQ Max") ## Sample sizes nn <- matrix(0, ncol=2, nrow=4) nn[1,] <- c(sum(object$treat==0), sum(object$treat==1)) nn[2,] <- c(sum(object$treat==0 & object$weights>0), sum(object$treat==1 & object$weights>0)) nn[3,] <- c(sum(object$treat==0 & object$weights==0 & object$discarded==0), sum(object$treat==1 & object$weights==0 & object$discarded==0)) nn[4,] <- c(sum(object$treat==0 & object$weights==0 & object$discarded==1), sum(object$treat==1 & object$weights==0 & object$discarded==1)) dimnames(nn) <- list(c("All","Matched","Unmatched","Discarded"), c("Control","Treated")) ## output res <- list(call=object$call, nn = nn, sum.all = sum.all, sum.matched = sum.matched, reduction = reduction) class(res) <- c("summary.matchit.full", "summary.matchit") return(res) } #' @export summary.matchit.subclass <- function(object, interactions = FALSE, addlvariables=NULL, standardize = FALSE, ...) { X <- object$X ## Fix X matrix so that it doesn't have any factors varnames <- colnames(X) for(var in varnames) { if(is.factor(X[,var])) { tempX <- X[,!colnames(X)%in%c(var)] form<-formula(substitute(~dummy-1,list(dummy=as.name(var)))) X <- cbind(tempX, model.matrix(form, X)) } } XX <- cbind(distance=object$distance,X) if (!is.null(addlvariables)) XX <- cbind(XX, addlvariables) treat <- object$treat weights <- object$weights nam <- dimnames(XX)[[2]] kk <- ncol(XX) ## Summary Stats aa <- apply(XX,2,qoi,tt=treat,ww=as.numeric(weights!=0),standardize=standardize) sum.all <- as.data.frame(matrix(0,kk,6)) sum.matched <- as.data.frame(matrix(0,kk,6)) row.names(sum.all) <- row.names(sum.matched) <- nam names(sum.all) <- names(sum.matched) <- names(aa[[1]]) sum.all.int <- sum.matched.int <- NULL for(i in 1:kk){ sum.all[i,] <- aa[[i]][1,] sum.matched[i,] <- aa[[i]][2,] if(interactions){ for(j in i:kk){ x2 <- XX[,i]*as.matrix(XX[,j]) jqoi <- qoi(x2,tt=treat,ww=as.numeric(weights!=0),standardize=standardize) sum.all.int <- rbind(sum.all.int,jqoi[1,]) sum.matched.int <- rbind(sum.matched.int,jqoi[2,]) row.names(sum.all.int)[nrow(sum.all.int)] <- row.names(sum.matched.int)[nrow(sum.matched.int)] <- paste(nam[i],nam[j],sep="x") } } } xn <- aa[[1]]$xn sum.all <- rbind(sum.all,sum.all.int) sum.matched <- rbind(sum.matched,sum.matched.int) ## By Subclass qbins <- max(object$subclass,na.rm=TRUE) if(interactions){ q.table <- array(0,dim=c(kk+sum(1:kk),6,qbins)) ii <- 0 nn <- NULL } else { q.table <- array(0,dim=c(kk,6,qbins)) } aa <- apply(XX,2,qoi.by.sub,tt=treat,ww=weights, qq=object$subclass,standardize=standardize) for(i in 1:kk){ if(!interactions){ q.table[i,,] <- as.matrix(aa[[i]]$q.table) nn <- names(aa) } else { ii <- ii + 1 q.table[ii,,] <- as.matrix(aa[[i]]$q.table) nn <- c(nn,names(aa)[i]) for(j in i:kk){ ii <- ii + 1 x2 <- XX[,i]*as.matrix(XX[,j]) q.table[ii,,] <- as.matrix(qoi.by.sub(x2,tt=treat,ww=weights,qq=object$subclass, standardize=standardize)$q.table) nn <- c(nn,paste(nam[i],nam[j],sep="x")) } } } qn <- aa[[1]]$qn dimnames(q.table) <- list(nn,row.names(aa[[i]]$q.table),paste("Subclass",1:qbins)) ## Aggregate Subclass if(is.null(object$call$sub.by)){ object$call$sub.by <- "treat" } if(object$call$sub.by=="treat") { wsub <- qn[1,]/sum(qn[1,]) } else if(object$call$sub.by=="control") { wsub <- qn[2,]/sum(qn[2,]) } else if(object$call$sub.by=="all") { wsub <- qn[3,]/sum(qn[3,]) } sum.subclass <- sum.all for(i in 1:kk){ for(j in 1:6){ if(j==3) { sum.subclass[i,j] <- sqrt(sum((wsub^2)*(q.table[i,j,]^2))) } else { sum.subclass[i,j] <- sum(wsub*q.table[i,j,]) } } } ## Imbalance Reduction stat0 <- abs(cbind(sum.all[,2]-sum.all[,1], sum.all[,4:6])) stat1 <- abs(cbind(sum.subclass[,2]-sum.subclass[,1], sum.subclass[,4:6])) reduction <- as.data.frame(100*(stat0-stat1)/stat0) if(sum(stat0==0 & stat1==0, na.rm=T)>0){ reduction[stat0==0 & stat1==0] <- 0 } if(sum(stat0==0 & stat1>0,na.rm=T)>0){ reduction[stat0==0 & stat1>0] <- -Inf } if (standardize) names(reduction) <- c("Std. Mean Diff.", "eCDF Med","eCDF Mean", "eCDF Max") else names(reduction) <- c("Mean Diff.", "eQQ Med","eQQ Mean", "eQQ Max") ## output res <- list(call=object$call, sum.all = sum.all, sum.matched = sum.matched, sum.subclass = sum.subclass, reduction = reduction, qn = qn, q.table = q.table) class(res) <- c("summary.matchit.subclass", "summary.matchit") return(res) } MatchIt/R/distance2mahalanobis.R0000644000175100001440000000037413060361514016223 0ustar hornikusersdistance2mahalanobis <- function(formula, data, ...) { X <- model.matrix(formula, data) ## Placeholder where real work is done on a unit by unit basis distance <- rep(1, nrow(X)) return(list(model = NULL, distance = distance)) } MatchIt/vignettes/0000755000175100001440000000000013075401340013626 5ustar hornikusersMatchIt/vignettes/matchit.pdf.asis0000644000175100001440000000017113060361515016712 0ustar hornikusers%\VignetteIndexEntry{MatchIt: Nonparametric Preprocessing for Parametric Causal Inference} %\VignetteEngine{R.rsp::asis} MatchIt/README.md0000644000175100001440000000131013060361515013073 0ustar hornikusers# MatchIt: Nonparametric Preprocessing for Parametric Causal Inference [![Build Status](https://travis-ci.org/kosukeimai/MatchIt.svg?branch=master)](https://travis-ci.org/kosukeimai/MatchIt) [![CRAN_Status_Badge](http://www.r-pkg.org/badges/version/MatchIt)](https://cran.r-project.org/package=MatchIt) MatchIt selects matched samples of the original treated and control groups with similar covariate distributions -- can be used to match exactly on covariates, to match on propensity scores, or perform a variety of other matching procedures. The package also implements a series of recommendations offered in Ho, Imai, King, and Stuart (2007) <[DOI:10.1093/pan/mpl013](https://doi.org/10.1093/pan/mpl013)>. MatchIt/MD50000644000175100001440000000531313075407325012141 0ustar hornikusers5ad5b77b983db990c01a5233fc09dfb7 *DESCRIPTION b30628ac0ee52d8b1610d133e572c902 *NAMESPACE 9998c366a3c5c36d1d4ed1519a3bdaa8 *R/class_functions.R ed62025d3c0f97843134e919fe3534d9 *R/discard.R 7c0120871315fade6af6cee738422bf1 *R/distance2GAM.R 7609f0509313c85eebe66fe1493f1389 *R/distance2glm.R 144da2b6b682f5c41a9482dd487b53b9 *R/distance2mahalanobis.R a43c16d86d85965e99ccd02f201e305e *R/distance2nnet.R f016cd083061d48afc0e964838fcc0bf *R/distance2rpart.R 5f580ff3918496a1a445853fdc6b8fe0 *R/eqqplot.R 92f1489efe0a6a454954434751ce438b *R/help.matchit.R 52e4ed5c0327fbcc2b668b3f1af53a84 *R/hist.pscore.R 3c36d8f77d3aec21fca511bd1eef4f16 *R/jitter.pscore.R 37b950f95aaa46c2ad5afbb1c586948c *R/match.data.R 6cbef71c72b30938dd82993e06398ca3 *R/match.qoi.R cf940b61b98c0483b2b540d80fc19853 *R/matchit.R 4b04e5ff6fc50b37773b4cb1aecbf2cf *R/matchit.qqplot.R 5178cebc57f2f2a2db69c30693b51372 *R/matchit2cem.R 21a14b702e7d501cdf4161af256b2e7c *R/matchit2exact.R b04b32355fd52db047e6b3b0638e5952 *R/matchit2full.R 5c0028a2107aba0f7c71c80add98b1d9 *R/matchit2genetic.R aa55850e4a029db31a1c57328d5a785b *R/matchit2nearest.R e610d71c6f932f36037766b847297ab9 *R/matchit2optimal.R 8991d0cf380be259b3f76d8d12de7378 *R/matchit2subclass.R 1dd4a4ccfab350865e0d5e218c156a8a *R/qqsum.R a5e34bb95ca36b69d0d3e65d8eced694 *R/user.prompt.R dc1fdc9ceaf5b35d0a69cc189db06dc2 *R/weights.matrix.R 5d82fa6c1ae051325128757a29e38c55 *R/weights.subclass.R 8e5a3e58c45c1ebacfeae12811807976 *README.md 329e56593217fa0c9048b18f6dce2922 *build/vignette.rds a1a7a516af5ac0a8d1967cb29eb4acfe *data/lalonde.tab.gz 870d0ee00f3fd621950dc7cfe268317a *demo/00Index da045e6883d634901d49484ab0dfcb1d *demo/analysis.R cd3f75d34843736106323d8a41b601af *demo/cem.R fa999a9d842aba5b03f2c4e008c0bcea *demo/exact.R 37d86eff76f06c83cddea70da20e4795 *demo/full.R a6aa059e34c6673ff254a08726f2264d *demo/genetic.R 8985a35d629f63c965fc833677d8394a *demo/match.data.R c959726a30ddc8b1883717eedbc7c912 *demo/nearest.R 878dbcbd1c485d1b3e71a72f73960385 *demo/optimal.R e08c2401c4a03d9e5f37456be103572a *demo/subclass.R 3eda425777172d9aaa9d907061df3387 *inst/CITATION 2f9bde7d816114183d114957cf0fbb61 *inst/doc/matchit.pdf 45b7c211157672e0d15c81c74de32cfe *inst/doc/matchit.pdf.asis d4c5f142981d7eba4e9883acd24d4333 *man/get_matches.Rd 6312a97d096669571c74667ef6cc078a *man/help.matchit.Rd 385bd1702bc302dc9a75b84ff85f58bc *man/is.matchit.Rd 0358b2f82d3ddfa8a642b726b0c34755 *man/lalonde.Rd d3b0d22dad0e64fcf5b84f3303f7bc7a *man/match.data.Rd 605af5ede3b2290c6233be639f85cb58 *man/matchit.Rd 4cc2194b9b06d3765105272f7618dff5 *man/user.prompt.Rd 4077dcfde39f1437a7af9482cf787086 *tests/testthat.R ca1cec28cd1042112fca6ec3c413e549 *tests/testthat/test-get_matches.R 45b7c211157672e0d15c81c74de32cfe *vignettes/matchit.pdf.asis MatchIt/build/0000755000175100001440000000000013075401340012715 5ustar hornikusersMatchIt/build/vignette.rds0000644000175100001440000000036113075401340015254 0ustar hornikusersmPۊ0MZE~n)Ň}ҩII"_v 3srNPf΍-E$!w`yW79aX{|i٧hءՂJcGcܲFiVhR6Qr vng׺{Ir|+CYLVx<( zƷ-w7'*[}Z^ܫ=9wv/[0i }gxMatchIt/DESCRIPTION0000644000175100001440000000256413075407325013344 0ustar hornikusersPackage: MatchIt Version: 3.0.1 Date: 2017-04-18 Title: Nonparametric Preprocessing for Parametric Casual Inference Description: Selects matched samples of the original treated and control groups with similar covariate distributions -- can be used to match exactly on covariates, to match on propensity scores, or perform a variety of other matching procedures. The package also implements a series of recommendations offered in Ho, Imai, King, and Stuart (2007) . Authors@R: c( person("Daniel", "Ho", , "daniel.e.ho@gmail.com", c("aut")), person("Kosuke", "Imai", , "kimai@Princeton.Edu", c("aut", "cre")), person("Gary", "King", , "king@harvard.edu", c("aut")), person("Elizabeth", "Stuart", , "stuart@stat.harvard.edu", c("aut")), person("Alex", "Whitworth", , "whitworth.alex@gmail.com", c("ctb")) ) Maintainer: Kosuke Imai Depends: R (>= 2.6) Imports: MASS, Matching, rgenoud Suggests: cem, nnet, optmatch, rpart, mgcv, WhatIf, R.rsp, testthat VignetteBuilder: R.rsp LazyLoad: yes LazyData: yes License: GPL (>= 2) URL: http://gking.harvard.edu/matchit RoxygenNote: 5.0.1 NeedsCompilation: no Packaged: 2017-04-18 12:13:20 UTC; kimai Author: Daniel Ho [aut], Kosuke Imai [aut, cre], Gary King [aut], Elizabeth Stuart [aut], Alex Whitworth [ctb] Repository: CRAN Date/Publication: 2017-04-18 13:04:21 UTC MatchIt/man/0000755000175100001440000000000013075246077012407 5ustar hornikusersMatchIt/man/get_matches.Rd0000644000175100001440000000244013075246077015161 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_functions.R \name{get_matches} \alias{get_matches} \title{Get matches from matchit object} \usage{ get_matches(object, model_frame, id_cols = NULL, newdata = NULL) } \arguments{ \item{object}{The \code{'matchit'} class model object} \item{model_frame}{The \code{'data.frame'} class object used in creation of \code{object}.} \item{id_cols}{A string indicating the ID for the datset used in the call to \code{\link{matchit}}. This can be used in combination with \code{newdata} to return the base dataset. Defaults to \code{NULL}.} \item{newdata}{A new \code{data.frame} object to extract matched observations from. Used in conjunction with \code{id_cols}. Defaults to \code{NULL}.} } \value{ If \code{newdata} is \code{NULL}, a subset of \code{model_frame} containing the rows corresponding to the matched treatement and control observations with weights appended. If \code{newdata} is not \code{NULL}, an equivalent subset of \code{newdata} is returned. } \description{ Get the resulting matches from a \code{matchit} model object. This function allows the user to extract the matches from the original dataset used in model building or from a new dataset that has a matching set of key column(s) (\code{id_cols}). } MatchIt/man/lalonde.Rd0000644000175100001440000000304313060361515014301 0ustar hornikusers\name{lalonde} \docType{data} \alias{lalonde} \title{Data from National Supported Work Demonstration and PSID, as analyzed by Dehejia and Wahba (1999).} \description{ This is a subsample of the data from the treated group in the National Supported Work Demonstration (NSW) and the comparison sample from the Current Population Survey (CPS). This data was previously analyzed extensively by Lalonde (1986) and Dehejia and Wahba (1999). } \usage{data(lalonde)} \format{ A data frame with 313 observations (185 treated, 429 control). There are 10 variables measured for each individual. "treat" is the treatment assignment (1=treated, 0=control). "age" is age in years. "educ" is education in number of years of schooling. "black" is an indicator for African-American (1=African-American, 0=not). "hispan" is an indicator for being of Hispanic origin (1=Hispanic, 0=not). "married" is an indicator for married (1=married, 0=not married). "nodegree" is an indicator for whether the individual has a high school degree (1=no degree, 0=degree). "re74" is income in 1974, in U.S. dollars. "re75" is income in 1975, in U.S. dollars. "re78" is income in 1978, in U.S. dollars. } \references{ Lalonde, R. (1986). Evaluating the econometric evaluations of training programs with experimental data. American Economic Review 76: 604-620. Dehejia, R.H. and Wahba, S. (1999). Causal Effects in Nonexperimental Studies: Re-Evaluating the Evaluation of Training Programs. Journal of the American Statistical Association 94: 1053-1062. } \keyword{datasets} MatchIt/man/help.matchit.Rd0000644000175100001440000000225113060361515015243 0ustar hornikusers\name{help.matchit} \alias{help.matchit} \title{HTML Help for Matchit Commands and Models} \description{ The \code{help.matchit} command launches html help for Matchit commands and supported methods. The full manual is available online at \url{http://gking.harvard.edu/matchit}. } \usage{ help.matchit(object) } \arguments{ \item{object}{a character string representing a Matchit command or model. \code{help.matchit("command")} will take you to an index of Matchit commands and \code{help.matchit("method")} will take you to a list of matching methods. The following inputs are currently available: \code{exact}, \code{nearest}, \code{subclass}, \code{full}, \code{optimal}. } } \seealso{The complete document is available online at \url{http://gking.harvard.edu/matchit}. } \author{ Daniel Ho <\email{daniel.ho@yale.edu}>; Kosuke Imai <\email{kimai@princeton.edu}>; Gary King <\email{king@harvard.edu}>; Elizabeth Stuart<\email{estuart@jhsph.edu}> } \keyword{documentation} MatchIt/man/matchit.Rd0000644000175100001440000001754113060361515014324 0ustar hornikusers\name{matchit} \alias{matchit} \alias{MatchIt} \alias{Matchit} \title{MatchIt: Matching Software for Causal Inference} \description{ \code{matchit} is the main command of the package \emph{MatchIt}, which enables parametric models for causal inference to work better by selecting well-matched subsets of the original treated and control groups. MatchIt implements the suggestions of Ho, Imai, King, and Stuart (2004) for improving parametric statistical models by preprocessing data with nonparametric matching methods. MatchIt implements a wide range of sophisticated matching methods, making it possible to greatly reduce the dependence of causal inferences on hard-to-justify, but commonly made, statistical modeling assumptions. The software also easily fits into existing research practices since, after preprocessing with MatchIt, researchers can use whatever parametric model they would have used without MatchIt, but produce inferences with substantially more robustness and less sensitivity to modeling assumptions. Matched data sets created by MatchIt can be entered easily in Zelig (\url{http://gking.harvard.edu/zelig}) for subsequent parametric analyses. Full documentation is available online at \url{http://gking.harvard.edu/matchit}, and help for specific commands is available through \code{help.matchit}.} \details{The matching is done using the \code{matchit(treat ~ X, ...)} command, where \code{treat} is the vector of treatment assignments and \code{X} are the covariates to be used in the matching. There are a number of matching options, detailed below. The full syntax is \code{matchit(formula, data=NULL, discard=0, exact=FALSE, replace=FALSE, ratio=1, model="logit", reestimate=FALSE, nearest=TRUE, m.order=2, caliper=0, calclosest=FALSE, mahvars=NULL, subclass=0, sub.by="treat", counter=TRUE, full=FALSE, full.options=list(), \dots)} A summary of the results can be seen graphically using \code{plot(matchitobject)}, or numerically using \code{summary(matchitobject)}. \code{print(matchitobject)} also prints out the output. } \usage{matchit(formula, data, method = "nearest", distance = "logit", distance.options = list(), discard = "none", reestimate = FALSE, ...) } \arguments{ \item{formula}{This argument takes the usual syntax of R formula, \code{treat ~ x1 + x2}, where \code{treat} is a binary treatment indicator and \code{x1} and \code{x2} are the pre-treatment covariates. Both the treatment indicator and pre-treatment covariates must be contained in the same data frame, which is specified as \code{data} (see below). All of the usual R syntax for formula works. For example, \code{x1:x2} represents the first order interaction term between \code{x1} and \code{x2}, and \code{I(x1^2)} represents the square term of \code{x1}. See \code{help(formula)} for details.} \item{data}{This argument specifies the data frame containing the variables called in \code{formula}.} \item{method}{This argument specifies a matching method. Currently, \code{"exact"} (exact matching), \code{"full"} (full matching), \code{"genetic"} (genetic matching), \code{"nearest"} (nearest neighbor matching), \code{"optimal"} (optimal matching), and \code{"subclass"} (subclassification) are available. The default is \code{"nearest"}. Note that within each of these matching methods, \emph{MatchIt} offers a variety of options.} \item{distance}{This argument specifies the method used to estimate the distance measure. The default is logistic regression, \code{"logit"}. A variety of other methods are available.} \item{distance.options}{ This optional argument specifies the optional arguments that are passed to the model for estimating the distance measure. The input to this argument should be a list.} \item{discard}{This argument specifies whether to discard units that fall outside some measure of support of the distance score before matching, and not allow them to be used at all in the matching procedure. Note that discarding units may change the quantity of interest being estimated. The options are: \code{"none"} (default), which discards no units before matching, \code{"both"}, which discards all units (treated and control) that are outside the support of the distance measure, \code{"control"}, which discards only control units outside the support of the distance measure of the treated units, and \code{"treat"}, which discards only treated units outside the support of the distance measure of the control units.} \item{reestimate}{This argument specifies whether the model for distance measure should be re-estimated after units are discarded. The input must be a logical value. The default is \code{FALSE}.} \item{...}{Additional arguments to be passed to a variety of matching methods.} } \value{ \item{call}{The original \code{matchit} call.} \item{formula}{The formula used to specify the model for estimating the distance measure.} \item{model}{The output of the model used to estimate the distance measure. \code{summary(m.out$model)} will give the summary of the model where \code{m.out} is the output object from \code{matchit}.} \item{match.matrix}{An \eqn{n_1} by \code{ratio} matrix where the row names, which can be obtained through \code{row.names(match.matrix)}, represent the names of the treatment units, which come from the data frame specified in \code{data}. Each column stores the name(s) of the control unit(s) matched to the treatment unit of that row. For example, when the \code{ratio} input for nearest neighbor or optimal matching is specified as 3, the three columns of \code{match.matrix} represent the three control units matched to one treatment unit). \code{NA} indicates that the treatment unit was not matched.} \item{discarded}{A vector of length $n$ that displays whether the units were ineligible for matching due to common support restrictions. It equals \code{TRUE} if unit \eqn{i} was discarded, and it is set to \code{FALSE} otherwise.} \item{distance}{A vector of length \eqn{n} with the estimated distance measure for each unit.} \item{weights}{A vector of length \eqn{n} that provides the weights assigned to each unit in the matching process. Unmatched units have weights equal to \code{0}. Matched treated units have weight \code{1}. Each matched control unit has weight proportional to the number of treatment units to which it was matched, and the sum of the control weights is equal to the number of uniquely matched control units.} \item{subclass}{The subclass index in an ordinal scale from 1 to the total number of subclasses as specified in \code{subclass} (or the total number of subclasses from full or exact matching). Unmatched units have \code{NA}.} \item{q.cut}{The subclass cut-points that classify the distance measure.} \item{treat}{The treatment indicator from \code{data} (the left-hand side of \code{formula}).} \item{X}{The covariates used for estimating the distance measure (the right-hand side of \code{formula}).} \item{nn}{A basic summary table of matched data (e.g., the number of matched units)} } \seealso{Please use \code{help.matchit} to access the matchit reference manual. The complete document is available online at \url{http://gking.harvard.edu/matchit}. } \references{Daniel Ho, Kosuke Imai, Gary King, and Elizabeth Stuart (2007). Matching as Nonparametric Preprocessing for Reducing Model Dependence in Parametric Causal Inference. Political Analysis 15(3): 199-236. \url{http://gking.harvard.edu/files/abs/matchp-abs.shtml} } \author{ Daniel Ho \email{daniel.ho@yale.edu}; Kosuke Imai \email{kimai@princeton.edu}; Gary King \email{king@harvard.edu}; Elizabeth Stuart\email{estuart@jhsph.edu} } \keyword{environment} MatchIt/man/match.data.Rd0000644000175100001440000000412513060361515014671 0ustar hornikusers\name{match.data} \alias{match.data} \title{Output Matched Data Sets} \description{\code{match.data} outputs matched data sets from \code{matchit()}. } \usage{ match.data(object, group="all", distance = "distance", weights = "weights", subclass = "subclass") } \arguments{ \item{object}{The output object from \code{matchit}. This is a required input.} \item{group}{This argument specifies for which matched group the user wants to extract the data. Available options are \code{"all"} (all matched units), \code{"treat"} (matched units in the treatment group), and \code{"control"} (matched units in the control group). The default is \code{"all"}.} \item{distance}{This argument specifies the variable name used to store the distance measure. The default is \code{"distance"}.} \item{weights}{This argument specifies the variable name used to store the resulting weights from matching. The default is \code{"weights"}.} \item{subclass}{This argument specifies the variable name used to store the subclass indicator. The default is \code{"subclass"}.} } \value{ Returns a subset of the original data set sent to \code{matchit()}, with just the matched units. The data set also contains the additional variables \code{distance}, \code{weights}, and \code{subclass}. The variable \code{distance} gives the estimated distance measure, and \code{weights} gives the weights for each unit, generated in the matching procedure. The variable \code{subclass} gives the subclass index for each unit (if applicable). See the \url{http://gking.harvard.edu/matchit/} for the complete documentation and type \code{demo(match.data)} at the R prompt to see a demonstration of the code. } \seealso{Please use \code{help.matchit} to access the matchit reference manual. The complete document is available online at \url{http://gking.harvard.edu/matchit}.} \author{ Daniel Ho \email{daniel.ho@yale.edu}; Kosuke Imai \email{kimai@princeton.edu}; Gary King \email{king@harvard.edu}; Elizabeth Stuart \email{estuart@jhsph.edu} } \keyword{methods} MatchIt/man/is.matchit.Rd0000644000175100001440000000066013075246077014743 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/class_functions.R \name{is.matchit} \alias{is.matchit} \title{Checks matchit Class} \usage{ is.matchit(object) } \arguments{ \item{object}{any R object} } \value{ Returns \code{TRUE} if its argument has class "matchit" among its classes and \code{FALSE} otherwise. } \description{ Function that checks if the target object is a \code{matchit} object. } MatchIt/man/user.prompt.Rd0000644000175100001440000000053313060361515015162 0ustar hornikusers\name{user.prompt} \alias{user.prompt} \title{Pause in demo files} \description{ Use \code{user.prompt} while writing demo files to force users to hit return before continuing. } \usage{ user.prompt() } \seealso{\code{readline}} \author{Olivia Lau \email{olau@fas.harvard.edu} } \examples{ \dontrun{ user.prompt() } } \keyword{file}