diff --git a/matlab/figs/htwo_hinf_comp_filters.pdf b/matlab/figs/htwo_hinf_comp_filters.pdf new file mode 100644 index 0000000..5405d5a Binary files /dev/null and b/matlab/figs/htwo_hinf_comp_filters.pdf differ diff --git a/matlab/figs/htwo_hinf_comp_filters.png b/matlab/figs/htwo_hinf_comp_filters.png new file mode 100644 index 0000000..ac38b4c Binary files /dev/null and b/matlab/figs/htwo_hinf_comp_filters.png differ diff --git a/matlab/figs/psd_sensors_htwo_hinf_synthesis.pdf b/matlab/figs/psd_sensors_htwo_hinf_synthesis.pdf new file mode 100644 index 0000000..8d3a897 Binary files /dev/null and b/matlab/figs/psd_sensors_htwo_hinf_synthesis.pdf differ diff --git a/matlab/figs/psd_sensors_htwo_hinf_synthesis.png b/matlab/figs/psd_sensors_htwo_hinf_synthesis.png new file mode 100644 index 0000000..bc7507e Binary files /dev/null and b/matlab/figs/psd_sensors_htwo_hinf_synthesis.png differ diff --git a/matlab/figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.pdf b/matlab/figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.pdf new file mode 100644 index 0000000..272be98 --- /dev/null +++ b/matlab/figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.pdf @@ -0,0 +1,1874 @@ +%PDF-1.4 +% +1 0 obj +<< +/Producer (Apache FOP Version 2.4.0-SNAPSHOT: PDFDocumentGraphics2D) +/CreationDate (D:20201002181819+02'00') +>> +endobj +2 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +3 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +4 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +5 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +6 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +7 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +8 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +9 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +10 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +11 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +12 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +13 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +14 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +15 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +16 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +17 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +18 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +19 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +20 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +21 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +22 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +23 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +24 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +25 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +26 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +27 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +28 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +29 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +30 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +31 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +32 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +33 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +34 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +35 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +36 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +37 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +38 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +39 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +40 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +41 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +42 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +43 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +44 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +45 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +46 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +47 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +48 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +49 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +50 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +51 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +52 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +53 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +54 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +55 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +56 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +57 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +58 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +59 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +60 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +61 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +62 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +63 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +64 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +65 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +66 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +67 0 obj +<< +/Type /ExtGState +/ca 0.3019608 +>> +endobj +68 0 obj +<< +/Type /ExtGState +/ca 0.3019608 +>> +endobj +69 0 obj +<< +/Type /ExtGState +/ca 0.3019608 +>> +endobj +70 0 obj +<< +/Type /ExtGState +/ca 0.3019608 +>> +endobj +71 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +72 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +73 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +74 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +75 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +76 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +77 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +78 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +79 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +80 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +81 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +82 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +83 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +84 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +85 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +86 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +87 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +88 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +89 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +90 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +91 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +92 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +93 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +94 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +95 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +96 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +97 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +98 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +99 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +100 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +101 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +102 0 obj +<< +/Type /ExtGState +/CA 0.2509804 +>> +endobj +103 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +104 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +105 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +106 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +107 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +108 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +109 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +110 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +111 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +112 0 obj +<< +/Type /ExtGState +/CA 0.14901961 +>> +endobj +113 0 obj +<< +/Type /ExtGState +/ca 0.3019608 +>> +endobj +114 0 obj +<< +/Type /ExtGState +/ca 0.3019608 +>> +endobj +115 0 obj +<< /Length 116 0 R /Filter /FlateDecode >> +stream +xĽͮ$I笠/0 @$8;B+ $!,H-:?yK_\uT婌p777;v>.Jǿq}O?׬5kg]}Α6#^;>ǿ#QS'G?k~y+W_HUO#_R<TX\}6ŏ~h`[x<'q,~CXI󳥫qG?4|= ` -{`:&T5Ւŏ~h`ER+=X=0ÎYOCv|S#Y%;>}>t5 {dxu-;>}Y 1;>}IU|}'zbќؾW˫g?5Xe<?}'HhL1O *؞K/8gd+~se?H7GmCE(f+?Hwq/3}Wu9{|#c+6cHUJG?Q+6c6q/G?2b9?[jc@R0cG?2[¾[S~<я[s:-~#c]x [G}/^c}~&\}u۷=yb ~dlq_ȥ|εloG?2/+ZpcHB/ p|#cBge +c-~#cBZ|Ywz|#cBQcl_R9Wŏ~dlq_H}?[h#7J9o([q2ŷ 5A`fk9ؤoMK | vsxAA;paIoAN1I1D1?1:15101+1}u0ߑ2д12P2ߐ2б21Q21c[F[;;[[j[R[5QT1C:[F";{ +{F;{F;{F;{F;{Fb~ώ _j 'oыīF"+U>UP #zэxUxÈ^#^%$0W7E"U4 #za oы.ūR?W=W7EU #zџxUxÈ^t'^(0WD:oQ1_-^/[(]axk{BR=(Dqa%P+=sXoJ +[R=pa'h+ۗa#n<1^c=9~{-1_zKʻ/zC$ǠL1~!{!H +cy{NsbĘxqOpp?D ^~oGj3|i{ri/ΰTz ?e~1O~amYR/ |UJD>GD YJm)=W^_| 7x )у⃯g-=gyTp;aϡ0ք]ӟXqΆNih=5쿏կ/qTaijG yo j5_cm=ۼ֯F1Q9r06(rsɂ) /oaj9||`>kQ9E3F,_J0]f2ʦ1Y0fS#) z,c% EF +GQlgoX_;>|Zqalޚ2ZϭkWkuBSPjr}>vb!MDjҮ.HJa& Ӆ] W$?k=Z?/\g ^7W [e&/0<csXPfK)T+K`ލgaκD_Vsŷ& <*(\4<9nTQG2d*,/_&~TR]! 7`d gZnӿ7>]\ d*uK؎+79gdk̘^}[Xx9w`0i/*]CWmݏ ه61 ]$D`X3YG? ۏ :@1V pE S3ʵk=?Kx|'x? SZofZKNVrɣ|i-MrJ(8j<lqh.]yL-bx |MZV>qE\xfgvxԺ=LɴA#{N! eH́);o`O, a61 Wc+X0c7wqZ}FDc^pŁ[X'cT1fjy8Tf\Du U26>ᴦ9L [}a~m|Ʊ`tSX`.3` e簼Y<.9 +8ui (^ ,- %_x0V W\` 62XO1kp\±:…UЪRppWW 6ӆ0+?cWXLX7x" /+;Xrcվn)MX*Ocs»~,̴gb<w|M#,`e0 q|͉eSy~ML gapaj~j`7hha|ǃȜeb2cEs5CjL░31o +f*%Mj'3i\4pżZ{oLr-p%:6ml/sA:f&ߊ/=B1ބa{ Q!>YK^z{ـmWb1랹PMM}bx [Тgq4<5Y =9bXLQ7҉aa{.1!?g,RL6PXm1cm¥7k0 m & Nz[Xژ0q5aUi$0A\!wՄ?VU0<"l0(x%S#rJ:lhµ/LM. `0]`3ۺ$JOÃX0jR1(ׄ«(|%Cb) ^#F47I`U/\SL@8{Y} :.cXzusܤb<4^߫{pgT$}SS֩R)A# '#bt?Al1N[YhJU1mGSnϯoa D(q +_Ŷ6.v;,9Y`0X"1#cᇙ!r&6 TX. , ~ "M[S7`̆:H?ݿS7~$x'3?LXFra^!'0 +~OF!/<8Ż)jn +~xۆՐ~z/Lo~|llMC2=/T`$ {P1m6ԖfWcL㠼` +?$ +]yatʾI" t{Iwul .7)`nveP.c1;+y,/s[/11o#ARO,,RKӏa2j<+ +uy,8OcˋWƭܗ,C&@jyqbX-<9UCm bt`[#3p\n &n+c iq^@X1t4\x}M/XaTT76Nav7p'6 +rLOXeMG\Hl龅`=}1kxs.c;`c^jkc; ,a&sH&*؉畹`.aisk ãcT В0D0@ؕVV 裏#ʵh)\=a/f9#瞆`88.cLTM@}¢]]ڞK?E`\Jx ߜۼtM/7'fe0bRu-|7o8w[1P&|t'k&pU^ci>Ib{kfSc ?#P׍uM8v`p-~rq>&&K왉kΜc6cwNI)Z7˷kvОQ:afXK7=D C N Ld; ^wtArA0^d;*;PH gm~ظOz+ ms{xמb Em25A$6 2〹m#e CáFbd[^`Gg?tv03XC1l?zޠmD>ȆPH_fٛY;Y MA +{q5-:A^Oƃl-v%x>ڰOr1R[o [7&rhe`Χ" + cs{&ռ1;l &cr,}{f¡yҌ 6-{^d`5z)Av);;툶'}>bM=v^k;2i ғA;g`٫UUV~hLφCe >p՗49kqZ<=$>tFnHIܠBfecn03A>' Ҳ7`b%p8jE ۼ׽`A^_$nГ$l0(&U39gX:l@L bY^ !&}['9HX'?B[A2y(5-#9ˎj`mj` c5Ѓ'Y5=/ nOv^-D}p|I%"kxc^pj$ fr9ݫAưNi,M,~08,;[):v#1w0vmz V1'?HC;Ey,bH=R`/D|2~N"uyFE ~Ֆ)Oܣj C5ά~n8 A&~*OW6&zP#2Nk$Ѓ7'u7=!}{ aMFAp }<E"i֓̌2=H3AF"n态Aa` w B+i%X'5H R/yxp?H bdbOkAmWƓ +}/0EDH&erz@RX³;hq= KuB$ljNH10[$Rs%}1T&izM𾌕2Cz  #;TMxVI]:*܃$S[DcZ +3;tA0t9L *1j!;AK}du M (ťJ2p#7h0cܠktӬX-F3*Ԧ1*y4̓$@"rff7frְ7!DBİ mQ 2R:zWv8y𪗟e19sXnL7XYܠ1}A4 KZ{RSoYʫAkE+a=AY8SL;THAX"jOһI2Are`YHGFf{b,fc%LxDXT`==2KC B/ˤ=A"'fhteOUR6_'CSq}s\\)%ST#;HsRA̢fXvF5%MItaM*x0Ahyg6~AN@Qat~* #r&c)2,T!9ob $v0Kb DZ?+O! ǔX I"cJLa XCHEJ<<rrvN::]T e&6CHm%t!Hآך-*xdTC $[Qa#3蘁!D>QSOI"w ;Eʪd Sy1GLAa`xrTCK>nh{͇\l1 e\RWޘ5)B1qr]!Ģ%*UF!' +a + !OױKcʮ{akZ.jN +!yM!lP%P؊0sw`uޚ)BEٞWNG>~-a !ml ![UxGH(B< !a*-"g:Blɜ+CmBL%yAK*v$ !Ik&Xd ZjfP-\ώmAŜb Q='Auyh$4jTZdCAe,9(MXVצdPV!Mщ.9XSY B]8"o 94s"]:5s +< !V/ˣ ! |5(B$?U>)B,r^Cp1R*]}B,g9daMӃcf`B%pdYE[!VL4(B'LHBYOfGEiNm3#THG8Bҍb +0^LxKi7 ӓ#dՅZwm";?8BHy1^RԵJhjS Q^LCfi" ;F +oI*_^ "_fcƐ!Dm" +FĬ!i/B.pX3C(3*VJZq@bp|ޘvA|,% rMrtlb0Ųyk)bc3(G.3i5l5Z +ddҺTta9%ά@}3cMVڠs0/U2 ] fp“¥7 Id{kƘ)%``'*=׈[ng 7N<ln%p78'/i-"m"x:]=R( "We0_)[̋h{8 +`8')8{,!ؙykrZdt~jL? IZ:Wl¬먞-|ˎ2u6G$ƬH8a  iIJ[ȉNgEL0q1",&d{'P"o7‘VUTMPbjF . y6H_}O{]Qyx۶lU#65F`p,?{I}s 0‚ݖ((L\{EH 'Eld:[b31iB1Sù ʙV5 ~g,g]@NPb\S'x2^_th4rpܩS8{e?\4~{W \XT +v~'=͎݃bl ``]f)k=ؘ e6.xgե^3aIGv܆bA ÉdFDy\W_I-dX\xP~u*3r"I\|nAixM +ju]WLZҥUc#@eI=c[ӫLLa\SiY*/t*u̓6q^avJX\.v+\۲%gVaS +bkc&' W, dXRDD~H`D2p_%lH +Z YStMGIGx٭*;nU)wB8E}*XƜ*A_2VXM['tMj+鉯lYWNouFƞeBi% 0mnXbC@ÕcFMG*wQ0']µ LM-V#2/grlbnLP(fZs1kx0س䗡PX gW/,O\t,¾8cA39E\M6{,fȓNJafM8^5b60N4˼Dafcy8TN)bpW{$ץ SQYiC/kB4Ϯg;rI[jv?idIcX'$#7OՔ^Slljjs0ͷXs;H6XT4v_fD%.M%LEbWI쩼Bq]51ܷ,AqԃMՈ +1.ټ6M%*tmت/tbThVм s[ eYpŇCֺ%"0]z~*Pf~z>P:-x9y( +4EHJHAX%IѭT:w%>^+"x7 D.ĘbFsrɬI7:2ʡB bC?|i_^dGYQԊ$ $9E:uLT>wvW(*ĨbSP ! ;d_e6ʱ"!C1fyCfjɄS{{HR-qԲ%o"H& +>}U!47Ty➴"XүE{Ftw"䏏W9"b0}Ch2QxQ1o(D.nrKuJ!6i+#N^J+|B˻ëh~tPkSaW*b̶N?CUb,&hBW"x}"|e_1jz)9jC l%˂!r'\v*cX_G2tFlW{ +MSIOՈ+A6bG(FdY-Spa E.E+F9V1e-SJzM tl!G.;FIm|#FPvcTd [Ħb\47$cf=]E21ڶ`4j逧"P zK;ӰYTl$Ր_ d AlbCS* d b,%Ů;d,_2cws&$Ʀ?rlL|^$ {QޓP*zbյؓ5V#JEAVX$|GEi aVקЭ0pK 6M +^uu IJ4p$Ͼǫp8 ܰ0WbA>tucbԻߺՇ*GTS6tdk , r#%HPUeZQ+`:eEj-b؂ mA- b D32IA.2 A!d.LU]e'b c$( c*xw"+h_sY7ԓcفS~ܭ(z:| ca"慄^s5ǫ6+C-폴 χ\"yt1 <@[C9k0A6GvhtUaAyuw*9*xUn=#~ ^źgA l<%Ϯ9qwۄ0ѥBIbD^l7)θ^ĘD_=8lۖ>{w/w;;~z)D yF$ Sg<:AInArqݎ0R-鑓yh#pHF>$g|ة#(t.Vr9-z(I6G.7?,Em]w~LMMFP:H|i H Ug)\p~sa;wscT^X쏥\GZr4(8s0wǰËxڇ1n +;{Tg)>8)Zɂ";.gC4bV'>j(͸Q&ح,wm#6XEr{#Sx#MvWݣ`Ÿ}eқgG 3}F.xD.ʦzy乮AoV}SVM :;NYOdgCAb 5u<*Eh`HKpJbHL>^%*6(z}7k=賯# ^Zx~8H* ɖn{$VuѶX&vĨj&4NKwMB]9[rSʓXƋ;-@@^;7n>ZcuΖĘmw٪MڭC#5`l9EvgKUb'V +EcsGWљd)9ry7MeAΎfX:m&<Nҧh~K L<(=6v9z3=co_bս?^{c\6y E q;޽cbBiɨ )}5ʄ̻g[f¸Rݜ уvM,KhM;@gib7٪cIlq|05 +7u6S8Q=715p{ʅXӎiy 'VbqubrB0-(x:֞ ѕ:W1H])FkuYb}mWl.jG)^TXhf/6 P2FMd? BbZ`Y B,69uP.nY9 DLqL{Eu6AHE(:7B YUfD !aŽ,k !b d%E5̬;MA9RW8PX^͆!m˷yM/mDq,2ߊ\jGM"D,E'S$)Th}9Uc +x)M ƾ7\)qG<-J;/]o\됛 #\&bf[/!H=U Ffu.aFhrE1Ji4+.Q/d=eE8,fr=D2ֈ&^ Bbw 8jARqTv{.K KXAHŏ$wZ e9X@ݱ"A#LZe Ĝip*(o -,LAQF"7Y)=ئqrb|;HR1ZK^ɭ8af5/R, B;65L34 ׮6eFy*?a*iD*YF$EOk&i|HUF +_nX$Iڔi+H&kB$-2jvلb&b "?Dnf'ܙؓ P?3*͂YA,Sg=h#hm},=jn@wꘒ+=rBKܠmz5۟q^Tg6b/HW{āMJ JA,5ƞ 7j&M%Z5 G@b=EE ϊCJ !$t-l0nzl[nĞ !FϿ ^" ! $U0BLk ZP]b+y^UEUL@iKf˃b/kO`}f(V JK*95 ]j)fq[S]dBOoX"C/Of_ъ!#0WJz=)B2>l{WLRUJY@b)(.,IRc3b)ly2.c͑%G^rdSX$nn@ɢ2al!ۏJ6E(CbERRSYZ:XKY#CH5vCH|dLԊt%E+*۞*WRdQwdfdKkd͒ a Pvm-łR: fwd.F]p"A[nV)bAv++aZLI{QBTW~ ĺ%WR\i)$z -!(1dm"AzX`E̅ ֞3'$18rEPW8D!\PzqO7N:>KLM,aN]{ۇVW/ܼ,Hb~^Ѓ51 * WAvdkz҃ Z !ԩ>{ك4=H}:1zHbݚ[䍑0+[yMӃx^ތ -3=ÒdaĔ>4W JxL zD +0s"=%v=ӃDm%K% ].PDDrɿ~*voix݉U!i#;ry5arI$ncnKM)AZi 392( +*{XL2c>MAd)DZ7̷VI=@wuQAnåDr0%|s o+]16m`AawbULM=$JťSUf%Qk@X&-A±zؓD O[2( +m/҃ݦԀ+5M,^Sf3=DaL7f'=F[&7Ӄ*1bAp][ZX5Ɨq0O<'Me>z}nS< Hf~a0?ĚR|H QCt۰ɵ,¸n0&A#yWa;Kz*=TgHSѹt5?Hc Q@ǏTŮ l^43Aer<=fH1 /j$,O B +Μ-M~7$ %! ٳRAvCVX^Ktk{{(cߩP,NodX%%{!L0!: k0#+!$RS^Bl?!lRS{eShمT^#E͘ܠ4!l4ɲ)B"L[,ӓ!Gb(&T*ar؃!0 57J"FPVS@$8&;V$%}[U֓ :i7=ǟ!3zm]!x;ɽ3k_Q>;t Īu Nbz:A0Y-.C<އB]d!7-3.a&Һ] !-fBƾJ4ju㴒1Y$-vQnAYZJBz(3vXjI~{ %  D{+W6I:{qQ7d~W0jxF+XɻɱҍpsBg#wXcZbvZ2cp4ƀWi[Wibl=Yy7F;Ǯ` [1dMN%Ln˞gv( `ͱC~mSOlFWZЭ?~z>_=wc}N_;sI<)cWa \"Zr㌱fd5;iYl.c&ք[<<YǙR[y~E1Vg< +_ӧm8\X^8r#h0,(1~F`ZEgC؎FI;|DWm@O Zg0=A a,_G09 7 U[93% +~Ƅ=ȪGDܒg NXkłgO5tCa[o@YVgR b1}g@XH5+,o3nk.CDZJGX\=0ּy1Qiar_3 +.v L%vD݉50u Fa=°t#c9 + +<V8ِY a0~tGDؔm.{gX'S"&walX !ilC1$͑sꙸp6n3Q&̔?_k(9n虖D-;#',TbPCbGPcc^GQC U +Fm$)GjT98SX +=T0\kg +WXҭgWи ΌZ~& -V]wpH NG]w g^捻~a9ښIAcY $cEvx?c=ʛP9¦+O7oWϜa}" l^Hdxذ[sa'EX[f>$b3|쓛#E~bGX $y5s1 +MꑰB 쯔%aL{tɐ"%qdV #h}ed WpmXdr-ᄌq5-ƄYz7#F 0m.Z l-hY/#WtBں4OAu^PAT(K*0L?<)8F꫰ɍ+eMoT[aE~Wb)(my0al~MN daL_K]K/,. 8hK¹JbS#-;*f^Gi'{XQ׾:'&[],@,:/0 U/lN6>1n,~`l:|OlR1 sҀX&W KyHX}NAKnvPٵYz;XAl s܏Jbxqu3N +[,YR)Ğ˳&ԣ; +u3K~|D"",!ƤQDhr_k-ܺ) -VRS`\]"+ɔXD NS{Q+E2cQcE ulQE*׮<5]ĸpZð+__g>QFNRԌ]G#xK5ڷ0YGb,#  .3YjHAŠ^LZHl02ѣ r)*BŊwsLb85lIpa̯]D ͢8ku)0Y=ZJ>Yd9`ᶗKc,!D=v)Bk.SB']WK|Uuc`TwK艺\0|fbBt,}B<:JFg5!\q +Ei}XM('Dn.ЎuKÑճ⍮c:1lV9݉MVX(gk%]ҏ}GY>(4;Y  v DB=U~ba S^vj##SRaQ(@QX{vfSǵWj3m)Ab}! +ʷ.*[,BߋUW6 FڵQ~C{dWю*;>azj,1 tT/Ĩ9u2}x^䜉x;dc*U=1L:DݩC̽B뽘51!JjVfKRH'[?9K4|Q&FSTo,()#rP mr+CAٜ,Blxn00so{u,N!L[<(ybK?Ad&ޖ<1D"˵ =1x|2I.nq{4)T'ۑnO#]vs@ "F1;@Vf`v ]v" 6ټ- ȑTrTh}@" {4LGC?-#هb`G$+HUc?r$\z&Y-|['HسIrjI:FәģEٓ Wk@ +"{rVV[r=' 0 {Akz HG?!AYri=- + qj`,JXpBE"ӹGgr)d݊B#;8N,"4/6xA$4N: _HZT5؎1$u|+N3d> jH0dm"?;!SMF:dߕnU~'H3<дG]5\P,PscbcL?@@ɿ8b 3~#tĒAjo:T Pqw5bD > + bOWe^ȓ.|nmAGv  򐸿C+u<tD7Ȏ3~@]uk7萌@屛Nͻ1Ӵo3y7(M1} e]y3[q wҔ;6۽kO+is)e5J=AAP ~)6gYj廱[̚*|{)2=rps + x/){dJUW r-} 'm yMvw<ocGxv݀[ށsdE[Ԏ3f6°A, ^@0Ŷ|$O2evk5Eˆ.> t#$" X{vdSdľ<4#F:ɬF/ׯ:E{&{v=@e WT!iev& Fn@nh?l(6 OfQ 3xYJM}'}&^in{xEA&#b/37wEf@lW1W4|r3FXd XY)AA1pg>SD/l툰<Ükߋ}bVn?jlHupan jB2 +#WA+wO\ȠjkcdVcB Q=ޢrcͅb0sH;G{K{Vk.XZM$<.afתB1qg銀GXoU:t0ߪN^MXU}Ũ0+V˜ +j繴a WsPa^o 'V]j:پw; o%V9sLW\U _J!O hX%~U\u݇2۵[ ÁX5&uA\mg^,.J/h2;m7cgWMZ h";eu^)& {ˎKz?Av9-٘X_H,8bc]0u+0wD˅BfF.bKׇ7bxau$FJp+Ƴ߱R@J6TԹCX)%F [I!>bl6Y*d21Xzή\w ncR,=goj)'ƺQCBxbd47Wg+?+ƥb2ji)#^ +XX!M s)UbA6Ȉ& a^U ++F>] /es(0Wl2(ƞMYby;1xŲvs&Cg1WlO1vkI/Blvd +E`g.f +ǦRUmyعK@:bK}8Ą9lCf\_im$ ԭ}mr7+!9Nzl>[vxM9cr3M] zi1쮑<[63?X0tv>k6o9ɓ^k6̣= O}V~J'٠Ϛ}G))NZ:>[s_Zvh~ϊ.'z%FW6ul:­{œjZAQX!io>*;~ G{ G؃!O&wj=dKمm-6o S6jVW?w6I=?q*׈̉[|V#±z7-Vr1ߑkf$Uqwl_ψM ԏcm`$n1qmWjS { hTڎ?WQQ Ertp8P Fgo^) q{h1C=WD_wf{nvew ^v"jc~;BSWB!qvB;6_zIc۽ڎnOQ4{퐝E& ݣvd7;[sv$31K\D28CoqϹi_6̚Զ/._O)|ײhg wgF"f>h#}Pڷ&3̅6\•=(?ڞI e[!ڙ2E߳H =+eJ@75#,}L~l|] 3{;H=Mcj v۳yH3#A?I6;YӉmov;?-ۆv>&-s>xo6 ~5m4NLC5;gm˞!NK̖!`1VbMzK5h?.КBϸ5xAOUmf!PMimBwnlFx^S;CBl%S޶&xO#fhzư!XbgOSggӞ}2 u_Y۰sډT: +8.Wqt!F L|1ۃvq캻9R +` nBAM>^ihYNh&~coЭرjf/CZn) bM7H>!ǢeoС Q={J10jH71yCOAJ8d4bZ5V9f}Al~,L>M֠C(|:&kP,=/kc4zҽ :al: 0]>x9HLw +Ժ_w LSd[v/=?l-NkDc+u(_yI ˏPB=,v0hk k!./}x1ڴ?OÄt:bq0SB# &˧-FѲ? S4iyGdFd4A89*2[42֫[c9ᾲCH\i"w_v+kcv}!$بR>S( 4c/e͉A23!ba;]/e|&P̌#F)P,WFpߎ-Bhw}" },oܧ,Bl6#Mȸ3tQG}{!ćWbWfPhlǴ[Ah'J2u} BxN(ȸY>8V#cj=}>!B 2qchNf)9;L=>JlGvѤvd! +-^h; +dcP!uElH!0=l!nEZs+{voT=qsXCH;0{!tq<4vSJ[|e#{-NAw/4>C`]{?Q1ѽUXU.ѕ~H}TGsiɾ{fC}x1{*An<!%eXG蒛ss[*r+/Sߵx(-ݥu. V$t@/_4P#;tsG?`R&{s'2M䗷oK3yΝDQ0S:Ѯ3hsK5T8uhm;rG87ȶ4#4#K oν7AɓS_Ԗvu{jGcq3( +ƱȓMx +qLas^!Q]:YñLdM='{&d1Iv#h1lB1'|'%FAr":wX0h ˢO4I*X i`]&Z|źX0u1'0G7`7!c;Hh\Md+4\ +A IlMSM˄$Ac݃B2!Y1' +1e"O=7 +qE1$cBLBR\Bn`N! +{ Yx\:C9 C[iP c&.f]&2mj _S]BQh7N}К2 +ҿoE)͐B#Rv`>*OmwڅHZ~}}`LQI[dh*[fZeإCC%9P!]x՜kH17tB!TZr !چ!ƫ±C#q)x2-ؼ6a: nI&&+nm۩t?g\R>@yi-]wI,Ǯ{VtI +  OE%2 iƱ_")^Ȍ{?8 +t/%@لa̘27Y,$e$+JO}. Q.JDŽ269'6 OTj[ٟ +<~[KPZ/>& (CS@&R^S"}J,ʿXp5[no,31]GWP#TS &,Ziߙ=B2pQJxHxvpZMcWB>{W鏁Huc +c8K#F3ZҏLԖE[aZzꠂh~F2ne;uIeB۟7’F#֛yAM06O^+Z]ĻZ87uSxڏ1 uS5[qo{{kNJظY3v0Tj);kN +Yq\xhִuMw\_G:GLmG÷Ja |}.PPZxURPHM?*HХ^dGysXhq.!',3[l5xNd%cb@g3bJP hnA=@cjCK@5%f̝_zs)SC/hU,5 "eΐ@j/p͞@=nYh3$b䬋GY3[NhniM@!xK"ǣ}&fȑ<iDԈ0 hq])q\6"Z ޝ)%hH| 7e|*G )5-f0lHv8.zը4vd3hzRi5J R.'͖ jWs\=4UIAU̒)AHѾ>%Ra`("(rG0B}vY"LBc+sфh7ى܊է$Bm_$)W4;ܡ,sp' + }ChQ)dFȻbCr\J {AJ?Ahocnl>oqj,`eSfhz⿴՛r߆ў0"rmԸ80k,suk:ݣ;L;4n-QxHmա=ix=8Ck57b-h{y_Xlsөg#TW۫5-~}wA&%,%6k%8OF#R,Ǻ&;5"c,AD,qcDctc >t`(_ .em$Eܿh;ɑ-9-gfדAҞA.GHhI{sCj)ƣJ~XU4@a#1J:c%g"5*ÿh& KԬ4X,isOvCEjGDҕ H;st/np2GJ#Wl|g + +Fgta)7!t%1f,|-5Y/~dx?9sY\#9[1܍ߒAh1H>O5Q-Oؤ$ji18|ђ`-MW{ M+9-[qY$)8#sK#n s|,pI7,EKz Zrigl(I *)a$.m)]Z>1 _=ݛ=AJ̱6 2:Bߎ CK#_V͟J ),/6)Yinw6II%) +xvvf$@!Ŵ$>(PZ {$dh_Cb :w!KBbmS,eC愡q_hޯlaUq &vY A +vˆ kOUW/Ǝ}| A: A^"wcv^=+[uW}}Į+3rNXSZ\qVN;gs&GdG.WR'#蔝FڧEd-Ǝ?Ŗ>51 őӎ Av#h8FE8{R + ALzFOaCPq>%H1OZ K@CP@QMd-S~=A +#< ''=voEz^vBw5I% 9I1 QBuv{4χkz5B*\TҖ{1a ڏ3+'ҨT8h#ݩoNXd7Mmޟj-[A!lQhK,A&*@-A\ ڞdp{>q]-y,Qӵ vZkOMA^yidWs@ԺMRU!?D݇j$"j?y{RpaG^3fmHɔe8;'HZn!5M{hXjSv=sWg: +Bc)X kr(I+[C#fzqIAޏ+)~) 9|jG[ݦ )f=ZqLqG+H!CQn[|CsO5ZW4:_]A;_i[|.U7'3<$-FZIҤŮ GpcS,y9 +e Uv_~3(FZqI㽬lt+^vx[  12R~>'.f+ I9BvZ1I{@)k;m +]b +{*/tۦJ?vv g߼+ )Hҳ愯)HsD26`htz$SC\Wb +f0A`/n|S[hW1I{K+ iJpUkSMA܁s/oݖ5gWæ$ +y?=h0K1@#OuAsiB[1 w +N? ݈ix -@M2ȋ>&6 +MT4Җ}x#MMopڦ:75u5V x <M1æY ft_: ڳ΢pv{)5MȷpPcѝ1OS=xCNi:>iSKI| PhtTv&=LxݳSgXlc_ű~ozsi)4XL{.)6[RDBm]l5VyZ i*{./߅P] w]i9]wQq5_Y~.~%lEc+ l294mP~ ]Vhv\Xh3xaKYIISve)ڽQáŋ;Mw))hs+,?5lVYK{egגfh5UW_zOl8Uׯ5x`mQbG@;^~Bc`ov w&wm"I+$BXi{|lӶ%s 7[w@%S5VЈ NWx|UFL\hlfy,oщ/CYvԐn?F*RMvwԺ/nPج]FG˴5gޔiK-VfO[gwAEj8+[v^;utigUF2_Au;;ocZ]i}]s+svڥGv)49G7P<VF\Fx/Y suJH+TҴ5+83tVeө6]jѵ׉yu,ŭ{guA#w\F%xã'D*;g&R=eR\ٞJhqM&4p(i86'Z6L-Od`K4DǴf -FmKC#EgӫLM|pz]c[szsiuqݭwLf=)S&_~N@AfWK1h޵Wd}C!LGE{Em[gK2W -e1LL4zB}*sU ֘;fǏtī3V?'pb-dK]UlǐɐF;ٗu.?ac8Fi˷C5*4jc58{ ;p1FkAK1TkkW,u5ؾYXo[Ydӑԛg|+Z&Ӌ CZװKp쫧+΃-Ϛ9z8؀Z{ DGO6Cz^Mê8NN) Xdwjl2b$[<%$G2TIQP6u=}Eu[׶@絍o,2H]cCAAs߹Dž,J+!R?Z(P( +_X\s&qGQKX +QFZǢH ݆6v7O}c_j#W~3D_ԧ46$Oj[ٸ\hvIm۴ԹgtuuK+<u^i0DY;%Rf^-nFgh -^f͓8ӟ4]ԬF-&7C܌ZJѮ7ajFEӾ?Xpv焂i^[o 4ԤnڝKk/[&PvZNu..s24+}h1d;ym(EmfGZګ tS۲%jhw- *}\ڣO9Z$ڭ.MڠjMx2G'R;u/wㅯT΀.a +@vP%K[;w(|_6],Y*mg܃(7.vZBoD`)]R048e1i[*s[>:\~h|? 7R"į13P$<SLxTV Kǚp)zy].OpE8&Grļʂ|deMg6ya1~ a r69`B0wjS<ʒԽ!|%*9HI_4+jŒ_[PZ i2A5 B W]B[;4Xl/mN 1V+8:'pvԞN&Pj5`4<mxQlڐ2 tuú2V( Gb*͉WZn|bV) oTOy'oC=qC[} orӛ \3jV"HJ++aTf&Wah4VmZy$o4'"* s9X+2=SS79%ň6-ىf2eufRݾf,KaW00x1Yə$T7O_~0OTNgh'HU'q6U.(o";DQvF  2=^JY@~L=EkJKU9aЊinBgEy~>t_?(X$ +'UD Ec +E[2}݆F`:v35uo͐E1/Fzb.b w/aݮeiU^y"w2 N챛=a1sٲa(L}LC 2uo&65Fhv?MLgiBawʬ'6̖_v{7@Z^wRau]r|S?W֨\ჳcGehC#5ir;fw0ɠ! X+->煶BoNа'֬lJĄs=;ەt+kew8YxbW7+լr򻖰}וOz\۪}`IZ~%:1a9r'KMShנvH Rj=ʨ9;w9vG\4 +{;95bJwW8NsjQπu:d$jJZ]H&$W#&($#$GVk8wԤ*u+Bngd,8onMre  ^ӈ- ^M[oQMjJ$'dÚ挡ŪR2œΊ% %V-svsKnujM'O ZkDuSq:hkwF*(;4luK"<4X}u_Nk&5^ƗM`@|~nX+MP779 'R pq'A(kq[xP uif,6Wf3j/Ĉ 4jFnYŭ:NDH"m(ucv)vJ*oeD=M`\\Dve{7 bo9WCۢJm  1E΍軬zri9 aɄY5D?  8Zz7befS Ig YpuR:,%wo;Liϥ&+\̋{H_wPSy$7u;)+Im$p6]n#DdK=TZ5ۃm@K lJN "H8FHX +J[{!V᎓\|5xj@O 6ܙ{U\Mސ?Hv4OxReY#?(ہMٶq>׾.Ӊb<V5ʮ~}AlNct:q"bݒc ː}I[fSlj 㻮>ۃh\*e%wЭFV4XyEU艷wѾ 'Ļ]QRicAw[ͷAd1O[0pZ<M9A:R>de{ "}!{z7?A +`:Ĝ"m0=&Ʊك(nΧe .%{%(x!{ySecn${PhgG};mu<(A"h;;v?N-;hҌֈnkAJE;mivuprA=h' xx"G XOm[{}Hkqif H%).كbf~8!xi/=ڮl F[A(웓1{A.(Y EZv):+İ/Qp{1NBA"$c4~u"էrf?t` x#MG(jsOhUb B۱!m?6S!ɻIt-{:#fwi&<fI&!I-7fPuv޺'z%k8:#ބm.M%umq͛]BI\lOv g^x}#ԶݚjOo]BJc9ܞbŅ%tb6 z>۱FIm/1nҨ4ړ]B,](CcAhXf.%vK~ ]B+ej4׫sv ik)D$4-lĀLB!! ҲI(xgÙqe:0orLBݻJ lAh} !8x6!t8.+?gK`i иwE$tm:I6Z>lZK8$m޸7iPyIddڡ!0$AJnhMBj +] +ٲIT߹_3.ƈ7 :e-ۄ-h&DY<Կ%لGnӦ]$6"97K) bvٸzlb. g܃S $~q"0'd5vg6!ʙ-5w a?X$&Xq|Mxvػ>!Hsx&QNU/p/? ?ЎrRd'yJFShI +$tBvjt|(ϑBK09<+9Nfz%eq -Edd9lZqSl6ƿBLRϑBQ>Bm1w/:5CsfJ(Zu +ьjZc-;NP*k){&V(o5«sQHT9 b, 4>^)i8S>1:MN!ЮOse-LWv +x?Bc Otm^vz>9B7{ S + Z.h"= e࠘yW8pbXǑ)Ąv|;* +կm"0[lu Q`^sg՛w_evíϝBkll\;M]mB7؈YvѲB܇f{ւs6*-n6BB 2GH]eƸ;>h[W+籰U_O wkko0H.m2K-6͏vCy-SFsb7-Dȫ1@G6j:+j#:f4,)ՙbPFk ulDBLf(~PeІMJ6k.F1F'e╗ῗBlH 5On]A&e?'B-Ō6vl:n'ۅµsj m޶M &t O Ah"ٓB\ڿgH'ۅ fk$%zxN.2!I!z +m*Y3 i+B\O 1B=Xg3+={ZB@<'Gw{;=+I ==sܶ=BZ +PBX,n N[Vk2]WH=q/욎$BQn!mX +AᅚBmBjGspq].JZu& +i5'iY̦!@-RѮ!$F6Ԝ[Y~}ChG.P87`:CC-du!ĘˎBF^^~M!Dm|RoL@ȱCg^-O˞6>)I](!۳hS ??h"8q}v3kZZc|0{6\h76%K;3QyY[Z;PEzm<`DJg7qPlS-5&LVNfMuNDc&B+^iHLZ˭(&EsCGW}Gvmb&V̖XZy*ig\C"zNeQ"vۇx^pzf[[D}E,fc&+%I9,6C4y:}$6(ZMVl㚜ZFqZ}[!:'% a@ce.RĘ]c7sQSO4_"ċr硬W!(/Baz"eMn5,<Cl~𲿨 ݃vłiţ F+;<ٺd1"Ɨ[|ռ6ؚ07$!YSpg`q$;l3B6jc3R2D#F/Ek&c"{l5ڼ9AhDZH956b'qiob ն9nmqx+e*"AJIKs)bc]&"{Zv!4v+[jCl" \2XJIH!ݛqrlJ!b%>Msov:LӤ'䧡Q7,槡pFZ=IkӺH$ih7 M<5iH`DG[ iH6KIY>~I#i48n9/2&yQkڎI͏` PCQpX PC;cB0^%@MZ3Ƨ\qSwK|!of9_Ӥ=/(e4ZzH4zW+Kx 4IFg6= +||C4]6ǒ4s5< ,K5=MZ# 0q9z,x?=~ 441Aw{kzZrxޝUP8o[#@ihʏ>nܚv1N#K*Xdlmc9:MKihL\7: - 9: a bX9:Ms.]ihAot)Vt_4i1N.ihq>g}ktRQf{DF44ѭ;-'mϖ99 mg16޲Ip44ozv<]q뒜׬iH핾iH.Kn$dNh!i0۾ s%7 @ؑ9VrhX}445 ih'9'ԕ4iϋiBݬsаKGTsаDشCޔ&%B44 +)bˡiĸ1!m<e4ksM]o44lcȡiHy}kh4[94 khZ&Iokh\j[4xY4iT2/s9dyW2Ӥ=/|d!kL*J(,t3Ӥ̑iH1koCӤ 1+ihoLCuoTLg-53 cib\ihxO$MEdW@sd~Y'nm$L4i8B"U"ӤHD%gI\4Z%3M]&̙ih񼜞U4IX;IR?qi]ƥI&j%-MR44L֫ii.oǜ&_ҤݟgI{-5-MZW 2ݱX=4i[ҤۼYcݮ,iisRg&i}^IJӲ-^Y] JiyeNJCkPq+KR{RsRZ,qk:5)o֜M#\GYIJCcZFP2'1z%YҤm.sRZ -"5){pZ68u͜&-sV>9) _NHlB&I5iwaIJU}5*~C&~eJ6sV;r_4%+c(^*Yi*׆_ҺkWq)} 9,Sg=c$QҺjeMKCvDMK_ KCҶs9,|^J}KVM%*Mz}9* L껯DqS& KV5* mLQiغ(Qiv;Ԭ4i}< -Yih{~啬R +˜&-.%+ SQigjT4*-Qihqc~PmeQi]$m'Ԩ4i\1hJ.QiF%Vp*Qiv6FI팶>QiHZ~ҤD/(DI[QihXL(Qi}$ը4i';Xv.I7&m0ȳBJǮ&sض&mD4i1zjTXJTf)^7)mh{kRZ,X-9)G^eNJ\Wfغu?_%)g§²YWȥ9)W;bsyM7R JH'Aios4P J"b JcAiz`4iL&&k=J!6wԜ1CÏ5 &-kR^.PJ:FF鵰$f-Iai~{6˶$ImaizY~jjX޿"g%I꼸uRJXe9װ4>e*]4h;<U/P KӴ霕JYe9+MX{Z41a$4M6W),MsQiiƋzQJK49H^45-M3v\05Ҵ xkZ2W5-M#-4-IeqfNY@q>+9%- }eZ|ִΊx5-{W KCb{5, <5, L~qzL~ofum{xKVHudJQ5+ -WS jV[:8b3tkXZ/5ֵyKXZ{QJCwu?A,74$̖)HhwsTZ!zVAŐ:5*>vP>9) fX%* BufA\2gؽ]w?E ^AJc5) :rR[1WǏFК Pވ`֨4/FQrRIJJI!cZ${4St40\F GVPZЈ^ VҺ6*hw.bQ&ǧ%g!2%+  &s$4@2!O}%+X-sVZqUҴrN$D9<ՎQ+~Of5V|VJV1, BYihvܿYi 8E\& Z4 'd#jGJ +d!Wf/vbPJCtZulw%+ ͻaih peŲ,&%+ bn|,FKY+QihM$eNJ~GmwWIJC0z,4=q=Iih<,Qix*Œ/'I44|_Ҥo)*MZi +WF7DIFH~p/IRL/sXҹssҤ ĥI%̫+Y&-nՒo&Ċ7,yО xNKh?ii:Ʋ> U ϒva~IKvEqKDEֽ8%, ^X9,M`!&&rXJKC9rXW5],LaiU7LqrXuĽ%6[4x&DZ4ip9*aih11&0RZk-y6^\rZ$".iih)2IZ:-JXK om%+MWD?Unvb],YiҞ-44ooV +Yi@@Zxk#,gzw%,MZ*abٙ%,m:#)K##gAj$W%,Mks5KX9%, D4IL]4.YihY4ǻ>v9+ mAƒx/X9#'Sҙg_Remj/STڮװcƒ1ȭ WKPO)( -^*&b JC|>rNRS}lAh2夡tFvY䤡ŒFRAIs4w@:G.[B1뮜4 u%( xA怒44R:<#hb ށg)(.m9iHdK]q*.SL3~Q)$ ^=Fm%)FML6+V&c3)# Y]HCۏjHCæ'9#mPoO.u涗48 cKFzNm44*q4)ih v:-ч*TRО{uDzK)it+mrWR 6)iySJڮ>򜒦)J8 +w,h44l1tb[j6˔ $p.]g&yR9$&.9KHڱwZ2Z +IS450)t=SHx0.zIC)S<|445h'$mcxK%$m)idJH|^ +ICGSH.FpM!ih@GI ItJHڮ9M CcRHzKiKCv:%wʮFo)m.4b%$SQOdk 7uIC#}{Sľ#u~ +1 sH]lUqhY +I'LF[c9$UN0$4ZVD]4ZV핐4ZV/*sFl5Yn9#6s˔Fɿh>vH-wtiZ2hKmF[*Gw;d{5Ѫ|1F%rH3.SHK_Fik9rHM(!i46@]N(!it;7F7h筺˫b2뗌]S;˔FI}%#nK2Ο4z*-eH1ج F +9#FP#hUn_D7a#Ho?F_,_5v%:sD-k1#h!è9"ެIa=GeSMsDD KD8=^# 0G[\vh0mHNH徍?As5 q,X+W)@~QRzIR@FcIRYIRccC_R&IZ&IZvZvYӺIRIRcC]$5K%5k%5{[f-[f-[dž]kQRQRcC +L2ä&);&)džtҔYRYRC’lꡤf-f);ǤŔm%5i%5l,Yֱn,Y,F +HB1k$eԐڠTT*Kjh=8S%5Uf-{dž)geIYjm.%5k%5ʒ9%5k%54̒zh&TYRYR +ZФtO&54{6+Lj2KjH:3g*en{j+Kjh(!-VPRC[ZRQRYRX¤v NI I4&51آ{&5 +K%5 RfI e}5 +G:’3KjhYYRC\­0)k1fR`RC+_,1AI m4TAI isvcIIb|I mx+Mjh#pҤѻ [hRC&JoˌF)T'54re'5Jˌڶ݆1e5e,3Njhk"'5ȨfeI m8g+OZyRCke&KI4 WR]&R㛡?-em􊖒V򊖒ZwKEKYyRnˌRbsh)i8]-em[2ZJZLցh)i15$R/QRhB,3ZJs؊FmAKI-%- +<*Zzz~WR7+ok[EKI#zBFKIiEAKIcSVRh+|=`-%Lø̖ʖ6<3[J0+2$ )-%-&a(l)iq̖wfԳ9:2+[JF덚ZeKIMfp)iNO^f8I,p)iRv.%-2[JʺʖBa2<1ll)iqyTRԉhRKI;㛬A0_Os]K. +Fן18.%f2åYw$ +_p)4Xl)I~KIh FszK!QLкvjHTKIq?%åRh÷p)icRb}RRut)in_fZq9RwK]x.%m)t)F`XM! .%-AХmoDK 72ӥosKI3] +4t)in^&5.0}t4^1ǫЅc#=?Pbv|xQKIƱ.%-cq+\ +-zV4!.%mFŶҥn:ь7{&I^K=+eҥc;^#}]lҥraVRbhh;3^ +-W>y=[1%-T aeڇW S!B)iRΨ)(̄)4l/n5.)xcFUSD3p8v+a + B)iG?7h6eՙ Sh@^rdя ә2a + O+aJ+v.3a +gxLB眿)x=)4귮W[MF0!e_U0ĤvNF! #w&L=Ɓ{*)8-{*a +-ەԊB# 1 bMALmtMls1/^S1s#Vo!ShDЧ BE8UL]pLQfPB;^T!S0w?)Iƃ!SRW&Ȕ4JI) 2%-d 2%M!2A1y^ S!SH Sb8w`MaLIvƔ4^eƔK/@+!$4evALIa, b +ک0)ۄ-i Sb(WLI02 m2F5~3@Q 1l@5dJZyeʔ4X; +e + H)SҘi{a)SN62%i[cjdLIkWL-BNY&̔4$a-)i-m2fJJ@P%8׋J)ij13sJ#sţ;p @6̙63%-f6M݅3$vtRono+)iJ)$IDkZK)i4?)is= hJZ +&e&[WihJŶ4%ldZ{tֲO N5U 4%Be"MI;bp2H34U4t'?)I 20*ۄk{68S҈05$sf +gJuq/3%m]&|F3%mXp(錵qFMIB">n{K 5%CgHFM DR>c6%Y=æwwM)i'CB+r mJAK6i]ȴ)iT))4 !Ц L)5IűmMIZ,3m +jT l.) S#m +X mJ肘`Stu˰)iZ|hg~pSh1|_LBbb63oJΦf)BcC}ޔ۶ZxS^[ěBÛB926yn<*Ag8 )bADSh +)4*珣 +p +fp +pJ&uN.ܵWShc>P 8vSKN!m +δ/p +iIDyS4CÛBu\M%;`M-M xSh(ރySh*QMY>,g8:0U7Eh'~{w2o +WUwlBy .^MmޏBUZ˸)XߣXn< 7E,!ǶܿUpShlCUMn޵/)4LϘ d oFF%_%ۑ\hS]BBsoLB*RhSh5*m +Ze@MŔ ܁x^!,ZYhSNTM!U˴)46^bMofmiShl))cԏfR +i, 6t6;^6T{=q⏭ֲU r +l +d?ϮB2"?):{|~c6 j 3Ԩx3`Ѐ%eLU|+3 +dʱPL}<fjÅ~`Ѐ0?_&Z_렬>t3]Q=9ShˠJ)uDy-e + } TLk{3?6UI zܢ](SHb +̔xtHl:)uS%7 ejc,~=u21=ʣOoL+>Sb]Sa[h?)d뱅2/ebnPL#{(ShDpn4,B4[~?"pbnIi6 B&pC| yJn1hdGгEyɡ&.]h=[( Ŝx-e8 p$THK!U6svxS qP19|YCdyfCEx⡹:=B;Y {.AlG(4Te?֕Z<-B, ]~lbǟ9YW[;Fc3 -"ޖ-Br@g4iθβ>[7!upgZ$e8ABy{<gr9NUGgqf qbj.PMd!6n=[h ۳EH$!-[lml:aE]G wfN>/{tvAҐP`:#{p3=usd<1HTM^Ը;#y]J:d_s Z٥DGwd> fIeit iƵI&!.U&!p=Q<{W){ 8lDX3T8="ĮGXgD&R,UlMu\>IB4#J;?Bhސ +\Z 4 +IsePh+পseKَChSML2% B) OsXt$$7Z܆Yxz;Ka>cŃ@k&O=mKE+6%sGZAhgꉴlkӿ%v4mPϟ;էk~gЮ2Ìd퓆PJhy^"??no 8CZ"da\Fbm?d }WSB? +2ra;S6mMgYy K+`A05FijoRzs ?j0kmm0 +\|ЛSXڛ/2/66p=jD_ҽ-h'KBSݾ7O "-dJ ]SZDyZ1s;<=+5bY|˨FYiA<']QYAh>~d%vڳ;=-wgfiw +B u:Vnz$yb|vSKm_G2򦸢{RB=c;R1j1 +ظlafV=)hX6<)%QջHAm@z bdm6ͻvdϳUt +ڭa{XAbB6:Z?dz? ڭZ]@ "]J[,9f.;q #Qu Apu$;H )#MJv#r ,J~ϳR,~ + ABd8ADcU*)6z#*D d!MN2{! I-DlyB`Ҟ>4IXZXĂnkt!bۦ#. `"y1$L]G2|mL~䫳g1'Q6vSHCe4:f[=q ^$B9Dܭs@ҜK` "*r<@O""h@`fFd#H}|EzC!3l'af""./a7۹IIY'mtQƙXXqݺI[LD7K]ɴV&"]g{9 NDzgP'2 oH"D(:BV1̵D%:>Un=Y߯xRbHEaO5VVG*ntc4mYki:1CX/0'h|zf\@O-28ƍ=[v+ @c*P_4>޼JmPg=1O02sTTaT'UFLc12d#hed-ukV" >3ϱ~dv, ĔNc44"xJ:Y2,]o5q.@c80Ɉ l#1ONO72qxխ==߈;,Y[{k,~rzґ&;'߬#b>DcƟR"ya4!brdNs6A4tkqڄ㴁]j0N1/4c$ɶ=`6c8m`,O3Df l1F'Eءh6c8m`E i3)O¨_*36/4c8m`I.8mƼ,j]͘7NJ*rNةh6c^IXUi3FÜ,Ҁm@!W`&gc>m`E`6Cx=MPĔi>m`d}a1 i˛m`6}02A{>m`I>m@q<ڧ 6g60m@AiFOXS%%ڧ ;n>m`kOF=%{x>m@V i;WF4a; yQ%5ۧ û,G66.&'r'aת4ty0f h&GO4adkؕei4 i!S9o6S`fl_y=vӄYy0lz i;5 0&&V^{6`}l60q=M ݲ,si}{a$k6O9RetO¬ӄk6Ov h&Im2z *&꟎iBQcNӄTӄ&oNV75F4a*iZWs¡84A -w[D4Aj%ӄՠs :& vtNַaӈaM4a|i.=&e?Y9ꓠ*i,o}i]w#8P|4aiG4a9: ;F[rtN_[Iz,g4Ð {`&,fh&h& !Y KKiYJNfb:M^py4a&o Ĝo!E/o=I% l&mac'Ú_ua2yi5{o MKO4x6x kÃ!zqD2;0|J; C%9y4a~ 4u2&<0 +Χyav iNo7O#OgftOr"v)wiU;͠tE4 T;0&r? ioM>g;ͰFR #'? L?5F d 1f0Om2,KZmN35[{N3N{i #`{ZKua;[D26i G`f؁?[6Dhf4è#ü`F \:0 8sA"E4b4n 4 5;C90ʟ/8Mj5;ukRk8 *$sAunG4hy }1]b ia=0,oaꙋi*7 bfVv4|l :5ۦc4&M3(_hfXUf0VlF,} oacoALG4bUUM3[iI^5)Kin70>dy4.-hf"g42icIXλ,ia<LӈQZC40ݲ3͠ۮ0{uF:jaiuOYmX2(zV!= Z+֩I TE m}4BΎOzHp, mKe1ԋiْj ig `fb;hhu&v uY47g4({:&v5I72%MӺX2ia6>2Eia:)=I[nd^܍;^AT){}۹H1l0M#iM'-+C0M#Vx:h3fZD*lZ3SF< 븡eAڛeM yj+"Q^ cL3 iT2LB?)siwY-ӈae{ZA +eL3줐,ڼ1~z/ZًCrİazH(F%9y=N;&WgE4be96q5{cJX3?D(FGϴ.̢iL#i}zHİS5u74qh3if4bx۶\Fiq>{j4qcUL#ƣa<Ӏr$|}zK.(e/DZ@NC2^,u2-Diĺ +2@\Ζ2lE4bQqL#v{ +Ľc2~J$ZuSh-zVd2X1C$yE$b)-ӈ G2~>¤hf^?+"Ck-ӈVyI$blF=ӨHv +i]nI,f4bŞü*RSs jX?3G>F ĮF+V`F Ԍ-ضiF 1PLi:Ԉ={c{gCJ1gF1iZ3gZޡ;ig1^Le!lEhF>Zc[(2]=p2XLO&'?=,!t@,QAhb*cTQF4b.;L6"f/s h\F{4b؋j6UpL3F1ͰnR4bdu4X,8cZܓcaLri64D8i5ɤ&4SDO2Ͱv 4bkKga~{iĨ6ff!>F!'|ʜga ?$y +)lLbga˹̠g1^L#C鴑 P<ӈeR0p?s!Ð!2sM#V( _*oFqH2rGO,y4(,g 񃈙x"ga4hCi@5y)Bga].rtqilbXL#}goޤ<Ӓ%|Mi5ycS5^^gZ U i2:{xk[ANN=ӈ4wl37=ӈ%.:|{%sNOL>D i*m3Dii3dqL#Bqmм&4b3et9G'puiթ0M#91|9k!c{4B$4g*: iMiؘ0H42S2fD0M#HC2H#iĨT iĨҵ4vmL1-D3c1VfǴdZRfjo!_v1nJ̉#Y{ab/+Mb{;i +rYWޣCd0LcWyfuyôdZ<Ӓif2ia FJruBFglcNk0LK0a1.!Q {^aK#Duvǜ_{x~9 B#:\֜]X$K|ۥĥ~уa_~iW+إ6P8.ݘҒ !ov__;: ~i%M[KKR}2Z'Kcgaf)Uf]6ri:$z0m&уaƎDj ~i:9zUt/͚ li94+6x4+n<?0;X$/wKc+#jKc##Ado>F.gPqHymDy485A|֜_KKc#59vSrȮ Hѩ`Fʋ_"]<0]/7Lc"6ăa kje89vP23;4$rNIH1-P΅] vmI?8Yg! il'^c[|4vff i<4%8ٯ{+/';8%^icaA:GbiCLε#ôd +YzzaŪg.^Lueatu"lG}8U ّc il:[5kQFLcGyo^26micbkxHS> i$eD'n׿ ^ ]L[t6__N9p˿b H$L_r3|g˿e$___/* B^*L_\X˿qP'3!;b2;nG`nbk='& ֿO pE,c|I)Z>[Q]l )q;΍+O_3i`LݿfoS6ݔ[_gLSTAg +Q\V +M<[U$jfO0_3[i؅)o??3k6?3s6?lflxEbB]o,' 9Pi ~V!Sy}wzdoSEZ%i 1vǔs.*kIRϾl?gcGƟ,Ԗ_پSȰ gC`9H w$ӆZc-L?=4UI'TNtW>}{pg:dS_( +]Yb$U*.}bթ?%hO +mJxg{c~AkG?y78CS 8CchG_6bJ}F#$Y]C ?14/Z̩ 54/і8)K_C?>eόW}O%kG_6׵݀L%kG_6ռGoї &J\lh ~eCnP-tlh v Zї ar&7yݵ/wR+lcaS~eC^Ш]k۵}Ӛª~eC^pW/3oU-ˆ$>jG_6/qU ?}~/ap ɗ ;VX-ˆ5ş}>sş}>[0kpg_5}`{u_}>+;c4Fu6|d.=:`(+qPJKXH8lПI5kC?XϾ'W}+Fԫr9X5kᐰF?26k4/_3_/\榳}z\M_5Dk%k3Cx(2|ȷ cBg5,] ƟcWl3;2iDvPz¯ܿgP8lA[/ֿgP8TA8{"a${3oԯNgP8A{/NeP:AMw oi3_gP|ˠ~EA{/gP:7 WO3_ ePf|Ӱ~-aUM+7 k >-Isҷ jnL{ePsKܥz4#I2 iLA HsOҷ jn=ePs܇-Z?~0]Os#Է jw[cPN[58mO2inxA}Msӷ jhcP^[5$cs#[{o<5S}ˠ涩;h{ePs=-澩o5wL}ˠloƣ?knAMYSַ iɚ۴cPfG knzf}ϰGS kztc}ϰ斫G kf>qI?{T2IWm-,80/םn)IGT>vʧ:!nzЏE;gCo}. )^Sn?z}w&EgJ|oOS3w?eE#Ͱ̗AKRӜOwOnYzPfi <<7$tfAok,;ח6JKǗ#kIfEӗnZ76}\i]_J("^3ѹzn7}#y;g4w~gMYhZmM_YY܏ + Ds^({?ڍ;>qhCu(H8Hxk3q|HI[~65AO^4*qW44*W8/[*G:zERsEΒl6){TDE[L[WiLOEџ=s>O% +i9Ls3ꏆeGo}+};K}*fxcJvR+ɔ3r05 ;ٖH,Vs~ ϳ',T˴szceن:K[)X~<^ʱۂќaY?OljBaE"өkXeϛ.cC~eXF$ҳ!x]Q6Spsh17BB5Z?nW@KHlnҏd~a+=d9:ζS3tmudG3]x ;~i9 Odž4a +'Fᏽq`Xl7a現40\qnͰ,O kUu w\RջC Qn%'<㨭~bzxWԮ~&,x̤0x)R釆,a'|V"6L,a`9Mp5]!#) >n+{C(Ht,e +l<<=^ڶR:v\^5(a߈1nDv b<'r,k#[=k/°Vu / cODŽבS_Pa9#mY%HCrI. x*֪ZpPJۍXXt O,J[8YuGkU9\fXq+ afK֪w.XV/iòմlV,UX2\u ִ$x2^Ԛ0,Uxu 3n5<o0,\ bzBjK6!lEX/]i9:TՖѮ)'F o >}bå [=q+Z=rl4o*Vl/hg1>l ;]jb+G߱]x[~ ϼׁ1JHba'a.L eypc1JъD`0 +w(aN6LSACD4@^7ᕴWգ}-ʶ =ubul!z8{XgXU挔0n])Bmwy]-1d^i! +msf8*<)1ƚ B|^ ̠{,R1l{~bIMֳu/ n +5paH{IBu-bx!sZ`CV`wؾk $!ab(ze +d`~/FZAխPQ~gQKl:UaOc Ҋ#)LO~| `ObZm +K8Xrgj"!K]ClE2 x ae:B~']ON@łI!j,C~X +'kz[f0\0,XV$°(kb/ŜGP%a+Vb gp,Td1,S V{;MðbiG2مyƕ?/tgN~@:1*K]y1ۉg@`˵s\|N1එ9J⼱0 l?scmCԎubx S8iUxDxxc0 F0 %sa*6qwrfRhlNY+$!aaЅ0u'NW*7+C(bJ !2N<6x'I[˴3P78]M?bq%&&6> +0Rr7O udӛbX!"VZʓ\6t0|X/BRrD0,8"7kj3 pF . GDD:^=]V( n8<ɢ9^+}>1Qz0wv!8Gt#uK0&°Xլfpn(}"P"̙8(0}ؒn!1-H2bz3/lQ鉀ɀR :O<*n +PIGH +i:,PmFZU;1`ĐLq`v,Mlc#mhb\sȄ*nEG@DlFHH(}:jAaS/0l%+3/8Y"%1b}rޑT֪ݖJKMgEQ'ּCL\6cܫ"[ .pY+m! 7mߴhTcb}jc bY<$Ծ ;< +FbخD01gbhǨpAB$Q;b8x@0~V0 CYaUus6'VYյcUmuaf3 +Yo!XrC phCR3d,ӱ-Kc؅5d+:smq]a_`,zlޑni)ʫ@+/Pdwg= YQ債iC<0hudlal,&&3GW6&V2 o &`Gv + 0#[Z24M݋`RlR +h @|bb< X'tPXr`ɦ61cz^[LL`j&ϡ[D| رY b15],qW|hUobbÆ֌SxƂXLFɏ]PO|䱘+Qb,ĭvLAUU6v-'ՎGdjdkW;&*xd11+H4Y  R1y‰%\*1-[V;fR]W;&Z9ëvδ1Tv|t(X- Bj,ƓՎy&dE-&&ʞ cb1v+g1tTt^c?^W;f`1\8^Xa-|bH9&ՎIDV"-sL..R1V@Za5~l<[avp2I]\;C]@X`z`)/X`Kܻwx߭m4g +ss{kג֠v\=֯ Zbн2/{E`n'X`4r_mX'c.Y376vo  8,0a<v7 쎋-;z1-jNX`2Yzb.:]`wThxQsvGe .-gI撮vj NK MZ`xY6kx`.]`wT{)SJ {V;(AՎ*3  .,\af]Mʫ sՆN .W=0WZ`wyleq 'jUvW]|`k 쮥>0W]`~kՊ]c^`wmz5j 쮡/ys^ ԿN}">Y@uaKTCs4 >Y`sI >Z`s^ nU_`9ss >[`qO;}\`ig[ltݧ >}`4wݧ >=1xZJ1){/L}g̝/] U 1"ͤX`7c̍ f,a3e݌f11fݼvu,.Zrlv7<.4c5nYZ| +[`7쁉J1{mݬr "-nNs\vsvq,.nsvs2|`aߔ䘪 f.v]DtwgLsay|k^`7z< m/O|vc/nsv`;`] Fx`a x`mrLߤގzBKs+ xY`w;lY`wG; Z`w;tZ`w;Z`W#[`wo[`w_(3XᙼIs{cs~iM' RS/ϐyxS'RmW>b_#E"\?$E{:]%*+K +!)Gۤ%Vʗߓzun' ^^;VԫKf[T +a{:}?+ET"tvg)Jui*[?u!kLMk͗zuR#vSWw@|^d.u0S`g"M,G4Xɲ#YS!_gđ6G]1\?54FNN.4sLޣumliCv'}<ɥ5S0ѬMÎt!z a@GPl^/@ (%hL[ǯ9B\Xǯ9}I(V-^.fOg(za^a PGoJ|*b"Gвu&QmVЧV 1z0K0UQ'J#vV$>ݳ5(A*\kP 褷6(-Laf X|W@! v=)*Xv/B TWN s8}b"I C5P'vMm^"kzCIqI-*=C 䥨y &~ϩP}]v_1*&d!Sm| !bz+ E.GjG<82ת*ISLn QTBXg&_]b}A񉚒&9jBh¼p&=+Sm(Ti BX<0IQ,gb͐[Gbs .b{u6Wx"(vh>U{O@_׹:ɬb LIbzpN2mlVYf q=ƥؤ?$$46 +|MZhDqpUА8/oQ={YnN)i^P~yt0]ۨ/kzM>`IG667t>c2^9pvr݂ wK Jcd͑pQG҇. #f9E`x#^*(/׬ ڍ~$P_>1g +FoWǛ"s65 HtLIp- ~p; 1@$Z~ѕyȠ$9+& AAU{s4Ϯ0~Ry +b&ĴϾfo B@#֌䍦dUA?0af/0o}`ۮL&CBeC%NBևa]Ml egL3{1 +6fbF $ -^}'#vt{ J7MIC^ˆ[7zÊ}%;ܐk;Uճ[f1k!r@H.(Dl2q}E01,[>ޯjXtf%K{ }LR(LSfM U.tEL0erg-b'ȥ +l㱤aɋf`İna%8;;W38C`c% )<Ԃшւ!,oleeoy2Ud"gեTՍI,gҽ 1mdamC$bxn +b!A2~ſquwXA5lTc3Mɏi$2E-A6xT$Ema96s\T;+Ί;p*I a֭;m.zS#]>n +,hdRbMPZvуJΕ.AWvEH Arab]WNŗ9`[{xEBvc3/չ߅Dzyvi>$vJ؀AY:A,ЃXC-aуX0s~_&zxX 6,f$71גqT B),vBd9b .6Z^n<羳{a7- }W-XB ba17#%hAĐ=` +W(1EAȍݴ]BDeӉ2)_gM8~ORб +,vT 1G +.hINH]M0G2m +2gW&7+4OdgHA ^ B. va-=3^lpX9"' +"SbYAv@Nbv=;' +"NSw/ăkdw HAL'%9R1[F yyo9A[Z[Msr kL:ik հq10{G *T{ӝ'Rk%u$: cj)ST "$F=8AlVRmMwS)Zvn)\jț;wOW `'jot " QJS{ tXP(lYBs≰Axéfys z*ϛ񁨌f}X5BOSwt n6n2VucS1G"F!؎+L] \xt,mW1d-ǰ"Aİ9ck5Gwa޼ AF `Hb0uYNG[7p]AzNK=`!J#\ L 6yͪv@$߼jbJn1B3с-JfB:b Ԍ/?s s| Riq'@ʽH=+aPk\!Ss ΞT_,Sݖ&B5~^#lMJ]Ss| R1T+0ev6[{oBY:7#D])JF{}@_Y`V7;^,I29$)?1!C%xim r=1F.:]]J +ɳ2zΥHV@)dl_a H=1$Q4Δ-bPn5GHk8iҐ&lM# T/i  ȔM #7 Fj`Xa\=e*k`lxVwNzmYٱ_>U܉U̅mnz`ݡ?;8-f +xpX6ғZ^$#"LX&JmzR԰$mx$?(n#ˑ3ƪG'G,.,ظ$.a-!?0r,Z`sSmStqj䁹%aK斮v/y K[bؽ4/kE@n#X`@ns7vom rDq`݁v)ȅ7 N=0-;|[` G 2>0.;^`wc<0|/;h_`w9bjSv$̥2 ʀН8=0p-sfsyv36WW؝.;_~`.^`w~`5vWU|x@fZk$]ZY@wEfݕ*@ -JsvphOPQ{` ++U ]i\`w+ 쮤Θ.rsvW]~`J+U]_`wv,,D⁹v,䁹v,灹v(-$)OQ_>U~vi|);3x]Tp2G=^'LN} C!%w3ՠ)M- 񼒒ԢysNm| 窔եD1ϟ~8m6)d>1uفߤ[nBp8.6m,mS^DeSLntJU~};Ԍ){[,CԐG#r2vaKT .;ʏgboA҈IQ؋7s?A,IaZlǻhƙ<w5LηoR4By&C{zic8& +u~ȥ7XLx?QPm;_[ H6ۭ9T̒6!VD~MT c՚(D&,l\M1+lX%S*Gt"2QG|H3bUb : VANyKc+f5݌-hjɃ&z1;hqFF|u))x6!TIxTF4{=bWD$?ST zx*HAej @1$f1CDJ-wڬ2/rF<hĬ'x$5YC ]U|ՔsM,qk.E*PJMz<Y~+ +kS/eJ,̌fėѶyRϱ/z.1vM-O%j@ +t`jScŮӈM.;Bk-י1:'4|eIʦL&m ӳ3#ZjC@TNmk&@|Rl|31e~CAQLL,[5-lY|3jm:ې =\ѴڂFۉkBCNgRVԦD}EPUNca~.ߘŃ۹r6;.Sx๎>F)-i,A|풡]FSi'wvfC:vthcUQMu9t>^<èVPi;y}HLNC*|WkP\%uW !3ƩG#flf%&;= $.>p;ލيDiRSjַTvcJ9vlr;X9z9K76ة'*Xk4tJGe^b_0Oz'<߆L4D&=zm^i_C{pI+ͽ.-2UقPB/UK`5'.={N{i.Q՝y@'944?~|6_u'>`B?1,{ͺtŨXft|70S,IQK#"̿,lޚDz6DC5:\lZyH1Aan? Ęj|$G䮢vv,ъ^ИAK)H}o(BlYQZX*wP$Iִ~5%$$(Xlu|Ͳ)Gbי,|쳺 JrЄIE]x!V#U AC imCKP~-%oӰէT[1̉.+(C=%}{O һR@NrU$!2㏨<(:̾?S!,9/kD,(D'\p62J3C>&%bږMĶr+2QİvEy)b*FUDe:Y;{ *XtvxAVbD.؊"Vn( FY(F~EQLJ3bψ#UeQ0881 QmA^aFu݈a#ʨ'&nͨ?x(%1#m1Ae13Y#PQ- ü z9D@B&4>*.$" f=Eb1uUfFbHJZ}$lQ-s¢Ae^f3{^YF+jZPXL\WABE"7IV[ +^ǰ4 ObءFyT%6_htJ*{Iyb&KRP7Ly{Ê3?bAoko{{ 1x'6Zv.h#`(`? i<ʃyaH0nVW My`o;ݗ'@;=utн>e(M'.mhV}hrN 70]GSC_fC-PC{QfaU)hrK>|}Ds=FS-ԁPt hF.T4lwf5Z^ ưa1aސFw[ư|1hdcw!ۜz ǰ/ڜBl2ys c݂?a0"Җ݇/2䫟G i,0v # \Z0g@~z˿j=}mWݍyݬǩ1tɸ<."_ vߣ %0O.*gu .zH:pQqm ;kᢕa{c^s*/gEmɿ&. c.4S/SpߒA>?b +Ĥ'?q 2j.y~#ؑ3ΰⒺ6 _8?[߳)(aC_ct@g aRSf覟O +`EG);;nViE}%{4pXL)8/ъfe*KaaB/u4OaYMbǾJqaoVa:TQ+mG|M10"ha'&嚭(Ne2Чm\|3 桏4BAzY{ČT Q]Uw1PHzQ/)3eW/"ZIs !"=%>#e\SL!B\fj!raĬBMQМ"ub՜#|bgOAy:br:Mb3BBK +SLT915Kӫk- +dnL$XE~&g&)k4'uN}.H&XV׮a<BJ ӷotYW!o$|uOgTa͈(9#Ld <av ɒ]wـ,<\n`rH e +% nHj":|ye҆  ,bؽ|L-bVs5H/LmX"A9:]&y`EW(%=fa\ !%i}GYkAf;f? |9T2fAIoܽ>/C4« USJ~[V_&bDYL+` 7X&B/D?S]kݾnM6԰nJc ʲurڳDFN潼=<aW1̏h #p`j sFphVЭ噴37E*B(KLn GjQ̦87 \$abyۤBt"ю'Mc'-CF .ej@C,Hx߯8`y[UE2 ky+O&\O&\tdkLl  Z1dE\{k&\ܻnɄrHxpm>\%{>SS&* O&\x7!0B4q&\N3Ǚd…M05p im &.l +!fMETوyvW1Ŕ\N\${U|mu0Yp$EMq-^3 X{#W0LZkיĜXb߶.-%Ej *-0Mwb O}r? ]]*iyWW\7hD . .3xfт h\o8XpUqa`,,}W5#т8YpƷ2m[Ic3v +sS :WDΗ6t݊jy=O'fH-VĒ>3=1{;rQ 2O hT{~;}©.rS-оw&;0AD :R\ !lUMECMٍwcb+1CȄ'#)?\eEψؠ$bXއAkbc%58Cg}T֐v + WUط[-+h ^Ď=vk'eN՜_sSn*|33|ndWo#4hon7{m~;bvJ}zĐb]>X=Hn~BP6DBxp"2)m)#֌)tYJopX^sGaIw{G2X kn<%kaXꖺCa DVK Inܝ6rx REf5LLa0mlse^ssnd +.+MVydgN +h zA'tTJ~Zkli\L vbEŹm0.}k\TE>WB9]<҉# sUݽ*;:F{>`(a5de3}o:IoU:Udo׫z4DY#0[z6%FUOt:I_tA] g0H#vf# Y kv 041"X50+ 20N׿x,$, {33_m`hVxP!ˢR6uHI6+Qx-%ʬR!;QVL6[j/I.ǮAaLCfE Y;{WYt!맵QCtil!ErzKBlR!2{׷dHk(5 #W`Idz)ؑIDߪuklv/6{LA#EvOyGY^,Ud6Ӝv][Uq82%!)Ȏ댢XW`;7*bUFVz#I*#= >So6ٳ޻C~[AFdsyࢿr[odcs(Ȯ3G]ӑ=FkowaO,hAq#d'ߛmdm<0g -lO9pӭ~QcH4NJ G9YMd׷ƻ ڏ~9x+$7zw'꽥Is}9X,E i^ >Tƒh2~*(gػ {v6J}hqpq( M!E,hyrAJR0{3sw6z˖C 8C9't:c;_1t.n: iOl8-Q`19.hHkRnY8W+E0v [_ _;P7-ϤTN_cۋ{wXP- zoϽߔ\Y?/inGC+Q, g}o,Hh4 ";{ttj)"ӝٌ(tg6U,=*F,H2Ƃꈔ +bz(eN1%S,>H ?7"`H/0[1(d׍N9=Օ9$֏KQ*6_m +b;bޮAW]| ++S] {$ߩ SA'z+ز+dh-Ҳ+֝ }٧PH_~ˮT7j3lN=\4ݿ :CBz|rA8fM t:M D :])4wˇQv6D :!R|mesAb=h)DfːD84 7AlN=' @##U@ +m}#;BAXtv3 P=N-Ȫ+G {{7GfTؽcvE +.L;*0 +:aK/ +" y~ϙ "o ١&=6~"Ad~Hء`F3t k]?zzo!DdWQ3%ޔ $_fS$8,D4o ڛ"AxwC{S$l y]B&l(M{L!T/ɸ_5"\*|>ל "jnorN=n;}{ϵ+v]0Agŋ+yOCѐ >EŊ rW-ԋ^ʙ8Fh\[ĺ>Ib2'^qى8n^[ލ]8+ h& B.og/bDmYٳ{8[!0!85C19aF'LP +?J,:I4,Wf:9&SuN-4·M}=OLxY2]K KW6bOeHXCė!a)%֕aFtoPn;|5,nϾe"hJWb/l¢hbV:x&e[q-6vbi EX` {D~nǭwlOM(&b7<~> O;a{FKmoxN帋$ֶad|"g%E4?ql$iΚׄ 97Ȥ;b)l7$_ZtF2|)Z$; P%;זTw,lÊ6.a$ ۾d@.&cl=l3M]a{Z%®6Ѩюd~&:w;=ٻW6FUF<$ j+._m8 C0h3n''D.Dg3jS8`s%x,D0~,(p~LO/, gW 6W%‰]8AYg  N`<|Ȯ`dYt<>$z:;=H0cN +xLudAv{8%'}m +&T:8p8aԡqprd8hd8 t}ԥCx24d߾XdПlS=C0 W8`@i hvd#r@تU C%exY;}-Js~!v~c,d` + Տclޑ* +b k:ݗ1CvSLK- y%lrxB mJ %2{p]WbVfȮ\1Eƪfo:Y022+k V>Vэ~圐365YG[".Y$C %7 iC2 +ٕܜSdwn $&;Fb(0l1BxlHbЭZ%kiz{uTkT"y¦TkC +w΅,5rK4V1 cė}!\ +[fVs¡o!+dI"Fۂ(DɸME"`_@&Ap0b VnΝ]g9Ԇ?ɴ[`6WՃ=>9OUjΔSi ̮Ԁ,=蚷( `v>(DXJv Ih U?ͱxnPsz\E"`/"c6O-ZA͵,`#)-;8܀jiE({JħkCY7 D\h%HƸvؼUUJ:텒'bkךJ*+UW,0?(tM}'C)2ig=*BXPdCϡ>h(~l.ˡjg$C 68tbCx)Z!cq#؅R_1Hc)pUe~k&:OE`vD,QB)XTI,ZqUs-,-i`o|") ~Rq\jezDu`bI92PC^;Vr+Xrޛ@Xu-ݱ*4&M$C쎅]L{^]X6xcw,7_c?6VgieW㦖K;H](tǂcȥ;j7^.ݱp2rԳ {쏗tbq+X DgcQ%AUqZ3EWcU[=' }w(v¾8Zca>qKw,LwcT[!v:0~[RX,4[csڥ;ݱl1wXh +\c!z ;$XPIZ}zƥ;APoca7 ]Z쎅MrbluCUtxw`VL>%Fc WQÄX0\{ͱ0%ieLBW=Xt'XpR> ˗dhp7W=גX;36ǢZX bs,.ZWXW$ŏ ^} +ͱ`v8N-Yc߷9V>,ͱ=XwLX=bk,zv;B:5lZ{cqpko,mƲ)io|zc+9.{򋍽ЎKo,gS7Vxbâ M^H썅q\G5j]ux7pN>.w{9VõBs,ly[c8=ktǂ9rDwX77 }]cݘOV=Nl SX\ce=uz%4B3C:wx鏅XbO_%Z̾ MkǨubQx_D]_V}'zKO*a{8B1?bC8ouTϺJ6cdѱNh]Ght]vI=vލhp WOWZ5yp|`\W z=XԔjծ +l(~}h,Q|כaoN&j#dB ²{ + 俸Q`>eeBc#JcӡELluvGHJ9t9zN쏅^16cpX&[/q`noAcl7db,c0b&A1/Y٧yh&62fz 9CAynu@ȱCqGP>xЉ}"I XZd"_Y=>EȲ[ԎN,bExЉ&-:stMdu3zY'"%6#iY'O%YaIٜB0ٌA#™z# oo9\쑅cډ=yaKMb,/W#wډ->zA$޶C2sCօ)YXVcJ[/fhd#KS:<ϗj>5Xoa,Mla|^L&BӪh ~Kvs4xٜ +/FCs[薦\6W}Sqj '+S(Y,]f.n$&'>;%pJX㐂pl>3ޟ0E]l Zٝ"a/KȚ1)ؐ1/LD8?~-ٷp~ ވ&? .p0T1acw?mv %Y )=o2avCjN&ln|qnw%̞V?l] CHe%aPY/wF뒄\%,C6> .{z 0{ >a;͖ٞ/aB{@±ꃠȾ(4a? BB3ƅ/& SUpP2z#a;A#̬" 'EN†sp^P[ˍ;%z2aPUUlqNB,I=սevmu'aOa'y(Lf0ו ڴ$ᓯӞq5Ӯ+z3v+E߶Mo>cw_m޸:aHp30a6ԠNmDŽ=1a6IUH{  +{8_&ЀI8-H Q:֓M[xn$ <Xcӻ-,nI`.وAF!A͓p_(K>J,; kDye7X:%̞*r'ĞV iJ}y8^سz/18c[2a=2ƣ V}/ɰ!Xa,*R ^ |uFT?A%[`Jdc焝'd ɰ`ll%쾸\/8724a8a>c{j<)5{2.dFΘ;{aF\8aq+,nt%a|&S? ? &r Cu%O3>^) sj۳A;w2a% +dyZzVcB?e ge5`{}X~h0m'Ã֣а%D{![20 o%HmTdlҭd Mb\ꘜ0LJHhO";.s0· +-]M'rl)ΘVK%&C:}Ƃi^=@%l? g%$邍6cw@Sez*}6q>~ ǚ$ON̾Zdu5Jeg C޾ck} H"cO~-X1vo J>n <>ͤ, l\{1[(0E6o KЩ݊'oތYvL+S!7a`ӘS8Ua.f{ 'N Ǝco |' r(l (@T"y[YT=pHɘ֋C@*0te6a6-#9,u3uOL36e]- 19cfLB}AIՔ w2DH z#XUI~I6)3*ƇhVu5EVև?mWf_VY" qs2FNFhwʑ0Jkj24{2BbCR(mUlЀwՑiP(<2[dh% $k? I8fqd#X-W7voHMvHZT=dgKFh H^˅rwؓ|JFq\ {|3*=dz5a6KFa0xW. k=,Tf{^ye`:C{l=(X_فߟ;Hݶ%rv/JcT1#dHj,@N 5BI{jmppFi ')*0گL~ d0c`(}fAЇ۰$a>Ya0,4E"E#a]-Rx5a6 HA]BU4iIq1zV%ȾJҥ`]ѹA®M(ۙ|f]'i_FkonhI{.e]"K.m\瑍x ;u݋>D&R30.IZQѕ0@P$mY; 'TF$]ʑ K]<>z%# <:;?DV9T.,$] +X&Ie~uӲCyԿ.KA6%RB ,z}߁@x)->7X%~8#pBU=R4Pa epԵ]>&0|κ/ +PG+!lߓ'-mMSbX|>FSღ0Tퟰte$ W Q".0+mvp_)aLXħ[udlfO;5gMxJ~kH܄Lx'l { AnjæA.aEI[4 m `æ9C\#apG81'JؘK}' }lڐII}Z;-?LGI$ll8% U|6.ccc,acCø ;'acæ Ä9|i66 6ጚ6`66n[VCQ  ]+mwDv C\Vᵭ0b|tMԚ :kaMg4 G; ?擤QÈgIY\ng5aT.!æÄGi函 ( c-YwG G ߟӑ̈́tQs5'!@l +B$R} SæFª)0D>l +$ 7ْaa|IH2&S2,L1tO%d?4Kg6RH 饕)TLXK%hd>,6MO"]la)B0{p$=?l%'Tg$K% uٕdl AcQ`dKesæflbOgF^Ø3emƐO'k)0Zc/Ȅ!~۲7v6 D* 2Ơ%K؈O'lĮ?q탍766fY~I) ;m{칂=L!plF6$l!$l/|kqبHX/ Vf+Gƨ=Wl I_߷0W$|TzNF9·Me< [nmh%\n)%laIv窨j*cT'lT}%lT}Te05IF蹪æjA@YLF݇MU{ C% U6U& C2+ U Փ Cp͡?  RبDMب`0V slF퇽 Ԅj*ڟB% QaS%wFxP9~9T''hԷ%d(O(_;&l'l>l $ z; +Vl  ڐa{HذdHذR$l,> Lذg$lX7>lu$ vYLذ|dIug\Ɔ$a~a5%aU +=L. Rm,Iؐ$l lKFٕI0|>jǗaJ0}dJAk24 Lnҿ5>lR8%lVl^T*akAaQJo}]6t_ {b Ew†le-aC!]Kؐ}$o(mؐ%lH>l%`2<y  I߇Mr )` cs0aC^!=0;gb†&cŽLpH~Lgl.?5d&h5!'Aly&l@6ġvфuOiäEMY!aIޚ0H_$X:b?hR&i4 " x% I0'dSאM2 q†&ir†l9aCa;$W 2 yu†&Yv†d;aCa;aC0H[rj  M z†&{†>aCat>aH]ItvФOP'l666Z$wAAz_m*~ys m>lj&"aMM)6Y$l4lt#aYLJ=>4Z$lIF '6LIhѢæ. -a6Z|Ԃ&ago]æV9 -v6Zln铰 +(aЇo롄E 6Z$}Z)a%SF+Z@%lJ[N}۩*AUFcj%l4JhaS㯄~a m>N >lj|-aiۇM{aXo`?F]G?G$fΕ1Lb%_;~s$Jܾ8FSU +32 f;Qz~f=nŸsa\ā~~`hLnlgL]`}5YF36}4+j43&wd/d/0؉y=;ID1Ikk,l&n>ٵ D=OO>C 9u-d<]'aۥC+Y[h6dl81t"fWpO[>`ؖekJjab> lOV; +}DX5jC͖-fNހf L \B8x.^קy.c{l6쿲[S_y+HCX=c YAAJklx l@D?8 ,l =GnEg\FULLb(ƿ 2+h6L'uKhOU={ֲ38{P/Yݖ8}-k^=·[ѐ +P} VPּ6%grb8Y.b7>x{w<'0'Mf+ ]lﴙ wӯ1{4KJ230a7 d֝8hy^X($Q>=#}vi7 Q2?Zz}a6@8YZ!z8Bǿ yN~A(S>l Bi?iYVj;4, TS۶1uv!y>LxCIͧ3{`V8=)b +#ݷCIl>h:J(>КWܦXWgUG`gWb^eX>^ӻB?;TȵwHn5ls+ YbʑEsv#I;ڮ*PoVZ!fSI2}.YnNtJQ^ H4(G +㗂-ȞRgPh2[u;Õ+&!)Ʊ镊`0\v1Wyjm}DJA̓.,EE.e*Q[Z<s ]Td甽V:b7 ʊ/&߂;_JEXeGa-ո +]?LuX;LP4<H 7&) M{('1υ =Nq֟MPߓ>(-f*JگMYkO:kF}xfQ;z̵ҧ^ c?yY99)_0asq淾Qqtb +v`K"c3gTUr?[|\8CO] q͞~xw\pZmquvq2R}/:󀞿yed/qQUq\dxSE49.jJ߀]r?bM1m9{U}#>iTy47vz837d8k<p Xk]10{Rav3FT\JŞ}eDW86i}89g (h \mzkTUK4BNF <`u-جn2MDS(Dϫ)~'k 6V`Y'Ĭpo p(Ɛӷ"=μg;2M]pzk yMgKS:WWHv"^8ׂddaOָJd1vqQNiMr@Pb)LE`/ ^tgj6˲DBx6MϮ!IKdgZ}[)mU8|]rwNe8]g 99`c&ǜ7/Uĸ^hɞ{G&}kΦ7Tf]dBP̻?KBm}+pC&\Qf*{C.d:q(]oX=&(KN5AYF7AYƪ@l̤PLڬu71YǃuSkn'ɦسJȟ@biaFN3`2>CT=n+4mu˴9p:{$4_KrG(ε;ZzIT#_2^[K(򫈭dѬdrÑiIߧek9 ̾4g<y+g +?_G6_A2vm؟z-:ci<l*j[G7?l8iِ_rf6 +j _˄յFHqng&=F;: +†L?Y6Q4Mscn"K?!{ov*:bHIv5(I2VԤX(a٘OP &qGg6>9`nm[:ؘnki3X+d=zw )Sg^1H8OOBW?9ѷ>>͍ cpo\hZ9Akأ2[q"_0"?WL801ͱ0t~R?wAńt`p>Iց<knV(M(Is3'J6EgW!"C?d[cxh)|qlr VյQ NA`i A_Sc`)v>(;nqH+UWwiՁjt?y7vc6]4> RŃ&Uvjt"!(hǞRt]=-b_T 5 ~}% =|I7;%W~ӾL hzϔAIIA3w4͢Cb غ;Հ- !~@K2GS2RL TE5.^`K2ȆS9G iyq_y DQYi;Vɽ*MO[ [*\> cAG^bA6۠![bAӾq+`3A`Nv\rAQ]1TAoemnO N=,w;x\ln<ڭ]bؼvq\fy|\Q)~<4dI&s%g nn~bAya>1W Bfcd?OWvވlU; vU/)Z3n?ijK\С ͅ É/E l AC٫؜ +?)߹ϩ wqJʖsW(j sLN~^doǦ$i}HS BAX4^~v=1ĽTK[d +qI;,)ėMc7gfw~.>2z=RA(wua*H@8Iޘ9 +4 +*X2)P 3:ga&H]`sG +6-C ~Gds$V6"S$6ڳ:F 鮅y̑ 0{ׇz mw(p2z)k\"+})@.s{+a< b1T&bTA66,&S*)H/ T80n'cA AE2傮R٣T.EdEL {z8c(2K f(8Rp(?f\=)8 /~jJܜT؋He⡧56k8/J %(` +Q Bv5(o;eS*` +͞LKuB6ǂĈ&cA˝icA|#ccAm;7\7FԮg9"{gS.`\ͱ L 6۵+bA@~M }y+ħN.{Nacn,)*YJ! +j ՎH}S*&E!s{tӕN>֜r+%` F8|\vq+ďO 0\< +FzMlNU%CEq`s2vj|dS\6)RL2[?s2h }>Jql{ӆ&(} +&YkCA{ؤd2*w?S=A9{R bґBEȶ' cӎõ͹ 6Fژ :/CR9f鮭kS.*uPUb8\94}p`5`H2nU>'ԴaAE"//qj9G詭gn}!^\>Gl|۫A +g^dvl޸#m"J^%6ylA]~,{9/jp>}MDgfN:#<;,T*xɏ9d a/i^4UdvqW~` yAxccT0l||ds0 ePbWf}`~*MsJkSyxD KQZjZwhGMCȔ ban?v@׀L 0<ȱI`UF U6/&Y>Py s0Fq4A5 ZwG2.J+6`;Qs +aËL~~,|`e}2:Dvɗ~L j=,Aa1~O9S,/`ssm&+Mן#D12ZY Qc5 'nޖ z2'?xRf^hӊ e>R! ެZ]03F7r9n*Q!z*jU>A%p.q} +ќl%Fh d;U$F +,8K=tySʟzp d#AVO_zϏ դ]ňc7t*o.O&=$ Z Be0[jW^W O{^F2g;',sy 0] Mnz2l7A \}z B ٔE[ +ф ,\dَK#tiΠ'QzT vxY K;2xk%jhuW]̦=`F^#uh6{)WM)VW?5Lq[!ćlގ7є p?TqzG1 _}w!lP}ahGD?v["7~(T`pퟺPfgٴ(ǧc x+}M1k>Π)昋a/RRS,!{y* 1ݏQL9SS + @Kgt) + Ki?6H چVcaȊDƯ)7)?,k0PĐwzxwU3lW)'Sq!"ĆS@E~#A:T\>o41A'e_1=97/ oSK GB`$@ݺ-G i ~SUxkj% 4*4 ULJ@m^нW7.6hp=bE=*wԏ@JUE@}q+7m8)*v3*v*ؔ/M l DPaE:-Y}S$KĦLE8Sx*S uW)컡6 +V*0Ԩ%ƪ*7if[Wh+n{u50Eƥ~n6L1ʮf3E.`" + `}:?~a +` `7! ALٓ2̂)"c` +̦(M)^۹ +JGSn^Q0f2[)vz- +n`S`.)2),ַcS ݹ +g_HY0V_~`;9^nS`o6 +#SiLݵ D蒾-Nc`Lc +ԧqLs@?7 *̧c*"'Q0)0T7*ISDQ0E=.,k[Sd,)*Y0J!,"rKrL +GRG؎\ 0)ɥSdw : +9gQ0Evj7|LfY?)m)V<S`uvSDu+1[Sd8w՜$5Q0EhYSh n-("Y +BoL}oL#-rj("C (٣fT` + u>9. "=U0U⯸46 +݈))O%`MWQ: "("S*"6`A120Ɖ͂)`ݙ(CI*Y0EV{dL!Y0ZW*GT +(< +(;o> +*ܮS`M-ȸU2 +79dL2CKeL #=TaiNdYSd^ +`Lnt]ML=S`ּ> +lTݲ("]G Q0U}<S`Q0EeqA00iт` +l("GTv-ܻjL[S`WPj`(ڰ; )0.͂)팂)i*6 | +T$ɗS`L, Ȏk{`lI` +jTf[W0[[Q0EVFLaa("6 +8RHSdoU}L\ S`o# +N)qS`>uYSDQ!("ۺ7 + oL +)2v )"/YS`vi>)2fzCȲSdpAHhSdGOFnfD})f2)1V~{jL m)1eΆ`Jd*;ЌnLޞ$ +(ҧ98A0o0 +>6 +tE/S˕S_,"{ 4A0 ~(fk`L*"l)(' +)"d.JLyt{ yLBz! +lcyLaGP x`Q0gx@Te`aLqyoLq`Q0Evޣ# +8X(=SDM-WSBwLqV E[LfLit:: +8{: I4 8# aӸ"0UaSJfsaT/v'E{`a iak~aSW  S_l4Lq`琻i6LqաMj*gڠ$T0WvSZiL KxLq~S`{GTၟ` +L۱ B-ݥlzLZo PsufLaAtx/i$ + +Oc + t ڽĂ(cTtLDS`o2ogFTQ0f.m )0zX  ԅQ0VFMOL ZJ(^jLْt6 +FD=` +=)u @L u^Laq(<<E0MJ{oL5U:V+*^S`/ +FL,FiL *ÝkL(G(BQwC )zz(>VGN/뭷^)>J]*S.ThI,̷4g{66Q0}Gc1{ ZLՑh)0mS@l ))0$n70͆)0[is4L}<)R S`(i!}4L`;JE]|:a +ss,֖U{a + f7M) ٹ%hSAUASy+AӜ +Ե:PUtLUke1Ul^ SH9m>YSSLGAyRpLUXS@^9[S`wA[)05c +GFVTuNS8lw捎[=8*'Dڮj:*;w~tLk;~͎=[1G1f=PcOc +-mg{1*BYc +̞^S{i1Gᦥ9pޫc)0/7)lB1 ㉎)0vY}SF;)BzK92c +HWД hqtL]Vp%:.!)c0ky*%:lcc +%uLӮ{c +y50:D^uKtLq:*Go^S`S rkM5*v{tXe1C>mc +l>͎)c6la4:_SjVJh'՛ x%1,}ZfGЍǥA9}SN$o)0͌)z|uL|%:wwS5wWFX۩JPoS`6*d)MtLUq5?)0'/žc +I1UoMc +ht/VTe u2v>kFT4P?Bcn>Gf#@Sl}s|uLVnOo|S` /:*cc +{ltLU +&HTj?d1=~2o1U ) +Segw)/ouL!L; ++ +V έDc +1z%ET5Sdc,8 7Z/eaA;ʻzRcf jٷqÝOc +g"ۥ{uL[%,c6:XHtLU antL!!eSXǡ1e ^S0'`InB-8*™/c1Uy|3:ڇ2:*2`),fb2)UtLЃA8beFW1V/w|pLzrpLكw&TcF5̎)0FZS`JS6ApL1v! )1+) v<49\^jTi 2c +c1f/qLK79fKpL@\1v㧫f1q7x68Άs"Ԝ 2p1%͆-&XeA1fM˃c +̆F.1!LS@vaJ8>9)XE1)o8` /.S`zd:5n1fK+1v}c +.Ny{8i6\c +l +-c +Z 2Z͎)0txbpLux!8`>)HiS@#D4`]=cS`[*SMs2. +)8&_tLeHoqL=Wҵ7;(418A͆1R<5- [,V6O4MlXlZlZұ0ز044%֫ijamYlZlZҴ0i!jjejjeKͪՔXGʖ {]S+]S+[hZPkjekjEk™ͮה3RVLff7塚]S+Be_V6|GԂPY@Q43%t{(Zٜ)[,Z, Z,Z,rs3QL ]&jV6kV6%y2jV6kV6ks+a͚͚͑)^5S+3eκ(xV6{LMh9.aQ4I4%T\ES+ES )ݏhjehYIRMlMm]DS+#e1NV&ӔPo+MS )gՎM)!E5G<US MSʢjJl]S+]S.oUS_Đ,iVM9ㆨZٔ(ՋQ5嬛jJqFՔX_DH3]SdRה3oeSb*ʦtʦ +Dfٔ*lJ +(r?lJCQ6GٔXoadSB;Q3E);,0MflȨ;nhx{*EdoL;jʂf +>Q3EfSwOLijȎPLxTLufL)vVY+6zý3E3En3f|L5ߪ"~Ȩ"3nLǍ+3Q )"ϯ)Q%=Sdgl{3kY\zy#x6{(,X6k^[LJe +Yj8H2=|Lms )8ɩfЅi=wQ2v[%S`d +ޟA2a]9>KX͖4Y5SR}Ԇ)w{ooLm<ኚm͚zਙͯt[L\,S@+U 7̖  )0!͖;O}-SYLLXsLQ=;mvm1{#c +un)0 3Hha$SQzQMLQ2^djch{fJљ*ZXZ962m]-S`8 +:Z8E=~d +O:d +lg}A2F({A2e ^ Q2fd +Id +6^RJQG6[et&|LO/)l7ʌNL! D3=۬B=^)5Sz+2AR9)H6j8j~f +iKبcM暠2`aWl=js(ur) +o=/Ό)M 9T= )7=Sn2zP62)6V=S`),mfѸj +'ss,9!0 CUS˥jش)I\S8c9]SAFv]vtYk +6lP|!3:26틮)aPMcޫ#nf==69tTS`h[~VMV̬F+`0hrE=Kz4.&=lR^j +̦<-)<|rFM)ITS`~Z/hvMٌ>$ )I[dS`Vm%Ȧ6MFn +2xmOn + >MkXKYtSKQptTMῳDͶ) {*N6V^BMeaֶ=.̚A`v@#dٻ0ئl)QMAJŠvyG`ü1ffnjj +_668A5 ;'.7cvJA0nD4+ح94M)SBM 0{!MPMi)z)j + uvL ܅+ )þrgB@LSm7i +l@0M1bIwei +la}f4g47mwQ-I\0M}i +Ao1MA5O鷸sf"DP}M]1A6ƙI6TBcg6fOI'ئ0Lۣ2`n;`6iS}vz{@}Maad=n +)n#5=Ҽ00SWzfXE7uQ*4A7}t\fp6{10O n +ΪQI&h}zn +s`xx+پY +)Nl: )Lmlgj +ap,S?7Aq +˛2_4NjʵԳp +K r;: ݓ|)4\73[7+[کSY߬l߬liSx߬l߬l߬liXYZ`fefeKOjgMYS-Z`faڃE͗-Mf6Us{o߬l߬h6)v3 + QYzx2Q\p٨sQe3l*mpݓ623*sY\ɢ:,>_cavMfo91pO20n$_̚1pMJ4= lp0iIppeM8>vGW8ÌG) dyZdz av>;lAa}@ ArHa&dp>2pvP8>&d?:+ +BvAbCea6a6W8Av!p1ҳ}f Av Ft$T5nA$B! J=f8w0ZE[E 8HSdx4u<d{(#[ a6+c ImQ ^0{N88Ȟڶ8Mc +Ԅ + u W'U9cAv~$8F  +LKq*g_$ZH .mpͩNngh ȑ׉8N!@md\Qo 8;+npV3`+,ngg;܇Njjn#1?8Y22 TY8읍N:_Q=_gӉbv`ݦ\At[oٛα9Jp坤2͞LHe4ӤԒ d4pu/5e$~{NdOUmpKdNNdW/\qYU3/5wkZsx dX d1z8+PFM8q8Ћs8.J .'pP0+ZM- +B<8Xj"ʦ84+֪`\ dU'p@@_PO +B"$?9;˟dOJ ++r-j5A:FY- :.c2Nz/yd~v#pşЙVΧLJ`vwN $ nM|+_ Z~*bZ?: ?8kvZ{ Mϲ)_L|BU:S dhΣ{/?TQ|KA?j6 AQjKb C~lAy@'UQjN#VC9 dϡG5p(l;u8 <@ d*:E e//1bx |GBf {b՘Gl7Y9~Z; (nb3pe +!8'sd'W7}][1y˶}/Avs%*o"8Ȯtn|#*#^zq.WCpd8f&A M =T 2,wfAp:W&o>. -"8 d%!]|l5 mG!84;k! 8E1';ANy!8O!8:׫R)EB`,J-N sgApŭ# _i$6Cp:F(| v3"tP福!8HbuaNɿNCpb~kNG9+ hzwt96[D,a7Q!83W?XKs+W ث_{rujڲ-NǞ{H> +endobj +121 0 obj +<< + /Type /FontDescriptor + /FontName /EAAAAA+mwa_cmmi10 + /FontBBox [-34 -250 1047 750] + /Flags 33 + /CapHeight 683 + /Ascent 750 + /Descent -250 + /ItalicAngle 0 + /StemV 0 + /MissingWidth 500 + /FontFile2 122 0 R + /CIDSet 123 0 R +>> +endobj +122 0 obj +<< + /Length1 2580 + /Length 124 0 R + /Filter /FlateDecode +>> +stream +xV}L[?w߳108Ϙ~@@ YBȨQH6[EiȢnʹEQ5M[ej7=PUYuRЦڦ-S&lZvàu[];{9{}@ + +<,*B^\+q%2*D̏PPq5DKӞDm6?E:Y8fŸоgMg1_.ʨ&&Hj&Ж0粹0sںZ6 2Y;[l]!E6܀5x.W"| .d`bp` ({ڠ}wK9BeΒbGVh-MxuHS^e[m ]sɽq9TU>=QrQ nlۣykRVU‰g~wB=JO99TPquɶ#0En]'UZ=uo~j'g<h"0Sk7z0X࿴]O+kqOרo>^6wl4% ɦ)?mڊ(w /R08 Яu|n47cL[[y,=9Ɂ< 1s^cV gތ KDcl$x8-'sx*pvT8ɦTv'iYXBu#nFrIdRq<Ѵ`s9F00zl">ߵ dOo,C6@Pޗ];[P]d7xضyQ[c Q .AlolY E +endstream +endobj +124 0 obj +1850 +endobj +123 0 obj +<< /Length 125 0 R /Filter /FlateDecode >> +stream +xk`FN +endstream +endobj +125 0 obj +16 +endobj +126 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /EAAAAA+mwa_cmmi10 + /Encoding /Identity-H + /ToUnicode 127 0 R + /DescendantFonts [128 0 R] +>> +endobj +128 0 obj +<< /Type /Font +/BaseFont /EAAAAA+mwa_cmmi10 +/CIDToGIDMap /Identity +/Subtype /CIDFontType2 +/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> +/FontDescriptor 121 0 R +/DW 0 +/W [ 0 [365 943 571 ] ] +>> +endobj +127 0 obj +<< /Length 129 0 R /Filter /FlateDecode >> +stream +x]Pj0 +t'Y,Rȡ[N m琿*cah❼1N~!0h]Qՠ;[M2"u8uxl, >gQ@7H֍pj/!.B=t_Ѿ*'>N'9k@W[5A*$F,eϩo~TQߒI0*mC5ەvM̻9(ep:z +endstream +endobj +129 0 obj +241 +endobj +130 0 obj +<< + /Type /FontDescriptor + /FontName /EAAAAB+mwb_cmsy10 + /FontBBox [11 -215 942 727] + /Flags 33 + /CapHeight 0 + /Ascent 727 + /Descent -215 + /ItalicAngle 0 + /StemV 0 + /MissingWidth 500 + /FontFile2 131 0 R + /CIDSet 132 0 R +>> +endobj +131 0 obj +<< + /Length1 1992 + /Length 133 0 R + /Filter /FlateDecode +>> +stream +xUmle=Ҏ{`3^wLz׭s%["AZC[خueAM/CD%:_r4!HBb  m >s/^:jxiZ |'T~lTvvSdg҆70$\qm#U7s3lxl~b{gUg +l;"9I=g,Q!_^~uK_2 +y'.zWJYN,1qPo~eev2EcQw)8fg33 uk5Uuen(H",͍!UYl3&񆞄Mzmb'LHU3vUYy1VMHi=iD%S˺\> 5'- JnML1DIO&^S|r]O>Rl͹-6Wl0ȹAсQMU%EƉRXɤ0Yk4+R%nH+0EYL2&'kQU􀪜EX􊰨$-p&L"aMXTTao BUrIU̺vua7YKn-&#*ĸ9 Ony}-4h"'\YxkC%B5nń`9U;[ֽq_.|[_ޮٰT]ɚ` +U;͞6c%Z!_FΈghyF'ʌ +hR}Bfp'ޥ.Kd km ѽwBxc[EwqrSaw0/;`l>pJv.BLXG uLr0*`-,`l^sMtFS 4ioh:F֠SO KxzGI;MJ$El-Z (;Iˎ9DHu<&*+qdlU;Aԡ٩L*=-m InEb&+ -R@feVbFј*@gKӇQ]'Igt&?H{U5JQ#TG*;Ixtld> +stream +xk +endstream +endobj +134 0 obj +9 +endobj +135 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /EAAAAB+mwb_cmsy10 + /Encoding /Identity-H + /ToUnicode 136 0 R + /DescendantFonts [137 0 R] +>> +endobj +137 0 obj +<< /Type /Font +/BaseFont /EAAAAB+mwb_cmsy10 +/CIDToGIDMap /Identity +/Subtype /CIDFontType2 +/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> +/FontDescriptor 130 0 R +/DW 0 +/W [ 0 [750 776 ] ] +>> +endobj +136 0 obj +<< /Length 138 0 R /Filter /FlateDecode >> +stream +x]Pj0+l CԒX}q z0h[lE^X gBpjV& +:G:g} +endstream +endobj +138 0 obj +234 +endobj +139 0 obj +<< + /Type /FontDescriptor + /FontName /EAAAAC+mwa_cmr10 + /FontBBox [-43 -250 1008 750] + /Flags 33 + /CapHeight 683 + /Ascent 750 + /Descent -250 + /ItalicAngle 0 + /StemV 0 + /MissingWidth 500 + /FontFile2 140 0 R + /CIDSet 141 0 R +>> +endobj +140 0 obj +<< + /Length1 7324 + /Length 142 0 R + /Filter /FlateDecode +>> +stream +xY T[畾mZIhAZhaB /`10lq;qxR㸮Ne|n9mJ3iN:LLNs2s8s7i;3wp^,}. cFv쟱t?IΩ F~H/wj<w ~vߥh e513w`ΠM`=sS4[vO .XH0OOMN> zNq~jN P R!А%o/Y~?;q898 p7L(삭k + P!BP VYB]^ν{5333\`&b&86&% +߆p.I\<gK(<'qs4LOďKB}NIKMQ +L9A\!5Z7z4vm쑚j+zبԐqI@ u4X-㬃ZKk[/;\kvφn]q?֬8߸'gcaV&Օg>PL^Ktm@8?=iY{dvsJ+4[$YDd9+ #qWex=]۠ -bk\f 874<n)x=>Sy!tUl=^<O&x襾9@I@uwRNRFci a*|*w:oD( e+2neWXH̊ü8|E&dJ_k:Zk$tb#ܫt$;v+I(CL +ȁB+CVX +kLqT5{%nc^OSOļ:b6LK'CN1(SzsX[II KʫkV8TR`HϏnz#9HDM<.di +%JVoWQy5+ɑ^Q0X?E]xp+4׆>L ѩıO6sm]Duv3; rъjgBG0*el4`5^' + .)K+H +ڎGl5n5}}.jqlC}8VPcjD]E0i5a , +JNet qJMFf6<",P\Ife A?]k(QT}MN3VǎkMGiV[^{k"/7nh8;q@K%k᫅<vf3iz)'-.˥`_M[Si=n _Ր`-Z0^6DgXCO֍OeT2!<.g6}/:ݛeJ*s拌țIۘ.@8ùa^QIG*et&TGq>$=Vmh$J }Bk4jX6-ifi34 s"xN$]`-l8ЬbE^6cvx(/`Nk2FbM|JZ[ +-z%P.* & `?Y1Y3|^z*ʒ]R + \+yf젡ls݃:ݞ6OֶEjk}sǧZZs+S_:[yͥg#?jf:]Q?ɖ如,k9^@X<0e eyX*)/~%䯒ڡ*\lKLbaNk{VnLex EtwXwXW +*Rӷ gO-,[H:e>m`܋'}Rį&O)̤0Rn$09rmB!=5E-\&YډxLZ=*^&D?$0/l޳21)=EynVnۊ)J Ccļd3`I(ɝGfr*`z4'C񁴇 2* SXcf@{E_j01xir˥<U%tVAS=K,w)MNqgdgHvH'r$ R-!3}LHeMbܓt=s{~~Ox_7N0-Xtn=R{xؚۚo \6]_k`݉iWkmlɞpɶv{@E?Q9Ą\6tcϖº2ls䡰!H[l AcRȼSB+KF I`ݪm MCug~EU(+>Tbjm|{f~ױ0s&_.,*§?^ϜK).[ +& "t5j*خpjP5zG1h9/՞ oq{EȤؓPG?4) +k[haZjWiZ-82o+Z20P úpCIq~Z +90CXrgT d*C%fZ(PPj!Ӑ *bI'yc)yrmC)#wĉά*?&JNwiRc͎?<=wJMIװEV;MWyx?=}HdcjMf5Q[W;w> K3ё|0X0.# do-ComK/ȓK/]Xno?KD']9}~T˃}R[qcޅp uBz+=PHaJ!4%y+4E߼Gԉk2=ĽXMl˩}K¥+R`PжD%^yHkK@㿡)wUJthYH% v-yh![ a` .*F(h%iZ3NZ#hq/"`Kc4"XmZ Q;DgAZYB{I{ŝ,L/Dĝ`H3"뤓hK_' 4ZJ++=qZ|~z~~|!.t M?4+)-k_;oiMC;fF&w{,{ %)qvL-%R0#~i:|V^u⑭V-m*˖R) m~jE@6[Y#Y>(/8tTy4ε%5E6"ķ[S l9n` +endstream +endobj +142 0 obj +5368 +endobj +141 0 obj +<< /Length 143 0 R /Filter /FlateDecode >> +stream +xk`3`X*^0_ +endstream +endobj +143 0 obj +20 +endobj +144 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /EAAAAC+mwa_cmr10 + /Encoding /Identity-H + /ToUnicode 145 0 R + /DescendantFonts [146 0 R] +>> +endobj +146 0 obj +<< /Type /Font +/BaseFont /EAAAAC+mwa_cmr10 +/CIDToGIDMap /Identity +/Subtype /CIDFontType2 +/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> +/FontDescriptor 139 0 R +/DW 0 +/W [ 0 [365 500 500 500 916 500 500 555 276 388 555 555 443 776 500 500 651 391 526 443 526 276 750 443 276 333 500 500 680 555 394 ] ] +>> +endobj +145 0 obj +<< /Length 147 0 R /Filter /FlateDecode >> +stream +x]n0E +/E )TĢ5{H ,_HgI.Seڑ%WWYh'tkFLjުv> +endobj +149 0 obj +<< + /Length1 2072 + /Length 151 0 R + /Filter /FlateDecode +>> +stream +xUmLSW~h|QprGP[(uRoe"^ִQi63%f13!8CBøȜKl˲m? !n?6?VK1ҝt(Wp6؄ +8`(O9ry*, @q.}h8zakMĵBdKL(pЫ+Yֳ֕ Yr[V X7())qp39}*lV{ &:1;anb΅Q8~.exLC¸8Ẕ ow\z;wXaM.gS{79~urϟ~!b:S]'f̪s,?ݍ6NBˡp4`g-i#@sNlv9mE3 뢵 LJc9lkX{ 446%t !sT5]K +fD( I˷<ևl i)G~hfqW[Md@h Te2%OĊ*vZt(K7Y|pt( +Kkk%_mmGRD$*5yf-:I-Zi UOCI[Vx&5(Gzp$>vI= C\IGH9bz{cC>B8Hz4Ujl!kalMi'H*BCq*b=J_O*5c9V?lOz^ΗfʻrϊF˝[r, +endstream +endobj +151 0 obj +1417 +endobj +150 0 obj +<< /Length 152 0 R /Filter /FlateDecode >> +stream +xk +endstream +endobj +152 0 obj +9 +endobj +153 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /EAAAAD+mwb_cmr10 + /Encoding /Identity-H + /ToUnicode 154 0 R + /DescendantFonts [155 0 R] +>> +endobj +155 0 obj +<< /Type /Font +/BaseFont /EAAAAD+mwb_cmr10 +/CIDToGIDMap /Identity +/Subtype /CIDFontType2 +/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> +/FontDescriptor 148 0 R +/DW 0 +/W [ 0 [750 833 ] ] +>> +endobj +154 0 obj +<< /Length 156 0 R /Filter /FlateDecode >> +stream +x]Pj0 +t'u B}дrFqJH?FK >(X V#NWt:zVY> +endobj +157 0 obj +<< + /Type /Catalog + /Pages 120 0 R + /Lang (x-unknown) +>> +endobj +119 0 obj +<< + /Font << + /F1361 126 0 R + /F1360 135 0 R + /F1358 144 0 R + /F1359 153 0 R +>> + /ProcSet [/PDF /ImageB /ImageC /Text] + /ExtGState << + /GS1 2 0 R + /GS2 3 0 R + /GS3 4 0 R + /GS4 5 0 R + /GS5 6 0 R + /GS6 7 0 R + /GS7 8 0 R + /GS8 9 0 R + /GS9 10 0 R + /GS10 11 0 R + /GS11 12 0 R + /GS12 13 0 R + /GS13 14 0 R + /GS14 15 0 R + /GS15 16 0 R + /GS16 17 0 R + /GS17 18 0 R + /GS18 19 0 R + /GS19 20 0 R + /GS20 21 0 R + /GS21 22 0 R + /GS22 23 0 R + /GS23 24 0 R + /GS24 25 0 R + /GS25 26 0 R + /GS26 27 0 R + /GS27 28 0 R + /GS28 29 0 R + /GS29 30 0 R + /GS30 31 0 R + /GS31 32 0 R + /GS32 33 0 R + /GS33 34 0 R + /GS34 35 0 R + /GS35 36 0 R + /GS36 37 0 R + /GS37 38 0 R + /GS38 39 0 R + /GS39 40 0 R + /GS40 41 0 R + /GS41 42 0 R + /GS42 43 0 R + /GS43 44 0 R + /GS44 45 0 R + /GS45 46 0 R + /GS46 47 0 R + /GS47 48 0 R + /GS48 49 0 R + /GS49 50 0 R + /GS50 51 0 R + /GS51 52 0 R + /GS52 53 0 R + /GS53 54 0 R + /GS54 55 0 R + /GS55 56 0 R + /GS56 57 0 R + /GS57 58 0 R + /GS58 59 0 R + /GS59 60 0 R + /GS60 61 0 R + /GS61 62 0 R + /GS62 63 0 R + /GS63 64 0 R + /GS64 65 0 R + /GS65 66 0 R + /GS66 67 0 R + /GS67 68 0 R + /GS68 69 0 R + /GS69 70 0 R + /GS70 71 0 R + /GS71 72 0 R + /GS72 73 0 R + /GS73 74 0 R + /GS74 75 0 R + /GS75 76 0 R + /GS76 77 0 R + /GS77 78 0 R + /GS78 79 0 R + /GS79 80 0 R + /GS80 81 0 R + /GS81 82 0 R + /GS82 83 0 R + /GS83 84 0 R + /GS84 85 0 R + /GS85 86 0 R + /GS86 87 0 R + /GS87 88 0 R + /GS88 89 0 R + /GS89 90 0 R + /GS90 91 0 R + /GS91 92 0 R + /GS92 93 0 R + /GS93 94 0 R + /GS94 95 0 R + /GS95 96 0 R + /GS96 97 0 R + /GS97 98 0 R + /GS98 99 0 R + /GS99 100 0 R + /GS100 101 0 R + /GS101 102 0 R + /GS102 103 0 R + /GS103 104 0 R + /GS104 105 0 R + /GS105 106 0 R + /GS106 107 0 R + /GS107 108 0 R + /GS108 109 0 R + /GS109 110 0 R + /GS110 111 0 R + /GS111 112 0 R + /GS112 113 0 R + /GS113 114 0 R +>> +>> +endobj +xref +0 158 +0000000000 65535 f +0000000015 00000 n +0000000145 00000 n +0000000197 00000 n +0000000249 00000 n +0000000301 00000 n +0000000353 00000 n +0000000405 00000 n +0000000457 00000 n +0000000509 00000 n +0000000561 00000 n +0000000614 00000 n +0000000667 00000 n +0000000720 00000 n +0000000773 00000 n +0000000826 00000 n +0000000879 00000 n +0000000932 00000 n +0000000985 00000 n +0000001038 00000 n +0000001091 00000 n +0000001144 00000 n +0000001197 00000 n +0000001250 00000 n +0000001303 00000 n +0000001356 00000 n +0000001409 00000 n +0000001462 00000 n +0000001515 00000 n +0000001568 00000 n +0000001621 00000 n +0000001674 00000 n +0000001727 00000 n +0000001780 00000 n +0000001833 00000 n +0000001887 00000 n +0000001941 00000 n +0000001995 00000 n +0000002049 00000 n +0000002103 00000 n +0000002156 00000 n +0000002209 00000 n +0000002262 00000 n +0000002315 00000 n +0000002368 00000 n +0000002421 00000 n +0000002474 00000 n +0000002527 00000 n +0000002580 00000 n +0000002633 00000 n +0000002686 00000 n +0000002739 00000 n +0000002792 00000 n +0000002845 00000 n +0000002898 00000 n +0000002951 00000 n +0000003004 00000 n +0000003057 00000 n +0000003110 00000 n +0000003163 00000 n +0000003216 00000 n +0000003269 00000 n +0000003322 00000 n +0000003375 00000 n +0000003429 00000 n +0000003483 00000 n +0000003537 00000 n +0000003591 00000 n +0000003644 00000 n +0000003697 00000 n +0000003750 00000 n +0000003803 00000 n +0000003856 00000 n +0000003909 00000 n +0000003962 00000 n +0000004015 00000 n +0000004068 00000 n +0000004121 00000 n +0000004174 00000 n +0000004227 00000 n +0000004280 00000 n +0000004333 00000 n +0000004386 00000 n +0000004439 00000 n +0000004492 00000 n +0000004545 00000 n +0000004598 00000 n +0000004651 00000 n +0000004704 00000 n +0000004757 00000 n +0000004810 00000 n +0000004863 00000 n +0000004916 00000 n +0000004969 00000 n +0000005022 00000 n +0000005075 00000 n +0000005128 00000 n +0000005181 00000 n +0000005234 00000 n +0000005287 00000 n +0000005340 00000 n +0000005394 00000 n +0000005448 00000 n +0000005502 00000 n +0000005557 00000 n +0000005612 00000 n +0000005667 00000 n +0000005722 00000 n +0000005777 00000 n +0000005832 00000 n +0000005887 00000 n +0000005942 00000 n +0000005997 00000 n +0000006052 00000 n +0000006106 00000 n +0000006160 00000 n +0000128338 00000 n +0000128362 00000 n +0000128389 00000 n +0000143776 00000 n +0000143637 00000 n +0000128587 00000 n +0000128843 00000 n +0000130813 00000 n +0000130791 00000 n +0000130907 00000 n +0000130927 00000 n +0000131322 00000 n +0000131087 00000 n +0000131641 00000 n +0000131662 00000 n +0000131914 00000 n +0000133358 00000 n +0000133336 00000 n +0000133445 00000 n +0000133464 00000 n +0000133855 00000 n +0000133624 00000 n +0000134167 00000 n +0000134188 00000 n +0000134443 00000 n +0000139931 00000 n +0000139909 00000 n +0000140029 00000 n +0000140049 00000 n +0000140554 00000 n +0000140208 00000 n +0000140999 00000 n +0000141020 00000 n +0000141272 00000 n +0000142809 00000 n +0000142787 00000 n +0000142896 00000 n +0000142915 00000 n +0000143304 00000 n +0000143074 00000 n +0000143616 00000 n +0000143699 00000 n +trailer +<< + /Root 157 0 R + /Info 1 0 R + /ID [ ] + /Size 158 +>> +startxref +145647 +%%EOF diff --git a/matlab/figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.png b/matlab/figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.png new file mode 100644 index 0000000..c725ad8 Binary files /dev/null and b/matlab/figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.png differ diff --git a/matlab/figs/super_sensor_time_domain_h2_hinf.pdf b/matlab/figs/super_sensor_time_domain_h2_hinf.pdf new file mode 100644 index 0000000..3782b54 Binary files /dev/null and b/matlab/figs/super_sensor_time_domain_h2_hinf.pdf differ diff --git a/matlab/figs/super_sensor_time_domain_h2_hinf.png b/matlab/figs/super_sensor_time_domain_h2_hinf.png new file mode 100644 index 0000000..9f24b85 Binary files /dev/null and b/matlab/figs/super_sensor_time_domain_h2_hinf.png differ diff --git a/matlab/index.html b/matlab/index.html index 75270b8..5154d95 100644 --- a/matlab/index.html +++ b/matlab/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Robust and Optimal Sensor Fusion - Matlab Computation @@ -35,51 +35,50 @@

Table of Contents

@@ -95,24 +94,24 @@ Two sensors are considered with both different noise characteristics and dynamic

    -
  • Section 3: the \(\mathcal{H}_2\) synthesis is used to design complementary filters such that the RMS value of the super sensor’s noise is minimized
  • -
  • Section 4: the \(\mathcal{H}_\infty\) synthesis is used to design complementary filters such that the super sensor’s uncertainty is bonded to acceptable values
  • -
  • Section 5: the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is used to both limit the super sensor’s uncertainty and to lower the RMS value of the super sensor’s noise
  • +
  • Section 3: the \(\mathcal{H}_2\) synthesis is used to design complementary filters such that the RMS value of the super sensor’s noise is minimized
  • +
  • Section 4: the \(\mathcal{H}_\infty\) synthesis is used to design complementary filters such that the super sensor’s uncertainty is bonded to acceptable values
  • +
  • Section 5: the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is used to both limit the super sensor’s uncertainty and to lower the RMS value of the super sensor’s noise
-
-

1 Sensor Description

+
+

1 Sensor Description

- +

-In Figure 1 is shown a schematic of a sensor model that is used in the following study. +In Figure 1 is shown a schematic of a sensor model that is used in the following study. In this example, the measured quantity \(x\) is the velocity of an object.

- - +
Table 1: Description of signals in Figure 1
+@@ -161,8 +160,8 @@ In this example, the measured quantity \(x\) is the velocity of an object.
Table 1: Description of signals in Figure 1
- - +
Table 2: Description of Systems in Figure 1
+@@ -206,18 +205,18 @@ In this example, the measured quantity \(x\) is the velocity of an object.
Table 2: Description of Systems in Figure 1
-
+

sensor_model_noise_uncertainty.png

Figure 1: Sensor Model

-
-

1.1 Sensor Dynamics

+
+

1.1 Sensor Dynamics

- + Let’s consider two sensors measuring the velocity of an object.

@@ -248,14 +247,14 @@ G2 = g_pos/s/(1 + s/w_pos); % Position Sensor Plant [V/(m/s)]

These nominal dynamics are also taken as the model of the sensor dynamics. -The true sensor dynamics has some uncertainty associated to it and described in section 1.2. +The true sensor dynamics has some uncertainty associated to it and described in section 1.2.

-Both sensor dynamics in \([\frac{V}{m/s}]\) are shown in Figure 2. +Both sensor dynamics in \([\frac{V}{m/s}]\) are shown in Figure 2.

-
+

sensors_nominal_dynamics.png

Figure 2: Sensor nominal dynamics from the velocity of the object to the output voltage

@@ -263,12 +262,12 @@ Both sensor dynamics in \([\frac{V}{m/s}]\) are shown in Figure -

1.2 Sensor Model Uncertainty

+
+

1.2 Sensor Model Uncertainty

- -The uncertainty on the sensor dynamics is described by multiplicative uncertainty (Figure 1). + +The uncertainty on the sensor dynamics is described by multiplicative uncertainty (Figure 1).

@@ -280,7 +279,7 @@ The true sensor dynamics \(G_i(s)\) is then described by \eqref{eq:sensor_dynami \end{equation}

-The weights \(W_i(s)\) representing the dynamical uncertainty are defined below and their magnitude is shown in Figure 3. +The weights \(W_i(s)\) representing the dynamical uncertainty are defined below and their magnitude is shown in Figure 3.

W1 = createWeight('n', 2, 'w0', 2*pi*3,   'G0', 2, 'G1', 0.1,     'Gc', 1) * ...
@@ -291,18 +290,18 @@ W2 = createWeight('n', 2, 'w0', 2*pi*1e2, 'G0', 0.05, 'G1', 4, 'Gc', 1);
 

-The bode plot of the sensors nominal dynamics as well as their defined dynamical spread are shown in Figure 4. +The bode plot of the sensors nominal dynamics as well as their defined dynamical spread are shown in Figure 4.

-
+

sensors_uncertainty_weights.png

Figure 3: Magnitude of the multiplicative uncertainty weights \(|W_i(j\omega)|\)

-
+

sensors_nominal_dynamics_and_uncertainty.png

Figure 4: Nominal Sensor Dynamics \(\hat{G}_i\) (solid lines) as well as the spread of the dynamical uncertainty (background color)

@@ -310,12 +309,12 @@ The bode plot of the sensors nominal dynamics as well as their defined dynamical
-
-

1.3 Sensor Noise

+
+

1.3 Sensor Noise

- -The noise of the sensors \(n_i\) are modelled by shaping a white noise with unitary PSD \(\tilde{n}_i\) \eqref{eq:unitary_noise_psd} with a LTI transfer function \(N_i(s)\) (Figure 1). + +The noise of the sensors \(n_i\) are modelled by shaping a white noise with unitary PSD \(\tilde{n}_i\) \eqref{eq:unitary_noise_psd} with a LTI transfer function \(N_i(s)\) (Figure 1).

\begin{equation} \Phi_{\tilde{n}_i}(\omega) = 1 \label{eq:unitary_noise_psd} @@ -329,7 +328,7 @@ The Power Spectral Density of the sensor noise \(\Phi_{n_i}(\omega)\) is then co \end{equation}

-The weights \(N_1\) and \(N_2\) representing the amplitude spectral density of the sensor noises are defined below and shown in Figure 5. +The weights \(N_1\) and \(N_2\) representing the amplitude spectral density of the sensor noises are defined below and shown in Figure 5.

omegac = 0.15*2*pi; G0 = 1e-1; Ginf = 1e-6;
@@ -341,7 +340,7 @@ N2 = (Ginf*s/omegac + G0)/(s/omegac + 1)/(1 + s/2/pi/1e4);
 
-
+

sensors_noise.png

Figure 5: Amplitude spectral density of the sensors \(\sqrt{\Phi_{n_i}(\omega)} = |N_i(j\omega)|\)

@@ -349,8 +348,8 @@ N2 = (Ginf*s/omegac + G0)/(s/omegac + 1)/(1 + s/2/pi/1e4);
-
-

1.4 Save Model

+
+

1.4 Save Model

All the dynamical systems representing the sensors are saved for further use. @@ -364,27 +363,27 @@ All the dynamical systems representing the sensors are saved for further use.

-
-

2 Introduction to Sensor Fusion

+
+

2 Introduction to Sensor Fusion

- +

-
-

2.1 Sensor Fusion Architecture

+
+

2.1 Sensor Fusion Architecture

- +

-The two sensors presented in Section 1 are now merged together using complementary filters \(H_1(s)\) and \(H_2(s)\) to form a super sensor (Figure 6). +The two sensors presented in Section 1 are now merged together using complementary filters \(H_1(s)\) and \(H_2(s)\) to form a super sensor (Figure 6).

-
+

sensor_fusion_noise_arch.png

Figure 6: Sensor Fusion Architecture

@@ -408,11 +407,11 @@ The super sensor estimate \(\hat{x}\) is given by \eqref{eq:super_sensor_estimat
-
-

2.2 Super Sensor Noise

+
+

2.2 Super Sensor Noise

- +

@@ -443,15 +442,15 @@ And the Root Mean Square (RMS) value of the super sensor noise \(\sigma_n\) is g

-
-

2.3 Super Sensor Dynamical Uncertainty

+
+

2.3 Super Sensor Dynamical Uncertainty

- +

-If we consider some dynamical uncertainty (the true system dynamics \(G_i\) not being perfectly equal to our model \(\hat{G}_i\)) that we model by the use of multiplicative uncertainty (Figure 7), the super sensor dynamics is then equals to: +If we consider some dynamical uncertainty (the true system dynamics \(G_i\) not being perfectly equal to our model \(\hat{G}_i\)) that we model by the use of multiplicative uncertainty (Figure 7), the super sensor dynamics is then equals to:

\begin{equation} @@ -463,18 +462,18 @@ If we consider some dynamical uncertainty (the true system dynamics \(G_i\) not \end{equation} -
+

sensor_model_uncertainty.png

Figure 7: Sensor Model including Dynamical Uncertainty

-The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at frequency \(\omega\) is bounded in the complex plane by a circle centered on 1 and with a radius equal to \(|W_1(j\omega) H_1(j\omega)| + |W_2(j\omega) H_2(j\omega)|\) as shown in Figure 8. +The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at frequency \(\omega\) is bounded in the complex plane by a circle centered on 1 and with a radius equal to \(|W_1(j\omega) H_1(j\omega)| + |W_2(j\omega) H_2(j\omega)|\) as shown in Figure 8.

-
+

uncertainty_set_super_sensor.png

Figure 8: Super Sensor model uncertainty displayed in the complex plane

@@ -483,18 +482,18 @@ The uncertainty set of the transfer function from \(\hat{x}\) to \(x\) at freque
-
-

3 Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis

+
+

3 Optimal Super Sensor Noise: \(\mathcal{H}_2\) Synthesis

- +

In this section, the complementary filters \(H_1(s)\) and \(H_2(s)\) are designed in order to minimize the RMS value of super sensor noise \(\sigma_n\).

-
+

sensor_fusion_noise_arch.png

Figure 9: Optimal Sensor Fusion Architecture

@@ -512,23 +511,23 @@ The RMS value of the super sensor noise is (neglecting the model uncertainty):

The goal is to design \(H_1(s)\) and \(H_2(s)\) such that \(H_1(s) + H_2(s) = 1\) (complementary property) and such that \(\left\| \begin{matrix} H_1 N_1 \\ H_2 N_2 \end{matrix} \right\|_2\) is minimized (minimized RMS value of the super sensor noise). -This is done using the \(\mathcal{H}_2\) synthesis in Section 3.1. +This is done using the \(\mathcal{H}_2\) synthesis in Section 3.1.

-
-

3.1 \(\mathcal{H}_2\) Synthesis

+
+

3.1 \(\mathcal{H}_2\) Synthesis

- +

-Consider the generalized plant \(P_{\mathcal{H}_2}\) shown in Figure 10 and described by Equation \eqref{eq:H2_generalized_plant}. +Consider the generalized plant \(P_{\mathcal{H}_2}\) shown in Figure 10 and described by Equation \eqref{eq:H2_generalized_plant}.

-
+

h_two_optimal_fusion.png

Figure 10: Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters

@@ -584,10 +583,10 @@ Finally, \(H_1(s)\) is defined as follows

-The obtained complementary filters are shown in Figure 11. +The obtained complementary filters are shown in Figure 11.

-
+

htwo_comp_filters.png

Figure 11: Obtained complementary filters using the \(\mathcal{H}_2\) Synthesis

@@ -595,15 +594,15 @@ The obtained complementary filters are shown in Figure 11<
-
-

3.2 Super Sensor Noise

+
+

3.2 Super Sensor Noise

- +

-The Power Spectral Density of the individual sensors’ noise \(\Phi_{n_1}, \Phi_{n_2}\) and of the super sensor noise \(\Phi_{n_{\mathcal{H}_2}}\) are computed below and shown in Figure 12. +The Power Spectral Density of the individual sensors’ noise \(\Phi_{n_1}, \Phi_{n_2}\) and of the super sensor noise \(\Phi_{n_{\mathcal{H}_2}}\) are computed below and shown in Figure 12.

PSD_S1 = abs(squeeze(freqresp(N1,    freqs, 'Hz'))).^2;
@@ -614,23 +613,9 @@ PSD_H2 = abs(squeeze(freqresp(N1*H1, freqs, 'Hz'))).^2 + ...
 

-The corresponding Cumulative Power Spectrum \(\Gamma_{n_1}\), \(\Gamma_{n_2}\) and \(\Gamma_{n_{\mathcal{H}_2}}\) (cumulative integration of the PSD \eqref{eq:CPS_definition}) are computed below and shown in Figure 13. +The RMS value of the individual sensors and of the super sensor are listed in Table 3.

-
-
CPS_S1 = cumtrapz(freqs, PSD_S1);
-CPS_S2 = cumtrapz(freqs, PSD_S2);
-CPS_H2 = cumtrapz(freqs, PSD_H2);
-
-
- -\begin{equation} - \Gamma_n (\omega) = \int_0^\omega \Phi_n(\nu) d\nu \label{eq:CPS_definition} -\end{equation} - -

-The RMS value of the individual sensors and of the super sensor are listed in Table 3. -

- +
@@ -663,51 +648,44 @@ The RMS value of the individual sensors and of the super sensor are listed in Ta
Table 3: RMS value of the individual sensor noise and of the super sensor using the \(\mathcal{H}_2\) Synthesis
-
+

psd_sensors_htwo_synthesis.png

Figure 12: Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the optimally fused signal

- -
-

cps_h2_synthesis.png -

-

Figure 13: Cumulative Power Spectrum of individual sensors and super sensor using the \(\mathcal{H}_2\) synthesis

-
-

A time domain simulation is now performed. The measured velocity \(x\) is set to be a sweep sine with an amplitude of \(0.1\ [m/s]\). -The velocity estimates from the two sensors and from the super sensors are shown in Figure 14. -The resulting noises are displayed in Figure 15. +The velocity estimates from the two sensors and from the super sensors are shown in Figure 13. +The resulting noises are displayed in Figure 14.

-
+

super_sensor_time_domain_h2.png

-

Figure 14: Noise of individual sensors and noise of the super sensor

+

Figure 13: Noise of individual sensors and noise of the super sensor

-
+

sensor_noise_H2_time_domain.png

-

Figure 15: Noise of the two sensors \(n_1, n_2\) and noise of the super sensor \(n\)

+

Figure 14: Noise of the two sensors \(n_1, n_2\) and noise of the super sensor \(n\)

-
-

3.3 Discrepancy between sensor dynamics and model

+
+

3.3 Discrepancy between sensor dynamics and model

-If we consider sensor dynamical uncertainty as explained in Section 1.2, we can compute what would be the super sensor dynamical uncertainty when using the complementary filters obtained using the \(\mathcal{H}_2\) Synthesis. +If we consider sensor dynamical uncertainty as explained in Section 1.2, we can compute what would be the super sensor dynamical uncertainty when using the complementary filters obtained using the \(\mathcal{H}_2\) Synthesis.

-The super sensor dynamical uncertainty is shown in Figure 16. +The super sensor dynamical uncertainty is shown in Figure 15.

@@ -715,20 +693,20 @@ It is shown that the phase uncertainty is not bounded between 100Hz and 200Hz. As a result the super sensor signal can not be used for feedback applications about 100Hz.

-
+

super_sensor_dynamical_uncertainty_H2.png

-

Figure 16: Super sensor dynamical uncertainty when using the \(\mathcal{H}_2\) Synthesis

+

Figure 15: Super sensor dynamical uncertainty when using the \(\mathcal{H}_2\) Synthesis

-
-

4 Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis

+
+

4 Robust Sensor Fusion: \(\mathcal{H}_\infty\) Synthesis

- +

We initially considered perfectly known sensor dynamics so that it can be perfectly inverted. @@ -736,18 +714,18 @@ We initially considered perfectly known sensor dynamics so that it can be perfec

We now take into account the fact that the sensor dynamics is only partially known. -To do so, we model the uncertainty that we have on the sensor dynamics by multiplicative input uncertainty as shown in Figure 17. +To do so, we model the uncertainty that we have on the sensor dynamics by multiplicative input uncertainty as shown in Figure 16.

-
+

sensor_fusion_arch_uncertainty.png

-

Figure 17: Sensor fusion architecture with sensor dynamics uncertainty

+

Figure 16: Sensor fusion architecture with sensor dynamics uncertainty

-As explained in Section 1.2, at each frequency \(\omega\), the dynamical uncertainty of the super sensor can be represented in the complex plane by a circle with a radius equals to \(|H_1(j\omega) W_1(j\omega)| + |H_2(j\omega) W_2(j\omega)|\) and centered on 1. +As explained in Section 1.2, at each frequency \(\omega\), the dynamical uncertainty of the super sensor can be represented in the complex plane by a circle with a radius equals to \(|H_1(j\omega) W_1(j\omega)| + |H_2(j\omega) W_2(j\omega)|\) and centered on 1.

@@ -769,7 +747,7 @@ In order to specify a wanted upper bound on the dynamical uncertainty, a weight \end{align}

-The choice of \(W_u\) is presented in Section 4.1. +The choice of \(W_u\) is presented in Section 4.1.

@@ -787,15 +765,15 @@ The objective is to design \(H_1(s)\) and \(H_2(s)\) such that \(H_1(s) + H_2(s)

-This is done using the \(\mathcal{H}_\infty\) synthesis in Section 4.2. +This is done using the \(\mathcal{H}_\infty\) synthesis in Section 4.2.

-
-

4.1 Weighting Function used to bound the super sensor uncertainty

+
+

4.1 Weighting Function used to bound the super sensor uncertainty

- +

@@ -808,7 +786,7 @@ This is done using the \(\mathcal{H}_\infty\) synthesis in Section 18. +The uncertainty bounds of the two individual sensor as well as the wanted maximum uncertainty bounds of the super sensor are shown in Figure 17.

@@ -819,30 +797,30 @@ Wu = createWeight('n', 2, 'w0', 2*pi*4e2, 'G0', 1/sin(Dphi*pi/180), 'G1', 1/4, '
-
+

weight_uncertainty_bounds_Wu.png

-

Figure 18: Uncertainty region of the two sensors as well as the wanted maximum uncertainty of the super sensor (dashed lines)

+

Figure 17: Uncertainty region of the two sensors as well as the wanted maximum uncertainty of the super sensor (dashed lines)

-
-

4.2 \(\mathcal{H}_\infty\) Synthesis

+
+

4.2 \(\mathcal{H}_\infty\) Synthesis

- +

-The generalized plant \(P_{\mathcal{H}_\infty}\) used for the \(\mathcal{H}_\infty\) Synthesis of the complementary filters is shown in Figure 19 and is described by Equation \eqref{eq:Hinf_generalized_plant}. +The generalized plant \(P_{\mathcal{H}_\infty}\) used for the \(\mathcal{H}_\infty\) Synthesis of the complementary filters is shown in Figure 18 and is described by Equation \eqref{eq:Hinf_generalized_plant}.

-
+

h_infinity_robust_fusion.png

-

Figure 19: Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters

+

Figure 18: Architecture used for \(\mathcal{H}_\infty\) synthesis of complementary filters

\begin{equation} \label{eq:Hinf_generalized_plant} @@ -906,48 +884,48 @@ The \(\mathcal{H}_\infty\) is successful as the \(\mathcal{H}_\infty\) norm of t

-The obtained complementary filters as well as the wanted upper bounds are shown in Figure 20. +The obtained complementary filters as well as the wanted upper bounds are shown in Figure 19.

-
+

hinf_comp_filters.png

-

Figure 20: Obtained complementary filters using the \(\mathcal{H}_\infty\) Synthesis

+

Figure 19: Obtained complementary filters using the \(\mathcal{H}_\infty\) Synthesis

-
-

4.3 Super sensor uncertainty

+
+

4.3 Super sensor uncertainty

-The super sensor dynamical uncertainty is displayed in Figure 21. +The super sensor dynamical uncertainty is displayed in Figure 20. It is confirmed that the super sensor dynamical uncertainty is less than the maximum allowed uncertainty defined by the norm of \(W_u(s)\).

-The frequency band where the super sensor has small dynamical uncertainty is larger than for the individual sensor. +The \(\mathcal{H}_\infty\) synthesis thus allows to design filters such that the super sensor has specified bounded uncertainty.

-
+

super_sensor_dynamical_uncertainty_Hinf.png

-

Figure 21: Super sensor dynamical uncertainty (solid curve) when using the \(\mathcal{H}_\infty\) Synthesis

+

Figure 20: Super sensor dynamical uncertainty (solid curve) when using the \(\mathcal{H}_\infty\) Synthesis

-
-

4.4 Super sensor noise

+
+

4.4 Super sensor noise

-We now compute the obtain Power Spectral Density of the super sensor’s noise (Figure 22). +We now compute the obtain Power Spectral Density of the super sensor’s noise (Figure 21).

-The obtained RMS of the super sensor noise in the \(\mathcal{H}_2\) and \(\mathcal{H}_\infty\) case are shown in Table 4. +The obtained RMS of the super sensor noise in the \(\mathcal{H}_2\) and \(\mathcal{H}_\infty\) case are shown in Table 4. As expected, the super sensor obtained from the \(\mathcal{H}_\infty\) synthesis is much noisier than the super sensor obtained from the \(\mathcal{H}_2\) synthesis.

@@ -960,13 +938,13 @@ PSD_Hinf = abs(squeeze(freqresp(N1*H1, freqs, 'Hz'))).^2 + ...
-
+

psd_sensors_hinf_synthesis.png

-

Figure 22: Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the

+

Figure 21: Power Spectral Density of the estimated \(\hat{x}\) using the two sensors alone and using the

- +
@@ -995,8 +973,8 @@ PSD_Hinf = abs(squeeze(freqresp(N1*H1, freqs, 'Hz'))).^2 + ... -
-

4.5 Conclusion

+
+

4.5 Conclusion

Using the \(\mathcal{H}_\infty\) synthesis, the dynamical uncertainty of the super sensor can be bounded to acceptable values. @@ -1009,189 +987,153 @@ However, the RMS of the super sensor noise is not optimized as it was the case w

-
-

5 Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis

+
+

5 Optimal and Robust Sensor Fusion: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis

- + +

+

+The (optima) \(\mathcal{H}_2\) synthesis and the (robust) \(\mathcal{H}_\infty\) synthesis are now combined to form an Optimal and Robust synthesis of complementary filters for sensor fusion.

-
+

+The sensor fusion architecture is shown in Figure 22 (\(\hat{G}_i\) are omitted for space reasons). +

+ + +

sensor_fusion_arch_full.png

-

Figure 23: Sensor fusion architecture with sensor dynamics uncertainty

+

Figure 22: Sensor fusion architecture with sensor dynamics uncertainty

The goal is to design complementary filters such that:

    -
  • the maximum uncertainty of the super sensor is bounded
  • +
  • the maximum uncertainty of the super sensor is bounded to acceptable values (defined by \(W_u(s)\))
  • the RMS value of the super sensor noise is minimized

-To do so, we can use the Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis. -

- -

-The Matlab function for that is h2hinfsyn (doc). +To do so, we can use the Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis presented in Section 5.1.

-
-

5.1 Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis

+
+

5.1 Mixed \(\mathcal{H}_2\) / \(\mathcal{H}_\infty\) Synthesis

-The synthesis architecture that is used here is shown in Figure 24. +

-The controller \(K\) is synthesized such that it: +The synthesis architecture that is used here is shown in Figure 23. +

+ +

+The filter \(H_2(s)\) is synthesized such that it:

    -
  • Keeps the \(\mathcal{H}_\infty\) norm \(G\) of the transfer function from \(w\) to \(z_\infty\) bellow some specified value
  • -
  • Keeps the \(\mathcal{H}_2\) norm \(H\) of the transfer function from \(w\) to \(z_2\) bellow some specified value
  • -
  • Minimizes a trade-off criterion of the form \(W_1 G^2 + W_2 H^2\) where \(W_1\) and \(W_2\) are specified values
  • +
  • keeps the \(\mathcal{H}_\infty\) norm of the transfer function from \(w\) to \(z_{\mathcal{H}_\infty}\) bellow some specified value
  • +
  • minimizes the \(\mathcal{H}_2\) norm of the transfer function from \(w\) to \(z_{\mathcal{H}_2}\)
-
+

mixed_h2_hinf_synthesis.png

-

Figure 24: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis

+

Figure 23: Mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis

-Here, we define \(P\) such that: +Let’s see that +with \(H_1(s)= 1 - H_2(s)\)

-\begin{align*} - \left\| \frac{z_\infty}{w} \right\|_\infty &= \left\| \begin{matrix}W_1(s) H_1(s) \\ W_2(s) H_2(s)\end{matrix} \right\|_\infty \\ - \left\| \frac{z_2}{w} \right\|_2 &= \left\| \begin{matrix}N_1(s) H_1(s) \\ N_2(s) H_2(s)\end{matrix} \right\|_2 -\end{align*} +\begin{align} + \left\| \frac{z_\infty}{w} \right\|_\infty &= \left\| \begin{matrix}H_1(s) W_1(s) W_u(s)\\ H_2(s) W_2(s) W_u(s)\end{matrix} \right\|_\infty \\ + \left\| \frac{z_2}{w} \right\|_2 &= \left\| \begin{matrix}H_1(s) N_1(s) \\ H_2(s) N_2(s)\end{matrix} \right\|_2 = \sigma_n +\end{align}

-Then: -

-
    -
  • we specify the maximum value for the \(\mathcal{H}_\infty\) norm between \(w\) and \(z_\infty\) to be \(1\)
  • -
  • we don’t specify any maximum value for the \(\mathcal{H}_2\) norm between \(w\) and \(z_2\)
  • -
  • we choose \(W_1 = 0\) and \(W_2 = 1\) such that the objective is to minimize the \(\mathcal{H}_2\) norm between \(w\) and \(z_2\)
  • -
- -

-The synthesis objective is to have: -\[ \left\| \frac{z_\infty}{w} \right\|_\infty = \left\| \begin{matrix}W_1(s) H_1(s) \\ W_2(s) H_2(s)\end{matrix} \right\|_\infty < 1 \] -and to minimize: -\[ \left\| \frac{z_2}{w} \right\|_2 = \left\| \begin{matrix}N_1(s) H_1(s) \\ N_2(s) H_2(s)\end{matrix} \right\|_2 \] -which is what we wanted. -

- -

-We define the generalized plant that will be used for the mixed synthesis. +The generalized plant \(P_{\mathcal{H}_2/\mathcal{H}_\infty}\) is defined below

W1u = ss(W2*Wu); W2u = ss(W1*Wu); % Weight on the uncertainty
 W1n = ss(N2); W2n = ss(N1); % Weight on the noise
 
-P = [W1u -W1u;
-     0    W2u;
-     W1n -W1n;
-     0    W2n;
-     1    0];
+P = [Wu*W1 -Wu*W1;
+     0      Wu*W2;
+     N1    -N1;
+     0      N2;
+     1      0];
 

-The mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is performed below. +And the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis is performed.

-
Nmeas = 1; Ncon = 1; Nz2 = 2;
+
[H2, ~] = h2hinfsyn(ss(P), 1, 1, 2, [0, 1], 'HINFMAX', 1, 'H2MAX', Inf, 'DKMAX', 100, 'TOL', 0.01, 'DISPLAY', 'on');
+
+
-[H1, ~, normz, ~] = h2hinfsyn(P, Nmeas, Ncon, Nz2, [0, 1], 'HINFMAX', 1, 'H2MAX', Inf, 'DKMAX', 100, 'TOL', 0.01, 'DISPLAY', 'on'); - -H2 = 1 - H1; +
+
H1 = 1 - H2;
 

-The obtained complementary filters are shown in Figure 25. +The obtained complementary filters are shown in Figure 24.

-
+

htwo_hinf_comp_filters.png

-

Figure 25: Obtained complementary filters after mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis

+

Figure 24: Obtained complementary filters after mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis

-
-

5.2 Obtained Super Sensor’s noise

+
+

5.2 Obtained Super Sensor’s noise

-The PSD and CPS of the super sensor’s noise are shown in Figure 26 and Figure 27 respectively. +The Power Spectral Density of the super sensor’s noise is shown in Figure 25. +

+ +

+A time domain simulation is shown in Figure 26. +

+ +

+The RMS values of the super sensor noise for the presented three synthesis are listed in Table 5.

-
PSD_S2     = abs(squeeze(freqresp(N2, freqs, 'Hz'))).^2;
-PSD_S1     = abs(squeeze(freqresp(N1, freqs, 'Hz'))).^2;
-PSD_H2Hinf = abs(squeeze(freqresp(N1*H1, freqs, 'Hz'))).^2+abs(squeeze(freqresp(N2*H2, freqs, 'Hz'))).^2;
-
-CPS_S2     = cumtrapz(freqs, PSD_S2);
-CPS_S1     = cumtrapz(freqs, PSD_S1);
-CPS_H2Hinf = cumtrapz(freqs, PSD_H2Hinf);
+
PSD_S2     = abs(squeeze(freqresp(N2,    freqs, 'Hz'))).^2;
+PSD_S1     = abs(squeeze(freqresp(N1,    freqs, 'Hz'))).^2;
+PSD_H2Hinf = abs(squeeze(freqresp(N1*H1, freqs, 'Hz'))).^2 + ...
+             abs(squeeze(freqresp(N2*H2, freqs, 'Hz'))).^2;
 
-
+

psd_sensors_htwo_hinf_synthesis.png

-

Figure 26: Power Spectral Density of the Super Sensor obtained with the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis

+

Figure 25: Power Spectral Density of the Super Sensor obtained with the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis

-
-

cps_h2_hinf_synthesis.png +

+

super_sensor_time_domain_h2_hinf.png

-

Figure 27: Cumulative Power Spectrum of the Super Sensor obtained with the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis

-
-
+

Figure 26: Noise of individual sensors and noise of the super sensor

-
-

5.3 Obtained Super Sensor’s Uncertainty

-
-

-The uncertainty on the super sensor’s dynamics is shown in Figure -

-
-
- -
-

5.4 Comparison Hinf H2 H2/Hinf

-
-
-
H2_filters      = load('./mat/H2_filters.mat',      'H2', 'H1');
-Hinf_filters    = load('./mat/Hinf_filters.mat',    'H2', 'H1');
-H2_Hinf_filters = load('./mat/H2_Hinf_filters.mat', 'H2', 'H1');
-
-
- -
-
PSD_H2 = abs(squeeze(freqresp(N2*H2_filters.H2, freqs, 'Hz'))).^2+abs(squeeze(freqresp(N1*H2_filters.H1, freqs, 'Hz'))).^2;
-CPS_H2 = cumtrapz(freqs, PSD_H2);
-
-PSD_Hinf = abs(squeeze(freqresp(N2*Hinf_filters.H2, freqs, 'Hz'))).^2+abs(squeeze(freqresp(N1*Hinf_filters.H1, freqs, 'Hz'))).^2;
-CPS_Hinf = cumtrapz(freqs, PSD_Hinf);
-
-PSD_H2Hinf = abs(squeeze(freqresp(N2*H2_Hinf_filters.H2, freqs, 'Hz'))).^2+abs(squeeze(freqresp(N1*H2_Hinf_filters.H1, freqs, 'Hz'))).^2;
-CPS_H2Hinf = cumtrapz(freqs, PSD_H2Hinf);
-
-
- -
Table 4: Comparison of the obtained RMS noise of the super sensor
+
@@ -1208,7 +1150,7 @@ CPS_H2Hinf = cumtrapz(freqs, PSD_H2Hinf); - + @@ -1218,18 +1160,34 @@ CPS_H2Hinf = cumtrapz(freqs, PSD_H2Hinf); - +
Table 5: Comparison of the obtained RMS noise of the super sensor
Optimal: \(\mathcal{H}_2\)0.00120.0027
Mixed: \(\mathcal{H}_2/\mathcal{H}_\infty\)0.0110.01
-
-

5.5 Conclusion

-
+
+

5.3 Obtained Super Sensor’s Uncertainty

+

-This synthesis methods allows both to: +The uncertainty on the super sensor’s dynamics is shown in Figure 27. +

+ + +
+

super_sensor_dynamical_uncertainty_Htwo_Hinf.png +

+

Figure 27: Super sensor dynamical uncertainty (solid curve) when using the mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) Synthesis

+
+
+
+ +
+

5.4 Conclusion

+
+

+The mixed \(\mathcal{H}_2/\mathcal{H}_\infty\) synthesis of the complementary filters allows to:

  • limit the dynamical uncertainty of the super sensor
  • @@ -1239,18 +1197,18 @@ This synthesis methods allows both to:
-
-

6 Matlab Functions

+
+

6 Matlab Functions

- +

-
-

6.1 createWeight

+
+

6.1 createWeight

- +

@@ -1302,11 +1260,11 @@ This Matlab function is accessible here.

-
-

6.2 plotMagUncertainty

+
+

6.2 plotMagUncertainty

- +

@@ -1357,11 +1315,11 @@ end

-
-

6.3 plotPhaseUncertainty

+
+

6.3 plotPhaseUncertainty

- +

@@ -1425,7 +1383,7 @@ end

Author: Thomas Dehaeze

-

Created: 2020-10-02 ven. 17:57

+

Created: 2020-10-02 ven. 18:25

diff --git a/matlab/index.org b/matlab/index.org index c452b6d..d9a2349 100644 --- a/matlab/index.org +++ b/matlab/index.org @@ -332,10 +332,6 @@ All the dynamical systems representing the sensors are saved for further use. PSD_S1 = abs(squeeze(freqresp(N1, freqs, 'Hz'))).^2; PSD_S2 = abs(squeeze(freqresp(N2, freqs, 'Hz'))).^2; PSD_H2 = abs(squeeze(freqresp(N1*H1, freqs, 'Hz'))).^2+abs(squeeze(freqresp(N2*H2, freqs, 'Hz'))).^2; - - CPS_S1 = cumtrapz(freqs, PSD_S1); - CPS_S2 = cumtrapz(freqs, PSD_S2); - CPS_H2 = cumtrapz(freqs, PSD_H2); #+end_src #+begin_src matlab @@ -603,20 +599,9 @@ The Power Spectral Density of the individual sensors' noise $\Phi_{n_1}, \Phi_{n abs(squeeze(freqresp(N2*H2, freqs, 'Hz'))).^2; #+end_src -The corresponding Cumulative Power Spectrum $\Gamma_{n_1}$, $\Gamma_{n_2}$ and $\Gamma_{n_{\mathcal{H}_2}}$ (cumulative integration of the PSD eqref:eq:CPS_definition) are computed below and shown in Figure [[fig:cps_h2_synthesis]]. -#+begin_src matlab - CPS_S1 = cumtrapz(freqs, PSD_S1); - CPS_S2 = cumtrapz(freqs, PSD_S2); - CPS_H2 = cumtrapz(freqs, PSD_H2); -#+end_src - -\begin{equation} - \Gamma_n (\omega) = \int_0^\omega \Phi_n(\nu) d\nu \label{eq:CPS_definition} -\end{equation} - The RMS value of the individual sensors and of the super sensor are listed in Table [[tab:rms_noise_H2]]. #+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*) - data2orgtable([sqrt(CPS_S1(end)); sqrt(CPS_S2(end)); sqrt(CPS_H2(end))], {'$\sigma_{n_1}$', '$\sigma_{n_2}$', '$\sigma_{n_{\mathcal{H}_2}}$'}, {'RMS value $[m/s]$'}, ' %.3f '); + data2orgtable([sqrt(trapz(freqs, PSD_S1)); sqrt(trapz(freqs, PSD_S2)); sqrt(trapz(freqs, PSD_H2))], {'$\sigma_{n_1}$', '$\sigma_{n_2}$', '$\sigma_{n_{\mathcal{H}_2}}$'}, {'RMS value $[m/s]$'}, ' %.3f '); #+end_src #+name: tab:rms_noise_H2 @@ -637,7 +622,7 @@ The RMS value of the individual sensors and of the super sensor are listed in Ta plot(freqs, PSD_S2, '-', 'DisplayName', '$\Phi_{n_2}$'); plot(freqs, PSD_H2, 'k-', 'DisplayName', '$\Phi_{n_{\mathcal{H}_2}}$'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - xlabel('Frequency [Hz]'); ylabel('Power Spectral Density [$(m/s)^2/Hz$]'); + xlabel('Frequency [Hz]'); ylabel('Power Spectral Density $\left[ \frac{(m/s)^2}{Hz} \right]$'); hold off; xlim([freqs(1), freqs(end)]); legend('location', 'northeast'); @@ -652,28 +637,6 @@ The RMS value of the individual sensors and of the super sensor are listed in Ta #+RESULTS: [[file:figs/psd_sensors_htwo_synthesis.png]] -#+begin_src matlab :exports none - figure; - hold on; - plot(freqs, CPS_S1, '-', 'DisplayName', '$\Gamma_{n_1}$'); - plot(freqs, CPS_S2, '-', 'DisplayName', '$\Gamma_{n_2}$'); - plot(freqs, CPS_H2, 'k-', 'DisplayName', '$\Gamma_{n_{\mathcal{H}_2}}$'); - set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); - xlabel('Frequency [Hz]'); ylabel('Cumulative Power Spectrum $[(m/s)^2]$'); - hold off; - xlim([2*freqs(1), freqs(end)]); - legend('location', 'southeast'); -#+end_src - -#+begin_src matlab :tangle no :exports results :results file replace - exportFig('figs/cps_h2_synthesis.pdf', 'width', 'wide', 'height', 'normal'); -#+end_src - -#+name: fig:cps_h2_synthesis -#+caption: Cumulative Power Spectrum of individual sensors and super sensor using the $\mathcal{H}_2$ synthesis -#+RESULTS: -[[file:figs/cps_h2_synthesis.png]] - A time domain simulation is now performed. The measured velocity $x$ is set to be a sweep sine with an amplitude of $0.1\ [m/s]$. The velocity estimates from the two sensors and from the super sensors are shown in Figure [[fig:super_sensor_time_domain_h2]]. @@ -1109,13 +1072,6 @@ As expected, the super sensor obtained from the $\mathcal{H}_\infty$ synthesis i PSD_H2 = abs(squeeze(freqresp(N1*H2_filters.H1, freqs, 'Hz'))).^2 + ... abs(squeeze(freqresp(N2*H2_filters.H2, freqs, 'Hz'))).^2; - CPS_H2 = cumtrapz(freqs, PSD_H2); -#+end_src - -#+begin_src matlab :exports none - CPS_S2 = cumtrapz(freqs, PSD_S2); - CPS_S1 = cumtrapz(freqs, PSD_S1); - CPS_Hinf = cumtrapz(freqs, PSD_Hinf); #+end_src #+begin_src matlab :exports none @@ -1126,7 +1082,7 @@ As expected, the super sensor obtained from the $\mathcal{H}_\infty$ synthesis i plot(freqs, PSD_H2, 'k-', 'DisplayName', '$\Phi_{n_{\mathcal{H}_2}}$'); plot(freqs, PSD_Hinf, 'k--', 'DisplayName', '$\Phi_{n_{\mathcal{H}_\infty}}$'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); - xlabel('Frequency [Hz]'); ylabel('Power Spectral Density [$(m/s)^2/Hz$]'); + xlabel('Frequency [Hz]'); ylabel('Power Spectral Density $\left[ \frac{(m/s)^2}{Hz} \right]$'); hold off; xlim([freqs(1), freqs(end)]); legend('location', 'northeast'); @@ -1142,7 +1098,7 @@ As expected, the super sensor obtained from the $\mathcal{H}_\infty$ synthesis i [[file:figs/psd_sensors_hinf_synthesis.png]] #+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*) - data2orgtable([sqrt(CPS_H2(end)), sqrt(CPS_Hinf(end))]', {'Optimal: $\mathcal{H}_2$', 'Robust: $\mathcal{H}_\infty$'}, {'RMS [m/s]'}, ' %.1e '); + data2orgtable([sqrt(trapz(freqs, PSD_H2)), sqrt(trapz(freqs, PSD_Hinf))]', {'Optimal: $\mathcal{H}_2$', 'Robust: $\mathcal{H}_\infty$'}, {'RMS [m/s]'}, ' %.1e '); #+end_src #+name: tab:rms_noise_comp_H2_Hinf @@ -1168,17 +1124,19 @@ However, the RMS of the super sensor noise is not optimized as it was the case w <> ** Introduction :ignore: +The (optima) $\mathcal{H}_2$ synthesis and the (robust) $\mathcal{H}_\infty$ synthesis are now combined to form an Optimal and Robust synthesis of complementary filters for sensor fusion. + +The sensor fusion architecture is shown in Figure [[fig:sensor_fusion_arch_full]] ($\hat{G}_i$ are omitted for space reasons). + #+name: fig:sensor_fusion_arch_full #+caption: Sensor fusion architecture with sensor dynamics uncertainty [[file:figs-tikz/sensor_fusion_arch_full.png]] The goal is to design complementary filters such that: -- the maximum uncertainty of the super sensor is bounded +- the maximum uncertainty of the super sensor is bounded to acceptable values (defined by $W_u(s)$) - the RMS value of the super sensor noise is minimized -To do so, we can use the Mixed $\mathcal{H}_2$ / $\mathcal{H}_\infty$ Synthesis. - -The Matlab function for that is =h2hinfsyn= ([[https://fr.mathworks.com/help/robust/ref/h2hinfsyn.html][doc]]). +To do so, we can use the Mixed $\mathcal{H}_2/\mathcal{H}_\infty$ Synthesis presented in Section [[sec:H2_Hinf_synthesis]]. ** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) @@ -1195,53 +1153,44 @@ The Matlab function for that is =h2hinfsyn= ([[https://fr.mathworks.com/help/rob #+end_src ** Mixed $\mathcal{H}_2$ / $\mathcal{H}_\infty$ Synthesis +<> + The synthesis architecture that is used here is shown in Figure [[fig:mixed_h2_hinf_synthesis]]. -The controller $K$ is synthesized such that it: -- Keeps the $\mathcal{H}_\infty$ norm $G$ of the transfer function from $w$ to $z_\infty$ bellow some specified value -- Keeps the $\mathcal{H}_2$ norm $H$ of the transfer function from $w$ to $z_2$ bellow some specified value -- Minimizes a trade-off criterion of the form $W_1 G^2 + W_2 H^2$ where $W_1$ and $W_2$ are specified values +The filter $H_2(s)$ is synthesized such that it: +- keeps the $\mathcal{H}_\infty$ norm of the transfer function from $w$ to $z_{\mathcal{H}_\infty}$ bellow some specified value +- minimizes the $\mathcal{H}_2$ norm of the transfer function from $w$ to $z_{\mathcal{H}_2}$ #+name: fig:mixed_h2_hinf_synthesis #+caption: Mixed $\mathcal{H}_2/\mathcal{H}_\infty$ Synthesis [[file:figs-tikz/mixed_h2_hinf_synthesis.png]] -Here, we define $P$ such that: -\begin{align*} - \left\| \frac{z_\infty}{w} \right\|_\infty &= \left\| \begin{matrix}W_1(s) H_1(s) \\ W_2(s) H_2(s)\end{matrix} \right\|_\infty \\ - \left\| \frac{z_2}{w} \right\|_2 &= \left\| \begin{matrix}N_1(s) H_1(s) \\ N_2(s) H_2(s)\end{matrix} \right\|_2 -\end{align*} +Let's see that +with $H_1(s)= 1 - H_2(s)$ +\begin{align} + \left\| \frac{z_\infty}{w} \right\|_\infty &= \left\| \begin{matrix}H_1(s) W_1(s) W_u(s)\\ H_2(s) W_2(s) W_u(s)\end{matrix} \right\|_\infty \\ + \left\| \frac{z_2}{w} \right\|_2 &= \left\| \begin{matrix}H_1(s) N_1(s) \\ H_2(s) N_2(s)\end{matrix} \right\|_2 = \sigma_n +\end{align} -Then: -- we specify the maximum value for the $\mathcal{H}_\infty$ norm between $w$ and $z_\infty$ to be $1$ -- we don't specify any maximum value for the $\mathcal{H}_2$ norm between $w$ and $z_2$ -- we choose $W_1 = 0$ and $W_2 = 1$ such that the objective is to minimize the $\mathcal{H}_2$ norm between $w$ and $z_2$ - -The synthesis objective is to have: -\[ \left\| \frac{z_\infty}{w} \right\|_\infty = \left\| \begin{matrix}W_1(s) H_1(s) \\ W_2(s) H_2(s)\end{matrix} \right\|_\infty < 1 \] -and to minimize: -\[ \left\| \frac{z_2}{w} \right\|_2 = \left\| \begin{matrix}N_1(s) H_1(s) \\ N_2(s) H_2(s)\end{matrix} \right\|_2 \] -which is what we wanted. - -We define the generalized plant that will be used for the mixed synthesis. +The generalized plant $P_{\mathcal{H}_2/\mathcal{H}_\infty}$ is defined below #+begin_src matlab W1u = ss(W2*Wu); W2u = ss(W1*Wu); % Weight on the uncertainty W1n = ss(N2); W2n = ss(N1); % Weight on the noise - P = [W1u -W1u; - 0 W2u; - W1n -W1n; - 0 W2n; - 1 0]; + P = [Wu*W1 -Wu*W1; + 0 Wu*W2; + N1 -N1; + 0 N2; + 1 0]; #+end_src -The mixed $\mathcal{H}_2/\mathcal{H}_\infty$ synthesis is performed below. +And the mixed $\mathcal{H}_2/\mathcal{H}_\infty$ synthesis is performed. #+begin_src matlab - Nmeas = 1; Ncon = 1; Nz2 = 2; + [H2, ~] = h2hinfsyn(ss(P), 1, 1, 2, [0, 1], 'HINFMAX', 1, 'H2MAX', Inf, 'DKMAX', 100, 'TOL', 0.01, 'DISPLAY', 'on'); +#+end_src - [H1, ~, normz, ~] = h2hinfsyn(P, Nmeas, Ncon, Nz2, [0, 1], 'HINFMAX', 1, 'H2MAX', Inf, 'DKMAX', 100, 'TOL', 0.01, 'DISPLAY', 'on'); - - H2 = 1 - H1; +#+begin_src matlab + H1 = 1 - H2; #+end_src #+begin_src matlab :exports none @@ -1256,15 +1205,12 @@ The obtained complementary filters are shown in Figure [[fig:htwo_hinf_comp_filt ax1 = subplot(2,1,1); hold on; - set(gca,'ColorOrderIndex',1) - plot(freqs, 1./abs(squeeze(freqresp(W2, freqs, 'Hz'))), '--', 'DisplayName', '$W_1$'); - set(gca,'ColorOrderIndex',2) - plot(freqs, 1./abs(squeeze(freqresp(W1, freqs, 'Hz'))), '--', 'DisplayName', '$W_2$'); + plot(freqs, 1./abs(squeeze(freqresp(Wu*W1, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_1|$'); + plot(freqs, 1./abs(squeeze(freqresp(Wu*W2, freqs, 'Hz'))), '--', 'DisplayName', '$1/|W_uW_2|$'); set(gca,'ColorOrderIndex',1) - plot(freqs, abs(squeeze(freqresp(H2, freqs, 'Hz'))), '-', 'DisplayName', '$H_1$'); - set(gca,'ColorOrderIndex',2) - plot(freqs, abs(squeeze(freqresp(H1, freqs, 'Hz'))), '-', 'DisplayName', '$H_2$'); + plot(freqs, abs(squeeze(freqresp(H1, freqs, 'Hz'))), '-', 'DisplayName', '$H_1$'); + plot(freqs, abs(squeeze(freqresp(H2, freqs, 'Hz'))), '-', 'DisplayName', '$H_2$'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); @@ -1275,10 +1221,8 @@ The obtained complementary filters are shown in Figure [[fig:htwo_hinf_comp_filt ax2 = subplot(2,1,2); hold on; - set(gca,'ColorOrderIndex',1) - plot(freqs, 180/pi*phase(squeeze(freqresp(H2, freqs, 'Hz'))), '-'); - set(gca,'ColorOrderIndex',2) plot(freqs, 180/pi*phase(squeeze(freqresp(H1, freqs, 'Hz'))), '-'); + plot(freqs, 180/pi*phase(squeeze(freqresp(H2, freqs, 'Hz'))), '-'); hold off; xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); set(gca, 'XScale', 'log'); @@ -1286,7 +1230,6 @@ The obtained complementary filters are shown in Figure [[fig:htwo_hinf_comp_filt linkaxes([ax1,ax2],'x'); xlim([freqs(1), freqs(end)]); - xticks([0.1, 1, 10, 100, 1000]); #+end_src #+begin_src matlab :tangle no :exports results :results file replace @@ -1299,12 +1242,17 @@ The obtained complementary filters are shown in Figure [[fig:htwo_hinf_comp_filt [[file:figs/htwo_hinf_comp_filters.png]] ** Obtained Super Sensor's noise -The PSD and CPS of the super sensor's noise are shown in Figure [[fig:psd_sensors_htwo_hinf_synthesis]] and Figure [[fig:cps_h2_hinf_synthesis]] respectively. +The Power Spectral Density of the super sensor's noise is shown in Figure [[fig:psd_sensors_htwo_hinf_synthesis]]. -#+begin_src matlab :exports none - % The filters are loaded - H2_filters = load('./mat/H2_filters.mat', 'H2', 'H1'); - Hinf_filters = load('./mat/Hinf_filters.mat', 'H2', 'H1'); +A time domain simulation is shown in Figure [[fig:super_sensor_time_domain_h2_hinf]]. + +The RMS values of the super sensor noise for the presented three synthesis are listed in Table [[tab:rms_noise_comp]]. + +#+begin_src matlab + PSD_S2 = abs(squeeze(freqresp(N2, freqs, 'Hz'))).^2; + PSD_S1 = abs(squeeze(freqresp(N1, freqs, 'Hz'))).^2; + PSD_H2Hinf = abs(squeeze(freqresp(N1*H1, freqs, 'Hz'))).^2 + ... + abs(squeeze(freqresp(N2*H2, freqs, 'Hz'))).^2; #+end_src #+begin_src matlab :exports none @@ -1312,7 +1260,6 @@ The PSD and CPS of the super sensor's noise are shown in Figure [[fig:psd_sensor PSD_H2 = abs(squeeze(freqresp(N1*H2_filters.H1, freqs, 'Hz'))).^2 + ... abs(squeeze(freqresp(N2*H2_filters.H2, freqs, 'Hz'))).^2; - CPS_H2 = cumtrapz(freqs, PSD_H2); #+end_src #+begin_src matlab :exports none @@ -1320,17 +1267,6 @@ The PSD and CPS of the super sensor's noise are shown in Figure [[fig:psd_sensor PSD_Hinf = abs(squeeze(freqresp(N1*Hinf_filters.H1, freqs, 'Hz'))).^2 + ... abs(squeeze(freqresp(N2*Hinf_filters.H2, freqs, 'Hz'))).^2; - CPS_Hinf = cumtrapz(freqs, PSD_Hinf); -#+end_src - -#+begin_src matlab - PSD_S2 = abs(squeeze(freqresp(N2, freqs, 'Hz'))).^2; - PSD_S1 = abs(squeeze(freqresp(N1, freqs, 'Hz'))).^2; - PSD_H2Hinf = abs(squeeze(freqresp(N1*H1, freqs, 'Hz'))).^2+abs(squeeze(freqresp(N2*H2, freqs, 'Hz'))).^2; - - CPS_S2 = cumtrapz(freqs, PSD_S2); - CPS_S1 = cumtrapz(freqs, PSD_S1); - CPS_H2Hinf = cumtrapz(freqs, PSD_H2Hinf); #+end_src #+begin_src matlab :exports none @@ -1357,32 +1293,63 @@ The PSD and CPS of the super sensor's noise are shown in Figure [[fig:psd_sensor #+RESULTS: [[file:figs/psd_sensors_htwo_hinf_synthesis.png]] +#+begin_src matlab :exports none + Fs = 1e4; % Sampling Frequency [Hz] + Ts = 1/Fs; % Sampling Time [s] + + t = 0:Ts:2; % Time Vector [s] + + v = 0.1*sin((10*t).*t)'; % Velocity measured [m/s] + + % Generate noises in velocity corresponding to sensor 1 and 2: + n1 = lsim(N1, sqrt(Fs/2)*randn(length(t), 1), t); + n2 = lsim(N2, sqrt(Fs/2)*randn(length(t), 1), t); +#+end_src + #+begin_src matlab :exports none figure; hold on; - plot(freqs, CPS_S1, '-', 'DisplayName', '$\Gamma_{n_1}$'); - plot(freqs, CPS_S2, '-', 'DisplayName', '$\Gamma_{n_2}$'); - plot(freqs, CPS_H2, 'k-', 'DisplayName', '$\Gamma_{n_{\mathcal{H}_2}}$'); - plot(freqs, CPS_Hinf, 'k--', 'DisplayName', '$\Gamma_{n_{\mathcal{H}_\infty}}$'); - plot(freqs, CPS_H2Hinf, 'k-.', 'DisplayName', '$\Gamma_{n_{\mathcal{H}_2/\mathcal{H}_\infty}}$'); - set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); - xlabel('Frequency [Hz]'); ylabel('Cumulative Power Spectrum'); + set(gca,'ColorOrderIndex',2) + plot(t, v + n2, 'DisplayName', '$\hat{x}_2$'); + set(gca,'ColorOrderIndex',1) + plot(t, v + n1, 'DisplayName', '$\hat{x}_1$'); + set(gca,'ColorOrderIndex',3) + plot(t, v + (lsim(H1, n1, t) + lsim(H2, n2, t)), 'DisplayName', '$\hat{x}$'); + plot(t, v, 'k--', 'DisplayName', '$x$'); hold off; - xlim([2*freqs(1), freqs(end)]); - legend('location', 'southeast'); + xlabel('Time [s]'); ylabel('Velocity [m/s]'); + legend('location', 'southwest'); + ylim([-0.3, 0.3]); #+end_src #+begin_src matlab :tangle no :exports results :results file replace - exportFig('figs/cps_h2_hinf_synthesis.pdf', 'width', 'wide', 'height', 'normal'); + exportFig('figs/super_sensor_time_domain_h2_hinf.pdf', 'width', 'wide', 'height', 'normal'); #+end_src -#+name: fig:cps_h2_hinf_synthesis -#+CAPTION: Cumulative Power Spectrum of the Super Sensor obtained with the mixed $\mathcal{H}_2/\mathcal{H}_\infty$ synthesis +#+name: fig:super_sensor_time_domain_h2_hinf +#+caption: Noise of individual sensors and noise of the super sensor #+RESULTS: -[[file:figs/cps_h2_hinf_synthesis.png]] +[[file:figs/super_sensor_time_domain_h2_hinf.png]] + +#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*) + data2orgtable([sqrt(trapz(freqs, PSD_H2)), sqrt(trapz(freqs, PSD_Hinf)), sqrt(trapz(freqs, PSD_H2Hinf))]', ... + {'Optimal: $\mathcal{H}_2$', 'Robust: $\mathcal{H}_\infty$', 'Mixed: $\mathcal{H}_2/\mathcal{H}_\infty$'}, ... + {'RMS [m/s]'}, ' %.1e '); +#+end_src + +#+name: tab:rms_noise_comp +#+caption: Comparison of the obtained RMS noise of the super sensor +#+attr_latex: :environment tabular :align cc +#+attr_latex: :center t :booktabs t :float t +#+RESULTS: +| | RMS [m/s] | +|-------------------------------------------+-----------| +| Optimal: $\mathcal{H}_2$ | 0.0027 | +| Robust: $\mathcal{H}_\infty$ | 0.041 | +| Mixed: $\mathcal{H}_2/\mathcal{H}_\infty$ | 0.01 | ** Obtained Super Sensor's Uncertainty -The uncertainty on the super sensor's dynamics is shown in Figure +The uncertainty on the super sensor's dynamics is shown in Figure [[fig:super_sensor_dynamical_uncertainty_Htwo_Hinf]]. #+begin_src matlab :exports none Dphi_Wu = 180/pi*asin(abs(squeeze(freqresp(inv(Wu), freqs, 'Hz')))); @@ -1395,18 +1362,21 @@ The uncertainty on the super sensor's dynamics is shown in Figure % Magnitude ax1 = subplot(2,1,1); hold on; - plotMagUncertainty(W1, freqs, 'color_i', 1); - plotMagUncertainty(W2, freqs, 'color_i', 2); - p = patch([freqs flip(freqs)], [1 + abs(squeeze(freqresp(W2*H2, freqs, 'Hz')))+abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))); flip(max(1 - abs(squeeze(freqresp(W2*H2, freqs, 'Hz')))-abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))), 0.001))], 'w'); - p.EdgeColor = 'black'; p.FaceAlpha = 0; - plot(freqs, 1 + abs(squeeze(freqresp(inv(Wu), freqs, 'Hz'))), 'r--', ... - 'DisplayName', '$W_u$') - plot(freqs, 1 - abs(squeeze(freqresp(inv(Wu), freqs, 'Hz'))), 'r--', ... + plotMagUncertainty(W1, freqs, 'color_i', 1, 'DisplayName', '$1 + W_1 \Delta_1$'); + plotMagUncertainty(W2, freqs, 'color_i', 2, 'DisplayName', '$1 + W_2 \Delta_2$'); + plot(freqs, 1 + abs(squeeze(freqresp(W2*H2, freqs, 'Hz')))+abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))), 'k-', ... + 'DisplayName', '$1 + W_1 \Delta_1 + W_2 \Delta_2$') + plot(freqs, max(1 - abs(squeeze(freqresp(W2*H2, freqs, 'Hz')))-abs(squeeze(freqresp(W1*H1, freqs, 'Hz'))), 0.001), 'k-', ... + 'HandleVisibility', 'off'); + plot(freqs, 1 + abs(squeeze(freqresp(inv(Wu), freqs, 'Hz'))), 'k--', ... + 'DisplayName', '$1 + W_u^{-1}\Delta$') + plot(freqs, 1 - abs(squeeze(freqresp(inv(Wu), freqs, 'Hz'))), 'k--', ... 'HandleVisibility', 'off') set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XTickLabel',[]); ylabel('Magnitude'); ylim([1e-2, 1e1]); + legend('location', 'southeast'); hold off; % Phase @@ -1414,10 +1384,10 @@ The uncertainty on the super sensor's dynamics is shown in Figure hold on; plotPhaseUncertainty(W1, freqs, 'color_i', 1); plotPhaseUncertainty(W2, freqs, 'color_i', 2); - p = patch([freqs flip(freqs)], [Dphi_ss; flip(-Dphi_ss)], 'w'); - p.EdgeColor = 'black'; p.FaceAlpha = 0; - plot(freqs, Dphi_Wu, 'r--'); - plot(freqs, -Dphi_Wu, 'r--'); + plot(freqs, Dphi_ss, 'k-'); + plot(freqs, -Dphi_ss, 'k-'); + plot(freqs, Dphi_Wu, 'k--'); + plot(freqs, -Dphi_Wu, 'k--'); set(gca,'xscale','log'); yticks(-180:90:180); ylim([-180 180]); @@ -1427,41 +1397,17 @@ The uncertainty on the super sensor's dynamics is shown in Figure xlim([freqs(1), freqs(end)]); #+end_src -** Comparison Hinf H2 H2/Hinf -#+begin_src matlab - H2_filters = load('./mat/H2_filters.mat', 'H2', 'H1'); - Hinf_filters = load('./mat/Hinf_filters.mat', 'H2', 'H1'); - H2_Hinf_filters = load('./mat/H2_Hinf_filters.mat', 'H2', 'H1'); +#+begin_src matlab :tangle no :exports results :results file replace + exportFig('figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.pdf', 'width', 'full', 'height', 'full'); #+end_src -#+begin_src matlab - PSD_H2 = abs(squeeze(freqresp(N2*H2_filters.H2, freqs, 'Hz'))).^2+abs(squeeze(freqresp(N1*H2_filters.H1, freqs, 'Hz'))).^2; - CPS_H2 = cumtrapz(freqs, PSD_H2); - - PSD_Hinf = abs(squeeze(freqresp(N2*Hinf_filters.H2, freqs, 'Hz'))).^2+abs(squeeze(freqresp(N1*Hinf_filters.H1, freqs, 'Hz'))).^2; - CPS_Hinf = cumtrapz(freqs, PSD_Hinf); - - PSD_H2Hinf = abs(squeeze(freqresp(N2*H2_Hinf_filters.H2, freqs, 'Hz'))).^2+abs(squeeze(freqresp(N1*H2_Hinf_filters.H1, freqs, 'Hz'))).^2; - CPS_H2Hinf = cumtrapz(freqs, PSD_H2Hinf); -#+end_src - -#+begin_src matlab :exports results :results value table replace :tangle no :post addhdr(*this*) - data2orgtable([sqrt(CPS_H2(end)), sqrt(CPS_Hinf(end)), sqrt(CPS_H2Hinf(end))]', {'Optimal: $\mathcal{H}_2$', 'Robust: $\mathcal{H}_\infty$', 'Mixed: $\mathcal{H}_2/\mathcal{H}_\infty$'}, {'RMS [m/s]'}, ' %.1e '); -#+end_src - -#+name: tab:rms_noise_comp -#+caption: Comparison of the obtained RMS noise of the super sensor -#+attr_latex: :environment tabular :align cc -#+attr_latex: :center t :booktabs t :float t +#+name: fig:super_sensor_dynamical_uncertainty_Htwo_Hinf +#+caption: Super sensor dynamical uncertainty (solid curve) when using the mixed $\mathcal{H}_2/\mathcal{H}_\infty$ Synthesis #+RESULTS: -| | RMS [m/s] | -|-------------------------------------------+-----------| -| Optimal: $\mathcal{H}_2$ | 0.0012 | -| Robust: $\mathcal{H}_\infty$ | 0.041 | -| Mixed: $\mathcal{H}_2/\mathcal{H}_\infty$ | 0.011 | +[[file:figs/super_sensor_dynamical_uncertainty_Htwo_Hinf.png]] ** Conclusion -This synthesis methods allows both to: +The mixed $\mathcal{H}_2/\mathcal{H}_\infty$ synthesis of the complementary filters allows to: - limit the dynamical uncertainty of the super sensor - minimize the RMS value of the estimation