From a37d7d3916dbea2449a9110c24b111dd9b2e2cb5 Mon Sep 17 00:00:00 2001
From: kernel <77142078+kernelwernel@users.noreply.github.com>
Date: Mon, 7 Oct 2024 02:35:03 +0100
Subject: [PATCH 1/4] hyper-x version 3
---
README.md | 5 +-
src/vmaware.hpp | 145 ++++++++++++++++++++++++------------------------
2 files changed, 76 insertions(+), 74 deletions(-)
diff --git a/README.md b/README.md
index 8a68397..8e4b575 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,8 @@
-
+
@@ -141,7 +142,7 @@ You can view the full docs [here](docs/documentation.md). All the details such a
> Hyper-V has an obscure feature where if it's enabled in the host system, the CPU hardware values makes it look like the whole system is running inside Hyper-V, which isn't true. This makes it a challenge to determine whether the hardware values the library is collecting is either a real Hyper-V VM, or just the artifacts of what Hyper-V has left as a consequence of having it enabled in the host system. The reason why this is a problem is because the library might falsely conclude that your the host system is running in Hyper-V, which is a false positive. This is where the **Hyper-X** mechanism comes into play to distinguish between these two. This was designed by Requiem
-
+
diff --git a/src/vmaware.hpp b/src/vmaware.hpp
index fc37c98..f11cd21 100644
--- a/src/vmaware.hpp
+++ b/src/vmaware.hpp
@@ -574,17 +574,24 @@ struct VM {
static flagset global_flags; // for certain techniques where the flags MUST be accessible
// macro for bypassing unused parameter/variable warnings
-#define UNUSED(x) ((void)(x))
+ #define UNUSED(x) ((void)(x))
// likely and unlikely macros
#if (LINUX)
-#define VMAWARE_UNLIKELY(x) __builtin_expect(!!(x), 0)
-#define VMAWARE_LIKELY(x) __builtin_expect(!!(x), 1)
+# define VMAWARE_UNLIKELY(x) __builtin_expect(!!(x), 0)
+# define VMAWARE_LIKELY(x) __builtin_expect(!!(x), 1)
#else
-#define VMAWARE_UNLIKELY
-#define VMAWARE_LIKELY
+# define VMAWARE_UNLIKELY
+# define VMAWARE_LIKELY
#endif
+ // specifically for util::hyper_x() and memo::hyperv
+ enum hyperx_state : u8 {
+ HYPERV_REAL_VM = 1,
+ HYPERV_ARTIFACT_VM,
+ UNKNOWN
+ };
+
// various cpu operation stuff
struct cpu {
// cpuid leaf values
@@ -1132,21 +1139,19 @@ struct VM {
}
};
- struct hyperv {
- static bool is_hyperv_host;
- static bool is_stored;
+ struct hyperx {
+ static hyperx_state state;
- static bool fetch() {
- return is_hyperv_host;
+ static hyperx_state fetch() {
+ return state;
}
- static void store(const bool p_is_hyperv_host) {
- is_hyperv_host = p_is_hyperv_host;
- is_stored = true;
+ static void store(const hyperx_state p_state) {
+ state = p_state;
}
static bool is_cached() {
- return is_stored;
+ return (state == hyperx_state::UNKNOWN);
}
};
};
@@ -1701,24 +1706,51 @@ struct VM {
* your the host system is running in Hyper-V, which is a false positive. This is where
* the Hyper-X mechanism comes into play to distinguish between these two.
* @author idea by Requiem (https://github.com/NotRequiem)
- * @link graph to explain how this works: https://github.com/kernelwernel/VMAware/blob/main/assets/Hyper-X.png
+ * @link graph to explain how this works: https://github.com/kernelwernel/VMAware/blob/main/assets/Hyper-X_version_3.png
*/
[[nodiscard]] static bool hyper_x() {
#if (!MSVC)
return false;
#else
if (memo::hyperv::is_cached()) {
- core_debug("HYPER_X: returned from cache = ", memo::hyperv::fetch());
- return memo::hyperv::fetch();
+ core_debug("HYPER_X: returned from cache");
+ return (memo::hyperv::fetch() == hyperx_state::HYPERV_ARTIFACT_VM);
}
- auto root_partition = []() -> bool {
+ // SMBIOS check
+ auto is_smbios_hyperv = []() -> bool {
+ const std::string smbios = SMBIOS_string();
+ core_debug("HYPER_X: SMBIOS string = ", smbios);
+ return (smbios == "VIRTUAL MACHINE");
+ };
+
+
+ // motherboard check
+ auto is_motherboard_hyperv = []() -> bool {
+ const bool motherboard = motherboard_string(L"Microsoft Corporation");
+ core_debug("HYPER_X: motherboard string match = ", motherboard);
+ return motherboard;
+ };
+
+
+ // event log check (slow, so in last place)
+ auto is_event_log_hyperv = []() -> bool {
+ std::wstring logName = L"Microsoft-Windows-Kernel-PnP/Configuration";
+ std::vector searchStrings = { L"Virtual_Machine", L"VMBUS" };
+
+ return (util::query_event_logs(logName, searchStrings));
+ };
+
+
+ // VMProtect method for Hyper-V artifact detection
+ auto is_root_partition = []() -> bool {
u32 ebx, unused = 0;
cpu::cpuid(unused, ebx, unused, unused, 0x40000003);
return (ebx & 1);
};
+
auto eax = []() -> bool {
char out[sizeof(int32_t) * 4 + 1] = { 0 }; // e*x size + number of e*x registers + null terminator
cpu::cpuid((int*)out, cpu::leaf::hypervisor);
@@ -1730,63 +1762,33 @@ struct VM {
return ((eax == 11) || (eax == 12));
};
- auto cpu_vmid = []() -> bool {
- const auto cpu = cpu::cpu_manufacturer(cpu::leaf::hypervisor);
-
- return (
- (cpu.at(0) == "Microsoft Hv") ||
- (cpu.at(1) == "Microsoft Hv")
- );
- };
-
- // must require at least 2 to continue
- const u8 points = (root_partition() + eax() + cpu_vmid());
-
- if (points >= 2) {
- // SMBIOS check
- auto is_smbios_hyperv = []() -> bool {
- const std::string smbios = SMBIOS_string();
- core_debug("HYPER_X: SMBIOS string = ", smbios);
- return (smbios == "VIRTUAL MACHINE");
- };
-
-
- // motherboard check
- auto is_motherboard_hyperv = []() -> bool {
- const bool motherboard = motherboard_string(L"Microsoft Corporation");
- core_debug("HYPER_X: motherboard string match = ", motherboard);
- return motherboard;
- };
-
-
- // event log check (slow, so in last place)
- auto is_event_log_hyperv = []() -> bool {
- std::wstring logName = L"Microsoft-Windows-Kernel-PnP/Configuration";
- std::vector searchStrings = { L"Virtual_Machine", L"VMBUS" };
- return (util::query_event_logs(logName, searchStrings));
- };
+ const bool has_hyperv_indications = (
+ is_smbios_hyperv() ||
+ is_motherboard_hyperv() ||
+ is_event_log_hyperv() ||
+ is_root_partition()
+ );
+ const bool is_real_hyperv_vm = (eax() && has_hyperv_indications);
- // "if it's hyper-v and NOT an artifact"
- const bool is_hyperv = (
- is_smbios_hyperv() ||
- is_motherboard_hyperv() ||
- is_event_log_hyperv()
- );
+ enum hyperx_state state;
- memo::hyperv::store(is_hyperv);
-
- if (is_hyperv) {
- return true;
- } else {
- core::add(HYPERV_ARTIFACT);
- return false;
- }
+ if (is_real_hyperv_vm) {
+ state = hyperx_state::HYPERV_REAL_VM;
+ } else {
+ state = hyperx_state::HYPERV_ARTIFACT_VM;
}
- memo::hyperv::store(false);
- return false;
+ memo::hyperv::store(state);
+
+ if (is_real_hyperv_vm) {
+ core::add(HYPERV);
+ return false;
+ } else {
+ core::add(HYPERV_ARTIFACT_VM);
+ return true;
+ }
#endif
}
@@ -10430,14 +10432,13 @@ std::map VM::core::brand_scoreboard{
};
-// initial definitions for cache items
+// initial definitions for cache items because ISO C++ forbids in-class initializations
std::map VM::memo::cache_table;
VM::flagset VM::memo::cache_keys = 0;
std::string VM::memo::brand::brand_cache = "";
std::string VM::memo::multi_brand::brand_cache = "";
std::string VM::memo::cpu_brand::brand_cache = "";
-bool VM::memo::hyperv::is_hyperv_host = false;
-bool VM::memo::hyperv::is_stored = false;
+VM::hyperx_state VM::memo::hyperx::state = VM::hyperx_state::UNKNOWN;
#ifdef __VMAWARE_DEBUG__
VM::u16 VM::total_points = 0;
From 0cc0f67041c16b1146cc177a30e4381ded68f0a5 Mon Sep 17 00:00:00 2001
From: kernel <77142078+kernelwernel@users.noreply.github.com>
Date: Tue, 8 Oct 2024 04:04:01 +0100
Subject: [PATCH 2/4] hyper-x changes, graph update, misc changes
---
.github/PULL_REQUEST_TEMPLATE.md | 8 ++
.gitignore | 2 +-
README.md | 11 +--
TODO.md | 5 +-
assets/Hyper-X_version_3.drawio | 153 +++++++++++++++++++++++++++++++
assets/Hyper-X_version_3.png | Bin 0 -> 108173 bytes
auxiliary/vmtest.cpp | 7 ++
docs/documentation.md | 8 +-
src/vmaware.hpp | 28 ++++--
9 files changed, 200 insertions(+), 22 deletions(-)
create mode 100644 .github/PULL_REQUEST_TEMPLATE.md
create mode 100644 assets/Hyper-X_version_3.drawio
create mode 100644 assets/Hyper-X_version_3.png
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..1e4f548
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,8 @@
+# What does this PR do?
+- [ ] Add a new technique
+- [ ] Add a new feature
+- [ ] Fix bugs
+- [ ] Refactoring code
+- [ ] Other
+
+# Briefly explain what this PR does:
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 444561e..fac57c9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,5 +57,5 @@ cmake-build-*/
*copy.hpp
personal_todo.md
notes.txt
-auxiliary/tests.cpp
+auxiliary/test_template.cpp
release_notes.md
\ No newline at end of file
diff --git a/README.md b/README.md
index 8e4b575..e36c9ff 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,7 @@
-
+
@@ -112,7 +111,7 @@ You can view the full docs [here](docs/documentation.md). All the details such a
Who is this library for and what are the use cases?
-> It's designed for security researchers, VM engineers, gamer developers, and pretty much anybody who needs a practical and rock-solid VM detection mechanism in their project. For example, the library is suitable if you're making a VM and you're testing the effectiveness of concealing itself, if you're a game developer/proprietary software developer, the library is useful to thwart against reverse engineers. If you're a malware analyst and you want to check the concealment capability of your VM, this would be the perfect tool to benchmark how well-concealed your VM is against malware. Additionally, software could optimize performance or resource usage based on the detected environment, and some applications might want to restrict usage in VMs to prevent unauthorized distribution or testing.
+> It's designed for security researchers, VM engineers, gamer developers, and pretty much anybody who needs a practical and rock-solid VM detection mechanism in their project. For example, the library is suitable if you're making a VM and you're testing the effectiveness of concealing itself. If you're a game developer/proprietary software developer, the library is useful to thwart against reverse engineers. If you're a malware analyst and you want to check the concealment capability of your VM, this would be the perfect tool to benchmark how well-concealed your VM is against malware. Additionally, software could optimize performance or resource usage based on the detected environment, and some applications might want to restrict usage in VMs to prevent unauthorized distribution or testing.
@@ -164,10 +163,10 @@ You can view the full docs [here](docs/documentation.md). All the details such a
-Why GPL 3.0 and MIT?
+Why GPL-3.0 and MIT?
-> I would've made it strictly MIT so proprietary software can make use of the library, but some of the techniques employed are from GPL 3.0 projects, and I have no choice but to use the same license for legal reasons. This gave me an idea to make an MIT version without all of the GPL code so it can also be used without forcing your code to be open-source. It should be noted that the MIT version removes 12 techniques out of 114 (as of 1.8 version), and the lesser the number of mechanisms, the less accurate the overall result might be.
+> I would've made it strictly MIT so proprietary software can make use of the library, but some of the techniques employed are from GPL 3.0 projects, and I have no choice but to use the same license for legal reasons. This gave me an idea to make an MIT version without all of the GPL code so it can also be used without forcing your code to be open-source. It should be noted that the MIT version removes 12 techniques out of 116 (as of 1.9 version), and the lesser the number of techniques, the less accurate the overall result might be.
@@ -223,4 +222,4 @@ And if you found this project useful, a star would be appreciated :)
## Legal 📜
I am not responsible nor liable for any damage you cause through any malicious usage of this project.
-License: GPL-3.0
\ No newline at end of file
+License: GPL-3.0/MIT
\ No newline at end of file
diff --git a/TODO.md b/TODO.md
index 8b5bfa8..cbaf6d8 100644
--- a/TODO.md
+++ b/TODO.md
@@ -43,16 +43,17 @@
- [ ] make a medium post about it
- [ ] test the VM::modify_score() function
- [ ] check if bios date in /sys/class/dmi/id/ could be useful under QEMU
-- [ ] make the cli demo in the readme for the 1.9 version
+- [X] make the cli demo in the readme for the 1.9 version
- [X] fix the percentage thing for the disabled techniques
- [X] adopt the firmware technique from the vmprotect source code leak
-- [ ] update the Hyper-X graph with the cpu manufacturer part
- [ ] add a .so, .dll, and .dylib shared object files in the release
- [X] make a struct version as an alternative
- [X] add the license style like in ffmpeg https://github.com/FFmpeg/FFmpeg/tree/master?tab=License-1-ov-file
- [ ] fix the issue of VM::QEMU_USB being ultra slow
- [X] make a MIT transformer python script from GPL to MIT
- [ ] /sys/class/dmi/id/product_name check this in qemu
+- [ ] update sourceforge
+- [X] fix the VM::vmaware struct
# Distant plans
diff --git a/assets/Hyper-X_version_3.drawio b/assets/Hyper-X_version_3.drawio
new file mode 100644
index 0000000..a873361
--- /dev/null
+++ b/assets/Hyper-X_version_3.drawio
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/Hyper-X_version_3.png b/assets/Hyper-X_version_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..01cc5b0e369ec1ba021bb947887bdaf454b12cfd
GIT binary patch
literal 108173
zcmeEv1z42ZzPBPOp-6+0qJYxP00K&ilz?~x&bfQ>-Oe%=@l)y=(pB_s@mF*A=8s;+(-bbm-7YnX3}YhYn#N
z!5>YmW8jM9{kv3$4k;QrNNPCPxR_d4n;fF&7XS8%o{PgAZtp5W^7?-
zW@l()&jvGb0GGghLo*ZD{s4Knn}xNtAw8EAFB=EAbwPuZlb%})e3G+(Il6#EBEE)Gr(@WTl%Nm1Jt&%rOnZ)7OtW~#6G^K9rjZCs@73~kNj;l?J`U|nmX3*P)lHHQEnZHB){gtc{YEK!2Uj$;?ck0uV-pmI
zP`cr4ZsA~}VrvLR4R;3e1+JMp*jVr1{`R!3;g2Qn?*gcSg9%y!QKSAgDSr@D+5~Q6
z;$Y_rh`Rqcn$KwI-6x9k4^iMpORD(+G2lZ>f#JURnSGxbCHwyfi@=zD4*%`dqtNIl
zLHH&0!Fy4!K0tky8&{NX{0$ZWtoVB@0Dx#M4!4HeeHCkNV_p-8F$%%#9qiy%CI{|7
zxQw{@_`se21k*UtEZOH8C*=2R<3w=*MUdaJ?c23K4%fK9E$9H(=(+f;0XT>mTR4G_
zW~h(Kjxewh2Xhnfx0*aK9N_1w=5(Ehs|h6JAecVz)9fZ_{MFuZ~6+nAP3-0qJRJ_9XNP!
zI~zmbBmBg6;5PvO>Azy)L20nJ{pM7eTDYLhve-|6Zwi5$K%wCJ?*QKj!pj4U=YI(B
zxqi!MUbN~S;IqIlv>AQvkHcoJ-vhn`9QeOzcvq1ZlTlOwU+v9-FA2B|Lpdve`W7%V
z)F?X>YeNUXDKH)c4Bv%=TMCWUKhXOE+EmD^e4F+6@bE*O{~+!dH(D|G6`BVfO&nk}
zC)#H_sL*H+;19%Up5FoYZ#ZoO2L|2F2ySSH;wFeDz8Yd@3lLTO;Oo9G@Pnzq69Ybg
zg`I<=q4jlf`oGC{wd>;gVv1LkCH{nr=jP-3mC62du$~*hF$$3nU^!YnQ6>`H`QbhB
zAskV$;8)wpYX3DnMn&?RoVFlB0p2wFKKS(27yNDxIE+nzGxrq>P@bHFxdjRzzWs%A
z7flU8vlJOV!9ex%8u3wpyKZ^+bJ{b7D3d4-Apz>lU
zAK%*0-rfS`z8!G+e%O4J_XeT>J68=bmIJ`;{#Q-ZSM(PNRHEd^H{Zxf_~=PQh$-pv4=a_ea!)Z5jK*>GO~P13NlKjSNLQ!q&by1cv#VH
zy@R2h8A!c;P00Q-34%sm6XV}x{r+}_1vNX^6Ueh1$PXQGIDTbx(AU2DV-`;P`L6v4
z=U15Vk1XNGLaxItzS;>C@c~gdxp;o-0P~<7VDziLk#PSpltu%j|A*3I|K&UR(XT+U
z53GUvXJ`5wGyaKJaszt>a$nzx{kKW8Kl*D5?C*{I$1-K;js3nGtYH-h?<3}iLJH1
zw5g^R)a9x&jP(}@i{HdI;@4Hdq(8+q=p5#CJ2=XD1p^KwBsomKMmIm4ny+ONE)HNZ
z94s7AbuYA2^R)&BLf)U0_J?WvgNC!e^gYl*_=gE+f5~nXtx@Fu7lP(5!S8Ro5dW;Z
z@@?&Z$MyK7N3p-{zwdc`d&OT2GP%)tm3=3G7wstj`w)|pe?O78|4J^teb)#5%0GkO
z@k=k3?{^xs5163(0yN9q5V(=(JRmw?|B?Cmrg&T&a8ob{v=)F*cBoIF`uPhaG>6+5
zIfB~cFSGauqJjTXG5&=$)}LbV?+N(>F7|h(9|Xbw-5C6rEZlE)`2P(A_x-_xAoxr2
z>`VCnf#Cl%_~Q9F4~}*c{`4To`70Fs4twerFwjGT%3hf`p&C`VIIQ7c>mI);hk!w#
zV!7`Te#Jwy&-gd<;gV{S3ODrS6s1-Egb8upU!|?kQgIM9(H0vmDgV*VlwYC(D#h@V
z>v+ZPYYFo!gG~%Uj~%dPFw~{r+r6*+1#tr?X9DABhiWbQgWEe^G+XvPm_M_@;}ZBC
z?-W4c5yj3QH4LtQZ=1n?!bjmmdzs%I-F?UZfRlpOz=PU`#_2zfwxL&az(@H@a*Xe%
zo&ausR0{j6Wd8Yhwl8c4c&3SJ3i!*Z+0RVl<@nR8*}hNwmuDFlI$e&oW@vN%=hL#k
ze)RTB|7+jlJ{Z0IGS!97=>EmRHy-r9&;tB(A?sgXJNw?YgnlJjhtO`qpCO0EEn_by
zZFxmf&PfZVz-g-`Amb*_`g=q5J1b@K-z%N%XMxdqUrkVL+^mOm)w^`70*|_{vvFAdA44PtShW+>I^8fJs+~~yoe{cS;#r1E5_(wMVAFSN}5`BK}
zbNx@z=X?9hzY9tJuGQt@LG9rmqyB-Wi9Z-Z{7&9E_IZWYu0In({BMi-ei(ZowD?nr
z`7fQ&Z+YLpoS36w{m&@oXyfu9HH6X$?w{Y;`>r$S;O76r!Ed${ZBc(04)UTYv`?{r
zGF1w_9EJD_KB&M@^G7b~Uy@Zi2oJwDv44qJ@MmG?
z`M+53AUym~;-A{Af0^1IIrY4E|jq|0mL|-;m^Ak~aNoM1i2x{Ea66LHmc61N1A=
z0FQQC|Jdo!pCRG@k0=oI=6*H8e>&a$wQ>5I(fhNiiK9Be?y`Y{fhlp
zes`bIul%QV_g^3XeVy^Y`1NGyxBd7s|D(p8IxV{{hr*)%%vB`(tgiH&6Q1bjo^fyW7FJYrZ2f4JyQ1x$vZFum*0q&m#575$
zF__d{w_`E4+n%jo&$Q`?B$D*&Azv-s<`V#xlHX&c!GB`)xbB
z^t}go20|w<5#amOG351_CdhZeB@83;-54=Q&c1-xhn?m=Bb1&0SgY7lwtp}*Q!RV5
zOLT908ChV`QKQbzU=@+S}c}e%p$4x;&HE3aRpWO>M3_F8mB{Z|y)(
zAB$Fz`G-NTt?XJYtL)+;%|g>Atx}k-NuNz=_9SM0M~-gaRC~J0lJml#$5T2CI@0{~@zhlSCDJG-zy*AS11M#TF1q`)IRWsF8@AJc9tXf4J
zyE$MMD53$S?}{$6uc4Hno(&9HX4m&sn#r?zmfiZ
z{$wlzgcC;3*7AEFJY(k%9)M2!4df3*n^P
zRz27~L%*HXzFaqC1eJOpG*Y;E0}p9r(2hlbe|Z1r)lnY-`|)mnY@(SCb$wkCr~ioK1w@Am)wOMkR}_R-+Rreicq~~eoJU$*
zY9~D~DYMUf^;Rpj%aG5Q_^lI~Gkn{g^DHfXNuiB9IZEDR#fAbEE}TK53gHy|bG*)T
z{Uy4UPP&NqGK{KLeI+sYR*SxR@^6}xJsQyXiH{*>tUg5`8pVQWI`eUH%TmcrOl
z>9Nu(g9gNhC-U$t)y&S}R<8bM+NCgFA?G5od*lqZ)z4g6!Ryq>#DhGm1C6?;mC_F6)9j!P?!B=JTvC35%NZwfHm)XA3YbG@K
z#rl{Mm-l~|D14@KDq%gU>bfS5)1985CQ`iT#(G6_3s!33@H7&n&|KN*0POhKLnM`R
zzo4+&muE#g&$9ReS~g#-``S0@>(x84XWyPEYC+
z{_<9wmv6w~!<%|d8E#jHT_4@soh=>wxVbr>@2Y&>1|
zFycsOfCwFLABuN9GdFXrM(YjG&dXj{i7q3-H8l%$xcX%d9nxi_+c7C>G2R{BAyBfA
zSr;-==`sUv|qwYGtYe?zXqH
zW(6-BzJ(Zm^lC!)fz^Sh
zPGD8-ZcaCy0#YJSv$yO1$b*+rf5c@aLp5`Ebu3&Y1zA)lzIsYpIZ$Y$)a7T0kdcs#pyi8ZvV
zJyELQRXPOLooDFYRm&;5^F<~5Ze;L%#vgh?7iES4v}=wop5^hQ(7}0vDmafj1QpJ!m*DUp4@-r-i01cN!plkJ2}P
zFzLZ%Y##HsL%H;_an>U6k5!XBGe#v1i&JdV1KWU(+7EjR1VS>je-JI?=FL#2k~*9B
znUfV2=d}k~G9XTMF0X+Z(o$8rSitL%ae%@hfj0}!Xpc6AlkKf^>GKwJOlJj;7I$h{
zMaUk}&_{$7@;dxxc;q2OlrBbj4;zcEpY<0J=8MgtWXG$%-B{r3od}p!+e=Pkn
zW=Q;t`d}h;N~dna=%m0pwR=yZ5QrI;hDcoif`QbCdV&t_0gaA>oB%jUF5Y1
z{(2tl&|i-5^)pD0dhSO}cc6EUk;1Fp_wQLho;s*<_&ywm&BAtGj=h7-qkx=U#ewT$
z1i#(s1%}EQXPln6^mj_a2f^5c(AMG!nc&`N+}r~iE*~c7h)WA^*Y@lOMbYfa;ae1@
zsk#~BKZpw0{f2%aWp5i<(g&;5*F7KV_(m8Ke1wZGLihT(84#U{BZ?v$pO|EHR04nS
z8>KFdSpC5CH0iiazH9XxUIFox#R(Yxn{QbUvuEVaar7X98e2X0?or@LN(e`J==8Iz7+req*}8VG>C>v+fnBmm@m#%l)d>E4C2qE$i7joj
zvlOmxPf>$gP?PTTropYag@3UBiDJrJlH2aag!bO`QdCc#pZ;A?@l)h^mjhR=GQ|%gfJHZ%cjdAEBp3P|oK&
z3*CH9HV-gVmbXYUl$6hP$rz|~Y_xtwvt&sFsdhJToK&YM$%+Q5x0ht?FOH24Ox`V3
z80nT9S>NMNFO2DlRo9#Jyq>AXx;0lh-yERQGNl_vi^S(Ns>j+|?Ssz-(s<W6#|~*#*}m$F8bXX1!r1I2>;VeMjTHogZwq
z)HcaiDdr4~W{?+gAPuzv9%s_rilg3bq9{nj-bvfhaDF$V^E%+oBKA2qm_5C^be(%N
z&60}WPmF0Mj4IMmv&KN;Agl8d{v6TjX7tM_jrwDi;1wQ
zn0&(LzB;3fMEPPUQER9vjC~M5h$KYr+JsCKvdP6*c4WA!LDkF)RHY&)Es)giS*-fi
zm(pcZ>%yVi^L{~Sq}$~zTy0m`+W8OY(A2jnRhi#8cB4EWq>_O`EIV9b(v3FTC8PGuGA
zlaSH)FsWv2k22VG=(NSB^==i_=QsKCw{8eHLV%f5ex4jb=A(>xK7zUJWbN`?0YR)~
zp7xa`54=VG?L{PwaLP*{v$2BX;|cJRkI&uJlOr0d(i#{dpdys6R(dXlGeYxKP@&l(
zmCjzGFE*>}zGL^Xxrk!DcQ=r>NmISWR>28@-u*yA&HJni<yka0Xh0
zj_X`liuZ0$A!T_uUfLPYjj?zNb_EvoZStc{z`dBAm5S^wi%(B3tZy=5zYS^K
zyHGe8<1VP5@X9vjg{MVB2nlr-GOrReb`YZo@z-QlYgPPo3@2E|uD-0*KSQ
zi(a1d&)23F4Kji*OJW<#QWg@2(j?R99$?o^8}V(Q$Yu
z>Gbj>f6V6Yfb$@)-Wez|V#Vu|t7ci?Td)~ns5GBi47ekFQBLBP0Tjn^acOI3ZSZ7`
zUNSEk+dB}A+^~=S;P03(yA6D~iyO&&2Eh-jK=k7T0Nq7wEOeVhEoydFxy53S;;J#}@M38<+?gF|2o?60
zWYO?n655(6%!UnAe7s1x_3B(?xA-YxW59%R1iY++-KwV`tt;O4Zr-!T0-ffKb$R;%
z;K?`S-RI_GTc~oJ|0q0Z;^j{w`^KLmk;mdr%RO#n|56J7;^j|o2hT-b;yPPcP|ry!
zI49n3aJSj^6a;#U?96SqCT5N0yF+EyuQu*Lpp7S9Mkc!TAG6N&45DNZRto4i5^<7L
zjgs1H-Eh7fxNAa}rs)ikW$NTd_^df2vIHe!9mL9o!K(FmjuIYO2wb%4ElTH?(uq9z
zXxQmkZuknWLIt?qRZNNYq0d^&Lz`V
zFK1UJeke3+do@UqeB1AoNLjn%#y}PD#?_~|)|lHO^$lJx$L7jNOEyYOG)5m%icZ|R
zy>&0C5XQtRCqr3DgS1MDyiQX}QS#*mXDsuS1_2iSt2oFwp>BmkK9a_}iWshE9k1tR
z@riuFmzu-ia{4^}X%ITCiG&g&gGBY}%J9xJ1xa}vCLmJ^h-ayGs<$~Ax-qmEbbWh?
zt!&8ml^bC&bOdLaZW*`kHkq?v0NDlhLR$|DzOl2{{peLV!ynZz%CbNI^!(<_t}nTf
z-rUhAF!7t(X7VDLs{9Guojlqd_dd`b6#0v7<
zhCIZvQCvWMDK%OrxK9%h>KGB@zw
z%DH?#S7Q}4@~m#BcE_m>n=vL(V98xS=D4T#y;mH!@kkjk$+3LBUWCPqp2k(DZa7_v
zE!ye|k^{2BaJkM$baIy#UL0YT%pd+ZvIfa8@WF$vuAIcPsC_3xhkxb8Y^df4Lugk;
zi>o?4?gbKrPSf-l>YH7FVF
zYY^ElPl@)si@cd;Uh!P*G5h#NJmYAl<6G}|)u@H}2l{61B8ORqlrlBRPipAmkcQ#b
zvnZ4-B)m8u7JIzLz;WEU$Z59sc1PY6VPc|`W^MHI>Ifnq2~3^(w0m>+tj4NSQck2j
zZpe3ked%+3EdqAB07AKS=iyT*lN{|eO7+L@A3(+>+ipb~TvE_`QFg{ZyG+Af!|7z4
zZS&g;h{S8!`3{?g@!QL({lpqZAlRQ3HbgFQtM%sL)34fg`%;o3HNtIQ(n=`j-MB%i
zLWVeD|3#*AqkxL?OVP3u$Dr${n_WEc_ID9XC{yL8s8NPYGvW(z9)WRi~brV;|J*o!_>f7w$F7hERQyAe__;sklvmzWvzO5
z2b$uwX<>g>SXKcj=IfI1(Xx3zuWXOFEJ$O=kY1%rNLD#<6t;1^+Na-Hj&prS(iVqNdA=+
z*mhff!NyT%f5v2&ItttxgR_^Wo;|vBn2d!*^0>OFIipu;t?x=C$&tqUG87nRZr}8F
z$>YGD?9A4FEgf9H*hm4N3BJS?F%0wVh-|hPzFV}OdQ9A0GGJ1C!KlTLH9(_ldk^@A
ztQ~yG*esr2GUp@8=WXxZ#9m{GR_YI`OMgx9sqApsn!HTX>mX=yu`P~K)*~$L!L>x3
zNoE+|`tsJ%K}2%)gA}V6NF)8>RgGo~8a5`ZmS?etjMm?aa!HO9HbI7xiCBU*Y=bI{
zlSSkEAGCkM6`gzbSg5_ByD)@kd-jEvyvLG(p;5g(PzOZYQdW$5Ugxs*>FTyJHa5~)
zV;Ut#!=9kf%OIF{0_D0Xi;rMy_h@{wAYDO*v1l~%)
z8AfglK?Vzq9#Uiw17Gt|*%%Y{{)lG-gTeKjokMvhn9LLuOLf(eSC~oIc`l?v@Nb5Olctlt)
zmVdXAosTMu27Xykf&uoXV8O);i9Mm=H-^bu6C*F1jt~&bgbD995bJ%xI)(W}AKx0Q
zKCgyZECgHm?Hc9T&<88BF%Z)L|CU?U_i;$)BJ)zLA<5P^g4oP-7u9rq16I$S@uLfx
zV0guOjgtGA2FJ@a-jyhwW1Y3Wm4{Q`vjc`OU>K%!O0b>B>M-!f%n@h$Vvrhg0nu!E
zsD`T6cj%P1;V?)`w<|-Nj01vg-wH;qGq>?xm^y6~!2G$As-KL&@lt}qOZOAL(GIPK
z(RvUbW@rh>c*Sgy+t=Ju*M$U=kmgX3&Vvd;({!wE~$+sOH9-(TMw$Z1lb3Tk);95r0xhNY%GcSI{l`agv(ILxWTp~RkHXPaX^(rNbwbXh<
z>Y+6qeoGmmX?k|yHFQ=t_r%AkSiE^FK
zgIBcor8&y6R|3@ueLW3zJUN>uvKS0hktP_6$oHZ)Xub!$_Id0G^)hs~u!4N~`
zf-#+kUW^azOk9JokGr4#XLh3VtFVAR7|rO9xOGTwxKtRZlW&z!0*qh2=9mp;8JT*$;n!sVzgSKY{66C)3u
zmlTGn+nJAY{CF=YsR_kh({~+<^>4w&&3g;<@ZrPJ&+FCmK~YRj~hH&*F6
z%8few-NVho@$C&m*Fn5JJ*#r{MjZijsu%Ku>oLa&EPw1Wk{4;M0~2bc*GlcIYhTok
zg+QMcsFzWA$66m->{=jU_t6Q0dKGD|;#CLvVjLb+mB`VrBh}nn2C4?zDHuT(@X+Y+
zHCoPUdvoVc23Bm-ZV!{u?xrdYBbk^Y9*sPe8mP6-z}8-VU;Y6Q24U=%(Eg178s+Gz
z?QUpfwnNWSJ%WMn@FpAA`Xpf-t47|5QHn$b8G7ui?Hba+#mgt)#S#+bbIP-kD{^7W
zlQ=#geTM*P5{$@d)QI$>r$RJuWVO@Q`|Z}7EHUKOfeUBznh|=orGLxORQJw)kJ^63|->6E;RcVmf=kV~7
ziQze)G$A<=bUEtKyquYa=A75^8y(V%DwIMg&t&^g6r}VuFYOHwjIdywJ|BgPkh6cO
zW~xK1!C=zE!NNqqH7r5aemeq!H~#?XSm*6(KfAyXcjKMWtf4qTTGn~mS~q68h@PTb
z?6mBi2E!(=l+E+rQg0gs6JNi5=M*CBnOS-@U4wqo3!Ff2*F1xO`ZMpd+B*hi@>WJp$hy?k(q3Y;Y
zJFi9Yn!F*eaS~>`9muLv7A&M*shuZ~h7|M88c5Prg$$QQzCKPjz#evX7#jc`1!iLH
z2)y(@B29bvLQ)5_Z9W(9$jUt@S&p*Sk>0oFQFA0^^w9~1@r9->*|PeH%$2tCl*W8a#(br@xN4YkxK(KPX?~
z3=5Wwhf#iO;3M^+R^QkXI(nKB2$RnV7~$}Za+4KYtJ9;A-p&v~DM_&b6D`U@1nXzn
zX6~DrO5IbD-U70lwIp}Tf=7p3IBrw$!xG8t<9E+ryIdzQycm=TX*?s_9`itzbk95a
z`O-DWPNC>UEDF3-zT|>UQiT}5LkdNk1SH($S>b*~qIY@dtK6>Z4Sso!^;qoY;4%KQ
z2_p>F*+fa|age!BS;tP5r)9)`IG*+%hl&})1piemq){uh25u`(L1DHabmG=iBWX{L
zo1U&CcQKC#d%#^emp$_^U!Du#M@TmG%8!l9s8K#uHe1k$(~>EsB$n2Q&+{dWV@V8-
zv?qwJPtJbTy6h1&df`gwWh`W!!Yz6j70cRjS;#G?1)&_Ou$9m>4svDY4){XzecMMeF@wy=!g_KxjTFQR)}}ilE8ShJ^9jK1V{DrCufmBNGG*qoHhhhT8)@Jl
z;V}2eBM7P^QKxCH-g_F|3s4^vOSu}kvh`BqSYgcBoV=o8LBBzMjPsE67m|l%H6dTl
zAno*zJ-V6b@LndZfWuUolH1gu7*~sqsA16Lo)G04AKM7|SrX&MLV^?CWL5LFrC8dR
zUWSdbM7-Q0zf)XLaE*kt&fnz(!?F*>JNCMxCH#lpyrkrE8X
zpISTVf1Ly8P$x9b#c%hSMlcpx0M@CvybEnlAf`P@V`~Nv2mP&aZ@mf$K{gAJES_x+
zgh;)j6Z4&{Cy*XqZ6FzFW?-nmzFpy=o>&rS{J+^RTMig
zc*Pk%BK%tZeO83rRsOgeFDLzo8texwo+e#u(0}q=BMJZg?s)ADSOyTUUgRe~YwuxS
zNnFlGQ}(Q=+Ap6dLn$y*1s`aJ2g4qHe-BaeZXy%R_7y_pY-
zU=_h&TmH-y-~TjHJD-_K;nhPFiN;rp3lG^`b0Hxic*WqO69V15B6dQIRWf#oPew8r
zs;8{U@HXpIg$6YNW4eUYW%B3{zAA}(fGW+JVx32E>#)~?^Ry2kX~%m$5wWo}
zL9Zwjf0CvA(E7~ytVuD=a9Dx@gzL~m6bFW^X~BqZFl8!Tl>iUe{+>}IGfVT!oq9Os
zVa3lJHMTVPdd;Wkd>Oju@y
zfZ0ap4Z_L&qhtJgBu!RW=3S||jDzAIaw}n1R)R!^by_{sn6CI>=w(67tNowqJiR9C
z7srQ}LGFn`fzo^2>k|iWX3%9d>`z*h()7d+{HhGD4utNRq!Q9cXktttFENF4tr#3_
zRE!;aBf-wjqG=5~izA_lakQrDgMv^?PR;J-s|E8Od}MI{d2{jZ7P?n0*_T`~M0A4i
z30KEh=Z`f#g*>s5v(&J}3#p6sx|-Ax9v0|-_(_pyt8tfe8aQWh0#A-`
zv$%n}nf|?&2tp)FW}!}mD7RM_i*SKQQ)4`+ytv35)9_V%l1Ci*wsGkdF2>%~)N{0M
z2vu5Q-I%n_T%ivjiA6d`JbXv44TGV
z3)J>qR=z!|@>-T^{7W%qFA+DGFwU5KP|vOZk|bT3M{a8z!j
zEU-uCDvK>&&Z71D>FK;fw^E{qj#YbvKvRTm%#@{xkI(7$*6U#;Q|TPbn_I4YnW32a
zm>5BZ+*Zg7e#@So^~Uzp@elSY$0?)@W3Asfv#iLC_ndgOQ@4DXs_YqU|2@j+n@=xU
zIYI6;-Ik`dI42z;H_rKPy1Sq!-0VrL5^`l
zf>s^V_LM_okfM%%jIvr*9t1Y7!z5zMZPUQl+VSeMpa3I&NtNN@^L7%h7vIxI*o)k#
zcmOJ)7#PDE{jn|TWT7G$gU&vNMIV>@U5u=>;#i>O+p_%JUsuyK0chBnS-G;D5Mpcs?CU`}1IID48p2#v%Y+YJM
zhDr7;5sf?9b{+LmF=|kO$iaq?rP0IedIofz%^ySbK<$&EOrExq2GpL*VF_Sv&2u*u
z8JoiWAJ_GYEzBFp@V$(wM|9r0N&=b}9$&e6GN87eM`@Vu!!y3=r?j8*&lHOKDXW>j
z&*GONyWobgUR^oy*<`}GM)5Jk3B%}isD&1HlE!06MfF2QvJa#qsrg(MhF+}_lrDp$
zpsH9dm?Mc1)PJtCrVk`N%d+g*;|16H4?+&u6!#j6*0jD!Wtl*=|9
zRp-83jYZ4$+F0gnHOKJUh!*H45@t81KYHY-%_&Bn5Uak9oI3iUx*Rs=wJ}$=)slGD
zTnWm`2Yv7ggSFXIj8rlVjVMQHiCAo=3Oyr}GB*;n)
z`l%2(ZHjIq-5Z8@wym!w2#%;p{-!@5B=|*Iyq=}sv6B_6k)pe0^+ZTE@-;{)wCJUh
zG?l6xWxM*1Mmf-imnTi_TCandL1xyPSf0Wd(FH2X^QiW(mC}!HR>K6}8>qkspH#Zb
zCH;PQg66kmao)FsnZ;X_&7^Xa3!jwADE_pLTZb%KlJZ?%gVI&zxri?3y?cW0tJW7s
zQ_GLGD;-#Z53P^e%GAydXj8HYgM7>ct$2#%=dtMp(gLpiyt7tN;~YX2;m8pltEWLt
za9P)RKsEdBp=Y@VyDI30h#)KND)A?%1dAq^Kv&iCR>_RASDv(jzZrEs1~c(t_vV*L
z`!S}IXLww;?_1>vjKruYT)c)qRrDMB_j|4ljE_*A(oaK-HnI0~6aCaz+)jsc{ePJXHV{qmbBu%>!+Dbk{#&f+DafkB9@AUoLLBr)U-s^X5!zv*YWS)V_5fCNC0FUVhx
zgANcJq%$3D)6b)##x&OUHE(}G5`-m^!Du__vqtQ4
zszVq(#>X1}f)>J~dv(It@99+7VV|cACwYQL$xry-M|T3pM%}DO&{Oj8mRqAXB>sIv
z??Eq0BAY-GnKrndPj!Y@ZePfa6fciJR>dD5dvXnYP&E?NLreb)Mp{Ic`@|kK-f05FCW_9Ijs#?t;M4c!3b0{PS0Zg)n9?pbTWq>G#!a5s;R0k5d^}-%aM@-Sr4~H)vLewrKN~Qj>kj
zW9=;}$?ojywGv2S*RSr+xRE}xF+?-j%egbAaKS|?;yOYkXSF~(
z&v$jr!Uw{N)7gB(twpk{H(_)zkEj*$&S|jnIj`k=^R$phEJ&=8h`u?KwTQB=I5yp>
z{__<*Rw)V#^;}0wLmrH|jIVLerc#sjRUe;+BAtXvKAj;%-a9Sb@xAr`x+~y5(j^PO
zyo@)@b^Peo!oaEQE02yjU5kV{y}BLfvRfB(0kK^xMALmU6IMb1rCE*;Fz@o4@nvSq
z(_QN?mY{6gam>lCn94{taeX~P-&wNL%4ckBv4#y~WRTMG{&$5`18*`rYBkQ>fN{xd
z#-(z&fFgTBQaD>BUYsywG;>SOrY(%zB(qCvK*+Q<1=o5{e64gER#PHDd7KsbVUK&D
zb+)sqBJpiQgvjKxJB_lGW?q!4-}{^|SD~cT!6OfgruSjt^Odm#`r8-Gryfuo@0m$4
zi?>e1)sBc~)i!mv?x>|cv-7~FXi`dV{)wkRO9iz@)pJhQRMkv98~Re5h|?}FFSqe;
zyr*D`g+xpWKQs+S!;mowZB|b|^$dXGK|1-Y^3zvr-!V;PtF%=ot!A&xIOQaHUU8nF
zsmfJ{Yfu)Z&uz-)lybs_^`|P_ZE8w&9US$i^WcG35!*upr+VX~YYHfi>9ZpeSA!-c
zzVrNz0>HY)b7i)*V$
zNj<}?Yo+p|SISnxfWw;n?Gcx{rraJ9&zwB6kJQj&%dVx?SZ&ELI3BM&8kuRC0U8wg
zs>Y5--yETwh_22-o6}g7){jw(7K``-Qw78QzAgtq->0$)6Af`-fOVkMNg}l7q1ya*
z@Y8+LfeI?b-i-iJ#kXS;3*eDyy}vXJu1DV1x=RPNp4ey7_B*Wz0q|Fx#)$xwsy&%5
zczz$71%Qc3H_4Fq-2V)eiuB{R2tQKr;ZJOdBC+E&zlPZYDoFoUVe>9VKM`x{1CsVYv^
zO==lRvK?01LueO)&nJ}xX+f0f%sBi=Xq*@oG$=>vQz?fA#&-PeLD-`{ACO`HZ{
zD|u%cwFewKqv?`OX0#=w#khzvpQkm)gszN~Ers9HVnN@Eq5%up7*76>d5v;{xRi|n
zedBsCpr`sst!&98XtlWW9`W5RYXEv#hBbF6c$ALZ*ii|+0NQha(A>V9A7cSS+&$U_
zzYD=SU_?ZlhH*AMAyQL3GvvE>fP-=ad`_C*a0Uj~AgV+1`y*i}yvJ&EQKtiKzl%!K
z`?mWs=7>0;v#8rk=^Z~;F6a*ljdH@F^A
zg_O?TSJ%S?L8pKutcOWKksfYJl`qwxVN*hvsN-QUt_&77&?$rV-tRoKW~G(y0pWx-PSupJN683
zcIz>UUZ%`!(_+5v7nZy*qvHEzqTy#4J$0$b;eZK?)G1*_3Mi7R%G|;RM?BucDrfmJ
zRh~vL`h!Ts3PE;5MDz`Aq52wN5u)esxSQht4X{cC6WQpLZ6V
zb!qM}aZJKExA1|2$Y$YvP!iQ9kcXez<%K2q#YC@YWM_n?DMl@i|V-5%&(%iB4mH
zV-kNmQqyJm*9=UyuSAPaG~hN=_-`*kbzGlegQ*GMp_&9`LZD;ZW0s;uc^T}$+!${UK;w{8@I
z_tll#3*YW{DP7&L49Q8j3GjoUAGmUo9IrU%=@RCXUB^#Ta2iQ8YiEo%B)u38q=BJg
zb1HCd1OdSjB5SkiH==RhG|`!xVJ*Yyf&w(@~A@vFSaQR=2R4JyuM%
zmVCCd8g`F&R~#)WKbi6=oxRF{RZ*a$v(G;F#5-l)Nr0dVfm+RN_qfd>$j*IfS5aKi
zIzx;Erz!Kr@dWBS!}CSenin%%FA~zexePkPXTWizYm0IqetL&_43E-$Z==n71{{eX
zOQk!v@NT6`W45@{!K)#l@}5ma-;J`*ZAUww%r{8#RV+^C)FV6^>7c9|Up^?>1X4NW
z@pfvwJa&S7Xm-K$h-`|8r}ggk#wtkZ^?;7wr2Of0I)V$KF90f-f+SY~$X#B0AOXw=
z>Z|~}z$2XT)l?2{MZ$IYlIsuiM0t@zt;@RAa&Zfqv
zcTiDy`B+k6=4{1u&MN4w*P87uw&5*RGAzeECth-~AZoEZ1nX1CAsG>T?l&Is%p(Eb
zNt$e9^I&iA^VmukJutYDHJ02`!cc7*&oJ2mokt5o+cnf|x<#)g^*pN^#F!~1w@LSs2XBY3)o;9?GH8?
z!_`!mT=H!4YL97}Ilnl3y!$REvJm>Z`%#eb)
zOdS3jB=xsmbSY4>IV(}|*(JDz7JIC9Ca4u(5%2pH#MTf(JFyc7X%$%N*L_<`y`>)0
z0dbyjOxq*6U?qNGqzv@f-%7b;0suUj=3=@pL3|L>Iu0D)hzn|!3xd8kJQo3uUU{{J
ze=2MfS@xd;Nwe7vopTZ3aI+*xu1!?I&U*Avyr4c**FUC38LcsTN0#m42jR2PBQCdO
zvn!2X6M~}-EmhTav#YaxPw69y-$4=-r7le++pSTlHJIG9$}m2?I*%LC}g;v4n(gR#0!Jq?8qk`axkS1WPt9memOow?{g-I;Br
zu7e0LLp(;ED(oyYQ`~Ae+JP)Zoz^TU)=m5XI!<2`rLA`@?}0-BJ%Zp=a7a5q{+Zx*
z&>YzZ4r6@QgymK(U8`Jf6`F;UF-(Cr$Q212%`R-Ub&wG40sOEAN11cXCRdtJJ>bD6
zM#6y&oJfQ6=W`X)mognQM#!&tgNjz~!tl#%kRooBDt;&)*t<1fGq3rW#(joUyCbcM
zO4O@r;!!9$^8U$FAN2y8*eaXBS=v)j4BtbhEQmmqC4RnxuW|bx@ulsB
zmmeMTXd|hFINS;h;XD(F%e@zvyD#}KPPGQ4E~@p?j6T|aSN@b$FTY>1
z5c1sD!O_hXctTC*ZoIBp%SINQQD5@Os&7%0rUY(CNAlIWfuYCI3QKO@sFP{&`d$`5
z3Z5D+N|3|AL8Igs1FjQE+3>+?zK%3gR7xbA_b+W_V&idJWAN1P?q$kiFP53)_`%7MfIG~LExxJL!WKapd1$J
z@I8>HaI=PwAR8QBG!O)S4?rcTy@0gwV!g{-yA#?vBzo?%yl^oe1BT&aM)BB~MzOEX
z$2Nb{m3MdJi0KY^vT_)n>1x8X+$Y$r~eQ-U7+((ef@HtIp;G
zxx5VE_XX4J@+63i<zI_s!
zBkPIwt@)^vTY*`&vW;>&h;t7WCp98^q;IC3!CU9^1|dkdo&IM
zo7^EtWCc+$v=KX$=P0vi*M+9znsK9b+w_YpjU7o18U(R~cngsAtekQ$|ybgCAJxc_EzsBQ>)u*_+
zuKquw&N?p2s9W2llynM%bVv#)3?0&`B1m^gGjx|AJ#8Nk|a_Qkb?BH1zl
z?27N^6?p~_xMc*`XVo9A`FMv@eGBkPdon;Gj(JM4L#_=vw#n)+pMKMyiT}<-xA)Pn
z_}GQS7m@BVUtq#EKmgbI9_b!$!n-2}f^Xaoo3OU}Sl5@_Jo4R=F(DFDZ5CoL-7BYF
z#AYSj(MZuj=V&5{F|e=;tlj6%j27&>u!Wxm68e=8uwE-nD!QFim{`2}#35J$!kkt%Goa@f+{Z-<))SL*iwJ+*(S{OyV|0%s|!950Qu1)66_*R`OO_
zCGY0#`b{WPhOApUwHhz+x}ze6R;{(>88L?YN%-HVh%9{vTXleYVmy
z35o$iIB*cv@fpI(e!8sbNq{bZ_i+gFR#H+G`~*am^I;6>B4(@auWfa1xKu-={jJc}
zlQs4wU%XKOq2;InwePX}&`g3k)U%sJ@o}7YzCpM3=f~Yr1)^|)lDcxnCe}gi-)Lpb
zFfIzkldrJ#KwNDO2}x6rtS|bOD0s9tf|Xto$wqw|45BEX@!@Ps_o@94--s0*@G7ip
zyYk7bm=&(st~a;?7m#URikdE>%zC*1d*$I%DRdtqjzVFJpp?qXj_U7m`le?b1XW*q
z_KgXD|8qycFxy(TOFklxL|=Pd&~CkalBZjFM15-ZLSzA2dEGk3Pd7p
zyCEAkbxYF=Y49F_=**Z@QGm*f|$>7V5=$_X<<5Sky<98|J|AQ2%Zbfl;XoS%pS
zAW-~4jc9LiFTl&^8N@5FTxu~W0Vp>hh9MFii+}vm3#~EvltVIQKqT9Lt`tvm@_A8Hsek-W+c@p
z#b3U$IoFmIob?LEgNHQ(3LFm(X344cyr8Lff!vP%
zbx@U1NDVq4rq7L9SSkXEkR;|2i4W3`b;j7HA1A{0t)G4Z)^n
z8v&F7(Fmzk8hTfJkWl3-3|W{-Cg4O8zgF9NeQC;3yc%fBG;8bqq*PM+8G=-{;`ZIy
z>*ka8)M4Jo0y6&qLb&y?AM^-EJ3$zUfNRcJd+_~!YhiQF^P1Y%Sw`Du86{Hg
zj|^2PBn|W|D~&`G3s+4-Rm7y4HmD3xj9tlZbVdun3TdK*$SBko0$>E?tV%^{P5ckM
z@5kT7@g|32(X?k9-7`+;aO=muhg!QU20nC}DH1s2-9?_*!Zx;eL_5&o_}a;l&AIwL
zQsK4bae#!BcJAj3mV-`>j_zW{TXw(y!xo9;lm~SX3BG?d$c{d*XCLqpfe5
z`sq9r(#yrq&?|AAJIZiBFjB3J*;vH>MX0x0yNe9a#vy!
z2*f~nf}jb<>m3m~j}S9W5v!#A3)s;wxvTLf>ay39Ibupv$l$Q)ODqg&y!>1b#%ikU
z*n5Q2eNvC?5DU+Kk=WYcHABf9b>V53(J<>#oYNNfLK8
z+eVW5XeAzMT&a&A>9=~$Li>>fv9mD-#s8w7WsV^_B1GIPwm2X_iWFZ~(X#kn(WLk6
zhk+iDD;(O@4WwW6TQ}P5@Lm86mW4)_!^Y1{dO!z>69bhN%KMSb5h?|yv)>-cJl2fq
z!`x14xtbqPP-+2e`!Zq1P`ZMbMK~IDa`ctJ*}hOxw`^$=vf;(+1*PB{CfxRtX0iS(
zCVIW-sP|W-Q_<+xZ|sLu6R8lVMXy9oecN1zzvL!IIb|W&C%3KWxK(tf0wk{UAKCzr
zjy)&CyJyB<{eaZajF3_BL?hNK$NTKJQ
zyWU~L4J2^MI^!#7Q>ogzb0Zl$6joZjBR8pudg4QapPwZU75@U_rB?ahuPNgMkwhDu
z;G!*eu{8qqsz)4JxnF-i3{FhLG`A^^svTnp{%F);$%D>~I*#k*6Ih6Iva7H%5J>v}
z+5Lfx?8}MwkSkgoF_+;07j4w3xHY~Z$~Agroi4y=y6Ps?cT-;h2moUPy*-%iK;@=U
zSQMhT_&NhHs{u5kl5HfhJ-1=;YFb4(JFo3@R}YK$&`7A8$yR8D0{~Lc%mqtZ6LQ2l
z^-e~DpPufI5Br!hFL;sSQlbJ-?-WSWd`E<@FZS%lvV)lJl7PD{Z2|
zW;T*>=&kH~`$#{a|BrOA*&DN55#nB{=)m?+Kn0;7f-B;XF$MAvMgn>A4B;}M=c=4f
z85B-E@J>+F6=38;Sr)jqwyIb`R9`4*q*rCE@0*^R(X&&PPSRTwe98{DQMf+1;y+!%
zaIPINs*|V`hqoNw3ZgAs9l4(j;EFz5v*U`uem5ojxpRI#7WKaFh1(SJv@d!XnsrV(
z3*_fVlDm1zFFj1u*vzwXYA!pfzwX1l8;N#pN(2CR>Cg^G!e8X(cT
zot%t6xvMzh@%U_!=sGC$>#+f*gues~+Witrp;>e`JnPWO-dx!$Zy$U(x_WU&$o#*C
zno+WKSgLhps5g-9GOQ^i~;R~^GZ7-Zy=fUmKs!@)-c9aX^tyQahTRLcZc7S
zKwzi;7&!oWt0Hp=>m`*LrUYe2A5|dRw08f^>4vZZoB9IaKxrMn2$w?%l0$KB1;j%c
z@6+UvY;xP{Rr8fIre2E=l6?ef$%9)TRou9s2FLAxO^X&EXCUt^J_;ma0mYe9r+$<$qge5#6lAT_
zg%nYK-OaA9i$YH;q+uWiqm=aeGJkIZt2pL>1$J<1jLvxh(#Yvk`(KAZXE1jLE$sOF
z%k3^4!9ho=U#n(_BUykHoM174L%v*!45*}$C|fl$2y1xe@WO#$-_S7NoN$KjC9>mU
zN3hV_fXATSPYB1}pQ#(OJ-dOiKOeD@9WT1vVS`LmmOa8L?af>lD(B3u#F#Z<&v&}jq@XN1gtOvV7W*6O
zc`YosQCMU>pS-P*aoD0FxC9k8@D=QMtVO|EcZ=0Vy>lF+y*D@`vYM#OTbjN`(q3us
ze>~D@7;ZRvkz;4ou!33YIO%imar8ylu6|59lHyp+c^*G_!PGp%FgSf-p{IT-Sv}R(
z==h~?ZoC0!)CL>hnEuYEZo2Z5A=80XC5OYh3Gf%$0C#jN1WQ=s+v
zC6@d(E1SCR%4dorVv?DT?`WQ-$n~PDmSU&fTVlS;f<<-iQ?e%
zV_(zWmfGLi*t?5WNtE@Tp8M{L6&c_jwe<>s@~6u8>m>xI5ojQ7@6
z^MPxRChywQy>-~a&caHGZDh+mM{1jazs<3cnB$Y#(VWVRLvyFn_)5L0-{Ipd;nuI|
zYZ{=1*~k!<=%-iO@aoQlpAJe|pM*p)(K*Hv@C;WnjH&8fbe_@WwVGz*EG7r`k5`gd
z^395ID8u*P`d$#AZt)*<5b>$H!Q9|XEd@>!+5ihGBL|?xQU~;bhR&C^9PfHptUJ3#
z$evA$^U$r?7J)YK=|iLi>(kf`sH$P~n*XmC?;ff`G-WI7=Bcs)ry>l!8+#LA`P&qK^HeG~dwEg`5Z&vdFPiN1U%t*x2@hX+L0v^pP0S62mjvqX
zt*ah!%eT|QKTz^vSi7`~Uk&UN7GFIx251-vI?s0LIo^}~Z0K7IT2j8+1KqAGxZHO|
z%`S9NUBOOEha>+46Ha}~bA3*2CN4ts9!)|IrKM4pp(w?quX!
z#Q1?rrDvqHH4DTn2p$r_KGzr{3oW$bKW)eiYJi9GO(2jHmGq?~cx~1GL%aUZNPCTx
z2F7fHOq1e@5SiIiyOm6SH=nmAI?Z<4uJ1H>UwWL_lv4dRrUB3#w)A0;SbP>`V6W`
z&^`|TKG&C(cS_`%OW3LdI@%dqfG%^x`+8x~{XEU8)5m3;A!$BeMbtvHQR%lJrFZe;
z+oOb7=;bT>syYkX2hZb$2r6^UL#^l1jF04HRi%Ve--RHH-6gZ2+OIMcyq48V7wvD4
z?~8_yj=Zl*J=LT5pC#_i4#)(XXWXafyj>Rk(TY)UArE<;t#-$rzpm4dzen7^Sa(~?
zy_VPEdGXS7)W<2t%C=$Et7%LVN(Fi>9!h=Ar)+ularsc@C>-u41p}7I+p6u6dqInz
zk1$~qxV2^)k(VJMLu}FE;mOi?j~^cz1~&iUXj&L_;#eP2-p8dab*)z0Yu38#q{H$}
zihKR$+(Lh$!gi$HkW$ctkVA(Q53T_%#%BIikpNiLCdb(eEj&u>a?PyWkfNh4K-C0`*
zWqrV^pm)T%Zt32Y>dA4zijwQ)brqJfNFU)AF+SX(ME2Mx5v&}QI?RHAAybsn&HHIoRtOGem!n$(B
zsKuD85y9Q6kfsG+!ftssU8&1+45j5sgvh?9hZi>0=MY!Z4sLuCu7x>f$L>s
z&bCKr%N}nrPQw{y(eC1J9H-Qs;T?zE^GuOZLb&6KS65+DjKLqadMe?w@*1H-MePA8
z*eAJvwO-)L7ha7q6DvtwBCQM
z+aEc!Ks&BzGS}_#UTe+IsBL@FJFw}YaQmb`;!X2v;FM@vqWUmKX0F_->`jG8u%LP(
z_-UwtbZj}4%Ilj|J+^;{LvfF9qby&2kfM{EzvY)A+w`jggSxa8IN^Bpehz1=ljgB>
z9#KiB-Ar9so7vR#$|x`Y!AU$kOG5?Fa!kj3Z4;(}6zK
z9`>K;dXA!xIH{paORK9NM)z!SuS0vg|lB(vZ1VfB|X@E)FsNJa)Hh570JU
z&nKz~=-v?qVSj;rW_U;dY{(&h%b?(phpa6!z-r(S!N9LMz~wVwQc3sM4rt_$2lPwE
ze#19$JIDG33&|F{_@P4_>l=Nr@gIgtAHYU(50$WOxtxyR3;Kf>D35g|97mc00KWc_
zL8Vug9Wh8l$R)y#B{R*>=GPj}oL9E@8|O??N*YNUKZaB3c?TWtJXltJnw70P#MeC-
zg?i3Ylk&}S`ZmBwHx?h=4FXP}bKeve_r0!<1a0n%N^7Pl-bHw-8jpzps>PQdcBKQm
zxmE~@Gd2E5zM%fSyK=O4%@c5%O?&m`Stb{6<`STfohH`Jkr6I)4MWnZN*CC})uJXF
zHKIeq<r*9dzP*K0WgjJ%#aC{
zgWAjiF5}#FPDU;J=KfFCO^mYhlqwLPGhwLnymj1l?Ux@f0O^i>JmBDW`;*(u(84-b
z3nb5M_lDxMiEm!DWyihjOosOjf6x20^+hWaI{)+(qNK!RQ?^~TbG>heHwBc$!++JnTPKJugwAhn+8ZE*?HO?0H9&~lr!M+ECdaodZ
z;V%a8jflgEj1o~$%|80SOm%^kWB!c?4p8WQ3dW)%MAiA$Cs69M3
zK(-^y8~6%6(K?p@`-pXT@2=Q=qKlTlmu(q*{PDg%@1BOK18qIl^XE%DbU_$*HsM$h
z0<4Z-1K478aTE?#HX(C#n7$644`YT&-iP+Hmo7jxYSrb3h}>-4z!9fhIZY#rpGwdA
zrih)M^Oy4T+~tD8dW5|=DDEl+1`@Ihy;H%ohB3>1)EN4;r08cD-|H~wimod8e#QV5
zohu@%=WJvTzvy#_I&djx$jBOETncxmu&Ms^28*jmF2q>Ue$)ZCXOs+Z!@0vy~j2_O)e3Ncq
zq=7=dwr5ASD^B{}^#mqiHxfOQUqnVY)|<9(Ye^%~27)
z;xYDIgo^+)g``#OUxcBnl9?OXQlbwp{Y@Uf^BcW_qzy`nj2$boT&pqq7M(dSDPGZh
zb@ukTXP-9MP_iDnoL0DtRnYm-i<@S5Pt1XYisaUsdK2@}*fYuJQMJxBD>a<(p`#aH
zZiZCo#D=t@ql~Wvb5X7@WP@T+xYc^jp=tACV!TnYaXV?M*4;K%@c#Z)tyGlbgr#al
zIz0r`g&%ds-;)`|@MXN6R$24vlD!3>8D*RAo^^8>B~O;en*bFpEeg1s6keiLb0+zA
zeUZ~Tp7xx$GpjO5!o9D%g{q)>gcL5hVi08XaC6E~_lmGaRhhrL={cktfYJZ?oUxUh
zK$d~)l?wSFR!_5v2QQ9)iTP
z#2ma^OUlF!pi3@Sbvx%^t|yygkAZtkm*pp)U3Ie&z=m?ySczsRU|VW{9YkUcE6~SV
z)2OXTGaizP?n;zHJ5p^0|ELj#D64^ZFtVsL=HG-k_C#X{Jt~^fX70E$0)afPP3^YP
zmhnEisBu~3SjXzGI_=&&YZKq5?LXH_$kv1Vge|_Vvk9mO8Ow|7?allQ*YR;4vFx@>Egi&Y}459h@RJZIJW9ujgb*SgMmm(6R^
z6z`8#R+1;6;6)C>^N57eW|3Xw{i$ch`zf0U^Nke>Dj$=mMf-Gfenv(}W~y!NT-#8M
zZtYx8cv3{U=vF0bv&XRLuH-)CfXih&Bt}mVqkMd>K_FK8=RI>_db!-yL*+clQLk4W
z|5@q`6cb0^l<+6bQaa!Pi3tOsO64Dt*Rgud8ve=32yxKO^ma57REgmLr~OoK
zaqS!N({ly+Y2~(59~SnCL?BA)#YtE3LEc9_2gtDu%ORE)G^Kn^dX1Dfa$Q>+=wuv=
zNNND~a2VG%wfbq^)~i*Yzl|Zr#ea%nA5ZSPy+e-in=~{5UdDlUa61DFT&GUEwYb)v
ztrS(#%>el|#hJZD2up}D+g3H=ub+RO53t)SMNE3}%E;%%n#w_{uC$QB;}@Mj*X>?z
zK0n?+Q!HZ)a38VV$W-+Wlfo}XGQs&Q&V3uiZmraImyL5B?fHr0$ik`&RTY=(@|upddd=gA(7=F!Og0Ye6n8j%
z?_bMff>DX>+Zw|y>Ob+qYMXhzFot$RVc$;72w3~h0
zct9XHs&rCH!996@K1N7a;_s=fP3iE5aJOz=S=-hy=_R@K#P5+4Nzc)<`#r&9E!=CJ
zR_;wb?THpX!Rv!9hS!D!(SOpB7wvx7xhp$8VFZKH%56SzP=zlZ!%XV<9cDUQw=Hj2
zFP;AdYA=9=He|2iTF%DqJfPfM|Bs#6f{qJbMX+n&C5A+d&;_Jof2?bYPyLi=tQQj4
zzOH3GYqjoE4X*v*Z(Yg^g5O<)4we=o|fu0
zL6Z<|yTg2~hXiV{4Lv`%DKrn-=ht7qTzC6w?%v%mFDDJ!@bP!koe}=3VNlkvtvAvb
z{=U(6LH7WDTITU;hncRY^&47KsZ41sJ4qrrmHtF^=0d4*)F028yd@`j`86W%8+J?)27q-!iFwpM2spW-NxqlDg#xYo-6T29Z+M>(BrSlo*Da4N@3ak#aSq;lK->J1By=6y^ZOJxMYfHFPep7b5I=#l`?_
zc&%=lty?ZPwi2DRs!pqDruv04v;NAy
z&cbkm{=>!mvu@=B4%+_Zgsdp|P7|JF>exmvMuoB$noIiYZ
zGsO2Q(Y)2}W1ExE)pmN(`1cVg2Y#Jr6WIulPnv0sRf*nbyA9{*nkLS+cZP!B6SpO|
zsmd2h|Fa=U{H~F%FL0}&QMub?=~bzWjHIz(XrI`hR}DXDZ1E|oP5-`^)<
z-Dx;8C91TYvDEdIs)d53(_Zf}=Jtgdvz6C1+~3{`zR(t~3*cG2-EF)0tIa#988Bm8
z7e3_j$y~imv#aQs*StV@xFlIIm8%8j5J4fM#wXYHXtd`#ad;DcKZnYc`Gt0r-!9%!
z7p6ZO72%)PC>IRnwSeVZO~W&1;kLy4!wPrqGh)Rm4o^KMyI5fhrQV#i$n(c$GKY0#
zuAn%i*rZj=*gxqXGJOgqb(jQve=Z26{;>(AwTNc03*LWPvM>J3`>*{@Bc+h_KWE6|
ze6Tjb5k8>U@{$XA{~8I9Kwqjxm)*1I&y?uooZDG_Pu$2EX=`7Ax$M5m7hGA~t%dh3
z6=ymU3+?~m$k3M30O>pJA6_*&3d?RfdL=p1kqbY)_q08s=B(B>C!L0*H(D)(AU+CQ|3EGd$oDKEYbhd|Gd?bbu#P7*IN4m9W#K;kR
z{uYF1L$B7st;fuuf34P9s{IPizT@~1T2+}bd;D2@lNV~cVClFpcYC{hHA;6iUyinD
z)`*w~J3Stbv>+wbG{Pd4L$$J<{2>&$KQ`QA(a-k`QJ=j${IcCRInzDa+G3}_FlG}i
zxW8w0sJs0$Naf6iRL`L4xV!~*U+N^osV`3t7D_%k?^BZtB>b3gQ$l(E&2bVX#;#|2-ncCI;Zq29H?W~VcMeZ(uEO7i-^WAQoL
zZqe>q__F%(^4iFb=k+Ic`<2z^KQ4@(KAJY#R@*MiFW`?ZOWpfWFQ}?#0AQZo$jiYB
z5&PA=xxO4#UsvX5yPLfy-+EN!rCZ01WBXQ1%GBD|)b^aL&X6i8#zxo6t)G?w04(
z??UPH)$~YxcwTRGJ(+UOq{(9~h*Tc2J3m^9S0j4bv7;{(spChY!R~TPQyn6DrX;O6
zJ<9=^xvIQd&d```-*<2}J%_=Jpx{BM#2RU(G(?Gasr=QC_!=K+q2jOBt2EpwsWG!L
zuQP_m89PND;id#eRk6>)sV~8qlsjo7JwGeSqR)~juVGFM7zh={YXQXA(t?d{u_gzY
zjQAbC_`HFJMqfn*M?>Q~7+EkeQ2xQ}W0%@YdW`slnx5tkRP|`$NicBGRb>+2W}8Mk
zBw0l_`%5sh*y@RnAyfGDKq*tlow5E?NWogXx0a&rL^4p$ob|W%8&5$&mDK+snt|FV3}CfLa|#)lB0Fw&&W
zjw$a{hlLn-s^H^)NDM(4s5EV`yE6J#ry&;OZ2#N7?LB7BkBKMSDyqVlS?-h3T)95kAJO2?z
z8?G+B84x!DX?tn10VW3HHTM6xmpM#%Hp>NK7tzcSGgyEg;+5ZUks9}Y?9;kkbH
zIzDojjX`Iz;hv)F%dL|>+|Euq=>HQ=H#&tAT)ae1)c+}--kA0(
zX|aCL`#g%N1^R%Xum#8obSjZ4Sy|L&**amY4Dt9#1crO?V}?;-5_uFFh!}7su7kou
zqR&W+^r5jPe&eu~7zXAz{{O!+*XIo~8Zf11AT_z7G5$|E(uZ|iQDW!983Ta%
z2rndvGd=QFcN}N;Q8Z#q6>3rxyJasN{BN+ZJflP|x!S8Kj`6hnvzgS+mIV7YHqJ1;
z7XfS2zO^xIF4a3(Prmqr(#k|fxTRB~)ZO0<4P;lX7n~5(60Lnk=5BGUV@T}eg`Q=v1ImX4v
zZ@SOZiQNb^Ag3Z~tXHS%p?33Qd5^HEPEHL+{K9(9K&+LRkAWCsvjO3ru&pHhBh8aX
z4DoEZ-!a6~@UtH?9BD|2oTEz^(!-!0^Jwb9IfIg?pU{iUbtROyh$pFhc6zi>
z!pJx4WcaVHFs>$GccrM!I{?uL`0he$atPjS)KHm7@~tWVnh>H=FBjn2(bJallL$Pw
zRqEm%=x4ZM&MrQsKd|t6K5GNb{yEJ9Z_c1GI>JDzN
zldadYyU+cABAz+JJi|&oOT%z2W9vF-`zZPY&M9NJkZQ3&N5CUWJ;tdWqy2$<@>|1z
zI?Jv?B96~YY4!m#Y)77=l)Q8z88(9kQvVo
z?6N+hwFL?710&Sf%I+&3MgDV8Q7rf~=NMLrCY!7@#dm9iT-*wB1R7w}IWLxvylXSU
zDIRtwR6HuezHdE_Flm=j+$K-Qye=w|%sdpf3*E=wEENO2cCTtA4`LbwmF
zqh7r|5clkQRgeBi!UhY{%Tc!xyuR76j`O|-#*qjvP$oU-%h+3wP}o*`zV_|>4OBDX
zKk?Zz8_3{FQ9DNa)pLvqe~At&0LAI6Id7e#tKlQ*_3j@#4}cV<1@XH3G?SzJ8o+^X
zYg*2I`QgjP$*L#Px&TABi-2!R@T)TF=Jk$1U(xzPK
zfG|$<78(h$?}&O;aR+#k+*`W(*jyl{h<2d-06@gvs
zCnuNJ6ym${pfK1{Iwjo;jlb6R$_P_|#`PJ-cBy7p!m#l3VC8L&RyHnD{dNTSiM;HK
z?H?Q
zAk{vElOKqV!j0c%v7mA&T|AP-?8Iy*^(fd-E+eupM$s)q^k5e_>PO>m09ltsw4WZC
z6Wrq&>973$r(5ZXEq+%7T3B@SBz-raDUfBB{hho43?af41zc8x9`&-(foOJ*ntEc%
zE2)FqXds?XweE37o7VclhYzL;(exu{LhW7q9-9BOgmO4r&t3)gA8Oq)P7=cUIo&ME
z8uwV-`xxPfCwo5ZNX>wIqQorG*hJ1_ivimI7Eeu&jDpiqz<$svuI90qY4d9Jk+Sx#ZR)${EDBxGZPYWzd~8Q#rfc)Tnh&`hK}pR+
z5)V4KCrkJBgdp4l472W;mE=>tr{#_jEa(WOM~Rn`OVet@xl%g+zy-)D@^5m8X4a@{7ADUN_ImfAlE^}Sr18aB*C}2jj
zGJySa#vlJN5Kusdgfy>`(e;jSxskmqy$rc=-#5ECEA
zFJSV;y#)T*NCQ0%!LckY-VchdsJc{@Mtb_#RkV;EN2y-a%GC*uH7d7aj6B&(5Z%6O
zx(ULKoHv*3Qjy!rN%?6dQr1n6JKjllz%N(h&IULqc$oLUZ>IH#LhIt{t}ZZDbk4N-
z&*8CCJ<{aoztMYqdh3HH&i$zHX0StB>SljUyqHPUxhdLey8Lpo@rhf=bf4m
z!zWc?I3-B?tlfF$Ctvz#P|lM}hUVoo#rR^E&C}Q<23q}1F^|#=R3_QqbDg6LpwP#DH>Q8G2lV0qZjy%)%
z$#P6F4!Ll$%}iexZte6tn4kW7p>8J@Hn^wvtkWN!Y_;g%zT3{V3UVhHNN2AI3GN0g
zZQaN(+6@#f5K;Ea#H(FU%MU`p&%`Mff`7c#t73!8YsbHN3fH1x!)k
zM#)O}_#1H7*%7FB%+TtoFU=b0!7xg))94I!(!^cuHa`6|jjw-l$}mRYt+@BI3W2GK
zz16d5=Q618p~_TJ?ch3(!3rsa&BLPK&+BXdvw5d=cC8$KH{49>&r3|NT{{`g
z6b89$3hFGD$Ju;NgDRu3%5ZS@=N2w@Jz|k(1^c50kl~_&70*^_c*>nLCm`G=*ZAA%
z&}S;wuH)BMoZg2*u2)X&*XEpxiI+$)s)k#}7=J9NXo^rDXtty&PKIP0g;^`I2R-Fz92+rV0`RGW0R@Lm3ML27Pz$Tr1APEvwzg#;r4=XUMcr|X=Ffw4BQ5%Hp6^+;oGEOS#KYqDqDRkc`teT?Yct;gQ
zY4bD9!$aEsVOf=M5XYC^s)?&t&tB*`PGx9nSYgR&8|$x#a@w==BgebLG(1sG_l}Cp
z{g%~ah;r)Bs&*mv15en7v&gZR;{y$);)Jwk3h)OK5@2dl5b|D>@Uw)YMO4+`
z^f2jh+lo)HyTxRSS^gE}6AE;NQgry8z_s0P`NtQKC26T`?GDJ8l-@ky`X!P^E?x7t
z_-0lThX1Z7FlXw83Ks+xsEQDX!9}|m%*hk)g))j1AG*!(Ix`Fp!Lo4mBPE)B1Yh##
z3j{72iAgT_cSRdJf}N9_^{KpN0Y6d|9(_NAcBeJ^Y77tKToWhdwyF-qq&IeI=7lx@quL3H(Ow_H--FJ-Xw_MH-f;g`gRh3jO
z6;b15Plt(3TT;+{iwH63d4@lH2ylI0h;BHY|C|^Nvm|aQd&S1pZMzdt^nGUKwvPX@
za$sov4QKLDdXk#x>dh%>e)0l5iZAYI*D1|;{gKLrU?IQxR$ba&=;>DO@0#2*H~aO%
zjJ1=|kFu84Yk_Ay`-gUz`OspN2=9We?%ct8;OmTqlKsr~(=r@p-}74S!L=ymkaH3i
zfn!W)IEO>}D9L{x%PLb*7ODn0>i_)8203_X5$WOvf&>$9n`Qb++ztYq6;KITuQgNu
zRxgr8h1*4VwjVgzqw&mRED1I)iJNsQaHe*+3hFB}3fJ|~>e?S%-+i$kG;kHVD1YTK
zB0JHEnCoX8yQ1YHI&>kjD|uU0veE9|jnPy;dYgSdQuIRL;X(h8th*s`prw$YO=Fx>Jzhl9df8}*7VJl#QY4i+C?J;
z9@9x#)d`Fe`Abll)`wU6)@56$W+^0V|-L6t9^*x2*4=3N4
z{7-|aW>UW%Q_;=j25g`bW^%nxk98KTv83E)|KhYv3?kLt6!^vd-ydc^;PXYqAx`W+
z0l+a1>iv~a3o`0ApoGd4qgDVWnBAdAY~7la7I}zSyu%_27Hl&AWPdP*+x>XX9--35
zL}0_57mxKx02=!dwm=g8?X#E^<~qf0byDaR*v(A@VH#
z)C_o2t(A|>sBbo?;Xg&!ajGIG)@;o4Q3^jp=*v6h+8_N3Regoaz=Vw7NKoOgO=D4&
zi>ADo_3dAN%Q`Gx*ka6VaBK-?M1IGZWo5v7Mu&?EZ;%(g*|*`Fjwj0LP_`6aU1j)1
zml%ffr%XAAx*tN4YAtHlofy1wtIn=tAVT@Z}KA2YsvQHF}^GCkH&jpE^T
zS@EVm5+?LHn%Feu8?pi~UtSzAB9OI@c6-I-kLu^X!+Ghi#ehm)tFjgGr&D^iC&khZ
zSul>;{wtSC3hH>RwO0ZU&Nmi6AxAyaS<};aq
z!x-p0!DqaZ(l>=kyPmyN7e%k;2Q*j3N!e!|rZXw|tlJntZRF`_;#a{UW@`
zDc>FoDwA+wYXxNe=Vu&pe!y_Hg{soNw(ZFN)8{t1jtX-$H{m>@v;0j0Tmvy4zbK@8H@2HJnKumN
zU+l4m-UAah>D$Ri6+)R1=t{y1!ZE=a`zYtC=kdHyKa`(32)4TRgR_2SN52$_#8Q7C
zIfV?ofbyKmrQ|D0PT=&5x3VN2f7E84`uX75a1CiAz=$ac(2YJ
z5bSpSTw8;|Z={E>oU^K=Bgy+3K7PhPp+W2yA9s#6m#OHxI#;)L-{f9N;#uKlP5Vvm
zN#!fSQMX&;E^F{Kp^~C2NM&VN{VfH)3ct8r7Njuk4`5$LYM6V|PmJJo5u{YS~!Q08|RT1L(
z{NDh?!gwt&1^9P@Gq8^{xZvd>3*%5G&)Eiz=S&eHL4lEFSS2CG(fD+J1|vIFE-Zw8`v1sDj~YybFcb?o>-8*~ixSfG_ET=?*=PwHGK^zS$#QtHU$P2jT5v(SYqCEW=@1{mBrk%%NKPrzw)vM3vl
z<6FwC8+Lk`w&cztJ=>HXnxzC9J5CctklwZ5W((gPTGYy(KLEi%Si1xDyAuRihd_Uy
z07J@;PspI!zZsaEwe{6cK;-yzZdSX5mKcQmDKEU
zvl)^a_e9`l#e}Lfx25z_sEem@oqF1WIQ8@dTo3mqW1Y7Aw{b^!Gqk^L^(PRBDlIy)
zkSU``7q>VI&W?0KAh2Y1MEIY2bv08-_p@3*|-TmoiE
zB(I9~{c#K?$#V-4ob3|4Tat}sUwy&ZNdRl}rSx+R*+jx5NVHhXA`x8MxZ5tyP;-<;
zTC@sA1^FI3zAMs4(w(@)F_USOTjO6Ai=0>dmI9g6S#jf
zJda}B_5ePy?0OW2s~Ar2_s*SWvQhG+8>4k!IWhXsVO%hyH7#ML+u*g!-85m&BQRJs
z6_{<@i`9urszbf@YLL%vSxAnY9ucox(c$$k${+Ooy*{a6G?5;>YQ8CK0r(3hdXi-_geEFwx
zo%-jgpa>B;*w1zND%4@-p2!}@r{KZ(pv#P
zL!n9A-jJ`a-G&jzZ6DrdYyi}(dn9--8)0UILK>Hx*B4|&5aF@n8Lgg)51Jq2Q>uL;
z;DVKPL(6b3eG?dKw7Fi5BjI+l=bw@A1*t(60q&nlmOkJuu1}GFPI58-9b~s`Q=df%2v7=*n_D_%2vVXZ+^V(0Y1B18w)&~^aF>|65s-9
zOp^ECo{@KZ|9i5u(fSI!3bMFEW98eUP~6BPW+YmI*QT7`=ctkiGvSCZ`=l$gcLN)U-_T{l3W4=%mG^
zXAOPc14H>{3Exny=dqQ`?#Vr=ZC)pR)@uFR+aMRd%OJ!a7&&VYoqsM_Lw)IYOy)q=
zPh3H>-s?+p^4Nua3g9Mb8EjRgO<_C%^rQ
z8q?9JkgL78__=5yE_t97;0YQ`-$v%h3Rt=
z7Fp=G?V4?CtrjOIt!G61i^5&xFrhgKZNsmB{qHBE*99n-5S*|h3fr|x
zC7cIkD!DCM-~2zy-ZCtzE^HefN6DNX2I-XU7ElBUDd~{z
zPC;M@DJ7%?^jqWoJm2ws@4xroeH^#L?Ad$mwXW;D&N#VS+v4rbY2Y1W9yIDyu$-RlqwVAaj*X8Di4+!h7wiR#!=t&)s#WS&-|6WH}5*f
zy?n7J>6U%Qood`
zFQyKgScCs~_$H%yr8(Pl>48Z=SNc(G6nZ~4olij~nBUaBeWHtNo!kjh)UANf{5dc{
zA@i3jtBG&J^FrfKLgY2trJUUc{e`c#`xTUZtAVT3W&Qd6C2V`Tj5iyjs?CfhK(Ts@
z6bs~7mcdaLIC=o5#ZfHN>r+7o6m$LvI=}bNT7BGe7Bq*;srMJkwJC`o;(qsydHU?<
zif3C{>!?Vn=Dx_J0O`g-z61q(;LWkpv`;4m!&s4mZL(}p=P}r*T|ttzg9mWIdO!CB
z{TVZ&|1zA$g-=W7*7Jb5q)+^uV+N~789dk`gSiuXy-{@5XI1Nyxf*e=&g1e55wOdX
zTicscpt5?L8d+&?sBLF`%H~8+YN4LW2GG}j@xiGH
zZBl1~Jt=Y2*^B%Vmlcgx|#_}z~eA_3kvp3Ug$OGQ1G)^`G
ze{*s7HqM<vq%J%0Wz
zugk;;r^$BEjB4UIqvu;Ez@>n>VtdN$H}I{op#zp;r(l-H
zs!QxpL00w@gw~*zZkg4I^?pQEyU_mA3cmd`Ucr5+D=#9`C7=UVA|3RsV-;M&&GW{U
zk-vXVALzLcb8D1*Y!FDz>1bT}*nknrnfWodqp`9n=BCW#?c+R?@6HV>^v7#d!9;YD
z3t!#)X>Bf#)~6^?x#tbLa#y&9=)n0PlcD_*7{2ji+`&)S=2Kx7o>Q5vs2qL__LW*4
z&h_KEF0^6WT(30Wqb}@Gn{4NMtBT^Eo{+NPy2bX)S3G+N@%{SQU3WQ+paXcBDXX7=
z=E62rHzo5cb2YHiqBfETuInbg?WIMeZgwfZw*j#`WN_*uuPthlX@x-*z4_$yjpQ3iz=R7C}9K
zExzTi8n)q7aoiV6Ej$zeOb1S$*aH5dAVIFW3s!&0C;z{$xd^yJ!rz}ke+9u-{>dJ6
zjl0W@Rr++FqBa6nos!@tKI>tJtgK@`9<1jX9jU4c=*+nBY6|s#8&zLruo@%XXLwDy
z#>IA^3ZuKpn&N|XE*~?$4z89oRs8@LBLMt0hzkP#-d?D^t|uVxKeY+@x-o!Zh6I*#
zcxB+;ZE9K+9&Fd>J=4VR*XV%c4koi^0}H~ZtvvvtaUwPR
z>{i&c_n}-J*itYxi919u`^FfVx#xX5qi%83{^_1mpGgByL62kuuBy2RU#{8h>|NMy
zx~?C}Ps_Xd*GJQ~iPTPzYQpTE&u!cgtIy^x?wW|lv7PMS*7rkq#vkfYvfbJK8VL=h
zm{&Wqq%#=3LQ3%bE-AVGKKT}?bEI}$E&Wne=^vp(toKsM;>jp_K_$L`^63cQPpMGsTiv)Kuw88fLsE?f
z0Z*?&wE_U90B9kPfA+(ZyRRxe$$HjXA2DWNY5?#;e=v-S-zqfpM?E0Wq14z4)KjN60PJ+ta
zu__bz3CsXL-%oZP959~d_a8GS&TT7%U#k*7#ET~@9#L1D49Rt3UatK1`)ofu=yu=S
z1~`|fH!ym7JxcBb+rJa=MuF|VH*i9IxiMV{U;bVzd0p!+H3c*sF?MFbYCPDmj|v$Q
z2L6y?DT=x%>?IhuCu(lQ*$bQg|36l-_Ib0e0$XB{qtUb@?Bpc~S;;_ITumnn=6Fue>3hMYvN+k;{CDApenDh)to^esBmBYc)vZGZr)bq
zhWmc(Zo1{y$J*oWUxm`JJN&9oiH%}iYEYMk4GRRA!zgIN6**BdHv!l-@-
z9LSmuYc3tP=Zu~op5GuJ{7sPmLw??YLMgsMTt3ioJ^R!nM?(&WV&BLA6%&FOHeYXv;JbFWJy6^I4pdQ19
zj%}Og`NrQi|BJM&PVlcg>JDwB29o(Gecl5DY5Um^sRKmglDud=k$No7pqjZSrbn`o
zYGB3>Hf`Y$Y@&Nr!a~kVLLR^;F<MBVeAW;A1NVj%vZ%>x=Z}IiKQhzB{z*$=|-r
zH|^wcngyLfBQDe@5<^mD3&*Q1nkFZs8Ni+GO?c7c@x3eF5RF00wI%TG7B4OAaWSe2
zE^JZ;Xd~t?jZA?@vh=hScBiVJJAtz&(^~xA9k6zDcfU5(LSV8h($@!Yo|XdvT(!?P
zC&O43lW41E*7fz@w^HE|bsN2*!1+ija6$;Gy&eq2GBL
zLL|+G$P-30D%)R1Az3YDdB}@zLElDl#Pm9aJI_H$Eeh;*GwfHI>nprE5oqCaE2!!Y
zvH{uxSsz@n2s?2EiS&kub0J3$*s0iB8Oh98yuZDADQGuA@6mVP
zHlv@;e*_<(7^It!eh9o%iav9{<>gNvh(FLZB@-ur)77BMePA4mRvLy&{u}>pJQ;17
zA*r^T373iz>e7=@bwT#o3ju^cly!LR^fBEUP0fV($wMb@CTdR_3hXzLDbPn24s}
z?D+zqpvCbLrjI=Nwp0v8k_N3i(LVlT+rYCsi78L9@==#N<81S8(TUgsGksbQ*QEFD
zy&-dPx7frk2~_7K=zC&)l_TT#%WjgrrrSs87>Y3!N#c#PzM@^#Zyof39mj55F+KJL
zuj+He*a~!!^aSunCSpBLi5vHsJJzVi`QaN_;YTCg57%kH|1@zMX+6Tg@s3Kz>4pJb
zFsDi!#Do%h>S~Sa{PpwXLEW_GhAC?-=3=vR)-gJnWK@9Xr*S@(
zTAoNL=k<7~XJ9GPxc@M4%gIpE-k?kx7mW4jieXzbPWr!_>~S^v)R7@NwY|m)fSIH0u}0APAYDDH8}$rPaiPLP?P##$Dc!?hOu-FT
zv?7z?aXuR}bf`Iyn2=6q8-47){;PiK)3zA9PYFe)VpX?;4T3alqD+rAW8Y;1YlDWU
zsPH2{vLZRI3+8kaM%>o}x#@(wFqYM9VyYj=usd|ep=5t_aVVOrPI4ta_?~VV{Nyx2
zzxob!8!@0A!y3nHw*l{8&p|J<`?{aVOZAD&T^;aaHC1hZ)U)j(y9oPH-p2ixN
zN+PS`{btqp8Hb<_?s<&7+A`vRAHC#&vE0k@{Ax
zth6{bG2
zPbQlvp~;)7I9TgC`U7ZCq}UkvBYDC97k|WJEh8A9Ne{h7246v-wrWgICzW`?+L+v@
z_ayvfN!J|tF!#UjFCLm6JWcy=N_=`RW!116_5Fa~BOsef+pN*-6)(t4N;y(Zs9lW-
z@G>s>YwUp?i{%cEt%+2yw(4_bR#c8t{`)+#ti;;wqqtT$oyRk9<4lSvrX9~L`t{wV
z7aLHwJ|d&+=QXHhIm>(436x?j3I_#J_}>OVnHSj#A1{hzz0$^uJ6_p_W@Z%T32x0^
za_uua;7%{b>)Q7gfEr9?Xm2tj^u=uK^!GCw8E=B7@T3^0bp15iomVx*pr%n-$6
z!0r&c*7V+c&Kh>UBBaOAG{C&~=(LFc`A~|smj1s9x&lQhVcwH})jmBaoZoviJLH1g
z?Wq|Ap}~)?(n3h@Z+kko9ug%cx2=*UrsW4;El-t@cO_F&RM1-|cU{2QF?Ci6WXMxk
zL|WV6z~|B6SB@>b-wVvMSqoCa8NaHX-d$qQ^H15gYl~G%X_%Q|#ex#u7f{TKoOsa;
z@~o$V$J8iIJrfcAG_I{WOT5X2DCZzm1L^G|FE3z{u;rTM0m~=8e*p0m@1KlCqK?TF
z1UjE!WBSl3bb9q__g%gSFyT&F2BCx;tJdOclcsO7%02Om9|;xQs}fVBeM;>g0Ct2@
zkOetKQ3VjmDIrYWqnoSKM|lq)$FjjAY&FL7qzDiXq!e5p5+gh^$j{q{di?cI!`ann
zC0a1`cS;%+$f2zIJ9R@?kcm%8TAvZvqH6abg(*hUtV(
zp0jWDjDdb(bge5y0}Q}15$NX-4{*2($58U#OZX1<{qN{zyWhPx6O~lCbt|zX!R)cl
zGtB??Y#z(561e-4Y3&uOBx6!xM4}~PU=xy8kHJvY6)0@q9O1!ODi~)y@Yn9N{;Z!j
zEA`kJLm!JEph+Wx-AS1%Hy8(jlA=?%2~6~J%GdVIi)d?!!rLex~8*e1-sZuMd71gCtJh4Z=oz(o_CyD
zeSWc}ie_6Uhbo&!K-0_H>74D{KtivswgpN`L&>^2Z?7)?RXtf@I_t>uLBtOp(`Fo4
zAhXRmI5G%B+8)w*Ru{WC8MYnM9kH263NTeXiKo?+=lO;PcT+2Ye2tA)b=8!?MKp@%#o-XK|koV8-9i
z*T!Sh!+!y&LkQ%4RficwJSq@WN)%{EBKA`~0btEMSNozjDjwzb9JRy`WAEo@g9`bm0AKBqqnKY0|uZ
zg&A^_W9c0G<-!d(2Yn*195(vae}aa~=45j)8v*a+vLpt8a}q%aHnqj8-IDY_xcIi{
z{RZZ*>O+koL*HIqnAQSBK`mA$&rF{EQ!w1MK3cw$Kkpd0qu^=Zf;X5+2*WLQ#|LzV
zHv1nN)6R0;x^YR{yM{4a$I3KTy0Tz!%H8aeTVDjTMXdric%he4Zf!i|z
zVkS6&=iOmF=_)_y1I^bihd8TJK6zdrHs;6b;N$t5v%`48?;-h>^!>T%rc_u!$DCX?
z|LKV(CN=>z6Rt3|V~+as|Gj)4U=y(oOz_C6SZW&nUVr=BV;mhpPQ)?G4CxM)zBzOa
zO175jCO(29-Om8;-G_NK(}BpREHj-r2IRZM^v~^!-BHd5UH&$JITPIy3MBgves%mg
zt0EnfOC`i{!-w>>+)ZHqL8T>v8%sPGIuJ2LZqk1jeg7OOR+@yxdq1?KI?qab;aauJ
zoxhIijTpGy#|fGOP5N#*>TPKs@y1D_)T
z?_d;d4H=^0fq^rlq~{K6@V^r-8#A}pi{QiQX9u33b_(bYZ;RpAsEcT=K?tR!it1pp
z>?GTBKfIV}g@XpCeakbI;f
zDa5RMMdbu>A$_mc!3>n|MV$+|!13{Rz4P+Z4Z15)8RWMcb#^h*$R)$^TnU4rqQvjL
z@BG@ewL8+M9JFU{n3bmgJe4OSqRt}Li?e(gCB7qcNMFo^OFr8k?Xb%9olDbEn}(Xz
z8Ed@!HFE7a^=@R3&WX2LA51m_CYvsOxrTu@$h3FVVr8A8#1TuHnWLcYg_bn