From dda33ff16045f681aa14731d3d72f8513be443cd Mon Sep 17 00:00:00 2001
From: Yaman Umuroglu <maltanar@gmail.com>
Date: Fri, 25 Sep 2020 00:19:05 +0200
Subject: [PATCH] [Refactor] fix resource paths

---
 src/finn/custom_op/fpgadataflow/__init__.py   |   2 +-
 .../data/cifar10/cifar10-test-data-class3.npz | Bin 3316 -> 0 bytes
 src/finn/data/cpp/npy2apintstream.hpp         |  70 ------
 .../finn-hls-model/finn-hls-onnx-model.onnx   | 207 ------------------
 .../tfc_w1_a1_after_conv_to_hls.onnx          | Bin 250099 -> 0 bytes
 src/finn/util/test.py                         |   6 +-
 tests/brevitas/test_brevitas_cnv.py           |   2 +-
 tests/brevitas/test_brevitas_debug.py         |   2 +-
 tests/brevitas/test_brevitas_fc.py            |   2 +-
 .../test_convert_to_hls_layers_cnv.py         |   2 +-
 .../test_convert_to_hls_layers_fc.py          |   4 +-
 .../test_create_dataflow_partition.py         |   2 +-
 .../streamline/test_streamline_cnv.py         |   2 +-
 .../streamline/test_streamline_fc.py          |   2 +-
 .../test_batchnorm_to_affine.py               |   4 +-
 tests/transformation/test_conv_lowering.py    |   2 +-
 tests/transformation/test_fold_constants.py   |   6 +-
 tests/transformation/test_sign_to_thres.py    |   2 +-
 tests/transformation/test_topk_insert.py      |   2 +-
 tests/util/test_data_packing.py               |   2 +-
 20 files changed, 23 insertions(+), 298 deletions(-)
 delete mode 100644 src/finn/data/cifar10/cifar10-test-data-class3.npz
 delete mode 100644 src/finn/data/cpp/npy2apintstream.hpp
 delete mode 100644 src/finn/data/onnx/finn-hls-model/finn-hls-onnx-model.onnx
 delete mode 100644 src/finn/data/onnx/finn-hls-model/tfc_w1_a1_after_conv_to_hls.onnx

diff --git a/src/finn/custom_op/fpgadataflow/__init__.py b/src/finn/custom_op/fpgadataflow/__init__.py
index df03a036f..a3b6a8ff6 100644
--- a/src/finn/custom_op/fpgadataflow/__init__.py
+++ b/src/finn/custom_op/fpgadataflow/__init__.py
@@ -325,7 +325,7 @@ class HLSCustomOp(CustomOp):
         builder = CppBuilder()
         # to enable additional debug features please uncommand the next line
         # builder.append_includes("-DDEBUG")
-        builder.append_includes("-I/workspace/finn/src/finn/data/cpp")
+        builder.append_includes("-I/workspace/finn/src/finn/qnn-data/cpp")
         builder.append_includes("-I/workspace/cnpy/")
         builder.append_includes("-I/workspace/finn-hlslib")
         builder.append_includes("-I{}/include".format(os.environ["VIVADO_PATH"]))
diff --git a/src/finn/data/cifar10/cifar10-test-data-class3.npz b/src/finn/data/cifar10/cifar10-test-data-class3.npz
deleted file mode 100644
index 697d53830465fd26030b6e66444b42061b29392e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3316
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

diff --git a/src/finn/data/cpp/npy2apintstream.hpp b/src/finn/data/cpp/npy2apintstream.hpp
deleted file mode 100644
index f3afbc5bf..000000000
--- a/src/finn/data/cpp/npy2apintstream.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <iostream>
-#include "cnpy.h"
-#include "hls_stream.h"
-#include "ap_int.h"
-#include <vector>
-
-#ifdef DEBUG
-#define DEBUG_NPY2APINTSTREAM(x) std::cout << "[npy2apintstream] " << x << std::endl;
-#define DEBUG_APINTSTREAM2NPY(x) std::cout << "[apintstream2npy] " << x << std::endl;
-#else
-#define DEBUG_NPY2APINTSTREAM(x) ;
-#define DEBUG_APINTSTREAM2NPY(x) ;
-#endif
-
-template <typename PackedT, typename ElemT, int ElemBits, typename NpyT>
-void npy2apintstream(const char * npy_path, hls::stream<PackedT> & out_stream, bool reverse_inner = true, size_t numReps = 1) {
-  for(size_t rep = 0; rep < numReps; rep++) {
-    cnpy::NpyArray arr = cnpy::npy_load(npy_path);
-    DEBUG_NPY2APINTSTREAM("word_size " << arr.word_size << " num_vals " << arr.num_vals)
-    if(arr.word_size != sizeof(NpyT)) {
-      throw "Npy array word size and specified NpyT size do not match";
-    }
-    NpyT* loaded_data = arr.data<NpyT>();
-    size_t outer_dim_elems = 1;
-    for(size_t dim = 0; dim < arr.shape.size()-1; dim++) {
-      outer_dim_elems *= arr.shape[dim];
-    }
-    size_t inner_dim_elems = arr.shape[arr.shape.size()-1];
-    DEBUG_NPY2APINTSTREAM("n_outer " << outer_dim_elems << " n_inner " << inner_dim_elems)
-    for(size_t outer_elem = 0; outer_elem < outer_dim_elems; outer_elem++) {
-      PackedT packed_elem = 0;
-      for(size_t ii = 0; ii < inner_dim_elems; ii++) {
-        size_t i = reverse_inner ? inner_dim_elems-ii-1 : ii;
-        NpyT loaded_elem_npyt = *loaded_data;
-        ElemT loaded_elem = (ElemT) loaded_elem_npyt;
-        DEBUG_NPY2APINTSTREAM("NpyT " << loaded_elem_npyt << " elem " << loaded_elem)
-        packed_elem((i+1)*ElemBits-1, i*ElemBits) = loaded_elem;
-        loaded_data++;
-      }
-      DEBUG_NPY2APINTSTREAM("packed hls elem " << std::hex << packed_elem << std::dec)
-      out_stream << packed_elem;
-    }
-  }
-}
-
-template <typename PackedT, typename ElemT, int ElemBits, typename NpyT>
-void apintstream2npy(hls::stream<PackedT> & in_stream, const std::vector<size_t> & shape, const char * npy_path, bool reverse_inner = true, size_t numReps = 1) {
-  for(size_t rep = 0; rep < numReps; rep++) {
-    std::vector<NpyT> data_to_save;
-    size_t outer_dim_elems = 1;
-    for(size_t dim = 0; dim < shape.size()-1; dim++) {
-      outer_dim_elems *= shape[dim];
-    }
-    size_t inner_dim_elems = shape[shape.size()-1];
-    DEBUG_APINTSTREAM2NPY("n_outer " << outer_dim_elems << " n_inner " << inner_dim_elems)
-    for(size_t outer_elem = 0; outer_elem < outer_dim_elems; outer_elem++) {
-      PackedT packed_elem;
-      in_stream >> packed_elem;
-      DEBUG_APINTSTREAM2NPY("packed hls elem " << std::hex << packed_elem << std::dec)
-      for(size_t ii = 0; ii < inner_dim_elems; ii++) {
-        size_t i = reverse_inner ? inner_dim_elems-ii-1 : ii;
-        ElemT elem = packed_elem((i+1)*ElemBits-1, i*ElemBits);
-        NpyT npyt = (NpyT) elem;
-        DEBUG_APINTSTREAM2NPY("elem " << elem << " NpyT " << npyt)
-        data_to_save.push_back(npyt);
-      }
-    }
-    cnpy::npy_save(npy_path, &data_to_save[0], shape, "w");
-  }
-}
diff --git a/src/finn/data/onnx/finn-hls-model/finn-hls-onnx-model.onnx b/src/finn/data/onnx/finn-hls-model/finn-hls-onnx-model.onnx
deleted file mode 100644
index c2db9153f..000000000
--- a/src/finn/data/onnx/finn-hls-model/finn-hls-onnx-model.onnx
+++ /dev/null
@@ -1,207 +0,0 @@
-finn-hls-onnx-model:º
-R
-inp	memInStrm	memInStrm"FIFO*
-backend"fpgadataflow *
-depth€ :finn
-Ò
-	memInStrm
-weights0
-thresh0out1"StreamingFCLayer_Batch*
-
-MH€ *
-
-MWÀ *	
-PE  *
-SIMD@ *
-backend"fpgadataflow *!
-resDataType"Recast<XnorMul> *
-resType"ap_resource_lut() :finn
-L
-out1inter0inter0"FIFO*
-backend"fpgadataflow *
-depth :finn
-Ï
-inter0
-weights1
-thresh1out2"StreamingFCLayer_Batch*
-
-MH€ *
-
-MW€ *	
-PE@ *
-SIMD  *
-backend"fpgadataflow *!
-resDataType"Recast<XnorMul> *
-resType"ap_resource_lut() :finn
-L
-out2inter1inter1"FIFO*
-backend"fpgadataflow *
-depth :finn
-Ï
-inter1
-weights2
-thresh2out3"StreamingFCLayer_Batch*
-
-MH€ *
-
-MW€ *	
-PE  *
-SIMD@ *
-backend"fpgadataflow *!
-resDataType"Recast<XnorMul> *
-resType"ap_resource_lut() :finn
-L
-out3inter2inter2"FIFO*
-backend"fpgadataflow *
-depth :finn
-Î
-inter2
-weights3
-thresh3out4"StreamingFCLayer_Batch*	
-MH@ *
-
-MW€ *	
-PE *
-SIMD *
-backend"fpgadataflow *!
-resDataType"Recast<XnorMul> *
-resType"ap_resource_lut() :finn
-O
-out4outp
-memOutStrm"FIFO*
-backend"fpgadataflow *
-depth€ :finnfinn_hls_onnx_graphZ
-inp
-
-
-
-@b
-outp
-
-
-
-@j
-	memInStrm
-
-
-
-@j
-weights0
-
-@
- 
- j%
-thresh0
-
- 
- 
-
-
-j
-out1
-
-
- 
- j
-inter0
-
-
- 
- j
-weights1
-
- 
-@
-€j%
-thresh1
-
-
-@
-
-
-j
-out2
-
-
-
-@j
-inter1
-
-
-
-@j
-weights2
-
-@
- 
-€j%
-thresh2
-
- 
- 
-
-
-j
-out3
-
-
- 
- j
-inter2
-
-
- 
- j
-weights3
-
-
-
-€j%
-thresh3
-
-
-
-
-
-j
-out4
-
-
-
-@r
-inp
-
finn_datatypeBIPOLARr 
-outp
-
finn_datatypeBIPOLARr%
-	memInStrm
-
finn_datatypeBIPOLARr$
-weights0
-
finn_datatypeBIPOLARr#
-thresh0
-
finn_datatypeBIPOLARr 
-out1
-
finn_datatypeBIPOLARr"
-inter0
-
finn_datatypeBIPOLARr$
-weights1
-
finn_datatypeBIPOLARr#
-thresh1
-
finn_datatypeBIPOLARr 
-out2
-
finn_datatypeBIPOLARr"
-inter1
-
finn_datatypeBIPOLARr$
-weights2
-
finn_datatypeBIPOLARr#
-thresh2
-
finn_datatypeBIPOLARr 
-out3
-
finn_datatypeBIPOLARr"
-inter2
-
finn_datatypeBIPOLARr$
-weights3
-
finn_datatypeBIPOLARr#
-thresh3
-
finn_datatypeBIPOLARr 
-out4
-
finn_datatypeBIPOLARB
\ No newline at end of file
diff --git a/src/finn/data/onnx/finn-hls-model/tfc_w1_a1_after_conv_to_hls.onnx b/src/finn/data/onnx/finn-hls-model/tfc_w1_a1_after_conv_to_hls.onnx
deleted file mode 100644
index aada6f07e9d3910122d2eb357d8a8c1224e9fbab..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 250099
zcmeFX3Aokc`p4Z|wn~LcNXS9R5F-1xo>dW1hD7G1L8VDb!#P5U$dHVM&_F4}L4@{N
z86xvM&(q<Y<Cq-|4)4DA>SKSqJ-@ZK^S;-6z1RD`&vpIQ_rAZ=^V_Tbbvpmks9uYP
zV<wFoJ$B&GHg$LHxNDc!Z``1)YuS1yj~IQ@fD!$NjVf!_XYgr52aFlqf0zDa28<mr
za+elOtC`W`$L-Q)z2Ek&8m=A7meekDwz5{e$B!5{tnbjVm3^Z}465$i_;*58Z8J}A
z)pT8^LyNLTmCpVr4I6OU#<eQX4Yg}`Xj!(Naf8N98Z&sS2Hkod+_lfqH`K1%VZ#D{
z+Q0!L23MNT3YF$A^@a=^HLC2JI%V-!DBGa-fN_;~{`RWB`x$oSJMjg(_P3v5tCok4
z8#{Qw$YG;S?$N#1fJuYL_U|@e+`yq7nv^x@I&j>P14gv2eCawJ)+?*i`+(M28_O!k
zeywLUSW6$eU+ZQzu3uK~@SeT*Ei7%y8lE&@;3<Pg4ce;lkTE9@7&KtqfFUDBPq3eJ
z<FckF4I4FJ?4+YcjUL;3^q|45Yg@ieS(9O-#*81gZ>6>G@4lMGqefT0&al%5j2kw3
zRN<92Eo)l&6Qm@zC~H{xt60_3e88CgmGkKFV+RiIKVtm2?Y6hKs7y~7JnZD5vHRA3
z>tFx=TQ7WRzkTa`xxf3?cT4-$cl%$zb^8VASNH{}9REM{r5C=l-@bId+uwcZozlMa
zPXGUxUi^3Z6TknRUii*_`_g~=ZX29DaPqKzNBprrH_F!jS+VZ#;41e2&ObJ){+x;Y
zv2jGtgZp;c&HhyQzv7RL&CAw)M`aC$b{f~C`{6Ab>@xB6?!$K7s&3_<)Mf3<)~;m@
z29Fvwx!=GRP1gPyzV^3i-L8WMmF-csE?d@E|CDc0w)Sto%0B?x)UQ&i%3Cz6`g?Mx
z;lsx5G<f2e(PPJTxTH>_Y_r<k8uZ<J@<B(OeBfDi9(?$WWb#vEDn9JIW@W!+FH}st
zylw8)shd`ua@vZON7rhZd$si?$$DRYRI&HaJuB{hW<_%U_s?|sQ@>X$?pfZxqF4WV
zndFd{l7-u^T6x69&nFvy`g+A~KZT0jzt1GQzWz+b$ycvQKAlr9GkMA>6&s$jYsJcE
zdnc<;=$g4WnObq_e%mCcPrajJMdt?Pr*0IIW@UA9mmIoupD(|!om;;1M&%p7H+!FL
zx2~vIJgRB#+T61h$*N~7cAwWc^WP4~t!#B_(`3&TYbr)=`EdCwPYg)r9M`JigVU}k
zKXuCI$tRWXxOuCkD>q!(CG*(_O>>>EK0Eh)%kqi_zc$ES_x6UF3Ej`BNZxH)@$KS#
zQnqv7ir>DGp+}58scYZLZ=~++zvSM}yq;{(^@j&upSefo^t~R;?Xba;Wb=`AGap<s
zBlF@mi!-}tFI?Gslfe}Y4%#krYR~5?y4G8kxvS#y<kxpDN^);(8!kTU%S`WnmsR|_
z+dp&jR^5=f>#V<4{H0UN-0ds=Rlf7{Lo!?c>8_-~lu@~3+qVeAo9(=^|D(<G3&*`s
zG3%9ma%1n>B6s-xuauA6uU4k<$X#>C?tf)w`IJniW%6Ni+3TNIY<Tj-l^=zhDn@@X
zDYI;1+st;$2PU`fb#-QW*Nt*dwdkHZaKVY054wyjf1*y0+-3XL&iv48>(Jub@5@h}
z_(R2^i}%dD@nW0Y)w};vvCV78=2mR+PG;z$_jBX-8<G3^sTt+N_aB-3_Kh4mWRHXP
zIJ)v1*}l=w;pwT3GG~nK5cYg-^K7FtFAa^}IyOAA#hh@;&aJa8mfs&H?D=#!f5JZD
zq>sJ`^B#OO-0{E_p~0Wu2zM<!Ap7@ayJpvnUXs1%(Wk<{2k(~c(RpUL;+}&uTWr`o
zd(fLhviX;v56OZfv!4&SHT<jT!qB|giqPSv_Sx4u)yh`<tylKYjhBQwuXs7E*``5u
z@}hggLrYhNFAlycJaWNl*$c~tho3jPE0lM7Dx5!kqwKf!z7IFfzcZZGwQ+XJ$TeZX
z3oAnHZQ5rCe)VeT@<hMTrt#-tzen0+e|fSZ)cbq)>{A2Z57Rf;Iy>RhMPcsS^|Mo&
zte2hgY+3e$gO-Qu`&5LjCLJDr`$jq+e9UQ`4zK)1=1)2+bg17f|Lc;rVcN)%q2;%e
z!sDxV$^Yf6ee;L!Haov;&|YCk$K%2`)9U8`{n#mC!UYG1W9A%^f2i9&;m@DV2xokI
zc9=Nlx=^v#`0(QSGs7)Sw+MIFFVFAM;hd1a^ZfAjRo%ixPh1t6&ObC<|L5-Eru{Do
zD{ne7H2m(A{E&LX!mIz@HXL@$(czA^)5F4HJ;O&=_R6o>bnpB>%4UTFPO2A9e&x83
z-FSHZmfa@j=eHjocK!0`@ZFG8L!+OEh8LbbCqLl6@!_L)F3!KyuT9wVw8O)*$4w8%
z{-baB_N7zu!<U{I_O5+RSoCqn&?9qnXw&C{(0#8n!$Z>#3rn9qJbc}+cl9^2+n~O?
z>^Z6O8|glvUHDU%EyIM9R%UkGdFyc2@@@0|H(QoDc+}?=-<|Mgvh&6Ba+@6dK*f<q
zK9c$3%-3@}eb_VX`S`p{<89B)oUujieA$9ma>rfxT&8yBs$|R4r{-sc4f36zc)McB
z&eL+6PB<ao@60*jZ<{}z*<sP5-1;}K&eU4?T&7u%Df!v=Zx@!|J22n#zYX&b-`G67
z-{8*j)=%`wjNNTOxNpJgO#cb{hUb5t8XoCVE3|ran`G+3L&K_p)64f+zioK`wz|3X
zp4~8<@!m5PZ{`jTVd{68=jJa+KAW|3*!Zbs`M$RwAHK}h&orIfEBt)dmHCy!yXLpu
z_2_)r$=l}d`0!7m^_j<qLEAUW4SV{w>OV(L8$N2nQGF`Ek<EL}t=MM$12e<lygppL
zRqa*h)M=SLv*+^g-0f}iAOA2k|L-gRn}7f3tMivWa%k?=GscG7m(9ujXVCrO!;8D*
zd*0n9`_=qrq08H|@(ot)7+SS>C4Bhyl>AXGt_f2{|0na|fo0hTKG`iZWaR$gyy;Ko
zI(0lI-+kU=`MRH8nEU5{l2v<8+b8o~n}xZV4_uQ!Z`!n6MeloaJD<HG_xAjT`8wBc
zziQR7^+W&3JLG?vc749lHyh>GeD;@c_Qb36drW;Qv;4HFtC~D_Oqe`$O7czn&GVmM
z@l)oG^(yi!fBtv)=8`LN%ieCA>GOT>%;Q~l54-JlS6KdfMSi{JFJxx!xH$jMo-gLl
zd-%=Frz0P!{yj2qzkQEB$o{UGu-%<u#iA?1%%59?WqW=WDq24r9+>-VIPk63p<(wU
zLvELM!wF}emzjC@xnXXud6<67t)bfnYr?|edxn$7-w;+UJ})$z*DjpC&kLCm!ygM@
zbe$CztT-hcb!iBH+47!{`Ab>$mIp5iotvK)dhOpnEIadGVcg$qWfyGtY?$5aws2^N
z6`}1j1H+!(#)Z8$njW55e0|vD-CM$^d)^fuSovsJ(|)7u$?NwI4WC;YPJFLr*z3wS
z!e7t-GE=efYhk1E$HG~cFAQ~ujtbAe)G{pIX;pZv^3RLwe|jox{n1}DFCTVs`1HZ6
zLht|lEgZP$$uNGWTf+RUJ_ubezdM|;<j`<`k5j9^k-bmuI`Y)9mEXu-uiY2^zRRnj
zQQz@l{UwiwnHxS6u7Bh9(D>|2!;OtD2`!(xHyrfjvEij(=ZC*{xjfvrd}X-q@3(}1
zo_0kT`su6TwL2~g<DNe!B(3)gz1u$@_IY-7Sb6p(VL{uA!<c*T3V&PjSvY2w>%xmy
z-xWrjbwk)~#3Nx+$EU;Mr4NVo`{Y8$9TtUmx-JOsj-3^*Dq9k^`{;pi$l!;=sLSpN
zukU$hSo6_S;i6{Og@ejhgrg5XGjyA{I!xW}gs@?o$HIcS&xFC#D#BmizBg=r{>c2M
zD?SWcUG#2PJZMdLY>WNFlWp$^KmT%n7}xCUFu3k*VZ}}Fg|_vc3Y%o}q3ad1!#S(x
zSAQd?4?n0|kA9Wk$Uk3tFZ1XIH&nd3^VOLnj;fW}aL;zRk3L$STlHF-Fz@z@!jZRJ
zUH;j^ahbVm>g9X%%;b+h<??XViw(j%yVhBG_q?5QuQVH;*?!SOnfXT_o}1OJTmGYF
z<@xIyf0n#E_>BCp3vSFzI(=e(LeuRl?(EVbKk=ph6$?5gnW=k>4t2K8uYC8K|0ECY
zG(WTWyvCu=Fa0x%nzRoe9y%v?{NtU&mIn>a|KsdXaq>>*=0=_Nc~bYS*D^;BsUNz|
z_*-ty!P{m|xH`A8>xxTr-4-?txoz|1o1Xnd{y#HvnR;)u31<%eu*+@Z+T|{8)jS;4
zXWMYZjDGny=3JSZ*RaXTT~_a#TmQP_!W&QY%xv_{zsjrsu9?_x-`#svej`2G?h@Yn
z_>0^b|J^OW_l(h*k8?Bg*PhxfeAVE9+-7e!zrXii8|9Cj`b%cSEwgi*Po9?hanSHk
z{=zZ&O;-2Hv^Zg#+|k=i&4+)k$h<mqdZzZ--SaztIwyDGK`p|TLypW3d*<w9`0h<J
zS1nnUyLZ}z+{>$4<UbzyMrPwX+vWD(^NEVKs~hEyeR`AJM=wuH{?)2+enF>hnRkYD
z4Eb|!&c743$$k9zH@Q}8#^ly(eoE%63mb=n20oN|=E^5?Q#W}wlbf|ke#CP(=Q_W(
zU06A2r~IGKoKUfHWLemz^IqZY7M=6GZayH?t^ZnPLc5*9DP7-6zBy*^mAxPDm^<~q
z!}2HAdm_{D^2xbB-?x3{w{K+P#F1S`^sM|wj_#4oHmrYac6i?_vzyOvm;LzWp4k&m
z9iIJZ_ZivO-<g_y?Vbn1Q}+zYK2rPg?0#pRn|*GtzhpnyY-o0;37>|Mj~tb~`PGB7
z*WNiUoBwbBY||eHWS72iK=!bcH_0A5aA~&f19P)?KX7mM<1agAe>iMrcI3%>WWT>D
zlijNI%xu^BTV^|sZI@l|m=m-0n~u&lnz}`{!57D8znpPg_KUV%vn@AWmHla4Hv7zo
zqqD=l>6ESe*8bT!XI!3rbl*<d^?$fNd)bUP!}16B&rZ7Zv254F56b?hO{?rCYX)R5
z8**y)h3~J*-rfF+?7|)wWhY!VBzx};H)p3WotB+HY2)nvlZIpme|~QEledn`ZhP)F
z+26jAaXrWFI(}5;H}duBQ^K=-r|0k8a#6T;vr|K@dq#yD_Bb<ayzI(w^ij*g!hekl
zqgGY^nQ+kg;hRfmSN`XT%R;vcXM}cNmWPgqj}Bj6cS`v1g&V^Y9VdrLt1k@q&b=V)
zJa1yydde+fkEdpbg~wbIei$_^+_31{aQO>k!t`y=2_5HO8#W$zdbp|13E{A2=Y)x0
zT@vmaeqtDN!KLA{2WE!a-%k&l9dvb=Tkotea>uFR*gu~i?mS~^c<{FK!*&0j8eVRG
zb$D$=zi{h=XM{c5FAg8h86G+>t^70N<(Z+?Cf9`RwwxLItUon;b<>>i;)=_|g0rs;
z51)HpnA`iD@bS;5g_-Bg4xbG^FMsoqlS7A%nl<d!py&SGj~;u_fsO3HTC-DN2X-3N
zbMI3QZ1n5e)1jID188!O?uYaoabUelTed^XN@ksZQ5{%s_|?BA9Xd9uXT3-D>bd(d
zM;zF$c2#SwTHt1Dcd$dtMzyQn<M3{~9^G4Rta`id{dyjD${q(cB8_|Wp%Z!!K3e$g
z8r7+6`Q3kwd0;b=zx^aFD(|cOSq6=mwC8^N+Rt)U{<q&7lX~_(qO<+^G4<T*!Y%b4
z3*+CvF-#hJc{u)`H-+^!z96*fwK8-+>e_J9E;GY`>t7Bpe>gAPd)gymRGs-@*76yl
zS>wNkZm+Bgua3VY+<)uM;hV?jgl8_kIrQjzf7t1wE5g<XE(}{PxiY-@!42W%<F5#B
z9<n0LICf3gw$rSz<?LBu+ADLyz}5@G;>!O#dr`AnL;d$J3$xZN3Qz2_I9#>)l5kM3
zx#5fYmxRxko*O3ayEuGM@A`1ffj5PXH@hl)(sX|KwtP;QHD^)ScgveYpYw8I`2BP9
zhgbf6Ib`<SF!h*u;Xj`&4qY4E9FADIG}P}@`M2zM=ZB46ekeS7#+)#q-i@Klar47R
zOKz_IJLae{6MFQpf6v^t`Cj4M0gEzUw74dJz$KaNqzgx``ttm%^N-9wDE#Zc*Mv;l
z&%*F|--P?W-70)J{>%KgmtGN09B_U9s7vOD8<(B4>ezeE%^&&cSK)}8%JT;t)qB+~
z4-E_r)_*uZW$A$YzJrcg_3NXP!&TeW$xnH4O6Khy-U>sfmu1`C)iM8G_Pp%)`!2~J
z`F<uB?r4&|wb_D9`N=zk?e@Mkw5vNaWUo9U`?r6+pPAcdZg}XuS3=oqkAyq+n4iCH
zYVB<OleWqqeA8{&lP1m0fBVzkp~(?<hTOCr!+*BeBirY^Q&ye3$#vnC$F8b4q33$x
zv!@%by5o$Ft1232!;l3F@*OX3ntgBI@@)2$o%546Yq09K-y=utJ9v-N_p1CxmN#e=
ze%+>7{-ge_!w<W(4i8Um5U%Z4KYX!4i;zFHL+IXXzwlmzR^gCif6cu6Q`7Lpi5rFY
zhHMbt*sXCmyR1%leuKK<;d8bLEgq;JR=u=wxO(ztVc`|+!het4Fl5fDADS+$9gh5^
zZTMiDmf^0l4MO9sHwlk*Z5e)CZ`07HbK|gAizcDvcN>N8{?s&laL8uih6`JULy|V3
z^$kB{&Reu$_#`w5vwz$=oPPU;VTUEZX7)a7vyg4rD2$%cKI}SwgD`t><$nU0S2uk3
z&ERmz-!=;Cuh=4d-2d0i{a=5XY1g$y_~h=*!m6(ug~zY2AFgb_Q<ylrR_J$c({RM<
z=J{uqY+C($q{psfPVZ#@>Amr7S0-<?zCAbT#yu<l_C0as-7{X!)a{bZzj0#c@X!Mn
zg@2d7m8muNgo+(cS(Us0(oOPnergx~eAiiF`%Av8=v97K#W|0L&|`;|nMaSmJy&Ph
z^|@XRo8+%;JSlf#tvdNDubY+WP(D3>LF4^0xi9MHx2``U(=^Pg_-@d&@bl3dC%5kX
zQs#h*pUQmpWu36&6ZON5LmPwxx^&9F_2Q~9d7s1bH}xHsIrFTBxjP>Gapjk*-$?4M
zT#{MczHjc!c86D7H~PLzS+{2@u05n*=J8A}bNR&&=eKJ#BI$GM7MX{q-J7}hf(H3s
zt8dDDaN_vPnr=h#Z(Md+ZlkB)Naox$BQvFU`!Hhkh~$@l%&z|T%&x;bjhcL9<u`Kq
z=AFZ+&a3l%#&!!|?A9tAc<S&lA)m>AzQOMK_SYr(CzrJjmw&WVIOg_E@{_yl7-r|U
z39Y^g`4&fP5SA=y6R!L3rs3fq8--2Y>l)77cH8jOwANwA^5^r9R{m@2fm+SOpMPo<
zo?E?5sGIE+wphAjNWLEx7Qa|Od~?sA@<Y4S37>4;BD~RUyRg&8ox^p1+Af?tZM*!Y
zT|4BH+cpe`jVlXp-_<3I@4I)tU(!DR$;|D-VSnB$oY{Qqu+=VI!aeI9pYJt#lThoI
zWAn>5-7Z|zWYe(0^c}+D*E@#Wo@kKY<&f>eOP#xg&92`h{A-VvVfXcu(7xABVY?=~
zge$l07#9C)K=tpD(+}-_$bqL;ej~L$emQeppI4ICHk`9^%_V(vj~v!L)AsdM<zGE=
zLDFdF!;-($t)2Uz?b8+Wf4IKlhnY96Y|-k1WOa|0ne7_9RxzT{UCGUVzA88Q&I@zR
zX1B|<*tJKd>G`8`KQDc#qSilOy6@%BZ%W!dcF_ab2mfAi`rh9q-G(pC4Zq@`%q4e?
z&eXZ}^_4fw{`)>-HhU~Nzrk1K=XN|Hcl+btBtPcQOJ;x5Ff-x#(<)AU`HPj!H>;a_
zu5tU^ypIMX^S5lCEZpkYisgs4%^mvX=lhH;YnE#@;M$58o>;RozkH+2m}j?6-k7&6
z_g0$@6$2N3o$UMCwA>c=H_1Kv>)*@U)minxl3jMsH9lc<X2%)-O<o<eIJw}-7b-ej
zTBlL%!hfH5@Q}ks4LQ`llgj^3)&EPL{QvTE$am8H$V0lGZ2zX2aM@<bv-dSmhClga
zdHZa`<ba>*Bu!o@OP(9uAi4J+-<Ib;SU*|3@TKy@XZ)wUPpyy3NA_u${At#&<pUc2
zSiW0}Cdu|~ekt!h@!j%eU*Azaw^{w9`IMH)$>060{Mm0lEU*8_dP$$Zv`KoDeO7+X
z@^8z3*`ikR#yho=k$bgD*6h?UNjfx7-uz30<n;qTE#Khy@5^h?Y>;%`qG@v3*_$R;
zegBX06F+X2JTtaQa%{h^%Xhl0PV$dKo-H4IOS7a;)79nYz1lc=@3Hlg75z3$jz4F^
z<b^ArEq|p&vt*mCTP0iU&?;H*;<EDfUu}{+Qfrgs*y|f7*DPwDw42&I>AZ8p<gzcD
zB+H&EOTPH(*K+wzdL7<p^uhL>to?5Pr|<ZG`E~h!P^Ri<mhYtBguc5^7+m?Cw98(X
zoI3ob<feCTPu`k4H<{9VLGtoxbCY|UEJ;=$|6tOs_0r^y)Bc*AzRSGisJ9j+yR=)G
z)at(|d2PsL$v!QwO`aGxGdZu*lH{mP3z9Zx-jcK)a!oSnmphX&x7?jv-El#3%brV<
z*<0S795L<I<e55ilKZZ>C>fT!HTmZDxk;;G^OEt)?o4{Vvn;tOcX{&R9``4Um(EQ#
z>UUf6X`TC%9iO^7IpM2W$)m5&O|BWgAi4dAtCBr8S(t43(Y)ly`)*8XT`(_M@aW29
z$XnBr<_#ZB+P=6jX?M;;$t_c^OPaO0A!+~A70Hwqw<j0=?XStO@mD5?G`%J{?Ye7{
zSI@XOIj+URWO|1i68TO>cH4VYr^C{JpV)WE6C%Hts=nhQzviWM>rC?)@3j~g#OM90
z*_`^wcXGspzT*e)R{5QD9yU5@JfVH^_VR8?=FuTZiy^a<Gk)xxlwI97nRDMo$w5ty
zNiP26qNHu3U6b|RKPLI>24j-5wmvqwaKYfD!#AUnvvxc)nf3fN$!BAxCb#sPmfZZ}
z3CWKS_fKAUe|l2y`WeYTdW7VGy=NtZx40-7^v1Yk$*Gqn*MBl7Iqu~d$=pK^N#5?4
zNp@K|Ch2?21<7GM^-sR-GdOvy&k;$dhG!?coxD*pamdu9N87PU=h-8YYyUkcIdaUD
z<maC*O4e*TF}Z5}3CRURPfu3-I6bL-!T!llCk#r?e*OI9%FBl)gWfzL`Qg=blNtBS
zOUm!cCf95+EV=vO)03|so{_YAerR(3q9c+oTAq+}*rxKY9s8G0+W$hM>YsI?!?iaw
zZZxYw)n8Ele;9G#SvNE;{OirWdOhqQ8oxyBhH#4T__PNf9yEA%pG8+5jtr>X>S3nC
zqtC~Blq0V>)&B^uUA(8};qWQq!{brkNptXU#d`44O$PKlUFhUN{2;vdYY($W&7#p`
zI}bi~5U<yD*V%G@hbt(BJDKtNo%_k^9-FlXT{-5MW}NDU?e`o$^}@x_bH#eq%Zy)l
zo6{ce*PLqbplQs8%sx{}Q@?gHlc%2@9Ykjb)emRrkNW&<Uiyn^>MPZ+x^~k67u#c5
zINmRo_nP<6@xR>ZGrpUhckq6HH#`1VKIZX0cJ3p?UK1UUp+4FHPrqjHp@C$)7oD8?
zycf-9d{%enSVlFvxf8$gXo_Cfoeu8tTC7Jin)5t6o$O@T{T=A=-sg9GiZ;idST{cH
zP2<Re_!Q~!o*3^v*277g$*9lY?|03p=I_v*41V^sdt+Jk>P#mYkUP-HD55En1GNth
zjA?Y4M^DVFIx{|xru%MokPf_l*G@mvp-2zjQae6H`t)6NR&QEAJh`+?>@MYW)=qds
zc;(<#W3CFU{qPxb9(|S^UF_t%pWW+zrw>0n{mPR?^Qc~(H5cp0t9@|z(~xfbX}j`t
z!GUxr>TEt9?NE-c7{bvR+m%zF@jS{iD>BnX&LciU4jJ3MpB;^i-|>O?Z0DdUhX$f4
z>Wt6OczsmUnY?DuRYO<J_v42r1J7Qp!)v;er=MPSbTaJfg9Ck5_n5~xJ9ILWi(yqj
zGGswI6#Z<w9r~H8$h9A;!E*;%O;P(b<9Y4@YwAt&X+N`hIn0W&E;u^C81K7vS3f*m
zpm{hkKO8=fu^!LWq{F`hnOK*4neln#ebt9Y??8tGJ<ksMesb`j_v16(&oPdk7;3&)
z)@$q_J=|fu9o_N7_$sq}kR#)FI^c<_pBaq|NH&H(%dXzotaovb$5<C0G<HQl+ioZJ
z9&iQ6x}V$;^LUOO<UZSDkKTk%#$%dpydK@tX1Z0U1I~~~HFV{)&+F<_E!G|D!3Wak
zF|8Y(ydoWNdcSJSAbt?u&^V5ty+5{FmYgD9kUQ{uFFfdT>Q|4=cF=XE0}YIM;P4bf
zG|Skr9S(#Cl{ZdLERP?JogBNO&gRqI&$h#*dHr4LQ%!sDC>OiSbL8mth@W0|^`UtV
zFKD{=qJjTwM=ZyE+Rgons%ys2+<_ldAHAN#iylKf+ylnE^s7hnnt=z&D58<`n(cUE
z8XO)_b98$ot6rVcy67RVKA-m<vYM$0hhM$i#T{UpC&qh@4(&FN_rWR8tXcZ->+XH(
zVFt<h47>Ss)|{W!S8PTz<j@5gZ!=hoFSvgH`<aaIQ9m>HfMj*onNB!EJMiQ|H1sO7
z^TXi<eFh)h=<MXwm&V2TSfB4AR}-&#=+V4?Z@=SJWX8)K#@m4}Z0r8IDCcutL#L13
zd~mT@dsHW*h_1+t&vt)ensFRve2RDs)yJ-0)tSAI-B1sH?L$XnH&kERjNj++ql56E
z@;1|h4&nnnue+bMSM%`ZPn*#Sj%uIxd!1bDUC5I0UcaaL=;00!KRP?T@VYCfJ<Oo`
z==GfUs&1N|*iIhJ@8seA9^>&CdL7O4w%hT1fvx_%>OJ01kNV*7dQ>m>f$CKsoyzG<
z4$jaHIdl*$rlT3!!NctLD%08z`qe`Y9~!8-&$Guo^r6+H53fh=p#xN(%^du;tGC#W
z55!BCqH3`j&d?5>bSM{_@qy;C6Wa?);nQ>uUeI`E^%djM6m7Pn9n8L;9l!U%E9$I%
z_)?u@ykB{**{(;u#qP5VUiEpNZait3Qa;Vo!Ch$V+NB&h#bVi*MwVXn=)KDOIn9^G
z*CekV-@|T*&rnZn_Z)sY{0<MI8`1^Bv1^7|HM-!)gJkf5>W3r4jz^I`IL#E}ifP;j
z>K)`j?$h1pbZ3sCcG%3Wv*p;)>0<Zjb#}0(eddpOxvx|oy7u^)J%+~F@$aBJ@1p2u
z-RY|;UfazKnx6+QhInHAXyowN&J5x~Ba2>YC#T3vhwgBS%--jD)9t{6o->{Y4KHZC
zKdNb7ecof5a(I0nkMcT`qYusJ;EVa_BC9)jG>|^^!r@W0*+2NTgG`J=(;j@<g$~EA
zd2-4zYmOQ8UGRo>&~+}wRRz~(HK()hP|apL=HcL1L^FifSvlpI4ej7F<S?VbgK0WE
zJ`moc>Bjj79z?g@4!dF6!Gq2o!!(ca+@Yv5S&!TU&kh=2YBt^bVtXl$d+4hwUHgIN
zJMem4eO^o3>GJpbu3|e`?(m)L=*7B<dHp@UhphL(b3eQK=<-MgFS>T%fs5@vhZi1H
zUO76Avx5)b?*&)k6U}pE;nl~ih#$^!%pSE<HJf#(LpeOk;VXt|n)c9bUOO=juHdNl
z6!X&yY8Fm=;nF(Edra%_J+T~jf<B|&u{?f!u^!FgBc~c19qRQOIqzjh2V=bUGpmm|
zP2-)o15C@oYmRQRXv#Ay+RRQC4pd%y$>GyoGoHuqJ^0e@fG5YUeRP28(VWhB6=Sn@
znXVrC;1$t8ud$<p%G<0*_t>miay9Xh11+mL-Id1=a%URi1GQH(=pdTycHljtRhd$J
zXds=oGt(R6RP(y+cGRPt1+`jF^Tl|2K|J)sbBEvYf%vq?YjmhbbIgi(m9ts9i_PRg
z?eRJFsK$NhXnv>L^X&A1@P@@Ww1TVfNd`^3ifQ;kpNnO^*LIHjm7`ZVoymb-^StUd
zt8TOI=<r}#2Rf)e<(LgQ%&Pg>yxvDXO~a4Q4r(5cNAv1Kh7QFvA0E2#>8`!#ig-af
zJ)$exYzJ>)TX*+&;a8rSyhn79j$){q_R#@)pXY7oFoVjI1HGoZ&Fa%Wo$-M_!w%w8
zv{?^cLypeIvEzkPo-BwLkMhih>hm*tDSw&|Uf)4y)wvrkhMx0XrgLI_rYWzx@;cK8
znr7#ZVj;Ee{dAy#@P<65#pW2NJ*sO5yhpO$o5q*Q$8yT)?7Px-GN#)Bbylv*Bp+yo
zI%82@Ih)bQ#q>0eY?^L-%mWugx-@G(4w<ywcs%6TV;UT&UN}(ujI)E^V?ix^Y7QSd
zJ7_$9=9*}DK>Fz@hG?3#86JewJ(fw+jpu02IJ)6M{N4lab1_~y{GQ`JbawOUOb$%b
zl((4!uV|X?_&rx__x<dkW|gy9HJdrH*?aN8TUKZ7f>%UWG~JFzIP$vNY$vA0dTQdO
zOY?B#6>Zj|UgPP(!w%v}+l`ND@M!GZ1Hyyw{$AB>Rz0Q_9KZLG^Qaw~#fR=u^|YA`
zy|&|3PI;g4exD<&KDbzy=3_IQB7Mfu3FmimX}a=w=>^r3)=yTwa9~X|?(`XWI@s~C
z^M3HUYZkwvW|+}6ODBled&qhnpXPNYr#|KIDsl&i#;)i!+heB~AM1$u;qZgp=Xc|k
zV>aY4gYaOChf`$MoN@Y?=6!IUXD5$O(PmD}XPWQP9i1$i??i_O(|GMwFFg21@@YMu
z_uc$VdKWXA&(N91`#e30F%Mj^UNlfU(>UYp;4N(H{@z0a)uUO{dEosHuN`<4(eZoD
zcC^A&{fQUd@5<{;XLVCyf~N=cKDt11>VpHl*YhzQkD<=R?!kwLoeog%Q%?EVOs_}n
z@N=mi^K-~5YF@p{Yo6KbX<6<fr@Lm-c+JITeGl#MUNn#7)o&hnX0K~cDKC0j2Rz7~
zAbcA7cTpc5cudoo9Yj+!&5m)LQo8xnPY#~E?szoEtjMfc<COPZ=!)J`s*kMq#d?(U
z??sRDu{p+Zx9_JD9;8EcolEt3ul9P)c7MFbbU5{=&GZ%1)B1dd9lySd&gdZTfCu!t
z?P#F)C|_k>`#~06vDC~Rz5|{-dMRFYvW9ki2fNqUeODT<KAp{P=a1flU$LgM`TSFO
zi|WsquKm2T`bgtr$ID(SgHDbeg!gDVTx>=I)l(I${NN5n)tC*{qg^`Vhx55odh8B5
z6m=$}95WhdydL8@-lLj%&_U&x4ei7{+E;8Q8}p=b@L=IBs^7zSuc;^Po#8#wrM;d@
z+qH|Cp0teD$r;-5xdL1L^Q#9<Ip5D-%u8PHR!;e1eX)#k%!<rucf@$lS%)5UICeuG
z(~8ZilUL4W4!UA&RzJFN%!WMhF-^I&PI!9QWBtBQ_p~|I$6a~{9Da~quPd)!_%x))
zbbXXhn`3_NCIi;Qi-(MM#W?eGd^Sy^M|JIB#>bA|-xJf7BL}Cb8Z-SKEr;ii%-W+l
z?K0kudYKDK_1!Vvb7X4T>3y2_Gj|#KqZ+z$_|a_lIvVIbo=?;9dBhKz&f__DLp}IC
z;_<xgcHj$J;WMUrA0BeCT{&h$oh{F<UFwT@)T?u>i#(lpKy-RyNY-nfr_=MXoabV@
z?_n=?51REcYfd@tL}%A5GdcAzlgGoJrh7iN(?O?s;M5Nf;#aTE_~_6bA02o+@Aotx
z-T3{kJRRNxkJk`Sn&x@+lUI-G%>F**nL+RMJH9mJoj~*1VUMA4o-d@TKh;ys7ACT`
z>5PwTF~qAKbdf`22bC|?gBPE6D2ER{hTfyQc9HcQJ2`gzrO^9z*V%gP#QF-#x}Rx2
z-$M$&?Rd}>@zoURqf>L*%ZyKVpV2)w*W}Jv4vxGcvw3u8FR<%=cWBy+Pf>mFaO{fo
z;Q`IV9P_~8V^2f%#pW1iUGRmedPh^<d+~tYi{EsfVjlGu^U=k<y8Br>@hj)=(Y)8l
zfu+1@K79}M_?g|%4)^Iy7nr80ZXP>nobfybXZ0t%W_7N17AEz3A3Gkh@a&3sLDQJY
z`5lk;c&=DhbKd8B)T<ir<aIp0S9kT$1Jb8Evmr<47>BM|<us!n<6}Pc$7VP~?bBH`
zoxMjjo$<jL>M@<eOh$J+hF*umLoUXn(V-dD$fo(=LG|lQC!C?4m`*2Xe(%%0m|oKk
z-^V*@Uhjbi(byH!y2z*wXL)8&Ip%`v_umg0kK_!Qy@yVC?<1>71}-hDK0L~49$tOu
zhI(}Ob1VZ#2N`(X@qnc~s%sCk^>~lpxl6rpc-cLwZZpU8eoynkE0P7#Z0D$^v+3+0
z88naP(^G8MPCxq&dK8OgEU#Ye^RxE&Tq#Yv^gf-{qqBCW&AbnN<nhC^qiYV2*VuiQ
zT~YgDGaTr%#@jJo54$3>`E2I#Ie7e_`sjdD4>PD9<KRK<QeAU+$f!?e%_y(4_xK&J
zp&gLf>+ptl@PlxgW3CFU&A`QSzJnaR;vdmscflz#bC2zwQ;pfbi{{9~DUydv+v(RX
zyo&fdlJj2A$9B)rVZ3U3r)qfM6n&R^>GOVgMRIVODW<94&#{hDU1aDoR8I5E9%EVU
zK!*ckJe*-EA38{u9i$5#G~EtZ*s6DU?ZE@aG;(+hy$_F~pLI{`Qjee6xj)u{N0FJF
z?fSrLAG6P@H`W11Uj58;;srH>7c7<`?~y)ub~-_H(EDo2n~zRVvwl`jRj~3yJ?J2s
zp>l<-nk%(yo*pu2@Vdj{^{8H(*%g_KWmWS%nrFt7wp$+>bFm$dp&h)2`V`dP>txic
z9kHC}*g^8_hV*-mUG><k92rC7{YmrU^E$gn{GjO^ytczDqQ}r@d`|CR2I*t>NSE<{
z#EW11G_Nxrxc>#YFP8QFx-+Mt_1W>g1-AOLluk!=qWaf4rs4DV<Bi>?oaSR4+Jjdy
zmZ4vL%xL7`74g8SH>N2U^Qx|$@QS9h>ug-?D9=ouU3022t8TOBwMVts>^ZvO{|M^4
zST1(p!BQE$Kh{THHQ$Y<U4EuV`Lvw!nv2bNLEa7YJUbYBA2bk;?rAgL|1)Ua<o!Ly
zb9DBc=9#@;_q5r1$#aLI=J0~5`8n2!$0L0pS$xKG&}>JCW5<gJ-Sg~eIr8em>pOL4
z_Fmm%-Ecn7{V^S{YRo>zt{J?%n|jbZ2d^3JWd5VN_R_)KAiSb#%pg8?(0C3W&zbHy
z^~N+Z>QjzcQD<_>+05~J+B?MjX&jxP`LtJa%-*AZdSaaByp9GB>YaE%_1LUCxl$ZD
zNH=-V^w<;g<3rP3Iqmj*EQ1F$kIuRml<H5_n8_+uC#rv5bjy(i(Lg*gq+7E-rylh&
zdo1OrKh38+v(K>G-P{kS8900~^nNmm%(1)RK>D~#cV_z7eHLAL-xu@Hr${c=1qYI2
zH;m2Ptr(kqUi;H}V;<$0LA?V`5uN)?^IVz+@BQ?{YiCSDSB=?g@O1MIF`sJWVi@zq
z`pJ4NZP$0gQ>-J+Pu7qF$8M-Pd(7uEF^}iyh6m}=-OuXrGhRbGF~n1F6h7hblZ9tj
zEH;~_haM1(9W<WVqiW2CcFYTsD=^i(-(wlLSQi?IhhF1VgU6Sq$9Q^FOXJkTT_9R4
zs~(%};4f^y|9Q}hAz4N5M^oN7c63EFP&J#4FNI`_VWFkE3oktPup4?#Gdh#;{#b{4
zV}3H)j}KH2Gl&N?-VVE>pV<qEbw5o*SA<v8Bs?71n(UhOv*uM(US~Xtrt8kEIq&hB
z?&OQ1?^7>bctG<o7p8STeFyuxuIisvdAdCp>wr_VobOPb8K3TOhMbtLoXvLN*b8jo
z6HYPauc@y0={?H-kuL3sy%)Wpc59ZI4)v3P!>haI(0wlEp#v?3-czcddp(j<#G{<e
z@St+)HJ!)vWK{QkXddZ;k9FZmL!YI?`|%m-fmcpv)ivvRcJ)|~^08Sx+^ZcrtFB#i
zpr;`j?~mPqhYYB^&Z--)2Q7x?gV)(OPHfhU=Ex}G)gG_wuCr$7F`d~X8Xc;uR*c7I
z9)IA-t5>yH4xJ1h<>As0uVL&VhtGC=s=+DZRV1Sr%NSSekcoMUWqpo44XvL(Mdo6<
z?@W7Fx)hmX8SYH;r17zwdD9;5rVk%HsCtY`%c++R<I?=f>#RMR_nm0?+3E5a)8R@X
zcWb9*V#j;f@y5E;!yNO)I*ikd&Z=n^4;;Q2dM=jrJ?7!0`QbtDr^D;!Q;l7Hu^CR$
z-$|FE&YESW1N6M#V?I0{x!ZWoAMt2jbK2!+y$cQW9Wigr14oY`oTBG-x0yr6cAbmq
z_!RNe6T|=2Lszl;yr#R&+ELi5e_p)a0}raMoc7^~AwJcZt<N9jxX+`{YX*&8vVPZ$
zdYD1_bf*i=V<|6w^Tp-@`}<!j{A9e3U6FV3S$Mk8;X&2$z|{o3hmKgkdTq9YFAed4
z_-wahyJBIh=DkMV=h(@6)EqM&cI|*myFZrodG+`nG*GjiL-R<d@o37?qn!GbXC|Ya
zepU}TJoGE722TeV<Ke)VH>Mc}ugJ_hYoBUf*WG-06_xjX_L}(3%b}B;@t#u+oxCDB
zJepH2ro+*PpANsP-+R!=_)d03-=SGF{Oq9eaG+^6^Q3uIX9j)7csns9qgZfP`+b%k
zc+KkUdo-t6X7$tKIlQXtj9-0ldOw*MmdetnK6>Erc;0pn8W`g}XFDB=ex?(Q<vi!T
zzSI16)W;60M&2|Ix@yWPPsUJr{K_jwPBY#c^QfOb<$MPkUhPDKQ}llAO`FNkn}+1Q
z&i(NC;7je6Bg@QA2fNqdxq}_lymB_PGlOIl(a6N^Qx87nw2v7deemq)AiD2W-OsxF
zUhRu%WMc^DbMS^d>hU_7p&j(Xw(gDw;sHJHck>ws?@@L2!5iu!52qP4kKXGu_|2!Y
z=5)s65s#vIyw7v&ioPRlr`vR9kD6un9^Gx`p_g5Ks_BfEyTBN)eO_nBLyt#%@TL6b
zBctf^X!z66-{*7a%F~6WyK?Y`cDx4XyQ|DaKJe40=x4m#MJ+s-#-oGyd|w)GIlRp3
zMXL#?o?>0RtD<JP6CI5m^geh)w89ksR6iM<?0D#d#|N)FoO+q*^GHT}@W5$@`qhU=
zb@DL|zjk<knx;OT@zc${@UdO<=!!bi8$&qt+sui*gK5gMgJ^VvrrYtma%hHWPgRNQ
zQLopvle_S<*A#shIr<b$vqQ$uRpQzYJTcTx)tR+NXY?2<$86cy3}?u!UgiC)K0mX^
zGHDw3YsS1B<<*N0qNVM|(}frG8GJs2A05;@ocDT9teXs85FUhAMDwT~n@v{_Ga87`
z>+tHc*$x`0T$MpQs;M6yzwYKsJ9OajNDqA4?)jJ>&X8Gio->V8lMG&vJ`i3JEe*|!
zM$UHSn3eaO*U;%l_gL&sym&lvhe!4Kj+htDa`-_w5U(O$&sl~O^LWkgWZ*%)$2fL$
zMeXpj`gFzzqS?-2j-k(42G09cqdSd5_Z@VjgWg9kSQ8yjEW^E^_t<VHrpJ2W@Us_M
ze*f#7=JR)wS6;hy_8#tlrwd+DHD-`IVt(@|uU<4oo9)Ch%2%1(M=YcF`58aGT8Gzj
z@L)_wGfaD8xfrK;bU1cHI1tTtJ0No@Urqg0<?<2BrQHcnT;GWq#6w2!fde&z&vUwy
z^XRjFH@`pH%M9YBhutvd!3U}@#-V$pn~dL!`PJ+5mh%UX@yv9<!Lu9M@jN?-$MzWK
zb$lMp=MNruc15qTE1I99S)ILZJGyFVGj}NZnLb7C(O#d6X=ypl;(_x!ykW5??SAbe
z?>WEwJJCUO+x5V654(Aki}Bt=ulM3ZkL_q=LA<)BdDA?`^Jo^1oFa4V{xr>a9`4aR
zIS>yS#bO$H5HF~_&ZgVWgCCxq42Z5fUe&ahSrIQtAE=!=)1e$49(@-(NC%zp?CA6=
zuQR?FhX$%gXT1Y&F%FM)=%EuHRFBQ@iZ=6jzh;>6#?a^S#CYxVy4S1+E)BU0EF`Lb
zX21JRud^3J?xM@Qu{n(+&mHW={CGW*p#vSBJ%&DG9-s5O_t2p}W<_T5u^rCPKbGU*
zvz-}#%me4qXH2Ir&8s@I?_u}4-?<~^=Uu!8ugHv-J%+~FQE!3y{ik_2_`w)&96E@v
zm}XvdkUUz!QTT*QLpn6$XW!4RKKkh^=D~}HoviQmy5`V8vg{x{2ydvf>FnxNPBZG!
zInARyv!Oq5-cyYCnsqA29mP8F_$)o>eupQ=9qehk`qWE5NS>XX-|0{ut{Bn}(ocpy
z-Qm=W9z!_%il*72v#=FDmGd*ZA+z?tf%LK)GNX})2jLa{%&xtf_qzJfKyvDVGmjnJ
zneltX53jq;dhmc~w%Y+?GZ{SWRl&7cui;T%{ju3N{HnwGPW<q?YhHQv#(1yS#G@Hz
zkoQnDjl&GW8`6R1_hKG;Vp+JF<h`fVJE$JJhxY>UfbbxFwlk}jS&^9x2(M^!?6C|7
z-F9X}-F5aJud&C_I6d5BTv{(0=riz!c6<+h_=0QQPc%jC(%E}xg2x*}yr5+`<U!-n
zLFN2xJ16GXUVMh|is;JuSv}gr978zkVg_UV>hm-HLeuX*@uSql?>%(DE7EJ|d7txM
z-F2o1PJ4=RXdpf0jfcYn=XWydX9hJxk7_ojotOqkM{HM)JN+Ga;I$784v(U0#b(Xe
zj8_p4obJq^dF<d#+wmyc%+Z{2y2oa6pn34c@@YC=viR8P_ddUq!_TfgF;4w-g5J+g
zM$v1w+fiP*f?BPs#*9aMRI{0#Ic=vyQRi4Lt<!S;;Dt}?GhMwp$29Fr^TLDL<2kgn
zUi==(86P{IXZJn2Yp3`7JABS(z0R&Zu{-d2O?j_rC-0$%P6vB2kN3uQ@@Q%3eR@9{
z9391YH1jeSrs_|6@Td<BHy(J9jMq!$H1EB1rlH=YS$O5>(EIR#_`R15zSvF%#KR6M
zZyZN?n>p|vO^3q^2l^iMF_-di2S_(aUXd9OcY)ef%7d3qcAtY+ANMKZE0(7Nk7l$h
zrjzxEHx0d?J3(^n_&smC9`&X1+KJzD?AGBu%9WbQn$M2zIv3RRPw%yzCp}fIs8_p`
z#|?)M^g268&hMJX16K;I3lF_;%ImB?X4TVX?KMx#2cM?V0pe$`3F4{g9p*1}v`f9p
z^R9|`m19=TX5(Y1oX+Z}Q?aUS?FU{seDvwAochydy6I5VjQ6Q#v)AcSO=tXYF+U#F
z)X%KQOjdU|ML*jPXIVY)AR3t%ng^a)k=c7<yLs)Xrn~XF7q;r32OVCKP7uv!V!LLT
z)dy#t@F4eiO?A!VQyq@3G{4W_Cr?g&rDm_QgWSRHQFYa9_IsLF-`~&dG4vdFa<A%s
zw%v~RvV(ZoV`v;tRcVP{_4>Zped<T&9uN<RkA8Oipx4<!a<=<NJJ9f>f#{&}WK3f&
zOx3$;z5_43dbJN8ziM#aLnmH#e7eKYMFvza9_7e`X&y4@AiSb!v0XDUkLs59o*1W@
zv{`f7>1TFOe+FjLIB*_K_nhq<W<2nq^30l1U#S^gkxt`uj(N~QJnS)~7c`F^cCxD3
zj1KR8=*q*9sVQoQX5bZ7w^=pjG!K4{mQ&8p?D*Ifi_NALJH_6cTrm&t74yKUhfYIu
zW;E}|7vs}1@M%bw={n<A&St-pgZCcQ)dR0+bFt&QwNGd3NZVD@yL>kqJ>>lE`B)De
z*)*h!yFJna&kkzd-=Uh$WI?*s14pOdHS0a}6!U0Ceca<a@Z$yX#n5xbI?Nk8dXMSa
zfgjH6npF=u{OUu4Q%v*6JlaDJ#IGLXVkhP`pZayCgB+UQ@zI4(cg>)uapdS#Kbp^~
zhnYM`MtALFR%F(!&ZcwV4LQmco7Hc#?|>`Sfli;I*SJG@X3*cOyLKy2ujlBDp?aA?
z-)FoXdJ5aRdn}`z=IM!{`t%-VkZwAB4jx}D7vt1Vhxc)pNBkf<or*fgd|p?NY5JJP
z@jN@ap>dovU3r}?$8N|;<4jjyDL*|ipYKtx&SVvRHcg`k#23q_dGLaC7%HcEctzFe
zP#un5{CLny?V2Y8{x6-}N0u(I6i?p#-m9AS#k_De#k9L(clx{8J!)sHM>+4+U4I7d
zAgew&^~0%8JJNLJ@q=jWpx)tUJcei>n(Z8~c^)r5Mf0l89^>f6Q*1}0$7gs4e4zTt
z;6+Q@eFuK!m1B-!jHAcDm+m^#L5|&!2MxsId(@8yR4;QHlF>f%+VPtA=*}F=6x!DP
z8PojgWd=3FJ*L6?nH?nK(R4jA-E+3{Se99RaCGY)o5|8g4n+6aG(S9k&7;xHj+Y&b
zWxco9PLH7-^~Uxpllve8YR)+J!nE!ks_TqbvoYN`9=vHgyrO1`&8FG0tUqw{n$D~m
zIn`9x*?Z|!WTvm!9@C7o!@bO<_Nq|iqtts4!3X+#^?o!^GcgXG4)&Ng#;IR*Kilq)
zW|<A`fQ2po`vVV1&UXJ4>p{~zvq$aq8awZU*LXYdg>Bs(jg0PO(R619HHW_#XE_dj
z-EH=H<zim%XIC$GDblMPSvWfIvZH&y@_tV1&`$M`S1#to=TW_0v)zs&9{89BSIm>9
z!5iAqt^!l|ga`5ZU3t@ZlrJ`$rbqK>eC!?YYCg@E#?xV_9(e7B^IkkY5077UX7BNL
zs1FTJch7OBdYHYYJTrZU%xL7{@v!5A#}BU<^UxF1VqNMh)s4;_?6F?7Qr?(O9~wv}
zXgnGi)8JyL9je2Frg4Wy)tF-*)9m<8yl9Hd>M_m^Js=zy%b2D|vz}+CCx&o%4e10`
zQ=M6L`oNe6zxLx-M28~>#&qR$*7u+fqz@!VCgy`vFMh??Oa?Shu@m#bf#hwsqr7r4
z4X^rQb5-%$k2GC*{GPL2AKnSXuX+6Hfy1vm9R3)>`5e3HcKlvo3!h%I-H!6gspdVp
zSCy>&@H~4d)DE4=8ONN4>d_A6Ez4o14<G1tztf|B?TYc}9`SnQPUAV6HI7|%c#s|t
z9)zbWw!>M*4qj#u9yHz#yT^iB(3#b*96X$Lap<)j-lKZ)sfQU2G~R1)AYMhA?U2Qr
zwin#h{#aHy{EFP69CJ+LUCdKTr$>=INDru;c;MLaruD{rF^-;?mc|+HHQnjt-PEtM
z>SWNtm<LYL{2a2%nU=OIPZq!5l~0?=fH9wOcGOc~*5y>Und5mh(0t4w*%;z6)LDC&
z@qn>D_4=8eTw0I52Oh;(-e>$>?D%{K{od#Os{4%ZRIi_7yXIB@BlpC-{0yqm58~k+
zK;@a~QPduMz5^a4gAYUp)dv?t<6;kaGBw$G7sXg!IeN+HyQoG6R6n!&btV%-<6;k;
zWaulklLNh<o)~H-?VYqwJ2dNOGTKR2xwKjP(z@uwTMV_s=hEK6XUM^GA3HtxK+k)B
zO!pqW3yprXV#pn2K{{eO9#Fk{m)F%-lU_VNr@PL2pYg>GUhZJmjB4mHj*NPYW7pZ|
z@xaHtaNa}KbbpFz=0*3YJ*Ig*#?cq^(x+Oi1D!69nnBYH_r$cA56+|Z(B;uGJot5I
zHsmnJ(EE#dv=5(hHq+;Mc03;G(>ya88ReOaY2-oka>%18rfHhB8DDJnUiJ99RP(d;
z_}m}a=>d6nI$}H;s2-c?h|TKNe6bnL_xgUn<JUYM5RdJ4{9a%SJi6!n&V4oIeJ?q9
zeJ8r%Kr+R4&BnU5gBc{tZs_kqi+S<m(cSlGo;ikau}(Picpp0&yJqzL{ERP+*FK#!
zr&-<uos8#;WmKaFjy~m!Y4|~((>>-fF2-w4XYVHq4_Zbw?TF2#y!3jX-_yE%9v^(#
zZajA|YX%LD-FuZsGvs*P^V-jB9&#W#MKsNkjd5f(ryRWRP(G%qt~1?abcZv)f6!v6
z9o$9UYv|gev)5xg-Dw(k;$ts{bdmAs-w|CqmDAaK*v-RX294L5-MCVZcH)Htm5<HF
z+3}ikXdbJAYqQKCy|%|@y1dSgUJT7^$9v#FulwD6deGt6)6jgTDKe8OsO$QCMt5?G
zzEibg*_!0=q#^z2+|6#t!5hOEXF28lY`f>kprQMB@OvqLtOpLHQ_*X-^Wejys2)FC
zPC0r&G!Vbn*<(7Ib*N4!JU;a($BZAuuYIbaYhHD7sxy;~dEh|Jkc(lO58n5&8|qOW
zO;Kmd>CUWucueDgOY@;?pU=iL@1ZAlk7~ZFn1+|T*!2!Lk9gqyJ;tNOX0Pc^7dfwS
zcN%(sS`R+GPdinIr%QL8HN&h(UOCIhcJJjL5S?AIm}WliBZD7acQ|tFpzqL~jH1qT
z#Lze%Izi9t&TN==@Sw97%a|9R&SXICWL7^j=sT5XHnf9RQTZy9_;hDBB(EHN4Dpfk
zs2T6o-Os+qb~~Prad=eInJ(jMa(tg<v;#ecrMxj6jy`sfyA}QHcg><1SCeCYG9Jmt
zcyeg!RW3IBEFO64O5?moeVXHaN}=!b9q1r^?1r2)PIa5r=jSx9=G3G2!^g0g4-M43
zaqx=paAb<@Xqxr2??E?S=h#jbt=R50-;J)k&353x0$a_q<7JQK@x;2k7W2@_9bn9h
z<`FMwI=#g>ud$QWd(h}k+sP{81?lxWyxsw)eKC$M^(n`!SvW=R_J{}Gc0K4I8arsb
z&BYK+eL5G?g-_qBJ~TzLaC(<!;lY@nF7KfyjaMCyA~QY^-jJgjoT2eNy5osybkzj$
zr1dG!{hnh-k9DFc`dm!2u2PTh@%O8)cW5sjIQ99NJ$8@gwUdmZ>U8-$drU{uo>+gH
z?(_KQ;7)e0!+W3aWmliiqT$uM@Pg_ghvsv!oeVu7UUq!&it14xJYIGX-lOk8hmRqg
z_onThw>%xO8O?G!>mK8^OT9M7PMTkN?(wL7XmEa4-ZUQLV{=*_Kd3%>JZD}#svEC+
ztb?p-%;bFs8PMzG73qqh_RvKZKRdee%!)SKiTU9`e75sch1cfQ2k%im+Tmx*;RWgP
zUUWrf%@phOn!f`bKGyF!?p9O}UE0kIs)ruWX{UO0#^VtWNVmtBUW`KnWA`fOXTNKY
zYRcPent$-1gZS9JuO>QK^Xl=t`sf8!(^)(4g7^&W;6+zdy~@1SpO#TS9=NpK^WKkc
zsE_&dq-pTx^)vYx52xrm*wfIm{?G@HN6~xKi_bWn@xaGA)UUH<VzYKL`+nb-=A&Pc
znNICu_UQY)Zaa_mYYsk*(@wfTGO-Tz=uD<2oOw9Rip=KmGrJ*Au`bofYOm+m>GnH)
zba<UzbvTd?-I)z}=<t5^s)rmpS{jc|zoK^FgQG9TYlrG&=s;6s#>;MK2c8bFpjPYb
zpwAg!ldR^v-*@{?viLlr)2pbO=VSNK9n0ZIQ?Jfm*Bm}LcFiywa?<8vy7n-e-_O1S
z-Ovs@v!cy<G~;=%v73)OVu-GNp3^RTu`cD(I$|FBJ*IW=4j`TEKF5wPhMFxl>pRAJ
z;JA}6&$D~<xmX?!q=VhiI6dr&<lxMo#;K;W`k76)L$C5_v-ejOxDWaqUA30d&=qaw
zu@cqvju=nQV_Hr-$lz5CE{6EhG}Zmgu4pq4oqmT0$=i<CqxX8fSO;19+38^Ss5<?M
zI@3)C&GY^aba>6{j1H>C>^0j>(^G0UuX>nc=sB{+tHut;`^0$lsLmYArfK><KBqfA
zI7Qw^k^7V*gGQ&{;X$waPIS=Uqr7I}L7(G(<(X9@AM3`4=J!|@4~R#1n>pxU8edBH
zIomD6(b+h5P<_V1>rBpTy5mX1w7wYcJGjSqPFl|Nm|t@-kMC1YOjDh1koy&x)kCjp
zI&%j;vdSyROovBuie%u(=pMTtUGvOzC^E-9s_D!f#=$Ex(+R?Z^nk{zMo!Utbobe`
z9bU7%16WMMlZN!0Zin4tK`rR2F{3M*h7O|p9o{1ypy@it_E?AKG#7i97)OV{U%Qw=
zdeV?ik1;>@f_evj--8Fl=R3%y@#wK0IFEFJbm(q#O%54F%aQlIc6v`Nm*!V*nuoj9
z>+i&)sC|AWPbWFunaQdLPCcsAuN)cGG>@(v`B+9Zbh5f@FEd$oa*8_R_q~3nPkBGH
zr=fP3$3MK6&-)yE49TMT-SfNyyrFVFkEVQ#(;lzu&WzuXg9aMUtQg~qb$E@u^2{Lj
zd9Uv3frm3xuCP`AJZK)tE6<EZxAAs#$5T+M@AEvlSQbt*X&ijoecHjD-mANMG|N38
z8AUWjW_;|1JZK;ucEy+m=h1R-%(g41yv=sJUSNxV#xih*Jld~1JRCc>#`1W42Ct&;
z@mg#rlXeffWjQ)42hTmG!FeAZ5Z$BdbipZ-^IR-rUU+h)IC}B>-ShOvkgRHO^mvTv
znm0clc<q40gI_(K!>gzs?JU-#8eMSO;Wa#l>hrwMc`rLX?4b5Bo2I(%%!-=h9?!v(
zW5*ZU(JT|wV_kUh`@PUq{riO-zwWV_I~B=t7YGmfjPlHe9C|#ej;5T>=!QI|>#Tle
zMfEZ(n%8ztu~~CETUK-0731-HO?R8wnRVw55RdN6iue@0&dz<d<45zHdR6m0`Lw>6
zj#p8A+z01T-@$jN=6ldI6PtaG9j|{McGZ~;?XWY0@ZJY+J`NssLwsl;9@Wv{)T3SS
zaG=krPd)J5=QVixK+Sm$%_BaK>NCww%;Pz{g+w9avuH6Suf3XQ2EEVowsT5(y>2^4
zHRVk&rO|;`chAwChU(XQ=~Rx6n5JA>r{-(gi_iD_UAz7LelOOk8na@tF7t7iH48_F
zYH*-x<dnl_Xa`SWtKMT7<(M@`7n<&RS4_w2`|!qiI7R%RY0QTHc#a*!Z#x__yLtSK
z$7}Q{k2kFYUVU)d!>m5;OY@_H_(0|9RnBJ5dz~GmThVv0<MCN`L%hW}?a^5?bSZjW
zckTsMt4Rm%5zEIoI>~XLdeM~gIXpg321HLoe2Qsa<;`zLkq&s>tIY0$topHN79WUT
zF)c?X4e2l)4_zKr*I7HrpqE0;;)N^LWnT4b#`E+jdXM(0rgK`JtVew(vc8Xu_r`cQ
zI@o<Ty6@DTtRlMS=vU+pkSrc}5S<-_S1dJKmdAT-w?jWZ_JSJM@sPnAL%gOjdsK}X
zkL`AJuj!004Yk)i_&m=Z^JvC={;1AO54&ajth?`2zxs5JdC)=cfj88d`;{k)FSZxs
z=mhEUcW4J5<;Z))t9>y}b9fcgbmO&;-E*491FBbNGRE;JM;<KY(JbClNVg(AaCE@y
z&J32yn6K2K3$LQi^c3@($Llc;PfRn;AAJw9pnCBc7t>?B`pA2Z9bNBCo7Jl`?*P)x
zP9GW7(eSE<ACGGI71hUFOs5Y_%b**^4m>{dc+P98YbQR?YwSL+JJ}egd358*q|JCi
z?a{edk9N}oYKP9~plbBRIQ)jp_{b@b55&ukSCN@MpYc4q&)E(Kdav?nntE*3-7*~I
z)dvr%-}~^uvs(s^nI5o|P7WVP9yC7f_>AtFi}9*kKOT5??k={I!K;1B#b$az@6m2Q
z`;6DM3ojlJ4?4S{dQ@jdXRm1%A2~%dLwGpbIcPD?Jj%0^p~ItQyjOQ-{Gj&z5w2LD
z_V_ur!x{4Y-}&?V`}I4C&Aek;4xOI?ga?&pHsokOoFP0jJH39#=TUuVaJF;c6m9ko
ze#0~`T1~U+x7iNe%<S43)8Gv4kSlD}KM%V{{Cbbh=2s6p9_@nz(R61vEOyYnAKtRe
zc$8yS%{Y!`jnkcsa^&#hN#j-5S@X==!K`<a2i4<!+KC?zIXv(nJib_7In9xc>2TT`
zo9ReH?a>*(aXRCHFQ~u&zX{cuH4Epv=~Im5;PClActtWE&7&L{xHKIejQP<(JcgV!
zE~b+sqaJ3Dno&(V)B_J%Ms+$=R}R0|b=N-SeGgrr&v`#OJUK;X?$wNP%F`F)=<`UI
zW_{l8F)tq9hga`~^BJGj9WOm-%KKit@E{pFl=mE(Avw6%4hQ1ZJes1-JerB+;C$Za
zVm>%f?_{PIk74Yn4?V`2rrqjMUVX8?v>Y8|6n#cDn>DLme5%7KYNpgom-i{J8u!4d
z&op>Hlk>d#@hHa(lGmMF4Ao~dJF_BrJnV*^W7oXSWbmbRrRkp6U1#l$&E~}q>bu4C
zQa<t^9g1GFJ$Cdibb8ng)u%I_7*{OE9iV!(i&=emm1D-A<}se5UO2<Ft~5=vex^&a
zI_o<y`;7Wy{cz-bkKestcbnB8)40cL?1t(oHT(P2uU+`y4E2yxG+lR{(daNu54&cV
zW4<(w9@90iylS3DGt{G9#<MFb&kXu|boaCFmiI?>oAoiT-{G_ekLTFYLG3V(!wklF
zIzaVk&d=<MI@4oleA<JLtnO(U?~P@QQy(*(r856VDfjZL>v^UL-3}q;+N$b`tWaG@
z5p*>Y-P9<Kldj4LpUNr6abhRVaS}O+<7CHi9G9Iq9{EpT3`{^w5eOuNI5sViXhF9c
zq?UTp5-?)Ou!sHK>svpsYhCMk-fuZP()(TaeVv|nuYFqfVDq;x_nEtop4cAUFnf4u
zF#FPPre{89dLli!nel^tXv44O%&hdx9qD;*cV>q<{mHqbksoh|edlV&HM$?KbA{va
z&@*>wro+A)-?;LPCw*pK?`Nksw%&XDXZP?9&Po2v+~szC@^Zarw~m!Jee{(-`#Y0+
z&Yj6U=e{pHa+cw5qz~rd8_t}V^U9N5^vulMyG-)3G?@AJthDabv&yEHvtHQQ)h?eI
zzI-QhYB;Eir+2==o^zL5akRwr&1@f!xiRy6>6y8AndEVeJowyawwrsG8{|nYXL_S-
zdz<gOyT`7_E{9J{E&XO*d-`dR$KFWSk$6d)uAM)#Jnipy$z4W|EZ&}IZcpyx$)leq
z@#ARInSQgox);C0_Upq>&P>DMSNm{tcruG`E%)@`hnu4-G5IUgwQn`!26bnbnJ@RA
zbtErGvyaE=d6i#rnWyWrrzdB=;mnEhxXk8EPd|=tFm*efKRvkgB-e9h^|$9z7k_po
zr+3w}%J5}w<#R{-<YnyXGq-28ciz2?yUynOj@0w6obxU-ebu+?Os^ie%A`hzG&uYm
zJH*ZI!41x7@0q>%q|4i7?Tt4L=Se<!8Js=6$&GKNt@6pqbXR(2=EEn_vcsId-7HVf
zteK}VGwr1%%Hwj+IrW)So7pk9j&I*?#}8)KtiMq%`R?F>I{9RKZ(r)V;L1yr%l*=<
zFW*g1bIJFddv>n)=F)HG8O)P9KDn85ACDbo4hLJqH)ii{mZ8s%GuwFv=g`mF-5j3x
zXs6{}ayXdYd<Qekd~!RUXOIUrmptt%bo%HXUiy7@-tJDGme_aae&q8`{JrCKwC=s|
ziK|&(=GtfPJCn~IGu-)-pV^TcoRhoxteih_>6c41^V^~P><&(*_wnsC{HiN+bST$%
zt@!Loe|DL7Ub*(Ae>dkl=~;2|kZ1NeN7>fWZ|3RUJ#;ueC%K&IiK&|*U+=>=XCE|Y
zJ~?xH?XBBC&b`@{c^x=De7<vYxyz@2#nEMV_oa^)>dkCwc-URMcs`i=aCUm*k)B%5
zv(M=}Rvb@iW}5d(9tUZIb7XVIC7RPW^PJK0IkPuhdRBA$^DY|9d(vl4%-OwqR(opn
z>BtA4-v2-M?7DaS>fYTu9le)+eZ0BjcynL*k~0s=C1-9e_nGZ5`&OLZ9m))vvr~=^
z)3f6`o4Z+$yH}{6CTm||bDimZ{HrH@-I;sNGEnb*_MI1>_vAd?x#!%P_gL|nTg|%+
zZ+4qU>qk%W$*r=u_8oPM#-Dg*Z$4MP>`guAn}+?QheLjL8qUs}p5$_tS#_+m%yxhJ
zS2KTN&$BzLj^XCCc4lvW9p^5C8^mP~{z%i2xs`vV>(_CFt2|CF?@bOrTxa-T>$#f;
z=fIqKaCV3voRb}AX8kF@LOt1K=GWRg9;R*{oYVW6J%94>!OZaB(sORPxx)@u8GV;}
z+NU#-C-2eAN8@ci_nbRtPfyO>KU#9~$?ZJZ+a6k?Zd~3$OK#PfdS-fF-O+uzAYGR|
z(cGTw;2CuI(`TlQ7neD6>vEaF$)vW*uei?e=%&NeXP%Q<?#a(=-{DnRd>m!ij=ECI
zSvHYA+{_;P%FC14^tW!$uAI9kHFJCHy6x%5@z5aMKG@#&*wcsW9y@RPa6CuYx%BEu
z&**qw`VP~VS$_H;j?dnn=5x<kXL3E;VP=L)KDC_NXU{BdmE&7^#-E3G$7M%)R`ZdU
z=Dx(7_2TS<!`=5uf6sQ<cjfNB@m@MRFCI?M%y2iK9d|$V!0c&G8b8PnacAY`-RO9@
z^SdK+ytLJxT;GwJS^w-u+>zGz*mc`ichI1Fcze&z)@0hlhtD0?s4H<ib5<NaG3Qlg
zILDkmbN1v+Z`27#p99a^&1dGZ$#pKZ@zWb=>F1#h&cV00d0u?(vcu)!g{jRfmwIye
zM6*0hez-Zq?fBGr(tpHdHs{RXS2)}p_sN~v8{XdD%*n#^niFSs^vs?!9qL|rX!r5*
zB(Cx+ZZi16qbI$2mpOaVn|#i4khaV6CCVh;XU>ki&#c4FkB80M<@jLh_R-VRGkwLo
zt1-RqNsn1~ddw@Wd+of5-P2w=l(i4yI*Z?V@QrfWm!6sD(9LpJV(5IS=bZV>@+9)|
z<vzaNGut{Zj~(*c6IV08zQiN{XmjLOb9S}QehIHGIk?BYtGklx9vU7tpSyX`>Dk_1
z`{a0X#x=Spkq0+>KF!ZAlW69@<jXsDS^Nr{>-$DudD7RjT~>a_)A{)Z=Olk-&Y#Km
z%(vo)o3ql+%K4L?{?unq&5ZAS^Rv&9<4^9&5T4vSClB?c4+m*_p^nCto?Y3O+05n4
zlN~whgPrZ2uTdwzoiF*+=!3giHa*!vhpV3U>q>9t>6ybdX3l(sozGqFh-;61P_F0R
z`37m{>8685&y1OtsON~2Ph90jcX)F*!%Kd;uH3tWXLxh_@#)DPeq8!wAy4l+e%F2E
zmvKk#ncK~o%X$3v%<9KMyo|l|+<7`<AMehSnz?hik7tfPb9&4?_N(Ca2TeZFoSy60
z73fRMj2xW?lTU7DN5||rx2_BF_bvy!GyOVvSIEEWk>{}|W@q}6-}!kucl0j0jyyCd
z<39W7>7nBr<q~C}Oz*3E+LOB(>P>7d_nGs~RW3cL?{evJS9bJlm&;7g?%a9tF!Rav
zobS+?)?{Jo!>x84<hwFoe`Fuu$I*H9^c{HJbeMc{dg(AdGuzE}`QG&$=`@(#yT0_~
z9eA94qPg$0Cw3nVzv|*yVf&9f?%>HR4VSo^yN7RhGsMk~gDY*gIq5kww?Fmq+0)fp
z@8gwAE&0`qgR=HSbKcW_8t)2+bNIU_^_kPxUVC~jW#}s$Zcg@|nY-`7!|xsJE9|cH
z(4c<3iJjxkZ2L3A-`IJ(?5eXh`wEA1blC^J500m?y{-4Y^XENgULCzBzsm5ZW|mD{
zX*&2;o}ISxW?#<J;bb2kceH0;cJ+MJMeB@xkjJ~w?3eWR+XrQH#_9iE{IW3nd)D9g
zW>yCB+Pfonp3LA@zSJ_4@6$8ij$d_VMh<$f%<bk~k1i<BpLZN-@{O6#PBTBBJ&`v(
z^nR!0`O~xG<Qn;hUun&!$E?G9z|^ycKXn;e@9pK&n@EGS?##VCv$uX`Zurime>Ll*
z$>ZTpAKsCj-JIAy8bAHgKDqRCj~$-fw=?p(ddII2Cv$E-e~#7<pIqy9zQl9u&F=%6
zuH3uF-rmgUhrAFESDh<OJ~8LXWY<d5+n708bG@f;W_t2Cm|D)M&+Opg@bne8$|YxR
z%+AqtC$9MH;Z0x9{44KpjyW;s@y*^`=IM!adDuOfq3ygnWmdjb2Tl&kLwx#EGY>kM
z$(cT=569Pg`qGoUJ{(`}yWaGsAD=n%>b{kx1M;}X-hH{JH+zy#f6hE`r|IR(y}9Xd
zXm;3nz8y|ZCOh!Sb;nNA2h*3mbeO*6a!!vqkvDPl*;k08+Y`+^aQHd1dwOsFDscTl
zJHqVi>}p?i=~($`olD*f$D1d!_u+Xmcb{2qFyCR9ZQm}RzN22g^jzY2VZK9Wc~&@F
zKC=2!GpA>`)qZAgcgr`*>sn=TyosrqS9j24+tc^2d^&g==`inD^|db7Ui>A0<}zbW
z%y&1_-7~v6JvpaGKDqRo2lL5X&iqH*swcT!M|=2^_v1)3^X0qcOz&Qv*71<uyFNTj
zemAFAKQA0lYIv9(Ik*11YI(Pg#Jq=h^cA1_B@b_-96tA%=cIOK&Y$?fJ~&9vJ?E9a
z<0dD2X{PV|a|ch}mt4*~ookPMFpr(yTJ!1WO;67BL44+$Tltck*~y;dvXf`@<n3~+
z9VeH&d2r6ob5_rv`7SarHS-R2ww_(1d3JvJ*7fW#bM9E7UdYq?iqE_G8z(mhn)O}c
zQ<rT_j~TAKqovM+hr`dYuQF%H-M-}I60>v1yIU8OwWp8P$b*-)5Ar}-?pLPM2MzMj
z?MHfhGh>F+V@^D?H}7L_^d5TX_}OWR=JfZ>19x4`^ACE`)3aU9J~#&tle;opf4B>_
zZ^!GP56U*z-t^Iu%e-DbI}cty(VQ9n%+vXKa_7H<nKgH&d(&rznN7|N`Rt9OJ3X(m
zM_lHo^T_K?zTC~(mvd&4-_7YakGK6tyLalmOybNQe);5+GxKL(Yw6)jPwGc}ze{%A
zM{9rIONXs{x7PVqn3>F_*W7w$SDx`_re``n_nfmE?{3-(kGSkH59Z08hn{=;RvuiU
zjvbD-yLnSfPx3jZN5>IPHqS0Up4Q~DAD5VV&wTjV&4a7`%-;S?Z)Z}|eLH=#@!l|(
z-$y6x?ChzzW5vm~mOD>kcH(7L$djl8mwV4T)7xBXGwVpqnV(l*Vtec>PjWNQ!I`hf
z>yOk@U-8MAVRm*;YU!Uj4=r)@_U$sf@_e~>mmOZ};2X@R?@HfJ!^7+|kEYAK+Hr8z
ziAx-RX6%W1FE5>@6My8R$-vB-_4nQxJLFH)#bf8W#HX+4>@vggnjy{(@w@)<<yrYw
zI-mZP2gjSc8D`IF*3me5+-}x)gsJ81{jz)Xe0V+%C)1c6=JeoTYBS>#d4|iwv*V8Z
ztL*gPWfRRiUuM(0dOuzoKfckOE7Soq+y2zdowFy7H&16r!@=~Yp7W}Ar}H)*-J^>q
zvt}Ah-aKgLYfR71%afQr$(!l3&q*|&mGkE+m%i3BJM$%P>Y3G>NKdY3p25`Ya5OW-
z*<tdyL8o<mBOj#Ce#EV`$;u^mCvE3%T|SWq((HqIdZ+Q*;fhZ#`<k~WPH*l<^X?rw
zlbxLzFP*mAvzJG{vv|nQmtCuwPfkyw9FNS(liu{Ny!0cjJ$ZNDm9q?_CDIam&V91E
zpSK&XyXl>4A6<9qG~B9l<yrZYGedVL=3V1+a$a$%XaCAO91m=6m2=0XOm^kmxs{f8
z<U3?mjt*t%nQ4s&(mT^Te`DrH>!WAo!)2!Zqw%%YyPozR@jB9zdHf)L$LZor+-bV#
zy=Mn)aK-Cbp{$%8;uH1kJj3(nyyA51&|QuEc=xyi@}*9LJ8g7Ndd!1!Ry}9sCco;*
zT>JHQjt}m1JWT(pJN3ypIVYF=YQ_zEGCy<jIj3*<IjNfy+mkyVE^%fjeYin9+-dE#
zLwVRexvw%So$m-~?j20-yxsgbk2KlLnB@}9?mpUAT5>Zx`5xvK;wCq<XV=3I<yMGG
zuU;B-Z(?h!J-L~kywkkH%(SPqoj$&mHXL3Tq(L3_#@4%so|yCW*}FS;p0oS>+4|0N
z#AhF0_g>mFm-FQ8iDtc5rqhRgg)+Q$Ui|Dd$U{s1XihCV%%jh-ANBJ=UfJYviS$7y
zJBG8To*ne$(yJqV$z_fw^SDGAK8S}$_hg^^CEWG)J$m>XcRC)*&Ayt4bIj=*Eq61N
zO&o1?I%DVWeL9j$pZ?@{X_;Tm>C3r$@{a6jUWa_@$>Fmrvpw@ey1YGg^WbjI{LZI)
z<;~vq(d6{+`1a|OqeDFqpE=yhgB#4bGc>)a%eJR^I@GoD@j&;<Ksrp{aI5FYqnAf7
zq}#Kf25EM<;`Q-B{4SIFDl?ocFAmaYpJRu(D=|Lki6LK&v{`0`IpfaijnBTrRd;sL
z8`ERvao6lSEj@DlG})v5lBPR-In!ZkGvgDJ&zWb(4L|3;zV=>)D}RZjC-(ic;T<z?
z<M?nn%i$nCGc?FEyK^5uPv`NvVET9((@Pu9oY;J3Q|p=Uh^O(+y||w3=}j)@_KcR#
zk>1+uyDTr{%YEkIS7+ttO>EzEt+?GC>DSxbst+dvWg(t__&Ld+ncJT$KQ6O4X?uEF
z>pe58dHl)SSD4()b7ark`E$5AiDvw2AFlbUqU$a?57fEyW-c=;zpj;!pU2)_d!kt;
zJ4W-+SG$ZZn3?oshZ)MGAJ@Gr4=>HGKRe8@y}k1_=3S$uZcj{q-m#mrud{kHo1ARs
zcAOj?>ei9I_Rx4U+ng+HuU#i!qu%6YvLolz&568;shdZi**W5Q8s%ksA3rW<T%&$`
z?#a#U(VIICW)?T-$nrsYVrsh_Ud|4W`0?cFeY9PVTxa<4t9_MCf9pDSeCp=J$=S_`
zW*(UQ%yVdoXXWN|v^hLE({PQc({PDB&z{d@=kT4k8&B?h^0dU(viFjvUtjuHb8?x*
zCwAv(GU+q7pSO`ekq4&>4^uY}=CRW|i%;Z%N1D5M?6NDwWoBjv58IE=OlDVecBI~2
zm-g=Q4v9ItORjO{O>Q@Lk9)?SPy13kn)S)AytKreC*#Ps&I6D1_GD+@lir;spP2WX
zQ_q>6nDcn;a(1}#ti1e<nNMxz)zN(kGs`=iIWfKMp^ZOJ=FOw8d~$p|FmvsZ<&jC0
zNe{g_yiD%yYHh{0r+ZSTd6z_UdT@htXxVvIZvTAp@*nLyD@@MZUBi34OJe3$d}epE
z-0!N(!Red15qDPZdieD~e4{>?`pk1^x_UpmZa#OqJZJC2;}UoN^vvwwbDx=q4pWm!
zP7Y_!yj*hW>+EVzF0-q-?`w~pue<4k9^TaCAkCg=Zcp~NHkmni-qlV!CvM(5d2{F8
zLC=o+XzA&!9lASr92_m*#hjR)=DU0Jl^+MY$9@&AkL=7m8=VG^_`Ht~*O+~&xu4$H
z-r0Ft!(YPA+2!0ZdmcWzedlT2-Y7r3W9B{LdB?Nz--lae`_A6=LLD&q%qBmxgNMWC
zY=^S2d3)l_bF#PRv*Ya9%`)yzObx%gv-O>?-(!`N<+bPgthm&(R}cLt+g_ROYd&=|
zkNb4z&I5UJ&-qf8chE7z<kO#e^5eH>7N2O=)ws&*=IxH&`Q&t_FFo}1ujb6qo9nLB
zQ|npZC4ThuW`EA@%f0h*JaFY}ubua3pWZn<=k5HNoGyCr!>8YlOUyZa$>%(tIm6|1
z#HBX#(doN#?>YDB%zfs3=sdZn&pi5^_9vIxil^&rl)=yL;0B%Kj%NPB^x<{VnwM+j
zPfU-QzS@(UdCvIr$m0{uJAY==Yfdyz*Ub4GaeepB%a^@9XO<tAnDeC$y1v=_@Fd>H
zqpNYUICJj0lQR$I+}@p@_sDm4wd>1_xi!0<#MX3-Cuf=F<YDG;nK38!Y}aKUG<%=>
zdR9IiyWZCM@*Qxz?&&>!@`+}7{^sfW)5qJ$yUOA+({t|WA3n9!o__P-9NC_)#Ose;
zr%dW{dUqO~zq?xR9(!VU<Ze#PSr2aZJa)(j@q=dh-JV|a3RgWVAI>|$;q&bF<g-hU
z4!*?u_~oI@st3nAm|SLaUimYZJ#v{bx0d^=57(IYb$53j?cKwh$g|_zpEzDeF853G
z=$X^k$OmOsn4X!Pl{fF9r+;RAdeejFO)Y1>RbO+uWb{D(^sTt|>*MXc{n>wMre_B(
z@4>;;a@LcW`pmua?zHyzE<dOPCfD=qbM)n$`76_bZ>8e~^>^pdPJ`WJA3cw~b349!
z<oJ)e+baWg>)`L5zjb+f=I*1VUq{|?iE~Hx;PgOz;%av1XijoDkDmSQ-)YI42j{??
zd77I&k1T)U`0SmL<Dv8KbpF=u^7_($<l&cxyL|e2nrl9F@6sN8qM3L09Y>?*-t+2x
zR-WYY9n7$O`ssGQ+|6)2b5`Ew_@M0UbNKQ0vwHq)Ej>ABX6DS%aH;2<`Vp@WdXL1^
zbRG3)HhpHgE|@%S&{^e2+wpRVD{phN=Oe%Jt+eKP*FF5D&h%za=dz0r@}}pgmj>nR
ziFwEHd3L+}c+-<S4ab+eIlVLYksaO))2okW=Se=hcJonw)wS}s&t1HYsn48;cetb8
z&e%I+&%T^fPd;a!LC@%Oa_2iM=TCYfJ^g0B@#LJD<d0?@neBP<dF<IsPYpMS$I0Ro
z&8r+vULPLnNbEUxx$HCZ^*+33m8W%HPh<P#AisTwt9My(lh={mI4GNbGt7MZ^&DYp
z=KFN6?wY(O_0`;5?%t!3CvoOE?v+Wd=h^3Urgxsk^tlg?*GbMiXda*WKA2hl>@cS`
zTpk@fi7RcT>sx8f@ea~f+-Uu@?^3?+;D_1Q-qgHDdXnSSo0=J>7dM#44r#sP;pqL0
zhBG&=^zqDDX~WTW$kRH0g}AHo(?{+z=cAVgCf|O&Jc+60yy|clZRh8s=Prv&q{$89
z?(374%MKcDhwkFfE}U$7bLPuz&aKO~r+K^kSD4-O%&m03*6`jddy-3D2GVx^6_4{i
z_d)mYX2)vA$wB$V)G}utZ_b%D(~mHF#+N5^$(!l9AI<t3C$sBnZ~DwU?uPX2$HCO(
zAkX0H&}r$Tt?<ZC8(d{^t!K`>^6ql!?fhs?&co$yPMkS+J)Pa{vh?1QPc8YG=ZxMD
zKGB@s;pVubv9-*auL`O|Pii>1#+?@r<yL!Z;~CB|w+}zQ)RI5aI@38>NN-F%JBN3g
zx36$A!#if);c-04(N@?UD^GUmU*%R@`n$(n_*EWv<dt_9l!58%-qo%rQ5Sz}^t>xQ
zIk&ev?dg+mjR)ra$?fv|ypVr|>6zKXyV_}kNBPdCKQ$eVJOA)=bjT%_bLzwAY3)9H
zdV0=%?y)!0@VPff8=ONQ+&yRKjn|&}o_p6V+xK4b)3ayQk^Q{s(~~IEoIG7m?#boM
zlbHI<s~y++^x#&W<l38>j+H01)MuWf=e!;7D{uC<t{<P?zArsAm|D*I;Yu5B^<;PE
z%&D7Udb;~Qp3YBZ*Q0Oe$=u45dd_-rxtsMR_H5TPh&xYre{4MMOTRhM9huXWxbxwm
z9y{zi`4V%MgZI(KdvvmkFFE<f@uqK=<w=y4NnG92dUo;a>|M6`>_|`ZnR7?`?R1%4
zSL<?(>2n9JcXxFMUt)ITESp^`P9}Xjjwf}U`A+8a%kZ~mmxXez<M~!71Ji>`9DVj9
zOzrGk|K4ezdy-$>m7G~d2j1Sgy^%lj?U_9f?{MbqN$%t3WV1Wx)RQ;2KKvZ~py#aI
zXuCamJv;8cdcMQaJonJMJ2f+u={@<;=IDjZHE$pE$k-cOpMB2wj_|DBd>-}QxXzRA
z=4aP)G^fVjIG#Dl+pmP{kJM+L)7%lyE4M;i_9U0QKHT`6m4;h+Xu9mYgF7v~Im>3Q
zx!n1N%N}#;a_Ob>r-v`G_1v=~=k(;<cdz#3WV1Wx(d|%Xg_k_7=RWhC<j&0P&(zKE
zw)4EDW=@o8ZuUOOrGGb1J~R5--@JWr<?YV)*ySN!K6l*5@ybtTPIlONX!g`|P9Gk&
zh98`xoA1n?KT|W)?Q(WHY@UDgobBoFnWr&(?mP1(ny23x?$R^f^vE9Z=`rhA?W4^}
z<X>@T_l@5UR~a17pgVB(L_VIx_N~0*!RMUZCH~y7f8Uj!?`GzM&D#g(?C`AKyboVy
z%(TItafzAZ-`yv-(o@TsH}Ao@kKayjT=_bayE$`a@3TVp@;1ugbMIMK@{`-`XJ!5A
zK6xG7bUfb?&kJRG*Kr@6cRKoXesunoCZC>5zRYC*YR17;H_khZcTVo+#Ix)6=je{P
zG4<4D_M|6g{^86riAVZTpU(8?%KrAXUuK28t!00Da?X3ra{BOc_VlHfj>{ZPHjxj~
za-TUnQcJ%X%5}E)m5(Ry+Rb^NuJr2SgFKD=*@c5E4cGnlM0e_=Wd{!q%H-Z$XIK5n
z>5|h2>AA1GI{EDKE5z}_6^|R7!#n8Yj2ld^x%J#-a7VqodU<>2(`iqinFg~{o|nc;
zZ%n_LCp%VL>-I#m{NQjNd+Ioz9m<UEq&GS93NvFKU-u@LzEvl$4t^+;yZOGD9XZSI
zxY1W<mE)61Y(Fn-J+tFE(rGg7$Mf}_bh$(`&kAvuyrbv2lpF7O_#l3T!_8^09(?cT
z)XgWKE`B>_^0@Zot{2Ma+3|cZ{h7hLGk4k6GN0ONUU7X#?~|F6e9knOni-BK55AEn
zc^n*V4$pZzf3{}lky&ASdgdSAoX8JH>(l=9nBip8k54Z9@i>0_AWv$z_VGiR#+9C(
z>EH2vcV<%SyLNl?-IwpN>c^$eocO!=WCpv-&NF)-94{PSYxm*w>(L>*;#;#r9kRna
zIC#XTXXZK0CExm0ATmc@y--)8KAgVf%`_-;ALQ{a*`XiO(rZpnbF{(MW_M_fqpy7U
z_UFFqUhykVS86%`F7LI<yC?g`hnGpNHTw$X;CP($C%2l1OTV7vGPl!Le%*<>aM{<~
z&b#vIp>@`t@0l}wl}~P!$-8-RaK+OSXYNNf(JVWA9vv%gl}T=uogO?)&OLf~a$or~
z*WT1*cU)%kZoIr5?)vywdS+*~n{(ggdFk-uX47xhHRztkl_r-xX8HD{PD{L`^YZ2H
zPMUo@=0tpU^xR$c^x<^twbSt{)CXl?W^!(Q_T;)Rv$W>qb>+^BvqOAl%{+q+fA7uH
zVRj}rb7sxy&$+X9nBMH7C*IeqXR<lxj)$rBJo}vVo|&7^)XY$Jc8{bT;#WAHIlS=9
zu0PwOBi*<}^Y~`=*fWpgfjfS5hc{7<$DST@dvce<tunO4_RT&Ap10edGKuL(K6~)I
z_V$d9TY2OgW#oIu!|vwCcfURLo_F1=EN+GUF1fG#!=)$REB)z_!SU^~t@Ew&x@GL?
zm2Xdb)0cTZdD;&760=)ha=KO-zV;-a8os+$JFh(Sjxsxb=WBoNnHjz{ck=PH51;<d
zw3d73ciqkF@1EW>=bq+t(YvE{`9?l@eSFEUX8D!Bxs`Y4+1<73;HBB8d-b%BKlyww
z9V<P3diYZ_w}zMPJ9fIB^mhkOWBSZ}PwqLpFS(qvZ^!dMzDD{WE$89#*=cwkouR|_
z4e!uqH$xs;@-y3W=9T5a^FqGV&8g*_*<HU5x(uWz=6uOF-aPz+b70QtG1K|s@N;sP
zX^sz{*qPNXpE&cJ>{{(trt1&gI9a*elWU%)$DTg(U_LUq+_NWjb0V+2eLP1q?d-by
z^`pBhec8>|x*RVb-rhMpA52~*IrlWCcQvp4IQ^L$EuWPpmpwRs9d<f?m2Hh@#pANK
z?^^AhlTUBYGArzSd+2!k>W<bX<Cu4t*}QAV>(QS+Gmk!dW^ztndN0kZoDB3%D?ECK
z?B?5Xx_5Wt6SFIMUG7Yj;gRF9^CilpmyYAX58@hm@T;9RnCHlw+GOm5&WfWA(s8}>
zw4T11`S8uPZodk~hde5KWSUDatvS7o>09;luYCM8n3<X9;OuAi%+q0da!!5Khttgu
z={w}hym>NnWOJrn8LmJ0Xo)K=Io|AZUt@c7*O?hJ-wNemW}2fVn!CIC+4H17=keHk
z?tJ=axWRm~3!fQW;wm$`)7~RKy{mb$-K~#CUtw}R=bl~3n^VvGljm)0PwV#V9WMFR
zzVgeo-#cU`=k%LlXYq;IWnSqxow+BM9r)xrm!8oaKG?h+?tICc2UjO~v&{I-iF$Co
z5AT@a@SRI99}nb#$(slBG~fEp+dg~u$+wOl++}!Vc@xb%u=&{?o<YxO_?<6#-us|C
z(%W3$zw+|PdY=`_uQWZat$MSkXFJq4dp>y|e&xl%^v*n|@ywn-X}H|YaOJ@b@(uPw
zZ{AKHoP%$qU75mXr_0$>H}ee6vG;r>hR&Zp9HhzG^A1{O_)?>1)=WFf(PVnpvD4E(
z^PJAe9`WtTo~zPDZ}RfVnIR8M-n>Ho!8y>J`<3DPLvH0;WpHqnTlKeJj+Z{@NsZoI
zdd-RH&pG?da^u5gW;M50hkT;BGkTNPlNy}{li&H9&)s`LeGm_ic-o*dIaxCt4=v}`
zc^dN$`ISdsVrMhYxAHW{JD4Z=oYOON=J<H*iJjqvynM6gOowOn<~>$?bE`~pJ3kNP
z8=M1kPVUNd?b~J3Z-%Sh>@o9oE_d$&X*%rPl{^i~=00;D9sG^$&z%>y+nXQ%ic7wA
zd*Y>gkMyIvGRFt!{?**v*>(Q>xbN%^o!y1MuTP#IX3ub*^e30O%$nhmj|X=DF3U$x
zH0w-U&F!}j<}=wme8ZXBpFAH=?m4H9AMCU19-of%<gBYX`z3vR={=fL>)zS3YvtvE
zN1m0|oPE&K-8{oPD{i#p&4Zqu2hW$;M;`gJ#~*w2(~my$skh(w?hjx6)mJ`wazBN8
z<?V;hefOE+p8KEw>_7PM(Z`;8?5UIYk6wE1-Iv~b^9N7-;O*DmdF>aU`^twOKDvIr
zxjIi??R7>s(^uTe!?(iW^2jG=Zp}XEB$qrrk)D~+o5$h1L!K}7=2jj2w8ZYFW$%v5
z?Cy^2F(2i+$KF}*1o?F1S37Sae{;#3b&l5zlhc(NJ+&1#nLbCHJKAGk=_?KAo#c9N
zU+VqdNBgQj{i(YH?%si}M@Qn$lbM{|l^r;~?!;#%IsRSGrJTG@m^s~0hDQeS(G!od
z>ATdSC-0PLE_rvz+tZU;&OC``zQ)n}8PD#dcRbyHw5LCNb{RZxz7wvo@5nv#$-5`H
z_R>~f?;w+&`{eku$4tu}9Bi%ml|G*KB}Y3#{=~V<!RJ0Re$WnSXXX5fgS5<>^)%9<
z4!$FPrODG0XSQd5a?R6@a5Q?~-#ed7W8UAhE_|cz<Yn@n=GxE8N5?}v-|&5SAw9h-
z4F@Ne89jJDo)z-Q?69*(KAmv9j-J_j=EuYIrpMgfcu0rCJMBsBl7~0(QXjAGL|USG
zd^6k4z4O7=J2$>O^c_dfUf$GF$MX%Qo_o%nv&$ZNQ|sBT&kpf<Pikhk^Y3)Ma^stW
zU(M-FUwYGnPjBjY9GskkyX2*3F6Zu{LHg`H<I-zx%q$JJ!uHr3Wrv^HF~i|`aWFH<
znIRucerCJ5ce%mTn$NtsJ@%D8TJkgF&eP5Pxy!8leA&}JdwO!#kK=C~eNOT@pVhU#
z(<YxCcIZAk#Ot+>-m|^2y{jE3J9|I06((oS{BU_vGmqXgE^+47$?WL%!8~?2nt9N?
z$|RRLbLP$Z?Ad{XsdcBG^vJ=~%yNn8Pu`ufx%1KNx)OO{d-cksZ^gCVdHsBe`qI-g
zPxt1&nv>JH>uNr;Ij0Z5LY#YNKRW4i2hJ{UPuyw4XU}TK9r<YEb=*JuCH+!Hmmaw4
zPK_>~_vB26t6XZCHN){aGKniKIrE_0ic4+gIV;4S9XFlLXMQ(N#*-eLPMCN0ER#KE
znx5YIbS9>^XF0w0OZlCid3WLLF!`SCgHFEVaM_bPA51Ohm7d&q=inM?!_%$;^|8`%
zjiSxl-3f<xc;Jqg;Y*ZBO#kq?A7$Iuot@=(haJkx*>`?9{zO@xRR?W_y7VNrCZBh-
zCp9z7{BRB)4zG8`rM{Yno1<ejC&$-!jb{!Xp4sy!4)V{AgPAj@*0Viv=G^nXOLO0u
zJ=x0#(}#m{aCm-mYI3RJ_*Tf@=q{Pm&8ZFN;1g*p9N(Puo14#l<~j1`?WU)9KG^!~
z?uE&<KYRG0+$tltLV23}sxP&iJF7E0c#g0&cVu64sr8)qn|TITC-qBnc4n9E#`Jf0
zYxe9l%i0_1dB2%=<)N)G^PT0#&z|#Y&kP-B*D;vfdAt3Y9*TTslf$>4r!jrzME>E-
zgHF#YPkQOe&8!FF(w`a~rq*+I@He(+^f}4vO-%iqxcRa4E~ghJk6R(mor$B}=eP@Y
zM(6PDX^p<(X?pC?y>^I~v(ppJJTmw}Gf(fCX}?{@e$;i}K3&<Zw~=?({k!OSN9OVQ
zUODGGm|^xD&F*NFai3n8d}nu_%=A2aKiNaW!R#5%!6)9gqchXloZWpq?nu379vL0Y
z=gzAO;$dg9+nmUsnEK4_g7nPLaB{uxvYF?BwB0_ud(yj`^~l**{^Zg(JgsNFsb9+K
z$PBKt+0V1ewYJLPpdNdp&f(|uj)VG+eB;fNnc*`_<EP;v9rDedbLzCl>@@4JXU2SA
zZTxfEpLe8ocHj1Qo(E<ZPKJihyH*+<>VY!!#GKRLvwbj+?&Qqb-99_)jD3)&F+Dkt
zFVAk**WUE=Kwf)#N6Vc@CXu%C<9ISRbMiS~^6m8Qu*1A_IQx0Jc^_KqeE968;oy;X
zr^!M-cjUhET;j4v*JRA+>F%fA#LVC&yOW-nc{!YX@0m}JJl(#^?=;@~qPy}vaCt}e
z;a8dDGJ{W?dG+X*zmF%qW<9I?aCvx!Yi;M_ZGZ0B%b$I_S#H&J#I=@pW@pcQc<+_F
zd4=iMg@coGvLm^fX=a!_Zil>(ulMA0<{M1@yxnlA@ur8q!@Nfx>fy1&<~x_ZnOFL*
z1K*gP`gmw7<XL4>>v_78%WhpbJAY<#PCfaYd3K$=kbm|*s}3Hy9gZ*aa(KDbo?dfy
z<(#@sdTKM{)0cC5>^%0y?mg01n*PM}nOnz0`s{ONUm>pjXZQItvt~IyJWL%o=vn3X
zWZR2RG`BbRRqy2H(D?0Vb^V#%-JHqv44-%8ywg_s<}#a|X8!Tb!JBhWPL2-8lc#w*
z<n4X<;qZ_j@+77<Gc9@Cpks!^=bZcSw8WhC!qm*PBOLFC|E_;B;QjZ$`u<C=-Tr3;
zzVps|pMT}*pBDJ=A1wYEfzRLiX9VV|bLH(zy;5WP<zQ<Xk2>08*9CR7?(Re$Tz2T$
zp)BOnfzLhf!FO)8%R$|_caEp;Ngq#hdZ7-8?_BD-k5EtMvXc(^bnbY*)H7q|vyUH_
z*_?S{W-?31*|V!>9+@MZCo?#?!9Fzn&Xf8olR0x@XY>v7_1wFTOMbq|J2E>=U*^qn
ze2_kS&*?FzuRC+kxwH1weK^?nWpB?i_(WRXopXEL%X5VH&GtL2I#*rZ<v#iJ>d##E
z(`9zM3}5e=OAp_mnKySc<ms-_(__ZN%;((tD&KzZfIsTs&0e|0>{!k6ndxpj%pN(M
zzQ**K6IcH3<X?GHqc@klZl1)ICYu_rv$OLx(lTT2KH1cHRvO=6`jV%~^Q8xuo}ANb
zrgy)cZ?z|<XE6Dmb6;iT)0eZ%a1QPgrr!)@?GQgWC-F$*UHPwy;$zp79Xw+8M4DXg
zxb*j&{?T?BzDu6g<yO78#(YQGjvL+KncaKz+<Rv-H{LlocxG>Sp4QtpI!~f`*R#r{
zH+6T?VS3z$gXzs4^Q9bL_GAXn=UyIq^Qm`M25;AqJS~yF@+a4`4m@1(xZPco-FZ^$
zJM_uYVe0A0SwAi_so`<=xg#@j?pf_R;VPfG?vjIaxXR`o=JaP5K2e4b;@e9f%!5yV
za`+Xer?t$O8#`kk<Xv%R^~S@Cm$9#OTHb}@r{%62t~5P7tDejq`T2I3-QCj}-o%;h
z@|jD{+?mc_+V#Nh!w=GQCen63-t0?n^Qm>#U5S}*-oEM_txx(plbS5fuFp=_MQ`Mj
zYu(N_yIBU(WZ=%f%O$U)yVH~XX1Vm~z$MBh*M6NVUOu(tWV65Z-et1Wyh46G_q}W9
z>mGOV+uaN0TF+d2X_@VOXXrACw8WlgcVuUu*}*5b(&*{O@eihMhbyf)-oZKa^LGBk
z4bHKjxAP|r*B(1xqIt48cUNn(dv@N`&4YbX%XxhE%-|qj<LJ%hZsxP!2h(#jkLK*&
zH}4-W-;UR}LRp%QL>}CDlfx&{)0=bZ!_R3h_nFhvTI%V`xjm`P?C{wW-J3Xi?q+=E
zSKRm=*+#kMW$}7e*dF@|<x|5A4u6Da^|mj&<aHeF?YWQl=>G1@-8&{{9-Nc++i?&-
z=+F|)<C)nb(>y&fJvpyDJ3YNKw=egzdiU$VlbBw2;P`fY>Y3@;`>y=Dc_43h+0(b;
z=!2g2UGikkEHhm@E;V;Tne=pLdsC++(!0Cwp!4g%^EalR88d(P(v#P<;@Y1c8eD0s
z?(sL@+1`Jb%&Mc`wLPmnxtTq>VEXcXTbGBtjr0}rt~6YGa-Z2r|8RE5M@yuQ*IDI8
z!>3nfh3&Ve7uPtR;S$Zs=iK_yp1GMllbK_OXZGeZ`JQ+A^l8F1(qZel^CXTwCw;i&
zd!BucoOy-G<$QF{_~z(uJgetVJ&?BAaf6=mujZAPFHwGl!#Vn9?>TpR-*MEF`J-8<
zE_XqCcF<&2+EFh3t2sG$xKpn^b+de<O!E40*+I+P$|sX3yYi>j`cX%FbJyuzvj@im
z+mpVW^Pc3*gL(AB)_Uj5dvZ?y%&qmFp3ywX_nbSwUi*0F<er|hdh?mS%;9Avde4lR
z7s^0B`=BQ^diU@gAuW6L(Cq0k!}c`aUAgln(ueDlJ~MxMX)ry*+381kcHexa_l7-B
zy79cT=iItnBL506^>u&mmpbY0k#9^NZMZp!=CgA1wUDRho}64F?~aonJ-wHBUMQb9
zb07Z3@eSwD?GO)#m%}AyF1<PPU-ITXyf8I=iF}a1cbVaNnzO_7nrVa0otfMHJha`e
zFLig_m(w8!<>|A}u_tEc?7I0(O@>NKOl>ve2D7g_a!;Rp>$&sf9odod&a1EW<jvXF
z+-lFxe8-%1CT5peX0^MAw!`c&C+bO@t~vMV+<8~|<YrzSeWUf9JAF8O&Z(Od%`$NK
zIlU*B+RQ8Ml1By}^;}(W`bdvlV$ZWXnKh3#b3XjE)t>qG(XtcQUG1^!v}Yd2lbz=D
z^U2Xxi0h0!`*{;*zO-i-uin<Wk1umPE3W-KFz@4SuD!kU5ASI%_nDpS!X?u6!tt2f
zL({{DPd`ti3|#5irxVwxCw=Le+2Ng?9|w7PR=(6$dUx3yv&Rg1?Qr;<+t>Qpee-iF
zyTasFIl4O`zR|nrO1<ay$gb{?P0uP%=TDD$)t?+6+-dHD<2QFE`RvV1^75HW&b-T{
zZXTSINK5|86d&n9uQ(n0b5HI*9hvR<KKXn<vv)}B*}l4SG<qXHq}v;_tF_tlWY_Sy
z>q*Qk|B;@abJjm2@bdd#`18Md>GnS(@Z!r4-+1`SaHoGp;NSnuV^2Ny;M0#j^G7ee
z_U=pXz4?PDKl)b$K6CRLUO2I5d%q06QTy=u$kXjS$<uIohnXjLT;uMJm2Wslcjj?C
zi8TI8yDYzbusL0=B`=?x9$X?#E|Cvsm$B2~kuJkCnH|TII)8J?%MCYY=S?kV`OKNe
z=kVEK@@Dzfp1GNM&Gyd9t$a8roBPap@}A*kAWkOv`*7LcS=y?ny+<D2#PN5(4jO;+
zz4ImNfbQbS4xW#LJFk1_?t{ZSyooy>Pi9vf9qNP0_pC3y$?*>!@iabtcu0r%72?u6
zoM-qv=^x$>kGNf@emcZMcO<Uneg}QL*>|L+Z#QQ?=k~jsXLQ_=_ddS#WT(55<82N<
z=<w(nzUSolcU<y4+Xo$eE6n#8|7t(;zKQ(llkYzN>^E<J6Z!gEZ+-BcA6<VF`5%Ac
z^iAZWr*9(v=IJ}gcYpTkPv3d{uYdZ>H-G$tCqDXS@)M7I_&+}T$Rq#Y*+)M7C#UB>
zJw5;TY5zy3=YKdo|IKOtuTJ=1oSyOh)6@Rnp70-^p3(lF)APTd=Ku2aOy-}Tp2_{6
zr{~0fc)fr4zn=EFW4gxs4^Pj3a(c$|znq@`{Pg@!r~P!tho|00{`(XDM<+aSSNBcs
zzdk+x$LX2*e>?I2;R)x?>&%Cz%p<3st9SVCPB^`P|Mbke{Ik<D?|<@tIQRc&C!BZq
zr_cV`_KS4$?{<CS^mTvckw^aE^!#5>Kk~>YPx$|x@H5x@KReB{4?mtypPv8swEvT9
zZus%&c<kCUIR1Ze(ms2QlbwAslb_6V&oiC#%shAh{cGf(4F7b`KHkCc%>1{mJ$!TD
z@T339X`b9@v(Jxp=1)Ge|03P|XUQkdFXv^ZXyz&Kc&T|IFUvok`C`ZoKYMy}_J#8U
zoV@#V;N*s%$NLO#ALP^H{@Ll1l^dS-lh1tr-+J)-Z@l@-AHMeH4}SL6<A40%Gmky`
z_@^Iy;;~1spU<A~v)}*BgHL_wji-O{t9KrM@ZhnN<C7=$sbN3=<5xfT_kP>#Uq5{7
zH{bn6vp@RF=f3yi8_mA^!n;qr_g1sNe)!@u&wr=cKY#x_&wb&m&A$KsFP?t$g=YW!
zYv2FtC%@V3t6%!y#c$ntho64yogY5^YI|S)$roSz;`eT`pMLPE7ry-L_uhH&@lQSY
z<YT}0_#@vxF+Y0p$1i;8=gEBV{Ig$w;ms@N(Ua$oAN;}m$MEN_|NQ!hKYjgv{N``}
z-d{c!cRc$2KY8$}XTSaRr{DO_<A3A9ADq6{k6r&vJT=O9e)H-Ve)IZD`POe<eed<p
z-%<Yd1OF}l(e;1y;15r=zyIK0dF<c&)YZ@9pMK==M{LwQRTh8199aDJD$9c(e)hqG
z>tAcXeDB>*=NH?9hkyFuZ+zqQNBwJWzkd2soeZCQ+?&oX$9da_|N4VZJ^kfZzV^Zk
zOX;PbeD@3Q{rs+U`ntXP?2Es?bLCSHPs%IrKYZzfewn8pe)hqqzWwcA|K(SI_W0uu
zK7IOf{eho_!BJm(`HMgO(lbl-)cX9>uRj0gkLrhbb>Hj1{{Cw}{mM%D)f+Fp@y>g9
zl+#_$Jo)A4fBgRPu9NzsUw!%Ym!4g!r#E@-^>2Ukdv|_a%#ZwuFTV8c_m=PY&X<1n
zrI&xcdXv{*{flq>@`L4Fr#JcLSD%0F{pXhI>AqjS{>87ob@xsF%?E$@(f=*F`dPpI
z%l^T`({GdSe)WYfeE(ZlzfFGc>JOh!4*SA4pLybYF9rMP!_#laXTS5pD?k6D-;U$^
z<;%Z$>Gkt(<a7GbhyTWdPv87nd;7I_Ui-!8qURHn`t1uZee2I}{b4g-wAa7#?E9~N
z>&};E-tq0<JpcTyKQ5-_ThG1z#b5tL{06`JMeyX;pZ}|uf3<3P{)xAL{p2@p`A;oR
zJbd!4559eiJ-y2ZpMUqgFTJvA`Sr`se*G)Iy5+z5GGG7Zy8UIodabYh<dwI6^75U+
zo9Gkg-<ON%SHJm<Uw-Y*A6XA?qMzSJfAP$h-g@%x598l?(BA-l^e5Qu`yZXJ^V@HH
z_lK|MkNDB~+4{;$Uw-i~?*5iK`Coba;d9@8CcZ*fE$4qI^%i?-dH-vF^}!E+c<0M<
zYB~QSs<-?n_Wb`zZ?UJA=fC&!pTGE*tCsWsL%rocwVc0EzQvweKKK5wpZ(br)pGTF
z<or$a9sd^}KL5(|<-hvLe)!FIe(_hoT`6z;>c#K=#ht%o9^U;4+5C0!=)$`BYhz{I
z{PpqZ!@v9BU#tHl*!?~6ckVbhzjE&yH@{Br8lT+$f_~#iAN=e){b$63cRqLLrLJH9
zZ$9|LpZx5tw|?;B*WP{Y-QT|b`s1H^=7q04{f+Ov^JgFZ#r)AP{jK+I`}Gfbo49HJ
z=;v|kz1x2Mb=oFw+CTcK-+J%1Uw?78iJSJ1ezhEU`}>MN=`Z;2J^$6OKmF>HpMU3X
zfAkH;q38NLjlJh@ee^BIANO7V>I+}HzUlf~kA2JOZLYrwIrLnAD{|<${)S}lIlb}q
zw<ZT~eEluTzUB1B*Wauhdal1^IrLnA<Ffah-uU`kn1eUI{#It+a(d(IZ)y%b*WcP4
zdal30*?ay@f2*^5@qhc)H_H3MdHM4<B!`~sZ#ND-*WXMWdal1exa)c5g_pnn)u+EP
zzkRO15jgZ*|Bb)*+<c*~|A^dup>B-Vf7)F(UjM<hGk*Tgw;cz6I)3Z?d--nW;Lp5m
v=HO4V>&%~?{{BDzeSY^3yBo{(U+hPg>%ZX-E$6?)c9v&8`QVXH|Ng%Oj@{<t

diff --git a/src/finn/util/test.py b/src/finn/util/test.py
index 32c6a0a3a..132b700a2 100644
--- a/src/finn/util/test.py
+++ b/src/finn/util/test.py
@@ -139,11 +139,13 @@ def get_example_input(topology):
     "Get example numpy input tensor for given topology."
 
     if "fc" in topology:
-        raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
+        raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
         onnx_tensor = onnx.load_tensor_from_string(raw_i)
         return nph.to_array(onnx_tensor)
     elif topology == "cnv":
-        fn = pk.resource_filename("finn", "data/cifar10/cifar10-test-data-class3.npz")
+        fn = pk.resource_filename(
+            "finn.qnn-data", "cifar10/cifar10-test-data-class3.npz"
+        )
         input_tensor = np.load(fn)["arr_0"].astype(np.float32)
         return input_tensor
     else:
diff --git a/tests/brevitas/test_brevitas_cnv.py b/tests/brevitas/test_brevitas_cnv.py
index 120c67646..4b072535b 100644
--- a/tests/brevitas/test_brevitas_cnv.py
+++ b/tests/brevitas/test_brevitas_cnv.py
@@ -58,7 +58,7 @@ def test_brevitas_cnv_export_exec(wbits, abits):
     model = model.transform(RemoveStaticGraphInputs())
     assert len(model.graph.input) == 1
     assert len(model.graph.output) == 1
-    fn = pk.resource_filename("finn", "data/cifar10/cifar10-test-data-class3.npz")
+    fn = pk.resource_filename("finn.qnn-data", "cifar10/cifar10-test-data-class3.npz")
     input_tensor = np.load(fn)["arr_0"].astype(np.float32)
     input_tensor = input_tensor / 255
     assert input_tensor.shape == (1, 3, 32, 32)
diff --git a/tests/brevitas/test_brevitas_debug.py b/tests/brevitas/test_brevitas_debug.py
index 50d0ca44c..2ebaa2519 100644
--- a/tests/brevitas/test_brevitas_debug.py
+++ b/tests/brevitas/test_brevitas_debug.py
@@ -55,7 +55,7 @@ def test_brevitas_debug():
     assert len(model.graph.input) == 1
     assert len(model.graph.output) == 1
     # load one of the test vectors
-    raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
+    raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
     input_tensor = onnx.load_tensor_from_string(raw_i)
     # run using FINN-based execution
     input_dict = {"0": nph.to_array(input_tensor)}
diff --git a/tests/brevitas/test_brevitas_fc.py b/tests/brevitas/test_brevitas_fc.py
index 9369b2538..8397aaceb 100644
--- a/tests/brevitas/test_brevitas_fc.py
+++ b/tests/brevitas/test_brevitas_fc.py
@@ -68,7 +68,7 @@ def test_brevitas_fc_onnx_export_and_exec(size, wbits, abits):
     assert len(model.graph.input) == 1
     assert len(model.graph.output) == 1
     # load one of the test vectors
-    raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
+    raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
     input_tensor = onnx.load_tensor_from_string(raw_i)
     # run using FINN-based execution
     input_dict = {"0": nph.to_array(input_tensor)}
diff --git a/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py b/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py
index e8b50efef..20751a587 100644
--- a/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py
+++ b/tests/fpgadataflow/test_convert_to_hls_layers_cnv.py
@@ -73,7 +73,7 @@ def test_convert_to_hls_layers_cnv_w1a1(fused_activation):
     model = model.transform(InferDataLayouts())
     # model.save("golden.onnx")
     # load one of the test vectors
-    fn = pk.resource_filename("finn", "data/cifar10/cifar10-test-data-class3.npz")
+    fn = pk.resource_filename("finn.qnn-data", "cifar10/cifar10-test-data-class3.npz")
     input_tensor = np.load(fn)["arr_0"].astype(np.float32)
     input_tensor = input_tensor / 255
     assert input_tensor.shape == (1, 3, 32, 32)
diff --git a/tests/fpgadataflow/test_convert_to_hls_layers_fc.py b/tests/fpgadataflow/test_convert_to_hls_layers_fc.py
index bd600c6c5..252ea05fb 100644
--- a/tests/fpgadataflow/test_convert_to_hls_layers_fc.py
+++ b/tests/fpgadataflow/test_convert_to_hls_layers_fc.py
@@ -110,7 +110,7 @@ def test_convert_to_hls_layers_tfc_w1a1():
     model = model.transform(CompileCppSim())
     model = model.transform(SetExecMode("cppsim"))
 
-    raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
+    raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
     input_tensor = onnx.load_tensor_from_string(raw_i)
     # run using FINN-based execution
     input_dict = {"global_in": nph.to_array(input_tensor)}
@@ -175,7 +175,7 @@ def test_convert_to_hls_layers_tfc_w1a2():
     model = model.transform(PrepareCppSim())
     model = model.transform(CompileCppSim())
     model = model.transform(SetExecMode("cppsim"))
-    raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
+    raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
     input_tensor = onnx.load_tensor_from_string(raw_i)
     # run using FINN-based execution
     input_dict = {"global_in": nph.to_array(input_tensor)}
diff --git a/tests/fpgadataflow/test_create_dataflow_partition.py b/tests/fpgadataflow/test_create_dataflow_partition.py
index c4f748051..6732b92ae 100644
--- a/tests/fpgadataflow/test_create_dataflow_partition.py
+++ b/tests/fpgadataflow/test_create_dataflow_partition.py
@@ -45,7 +45,7 @@ build_dir = make_build_dir("test_dataflow_partition_")
 def test_dataflow_partition_create():
     # load the onnx model
     raw_m = get_data(
-        "finn", "data/onnx/finn-hls-model/tfc_w1_a1_after_conv_to_hls.onnx"
+        "finn.qnn-data", "onnx/finn-hls-model/tfc_w1_a1_after_conv_to_hls.onnx"
     )
     model = ModelWrapper(raw_m)
     model = model.transform(CreateDataflowPartition())
diff --git a/tests/transformation/streamline/test_streamline_cnv.py b/tests/transformation/streamline/test_streamline_cnv.py
index 82a38636e..ca8cf3b1c 100644
--- a/tests/transformation/streamline/test_streamline_cnv.py
+++ b/tests/transformation/streamline/test_streamline_cnv.py
@@ -67,7 +67,7 @@ def test_streamline_cnv(size, wbits, abits):
     model = model.transform(GiveReadableTensorNames())
     model = model.transform(RemoveStaticGraphInputs())
     # load one of the test vectors
-    fn = pk.resource_filename("finn", "data/cifar10/cifar10-test-data-class3.npz")
+    fn = pk.resource_filename("finn.qnn-data", "cifar10/cifar10-test-data-class3.npz")
     input_tensor = np.load(fn)["arr_0"].astype(np.float32)
     input_tensor = input_tensor / 255
     assert input_tensor.shape == (1, 3, 32, 32)
diff --git a/tests/transformation/streamline/test_streamline_fc.py b/tests/transformation/streamline/test_streamline_fc.py
index 9ce98066c..008ea6f1b 100644
--- a/tests/transformation/streamline/test_streamline_fc.py
+++ b/tests/transformation/streamline/test_streamline_fc.py
@@ -72,7 +72,7 @@ def test_streamline_fc(size, wbits, abits):
     model = model.transform(GiveReadableTensorNames())
     model = model.transform(RemoveStaticGraphInputs())
     # load one of the test vectors
-    raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
+    raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
     input_tensor = onnx.load_tensor_from_string(raw_i)
     # run using FINN-based execution
     input_dict = {"global_in": nph.to_array(input_tensor)}
diff --git a/tests/transformation/test_batchnorm_to_affine.py b/tests/transformation/test_batchnorm_to_affine.py
index a3df5ae9b..6cb6e35eb 100644
--- a/tests/transformation/test_batchnorm_to_affine.py
+++ b/tests/transformation/test_batchnorm_to_affine.py
@@ -51,7 +51,7 @@ def test_batchnorm_to_affine_cnv_w1a1():
     model = ModelWrapper(export_onnx_path)
     model = model.transform(InferShapes())
     model = model.transform(FoldConstants())
-    fn = pk.resource_filename("finn", "data/cifar10/cifar10-test-data-class3.npz")
+    fn = pk.resource_filename("finn.qnn-data", "cifar10/cifar10-test-data-class3.npz")
     input_tensor = np.load(fn)["arr_0"].astype(np.float32)
     input_tensor = input_tensor / 255
     assert input_tensor.shape == (1, 3, 32, 32)
@@ -77,7 +77,7 @@ def test_batchnorm_to_affine_lfc_w1a1():
     model = model.transform(FoldConstants())
     new_model = model.transform(BatchNormToAffine())
     # load one of the test vectors
-    raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
+    raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
     input_tensor = onnx.load_tensor_from_string(raw_i)
     input_dict = {"0": nph.to_array(input_tensor)}
     assert oxe.compare_execution(model, new_model, input_dict)
diff --git a/tests/transformation/test_conv_lowering.py b/tests/transformation/test_conv_lowering.py
index b6ab634b3..9cfc45d0b 100644
--- a/tests/transformation/test_conv_lowering.py
+++ b/tests/transformation/test_conv_lowering.py
@@ -54,7 +54,7 @@ def test_conv_lowering_cnv_w1a1():
     model = ModelWrapper(export_onnx_path)
     model = model.transform(InferShapes())
     model = model.transform(FoldConstants())
-    fn = pk.resource_filename("finn", "data/cifar10/cifar10-test-data-class3.npz")
+    fn = pk.resource_filename("finn.qnn-data", "cifar10/cifar10-test-data-class3.npz")
     input_tensor = np.load(fn)["arr_0"].astype(np.float32)
     input_tensor = input_tensor / 255
     assert input_tensor.shape == (1, 3, 32, 32)
diff --git a/tests/transformation/test_fold_constants.py b/tests/transformation/test_fold_constants.py
index a976ffd62..34d7d8016 100644
--- a/tests/transformation/test_fold_constants.py
+++ b/tests/transformation/test_fold_constants.py
@@ -44,12 +44,12 @@ export_onnx_path = "test_fold_constants.onnx"
 
 
 def test_const_folding():
-    raw_m = get_data("finn", "data/onnx/mnist-conv/model.onnx")
+    raw_m = get_data("finn.base-data", "onnx/mnist-conv/model.onnx")
     model = ModelWrapper(raw_m)
     model = model.transform(InferShapes())
     model = model.transform(FoldConstants())
-    raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
-    raw_o = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/output_0.pb")
+    raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
+    raw_o = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/output_0.pb")
     input_tensor = onnx.load_tensor_from_string(raw_i)
     output_tensor = onnx.load_tensor_from_string(raw_o)
     input_dict = {"Input3": np_helper.to_array(input_tensor)}
diff --git a/tests/transformation/test_sign_to_thres.py b/tests/transformation/test_sign_to_thres.py
index a92f839e5..aecaf0cca 100644
--- a/tests/transformation/test_sign_to_thres.py
+++ b/tests/transformation/test_sign_to_thres.py
@@ -52,7 +52,7 @@ def test_sign_to_thres():
     new_model = model.transform(ConvertSignToThres())
     assert new_model.graph.node[3].op_type == "MultiThreshold"
     # load one of the test vectors
-    raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
+    raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
     input_tensor = onnx.load_tensor_from_string(raw_i)
     input_dict = {"0": nph.to_array(input_tensor)}
     assert oxe.compare_execution(model, new_model, input_dict)
diff --git a/tests/transformation/test_topk_insert.py b/tests/transformation/test_topk_insert.py
index a9faac4df..bed9372db 100644
--- a/tests/transformation/test_topk_insert.py
+++ b/tests/transformation/test_topk_insert.py
@@ -36,7 +36,7 @@ def test_topk_insert(k):
 
     # verification: generate random input, run through net, streamline,
     # run again, check that output is top-k
-    raw_i = get_data("finn", "data/onnx/mnist-conv/test_data_set_0/input_0.pb")
+    raw_i = get_data("finn.base-data", "onnx/mnist-conv/test_data_set_0/input_0.pb")
     input_tensor = onnx.load_tensor_from_string(raw_i)
     input_brevitas = torch.from_numpy(nph.to_array(input_tensor)).float()
     output_golden = tfc.forward(input_brevitas).detach().numpy()
diff --git a/tests/util/test_data_packing.py b/tests/util/test_data_packing.py
index 7b77c4be2..f96ce276e 100644
--- a/tests/util/test_data_packing.py
+++ b/tests/util/test_data_packing.py
@@ -95,7 +95,7 @@ def test_npy2apintstream(test_shape, dtype):
         f.write("\n".join(test_app_string))
     cmd_compile = """
 g++ -o test_npy2apintstream test.cpp /workspace/cnpy/cnpy.cpp \
--I/workspace/cnpy/ -I{}/include -I/workspace/finn/src/finn/data/cpp \
+-I/workspace/cnpy/ -I{}/include -I/workspace/finn/src/finn/qnn-data/cpp \
 --std=c++11 -lz""".format(
         os.environ["VIVADO_PATH"]
     )
-- 
GitLab