From c1efb75b1afb3a317d6682bac4ddb2d9e7ecfe5e Mon Sep 17 00:00:00 2001 From: Simon Meister Date: Tue, 7 Nov 2017 19:30:04 +0100 Subject: [PATCH] WIP --- approach.tex | 57 ++++++++++++++++-- background.tex | 130 +++++++++++++++++++++++++++++++++++++++-- experiments.tex | 2 +- figures/bottleneck.png | Bin 0 -> 30975 bytes thesis.tex | 3 +- 5 files changed, 179 insertions(+), 13 deletions(-) create mode 100644 figures/bottleneck.png diff --git a/approach.tex b/approach.tex index 300e397..4494459 100644 --- a/approach.tex +++ b/approach.tex @@ -26,7 +26,6 @@ object-centric framework of a region based convolutional network head with a 3D Thus, in contrast to the dense FlowNet decoder, the estimated dense motion information from the encoder is integrated for specific objects via RoI cropping and processed by the RoI head for each object. -\todo{figure of backbone} \paragraph{Per-RoI motion prediction} We use a rigid 3D motion parametrization similar to the one used in SfM-Net and SE3-Nets \cite{SfmNet,SE3Nets}. @@ -90,9 +89,55 @@ between the two frames $I_t$ and $I_{t+1}$. For this, we flatten the bottleneck output of the backbone and pass it through a fully connected layer. We again represent $R_t^{cam}$ using a Euler angle representation and predict $\sin(\alpha)$, $\sin(\beta)$, $\sin(\gamma)$ and $t_t^{cam}$ in the same way as for the individual objects. -Again, we predict a softmax score $o_t^k$ for classifying differentiating between +Again, we predict a softmax score $o_t^{cam}$ for classifying differentiating between a still and moving camera. +{ +\begin{table}[h] +\centering +\begin{tabular}{llr} +layer id & layer operations & output dimensions \\ +\toprule \\ +& input image & H $\times$ W $\times$ C \\ +\midrule \\ +C$_4$ & \textbf{ResNet-50} [up to C$_4$] & $\tfrac{1}{16}$ H $\times$ $\tfrac{1}{16}$ W $\times$ 1024 \\ +\midrule \\ +\multicolumn{3}{c}{\textbf{Region Proposal Network (RPN)} (see Table \ref{table:maskrcnn_resnet})}\\ +\midrule \\ +\multicolumn{3}{c}{\textbf{Camera Motion Network}}\\ +\midrule \\ +& From C$_4$: \textbf{ResNet-50} [C$_5$ without stride] & $\tfrac{1}{32}$ H $\times$ $\tfrac{1}{32}$ W $\times$ 2048 \\ +& average pool & 1 $\times$ 2048 \\ +& fully connected, 1024 & 1 $\times$ 1024 \\ +M$_1$ & fully connected, 1024 & 1 $\times$ 1024 \\ +$R_t^{cam}$& From M$_1$: fully connected, 3 & 1 $\times$ 3 \\ +$t_t^{cam}$& From M$_1$: fully connected, 3 & 1 $\times$ 3 \\ +$o_t^{cam}$& From M$_1$: fully connected, 2 & 1 $\times$ 2 \\ +\midrule \\ +\multicolumn{3}{c}{\textbf{RoI Head} (see Table \ref{table:maskrcnn_resnet})}\\ +\midrule \\ +\multicolumn{3}{c}{\textbf{RoI Head: Masks} (see Table \ref{table:maskrcnn_resnet})}\\ +\midrule \\ +\multicolumn{3}{c}{\textbf{RoI Head: Motions}}\\ +\midrule \\ +& From ave: fully connected, 1024 & N$_{RPN}$ $\times$ 1024 \\ +M$_2$ & fully connected, 1024 & N$_{RPN}$ $\times$ 1024 \\ +$\forall k: R_t^k$ & From M$_2$: fully connected, 3 & N$_{RPN}$ $\times$ 3 \\ +$\forall k: t_t^k$ & From M$_2$: fully connected, 3 & N$_{RPN}$ $\times$ 3 \\ +$\forall k: p_t^k$ & From M$_2$: fully connected, 3 & N$_{RPN}$ $\times$ 3 \\ +$\forall k: o_t^k$ & From M$_2$: fully connected, 2 & N$_{RPN}$ $\times$ 2 \\ + +\bottomrule +\end{tabular} + +\caption { +Motion R-CNN ResNet architecture based on the Mask R-CNN +ResNet architecture (Table \ref{table:maskrcnn_resnet}). +} +\label{table:motion_rcnn_resnet} +\end{table} +} + \subsection{Supervision} \label{ssec:supervision} @@ -108,8 +153,8 @@ Similar to the camera pose regression loss in \cite{PoseNet2}, we use a variant of the $\ell_1$-loss to penalize the differences between ground truth and predicted rotation, translation (and pivot, in our case). We found that the smooth $\ell_1$-loss performs better in our case than the standard $\ell_1$-loss. -For each RoI, we compute the motion loss $L_{motion}^k$ as a linear sum of -the individual losses, +For each RoI, we compute the total motion loss $L_{motion}^k$ from +the individual loss terms as, \begin{equation} L_{motion}^k = l_{p}^k + (l_{R}^k + l_{t}^k) \cdot o^{gt,i_k} + l_o^k, @@ -124,7 +169,7 @@ l_{t}^k = \ell_1^* (t^{gt,i_k} - t^{k,c_k}), \begin{equation} l_{p}^k = \ell_1^* (p^{gt,i_k} - p^{k,c_k}). \end{equation} -are the smooth $\ell_1$-losses for the predicted rotation, translation and pivot, +are the smooth $\ell_1$-loss terms for the predicted rotation, translation and pivot, respectively and \begin{equation} l_o^k = \ell_{cls}(o_t^k, o^{gt,i_k}). @@ -226,7 +271,7 @@ Next, we transform all points given the camera transformation $\{R_t^c, t_t^c\} \begin{pmatrix} X_{t+1} \\ Y_{t+1} \\ Z_{t+1} \end{pmatrix} -= P_{t+1} = R_t^c \cdot P'_{t+1} + t_t^k += P_{t+1} = R_t^c \cdot P'_{t+1} + t_t^c \end{equation}. Note that in our experiments, we either use the ground truth camera motion to focus diff --git a/background.tex b/background.tex index 5ef049d..13d1e70 100644 --- a/background.tex +++ b/background.tex @@ -48,7 +48,7 @@ performing upsampling of the compressed features and resulting in a encoder-deco The most popular deep networks of this kind for end-to-end optical flow prediction are variants of the FlowNet family \cite{FlowNet, FlowNet2}, which was recently extended to scene flow estimation \cite{SceneFlowDataset}. -Figure \ref{} shows the classical FlowNetS architecture for optical fow prediction. +Table \ref{} shows the classical FlowNetS architecture for optical fow prediction. Note that the network itself is a rather generic autoencoder and is specialized for optical flow only through being trained with supervision from dense optical flow ground truth. Potentially, the same network could also be used for semantic segmentation if @@ -60,17 +60,94 @@ operations in the encoder. Recently, other encoder-decoder CNNs have been applied to optical flow as well \cite{DenseNetDenseFlow}. \subsection{SfM-Net} -Here, we will describe the SfM-Net architecture in more detail and show their results +Here, we will describe the SfM-Net \cite{SfmNet} architecture in more detail and show their results and some of the issues. \subsection{ResNet} \label{ssec:resnet} -For completeness, we will give a short review of the ResNet \cite{ResNet} architecture we will use -as a backbone CNN for our network. +ResNet \cite{ResNet} was initially introduced as a CNN for image classification, but +became popular as basic building block of many deep network architectures for a variety +of different tasks. In Table \ref{table:resnet}, we show the ResNet-50 variant +that will serve as the basic CNN backbone of our networks, and +is also used in many other region-based convolutional networks. +The initial image data is always passed through ResNet-50 as a first step to +bootstrap the complete deep network. +Figure \ref{figure:bottleneck} +shows the fundamental building block of ResNet-50. + +{ +\begin{table}[h] +\centering +\begin{tabular}{llr} + layer id & layer operations & output dimensions \\ +\toprule \\ + & input image & H $\times$ W $\times$ C \\ +\midrule \\ +\multicolumn{3}{c}{\textbf{ResNet-50}}\\ +\midrule \\ +C$_1$ & 7 $\times$ 7 conv, 64, stride 2 & $\tfrac{1}{2}$ H $\times$ $\tfrac{1}{2}$ W $\times$ 64 \\ + +& 3 $\times$ 3 max pool, stride 2 & $\tfrac{1}{4}$ H $\times$ $\tfrac{1}{4}$ W $\times$ 64 \\ + +C$_2$ & +$\begin{bmatrix} +1 \times 1, 64 \\ +3 \times 3, 64 \\ +1 \times 1, 256 \\ +\end{bmatrix}_b$ $\times$ 3 +& $\tfrac{1}{4}$ H $\times$ $\tfrac{1}{4}$ W $\times$ 256 \\ +\midrule \\ +C$_3$ & +$\begin{bmatrix} +1 \times 1, 128 \\ +3 \times 3, 128 \\ +1 \times 1, 512 \\ +\end{bmatrix}_{b/2}$ $\times$ 4 +& $\tfrac{1}{8}$ H $\times$ $\tfrac{1}{8}$ W $\times$ 512 \\ +\midrule \\ +C$_4$ & +$\begin{bmatrix} +1 \times 1, 256 \\ +3 \times 3, 256 \\ +1 \times 1, 1024 \\ +\end{bmatrix}_{b/2}$ $\times$ 6 +& $\tfrac{1}{16}$ H $\times$ $\tfrac{1}{16}$ W $\times$ 1024 \\ +\midrule \\ +C$_5$ & +$\begin{bmatrix} +1 \times 1, 512 \\ +3 \times 3, 512 \\ +1 \times 1, 2048 \\ +\end{bmatrix}_{b/2}$ $\times$ 3 +& $\tfrac{1}{32}$ H $\times$ $\tfrac{1}{32}$ W $\times$ 1024 \\ + +\bottomrule +\end{tabular} + +\caption { +ResNet-50 \cite{ResNet} architecture. +Operations enclosed in a []$_b$ block make up a single ResNet \enquote{bottleneck} +block (see Figure \ref{figure:bottleneck}). If the block is denoted as []$_b/2$, +the first conv operation in the block has a stride of 2. Note that the stride +is only applied to the first block, but not to repeated blocks. +} +\label{table:resnet} +\end{table} +} + +\begin{figure}[t] + \centering + \includegraphics[width=0.3\textwidth]{figures/bottleneck} +\caption{ +ResNet \cite{ResNet} \enquote{bottleneck} block introduced to reduce computational +complexity in deeper network variants, shown here with 256 input and output channels. +} +\label{figure:bottleneck} +\end{figure} \subsection{Region-based convolutional networks} \label{ssec:rcnn} -We now give a short review of region-based convolutional networks, which are currently by far the +We now give an overview of region-based convolutional networks, which are currently by far the most popular deep networks for object detection, and have recently also been applied to instance segmentation. \paragraph{R-CNN} @@ -146,6 +223,49 @@ variant based on Feature Pyramid Networks \cite{FPN}. Figure \ref{} compares the two Mask R-CNN head variants. \todo{RoI Align} +{ +\begin{table}[h] +\centering +\begin{tabular}{llr} +layer id & layer operations & output dimensions \\ +\toprule \\ +& input image & H $\times$ W $\times$ C \\ +\midrule \\ +C$_4$ & \textbf{ResNet-50} [up to C$_4$] & $\tfrac{1}{16}$ H $\times$ $\tfrac{1}{16}$ W $\times$ 1024 \\ +\midrule \\ +\multicolumn{3}{c}{\textbf{Region Proposal Network (RPN)}}\\ +\midrule \\ +& From C$_4$: 1 $\times$ 1 conv, 512 & $\tfrac{1}{16}$ H $\times$ $\tfrac{1}{16}$ W $\times$ 512 \\ +& 1 $\times$ 1 conv, 4 & $\tfrac{1}{16}$ H $\times$ $\tfrac{1}{16}$ W $\times$ 4 \\ +& flatten & A $\times$ 4 \\ + & decode bounding boxes \ref{} & A $\times$ 4 \\ +boxes$_{\mathrm{RPN}}$ & sample bounding boxes \ref{} & N$_{RPN}$ $\times$ 4 \\ +\midrule \\ +\multicolumn{3}{c}{\textbf{RoI Head}}\\ +\midrule \\ +& From C$_4$ with boxes$_{\mathrm{RPN}}$: RoI pooling \ref{} & N$_{RPN}$ $\times$ 7 $\times$ 7 $\times$ 1024 \\ +R$_1$& \textbf{ResNet-50} [C$_5$ without stride] & N$_{RPN}$ $\times$ 7 $\times$ 7 $\times$ 2048 \\ +ave & average pool & N$_{RPN}$ $\times$ 2048 \\ +boxes& From ave: fully connected, 4 & N$_{RPN}$ $\times$ 4 \\ +logits& From ave: fully connected, N$_{cls}$ & N$_{RPN}$ $\times$ N$_{cls}$ \\ +\midrule \\ +\multicolumn{3}{c}{\textbf{RoI Head: Masks}}\\ +\midrule \\ +& From R$_1$: 2 $\times$ 2 deconv, 256, stride 2 & N$_{RPN}$ $\times$ 14 $\times$ 14 $\times$ 256 \\ +masks & 1 $\times$ 1 conv, N$_{cls}$ & N$_{RPN}$ $\times$ 14 $\times$ 14 $\times$ N$_{cls}$ \\ + +\bottomrule +\end{tabular} + +\caption { +Mask R-CNN \cite{MaskRCNN} ResNet \cite{ResNet} architecture. +Note that this is equivalent to the Faster R-CNN architecture if the mask +head is left out. +} +\label{table:maskrcnn_resnet} +\end{table} +} + \paragraph{Bounding box regression} All bounding boxes predicted by the RoI head or RPN are estimated as offsets with respect to a reference bounding box. In the case of the RPN, diff --git a/experiments.tex b/experiments.tex index 38c7bee..bca4744 100644 --- a/experiments.tex +++ b/experiments.tex @@ -176,7 +176,7 @@ AEE: Average Endpoint Error; Fl-all: Ratio of pixels where flow estimate is wrong by both $\geq 3$ pixels and $\geq 5\%$. Camera and instance motion errors are averaged over the validation set. We optionally train camera motion prediction (cam.), -replace the ResNet50 backbone with ResNet50-FPN (FPN), +replace the ResNet-50 backbone with ResNet-50-FPN (FPN), or input XYZ coordinates into the backbone (XYZ). We either supervise object motions (sup.) with 3D motion ground truth (3D) or diff --git a/figures/bottleneck.png b/figures/bottleneck.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa8404e9757208cde991c66868ba823bfb327c0 GIT binary patch literal 30975 zcmd43byStz+b+650TmDdNeNkWH%O~=H%K=~cc(#@NVk+UNGv*~ySux)dr#i?x5wV! zcm6ovUuT>-gf)296Z4t#&g;5w1Lb5yQD5M{fIuLq;$lJy5D2_0_(6XL4~|s#@-~By zC-xu3m7YC&HnSwV2>!%#5dP$#Xl?A^tY>EgF|o3?G@`dRuro5Uvj1%DaPXv&9|Cy` z5f}QPI=d6jjL5y^GV1y2@7YxrLjBZQoX#G0halmY>#=KBnb!@!e3^t~|_s3Cn z$AZu@Sq|$imumm{3zlfUryrfXypyt?!Kp1_+}1rDI+8hGc#Ke7t-9{-bBSb+po7Wa zqJ-}}PBo9qkRAf@(IYX3gFsM_)sP_&-A|qB;G33@{4t9r0LHO7&zqTTYvz8 zFwy=0<&s7EtN`A3**e)AgznN)Zj7-z`j9+MxCsOZE~~Vagu-@D?9`MiH!TjMvnaAx zG+TbZxQs+kUtiA%6MR}{-fwey(=~4;d!m$g9xP-c!b?9%klWcyo6xKw-PH|ezzr4G0wz@4M9OwLzWBRU7mPexKsJ& zrZ2)gVk_w3SUNkxL`Y}q$n?S)v9M8|?SgG9yl75RDe8wm_gT+mXXbLL3X!XgdbZyI ziiXpsh-OUQqLo8lY)RS;=YtzhZBp?w$U8q~L!SvFod=`6c?~=o{ig~O?S=EEV}p!lUbHp)0vSIzgz4YUtGs(p~j*}a>+!+0KS_RPN$-X#z@av&wXOeigt z1v3X_j``W=R=OA4q%3;V>8p}EA}`emq6#RIcaN4*WxU7NJaPD*2=d-A(8}y@>13eL z(~w^DCe%}Y{7wGFvM0P^_rXkzQ2ah}U)#$PX`pCQ5*}iuhl020sPHi5Z^c`E(~<6V z^+8fd2)^T-b=>nhj9pMDQ@q}DNl#^sEk~Na)~QeDIgNhnS^MpAhu_x^$dEDkQtV%^ z$`bhbVXfEv_&;ml;N~q}<*{InoTfsRRT3sK1&D(cFrFvP-+AZ>sJ4W#o36!+53J~? z8(@}2A(}!U5OeIFum`?^QrNndV55~4LkB%;`x1{x8`Gq zF;?tm@2aa@U21CIabG#49_`%GC5@uUIoi}=|2mD@3XG?LLNTV_%_J(fGmKcL)<&k0 zFY{bB-h>$#?Uq0sXNP2OLhrUzep5V<6teI^H)~5Q`;)Yo)pGM!&mr#x4C&wJQZHM7 zZ|eyRa2Y?l+mWEvi!Ghx2_IG#GTa|8Pm#WF!55ZsB8r!!@1tRI^}Ag{!=x7jT?$FYQgy@vg{sr zl#B>ZV?YARff?A_n^h5Jg*ts6Uv=FCds^KfKQnt7fMW;M?=`EMYN&hIxTdbZ+u>FZ z=qt3a%vv}8iSM|ub+J`p-en}vnHP5Fxi#&rz$V0-sB#jfb7L}ddr|BB=ACQXmz{8i zf}IWH-^#gco0ITLsDzLxKd9Xe!~_lkYy%IPCC3LFX3+N8jTRVk?KBP%<}y#k8|HMA{z8JZ>P(T9`)}LA1iUWn z{5-Tv@~z16BH7V=H|F9GIaPBe4aA#2AF365wAW1o1ImL&t8iLb^Or`_1yf5R5igHZ zwC-t5&M{7$V3x%Q{2dWxCE3XAGhx0g46C^*ktJ>*NC=RR0Huo%h+GNVVt zAB5NoyTQ1VWwIst_}jI_zI)O8EG@avH@*4%Q-&UwWv_{q9DSi;u5M4~JWnlVAXKdo zyCvpeig{`xi3BRVn#%K4dzH9)EttM{GFkjCn=WB;yn4{F{%ZoEfEHg?F1cW4Pv9jb znO}eyVYQ>p-LzYktFxL%d@>ssBRPYXFpyKF;tFA3Z2^c9F3?S(Qqh^;QnMbcl7b=e z9Y4-^u*=KnZ?gSVGv=z$L+Jtn*i0`N__|YVC3LM!`$?h0rmtCiMHVWs=Lu&TNsGT zz%;2q_&LLdFbu;)N7novMu3`IrpR*7lmF?nsZl@W@DJ`4VZX1ur&0q{rMBf57}R2< z-tnSBWO+PZ4}C;iL4R%YM}D?WCGrUbQ@;L#SESszil3fWeZTi1vXCabh)>$Tu$h~MALs<~ZP$0>e%N&OSLa*`9DQZSYqwe4NW zMhS(cv<{7AuevgR$F9JJmr#yiq32MONx>CCT*PSq(HvzlTXpmejo;;XHLzJ@IP=cB z4+*nk)-{*pi(ss<|9S6eWo~D-F!lo#g{Y*Ep-M|xjO+c%&uP@1>1P3A(RMd>RSj=O z%~(@sWq)9z2b#N1Fj%@{6P+cu2?-rf&V(zRy_CrhdJ~A~)9qJ)5P7sYlp!l{=WsAz z-xEX6Y9TpY@Ma;DsPtAdFX2)}n!{q>~FQOg{Z{nQL?FV?|{uoT79==|62hnmz z5)b-Q^!BWyuos$`mmy1Bmy|~WEzy{9BFeIq-`!sLI~5X8jyLh}ER5bxFPz)>;dUT= z#B)Zr#zXZ1~!CRN0A}L;b}T zMQ+$MHAf4iFJ7J&Qx6QJ<(u&2@J4$mQhCEVW zihooqvzRVLxE{Sxlbfkq`h8pveA6M5AIc#fnCcYsk_sa zP9B^BCb@qGD?*xvv(^HX8+DL**z#e?^DPa$Gb;As+Q`#v4WYqY2QX>+q(n3=N4nkN z@D|=4+meX*i^(~h2lesFls<1^W_a50ut@I)2gi%=i03i-MCh_)=*UOX5M8kl8Gk_z zUHtweE=*ipF(E>3hiA{9FV!UJ=ai+2QW{c69rOB%=o(YJQm-Dht)yS0YtM|xY84R{ zp`<21cT!-r=iwYs$Hof(P)K*QRW{1&Y9$jUu{@ts;(wOkInh~GYRCRDH&p5S9|Wei zKp1kA;B(8IJvWZ6`eH{9Ek3oB=^3dAwMLHSZKz7>*z23umJ&Qc^f_)0SNs1Ww60R+ zjUxhfT_vBkf!I%P(pwE{fdt~C-Koxm$DJIeRpqetQ;v#Fjus(<(_8KBt7knq-=&41 z5ufNP{`~nNMurjiU5o0JGIfA+5c#Q39x zxt?vE#>7zdHd=!D`%7K9$C+KZ4mNn+*l+YJck@p%6cqV<^Lm; zS-JS}z7aq4_t#=t%6|qwe*+us$(08!EiDfZkEm!z0=xNmff}nfNh%EHh#(2?l1O6S zeEJ7TuDa;2Pn3jF8iZkKASo#+BqXHwaY#9lFftZP^_j9IfJ0z(c6Kh0GqbYN;x{2E zPR-8~B^&rGD{U~+K`_ZN0>P_>hDu*?m>{Jh|F-Tz&f?0|NRw-AdmLDmU*EsYkrD0lJ5=Z`UJ z*SQ=mxAi4*29K{SFE6WnudS{1^%Zv2Ch^JrFb-e0M@RoS%qNPpW?yh8Gmw&I=w4%o z8dhs+&#p^k9Z!{+45aYUUPl!cTBe;ADrU>nyPXvj6wqwI;Bb*Z)>a4C!sPVNXlQ6? zD~wD|PL7I-`tjqHhLDVmjIBmVN8rJ1wc_T{<1)G@S5{Vvk>!=gK9z%k$X@Pwrb4a~ z&Dr@m!?lu#h=`Pw)DVi-(Xy{f{#Y$%MX?8%`>p7uM?+$whS%x!<>hF;>Ofx~s_55d zvbW}NO@AybA4ejGrTV5VOr4OJScl2eKwlpUh3f0;2Wg*W4t<{dvN@71yCFb@9b8{u zfAVBJ;uMjYcCe$zQ7ndG~{HAS|0v;GgHLb0!>Fz&z)-Dbf8oeL9 z?n!xx24-ez#o>yIiV!`qAX&hHKvtj_fgYZo$b@hD`}@PFme+b>eJjSyV7rR`FA4RD zOJFd|*(zHw^Q)`Cwq+VOa>xTnfqkC;kjSD}FaJE0F5HZSiHUh)&&kVsJ74cUG&JP< zyR5&nv&v@auP-vrq`;L&LwGn^Vyy)t5JuIx9-m4qMTZ1O$cn>yZ+uhJd+7FHnxL52 zvxzkyX1A;3wR-o9{o5UIE0*|zRcW))9Po@_4$J9stGOEGe3iIR3=}vuWQr$h$VORX zW~uz13B>iz2lJt!q4av5MBy7dJ3Z@GU_HTG*`}~6y)dMYLouXR(i9PCpR08~8M$cw zhD6@`SI@v;Bu|-^!&w7nro6Al3iku1%kl#zx5b9vx6%<_tX=Q6)*Vf&TEy#inp0IQ zug=wfoujm_HgZHfK+CS($yM)!gK)qpfZ3GWVlUJf8YR zkWr@r1r^muG!e`sAtEBp8FqcPgY@*N!_Ii2WGutGEWG1?@7gQ|?9a``0TROF@csUM zv%VTWb-;S6lsvI^ZyMGTiaBrhXi31&N1EvE?Xmn1A3iiUH>ahgnZar{xiJDWJ#WtW z+|PFx8XL2-O~!DZCkc*!?Rr1{HKM1#zrkh+erCb*aPiB$BR;3qERd!9yBkhmQG$A& zy!_7`zLQZ?X10H)-={$lWYYfVO3D3yYZwdS>P$AgHV+{d6u~rRs$*U%n*bw9+h8hw)!7 zeglVJbA}?uy*LHi@=FJKYzD|sI02U(n8i$`HI7?1z*1H_BMjO@j!sTiGC6YI{wr^F z5!0Qjl>NP|(mC?bf6(wN9E`Cx4Mj{=@Cb0EwXAJ1#Eic$T&Ox!T$B=hoi~5DW~Bjn_9e zDm|`_cP5H=l1~|Q6cmPmS^yEK2HHnMi}s5qP$>PwH$*}nCpr=my_NP*pzWRBG+;}z zQ@zZFGsQRhlfgQq4}E@DfGOd#0@KYj?n{8_wID)&N@VTLR341xDypcA$Le^A3-R;w zpKJ`Ep`!A6-`@h|3KWAz2#JcWJj1RdCjwgoo(Z&`f{g67$81Z>%1XFE3X|T)W<3)o zL?E;Z1E~TR$Hz2lOF6)nd*7W+_%S?h%J~eN{`Kn@vDf9&fWQNti~J8EC?31n=;_vo zEvEYlux%^sj@zS;--qVM$HxncicaJy=f9AEXZi^I!Aza&$@$(4D=RB9|2$YgJXYh= z{kg=BmZgtjK&D;VT3cP*-D5rKVgmTDRwJboIh3WvAtJP#oX)_}0P~`cRLH}b;o{+KZEvd^k;CD#Cd)Vj*$jQdnZoN@x;Rmr zm9-W{t+?Kw96W;m4$L*<{B%o^m^c-KA}8^k?J{^H&1iDCxbKv*DHhY^reLwBrlzjY z)IWXlIPRhZDr9S8v-qc?@)eMWIpAI&1^T1g~BaDd84ZM`H4u+5EkQofv5}gJQ*Jf&+Oogp- z(-Gr=l+c?CWjG+%K52sfMBENJgWphEfL-kD=HN z7C+R3`U@g|UuA(u^9T$eFNpnX39zwMY!ICwRGcvNM_&Yd0C*X?hi2drEGPe@fe!*~ zm1Nyz1}3~2r}XcQ(4Rd8dg6Y2d8Df2NggdRg(REwZU}770RK(F;##$w z)#k)k>aA(mPPP38gHFTjZ|OHh=5RTFAi`m`p05KFSQY&i894&t4DhmTOemGGcn+9~Gdz*QO>Q%vZPS=aW&GUDKKn~nVLJKLG4F6#NNTv^~~XScj<4iBMe ztFWA@x`)Cgi)37_#p=9}N$FiVY7Zw)O-Sf=G^NO`AuR6e?q05W3dwop5flm+-jN72 zPDrQ~s1E`>9J(oN+H$4>h{xU4MyjT&iCf;xkvcLma=es?P)SKioaURR?;fW^qP5Nk z6zSmk14&$wJ9di#Xhghm%myMhHa7R91|4B{=QGxY1qJU4y33zcF*L~m3lBzh5j;c! znfO!2+QtUX>(>sOgK6Oc_wU%*qXV3FC(#KA>cFK%TD5js$)-702Au$Xet=O14KtA{Yg`Gu4O_{ z5@@K%30S}Dn;QX_L!X`Dkk^mMe|LypT&`mFe1j*CH%28`g9@v;>%*lMaFe8eZX)Bj zGhPqER{Ro&YAx`VyV5j*U1uInN_NpnAGJMoUWiZRT$X@&u-;GRyfQ9C}t}rj1r`*YGMY zU&E!A^NFfJYaIUFMSYGH{kB8GuIP>NMUFY?C{HRksl$FHx#s=)+$!JXwexYr4r0+W{-&0;lEN%1{tc^5}pn`D(AoNa#9I3 zOV2&>em4o$Y_ns&d7sPm?p+d}JBN3FaZXMS2m}e<+4#)lg*+|AzRwazyK(iH5rMNu ztX9noDzZ7~(c1k)6{=`|Y*%K#dORDIJt4EN$^YB@ zq#f0)UXO@WdRZr5g+NvgowR6a{cT>*G+YRN>VOWAHV}tSsWsWz+k*0s=1eZ@BOII_ReHJk|y&QQOG(#1hX3x)Iz{fYa4(X^0yX)4!aClllun z1z;w2mzJ9Eug)fPE_SC_>FGm9(%%8p37Wn;(`dZPlT<3z{36XITu zvS)BXNbnm~;y`)yh(XK4b^(s?9M%4isJWSn>&j;c5rbJ5e+Qlr9?HXC$^r#x`TO^H zqxRX07mtCshX-$^vh6dSSMP;dIb#zNc`67lTH27(c=)aMK3@*zUt+gV~fIz?H{tCckz~c&d zUPsO3Rec4o02MED{V>FwHp6eW_Q_8}fI8z`c5i!QPq`!8wYXYT|4fT4L%h1&Dy~sB znfpu~WzL1CGM!%K2L;1sQyUpO`txLWDcnz$b>jJfJT=Qbih*YO1?nE9W*@r@`XJWy z{Hcu~WdQcz_{sws6c}i_&~OL-swxV8(y9IyfQVu=Sg~hwZ~s&nVPvGI2n)}0U(F@8 ziKgQ4-+f5*Fgv;wMrwhkr?eTWk2=xCiLaTJd>ytzSdf@_712~8y-*RhW}%g6cb-q~ zpP}3uuoL>}w!|BYzz~s14}^nU9+yl!Q^E=g3cz`TV7}K;UKvETYaL|=4WIY?&stH? zsWV>EX*zObEh_U&N0s#$9|Xv~iWv0V++Mp&x@z0a30f8M;}cWGM31knJcZG2BnoV_ z%l4cLbq0PfdJ;qTjLusBNuBWZ#lgeHg13gcI)*&RK!B$N-nS1t?ZpD79C}^C0fRdG ztfG(*8QKEB`C9eq?S`F|h1&fLCIb3%t!sJ>{!Z9-dr)u$;mM|NQh=E5+LBgJh*;vy za&wyi+Czoyw2zMu+(_fY%D~D8y&*O7KHMyqDuX5GiL!Dsn_YhIuJ@e%I=yf%`Fk%y$yt??FlK<2{YTmQ4oT!8|2gxZIQkdjU zW_2`5T`r#RrIk!=r$_Rd+UfUu3zXa}!qVb>msKJ!FY=;yXR*#iyqFsTg_V_1<&rP2 zuC!_#x_Wwo1IpF+S_3gb%G3#V12`!x%Hw<8v#$_Qe)QbP0k3Ko>&_J4{C=|BK$nU= z6L0n*vHp>64z=sdYo)_FSG7nFw2QEKl30B48K?c zJUa^GM~1>=h4L;*N3Nv>5`ICK)vjc9SYh!c4i66ap)q^y$A$QzQy%x?hLa`I_VWkB ztv%Jh%bbJzJw+KOZI_PsZFjr0GXuCAST9|@CRCifXY%UN?Vw-m4}6gq?3XWj86lYK ztE;auFqRJvWQDkstw2oV{cy)QA&du@a~l85E>UxS&yEC9Av3k#Qqrw)Hy(c+%#@{S zKS_85X5roVZA@5PGzYw7aAV-Ys6KnREwkDsW4{mV|KGI$a@(tayon4;!f8|YwaV|u zX0hyJ8V`KC!r^FI$H&ishXOGPB^0L42Z9Tb!`o;@!I7A!m5OPEq|9zL&h#+HNb|>y zPQ@XrU+GISYoy3fGoGh>gx^p}-d4vzk6=0L8gXDpH^m4m{^a>HxmKTMy$F)?`uzMH zga)}dmE@!%JbAk&Q0rA4U4xR^PU~ zN`&!7R0qgrc1uVY4CE=0``tNawu-Q+$ucCngQ&35PCW#_ym#T#OVua1S%|3kx4<0% zcmu$XBqStEOozi+l3;B#CzQKFK7U7(io3mMO!f3+7L+8j*{(m|EE4y^@C$e?>vdiWphBT{$c5iKs7Ssbl$H zzUPqn9FTzlL<-~CQ=!w#qm@T=W_`WEmUiT8fp3uF_k*OybwwCxEFWag(1K>~#7aDT;!UGPN*B4u= zF7?~md7o}fNX5+rLVU$q!yx2!0FLLg;&1Cm!2a{`?= z(NBSTXNAnx>XN&&7s4J+$1w4O0yl6kua499A7m(Cx7iw8(Q|p+d$yYo3=an%I}593 z6}-vJ%lAhre)|N7VY%ziq{<6Z8jKoi&D^i}D$%1K6(nBlEVZ3~yTWEq(gORwzN9_! zlaR_pNJXZ|iUEv%_QHsANEQbG6hOdP(vvNdtX^vPyz)$m0U%x>-0OpXjl9Wo0&q{R zGh$^;yPOU#8SY}}+y;cjgr<9Yb~f%jWL4q|&C)MIc4mt_YtNH;U_14@c23lsD`VUI z6^w6E6EY)%v%S4nU|$R^$LDk?ybk*cHKF=K`*-|A`@yVXaC!Z^Q)Q1(g_G-8o-(CO z(qcu5#CQ7)pMZeX@Cr|swVOY;n|e>-r^V z8cTOisv;}|9ay4WcfLEoCytm1z)Ia~e79qfClcwTxA#@6-aA#nCa>MD;?itoHRqDx zJj&#(XBEZBREJ`qVJ8W}^FGPpowjh^hWEh!?Cu4LqOr$h*O(N#yVVZo!h}X2<;gCtRkM z=eugim!@7|`FMdAp1th=xZ%6o&hM%h8aOp5^LSY_bu+s=v@_F(+J#KIJD9@48odig zW4?Vlcc~oKY!}NtEcN5xS6J1jqYh~!t>-@fozHePn%)>8t|=)NS>?Nua#Q2*^_EWI zjlU!Q<8|i-azX|Gl+>vds_!PI8TG`x@Llek!Q~4fd4e9%G~GAyp*6}_Ii5r@_fr#?E|=tNwygYD;WfY=%D=bdK%2UN1y{5B8n(Csm;C*Q-Q zXGZBqjM(8f_;(oRA2x0R_sk`=4=Pzc(yBg0?8wYD)EEgRvxE|z2*t!eL9KvCNmj~M z4&>J;fa%W<76vv>0;%Ze=)9GtGMTxxhTbH{G5seqq^70@@R??;;+!eglp2>E{eY%f zpGYV_zUz69W_1j@#z%f$?m9pOODUg@t9WDWHgb53e`>GItY?JtPnQ}YqZfkk90Zn{u}=tYw)2bE z2T}(Z4gf#|(74%g#Sibak+GUsBc~JUP5&A+d@`dg>Q##vllS(hWz;Mp6&cp;9j5N< z!6_GN#hj_Wny$W5kx+(5e#0ZB0Vk)%f3sT#@@rxNucQD9>4Z^`NeT!E6a~`=+(M8P zBMEC9?d5(Z;07+Vq6XJat?;49p)#YCnNKjB%T%(&TMYjCz{M5qwWmAQeDOLC+p)JK zw3c{v```0xpr&wn^l#oIw)mq3x9LLxCYs7=O*DZOP27;%l({-TeKnW6K|@C0q>-jp zX8eZJ$}raZ_NW7ZzP1{&)l0Q6qyo9gx#z~ST_>KuxhQ%+3}1)(ILUfq5uMf0*DqCadH72Vu|F*QK7JO=UE z%m5B~g^%E*MN7Xso;SHMm#IrH~+V+Io>-*%-PFj-plZtUof z>_L+c9C#`S%hbm#!$gpf{L9PPit-^o$2S1Z6u90b1%DW1%26e-nPLzT$q0S<@&%Z< z<(l;2JOB#-P6X#!o}~%luj!N1QvxPk$b_;_1Pd$c4anGW{YcWm38{SUF*`vL`88+e zfmEcVq&&6doM=dx7#J8VW}{Tl4ZT21B zfO!1YsGve=?WgE&GWO)(V!gzR#+QAoHMl<8rhqH~44}|! zbaViYzbxu;W&P(&zFM2(**<@?q7-gN%6)qS&_GHX*&4QcK0_f3CEu2-=Ilx4sfBL^P4E*R{bx_VQY-%c)3e}tL0H)q z1*T=4kuCQ<#YR%Y_`Pr2X7sKYYSmS)x@6*ix_b~OD`HpZCUMXx8tdb1ejRQ%Ue zR?pz-gehcG=&*wWH$kKZlCYH;g1aBELk!Nbvq?GRyf^xnoPIK(@+s{;Yh_m$NKbLk?ca^xTwq%7@ud7`CXqS7SRwx!2CK*d@ zh70bej5HThXcRl9-Dr+l$}uj!LaB zwu)_UmhX>fhX@0}FMq051`SiB#*LZm4pg#?aW^=ABk6Iv_gvFcy6m&}9}l-)qtbWC z%Ur}Fr8scOTRc~W)a?QAtDk`Y@EqLS2_x#Kg5!T@q|R4o*Ic4IJqOom(X5hq?6*&S zYmaQRf4h{aCE9w8?OLK4sbkcf-d*ozc?Nf!n(ghV6{~GDvsP+9o8v1=;SvPSvsl}c z2G8Fb?j10BBVmL*7!fM@b9Jt)6Kk7a3VbUG7K%oO1!pMOD;RFo1{{5kaY6Q>0u;`(Dvy~nygKSAw=fvU}0fyE;#@wHUN_Q z9Jzc+%$Eu&ELr~OJPB+tDNWU^Pt2o$+D}lNS)6*xUBnN; z8u0h;UnnVQHNyrwP?~xrF2)lHXLhuKzggOr^_~WhoR7fRZ4PH4*Lo~A!C3`UXKu<< zLEb_eKG7KlIFOy`cwVygLNws=Zdf zHvkRYo@Y75ct{NY6e(nO&QTsIU9L5}^zb7Y-WruK%B5_A_zb^!XR`=c17L~)2?e;M zRX}w*3K#35;Js(0EvDGVMnUgd+2@tXkNW&NP9x|_C{xjh+-NiY;bXP}m2DcsdxXj9 z>GRE@Z(1CAdWMGdKHBg&59f|#C?F4>KKQ^KZMz>?^*gctM}Qc%c&pzwuh?Im0rWnM^AGpS& zM^NmgB7D(m_l6y${?UjH^WZ5lDBDMtA^Ti7S3eoX2#JbSqS+hE$EmFY?1NQs*JBCV z%YmA)q{0Qy$-y95ZsqH_C&BXvi#vwqrh2AEI%O5swau)JJa&8>{=H<&3SMC@=Wr*n zFHf*pg)(JoOYH9htnT}GP?D<8?7k))5L7K+>}AyVqFn!k%p(F`!2sta5pSm@`PHMn zS&olKb_HRE1lh;CiQ_-5XCikVN83wl-x5co4s~=Q(8UP0%U!*ijh0=2r4KT9ZAa!9U ziE9z-JgXu=y-roAXB&^YG{@T>kB$LeT zxH~yCKi@FO4fr2`2I2r77!(Qsj1V{#jTr1pV})84)QMxVuoV6<4(J=C4iZj4e74|=je5_R~bPny8bW)z>Yv6yS-_4Xep>!n6GpF^y!m| zipqVN^ZqRLDEe304jcp%;O{)n z`@IZh-@0Z2*?ol1VG$P|KJZ3W1LR{O;c&lx04TBqxl`TeXVh==U>SPIW^^hHB+oQh z9rmSwaLlPM`SZe|EKE2X8zM0XGgoz5nyt2H|oOCw)PnXruAGA-ic3YvSM2A8US`mH;dVPTw(ae!5vdjy*97|Gw+^ z_!v~Jh-8oe_wS&gp;1Khp%Gi^{ZJ7-Hws4pVpe?pDM(hodFVt6il?x5G$C9(d zNDv8XKEC97((LzdJNx^M4@h**@-)V2UI$@P$`~3N+Gst){jQQ98WePVe!gDwis_l3 z-ZWsbE3LGOkiVF<_4Uy+FoXpZ=`_xl8cE8S*z#Ik{I8m_yOmML3Uv|% z$cSFOT3lRgvSfzHxdHCe1SfCm3;kk}zdus#A%NVAzysA1f%EVLP5@Ki(y|`#aYgw) zW>f;^85tSXd1*DFBu^la*MM1n>;rLjcJ|W?pyJ}GI4o!Vod6czKZlaCvngwRydL{bKG^X4X<8N+`yLOjQq0ymoF5oa7Ju(( zqcnVxRJVN%+n+75?C=R|a6)t~R`LukRx}au)2g#M-%P`-#ALBwRd1*+)c7_I=ZSQ_ zH8tK*p@fj5xSzy*-LbTys^fNwKiOX|GecB3OLmEltSdD;H#Y^UMxI*H3@S5%8aGcZ zkj80F=qo7Y>dj;$xM(2b@>yeu=xTX)UQ3G8j948x{vWDnf}i>0hL^_QHS2ll`EQ|f zgqIJNRCzZ;Qw}Z4TFL+9wANMsCLP=CK`W6R9Q_$=dbhjy6Skqqjv(3b^czH^0~9i8Ep9W|;BLdG$2!X<2mgHR({ORV+niYt zv=XH-F`*QltN!D>R7+IcF367eFvE1=KT}OHtq-?d)uQMwJ8jGPSbj>F5dO(^QNqwn zM%&6MOfx0%_;k7}xu?Uya=z*V{mD<~OmWcE5VZ2xQNcb-AQY`d2~olZ`sDPbjHk$M zIFW-Ogd|qzi2}(%)GRDkY>r_2^Kt7(w2)R># zTe??z?>0N)-SB2?vZB+5ej)4NR(59U4-)&@k#oyPFy1-)G4?~Wt?kM-DKiZeqXu>U zvSS_njBITtVt2k`tWlUM;5$P-ju+9UPdJ9pkv?vFyWbsOuk-}=BN60LGMYXqcmd7+ zEuB2o62mP$FBxA`g%w&0h_>O@@|HF=MBzX{szI>A(LgFTe48-kM?-_ zwfScyKbexl1F_}_2`TX99Hu!@vY7a}lnAQ4cLHesJLw~wPO&yzqj%2_syED;9Sm~O z>al0^5lolAzSNXbz>FBI?)d)2u_v)Sp(=y6fj2sbqCKyTGM|F&wW`V&h%VKYT4G9y z_F3Tyub~U3>uuqU_+w8=Ek~}-Vu9`#7=0uz)|pgMM$W-Hoz#-^;dyWo5c3bqo=)vrrivV_1tj9 z(y&RImFU|+TZl6A0|R>JG_I$kPx?~rSF(-Vp{qh4C*UNppT=;O!2Oc2b)Q0OpakXm ztAq5BZsAk-3=`-_SzZ}2GS+u)heu`&wV%gq&I|NhFVEFz2ktoEMcNzm9519$1&D19 zTTdN-D9XYWaX9`$o&UCl?ZZR=W!{#;^@izS;NFXCV%!W)ar;|1lom27= zJQOGds%)-P&7E5qv^{_34x=+eV~Hfs_wEb684Q*ACEw6%@iV#X-oL}@YVp>pcC<(w zNRS9HyzokSu>AZxMocb$BR#r>_pENLdqTguOVJ>5vWxYpN(`P!Bf;66Y=>2=QT{`+ zI~0&W6wqaj8fVbx-iKdbrnx%kUda<+845m+kOcO*jtte)kS#7%&Tjgy?AprtQ7wYR`M%uzzzRn5m*TqCEbOZ~?Ze@@ zxj!l~IsGq;(9j!+HLH@O*YRCyyYjkiD>@V&zi5rWQcBD8UL8<6p?TZx4w@8Nyl5|^ zI66?KovNnY4!za)zzmk4M}wdQ4tSsWrmNW7d_`#gv4kZ;g}rmNmF0SM*;yJfH;w33 zx}&Yaj8hX-C-ABMZBvA-(DrJX4#WJLQj?`TR&g_Eisj9ejx^mm@7#;>PYmj66<_Cw z-7TxD?aLZc3vTvOXCj^lK9~L5PdEd+ZW(7-=Y>L*6$XcgbdscLt6Z$J2z; z9myYFtjr*!-kU9iM%-pMuWbsl<0?3cEv=jiMxEc z;I&^PpUW*&W30zEzl|*v<1h3JCpB&)^v~0CUl8(_UX1Q%R0wxE{!1bS?+YeRDH~o? z7EZq*p~QH1px@2$jQ7o~|eDxpCLHO%(e$Fod)c+?&_whF4Q3 z-7II=>nXq=U%;#zY!u~c<;Tbqqcz;;q9m{3-ndeY7SH;9Ss<|;r=^q8mun~L-vgpv9!@b;T!a z_^-@Sb?=ixBh!+Q%m1)P1GH8S>Wi~^idyFcFO0S$v$xEk!(;?HCD&v;&TUG)T5!5S zz;uhqta7<5g%na6Cl8FGuL&b2dnL_`H*PlBoQKY7Fx)!3b7`H2>NIfio81f!YwjpE zVE2gWl6XeLwr5Z2gl+TVxvIDmn1#5Zjxy7dfqv@7g!+`_W>Rsc_4f^fngEncDH!CsZ1e+*iRS zjE1Y4QZHFhO4NEViB`ky@&sK-4DTRa_XtUdLKJ?Jszk!3$ zz*VXRGaFK&63I51Sl5A;CLx7YOVY-N9upm%-a*i3=vK^EWBxPsI|;NcQb$0;ji#EH z60k;mOtp2SaqP6G?5S$6Wwq97P!>=0 zqbi8(YyJ6IpD;e{eZBo0wXM}2<<{d$?mTSw_)sVI0jwH}1{qW#oA2e_!rFt@vudnZ zjcu~xp&Hql1bCp|yMdP8B3O5=re#Hz4@V#KVnD}Z-_6;f{!Oz-Fn&Kno1No{O|fa$ z%P3YTEu|_a4j3B=<6`QN43gIk_{IPSp;Q>~;{TJZGpAy}ndBB#M0Z<2v2uN3;P36a z2LLfKxw4bi2x(-ZFG?K*>Q%eNPqEMqw7pM{sp+To2^X>!ehME{KMNE~balO}OFh7f z!z$FL$3Qpz?{t!>tm69rm`)134d_dKpGUJaOZC=I&mk!DPjcD(++DT7oN;J9K~lnn zTk)6O?p(?6)LFFpBR0V-QmFoS*bSZ5%`{n4!uJeG?1x7}HDcos>!kMHIW)Y}yftXx zTqntqLpejd_K#C@(R`!qmGj7p^3I=>qHP<0vU&4$C`?{=?JOVe*7mCnZVZU~uPA4_ z-CykX_jwVs7`6K+Yxcb^*{JY3xg(xfv1b=*jhi5ZS&jJ&&&551Ncm_onBcVPGk6KA z-jUZM`c~6*%V4>G))&m@%zB}tZoTU9bo%v!%k97G#rLv_oC)qnM)BI#e~<9!EhR3ayDF{N^bSU#C(2P(vb{#~ zwxFE|1&|&M`U|?Cf+zoaoY@Zrexg~xcfPUQx$BU_k&qnz_uvR`TBxdj$xfKR@7_)3 znz`Z;ZR&l))}bN-I;q2pTm81f^vdHB3x3nBI1vRR^xPCAOTJ4vl@jceEw((>$_;dG z4ok&Kso1e+NjC+JE)S^(loiGFu6zf0Y0>!)osQX7I&&=PGVxwl$Nz^b!cC=tth9hE z(4h0Z5O1LQ4!Wd9_@_MOOiHrMo?|u4ZdKXT0j)Qckr#`|XYCwfjX?vp@Mc5+(eJ+-^pL*lbwpA8YP9^TI_2WodwzU;0wS#h}(f>vo(f5=)HdnMc zSv7!vYjgMP|Dla^%d7S#^vjW@q@6a$`#y-9>63Y3a??b!3{4S686r@sZitbx^*d%1otv%wrs2b8LhjU zo1GRsMCloSo7`4uS(!2o7W&bZhq?Jq9^)@Sr&LidsxR_pgc&lb1aSn>PO%;F4-+k z?kCdXHF2Imgf=JOm3T@`aAZ$Wc8{RIj ztV|)8n3%}Cc>j1;_E^vuWj?W<33=pFl-a>gbC@os6;RUJZdz)1~d*{jIgNEzOMiPS28riSd|@`Nd_0p@Q@{ zoSd=hFF811+s?^`4)?-Q};<` z=AfgXo6L+Sk8&<4G?{~uoQ6U%y74!3doijaw02ANInm9+Rh-YT>u zbJ;Lwy`V+(VF4Ox6LK)P797fY8~l_WJ>&9w-+JXJ|_U1TzZ{ z;8ffR>oqcDE#k+ICI-NiRgwG;h>0kZK^C}Qx1d9$odLAU*egE?oA|G!gq^E+z8T;n zw)1jdK)NXy84rM13AHkX#Kz*N8i7WXU$HbBM%r6N>q}}?qxprE)+i9o;GiJD{|c?{ z?gG}Un&!zJAT2KSOMZ|HM~r$Om3&jg7jp@jKXYh}ot%^uR@NkfL`fJLlGVy(%MiZo z0eiVg9yP6YOf4>n4{M)IQ|Xh4n+#n#!SfT#R-}#2N`X9q(EJrE1%@5srsm3STd5l$ zM&!I2OA~q;?z+`s9!zp9U z{CPVVGUiWMK&$h#05W`S$b;E}fL@imSItS zU%VegL0UjsK#>v@L_%qh5Rg(zN@1p&Or?>Wu1@V zv;MNnWi0d0(PpS|+%5y5yXI2`DkveRiLjLYCmUx+cVt&?RGy9YUf(~xrzEvZiL?hh zcaAy-ri={-s*vo!a?ZMmmzQcUD2VN|+=r6_lu__{*vawyaAPO#!|!+I8tR#De|j|Z zW*q~oY1gbK!XHZuL5v4+j{4QU}#*Z5;#;j%K*JC(F zN{bicEBO*0r)HUS-DO@f8%VTKeqM(yl{r?y%65y1LnHrl=U%CRQ_|m&s6tK)itz+N zj(Y#HviJg@rwH~k@Z=bQMNXQ}YOD|}8V)b;z_d>d1|4t_IBZQ-fotVD{_NYUyx=@K zJ=|PfU8NJSVs|3&t){5#*xn-WZsrC?@&jyJR)6qLQ4@T2s&B7%ah5)suw@8NiV8H52e0d9YH zZdLGO`xdqLPPBy4Ip|`pN^ZK!A?wZHw@kf+eJm!#eF34Ao{0$|Vd12p^z?MlSqk38 zVKelN#5khBil|VvM`hq?)b|SU-y-M&N+c~!O;MoVw&sBgdKpT&TGjL|8{?j{7;5Wl zM)aR;8*@`Xy~{%z{enz5v575l?3LEt zS_`W&Rmtm;&zgMe9)=7^3*EI!IBJY1ikyGH(Zi*8L4r2Rnqj^>np(oUY+gS<{|atp zm7cP6RaF%$E9=yVpYuKQYFOt$R#Ns$$sC#w{+PZ3PF`J|=(6O~Hl03C5r%?aikr}- z7@qD#sM)j859L!DC)kzf%Y7eb8}m(7%Ehngaiw_{Et6WJK0Zs1Az58Dmb) zT0^Ne!XAkKuBmCc>Ng$ zKNa*vN>g#XwVygYvh?!wgq%veGDH1N5u}9SiFfp52qp^2!dTz3t7E z;hM|@W&gAlkquDgSDSXQ@ zYI>S_S>;b!^}bpDK^nivyL`E?x5=sE6i|eux80n!-Jg?|4XDjON9-trWea=(x0xd4 z_*{1k^E*~ulPv!TW*-YfAnHVCD!u$H_3Cvm<1^?VMkZmHTeYm+Y=<{Ee zXiX)5tY~m3;duG3>Mu?_De2-L1f6X6j>2Egnd*$YeOR*gs@wctnm&c1;oBBn4W*1( z{K|Lyd&ryIMT9+yeAn^r1W78->AI2FW@5tnzC3G>yEo_7{Hj;YV*>F)(&3&6Ld3!8 zc0&n)x3@QD*`QS837;G;Bl2pC=}>vGIjWv!-LdOPTh3T#(OTQHvHjJe+Hu%hGQg-< zIm~5cWOhT=@QY_usT{Ka`_M0|z?jx!lf{TcMFsoyVHyrSG@?Gc=-QMBucwTL)yx=j_QoQN|1}eBa)LT;d+|u%DeYR^PW;MGdt>6?#E8KexCtma{;WTR>I6d`08wXxD`FavBw(23k)=sV%B^ zD?&MrEHd1Bdl!8VRL40LZu?7TXP!(J{ptQ`X^f*Nbp>NI{`;I=r?9YGuTOoYSlpYd zgRfr&q~;&nNG|tG;*6u06R6!Ose24BZvEh{! zrxychjM((WVDXNkTSE6<*G_YZv&h|BO!TMRvD~{Q8uN4NTXMWxvroBM!1*J|Td`Dj z@(lUAy-c_uQ(BtI!{xO@Z3#l%1~kk7Pmne-Hs*EScmZPpf1*s4zuqbBxHBMth{Rn- zVIFs~f#_hn^u*Y~S@-8`Qta7m1{u>p(Y|i&;y!EQ`8u;wh?o;++AXGenzF;)@`76Z z&g-lOq2U8OG4jk0$ku`#-R!@}5X8j_1jKm9x2e>|aj-IxCGuGsWjtZ#R;;7)*?hS- zNPrtYn?ZsTzBb(SH8SZ*joG)v^E5mOVG!tX(3XLfP*vnZdcsbApbP2P$vvHUM$$rV z?Z@-DHP{t6j^|%eu%7kjb%Rc&JCYpFS}cL_QIlk&PXfN}#x!Nho!c;M{!oh#WrnzX zTWk&%^kzfXgtv}XSWNnKL=e<7{MPY~f3lnV^?*qbEM!gW!e`6RECm?Og#`^xdIy_G zNpD#O%Nd$%^PBA^nr2MIr=tjV#6VZt;;l9bc2zub*0=gS!oSanw^>UWYaJ!Ub#IZj zmvHBw@vL~`#fXdvy2z--@;#i1D z-`mthk;mT7{ntBx1IMjLD@VEGdllueizbT-W0|MAEfL8TYyzvZ$n&@#H+k&OKfLtQ zY+9=I!a=A`faUz5)!2VrxHvfY{DAvU3roy!a%33ftKtld{H+$0Ngx4)Yj ztv+Y+_9Jcruug=F!PC4yw)2JbYGM?X0dXAKq%EjHD11n z68FsZDdJgcSu1m z^NbhQ)RS)1@6FJIk93(LyPLDMIlLd$=KfGHCX{$(J;vt6z6H(Wulv6`-8iZZ^X}Bv zl^fhX)MiZmiL0jkwLQm&SQ{O^lO}GRe)?@VchGU{f+dzdfn$9!uA2f|HcXo;=D8l4 zi6t1frQ|4q6pxN%`XU|2X~>BBA^vB_y+wJM5B`CH4*KEG`vM6&9+;mFbMp!%>;=o| zd{$#-nGa5ue)o9y56>5!oDqfSbAyQ=60aR_-b53kj)_0zW3j;_bSrN-IdN;$~Hva48A9M zg@tcBKHu5c`~A}ol9|f9C-QANs;PFZ{n54eu2)>y{WuYxJl6O;+9z;P(5@kZzF|(b zK3UFi!e}k_p4uesaHU~=)$$nW=0{iHcTEXX*)E^eC?RdX_M+pA6q=i3yr?)!H#epS zf$VXq>J)jTF6W*~jFg44{dta|lw;ZscL_BbIFe-ClmebewS7}6n zz+gF6-T9JeD66Ks6?bvzP0oUYx*V)*Tc}HE6};@`y4dUF24K+CNQQ{XJ@(w4le7|_ zi0&Bj)%bC38W1<`ofV|TCM&89N>>iw_P)W_Z)+ykkyO86Kw?cjb9Rm!GQYldbv)aI zn!_Wh$h(ns#Hxblwz5~Oj`}K%Ywbg0sXZr|YFg0)Twk+DIc89d8)nh`-DxBN`$n6S z%rJeW@b!z^q!mk zh!%?oQefCR6Wf`xBvR1TUfbQqRVJ*~VrL_ZcSenia`9DedePAR$^H}+^m^)~(V1u$jjh_#9?eEU{)=0$vTuAm zVbVQ^VB5*H0u}-X?D4EON}}Jm8Mkv(JUM6Gp4J;?$xw-p)tMMSmfU=)mgppY_`EBV z;2B=K|8TpV+aZb~qvayu6X$I*>WYNI&9;jZ{+yJ29k-qsrG_;3JGYp~bliwH(6jw% z_i7G~N-4=m<)a=~(EI41J*?cehBxWBYNNp|7d1e6HS zdcW0wRt7p){jb5e-a4N1{vR;wrhB`I%OMTpyOh~q$7vI**CIvO%!W6*D>yE~iziHa z!R6Dx*=WOfxU)54Yo}OW+)6P$ef_?xk#xZ4Alt<~RQW>gc?`o>LE*D?WiCdQgp~hXK2umygcwRXSDAhtK%%l4%5whOny^(>7%rJ zl*V?QQq+T2*WIRTz? z?*QYWj1L`Jfwi-`@YPn2cOYvVO-@k&l}SXmYvS|&SX249Z|javIt{9D>w5295mskX ziDeM#++X1fu04|r2HpXcAo1k2;^OV3ENj#i?lh5l4=$UvItJ8WHw zm-sVO`}4ykbh{+HW86A!Le6Pi(~mOzo>h?xY#dKdpzq%%ZvICdRH1 z<8bRGKs!uuiaWXP`#c|7IyGl`@{ObFw5H=qyg-X5Q&g=;&7Xpr zknlxX{T;@SihE|iz3FqE^>t}E94MLeLr1v6!Y(V!B)5?#3YM0lkBZGiy~8T6)tb9% zwFaD^dVZ2qzYso3EEYR!i9yP5c5_%q;ai^;gw%W4oPQvpqdRk9OAVJNk08Ae_B!wQ zHW$7kisM?bva;gqivaaqHh5S-q`6d`p14pXE}LRxZvH}DU0NDAFqD*(dT|-&i!8@g zS6&Gkm{?hS)g5Q!O?V_;pn7+Cl`es1eYmByVx!Hr?&QqwN!N~&C{>#1ezZpwS|=td z&V)rw{@!Q#ry);GJoUXqzx>x$?(fxTac*V5yZ-sLO7w%KOOb7TeG!^4&z5{zN#~-jGUHH%axsx@ad-{A+reM2WNVEf>pYJiknXzHf{EUF zeI#r>-2w|8^-lJV;#D1olg!KV1gazyR8&5Pn-Aow}CxV8XY zCM|vW)E)%AaHkf^zfSnag4puy_w4MIK^1Y0%bS1>dC~eFYGlyZ`2u#92(gnDD2Huy zLSYY5KYQIM4kQT;0#RuPTVN<=zy`CJo9gZh zb!4QaJ<-R@P{NXiB97*d7rWCgvv&HQbB4-(Xmpi1t`4x+aANr;_P5XsBC7$kBH*@X z5-j}~FnH#Gm_eh_dQ_Q@oi<&n!HBOH2Oos(+Ew?Xt!^g@0k4sUv~@ zQh%_!E9km|{Qky?HDyG{DGzgR_`>wK3`)%-BO)T0%)#R92IX0IvQqV=`M0N=>Js^jBx0rzfX8Oefa(+%MV7zx-+t<2Bc&o|*Y1OKfX>QE%~ zLa=vhw6;!`Vtjx=)D{32usd0BA8ei>{9suIGdS4uumUyS5dS-go`OOLj25VnQrx}` zq!DmWeTNimit^ht$adk`JyTV^57a6!V{VR@1QO}IleiCb2Pod$GM{}9)lDYg3{JPd zw0L_JG4xT73uMBlXUF@40|VDNVG*jcM=5A&X%Q0)zW6(NIdNsFJITQN7zNk)d0hK0 zf=v#1 zO#r8YgR`FK74^5u%14kaK6tPPMdLVb1Fk!Fs+>1zp_V=51`fEF)sAlz6+gZTi-{SA zyTGOx4`|CrcNO=IQW^VHskmPr?Cm|bUj`Z)EEzea48HE6M)3gYg1G~ZxI3C_tE*rF zG=>QXGv~(0w|fAusR9a{9aIfX4{HIMnU$55vkuuS)L$J}R1FP(1Lx{Gr~l(Q0GLqT z(-{I8`j*1r11RX~k&==E3~YNU515Sbvqd&868)*&1d5;r;2Qv23k4_G(po>#@B(WE z7Z;bJWa-fixoIyJVPp+f+3Tuzh)Ysd{$);T!#6_j@pBj1qeemXWzhS2=3EAahH+9i}uH`T0%A52^>d7FMhlL zH!ieDgaMBTCbxy#R-52Hpd17Fd!bR|jLz!PQtYQszIHTNpIu-Y!NR>YUc$!0lDXjy zp#t2P0ETPs?~lx#SQ9Y0XO5MixHLb%H}VO1U)vY+q1=@mcoLx|rlypQPasApRyKnIeHs2L<(yUR5wrpJm9}>5}=HaRBBfDCm*r-?wsdZD6?X zupz_uhjtFemI=kIgFk<&atayXla7o*wE-9#!P&520(yff(cTcV`YB z$Px-w2ab@*a+tO>VxE;{W&CWYVd(Mq(LzlfY^ZYb^5bwCu(yJ2LE<(rNN)%`Z-Cbc zq8JcNZLQ17%NclHH37c{&~BabZvQ>*MDWoz-j84u4-XBk0eQQPjZKDZ*vkfQFUZru z4J-WUk*lk#BfzYV93@0Q$Hr2Uk=euLw6#Ifxi_LIEL?+yjYD|jQ6WIsD)S`Ck@^IQ zD=<{yje~-NkD(aqU~iu@rgrlh6pKAvUH_h*9)VjX0wGDy8Yu_BB@8?h+H`si-gRdN zwojfs@xdGyaJLt*w8Ow1LiFptBD@X^Gs>wVcj7v8Ju1OE`afFTYYU58H{#_hG1mLB67_i~@q)7uCCz z%gf8N;0=T*4Ujh5OB@fm4hGF0r>) z>j(5_;K#N8jKH-HoNRrFa9a6#!QtV=BqR}GVKEAssH38ilJ)7Dih_cIhzJ#MV+|WH z4-pnqKBByF0|;*ikam@DL&$=F$OH2Rk~8&n5kQ^6y?+5HP8eik{1B?3_0({-N055^ za#-`sIu-rD1MsY9E;got(NUm%*T6f#5gHnL68hl?Ol3WCnFBz}f$_{f@{#W0769%n z!3!SN+kU?bp3Lj6_{gNB&U`yNJ3JB+TOgaB#uBJLjf#p&zp#Vzb)c`-R8|%qPk@u# z^W_jMJHG?eIq1Ra0)cHj4iL4vZ-r-z@!aY zp50wt7Q1AGjR4^@1Mkp-gpWbVDJd{Kcu@S=fqGnk-9(r901h?-KwQ5>0qmNTloS^? z8p!CqfIl|r{Hs?D7o5RF4vXxw=`x5UohX%55vV3;eaM}se21^CqvP)CS{SAU=Y%tt#o#A` z|JVYO)aBLHcCoJerX8OF6q7rb4ij7LV;Wd?MPSk4*So$J|MlzFNmGEGHk|!#G)+iK zD(UqvNffZoDSs}B4b=&+kkC+wHof7R{jeZ|H($f$>j*4W5GEafX9pzUVWGFMq{E8K z%;eyJafkgDyOXU0Cuo8VIy2R zz!_n=dIEvXsF9zScRvMJz`XCj?rx=iSL^=tD*-nHIt)`8Rihyc-*NwlVQQ}7+#>}Z zhM(7fI2Tubb!%cmg7tWDCO{UX;aT=W-UNwnW;Gj@H9Rv68{vEuMq=(3kr@pwt@qAP z+Iy;@%6ZnOg1RA9aA$g}~C2 zCT=jdVW!F%5)$%U4Rb(t2*;TJ(9jTuc>VP&bc)wf`v8U<`90(cVb|qk7zG`sW@a-0 zn+^K#cn&D4?bbX1jJP;i$E-KwOZ~!W?jM1xOh`zGhi61>2ICI8d!kMwqV`oH@WAtK zXq+X*#%ek%G+FRGd}w<@0_kG&`>-&gdZQ~upo@tK4GS}+nwpw=#2Bv3Oa_Vf7Nl3w zjxg>xiVuN&3}YG=NsS-7fBtAZ37!Zriibb`!I7Dn2^XgM=vHpjhsR%1QuN2!H5M(M z7|U@~;p}>_eRM0!(6R zYJ_W4(Sp;3g@xcQh28(&6EF<{{G^Z~wAt+<^J+hSk?vCk1&cZ|Y;3;@`_hf4&{JOv zzm0>$WU=-T30_n2ebrwFi3S&}Yf?pf5QPBn5W?!}1}Tr0o2fKmqa1V8zvndoiVpyg z!@oy*hPa4lcj)O;0yKcCP+U|5=2s?BLOr)0w}jj-{CkfS-|AR#1|W8@VSbReiJvPO5JHX2Y=WAQ)c zXI-{bIa7+tWSGek;{P3qiJJ78m~@ef0NH<^;X!t+9+#FQVMz0QN3{{7i0ki-4ZYBY zFj!m7*yz|*?ox8vutEGV+m6hi1gx|Y+Q`Df;(2g|fYE(i---7}WZ9bIb~rhe6)Z5$ zoy8A}1_{-(H{#v{JG`JdbcFJq1QKMBWWg}p#(Z*LxGodJ3ip@cy00!wfO}t5*{|b| z=RYfYp{Lzo10-jdBe2M8%glfK_AOQ1Cp8E@G%&9?K8^Ac^T9 zK7knb>h)`_h5Zly{zWR4?*I0@!+;=rS!+I3$wNv*M_1wx>zXl8FktfM&S%3sw->vH zi!i_A>4_7gMtJkA=QLtS%I>r%y%3%d?5zNunXBCUTyhwZKTVP{8)BCWLt3SLN{fkoZopbg|un zY<|ZWBrlSZSfqkNLSX5xsSYH#dUc?(!ge%#Z^LcbkA{A+L6@+xNlW1~!AtKAkMKsEy8s;I5`m!5EvVT1MV6ERwW}o0z=~LxeNy`Zc=>wHPXiWFixyT^QVK! z*=Cl#>tIJq2=cqJLZgi{m;a^35R#wtT|xxDWqk1V?wvbtU=+b#K7=3c9f<7cAKD~; z|Neb%8FE~M5;G-p^K9@(i~_BFbF3%>YAa=WJRrHgW%xwH^GYBX+sN|@-!dxIN0Q4v`7#;T(FV54)X>C z<-?F;@9*!=PJGSCfKNxKt2+rR{PNP$#N=dLY%GMxl3#T30FM@gTLp1HC({Dq>jE+| zv-aLz*i`61_75>O*9j@dOe<)=2zO3jUtdF=4k6JEGnJf&kQ_DvfLX^_X{cJmc{Nhy zm@Q`O>jE)HD-^BJu56dj|E%LEzT)MjyY1>_$s#G_m^_ z8-Y~DY(im|30qs~MHGsHf}+_;5b(mk_Ay^9nDg(81y%0>2xyZ`oDe-xkr8S+YShpS z%^yO9`DM)ibGSRt4ITfjamh~>qfcvg;z1xuF_qB&>&0LwhjtpM=+*zJx{x~5v%~7n=k4A~IiuGup>TKVy^U3{j3adC)oQSs%c(2h+dexrk7+n!Y_{KgSdF-X07`->| z6!}Pe-_+fG;{wNL?@#`EfdUQFtHtI76>OY>mGlW^B@Q{2GIYEt^)V1<~w z*%Pj$vQ3-FWXBCLT|4F#%Ltqesw(2ViK7+q!cp~E-%XNGgH*lxvxC>V=RbC;C=eWe z4J4|)cwKc=^w~Gf$QfpJqemWULlQ(bJZ>A6YXgYWm6N`tKAese> zg&S25lKY3q^St79!~C zrjD<|)q_7yuF`}w9(Ny|j4qN8{;kD7GL|zm9O-+Z)s4dP6#&`2x?Jnnl$^w>eU!W@ z69JuN#*sLS%FW-qLDaH3IynajYJ@5-EUU=Jtlg6nbO5+Z_FVAR%#+SgHTepHaM`G& zRQ;cSsXl)Fs{WFW>Joy;53C}e`g#_mo?tUXikz-}DG4sK+m5bx8VnGUmX=W|nCWrn z)Ic4NK15e?)gvkMu@Q+l@FkQyjpb6ZPH+BWi!x2tK07ZL_NNdK%oLPYQRAFZM}O>| z)~CY{mP@28I=&#=yAV}~bz80YlGY;@!}0yh9MK25TwjHiGKLx}vxmH5k<7eva___fIfcA96~0VMVxlib{2X!aQz=I$*9E2ayRG+VRN= zS!7(C7U*VAQxr9$(sWfj26+Ye2Q)ZF7G-FH+qGp_=I5WMrha)R*E?4I=Jo=YXBv!<%9$U67fI8*3lR-3}$lXya5o(|M~ zr_}*d$nK#2sq*w`uGK?e%0L1EHG8N8vWSVjOrf}hU?=fvLw(H9_?RlR2H(G5L??`v|M9;+TpEHNo$9><3>PK)-NWL(m&JHFvjKe|Nl$SjGgWt VZ(ZNiA|ccw