From 715610ec1cf60bfe876a4e168395b3bb00cbae23 Mon Sep 17 00:00:00 2001 From: Alexander Winkler Date: Thu, 26 Jul 2018 11:09:40 +0200 Subject: [PATCH] Improve documentation (#28) --- README.md | 109 ++++++++++++------ doc/ifopt.png | Bin 0 -> 100392 bytes doc/mainpage.md | 94 +-------------- doc/manifest.yaml | 4 +- ifopt_core/include/ifopt/bounds.h | 2 - ifopt_core/include/ifopt/composite.h | 29 ++--- ifopt_core/include/ifopt/constraint_set.h | 3 + ifopt_core/include/ifopt/cost_term.h | 7 +- ifopt_core/include/ifopt/problem.h | 49 +++++--- ifopt_core/src/composite.cc | 83 +++++++------ ifopt_core/src/leaves.cc | 22 ++++ ifopt_core/src/problem.cc | 22 ++-- ifopt_core/test/ifopt/test_vars_constr_cost.h | 3 + ifopt_ipopt/include/ifopt/ipopt_adapter.h | 6 - ifopt_snopt/include/ifopt/snopt_adapter.h | 4 - 15 files changed, 212 insertions(+), 225 deletions(-) create mode 100644 doc/ifopt.png diff --git a/README.md b/README.md index 6e2a1f6..76505de 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ### [![Build Status](http://build.ros.org/buildStatus/icon?job=Kdev__ifopt__ubuntu_xenial_amd64)](http://build.ros.org/view/Kdev/job/Kdev__ifopt__ubuntu_xenial_amd64/) -[![Documentation](https://img.shields.io/badge/docs-generated-brightgreen.svg)](http://docs.ros.org/kinetic/api/ifopt/html/) +[![Documentation](https://img.shields.io/badge/docs-generated-brightgreen.svg)](http://docs.ros.org/api/ifopt/html/) [![ROS integration](https://img.shields.io/badge/ROS-integration-blue.svg)](http://wiki.ros.org/ifopt) ![](https://tokei.rs/b1/github/ethz-adrl/ifopt) [![CodeFactor](https://www.codefactor.io/repository/github/ethz-adrl/ifopt/badge)](https://www.codefactor.io/repository/github/ethz-adrl/ifopt) @@ -18,41 +18,47 @@ An example nonlinear optimization problem to solve is defined as: * To see how this problem is formulated, see [*test_vars_constr_cost.h*](ifopt_core/test/ifopt/test_vars_constr_cost.h). * Afterwards the problem can be solved using e.g. Ipopt as shown in [*ex_test_ipopt.cc*](ifopt_ipopt/test/ex_test_ipopt.cc). -* Further example: [towr] - multiple variable- and constraint [sets](https://i.imgur.com/4yhohZF.png) to generate motions for legged robots. +

+ Features • + Install • + Examples • + Develop • + Contribute • + Publications • + Authors +

## Features *Combines* the advantages of [Ipopt] / [Snopt] and [Eigen]: -| [Ipopt] / [Snopt] | + | [Eigen] | -|----------|--------|----| -|:heavy_check_mark: high-quality solvers for nonlinear optimization | | :heavy_check_mark: modern, intuitive formulations of vectors and matrices | -|:x: C++ API inconvenient and error-prone (raw pointers, index management, jacobian construction) | | :heavy_check_mark: highly efficient implementations | -|:x: linking and exporting difficult | | | - -* Solver independent formulation of variables and constraints with Eigen -* Automatic index management by formulating similar variables (or constraints) as independent sets -* Highly efficient due to Eigen sparse matrix formulations -* cmake scripts to easily `find_package(ifopt)` in your project -* [catkin] / [ROS] integration (optional) +[Ipopt] / [Snopt] | [Eigen] +----------|--------- +:heavy_check_mark: high-quality solvers for nonlinear optimization | :heavy_check_mark: modern, intuitive formulations of vectors and matrices +:x: C++ API inconvenient and error-prone (raw pointers, index management, jacobian construction) | :heavy_check_mark: highly efficient implementations +:x: linking and exporting difficult | + +* Solver independent formulation of variables and constraints with Eigen (highly efficient) +* Automatic index management by formulation of [variable- and constraint-sets](http://docs.ros.org/api/ifopt/html/group__ProblemFormulation.html) +* Integration: pure cmake `find_package(ifopt)` or [catkin]/[ROS] (optional) * light-weight (~[2k lines of code](https://i.imgur.com/NCPJsSw.png)) makes it easy to use and extend ## Install -The easiest way to install is through the [ROS binaries](http://wiki.ros.org/ifopt): +The easiest way to install is through the [ROS binaries](http://wiki.ros.org/ifopt) and you're all set! ``` sudo apt-get install ros--ifopt ``` -## Build from source +#### Install dependencies In case you don't use ROS or the binaries don't exist for your distro, you can easily build these packages from source. For this, install the required dependencies [Cmake], [Eigen] and [Ipopt] using ``` sudo apt-get install cmake libeigen3-dev coinor-libipopt-dev ``` -If you want to link to a local installation of [Ipopt] or to [Snopt], see the [doxygen documentation](http://docs.ros.org/kinetic/api/ifopt/html/). +If you want to link to a local installation of [Ipopt] or to [Snopt], see [here](#additional-information). -#### Building with cmake +#### Build with cmake * Install ```bash git clone https://github.com/ethz-adrl/ifopt.git && cd ifopt @@ -72,7 +78,7 @@ If you want to link to a local installation of [Ipopt] or to [Snopt], see the [d target_link_libraries(main PUBLIC ifopt::ifopt_ipopt) ``` -#### Building with catkin +#### Build with catkin * Install: Download [catkin] or [catkin command line tools], then: ```bash cd catkin_ws/src @@ -95,7 +101,8 @@ If you want to link to a local installation of [Ipopt] or to [Snopt], see the [d ``` -## Test +## Examples +#### Unit tests & toy problem Navigate to your build folder in which the `Makefile` resides, which depends on how you built the code: ```bash @@ -120,22 +127,20 @@ Output: 1.0 0.0 ``` -Each set of variables, costs and constraints are formulated by one C++ object -purely through Eigen vectors and matrices and independent from any specific solver. -Although the above [example](ifopt_core/test/ifopt/test_vars_constr_cost.h) adds just one, -multiple sets of variables or constraints can be added to the NLP and ifopt manages -the overall variable vector and jacobian, so each set can be implemented independent of -the others. A more involved problem definition with multiple sets -of variables and constraints, taken from [towr] can be seen in the following: +#### towr +A more involved problem, taken from [towr], with multiple sets of variables and constraints to generate motions for legged robots produces the following: -## Authors -[Alexander W. Winkler](https://awinkler.github.io/) - Initial Work/Maintainer +## Develop +Useful information for developers is given in the doxygen documentation: -This was has been carried out at the following institutions: + * For an overview of how to formulate your problem, start [ProblemFormulation](http://docs.ros.org/api/ifopt/html/group__ProblemFormulation.html). + * A nice graphical overview as UML can be seen [here](http://docs.ros.org/api/ifopt/html/inherits.html). -[](https://www.ethz.ch/en.html "ETH Zurich")         [](http://www.adrl.ethz.ch/doku.php "Agile and Dexterous Robotics Lab")        [](http://www.rsl.ethz.ch/ "Robotic Systems Lab") +## Contribute +We love pull request, whether its interfaces to additional solvers, bug fixes, unit tests or updating the documentation. Please have a look at [CONTRIBUTING.md](CONTRIBUTING.md) for more information. +See here the list of [contributors](https://github.com/ethz-adrl/ifopt/graphs/contributors) who participated in this project. ## Publications @@ -153,16 +158,50 @@ If you use this work, please consider citing as follows: The research project within which this code was developed: * A. W. Winkler, D. Bellicoso, M. Hutter, J. Buchli, [Gait and Trajectory Optimization for Legged Systems through Phase-based End-Effector Parameterization](http://awinkler.me), IEEE Robotics and Automation Letters (RA-L), 2018: -## Contributing -We love pull request, whether its interfaces to additional solvers, bug fixes, unit tests or updating the documentation. Please have a look at [CONTRIBUTING.md](CONTRIBUTING.md) for more information. -See here the list of [contributors](https://github.com/ethz-adrl/ifopt/graphs/contributors) who participated in this project. +## Authors +[Alexander W. Winkler](https://awinkler.github.io/) - Initial Work/Maintainer -## Bugs & Feature Requests -To report bugs, request features or ask questions, please have a look at [CONTRIBUTING.md](CONTRIBUTING.md). +This was has been carried out at the following institutions: + +[](https://www.ethz.ch/en.html "ETH Zurich")         [](http://www.adrl.ethz.ch/doku.php "Agile and Dexterous Robotics Lab")        [](http://www.rsl.ethz.ch/ "Robotic Systems Lab") +## Additional Information +#### Linking to custom Ipopt or Snopt +If you are building from source and want to use a locally installed version of [Ipopt] add the path to your +Ipopt build folder to your `~/.bashrc`, e.g. +```bash +export IPOPT_DIR=/home/your_name/Code/Ipopt-3.12.8/build +``` + +In case your OS doesn't provide the precompiled binaries or the required version, +you can also easily install Ipopt from source as described [here](https://www.coin-or.org/Ipopt/documentation/node14.html). This summary might work for you: +```bash +wget https://www.coin-or.org/download/source/Ipopt/Ipopt-3.11.10.zip +unzip Ipopt-3.11.10.zip +cd Ipopt-3.11.10/ThirdParty/Mumps +./get.Mumps # HSL routines are faster (http://www.hsl.rl.ac.uk/ipopt/) +cd ../../ +mkdir build && cd build +../configure --prefix=/usr/local +make +make test +make install +export IPOPT_DIR=`pwd` +``` + +If you need an interface to [Snopt], point cmake to that build folder in your `~/.bashrc` through e.g. +```bash +export SNOPT_DIR=/home/your_name/Code/Snopt +``` +and run cmake as +```bash +cmake -DBUILD_SNOPT=ON .. +``` + + [CMake]: https://cmake.org/cmake/help/v3.0/ [Eigen]: http://eigen.tuxfamily.org [Ipopt]: https://projects.coin-or.org/Ipopt diff --git a/doc/ifopt.png b/doc/ifopt.png new file mode 100644 index 0000000000000000000000000000000000000000..2640b773db13b6608b47e0845dbe9dec9bb3f2cb GIT binary patch literal 100392 zcmcF~^;=s_&~|W&Q(ObVp|}*6qQ%{v;!a9&*P^Axi(7$W#VHn`xD|H@1xkSe!GnLH z&-eZT?+-8671*3ToHM(#J2N|T-|scm6>+gBu>b%7?rSAEZ2$lT697Q^iHVN5f_9}A zi1>pFe)U=x6Y&#>`6d?e{h5c75f}i#lzI9f-8|M@A}&(Al{b8=<8JrX$I8nV;N#=N z<>=-Nwz2ZC<#PA3|9m7)2>{RmUdzeo`sVyy^Yhi6yM~+`w>_f|50(2`P~iPFPOp*6 z+rZSs#HT-~Ry)MFy7e3LF=HrHU*6fwIAi{MLAAeba? z+b30KpWZk0^uxD)dE%c|1CHA4xiYc>ny-YdV}}5{t4NjK8R|$i@dJP71gPmfvVlf_ zB^_WAF7=4Cw1bb{|N8aIpuV*Id|CyA%cS}53%z?|IkyqP$LZ=`99sAE^7aac0dm9(%J3caWt147#{jO7?{mQ{xU}M}N^(NPDc)hA-Bm+Nq`Hs* zjq=L-(89`Psi5}QI}Bf%MH4xNMz6cq06#y!mn|(g91MDDfXO$Pd8w(X;+P%4=)$)u zJx{XRsOEpnzp+I_E^z^Xa)=*!+`88h_ zbyh~kl{{ZopoU!UY!^pOt99DQ$cSFC6ozTwNxv*o4tO*28Bx0MuABbc(nQ-Kz8(&Lrs1uJ~OA|L=A6j3D?jGsPX+sUOYk(Q%{(F$h%E}6e0mnfH)_=>fp#-0I znFu0smE3Fx0@;M!h8pj#ddd*|h31HHjXb8**Vm61m4v*TP>T)j##&^#5qV}gUGh3U z3?o!cSw+QXOgJ%~9d8sd&&P2iqR)LHB0fB@89K~MKuw>N(#FsEtCYT5YJfOe0$R=6 ziNj|JJqCsoNHyxEoQTi2T(?TnYD zV``0-p57cgL>^Krdb9p-9VUb|(xO@h0rY~pIVob5kh(7J!Iob>e*Ab`WX7GAme!f0 z%Dkb>{D~+Op%__0KZ)hXnpkntPdjQ5LM!q-)Q%7D^31|;!&bEW{FIfI?fR)7-_DMN zY$s6gPYhrFT%(<6z!ToQFZM3I3Fj0yZNaWTZ0CQ?doyn zCaUU5zcs3eP9+6 z0*=$xgd%8gBHjb>?GcgPqN}tTpyp=IsAzYO$khu0_1_P+pcHskWm5m7UMoPDJ4H$9 z_3PIZ(&W(zw zj0IJGS0AI#N2dC^e>`1G()3D2S^44F9lyVY39^qIy^1?&%4B?89I2kJ?(AlOu`xf6 zVJbz^+>_xS$ec)B?+wO>ad|j^QiO#TaC9$>3Z4tUmP=p2N&?q_ZoFY$AJgr5GKAA*064Wr<_7ulvS_$lI}z;$gO z_uK0Z*F%P&3WGob){W(Y(%QPk)p<;+Ztls7eM&3x2kH$`U>S`88%XEGN(HFF_?!q~Ni3>r zYUb%Mh4A`dKUvpwLwRt>02h#F@8zt!D(8_$<=(g{EFJa4;Hq)bzSFsx= zuiRe(oeIDxALwtCi#CNv`8|LAaF^fK3oQMEqu2QoGkk7zbW|lYk#B~KnAlX`z`!S= za)LO89^zW8ka)A*{dj*I8yy{e7&;SXBezXONP(XKI6__LWM{9eE-zn17p62c*3^W( zGoDXI7E4P{Ph#id%FFj#N0?Nau)y8bVv2Ts>^_*@9js2Pt;7D`9L((Igy9e8f3mYV zFOHcx3=Ig=(Y+wFl;O*|qr>SV3uA-uL-6(n-w(O$t}a0oDsPm$y}g<01aSHmLczJ< zjndNl2@xMIo>zLnA5zpCAC2l9QW`|2@;4BU9lm~kuf>@E*vEZz`MhiTgp>y}Gy4Dy zFoDXhcVTR4MIP;rBIPkbV$Yl~??@hj&zTJ%P0h%7DIg#ah_i}|!|~#UYV~(&WP3$h z6K%vUjmR$%2M9CU?Cg9FeM27Y`Kbdb3AxK)PHY+0^`F^Af|DA4IN?WKLYG5-!N>MwHSpot(vQuWs(= zckRDalm8U(B=8!o;!@)!ps%ZLq%?(Fe%B|iZ(0?(`i$^31Ky<1-~Z6nlfYjrZyL$^ z?{?P@P2oR}cnZqE?}uWhets34Zuz>;j&LW{UY7sO;eYqp$+uEzT8@s<%t!qH>yD}2 zcZ`Tvib7-H1DR3ME)aCY>+NiU%pK;vat9 zqf2!)^drY2+GALC%)y*B1mw**jY1ebo`?U-#7*&rI9qT#pgQZ5#r9oh|_i+#Xr(I@qeX5 zydy4Ue>n)Pe19SwACqq}0>Xbu?>asi^@lW(zZao=aA}RFQCux-3f03!6Y{dU$)|cTa zbN-uTq345bDSM~==Tm6Pnh|TmD^y7H)Uo?pdl|%|&W-d0E-c+wj9=NPUWrg`e9XBq z!nylyqVh&R6*zr<9H@Rp+K&i(ftUDqK2r^@5K5UhbLfuU zA@i=K2%j*s5JcJOwm6UC8k@pvwrh5Gx?5|V7P0=KGaTkPuPYJSTZt9Wc#;`JvWms7 zom{F}P-j7vyrfgO5y!4m%ito-_PK>VD75Yh>xI@ai1>rUibO&k%fi)3fG@g~^fI|q zWA%bayDq~VkEOH;UL!(>)f|B6=F^#Uj6%K8PcSh41S*zTLxElCx8UVtiDnF$`}-TQ zW!ka}9ZS32jPhOWp+1YzmWIFh0$qwBl00If>y2dz7hzybKbBpaNP&~hN*-D)sdN`K+o2cBUIk63i50aU`2EuBwW6DlauFgKNvA6|XqbjnPl z6VCfmvLlfou-2zE8bE$>#WRg@Y_-XCDw5CUm?%%ipK8nuH93z#X7EVW>fNFkG>_e) zQHCpGDA!TJ-k#rbhsKC~$lzt}V}{619phP0C^bEhA%~#WpeToCge6*^k}Hj3U7JF) zC%CHi-f=@Y(17oJWR_K|?4wp}n)53>z{?wGSZBn|qe>ZHU>|Rk-{qIprSuZTdS$%c zhZz7GW9)InR0iEjB)~9jgZ|R0dl2*Q#fMKb@Y-{O^0c_ zDCzu6;9v17z~$w$yYA}Y7C;Ubhw&9K-?XC(0~enuK}`&f%XU75$~3yX4#tP?V6oQj znODRlkGOHl59Y)l%Q%$$1hS&JsknkQF;<_M=H<=HJh$j^m?6{V_Gb3b`K^GVA(|O_ z>}i~L5Q;66A1e9B7ipG(aaU;j*G3q%T34-YbMu?nbK3?Scp z7WvE}>B^%%d982c`b}WcuSJ@TSi{*?wN_kTU~83;u@wc3JdJuIOuHmm(~!Zrk{q$U zJD2t$ypVo)Oqz(J)UMAjzb=&hleCzO6ANjvFNYgcQdNJxaN^s}slSLZ5-DL0=RBC# zZv1q^b(|Y!&-d;y?om5{+vXNIFuCt%!eKJfV9keDmjqL*VZ~t>qM37B5Uc%Nxvbxp z07;p0hi1WTIw(g;KfweVypS}DR`&Mtp3+(U%UYiXAcj6@o0iK)*3!Gg)1m$g4#wpV zPq_g?AVA6~CHVlh>u_`R6Vgn*IA^84fc8M!5Cl@Q;kPLB>))Zj`-yAgB}kr$MjhK7 z@_TboYvD_&(cbu3hY^%R~zS1VUrRv)W zMvwRi3akL6mnBRR9N;`@j&~^LKAZs^LW$-ae9a*dk7Mh^QXTB2)P}NFW(z1qA{F?w z9*kYnH4s_62`zH8@d1E_k7sqoi2{m6JKiO;h+)wKr5lF$MoP!`G?*|C^#+w5hG`@W z@N7c%x_jX5{bJOxNQlBQZU=cokdE>CSE$t2kRKQ4Hl_{7k-MRLB6;8)M$TiaNbraB zE1r*A5~fGTRwWS|*h<3#vzq|XHKRXG|4O|y=@W))Fws@`Nhtj=$Ei|>^ z2QNgsfcWK_;?3M^1A93-FnX?|76+gl7*xN2BRvLjpCF7FRLzB6fI13EfAuo@DQ7;L z0NL}Kh=h8!EkZD4|-dRaefkW0&Z3$?nt9zHn1gfHSCSDH>dB8cBhp z-X3H2HYnZ@@M6Fdw>MhE01sfwveCDx?2C^*h;+LZ5VFuGpI>|}9uK78;ri~@ria%t zZhfp$81|g@6?%|Ndg=p9f2F~PW2agzNc@^O2O=m#pmj2vtw3oaZb;U= z9QeB%-s6%NcDCTY37S<*jmf@|L+O!>(iIsr?$6b8=$pVOsAr&(u+8#5BNUsD1)34-(Ub~Lott+VwB~yjNI9*M1zO;)x5`Zxu?$@8a z@C>Ha;n&(Odk=p-5Q645oBlPeM*R-4xM+Pi8=lklcuLmc!32_qG2I7B#8Odr2~X{Z zjAaaI#{Iho`q!^W;Qr}9{vOaQ7)~EqU0m@nA-3hnBF^TkK*lbV`tA9pD-T7`X_aCB z7=}8MKGXIy=sanmVvnM`vIi1(epzKP6x!!q{$^N;!#x2_|SGny}F~Ilk z3cnG4ID0FVc&y%q19Z2@J@(9uPwq%N3b-RbQLUJ-8w=E_*7mG!je2W-V3Xk)Tt06G zcW!e|Uk}@ZSWq+OcH3QTa^URMn~h%nNm=0gDzgd*#6x9`c}`}n3m0QDRX@nD&_n&U z&>9XWok4=|F*YMxDBT6Eo++ILWbW}^!F1PUT2U9Q#RG{JhOg>OhL1P3R+BBL`2ctc zW@yH~;m^6E5}pl>>lKc+xjj=y+y9`?f${U?mQRpZ+%2)J>bw6(uQJ9i!2_E>)C4uy zmSOkb0lus}XO+7T?>oUtxAcd}I^6(ZiUU{hNfG*8pG>luV9RHmzR7+Ejd*R8F7K-) zbxy58y{&*`o2DhoFq;aT}kqkSopmxb3sH*6lrl5*}NFMr@m_;dQ3 zVOz8*QA8he4kx(DrA`(Jb!WMib-nb`xuY%|4Z9^CXe~EjjZ<%A;H=##NvP`Tu{fLH ziG(|^o{iBbdmTYMIY;s!o{YX3AK$4xf5_(f9qio^&DY%j&X$}LMWF_Xh z{L@rpKx^JD!N8je@}{ze6%61EphLgk)cNCWT56&>K{mQEGS*3`^i$PDWWC zjg|Pca6R)H!JnT&SvOoxGmN`OHFTlC&-a|cy}vQ<$WPby3h9y6T3(O;ob;YPrh5Bg z){#c?@)8$*d%+Da^a|pb01xWU2vjszr=~T0Q8+nvrZW@PmAMzMS%b;OQo_zGlX|6A z^Qf4p!j46hl2^552ez&6WREj5XU6)Z3X%pw{L1c7;qCG6xyBi^1U;;|H-2*6JqDQU zbIDl`oG^nZh9ay5%|H$1n}C|qohDU1h-lw;_%(q3s0SsVVx&L#r&iCk-+X%24ppd8K0>WNcZ%s zPm&4lIKsphuQOF=SdA9`$oL^8al|jz>t7WtKiH2C6H!P5#MB7%}z_8D*#kcIQlF& z={aAHRHKr`;5!JmtG}=LlG2t$Ao2s{O~B#_&+=P*2JvJMwWPK#Oc#o3!0O$ys=e@q zOOnkehwAlvLQj1^1CPK2MzF_nvx7A49!*oW`0Ig=& z)Kn0nkEeZ;d`;VX)nSMCx}!<{MqG$~7{uJt&eANU2KHPgCN34@z-0NwJ>dpXoSJ+F zU*4Gv%YvY->5I+~NnlYYe98Xa_dBeV}Bi`&F;a%64BjO}~}L?-heQ!oY3Q zEM^mf1_at&bd-3-nt!sHHSrmXqc(a1qeP=pxNH`4B3Nd9S~T=6=q)f7C$I1L595*_ zW^^e1NudEDv|s$VN9}*QFwM9Z=a&l9q7ImiGHFFw2N+APUJbrP)Hf1kt)iblGIf#g zOkQlCob0eB`N0*^K5I!TuiOH-Tw4oHyK~O;9*|Vu;Q47W7BTnQGQvf|q2+Q$Xp3St z_YtXUo)R4~%$7)$Ykk?5v}uzbj#nOTQ{Lj;!9CdUfL1@#NB^6xqJYKHwLYu)0Qej! z_Hs4#`i~Py5B%&)x|)s;mtE2;KdD3$>pPz; zzpN_$X&W4C@$2pi&RuQ*<78zkhRNa)ZzKlDr*`cslJJ;W@dsAHWO8$k_XVoiO+xb_ zscziaqySa=DQL+G=B*cwO`Hk@4cHe^~&PO=2x;zfa9)+w@WQQFDre zO}tz(&S?MmQO7t5s4pzNnU0rtpm2diaKpSQUy{~l+gr_OZJ;(Kn_)kZ@)9 zj7!?uUr##{h0yKjr${8#>+|{m!&Z)LhaA@sijU0z%iD<)We)ma@HafUdofpP{k1uK z-iVX6O({ss;w@%2r@nUNF?u(Zg$*TP>G8A!UD=>NMk~5hvTc+4m=8dWvj+F4bp?Dd z>=?#7<32E`c^v1UEU~5lXJsZigd0Tymz(%*82xG1t4m{j@OaFvNG?8kgs9%})KZ1! zHYIvC=nyvp*iA<-r2RiVgVYj7mp?vV2O1~oybDHK5p2BP-xrCG22~$G*YVPtS=en4 z92UovpajpUd;Vq)@m#CQh*YobRzQ8J7kKG~&K-}Ls@{7LkGMhf8HLm9Gd<6GQ6Tu4 z>l2d#A*Cv^O@a>b%8?%$*mky_ z&MmSD>yeq|$ZC1TX9lf;L8E$bdR%vaEu6>wkmiV=xb^wQukYw;U;S%ifZFGjl3qCQ zyqaBD8Y+->ye01_My+-7H%cIbwEL$U9$>gT@p}_sfr+rM@;y&xF>Gx-W>Agmon~!U zlOss&%2$2XpnzqDFVLy>7t}SX;iQj}Dzw<_ax%LC)>l8_<%+pg9h}tn_KzjU8x4|E zir_!1HKE;Jeb)MldA;_SAuK&psR9%D!-+tXE{xBf)-j_iGdOl^X&tJSpjv6Z1M04Z za(k=?b2k-Me?^Iz;RE?AkB{>3!Uznc2Pd3_>%8vRQpQ&D4IZ%H=Lz0;8C@_Xibz{T zshWl5VR2PO!k(-Uid$cdO(4Fn;1&y4s$m&GYR~uc3#qKa4F$Wu8`-Uk>t!usF=bq9 z;~Agcm6q|8Rm++XPt3JCPzUAoI+UhuVxA1r<}Ri(y+Ma)Xm2eTtP4@8nV& z{`GZb6fIP@HxVQ9jW?Bvj#zs4+Ro3m4ABtjMp29XK3_&5`gOzu7gXfWm46xVxD!2P z4OMpocn_~u`?x3(a^%{)JvYV++?bCr(Ip_B*B3T32-oM1x+t!16f0})rN$P9@5Ys$m0P~q5QoB%LGhu?Q zi8rX10S=#WHCcM9r|gkqyyy+V@O~?3rwOlkRqi1d!+(H^)y^(nS!a)N`sa`&a;7-u zHoxVhb&Ytx=*px_vk3P76`u;zrg4-!R)lEn`M|kTcTb3LNFwg803tW&t+3S{^6~9J zEM1fcmId4SfrlN(v#)eNXt#*hll;+ylvgBGH^rio`HzvJs*BEYma=wUmXVnxmyx7} zOpn_>tb#RC>e zyMxFdWX`amk{IrG)FzlY5gQN0T~u!b>c)E7us+M#-o%`JdZ9g7o$S7|4j>2UB5MF1 z-w_OSYF(^x#%u*JAVZtV$GqFj*frrs=UwQ(2FV`Bn@)al{3T5b!qmhLd?ucirSX;q zANdku@ueR^gSW1%(jZl5alT8qOboua!SHF)PB;u5KUuhlm{q`d)PYlZU_FQ;jO#|o z?BKgcLD+3GqDpd8t`X`JIv&~y%NKddV8;nD``;VHfVG9$oaiM5Y;MD*F5|6}Jh2}2 z;2=SJ`fTDVEtPYVsmXeWKO?pLNkGcdP7X?Ji!ZR0-hinGQZNCreqys8N5>b~_ugNP zf#C_@jv|<&fLxhOq3Pxd>wP@dSGyATsfYp|>CK)$nOGP2qZQ(IO`DV!q%>zuyj(cNiH=) zG!4jWVA{G!Vpr(-WEINg1jS()9k_XTz>CyywS}Yyrhwn0-@u!VS^2#4|$jCtcSuE5J+n?>1O-bDZwdTj30kj=$99)txJ1(r@B6QNo4Q_ts-L2J>zM~hNm1m$s2>a ztBF@d_Ct8@jjIj>nfaqQiZJ?I`I{|(t{X36?ylZX=Vdo@>dC;>t(r1zyppVm^{AbQ zkH!`slviatUgh=PV(IP2u$4By{7T1KMP!z7YctVSc|#ke=*7B0swKkA&9auR^_|N4 zvYI4qhud*wSx2T-P}FWWGl)v@mNsFj1>ESaP_xTdmOP5W_2UZCEHa(>vV6w1< zBPHfN&%*^k7r1LaWsekU3YCNEIk@Zqu{-|W39l&Z+p7Yx?s(Xt>;kwuM%>Jg88m?z z&V?jcFfftAW`KCKTsvj`Ht^#KB^aS<^ z{=hKnYpXG~uCXSF*3K61UF7N&?2`)_ir|#UuTzV^fn*_N+(irXw7xpk!S){|!Zp~B zy~C3EE;|8#x9`LgP{O{3KAX~z*L}?f?m|up?qZwL$hmp30#3_5tMec066BjMQCS0i zBkDmEgAfLJGQ(U3P6tLDE0K8CzTlAel-!XP&@ZWuU14yw$P%;_*Tt(`spk!>Tpic zei;KuxF-y?jN;72AIxSSwSs&ynwXiwIM=m(BRAHSGIfB#d#g)i%KS3MXnH;ASVUMWh~ugYf`Zqj#uOV(&-y`l=!6-9yJWDF9x&D3Dp`{!9NV8pg3m>%cW_)CQD;y`q0u+e)>? zWhYQ&x?bgixzTp#V7GW7$ole-s#B7zfxF4Bcg0mW<7tW#_GAzh{z2?J(|8$l;moMZzFHhC__snN)&Av$ zl|31IDqAXRU{UbtCAZDASQLI!#T6o8cq+oZo9c76O;114J-Cn}rqvS`Q^`i!Um!Ou zQNxZmD}(j@X`PvwuAy`l<5n?mSGc`Gm>7-=>~N;ynAKZig>w82KQo2p4UW~Cy5Lj; zKK2Fii?5XSd1qYXhE(*+T{XRG%Z)rs_2t^9iWlD|OiJslbi459Vr$CzTh~gcp6b=*Q@&?2MfCcd7hx;UWW?~Vc_)IlLtq1n!TXB zY)I^d9C5`PiLm16z~8?c__+43>wopDjI6#cZJ?@S0zG(sE$Ru7qFQ^##Ur^gac39u zEF$b6)P#W6=-ZBQ5{F@wvKw07tJY>SKSp879fDJl47R{;tLME&5I15^aeJMW8t|n+ zuah((jOLYm{5`*6u4oMt)Hu%X`{?LG%MMZ$glNr-;GeG8^IMwvrM8Y=L%JZf28Nzq zdK!`*sIZ{+GtFQe>M(6&5nTdHF(@XxaK+m0U*(6*AoQd`*3F}wWR*JL$a_dLL;;>x zLIK$(b!7QQPM`nbYgXTU0@Kp#(wCzxn1)oD^J{4T*7pXXz=KetcPQAyG)i+RNIp(i zC*B6xL&Jy6wp4GB4*E8gX60?pDSzP3S1e!l7=|(w6ByoLQ`1uw91*hGJ66&Ocu;DF zdO2T_uq0|KK5HPLJvu5n7rk$d?7>l3q-?cr+lyKVeW?}P&^v1PZ&Q8ObBawt2}bJ( zg*k4STX8_Op|zMTjl#x@RIQk;Ser7xKMacHgrBNdqF4en-vebOus6RZY}F#^V+NaGQ26}tn2TIC}y<;=6M$QngsfOO<5 zq_a?>u!YQlA=aI%pN3f`$bp%cGuPCU^0l{BAMXBnt1;!CD>~M80Mxf>Y29;{;f_Q& zL%X>+(}42onKR%PC0U?Zsa6s9(YBM6Fd|T(aK$qL#m+X>it`QyMvEz!XkyRHs*;uL zHb1&K%7^PqBb5a{&a@Gt&v(u2wb!~Kgs8ACfW#vk`3P@9Ofml=mKu|zEtwrsEwX`~ zh&_1ZwHAes0_Myq8=Z@gQ6PHPueV+e=AX5LHHP>Fc!-2aH*F(dL#7}$N|%~?xu7?+ z1+4AUryD>2vlGv|Fl37L9o49QPj8a~Ua1c)1`}(BsszN+sPGBpI6U(~-jK)7@GNbu zGukN-%t}M)K9mjQ{xLB|U)vu%D43XrlK%jPItBVpS~PnJ#dtBpB$-SkoL9T_v+@DzsO;n;C=`1k zk-!OlEMO7u1)4ayRIrqeV1Mea>8~uD!f0^V+DRwA^JdHg4&bICvMgx7`OBY@u8b15Gd)R71}-^SKf zxV-V_hUsr-c;JcL^2#%L#ugDNvl0Y)Hy<(ppZu^>SyADK0>|3uTd+moRuyBcgeOIO zhfdX9%l<8?1z7@E*iby4?AfW_Q7gagI{no5AI&pK%9H$&z!9K zBlD5sC@=aZ@mnzltqah1oQ!MQ0h%&3_$<8ur%Y@Y%vJn5A~^csw8QDKFF}z4Uzh%lHZx8$ z#zyHa)4bC~AnsZ-@+H7nziUicRqhm#nOv$|#y3njer8M}%!kt#8QYPUk>T@WwnB%j z@r*hIS$%J#J7ns|dm{ehWI_aN9FDzBP7D!1fDZK_2MECSRcSK`0x`u1!bdWQ9nuF) z{|sV!I-#zV&@KkOrOzn!ZUwgJ3^K8@Kv@>bqNxP&-&69@k}J`!@Td7qU$#07jXhd> zxvPxsY(iM6?R9$R#xF4k?In~cqVs2S%!@XsvP=S?YSk~q$u>Xiq;utWIu4Z==<1*m zaPquk@L=f879J?bK{JgFvHToX3}T;&7*eh?G!vzV7^JQr9u;Ngh(Ph~9zTA3}iIO<*aUX{GWAkvOfe4*F@(uSQbUO{RuX2ZF9 zW0Z{qvB#Ke^P1wrwd4F&szg|by~_&6&0!kp-sjVMaYPi2-Rq<@Mo{&3?~K}btFLpt z{{?MX_Ay=dXTnobNw2AO%qWquQA5(s%gMbCng+Iq;NjrTF=eI{CF;`37!+<&5|Tub z+rJIYGglgU;(mlY0XOG+K2cV!PNuXVZF1C}KRh@XJ3Bi;sY|1DposTJ-3U1199P$3 z@{a?AO2^?RTVG8$@?%lqX&npiCPegdSwPiX)2twQxs>sni-W7+b6Vp}$)Fq9&CN|> z1YJ39pGQ}0<9E>Q#e&6#`&5y<6cX0W)$wC~JlA&zN9R5MRs_5oSJzvPJlYQdp%0NL zV?iTi`?Jyg2w7fUW+$v5N+E>P4vru&$(@q#{w}uajcD}6#0ArVV=5(a14&E&;m9)8 zKN+(g%HQ!6{Ka2NG6_T8zh;nRbXpB}0wT$$)(32*J0>u0FRQavD>&mtI#ypd?BSbY zS1paC*b88X?T0){L3N_-b*cG8?2w%SE%X$-1oMnNQ=^<$)Tc@wFJ4(S9L~8!KfZ*s zkJRFIdn`pm6350eC+QOCdaN8nLU46aR$7MI1re?%o?@gQrypMs$*|P(bN-85Ht+kq zk!$fXlZt%`fDA!SzLAL1OTW`?d0zYnG!P$=A$6j6h(MNVFdgVIo7ZLlfBIt=Dm69& zr!Q570OFTFeX6Q*W{sER-iX7PBxjF5X{o>sKwgQljjb7@BO~)Rw_IX5pR4o*{68lGtQicZ>+gCxRwYhJZ<@#NG+XX)(;%xVb}u z5bLIo|CAO$jV#U%8s$5ECHE?@-|DKoKII{AAa+QVaEa+if(l{Mt4~N!H?)IZ*5POH z@d)kk&<=!%JU&-KZt35CM}a7d7h^uY@{L3vIU$Kj8r%hrZ6Iw-r#?K z6Oq$*(ASJNVJs(vnd))O1oj5K-Vhfk83Z}<3*nKhFAAKR>D#JTh)Spz6%4JH9}`?e zn`M7u(>uc=tr0&GKrI*;4kPcq$2<$u(3}RE61O5r0pIYxl0PT(0sU`+MW(wd0{nij zbs!}}K&?Le{V->RA2ZxFf^Lx%-sg2{LDu?A7|>laED86Mw@3b%=kYXQpN6;jA>_NJ z&w>wAb5G*MxYSEOO9Z?Nx$7vA2vb2I^3fLYr8=BG#;V4%4I;4Q7_CB>;he=@9T<1& za_UA8w$_Xu8Q>!b9cHu7#Nqo#7jcSK@loE=DNhWjRC^6tb9rrTH#@_cx^&3ys!Dav zqdY`pci;zg0O3Q!(^1FqQ`zf2q!7Ao-*itN$v}JXRyj-09=wp*LaR4}bDH>!w09oT z2H#Y`g~&lgp~R-~F(=LrPCafl*~ZjFn(I!hLU~Sh^$dch0GFtIfdDErQw186Enf=P z=CYn{Pu=NcDeXZ9_>c-pXgemHrl0dS(-_hS#e7vxoCjX78N?G_&VmMUh5-Kzc7EH@ zc$tJAi4rOS>qLlcpGa+9On6%G9fpjHVtDIzIe=zA3F47HdO<#(EGOFey=s#O9~ zNPA&#u1I@Kz(;=&JQzRzkk^A>zGV-wb=0aFQ?9D4bfUQnI+Juw&}0M!pu`|8ydTPP zZ2ujnL=sGskdK6q0P0SXrMLsIu&^G8UN$n1iWoQkL`jYxGKTDd_z?NNFI`<- zTH4xPX8wM#G#mgsJA2YVZQVlvVH<1HeH=%PZ*zV9DGfA`u+3O*diNDBpho$tcn1?G z011e~1oBd;q&8YtG_}1Mc3_=-5At$TJ$Sr=bU6~m=M$ym12D$3_*uAJ%eD459}Zo1 z@x!6jJUCi&t|vr2NSbp|5b<5pzXUIyju3)sB$3wU(r}Cs)JU;x&fjU;z4vhauD^FT zfGz9GRf12KlhxZgimTzKM25(!??rwQ@|mcsxy$3ePdfi$R%srqyvnt zdkpw!OE|Smm3@hQ1-^8|-+zeDIm;VCUans>qS-}GJKvqoN#^>C%zY?%UCph5zzLI{L987O=Un^M`=Y2xSpKj-W2+%(;gZB6wQ|G6E$8c)eHV z_nsn4_u~GY%t2dE?m~WB6l%S@YToDqaJ*b%1d)LFFoXp$!^i2XQ$V-3tjIzh6N#v& zdKUqAs|ji+iO=>PsENECxawpPC}i*PzP^No)iX{DZ=8>ss94dT4i zD1TO0j70Rzk8&^=UgJNrfH-y9gi@$B5`2+}0&@u#O1jb4xjR(S)r48(aGSB~9^dm; z?^bx;c{*orS0Ts(gFHC)pM+2qnktGJvQ+VqrF0QUdM9C+Dqf*@2qt3;K5!jG`3Za^ zp(n4mFuAD50rGT?yL-t#gYQ@xP6smCERA5=&{nUKYCr!2iL0ndHh$YVe5&H?gc^SrQ=1=*X4A!ocYQk>Rl*}Lm zbj+Icg87X;!Odn2lbNzpVsiSj#1|#GxL%$>g7SA0G+!#YH(6K>;*{8U(j0v3M_Y>Q?iXXpkEShsULOPm)>?)@4G@}|{Jpyy z@{gK8^!`U%rGHfAz&OT;pso`df&?Smz%(>EN|mk39G2N+{*+317iZEsMn2Q`UMV8> z4qLca#D_oI1|$&>(f@(K9JT3auK1tcO>C%Q`u!0dzNP~%qs5U!G@ zz9TY4w@aF+i@38zPY*5GRh_{D>g@JPg0_Vhm2mZm9{?%WLmZuB6AaxJ1!h5Nu)5tXW2IrzlLidh?haTt8XmN8apf?lg^nm zXS9+y;g(XC-zwMf0?iOy5tI%*>a_Hl=fL4VL3*7ClH~X2Qs=+rph;mU7^=Xusg~T zbe^X}Y?MoEuGWG|q6vG%762f41FE$wAbb@3jI=aY!~oMPMSqC2=<01yNe04AJgc`s zr!)xsSqIonQO^v!9Kp_$LCjr+iu|V9?)#w?P(7sw*zTtME8JB~(@X?c z6j1i%xV)l*0-G3J26j7kr+aY)p+PJ$BiWLtD(X_}4hy1G`^hHMI`G9kt^Gufh#%tg zaD|K^ygQJdn%Zbv)c76|3_@r1^o?vI{>A)_oWSnNyLgaS;8%*LBfsk#1id6vodx8R zk&*F8Zqb%iTlx6si0?ud@gA~;+1V<66O(o(m^i{XeU7w(%LNBNH11HlJ=y=P3p(YwV-PgnnsA9>o| z4nW8-ScTqt#1+X~ZHOF6v4VvduFz3ZFS*U~mztU*SLqdS)ziSroU4;B*0a-A0t=XJ zKI_bd2j5#tcOS8Sz*kA$Rw%ipp){yj1tmmGj`JiS)RQ`V+I#?_4=>FiPcN7Y#ufp|d83u-?9vj)c$ z$W?eRP##)3ehA^sliTQ5&4rDI#fL7tam7C+rX4XXk$7Ha{P@Sk;g}DWriGEf(ChSk zNbR=lDZX8{yOdtf26srDNv`F@9lg-d5b~mRu6Yz)0o?SbcYL!9a0yjsX=fTPPnH#; z+%6YpOpY9z08)u6D!2;kG+%0`-bKBbw@@bttdg*0pj)Deso#ekBWnDaft-c0B>k8ba zb{ly&R_9}M$npqn>_A7~S*Yt0-FGtBIlK-y+tp~X_B2QjvAs&u<|z)dNPOFI{rET6 z$Cp_C5hB$Pz$C#)AGscoQi%zQ#frl;{I;-A6HB8Rm?%Y3NA}muLLL&w8cSC|SAfYn z9iUQ9&sbu%l)C}^ymjQ|Gt9L8k>K)7-0#xuot=*xf4kVmb@Qfv@V(BL9e#ClVV%wD z&((KSm1_rX{?!WmQk$h*(&Y+gf?G>UNQ-;$QC11}ybI zdTU<)rpNA%a=MbreK)#lx*ho)?{yG~7m?LrJn6dj9D4vaF<>+l38FbdKrmbRC*}S7 z*HM4MJsG;q*JyYvcu1i%bd&58jn$3~=<(CgJM}XTEm_6gI zALyqgiv8m0o{qf~Zyw)xTweYU_llL)=Bmrw-6^#9J4z^L#?ik%s6VcW+Fz%eRn^Oq zP~V&Kl~i43iLQ|hbx#j0$9hk1moT8*08?>b|Br@mj;`zpwvKJvwr$(CZF6EfH@0ot zb|w?soOoh<`MvkO{_mc(&Ru<~ySi&v?OpVjrA}lLO?Q@YveP#G(#5<)kh)p~jS6XV zJqPxJu_d|0%<{4SJ5BG=O?n{-cMr40R=N18(^``1fN(wf=+7s+ImT*#KMej-k*6-# zb(~IvJS@8IG-_wa4CjKl{_RHE@K0#SGcAqxBRC&oCr7-As)>L1BPRm9p5>E5<-c&R z=9ArMsy~sX=d}iRq2DH}&si${2wLt-iil)!z{LlH@Xqu!-a{6K8P+^-%p|K4%x^Ih zAxD5ufea(6tYDxhenwJpz+KyhX0$7=N@7p)pXS{Yl0xHEdo+gL*!Adau|i}`jrR&a zA088}O3mC}ySQU3n7ItPBFLU`re%4yf^Ys{?dT9O;;87UF`bl9TDA8KJ)aIcJFcw- zw+?u5#EHz4vgQ6{2b{GFsw;d`<3d=JB;XUpUmvBaUNhpw2|s}LKZ{?5hr7`H;@Vn|hUk-P zTkLYyVL}FA*-YFt;+M9R+efh_wl4`IEp4^$%z2BBp?HPQP*MM^oqP<)CzkfbZn_7_ z+t~(yLT8RVeq~J;-CNOvzm`Hn-f6GViRUD1uJ)uAa+MhS>m4pyt#PhQN&W+yqsFnP z?7})qY>8!Ob0N+wUjjwKr~6PB*XQ7dUSJyu;qmNtL%B}aPhG(QcO{3X=;&xb+R!o% zu>M8ztK+qiY;+f`De1gZd@q0!HRID(74@@ce%-kKx zLrpYXS=(J_f!wf>G}Yanw85WQadFNQEgCl6DexO}ks8)EQLDN{hn|_0KHBCKE~z5p z^-dZ1@S_6mo$}{CJ9+*Zwy{>WT3CHUKtEwfALK5u8Kem8aA3hoyeYMA++h=433P9kg<4aSdxXywCkL)WP3zqZUNS#B4q09WMLJ^m^&-!X#Zk4Yd%t9K=2++HlQUo)glV!)^MZeIk`H=AJr^!Fi>?Wrb`@+ zE~We)zx>Z1w9H+-Kkf6}m|K)o#u2~~gdeeBmjGhtWik{L1P1Plmi=?fm|7h>;r)b| zV!lLS#>8YVDajrAe8D)dOE~ZTD~4C2OJ%bgcNE%*|740r;kH@@r&*&P5Of`u)wUuDXpVd^^SiN zso!Ne_v{y0Qaomw9X?Rn`{`;nSoXw3kp9D!vmvY|C#7%rmSAV{6pAlNrQz}lp>MGm zuoj<8cdI{SWw5kj(=T@2e&7)B`90^kt)8af#zL*qKN#WeL zt$~MZZRv?XjRTzU98ToC+o6pZ!kV; zHT+%RsvPV|vS>}f@0NOXb)W|&`J3vux(mfv0MtRuKIGgP|?kjLo)^80b^XM(82b}#-xM{*!ne;&)h`Ofs z(W&|46M;r1CMGJc6+)K>^TGfNb##?I7xCs=Gw&Pg90oU&FM`4Myr#DP-z}?}eyiX9 zUzgOjuaKZf9iERSN#%5JP=B{H0$fS-$vMeG(vsfr*+Ia|Ef9Os{+=%VRuLPA|IECi zw(ZCa?Nfbe+AZ%np}rKz-Vs4@FJOn|H@|zgDz6M$WnqZXKz>7K$LNly5K`0tslVfN zV2BT2J`CkNUl-#%{iQS#3yn~BoAP%7+bBrR@H@m$`dw?kcWk@nNGkFRA4lx|IpYrj z7}p^*Ub>?VT-!iW1fAT!l-|pe6wh40@01wjyrzD32&%+@##!4r0Id~fn5SM9jY?3D z`T|LEe<@Z%r`1GD#Q)iXE!eag(EW2iOR8pAI;-rq*PQDl=cvS@W~x_uNth6k<#>L|G4g!Exj@_+Zf9J zlIN3Z9{J2^ZRSPQ&>OMY?Yf*dH&>yk*5lCI?mJAesO}^c3<`6VeCTrI*Dq8`^9q1c za_@dV*2LBJ<9D6+O>z)5*lYCvn}MAz-^+uY)87wINY@*_>woEhHSttdt*wV9J4fAY zz3WHL*?ndA{g)%}UoE9N%%Cj^=vZrt&5wZ!JB0Vcp4s#8Z^)`EhfZdBwp|PV!E;<= zlYQW~&#Pp9#z?4PjP&l6ecR-IyD52HJJUA%T~aGig+1f&#^lPN9#4A5$xqE!Q0-)^ zjWi?jb~MIKP3b4My}K)PFAQbSs(&|h57&OYCB?MyP}O&z|4Sdkj{{fDYrkuB|jp{NBrUDa5TR8%q)pYw$6BFPy-L1%Yp>gv^n9}3rNUW_0(wk_i$<6*%^(? z6Di-S4|Cjw#qTpESPsVCtXBqKqc(%tXo1sT2IoKG4?FLX4|ik$3$JsBS?^YtUF>XG zy<_G<(cB_LO~R35W#wbD(=8ipyII~{ifp&TPQ@7r7HQpw?F=8Hu6aS&`%Tu^g@+ep#@7# zI_`^qMKhFQDdoC3(fwuYYCd*UGNvg6h3#BQv+l&P31uRxn@mFcHii75tCMSA-q z6;rAJ9lr`V;Vve_;UBY?Z*$&tVPSM)OvdMtxcfFMKAMydMT~F;NGNkv(M~EYG@Jk~ zF0DQ@o$YEDRUHl?0ZK$puLFB(so;X0*q5&Y@EapA8tyG%3{zr2yJ6KB86d&ZOafkM zFIbb=RO5tCv-?BHwYP)i=Ucx1T}fgSBS&NrFqnbZvAt3I^ME+pSlfyf<2*fBw{U$p~EzcpvOw=`^a< zb|;dQT+4k_E06Yvfu<;#s{1Nd@v%E0`2isp)z{+z|g4FDvE z9@Ijhsar~tj1sOkfN80GwEkK9rYLQ80kgdg=gra8(Fa5`FJ8y7fPQG%<1;hg8TU-( znC>vsxK`c%>C+&H8l=ep8G;sTT%S`1Ql)f>32Z0(C|%?BJpz@0`+HB)&SC)b)pvmG z7<+bTe#F%#mpk&@`N{{%r=~s5&dePYNx!oqvp?_?vW*;tj;&IXaA<+E&YVL>2fiF2 zHq+AJ$>mGgQg_xhRD5JbG)+h!h>~IY|Fb(I!=s>R#hM3grzukY&k-{+QXqG|i>ZnJ zut0!NG4&TgE|8lB%{$7}f2hxGI*y0!;mbc$=&>+!N8R!{(USFK|IbTeNR)dFUwD`` z!PX{jAWcO0)4*qxg+gfF&G)Gh^S`B$f~P|t5$iQGJJ9x3J4lpy;l1^Yag%;Lw`m$wt7m_~*yF{^e;yeN4TJFxc`qOyOYBBS?Rk0sO8G4bM>o(1hY z3XR9x7&7~4z<3w+hhs|WangkA60ne8Vjat?u+<3DPhQc?HBE8j^z0 z)8@H>oe5ijSr@0Tp|?`4UgUuDtJcbc6}e|ahV6KR<%O7s3>L6l{EW6-e8}Yw^j8^x z$UztZDkh?fa0lK>;52Puj0i-eDbJ=P%d@1-{3Y-75~eEzg6Sh4FRq2G9+R2D{M9qr9wc^!ydS4axN(zVnhe!9%5BuAd_ro3QYSXGD%7&#bN3Mtqy;SlSy^hl8y zWEe#uTZ-p4!!Z+VJoONc{m*067S%rgH>k@Ty6G$Z9$y30S;EiqvpEb*?D)heuImo4 zV}Xb&LdjjIfk4xZMXtH>+^RWeXBT)-&cJ}qgOPMKAyjBD2J|k+_Ni!pcmS~JsgfU8 zxVJWK;#X0FjA4rLVOETWfCtW~cC;#(PX&JqK6FJu($QtoblmfW;UoXGB3Dw}!!xhc zu{VbwD;9>&YM*)(=0Z+-gj_H-4oe_DqY&A;(u^hjjCR%vYvj4A{4O{(Z3#I?`ATU} z2wP&y9s3s@AI3|!sLmmkdyRfwE=?9WoH5f5-E`x+XLR@F^n#iJIT{tcN4e(<#h58a zKlU(C>rO%UgN$2as%z}}l+E=kK7a1?cIppR9g|L4^)|97Q;xqB?1bPAm;oH%p&J9i zZgfI|M1q`^2UUE;RzXz$VO~dE2I;}8K%qyij1)|G1p{+pMAAt)zUy2X`kz?ukY$ho zOjIxtVFi=CH(>0d%#{Q@reyap^GsH2)Zqn^4S}>I7^hgnVNtk5=UiS9sId( z@t%}6JiVLWEoPnx1-=hfXOfRqVDkGwJlX!$-S7YK2o0AQOdCXxk_9DPW;Gc@D)~nF z#-I?NMwim`clmcTmMc-Tg4CQc7@# zGaT2_Mml#TOkB(JU_KGVFrZiL9;10DaC6=@qh-V&KljJ154J)2?`jx63?PzyA(YD( zBGkXlGC6fqGzhgu^;X{<0yBzr+&*((gS{%~4nc%5geW`w@*~mIj*T+WCH4a9xSf(5 zW+Psl6bCM68`pssi7@>l!HA`c=1J7o!!YcrB|N#i0NM`BRjPx6X~mxJH6OqIw;)rg zOZ?V9pV*`JMAtW&p+$pp5Pa(8w@_U&gFh>o>Mvk8=MBh4;51oWS^C5`c@G#V$e`ol zIb1WJE|xZc!R7k|UHeHL{A<5c{hr*qdjRdho)k!n5KuiMB}?mkz7n<7aRiOK$X$D%e%%HfOVYhkZsPYuHa$_Pgk2tY&`QR5(3k6*$@_91pWc z(X!{eJn52Evv_Pw1aFW<;@=tEREXoeQGX>(KFzx_xgy6fa3pf}n#w8QJ2`?N8>&mp zCbeEvJ(e_7&F-$P@miBU#oT%fm_Ru*wRAan2pu!$S5Gsn!TCa6N0}B?Fp%;@Np~={ zAe;Y8iCOGb@4Gr~*6P+Y3TTV`<^q#;kaCh%*{qbqw!D*|z^!buN3HRn8J)1Kk*nYP zZ_VUTi*zk!QJWNM9K6F>H{+2jYxMVKy@+%8@<=&!Us5?ewozno^dno6%9K$7`b z`1xnf2#28Z&1q}&l?iQtYXcJk6N0*b`o*0xvq8qiT!!KXoyx^ZJB8(**b-|C0rF3J%7fs0z6&M zw-)8{0w8z4`~(4)*ZV`P0^AnAAO`NIwUKib-x2zMv#I#gG5+IpQJhi;e@XlN1xhGJ zxId)eYK>j_u(B(~;_Y6qS}a3S97L9_`@)!SDhS@NcZ z?RQf)snFqCn4oQ{Ds3zorkK{<`(>ZBryU2(5hi+C`89N6l0B=~i}eB>O%kWN2m5iH2uA1xZzDZlb=jAm@8v+Wd^W0MA`E+f^nh`7rh4z&<^-J%@DAV&K$y1 z?J(5zFy!6ZJ-lv}G$AseoBcu&{Chb=w|l?M&mCA$F{`3b|KB<_XC$q|gJ`bc*qNv) zfLeIVxwxTwcQCVFI-UTF^IBZO3=CrUE!#kIN>n8rlM7~ozi-^eIj%3F{7w z?xrfNYQxb=9jqpwXwXVFoQyN`@qa7yiKQ@9+?>y0#;v@IlU6&IhzQg8aaV{%&OFiR z;x9BEmGrP^-<)(cqkn(@HRN$;*?VK9``DwltyNAWd-;Tn>-N9oKtUsiP3u)2S&;g- zSmG0@zHl)V`>U#-d(qpY%|_{z7E_7mfL@;OC(~9(@@DPT*y*8BfYQ%6TsS zxFJDeV6J`-gljEk%e9!}cAVgYU52a4OH6 z=O5--cx%|QeeATT*vZar5elGs={?@++o^h!{daW1Fbih-TiQ63$9eM0vO<9UV5Tx1 zZ-J(l-dkU~2Us#4Hq(CqAwvzw=h51wa8Zuff z)za^>8*c;_JOyRd;z+8+8g;RhfK7IX25ejAa{Lrk+NJvyA%oKeZeEWWqt5H6MIhw@ z>M*A92PUev>oQlszYfN(l58arp5ZJt`q>~w=A4v%Xyx&+J3TEZ1K(|x+ZV#CfdCc1 zCRAm35TV`qv;3xPVed*hck!gvH_vd#i}`jDN?}zec%R(M0|XW^>b`H-gIE9mK({mT zEbqsGd-Sx!h~&e~UboZS`Z1=CY}gj4{RexnyC-f8l6chD@$2Lf5Sis~khLr7d3&iK z3v5^s_D<+->DmyKD+sikSTZ8d|bPdR)QI))O*tGlJMjpsA z^8?>{vnht@uNY1hpL^2rLK`rkB!wD)42|T#Q0{E-H=WezDaq5tGXg4Luy1@JcCE5U2i=>*Cg!xjSePZ!m(l^Q1?ImNov_L<)lf$lG8 z%tr)s*61g|(eNP7ro{ zC|HQ{9BH^*)y*jFda*uh=5w644BT{(14G~>-L^i&e&ejF)y142ZR(RvfeIw+0Rnv@g zq>ELbWkvfkC^!CF$#iFf8}P=1lP(@#B3^{TWuT8FnV9h@f^*2ZB#oj`AGjc;WQLBH zSG~ldw?9&H;+hZWh9!@q7-!yL)ix|pym(o=v6?PkYp( z#l`Gi(4qD7YmV!bH{au4-=n16>s6Zv*|F{6?VF;vz&~WHk^-Y`#lIdQvNkDym>n{vU6cBw@VILK1 z-iMb_Ej?~I-$Llg_)xz9x6MprQaLxjsMo2;4oj#wjDJTZ1^1HAGxO(~;p@PX_bf{T zA`d$gWV6K{2O_PQ$Y)Hmz90uD2c6Uuf~H#Quivph0j$`qK3wVEp`c7f8x;&H!2XJu zrpu2%rOQ%HSHu4KmktGpXGFhz(z|!Aa-t~1)A$oW^0>oK$-;v6EKX>5E5bZ8_rtYR z>p^;vKIluVs{3QkFDndB_LrHQ>`>{u9M8(;3}Dm8wOf)4$cbW4Lyrsy&(4@`!b;=O z(D8IJ$njP|4?{Emf#$gN7kmQt%u6SP=}n|zXbsJipM0M)MtCI}84LOto|YN_Hs+zylH z#A=d%bbqH2{;tpiNrU$Slm$!Gqs08d!>hyP6EanSnCo|6pG|4_d-8pC(EYF4PQcbs zjghHEUCAH?C;UwtgpLxLa1*;+{|utu7A~n4>)71;;G8M)5ng3RltJ;q-#I1pDO;02 zg^T?ur%R4d2Q$)Ne+;OaZjKvy=JUAMJT4prJyMnk2{I2_+(V%FcuI7cE<6` zg&Tr=?g$)aEEvUW?z?ip_;|7&d%X4jBP?$^v=*03O@Hnwv;=;v`h5k`JGsP8UA}$bmyIQx#(yn>v zH0~w1wkTf+MXS_yTZK&fhPmI_^>-e!UgjyIyBfGgO);vTq7l73r<|yM@<_mg;87mP zTn6+ouV+EO;(Qu0`V&D3Kt^+T?LODF+#I(Z8d*%80j;Q@{q3eTKS$ zSfv^~i>HcX*bEHI9$d19{*2QHxt1p6y6I7#xhuIykkn8}^$|na6E_Ix*sx=+Ir8P)j6ZNo9P!s9T0BLo{Rrn#0N2M;~F z#hq2hoP`B|P|DG#s~S2l?KzqD(RAMIKCGu`Mi2sxYDle8R7+E9m%qX|Y_5hox~e#v zt(G&j6Uc5d-Y3KtSE3a_T8Mb8!!O~;1_hiQo$(!Z)ACH%WQObOR67=yUvnJTg+0c6qwOK!|C_rFE^=+*?oRvt}6%;Go+)NSu1+JeTkn=3BwuMER?3Ra1=c3$7x* z)`joSVw;*ixM}mpLY*4Gl+aJeq~m28Y{`pkx!p{AIM9L))iKvh&{%N{?Txas z>u|_8VMx5b6pKR;n9CyvPS5x;zGRqOl&B@$6n4o#K6xEm8n1u;kwR)EoTp#BTnM$) zG9_SAeitrxhf%Aex)!cCu|W391G~@Kl=2P1A{_zqKP;N4Z?m#k=eOWT&`2_$wjAf|h!}kF7#1(F5fj-v7&!vd~hr7B|SQ(vy zrh{-E$Y-1w6G^Z&I8^{_Tk3HWO>)%EGAtx9N_IVZ-H3 zi-U_)7{$(KS}+hQ&w1;qwJLGXAB>5D?6ttCg8kVA2{~*}zEdz4iN@3Ak=$l}yQ>ULjYZ<5bNJ{?D^;;2a2G%_$|Sln*O&kJPo=|x)rUbS zq51m{Q(i>%ygHcYVRJhW9=y5j0sRzYH2DPJQ9HJo%YkyT$lEmtH=n1ml)BIaLPc8@ z4hLIL7u{)vR7hmNP5n4lj=j={$!HnuBJh8h1S?!EYs`F$j2r|Weg2^TS#6ZFa~cue zV|SohBN}XydHLSGC#R;tyQl@TQd%Su5J#lr`; z4$?g-@%)C{HKGF-2t+SlU`2RZ^$~(j=tkLww4xqAWgph_HB1a+k|C)qm?e_SRi_r8 zb>;`$wlrf81*^=mbX{N)>2;Vp=pORcNC-sti|Q#B`kLNYe)9k1TPfvEhUWOq5PN~9 zDE)B*zI)!W&`)r&e4viX5BISjm}k(y(y4F8FL-*2MrW!_Y@SQZ1T+MaHNXQ}v0KnL zVnxkAU0*GmWu(noyJ2;ax$v34XeHz|lo+3wFdhGjcd-ucrW`(6Ki0L!ZKfH__6jDP ze14#nY2mx!+%hOuGnmGfT@fjqjdYs!(730grx(3P%+bji^xT&3VtcBd z8?eoW)6I7cpsCrLWB@Om)zq9yyDzJu1C#w}z`xmDPm?~}_ zf)FaB`I=um$DvO+gX>U(pOF(-obB{Anh2#L@DkrYCJWP+EWA16BcQ!`MOAw`M*Y~y zr?qZSvwR7->S>-7-onWZ1?Tz4!sg@I0%ik~qtxF=_1y6&*07~Wjni@eLX`7^@Ucw# zsp?ocM!vp{d&u}vx?xR!JKNtquQFZj^P?e&-H+eeuO%42I^_N?pGS?!#taR^{eE!jTsBCR#~Y*h1{Y$5{Zj8oV)e(P5gw@-v+0`eHoW z$@ZUZJ+xyJ<0SOnA1+0Az^tnFtXIG}`_6mejpd`_%+cc--rNr)>8(#~H1TX;51_ar zU%lA-$+O=Flg6_PZqIk`1<+G})l?f;PQY6>H4p2V;M9?KmauxcP%y`RmucH^P)93> zs3C0o%ov#~lXzdw!T1$!!klF+rkfc=yB2PO`QXs)K$KsnY_U&?Z%YKHn$pi8o_@@tf9V%OQY2MV zI^`AJZpp;qHmPe+KyNLv>tF~^L)r%|e*Oxiz~K75`R6BUWk9*gfp50#>bSzoHbxPg z6|W|A&%-OZ-wUhaY?$_0-yerSfuvzu)lQ-37L;W=P=GATn-Wyi$v~ca z?H=mCG&d5Pb9XopT+Fx%Jpss&3B?2j$gJ#=M|ubkBg+(ow_Py+f!Rp=Q6~f{rF{#F z7BCb7XmjJ3xw9ek!jbW)OHRyc!q&`=tjl~UIPuTHmrw$&$;-~jpHSci7};URT5B@|b;@#qDKdms+(59GJ# zJ7nR6A_dL1NEGO+j#0#VIcI(3>Z2^Nr~1!RJbPP{Bfo)`x52TVJzZ2RaT(rpV@`|;g1OX`xHH(>Y2xegPK|krq56+85+Ab8ELv^ znBPLsKCL>WnIIV7+&zc%CKR_y9v#X;aAlP<2^+A(;s zjRVr?I#<@bmF@i1BOPav9QW$r>^u8xol_!E`@p(iEhRjw)x_tdn3O=lpGlRZyo zD7Hs6TOAIjj=p-BUdTQtQ%cnm3$@oxITjph2hipTPH?D8Jr@uj`28l{Wp@B7 z_=r)<6N7gpchuJWU+tuzUh;AZ<8+lKI$c+iVZr0%?(S)G6w&j{Pn3!|<5xwMmb%Do zfEvt$&E_`N&}23j5_>IY`$YMyO!9cUgJ5>^cc91VEno^y0tjB#UX zF6^NoReW&Dv03c{+dy+veRsA-5kKdg;xrtgK~Wu z;S_%c6L`;t{e_iSPp3*QyWDj#jHcdq>P>6nLe%S-f1uxi;csa;e)86jjz!O0Nn$6( z2|N@5>kCpAs`uhT8d!fNIuUhvW*;$D`fC*n^@}~!@j3~-)DoCMxB<+7q80Eou!I$C zslE||FzmI+1|l$^m5Ipf94%dI4iPT#2NmAd`h2-M0iWNy{nco1uAxb%mieA&3^Rwpp`is zNB`~hsy6HGpSM&kR=@iD$XdICfPnpri)>MQ&7}F9_0&N^Q(;~auMfcXzA9c0V%16b zr+gc)SISs>5`C}R&W~qsv{`|67ebaz9pk3s9HYL$qJrG3O&b-}@Q0vC@4m_PMy6ceN$RG+D+jE($bxwSY&Fd}4fQkX{~V@?VdvX-gn1q#mi9|YW>JHjnm zXeRAYNn10nXv{LYC_vj3Jak!fEirqH75{XJFzDlfhG5bTRj<0kgNe~Cb2!(x>sHQN zv(DFl{O={it)9I8T^(Foo`QujOhU_R>MyC0i$cEUVo9gw>ErY}o11zsFI~mFdwD-h z1k0}kTu=Ao+55I?_?BfZJN1|H2xMb~Kp*m%G$0*Vn665{CoO?hen(h21T7rwzlF9p%31!?f&W z82Y9h)t+3@NVqA2p*IPgKX~OTCy`WQS8kVzkRFAl7Iss)!6F4@RIMlF+@QtU0?XXLX`~HV~yt-#HlN8vLFaLvpahZ$YT`mm403anoQxLU{k#W>Y68NduGAB$Y#_-%1jo917Vy1)2 zn-CVwh6@z|%gN`$Aq3}T9P?tDHGY7Ed^mo-f2o}0`X=BgeE5U3QjHm8SdM-xRJiVt zFCUk*`q>xDSV$0v!YI}p6%}!sInVYVb1*9y7u5gfF=d=!DJ*0|o8}$S619vV0SOGy z;z7YR=Y!mayTS|#$KKlVL*t)A!Lh$TU-`qdX-ZD9q0{At%bkR=Slv!W4NM!j}0Ou+n^nExAkgm0fgbm#RPD$^olU&DF^reusF7NQ@9j(;RGYH z>J03|3sbcf$+;-5vnEwl-YosWkU&0#C{~}ldOxc7H!YpYi;Nt3u3kbx5hY=Fq zyDjgH0LIHGfXy&se8V3$N7$+SI8wBw5!u%}u;?0pT@DH*Hl~IrBuT8bhs6&~+QemO zkCw=8v|%{_f)vf#KNebncBuV1AEpP#WcM4Wd;YmsAm4qjlgK`p+wk8o6lEv>jDR{O zKT`{{qbf9r2mto=rjD?(*!qtuxGhl0QH#Z}wtCW`{dbx}^j;ZgW{z`@|HFbc*&O~Z zlZ4L8eZ41FD~X6Kd1Cy&CR5CW!a~^msmR_hxF8QG354*<0dKs1Y*lk4_#Lfj^@&TR z#yjgDDmN>)8`RgD(su8Ub*bZmK`xyMi%S6aE>n>)IuOmw6yW6$+;h*RElbe5l160V zii6T&NK!<;tL%*ldHg&FOK(LbP7FuK~jgdRu|U6stI*G0wEhgwC{d5hYMYHcBE+RFGf3 zzxhYyY4tR z?|RM|MJh?zapZKS{-Fm-J9SB**w>Ad4ZcNZcEJHVEO0n?7k zQ-=-}U^9B`(m7*hOhG}3fj+l~9A##z%8bXM2$`mS-8!kwP68gJ$HJ?R)rtHEAfc zQo*O$@UVJet7I`~9R>^oBoGI6Qik$!3LrHvkd92umC$EkZwln58S+^f897*ZK``dJ z5F|fyMaFQa8-u;|0uS}a8WNV*bN59gZ84|%QvJ|O4#E0DGcLZ&2?HV?N-)I@B@k(- z+;0#XUq6YeSxZ%nu5*nh$&4d{8Jr36jeBTy0km#TEvei?@w8Jnz*ydb*;Y;ARHAmX zW^<_J6*ov9yAm*=4fhw3Hz0c@9ePz{q{Q%O(8^bLqf$`xb?BjiT*{zH0=rig^8S$L z(1)G*;z+590t2X)4vlr!)vMw}y-=rLQQ%8Vte_DhtTYACAc%yQXs!c@&~%`&`RwfP zWCA#DFXOTGXpMN1jsM{!BJj1*W(lackkRnnSp+oo5E{v@b*DtA`K;ajXQ*ddX`y3 z6g!M~#6Zdj>d&_^8ADGRfaz2U3`@C3AN;C*F8&uh2=O*(BMvjV72J0>zpUE{tUyD`A+4Yx`l^*WnwzV-I`1@n6F6QdyDOp` zwOhoU`8GI?^CzCyj?9dvuD8Z^%?Wymbktp7*?JXfs_=f*N^Yz|N29O|oiIYeBx4dx zIqElk^xI!DFxvBJvRpFNK;VF$g0RX~*Qkjn$i)-Jgf#uOP?eo!rWl!dC1 zwR1fA6|6~_AEz5uT*WlK?+0r6w4QDIteC?bb$iA$nPWOQ5AnYyVi30#nw5x(*KVrD zYjRe#oZQgBSzxN6Ff<-ZPPX+Wb-pt7|GYos!SBA8Xogf8=B}L04u|O!%YM&zRkV0G z=+j8L^Izwa#sfD$ANRk`Badr$IfSEgRN|cw%qYI{9G;0gy4Qd2Q}*J>eKvU(xBso8 z>UeyPJ=Jr-cFE!1>dGpgT$AsdtNWkVPxp&rwhA-~o%RL+qL;x9Pv z+Z6@G$k;!KLQAw5JAWeVs6!;wVfN}h8@kBypAr=N`UcP>OX3C};5(OD5rQi#b zVtF1Ct7`0bkui9UM@CBan-}V_I0dtD#|P&F4MN9TQk9S9r=e8`m^fF5;9+v&-?_;7 z{Z1=2lBXbk(X~^Y5#{scM1jP%BrtbSMf?tGvu=ea5Ci)c z+;obspb-(-ce?+6{Ix$3k%2C|;o+f~E^K|s73%en*%*Jv-|%L1;NN0a>!!seH|zP$ zZT~A-ejDD&Him~V!7<oQUKPpYwUyoj}LsrL&}yldyS&>eCPVfi{Z z+!@mFTE$Vg80*p^uvx{lOyMd62aBEM-U}?WFeNErob9_p*e+M0sG$K%D!NrQa({T> z`dsXi2~E0gbkcF$JL|8=LS>B%3%vvx#S(PjD zb_`uGQ%s{dNlUPSznlXks$wX4q&dt*^{bgDpA#`moyB!W+IA7q@*a$;1F3$B;TTgnM2{{>nGj|8W64K?qW6U*`;>iN3En zq-{x8CV#(z4-?iwFJQlLs)?%#RR~vj=$Od0v~|}Q$OmoC!NZUdW38GU-DO^#HOLGM zZ(<@Xn;2O^{@LdD)>%E@U*T$Qb)IwIv~&TGyvo2p+{_(n?+q&bWf#^228U!>^Wytt zkHSg^L1iMr-VRC1<%9Ra$p~(2+Jm-q;gFEp5gy%TWg;Q;1`C~z{)S;9(fEv_Ci3Dc z_v%Iwy{!`1vE{j3JB4eHlfWnzgkgv_J7n1;bb2PzS(nRy*^2ykC$=9JE?dB*H9|Zq zlCuz{;zl~k zHx6Yh0QF-k3=E?TjL=@6LY}n($wr|BORMaI$@iz5v)X|N5CdzT9Lt1mO@=h1(W;Z* z*tfdSTd(x|%AM#|q~xGsMyazB{PT`VZ1}M_dH>WDL zHI<0~(rT6kH&OUM8&gW zdpq583Gr1p8i-{6wZ9ulD%i>=FVJo1d_Lz&*P2Ls7$3mmBJLIh@(z|=c}iOos&RTa zCzY*^3z8Tuw1suqEwPQgsiM1cqR}#eh4u}|{wHb`IpP8dT91}3o|J-V510;_QqJ4F zY?K^zJ1K>%G|oLxP^p7=FDi?tD=F8stee3_&7Ti~7puJwo;D_Bghfc}=oyhbdi zqy#t*z0_#6>*D2U;=9>%XJ1+ElJGlcJ!^-TEJX?IJo@j(XdRSP11%Mi$uo)3s6?Z| zC$W^$ok_9ufB~Zhn7B|P4ip)2@9OsK_1x=cqx9OWgGgW~(cG!`y_xIOOy>IJOwVc0 z&2yZE$3Cqd(hE-W!769kZbqg^YBM6mKI^_QDQt{S@quEKwC}!-A^r$xC*$I3PnLO9 z4DPh!Tu++H=_Ho;ub4aR{1i!3K-41}9XH1C=l`SW8^a@eo^WGxW82x-wryjxvAxN} z+}N9JY?~8nW81cE-TD3Rz5VUXb7oG>>F%oPx8ADaXLI!&37EPoCuwc5T!y4`?rjD0 z2*>1h94D|;H!s1>sxL13>`v7UCynpNfM`0?ESUHO@Rv+&VIMn+KF8$P>%H8GdC79v zi1##%QNJLvnXa-e`-(g-7nS+f!{RD!oSNa>3WI82mS90jXz51OYq7oQu@NCxu7WF# zA-v+yzXD-rU9CT>`L4k5Ui#!OLFkk&I+RvGR4$c~4~FQ}iuz&9ZZCFvmi0?McLh{; z`vGV{qP3T}Kom7rCDWfYw=U$F8K`nTf9JD9NbW`;7!4T!rW&eAonU3f+kApLh9+_l z79V5e&VCEy;y=EKZD^xJNj#YmC`)H)nqLB;!)*rRuLpyX_tiY`nWKRMvuzx>Sw~od zdB6W2Zvd07{|%KV?}f64?{#ne6h|4Jy?fb&5DfQTOizOoGeYKm?rUL|>$Wnsmzs<% zToU@%&yW`W!n71sw&RHGgw3V8Feya4mgV=YRpU>W{O%ny&pj{^EH!7jpn?y#??$P3 zf7*H@b1i0U}8QX=5k)# zO#J9PlDy7N>zX}w0?yEJI!Z_uAm%vt^xdI=?9;^OxofcgMmN=Uql-YtpgF*uQ`KJJ zv>VIuoFRvlYWGD{)#wJ2D;x>KBx9Phapmu-UP-yeYL<9kOq&#>UHibH|K3$=i$Oct zQE$ziO>xuGGN+P3_NJbTZ&ot=6HR!Pou2ktyeU|!By2O!jM@)p6!=AkjP*TKhj+oJ zKdfi2SI>;yuPMzW?hQa?ovc*@iV09g)Ud&XuP(`5P_jXIq35E_p@rXgWmd&a+0ggN zp&c}V=-8n(Z${mUh}6VnKFF!&hi1;$bpM4f2U)#~+1D-Rrs-l#{G^MAp(3Bc9mW0_ zPyWW-=Y`F}wJ=l6)@bCZ+w!pn)PIa@zc`9lQp86!iBcv5B~An_TQ(K-CKIcX!7sj$ zxRy}FP4@DvuJDeL-oQZZWKQb76X;hz2geZKz#?J@Tgon>sz}&p#JxC5RH#X$$2%2&HtO2_HE z6@=TSXjZpIsLCl%IN7HoS68K;W+?jGAUp3{ZuS#FXs60eNxQ7;Sna6QdomKadp3-5 zow{=Mhf8A2mDkUrF0woCK?}pV=cgmAgyo;)H!v3luO^OF8&h=f2;3*L8H*FEnl6zW zbQJ1*upcdX=Ow$V)3$zs*V|(Nc>;FdFD)CQXb~ekoYE|_7_R>6(PNX~U3WvK$x4|@ zk5b6Vm`DGLJjS72mRP-1*C(^JDEtkD)FTaKiF`uX8(3rxfm9fdC6Opm9&n!7)Ef!J zxSwwcZT?tzhSg=M=llruT6e(mYv-j3Yt{gTf_|%OfStpiJ+dAW?M+DIQ+f-7-Vy!) zSf>HHOpPr^Y9`NuKTY>vyihx80Ep}CR^dO-Cy!>u;}t$yGgTp{e&&8h!GqiCFD3O$ zTnRQuL%{X%?eKI4mPi5OxQ_!J;g^oTkVA(9DLqv&Qrtj+_sGIF>+ghHjQ`|S@m0$7)BAs!U8H@(wVwBhs46ydM_i$(9$MRM}N>>s3gmDvs8tzDk8Pra&5&s zkyBPZ3}ut72lYLY$$ZLtXQS7H_4@TvDklnu6HIa5jTd(G)KcB)Ub0h=EEJAtFR}8t z=(nXyl`p~xbvsw;Rn&J|v%!4tPY2okLTgmx5$#hHD(xj*L2w_Q9ccVS0o-zJiAJ96 zM=-+G2Z>hMUA=>$C!Fr7n&ssvxw(s`xDWc1$t=MRYrDP9U+#_sKU5Hu5!kxk2LqNl z0`$Lz3HIXIo&z0Br#%1tr?e*Fo&fAqyFC7Yq6rcMCdZ|(YI}o8KH-isW*qX<$FoqyoUY5fQ(TV}?%jqAI28bwX>q{K+5N=mG zlc2FXYIaQ>AHm=+3dUrfUk6Og;?y*W806P^ku?Yd2mV0A|EU_xQyS#XdabOawx7*X zVy2B&Jm63gJLFa7MD7~JP$%!7j|6ybd;2hQ$@G*wH`l+=%N{2R)PUAxi?p6;VWA!` z866OgO|BJ?n{R)~y{8tUujz^SE28>uXoJQZPvrjrgJ{r6PQUNk?K!akP>=WZZ}#2Si%{UUFcgf~Mqx_UQ!LpgMuEc}f`EjezZxrVd5 zv@`lW-x+tD2<;B*dLeK1@mXdVZ{6RXYk0 zZyGg32dS(6!d!nw{)=gnUpZ(H-PBX&=KgY5-BWV`*{w9>6JWc;D<~cfOHCPOQ^AW* zG|Ju{32Uyg)-I2=_u-Fi5RYp$Y@2SGm*u1!y8_*@r@{$(58~qe8Ad>eI)BJbp`cGz zhn%sspAtg^d0~3@yI>p9+>mIwEkya@Qm!E(&eeF9r0P?*q%GwV zP_Om8$X(k34e`CSZ`E^}up#touc7IK5E7^E6XnXyte2Nc&RzIcFhQWY>0#XPJrbm8 z6zpgaXZ}mhEV*z0b|>MCd(ZKu`@Wk_oR-)U3c_^84_RqxiSN~>WfC4zWqC(CO;LT@ zt_UptQ3$HEIrGS|?({ViQN!`yh?W0uI>p5cAgzEqdVFq}`2QQ5K;aAsU(RWR=>Kk7 z&3@Ds9j?zsTr+usM1^Aid2OUd=g$~->r!ymezN^jMH^o)5QDi@BSwJEVu9eLDK4ZS<@6p zG{^hvJbC}xUh#}%%ZTGX>OI|ygs9Zp^~D5dB=3SoWY~{T>in5U$_|R<@fap8VA9$s|?9l&}bNO3(F&WC2D8t)u-eT>o-NL9E^A3+DMmB34vo#o*7DPLiKv-9&4VWp3TF_D2AV>*K207;|TE zG{Kr@q4d=Ca!=4sUEr$wN&e2u{+(~#jEK$+#D^vgGZ;5flxkBLRRd6`$BRqwtJNGK zwCbY82m7eZsm{=JQ&Igzzd~FlLPsdWvT)lk?*~LFr+U-77cub%i(^}hd$}DaE#r5t z21K1{GRVd0XMi&^OKa#W;;Dc7kABX(Swdtr_fKgaCeQ|rq4*)KrLv5=_RX=Z>GW;W z?XwzCAYS!duFcO&>u5;7Jcpm<(02Rm@U$idakQO_>9~u6uv%(p=Gy0$u4)yxu(Ety ztlsv%-^WcMYylx;+m0-4m)Xa{#vYrF#}KYK&G4k)Yq9cIwl!Qa!ZZ2^Rrx5KNnAOb z;|ZfwYfI-1D_cSb%}&Gs^Rp4#?DX`t2}Nz+&=l&!!^*@w$*ItaQ~!hQ-i?iwl@-U> zEJ?dzt&QOmmia=lDs@46E4MIZTftDFv%!z;ZSp{6NKw?F~|S11~=ldqfjrXVqw!II#Z9}#wv6hg0$to zwdYUaR|VoHJIPe@cgmBUoVHn;9EwlRrSOV>Crb^w-ILHUld$a#C`}W~-~7Vm>`D z|LSB~fOKuQ2cd38edp}qmzLH*nWnpqOpeLkF0QcQ%w8wCzVAhh zZVq55ZBjHRHX3!*ajLEfE2>+*>r_Pcdhe6^?WrHeTxg5CZoEW3K8%JJJN)MB@lTf8 z4^Js~WR~;pZou-Q8K|+}^J9MAf)d`fT=y|&)rIR?SVywD_(Vo5TX@i0L)oe}q+q~Y z?*&ANVy~si94zyh!Sfj;RE{fl+3|_CXt{h|)+cuK;30kK$>Fm0m%me| z4o$JDF#_nl98T=yz%h0Bz45=6rX2RNX(fULUuCG#Kyq?ia0BLoGPSRZe^qM~{&= zPDv|z=7>7AE$@{G;q2v>@y-DCy`7OybP|DU=^YH3@bv7{6Gwq+swh-USm?t)Fv7={ zjb9uuqZe~Xd`Hez)NUQMJPqW|?nVy_M^bP8?2IfXNA;Pb>@|9T?Z>~q1;qT{*K6tp zp9Gl;7`;F_rq&EoGS9+Kw@v1M;zI#r%pO5PBgWmH-Zj6GFJZ=PgUy8GbTjVUrqK4r z`tu>=I$GB0*K-sn+Hv7W2EIMM-7XokWq^CbW`yjc)1j$dLne|_w(w9<5Ulz>GiE*T zEh6-~QF1}q78SN97h-34`42`1Un(#hIx!?pQQe~_8aq$SYQm3DCiMkS2rO$g{KV!i z4>HCAe(PnD+(D(|L4I~vVRUeHWZ1EzTr#nMXVDc2L_60cOv5}T-`3M~Vy;Ch#kdYn zHXz07(!CW3uCRI02we-9fQy7uV1v`+l&6F)nMd7)t!WDePZVDt3l%|lh98Olnxx#l zo{SC)lOmX5p(ub{l}^7u$OrKDe*uVNHu}7J%{w+<{E=8{Otf|?Jyvq~U872FMBL~v zMPo9m0u7Q_afD6xf(wfzPRCkZu59g^h}=Bq5l7}&Yi>P8`gIoeXi%pbGb7wM?M=1T z9W${sdMlqF4A41JTcV69OR}iYb7+6X+xBhV>AdJ_VGjW-8CvYUw3+GRxSX=bbD1wH^-o4S zI;9h!$z9iVb~z=jP{&~d%wBHes@>~#IB{y%qjR_ASA%yCgS`LwAw%{l$;58u=o@nc z{PX*!gK0Zc^dqw&3+?0Fq+eJL$(HK772vW(P1Ai0RpaArr7OX)HC4E^^Ep}DBh|=X zuGGtQN@OqAIP!ao;p<(Xr`DksXWKX|L!_(0Q~Z+gvL@dHZJ5(A7SusEdqjLtQUJ0d z0}f+PZqGMT1FTGb3;d(lzoXB|*3sp4vywFhHzZ1yCQR|P&`*U5d+)63c-pq+q}P8# z5_~^^O?g%Ht;nJlRVjgVbANd(_>$C$6N6GDlKPmz=;nUm_tJw&4vCu;JAb5E8*I&< zg6h6l3osj)Nudj@PS=<|m<-(At3Wx*EdNwJ$zV%4lTtot=0p5Iek@dFvF%QZ|i zsDH~;AL_-Z{!M$jIfO}w?-QKXB9tAq2^D1QJ;>HT>i!K(Uo-T_kfdEL z(gUqO`6W&Hg5UVK@czfa?^f$+ezz|kIBiaV8t+Y-XC$&UbWS+ z68+$ZG)xkWxiUBfEpxJ8kWWOw){Vhs7)D-|zXm5N%KG{iCznQkHo%uRNbI*`1=}|~ z9_3F>folESo3rBA>nlrbArF^$>lfs#VASV|$k)YqU<#LJOdG&9aLD~d=j!(amPgYQ z!P{87Yv#?$RRpB)d)^vLKw;@AB-0xx>n89nxKGu&b+Oyx&AN0&x;+JMB?> zCZX%7b?ErjU_uiDDgpv3eyNeIF{(*q-9ud)6>&dfX7x}CA+(-46KyD&f0gTi6sQ4(VMYG$+xLhju}@C zfia6S2H*Da3OgGn;~?EBj?Ij&R5zD80)2*@;xwTG7{s(1HqvMRTO$^O8-r_xM%VP* z5n}b{7oJSr6+?~tDHJpnQztE&ZLO78Q2toEw;f2+I__b8b>Yya>9__PQ=Np_&`TQb8OFBKKCaE-Io zOy-dQ8EEbg>TTu}VY1RU1e@P?=n9(OZI^S;(MhXXslW^39-IklGI4f{ANOSwQm3v+ z+DALz`>eixhv+Me_Z^B7WZ}>{>A_})F+~FeE;4uv#rcVU}q|2ZWt;q zXfGbIK;bx6wsW{ZFj^)3>f1I3xVl>qxe9>;hogNePeJN!T7FcFYDd3^#Do&&s={Z@ z`WUlFipllgv!JR7-JU7eYi7*qhZVae((;r4D_Zf6W;rf$vgbM72``c|Z@?YHoPM^) zwWyv@8oAwP?#eUODJMrBdgiGd=MvvHd^O>iDC~=gLw@bZlE03R0|plg6pw8(%FqHu z1!-j>bm8J5YR1DMQbox$r&7>BibIPc<6X#L-4WPz%Sb4w9fHXU!ju4KZF>^R{&QNN zL=8kGNPYP*H*%uNvu7yyG&8T?EdJU5XyA;W&z~b0Q-+tZH276qWB99X1z)DAf!R~~ z;+ED}Z59#Bf7dO$0wF89Nao&0WwpiG9Na|g7Yt(5-gBWq+r}Q1UjIOEQHQ~Fl;WZv z&&=EcF#KqjYdgMod7gBWN%4ocV%*>(cpJXa@2?by@W7JWNqfdC)A8NFw2i9O5^;pc ztRoluV_Rv?NA@6kR+Y)IP+u=fk26*KiY%7nPyyl9?&rX&&?9ZWOjCEI6Hoh+ZAVwe zSd##k4EE!j3rTT?a~mh|oTPpQJdAJR?0@z(s4KrWXU?k#@sU~euOxhKUNH!zwRhXa z%hI?cj%W8C`v1{|g%9*~s$DS?W0R>#*3tOe(KL!Z%{)ARoa(C-vNibfHcA6FMY2Q3 zL(XL>5lvUa8vA+G(m8qs{MjDPFuK_h08W}rHbNEi6}1<3;d9kKQFj(a51E*lU*VZE z)1K>W@jRbB&}!T4F^VDWr_4{*%0ZudT(&VF4w8HlrSRt5>B}8bOkqGKS+4}217IoJ zZID4xoad{SOZJp^xwFEFba=Id-BnNQDZjD>UTd?k;d zP~6@AL&0ZHWdsUE5RnW%DHj2E>3*wl^Tvr}b49sAo!E|yqWt=CD{&ibHrzNBg@(Sg zYWTMJ$cE=Xk%0)jGvkM9UCE%AmA*R2J8C(~<2NziSn zx+{Ggx?g>6y6#E}9uXl@lqtrU4EdP-b8#b5VrayV89ZaShP^J&140QRV$okYxeL=O zE3me)k@<7fVO$YY2!W`2tzEf#9vk5xVCN(hkP-9%HcNNt##Y0Gc1K79Z?Mmn02yScJ zshK7nP*>Ko&$L~!9G?a(;=wtlQstFIx(4Yz)UT1}wN=^G-9yI8L+)IBU>RyW;+@6T$pzstMtfJvvM`4f~z!z+4v9{?6Lv;dsQ2w zkdoXFBXG~StBk#PPM^LP^=|4kPBUuhwDyWom!dVXPsbgv#K5N9Ey-U6`iT}xwbbY* ziq#uU(Q;Q!*2Llw6C5Aht{EA4US@xFylB>dhhiN@kkrVpx;&ixjloFKY#QA3&PvC^ zF*-}&c<2j!ISEK@n*i8)qj>V9IAj&jlkmcbf9YR)Ik?Y*!Vn}xxHd+uRx;}d0nP+> zQugJIdSF3FZMWp%>;hvyt~@~?Ja~l0j{!1%cU+8!X77KeUmpX!5`3p7s}~xtKL7a7MF{tL&N}r^1s4jg zdr(vR4OZw`9T@i4s>IH#Ss#u*fz+J6t2t4JtkfocuTp#eFXH%z74`-p-y{Zo3*s-8 zS5-uTh1pN0_VBhMW+%O*-e#KzQ8@be(!kGqTc;0e$sCkApysmSS6CtvF)M0rd^A+v z>o450kb(fQv!pR=E2~C2U7!}&Lt|55yg9eC|0V%thE^TR&E4RwS627V_(nBu)n>8b z!zfobE7uvA|GZGI(VFIYrTzd(6MR4)dtHl@*YM5==^_7*8}$y7AnX$tG8^w24)|0u z)1*xd6>3$vzyh-k(yH=4_ctSQg_bDPcE4#IA%;tCru93H-06|p4C}hJ0DFazjmf2y zFS0E^GGlEf>LK*s;xO#2w-jO^FNkwLm_fVLo(Snp!`7=mHhs&I>St*uTBs^9N4V7yx<_9NnYetJYnxYE3;g z4Qs%%>djtG;GZOMQI-2zR?7w@@ZA9Ef7XhSdWIC*$PJckLk%AiX}D;U?P!}QiR2;4 z1g35H+Z{g}uUZC~H~$bl8azFZ65togS9yHMS_I$4v(>>y215uNKfa?`+0bd=!^G{e|gmzyA?c*t*if-W%?8X!1v&p9vaeR1-S;23|3B6 zt?H|L9z7zgUCU{HJk}uSCn~A1Iy#+8JS`M2s%VuA!W{dqOZ&21)a0|1CvsufgIL(WFt|N&W<;b=nN!<(xN22QAsHEH+7^dYJnEvItf41@q<*V zDnAg|uE1`d*?}9uhniCXLI_Y<746H3th)cQJ)*w{S22$|k^!N?A5LJfP7!d8Re?^H ziyO=4xHTTPkA|tZ(-8>N(vG%_`pM6%sh5Hg25(l>7J}kc4Gi283Que(mF0bke_PNi z8U6*L6QR@)!fH-BMfU;BHMaHD>Z*;+-+pu-M<~Vw|A!`gVaPkC; z-s?Wm)&Jfh*tJFiAa|%~I+=?9=IUm3an@o~YgQ*p!+}Gw9dR)*=N6Ryh4lMom}0kv zzMP&l12aL_kr3>9GalGdt>c+%X`KZMtQ)&pXsj#cs%A&3DAe?buxi+|E z%Oy}zQ*(k4roaQ5fWthE;xcT>$Vjs|tPqB^E`3iAd?~;&6s@IWr^Twp$F23@!q`|_ z)--~^1dpMyK2cyYX78UH7&MY^bQ=NZ%H|k&2#|DVd9Fp#kB1};^%U+L73e|e==#A$ z+-s>u{zrIfCCbOBj_5WFsgNoOQLm8|%!ZXgaiQKSIvPtW&b9liVNtGkk&k_#s%5 zZkbx`;s~>64%8Y?1eQ=<%ymmV?dbXXL%O2GW3QFRuPCaoQ>AX%L9%p@zpJcF#1_pp z_{?-Nfr*k4BnAB=X&-w6tII3}&n%g-P)W7<9A<^?r0kxlNTtrDA4$PTMh-va*%*>2 zj{(mFf<`X?foID1vF|OaG%kphv9?MGY`(|xai4K&w$YlJir6L5P4Xw|&?9t3E2Vcr zLogCen8)dV_zA0@5@{PI&%8BzsE^ZJ1r9T#zd~VFg&J4ggSTGm-wKUAB|IQaqfwf; z+JmM+X@B4)>LJiCD_uaRp1@>&rp=eFVkXTm4Xu66ft2MeoPmtanz0M)4F4>8GmuEc zOGTp0`|qN4%FkyhL<3w$=J0;6HEO#k_-M#>Rkfiw^L%|(N_cuDayb!fMD%{%dXL_8 zrS7=ID@OO@@o0DJOR$4JD+c^TyE4`CL{2UrM;3dwhTM)RRB+WubbI7HxW|A`BtnKG zmQiqH*%8aJ!&;?2rX3e)zOkKsEEALfw`)>w7}>OTH!d@@b7>dqX~UjG+mc(dIfFGU z1QN`@Wjb8pF=}c7J+#~OlqhAuX4qVWE-|$blivCj0SHplmo)3fQe|81mr2s$l*H83 z$wMJE%v4Y)`n}4EpyjJ1$$QpK!koKLuzgPV7R|c~I6}K|7#2t)EBp zwu=5`3xwN3rh#DReLkY~t;Q)3L>&=4N7ZqVZK^8{3e7bT%Ye6mlZi-n%Di6ojp-Gt3HAzv!-_l+lA6xKJR|jqx_`kbd3T6Fbv*SkhoQ7q{A2yF% zjAT74>j{ovI(9X+t52PVO`^$jT#o)muXq+{!|Z1@%i~!o*}enfy%0%~yTJ&NIFPZ- z&r`Ecm89jW*wK<`?UU@A$krI_KERYvpYHgEwy+ls3biFpFnq~7EqW2{Q2fd27=qF# zuolBNmyNqFCYka88*A%xf_B_JRKk|1jt*ZS>!eG#dBn4vi&?7m?!t&t@OCO0BaVy? zafFBNXH@N}l+puNaG931r|fs;BIg`hx3+BBo(jJ1q55iD@iDxp_ zHOSDdzrHZxn% z6n-_7iP5bQMM-^sxf8-eSU~(etQaMu+cN5*sEk*1CO(6B(LOIY4A}_-6o4vv!{R{8 zQ`iq4BVZ~X3LZCv(nxM|MiwU8YdHlLob96Kc znHU>*FF>tcj5u?G!kkYY838izMa=}81xzL0hmo>B*@44|L(Q}dDu*5eqFHVP5$=i# zU-G&d6PC)DVC;;x^yn3?Y$sr8c;waOjr9z{x?<=8~j zwz&or@pa&kp+&GNfQmnSU7607x;pRbUNVr+^efUn+#(E5;Ab<=3x6@Q__rP=idolu zXiYr9KTr^(=~2*dlZ%c)O<+YS9S_0}kkAZ0F~2=v2=YK!h=e5~*H5XPuy zda%;2dZae+zc%n-(^8|^Te0BhDZn+Q9boF5I!G`{=zS(yHQ&)Gz{yvFJEt=Y63EsB zg`Zg0c7fg^zfYQqb(6apOCvHHMd~}21L%}J%6#YV9 zn!ME4z7{P#B@;E<=H#Fqa7o{Nz5T}n_0$U4D!CjSsy`o-heEU>!g8C_*%KqKSV?!T}1j%MWY@Xve zL7_93bGBr!h&ZptEsMLO&vQB`Iy^=tw+So9IwdpR7Xlwu-lWgNHC&88V}4O2xh75k zFuYI<&2+)$r7eF{0-Mf;QR?Hf;~(z<8_f-Y!3-Guc9scN2B+#%-J>f>Mp9P`v1S7x z00-*Ou}~-Gfi@?bJ6UbWBs(T!U)5-vg+=I0i7-uP(;VEJ>@Ox~=u+h7PRpvaSDA@0 z>HyF{D3c9s0K{oq@Sm*vd!nC%YyESXcy_d1t@^aXpl?0lSfz8rRDjm=@kg$gW|Tc& z0D4xC-*WSY$Cf8=Qvz~gEQqF?#C5PmVme!8kI#K=E~>acZb-%afXMaXDd+Oc74U)m zCa*tgKWDsZ`1;i3(xJHDL+cM_s&*Jpwhz3ahlmUV;lIN3VgF_ww|N%f3BV zH-^0EHF_6vw?wJu_yojO_5vhp^?l?GQ4o9I$ZZf`-RVx8n1Ao3IFFDK_%YQbe`;Ds zxu@cH+N*C)z=Ym<1)B-(!Yroh1(9rM2~cb*e~F8WxO!`DVAw|58hd|<93cAkE0|41 zT{|`fZZ2%4eVRF6gm#@edXs&S{%{~fw z^(xaM3JMc2SPNJ^#OHjCimYZ###@g_8VXoLb+yDF0+*zA_=Z+<>~%g}#R=k=;4v_n zN8}M^*75R*VbK(b5u3Rma8O$!=HD0D)n-Pi*DLyf6#4S`Asbcwz|nB*y# zZ2n6wlAW+RGBs5O>S&vjc1ZXek~}DByW0*Eo0CwGbANg2Xfzs4%&oN}XJ4>YtLpLR z&*7c&v_}4ZGf2d)@e04o1HmHYDu$+aZMc0B^F@X}uAV`kj$UOOFoK3J(dw-7I6HA!W z9-!*+MXJ6C3bxL``-M5KW7*@&j8&XsmD2hXRY%V5)ca|lvx{v5bH4)NOCA{?ZyjNA z-L(#D5W5k4DoXn}K7+3S3axLWRa0E^4~mQo4l2B}R@p*+#jA(~?>W!)xrd*Ld`JA? zd_^8+tq^>c@i@9&RY6;Uk{mb18O)u zwg>53jB6DL1DU7$M9#yP zI(^*0bu`k49rPIu6+;!^wyqi`LMr7)Dna#hN7&=M*QMoK%l8)gl2nUg?;szYjjm_f zPcySV{qMO;ZoDm1#YWHHg(@q5MQ(X}SqOHrvWL=JQj&PyweGIdTkIq6`Y*KHn8m%t z+KfLyWp*X4>M;UqR9b(-?h0k44r6`Y;sI6|&*Z=N<{WB2p|GEnOHo0Y6He0im>jZLKnWZ>HWtzQm~eGTKj=y76&gjd}CMLEipCDeKmsQw@N;bzWU{2k`ed-vaBbHNwULUO64e>HpYo%LIh>yv$g`*SwW?+u1*=(?F*$ zcB~7(zENxpDRv)iYLv)*nU_!%wxxb`)ct929D|?*VvC9y z?vNw1%8bf2st&@_S&>j5U7~oic|gpA+eRm0$EK2I(S-V!k;yrVk4;^575??qK$B_2 zlZy2$#e>Bjm+)1`89LQX@H2ZE)zDUqfRS9{*=6qI%v1A{pF)o}uMSrSDX%fj{O-p1 zZc2*D`z$9Xj*S8fG_xfc&oktrzp<;w7z!Y_R$IJ?Uc2!PU z7@1!b@Ttd&M4y+V2J`73qa1-5$)~75XZx>f&NEbj)GxtnB7sJWUoPAAzZ1U74 zM$=*h$9E9FTOjdcd{fhVV+GysZgs75c*~9%vb2=78P}kLf}fIbyKoY#$TB;b+v~j6 z(9>qH_on|0FzRj4aM=U7;K5lpo9BUdV>|ibc+UK!=9iI4_=ot13S0JuF5C2y2g(3s zH;&N^!!WQf73!MI>KBSVn4X*BtQOk;_=$0R2BPf+0j52$-?^_ue%yNqT^y>{O+FDWoA`|}NSuEtNQK2&lKsshdyZy#-cH3rJ$pq{V7OG} z&0wq4J=|f#+v6v6=)&^*JFFYSi0!Xd;Rer3<2APaCy9M zuc|kS92DebUr=d7`->IdJ5**si&Q&1FE697i;GUhrDIgs;6(T3(z-Or&*h!Y1Y|I8 zZW_-N{X04D_#xAm0Ho%Ek|vq`uBa~ximgst8RP$PWo0VZTx`f}_5Jx4SID7wO$b7@A^{zq)E1yH)c+avtYli=}Xu)e?Bz$h_G`<+b z*KlMn_-q%(@a|6LGErS^Bi{1qESoz`oqP3fJI=_a19?F^qK|FQ*QZ{j(YDQl-9Ubt zVexGDz3gEi=zm$Bx@ky;@vSk2i5Kj_X<;6{ld-z`(Uo0z@O-e@oc$0YB=o0r2&LZ6 ze4WZ6D!+-ishyqXVVwy|Rz}JX5J0i0aZ4o?swXuE@eA?=gOWK-2Br+BHnRx$q)SwY z_buO~G(%fQZQ2y%-hT(N~~gsKd;pzGAPhsX+CdM z!s+^oenEP2mN*sWfq#dg%Yl3c+uwWjcVKO3KK#GL*e*fxM=<`d-S@Mi$yS^))$yM|RabF<&$(8W1g;9U;3UN%^fDeC%_cD{$x>~CE z-Zo~WGefbL*`<&DpuGBgzM4gIq_OzAq4n218^r?5dVX#3{vwlg&4S_kN9#kZ75N7G zIAp>?n`-R$;zA}dT&$SkFg!kfufp)Q)cxtM>E?Ey1Pu)x_kKIZY}~#yFf8tfON5(qW{bSl_9$4=-~LNPc9fE zdt!Y)p`-Zqh`&|`y3{&X5{62TywW__IX z_#@Ibc`m{APx+V@e~C=ucZit%A!Eq~HkcEV8QGwjpZSa@a--?CG*my9hW^Q76{ygj z2xgX32*y*0GKsg0DdhiQf}j%Fg_A~MITOR`YHaXuZfl1qm=5QxnTjXYK0({$lokelaY|rhzqnuU zFKsUaJZg5u$?#B~!8KLBzA?X)4#^BcR_X?KspG}vvcRt#SF2N*_<7LAwRJz2l++>M z7V@=9%&?O1;GmUe28yv=;|J-7?u)_if%}7^HOf!8y_L}m_nze)(3xu8BMOo`tC#&N z)9b7pL)jcci7aZg_cFwj*@vq|C3WDx&sl?*!rM_}_7D^YK;atkg5cJ(>h>Q;6B(&j z6_<}|j>;~4Sy)#ccS@~*mk@Xi3ovClx-C7R(+&|>fppwrXlSS)^g98HH;)V*j(*i* z`=;-cVO)eHa!jm5!nZ(%hg&Y=!QM;FXvugO+(6ineKtyN_~npXNAdQ14koEvyhJ$g zC%F+#86(JQiJc=~YYq$O##1jPxnejSGO7a5{ZM;>hJCU+z745`qc{&aITCE>BNAl4 zT8bcN%Q~1$u)q@kB7YS2Wgy%0r8eO9s`n`O;9`bBR!|D8mm$TSyUm*SNYL>KiL24= zfNz7JsFAaPo62M-T{DBDlH$fuLZ-C>sGj&VyCD6Nf(W1m5dW3Y%P&@1OGDH3@{w9k z*`P4k7XH7bBsv&J;$Pjrv&;$73=xWBGzw|8@+ET@-1sp?7}N?no$AK{IkdT;lAHK*Ic1m zTD32AWJ8SNq33xhX|gyH6A!tPvj?@dDcz8cogaD?@=h53hMD{cuuPJ^{^h$i5pd3$ zZ|?c`K1CpW8=dZC&Xtm151?{V@e69iHF9+Nvfz26)8UGqNt-GMzL#KRiDjhI!4v-q z4k#(}N)xxVdYbzGxd8h$ul0_hV*%+~W>B7-yoYOn-00{3hI?ReilXCWTn|%SYmuQ-9!SaaxCH45 zW@s5j#qV00oY2}GN0H8ZgV65t&Y+)QLO|$!$mw)@z}oQ+OqCn^yoK;y{Ccd9J$rb4 zQr{}}t7!-nq12z9TW++(s<|{8saDA|#rcmPN(Is~f9!FiaqQFgia|AWZ2o*X-h-K2qErH?rWmZrbEc$? z)T?2mBtQ-go*#=sNWu2qD+~e`L0}X*%Y$K=A1j+R;~^<9V@bpT*Oa@&4yxf#xjUO& z_(x(hJtIjA!Q}EK>av*k3Ql?rX{UB8Jx4obA5PuLNIrl?d4Z_uU5>Xv((q5( z%Zy|P0nHHyGu4#zEC&65RtJ>mVF?oat}vMdA{AU#46Y_^Vt#%;M(nqC;H0UkY5&Hk zF(mQ)*~52wNgFFdI(&?v0$JDCE{QD=g(`7ctVWGd@G%}qpm1SXx zGqK20olepASNy*pdl&X&aLM2509YlmDWL)4k-?%}C)OQ*yAoZw8B0AC(*x@PSlnP_ z-{MG*I>FS;U0&&5&p&@VoQ(bE+gFuM?Tf=yQ20vgY8TF5%TB4r`UY9Jt7h-b=S!93 zD%?wA;Ea4yah#MrC=bwX8<2Nn!K*mw24LY_7!63$KU4@LvJ;Hr4_*cCyO9dM;Md39 zIDsI$|K7L`Hj@ER5zd(g?fvU~!_!Cch@|Ics+F6YpA3%tu^Nm0u~JYE@S#G{Us|r% z6p2!fmrCxOFG6 zbu@G0rvLhM<><0iIAhfYcI?J?17d|$(0%(n;ugtEIk7Mjt@xRXv}TSgO}NATf0+8K zu(-OWYZz^u5CQ~ucXtT{cY+2F?(Xg$2;R7Bg1bAx-QC^Yoqy$ipKo9Lh?8dZTvatk zRgF^m8v8*Z9GaA_%ZxjU)Opa4gO(5I6)l6C?pyrcn zYqc>Zi!4l$A`rt(dH53-B73e9BgLEbMq;lzpBTPmCN5T{WRa}fMd}ZgCZiNWKuj`} zLM|GU5y7ZGp5#dM6pFJUR8Fui%FhwwPOjZNQ-+MF3W}6f@QBR^T+je(2i{Pw^B*2O zE>0yOa3N$U1`do63N%UJTzrRNVC zc-uaNY-LlV)rC%XjlY7#osGg>Tjr-WR=K#EskxmhbC(K<+^Y4{B^mEKz zv}Pp3I}ic!2=$3C$^Cu(PL;U|5h2Z*h4IW7`yV&74x=A`fOU3}$#-zsTblj1q+!Hj ztHdeE>%yfasco=ogL82iddVweoyf}r)aySs7^PSU9Tx$|y-^A2NNp9BZiHClw}d|!4moMRCLhsGKu=I=fP5W@!$=gWI}z3c;4sPj9jrhm^>phg!gr5~;_G&Jl;VKtVn zj*ExyS|+xq%t*sC1Kf~po+5WL-cI?U;`mDQO1%VL+{7nk?Ay@U9lY%~`gltCfSAD$ zL>wihlG(W!^27G5EZu6fYVw+Ob3s#MV-@GW0Wb#Y6&GU)*l&u>XuN(f+2eF5Yy7kr zvc}x`Dy(EJ%cQ`n;CV6{8tz5QRG*0|RTFo~`1$#HLy!oLk`ukL7`5DF!1-^TiAhYl zzs!4sU8VO%dzs+7(onzt`_Gh~`T2${`r!_!5(=rMBngt++9Ks6uaL+|>!uV~jFj`sF;N59X2RU8NP;}YS8Rh9B} z#89At$k{xd@9=$JvA4JHFD)xmgQ9T$k})_E3Sds2vBuh`hli)9yWvb#1mQb0i2r>> zu<>wWTa58zKK<~h-wJLd<(QkNo?fhe58YG_69^ePI_BRE=82;4EX;(E#zi9lE%d(S1^4GOX|n; z6Nx~xr!^`oYu#N6+y~V=V^KFChO)+MfJr7a(9}aO4lJwUZ-2i8j2F@k6avW8-~R3G z&GnNrunk&Tvzw^YH39M%gZg{EiKO>G~fRmRF_@`#6X3Dgist9KmQjz z)0O(&R~GE4W!3ca5K+U`_#{$FhQwNlyMG`cAd)^gdwY5Lz=}gUzP!Fln5d<}kQ96t ziTGzmA-9r;hX-Z(Vy}aVoG6Prj}H1_3UVonlk;<3Dq`a7-}J-UAT=p4=k58rK*J>C zwy_33V#LMW-5Ho75-X^|@Bh8JrJJXxJgnT)(^Ea?`kz?~Us!}gr{+ICK0a_D;Dv@I z!8f0t(gT%f6D)8(kWm8*nU(%s4R--plOhlfc`Qq1o&=sJ<^T6M>V%=)PDhQzI9wlh zMR2}UI2Kbo!p8COvSi{eaDbhHPU7w=nB4nhdz)>pvO8BST$o(yh++7uQY;+v>tJdL zN>IA&4l%s&7=^<>=YW~L9_;qrulK|daoMTmMMXu8^z`&vCrv)YpaldHbT(I3GFNnV zcDgY!RfHe}Z-KI7jhoyB1v@(y9bp1uYQhNrvlhx4?e*Sh_{G%~ZH_YScynXpi&?z} zEV)J^7F1GqR~IZcBz&2w=cfsXDlmB&A*)fS3?`R0${ND|3#c+QLP8%bcu4;1%gaNP z*3seNVFGF>tB;6?Gq^)#Wo0FhieU0jpg;6ljm-3P%k=QJAOG_(e89!r2jD}R8XC8- zgplEFZEeH2^)%?e6o_#Tj<&ZAk(u2tHeRaf$KhO_A0J#%q}T|EjvlAXkaI<|Q>I4GV=K4~ zxHzjEI)nYUs{@G1OZ6*t!1?gmcu!i8;=sRR;ov-$kxM~AP)UKu0G~GjAx8(nLrlD( zYioNx2snud1A~JI8yW=#g?V&-UJcl4@Yy_-IM^L#lesNY4ZvQ5VhN8W-qHHEHBi>5 zz!eqeCK`#$P-L&KulwIpSj8?k{sw9bqDg`82CDI)YGJL6HFQu>P&Qs$Khr7Ef0Qr(nr=SMTZw8{W40trJdEL@g zCyf*s_VMB28^=k>ti>~gtC2?L`S$jAo)$)7lr@iXB;;$<6m~BZ&N+zkd2rge*zC5h-b97o%pivRzxZ*8 z=ncopg5`(%B?)F11m`PUe*xgolSFC?UXW(k!C>kV2xYl}>X#yNDcvyuO&C9>F~Far z#|8peoHXzc_}X^2w`=eZKBfc6P?7L0L$7maeZ506ky8$3%{~|I-=+qF-;CMrL*e1+ z=_*?hLN)z5>`6_vV!#DI3V_Wqj{imTnmK^xP2^Iz^urD!f;3W7ZwChlk94Y~p^(_D zMv^>09HUME{zOI#A%bAGTBvNbsC%NcTLQk!ol`r2xHV4H@86>SZCN+d$EPQcf$CNQ zYUm&cBtH%ma;Yf^z|3kOFE6iV2upvgPUYW9O&WQV=&|JHUlcIRj?T}0`8>-38_ODm z#{P>ecnynAKZx>b`g2gOKP`ZT?#i?(BvRl#$lpd9Z~eo=CCq*u9lpfOa08!S3TG`U zq`F!y1mmU#aw%Q_iMng@PXA|{f9o*fKn6vMJFa<&sH-m+ZKTr=pL%9{-FDEi_;e3qlCaCAAxI69F>H-2A+2BKqG zIB@!zGD=Vc#s8v!wKtyTd#SLnaEKIm2iSFUetv!*Kw$FI7~@5m9EAwT=Ct#I=|e^- zFmw!Ecp5!C-!o)FK5km6DJx=lZjr8&Fd*rrO;p%V0Gq2J>9HM5?oR%4 z{Y|w_4JAmehrQsR!_DQ^ncN|aUATl%P(^dI^bhI~iTGD285z&G6;REN0bdNXMm03J zsz`y6AYD3pDl03S{QdnefduRf(`i6Kq~(|H3$?P z;lmVj5l2bD>vEDR;QLl_w%#G&@qBmsPOeq~Kre?(JT;3Nm|P-5?jAB!ks93wH*#+- z42>#8tJ&#L(cu{=Ds!g(e#?FhyC$9+arD+P#L3lEDIk)+wAt3h60!M{oM80dm33`a zzg738>_Zh4P~-yx)MMIRfF;)c5Tv>8dJ!}fgtC$xRulzS12H#u2}*@Bu5KX-h)LPn zN-qzzn#~`yEd#D-EnNhEsk5-IYmEC0P1214GY5I>$9_8$24rt&l4I;XJAvUjRU<#j z6W5`Ur}H=|FEzfew?Ek`Vt7dwGb?hHiZEnT=}Q)irW?Fd*)?>!-IjNUZ@B{VX%vXf z7T}2Rs|K{G)i3Hr!ch0c6BwS){YovXh+7*F*LhGkQWFXOISP1PL@sH0wj;k)_z}k- z4{b)J#bcCDUp(#B81tes($^pJ_nau}rN;T&G*qsrof-C8#--W~l~S(V5cwo#A=C<) z-8jkUjP7{UCRmw=23#FT2i0asIQA0ogubdoAOl`JoCt;ZE=`H z@rkj8!S(6r9Q~LH{v37tJpILdQ3(1!aG(-_g7)>|qh!u2W8Cdob*W=P_$LFL89RB+QX;r7(zinA_s|$fL%iLw;OgOf!P33kW$uO& zUfO}?XevX>?hd-er;B-AUHY(ykru@wWvn6<%k5O3SMjlP4zmlT@ug!ZMX?0_LL^;> zH|fBbZ?=`Lt2W9y8SVPs&OTOx(Id~xAB8c)Aq`O9GX5+M{LinfR-v(MpMPbRzP+F( zlxzPnpzkD3Oy?0B?Vx0{zDgq$0PYkrAAvSWCXe@U=z3$m-Pg^QRuDn5N$%UpfN&ds zNMw@1n=k3EN^s^`%EM?$XDjipC?Ug>0Erq_KygcU4>Uz2ulh5@4LgofvW@Zh}~1jB}Il*yDA?S9dZ0=dp;aVbXPq_Sgq{o zt;O@c_*-angTPN&QJ&wz+qiGJoxi^FO4PkGaq=g}itTN<%<;38L-^@r;F1la9;>Fa z(^Rl^pokRTnJNU1xy>F*#m4=yR&O`Ov)MnIaB8#L#^o^N7j(YeD;OIM8>@=W|B1`)}!)-VFPFddeTU`wv)VsU6 zp_gga9T5V#bFRO?pL{+?>314~vBu{X>*YcgeSI+l&==>Y9Eso3&rk*i=~2D?%bBhY z9&=^dExMXGcZ*eq3z^1hGT(ljHQx;mInK7tm%p04t+rrvY1EvdRJjKp%&l_eRX~6m zYVOdN*TdKEUyYU4+%!L=dhtYdn3kIk=G?B>IE1{{CCgumL{Z+>)9Zxpr(YHt^t6F5 z7@57!LrMNMGCZLePqSbWC=ZmmiR~sx?F=NVMN6&rU?hFNauT@V_CuZ#?}5y*_bIn< z`xJyaW$+K8)%+Wc?W?ldjsr=frt@SY)>=dIntRM`xwI2}0b52$(~OV${6sb89gmy@ zzXrBe#xC?qICurV$VL+E?f!CU9QSoJ1S92i|~G`m1GyZKl|>jt!*3W@l<=znm}hN*X&X@ z811K3IFZ0)F|(jbYTr*P@yh^XJ4CkjaQ)T(_w){uO|-UX-+HvyN(bEd@VSt60UJ#P zuP0yh*Lu_$R!Bcz6D_KxThfdtFAF86LJjCDMj@y3CHn4VN_dU&i#D=<**^%MoT!4| zk&PTK=fiWxm}1?!xy8*_f79{Vo6_Yd>n4ccPxfKo7rh4v_sM3CJ+ivuh!pMm7^I_~ z<8+*-92s4OmCO0cxYA;=B8GofXUAaRCQIo+} z>Do~qbxW&tH@>5}-SG*xm7fI_mQFNMPf+-%A(`sr{D{ZL^1nX+%>9n(e?1khOqjg3 zbMeAg)Dguw9|&YbBzbS`a4MU&l`!_kA{QFZ5H+IjtTHFgmLYGv1~TOEaaxR_B{l z*Klg{o=-WvzGeJF?6Pb~kxix!)k$Ye3T7Ea)gugK6%Z;B0bcV02L0p9vO~vXi~*3t4u;L%i7v}+wcLS_sc#VV__I`(q>dvA)6bhzqB-SEw_5pv5)TKD9)BFf z>`~>BrD)S4rBP8`L~t@P4d3#C>=%;hLomLDaf7hB=>N=oq&QEoNH0r&D;dKFl1YTF! zOJ(t!f7K;YZI&KT4ZrlT($dLblk>~}D{b8#9g$y8Mp@zhXo#>vJ@SgIvt9k&>F#7v zK?>{v!qrGjVmF`a$;IlOy_MstTiWYj_|a#@xsHjp-KthJv&W$QBzf7>wbaqb)?!^GnfUjxoj+xj|3oEIV!DU|N5_WS5JArL+uuVk&9m>CQ4R1>N;42+zd(G2Hh|SNm=UE+L@#|)x zlcImH@Wxtop)NAtDAw25<6ZSv-yB}%F=FN?cT?f^PrWYQ7ZD<_QDME=;$g7%SV=`A zX%Phd4+p}hR%#jhGRUzeX$H$)>=)E)mxGx-K?DeKfnpn_PzpKqZqne{c3vU*$`LQP7?_&Ta*zI|nj<*f;T<+!aKZ9JxCy`M z;YdBBG_>^f6O5LU3b58|DTx#n+jC~&&VIbU66Ui5O;B9UmWt%m2pe8Dgmv<)_!lA) z7#MBr@4KR7!*K)b&zH{L-rhO47U3LcC2Awy1nG>0jYI}4c13FTav<#AFSC4Moq0WK z`!PVU>}QgBwh}eYmst;4T4J459Pta^10k_)zqhVg7y8v)>usgJQ`Eh~c z*z^k8`OjJOa1oop>Ac2+x|o61TMc!?hk1EdT*U<^XVW@ud{9%sbxOPd4c5=THzXA- zQ#TX|z!1Mm?CADaExyqX9AkN8FVeeYy=Bzd1jp03S#dMGDerG!+99JdZ{l`|N zA`~`qHw!*nj_l>$v*;GKjjY$x-tTepya#tJbfkuVrB%CZ*c=ON3-5G_n<=6|LKO+4 z0B{e5F3U{OP}6S&r@9|k_ly(Bz0LBQG_7>4B>PrBpk~D|C z%4c%AN1}RvX{Y02BzXQ%P$)C~`(8Hc&VG zn(a{4#G5`)S3UG?h^oe?{Zob1O~L&=fLUlj_z>41-VodaK>V6LPBm}%7xb%c}M4<-X?8y!En|kW^by4YtY!X{qV)Jjiys%AAeUIS_#D6ROu<_ z(kD8xiSdvx2u{-1I*@**JK>O(lxsWB5SJ*e3gy3WeIPML)_DF`AWh}p?#cl21FUM+;dF5UFKcOV-tZJzuE(dd&l)A0frpEJ(W6_?;D@x4uxXA;kg#2cZF}_BNx8{|pMM;RQp#zb5ul(I zk3t^niLlp|ev;bo36#P$%5U~`{GfB$WvQ@L2*JxFX@tY`d5_b%clfMRMgoVHb+w)+ zS%`rfUhvjphLQ7^mL6*p$gdEDKQwaeeMJ8*?>%#)ZK8);r|J$r-M*Is(Oeph%c-UF zDUZhN`xZdW`P`pr+iE0kBVZyD{Ajsrz5?m%+f-T3`*3WXtkqFHY-;DJP?y`OVg2OHQ@QLaRGka}#Iv};4iH%B zJ&JtR@Umj4-z@i<%B>sZ2g`+#n=_0R)z1?xzZDJMlog^vt|YH00td*T;~M?mtpXT$ zg9pSKNboBn8_GY5U3hLFh65!tMgU!pi{YC|AkC=kF@hGLJW$q*DSXA%W6_atrrtt7 zI4NN6HJYrB9bxo>9M=Iwi6#Q|gk+whXonf=&3dGC9}#{R_1exz&+?t04P}UQvj2e8oT@Vvv-mkaA2QwK16fL@u-# zw!o7h_wR{z?JrPrXGD0_!Ws;A=hRZ)tpsb!h4wF>4;zw3m)Iw$KOtB1o#=_{^jr-Z z-pnod)N;m>lqc>`8ho|k=`6H3<6*>%$rq8=MfPsB;fL`ey^GI_H0$c)pLXJ6KhmnM zbc~FiKJ6g$bK_4`tOsehxa1Vi+`%l=SWW%k`sFqOUo)MRQo1p#rGzCrzg)?4+JzPE`;AhTl zetTDga1h;0+Yzt@lJP#uFV;DS0~I%x*Jd;^xl|1>*OWVIhON;Z6F9@2hYd zkuiA&@|&T6N!&+4Iu{;!lcjvi_>K?Rf~I+5DcpNvkh6t~JZ%)7H1eI+v-mfbxze>Q7I6Z9XG7MJ#7 z;P^o1o?wQio5peDRxW;PfG&W=1{@0RRYguTUhGW9eE9(=rd*nZQg-{KW?*gjO0h+Y z!fCWkSDTNARmz&b3jY2@_xR#owHQs9@TQulxLRKqX*E;68n9;W-Np$>)ikt2HYEuO zeQg>weic)--&+l_anq>6L_$#UI0~3u#w{GJc1kuSUGYvJIyrM&#cYJe$37j-7O|)# zHIf~kxNkfjNp&nS!m7lZPkFW)Qgg;8%1cE@H2KNl$of0};enAuUI}w;{k!Os_&1T2 zpNr|Ek!N%gaVyF8y-Tq>{C|Y=04@$|&jAYzJ8%(PJw^*Zk8C7=f6*#gGV1qpg%e?z z@)4Gb^_W1seb!uG@+cCz1KxX_M<0zLKYPoAs!F0^c}O!w@gYp#MI2$D7ov8T0N8Q>%&oT{4J=I_ZORYzqINHWReGNju{?Xj-@OZu69IAdfj9X2KwsR zaPCK`UVIRU36GgAw}3=LJEV=#2~(WBqR0PdV{`AtkY)Cm6jtCRc)V}KD19F2f0`tX z&+Qz(mh~;d>^Z9xQkaqsG3gzI?Uawt-e!9D{_@;Aa2mq$yhA)`vsuORwOZqI+4hHm z@^bz{Gcu>JR9)k_m~T8R_UZfT=D|Q2^-NP?^T{mQFe%lkIiE3t zkoBLd^PQee^-^8;fJ!A_(!-O(X%Bocxg*cYB_Gu=rIrx;oOuc>odew;+r8sPQa{Pl z?t=J=?O~QHuP{&D)frOvchwZF-b+ZNfNgoTW+r9lC=mYSGM=C=k+}KNX^FWEAS3Ef zNo%08C(8fG!GRb;Xg~XrR{pT_5I3|9%mB|3N`9RckuFCz>3<(OJe(| z*J>@-u&zyU_%q7u%dFhJ5Y-clPg=|Z;?_|W{}9#1%JEa@bAY~CRFmSdf_iKLxGu`XAKyXhU{uTd{BF9|bu1&umm{WU#xL`zi+zWAKca}(W0p+i|WE5HrJ zhM;f`=suR~CvKBJOMiB6N(ki2OYjcjPo_^b>p0mJfPz*&6FmzDUyH43Z8VJ|bH3vJ zXYV=-hrT{i)qDll%O8W@whjzNuS2#CyElf+uROC*H~xOthIFI|W*~)Pm4i~9 zRQ&ymo)YEP(S(=x#f$uObEQXH2}o>ZPi7H1&&!*@lE$p!e#7Y7m!?hK@Vl9}-`p0@ z!~v-kk3N_|4WXFuP*>m(Lg@d5Gb4VOrxY^cKvhN6JTMmXj6-7Lyj^^AT8VxA=L=*( zD5TjI(ciLrw;q)yYAC;(Rd=dSjcGMU?i}K#E*)_`gQuEs9V)loe3E08G8z^kL&~4Q zwjI=c83N}D^z8z}ni+rkZ1-*{SzkSLRr#Kxq>L#qGsM77n(W591w39hlQM=QOJ8WY z{FKa7_0Enw#&v%GDnj|Z*<3F2GbLljqF}=J{nVG5GDJDf9+~LOr|DZt-hOFWUWr=i zLj}O}MiTvL>~2oz7xE4$_HDc>)r#-kGTxgj=YhnRa#+SWm#8Jel|CGOJ0$q5mV@LGEt1f|MeVK@m4BX?N?nJ5AFw2aaIPHZps!$xtXv`GKrBwHAN5 zYpBD!!Q=FOSN@{M(14^*;Sp`&CTv%4@)3_DF*X^IEl{ntRHH1 zC4drx!NW$iLT6hQ;P@vDb}eNrKGbp&AL_I_$r{SXNbhOAQx(C&nO~N!d?|j_VX9(i zI-A*%j*i5+lUXA(Ud8hd1RidrCLbhXug7R;D3Yh4) zgC{nG=~ymI@XdcSh1UHBhR@7_!k19Fc5NtXJT@B7DrY`)LTo{;zNJa*up_C0*8x6#}U6 zQ!R02$#MQiHxs%5D4Dzz=UY%D;cuPm1U+d{cRT)3h~AJ-Xmf5J<-EsxE+t^{BI~RD z4&JLX?Pw{Wu6e}TIGiS({QFm>{b1Qu%lyX==hLIv5-eWFy>AF2y+*)sA=l-Rc>QD2 z@-1u;OLF~Nh9%R=^Y1&fAu8Cy+vhgd=lL5mu96eGzRsbJh**F9FQPukJiL1qsi6N? zWA3qKI=*H|y5Rp^agzQ1C30|2zB&jx?SY&AR2@g|A|XimiP1{qdt1dz$8#+h5|DNj^i( z0#U|F;m{;4*!;ZobG0l~|BVo^W?lZYZ?-*yCdpI(A%UevZG=Zvz#I-UWo4Bs18RQ0 zKZpD66wyG-4HBfNxnI7a2sqD5-LfQxw=H6aga1#MCAr4&K&cfplE#Sp?$@t6Pc0y@ zof_|mpEuUbd9sj^upiOKuMqsj^@wAgQ7C>%A=47mk`lY8e|f#SD(uc`-exUkwxlD) zlKOnc+(Z7ya-j#4?$W#a>(i|(XP6esnqvsziL$`+|7in{h(vu%5Inzs4St}Ac7gHU zH`a=Ci0Yn^pT~ZQP{?5OjyGFx3j2~7D<3y?H(kI>Z@cnvUq3b`|8#fE)vW&QTlw(a z9h1evf~dQ=7|;3BaYbqkTRzDsRs8R{+)EsX()7KD0=B7DGGJ~aFbD20=Vre_vjx=u zP*=q7V(AgiLix({#ewHGRajFi&r9p5Ztd%Q#k@P1X}#<-k(ZrOahbId*^lJ`@#<1U z&zHuX`{f4Y^+HwK;p9z`B+qpb@Y?7tW4TL5)~YN@(7e$L!44#OOGp?%-fzCD5L}48 z`)@*`!yJ5~Zu-8$57P7z z93wAo13iVr# ze%bh#P0dV+w{*+M=7nOajvVlH@)rQYEtz9q+f6Lux@U+ygAqioue4GW_a)`bZ8YD- z=7D5o-{tk=YZP~cUU>_^vW+yn_9TC|JYZ=jO|oWdi9Fnt3q2xDX!E)(c@J2byyaH9 zq$zjwtf8H4>RML@9s;-V`Ut;A*`#TU=dzPJG*2-)>{t#}hgETN-b@O+!hoO!AOhVj zPpglB>>Rzp1-)l3+pVVqoOQ@)?rb8On>gN(X4SAei_UD+_m+OxFJ%wOvY)_9_r5Qe z$ILzihu=iU-WlKZYCdMEVt-3hv@U8artBW}3U+<+kk$Ed>ldK>V=kfWBRv-I>ljX^ zvOX`tw|6W0dTm=*%!((&n%uB}7_onD6s~5>MFx3L*1QrvCHQ`=E)_d(2PniHprj7G z<_B`%VB-o_M?!DY>MY!Q0FHfT{x=iNL9HOH*Z9Yzh~fJSeK;;c)xypMvG?t0wB4q9 zVlJj%FEZO>eYfp9%W3sJd(!99BPm7fT)dpdx)R&fHqeAsWPc`5VckvU+^JaGlIi5> z5WAe})`ql3w81}uRj2l|Av1O(Ed$7A!aYR)erz$D<)~Ro*4Omq4086Rr`j+h9=^BQ z-hci+NT8hbCcA8U=i>t9Z7qU@7E%lF4(`p-Ogmug@Fj zjU3$~qkbuaXtpx>QWxrk+-|Mto;nxdt-ty;ZL#r${JLT+{~~OymOy7Qe=XH{*$$vO zm3(&`k@NWC|sDS=}@QRWj*GZ$tz>F9>la5NU5r1)xD5GT4nREMW zj#`ghVNr6R-NMdQ20?C=@KL`U$C=O&=%bys^{*=)_LA)%p-ti|Ny;~zheEKEbaw+K zRL!&~*+$6^U0J6YceXW7^RLjWyRm(mO(Y@=xEPkwJ8R|vni9HF*w9wKR)!1mdc@!c zE`&%#&X4Ug!nOkwCYI#mw?Dt^Djr#%vb^Hz0mb(_jucnqpz+!ccgm4N^z({2U!-;T z8wX8??lYmPJ&YN1joY7$q8e(QrzKLMVn2Y^v7Z3VwQhOw3DqhD;EwcKem!GbI)y0J#X8 z-=S0?kEk$OI)d@=Ji1JppN(1xaRK*qd1Nlkpoj8=55t`CHuCWSV*<48?+e1ywD`CY1FRk~L0QoTR@kN7$= zaFZwj3kB#*;iO_~C6guW{1>3&BEWn}17x+#+`Xv~{FUUyYoF1XEBggL{%DB^`zE;k za1dYigv|C8FS_Rkg_Q7Ke>(Bq%UEvM$o-$RZ5qxmqdJjXhVr#r+;wn^sFv?E*GT}< z_2{J5(G4Vzu~nM&@YMQ$CyFsH2B_j#E?Ps zPX6eszlYs-G&`vTOAz@E?mLlU&I62Cy2IR|{2Wb;&u|tn|AOHzn3xG3CaspGvU#7f zWq z3Ay%4?Fit4K7-?^LSQWmTjR*lBMG?3bRDaA+qKwxnYfeAa4*bhR&&mGakOo#Cln^ec^UG> zR9fFgd$*O}#-)-M0wbhvQJY*zxKl^b7#3vGoj0t2#)<4kA z*+hx?5OXnI0rcnG+sK<-XF|YWh}>CFt=0J4UC0KA7}~WC1J@HrswVVr5-7K7p2K)u zt-o+vH#MzIe&ewckqZ})KAQ6b0v97nH~v0uarP{p6%6)Dd6`yE06^w$P!-9(E+71* zm&Ak>EM{wg&$-zIKc1CoId0}@K3C3szkFx9D6zL(I#CF6r|_1;83H;LYi5dHSo<#b zQ0z}jnP&57Zsn4++<@9EdyR6G`&T+o9AiCTl{c~hYe$iggEoBr${BEX=1+z2A_Yh2 zdAfSU;+hzV+4&l$_mZ^)?tN}t*;k~Prny7TWz4tGWerbQcFhQ9BOLTE-WAK!L#{MU z_avU}M1Lp8r?C`x_-TaWkF~=cjMK@aZZD3}pU%6q?q#8tl3O)vImZht>!F24#|lb5 z1;kuqxBmoapqP9iL1sxcrLq*8DX9$}X7cT5hE@pOZ1N|Ys~t!#5#%wCy!B6yG(rbx z=@H)1K4xJ1>QaVEJa6Plc|qbz#D|O9v^Uk^N zZtb^7f68SG2Mbkd_o$}J$^={$Bepvmu60+Aug5Bz!mF_On(INYY1h~J6Q7TqS;`G1 zBHA#GL+BMSf67J#rF-8xzNbsG4=qR6*{zZ7$HEK4Fs z_1dWNx{MajGKp(jc8JP9hk2{#foqyiiu%}LVM_(w`}SvCuNQn zf1fu6yi5kKF>`XrnEuJ;*%NF^V0;5Di0m8?y*y@vOK?*3Eli@nw1& z#JEeGC*$ukMofptfQ2>=s9G^~P zHbWbF-}BU6)dxC={T?+dyy6;d@a{U#=pJ;g$MPlQTz3K58}tJ!uFFemm@hvo z9!zwA+623Pf46BWC3GmMC^?zgGn!Oh8@|NID;++)yEM#|UEmEBRy!fKR;(#)zOj{^ z>l&iD&Z(jCZw<*93*`O;yN*Xljr4(Ni|i%wwRIM2$F@v5qw8+P>fUm>f<85H^IWzi zKBxSTD$AvFFN11fTN@o^H_^X6*$240-GIiSlW7@diOZL}@e#v=5<%ty!mxJ?U&;Qq!M42`1M}r&xmc=lffhO%ZRe;)Y|sh8xZd zL)09!aU>|y$y&wm_xvv*6@Q9GGiT27%zt*RRIL8e)^#=7_77LqF%n5n6X2izc(H(x zO<8~sxGT?2(#y6-Kd(yI@G9sKlY)r*vbxc|1t6q%(XP(v#yR46cIX_duGp>!KIEr~ z5pVPile*HR9`U`W7{hpHiErAi#!AL@y3*<<(F@rfpFeIL!|PB~6)VX6ELvZT{F!j< z;PhmR=yin$MKvJVyjJ?;L;Vreb2;8DW3~`gcUawu!%sOSJZvAB=~)J3MM>*d$PXG@ zv-IjxLn3B_C@bgruSYeZDy^I3yr(awCu zcXV@;6o-p%rdKOczUO&;Z!nySiGO?ZERtf3U?^Nu*N7L}2f~-mx{!DlPV+HNLg@@nD_=IDrGzIhOl(@|j$!hIS z*r|RqZM;YIXmp<^IBHb?L4ywe^_ixL3x1By3{ElAQBMd&NWtXWgPYe_x)dNBSzzX!;~ZrI6)m&Y zOKPQWHIi7XzQxosI`ULb==f+jE*JH-Zy+mKUe!E=dXChKT%|DCp+fQtK>^z(n1Ds> zm%e)qXH<$n3!2h;Wk@G5)grC~C+*iS9Oajz{40wJ4d_$iON+)(6gU8=O zd+ag%BG7HqqxIdiMeO9gsL>=FCfrIzB$yjQ-IqhyDkgm6@qDtnbbsX7)Aajh*Z`9% zz%*{=Ox@0&STM&;rI&Qp>KP|rU{D0>k`wnh6@w<(ptP#3j!{*#Z6r%iGxYUxjx+t2 z_H_9B(}fVVJl*ZdLw;YUwP$WV8XLuS>rL|+7uUk(t{ea0?~*E+-g-O$GB{GGR@uDF zb1p+_3JnN`Y<3}Zviivp_f79gI=JcybuqOGN%5 z9)~7UuDF&jVMpP8hq3oY10wj8xF?@nM!Si;TzqQU3<8pe{) zWyj+hXNa>EwZ_lf*E-2VT3U$ooa-HI$H*}~%tMm+ zfmfIGEX?#mm5%tF$fFhau*UVb`o_~)*w-!gk3c(~+;7*te>@XkuKxvXxX<7j7!Zj5 zUYx|>GSVd66q$CgW=#D?Won2~lI=O}vePz~%#jvynZHtUe{vwaZiuFXaC`s`N{}4T zRT}K!J*=R+&lvkQp#5u3H@gJ%zgd6@*5?a>M+v2Z8oP!yo?-@T8^!YaY5S#T%i=eF zu##^UX`wOn*DqX^-=aIqY>Q$2avEv;eJys@qC<0`16%UjFf+*`Wy_B#)-(#Rufk3>lO6K3Il9oNSb9FJ&*uJ_ofdk`6(-!j#MhTE z5)@N5y%T0k!!e$6#Lw}%WgB1zV&0LSs$R&8ZXm}@jKJT8%X9j#0SVkj=M8<{kb_%0 zAc!y@6&lM|FvoE3mh*b@Xsq-c8J}g{B_<@cj=PDr?#|W7Fj~7-Gefhjv@%@vbBkHR zpWe}_BTNe9MAAY;J5V-fzl=ck1jMz+`qggVIySdjut$@-0$3HGqHNwLydLp5d9FvA zzGe_=<1!ceGf95QOz0Q^2a+)yWe_x?tCYSulCi#*oR?3xr`fl6FkRkHu$sRkErOd2SmMf0=emR%t=+~-F?OjMxLS8fhr#d#y9Qr+Xb;N8 z11Oqaz*>>nrPFEjW+w#;t9eGc4E1ADp5qZu0e9g;b<&&odeGOW%Tn`)m;@w$K1lVT zcB*WgN|*=A$aw=dhl2=yb(HEP#BZWRi0ncg;(s}A=%@;eLvkZO2+({G5g@RDsBxgW zk)M(;Xlpu0?1r<8(h;?XWZN4xT1mEjWaUQAxeIR6tpfy~OdVvC$>8V(d>)_>EMQr5 zuyUsrXDbOsEu(Gw7~UrPrE+&1pk>>#D2a*`dy{rO%Faq(2U~TBSA``mulE4D*tlIz zSQF7CHVp&!x%|bM+E6o7YOa(QI)A0FZGBC$ny<~0C|O~UudFsoeBFCw_bjo5IP21< z2j{$whOmoKSg8HDY_axadfxUY@ecJrRvH%m+|bom&XkXkqwGUu+(d9Jo%98EuqX_D+2+s=02wDf77YvYOJ(i*q!#kjeqY`n4 zIEH=?NnW@-$kBMfBFC15Dx2(y#+YmZ8SCTV9Hwz3PAC5c)J+W~%>-48@9^_t+>PoD zF$mBo(zzgt-WmW$GIeY`2M-^tSJOP#|507nqwr3ZH{I&Wzd~IT1K=}D6Bzn$LhAR? zk;=jpVCi$1T{n6eSg_E&@b2_UZOz)=;$q|peDgfpM?db}nRRfwv1-1-?o0n6@aGs` zEhC@ZGbkMLnd313BLII6Y2!%d_w_m@VmL$%1(CATtYZwnlFbs3DeL%>f_QF!2Osc0Z~jQzNtXh@C? zSzNxCBb~rD5m%@-bIAL!uf*@mY>{(KAU{e5^AWzLe)uGa0MSHXhfn?DdpE|*_bV5< z^L*|1PiRTvoCXD9;d5#g!9xN?L1<-B=+7T>ulx(CmBbDaNFk@74|4<9#XiSi!c*Mf zf(22h;+D^&n`Fu*vD{IeKs?1MgH%2qm?BC3I4W{4R2aQ* zJH`+>KuR-W*tzVdpJYf=D8Be@R!>xY@Wa!9VEtH=et&l=iW?~H@q@CjLP;33wHI(? za1az|m(oB@>*oYHJw)9v?mk-C!6BB@Nn--xTWkE!-Dz4TQwiwO`F_N)lH}lkE)fir zrvu$6_|5$wX3I&F*^5cBFtOzP2oW!dexWvqBZ?rq3li!O<^tH~@7LG6Myj?WgxOL2 zJ4HO#pQS4JMIY#rf3kT)eJ;NwoPf|bi2xsALQ^ zA|(#`vkY&#ecFjYTw^5f?cXOT5Y#lM(=Y!RTY%hUL`QXB;-*Lbc#O};0goCcN=ie` zhfWkk8hQdIu(P86|9JWa_Q;xO-Pq{Zwr$(S#GGJaPLi3J9oxplwrywPOl;dc{hj-q z`vZFK-c_}#R=rqjLaSGF`v)U-Z7hX6C%2MD5~nIEDPeMSS*6IK2*XHe9y1I~oX3#| zE9)|6tVI5{dobRj={9`uHJ8lS7b-Av~sNDL?q!{ ziV}Vjo<431&+^azpMW{ichnW21r(7CD;^o`f_V91gBklZQE7u{8*DkYDZ)J(ZS(X7 z;kJk>L!ir0-Mm@_=m((!&0As8?7KXMNMxW+QW6*#k-Q#6Xz3wGU;+W3aP~1wkC2go zHo6$Axuv;Q(x2Oi=s2~;ywS5g2n_!%I!fro-dvyKr*nF<@e9joDZJ^2o8D*L?;Kga z4p719z-$eHf}MS!1W>9^)I^Rr`UaTyj(iH(M(oNBB&o$t!b&GhggUhzglH)VqPfRn z<;U2eWGV9pD9fADh56Ub2`VS>w~f?+FKUFng+^}96N zTt)sSu;U^?K+!6nWhyYPCIxcSG5M(>EfNPp}Bdolc)pmXKkn?3ux zptyg&wEJhTKJaWpN3^umPvorEYej;*f2XT<7b%I_>ZyYFc6o5r(?eR=p9)>BZ`UC8 z%{yaOsHcR?t8{-9wh!JK$XezkE~pbrR^OX35BoeJ-GfzmPb3kVF8V`}B&*E72`K^A z{|B)3ZP`AGY7A?fP}LZ=iH){Rv9oXq!YxnHeRSdch-q6ZnB#Q7C4yOc*j){tj1{*v z=K7nCz2;%~EW2I7HJ`%~4-0AczpOm+ORb+)rS7c5JX?YofX$=3h=Aafb>$-k+vD7$ z)$)$|rj;X7NZUv}Ux70U7a3ME zhY7s(8ZsH*+NZSDDCF{9tu5jAMiG`H>iBKfp^#mx4Y=QHYy8)91sj9qo*UPPZau8i z?vuZnJocpiz#DDESv*=5TA7qQ8aNUUZ-%G3u(=?ZZCnHsnJQ=d#{v+anSijT^SuV7 zgcGw-4x+BxdC|T+WLf3|_ca{7o`tVi((a}!G0A>VH>&nO&LCw81K3%f`oaBO5Rz(K zwp5yN!H~oy=YORkUfBS@n{4(<28)_ZP5@_%jUh1nRnUsR`8ZWdeC_qBO9EH2I`I?z z`oZ_>{AY8yx~*yt%d;*3?W2?3YS z^XC7}I8LQjJ zOg2xPQaGy$ugiyr`wh;RA4m66C69CEBQU@G3=%pV4~Ej-tRL2OZ3x+xUOBf*M{F5O ziDj+-zz`BSWvcu23?L!q{%L-%+vgN(2!iJ$60f~?jNeDDJBTT?Ner*dO4`yG!&o=x zYY`-@MwHzj{{=hBeR$eY7Medz<+J&~`b0K8FAV!3PInYbuoScb9OS1JubOVpa~Gi*g|%7%w40qLLpZ|eZo#PP8S>7S-@ z;C}?jPyW4xu`cP6!t)|{`?nG^L)ruKeMzwNNDIt-puGb|)0oEiyo$wed&|-Pv@QO? zRrrUS%3}H44AQGF1}O~@@e%iW7HiXvZS;Qok686$QpT$4A7Y=ttyfXVm@38fyOCTc zdY?JZODu$>*hg?Q<4kT{ufQP?AV}@$MHTQ4x4U7(fFu;M{ML+(NZI($weoYSwG;nn zqr$nnpT$kESR&Ex>{;NsBq#rnQ|?0fcb!t#RH56#(`~> zLxJ2~!C0jY3JHhPysLqo<7v+Uabf;`8TfjcmCcY#;g~UI&us4BuXN^piQkTSyE*IY zG7X$;e@V}akkbUdQ&AMu24^OB91EyW*fNv#TT_#xt0YSf9=D|G1oI_QqPBk1s7foi z)w=CkKdP5?JxI}@zq?%2Y$&`LLmonV{0O`7%$5umo@d zaLB6LI3?YR9pGHc=U#Z4#G`Mn26Ep1Y!q!*q8xM-vRq4?_%xpS#vOkAs+*&UQ{@re zlSmpH9v7G_t<9dk0Br+rzh0Y5C!8|{KALG~nouV2ym@)Ut`gPY9|;iV zNmYCIh{G#J4BU-t4)aVaiJ;5Hcy?Qf;CnZub^Ej*JZZWpM)}c;u<*%G(19b_ZzP&B zy{ca3(QNVze$*W+%_E<3Cqm$^{1KASe=2&)qkayyP~m-ockSbNmwQy?p6ma+dk5A? zN7ZUP#(AV7*#yVQ?~&ncIA7#FGm_srs7-Zkm1`HB8?fW`-Srb+u@Kn;`)MOhGPtn5 zOTEw;Zu%DJl=Qe8@=WUD5-KrI zB#9CTCSb%>i|OB>5arv62Sgh8qkszOkHOCO(vLZqA}8Jv;Y2g7p&cV0&UYuGC*|CU z8*v|3Iv*OgWVs$-@zMRdlkr|~C7eHn9Nfi1>=z*=?7`E(>mm2AHK9?@7N|47H^sNl z8E!p&jNwUHJpkKqfys2lwaAq9jujcYY}ak^=1n>Xb;SjDj6FPKcI0sN(ErpCNxITw z+W7;c_qTKR1_-^w>79&#fy3c#&Po=YCFkrgwTbidc5+Dz$=c@1voE;S3mu0wv#t%r z%RBP#h^=#ZZInkl+CU|>ru;J(PC#g@_ymwXF;0m z5xxy})7{_My~!>zjAJZYF@vpsE)SNWNfWrFV)FeO2A_rA{>f8C8IgSPL%v-l06f?A z6KpUU$UzrdP5Su+&tRpVvt30|W)1g{a-gYU=SjS3Fd{&9-eP<9#S-QNpG6Mn59UdK zBg0J#m)+zdsDpg#_RTu@NvMyRA5xo&1ti+c0zh=8511no@$(!O)E4dQ4w<$w%IBy# zNI_LhG|_W_O6z)!k@PYEv){vpU?lg89N=i)KHx-v=IMkQvvcItbptv)L3|Oc40d6x zs7WiaH&e@|5aOVmqQm-W3jXx{p3={OHOa&3E&>qP1G^$qaW`E=YkMqGNIQqzJnvjC>zqR?_qYD9%iNHJlv|k@#Nh%y74F9`O|7hT7c(;QOGBjt?O|uqLG<+ zf)cLuVx>gc4YK#C-a+&_x;@u&w(t`b&s7e;cOYzY|H;6jYIl%`;T)be;1qgk(?pnl zVpio^wzPVp!v<|sQ?CDFB@^r)V|)5PZxZi*5docY#qZ$eBEq zoPnhG`l2IaVy2!OPQ`a;#(U_-A$~HQgU!%1V9&Y#BCQkO%bKfTzPfF4v7~PhE#z(* zJ7e1g0R&F`IP=@c{NHYRTsse74C{{!BaExRUyX1LTnpBxlZ?Zo5si|PHV(J@vqGbZ z|BbsJt2KF|u?063?ALAMBQMK|aJU;IBk>YLB3gi3g--^f#b~ng{|?eWmSPB zkE)vbmgQk?=ubpEwm-jqFrVNHaOq*5n_Z{ zDY9K2ajs=atg1|qZ4N?-3^_!857hgc9f>isA;bnY?E(!`mtHI|##zb-9K5iD1JuhH}JEozhALqE&xLd|w={1nna z?oWl2*&POEe@vN}#craZ&3`Bq);EZ9lHbmxD^g!qcF&ZIj<&v2t0H=$lVx!ZHHY>R zz)}9j3%r=~7kn&5Ajz*46?6716@#W?Qdh$%#TOO}Zku9I_eTRlzjAz6nNPxE{?2HdtO)BpSPyl(1=xkG-j7gV zB@1%Uu-S4x)l1X;1u(v0rg{niWbvlUATi~3gft_s@JI<0t%6)M^4e4Ae2whbo0Y~N#n}=^b|!>61WZ;zJ?t=5K=Qgj}QY z#*7-hlaZg!3I>BYFCX&~navq(N%w>SP;Yao8g?T?X zeY{L6zHK9=CUS%eji!}sXs!-xw|6MP2LNFTDrr{O6WQeQy36X8s3d2_@atzWgchK` z_xqqDwxnd?DbOiz3J^a3DZPJA8-)b(Daq^m1vV*TE%gfm=BV^d6jE|@dE+~;zoS?h zO(2|{_h{)Q*z8xncVJ-n0CcceWobnoe|Fxq^Idz5XCYOufpitD6ZH@@X$ACmg2#J) zxr_Vk>W@ajg*XaoH1PF`g&mz+^>}CbrV~I)Rd|i(X3#7OXI&;7fHH%;q z0K6br3fa%MDyG?Ga%{j7D;(|&`FT_HysQXo`EP8~>Ko|(&#kPKUhaC7lGhcdj+j#% zqRK=0?8=~=QUiK-@j55&D0oeus|D=}+@2_$mv}8L$GcaBWX(t^uN#hWtZlsvGjhU1 zECMwAGJaqdksrhvphs=MmaacWn4y|Hc*zt9eTf#VajU+KiI?A}Iq3Mir+ezle+ICu zZfcI-&sjsTo6!^A3Ogy42E#qyA`o`{1}D0&z`8HZCl~s7$VmROLls=R9V1Km)Vk|L z0u^mE-Qn`3+L)l7KP8AKVDo;%ha4PD?jJ zjHusHFsUn|{Xy&n0HN!iScRw`q`=_aCnx#F&PUW({;=}!k+yfo$Ib907=re7z`kG*7xgtX#FSkf@b1jI&5J64LJBmhPd;Sd4gi zxijWdFXiR7l5wwMl5y>0bkX^A{L<1eWsxo!9ik!Hv^o#Svf8*iNyCn7oZ?MCf`81z zDQL)g1ZoRZ2ge_6|zs?DLF@kgcIgn2Ay#@D36A1`gO+Clivt$hB7W1By$=VvS! zjrjfR*JYP+D+{;mt<*a&;9|?kA_*x$2^Cc!dTPUaEqXX*5QopFw3gd*Hs{7Y?%#5e zvT8NPe;+=-R@bm#<*r{~HLYF+GxK%bm1k!^K!RDXY9y-Z_WWZ5S?8J7nUc1me71Sa z(Bb=42uUP+0T0_T@92S zg&UIEd1(TyomeM`3Ft3JpsaEOV0!IRlqPtrfZ{_8fdd5xz&*FODXgdDm+j?PlArAx z`4_(CTIsjnrRK$O%5v=AUQky~!x)uKl?ei^wpkjOE4?SWpG%3Y>K=4>YcYlu;BMCH zS+YvT!1jb9@K*T{x1Nv#BoyOOU};Obt}p$bk}qQ6OZz14;o}YE^m4f76{+$QzY13_ zocy}YbYIh9ZeM0v9*NiH-^V91*N})Y{o}_Ij&pB!YDXEO5{G>!?3U8;kYNfPUNhtm zrJqMOt}cDKf?hQ!G%)Lb_D^NKRodfq1c_sTG4Jdcq{#LWff=7&9f^5h>xG^PH?3@* zxrF`oy@rh(*quK{n6E%ZK<1JuSyXn*laBOm?lkAAc7OJ8(=c8BqXNRMiIt47kCjL! zn4@&MMsJfG&DlT0CbhDLVd4-)V|xs}h_Q9^-DATK!y{#Db-$g#;t*2*pBBJA=jxW9 zN&<$xTZbbd!f=?Yo$!f)WIv3k=Y)f~qLtDD?p{6uM$7y(wbgM~H)EPkx-BTjz|rCK z+x6a|7m_VsqVJ6GSbGzwIF~hrV83ncWyuZp-BbHcl&iPYr`MS#%8Y-XACm^n!8$8W zU4>5KWOi~xB=*kwJMCcF4BJsfc{M(fzH0As_BUjdq3RnXRV*0V@&j^XsYU69-hril zLn$rt{J?TcV&{@Uyo0b&(xwPdYIZFrsq~OhBT_*=pj#rUZYS8qV64sVuA?a#TyaZZ zUXWLs-juwLSVQ5>%^s=veHKt%rzS$+{LvG5&6Va~R=nd(qf&s|bP&r_`0_dmrY)2n z%56{4h2lLPOj6ktJ;=iZoR1U)ep$jz$nzx@obRW@nU@^!3bG{cJE#qOVYQxS1OH6{ z0+p(7Ts60D2`h3l#-A;Q4~#ip50|4p^}eoT(x-g*ua;zcKi1Sk5BPHfDUL_ldtho$ z*KHZCU!eT>KE@Jh^qowCnwsf&E0lQeDX#aNuv1-V#D2#eKB3G}8q!7%ovEu8%yU6j zt$foAqy9lR;DGz&9vrH#=aR={xjezVHngx^xntlfO^sxt1y7?M**TWVXGkea8OstG zQAJew85g64#h5%jzAprtFA!h@qRA-ihTn(P!f`sRmF|nTFq`x`YNRajh zgp6I}X@t=mRDKXv9A&iV%k-3LEUeXMPlMVeWW`Ui>`9hSxK{dpriG{aOZb=pE!^D97DOu66OT0(gRx#KS9WEBN6!~D;%6iQ3kMJlM_Oz801;taK9Coq z!qMtOV_^2K)8-Q*)$y@c1JHk^6bj>pFg82WCFBzz^ zEeaQ-yx!%VJ{!ayz)%jQh!NP012@qI)yo7{FCJRmC_V{U0lHGX+Ep0PrV%C{;7mro zV2ibl6CCs_CGeO+IUfLUQ04xEp4weH4vj;jo~#Pt*Ra@(^|q8+&`--NdtSSDRfLF~EruHK%frQruuPeXMPf0-oodF|@Ylh2_}ZAXZvr7-96 znh&*6`L83f*^F++EiR$dhN+*Jh3ihqQG@Dj`L$93V;GoRJ|4^Q-9$+})s$dtrI=Io zYydS4dsOdgg!y<+=u;a_?ebFHub-Tl(7PWhf{&4df#d9XxT?eQ8%~1|JuFK&FH(TH z@fZq42ykW!a$G73sPPw+Z2KL`8O5mEKtxR??nk9sX@u$1#CN_10{v6VlB*w46;I%~ zJ`G{qu_0|c$m7L23f-2+3)D|w+>8AN@E)1IfQP0 z$h65?g`;|>809g!Sh(7|jrH90vdDArt_hd%V%}pvHb>7rwZd`>oaFdvadc8h3rwaY zf`MJJKpjq$9k+KR@~0p+AGEbVuwW-=L^yVvZ-{94tI(ckWVDjx-gv|^2q7?J9qV~^ z;~M9iDcR;m`)>nYT)F*<2-7wUkM`5kY*(xlJjKxet!SqTUqJ@n7cTvgN?ofRf)oj) z84Bo|ta?vjIq-b{glB(=%S{6fEc(plveJxF($A7&({%7zVHCP@R=j#CPo<`e@;w?U z(+o#oJ$CO=WBs0k(gUQFDLyNIeetjLr>OctZ4&&D(DEp2jW{`&H44J09vN#eA%9~u zL?2s$E)a4HWnPW<(S;GOI+dnLYX61kh?^F?yHo8rFu4~Mn9prw zoDL^gB^9=umFBEru1V50YMB~_bBv4do#+QZmiK?Rbq6`+-SWEV#lN+mYW||QHH72T zg#D{JSB`*49=N!yxnj&NiD$c+ih!)<$wK3rB*>`_=!QhRu=682gI`1nJ~2iQ7~q84 z9JKz-yYM%dE)lJd)s`7yf6JHdevPDgZBO_f58Yks8lji3u1^ualD96V(jIl0yfr_H zA^!U#JsPNZ2oVUaE=t>*B>2Y;gjws`V!ld4l@TR#X3gGqT+tn5uiu{)U4z;vb-r;e zj1NuI7mH9M6S)64S0j}x+^*DM^YgD3w_u=m1}hH?TZ%}u^{myyx?ZBZc6B(UkH>T& zJPg`ajM!BUv|3_9B)Oy%ytj&ny&-0%?6BIXciIu_RPdb9whYg}!Q z#TSXKB&LB5hKMl+x`3leFPUN@s}+z3E+CiT!+>c-oq4O!rH7I*;uXA`&fw}L2b7QN z`!-y8PA0eMj&#I)!pzwj+Z76ETqE$mN2_kRvB`)8D$?kI;90uM{hUFOz2;ppukvhX-Rpt9n*-A$XdHxQYXm&yFwF89CNHfPPe~b=6}t^ zvg|l6^5AYwE3Y`#)wuRhOQ;#E=6HP7D3X?Kp5UY;AXTNt#rx)NG{sQj4Z^QLIs`5J zwWI>cx7?z~o{d$zR5=R=5T2Q{Oy?mWFp^dHYZ48=8)xvOj9oWFG6C^b=#7$US_@Ju z($)@s`hI0{dKG0#%pwu(!Dw&xZ1ryO9(es-G6+Z4^Zv~sD(lZn#R93|Fs)1yrd0@d zM2zzj#G-uL#g&6nQzLbB3+FV_IQ?6L;qGGo)4$x~c~GYc`K81CzwLy^Yw<+J zKP}(xuyxAbKuE2rmN!Iw9(jLxiO*CbhDT^JCYI?WdiJ(5zl{fy4-%ai+SVzcNdZrDrs z@p>2%2**Dp;)tuOUqp-aV?LXQp=+k&Pw}mC`pn6_W!#uEh^UGvr@z0NC&wvN02fQ( zlaffHH4YIgLrAw&X~H2vmWUwHxD+U03ExK}o#BKdda-bWCzr?lM5SW=f$cbT((8D& zeBhZQb#yYmWH$BO;YaXj$H|-v`s5%Twq_a;7O%h_Uz>rP7f2m0OX8YkZinSiq0BR< zf-?~Qe6UE^Fd?cPLqF`(gPElTK-me>748uJiXNTt(mn`OaO95iN@=1-nRmt0I-|#; zejlH&S=yfjc%WDM=0fUvjmBP|u5zg)$Wr>Nq#kRM#nOS@mDGYB2l!K3 zr#=Nwrhe!yPUe4%0`)=7vR}IX!_3{m!A!dEZ$UJ!&!Us8E09nrk@~{--2z(6_jgFd z?=BZ!$i1WZMFT02m?I5IHJ8j!eR8j)Q4H|DOk5?xoMmzNP7?#+ zAdhMY<=pEY%NYELtgJgbPk~aOYZzvmz>N5)4S?MgG<6napAo#32Ui> z;T7CDWmr)YR@c+r2nH9&O2n757C{IGANzPeKW&V1Lb>N+JFxC-*7>uJo0F@t_bkJB zo=<_OYRLcUCjP12CCCyZR`bM~uWf*mzV`4kN;ItmFe2ZQ+ru>wO`1PC)ok~bq?yr++)aIuFZ8rSutpWuFbbME<#CYwF2Mu0!hy)fj1%;~ zLT?S9XuU6a<4-HaN{FVG2^x#AK;^&hd>8qamu7_n(MxQdeqQ1pCS{L~oR9&(@=rpi z?Y=fP*}#|PSjJo5fA}JUwMu&>cG4V`{Y1^fdMj75c-NA6(Qe;V89vzjP7N)5jx@f6 zJL%GMqj*6O`K>6h+?j0Eo|M7Qjbe^uA@0J>VJpe+ugB@`b*EN9Mecvv6i2r-Q(6(3 z2aya{r)(i}?wvRpG~$J{@n=`vmSzyY_JhqcEXq`Qz_9T*t@0vB-6-*Pvsl(v2YEwv znWywqtVHSHdHVyGd)Bz(4SjQ&pr|Fb`k4nY_OqA6+*aN3rS$%`VI$?{uHNqgzhTI# zujrQnO|xBu+)DteIPLH6#3eZ#T`}3{kpT()$&XKp<4=mMAQm)2!!ey?BsAFS$UN~z z@UJNaR0}46a6%?c-i+>*J={I3PEbVZ)|41s&M2M+KNytvZ)9|_JX%d<3V2b&nBXdW zXtOyb1(w5)Tpj9IUil=5Jk6L+dh?(&WaUl&^v^xfWwee&zkmkBhK)h8pv-9c@2=l*iBMzLAV$CN07k!ogRs6c;hEUIP0Pc7AO#vh z9@SgqyJT)^mh3~DN?oSo^B$_sPI9f(8iOPudxzPFOH7&atg(lHKj`V$g=+L zS4Ic==UEMr<^TLjrUs>~)gxWYKIFl~bGqdBLjJUUd*Km(`y4(o;<+GRW+}plA7bQz zDS$}Ob+SvB(>=ks^pxb>^9`{dOxt3}(n^RlAa`<&Hh_cUz7kOvbwZl!70XN3ZIdAM zBQfO^)n_<>4QLG$#0jTlVZ{aznkjPxc|dg3KQ!oea!ryFf-zd?JTq>Vqg-1HykY3+mDyt z%(Qy2upe%>5L$^Ws$BGFEj&E4zjc|EyV?Ubk0x9SG4m>hUv3VM#z7aL#B|Jk>4G~- z>fBCoDU7emTZ22L;UTj0!@cXMM~cn}ir4>w{THf@c*w`zN^`49yAxRL*&ZTi?j}G> z?%>$gs#S|7K;ON3`_~t8PTD6^fQV0j;(X}e_la+~E>;7n1oXb_?O13IM99#PmrMNYfF*BNJ>-8uBt@TD9 zd6=~CVB(50%`Wm2$#wiPe`5<-&1gRDmHvXXgK8i%(?eZnL9L+Xk`h4tz53RsWSt)Tje3TSD|iRQ`&!GCC4mY zcS1xNgO_%nMbuXO9{Z_shy7w8p_PE##mvA>Y~w3oP|{x2WC1=i-TYA=vDjeuKpgZGTQo-5T{2 z75-6hmcg5@4dDN2y}iODd;r6&C3b2BX9k7uxrgqCt9p~sg9!Oh4%{^aqvH}FvSl-T zp`e;FxpEW>=Z^d8W@r?$afLmzZkdMdWml@4FsDyIBKlv^c2}{ucHy0w@AANp@61_B>_<$u)Exczgw!TzZ};s6IGKo-O+2+Ayab*-rBFazEgUxv@;jIpS`FVf`&A8%D*YNp26?=nq7Av$tMhfglc-mP_#2#7|{}>`Q2b3-Co)YTQwyX zXgT~oJV1?9KEKvb1^Ee=b`6*OVNj#u2IVN*AgzkTBB{2L04# zy%>on)2LYewe3CA@|yx+Zt^)RY|mpW9W(6wwIflL68yGw4AN; zX`Ase?*l+daneip=;KsEhx>=1#ugIkd7^&O=N~AvDrL1Zdx=cT_lpxrn;Tj0`H$k= z8(GlTZMD`2Ja0WvP8T6<+e&YFi^g++2Wzo2qwcza@I#zv3S7Kv(oL2?^k$FY+q5dT zu0n}K%$VGvK(OUk6k z0gexY%@Umim~0ta_5}P8G^gd{BK4SOMyYUSydaP6?Ek2CXPRStFdhP_v?SQi^Prg_ z2SUFc40J`VFgFsTTz_Mkdfx{EMt0{Up+7e4yI*vPV)Dlvjr57Fc)D9q#zH3oba|P&A|{-k55p2kDIx|ZwXzH z9H{5^ejj5&cP^T#1Noo=clI9l!H96;oTcy@{v~6M2c%KpnfIweQF5_heh^WJR{M9d zKJDpj3+koVuHbo6gj2_rEvGhlwlwRftu*b%lg9GmI#PyR(r%ykgcKPAI;ks~GLDpW zDt_aF@?Eza8wP?qM*)d+5sxfoRjYReu{7!{rk8*}8|#^%x^|jP$HrLR~)D z=q0@cw_V#^rDJw1B%<~GOFwRm3|H<*EBe5=B8X;Md&_no;;Ux=>U5{hv;sS4WlKkpl$komn{GNDT2-17{F;mWbCYQ(v z=E-WJ5o7+7jP*JkTNiy+r`*AB%j#Q2o;p&^aI)SJ)w>esm~Ve#ckt2<{}ErOfmr1EdY(X=Lb!WbyxQK)xX-%OgN9-x!Ia^j9pS3_oGSDEAZp`0KsOi^HdN2%I^If7S+#XFaPt1^If_hPA5t_+mr^g@|H(mqmQ#3O-G zLj=4Cp~=OZAlc1-31RA_$o=D2?Zactg+vYdjcHt)T)l;dec$0#?&?0x#WeCDH~gQr z^!E=3t*T+KNLkrObkHT=IzpQBAh)S4+e2)h|3H{urHR7+#T>DhJ(TmjulQSpt7EWp z2S}*+irMiyb@%7AU3vfr7l>tvx3G13tXQAcuSN01-i9%;Gt-jpY$o$vLJuFLF0_r3 zE}3JyniQ;fpg2W=u8Ikf>1ok(L^Wqnr0l!|*S55dfyM~{^QZj~S>i?FgklEQmY^gk z6I(RdCg>$6G~5xpfIMvtV^zg7;RR&fF)z^Pb;H^i$|%v}xH`|z{Lw&(L56rR9xOkk z1)!YDt9B{LYt);jSn$k+hbx zp<#O}V5#NAIu!#1ygSp-#cS89$&TVj>9r6`b>&dm&sS^NjK}v)a|XlIj2434azD=F ztgr@NnQl1ZL0cP_;(-drSLUaN6c98?ZPLP%Ewem)VI(DZsa14G&;++~VL#_Ek6JwKg^jN3LV6+}gL%UXqT2QUMe$%)g{@1Zj~7J2#0NJeWk9Ve+&Z;) zJLwD*%eJ~%ItQ6J;$tb%w;DsD(z+4?C@LQku?UWZ+@OOFK^U<7QWYW%3H!l2<7UPO z#f-V7JB!a>9{84I84Y47!f>wy33^0u(4Vm5 zNrWicV5&UehN5&(-B{&)_a?lwTl;qg5fqwg3SwS#1S3pPM$kF17ENj|X4_bKsI&x= zF?zOv>oq?GupzEShhpLk)4RmD_9V0tTKdI=zKET8kWvTr~POABq&uY zaCdOz(&4h2W&e7D1#V#W1xr8zFw7n7nu#`2j0y1`N)Pe?%qlq4gp78CwJ!rT@D$Y> z=^P3L{EF0vHGyG-}z;UW;Bt zPZC_~g=y61Z(Gx(l8xZL;?LZ;8Yrd%B5=>JbrQc2P3J`*3#oMfPYXbT>$vpkYJ#YW z%8Qx>9YHo3?)_j-4*`?8LN8rY@LF&3k!J3{1+ZjelOBnkpXsXfW%dZb8MIP=OPd(G?jq`v6%FHN-?_YNFS$Vdc-hn166C-+mA0$0f@Wf;5ou=Ftm|)0!#G#t`TI zSDHIvA6&H>_B!*u*6RU`{^aYi|9;&9JEbnc_wr3lj=SOw))P!8^dPY7^@;FVK$bED z#T@+KCoN7$uqs3YmXHJjY;!y)1@}@MbHFTEM}!4~$sa73K9@?YznNm(pU>|Q51 zh8wSuc9#MmNZM}zXH_cNhmN1QJRHWugPcek_;^m6awV()_G2Qkj&}?5Er70^#GZIuu)JJ z0o|x7Cb`c@r!ryZQ;6DxD#J0m;Tb7aVl1rzFF}j+b_F-J z4+Rx7Sci7UGIQ1^ZiOr7F!K=ptH}$d;fmk!vJ~M2MmtiKw6XAS-Y;s_Wd+0P^$KYR zO!A)C9bViYp?{&6gXWohx??r9{QKY$RL7!E5M3Rse{=m*|0>?uRuz9u?X(R;U5 zp)f*e)T}D5#g|6HLx0d>tsV%2lIG@uLj&rUNhTPtj~9G$H&11Ntc{=M@vWQqp~w}A z(81`hJylHi8K+w2%>9!VEoE0={w~-H6{0>2BOg|O&f7n`2%Xfd(H62rRaE^X z&V8?%?h$J{WVJMxF? zq1lffW8xd3cU0$1BM2n45^}L@c*S`{1el%(8#vQ`e4MfD`Jz6|i4o~8mN*j$i5>b= z$^@C5^EBM-v59b5%GE)^cT0gGyvWILuaZ%I#zi#<71wLpN~p-bh=#(1x= zQu+i*yz*nf5t<4g7xGj`lJMgaNGmGhkB>Z_V&`T_Wm$<2)*0h;d|{3)_Cs)W8a2*V z+O$k;)=xzqL7X)W!bU5Pp`Y)SLvpZ)W%OCNIq+7TcTAJqj)OVu>k!5M9{5n3H59%S4 zs=G!gWu%M>5V&8H;tpD&auEGiGz{Qk3cnoi!;3`YLQje_0^g%Szz8%}Mdt2LL^yf+ zQa=bLsRi<(6-#dcv$_|AQU)(Vw%SewPJf$qPRrkRu1~|0Oc_XCs@EoY9Td-0ew8+cOUXy05tRD=B3(Rn0!_U9z zBX~z%UGs|q`AN_sex}TJ;)aoHZTM^B#T>~CmOlBD?nIiBQLdV?u@aa*a!PNt2=rIV z!Ft;sq!k0NtYfpyLHlI3XRv=L>{<5}{t`uV&B z$fK;4uf-UtX99lV*40+~&k{;PNTUU;r15C_5WY*UJhKj+pxT)7i^$Y#tMl36mQ<4}KG7)WSL^hA2^fy2+ zgdR?5206GbCBPj{;}7C5Q}AuN`D0n^Ntvun9?>eQm_JzJ1P^qyOTmrIaM2<6gGqwS zxIeAW$AeV23L&Rg)ehw-Q4Y1`ahKKYj_fOT)ktF9mL))+9|u%!OFnssJZYfSz@Pv` zPNxG0EqXG!)nWqmQ0uNQ#ii97+<}zVp+9lN?BTrqohYlLfvY?)X^w|}PDFKYc1-lD z!0u_l&j)UD21i@ToDfSm*NhP0P)|HlM?LC-C7fvqlDGwl1E`+TOzCN2zE3b9p&hIQ z5NR0w>54lN-ClMz!3&|<*gcuyHLK;5J;zggENYKmOZv}1X~(a$lzPmbKto=IrW znEq8T17|v>Cn@C;{5YlI-Vn&wmMrZAxaC}=o1ubHCu#;ZbeX#;Uq)0~N@_XH0;gWT zDflQc#dg+rCxcRKQ<;78!%h5nU5pOJs3<%5#hYG9Qm~{-2r>mqK2f63S^h=np`5t7 zSOG}DauL^8-uf3RFb1 z3WAOh6OI~!0U%8I4Y2%)+G`Swo&WPw=^~y&A0O(!<52cC&MqA{p9iN*=F)6WfwEav zigF?Gkl{rIPqO(o1#Vu*T$$|MxtI(cR^BBR^FLHgQeCxnVo=unwFW&mM5A0XK>}1- z;qv5;SN0aiSn`-df5#1#LVPjB+nVE7V?0FQ|1#$YtBWAGBw-{tQD-L0ffRcuR}&TO zf7<%WfH<09+gaR#TL=!p-Q6v?yM_?lgWCoP1Wkgw1$TE?oS?zo-QDeNzI*S#xBq&_ zdb($7s?Isp)v5SP5RG@Ov@1;nmto0Z!-V~#yNcH4uR>i>);3tUsLS8!7I$tSrxDGS#d}`Hvl|nTfZJLzk;K_U_Vii%@Y2 zzgC+5?HMV=;po4)XmqlBy9Cwu+1mIUTdUlYWjJduW8>60uY5@1%d{NxuWVG98|Yf= zW`t4`Qorc+rHsQb!dmebv6{Hh)JlErh-v?j!pj7$#kSBPpqxwJ9!Y{WyVwF#uzyV*07Eq>xS{i-3xA@=k4t561#?X`We`qn0A zUP0*2EitO#Axwc5()Dx8XrPHo!7lAX@%Y)pWQy?X^pX*+$xTdIQri4El=*RLykeDp zrF)eu@Dhw+onjbe2wOe)C2;DiB~X8$@TM!1WiNq`pPd~_(Z(RN0*K(0FkfOFOtmNm znCUC~(&eobm=Z8QPvFyhQXm!jZg)WpDP|7OZ1o=&&@jz zkBaSI3a1po)R^R$4Oh~wVj{~yb zgCyi6yic3jFCWcMyW%zFvWIv7XEBwX<+ipqFUyq+kG6}%!z-s``6IH)n!PehL5=!% zQU3Fs-{x&uMGj0_S>`mgsoqqSB-}jbD)i2>y64;Rq6)&!Ds~)sx>tM6x0;*Kum_hs zTAjrqr@trIp4nNf42gBY-6dmo9xhSQ<=kJ&8A6FVoWF)O@yy}0u%-Bd_*Ei%4g#YK z-zo0J1?H$}rUo1(RAB&$o^1Xhkm9!=MoXWfFSx*`e-9$p8gTOw*I`Y^tUL+<$PI&Y;j2Un3^1<21zJuh--`9O$Za@CnuJC>eL%8rh-l9{(gb7 z|3fCgmwp6ConNk~WQMe!rD0akXjIEE66UX1I|)jjA94|)cbD;@;m5Y1yuVFGqpppf zwBYGTSF8QZ%mYU*8ak)7HfZ}{rx~ACzFb-KuG*w4$7ME*ITprN< zXr9?1u!ACAz{TQ?ooVcr7LcCBgqc9$P3v=P-J<`YLpk_2<7td8z<2BgVeh3{VQ#fD zR2$m}(+68}8K$dP4#_rgd!6s~;Q-3Ny=Vqi8jmm07*2KAf3Ibrz*GuoA1}{e)PeDn z3Dw}gN;J8J0cS+PS`9lcYDdt{14x1>LxAs_2)nfb5ZgNmN;aI2NYM0N0EXhzT>CUT z@AR*3j&se>4ZZ6I*UZ-4-TfYxdG6}UPb$l#4dr+yuIlz`1b|e(*EHjon}tdD^?4Pc zt_z}~uWk(RXgQmpMSq=$!ew4^!_4etoZYh@#SF)YB(Vnyc>WgeWMPOg00eEdfb`!F zhUbvdP+EC33uFCJs?4B4mg&n$Q3bs5>2wc-Sy9nzWBgXey^`b=Zt?HN2M$fLtsX1* zy8LUt%sR^<6s3Kw$6q0*!u40amf^#uChs}qrd)y~uNSKxU-p^i>3LawU^*^dvTrZ= zPi$6kI~Fqb`-R;x=J4*cq@x;3QDJ8`?mZVS!JEx5m-&@wLkeye4AEg|r*yY36zp^7 zQP-=WBu1pVDDE5)B;3KWZUxL?Lx0;GC6!HRobhbix5=YdHw~+cvDSDVKp$K-U4`lU zuF)3fHow!5!s&>K!k2-^CwNzJMK!0YnIZ0cqg5RSboR(}Zpzv~tOmI!{I1r&`dq~}BX)dYW z!MA_A`I8FNa$_yEB8{FBcMex7(C=kK0r1&kZ&R^e>0x~1?D>{v5{p}T&nmdQ-Psml z>|Izhw(0%(7_$5Lyl|L%Taac@|ByR(CyGyef4(>PEZboCMPxrC3^+ba4i-_!17VVsgPVm>-eo=UhQgW=yefV@d#1b5y$!guwd= z0j{)_XYF1g;#>_&B=QY~rpne`(Wz<&%h5Y~j@5JVJUg-Gu!@u1^(7UUzCEF)G2cQg zuXMhZYmfH;pLKL2%vw0^X6(pgq+E<|qom4~fSJ?I^AIvsIsb$`v{cQ-#{$IIUSH|P z3|Em{%VjixjcxOV7ZT2h0pI(I4um&r3VzdR(O!^F!nLiG>X*uw6&l9Edsaelf&|p` zpFk=^4~#{uE`|3KpbPYM?R(9bo*LnN!3NOp?L3|ZJ(mmG1}S+&el=6$04##}cOTwV zr!9t`vT%@ibh*ZC9*%FG9R0<~Uef&Cl3xGVG<%^UeAs*(a1dz`$B`(o3iGDmV5js( z9tP~2csX(U*m_f>Vt;GIN^BB<0*p3Md%FggkYxA-v;~;7Lm#o6pW`@!H;M-Vp($v1 zc4i-OF{;ynCMw9VHE)#z%!c?kEK^SKHWlRQ@BGCVo^x^(7&Mr*PFRB6PHMe|dx9Qg zbZX$v1um(Mgms%aMld*3LWC%@brlr?ADCNhojUan3+jp$ugiyDn zoaoHzz%D!fx0Rr)=V3!F58ZsVvRtDu+6P7~>h~-N*o(b241ngi+kM@53CZW_jrPz! zK`zU1co1dq8^{GKZxjk}hi;bCziU+H7H(vjo3Omk6+%O=Q5RV@H_~A&zJfEm^I;kJ z4iAok#UCbL%ex#cUADBTVS1^6Wn&3GLVg_` zv63nV3)W;VSR3h>>Fj}kAk@=v5E!GI%ty7ms9Cx7Zo?#>=ieM0glryW!hmsaJwxl( zU1_Gn8HG!z^UQ#HkH6M{j(=zhmq(dNSs1KW7=Q!#PG+dr(VmlM_I>3_AgO1rg2n7H z?6xr_mivvprAsU)Ya7i&jNr^QSY6BAPcNR&Ag&&k719UH4Z?7~v++Sp(gy@Vt=D8o zQ5CD_apJn`j!Zm)sHW_}MlhF1Xd#%mLHWO|LIO`@c%%zX$@z+vqsdL{=vT-VsL#}` zej#2)GV#s_Xutq`#bZ*?Mn@Iji}%b3CYkR+s$qj(Kz+l~EEOsDV=k~(eHpnq<5uoA z*crTDJa+HbiV7^*ew4wgO!?HoicNILD#CYO5DV&fp7O_D^^BX_j*dGd(eS~Ym-))j zFhq7#dM?6tP>uP$L^DBfP;c`-Q^jixLFs*;qQMNFyPk6Ctt2Z9n->9Q<>c^p^#%Ub0mCi?>X-I?tLSy z)i^o~DgYO325vyE^nfEw4PA+X!GPn0K+p*f2*I6bmDe_crXd(sm_Q6q>;c0#a{WdS zA%(Y6gcat`vlYWI3&~NSx>f-0V3H6ZrrPC!Sx@&o zE{1U6w^=QyN@nfylk_Mss8O+B<1LehjTQO!Cf{=`Zwn3{=gy>J7gR}YTCEXVX>ZGz zs_jY@!$ z80{SjYZ@w@wIyae7q>H)Xz(2@?LEs|dwiiRi#4pMY+{YMJ8>$C!_0`K3E~%1^O@#x(I#NgWCLazWipF+HhG}guC}EA| z2sj0;(VBLlOZW#BkZ(y_?S;CN1`8p2B*nwS+yM|dq;(bgDDxN06I>iB?%jA4C!Ufj zSkBV`iJ>Mk?uNWsmlFcd|Ne6+c!N6PLs8mh(YB)Y0Y)8JiYMDN^m9~8j3u>2DD3U@ zYjkmMyY(BRp_ThfpHPzw;`x>8mBNARX!?)F#XPK>m?SkVkKg#k<6&o&l=QS;)2b&K zC-{u*aP(}~3kyS`rn;bII*zAX?J!~R;$!OR%fp%1nD?~Xqj~2~vO{LwEuvj6EUbCo z+eF!APIrY&Uf4y0na@^D-?6Z?forC}YYEOw1IO||;NmgMD-_|a;>l@o#QIVjB4FR< z!tpb4)HA{|#F2}>B5qi&u#kSL#r~~`e4!~cpums?Mnrj=C5C*_Qim*092SbbCHOuJ zT`U=?P&;snUi^km+z=2$cKHc9fq}ezWYGwW>kSgJC3ej}e|47sF@`Jl76Z39o?4YOFn=##0T}F{V0Ir z$Aq02nbJnSAYxZ8e7nZU=@r9uZ3YVDz{9x6#{MmXs5uyHTdEOA-4mosT@nsW9}To) z!Eu0@bQ8>lduu^+>uH#btIXNqu0;O#7c1A!5Fv2)ancY_}zoP{o#e{O+rv8o?++lAc5U+dH5+oAFtk&MMEmD zXOV^8ax=o_AhTUl-JL>Yl<8zaXjz#1>U)-v`SMkJL@~wi_!=5D(qz)}${L0$5B1ry zs1%argUCN=?d7@&ByAmwG%5h!sq?@~kq=CwKuMdr&avQ4uGiwYUQ8KFWd|2!ukZ>8 zGiO*xwEUD)eEOM1YD=Yd^jad@kQ*b@;L1L|QRwPXM4<&%ESpl{VwgmD7bMi+pmI^L zV^7w6H#mzovC)qB#Onh{5UvpPeH;6+w|zkWM?uiXGJ9KjFtXAmi5R|*hQ^h6z&!E? zeH|FILIL5I(G4NC#r#Ec3<5TPUy=bfFie(UG=#=LR@qzg8&uAdH!loEzFi$k#L{PAJWgZX7BN>26 zK@@=s5`iJN1UHyzVn-^;!WMo6hqOACyTc`Q0YiQv?D)w>`0N0|3{wIVYtnur8{}Ck z47MWyr2f6KOF)5|@8S&tfIlY*u)?$gW?jUNadm$%P=Nz59$F0y1*T-c;al>bNSTWYz)fFJWDE?B`IC?irs;dQ$)Zyw^P&ZcY#c=54G`v< zyW#gZ$$dVKzhRkjoLjJWChvw^7}Y=!ob*p0HFF3}+`3*9liN^@(*-U*u67D_@7wnH zjrJna+E+Um>~U2ciRvwtuE4)WL>4ZIBv~G7?zU>b=@ z_qO?>zvqgeU8)w*{Q3A)i!Ic$2Y=9|uCaiIhx$6Xa%ne*l0{nB)HJVI@m2?YOF&qW zwp@wr@M=&KvF$Q2)2EH|IEIvw5inJp(MToHh1aLORan($V z&Bdeu8Fokl9a}_M^y~0dKN1_XP`6MI;3o^dum0}pJ_&1<+o`MAcllL1wo_L~6=@(J z&Xf$aLkg=WLa3PgcDI~3s2z@w4Lgz^Yx;AZ>B6NIvD}^<8~smH?9CA5Csa7qXt+x) z93y=Q;K44Yj+<0aT0Em)_ZSQqA+z~Y6HYR)M}zHVP{M~E0fz_}S3Tql5;*vEU(VT+ zl<#n{<#0tG!Dh$&=y{W76kEz!NMDKr0YEw$XE1`8ww5kXH;Sv3h21o9#1Te1OG4l` zOZ#I{6ti^+*8P4o{1e{f3dgdYqLQAwwas94JhQcrPv6zXB4<8S2F;;Hx5@b#FLEr& z0_ROR1;XyC9zWmf=pnOB0-O$hL+XtWF=XyE6gVJU^FQ2tyVj3zbaxA5`lgFPNCp`_)*A+m4{c+5>Q5~kOlgfa`tTS$ z<`d3G@u$tNVw6W>bJlS0juI*t75Uksng{?w@;&`eygBP%%d5!S-q~WpQo^#m6$@-~ z0f2_D^xP@;Xx87yWChhC`_hf+d3iD==A5CvbotUPzyp@y=O~-{qMuV+|4Dae&*xcw zR^@Y;I6Ks8)`}+`bKUp?5T>xdeDBn|U0#{zSXNAPi_l^s#=BPi zHo3oeC^g;5x+-$?)3FQx=D@Cru7O8uLfyga%M>g$#$GKjpI*7_M@z4^IU7DhCtP^q zEwsj=!gu2MMpiX1@;TTJS_4n9=#2yzb2F2N;wlHC$tcb-vXDeJ`(wnF9dMFZa%VFQ z!`{LHhQ5d;U~iGb9>JdJ;3i!v{h7wJqcS5k7h96t2W;Mz!dYA4v0(zxoH(BJ zpMQ&qBz*k_NBW1-nIUfB`{GO1f=KosQWh_C5x(&OCLpl>M$YM{pANb#-fiwllSSBO zk>Qq@i)xceJk-B=T5rzdcyGIg<+~K{oP?9SR2|HYrlX%WiyTiv*AVaC0*y9p_G!n9 zpv%>)&wiMSj0WKdP@YZks2sQ2Mmd3`OL5;ojux0ZI4~UwQvnmdV5}R%BVq$z;9jDOGfkavt`%@=P zViKpBgn{<^K&%`P1++7Ca6zqDI}!l<3F>RsQ+;xvhYS8ra8kE5nh+wfFO~==iT;0D z0O$?Cp@c|eFa4;U>j@)4ry+n?=$7fi0=9};qkxLRY;rFAFLEg$#foHAg!B^^zzS3` z$F_Opbf$IUX?*iu1+?c#)*^ZCnEQr(>4sW`5TvBQh!xT^eQO{MDcV#av@$cUq~V{Y zJCbaR`{qnTAg5>`*IfK5^{`u+4eDW1=xelKV_X4iVqnQ*Vf^iHvM3Y`^I0XH*CCkp zN8X*a>XLZ>_3#Tm^Qt&o`zhj?6k1qK6Raa{lDYhk4q&MO?p_R|m77TM4L}W+Is<=! zOA5;EEQ}|&1u6?WeOlNi@4_t>}OJLnuA5dZ*z1m#4KnZM+Q>IEz&{oqr#0&xLJLspg z7#Av93``9gfDklJFV4aV8G!piA*6}|sEK{nXc1v2AEh+k(U8*M{dFPQes3V-pAFp5@^=rkQVFZ1`h#)X9X5yDI8_}8)C~8g zs@M;G@L5nlhv`rG4!w)e*UPN7+ucuJH~1``V*5*|eJJ5GL7{_`%#LykvEf3+NH^F6 zKh(FrMSCdx{XcuorJ1>tLcNMto4?y?{w|iNc-DpC<~dtKR>afn<-9#_w&C9FyO7S4 z&aKulcg3M50^ZWkRhXJQ?R#=CsGR~5`;p=nEWO8rkR$`QTO>_s`jy?T=pDu!4h1hn z94JIcU=03qmFr?!js1IoT&j2+@DxEAUY|)TMAoh>2uMdX)(O-UuPpI^TT=!LQ`Vei z5TC_^l29m;CwBpIoQ;=&l_|p9&Mi9e6}U=8YCZ`9u>txY$ZJM~u|;+7sXDh9#kFCQ z90B#O-iQY>xj1jVGC;;^frS9Bn6AY&yi)?aG4EkO3-%U2ka+ZQNM^#(?e!egFWJ+XanXm`H9z3H`bE{iCS^2f>=JzU>_IZ0QP zt+%mmk!ClH-&3*e4?>kmyn0T@VqDVH1D;%N?`d`o(nq{z;rdgr+nK6{=I1K*ZgzGS z@}(I_NA3tB0CE(?R_ra@U@b3H_|7DuW0u^azjTy}awTuqI_NlSvRgW>03mGD3wYQ_ z3%LGmY}hjcF2aaXXUerkd_qer@|+)}a}+QvVP9hb%r`Vt2-K=*QkP-?>;SUr04S8I zQ#Yvy4KY?h%$pYJGgCX7%ettwzrCUVPn&KEqP@GxE! zx%NnK{TD6>d?d(EwrvZdFvE$+))GBJ=dF;&O{L5bY>}9({d}pu11Af zA}&hN<&3}KdiJyvWg{!by<8hm9<3+&b|QoClC;gl5ooo6y*bzqjLCKa^id%RJL?2Yuo(Ll6mIxK); zR=}P6l}8vv=YOmR5@dJN%KAduf!7-3C~u4iS7YS5JwpbbMHD~ZV~jb%ou|WYCOOF-rqD{zfAEwLM$lCK0|L(1(c(9=8jVux5;m-u#MInZ$rdg5DYR zR=b`o7(kxbA>siO1%5Xuam}m6*{RRq9XVPp6VM({`B6}2AHXPHVe#lX!>m0{^zMG9 zzCgA78#?qpJ48oDp=*@Y%7Clt2?|sfpqc35$mz_8+uw2s!52i)9T{66hpG93ULW$rZL=(%#^XaETWs+%rkGmtpbUN=nM1S+O*5&nk>bw%;s@L*u zsh(xqAJZEcRC9icIz4ePiJ@f+GvqS%svur$?a!MjksMaqjV5C=SM4MTeMpdL@El(o zI=ja}VwQZKi-z5#toE{$T-PEni0n6Bh=n7pX@vUk z$T^kU{z{A7f&uGwDZjZDbXShpnrO-#KSCT(w;^p0 zU~|oftp0xy7UoY<_CIwrE1j(`QjnV<4khgve=kn^E*lS;6+F=vi~(P(9gEw+S`gqmw+c#}@75wp+O$)t%q{UzhqrgH1AUEsQdbT3&Dgv_H+R zzCJ^9_^pCZomkE*i{DscUVSd1v`9zQq`-`jVEya@RlA@e^i1%%RAlbjUU))Y53s1) zrm`_w{;vHPNmZs_wz?~1W7-TDORAG_+RBz%yaHy)NJTO4+LSWr21h!ZL9D^gOP6ge z1n*xOk0aU&cphehKQl!WHGTFO7<7+;T%S~i=1gtq7lg?27|EO%A3ja89Ul?tDc@9GK_}%!zd+-laFzKyy=)3LOAyS7jec4Hy00dsA+F4@(0k8bd zxc1K{s=}?Af`8ry+H_qf6Qw#cTzvL%dl+n2%Ld;L>`C{I%2 zqo&;r6v98N5!!{8RuexD*lH3Y72UgN%Y4+)RW3(|@Aus{I$yM-wI6hg6>U`M?BdrS zEhC@ZU*`Y@oc!o%M{MU?R`3=R1Z}Y^=yjA_;qW^;*3xc$4n1WIGh;b_J4vfvg=Adj zuwEsd8oW#v+%#Vy*oR=ilP&BRCh~Q*Z0z!=2`ol%jY)a^+HKeK8w{mwnZ4hqMi6|d zlkDjCnuTYWMN4{C_lfo+Kl6z(>`5^Zjs9>qomZ}K zes%seGjWk%#z33TW(h6E(6HLUd{r8CQA0+4H)~tdP7#7}3B%Am>QRKG1q=B{Y+uty z-Q5?gIJS>xm=`qB{88~HNqVWeSi{)aR*+rdKB;~D`n7^|x!G(XnYV-WmkGKLzxQ5+ zf#fO%n_~l?^JPl^dPO^Q-59#y?o+Q$N z*;4WWIXp%V%`2S42%(W7)(2nT@b@+y8D6dkMu&t^>~|NE9=1}(mW=PaFp9tb4Gdu| z?lp=wbTLSS2lUEoF104sl70ljD-17M^RxP;bJ2+~J$`rpAmPOwhPLfT{p};!Wi{Gt zq6?tB$QUqwe9V0UUh4mL@ncFimBRvB@5!%pvA*J?KGnc zDmKSc_v=iuxd+GYY;U^$#7*?!3@ zvT?s@JC>A)s2Q4ogLxtbQRzHpcW7R;ZbA95UU}co+nbzNfu71M$EbcU>TCVA_xT|I zz=db*rOR*T8BPm*&ZpA`iSt6*RBg=gX`&WW3h+P(W%>!5k5yDXrVQ(L>3;$T`=^6NtN_m(n zY)%QAJ`5De(_YYtEV^Baf7?qJyP9}uiosATjFnV6cB8CV`o~~u4`1yOG?>1b1vaqq$GM2EllB%Q*!S*{(PfHb*zR0zAk$z^2na-fz$9x zI6QhUT!IsRnGQHXIk$OP!fTgOSOjC4gG#FM+*fRtLadEx&iu@z6 z@^8GA)tnm*jxy07zWf1~e$Y_bo~{<5FL?5={6Ia8sqR;~8OE9LCTocdcPwRyYM*&IQV&AELerp6ijUy3m# zb?swvDBO0oqxE;ynF~%_hAkT=*Pa9!m9}%M3(}r^*Gl0La?JTSHP{BD#`GF=dlO-I zRp5YVf_>lOpz0h~Qei~!bdCPLU^iJ9OYPXfXPZ-v>F14KR0cTi-%8Jyan6*U51!9j zzdLLEO60+9U-(AWwX)X|1B?xz zxhO60HPP4;V<=ac<1XyrIFs#)^4!r|!vae~#*LQD1y8!Wzx9;8B$kwuRHUE3FDya?a7*5ca1)K@ zs%DE^7UnWomungvp#t7vrUfI-BjV`-Sit&QL?wm(H%xjY1Dq3GMAn{0mu0CktS(B> z2l&C*R`j@6wwtuY-u~|LbTwUM_cZAWV0A(p_?sac8#ul56lK zO}mx<%e^14_WOdxz3fn(hC}X(6TH#k{cE+2l5w`&d(%U)W*1SZL)&}`_A^vchLi2|FjwhydvaHu*4O^kf-ne=o@ z8y|x{t-iUY!T!^Js1l{%oPh}7Rh#XOdUXVVAR$l)64yuD{&`r>?aKN!TJpGn3+3MtUe?PO$HpLGBs6VAYE0a)dhPaeP-A81^ z>x8+%ACuDmra!7HIDXg?Y0B4MIK4Fo1@xp0vNkb~qA(d>GXeS9*e)l(7B@;293pDG zcUgzgn4Yf`nr^zNgi#ZZvEE&f@aH&-tiKLvKw)INc2TIQ_)bb$C=KF~PfEY}g*YZ} zU$L!~Wl6%&(_F0#EsIy>@b{>auY>t?Oksh|Vks~Ax+GyN<9=f`QRdB4=(gUpWa5sc z{8V%zKt0-&%bHju=TDPAG{!3Axjx;5*y7MMBz=tYII_C$$Xn~}NG?D#DXcZ4sw
I$)U)Nt7#a>~A{%A;zy}thtx;mDZ`- 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 -README.md +Github's README.md . -In all other cases, this should work for you: -\code{.sh} -sudo apt-get install ros--ifopt -\endcode - -Linking to custom Ipopt or Snopt {#link} ---------------------------- -If you are building from source and want to use a locally installed version of [Ipopt] add the path to your -Ipopt build folder to your `~/.bashrc`, e.g. -\code{.sh} -export IPOPT_DIR=/home/your_name/Code/Ipopt-3.12.8/build -\endcode - -In case your OS doesn't provide the precompiled binaries or the required version, -you can also easily install Ipopt from source as described [here](https://www.coin-or.org/Ipopt/documentation/node14.html). This summary might work for you: -\code{.sh} -wget https://www.coin-or.org/download/source/Ipopt/Ipopt-3.11.10.zip -unzip Ipopt-3.11.10.zip -cd Ipopt-3.11.10/ThirdParty/Mumps -./get.Mumps # HSL routines are faster (http://www.hsl.rl.ac.uk/ipopt/) -cd ../../ -mkdir build && cd build -../configure --prefix=/usr/local -make -make test -make install -export IPOPT_DIR=`pwd` -\endcode - -If you need an interface to [Snopt], point cmake to that build folder in your `~/.bashrc` through e.g. -\code{.sh} -export SNOPT_DIR=/home/your_name/Code/Snopt -\endcode -and run cmake as -\code{.sh} -cmake -DBUILD_SNOPT=ON .. -\endcode - - -Contribute {#contribute} -========================== -We love pull requests. Please see - -CONTRIBUTING.md - if you want to contribute. -See here the list of -[contributors](https://github.com/ethz-adrl/ifopt/graphs/contributors) -who participated in this project. - - -Authors {#authors} -======================= -[Alexander W. Winkler](http://awinkler.me) - Initial Developer & Maintenance - - -[ROS]: http://www.ros.org -[xpp]: http://wiki.ros.org/xpp -[catkin]: http://wiki.ros.org/catkin -[Eigen]: http://eigen.tuxfamily.org -[CMake]: https://cmake.org/cmake/help/v3.0/ -[Ipopt]: https://projects.coin-or.org/Ipopt -[Snopt]: http://ampl.com/products/solvers/solvers-we-sell/snopt/ -[towr]: https://github.com/ethz-adrl/towr - - diff --git a/doc/manifest.yaml b/doc/manifest.yaml index 782e948..4536c94 100644 --- a/doc/manifest.yaml +++ b/doc/manifest.yaml @@ -1,7 +1,7 @@ actions: [] authors: Alexander W. Winkler brief: '' -bugtracker: '' +bugtracker: http://github.com/ethz-adrl/ifopt/issues depends: - coinor-libipopt-dev - cmake @@ -13,7 +13,7 @@ description: "An Eigen-\n based in \ and \n constraints using Eigen. Easy integration in your projects in catkin\n\ \ or pure cmake." license: BSD -maintainers: Alexander W. Winkler +maintainers: Alexander W. Winkler msgs: [] package_type: package repo_url: '' diff --git a/ifopt_core/include/ifopt/bounds.h b/ifopt_core/include/ifopt/bounds.h index b418506..d0646c5 100644 --- a/ifopt_core/include/ifopt/bounds.h +++ b/ifopt_core/include/ifopt/bounds.h @@ -38,8 +38,6 @@ namespace ifopt { struct Bounds { /** * @brief Creates a bound between @a lower and @a upper. - * - * @ingroup ProblemFormulation */ Bounds(double lower = 0.0, double upper = 0.0) { diff --git a/ifopt_core/include/ifopt/composite.h b/ifopt_core/include/ifopt/composite.h index 44c6bdc..e138c09 100644 --- a/ifopt_core/include/ifopt/composite.h +++ b/ifopt_core/include/ifopt/composite.h @@ -50,23 +50,15 @@ namespace ifopt { /** * @brief Interface representing either Variable, Cost or Constraint. * - * This structure allows a user to define individual and independent variable - * sets, constraints and costs without having to worry about how to organize - * them with respect to each other. - * - * The high-level idea is that variables, costs and constraints can all be fit - * into the same interface (Component). For example, each has a "value", which - * is either the actual value of the variables, the constraint value g or the - * cost. Additionally, a real-world optimization problem usually doesn't just - * contain one set of variables, but is comprised of @a multiple variable sets, - * constraints and cost terms (Composite). This representation provides one - * common interface ("smallest common denominator") that can be contain either - * individual variables/costs/constraints or a Composite of these. This pattern + * Variables, costs and constraints can all be fit into the same interface + * (Component). For example, each has a "value", which is either the actual + * value of the variables, the constraint value g or the cost. + * This representation provides one common interface + * ("smallest common denominator") that can be contain either individual + * variables/costs/constraints or a Composite of these. This pattern * takes care of stacking variables, ordering Jacobians and providing bounds - * for the complete problem without duplicating code. - * - * For more information on the composite pattern visit - * https://sourcemaking.com/design_patterns/composite + * for the complete problem without duplicating code. For more information on + * the composite pattern visit https://sourcemaking.com/design_patterns/composite */ class Component { public: @@ -137,8 +129,9 @@ class Component { /** * @brief Prints the relevant information (name, rows, values) of this component. * @param tolerance When to flag constraint/bound violation. + * @param index_start Of this specific variables-, constraint- or cost set. */ - virtual void Print(double tolerance) const; + virtual void Print(double tolerance, int& index_start) const; /** * @brief Sets the number of rows of this component. @@ -187,7 +180,7 @@ class Composite : public Component { Jacobian GetJacobian () const override; VecBound GetBounds () const override; void SetVariables(const VectorXd& x) override; - void Print(double tolerance) const override; + void PrintAll() const; /** * @brief Access generic component with the specified name. diff --git a/ifopt_core/include/ifopt/constraint_set.h b/ifopt_core/include/ifopt/constraint_set.h index 65126de..1e9cd90 100644 --- a/ifopt_core/include/ifopt/constraint_set.h +++ b/ifopt_core/include/ifopt/constraint_set.h @@ -42,6 +42,9 @@ namespace ifopt { * @c n rows is given by: * lower_bound < g(x) < upper_bound * + * These constraint sets are later then stitched together to form the overall + * problem. + * * @ingroup ProblemFormulation * @sa Component */ diff --git a/ifopt_core/include/ifopt/cost_term.h b/ifopt_core/include/ifopt/cost_term.h index d8df625..a4ee369 100644 --- a/ifopt_core/include/ifopt/cost_term.h +++ b/ifopt_core/include/ifopt/cost_term.h @@ -64,10 +64,13 @@ class CostTerm : public ConstraintSet { * @brief Returns infinite bounds (e.g. no bounds). */ VecBound GetBounds() const final; + + /** + * Cost term printout slightly different from variables/constraints. + */ + void Print (double tol, int& index) const final; }; } - - #endif /* IFOPT_INCLUDE_IFOPT_COST_TERM_H_ */ diff --git a/ifopt_core/include/ifopt/problem.h b/ifopt_core/include/ifopt/problem.h index fa41d5e..0d0c11c 100644 --- a/ifopt_core/include/ifopt/problem.h +++ b/ifopt_core/include/ifopt/problem.h @@ -44,7 +44,41 @@ namespace ifopt { * @defgroup ProblemFormulation * @brief The elements to formulate the solver independent optimization problem. * - * These are defined in @ref ifopt_core. + * An optimization problem usually consists of multiple sets of independent + * variable- or constraint-sets. Each set represents a common concept, e.g. one + * set of variables represents spline coefficients, another footstep positions. + * Similarly, each constraint-set groups a set of similar constraints. + * + * The Nonlinear Optimization Problem to solve is defined as: + * + * find x0, x1 (variable-sets 0 & 1) + * s.t + * x0_lower <= x0 <= x0_upper (bounds on variable-set x0 \in R^2) + * + * {x0,x1} = arg min c0(x0,x1)+c1(x0,x1) (cost-terms 0 and 1) + * + * g0_lower < g0(x0,x1) < g0_upper (constraint-set 0 \in R^2) + * g1_lower < g1(x0,x1) < g0_upper (constraint-set 1 \in R^1) + * + * + * #### GetValues() + * This structure allows a user to define each of these sets independently in + * separate classes and ifopt takes care of building the overall problem from + * these sets. This is implemented by + * * stacking all variable-sets to build the overall variable vector + * * summing all cost-terms to calculate the total cost + * * stacking all constraint-sets to build the overall constraint vector. + * + * #### GetJacobian() + * Supplying derivative information greatly increases solution speed. ifopt + * allows to define the derivative of each cost-term/constraint-set with + * respect to each variable-set independently. This ensures that when the + * order of variable-sets changes in the overall vector, this derivative + * information is still valid. These "Jacobian blocks" must be supplied through + * ConstraintSet::FillJacobianBlock() and are then used to build the complete Jacobian for + * the cost and constraints. + * + * \image html ifopt.png */ /** @@ -54,18 +88,7 @@ namespace ifopt { * problem, which includes the optimization variables, their variable bounds, * the cost function, the constraints and their bounds and derivatives of * all. With this information the problem can be solved by any specific solver. - * - * find x1, x2 (variable sets 1 & 2, or defined in variable set) - * s.t - * x1_lower <= x1 <= x1_upper (bounds on variable set x1 \in R^m1) - * - * g1_lower < g1(x1,x2) < g1_upper (constraint set 1 \in R^n1) - * g2_lower < g2(x1,x2) < g2_upper (constraint set 2 \in R^n2) - * (or both constraints grouped in one constraint set) - * - * x1,x2 = arg min c1(x1,x2) (cost terms 1) - * - * Notice all the quantities (variables, cost, constraint) are represented + * All the quantities (variables, cost, constraint) are represented * by the same generic Component class. * * @ingroup ProblemFormulation diff --git a/ifopt_core/src/composite.cc b/ifopt_core/src/composite.cc index 7f67141..d14b72c 100644 --- a/ifopt_core/src/composite.cc +++ b/ifopt_core/src/composite.cc @@ -58,6 +58,43 @@ Component::GetName () const return name_; } +void Component::Print (double tol, int& index) const +{ + // calculate squared bound violation + VectorXd x = GetValues(); + VecBound bounds = GetBounds(); + + std::vector viol_idx; + for (uint i=0; iPrint(tolerance); + c->Print(tol, index); } std::cout << std::endl; } -void Component::Print (double tol) const -{ - // calculate squared bound violation - VectorXd x = GetValues(); - VecBound bounds = GetBounds(); - - std::vector viol_idx; - for (uint i=0; i #include +#include +#include + namespace ifopt { @@ -98,5 +101,24 @@ CostTerm::GetBounds() const return VecBound(GetRows(), NoBound); } +void +CostTerm::Print (double tol, int& index) const +{ + // only one scalar cost value + double cost = GetValues()(0); + + std::cout.precision(2); + std::cout << std::fixed + << std::left + << std::setw(30) << GetName() + << std::right + << std::setw(4) << GetRows() + << std::setw(9) << index + << std::setfill ('.') + << std::setw(7) << index+GetRows()-1 + << std::setfill (' ') + << std::setw(12) << cost + << std::endl; +} } /* namespace opt */ diff --git a/ifopt_core/src/problem.cc b/ifopt_core/src/problem.cc index 56232b0..7c98deb 100644 --- a/ifopt_core/src/problem.cc +++ b/ifopt_core/src/problem.cc @@ -35,10 +35,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace ifopt { Problem::Problem () - :constraints_("constraints", false), - costs_("costs", true) + :constraints_("constraint-sets", false), + costs_("cost-terms", true) { - variables_ = std::make_shared("variables", false); + variables_ = std::make_shared("variable-sets", false); } void @@ -176,12 +176,10 @@ Problem::SetOptVariablesFinal () void Problem::PrintCurrent() const { - double tol = 0.001; ///< tolerance when printing out constraint/bound violation. - using namespace std; cout << "\n" << "************************************************************\n" - << " IFOPT - Interface to Nonlinear Optimizers (v2.0.0)\n" + << " IFOPT - Interface to Nonlinear Optimizers (v2.0)\n" << " \u00a9 Alexander W. Winkler\n" << " https://github.com/ethz-adrl/ifopt\n" << "************************************************************" @@ -189,19 +187,19 @@ Problem::PrintCurrent() const << "Legend:\n" << "c - number of variables, constraints or cost terms" << std::endl << "i - indices of this set in overall problem" << std::endl - << "v - number of violated variable bounds or constraints (tol=" << tol << ")" + << "v - number of [violated variable- or constraint-bounds] or [cost term value]" << "\n\n" << std::right << std::setw(33) << "" << std::setw(5) << "c " - << std::setw(14) << "i " - << std::setw(6) << "v " + << std::setw(16) << "i " + << std::setw(11) << "v " << std::left << "\n"; - variables_->Print(tol); - constraints_.Print(tol); - costs_.Print(tol); + variables_->PrintAll(); + constraints_.PrintAll(); + costs_.PrintAll(); }; Problem::VectorXd diff --git a/ifopt_core/test/ifopt/test_vars_constr_cost.h b/ifopt_core/test/ifopt/test_vars_constr_cost.h index e646d58..f60d36d 100644 --- a/ifopt_core/test/ifopt/test_vars_constr_cost.h +++ b/ifopt_core/test/ifopt/test_vars_constr_cost.h @@ -46,6 +46,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * framework allows to define each set of variables or constraints absolutely * independently from another and correctly stitches them together to form the * final optimization problem. + * + * For a helpful graphical overview, see: + * http://docs.ros.org/api/ifopt/html/group__ProblemFormulation.html */ #include diff --git a/ifopt_ipopt/include/ifopt/ipopt_adapter.h b/ifopt_ipopt/include/ifopt/ipopt_adapter.h index 55f76ec..826c210 100644 --- a/ifopt_ipopt/include/ifopt/ipopt_adapter.h +++ b/ifopt_ipopt/include/ifopt/ipopt_adapter.h @@ -38,24 +38,18 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Sine this adapter wraps all of the Ipopt functions, we define the adapter * in this namespace as well. - * - * @ingroup Solvers */ namespace Ipopt { /** * @brief Solves the optimization problem using the IPOPT solver. * - * @ingroup solvers - * * Given an optimization Problem with variables, costs and constraints, this * class wraps it and makes it conform with the interface defined by IPOPT * https://projects.coin-or.org/Ipopt * * This implements the Adapter pattern. This class should not add any * functionality, but merely delegate it to the Adaptee (the Problem object). - * - * @ingroup Solvers */ class IpoptAdapter : public TNLP { public: diff --git a/ifopt_snopt/include/ifopt/snopt_adapter.h b/ifopt_snopt/include/ifopt/snopt_adapter.h index 55574c7..4835708 100644 --- a/ifopt_snopt/include/ifopt/snopt_adapter.h +++ b/ifopt_snopt/include/ifopt/snopt_adapter.h @@ -38,16 +38,12 @@ namespace ifopt { * * If you have a newer version of SNOPT installed, use snopt_adapter_76.h. * - * @ingroup solvers - * * Given an optimization Problem with variables, costs and constraints, this * class wraps it and makes it conform with the interface defined by SNOPT * http://web.stanford.edu/group/SOL/guides/sndoc7.pdf * * This implements the Adapter pattern. This class should not add any * functionality, but merely delegate it to the Adaptee (the Problem object). - * - * @ingroup Solvers */ class SnoptAdapter : public snoptProblemA { public: