From 9b31ded49f1b9b46744feebcb1bb3e6eba2a4b6c Mon Sep 17 00:00:00 2001 From: s415018 <47845716+s415018@users.noreply.github.com> Date: Wed, 25 Mar 2020 14:46:01 +0800 Subject: [PATCH 1/5] Update README.md --- README.md | 138 +----------------------------------------------------- 1 file changed, 1 insertion(+), 137 deletions(-) diff --git a/README.md b/README.md index 8ede803e..b2468c72 100644 --- a/README.md +++ b/README.md @@ -1,137 +1 @@ -
- -
- -# OpenVSLAM: A Versatile Visual SLAM Framework -[![Wercker Status](https://app.wercker.com/status/8b02a43f48216385658bb3857aae5fd8/s/master)](https://app.wercker.com/shinsumicco/openvslam/runs) -[![Travis CI Status](https://api.travis-ci.org/xdspacelab/openvslam.svg?branch=master)](https://travis-ci.org/xdspacelab/openvslam) -[![Documentation Status](https://readthedocs.org/projects/openvslam/badge/?version=master)](https://openvslam.readthedocs.io/) -[![Docker Build Status](https://img.shields.io/docker/cloud/build/shinsumicco/openvslam.svg)](https://hub.docker.com/r/shinsumicco/openvslam) -[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/licenses/BSD-2-Clause) - -## Overview - -[](https://arxiv.org/abs/1910.01122) - -[](https://www.youtube.com/watch?v=Ro_s3Lbx5ms) - -[**[PrePrint]**](https://arxiv.org/abs/1910.01122) [**[YouTube]**](https://www.youtube.com/watch?v=Ro_s3Lbx5ms) - -OpenVSLAM is a monocular, stereo, and RGBD visual SLAM system. -The notable features are: - -- It is compatible with **various type of camera models** and can be easily customized for other camera models. -- Created maps can be **stored and loaded**, then OpenVSLAM can **localize new images** based on the prebuilt maps. -- The system is fully modular. It is designed by encapsulating several functions in separated components with easy-to-understand APIs. -- We provided **some code snippets** to understand the core functionalities of this system. - -OpenVSLAM is based on an indirect SLAM algorithm with sparse features, such as ORB-SLAM, ProSLAM, and UcoSLAM. -One of the noteworthy features of OpenVSLAM is that the system can deal with various type of camera models, such as perspective, fisheye, and equirectangular. -If needed, users can implement extra camera models (e.g. dual fisheye, catadioptric) with ease. -For example, visual SLAM algorithm using **equirectangular camera models** (e.g. RICOH THETA series, insta360 series, etc) is shown above. - -Some code snippets to understand the core functionalities of the system are provided. -You can employ these snippets for in your own programs. -Please see the `*.cc` files in `./example` directory or check [Simple Tutorial](https://openvslam.readthedocs.io/en/master/simple_tutorial.html) and [Example](https://openvslam.readthedocs.io/en/master/example.html). - -We provided [documentation](https://openvslam.readthedocs.io/) for installation and tutorial. -Please contact us via [GitHub issues](https://github.com/xdspacelab/openvslam/issues) if you have any questions or notice any bugs about the software. - -## Motivation - -Visual SLAM is regarded as a next-generation technology for supporting industries such as automotives, robotics, and xR. -We released OpenVSLAM as an opensource project with the aim of collaborating with people around the world to accelerate the development of this field. -In return, we hope this project will bring safe and reliable technologies for a better society. - -## Installation - -Please see [**Installation**](https://openvslam.readthedocs.io/en/master/installation.html) chapter in the [documentation](https://openvslam.readthedocs.io/). - -[**The instructions for Docker users**](https://openvslam.readthedocs.io/en/master/docker.html) are also provided. - -## Tutorial - -Please see [**Simple Tutorial**](https://openvslam.readthedocs.io/en/master/simple_tutorial.html) chapter in the [documentation](https://openvslam.readthedocs.io/). - -A sample ORB vocabulary file can be downloaded from [here](https://drive.google.com/open?id=1wUPb328th8bUqhOk-i8xllt5mgRW4n84). -Sample datasets are also provided at [here](https://drive.google.com/open?id=1A_gq8LYuENePhNHsuscLZQPhbJJwzAq4). - -If you would like to run visual SLAM with standard benchmarking datasets (e.g. KITTI Odometry dataset), please see [**SLAM with standard datasets**](https://openvslam.readthedocs.io/en/master/example.html#slam-with-standard-datasets) section in the [documentation](https://openvslam.readthedocs.io/). - -## Community - -If you want to join our Slack community, please fill out the application form from the following site(s): - -- [http://bit.ly/openvslam](http://bit.ly/openvslam) -- [http://bit.ly/openvslam-jp](http://bit.ly/openvslam-jp) (日本語: in Japanese) - -## Currently working on - -- IMU integration -- Python bindings -- Implementation of extra camera models -- Refactoring - -Feedbacks, feature requests, and contribution are welcome! - -## License - -**2-clause BSD license** (see [LICENSE](./LICENSE)) - -The following files are derived from third-party libraries. - -- `./3rd/json` : [nlohmann/json \[v3.6.1\]](https://github.com/nlohmann/json) (MIT license) -- `./3rd/popl` : [badaix/popl \[v1.2.0\]](https://github.com/badaix/popl) (MIT license) -- `./3rd/spdlog` : [gabime/spdlog \[v1.3.1\]](https://github.com/gabime/spdlog) (MIT license) -- `./src/openvslam/solver/pnp_solver.cc` : part of [laurentkneip/opengv](https://github.com/laurentkneip/opengv) (3-clause BSD license) -- `./src/openvslam/feature/orb_extractor.cc` : part of [opencv/opencv](https://github.com/opencv/opencv) (3-clause BSD License) -- `./src/openvslam/feature/orb_point_pairs.h` : part of [opencv/opencv](https://github.com/opencv/opencv) (3-clause BSD License) -- `./viewer/public/js/lib/dat.gui.min.js` : [dataarts/dat.gui](https://github.com/dataarts/dat.gui) (Apache License 2.0) -- `./viewer/public/js/lib/protobuf.min.js` : [protobufjs/protobuf.js](https://github.com/protobufjs/protobuf.js) (3-clause BSD License) -- `./viewer/public/js/lib/stats.min.js` : [mrdoob/stats.js](https://github.com/mrdoob/stats.js) (MIT license) -- `./viewer/public/js/lib/three.min.js` : [mrdoob/three.js](https://github.com/mrdoob/three.js) (MIT license) - -Please use `g2o` as the dynamic link library because `csparse_extension` module of `g2o` is LGPLv3+. - -## Contributors - -- Shinya Sumikura ([@shinsumicco](https://github.com/shinsumicco)) -- Mikiya Shibuya ([@MikiyaShibuya](https://github.com/MikiyaShibuya)) -- Ken Sakurada ([@kensakurada](https://github.com/kensakurada)) - -## Citation - -OpenVSLAM **won first place** at **ACM Multimedia 2019 Open Source Software Competition**. - -If OpenVSLAM helps your research, please cite the paper for OpenVSLAM. Here is a BibTeX entry: - -``` -@inproceedings{openvslam2019, - author = {Sumikura, Shinya and Shibuya, Mikiya and Sakurada, Ken}, - title = {{OpenVSLAM: A Versatile Visual SLAM Framework}}, - booktitle = {Proceedings of the 27th ACM International Conference on Multimedia}, - series = {MM '19}, - year = {2019}, - isbn = {978-1-4503-6889-6}, - location = {Nice, France}, - pages = {2292--2295}, - numpages = {4}, - url = {http://doi.acm.org/10.1145/3343031.3350539}, - doi = {10.1145/3343031.3350539}, - acmid = {3350539}, - publisher = {ACM}, - address = {New York, NY, USA} -} -``` - -The preprint can be found [here](https://arxiv.org/abs/1910.01122). - -## Reference - -- Raúl Mur-Artal, J. M. M. Montiel, and Juan D. Tardós. 2015. ORB-SLAM: a Versatile and Accurate Monocular SLAM System. IEEE Transactions on Robotics 31, 5 (2015), 1147–1163. -- Raúl Mur-Artal and Juan D. Tardós. 2017. ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras. IEEE Transactions on Robotics 33, 5 (2017), 1255–1262. -- Dominik Schlegel, Mirco Colosi, and Giorgio Grisetti. 2018. ProSLAM: Graph SLAM from a Programmer’s Perspective. In Proceedings of IEEE International Conference on Robotics and Automation (ICRA). 1–9. -- Rafael Muñoz-Salinas and Rafael Medina Carnicer. 2019. UcoSLAM: Simultaneous Localization and Mapping by Fusion of KeyPoints and Squared Planar Markers. arXiv:1902.03729. -- Mapillary AB. 2019. OpenSfM. https://github.com/mapillary/OpenSfM. -- Giorgio Grisetti, Rainer Kümmerle, Cyrill Stachniss, and Wolfram Burgard. 2010. A Tutorial on Graph-Based SLAM. IEEE Transactions on Intelligent Transportation SystemsMagazine 2, 4 (2010), 31–43. -- Rainer Kümmerle, Giorgio Grisetti, Hauke Strasdat, Kurt Konolige, and Wolfram Burgard. 2011. g2o: A general framework for graph optimization. In Proceedings of IEEE International Conference on Robotics and Automation (ICRA). 3607–3613. +# Hi \ No newline at end of file From 608df559edc367622ee585a35a5fee6f05aadd69 Mon Sep 17 00:00:00 2001 From: s415018 <47845716+s415018@users.noreply.github.com> Date: Tue, 31 Mar 2020 23:39:50 +0800 Subject: [PATCH 2/5] Update README.md --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b2468c72..7b234e93 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -# Hi \ No newline at end of file +# Hi + +How to Calibrate a Monocular Camera + +-3*swZjI+!{x~1$b4TE7^h(&_>I4efpRg|hd%OII{R%S~Z =*UF_nW_9Ya|`O@>-Sf2kMu&ZvL{8Wa+E+8N$x{=}3^ z)6m$?OmTB;qz&dM^ET=Ubwf>)!jfn;#(@>vtJ)&&G_^+h`OINju>9$N{Fn5<6$SQa z_y*%$?=vB|@n~dc@yBj*hyl3-ZQp;S)>K)746O5B>x!oKBsFSC$@`Tt^4r$>dSgzU zIh>s>Ov7b?4}K3M!X5KnURWwero*KdHH2kZs4Se7P~d{Za7Y0fqbQ-v)N(8H8J-{+ zf1~|1i=bC!hQLvbaEoTWlU#1hxJ=M=P^zA}Ov=7mY<}Ev4f{>a_NUkWOgQq;6=iU^ zepY5lLLvQlLz+LLzn8cXMWPHg9rr!4Ho)JFX@Sz>a8k|M>OaPu&&tJ<61c;@_oZ(C zeC`ncHe>SUNxhH!^O?*Luhz{XM%{2->*sn9zKTseO`lG2poX2)*0k1B8Is^y4T`gv zTnS?w&&q$v@E)fHJ=t#OHiGhlcfCerT?q%yOJoeR>NCOm9j~0g@NkY{BH7P+;BIFL z*S;g*@gzpLK)gwW;y7Y?K~X<2G^uZKC|lKk2ab3CAl*u@b(qOa!Ut$C=eH%!g*cB$ zYY*9Q?hU#}Az@ZQ^l5`Ga&A)VmZUbLrl$WV5+?&Wf6&2?DDh-}tovfW{aJ@^%J{OE zZ+iBgH*B9xVL*;WLkBdR+7qGE%Q_VX>o-vgnueJu@kuH;v%2J(!yOSP7e^%yARcjF zRCBZo#g#VOV%6e}W63gKI7BeV2&g&LxNNIZE~93?zCV(`1csSjWE2@+NXhLFXThcB zm5EvWKuxZoXa$Jo+SjR+0jg;b@{N;~6Rf=n=u=YFg}jL|sAbJ>kBeP>US$Q@=0+0M z{RM2h9XbY=9k-?7?dWn2tUcOffF1ou+%J3$%F5#fAcGu?1uIaBm9+l}?yug!?!0ea zVos1h?ZKWDz-!gf>#H04o-~i~7THdA!N$k|-|J1riG@w>%6I1l!yh&3>y(ZxhlW^X zdN{_hSw%fDQJ&o;$6TG4oQM_?v#azOQ&}|}^YSpQ&ANqIqnbo(o`~pR`<`Nm8%$Hj z=RyD_%^A>=LXq7Zsf(btic2*ay1+&dn;aTcE(HKsS{RRKAx{2TkG!*Lr80fsI@8pc zc %$W*G7DHN5eb~tc2+SaVo904`+NS z&fb1~;)0N7yt~9K29*73a%#iSELI%OqHQ`@s*$c@=2KCU>cXQDdp4tVJC9Ra5!y&4 z(l*g44@xf6PLZ#}ApuXNlKcYbil~gI+;i3UM`ttHtgS;ch7e>*P- 0uphWF~b59j9 z%vKC>UW7BW&hilL+P&B!FwJ}LC2F0`dI=T-&tb77d|FBqeT2!7Nz{PM1WmU1o0&2} zQ4{IkLj<+F5`y{!iSmH+ym=z}mYd8B+qoL32JsdQ@tWUmB{`EcOrO?Kf0G3PkG-H+ z@oQzgu_f|(CCtLO?kc-nsDQ6%`f_b%=|~d{4RUURv1?8pa+;YJ>D^q47yd*8topbE z|H+MiX2=bZElS&rO((PxR=+9Yt6q=2_U`Stsdd@Q9e=^2WEyd`S*{v`a&jfJ=C7qC z_WZ|6Lt6PYJLqo-P1ddP>aF(2SeohL)bT74ar9t(&^3p&Y3b-HWf1`i{Hvw kOht^W7`IGChYGsT zH&ObSQR&O{-V@s?(P+sl`wQ{BHLchMQpvl(f=PYkg?tFxM02iJ5khq2S{S-$D}I0H zl~2UF$DTU&GG)s#+mh3ha<*DiJLO^s(&5!<@3)u|Ox&=`fWbwSPk%5Ode2f&d 6X3S_o_6Dk;1#q02SPzJlJGE=_8Ep<7B4>srd?T9Vpnh ;3TC$KxA%JPuxDJ`;fi@&0zMWr%72SJNdO z(rI;EQ}#62e>|Wg 6H05u|+tl@PR#!J?eu_hYq#ipoV-ZeF=eaBE)RO`&ry^^`Kc>!Xw7KB@Yx8;`&1B z%QBgH1F843?U{GXjaM|u3>qG?W6 +w2Mv@J5C5_!b6N~c~bYD8a+>D8(&G i dQcl(j0xb?#t;4dZWpqnJy-uT#FEK9d>#RM_Jw$o=YIr8v#~QSHG@8M4 z-pe?9bxrAI0=16lP9dDQ5tag&x%>zs-Ix}Uy5eQ-Z--#?fhHVSTV<`Y=UQkB6h=DI zTL(z#l_M3ta- $xVs2S!r4 zXrA(#Bhc~XPC=;@0w@c^`zV}KiVWzer2kSFJ{Kv7)7 kdHeX2TDI;@nwNF z!)&(Lvw=I77sc!^znzU%QVyf{s)FV%WeN(6#0-gp@l}`K?(P7Pay8FXM-)LO`LGLZ z^q=J_((PI$C8*EH8kUPlLTXn=9Zou`lFUcy7U=UzQ_|S--&A1zCu#t0>`8EfowVo! z+F-3B9-}Mi+KCa1h~`j{J_t8c`z=Xxz_lsji787odd-@5@y@Ug`vEmMm4c*{VgK|d z`iVnsz5UvHsS~eX`qMM%&E$8_`x_m3`5dBK&nBD3E8bB6C0r-vn&6G7b $QeeRSNMk^1>`>I=vohqaiNQ}70H2%oCcky z %kIjx5W< zwF9SPwN>KDadeWj@$zQWLG3)al%yn$)<0UIKe3!BkZq&f6KTnHi(`rM(zP3y=Tr93 zLY(Z@7}TAQ-Dlq-95@?+p7YKHAB1UOfgpw-t5bNSHWddIEq{_g$Fx)-bvBlZ<0;&_ z(D%vS5@_|R-T?z|Z>Gd-KsbOf+R9gE4qnz%(1%JagCB+c_eE_H VvL6+bCm%ulvfol zEcL0rS6Nl3Co33~vX8`P1WhHEl|Z+q5m9PBS;YoS(Jss4KNoS45zHXvrFulC9T^)p zrW+k)2%604?l(kr{j&=y5+QZ7z`BbWC(Iy&9r0@41KIVDyN0~`#eO}H-<5!kz$s(% zXMuc~(_#%sVOWv?CFqGc+U_D7qmZ~sDUr9n50`6XAA$C9^Btp*vf9#tjY_YB3l43; zFy9VedoHPl6U@_{ BI2|@u%i{w$&{^s~RD*j9K2Qf(GfC3!qd5Vxg*0 z6BE~3K&(giSzrd*zvCQPpqOG>m8fwrF#legY9FoW1^cU<3NmS3Do=`x_UuUjv5CG# z4fw`Dn%}w@rY)!x&g36h{0}%z?U%=Xzv=Fp^GTU*seu{r=X)sgtLiM-g=vB^8A^c) zj<(GqPCytJ1rTsP+Z-26R7VmZ$~Bt4R?)0P(Zyq;Ir>CqoCk-8VW1uQ=ZdrB^4N+x z_T=VP?GYw5Dk@W)3NUnkI!&2iD)5Wf!XcyrhiB0>b3-r>3|M|Q8d12}YyKz+G|z`NxwjwvwLTgu$ngW%5y1fiW9~4gst%QE*Yz-HH679F}cdVD0=*oj zqMcRX^N5stl+4iP)*U(Jhbk&;|Yb7(YmYgkz;M@kqd zV^y`1@+ePcL74t~)!Xx&G|t@8Tn5Fmb!Qyz|4mePh5>CrIeO0Jd7>dds)0P(><^iA zZu?%# 7URo3rJqh^jeqD8WI4?cRPtFBpBH!M+DAy{`Ne8mP+ni?;b<9T>lE864aC@& zMy5x1M2B6z_6Lj}WKwUsc@0Mcl4uTzUCNi%g(UE(p?uzdL51y{-rS_EG-lkl{~i{I zqco!oNb)`DGb`Q*Ls+BzD{ML ycd;gNuI9;dQ5M6d*cwzH>fA QfX{Z# zEd!9pW~|pqtd@=+{fohUjKAu);zmrR@hc+kXW5fhs)Bm6$5tw9j$J9ehl=q%?OIUr z>34C284&~*4TkksB}$UR{3|9)KZ*Asz2%otWoiTQI9aWw6Ibi9o5EXuy)Q)|0s2B2BV1a}0J6Sw&-i7*V|E((i~g z?ADj-jhJC8VT2_{i=BSeJ@0K;bhoH~xakZUOs&g+U)i84xCS}}!6 b0 bvBdG2l?arf#0Wv-%;a>1f>J- zZ!{JfAV x{qT6>{koRt->`|6(L-PF!?>d>M=j`;@IA`=ysrPvgjs@=6`S=N}! zv@i3N`3hNC8FS+E2k_;xqfa&Im6^5Z_-7pU!F+IOf|^#M%on4s{Y>pO)uC&el94gA zN$3G{q*`bWEO40WYJliRsk)VHbfy9WI$m!Q+l49&A f9Np)?H2(iXj&cU`Vtp@bfmwz2wWZ;g#6VkS)UP~o1JA4q&@aMyKuj){0 zH)3EP?heFGWgk@F^(xy {zC415Xi?y?INM`CCqk{SJ>I?U)1 z&cvVxQA2BZF$<(Fokel9s9hnm*6TU5b!()L)MIU&HfA_+d|~xons+g;fJ=nVD%T2q ze(x{|8s4=Gz0s`WeA2Pfr#6^LMi~Re3AT&lI4(eh|AQIMB*;HfG1YwWU#;WakiebE z&-+e+N!A Py**O);G@Cx_ z+XihA;N8*}y{pdUkP9T-RvlL`U4Npj!SDJ|KYTwPv)=Ek@#YP)=}PIY>lH~L$5tS) z_z=GI4(ECeF(oH *hzs#n$ WZHGjhHO^RZ+<-vLR0GmQ8UUx>ilO)y}?ii#iTPBFUMte8xubzaN&d4 z`s4h0mIU;>#+069h13C#wO$^0uie|9)h0i&6qHMXy`$~7s4dfCx6r3Pb;Z~W&}$bD z8-{7$@9ujufFDZra9YgDaA5YvY#n-$y|~iRJq#g{Ukq2q|Ep~OBgVE&ky33X<<}2) zE>dH<;eh*2nhaFO<2zMP>R;T;luu40+@uE!z?{GdRfIDh2ULfxD6SV{2`$;5%so!H z_N_+&t1P8V*(#M%X@&}E>UD?6`(;)d7PXV5GioS8SCYI(7y&@q2gAuL?&MW!MZwlT zu>|xi=>~d;;i-&~UxP)&q)J9UjP{e^ci5E>U=Dcnd~aO2&{piqkSha7ps(kW)~bFs zvqJjT{p4>9fIOywAHtL}A^tDc=+O;qw%xgF^WAOnZ73UK>i+g2^-*qQB9PGidKH=p zUpN~cgAy^YZT`oLK>VH-J~>2<3%-m?5;si7Du=o#Za6U?u4NLrUse9^qW i| zT%^>|*p!O ARN6pt$eMI<7ncV4P?wlt?>uqck)7^qVW zANK_^3}xc404olkVUkhu8FcUQloa4K1UnZfweN!L7Wxad_3~QDZbnK$6FxhPAfpPV zk6GmyQ0dKC$*1X(_AW8oUX}p0dJMZ`TwdoiBT9Z4hG-kp$_F$LXwp(q*ETE&VfIc1 zvU%@vX=t(dSwf!ilGlvvQ2cdclU?b6xzgY2nBJJn GgQ65Qa=C^ z&{?lE=-g{<#Z92I;|53g;foKF6X!PK=pzxRkHrIwWw4A32kIez#fZJUDxXWtm|DdJ z+Pq?x8%KhZz674(pz#WGiM{Bg(HW4jl^WBT(ho+OO d(PM3;tpJ`Sa6}1hfhL47;IC@1O9wWmd@Dv?tv<7B~1UfaPFa&@aS&k-Yv0T_~8) zjyO& T=0yA>a+1&zSLUzm#Fb?Y2zL2_2S}v zaTqndTb{%>! ceG4DHnkC1 zZE)4C)43#IKaQE1=D=N`j9QeL?lzNOJ5&uZU39L7{7~Mc=wN0~6-E?oPz7ySd9$)4 zRACh*9pg2Y-cnC8F=E)hj7Cv1tux&+pxWdEyV)TGW+=1kyRm7FQ5bW62M^iQE4U6T zo$2Z^b<+1K+LeSarp|ENs{L+@NJ+UWs$;wTHx{y8^Pu;>cGz%l!fyZQ*!-MU)Y<-0 zH}uf+sZ`lW`LZvCTu^+rNjR2MIdllxZ1(jQRR@kPiN;|Dt&pk(={!qOdRQy=6*(Kr z=P}SZ`^+OzG*kS-F ^fkoXF31 zC`jDR;iK(!HgKqrgPpkWg`HH=R^n&G3Z0X>>v*6I9lyY&hfYZ#i_3P70D*2$8>z6Y zj#%sMTcTyEt;S6siKZ^8 }EqjK={OI{sIV`%{U|5d~^V@WkO_vlVi= z6z1;11il@PWdt46?d}-JxOT2xCOc>HKl_0SPXr1*fR?g!0uVh~;_;~XwjHpH$YZb^ zB}PD1ri+GXBmmrcWB9h*TL$KRX4h8fFmIghg&t5 k^?M1>-@C%%R zED#;;zQ=ttzBP43kB)Ce`JhslC^L6P{I^r?5k}&1`swrHqHNw?J>(7 Nxz)bhRdHHUg6R|lTI(Jz$QaMc8 zjRMKBQafLow%10YQ*0$T)JCPIbc#($g=(mFVoG&lsJ1+rRRnGLXS2w^Vty@7;IImA zGvhnp!WD1P=nqsX3v&9hTr4T?w(`?)4AW4l`f|xoHcMfqlDg&F5@M@_&SANAs)Rcv zmSS=}f*!Mhnybza5ob234Q;VQ5h{Q`UWd|?OY97x%4#eVzpBR9aZ*tKt6?q Vyn#!VrI4ezY6WFmTE{GtU?I?~-52TmI3V!y}dZp;prMVrKL5nZ0 zel!br6ZQvB(iBKOK3w|LtA=8pkSxk0m$S^_O2a{pFt OK92^!bn8zWL9M)ii| #B!tvxN6IdfwZTzKw-&HxSuna
AT(=KoJ+sW6iCp8C(Q616Q z^0YrJeE2~NY2c@Y11rAp)@mm%AB1Pkbk$;YcFe;+h Eg)!cLFs$Q-0e`1c8FQ4UqAsm8MK?x+4@7DDp<%#KhDOisINF# zI{#qHerHm;cr1EK91qLyTuc+4bQM8&h3lzJpArnmJ_HjBY`GK-N|bLx%(%O=5%m_a zUR5({gx&FZ(7Y*GQt9_M2EcV4v>u-U6@B~!hSBhIJbbD#4jz`N= vXH& zZ@}}J9t0wQZ0@+S5ZriN)g@d+5(M0MSg92;gNW~#rqL4P)1ogFIa{k>B1Vhr0FzLn zpD*;*ctTCShKRxi9k1vfCpFH(N(X^qRhh+e CHTYVfJ_JVmiDqI!!9nEP=&Z0nAP>E~ zHXrUZXGb8rqki?6Z*aSPg)Kg94#^Nmz9--M1K;;4=DI@$Kg;aEzGJKZ_L=cV09`J! zU1+RQI7NK%dzfm!a9U=Kcsc@s1vA=?2bnNJ_}NG*XoA2}m J{1i;;6mXa;LR9J_roO27X4e!!x&v= z%x4%fAa1Q+=DqN>)n@g293Va*V(TQOf=JQq3Y!E8V532#5pyYR-0WyN5z%gwVhS-2 zCwC72-ilAs^WHGazA$U^4w6wMFow24Wz|cInxU2PIU@NQMX}pf_)YR41i%eG_vLoj zSF=%Ng19qg6^H8gwUY-T($;HhJ8xgfrOO7Sy) *mMv zP}c|ewp+nBNq6u1^g~qz(GAM7`j+0m3!qPk&|&ZXrhU{x@>ZAfs0?@UaFydwWTR#J zU6}V56fgc)%e0GR$A`$< ^*qyB;tT2_w;pn=-XqKhHmY0AgW2So68V 25=|3*BdtTfmfxohYvh355DeZ=R2NfN=_iV{g1SckENe8LBMcC%(UN}D &J)sUC{BAT?jtC4o}gErWvfOLFL0oAhK6;@Joeb_{4#+eAcPP zljiURa4=DSmIp{?&XW+jWuvhw`cu$R=+0`x#5u4p&Rs*B-3&s+a8Hq$cAdJ=tUD^J zTS_P~D+fAQI1{#j4e-ssN5$w$=3X~nB^_stf$;_Ub}8F9 PRFdpf02$eZboC6ujgDb#$EK3Y7;6lg;K4lB< zLlv{sZRPGALM1%q_#97V$-KI8VnAP9 n<=s#E6fN-o;db1la+lE~%M- z SLaVOGN+aIhi82`;EK1`{1?MNftrSEBBUm@Uz)@e;UOI0+=|***KMzr&lT` zDg{EZmAwWt=iyd{@v^XHT95j~685~PM1Vd>6)dgE{}v?`^JY|2bzryO08b`Z!E@fe zQB+U{S~|`8Sl`!=^8paitglvLnFOJ1W@1D`X*U@xJ)tC(3v6O`L_GoJr;i`wNWq$5 za1l+;ciQGgzl=kJXCj{A?T|-aZVYxbrCMDg;BN4K{Sc7@la(%?Q;K{msZEizD|u~; zhi2O47DV@#iR<6>jv|Qb>PO(}z?aLyt!VC@lC}7&jtOG;e2olTYSd2GyDz&9y=F4s zChOj5J(jKr14{LAREY9o9pi@N7J1Yo@nORa8k>yi0|fo-8HNOll%z2v%YB!ry@C;( zZd_vCcfxiAw{n*q2#^)UGI>S|G8*Npm;9V2ae-)&mckQCy$)Su6RJ+qc==F78iQF_r+;ll~`n&b@xA& zFGQ;)hY=~hp3xLpvT)tR cfR_1uQs#Ilr(Th z#zOd3=!CIknV!}I0 s;?!lAt=f=xr`YzJf+{rV=v7aIg z-ntM=bU}2$JtUtQr$MmU;ys~we0D=xt*-m4W75)pBpO}$tpIN$e$YvH{&(hBUF?L* zx$3B=ftgp&&V!wuPTv^I-k +gi^Q&>au5@#vsn?s|q=x%EWg{Qj0GBX`2 z7%&gec9=q_W8o$ho`O7%Ap~l+Vw)mIM|!`ZfqZ*%pUgS-w9y+h&(oajAnaj^Mno4& zM!%) I_xJ=8 hxFzuo)@n#{{Q8p_^2c#wb#UA#E{jy;xItv9<#8~LqOhG2u| z(ZG9WXfw+PI=4ALiTzQz(+;PDO`GB|@t{HeM!TAmx}V22|1d4=>Q;&4A0Cahz;3UN zfOW88@f1c^;p-Vwr)yi{?u@}_Z&)n8Y~^L#3j}s~HD>etBLa&R+k*`DR2K{BiPzS7 zoi{6P9o!%D0ru(IP1nTfDWnE*JctMD9Zb3QJjAR?c+jN4XI Zh%Y_$0 fL|VX2#pAYmia3W#o*@KUP97i +(6 zd8e2qwb)S(Da44w $M4gruIG#P_DZk@nxZ@f94QlaM1y^H$`Rv#6I $~*v@_sJ^dj+R-SlcA02ryCtfps7#e3Ba9T;X+y#_mq;KQuhki9)z`` zx20UHVN!^)hGr|ty|p65#HBkpMrX_sqP3iIK!W$Mep=cz4v2T3h$az)G|zkl@+pT- zCis@T^8NbK=lGI%ii}eAJw`c>$up8+c_KiPu>mkKW73?}Ia{O rNrkZb{2}a`? zp+jSiaJVv<9s+gso1qhbca_;99DV5rD)St`QN`J4S$R5v1seC^9nB!$6_6$=%xhxS z=%Je$aD}36Up>- -J<0-zRzlVU`om6ojX~SMnjZ-n~qE8dmREJ4p4uUyk+^i4XVuc}*Mm=po zHXEahq1~v=y*a#<1je61ksPM^jvyy(^-dO%dL;QcC0da6Eopa+Ide7GxY>%?%dyAF z5~WGM3`EKQDIk=_fqK~d=PadAWr$>fn2Dv|=0GZW>gjsno*?wk6m b34<08@ z1COXtGoaR56|i*NtfxTP+mF{%{H_mwJNN!kM3I4tE#x@q%_noslf}F`ZIp(MhrhZr zwtj&<^S6J~nE-vV@j&SMaN8 S zUh-V#N3{-XUkeYpu<1~Wb4x@7k)CWcB~_t=GLh_L$@oP%oE%{_2{jcup2|Tl9+%Gn znT%MocVO>8;S4iZ0=-Q8dRuc(4nXuPGlZthxGpLrPHwYUY5S_@Mx{Cy5SHA6M%5V# z^mAwqvbILGi$`q2A?kps)Q>&{Kwvi>T=4A)7R-__=I)i({`wTeVxqjVid>gL2rLuj zwy;22mu^%~KF*CBA}Iv*Z)n3H0%XgeW-Aw*sjJ`rz+W@Ghx7R(zPR4jq~&+ArQ1mc z3wD1V@7v!8i>lc$w}VSOdI_^)u}NC36nfF=6sJ_v!P+yvHF|`Q{KsJ1v 6xevAGN%uX5y)U_A&@u(mJHLw1uK41(@TNi{hjS6jB ziSc|WQ>Id~oSs~==~Q-v3cP^~sH=2p8Xv|o{hkBIo#Y$()|sGW`4-b 7cpbBE=~X+ DjcaW3<1Wt%m&?YskM^7V~kCg>X5Add$5^2 zc{h7$z@ 3YB^$GGgHwUf{_^c zek(?&lg7SM=gBFieXY^!Nv*+3`O;Bd8?w80^2N;k0M4Z}U7Q~Ucn~9$7`VO@luZBK zj4l~#Mt4-p7c-`>S>K-Jd?7k0_?Q9xc}}{R?qoUKnc{_Tw<_` CuXxq##sE>b2=GyXQ+_{L&=W(>7ejj?gdia_b`yUZhWYDsXHc`=ZO|W7p>cJ{jw7 zJ)EY2Q|`GG&rzSw`Aa~z)pUL6=2s@H!(zd2ln*OsPUBpOfBO{vm^9rX{n@3^&Y*}{ z?%t(^wdTF ofK&4%zV`n9<^_FY_ AWB9_= z_a_Z{BQ8JFBXx$XjMSM|zX n1F+~%5^W&TIf>e_PTOBfN@lL33G}PVCU~Qqb+8)%O;=!9jQ&Zjxeou27 zi~Kk+P^q`ckX!&gnGjV0;Z5@Ew%-pHvBRHy1*KJb)x<=Ph`h@Rj~inSiICm@e!&8! zO`pl3o*} ZLewb3FF8jj_^_ 4HLnaY8REM>aY0x@83rl(qDZ&NJrB0pet1cN+U4oNK8}jY293s zaO3Mtquh}Cy9cU@kY7cOj$|=ijo1bdN9ZG-*oc6Y5o#5#IGq-l8S(bZqTgn+in3yc zm3`9RBDGI8HxGAMporZfkBM+W+zO5>AMk!NbIP0Q-UgIj>@^)lU~dm;4Rz{tR){ Abf=hBygbdgXJq zW493h5|qT^ICR# #5T4r!E?#(&*1BJ3YCuSClyb4oi3P(IUdwm~#M*y4w>g|}eN zGSww^B=u!sgb?AKe+{#E-#X(4oZzq{SZtwa=mtx0a{<~-jpR5|0~)F$!NnDt8M;l1 zI12quy)KiZUk|xsYz46DjsWS88(5zAOwZY)&uIr8jtHi9 kE>r0W{0rnJ|IY4&pX&3Bz0_0v56Q&Z*~(1-|CO zD*sJXa^Z*k{_8s7d7@8X#}V ahYs4w11_$1^@A zn87g?NKwRT{FowQqhY<*Z7RRF<*jftQ#wRUb)>Re@503pSW`x}Oo(+&<-M0M2gYfU z8Y9&?dJ1(Z2EN%!esZsh+Brl USw;=rfG0CR?k$FWppVUth$e@67Q`=89gJ(;1@wcH#)N z-lsvAr0ME#C1 ze`QRN6v%mE`&!e){ *VUtSOygs{UDmrX&ksg 4>Y2a!uP)whfg`Zaxd)1^69UZjZ!=ZI93HAXu z?11C`QpECAO)@m;D `P z`}91x2VuaUF>qxd;veVv?-B|4*w^c~F(L6`=90nQMydNG-?*^MCMCu!xe_;4lc%Vl z_S|u39EYl>eCUYxak6SYu-6@&skGk9P_EWz&YAfe;`chf73RM3bxF%)bfC)~WR@8X zzK0Afs4bAf4kb+3NJ3x6hw9+Bo{l`Pv8K<7(hD(Mglet+s)f1c#4!|^Y!G94!S?F5 zjv{wc!=T@P`g-6wohdrzQiseG$1}HR6%(;de!fxd+t6^&1$Co)(@c%_zd6aY*Jx1P z>t;tj$1UIgD3DS1L3>Bc$~?F!cFo~`ro?%*&!~0*S~V3@N*JgQcXQWEqXAdAtuV4? zjlS#OIM=epR~OxQ=q#DH_G#yc2w$TEtU?445xc_m?Dc04P#~#TD?*Zu+z2pts$}Q$ zx~6K%iMe7})0ItPK_A^6ic_G8cy4UEagoAD8|jf$9Rtlve1ChR6>JddyA}#Nnwh$K ze;}0~{7^p#K(TMif;fq5{%kL6|BnLrH+=n632qCxiAQuZxP{O(8_qTDLC!XW4*6#3 zF}p+~!K~iVN-4X~k}a|Az55fdgi^C-gQeYzVD=z;k9Qm2*?j;lVzl8U5#x57Wst7) z9#QgE9?xByom8|mio?-P`TlbB)5!1I{y7v&|4dK`%u0iA@c>V+P;s5z?+;@N4BqM| z>uRd*HsrjrlXG0b$pq}q1Sn?&*2_M{#hc`!t2>qF4=Dt%7yol~T#TXGxz9IpU3s_g z;#U%K(p_(beB3h%$E#8#a1{XTte@xGe4k=!YC>2V>|XKWC+83Wm$t;*p&VCVs u_aE#?6eppJkdXzJ6b5J?Q z 9bAsdMqqr(wX`T(S_jlCl|A9RHZkkZAOtbj$P!Fd?xkk6z8j JEP+MxQ9Q5ltYJ3uNnhK5A1HsCMTDe= z-*nKJJG~5dH=07~iAdTUeUhOZ;rj1u`H;^L+h-=M_fNW89j$L4+-QtdgWFKhN!|av zk+8vb_s!cwac35N+cfx5+4}HN?K%+BWmF~;Y1@4QhtBhx1lMSQgLJC+Zo8%GClc%| zNzB)qx=qU#`YYce=rH|up07W8e+NBok&L-f%i}30mFh(hh#V@+_oNb+dZ{_omPM}( zxMZBj@kAGps&Nnjjxd!)k|^#fy83b9?$C+(`0}HG_qOQnoZQ^*uxNp}Uti97xspX* zo|0BH2}z)55kNaK=%!2gMcO11;D94jG!*I-xQwZfr(}J}c9R|W+3R}kLkaBqr#= 8)MQ>?VFXm}PMUek#j*T#jl4H|NqUuN zSb*!QBdl2WXW- _X=zvX|m^g%*T*WAFbRKKyIwsK&U2#3B7wQbnR z@COp-d;};G6=&R w4E4+*iQe_!GdY_)B3IXVNtW57$sHjD}1&tMhIYqIY_J0xh z*Uxl*y6B2EpmXznVHBt8J%9!@NiW}ah2Q=FwXXu($Y`;{8rt-~Hd1t&a?pD~+bdY+ z1I)X`Ap_=pBf3NOjVgqY7cb&8j8O&7byYvHz-jxTz(GQELa=8rpfGHj d83vea8|~7V{Gf<8PE&kZ)J|8?YON$kugn> zjNiAQc!Xv5=Mc3>%2zjd8yHq$%zTh9`;lsc-~JP 2Fd0#ieO3b;MQ9dxou#{0 z2i|e)sW_~YC>05_59+&$ 1xrSL()#mU`K0J6jW5Rx) zm76lWakRVT%H`!DJ}nTV$3O~$`oAF(XNP5#rY#`y4DQ*G>3S6{JH ENHRYAn} z>L{-leVO;6e$jN%*vU5d);btoUBA_K!YGcuev9Q#C=%R!LIogB9J%d;OXFu3E&RyL z*-%Gw-epMOP{cHQ@_6H{F~q5UZJp>J-^2Os1x@Z{k{BLD`{a#eeeC2oVdDvdWhB*q z&w)$}a!dKs!s1Y;L !7rvT(}!tFqzeJGPh{2dmaoMc1AdG8VID zfh<44z$Pl%(;q<5L3_JgbH)-Blm1aTS%lZAI)vZYBQ?I-iH;FGsgvO`?1CJ|q@^9F z5lplNAi)p8$LsgP9Ro6Mvdm>D5Y;sdIjqYnn2Rs@a(+7tN7oQ0p-m!0Kg@5scvj`) zx-ve~>rpmF6GR&PgxH{NQ&~rJOw<=!`QJVG``<<(1SwZL32ooN+BLz4SyIt=``KHx zGI*n;t2MVmTgH8Ys_ez?Rq9*-x+BOufinihNkNRC5sRajQ;A-v`gn$?e4u6 =hZI^%Ez5=zV{-ve zwTCWisD~bx7(68J_9=9*u4R6I9@es{?y@X@Ob{O3gERMCFb@2Lk+AX1JniB5{BU cLm z=c;~UFmcY`(mtMb1W!weVaI6HWE?$ZL_-7O7)hj#V7n^INzFzhp`{*k2xp&0-|!qu z@4;43bYv3k+~BNU=(wycJODL>Bn~_XM HNauy{)6dLrc14)PH+mUs0je`S0>7O@o{)LW zDs4 tgp|!PDlYq zvg~#mqU%Z2)sB}Jpe)?g20^xE3Ks;_r_v+8U-W9n1NPcOq9XodjFuTe$aur{wxKl@ z!Ck^OW_HIN%oFZ{p_a&k;3MIM3(ENU1N#fjeFvZD@yu_00-*3(l3L#D>2&%edPEt~ z7KgC^$AdzfHZRFmeO-Z AVC4^<%z5Ri@_Xg=ybn+KAbc#yGav}KsIlaFo++MTKv0uv5d)~_I zg_q@3zXSGCNOP>#ar$90(VKKhi~`iwbKUHlyms5$gJyzA34#i*{a@`-=IsZXmzRyf z 0^pBL+1=>)Q25Rq~a^W_=DdO z^laD!?Uek7*<2H1=o;0IOc=(1xwe2`0jj+&nPgM}EE6V Ks;Rp70;qaqGzzQVP~uWDDd& zQ2=+XlXGOUDt~?;l3kfH&!bRT<&*OH 7gl{prB_`(?UG2oUD?SP6BqS8mnZEp6Cf5 zZZd8LUfVL2;@(@7FW8n |_=NxF^K$rpgb)1!UpE8Ya*tUCj zp*fUBvdydd(7pxQQ452bOp(du(M=Rrn5|=^A|P%-VxG@6@U4lwgvC9H*TaF7!hidw z;LU88hBRb#rikA7dt;5HAm27TnoGt6--{BUBUPKSBRg*+$DiFIRQ>b-WRJ{76y{2` z6Ba@n3uhZpWLr^eEB3L0v0m;PMB`p-m
n_u#3d=Z?(bwnY;A+DG5!E$m@n0Pg73moPo{_CN(qB;F z*hkYg&tZOdHkTm%Wmo=22p?Ib?u>K2tIqfM;`ooE$xyCh-!HZfnn2NyN2(FX$*Q^o zBb3dMz*aR;PaM)W1bF=xj7A?y78CvGMQ_5DQX%V78h4f%+d^Zl%LfYEUKd_Z;0p4D z26ZAI@VP8uLb1=1>~@CM8YBUiO*V~h;L4GD(h47OE{>wKJSxS})H|Jjq5mQ#{eCvS zc*%7EUg{N%U^?rVLii%jc*hbTGF4qLCtI}#q04YPWf9|GCu{hu08E0XTO}s-Qftn& zy`cf25Z;fbuQo;LNIX2!*&4_YSQ@tWj!8NLhif1H<8kE6h9tQ1gBaU;ZsR2*JC%Cf z@@LoS)X33BwYO%=p3r8(I1{L)_No_rg4E?X&*0ISpA$!D=eF;GVM*C@X_QpZ=^w+} za?qP+hsy~IF+y_Z0pAdbu+irHDYWV!5iY&LtHsUv2S0@@yA8Uvt+W41vIslxO;Vin zq`Oaq^>S`P;TdYlMPKqT$vA$3BdZ_`aS4Yi0GYy$+xESuUtz|-rwwT_<#N|k;8K+l z`&$s?!TBQz+zUol*d6zBL~VSWX<5QCV>W4+V3dM_E--K;IH_>ASMf1O8MLXEKcNVI zAdaBuGvNBKxeeBW&_?y9X`BTs)Fw}_fsP#}$gsmmgOL17#~o_^ia~`b=EslkeDhU> z`!F&@(7k!9QLb`I_UP&dVd8Lpz}xxSC*rI4VuR1GZB_P<{$<>aaYmkajt>Jp8(#oq zW7u53k|}~_fS0`Q6$jm%DX0VQl?C$CY}C=_M1Y2|)?r#l!3N;cK)JFS9tRs4%qpPY zxtkpkRwM~ZWBXSDsfEr~`0CX@a00IHn}=|k4xK|xhO!c=FDk Jqa-IDzLXBl$IIv zWD&eE(or=QDnBcJ8c|Vb0Dn4_{A2|}6oB5;gSV6P{b)nC5^kz^$*X(QuCE!vCC6Zb zQW7;0W`7`p2!FoS=qXDGzyt95>5CnF(>ZlQ`e!^5$A)NyRGB9yserNLKyl~B&v$E5 zt3U{ y6zP3Y5TG^A?C@WTmCq7@t yg|7onAdx!DtLJb1*r4~{4~{Q}HWa2@1TZGek){+O_RtWuLlHUd zG!-h$cpd%B+6@FlI>Zw*d1Sln1^dzeGt)Mv>z(xk_>3;Ye3NHQr1pJm4dK&RPjajx zlj1%4WBvj4MRbm1J|bN^(geF6@U}i*N2|b<#!_aeDEm9q9rfA|w9sDvkUy JRkuvnS)J8K3u@f#%4O-~1N~XkF!k1%b` q2gIR)hbFphKBJ>u|9Nx^zgn0YBHzuS^wJ?5X#zv>-`y0t$C`iw8W9 zPRt7NjGGud7BJFci%^jB5_qQA1akryi)IHCVJSY{lSgh7ger@g6bh`K+;F9dq*jI# zj|)J`P*kB4oTPqqh|u_)fLEC=Ig(&3>cHUEG#!G3`;yEgit3{q8&Oy}SpLq*gbOf+ zSn)C+^~>Th*_ViKmB*U?uye<-)9bqKZT3Q>`-zDuE%-+qnWJ}yMTA7oE%73871CCc z-*`6q#Z*%9$EW(sXLX;w)VXt)yn@xfcdV#Ezigr100!9lCZo!H8`{62=BWgtuI8%h zSo{33k8rDk*v7egp6DV&@Ij~?P(Xys*D&FOaHA_TGWYIU;sJ0l(lpC9#*rHwVD=k5 zmAGr3c*~hHRY*mJCKD-`b-G1@wrIH79I&3EVJSpkU%8I{Vu@Js(&fZ_AfV~_%6_{) zm}5J6bYxD)f)KIFX?Cc`PT8rc*@=Q%5~;Dmz;dN~E~`mF7^b_9sV8)C(|Wk;Z8|1q z!%Ol*ex*GQ?3d>&g?J#@{)%gVMSFz!NN2{JAk 3M4M}x!WCz@-3+&s#U?5)A{|ikWvT{dUWIiLHPeiT3y&Zsn^D?qrSMQ zZQ5L$*aJE&s>48}*r(?XPH28#WK^Q5dCn%Jj|Y+%?ny%x2#4D=)Y;cSoB3~>)D+(c z^l~15Avy|EcG#xC0)+e7*%J&-IgO|5U#w<4u!4^^kJ9%GwUyOK!W%y_(d0Tn7zwr* z_FZ8imgbxHojbEB)xor>K%DA~a QpjF;JTW 0&qoz_QdSE1XeY3 z+xs+QTiI9cW2V> ^XX#! znmwbN^F~%`YqRrCAW^c Qfe$}6|xR>IGzPvbx9QT%EsHB4E<5N*{Hr-z55GAP# z^GWyY(cg==aOf`vk$1{3a0m!uWzKtaPtbnDm>wAj2xXF7gFo{dlu&Lb8*OQ4ac#kS z3Dxg%KWYj(0-)WR#e4-#?tu%>kg;dxOhssGwvbz8?VXKZbf2ebcNmM@KlBKgpOr *FRbBHydh3$3Kj5YsNQ{jx!fzbv%ACIj 5 tg0A(aU44Dq- c^#^;NacP2F$F` V*()P)@- FGVg`{(_zAFIJ5Ex6grsVVX~dJymAOSZHGf8H