From 583b28d45bf978832be024276fda8fdfe571c447 Mon Sep 17 00:00:00 2001 From: Alexey Kardashevskiy Date: Mon, 14 Jan 2019 18:03:16 +1100 Subject: [PATCH 01/37] pseries: Update SLOF firmware image This includes spapr-vio and usb-storage fixes, phandles fix for NVLink2 pass through support and other compile improvements. The full list of changes is: * vio-vscsi: Support multiple channels / buses * board-qemu/slof/vio-vscsi: Scan up to 64 SCSI IDs * usb/storage: Implement block write support * usb/storage: Invert the logic of the IF-statements * fdt: Fix phandles for NVLink/NVLink2 * fdt: Factor out code to replace a phandle in place * pci: use appropriate base class ids * Makefile: Set a proper DRIVER_NAME when building from a git tree * romfs/tools: Silence more compiler warnings with GCC 8.1 * romfs/tools: Silence GCC 8.1 compiler warning with FLASHFS_MAGIC * romfs/tools: Remove superfluous union around the rom header struct * make.rules: Compile SLOF with -fno-asynchronous-unwind-tables Signed-off-by: Alexey Kardashevskiy Signed-off-by: David Gibson --- pc-bios/README | 2 +- pc-bios/slof.bin | Bin 974544 -> 926392 bytes roms/SLOF | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/README b/pc-bios/README index 20f7c33c24..d421cb3f1f 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -17,7 +17,7 @@ - SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware implementation for certain IBM POWER hardware. The sources are at https://github.com/aik/SLOF, and the image currently in qemu is - built from git tag qemu-slof-20180702. + built from git tag qemu-slof-20190114. - sgabios (the Serial Graphics Adapter option ROM) provides a means for legacy x86 software to communicate with an attached serial console as diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin index 6274a6739187a9cd12a50b1bda2313c9f0d481a5..65db1a6e579839cfd05da7f71c246fa0251c2fc0 100644 GIT binary patch delta 322094 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

;FH588(41%kh~}kDgdwbp8KjvKR0&*nCfyj( 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 z zjuv3+K>^ReCu|P#D6$0x(=U7mc@P?4=AZ%wNnR9W4oDv;0Fdn80LsT8aZrhjtR9qL zK;ob*f~+2t072rQgn+Cblvo+~rXT&nCCIe_6e}P_6Q&P0g_Q7)=>^}o z#OgOdL&^dzq`o-C}$^tDt3PB493$*mO5gLdVXz3BWg&yPxv_Rbm4O9zIU?4@8;1-A@LVs`xN^OLO zqy;EZBP*(z-tdD<%xfbwlUjh%5VAZpW-LKwA%_$+L@d!lUXW$Fz)vnQsg0l*W8f3E z1ceZic>+hKJN)Dl^V$RrX-l+BF97WTTY>@&$-YgX(h_7ICcaWZx!Gng_|F z#e{&&v|k|WKoJU(289)pc7ABpY6*%PWb2@DUn7PHkGiP45Aip9> zZUyBk20me1P#7Ya$q6Y3gl$1yMN+>FWH?B@!?au6V)eG5AVZdh1evfcD5#N)Zyo{_K8g#ah5(9CA2KbbCkU<-!3*6xrW3oLleZfs` zvFXoPxCQFBL5l=iQ2Zd-!U@gtwxBGGYzr(?&4V2m$_=N31zDH8; z3Ch|Ge8$3dpwLCO0AwLZ16t_9CW7oBXKqiw#>$P@w_=AL)-R^9af@?8L(mSgNM*Vi z8_2^Thl9)q70^fyg02@6I|vGHB=>Mb3=uns7Tnwr4~QK^DoV|(9Rvj|vN@3G zF%~-riXUVNP>uj;0Hsl6aZq6e65lc1;Xb!$z1Tre&?74V*#J@i$|K0)AcH{SXnBMi zq#q;>iV|e?Aax*dP!hl<4vG=x=~wP^3wnzk1Z6N}MIb&%GbmV*#KF}R1E1I-P^Q2p z&N1EK0k^2M*db7^L(1Xc6GTB8C8j4p6o3*4k^=BavLFQ-(m_yjs$rN z$pr8@b|4czOm~1N02zs_0F+l5_{0t~OfLW{I1Ca%QUE@>5Trn0`T~doP)H)hrXZ;9 z11U(De&G?fD6`n%1~8*u>@dhX$SR?U>@X-1B8!6(7sv!qcp!;`FKS@m6FY*Ie!yoR zfW$$m0!clzgCTYV>_VhtUchH@fi!@MU1SZQR09$R#T>FYs3-x6gQ6Ho9DEW8NF0>A zki}u@k)sD>zbGWbiycApnJ6@09|6S%vOypV8TiDGf-(fMI5dopq7{gupy&pv2m2T? zdj{%B*E4`5Kn_4MNDLIaAaPJ)MivJZ%^-2Kl1~g|AxIo8D#1sCfW$!#LpBE*5=Sq9 zjzmM2067Gt0TkEB;-DIjflurhS{#E9{{V@D9EPkOR*r zK-mLS27~YMVqjnZ$2|iBxc%e=vK8WE@U#vCpHMp}(J?SEwF^uP6rb+@jGIRl)Mf_N zk06Cms}ZU|f($GUQ$SXmdUIR?2PgxhKPZMk*21iV(V&RrlS=s%`M`QW)KCINDs(}=?|;;jN~Bx(o+ICT-U`j*xO3MsWc~BAvr%cH!*K|Vl|&UJ5t{pCl)BAlolu$D%ja6q#7tB=A|frfd*JDlGdcsVg;xM<20~33k4e+ zuv#zy*PsBkOOwmOz`#HupR-6IAB>Er_gv?5o3@@WYy-clhM$k;S;2^YhX& z(@Tp|QxwWGOERn!^z`(Li<0$|Vd4t9WeU2wAUWNF?DVqKqTalR)lE%u6p#OiwMgP1Z?FNz_T!*49bS*GbVy%P%S^O3c&A zPs&OL5xU9R+6ub51x2Z8nH9Dm8(?;)CnxLXCT8Uq=|bJCo1d3csi3P{Ur>~vUX+-t zTU?q3(xht+HUJ_9H3)0?=_1@$oRJ6$F@$?F^RiQmbdyRmb5e9OQxtS{b25`sD^inF zGK;{j0>uo}W%c=`CAyh;$vLGdsVTbYsU;<;6(tCxOEQX56H|(93-XIIDMB{eOvG^YgQq2dy-3Q*$9OD#uePR}dVEzQd;EKSwTPs&P72Kgo>vltSS znMsAEi7B~>B^e63x**Yda0DZSb&E?23i69UnxH-_$SFK0cP zm!#(ER^?08<6uRljwuz-B`3TYC)a25l)Pfw41)$KX*G(=cwFSqp1ws`hpMruN zoO3{FFf*?d6agSNgPfdOnp2XAVjox}u_zhlGmxtC)S{yNBA7FC^7GPlQ}RneGKNMF z>*~SblAMv6oSm7MZd;U^lbToz@)$VvKpcjibrp1VGxCc|a7sd4k6oH81e~H2a`RJC zbF35!Vn7Lt3sj^)GX^9RD`?=$(wYif?tY;PIVlPnAlfN2ue2mHr&u8^zeoY1PgB82 h&)8tP?ma%m>23G;Os2ctj`G!_bw!6W-}mz!qnVSgUO1FvTO`Y=36AMIG{Ea@Ho_;}wPi(S2 zqdgZRvjbQIBlE`RGwlT|lgty7jM5Sfj0}uT3{z4!PjJ}EWL}!1pkSn6WMF8aU}$D# zXkle!#LK1N7OoJMT2!2wpQm7}ke*qhi=ny3c@wKx!ws7T28M(d28N0j_G2k6Aa>J+ z$u6GiEQ|??43qOcbs&uSp300ZlMj1lF)~cn^J+=^cEf`~+&6)NfuUv>(=wZ+|NkqN zFeq6hfBWFUAZ`j4-;FH(ox_7cTox?8$q7mQcLfgyaaOSSW)yJ?4+gQflO?=W85t(q zdF$7MY~o;A_Pg=_gWm`Lf2gUEuK2z1|BK%b|Np3&r(9vNfPuj#>Hj~ArvLvf zTHdYs!N?%+L-D`j4@U+K4+fP~kS+R)85kVqG49ac$H3q?kMV;2zyJGf7BDze|7U(; z(ZIk^|M+)>2ZLxNNUg2X|NoYnH47{q7#Qk7UbIO5KH;Y)1A_;H7$-;pNUZ+J?+S~B z3==Gpzwhw=|0@$DUXvnS>CnV@<)tFS4Esg@|643%D6ro9{R2pC{o>aZzdIQ?y#N2Q z1*wHP=*f$P3=JVUw_=?!PRAeZyIglCva_GxMhKBm%pDXGQf38S4<`@79;aW}R zWiK2VD*PH)6kj+pX!tNN>eMi>tg%pJcraaHHlqwIm?AtFL^?rMdjJ3G3Zg;b?J)13 z1=#B3?+G3ZB496g|No}~l80fa{0R>R5l@g9%xjK~|5-qCKN=Y}SS0_@fSLcIkzs@P z|9>w)Y7-b3;z5bvKRC>jzn=hwxd(#?BS;by7oe~Qg$KxckU01e3z7rHf#bY?Dj*B$ zm%Og9NdErAgFzVPK#&qpK4ffQnOx+j$(TENj^7s+kjUf-{>F@nlaKiO*KYu{`KSoJ#@m>lOZNOUSQuxNKOFgng-$kB#~xh%A25U|wz|1VUN#SSbtm!V;y zJ%f;?=KnWHVl^H03@jFk3=OXz{{P|Ez@Pwf2?*D4FfIGR$S}c!fo~>=|AH}$VL}ZD z^D^)M|5tzn5DM5dLHrktaQO}p-y-4ve`EtK68``7{{MdlNDhQ868``3{{O#Y`hj>x zQAUQz?*dFkFX}flFoJyNIFG?azZvYiInx~~8BMhr7#Ql)ZdcT|KCS>~qQjpnJQ$b` zf=v2R%fQfS2Mdn>E2b+{F`Bw#)xhS6MS}+@{dq9(Jq5{yB(v`W+5DmwlzSN*rthg_ zv}9zM>=z_IUDT7Ae{xNbKBMR4H9^vhzSA#MF-l81&AOI?HnjbUB)Ia_u;=#b6FnL0VG~_Z(f(U8GGn0EFv?uS5P!XK*Vn2fd!g(B>lRrdAOTGo!_+mbT z2Gn^mQ0Ik!oM+5vGdU*GQJjH+0i+Csp^n?&!N3s-b=<#5gya08^!Que}L)CY)l)AsWz`^{|jzQ#QJcGi^at4Wo@(dO=&%H!y z_6O+I#s`Vi)LV(XXlCHhZ)ISt=wwim)nt&U)r=CUwf7QnoX1#U$-%(5U_XOdEhqCb z4+aLXd5v5Q4Ei0Q(tt6d)=NvoiQ)f;T6v3lt%?=~g_q6@0xw=NaMVgTiD<^h-K&#&L8=n_wBYcQ>t!WU>&d*#uYpB@fr04-0|Qe8lzzd$ zz&MA2fk}gbf$;}I45Wq;B&LBXRu7UO7K02RRxL;!;{^r=rVgluJD@bkfe1&`Gk^?5 z!6y(3L59FE;|vD4T9_D!hUf)Fd9A#K)=Mu2iTYIz4i0nwtpTM|4+d6Vklc%V3^Fh6 z7)O-~q|5a+X zFx6^#iD1}+>~zODe=WTK|Ca$N#!!glMaMaR1-$?N`vNi?geT&4$e$Xp8=@$ zWnf@nY~VzcIIyz9Qkg-*(t&}+VgUmSC_mS7`RLRi@X-N@St>JV)Ew~9spMckR)5dA z0wibY%wS-t%pg$P5Tax0%%A|0t7#3k(pC{mlC2U2WN>!n;#tKg$k(*WjM)hy7{`Ei&*!{RW5&F{ku5;X_RbT%?G z2v{;R*wr$)>1=+?AT+U=!C(V3gUQBZ2D1>F&}Ggxgn%wV&TnZfR-GlRlJWd@O2 zi_J=Y7T_x)GYm7Vf}!CrT#ux z+yKO`zQ=BPtmfF~3XmWucqVc(uvoG)F#hah;P}DGAW+NBzGY%21H+F_28rr>?8knr zWKj5Vl0l=^>vP5AfCOWFif78 zXv6qz^6kWU#&46YlT>8E9Sl&**J1$!lSRul|DGX*f;(m!v+u*OZyvp=OzO1<1gfR^vMF&gZiC#v=iJFN?HG8Me@?}<5sFJRzxo2GQ(~+Uzry@gzV-v%V z`jxLMK>ZdE1_qgg>5QC=;^OryKR8%=LA+C|`FWDVoc|wcoDj4iI-6f3>FC>`+tf2jACGT!N_pnbs|H@ z>qdqN0-(mLg(Aa-#zqE?*N*=$Oc(gTC?aS5fPvBb|9=-~s4zFMA#!^H!{m1<(u_5e zxl-k&|5{hnN;+56+IfSV59;*=zODf^^f(Sqm+@zo1eMtJdw;_fuYt*A^;TSwbm8^^}9SA9Og1uSbF{c4^nHX#lQ&a1bHwp za5&6iP?)XGzyQ)?@tlDXtbXMMhaZ0!7@QdXKLL5iA_44AfysAL9YL+LGr|Nqy|e_Ua8?dJrm?>{{{RT&ucSAtrP3@-I|egxF- zd*R?PhrvR-lR?$uAw$0<0|SGlE2#CsuxF+{Lp(#RYj6cj)9Z(f6RiI;F#dkXIKg4w z|09+P3=A{v85mw9GER7PkWt{(Lq>_$iHsJn7czRhKFApG`XOUP{Tzva`eybm7K)4s zuN(hAfMg9=Bu&1T?oiK~qTR{h?>LV^N4t|D-*Fy;O07q5#awj;#+u#Q6_y?hjJ>L$ zM8UpAyOSZsVc!2K77rN;EIAmMem-Ql@k^261*o}G%fY_owP_C1A~H< z0|UdaM1~)~8W|a^5*Qe)8W>o9D>7<;8l^uN84D~m{%^EqWnk=D%D@<^&St0G&YER>H831 z@qj^~M%+PbRw_dQC|W?h>^hC^3X8;g#tHTQ3>LM|sw=$z|N8r)k#R!p)9Q*k_sJC& z2N(ou<|_nPBr;B@Y55S~{r_j~%ZH2;>Q=0-fJ7IANbUWKfO^)$74`cH931EVoAZK^ zvEb!Fh6}G486LcHWcctZk>SUyMn;BL3mG|HGcqc?R%Fxwl_j>0*a32UO){txAptHeYLYzyYR-KKsMS{p0E@3Q0B1LgQDz#srpRKE;doJh=KVPF6mX3@gH_@j|=0;sqEg+#sUH7J-xxAoZXi_x}HLF38-vqnj&0Vm0#>>H|OqdjJ2m z6)XV_c92Eh|Nnu<0zke4VeP35888d28W@-y=KX7^*`Zxw)xf~mD*+0*e+3|QFs$9d zPznmgdcVsRpwM%i$9N#DQ^La1fq~Id6I7#nnALmMdssR)F|M#wV9=eZ&%jXCDX&r^ z?xFQkk>NnC9)ktQQLs<|g@DBa1}>0;YmXI!hSk7{36hW)CwTw=aS)`w_GmFI{cw5z z|9b@Pps5TwNFLyDnD_TUP5ln-3W)3fZUF@$D0PB@4HSgnpnJf;WpRLk5fpr&AoKqJ zBle{tBoWT`WMFvN$T-3B4FluPhad<1MF|149KeAs2h@WMMdW}Vj9?!iasY?-|Gz9S zA0WFPByOqk{{krfLp9kz<3yZ}a~T3aL2hlyz*ud`pfHn@p#Y@E`~ROCATuoE85k`U z7*s(C{ih@2gqijXp$rL53=E*M-TVK~EuD-EldKdN3@jEhO!EH!>jzZx9FS%Z2070A z|Gyd#8-zjSI;b*&mF=L?(fj|OHIskj2G@INw=$^wRAFFnoXaR<^MHY|;(7Cvgy(7u zpw-1z`(C%VTsCf}$R>;A?=rH&H6HqJ8VIIR7?Jfobhk1+^ zot_MgpggJH#ZcimkKv7_1A_s`92f?<#)E;uB!PhiRLxAjmsju2z`y`922{tulnb{{P_p|KE=3dt8~NwEph^IRoSbhk5_LSaLEj z{bXTa==5Y@s^xU901cEu^#6M?F;Hakfkc+cPx9AFFMVC1w;NQ;Fzj)h#@J%X@c+NX z0~>})4i<&UYYJkyj()DFzx%nOeviiV*h}aNILu)+oWaFm4nq#8KLc}bqb&nNeWwM3!#oC$33nM7K<&Mn z724C~yBS?4FGy3VcbLXtU~`~`!RCPrL&7npjD+V5O5XqfC%_D_W%&Q!<^h9EB?p6o z_y2zl=oWha|8D|Q3!)*8LN(8E&VK<=i_ZK1{}N~ujgf&B%&HdvQH)hV3@jCnjM6-e zATCHu;{X5a5)7cG8AybIL4$#TLFfPf>mdvbj2sM(oQ@1md<~5A89fCZ>%6)67@XJ~ z?>mA9>KGUpK>8#8|G#0uz`&pa(ar$s3FiF&eP0|2D`2XBb@gCcxFC!_`2{u1EE`4#e==8yFZEG8jDh8khtf>-vQH1t$nh ze2!=6LDih4bei-hvo{YK9Hej5`br3||=B!J!n&#mC@y-&#`~eIM3=#kT-&&SctTCO<;3lcFzFV=$Dla<^8f!mPzcRoaN=}i0O;vPyI>XI)Qp}8p^ko}!@$5u*wJ+uj&^}L zx*p*Xux(IRKR$xwYS83j%m4pR6c`v-I>6~+2FFZxXHcR5N1X@X0mkW^v)JY`gL2V4 zq}ac8^Tu@-a0&qBgcJY&zsO-=V7$QK1d4H{y!-bUKpify51;)1{|c0CAi)9&Ds*3i z94GPr|0|GTpmYFoF-Q!TI#8YmOpz=l?MX@Lk~z5wD3ST5EMlqi$RGlhQXPy zK+v(y4_xLzG+}cDsK5g00cFD;aHxUG88^NOjPpR5Isj7E)I(w!n*ks(iU0p!gM0vr zZ;(|WF?7d)N;r@@P|;cdPQakhb>%w%iViP623Jsa!r?IoQ22v1?_gkHOkwZ@MIuPI z8{Y;{f{*5OWN@6r;y9btSa=Ca4`u=|F!XNV&fFwS8SbgT>E zWAFfZ;_jW>pg;f@QfL1Ee;2~Q!1jf~iSGf^92WQ4td8@T9H((PPUm!<%j`IxG5VV0 zb;sL|cOCCJ-go9>aJ=Kf_kd{{*K|%$!iD6r`2Ko9$BF#Tv)F<`70Og@#~B=seL{{C z1Y9QZIZx(woWkQglidlFtYgkOUU0nRc-ira<5kBSjyE0I9G%ZQUUagKv)Dj-wwybE;o_ysSFYZ;d5g`_qhD|$|136_KA{N$llY)&>p5n!3p&<$z*Jtl ze&gn?+jsBXXLEGqV{p3T$oGH=qz~k7P>Bf&R8ZL9h)+=Zkof=q3ny5W{O6zC+8I@ zO`cI9%EZVpd3}W(J0kaqt9e=5RAGgur|}xxP$X z65ZcnFm039mtlrh1SkfvSQZ7g3o{g>aCkBvhx&vIUMWab*UE zJX9CKwG_Z2Xmg={zrf}O{RX_me10yNTNoKO^B=Ld=UN&8HjHbj!t@AcMn9niATKg9 zI51c+fJi|Gf$2M#8C8YYRXV^5H*JKZa0Y?Nij1Aw_7C`GB>z9a@S~oA0m8n>@MAuh zEs^|xA;XXRFm}Q8#Vm~4e5ngSOE)|iT2wt47?~z3GA@{2!^+6TxM6xbE8~C7{~R?Q zOv_#b#jk_^H-HBF zL4)|<$!6%}Gp2&7uE)EsibDskc>PV6oJ^ z4W0wHbz*3>^oka+c(j@W)Jd|G=ivC!%D`Z=2&Cr!j|ti57=9eR%mGSgKeZSbemq*u zVDpH9-f>85oLJGBBbkfXJVM%dz#1H~NtjE%MZ-q z5-bYI_f$SGTK!?XP`45?B@GP$un(>Oa|nP8xA-&Nj)zg!a7yt?22kIT0qjC(P`%V* zV6f!;|KleY1H+3<1_ld7Mgh>o>np|o9n%YbFse*m5Xv%LfQM1U%O;6|#UlBD2FTGC zO$|Rhn0&$WES3rkjJ8e;EEBaZgSxeIpl%R&$;eOvGXB*G1`bOO29BSM3>6k9|NnTk zZTdSNM%8-o(lj)O3%pchsCd=I!0_rM1Baz10|#hw#nJ?%iGkt86b1%Rw7n?#|HFeJ zVJ^raApJi|Kr>V<3UG_DnIQr-V+#X=rOE#fKe_5b2LAs6HSmK6L%c4MfgeC)#kNcg zt(F|oU`M_5Ky#E90|zKNeu5^M&6t*f9P(3(fdi!Pr6WTHOz*2x3>=_|XiF~!j-QSU z6(Bt?JsB8kEyI|>nk+T{{{R^R(g@Q8G619rq#33W6m%esueMG1;$!rx2U!T#151n` z!#f!mQ1pC(`uYk3gQdv-50)YSU;KEXuaAteH}le6gZTyhOi<-1->W+ zEwQULJ_L>-Qlb^CFZ%E@&@#QcmCW_a$g#ZE(2Hb?YXiN(dQk1FCo%yWkYQl}HVe`0 zt4Gep$T`N?3G7-@g0?o;8LS7@hiDd}*;fxrK%m@JYea^HL8MyBZ9 zg$7^?(d>i9KW6S=U;vdRwE+}ZXih|$sYfsM!ih*UXmJP+Qqy1H_$MVq>uW=QgEf(o zXy6v=q6R6ftN|5R_{xr29k{-FaD70uMtf8r60Z+#A)0;l_)EE3OEN01NIdlxdZ}8k z$WUR4obMGFz|lcU9M(E8rhv+Qa-y)l)(kaB@z)v9ToFb=nlVAKubx091+frZX@vZS zRT^a087LM*?Io1|1Ai~84W!Uw18f#Uise^=7_Fb_UgC^u7}YW;OM&WsYd5?&$-rju5@L`g=l>6up8sF`_`<;OV&(rIKSdZAUUdHd z@H2#gp{9j>%ZtqaFFY9Q!0Y@$js%&7WC>0?EMC_C|M4o5fdN#|AX`$GHoF4dqL3CA zy9Js5-+3@rf|r$pECDT^cbLbJ1G4m2CIbUV473jIwR|@s%Z{M#2snhG4P+0-BJdUskYi9B zfh`&{85lt21xPMMZ^ zeX){(!P4{p2WXo32MY2Rng2g{FlKxOSp+g0WEsq(@WcytY&~i-ov@+lir5S#E%egB z%W**t^Q&(FX9JwRBqA4lgZlV|2V)Z0$1g(|7<7~w7=C0ifO?oAAd5gD09r8l`y~Sh zNIfXpKv}&W*4_uL6$Rz{mt3Iuf^_#l!E33(!13b+0|%&g1~Lew5k`XyAV)uvzIp*t zECy+W#UI$QA!v>THF8227(5um;ay0O&tY*7(vRw34+aimd<@fswI{t2R7g$VB*SP? z?+ou7fx-#qR8Z;wIRm+P1EsVVpibg8q~x3V{|6{?JQxEZ3xQ1_5ebSo$0p_iP`D#U zAcpz%rx-Y3;|BD}+ z!6EkmR8If+46YFBKl~I1jh_5}@iQ2l3M@eu*JMdoIyMOfUq=KmL=S1P>5^LKG2w3`^?j zS28aHyFP@l>tAvqDr$>U|36r)`u_stV2iH*4=l3&->}sBf8oWe|37|QVPJT1>i@SN zTNoH#tor}r#}o#J7hV4!fI9y#vi{!y>G5C;e+UZcdNdcQfIo(-cvz_gM0__C8{Ern!rTDYJ%X! z7|0xudC-3pymvEy$l+SN@QpNjj@Ajoq9x2FjO>j!Lo)c zcytnng(f6f=*Un3_NfV4E_%tpX6gCA{s$;8TC9W=5THb63Ccz%|NjH0-j(oH!aI#(#LyEjD3pG3GI0F#WDv0AoX!`<$X<^nkU)Wh z95xHO{{KT19d?qS2mu)na)PBMmXZTYe(31>{~uw7ttiY4a3&hUmyg8K-dkN^ecOVI8F(1J=(%>c?wnTTc>ie;b;(@T>JKpRRyyC%>r zdyxg{t9UR3gLepHGrt~`ZjsX|$QQ^i2IUbCh9K}343Gh!XhL=bx}`85c62eYgM7Fm z>;FFwhCoD=fqG$?3?`wPH|sJr8T1)zH5o2|+KV8A;Ug!Yx=#Z&*Mgc5ueMF!r^+Z{ z0BP~SoC8a0Sle5WnF}^GMwR*iaLEGK1)C+nX&0!K0B$vW`0;{)VMXTue?L7y%kct0 z2^XAh!ES~Pw&R>PftX`4omY)fw%#Ay>L$h!@b(h4BUO{kZsNh&4J^08Ee3@iTKNiUOoEaPT4xK~TCE57 zwivcx?c#&d9?W1+8U&>+Sk3_(m<0;{9pIA#Kp_aqEHDQVr+0fjcpE!eni)9-v1Nav zEM{bfw)N|omyzshMt1Na3uHN(VJk`x{zpA@G=(TvGi(93#W5_#Gf#$|XgwG#eZ(g&9ORG0w$0j07?tyIyFc4^%XJFwBM~3e+?K3ms5MfkFoqO0a$!q!5G@D4=l+ zP{9P+3-|)m83Y$jGr)~~c!;4#RlNoS1I#eY;GO|KfdZ~sk)Z;+FCeus#1m7o<_efT zuqTkphkDRtD!hOI4fnuCV^;o$jK*~S|KPze2|oRZoLg`iN}QSfpj-rLZy*~Aav?0p zK|u`)a@--*2R^X{7D8|bVQF!JLI+f6c`$T>n+>4COh>sMHq!EL0>}`MLqIh!a<>Pc zp%$+|!v~;&QU(T4Kg?3={|ig5{|`W2X^U6?Z@gFq?SpkenuRa5{=Wc?bs3!e|G(y# zr@+g4sNxr|{@?ImXa=980CNbuC`C^+c+*TrDJi+89uzDd3~hxlO`s5fSq!hp@vQ`y z0$T|Hoe$SyV0cjiN;CEFrrnQ{|KKTWEKysJC-v8ZhdDr@0m}dIXuwj#fkzmK7;Xj+ zH8a$JPviiZ`!b}SfuRQ4`ay2^AX{ef0Mfq#B}Q061g#dog%3T0`r0Sq!zbYJ z?H8S(6#->fM}xt3)PqLiLH(i!knv~oEh$}yEef#&IZB9wXLdnDyr9`#4~9~dAje&7 zA{RKtD2-)|w1cl1wvu7Gu>qq>J-kT+ifDYP?!^`cHcRMY3CQ{r@Ir}ypav@>)#W3v zX91@=a5#g48C#(Mp6~$8BW#0q0Ko14WVnNnvjZqNV2%S-dsw?s3`t1I9?~Hpq|dV6 z1TsYH!H@v%(}I%bj}qu27^FhKUima=T@weW=t8b@LA@6bh8XZ}KagHzN5dS9yD`qd zF#U=lqjEj?U?`AwP$UpaH=x9iNH#Gj^%UGne8mQ6lniC13uqw`xZH>Z)eGR}JgnS+ zFBHSJHs=bo1pdOnV6o-@2TPIvFDyg;KlpKyf#JoK|37}L1eZ%6K%*irru=^antORs z^8bMcLkzqn_M_zg13%3M76n+n1MO~d<8>qnWV2FSZo1*v#sf@#|HyqwmN7f4siF(M)1J*GL28NDI26kBU{6!~h+#no2 zUp|NpN%>i_?6oF@}d zXVfKP1=?pH^#6ZP5d&jYG5?af;-(4@CVud2Mg67@hnnJ96%O8C<86CwRrv;ysi^v>Z=|!6NP2A52P8g;`BEI zXg4}&<2WdYVQ~$P7A9_ZK>)H4B?Qn1rD0=OOdMbjfjj|<4vcXte1?Esj=+ppjPj+yeD{kO8M;x@|nz2?xOQcrKBfyE_ z{{xWkKv^G@v3|0ER<=MFB%g#VWCn#IC~9pUF|=Adj~008&cI;F_5X*Z*8dL{r~beA z$t}r?J|Bqt>gNvo={~s2w{{PWm`TtMNb1jitEsKCkW(I{y%@0kW zeejNRM8D{0GB8@KVqlq&#lTQ=)FPl}m39T_!~}+W$YbE=D5y zEC2tic=^N0((C`fP!1M5h#3qPATw%?2LxDZ*8l%+@%;b4jcg1I4o&~x;BhJF#1znZ zIw#=43aUiiQA=k~B?>B9K&61iDrj)4GcbTdcR2$CC`3V_3<}kn=gt)s_3&U7cX61@ zv<4Kk4)d52KpPhv=ZG`ZymAt$UuogsFh}eQsEh)Y&W`i$o~U_cUD2}Y|DT#uP9jrQ z{{K_I+9s(r5vjLkz7J$D%nv4fGdJ85mx= zF))DEZM^7!tmCjq|NjHzs~@Qh3@?^5FuZuhzyOLK(76FWUP075&JjNF0#qht{r^$R z?(n0QLnEN(xs*u#at8;8Im}-yz5aiIrvW$c5iy_@^a9{kHYl}1YtiZa){MsWqI+sJ zjYL2-1jx~#tpmsohgL-#pgjqowh(B`!%I!nn4m~K8)PD2`eqwObxVc*7pg90!`=BXgy1f;nB6vy@G#Z7h03Hya?#VU=co=9e2bFgsS0J%3>Vt@V zQ3piq-%hFZvIqd3_0`M%|NmT0$jM%?SOsNDhk5@GK+F)S=Rg=D{0GSp1yB-tvFiU% zP!jsF^8ZitBm^rDL3sii;sPLtzw`pFPJpBgkf%Vg0J7W=bZm*HrvRw&0FF>_4WI&D z=EsE^JuhA`Fuc@&G-K*kPG_@Y)QO13YkaNdzp`3Q_ARK!<1+pK4{)0l9JbS)oESA2 zqo=1^GivcIH(+p_CzJt=(&_W986|_Tr7>t6a)6q;(EK6rQXMh>^pcH%0TivEp*m0~ zSadQ7SgiQ};io$&I;XeUGRnEtYAWGQ!;mBf-jM$Qo18f(>`F&1| zHX6|apdJ876gB_^vh^kBe{ibAU zsK`(N%0HkO1N#+PX%J@{^Ri0LLrgQd7#L@2K^jTmlv3|S*Z~VQ85lw}SnM{UIRF|n z5bq)lGlCorYGA#1`TqylyBZ+xGA{!aKw!rsb-1KJp@}`6PLFe8l!%6gCKlrxUjF}s zZ2W{*5PuPy3mT^ljx~7xQFP(1_-MIzhlziGkHpQ- z#WwYjCKrJZm?0L+|Nr=@1}PCi2K`t8-eCz|<^`?3I6w}9 znk7KUEGJxs!3_Ylevy0yattgPfL0OIt(?y1%_!pot<*hG+YFYl$VJ`l3id8?0z)>n zZsqhcZ*a_j0s$1~pnw3W0L2@qg>CT)yw(`poPvcUvZt}@V_?9l&k?cn^TjL3IIP7f z27w>beSH}DrC*(55CB;Via2oXgHS%*-iJ}P9$f*rUi5;rv41^e0Pm*-E&KxeL5qRm z)g8tQ$OgiDm>{*FWyS4kH7v@V?5We9smnL?TQkw5ltV`me?2Hrmyp5l#&AFN92%#nf>D1bSXbZIYRPo==xt>L$wo~ z56i1wh;Lv#EA*>l%^dUPM66aXPR^dKIbu@U$8_D8Ui|4r%SnN%z-g@vM z4Wzmn&Bv`4&tr(T7!=i@wf2_aHM5}j7lyRYYgwHuK#9cr{~HI8qTeqe;>c`}#h~EMYQ8uG9Y#{o zsRxZkr7>{)WMg2cS!@wdlO_!xi}L>e@&o8V1@Hg=??C8RJfJf5_mlr0Kn}rK1~V`) zg4BW3;2Yfojb+w@E~)_y2O7qnZNgik?CS zMi0i%;3=~D<^~4GdH-*Kf*w4^?!dqRniEByaRAAI4(+hi{0%-S0$mQmuZK)efE2@~ zDnR)jhC$+>gaTg73SCwG(iPNl3&Pni2i2{hA!v(Jpy?DwnHS3#IBT9c1pHXZz^U+@ zfunwT0BE4?4ajWp?kms$5Ij+NK$>=-fdfkgpo;2(=q|Nl77W0=yijDZDY;FOgN zEDFyVSWpaXU{QdK+c4N5hHV%OKxTj{c*l9irhtZRmaO{!4>W93zh&kBf9T^jAjP2j zaV$>#{|7qNbICFWCXj_&Rx&UtJZE4+w-Dw~7!A5{18T;9P&_-%V^HYjVql!h$p9YB zg{cD{iU7(wFahv^JD_U?1VD$2LNMrjdB`O_j2@u)Y}7o*06JL)bb1Wvl$jrj{|js8 zD_1}cW??u1x+>=PLWT-Z6k0E8RB)WfumN-`&F_N@4L=we7I-i)xPas!*a>u=#FoUG z`5(YHELkKluv-5EoqE2-7j#{X2jeU7gkAm8*A+D>(iIj74BX!Tw-{P9FmQqIqG5cw zbb3cPqnyjDtsnzy>e#nBG%?J0y^x{e1tY_P*9RFIK<6P_C^Ad{U4#KT$Q5>*5J-*w z90mr^F{~g5TG~vX6~-tHIz`8WK?c06xPIRc2giB;m-N&zFlsk5a5>ET|H2}Hf!BjU z27J9!M;*xd|F3|K;sG7Q19AcggKpdb?T7$*2gLXOzd6wQQKLrvkJ3!*z|2Nx0 zy#QWHRR8oh*o!g{KWYazC7ss-r>&F@(xFo<~n-!y%H z1fv=w!}Mnnj4Do>Kqnc3(g;wta|8yP`|VOt++JmJCk9K4(vWH}-% zH$1Fwd5jc=8!kc|{v5m%9@XI+wu1B`!g9k>kmU~ZAjh{LiTBpS6oRf%fCT)8%K9Vh zTPzkZuvxVH|5ekhBmz2-+k^2Hc+EcO@axx&;N-ob*7l~}>qLebplez{5eqso2y}(O z>xKVcfRZ{W`Ge9X=*%LJI+#B1|Nk$5LdPPhF>!$h69afA7K@@aP(=lxY7oQ*sj*0E zbnswe0Iz#MGOz(E|IZ?+@rDNz19)oC`~Uxp=^OSlO4LJ7wps(a$N_Y^73jV&&}l`M zUXT;6>Q8xrW}x(-MM()bg*^ma3dg`&vtJt=?x1_Wy#KHF#LQyrO<&Ao;IMww1TRUv z|F2gB1&IgaQ_z}7K?bD6F75q)J?nIr7)Ava(BWFs9nu&@r~B?_VyB`j*HvP=a$V|+ zc?<%mu3Q%gape=x;wyAlt~15v%IOucjEd0<87eH6{{R2GkpX-#H>ilMZ_yI5KJx#+ z^`fQ-XmKk8iWLx^Q^&wqYtO!=e%}L76|Vy+VV{6^nj)33(%%2qR!;vC%V@~RFkLN< z(ZH&y0OUZ>nP8wO^I&`oE^LuPliU0M8t@_Q6SgwyPF@-;IDK9`qXbhe z!*qojMv3Vc;u%>%hx);+v46zS+WfzE`tx{3J9Y-p1su#Trf;xgmYL3B&dd`4bwLN% z)d>u&2p6pS3vwaE1rNcCB2iti>MlqgtgiuNEU2(tbrN(fn#%MO35-fkO*4=T1Fxn< zErnNs7qLJs0GB>!7C25<*w3UB1M>;UI;eA3fUQMw?n>}_e28fez$;QvOiAkUS|oi3GBZF23GI?D8uHiBGZ>+o!iaPvaN1bL7t`J^8uIz)4yagDluN0E}q3GuXPRFWJHQJ zZtwr|!MmM6+7L~?`Ddp$WHU-h%?EEHfyqs%0jCZT@Bi~>PT!IZu700oGunfCB;abm zk)hysBBW>ayOE*c_d(Lu)#WM zs>F+X3=%K)F>t(?2Ra$yJ-GM)>9t5|;qYL52QJE9#xZcblw**n)pDLx%jtNj*2}44 zdO;2&Kl6+PhUwdK7*!bGO~0MPXp?HOb&> zc8u@9B@*b01gKRJ9*pn6i~V0PGHiJ5$WZV)k)h&sBSXXMg$y09AA%dQ3qXxlP@OP+ zLN%i(=t_kIhUwFC87moerwimU>M>o*o$ipwXv)Yiy(|wBK%lN@O+DzC2gVnm_9f^h zO;E!Q)Kz^wpF!evJ%d91k;jv2?H*pLY4NHsX!-xY{vP9$`rRKK9Op0|0UeTBeVjqz z^?nA9+StdFYPB9-s$c0CD1)s^>aNODxQN@JTWLZ&SSKwRb}52s?D~qV%5c_nl;)Lm0t2HH7o&IHC!=f zgddyU;@HKeN)HAFCx-twYW``7fNpdFtvPa>!(an)Tm8Ko0ku63FTJQ| zVEBEXL7^r`N@V&62_}i@3l=c4)PtO3>B+!YvGih7r6+?z&FKg;koJld@+vh95f!yw z>{}|mE;fO@0&+gcJ2fnhT8?x6p8$m`D15#D|L*}=1;UQ={^wu|4u^UFF1$|se*@eL z2X#*l{{LW+@IU@PsOksxQ9znO7{muf9!w0b3EE5miNnR926_Mg4>`;j)Inv1j9q}t zN?@42tbkFw{w0G%%_)U|7nuwSwXD{YYK~b?s(E2~sp1HOLd7Wtg_@;S6$VTH|F7j> zoKkbbNTin8Nu+*>fx}Nu1_hrv3p>-7#M3k*|&sxu4=vCLWG%C&7DyjVeF8BW9OwLB0`eQg-4H*3a(>Nn?TVUIX>d2X zrcJrRBB><-w4@JOs!sG^d|3-RJXpu0CR4h?lB1Tx)`LL-v@1)0F=&AwgGQ~gmk4-V zYAyp0Wageh0Xc+0Hi8zB)G~uFc)7A&rHJu6>*%%4qt`k!v4ZY+o)n@pJz*^)%XEtx z#sKgQ%0yrA%y@j|WPwmwX~yH=Hcta7S3HA~rA1Q93J=D+BwX=4Z8}c_V+`1pMBnqw zc=+Vx4-t~mjEBKp3=(d7hPv^E2jfjLZh8jk24QfW_3-}>&{5N%n=-+NZ-Z`nPHOeA zZfey4)lbmuKJ0IL{%i4EYRBkJ&)_?Sz_&evZg_@a0yjM~UIXvG1l>>!x4BocAWEPfNpwbyaH|*gW?DjSLpHNIA`>x=izkIv)J?lcFa7W5e}uWR@f!Ijo$wo zAp;pGz3@iJcq6#Ox&tzFg3@7a1dq|cdX12g*2diF2AzyAM=#+6T{i~0gfD@Cp&mR% zrM-lS0aST{I*6d@s+zgV6`%^XW{Ea59{wge%w@8$Sir;pn*8x#+zuY^(%#F&022S5 z$W&on`}hCvgG>{ut9Lp5Ze(h(ZeU=rj%Hv?p7VjRI?8v6^{syl_3@WPs_*S`vcAW_ z2)UuLo`C^0^#q;+SjbQS+Ph`(fT004bFX8^z-axSiNX5b|No9n3<1?I*%KgpzZl*) z%w^aC+N0$-@BabF)+dG=Xl5~3JYa%vgF-gTq3QpQ>T2I5*4BIfF}!YMYIuE+X+r(( z7XhymnJVf%UsqIW!YpDeaG1;R0c4TGJcb#dS-X0d%iuGvrW^D!$})p)q7LX~6a|ey zfVK!Z%=;gK<_u$ZF*81hID-x1F zFd{F0uux=LzyTU322E;B2f0R?0n#&qx@Zfs3DaZxklbw#RS6pTg2e4s@VqT3ZXM_T zy-@$_H%f>&%=?EL3TJv5W!WA7UjR*}O>PL5nLeYB(Vt~!q9)Vy*L{o%5Eg$wqYQ+l z-_Q7RdVw0V=ycTyjEYK^!K2UxnGB4e1n1bq-~w7kQjyG_GSiNM)BFE5(dh*f7&WFp zh+t#|d8#0j0dysa4QOnk`Z3!Rh^nh+!K!3B>KHgIk{MVll0`GT|6c-+PFEzeAFKZ_ zT`}F@KBLHVj){!ko<1SX2kby&Cjre)askb5c3?G+r7J+4YFOve{=xtM7W)`jlK=nz zZ;`-YQ~jSo!J>hI1+)qU(q;U=XZnnZj5_+D?k6bwSR^nMK--^&-v7^m$Hr=E!Q(AA zED{(@em`V5;r;*8^zRcH?YKZQEp?z-{7cjACozhLT?CJ8f^I|CZ)V_hnD_sRMI8gP z_y3FFF~*P@Ham+t1{UxC7s1mMA=O|$hxh*rkeoP&fvF+|G@8Qj2b?kHFfcpLV-%Ra zW)hi|NpLZ z+A=sn<`@63>9l1Cg0dHYVrHT(=&D$dKmKn3C1DV@sAmxP(a2Cx_kVYV_y68|7WR}KV0Gc|KA_5+N9PA9*oDpgL>Zo|L1^aqCle&j18QS6q~>>{n=zj zeMW}qVpAAZ83U%o(D1elKYyo3NkjYA*8JGr;R`6Vm&UBBdjIy9vcaS4Nc)GzOBrh;c&mQ7`p18og-nJzJn(O&TjB>ovdMdbqT|Npjv246uJ34z8% zz5oAxI{n2|MwRI~nM|CF%+nE?Z%kvfQ~KqCru!+HZqw;2rZMV(bx*I&WaN+sU1hrj zJYoUL1S}P+7?f%j$m-O3%Ia7uGjL1~n9eA{193MbM5h}}XA}XYH?Z#+7^as^XH0^4 z|H*Vl7tr_?xc@p`V+Nzj^qN*iPSCxxmJXo%>{%2*gI3cT7)7Q>%wU|Q_Uq^CdIpK` zWe4m)Ss{3tlU(pJH#^Xre8n*ah3dHsN)`zW4%;PWGRiVezgop4Fx_<)qZ(u5^qg6Y zYD~vEr%##1XvVZ+=#9fWZJXO6TGI;<0KWBP@1GDV(*g1?Ij11G4&0(|$ z&Cbq&MEaEJ8gm(YK!L_GontPe!t^b383m@Fn9Jy)0jeNEIuF=^);I)oI>~_?5YXvn z2P&#-RlF-I=CdCI1>1C;d5jV%4)Yj#z~vBha1K!xF(}j{l|@kJvVh7UkW)crkHb8M z8jwvOTR=8cDl>r7ILM2jwFe*)bwZb7!^ZXD>B(1J2o+_0YxDwUcCSRod}`-W!9gRsB~yz zNC5Fct4F;5|9RS|$N-)pPt;`Ks8wO#0@{-0{r`_IlA43l6XrvTdX^B#UV6ywO(5S` zG_^5!Fz%8Cxe=7Bz5oA*-|7t#0}cHl>#=BRz2L#P6Flb&RX=6=o%xJfPK+Y@tqe@B z4>Nc;&SR8tn9Hz4zZJC8m(fSRm4U-y9>W#TcsMAuL2*^H?-e)!fkM4v4ugWjJjN;0 z0~Rn!*f`8%>}a%SV5n$efZe!d5#D^j4iqoJpn9d#NiMkA%?=blpwZk)P4;7;E8lCC zr7NaSSimR>nrsI-eR{+~MrFn$(`yzoN-{D`pSF-u9#kqrUCCj6k3qy?-oFnZmq1;` zgp>~UgmkgkRW!3GfZPJf0{?wNosZdtdb;SU_X1(Ah~Y&>2)Yg71I+QPIMFtfu*K1;{hr|Np%}P9`;3(x6MP4}kmw z!}bmT|0mD+|G#<;SbvI5!~g#YE&u;}|NjSGmjsFyP~i;K3%Vy5lG0chm>Cinri(3N z><8t)MU0Mu;B#AFG%_p#B^U4iKbB6Pu$oaS=?A!}g77(`g-rtkBS=j}OY@V276u3J z|G&ZA2T=Su&SQvxInJV~O~N9nO~Zq68(6+kkzoNyU!o>M12lOq@c#cpb9%{QMnz>% zW!(r-;Qjvxcoq)aw`hc87o)aL~c^Ff5Z$AT7W=xD)4vn&-rt5yC#0JSJ;c4=4COjoV|HOxVUp2Y$N zj+(pEzb#>uuebXDzgF{=Nc~C)2gkY078VN_SS%VCM1DCkH2glu@Bm`?FK|U$QN*B7 zQ^&rg$dmEELle^;kWnD{UyTeCejQ|3@SBlg!*4}~9lsM9PW(z_==imeVTSkrciV$K+=!J6~v#a%TuCQca zUWUX$t1I>huncBktSV(tsMT6Lt!lB_lbSLqk@}MhuhriR2&lftpb&n7 z#jg6E+7s{pAACW{q_~rTvF7f?Yap{hX4aH_5&_k64owUk77q*{z;WcOmQjuZD>qLeVuMaXjuux?90P1PHdiZ|_ zxVK@@$0$1eZ!aTe}yMjehn}rACCU6D; zS%zDw9xU~M+oc|JH9!gCN7h^e5DiKg-v9r?uHR;C;G2GI1*3iD!T%p>ep`c@Y6754 z1IXeBvN=8M= zRmbeYSGeebGDv7Fi(REA|B_mBFOkhFryH$ev~Ya`&i4!L8JOzlc{n)CV{oxmV3=X+ zz%V0Gb6P{9*R*=j5f&Z{3<98(UdshqY097gN+uvZmR$e;*LQxHzJ3*B8mJ+@no(Yh zfq?-O-oFq2{{RXwO9uwVMvb`^pxivskzs+uJjM`EOLoGExzpoUGb#vzPr5;r*dKVo zB{tLhkJHzzW|R{90AGdxY9N5pu=oFWiqr3`X7rW?F9own`v1Sa?QsRDUkV-`NKXCX z!61Edy2~2ytbf@WMoq@r=?m5{ii$(KupqBkG__rTl~w>*j8aTDgpviTICWaN@)gcVB;8l5`mL^Etu?dtF8Q*{$ z3BoTG84Wr$85lqT=s1tzh{Zuh1B(R=Oc1>aq0?WiW0aF?SMXq54PLa|(8#C(k&_4W zEfg6OrWdSdR8Vpsr5 z&k%8Cum*@Yqr;1Zj11Nb7#KinB|ryZILu?v@L*tQ0a*gWj?)+gKge~$prm_zsr7Q5>Ipla#K+vyD(8TA~VfV=#)R+FbS#xO8|>xV7|hFZ;u*J?E{ z1XOB*hXF)D^(Uwv1s4$!&?3UxOJpEx4Y5`{~~QSJ_TC*u*Fb>idH7zxV%D zveN@LF{UyyOy9PN(Z=mDIBzt}VPL2`wz;Bi>FSEQ$GbtbGK0kf1}5+SkHKrpy#N23 z0}3q|hN%UWcHaLVn@+db%qY(fjvDX(|DesV>1mr8%*2d{yHHp?zR#GZn0n1HBd04+9T zw179`o`U@al{*80} zc_zrm-v9p#Bur=IWEAGHXlieO6hKQBPM6urC=WS3+x!3jhUpD4j3OGKQW8}4V3tBp z!N&_iT>eZK+_?p>)}7AD$;dtZMg+4!y+s1U18A}3=>2~sI0`{|)v<~Bh5lX!2GFqB z?}H2*tnV`jOtfd@$N8>X@{i(0~e?+|INtI@Y|7Lf<*&pxcKnr3eb** z-;E3lCTh*K@&5l5>|&cFhGh-Ob8YOI7?xQlFfdv>Ffdq4%(bydW_?wWY@y-(e+4|k zYigt`e$+EeaGb|@=eHt52do|hMdj=H3=sbG$_ATR}PeKDc@C(w<>P!wv=pkO3A|3<99R zUr=tbIKcYKI*LI7w4S$S=_3*E|M#wfENzTu5O`_Nu)tE5fw6iy{}R0phK5>M_ATKW zF5vsD!?ljtfzIVo0A*&!c?=w(kt}wbH5phOru`2A^P6H$I@%AL#;x%&dYd)3ziCu3>!hm z6F4w1fMN$!1-!IpxUkWafeF-+Pt;^!f%cLLy#GG}w`oCD2uQ8>f2MnZ(#K?uQ0`coIK5{VqqHcvhz4l`t>gk_eeeGd7^m;q#V84CJAeu< zPX@Nd?G?HlsxL`|U==i;mVMfgg?TX)!p6CKlIMvKnuCRH;ux!Ee zxenI*83Zi7=Gy#VWH?aq1U&E{@M1s13Q&SwsLH_PFpn_?w8{@Og9I9)Y5333(cHzr zP+!T$pit{#J+0Qu@>;EzLO`XLyhp8TkVvBz152Y9c;i1~{hWY+`jghv>f0VTRJSrH z)ZeqbR)5a}+$XEPrS`;e4&w$;?yR4~zNMz~f)->2W;?iM2Q}(|Nn<- zve+$To9h7Tr7d)4;9#=kU|`(HHh22@-HfIBpk>3LH1GZY7I>e+3r2O23srW}t2riJ0rFzVNftYhcOB>b-vIL} zE}vRzF|dG6Mygft(W!L^(E+U>B$lfJb;(#U$ z5op5T0VNFmR@PU)6&XN9cgOEWh6yz@l`BBoBdtMm2aF5{9Op7F0VkM+3^VMV7?%A$ z$gsdVYOWK=B_J1oN->bQb<|uRn?(%E8kWwr0fjzfMQzK@1O|rb;`);L{C{{u3xz~ye74X+!=Tv)P<;jpnedg+&Y7ljMW`*P_x2y2xk2(E zY?0I<;K4Wxw18WZ0b~i-0#MRvWS9U-GN69%^bfs|h8bw63^WiwJwc6GcKX@!8{F({w1M|FD!}Di^J8%N=KcR3xStCu z+Z^XHf_J=uo!Hc20BOn01j{3t-B8O7AHu!0c6xy>lgRXz1B`;8$qCSsYx_kE%RtQv z>%DU!lc7sM?dcmQr*ApHs3bKH+`$7C3m_{&%Q1gs&CPI}$GB$thXageOjkvxYaC?s zVwzh4uFeb^KrRP$K3{Uoh3%n5snS3Z2Ug?6uw^pvU@NaJ z5*QdkwFPJ(6xNOb2Ut>vhX>;{aDfii^AI$Q_IJW`g$TUuz8m1+1=T^`|8MkyMgw*0 z8UG*nt@!^0Xf__SOdB+K1}bww-S6KE|GxlbHE269a7H7;3y`|D2u% z%0G+uF))EH@&YZKwphsUqW=HMYxVyhfcq%bkJX;kR7i<<|Gxz82sc_!zjv5XpV4}{ z)hb41r&$b4Ad5j3djG!!9)Gs23sYDWiK`7Hh{`tQ_&T+eVh1XwyS zuvBu$dw@2lTY_3X3On`XSG~DIyDVG zI+Yyk$7))fD?At&LO>RQ@;10;!(tiCqDD;y7I5(nvIK`6FFOC%e*h2sfNQ557xx(?^p}CAVi_5 zbwML-CmHpfLH)~w|9`yy|K9@2x*+_5kukv{;r~xiX#<*|v`F~>#ryyNDHaL;e}L)* zivcHEVjF5T0 zlZ*Gyun z?wL|>!xc0?2%4M&HJ3aXE5I#LkXjGMQp@Q_PBE%6&Yk}H6r;LS$Bvo>emWkErQpp< zpqjyP9)k_&RD$WCVJ=l@=C9=fufAVm{owyU&?F$-(JWv`x1DBG5Gnx=fP;pZUeqxN zcrccPPTz5wQJdo?%>A!VGuAT|FPxrphEYkW7+iSNr`!hbAAq>C4D9w7bqpLHjK#6j zH=JP+!H`mUkcv%1hK7{aXQagMt^R2MG9I#aF$VD4QU7xbQ%OKV1Fbs z6nOvt#R*EsmYQ>??>@^|!uV(Ufq2NsCaA~33lha;_VVSk%-08c| zF?K03Ffer5Gl0);cAUppq20-#?=X+S0AwZvPft4!UWPI4Jfn$10eFNP5-I;nUi^d? zv=o^kSSlUH>wpElYJegVOYz%Zw^1pgi)ElL54rjHMnjU8Vy%Rn(G;0d(^* zPyGW|9Z+%S{r^iWBybo^pvBw`OBDw8`U5^X_47YCR3BwfaGb;7VbQ|C4T>HQ#yoI3 zuRqMbW%`FdOps++ppiq1g#TZ?|NlP&>IleAx4ptB#o-DHZcuuTzrt9cX$!T-03-^I z1O^5cOHT%^ninD9u1v*q_G7hP))muVTw!!#oI73nDx)@I?)31hjC!E)eTxJE2Jio! z;5Ip^1M1ks5HNktRq%}YwyTVK;1w^w|A7OtVtPO)ql6sDMv!fmnsZ-(eDBc2AmYKm zpaY4q>0;Ly9GT|;Gc$5hg2B1^}O)(~onhYtn4h+oJ4;UB| zy%-tmI|D!k6sQtxsDJz$WqBefWI>^A{eS^H0FK-N1<8Rh$f+Rbc`*2adj>BU!F@}x zS<@$oF>y@4a~CqMLqC@Ufcv7@T_On{$@>4HrcSyNbY_xc6T^~DJBC#K&gp&k7{xgm z7#JGm7!ve5rmwrlsLO2tnm)Du&%j>aG5y&+MtOZu%jp0E1E}X|G5`NxP(9)O|F0uR zkN5xodq6<~YEOV78?+8;dO;?m2zVM8DchDzkGRh$3z{{8h2D#Lc*^AP{{KDqMLi_l zfR2pv{{KC8`hxq65;7nkfl|Hqe@JH^6gOat9{&F^Jzy=P$n+QY8SR*UUY)M-fKhk4 zt1YvbWaEou1`Y53zdS)kdjJ3BXpsP#QK`NO-X&iTasa5a2O50^wE{p%#ZrNT0kobB z>iz#~qOC#$n?)l-QzGaPw}lJ^pjAkq z6?ci691K5IK*i;cx1dbmIFDh;OM3=|PDh6Fjh+m0jrI)FtsgRS)yFX~S}HKGPF~2+ z_If{qz>9hY1(4k!GdC(SG);_WD6zC<(5qGO)7hxV(Bl37$4pSc3n~C#+A?T>_RRi_ zWzd*t&yWM^rduR1q3=gI^Okk9# zhidJHYGtxm$j}7xTB0T=Oe-TuC#XjL-NKiO5p?E}_y1~e^$2q6Ye$9+uNxT-c>n(o-d+r4Ln|K!29V*MiVW>wix?O< zL573Eb)q9fzojEX??y(3ZqR7F_y6yfAbT9={h#w&kzvK}M1~zT4D~E)KmlpJ3$#SK z65I~AwE6!Xv@tH!4s=Zvg9+$>kw$xlgw99?ChblJ=8f?Tpo=+rKz+)I_6!NN)*k}u z_udjIv;!}#U(#vIz}Q{Oz@XL1z@pvB!0IsV|A9_h2G-742DVOF2KM@$uPZ_|8{|U0 z9Q11IHG?ZaUAc+&pxFGs1C+C17_#o8ZR02R~{ z$oup`Ejf@GmNpD5^$ET@XmTe&atYuy*>j#U%G7)R|GxoVDMR;WgEBv80XZn+|4{s| z=-9+!11=OC88(0u!Y=KK-v=2kfD%T{ZQ}}1fdESFKNuN4ytHKyc-_gM@cIvfg#La| zw}I))OM3n&OAI_(&kDmB>^Hrg}D zbjmR>g>tYNOq2)f^3m=B4WlrrykKPbfE@nd8mf`u!0Uqy7eF}`R2qVpoId>j15~&E zv|#|PCXNAn98{FcGNj~kF)-_Qfdf*&)`5Yuz9WF4-eKPV6~7)b%&7Z)deW~%hKg{l z#<*XN3=O{)GIWG$S{VFhWLVJfmm#B3mLcc$90rEh@(c!`rei1vTODYEtk%=JB2hDd z!7~2;hgyYDovN=43Ra~IjCCdKTdJn0J*jJ6T;ct{3_J=6s%jjYn8D|p)U_ zeuDS^O3=V8LtX3Q3Q)HiydnsEdPWp@+NnPEHdq{#@jV!$z=MRK%nRxhg2cT4SAbKW z{&WV0U-ua-K<5ces%P-|9nYXqlOYY7dvusw&*0%Omzl+)^#6a0o&Wz=B&&0PR!dkk z*E1+s+A#>!%u^DvOc4113oZ~{$?${+^UbP4XrYP|0Jfz`&fS$;db{j)7xh z{Qp0e@&A9+9SGI2jQ{_oMm`}_2b9PmiJFPQR)GPUz!|rIhU2IAq%uj=>vw`?YW|`) zuQ8rM!s37ccv+jnJO&Pn0~`#EwhTF-$XY1RAh$4{K_*m_t*+*|aYe1BbwwygV_c}0 zZ9%Q3a|LKg8z{mOH60j0k>>sX?-WR*zXV)_fC@p-sOFCvh7FGM80v3;=cgJ37(l7w z*FlB}pcDg28Q%ZPeL-Ob!u9s2E3AI)E(Yj;lY>>9!aj> zUjM@ZqzEJlG6ZxN$x9ms3G1Km7V3?cHVg`&`)xrv(Atu};I|Ef!mEW09j^{DOnCK> zVa97lh6UdL{~&d_89*}uD0vE0rh)PkC@+EX6uh-Jz3>I2h!g_@1Gso$@YQLw|Nj9r zc@?V3G-0Cs|LNVSOp^89|Nm%!!U2ZEIS<$cb2`ZdbGq40v|(VFXv3f|(T2fcq76d= zsAT;82V6p$z|_NNi>A&1i=@sI9*lY5o&?CESBVT2uNoN|z+QrT=l2d!IC=m7o5R4s zFnzNxli>6duNa+}3K^&Kyk<1>D+Ona7xfGqEE+&Px+3sc+>7}P4A72%%8Po26&4Ga zGQ9tnf-@HAKn{xr5WfgKVh<{2EE+&HYw_Ia6J9f#f>zjqN=Q&6&asK{%=9a-8Ff?~ z<}t1SEyac{kq=d2u>f^sm-Y-6H4Qd8pm|Ktk)a#e=l%elC{lCMARwfL!K&uCT1l;@LI7wC zv{uziq}JW}Qq55#kyX&)9T+%3bC945aFp*czz?DU#YnBQmq@MGhjnv389-;1eyQYSP_SeW z`2fn!l7?On>v1QCELa7Y8T~CpI#0SQYPiVb#>70IKo4|L1}i5`!1B)*+UJ zO`r3QQDS<+J4RK|;DAFDgOB(B9PkWAee(wg$GMCKAQgd%RtyY|lNhGde^Uskf2med zzr%yUVJ<^O{r_8{j!g^&)=|@=-ZRRvI5aWxOqY1isH$znzyOl0UwMGRaT#Ys`Z&1H5wuly~cu zPfx%8p3!&uh98V9^`JvyK&K#qDx;do0a_l68Q`KtdlCaPXz^2B5W@wBx&N-zMY3-J z1wXWHz}&zG8s~&AW&|z9WMlxHW);||3|=_Hs}qUL2hNGp0k0JG{{J7ouF@i@Yk>!23V4{_ z(*8fZmIdjlW$@9lwEzFdBB^Ub%>yv|3#fduwEzF3W`U262V)92C4u}mz2pm{goVSr ze}6#5sQ3TZ;6{)4|9|jxs37OpJh85@Na~6JdBcM-1$@FR%nKqC;foL0frgo3@mP@# zYRCN*nEv4lWP}=?=O6yxVX4Bv2Fml(Wxg^h)Ps7apll5qinmB$FaTxmUylDLfJz5g zsQ~KP{!sicShv7Wr~3$~N16dX`wCLOGZ@s=g0_}qfqRUw&0p2`&OfT!!=O+Dn&w>m zy269e2kbHMEaL(OMvDdpj%ss;1O@N^S>Q^e+KNHJ(wsq{rUKN*W4ckz#h_sEmx0BS zi-BFwhJgXpNV1G&;HhN@)v=6a-~bhqmI@4?K-(Q1CNZ4=4ZK_0G6+~TFfds;fJVNU zS}Yv|rb~Zg^yL60LQuk+Uhs`klkW~>9d)SN0lT`Ro2M`T#%Nxj0&c>96JQ-U0g8Zv z9fY9?Z;to>6!6{=P^2}+|NjCi#y|#GXzFaRNa}jw z!I%iHDM4}|Y?0K>V14`le-Fk)@FD>#eQ5@EE2VDmTJN5D42*Tk-4z~;iQs-?{e}+? z4)gwl(}P9QR0$8p#Kh@yzB9_QF9prnf0Lcg@tIM98RV76-x-ZfGQkPlVG^SaXc;Id zLO`82@BbO#t}kfz#G--0!25qHxHJZ>;IFBh9`}PW9F!G6uCsLD`0V}vFZdi>Fh7=o z0~7_5Wf@o|%R*`>SkOC8`s)Bn2jF>xtBXNJctsk6g2i42ktoZU|Nm>fj6`Y<=;~P9Wss?LFx3IA z`~y{+6Jr@fCdM+zSjI9)Oq2!3Gjq*@P#y38e=dNRyr#^qsB@kSasYU&!2AEdE$|Xq zVEU>KM(O%`*ed33*jbN;9*psjsrCd=dnFaTHW1R|V6(7PU|fB$0;ut;Fa_-V%=@zah$0W{I}(~g0|`+qVxw!sbJ6zPf|b)e221CL2T zJ;Q&{usA4yERwn-JQ(A^ndU_u0|TT1l?+~b2P()R4XBi_(;a>>Dj0!+7^LENBg2MY z4;easGcrv0t;jIrwKod;f|5L#`kzdba;P_EDz3&&Jf>I*5F=(-eK?GFZ z+8h9Hly*os_WwU<>s-Y#28HQoele=nFJO=ZJ1T(zv}T6|v{DkZgDs@%fE_570=k^! zEN%b)59o5UtF#5J@d~cc-^;*I(8&PW#L4I|je*0li9yA29)p1Q|3vWNL$KLVi=^%e z9*nWzyz|lyywZ{x)OLEk57hmDj0M(PfF?fc7&K-wG8AugWGMM*$6(?8{}#B&00$#z zJ!l=ME5I@b99jz)!Byew8U_OoMmO*Ts>K2Z0dQ2+{Quy==mwr2v}Is$2+ulT7o6oJ z2a2+ZGXFnVGB79vXSvyd#+yN{Jr4#3CK>SBU~#z@|3KH#iKl?ZU_doOt-GV16T|;E z7JC^a8ttZw{b5vQ-pimcJ;9ktlzA_M#`FuEOd?j+a~Z&!KS99;3Rh6jfn4n{k9h`4 zyH$mCO+pL9_K>y%b^&cpash4ASN&mB$cP73stgu;8B8FtbYBm&F*V^>g*wPIP%ME= zwAjnw0FnpEfy8YN=xc$*t>-d$fVLfC+RpSLq=iK$q=h*wrG zx^GxL>iz&)#_Kqb;R9$66E=ARN*kcPwxD4R5N#dBz-T>(fu(-d35V(^@ap$HFzZ0h z26+P#V2lyS0amNxtyodg$-wB)#HfH>1H+E#4*wWMqh~YE329-Ds;*{GsF=&3;LyY{ zLw`3Y-~G=>|Ife#TKEA9yzplS>_9dKKZET44SwbZ-Y5+VWOSE0%=_;%z2`rpC3puF zsD!j%z`$Y;9tFM%-rERD)1U(<(*H9EfNd$0uK1}8$_Ec6L172-m*YH!nmSPLltBz! z-h+<$1Id9fC=WR_G04<2AFl9Vj07in@BjbcbJHMKgQ6Vd>I6{y*c=c5U!4qMqQU!tAf0=b9~KK3GC+a- z>mWk`=!UWBIm}GbjJ4A{n3-gFUf%|dhX4QU6@LE*8I>&Y|9`UO|Nqtt7+gSI1FHiJOjeKj z3_!aQt1TH6tR4RS_F!N@8ey8=#>SMTRIhfr0<`PB-o?Wrp@oqFxy%K1{3_L^$FVah zu!VrTH`5oeF^Np~VP`UO3IW%&-v7^n8%i(j83aJ9hbA3n$N=rwfE0T-z%>d;9F+P& zb2yIk7*Zf73i0tyKfuo913oMUbdo;E6Oghg09u;-%dk0c{y(Dh`F+AV0kq`gA9(!$ zNIeK!B=tskFb06z$Dqvz(>MHwZgK?`(H2R)4IYdE;C$}=|1bDRSBs=R1`oyn@MHq0 zs0F#tVgV=(M1UJ~&^DKY_y16ERR`Kj3Mx4*7JzbV1h`298aajxiiLvH9jw1-k<@#_ zgV7&6a0Z&c0M8s)B=yelVDtwkMDPE9Ii@;*3pp`PCIzdxe?Sck{Z0nPiCT02IL>7Z z`TdZg;`KiU1xOLb$N{VDKv9oWJLXJZ!O0XP6b|lxy{Ko1fH)^aaykzelT>{exQP#% z4*_jx_x>LYZsNa~&maLBU;wQld{NH;YOgzZ{|^IqX3Dgi>ke9P%extJ8d-EPf&$yUO86QlS;bu}Y3jl{YxRX{7?xcbH zOQ7`N(8S>4{ofz#eNY_ho3@bpLWY9hdP-`3160g~zUGY*GeBO1!OHIgZj`#ln z@Z=aYm(Q8rz{8}J7YuGHSS(-w)!+=EatV^dO(8vbXoncoIrjb^4BpuWDvK;F85BTe z5vbpr^1OksR^hFVrLq7+!gCIWnkwlEOJ)X+N==q0KmIbXSUg~00dKs2$-Hd3056lI zyfp(`_iY9S%UA{ls{;%Sbr1Y>z`gRX42lj-OfJ(sc$o~7_y0douK*gGW)MM)|0k%0 zazN%0U;JTkcyXVBA>la#Q_TZiorY%&IiSuo(tN-XP){7x76A`h#xO{LW@BMu-v50k zPQSy;BneuK15)Ju-#2#}ACtJKilsfM6Yrx_sL9aa(DeU`_kUl<={kH&QuTd1JQ%&e zTWDX}FgUzKGt#04)WiBS5mdN<+MTc|9ni@O-v5KZyZt~b+v-^kSAg1F-v5KZE1s*B z!Smt?kj`)rB$F?G4VorO@c!=)j)+&Fn_H(JobNbE{W^Ty( zg@^xtKA;SsKTw#66jrsu4TxcU` zF_kj|L#-`?$xAH;f$+UI>$3MUFoNbr!}mJqRqtX@u$ub+31}`9G!_f0BRv=mPJ;Ys zDf<5dIOV@&US?@5z)+Xqs#ARmbZ$AzlUlD?BK504!^w<$EIA+p?v|PY450p8{mK9a zhdEq~OF*~hT8jREGd)3&Nv!@dID|m~TkGJe1KM*p+4TR5+UQjxb;X}VYVEu$EKUDE zvD(U@P`~wnL#=}^Xx=UY6!Vs5|1Vf<`+uPBfv--Z8H30|F$TGXVW7!0w9Ir3PiCqQ z`;W*?W(*4GN#A|}BZGB4XsM_txFrED2_eH(@CF=mwsLF&-RR;8xiOSZH6Ody; zqu2GFFF+IG3dri~9hw+Ttp778)bIWQ8giNgO5d=wj-0I_>HLQ$G!Je-nQ1!6FacCE zz$Va;C!k+9G8}ll5PVL>1<-&yXdxPCwgS|y_G@66{-2MD)g%05gPdgu=z6@@6{(sH z42haN4WRM_)FK0|AW79^WcX>qz~KG=AGl@*r2}Xh|KY*t3hqFG44251P+|n*b^aK#DDr`W-wNUBC@V&~X3s3%i*l zrmkQT6z5=C2JPLPfM%qL-v1BxPX8dxl+I`}Jwk*@nXzGdjR=$UbaqiDe!YIstvVYf zDl&9<|N9JXVS&QSgHa1y@PnotK>O{%SJM3ZJahUL5hg|ODufOZCV75PUftmR|NjJ# zLqTnHd;C3t>B2<_TDO&10zL zbgr<>Vvx0XJl##4$%Vth!Eqj=Odsd;N#aZ{OdBnx-wHLyRK8z{T6Qr4x zm;^1RH%KxCF$wZO_yP~6|Bz$~X1p*xK!!<~amn-oDJEscis@6Nn1UH!On(95?U~La z%@oYI0i;8jv1NLTG*b{0zXXV@#KiYz`X7ia*npPlB_MM?OrIgc6wK%YGF6F*S7Ew< zER!vxrgwmN71P(qGRZN{pMF}F$%nB7VjPdhG$ke_CLWpT335!@j8CQu zC^Jb-Una+7%lH7If@{n41qw_`Ok5q)b>x|}83Q0nisYGW87-hnctA>&86Qml0aCF7 zqQXvr$(FHa`UZI>WyS=E0+Z=SKt^$LfK-S~|D(WU$Hd74aWuz+=?RKV%8X~Gw;wMtB^BGYSBn8Fz|Ai^v*5MdUL=`yNJ z;fyaJ!pwWX!m7*@tPB}gYF|}}STQgJ%+g|zo5jzd@bcjQ0`LDHx7aZ;EVB}rKmEQc zlMkZ}L??^D^Z+#`WyUAdOVpTx88aXbWU&DUKa0S00d=sXfHISah4=pt4xk-lc1jG( ztPJNXbQv-*6j?GbffnLf8T|hfX2@ozJ&{4uaV|qa?bC*J`s+c%R}4$0KTu~9V`Q8@ zUxP{7>ivx_Wd;WQjbJI2B1;A(ho=7;Z(Lm)KY zJ0A$+oePMb?xV>hp#!xB8jJ5FKr-I{-w8lz4k*n4qNh*LWRj?d=y-bvB;x)5?G-3} z21+A&?k(7J-v8fjfXc0a(hHz8*mK_h-%fz?JD_v}l&*l%1yDNU<-z}<1>XPPCO`!u zpmYF~_JGn3P}%}Y8$f9dC=K>5)FUDwvFSBhaId}j021;3|Kn~RK)w40>fJX`@4kV0_YKs$Z?vKQeFOFH8<2ksy#K#}diPBPc(@Qm z2u-)MWfn8BSO7i=k^x$;7D6^miGgP|z+Kly(9WFIU_NL7%AtutWttqb#58^;R#2A% zq~81gtH0Cam{ma|1E4w$G@S_=2?Fod1l5O-`FYR?V~V96L&b|a1_fIOMQ(7Vzkq=O zv~U(QKQYmfpi|JQQXgR&URLl%h)6&{SD;B8P4Ll!cE46$V3U;wSO1sedG6j{hnv5}FX3}Mh3 za6cVXxq^0FgUs>%|MIUz0;pMN0Pcs|H!&=;o--f3SpP>2xTIL~dm)2khxI=OYtT~V z#yExq&~{75c?=qz_TUP3pMEFkJX!`9_=@c=4~JS?_AQQc|33h2l?AQkoSvY|tWy7C z4+Cg{a|2=l_d0NA4P+{4Z8fSFMZjM4{{P;~|DG3Yu9(19fN(x6kpCa(`>oxVqxiBE9_xQ_%H$o*;0AOWi3Ej8zBfDTxA zkqK&s=udyG%cKQ57YiC%KA`A_CZ&nq|NqK@b{=*l&l3RY?bMt%-CmDL4YVf!VHv(tT^0CYxJ#8QiavDPCF4#B z#86D1&Z5uc%qTj2jy{vZ^bCC_Bc_!HK^#r=qzbhabeO{)Snz`O=>LAmumY3Nik~3&cxpmWo13wi(*=8lU8P=)DPzBm0;W&?R z&Tr6)l7$R2>OqG)6>5U!T^RO&6j;VHFxJMiZvlDBVJ>5i#X^Px&?*|xsG0Zwe?K8X z^#6vXB0~WvzZ7aQGB`B-KLBzplDb0BnrQF;+L9m#d;ix0?^y%)Vrs$TIk43i^$Z{d zXqHTc8xC=piuZplaK^81e&OIa=l>OCdB>*zKA?TK2+RL|g;=fyUT)z1UklvShglA? z&-=d?I3dklF7J$|pT>(w~RR3mB0Br@*UkT1X4c`A3foEYs!xFy_ zGjMIl$lmIu$;9g*ez|L+@+ewzaf0#Gv?D=>rnc6>N2k(r+am2w2E|Gh(8MHT&h!RjCNYnR3?7WC;C>9K zfU%5Y5cnBuk^vg|2W>X5fAB@8mg|eoPdf$%OIwo~(EjoI|IQVlV?QR^G4Q;&Ym)IY z)+FGi?DTWSOzNVxCN&`KwVDhjp_(`ACfb_Ryx2RP%Y@05Q^x{yu<7B?6_X1J6sAw` zVP@f||M$BBl(WDhpaDy6MTP~|2OuZ?fCV2!FtX@a+CfIpLN(n$=TCyxx(k3DJJHqz zbRWo^P%k&TiLqezgy{)Yj3U#2m@pMH8cxqKWzrJT1_w~XdR+d?FlExU zWnf?cEe`@M3IZ(#0&Q#sjd4OIn3z0XdNK%riW2=*po)dD0}^wP6$mwZr;C{}Y1e}m zB{VW@0PSpj-N_K~+KWMpu(u-v2eh8+tA67}#FQL3Ubzk}YWB17Zz> z0BDD2sFwFVTQ3GCOMB3o6Ca(Q@(c{N3>*v-v8ayWnn z2|y7m0x}ph+zDD%u4l@?;4q2d&h#f{OqSfN;wjeu83bx}YKcr^V-f+MQwSk<|n*S9X}haAbOeIgBCV5x*94~mha>;Axc%=ro zKkfbhKX?}gI3Fo8TmS_+Xq=$2k%0p=W>Pz$5qzTb^bebuL_l|P@J>&)U=n3gnK-@1 zg2|3aU2ysy3nokOKBnp1mQ3P8>fo_a&@wZ~D85SMbQ4P^N6`LN{^>22O#YTOmhub= zpz*Xudj^e{@eB+#%UyJ84!G#pJYbXnotpqUGofNB`>|RsFOiyK+7&gYJhgtjVBnZ; zkjSVyy*GxD9myq18>jnNG06)uf~^GIlL=l>tm-(u#)`=jV(k$trfkO8=?2zJR!l4b z({rquycv&9-(k(v3)_mIeLK`{o$!?&s0OS_X9!c;2ir`W6AN33dop!K=t4s`_4FZk!3=$3V zrgPadDM)!&ggkGM1GRDzo-^3hYARl<9V`|8vz_tlx6 zW6z|nzwq~d28EY$3>`22F;q0hF)XN6cL=cP`v1RD?IDxJ3I+j-V+@S-Z3>_f$|*ng zO+RGM6v6Z-W4eG1lgM-dW+t}!KN+BW0m9bv7&cfhU|<8SXb15v?HFc&1ItV8NllxN z4rsxprPu!tHU}6be*9zTs8tUVnOw)P1bkTbQss)8<$+p1PBL(SN)C{7Ku!UTnSsm# z;orMW47~sUxdUQ@u=oF;AN8$42V>6r3+@tIBuy;vV1!hJ-v58^@&5nwA}H-S%=`NQ zq`@L-qJRgZIJi~d{r~rq=^N~rd;&n*U@SEmI6#LdSGqAMfd-RnPWb9fc+S8Ani^}A zV^nw<#~@*|fCF@lBSWo*C-@*c&@%A}CmC28V;FQ^$}lKQSP5Ec@_!4YfWP6uWXvcq zT_KoBy#5EMXa-G!fhWYC{suLk7a-;m8BQS2`hupeL92E`RTykQ{R&VY1XLk{avCUP zKueZDQ|XXpOQ>sRK=RfP7{L<{aQlvOf35&o23|roeXS#txB+Nxv!Ig$)J9H$t{4-6 ztQeDow#oi)dBMoAz(SE>0;sz&c|)3rgssB=|B0Ia|AQRp{r|rMRFYx(hk8cw>D8Hx zT%g7>D4apw1+^c3DE?0b&Ax#KKS66TK&wT-t41C&%y4XCvUz=%K>@TR(P18g1E`j@ zXfS2){x1zaWE@m|{OiVK`-t92SCaZh8$4I?fw7jMvHn-e*3!8q8>Ct^L3#`{r?Hx|G&$Yi~9fI zHQwI;Wx);P7xn)$AO)5bcwgI#`TrYU)c@~*%*o1tN1|WU|CernD3S!PBC!6?r~w_m zZ+ZQ1dXzJhx%oVk1MoTBI+GJn{jDH3zNj-f0M!nzbu8*k0<6J%Ouk&5?hwi(!s0NG zVbAnGp-eLM7Ih{a-v7VMwAjO70E%-^dH}8C1?_ePMfHn$CJspUcvvjp00k_#_4lIA z#KEEg#Fqd!buAJYjJ*GgK~54n{J8=W36kJUf+G@4;m126#{$R`AZ&BMo}uCx`!Uer zuOR+QTgVhMXd#Ql^bQARz7WP6pcR^s7-2l~l9NFIv_;-=9^(Pf$a16Ce1qQ$87e?m zEB!vm(4gPN!1($;xJkGNoU|IjcgHMv>B$iBx`ROhTqDR&cXDHLtv?IO?~d~rRY1W4 zzM=RZ14CmRgGQ~oK>+Bi=1Q%H;3IwNyBt7e8i&O*27w>{KsOYtm4I5>pf(4nSbn{q zL8DeP5S-KN_j-wdCM!J{euJ|INDWwR0|SEx!*B3JA}G5w+%sd)04-d6-N;Y?3L1-L z|NnzFs=btB5CD~C2+K7p(P<{Q+i2LxEMfwJpErb<=@ z1<*Q&`cAN?3qbC%^a9&0f$lDcdH-2JOKL3b7!*Ja?22P*Pe2oW7RUa7sL6tq;R z5wuwe-cOtjKCE#1cTXk-+0f?uCQqOxyai|;59CHrxAWD({~M;utYDOcFXq&q$Drdl zmpKNsH4!waZS{b`0X$*7kl{q5y~zv6zzEYF`F)I_fhDF|`&S}Xdl@Y1<5!7HKFMG( z=_R8Fr2p_X5)`_Q^Ozpg+OJp#o+Jm|ZqCTC05ln{58jK(Z1Y-*fx}jTnc=4e1A{I| z;Y%q74v?hdJf;(%^{Uo$7#OQ(GALBHu`7TYt)Rt$;JuKbV=u%*8a=`1YJm3$*SZH+ z1RPf|t9Zts;4tt1i;!av?LxhpuCUZ#U`aW~!C-ZlAp_L1sJp*O1eBd>4!G(- z7Dc?Pgt(WnVtS7^lUn^N5t|1b44@XtM9=?!tZEqoEE*UX>-NtQ0qv%03}Kk^QiP#n z!b=7YaLa{(fu+(N+G=^>tKc@WxR<)&2b-{S_U7T>XY&+pwb!C zlC9=LQ_|7yCp50e6;>2wPpCUqHJP-*J@za88V1+6Zz z1f9IGmqDZc|EuZMK1|wClfV;_Ad4O5F>1V+%E0lWltBPezX?NnJEfojWY7{W0r28j zi05DLeKCuH<3$x*tt}{Vy{Lk#)t%;beId+M7{|621g4RJnFtmHBW05rRga;!Rc>K=$ z|DO=>&@!kkhj|PV$ZbmSjY@N;%lR=$N`AqR z=xkATY-0K_J;0AiUGfRCbf^luoqh|b|HN=+`UF2Famg*H(r$M3EgwJ!P0fKww;)S{ zY%S?z`0vofkTd;*ACsj20tOsTJEl|*IyC~i=>gP)0Y#3r16aKbvZ0|?Y<8eX0b!7x zVoZ#4rYHC_iPvAz-vut`*VJ0Q60wf@|KC#c|Nm+)1_jW~9S(CD9Y95vr5A$(XxCn) zm)ev1Tc0cHZwHCkC;b0!ufV{RTn$>o$-oHe--8a^1+8HBU|@ikf!eben30|0Fpp88 zP=$$EzlDj}ah@xKfyI6XM(cYF0`+q>94hvM8Y~P4U~vXoXAAQe=%fv7;`M2_r@!}S z5>q=0YKB4L6mlOY7dXp+nzf*^!~6fk%=)9Br)vi=X_|og1t39?B*=2_|36NG90GF$ zXx%(0uwVzLf*KIhZv-%@7+5MW{P+I<*9RmE!u2X17WFMB7#!yPdjUG79elfvBSS-_ zCTQ2{Uxn!!flMmX8W`Dq85`K4vjGSHe*mRM&=Hs*BP^08f|f;qcUgKcvVl*3dkH%0 zFu|0eQj=W;G)m|FpBubl2sBIN*u=JG`h`FyaZT`6Deyj@f1s=6!Br;XPdf$;(7vD7 z`xqENOT$C}AQ0 zdq3#T8wL^3N@#>WR@Baz3WLJy{R|xS_mo6l*Ml}0fgQ#o@%ui51ZcAfXfFUlGlRkO z3qefcx}ZDN7(gvV@BeR4f>N^MJXX-DEMWJdYGLI8^%2FAS-yZamV%Nd+f0v6MjoWG%>h4)a)0RxX2benrdoN1z=Q6Xu(|aA;zF zVUYmpb8t9jg4_qv^rPOy!Eqi7xN`zZz#a^5z@3m6^(LT&u?(P2iuGL3s(vnT2dgFx zbQ*+-$MgxIOon=`k3s7NIY2J3jyLH5-5mj`{-5%K40oKzvc&o>g9IorL0QE;l*x|q z{`9s`ChK@e?t*BwHv!eI%%C;K-v6JZLbNjPfs9_UgU1m;Vn6Cl4mi$Zo&y?`fppS1 z!D$$jU|;MvIq>4XNx_eLlM@r|O)g9qFk!Ob0f{!+n^agVW#E`D@rO}?10-Uxlz|7b z<;NzR$rI$DaHcqUhk48_$f*?+d?78MgM~~k)M_eEXOCdYW4u4TEP}}&lBiyaf*j>I zkC6v_Cjj_%g>R0aFaQm+L3+5~3~Q2KSAgyhah%8S*t#scu^1QAG3p-+%M{3 z{bLsJWB??}?x%uc7}WPgE?^zzG4xcl3A$7q`_KeS#~^u-I#7xMi9u4!eN_+}oRy#{ z3e<2O z{_=qK1&c_4DkjLfwSA!D>OiIEMDPDKdm$TecsLn(rVDT~vP{1b$;9V2-=gAq^AnIO zK}&%_@dlfcnUKg(W9bMQvHAc1$3cb;i$;cmkYpCM9}gKyCNeS)NZJr+Cb{|t=vbALF1G*AB$#bhx3PdXFN^b7q=tkbVXG6{NP1OOA%U5Ug8 zfB`sXFPLr^#iRo2M1v-e8#U+KfIzfrcbN{g@x% zGfDow1kK2TLaNr2eG4dCRyu=gewW5r&;j)S|JSb!aB!FlyAki7rKLRs6X^I%&^TIs z^9KeA(CDwjJO+_QTX4|)t6${-(qJ$>BZf&~dd&+)PSEWT-v9p{tjT2G8mg&aR;&3- z1ayz3W7Gcwjj{|Zwf5{=>N_1AEIt1JuUi}dnlfGCIQ9P$T|9=%h)wK8j|1r}Y zoR~z+L7twFIo|?Icg}YJ(<|rOfao75=X-#L)}YN&Fa;8C)SN$EK9)%gbexL!|39!} zm{8>XW0{m0=T9$=WwK||>kHPd z1U=Icv}g--%y-Q#;|fs66Vy-!%~jRRQJ%g%j!E9^&sWf~wax$M+kgr}&|RA0nha(& z$v*<>n>`#H=76tEW&llqf_mdWtr-}8S~GA=-{8*-KA)3?t9mhmLU;?Coptkcr+6l1 z(0bLHc|X>H5+x`>djJ1>71X--V7Lc9UbEKbmq`772?uaw%=v!Ns>RB zf#dgX2Do)#YbGy9;++09o=H$@KIm2lP+l+e{{MTY#r^-_lM5^sO?fe0A%V#iIayk2 z{{K_I7@R5uKuHf2GoWG=lpJjyFffD0eHuA1G6oCj8AA&^blH%|Fk!k$6l%Q5CxYX} zIg!bpNedD$perX6nG^*>E$SJVKy^6i(oXOHe_W^ENMzDQ^T7`?e854v4>ZA@)EC%% zus;dxgU3ls_DmXk;VBE6@N7V1kCtBZE$TZZ931B`=zzpKHRn%HPiB&1WSIOfNo@K7 zJ7yjpP`3@FcBa<+faw98j3T+9cmNe05ZC@I{L#pG;>SY93pFXy6&4E_PkY zL{P5F}@rMV)XYlwksFnsLScka`F~1KoHdr72{~xrB;P*qu4$yUr z)(;u->rZ|H9my&I-XATj(NoXB2%7Z-g}V2@MXjLZP`@91KEaFE2N@e)KVw*abA40~*Ew?MJAY zrCb3z=HdhB95zs?3Mw^~LK#?<${1Lz<}hem)H5)G>X4c&_AQ{*QJ{hlR6Rga)t9}X zAOckx-v7TE);GUkaG1v!0jf_xsSl*blJoz+`c)2~bp{L&Jzrne)Ut1JoWytpG^OG= zkFj3Ep^I^fV;@68-M!5f^+LZy>WzPiG{!Kn)LMKJsj2)V0y@7Rq#1M)5UA*OoXf!D z{r`(2=rFRmatw_1`xby!-eo_iqO9*x~Qp3>@Go=fwXv zKr19z`#{z6e*sWI<^BJ2WqtDn2FH2-89+f5zE8od z{@yPU&{c=^_u03AQkUbLe>E_df(|T`H3toZKwSaqE?O`6{~r`zpdlAfxe0O+F4u^d zfvmCg{QtjxUx0(--2XWcXM8#fa)txs+VlXB8qm}pwCHDU;G5o8z$7-kB%R4g?Iw7k z8mO5B%4wi$a6xT1P|*r%Hr3iaT<87&&%x<8(wPjv%>q!G1|@%ZnqK(-1!(6vs2O8_ zh+!EhU4xo1KNSBvTHgcZZ_p|w28-W~3=2SMxqHt10R1@(pkWLJ&~;gs3jhDlv}2HX zUB@5*8VPim$4~*fX9;v`QccS*k^1=x3^nuEw}7e>Q2qe5*)AaO6$Uv5gsUHe2cZ~1 zwTJirFI%T~WI#$qkgl3mW$+afpbY$jk>P>|!*%eSi>(6#bE6#tXgZQ%@`8;uMF_4~owV0b{O7<7b=_y4c0zvnS9{05y)p~$dcxC=@{rqW)|qlllbE5Z^bJNCeb| z07W>YP|1J* zL8n~({s|86M1}&328Md?|4ctJrzhkvNwc2y{{Q*p^oATJmFX4_7zL-#t!Ct41uyQJ zek=zZtsiojz)NuJmnwjQfd}MLP>TZOB~a@M)UpEC361|BfbtON?jg`7f3SrO44@($ z6uF9^SOgvN`_d77-%kPP1T_6s|NlGAV_Z>d_aLBtWdMWYT*f(|aWqgl1F9!Ld(teU z{(q>ikNzYA8jr8$7jD3s4T*d{^Ftw?V3J3sIGIom?mRW6`Z&5!BRH!jJ zfGXZjulWI>RZkA{7!5!b%&V^q0y9M!B=om~2LNk88{4e6|NsB{A;XP&`NI{U^H@C? z7&sbD!42&H)sGqK6+lq}if~9&ypaUmtpm!ab1fMd>!{Q5CF{u zc>n*!SSx)>q}Jn-2HR|_z1k{IL0xw9Ysr@C=GoOJG zRG)bNe=l0U3%r}_jio{m19%e+xE=rvZiBXBJ!H56YEsn9I}rfdeh7+d@Bcq1T2%l4 z6yCyO2Q_4(_y3QzpmPyHXCi{?3{a^Inn#)*u!2!!x=A6EfC$*wgA5apl}r~{!6*Te z76hHl4H|t1`O5qMkDm~q{fD0(3(6|f1$>!ASU~q@Oy7{g3_e+(KMoW(pu}STATtS6 zawPxH)q&=-MDPDUI&Br411vzr)I)}XM9okGP+kHpc(phn{~=W~C*PuhAuv%ho#7{V z-S)emVD$?b3SJ*%XqfzP`n`N6F|d9lHAi1Rgx$9IaVIpVfG@SQNSgA)`~PR~S^PAP!32;KB_`fR-CKB+s8-U%=$S*gE}0 z0h6pgXt`Y+`xeJ(3^AZ=>;3-?xFre7l674#7;5T&SA@T0vjY_}pzh#wkwPXzMuzEb zg-rIK8VHx@^WgDNP)xvZ^&bWWP=m?3hJg{(nRcAVFr}vI<2ulG{+Q~M3<~vk*|*eW zJ`$<5_7VZ5m0EjHIq@32UtW73BLnEDX@{o&XFwNwf%emb(wGOs8Sqv&P{ReZ00h)Z za+vpjhV_I0|G~Ya$GjRCj|yr5;py z!-AsH1|ukPYONqafjcB#f)~hwLIUJKP)O8OrbODjnzjuYp+gzeIm7XesM|@Isq`8W8r%k*D(l$9;A64- z|9|Vhkd+bj@h9p7>i24ai%XElK)9v~x!8OG&IlpiuvVeG4e~ zEgBeXz5hQ4pBz~|he6S?iNV48-~a#CbN>IYp2MJ^yq|%w{@x>z`n`wXcAyr^BG18v z2)y$II^Qv2I-eS|9tZR;xeK6SI`Co(P|9&^Vq5`A+OWY0c<|gcuBh3k4GtbqlCQP* zh6g1ym>j+T|1t!P*@LDJ!DkPEhi-rKT0j2(A9RiYsL}ytZcr$IFend$*0qCL-Lc;P zpMiJ2gKnvUrnV>bvrYt9gS^-b%It5Zf;55JvNh$>6%KP5R)7o!1qJBxP0%?opdhLK z!Jtsz{79tk#)SaT0%!QFwuDC6Cvef>{r?>#Gq%p#IJSaKKwvGceXy+z3FZ4z5Oy zrf1M-f~bCVkf8u{<0$Az5%2$Rz*}@`X1)>uMOn=(g#bw9_5r+a1ePH{v$@j)b}`9J zP6*_gUQx~@QV;5?f{FmpToJTe>gd?SECUXI&{emJ3>~!+&K005Z$V9W(7;g5ZtaTS z3mI1YKFF}4=BG7y1{Ku6_Wu8?6|@@7v56_igW)K6F;xBH0}PJym~24t0jga|g_ zKWss>k@YFJ>nlKqsemNB|NoS%Pks;pD*fxh4X{_>Lq;G6-Y{k8Ni#5j&e(C7$dFO38ER2@%3jgfcqPuJJuZLGDK91GbmW!{QuwL`~UySatw?W z&lwczC0>ctTUv==>$B8Ud=dejdkCsQyzBozfyC;*6W}yZ|9_VV$lyxQi8h=JjG)*A z)m!!Qpw##HCCD)j6B%4UCn{S1`u`u)>H}xMTc1Sg_nrcW0&3=ajFR{2f7}uQWdX?8 z{L7o*W!Lp{et@nE^LYh2n5B_n0l0I6bOkP`SOax-rvIp9QUK4tgPeid_j(LDZDtOn zSqHix08Jj^O{l!Xy#GhM|0B+l0+|Pj7;w?Aa=OBU;RtxiJ|q+V1#R~Z0lBK4h6NZw!;nq zik~qH8@&HL0#6EpTHUq^3>-hQ7Iq{mGq8C7dk9{n_+sC}3Xu6fG8azJUkYk{Gu(Oc zXJG^AVB31fc?=g`+=boy#&84_T#oY?_Pms5U`R-2V766g0Nwh`0jjGKH3dKu#K%CB zn?Gt9G-{4{S5$JeFj*upihx=@-v9Z*lPxtVplik%BS6bZ?GqXp>>C(3lB+ows;k+L zf$q?-NMMwy_537K>B?ZJQ0w_ot7hr#3hR3uV2ix}^Fz|Xz6YSaCs#lfBPi5BxBG&Q z=9+G>mq}#0!fZyN`l%is47b2bt3XY~7s(4Npsp9NXi#AA{`UafSBJ`VAmjuP z1}ZlJDkoyoz`&8v0t&hZ;C_1jX>Bf8~;D3sgbS()tsQlgJTn80Jubd$gtwKB146}LIVS2NPA%ksNs-o$-w~f z6X>E_PzwL;$k1TTG!=B-W=G8~?F!IIK-Tvb7F1iZ9|JAicxlHVQOTk9q~RX}19({k zXz!?}gC6Ko%GWO$IDA4q7#K?392n|5EEqz)SnO)%2Z?}I*E%*aD1a`Ltna)5n&9dI zZMy_j*B%T9!JUqVSqvQDE_?!`O#Rc-72f}OVy6q#Gl|w~Fepy6V_*U8^=h7G%yJnEL;(&hFGm`u`~p{q9FZc z1H+5G3s-<+fk_^8k60s9ydMK}xk)4VkkuLB6+4F*mVs96 zfG(v6RsYtC40)g?6v$T4hy$p~e;LQXVBNsLWU0WwROrQ^y?)w>PAv1$5#EGbjkR%mgj6`p*F>OJ8a(Tu`V9 zI!B$MWFaF%iKQY#k;N_smW7TCMV0cP^Y#67K$8Qt4Ej2uUJY_J5Bzv_7Ai6nY`De1 zwBZ*6!?b25Wd(TBux?-g?L`BfuK~V~8g%FBi=_*v$2T*HI)Kav-F^ddGl&hl0RWW# z3OX5B9Gm_}WO6Vvc>n(o9dUsiP-u}fBfx{<^3LgNnwgYU_rOyQJ7jg7cC&ya=;AR@ zO0!fDkg|9*^~dx-%}kb{jhPZ)3&HoF|I}Kz0+dui zCo+2f|Nj7LIG6$%2x3h)2_K1{c{49P*@0?P6K1(5ZiXaY?% z{>TKUTmkF<3l~7E=|Jy)*TID?q-Dqq+9eD=3>P#s2r9rl7(t1&gH&H$Z-Vu@4-X64TS) zF^bkZG%v>AV+LFTnvUv5aPR)zAI-rFE^?SjSSV!vjc!8E{ zfzID^s9rh!R2!4L>V5_e&=xOH2!OVDfr2M^nVTJ`(O|LE0$iZH*gu`Gok^T|KLf|~ z3!O}&jQgkCwKIt`?w=mk&Lm$CS}T?SKHZT8w1mQ9DI-{y{d@+N`n#VitmkM5SlbH- zpgMjBxPy=C_(vkvbFesmC%7qpr2Zbn@u0L_eTqQ|G7RR(u@nIS9dZ=b6x-kIw*0^?_?5}1ZOnRshrSwgZgXV z!s+KbnZ%hEu9)u7&LqmTZ{hU+olK&jd+N7@w6W!Zk_IgEgK`!q>_9aHDEuszhOmGF z$0nfxI$ih+lx?`Y|6Kt0S8Wnl7`*@glC?-+0EvNzg>3B@IBXU$aDY0D2}>OmUSv8b z)YM6dc>lW!PT`;kuYdfT2UM^KfZCPb|1M9LPhpe=AG8T7{y=#gl(!R({jUeP&ins= zA9zTBPg-PPfR4adf@)vTCMw4!#tkrEfObQ`GBfD@c#EYPNbB$zEkMnCP;qX(cj1D7 zPA570xeOej6Gkgl7!-6sP3cA(2Z8!d1qa7@j3&PyGR&~lWN56kS9?+$`%9!#i-D&Q zvZ>!-dPp~uVlsH<08*-hNrc`g1bx>pu3$HfHvbxiGX^J9t>O7P8aB5N;PI+U;sHC zRC0ry4l2DtP6w4m$gXyn_wUMU&>_GJ89JsXbTf$xBe~G}!2kc=|NorFT ze$XNw$0o)p&=8!yzK2Pb#bF*}$n*z2Okz^tlm%XyX|dD-oLeAe93#v09lcDppg05j z+=YQL)QhbyH0FR^V2qPoV2qm`XbBK#LW{ z%DT9hNizVnF9R1i~QK*+Mtxfo9G?3yVN5gKfaFfAIf*^8f$;K`mF% zk<*~Ip!ffOf501Zc#tZ+mgymVOv;L;5dSlP7XpELm!OCObxVGqT)4u6VdK&1Gy0fp zKm#;_)1M|Wii7*ypru6?O|t?Z)!@HE@bZUL=?c&!5q#N$BjXRyG6>M}2M>ll;L~YA zEg6f0j2A%7Y=ve<22ibDlPM+Q!EgXvP*}|W{|lrBG+niHQ}o&shL;h%&^D{}U}9G8A|) zl!J#Lz)LXd!GmTlHK}0*pn$cQ$KYU*G%LY_;W&6DGiaC1G&5!ia9#!-;s#O#%JHB} zyFqiZps8+)hYTGS2N@cEDl#;9Fw}udjTem!4Iqz!N=?Uk|5v<7Wa#q#|F05ipz8G4 zPDbwOJ0>u>IIlxveBYx>I{pdSr0rIj)8;0gCQ2Y zio^qSzA$Kaig3L}(`*5VlB3{@Z#@{Mf>)4(wA(u|u;|$_FzCuLuvs_F>adR5|H4{< zfyL?p1Dgi}1AI9+NUdWZ!v}{h28$Q9j6tAOFzFX)$6F70%mAFQlW$jeFiZu{A%ITu z0rlkc=l!n-E%T4C{{R0!sQU#T(RuQ_!h_)`ct*v8;WBt|L+U5CSY#hM3lL(fo9OuHF!W2v>l}J{{zq-FHq_Om2;q0DQLXjB7tp3 z%^c;5nw{G9;E^NHh$v*_^q1j8M%Id-j;skk64 z)_^N=kZ-_45=pZiJQxmxS7uu*V2l8%u}EZU@L*U24k3$!tOcNEELa@0Y3$!Y$mCG- zbfqaw!k|-jJQyxKoNhCPNv{4lc%;Mo-!Vv^^WSlB*nqO0Klne#`~R<04+aL5%cY=d*esgnSy(^#Kik{- z|1U>SbJU`NZHM>26X1ORB9Zxk2g5dSll?^^^9c`zZ4kdIvVy06VF_z;L8Rz(!>LTV zO0z2_Ix=7Q^^mpWHzVtW-v?O_crY9U&p%isvKDwSs2-i(FqKKHeiL{QMSm6pgTq|5 z1pQeI{~hPDnOGlWXsA~?T>&0p2Hlg$uo66mTkm*D1QeOpip-$v`oM7k8eW}g1u8~X zf#U>}&^;K$!IJ=b$_(I>haD!dov>A6V6k*yV122%|J6iC78`v~&#itQH)zuwo8vrA z1#3o@2ulS9E=vank%^8hJ+<~80s5T`T%bh|An}QcETE(LS-?pb9J#B&*#KlP$WX9> z^B6zqcY;bHrWK8fEH`(M5-C=ohLU^(*YA#2BLM%D?h z53(Kr?fruKp2Y(0`=5#+-+TZ64>})%#UhcVz@m}0!h>NYc&7oRPUgz7RQUgYq9W4_ zuzsjs4+eKg$yN`#{^{Ql>w~Nb_4P+SS6C#nB!Eg94~CVkAcug4jzO+;Y~q+=(a4hE z!O#XSx{-s7`1xiy6^ZqG->_W9?1(Jt3TTty; zu@>eAhk2Z98o+5)2R!)c!NBAI^0-AJiwD^63m61E7*>EwR*<_K=CP+(DljllRAjMf zSXd8Edu)i%|2`EG`hP1xjt9BjVII>HsKyts9a;K78(2IT)`16pZIu|-f#iNh+DwIl1y(P7FULr3#LG{ZLaPbBzUO;AnS7Cuhp+JVt zRAk=o{r~Gun4u0686JQP0~-+MCGw(+K>*ThVVF|i`~bXAu6_<^tqzYteYKPb%u)}A zCEytWxCJS4?Ojt0VyCCfeUbO z8dwau4bmcMo`(0oQ{aNuCW&F)i{$!;Cp;K7fSVWI|Nl7X&j&4AV#z?w2+TR4;=^Gc zgAOQeEfSeJK!$oSw1X`GI}DV`lID1LFzf~gvHtx3{~YH1j%ZlO1goN$ESlzISU>nb zD`W+mUB&WaN)^l6lq%|%x-ohG|C|cSjo$yV!R?_}C`H6i@HGq85B~qONSb{BW&x_2 zA1`3l1*ob3Rlyz%OTcNw7E;=?R%$js0hRuVn&6V(=BFY{hxh+q0`;&|?l|wS4#*Lp zf(w)tA%z#4hxflM@Px}tMHbMJR?Lob8B9QO4s*aXqr<%48lZXOQ@PDPd<5En5|fi(j_ zK@Zw*?!mwZPUYIO7#Kkga-7GU0SXCND0nakfDd9#kqp3ZWkk4UJ6TyY4KK<|u@;v)NU&9aE}kZBwdfabxme z*a0rfz5oAN0vgYUSpq80Js9}F9W+psg4W`JNxi!`2Z+dL7@l=A%}VO z|6YJN4wL?=AO)WXX!y#5VIjDn0G(4r$8%{|@daSR@#5 zSTxN6t)H6e{r`P0C}(;9O9v-fl-yDO|0{SMk41t3qeask25|fI|NB^|2JnagiiZDR zSwM-+qLJwUxG+kZ^TUH-J9wP{s8F&hNHg4{l_G;usXSpm=qd_w@s)(DMHO9ejctXhzE-Y3>YAYs`aT8@SQz z{r{H?$Q+ACrVdE1Sx}k4P|v^sas7V*P(uh*wu2OTFw6&!n1il_05=UEfLht?TR=hX z{r{Ul!$FoFaP!Myk93g7$7&HfW*E3fBgb3s1`7AS=57% zj#&ck3&Pr?6B1c^9OnEv9J3)Gsc2PyVomqR$XII0GSUdmg~XgGPv;y@;Rgw1dRsG1*dvg;o`x- zc@dPI^tZu^Wo8FZkqj!Dz5oAP0qXgB|NjQ+TrtD+fC?Z`qV{0m1h+3hQ>nI23@o5R z2~;3W)Y|{T+y4LW9uI~&;8b3BV{=7)*k#bcaw(v7mLLa#4D(>%0=Ixb*{ELYbcH1Y zgFd7$!XPvK&O9bbkRnJ~%?Ta=f>j=%BTSIXYEZ;`FmQoKD?srB3K|avK6oC61PRLo zP;i4SXFgm32@%E{9t?B9@r$sF1Kb3+H2eRr9yHPjauLW|j`Ns&kSzsi@L=Es4?lq{ z1SKX9243*m2t+)9qXCl08eoeZ7(+Z5W`n1_L1sWa$N?Ua2L(IGF7N+86+9SbTY|&4 zUhHs1eFV1P;{C7sHGv$mPG}q z)B;%wier$)j`RL)@nDz*b|5IYy#IfH;=wQrJl5m=|6hRBt^fZ(S;71NKTsV!3z|Xy zw;)`}2JR(;3VArT+f|HGjPS zLk{GFmd7U`*pz3%F(D{om`m0>}dI|KD{W^zRrbZ3D6ZqItH22g3$%r2slB z9w9zg!GmD~ID2^i|By5NKoyhh^t~O79QAe56`%`oEEX_;Cm0|Dsee9NBr=`wV3-L` zM*5HuhCiUAGaz*yBS;S100WIRTO=}`sDJqjJRURCo-x9Mfek#S1!^OKy3i99nXWiC zvFrhjLO9N2X|XuK-~d|d4vL3*kY*1CHgGz(Xk-HK{qtbp0{2@$k>@y%Q3P27R6Tg4 z3rRh=W`L+?2?42r&a_|w7D@nAc(_e}Dlr-XjOLuQOC-&2z-%6`1qYf3gRE=9PiM?*a8kI zaD~j!;lVHsoUR%g89E>yo__$-pf%t?1E~Q``gky?f-{Eqzm4Du#MU7#t&x%GN}^X< zdaZK6w3_691+|)D1vSYY0X4~v*Fde4dhdT5z%769lmyZQod<&exDn^UpbGX8Bt0?8 zc>mh~?(Bg^3P6@R&ixPWyg|xgF{(5qGTi{N9p^Fp@L+(P zI|&JIDR3ggAKt6M>Afd|8C#@6Y7Rx?S}&)?v|uo`SR zr~n3qI}C%`t`V#SGad|5;KtO1M5Y_amVx9w7^J|}llT9BNMS!e!h>NI zIBvZE{{vrY1nR0-B+cjWU|0oC-QNHI<$&~qhT$!e<~{IWSOqQw7?2vWCFu_PjM zI+Yn1v^yDe9Op4afT~Z&c?J@Sx?Bm#hAB`RdO&-B6&{0n=?vge8OM1H zGPUkbBE1?6jFs^W3R;~EIv}+U)Be8z^;c?+8iS7w_h9G;mwr%tG(fF!P~lW-_jBC~ zMuzGC*E6|+q6ajq19Ags+W=^n3~0ABY}Th{rg8Rfx9yh@u{GOx*&sgGiYjrVL?sh z%XRv@85pJ~Y-ADvt>6%_-U~iF4bmL=58m+32{Im{y$?M5X#uTOW;-%eLd2(n8^fT& z9>VVdx9&g-p0qm|P;s2}e~I!v1_h8E^>QB!CSM1gcnH7kSrBwMF6iin z3$PiW=?5&Cb*5iXVCFCY#Q_XkG%&hI@DDst2r~`ry9ErKAhjM0J>dQUh&}rtL!}2pH@LwA@&PO}W-3p=wTVf7 z`pGIL{^=Z>nM^^AAoc*z!V*vbfD*wEMc7PtC^*1CWh^McfNnR^Z~p%mlmS2qvnEx# z0#qY`5~u~rBzE-9>2o$SN%1Z4@L*U1E{CBL*Wj6O78#IEkOv_1pp)1BTis)fJ$@W)FrQc+uuC zkD;SZqPe2}{qG7;U^>qE_r^kz5p)2-bnR_SQJ^9YWOz;0EfLT*Sy0azWDe*KNe_k| z@KOy>>Ekeup#ao}tv;!@q)yCJ%W)oqLLGB+1*p&J!O#XCJBF&`0A*Lu)<>|N_dwfE z{+n1dFmOUV+Xn9MfIREa^zTSL*s{f|D?At$fSVs6O`wT3u()z}g$F}7ICP+fCxGS? z9Of~&faQ~CgXF0MYZm2jo!4dH-9` z^!)Jt|4#$Dlz_28X!@;iX0GW!wlfurI(RU&f?ELE%?x)y+fW_nGAm4P*uf+o3NEBU z(PWXdFv5djKDc@FqL$GCWSQeUh8WP^Z4ZW4aN`TKmk(4>crdg=nm-j%BHD`?LHCj_ zc`=vK0a7BiDo)?9lSxeJmnLW@GN|BjoXf}n8ccDV$6!!*WHYp)X?Y1!C(ij1qJ-hh z^p2fON^GFjMw7uth^wxIO0_iFGKPT0{v78qf}0&6n=G0ZG^lSn8V-! z+8I6FW*3vibb-~3EOsC_)K8ZHZ6>m?Nn&8JNIn2wlL7Yg0fuiDi{`(uXj=HfgJCYX z`R9Sua7|#CF1Cv)vA)InE_n5*KFIU+_dkO&Ie3H!l-5AEe1bB0t=*3R?UfAY9Op7j z0T~W);zH020XW7%d=G|ZaFT))=6@G}0vAc`1?&3^oYwLTjG(H&VJ`y%WaN2z-EJn{ zdT`>NANT)1==N~X-Xd_-48Ho}``!8-9~|_W85kU={@VcBj|%d&_y2#8(dMKDA3PZ5 zfTyaUtH8j^eJqj|R(LSX0e1;O;!r){dd?zg!3htBIpEX)lJox0^iN{?245zT=`VIO z$+11W;K9&ZI9-5|Nfdl8u>fd-4cu!=21~JmPBBy90E;F+yfD3?fJt_`?PezSdiz5R z>p*3$^}UA|Ku5b+|6|~=Sit%Yq!|=Mu*%DWp#_|yKy@Q%x(U2!U;*np?|-vfK|ux$ z`UL%E242wW$ch>U1&6r|;6^NX`C8K=Sb7BaU_j~FVIG5Fgsl?8x`mn#pJ;b-usP0S zw8+)^|6jkW?XKfIhBexqpyTmDvw{o{Kj}=y;*))NBZ_E}g`#*r3 z?7`3i?!keqaGduaG@`}^8exFS!4JuGocF)PQo-05ByO<)a-hdXMNm(#1>B#3>JI<~ zILLPI|NkL9zdipySh!byOdOy^@}PDqCP(N>&m`sb`~;}Jov8Kvgsl_9I_tj-0@izN1SV=dKLg@JO)i|M^&C8^4~pZ-_y7Na z1{NDAeOUizWAI>T?45pKKa-S@{smhn@P_pXmR_YDKRp>3raM4a{ju;^sxt6tuVj4( zT75HJFtM9@EzxWKxy@wTD4Vj=}v{ zTLlJ2yC#NpO;ePoKR?K%q6(hWn>3Yy4-}%{xwKLSArFRnaA7sMltIG#|1aC=28Wo$ zMZvihbUKm60tPM68a(g+e*&k+9Ac8&)4PwCB_74>5_cbvigqRC_*s_8}%0 zMet;h_y3>ZTxD?+bOtjA1E_IlQDpp1%Ju zlNjj4HBcy{hA?BoYet3*uN4_~$RB58u#AFq!>k@H@~A)cNyPjAkHqObN0_7y!5Iv+ zloV7}Sk!^`%h!Sj^ey%>@PStxEM?yUanCPsDLTF4Fyu%cPzw|`W(aCzb>TAAklpFq0-jgUx|6XA+K`nSS^PlQ0uQ%JdsYnAGZj!!zB+cm^r&|G&XQ z3m`wi!X6eEc8?fXtiJF60f~cuBGyunc&Wb;Bmzp*R{t1SEM_urfXA>GfL52*fQK+3 zr5l3)%pC9ke{cM1WSH=4A;XMc$p;x0z%rrt|KBMV3IG3r#*;xsA#Bw%Ofjew`E`(C zfjtw$I%^3?PV)Z$8(eRps{uI<e0bf2Oyw)y|9{MwF2Kbo z0M4nOTL=FCw#o_&iC+Kz*LQ->KvLSQ-A4>&>xQ!nBe}LwFW@_#K1#>v4@C2n2P|624K^8E8inIR~$@_my z)KUgr6Ae0AXQBr~C8&~~zPXT55$2>DU?;JIte%jmJbnLhCNa>(nxKlcAzAqWs_cJM z**nu8*fL9|D>E?EYO$AqN-fZO4olDf4WV9acG_JG_6~CyTr4#i96~kOK)cf99p*BC zPAq1Cxf~S#HVOa18zo?3HVOa#CnO`pKzz`?aj;XSuQA5JhC z1u5UCvFEO6IKm(R>Z&-*WB6g~aQ{CzeA~e1WWKOfcn`j3roIhy;33ll{WfqdECcd* zqo(o|kUr4GIQ5+d4i58}3Z}=LWRhV6xi5iXdf7=P11lz(g?0>Vgd|G}dW5NjX_XQ8I%lZA2&EcQ(d>#XNIKLNU3!(ko+=seAJotm02JLMQSp<*hH zHcl#yatu6BzDT2ulLqJ*D#v+@93V46!@nR0fCd|;i&Qfzf?61zb_^nm=P@vW?g6jv z0-Y+#C;+)5oY4jp3Ls4m^ZpAgv}2Hfv|X;0Im}~tve1q}N*`RtGTZ>yUvUgPjT+BS z)OUgI++#Qb(hJ&%4N8d&*Plo!$+o0q4C9s$Xu5zI!&H%XvdfI4!obOv?2O|GxljVYXky zunv@|LDiY{-sdM8RTw0|S9H!}_yF1}2Ra-Kbe05YYHFbh0~;veInHBb(e4Co{A9QT zDj0q+G92*!{|?d$2NewSLDhQ+xP1pIG9BhI`ZWA!-~(;0cbvzx0CZk#K*L=I4p2^T zoX0c)w7pRNBpU;0e>7;jVQuUukwz~Dp875e2FG~}J8T)woJr(3a~6Dr2Lohq15M48 z=^W>nWb03|fi}p4hQ1D0~n+30dow91_e22_aZ2?tZf;1 zKp_U&ZEmrEpU?>Dn$4=hGzz1&BfD%R(C}9*Xoxb2alQ`qr={wFd zDb_=y1{C}t-@<~``mc=wsNn;$2-JY~U?>FF!7uhY34zRmG=|=RM|yw9v9UlB`~M{` zK)cpqQJV1oKgdk)|9@YAG65*M;iC&2kaRTdDvR`zZ$FLw*gt6N`m*CxZ)U zm<+1T8FY>oD3mM|845rl1xjaNBU%_ZYL>!`P>h{kaGXg5oa8|&5Hk9vaKl+aH$Z`8 z!TM305EeUq!X+kCMuzFfE-`5^nfgNdU=o*^e5WpD5}96knW>DicKV0QOsR|v)5ESX z*@HT7;H0_ubp>b(5ooKJ2SaAz^fgzQGC@~1f-C|LsyhC^P*W}qA20=<`_!yl0UCS- z%}z{rxXL7B{=<<$!-F9cJl3u~mw^RT@mn8eV0E0w7-DsR!N59!LBsk1gN8K&gN8*i zgQR^E!+PsE`qTTbGD$EtPG51A$ygS=Tn)5^)Po@dJeLGA$kLesbb;!J=|8SADFl1} z{{tSc0qRJebDi8GgTQFK%?9q3~AuW1(5BakhN%96yd>; z0iK!wRU)9NDAbAgl^j5I>yCed__p;c5+0K_MteF;p7L6%acrc_R%|kJP z1S_B#!KG78)%0gKm{jW@fctkYmn%SCuiy7d#DgIX+;IjqXRPDcI6y%K(m2zWox_76 z1w0@FQtQEx3ZA&qUJROVV)CeWzg$uO>Nj||I>m>DM8aY%q14^m^jk3#|MfyJ*YW@?##v1VY9 z^I%8;kCB7gW*+qnDUjin*2mD3Sr`+*VVn$V#r*o}{jUi;Chh&N5gbRzH`st2*l5QA z-I~F`;W&#arPGcBTy2786C9^8Zt?!t2#ND%&<+{K5=ia!5S&Ol>NsSkcidtUm_Fwg zlcW59(7eDul)I83Gun#^JQ!+Or}x}uvH|UtWT^*5hX+G4IKPJ^v)Fn6|GNa_7#N1i zgMArN3zi2DOv2?s(GB+C&zau;|1ANBkn`mV4~8Ug+W@2vYITPPLk+m91#b;}{2R1! zefsR%OuAr~xL8{J|6ggrpy<%_4_x+IG%(0nBrW>j!B7p3KhP#TkZCY%F^_`-G~WTr zz19yvlXt0(2#@hVEnVTkP~8d<2Hg_vJC8#Gs)+@nDFxh$^Zx%2e54h~Fi>m4qK*TU zLZNg2e_*@+7-75rAdZ-R><)P5`q>>OInenIOF#uRs4M`L51@fl(6lgks`oJi542ne zT&T>z0$OJRIwlfQ^jiD?b(cY>%Pq8JU;#Hy=Q31)+W@VPD?n+>`~TOQpyMt$(as| zY7P#I`3zj3SoL5?0uS+nOhPstHeU-08t@v=`3zi;ApgP>UL^e+xAAI@1mAGpW`? zXFWj`vsEgjxJ91nv|6;d0381d|GxmG1&{@xv;ayQ7DfUxhpIdFouEB^-slr3#}6w3P5Ft2SWmQ*1F*jg9L~V z8aoEnqZSQ}9^U_7fGZ}80}Rd<3m9B15*b=78W>Hy|9=9Pahq;4)XU8J%^+8|WHo3f z`410FWD(8`gaz&ep(LY?#E3adtjSsn}tkcEo>s$;3yxBde8(OJMvFNN zOh|HDrzbpS(w)9Fi^%|V{?=nAf6(DoPnewfSAmiMqmFhL!+*zl3}2?7c)}#d#3(cU z1(;@;&heDVp3!u=$5SR570`9ZmT?SBpdn*Wm#hA+$GZA^K_cMroAUv5puW!Z8BdsW zK_hFR2_Mi>sp$!=jH;l4bI^o1NTv7x|KM@qiPqpXEugjb;6YsQ=Dd{K;Fgp3|G%Q3 z6C$RsdCFv09|dkDfu^%S6Pw_L;4KFjJQ$)u!;s*u5)SiNPH4|zVEO%!VTZ$9mOG%+ zL_sHBT0dZ50i7-iI)}@efq~K5mPrhB9vA31PU~1^G0h$GVqcRt)u7 zAcyY&-2=k}S{V#VKlO8d7&|!5{ddRv|9?<%4_cST>^P5^2hy)(Fmjy7bV0k5!NhSM z6Udir4)gwfm@PZq=sA;;7Q`$6TD<@N17A%J@&E{fo0jt!*MO=lhk5^&%$A+L>N%5= z3RJxXXjd-C`{2Vcp@(3Ck^ty*$>}{Wm^A9Kdp7~xv;t-HA7xe?j`RNAfq55nVG|?^ zM1UuxpIc^T$i@Bjb6r}==)2L%&2IOi#efO0p;EDweVP^V0v0c3z>JOfj$t(VB` zOeV4Ve>>LI{|^G6eGl=*-vICbf7gJ#3tHg!l1Zr^Bp&JoI-xJPVxujKnB&~P0n(^05TVfr<=cEQjGyQ!g21O3h)1au3-4m`Emusm*LZB{I_gXQ4^07rNqXaA;gBk#!Q*b;OLN89& zdCjEGC^Nm`4U@$5iq}lh^$#o=7#S??G5iP3M_K%1{9kj*7`!428afQUTnvo08eSry znk;tU!~Rx+N;C$anf45fwQ3dtmJAH$pxyo;eKY03=g)$>l5qW642+<*An5*uS~ZUV z(CGb4d$2l2CkCefPo~?vVJa2{9aHCQy^mQ8)Gz|cdoTprPUm^cB+tk@{mC09HKu^C zAg&x!@X_fyZ|1k(yFJNQ@^#UPb z@jK9iAsAc(*)lP#w{&1&1GRA)H60i>udvbqiOuw|(gQVcCu&(4c>g~Kj&)E)3T|%H zF?e_|1Vc8lSu9`y-}eZrUpyFsz;y(ubqwNfUdXsfkVex@@KkI4 z6S3dmp$?Ewz5id-1ZlQVWZ5wNK{}HL=#mT;1#lJl@IUNM&PET0NN~dnH1_7f5Scpt z#5*QACI^P;3N?%p(=Ws`vVtnD_e=_sQ)eItW=*9u_$+Jddsfr!-!rM#`+>Vy;6^z3 zd^bOEg8>v?ppGo4ooDU9!1PB)ZFm}6>SVQj~Ld2Vh7Z-v{Yb_Wq8SM#qiS23Uo#t!%sCU zj-TpQ3_s-=9e&0$dVp{H0`)oJi$%QuWx?Bwj&uK=0d1{yocHeuXhWIz|9{{if{9vA zA~2^r&ik)nF`vN!(huvPk&<$NT?3lwP<+!vDYC|NmJ` zPf%l)t%tU}K&cO21|4Ep59)+~Iv>b+57Yq#C1p@25SsrSJsAAJ1KZ#LeZa^F4SWVm z1_m}z8rty8N(U6+Guf^5K>2Z^hm`?H%}gz;8Q%X-E(F*8s2S1^JX_yreJOh<-g6BU^Xy#N2m#LSluz)jJH-%b(@ zcN|zi97t&@{4Ag~sncyf zGfCGAS|qY`crf^avm$833DRI^b@_de;{nL&jb086pfU^;hK=^n&iXu7h2IM~Zh*>m z>-`LGKxI29HCTY#X@205El5N%O8i#j*il`{pzynqsz`*iakz>c}Mve=w7joPHwTD1C5;U?kGmb;x^+ApY9t;dIpj4O; z51o3lw)`&u-b}mXHK=n}Fjj^ z;1WTR;{#~!6m&x2wC_x!pfT?+Oe*!B;1#$KuQEu0!lQW}hY09|e8+jrPe9JK{?CvD zic${-PjEDY)H=*#jsSTBY`P-H2hh18px}Vn@EUXl*TermK;8tEVW5^eXaJ-!o5$z%tRsNyLM}13VA}vII0w&^*Tp>KGOc>-`KlAhjM0 z9^m0jkQ#@1%mSdh)=23yuaX9EX*93x!(WZJcOFH0ZGomVm|}uQv3R&Aj`b}{|B$A1f?VJ2ATZ~IxxlF z|KBWxssXQ+10^4adH*HAk)p`fVZ9G@$vmS6s6hY?-?g_QP@q`XSAU6O!!P{j)DaK+R8w)6xS|l=+ z%v5A*@nGK1s14!Fgz_;m%i#c+Uu0o-C(zyK|%E`XCaxcqm% z3>vEO@cw@s>>$u_3ZVE#P6spXAi382{~wSP1Gu;am2wt!Y#bH~K(kUDY5ODrU`2Qc&k_AN>$Z{n8;1EUAe+8rthQaC=FgRG$u^V%EFt~vm1+(X| zdw?>o_y0c}4T)@^HI^)(IQ9O27hJ=8|NjeaPA4!-5BtHS!o;v)dd&~eVB?YQg)FB* zm#a9;V^{(zU_j2Ey~=^3P?O;=Xj~DLYpmxpr2LA8KwhX;c@xMAj9|Njqoz!@Y7!WNBe^DOE>GZfC? zaeD9n|5HHXFboc-M)r9g49?&YNbmpu8^9LMXV8J@a|LfooxP9U19Z9^XmSe_FCcv$ z3@+e}7PI%Ub%6T#pgzO&FOL}o>Osw(7b~5VYE=~iYBiS?fQx{+kc(|Wa*di!DxiiR z$Q9sP{LtbZpfw91b-zo6qhhMM{(VI`oE0uP25a1#PF)e6!N8ruRDR-mF|@=GU$ z*9ZTDN>3)x&2tkyoa$9TE22QfASSPZn8)zKgF*J{^qfCT>W1KkN&T|d z;E@-L1?(3s8bG&7UP}eJ22^=&u4mu^83&%KbiG_L{lp(84UX523A7nV-Fpuel z2ZIB6h}W7Cvf0&IY4Hi`ct#0O-xf3z=fU6rE-kJ8GZ@r^E{z5aKzJ}XfID+wK6qZp z0UWU)z6XOeco6Hwe?|d|c?^8k`xwkX{VC9dE^M~g0(2|NUiK{>3^L%Tf;rmyIs+HT zksb{8;PD_(zX{?9dvM`bU;p?Qcm%|Q!5+NkHvB(}T}_!ZbmGz;JgIFlpMlTf0E25y z%O(*}6xFmyiGY?wf*j!e{|b1z7StmG1^?^+&ITLJ891!}GeFm@+k>MRT%0UsV1y(; zCvcHslf+QJ{zbC00n~-y5U^BcU zD4(u?=&=K*ZO{Y=k{)mo1qo?8aI+n($Jz8UOcS^Q0`&)xG_`^f6DUo9Q}xo<6`(Sz zKKb@ke`Z;QR|gpyUOi;!c+JQ#;k6>ejMt6~3tlf|*zx)x!vPCLh6~dtC^1WbYaLL^ z0JVleDaYzRgA6S7z*5MII%fk=DuSgHP-=puHb~Ief=4$&JrjtxZNX(${bI;{L>>&b z;5Ap)dl{6#5e!a1wxEPi&+yXD*`R*!FYpooP^zilDl-pl)Iy-@KJjmdh{n{0v4x05GCk1HEPW1l&lhONM6etK7y#GakTMjGj z7&sR11K(S?9<&&5^D1W-(86NvPKJ6=v9}>qi_K2I3$y}+8Pqvoc9_Qyv(Sc7XQ3Pe zm&Hp4##$EkE%ogR436`dLmqW)rr zM9@mR1rUW+;3;U>j#iKbHT9s02S;$j6x93xO`cmSg9boZ>^5XMyJ>f_PIjEj;$X9g zVf})o&Mu(Q6Og04|NlVsCCIy=`WBSNKo~S!xOlI#3n(dp4Bn{a>}LH3w5pDg0pVjC z@Y)+t#DFpsYCXpcI=qn0VIK1q4+c?iJ^bPiBk1IOL5l_kUh6vy2G$M?rr;9x@o$d` zP!a3FAO`j}Qf0*pD$%_EpM#VY3Jk2EQ*J>Hvh>owkO-={TrXG51g)HX@*8wt?)2$w z%&HRLiZS8;kBK&n8lcDo6`vqYlM4zY3?^zhr+}Im$le7xf1w=%7buNtcQLR#&Shc% z?HRH3n(s1MAXB>j4g&+@9tH-+ISdSpAa)G{17i%7jk5B0!yiV_&EV@nDb?ZuBs+jw zJdGUA2`{~zohH0wU|6t^fu&Y8NW@a}{}=Fz-?ft(0(3206GL@j4fyG;hf zpYXDtfy2__|22?77772aP4sZ~SQy8^HPI8)O!x;rTAPibJ{v!E+fW^}PUo7S^ z@PJm1)g%XrcraLl_vXTq!h(4WT%hFO{r~GlPz)~Aban$RR|XBZG(2;5u+(JWw)B8F zu(n>yN@Sv%vxCDN#t=}Rh2>9&d4FRXZ5Rz8&8NQsmJ0vBgIsKp@c%m~@IjjsEfxO% z1o_M&;r~yFul{*}916ph3jcpW<$potp$&A%e4eGk|KIgc1;3#Rz>A`h4EO_;{{xZ# z3*PLCB>xvG{}(EM0wxEdLE9yu^8caoD?s8f+!(`HZva`8^XrLr2Lq$y++TM#$}sA9 z|NkcgQUnS{P&wlL|4Sz*ie7R!M}WqrK$)u1-8rODgMk55Qh^$+6WyIdCTf7@-G0Gm zc0kD!q;{eWql@?dU!VhfLFvZ;GGh$tpw%-df^wbp9R?X|2L?q@?c)9a0Hpl=|7QX$ zw|f8oBZHiIK!$q%KMgLQK{**)OAq7$kna_e|9=BHWI~p+2Z#^KCZH?=ZWT`NEMO9z zF2lhrSMQtvN-dTN|NsAZ;T!>~89)t_2`8O1KsHz$U|@vS5``8Fp!<}W7(ll_gWAeJ zYMjAaFDw?YPO)fO_M!POW5`c+2JpBksE(Vc?(6^xwu$P_DIj|Cac2z>4RWFNp~W92 zsym0+)IVZaKT+LD0py5@p3WX1dZVYa4~X8t=?pryas9+hClwHX!b#@<5WSJp+0BE& z8Qg9J8D^2R_=X3AAGl2dDh)v+MBe{DR)RVkzgHd*@ctJp3sUF(FQ^nmzqD~Sc#+8% z~L4E`|7BqJXaxiE`ufx3m1)*B(`}DgQm>uT* zPXQI$9t^(Vp$>$jKCJ~i2;}hp|53v5g3Ut~H@=jUctt7iaL^%E=|{$B@~X_4^%I;g)nF`hI} zS|lw2*##~%LA`5mMgVn>SfJe_&}~17|8LaXGOmC%qCm~H>07v&1?xeFtnY^1&iBvJ zgTV&e<%YBZm<&L*J?JzH4+dlKXdWn3Efz4aTQn_60OfQK1|x8X0d)SlLlff-iw1^h zh`0f`&V`&O!ywRU#{jxYHrjC>!xxJN20f^no8Xo)L=od1kc34YXmOeWI21vl>o|`| z1Qbmc4Gj7o31GRL|CWeh8>l@vf-#V&4L4tk!Y{uJd3p1UF1AKuaJ% z14RoN3oH&WuzCMK1?~bt%w{y<05#?<5*Z6T7{tIm28($NjG%(jgTas&KDJB&R@-_HvMleBL_GR8yI3e81%v25$MILQ)=xz0zfYQt;pB`a(%58s8gm7 z&UiJI;DbnJ)bG2v4s1Et$HHL!P*-VK%!E0@0MhJ+G`7ILf33*a0d+{lbl658(8XyM zNlPU>7(Bsk81Mi8QHE*29j~M%86b5Y44#mV1H@49kh}N)e@{TZ1<6|^Eiv$5@PwAy zkUcd}{SQF$9t@t~4k09DY`=oz5VV{TWB^p*45&iLtOD2~TX37n`~SZhgu0~+P<7zN z{7?hI2?})V4np0M9Ucsx;Ia;+2BOCnoFHE-GTL^4&Iv$L+yGJF0S;1-1`h^XaQuNb z;~=S<0lH~$`iIAiBK7*MpnKN;|EPIoUGYQleqJU`u_)L9!|gY|98iEj4GC@ z4E&&(2GIDA!(0ZCz8f_i$`y|Dm`wCr|6g~U$M`_M^?%?s$9YVkF_MOw#o861A`Mif zfx15y4-8m;AB2n{RBFnrSTZf{0QDlR?>U2qhig`NXn|6gMbk15(78VoUV(ZUHm%d& z@H0!-&jI;J(=)LJqa2wN&GePFTR{{$pC@DQFQ zgMpBx($WJK3;s_;k^?u2EEx<0EtQt8uvqYa5|SKvS*Rt0fqi*PLL#S65M-7z`ey(&Llk5NNIys~ z$PA07WfS1~)EO8WR)9|JvN}8cjv%vi{S&A*5iHsw(6ljlFj#>HZ+}C)(U0nlzcZj_ ziD5D80Ge4G4JR0QJQ(z>z!OPO1AEa71f3KCsy!GRpcgoS_Bx78x5;JVuGau97=X5z z96^Pw2ZJ7Xv;eg9tuq!f*$J9`o~g)CHq()z9JFHBV&4D%mhu1pRkZM*0JXYm<}1NV zCD3k|`XvDlpdB%wrGpj^7(_s$pEWO;mw^g(&=zb^m_jfo0|Q7yt)|m-e_>`R{)PWv zz$*VrZB_{8QHOkp#gLz7O3&}`oHr5=q)WZps)i) zEodR}>;DWEP;n2?>Q~U9ETq`bi=6&NnAy;ofq?-WRu35}KxxQAk)Z+9W(7F`lu=(l zWT^1||Njjr@W3OJOh{Gl!T%q?bEY*S%rfA!+&ma`Amdf`upRx(I-tQGQ0w@2Bf|#k zc?=xZdz}w}#%F#fGOVze3!3o(T?3#CUL|f_$DjeJD40N73PGFj1Rduw8EAJhSUJvP z+R~}W02;FV?>LVMbo&ITiGBbw8_FPR@RE_C;H4)6L;WfT(4qp+<;h2;TZl5t*MsYU znrcwx!~`8laXwMM`vK@?=?w4x%fYR4>$waXpr&Yj+U<&jmbSa#jbY88nb?((it6d_ z3Q+J_)H0ZPFldAQX|bPy4^+{CdU&7}^4|YffCmU(Co-&f-N>*3G+bt(IDOrJMs{Y< z&1@GU7{RxcgHjo2c-4bJ0laJlT5CxS=!oC!2)#KR56YiuXTPaJ}cj06H2D(mMntWAA^ikSqh)ldu317)!we zk)4(dl92iH|99#i|E{k94<;go5aICprp%QilhF7Px@uv;%L&6m*#P z_XeobUJqIvdH8ch#nL}XpeyYmV?B&28|oPJy#N2*19A)q!$V3L6pGs57zTxufJQj#BUcf5BUDL25x5i(?o! z)G=s*t_}goqa*>)iWo%(&~8nE*WiSZz`-P1pTMR7Yl=Y<07Hqz0ygl3h6jTtIMIUg zEGQx^Dj7ID7&O7FM=TXs!S{M^v}BNk4Tpm|f!1@JK}+et69XU@fLh)g?LfiuX9hS+ zgT`=?f*rKS!v_=;=uQPqNP$ulXh^|v-e1tE4l}&}|JeaA1HhMvPTwZMEMK3(zz8an zKtq+F0aeghchI6Vup=3Egf|0tT_VU$AgsNYK>&1|sRx5LI4wb@f}Ufi2JVc_jt8G(2R()# zH2I+m4mfSlHC37HTR`Wk)oQvG)Y`mUS5y6RT}K@Q=!iQj$9W7MpqraP4sw|HKW6$G zNoF1JtPW_GAIRw)bqtIk6`*Cj-v9q^0c}Z`F0g`8bo$;?OyWA=oC7(@6Lif`D@Y3{ ztIvMOP~yR$0-k}Xzb6IS+8{H1K{Vtr1JDEk_-p{#>9uOi0@Hh?n6*LM;6bx^G1}7) zN->);PMuzp%&0J3LYkSMu@uDCnck4e$TB@bn%PNA^&!X}u-)|xpm}Qn4+hn<(-l$} z4I)5Q8)(GbVgUm)G+qiV5*aEy7$Aq0Sj=Z&2FY0@GSqr7sDhU%fX2Zr8W}(b7juAI zzfqB)+JiwA+{^@>qXp`}f;Md`OwW*ER%T3`-Xp`Ti9GMMUxpcUcFQvvW_wV;f$Aer z`mjh~(15z3(St$z>~sfNW-%^haHAen?M!d5W!9M9AVBoN5WHDSzgFy@2Nr80H80LVddK*AZ zQl*R2S>&1RWd9ewKFCl28t!G^WZ;!K`5rvJIaC^7wj9J2xsNapuT z=L6ujdP5AO$n**|X5RWb>5AG01~rg7L3V@2Za~2XIzAGzL{t;J&n*$>cJoeF3utOn+u#XJQ%pa^#e4}BfS6FfHp(a zGkE{A2G89g?}GRKXAQ1#A=^0^6hH=f|DOY{(L5Nq!GlB~gB<7mzX7`IxzZlAgY5qT zhe-_J0Vt#xaj<3h*8sW(6O?UWxYHB7>+iqgJRt@VP%EO+i^&DrlE|1YqR4ER4%$@m ze>ON9K$~0-Y!&`BfHsEzvG^^mH%`7vn9#L9y~ z8XUBsaSF#Kh7+L4IMAjy&^|6uOA{0-wf5{=YHC3jv@tkX)G{zyG%$elf!h|A_6&^m zdnE$&_kzy+`F{nZ9&|AvsEh+&3<$a;v{t&pVc!1}`tukV9p}a|BshXPi1QiPL6>cV zJPN9^Et-~hfF{&Id`Ko?1UHGHauYllq`}iOAPXGlG1}DZ`4AAYpT$mlK7*{oTn6|U z{`3YVX4&bceT)L2F$i!;-|`r|{tQ&mdoaj=M^HeGZi_nb!CVt&+Jn|neq9O468{${ z)H4Wx^np$~wrFIS0J+6T4qQ2a_@Gh^l-+AmK~2K{1t2lVz=#~U)&GcL9k(z0~2sAOmh&fxPR`^zRF}bpmcPew76o0-7cT4Sa!$VDOSO z=neAI8`CqqVnt(BH<03Cf{?X-NwOce$OYo_HhteX~Pfac6V8bBB{ zAq<(?(g3FhZD@-YwCMmO4q6HB!2mh;N_#)J;!Xf<5UIKSV;!jFt+$K;)Y#Sm4Zb@} z`@aP=D;)vS=)oWXHqiV3f22Lz3=B2LjVnNkYt_8L$3{ZbszXOm{)3NauHW~%!n$cW zxYYn|?t-u3leV0$qRJe^21;e(3#ZqpGD}4*KY(0FfIQS|58i?Z+AyL3I=Br~FG6Yx zNw9k$sqg}0h1Ew`~~m-Yru^rO9cjQ(9&aQ<-LBU zBEvcl1}X5;%;`Mp%<`g;)Q;GGx66Y;Ds{SpIS8kMTQgJ z|KEaFD_JPA6-+lsV^nbgr8`8yqzG<8gDRF8nO+$l3<}_S8_Li0U{C-Lu7ZwK0EvMT z{ftbntmz36%o5Wl++<{#E}_A!mf%$Ys%k(-XZ-Z=(f}2Y_KO%;ptcl(;>r2|1Jh3} zF9Ykn2PC}z|C5DX&M{HzfQ0uy6Y$8V_djFsNE%4J_x~y2E>xo}1B2em>GL$0%|S;c zc>gnocSs!P{$HUDD!JzUKVW?Tv?cm~2dEJPY7~Qyp+js_IQahqs3{Gqd#&eqX@K%A zXht41(Q7e>!2uN75Xb&Y^k9$#58HuyAP!B82EQE{3!v==P_YQA-B~7N9*_WCwru^M zfkl5F0|RLPX8k?T-E0gqekU?k{9ee|;laRAF92HfR$qU+!eK5$MW;Oj}^BxD*4!>qN$i*9#dt zUOO@tSST_s0EG=G5~nMyU=#(d2Yyk*-~sXms3rpC9gAcJ0}lpq@RA5HA9U;q=z7ur zYrz{jz5oAL0Octd1{n%EehOqLXrco&zyKNzOi2F!fBJ$rM$zeWs~I__UyNWDpZ-FN znco*&5<^OKh8wmH|CvCGAVD*mzYj7@sPtk#W__Q5@24U|#ZO0&zutq}jGzmHEfz3X zSu`*RfU*)Om3#mH;5pqvn^{}|JVFHO8G@R{puGbg3}RppfRe1GrvCJ5ZDs>T#_4Oc zAvG{)BG&?X2B}5U@(UgeI*ilbXftbq_V$7FyvX#b0-dF$INec)SuPTsn;}jH&9g%e z$^<)kA?Rp-5%8$3%>xF;&Nv3%g?0>lwhaH75}yBO0JTOco;N?S-p{}XI$`CU%fJQ-Yfw`3U=Rjp*iJhJ4ed^bcE@=PpdExA z&>e(rpa~|&d5jY*6xkq)#9{Sh&N@a(P%FS9f%TmSgA`H#vnYTAHj(Xw_y0HGrDUMM zvv|l*VSS$gbPk9WDE=)P7!*K-wRJs10PN%+Xx|2O_;G~?gAh1BAVRJeJd*)(I4F^T zS_Lc~3_@3@Uoc=+5BQg;$&fJ99@Kae0(U9B|Gx(BjR6G&SUtF=5(2kxz5n-u+OrJE zW_d6Ofs1dXSkM=e1&`yrPGma)@;_*^;PixbkWdVM5;UsDkke?-z|j~Fn{#D|d6CFA;YB0c4DbJM z!4sp9(KrSd@BeSW)hnc0W-tM*5eGS-CPliw(y@sFborZxMK!4FA^_e~1Bwyv|8K!F zBp`*L(lS(2!U8-~rpdkqv`PSUd;rLIj&uLJz=9Rj$^z9l@bU*b&I$_d*AM^yn5g9i z9smUmdV5b8rJ*%fBJopZ3ZZ> zfRc(uBHMu_Nc=XLn7M-4+aKEpSo7M!h?YUT%UUX|0{yr`~?{bnS5l30Y%_T zFRunr@^zfY0N#ECTF?wK_a(bm$4_;yj-MK43>rT@88i?v$-n?=b$}Fs#D8jdHGud( zHM}}tYCr|h^bK~*GN3NF==54+W+BG4(;DWI(1CahutsoC@vZOl02Ag= z(BKJZnZ=9eUeni`fCo>mnK0XfdYouJpMb;XGk&Uj&G@Oopzza^K>_9|ki$V9g?e1! zr-s)A5dWu!*9@2%gvWPuF!D^FV#+KmiAaJ?3_gevN$$1N512BGOM(OB#XRsxwE$>< z#i9ii0Ni`0e=ub>1s&Q6YCb^&V8V0}6J|xwW*;-=e02r}22i>IMdME`uLdaH0i`EE z=^2oi;4o+AvswY3i-*)N{~J9R*ui5T;Lcr&bcIC%1Go3z3*b3lq`QDby#HR4o(*wOU+PCsDIY+DcNZzV#nx|!p(02HL4gFZlgF%TQv7lTfN zfP4+Q0>N5_fy4R$1H9t;BD77a)&JF=)c^P;qPLHM zq5hcB=L+yW?4bMDAOEg!oXeo#Fzw$RaIY1d6(P4|fo2duK?v$^PhXSBYzgXH*B#zm z;lUsWo$UW_0xwj!Apn(^=>1QjcKQS>X0^x_D?mxz`oGr#s6mC^|NnyPG>fDa8@&Jj1vg|Z zl2+{S{{L4KRPi@zdM$vAtwS!y{e6(3!6IqJ0}lpSaLWm*W;(w$vpmO2Xd0PrX3ea_ zB=d86iZ!#c=TeBn7{QC*KtA{W|9c`x%yHiTAKw3ef7Nbgh^hgPbu)5kH#0ao%wbf} zZe}oWoW~g9IEUehb~A$|=suX~7p$4h7|%>+w_%odIs@tBF)^%vso}K<X z*tbm7@LJ$7m%#^=u0htpaHW^pliK(okr!DE0-(xqdWH?NLx}hPzm4Ai|Gj~!vPk|v zKO~vWPP>^w(sAzpCl;CiSAfQ5y#N0PFC(U<3_u%++FG1Ra!!%y*dg{|Ts+ zQkZ_jj+w_u5z9p#wH{I;y~+%Xprt#Ypmdn`{{v{q6k_S*e@SA~57;sD)a$4+FgP|b z%;{uiVCZyVV9;Ly-n*Xw%^W4#OBom)=P~5ecLX@pq=U!sWZ*kB85kHGXEA{G>-#vg zF?jT{GcfkLFfi(^U|^_uY4M|0Q%gi&i-Dn5*-NCRBftUV9fxWEFMxV?HCf=>fyB2! z90bV|pct!VX5UhiHGQ8wvngZF^e^_zfuLg}=Xx?QIx+nJ15*v6YcfIC+5bNRKA3rW zhXZpiBg6D>4$Po~Roonzy(DTDYl(msL)Ut01cbD(+0}Y7F9QYTNB(+@Z@t1>c7 z=1Y{Dp1{e-GM&ST+18MOfuYy)|NptJ|NnyylLXtcl6jf_QU(T#mjC}jhJg$Kxf6mB z`e!&X+k)1VJ2@~Y^g1&zg5s;b%L8;u@P}H>fPh+McCcS3C5wPV9yC_QGF`@**%Gwf zvZt1TvDc1)5tNDaRzjk{aT-I62LmHG4T4Gq&_t031LMx=EzZo2j11F{IWyNYGE8@K zVfNxtNM_)yNalZ#k<7pdN*OZKSGX|muJ_PxWl;I4!oc7-mr(}P^#gVD5}vCufD;-t zIXgBnJOGuAAa$UDXwVfiH7`QU3OPWl5dS{``QBk3!x`-^1_OtAj24}q;G34X^t%`; zKr?BU4h-OBosbZLtjqUcU@%EwU;#zzGb-k@_3mx8?oUdaMds^1D8&vOB#G>3Wr zLqMql6yP8^5C$!C_x}GMym|`EZ~PBBPHV^XJ+91BTK{)|oB?uz!@PfAEIApNezGty zbb2x{)p9z6)(n6yhvoAA|L+AjdDPc*D_4RNjAIjH1~^c(ArAGO%b|O$Fb(gB&Q@T@1RQn#^GygM=j~cubq|CpTCvBgh5NKsx~mGzRx4Am@U-1ah+D zJcd8GLk$#Y3=Fj#>?ZXc8em7%x=LPhn8T3pQ+xV6cV_A7nr_U-)8Du=bAmdjpe2x? zL|K!}Z~+v4Ae%uhbDYPZ0S)5_Xc$L;!r1%&fA|UR;BZ~Qz~%iPF`x?y9m~Z3AAUkZ z$YJikIUsYvVGQvhIE+C)1KmF?;4tt15|HmeK69A&?+Lm>@BjZ>ptT>E0v&>GtKfMo zQPVH?rN;qTIWk5^{YT9fiwP@-r&jH3Toxmuat0boWppeewBoS!yJYmpx^)% z+8zuH;DuX`^B4uD>v%CgZ~^sIy#FbK^BBmu`o$g&4)YijYLYLB{HO*`r@+&8t!pqS zVHJP^4TQm?JO7k>rzdzbtC{}e3GZ~btL|u1n%&I6oT$klP(A0E(oALsMo`;&rZNM= z>}Ce0pYA>{ES(uxK${Y3or6IO9#yA5@Mhk?0_sRicaUNhnSR5EIh%3j^bKjuBGV&$ znH8oBa58d0hzeh3UP;gZJm_+_ga1E(8W4$IM#hPniAgnkr_b_bR#vEzuBf?Z3?7#P zjZZl?G5n}s`MLsRK6tbmRK19c*RTBG09uj`svl}KKTmR)^Z!F_eDL)5zRY6vi3}Zj z>I@9^e|}f|U}OLda!b_j{owG@ih-fN_I5>0=EHT4a~K@zYd=r2p7Z~It@X!CwVE#i zY8AaiIx-mw94Gz1;{E>{xH*HY4^#<*^g7J>f8u2nIR7!$di@gl83kSibO3bB9_aXI z@RDQDh<9Tn0|#iw{&ay4j3RQNlM=oE|91f=A_fNL1~y1e0mVfE!{m1<(u_5exl-k& z|5{hnN;+56+IfSV4{BWnzODgHk$p3qF5}M(9@44b`vdO(`v0#dIn4e4q0);%p*Ai^ zq`o7Z&47FYo0pKvQwg{--1xjZO7M5QB|AW+8YB4Z^&b9GiVBm0=!=Nx* zoq++Q$Kp8yV=YMi$_oxZ{xC2&G5mi5@(w8Xfd&93-$`|3WSA_M2D;cVF3o`HUFhTq zX%6+EMZ`Z8|1GSkk*@ra$T-2ViR}O=cZ2kS?wt9Z$Y}BVAY;Id9x_TmJPx|* zkJ01zL&gZ}CIA1|&wpHDb!cUV)uWXPovQHjPh9Hn{0OMu_X3n1KqnHbT0CUv2dxIP zbOqP%duG}*#4~_WI84*)hl~?ITa|u4WSrnI@Ba}{&k1zs&Wl9G39k+^3cPyADDgUx z(c<+&MvvDA83SHFWQ?evBN0&F%)Z4!kud=@$_gqrV2(^+n0znYp`JBGyOY5m)O*(M zWXN}%$DmT{5nM4>oq@4tw|0f42LofTDx}q--N}&RFz^2q(4eX%2Lsd3hYUAuTT^+O#QHoSIYVCZCIm}sf-{}N~i zw__74hgH1-gM!6EhKZ174yy%dksWAn8K^a0YsGNk*Fr{)-;9h3KMyio_{GTZ0CZy) z=)Sj~iVO#SIWl~(Vqj3Pa$sQimB{epS0f{XRRRNpRRaUdZ$(B8YX#7yaf}6)8vi$1 zvobJtEoEQ~RcEu)ZfDSToXcWk^XUKodW+|8Ix00qSJbL|iM#}z;jL*U0!l-E4J--_ z49q(i7+56mV+JDBz|3IIU|?WER$ni{z`)djD#+}Cun^<`CJh9iu>!(IHiTghM2rR8 zdIrU>l>-A~RfoJv&B9Y6HGLlfEFLfj)QCH1%}Qk`07Z+%LWY7mjqVDI#CpaF_5KVN zwa=<6y#N3D`=XI?LhaM)iaPhn6&42=1VCr*StK$}sA>5S;Qjw+?#qXa6Y5s1u7E@r zgGlZDihz37!xi=W3P4Az&3VDdSn%>7!-ZFj3=dv8GJJTI$nfJ;BO}ABg^V1p85tE` zD>7<;))m(NudaA;kYU5i`iBfRUMVuXc!6MdXhqpiMTQ;T|6hT37r#_w*a31psF7daDFH4nz&G5U`w&p8uMhwh zUugi&ZWhV^|AS7y25*T4#WkpV2U1kO3|yW_%wl0+02yY{!oc{Wk#Pd3ya0s+sP731 z2~dc5|NqSh3JFk%fX<)=1vMy`K}Yt1f*dqGVadRt019%DdQgyi|Nl7`WNzKj%@rWA zn)wR#0U!gt|Nq(wmVgF3$Rg14T~J)Yu=Z4j448#h4WOf4{x#I>(5|p*U|{T(0EOH? zcufe>qus$!3JS$~zsnV%&~u!}cp$7(!UA-R4!9rZ>0wsyS?^)#*u=QPQh`Btral8h zRj0g4jkt%_OGSnQwR#K|AV8DeaV|puD9EiX85pZA85Cx6G8BOHc>n(czT6CS z&a|ZhgDNPY|8!&oEmR0)NN{3c0F~|D|9@`jWMr6RrNCfdv5;Ys_y1o%pqjyLB#;9@ zj)Uzh0P#WPI;b*&mF=L?(fj|OHPbJIGn+F$1syT3FkK^pS(~vE#8#PJ5y33Y=rQ?D zq8t;SBt+;&1hcfG2W+t7^?guEdJ3Ke0gZBkm%SeTT;cuq7kE((*wzIMOcqTm3qULU zUeq%%dH?+tIk_gu0I~=zBa&H{kzx9^NM;`6Ce|QJ^a4|G}s0jID?(4 zYwy6oXsyh^0b1|?su1r zQe*s~_|MRqks%*cRY13#YVtVFWo?1%IsI~B`h;j^dC(LHXy^bJW-MS}z$J$+&ai=j zfdz|tY+@k2OdA*&>Ol+`W?q1486!OXg9Zn^|NpHG$pl{y1iI{3px(>Jtk8>r(V^-8 zlb5leLsoxRSaLCN{FG&2c`Z+ro9Of{TSnc`$-%^pG zpl;RCNZw9>c>DK8Q2pfn z{~@>@0-575k0ruFk@12>!t_;%%+{d&Q|!=?_+1MQiA-=v2xxaQD1ZXHCX0QG<2)7v z{bo=|uxRKvgB_=!-wbw~1gN*@IFCgD8WJ^@p8qdc-Cx{uLmWFrR@~!h8f`3G*I^CCpnOmN2iWpS}T9drE*UxdyQW zWP!un|4Tr=uXTJRGCK>r@SeeO9&-yM6n>R@FfdnuLI{RIj`9Bgs~6(odXSHq5>S22 z)Bte|Qw78^Oa&0fFl9g-!;}E>G03MNUpmZThyWRi@Zm2*Bp*UO$fN@`Qw3_K4A{*2 zc}yZuLwT&OF)&(&{r?Y&YsWeNH(>gT@dLzHKNos1Fv15sK$d&||A~~C83jOT3*-n$ z`U3B}<^XsP)Lc$5;9cpT@k$RJYlPvq2$mY5liKoT>< z9*AWOTOgJ(tbv%rumt2m&|pB_pWXEYQZqvX#K%82dN44Qz~a!7%$0ivg4d zAP%SpXDJ2|aAKIpzynGP4)YjOU=9Eo462%7hQ9zCdXYc?24kR!z)Pv8H z21%k8qmRJT5fBZGCtwNBdJY3){Txss^6e_9*aoF=kk28h{6FY)0Zzwx|1}^9?>{t^ z|CfN6^B?3Xa4Q~UAK0vE_3T?f*$0t#zk#bJXz2vayZ=Dt0H@=;f1q-J%W>Yn3`lhS z1CM@#vaRF1e<9xg|AUtTf(!>?R1ZBw@({xfxQFTyK4Qi6(O=Nf7@Ust{(`p4a5>KV z3))u1>p1Uk2E<2y6TJWbhx-UrGJ=X;P^suR_ty`I579mNbuK8>U>>Z86uAf?m4 z07&Wd&jad12T+1^ocGTHWH`vDFbf>!{$Jz${}=oeJ&=#VQ30)-9OwRVsSn#?R&)|H zWB13x`~ROksPaEm>ch71LKXa!@c#d|X8MX0W?6gC+;rpr2cR{fohl3rKNd240L=(E z&SP`{wY7dPWS9ZEQVZOcddRQ>)Z7CdEe74xabUVgDzhPIygQXSA3Sow!N64O2pJ2o zSjh09meEPXqLHCsrWQj1XlQQs3Q!mBD=&1-whB1d=1hN=$}A2VaR*;uwUA-PYv{#T zpl%{)kOs8c0M@<*IR&)+Y`Q`Oqlk?6|IY=`u_rJEU1pHs{r__Wc#wH|MH;gi)2mp} z&>iT6$zy5E>eKgjFml*0)2;w}r&YPaqJhx?)D--o_z%3@&-?#NaO)T3bWl?f)B=7{ z2WsWM0WYk!P-HwX&5T(E)I1dc*~?fJ#K2PF$SBRj2;zdoB>w-Me}w@wH4749V31*8 zV9@#hcL7MwfWeusK+v(ynUBGV%@HB*^Z)Mx1qKEN8wNKFd62%G|9=-aFfcHLK(sK_ z*Dx?JH2nX&pof9M+k(M`(~)65;~W;}xy4M`WX12$Z_}nH4 zgm7JOyyVF33Za}poJo96m%uKlXUJe+U}X6J_q7iL1LF|}w>d1%d=nVwGrG=Y206xY z9+RV>V_m{sr+bcUj*ff`&iC&)@=aiz!!nn7KBMDZXHG{3r+G{+f{t~5d<=K)-Dh)j zflAL~n$IZcSQmWP5u_Dtn*jp@W6uA-Z#FP6FgyTzwjQL)m9GJ$GKPzf!G+E7{yk@I zM?MC35DTO$g@J)_!T-N+V;C5iN*F*E&SIO(>^q;)nePBdo9{d(r#UPEvsvrzINo!* z?a0UA#^!kc?kz{Y1B{@s0y!0Ai=bnj6W49WJC64px!quldgt42cO375>|xMgU|{0- z|Mz_f0|Ubm29TrXF?n!0GC0m>1o|tPF zIKu!9UXZzSnVstAut0+^_>Lner1%(|*&OdXf#blDkHP6a0|Nsn;V_^jP!$FS28sWF zKUy#_FcdI2fzu7h$%2k`zK~!9`-uUh&f)*xj|~hA3^7o3&XDl-=3{WKXLAJEz`y`j znDPJbN6?P29H>HfghCW`6aN4G1Tx+Qst#(P6C~(CG7$52{Qvt&gMonorp^Uoo)aH~ zE7ZJti0>Z!|NAL`fq?K*Ga49xle_cJIB;4=`ElBfLt`}qz71H&A+ z#Zdpbb3r@^N@#oxp0I?h!N9!vDWNKvmHVEQ%A5q6Vb4 z=l@^O#4f`JxLW7=jBb1rK*5xbq*eel`uzXz&ld~~44`@elx#s_Xa4{F3A%Wy9wunO zz`*?A|KDGr{n##GLqX-1GbqyCA;y+*K?}vZcbq_Ll_5C?y<7k#E{Xqte{(P}Ft&j9 zLOby-V07Z*V{p9Z#O(+wb!M?S&SrI*!{RuX*?E3Fqr0GEUEM85P{DZD@xCJ;1E`z_ zt92Vz!OpfyzLA69Y*G;H7 z_uwYoa^iME76lifPPahez`&5fP|v_{CZK{AWEj|WUUQk55QaI;W(5TY zC^TXqF1_b;-+4Zx(|xcENF1yfWG_M~Sm-Xeyk-Db-;4(T|NeWxz`&@%z~l(7pX-q- zaBRgaNKE4Y-~XU&7y)rK*5cR(Tpa&neZs)N@Pz@C3+6M1f?ajr<;0@;mA@Q6c$%6qjr?=++KlTe?AA{@$)rZcYkaPtFnKR!4aQ+YHf|gRC zwuBS6H^N+KJb@~iFaQ5>fa-=h(BczX=6iBM%4274M`-o!%>R1kn>IsIZdw z|BsV{p`L;94Y(lyYS%c=W}VCIGLLBnhbP|##yKqW83oK9NwFysF}ZjO2e2F4HuS5V0?pOMK2 zQW)TGlEBf!AGB*EaycL7wZ%w=|)&*(ax z({Toe^GtTfS!~YW(${ewQ~q_w8;&;}A!YbIKTsL&!sd9_iSGge$d2N= z@5mhh)*!>cz^L>8pIin51H%=NTr}5x7j9Rs`_9~+AO#i-42(Yi|H*^W+y;=x=hriW z+Qa^!LgfBEM@UgQml;$Ha-%z3XxRo(m{e zAq6x8g9EsK@K4bOq>;f1l=7VU7BEI|ftu-ep^gVfiW8*Q#N-C5tL}k%O`skL$Wj9a z1}2~X|CDYpFfd9mICIuJGJs+RY#+4wkO@yacc2MIg@J*o;r~BnP>|Q47Qex0MJ>~c z|Nm6L2@GT##OF+V{{K?}MF}jMgJ!EQ{Qsv?0vb{30L7C(D4x7PQ3UP z1CsNY!{RuP$$2hw6r_i8-)TOhJ6I{G&%iA4|DP)8_|6yx4@h7o-@kX)7s3pImZzW= zlf(aiYF9vgO>k}jr8Q8i7gW4QLo1GZkYc;H`TtLI1_J}b3I-=oy7rjQ=ror( z=&s{^XRdoFt*3glZj}L~9@pYwU|@ta8bPTH+|SH_I@5_8!~zu+(0UeBLi+swr`^H8 zz~BS+9Y_zjOY4RlJqH*V7)t*C(+15MF@Q_M>74bm*g)~`4$|=fl+C>+@j1?8@|wcq zIE~A328ZKJc2Fy8GOy!QZl;Ns94|XwalGny4V>X`JA#rHsA#!+=hk%>z7LF(_&`+x z$Uso|f(pb-U^O0~lo1u7HJi)9~3 zsOjBcU|`AthX82I!gU%K#1vOh+3Ue~fe{oJf{u0b8Rs%H<%35s>K#E1aQF}gBn3c* zM>78ZGx!1OGBG&wU0|HY1gbuq=CC-;WpC@J3qw-`VvdCvcTmY|*qzLbpY1DFRuO)iQ5|ExgkYy!X@02Pof zkTDwfc}&Tm#0s+NE@)r|7EkqcUNbo0m08eCcBV{dUFHNDsDbqQz&d7dfKm}CK0&b{ z=ve1^15)MraDhw)McrLzZf_*hTxPPnKx#UVc}$R?2kjTw^Z%bMs3Zj!ZuL%l4d5OP zsLJsKcTODdgPOMB?BO_%DGpNmfYQU4|NrcA7#Nt2fJ#MYa0?YYL^hk%aW1pdEH=k^ zOrXvbQvj$Y294!_jdQ+#$AxbL`bbpGt=o6+u{nbJKcMj&2F8H@{~R8`dO@IW7RYE& zHw#>$fX1IdHq2#qn#aTx1gq@fmVic#HZX$P(69y;*!>>2?%s2Q^u8bk5y&Nw>I@o% z^(dpBpsG>g|39Z03=B*^z;Or~4qN~#m(n1m-yIij$GOa2Tz4J0o#r!o&SPS7207xs z%Uot~9Tp1aIfCQujw9a!=s+PTy6!?onm}o+=KnueP*nIZ)Ps5@$XO6H`UQzAP)~Nr z|9`HaaX$udTMv}rL5aW}9QN~=KnV<#6$4RQzuuV<_!i0P^HH3;r~B(P>TwZ zyFiJ^m9L>5oDE9B?nQ1a$o&832^s+bb<04`fd&^!Xo18e{{Qm?4OoEc4UjsJ?{xnE z^8`5_HY^7nwDEyh0#XGU5o2Ho`Tx(eegXpn;~54gz6(tA8KXEI89*@|1x`4Q_g%oE zpiyQnHb+NpXEsMq5QojtRnW06oDDqe46=C6|9{?~W?2t3%Aj!ps$W6D zOr7Dv|9?K9`k#pdtO*nxpvDYn_z;}poaQn!g@c+epf;EbsAcZLw}26(Owh5;5z;;e zXARKMn#})yexMfd5_sbTJP_i^#}E!3=VM?1b!=V!|MNS*z`#5OS17DOaX@^D1kbI3Tk(7w;imdh6_^7f_gf)z^w*QlP=)@zuO9b9JQn=_ z7Y3?MXD|d|$b%B+f&c%)J}@vaOaPUdpwbr9V0XOl$PKDM9qaEy+RdO^%>|O8K?TE? z|Np{4jfx8lj(i1Spm7v%*8r3lyuc$=PJ9KR!7L;!cu)jft0+`R{cpp6U;lu_SU;~XEfkFXPce#QMhcwGUiPGf%zbH^oX$k|R zHUsrSoj`+8;I0qb2|UMT2@$XCQ-)6Bu1V z9=PYk4XVgMgN2Yrn>QCE+d6T3fU;sesD}qi=M13!9n*{d|Du0@htwS*p#V1IK6K<# z(6J8GoB~x5j@(Xcj-atSh>v9$7?@T5|BC?)MyD`%LZS#MrK&J6FuVN!7Xupo4uBU@ z4UB^Ij&&a3^bRoxG`|k&e8gN~U|iqu~e*%0<0ysn#FoK$J&{??<(8L;O#P&X@=mxnGRL{<3_PPrSZ*Vc51fJ-+>%{F0 zVSoz-P)Did|Gz{7&|)+V2GBq--vh?^kaiGccz7O@<4ktvIV_;0mCgljZ$KMlj%M0T>z!P8ypcSW8`OgVm+cv#9?Nyd8*X58z%y{*a@*zp z-Fg?k2aI_89PV65rn+!@T)yH0QhyC<8K^=4@j+9hpxy>3+`vQaj4A*BrGjR?zA!*5 z;Q5Ss$WaZ-{~h)J|D}O0ocIAMot)<}F=cSw1Lv`OPWK%_AWfC8F_>w7?i;uyN&CwMxcnO}Xg*MRZ7cej| z@%;anwSs|xC4~XhJ`;4To5$o0t^!?PV?Cfg;2ajF#n85~Bc$g8X_DP@;dTSp7xzHT zMl7`-q!E1gz6Y}0e8vP&+qnMD-TUqk-Hv=4z+DPZ1%_02f&w&wfq`km|9^QUU`M)h zIxaSeB z1Zk8oECBU<{{Jg#U|?Xo0}f_T_(Mm(vLJp1jgf&;B{*4u`o`eY>NuB~>FzYHs%ws* z)BsClNDY?@j5rzwCH1gofh#x=?%xCTH6dOD`3&SSkShco>ptTT9cUW%;q*vnqzY1{u58{A~2i40u|Nm8h1`4(? zcz`R408lB)<_I2@hpjXKm2x5f|5bt#<`ziy1N!xgIFAYBIS=q) zJ*e(rbG!#?_<)@buH)Fi6J3x_4ybv?So8m1BWTV?2ksG2jVS0?2O5E>2N&i};K>Up z6BGapQy3T+xBUOtbc2C`#exAewg67wE;BeBXS0IZr*l|*z@xB^@N#Y*6H_O&pmRc` zK~UcmRAGVA6}W{7$*cFB_%1L`<(^g#9U?(XY!z3pUB7wjp4$!R6c!|Lf?Re2GJx3D zz`(#5g!47ks$K(ngBytAFjx%`V$QhhFK(3v_<1~kbsT5X}I>GY^DE>iRHb}wf z#O-q#(New#cPfD*+5<_G8_2_;{(>W+f*m|KS=Hw2o5N~ zL1TL0al5Vr(8xCfC=t$Q^x|}605?7%%`Q-in$HMoWjY}>Xh9t>P)p63I}j4S5c9wu zg^oMI>VGECY_`Pzf89I`3?efag8Kz02u$P$4FN$)Qc#hEoJN>hK!cxmZr_5e{JC`T z!g)t-zdoVRbDmHl4$eXogG%`K2}RFjulGCWc+(Ti#9*a^Oo#^&U{>@@b_^w8St#M( zCj>S+{hZTGc3-YOA+K|eHyydXxNbUfyTG}QATF421Bumx)wn?w&t!MJ>DVVUliiUE zEDobU9E2Q**Czy$<0gYR2eANZNIlm%M?9vWDn_WqC5})*B&(i)4{%w8OPok+;kMS} z@jTe9bD%V<1F8S#f+i4pz^&r>jG+E7v_THa?#|rKh(Zd~A9(Qp-(1kd;~B8}c}%Y0 z!60xESTUE`|1M+^Q2qUTcR)E3sdDlFcdWrPKbQY|9|sA^8qDLd4F)WWdQYmvDeR_ew@VrfAc||$pr9PFwn>d zOc&Tt28;jy7J#bk5Lg4#6Cn?3x<~x~w;+Xqftdvw0-zy7&@zBIERORTL%^ekO!djP z9q&5c0rloUYu~_4I8aLxUKeKEzH|3Jq;Uf7CLtFdu*L*vkV@kJzr`F33``#2S`IXk z4jO*|jYEKgoGB7%2m+Mip)>yV;H3nhf(yJ%3Cx288>mRm`TuVzs4oZ}Dg_mMNS%)` zc;~~BuK_kN1n%cEFf951Z|NHFmPk;|32q027t(?K44NF9$_=fj>cJJ2<198uNMD1= z4O)f5Cp1B|6Sx`U!sd1#REvVz-Js$S)aphFDnYmU6!k$6NM$;Nxd02v6K z6_0`>Pf&b;)NT0xZzU+&Ak+9Db*_6KCvit)z(e=9)-E`S>dP4AHi1Hq%A z|NpK0z`($Ig253oJ`3%-&0_+s?14<5rh?KHG>X7$HWx6W1Qyd>u!4F=Hb)mwY5_N( zKtW{zUak0VJ*c)z0r%xW>x39VD-uD|AfTa$JlGJ^T}N&ga5%d_Ci((E^Zft+Z2-;p zmoPw@Yzr9YGJ~3IkS+|UeLA1f2izG2E!L?A*U64|9l4qE;et>xa9~FafM#PsL!U@RiW8{61Pu(Q`yfe3{(|Ix zP#z8V|8J`T0|S!_gFhd5yxR%fb^@i!xy%qpGx>nV^&uvK=GdJ;Yk0tFUBR_GsEv(W zMS~U@@G;!FedjJ{RV)Jo!xr#buz%Y*7#LU_z=?1gSN&{O7f>d3f=uav`tPuedgt~v z7jEb2oS;F_S!|ATnFA*CI!@t%ObRkhhV+VI4LML}2Rs`E(#7`x)U@OR%>|;wx$jlS z>yEb^?}9tfQ@KHz2t58dm)Yg=m8+of(Yqd?t}R3gl)vUOgOUWO2h39N|KF|&3=GT* zpi`=R8yG?9WenEY>rN| z*qjkkp!tsl3=Ax1{{P#1g#mQp7-&8Kl0`OvvZgO=l^K&ixTJ8N#m3C2&V|$ucH(vi z^ITB|t3hQgir=A~U+~1~Eyvq;?n27cdQguKYrnS=Y6)a9iVOn-Yr+42M?pO!VjHE< zI^-y57_NfB3zDw<5OoA--k{#%|G%T4l}R_ig$;Om6FiXuT?`NdEvN5-#%w?aX8iwm z3^a;`%|OrqWXJ!1$3c_V5)96BnL#OiJ|j4nK>AIQ&`bdC5>8+QuRjIX58!A94;G*J z|L-_x$t0-x4H5;FTzCHeI{~`K8YTuR9Y6g4cLG%V^?+A2gDQqVQ0fI22T*;CBLDxL zn83imfTWL6wZBa z+2DMQ6juri42%!{|2y>sve1}s0(cw_)yJSQeU|_KPJ?FAU`wr`CA}MHttn*w3*2^K z()s`IG^jyRkHa$1B9Swo^;?i&!VD$QOjg1Fe`i2zg+PrBkbgm9E&uh3=B*s7+hwv zy74_=1kbX$)q_VDze&{WMlrfM$mG6iR7MGo!@gT^Aj zrMefJ+x@$@owN-N57L-~`58^Z(y@ zP>?QR01Z&VN`L6$Stnk3KORQNrUGzY0@o|d8|wf6yCA~Az?cBaE}*qzpke0&j4pFn zTxYX_mhXT<9yAE*2Ts_a{T85Y2MAYyDmhS{7z!$Wpw%=uEWzzc7J>i&E`nOkpsWju z4;2Om7M1`1E`oAU27?=4J!lh&D`-p}G{)l$u1G-YK(iSvKL7t+1g+aS0nP;=AAySo zP{R(gS{z*BL%ahrxaR-AOQ3Ap18zUSo9IChXMv3cjk2>W`Ty@y0Rsc03WIw+cnO{J zEH?0z6)0VHr)fGR|=(V&zBYC?lowK&gY_n6At|9{s&Go7HU2^GT_+XLy5`2X)3 zsMLc@&q1RO+GTQ`<!BYC*WMIo9913z|{~@!Z)Q??K`cWI)9Kf7d{xRtDg>2l>o- z7TbJAUvRYxG7lUQNvJd5(Dh=V=$Y~V-}MWi1#2K*GJu9ZT|kDogCYc^-Hq=6sL>8y z|62fAstQ|Nd;J=ugWwACTaLG#K*L_3wltgDebD+A>{=j}K*#hzRWYdj11=~q5)rgdcW(j%0~2Jk z2q@NEK-PmAnxJ`oPjDWE)GYVz!dF{>lz_HuA!hx-Aq}mDbN>H(0BUbsfV8CR@vMG< z1S_ZjTJZnh!x`X(>EI5>22hh8GD_w+lN~fkF^|b<7Ms&-R?xx(*a99$Q2QQIYJwbx zwUOmh51NF4B_{?@smI9k|KB4}17QJpiQIffXr~G?OK~4mp(0u=;H(K9N<-@nKjr{0 z-2$(m2dzSy&sYH}X7As-3!P1z!{RubwcZ6hiVJc#QwU_9%MsL*aORGOjp2fa@j({l z{Qvh1)En-B1PlYHTyOaQ?-{5~m;(yVFi2wpq;|&tf6qV*Pe8qBkaAEJz2^VF=PV2i zECS%-8I+sd`0ByA!+kcZ<2TAGx9bB`6b|8S#2xv6`Xm|#)z6-opjDgYQ|Gzh&kP}S-t=vbEslXhZrybD?` z49W>G1t153mMz@52MT=9@>+ra|K5Xwd;z#D0jUE`5C}Tff!d3pzyz%`1~>lh-vj4A zP<)}!&p?-0yax>|UjY}vpaRLAZvrzo@g+g^gKK(FIq&lS-v`L_J*X4}SqchPP=yEU zE4y$*m!pFt4m4O*@&Dh4`W*}mOptXu^BG-caDcj0F7ueCb9(U|0I%l~bgQ4k0*Xl= z@Onu{XQX*VXa||$1ZWfD|9_wUFfa&jVesa3WB`?*kcb22p9|cO5{n76BgKo&(Gk=L z1FgAqRe_=P~2cM3nV7-|35b<+onLJh?2eg_=2fVam9usKU7IX(x47gr* zVgv0lb%HNVMI9hx04;2p@&7+BsA#X>0xk?d-ggE?8h9Sg1=QsB0xkP@s|RoVoyWuk zTI1#mi8}BqBG8s!=)@`5@h|@W2e}tqD1jUb=Ae~~&`=ZrwGqF7?VVT81ga;&tsl^g z2{?N=af2oj^dX8|3z%TmVmMm$ZTiOaG%R`&YA2k zpz_ZJl=t2Fz%%TiBoHx!Blt!kcrP?;Au)J*o#5<~;|)-VhSamc7a&9Qafi>~h`8ZC zgToC}e1n4)y=(yWdL{n<7YC)20_cD;bajq1Xeu5yO$&+whyVY@L6sS-y_f;o`~CmF zI4Ijg*Z+eG78lU)4>%Tl=CFj`afB5wpaK}=V~|%tO@6LBpvVEqgVwu(sxo&j6dr;D z?E@b8|6dZcEXM@8%nNy9S_3rx_2B=1Nl=XjTdn8}8mb4cLi0j2hrx4opsk6hyW}CI zVaJ&gh$M9C>btmoukVL|b zo8b1ZGiX!?w1WU-Cb#31de9m}$7x)yd<;kvpZ7sSd!VKAAg#y_1a*$Mz|M1;#^u5d zUHvi*bk;w(8ONyd|Gxq#-eK_#S{r8Z|GxsL{|6HTjWziE|E~ZFz4|!}ao~A=*C+;{jKGOsqM&!{@P!0(AU;kefH2j*v;Kc`ORf6`K%x4786$m=k z1%R8Cjrxt(E5kTk?`Ajg8M>=2L{_ng=q z!999#tIugRYdvT?6=b(g-VMi_&Rif>u=WP1A8^-^+wa!xdro&8q1*pK)e3ll5i`&K z{~Dm+yulC%NzL;a<3Qa8*fIB>w-`IK#le zXaYJ|!WX&_*abXT=)_k5Dv%-T7eQkUF5saQ=n_cK*g8a=Gh|I9R0XsY0wuhX|Nk{X zM=rp+>_};?9$dmr`Tt+@0b~*avMWJ?AeT%0|E~$!7X)hg!o+m`|JMYKih<-| zV(5B7H6BRs9R>zQ$n*;+>w=o*^-M1C3JA0w1D1eXz;zIe=Lk9w0+y#imVkD)X8ixJ z4VsvQtm^;`c7qIL^5z4r_5o#FkR9NtX9Bf?5hH~+u3v-gj*tO`|AznnbwNH#VDN)w zMQ3oMAG{Hrf#Jgc|GFUz46GsG5)M=qfsz(@*xr3U;|vbaI4gK%4ATlo8x3B?IdOy5 zDh0;AkOl!Lr+Prk>52Sa;EhI8ctEY)dM93a zrhZUS;m76(nneONOJQpoAgvE<7J{1G69503gXk~d<~hjy;4uexz6G4%SWkg_@;1ob z;8pKF|Noo+VPIflU;ytMcbQwy3>qd|z&ML-9#b5sODpJDm&xV`s?I$@;dA>IWNi?% z+2XX0yiHkL6k%=rJ`asvYcYXH~*AU`_KV*-tfD$bzX@QJ_h8B}2Y)zFDsAK|Zas`hQIdL=1L^2LMjOzxL z0S!MOnZN*ES&~~v@XV6IbhX4N^LA&8X7@%D*P$~rvzJgSMPt;+& z^8df%5r%ruoF1sH2TFtPFlT#$$9x1G>r#<-rr&htj_2ZI2!szyLE4R=KA*z>|1O~Y zp^z*JN(&$#x`M1d0CHj_T3P_jC5HU}?+R-FvqPrLK>-h*h5H~V=ve1IkI7>$v)4>^ zr#URqTsJ`rE?w`raQlN zkndow0xPS5nCVy#8aD#9-uO<~fsn4vQmL#POaphy$|3=cfA|M-T@` zlMLF%_XZWUDh!}yO5pJT(C$D%$2vFgxS8Yqd!Y6gD2ajgUqa#p)XNF@|KA6+N3#JO z&maebvlM8 z%`H%ZWcdF-a0vqg+ZwP>L7G5exaozBI_;0E3Q4qAf-FY&=)3K}xG^Z$P|XcVgg937x!20pt1 zJP7E@cK|e#!vtFM2uf$*R+kI6$4vInn~q40Wk3loNOO(ex1)42U>J`AJX7(n#be?$`GL8%3{zo?>r_C7#}pW>NJlDH0|pF zl85p^Wh5cKCrCZ0|ADo!0h+Iq`2Rlv)M$V_&Rn~`9R z(8A;1EhoMU_25Ash!RkK6m+bMxamBT-3fk_3O8u697G?t3uIaov?A8z|Nqnj3=E7b zu%r#>D)K_)!V|O&A1PUY8$bdK4E2mP|Np0hQZTHA3R-qM;s5`1P(cD&h7AgOa4QYG zsS7lU1}d;XArGo1!C`RM5!CU8Fd^+oQ2Cw?nuu%w4>W*s0dyI@AEH~S0y_WW&;S1! zAP3ZdeFB;>0NaDU+=fZz|Njion2iV2KxozC1ThYjn895zCZGTRGeA8jQ1=`p3R>2Y z@c(}%Xy`Tqwv-E0d4U#O!RCKKidz2v&jgL{%m7W3f)*dlXN0cg0T~0XwU}1?|DOpO zYLx(u_kvbLfs#BZg?Y?lins@vFuo5GheoC&sK)_XrwkSZ7cF4JKzj+k{QsW?+W*G{ z8VCTLWHFD)19pIfpj$ooj5jyfkPkS*Abomfo&W!HKwUN)M4ukIcM7~&f!XK({~XX3 z&H!*z43fA&RUtSPd(LAj0M%chV)5>sdU$CIie<3-;<)ZPar=We)q)DkyLWE8aJzs9 zEg5VW7?@Z5|DV^xz`z7)=Ruk*b67k;1D7B_gZ5^E#^gXHFYK(ETQ_fj%QP%my&gPA z&mi&te*tK47}A!9nDc>0(6O!(61yPlK|L9V|Njd?J(&nlF9|fH3zi0lC}^!WL&E?6 zg&!Cg742j`;t-6f}+p%eJ5% zQO^JWrJ%`dNc9c!1mftRxyaRUOcY=MTJsj&-1cGe}6@ap88K&C29@8+Kmb-8(LPA9z6;KyfJOSQkB;wG1Q+ zO$s1cNP2|I*9Y7N9sd9|4xCCrzC-Uog2W{L|E~g7x3HmDP?@3g|9>^e=a5b%D851K zX28if7#_!v7BEA^|NqsXEgEw`Sr@dh4%FPkX>8;|8KAX<-Z1SqXWE)0n|?i#R0fs51Jym@&A7Vs3e;Lwh&%7_|9YU z056pazvFn9$pu_if%G|Y2i$`!#se?%0|h^1=ME^ku!d0m|No#p9t;uCAcDr0CsGh$ z&BGuACI0_!0!^iY9103dkQllpATf#m|C>S40XpgvT^(%wKiCqGLXaZR@Ef{9*z6|E zK+rfKXi|}oI?z%skXjt-Amcw0|Npmu77~H_Y&aBx4-*5a0~z=Ql!d@^c%Uvbc=r!9 z>Bew@rT}4i$%z|z<)t%dh7RmeL@3oGAGi9y6*LC`>WJWS1l0Gfp!yxON`jC&P%Z%t zZsSx38vl{_|Gy1Xn85Ne$P$DLAr1t^F-RS#0rG$WV91mI;#t`%We?Mr?h6*@TK!Xg;KcWUX$}iyAp~UOFle35d`9q?8K~U_+Lp`5;CRP{?*S8Nunf_Ri0>D4oXGDy ziw!g)>NJ%bG|tc`xH?)-&|mo8tqdIPk6*#k81Ig8DuPiTSwY;__?EvV%NQwUim1zz?IYWm-C zUi1I|j2s3A&L`kr5U7a)o?&+dB^>Yoo6CI0srB4$d>25C{ApZF zpov32P|F^?o)|O;?Z^!}9|={=nVXq$0UrZmqse{PTmh)!`tbk%!WRq-j2R4|f%Q2o zuAs~Z9`162oFZKh8tDSB3;_A*PCdBffK&>MI{*JK2E`*Nh(N&t8f0?#|9>&4Gy`F% z7)JgF6)Y0}|1SpV1D743VLwpNLCX$ks|&5_1y^ip;PxL#GpIr+05`KhWe0S4$qU+Q zom{B@qn=NI6;wYn@Cm1aTmr{@0;~@}987UGkc+UWX9Krzu&4+1?Xaj11eNLaSR{f$ z6+9O45YTB!SD;jU;3x1L=28Vh{a)9ERN8R!x3BYsId!bN`aiiClHUr zpaf7ofyFloIMgTNP@jktD-^wgDu!ymb@R53k18;kc@Ky?F_ z;Lin3>0%Kt#v06g0wp-a%RucAggJ=xP>#c!6*$7Z3g&$<4I}sjs&JT71@kvdDVVP3 z6R5@!fwedyunv}fzy`nwK7l42>RWIm+!jza$5vjog8C1LAcES!C(wZ-f%M=|--{z8 z`jB!AEc_WjDR2S~pH0AF!9>)!ggbN+4u?(x`54t>Ap7|QCS#2oK7q+NqGk#X@oAVA zfIT)Hhx!=>Ap22W1lBMEhe0!N7&H?{2+hKg31`D{2dK*k4L7jGb6^q(L9qBd92U=q z72nhS^ReXSg)nI}fJ+=lraA-?$CjIq;0TE$I2?2ohX=sB3b7>B<4Bnn7XIKU zIDx~0Q#g{+X&hfe`kP5ERCq zcm+k!5+l@pK0!^Gi@*+n5qyGLI4ssiGYF!CPf!PkgLJSb#(F_r96_XuJb0T2SAfbnE75X z3Wo(a`rd*uI4p?4;$x795#4P>_=BS$7DtfA;z-r8ID8zB9LJzQ17kkHc=V8l*v}`J zfWv|W92O+vupkkK`Xn5Qw>}9+YEOo^7=8RmFd2J37EHqtW$8E^ngL0q^%xdp;III^ z-UCZo$-+?{WZ`g7Hj4R>@CV0z4vqpO4~IedI7-ZXT#B}i*=ghVY4i|cV@vj!X%HzN`|Jp92?(2T=^7K8>+pg}R8 zU<;0*?!XbET^Qzo?dKEh!BK$pfvv(U0sC-R+>axhO~9}iWH6uLq?yRc;s20p>vI2^Pa zM{3`TBQfs98lv@lg8Oi|bRUlFhocK9coav}9L3?WW1uvFrTs5>3`d+D!(qWOTo&N) zz;S5YgT^Xh;SY|2<2Wonj>7`bq!+f9&v_hCZ~-&QK=$(qUcjLNM;}%Yav>^aw!DNR ztz5#i80_Io2_XBilz^apK-hc+J}3f<`fE7qg4?L69USnW1_OB`=P=hiAP{I zrq3SZ5Pyn8{1px#gYR=i@_-;%KLelOTbN6y^EY7*3kZJ1QNDb_5pzFrB$;0@YasSQ zNj||psOG?eg-?h9RRX3#h#h;b6=KKkaUm|O*`H5{4{MUC=Mxgdo*9IMaEJ?IHHc40 z9EW;I9O@-O9*{wbB8Zpygrr~^rpvcr#*mOSOd6sdO7aOwEdrSz)fb7R&y$q^) zL=4GcPZ~lBI2@#aBSw|5CmA7Ctmf4738{e!P%JK0!(os*O3M!#Kn#3Bnm9s83x_#c zpmG&U!7YTN?<-`8!vZ6)8!$4vkP-HRUdR}!l>!TYP&p=Kj3aS_c6ot|8L&k#f=|c< zM@X3Bh#FH&^Fj9W37O%@g=W~xLm>-HgTNlJ#2UwZLe@AOYGVMhA4}ZZ;0S74u;(#@ z+7?F|vc(bib};k7_Ja)t5qv`SIC6mlE^!>$%mGKpIiiI$)P6o8M;wX83FcCe`{0;Q z$Qg%&oRJb2TsZ@ukTZ4%)eAY}2qI_Hf&yw5pO7mKhq~iPbnZCPiaR(>U=G{}dE*FD zZyX^3TFHVfclhFPkRP%Kpy3Zrz5X~X4#OpmJxGPZKm`kyL>-PLYCr=wLgC<`z)aPk zW%Ag37KtO9C8H%SNSyHrrQmRA$^r&6kk8S(tU@U`(nKoE;_dZa%$%arPOytf{cT`i z5Rigc1tuYm5c)e~x&c^z1p|YC5LgC6KoYLd-xJdl!16B`7z7~m&nWW$IHpek$^X+} zU=ZMkNP$Vv8hi#mp?@CJ4}j$(7#IXVb0uI&1_lP0e8%(-VEGCL1_96#Ds=gd=?W*= z#iahtU| z`UbH44+aJS&>CZ?G-xX<0|TGXe~#%7K=PnNL z5a0ueK{0q8AD_^Fhlzm_+dJknTW~{Th5H9c1)nevB!q=|pyE8>c~L%L9%v!SQ?dQP zD&`8t?I+eSpJ1H6VGXmy^a*R26_^Y1i>7<8Vb)d8$S*EYD9tNMO-#;6Ov(ZEFhE8# zb;;2fGq3f6P5t2PGsN{mV*{0PM~9R82E&RpgGeC zniEB!v^!|C00W;ej1Sib&G|y$48bQ{4T)l5@O4}ae8MFV{q@3*pwkE$_=Ls5gSmXd z65!?4e8R#|ahSzI;G77)8WWuU#lU<%VIi==(A&#E4uxh+A*jRVL)8g_*Ka^K7J$@& zJ(R*H3^N#PKLejIhQVM9_=M*`9aIhtu{vm!MNDAebMp@h@z4$T4|4JG3nm@CgfA zOuqoq>5|4|5Fy zsRk_vaR>LZ`Gkck7+3;4A*O)Ep=Gns1O^tDAV?Ji7Kdh5p%n})!QqZj3;5~<+(By( zL22#)1Ct%pc#sCj={bDDLN^$gg6tsHg2h2g#X;&nFfavy(=SMlPrwZla>BwK46H$L z7x4+WK$C{B0t2gyYe0wxNI3(afE(Cj^?bs@77T1)2}O_$pMWd0vJehnU<(3EK*gak zC!E2+4iN`y07-(Q#1&kq@(Bw!FfeLEML`aBfjU@t0Ry8hvN*^kp!T}(4hBXoWC^g# z_=JToFtGUqdw9BmqmNGj*0K?P!N3-TEDkP>`GiFn7}y+<#lg9jPgq2Pf!Wc|1!@DI zfD>r3E~r>CU|_2EM+$N$Xwyc-gMm2$F2N_@1ogQ{0s|vF#2NSmoM0AIFfby*f=|E^ zv{oHt!2|{-Nc#2J9iX{ERDpph0$F_pq;eM)wP0Y1K-K`w z4Wa?lAM9Wj=L9*2flpX8W7TAGWlnC`HXS-c*ab45=uFoI2i z=oPSoW*E^I3{2p=^q}Ilpu?R(MJodXlL1@4%8t(fir;#)(@c(D`H6Lv9+)muZ$ez6w}EUpo-vW8E< z8d^+>b1-lQyZU-M`}_F&K^z5+L~Cg35m#Vfca3m$4h?aI%Yxi(1+DJI9T-@A{llP= zd;*rx#3G)+z#8Q19}Sh^6EFiE!2+r+D;U^(gJ4?t1WciofcOLk)*v@eA7}$xzzin7 zf`Ki{**_Fge)0*JK#P0v1JeU`GmC3N%PMe{1~UEz1B-`aFevwe{b3A^KnaHF6LvF; zbAszmK4A%o=^J)4i`RoUm+%SCTfxAjYY6iopMY1ue<%Qn@d-;rFhFMaL0nJ`3AGi> zW#AK*s9<1(Ye$xcG@pbeW-u^9I_@AHAoD>qXn8)Q{U$82gMrZ)A_jK07t8|i0quOk z5;s6c2f-8|3}AqkMiM_57{M_HR)QoCZ30M2FtB(i8-gPZ6n#+hv!R;}_=F`bKnje| z6@X7d0;NyM2#~y+8`ykgAN~i4@Ci#+FtB+jySYJBARO=?CO>1k!Cq$Zda%DhVGGr^ zgMq~b(_IV<;3K#Age4y^FzGvk)PgX=SO#doN-;1n>4$^lKp06L8m>|b3{3ivBn1xF zdZ@=4U;!uPz`&#rF38XffCijY0t1siJYyhP0F!TEU~zVZrds51fypmmVAgkrRUmxz z0z1G9cOTmwQqIBKw{|G>bk?}J4>IHb|l*YgQWD=;wY zM_|za%^K(qk`7>C*7w7r9@>_`P~X77?Cc1uWBCvs09Ezi8WmcR!F(*efq^+3iw0>> zj4<#C3!|%lz`*Q-O+74x(A3KaFfd0z)q{G#a2H8KTRrF&$T%=C`$08;GYhm#m4^8k z-GTxJ7H3C8sF#s^42xofdT@;@EVF=tB^;XuTt2wKz~X~VJuHq97JyQ@uq*=uO9VFc zu%%1rK9)6LVDZDI0f&!e6Bt;XJsg7|UPky>2HhbO7+68M1Fo(f8kDlo#0E4fC8*wjWkBO?U|=!EqCo-{%8*XJFd;t70SW;OtVZx27{bRA z(2x;=nFr#73PG3v+<*lPtVZxI8NvYAU;vDUtAD`2YD|QBbbX2f49xX@p5TH5R93(< z0z7D;aSpRc(Sw22*~irp(i1^A3_jWcEkxn!D;SuA{K2hKRP#YT2lWguK-X`<5+BTB zxB)8|SajhgAS{HbgC#Z?A7&0*{|g3IBX}nkNk7y9ia$VwFsNRE<}5{MYK9r0q`|;q zgv|j^17HqNf)*Jt2f%2UINZDp29_Xyq$UEa5QL?Ad1#pd9}t381B%e7fLSO39hVV? zCQ`u{(Ci3Rhszw8!(bk*Cu9)ZU7&3QB1CfMFrH*^MX<-u02*cW@B#y; zL!j9O!vbi?pcyEP(;R5Xz&xZ}z`$%|R}V?c$W=ScK$weRK@N2>+`%w$n1Lz|49rIG z0T4t8!OTOa!RCYWKP)jpOEkEF6F>%n%T<)@gKm&8w4(_t*TL8*txXgdRz*=vQ zGy-D+RjBH~z+?n#<$)Tq&|CozS|}gpP}K+q=1?Pja2`SqNtk*OXyXU2zJq}YsvMO6 z5J3gk0PUK?HSAzuvO(%{!|DKGbceiPV6sCRf`X|-cYvAz1GAkSXcQM@Kavkc&@5K7 zU|{p~3v&$u7h*^bg?5=mps63`P_+aGW;J{PMfGf%L8$!I4thrl@m10psQ0u^SLGm1G|%JNVuyj*k#}(42^P7 z{^LWG+0Z_NCe%V$&}lAUV0M9*NC=;)LgO4(@`*vSFRWICm4q;Lu#yvQ?t^*;mQWXH zS%ehlaE;(Z!Y2$bVqvARJ;)P$!mt8J1ezOQ7N|n?!7S3U0C@njgcPcW1~E(n$rhmn zwblX#Ha}N)N5~KzAG}EiOT@734hx}rmTMAYC13+<+<__>>teXyI`WPBVPM z+GtUw?ZCk7>j(}GkbbxWV5@mx*&Aw3J#5-k80IqcR;qRf14}5}M1+rE2EuX!)Ih@K z-C$t$g=7)X{xM7gF;Y3yr??!bqrt!wilw$h9}Ll{U|@m`48TJel>cG19;|BxixQm$ z3`~ZQUM)&c!qub2z0L&&CL?ek6r4EWK@aP=pqsDDz`#^*gv|n|!LUREbC9k91B+`I zEE6L_P6wK8VbiX#z93v*0t1_qf2f}eIC&xT33Y(Wf5fm3EQsM6XD~1a+aV@IV3iQ8 zwG2y?aP=1$*j*6G9~2BIAqT65VcA<-0#yEhNn1hWtp)cP6>OfFc`4$O!8&`J%iK7)ZtOC4kv2*d3|wEtl~fyF7z zr<%~p2<8xYkU}dTSc!@5V7SFI7??wSVfhnoF?5Q)o=+Io6@pEngRVLQ4RgbaOfhJj z>O;F+Vhf;MEoexg7gz=Y3`}tQkm?jzfdy+bf;|Yz|6m3KpRhK#C(b7f^C^sP0G<1S ziNiw(Trj~Go(RK&9_Dj{1_ma5%pgZ}U<$zT&nFBw5b7h0Acqc}z=B!>st#7`!J`D) zC4+egR#3sz!8`ynNB9IR|AW#5(#V@32LoHEufDH8IO`+gj8GIALbDgHD1zk%SO^&& zsApgc_SFw^1#eYDvIy#9m``A|9_SEA(0BpVB3Kj|Lc4A-AHqWvEs9{ZC0reB5)vMS z(71*vgt-`<5A%VM1_PTLwvd7*TA0Jp6Ccch^)LlS(EJK(N@+k#FqlhWWjfrU(74ut zPC~*Q3R4d&FJR)ZHY7|QnrrIe<9tRh7+6DLQI3>tVA&965G<%+Az-|Lfd#G&NgvE( zx=;tgEH;AnGa&lw`Gk#MFfhVeX7GBMflt^Ns!$Q!m_hUtOf(pnp(zuka)GIb`V8(d zlL!V@Ew~Gj(ikWgg);C78^8vtp}7Fng?z#$9Slrba2FyBFo8BQF&ubedch5(RZ*~# zRT7%0;ZX@qw35)MM(-t?{9s`B2@eiHEK3175Me*uTxh|FX0EibBy{VRFMxqP0;dD(`GnC8G=r8aFau$HxPc28*qp+>{2}dEL{z|{5WPPF z*Y|;eE!+o9AE@quMG-EI<{AuaPUspL_=L?NK?tu)V0@Uv&7s8!%mL;J3~b>}Za$FF zW{AT<6L9b-fMsu(L2!*L7}$KmQ8j{UXIN0f^`Tq%fPu{?0?o$^eDJg+`~zC|z$z!0 zg%%PFY!N8|fhFY3povzf9_kZ>i$IaeCu{*NF<}m}lwe?U!sZ~T!{H8s z@^LxHGJ%0D0x5*xb5F2bU;!=AU_k}rqx;Nq1p~XIkEgqzE4Y0Cay3dxECnr4VRaL% zE`o_eE7N*mSV05#=?4ZzPpEOoRRPRLu!alFfiR!L^jmo_FnZzB50-!Y0A(xK z7!yu?HyD_0;7imH`b0prE~Li?%72KJv*0;c20mfXs2IosctZykMUbH%@M05?JbI7H zMu36I2%-k=Ly$UHEeW5Lg@&Zi1!z8m&Dz4E!lr?N$p}kSzzhP%9Vkkm6C<#=hFbs? zhnsg|`h*9}Vp*^#)rD5qVqk|rZ`5Gm6Sji3b6_E44xKQ8i9-%W8bMG%;Iv9Y~mOCQmPM{5Wc<&Kf zC}QZ#U|@H43~}}VFP;XkTm`A*6YvD*7!VtT`Gg%7Om}#~EMAW;e1d@$tRJKb$-TnR z0D@&)2WUcoWqg>pFtl?CmxpC!XvTzPbeMcStnh_NzFNp{H%uBVq7r1NzdmB_J3p*7sFe}3qAoN32@CiFj zVBie)4-Im5)%8TQE%*d5%-O)e7F-Wj2-1qEUSPZC;5$sfg)E};=yZdD*$&cr2RR5M zX*mlpaD=!9`Fi?+mgs=Y24RHx0?-fz?N9;NpKuGI60kUfI{=!9U}*xR5mcJOw#2}q z!r6d<$q8w7Bz$osG?O{6U|?}VUEBy=p9H>Kici@21OpR%{s0u0&^7>cTa>W#3kEi4 z$Dklr*ifz#1H~&?E%Q-LQ~>8?b?aCBPBO3N2{G1}hC<(*!Vc zVCKVG)gqw&2)I!S)rekPxPD+@4h?`U0mgJFyns)HqzyP9yvvVISQ8qeIGT3g1;MquUd54zz-7^^29G#tA17MjBUA}{XB{;wlIxPz-4?&G$sC6J0xvyYg zbBzdab%q%L%|7m6gZPBech12a?tX%SEyxvCts|leR_wqgTHsLusq}@N>Y=IA9h%Kx zsoEJ@4#Da?SoQGW)D|zl@5tgXo$i_VsPp6)L>xscMgG8 z3w-d|J?PL+v@lMM2@K2ujZB8H$W3BtPX{B@n8=2oH0G%Es_Ue*%lUZ4B$;S ze8L#>rqJ>St`0mEfi&3%wU+_f&d0F#1_PTfd_)+jV1zpWnpBLT9S~S?0WV*m@~{zO zm^{p5UI`3LHpCc2Qe(M!V)QR5Q7R_n0dY&49ubMAm$VB zf~^$wg~d5EuHb0_J!qjmgc}H2qz4aMgacu1b3!3oj~=wXD;QWbLSbQxFc22BzR-~J zg{BF(Lw+zY>Oms}TxUTGKp*HT0vBj=1J-VV>Z=#_Ghko}hU-LF=m#!H5UJfSgMld& zn>uJ*;;=y2Zvq389&%F>>M%%D)$<9%TnNh^uvCt=riFn4mQA7A3Knv%&?tlN;)Xg1 z76mYeL47RjcY=XA6y~COq!2u2oOnO)fDtMn98YLJdD>OI3 zqDCCHQUq2oz+2hS#0N7F)_s7*Ijro5E%Jvs7~UF(R$j1>2$;dZ2yM=x6j&nl(8L5Y z0Hz_(gMrn>(;eDFLIfRbBG(O?4dEpn*ue}83?#Ny>*4h{w8IDUAzU0*k3-9Jn1!&! z2@5$`6v7ty!3!{O8O|pRo6dx_@SwS+9=<;j7ANqg95gKiRxq&J`GxvAfyZw^2?>Oe zLIf7q=#>&Q7r~o^(2$1pb0CSZo=+Iow+@6VfV&)8!ohq7>+oRkp$!s0+3t=K4Dl;!kS9377Z+DVT*2H;;^0@j1NnUuLAC`n*<3TWSSP}@G!N3SP^8%EKkm??oLP)Ea zPZ&0-7788>MbyHfHyD_l!G~sm48U{%tkDbG)`zY?OoE}FDIAXh=<^X621GD0`QXzJ zEw5nn3mE!m)H5(e;4=W)1cVLXV;FD)6a}z$JZ1>MLJpQIVY89 j~0Ua-U#22H)N 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 #rN%D}*GjZl9B>L3=7`7TH?dJYy6Qy3W7 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%0Ac}ftG#XhN49g ztUpnPRsh4&P8m4YfOeKbr!L?Upg2WxHF(|%mghir}a7A{B2HWQ$U zryLaASbSKHp4vgd&cG*JZU9=Y!7NfsimMSVXg20`j!o3+Z(qIx2zAOk4?WjQP{0}2S_ z^(Nr0Qw)5<6(D^`4uJU#ypIh@9Co->1vu-2rmbLU51KVA(4u|Id&iLlTF10KBaZNqizGsu}o% zE5T_2;VxM2s)WtFRe}^EYlJ$y5){W+5@{t`sQ_Dr0^Y=iWDYoSf*gPr^{@b|1jjg1 zA_Y4HqyZF_NCv?*phY=sOHL(Pl*7f*$^+PpX(e(J0PW9%<>yMsDv|n1w6p+QM_Y+j zZou_{auJe);UNMlKaj+8VIhkn34!+{F*8hG3hF&qLYFaDq80zJwV{>h=>wWEs-Tzl zRB?d&!c0{HU|OmQEgir-RRv22RcPs8GN?>o;1jOGkq)YGq=PEtGJt`B0hSJ`aHNAO z^mG7A=~Zay02Z%Rpsa}$tZ;F(^Z|?SDzx+gi?%A{^Z`125*BY&$O(jjfdLk8RiKI$ z$zoW-tb!bG&r}6IR5)3<3N3zNQC5XkU%*-fRcJ*AJZjL24p_}!1=%fLFAQEigyf(p z&?u`0)fZT@ZZ)VHKvEBDU{#}~4Oo|<8q|V7QV(l*SA&xZQr3kn2d)M=07(O^qN+x# zM_?gWjh2RB%R8#k(h#iBtVT{lAp7A4ffEs;l$#7Pn1N5Y8Z8aMO3P}rv@!*z9xbiF z)uSZ|P!zF&mSt2!CRM$KtI-M#4Ui2W7k~-}Y;l2BIB0-u0I7$}h13g!cUU2X)m0VuYy_^1Xswiy^0U~5%tKt&yrIk47B4O$|Y z3JMXB`QStV9-v~Xfz6ZEfZ_+qkZI5q0N#U!EDlN$AVWZz8k-~0GBs>vY7NM9NanyY zdkr{KgVHXnZ3glU$O2HjB59ZgDs4dGAYUMf!}3%OTD-y*Cxf?aA*qMWKi4A1H^_e2 zZYc0JEhG)Fgj0)FD!`V+f_;dj9&Qd=x_~*f7A;+X91332REt(Bz+LJ9-u;$T3yKmX zi{K6er59vzP=&z2CtQn`Uf>P`g)owOkOM$@w>AT64>)}w5;R;N$XsN7peO~|gO+sQ z0Ru`ZNa|tbbuH{D%vw+$M^Z2inx$(&We1kDRSS|wQV%O;Ye8iSl6VEkK_G{LavYL4 ztUpi-O1mf<$!t{oFTw+OeXvq$?ouLjb*@4f$Vc-+4LrZnAn-=QO zN+-A4TZra(4qpi!=!!& zcw(+zxE?KxVMRkdau|aSu?MxdKrTbe;joNWj~4WB2Y_=pBE!OpFz_ZMX7J)nZ{d2h zXn`vN1wXQPLFzz`K+Em$;Q0XBhgdIM4+=&kec=8J1D`M`AtOgGEQN#TQ;^id8tx5f zIUJTS8$f}9q#owk25|BKB_e2!fVG_(K?O^04W+2DJ1AHwU>0 z0Obg{1X>v|6XbGGNI(|FCkr>AW%`*QlRyeUDGE!91@CG@@(HZuZ$Qi2GePEp%z-pR z>xCQ8651?K5(g;&B^+!Pp(PyH2EGPRO@QP8SR1PWls1sf0oeyKADo83Z7it z=0i}rK~fKk%SN4HgTVK(!B&g|MhicQX#{B zP-r6=I31KjK=RO0)D}>>LXwC1tOYWP>Mh)YmXPLxvH-{caDqWZ2W-7#3tHg<%K
    ~A&=STxP;mt^5S#$8xDc)IfQ5Yv zTH=6(J$Q8+vI9T~8e~2wD3Qb79Tce`i5=j~Zq$NSy1*7rwxA^z*kJ}O7r@e8USM!ZiVdlXKIDkB(0Eba^AwN zptwPD$vjXpWZ)A9FV(_k5n9~BQd=uz=_XSvWCdNla4RUXkqn*>N=+bxL2-%AV2}@y z)WhPe6%@xv;;1<#B_IqMY3=kS_v>8lz|!egxf%g154bt zf$}Sof#B{tNIfW@A&JiirDBjcqz_Ur+y*ijNx=e86$Mg&BN2f&ej%xcrOr0ALG+F&a#+t3os0#J1Zaug_GVDmk4!T`+&!_=b{0AlXbA&$_gp)A!T_ac20r0-P%tA|0882J=}P;{fI2dC_I*m|9Iw3M{~=0#BH zgC#E7(GnCafwY6-1j#1wa05LCP|@CkQ-5(yTII?$ROMxbm0QjeB+EI?5J61M=? zolG5&o^P^n2U_Y_1WKkLg`hNn%|ejRkwOA)AtfHXtAg*!klK~lH~ zRNR3q1jRWv3(?{nR?Bxlu4Sng?f|tfkPQR}GM{h9f>w&ag9I(%z+C`}Z3f&`S( zkTfKNybN*>T1tZl30j*69wcZ95AGmPoWsmV2@+U0s1uYlVJa9H7#2g56nHlowje=E zg76>#CqYDc2zLRzkb=Z81msjc;V$HK$H2g_1eBgZ>Onz?tRCbd zkT@u{A^BtpsC)y7gHjJ8Qji$jfm#4gK8Ubg0!o%34WQJ3WPt(50FXFZYFGkFWgu}- zTqCOoc?cv9@*vDXAp4hqk_|`#6sgD>K<)vFqebcxPz=Q5Z#uE_5C)@{08_4QGK@U<7@;S14P+|j#gJ@*+9bo(Ug!@22hpYkQLXZYf zh#+f#Cb~XQnn6;p&I5H2C`6FegAy$RpKw1Y
    >!Nlu9L4vFSlxjg5KtYGB0a{Lg z_nRQ8UkOUIAoZY-Lskz>jQyYxK~@h+v>^4M+{Orse`p&?^$o-a{h-8%tO1m2K^j0l zN3uW_#0QCk5+kyDP@)BigR&d4dhnUee8T;pw1H4x&#)2{^bCB$AbS~*H9&nZ0hAaK z8W>iBf*zzEB#)$C1?qtbpu~uzeibO_LFz%N9$7soY8mSJgeQRF8d(D<=s_CL5}nEt zNC-_pOLVJ1K@U=omgrPK>OkUXiEb4r=t1HjkJlr+2-G14Nq}62>>y}RPXGlSvU*U+ zfYgIR1X(>aaZLod7fHSH8IS; zRzrhyA}D(ztB00!6G4d#Sv@F9K<0xIBeHr4Q2h^*03|YH4WPIJiGzX)NrMu!i8c}B zFl6k2@8!VGRL5-{)6eS?_phStJzFuJu$Yws_NuZ!c)&PnUkOs6MRR9?b5=RTtHJ~T~ ziGxB8$pQtCPeJ0K5J5H{5~B6OlR!a-q(L5<%_f7~g{%RT`Wg6yCxZ+`Ru9T8AaPKL zAgNyq%^j0LA&0CUn#;fohLJnYYoV!hGRTKW8stDO2U!3L5o8OXiF7h315;(1*Jb(Xrh~p7Nl#TiDfd#hsYLy;vD24P*5XV00~mz$)NH8Nxdv6 z#6apni5FS@4N&>dz$ZKf6jVqWeY(U>!7fOaTQok_FPBEuSEBKp}{1J~RrZ zfI=Fq9u)oz3=GoHxSRqCLSzll0%Qs(sKFXQA;Z8R4GJ-k1)#KntR7URgTz50g{=M$ zNFSf@R1k%%z8;#Yr=kU^bPGr&pYT+)AYBi&cq+)jNEXOIyJk~CA%bMVdT5AFMa%c% z&=9Sk3QE1m8lZ`5Dkx5oED-O3ItUbW$m&5s&%h@<6)l9sp-}){@{Oz>6v80&kPt## zjv@haIRl^YG>|>W8lWLG4U~$J93%;HAV@tZ
    FfQArwc{j3pP)LH*gF+6jzMg?$ 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 diff --git a/roms/SLOF b/roms/SLOF index 9b7ab2fa02..a5b428e1c1 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit 9b7ab2fa020341dee8bf9df6c9cf40003e0136df +Subproject commit a5b428e1c1eae703bdd62a3f527223c291ee3fdc From b296b664abc732532afb732f1d02d22cae9c847a Mon Sep 17 00:00:00 2001 From: BALATON Zoltan Date: Thu, 3 Jan 2019 17:27:24 +0100 Subject: [PATCH 02/37] smbus: Add a helper to generate SPD EEPROM data There are several boards with SPD EEPROMs that are now using duplicated or slightly different hard coded data. Add a helper to generate SPD data for a memory module of given type and size that could be used by these boards (either as is or with further changes if needed) which should help cleaning this up and avoid further duplication. Signed-off-by: BALATON Zoltan Signed-off-by: David Gibson --- hw/i2c/smbus_eeprom.c | 129 +++++++++++++++++++++++++++++++++++++++++ include/hw/i2c/smbus.h | 3 + 2 files changed, 132 insertions(+) diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c index f18aa3de35..01b9439014 100644 --- a/hw/i2c/smbus_eeprom.c +++ b/hw/i2c/smbus_eeprom.c @@ -23,6 +23,8 @@ */ #include "qemu/osdep.h" +#include "qemu/units.h" +#include "qapi/error.h" #include "hw/hw.h" #include "hw/i2c/i2c.h" #include "hw/i2c/smbus.h" @@ -162,3 +164,130 @@ void smbus_eeprom_init(I2CBus *smbus, int nb_eeprom, smbus_eeprom_init_one(smbus, 0x50 + i, eeprom_buf + (i * 256)); } } + +/* Generate SDRAM SPD EEPROM data describing a module of type and size */ +uint8_t *spd_data_generate(enum sdram_type type, ram_addr_t ram_size, + Error **errp) +{ + uint8_t *spd; + uint8_t nbanks; + uint16_t density; + uint32_t size; + int min_log2, max_log2, sz_log2; + int i; + + switch (type) { + case SDR: + min_log2 = 2; + max_log2 = 9; + break; + case DDR: + min_log2 = 5; + max_log2 = 12; + break; + case DDR2: + min_log2 = 7; + max_log2 = 14; + break; + default: + g_assert_not_reached(); + } + size = ram_size >> 20; /* work in terms of megabytes */ + if (size < 4) { + error_setg(errp, "SDRAM size is too small"); + return NULL; + } + sz_log2 = 31 - clz32(size); + size = 1U << sz_log2; + if (ram_size > size * MiB) { + error_setg(errp, "SDRAM size 0x"RAM_ADDR_FMT" is not a power of 2, " + "truncating to %u MB", ram_size, size); + } + if (sz_log2 < min_log2) { + error_setg(errp, + "Memory size is too small for SDRAM type, adjusting type"); + if (size >= 32) { + type = DDR; + min_log2 = 5; + max_log2 = 12; + } else { + type = SDR; + min_log2 = 2; + max_log2 = 9; + } + } + + nbanks = 1; + while (sz_log2 > max_log2 && nbanks < 8) { + sz_log2--; + nbanks++; + } + + if (size > (1ULL << sz_log2) * nbanks) { + error_setg(errp, "Memory size is too big for SDRAM, truncating"); + } + + /* split to 2 banks if possible to avoid a bug in MIPS Malta firmware */ + if (nbanks == 1 && sz_log2 > min_log2) { + sz_log2--; + nbanks++; + } + + density = 1ULL << (sz_log2 - 2); + switch (type) { + case DDR2: + density = (density & 0xe0) | (density >> 8 & 0x1f); + break; + case DDR: + density = (density & 0xf8) | (density >> 8 & 0x07); + break; + case SDR: + default: + density &= 0xff; + break; + } + + spd = g_malloc0(256); + spd[0] = 128; /* data bytes in EEPROM */ + spd[1] = 8; /* log2 size of EEPROM */ + spd[2] = type; + spd[3] = 13; /* row address bits */ + spd[4] = 10; /* column address bits */ + spd[5] = (type == DDR2 ? nbanks - 1 : nbanks); + spd[6] = 64; /* module data width */ + /* reserved / data width high */ + spd[8] = 4; /* interface voltage level */ + spd[9] = 0x25; /* highest CAS latency */ + spd[10] = 1; /* access time */ + /* DIMM configuration 0 = non-ECC */ + spd[12] = 0x82; /* refresh requirements */ + spd[13] = 8; /* primary SDRAM width */ + /* ECC SDRAM width */ + spd[15] = (type == DDR2 ? 0 : 1); /* reserved / delay for random col rd */ + spd[16] = 12; /* burst lengths supported */ + spd[17] = 4; /* banks per SDRAM device */ + spd[18] = 12; /* ~CAS latencies supported */ + spd[19] = (type == DDR2 ? 0 : 1); /* reserved / ~CS latencies supported */ + spd[20] = 2; /* DIMM type / ~WE latencies */ + /* module features */ + /* memory chip features */ + spd[23] = 0x12; /* clock cycle time @ medium CAS latency */ + /* data access time */ + /* clock cycle time @ short CAS latency */ + /* data access time */ + spd[27] = 20; /* min. row precharge time */ + spd[28] = 15; /* min. row active row delay */ + spd[29] = 20; /* min. ~RAS to ~CAS delay */ + spd[30] = 45; /* min. active to precharge time */ + spd[31] = density; + spd[32] = 20; /* addr/cmd setup time */ + spd[33] = 8; /* addr/cmd hold time */ + spd[34] = 20; /* data input setup time */ + spd[35] = 8; /* data input hold time */ + + /* checksum */ + for (i = 0; i < 63; i++) { + spd[63] += spd[i]; + } + return spd; +} diff --git a/include/hw/i2c/smbus.h b/include/hw/i2c/smbus.h index 5c61c05999..89dfea1a08 100644 --- a/include/hw/i2c/smbus.h +++ b/include/hw/i2c/smbus.h @@ -95,4 +95,7 @@ void smbus_eeprom_init_one(I2CBus *smbus, uint8_t address, uint8_t *eeprom_buf); void smbus_eeprom_init(I2CBus *smbus, int nb_eeprom, const uint8_t *eeprom_spd, int size); +enum sdram_type { SDR = 0x4, DDR = 0x7, DDR2 = 0x8 }; +uint8_t *spd_data_generate(enum sdram_type type, ram_addr_t size, Error **errp); + #endif From 08fd99179a8c5d34c7065e2ad76c7f8b6afe239e Mon Sep 17 00:00:00 2001 From: BALATON Zoltan Date: Thu, 3 Jan 2019 17:27:24 +0100 Subject: [PATCH 03/37] sam460ex: Clean up SPD EEPROM creation Get rid of code from MIPS Malta board used to create SPD EEPROM data (parts of which was not even needed for sam460ex) and use the generic spd_data_generate() function to simplify this. Signed-off-by: BALATON Zoltan Signed-off-by: David Gibson --- hw/ppc/sam460ex.c | 173 ++++++---------------------------------------- 1 file changed, 20 insertions(+), 153 deletions(-) diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c index 84ea592749..03d70ec1e8 100644 --- a/hw/ppc/sam460ex.c +++ b/hw/ppc/sam460ex.c @@ -2,7 +2,7 @@ * QEMU aCube Sam460ex board emulation * * Copyright (c) 2012 François Revol - * Copyright (c) 2016-2018 BALATON Zoltan + * Copyright (c) 2016-2019 BALATON Zoltan * * This file is derived from hw/ppc440_bamboo.c, * the copyright for that material belongs to the original owners. @@ -87,135 +87,6 @@ struct boot_info { uint32_t entry; }; -/*****************************************************************************/ -/* SPD eeprom content from mips_malta.c */ - -struct _eeprom24c0x_t { - uint8_t tick; - uint8_t address; - uint8_t command; - uint8_t ack; - uint8_t scl; - uint8_t sda; - uint8_t data; - uint8_t contents[256]; -}; - -typedef struct _eeprom24c0x_t eeprom24c0x_t; - -static eeprom24c0x_t spd_eeprom = { - .contents = { - /* 00000000: */ 0x80, 0x08, 0xFF, 0x0D, 0x0A, 0xFF, 0x40, 0x00, - /* 00000008: */ 0x04, 0x75, 0x54, 0x00, 0x82, 0x08, 0x00, 0x01, - /* 00000010: */ 0x8F, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, - /* 00000018: */ 0x00, 0x00, 0x00, 0x14, 0x0F, 0x14, 0x2D, 0xFF, - /* 00000020: */ 0x15, 0x08, 0x15, 0x08, 0x00, 0x00, 0x00, 0x00, - /* 00000028: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 00000030: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 00000038: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xD0, - /* 00000040: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 00000048: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 00000050: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 00000058: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 00000060: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 00000068: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 00000070: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - /* 00000078: */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xF4, - }, -}; - -static void generate_eeprom_spd(uint8_t *eeprom, ram_addr_t ram_size) -{ - enum { SDR = 0x4, DDR1 = 0x7, DDR2 = 0x8 } type; - uint8_t *spd = spd_eeprom.contents; - uint8_t nbanks = 0; - uint16_t density = 0; - int i; - - /* work in terms of MB */ - ram_size /= MiB; - - while ((ram_size >= 4) && (nbanks <= 2)) { - int sz_log2 = MIN(31 - clz32(ram_size), 14); - nbanks++; - density |= 1 << (sz_log2 - 2); - ram_size -= 1 << sz_log2; - } - - /* split to 2 banks if possible */ - if ((nbanks == 1) && (density > 1)) { - nbanks++; - density >>= 1; - } - - if (density & 0xff00) { - density = (density & 0xe0) | ((density >> 8) & 0x1f); - type = DDR2; - } else if (!(density & 0x1f)) { - type = DDR2; - } else { - type = SDR; - } - - if (ram_size) { - warn_report("SPD cannot represent final " RAM_ADDR_FMT "MB" - " of SDRAM", ram_size); - } - - /* fill in SPD memory information */ - spd[2] = type; - spd[5] = nbanks; - spd[31] = density; - - /* XXX: this is totally random */ - spd[9] = 0x10; /* CAS tcyc */ - spd[18] = 0x20; /* CAS bit */ - spd[23] = 0x10; /* CAS tcyc */ - spd[25] = 0x10; /* CAS tcyc */ - - /* checksum */ - spd[63] = 0; - for (i = 0; i < 63; i++) { - spd[63] += spd[i]; - } - - /* copy for SMBUS */ - memcpy(eeprom, spd, sizeof(spd_eeprom.contents)); -} - -static void generate_eeprom_serial(uint8_t *eeprom) -{ - int i, pos = 0; - uint8_t mac[6] = { 0x00 }; - uint8_t sn[5] = { 0x01, 0x23, 0x45, 0x67, 0x89 }; - - /* version */ - eeprom[pos++] = 0x01; - - /* count */ - eeprom[pos++] = 0x02; - - /* MAC address */ - eeprom[pos++] = 0x01; /* MAC */ - eeprom[pos++] = 0x06; /* length */ - memcpy(&eeprom[pos], mac, sizeof(mac)); - pos += sizeof(mac); - - /* serial number */ - eeprom[pos++] = 0x02; /* serial */ - eeprom[pos++] = 0x05; /* length */ - memcpy(&eeprom[pos], sn, sizeof(sn)); - pos += sizeof(sn); - - /* checksum */ - eeprom[pos] = 0; - for (i = 0; i < pos; i++) { - eeprom[pos] += eeprom[i]; - } -} - -/*****************************************************************************/ - static int sam460ex_load_uboot(void) { DriveInfo *dinfo; @@ -393,24 +264,23 @@ static void sam460ex_init(MachineState *machine) MemoryRegion *address_space_mem = get_system_memory(); MemoryRegion *isa = g_new(MemoryRegion, 1); MemoryRegion *ram_memories = g_new(MemoryRegion, SDRAM_NR_BANKS); - hwaddr ram_bases[SDRAM_NR_BANKS]; - hwaddr ram_sizes[SDRAM_NR_BANKS]; + hwaddr ram_bases[SDRAM_NR_BANKS] = {0}; + hwaddr ram_sizes[SDRAM_NR_BANKS] = {0}; MemoryRegion *l2cache_ram = g_new(MemoryRegion, 1); qemu_irq *irqs, *uic[4]; PCIBus *pci_bus; PowerPCCPU *cpu; CPUPPCState *env; - PPC4xxI2CState *i2c[2]; + I2CBus *i2c; hwaddr entry = UBOOT_ENTRY; hwaddr loadaddr = LOAD_UIMAGE_LOADADDR_INVALID; target_long initrd_size = 0; DeviceState *dev; SysBusDevice *sbdev; - int success; - int i; struct boot_info *boot_info; - const size_t smbus_eeprom_size = 8 * 256; - uint8_t *smbus_eeprom_buf = g_malloc0(smbus_eeprom_size); + uint8_t *spd_data; + Error *err = NULL; + int success; cpu = POWERPC_CPU(cpu_create(machine->cpu_type)); env = &cpu->env; @@ -439,8 +309,6 @@ static void sam460ex_init(MachineState *machine) uic[3] = ppcuic_init(env, &uic[0][16], 0xf0, 0, 1); /* SDRAM controller */ - memset(ram_bases, 0, sizeof(ram_bases)); - memset(ram_sizes, 0, sizeof(ram_sizes)); /* put all RAM on first bank because board has one slot * and firmware only checks that */ machine->ram_size = ppc4xx_sdram_adjust(machine->ram_size, 1, @@ -451,23 +319,22 @@ static void sam460ex_init(MachineState *machine) ppc440_sdram_init(env, SDRAM_NR_BANKS, ram_memories, ram_bases, ram_sizes, 1); - /* generate SPD EEPROM data */ - for (i = 0; i < SDRAM_NR_BANKS; i++) { - generate_eeprom_spd(&smbus_eeprom_buf[i * 256], ram_sizes[i]); - } - generate_eeprom_serial(&smbus_eeprom_buf[4 * 256]); - generate_eeprom_serial(&smbus_eeprom_buf[6 * 256]); - - /* IIC controllers */ + /* IIC controllers and devices */ dev = sysbus_create_simple(TYPE_PPC4xx_I2C, 0x4ef600700, uic[0][2]); - i2c[0] = PPC4xx_I2C(dev); - object_property_set_bool(OBJECT(dev), true, "realized", NULL); - smbus_eeprom_init(i2c[0]->bus, 8, smbus_eeprom_buf, smbus_eeprom_size); - g_free(smbus_eeprom_buf); - i2c_create_slave(i2c[0]->bus, "m41t80", 0x68); + i2c = PPC4xx_I2C(dev)->bus; + /* SPD EEPROM on RAM module */ + spd_data = spd_data_generate(DDR2, ram_sizes[0], &err); + if (err) { + warn_report_err(err); + } + if (spd_data) { + spd_data[20] = 4; /* SO-DIMM module */ + smbus_eeprom_init_one(i2c, 0x50, spd_data); + } + /* RTC */ + i2c_create_slave(i2c, "m41t80", 0x68); dev = sysbus_create_simple(TYPE_PPC4xx_I2C, 0x4ef600800, uic[0][3]); - i2c[1] = PPC4xx_I2C(dev); /* External bus controller */ ppc405_ebc_init(env); From 7d8ccf58d5ee83b140220e34b58ac7d4b5dc6a21 Mon Sep 17 00:00:00 2001 From: BALATON Zoltan Date: Thu, 3 Jan 2019 17:27:24 +0100 Subject: [PATCH 04/37] ppc4xx: Use ram_addr_t in ppc4xx_sdram_adjust() To avoid overflow if larger values are added later use ram_addr_t for the sdram_bank_sizes parameter to match ram_size to which it is compared. Signed-off-by: BALATON Zoltan Signed-off-by: David Gibson --- hw/ppc/ppc440_bamboo.c | 2 +- hw/ppc/ppc4xx_devs.c | 4 ++-- hw/ppc/sam460ex.c | 2 +- include/hw/ppc/ppc4xx.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c index fc06191588..4b547eaf77 100644 --- a/hw/ppc/ppc440_bamboo.c +++ b/hw/ppc/ppc440_bamboo.c @@ -49,7 +49,7 @@ #define PPC440EP_SDRAM_NR_BANKS 4 -static const unsigned int ppc440ep_sdram_bank_sizes[] = { +static const ram_addr_t ppc440ep_sdram_bank_sizes[] = { 256 * MiB, 128 * MiB, 64 * MiB, 32 * MiB, 16 * MiB, 8 * MiB, 0 }; diff --git a/hw/ppc/ppc4xx_devs.c b/hw/ppc/ppc4xx_devs.c index 9b6e4c60fa..9418478575 100644 --- a/hw/ppc/ppc4xx_devs.c +++ b/hw/ppc/ppc4xx_devs.c @@ -679,12 +679,12 @@ ram_addr_t ppc4xx_sdram_adjust(ram_addr_t ram_size, int nr_banks, MemoryRegion ram_memories[], hwaddr ram_bases[], hwaddr ram_sizes[], - const unsigned int sdram_bank_sizes[]) + const ram_addr_t sdram_bank_sizes[]) { MemoryRegion *ram = g_malloc0(sizeof(*ram)); ram_addr_t size_left = ram_size; ram_addr_t base = 0; - unsigned int bank_size; + ram_addr_t bank_size; int i; int j; diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c index 03d70ec1e8..7a8c745021 100644 --- a/hw/ppc/sam460ex.c +++ b/hw/ppc/sam460ex.c @@ -77,7 +77,7 @@ #define SDRAM_NR_BANKS 4 /* FIXME: See u-boot.git 8ac41e, also fix in ppc440_uc.c */ -static const unsigned int ppc460ex_sdram_bank_sizes[] = { +static const ram_addr_t ppc460ex_sdram_bank_sizes[] = { 1 * GiB, 512 * MiB, 256 * MiB, 128 * MiB, 64 * MiB, 32 * MiB, 0 }; diff --git a/include/hw/ppc/ppc4xx.h b/include/hw/ppc/ppc4xx.h index 3a2a04c8ce..39a7ba1ce6 100644 --- a/include/hw/ppc/ppc4xx.h +++ b/include/hw/ppc/ppc4xx.h @@ -43,7 +43,7 @@ ram_addr_t ppc4xx_sdram_adjust(ram_addr_t ram_size, int nr_banks, MemoryRegion ram_memories[], hwaddr ram_bases[], hwaddr ram_sizes[], - const unsigned int sdram_bank_sizes[]); + const ram_addr_t sdram_bank_sizes[]); void ppc4xx_sdram_init (CPUPPCState *env, qemu_irq irq, int nbanks, MemoryRegion ram_memories[], From 0a57fbee209f9d799f53dbcd77f3062649b61b08 Mon Sep 17 00:00:00 2001 From: BALATON Zoltan Date: Thu, 3 Jan 2019 17:27:24 +0100 Subject: [PATCH 05/37] ppc4xx: Rename ppc4xx_sdram_t in ppc440_uc.c to ppc440_sdram_t There's already a struct with the same name in ppc4xx_devs.c. They are not used outside their files so don't clash but they are also not identical so rename the ppc440 specific one to distinguish them. Signed-off-by: BALATON Zoltan Reviewed-by: David Gibson Signed-off-by: David Gibson --- hw/ppc/ppc440_uc.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c index 9360f781ce..e46f59fba8 100644 --- a/hw/ppc/ppc440_uc.c +++ b/hw/ppc/ppc440_uc.c @@ -481,7 +481,7 @@ void ppc4xx_sdr_init(CPUPPCState *env) /*****************************************************************************/ /* SDRAM controller */ -typedef struct ppc4xx_sdram_t { +typedef struct ppc440_sdram_t { uint32_t addr; int nbanks; MemoryRegion containers[4]; /* used for clipping */ @@ -489,7 +489,7 @@ typedef struct ppc4xx_sdram_t { hwaddr ram_bases[4]; hwaddr ram_sizes[4]; uint32_t bcr[4]; -} ppc4xx_sdram_t; +} ppc440_sdram_t; enum { SDRAM0_CFGADDR = 0x10, @@ -564,7 +564,7 @@ static target_ulong sdram_size(uint32_t bcr) return size; } -static void sdram_set_bcr(ppc4xx_sdram_t *sdram, +static void sdram_set_bcr(ppc440_sdram_t *sdram, uint32_t *bcrp, uint32_t bcr, int enabled) { unsigned n = bcrp - sdram->bcr; @@ -589,7 +589,7 @@ static void sdram_set_bcr(ppc4xx_sdram_t *sdram, } } -static void sdram_map_bcr(ppc4xx_sdram_t *sdram) +static void sdram_map_bcr(ppc440_sdram_t *sdram) { int i; @@ -607,7 +607,7 @@ static void sdram_map_bcr(ppc4xx_sdram_t *sdram) static uint32_t dcr_read_sdram(void *opaque, int dcrn) { - ppc4xx_sdram_t *sdram = opaque; + ppc440_sdram_t *sdram = opaque; uint32_t ret = 0; switch (dcrn) { @@ -658,7 +658,7 @@ static uint32_t dcr_read_sdram(void *opaque, int dcrn) static void dcr_write_sdram(void *opaque, int dcrn, uint32_t val) { - ppc4xx_sdram_t *sdram = opaque; + ppc440_sdram_t *sdram = opaque; switch (dcrn) { case SDRAM_R0BAS: @@ -689,7 +689,7 @@ static void dcr_write_sdram(void *opaque, int dcrn, uint32_t val) static void sdram_reset(void *opaque) { - ppc4xx_sdram_t *sdram = opaque; + ppc440_sdram_t *sdram = opaque; sdram->addr = 0; } @@ -699,7 +699,7 @@ void ppc440_sdram_init(CPUPPCState *env, int nbanks, hwaddr *ram_bases, hwaddr *ram_sizes, int do_init) { - ppc4xx_sdram_t *sdram; + ppc440_sdram_t *sdram; sdram = g_malloc0(sizeof(*sdram)); sdram->nbanks = nbanks; From 70812bf70973f02366421c1549fab4036853aea3 Mon Sep 17 00:00:00 2001 From: BALATON Zoltan Date: Thu, 3 Jan 2019 17:27:24 +0100 Subject: [PATCH 06/37] ppc4xx: Pass array index to function instead of pointer into the array The sdram_set_bcr() function in ppc440_uc.c takes a pointer into an array then calculates its index from that. It's simpler and easier to just pass the index which simplifies both the function and its callers. Do similar cleanup in ppc4xx_devs.c to similar function. Signed-off-by: BALATON Zoltan Signed-off-by: David Gibson --- hw/ppc/ppc440_uc.c | 36 ++++++++++++++++-------------------- hw/ppc/ppc4xx_devs.c | 44 ++++++++++++++++++++------------------------ 2 files changed, 36 insertions(+), 44 deletions(-) diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c index e46f59fba8..60dbb35eee 100644 --- a/hw/ppc/ppc440_uc.c +++ b/hw/ppc/ppc440_uc.c @@ -564,28 +564,26 @@ static target_ulong sdram_size(uint32_t bcr) return size; } -static void sdram_set_bcr(ppc440_sdram_t *sdram, - uint32_t *bcrp, uint32_t bcr, int enabled) +static void sdram_set_bcr(ppc440_sdram_t *sdram, int i, + uint32_t bcr, int enabled) { - unsigned n = bcrp - sdram->bcr; - - if (*bcrp & 1) { - /* Unmap RAM */ + if (sdram->bcr[i] & 1) { + /* First unmap RAM if enabled */ memory_region_del_subregion(get_system_memory(), - &sdram->containers[n]); - memory_region_del_subregion(&sdram->containers[n], - &sdram->ram_memories[n]); - object_unparent(OBJECT(&sdram->containers[n])); + &sdram->containers[i]); + memory_region_del_subregion(&sdram->containers[i], + &sdram->ram_memories[i]); + object_unparent(OBJECT(&sdram->containers[i])); } - *bcrp = bcr & 0xFFDEE001; + sdram->bcr[i] = bcr & 0xFFDEE001; if (enabled && (bcr & 1)) { - memory_region_init(&sdram->containers[n], NULL, "sdram-containers", + memory_region_init(&sdram->containers[i], NULL, "sdram-containers", sdram_size(bcr)); - memory_region_add_subregion(&sdram->containers[n], 0, - &sdram->ram_memories[n]); + memory_region_add_subregion(&sdram->containers[i], 0, + &sdram->ram_memories[i]); memory_region_add_subregion(get_system_memory(), sdram_base(bcr), - &sdram->containers[n]); + &sdram->containers[i]); } } @@ -595,12 +593,10 @@ static void sdram_map_bcr(ppc440_sdram_t *sdram) for (i = 0; i < sdram->nbanks; i++) { if (sdram->ram_sizes[i] != 0) { - sdram_set_bcr(sdram, - &sdram->bcr[i], - sdram_bcr(sdram->ram_bases[i], sdram->ram_sizes[i]), - 1); + sdram_set_bcr(sdram, i, sdram_bcr(sdram->ram_bases[i], + sdram->ram_sizes[i]), 1); } else { - sdram_set_bcr(sdram, &sdram->bcr[i], 0, 0); + sdram_set_bcr(sdram, i, 0, 0); } } } diff --git a/hw/ppc/ppc4xx_devs.c b/hw/ppc/ppc4xx_devs.c index 9418478575..fdfeb67e65 100644 --- a/hw/ppc/ppc4xx_devs.c +++ b/hw/ppc/ppc4xx_devs.c @@ -405,36 +405,34 @@ static target_ulong sdram_size (uint32_t bcr) return size; } -static void sdram_set_bcr(ppc4xx_sdram_t *sdram, - uint32_t *bcrp, uint32_t bcr, int enabled) +static void sdram_set_bcr(ppc4xx_sdram_t *sdram, int i, + uint32_t bcr, int enabled) { - unsigned n = bcrp - sdram->bcr; - - if (*bcrp & 0x00000001) { + if (sdram->bcr[i] & 0x00000001) { /* Unmap RAM */ #ifdef DEBUG_SDRAM printf("%s: unmap RAM area " TARGET_FMT_plx " " TARGET_FMT_lx "\n", - __func__, sdram_base(*bcrp), sdram_size(*bcrp)); + __func__, sdram_base(sdram->bcr[i]), sdram_size(sdram->bcr[i])); #endif memory_region_del_subregion(get_system_memory(), - &sdram->containers[n]); - memory_region_del_subregion(&sdram->containers[n], - &sdram->ram_memories[n]); - object_unparent(OBJECT(&sdram->containers[n])); + &sdram->containers[i]); + memory_region_del_subregion(&sdram->containers[i], + &sdram->ram_memories[i]); + object_unparent(OBJECT(&sdram->containers[i])); } - *bcrp = bcr & 0xFFDEE001; + sdram->bcr[i] = bcr & 0xFFDEE001; if (enabled && (bcr & 0x00000001)) { #ifdef DEBUG_SDRAM printf("%s: Map RAM area " TARGET_FMT_plx " " TARGET_FMT_lx "\n", __func__, sdram_base(bcr), sdram_size(bcr)); #endif - memory_region_init(&sdram->containers[n], NULL, "sdram-containers", + memory_region_init(&sdram->containers[i], NULL, "sdram-containers", sdram_size(bcr)); - memory_region_add_subregion(&sdram->containers[n], 0, - &sdram->ram_memories[n]); + memory_region_add_subregion(&sdram->containers[i], 0, + &sdram->ram_memories[i]); memory_region_add_subregion(get_system_memory(), sdram_base(bcr), - &sdram->containers[n]); + &sdram->containers[i]); } } @@ -444,12 +442,10 @@ static void sdram_map_bcr (ppc4xx_sdram_t *sdram) for (i = 0; i < sdram->nbanks; i++) { if (sdram->ram_sizes[i] != 0) { - sdram_set_bcr(sdram, - &sdram->bcr[i], - sdram_bcr(sdram->ram_bases[i], sdram->ram_sizes[i]), - 1); + sdram_set_bcr(sdram, i, sdram_bcr(sdram->ram_bases[i], + sdram->ram_sizes[i]), 1); } else { - sdram_set_bcr(sdram, &sdram->bcr[i], 0x00000000, 0); + sdram_set_bcr(sdram, i, 0x00000000, 0); } } } @@ -589,16 +585,16 @@ static void dcr_write_sdram (void *opaque, int dcrn, uint32_t val) sdram->pmit = (val & 0xF8000000) | 0x07C00000; break; case 0x40: /* SDRAM_B0CR */ - sdram_set_bcr(sdram, &sdram->bcr[0], val, sdram->cfg & 0x80000000); + sdram_set_bcr(sdram, 0, val, sdram->cfg & 0x80000000); break; case 0x44: /* SDRAM_B1CR */ - sdram_set_bcr(sdram, &sdram->bcr[1], val, sdram->cfg & 0x80000000); + sdram_set_bcr(sdram, 1, val, sdram->cfg & 0x80000000); break; case 0x48: /* SDRAM_B2CR */ - sdram_set_bcr(sdram, &sdram->bcr[2], val, sdram->cfg & 0x80000000); + sdram_set_bcr(sdram, 2, val, sdram->cfg & 0x80000000); break; case 0x4C: /* SDRAM_B3CR */ - sdram_set_bcr(sdram, &sdram->bcr[3], val, sdram->cfg & 0x80000000); + sdram_set_bcr(sdram, 3, val, sdram->cfg & 0x80000000); break; case 0x80: /* SDRAM_TR */ sdram->tr = val & 0x018FC01F; From 6a9938a3797a6008ee54bf4ec9b41973c1efc3b9 Mon Sep 17 00:00:00 2001 From: BALATON Zoltan Date: Thu, 3 Jan 2019 17:27:24 +0100 Subject: [PATCH 07/37] sam460ex: Fix support for memory larger than 1GB Fix the encoding of larger memory modules in the SoC registers which allows specifying more than 1GB memory for sam460ex. Well, only 2GB due to SoC and firmware restrictions which was the only missing value compared to what the real hardware supports. The SoC should support up to 4GB but when setting that the firmware hangs during memory test. This may be an overflow bug in the firmware which I did not try to debug but this may affect real hardware as well. Signed-off-by: BALATON Zoltan Signed-off-by: David Gibson --- hw/ppc/ppc440_uc.c | 22 ++++++++++++---------- hw/ppc/sam460ex.c | 6 ++++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c index 60dbb35eee..c489368905 100644 --- a/hw/ppc/ppc440_uc.c +++ b/hw/ppc/ppc440_uc.c @@ -2,7 +2,7 @@ * QEMU PowerPC 440 embedded processors emulation * * Copyright (c) 2012 François Revol - * Copyright (c) 2016-2018 BALATON Zoltan + * Copyright (c) 2016-2019 BALATON Zoltan * * This work is licensed under the GNU GPL license version 2 or later. * @@ -505,10 +505,6 @@ enum { SDRAM_PLBADDUHB = 0x50, }; -/* XXX: TOFIX: some patches have made this code become inconsistent: - * there are type inconsistencies, mixing hwaddr, target_ulong - * and uint32_t - */ static uint32_t sdram_bcr(hwaddr ram_base, hwaddr ram_size) { uint32_t bcr; @@ -538,11 +534,17 @@ static uint32_t sdram_bcr(hwaddr ram_base, hwaddr ram_size) case (1 * GiB): bcr = 0xe000; break; + case (2 * GiB): + bcr = 0xc000; + break; + case (4 * GiB): + bcr = 0x8000; + break; default: error_report("invalid RAM size " TARGET_FMT_plx, ram_size); return 0; } - bcr |= ram_base & 0xFF800000; + bcr |= ram_base >> 2 & 0xffe00000; bcr |= 1; return bcr; @@ -550,12 +552,12 @@ static uint32_t sdram_bcr(hwaddr ram_base, hwaddr ram_size) static inline hwaddr sdram_base(uint32_t bcr) { - return bcr & 0xFF800000; + return (bcr & 0xffe00000) << 2; } -static target_ulong sdram_size(uint32_t bcr) +static uint64_t sdram_size(uint32_t bcr) { - target_ulong size; + uint64_t size; int sh; sh = 1024 - ((bcr >> 6) & 0x3ff); @@ -575,7 +577,7 @@ static void sdram_set_bcr(ppc440_sdram_t *sdram, int i, &sdram->ram_memories[i]); object_unparent(OBJECT(&sdram->containers[i])); } - sdram->bcr[i] = bcr & 0xFFDEE001; + sdram->bcr[i] = bcr & 0xffe0ffc1; if (enabled && (bcr & 1)) { memory_region_init(&sdram->containers[i], NULL, "sdram-containers", sdram_size(bcr)); diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c index 7a8c745021..202ed14bcf 100644 --- a/hw/ppc/sam460ex.c +++ b/hw/ppc/sam460ex.c @@ -76,9 +76,11 @@ #define UART_FREQ 11059200 #define SDRAM_NR_BANKS 4 -/* FIXME: See u-boot.git 8ac41e, also fix in ppc440_uc.c */ +/* The SoC could also handle 4 GiB but firmware does not work with that. */ +/* Maybe it overflows a signed 32 bit number somewhere? */ static const ram_addr_t ppc460ex_sdram_bank_sizes[] = { - 1 * GiB, 512 * MiB, 256 * MiB, 128 * MiB, 64 * MiB, 32 * MiB, 0 + 2 * GiB, 1 * GiB, 512 * MiB, 256 * MiB, 128 * MiB, 64 * MiB, + 32 * MiB, 0 }; struct boot_info { From 6bf6f3a1d1e6d288c3abac40001aa30153b07404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 9 Jan 2019 16:15:32 +0100 Subject: [PATCH 08/37] ppc/xive: fix remaining XiveFabric names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Cédric Le Goater Reviewed-by: Greg Kurz Signed-off-by: David Gibson --- hw/intc/xive.c | 6 +++--- include/hw/ppc/xive.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/intc/xive.c b/hw/intc/xive.c index a3cb0cf0e3..7f567a57d2 100644 --- a/hw/intc/xive.c +++ b/hw/intc/xive.c @@ -1576,9 +1576,9 @@ static const TypeInfo xive_end_source_info = { }; /* - * XIVE Fabric + * XIVE Notifier */ -static const TypeInfo xive_fabric_info = { +static const TypeInfo xive_notifier_info = { .name = TYPE_XIVE_NOTIFIER, .parent = TYPE_INTERFACE, .class_size = sizeof(XiveNotifierClass), @@ -1587,7 +1587,7 @@ static const TypeInfo xive_fabric_info = { static void xive_register_types(void) { type_register_static(&xive_source_info); - type_register_static(&xive_fabric_info); + type_register_static(&xive_notifier_info); type_register_static(&xive_router_info); type_register_static(&xive_end_source_info); type_register_static(&xive_tctx_info); diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h index ec23253ba4..5d31c801ee 100644 --- a/include/hw/ppc/xive.h +++ b/include/hw/ppc/xive.h @@ -145,7 +145,7 @@ #include "hw/ppc/xive_regs.h" /* - * XIVE Fabric (Interface between Source and Router) + * XIVE Notifier (Interface between Source and Router) */ typedef struct XiveNotifier { From 52b73c09bfee1b7feae6f6c281bab5bf0f94964e Mon Sep 17 00:00:00 2001 From: Greg Kurz Date: Thu, 10 Jan 2019 15:23:58 +0100 Subject: [PATCH 09/37] target/ppc/kvm: Drop useless include directive It has been there since the enablement of PR KVM for PAPR, ie, commit f61b4bedaf35 in 2011. Not sure why at that time, but it is definitely not needed with the current code. Signed-off-by: Greg Kurz Signed-off-by: David Gibson --- target/ppc/kvm.c | 1 - 1 file changed, 1 deletion(-) diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index ebbb48c42f..d01852fe31 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -36,7 +36,6 @@ #include "hw/sysbus.h" #include "hw/ppc/spapr.h" -#include "hw/ppc/spapr_vio.h" #include "hw/ppc/spapr_cpu_core.h" #include "hw/ppc/ppc.h" #include "sysemu/watchdog.h" From 4f10ed277da91b2cb1b6e8a2de18792ce7881832 Mon Sep 17 00:00:00 2001 From: BALATON Zoltan Date: Wed, 9 Jan 2019 23:37:33 +0100 Subject: [PATCH 10/37] ppc440: Avoid reporting error when reading non-existent RAM slot When reading base register of RAM slot with no RAM we should not try to calculate register value because that will result printing an error due to invalid RAM size. Just return 0 without the error in this case. Signed-off-by: BALATON Zoltan Signed-off-by: David Gibson --- hw/ppc/ppc440_uc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c index c489368905..9130eb314c 100644 --- a/hw/ppc/ppc440_uc.c +++ b/hw/ppc/ppc440_uc.c @@ -613,8 +613,10 @@ static uint32_t dcr_read_sdram(void *opaque, int dcrn) case SDRAM_R1BAS: case SDRAM_R2BAS: case SDRAM_R3BAS: - ret = sdram_bcr(sdram->ram_bases[dcrn - SDRAM_R0BAS], - sdram->ram_sizes[dcrn - SDRAM_R0BAS]); + if (sdram->ram_sizes[dcrn - SDRAM_R0BAS]) { + ret = sdram_bcr(sdram->ram_bases[dcrn - SDRAM_R0BAS], + sdram->ram_sizes[dcrn - SDRAM_R0BAS]); + } break; case SDRAM_CONF1HB: case SDRAM_CONF1LL: From 4882206430532af27aa2ffd30df2818e4661e981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Wed, 9 Jan 2019 15:31:19 +0100 Subject: [PATCH 11/37] spapr/vio: remove the "irq" property" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit efe2add7cb7f ("spapr/vio: deprecate the "irq" property") was merged in QEMU version 3.0. The "irq" property" can be removed for QEMU version 4.0. Signed-off-by: Cédric Le Goater Reviewed-by: Thomas Huth Reviewed-by: Greg Kurz Signed-off-by: David Gibson --- hw/ppc/spapr_vio.c | 47 ++++++-------------------------------------- qemu-deprecated.texi | 6 ------ 2 files changed, 6 insertions(+), 47 deletions(-) diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c index 7e8a9ad093..414673d313 100644 --- a/hw/ppc/spapr_vio.c +++ b/hw/ppc/spapr_vio.c @@ -44,38 +44,6 @@ #define SPAPR_VIO_REG_BASE 0x71000000 -static void spapr_vio_get_irq(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) -{ - Property *prop = opaque; - uint32_t *ptr = qdev_get_prop_ptr(DEVICE(obj), prop); - - visit_type_uint32(v, name, ptr, errp); -} - -static void spapr_vio_set_irq(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) -{ - Property *prop = opaque; - uint32_t *ptr = qdev_get_prop_ptr(DEVICE(obj), prop); - - if (!qtest_enabled()) { - warn_report(TYPE_VIO_SPAPR_DEVICE " '%s' property is deprecated", name); - } - visit_type_uint32(v, name, ptr, errp); -} - -static const PropertyInfo spapr_vio_irq_propinfo = { - .name = "irq", - .get = spapr_vio_get_irq, - .set = spapr_vio_set_irq, -}; - -static Property spapr_vio_props[] = { - DEFINE_PROP("irq", VIOsPAPRDevice, irq, spapr_vio_irq_propinfo, uint32_t), - DEFINE_PROP_END_OF_LIST(), -}; - static char *spapr_vio_get_dev_name(DeviceState *qdev) { VIOsPAPRDevice *dev = VIO_SPAPR_DEVICE(qdev); @@ -534,15 +502,13 @@ static void spapr_vio_busdev_realize(DeviceState *qdev, Error **errp) dev->qdev.id = id; } - if (!dev->irq) { - dev->irq = spapr_vio_reg_to_irq(dev->reg); + dev->irq = spapr_vio_reg_to_irq(dev->reg); - if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { - dev->irq = spapr_irq_findone(spapr, &local_err); - if (local_err) { - error_propagate(errp, local_err); - return; - } + if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { + dev->irq = spapr_irq_findone(spapr, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; } } @@ -668,7 +634,6 @@ static void vio_spapr_device_class_init(ObjectClass *klass, void *data) k->realize = spapr_vio_busdev_realize; k->reset = spapr_vio_busdev_reset; k->bus_type = TYPE_SPAPR_VIO_BUS; - k->props = spapr_vio_props; } static const TypeInfo spapr_vio_type_info = { diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi index dfb278a377..9cc20b365c 100644 --- a/qemu-deprecated.texi +++ b/qemu-deprecated.texi @@ -160,9 +160,3 @@ Example of legacy encoding: The above, converted to the current supported format: @code{json:@{"file.driver":"rbd", "file.pool":"rbd", "file.image":"name"@}} - -@subsection vio-spapr-device device options - -@subsubsection "irq": "" (since 3.0.0) - -The ``irq'' property is obsoleted. From 1ac24c91bbfada5303a3d7ac1d50a05c489053a1 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 9 Jan 2019 15:03:23 +0100 Subject: [PATCH 12/37] hw/ppc/spapr: Encode the SCSI channel (bus) in the SRP LUNs In hw/scsi/spapr_vio.c we declare that the controller supports multiple buses by specifying "max_channel = 7" there. So in the code that fixes up the device tree nodes, we must encode the channel number (a.k.a. bus number in the "Logical unit addressing format" table of SAM5) into the 64-bit LUN, too. Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1663160 Signed-off-by: Thomas Huth Signed-off-by: David Gibson --- hw/ppc/spapr.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 0942f35bf8..71fe552c83 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -2959,10 +2959,11 @@ static char *spapr_get_fw_dev_path(FWPathProvider *p, BusState *bus, if (spapr) { /* * Replace "channel@0/disk@0,0" with "disk@8000000000000000": - * We use SRP luns of the form 8000 | (bus << 8) | (id << 5) | lun - * in the top 16 bits of the 64-bit LUN + * In the top 16 bits of the 64-bit LUN, we use SRP luns of the form + * 0x8000 | (target << 8) | (bus << 5) | lun + * (see the "Logical unit addressing format" table in SAM5) */ - unsigned id = 0x8000 | (d->id << 8) | d->lun; + unsigned id = 0x8000 | (d->id << 8) | (d->channel << 5) | d->lun; return g_strdup_printf("%s@%"PRIX64, qdev_fw_name(dev), (uint64_t)id << 48); } else if (virtio) { From 21df5e4ffafd067090882c312c5978ee7bb2f46f Mon Sep 17 00:00:00 2001 From: Greg Kurz Date: Thu, 17 Jan 2019 12:06:38 +0100 Subject: [PATCH 13/37] spapr: Forbid setting ic-mode for old machine types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Machine types 3.0 and older only know about the legacy XICS backend. Make it clear by erroring out if the user tries to set ic-mode on such machines. Signed-off-by: Greg Kurz Tested-by: Cédric Le Goater Reviewed-by: Cédric Le Goater Signed-off-by: David Gibson --- hw/ppc/spapr.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 71fe552c83..a217c7f7a6 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3127,6 +3127,11 @@ static void spapr_set_ic_mode(Object *obj, const char *value, Error **errp) { sPAPRMachineState *spapr = SPAPR_MACHINE(obj); + if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { + error_setg(errp, "This machine only uses the legacy XICS backend, don't pass ic-mode"); + return; + } + /* The legacy IRQ backend can not be set */ if (strcmp(value, "xics") == 0) { spapr->irq = &spapr_irq_xics; From d8e81d6e6093738c23b457b607c44a75a6952dc8 Mon Sep 17 00:00:00 2001 From: David Hildenbrand Date: Wed, 23 Jan 2019 09:24:25 +0100 Subject: [PATCH 14/37] spapr/pci: Fix primary bus number for PCI bridges While looking at the s390x implementation, looks like spapr has a similar BUG when building the topology. The primary bus number corresponds always to the bus number of the bus the bridge is attached to. Right now, if we have two bridges attached to the same bus (e.g. root bus) this is however not the case. The first bridge will have primary bus 0, the second bridge primary bus 1, which is wrong. Fix the assignment. While at it, drop setting the PCI_SUBORDINATE_BUS temporarily to 0xff. Setting it temporarily to that value (as discussed e.g. in [1]), is only relevant for a running system that probes the buses. The value is effectively unused for us just doing a DFS. [1] http://www.science.unitn.it/~fiorella/guidelinux/tlk/node76.html Signed-off-by: David Hildenbrand Reviewed-by: Alexey Kardashevskiy Signed-off-by: David Gibson --- hw/ppc/spapr_pci.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index b74f2632ec..5cdc98513d 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -2030,8 +2030,6 @@ static void spapr_phb_pci_enumerate_bridge(PCIBus *bus, PCIDevice *pdev, void *opaque) { unsigned int *bus_no = opaque; - unsigned int primary = *bus_no; - unsigned int subordinate = 0xff; PCIBus *sec_bus = NULL; if ((pci_default_read_config(pdev, PCI_HEADER_TYPE, 1) != @@ -2040,7 +2038,7 @@ static void spapr_phb_pci_enumerate_bridge(PCIBus *bus, PCIDevice *pdev, } (*bus_no)++; - pci_default_write_config(pdev, PCI_PRIMARY_BUS, primary, 1); + pci_default_write_config(pdev, PCI_PRIMARY_BUS, pci_dev_bus_num(pdev), 1); pci_default_write_config(pdev, PCI_SECONDARY_BUS, *bus_no, 1); pci_default_write_config(pdev, PCI_SUBORDINATE_BUS, *bus_no, 1); @@ -2049,7 +2047,6 @@ static void spapr_phb_pci_enumerate_bridge(PCIBus *bus, PCIDevice *pdev, return; } - pci_default_write_config(pdev, PCI_SUBORDINATE_BUS, subordinate, 1); pci_for_each_device(sec_bus, pci_bus_num(sec_bus), spapr_phb_pci_enumerate_bridge, bus_no); pci_default_write_config(pdev, PCI_SUBORDINATE_BUS, *bus_no, 1); From 40a5056c4130efc60ab0639e93d6d0c509326e8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Thu, 17 Jan 2019 08:53:24 +0100 Subject: [PATCH 15/37] xive: add a get_tctx() method to the XiveRouter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It provides a mean to retrieve the XiveTCTX of a CPU. This will become necessary with future changes which move the interrupt presenter object pointers under the PowerPCCPU machine_data. The PowerNV machine has an extra requirement on TIMA accesses that this new method addresses. The machine can perform indirect loads and stores on the TIMA on behalf of another CPU. The PIR being defined in the controller registers, we need a way to peek in the controller model to find the PIR value. The XiveTCTX is moved above the XiveRouter definition to avoid forward typedef declarations. Signed-off-by: Cédric Le Goater Reviewed-by: Greg Kurz Signed-off-by: David Gibson --- hw/intc/spapr_xive.c | 8 ++++++ hw/intc/xive.c | 16 +++++++----- include/hw/ppc/xive.h | 57 ++++++++++++++++++++++--------------------- 3 files changed, 47 insertions(+), 34 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index d391177ab8..136d872f16 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -390,6 +390,13 @@ static int spapr_xive_write_nvt(XiveRouter *xrtr, uint8_t nvt_blk, g_assert_not_reached(); } +static XiveTCTX *spapr_xive_get_tctx(XiveRouter *xrtr, CPUState *cs) +{ + PowerPCCPU *cpu = POWERPC_CPU(cs); + + return cpu->tctx; +} + static const VMStateDescription vmstate_spapr_xive_end = { .name = TYPE_SPAPR_XIVE "/end", .version_id = 1, @@ -454,6 +461,7 @@ static void spapr_xive_class_init(ObjectClass *klass, void *data) xrc->write_end = spapr_xive_write_end; xrc->get_nvt = spapr_xive_get_nvt; xrc->write_nvt = spapr_xive_write_nvt; + xrc->get_tctx = spapr_xive_get_tctx; } static const TypeInfo spapr_xive_info = { diff --git a/hw/intc/xive.c b/hw/intc/xive.c index 7f567a57d2..2e9b8efd43 100644 --- a/hw/intc/xive.c +++ b/hw/intc/xive.c @@ -320,8 +320,7 @@ static const XiveTmOp *xive_tm_find_op(hwaddr offset, unsigned size, bool write) static void xive_tm_write(void *opaque, hwaddr offset, uint64_t value, unsigned size) { - PowerPCCPU *cpu = POWERPC_CPU(current_cpu); - XiveTCTX *tctx = cpu->tctx; + XiveTCTX *tctx = xive_router_get_tctx(XIVE_ROUTER(opaque), current_cpu); const XiveTmOp *xto; /* @@ -359,8 +358,7 @@ static void xive_tm_write(void *opaque, hwaddr offset, static uint64_t xive_tm_read(void *opaque, hwaddr offset, unsigned size) { - PowerPCCPU *cpu = POWERPC_CPU(current_cpu); - XiveTCTX *tctx = cpu->tctx; + XiveTCTX *tctx = xive_router_get_tctx(XIVE_ROUTER(opaque), current_cpu); const XiveTmOp *xto; /* @@ -1107,6 +1105,13 @@ int xive_router_write_nvt(XiveRouter *xrtr, uint8_t nvt_blk, uint32_t nvt_idx, return xrc->write_nvt(xrtr, nvt_blk, nvt_idx, nvt, word_number); } +XiveTCTX *xive_router_get_tctx(XiveRouter *xrtr, CPUState *cs) +{ + XiveRouterClass *xrc = XIVE_ROUTER_GET_CLASS(xrtr); + + return xrc->get_tctx(xrtr, cs); +} + /* * The thread context register words are in big-endian format. */ @@ -1182,8 +1187,7 @@ static bool xive_presenter_match(XiveRouter *xrtr, uint8_t format, */ CPU_FOREACH(cs) { - PowerPCCPU *cpu = POWERPC_CPU(cs); - XiveTCTX *tctx = cpu->tctx; + XiveTCTX *tctx = xive_router_get_tctx(xrtr, cs); int ring; /* diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h index 5d31c801ee..ec3bb2aae4 100644 --- a/include/hw/ppc/xive.h +++ b/include/hw/ppc/xive.h @@ -294,6 +294,33 @@ static inline void xive_source_irq_set(XiveSource *xsrc, uint32_t srcno, void xive_source_set_irq(void *opaque, int srcno, int val); +/* + * XIVE Thread interrupt Management (TM) context + */ + +#define TYPE_XIVE_TCTX "xive-tctx" +#define XIVE_TCTX(obj) OBJECT_CHECK(XiveTCTX, (obj), TYPE_XIVE_TCTX) + +/* + * XIVE Thread interrupt Management register rings : + * + * QW-0 User event-based exception state + * QW-1 O/S OS context for priority management, interrupt acks + * QW-2 Pool hypervisor pool context for virtual processors dispatched + * QW-3 Physical physical thread context and security context + */ +#define XIVE_TM_RING_COUNT 4 +#define XIVE_TM_RING_SIZE 0x10 + +typedef struct XiveTCTX { + DeviceState parent_obj; + + CPUState *cs; + qemu_irq output; + + uint8_t regs[XIVE_TM_RING_COUNT * XIVE_TM_RING_SIZE]; +} XiveTCTX; + /* * XIVE Router */ @@ -324,6 +351,7 @@ typedef struct XiveRouterClass { XiveNVT *nvt); int (*write_nvt)(XiveRouter *xrtr, uint8_t nvt_blk, uint32_t nvt_idx, XiveNVT *nvt, uint8_t word_number); + XiveTCTX *(*get_tctx)(XiveRouter *xrtr, CPUState *cs); } XiveRouterClass; void xive_eas_pic_print_info(XiveEAS *eas, uint32_t lisn, Monitor *mon); @@ -338,7 +366,7 @@ int xive_router_get_nvt(XiveRouter *xrtr, uint8_t nvt_blk, uint32_t nvt_idx, XiveNVT *nvt); int xive_router_write_nvt(XiveRouter *xrtr, uint8_t nvt_blk, uint32_t nvt_idx, XiveNVT *nvt, uint8_t word_number); - +XiveTCTX *xive_router_get_tctx(XiveRouter *xrtr, CPUState *cs); /* * XIVE END ESBs @@ -371,33 +399,6 @@ typedef struct XiveENDSource { void xive_end_pic_print_info(XiveEND *end, uint32_t end_idx, Monitor *mon); void xive_end_queue_pic_print_info(XiveEND *end, uint32_t width, Monitor *mon); -/* - * XIVE Thread interrupt Management (TM) context - */ - -#define TYPE_XIVE_TCTX "xive-tctx" -#define XIVE_TCTX(obj) OBJECT_CHECK(XiveTCTX, (obj), TYPE_XIVE_TCTX) - -/* - * XIVE Thread interrupt Management register rings : - * - * QW-0 User event-based exception state - * QW-1 O/S OS context for priority management, interrupt acks - * QW-2 Pool hypervisor pool context for virtual processors dispatched - * QW-3 Physical physical thread context and security context - */ -#define XIVE_TM_RING_COUNT 4 -#define XIVE_TM_RING_SIZE 0x10 - -typedef struct XiveTCTX { - DeviceState parent_obj; - - CPUState *cs; - qemu_irq output; - - uint8_t regs[XIVE_TM_RING_COUNT * XIVE_TM_RING_SIZE]; -} XiveTCTX; - /* * XIVE Thread Interrupt Management Aera (TIMA) * From 8907fc25cf1824c11276f60354bb08bd24c37d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Thu, 17 Jan 2019 08:53:25 +0100 Subject: [PATCH 16/37] ppc/pnv: introduce a CPU machine_data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Include the interrupt presenter under the machine_data as we plan to remove it from under PowerPCCPU Signed-off-by: Cédric Le Goater Reviewed-by: Greg Kurz Signed-off-by: David Gibson --- hw/ppc/pnv.c | 7 ++++--- hw/ppc/pnv_core.c | 12 +++++++++++- include/hw/ppc/pnv_core.h | 9 +++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index d84acef55b..da540860a2 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -673,6 +673,7 @@ static void pnv_chip_power8_intc_create(PnvChip *chip, PowerPCCPU *cpu, { Error *local_err = NULL; Object *obj; + PnvCPUState *pnv_cpu = pnv_cpu_state(cpu); obj = icp_create(OBJECT(cpu), TYPE_PNV_ICP, XICS_FABRIC(qdev_get_machine()), &local_err); @@ -681,7 +682,7 @@ static void pnv_chip_power8_intc_create(PnvChip *chip, PowerPCCPU *cpu, return; } - cpu->icp = ICP(obj); + pnv_cpu->icp = ICP(obj); } /* @@ -1099,7 +1100,7 @@ static ICPState *pnv_icp_get(XICSFabric *xi, int pir) { PowerPCCPU *cpu = ppc_get_vcpu_by_pir(pir); - return cpu ? cpu->icp : NULL; + return cpu ? pnv_cpu_state(cpu)->icp : NULL; } static void pnv_pic_print_info(InterruptStatsProvider *obj, @@ -1112,7 +1113,7 @@ static void pnv_pic_print_info(InterruptStatsProvider *obj, CPU_FOREACH(cs) { PowerPCCPU *cpu = POWERPC_CPU(cs); - icp_pic_print_info(cpu->icp, mon); + icp_pic_print_info(pnv_cpu_state(cpu)->icp, mon); } for (i = 0; i < pnv->num_chips; i++) { diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c index b98f277f1e..7c806da720 100644 --- a/hw/ppc/pnv_core.c +++ b/hw/ppc/pnv_core.c @@ -155,7 +155,10 @@ static void pnv_core_realize(DeviceState *dev, Error **errp) pc->threads = g_new(PowerPCCPU *, cc->nr_threads); for (i = 0; i < cc->nr_threads; i++) { + PowerPCCPU *cpu; + obj = object_new(typename); + cpu = POWERPC_CPU(obj); pc->threads[i] = POWERPC_CPU(obj); @@ -163,6 +166,9 @@ static void pnv_core_realize(DeviceState *dev, Error **errp) object_property_add_child(OBJECT(pc), name, obj, &error_abort); object_property_add_alias(obj, "core-pir", OBJECT(pc), "pir", &error_abort); + + cpu->machine_data = g_new0(PnvCPUState, 1); + object_unref(obj); } @@ -189,9 +195,13 @@ err: static void pnv_unrealize_vcpu(PowerPCCPU *cpu) { + PnvCPUState *pnv_cpu = pnv_cpu_state(cpu); + qemu_unregister_reset(pnv_cpu_reset, cpu); - object_unparent(OBJECT(cpu->icp)); + object_unparent(OBJECT(pnv_cpu_state(cpu)->icp)); cpu_remove_sync(CPU(cpu)); + cpu->machine_data = NULL; + g_free(pnv_cpu); object_unparent(OBJECT(cpu)); } diff --git a/include/hw/ppc/pnv_core.h b/include/hw/ppc/pnv_core.h index 447ae761f7..9961ea3a92 100644 --- a/include/hw/ppc/pnv_core.h +++ b/include/hw/ppc/pnv_core.h @@ -47,4 +47,13 @@ typedef struct PnvCoreClass { #define PNV_CORE_TYPE_SUFFIX "-" TYPE_PNV_CORE #define PNV_CORE_TYPE_NAME(cpu_model) cpu_model PNV_CORE_TYPE_SUFFIX +typedef struct PnvCPUState { + struct ICPState *icp; +} PnvCPUState; + +static inline PnvCPUState *pnv_cpu_state(PowerPCCPU *cpu) +{ + return (PnvCPUState *)cpu->machine_data; +} + #endif /* _PPC_PNV_CORE_H */ From a28b9a5a8db6a650dbad5811f33615c361c72151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Thu, 17 Jan 2019 08:53:26 +0100 Subject: [PATCH 17/37] spapr: move the interrupt presenters under machine_data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Next step is to remove them from under the PowerPCCPU Signed-off-by: Cédric Le Goater Reviewed-by: Greg Kurz Signed-off-by: David Gibson --- hw/intc/spapr_xive.c | 3 ++- hw/intc/xics_spapr.c | 11 ++++++----- hw/ppc/spapr.c | 2 +- hw/ppc/spapr_cpu_core.c | 8 ++++---- hw/ppc/spapr_irq.c | 17 ++++++++++------- include/hw/ppc/spapr_cpu_core.h | 2 ++ 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index 136d872f16..a0f5ff9294 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -16,6 +16,7 @@ #include "monitor/monitor.h" #include "hw/ppc/fdt.h" #include "hw/ppc/spapr.h" +#include "hw/ppc/spapr_cpu_core.h" #include "hw/ppc/spapr_xive.h" #include "hw/ppc/xive.h" #include "hw/ppc/xive_regs.h" @@ -394,7 +395,7 @@ static XiveTCTX *spapr_xive_get_tctx(XiveRouter *xrtr, CPUState *cs) { PowerPCCPU *cpu = POWERPC_CPU(cs); - return cpu->tctx; + return spapr_cpu_state(cpu)->tctx; } static const VMStateDescription vmstate_spapr_xive_end = { diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index de6cc15b64..e2d8b38183 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -31,6 +31,7 @@ #include "trace.h" #include "qemu/timer.h" #include "hw/ppc/spapr.h" +#include "hw/ppc/spapr_cpu_core.h" #include "hw/ppc/xics.h" #include "hw/ppc/xics_spapr.h" #include "hw/ppc/fdt.h" @@ -45,7 +46,7 @@ static target_ulong h_cppr(PowerPCCPU *cpu, sPAPRMachineState *spapr, { target_ulong cppr = args[0]; - icp_set_cppr(cpu->icp, cppr); + icp_set_cppr(spapr_cpu_state(cpu)->icp, cppr); return H_SUCCESS; } @@ -66,7 +67,7 @@ static target_ulong h_ipi(PowerPCCPU *cpu, sPAPRMachineState *spapr, static target_ulong h_xirr(PowerPCCPU *cpu, sPAPRMachineState *spapr, target_ulong opcode, target_ulong *args) { - uint32_t xirr = icp_accept(cpu->icp); + uint32_t xirr = icp_accept(spapr_cpu_state(cpu)->icp); args[0] = xirr; return H_SUCCESS; @@ -75,7 +76,7 @@ static target_ulong h_xirr(PowerPCCPU *cpu, sPAPRMachineState *spapr, static target_ulong h_xirr_x(PowerPCCPU *cpu, sPAPRMachineState *spapr, target_ulong opcode, target_ulong *args) { - uint32_t xirr = icp_accept(cpu->icp); + uint32_t xirr = icp_accept(spapr_cpu_state(cpu)->icp); args[0] = xirr; args[1] = cpu_get_host_ticks(); @@ -87,7 +88,7 @@ static target_ulong h_eoi(PowerPCCPU *cpu, sPAPRMachineState *spapr, { target_ulong xirr = args[0]; - icp_eoi(cpu->icp, xirr); + icp_eoi(spapr_cpu_state(cpu)->icp, xirr); return H_SUCCESS; } @@ -95,7 +96,7 @@ static target_ulong h_ipoll(PowerPCCPU *cpu, sPAPRMachineState *spapr, target_ulong opcode, target_ulong *args) { uint32_t mfrr; - uint32_t xirr = icp_ipoll(cpu->icp, &mfrr); + uint32_t xirr = icp_ipoll(spapr_cpu_state(cpu)->icp, &mfrr); args[0] = xirr; args[1] = mfrr; diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index a217c7f7a6..487cdf2f3a 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3902,7 +3902,7 @@ static ICPState *spapr_icp_get(XICSFabric *xi, int vcpu_id) { PowerPCCPU *cpu = spapr_find_cpu(vcpu_id); - return cpu ? cpu->icp : NULL; + return cpu ? spapr_cpu_state(cpu)->icp : NULL; } static void spapr_pic_print_info(InterruptStatsProvider *obj, diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index 0405306d1e..ef6cbb9c29 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -194,11 +194,11 @@ static void spapr_unrealize_vcpu(PowerPCCPU *cpu, sPAPRCPUCore *sc) vmstate_unregister(NULL, &vmstate_spapr_cpu_state, cpu->machine_data); } qemu_unregister_reset(spapr_cpu_reset, cpu); - if (cpu->icp) { - object_unparent(OBJECT(cpu->icp)); + if (spapr_cpu_state(cpu)->icp) { + object_unparent(OBJECT(spapr_cpu_state(cpu)->icp)); } - if (cpu->tctx) { - object_unparent(OBJECT(cpu->tctx)); + if (spapr_cpu_state(cpu)->tctx) { + object_unparent(OBJECT(spapr_cpu_state(cpu)->tctx)); } cpu_remove_sync(CPU(cpu)); object_unparent(OBJECT(cpu)); diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 1da7a32348..2d7a7c1638 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -12,6 +12,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "hw/ppc/spapr.h" +#include "hw/ppc/spapr_cpu_core.h" #include "hw/ppc/spapr_xive.h" #include "hw/ppc/xics.h" #include "hw/ppc/xics_spapr.h" @@ -185,7 +186,7 @@ static void spapr_irq_print_info_xics(sPAPRMachineState *spapr, Monitor *mon) CPU_FOREACH(cs) { PowerPCCPU *cpu = POWERPC_CPU(cs); - icp_pic_print_info(cpu->icp, mon); + icp_pic_print_info(spapr_cpu_state(cpu)->icp, mon); } ics_pic_print_info(spapr->ics, mon); @@ -196,6 +197,7 @@ static void spapr_irq_cpu_intc_create_xics(sPAPRMachineState *spapr, { Error *local_err = NULL; Object *obj; + sPAPRCPUState *spapr_cpu = spapr_cpu_state(cpu); obj = icp_create(OBJECT(cpu), spapr->icp_type, XICS_FABRIC(spapr), &local_err); @@ -204,7 +206,7 @@ static void spapr_irq_cpu_intc_create_xics(sPAPRMachineState *spapr, return; } - cpu->icp = ICP(obj); + spapr_cpu->icp = ICP(obj); } static int spapr_irq_post_load_xics(sPAPRMachineState *spapr, int version_id) @@ -213,7 +215,7 @@ static int spapr_irq_post_load_xics(sPAPRMachineState *spapr, int version_id) CPUState *cs; CPU_FOREACH(cs) { PowerPCCPU *cpu = POWERPC_CPU(cs); - icp_resend(cpu->icp); + icp_resend(spapr_cpu_state(cpu)->icp); } } return 0; @@ -334,7 +336,7 @@ static void spapr_irq_print_info_xive(sPAPRMachineState *spapr, CPU_FOREACH(cs) { PowerPCCPU *cpu = POWERPC_CPU(cs); - xive_tctx_pic_print_info(cpu->tctx, mon); + xive_tctx_pic_print_info(spapr_cpu_state(cpu)->tctx, mon); } spapr_xive_pic_print_info(spapr->xive, mon); @@ -345,6 +347,7 @@ static void spapr_irq_cpu_intc_create_xive(sPAPRMachineState *spapr, { Error *local_err = NULL; Object *obj; + sPAPRCPUState *spapr_cpu = spapr_cpu_state(cpu); obj = xive_tctx_create(OBJECT(cpu), XIVE_ROUTER(spapr->xive), &local_err); if (local_err) { @@ -352,13 +355,13 @@ static void spapr_irq_cpu_intc_create_xive(sPAPRMachineState *spapr, return; } - cpu->tctx = XIVE_TCTX(obj); + spapr_cpu->tctx = XIVE_TCTX(obj); /* * (TCG) Early setting the OS CAM line for hotplugged CPUs as they * don't beneficiate from the reset of the XIVE IRQ backend */ - spapr_xive_set_tctx_os_cam(cpu->tctx); + spapr_xive_set_tctx_os_cam(spapr_cpu->tctx); } static int spapr_irq_post_load_xive(sPAPRMachineState *spapr, int version_id) @@ -374,7 +377,7 @@ static void spapr_irq_reset_xive(sPAPRMachineState *spapr, Error **errp) PowerPCCPU *cpu = POWERPC_CPU(cs); /* (TCG) Set the OS CAM line of the thread interrupt context. */ - spapr_xive_set_tctx_os_cam(cpu->tctx); + spapr_xive_set_tctx_os_cam(spapr_cpu_state(cpu)->tctx); } /* Activate the XIVE MMIOs */ diff --git a/include/hw/ppc/spapr_cpu_core.h b/include/hw/ppc/spapr_cpu_core.h index 9e2821e4b3..d64f86bc28 100644 --- a/include/hw/ppc/spapr_cpu_core.h +++ b/include/hw/ppc/spapr_cpu_core.h @@ -46,6 +46,8 @@ typedef struct sPAPRCPUState { uint64_t vpa_addr; uint64_t slb_shadow_addr, slb_shadow_size; uint64_t dtl_addr, dtl_size; + struct ICPState *icp; + struct XiveTCTX *tctx; } sPAPRCPUState; static inline sPAPRCPUState *spapr_cpu_state(PowerPCCPU *cpu) From 9c86cb0d79f8658171a6a3b7903773f33559d51a Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Sun, 27 Jan 2019 09:02:59 +0000 Subject: [PATCH 18/37] target/ppc: implement complete set of Vsr* macros This prepares us for eliminating the use of direct array access within the VMX instruction implementations. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson Signed-off-by: David Gibson --- target/ppc/internal.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/target/ppc/internal.h b/target/ppc/internal.h index c7c0f77dd6..f26a71ffcf 100644 --- a/target/ppc/internal.h +++ b/target/ppc/internal.h @@ -206,16 +206,23 @@ EXTRACT_HELPER_SPLIT_3(DCMX_XV, 5, 16, 0, 1, 2, 5, 1, 6, 6); #if defined(HOST_WORDS_BIGENDIAN) #define VsrB(i) u8[i] +#define VsrSB(i) s8[i] #define VsrH(i) u16[i] +#define VsrSH(i) s16[i] #define VsrW(i) u32[i] +#define VsrSW(i) s32[i] #define VsrD(i) u64[i] +#define VsrSD(i) s64[i] #else #define VsrB(i) u8[15 - (i)] +#define VsrSB(i) s8[15 - (i)] #define VsrH(i) u16[7 - (i)] +#define VsrSH(i) s16[7 - (i)] #define VsrW(i) u32[3 - (i)] +#define VsrSW(i) s32[3 - (i)] #define VsrD(i) u64[1 - (i)] +#define VsrSD(i) s64[1 - (i)] #endif - static inline void getVSR(int n, ppc_vsr_t *vsr, CPUPPCState *env) { vsr->VsrD(0) = env->vsr[n].u64[0]; From 467657b3b70fff20704e9aa8d7ab989e768eeb96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Mon, 28 Jan 2019 07:55:52 +0100 Subject: [PATCH 19/37] ppc: remove the interrupt presenters from under PowerPCCPU MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These fields have now been replaced by equivalents under the machine data. Signed-off-by: Cédric Le Goater Reviewed-by: Greg Kurz Signed-off-by: David Gibson --- target/ppc/cpu.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index a62ff60414..2c22292e7f 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -1178,9 +1178,6 @@ do { \ typedef struct PPCVirtualHypervisor PPCVirtualHypervisor; typedef struct PPCVirtualHypervisorClass PPCVirtualHypervisorClass; -struct XiveTCTX; -struct ICPState; - /** * PowerPCCPU: * @env: #CPUPPCState @@ -1198,8 +1195,6 @@ struct PowerPCCPU { int vcpu_id; uint32_t compat_pvr; PPCVirtualHypervisor *vhyp; - struct ICPState *icp; - struct XiveTCTX *tctx; void *machine_data; int32_t node_id; /* NUMA node this CPU belongs to */ PPCHash64Options *hash64_opts; From 52144b69e4e164c1fc48d872faf3b28162fb7b30 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 30 Jan 2019 15:30:49 +0100 Subject: [PATCH 20/37] hw/ppc: Move ppc40x_*reset() functions from ppc405_uc.c to ppc.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, it is not possible to build a QEMU binary without the ppc405_uc.c file, even if you do not want to have the embedded machines in the binary. This is bad since it's quite a bit of code and this code pulls in some more dependencies (e.g. via the usage of serial_mm_init()) which would not be needed otherwise - especially with the upcoming Kconfig-style configuration system for QEMU. The only functions from this file which are really always required for linking are the ppc40x_*reset() functions, so move these functions to ppc.c, close to the ppc40x_set_irq() function that calls them. Now we can flag ppc405_uc.c and ppc4xx_devs.c with the CONFIG_PPC4XX config switch, too. And while we're at it, replace the printf()s in these ppc40x_*reset() functions with proper calls to qemu_log_mask(). Signed-off-by: Thomas Huth Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: David Gibson --- hw/ppc/Makefile.objs | 3 +-- hw/ppc/ppc.c | 56 ++++++++++++++++++++++++++++++++++++++++++ hw/ppc/ppc405_uc.c | 58 -------------------------------------------- 3 files changed, 57 insertions(+), 60 deletions(-) diff --git a/hw/ppc/Makefile.objs b/hw/ppc/Makefile.objs index 4e0c1c0941..1e753de09b 100644 --- a/hw/ppc/Makefile.objs +++ b/hw/ppc/Makefile.objs @@ -13,8 +13,7 @@ obj-y += spapr_pci_vfio.o endif obj-$(CONFIG_PSERIES) += spapr_rtas_ddw.o # PowerPC 4xx boards -obj-y += ppc4xx_devs.o ppc405_uc.o -obj-$(CONFIG_PPC4XX) += ppc4xx_pci.o ppc405_boards.o +obj-$(CONFIG_PPC4XX) += ppc4xx_devs.o ppc4xx_pci.o ppc405_uc.o ppc405_boards.o obj-$(CONFIG_PPC4XX) += ppc440_bamboo.o ppc440_pcix.o ppc440_uc.o obj-$(CONFIG_SAM460EX) += sam460ex.o # PReP diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index ec4be25f49..98b409f83d 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -310,6 +310,62 @@ void ppcPOWER7_irq_init(PowerPCCPU *cpu) } #endif /* defined(TARGET_PPC64) */ +void ppc40x_core_reset(PowerPCCPU *cpu) +{ + CPUPPCState *env = &cpu->env; + target_ulong dbsr; + + qemu_log_mask(CPU_LOG_RESET, "Reset PowerPC core\n"); + cpu_interrupt(CPU(cpu), CPU_INTERRUPT_RESET); + dbsr = env->spr[SPR_40x_DBSR]; + dbsr &= ~0x00000300; + dbsr |= 0x00000100; + env->spr[SPR_40x_DBSR] = dbsr; +} + +void ppc40x_chip_reset(PowerPCCPU *cpu) +{ + CPUPPCState *env = &cpu->env; + target_ulong dbsr; + + qemu_log_mask(CPU_LOG_RESET, "Reset PowerPC chip\n"); + cpu_interrupt(CPU(cpu), CPU_INTERRUPT_RESET); + /* XXX: TODO reset all internal peripherals */ + dbsr = env->spr[SPR_40x_DBSR]; + dbsr &= ~0x00000300; + dbsr |= 0x00000200; + env->spr[SPR_40x_DBSR] = dbsr; +} + +void ppc40x_system_reset(PowerPCCPU *cpu) +{ + qemu_log_mask(CPU_LOG_RESET, "Reset PowerPC system\n"); + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); +} + +void store_40x_dbcr0(CPUPPCState *env, uint32_t val) +{ + PowerPCCPU *cpu = ppc_env_get_cpu(env); + + switch ((val >> 28) & 0x3) { + case 0x0: + /* No action */ + break; + case 0x1: + /* Core reset */ + ppc40x_core_reset(cpu); + break; + case 0x2: + /* Chip reset */ + ppc40x_chip_reset(cpu); + break; + case 0x3: + /* System reset */ + ppc40x_system_reset(cpu); + break; + } +} + /* PowerPC 40x internal IRQ controller */ static void ppc40x_set_irq(void *opaque, int pin, int level) { diff --git a/hw/ppc/ppc405_uc.c b/hw/ppc/ppc405_uc.c index 8d3a797cb8..3ae7f6d4df 100644 --- a/hw/ppc/ppc405_uc.c +++ b/hw/ppc/ppc405_uc.c @@ -1155,64 +1155,6 @@ static void ppc4xx_gpt_init(hwaddr base, qemu_irq irqs[5]) qemu_register_reset(ppc4xx_gpt_reset, gpt); } -/*****************************************************************************/ -/* SPR */ -void ppc40x_core_reset(PowerPCCPU *cpu) -{ - CPUPPCState *env = &cpu->env; - target_ulong dbsr; - - printf("Reset PowerPC core\n"); - cpu_interrupt(CPU(cpu), CPU_INTERRUPT_RESET); - dbsr = env->spr[SPR_40x_DBSR]; - dbsr &= ~0x00000300; - dbsr |= 0x00000100; - env->spr[SPR_40x_DBSR] = dbsr; -} - -void ppc40x_chip_reset(PowerPCCPU *cpu) -{ - CPUPPCState *env = &cpu->env; - target_ulong dbsr; - - printf("Reset PowerPC chip\n"); - cpu_interrupt(CPU(cpu), CPU_INTERRUPT_RESET); - /* XXX: TODO reset all internal peripherals */ - dbsr = env->spr[SPR_40x_DBSR]; - dbsr &= ~0x00000300; - dbsr |= 0x00000200; - env->spr[SPR_40x_DBSR] = dbsr; -} - -void ppc40x_system_reset(PowerPCCPU *cpu) -{ - printf("Reset PowerPC system\n"); - qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); -} - -void store_40x_dbcr0 (CPUPPCState *env, uint32_t val) -{ - PowerPCCPU *cpu = ppc_env_get_cpu(env); - - switch ((val >> 28) & 0x3) { - case 0x0: - /* No action */ - break; - case 0x1: - /* Core reset */ - ppc40x_core_reset(cpu); - break; - case 0x2: - /* Chip reset */ - ppc40x_chip_reset(cpu); - break; - case 0x3: - /* System reset */ - ppc40x_system_reset(cpu); - break; - } -} - /*****************************************************************************/ /* PowerPC 405CR */ enum { From 2313abf0fe017eedd7f7eba2438db859147b2b1f Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 30 Jan 2019 16:45:40 +0100 Subject: [PATCH 21/37] MAINTAINERS: XIVE is an interrupt controller, not a machine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "XIVE" section is currently listed in the "PowerPC Machines" section, which is weird, since this is an interrupt controller device. Move it to the "Devices" section instead. Signed-off-by: Thomas Huth Reviewed-by: Cédric Le Goater Signed-off-by: David Gibson --- MAINTAINERS | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 612692b284..d891e79faa 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1041,14 +1041,6 @@ F: tests/libqos/*spapr* F: tests/rtas* F: tests/libqos/rtas* -XIVE -M: David Gibson -M: Cédric Le Goater -L: qemu-ppc@nongnu.org -S: Supported -F: hw/*/*xive* -F: include/hw/*/*xive* - virtex_ml507 M: Edgar E. Iglesias L: qemu-ppc@nongnu.org @@ -1648,6 +1640,14 @@ F: tests/libqos/fw_cfg.c F: tests/fw_cfg-test.c T: git https://github.com/philmd/qemu.git fw_cfg-next +XIVE +M: David Gibson +M: Cédric Le Goater +L: qemu-ppc@nongnu.org +S: Supported +F: hw/*/*xive* +F: include/hw/*/*xive* + Subsystems ---------- Audio From ce6fc61736d9796d519a163f9181da738677888f Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 30 Jan 2019 17:22:25 +0100 Subject: [PATCH 22/37] MAINTAINERS: Merge the two e500 sections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There is currently a "e500" machine section and a "ppce500" device section in the maintainers file - with some oddities: The wildcard in the device section also covers the files from the machine section. And hw/pci-host/ppce500.c is in the device section, while its header is in the machine section. This is really quite confusing, and I don't see a reason why we really need two sections here, so let's simply merge them. Signed-off-by: Thomas Huth Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: David Gibson --- MAINTAINERS | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index d891e79faa..646e289df4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -960,9 +960,10 @@ e500 M: David Gibson L: qemu-ppc@nongnu.org S: Odd Fixes -F: hw/ppc/e500.[hc] -F: hw/ppc/e500plat.c +F: hw/ppc/e500* F: hw/gpio/mpc8xxx.c +F: hw/net/fsl_etsec/ +F: hw/pci-host/ppce500.c F: include/hw/ppc/ppc_e500.h F: include/hw/pci-host/ppce500.h F: pc-bios/u-boot.e500 @@ -1319,14 +1320,6 @@ F: hw/i2c/ppc4xx_i2c.c F: include/hw/ppc/ppc4xx.h F: include/hw/i2c/ppc4xx_i2c.h -ppce500 -M: David Gibson -L: qemu-ppc@nongnu.org -S: Odd Fixes -F: hw/ppc/e500* -F: hw/pci-host/ppce500.c -F: hw/net/fsl_etsec/ - Character devices M: Marc-André Lureau R: Paolo Bonzini From df269271a92452313459f04fbc388f0be018cf70 Mon Sep 17 00:00:00 2001 From: Alexey Kardashevskiy Date: Wed, 30 Jan 2019 12:42:16 +1100 Subject: [PATCH 23/37] spapr: Drop unused parameters from fdt building helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit spapr_load_rtas() handles now RTAS address and size information in the FDT so drop them from spapr_build_fdt(). While we are here, fix a small typo. Fixes: 3f5dabceba24 "pseries: Consolidate construction of /rtas device tree node" Signed-off-by: Alexey Kardashevskiy Reviewed-by: Greg Kurz Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: David Gibson --- hw/ppc/spapr.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 487cdf2f3a..c66e7d8e0a 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1225,9 +1225,7 @@ static void spapr_dt_hypervisor(sPAPRMachineState *spapr, void *fdt) } } -static void *spapr_build_fdt(sPAPRMachineState *spapr, - hwaddr rtas_addr, - hwaddr rtas_size) +static void *spapr_build_fdt(sPAPRMachineState *spapr) { MachineState *machine = MACHINE(spapr); MachineClass *mc = MACHINE_GET_CLASS(machine); @@ -1644,14 +1642,14 @@ static void spapr_machine_reset(void) /* * We place the device tree and RTAS just below either the top of the RMA, - * or just below 2GB, whichever is lowere, so that it can be + * or just below 2GB, whichever is lower, so that it can be * processed with 32-bit real mode code if necessary */ rtas_limit = MIN(spapr->rma_size, RTAS_MAX_ADDR); rtas_addr = rtas_limit - RTAS_MAX_SIZE; fdt_addr = rtas_addr - FDT_MAX_SIZE; - fdt = spapr_build_fdt(spapr, rtas_addr, spapr->rtas_size); + fdt = spapr_build_fdt(spapr); spapr_load_rtas(spapr, fdt, rtas_addr); From 40e3dd069c5f050ebc39c63b51938b15380f8aa1 Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Mon, 28 Jan 2019 21:21:56 +0000 Subject: [PATCH 24/37] MAINTAINERS: add myself as maintainer for Mac Old World and New World machines I've unofficially been doing most of the work on the Mac machines for a while now, so update MAINTAINERS to reflect this. David is still happy to be listed as a reviewer as per our discussion at KVM forum. Signed-off-by: Mark Cave-Ayland Acked-by: David Gibson Signed-off-by: David Gibson --- MAINTAINERS | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 646e289df4..9a76845581 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -976,7 +976,8 @@ F: hw/ppc/mpc8544ds.c F: hw/ppc/mpc8544_guts.c New World (mac99) -M: David Gibson +M: Mark Cave-Ayland +R: David Gibson L: qemu-ppc@nongnu.org S: Odd Fixes F: hw/ppc/mac_newworld.c @@ -994,7 +995,8 @@ F: include/hw/input/adb* F: pc-bios/qemu_vga.ndrv Old World (g3beige) -M: David Gibson +M: Mark Cave-Ayland +R: David Gibson L: qemu-ppc@nongnu.org S: Odd Fixes F: hw/ppc/mac_oldworld.c From 200280af0e19bfaeb9431eb0ee1ee2d8bf8d3a0a Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Mon, 28 Jan 2019 21:21:57 +0000 Subject: [PATCH 25/37] QemuMacDrivers: update qemu_vga.ndrv to 90c488d built from submodule This update to qemu_vga.ndrv includes the following changes: - Build guest resolution list from QEMU EDID data if enabled - Fixes to re-enable 256 color mode Signed-off-by: Mark Cave-Ayland Signed-off-by: David Gibson --- pc-bios/qemu_vga.ndrv | Bin 14752 -> 18752 bytes roms/QemuMacDrivers | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/pc-bios/qemu_vga.ndrv b/pc-bios/qemu_vga.ndrv index 6e02f74d61e01c87cf50b10e174a6626bee13677..de81cfd1c57c30671d2017eb1899583fb1c887c3 100644 GIT binary patch literal 18752 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 Date: Wed, 30 Jan 2019 14:36:39 +0100 Subject: [PATCH 26/37] hw/ppc/spapr: Add support for "-vga cirrus" The cirrus VGA card has been enabled in the PPC builds with commit 29f9cef39eb1ae55e82c ("ppc: Include vga cirrus card into the compiling process") last year. It also works on the pseries machine, even SLOF contains support for this card, so we can also support this for the "-vga" parameter here. Signed-off-by: Thomas Huth Signed-off-by: David Gibson --- hw/ppc/spapr.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index c66e7d8e0a..0fcdd35cbe 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1715,6 +1715,7 @@ static bool spapr_vga_init(PCIBus *pci_bus, Error **errp) return true; case VGA_STD: case VGA_VIRTIO: + case VGA_CIRRUS: return pci_vga_init(pci_bus) != NULL; default: error_setg(errp, From d81c20404e2254e2f56d649c978c7fd6b28c3394 Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Wed, 30 Jan 2019 20:36:32 +0000 Subject: [PATCH 27/37] target/ppc: rework vmrg{l,h}{b,h,w} instructions to use Vsr* macros The current implementations make use of the endian-specific macros MRGLO/MRGHI and also reference HI_IDX and LO_IDX directly to calculate array offsets. Rework the implementation to use the Vsr* macros so that these per-endian references can be removed. Signed-off-by: Mark Cave-Ayland Signed-off-by: David Gibson --- target/ppc/int_helper.c | 52 ++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 34 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index 598731d47a..fe418b3393 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -976,43 +976,27 @@ void helper_vmladduhm(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) } } -#define VMRG_DO(name, element, highp) \ - void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ - { \ - ppc_avr_t result; \ - int i; \ - size_t n_elems = ARRAY_SIZE(r->element); \ - \ - for (i = 0; i < n_elems / 2; i++) { \ - if (highp) { \ - result.element[i*2+HI_IDX] = a->element[i]; \ - result.element[i*2+LO_IDX] = b->element[i]; \ - } else { \ - result.element[n_elems - i * 2 - (1 + HI_IDX)] = \ - b->element[n_elems - i - 1]; \ - result.element[n_elems - i * 2 - (1 + LO_IDX)] = \ - a->element[n_elems - i - 1]; \ - } \ - } \ - *r = result; \ +#define VMRG_DO(name, element, access, ofs) \ + void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ + { \ + ppc_avr_t result; \ + int i, half = ARRAY_SIZE(r->element) / 2; \ + \ + for (i = 0; i < half; i++) { \ + result.access(i * 2 + 0) = a->access(i + ofs); \ + result.access(i * 2 + 1) = b->access(i + ofs); \ + } \ + *r = result; \ } -#if defined(HOST_WORDS_BIGENDIAN) -#define MRGHI 0 -#define MRGLO 1 -#else -#define MRGHI 1 -#define MRGLO 0 -#endif -#define VMRG(suffix, element) \ - VMRG_DO(mrgl##suffix, element, MRGHI) \ - VMRG_DO(mrgh##suffix, element, MRGLO) -VMRG(b, u8) -VMRG(h, u16) -VMRG(w, u32) + +#define VMRG(suffix, element, access) \ + VMRG_DO(mrgl##suffix, element, access, half) \ + VMRG_DO(mrgh##suffix, element, access, 0) +VMRG(b, u8, VsrB) +VMRG(h, u16, VsrH) +VMRG(w, u32, VsrW) #undef VMRG_DO #undef VMRG -#undef MRGHI -#undef MRGLO void helper_vmsummbm(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) From 4fbc89edc192931364d183dc4051f54dd1f58cf3 Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Wed, 30 Jan 2019 20:36:33 +0000 Subject: [PATCH 28/37] target/ppc: rework vmul{e,o}{s,u}{b,h,w} instructions to use Vsr* macros The current implementations make use of the endian-specific macros HI_IDX and LO_IDX directly to calculate array offsets. Rework the implementation to use the Vsr* macros so that these per-endian references can be removed. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson Signed-off-by: David Gibson --- target/ppc/int_helper.c | 48 +++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index fe418b3393..e531af5294 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -1104,33 +1104,39 @@ void helper_vmsumuhs(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, } } -#define VMUL_DO(name, mul_element, prod_element, cast, evenp) \ +#define VMUL_DO_EVN(name, mul_element, mul_access, prod_access, cast) \ void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ { \ int i; \ \ - VECTOR_FOR_INORDER_I(i, prod_element) { \ - if (evenp) { \ - r->prod_element[i] = \ - (cast)a->mul_element[i * 2 + HI_IDX] * \ - (cast)b->mul_element[i * 2 + HI_IDX]; \ - } else { \ - r->prod_element[i] = \ - (cast)a->mul_element[i * 2 + LO_IDX] * \ - (cast)b->mul_element[i * 2 + LO_IDX]; \ - } \ + for (i = 0; i < ARRAY_SIZE(r->mul_element); i += 2) { \ + r->prod_access(i >> 1) = (cast)a->mul_access(i) * \ + (cast)b->mul_access(i); \ } \ } -#define VMUL(suffix, mul_element, prod_element, cast) \ - VMUL_DO(mule##suffix, mul_element, prod_element, cast, 1) \ - VMUL_DO(mulo##suffix, mul_element, prod_element, cast, 0) -VMUL(sb, s8, s16, int16_t) -VMUL(sh, s16, s32, int32_t) -VMUL(sw, s32, s64, int64_t) -VMUL(ub, u8, u16, uint16_t) -VMUL(uh, u16, u32, uint32_t) -VMUL(uw, u32, u64, uint64_t) -#undef VMUL_DO + +#define VMUL_DO_ODD(name, mul_element, mul_access, prod_access, cast) \ + void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ + { \ + int i; \ + \ + for (i = 0; i < ARRAY_SIZE(r->mul_element); i += 2) { \ + r->prod_access(i >> 1) = (cast)a->mul_access(i + 1) * \ + (cast)b->mul_access(i + 1); \ + } \ + } + +#define VMUL(suffix, mul_element, mul_access, prod_access, cast) \ + VMUL_DO_EVN(mule##suffix, mul_element, mul_access, prod_access, cast) \ + VMUL_DO_ODD(mulo##suffix, mul_element, mul_access, prod_access, cast) +VMUL(sb, s8, VsrSB, VsrSH, int16_t) +VMUL(sh, s16, VsrSH, VsrSW, int32_t) +VMUL(sw, s32, VsrSW, VsrSD, int64_t) +VMUL(ub, u8, VsrB, VsrH, uint16_t) +VMUL(uh, u16, VsrH, VsrW, uint32_t) +VMUL(uw, u32, VsrW, VsrD, uint64_t) +#undef VMUL_DO_EVN +#undef VMUL_DO_ODD #undef VMUL void helper_vperm(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, From 3c385a93b3fdc5972adbf03fd87a9cf091d0f098 Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Wed, 30 Jan 2019 20:36:34 +0000 Subject: [PATCH 29/37] target/ppc: eliminate use of HI_IDX and LO_IDX macros from int_helper.c The original purpose of these macros was to correctly reference the high and low parts of the VSRs regardless of the host endianness. Replace these direct references to high and low parts with the relevant VsrD macro instead, and completely remove the now-unused HI_IDX and LO_IDX macros. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson Signed-off-by: David Gibson --- target/ppc/int_helper.c | 180 +++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 95 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index e531af5294..7a9c02d4bb 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -388,14 +388,6 @@ target_ulong helper_602_mfrom(target_ulong arg) /*****************************************************************************/ /* Altivec extension helpers */ -#if defined(HOST_WORDS_BIGENDIAN) -#define HI_IDX 0 -#define LO_IDX 1 -#else -#define HI_IDX 1 -#define LO_IDX 0 -#endif - #if defined(HOST_WORDS_BIGENDIAN) #define VECTOR_FOR_INORDER_I(index, element) \ for (index = 0; index < ARRAY_SIZE(r->element); index++) @@ -514,8 +506,8 @@ void helper_vprtybq(ppc_avr_t *r, ppc_avr_t *b) res ^= res >> 32; res ^= res >> 16; res ^= res >> 8; - r->u64[LO_IDX] = res & 1; - r->u64[HI_IDX] = 0; + r->VsrD(1) = res & 1; + r->VsrD(0) = 0; } #define VARITH_DO(name, op, element) \ @@ -1229,8 +1221,8 @@ void helper_vbpermq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) } } - r->u64[HI_IDX] = perm; - r->u64[LO_IDX] = 0; + r->VsrD(0) = perm; + r->VsrD(1) = 0; } #undef VBPERMQ_INDEX @@ -1559,25 +1551,25 @@ void helper_vpmsumd(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) ppc_avr_t prod[2]; VECTOR_FOR_INORDER_I(i, u64) { - prod[i].u64[LO_IDX] = prod[i].u64[HI_IDX] = 0; + prod[i].VsrD(1) = prod[i].VsrD(0) = 0; for (j = 0; j < 64; j++) { if (a->u64[i] & (1ull<u64[i]; + bshift.VsrD(0) = 0; + bshift.VsrD(1) = b->u64[i]; } else { - bshift.u64[HI_IDX] = b->u64[i] >> (64-j); - bshift.u64[LO_IDX] = b->u64[i] << j; + bshift.VsrD(0) = b->u64[i] >> (64 - j); + bshift.VsrD(1) = b->u64[i] << j; } - prod[i].u64[LO_IDX] ^= bshift.u64[LO_IDX]; - prod[i].u64[HI_IDX] ^= bshift.u64[HI_IDX]; + prod[i].VsrD(1) ^= bshift.VsrD(1); + prod[i].VsrD(0) ^= bshift.VsrD(0); } } } - r->u64[LO_IDX] = prod[0].u64[LO_IDX] ^ prod[1].u64[LO_IDX]; - r->u64[HI_IDX] = prod[0].u64[HI_IDX] ^ prod[1].u64[HI_IDX]; + r->VsrD(1) = prod[0].VsrD(1) ^ prod[1].VsrD(1); + r->VsrD(0) = prod[0].VsrD(0) ^ prod[1].VsrD(0); #endif } @@ -1795,7 +1787,7 @@ VEXTU_X_DO(vextuwrx, 32, 0) #define VSHIFT(suffix, leftp) \ void helper_vs##suffix(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ { \ - int shift = b->u8[LO_IDX*15] & 0x7; \ + int shift = b->VsrB(15) & 0x7; \ int doit = 1; \ int i; \ \ @@ -1806,15 +1798,15 @@ VEXTU_X_DO(vextuwrx, 32, 0) if (shift == 0) { \ *r = *a; \ } else if (leftp) { \ - uint64_t carry = a->u64[LO_IDX] >> (64 - shift); \ + uint64_t carry = a->VsrD(1) >> (64 - shift); \ \ - r->u64[HI_IDX] = (a->u64[HI_IDX] << shift) | carry; \ - r->u64[LO_IDX] = a->u64[LO_IDX] << shift; \ + r->VsrD(0) = (a->VsrD(0) << shift) | carry; \ + r->VsrD(1) = a->VsrD(1) << shift; \ } else { \ - uint64_t carry = a->u64[HI_IDX] << (64 - shift); \ + uint64_t carry = a->VsrD(0) << (64 - shift); \ \ - r->u64[LO_IDX] = (a->u64[LO_IDX] >> shift) | carry; \ - r->u64[HI_IDX] = a->u64[HI_IDX] >> shift; \ + r->VsrD(1) = (a->VsrD(1) >> shift) | carry; \ + r->VsrD(0) = a->VsrD(0) >> shift; \ } \ } \ } @@ -1900,7 +1892,7 @@ void helper_vsldoi(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t shift) void helper_vslo(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) { - int sh = (b->u8[LO_IDX*0xf] >> 3) & 0xf; + int sh = (b->VsrB(0xf) >> 3) & 0xf; #if defined(HOST_WORDS_BIGENDIAN) memmove(&r->u8[0], &a->u8[sh], 16 - sh); @@ -2096,7 +2088,7 @@ VSR(d, u64, 0x3F) void helper_vsro(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) { - int sh = (b->u8[LO_IDX * 0xf] >> 3) & 0xf; + int sh = (b->VsrB(0xf) >> 3) & 0xf; #if defined(HOST_WORDS_BIGENDIAN) memmove(&r->u8[sh], &a->u8[0], 16 - sh); @@ -2352,13 +2344,13 @@ static inline void avr_qw_not(ppc_avr_t *t, ppc_avr_t a) static int avr_qw_cmpu(ppc_avr_t a, ppc_avr_t b) { - if (a.u64[HI_IDX] < b.u64[HI_IDX]) { + if (a.VsrD(0) < b.VsrD(0)) { return -1; - } else if (a.u64[HI_IDX] > b.u64[HI_IDX]) { + } else if (a.VsrD(0) > b.VsrD(0)) { return 1; - } else if (a.u64[LO_IDX] < b.u64[LO_IDX]) { + } else if (a.VsrD(1) < b.VsrD(1)) { return -1; - } else if (a.u64[LO_IDX] > b.u64[LO_IDX]) { + } else if (a.VsrD(1) > b.VsrD(1)) { return 1; } else { return 0; @@ -2367,17 +2359,17 @@ static int avr_qw_cmpu(ppc_avr_t a, ppc_avr_t b) static void avr_qw_add(ppc_avr_t *t, ppc_avr_t a, ppc_avr_t b) { - t->u64[LO_IDX] = a.u64[LO_IDX] + b.u64[LO_IDX]; - t->u64[HI_IDX] = a.u64[HI_IDX] + b.u64[HI_IDX] + - (~a.u64[LO_IDX] < b.u64[LO_IDX]); + t->VsrD(1) = a.VsrD(1) + b.VsrD(1); + t->VsrD(0) = a.VsrD(0) + b.VsrD(0) + + (~a.VsrD(1) < b.VsrD(1)); } static int avr_qw_addc(ppc_avr_t *t, ppc_avr_t a, ppc_avr_t b) { ppc_avr_t not_a; - t->u64[LO_IDX] = a.u64[LO_IDX] + b.u64[LO_IDX]; - t->u64[HI_IDX] = a.u64[HI_IDX] + b.u64[HI_IDX] + - (~a.u64[LO_IDX] < b.u64[LO_IDX]); + t->VsrD(1) = a.VsrD(1) + b.VsrD(1); + t->VsrD(0) = a.VsrD(0) + b.VsrD(0) + + (~a.VsrD(1) < b.VsrD(1)); avr_qw_not(¬_a, a); return avr_qw_cmpu(not_a, b) < 0; } @@ -2399,11 +2391,11 @@ void helper_vaddeuqm(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) r->u128 = a->u128 + b->u128 + (c->u128 & 1); #else - if (c->u64[LO_IDX] & 1) { + if (c->VsrD(1) & 1) { ppc_avr_t tmp; - tmp.u64[HI_IDX] = 0; - tmp.u64[LO_IDX] = c->u64[LO_IDX] & 1; + tmp.VsrD(0) = 0; + tmp.VsrD(1) = c->VsrD(1) & 1; avr_qw_add(&tmp, *a, tmp); avr_qw_add(r, tmp, *b); } else { @@ -2421,8 +2413,8 @@ void helper_vaddcuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) avr_qw_not(¬_a, *a); - r->u64[HI_IDX] = 0; - r->u64[LO_IDX] = (avr_qw_cmpu(not_a, *b) < 0); + r->VsrD(0) = 0; + r->VsrD(1) = (avr_qw_cmpu(not_a, *b) < 0); #endif } @@ -2437,7 +2429,7 @@ void helper_vaddecuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) r->u128 = carry_out; #else - int carry_in = c->u64[LO_IDX] & 1; + int carry_in = c->VsrD(1) & 1; int carry_out = 0; ppc_avr_t tmp; @@ -2447,8 +2439,8 @@ void helper_vaddecuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) ppc_avr_t one = QW_ONE; carry_out = avr_qw_addc(&tmp, tmp, one); } - r->u64[HI_IDX] = 0; - r->u64[LO_IDX] = carry_out; + r->VsrD(0) = 0; + r->VsrD(1) = carry_out; #endif } @@ -2476,8 +2468,8 @@ void helper_vsubeuqm(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) avr_qw_not(&tmp, *b); avr_qw_add(&sum, *a, tmp); - tmp.u64[HI_IDX] = 0; - tmp.u64[LO_IDX] = c->u64[LO_IDX] & 1; + tmp.VsrD(0) = 0; + tmp.VsrD(1) = c->VsrD(1) & 1; avr_qw_add(r, sum, tmp); #endif } @@ -2493,10 +2485,10 @@ void helper_vsubcuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) ppc_avr_t tmp; avr_qw_not(&tmp, *b); avr_qw_add(&tmp, *a, tmp); - carry = ((tmp.s64[HI_IDX] == -1ull) && (tmp.s64[LO_IDX] == -1ull)); + carry = ((tmp.VsrSD(0) == -1ull) && (tmp.VsrSD(1) == -1ull)); } - r->u64[HI_IDX] = 0; - r->u64[LO_IDX] = carry; + r->VsrD(0) = 0; + r->VsrD(1) = carry; #endif } @@ -2507,17 +2499,17 @@ void helper_vsubecuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) (~a->u128 < ~b->u128) || ((c->u128 & 1) && (a->u128 + ~b->u128 == (__uint128_t)-1)); #else - int carry_in = c->u64[LO_IDX] & 1; + int carry_in = c->VsrD(1) & 1; int carry_out = (avr_qw_cmpu(*a, *b) > 0); if (!carry_out && carry_in) { ppc_avr_t tmp; avr_qw_not(&tmp, *b); avr_qw_add(&tmp, *a, tmp); - carry_out = ((tmp.u64[HI_IDX] == -1ull) && (tmp.u64[LO_IDX] == -1ull)); + carry_out = ((tmp.VsrD(0) == -1ull) && (tmp.VsrD(1) == -1ull)); } - r->u64[HI_IDX] = 0; - r->u64[LO_IDX] = carry_out; + r->VsrD(0) = 0; + r->VsrD(1) = carry_out; #endif } @@ -2615,7 +2607,7 @@ static bool bcd_is_valid(ppc_avr_t *bcd) static int bcd_cmp_zero(ppc_avr_t *bcd) { - if (bcd->u64[HI_IDX] == 0 && (bcd->u64[LO_IDX] >> 4) == 0) { + if (bcd->VsrD(0) == 0 && (bcd->VsrD(1) >> 4) == 0) { return CRF_EQ; } else { return (bcd_get_sgn(bcd) == 1) ? CRF_GT : CRF_LT; @@ -2735,7 +2727,7 @@ uint32_t helper_bcdadd(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t ps) } if (unlikely(invalid)) { - result.u64[HI_IDX] = result.u64[LO_IDX] = -1; + result.VsrD(0) = result.VsrD(1) = -1; cr = CRF_SO; } else if (overflow) { cr |= CRF_SO; @@ -2804,7 +2796,7 @@ uint32_t helper_bcdctn(ppc_avr_t *r, ppc_avr_t *b, uint32_t ps) int invalid = (sgnb == 0); ppc_avr_t ret = { .u64 = { 0, 0 } }; - int ox_flag = (b->u64[HI_IDX] != 0) || ((b->u64[LO_IDX] >> 32) != 0); + int ox_flag = (b->VsrD(0) != 0) || ((b->VsrD(1) >> 32) != 0); for (i = 1; i < 8; i++) { set_national_digit(&ret, 0x30 + bcd_get_digit(b, i, &invalid), i); @@ -2884,7 +2876,7 @@ uint32_t helper_bcdctz(ppc_avr_t *r, ppc_avr_t *b, uint32_t ps) int invalid = (sgnb == 0); ppc_avr_t ret = { .u64 = { 0, 0 } }; - int ox_flag = ((b->u64[HI_IDX] >> 4) != 0); + int ox_flag = ((b->VsrD(0) >> 4) != 0); for (i = 0; i < 16; i++) { digit = bcd_get_digit(b, i + 1, &invalid); @@ -2925,13 +2917,13 @@ uint32_t helper_bcdcfsq(ppc_avr_t *r, ppc_avr_t *b, uint32_t ps) uint64_t hi_value; ppc_avr_t ret = { .u64 = { 0, 0 } }; - if (b->s64[HI_IDX] < 0) { - lo_value = -b->s64[LO_IDX]; - hi_value = ~b->u64[HI_IDX] + !lo_value; + if (b->VsrSD(0) < 0) { + lo_value = -b->VsrSD(1); + hi_value = ~b->VsrD(0) + !lo_value; bcd_put_digit(&ret, 0xD, 0); } else { - lo_value = b->u64[LO_IDX]; - hi_value = b->u64[HI_IDX]; + lo_value = b->VsrD(1); + hi_value = b->VsrD(0); bcd_put_digit(&ret, bcd_preferred_sgn(0, ps), 0); } @@ -2979,11 +2971,11 @@ uint32_t helper_bcdctsq(ppc_avr_t *r, ppc_avr_t *b, uint32_t ps) } if (sgnb == -1) { - r->s64[LO_IDX] = -lo_value; - r->s64[HI_IDX] = ~hi_value + !r->s64[LO_IDX]; + r->VsrSD(1) = -lo_value; + r->VsrSD(0) = ~hi_value + !r->VsrSD(1); } else { - r->s64[LO_IDX] = lo_value; - r->s64[HI_IDX] = hi_value; + r->VsrSD(1) = lo_value; + r->VsrSD(0) = hi_value; } cr = bcd_cmp_zero(b); @@ -3043,7 +3035,7 @@ uint32_t helper_bcds(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t ps) bool ox_flag = false; int sgnb = bcd_get_sgn(b); ppc_avr_t ret = *b; - ret.u64[LO_IDX] &= ~0xf; + ret.VsrD(1) &= ~0xf; if (bcd_is_valid(b) == false) { return CRF_SO; @@ -3056,9 +3048,9 @@ uint32_t helper_bcds(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t ps) } if (i > 0) { - ulshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], i * 4, &ox_flag); + ulshift(&ret.VsrD(1), &ret.VsrD(0), i * 4, &ox_flag); } else { - urshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], -i * 4); + urshift(&ret.VsrD(1), &ret.VsrD(0), -i * 4); } bcd_put_digit(&ret, bcd_preferred_sgn(sgnb, ps), 0); @@ -3095,13 +3087,13 @@ uint32_t helper_bcdus(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t ps) #endif if (i >= 32) { ox_flag = true; - ret.u64[LO_IDX] = ret.u64[HI_IDX] = 0; + ret.VsrD(1) = ret.VsrD(0) = 0; } else if (i <= -32) { - ret.u64[LO_IDX] = ret.u64[HI_IDX] = 0; + ret.VsrD(1) = ret.VsrD(0) = 0; } else if (i > 0) { - ulshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], i * 4, &ox_flag); + ulshift(&ret.VsrD(1), &ret.VsrD(0), i * 4, &ox_flag); } else { - urshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], -i * 4); + urshift(&ret.VsrD(1), &ret.VsrD(0), -i * 4); } *r = ret; @@ -3121,7 +3113,7 @@ uint32_t helper_bcdsr(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t ps) bool ox_flag = false; int sgnb = bcd_get_sgn(b); ppc_avr_t ret = *b; - ret.u64[LO_IDX] &= ~0xf; + ret.VsrD(1) &= ~0xf; #if defined(HOST_WORDS_BIGENDIAN) int i = a->s8[7]; @@ -3142,9 +3134,9 @@ uint32_t helper_bcdsr(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t ps) } if (i > 0) { - ulshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], i * 4, &ox_flag); + ulshift(&ret.VsrD(1), &ret.VsrD(0), i * 4, &ox_flag); } else { - urshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], -i * 4); + urshift(&ret.VsrD(1), &ret.VsrD(0), -i * 4); if (bcd_get_digit(&ret, 0, &invalid) >= 5) { bcd_add_mag(&ret, &ret, &bcd_one, &invalid, &unused); @@ -3178,19 +3170,19 @@ uint32_t helper_bcdtrunc(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t ps) if (i > 16 && i < 32) { mask = (uint64_t)-1 >> (128 - i * 4); - if (ret.u64[HI_IDX] & ~mask) { + if (ret.VsrD(0) & ~mask) { ox_flag = CRF_SO; } - ret.u64[HI_IDX] &= mask; + ret.VsrD(0) &= mask; } else if (i >= 0 && i <= 16) { mask = (uint64_t)-1 >> (64 - i * 4); - if (ret.u64[HI_IDX] || (ret.u64[LO_IDX] & ~mask)) { + if (ret.VsrD(0) || (ret.VsrD(1) & ~mask)) { ox_flag = CRF_SO; } - ret.u64[LO_IDX] &= mask; - ret.u64[HI_IDX] = 0; + ret.VsrD(1) &= mask; + ret.VsrD(0) = 0; } bcd_put_digit(&ret, bcd_preferred_sgn(bcd_get_sgn(b), ps), 0); *r = ret; @@ -3221,28 +3213,28 @@ uint32_t helper_bcdutrunc(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t ps) #endif if (i > 16 && i < 33) { mask = (uint64_t)-1 >> (128 - i * 4); - if (ret.u64[HI_IDX] & ~mask) { + if (ret.VsrD(0) & ~mask) { ox_flag = CRF_SO; } - ret.u64[HI_IDX] &= mask; + ret.VsrD(0) &= mask; } else if (i > 0 && i <= 16) { mask = (uint64_t)-1 >> (64 - i * 4); - if (ret.u64[HI_IDX] || (ret.u64[LO_IDX] & ~mask)) { + if (ret.VsrD(0) || (ret.VsrD(1) & ~mask)) { ox_flag = CRF_SO; } - ret.u64[LO_IDX] &= mask; - ret.u64[HI_IDX] = 0; + ret.VsrD(1) &= mask; + ret.VsrD(0) = 0; } else if (i == 0) { - if (ret.u64[HI_IDX] || ret.u64[LO_IDX]) { + if (ret.VsrD(0) || ret.VsrD(1)) { ox_flag = CRF_SO; } - ret.u64[HI_IDX] = ret.u64[LO_IDX] = 0; + ret.VsrD(0) = ret.VsrD(1) = 0; } *r = ret; - if (r->u64[HI_IDX] == 0 && r->u64[LO_IDX] == 0) { + if (r->VsrD(0) == 0 && r->VsrD(1) == 0) { return ox_flag | CRF_EQ; } @@ -3414,8 +3406,6 @@ void helper_vpermxor(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) } #undef VECTOR_FOR_INORDER_I -#undef HI_IDX -#undef LO_IDX /*****************************************************************************/ /* SPE extension helpers */ From 730d2ca3f0a79cf598b1142c94c83876561594d8 Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Wed, 30 Jan 2019 20:36:35 +0000 Subject: [PATCH 30/37] target/ppc: eliminate use of EL_IDX macros from int_helper.c These macros can be eliminated by instead using the relavant Vsr* macros in the few locations where they appear. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson Signed-off-by: David Gibson --- target/ppc/int_helper.c | 66 +++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 39 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index 7a9c02d4bb..355b6630a2 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -3306,12 +3306,7 @@ void helper_vncipherlast(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) *r = result; } -#define ROTRu32(v, n) (((v) >> (n)) | ((v) << (32-n))) -#if defined(HOST_WORDS_BIGENDIAN) -#define EL_IDX(i) (i) -#else -#define EL_IDX(i) (3 - (i)) -#endif +#define ROTRu32(v, n) (((v) >> (n)) | ((v) << (32 - n))) void helper_vshasigmaw(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) { @@ -3319,40 +3314,34 @@ void helper_vshasigmaw(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) int six = st_six & 0xF; int i; - VECTOR_FOR_INORDER_I(i, u32) { + for (i = 0; i < ARRAY_SIZE(r->u32); i++) { if (st == 0) { if ((six & (0x8 >> i)) == 0) { - r->u32[EL_IDX(i)] = ROTRu32(a->u32[EL_IDX(i)], 7) ^ - ROTRu32(a->u32[EL_IDX(i)], 18) ^ - (a->u32[EL_IDX(i)] >> 3); + r->VsrW(i) = ROTRu32(a->VsrW(i), 7) ^ + ROTRu32(a->VsrW(i), 18) ^ + (a->VsrW(i) >> 3); } else { /* six.bit[i] == 1 */ - r->u32[EL_IDX(i)] = ROTRu32(a->u32[EL_IDX(i)], 17) ^ - ROTRu32(a->u32[EL_IDX(i)], 19) ^ - (a->u32[EL_IDX(i)] >> 10); + r->VsrW(i) = ROTRu32(a->VsrW(i), 17) ^ + ROTRu32(a->VsrW(i), 19) ^ + (a->VsrW(i) >> 10); } } else { /* st == 1 */ if ((six & (0x8 >> i)) == 0) { - r->u32[EL_IDX(i)] = ROTRu32(a->u32[EL_IDX(i)], 2) ^ - ROTRu32(a->u32[EL_IDX(i)], 13) ^ - ROTRu32(a->u32[EL_IDX(i)], 22); + r->VsrW(i) = ROTRu32(a->VsrW(i), 2) ^ + ROTRu32(a->VsrW(i), 13) ^ + ROTRu32(a->VsrW(i), 22); } else { /* six.bit[i] == 1 */ - r->u32[EL_IDX(i)] = ROTRu32(a->u32[EL_IDX(i)], 6) ^ - ROTRu32(a->u32[EL_IDX(i)], 11) ^ - ROTRu32(a->u32[EL_IDX(i)], 25); + r->VsrW(i) = ROTRu32(a->VsrW(i), 6) ^ + ROTRu32(a->VsrW(i), 11) ^ + ROTRu32(a->VsrW(i), 25); } } } } #undef ROTRu32 -#undef EL_IDX #define ROTRu64(v, n) (((v) >> (n)) | ((v) << (64-n))) -#if defined(HOST_WORDS_BIGENDIAN) -#define EL_IDX(i) (i) -#else -#define EL_IDX(i) (1 - (i)) -#endif void helper_vshasigmad(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) { @@ -3360,33 +3349,32 @@ void helper_vshasigmad(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) int six = st_six & 0xF; int i; - VECTOR_FOR_INORDER_I(i, u64) { + for (i = 0; i < ARRAY_SIZE(r->u64); i++) { if (st == 0) { if ((six & (0x8 >> (2*i))) == 0) { - r->u64[EL_IDX(i)] = ROTRu64(a->u64[EL_IDX(i)], 1) ^ - ROTRu64(a->u64[EL_IDX(i)], 8) ^ - (a->u64[EL_IDX(i)] >> 7); + r->VsrD(i) = ROTRu64(a->VsrD(i), 1) ^ + ROTRu64(a->VsrD(i), 8) ^ + (a->VsrD(i) >> 7); } else { /* six.bit[2*i] == 1 */ - r->u64[EL_IDX(i)] = ROTRu64(a->u64[EL_IDX(i)], 19) ^ - ROTRu64(a->u64[EL_IDX(i)], 61) ^ - (a->u64[EL_IDX(i)] >> 6); + r->VsrD(i) = ROTRu64(a->VsrD(i), 19) ^ + ROTRu64(a->VsrD(i), 61) ^ + (a->VsrD(i) >> 6); } } else { /* st == 1 */ if ((six & (0x8 >> (2*i))) == 0) { - r->u64[EL_IDX(i)] = ROTRu64(a->u64[EL_IDX(i)], 28) ^ - ROTRu64(a->u64[EL_IDX(i)], 34) ^ - ROTRu64(a->u64[EL_IDX(i)], 39); + r->VsrD(i) = ROTRu64(a->VsrD(i), 28) ^ + ROTRu64(a->VsrD(i), 34) ^ + ROTRu64(a->VsrD(i), 39); } else { /* six.bit[2*i] == 1 */ - r->u64[EL_IDX(i)] = ROTRu64(a->u64[EL_IDX(i)], 14) ^ - ROTRu64(a->u64[EL_IDX(i)], 18) ^ - ROTRu64(a->u64[EL_IDX(i)], 41); + r->VsrD(i) = ROTRu64(a->VsrD(i), 14) ^ + ROTRu64(a->VsrD(i), 18) ^ + ROTRu64(a->VsrD(i), 41); } } } } #undef ROTRu64 -#undef EL_IDX void helper_vpermxor(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) { From 634c583526ffcd3db8753d4684c5e0a51e74cbbf Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Wed, 30 Jan 2019 20:36:36 +0000 Subject: [PATCH 31/37] target/ppc: simplify VEXT_SIGNED macro in int_helper.c As pointed out by Richard: it does not need the mask argument, nor does it need the recast argument. The masking is implied by the cast argument, and the recast is implied by the assignment. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson Signed-off-by: David Gibson --- target/ppc/int_helper.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index 355b6630a2..ffc9cbc4ed 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -2024,19 +2024,19 @@ void helper_xxinsertw(CPUPPCState *env, target_ulong xtn, putVSR(xtn, &xt, env); } -#define VEXT_SIGNED(name, element, mask, cast, recast) \ +#define VEXT_SIGNED(name, element, cast) \ void helper_##name(ppc_avr_t *r, ppc_avr_t *b) \ { \ int i; \ VECTOR_FOR_INORDER_I(i, element) { \ - r->element[i] = (recast)((cast)(b->element[i] & mask)); \ + r->element[i] = (cast)b->element[i]; \ } \ } -VEXT_SIGNED(vextsb2w, s32, UINT8_MAX, int8_t, int32_t) -VEXT_SIGNED(vextsb2d, s64, UINT8_MAX, int8_t, int64_t) -VEXT_SIGNED(vextsh2w, s32, UINT16_MAX, int16_t, int32_t) -VEXT_SIGNED(vextsh2d, s64, UINT16_MAX, int16_t, int64_t) -VEXT_SIGNED(vextsw2d, s64, UINT32_MAX, int32_t, int64_t) +VEXT_SIGNED(vextsb2w, s32, int8_t) +VEXT_SIGNED(vextsb2d, s64, int8_t) +VEXT_SIGNED(vextsh2w, s32, int16_t) +VEXT_SIGNED(vextsh2d, s64, int16_t) +VEXT_SIGNED(vextsw2d, s64, int32_t) #undef VEXT_SIGNED #define VNEG(name, element) \ From 0ef83bf29e95bf4ec7ad22ea66153c331e14a099 Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Wed, 30 Jan 2019 20:36:37 +0000 Subject: [PATCH 32/37] target/ppc: remove ROTRu32 and ROTRu64 macros from int_helper.c Richard points out that these macros suffer from a -fsanitize=shift bug in that they improperly handle n == 0 turning it into a shift by 32/64 respectively. Replace them with QEMU's existing ror32() and ror64() functions instead. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson Signed-off-by: David Gibson --- target/ppc/int_helper.c | 48 +++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index ffc9cbc4ed..916d10c25b 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -3306,8 +3306,6 @@ void helper_vncipherlast(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) *r = result; } -#define ROTRu32(v, n) (((v) >> (n)) | ((v) << (32 - n))) - void helper_vshasigmaw(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) { int st = (st_six & 0x10) != 0; @@ -3317,32 +3315,28 @@ void helper_vshasigmaw(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) for (i = 0; i < ARRAY_SIZE(r->u32); i++) { if (st == 0) { if ((six & (0x8 >> i)) == 0) { - r->VsrW(i) = ROTRu32(a->VsrW(i), 7) ^ - ROTRu32(a->VsrW(i), 18) ^ + r->VsrW(i) = ror32(a->VsrW(i), 7) ^ + ror32(a->VsrW(i), 18) ^ (a->VsrW(i) >> 3); } else { /* six.bit[i] == 1 */ - r->VsrW(i) = ROTRu32(a->VsrW(i), 17) ^ - ROTRu32(a->VsrW(i), 19) ^ + r->VsrW(i) = ror32(a->VsrW(i), 17) ^ + ror32(a->VsrW(i), 19) ^ (a->VsrW(i) >> 10); } } else { /* st == 1 */ if ((six & (0x8 >> i)) == 0) { - r->VsrW(i) = ROTRu32(a->VsrW(i), 2) ^ - ROTRu32(a->VsrW(i), 13) ^ - ROTRu32(a->VsrW(i), 22); + r->VsrW(i) = ror32(a->VsrW(i), 2) ^ + ror32(a->VsrW(i), 13) ^ + ror32(a->VsrW(i), 22); } else { /* six.bit[i] == 1 */ - r->VsrW(i) = ROTRu32(a->VsrW(i), 6) ^ - ROTRu32(a->VsrW(i), 11) ^ - ROTRu32(a->VsrW(i), 25); + r->VsrW(i) = ror32(a->VsrW(i), 6) ^ + ror32(a->VsrW(i), 11) ^ + ror32(a->VsrW(i), 25); } } } } -#undef ROTRu32 - -#define ROTRu64(v, n) (((v) >> (n)) | ((v) << (64-n))) - void helper_vshasigmad(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) { int st = (st_six & 0x10) != 0; @@ -3352,30 +3346,28 @@ void helper_vshasigmad(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) for (i = 0; i < ARRAY_SIZE(r->u64); i++) { if (st == 0) { if ((six & (0x8 >> (2*i))) == 0) { - r->VsrD(i) = ROTRu64(a->VsrD(i), 1) ^ - ROTRu64(a->VsrD(i), 8) ^ + r->VsrD(i) = ror64(a->VsrD(i), 1) ^ + ror64(a->VsrD(i), 8) ^ (a->VsrD(i) >> 7); } else { /* six.bit[2*i] == 1 */ - r->VsrD(i) = ROTRu64(a->VsrD(i), 19) ^ - ROTRu64(a->VsrD(i), 61) ^ + r->VsrD(i) = ror64(a->VsrD(i), 19) ^ + ror64(a->VsrD(i), 61) ^ (a->VsrD(i) >> 6); } } else { /* st == 1 */ if ((six & (0x8 >> (2*i))) == 0) { - r->VsrD(i) = ROTRu64(a->VsrD(i), 28) ^ - ROTRu64(a->VsrD(i), 34) ^ - ROTRu64(a->VsrD(i), 39); + r->VsrD(i) = ror64(a->VsrD(i), 28) ^ + ror64(a->VsrD(i), 34) ^ + ror64(a->VsrD(i), 39); } else { /* six.bit[2*i] == 1 */ - r->VsrD(i) = ROTRu64(a->VsrD(i), 14) ^ - ROTRu64(a->VsrD(i), 18) ^ - ROTRu64(a->VsrD(i), 41); + r->VsrD(i) = ror64(a->VsrD(i), 14) ^ + ror64(a->VsrD(i), 18) ^ + ror64(a->VsrD(i), 41); } } } } -#undef ROTRu64 - void helper_vpermxor(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) { ppc_avr_t result; From 60594fea298d1e014700cc63a92ee43258c8c504 Mon Sep 17 00:00:00 2001 From: Mark Cave-Ayland Date: Wed, 30 Jan 2019 20:36:38 +0000 Subject: [PATCH 33/37] target/ppc: remove various HOST_WORDS_BIGENDIAN hacks in int_helper.c Following on from the previous work, there are numerous endian-related hacks in int_helper.c that can now be replaced with Vsr* macros. There are also a few places where the VECTOR_FOR_INORDER_I macro can be replaced with a normal iterator since the processing order is irrelevant. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson Signed-off-by: David Gibson --- target/ppc/int_helper.c | 155 ++++++++++++---------------------------- 1 file changed, 45 insertions(+), 110 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index 916d10c25b..8efc283388 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -443,8 +443,8 @@ void helper_lvsl(ppc_avr_t *r, target_ulong sh) { int i, j = (sh & 0xf); - VECTOR_FOR_INORDER_I(i, u8) { - r->u8[i] = j++; + for (i = 0; i < ARRAY_SIZE(r->u8); i++) { + r->VsrB(i) = j++; } } @@ -452,18 +452,14 @@ void helper_lvsr(ppc_avr_t *r, target_ulong sh) { int i, j = 0x10 - (sh & 0xf); - VECTOR_FOR_INORDER_I(i, u8) { - r->u8[i] = j++; + for (i = 0; i < ARRAY_SIZE(r->u8); i++) { + r->VsrB(i) = j++; } } void helper_mtvscr(CPUPPCState *env, ppc_avr_t *r) { -#if defined(HOST_WORDS_BIGENDIAN) - env->vscr = r->u32[3]; -#else - env->vscr = r->u32[0]; -#endif + env->vscr = r->VsrW(3); set_flush_to_zero(vscr_nj, &env->vec_status); } @@ -870,8 +866,8 @@ target_ulong helper_vclzlsbb(ppc_avr_t *r) { target_ulong count = 0; int i; - VECTOR_FOR_INORDER_I(i, u8) { - if (r->u8[i] & 0x01) { + for (i = 0; i < ARRAY_SIZE(r->u8); i++) { + if (r->VsrB(i) & 0x01) { break; } count++; @@ -883,12 +879,8 @@ target_ulong helper_vctzlsbb(ppc_avr_t *r) { target_ulong count = 0; int i; -#if defined(HOST_WORDS_BIGENDIAN) for (i = ARRAY_SIZE(r->u8) - 1; i >= 0; i--) { -#else - for (i = 0; i < ARRAY_SIZE(r->u8); i++) { -#endif - if (r->u8[i] & 0x01) { + if (r->VsrB(i) & 0x01) { break; } count++; @@ -1137,18 +1129,14 @@ void helper_vperm(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t result; int i; - VECTOR_FOR_INORDER_I(i, u8) { - int s = c->u8[i] & 0x1f; -#if defined(HOST_WORDS_BIGENDIAN) + for (i = 0; i < ARRAY_SIZE(r->u8); i++) { + int s = c->VsrB(i) & 0x1f; int index = s & 0xf; -#else - int index = 15 - (s & 0xf); -#endif if (s & 0x10) { - result.u8[i] = b->u8[index]; + result.VsrB(i) = b->VsrB(index); } else { - result.u8[i] = a->u8[index]; + result.VsrB(i) = a->VsrB(index); } } *r = result; @@ -1160,18 +1148,14 @@ void helper_vpermr(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t result; int i; - VECTOR_FOR_INORDER_I(i, u8) { - int s = c->u8[i] & 0x1f; -#if defined(HOST_WORDS_BIGENDIAN) + for (i = 0; i < ARRAY_SIZE(r->u8); i++) { + int s = c->VsrB(i) & 0x1f; int index = 15 - (s & 0xf); -#else - int index = s & 0xf; -#endif if (s & 0x10) { - result.u8[i] = a->u8[index]; + result.VsrB(i) = a->VsrB(index); } else { - result.u8[i] = b->u8[index]; + result.VsrB(i) = b->VsrB(index); } } *r = result; @@ -1868,25 +1852,14 @@ void helper_vsldoi(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t shift) int i; ppc_avr_t result; -#if defined(HOST_WORDS_BIGENDIAN) for (i = 0; i < ARRAY_SIZE(r->u8); i++) { int index = sh + i; if (index > 0xf) { - result.u8[i] = b->u8[index - 0x10]; + result.VsrB(i) = b->VsrB(index - 0x10); } else { - result.u8[i] = a->u8[index]; + result.VsrB(i) = a->VsrB(index); } } -#else - for (i = 0; i < ARRAY_SIZE(r->u8); i++) { - int index = (16 - sh) + i; - if (index > 0xf) { - result.u8[i] = a->u8[index - 0x10]; - } else { - result.u8[i] = b->u8[index]; - } - } -#endif *r = result; } @@ -1905,25 +1878,20 @@ void helper_vslo(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) /* Experimental testing shows that hardware masks the immediate. */ #define _SPLAT_MASKED(element) (splat & (ARRAY_SIZE(r->element) - 1)) -#if defined(HOST_WORDS_BIGENDIAN) #define SPLAT_ELEMENT(element) _SPLAT_MASKED(element) -#else -#define SPLAT_ELEMENT(element) \ - (ARRAY_SIZE(r->element) - 1 - _SPLAT_MASKED(element)) -#endif -#define VSPLT(suffix, element) \ +#define VSPLT(suffix, element, access) \ void helper_vsplt##suffix(ppc_avr_t *r, ppc_avr_t *b, uint32_t splat) \ { \ - uint32_t s = b->element[SPLAT_ELEMENT(element)]; \ + uint32_t s = b->access(SPLAT_ELEMENT(element)); \ int i; \ \ for (i = 0; i < ARRAY_SIZE(r->element); i++) { \ - r->element[i] = s; \ + r->access(i) = s; \ } \ } -VSPLT(b, u8) -VSPLT(h, u16) -VSPLT(w, u32) +VSPLT(b, u8, VsrB) +VSPLT(h, u16, VsrH) +VSPLT(w, u32, VsrW) #undef VSPLT #undef SPLAT_ELEMENT #undef _SPLAT_MASKED @@ -1984,17 +1952,10 @@ void helper_xxextractuw(CPUPPCState *env, target_ulong xtn, getVSR(xbn, &xb, env); memset(&xt, 0, sizeof(xt)); -#if defined(HOST_WORDS_BIGENDIAN) ext_index = index; for (i = 0; i < es; i++, ext_index++) { - xt.u8[8 - es + i] = xb.u8[ext_index % 16]; + xt.VsrB(8 - es + i) = xb.VsrB(ext_index % 16); } -#else - ext_index = 15 - index; - for (i = es - 1; i >= 0; i--, ext_index--) { - xt.u8[8 + i] = xb.u8[ext_index % 16]; - } -#endif putVSR(xtn, &xt, env); } @@ -2009,17 +1970,10 @@ void helper_xxinsertw(CPUPPCState *env, target_ulong xtn, getVSR(xbn, &xb, env); getVSR(xtn, &xt, env); -#if defined(HOST_WORDS_BIGENDIAN) ins_index = index; for (i = 0; i < es && ins_index < 16; i++, ins_index++) { - xt.u8[ins_index] = xb.u8[8 - es + i]; + xt.VsrB(ins_index) = xb.VsrB(8 - es + i); } -#else - ins_index = 15 - index; - for (i = es - 1; i >= 0 && ins_index >= 0; i--, ins_index--) { - xt.u8[ins_index] = xb.u8[8 + i]; - } -#endif putVSR(xtn, &xt, env); } @@ -2028,7 +1982,7 @@ void helper_xxinsertw(CPUPPCState *env, target_ulong xtn, void helper_##name(ppc_avr_t *r, ppc_avr_t *b) \ { \ int i; \ - VECTOR_FOR_INORDER_I(i, element) { \ + for (i = 0; i < ARRAY_SIZE(r->element); i++) { \ r->element[i] = (cast)b->element[i]; \ } \ } @@ -2043,7 +1997,7 @@ VEXT_SIGNED(vextsw2d, s64, int32_t) void helper_##name(ppc_avr_t *r, ppc_avr_t *b) \ { \ int i; \ - VECTOR_FOR_INORDER_I(i, element) { \ + for (i = 0; i < ARRAY_SIZE(r->element); i++) { \ r->element[i] = -b->element[i]; \ } \ } @@ -2115,17 +2069,13 @@ void helper_vsumsws(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) ppc_avr_t result; int sat = 0; -#if defined(HOST_WORDS_BIGENDIAN) - upper = ARRAY_SIZE(r->s32)-1; -#else - upper = 0; -#endif - t = (int64_t)b->s32[upper]; + upper = ARRAY_SIZE(r->s32) - 1; + t = (int64_t)b->VsrSW(upper); for (i = 0; i < ARRAY_SIZE(r->s32); i++) { - t += a->s32[i]; - result.s32[i] = 0; + t += a->VsrSW(i); + result.VsrSW(i) = 0; } - result.s32[upper] = cvtsdsw(t, &sat); + result.VsrSW(upper) = cvtsdsw(t, &sat); *r = result; if (sat) { @@ -2139,19 +2089,15 @@ void helper_vsum2sws(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) ppc_avr_t result; int sat = 0; -#if defined(HOST_WORDS_BIGENDIAN) upper = 1; -#else - upper = 0; -#endif for (i = 0; i < ARRAY_SIZE(r->u64); i++) { - int64_t t = (int64_t)b->s32[upper + i * 2]; + int64_t t = (int64_t)b->VsrSW(upper + i * 2); - result.u64[i] = 0; + result.VsrW(i) = 0; for (j = 0; j < ARRAY_SIZE(r->u64); j++) { - t += a->s32[2 * i + j]; + t += a->VsrSW(2 * i + j); } - result.s32[upper + i * 2] = cvtsdsw(t, &sat); + result.VsrSW(upper + i * 2) = cvtsdsw(t, &sat); } *r = result; @@ -2276,7 +2222,7 @@ VUPK(lsw, s64, s32, UPKLO) { \ int i; \ \ - VECTOR_FOR_INORDER_I(i, element) { \ + for (i = 0; i < ARRAY_SIZE(r->element); i++) { \ r->element[i] = name(b->element[i]); \ } \ } @@ -2616,20 +2562,12 @@ static int bcd_cmp_zero(ppc_avr_t *bcd) static uint16_t get_national_digit(ppc_avr_t *reg, int n) { -#if defined(HOST_WORDS_BIGENDIAN) - return reg->u16[7 - n]; -#else - return reg->u16[n]; -#endif + return reg->VsrH(7 - n); } static void set_national_digit(ppc_avr_t *reg, uint8_t val, int n) { -#if defined(HOST_WORDS_BIGENDIAN) - reg->u16[7 - n] = val; -#else - reg->u16[n] = val; -#endif + reg->VsrH(7 - n) = val; } static int bcd_cmp_mag(ppc_avr_t *a, ppc_avr_t *b) @@ -3373,14 +3311,11 @@ void helper_vpermxor(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) ppc_avr_t result; int i; - VECTOR_FOR_INORDER_I(i, u8) { - int indexA = c->u8[i] >> 4; - int indexB = c->u8[i] & 0xF; -#if defined(HOST_WORDS_BIGENDIAN) - result.u8[i] = a->u8[indexA] ^ b->u8[indexB]; -#else - result.u8[i] = a->u8[15-indexA] ^ b->u8[15-indexB]; -#endif + for (i = 0; i < ARRAY_SIZE(r->u8); i++) { + int indexA = c->VsrB(i) >> 4; + int indexB = c->VsrB(i) & 0xF; + + result.VsrB(i) = a->VsrB(indexA) ^ b->VsrB(indexB); } *r = result; } From 382b6f22258f3e68c6a4226790eae96e5527e791 Mon Sep 17 00:00:00 2001 From: Alexey Kardashevskiy Date: Fri, 1 Feb 2019 11:56:22 +1100 Subject: [PATCH 34/37] spapr_pci: Fix endianness in assigned-addresses property reg->phys_hi and assigned->phys_hi are big endian but we do an extra byteswap anyway when copying reg->phys_hi to assigned->phys_hi. To make things slightly more messy, we also add a relocatable bit (b_n()) although in the right endianness. This fixes endianness of assigned->phys_hi. This is unlikely to produce any visible difference though as we should end up there only in the case of PCI hotplug and even then I am not sure if (d->io_regions[i].addr == PCI_BAR_UNMAPPED) == true. Signed-off-by: Alexey Kardashevskiy Signed-off-by: David Gibson --- hw/ppc/spapr_pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index 5cdc98513d..c99721cde8 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -964,7 +964,7 @@ static void populate_resource_props(PCIDevice *d, ResourceProps *rp) } assigned = &rp->assigned[assigned_idx++]; - assigned->phys_hi = cpu_to_be32(reg->phys_hi | b_n(1)); + assigned->phys_hi = cpu_to_be32(be32_to_cpu(reg->phys_hi) | b_n(1)); assigned->phys_mid = cpu_to_be32(d->io_regions[i].addr >> 32); assigned->phys_lo = cpu_to_be32(d->io_regions[i].addr); assigned->size_hi = reg->size_hi; From eac57b405afabcdf6aea82ef5f4cf44cd45c04cb Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 30 Jan 2019 17:39:42 +0100 Subject: [PATCH 35/37] hw/ppc: Don't include m48t59.h if it is not necessary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These files don't use anything from m48t59.h, so no need to include this header here. Signed-off-by: Thomas Huth Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: David Gibson --- hw/ppc/mac_newworld.c | 1 - hw/ppc/mac_oldworld.c | 1 - hw/ppc/ppc.c | 2 -- hw/ppc/ppc_booke.c | 1 - 4 files changed, 5 deletions(-) diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index bb19eaba36..f1c8400efd 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -53,7 +53,6 @@ #include "hw/ppc/mac.h" #include "hw/input/adb.h" #include "hw/ppc/mac_dbdma.h" -#include "hw/timer/m48t59.h" #include "hw/pci/pci.h" #include "net/net.h" #include "sysemu/sysemu.h" diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 817f70e52c..98d531d114 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -30,7 +30,6 @@ #include "hw/ppc/ppc.h" #include "mac.h" #include "hw/input/adb.h" -#include "hw/timer/m48t59.h" #include "sysemu/sysemu.h" #include "net/net.h" #include "hw/isa/isa.h" diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index 98b409f83d..cffdc3914a 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -30,10 +30,8 @@ #include "qemu/timer.h" #include "sysemu/sysemu.h" #include "sysemu/cpus.h" -#include "hw/timer/m48t59.h" #include "qemu/log.h" #include "qemu/error-report.h" -#include "hw/loader.h" #include "sysemu/kvm.h" #include "kvm_ppc.h" #include "trace.h" diff --git a/hw/ppc/ppc_booke.c b/hw/ppc/ppc_booke.c index 23bcf1b138..4f11e00a17 100644 --- a/hw/ppc/ppc_booke.c +++ b/hw/ppc/ppc_booke.c @@ -28,7 +28,6 @@ #include "hw/ppc/ppc.h" #include "qemu/timer.h" #include "sysemu/sysemu.h" -#include "hw/timer/m48t59.h" #include "qemu/log.h" #include "hw/loader.h" #include "kvm_ppc.h" From 2044c3e7116eeac0449dcb4a4130cc8f8b9310da Mon Sep 17 00:00:00 2001 From: Murilo Opsfelder Araujo Date: Wed, 30 Jan 2019 21:36:04 -0200 Subject: [PATCH 36/37] mmap-alloc: unfold qemu_ram_mmap() Unfold parts of qemu_ram_mmap() for the sake of understanding, moving declarations to the top, and keeping architecture-specifics in the ifdef-else blocks. No changes in the function behaviour. Give ptr and ptr1 meaningful names: ptr -> guardptr : pointer to the PROT_NONE guard region ptr1 -> ptr : pointer to the mapped memory returned to caller Signed-off-by: Murilo Opsfelder Araujo Reviewed-by: Greg Kurz Signed-off-by: David Gibson --- util/mmap-alloc.c | 53 ++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c index fd329eccd8..f71ea038c8 100644 --- a/util/mmap-alloc.c +++ b/util/mmap-alloc.c @@ -77,11 +77,19 @@ size_t qemu_mempath_getpagesize(const char *mem_path) void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) { + int flags; + int guardfd; + size_t offset; + size_t total; + void *guardptr; + void *ptr; + /* * Note: this always allocates at least one extra page of virtual address * space, even if size is already aligned. */ - size_t total = size + align; + total = size + align; + #if defined(__powerpc64__) && defined(__linux__) /* On ppc64 mappings in the same segment (aka slice) must share the same * page size. Since we will be re-allocating part of this segment @@ -91,16 +99,22 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) * We do this unless we are using the system page size, in which case * anonymous memory is OK. */ - int anonfd = fd == -1 || qemu_fd_getpagesize(fd) == getpagesize() ? -1 : fd; - int flags = anonfd == -1 ? MAP_ANONYMOUS : MAP_NORESERVE; - void *ptr = mmap(0, total, PROT_NONE, flags | MAP_PRIVATE, anonfd, 0); + flags = MAP_PRIVATE; + if (fd == -1 || qemu_fd_getpagesize(fd) == getpagesize()) { + guardfd = -1; + flags |= MAP_ANONYMOUS; + } else { + guardfd = fd; + flags |= MAP_NORESERVE; + } #else - void *ptr = mmap(0, total, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); + guardfd = -1; + flags = MAP_PRIVATE | MAP_ANONYMOUS; #endif - size_t offset; - void *ptr1; - if (ptr == MAP_FAILED) { + guardptr = mmap(0, total, PROT_NONE, flags, guardfd, 0); + + if (guardptr == MAP_FAILED) { return MAP_FAILED; } @@ -108,19 +122,20 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) /* Always align to host page size */ assert(align >= getpagesize()); - offset = QEMU_ALIGN_UP((uintptr_t)ptr, align) - (uintptr_t)ptr; - ptr1 = mmap(ptr + offset, size, PROT_READ | PROT_WRITE, - MAP_FIXED | - (fd == -1 ? MAP_ANONYMOUS : 0) | - (shared ? MAP_SHARED : MAP_PRIVATE), - fd, 0); - if (ptr1 == MAP_FAILED) { - munmap(ptr, total); + flags = MAP_FIXED; + flags |= fd == -1 ? MAP_ANONYMOUS : 0; + flags |= shared ? MAP_SHARED : MAP_PRIVATE; + offset = QEMU_ALIGN_UP((uintptr_t)guardptr, align) - (uintptr_t)guardptr; + + ptr = mmap(guardptr + offset, size, PROT_READ | PROT_WRITE, flags, fd, 0); + + if (ptr == MAP_FAILED) { + munmap(guardptr, total); return MAP_FAILED; } if (offset > 0) { - munmap(ptr, offset); + munmap(guardptr, offset); } /* @@ -129,10 +144,10 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) */ total -= offset; if (total > size + getpagesize()) { - munmap(ptr1 + size + getpagesize(), total - size - getpagesize()); + munmap(ptr + size + getpagesize(), total - size - getpagesize()); } - return ptr1; + return ptr; } void qemu_ram_munmap(void *ptr, size_t size) From 53adb9d43e1abba187387a51f238e878e934c647 Mon Sep 17 00:00:00 2001 From: Murilo Opsfelder Araujo Date: Wed, 30 Jan 2019 21:36:05 -0200 Subject: [PATCH 37/37] mmap-alloc: fix hugetlbfs misaligned length in ppc64 The commit 7197fb4058bcb68986bae2bb2c04d6370f3e7218 ("util/mmap-alloc: fix hugetlb support on ppc64") fixed Huge TLB mappings on ppc64. However, we still need to consider the underlying huge page size during munmap() because it requires that both address and length be a multiple of the underlying huge page size for Huge TLB mappings. Quote from "Huge page (Huge TLB) mappings" paragraph under NOTES section of the munmap(2) manual: "For munmap(), addr and length must both be a multiple of the underlying huge page size." On ppc64, the munmap() in qemu_ram_munmap() does not work for Huge TLB mappings because the mapped segment can be aligned with the underlying huge page size, not aligned with the native system page size, as returned by getpagesize(). This has the side effect of not releasing huge pages back to the pool after a hugetlbfs file-backed memory device is hot-unplugged. This patch fixes the situation in qemu_ram_mmap() and qemu_ram_munmap() by considering the underlying page size on ppc64. After this patch, memory hot-unplug releases huge pages back to the pool. Fixes: 7197fb4058bcb68986bae2bb2c04d6370f3e7218 Signed-off-by: Murilo Opsfelder Araujo Reviewed-by: Greg Kurz Signed-off-by: David Gibson --- exec.c | 4 ++-- include/qemu/mmap-alloc.h | 2 +- util/mmap-alloc.c | 22 ++++++++++++++++------ util/oslib-posix.c | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/exec.c b/exec.c index 25f3938a27..03dd673d36 100644 --- a/exec.c +++ b/exec.c @@ -1873,7 +1873,7 @@ static void *file_ram_alloc(RAMBlock *block, if (mem_prealloc) { os_mem_prealloc(fd, area, memory, smp_cpus, errp); if (errp && *errp) { - qemu_ram_munmap(area, memory); + qemu_ram_munmap(fd, area, memory); return NULL; } } @@ -2394,7 +2394,7 @@ static void reclaim_ramblock(RAMBlock *block) xen_invalidate_map_cache_entry(block->host); #ifndef _WIN32 } else if (block->fd >= 0) { - qemu_ram_munmap(block->host, block->max_length); + qemu_ram_munmap(block->fd, block->host, block->max_length); close(block->fd); #endif } else { diff --git a/include/qemu/mmap-alloc.h b/include/qemu/mmap-alloc.h index 50385e3f81..ef04f0ed5b 100644 --- a/include/qemu/mmap-alloc.h +++ b/include/qemu/mmap-alloc.h @@ -9,6 +9,6 @@ size_t qemu_mempath_getpagesize(const char *mem_path); void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared); -void qemu_ram_munmap(void *ptr, size_t size); +void qemu_ram_munmap(int fd, void *ptr, size_t size); #endif diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c index f71ea038c8..8565885420 100644 --- a/util/mmap-alloc.c +++ b/util/mmap-alloc.c @@ -80,6 +80,7 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) int flags; int guardfd; size_t offset; + size_t pagesize; size_t total; void *guardptr; void *ptr; @@ -100,7 +101,8 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) * anonymous memory is OK. */ flags = MAP_PRIVATE; - if (fd == -1 || qemu_fd_getpagesize(fd) == getpagesize()) { + pagesize = qemu_fd_getpagesize(fd); + if (fd == -1 || pagesize == getpagesize()) { guardfd = -1; flags |= MAP_ANONYMOUS; } else { @@ -109,6 +111,7 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) } #else guardfd = -1; + pagesize = getpagesize(); flags = MAP_PRIVATE | MAP_ANONYMOUS; #endif @@ -120,7 +123,7 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) assert(is_power_of_2(align)); /* Always align to host page size */ - assert(align >= getpagesize()); + assert(align >= pagesize); flags = MAP_FIXED; flags |= fd == -1 ? MAP_ANONYMOUS : 0; @@ -143,17 +146,24 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared) * a guard page guarding against potential buffer overflows. */ total -= offset; - if (total > size + getpagesize()) { - munmap(ptr + size + getpagesize(), total - size - getpagesize()); + if (total > size + pagesize) { + munmap(ptr + size + pagesize, total - size - pagesize); } return ptr; } -void qemu_ram_munmap(void *ptr, size_t size) +void qemu_ram_munmap(int fd, void *ptr, size_t size) { + size_t pagesize; + if (ptr) { /* Unmap both the RAM block and the guard page */ - munmap(ptr, size + getpagesize()); +#if defined(__powerpc64__) && defined(__linux__) + pagesize = qemu_fd_getpagesize(fd); +#else + pagesize = getpagesize(); +#endif + munmap(ptr, size + pagesize); } } diff --git a/util/oslib-posix.c b/util/oslib-posix.c index 4ce1ba9ca4..37c5854b9c 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -226,7 +226,7 @@ void qemu_vfree(void *ptr) void qemu_anon_ram_free(void *ptr, size_t size) { trace_qemu_anon_ram_free(ptr, size); - qemu_ram_munmap(ptr, size); + qemu_ram_munmap(-1, ptr, size); } void qemu_set_block(int fd)